ࡱ> #     ayMIJK \ ^ vZ7 bjbjUU @7|7|}B$3Ol6 6 6 H    $, PT$, 7lp{Lgggggggn 1pg "g5  k555&  g5g565k >vect J >R 0?, T6@>Rl07lIxp#p>R5, ,     Chapter 6: Swing and Multimedia With the availability of cheap computers that support sound and high-speed animation the concept of multimedia has received much attention in recent years. Many computers today allow you to play music CD's, movie clips, or even watch TV in a separate window while you work with another program. With the recent introduction of DVD disks a version of a CD ROM disk that uses advanced compression and storage techniques it has become possible to digitally store entire feature movies on a disk and play them back on a computer. Java, as a modern programming language, also allows for adding some multimedia components to an application or applet, and third-party vendors are increasingly providing Java classes that allow using many of the standard multimedia formats to be used with Java classes. For example, Apple is working to release Java classes that allow embedding QuickTime and MPEG movies into a Java application. In addition to supporting multimedia, it has become apparent that Java needed more sophisticated GUI elements that allow for more flexibility than the AWT introduced in chapter 4. SUN Microsystems decided to provide a more flexible and more capable version of the AWT, and since Java version 1.2 SUN has added a collection of packages ad classes called Swing to its JDK. One interesting feature of Swing classes is the ability for the programmer and in fact the user to choose an overall look and feel of an application that could be different from that of standard underlying operating system. Swing allows the user to change the appearance of a running program at any time to make it look either like a standard Windows program, a Macintosh program, or a Unix program, regardless of the operating system under which the program is executing. One can even choose a distinct "Java-like" appearance, which has been selected as the default look for Swing based programs and applets. In this section we will introduce the more common Swing components and learn how to create programs and applets based on Swing classes instead of AWT classes. That will give our programs a much more professional look and we will have several very useful classes at our disposal that would be difficult to recreate using the AWT. We will also show how to convert a program using AWT classes into an equivalent one using Swing. In subsequent chapters, however, we will resort back to the AWT because of simplicity and downward compatibility. It is always possible and reasonably easy to convert any of the programs in the following chapters to equivalent Swing-based programs if a highly professional and customizable appearance is desired. We will also introduce some common multimedia techniques such as loading and displaying images and animations and adding sound support to programs and applets. Finally, we will show an example of creating an application that uses sophisticated and resource-intensive drawing techniques such as "off-screen" drawing and "rubber-banding". To make it easier to switch from AWT to Swing classes we will contrast corresponding classes from either package to highlight their differences. That means that this chapter relies on a reasonable understanding of the AWT (chapter 4), especially since the general event handling mechanism has not changed. This chapter is not an exhaustive discussion of Swing components in their full generality. Since Swing components are very flexible it would be beyond the scope of this book to describe everything that can be done using Swing. Instead, we will focus on the most useful Swing components and describe their most likely use so that the reader will get a quick working knowledge of Swing. More details are available using other resources such as the Java API for technical information on the fine points of Swing or books dedicated to Swing. Quick View Here is a quick overview of the topics covered in this chapter. (*) These sections are optional but recommended (**) These sections are optional 6.1. Introduction to Swing Swing, in short, consists of sophisticated and flexible GUI components written entirely in Java. They include everything from buttons and labels to trees, tables, and split panes, and they are meant to replace and enhance their older AWT counterparts. They also provide additional functionality not found previously. All Swing classes are written entirely in Java, which means that they will look and feel the same on all supported platforms. Older AWT components were based on native code written for a particular operating system, which meant that the "write once, run everywhere" philosophy on which Java was based was not necessarily always true. Swing is actually part of a larger effort that Sun announced during their "Java One" conference in 1997 named Java Foundation Classes (JFC). After the initial excitement over Java died down somewhat, many programmers and especially software companies began to complain that AWT-based Java programs are not always "industrial-strength". While the general language philosophy for writing programs in Java was widely applauded, features such as enhanced graphics support, drag-and-drop, improved security mechanisms, and enhanced GUI elements were not found in the original releases of Java. Also, Microsoft began to develop their own enhancements of Java that would work only on Windows platforms but would allow developers to create more robust and modern programs on that platform. Sun, with support from other companies such as Netscape, therefore developed the Java Foundation Classes to bring Java up to modern standards of application development and in fact to set new standards, particularly in the area of network programming. The JFC that were eventually incorporated into the Java 1.2 release consist of several components: Swing: a wealth of flexible GUI components that could be configured on the fly by the programmer or even the user to have a particular "look and feel" Accessibility: a unified framework to support assistive support to users with disabilities in using Java programs (to support, for example, screen readers and Braille displays) Java 2D: enhanced text, graphics, and imaging components for two-dimensional graphics Drag and Drop: support data exchange between Java programs and in particular between Java and non-Java (native) programs In this chapter we will discuss many of the new Swing components and give plenty of examples showing how to use them, but we will not cover Java 2D and Drag and Drop support. We will also not mention the Accessibility API for lack of time, but that particular feature is easily integrated into existing Swing-based programs. To Swing or not to Swing Before you read through this lengthy chapter, a natural question is whether you really need to use Swing components and what the pros and cons are. For one thing, this chapter is not used in any of the subsequent chapters of this text so you do not need to read it before you can continue with another topic. In that sense, this chapter is completely optional. However, programs created using Swing components look much more professional that AWT based ones and the additional elements that Swing provides give you a lot more design choices and options. It is easy, for example, to use text formatted in HTML in a Java program by using the Swing component JEditorPane. Doing something similar with AWT components would be quit time-consuming and difficult. Swing does not necessarily make your programs easier to create but it generally makes them better looking, easier to run on other platforms, and more complete. Since Swing components are written entirely in Java, they are not restricted to a least common denominator implementation across platforms. Therefore, Swing components can generally be more functional than AWT components. Buttons, for example, do not necessarily have to be square; with Swing you could create round or even star-shaped buttons. Lists, as another example, can easily contain objects other than strings through a flexible View/Model approach. In short, we recommend that you use Swing to create all of your programs unless there is a good reason not to do so. It is straightforward to convert existing AWT programs into Swing programs, and you can find some guidelines below to make the conversion process simple. There is one drawback when using Swing components: Swing has not yet found its way into the JVM provided by Netscape 4 or below, or Internet Explorer 5 or below. That means that applets created using Swing components will not run in these web browsers without help. However, a standard solution for this problem is to install a Java Runtime Plugin package on client computers, which is available for free from www.javasoft.com, and then ask that plugin to run Java programs. The plugin supports the latest JVM from Sun and includes Swing classes as well as all other JFC improvements. Sooner or later this disadvantage will disappear altogether, as all JVMs will eventually include Swing and the other JFC classes, so you might as well learn about Swing right now. There are several other caveats you should know about before starting to program in Swing. The two most important issues are: You should not mix Swing and AWT GUI elements in one program. While in principle AWT and Swing components can coexist, there are subtle problems with that, and occasionally unexpected behavior will result. To avoid problems, use Swing components exclusively for GUI elements. At the very minimum, the top-level container must always be a Swing component such as a JFrame or a JApplet. You can, however, mix none-GUI AWT classes with Swing classes without problems Swing GUI components are not thread-safe whereas AWT components are. If you create programs where GUI elements are manipulated by threads, you may need to implement your own synchronization mechanisms (see chapter 5.3). Since most programs manipulate GUI elements only from event handlers, this issue does not apply. But if, for example, you use a thread to manipulate the items in a list as well as letting the user do the same, you must implement your own synchronization mechanism to avoid corrupting the integrity of the list. The following table might help you decide whether to use AWT or Swing-based programming: ObjectiveTo Swing or Not to SwingCreate only stand-alone programsuse SwingCreate applets only for Intranetuse Swing and Java pluginCreate small applets for Internetmay not want to use SwingCreate large-scale, applet-based programsuse Swing and Java pluginCreate mixed stand-alone programs and appletsuse Swing and Java plugin, if necessaryHave large applet collectionconvert to Swing one by one, then provide access to both versionsUse commercial tools such as J++ to develop Java programs and appletscan not use Swing unless you upgrade the compiler and JVM when it becomes availableTable 6.1.1: When to use Swing Overview of Swing Classes Like everything in Java, the Swing classes are grouped into various packages, prefaced by javax instead of the usual java. Table 6.1.2 shows an overview of the most important Swing packages. Package NamePackage Descriptionjavax.swing Collection of pure Java components that work the same on all platforms (if possible)javax.swing.borderClasses and interface for drawing borders around Swing componentsjavax.swing.eventAdditional events to support new Swing componentsjavax.swing.tableClasses and interfaces for dealing with javax.swing.JTable.javax.swing.textProvides classes and interfaces that deal with editable and non-editable text components.javax.swing.text.htmlProvides the class HTMLEditorKit and supporting classes for HTML text editors.javax.swing.text.rtfProvides a class RTFEditorKit for Rich-Text-Format text editors.javax.swing.treeProvides classes and interfaces for dealing with javax.swing.JTree.Table 6.1.2: Selected Swing packages Another important part of Swing is the javax.accessibility package that provides support to people with visual impairments so that a programmer can include accessibility options to support those users in working with Java programs. Most applications using Swing will get by with importing classes in javax.swing and perhaps javax.swing.event or javax.swing.border. The other packages are generally used to provide support for more complicated classes from javax.swing such as JTree and JTable. Since there are so many new features and possibilities that Swing offers we will use the AWT as a foundation to group classes in javax.swing into three categories: Code-Compatible: Components that have a different class name (usually the name from the AWT prefaced by the letter "J") but the same or very similar methods as before. All classes in this category have additional features that are not available in their AWT counterparts. See table 6.1.3 for a list of code-compatible classes. Enhanced: Components that emulate AWT classes but work differently to support the various enhancements they offer. See table 6.1.4 for a list of enhanced classes. New: Components that do not have direct equivalent classes in the AWT. See tables 6.1.5 and 6.1.6 for a list of new classes. JAppletJButton JCheckBox JCheckBoxMenuItem JDialogJFrameJLabel JMenu JMenuBar JMenuItemJPanelJPopupMenu JScrollBarJScrollPane JTextFieldTable 6.1.3: javax.swing.* classes code-compatible with AWT classes JComboBox JFileChooser JList JTextAreaJRadioButtonTable 6.1.4: javax.swing.* Classes that are enhanced over comparable AWT classes BoxButtonGroupImageIcon JEditorPaneJInternalFrameJOptionPane JPasswordField JPopupMenu.SeparatorJProgressBarJRadioButtonMenuItem JSeparatorJSplitPaneJTabbedPaneJTableJTextPaneJToggleButtonJToolBarJToolTipJTreeToolTipManagerUIManagerTable 6.1.5: GUI-related javax.swing.* classes without equivalent in AWT DebugGraphics DefaultButtonModel DefaultCellEditor DefaultComboBoxModel DefaultFocusManager DefaultListCellRenderer DefaultListModel DefaultListSelectionModelDefaultSingleSelectionModel GrayFilter Timer SizeRequirements SwingConstantsSwingUtilities Table 6.1.6: Additional javax.swing.* Classes that are not present in the AWT Before explaining how to work with many of these classes, here is a preview of the look and implied functionality of some of the enhanced and new Swing classes. JLabel with iconJButton with iconJProgressBar JSplitPaneJTabbedPaneJTree   EMBED MSPhotoEd.3  EMBED MSPhotoEd.3 JTableJTextPaneJEditorPane Figure 6.1.7: Look and Feel of some new and improved Swing GUI components Converting from AWT to Swing It is fairly easy to convert existing programs based on the AWT to equivalent programs using Swing. Typically, during that conversion process additional features can be added that make an 'old' AWT based program almost immediately into a better looking, easier to use Swing based program. This section will briefly cover the necessary steps to convert older program to Swing. We will group the AWT classes into two categories. The first consists of classes that can safely be mixed with Swing classes (see table 6.1.8). The second contains those classes that should be replaced by equivalent Swing classes (see table 6.1.9). CategorySpecific ClassesAll existing layout managersBorderLayout, CardLayout, FlowLayout, GridBagLayout, and GridLayoutAll events, listeners, and adapters from the java.awt.event packageActionEvent, ActionListener, WindowEvent, WindowListener, WindowAdapter, and so forth.All non-GUI storage containersDimension, Insets, Point, Polygon, and RectangleClasses that provide access to system resourcesColor, Cursor, Font, FontMetrics, SystemColor, and Toolkit Graphics and Image related classesGraphics, Graphics2D, Image, MediaTracker Table 6.1.8: AWT Components that are safe with Swing Note that Swing provides a JSplitPane (definition 6.3.5) and a JTabbedPane (definition 6.3.3) that can easily be used to replace some layouts and add extra functionality to your program. AWT ComponentSwing ComponentNotesAppletJAppletuse getContentPane().add instead of add method; JApplet is part of javax.swing packageButton JButtonCode compatibleCanvas JPanel or JLabelreplace paint by paintComponent, JPanel and JLabel already have double bufferingCheckboxJCheckBox or JRadioButtoncode compatible (note the spelling difference)CheckboxGroupuse ButtonGroup insteadButtonGroup can group check boxes, radio buttons, and buttonsCheckboxMenuItemJCheckboxMenuItem or JRadioButtonMenuItemcode compatible (note the spelling difference)ChoiceJComboBoxadding items is differentComponentJComponentusually not used directlyDialogJDialog or JOptionPaneuse getContentPane().add instead of add methodFileDialogJFileChooserdifferencesFrameJFrameuse getContentPane().add instead of add methodLabelJLabelcode compatibleListJListlists need separate scroll pane and data model different from AWTMenu, MenuBar, MenuItem, PopupMenuJMenu, JMenuBar, JMenuItem, JPopupMenu, also JSeparator and JPopupMenu.Separatorcode-compatible, but separators are separate classes, not fieldsPanelJPanelcode compatibleScrollbarJScrollBar or JSlider or JProgressBardepends on the class you are usingScrollPaneJScrollPanecode compatibleTextAreaJTextAreamust add scrollbars manually, event listener is differentTextComponentJTextComponentnot used directlyTextFieldJTextFieldcode compatibleWindowJWindowcode compatible, not often usedTable 6.1.9: AWT classes and their Swing replacements After replacing the AWT components by their corresponding Swing components, some immediate enhancements to your new program are possible, and you should take advantage of them: add borders and titled borders to some Swing components add tooltips to some swing components add images to buttons and labels easily check for right mouse click and double-click for use in popup menus add information and warning dialog boxes While conversion to Swing is not automatic, it is not hard to do. Here is an outline of the steps necessary: Definition 6.1.1: Rule of Thumb to convert AWT to Swing To convert a program based on AWT components to Swing, follow these steps: Make a backup copy of your source code and remove all class files Remove java.awt.*, java.applet.* or java.applet.Applet, leave import java.awt.event.* and add import javax.swing.* Change all AWT GUI components to their Swing counterparts as described in table 6.1.9. Generally that involves adding a "J" to the class name A List needs to be replaced by JList and associated with a model and a scroll pane A TextArea needs to be replaced with JTextArea and associated with a scroll pane; Any TextListener need to be replaced with DocumentListener Classes that do custom drawing and/or extend Canvas must be converted to JPanel For JFrame, JDialog, and JApplet replace code such as: setLayout(manager); add(component) with getContentPane().setLayout(manager); getContentPane().add(component) Import specific AWT classes that are safe for use with Swing one by one as described in table 6.1.8 Then compile the new class using java deprication Source.java and use the Java API to resolve name differences and deprecated methods. Add simple improvements such as button images and tooltips, clean up your code, investigate using additional Swing components for added or improved functionality and test the new program. While we will introduce the essential Swing components in detail later, here is a brief example of how to convert a complete (but simple) program into an equivalent and slightly enhanced Swing-based program. Example 6.1.2: Convert the applet listed below into an equivalent one using Swing components. The applet is similar to that in example 4.33, with some simplifications to keep the code short. Add improvements if possible and easy. import java.applet.*; import java.awt.*; import java.awt.event.*; public class MoveBoxInnerCanvas extends Applet implements ActionListener { private final int BOX_WIDTH = 30; private final int BOX_HEIGHT = 20; private final int INC = 4; private final Color COLOR = Color.red; private Button left = new Button("Left"); private Button right = new Button("Right"); private Button up = new Button("Up"); private Button down = new Button("Down"); private int x = 50, y = 50; private class MoveBoxCanvas extends Canvas { public void paint(Graphics g) { g.setColor(COLOR); g.fillRect(x, y, BOX_WIDTH, BOX_HEIGHT); g.setColor(Color.black); g.drawRect(0,0,getSize().width-1, getSize().height-1); } } private MoveBoxCanvas drawing = new MoveBoxCanvas(); public void init() { Panel buttons = new Panel(); buttons.setLayout(new FlowLayout()); buttons.add(up); up.addActionListener(this); buttons.add(down); down.addActionListener(this); buttons.add(left); left.addActionListener(this); buttons.add(right); right.addActionListener(this); setLayout(new BorderLayout()); add("South", buttons); add("Center", drawing); } public void actionPerformed(ActionEvent e) { if (e.getSource() == up) y -= INC; else if (e.getSource() == down) y += INC; else if (e.getSource() == left) x -= INC; else if (e.getSource() == right) x += INC; drawing.repaint(); } } The program, taken from example 4.33, lets the user move a box around the screen not very exciting, but it will serve to illustrate our conversion process. Assuming that we made a backup copy of the program and removed all associated class files, we need to first modify the import statements. Following definition 6.1.1, we replace: import java.applet.*; import java.awt.*; import java.awt.event.*; with import java.awt.event.*; import javax.swing.*; Next we change the class so that it extends JApplet instead of Applet and the inner class so that it extends JPanel instead of Canvas. We also change the paint method of the inner class to paintComponent and add a call to super.paintComponent as the first line (for more details on converting drawing code, see definition 6.4.13). We also change all Button classes to JButton, and Panel to JPanel. Finally, we replace the calls to the applet's add and setLayout methods by prefacing them with getContentPane(). Here is the new code: import java.awt.event.*; import javax.swing.*; public class MoveBoxInnerCanvas extends JApplet implements ActionListener { private final int BOX_WIDTH = 30; private final int BOX_HEIGHT = 20; private final int INC = 4; private final Color COLOR = Color.red; private JButton left = new JButton("Left"); private JButton right = new JButton("Right"); private JButton up = new JButton("Up"); private JButton down = new JButton("Down"); private int x = 50, y = 50; private class MoveBoxCanvas extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(COLOR); g.fillRect(x, y, BOX_WIDTH, BOX_HEIGHT); g.setColor(Color.black); g.drawRect(0,0,getSize().width-1, getSize().height-1); } } private MoveBoxCanvas drawing = new MoveBoxCanvas(); public void init() { JPanel buttons = new JPanel(new FlowLayout()); buttons.add(up); up.addActionListener(this); buttons.add(down); down.addActionListener(this); buttons.add(left); left.addActionListener(this); buttons.add(right); right.addActionListener(this); getContentPane().setLayout(new BorderLayout()); getContentPane().add("South", buttons); getContentPane().add("Center", drawing); } public void actionPerformed(ActionEvent ae) { /* no changes */ } } Now we try to compile our new class (note that we instantiated the JPanel with the proper layout as input parameter). We will get a few error messages: C:\temp>javac MoveBoxInnerCanvas.java MoveBoxInnerCanvas.java:8: Class Color not found. private final Color COLOR = Color.red; [... additional error messages referring to Color class not found ...] MoveBoxInnerCanvas.java:15: Class Graphics not found. { public void paintComponent(Graphics g) [... additional error messages referring to Graphics class not found ...] MoveBoxInnerCanvas.java:24: Class FlowLayout not found. { JPanel buttons = new JPanel(new FlowLayout()); MoveBoxInnerCanvas.java:29: Class BorderLayout not found. getContentPane().setLayout(new BorderLayout()); Based on these error messages we add the AWT classes that are safe to use with Swing one by one to the import statement and recompile: import java.awt.Color; import java.awt.Graphics; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.*; public class MoveBoxInnerCanvas extends JApplet implements ActionListener { /* as above, no additional changes */ } The class will compile perfectly and we have completed the conversion to Swing. But we can easily add a few improvements to our class. We add the following code to the init method to add borders, tooltips, and button icons: public void init() { JPanel buttons = new JPanel(new FlowLayout()); buttons.add(up); up.addActionListener(this); buttons.add(down); down.addActionListener(this); buttons.add(left); left.addActionListener(this); buttons.add(right); right.addActionListener(this); drawing.setBorder(new TitledBorder("The Box Playground")); buttons.setBorder(new TitledBorder("Move the Box")); try { URL base = getCodeBase(); up.setIcon(new ImageIcon(new URL(base, "up.gif"))); down.setIcon(new ImageIcon(new URL(base, "down.gif"))); left.setIcon(new ImageIcon(new URL(base, "left.gif"))); right.setIcon(new ImageIcon(new URL(base, "right.gif"))); } catch(MalformedURLException murle) { System.err.println("Error"); } up.setToolTipText("Box up"); down.setToolTipText("Box down"); right.setToolTipText("Box right"); left.setToolTipText("Box left"); getContentPane().setLayout(new BorderLayout()); getContentPane().add("South", buttons); getContentPane().add("Center", drawing); } In order for the new code to compile we need to import java.net.* (for the URL classes) and javax.swing.border.* (for the titled borders). Of course we also need four image files in the same location as the class file. Comparing the new versus the old program will then look as follows:   Figure 6.1.10: AWT and Swing based Applet to move a box The new applet works exactly as before which was not too exiting to begin with but it uses borders and buttons with icons to improve its look. Each button will also show a tool tip when the mouse hovers over it for a brief period. n This example shows how to convert an easy program to Swing. More complicated programs may run into additional problems, but it should not be hard to overcome them. In the next few sections we will provide details about the new Swing components that should make you as familiar with Swing as chapter 4 made you with the AWT. 6.2. Basic Swing Classes In this section we will introduce the more commonly used Swing classes and illustrate their usage. Most examples in this section will not necessarily be useful programs; they are intended to illustrate how to use the new and enhanced classes in principle. Once you completed this chapter you should return to the classes from chapter 4 and try to convert them to Swing components. We will start our discussion with the plugable look and feel that Swing provides. Pluggable Look-and-Feel: Customizing the User Interface Java allows you to choose a "look and feel" for your application or applet that determines how the various GUI elements will be rendered and how they behave when selected. You can select a "Windows", "Unix", "Java", or "Macintosh" look for your program and you can even let the user select a different look while the program is running. In addition, programs can be created that will inherit the look of the underlying operating system. The default is set to a "Java" look but can be changed at any time. This allows flexibility when deciding how your program should look overall yet lets you choose a look that is in accordance with the operating system you prefer.    Java Look-and-FeelWindows Look-and-FeelUnix Look and Feel Figure 6.2.1: Common GUI Element in Java, Windows, and Unix Look-and-Feel Two classes are responsible for defining the look-and-feel: UIManager and SwingUtilities: Definition 6.2.1: The UIManager and SwingUtilities Classes The UIManager class keeps track of the current look and feel, while SwingUtilities provides several utility methods. In particular, the static method setLookAndFeel of the UIManager defines which "look-and-feel" the class uses, while the static method updateComponentTreeUI of SwingUtilities ensures that a currently active class updates its look-and-feel. The Java API defines theses classes as follows (only a few methods are listed here): public class UIManager extends Object implements Serializable { public static void setLookAndFeel(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException public static String getSystemLookAndFeelClassName() public static String getCrossPlatformLookAndFeelClassName() } public class SwingUtilities extends Object implements SwingConstants { public static boolean isLeftMouseButton(MouseEvent anEvent) public static boolean isMiddleMouseButton(MouseEvent anEvent) public static boolean isRightMouseButton(MouseEvent anEvent) public static void updateComponentTreeUI(Component c) } The commonly used "look-and-feel" classes are represented by: javax.swing.plaf.metal.MetalLookAndFeel com.sun.java.swing.plaf.windows.WindowsLookAndFeel com.sun.java.swing.plaf.motif.MotifLookAndFeel Example 6.2.2: Create some code segments that define various user interface looks for Swing classes: a "Java" look a "Unix" look (the standard X-Windows look on Unix is called "Motif") a look that is consistent with the operating system running the class a look that is similar across platforms We can only show a code segment since we have not yet defined any actual Swing GUI components. However, from the above definition we can see that we need to use the method: UIManager.setLookAndFeel(LookandFeelName) to define a particular look, and SwingUtilities.updateComponentTreeUI(ComponentToUpdate) to update components in case they are already instantiated. Therefore, our code segments might be as follows (taking care of the various exceptions in one catch clause): To define a "Java" look: try { String theLook = "javax.swing.plaf.metal.MetalLookAndFeel"; UIManager.setLookAndFeel(theLook); } catch (Exception e) { System.err.println("Exception: " + e); } To define a "Unix" look: try { String theLook = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; UIManager.setLookAndFeel(theLook); } catch (Exception e) { System.err.println("Exception: " + e); } To define a look that is consistant with the operating system running the class: try { String theLook = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(theLook); } catch (Exception e) { System.err.println("Exception: " + e); } To define a look that is similar across platforms: try { String theLook = UIManager.getCrossPlatformLookAndFeelClassName(); UIManager.setLookAndFeel(theLook); } catch (Exception e) { System.err.println("Exception: " + e); } In addition, we also may need to force any components already instantiated to update themselves to the new look by calling: SwingUtilities.updateComponentTreeUI(ComponentToUpdate); where ComponentToUpdate is the top-level component that contains all Swing components that should receive the new look-and-feel. Since that method does not throw any exceptions, it can be placed anywhere after issuing a call to setLookAndFeel. In most cases components will also have slightly different size requirements after defining a new look so that the involved classes should be allowed to resize themselves. If the top-level component is a JFrame (similar to a Frame), you can achieve that by calling pack(); n In the next example we will see a complete program to define and update the look-and-feel of a Java application. Note that SwingUtilities implements SwingConstants which contains several constants used by a variety of Swing components. That class is defined as follows: Definition 6.2.3: The SwingConstants Class A collection of constants used by several Swing components for positioning and orientation. The constants available from this class are: CENTER, LEFT, RIGHT, TOP, BOTTOM HORIZONTAL, VERTICAL NORTH, EAST, SOUTH, WEST NORTH_EAST, SOUTH_EAST, SOUTH_WEST, NORTH_WEST All constants are static and public. The Essentials: Frames, Applets, Buttons, and Icons Now we are ready to introduce some of the basic Swing components so that we can create "real" examples using Swing instead of the AWT. We will start with the JFrame class. Just as the Frame class is the basis for all AWT-based standalone programs, the JFrame class is the basic component for standalong Swing programs. A JFrame can contain Swing elements such as buttons, labels, text fields and text areas. In fact, JFrame extends Frame so that all methods known to our familiar Frame class also apply to a JFrame. Definition 6.2.4: The JFrame Class The JFrame class provides a "standard window" with close and resize boxes. It usually contains other Swing components such as buttons, labels, menus, etc. The class extends java.awt.Frame and the only incompatibility to a Frame is that components are not directly added via the add method but instead to an instance of the contentPane. A reference to that is obtained via getContentPane which returns a Container. Therefore, to add a component to a specific layout of a JFrame you use: getContentPane.setLayout(newLayout); getContentPane.add(newComponent); Swing menus are defined using the void setJMenuBar(JMenuBar menubar). You can also define how a JFrame behaves when its standard close box is clicked using: public void setDefaultCloseOperation(int operation) where operation could be one of: WindowConstants.DO_NOTHING_ON_CLOSE WindowConstants.HIDE_ON_CLOSE WindowConstants.DISPOSE_ON_CLOSE Example 6.2.5: Create a "standard framework" for a standalone application based on JFrame and make sure that the program has a "Java" look-and-feel. The program should close appropriately when its standard close box is clicked. Since JFrame extends Frame, we create a standard application similar those created in chapter 4: the class extends JFrame (not Frame) the class implements ActionListener to intercept action events we provide a constructor with the standard validate, pack, and setVisible methods and an appropriate call to setDefaultCloseOperation we add the actionPerformed method we instantiate a new instance of our class in the standard main method Before instantiating our class we define the "Java look" as defined previously. Here is the complete code: import java.awt.event.*; import javax.swing.*; public class BasicJFrame extends JFrame implements ActionListener { // any fields go here public BasicJFrame() { super("Basic JFrame Program"); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // additional methods go here validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { /* event-handling code goes here */ } public static void main(String args[]) { try { String theLook = "javax.swing.plaf.metal.MetalLookAndFeel"; UIManager.setLookAndFeel(theLook); } catch (Exception e) { System.err.println("Exception: " + e); } BasicJFrame bjf = new BasicJFrame(); } } We do not need to call SwingUtilities.updateComponentTreeUI because we chose a look-and-feel before instantiating the class. The program should compile and execute fine, displaying a tiny window.  Figure 6.2.2: The BasicJFrame program The window can be resized and iconized and will disappear when its standard close box is clicked. However, while the frame will disappear the program will not actually close. The behavior we defined was DISPOSE_ON_CLOSE but what we really need is to call System.exit. That can not be accomplished using the setDefaultCloseOperation method so we need to create an inner class extending WindowAdapter and attach it as a WindowListener to our JFrame. Since that procedure is exactly as it was for a Frame, we will leave it as an exercise (compare example 4.15). n Before we can create more involved examples illustrating the various classes available we need to have some Swing components to begin with. Perhaps the easiest ones are the code-compatible classes JButton and JLabel: Definition 6.2.6: The JButton Class A JButton is an implementation of a standard "push" button. It behaves similar to its AWT counterpart but can in addition to text accommodate an image or text and an image. The Java API defines it as follows: public class JButton extends AbstractButton implements Accessible { // constructors public JButton() public JButton(Icon icon) public JButton(String text) public JButton(String text, Icon icon) // selected methods (inherited from AbstractButton) public String getText() public void setText(String text) public void setIcon(Icon icon) public void setToolTipText(String text) } Note that a JButton has methods setText and getText. The Button class from the AWT contains methods setLabel and getLabel instead. Therefore, when converting a Button to a JButton you also need to change set/getLabel methods to set/getText. Definition 6.2.7: The JLabel Class A JLabel is a display area for non-editable information. It behaves similar to its AWT counterpart but can in addition to text accommodate an image or text and an image. The Java API defines it as follows public class JLabel extends JComponent implements SwingConstants, Accessible { // constructors public JLabel() public JLabel(String text) public JLabel(Icon image) public JLabel(String text, int horizontalAlignment) public JLabel(Icon image, int horizontalAlignment) public JLabel(String text, Icon icon, int horizontalAlignment) // selected methods public String getText() public void setText(String text) public void setIcon(Icon icon) public void setToolTipText(String text) } The alignment constants for the constructors come from SwingConstants. Example 6.2.8 Create a program containing one centered label and three buttons. When you click on a button, the look-and-feel of your program should change to the one indicated on the button. Also, the program should exit when clicking on the standard close box. We can use the basic framework of example 6.2.5, adding three buttons and one label as fields. Since no layout is specified, we will use a FlowLayout to arrange everything in one row. To ensure that the program will quit when necessary we define a named inner class and use it to handle a windowClosing event. Here is the code: import java.awt.FlowLayout; import java.awt.Container; import java.awt.event.*; import javax.swing.*; public class JFrameWithButtons extends JFrame implements ActionListener { private JButton windLook = new JButton("Windows"); private JButton unixLook = new JButton("Unix"); private JButton javaLook = new JButton("Java"); private JLabel label = new JLabel("Welcome to Swing", SwingConstants.CENTER); private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) { System.exit(0); } } public JFrameWithButtons() { super("JFrame with Buttons"); Container content = getContentPane(); content.setLayout(new FlowLayout()); content.add(label); content.add(windLook); windLook.addActionListener(this); content.add(unixLook); unixLook.addActionListener(this); content.add(javaLook); javaLook.addActionListener(this); addWindowListener(new WindowCloser()); validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { String look = "javax.swing.plaf.metal.MetalLookAndFeel"; if (ae.getSource() == javaLook) look = "javax.swing.plaf.metal.MetalLookAndFeel"; else if (ae.getSource() == windLook) look = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; else if (ae.getSource() == unixLook) look = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; try { UIManager.setLookAndFeel(look); SwingUtilities.updateComponentTreeUI(this); pack(); } catch (Exception e) { System.err.println("Exception: " + e); } } public static void main(String args[]) { JFrameWithButtons jfb = new JFrameWithButtons(); } } When the program executes, the user can click the buttons to change the look-and-feel at any time. Figure 6.2.3 shows the different looks of our program. Note, in particular, that the three looks have slightly different size requirements, which are automatically adjusted by calling pack.    EMBED Word.Picture.8  Figure 6.2.3: Three looks of JFrameWithButtons (top: Unix, middle: Windows, bottom: Java) n The functionality is exactly the same as for the corresponding AWT classes, but Swing allows you to easily add an icon to a button or label, or to exclusively use an icon instead of text. Icons are small images and are represented by the ImageIcon class. Definition 6.2.9: The ImageIcon Class The ImageIcon class can load and represents an image that can be used as an icon in a JButton, JLabel, and other Swing components. The underlying image file must be either in GIF or JPEG format. An image is loaded using its file name or the URL of its location. If an image is located in another directory, the Internet-standard forward slash ("/") must be used as separator. The Java API defines this class as follows: public class ImageIcon extends Object implements Icon, Serializable { // selected constructors public ImageIcon(String filename) public ImageIcon(URL location) // selected methods public int getIconWidth() public int getIconHeight() } We will later discuss URL's in more details (see definition 6.5.8) as well as explain why it is a useful feature to load image icon files from a URL instead of using a simple file name. For now, using file names will serve us just fine. Example 6.2.10: Redo example 6.2.8, but add an icon to each button as well as to the label. Also use the setToolTipText method to define popup tips that appear when the mouse hovers over one of the three buttons. Of course we first need some images that can serve as icons. There are a wide variety of icons and other images available for free download from the Internet, and there are several programs that can capture parts of a screen into an image file that can serve as an icon. Let's assume we have, somehow, obtained the following four image files: new.gif  windows.gif  xwin.gif  java.gif  Suppose further that these image files are stored in a folder called Icons which is located in the same directory as the Java class file JFrameWithButtons below. Then we modify the code of the original class as follows (with the modified pieces in bold and italics): import java.awt.FlowLayout; import java.awt.Container; import java.awt.event.*; import javax.swing.*; public class JFrameWithButtons extends JFrame implements ActionListener { JButton windLook = new JButton("Windows", new ImageIcon("Icons/windows.gif")); JButton unixLook = new JButton("Unix", new ImageIcon("Icons/xwin.gif")); JButton javaLook = new JButton("Java", new ImageIcon("Icons/java.gif")); JLabel label = new JLabel("Welcome to Swing", new ImageIcon("Icons/new.gif"), SwingConstants.CENTER); private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) { System.exit(0); } } public JFrameWithButtons() { // everything as before, as well as the lines: windLook.setToolTipText("Windows Look-and-Feel"); unixLook.setToolTipText("Motif Look-and-Feel"); javaLook.setToolTipText("Java Look-and-Feel"); } public void actionPerformed(ActionEvent ae) { /* no change */ } public static void main(String args[]) { /* no change */ } } That's all that is needed to get a much better look for our simple program as illustrated in the figure below:  Figure 6.2.4: JButton and JLabel with attached icons and pop-up tool tip n Of course Swing also allows you to create applets just as easily as standalone programs. It provides the JApplet class for that purpose, an enhanced version of java.applet.Applet. Definition 6.2.11: The JApplet Class The JApplet class provides support for a "standard applet", i.e. a program that runs inside a web browser. It usually contains other Swing components such as buttons, labels, menus, etc.. The class is part of javax.swing and extends java.applet.Applet. The only incompatibility to Applet is that components are not directly added to JApplet via the add method but instead to an instance of the contentPane. A reference to that is obtained via getContentPane which returns a Container. Therefore, to add a component to a specific layout of a JApplet you use: getContentPane.setLayout(newLayout) getContentPane.add(newComponent) In contrast to the Applet class, JApplet also directly supports menus that are set via: public void setJMenuBar(JMenuBar menuBar) Swing applets can also bring up non-modal dialogs because there is a JDialog constructor that does not require any input. Example 6.2.12: Convert the class JFrameWithButtons from example 6.2.8 into an applet (a JApplet, to be specific). Make sure to use the original version of the class not including icons. If the class had been a Frame and we wanted to convert it into an Applet we would change the constructor to public void init(), remove the reference(s) to pack and setVisible, and make sure not to call System.exit. We could also remove the standard main method, which is not automatically called for applets, but that is not necessary. It is no different converting a JFrame to JApplet, so here is the code: import java.awt.FlowLayout; import java.awt.Container; import java.awt.event.*; import javax.swing.*; public class JAppletWithButtons extends JApplet implements ActionListener { JButton windLook = new JButton("Windows"); JButton unixLook = new JButton("Unix"); JButton javaLook = new JButton("Java"); JLabel label = new JLabel("Welcome to Swing", SwingConstants.CENTER); public void init() { Container content = getContentPane(); content.setLayout(new FlowLayout()); content.add(label); content.add(windLook); windLook.addActionListener(this); content.add(unixLook); unixLook.addActionListener(this); content.add(javaLook); javaLook.addActionListener(this); } public void actionPerformed(ActionEvent ae) { String look = "javax.swing.plaf.metal.MetalLookAndFeel"; if (ae.getSource() == javaLook) look = "javax.swing.plaf.metal.MetalLookAndFeel"; else if (ae.getSource() == windLook) look = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; else if (ae.getSource() == unixLook) look = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; try { UIManager.setLookAndFeel(look); } catch (Exception e) { System.err.println("Exception: " + e); } SwingUtilities.updateComponentTreeUI(this); } } We could add tool tips just as we did previously but loading icon images will not work. Note, in particular that we did not need to import any class from the "old" java.applet package. n To run the applet, make sure to create an appropriate HTML document, such as: <HTML> <APPLET CODE="JAppletWithButtons.class" WIDTH="400" HEIGHT="80"> </APPLET> </HTML> and test it using the appletviewer program provided with the JDK, as usual. While dynamically changing the look-and-feel of the applet works perfectly fine, different looks have different size constraints. Since an applet's size is fixed via the HEIGHT and WIDTH parameters that could create a problem. A simple solution is to use a JApplet class to pop up a JFrame, and work with a JFrame as usual (avoiding of course calling System.exit) Note: One difficulty distributing applets using Swing is that older versions of web browsers do not support Swing and are therefore unable to run anything that contains one or more Swing components. In particular, the above example will run perfectly fine using the appletviewer program but will not run at all with Netscape versions 4 or below or Internet Explorer versions 5 or below (try it and watch the Java Console for error messages). While this is indeed a serious downside of Swing, a solution is to not embed a JApplet in a web page via the standard tags but using the tags for Netscape or for Internet Explorer. Using these latter tags a web browser will execute an applet using the Java Runtime environment (JRE) that can be downloaded for free from www.javasoft.com. The good news is that the JRE module from SUN provides a truly standard implementation of the JVM, including full standardized support for Swing. Thus you can be sure that your applets will execute exactly as you intended. The bad news is that the JRE is required to run and users need to download it before being able to execute any Swing-based applets. In some sense this defeats the entire idea of Java applets, i.e. components that can execute in a web browser without downloading any additional software. In time this problem will likely disappear, as more web browsers will fully support Swing. At this time the or tags provide the only solution to use Swing with virtually any web browser version, but it requires the user to install the JRE first. Moreover, Netscape only understands the EMBED tag, while Internet Explorer only knows about OBJECT. With a little bit of programming effort using JavaScript, however, it is possible to check a client's web browser version and then use either the APPLET, EMBED, or OBJECT tag, depending on which one is supported by the browser. In the rule of thumb below we show how to use the right combination of EMBED and OBJECT tags to ensure that an applet will work using the JRE from either Netscape or Internet Explorer. It is rather complicated, but if it is done once most of the information can be "cut-and-pasted" to other HTML documents with little adjustment. Definition 6.2.13: Rule of Thumb for Embedding Swing Applets in a Web Browser Applets with Swing components can be embedded into web pages using the or tags and a suitable Java Runtime Environment (JRE) such as the one provided by Sun . This requires that a JRE be installed on the computer that is loading the web page. To embed an applet into a web page that is viewed either with Netscape or with Internet Explorer, use the following HTML code: [] [] [] If the JRE is present and installed properly on the client computer, it will load and execute the applet. Otherwise a suitable message will offer the user a chance to download the JRE before continuing from the URL specified in codebase or pluginspage. Example 6.2.14: Modify the applet in example 6.2.12 so that the text appearing on the buttons is provided via appropriate parameter tags in an HTML document. Make sure to use the EMBED/OBJECT tags instead of the APPLET tags and download and install the latest version of the JRE. Test your application with Netscape and Internet Explorer. Report what happens if you specify a version higher than that for the currently installed JRE package in the EMBED tag. There are two parts to the problem: first we need to modify our code to read the appropriate parameter tag and second we need to provide a different HTML page using EMBED/OBJECT instead of APPLET. We will use three parameters named button_win, button_xwin, button_java with appropriate values. To solve the first problem we note that JApplet extends Applet so that the usual method getParameter can be used to read applet parameter values. The new applet is listed below with changes appearing in bold and italics: public class JAppletWithButtons extends JApplet implements ActionListener { JButton windLook = new JButton("Windows"); JButton unixLook = new JButton("Unix"); JButton javaLook = new JButton("Java"); JLabel label = new JLabel("Welcome to Swing", SwingConstants.CENTER); public void init() { if (getParameter("button_win") != null) windLook.setText(getParameter("button_win")); if (getParameter("button_xwin") != null) unixLook.setText(getParameter("button_xwin")); if (getParameter("button_java") != null) javaLook.setText(getParameter("button_java")); Container content = getContentPane(); content.setLayout(new FlowLayout()); content.add(label); content.add(windLook); windLook.addActionListener(this); content.add(unixLook); unixLook.addActionListener(this); content.add(javaLook); javaLook.addActionListener(this); } public void actionPerformed(ActionEvent ae) { /* no changes from before */ } Note that we use the setText method for JButton instead of (deprecated) setLabel for Button. To solve the second problem, first recall how the appropriate APPLET tags with these parameters would look like: This HTML page would work fine for the appletviewer but not when loaded into Netscape 4 or Internet Explorer 5. Instead, we use the following HTML code: If the JRE is correctly installed and its version compatible with the requested version 1.2, the applet will appear at the expected position and will act almost exactly like a "true" applet. To simulate what will happen if the JRE is not installed or has a lower version than requested, we can change the line in the HTML document = 0) data.remove(list.getSelectedIndex()); } The handleAdd method first checks if there is any text in the name field. If so, it generates a new address and adds it to the data model. Since data is attached to list, the list will automatically update to display the additional entry. After adding the new address we erase the entries from the text fields and put the cursor back into the name field so that the user can quickly add another address. public void handleAdd() { if (!name.equals("")) { data.addElement(new Address(name.getText(), email.getText())); name.setText(""); email.setText(""); name.requestFocus(); } } The actionPerformed method simply calls on these two handlers to perform the appropriate action: when the del button is pressed, call handleDelete, when the add button is pressed or when the user presses ENTER in the email field, call handleAdd: public void actionPerformed(ActionEvent ae) { if (ae.getSource() == del) handleDelete(); else if ((ae.getSource() == add) || (ae.getSource() == email)) handleAdd(); } The method valueChanged must be defined because our class implements ListSelectionListener. After the user has settled on a selection from the list, we get the name and email field of the corresponding address from the data model and display it in the text fields. We can retrieve a complete Address type from data but we must typecast it to ensure that the object really is of type Address. public void valueChanged(ListSelectionEvent lse) { if (!lse.getValueIsAdjusting()) { Address address = (Address)data.get(list.getSelectedIndex()); name.setText(address.name); email.setText(address.email); } } The main method, as outlined, simply creates an instance of EmailListing to get the program going. When everything is put together and the necessary classes are imported, the program will look as follows (don't forget to put the Address and JPanelBox classes in the same directory as this program): EmailListing with several addresses addedEmailListing with existing address highlighted Figure 6.3.5: The EmailListing class in actionn To make sure we also understand how multiple selections work in a JList, we will do one more example focusing on text fields and lists, this time using two lists (and hence two data models, one for each list). Example 6.3.15: Create a program to manage hiring and firing employees. You should be able to add names to a list of current employees. If you click on a name in that list, the name should move to a second list, containing people put "on probation". You should be able to fire people by selecting their names from the probation list, or restore them to regular employee status by moving them back to the employee list via buttons. The probation list should allow for multiple selections at a time. Separate the code responsible for the layout and the code for event handling into two different classes. This time we are supposed to split our program into two classes. The first class we will call EmployeeLists and it will extend JFrame. It will focus on the layout of the various components. The second class called EmployeeEventHandler will contain all event-handling code. The first class will get two lists with attached data models, one for a list of employees and the other for a list of people on probation. We also need a text field for the user to add new employee names. Finally there will be three buttons (hire, fire, and restore) to provide the user with the necessary action elements. The layout is simple, using again our JPanelBox class defined in definition 6.2.18. Here is the EmployeeLists class, including a standard main method to see the layout in action: import java.awt.Dimension; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Container; import javax.swing.*; public class EmployeeLists extends JFrame { protected JButton hire = new JButton("Hire"); protected JButton fire = new JButton("Fire"); protected JButton restore = new JButton("Restore"); protected JTextField name = new JTextField(); protected DefaultListModel peopleData = new DefaultListModel(); protected DefaultListModel toFireData = new DefaultListModel(); protected JList peopleList = new JList(peopleData); protected JList toFireList = new JList(toFireData); public EmployeeLists() { super("JList Test"); JPanel buttons = new JPanel(new FlowLayout()); buttons.add(hire); buttons.add(fire); buttons.add(restore); JPanel input = new JPanel(new BorderLayout()); input.add("Center", new JPanelBox(name , "Employee Name")); input.add("East", new JPanelBox(buttons, "Action")); JScrollPane peoplePane = new JScrollPane(peopleList); JScrollPane toFirePane = new JScrollPane(toFireList); peoplePane.setPreferredSize(new Dimension(200,200)); toFirePane.setPreferredSize(new Dimension(200,200)); Container content = getContentPane(); content.setLayout(new BorderLayout()); content.add("North", input); content.add("East", new JPanelBox(toFirePane, "Probation List")); content.add("West", new JPanelBox(peoplePane, "Employees List")); peopleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); toFireList.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); validate(); pack(); setVisible(true); } public static void main(String args[]) { EmployeeLists jlt = new EmployeeLists(); } } Note that we allow single selections only in the employee list, but multiple selections (the default) in the probation list. We have also marked all fields as protected rather than private so that the event handling class we are going to define next can easily access them. The class should compile as is, providing the following look:  Figure 6.3.6: Hiring and Firing: handling multiple selections in a list Of course the class will not actually do anything because no events are generated by any elements and no listeners are installed. Instead of finishing our class by adding the necessary code to that class, we establish a second class EmployeeEventHandler that will react to the user's request. In order for this event handler to have access to the protected fields of the main class, we use a reference field master that points to the EmployeeLists instance and is initialized through the constructor. The EmployeeEventHandler class extends WindowAdapter so that it can properly close the program when the user clicks on the close box. It will implement ActionListener as well as ListSelectionListener to react to action events and list selection events. Therefore, we need to define as a minimum the methods actionPerformed and valueChanged. The actionPerformed method delegates its task to other methods: public void hire(): checks if a name has been entered into the text field, adds it to the data for the employee list, removes the text from the input field and makes sure the input field receives the focus public void fire(): checks if any names have been selected in the probation list, then removes those names from the corresponding data model public void restore(): checks if any names have been selected in the probation list, then moves those names from the probation data model to the employee data model, restoring them as regular employees. These methods are not hard, but we should explain how the fire method works since it deals with multiple selected values: the method is called if the user whishes to remove names from the probation list it defines a reference to the array of selected indices of the probation list if that array has anything in it, we start a loop to remove the corresponding entries from the data model For example, if the user wants to remove entries 0, 3, 4, and 5 from the probation list, our event handler needs to remove the 0th, 3rd, 4th, and 5th entry in that corresponding data model. However, if we remove the 0th entry first, all entries above will move down by one, and what used to be the 3rd entry is now the 2nd. Now we have a problem trying to remove the original 3rd entry ! The solution is to use a reverse loop that removes first the 5th entry, then the 4th, and so on: private void fire() { int indices[] = master.toFireList.getSelectedIndices(); if (indices.length > 0) for (int i = indices.length-1; i >= 0; i--) master.toFireData.remove(indices[i]); } The valueChanged method moves a name from the employee list to the probation list by removing and adding it to the corresponding data models. It also ensures that the name just moved to the probation list is visible and selected. Here is the complete class: import javax.swing.event.*; import java.awt.event.*; public class EmployeeEventHandler extends WindowAdapter implements ActionListener, ListSelectionListener { private EmployeeLists master; public EmployeeEventHandler(EmployeeLists _master) { master = _master; } private void hire() { if (!master.name.getText().equals("")) { master.peopleData.addElement(master.name.getText()); master.name.setText(""); master.name.requestFocus(); } } private void fire() { /* as defined above */ } private void restore() { int indices[] = master.toFireList.getSelectedIndices(); if (indices.length > 0) { for (int i = indices.length-1; i >= 0; i--) { master.peopleData.addElement( master.toFireData.get(indices[i])); master.toFireData.remove(indices[i]); } } } public void actionPerformed(ActionEvent ae) { if ((ae.getSource() == master.hire) || (ae.getSource() == master.name)) hire(); else if (ae.getSource() == master.fire) fire(); else if (ae.getSource() == master.restore) restore(); } public void valueChanged(ListSelectionEvent lse) { if (!lse.getValueIsAdjusting()) { master.toFireData.addElement( master.peopleList.getSelectedValue()); master.peopleData.remove(master.peopleList.getSelectedIndex()); master.toFireList.ensureIndexIsVisible( master.toFireData.getSize()-1); master.toFireList.setSelectedIndex( master.toFireData.getSize()-1); } } public void windowClosing(WindowEvent we) { System.exit(0); } } The final step is to attach this event handler to the EmployeeLists class. To do that, we need to activate the buttons and the text field, add a list selection listener to the employee list, and add a window listener to the frame. We therefore add the following lines to the end of the constructor of EmployeeLists: public EmployeeLists() { // all code as before, plus: EmployeeEventHandler handler = new EmployeeEventHandler(this); hire.addActionListener(handler); fire.addActionListener(handler); restore.addActionListener(handler); name.addActionListener(handler); peopleList.addListSelectionListener(handler); addWindowListener(handler); } n The next text component is JTextArea, which allows for multi-line text. It is similar to its AWT counterpart, but does not support scrolling on its own. There are also some other differences so that this class is not code-compatible to java.awt.TextField. Definition 6.3.16: The JTextArea Class This class represents a multi-line area that displays editable or non-editable plain text. It is different from java.awt.TextField in several respects. Most importantly: it does not provide automatic scrolling capabilities but can be embedded in a JScrollPane it does not add a TextListener to monitor changes to the text but uses a DocumentListener instead, which can be added to the Document returned by the inherited getDocument method it supports different document classes as data models (which we will not discuss), using the PlainText document model by default it allows automatic line-wrapping, controlled by setLineWrap and setWrapStyleWord (to wrap lines at word boundaries) The Java API defines this class as follows: public class JTextArea extends JTextComponent { // selected constructors public JTextArea() public JTextArea(String text) public JTextArea(int rows, int columns) public JTextArea(String text, int rows, int columns) public JTextArea(Document doc) // selected methods public void insert(String str, int pos) public void append(String str) public void replaceRange(String str, int start, int end) public void setLineWrap(boolean wrap) public void setWrapStyleWord(boolean word) } Example 6.3.17: One of the (few) deficiencies of the JLabel class is that it supports only one line of text (aside from icons). Use a JTextArea with scrollbars to define a multi-line, non-editable text field with automatic word-wrapping at word boundaries. We will add a text area with 3 rows and 10 columns to a JFrame, set it to automatically wrap lines at word boundaries, and add some long text to it to see how it works. To support scrolling, we embed the field in a JScrollPane. Here is the code: import javax.swing.*; public class MultiLineLabelTest extends JFrame { private JTextArea label = new JTextArea(3, 10); public MultiLineLabelTest() { super("MultiLineLabel Test"); label.setLineWrap(true); label.setWrapStyleWord(true); label.setEditable(false); String s = " This text should be displayed using "; s += "multiple scrolling lines" label.setText(s); getContentPane().add("Center", new JScrollPane(label)); validate(); pack(); setVisible(true); } public static void main(String args[]) { MultiLineLabelTest mllt = new MultiLineLabelTest(); } } When the program executes, you will see the scrollable text area:   Figure 6.3.7: JTextArea with automatic scrolling enabled n This example, while simple, should be sufficient to convert most TextArea fields to JTextArea ones. An added level of complexity is the use of a DocumentListener instead of a TextListener. As the definition mentioned, if you need to monitor changes that the user makes to the text represented by a JTextArea, you must attach a DocumentListener to the data model connected to the text area. Definition 6.3.18: The DocumentListener and DocumentEvent Classes The DocumentListener is can be used for document change notifications and replaces java.awt.TextListener. It uses a DocumentEvent to represent changes to the text. The Java API defines these classes as follows: public abstract interface DocumentListener extends EventListener { // methods to be implemented public void insertUpdate(DocumentEvent e) public void removeUpdate(DocumentEvent e) public void changedUpdate(DocumentEvent e) } public abstract interface DocumentEvent { // selected methods public int getOffset() public int getLength() } Example 6.3.19: Modify example 6.3.17 to allow editing in the JTextArea. Add a DocumentListener to the text area and display all changes to the text to standard output. Add and remove some text and explain the output. The code is similar to above, except that our class should now implement DocumentListener. Then we can attach this to the text field as document listener, provided that we implement the necessary methods. We add a private method to display the properties of the DocumentEvent to standard output: import javax.swing.*; import javax.swing.event.*; public class JTextAreaTest extends JFrame implements DocumentListener { private JTextArea label = new JTextArea(3, 10); public JTextAreaTest() { super("MultiLineLabel Test"); label.setLineWrap(true); label.setWrapStyleWord(true); label.setText("This text area contains some editable text."); getContentPane().add("Center", new JScrollPane(label)); label.getDocument().addDocumentListener(this); validate(); pack(); setVisible(true); } public void changedUpdate(DocumentEvent e) { System.out.println("Change Event: \n" + eventInfo(e)); } public void insertUpdate(DocumentEvent e) { System.out.println("Insert Event: \n" + eventInfo(e)); } public void removeUpdate(DocumentEvent e) { System.out.println("Remove Event: \n" + eventInfo(e)); } private String eventInfo(DocumentEvent e) { return "Length: " +e.getLength()+ ", Offset: " +e.getOffset(); } public static void main(String args[]) { JTextAreaTest tat = new JTextAreaTest(); } } When we run the program, we will mark the work some, remove it by hitting delete, and add the word an in its place. The following document events will be generated: Marking text does not generate any document event. Cutting text generates a REMOVE document event where Length is the number of characters removed and Offset is where the change started: Remove Event: Length: 4, Offset: 24 Inserting the letters 'a' and 'n' generates two INSERT events of length 1, with offset indicating where the character is inserted: Insert Event: Length: 1, Offset: 24 Insert Event: Length: 1, Offset: 25 Figure 6.3.8: Illustrating DocumentEventn Our final text component class is somewhat similar to a JTextArea but with the extra ability to display formatted text, images, and tables. Definition 6.3.20: The JEditorPane Class This class represents a text component that can handle the following default types of text: text/plain: plain text such as the one used for a JTextArea text/html: full support for the HTML 3.2 formatting language text/rtf: limited support for Rich Text Format The class provides methods to read text directly from a file or URL via the setPage methods or constructors. It does not support automatic scrolling, but can be embedded in a JScrollPane. Perhaps the most useful and surprisingly easy way of using this class is to display non-editable HTML text. The Java API defines this class as follows: public class JEditorPane extends JTextComponent { // selected constructors public JEditorPane() public JEditorPane(String pathToFile) throws IOException public JEditorPane(URL urlToFile) throws IOException public JEditorPane(String type, String text) // selected methods public void addHyperlinkListener(HyperlinkListener listener) public void setPage(String pathToFile) throws IOException public void setPage(URL urlToFile) throws IOException public final void setContentType(String type) } where pathToFile is either a full URL (web address) of a document located on the web or, if the document is located in the same directory as the source code, the String: "file:" + System.getProperty("user.dir") + System.getProperty("file.separator") + "actualFileName.html"; We can not explore the full capabilities of this class, but it is very convenient to show formatted, non-editable text inside a Java program. Probably the most useful content type is HTML, so we will only use this content type. Of course this means that you will need some familiarity with HTML formatting tags. Again we will not be able to explore all of the capabilities that HTML offers but restrict ourselves to a very small subset of HTML formatting commands: Definition 6.3.21: The HTML Formatting Language The HyperText Markup Language provides a flexible, platform-independent, and non-proprietary way to represent formatted documents including images, tables, and hyperlinks. A document formatted according to the HTML standard consists of plain text and HTML formatting tags. All formatting tags are enclosed in angular brackets and turn some formatting feature on or off. Tags that turn formatting off are prefaced by a slash. All HTML documents must start with the tag and end with the tag. Examples of other HTML formatting tags are: : text inside the tags is bold : text inside the tags is italics : various levels of headlines, where # is a number from 1 to 6 : enclosed text represents an unsorted list
  • : a bulleted item, usually inside an unsorted list : display the specified image at this position, where image must be of GIF or JPEG format : creates a hyperlink (anchored hyper-reference) to 'url'

    : A paragraph break Example 6.3.22: Create a plain text file using the above formatting tags. Save the file as sample.html and load it into your web browser. We can create HTML documents using the same editor we use to create Java source code. Here is a sample file, as it is displayed in the editor:

    A Sample Document

    Using HTML formatting tags, text can be displayed in bold or italics or even in bold and italics easily. In addition there can be simple lists: And finally, here is a small image inside our document. When we save this document as sample.html and load it into a web browser such as Netscape (using the File | Open Page menu options), it will look similar to the following:  Figure 6.3.9: A sample formatted HTML document Of course this will only display correctly if the image file new.gif is located in the same directory as the HTML source code. n Example 6.3.23: Create a Java program that displays the above file sample.html in a frame. The JEditorPane directly supports reading HTML documents, so all we have to do is ensure that the text content is of type text/html, make the component non-editable, read the file as defined above, and add it to a frame via a scroll pane. Here is the code: import javax.swing.*; import java.io.*; public class HTMLReader extends JFrame { private JEditorPane editor = new JEditorPane(); public HTMLReader() { super("HTML Reader"); editor.setContentType("text/html"); editor.setEditable(false); String name = "file:" + System.getProperty("user.dir") + System.getProperty("file.separator") + "sample.html"; try { editor.setPage(name); } catch (IOException ioe) { System.err.println("IO Exception: " + ioe); } getContentPane().add("Center", new JScrollPane(editor)); validate(); pack(); setVisible(true); } public static void main(String args[]) { HTMLReader htmlreader = new HTMLReader(); } } The look of the resulting program is almost the same as in the previous figure so we do not need to repeat the screen shot. n Here is a more complete program, illustrating that a JEditorPane can be used to create HTML code on the fly, as well as react to clicks on hyperlinks embedded in an HTML document and read documents straight from the web. Before we can do that, we need to define the HyperlinkListener and associated HyperlinkEvent classes: Definition 6.3.24: The HyperlinkListener and HyperlinkEvent Classes A HyperLinkListener is notified if the user clicks on or moves into or out of a hyperlink. A HyperlinkEvent represents information of what happened to a hyperlink. The Java API defines these classes as follows: public abstract interface HyperlinkListener extends EventListener { // methods public void hyperlinkUpdate(HyperlinkEvent e) } public class HyperlinkEvent extends EventObject { // selected methods public HyperlinkEvent.EventType getEventType() public URL getURL() } where the valid constants in HyperLinkEvent.EventType are ACTIVATED, ENTERED, or EXITED. Example 6.3.25: Create a fully functioning program that displays bookmarks of web addresses. Each bookmarked address should contain a title, a URL, a category, and a description. Your program should display all bookmarks by title, show the full description when the user selects a particular title, and display the corresponding web page when the user clicks on the hyperlinked URL in the description. That seems to be a tall order. We basically need to create a simplified (much simplified ) version of a web browser. Fortunately, the JEditorPane is going to do all of the hard work so our program is simpler than it sounds. First we need to represent web bookmarks, including their title, URL, category, and description. We create a straightforward Bookmark class for that, including a few sample bookmarks to get us started. public class Bookmark { protected String title, address, description, category; public Bookmark() { title = address = description = category = ""; } public Bookmark(String _title, String _address) { title = _title; address = _address; description = category = ""; } public String toString() { return title; } public static Bookmark[] getSampleBookmarks() { Bookmark url[] = new Bookmark[4]; url[0] = new Bookmark("Seton Hall University", "http://www.shu.edu/"); url[0].description = "The Catholic University of New Jersey"; url[0].category = "Universities"; url[1] = new Bookmark("Dartmouth College", "http://www.dartmouth.edu/"); url[1].description = "An Ivy League College in New Hampshire"; url[1].category = "Universities"; url[2] = new Bookmark("Yahoo", "http://www.yahoo.com/"); url[2].description = "The most popular search engine on the web"; url[2].category = "Search Engines"; url[3] = new Bookmark("Excite", "http://www.excite.edu/"); url[3].description = "A pretty good alternative to Yahoo."; url[3].category = "Search Engines"; return url; } } Next, we need to worry about the program we are supposed to create. It will extend JFrame, as usual and implement both ItemChangeListener and HyperlinkListener. That way it can react to changes in the list of bookmarks as well as to clicks on hyperlinks. Clearly our program needs a JList and an associated data model. It also needs a JEditorPane to display information formatted in HTML. And actually, that's already it. Here is the layout of our class with the implementation of some of methods following below: public class BookmarkManager extends JFrame implements ListSelectionListener, HyperlinkListener { private DefaultListModel data = new DefaultListModel(); private JList list = new JList(data); private JEditorPane info = new JEditorPane(); private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) { System.exit(0); } } public BookmarkManager() { super("Bookmark Manager"); Bookmark samples[] = Bookmark.getSampleBookmarks(); for (int i = 0; i < samples.length; i++) data.addElement(samples[i]); info.setEditable(false); JScrollPane scrollList = new JScrollPane(list); JScrollPane scrollInfo = new JScrollPane(info); scrollList.setPreferredSize(new Dimension(150, 200)); scrollInfo.setPreferredSize(new Dimension(300, 200)); JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JPanelBox(scrollList,"Bookmarks"), new JPanelBox(scrollInfo, "Description")); getContentPane().add("Center", split); list.addListSelectionListener(this); info.addHyperlinkListener(this); addWindowListener(new WindowCloser()); validate(); pack(); setVisible(true); } public void valueChanged(ListSelectionEvent lse) { /* displays formatted information about selected bookmark */ } public void hyperlinkUpdate(HyperlinkEvent hle) { /* loads selected URL into editor */ } private void showBookmark(int i) { /* formats the information in a bookmark in HTML */ } public static void main(String args[]) { BookmarkManager bm = new BookmarkManager(); } } Note that we added a ListSelectionListener to the list and a HyperlinkListener to the editor pane. The showBookmark method will retrieve and typecast a Bookmark from the data model and put appropriate HTML formatting tags around it. Then it sets the editor pane to that formatted text. Depending on your formatting preferences, it might look similar to this: private void showBookmark(int i) { Bookmark mark = (Bookmark)data.get(i); String s = "

    " + mark.title + "

    "; info.setContentType("text/html"); info.setText(s); } In particular, the last two lines set the content type of the editor pane to HTML and put the formatted string in the editor. The valueChanged method waits until the user has made a selection, retrieves the index of the selected list item, and uses the showBookmark method to display the formatted bookmark: public void valueChanged(ListSelectionEvent lse) { if (!lse.getValueIsAdjusting()) showBookmark(list.getSelectedIndex()); } Finally, hyperLinkUpdate is called when a user clicks on a hyperlink in the editor. There is at least one hyperlink available, coming from the formatted version of our bookmark. When a user clicks that link, the appropriate web page should be loaded into the editor. While that is in principle tricky to accomplish (a connection to a web server must be made, an HTML page must be loaded and formated, etc see chapter 10 for details), the JEditorPane method showPage handles all details. Since that method throws an IOException, we must embed it in a standard try-catch block as follows: public void hyperlinkUpdate(HyperlinkEvent hle) { if (hle.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { try { info.setPage(hle.getURL()); } catch(IOException ioe) { info.setText("" +hle.getURL() +"unloadable

    " + ioe); } } } Note that we display the error message, if any, right in our editor. All that remains to do is put the pieces together, import the right classes including the java.io.IOException class and test the program. Before testing starts, though, make sure your computer is connected to the Internet. You should first dialup an Internet Service Provider, then start this class to see its full functionality (and limitations). The program should initially display bookmarks as follows:  Figure 6.3.10: BookmarkManager displaying a particular bookmark If you click on the hyperlink http://www.yahoo.com, and you are properly connected to the Internet, the program will locate Yahoo's web page right into the editor: XYZZY Figure 6.3. LISTNUM "chapter6figs"1: BookmarkManager after clicking on the link for Yahoo's web page As a matter of fact, all Yahoo's hyperlinks also work, so you can click on any link and even perform searches right from our little Java program. Of course our program is not a complete web browser. For one thing, the standard "back" button is missing and pages comprised of "frames" may not work correctly. Also, many pages on the web will not display properly due to formatting limitations of the JEditorPane and incorrect HTML code in web pages. Still, for the effort invested this is a pretty neat little program. If you clicked on the Yahoo link while not properly connected to the Internet, our program will display the following error message (it may take a few seconds):  Figure 6.3.12: BookmarkManager tried to connect unsuccessfully to Yahoo's web site n Holding Swinging Dialogs Dialogs are another area where Swing excels over the AWT. It provides a JDialog class that is, for the most part, code-compatible to java.awt.Dialog, but it also provides an easy-to-use JOptionPane class that allows you to quickly generate several standard types of dialogs, complete with standard icons and buttons. Therefore, we will cover this class first before mentioning the more traditional JDialog class. Definition 6.3.26: The JOptionPane Class This class provides several convenient static methods to pop up a "message", "input", "confirmation", or "options" dialog box, including appropriate icons and buttons. All dialog boxes are modal, i.e. they block input to their parent class. If the parent component is null, the dialog appears in the middle of the screen, otherwise it appears centered inside its parent. The methods are (for the constants used, see table 6.3.13): public class JOptionPane extends JComponent implements Accessible { // selected methods ALL METHODS ARE PUBLIC static void showMessageDialog(Component parent, Object message) static void showMessageDialog(Component parent, Object message, String title, int messageType) static String showInputDialog(Component parent, Object message) static String showInputDialog(Component parent, Object message, String title, int messageType) static int showConfirmDialog(Component parent, Object message) static int showConfirmDialog(Component parent, Object message, String title, int optionType, int messageType) static int showOptionDialog(Component parent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue) } ConstantNamemessageTypeERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGEoptionTypeDEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTIONreturn values for "Confirm" and "Option" dialogsYES_OPTION, NO_OPTION, CANCEL_OPTION, OK_OPTION, CLOSED_OPTIONTable 6.3.13: Constants used in JOptionPane Example 6.3.27: Create a program with three buttons, one for each of the dialog types except "Option" dialog. Use drop-down combo boxes to let the user select the messageType and optionType and display a message corresponding to the button pressed and the option(s) selected. Test each of the dialog boxes. We use three buttons, as requested, and two combo boxes. To initialize the combo boxes, we define arrays of strings corresponding to the text of the various options. We also define additional arrays of integers corresponding to the actual options. In the actionPerformed method, we check which string is currently selected in the combo boxes, then pick that entry from the integer array for that option and construct the appropriate dialog box. Here is the code, using once again the JPanelBox class from example 6.2.18: import java.awt.FlowLayout; import javax.swing.*; import java.awt.event.*; public class JOptionPaneTest extends JFrame implements ActionListener { private int MESSAGE_TYPE[] = {JOptionPane.ERROR_MESSAGE, JOptionPane.INFORMATION_MESSAGE, JOptionPane.WARNING_MESSAGE, JOptionPane.QUESTION_MESSAGE, JOptionPane.PLAIN_MESSAGE}; private int OPTION_TYPE[] = {JOptionPane.DEFAULT_OPTION, JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.OK_CANCEL_OPTION }; private String MESSAGE_STRING[] = {"ERROR_MESSAGE", "INFORMATION_MESSAGE", "WARNING_MESSAGE", "QUESTION_MESSAGE", "PLAIN_MESSAGE"}; private String OPTION_STRING[] = {"DEFAULT_OPTION", "YES_NO_OPTION", "YES_NO_CANCEL_OPTION", "OK_CANCEL_OPTION"}; private JButton message = new JButton("Message"); private JButton input = new JButton("Simple Input"); private JButton confirm = new JButton("Confirm"); private JComboBox messageType = new JComboBox(MESSAGE_STRING); private JComboBox optionType = new JComboBox(OPTION_STRING); public JOptionPaneTest() { super("Standard Dialog Test"); JPanelBox buttons = new JPanelBox(new FlowLayout(), "Types"); buttons.add(message); message.addActionListener(this); buttons.add(input); input.addActionListener(this); buttons.add(confirm); confirm.addActionListener(this); JPanelBox options = new JPanelBox(new FlowLayout(), "Options"); options.add(new JLabel("Message Types:")); options.add(messageType); options.add(new JLabel("Option Types:")); options.add(optionType); getContentPane().add("North", buttons); getContentPane().add("South", options); validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == message) JOptionPane.showMessageDialog(this, "Test Message", "Message", MESSAGE_TYPE[messageType.getSelectedIndex()]); else if (ae.getSource() == input) JOptionPane.showInputDialog(this, "Test Input", "Input", MESSAGE_TYPE[messageType.getSelectedIndex()]); else if (ae.getSource() == confirm) JOptionPane.showConfirmDialog(this, "Test Confirm", "Confirm", OPTION_TYPE[optionType.getSelectedIndex()], MESSAGE_TYPE[messageType.getSelectedIndex()]); } public static void main(String args[]) { JOptionPaneTest jopt = new JOptionPaneTest(); } } The program should execute fine and present the user with several buttons and combo box combinations of constants:  Figure 6.3.14: The JOptionPaneTest program in action Here are some of the dialog boxes from the above program with various types and options chosen, in the Java look as well as in the Windows look: ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGE Figure 6.3.15: Java Look of various types of message boxes ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGE Figure 6.3.16: Windows Look of various types of message boxes Input dialog with QUESTION_MESSAGEConfirmation dialog with QUESTION_MESSAGE and YES_NO_CANCEL_OPTIONFigure 6.3.17: Java Look of input and confirmation dialogs with various optionsn The general options dialog box is somewhat more complicated to use, but also more flexible. It can probably replace many modal instances of using JDialog by using an appropriate instance of a JPanel as message. You do get ease of use as well as automatic icons and positioning so there are many reasons to use JOptionPane over JDialog. Here is a simple example using the general options dialog. Example 6.3.28: Create a program that brings up a general dialog box containing two text fields for user input. If the user clicks OK and has entered text in both fields, show the input in a label. If the user clicks OK but one or both text fields contain no text, display a suitable error message. If the user closes the dialog any other way, do nothing. We will extend JFrame and add an active button and a status label. We also define a JPanel containing the text fields for our options dialog, and use that panel as input to the dialog. When the user clicks OK we can query that panel for the values the user entered and act accordingly. For convenience, we define that panel as a separate class: import java.awt.GridLayout; import javax.swing.*; public class OptionsPanel extends JPanel { protected static String BUTTONS[] = {"Sure, why not", "I don't think so"}; private JTextField name = new JTextField(); private JTextField email = new JTextField(); public OptionsPanel() { setLayout(new GridLayout(2,2)); add(new JLabel("Name:")); add(name); add(new JLabel("Email:")); add(email); } public String getName() { return name.getText(); } public String getEmail() { return email.getText(); } } In addition to the text fields, we added some labels to the layout. More importantly, we defined a protected static array of strings representing the text we want to see on the buttons of the dialog when it appears. With this class defined we can create our main program. Its main action is in the actionPerformed method. If the show button is clicked, we first create an instance of an OptionsPanel as defined above. Then we use that panel as well as the static array of strings BUTTONS as input to the showOptionDialog method. When that modal dialog is dismissed, we check which button was pressed and act accordingly. Here is the code: import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.*; public class GeneralDialogTest extends JFrame implements ActionListener { private JButton show = new JButton("Show Dialog"); private JLabel status = new JLabel("Status line for dialog input"); public GeneralDialogTest() { super("General Dialog Test"); JPanel buttons = new JPanel(new FlowLayout()); buttons.add(new JLabel("Click to show dialog:")); buttons.add(show); show.addActionListener(this); getContentPane().add("North", new JPanelBox(buttons, "Action")); getContentPane().add("South", new JPanelBox(status, "Status")); validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == show) { OptionsPanel options = new OptionsPanel(); int resp = JOptionPane.showOptionDialog(this, options, "New Address Dialog", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, OptionsPanel.BUTTONS, OptionsPanel.BUTTONS[0]); if (resp == JOptionPane.YES_OPTION) { if (!(options.getName().equals("")) && !(options.getEmail().equals(""))) status.setText("Name: " + options.getName() + ", Email: " + options.getEmail()); else JOptionPane.showMessageDialog(this, "You must enter a value in both text fields", "Input Error", JOptionPane.ERROR_MESSAGE); } } } public static void main(String args[]) { GeneralDialogTest gdt = new GeneralDialogTest(); } } This class will compile and execute fine, resulting in the following behavior. Initial look of the programOptions Dialog appears and is customizedError message if one text field is emptyStatus changed if name and email fields were entered Figure 6.3.18: Various stages of the GeneralDialogTest programn Finally there is the JDialog class, a general-purpose dialog class similar to java.awt.Dialog. In fact, since JDialog is so similar to its AWT counterpart, we do not need to spend much time on this class. Definition 6.3.29: The JDialog Class This class allows modal (blocking) or non-modal (not blocking) dialog windows that are usually attached to other frames or dialogs and whose behavior is coupled to that of its parent. The class is code-compatible to java.awt.Dialog, which it extends. The only difference is that components and layout managers must be added to the content pane obtained via getContentPane instead of directly to the dialog. Dialogs are non-modal unless specified otherwise. The Java API defines this class as follows: public class JDialog extends Dialog implements WindowConstants, Accessible, RootPaneContainer { // constructors public JDialog() public JDialog(Frame parent) public JDialog(Frame parent, boolean modal) public JDialog(Frame parent, String title) public JDialog(Frame parent, String title, boolean modal) public JDialog(Dialog parent) public JDialog(Dialog parent, boolean modal) public JDialog(Dialog parent, String title) public JDialog(Dialog parent, String title, boolean modal) // selected methods public void setJMenuBar(JMenuBar menu) public Container getContentPane() } Since the JDialog class has a constructor requiring no input, it can be instantiated from an applet, different from java.awt.Dialog. Since JDialog extends Dialog its behavior is so similar to its AWT counterpart that we can refer to the Dialog class, section 4.6, for examples. There are two more dialog classes in Swing that we will not explain in details: The JFileChooser class replaces java.awt.FileDialog and allows selection of files for reading and writing. Since we will not discuss file handling until chapter 9, we will not discuss this class here. The JColorChooser class allows convenient selection of colors. We have no need for this class in any of the examples in this text, so we will not discuss it here. Both classes are pretty straightforward and if you need of these classes for a particular program you should have little trouble consulting the Java API for details and using them accordingly. 6.4. Trees, Tables, and Graphics In the previous section we have seen the model/view approach applied to lists and text components. While certainly different from the AWT, these elements do have an equivalent, albeit less functional, AWT counterpart. Next we will introduce components that do not have any equivalent AWT structure, the JTree and JTable components. We will also discuss custom graphics in detail, so that we lean how to replace the java.awt.Canvas class. At this point we have introduced enough Swing components so that you should be able to convert most AWT-based programs to Swing unless they use custom graphics. Therefore, the remaining sections are purely optional. However, to effectively use Swing, we do recommend that you read on, especially since some of the examples in this and the next section will include more substantial programs. The JTree and JTable classes are quite complex and we will only discuss them briefly. We will leave out the part that allows direct editing of these components within their graphical representation and use them only as display and selection elements for simplicity. For additional details, you can always refer to the Java API. Trees We will discuss the JTree class first. It is a class that can represent data that is hierarchically organized, different from lists, which represent sequentially organized data. Hierarchical data, or trees, come in many different flavors. Generally, all trees consist of nodes, and one node is singled out as the root node. Each node can have children, and in general one child could have several parents. The root node is characterized as the node without a parent. Hierarchical structures come in different flavors: One-to-Two relationship: Each node in a tree can have at most two children and all children have exactly one parent. Such a tree is also called binary tree . EMBED OrgPlusWOPX.4  One-to-Many relationship: Each node in a tree can have none to several children and all children have exactly one parent.  EMBED OrgPlusWOPX.4  Many-to-Many relationship: Each node can have multiple children and children can have multiple parents. This structure could also have more than one root node.  EMBED PBrush  The JTree class represents one-to-many trees and allows the user to select nodes as well as expand and collapse branches of the tree. Definition 6.4.1: The JTree Class This class can display data that is hierarchically organized in a tree-like structure. A JTree has one root node and each node can have any number of children, but each child (except the root) has exactly one parent. Nodes without children are called leafs, the only node without parents is the root. All nodes to follow starting from the root to reach a particular node in the tree are called the "path to that node". The class works in conjunction with several other classes, in particular TreePath and TreeNode. Selections of nodes in a tree are detected by a TreeSelectionListener. The class does not support scrolling but can be embedded in a JScrollPane. The Java API defines JTree as follows: public class JTree extends JComponent implements Scrollable, Accessible { // selected constructor public JTree(TreeNode root) // selected methods public void addTreeSelectionListener(TreeSelectionListener tsl) public void expandPath(TreePath path) public void collapsePath(TreePath path) public boolean isExpanded(TreePath path) public boolean isCollapsed(TreePath path) public void scrollPathToVisible(TreePath path) public void setSelectionPath(TreePath path) public TreePath getSelectionPath() public boolean isPathSelected(TreePath path) public void clearSelection() } Before we can use JTree we need to know how to create a tree node. Java provides a TreeNode interface as well as a DefaultMutableTreeNode class that is ready-to-use and sufficient for most applications. Definition 6.4.2: The DefaultMutableTreeNode Class Swing provides the DefaultMutableTreeNode class to represent a changeable node in a tree that could be a root node, a parent node, or a leaf node. The class is part of the javax.swing.tree package, and the Java API defines it as follows: public class DefaultMutableTreeNode extends Object implements Cloneable, MutableTreeNode, Serializable { // selected constructor public DefaultMutableTreeNode(Object userObject) // selected method public void add(MutableTreeNode newChild) public void remove(int childIndex) public TreeNode getParent() public TreeNode getChildAt(int index) public int getChildCount() public TreeNode[] getPath() public TreeNode getRoot() public boolean isRoot() public boolean isLeaf() public Enumeration breadthFirstEnumeration() public Enumeration depthFirstEnumeration() } Finally, we need to know something about how the various nodes of a tree are connected. Java again has a ready-made class for that called TreePath. Definition 6.4.3: The TreePath Class The TreePath class represents a path to a node. The class is part of the javax.swing.tree package, and the Java API defines it as follows: public class TreePath extends Object implements Serializable { // selected constructor public TreePath(Object[] path) // selected methods public Object[] getPath() public int getPathCount() public Object getPathComponent(int element) public TreePath getParentPath() } Definition 6.4.2 mentions an Enumeration, which we will discuss in detail in chapter 8. For now, the next example will illustrate how to use an enumeration to traverse all nodes in a tree without providing an exact definition of Enumeration at this time. The Enumeration class is part of the java.util package and must be imported if used. Example 6.4.4: Create a tree representing a hierarchical structure of strings representing web sites. The web sites should be organized by category, and all sites within one category should be leafs of the tree with parent being their category. Specifically, use two categories "Universities" and "Search Engines", and the web addresses "www.shu.edu", "www.dartmouth.edu", "www.yahoo.com", and "www.excite.com". The tree root should be a node labeled "Web Sites". Provide buttons to expand and collapse the entire tree. First, let's review the structure we want to create. There is one parent node, two categories that are children of that parent, and each category in turn has two children that are leafs. A rough representation of this structure would look as follows: Web Sites Universities www.shu.edu www.dartmouth.edu Search Engines www.yahoo.com www.excite.com EMBED PBrush  Figure 6.4.1: Tree structure of web sites Therefore, we need to create a JTree with seven nodes and make sure they represent this particular structure. We also put a scroll pane around the tree to enable scrolling and add two buttons to expand and collapse the entire tree. To represent our tree, we define its root node as a field to have a convenient starting point to reach all nodes. The children are added within a method createTreeStructure, as follows: import java.util.Enumeration; import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; public class SimpleTree extends JFrame implements ActionListener { private DefaultMutableTreeNode root = new DefaultMutableTreeNode("Web Sites"); private JTree tree = new JTree(root); private JButton expand = new JButton("Expand"); private JButton collapse = new JButton("Collapse"); private JButton quit = new JButton("Quit"); private SimpleTree() { super("A Simple Tree"); createTreeStructure(); JPanel buttons = new JPanel(new FlowLayout()); buttons.add(collapse); collapse.addActionListener(this); buttons.add(expand); expand.addActionListener(this); buttons.add(quit); quit.addActionListener(this); getContentPane().add("Center", new JScrollPane(tree)); getContentPane().add("South", buttons); validate(); pack(); setVisible(true); } private void createTreeStructure() { DefaultMutableTreeNode edu = new DefaultMutableTreeNode("Universities"); DefaultMutableTreeNode com = new DefaultMutableTreeNode("Search Engines"); root.add(edu); root.add(com); edu.add(new DefaultMutableTreeNode("www.shu.edu")); edu.add(new DefaultMutableTreeNode("www.dartmouth.edu")); com.add(new DefaultMutableTreeNode("www.yahoo.com")); com.add(new DefaultMutableTreeNode("www.excite.com")); } private void collapseTree() { /* collapses all branches of the tree */ } private void expandTree() { /* expands all branches of the tree */ } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == expand) expandTree(); else if (ae.getSource() == collapse) collapseTree(); else if (ae.getSource() == quit) System.exit(0); } public static void main(String args[]) { SimpleTree st = new SimpleTree(); } } This class will create a representation of our web site structure as shown in figure 6.4.2. Initially, only the root node will be visible but you can double-click on it to expand it, and again double-click on its children to expand those until you reach the leaf nodes. You can also double-click on an expanded node with children to collapse it. All details are handled entirely by the JTree class and the various nodes it contains.   Figure 6.4.2: The Tree representation of SimpleTree in Java (left) and Window (right) look and feel Of course we still have to provide the code to expand and collapse the entire tree by clicking the appropriate buttons. We will use the breadthFirstEnumeration and depthFirstEnumeration methods for that. Both methods return an Enumeration, which returns a sequential structure with methods hasMoreElements and nextElement that can be used in a for loop. The details of an Enumeration will be explained in chapter 8. For now, here is the code that will expand all tree nodes: public void expandTree() { for(Enumeration nodes = root.breadthFirstEnumeration(); nodes.hasMoreElements(); ) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)nodes.nextElement(); tree.expandPath(new TreePath(node.getPath())); } } It works as follows: the initializer in the for loop defines a sequential structure nodes of type Enumeration of all nodes starting from the root, in a breadth-first order. That means that first all children of the root are listed, then all children of those children, and so on. the loop uses the sequential structure nodes and its method hasMoreElements to define the condition that terminates the loop the modification part of the for loop is left empty (!) and is instead provided inside the loop by the method nextElement the nextElement method returns the next element of the sequential structure, typecasts it into an appropriate tree node, and then expands the path leading to that node to find the TreePath leading to a particular node, we ask the node to return its path, then use the array of objects returned to construct a new TreePath as input to the expandPath method The collapseTree method can be created accordingly, but it will use a depth-first enumeration to collapse the inner-most branches of the tree first: public void collapseTree() { for(Enumeration nodes = root.depthFirstEnumeration(); nodes.hasMoreElements(); ) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)nodes.nextElement(); tree.collapsePath(new TreePath(node.getPath())); } } When these methods are added to our class, the example is complete. Now selective branches can be expanded and collapsed by double clicking on the corresponding nodes in the tree and the entire tree can be completely collapsed or expanded using the appropriate buttons. n If we want to monitor which nodes in a tree are currently selected, we can add a TreeSelectionListener to the tree. Definition 6.4.5: The TreeSelectionListener and TreeSelectionEvent Classes The TreeSelectionListener is notified when a selection in a JTree changes. The TreeSelectionEvent represents the current selection in a tree. public abstract interface TreeSelectionListener extends EventListener { // method public void valueChanged(TreeSelectionEvent e) } public class TreeSelectionEvent extends EventObject { // selected method public TreePath getPath() } Example 6.4.6: Add a status line to the above SimpleTree example that will contain the full path of the node that is currently selected by the user. Now we need to track the selections made by the user so we attach a TreeSelectionListener to our tree, which works similar to adding a ListSelectionListener to a list: we make sure our class implements TreeSelectionListener we use this as input to the addTreeSelectionListener method of the tree we implement the required method valueChanged we use the getPath method of the TreeSelectionEvent to inquire which element is currently selected getPath returns a TreePath, and a further getPath method invoked on that tree path returns an array of objects leading to our node, so we display the values of this array in a for loop to get the full path to the selected node Thus, we need to change the SimpleExample class as follows, with the changes displayed in bold and italics. // import all classes as before and add: import javax.swing.event.*; public class SimpleTreeWithListener extends JFrame implements ActionListener, TreeSelectionListener { // as before, with one added field for the status line private JLabel status = new JLabel("Tree selection status"); private SimpleTreeWithListener() { // as before, with the following lines added getContentPane().add("North", status); tree.addTreeSelectionListener(this); validate(); pack(); setVisible(true); } private void createTreeStructure() { /* no changes */ } private void collapseTree() { /* no changes */ } private void expandTree() { /* no changes */ } public void actionPerformed(ActionEvent ae) { /* no changes */ } public void valueChanged(TreeSelectionEvent tse) { Object path[] = tse.getPath().getPath(); String s = path[0].toString(); for (int i = 1; i < path.length; i++) s += " " + path[i].toString(); status.setText(s); } public static void main(String args[]) { SimpleTreeWithListener st = new SimpleTreeWithListener(); } } Here is the result of this new class, where the full path to the currently selected node (root, parent, or leaf) is displayed in the label at the top.  Figure 6.4.3: TreeWithListener class, showing the path to selected node n Tables Our last Swing class to cover in at least some detail is JTable. As the name implies, it provides a table-like representation of data, similar to the look of a spreadsheet program like Microsoft Excel. Just as JTree, this class is quite complex so we will only discuss how to use it for relatively simple examples. JTable is another example of a model/view design and we need to define the class as well as the appropriate model before we can do any examples. Definition 6.4.7: The JTable Class This class represents a two-dimensional view on data in table form. The column width can be determined interactively or through appropriate methods. The JTable class implements a model/view split design and represents the view on an appropriate data model. Individual cells in the table are identified by integers, indicating the row and column of a cell. The class does not support scrolling but can be embedded in a JScrollPane. The Java API defines this class as follows: public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible { // selected constants public static int AUTO_RESIZE_OFF, AUTO_RESIZE_ALL_COLUMNS, AUTO_RESIZE_NEXT_COLUMN, AUTO_RESIZE_LAST_COLUMN, AUTO_RESIZE_SUBSEQUENT_COLUMNS; // selected constructor public JTable(TableModel tm) // selected methods public int getSelectedRow() public int getSelectedColumn() public void setAutoResizeMode(int mode) public void setRowSelectionAllowed(boolean flag) public void setColumnSelectionAllowed(boolean flag) public void setCellSelectionEnabled(boolean flag) public void selectAll() public void clearSelection() } As usual for model/view splits, we need to define a data model that can be used with this class. Swing provides a DefaultTableModel class, but it is recommended to extend that class, or AbstractTableModel, instead of using it directly (see definition 6.4.10). For our purposes it is best to extend DefaultTableModel to make sure we can control whether cells can be edited or not. Definition 6.4.8: The DefaultTableModel Class This class can store data suitable for representation in a JTable. It stores data dynamically, using only as much memory as necessary at any given time.  The Java API defines this class as follows: public class DefaultTableModel extends AbstractTableModel implements Serializable { // selected constructor public DefaultTableModel() public void addColumn(Object columnName) public void addColumn(Object columnName, Object[] columnData) public void addRow(Object[] rowData) public void insertRow(int row, Object[] rowData) public void removeRow(int row) public int getRowCount() public int getColumnCount() public String getColumnName(int column) public boolean isCellEditable(int row, int column) public Object getValueAt(int row, int column) public void setValueAt(Object aValue, int row, int column) } The DefaultTableModel allows for data editing by default, which can be disabled by overriding isCellEditable to return false. Example 6.4.9: Use a JTable class to create an invoice-like program. Each row on the invoice should consist of an ID (int), a Description (String), the unit price (double), the quantity (int), and the total price (double). The program should enter all data for now, but there should be a separate field where the program will display the computed total amount. You do not have to worry about formatting the doubles to correctly represent currency values (i.e. two digits after the period, see "Formatting Decimals", section 1.5). We need to create a JTable, tie it to a particular data model, and add some sample data in the specified format to the model. Looking through our methods for adding data to a DefaultTableModel we see that we can only add arrays of Object. Therefore, we need to use wrapper classes to convert int and double types to their corresponding wrapper objects Integer and Double. To see how our program works in principle, here is its layout: import java.awt.Dimension; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class Invoicer extends JFrame { private DefaultTableModel data = new DefaultTableModel(); private JTable table = new JTable(data); private JLabel price = new JLabel("$0.0", SwingConstants.RIGHT); private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) { System.exit(0); } } public Invoicer() { super("Simple Table"); createDataColumns(); createSampleData(); JScrollPane scrollTable = new JScrollPane(table); price.setText("$" + total()); scrollTable.setPreferredSize(new Dimension(400,100)); getContentPane().add("Center", new JPanelBox(scrollTable, "Data")); getContentPane().add("South", new JPanelBox(price, "Total Cost")); addWindowListener(new WindowCloser()); validate(); pack(); setVisible(true); } private void createDataColumns() { /* create columns with appropriate headers */ } private void createSampleData() { /* create some sample data */ private Object[] dataRow(int id, String desc, double price, int num) { /* utility method to convert basic types into array of Objects */ } private double total() { /* computes the total in the last column of the table */ } public static void main(String args[]) { Invoicer st = new Invoicer(); } } The method createDataColumns is the easiest to understand. It simply adds five columns to our data model with appropriate headers: private void createDataColumns() { data.addColumn("ID"); data.addColumn("Description"); data.addColumn("Unit Price"); data.addColumn("Quantity"); data.addColumn("Price"); } The createSampleData uses the addRow method to add some sample data. Since that method requires an array of objects, it uses in turn the dataRow method to create an array of objects from some sample data. Here are both of these methods: private void createSampleData() { data.addRow(dataRow(19, "IBM 770 Laptop", 4329.99, 1)); data.addRow(dataRow(207, "External ZIP drive", 99.95, 1)); data.addRow(dataRow(1008, "SDRAM Memory Chips, 64MB", 104.99, 4)); data.addRow(dataRow(44, "IBM 21' Triniton Monitor", 699.95, 1)); data.addRow(dataRow(105, "External Keyboard, black", 59.99, 1)); data.addRow(dataRow(207, "External Mouse, black", 29.99, 1)); data.addRow(dataRow(45, "IBM Port Replicator", 145.99, 1)); } private Object[] dataRow(int id, String desc, double price, int num) { Object row[] = new Object[5]; row[0] = new Integer(id); row[1] = desc; row[2] = new Double(price); row[3] = new Integer(num); row[4] = new Double(price * num); return row; } The last method to implement is the total method. It loops through all rows, retrieving the value in the last column (containing the price). Since the getValueAt method returns an object, we first typecast it into a Double, then retrieve its double value and add it to a running sum: private double total() { double sum = 0.0; for (int row = 0; row < data.getRowCount(); row++) sum += ((Double)data.getValueAt(row, 4)).doubleValue(); return sum; } Now all methods are implemented, and the program should run. It will create an "invoice" similar to the following figure:  Figure 6.4.4: The Invoicer program in action To be sure, when you first start the program all columns will have equal width. The width of a column can be adjusted interactively by dragging the column boundaries. In fact, entire columns can be switched with other columns by dragging them around. Try it yourself. n Actually, there is a slight problem with our class: the DefaultTableModel lets you edit the cells by double-clicking on them (again, try it) ! At first glance that might sound very convenient and we could try to add some listener to tell us when a cell has been edited so that we can adjust the total if necessary. However, the default editor will convert edited objects into strings, and then our invoice will not work any more because the object containing the price will automatically convert from its original Double type to String. We will fix that error in example 6.4.11 according to our next rule of thumb. Definition 6.4.10: Rule of Thumb for Editing Table Cells A JTable together with a DefaultTableModel allows editing of all cells by default. Edited cells are converted to String, so that editing will only work correctly if the original data was already of type String. To disable editing, create a new class that extends DefaultTableModel and overwrite the public boolean isCellEditable(int row, int col) method to always return false. Example 6.4.11: In example 6.4.9 we used a DefaultTableModel, hence the table cells in that Invoicer program were editable. Substitute your own model for the default model so that all cells become non-editable. First we need to create our own model extending DefaultTableModel. The only method we will overwrite is isCellEditable, so the new model is easy: import javax.swing.table.*; public class NoEditTableModel extends DefaultTableModel { public boolean isCellEditable(int row, int col) { return false; } } That's the entire class. All we have to do in the Invoicer program is replace the line defining the data model. Instead of: private DefaultTableModel data = new DefaultTableModel(); we substitute our own model: private NoEditTableModel data = new NoEditTableModel(); After recompiling the Invoicer class, everything will work as before and all cells are now non-editable (make sure to try it). n We will conclude this section with a more elaborate version of the Invoicer program: Example 6.4.12: Create a second version of our Invoicer program that contains options to remove a selected row, to add a row, and to edit a row. All editing should take place in appropriate dialogs. Make sure the total price is recomputed if necessary. We want to accomplish this modification with as little change to our original class as possible. Therefore, we will try to move most of our new code into other classes. An easy way to achieve that is to attach a popup menu to our table containing the options to add, modify, and delete rows, and to use a separate class to define and react to the popup menu selections. As described in definition 6.2.21, to bring up a popup menu we need to detect a right-click via a mouse listener. Therefore the change to our existing Invoicer class will consist of adding a mouse listener implemented in a separate class. In order for the new class to have access to the fields of Invoicer we also mark its fields as protected. The new class will be defined as: public class InvoicePopup extends MouseAdapter implements ActionListener { /* brings up a popup menu and reacts to selections from that menu */ } The change in the Invoicer class will be: we change the accessibility of the fields data, price, and table from private to protected we change the method total from private to protected we install a mouse listener to the table via the line table.addMouseListener(new InvoicePopup(this)); we also add a tooltip to the table reminding the user to click the right mouse button to choose an option, via the line table.setToolTipText("Right-Click for menu"); Both lines of code should be at the end of the Invoicer constructor. Now we need to think about the InvoicerPopup class. Since we add that class as a mouse listener to a table, the class must extend MouseAdapter (or implement MouseListener). It also needs to react to menu selections so that it must implement ActionListener. One of the jobs of this class is to bring up a dialog to enter new data or modify existing invoice items. We will use the showOptionDialog method for that and hence we need a panel of input fields that we can pass to that method. Therefore we will first create a class InvoicePanel that determines a mask for data entry and modification. InvoicePanel should contain input fields for the items of an invoice, but some of those items are numbers instead of strings. A JTextField would not work for those types, so we first create a JNumberField class that can return an int or double, as requested (compare example 5.1.16). To do that we start with a JTextField and create methods that convert strings to int or double, respectively. Since that may or may not work depending on the user input, those methods will throw a potential NumberFormatException. Here is that class: import javax.swing.*; public class JNumberField extends JTextField { public int getInteger() throws NumberFormatException { return Integer.valueOf(getText()).intValue(); } public double getDouble() throws NumberFormatException { return Double.valueOf(getText()).doubleValue(); } } With that class in place, we can define our InvoicePanel to consist of text and number fields, appropriately arranged, as well as methods to conveniently set and get the values of those fields: import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.*; public class InvoicePanel extends JPanel { protected JNumberField id = new JNumberField(); protected JTextField desc = new JTextField(); protected JNumberField price = new JNumberField(); protected JNumberField num = new JNumberField(); public InvoicePanel() { JPanel labels = new JPanel(new GridLayout(4,1)); labels.add(new JLabel(" ID ")); labels.add(new JLabel(" Description ")); labels.add(new JLabel(" Price ")); labels.add(new JLabel(" Num Units")); JPanel inputs = new JPanel(new GridLayout(4,1)); inputs.add(id); inputs.add(desc); inputs.add(price); inputs.add(num); setLayout(new BorderLayout()); add("West", labels); add("Center", inputs); } public Object[] getData() throws NumberFormatException { Object data[] = new Object[5]; data[0] = new Integer(id.getInteger()); data[1] = desc.getText(); data[2] = new Double(price.getDouble()); data[3] = new Integer(num.getInteger()); data[4] = new Double(price.getDouble() * num.getInteger()); return data; } public void setData(String[] data) { id.setText(data[0]); desc.setText(data[1]); price.setText(data[2]); num.setText(data[3]); } } Now we are ready to create our InvoicePop method, extending WindowAdapter and implementing ActionListener as mentioned before. The class will receive as input a reference to Invoice so that it can use the non-private fields and methods of that class. It also gets a reference to the table so that the popup menu can be placed correctly over that component. Aside from constructing and showing the menu, the class will react to the menu choices using three methods add, delete, and modify, as follows: import java.awt.event.*; import javax.swing.*; public class InvoicePopup extends MouseAdapter implements ActionListener { private JPopupMenu menu = new JPopupMenu("Table Options"); private JMenuItem add = new JMenuItem("Add Item"); private JMenuItem del = new JMenuItem("Delete Item"); private JMenuItem mod = new JMenuItem("Modify Item"); private Invoicer parent = null; public InvoicePopup(Invoicer _parent) { parent = _parent; menu.add(add); add.addActionListener(this); menu.add(mod); mod.addActionListener(this); menu.add(new JPopupMenu.Separator()); menu.add(del); del.addActionListener(this); } public void mousePressed(MouseEvent me) { if (SwingUtilities.isRightMouseButton(me)) menu.show(parent.table, me.getX(), me.getY()); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == add) add(); else if (ae.getSource() == del) delete(); else if (ae.getSource() == mod) modify(); } private void delete() { /* deletes the currently selected row from the invoice table */ } private void add() { /* brings up dialog box to add a new Incoice item to the table */ } private void modify() { /* brings up dialog box with selected Invoice item for editing */ } } The delete method is the easiest of the three. It finds out which, if any, row is currently selected in the table, retrieves the description of that invoice item, and brings up a dialog box to confirm deletion. If the user clicks OK, the selected row is removed from the data model (which in turn will update the table automatically). public void delete() { int row = parent.table.getSelectedRow(); if (row >= 0) { String msg = "Delete '" + parent.data.getValueAt(row, 1) + "'?"; if (JOptionPane.showConfirmDialog(parent, msg, "Confirm Deletion", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { parent.data.removeRow(row); parent.price.setText("$" + parent.total()); } } } The add method is more complicated in theory: it should bring up a dialog box where the user can enter new data, check the types of the data entered, and insert that data into a new row of the invoice. But fortunately InvoicePanel handles all details, so the actual add method turns out to be not hard at all. public void add() { InvoicePanel invoice = new InvoicePanel(); if (JOptionPane.showOptionDialog(parent, invoice, "New Invoice Item", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null) == JOptionPane.YES_OPTION) { try { parent.data.addRow(invoice.getData()); parent.price.setText("$" + parent.total()); } catch(NumberFormatException nfe) { JOptionPane.showMessageDialog(parent, "Invalid numeric format", "Error Message", JOptionPane.ERROR_MESSAGE); } } } The getData method from the InvoicePanel will throw an exception if the user has entered incorrect numerical values, so we catch that exception and notify the user via a message dialog that data could not be added. The final method modify is the most complicated, but again with the help that InvoicePanel provides it will not be so bad. First we check which row, if any, is selected in the table. Then we retrieve the data from that row and use the setData method to insert it into an InvoicePanel. After that we bring up an options dialog with that panel, which will present the data to the user for editing. When the user clicks OK the modified data will replace the one in the current row if possible. If there is an input error, we again use a message box to inform the user that data could not be modified. public void modify() { InvoicePanel invoice = new InvoicePanel(); int row = parent.table.getSelectedRow(); if (row >= 0) { String data[] = new String[4]; for (int i = 0; i < data.length; i++) data[i] = parent.data.getValueAt(row, i).toString(); invoice.setData(data); if (JOptionPane.showOptionDialog(parent, invoice, "Change Item", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null) == JOptionPane.YES_OPTION) { try { for (int i = 0; i < invoice.getData().length; i++) parent.data.setValueAt(invoice.getData()[i], row, i); parent.price.setText("$" + parent.total()); } catch(NumberFormatException nfe) { JOptionPane.showMessageDialog(parent, "Invalid number", "Error Message", JOptionPane.ERROR_MESSAGE); } } } } Note that we use three null parameters in showOptionDialog. That has the effect of using the default icon specified for a WARNING_MESSAGE and the buttons specified by OK_CANCEL_OPTION. Here is the improved version of the Invoicer in action.  New Invoicer program with ToolTip and Popup Menu activated  Modification Dialog Delete Confirmation Dialog Box  Error Message Dialog Box Figure 6.4.5: Various dialogs for the new Invoicer program One minor but annoying problem with our program is that if the user makes an error entering a number, the data entry dialog disappears before the error message appears. That does not give the user a convenient way to simply fix the mistake, all data must be re-entered instead. It is possible to remove the 'auto-closing' feature from the dialog boxes that appear via a showOptionDialog, but it involves concepts we have not defined. Please see the Java API for details. Alternatively, we could use an instance of a JDialog whose behavior can be controlled completely and easily (but we would not get automatic icons). n Graphing and Painting in Swing In chapter 4 we introduced the java.awt.Canvas class whose sole purpose was to contain graphics or images. To use it, we had to extend the class, overwrite the paint method, and put all drawing routines in that method. Swing does not provide a comparable class, so graphics should be contained in another class. Actually, we have already seen that the JLabel class can easily accommodate images. It can in fact also contain graphics just as easily, but another class is usually better for that purpose: the JPanel class. Definition 6.4.13: Painting in the JPanel Class Since there is no class in Swing comparable to java.awt.Canvas, a class that needs to create custom graphics should extend JPanel. The extended class should overwrite public void paintComponent(Graphics g) and place any custom graphics code in that method. The first line in that method should call the paintComponent of the super class. The method paint that is also inherited by a JPane should not be overwritten or changed. Using JPanel instead of Canvas provides several immediate benefits: JPanel is a "lightweight" Swing component and can overlap with other components JPanel automatically paints its components using an efficient technique called "double buffering" (compare definition 6.5.12) JPanel supports scrolling by using JScrollPanel JPanel can contain standard borders (as usual for Swing components) The class also contains a repaint method without arguments that eventually calls paintComponent with the appropriate Graphics object as input (compare to section 4.7) to redo all graphics. Example 6.4.14: Create a JPanel class that draws some graphics shapes in some colors as well as a String in some font. Add a border around the panel, define a tool tip, and attach a popup menu with a single choice that calls System.exit. Then add the panel to a frame using JScrollPane and test the program. Of course we need two classes, one extending JPanel and one extending JFrame. The JPanel class will contain all drawing code in its paintComponent method, as defined above. The code to define the tooltip and the menu goes in the constructor. The class must implement ActionListener to react to the choice of the popup menu and it needs a mouse listener that we implement as an inner class to bring up the popup menu on a right mouse click. The trick to enable proper scrolling is to overwrite the method getPreferredSize to specify how large our drawing wants to be. Only with that method defined correctly can the JScrollPanel defined in the frame know how to handle scrolling. Here is the drawing class (try to guess the image that will be drawn): import java.awt.Dimension; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class GraphicsPanel extends JPanel implements ActionListener { private JPopupMenu menu = new JPopupMenu("Menu"); private JMenuItem exit = new JMenuItem("Exit"); private class Trigger extends MouseAdapter { public void mousePressed(MouseEvent me) { if (SwingUtilities.isRightMouseButton(me)) menu.show(GraphicsPanel.this, me.getX(), me.getY()); } } public GraphicsPanel() { menu.add(exit); exit.addActionListener(this); setBackground(Color.white); setToolTipText("Right-click to exit"); addMouseListener(new Trigger()); } public Dimension getPreferredSize() { return new Dimension(270,270); } public void paintComponent(Graphics g) { super.paintComponent(g); Font font = new Font("Helvetica", Font.BOLD + Font.ITALIC, 14); g.setColor(Color.yellow); g.fillOval(10, 10, 210, 210); g.setColor(Color.black); g.fillArc(40, 40, 150, 150, 180, 180); g.setColor(Color.yellow); g.fillArc(40, 20, 150, 130, 180, 180); g.setColor(Color.black); g.fillOval(50, 70, 30, 30); g.fillOval(150, 70, 30, 30); g.setFont(font); g.drawString("Welcome to Swing", 60, 250); } public void actionPerformed(ActionEvent ae) { System.exit(0); } } The frame class is quite simple, since all the action happens in the drawing class. The only thing that our class really does is to add an instance of our GraphicsPanel, endowed with a border via our JPanelBox class (see example 6.2.18) as its center component. We will set the size of the panel manually to something slightly smaller than its preferred size to illustrate the scrollbars in action: import javax.swing.*; public class GraphicsTest extends JFrame { public GraphicsTest() { super("Graphics Test"); GraphicsPanel canvas = new GraphicsPanel(); JScrollPane scrollCanvas = new JScrollPane(canvas); JPanelBox borderedCanvas = new JPanelBox(scrollCanvas, "Graphics"); getContentPane().add("Center", borderedCanvas); setSize(200, 200); validate(); setVisible(true); } public static void main(String args[]) { GraphicsTest gt = new GraphicsTest(); } } Here is the image resulting from executing this class:  Figure 6.4.6: Image resulting from GraphicsTest class n Since Swing class have more functionality that AWT classes, it will quite often not be necessary to use these techniques. Images, for example, can easily be represented in a JLabel and positioned with a layout manager. The JTable and JTree classes provide capabilities that would have to be simulated using a Canvas in the AWT. Graphic buttons are easily created by adding an image to the JButton class. However, occasionally graphics are necessary, and the simple example above should suffice for most situations. To be sure, we will, in the next chapter, explore some more options about handling graphic efficiently, and in chapter 6.6 we will present the Mandelbrot example, making extensive use of drawing for which Swing does not provide any build-in alternatives. Still, the above example will form the foundation for all these situations. 6.5. Images and Sounds In this chapter we will explore in some more detail the intricacies of loading images. We will show how to load several images and control the loading process, explain a simple animation program, and introduce Swing's sound handling capabilities. We will also explain how to load images and sounds into applets, for which we need to overcome a security restriction build into Java. This section, as well as section 6.6, is entirely optional. Loading and Filtering Images We will start our discussion with managing the loading process of more than one image. Of course we have already seen examples of how images can easily be loaded and displayed in a JLabel, but there are some techniques that will be useful when trying to work with multiple images, such as during animation. As mentioned, Java provides extensive support for images in GIF or JPEG format. The simplest way to display an image is to enter it into a JLabel, using the file name of the image as input parameter. There will be several situations, however, where it is useful to load and store an image without necessarily displaying it. We may need it for processing before displaying it, or we may want to collect several images to create an animation, starting the animation process only when all images are loaded. Or, as a simple example, we may want to display the status of loading the image, particularly when loading it over a network connection. The very first thing we need, therefore, is a class that can store a representation of an image. Definition 6.5.1: The Image Class The Image class is an abstract class in the java.awt package that can be used to represent images. Since the class is abstract, it can not be used to instantiate any objects; instead, the image must be obtained using appropriate methods. The Image class is typically used to either store a representation of a GIF or JPEG graphics file or to provide access to an off-screen Graphics object into which Java can draw using its basic drawing methods. Images can be associated with an ImageObserver that provides access to the loading status of an image. The Java API defines Image as follows: public abstract class Image extends Object { // selected Methods public abstract int getWidth(ImageObserver observer) public abstract int getHeight(ImageObserver observer) public abstract ImageProducer getSource() public abstract Graphics getGraphics() } Since this class is an abstract class, we need to explore ways to load an image first before we can provide any examples. The loading of the image is actually system-dependent. However, Java provides a special class that forms a bridge between platform-independent Java classes and methods and their system-dependent implementations. Definition 6.5.2: The Toolkit Class The Toolkit class is an abstract class that provides system-dependent implementations of the platform-independent classes in the java.awt package. Most methods in the Toolkit class should not be called directly but a few methods provide convenient access to system-dependent mechanisms and parameters: public String[] getFontList(): The names of the available fonts public Image getImage(String filename): Loads image from the specified file public Image getImage(URL url): Loads image from the specified URL public Dimension getScreenSize(): Gets the size of the screen in pixels To access to the Toolkit methods, every Component provides the method public Toolkit getToolkit(), which returns a Toolkit instance. The getImage methods return immediately and will start the loading process only when the image is actually rendered. In particular, the Toolkit class provides access to the overloaded methods getImage, which in turn return a reference to an Image in a valid format. That image can than be used as input to a JLabel for display. Example 6.5.3: Create a program that loads the image file cat.jpg. After issuing a Toolkit call to getImage, display the width and height of the image. Again display these parameters after displaying the image in a JLabel. Compare the output. Of course our program will only work if there is a file cat.jpg. We will assume that this file exists in the same directory as the rest of our class. The simple way to load this image would be to use ImageIcon image = new ImageIcon("cat.jpg"); JLabel displayImage = new JLabel(image); A somewhat more elaborate version of these two lines would first load the image into an Image class instead of an ImageIcon, then use that as input for a JLabel as follows: import java.awt.Image; import javax.swing.*; import java.io.*; public class SimpleImageTest extends JFrame { private Image image = null; private JLabel display = new JLabel(); public SimpleImageTest() { super("Image Test"); image = getToolkit().getImage("cat.jpg"); System.out.println("Size: " + image.getWidth(this) + " by " + image.getHeight(this)); display.setIcon(new ImageIcon(image)); getContentPane().add("Center", display); validate(); pack(); setVisible(true); System.out.println("Size: " + image.getWidth(this) + " by " + image.getHeight(this)); } public static void main(String args[]) { SimpleImageTest sit = new SimpleImageTest(); } } This program works fine and since we have already seen the image before there is no reason to show another screen shot of this program. What is interesting, on the other hand, is the width and height of the image that our program displays. It will produce two lines on standard output similar to the following: Size: -1 by -1 Size: 384 by 269 This illustrates that a call to getImage does not actually start the loading process, hence information about the dimensions of the image is not available. After the image displays, however, its dimensions are available and correct. n At first it may not be clear why we should use the getImage method from the ToolKit when a JLabel can just as easily load and display the image. But having the image available separately is useful if the image needs to be processed before displaying. We will very briefly touch upon filtering images as an example of image processing. Java does provide many (!) different classes and methods to manipulate images and we can not hope to cover all of them. Therefore, we will provide only a very brief example of image filtering. Definition 6.5.4: Image Filtering using the RGBImageFilter and GrayFilter Classes Images can be filtered to change the way they present their pixels. A simple-to-use image filter is provided by the java.awt.image.RGBImageFilter class. To create a filter, you define a class extending RGBImageFilter and implement one abstract method: public int filterRGB(int x, int y, int rgb) You should also set the value of canFilterIndexColorModel to true if the filter's operation does not depend on the pixel's (x,y) location, or to false otherwise. In a class extending Component you can then obtain the new filtered image via: Image newImg = createImage(new FilteredImageSource( img.getSource(), new MyOwnFilter())); One ready-made image filter is provided by the Swing class GrayFilter, which extends RGBImageFilter. Its constructor takes a boolean value as input, indicating whether pixels should be brightened, and an integer between 0 and 100 indicating the percentage of graying to be used. Example 6.5.5: Use the GrayFilter class to create a gray version of the cat.jpg image. Your program should provide buttons to either show the original color version or the grayed version of the image. We have already seen how to load an image using the ToolKit. This time, we use two Image fields, load the original image into the first and store a grayed version of it in the second, using the GrayFilter class as described in the definition. We define buttons as usual to display either one of these images. import java.awt.FlowLayout; import java.awt.Image; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; public class FilteredImageTest extends JFrame implements ActionListener { private ImageIcon colorVersion = null; private ImageIcon grayVersion = null; private JButton color = new JButton("Color"); private JButton gray = new JButton("Gray"); private JLabel display = new JLabel(); public FilteredImageTest() { super("Image Test"); Image colorImage = getToolkit().getImage("cat.jpg"); Image grayImage = createImage(new FilteredImageSource( colorImage.getSource(), new GrayFilter(true, 50))); colorVersion = new ImageIcon(colorImage); grayVersion = new ImageIcon(grayImage); JPanel buttons = new JPanel(new FlowLayout()); buttons.add(color); color.addActionListener(this); buttons.add(gray); gray.addActionListener(this); display.setIcon(colorVersion); getContentPane().add("Center", display); getContentPane().add("South", buttons); validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == color) display.setIcon(colorVersion); else if (ae.getSource() == gray) display.setIcon(grayVersion); } public static void main(String args[]) { FilteredImageTest sit = new FilteredImageTest(); } } Here are the two versions of the image: Figure 6.5.1: Original and GrayFiltered cat.jpg image n It is relatively easy to provide your own image filters, but the details will be beyond the scope of this book. Please consult the Java API for details on the RGBImageFilter and FilteredImageSource classes. Animation and Enhanced Image Loading So far we have let the JLabel class or getImage method determine when exactly the image is loaded and when and how the image is displayed. As it happens, that class will start the loading process, wait until the entire image is downloaded, then display the complete image. The getImage method on the other hand returns immediately, not loading the image at all. If we wanted to create an animation using several images, we could load all images into an array via getImage, then use that array of images sequentially in a JLabel to create an animation. However, the first time that animation is running it would not run effectively, because the JLabel class will wait until the entire image is loaded before displaying it. There would therefore be a delay between images at least as large as it takes to download the next image. To avoid that delay, we want to make sure that all images are loaded completely before beginning the animation process. Java provides the MediaTracker class for that purpose. Definition 6.5.6: The MediaTracker Class The MediaTracker is a utility class that can automatically track the loading progress of one or more images. In its simplest form an instance of a MediaTracker is created and attached to a Component, the images are added to it, and then the MediaTracker is told to either block any further execution until one or more images are completely loaded or to start the loading process for one or more images without necessarily displaying them. public class MediaTracker extends Object { // Constructor public MediaTracker(Component comp) // selected Methods public void addImage(Image image, int id) public boolean checkAll(boolean beginLoading) public boolean checkID(int id, boolean beginLoading) public void waitForAll() throws InterruptedException public void waitForID(int id) throws InterruptedException public synchronized boolean isErrorAny() } The waitForAll and waitForID methods are blocking methods, i.e. they suspend execution until the image or images are completely loaded. The checkAll and checkID methods will start the loading process for the image or images without blocking. Currently, the MediaTracker can only track image files but in future versions it might also track sound file and other media formats. Example 6.5.7: Create, somehow, several images that form an animation (use stick figures if you must). Then load them using a MediaTracker, making sure all images are loaded. Finally, display the animated sequence in an infinite loop. If any errors occur, inform the user via an appropriate message box. This example really consists of several steps to take: we need to create images suitable for animation we need to load those images into a class using a media tracker we need to determine a class to extend for our animation we need to animate the images Creating the animation images has nothing to do with Java programming and we will leave it to your creativity. As an example, we'll create a "winking smiley face", using the following images: image1image2image3image4image5Figure 6.5.2: Various images used for animation For our animation, we arrange the image in the following files, using some duplicates: smile0.gif = image1 smile1.gif = image2 smile2.gif = image3 smile3.gif = image2 smile4.gif = image1 smile5.gif = image4 smile6.gif = image5 smile7.gif = image4 smile8.gif = image1 That solves our first problem. Next, we will introduce the code snippet to load images controlled by a MediaTracker: Image images[] = new Image[9]; MediaTracker tracker = new MediaTracker(this); for (int i = 0; i < images.length; i++) { images[i] = getToolkit().getImage("smile" + i + ".gif"); tracker.addImage(images[i], i); } try { tracker.waitForAll(); } catch(InterruptedException ie) { showError("Image loading interrupted: " + ie); } if (tracker.isErrorAny()) showError("Error loading one or more images"); In other words, we create an array of nine images and an instance of a MediaTracker attached to this component (which must therefore implement ImageObserver). Then we use getImage to load the images into the array. This will not actually start the loading process as getImage returns immediately. We also add each image to the media tracker. Then we start the loading process for all images and wait until all of them are completely loaded. Since waitForAll throws an exception, we embed it in a standard try-catch clause, using a method showError we still need to implement. Finally, we check on the status of the media tracker to see if there were any errors loading the image. The most likely error would be that a file name is incorrect. If an error occurs, we again call on showError to inform the user. That solves our second problem. As for the third part, we could extend JPanel since we are doing some custom drawing or JLabel since we are trying to display images. If we did use JLabel, though, we would need to wrap our images into ImageIcon objects and that would be a waste or memory. So we will use the JPanel class and draw the images "by hand" without the help of a JLabel. To finish the class, we need to decide how to do the actual animation. Of course we will use a thread for this, so our class needs to implement the Runnable interface. That means we need a field of type Thread and a run method. We will also use an additional field called currentImage of type int. The run method will, in an infinite loop, advance currentImage and call repaint, as well as putting our thread to sleep for some time. The repaint method will in turn call paintComponent, where we draw the current image as specified by currentImage. Here is the complete class: import java.awt.MediaTracker; import java.awt.Dimension; import java.awt.Image; import java.awt.BorderLayout; import java.awt.Graphics; import javax.swing.*; public class AnimationPanel extends JPanel implements Runnable { private Image images[] = new Image[9]; private int currentImage = 0; private Thread thread = null; public AnimationPanel() { MediaTracker tracker = new MediaTracker(this); for (int i = 0; i < images.length; i++) { images[i] = getToolkit().getImage("smile" + i + ".gif"); tracker.addImage(images[i], i); } try { tracker.waitForAll(); } catch(InterruptedException ie) { showError("Image loading interrupted: " + ie); } if (tracker.isErrorAny()) showError("Error loading one or more images"); thread = new Thread(this); thread.start(); } public void run() { while (true) { try { repaint(); thread.sleep(100); if (currentImage >= images.length-1) currentImage = 0; else currentImage++; } catch(InterruptedException ie) { showError("Thread interrupted: " + ie); } } } public Dimension getPreferredSize() { return new Dimension(images[0].getWidth(this), images[0].getHeight(this)); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(images[currentImage], 0, 0, this); } private void showError(String msg) { JOptionPane.showMessageDialog(this, msg, "Error", JOptionPane.ERROR_MESSAGE); } } Of course this class needs to be embedded in another class before it can run. Here is a sample class that will finish this example: import javax.swing.*; public class AnimationTest extends JFrame { public AnimationTest() { super("Animation Test"); getContentPane().add("Center", new AnimationPanel()); validate(); pack(); setVisible(true); } public static void main(String args[]) { AnimationTest gt = new AnimationTest(); } } It is difficult to show an animation on a static page, but given the images shown above it should be easy to imaging the animation showing a winking smiley face. n There are many possible improvements for an AnimationPanel class. Some possibilities are: add a constructor that passes files names into the AnimatorPanel class so that those files will be used for animation allow for setting of the sleep time and add the possibility of adding a longer pause at the end of the animation change the MediaTracker so that the first image will be displayed as soon as possible, while loading the remaining images. The actual animation would only start when all images are loaded allow for starting, pausing, and restarting the animation at any time We will not pursue this here, but none of these modifications would be difficult and you are welcome to try them as exercises. Loading and Displaying Images in Applets We have so far avoided creating any applets that deal with images, even as icons for buttons. That was no accident, but due to a security restriction on applets: applets are not allowed to read any files from the local disk so we could not have loaded an image file from the local disk into an applet. We will discuss applet security in detail in chapters 9 and 10, but we need to make a quick excursion into the land of URL's in order bypass that restriction and support loading images and sounds in applets nonetheless. Recall that the getImage method has an overloaded constructor, requiring either a String or a URL as input for the image file to load. The same is true for the constructor of an ImageIcon. So far we have only used the filename as input string, but now it is time to explore the second version using a URL. Definition 6.5.8: Uniform Resource Locator and the URL Class A Uniform Resource Locator, or URL, is a pointer to a resource on the World Wide Web. In most, but not all, situations, the resource represents a file such as an HTML document an image file, or a sound clip. A URL consists of several parts: the protocol, the machine address, an optional port, the file component, and an optional anchor. If some components of a URL are missing, they can be inherited from the context URL. Java provides a URL class in the java.net package to represent a Uniform Resource Locator: public final class URL extends Object { // Constructors public URL(String address) throws MalformedURLException public URL(URL context, String file) throws MalformedURLException public URL(String protocol, String host, String file) throws MalformedURLException public URL(String protocol, String host, int port, String file) throws MalformedURLException } In particular, note that we need to catch a MalformedURLException if we want to create a new URL. The first and second form of the constructor are perhaps the most useful: the first form, requiring only a string as input, is used to enter the entire, complete URL address in much the same way you would enter it in a web browser to visit a particular web page (for example new URL("http://www.shu.edu/index.html")). the second form, requiring a URL context and a String, can be used when the base URL of a file is matched against the first parameter and the name of the file against the second one (for example new URL(baseURL, "index.html"), assuming that baseURL is a URL such as URL baseURL = new URL("http://www.shu.edu/")). While applets are prevented from reading files from disks, they are allowed to read data through a URL connection. So if an applet could construct a URL pointing to a local file, it could use the appropriate getImage method or ImageIcon constructor to load an image file just fine. In fact, applets have two methods that make it easy to construct such URL's: Definition 6.5.9: Loading Data into Applets with getCodeBase and getDocumentBase Applets are prevented from reading data directly from disk, but they are allowed to read data from a URL. To construct a URL that points to the location of a data file that an applet wants to read, the JApplet class inherits the methods: public URL getDocumentBase(): Retrieves the base address of the HTML document containing the current tags for this applet in URL form public URL getCodeBase(): Retrieves the base address of the location of the applet class file in URL form. The returned base addresses could refer to an address on the Internet or a location on a local disk. The standard protocol using an Internet location is http, while the protocol for local addresses is file. Applets and the data files they want to read must be located on the same machine. Recall that the Applet tag for HTML documents provides a number of parameters. In particular, the parameter CODE="ClassFile.class" specifies which Java class file to load, and the optional CODEBASE="url" specifies the base location where ClassFile.class is located: the getDocumentBase method will return the base location of the HTML document containing the tag or appropriate tag the getCodeBase method will return the base address specified in the CODEBASE parameter of the or tag if the class file and HTML documents are located in different directories. Example 6.5.10: Suppose you create a document named images.html that is saved on a web server named  HYPERLINK http://www.mathcs.shu.edu www.mathcs.shu.edu in a folder named JBD. That document might contain, aside from any other relevant HTML code, the applet tag:  Which base addresses will be returned by the getCodeBase and getDocumentBase methods? The location of the HTML file images.html that you would enter in a web browser to access the file would be:  HYPERLINK http://www.mathcs.shu.edu/JBD/images.html http://www.mathcs.shu.edu/JBD/images.html and the location of the Java class file in this example, in its full URL form, is http://www.shu.edu/~wachsmut/Java/Images.class The method getDocumentBase will then return  HYPERLINK "http://www.mathcs.shu.edu/JBD" http://www.mathcs.shu.edu/JBD while the method getCodeBase returns http://www.shu.edu/~wachsmut/Java. n Now it should be clear how we could redo the JAppletWithButtons example so that the applet contains the images that were part of the JFrameWithButtons program in example 6.2.10. Example 6.5.11: Redo example 6.2.12 to create an applet containing three buttons with images. It does not actually matter what happens when you click on the buttons as long as the images appear properly. Assume that the image files are located in a directory Icons in the same directory as the class file. Would this applet work when started from a local appletviewer program as well as from a web browser off the Internet? As in example 6.2.10, we assume that we have the following icons saved in a directory Icons:  new.gif  windows.gif  xwin.gif  java.gif For a frame we would define the buttons as fields and initialize them via: JButton windLook = new JButton("Windows", new ImageIcon("Icons/windows.gif")); That would not work for applets, so we need to use the constructor of an ImageIcon that uses a URL to point to the named image file. But to construct a URL we need to catch a MalFormedURL exception, which we can not do while initializing a field. Therefore, we first define a button without an icon, then add the appropriate icons in the init method. Since the example states that the icons are located in an Icons directory off the applet class file, we will use the getCodeBase method to create the appropriate URL, using the second version of the URL constructor. Here is the code: import java.net.*; import java.awt.event.*; import java.awt.FlowLayout; import javax.swing.*; public class JAppletWithButtons extends JApplet implements ActionListener { JButton windLook = new JButton("Windows"); JButton unixLook = new JButton("Unix"); JButton javaLook = new JButton("Java"); JLabel label = new JLabel("Welcome to Swing", SwingConstants.CENTER); public void init() { try { URL windURL = new URL(getCodeBase(), "Icons/windows.gif"); URL unixURL = new URL(getCodeBase(), "Icons/xwin.gif"); URL javaURL = new URL(getCodeBase(), "Icons/java.gif"); URL newURL = new URL(getCodeBase(), "Icons/new.gif"); windLook.setIcon(new ImageIcon(windURL)); unixLook.setIcon(new ImageIcon(unixURL)); javaLook.setIcon(new ImageIcon(javaURL)); label.setIcon(new ImageIcon(newURL)); } catch(MalformedURLException murle) { System.err.println("Error loading button images: " + murle); } getContentPane().setLayout(new FlowLayout()); getContentPane().add(label); getContentPane().add(windLook); getContentPane().add(unixLook); getContentPane().add(javaLook); } public void actionPerformed(ActionEvent ae) { /* whatever should happen if the buttons are pressed */ } } With the appropriate HTML document in place, the appletviewer will show the same image as for the JFrameWithButtons program:  Figure 6.5.3: JAppletWithButtons, using URL's to add icons to buttons and label Note that getCodeBase will take care of all protocol details so the code will work whether the applet is started from a local disk (file: protocol) or loaded from a web site (http: protocol), as long as the images and the class files are located on the same machine and the images are in a subdirectory called Icons off the class file directory. n From now on we can interchange standalone programs and applets, as long as the methods that load resources such as images and sound clips support the URL input parameter. Off-Screen Drawing and Double-Buffering So far all of our custom drawing took place in the paintComponent method. To be more precise we should say that all drawings took place within the Graphics object provided (automatically) by the paintComponent method. That is frequently not sufficient: If the drawing takes a lot of computing time, a program might want to prepare the graphics while showing the user some intermediate information, then swapping the entire image into place at once. The paintComponent method is called every time the class needs to refresh its display. If the code in that method takes a lot of time to compute it will be called all the time, causing unnecessary delays. The solution to these and other related problems is to draw to an off-screen graphics object instead of the Graphics object provided by paintComponent. Then, when the time comes, we can replace the paintComponents's Graphics object (which is visible) with the off-screen graphics (which used to be invisible) in one quick call. In other words, we need to: acquire an off-screen graphics object of the right dimensions ensure that all drawing is taking place in the off-screen graphics object implement the paintComponent method so that it swaps the off-screen graphics into the visible area To some extend, Swing components support this idea by default using a technique called double-buffering. Definition 6.5.12: Double-Buffering All Swing components that extend JComponent use a technique called double-buffering for painting. That means that instead of drawing directly to the visible area, an off-screen graphics object is created and all drawing is completed in the off-screen area. When painting is finished, the off-screen area is swapped into the visible area automatically. Double-buffering helps create graphics that appears smoothly and without flickering but requires additional memory to hold the off-screen drawing area. The JComponent class offers the method public void setDoubleBuffered(boolean flag) to turn this feature off if necessary. Double-buffering usually works well and you do not have to worry about it, but occasionally you need more control and you need to customize the drawing behavior to substitute your own off-screen drawing technique. Example 6.5.13: Create a simple program using Swing components that draws 10,000 filled circles in random colors, with random centers and radius 10 pixels. Start the program, move another window on top, then move the program window back to the front. Redo the same example, using only AWT components. Explain any differences you observe. The code for the Swing classes is quite simple: the graphics class extends JPanel, as usual, and put all the drawing-related code into the paintComponent method (the code simply allocates a random color and random coordinates for the center, then draws the corresponding circle using the fillOval method). We need a small second class to create a working program, so here are both classes: import java.awt.Graphics; import java.awt.Color; import javax.swing.*; public class LotsOfCircles extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < 10000; i++) { Color color = new Color((int)(255*Math.random()), (int)(255*Math.random()), (int)(255*Math.random())); int x = (int)(getSize().width * Math.random()); int y = (int)(getSize().height * Math.random()); g.setColor(color); g.fillOval(x-10, y-10, 20, 20); } } } import javax.swing.*; public class LotsOfCirclesTest extends JFrame { public LotsOfCirclesTest() { super("Lots of Circles"); getContentPane().add("Center", new LotsOfCircles()); setSize(300, 300); validate(); setVisible(true); } public static void main(String args[]) { LotsOfCirclesTest loct = new LotsOfCirclesTest(); } }  Figure 6.5.4: LotsOfCirclesTest programThe program works fine, but the graphics take a long time to complete. In fact, you will not see anything for quite some time, so be patient when running this program. Since Swing components use, by default, double-buffering, the circles are drawn in an off-screen area first and swapped into the visible area when the paintComponent method is finished. That leaves the user looking at an empty window for a while, which is not desirable. Let's see what the equivalent AWT program would do: we redo our classes, making the following modifications: remove all occurrences to Swing in the import statements change JPanel to Canvas in LotsOfCircles change paintComponent to paint in LotsOfCircles and remove the call to super.paintComponent change JFrame to Frame in LotsOfCirclesTest change getContentPane().add() to add() in LotsOfCirclesTest Here are the new classes, resulting in the same program using AWT components only: import java.awt.* public class LotsOfCircles extends Canvas { public void paint(Graphics g) { /* as before but without super.paintComponent(g); */ } } import java.awt.*; public class LotsOfCirclesTest extends Frame { public LotsOfCirclesTest() { super("Lots of Circles"); add("Center", new LotsOfCircles()); setSize(300, 300); validate(); setVisible(true); } public static void main(String args[]) { LotsOfCirclesTest loct = new LotsOfCirclesTest(); } } The program produces an image similar to the one before, but now you can see the circles as they are being drawn. That is somewhat better than before, even though the time it takes to complete the final graphics is just about the same. But in the AWT-based program the user can see something happening, which is better than looking at an empty screen for a while. However, both programs suffer from one important problem: every time the window needs to be regenerated the entire computation starts again. If you move, for example, another window on top of your program, then move your program back to the foreground, it regenerates the entire picture. Since that takes a fairly long time, the user will get annoyed with that program quickly. Moreover, since random circles are used, every time the picture regenerates it looks different. In some sense, there will be little we can do: the computation takes time and the code can not be optimized. However, unless the size of the window changes there is really no need to regenerate the computation if our program moves to the background, then to the foreground. All we would need to do is to be able to store the finished drawing somehow without recomputing it every time. n Now that we have seen a potential problem with generating complex graphics we need to explore how to do our own off-screen drawing so that we can substitute our own optimized code for the general-purpose double-buffering scheme used by Swing. Definition 6.5.14: Off-Screen Drawing Area An off-screen drawing area is an Image object that is not visible. To create an off-screen Image object and an attached off-screen Graphics object, the Component method public Image createImage(int width, int height) can be used, together with the Image method public Graphics getGraphics() The createImage method returns a reference to an Image object with the specified width and height, while getGraphics returns a reference to a Graphics object attached to an image. Note that createImage will return null if either width or height is zero, or if used in a constructor before the underlying object is laid out completely. In other words, to create an off-screen graphics object, you could use code similar to the following: // define fields Image offImage = null; Graphics offGraphics = null; ... // initialize the fields offImage = getImage(width, height); offGraphics = offImage.getGraphics(); To help utilizing off-screen graphics object, the following guidelines might be useful: Definition 6.5.15: Rule of Thumb for using Off-Screen Drawing Areas To use an off-screen drawing area you may want to follow these suggestions: Define integer fields height and width to store the current size of the component Define fields Image offImage and Graphics offGraphics and initialize them whenever the actual dimensions of the component are different from height and width, using a custom method initOffGraphics Move all drawing code from paintComponent to, say, public void offPaint(Graphics g) Call offPaint(offGraphics) at the appropriate time explicitly Implement the paintComponent method similar to the following code: public void paintComponent(Graphics g) { super.paintComponent(g); if ((getSize().width != width) || (getSize().height != height)) initOffGraphics(); if (offImage != null) g.drawImage(offImage, 0, 0, this); } For long computations consider using a thread to call offPaint. Example 6.5.16: Modify the "10,000 circles" program from example 6.5.13 so that it utilizes a custom-made off-screen drawing area (but no thread) instead of drawing directly to the visible area. Run the program, cover it with another window, then bring it back to the foreground. Also resize the window to make sure that it works correctly. Describe what happens and what the differences are to the previous implementation in example 6.5.13. To understand a common error when using the createImage method, we will not follow the above suggestion but try to make do with somewhat easier code, not saving the current width and height and instead creating the offscreen image right in the constructor. import java.awt.Graphics; import java.awt.Color; import java.awt.Image; import javax.swing.*; public class LotsOfCircles extends JPanel // this class will not work { private Image offImage = null; private Graphics offGraphics = null; public LotsOfCircles() { super(); offImage = createImage(getSize().width, getSize().height); offGraphics = offImage.getGraphics(); offPaint(offGraphics); } public void offPaint(Graphics g) { for (int i = 0; i < 10000; i++) { Color color = new Color((int)(255*Math.random()), (int)(255*Math.random()), (int)(255*Math.random())); int x = (int)(getSize().width * Math.random()); int y = (int)(getSize().height * Math.random()); int r = 10; g.setColor(color); g.fillOval(x-r, y-r, 2*r, 2*r); } } public void paintComponent(Graphics g) { super.paintComponent(g); if (offImage != null) g.drawImage(offImage,0,0,null); } } In the constructor we initialize the off-screen image and attached graphics object. Then we call offPaint with offGraphics as input to generate the image. Finally, the paintComponent method is simplified to swap the off-screen graphics into the visible graphics context. The class LotsOfCirclesTest remains unchanged from example 6.5.13 but to our dismay we get the following runtime error when running the program: C:\jbd\06\>java LotsOfCirclesTest Exception in thread "main" java.lang.NullPointerException at LotsOfCircles.(LotsOfCircles.java:11) at LotsOfCirclesTest.(LotsOfCirclesTest.java:6) at LotsOfCirclesTest.main(LotsOfCirclesTest.java:10) The code leading to the null pointer exception is the line offGraphics = offImage.getGraphics(); Just before that line we create offImage with input parameters getSize().width and getSize().height to make sure the offscreen image has the same size as the image in the JPanel. However, the JPanel, at that time, has not been laid out yet so its width and height are 1. Hence, offImage is null and therefore we can not call its getGraphics method. To fix that error, we must make sure to generate the offscreen image only when the panel has a well-define width and height. Moreover, we should do it in such a way that the offscreen image and associated graphics is regenerated whenever the size of the panel changes. To accomplish that, we follow the above rule of thumb guidelines and keep track of the current dimensions of the panel. In the paintComponent method we check if the dimensions have changed. If so, paintComponent will regenerate the offscreen image and associated drawing. Since paintComponent is called every time the panel is resized or redrawn, this will ensure that the offscreen image will be in total sync with the size of the panel at all times. Here is the code that works: public class LotsOfCircles extends JPanel // this class will work fine { private Image offImage = null; private Graphics offGraphics = null; private int width = 0, height = 0; public LotsOfCircles() { super(); setDoubleBuffered(false); } public void offPaint(Graphics g) { for (int i = 0; i < 10000; i++) { Color color = new Color((int)(255*Math.random()), (int)(255*Math.random()), (int)(255*Math.random())); int x = (int)(getSize().width * Math.random()); int y = (int)(getSize().height * Math.random()); int r = 10; g.setColor(color); g.fillOval(x-r, y-r, 2*r, 2*r); } } public void initOffGraphics() { width = getSize().width; height = getSize().height; offImage = createImage(width, height); offGraphics = offImage.getGraphics(); offPaint(offGraphics); } public void paintComponent(Graphics g) { super.paintComponent(g); if ((width != getSize().width) || (height != getSize().height)) initOffGraphics(); if (offImage != null) g.drawImage(offImage,0,0,this); } } In other words, if paintComponent detects that the actual size of the component is different from the one recorded in width and height, the offscreen image is regenerated and its associated graphics is recomputed. If the dimensions are unchanged, paintComponent simply swaps the offscreen image into the visible area. If offImage is null because the process is just starting, the paintComponent method does nothing. Note that we turned off default buffering by calling setDoubleBuffered(false) in the constructor. This time the program runs perfectly. There are no runtime exceptions and the image is generated correctly (but there is still a brief period where the user looks at an empty screen). If the program is brought to the background, then again to the foreground, the image is not regenerated but the saved offscreen image is swapped into the foreground. That happens without noticeable delay, so there is no unnecessary computation. Therefore, this technique works better than the default double buffering scheme in this case. If, on the other hand the window is resized, the paintComponent detects the new size and regenerates the image appropriately. n The last thing for us to worry about is that there is a short period where the user looks at an empty program. Worse than that, for that time the program is actually quite busy and will not react to any user directives such as a click on the standard close box. To improve that behavior, we need to employ a thread to handle the generation of the graphics asynchronously. Example 6.5.17: Redo example 6.5.16, this time using a thread to generate the offscreen image. The idea is simple: instead of directly calling offPaint, we start a thread that in turn calls offPaint in its run method. Since the thread runs concurrently to our program, the image is generated asynchronously. To improve what the user sees we also call repaint every 100th time in the run method to make that part of the picture visible that has been computed so far. Finally, if the offscreen image needs to be regenerated, we restart the thread so that our program can regenerate a new picture immediately after the user resizes the window. The new code is in bold and italics. public class LotsOfCircles extends JPanel implements Runnable { private Image offImage = null; private Graphics offGraphics = null; private Thread thread = null; private int counter = 0; private int width = 0, height = 0; public LotsOfCircles() { super(); setDoubleBuffered(false); } public void run() { Thread currentThread = Thread.currentThread(); while ((thread == currentThread) && (counter < 10000)) { offPaint(offGraphics); counter++; if ((counter % 100) == 0) repaint(); thread.yield(); } } public void offPaint(Graphics g) { Color color = new Color((int)(255*Math.random()), (int)(255*Math.random()), (int)(255*Math.random())); int x = (int)(getSize().width * Math.random()); int y = (int)(getSize().height * Math.random()); int r = 10; g.setColor(color); g.fillOval(x-r, y-r, 2*r, 2*r); } public void initOffImage() { thread = null; width = getSize().width; height = getSize().height; offImage = createImage(width, height); offGraphics = offImage.getGraphics(); counter = 0; thread = new Thread(this); thread.start(); } public void paintComponent(Graphics g) { if ((width != getSize().width) || (height != getSize().height)) initOffImage(); if (offImage != null) g.drawImage(offImage,0,0,null); } } It is important to remove the fixed for loop from the offPaint method in example 6.5.16. If that loop would still be there, a thread drawing the current image would continue even if the image was resized. A second thread would start in addition, performing the new computations. Repeated resizing of the frame would start extra threads, eating into system resources unnecessarily. Since our code instead implements part of the recommendation in definition 5.2.11, we can be sure that the old thread stops as soon as a new thread is instantiated. As soon as thread is different from currentThread in the run method, the "old" run method will stop and the "new" one will start for the new thread. Note that we are also cooperating nicely with other system resources by calling the yield method inside the run method. Now we can have our cake and eat it, too. First, our program can continue to react to user input because the computation takes place in a separate thread. And which is important we call the repaint method every 100th time within offPaint to make that part of the picture visible that has been computed so far. When we run this applet, the screen seems to change in several discrete steps, but once the image is computed, it regenerates (almost) immediately, unless the window is resized. If the window is resized, a new image is computed automatically without having to wait for the old one to finish. n To be sure, this version does take longer to compute the final picture: threads have a computational overhead that can not be neglected, and we call repaint at every 100th step. However, to a user this image would appear to be generated faster, which is really what we want. Also, our applet can now contain other GUI elements that the user could use concurrently while the graphics are computed even if the computation is not yet finished. Working with Sounds Now that we have a reasonable understand of how to work with graphics we want to add sound to our programs. Audio files, like image files, are stored in a variety of formats. The most common ones are WAV files, primarily on Windows machines, AU files on Unix systems, and AIFF or SND files on Macintosh computers. Just as for images, there are a variety of utility programs available to convert audio files from one format to another, and there are differences in quality associated with different formats. Definition 6.5.18: Loading Audio Files Java supports audio files in the following formats: AIFF, AU, WAV, MIDI type 0 and 1, and RMF. Audio files can be loaded into an AudioClip object via the static method: public static final AudioClip newAudioClip(URL url) That method is part of the java.applet.Applet class and can be used by applets and non-applets. Java supports 8 and 16 bit audio data in mono and stereo with sample rates from 8kHz to 48kHz in linear and u-law encoding. Rendering quality defaults to 16-bit stereo data at 22kHz. If this quality is not supported it automatically switches to 8-bit or mono output. Applets can construct a URL using getCodeBase or getDocumentBase as described in definition 6.5.9. Standalone programs can reference a local audio file via the string String fileURL = "file:" + System.getProperty("user.dir") + System.getProperty("file.separator") + "actualFileName.ext"; Loading and playing sounds is actually easier, in some sense, then loading and displaying images because methods related to sounds are much more limited than those related to images. On the other hand, while sounds are easy to handle, Java offers fewer choices when dealing with sounds. There are, for example, a variety of mechanisms to control the loading process of images (most easily via the MediaTracker), but there is currently no such support for loading sounds. Since the newAudioClip method returns an AudioClip, we need to define that class before continuing. Definition 6.5.19: The AudioClip Interface The AudioClip interface is a simple abstraction for playing a sound clip. AudioClip items can be played separately or together, and each AudioClip plays independently of others. There are only three methods defined and implemented: play To play an entire audio clip once. Will restart the sound if it is already playing. loop To play an audio clip in an infinite loop. Will restart the sound if it is already playing. stop To stop an audio clip that is currently playing or playing in a loop. Has no effect if sound not playing. Java provides no convenient methods to control how much of an audio clip has already been played, how long an AudioClip is, or any other helpful operation. The AudioClip interface is part of the java.applet package. Example 6.5.20: Assuming that you have two audio files named applause.wav and music.wav, create a program that contains five buttons, two to play and stop the first audio clip and three to play, stop, and loop the other. Then experiment whether both clips can play simultaneously. The audio files should be located in a directory Audio that is an immediate subdirectory to the class directory. Since the audio clip methods are so simple, the entire program is completely routine. The only noteworthy code is the construction of the URL pointing to the audio files located in the Audio directory. We must construct a valid URL, using various system properties as defined above. import java.net.*; import java.applet.*; import java.awt.event.*; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.*; public class SoundTest extends JFrame implements ActionListener { private JButton playMusic = new JButton("Play Music"); private JButton loopMusic = new JButton("Loop Music"); private JButton stopMusic = new JButton("Stop Music"); private JButton playSound = new JButton("Play Sound"); private JButton stopSound = new JButton("Stop Sound"); private AudioClip music = null, sound = null; public SoundTest() { super("Sound Test"); try { String separator = System.getProperty("file.separator"); String preface = "file:" + System.getProperty("user.dir") + separator + "Audio" + separator; music = Applet.newAudioClip(new URL(preface + "music.wav")); sound = Applet.newAudioClip(new URL(preface + "applause.wav")); } catch(MalformedURLException murle) { System.err.println("Error loading files: " + murle); } Container content = getContentPane(); content.setLayout(new FlowLayout()); content.add(playMusic); playMusic.addActionListener(this); content.add(loopMusic); loopMusic.addActionListener(this); content.add(stopMusic); stopMusic.addActionListener(this); content.add(playSound); playSound.addActionListener(this); content.add(stopSound); stopSound.addActionListener(this); validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == playMusic) music.play(); else if (ae.getSource() == loopMusic) music.loop(); else if (ae.getSource() == stopMusic) music.stop(); else if (ae.getSource() == playSound) sound.play(); else if (ae.getSource() == stopSound) sound.stop(); } public static void main(String args[]) { SoundTest st = new SoundTest(); } } Obviously we can not show what happens when the buttons are clicked. But when you experiment with this program you will notice that both sounds can indeed play simultaneously, producing a composite sound. Unless that is what you want you must make sure that all sounds that are currently playing are turned off (using stop) before a new sound starts playing. n You can find a complete program integrating threads, animation, and sound in example 6.6.1, the "Shark Attack" game. Case Study: The SharkAttack Game At this point we have explored many of the features of Swing and we have seen how to work with images, animation, and sound. We are now in a position to create a more extensive Swing-based program, combining Swing, sound effects, and animation to create a reasonably looking action game. You probably won't be able to sell it, but it's fun to play. This example is optional. It will introduce few new features but it will illustrate how Swing components and OOP programming techniques work together to create a program that is more complex than our standard examples. Example 6.6.1: Create an Applet that shows the fin of a shark swimming around in the "water". While the shark is swimming, some soundtrack should be playing. The user can cause the shark to move up, down, right, left, and let it dive and rise. There should also be some animals that the shark can prey on but it can only catch its prey when the shark is fully submerged. Another sound should play whenever a prey is caught. There should be a count of animals left for the shark to eat, and a clock that shows the time in seconds since the game started. Before we can begin thinking about any code we need some graphics and sound resources. Let's assume we have two images, river.jpg and swan.gif which depict a piece of a river and a small, white swan, respectively. They might look as follows:    Figure 6.6.1: The images river.jpg and swan.gif Note that the image of a swan is in GIF format where the background color has been marked as transparent (refer to a graphics manipulation package such as Microsoft Photo Editor for details on how to do this). Also, we will need some sound files in a supported format. Again, let's assume that we have the files jaws.au, which plays some background sound clip suitable for looping and splash.au which will be played whenever a swan is captured by our shark. Finally, we need several images that we can use as icons for control buttons. Let's say we have created the images:  = down.gif  = up.gif  = left.gif  = right.gif  = dive.gif  = rise.gif  = stop.gif  = start.gif  To create our program we need to decide on the classes we need and how they will interact with each other. We decide to layout our program so that the image of the river will occupy the majority of the screen, with the counter and timer at the bottom of the window. We will keep the controls for the shark in a separate frame that will pop up when the user clicks on the image. It should be fairly obvious that we need classes for the Shark, a Swan (with several instances), the Counter, the Timer, the Controls, as well as an applet to pull everything together. Therefore, we will use six classes plus two inner classes, as well as our familiar JPanelBox, as follows: SharkAttack: the main class containing the images, sounds, and counter; moves images around via thread; uses inner class Arena extending JPanel to handle the drawing and Clicker extending MouseAdapter to bring up the control panel if a user wishes. Shark: a representation of a shark by drawing its fin; has methods to move and draw the shark SharkPrey: a representation of a prey animal; has methods to move and draw the image SharkControls: contains controls for moving shark; uses shark methods to guide it through the water SwanCounter: Contains images for living swans or "x" for caught ones, as well as a stop watch with methods to reset counter and the timer StopWatch: Simple class using a thread to count every second Specifically, the classes will be defined with the following fields and methods: SharkAttack extends JApplet implements Runnable Fields: Shark shark, SharkPrey prey[], SharkControls guide, SharkCounter count, StopWatch watch, Image river, Image aSwan, AudioClip music, AudioClip splash, Thread thread, Arena arena Inner Classes: Arena extends JPanel, Clicker extends MouseAdapter Methods: init (loads images, sounds, attaches SharkControls and counter, defines tooltip, adds mouse listener and arena via inner classes), start (starts thread, resets shark, counter, prey, and timer, loops background music), stop (stops thread, music, and timer), run (moves shark and prey animals, checks which animals are caught and updates counter if necessary) Shark extends Object SharkAttack applet Fields: Polygon fin, int deltaX, SharkAttack applet Methods: constructor (initializes applet for call-backs to get width), reset (moves shark to start position), moveUp, moveDown, turnLeft, turnRight, dive, rise, move (moves the fin horizontally, turning it around at the borders), getTip (returns the current position of the tip of the fin if fully submerged or (-1, -1) otherwise), paintComponent (draws the image of a shark fin in current configuration) SharkPrey extends Object Fields: Image animal, Rectangle bounds, int deltaX, int amp, SharkAttack applet Methods: constructor (initializes applet and animal, picks random numbers for deltaX, amp (amplitude), defines bounds), move (moves the image in sine wave, turning it around at the borders), isEatenBy (returns true if shark's tip is inside bounds, paintComponent (draws the image at its current location) SharkControls extends JPanel implements ActionListener Fields: String icons[], String toolTips[], SharkAttack applet, Shark shark, JButtons[] Methods: constructor (initializes applet and shark, defines layout and icon buttons), actionPerformed, showHelp SwanCounter extends JPanel Fields: JLabel swans[], int numSwans, ImageIcon aSwan Methods: constructor (initializes numSwans and aSwan, defines array of JLabel containing aSwan icons), fillSlots (fills first numSwans swans[]with aSwan image, remaining swans[] with "X"), remove (decreases numSwans), reset, getCount StopWatch extends JLabel implements Runnable Fields: Thread thread, int count Methods: constructor (defines default text), start, stop, run (updates label text with count ever 1000 milliseconds) Once we have determined the class types, methods, and fields, we of course need to implement the classes. The first one we will create is SharkPrey to move a swan around the screen. It needs to provide move to move the animal image along a predetermined path and paintComponent to draw it at its current position. Also, we need to implement isEatenBy to determine if this animal has been successfully attacked by the shark. The image that will move around is passed into the class via the class constructor. To determine when the shark has caught one of our animals, we use the field bounds to specify a Rectangle that always surrounds the image at its current location. The path that our prey animal will follow is a simple sine curve with random amplitude, starting at a random location in the lower part of the image. When the prey hits the left or right side of the applet it is supposed to turn around. Therefore, the class needs to know the dimensions of the applet so that we will pass a reference to it into this class. That means the class will not compile until you define SharkAttack (which in turn will not compile until all other classes are implemented): import java.awt.*; public class SharkPrey { private SharkAttack applet = null; private Image animal = null; private Rectangle bounds = new Rectangle(); private int deltaX, amp; public SharkPrey(Image _animal, SharkAttack _applet) { animal = _animal; applet = _applet; deltaX = (int)(2*Math.random()) + 1; amp = (int)(55*Math.random()) + 10; bounds.x = (int)(applet.getSize().width*Math.random()); bounds.y = 120 + (int)(amp*Math.sin( bounds.x /20.0)); bounds.height = animal.getHeight(null); bounds.width = animal.getWidth(null); } public void move() { if ((bounds.x > applet.getSize().width) || (bounds.x < 0)) deltaX *= (-1); bounds.x += deltaX; bounds.y = 120 + (int)(amp*Math.sin(bounds.x /20.0)); } public boolean isEatenBy(Shark shark) { return bounds.contains(shark.getTip()); } public void paintComponent(Graphics g) { g.drawImage(animal, bounds.x, bounds.y, null); } } Note that this class does not actually move or draw the image. Instead it provides the possibility of moving (and drawing) the animal correctly. Later, the thread in our applet will be responsible for moving the shark and all its prey around the screen. Next, let's focus on the class to move the shark. This class is more complicated because it not only provides a method to move the shark from right to left, but also methods to switch directions, move the shark up or down, let the shark dive and rise, and determine the position of the top of the fin. Perhaps the most complicated affair is how the shark should look like. We will draw the shark's fin as a right triangle with the right angle either on the left or right side depending on the direction of the shark. A simple sketch will help: Shark fin moving right:  EMBED CorelDraw.Graphic.7  Shark fin moving left:  EMBED CorelDraw.Graphic.7 Shark fin coordinates :  EMBED Equation.3   EMBED Equation.3 Changing directions:  EMBED Equation.3   EMBED Equation.3 Diving:  EMBED Equation.3   EMBED Equation.3 Rising:  EMBED Equation.3   EMBED Equation.3  Figure 6.6.2: Schematics of Shark for moving right, left, and diving, rising To represent this fin we will use a Polygon, a useful class from the AWT to represent irregularly shaped closed objects.  Definition 6.6.2: Polygon The Polygon class from the AWT represents a closed, two-dimensional region bounded by an arbitrary number of line segments. Internally, a polygon is a list of (x, y) points, where each pair defines a vertex of the polygon. The first and last pairs of (x, y) points are joined by a line segment that closes the polygon. Polygons can be drawn by using the drawPolygon or fillPolygon method from the Graphics class. public class Polygon extends Object { // public fields public int npoints public int xpoints[], ypoints[] // Constructor public Polygon() public Polygon(int xpoints[], int ypoints[], int npoints) // Methods public void translate(int deltaX, int deltaY) public void addPoint(int x, int y) public Rectangle getBounds() public boolean contains(Point p) public boolean contains(int x, int y) } There are a few computations involved to correctly manipulate the shape of fin in order to represent "diving" and "rising" but when you look at the above schematics the computations should be clear: import java.awt.*; public class Shark { private Polygon fin = new Polygon(new int[]{ 0, 0,30}, new int[]{60,30,60}, 3); private SharkAttack applet = null; private int deltaX = 4; public Shark(SharkAttack _applet) { applet = _applet; } public void moveUp() { fin.translate(0,-6); } public void moveDown() { fin.translate(0,6); } public void turnLeft() { fin.xpoints[1] = fin.xpoints[2]; deltaX = -Math.abs(deltaX); } public void turnRight() { fin.xpoints[1] = fin.xpoints[0]; deltaX = Math.abs(deltaX); } public void dive() { if ((fin.ypoints[2] - fin.ypoints[1]) > 0) { if (deltaX > 0) fin.xpoints[2] -= 5; else fin.xpoints[0] += 5; fin.ypoints[1] += 5; } } public void rise() { if ((fin.ypoints[2] - fin.ypoints[1]) < 40) { if (deltaX > 0) fin.xpoints[2] += 5; else fin.xpoints[0] -= 5; fin.ypoints[1] -= 5; } } public void move() { if (fin.xpoints[0] > applet.getSize().width) turnLeft(); if (fin.xpoints[0] < 0) turnRight(); fin.translate(deltaX,0); } public Point getTip() { if ((fin.ypoints[2] - fin.ypoints[1]) < 4) return new Point(fin.xpoints[1], fin.ypoints[1]); else return new Point(-1, -1); } public void paintComponent(Graphics g) { g.setColor(Color.lightGray); g.fillPolygon(fin); } } These two classes will do most of the actual work for us and since they are fairly smart the main job of the applet class we will design next is to load the images and sounds and to properly move the shark and the prey animals around. We will use a MediaTracker to completely load images, and also add an instance of a SharkCounter to the layout of the applet. We also need a SharkControls class to react to user input, which will appear when the user clicks anywhere on the image. Most importantly, we use an inner class extending JPanel that will handle the actual drawing via its paintComponent method. It will draw the river image, the shark, and in a loop all prey animals that are not null. import javax.swing.*; import java.awt.event.*; import java.applet.AudioClip; import java.awt.MediaTracker; import java.awt.Image; import java.awt.Graphics; public class SharkAttack extends JApplet implements Runnable { private Shark shark = null; private SharkPrey prey[] = null; private SharkControls guide = null; private SwanCounter count = null; private class Arena extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(river,0,0, getSize().width,getSize().height,this); shark.paintComponent(g); for (int i = 0; i < prey.length; i++) if (prey[i] != null) prey[i].paintComponent(g); } } private class Clicker extends MouseAdapter { public void mouseClicked(MouseEvent me) { guide.setVisible(true); guide.toFront(); } } private Image river = null, aSwan = null; private AudioClip music = null, splash = null; private Thread thread = null; private Arena arena = new Arena(); public void init() { river = getImage(getDocumentBase(), "Images/river.jpg"); aSwan = getImage(getDocumentBase(), "Images/swan.gif"); music = getAudioClip(getDocumentBase(),"Audio/jaws.au"); splash = getAudioClip(getDocumentBase(),"Audio/splash.au"); MediaTracker tracker = new MediaTracker(this); tracker.addImage(river,0); tracker.addImage(aSwan,1); try { tracker.waitForAll(); } catch(InterruptedException ie) { JOptionPane.showMessageDialog(this, "Error loading images"); } shark = new Shark(this); prey = new SharkPrey[10]; count = new SwanCounter(new ImageIcon(aSwan), prey.length); getContentPane().add("Center", new JPanelBox(arena, "Shark Attack")); getContentPane().add("South", count); guide = new SharkControls(this, shark); arena.setToolTipText("Click to show controls"); arena.addMouseListener(new Clicker()); } public void start() { thread = new Thread(this); shark.reset(); count.reset(); thread.start(); music.loop(); for (int i = 0; i < prey.length; i++) prey[i] = new SharkPrey(aSwan, this); } public void stop() { music.stop(); count.stop(); thread = null; } public void run() { Thread currentThread = Thread.currentThread(); while (thread == currentThread) { shark.move(); for (int i = 0; i < prey.length; i++) if (prey[i] != null) prey[i].move(); try { thread.sleep(200); } catch(InterruptedException ie) { System.err.println("Error: " + ie); } for (int i = 0; i < prey.length; i++) { if ((prey[i] != null) && (prey[i].isEatenBy(shark))) { splash.play(); prey[i] = null; count.remove(); if (count.getCount() == 0) stop(); } } arena.repaint(); } } } Recall that the start and stop methods of a JApplet have special meaning. Start is called after the applet is instantiated and every time the user revisits the page. Stop is called when the user leaves the page. Hence, every time the page containing the applet is visited, the start method is called to reset the counter and the shark, start the thread to move the animals around, start the background music, and initialize the prey animals. The last major class, SharkControls, is straightforward: it extends JFrame so that it can "float" on top of the applet. It contains movement buttons to control the shark by calling the appropriate methods of the shark and the applet. Since we will use nine buttons, we declare them as an array so that we can initialize them in a loop. We also add appropriate tooltips to the buttons to give the user a clue as to their functionality: import java.net.*; import java.awt.event.*; import java.awt.GridLayout; import javax.swing.*; public class SharkControls extends JFrame implements ActionListener { private String icons[] = {"pause.gif", "up.gif", "rise.gif", "left.gif", "swan.gif", "right.gif", "start.gif", "down.gif", "dive.gif" }; private String tips[] = {"Stop game", "Shark up", "Shark rises", "Shark left", "Help", "Shark right", "Start game", "Shark down", "Shark dives"}; private SharkAttack applet = null; private Shark shark = null; private JButton buttons[] = new JButton[9]; public SharkControls(SharkAttack _applet, Shark _shark) { super("Shark Controls"); applet = _applet; shark = _shark; JPanel buttonPanel = new JPanel(new GridLayout(3, 3)); try { for (int i = 0; i < buttons.length; i++) { URL url = new URL(applet.getCodeBase(), "Images/"+icons[i]); buttons[i] = new JButton(new ImageIcon(url)); buttons[i].addActionListener(this); buttons[i].setToolTipText(tips[i]); buttonPanel.add(buttons[i]); } } catch(MalformedURLException murle) { System.err.println("Error loading icons: " + murle); } getContentPane().add("Center", new JPanelBox(buttonPanel, "Shark Controls")); setResizable(false); validate(); pack(); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == buttons[0]) applet.stop(); else if (ae.getSource() == buttons[1]) shark.moveUp(); else if (ae.getSource() == buttons[2]) shark.rise(); else if (ae.getSource() == buttons[3]) shark.turnLeft(); else if (ae.getSource() == buttons[4]) showHelp(); else if (ae.getSource() == buttons[5]) shark.turnRight(); else if (ae.getSource() == buttons[6]) applet.start(); else if (ae.getSource() == buttons[7]) shark.moveDown(); else if (ae.getSource() == buttons[8]) shark.dive(); } private void showHelp() { JOptionPane.showMessageDialog(this, "Shark Attack\n(c) 1999\nBert Wachsmuth", "Shark Attack", JOptionPane.INFORMATION_MESSAGE); } } The remaining utility classes SwanCounter and StopWatch are simple. SwanCounter extends JPanel and keeps track of how many swans are still alive by using 10 JLabels arranged in a flow layout. Its main public method is remove which is called upon by the run method of the applet if the shark successfully attacks a swan, but the method doing the actual work is fillSlots. That method sets the icon or text of the ten labels depending on the number swans still active. import java.awt.FlowLayout; import javax.swing.*; public class SwanCounter extends JPanel { private JLabel swans[] = null; private int numSwans = 0; private ImageIcon aSwan = null; private StopWatch watch = new StopWatch(); public SwanCounter(ImageIcon _aSwan, int maxSwans) { numSwans = maxSwans; aSwan = _aSwan; swans = new JLabel[maxSwans]; setLayout(new FlowLayout(FlowLayout.LEFT)); add(watch); for (int i = 0; i < swans.length; i++) { swans[i] = new JLabel(aSwan); add(swans[i]); } } private void fillSlots() { for (int i = 0; i < numSwans; i++) { swans[i].setIcon(aSwan); swans[i].setText(""); } for (int i = numSwans; i < swans.length; i++) { swans[i].setIcon(null); swans[i].setText(" X "); } } public void remove() { numSwans--; fillSlots(); } public void reset() { numSwans = swans.length; fillSlots(); watch.start(); } public void stop() { watch.stop(); } public int getCount() { return numSwans; } } StopWatch is a simple implementation of a counting thread, using a JLabel to display the current value of the counter, incrementing that counter every second. import javax.swing.*; public class StopWatch extends JLabel implements Runnable { private Thread thread = null; private int count = 0; public StopWatch() { super("Time expired: 0 seconds"); } public void start() { count = 0; thread = new Thread(this); thread.start(); } public void stop() { thread = null; } public void run() { Thread currentThread = Thread.currentThread(); while (thread == currentThread) { setText("Expired: " + count + " seconds"); count++; try { thread.sleep(1000); } catch(InterruptedException ie) { System.err.println("Error: " + ie); } } } } After all this work its time to enjoy our game which is difficult to do on paper, so you need to use your imagination when looking at the still images in figure 6.6.3.   Figure 6.6.3: SharkAttack game screen shot with two swans "eaten" When the applet actually executes, the shark continuously moves horizontally. The buttons can redirect the shark, move it up or down, or make it dive or rise. The object of the game is to pass under the prey animals while fully submerged. Every time that happens a "splash" will sound and the corresponding swan will disappear. The swans, of course, also move around in a wave-like fashion (because of the sine function in their move method), making it somewhat difficult for the shark to catch them. At any time the restart button can be used to reposition all swans at random locations to start over. When all swans are gone the counter will stop, showing the time it took to finish the game. n There are many additional topics that could have been covered in this chapter. In particular, we did not discuss the Graphics2D package, drag-and-drop support, accessibility features, undo support, image manipulation, and more. However, a detailed discussion of the advanced capabilities that Swing offers could easily fill an entire book so we will have to be content with this discussion. Therefore, this concludes the discussion of Swing and multimedia and also ends our introduction of the basic capabilities that Java offers to create object-oriented, windows-based, GUI-driven programs. The remaining chapters of this text will not focus on how a program looks, but rather on some advanced programming techniques. Therefore, we will not use Swing in subsequent chapters but stick with the simpler AWT. However, you should feel free to convert every example that uses AWT GUI components into equivalent or better Swing-based programs. We have certainly covered all the tools necessary for that. Chapter Summary Exercises 6.1. Introduction to Swing 1. State, in your own words, what is meant by the following terms: a) JFCb) Swingc) look and feeld) accessibility packagee) javax.swing.*;f) code-compatible Swing classesDescribe, in your own words: why Sun designed the Swing and JFC classes what the advantages and disadvantages of using Swing instead of AWT are how you can easily recognize most Swing GUI classes at least two code-compatible Swing classes and their enhancements over their AWT cousins at least two new Swing classes and their major functionality some enhancements that are easy to add to virtually all Swing-based programs the steps to use to convert an AWT program to a Swing-based program Describe what the following programs do, then convert them to Swing-based programs: a) import java.awt.*; import java.awt.event.*; public class AWTProgram extends Frame implements ActionListener { private Button show = new Button("Show"); private Button quit = new Button("Quit"); private Label status = new Label("This is a status label"); public AWTProgram() { super("AWT-Based Program"); setLayout(new FlowLayout()); add(show); show.addActionListener(this); add(quit); quit.addActionListener(this); add(status); validate(); pack(); setVisible(true); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == show) status.setText("Show was Clicked"); else if (ae.getSource() == quit) System.exit(0); } public static void main(String args[]) { AWTProgram awt = new AWTProgram(); } } b) import java.awt.*; import java.awt.event.*; public class AWTDrawProgram extends Frame implements ActionListener { private Button draw = new Button("Draw"); private int x = 100, y = 100; private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) { System.exit(0); } } public AWTDrawProgram() { super("AWT-Based Program"); setLayout(new BorderLayout()); add("North", draw); draw.addActionListener(this); setSize(300, 300); setVisible(true); addWindowListener(new WindowCloser()); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == draw) { x = (int)((getSize().width-20) * Math.random()) + 20; y = (int)((getSize().height-20) * Math.random()) + 20; repaint(); } } public void paint(Graphics g) { g.fillOval(x, y, 100, 100); } public static void main(String args[]) { AWTDrawProgram awt = new AWTDrawProgram(); } } List the code-compatible, the enhanced, and the new classes provided in the Swing package. List the AWT classes can be mixed with Swing classes and those that should not be mixed Add tooltips to the programs in 3 (a) and (b) after converting them to Swing. 6.2. Basic Swing Classes State, in your own words, what is meant by the following terms: a) UIManagerb) SwingUtilitiesc) SwingConstantsd) JFramee) JButtonf) JLabelg) ImageIconh) JAppleti) OBJECT tagj) EMBED tagk) Borderl) JPanelm) JMenun) JPopupMenuo) JCheckBoxp) JRadioButtonq) ButtonGroupr) JComboBoxs) JREt) Java Pluginu) JSeparatorv) JPopupMenu.SeparatorDescribe, in your own words: how to create a basic class with Swing components that extends JFrame and has at least one button the different types of borders and how to combine them how to set a border for a Swing component how to define a layout for a JFrame or JApplet, and what the difference is to doing the same for a Frame or Applet what the problem is, if any, in embedding Swing-based applets in a web page with standard APPLET tags what a "look and feel" is, how they differ, and which one you prefer what needs to be done to define a look and feel before instantiating a frame and after a frame is already visible what the difference is between a JCheckBox and a JRadioButton What is the exact syntax to: add an icon to a button or label add a tooltip to a JPanel add a string to a JComboBox get the state of a JCheckBox object set the look and feel of a class extending frame to a "Windows" look let the user switch the look and feel of a class extending frame between the "Java" and "Unix" look add a popup menu to a JPanel so that is appears when the right mouse button is clicked over that panel Add a window listener to the BasicJFrame class in example 6.2.5 so that the program will properly close when someone clicks on its standard close box. How do the various borders created in the BorderOverview program in example 6.2.16 look using the Windows and Unix look-and-feel? Change the class PopupMenuTest in example 6.2.22 so that it achieves the same functionality using only one inner class. In example 6.2.18 we created a class JPanelBox that is reused several times. Add appropriate Javadoc comments to the class and use the javadoc tool to create appropriate documentation for this class. In example 6.2.18 we created a class JPanelBox that and a JPanelBoxTest class to test it. Redo JPanelBoxTest so that it achieves the same results without using JPanelBox. Compare both versions. In example 6.2.20 we created a standalone program with a simple menu. Convert that program into an applet to verify that a JApplet can indeed contain a menu. In chapter 4, example 4.23, we created a simple version of a Calculator. Redo that applet so that it uses Swing instead of AWT components. Note: the Swing equivalent of TextField is JTextField, which is code-compatible. 6.3. Advanced Swing Classes State, in your own words, what is meant by the following terms: a) JScrollPaneb) JTabbedPanec) JSplitPaned) Model/Viewe) JListf) DefaultListModelg) ListSelectionListenerh) ListSelectionEventi) JTextComponentj) JTextFieldk) JTextAreal) DocumentListenerm) DocumentEventn) JEditorPaneo) HTMLp) JOptionPaneq) JDialogDescribe, in your own words: what the difference is in the dialogs that appear with showMessageDialog, showInputDialog, and showConfirmDialog how to create a dialog that appears with showOptionDialog what the difference is between a JList and a java.awt.List what advantages and disadvantages the model/view split has that is employed by several Swing components the HTML formatting language (include some examples) the capabilities of the JEditorPane class What is the exact syntax to: ensure that a JTextArea performs automatic word-wrapping at word boundaries add and remove data to and from a JList add scrolling capabilities to a JList attach a DocumentListener to a JTextArea create a message to standard output if the text contained in a JTextArea has changed use a JEditorPane to display some formatted text in a JFrame use a JSplitPane and a JTabbedPane (give some example) Add tooltips (but no icons) and borders to both tabs in the ScrollingTabImage class in example 6.3.4. Add a popup menu to the list to allow deletion of a selected address in the EmailListing program in example 6.3.14. The popup menu should appear when the user right-clicks over the list. Change the EmailListing program in example 6.3.14 so that it stores the first and last names in separate fields. Also add a sort capabilities to the program that sorts names according to last name (compare example 4.38, and examples 4 and 6 in section 3.6) Expand the ImageViewer program in example 6.3.11 so that it contains a File | Open menu. When the user selects that option, they can pick a directory containing images, and all images in the chosen directory will be added to the image list for viewing. Note that you need to lookup the JFileChooser class in the Java API as it is not covered in the text. In example 6.3.17 you were asked to create a multi-line, scrollable text display field. Instead, the example creates a standalone program using such a text field. Redo that example to create a new class that can indeed serve as a multi-line, scrollable text display field (none-editable). Make sure to test your new class. The JOptionPane includes several methods to show various dialogs. Which icons and titles are displayed with the following methods: void showMessageDialog(Component parent, Object message) String showInputDialog(Component parent, Object message) int showConfirmDialog(Component parent, Object message) In chapter 4 we created the "MyDraw" applet, and refined it in the exercises. Use a JList instead of a List and an array to keep track of all available figures. You will need to add an appropriate toString method to each of the Shape classes. In example 6.3.17 we created a MultiLineLabelTest class that tests some of the capabilities of a JTextArea. Create a reusable class MultiLineLabel that can be used as a multi-line, scrollable label in other programs. In example 6.3.25 we created a program BookmarkManager. Enhance that program so that the cursor will change shape as the mouse is moved into and out of hyperlinks. Add a status label to the class that will contain the URL of the bookmark over which the mouse hovers. 13. In chapter 4, example 4.23, we created a simple version of a Calculator. Redo that applet so that it uses Swing instead of AWT components (see exercise 10 in previous section). Add a feature that lets the user copy the number from the text field to the systems clipboard (the JTextComponent contains a copy method that could accomplish that). In chapter 4, example 4.26, we created an enhanced version of the Calculator program from example 4.23 that includes a "log" of operations. Redo this version of the Calculator as a Swing applet (see previous exercise), but use a JSplitPane to arrange the calculator and the log. In chapter 4, example 4.29, we created a simple program containing a non-modal dialog. Redo that example as a Swing program, substituting the JDialog class for Dialog. In chapter 4, example 4.38, we created a fairly elaborate AddressBook program that worked as a standalone program as well as an applet. Redo that program as a Swing program. Use the JOptionPane for all dialogs, and add additional information dialogs (such as "addresses now sorted" after issuing a Sort directive). In particular, replace the YesNo dialog class used in example 4.38 by a suitable JOptionPane dialog. Add suitable enhancements such as image icons, popup menus, and tooltips whenever it makes sense. 6.4. Trees, Tables, and Graphics State, in your own words, what is meant by the following terms: a) JTreeb) DefaultMutableTreeNodec) TreePathd) TreeSelectionListenere) TreeSelectionEventf) JTableg) DefaultTableModelh) paintComponent(Graphics g)i) repaint Describe, in your own words: how to disable automatic cell editing in a JTable how to add custom graphics to a JPanel class what a root node and a leaf node is what different types of trees exist, and which type is represented by JTree how to add a row of data to a JTable why you can not add a column of data at a specific column index What is the correct syntax to: ensure that a JTree becomes scrollable ensure that a JTable becomes scrollable turn off auto-resizing of a JTable convert the method public void paint(Graphics g) { g.drawOval(10, 10, 100, 100); } of a Canvas class into the appropriate method/class using Swing. attach a TreeSelectionListener to a JTree and get the full path to the selected tree node (assuming a tree node is selected) Add the correct formatting of decimal numbers to the Invoicer class in Example 6.4.12 List all leafs in the following trees:  EMBED OrgPlusWOPX.4  b) EMBED OrgPlusWOPX.4  What is the TreePath leading to the node with value 'F' in part (a) of the above exercise. What about the TreePath to node 'F' in part (b) above? List the parent and all ancestors of node 'K' in part (b) above. List all children and all descendents of node 'A' in part (b) above. What are the siblings of node 'H' in part (b) above? How about the siblings of note 'G'? (Note that we have not formally defined these concepts, but they should be intuitively clear) Add two buttons to the SimpleTree class in example 6.4.4 that will expand and collapse the currently selected node of a JTree, if possible. Create a frame that represents the chapters and sub-sections of this book in a JTree. You could use it, for example, to organize your own notes about this text. Include buttons to expand/collapse the entire structure, as well as individual nodes, if possible. Create a simple address book program that stores the first name, last name, and email address in a JTable. If it makes sense to leave the automatic editing feature in place, do so, but for practice also create a version of your program without allowing editing of the cells. To add new data, you may want to use an appropriate JOptionDialog, but to start, create your program so that the program itself adds data to the table. Compare with example 6.4.9 and 6.4.12. In example 6.4.12 we refined the Invoicer program created in earlier examples. Add a menu choice to the popup menu that takes the data from the JTable and displays it in a JEditorPane, suitably formatted. The JEditorPane should appear in a separate frame, including menu options to close the window and to print the invoice. Also create a "logo" that should be included in the formatted version of the invoice, and include the date and time in the formatted invoice. Add a catalog to the Invoicer program from example 6.4.12 so that new items can be selected from that catalog instead of added manually. The item number, description, and unit price should be stored in the catalog, while the number of items should be added manually. The catalog could be stored in a JList, for example. 6.5. Working with Images and Sounds State, in your own words, what is meant by the following terms: a) Imageb) Toolkitc) RGBImageFilterd) GrayFiltere) MediaTrackerf) Uniform Resource Locatorg) URLh) getCodeBasei) getDocumentBasej) double-bufferingk) createImagel) getGraphicsm) AudioClipn) newAudioClipo) playp) stopq) loop Describe, in your own words: a) how to load an image into an applet, and why it is different from loading an image into a frame How images are loaded and displayed situations where incremental loading and displaying of images is not acceptable how to use your own off-screen drawing area for custom double-buffering how to load and play a sound clip into a standalone program how to load and play a sound clip into an applet What is the exact syntax to: turn automatic double-buffering off for a JPanel use a MediaTracker to ensure that an image is completely loaded before it is used use a MediaTracker to ensure that an array of images is completely loaded before any of the images is used use a MediaTracker to start loading an image even before it is rendered create a grayed version of an existing image Suppose an HTML includes an applet via the tag and that HTML document is stored in a directory /Homepage/JavaStuff/example.html on a machine named www.mypersonalmachine.com. What URL is returned by a call to getCodeBase and getDocumentBase in that applet? The GrayFilter class defined in definition 6.5.4 takes as input the percentage of graying to be used. Starting with the original cat.jpg image, create 10 images with increasing levels of grayness. Once all images have been created, display them as an animated sequence to create a "fading" image. Alternatively, using the InverseFilter introduced as a footnote for example 6.5.5 as a model, create images that show a better fading effect experiment ! There are many possible improvements for an AnimationPanel class created in example 6.5.7. Implement the following enhancements: add a constructor that passes files names into the AnimatorPanel class so that those files will be used for animation allow for setting of the sleep time and add the possibility of adding a longer pause at the end of the animation allow for setting the background color and the default alignment of the images change the MediaTracker so that the first image will be displayed as soon as possible, while loading the remaining images. The actual animation would only start when all images are loaded allow for starting, pausing, and restarting the animation at any time allow for setting the background color and default alignment of the images In example 6.5.7 we created the class AnimatorPanel to automatically display an array of images, one after the other. We enhanced this class in the previous exercise. Create (a) an applet that uses this class for some animation, as well as (b) a stand-alone program to display the same animation. Use several distinct images with a large delay (for a kind of slide show) as well as images with only minor changes from one image to the next with a small delay for a comic-strip like animation. Add sound support to the AnimationPanel created in example 6.5.7 and enhanced in the previous exercises. As a suggestion, the new capabilities should include playing a particular sound file per image, as well as a background sound that plays continuously. Create an animation of your favorite computer science professor sleeping at his or her desk. Use, if possible, a real picture and have Zs float from his or hear mouth up to the ceiling. Create an animation of a starry abyss will different types of triangles appearing and disappearing into it. After the triangles have come and gone, make your name and the name of the program appear in the animation. Also, add some scary musing to go along with the animation (make sure it starts when the animation starts). Create an animation of a stick figure running (but not actually moving anywhere) Modify the above animation of a stick figure so that it becomes a self-contained class that can be plugged in to other programs. Your class should contain methods to start and stop the runner, and a method that actually moves the runner in full motion from one screen coordinate to another. Alter the LineRacer program created in exercise 11 of section 5.2 so that instead of lines racing each other, the moving stick figures you created before will race against each other. Additionally, have a gun sound go off at the beginning of the race, and applause sound at the end of the race. 14. Convert the SoundTest program in example 6.5.20 into an applet with the same functionality. Assuming you have two audio files in valid AU format available, create a simple applet that plays on of the sounds as background music as soon as the applet starts, and the second sound should play any time the user presses a button. Make sure the sound stops when the user leaves the page containing the applet. Explain how to use a ToolKit method, and what type of methods the ToolKit class contains. Create an applet that uses the Toolkit method getImage(String filename) to load an existing image from the local disk. Run that applet inside a web browser and monitor the Java console for any errors. If an error occurs, explain why, and what to do to avoid that error. In the text we created an applet called LotsOfCircles in different incarnations (see Example 6.5.13, Example 6.5.16, and Example 6.5.17). In particular, we created one version that uses a thread to seemingly speed up the computation in an off-screen graphics object, and another version that uses an off-screen graphics area but not a thread. In either version, add a button such that when the button is pressed all circles are drawn in black and no longer in random colors. Compare the response time between the version using a thread and the one without a thread. 6.6. In Full Swing: Two Examples State, in your own words, what is meant by the following terms: a) RubberBandingb) Fractalc) Polygond) StopWatche) Real-World and Screen coordinatesDescribe, in your own words: what the difference is between canvas coordinates and real-world coordinates, and how to convert one to the other how the rubber banding mechanism introduced in example 6.6.3 works why there is a start and stop method in the SharkAttack applet, and why the stop method should stop all running threads What is the exact syntax to: use the rubber banding mechanism introduced in example 6.6.3. use the toWorld method to convert an vertical integer screen coordinate iy to an appropriate "real world" coordinate (assume that the vertical screen dimension goes from 0 to 300, while the real-world y coordinates are between 5 and 5. use polygons to draw a filled-in "pentagon" and a "star" in different colors 4. Convert the SharkAttack applet in example 6.6.1 into a standalone program. 5. Convert the Mandel program from example 6.6.4 into an applet. Make sure that the Mandelbrot set continues to compute even if a user does not currently look at the page containing the applet. Note that this is an example where you may not want to implement an appropriate stop method in your applet. Discuss the advantages and disadvantages of this approach. 6. The Mandelbrot set contains a method toWorld that converts screen coordinates to "real" coordinates. Create a similar method toScreen that converts "real world" coordinates to screen coordinates. Create a program extending JFrame that uses a RubberBand class to define a rectangle and draw it "permanently" once it is defined. Once that works, expand this program to permanently draw a new rectangle every time the user defines one. You could use a DefaultListModel to store the rectangles. Create a class that draws an array of 100 circles at random locations. Then use the RubberBand class and the RubberBanding interface to display the center of those circles that are inside the selected area when the user defines a rectangle via rubber banding. Modify the above program by adding buttons so that the user can select to draw a rectangle, a filled rectangle, an oval, or a filled oval. Store the objects in a DefaultListModel instead of an array. Note that you need to store different objects, which sounds like a perfect case for inheritance and polymorphism. Enhance the drawing program from the previous exercise so that any object drawn can be edited. You may want to use a JList to let the user select the object to modify, and use an appropriate dialog to adjust the parameters of the object. Enhance the Mandel program you created earlier so that some background music is playing while the image is computed, and a "bell" sound rings when the images is finished (at which time the background music should also stop). 12. Use the StopWatch class created in example 6.6.1 so that it shows the time it takes to complete an image of the Mandelbrot set. Change the StopWatch class so that it displays 10th of seconds. 13. Define an appropriate renderer that adds an icon to items in a JList. The icon could always be the same. Make sure everything works by adding several items to the JList and embedding everything in a JFrame or a JApplet.  Swing uses most events from the java.awt.event package but introduces many more events and listeners in the javax.swing.event packages. We will introduce new events and listeners when discussing the classes using them. For a general discussion of events and listeners, refer to chapter 4.4.  In fact, the "write once, run everywhere" concept was occasionally rephrased as "write once, debug everywhere". Using Swing components, programs have a much better chance of behaving the same on different platforms.  Microsoft called its improved classes the "Microsoft Foundation Classes" and they are integrated into Microsoft's Java Development program J++.  Virtually all Swing classes implement the Accessible interface which requires implementation of a method public AccessibleContext getAccessibleContext().  There are copyright problems associated with choosing different look and feels. In particular, Apple has not granted Sun the right to distribute a "Macintosh" look to be used on platforms other than Macintosh computers. Therefore, the Macintosh look and feel may not be available on non-Mac platforms.  Instead of issuing multiple calls to getContentPane you may want to define a reference to it and then manipulate the contentPane using its reference variable.  A JFrame, by default, has a "Java look", hides on close and has a border layout. You can of course add an appropriate WindowListener and set the standard closing behavior to DO_NOTHING_ON_CLOSE.  Since JDK 1.3 another constant JFrame.EXIT_ON_CLOSE is available to exit the program immediately.  The AWT Button class uses the methods getLabel and setLabel to manipulate the button's text. Those methods continue to work for a JButton (they are deprecated) but the more consistent methods setText and getText are better choices.  A JLabel uses constants from SwingConstants to indicating the alignment or text and image, while Label uses constants from the Label class. When converting a Label to a JLabel, the class name indicating the alignment constant must therefore change from Label to SwingConstants.  See definition 6.5.8 for a brief discussion of a Uniform Resource Locator (URL) and the corresponding URL class.  Of course you have to be careful not to violate copyright laws. There are free icon collections available on the Internet that can be used without problems.  Instead of issuing multiple calls to getContentPane you may want to a reference to it and then manipulate the contentPane using its reference variable.  See definition 6.3.26 and 6.3.29 for an introduction to Swing dialogs.  Sun offers an "Applet tag conversion" program that will convert an tag into the appriate and/or tags. More information about the Java plugin including download information for the plugin and applet converter is available at http://www.javasoft.com/products/plugin  Using the EMBED to activate a Java Applet via the JRE will render the "Java Console" option of Netscape and Internet Explorer useless unless it is enabled via the plugin control panel. Also note that location of the matching angular brackets, which is slightly different for EMBED and OBJECT tags.  Loading time is slower, since the JRE plugin must be loaded first, and it in turn loads the specified applet. Output directed to standard output will not appear in the browser's Java Console unless that option has been enabled via the plugin control panel.  The Border class actually has no equivalent class from the AWT, but it provides every Swing component with the ability to put a border around itself using the method setBorder inherited from JComponent.  Swing actually provides several additional layout managers but we will not introduce them here. Please refer to the Java API for details.  To fine-tune the behavior of a popup menu, you can also attach a PopupMenuListener from javax.swing.event to the component that will own the menu. For details, check the Java API.  In an exercise you will be asked to change this class so that it achieves the same functionality with only one inner class. Note that in Java 1.2 and below you have to preface file and options with the keyword this$0.  As usual with Swing components, the drop-down list could contain icons as well as strings. To acomplish that, a different rendering model must be defined for the class. We will briefly show an example of using a rendering model in the MandelBrot example at the end of this chapter. Items can also by removed from the list by using a model; please refer to the examples on lists and the Java API for details.  This class is somewhat comparable to java.awt.CardLayout, but in that class the additional groups are invisible whereas in a JTabbedPane the tabs are always visible. Note that CardLayout is not covered in chapter 4.  We will explore dynamic data structures in detail in chapter 8. One of the structures that will be introduced there is a Vector, which is actually the underlying structure for DefaultListModel.  A natual improvement of this program would automatically put all image files in a particular directory into the list of image names. That is possible as soon as the JFileChooser class is introduced.  The pathToFile must be a fully qualified URL (Uniform Resource Locator). Just using the file name will not work. We will later discuss how to construct URLs in detail.  We will return to the HTML formatting language in chapter 10.2. and explain in some more detail what actually happens when trying to locate and load a web page formatted in HTML.  We could expand on this example by allowing for bookmark editing and displaying bookmarks in a tree-like structure using the category information for grouping. After finishing chapter 9, you could further expand the example to retrieve bookmarks from a file. After finishing chapter 10, you could again expand the example to allow others to save and retrieve bookmarks via client/server programs.  In chapter 10.1 we explain in detail what happens when your computer dials into the Internet via an Internet Service Provider.  The Enumeration class needs to be imported from the java.util package for the collapseTree and expandTree methods.  We will explore dynamic data structures in detail in chapter 8. The DefaultTableModel actually uses a Vector of Vectors to store its data.  There is no method to add a column at a specified index because the JTable view allows for interactive rearrangements of columns.  To be safe, you should always extend DefaultTableModel, disable editing, and use that class as data model for your tables, unless you exclusively deal with String objects.  Note that we use this as input to getWidth and getHeight of the image. That works because JFrame extends Frame which extends Window which extends Container which extends Component which finally implements ImageObserver.  A simple inversion filter that creates the photo-negative of a color image would look as follows: public class InverseFilter extends RGBImageFilter { public InverseFilter() { canFilterIndexColorModel = true; } public int filterRGB(int x, int y, int p) { DirectColorModel cm = (DirectColorModel)ColorModel.getRGBdefault(); int red = 255-cm.getRed(p), green = 255-cm.getGreen(p), blue = 255-cm.getBlue(p); return ((cm.getAlpha(p) << 24) | (red << 16) | (green << 8) | blue); } }  JApplet extends Applet and Applet contains getDocumentBase and getCodeBase. Compare definition 4.15.  We will discuss applet security restrictions in detail in chapter 9.  You could also use the EMBED or OBJECT tags as discussed in Definition 6.2.13, with similar results.  In this case the applet could not use getDocumentBase to load images, because the HTML document and the class file are located on different machines. The applet could only load images from www.shu.edu, i.e. it must use getCodeBase as the base address for loading images.  This is a common source of error in using an off-screen area: the method getGraphics is used in a constructor, but because it is called before the component is laid out, it returns null. The common solution is to (a) always check if the off-screen image is null before using it and (b) initialize it in a method different from the constructor.  Versions of Java before 1.2 only support AU audio files, and there is no static newAudioClip method available, making it difficult to support sound in non-applet programs.  Future versions of Java will have enhanced sound support but for now we will have to be content with Java's current abilities.  In a standard Windows installation you can find "The Microsoft Sound.wav" in the \Windows\Media folder and "Applause.wav" can be found in \Windows\Media\Office97 (if MS Office 97 is installed. Both files can be copied to the current directory and renamed appropriately as sample sound files to use.  This game is based on an idea by Michael Bosco, a former student who developed a simple but effective version of this game for a "Java and Networking" course.  The Graphics class also provides a method drawPolyline to draw a sequence of connected lines that will not necessarily form a closed figure. The input to that method consists of arrays of x and y coordinates, not of a Polygon. Java by Definition  REF _Ref437026731 \h Chapter 6: Swing and Multimedia Page  PAGE 545 of  NUMPAGES 939 Bert G. Wachsmuth DRAFT August 1999 Java by Definition  REF _Ref437026731 \h Chapter 6: Swing and Multimedia Page  PAGE 132 of  NUMPAGES 1 Bert G. Wachsmuth DRAFT August 1999 (**) 6.6. In Full Swing: Two Examples SharkAttack Game; MandelBrot Set with RubberBand (*) 6.5. Images and Sounds Loading and Filtering Images; Animation and Enhanced Image Loading; Loading and Displaying Images in Applets; Off-Screen Drawing and Double-Buffering; Working with Sounds 6.4. Trees, Tables, and Graphics Trees; Tables; Graphing and Painting in Swing 6.3. Advanced Swing Classes Scrolling, Splitting, and Tabbing; Models and Views: Lists; Swing Text Components; Holding Swinging Dialogs 6.2. Basic Swing Classes Pluggable Look-and-Feel: Customizing the User Interface; The Essentials: Frames, Applets, Buttons, and Icons; Surroundings: Borders, Panels, and Menus; States: Checkboxes, Radiobuttons, and Drop-down lists 6.1. Introduction to Swing To Swing or not to Swing; Overview of Swing Classes; Converting from AWT to Swing !"/0iju&-};< $$h&x&(()))),,,..~/////00i0|00011>1P1S1d11111%2:2K2W2|22222222323&414>4O4S4e44 CJOJQJ mH nH uOJQJ B*ph 5B*ph0J5jUmHnHu6 j0JUO !45 "#./pqlmy]yzu&}=>WXS!T!$$''J(K(*/,0,,,  & F^  & F^,,,,,,}{$$Ifl0,"LL  t04 la$If,,,--8-R-S-}------ .}}}}}}\}}}$If{$$Ifl0,"LL  t04 la .N.O.... /#/$////0}l}{ywww{$$Ifl0,"LL  t04 la$If 000h0}}$If{$$Ifl0~ ,"   t04 lah0i0|0000111R1S1d1111X}}}}<}}}}}$If{$$Ifl0~ ,"   t04 la1$2%2:2{2|2222223344}\}X}{yyyyy{$$Ifl0~ ,"   t04 la$If444444k5v5556666y7}77&8'8E8F8m8n888888888999999!9.9e9f99999 : :5:6:]:^:k:l:r:w:::::::1;2;{;|;;;;;;;;;;<<<<<<jUmH nH ujUmH nH u6mH nH uOJQJ0J6 mH nH u50JO455566y7~777788&8$If^ &8'8/868>8E8F8P8Z8O|IIIIOII$If$$IfTl\f }U}  t(04 laZ8a8m8n8y88888II$$IfTl\f }U}  t(04 la$If88888899ED$$IfTl\2 Tp  t(04 la$If999999e9f9IGE$$IfTl\2 Tp  t(04 la$Iff9j9v9999999K$$Ifl\B,"    t(04 la$If999999 : ::KK$$Ifl\B,"    t(04 la$If::':5:6:?:H:N:]:K$$Ifl\B,"    t(04 la$If]:^:h:i:j:k:Q8KKKK$If$$Ifl\B,"    t(04 lak:l::::::QOMGGG$If$$Ifl\B,"    t(04 la::;;1;2;D;^;{;|;;;jdddj(dddjdd$If$$IflF `,"!    t0    4 la ;;;;;;;<<<<ddb```$$IflF `,"!    t0    4 la$If <<<<<<<<<<<<<<< ====|$IfU$$IflF ,"       4 la$If<<<<<<<<<<<<<<<<<=====+=,=-=.=/=0=D=E=F=G=H=I=f=g=h=o=t==F@a@~@@@@@酪yvv0J 5B*phj:UmH nH ujk; UVmH nH ujS'UmH nH ujj; UVmH nH ujUmH nH uj"UmH nH ujUmH nH ujUmH nH uj" UmH nH u0J66 mH nH uj6 UmH nH u.===/=H=I=P=Z=f=g=h===|,l1$$Ifl4,""4 la$IfU$$IflF ,"       4 la$If ====J?K?E@F@O@`@a@~@@y{$$Ifl0,"LL  t04 la$If @@A^A_A~AAAABB@BkBlBBp}}D}}}}<}}{$If{$$Ifl0,"LL  t04 la@@ANA~AAAAA BBBB%B*B/B@BkBlBqBrBBBBB^CCCCCCCCCCCCC DDD#D,D1D5DCDEDKDPDVDvDDDDDDDDDD.EPETEiEEEEEEFFFF+FCF[FhFuFyFFFFFFFFG;GmHsH0JmHnHsH 5B*ph mH nH uOJQJ0JWBB]C^ClC|CCCCCCb$$IflF,"6    t0    4 la$If CCCC D DD$DuDjdddjddd$If$$IflF,"6    t0    4 lauDvDDDDDDDD-E.E?EjLddddjdddjd$If$$IflF,"6    t0    4 la ?ETEiEEEEEEd$$IflF,"6    t0    4 la$IfEEEEEEEFFBFCFNFjdddj8ddddjd$If$$IflF,"6    t0    4 la NF[FgFhFnFuFFFFFFFddxd@$$IflF,"6    t0    4 la$If FFFGG"G6GGG^GrGGGd$$IflF,"6    t0    4 la$If ;G=GEGGGPGRG\GcGmGrGGGGGGGH HH;HRHcHvHHHHHII6I7IfifggKg^gchj CJOJQJ 0J560J50J]_____!`W```a6adaaaaaaa{b|bbbbEc{ccc+d`d^`ddddXeYepeeeeeee>fifjfJgKg^gggg-hchhhhiIi^Iiiij j3jXjjjkDkpkrksklllllmnnGpHpapbp1r2r$a$^jrkkkkkkkllllnnQsRs u u u u uuuuuuuuSuTu\uauuuuuuuv vvv v7v;vDv{vvvvvvvv3wHwLwZwwwz {{{{u}}طصާާާާާ0J6OJQJmHnHu6jUmH nH ujpUmH nH uj`UmH nH u mH nH u mHnHu j0JUCJOJQJh jRU jHU0JB2rjrkretft u u u uuuuuuuu$$If^`a$$If$Ifuu*u@uSuTuUuuuuuu7v0rpppn1$$Ifl4,""4 la$IfU$$IflF ,"       4 la 7vww3xmxxx2ytyyyyzGzzzzz { {6{l{{{{||X|| & Fo h88^8|||t}u}}}}}}}~~~~~,.Cop^^ & Fo h88^8}}}~~~~o?@u*ƃԃDPnxЅ҅hv  ;NTY_ab5;OT։؉މ8>GLw|ÊɊlzՋ؋ 3AR[9U[ˍ j0JU0J6CJOJQJh0J mHnHuZ?@ր@Atuz*+^^Ѕԅօ]^'Շ ;<abό$a$^ˍ̍9]^mBCʏ de~^ & Fp h88^8ˍ]IOX]Ïȏߏ4<>BHRveבĒILdʔ&1:;:Enɖݖ+0Ιڙ fCJOJQJh CJOJQJ mH nH u jdU6 mHnHu0J50J0J6 j0JUPב-oĒISœ͓EJLM:;j$a$^ӚԚ/Ff 4Y~pq̞fgԚ_Ɯ̜-39@Yeq|q{'B8>gW٩>Z^abefhi½ mH nH u jUj6; UV jU jU jOU 0J5\0J50J6CJOJQJ0J6 mHnHu j0JUH9s )PuAB^y'ZǤ^Ǥ8hʥ!;{&RWŧ&Q¨9n^ԩ٩<>?`adeghޫ)ίϯ5]$a$^"-6خۮ߮ϯ;;I "#-./uzʴ=`ζ<nDeZڲ 0J56 0J5\56CJOJQJ5CJOJQJ0J5 j0JU j0JU jF0JU j0JU CJOJQJ6CJOJQJ j0JU0JCJOJQJh0J6=ݰѱұ/0<=Yt`ζ^  p^ζ<nE`e%Z_ϹHLN\$a$^Z_ϹºĺҺHJGYt{S^k}Ͻֽ߽ =K\e&W˿ҿ#4Za);X\ak-37>V O6 j0JUCJOJQJh0J6 mH nH u joU0J50JV\]پVWUVr5`^A[ O`P$a$^O\r,#OVioMU%;O pJO~ %*0F\`t./G,48D 0J56 j0JU0J65CJOJQJh60JS*,:MN0b^;^,;GHFGW:;c0Ft^DE! cjsycfLy*1JRW]h: 0;<V\5CJOJQJCJOJQJh mH nH u jU j0JU0JmHnHsH 0J560J50Jj0J6CJOJQJUGAy*i)[gho^o=s=i(2:;^np>?e#$kl$If$a$^$k{:LnwQ\inoJ~XV246DNRf~w}:;?!&,cr56 j0JUCJOJQJh jU5CJOJQJ CJOJQJ mH nH u0J0J5CJOJQJ0J5CJOJQJ0J6H5X}{$$Ifl0,"t$  t04 la$IfNvw}}}}}}h}}}}}$If{$$Ifl0,"t$  t04 la=]Qhi}}{y{$$Ifl0,"t$  t04 la$If :}{$$Ifl0W!-  t04 la$If:;J}}(}}{ywuyy$If{$$Ifl0W!-  t04 la $:WX$g,p:s!idh^hdV9:xV026_`$a$h^h>?Ba!"_`u v  & Fq h88^8sy~-:AG  ( 1     9 < p   DqGPntw?sx8F,NPvfm8CJOJQJh0J6 mH nH u jU0J55CJOJQJ CJOJQJ0JSv o p         9 p      !?Dqv^vw6e+D{?qstNR$a$^RTop%89"#323XYrBp^  '<EGX^r! %)DHOT[_imosy}&+6hmPVYm!$$@%j%%%%%%%%%%%%^& mH nH u jkU"j; OJQJUVmHnHu jHU jU0J50J0J6N, T    !T!m!!!!"U"w"""!#j###$:$S$$$$$$$;%^;%@%j%%%%%%%%%^&b&d&(((r*s*$a$B$$Ifl0j,"4 la $$Ifa$^^&`&+)5)\)e))))))))***s*+++,,M,n,o,p,--------....S//001152P2~2223A3G3333424m447$8<8f88889999t9{9999999`:b:d: j\ UCJOJQJ\5CJOJQJ CJOJQJ0J j0JU0J6CJOJQJhPs****+6+P++++q,r,,d-e-R/S/o//////0K0000%1^%1h111252P2~22233A3a33334]4e4m44445P5555*6^*6V6666 7N77777$8<8f8888^:`:d:h:$If^d:f:v:x:::;;;;< <<"<p<y<{<<<<<<<<==$>|??????????@ @@t@@@@@@A A]B_BfBlBDDDD?EEEZEE?FBFSHZMM6N`NNNNNdOOOOOOOOQQQQ)R2R j[U mHnHu0J50J60JCJOJQJh mH nH u jUTh:j::::&;(;X<Y<<#>$>e>{>>>>?CYEZEvEEEEEEE?FlFFF GgGGG;HSHpHHH^HHIIXIII!J^JJJ#KhKKK!LdLLLL)MUMZMMMMM1N6N`N^`NkNNNNO2O]ObOdOeOOOOOVQXQQQB$$Ifl0,"|4 la$If$If^QQQRRR)T*TWTTTTTU8UkUUUUV;VgVlVmV@WAWQWXX$a$2RRRSS*TmVVVVVVVVW WW(W7W>W(X,X0X6XtYYYY-Z[ZsZZb\\\]7]y]]]]3^]^^^^^^^^``bbdddd.e9eefvffffThhhhh ii1jAZy~|zzzzz$a$1$$Ifl4,""4 la$IfB$$Ifl0,"LL4 la,_܅Y݉Nn"[)^Y\ތ&S֍G(*TzƑʑ zv{Ŕ/4O_Zxy֗ 0;њҜӜ؜ٜotlwOJQJ 5B*ph6CJOJQJh0J6 mH nH u jUjŗ; 6UV jAU 0J560J50JK)h، &Sэ֍GƑʑ̑CD$a$^DoZ[֗חКњ֚$If  ,QKKKK$If$$Ifl\F!~ 2   t(04 la,-7EVdeqQKKKKQKK$If$$Ifl\F!~ 2   t(04 laț֛K$$Ifl\F!~ 2   t(04 la$If֛כ OIIII$If$$Ifl\F!~ 2   t(04 la %;NOVhQKKKKQ KK$If$$Ifl\F!~ 2   t(04 lah~ҜӜKK$$Ifl\F!~ 2   t(04 la$IfӜߟŠijߢ!Hr CpҤwFKu{ٟݟ>CXh{bmz!jC*/y٥ڥۥݥޥ.32BЩީ6;Ukoܪ7H#6FK  Z_v j0JU66CJOJQJ0J60JYIUj?Y|ΩЩѩ=>˫"''^o۬/0@wxxyC˱̱,h^h & Fr h^+EP<BLaijV\8;28asx!Ky9?I^ۻOb.:POe);U_0J6CJOJQJh j0JU CJOJQJ 0J5\0J5mHnHsH0J50J0JCJOJQJN CҴ8z޵2b}^~^ & Fr h^.xGsxҹ!KwyzabVX\$a$^\]8)QzZx=>f.k ?D06U\q,Ccj<?6TY1-6_jrw6 0J5\0J50J6CJOJQJ0J6Zf"Gl1glmfg/0@VWpq^,ACD<w,\6TY^/12K`uH;c^Dprs 9~*l ^ =@Yeps"&+0 <-9 ".LX6:<@FM;CCJOJQJh6 mH nH u0J6 jtZU jNU0J0J5V  <_!"L{|}hB$$Ifl0,"LL4 la$If^12CD:;VtN^$a$1$$Ifl4,""4 la<sVD"OrJmAC^CD,-mn<a & Ft h88^8 & Fs h^$a$CSWx~ n| )1@n<OEGZ\x{`   .   CJOJQJh0J56H*0J mH nH ujgUmHnHuWOj@x-kO^OnDPX`'8i}L<^  . N     F      x y  J K  XN & Fu h88^8$a$^  & 8 d v    "       "*EPWX *|o,57&*'7EQ4DIVcs3CJOJQJh mH nH u j{U jxtU0J56CJOJQJ0J60J5SNO{| 7rCo7^7[z6t&*,_23w$a$^+0[u2e+i^25i< j   !C!!!!""K"M""""""""#.#4#S#z#|#}###$$$$$$$$$$n%% &&&#&.&5&ñCJOJQJh0J6 mH nH u0JCJOJQJ mHnHujUmHnHujUmHnHujUmHnHu 0J560J50JB< j   !C!!!!!!""""""""$If $$Ifa$^"""R#S#z#{#|#~#$$R$$$$$T$If$If $$Ifa$B$$Ifl0\ ," 4 la$$$$ & &5&&&& '>'?'(((()D))) & Fw h8~ 8^8$a$1$$Ifl4,""4 la5&&&&&&& ''='''''''(******g+m+n+q++--.... ..000)0+0I0T0v00000181O11111j2u2*3 5?5J5555555z66677777X8a88 9CJOJQJh mH nH u jU6>* j0JU6CJOJQJ0J0J60JCJOJQJN))*O*****p+q+++++---00I0v00081112 & Fx h88^8 &dP22222)3*313L334'4,4g444445 5!5555566$a$^677$7778889 909c9z9999:c:::::;O;{;;;^$a$ 90939z9;;;<<&=<=h>y>>>>>>>>>C?Q??@ A!A&A/A1A8A=ACABBaClC8D@DDDDD#EVEEEEF`IIIIIIJ|JJJJdKKKLLLLMlPPPQFQjQQQRR1RDRURnRzRRRoSSUU 0J5\ j0JU0J6CJOJQJh0J0J5X;;;;<<<>>>???@E@J@}@@@@@@EAFAVABBD$a$^DDDDD#EVElEEEEEEF:FpFFFGBG|GGG(HpHHHIGI^GIYI^I`IaIcKdKKK L6LgLLLLLM(MbMMMM NBN~NNNEOO^OOOP;PgPlPPPQFQjQQQRRRnSoSSSS/TSTTTUUU^^UUNVOVVVVVV Y!YRYYYYY*Z/Z1Z2Z\\\V\W\\\]i]^UUV#VOVVVVVXXXXXXY Y!YRYY-Z1ZZZ[[\\\\%\4\ ]]%]&])]8]^_&`(`*`8`D`H`f`````aa bb?bJbcc:cEcXd\dddd(i)i8iDiiii j 5B*ph0JCJOJQJCJOJQJh jPU jU0J6 mH nH u jשU j0JU CJOJQJ0J50JIi]j]p_q_$`&`*````a a"c#cLcddAeteefDfffgYggg 8$a$ghZhhh#i(i)i2i7i8iDiiiiw}$$IfTl0j  M  t04 la$If iiiiiii j j8jRj`jajj{L{{y}$$IfTl0j  M  t04 la$If j`jajjjjj1k{2|9|`|f|j|q|||||}}~~~~~~_aGJ7ց3^m}Ã,<HKj'*0J50JCJOJQJh 6OJQJ mH nH uOJQJ0J66 mHnHu jU jU 0J6CJ0JCJOJQJHyyyyyyzzB$$Ifl0x,"4 la$If1$$Ifl4,""4 lazz8{:{>{@{+},}<}~~D|zzzxvzzz$a$3$$Ifl4 ,""4 la$IfD$$Ifl0x,"4 la G7]ց134ЄH~ƅ^ƅ=u9ej0{/cԉ&Z'^'`bcԋXŒČƌD|B$$Ifl0,"4 la$If^*`aҌԌ2BDFJvq (3:œ˓Ĕ_l"(-28{3 jU56]0J6mHnHsHCJOJQJh60J6 mH nH u j1?U j7U j.U j$U0J0JmHnHsHGDFJLst'J|Dvђ$a$1$$Ifl4,""4 la&()[#$lmstz{|}$If & Fz h^}~789:;ўҞӞԞ՞vwhB$$Ifl0,!4 la $$Ifa$$If34568S͞ΞϞОҞwx*/"*/7i~ɢp9I| ̪ժ!T0J60JOJQJ jTU"j݋7; OJQJUVmHnHu jNU"j'; OJQJUVmHnHu5 jU jVJU"j)'; OJQJUVmHnHu?6IgCrפ 2eYZ{||E^٨&Hhש ȪST׫1׫tghixyz{DẔ)<Khiѳ^$J<[ڹ ͺ#ּ׼ؼټ ǽ޽"-apu45CJOJQJ j\xU jkU0J5j0JCJOJQJU mH nH u jaUj 7; UV jU0J0J66CJOJQJD1c-?Sh|$If h$If^hJKjгѳ<~ܴF^|^B$$Ifl0,"LL4 laεLŶ$JnԷ/D~7<[ڹ -Do^Ⱥͺ!#$ռּڼ>?4p&+-.CDG & F{ h^^4,[^ns2=BM$(w9TL`#8[`n-59Jb!18X0J5 0J560J6CJOJQJh5CJOJQJ0J CJOJQJUG>89TFKMN$a$^ & F{ h^<AxLM.vWX D^ & F| h^  DG3dD_[^VZ?EHSp(9BCnor-2C#&8>QWhk6 j0JUCJOJQJh mH nH u jU0J60J 0J560J5SD3_dD_=V[^VZ\jl)]y>\E$a$z{qr@ *Lz(-.st=i,1Fc~0z^o ',2t01F!E} Sm @EU_e/O]EJ>Ulmtu0J6 mH nH u jCU5CJOJQJ\mHnHuCJOJQJmHnHu5CJOJQJmHnHu0J50JK!Ez Sm">@A./O^R]~ !=>Ujkl^lnPTVL /0LMMN^$a$PTVNTevTex%-0M N `h E-138>CIPT]sx~tkw0J5 j0JU0J60JCJOJQJh mHnHuXN_VWDE^ & F} h88^8$a$^st=>TUkl C { } ~ @ A _ {  ^ & F} h88^8^wdt>J $'+1u)>Ul C }   A     w  {*1LOQW]cr*o.G %,=I GS0J50Jb    % [     6 _     @ r w   $S^:Xty{|qr)_5h*[^1Wjo.G$5| =b^h%Zb !O P e   ^SP e #$$_$n$$$$$$$%%+%,%L%M%N%g%h%i%o%p%%%'('''"(&((())****/+5+a+g+++++,;,,,,,,,-%-1-7-^-d---,.2.O.[.\.b....6CJOJQJh0J6 mH nH umHsH mHnHsH jU jQU jU j&U0J50JN   !!_!|!! "G"T"""##E########$$$%%%$If^%+%-%L%N%g%h%i%%%%"(&(((f(~|$a$1$$Ifl4,""4 laB$$Ifl0,"LL4 la$Iff(h(=+>+n+]-^--,.\...^/_/o/00333333341424^ & F~ h88^8.///x/~///@0K0q0|00000001&111222223324v4y4 55:55555666789*99999::::;Z<<<<<<<==>>b?n?????8@>@@@@@DDFCJOJQJh mH nH u jU5CJOJQJ CJOJQJ0J\0J560J0J6P24v444 5;5o555555636`666667#7i777;8[88889^9(9*9+9:::::;2;d;;;<U<Z<<<<<<<<%=>>QBRB$a$^RBiBjB%D&DCDDDwExE[H\H~HJJJKSKKKKKKBMCMgMNNN  & F8^8F FrHwHHHHHpIuIIIIIII_JlJJJJJKKKYM`MkMrMMMNNNNNN"O@OAOeOOOOOOOOOOP!P(P8P@PPPPP&Q+Q,QiQoQQQQQQQUR[RRRRR;SSSST T+T1T?TTT5CJOJQJ CJOJQJ66CJOJQJ 0J560J60JVN"OeOOO3P4PPP}Q~QQqRrR:S;SgSSS>T?TVTlT~TTTTT^  & F8^8TTUVW9WWWrXXXX{Y|YZZlZ|ZZZZZB]P]U]_]]]2^@^e^^^^^^&_+_L_U__`>`H`X`f```2axgxhxxxxxxxx6 mH nH u jU jxU j,U j̕U jwU 0J560J j0JUCJOJQJhOJQJ0J6Jpqqqr3rMr~rrr(shssssuu%uFvGv~vvvv(wFwGw & F h^ %dOGwxx x xxxxxx!x(x/x6x7x{{{$$Iflrj U@+"4 la$If7xgxhxixxxx9yuyvyyy z:zbzzzzzz{^$  ^a$1$$Ifl4+""4 la$Ifxxxxxxxy yyyyy$y%y/y2y8y9yCyFyLyMyWyZy`yaykynytyyyy z{{{{{||-|5|||A}K}{}}}}~~~~$*`f!'ƀ:FORX[߁@Lk ILЃąم*0J5 CJOJQJ0J6^{5{O{{{~~)*jkق  IsЃ3u^ф0Pąم/`"*QÇ A^*QÇFlr͉Y^z"<P\ؐݐ OU[^*-cfopwx$'5=>pCI^ə9<ɚњܚ|6CJOJQJ 6OJQJ 0J560J6>*6CJOJQJh0J0J5QAFlqr͉(TYW$a$^EGHǏȏ/0mopC & F h^ʗ˗`a1ʟ˟P 0-.^  & F^  & F8^8  & F^1I6:fjО֞ߞ,B}ϟޟ (0DKT_ T_ҡա.@Apqrڢۢܢ )HLR]j0JCJOJQJUj0JUj0JU j0JU0J 0J560J6 j0JUMѢܢݢ34YZLjl^_   ^$a$^^٣ڣۣZ(IJK`2%ǩȩթ֩9  CFZfDIѬԬT CJOJQJ0J5 j20JU j:0JU j0JU j0JUCJOJQJh j0JUj0JU j0JUj0JU0JD89c!=SṰ"kϮQį*Y^"jkϱCOtgl2<z~HVض۷-;k{}νlrAIDHKf$`abijq jUCJOJQJh0J6 mH nH u jU CJOJQJ0J0J55CJOJQJQYaҰ)Ouϱz~ֵص$a$^׷  H_`;ξ޾ !^  & F^ & FDc;tHf$^`ac$If^)-26C[ow}/ABeklo +OsCI}"'0RWb)-8=AG j0JU0J6CJOJQJh0J5 0J560JXBCp./ABl^ & F h^B$$Ifl0x,"4 la$If +Js\]"$a$^/0RS  3PTmU L  & F8^8^ ) 'ZhINSY*BCFEiE +YgTb*rxJXA]^a@ 0J560J560J60J^(GfCe#^#@EiAzEdSTv^%bc%&34^@fQ^2S]yRwx$a$^@<AFLBP7?GJ!K^_b&[Ov$!K-5$*=JRUhk  Vb13^d656CJOJQJ 0J56H*CJOJQJh0J50JWx !_ &6V[p9Piqv ^ Cy$9Xy!K&' ^ ABVWST{%&]^  r s   ) * f g  z{$a$d&]y    s (       + 4 ~      $z{59ENhs&_!Pdl0J5 j0JU6CJOJQJj0J6CJOJQJU0J0J6R{5}~  %&9Oh0jI^ 0^`0  0^`0I_z OO{*l!Pw@W^WRS. / > Y"Z"L#M#O#P#Q#R# $$Ifa$$a$^RSW"X"""""M#N#R#S#U#V#^#_#q#z#####$$ %%%%%%%%%%%%%%%%%&&&&&&&&& &!&$&,&.&/&2&;&=&>&((((V)0J5OJQJ jjU jU j U jU jU j.U j`U jU0J6 mH nH u jU jU&U j0JU0JCJOJQJhBR#T#U#V#W#X####]$^$V%W%kiiiii1$$Ifl4,""4 la$IfB$$Ifl04," 4 la$$If^`a$ $$Ifa$ W%%%%%%&&& &.&=&>&?&((h$$Ifl\:,"4 la$IfV)[)f)l)))))))4*=******w+++++,7,=,?,,,,1-2-9-;-?-@-`-m-p----....;.<.?.@......../// /&/E/J/K/l/r/t/|/~/////////////////00J0X0Y00000000J6650J0J5_()4***w+++,,7,,2-....0000.2/2 & F h^ & F h^ & F h^ & F h  ^ `01111%1*101K1Q1S1V1l1r1s1u1y1z1111111111122.2/2f2m2n2222222223"3$3,3.3I3Q33333333333333333344 444)404<4B4C4N4V4W4^4`4h4j44444444444440J60J560J5_/2f22-3.3I33i4j444-5.5+7,7f8g899999:C:^ & F h^ & F h^ & F h^444,5555556C666x7~7778 8m9x99999:_<u<*=S====>>J>@@u@x@A A!A=A>A?A@ABAYAZAvAwAxAyAzAAAAAAAAAAAAAAA» jW'EHUjK\8 OJQJUV jr$EHUjb[8 OJQJUV j UjZ8 OJQJUV j}UjY8 OJQJUV jU0J5650JBC:x::::;F;z;;;-<Z<_<u<<<<%=*=S======>>AA^^A AAABAYAzAAAAAAAA BB)BAB h$If^hU$$IflF ,"       4 la $$Ifa$$IfAAAAAAAAABBBB BBB%B&B'B(B)B*B=B>B?B@BABIBJB]B^B_B`BaBbBuBvBwBxB{BBBBBBBBBƿ|y0J0J6 mH nH u jH5EHUj\^8 OJQJUV j3EHUjQ^8 OJQJUV j0EHUj^8 OJQJUV j.EHUj]8 OJQJUV jq,EHUj\8 OJQJUV j3*EHUj[8 OJQJUV jU5/ABIBaByBzB{BBBECFCaCDD'E>EWE}EU$$IflF ,"       4 la h$If^h$IfBBACBCCCeClCDD\DbDDDDDDDDE'EFG!GGGGGiHHHHHII7IQIIIJJJJKKtLL,MVMMMNNNNO OOOOONPRPUPP/Q2QQQ$RMS{SSSSTXXqYYYY[0J55CJmHsH5CJCJ 0J560J6 j0JU0J0JQ}EEEEE.FWFzFFFFFGGGGGG=HfHHHHHII7IQIxI^xIIIIIJJJNJgJJJJJJJJ*KCKdKrKKKKKKLL:LPL^PLoLtLLLLM'M,MVMyMMMMMTPUPkPPPPPPP/QXQQQQ^^QQ$RFRfRRRRS@SHSMS{SSSSSS*TcTTTTUWUUUVJVUV^UVvVVVW$WfWWWW(X^XXXXXXY=YlYqYYYYZ*ZAZpZZZ^ZZZ[:[i[[[[\0\J\X\c\}\\\\\G^H^__`(`D`Z`[``^[C[\\\\\\\\\3]7]]]^^k^^^_[```befhhTisi~iiiiiiiii/j5jRjUjjj)k\kkkWlZmvmNnfnnnnno!os?s@ssB$$Ifl0r," 4 la$If^Yssuu1u5uuuvvxvE{`{{{{{U~~~~u_%Lz}pvۂʄMNgņdžʆن܆ !$)/29ڸ0JCJOJQJmHnHsH0JCJOJQJ 0J5\0J50JmHnHsHmHsH mHnHuCJOJQJh0J mH nH uHsssvvzvxx'{({8{9{:{E{`{{{{ $If^ h$a$1$$Ifl4,""4 la{{{{{{||0|[|||0}m}}}R~h~~  ^ & F & F $If^B$$Ifl0h,"xL4 la~~~~^u.Z_݀"Lwyz^  ^<pۂ"[ HʄKMN & F^NgƆdžن!./9CtXdpTB$$Ifl0h,"xL4 la $If^ & F9<CDGMP[\_ilyz}ԇ17҈؈܈!'fovԊڊ ڋHSUb!DK̎%.ɏݐ ,/;<?JY\0JCJOJQJmHnHsH mHnHu0J0JCJOJQJUCDM[\iyzԇՇT`xt\ & F & F $If^B$$Ifl0h,"xL4 la(ӉEۊ`ċ+ŒDGݐ,; $If^ & F & F & F & F;<JXYbvwǑȑՑ  tx` $If^B$$Ifl0h,"xL4 la\bevwzǑȑˑՑؑ "#&.%2%.ʔДٔ"5@eklr|ߕUaϖۖЗۗ ozě0J0JCJOJQJmHsH0JCJOJQJmHnHsH0JmHnHsHU"#./0M3Гcڔ/4 & F & F & FB$$Ifl0h,"xL4 la $If^/l Ėŗ(k*fmxӟ $If^ & F & F h & F & F fnŜ&Þ x̡סHS)%'>?AUW_`buw %GM}٦ߦ$9?Dͧէ, jU0JCJOJQJ mHnHu0JY%>?U_`uB4 & F & F $If^B$$Ifl0h,"xL4 la9a٦ڦM~Q & F & F  ^  ^ & F & F & F,-./23IJKLYa3=*5OZfn}   *+-;XZ_anoqʻʻʻmHsH0JmHnHsH0JCJOJQJmHnHsH0JCJOJQJ mHnHu0J jz U"j'; OJQJUVmHnHu jU jCv U"j)'; OJQJUVmHnHu>  *+;WX_noñӱ\|xB$$Ifl0h,"xL4 la $If^ñűӱԱֱܱޱ?KHĵ)Bfqvط)es'#$E$!%6 mHnHu0JCJOJQJ0J]ӱԱܱ p,hD( & F  & F H H^` & F $If^B$$Ifl0h,"xL4 la9Hĵŵ[ܸRùκ_LL M  & F ^ & F H^^ & F & FM$EdB$$Ifl0h,"xL4 la $If^ & F & F & Fq,Itx@gku9@Hx & F & F  & Fx H^ & F[anx=M   *,| =K@APjFHIxy$CDMSksx -.17LZ6 CJOJQJ0JCJ j0JUH*0J[xC-EW;_[yz$h^oZ,15CEFWX~;<7^_`kpty~6?OY[\*;AROSX_qwyz:MXdz{$%0J20J j0JU0JCJ^%hi(9EJT^_17op04AINW_dyce &5:E`a7F !kv 0J5CJ0J60JCJ j0JU\cP` z(w\]hi vz{() $5Lwx}56;<SZpq  !"#BCIJPQTUYZdefgj! UmHsH0JmHnHu0J j0JUj U jU0J j0JU0JCJ6KopnopCJCJmHnHu5mHnHu /R / =!"#$%/ =!"#$%DdCn  c JA&C:\temp\Image8.gifb tc,o0DunŦA;(EC)PNG  IHDRx PLTEcc)1/<bKGDH%IDATx͕Y @E?r iLG qCPK}tRiR0 &޼!r)7{mOabފq ,,x4 ES)A1K xO[5{D|qAӊ/\m9ԚͬWG0߈c^Z3g4 ,MATCPI׆ʔESwls_B4חp\4q/i."oHj |eO9Y)S̻"5BE}?y=W37 3ftEXtOFIENDB`Dd] sn  c JA&C:\temp\Image6.gifbcSy (EunZ M-kŻRPNG  IHDR] GPLTE{{6|bKGDHUIDATx Dg+ ڠSɣژ:>r2P>@))*{#b$;=1#COcwP|+vI)woeTȊUu_0ؤ+[Zzf}0W5XWZ͓ TBҐvvhL_ C`ǏfvdE7Sߣ$Ou ۆ@msF~{q4 PSo^% 3V |!=}u*&VPH|w9ޱw5&W dh]>cw4+ nϙ͞} ":]_"7tEXtOFIENDB`Ddyh  c jAFC:\My Documents\cg-progressbar.gifb 3+MSi[>z un=yЃ.Lc—ePNG  IHDRy錢sBITBPLTErbKGDHGIDATx1 CQ2?$N.kY"5a VF?*amC߅,j#ɧi+F׎L6ElG:II”FLUT\.0ar76shYg{0'C`Օ0\`"Vx=\NK =f}kR\0J*pR&cdj FP*`.Fv^ Lw2W}`\m3LJ LsϤx[#+u# #eP 3W0.~jcHa\ NYh>T&o2th n Oo2[bj`?B+WFLc6DUbP 2zg Q3Miwj8e U̞2 `|șٴ` *q: iȉ7+>L H:=~]{SGej;攑Ф~bzAw~Fe Q=A0KZvc"edð}v,k/RXw 3a&̄0fL 0MA0)LEmץ`0Ln?#]}פtEXtOFIENDB` Ddd  c hADC:\My Documents\cg-tabbedpane.gifb [JNr|. Jun W.E,jٴPNG  IHDRdt+*PLTE B) D6 ~M GFGP\''|J p̌R3'LRĿRii"feGY,L()((+ln0IH% efec&[d,t'}|3 eʾ++,$"PA/:2hE+R%Pjo`w%stǧNGɼTVBDGRE-s~D }|D~ 4 54iUh')WV'(ѼWV<$9TvwΟ. s|i\-97QoW7TWX8QSuk  p|{)p|zm {sst|z|8ii 1ƶg| nrfg.~z䈐7t„o;G~\Orh(g)hmLWO*@Vlndϝytdfs>ޜV)m|?)EI t~lWI؜A8d9o6ޮկ <>м!4ϳ__ZMvfZ||~5Il~#u]՚zdz5+ބ#Ěςױ478 y!,wG86Pp{9?3)*4 L0 pSg<\?2|\\ZkL&%u}7[Y~h[iP3ouVXm5mo;<[H7hf IbKGDH\IDATx=n:UM;j_b  H~ `T:+a/@ A7!EY$xo65~Gk??&ŝgw1X@F uJ4Q0 !A*j HZF0VNAOPwcwՆ?hX;5W @V+Uݘu@_aLiBOa{R4Fԫ9'%[(o5)BHv*9fcxHϭIs $cn[)^fQ+6GS'LB|v+R7q켕40{y]N&A zۓ/y5jTwac4Iq bcC~-ȷ!%6_aRuTK  qbR c,3QH) (ƌl9]&Γֈ&$oN78A]#Ghoĺ5QUX*ˀ +H޲+ u k|mab+F^T0=w^FS'4s?s2.F»-fNl`HRoԤH=PUUwVDc0)F,UjUި)&4,oDbcIQ;- ,*ZKݴj}x,Y_0ҿnqTN!_؀5l}IV{UQBTycY.,X\t-jܠZ&T7ڮ8vFaهL<>&i o7B+0[pXQOamp- 5vqebXPe :pNyDh'ov!`CT5ǂ#gQ+ Zr:P\+vRҏL J|h#_:S`r&sk%2;уa}S+y,nɧ0ğAW]/IJT~X}fՖhxWU z&'#dx&%%}.WcDP1nMƀCl/eнXb$Tu~շM801phoYNʪ9 2fTfbxC̳vEsGOpbiظ*s0D$1v/ 1Xw`]{iK۶w)2Ko;Q;DNe|%^@iL Ƅz.o"/hyZx~i/[24"`w$pjp刱bC|}j8~ qn1=Ńk"8ֹYT&kƦPk.vYx#Yl;:&1n 4]^fcm1M#A1VpW tEXtOFIENDB`Ddqz   c VA 2C:\My Documents\tree.gifbDS3e5G!d "unXV9?H"s U;olPNG  IHDRq*.[EsBIT&C`PLTEffffeee̙f̙9ccfpӵ_g̙f3fzii3ffffffff3,JbKGDH9IDATxZ E*չvu,GQA%)j〻#]o ϳF~s)aR} zWH*q!%e@n1\(Y<}Hjp1fKev%y-D @ h/N]>21IS6 ts"b?bGy7 Ul+| {fFZ E4D+6p.G<; ,^N%ZI4T˾dus:H)LѼ[iP'R]+\s]x \pH q>p4|"?iFi@KM_ؚ![9\x71ɓU$C!i'ƯCP 'ڮIhr{34|ݣ,9`fTZf0HǰO3>b>FdiQ^ `?;p# VDt>fh / A$fE95W>\wX5/@f>6 z0c6d09dҽ$h2Qػ5ov >Bp ̈@La»9@dҩMc+,G`"rfhtP uu*P^EP;.*WTj{Mv{EIX=H=}'nV&BCH `0N~CH n!T ƒNAvk>v}sw`UڬL#!rh8"l.wr,l} ;@U@;}Epo}:-`iqM6j!z-syw jS+Eෆ-c'~rJ XbƷa?-` Fvz kC'l`Δ-ZtY6j3C`EG lRY`0[kLߢ^h.3< 'FjtEXtOFIENDB`cDd^   c ^A :C:\My Documents\cg-table.gifb*׷t ?CGmH \G a-@.e!@PIYՄ@,/i,n"< ؠXAB0?XL$^;*B1!؛iMD0ϯ@(J@ɼ5N<ì֛l.^&d/Ь MAF61BC , Ϟcf͞*BB; l ,SRc|O&Q,f ?_hA. @B!wXf8 K:"yB\7?$}(tEXtOFIENDB`DdB  S A? b1z?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ `_ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^cdefghijklmnopqrstuvwxyz{|}~Root Entry} F`?MData  WordDocument|@ObjectPool`P>`?_991128317@96>@)`P>`P>Ole CompObjuObjInfo  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTW[`efghijklmnopqrstuvwxyz{|}~ @96>@)#Microsoft Photo Editor 3.0 PictureMSPhotoEditor MSPhotoEd.39q @96>@)#Microsoft Photo Editor 3.0 PictureMSPhotoEditor MSPhotoEd.39qCONTENTS MCONTENTSV30_991128346m @96>@)`>sE>Ole `3333ff3fff3"""---3333f3333333ff33f3f3f37<_gff3f33ffff3fffffffffoooppprf̙̙̣rÙ̙̙طf<GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG??DGGDGB?D?C???C???C???D?D?C?C?G 8GEGEGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG<<<<<<<GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGDGEBE?D?B?B?B?C6B?B?B?C6C?C?D?C?C?DDDDC?C?C?C?C?B?B?B?C?B?C?B?C?B?B0<0A?C?C?C?C?C?C?C?C?C?GD< +EGEGEGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG<<<<<<<<<<<<<GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFDGED<?D?D?B?B?C?B?B?BDF?+(1TableCompObj hObjInfo  [$@$NormalmH <A@<Default Paragraph Font  l,b$z0Wr :ِQt @n( $ 6   AB S  ?;4@@G:Times New Roman5Symbol3& :Arial"hU6U6!r0Bert G. WachsmuthBert G. WachsmuthObjectPoolsE>sE>WordDocumentSummaryInformation(DocumentSummaryInformation8Y bjbjWW ==] UUUikkkkkk$ZNnU3"UUUiMiiiU iUiiiii c_ i  jUmHN N!B"C#%$%%nlz0Wr :ِQPNG  IHDRZ@ (hgAMA pHYs>IDATx=z*>^@bWvs,d e)N{*k)@W2`oGBEiX^Wxya !cmK5QJ !vf뫢)V+b^+عRHJR!-1z6#0 #QfUřmXЭ@`fdЦ5ʘ,", q!2#)Z)TR;l)ld0:bK[)IHEIki (ׁ#Qa/@9GVM!i8I]02oCgTJ}F;9^D82>{BjGM2{f{1LH2 ɂʝPt0ICꬍWXp'P3,U5^ h'M0qp෾sρ]63)}( Aĝy|)TO"zw# _oLbu5n!,BOс] |Ae޲1.'MJ|$[QP)qx<+LӹhM fr8Z?>>ֳC ZWLI1Prs?)$~$(Di^#lbpls/9N + s'oooTT09L@G%8_εMwV1~; v|^>kPq8cһ(DryNǤw Q;L :`#tS+Qu e%09LrwOf*kڴɚjNGt8^؅v4IRÓ5mQё-NKBf'nRv⺮wGTN7~lKּTqp0 TnpÍ,jfn!k +Zo蟸aF >/p05҄MO2[Q^P@a.Dȶ e3FT9k٤{<aT"gwNr7#$E$L$>|mEՂ'W2rد au-vׅ!LZ[bړajdkRٮX\q.>?g[ƾ l/zզSE5>ʩd!~.A<ժ6!7fgKæJQ9kZof0+(`#ځ)`So?E1 ̤lŇ՗>z|vn|Y+L}z 6VVbl-F A  +L DlJD*(G,& D1c?Ա*gใ_{cһ _PID_GUIDAN{7BAB9C81-25BC-11D3-9359-00609790256F}     9 !"#$%&'(*+,-./02345678:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~(nn1z?PNG  IHDRR|gAMAPLTE3333ff3fff3"""---3333f3333333ff33f3f3f37<_gff3f33ffff3fffffffffoooppprf̙̙̣rÙ̙̙ط  pHYs+OIDATx]s6s"us.5qya8l R:B?(",*'QoT/$=BP]HqSnWia留Q:9[y'އ`ug!#c?B`']y kOHe';>, 9{W=v,~~pL܋~"+uj?ѼNaOG@؊+]^#۪#M+}LÂ,u&nrqRfcN+=aWx9:60)r[2-+MgeV6dAoqջԐy7.j>`Jx'³-cz]han3[AG\uŮ۶a##B-cz7\o'sYc?͏蝸pmGWKpsu2t$_-M`׽԰UO}KC)~L׻ ~>,7vԆF{Xx,۬&9o0]8,uW{pw0llh]h@g;{n/cz?.v]=tV{cM>hf'vS;~]ޅ7 $b.v۾wJ>y.dz]7@8ʹx5"B˽SDnʎnC 6N۰M=y$24}G53LاC}7;. g.iޗ}?5l+W kc6V~A ?-/cv͆ >/+vaOUpa7R60?tbfu~45n~;}}:T=}5/gfW"u &GB:+XLGC9(Uxu.,c7'knl_lky`:].d>MkZaأw?c~Ѹ3ҷiA7ˋ b*v6 tAu`j΁aHYۣr,V>?Q17N:7ex%4{,X}66oyF3, G,v]FCןi:[RQYd5l@Dl-g%~` h*moEHF"&x3X '4]1Fx5i 5,C^@29 Ӱljb fVo%2rAk-ia^M B:6,X*lV9K'`{6q:D(~ImǧY Hˍ=r|ױ9KhРX,P|J%xc8e{t; {)B@ިVʼnfdžfW;[)e 'wMNx\I~87|AVw/I14_g.Kmw]>3$ɘ4t$3 1~{Ƿ=h@Ͳz;'9H!Γ˦g,SNCYFàゎ` ɚK( &?"_rFdQPs.B.KeLIzSf>~&g.F^}Jn62ypvQP_ Uq/幊үz-WgoHkxҺlt/jNX݅cȖP2:+n͒֍SY^/d[O;f rc"HkX'OWKwG/fbZ.kݪ]جEϳI؟$+~,O-rɘW$[ ;ldkLD"6fR_]tZpw':7O瑞˰f#&Ὂ2LNYljhxᯑgu0`˜ - z|lfILF46SzX}Ϋ2s},+t^w)fuqx`W0ŶD`ewm^;?+akxzݟS\֭ہDy7?;w+nSv2(i>1K`dϩv6b>(OFy z{hPhY4+\֒v`(iTHZpA t 2K nڽm165?}X\E G,s7~󐿗PJ2-m@}O8On.1k) +(DkUXnFXo;TէIQS^!JtֺUE筗\46U(q}P#E!S2Hh. ecߋ ,-Fll'-3bJT@yv>+H4+ձye^42gz"Vɱ l&%$Q3" ۍǪƌ*oR54F|w|Qc. )__kխWGѥmZ"=޿nvh!q,%%Sug$C;Yj>B+\_^J1~ 7 _Gygw9hy׹6~q;n\].R=fg\KAjwXU@;#]y\F*^wcp&79̻x/gYxu?{ __|rYU^1sZNV@$>9-T`֟d?TNWf ޻q5[O^+ wAZJ]Ծ2x;Ad>js&w%s =_.kx1^Mجi'=QBt'}1A_ pݨgj5*Z:C7zjw@S^+[dgyLjqXAm=_HUS _46O워tz#d?_N^y]yY)WJZt-j/i*ъ~ZVmyGޭ8_%K6=8lI-݋Day.^#ﭏojׇVkAlv;q>qϪ,+p4Mdlr.)S~.MʻPwmw[;H=uNH_>ljNdIENDB`> DdB  S A? b LT 0O` ;nn| LT 0O`PNG  IHDRFgAMAPLTE3333ff3fff3"""---3333f3333333ff33f3f3f37<_gff3f33ffff3fffffffffoooppprf̙̙̣rÙ̙̙ط  pHYs.> IDATx o6O-ڡuxmaqV`\ c4HKRŲ,X+ [瓼WWQӷyd9,9|#>-_ @-}|gC+QZ>/Z}D߱?`_#:(|5jKGߔ3Zuj)9K{Ӱg9xj!M?iwߘi75L_oWvl@6_.?#$%/[ S(=Vqgoj9ޣg'Uw L(n^]_ݖ繾JN{󕅳|\.ulhb=_e~xڰ_Un.N󋲋q}-]xX"1_okWQfD7 ;Hk/;*GWAggCcW;>& 1AR[;R!u+&1e'韺3_֩ 7{^n"o'Ww\ۯv՟yQ_ڼ`y|9~^*GyE;9섴yJQuհ׳޵<%1-UYƹ]㱔׮U!b#ժU+i0|m7>ܩ{أH޴~&"@sG]#z۴ٟƶWu_z@tO]ˀUxI{~Mw5a0lNv<ϫ<o~ @^h+Vkgw oAVɆQ KZJOq5•n\.Қh6l*f8+tΪozzwYQ3 : oxBshiBf^$ j-]| ?Sx(<(<(8 ]㷑(P,o59^hxVnx۪pX^ɺC\f8'SWzr/Vk{ayD'dLt^TmWsx;7Eё=рnwL lɉ=P:t>sObDԃgqB;6d OX$x?8c1BOgY%[2e#9# 9cwog />nocU1M)vuع &߱Pς+Z-ή<0' Xz BY6x䦴{pZ*Cۿ?_G8mb{*)-T#pe\USʒIENDB`{ DdeKXW<  C Ab /fRϥgw< Hvn /fRϥgw,wD}b_Zlo}.SVTlvXoiQK[`6/| 80u ro^{fmn{kt濻>#f.2]ߗ _9wyNbc>xO=yN%\ee{/}8bYӓ}|୷RٍiM.+eti޶bmxuњk4wnLݧcf;lV>*Lެ;]Xp=jš;LYz{/<jwn7"^m߮*?|kuZ/O%kcxoiw 0Ua]wf[elhxVJ\g5k2V%}I-!A2 d$I8$Mo.r򁩪?RLqv?.) mdIyG+MK{yP=9gGdA wG!C2 d_ƟuL[C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!жGuG $I8$pH&L!C2 d$I8$pH&L!C2 d$I8$ is75$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!C2 d$I8$pH&L!Cm۞_uYcxl$I8$pH&OCұW֟o3(/6Z){qp"c8$pH&L!C_z-}rnKPMs^Ńm>{[sI9ʽ'Ca6 2KǗ);v+|*^z|hֻ4,9f67۱kqcKYyeCGwlڥ [cڇin'ov{ Nk?yI8۾-uOJ?+^+O8"q_!hx)Z:\ovGCX7CnPb4Qqs;m{d~1Y#^M=qd6#f^Nwr䜝Olv@ S_f飌l韟[^i>{=~DWؗ%zfך ؗ_몹ض^rl%;T R*$J7|T$I8$pH25$1Cip U IENDB`?DdiII<  C Ab rҵ0-aH># LSvn rҵ0-aH>#PNG  IHDRT~)gAMA )IDATxݽva02].Tm+yb:_H^BRj]vI ?ٳG@$3|6<<<cõ[`9sq\˵:?M;;sxUiSU4O^$>󏴻tݪj*{Vڵ\}9?dAņ~/o/HesuU1-)hT[Chlج ɸo7yTrٝt(cӵIyxx.P篪:7SMstW'Y*xm|~]7p w]X|nޮޖ,tMsccN)[|aaX- 3_a -KhFo˪6uIVu551MZf{66UzMs:VկE!RؙhDUőnwB7#Q Ago>zxo`o] 3?ks)e[)h2=r*]ۣZDwǣȯ0+d};O ݮDI~dڴ'`hm[;1-SH™_ߝaMps=s$VCt05%e<}n&[lFXa&2=݊ w; /ətSș =Uoz+ dMpӯ sK*:|ΰ:χá PŞ{ Us<t:5M3xoZ{%սC 5F G ?F]e`gct9sJ$>{_S' D~@D~@D冿#]dz p^ܯ(KvWŞ.v=>ͪ+L/;MNDX2:ؤh6loFwzy]@\wӷQwn@ްil#s.֛ÜϺ2p\.Ƙ{cLZ3Ćs\NZ>`aEQEQEQEQEQ5/c1Oߞ%د}w]½Nc>uP>޻.]{0|վ6/]ޯ}w]{݅9? ? Dzor =?[1/_|v+沺}鼽E]^$6G:~?ߑgýnۜgÿ9^oMq&Hjgc̏nw՞܂./:olxrKŽwKco Řs|Lsxg5|􄆧,47rwwxlyDշ}]t;nmj|T6{($. ?՘eCqKºa_=K?}-p:W.#K+l]?}joG|]ui՛c&ͤ+J&bn}uglӲZ>VЗE{_=L^׺mc/+k{݄zȬ\'?;>D >c*f'>s$^7Vw߻0ᄮ1]+T>w?]sn&9dNmL:_7vT? ? j 7luqp\.Ƙ{cLZ~EKv%mP>޻.]0 1rN=Vkmm]("("(Wqw}0D}>(k?ߢD~@D~@D~@Tk*=n7Q2<@\oAB)M *Vt@x#/ںi lC矪̩ǽD#-=`&1Ugс}1t ^n9oM€~B:D|sOt뉮/MŸs/]>aAAx/ *+ `a("(Vug9nXයGMIENDB` Dd <  C Ab|e09(jrmRXaunPe09(jrmRPNG  IHDR gAMAIDATx;v9/aIövҎ2-%(s6Î̥xh/AQ/H"z*Js<(kaR_V(`U`|a:?< 4SJiGԖѧla {%i +0ٍ1ĵ*U&^+&{gz:#Eq9m;݌<&jUhTYLTmz{6A"NKk(Syn<t4ڃou@<K[9oޗW_*I;=!-\63e~PoƁ̫xd%N[W,Sr}apm.-c`|{WYSH*X R@[`&/Gbڲ +/#)l6LfqA'+bvTʈΠJXOUPT: 샍e\=^ 5׉%굣EgcXu^__1\@[X`fN[~<0K"|:k6[DZ{;< Uq܉ry8 |y\@[8}2}"؈k<Z0Az?ñ=m;g/6Q Œ|ӄz( [L)&o$4ncFyEnjl$± y-q9L}ɣS8VSm)Y{<@m.yL(&Rnݢqm¢gos#&hE2L +%o5كO!18[[t4#=T,iʰSaML,Q*RnmR03QNv䄵KEqnnRyk%W[8.]|a^=Bѯ6N[ӹ=-lNƓUdO,3GϹprzYV&<)` 5`;-2ЖOjd{lbh>]MHWpVph>4.@(=  mwbOgf|y?P;x Nh5T*0Bcx"؀yo߂x" ``֮;WjCL$Ue}9=XȬ]#jKߧEOO.jZfڶ,,un^=EI* iZmuSwn_);+{ϟ{T &CNr\>ZOgJrI-ӴN]dnaeQ&g+qv|R͑ڲVg`Eܶ#ӖKXԉqcXcYqkM|FjH͒wab4E_PR}j8wӘq?9mv=JӏX>-ב&h/qs}ܜ/6iz]2C)p|[6OQ6U90(O8a[۬+^lf*8%&UNkѓkvBGhVI$fzf%peqQ.Xb1{Mp5̉xx16 &؀ sXI y/ps(q[۽R%&EQg"1=(n̩2?a]nc'ȥ2`: Nh֪!R+&}>d2313:g2%~Vps 'rbLfhr"chC;LASP~p `bl@L 16^p? XԌϴn-y<ϟ碼n˲Xj9hlXpjES7De@U (Uj,؀ F16g7Hf5b2Uh,SgvYheXV_J|I}+^aaw,YD A2q'ϿJ_Ƥ"f?J?S6Zt[ϊtIyLr@?B5#&2 iķзYޙ=Tډ0$] C&+D+%VִY-j"GF;n<3'%rhe)vR#2٤CŔxsK5SLg1h tW|`q[ ߺ/ڶ yɂϟ ws_04f2)cC?9Cģ)5> LymBLgH&؀>1'<9/s; d@U32g&)J=Q=? N 32UܜFW#be]O!&Edp |uF*b`> &6$ aSY3`H&?k某y)܅nN _]JȪ(c)b:Cabqˏ< {ݜʿ.CazQp'_Tq)) c\ Ȅ9SpPυtQl{d>&[g( WBL=a+=nJű9"Cΐsv, 6016 &؀`bl@L I.^\B1zbZ4QtezR@=AL=њ%d16 &ԙݻHt ]9? 26 &Ldbe^@[Lc,龤[xX?>/nOu;'Vw6FwmU0iYݸ΋mLA<]?qY^0Ep˛5 tЅpsM-J7nnć;LJз:e nLi /Y`8`4*\~dtH!w \/f Hat%);{=o ;"L 16 &؀`bl@L ?bsTΜcTn'V&鉹6]SOL' 1ɥ o_3 bP!$7'Ir2I%+&ԙh]vM4jjr#E*薆Ȥ{P$e!,V|·L5AիtE} GDSܵC0%RvS u"|Ă3 a~ϪRQ|7+Nիqd2`-" aO\ұ k/n1vځLZ*) JyQ y?ü\Lb j]蛼{$MB&40d16 &؀`bl@LkbnvZʙc,EfVL5F/š펞nnMyvbl@LPN>xDf,qN>AeLxx(\>k!$&7IM%#-F֡E'J=VrWl?.Su鱗^nӇyӗx(~&7~?n wZS@\VmK{,k294۞rf\НpWY^;Vׅm_GњB1njBu9i)us- 6t%ͬ Rq Nf"j;Tr64McJro%v)| cݔ/rdwsD C3g'wr9ԙ75~bz89'Z?Ӳ, 9խuZ1uID]݈R:NOk%fC^б1 1Da1 LR 3I!} bLx4\ 9؀Fp\!>-X[+1u`1 t SNws 16 &5s}Q~Gl |nn;ߘf_`b2"<79繹$X mh%$*HhCk.!& VABZDL\U'Y&2^VyF`dAzbr\haNJ{m||D65 =L}3er>fj;F%3kٶb"XK6kk`mg6rEjyq`{ e"a@hJ$E m0dpݜh5>%nmYk܃zŀ^RԷfIDATx흽vܸI[ME鼕ם;Q;V]|cUJ'K+` {!A |ac$cuJ@mqd=?&/ZL T?/O㨞6Mlclzxp WJ?-ka9svu K'PZF`kZ>.O~Err~ xCEkԆ^mJ|@~;8N}SY^%1YD?+6I4MNHQ0Uwzoў9qa'v% aO?#3ULƦj"[<>4jax:B,YRCȟc ̒KAIX!y`Cciͻ(fӫId1=w RtQ] XE\.V)H/{c `feXB;Fd(m=emu- azH+,Q'+'Qr3w{`̶ꮩu 虋6WϟlUzr\5E' uvW<-0ћ4444444444L\t&|g# A+*azKv}"gջ OLWɮLN㯗9~Q zbO:ėdsڃiriV&^~|e։ZA77-){go}vH/ẀVZߑ8)_m6:+H A/i ?i ?i ?i ?i ?i ?i ?i ?i ~7MPP'M)>iDGqDvsM7@~@~Ҡ?xHG+/Qi@a@)ޡ=COȿx!E`\.sV?m-ӓ. ?ei~/ ur6;]]N4%ppf3d}hxؚ4ᩥӔs,+eS:x5f5ɛhKxE9&2v]M"sSeq\`Ӕ}]"F|Gs ~ \Ч(_WK~E>űyGd|ç'NJ:}/HcȿX@e"}@e _ zS嵭N7(-2.b+`Dx"oLy;}A5ijY6 wH^?hH@oLۭdPIIIIIIIf/sO;Y/?_;ߗ"ХCϓkJ$2gȟ}i/soub !E,1:5q8) dYI/7l.AbPrX*^{Ƣ_KDQ9>smVCf Ysۍ׏1vzGq]:8S=]]<˕83_^dRg)uF/!3lۍɳ^yARf"BE f ?i ?i K-*OW@j۪޾J?i ?i ?i ?iMӓcq %?^{xY V7rV;5sG# wo1p21-(ӁVMQ{$H^o+[W;݉ |l!]gW2epjr)(bcEtx+˨²QP;o??E6q ~t//*mi ]87 A b;wa=lw^VZ?~\f{X?E6444444X@§Aq{?~c4DoI (pODvfoKI<;%W{~Pƾ_J [uU› ?i3}K~jmϽ8]wDCkghJw0c>◉9ރ62soiZGA11P4ھ>}Eɹ,kvUqmݱ:w9yaֽ %`zq5`-H`0Oߘ-9uqor!"}w??T| ' ' ' ' ' ' ' oI(4n^uXromƣ͙35̪L,Y~EfƟ ?|űK~c+4Ub\?))dQJtԁo1Zʟ-j\h/,+d_Ndv?|Ѻc{1F۽Wmqr+~t^ȯV|˾i*_U\Rx;B;"@Ȫ*ӣP>nnκ6Ets&Aw)2]{nKټݭђ[ᏘүugJg HD6Ƣ9eC>ywY;>(uܢ_->oWΙ>]:y\]=:ƈi^z͒[k,!‡k/?ߟ٣C ׇ{v;?!7dL[.LL'LLr}ҹ2!)"/Dϋ`TuQjw}NF״E|ʆq7 0bkFP`̳lu ']1{\8nljHNyg)-1L!ܻHǴM!nIIIIox%>Safur*@~`gY:Md`I_ʱ@~@~@~|[=Z44c8N:BK7xJIENDB`Dd <  C Ab[85inIDq7vn/85inIDqPNG  IHDR xgAMAIDATxY0 EW,%+C,,}tFt>,7:68a a;ØͿx^;b;_8˾ƱL!3 0ʸaOB!"IZH$IbDO[Is9绷 E$fB$glWI3=t s.yd|\I!Y1TE^vM0/] +JUi+ q q8r zD.czD)vwtJ+c]V|e#t<W3.Dm)iGYPFߖ}jkL0 ؂i&S*LIENDB`Dd V<  C Ab@4:&ڡY7A)A}>vn4:&ڡY7A)A}>PNG  IHDR4J?gAMAIDATxu(a&OLL㓏qƘ P}O-(JB-xT a.RaoKcR}xyyHco`@ؕc0ǼH7[cUZ+kJ)e1-gCe#g3ڵW+$NC<%?W@} Brc_faڴigk2EANյXcJOLBT 8]mNi`f&eTNk 0 ^LZ>B6b*bN%*{hژ̂/>edn.1?nBhu}, NEmt({dd\gj6vu٣gdZkGB-|!X T 9g9bV@>l6d4En9%?9Õmbņmc!4-gEF8Z>`f֤x8= ##H_j߻soU߾P֔oBќs g}I$B!sN6{jKj"gt6]p$leD#sȻRXqyNKdX|/ N N N N N N N N NTTwmg׫/{_m߮j$*v;"s}8wy4Wߧku\s}Ȝ@(@(@(@(@(9q\?Vnڂno=7SY\I̛cgm伹>:̊/㓒R_mZj 51 Z뺮js4/RiTZ<{s w  @lj \tN.JlPIHΙnn1\R>}Vܮ!ot|8ʥR2 -X`"CN^yf0;`H̅ _k)v֙.PѸULs ާUP~h a4W4ȄSjAy{z&O&żۙ>8g YዑDŽMY'3{\QNԿbvΚ."[|b|^˲ỵ8mՊ\.*O7V2=ub9ߙD+^uQۿ9dn@oHj[j٤|=Uq |~'+= M.d=R-P~?ۄӐR:w췁s 'kpDcV =? y{ܥ/}ྼo=>P4ܥgG?Md_9s{7q̝n2RwG/X{f|ȉy̒i}Nute7ۛeL/Ÿ@p|ٷ)F/>ӝ>|ZV Srr ضOJI1[t&K#yނ_G' (sMI˷vKu6b絾Zic|G7ΐSԪTۗW/0bUNl+_+Ӆ/\1D#j%"ULbƼڪ](/IC0N[ã8!-bGۖL=,o?S:vXbv&b `bmdQ[s{7q,]_0Xk@@2:\,3^ѣ1dLlF@ &9~=r@\%=>`n7!Rl3Ќ'IIENDB`.DdZ@;B   S A ? bՅ0XE^MtvnlՅ0XE^MPNG  IHDRZ@ (hgAMA pHYsIDATx=z*>^@bWvs,d e)N{*k)@W2`oGBEiX^Wxya !cmK5QJ !vf뫢)V+b^+عRHJR!-1z6#0 #QfUřmXЭ@`fdЦ5ʘ,", q!2#)Z)TR;l)ld0:bK[)IHEIki (ׁ#Qa/@9GVM!i8I]02oCgTJ}F;9^D82>{BjGM2{f{1LH2 ɂʝPt0ICꬍWXp'P3,U5^ h'M0qp෾sρ]63)}( Aĝy|)TO"zw# _oLbu5n!,BOс] |Ae޲1.'MJ|$[QP)qx<+LӹhM fr8Z?>>ֳC ZWLI1Prs?)$~$(Di^#lbpls/9N + s'oooTT09L@G%8_εMwV1~; v|^>kPq8cһ(DryNǤw Q;L :`#tS+Qu e%09LrwOf*kڴɚjNGt8^؅v4IRÓ5mQё-NKBf'nRv⺮wGTN7~lKּTqp0 TnpÍ,jfn!k +Zo蟸aF >/p05҄MO2[Q^P@a.Dȶ e3FT9k٤{<aT"gwNr7#$E$L$>|mEՂ'W2rد au-vׅ!LZ[bړajdkRٮX\q.>?g[ƾ l/zզSE5>ʩd!~.A<ժ6!7fgKæJQ9kZof0+(`#ځ)`So?E1 ̤lŇ՗>z|vn|Y+L}z 6VVbl-F A  +L DlJD*(G,& D1c?Ա*gใ_{cһg>1TableCompObj hObjectPool [$@$NormalmH <A@<Default Paragraph Font  l,b${g.K4o7  @n( || 6   AB S  ?jL4@1T@G:Times New Roman5Symbol3& :Arial"h66!r0Bert G. WachsmuthBert G. WachsmuthWordDocumentUSummaryInformation()DocumentSummaryInformation81_999802324! Fg>w>Y bjbjWW U==] UUUikkkkkk$ZNnU3"UUUiMiiiU iUiiiii eӺ_ i  jUmHN N!+"+#:$$:$%n/ {g.K4oPNG  IHDR>{b{ gAMA pHYsř IDATx?r6`#lXX)l {[HN ŝ 7)!|xLFN '`q#xxxH=@(M!np(z1_d̓vn{co4YEl*!x|!qk,pUp~MuB#zt|*KUtWmUR5t%?$. Gk.p:?6-qDYٛM54ͥifw ҂8HuJj||!6EtyoVʢAy )U~Cզ7զ_ƪܤt2; ]u4V!j`({Wo-?MSm>?HVDZQ(zb򢁚:4ẑ53a7XE?9JF?=]{[U!|Q!W͜izUUКvC{ili!&v0XV?%L*J{ 9vVBg|N/gЀGJ9k:m @ }|}/S ^d5cO-VJ+ϹG7ɳӶ \r0JTxy{{SˌmSaN=~ !?muGd x~-au` %P̰L_/gYDQr<l> 2 gH` (E.9q[Jig!D:U2Ki9v*Tcn@|f|"r;e/IX\LdzS7B5IHp]ww~-ȁHթ| -~6: &g *bm=t9!` %P@]Xu` s"[3qH=}׿Wnmce8ϯ]~O= oOA JN K.,+;b.P$+zNk$vA;1frmJe>N1-zK"P}㰱uNG<V2'thuPV-Cz-a5Ȑ'z0fEB$ >F851T[dmxr+=H5֧ʈun^uik_Ug[P~j:;2 LK., KX0GKb\mԙ,սGn0bKu Hp K.,dE|rY5X ˊur<nkc+?ړ|?v1Djv\k_,4; m<gJ]Xo62VG<1Vo[gBo,ğ ߩ/P8|%}V9ĵD l2c[$z ])%ޣ̞Y@p:䊔Èׯ<:ع_`^u'UkΝھbZ5NDxjx: ꮑ;\BĞ*Բ]oyh2;Fgn{V9߸(46 _PID_GUIDAN{1A859DE0-26A5-11D3-9359-00609790256F}?|‘ajIENDB`-Dd    c nA JC:\bert\PRG\Java\Swing\Icons\new.gifbG)g-![2 7#]unKZeTˋ;);PNG  IHDR 2>sBITBPLTE*4r~utRNSbKGDorIDATx]  )mJTꈌŢ sq;PO-!t`] w3.tCDlK>_< w^vO(ӿ2u}J3tEXtOFIENDB`GDd,   c vA RC:\bert\PRG\Java\Swing\Icons\windows.gifbY GϹx`m5un-3ijA0)q PNG  IHDRl"PLTE9Z9Z{Z99999999{99ZZZZZZ{{99{{99qD "tRNS qbKGDHIDATx eGQZ?c~~ݱ_(@ZDZ@Kğh{X/$[phJ0MB:=< #*u3\E~"+(+2 :$]z1L{5S}9;1=;=&h-ftEXtOFIENDB`Dd   c pA LC:\bert\PRG\Java\Swing\Icons\xwin.gif b9X4 irvQ.ѯuns72Dt0QPNG  IHDRa~ePLTE!9BZc{} tRNSbKGDH\IDATxQ P bv 3KSrVhSL0LR.c`&Ma}("1ɦ3dkĢA ;otEXtOFIENDB`Dd,  c pALC:\bert\PRG\Java\Swing\Icons\java.gif b-xOgJ5Mɴun:i}7PNG  IHDR|PLTE{tRNS0JbKGDHXIDATxm ! w (QRvr%=0#6D &Vx{PO1{,'o~LtEXtOFIENDB`D DdBm  c ^A:C:\My Documents\capture1.bmpbn HuېmJ unB HuېmPNG  IHDRB*@gAMA IDATx흡ƟRJ  BD ;Е,OV'[x,`t$*E? [J!̌cǎ)ZٯgƯ;?<}y!LLoL&=!^)\.;tBzͯvBzύ2edJ!~<)yssi`c.2 4ߥ Qd1|pBG @QNFDƃ4u,Ȓf!#Z6Ĥ @ʓiIUc=R{5AҌumΠ")jZ2uXL~x4L}ejR滼Ryߢ5j'KT˓BHT}zr-B%U:iy&yRBGеVZ*T7.Ss/%=? +@Ij>߀ x loU'㤉N@gxJ^/ mm0@C0د՗Pʇ%8T>ܭ fvEQ VoxݻfS/zVcEFșb3oi.}sσ^1H%=Nj^^xRt N#uj)ꮢEq15$KgW빲eYV;a?/D!6 v l pTF jZ F݌gVVE9E=͸B!vd1_|e%fzKԔTw֭*j\Z˪E.Y7"ZՂ~F#}uy;혒j"Dp<vHTZEU$ɭ1!YYRfYˆT:USFG@8IWDԡք֒|x`4fs `|(1ҪK=MTDYj?Oձס$U:U]j}mIdG CVTegf2j-a c?5LSe9 0?l-e"KʏhpGZ#f%EH7 nXo'4-Maȴ(DFQ=& k3߅Q˄aZ [ OQ0 )0 Ϸ\W>yձ_wvPAIK3(/IRL+Su`Fgr*(P)F[ӽּjziym"vX[LK ԜOJΖ,˒$-ς:g!nBIْ$ITRIе ޽JzWHH|RB9*)! {!>PIq&&āA}B!`B@]A!BjAίIENDB`G Dd(? <  C Ab +GJBk nn +GJBk PNG  IHDRX=gAMA 1IDATxkr8f* 3+gexgTE%$;u떃!<-"l/y^W5﷈||> Z_۫X<{5ϥЅ$~O$.!0EEAZ{[>0[^rV,ILO2{zB*50<hֻ#}:X2F~ԓyﺫF s]h_ܲ,n/`d`o\^)PCx)mQtm1d[4'' =s/ vcAۯF:'3?: z,84X#VO7vUƤ2`wڏ: Ձ,%iY|*>tM5~o-Ym L&P-ps>^@` b<u8MCH|{Ń$C Ȕ; B8mE/AH2AWD D, wy|#( [W8:k@0PtFZ'$2OY+o(kEehFaL96H 9 򌞥#*uΌC_b'\Z*&=>SH =-cRۃ9ֲ7ODTA+ +xG#)ISr7WqUA| EsخuS*-ZaOsd#-v3EÁiT*:Ch(phX4۽6"  !!!!@}nl;ۄnY崏ia$=J'HX*O\:\<ĕәڕm[Optg{f`j-@:ed8,@ @ B rpb^>nAm}gkf^n#W97u,'ԟǥ@N#A`vx ?| G+O*MzMItE{)ƖFRIdb<.FbxS\3̜9 [Ԕ>ޒh3RD-=d#͉$܏s{iіeiG7|/`ļ4U쿗6Sp;G^[΍uՈ^GKE.>Qu~A/*aE%79JRV͋WCњE.P8P?5)OjOr E E@gOMӄ5A k`ywӴXn6M|ծ tv,j<˯m*Euт]lպa;mF_DGkי lvZ NJYYy!L٘uW4Z[4u;6eYzA5P^=35z4njGpȱw]7L~gS^8@`LwťA-Ӳ,\]\ Cm+.@@@@@@Ƹ;z=LF"suz4MS-.zf$ȃ?6#0b f{67s,'κ 9A֬[ewV g͡wY֍g@`[Ol2VZ'8~;i1QHF K{73hY#Lo7^Ӣ͉~F4R~ OD)՛ tOWRP[R߶e@`W]^Jow`Q{:n%-Oc5NcDuؖL egw`y]Δ0H$]0a{I$@'gƦE!<]Wh_ƘuKoooƘ_nۆM$3nZK&7N~71 pDmi пô`Vt ɼNeeE1@m5J.cL~NQ,jH mdœe٩E `COOO?-񅘄kH=kc`sDcŅ;D[\tz9[9Hsh^Cso>nF?Ɍ\+w_E=n99sdf:=}.nLs_Y"+$ɼNoӟh> ٗrw @HY!8"0uN!)+Xhd'ehG0Nǥ0o'ךxflj4M^˶׸"+$ch'CO)sΥnȹvfēP-F̺ķ~ bA$(S>!N-DwHnjoئu=B2.jq-D-ػB4Az 0=d};fg˄JHumD=` FO&T U9 _^,\Ⱥjޜ`?U ٯPޒ^H=zTz^dt5u T`Tu iZfFj1Kndl7W;֟:^)3j2= qho[lZqVϝ2k^Q(Q=y7|zz=Ϸs>1}<J&7v9|8MS]c}ݾ~7]OKкv-'jD C6`OZQ+ -!j@K6 -!j@K6 -!j@K6 -q<a+'MQϛX߷nPCG~`g3gž -!j@K6HB.|p%+ZbcyrY9@9///Yہ; ֵ%Dmh QZB%Dmh QZB%Dmh QZB%Dmh QZ⸿%\%RBt6Qxf\JshKƿE)MlQ,n}c^ VG#j ڕ3]hW`%Du;q@)kܛcTA8y\(ȈK9(} ; #RN,jYs\@o fJsvJ%;բ|{?i{7%ubݧb|;%9͜1B'Qx);fFB4 Fux=79+Թv`ЬRuE)kSiE lBK,imQ޼jGbc`rWHxz -,ا _D٪-.rV¨ugT/;g 5jg-oW|&W13mfV\se]iU|jQX -lWECחl ,طiZV71ŖI:>54ۍÅjεg}>5j2= qhatuJY_-vY}>N<n7c|\.y~A%՚uۛéQkr6~f?13-};/A!Ack"sKz@=0WVHp]'/[NS6c~?U[7]gt]h2&v6B\x }4 t LEQ;˄uQဴ>yjod}j] @=`c][UI4A[ֵq,_`S&rQG|m5$8:IG1ƞLf s#]"%0b8>[ЫZ61k` 9gܬk@Lc~pI}b-((>/eok7s_h]yƔX&ZgҢBifo.0h^xiִ0}sZwqyd)S$dbv*@y؞Č(žd#W3Pȯ'ю]юC#RcO?!!j琡%]罊9dhNv[%w h64'0h?!AsCH4wQG~*P!l4G/jg87>wOb|^x^pߛ| ̟+#%Эr֨ǒz0/®3b[A}י՝E{Wt"p F = j(\G}Xt#18='LIHLUkD4hDm먐灤pRloqGzň\z52K4z߯z?Qʖef:.0Elhjijloϟ? ϲ%Dmh QZӧu+9ӧAɨ=l>c] Hh wjqk)_anH00n-præq\Έ*n87 bo7N;e/4+8uꛫ}ɜ.zEvK֮4< 2'Yz.w@FMnG\;h*vo8It@c 4qJ8m2.͵vyfW{B2!D5>y1Է5w-|xx:%1Ԩ;?g¬Չ,-Ԥl _¶Nm-кk"^Gj-* ,ϬNl;^|qɄH8 ,k$N-t5 qlZ 9^w3 T-/YIKK|#4ҙwBK-GF씻Gs $F,{{T߲*$A8pFpy>I Մk8A0:oKt_r܇8 ŷ#ts+ܷZ\0&xq|s⥜w$=7ѳÙ/Y̬xQ*̟\Z0iQ0fGHȵΙĞj@D`^7f;~._QyQ|8{D/|)S&݁dՁ (._벚->w[g s_q6vb7x/QZB%Dmh ߲ Mc -ykivu\ݐ+$90z÷"_-Ԁumh QZB%FrZw\ĭhrrvF5ڥG///}ߋJߛEgqn[tΪ6OhC@n׵@ɣ.Y^-:A?\3u2Wɋ@K7w=PG42N}Q :8<Ξ~%Q}!h2&Bאf[fIbcؠa.,jQh݋\g[UhdVc\5c2T?Fzطg">@@?~8OoZ1 a.y1qx!yO,l`5um&/w P(&~ PaE؍}r34Em4| j5$8 =FÍj H _CQ6C ͵m_ C;-E;p,Do?7p3uԘk>N`vsZ9e_ ̱g VʲD;j[Sϋ]?S^S[i=[Ոr[E cb"`O$EE9s9_}m1;*bwJ%t)͈vg$* ϦEWkr(2std Tf&}evO(_쁌5ؔ"qyvۤx w.* LoFJojOV!"s}&߫=Z~BZמ1 f/GJ gỸ&W+jB\?em[nP&l{4F@o;D?캎%N"|bUT@SхpN{u ;[0$rrChܘR %^C̣ڷ&; ^rM*5.(qg,zth2ȴr0M4G iJZ.Rcb"]1/fEp{09Bs 7>Jz*bۯsc"q.?}.<;mج[ vEggEQWJ3McI<=1q"rySbք%ZHz,: A蹑ra)N3v<7rkҖN\C= ~$캢א d]9i`8Fr!<F-TP_P3N q@g3A՘[h"Q3n א`q8;j-%bKߛ @W!J%`א<|1rb.NK,}/lW,0"y EhMh݋_C 2Vs<'nmޜ!QJCokHq!pR,xOr]GC"d8}M`OE0NuU' =LYl5zy퍛㼿Fm_rl*`)jCfV+;7%c޶n;W2RIENDB`Dd 3 <  C Abi;eu|Enn=;eu|PNG  IHDR,ZgAMAIDATxq8-0ȧZ&g`LM EI Epaڢ@lAU.'!hK@RB's)!64p7ݳRvbB1-zã %)H)S$GѣLRx䦏%~n"RZ*fȩ2+ICXo3Ю2ֺ$Σn*¨R4r<mqk]HE]<#Ozj p?AETTmo.&ܜO^\2?mh >&$<+)ޥTR~oh͚ f#UwQ{TL;ʍM/oY.lѺF kRTtʿqؐə]v$@[i3]fm1 ̣qoN.jz܇XK!k"h(_vGbٹg<&I:9JB݄֋ܢKI4$p{ Y-ڶZѢ#W~ \7]-9ou^]uze$QGѱHȬ[%Ly0X8rl(E=Y=l^ _Fpioqrrr#]@eChqz=F|h;hBjц7D2 1?Z&x/~ +&zU9M>F0 ^>>>;2Annn4|Hm)[[▦+=a0mFِ\NwG7y@5x ( ( ( ( ( (ʍr^~1`)4YόMF8_ICF75m{}i܀܀hGOV(fc݄&ۭQ*h)y^sɞZj5?Ju_wm}r#׆1t +GKۺz%7޽3E&^.װ .vh®|nx&XE -ˣ]jUi{; .R uUZP{`mW8yޜiP(K|G݈E`v^19suGL-x ( (ʍy1xa8܀܀܀܀܀H߽LӄpwD`h(7>7(xE5ȣ܀܀܀܀܀(STW)dB5K&TH~V<ȨӚS@,( [Z?Fl+V{w /nESr׺ފ],hYQ- *,AEY6cQ]9x ( ( ( ( ( ( ( ( ( ( (ʍ7#~,^,׸P.*K}5!ԿݹF"e7n&bQn@Qn@Qn@Qn@Qn@QnZe+<J zgXaGJTWQZuk钨[Ҭ>ih4pa!oZ=b>P{2;XG"!J>]DޅE3Y/ o:Y[6޸mF])z&hȕֺ܀܀܀܀ܨ{o1ZI-_Ѷv~-yPPPPP( T*ry?|~>ʍ'!RjAuIENDB`U Dd{k 5  c ^A:C:\My Documents\capture5.bmp b $/."[ ZunS Up0ў D PNG  IHDR{rgAMAIDATx-lIb@ARB "508* *(Yr(\fK%ftag`p&ƞwgf>Vٙw]k3u:U_7s';'1^8O͕vz&*&BĪT/Vg*dոGYXւ#F$k'ڀAM=ޮLSD74ͤ#UT ).[<`S՞6k6OPx)&hJKLi"EޫLŠU$]e˔qįjRm:JOv֢ѫ&@-Aϛj&~w:koL>FQMM"ǯ_ZM4FL㹿hI@ &W ]\] ď?߳q|-%H)h+zel@% W6AuMPS̔*MVt_m`%﬎,JW-2}/p-/*_Mtz^] 5Aj+jYR6^Fx@OiCYU^ZٳA cAL@ &W+ Ą|mz4RSM/9uyxΦ[6s30į &W+0 |̕ŋ }#x7D3qm'V<ؑtM<;? qP*y6g"V :>Đ!V+4$ E&(Iz]Nɦ V&>$7IyT36#`%DYl$"Z͈4bۭRN=5U7Kj x$ФG[n*O5y쐒GhnG+ZhE7\JF UwVXSaX)W YOG|%YCMx@ }"%mbee}i) 0!7mŊa*{xC>)D#z]1Pucv4d tc?= R/7OB^pnoPƞž]؇ऺa[O+(I1VQgLA 6+Eo K=T*uF}vRU"Y I^-GP]e_'$rWWӭh&a<.4@gu;/@6>]3T]~ҏ RtPU,'ӱ\[E!ҍђ'Zm£>-WtdWILdkN찎FGKTSh,٤Z[=Dm{a{{e@b;瞚ҫ.<]V{o-uU'shbA5,l)6ޞb;idy|D};99Y,D#kȠR|q_1~ Ą0 AL`c Ҷw b[ &W+  b"Lu ӫ7Fb]|ħSO*|_d$"_ٍi*Mg)I+&xa6f$;4C, WzA _vNWL ʀcAL@ &W+  b1W4  &W+h1q@Di6 Ff+IENDB` Dd>{jLB  S A? b[ {g.K4o7 onn/ {g.K4oPNG  IHDR>{b{ gAMA pHYsř IDATx?r6`#lXX)l {[HN ŝ 7)!|xLFN '`q#xxxH=@(M!np(z1_d̓vn{co4YEl*!x|!qk,pUp~MuB#zt|*KUtWmUR5t%?$. Gk.p:?6-qDYٛM54ͥifw ҂8HuJj||!6EtyoVʢAy )U~Cզ7զ_ƪܤt2; ]u4V!j`({Wo-?MSm>?HVDZQ(zb򢁚:4ẑ53a7XE?9JF?=]{[U!|Q!W͜izUUКvC{ili!&v0XV?%L*J{ 9vVBg|N/gЀGJ9k:m @ }|}/S ^d5cO-VJ+ϹG7ɳӶ \r0JTxy{{SˌmSaN=~ !?muGd x~-au` %P̰L_/gYDQr<l> 2 gH` (E.9q[Jig!D:U2Ki9v*Tcn@|f|"r;e/IX\LdzS7B5IHp]ww~-ȁHթ| -~6: &g *bm=t9!` %P@]Xu` s"[3qH=}׿Wnmce8ϯ]~O= oOA JN K.,+;b.P$+zNk$vA;1frmJe>N1-zK"P}㰱uNG<V2'thuPV-Cz-a5Ȑ'z0fEB$ >F851T[dmxr+=H5֧ʈun^uik_Ug[P~j:;2 LK., KX0GKb\mԙ,սGn0bKu Hp K.,dE|rY5X ˊur<nkc+?ړ|?v1Djv\k_,4; m<gJ]Xo62VG<1Vo[gBo,ğ ߩ/P8|%}V9ĵD l2c[$z ])%ޣ̞Y@p:䊔Èׯ<:ع_`^u'UkΝھbZ5NDxjx: ꮑ;\BĞ*Բ]oyh2;Fgn{V9߸(46,kq, 3Rt o_}wz]gS3"2 HxجHXƶWD z3Ô&DQ)r݁@сöJ6A.5 "=74Z$A}7dRgw|ݝs !}ƶzތn zj (j (>>̛Qw}sC'fhgD-!r.Pz7K xGۉXp!+n+ [mb7xlkG] /IqHtUfs|kR]D﵍Lam]F\ I-=' ^oH׌[w+2н*f dIu7 a;l5`)U7HmzV'\d9O(8RxxFmq[L[Wzk qوqp8,lS=wBIq@ &!wq}N,lMORgH+7,I/E 3Ʊ n (j (8SY+KĊmOZx_  -{(ƜHX%w+^bƑxLFujAD /KA"Ea~ʝ;@0Q~j (j ]0@/)j (j (Ȳ;*XvGF i0 @灈ڶn2|GqIENDB`~DdA C  c ^A:C:\My Documents\capture7.bmpb =J!un| =JPNG  IHDRNgAMA"IDATx흯8ƵWYpSua! $,lÆME٪;1Ym˲eԖ#ԊNE i vSLL]Bi  Ꮹ; AGX-OxOumm*qkŦB[K%B!*LM.T2զ/=Z:15W:3OWf]Sj)bj0q6We̔w*Ek %7CUOt]`@O{CIvM(6TYljojo 3Dq/Kh86u+^yJ !g9gzqDA BVs Hxu53S8%wbP `&^boe$pw]Ԗ!dT:;(jjsr+@r=uTS&^mY)t3=+9H*}d9?6TZ&!\ BipN-}}9i{9\S!͢<9F#~-N`{S@iyCt'xՠGciy_%?fRK'7|個ma^jpŗXwjvus:U?$N'=4w4jwt%bz@@ 5jP 7QwYx8|-B_Q8=\$p0y A_ss"DW}, gU]Cw*v_!g D߈ᮽ4Q#+Q~9*97\~k뀯I!,=0~9U Vn[Xk =jFiƤk#cfy:{n+՘m:Tzka`Qg1!]s ĆTALY^#ǐ_NDV72;C9KƑOˏ #,)6_FKW$ΰƶ|ٵzPo_=)#hOgïnvjP @ ,٨!/QN ML P zn @ՓXIENDB`e Dd <  C Ab Ch!l%^ _nn Ch!l%^PNG  IHDR. &gAMA OIDATx=8FŜ+mh+zv-1) ^NH")"rݾ9?eܷqO4ugnF ŧau&u97M?'PHB!꾴8 ג뺩dlw]̹|֤nqrWrIV~K5)uO uNS J]9wr6^@]Ԩs˸a.ĥDǃbXcְ/H$Ů>]7,'4 { CRIGKv:A]7Luރ]Ԓ̅!'92_fnmfQjiܽ놮ah6˗r#{uٹrn/[Oyc@!^.^XjhC`WTe^a ]M6vXEEoY: &_K4.NI{^Qr~ r7%FQ卙snG''b^}(UYWo2^q^oV? $wbC+o~K.{ů  zURLZƃ?7pRܾ=kʄ0R0R0R0"A<} g N^+קʫ/%H=vF+: 'snkݡz yGJKH eqO;qTVMyn^q>\/|G a`=V`???|e\&s,jK3y̗q!~ f%W.P?m`xj{z}|ygO쯶${ j>­=Ys9͝?&lRm+ '\W`Þm¤ \{EXɥ3ڬ!LҶU飣K8r8_N߿ュӧWL&qסˈpכ›୰ 67..qauo0}~~YnT_k )OLn8>ȫƬZ+0K%is| )u6 Oi LoRd[VKQZUW| b.QŹY- LHj8*8mؘ8MӲ[#$ۮt*/'N9>{ͧ3MEm7S"žaXV{Wm\6X`Ѽ-Ȫ 8_ ۧd bU/K+v{lu!R4̚@~&كQ5<'HjSჃSE-Y:r]D6@-xSWU }_.RNޯI;c .!jm'3YI\t"G.H'_f #2,Džݕ\#:0]].P?r%kJD)G:uY8|`5B}QrdLjj 5m)hx-Rk`)! BLآarṢr)dnJ󏷪uE/+S*~MXW.1.!7]:9ɴ"wѫ,P]]q\jV>$J%$R֝+|9ļ+A6fa )D$+ 15)bj05/ Ɏ+V_<$* $NBs!I:c $Mv$rRS ^0R0R0R0R0R0R0A{?h'!xqhsHHG=6LLLLLLBu]M;5AZ/74ٹDHHHHHHHq8QIڹUv-+zz/? v¹+ tN?']}x9]I2YY+3O0x. ^qfW%KӶ ]hSEfi9 uuXV$fn;04v-mMXG|uoٹ_/rP RDjMA?zX)))))/3.U lT\N)^\N{E E E Et2T7:;J?IƋPmEI)ГܵcŎW`VO)X90D\7)~o "Iqq)f @H@H@H@R}'G´Xٜ51 #mW{n[O^+F>p9:Kqw?) %9<3#e#-[KY`Y/%,uzg{JLErq?_us˸niE{Fb-MOC՚c^j(pBg2Q7mӑBU ]®,\\qu̾Bɖunѱ\CMЗގʌVf,x<0VTTTTTTTTTpz=]m,RƘ#/<\nT)cOAg;sRv\sr ) yA<3*@*jN6eǸSQctPNW(x;dИD!2mmb#\tF# FK5ضۣ[0=融BTWw9"nA-8<I01Z$[M]$SxuMq&z%%Ta/uX+d}_{Ԧh U|H"]D{UE 2뎪`vP ^-D8Au)G,c,zp7{˟7өX[IyljU[^svbj gPSh_4AuVyMU([??ύq\+S1w{ܠo^%.a]P6rC'Gy0`;=~ƲE8kV!Ew3lߏE?I+-'{E^~5 )ny"@o'QHanٱT'N(e$W Ë݆P0&t d(4 um0v{{{3qnԞwCj~In%e*0qx꜇^ҦGfR~Ai%O4Dz&Z :2{ Ǚ[_M\0*ZY;MTSٲB ͝E3WxJ" " " " " " " " ƖbС!zFfTvS+Ȳ2SnqK{>I,+Lbѓ=6$ ۊ52nXgiZOn֘گ86$aMn᱗">^ EL՟2Q86$qx|?̞C(iOB \T!i/$ I۸}Z/1;KDosgUbphC+fbԋt`} iME ϋ6 tGwixm4c<&iR1aᜤpHvXPX$A^KFH]HbkgnRUDl8)U[mD.\T7 IlP]fP5<8B{AYR<C[RC{g|)0A*@*@*@*[U4\䒵9}BKC;Y] p2W4nr϶-6*^K(d^w!W5ֺm&kcx"9F K"-^~rmaoB>b*3'L鰤r i[PC6p C4^1JKvP[2wIȰKzV{Z,`\ey&\lªFe{Ulr.S(7 Ua^=nqЌ4?G$vU*],?*?ڂm3],O;~rb!8$$C<)$ZR,Ȉmd^@ػ һq9g̠F RJM.ĽDx=t=򊩱|x<.!!7-;7\H%ԺG/e8w{<$$qj(Œk] 3c%eUsh~{ns~O~ɦf AY8QKjR,{KXc)&F٨ IL )wPLp۸oYAH$'\"\ȡ3UsH_ow-CogX:  E E E E E Eğ+>~{l8)Ϸ;y|΁" " " " " " X:-Pis?ᕾ&H}R6;-tPTTTTTTTwqK eQGrh |=uvµ%#巾lg-㨫 {WS`„ xt&|RŘ" }[Rwן0a£qxسq ~u8~nIl'o}^Qc#yN=3CQsw2rJ>H&]y{ځ9r/ c.rgoGQP=U*NrGA:QNOOOOOa& 'y~F9]C5Ʊ-ރCG1&~ >4 v0si=z!isO<;O̜H gzDֺ s6+g_yP[ 0(9ۻq+98vM莘CMCކǻ09 8sށ#ځD}h=_8K}aW~.C,dvC.r[w;Z'shb I(Y;{v<7㝹;pН޳ w6 B=<1L03 !CĜ'|4Qc9nO?~ ' &Lx߸AWӛ&L9j&Lߨ갹+k_|241 ~'rx2g:W,C"Zq)&w"_7_r gpy?8y(nvAgLz7_Ov͠!!3OoTvtUIH@;evUr$I#@q73l"j||,I Qѳ+q}_k+Xd{kJ{^ e$y65gcmo ҇儞?>N`Ĕ\./{+~zcő J[n96TO awTf$HFJ־o psglPf  `#7"EJT6˦Zv*T74vT]opp(a{8ڭN@ekSGDI[}=oN'}dnXU]KJFH+70Sqhf!(PrRlתuJOR%Ϯє7Z0! Ͼx8YnLv HAOnfŲNx1K.Eha's";)pZ Y:2IA Teusp$Nefuss 6RxؕGD>? q/BsSSVBjQu X{j! fxń01j|f%DN]u - 3Pͷ(l)'8X`V2$Kֻ G>R(@|yd!lRUfb)IJA}`vA0̖V[3G VEL)bsnrVXi 1"(sn.pC6`tD/A' (OX}?)YPnnY!Me LQpOgUg `< 1ݩ\%;H+x ;!ԂL|TSl i1?Y4^y (0wxoIBJ&DHb$x͛n}B^jN2EJL()J; GkPyRo)8S#(BnI- Qq dC6wcVv=Ł@a(J(@qώܧysd/wo3P3kxvyŋ/s'rC6nѪ<[wNзzPf<Zeo]xnw#w*XWHFI ЌKu`ڂ-\F p8JonyԹ9y$$dXgsb@?h1HFȭ/@qFifxsI,P[]TՊיHm1znrv쓦.cΎxT`)-T1kJlڧU]rkkl!5ñߪV+&}x\MS % vySyBxa ٮuR(Fzpaz]ЖJ[z>r-v?y=tH)[]Vѽ[_#/-$8R]3s:&4jŤʁxhg۔׫bp2:;` Jύz#5vs/&! M:uNo%5!X>3GA1;  b)ܼŋׯ_WL< g77&h4`4KJH#VϝTMFJ{KT>I w^նm|1_|jt Y@q_b?\uG6H6vսn 7箣.~$rMǡ2FUsk7 Ǻ-4 P^[da$ŷAJsf$ "T-EP`LUyv+thYUu~2﮻EJubX\^]!|17W?]yAuT "/x\,Vkbfn6@RR/ե"`].__W? pFD7 "ń*IHnH<&zt0B(7ogyzF"bX ZԲ!H+$ 8#S5"SJKx1srF +ߞ$Q\M Q옧$(,{3j $FfR`u<18#DI,ggdn4f=oNjnY6b˔wd3̳FB>/-wZY/.~V őS;#J1_ <;FFBN^ St;;:^QPUb}ôMPd@Momx<^Wr$}߻tn>l7ۮT,W6jٳ֓2XJM-5'?L N̄1N%N 5( E7ä/ ׺al<264%pbM: P3:>HD!3pZsuC0XX3OB l9!C,"ׯ_ ]?tۛf;C@}O  q,f֌@e#i_mʑZdC߮[)-DE{6rApҞs=݂@ d[b\|\ P%'Ku}EC X/AT^@ch˕R2@_d@qJDc;ݧ;JWLb3+1d}u\hmm6I]_E* bL>\wo`c-CDtP8DwOmEXPmu7ntWg/L 47{"^P;% ezKX/EMt۷o/ʃx H/|҂

    uV-5(!Y.{2S+0-g|H .00olw얁ίhX!tP,MÎ2σdG8@lp#Dge|lͲ}NL6^M%{C4^4;槷ڳs>e ^%ͦhЭ/..//U5ԕÝYӳB]V39Z7]b3-+ 5T8>x|yqԮ鱔S#首J݁R۠9(p)J# ^8z?3-&[QzguJP #q-A_q:j2nq WMq#s>iV <!/o/][m:J 3$[!$Ldvl~lnnlg m{٩I88`؅jj#k`CDz`;NS|*;G@m=c1RγFD\O=R `XyzVj#K_Pȳ{{FĺC2;}ԄO~~ {vΧ̧Y,~?_^^9/ ԰017ME2#a-[?P !s,DWW]yyyڲRڶ=ssUBVQk `JL14ZbGpbY>OduipKBPQվgTMCKFkx^3l*(Qg9YUc1-,;^a}}uuE :}yB `P&KC<Yz#(߼r}3,{zl6жN~vvW39Ȅ\uvD\LN9L?sG F3"8H bZcf89D qCL13!}BG(MH,Qi1y0 [u@vpb)]U7"-A#ᇒTW"'/۶] K·@! F4I%>:h.,?/]3\.~ٙR9b0c޾h rfP̆C7PLPUi@z MGۮSUnF((Xj04kLCI:JA+ $ vS> LDkd"*0K 7ٙ6Di(= {;(Q53Ūn&?b+$|>ל?c>WǴӗmZ qbc:cu9H5 ܀ĉ1z rIjlPE; PLUu0p#@;v@Ukt08g{@ BDdVǎW 7ݳU8.;t+OYe F\xM 83 }V1Xx[w6kgoc9iDUfI7"ɎHg 7Ís"ۑh]ڠ{ -'(`0/Lw=ΩSK$,s~xPh~=GSF1}=D9ό2Պi']?~RS"Tnwy;#fԅb9kY+я@kիfE%GƵ p3m75wPpBOة POKizRv/Z.c_t5&nzׯ1wĞ̯K^LKLO鐳F81J `'pqHt)ߦgfx=j"nrgP`f ;=tjJ{v%i"_Z=]^_ mnqve>Rc 3s.z;ҩˮ:ǎZ<ϻ0 IDAT߾g OL^x)JSˆںDJրH l(9I=9לƒe!ZERԫUE+!g BX5Tו'}}YhU'2 ^kejon'g{K[Η_B)AL)[QcLs($veij0PFy] O[}^4Sֆ{?3[9mc ӌZ-tߋz u2w1MP=Ir( ##jjfה3_@5.^bZW5qpzγgט{5\|[̭Qa6Ȝ/,膉=E}ؒ;>3s}J E TE(iaź11gư;S)Z X >oڊzE{5ic2<;+]ZZpZB6ׯ ;yg8U_cy ꘭UՒc 0e 0\ ZN.GCSI1c-ꙵܺz+Xx洵ա/IKس/} W_VuhJƜ?p\L|f -`0tr6" ̤Fa[/<0fM@j8Md<>t-%FZl0tna1TjFQDOO[N)si"1kiYVv2g҆wK9@mK eiiiwZ'k<j&ņ@^ `$"LV'SR\ρXV]gHբ4)f#D:1M>94j#}qK`bU ( vnpnGq@$\ ڈU?v2[YVlO5r8NJq"%>=)gWe b0<զB 7b*{d+epOE.⹚V=̌ˣ^֞{O^ט LK&3VUr3N42 e|3m>$$Pt%aN %@c F/g-J1HU +YK\PfbQFh:A(?c+62}3b-ivU*xVR+".~ sULo]}{5z"k1hU$jv(Q>*I{[d`Ç?fw۠ WDوсDيa nM, "LZMC1FT AiuLB׮FJא`{5r3ФV8eM"w|>B B*4Uw ^ͅHh=?$_4^խL8][rdbxwkP)>2sQԿfw55|x[6N"("%c`$@0""(s ]JoL6NHMLhzKjisbj4Vb0nxoze>b崙h??VhRkš-M¥f}r~i\̌@g:44ގ `26lCnـ qeBNZ`Uz}9\kz<S3{}բ4nrc]|xm|j94'Ya<nvEd%Ed = ZIdFhbwaqit*/ ]ê*FhCEdjPAbnyuL*6gB n_3ha` R?{W7c/THEvG٬/nv&:*2R)"_ b>c#" ..%rM"l5_wlSoSkm_I'™Q[ ŪV_ -9Ċ,\MxMT5St+?ctoE e"Z1GuOܚ<vg0\kEˇG|ţ\F ~^Y}J^LO|Pʿ$B_&D;17 ӝ34HgGsvsA8 o:0dj:US0 gR_@K9j` %FEi0Lw FdWu n-s6!,lR)>Ef2Zۀ $'TkX$Kd(]QƜ 矽ɯz ;]?9 way7FDۊgY @0 ]7]Hb434S}6 ˓j^.u/1,1`LRߠ\kg! 5=MtFcŝNsKy鶾+B1a4! ӄِڛn?H+ Bie[Ydž(L|6iH'}PZ2ᎦiBbFVXPfb\+=@nkW1]q).|RG /7ma&Wi)>%8mp*R^g4+dlq̯@~L1ߙUޱBQe%8QV(0-̜fc+Ǜ8m#FC @JiJ,Om}vTWFY:?:=`ABGc{M djDYV&K%&1D.gK.7ɸWqXg-E/qJhI'aȊqbʍW@_1csE3LǜdLU@93 3 J2wO7k"qTU77XD~ׁIGTE$LͧiBLa?cfͧkiXD۵u щ,tf2sO7"Gp2 DLDH-Kuɚn:-[=rK{U[rpעI Mkixt:K_v|GCL#j]';omvow\u:g J^%UӣsCzt&\g0lŤ!JôϦJpQ;i r+k'Gޣɛ+?zl͞#;][[L)TLV́ ̠ZEx>+|U-SV :R^R6xarv~O/bwlėzеva bin׃Hg9z !88Ǚ 9SdI#(3]u2=C(}_]6ca8o:-M\|(,T/Vmܙf_ᒸ"Z)3EE,Iru6,y*#Egbabң2qtFQD2W]퇞08xt S۶E2O,ހ2Q#˔$F&NV$ͧq]Fzpu4_~E'u׃Z&pm-^Ky]޹ʘY^pW5+1tIDms-0^*ț73_Vʯx XK^l=>_Ȼr~U*%6H'!ðfkݘD?t]/Ħj@ǧI!f9h`0 >bCVK"f ^P|TMuw[{Rw2j@=5.yR c0liO93ƀeZ>RoQ^OZo0Ӓvznӳ[hy]6wwIкZqSuwFHY@T# =UgnF g,I#m_) Y(1(23KmYq5E&߯,jpw{%=Ϥ^ʋ)fB܋Y@t Ŏ[mgXI.Fh_&x_VFĘMպ+L~J )h3ˮc|R$bekNzܷ%gyH`ؗaiF"6#~31% #! ]3qLl|9oq(S^(8JuT+V'2}{gy`1GImy?r~m WzaϷ|qo)CgǑD:ʄE@L(>?1a@IfagP9(JG̍3;a"Ћ4qf&έmJ}SL }@-AnĉOQ!pdGAsCH^QZP}೅o~ʅ "-k.*/V\raKؔRyT|}ϟ~kv/KL'$C+٥!,"m~opI]Vs"Q̽. v"]*)i, Ï7G7F/ooitO8s$[Q7*D"t=;__{ц6{ћ,FD"TElDn?Q:E ՗]nPdآM'~X?<2d36l);kVNQ6O _xj4{\dޞ<ϱݓ;Ls%TR_yG%Ou80yȴi] Ιu] #Ʋp%C\,nS^Y Yݿ6M7\ -ot3ᰐ-t;=YyM?fa-sn8Ʊ9;)^2?;R;aO=,gJ$ M 7 0KT9 M}~0&fkka IDAT۾#$PN2؉'X",GsSWSAO^募^tYrL,%; &//wO"r;ˀT/y;ߘLgu:o||T\1`h7et~Hn^2]f*M . iYIԬYUI=\TO)ً.-gdM#$͞ T@tcr:٣  Ww}ڎyVܗsku'p~1݇+imn[b٩s$edZҹG87u̒3aXe\GSU4˂Q` j۶Y Kwi2ݹX|b:LAƁS,>Tt680M p99 `=cޥwKI}Z=]okOVjT"[2@.WPUui 5}yg]Y΍;c*%q2zj f^TLI+UՌ"*@5W[fҋv1$*a &$ber & B+ h]gPRW|ԞB^Iys~@ @*0A4׎2h, JECz -5egOj{2DLdvЭ"0d!:_."svl/m_d;0@@ o{]r#pyΛ>5|2Mv&9O۽I|2X9@ zp17zNpK$+D=gU,;!H"LVfYRbUOjv,A<$Ju¢jV/$?nʌZw>jjْIS-GvɐTHHQCR n OY-F02K<Ӆ̲N8sI[bJJ s+jCEus SQ#jT);4n8d"ш8ML:ǟx*tã&!$o 6}΢m۾j~u[m!FP%RƦ0 ;CdPuK5nUUua;Œ۞"x}n'W*PE̜'ZrVC`hP64ֵbYNxv;(1sX>$5Ŕ{$҃{y(';%YitvtL/:7o67",ZHI\Z#ԇu-,vцufQ+R0uvmn,'6 f\w&,&B(2GXV[վ 1vZ6(o{ar8OpLgF˚m.ο=SfNv |P=~/]~= m/~jbANQZ4`zw7vR՗?W~'"hZ]C"4z}Zެ9,5eb(2r<8*Ɏ %r~ondBfP%LBf7n~ׇT9q44MyQQ _hf j˟^7on+"ɓ<&Ie%{;}'Cj-ߪfU]gK,qꢝrU׋i D܉ԜFӝqD]7 Vi6wv;P^U$)vv#vR==5j2F&,pdnRfъp䪑JnTMuP7ӀOB`IEDtnP v:#Uspd@\BS!AREܙXj^YXttaL:L7}̴>]3sj>7Ǽ>f{tPy>oϔSLJe'p~Yr5%i3I+YַoުRHN@2MGsYm|*%aZe$w9b͢n[dY߲o#0DQRۙT Á4)(P{6Cw^M0"Gʓ grR<>l Ώz>.ݤ-V$dOߴ k,{mVm(p[O暁W }G,EUѝZN9gMکT/ UL,IL pȕVrUct͒"LefO.wCd:UK<[V)3% , PG|jj4iEJoO ,=oDYi0 f͢A@w]ױ!D2C,-]S/f}{VO;}_wO [M`L @UCV 2` ~ooo]H !>0C) *OYĥd%7AU^K-ZiE\^ª|4{\8+X<f|Pρ(e)Rs|B1STb9hj9z43sCNY{|w Tn5Ψi]2鯟߿KQx)YAڶH:~:jmFqg=K A{t&4{D5Ӵ8= m c$i2ـ:7e8[/6Mrp"c{PDHC{TFx>QY>S=F)4ֿ=v@Q TYS)7zۚbDl7mJ#^(ן77O׫z% >-nI~#eUW MIa+zF@&0()$VQd)jHĎ8qWUi:wlhE{s댩h"Ct>\ch )rν'pWluu4M8KHck[u]Ym Hd)go귎ȍzmT\,D`-˪YVt8ec0.3K}N@|P.Sm:.}IQQi4B-3i$9 4Rbf(P9#" $pUtsKX+u<"ԢಮI-ɢ*)Xj9kUs~jnTn@SZdm2SK֩ulTAs#;)%b9 ?I63f8\8`5ꤪgߜRlzs-$G#`4~*Oj)-Q$NoZX[ej~{1Fԧl@ N}:'R*Djɍ1fj W/7x=>3T_-^ӶFLK^WUW@DDDdkf0 ">_ؒsq5V 2 VT zAcn_tJh)$TUc>D}\+(/.inCys~Y,YX `lAL^P)LL,"޴1FąU3]t.*.SA a"i"4$Fƴ g0TRl6m+tZs,*33~pJo} _}ί`)ڃ$7 Bt~ujoQ\JTYpxԑ ܔ19$&KAfmL=pSj' .hÂ00(,-VB2$D 톅™єF뒹rRߖz!Ps^c1#]Y.~sIϐC w; 53ncrn||yv!& d9hn$5W=:.]NWR0њx8xGJZ Ѓp~Sp-ƱnN<հW$U<x{LR6mԛo7L"қmU; 9`|!eZ9qG͜AskZvj==d)oV:NLS8@?*jf{pJ[Q~!=4d<꧐9I)lK 3<6陕'294 pW4Znkwbt6tY44Nm804Ր{=ڷO1CYS=={dcDMWi)Lss鈀 삦C`Fls8+S 0YB X ~c]!Z?4C*=E@@hpDNVtn*ە3*?I3, @A䦜wgHA;VUzwx ySxXT{F@Yu,6۸YۛY ·3M>Uh0.lɳ髣Cyuӹr:',Ƞ>}$Ce,*/@!4J`NiUv; H!0GIp:3?-؏6U⣏m6Qd 8H6\~Ctyo7E%6J6\ilk{tPPgDz9'cȠ<#o@:jvhB.gza>[GɖK@fOo=>_}zek7(٫:|Rlw1T-_ޡc}2;p` q;(10zйH\49ҩ@a6 ?w #gzL t8bme\V| aQxc]MsެLVt SUڍ8Y>d'oɱ")͟t'3(#r2XοIGqT:Q <q\jIDg܁fighoJysqh/r53FZx)RΛIG- );3Ύ9˜ZT 4T=+C5}KnnH8{CF2nw C |_u'h7몮7T_޿6o*Ze윞I /dzpaĦs7"4)wJ0Ss:@ZEE҈44*tIDAT\%='@jځӒѱ8G~/4U=}܎HPMJ*(!TiO/F-;d)'+:d ;R[2 ^gyR#fY 3Y@_՜彧wpT1Z~:Lt.4o [i# Ę+H* AEtЉH␏(V:'Nڸ"rJq1pۇa'~q&ffm6bSW sML@Md:~'Ahaj*-Jfl:I +ZOFяo^n1lj<"O9bik+ZA͝@` lF}^TU)9*?yImTE5-Zh`mmxZ¤#-Ⱦ*POU~Tgqj =AYgFKOf}A+z1Y%UR[HZM훙APl:o)'{UOg훚3,y{OL͂,Q-f~*>efd0e]~wm#ZKXv47} >d*BK?l"M%5rX6vPq iW9!ĺy(B#_l&T\39WgkEMٙ-UU~}~#{`0E ;sJoݙF;3Xhf { 𣊰]mLFPb?qZ:Ɂb...־~{{-GΕOc7R&%N86/~z?S,MQn@B*$HhѰOS 4J֒/~#1|MZmCYtp89l%}~KGY6b#,6eN̄ &k"vR9#LPcH-@2vĐX"?AV[ZnQ&^ +EP釻4BKyzJACWяcSd@ |Jq Ej* O ;y@5Y-׵t:usLa0nR½綟G-k-k?zy( ۥRv:U`uMK drՀΘhE4(U+FBDg,$V< gVc9q#g* JBA !'U v/z$vm%A D5ΑsNeQdv?!fU*q/ӷocm {C璼mFEsQȘ{`Fw?}n~6*]ccPh5eѼ/ܹ` 7鳤(9KMH#M01e+o'~YdT 5/2o ֪3od.3K\7my&|U /s3c<߿H ~[y>pߏonǗ/ُ/1z5FS3k_ծdnnN5?qG\q1>їr|X*Maf/Ic'qG(_^yܓ@gߔi.9>:#2OO~b<"#Irܫc#g?ه~C&;Mk{>帇GdOu}.<> WWW޽ӿ=:  ߻~;~q +lv|yq{vqSw~ӳ ˁ~vs{ss{$1TableCompObj #hObjectPoolw>w>WordDocument"$m [$@$NormalmH <A@<Default Paragraph Font  l,b$ʤaQk$ySqa @n(  6   AB S  ?" 4@&@G:Times New Roman5Symbol3& :Arial"h9Ɔ9!r0Bert G. WachsmuthBert G. WachsmuthdDocWord.Picture.89q @%1h OrgPlus.4 OrgPlus.4OrgPlusWOPX.49qUOCF i(c) Copyright 1992 Banner Blue Software Incorporated. All rights reserved. The OPX file format is the confidential and proprietary property of Banner Blue. Banner Blue requirY bjbjWW m==] UUUikkkkkk$ZNnU3"UUUiMiiiU iUiiiii G_ i  jUmHN N!O"O#!$!%niaʤaQk$ySPNG  IHDRX!l{gAMA pHYs0p IDATx]=wǒt#B$*3FkEmꍞ^$ӿ`2enF2zH`d;"&*BwTtc0 G YnU=z_oHzep|| G_УG/~Av4."ܗ{=zxT@hm~a]ѣ 0nm,wJ9]D|Уm6mb.2=CoܳGσϟo;)j\P4NAkin샶=zlWHd}:n߃۟9~~84b~ݏ?d ʡVu X=6Yoxn?b(ԣBǝ ܏ -7 A7nmï !CwbnN?ie0;ԡPwFk{ ;Bu*)l?}M~i2{<@@#܌DN] Ʌ}z<4tu^pv[komK +Qsx}D:nMDM (=t#wx+К6q7lg= ؙ ؈uWh ۸mưS, ۶oN ܪϛ;{J;|hc/AJb!ָ`FeIwzO>guC#X\x=z:y Da~W=zW2yKVWjsTǜɅ˿}쩼NDx),Ρjj2|/ɯ͒x4rq Ae6R "$L9h"@s9r0ٳx *6{?&8<Yz$ 5lt 285/k#[e[ & ͒#6gմSaFD <\AEe@ytѿ K OcdtZ^eNf$묙6CO5OUo5fɵ[8|OFs@)GOt!3wfFd@UU,#^đL90EpdatkD U"ՓUZި6 q*ODun*"k־b%#77}8@hBUU;[R7G x2RAV&蠊|PM|gGX,075&Ҭ p}UP&aUw tjNBM\ͬ&ZʐxEnFh@F KSU52`sсH$]q-E8U;Pu 3Eb"$Ȇ467@,@"EDذ,O@d D@G€[-^8D<<<"`O?̀р%<kMKO4fWd{*yuPiLK\qp>, oVx(}3Nuyg7Ud#8HMT.˰\ $aaT#>\ۏ[~DxY)+,;)I /г Yr3yMyU#,pՙzf&H)6y9ԯ;ڵ GA] m(DH`kJ[HUT%eQIّ!Zw84#T/c̳Ww[K!͒#9xX< gG =I$ U'ˀG65U8݋U }9AUU8"Q@q[(@Y4*J-AB+Zd7APQ0!1-f@<4<"(0R9U%+&&S$NfB u1SN ~tzهΚ3$=A bDg9@2d:d5l\ܜeqDA68[7q"\i}I;aED5GCLyrsCf2Q249!a:%Hʔ-f_`g\dHiU0+emhg=-=~PjZfB(S4ݜyb#@ةkd`HnaXBbp Kۖ`ǻ_gGCP5LLJӢ`%Upv5Eͮf FGC]^vUS/ço~6i!ꕁ`|Y8 T N"5gbbZVIR!ŏo|oX@ \A((nQ6H(qq9(Da@frxl4IF ֬ P6:6{|m5.pxAVh#9 G h$lɚMO\EDB|UCN&_g̒\GQwwO"+uHD螫_lwHN..9;;{7{? WL :S9 y$&@<802#Ldb"-&RY)g{m#08GȺFhҙ @}0:ήf-9:Qfy'ofv5k`%|ߝx<?FÃ`$Oi/% Hf]N&痿^N"mP$K^dwq\I/=d4-d/ǖbv4~a6aaE{,%AӃ,BgF3%[9ק_kz<^KCaBfw@y?L OTA`wd! kD6;=VZ1Ug/0#@!A,"ӧO<y7_tt:{= s2M׽Dd1_ qeUYm'[|5OI{mV\S?q5T]7W]dswzK^P=9 #= j@0wi2!e7Xwz3y0+'Sus/F7Tl(a[Oԇ a:j:d :iO<#e d?~IuTcӓW'/x̖,f_н&dX-mF|ѽfg4ၧ UN']w 呌R::0yJ̀Py Tnn!gRIM@hɨb Qd.!30F80z ?NONN9޶ \eA@5qKw aG`fu-Y?0Xt]GuTӧ"u4ML'/ԚtJ5e"Caiu)8|phjKj*'N0DxHG c@\fV$K͝'P3pt,2&p%&pdƣatp |lB1wnG 2O>o{pG8:qs[ F} ]D ToFPin1ED?/x=?2?~TUD}CMgg]ם>E 1ݤ0zKɸ^}-"XSf@'Xi(DŽԢP[2qv.Vd"Wˊv@7BpƷa7|KםowV~׻5s^\O}Us` XtWKxO\XR-հϳ?꿾-f)Q ް{rVԪxՋ4/|DG5{E7_LgϞ__<~|_glr8U*C˸0,4g޶rd"+<"+A-9,R bzV7N:_m ;,sOF,Tgҩ6G/xfm;v3Xc &L3U嚹" aHQ.CD+on( ^݉ȒQD%E$TItajbrexD#n Gp3P׼5Sw&"g\ͻM'"\3׳(l"~'p5gŋTUCbx~tQ3DHJMR-TG!0k&*hA5% vLuɘjb0*Z_Ltj+nAB95@&67WyCd#@U`:v]eg/UG Ņ}'ṔY:U3kSW嚘LM3RM}̬H z~ɽj0e*M-9 %vF)k򧈝Z5,]>#NXe;Qmp5 5zQ6`5;[la/3Gϟm-2R{ϺP ; ҨçmtzvfK5mJ p,Ay&Ԕ ҭ&aiAb`-襯j†F ɊqrvXK5-w79~ۨnn>.%:;g;q߿Nj>ohes,L!m  `sZ0*\g?͎ON~t:=yujɥm?z$.` C-[2,`U H X@T^ ecXJX } 2VaT/RJӕ1viW8Bnc; \jONNNd_D"5՝^ { mRnj/r#$Xr=OOO^NO)Wh#ձ^U@dp҅D0Ϲ&@1aKy%J !NipG|d2`^ \_k 0'n|0m&LU=T_jnLK:==On "SGbnJl\3ESijv/# X1[D nW}hG0X7kUxĔXbDd'\3M%+Vkp ڄ؄#MɐKp^w ].L,CVh}:=0Hid` BYG7tG#dvC?(Vْ̒w]7J3nZe#"q*U4"LWS8e`*ti͸yÃm0YeӥҢ *27UE2 bʙ*FEˀ  K=ء/UUu%Nэ5?~Y5SXk70ߘ}4U^`Wuƻzº7ץz2Kx-f5RL1"GP춴~;Kե _fO@H","L#&Ts~*!'^`L+j!c48zAɽHշ֏(h˙ltsXqT0ē,Xufsؽk|/b_;'RŅRᐦ){d",#& _|sGn)Q\30 `8P^(keWKĆ?)* huY\U5bp*'\zs3a1߶MC5x24-J<2 #˞pO]=wI`eEЪ%ҬEu흷_\1b%J VUI~q8Z U˱#GFB˴1UVÑgϭP͚(ԬJ+f?:anOb \|%xa-f^T>f D0${KyO6<NV0 ՘ۻ[L/#1P`,oD6hCQdC[WIt66bZe6b^kul>Xy8t6;kcRg jb#^ݫN)za,^PFX j7=FmBSy}L>k.SkO$J$]5p'k)ebEDt*D@e,EKr&КhTr>n*tհNM=]Wg[55Ձ-o-lqT:+@1E8R|Bks[ n 13.-nK 9縍aKs FDVnڬZKَ6kjltjQ `6PڦQD:P("Qx#ԱN $SĬ)NOc)Emcv!`%bmȵMNRM[Qyac~\;q.f{۳xҩf ϼDK t@O7ċWtY\o;B*CB` r L2mR+ŴlD5Suɿj.\ߨ z3K_:'#Nw1zڍUr8S,jr^yۏYW~p5(V0!9fU S6E_Xz4$"("Ij@-8z[mE3?Ba2J V{+-@bT|v̦:&"r18lZjeG'1C:lḚw5@:CȻ!T7DyH gKcYk};zo'~1q7L@D\bj)4Ǒ2~c: V㎮>\al2vr,Lh]4|e\+K\IM )40/}H[9a RUSy"A@8I|ϰɔ Xܱ60ӝ $ .K׏`_X2 ZOi܉HH~l&D_-KPvGQqd5տB1 ec`h_||;އo/ǿ#?C-=A3 I8{( Bsa;Z)Ce*Æ(10SIe# $ItXhC%mH@H8c JY#>)e0ˮɅCϦl=M X߹m3k֭+1YZ t(;5x]JgC~C]sIfmAc5m9'dGq2Ǣ8c" q2Y}ICd23aOw}cFNin% W]>|(eH5֭4 . gI=)ZO{֬*RYCV|WxJ%oP J x# .>q0_R)ۇ"s2MZ( qᮡ@?}Ia HaIۘw&#6*0;ڿߋK?L@0:r&CW Ѭ^U:) u;'54Y@Nvxa]|:ֹr-xY](2Ё6UsL6\~K? ԡY)95Y"9i cO}? ϻw9]p9W5d `ԉ a3J] XF?+=~>L}fkD_NoF-j{=)xT'w܍KVԍ `d9m4pC>MyDE tԙl t^D&dh X 4뻮w="_vCpm{yy)"-KԛmGāelXniJJq0/H77UM[˪Qa"k/j$ܓmo(?S< Ze^IZ\&O$q›/$sV"X*gɩ*¾7+b])c"HH2dv7j&twes4wTaȮ "뻮RI~`n?nd%Rq??m7zސ |ͺKU2,ʬf+?G<ˇ/^Ed7n񾛚c Y7F!#ﺲ 1Gh'_F#%jǕ9fts>xS+#!GU 2 lnƑe] % TTLe2 #0Wvvf& 7)PA%c_Fu- w}u塿ǒ>a8,FzpjŹ̼?t%.LHdF.xMWeK=1zN2}} %׮Ja./no~m[S3YLHHn(wW1Hz_x x ej y DP؛%37\4q{֊P?pd eܠ[2(f2pP9A+z'2[I>DaB10=zv H d ~"yf` K+9~zh lYV~[^R0;GqzR6OxzXeXr"pdFVbݠ;]_Zzj#o9=VSsS v{kttTߛ̲{gW6Yqn6YUaIt,1BO4 &hƑ%x4$}{AE9:rS+=wģ[}|k^Vޠ" jZ  , q#3ݶ]?mnNv^@|CrUUu 37_~yw?kj|} ax@>ND6&綢[ Oɇbjd.9ɓ\Kz5o'NOoOן/%o'Y~d%&AJڦG4"G0wd%7g 3^}`Lov})B$xNKlnꪖ*"ow=w?UPΤͺZc b >J;ӘY\ަ)%/k#npd8m\xѼN+!>j-?rNkN9bߜ"`i: ЕM۶Mׂ;^͘#YhK:A"3 G.Yr& +H5 oZ3mBXL2bai 4-CXhXe~XH 5'>s } uiY,ɀe Gn( mD7 #Ѥ-xŲܸP%%k03ADS758J˛d{vm8tulqp *i7Ҝ5 "3L"TݒR3l XaSd_oJ'' J]e$2-ÓYrJt#5gMQXja;^Juڗr' |,,;@ƖgN|hߓ#Lި"$R'Ut+C 5) URԁ<L}躛М6$t+"u Cߞn>hv{{DzB7c ,P {wJd-#l..w}WRbd+d|E'^2$00vñ`~<fy͏޵rG%/н"FR"PʬXўAvPײ[N7UhgPh*)bA\ezf]qgKNcß~hmw¢P Md씥DGLǦYUL޶-q)"]c AW-ELC2#'p-$saADjVm.}L*ć-%{tf'>a;S,wVxFWSbiFUUҮ۳wU(>zQ80G}A‰/.T6 zZ7 H4냪>l(&y&`2ɢ1YԴ5%Q15+*|.WS8H2A *p wleWl|(^zO9o"/Uw}8BIǙƜ,~DŽ*JdPݨ *sh Fe!qV8h"d,9Z˲b,8cfV%rnȬ212|NFV_fvN( ۫txD#xUsP5zX`, oohJ۷~{u]i j6H@"sJVG7RĪ6unJ( &PfݨO(*4iT73QeP"K jKbm{g5 !衞,1qvݔc9HT -Ô]Q 6l3ֲ=8Ziw;?)&C"w躮@Vݘ@eOaYV 2 BX K3Q0] qi>9Ӎ̠ gL!;klUjOHJ(8Q ܋§χk0ۈ//.U(p/?9=qBuP g{~dޢEDHD",H,\ BiSAUhAM4G+Y 0sb+H aKEw`:gJS*6y}P7Ǎ*8H#!ۉ:qx\Kz)f#ѴoIŁ/8''ЫusԬ_5IH2{8b(xN:`F AH$9Ы>T?DUr0K&d>'G6"˚M(Ocvء,/ӌg|ļQZpD!"!w:f s(g554a 2p=F}* &mlW-c?4 FHvZP]Ǫ窃(F&ێAٮ=Sg5'պZV,,Y(S(FAP+7PL`bb9}̆AU G>F Q D>:%0e Psp#0VP炰EL#( RIh}? C¦$nܳx^n+|Cr:ltԞo^9y}"B@"yCD"rPfWEޝL 8(& % o2 18-SA|nˁ7nubh>9^]8x4+8R"DPJD8ځ,g&mR Z`.i쬼OjYR T{V&UX*jjw-v\drtr:qcgxĢ/7#79c"I&\k0d<`#>n*Oө;k2l)uF j|8Z( ]\/ pQB5Qnm~ DZ ]j3, ބ&\dR+/Gs/ XJQL&FE+lYG0XYx+ ggEfv R_t6@V|-v*$Le?/8NFh3ba>q|ƠBaO&FdxW|^Z*ďoTo[[$C<@1GmHw#Wɤ{j TDWWt%#@ Wi'c$ƾ/=)P B>_m#־*;ZpaVcIn]?ǫw6z77 ]/>5ķ6 G0dGp+&U_4PUfc%nJ^˙4&Z_RЄЀt Hj%R ƂJH'6 q;f&+A{", qU_w=L%Gƶq&\_}CG#M1+ { BTӾɇ\\cL潊}̅J$ZYA%'g٦S1XgUژeٶ]\`8&4ZDoc?L.^N/:h+hy`YX+G0X^#$,j1 O(Y o}O/ΧHC oiDTYch0vc*}& T ),RMVS +YTBC06Z2X9M~#OR:Qof0j53^t2MA|n>}ΝG#gɟ?yP~}C &OV16WEQ@Ur+*[ 6 jO !5 '1М H-D2 2,qٸrΕG`>]o'UH(DZ`9 ~i2LN'ι_%cɻ+kxl/( _@lhӟ6?ߋ6GIkJPj%{ZE5fV/xXdBkۥZ"6G?}9bmkZT9Ϊ^=m~&@/%>塦ߠ~M)3$VmCu_JO##RqT$@qU3W@c.0TLӟ|ȝҷG0d N#Z_NIp}Tj1>)R P@(nR~Ŏֵ9&U8@PrCP JD:k9&w|\.0UTWobɔ(*Iǰ&JHbuޯ|~o p ,o(ȋʝQuO$LE 5}8 uov8^rpo_"ːn~iTRA% w#!;\hW,e[پLJV4C֎\-$ ,QdqDh@1|>וtAh tm }3Oo;ٻ&;wmPWUB[Q HKtGzZ+0Rî VC,hR&NښH™Z-g sIL@I|1{/ZppIU!~F=G>¸unݺ9|&oyQmM-QW]Fs`T#f'MY#Mؾw-J9N)e ; RXd\+rT@"KpIxu]kfBWx^0Z$o7Kj |܁R}ݮT (<&~u%F,KBZ8X^/ZuE$htyyiC6p7c&9Pxo~N̞`# _ph(@#ȭٸFt\" oDG ATG!KrK ɋ\ѴNhyV={h9\ =J0U7-gt}LI9j^Jo&@-S(h<_IYe}hBqQ% _vL,99=  fƯ1/$סCIzյZ@D%q b8ιrὗPquflP Kgr.(7 EF΍oҍ✣m|AĪ@(^?Dʛ^-BzٳME%ҷ量|$ӀN z륿Yd]F G . ֡%!7Li( I!zrtCB`7֞d{&boz ֢M`Eh^UUkZ&D.kcK}IeX^`sD+ϗ$ӺI.ں7,zo!pHV7! &~ޮ{[OqYUӳ+ًgszY/5f`K#| )r@ 2YPᰖY hL71+!5L,HJ* <JX?w‡:&{&%$U^~\\/+) HNep8BA/x3h':T@\9i^/5[^/gŗfbFR `5I,Pk$v X\$]LIt+6¨:;ߢtR*DhAI PIn\1/FJVD,oWZ 9_ CmV#8HhsL[W|uqlbvqq<:47Al8p"67fٯGJ~?|N:{{98mrzxH `n#~bHjc#hwo߼\31ÑΟD#,n!דZ?׃ţЙx8T M .Χ^??&~| aJg x=52>,+G0X>ɂ!R/x:vb~?)dAB [n#|H^9޹8Dg~s~#Զ[U"gdd9f$ ! a:,$"222 Ȃ ##Yddd,qddd|Dd ##য়~.lH>IENDB`SummaryInformation(%DocumentSummaryInformation8_992419113(@%1hkj?kj?Ole      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Oh+'0l   ( 4 @LT\dssBert G. Wachsmuthdert Normal.dothBert G. Wachsmuthd2rtMicrosoft Word 8.0@@w@w ՜.+,D՜.+,@ hp  Seton Hall University1j  Title 6> _PID_GUIDAN{1FF6D342-7394-11D3-9359-00609790256F}=J*[A'grqyf ^Y3r> eY("Bq =P)Kc3Up ϡhe5GQ1"cvoeǾϗ,zJ9OՋ]W8O oʴP)EBO),zJYsyq2L;?f ;RFS"-In;V-E'C>"gR`:o/E8Kb.EBO),zJIRE'Cn]EED;3CD)A'PiZe3)#iST SY("B5P?78OR[3Lk RFΣ[>78C (EG G9 RY("Bq =c> e,zʟ|ǾBP(Nj' dIENDB`8Dd~ <  C Abb8} %G 4>8ƪnn68} %G 4PNG  IHDR/~gAMA IDATx]wH޼0Bd9"7m4rvۋ<|F{5f&hhFD"TElDuA%lѦGW7t||->k?xs~tt9 xrw Khs, "v#"xOW:[F[|7^b[6WK^|2-oxZ O@ϗt_e]펣~[iRL#Ӌ-FgV[}5VJ D9Ƿϛq̀e؋drF5bs%G WѼEiVy-Ϳ-*D HM:5Lc^ + \X֑Wd>rd|lGSN-y^/ ۼYlS ~jco8t7%b[m\x3EdSbP6]w/^`K /x >?c\O^Ï*x٥b֋kh?{'55oźn8Oo =K.f9T-ǷrfXBFǏ2#Wxsčhghn:&ӭ3/^Zh"{;?~<;|"7<-ÏC|wI [ΖҶv~eX{k:Ś]~I'"W V?6LRf.G2Ϟ?ێpCr)W+23>ExPjk?=>QlKf] v/^#+i /l .м45Z;7wϞ?{ei.;TeDiopĪ%mO3F407H( &Nzzx[0-pfB(>p!nӿh X&֧A}Vk]}_{zN\Ր7Ͽ _""p )`ཚt "!&F ypsC3A 48!: tD9%J-  PJ2ĩSqva9U:-cˊMu{a|BwsN%D ;^4h*]a6,IāAT[NIvYPUvG" է5n.2@)Y} كN_ vWJpA';id08a&p )%J5F9f_P* U]])"uU^13Ʊ haXcUUqoy1tq պ,+z`}8: D=9 Һwك$P`̂[0!5n ^5sɛ}ob4{p0 {pppeYRJ >jf8x38~}g,ct[Aqw(PJh`͟`i]+ǣqe;](`X#;} x 2ҩ+7FU-ϻLOKLTR\nYTXnc4Y4v{{AW,)eapxx("eY03G;e1@' 7tdJJH @MK-˲o3U{g3F^ܑ;DC ³zSb aNݭ# 8ܯZP1*A;Y0`ebɴ|mtK-:Q#ņUeY~i5~[d;OeYNFZ݋I T0W--8'гZ:$/,•?q37Q↥#־ zʹ-8ɄEM)(D)/~5^5E/ukqSՃ'_yq@x޸1NERn$ D`x|Y) i4p634bܵب R>qJ M<wXk})mHi!L㓱rʜ>RurW(zsQ!d8F y2hB8߂@@'pw"`}[` \zW d~zlSrKmbACd;7xիTU=(.ߕ@D0d@p:Qk`owwL] Ÿ|k[s )PvQeY=SI{﫪dL)9oo1}5eڃK؃GE-2ɤ ]SuE BSRG'ˁLܧ>TWWبnSi=>{+y[Z XaQ)A jjpP+~/&<"$) ba'1J)A,Bc;Cə;(n`S3'S`ߊ_SQjɨC 70 ɘ@URv>`E1x3I_}%Q1I"8/ύ&ҩ #A[nRpҹ oJ#J\Rߋ_ ّGqRH᳨ qE}BL,VpAQ /xśU* 2l@ 8D␝So`(jOE"3hOeLϪj1H PJH ͳn˲DP]!s? VE|Z h1nS*)àIIaD`4\DU:)nύ$ɾ@BZFUBV#lہ;_aݡ"Ȩ"2;YkzngTUHU[FTwW?Տ_ʉf|5/l@EUӴDs@Q6衵G5jD@D%U\sC?݇a4N`(5P"*٢8`Gz QI n/5(- ]!0V[O¶@hOg/R]x -;˂i753UA(,@@ TDH \Q|g_Ӛɵ'M:+4Y{FȖjf4YC'# TK4ݽ!  JB Ad #%Tt# Ճ1ЮoWm(p+*D'avmG",D jf 13SvX闆AS p/wS3yU')I{GqƣH(QI$ wGDL:]gaO=u`]+A?9KD wgpcv꼢 ٜtZÍM44~H^mY7/?etenOfCK%+$+"@it@z0*uf5k_CXO8,'gE7!4FEE Y+ i]^pO{ T*Qb$A[0! Φ~ v=Gegg"j%7ƭ,A3O†K ɁjtKY$yӏe5l?/g(rQ䥄@T L6Ϻ^-]ǒuiN BǾnWK#I>׃= geDQ12H߮0iwϧi$òqI6ݖu Qۨݘ&x@%CT$E ,6 @TM6fjQ$[&E~ 3fߦֻ~Dm}T4AJB\-7?OvWz ڪ(JA[L a;r438p5It㍍`h`@qUhdZ PAs@ V@epd\{8*Σ2/j|A06cZ#oԟNuK*H]9 ~oIZp&$(%XԲ qIz8`GTH@$A6;y\&&\l% d|Ul emȨ lЏNU*'?ST +$!V2$4MF>SnMq>4MdgAL/h&,f>lgPdh`D-YI >*IZh'u%&/ho8#3m/3 (Ȃ wo=Np@D _fn~dE 3ۿ5c؎4M f`h 5,]3:F**"IQ#JD@*ɊN13BxbsmrB;ZYeaY@ri _~>Ԓq}LMc 6ٙ+5x06){۬m l; QP8gLtcg3hpEqred\pQ &{rmDD?9.>YD/ r}|<5 *0!t#40t;nqٙ!1lI;@t|w8}F$x35"r<~s?ɍ$>XeimURŖ5hgƛԴbl,$5ӱR"(*(2;3~}.?[g}4MD$ `~Yqdƃo"X%e;:>CpFl10/ !sÇa2L= <epSWndJB"t742HLxeY%l9O8&,^&vkk Z߾ݢIE3< atErpuLzVڭ2tY"&ko/3݌9:)`W7GCyX*.,ٛwq o渹^9 _]OlC{{m] *P@Q"!xJ2wX?xzYYU`Qv&ݛH˲4M94 ,"2K=To6]f' v42sQD|鲈L؀L W#j_* jco~7GR1Q2Ñ@C5Pke4.:OriUkgP Pf@p-/4||XPkpJ", ,\dAa gFOc20{o#&7_h)|01 aA\u4ZGAD2*D,Y3'x`E@8 ً9N ̜?/kݨjeEEdYnt wU9\:݁>IDAT`!7Uf)¾\(}E\Udtj&BY6s p/*\β2{i*C)H_v ;E/_j=}gj062GK=Ne?nlf3(IF;խ$_\tgL.x!nNA1llx]U@xkt>ț뢜I|aGBs`͂ř:0GRRkEbcF_0T 3`FYݷGl6UuS]5YC<{Q81@Erg&e_|9@T &[Md"" UYx>)gbc ] b8 ertS$A 2:ALLR&df<]&5ESol%Xخ7M]qm"QWdkY}o";L+2B{)`iPU LY,c~Q$Bf\7EXsɅfD3}&]Ff~f1w.;S""pgCʾx<ω݈dW DmG ƩDCߔc(89XW)z^e_>>[PN3H6mon+{ɚ᭠!`Zȗ-A62p$iO4OxK̕"W 0qbvšL뫬 mw: `簣5 R*'o̶~6kFjڱK@}ev]D4M ,bzb H}U+ӈ߼>t:MןJpu'x6d9ڳ z6[x7>fHUEc]BDdBߠapS_Wcb&xCJ'xӾK5fnW$ e` :Q8z3fR{4u7^WjwqE@"7eыJmlqK›*L;x/v"ƒّnhdW8<zb5]}`e?γ RX!}#:½Ƕ ܨ7e8W?=/@qZfVaeU3L60'57s"Hblƙx,t$$ %zsLUu R(t̝AzifX| ;kJ_z~LUg%Uٚ+{& ~.|pv~&rM*$L4/ JКijj:ozޤΚ6Z>4M@l:oDRZEs#8,4`Ջ L"#!`<sUt`ХXZ IW 4뿾.'eUWY78pk@'rhkRx/8Fʲ3AKx/&[ 82P1  $UreϦP?fQ%@C>LV Z+Z3x^U7 kUa(/Ç^HENEARgi\G>$kUzV8ñTޏrp +u cICuRWP>ǵdvIkXo/),HyLCzTPEYsu]0@A#USm4i?B|k["f4DC'3  &[haɍO[,i,?O&o޼I* ›7o>񡪪~&PY,UB1`eX=WbY@p{!'@uSF ދ>F3( 'ܠ"C^~'zTq>jU\՞M\gV0Kܭ7?tR՟UU ;NeB^~eJ\겂`v &V݄yzelJ@Eڤ$F!v}aj:נ#ٞ&kEr]o "%9MuȠOS_+0nVOja L\ZU|/~\?d{\(oTy݇u pSܔ3ySje;YҀh4C"Jo6BS(d`*eqb0 (PUUUĐ7]dZR}h^=iaB֌Rc p,M=NQМ*'\nGxRHjY9]F!<3>#kMua .( QIiYIRf\l wqdS[ \A/ V 959q!#'ռ)_LJ̃g&8@s1jR I2^MQզ6aYM.sV"9хC<=0==M! 19NsKG^DB pu Xu@#DŽkάsgv#X)2! C9:z?5\czCqg]%k<q.kA:%TƯ˓?ޔ(pv>;NgJX  J[B-AD&GI2.r [Z6e!% (x9,;2e{^r? =P1DZԊ9(- $f̢50@32d]B[AdM({?䤼W^!(1;JH YT*G1g -<qr@]Xˢ\TQ_T!kM9ѦI)K`J7DpƣfYk\d' xZ_UUp`{n؈{D=7g<\;oڛϻ?h a~Dm{~s7hc s^k3ƻ%<9C3u#7۟7/ܼқ4m U)`% #ӼӼӼx#+l Ofܱ0Q0N˲|JOf<#aww6HWkB:Cs+>s}xn4NuuhaON`ON9\'{ѼZO_qwF3֘F7{['ׯ|l<)1b'hcON`ON`ON`ONobǓy/-I`jnMs<Dp8]mۊțbQv+x3?fo}ګF^FDQ_Iax4h^MxB"L44؋eҬꀦg2{:SriR-)u72Wj])j'=mmZQAUMzGq׸ĢiwiZo|'g1AS2ިM nʫʮ'+imwn=^~jo7}h}<9BYv߷7M4~7?TH~v]jf6J[Zr_ *1bj %Сk8h~ETxRa(t{l6q7Tڥ6klqKQw5%n># jz7Vl8}qbhyrՙs1%z⫷Cg!HGDBɎ/~#L;xg\Xۜ75/C8C66*} .~J.DֻfOXy|I?*/W fWDkt9B\ΗJbm|ä5wnaIxQ-t|]倌lFڙW;x3Ok ]}zP2ff޶Yturf{.K2+m tINGVyVyS0] 5CPOPoz,Av"(?c?iv]RK~-R1.|OюfwZ`!fj!fj!fj;=IXEsg[yW3w8>BX+ޔI\Je%HڲZofw[w*<<>Zdt[rw/U[{{{ **.yx֡ЃtG)Uh9Əh 1=mT#t[܀}E PQä7;dPU?lrmұ,ӎ4/;/R(efoc-&i-g6:e$\"ƕ*jGߩw;T v;Z}`b(OBw{ڟ󏺰m;%($,2fZ۹NBA;rP3 5C@P3 5C@P3 5C@P3 5C@P3 5C@P3 =@wZ#sʟ3=RԊ&@rXR LŢ;AdSnBFYΠMYR(?sFS3qi9R$Xy&Goz[MJ.ygV.4B7:f]NÊU.>O35bpw_ /nRz?I)j4ꅓRlNJ'd 5C@P3 5C@P3 5C@P3 5C@P3 5C@P3 5Cm||[h2JhN%9ܬ5AqBGZ xeNQiԆ(qR\NYYQԆHʙ"q;MСUԡr %m"iΡPELJDAiG&q"6 6~hފ'(HۊUoS]"v&=)fRN2j!fj!fj!f~8Ok,ʓV9|}}eVP3 5C_Nw.Bw],".B(k`wʿ6C@P3 5C@TpC5~{2JeѬiyęjgk#Lڥ^cf[< 5Ce[mhG5f~[=2iô3~s۪m>qWq{fʭvea@h& 5C@P3P=Z^/5_ΗnW[Sf)]Z` 5C@P3O]0sR%H۶k2 _iIENDB`+bDdX" B   S A ? baʤaQk$ySqanniaʤaQk$ySPNG  IHDRX!l{gAMA pHYs0p IDATx]=wǒt#B$*3FkEmꍞ^$ӿ`2enF2zH`d;"&*BwTtc0 G YnU=z_oHzep|| G_УG/~Av4."ܗ{=zxT@hm~a]ѣ 0nm,wJ9]D|Уm6mb.2=CoܳGσϟo;)j\P4NAkin샶=zlWHd}:n߃۟9~~84b~ݏ?d ʡVu X=6Yoxn?b(ԣBǝ ܏ -7 A7nmï !CwbnN?ie0;ԡPwFk{ ;Bu*)l?}M~i2{<@@#܌DN] Ʌ}z<4tu^pv[komK +Qsx}D:nMDM (=t#wx+К6q7lg= ؙ ؈uWh ۸mưS, ۶oN ܪϛ;{J;|hc/AJb!ָ`FeIwzO>guC#X\x=z:y Da~W=zW2yKVWjsTǜɅ˿}쩼NDx),Ρjj2|/ɯ͒x4rq Ae6R "$L9h"@s9r0ٳx *6{?&8<Yz$ 5lt 285/k#[e[ & ͒#6gմSaFD <\AEe@ytѿ K OcdtZ^eNf$묙6CO5OUo5fɵ[8|OFs@)GOt!3wfFd@UU,#^đL90EpdatkD U"ՓUZި6 q*ODun*"k־b%#77}8@hBUU;[R7G x2RAV&蠊|PM|gGX,075&Ҭ p}UP&aUw tjNBM\ͬ&ZʐxEnFh@F KSU52`sсH$]q-E8U;Pu 3Eb"$Ȇ467@,@"EDذ,O@d D@G€[-^8D<<<"`O?̀р%<kMKO4fWd{*yuPiLK\qp>, oVx(}3Nuyg7Ud#8HMT.˰\ $aaT#>\ۏ[~DxY)+,;)I /г Yr3yMyU#,pՙzf&H)6y9ԯ;ڵ GA] m(DH`kJ[HUT%eQIّ!Zw84#T/c̳Ww[K!͒#9xX< gG =I$ U'ˀG65U8݋U }9AUU8"Q@q[(@Y4*J-AB+Zd7APQ0!1-f@<4<"(0R9U%+&&S$NfB u1SN ~tzهΚ3$=A bDg9@2d:d5l\ܜeqDA68[7q"\i}I;aED5GCLyrsCf2Q249!a:%Hʔ-f_`g\dHiU0+emhg=-=~PjZfB(S4ݜyb#@ةkd`HnaXBbp Kۖ`ǻ_gGCP5LLJӢ`%Upv5Eͮf FGC]^vUS/ço~6i!ꕁ`|Y8 T N"5gbbZVIR!ŏo|oX@ \A((nQ6H(qq9(Da@frxl4IF ֬ P6:6{|m5.pxAVh#9 G h$lɚMO\EDB|UCN&_g̒\GQwwO"+uHD螫_lwHN..9;;{7{? WL :S9 y$&@<802#Ldb"-&RY)g{m#08GȺFhҙ @}0:ήf-9:Qfy'ofv5k`%|ߝx<?FÃ`$Oi/% Hf]N&痿^N"mP$K^dwq\I/=d4-d/ǖbv4~a6aaE{,%AӃ,BgF3%[9ק_kz<^KCaBfw@y?L OTA`wd! kD6;=VZ1Ug/0#@!A,"ӧO<y7_tt:{= s2M׽Dd1_ qeUYm'[|5OI{mV\S?q5T]7W]dswzK^P=9 #= j@0wi2!e7Xwz3y0+'Sus/F7Tl(a[Oԇ a:j:d :iO<#e d?~IuTcӓW'/x̖,f_н&dX-mF|ѽfg4ၧ UN']w 呌R::0yJ̀Py Tnn!gRIM@hɨb Qd.!30F80z ?NONN9޶ \eA@5qKw aG`fu-Y?0Xt]GuTӧ"u4ML'/ԚtJ5e"Caiu)8|phjKj*'N0DxHG c@\fV$K͝'P3pt,2&p%&pdƣatp |lB1wnG 2O>o{pG8:qs[ F} ]D ToFPin1ED?/x=?2?~TUD}CMgg]ם>E 1ݤ0zKɸ^}-"XSf@'Xi(DŽԢP[2qv.Vd"Wˊv@7BpƷa7|KםowV~׻5s^\O}Us` XtWKxO\XR-հϳ?꿾-f)Q ް{rVԪxՋ4/|DG5{E7_LgϞ__<~|_glr8U*C˸0,4g޶rd"+<"+A-9,R bzV7N:_m ;,sOF,Tgҩ6G/xfm;v3Xc &L3U嚹" aHQ.CD+on( ^݉ȒQD%E$TItajbrexD#n Gp3P׼5Sw&"g\ͻM'"\3׳(l"~'p5gŋTUCbx~tQ3DHJMR-TG!0k&*hA5% vLuɘjb0*Z_Ltj+nAB95@&67WyCd#@U`:v]eg/UG Ņ}'ṔY:U3kSW嚘LM3RM}̬H z~ɽj0e*M-9 %vF)k򧈝Z5,]>#NXe;Qmp5 5zQ6`5;[la/3Gϟm-2R{ϺP ; ҨçmtzvfK5mJ p,Ay&Ԕ ҭ&aiAb`-襯j†F ɊqrvXK5-w79~ۨnn>.%:;g;q߿Nj>ohes,L!m  `sZ0*\g?͎ON~t:=yujɥm?z$.` C-[2,`U H X@T^ ecXJX } 2VaT/RJӕ1viW8Bnc; \jONNNd_D"5՝^ { mRnj/r#$Xr=OOO^NO)Wh#ձ^U@dp҅D0Ϲ&@1aKy%J !NipG|d2`^ \_k 0'n|0m&LU=T_jnLK:==On "SGbnJl\3ESijv/# X1[D nW}hG0X7kUxĔXbDd'\3M%+Vkp ڄ؄#MɐKp^w ].L,CVh}:=0Hid` BYG7tG#dvC?(Vْ̒w]7J3nZe#"q*U4"LWS8e`*ti͸yÃm0YeӥҢ *27UE2 bʙ*FEˀ  K=ء/UUu%Nэ5?~Y5SXk70ߘ}4U^`Wuƻzº7ץz2Kx-f5RL1"GP춴~;Kե _fO@H","L#&Ts~*!'^`L+j!c48zAɽHշ֏(h˙ltsXqT0ē,Xufsؽk|/b_;'RŅRᐦ){d",#& _|sGn)Q\30 `8P^(keWKĆ?)* huY\U5bp*'\zs3a1߶MC5x24-J<2 #˞pO]=wI`eEЪ%ҬEu흷_\1b%J VUI~q8Z U˱#GFB˴1UVÑgϭP͚(ԬJ+f?:anOb \|%xa-f^T>f D0${KyO6<NV0 ՘ۻ[L/#1P`,oD6hCQdC[WIt66bZe6b^kul>Xy8t6;kcRg jb#^ݫN)za,^PFX j7=FmBSy}L>k.SkO$J$]5p'k)ebEDt*D@e,EKr&КhTr>n*tհNM=]Wg[55Ձ-o-lqT:+@1E8R|Bks[ n 13.-nK 9縍aKs FDVnڬZKَ6kjltjQ `6PڦQD:P("Qx#ԱN $SĬ)NOc)Emcv!`%bmȵMNRM[Qyac~\;q.f{۳xҩf ϼDK t@O7ċWtY\o;B*CB` r L2mR+ŴlD5Suɿj.\ߨ z3K_:'#Nw1zڍUr8S,jr^yۏYW~p5(V0!9fU S6E_Xz4$"("Ij@-8z[mE3?Ba2J V{+-@bT|v̦:&"r18lZjeG'1C:lḚw5@:CȻ!T7DyH gKcYk};zo'~1q7L@D\bj)4Ǒ2~c: V㎮>\al2vr,Lh]4|e\+K\IM )40/}H[9a RUSy"A@8I|ϰɔ Xܱ60ӝ $ .K׏`_X2 ZOi܉HH~l&D_-KPvGQqd5տB1 ec`h_||;އo/ǿ#?C-=A3 I8{( Bsa;Z)Ce*Æ(10SIe# $ItXhC%mH@H8c JY#>)e0ˮɅCϦl=M X߹m3k֭+1YZ t(;5x]JgC~C]sIfmAc5m9'dGq2Ǣ8c" q2Y}ICd23aOw}cFNin% W]>|(eH5֭4 . gI=)ZO{֬*RYCV|WxJ%oP J x# .>q0_R)ۇ"s2MZ( qᮡ@?}Ia HaIۘw&#6*0;ڿߋK?L@0:r&CW Ѭ^U:) u;'54Y@Nvxa]|:ֹr-xY](2Ё6UsL6\~K? ԡY)95Y"9i cO}? ϻw9]p9W5d `ԉ a3J] XF?+=~>L}fkD_NoF-j{=)xT'w܍KVԍ `d9m4pC>MyDE tԙl t^D&dh X 4뻮w="_vCpm{yy)"-KԛmGāelXniJJq0/H77UM[˪Qa"k/j$ܓmo(?S< Ze^IZ\&O$q›/$sV"X*gɩ*¾7+b])c"HH2dv7j&twes4wTaȮ "뻮RI~`n?nd%Rq??m7zސ |ͺKU2,ʬf+?G<ˇ/^Ed7n񾛚c Y7F!#ﺲ 1Gh'_F#%jǕ9fts>xS+#!GU 2 lnƑe] % TTLe2 #0Wvvf& 7)PA%c_Fu- w}u塿ǒ>a8,FzpjŹ̼?t%.LHdF.xMWeK=1zN2}} %׮Ja./no~m[S3YLHHn(wW1Hz_x x ej y DP؛%37\4q{֊P?pd eܠ[2(f2pP9A+z'2[I>DaB10=zv H d ~"yf` K+9~zh lYV~[^R0;GqzR6OxzXeXr"pdFVbݠ;]_Zzj#o9=VSsS v{kttTߛ̲{gW6Yqn6YUaIt,1BO4 &hƑ%x4$}{AE9:rS+=wģ[}|k^Vޠ" jZ  , q#3ݶ]?mnNv^@|CrUUu 37_~yw?kj|} ax@>ND6&綢[ Oɇbjd.9ɓ\Kz5o'NOoOן/%o'Y~d%&AJڦG4"G0wd%7g 3^}`Lov})B$xNKlnꪖ*"ow=w?UPΤͺZc b >J;ӘY\ަ)%/k#npd8m\xѼN+!>j-?rNkN9bߜ"`i: ЕM۶Mׂ;^͘#YhK:A"3 G.Yr& +H5 oZ3mBXL2bai 4-CX  HhXe~XH 5'>s } uiY,ɀe Gn( mD7 #Ѥ-xŲܸP%%k03ADS758J˛d{vm8tulqp *i7Ҝ5 "3L"TݒR3l XaSd_oJ'' J]e$2-ÓYrJt#5gMQXja;^Juڗr' |,,;@ƖgN|hߓ#Lި"$R'Ut+C 5) URԁ<L}躛М6$t+"u Cߞn>hv{{DzB7c ,P {wJd-#l..w}WRbd+d|E'^2$00vñ`~<fy͏޵rG%/н"FR"PʬXўAvPײ[N7UhgPh*)bA\ezf]qgKNcß~hmw¢P Md씥DGLǦYUL޶-q)"]c AW-ELC2#'p-$saADjVm.}L*ć-%{tf'>a;S,wVxFWSbiFUUҮ۳wU(>zQ80G}A‰/.T6 zZ7 H4냪>l(&y&`2ɢ1YԴ5%Q15+*|.WS8H2A *p wleWl|(^zO9o"/Uw}8BIǙƜ,~DŽ*JdPݨ *sh Fe!qV8h"d,9Z˲b,8cfV%rnȬ212|NFV_fvN( ۫txD#xUsP5zX`, oohJ۷~{u]i j6H@"sJVG7RĪ6unJ( &PfݨO(*4iT73QeP"K jKbm{g5 !衞,1qvݔc9HT -Ô]Q 6l3ֲ=8Ziw;?)&C"w躮@Vݘ@eOaYV 2 BX K3Q0] qi>9Ӎ̠ gL!;klUjOHJ(8Q ܋§χk0ۈ//.U(p/?9=qBuP g{~dޢEDHD",H,\ BiSAUhAM4G+Y 0sb+H aKEw`:gJS*6y}P7Ǎ*8H#!ۉ:qx\Kz)f#ѴoIŁ/8''ЫusԬ_5IH2{8b(xN:`F AH$9Ы>T?DUr0K&d>'G6"˚M(Ocvء,/ӌg|ļQZpD!"!w:f s(g554a 2p=F}* &mlW-c?4 FHvZP]Ǫ窃(F&ێAٮ=Sg5'պZV,,Y(S(FAP+7PL`bb9}̆AU G>F Q D>:%0e Psp#0VP炰EL#( RIh}? C¦$nܳx^n+|Cr:ltԞo^9y}"B@"yCD"rPfWEޝL 8(& % o2 18-SA|nˁ7nubh>9^]8x4+8R"DPJD8ځ,g&mR Z`.i쬼OjYR T{V&UX*jjw-v\drtr:qcgxĢ/7#79c"I&\k0d<`#>n*Oө;k2l)uF j|8Z( ]\/ pQB5Qnm~ DZ ]j3, ބ&\dR+/Gs/ XJQL&FE+lYG0XYx+ ggEfv R_t6@V|-v*$Le?/8NFh3ba>q|ƠBaO&FdxW|^Z*ďoTo[[$C<@1GmHw#Wɤ{j TDWWt%#@ Wi'c$ƾ/=)P B>_m#־*;ZpaVcIn]?ǫw6z77 ]/>5ķ6 G0dGp+&U_4PUfc%nJ^˙4&Z_RЄЀt Hj%R ƂJH'6 q;f&+A{", qU_w=L%Gƶq&\_}CG#M1+ { BTӾɇ\\cL潊}̅J$ZYA%'g٦S1XgUژeٶ]\`8&4ZDoc?L.^N/:h+hy`YX+G0X^#$,j1 O(Y o}O/ΧHC oiDTYch0vc*}& T ),RMVS +YTBC06Z2X9M~#OR:Qof0j53^t2MA|n>}ΝG#gɟ?yP~}C &OV16WEQ@Ur+*[ 6 jO !5 '1М H-D2 2,qٸrΕG`>]o'UH(DZ`9 ~i2LN'ι_%cɻ+kxl/( _@lhӟ6?ߋ6GIkJPj%{ZE5fV/xXdBkۥZ"6G?}9bmkZT9Ϊ^=m~&@/%>塦ߠ~M)3$VmCu_JO##RqT$@qU3W@c.0TLӟ|ȝҷG0d N#Z_NIp}Tj1>)R P@(nR~Ŏֵ9&U8@PrCP JD:k9&w|\.0UTWobɔ(*Iǰ&JHbuޯ|~o p ,o(ȋʝQuO$LE 5}8 uov8^rpo_"ːn~iTRA% w#!;\hW,e[پLJV4C֎\-$ ,QdqDh@1|>וtAh tm }3Oo;ٻ&;wmPWUB[Q HKtGzZ+0Rî VC,hR&NښH™Z-g sIL@I|1{/ZppIU!~F=G>¸unݺ9|&oyQmM-QW]Fs`T#f'MY#Mؾw-J9N)e ; RXd\+rT@"KpIxu]kfBWx^0Z$o7Kj |܁R}ݮT (<&~u%F,KBZ8X^/ZuE$htyyiC6p7c&9Pxo~N̞`# _ph(@#ȭٸFt\" oDG ATG!KrK ɋ\ѴNhyV={h9\ =J0U7-gt}LI9j^Jo&@-S(h<_IYe}hBqQ% _vL,99=  fƯ1/$סCIzյZ@D%q b8ιrὗPquflP Kgr.(7 EF΍oҍ✣m|AĪ@(^?Dʛ^-BzٳME%ҷ量|$ӀN z륿Yd]F G . ֡%!7Li( I!zrtCB`7֞d{&boz ֢M`Eh^UUkZ&D.kcK}IeX^`sD+ϗ$ӺI.ں7,zo!pHV7! &~ޮ{[OqYUӳ+ًgszY/5f`K#| )r@ 2YPᰖY hL71+!5L,HJ* <JX?w‡:&{&%$U^~\\/+) HNep8BA/x3h':T@\9i^/5[^/gŗfbFR `5I,Pk$v X\$]LIt+6¨:;ߢtR*DhAI PIn\1/FJVD,oWZ 9_ CmV#8HhsL[W|uqlbvqq<:47Al8p"67fٯGJ~?|N:{{98mrzxH `n#~bHjc#hwo߼\31ÑΟD#,n!דZ?׃ţЙx8T M .Χ^??&~| aJg x=52>,+G0X>ɂ!R/x:vb~?)dAB [n#|H^9޹8Dg~s~#Զ[U"gdd9f$ ! a:,$"222 Ȃ ##Yddd,qddd|Dd ##য়~.lH>IENDB` DdY> <  C Ab8 fQ>]D. Onn fQ>]D.PNG  IHDRgAMA IDATxu:aP Ln;)2vU(Vf(΀` Yԑ O ҟ PE)u< JM(^7}ƪ+ދDA/i"U)R-{H'6v |iRkʖK i&T8eV]_KdLƼ.bNSl3 -3A*k=$6!`(N_KHҍu][OQft:K")ҺFSq~YM}-Wf{i_871;5 J M2ߺv]ջ֍ݤi.M?NђC(P$ƿf3mx֞8G3Ll0i̥]Z-zfSo!Qecē~f dBv(-3Fgbc.9`"m6?cNpbR)X[TёNTV(5ڱ6秥$1DwQ;MqKcbZu]/jg )'_M 9iYr[iO[_-/9L,˻{zG (ЋxϭC>y P!E~|<"E)H U0crhCl(Xl m UV>ZӼ6A3~IU!9wQŽV̞eya].up[t\kXf¬>'~zˣWtr2fRg?)+ .!7/v#c}$` 3< cp%.ǒIGM>Ń B`9x{{p 9;=ϟ?| H"@R"E)H U7Kӻ}®uH ;wvmᐽ+u?K^"@RʤG "$ =~bVk̫ ={ܹ3c`oWQ[?+xv%uboԠ 0D)Ş~:4>ؘپ/TEʪ &e==r[ZFH"@Ru]m?~];Ɨ-O/O/@!E)2 ͦo{ss6tH[5d{(aO)=؞oXTrPaxh W}V=evexn ax(#!؉R֋;)RH"@+ж-Ɨ-O/Y>Ry"@*]׉W EezHW@E)H E)RH"@4E LwKOV%B Qg8f0o?H~^8Xn[o2NԠpWҎ^UMgZC4H 1]'EfțP]_ -?(zHjH E)RH"@R|_OszZᐾ+: %)RtjH EiG 8Ѐ*=nZbo]0fvοvUw H oF# ~iu5V)sڳ?|*UDFq(xf;L=\f %L-f{&̓KU.laQbc)O8;Qj׵;/Y!Q"E)H E)RH"@R*M~T~^۪=ΙŤ}^wgڍsOwzvg3"6 <  C Ab 7BLmG܏ x[nn 7BLmG܏PNG  IHDRgAMA HIDATx=r8apHѦMvq&ؙ7꽉5DQ|n577ߧ$)"Cu>RiԶRsf j]`7gZ$ χzr?^4T(T^'E6ؘBk+9,Q//{2R# e{JחlRd%'!7u'{}9MO [9?f 5GC& Isb)jjZog|ugK`n>F|7ωiڮkOk\H쾖{Ӎi07%tmKs:Hmrį]6iڦOWp46/- ݅%tr2;Q3ks6?Qh*O>tCOm9R}+*k4C5k'2Fq1:}:qsiKܣy1kk8l(闇ڢHD%bؐiC\nZrI9'uWPq\iha@WQ3_]Cgn􋀸;_L YiYr[d+S_ֻs2IZر}0 P!E?~|}}^H"@Rʸc~_\O -- "ݪylt;K Iue^f {X/Vz]W+waRqs]< 1:.@\>}b62ksHGl:Mރ;{; kXr,t[wCܻ0uXt:]5ݷ;O~uH E)RH"@R*K{{ vy$!E+Uة~8W pFe"@RJHߏ})56~[TtcH(-"9 9=͌eXbߪ&1N/1ѿ),*S/r/vWvLxּ{:33cnjq6PzzuGBo~71FR1/)[:q=zN_`<),(B"E)H E)RH{jVnw߬JsXs3&yRt̷)Y>9|ZV\W[d^JAX8R̢ ]<+N<B4H 1]&EzțPY? -]NtM_l WR"E)H E)RH%~/Q_!+O+p_Hl)r:5"ETqǯ5UTi5)1DmOtFj@5%[2+ HԷEf}PMMiu5K,(RQXztPR%_4"0yl)^Bι hv0~/*Qd"dĻS;\l`PrELZui9+Dz!?WR"E)ң 1Yct1i=OV E)RHxlw`\֮ΈWN_ E3mzaw'omCEn]]N/%֡ᄊ'^Nŧ ]ĪgTQ>\ŷY~P3_W# h?XSpi {Q={aӫ#> MeZmk~7Q)McΚ#<H E~QJ>S￸sz)RH"@RS?cljc{&}8& x!ֿry8f13y8vh3:'M>EW2 /f*ܪZ귙Ce2_46T\&nHQ1;.ېd CGbMMOH?0*Ra(KyBr+,n;p^М2u]IoZ ѣ-z=ȬɅT'm E)RH"@RHzޚЖS5Oޚ"@R"E\֋zRJm;w5;?ZIENDB` Ddz <  C Ab i9wɯG*5D hnn i9wɯG*5DPNG  IHDR8;I gAMA IDATxuP Bء3A 3b2(Bq* Gr%pGeKWpCe?+iR.^y2ge>GP_yeߒٺ2Rk5drMpy5QrrH+ax \o٪ԗl "%ӺoS*z7i===eԮoH;IG`"Y\ԕy~sW_*7].VáH&5LƎqnS:r6!vAqSZVmUMdCɕC'Rkͯ$yi&yg[;V](daB$5yrr-jA3oڒͅ 뽟S:'48i0᛻j:77:ƳF5i9+ B]~k_?5v9mާx8y#a߲UU쟇9$,X|D&`V_92LRuܓKĒ,@ڒݸ,j#bGdʾ}bla[Wr[ugu9[SWG @mfm|{m4݋яŲlM7uٟ7fkfZ9[ńǾ//T\khŭm_[bh6ZUfuK0~?떫:,ojf k4g!=6a];a7=?nm;ޚ$w/Pc&7 $37H6낟8$k댎_D[XV9)953qRu-/xY^5r>&91;9۽v;D`>Wir 7ime¡yoo\{TVr (ߚ+bSqTVrV~O|5Ocۘ%gb <ϣWƳ,@,9 y]𗇇,~]Z[BE-֜aYhRpmh6z, RDh.Y-\JVX[X^-yȞοga߿W_봡6)ٻ_,$0z*+_(5fڻLBRjZ[zڎ~|o}0m kl@m20zfw0"&:믹0UJζrnRji5p*^ضBC̹ /^3lۇuv5Y8dOwYXr 5(g/Ktx .|>b-VŚg gg//cBʷX<,w|>/]H[|5,@,9 6-zr6gg^Ͼ\BDzfXV.&dʙ%gbYXr %gb {ԙݸ,j%yR--}U-tKMw9ޣK;S6JuVʷ-/xk]X[y[, mdL:*ٱ嚵hlTݻ~=NիwQrM.]\ٲ # z?73|ږRoYj]ρ;{#l mo'2ۥֵW'4珿-j}W~Wѽkkyd/.$پauveUJ>wΟHfruLq-۲Q>KHSнk6Ww-F4-=瀾]rx:;Y% kkj܅;ܙ5vnv~ݨ8,NTGǽzg&&촕<\Ӿ%뚟-{,p7bsڸ;2,@,9 KĒz78穃eGLxyg--̈́yf`&7,;3,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ,@,9 KĒ~q>Jyhif֓//cj f~Ƴ3,@xm: fAq4J+fYgb5Z{e< Gea2`W@1IENDB`Dd< $ C A$#b icVkN|unnicVkNPNG  IHDRyQygEgAMAIDATx1v a$W)dӹlpR30 yb5 :q%xzzvObevޮؕokwwss JER BW9w|xvYB/sRK)KYMLk\{I*̱/bZ;B+o\5i8C5;:JI8u%ʯT!!c2~zy7p0sS?z+RiTZrTiܰ5kB|zky GYu+B܂#1Dk ߔ@3N &86^D !Ta AvȦd5DFE&ULkޜ !(AVo9-"&vpTQdi:$@a'"ɋ!A%"IͿ Amv4-׳#m%V6x}>/Q[Y2Zs=<fՌ-Sī,-lk+*Sb3RƫxL5ǯ3]2M6;!#so2u߀-g1 ÀIb?@PVgѩ0 !=yrRB1cW ݁o1t.يV͒Rh-B昃~ zz FJS:/+ +Tc;K-? iK mRIKa&^qmTM:/08ZJuO _mZ9VZ)㧫ߨjوkMZJRi30p;\B\rϨI$^kˋ_ky_\"-=CF4|U Mpl|BH a } M! (jFE&ULkޜ !(AV4٨GK2(Zc2G_Ic# # N] >t$/n$t^r*ҘAmv4#mSl"ތB󗂷V+aɃֿ~OanӍ!?O?gMߒo[{xֱ8NN:_D\?'`QzM_'m R:~!&KP?CUn8%q͆}V&~yS#=)̑:!qAsʝB`dJdwi: )LR8^T`&lJs˘wi;ܯ!8‰٣ LڄVCj`'*ˇl|$isF􌞺uzi̶x:u4e)y^u2bkkkݎu;&0hO r˕gK5aYxbCu ?j8n@Ic:gę;hQ SW!8!EN;j޿( a }:ph鵽N:dzͮ R{ v&/$ϏQ'Z?Aȣs5z9NOh~Cmֆ':iT85hŦ@𱽘hC׺Lٶ]$.o8}dpԝEj[Mu-'w8vr`0ulCM0+d6^]3i^ ,gG$S:ؗ]["eVPM u5M/R֓;A /Di"׋ex;jf|KD`ҽgpD3TC "ͯSf zFwF{Ri,HUP)u}anO>UAz؈<ϭOODIENDB`bDd@ 8< & C A&%b( AȺߞ0}Conn( AȺߞ0}CoPNG  IHDRH/]mgAMALIDATxKv0E>,/%Xzֳ>.R؁z ~ AHsdAG@4mRn홀ڸ7+N<.֞xl6? 8gV[c"JkUiȇrU WD2N5gDkQ\+NN@rBRlȬ־'Q=N|E KMx\ySN^~})U5_F=\nn ’I@Z˃҆ZVeZYcq=gV4M䚗G Xk6V{;/WEfʏ2u:W}On eI }>4!zmh꠵*8.JWtfWXC) 2K&\]Ĵ^xuCL&) r3\5!_:ۨyq20R imjnhVؐ{QSu\yu)Fr(X]|B6pE R"S}<w^>[fT1߭U({J7n&,&i%uuhh3%h0̾']1r0}P$9 r##A%7<۟gz/a]v>4|׷v7nV`J P?t HP;NVQc4uD pg|[4Ƚ9Qy62w)ηne+%cC e6@H$9 M'KƆl}xʛ"dͫV)9jyrWYR}նT'QGS0K䣖=lSz9hJ&Ph*o#ݼL!r}Z1.4 íCT/s40LU`F7~Z~Y8L6$@߉aVl.nF!'%ؼ:l*OA813]a' ʵrU~~d?D>kCjg|X qX,8 X #䭴Zcp GĨ񨷅`(nH)$?9ۢ<\=#xLH!m&;*g({:[T\:A֚,+#ı|(|}ls[ 9 iJQ]y}sy}[֝gpKa0[1oڪ޼UijYβ5+]nmO2,frU3n CO6d,ȊO9:1//@I͚@,يl*Ll64FIeY]uOB;?m$vfAbh+Ƅ1P sskYWcGs4dVOL9ǟc(C@U2j5>t|άp *3tey;M?3(S/9)AS:kӷ}z δU֓Ry]{mLg#p^(p΁:X(2ysqL=r,Ӣlmϻ\0*N<2˳ybx"*YTxy$iXПu{[r(ƳRy?&uxz p~x_. ăăs[m5^p4w*n;ox!h+@gOoFN@sUr,VB(18O7T@6ٞM,iTBnTr^jԴ Cfקj&>Rij]FlzUHMuKbDife*ݩۢDsqXtȇ٨<ݎޘoh{Y[+YpN%TutYftGzu!< ZlX"O>ޮO:'z'Ln!a~JGvvHlVd&՝^5eݼ\Rk`8Di *}!S~zÔ5wR[XCh=Dl-ц7|{Ǡ GufldgI(VFjYF9th]گv^ mQ9,szOZZoC3D%16ڲ} ckNkVXz+m\`ށ7t 9xVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVx~ځR>jqB[Z+vv7 Gc=zsf[]rBX:' 糷ĩo {pTN t )rȼ9̵Zni￴ߵ&ZO` /4|+MK)|6YʩzaYnZ|.u`)QrT3pyY_毈)9D[}NJ&G]:hV8x. 4nL<@S+QCQSp>K<;=%/X5 5$&3`-e͛ʧ-XB[nrmmmmmmgoվ%S[{3#\rs﬘7 xv`oTZ¦>!M{@<_v4gNXajxOdTɭu)[сaw%U*L2x 1^Le˚F@4;;!'#hw~KFd{3n٢|fg;4'DPyHT7b] &|A[wa4ƞ#Xo]yٮP՛2|}enיr_MTpDq򀎕imM)7XW dGkVښ-|<5xE$rZ2k+!M /= FH45ݢ?2 X~v@^Ѽ, 5]#fEyY}vikf%݀)ي֍7XV '      ݞysmy@o? ndzߣpxv:b*ѫANK{ gxNn9 On_WfzF%/GP3{@Y T0Ԑǔxm${gBN{}[{EV^_.zR"F8&e廬4;嚦| @u Lc@\jQm&ICqmb V9ݝ;99 {" 5s gcCAQnoDS7zK^ 9-3ފ̢nqtq:<85̮ r'[?;]>Qkp<$,chgPd3.Z3&dZ[@qRVp"'ry0N`Vx ăăăăăăăăăăăăăăăăăăăăăăBJoϿL_6gT}lߴ9Bs?[}7dQcF3 h.ӵrV`$P[ߔRJ^YRJ<ؗefyS '6g|Os{Rw(##wJ}#Y 57h Co}gzox|S$9r>[`+˟rЬ#v / t ʺ%~3alz:ex2(}|Sҧk~um JOk:mYQ묱87g/01W`*+fRԶ4k4Tun28I('P&y)}INEm[tUᲺ|KAm;沧Qgte S/ލ~URc+[h6hov4uL929Eاas(t6MFb ]aBFQs6J9Uéu Oد `l#T]!*)Ur'/Y洢y0Yk.*ٲֺtSV0,wKN3$_)QF:3 9mii9=gc+Qitn/-s.?g0 )܀k?;Nkry_ZN*\U[V95m~UwIENDB`yDdg <  C Ab># "c\un># "c\PNG  IHDR)XYSgAMAcIDATx=r8@-H&tf3|;FÉqfA{rQ h Њw4 \ew旧UG+W;{؇G'.<\.~rbka3!QX X._~]%SKԔ疊v;7z%{leoշqn1U06Иl@[-\V=D/%b{"o_*yc{܏:JOkʏ?Ѡ+nnn^^^Rgy9T36777G gl^^^Hp`{Ox?0{X?O<#!ձx?)C鎭>/?8%0Ŏ pv[6;eum{DGy/ށW%w۞~{{.=e^IO+?ye@mA靸߁7|D:JV-^(|9\c=aNQ)>а k:5 ~ϟr'z_lRBF۷oS)'@?F%|'pmsV=YmÈFHMo⁸7V=YWDH9Nc츰®[Qw}]M; C8f}>E̦^ثS'us}[#K1Í;$a OTq[\''XpW7yX0Mxwwgf L)59}(6pzxkyzz+{ Y[ Zx< X`{p[0؞ yn j"'r!@34g?6+%|A?~CV}ͪtƨ,˲NV?WX5O?knRFkRv?Q\W>4 L9n2])0e* rgt XSVne:Vg{=1yXWKna-ByJ+x8H+ɰ=qEhrAJʎ=Ќ7䰧N!)~=Cf<=x<Ќc='{= 1=BAA86YE~nЌ?n̸d_gH}*N8+??1>I q?寤NES;{ R=HpLLqE%k N]˚fW{ nS9(e*]}a2BFDsYͽ)AvkwJ͠r -STU~h"4HY yhީOf.koLKBax^\Kn(cjxe=WJ)ksʮp9@;\S֪Ou9 { JQ'+IxQrx{ txuj h1e{5K.[@3:LۙX ,@4|l|4|lkRQ8NABlY@-e tP%`J>p=(CwSήvFU |@˵=厃B1OȜ^RuCS*.KSr;Ry}Eؕ )tبJ;o3c{ C{4VA_ሩ԰^TJjE,bS}e5rLsx("ahh ¹WPPk ^۽|Q,MKPCSUprCg ϝ:U}Q"@V)j"X8nA~ѹdzhlw05^jzQ#@W#0z!2W+{bi3zI<+i]x pW~n(&)hǕ/t-+vҹ v:(|)5B-YFm½SrjEWk %+Z/B*Z[%8^U{ZMOsYa YmSPF=JPkqsf|\ɅC== r-i$fp== խg48{x< = hxA@;/x{= =9܍^wYЪL!+_?RVO=p|OdOֻx{갰fN/xVCmKT- UjRϫ_s:RʌVN [ڗWQWQj_Y+Wٰ2E({!=*+dJHw[MPX)_c:}`RTGBm FU2S2noB^,!&9M2SSQٳ9leY[bhzcYW+oTx+mc.s&=0="Bt:Y v\r)eQutUBp[^%Ѯ:^NcMOa?cY"Wv/ʊD+$oTX~]4s='ϭVvσ38yrr y2fi*+ qzK}KlcܢƘ^l+;v8 c ᪵_Q@ tY3Uq}x~~έ6'^ b2`p$sy2쭚K6f~x`=wUެj~5xϊ1ys/U<{_]"Y*k+Y%IR_$WY3qgI%23}6b_ VܳM.@1ݟ`% Ys+s%*s; g_I3e`Lp t<_℉͗pyCaۓ`S* $qa˫F7 i1)"g5.v n#?r</SI8v!ͥlc>^ZE{ Cx D|h+Ip 'qw|{ o}v[ <6 7^Z;@[ %P4# F@٦C,IUds1TLm9cح  $wl pr"U$gp"%Ϯ dO*[v ېs,O9|cSr"q٠yrO ˋ[[.m'grUZnPo |5*玁&o? #dPM-SZ9մIJO's$՜x@ŷ=s8p70p9-q?ƺhcl1%tltύ I?9I>S x4n^ _P ">4AGqgpzOc$7DS ~_ /OOc`g篅t=#QgrD8g gir'DxV"CmZICU(8vȉAč1ǙyOkm;N:%g K؇I UCN@;"L?BdWA&9YCCy+ʎq6 V ˢfnZ'N,,7'Trk){@VKH_ngǖC<U9]?kiG1mx˗8vV'~ ;ʥ ]7s\ 18vsNr_M>5UV8mxNN@59dyPRX\8S\Ü9 \q*2"+R@?P "Ać8v!">:T8bˉ~T՜lZolB`4uŀ:rjg|-!뼊U?%qg,ɉ?BPnn?o%v9BٟxRnUG%scW@nùUSO+eї}=mq?bSٸ4;~GFFtc?n8Hg<`Mzݼ@)Sy)AG8jq PT?|%Up*'9!NûSr8qdݖɚNАwe/d\sqشR̹Z 18vY!fyDz!)dΤ_B ޝfWN.(} @;"o*ědO̅ (vπrSL*xu8>eu+LơB&$su݀*,tu'jpxԦ19۱<'ECp&MYX)ovA*3[]%l9 n8 +V)g`aNOVBe('Goɷdw}HܦC\JzICӕI$vN vegs}YH0q<.UVr%WKa(e ]cP ec}Y7@z*\QqvhZpuV.]e?!:*rk;}U9[C[<D_[4nSqsOa`7ѕ'Y t?qwE98#84sK}3B">4ɉrK9u\@BCcAć;'^|UG`?C/'*7,l ">:*rsQ!_">4ɉ;D">4D|tȉq Csœ84 18v!'D 9q CC I%N;įk9=ɿ~8+Ѕ iF[bjNc$F_~8BNcEeg?@9qEh9qPL PčN.H(ars\}IENDB`uDds#< , C A,+b @P T Onn @P TPNG  IHDR]gAMA _IDATxݹua)Hџ8:NV̥XDf)@7@>2~@_B5/ۭbUhjW2ya؟z/{E]'wuBq;=ɓ6Ah")<9Au`-r.X.TCFP$O5YSRr±P4zr e}0ߍNYK%OUE2G|خYV>ƽXꖸbŮ_]~ލ3 y GC]N?: b{u]AoɄ}M)2wi3w#ghSZut*կGN *Q'D?Sٻ\"..^o|ib,q* /FG{L/p'4 \f[b0 5XT'TgJ#Ebn&jz<ƨk%Ƹ4TT'QP$ZQ#qi'.mpBb(bʢ9Q.prt{jI\w3ӷ+wi `Ry.7Rw~H4 ߩQ{ rPhKyna< ID5:\b(1rUDP,Ui~߲ &`~ءT^')v\@#Ew#]Urz=]*KE2IDVHs@yz=ߍP':hT/1z+0W ^H=*g7޼8,fݹBԍW @당Ay/yZ&=I}|K!wZsօFx!uG Wi|FК/ !=p4r\@#E4r\@#E4rm.K*Tvz=Y%2{ޓcŽx׮B50a-I=жc{m\/nI=ȶccF.h"F.ǣ|*!$+danI}ZE!;>\RYt<e<يZ̝dE,`?KZ9lAД*N2Zok6N|QB\#WV7wJ杽.9O`F[soج%+(jGd k?qr1%HjڼٳJbmh{̻6oZAΑ(geu-R(2Vy>q}RFfy[{kmcaFoL?܇@j ,l]]EY_,\sgZW\h-ӽ TK0+3>􍵖ߥ5QzkVyTyV($xrc:2eZ%?kE.g+`E4dYn~"F.hw0\ڵh d.Il px׮HC'saObcŽv> {[E4r\@#E4r\<xrGtE4r\@ᗫxz=N,sN@uEof',4.uhNu#BB|y;FsJf n#Չ֔V(s>GE'鼳8 eyԺO!;sH1~sIEw7otk;n/w'erėP6%3{?OnRB{}6"F.h"F.h"6߁DvPT M; bnB.6^ i0 m!Xg00 0] z݄\Шk6%nE4r\@[mC:U%Vݎǣ-5S q_īa*nCZ1h\97mite [xC]zѻC>GO94l5LXI<ĺ 7*W>Tg\{)͸ [(C_㤲63tNi깻M:}X/evz;,juf?6”y 0ia#kVH\[DCG̬z.*)5lxf?r_-$&u)ڀې+zB 8wsj-0VG|}Q dfW^\ږefUAM'VzC|ps}fS4ӚFՒ!)]fj5mأ6mnR`\4j7D/y KUչukY7mѯ)|V pit59co؜gBĶ宷V.PK&h=[h%t%jsxXvj[7D-Y ªg>fU+X;5g.mXr{[͖˧MHNًᖘ=_h~cxlzQŅٰCBw%rq.\K{ & =N p輫%tw@dMB,:tj(~9Qd]jk;r=l95I)9/Zx (EsgZݦZ{Q \RVy"*cjkBnI|tMqyoHYjX;$Q|A]'MY`#Vx~~nB'!v;ϏoDC2g叵\ޯ1]n}k0if?Ta%K}7)j z~E}/y0W[m7^Dz\s^[]+7Ň3^e9 izn\@yT0]E܌Z& p^jhu^O^"@}tTG.6\@#E4r\@?r=h'\Znq}xV=hE_BkWИ^QrIENDB`xDd3 ';=< - C A-,bAk[}'jnnAk[}'jPNG  IHDRiGgAMAbIDATx;v0@Gﰀ,T).KtY2, E?k[;0Ȳ둄0qE;8k)0 O>??Wl Sk7N}sֶ̨̧;i0M 4Ffyfm,^uPM*%!U yEltWbs^5RWG˕4,0}i4jHA}#&>B ?U_}I;{(R>%tB 41L𦭁KX 9; մ0D\A[K '8jlΌtKS@m!#t.sE(k1tod늃.}&SSdPGEig1W@ q8+_  m&ɑL28jsqaAؔl 5i\Sˮ B)Pϫ51nbñ:SmXs XLSODx8䶅i2ޚU_k?07}D/#îuͯۡ靣Oĝ^73?߸ThM[{U[q3XZ.׹uبZ`^[ { { { { { { { {tABK˜R"_åfR'k!V[ nXmMRj䵠V[xM DzՖ&kgE)ߴ8^CNVhիh n^Hzde` 3N񩙲jtRyZO^Z(#crOWN4QxU+WK*zxlWbNߗSÑAj/[6r-h&E % T:c VM̎Ss%pX$VHf0v\W ^{ gt]FYKʫJB垠Vz.d×W\bZ\W]BВu%״Жg|-Վ%AbVE?-JdV}ZqZ ZuS,L+,&ysݰdM0RSb_"K]B4a4a4a4a4i~:6|I{*xX,/Ǘcu˚%ЪWXOe4;h;ֆWH2|5l^7ф҄҄*q}K4y7GX* -Hz/9l{|^i=@ЫPr-?1:Bh!A7|e+M+Mί>$OWb$Ӫ絛iZ_[W{IWio\JQ{aZ?&V;pd0 aĵIENDB`Dd$ 6IH< . C A.-bCzʵa??ت<nnzʵa??تPNG  IHDRjgAMAIDATx=r0Wo|TnQq#sQH*7YHBo2 XIb6 i3!u OH˿OHAPS }uj1&` `"|=)*ӢlH!0K IDx[mIUDzM׺_%Qsbx~WާG:u]׵;X_oyw]xnF>a/NZ_ƺi&(#^Jlj?Y3DlA7nwn׉ gϴL;Me \apMϊ-A/[De؅Or<ui"=']%O$ /O=x3ɟ :0ELן]/ ͨaGS *zk{9YhEJ`DW7*Wk6J\r" 0]sPFF^]R(ncȍ Ic6;ie"a0N'>7'OZjfݲ9g. &<2?kW[ʝZx*UoQ΍BQe[+S'=u pm@[!3TTTTTTTTT?O b1AH5גuX*խӸ1͢>5½3z|GTѾr4}ߏXyDL;kt=MT*b RӚ 9[1>̈S"q=RgiIJh4yGԸ~M`">o&d[z'/VeK j~Po/Aݪ\r^d7`,RRh=4>VjUUS;rճp%I/^[{QjGWtZƼKjŇ>FBwG]C PI 5EIDᎠR|,Aø^`#Jkm(TDٙT&N^oWƒxmeql~$N{ncBy7!Xcdq^41j32hFf"5z j]h>GKѬ,sCFst y4uHsK#lӄo4!BH*BH*BH*BH*B {Hx7we*B TN[ܴ綪q,1pR`ޮ\@i)UM Qz}E BRBRO3UrkbObQ'u_[Nݷ-EvRlRmL·&R|F|v IJf*ARBRO;TRMRs)"_^2묪77W0ޮ^"_ IEIEKx<:"!9@u[ANV䵝 IENDB`DdB OQ< / C A/.b;὚Zͧa=nn;὚Zͧa=PNG  IHDRh,(gAMAzIDATxO0;<Ys#sQ(ހL$@+hC˗ :ڶn[J}%;-yr)nǾWC8c 0H"T|i)J`0;18OZ0.:s[[1f_Gz.,P0.{.jXm۶uGt\2?(+""_1Z 2u@fǞ~2+?b$dB"KN6MJad,{q|7¯^P6[j8X̘9jjEJ \wM J\ld諸xC3IE%u r !I3侒+h4QAlAR^S_3 }h*7nQKt:H)RjSˋ2o T%є"nL#bW#Fg;o@%fuDt0 ݎhK^k[2}jt אm޵PRCt"!\WPKpV$q ړX :WX7Dk x<6-$-ZHZh!iBҢE Ib:u*'(#]R@Zũd܅ ע%Fq\:IƝr-Z!"|y{t|Ҿ8_zmn[֠"q=RRvͶy3.ok]e5ǃbW7|ZPNJXrLf%ʢu҃Z-rG^Rx>e@ʕ(U\,UOSlH3F ү[S[Vcg|>Nsd_^ldܕO8'xUU1鮲գ3rGPSO=2a@Nt^{\8-h@ygU)A[v2 ̵'O6KUK]{C׽WF^t$fc>lOaY ע>r9}w[SUZϗ<(;Kk~x`z+0Ib4 -$-ZHZ ̵ڐoPJhfTRZ/=OV[O6;4Di?*&ی)[KUv"%ZHZĐhAkQ>W6i3ZJ_\EmwHg>i95=3Ȅ?}<K]r-Z6җAD0 687IENDB`DdB 6$$< 0 C A0/bG= mB= #kȮuu7ѝj+M+REȵV$q&!ƝXZNxRoxRq0Q{# % % % % % % % %M=%OkcYk  wdad2yT{aDV+vN V Xpvb~JHC:4e#ZjN=I᥈VKYI4'YUZS ։q3R:ȶM?3qԔoUgf 5WC*ݩVr,V}wLstu2XZ-rO{`T]Z7@̅5f <[+ׂɪ*Xp y)Z]!6rG mZk6fۙ`%f $YWz|W>a3iNWxj-zL4gdڤ^]㴠u58tQ:jk\X2wh=qIvlO%T2]MHuV.B~9?*Y,|C! d6w&K!",,,,,}1rͽr:yEYKVr2p#f@ AkF".8ι##6ZzO3]zI놜Gä?U5(r:p9a M@̣Vs׍qQsiSAϗד81e 'V] Rt5H EW] Rt5H EW#}7-D4AF(Bg**9O;$jo,>JeYqsVq(i㐨{yXQAo~ȧLјQE@$uM MrySU؇gEWN#(LAGM\KK|r%^yb}yfF㺮SJ[AȂ9 qo"ڍG޸qAu,iԫܓT/z7NR˻iOLU͆_+_*hӸ]SYfYbGE˺{1kBUlf*ZڬǼT$3g'7,>ØWpnQP%^'ԏҖrwNrucF 9O`r95mZiP-բVSL}RE~4$6Rs.O$ӷ5I\rAJݻCԉh3ʫIή4b&!oRn,a B)j1ӝCN`2E) 7e.k"T܊sYRp8J۲fH+xۼ;2܊G]V4>LcbۜLՓ'yGGSHЌ0HGI5ɣ#~Mm>v?ƑğߓS:LMt9A|s-3|Rld}94%4LDn'8~8!!-A4MEE;QW"g*־cNm3fmDlPTk-SӎM "9fsd,BlNU47b_iSXhQeYk9OY;Yt:KCUE/ܙcxⶂRcI /puyK-ojkL>ɶ.qxޣOӒ\TC0 @4e&W/-:2_n;ȶq:zwX6uڷ.,VKczu oR~elŁr(.c:)}.TU-]J ZV֌F[)[uJ˽LgV& =sm1~/][i9(%?a3׸XkG!nҔ ϓKB۶Ru/dZg6amZ8:wyxt?DȶËE}QS=H9 caʴDN4[i?]%yzN"rOg^"} Ϣsg9y0s-hD0\KGR}7 Z ?Ȏԗa`-gVR3?*`ie,LyaϏޗ4ֲcnB_֒_`,?3)*v˾"G|y QRrU/C95y_( 74> e`FN5D :1mT]xϼ2_`c _^!_`,?32KXK% 02 8`>/ Kk#RJW/-Ϝ/4GR+AonIENDB`Dd$ '?<< 3 C A32b;'lmnn'lmPNG  IHDRi@ݰgAMAIDATx[ EWʚZ26% aDG"^/`*}߁Xm^9}$DH) Q?c#Nn/w1JcJnyb(QmPSESQ:SaϏCI]j Bm6^?Qs`$~QWݧfeBh9l۶m[<1?os H,F|.1`L(X#^ O”9ڧDBA{K:}Mwu/_N ZlOKiy".k0W([yyA*G.(db>6P)8.T<]{S U.\P9k/n1W-~5g' }05mfSltǂտFh~Q9n{]EZ‹ôK(rswj5W kdkLT1VlOkHx F }9:7m4fM<-A Q|>:M:r 5ԧ>ysC7oE5[,tT*0A̩؍Mps\ ė;_o͉Q(x $ꂐ B. $ꂐ B. ׏reʉ**%Cw35_To.%:}ڙj65RtI/IQ6=WY{>ڟ Flz vSC28Y;sWT˦f>rk(LA4fŋn~ìmREᦨwa9B;b[AgRmYJyKfɩЫgJhC)Lj˂Vu*Slzn2~hj1iCT!d3Պ+>Ն E ٔs ec=k4mZzo|jz˞fUM6M/{SG&55knhjAkm$7,y RqQ񝇈)0xx:;DOj-lxpRR6Z RM1 @UYW1'*$6Ssc@fmF}Qo("#GRD1r.?j;9 Adj@SҝRϪyu5 ER&$% $_uAH!QD]~/sWaȐ{d׊[3W谗 P skOM{+5mcS_ggeE%z[4t9 s(O"NK"*Kf*2u:2W'SS*-*u>E-p$+9u0^a,"cGoHUÐSqާZAXz022T/sJo>x7Ô4S'ݧ^&s*5)SD]#y} _rbnIENDB`Dd 'DB< 4 C A43bhhY/kJVgnn_hhY/kJVPNG  IHDRiYgAMAIDATxm a+Od%| 0T׷Q fu} !Rw Ӏmۄ/qW{Ƽ/+;uLv'ov")BJ! , 3QHɴ%b4RJ~{GxhSֲ3^jڑ9,Kpix.yΎ!uQTȣær@ˢ0ؖu]u͗r'w VpJQWM͊ s)\e <$Uњu)S%e ZT*Jp؂{R%VZ4mw"\C;z tJµ6y[ ڷō<W?SrFV&5HGK0!& N/f8(Bn({L&<3\JNnL "v5 E) GS)?X_>H$La٫@\!hLI])0Ro5i)nj~~~`Fx\7T}WTԽD)ƑE ra9Ӟ^J)E#R|gn:wɱ`Eg Vt6X`Eg Vt6X8F'u^IEQHԲ,Rc[<B"˲RuJZ뼖 -ʢRQ,*t#1aMk-۴ŊfTjX5wME2E3)PEi5bBiږE,673 nƠZZ!7f/~AW(P3TwAw[4ǷEРp k@iL;S( @~Р~^w,E ZwӪsdW:hXh]*1=Eu[#6=+B8TZ˯ZϢۥ'Eo0VlNq=tvRCENfAZKl6UZu6muP 7/f EYfg2)l:Uҍ\8k?Dk-L5Z`9nݭ wK#1 N9EQRJb#d9{s1/G ޅ ك+mꊓDq]삻f:ìeW^E~.%w z鈴\t}(w.GJxl+:l\m-.ST|7#yX(05Σ13Ŭqy^Fˢ.<>;G敌h<ߑyV=2dWV9c+LvDG$'O`;Sfv{N ?4iQh`;⩕zLmv&D|?=z'?WV9c+!c+!c+ [Q~!aH23 C^<x>?y ̣oa+:_QIBL'أKRy!AnIENDB`EDdy!#< 5 C A54bKAnEx}nnKAnEx}PNG  IHDRt3rgAMA/IDATxMr:aVQON`t.2^ ;A.PQ*c8zU\M)L(RJ; N꟥'DfR!/7UjUJ)4G큔ek;@l-e[QJ ):ҵPʝd~MjcxTN=Zk,&/O7UWT7Acn__ʋO}_rbCU1Ύ(jκLkRкqϠ[ߓ;w6C+׫]ǜ2б4O /o']]nx|ѕ ga t,JE}Ф|Lst,:SГ4JvW^{ t,&ʺogn?#Ƞ1|_tՃ{?ɂ)=#5Mi$k L-a<>xŋL]ŝ4Wxj/2?;pϡ =ǜ!Cߗ~7t3#吏C>RH9#吏C>RH9q9) &CAH9{/t9_컻.Sen{p9u?#wN1=Rκӹ_$E92E9ԃ徼}bk 3wݮk^<Pyᦜ#X_#~}sw]/ٱMSh:hs)J_3SX>_BOXv^?q"5]s#O1QXPȾ܏rQ)gafVLSӏ##QRNđ)'HMr"Ņ?knμlVxp_5vb~iH\]כͦZIE)iI9Oj\O%r-,9n/ :5Grud {-`互J"0R+orʃ_P+;#g:rб@>RH9#吏C>R"^%wArMpl6|(cra!)|rG!)|rȗormZ|#/u+ͦ#ה璏aO GFztrO> }B>RH9#吏CX^TEo7{"ZYNYi-7?Tso3Z3O Zc-w{ʲ,tRwfַ#g?c_%S [ yַ?Dg ~#0u.Y7TI 7Q!qXk;~Who[y2և1 P k)=Z d۱t0fHgB!)|rȗ hU{u] .җ_Q!4lKX.'{}yP!ߛRxtIENDB`Dd  !< 6 C A65b#*c/HeUi.nn#*c/HeUi.PNG  IHDRtQtgAMAmIDATx;:K;Μy -/3gt"{)7дF֋W `(U`"-K@JIDj~g4,rƇQWAFn!!_+#)_ z P!*lVvTx&)KFdz=iYgJ!iUq8*k)){]z1cPu2J*"2'?HHocji6i t⋧몪R'HJ4RźSt5󳁘QCdl*Zma_{Z "|3U7[Lu6%%5OKEۆB*Xm!Z;k֍ G˨4 mdxJ|x?t̥*E)0NK6"ѓa -@+:2ө8-OF+\=×Ԅr񎪊It7j {@`*웉[9;vs UfSR`J)Ϟ_.@F=6V%S!_ʥ\PRL%U=-7AKY7}n9X Λ}Hʓ}U7IMR&`ּ^/3f ) $3`@RH 0If:|т癱7^WO):yA@R!T+?sp:8 (fI)1=npw8%sQb2nU;&)'bTt@\t nmHrQ:{Z^ʒW"v;xxkFz61{ۧk؀N5TjU;. ed#)qcBi),ו[/TO7{eo~ZgvKʜT`zx?RF%/ 喵M;U1E;>`0I &3ȥ3%žvZCD" f ) $3`D;!~>y5`0#^uܮ&xx>|5{ޒ*휏t}\2 NJ;I:~2t&&a.5R,ӃI $3 sJ%cZ#9uRZM{TRRB $yE39rPPxz)J_MgU/,KS/h_&i_堭N!fb]V+ߌ-j M,x'u9/5`»α9ZR[]uz;\%yo.:<%c9|0x 3`&a.wI*I[R1`1t. F9#ki~'f`&7jOfpKEDrR}g^ v$`@RH 0If ) $3`@RH 0X=O` R"R6-|GIENDB` Dd< 7 C A76bv l̇WR %nnJ l̇WPNG  IHDRLqgAMAIDATxIv:w7dv0,KR؁/B*: {VS}\"9oJ~?%LMuJz⟹ `N/@ν{RJ+M?<+_ s? rb`|Tp}FȊ &!&c(rѐc >n1pj* d4黮ٟ`cLSLeUO,rlW|8h~T3֭C%=Bu $B,S3Xp8 S_1кNW'gge)_Ac7 2ҹȇ#9]w[z|jN# Zh|FNO;~-ng*@sˁ.TLj1t; &Pw~#!]tVIn]Rmq1ſi `yQdyqϘ *27o"@ˍb`"2Δ>1x҆V=WՀm1z>qNpݯsS>5Ҙ\SĐBtw&4V̕gJ4@1sCompObj')ZObjInfo*CONTENTS_992419295&0-@%1h4{?4{?es prior written consent and advanced royalty payment to use this format. A violation of these rights is against the law and Banner Blue will aggressively pursue prosecution. ) Copyright 1992 Banner Blue Software Incorporated. All rights reserved. The OPX file format is the confidential and proprietary property  \  \@@@@`Name`Title` Comment 1` Comment 2`"r Bl8`@!d ""$.,"K,%%cFHP DeskJet 690C,HPDSKJTB,LPT1:P LaserJet IIIP,MSUDHP LaserJet IIIPd ]  @### ` @%Arial%Times New Roman `@aaaaaa aa a a a aa` @&`@aaa `&` Binary Tree@aaa `&`@aaa `&`@aaa `&`@aaa `&`@aaa ` `$#RSTZV@AB@PQ$$S@`Root@aa``@aa``@aa``@aa``` @ `AB @PQ$$S@` A@aa``@aa``@aa``@aa``PQ$$S@`B@aa``@aa``@aa``@aa``` @ `AB @PQ$$ST$@`C@aa``@aa``@aa``@aa``PQ$$ST$@`D@aa``@aa``@aa``@aa``` @ `AB@PQ$$ST$@`F@aa``@aa``@aa``@aa``` @ `AB@PQ$$ST$@`E@aa``@aa``@aa``@aa``` @ ``@`@```` Ʃ[`@aa``` @ ``@`@```` m @%1h OrgPlus.4 OrgPlus.4OrgPlusWOPX.49qOle UCompObj,.VZObjInfo/XCONTENTS FPBrushPBrushPBrush9q FPBrushPBrushPBrush9UOCF i(c) Copyright 1992 Banner Blue Software Incorporated. All rights reserved. The OPX file format is the confidential and proprietary property of Banner Blue. Banner Blue requires prior written consent and advanced royalty payment to use this format. A violation of these rights is against the law and Banner Blue will aggressively pursue prosecution. ) Copyright 1992 Banner Blue Software Incorporated. All rights reserved. The OPX file format is the confidential and proprietary property  \  \@@@@`Name`Title` Comment 1` Comment 2`"r Bl8`@!d "" $.,"K,%%dFHP DeskJet 690C,HPDSKJTB,LPT1:P LaserJet IIIP,MSUDHP LaserJet IIIPd ]  @### ` @%Arial%Times New Roman `@aaaaaa aa a a a aa` @&`@aaa `&` One-To-Many@aaa `&`@aaa `&`@aaa `&`@aaa `&`@aaa ` `$#RSTZV@AB@PQ$$S@`Root@aa``@aa``@aa``@aa``` @ `AB@PQ$$S@` A@aa``@aa``@aa``@aa``PQ$$S@`B@aa``@aa``@aa``@aa``PQ$$S@`C@aa``@aa``@aa``@aa``` @ `AB @PQ$$ST$@`D@aa``@aa``@aa``@aa``PQ$$ST$@`E@aa``@aa``@aa``@aa``` @ `AB@PQ$$ST$@`G@aa``@aa``@aa``@aa``` @ `AB@PQ$$ST$@`F@aa``@aa``@aa``@aa``` @ `AB@P Q$$ST$@`H@aa``@aa``@aa``@aa``P Q$$ST$@`I@aa``@aa``@aa``@aa``P Q$$ST$@`J@aa``@aa``@aa``@aa``P Q$$ST$@`K@aa``@aa``@aa``@aa``` @ ``@`@```` +E_99349602972 F@`> >Ole YPRINT14CompObjZM      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?  ;_!_ @8 !_A 8@8(8ObjInfo35\Ole10Native6LDOle10ItemName]_9934973549 F>$>                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  @BM66(8Ole ^PRINT8; CompObj_MObjInfo:<a                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  '*  ;!  !A l(lq- 3  !       - "-$@K@5K@- "- Ole10Native= DOle10ItemNameb_955275775B@ok@`=?>?Ole c                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  @BM66(lKVy? HH:}`ݫ#wI٢ʥ,N4xa)ap5l"}l::Ay̅Q}Npx 'l6`2E@4 D }@{S! =}" F!C[oBxvo}ai*L!gvw߾!-_Wدx8]GُPy=JFn@(ݲw>^FȎY:j_ٝZ `^Rk_+|h:4S!h h h i(s>m*x ,MX}f% օfq>Ѡx涠 ۦ}ez&P5@@4 DS(6!7hUf_o8|nK4l0{ܪg於wan۵s8.Ҝ;<8% fLRΦɻW_I@_4|wKf4DZ5ѧ+Zs%w#]ǡS &]Lt e7 0"P2ӯHH>q^>S֬WV#؟&vDx+VE=C1SIR`kʎ48TJF|)8@, M7RzȁbϛF5 W?t*d ›0kKh 6S c) @4O5 9ySJu]7&?# UwIENDB` Ddq< 8 C A87bF)A[i/nnaF)A[PNG  IHDRڻ"gAMAIDATx=v<a;Y,iNBG,. NKJ4B~mKXv̙?$cr(II).|du6/TIi:fKf$8oJ=]ɛ, ''֛Ƀi^tZ9ycu&VVO&gjbG"VX_m;TTba0Jb^WB!Yf&0&XKtMՠ*r8m_k.R_.󬎖?[b,hVmۛE_.KRu$`LqQ?W^Zʊ#4Z Rr`1+ D%7vwQp? .*~@>??cnC@"D!*QD BT_;=e1`9wQɛ@R}*Tvm6&~M.QDƌUz}?/k)sTtHWp*3ׅ~uVt)M)l;_iF>eI0 7-JF<$#Sd]tLc^2v)8׃= rre94)q0_%(!ync=I?׊hv'͔!ߪ8)2”ȱnbMɠ`RGJ嬉3V >FZC?.Ԁ82XS3"D"Uy9Aę:9^9;`~Om J9s/vGDrBcs4Ws-ZX_K~NlEBN>BNJſW!'3nl8QcQpl6f8"E->hOҊ߆BԀ&%fm(`?BiH+~KZa鸹 ԓ/ce,rX HdqMм±JvTi[짳o"TW(„О7VxqLI~v`->`J¸TjQ c&' BT,u nCQY-nCQYAGc@"D!*QD BT +) ޘ9лKm}2ew(vk.ק 2.[v\"D!*QD 2sTfY{ZĊFA{S9[z<]F:'1}A}[og<5dp,ӟOoiܝߠ mQM6_d j׫K̉~M7'Il.LB0b&rTr.gΨ8[| NJL_3a='WcyF= !WKl7Ubۻtoqj;lL͛})y`K+XǠ7ts[([r|8q >H N<#_pXavUߠ-O:yUtӿ0Id㛄 3`@ BTRca_h,JEx8r,{}c? a=zjU X.lJ0D BT@"D!*QD BTk>??P9Z@I)ն"QkIENDB`DdOO< 9 C A98b& <fy ʯ8nn& <fy ʯPNG  IHDR0uF{*gAMAnIDATx=v<a;Y,Ůt鲄%K)?ϋ3gx<*TU:KغRO`W[~m嶏4}g|B˿ w?wI\u]fihǛ[3~[ojKܭOUwHd҅646q(o̔Ck2ީjMߚT{{$trWX`n@7 zoz32C;Vf5:~?F^M\ȩwo_UmMFZ!Ux%LjԬU_2g%P&I/=H圻BnS&V?Э-o.#r;Y=hn=VY,̓Ƽ& +6O3emò Yn'dlSI/F|<5t;MKhy/f^Ӯ3::ͳs&62xzgʝE.o95ۼU8}4XWx<w{~ʹm3hf?{plRWB%JmoH 'ݥd\!' iR947Yǐ#F4'uF ie-iei|-qaF l_3` \:B A$ ! @pHA>fMW,  ) sy~y~}yvy@J4OH>>? ?ոl=j?0%&ʎ1I@ B A8\Wu4kA\<$E J7qC1HJȇb-R@u't&rȕ1alC€HPW B A$ ǐk·\ ıR祻p )7/2* mwwg,)w.2vYA$ ! @H@ B A$ ! w_ץ@Q!QRu]/ I/HIENDB`% Dd/2< : C A:9b EK(R^kq E@nni EK(R^kPNG  IHDRA= gAMA IDATx흻u8=.@HѦR7YʜM)R:U:\c`>/}LJ" 4ULNӋRx<.m ӶRp4gi`/@Wc^>4T(T=_t\x4l-ZS[4MӕiVK$a-WQ/< s:Xi!4) [M jTffZEϼiL(k<)ti12Z)WlUm]XLjα.-ȥsKLM~;R׵}5¦mWҦ3U]?Xt:s"nڦi;nEt0e=LSY'!݈u4}]<5!C<5Osh(gXh';qt _M#!CqS!c18Bb^Z Us$bD#ЮmWc NGM+5eMqi84ϻ~9\dH.^SSj@~j z )h/V`8$cN9:I(2&0dD&e,Hםy]D_ZmԳh0?׽?rd30Ih& ?$IbfM<٠a٠a٠aٔiyrBQjL ZV`~,@ý2_{תi)cնBx4l=ђxH}m |>>vㄨވ =KKw"7@(:)cixsT;  Ö̏^5t Z           f5`\>/K _K`ߟ6A}߯m4Ԭ:e a!-K[04 l[la/ 4 4 5VKzkTgDouSs8̏___d<].ɌF7C pdk55ؘb Z"9a:Ba][;FvT͌JY97xR7h]utU+r+@+3?IK:<񰮚=%܊k ݫ&s Kf>| E(yS]Z'0u6|}Jܺj xKבtnuhEҭHpDMlNn~܍XN2]Ӂ>m~U#dza75f8Lf;ZCD[! aY, ,^K/O4 υtźЗ /ֆG e@d yQJmO/OIENDB`xDdZ y3B  S A? 2\eZEv]OKn`!\eZEv]Ь@::xXOA~388φ\@DKH6R$$hB&K c,,,imCĘp쮷Kf۝o}3 RV`E>K7eR=%D @":@G )u}X9Fy G)ΡxCwYVpp%U^yJtY&e,W (9<>AR7q+9h}WHǮyǮxf B4s%EUz^3.aKFt1-`= p[b"V{80؀ﱢ )P75kO>EIwT9?o4^c/rr ʥ2' ]*'Iw }_FEhs5FPqT/)Of=,)\c֬8Q2ԑ4v]wg\׺ws֨rϺQl2nE ^-]׭>ieϰT-DncjOiZYOcѹ>HVKDRc''V|GP*tUSBkZZGNn0ݠxAIb7 &_QϞﭡR*z78J1Fls[ոW8F;Ѡ|KZMAftɧ14#}4V+Rl7"#oam^w0G{Ժ a WXDd(y1B  S A? 2S2BL:Cʴ /On`!'2BL:Cʴ 6H1@::x=lE9ʼn1a-|QHPRih@IIXR@$$|fvzw|}{7̠)<}`⛧و.KE7?.y <z &nJgҝﱓ޽Zmx?^ՃVycm땍-~0yCk돕ut3:37͊ߋO 3z [^5F ?s+hƫ+h9!C+p|NE?Vɫ%su硾KJϠ}_$ }nU]>9_SO2HVIzytBzԾ¨uh)j?/җI_DaO9_gp3#O"OgI旎I^#e k=nDg`Vqf8w ޯͺqĺRLWޛZY>uisp-RP@ba?>^n>JoE3Ȝʧ'D,y C{恘Uy}٦_JΡhGVq;9TtCŦYKg|,$7l&>ZQl/=)D# ڡ3sdGb.%q<-;y%d폎)C~j:|O㚽C-Сz9RamSd`*;옽MTXdGZXW,q$+x>y4RɎ:mr%D&-My${ d#%n9"^| Y4RɎ9#[&4:2'3`$=<$;Ndw덯Ư6iZw$;Ndw=i,ӻYK5x"qoIN;/B Vf?z}#ɦ8~wʚ{e<= SD0h>xڑtJٽXwƕEٲk(V򷭿iA!.mn_yIh>zƑLJ>/YOΗNDݼ?^ Dd8H@ ||B  S A? b @Qu` 9nx Unn @Qu` 9nxPNG  IHDR8gAMA pHYs+ -IDATxٖEý9\3Hh`\:A~7Xkmkme1ȭPUzܷ}|Z paQ[ @*-l[gSt8 Oy} $AB'掞 PfuJ =A*;73qU*@*@w8y許' uqPc,H!sooH ,*Ԃ^]z~T/3 PϢB`/na  w)o@_UwP!G/,:G˿TYT@XWCɃUJ*@ lD2E 5,-ԏx*+ #. Pyec 9K?˅#Axe*x B뚗W?\EtaPzk a :QՋTݲVDQj>YE۶thYdN:/J٣E'Dv{\Mi)2?luJZ x#mD^7 UodLrsG[TܧZ5>sM }z02Q/GD0`Ͼ)KO$^ ȉQKD8m܎2:#jSwtvdj:E eK$ΡԕV#%bϒ3Bĺ3QR]X=Kz|R4&92SW0cD+x -ZK:E##!+[3YZ 6NC<)29.9  /C_է>yĨκ/*VrُL 7NeF4)j@h D+87@9*!9"oLNQk,78p4xnާTkE`^GI"B#*Mz=0G] гxƗPd K;RcՅ-Z8}r!"HEʞ2zu՚'>܈Q>]+-M9{'m/Y~ei?~ST\gZOo/.NCeF2DBbߎ}r)ʘJ::tq#_bq7NUrj:" YmJwFΊӘ@w13 .V}.} 3Q]csOUۈ\*NH^i5X(Od8~@e7^(X BnCEJBߗ+M#4Y^dN`*trVK`d_r7(SEɭZQ5:߹!W )"պT+B! _g2Qaas봳<I]DDuѬߞVDT#I nwn(#oa7^0BZ(q;%f\ #B5 5ZVM PAr5ֵS&QA)e,n7ؚ$9QA+5z4*>vB@PcN1gJgl@Zv+@PP!N{S?}A"T.SΚ/Ee J?~od3jsVYxcDTy.zY*@Bξ=1"*@*4 7<1 mx8̉3m@@Ќ1 =x8ωsl`{q{|3A0 ͨ|`  ,&?_ձ~0IENDB` DdlTB ; S A;? :b  ;%hrK7- )bnn ;%hrK7-PNG  IHDRlTgAMA pHYsj QIDATxі*ESC*Q xCtZ |;m\ @mm? @`Rn&Dzt$C)g @-3d@`j2bVش `v߉8 KR~X릳| 4( ?skHSA*ԇsrRWO#!Ҡm)$ M!2K:i?ST&tEOT @`q]N0 6A|B86˧ :G3 p]SNkYL:C}} ~?[ \ߏ)_@}=\kqlZ^N=TɍNG @e} ocWBb 갴P"@ܳ~kyUK 6k/&Ĵ  7X@2 DG (M @h5 ,JdN :mYD (2 @ ;6 aQD D UD@~:d3$_T}-O5DBe 2߯r69eT*_H$ed .@66:x~-)@^F;,Α܉&@= eR%۵"*J_>8&&yߋw Ɇ_"ipQ]KLJi3}y5skȎRiQ{~!:9Cʤbq)R"$;t&C_&]cy'7mxêv9`C4:'I @|dVb媹W~,/W'mL`)tU{..ea> wZ@b=3TVjZ-8~T{ Uw"ܻSN[o9BALזSKVYʜĤ̉3 餹'%}'QVֺqCɃ\A_֮Ic 2ig85>.;}qO4_mċ17sLS6ʦU'r=D 󜫃*~l,GPTi{av5:r'$v%x HOi<}|;a"gA >2e81})=)c$)|166w,{Gd3~طp8w]DpQ%S;|{Wz#Nn(u]pC!F2"@1|Ȣ=uX.jo9D S{CpF^^ޙ(IxL#Xw>5](9w% /O-zć+,s`:9Jstym!+Sx!@DBo@naq~ fəIr4vZx/z^o,]Ywx'_`XE),kbVZ Z{Ѡ)wkE%fBd'Y[ݸ%+=?[o\rFv dqw l \ 198;[w%^de<oNfAtbZaOM81-">v=R,Wei>?B=GRH۷6̴Ibr='Ϊxѹz|ZiA}ϔK9=\ܐbLVgWRI62#S<*?y[z19=O/ Kfs˯Re'36vV[~\8Lx0epĄqH"ai'ϭ3DYuyej>o}3m!5?H}J歵& @<3*l?"^gXIENDB` Ddj$ <  C Ab5 nIeFE lnn nIeFEPNG  IHDRgAMA IDATx;rܺ[Z‰J)2-A͍dggCERƃ W.s)|ۻ'gG؍cW(eQ?aA)yzG=s,s[RI3?`TU}b1n8Kf89QJ'qfi!nE*M)O⚬-n;{QK[*9kZ`KT4TyC*reycnȎ7L1$u(_S2E*{e( .K,|\qa?UqJfc4jDYik+[3ȎT-y,#gϜw o%S"BL9);k!hnqe /RցQYQsEb=ILEY++Ap8%.Mj.-wBZ Po/'HK5rWs+V#͂FV`AƊ9S,/٧ JN{SK~'/e$K@ŻxbŔ*GE:.k_ż.)nq">o?$e7?q4+z"6 -,ae0 [} ) .v˿jfCc髳-ٗZAw\I?xz|uGVډ]~à.{K?ڻ'KgI}T ajE"ޣb-:_/xKx9ħi Hf2,-= eVtbMYDL7}Wj}ŁQ.\yknVj4з8 $AVkmN󭱃cu5g4aq쨘(ĺV6tfzݢM(e68*'f VdgDvAx{؄5vn}`Η-%ı#Y]$P'԰2ױv8"J4ߞd#+! mv*2wIC4[}8~$T&bZ<dm U6x?|{~}P yg}F/wT="(o֭J+[ZCWf"f-+e _%b9-'USˬy D'*E6ݬדT{wj̛DяĉX)BO*PMs\~%QU=Ƙ s{ ͪ>z[g%q d.`e>\^Bax1@ U$]iެ'8C&MugYQ!;A4 qC.J[t:YӧxE3; ۊ݄ a2o֐jf5 4 js%i}$4'h7W ͌HY{ZidԂ?{᧒{~,[ЃKcȴh q?֨Hcr*^3hlفcS#S 3Ҭ Qk9y3-{{{gSr]UϟWV)|c.M;*ɻrNA@s q9Ժ1W#|칆y\V{hwԮnj⺮펚8Ht$:΁A PBl4Ƀ61NB=/q^?x՗\BfkD^iWp=g׃Y`ͫ/UN]-^brT ٦/lr"Za`+b.{hhQIdBK)Y%VMgՂk\EnE%gW6*ؓL\~N]tL{Yuo]a%f4.SA=\BLwbo#њ-Vf肬r,,n.8N$I$WƄs7 u@=o(ҷB2>t}j|ng>X(V]80PJ/X) *Jܯ__}[4;@nFND|[#N[ϖ{{=oFRԟ]+X,J7#-%'hv}ɦԟjSd}kH~=-ћ]͇J˄N/YQ;@>>9Nȩl)5^@tci`ҬVbƴ4#w Spo^^q+5˴Lt쵃#nF/3Y~jnv UaI$ܒ½Dz RЗE%nuHoZx&y\`pe鍐t6>'AۗAϭ ,W~|gGS1{J&ӸH"<|8}8$GJ!C3ۇjIs`V$,VF 8(Z6[NpntZtߺ-#a)bF|Dv0!WyvkPI͘(sT J"{SPFiof Z62A!$(M]Ʈ$ԔbJ ٚ,L#-PL?9?u A;w%᳎Mm!х.(qK'$?%E+@Lc< l3|v;4;9f\䘱 ;j[ܝ#!%n1޺;`#ƥ,e`8ObD;4 }|LLPcKkqXOHxn ܠZ&tonoPno"zft̹|^*p#'uxNY㹉M[ʗv&秖j~*s3'֜Vy8 3Jnl51h5ކCOpjsW6;SB?[IgDŘM3B|_ГA湗nA, @n|4@,8čXp0>ܠZ`An2g12lA˭d-Ojm͛p#JOwŧ}N]|TLyatW6ZbȅوQ̨;F1+t])k7CS}0lI'rnD`ςB}c2)t6Aj uuwlY0qS>R*12>ya1nr`CcʃJ-I5saRi% 40R.̙R]PL T ,7-\mxiGXʝ{<7X&P]N<^i}*..j/PkV& &ϫb|Hn?s_a⹣_`j;`8FrK3޵ahd$˝JQ:Aib(rK5o4 LM]0^ ()WܒBcj#;/%qjA@ܠZ nP-7T qj1cKP W}b0 :8|nP-7T [f08JCq<z=P8޹}L)k(9j][o_)I K YT qjA@ܠZ T<3MZQ }%|AĭzZvIg/'[bxԭ`#F1:e*EqGǗd)0g> ?`xB鼎kW L_ C%nY>MK[u4}0#xe6.2eوT nP-7BP 7Υ2ω{iTp9qҾ 7Z nP-7T eT 5M30D?XrWrIENDB`,Ddf# <  C AbZިJT#tU8x+nnpZިJT#tU8PNG  IHDR:4$DgAMAIDATx;v"E5;:y-YݨdwIC t96@B6 Dɏ(CuI] !~mâbp0>u4HJ1BJ!CI;>`rhe~*;H)ǔ/~eR䪕, HlJ*MHDZUlct`t:N-!3;55vu2WLsSv 'W)_BvhL22( hSN餒hU0rNnod6X砝s8n:FhvB꩖`ЊI$Ʊ◔(;"KΩ. f&$+!HW82>D#8v+ t!Ǯs1FR0;ڵ^1WڅUGM,wA̋9^5DZ aILSfL{<י%L,{hG2dn<ĦRޏZi[2+I`','uէXqY]M 1FHr'|p|ʻ;I\hwLR_{E|&a)9v]8RmX)Lcl:g8;z\ru8_幓X`U9N1V WrƮcu@BGwX3m̬g/a kDF7Dl2[9ڷX8k@媄d03t bn>Du 5"1ͳ!"kL&çsqʮQ;faƮ|nsNg:ry̏LyE%1}Y@_rRMg3x=sw $7 ChXqjUbɔkei&a>[1Hy>>X3#m>C-3K2ZM˗zvzNaRgy2;ogi"|_KKkqw&L\uv\u5|Lc9EK1Yq}I SƔJnjIx;GF~||<==ܱPKo!P +P dVؼ_͏tr]0KRi̽Nx#@;9֡;vTU5~$»TRqQ?@#31u`r{Zے`$4|D>hVj0729A劖 ؈DɼZ .`FƮpi[)1yє(OoO LWpTSomo7oXDؤ,\ϡ]SY7'U))/綊ɻWIEƮ1HK` 0;].o0a 632uMFcCH0=dǟ?v`"M$wkDfX3%W %{ A(b>;m}cU<20K.l2Yv HK̤]}Rw-˻*mz_}lr%ضrR]7G)KqKt? }u)U|ѵ)crwʶOgqv9o(T;FؕG7wSLFY05P nR3\vu+)vK!Ʈ> S< o"c{E8`89eg'UQ\'@o/Ӗ%WΟ16*QYuɟ ^ؾu5?2f,< X?Q m2Z\V6J^ LZZ1gVk4k֝E&gm.ٙ$18h*fF J;Ƀ06}#TExfx~\%߻1#^ĤJZA8xA՗sh]}/.oB H3L`^IEnkfGkStA9kvjuQ)` ÐxzznB5`^v{{{+C;o/P +P +հj|nz~%!Gꭵ]M^B=:i{~C|}8˻{LWcWr Wr WrJyA䎏zj!u3k,p۶| ʕ\/X񤫯Ovͯ*JnJrf4vLyeHS ֎YBeL^B-U_!9ߐhZ@\ Į]PQe Λ{uT]'y-u^dY1Ϛ SQbwk<];+h i!>(פ6jcez]]Nr\*Jzq3:: r|ZO/j %s T`d.1 EIsnjЦ&8CIBd.,mDpYw-Q~_Hᳩջ`R#ػ˾kw]j\j(bic~Ǭuw?I!$m7=Po K8y+ z5=y` @5@T @5@TT +Cuv, IENDB`Dd^ <  C AbS pO/un' pOPNG  IHDRvgAMAIDATx9vܸw/E:;je\ځ#k'*TK&^ b$QI~fkKt: i|>oh @ok->)Wm-}z:̠qiai/d>i8 5QG7u X Kg)FqO(eN$J1C@-OU9K2jH璆꺮&s`_оR9M6Zwj7zKD4Nc-mR)vɬ!6!ӟxROکi:9Re)N x*\C@F4Mq zrK#iڙ.n'TQJ\L48Y^t>k_f9UU l9U`(..LdOە7z+R)ZT+fa2\Nwihr2eCu OV*%Ո\Ay<h.ϔ'N>B2[mot*XS"gѐNֈ=+Fkp4bBN:9sGLp`w[-~N*?Ŝ+bf)u8ߗ"2oDAF?I;,Q,Q,Q,?"2 0<=_a),'9b1KzwWҦr0T | RoT[F͜7TO_*pȨYf-sk(1v 'GeeGp b}xxPvONW4L4j3;wg5a:^]Xtw |yRo?A\` &k?),s '@_R7773y|pdtmwx:Ϗ| 2 2 2 2 2 2 ǠOOuhpo>,dL mklξ@oweQ*9hkͿh؜}~kׯam d 2z}}tVo5Jo%ʍƸ[Bl|ݶM___+p\p+-veF p\Qm[zn29u~vfna=*ZLjd#f6FWvu|KL*Iۖ%No"1ˈYʾUn|9<- t]qB߶>&kc%g52j[e]J"!7O5*o@F+a~dȶSΦ&6]da a='n1gc[܌iJhJ᫯@ Zra?ӫ() B˷eOT\+m)F} {%cÁx{OodQٍ A=qTh"Q3op}叉pQSnp-C2򢇥:V m>| &M^.mw܀Cɾ@-|Rf vZ^V\uS`c._v<]_~EÎP}ypEI=@q84!4sNi!LF:{J8]KU(vUt*!FB=/y@aCu<0!p^qN+d\_?=D!$y x\Wl-^4mR0A<03dQKoI@3^]p eiS\|(ax;"BEŬadtY@A5+-Д1#Kf8ꪶ{y6f|QJ2YiFod%bqIZkN,Y֟KN}ef0֑{i`p~)3z# "lg$9'%xu&'64^PW3f08rwEcfڰgSaqJ(ož]%d!Fi)vh/^ f'э5e[`s=]}|zgYF--o ^y؜}~kש/DF@F\ux,r}v K#QEHJƷUνVmcTpFh By֚5{t/_i3q?zaG c0n/0ddЯ/9~L65.Јou Hkg恓^[6I iu+S7nw'[h)rm W54x7:mFg6gID79_3qSI = ̱)%h LQ>I\aE}\iA7s_- \LRuT]E5,$h>k.jf1.pV<m/۬;Lg"u"kW0)猒$KڨZg3#+ڨ*w(ٶLD6Fn[rNoi98 у7cqkuI=܈,9F1Nk%FvHo76go;Z4IB(>Q)6ߨڞo+676gckb=Gcy&l 1o:ܖuS?ä kYlM=>zuqkL,FWqgJ4TS$$as^/F/uz]VH믬Uy:㇅@QZ@K(/Qm(ȁ$C@#W FN>0n9fkAiSDɝ;S<2aXfhkw%{/ﶩglF,p`ZIcFIۣ3e+u~Sz?VM$U# \=%G#ΛJjOG9;>& a&*`q Ґ~Zi9z'l>3dOp#ή,G|o4Sl]2^[7Q}No;I>ڪ 6F7Erct!Ɵp)c-6//i54:2rˣ@}Nj,SFU22;sXo1eӪrN2Q癜OIC N%ZF>$/0p>k;OgpH}!>WB h|4ɗ3t R0\o*&4rdkh Zö֮_¶:֮SאPd d 'o*3H_yaipaC 3>$TKhm+:J3U.+ +e,}p>3^%& jc!p|1}.KanĚHjs7ps~Y$GD6QFY%9w;6Xn~{P-ۃ<\v4/S~]ہ$g5َ%:MSN/2ڔ+[~cIۭJ gbU-7G8oԘ#SAB/A%'f;ف2 6T^ņ9$ r~hEDdfا`ur[y@uې' -0$\_Yvzbr$Ϛ$IRgsrKH[m_`eZ!꯫R$suu$添oqQ8"K`f}~kׯeafh}~kשl (@WvX{5TΛv.b_.Kכ< ϟa8'OOw苟?g=Ե}y||\FI}][dFQNqC};:!,am d d d d d OO[PwWziR"؂+Aisl&i䓻ߨB?o(1 TLX(@52:=%2k_IG7Fs MK3 eԗ^Te{T5Pu_x +]2%ؖ&                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  5/:$h,՟?uM4"$g%̩@q/<%I$Y%Mz~AF@F@F@F@F@F@F@F@F@F/6 3/oQs};O~gFVFm`+p9ũc[}&IΘ]R2vzoG&DX1pc{%ƏתVEHnꖐT$Ra<5~s]+=%9(@_l̙;3q"C$>3l0(@"Q+E\L66x``F@lΒbqlaכ< ϟa8; ߃"s>ľ"O%6KbJ 苳:Φ4ps#2 'L@F@F@F@Fp~ǏvtCF)Q9d9xY|t:mms‚IENDB`Dd   c ^A:C:\My Documents\capture2.bmpb2U_`rDnNTjun[1֒KS$3lPNG  IHDR(ogAMAQIDATx흻r6Ǒob;=թIᧈfԥHM w"EuҌ\죸W F \<$h .'n(noozq:RoMoi`oоl/trE]R?R?# v.F~th9\.9q:?(HEI5Ӹ^Ü4rׄ2kڱ>*m2>!v_F7]qgtNQ b`AJڂPbw:8C]u 03>tp)BWtQX}xSI 1ڍ2я$v6и7L 0wg2HbQ8\Wh=XbZee jYjLZac%'jZv _dRŒٵLwF 4L&*vf7ZJWo1`nZatAb6(5[c&CGNbz,H g"%v9Gb~irINEkbzB=٠4<?9CvӋ+醏d!fn'(w1И`~HׄIHt.3dJ;J쮯7sv v]ƶJ)lc #e7MG-a9g`<ܖ4lnS8^(" v۶JcjPQ:C0!h/-{s쇱Ij v*ЄO>ݣXZlL;.&y1$ڥ'v D_Ց'vzAYJg)WgQ ]zBェlGb;.v v]:y5LD{H/*w4gKu@ԵH3&)^6<GzoҶ'fϖꀨkeL[0f;.(v7ń/EQ j:Z;{.bsSmGm/8Җdo?7LfF.Μd 6[;k ?ҜO/OUo]뇭v4QxT(ǒuî-9ՀȄbzdHMN;&O}8bS$+ f'"-5fQe\w;н`-:8+!YeIKzY*Lk [j?lԏSY]kt%gH2Эw'wBA!j9Ht-²z }ɱf.HVA+[ c̎f%$[FY`P.6cIm/? ǿ1&8`'ySUϐt;"",GbT8Hf3dNCL2bcVK zٻ$t|>EɳGˮdKu`k͖2և!v_߾` ilQ4'-vw7Ru-Ҍi:;Pzsb syʈX.nE813ƌ:.DYTNKXi5S.B9*^łr$xQXp W | ߱ N82v)2r^]T~ՕIؚ?3NxI| |:爗S _#H 5#F eoBRPU;|&xVTMIÌ=7Zm5$MJ *!LY!7]3&D5XgRԇu"uL"aj)fl.M6,mɿCf jU4vs>\I.<3G׌]ږݠ]PPdFJv   X&Δ>B*"X+b۴T+mHl8}(~&ˢkAH+˼1N~F[W4{xTD](cRt9I?ؼ-Q"}pb1ybGg6v̡p?;g5/J%:9K772kY'Ab Eeۣsd󦧿^z遐j⻇=~hd9oY Xݎf~vpλ,$sI HhOI9M.ʌ6̤"wy[4.о!-~mtşS:M}ƶ+;9ggqn+%rƶӖra'Xtn܀gz랍X{v/ǴL*v鳽M 2 0cktlc)lz褃7Ħf6ӹۼBN.3fSA;(t3tudqQ:;gBЌ;.#G\^/ssF ^]3c%Of%AGP::dHb:Hkʀ;<K,ۘofK$ F!f(y;tgqcvfϖꀨke͠1ۻR sT^l:Y냜kfR;foPfho-X 69f1;h|7Fnͻq;߱K=xVyIJ7DIENy&LB:f1;_/X !L}N>&g Y9Jb)&J̘ܺ1D5ɲU! 瑦*2v1;Q&ZJA.JyΗ`~`A3hkGns"\`Nrd c~O稌q9r&$(% (+aƴ-Q̘]1mSkMȌ0{2dCtyFtiI.KAg8؜gkAN_Z] 18W5k>R0C.T#j% gXU|#2M*N@lV i5fEŪZ.QIe$YT.-1g,TTXM۾[1l}{n3Ii;JE)=V`a,VMŘo+Z8I;|&x?HWv5TkQīZN,r}v?IWR'[m c1I,O~A?t^qc.1yDNdT,@ܦsѧDƻC(=y~=״Uݞ#l4I[=}NI~;XofpyA=`< s}7YhM0*Q{왌-N %8-2ݗs`HldFLVϟbjpdל38;Vή!ץBiib[%(z3TQVR .aY;Sp( -`ѶVɱD\I6~%\ΙPL4+X.X vBjq'8it$U36Vn9dz_i.%RdtcMSYtEr8ҭi`<2 l+'H?62kg_jf )jx9YoT`ƚ(;!};ZhcTVڑNy&MFh\8e̲8=i`(7l˞AG9b7MS|]L2 K'-v=6A=`< `eټs`N  0Aͻ O/e삯[o׿ϱ@n{3I.ؚ@Dd]w Y%*kͻO4+Hr3E-KTod0IN(mw @IleO/O~ *L)" GrNz±x[ޡ ^_^jsNntKCI$HKx<<6/| 霵[j"v7!ʫw6Q+HQUShnx)6'c܊ܴH F~;2smv%i.'w8+ tXm+JEm c%va?q,qf(;Yh1cRY>VUNGŋ g./Jk~%mgE`7-xp,^=O(3Ta#AQPa ޾tF12,Tڳ`߾}.إex&Iin^qT+gLAʕm%c9 xJijlC1J=/mbn4x!-9K1gy/-i[Jtc{#"8Ds&!损bFBb/ ԥ BF]n}i26G7i򧗋9e}g &!ۃOp─u xBvHqˆKC+(^ei: ҪFi V|b>RJ=\}V ŏ$$mh=kGlQkD-DgW/(%bA8,ьv$$]Gˆ;ٴn>롕,ߑ=œh'7&oU? vid2 5S_KÁ+sX-ľKOOD"mG7|In{Scpve5VXqCվ^'w;{64:ݑ)3-*yX7ۑ$&L;-g5>x] * nIV?fHc7^o_@(G#IFlj8.O&A7laT$'{@D֛ cv]`@``ef#'TdGw!֐6_\( ۑXbWi:?q$s8>WH`%(+ ;< @wBm|aàe@_XO!% b@wbGFvA7A${( d #ZvZ}dJT#O_r{{}}}z|| ~OP.+uT۷o_!v`₮XF[`@b;./*`;+ot% vXaW-;Zv]F)u:6T&k0IENDB`~ DdQ < A C AA@b <ɁKLg: nn <ɁKLg:PNG  IHDR gAMA hIDATxM(O-訦먝Kp̥$Kqu/| ! }3@01s:躎1!> Ð*?+@}|X<=v9G9c+E44HՉb n8KKT4O+۔l4LiFӱ迉ĕr oYT%&3e8ZnK¯ p`/l8~1ʩq,W8@}8IfG6wqލ͞S2KvdMJ7/y؟s&< f##?N^2s;ξ889ͨ2xq[rV-1pnd2X5Sr' , Ds6 n#!JUq+m&P}Qoj?eC% F8e#-Enu|H{]rۢgqNԆͨE}#>j\7]~+|q C.C6OsT3hͩ%zf%:ǀY}ybmXtfm.|rkRN29cp\&r3#bntZ|n띦-*1V4St;K6=bq/l6\pϧͤUtn]>sedp Bpd$s5V]hj@ 1K6SVs>[ p@\oWk 4 ]6~O0Pol'm<5u"oL.Nj13jk Yfl&`#fg#mdw]MrwOOǞb]:Biڦ&jfN@ሰOڃ_ZV<` GuWZ٘JX/)ؔ7Z˭[Ab5i߷\Sj]5%2!f!2pX(H dSQ MAg29VjL @y2 d T?%`.Fvt*϶kY&zԨ]4u 9{ڻ qmiD6&)kj@  3# $cOnBvWY WHk&I+ ptL$Mߨ|_YЩk( 1Ǭy &F&V~t%Fxt/-vI|0Pl\M\KW?\yj24&[wd2Տm!8)Ȧ 3Ad!8 ,d2F[j2XlX\&FwBbivڌPbAE1C-2tNQa=@BqFyҫM<043"(FdCzOIx;M< ZCҵiG6>U1%iG6.rY4ziJ6:([6}a`m6yk+V@gx:ow r46d2.Ȧ  2 d @6l @ d2-q5}3_ZMKԵ:ڗM- x:5iVQ+l~]a4[[3`J2 d @6l 3iv;y&>fZυfn3l%M̳rݬunCnvBҌhVOMU&BV VۤAB4wOm "B>%)jpI2*jٻf=c*cL [d 3f#//:iXXB :m@ d2 dڟI;Z}ٜOiozE˲!kѲlIƷhL @<\"6`u]z'\( <IENDB`Dd '< B C ABAb1vK9cIe unnvK9cIePNG  IHDRiPlgAMAIDATx;v:]@bPܹB.]BTa(P~Y>BO#oee‶7nG7Ëbo  x3@m3/Qo_0E]'YtBm\i<RLU.qX,r;Y]%SeP-ȄgR5 |" YC7 j"0ȋGΠf]a!!khTp8!dWY ]rm\(oXFjTU W8|yn[T1Ash tbU.m$dzi[`|֒%SeʽygmBj?,ގv,45Xy (z>cwLŒj"]r&5C|仨]eep# ǣ2yXJΠ XGBz`Z+ _W%\]R]\2.{tc]h8e%&8^޺5w2}yOX>#ߛXr_.ħ׿ C{[ʎp r1 Ţ]KVs?|VqzU% @+. @+.J1ϱTҮR- pvzAເ+kuYX/(|p%v x欗I+mwɧ\>NM^]-(R{C1UtgҧIʙɤ]#~&5{^y}ߧlԠ<I!՜p}HSQg&kլHUK['aGˉyؖ2^r|W C(㒆Zu*KWNj&ZKQ-8Ɇc=،q*O!"UȶҬFN>W>OȐ3DhgJ) 1Oyܺ|^ch!5qD`fY*t)b%Q0r5kq%8Ε+$>֬;5Kwi]k6gJ]+ѕ;v{/q1nSޛPdfȱ}<3͒2@~I a1a ($voXJkAiµ둤ڟuTp}~~gBrjPp%$gs>2d " }dݷ|7,.$w0P @+. R/C|: 9Z-ɩ{qn7MUWb].~<ϧ+Rig]Y4y3nO䆻q2]hŃ>2hp\i<ߕX%C=l8f}Z }TiYJK1^ _~KJoOEݶ7D\Vx %xvyҶ45 nd+pFӸk6O8Snޞ6];W{q (Ϯjq$iiɧsFwT?@%׸b@>P @1 (ŀ|q.=.OɑVOM|2?@DEk@|ꉕ/:n( pj%PDU"ߢxԯڶm6Wg,M@{e t:fK0;^9k]opVJs,M8_ۍNuLQbG;۶97,$eCUӿ};t@!wgk-P5 PvLe'7{_-_Sh{?CغB)SǘB`?f8FL;_.ģ.8"XgnD5Zwh_$|KY"Rt w,#xNl98Z.thǿ-rPXf0"bv+19/!?krY  :___skӴoW6ҁ:eaWo!E`^Ey5˨ ̫Gi`^$vՁyՓv%Z 2"s9H&dJp(ŀ|br(! ]8|Vh}k|N}XG~7'r5k?7OFVb``Z'gw2 eaM0/7a?P @10W.W/^ Ձ9Ƚ>|횦+.. @1n]xXd>P }_"K ir{ĀIENDB`2Ddeop< D C ADCb,#&yBίZN(ci-Q?? Ïȕc g@q_,0^P3@jHC͠FWWWWWW붥fP_-ʆA]:YQ6 *2Z!egrmP37(ն=G!@$\'CdBĐV*IR<Ǣff(!';RZ*CϿno\eqj3S*Coħf ųTV0}5>uL#fL]pz_Q[5JT&N~V wROT42V}0jѰm55ÐgfGl6yfKlyf.`KgX#JЯo^L xۙ<݋ npSKegҞB_g9<>/*3z::< $J P<$H]y(IQaA yH"d?̓VyfTKRTV*Lccam!3ZmTVL6r!mQV<RgrWTSy[ 3u;"l$<Ugvjh+';(lNȵpg3@2yF+fv[H yH&0XzO<Ӷv[m!inp<HWoqOAG[9 JZ)fvip&1V[yƹ|th+Wyg~k-jTs[I3N#`jۊ<jdnWm[gFt}Ac3G}x\ұ[ks:vm󌧷UO{/*T<ޣh^LF da3!K+&%L2XjLK=]fg$^g #̡lV3t(&hV<}Avi+oglUDujh̎s=iC3iyFpS P6:31TM4'^QqG%v=J3N^q"M@~܋'#O {FUgr6Yg!I3-{vZ\%*gW"dḏ!׳#UZ)@fQ+N41tL5C3+roC~bc<sUQI`A׵0]A3ǿ gR.b WyTSƗg {΀\͞3!yH~a1H$Ug<&M-?tr]4#gB͡l4<1CyƵP  %t2]Q6#Llvd1Nދ.%{38u쏌t yfFɬہ,]I-δ̱L?ϸky̋Q34X뎻]̩;CTuVEid։v4V7uųZ1]]]>Y7͂Mvmg9LTk,si6 ƙySDZ0AܢwYQ0<кj0i 5!?>F0&˿h87E1\3<|a[g*k)/,?Qwf?x9&#gxo&\6i}L͋R,^fq4heD̟e.[٬pc9ry&fOKՎEd(_pcI5P W;,Ba9Қy&$\Xο\DqbNNՎ˙)%,eV0ιι?:瞟&$O9wp{gJ{g;¯_G}g4LC7~CW稈ގ,m!j5d8@ f|{h1R3`yHn~ ` s|>> Qc뫳VIENDB` ADd<  C Aby@@Ec\~JX0U@nnM@@Ec\~JX0PNG  IHDRMovgAMA IDATx]+$9v=|*QF^fSp00_߰fnfؽlfl6h{PދRB@R 1/?ޕ` >fv , 0#r|l *:?l|>^|nT~>MQxq:7-Lr}E_%&!̙f&M7o޼_o/?6wMJjclo*L;ͩi̔jDZ)%DP&Q!McZH]VR"{5^ H)٤J}i(04 6ƨ>ΏOR/@[$+1Sr`K9-ΈҞ1(%Eo}pBE )% ؽ/7*"QUEDAӳۿ{|낊~nx0 bT.ɘy܄KӜ4I wiTUHHLA!Fa! 4J͟::bB8(EVI3% nfm![  [mPvUv)%zv \,cRgMC4 mcu|{ƉE!pSӝrPi@B7m:t mB> 9n ȥ10S`vgM#` B7D he @J%j}gojt(#4.$*vlσq`*0D8RFrJOWAM)`6i@8@sz֭gpl5uQs 07PхN{M(x%82a'`@}=iP=Dd["Jvg͟kg ~|r.8fٽjtYtCvdHpɄ $A$ 34fCP 4$(4 PB+Qd&{d @cW]m^](>\z>&h(uW?OSWXDi5䯀kAVKjƺcnrMUtt@ BFx! t@H/Xru+SV c0 "]%QAl8 a T!I@ (M(X`@נ,@ԔRJ A!(d5:P@L({1@ Z"X;ؾ,|*ܘv:'L[ȹ'7ugav=f5N4_$SQe:N QH'3eCN`Ak:kUY(+PإWTy,@3Q#Z3 u,dzXѤ ΜҕKa)4#RU`]&"@d 6(x1.an.x^8$_]]Um_P;A>6 #%^st.'((AQ: f $tЌtM'@ʪl-R)xQt,{vۛgjQj7'oVf5#g<[u::DGc^71^!03d4blӆBk.1I-0oIS& X)rMƧ*O1 f8~@EDp[-~0Fkӎ4Eql8sKf3@CC/$iT9SlENI($ܡ)  j\oЦi:> 73X5>TD"if)%U139zOV n(VFd( QSJQ $||ǎg.p4m<7YObw>=Q߮O?!i=ͷW(۞V׹fYSRnv7}un9z-&[f0,UJ+s75IDl$"*`fV^nd~_q]F\QMJFBx5Q6QP`fWW R2fx w{_9Xp(`* z\Af7Ys2u| lsDTD%>-џIURRM/'vrc逅fDR Q4jJmMݹ,B/D+U6_m5 j9SM @JP@ dGvERZ}*>,  @hP Ln'&AYs|*oh84$cC_ s3u>? 1aON;of߿%M W1CR] ߼|jX6%b6`*9GpS9kqJ;/DoZtƀjF]]n;NtqLsBhR!>~X>~2^i+a^ qej -FDu EAg P"uq?_zb6Fh% SJZ"QhZ$h+jN딣5+ 8V|YPrӕE|APbsKVN琁?czMDMv&XuxbK>K{ Fqt1XrhTbд\1ILJ1rzw~ֽ;DhL@PUs8»0+5eӢUEwC"478k5TuGqPö4qs* τ*ǫ I`d5l^o- l1ş,]`qKzABOMX#SYD(1Ռַ'm3#|l)D&&.e,p$9ҜRJx?[@BuvYDD̼>ݜ=t]."Zpf P7qr]JW_~m5yrelwO?d0E086 80GZGݾ(Ts7pH7n-=Gf$͊-stgc@ 6dHcJjdtDf#AY6bAEqO@UB@ eZ+Z,f;Er;ɿ^@.U@ յ\0x0"dj숛H˦'^+~)"7>MP$(j:.WK6_[AG֬j2^qO$"d @ ˖vr=fMԭe!"7 L"ԲCB& Rkd8i'\]]݌w=Y5X͚̄2ҘdqJlLd(ژ`&FVDQC&Bdvj553f7rGhT_D5 <;( U3RO;l+vEduИw& c`aE"h'U6vt}/6MiQ 2`EPq:lDuV IiO{wQɲ 0 npv7"l6[N0 fi8‘X~{(dDƖS(UP,Qd6w̚+f{%FQ$W,l6tcw{er^t,v{u}4&^IF@khZu!6{b(,%l:8$ XJ-Vv[`fjJrqoР9zjY)c1~;Ԉ9ToC< V dbJ-$I"D6$PR!selM+B1<lD(̚jvɱz XlU׳/N5j# pꘂP1`SU~,f]thA' BǾ)VŅ}[UMd #VHlu$Ri x.HYS/7s:>$=$`4U0TwVMx0e9eGNEMO<5#k"Ba1X:L.F_ۜ<!-HY9bzm1FY/bn%!!fc\g@Z? @A HAYQDv$ OdYdE ).ՠkw6H~k^ړ*`?y ^g@"F}1QXvROeioWM֒Rryf] IX!iQЂqǏ]j- \Z4P0(D\>!^RJ)c?v{w~yOe)r?ˍf5LFCH+W\,fgN][_qe#PiD [F˦,H7*47@,ռ @N󞎯iQ2by.>.P Ș{u>e"̿ӦvLz=A)q$%V[zǴ:&>ǡ~s/Bߕ#a%aRNZjᮿK"Q{mrCۡyыzM/&L-?Ӈ>~ 44>۳w-2$ SwIlFY_/!t{;JR2qaY G6fpoZ"ACb"&Ҭlu! 5P5k-{ 3 A ds$ ݺcc'-:2 7}HNO%Jkڢp-Y$Q9)(@]8Hj[X Bk#xԋ`Z˵p8ľA~JܫVZX&‘h%~ӧJ˓8"#ӊ,@d; S3-Q$J   Ȉܩb@WUḿ7PӖzaQ+gb]GQJsVe>Le)2Eq yvPEehY_#jwrцS;MV[жWUTX('+=v?.?9n60Gf젙0su؋##Q"D6/3nd*gCeވݑ"lTؤ$XsCQQ|\\\p\?'٭v2Fw\2:|yDTq@eajOpw"jl54D*=D(3yYokf=豬 gE^d ԋ=K掣'e>|?.29)GY\|]Ct[I IDATC#ƓF0Ï{ p_t}}ӽ&eBok"ͳ7ի^0G ǽ5ds@PSS 'sxA%,Le4Qpwnx$3y$V"ݕlwcIEV'5L%9̪i5'%MaY[pnJz>.!6IKrҼ6F`=)d>1eõ(!cWnnnT5XG.r,mW w{ooL.7g{7ʅLVDM^eR4xK>2;R5jr⹧ԪS7vl#} }1x:?6sF5NJ ս:3R;'0RaLS)?ш*FGUp"2#m֫= ,-ԗX/H# |ŷHz b/y&i%_I bId>C\Ȫ?Ǜ5 )01R~ɘW/ %3w7_nnn^Uv˗|U'kyNo RtP⽼g|-1m-^a7 /^ՕWwգOf'\!=NO Дu55X5 b^==Q؋)3[X2dօuX q!aO5!h&^l~=x~1%aYѵ7Da}\%yWY0Ę"-2js\kIצ;k>UU}FD<:sL"ёB@wƫ{Tef"Su("pEoAO)&xbs\O:&"ћ":0-jp ˭WSsf† CQ zʊaqÏ(15B@fv3p/IwɅֶVgmMѓT1_%LhteIB$8b<O1=){ w}E /~m7BlfV-fV[dJG @ CΖ ?p{j\@3Uգd3x*@Uӫ]@;P30;,:DW˪.YOtݿ9WT:AFaZ+cʲM'vzK^,QNRtmذ;3r!?}Q5BD۷8}%yG {vmXdiC' sCOB7xg@PaIQ="9BQ;A=ғ8bB#=|'5}IwTͶvw 'LZ]Tժ#ZokbsfmJs!b :2hzBc1SU|Da41:\|Vn)lIg̈́p$@ndl}zÐmoukIpta>-:ɧ70u PZJgbAR0j1,.<_ξP4^)J"|sW_}-Rm Mղ(W1 \?x)md--@80'b'"LWڵw஻8luiZHT]5 nN ʵglU^l#=]6sMGÜ]jCJ31هQMht%٩Do.Eek&Kt<*"89/O=_ڔz BOWϿed LOL!(7WG5+l#g5-Mnr:~, %Zu 0$7C" w5~ Bz4f9,mtx u֍#3(au; ߟ?×ZY3p,!Ґ̪1s=Wj K>ۥopUF۸9Ths)nߕ#j4ȋ/w"205p-<ĘtA%w.,cُZh͔"[$S!A=!9riki`n^W0[rKombRd+k'`zĦx~%yGd9u-C/ PTÝD},Orh?ѬM]; L`ff'\X9KQӈVmր!M7YF'SUϞBts!h1( .M!}h> KW$=}I*D=!eo4z4T0Vdfj`쑃* ։"5τTF^/.3_0 - ?o #L&ji{Ƙ"gʞ g2q@Gs lwfPX*&A 둦h~ )8#iz0\ TaH2ĄWC& b_:Mv Bن;[B2P$ d ,=fHЍc^cC=8ft!ΫŪlBUch<  TduJ5ԛ$B%A.il+"nvУ8FTǍf6A jRFz6Py 0KLb%W߾|R6r96Ճ,`9 {4 aHcwB|4kS35 j|I3 %nŤ nj,r!⩔tPuU*|]@^kYc x"-fZ)Dalo jvKPϜ8CI*0]^D<9^5 mL"N݅Rxֺ h*=V(V 1ƚQiPa\DgS59TUM6լ%SUEs\VV͍/LgB;5Vss?9 ͼ19ܼSli@\Ds:5z Foq1=_ǃ[i 'Ku6_4+v<ꃎ >|rGE`KVR"K{aFޓaRpwg8`qH^]]=vQEռ:\l 8p kE2eh/ 7S멺H&ajt'2L]A CiqM Qyaxu_bfx cXI`OXNL'9P]sJP@v=LCv/,_}r|wx{ؿ=2 v/vhzpۓ\Q\2jm6eFT+@|?0eki"OfBVrtހ/lkVUf4_ fh8g9 k 950VFҰj)-LCs~N~!7-OLO??<9{rCi ~{G#}2L19|ݬT {HȚծ~_oUԽ|OWW_] {׮doXȲ"`meu*45#oǚ5Ei!êL+ֈL Q,=eV$(d 7n&' "HkN+J,lF trckSRfI 2@Rl~!Oc#t뮞}tUm]˦*V/L ySLߕ0QٗbvU-&0!`yL3bNH~<ݍIўIDߦaaoFE9N]7mW( [{p3Q*9,eźrȆ䛒UpXrOfLޱ…R]gܨj*WȘ# @ۃ7gɥc(.Rnï Sjf<`m6Wuϼ26\|Nkww!;+xqR=~ay!SsxǏw?뿗OONV֤zᶏ1x;xzm81Fdp`b*u\x;[t` *5϶1(R6R ҕ̈́vKx?J?ilLse BՌXVjZ14suVe=K*9uS Y[pb bo; Tp]YXsMQc^㩿f?1No駏al2[Rf#箣ȀXaQY3ys'_:,0g%4hȦAecgtG Ќ]ωW@<jM//L*ns'Q H]l^S6IS2[(Z Cau+-.fK ĶfE-tKxI"tS]yS+'ڵ0/S)mr|[Uy^ǭXWܴ9+EjNc Lb4" ȤzaG~_yǟgEg5K  vDb"q#zlqFAӇ!UP20Ϗ#~yT NS$K!fټ2xt鈂Q%0#C?`IkxC`0zJ[XID,CϦX[˜4YTm3LfzΊlL4hKFp /%-.\M#S+]\լP?) Z\;C]+ӛ8qAYK#tx+n(b:kX; Ԕ<[eYytwO܋w,@"Ey˘emA@L!vfY͜b1FRƖI/c*1՚<.sY;my0mkj+᧫q^-d?c}h,/zt[yKrV-W#?<)?\;͌2)tWVt[eU͕"uYY+a4P-expfaUYyz*LͤL]akĠ^9iV=W4NW>iIYuSwi-]طYax}awnEE>uk+8 -q?{iuֲ!+A@nj?ËqKa-sָ/e/;-TƦKh.TT+nfގEzkV9|Msm&URs|N@>|tߤ,aQ2؛b˖i"3lx#  زZ̩`%%Mfs%zFWӨy: Dk1W 3f6﭂s5-"˜ZECcI2o\thKOp~w[]Ѷ7d9}<~!M؛33P+m=b0% rBT铞ȲȠg5BՌiUGzyqYEYqyEҠYjY_ &l""7=4!:n:Fww>5: pLt.N{d`fUD03SSD׃ܕ#b @66%|| 5pAK ɼ}R +mV"A<@lƪTTvEl ϖNͳdmա qmՌ+F-W}_ZT~r$4Ed03Gw[+@( "ݣ d~!2p #O#:A@ѬDDH$TcѱӼ,QXb*\<"āl!ml"ڀ\qfڵ?+<;̤֬=~/-ln0ʎ.\"ScڏMzp3oLZɊ(xo3 ~م.b ,K/X*~OíHL)ey|J$||_h MO{/s՛Vm(|V9r!]ulB52W.6 鵅%SǻG2#;^.5[@b^\ t_bI 5Oޱ;<̨;a5qEƱ??sD! G?##=.K܂EqOIq-a[ IDATiR 8 v{N 6/[sGSnDB 8wQVBی;=J:ll >/|mY1,_3 r6}9\ObL ^Dxfz^2WMk_Xև)qgL|Yɪ=ND@s$:@Awi|$icRDqo0,i"EՖeTi'>}8ʁE$ x-8QL@"(0wtp;q{fB36\:Ss_VW`Q-C}(Le!bgX1]ϲ_\B8@ Zk]{H}u#BD:'n4 ϓED"Q"vGuA7@deߝT?[{s"2 ]m_4ZUf(}eu:rMTߦ\15W"@$v8Q]}߷]O ͗8RjGP1l@ <a0LDğ~o}k-c0s49NAdTv-Ca g)$rk č(u2=ʙY¥>/g݈bjtCX1.ٜ3K Ox?!R˹?*v2:j;x4KD&dh iXtacFD~+kjD|;13q`uW,79NVE&@\׷Tm:::JS{Qة}Y\< !9C ŗ\@hEnPޥ^%^ ۦ^i{m^ލ.d_:;'3:ipZBMt*WoVX"‰πrۏqLϖ[;+V*~4?*bKD\UdvVdRnlnN8bTwA]uID0Cۈ;J Jv" N~~ߎw#ThȅPɈn^wW\on}'N[3ADZ!=%{dÝ-4DHs22VaMe®lDizJl/6".(̿@}WSP1%[\-.@E~jqLloL_;{G|`u+N"Mcyo.׈')IĄ=j ={Q$v[OP-}5WMW_?ir:sW0={&u=-psSyd{>J|UGa 5l$w@D^=*Q'Ikk0X;9~BPGZ aKӒ r:hmeTϰ$P!<72ӻ}^C)և/|lq~+5=n₲}I鱓C-]Ι(aw1 ;A z܋:v[UHa!BF< eK;K$0EoBā<ȠYi]ړ,gc2 ˰qSk? vpy-c^]t̷DZTX=.Ԉ`SFٜC;O=veeR>"wY/?;&3B=o2&^l[@0QLQD"MH4&pj۶Hd2q(\QEF*fN$W0 zT$~#>~_nt߃~;53nB7rB=͔#VdLO|֪[G}32AOpV{#3~f9,Y KUIn@y'D`BV,apS?uXr@>+I,U-UDēFK3i洛תel ,DU En,Rzf]>.\myKgI oCyq(RG`1YKx 179K{sWFgw/dEhԬk{30A%&dpVEROVV 8soYU{FnH`Y8<Eݣ4("ݾE)ɮ믮p0WGGQyiW!π@+G&%s P<9Q6T^*J~beyW: K*'꟰Ww;黾`f̑aT%]=D .ƑkB:bI-èʓzrͦ:i03` NXqL2aa iqXaO/Ud#s¯eT~6OJ0N˜oN>ng`oLUG%UْQm+  H73'Grdse@hLuȾ3qd@ ׂ)ɨf_A LZ%bo=p(@m Y'+ Kym;-Q}tK.WaOڽ8[jWI~b[ TesqqB i@N uGn@E w w6ԣIQ- Ӓ IL\.MǍȻ_]}oa_dG0@@ P&:N΅.VVT!>!w\}&l₆_N2ϋZjD(Px~f1"2z2 ٻzƍ%{+B3B$)I&8gf[meE덆*b# 税R BUշn%'<>O4»Ͻ#+U) `Jv~2b/ Waι$M½h* )YhsZajNUUD<%!')M4M#,f幤}{USM9L.皈JE1RzsuڹL8ͻ}n hfe8Y@%aXt-sp=*h@#eRO YI+ ØԀ'Y2G}#&MǨҡg6v%BCgr~\MxǏNNJFV k En5૿xLߍ w!b]o~iqif,:LT CaZo )@-jAQ^۪GH)۴˫y =zbT(Wq3[^JIc3pbgV}/,0TۍbLڵMLx w/ =&1rH;':GqbAǾuʆNߍGSяOyӧ;/Y:2wnnoDX.kQ]h&HY@4Sf骋RXMu˪NlZ,kz@}^7M'⾝ǧvolC ̈́Yh k[wȹPD,/նIu 1߹?  Hٝљ 2)ه=H&/*=:P|кO?\,56]El8:)HUFL?c]W}\?"F4MԈ<@u^.% 6[@MX'%L @3I E|aެRnLT% Gpw+R%GGngepkv p:|?/;tzuEv(>^;43PU?w?]Ϥ0ŢX=EPp- ڍP^,֭zFu=/LuS,3i7LLRv59WE[U*Q38h YLuh{ Dyw+k;ő0i 'nPa72O Ʊ06}!~*w ':X|8Mf<06m>$񘾢}I LFss@D?,)fNfHn0Quǻ'n=O;dLߡۨMӮoütIۀWRm׮V+@`)]8>RHf$*UWuU%3R,2YD"Q% dT|W*F.DvF UUw,ɳ^Isxl#[߱5(0&C| gÄ.7 ҰwGk׳5\<|x=I* nZ "ZΠ;_x{le :M2̄m$(L &vڵ]Jr~YKY1HM]z&i, 8Z$FK@N9Z&xJ<J펽#%?h4ʣhq1V1| U ][=To@Du27 Jr7UCX?ͺi>t2LLDY"$  b"<55@yyQUg%J3-ՈY h<Џ"R5fct %' ?@clzpiooF qw 0=Ş>y`:!it81־,F! ժ/߭_[dCo5 IYLhzIs5̤>/E+=nݦACD=GjLY.v¸ٳ(*LqrIqSOU}6i' y:P7_ƒE$B3ch NT!IQ0tWЎH́PS 'Zt|͋ﳀlM33(.bY^T6MeMDЮ L-OgµK׷vӮy=CDB[KD\_HYՕM"9j"YNdNq|F8⬈ IDATd :V8)q-`d:S4OdBGʨRpdJC.O]iާ`8_c:1sԧYqo9Dj\.ˤl}|?uULLЮKt)6(y˙,.eӮi\Vҽ ې0(.umsݥ1 G*ګ!H*m%'Mu^g=F/Rj7~m mJ%;DzY)HNZ?\#-YL9>Ybq!m]1%Q72oc6lܧesm_(5:Xi&&7{(2="SQ{ؤ;%&3;\6@D!ّB7U`f!_ݠؒ`%g508."Qw(pD]6MCq+q0D iP|m6>mG> o-hms:8pz_5Ij`zjY.%y>$ W.^](Z(9Ҟa+PG!DJ-z4*:Rh)$$"Od(vJ&<__}w-Pc4~@ v@mؖS, B!T9BKYXbcHX`ξ61H}WK oz13 NeV2LqGU"fdFUY05f%#._I>4 5,8hĂmѽJ"[I2xzQ}^_}> iC-wY~"Xg:@ZY@V{ֹ46'U 8ez'^!@YgaFn pSW݉t_zޖ؉n){/^r2䡳wW7Y;p*J1y"b<37QLNY7WyUHiUP*= I'{p iOHsR9]l)3((ԥketjj/n-@֥6BȢ tim;w0?Q-‹OqF-zS\ʳ{8(n) g/`4*pId7gݖl}Eu^C@BSKHK)/3fW:`tN[@#cس@0F+(].dڅ\# "Yn=48Uu53_y W,ETdLl! ^.;'2,3'+8cZRFk=v'=43{ȉoSi"}j o,\D ^JTJ``$.ycxFrV]1?N{xBȉuW=YahP(DzC4M/Ӻ.ƻl֪'ΧKXPlHP̦:3o G(GM\bvƯ^`r6$Lg[r ,rv)ش.gSHI8]LJU9oy0% IyljyZg#^|K(Hz @!>xf7zR2Mltj]XKOwwxMc.Һ?Q՟M_4v~S Ӊ?T:K7fL'g-=T5Y@8ɓtoA*dPl|#p~(PÜ⣑e#26//e ʏQV󷮫wcyw? ZN!٫U<`ӜyWNxKlOL}ux9ʄyϽ>]ڗPjCfg]9jJ%O8 J"~ֹGDNby(SVyT|@ ZÈl,*`l#O`&"`ZYqb4u{9iO;(2Ata $˿)Z`oS3V r?VrB:6ӀQshgWeT *7Ms@D)tcH""uݓ6sfo=߉c2mSGb^_ a]O^ U좊h=:8sl<ͱj!xtl1) }٢!%nj^a%sM >v;@|s߿M9ݦn&W_}O?ݶ*޶Ww{[ՄB+GTj+Jb>?&>H~eOBOr0;d>d+>5ymdWKNO6+*}U$J'OgfQq`F!4 tY݉t1ʆrzqc4_nns ) 'P_p/N.4FN:C84M>Ļv{ۦnw($ˋi!?uB2)I\Wu}^aa@If+e֚gt"*gh~1wg> K-M?'Z^]@ARuU7/?gJ *ͯE >|Q$*T*ud}SITE}\ۍ,4ypBl.q^nW3{q46p6\php%y+%ԸE$L)>MB;JT)4LS>eY>T>d! }iai?;JUv @,k2g,R33{h'V{bfټ{/娧پaTZ -fc49B XjzKkG괣e4$O`Mrmq4ǥE$KVNIuid Hdn%jz#8vkᫀS*y?*xSzrD_QY)3شD x9ÈVDwh#@ BiλzԖiUU*qhGکj # M}e46z٤TOD1ƸE@+@)QrO=~(@}GgLd h( ED `MHrΦJ)P~;3h@>9' oVOn> Bd35GaF$r+x@LaDCSH>9Di[KD+NmpWhyd㜅to/ }gs/*R8ծ+iTYW? IT$Վ*!*nÑF]{=xE;)ƈs1mHвcå.2dpU e]KRKٳXS".jFq`avL" rJs(4 2x@c ^T7n6̶RzYWNR{loԏg1Ut$J}rvVVӮ=5)hJ$ĪyԶO_FzgrE?2pv]׃8XD!gMYJc4kUxx$a+*4`!+;o.zLZ'>[o\RECvfІfoESO~_ΩW{P.! aaeO)nl%5X1Pj)+yM(Z+L*ٚ @ {(qC=5{eҘCCvgƏ#""{MhT,`j?!X*U~"1Ƹ L!MP1a4I8x~[]2SRO]PUxͽR:KZԙ/ї1'+LWORBTE@xxǃvLУ\ &j urL4+"8)rNBZ%)g.uvs|-V.UQηmD-|Z);S4 rlQa$.TrF`ntJi74r_Zs^S>|3xpx0Jr,Y5BJL\J[#4mZq)5v"5~HToQ/G_^ggLg3 \%pȸZ{RE0@fG'F֤1xBbαi;W֕Jl.lTZ܊{U@ـ 9b!5Mn"PZ[B(sb18=Ĭ Q[ϭyyWZ*7 F%|ӓ"W`t|5h 7tuc+F+K0Z9ر6yʿ%ͻ]u N,a =I'[aV0hVXpכ[.R0T&I1JRIj4M'2D˿W\A\,u>|"ug#_ŴE.ꗂ />oĝsx-B@L.?zI?y7 #<[U3gi2*r IIiv-&8dK`$&z7Á3TSPzXZ>~-jj;2' bSsIɛW6%Xї ?J$1x} :r&xv >ؼY·O>3`Ay&HK\Z/^4NWuu#0!NZm|, žQ5i(1 |!({ITUT%DzH[ lF {&xF&8#dhkeRfO̞3o"yZ9Jyv &^qj-TE]s#^IdRgxOYLazݏ?NGg8}!E &`0֌qHbķ|sgD\ :M$ՁS=bm,\TPEbs)VcaxG."<AEgֿuWU'daD H y*dAym_ʒ \\О+vt vGD3HO) ݧ^4HO&^D)^XHpC^hqP#\U!c,e8E12}ކ\loa@F% ohSPbL!ĝ/z$%2qn?N4 `ZL y=X.I X ATcH:Lܴ'& 8ab!&'x'CyAKa+0ʼnU"1iGpDY٭uZ A0*@V2Xm .i0l8}Y;^ʙw*_U&쬊׉r[R=@@A䶆amy (ФDe&6>/ !0> sHLR ),rr dU+Ɏ8& 'Ms;kz9 D]I ' bk%Z %W6[fŘR Ͳ+w$W%'ey3 γ}̉;R$JP Ãs|8ec`O"z$O538_~UMf1՟sTP`pl_@ u}nV: [:S6eRLEhQSDBr%J$8}vwCf&<'Uh6:m((a9dw!<1,鞑BUp;D!5q0NR*K^n(Go f|Ȁh |8<#Or =Dޞ ω}&Q (dԻc=A/ B1]nZ pBZ_<@yii *tnR)<_ 9QEa 1!8[ q`m "BnҞ6%epơm&Q5G3$cTMQR OeWιMrJI'#Ȟ$E&Yb AI`JXqF6UZIs1B?Oえ40"i8{AcT> h"W_jrMjϽ+uWIpic,,zjp[Ğc )!?t;UO`oC I*:cCW!?^=rDTE"ىf ;MO䪨ݑ(Og7ˠ\RII UVgs5W # pX%lM:h`8arn![jSfxm14;,%JXf/:|R`X3/Y*cW\WpFdZD!1!#DNLqe;A0H-Je=-HVjΒy=UvQ9Q9pR8S%" @HxB2QeȌdcAUǷ_?}3'L言LUuuع񂢵T: JW#{+6d[0HYӘBE;`"ԍٶۂycs(dʹK2oYte+W v&Su{s3Iu=#b,| !c+tqTNxe'iJUzu ݙ\'͹xQ67 5=~~o1Jf2ل- BI whzU9va߫o/~"U(a3`q*ш>s4/E}0[B;bgMڞEvhX4V Ⱦክf: &9_;Zr<=MՂ>W]_7[p,/HqiNBoϼLՆ=:*ɬ2@բi̖p 3R@ >!Ry}?aYb%ߎ}2p䍞ei(o 0#!d,SA`Dج/4K%<1%okT<00T? "#"l"yH2-i' 3% O. B[/:Nh'\y:0K }g<l\i<\QB5w\X(1Nj(ўz'nfն$)E|2tTuͅby]YJf}K"4O-?)Td6LV#[cLU2"GS@z23lҢ /Ȏfiz9DG58mbNj2pLѾT3]hlShCWZs6VBG0%4F'L9/fJJ\)ŀw҄S.Ee3 ,v2S2{ ^DcWUp "v 䮹pb ~K̀R]?S΅4ûwV\M"*4 x bqch̳SIȀTgVDȋ W|l{Lͅ]Vet&u/|ysmi4_լT+wf,P#Cs4P"|b5]C#=i=\ 6iX%cMP5t3+'$  A!ŴlQfyF,pkyV ;ICk=%"/8QT܎LoðD@>:I'W3;x|$'tܲ1oZcspc7K5]"n22 s9T*-צ'jwաfZ692Б'$G׮6aw|ZTDJnMc;+PƄɎG;8FApXđK+pfQ1.]YDβ62ّ9ݽqm\K$"(f^-MUQ=Ņ|/-Oê ); ݡH'/=G"*p0z@CBISG i_Yk4A{MMK_OPS<TYGQ "@@hђ@x𹓸.t wd'fB V VܾbD]Aac2aMT$p*nPoըY6Qz^{fG^՚@, Dj4<ɴV C\1X:IJ²_ytcCK.4cn2˂ _e.g(^,>T&N[TVOͧʦЛ{bdG,/ b9px~$6Gh9em3m|[6""~_m<~=ʽBHI|& &yk9G9q6m[\fk(1w *)ߏ_jX4bq|hS8g\e9r7٩yA羯?zOl|j{`r1I91%3ƶ9fH"f׌MI9yq4;!ע[Q?Kw^{W++Q>Z̷2nhJъBJT`A;Yb'@ˑ%3L*U:rG"nHql ׭h+KY8|,ޒµpAK?0ʲI,DXbjKtt5 @$F5b)HS~ 6^cM{ssz1n܈5k{_X$ׅcd/rБS'^hQt6b2U= S\M^J}HwlGp8^{6N "x4'ɋ20<~xᠪ}? S"H^9J])sZ$aO)o\Grfp*}?fk[:/˯a,k؟4*]&|V,Q ͽx HRvocLkחA# +7'Hj݊ϰWʷ1իҚJA1kYAfNJ:JĜ ^J(a萝 aDdV@6;o9Oj.;~Zp\|BDpKN~?|Np)%"@k.fuUEo X;$1uD%5IV կ@UG8}}B+EcU;(c#kGܱtg#GIJ㔀7{m]S+o,i;WҞػ(*M78_\a5i"\##V.EiZp3IILE3e>p[^M7TfDH9 OU ~RuHA$;= Ƿj4 {ap8g~',;)RgjQX(P '3UܲR QFd[JjLJ///4&QF"EqP43Qv$۠havgnCnJ}=h۴'D5~ݺamҬ 87b`}xCHT} 0Elu7Jhm3#^wҋ07,/GDV]Dr'?OIu2sG8!#I~zǷ= À Nzv2wѽUtQw65uxփ}2,~㝠 f3Kp&~ˎ N%L"Y}50 6=1MD .[i."pbW+,[,E|3V.N>;7Wm-'K(U6_8k-<ι€K),aqyu}W2.69 O/Md2/NT0 ܑ8*+HL[MVD{b*L'IN']&SOϪߟ0 :YDq<)G;ط:+Y tApv"5 δٙS1X\#w{77oXrCnju2qHj#@jMp7c~D.KCgL Ek@ړnXUx`A VH-4dXIWFl'_7g^f~BQ}[ij+&~ax^B.Pa%RmCk"cLf#O'Xvl Ξ' `z5~VS˥"2h<t?n!j~{B D\(PsBQGj. hf`_oȻv-7zêVU[Yc9%z+cIkiieac"ڪ UVȈ̬&h9gHzfEFܸql?%mm!u "C4]*Ɗh@\Y$"r2p:ji͊2{e\ z@]9bko\a D +g8sIogUyF aN!W"O"KcQeػ-kҖv;V6yy{=J^("<(1kotQDEOϽcaDj T;2Z<~h[n4,us6$le>r_I](X ۠C Hx AQ!9yugKBc X&bhҤ74=̬S+%td ́axȩJWYU2OKrѹJ*@$mw1jEKM8JQp`XMl@[I`j0զr148 &X)opd $A 75Tc|Ӈq׼ߊ9p`1& ݱϫ F-`i j %1y+x~ѩpd}7?Mcqx6(_M$O9̻.8^7+0XĒ r br5?\tl6h""|a!t 8%b k*)0Yy%'D,j4oIr~QmV i/F=MӈvQL6AxE㐨yV$lo9FBs2hfҘ PNjaZl/:r7_q&,L2ϭNV }.kJ cQO_>e쬧u `X$zz]yAH 3/=u=0EFT7AMSnMͶuB&$iF\YJ]e)ii`~k NF !H~kN?#@̙FH׷r|e뿛1 C҂QZ-&)9X٢Vs#˜՗ ū KNՖ󱺧W.N6-\shgիCS\:P\ܯf8)4R 5 KtZGyhP$y)0yU3S4N%  cunw> Znϱ3<sC,yIA%mfR``ni$ˏ+Wԝ@MӤ"+vY&YG=,<'D[r:!pMQ˯qzsxA %W2.LgdurxKx/pwFO*NCxp9Xy}YebVNl6ݡfgVLTSՌGR0]u.M4:0'K(f*1U# ,1KH%F5'I7UΫUfl)K>١RQSy)/#1D.lyA^b[aq?mK8fq Bܷ(}ȁdurmDcomO6@G!r` 1jsPrhy/"WHE^=3uemeo68A b^J;VxZf5ٜ!Nq9$[Akt+aeWPU7c\H1T;OOOSS7r#"bz==]ǝ#CDtԙCxULROmݼ}|>>YJc)˗qedE`2Fz$\{ R#Îœ05k_^'wIǦEw1Nh؂c+cu@:sA3b#mӧgqv܈A-.5RI+ph7 3Ayt.٠m t_?Ϗ?<펅5Fwh'*5Ry-0+'sX]6~ay>[(fȁQ')u+,Q51h|DIF{bDqJDY̤-S̳y5/2#1GcG:Mh829m0qqtB~]  >_^\xJ*ZW>Ev̊4F%Z&Pey1sGɜc)9;jW) =Ƕood+Z}1pj!˕=wԅt^EpMc]V0Ӈ+~ "!Bjh~SHPcd/O bbv<%eÂ$o0\O9WJu '3>>bYy)_ZeT=I9rG4kY:霟ô[W_%5KBe̛VG,Z$<+#u9җ901yn_'2>?χ^D šfnTV S}#H2]WZ.Jiy1Mm"ݱokۦi~e#lR<G܊'miCuwoHݱSS7i,k\6a+PN I6Łe=hy7;l`@ *Y]`@QBoy_,ȭ}O~=Lܯ9Fr98d"vNR:9Fu]ZM1DT`Sj1Rex\u @D8HT2MW]Ze]*x h QY)HlKwp3#"]{M{n$~mF C|\y-Cl>==>>F""Admm25:A_2$ݿ7^MSQ$sJ& 5B٠gi&p 0L oeJ `(0rW0Q^}nۄ"9b2hR S{(ˉ8]jj^ivmd(A)/9aˁR={9B=eIj40wN }A$+ܜ囒 (% "`SxF1\ޘذBMWzuXiT;|޷_i=Bh@=Uuov߶8`}׵۶mwn+{=) L#:5gojA v^KE"'Pɗ`*lokS)15q$WGP(IOCD>Z6S[ԫSq{^_S+\epʹwƃL]NdsYr(m8 FP٠z;p'lJ!+f0}%Edݿmڶ`DLixfV19һLS\+F=*mIeCWѶn}ݻz.G*i!i"ۛy?ӝ3V֐X,fZ!Ȭb{>N2${;,UH @N?~|oLJ-,ulYzx"|>NOf%2SbVw5}1@Ho%ȫٳ[z9mnQ"UE~*W#ۧv,~ BW_y|-[jo] ΰpHH~uXߓXz-/?Ұcڠ6mE Ͳ>ef} 8ɮjvnFMl>d6: aPȇ`wFw! &0Lҋ7|j}ǧd ֱkH2{a_8|OW4^><=|/fײq%{h3ؑ.Ux(sz6/?nt% $Q.vxamt1ۆ;)ە" /;"NNWſXj[/q=[KbBQk4p:3e +!noe1'Kjx;AdʦԮj"8y8'j$scZDw=3y%ԝ:R5:]Ox?|xZ/A޼::iͲ@.tk"8_6"nү$HMxx82bF7*am9P3͎L jbkHو}l}+W|#WLF<"ܕ摔q2~vϯ %{5=h8}gJf`(Bv="DӾ`ecufbLGAZp"R50'Db7` Vt/x~XޠAwb!T09D-Zϧ't8l]ygq 3,2EE&OfA%tu_GfWG߯Tžjd7ǃ0$hT $_l+ ->#G$m !K"Pcnu:o{0L5 "-[7q6p#!2Rś#ʻ^ئB}4N6(:dh0hS.JcJfz9{,НyMAY{G1# Q@m*I{sAMM beԯ~y26za gIN֧xuӛr7{}w@dz:*:j/X/;=?I{^ _)P+-{%V Ey ,6@T҅IQԘHC+y,"b3+o= :_* **β:, 7ǫY9}<:c<$sg=yٻF6,\LY1~ɚ14 clHwYdcpӲ-/ʳM2\}yN"S -/Rݨ)'{:ޯMW0Fo}Cϒ!]4&waYӚ9)l$3.qBTqgpIwU4d"( nP ǁDw,c`t>>>S*@ͣQ]܇M wZЫ{۵N$Q!R 1i"uv$ -j0c|܈+h^-~Urห( tj{.2RiZ566̥mtyQFy3C*vܯlJV+M)/wεǰeN ;K tPPTD tdTF@G|p{9LGBU:`EgV0I`PdhyuXu9Ӏ. ]kܻb1t"_c9ժYLc-#gI$v{jLƻ#dv`ۤb}DetZ/zM"- PSPVE+:.ZNIKper2EbiIr"vt77YEt}DZ"ىvo A{GҢ|8 DjU՝- .<?zY#i)$r5떮ƖҤ[B:P)>z[xP4:/Ȏ-"t}4 v?3="Jvp Pn(sn]z`Jiʑlݽ/ᇽCf7-&D)&nV 25`SͬDc逄8, !=[P Ya)"&l&fw|xwS;xȮjd.D*40UUhNs}wov~@B°-{'\T֜-]hݱP$ȿ~eb~,*y$=a)&ZkdVJ,*U???DNy/l耋dl:#"EYXk՝"qR昺5qfWHUAuW9lP]hmI&JŚÑ +euءzw45'u7[~SAtG,rת|RIȈƶv1Ʉ5{㿽ܒb@Fp#y0- &QOnC#E"#7J8d5g?7eWƍk*RN%*{_ߔ[%TŮT"+lH)sg &(FNpjvj:'[;<ρpv&`+7& tSCN|"}zYOTKe ԃ4&f=ՍLe:Q\pɵݭ6_ݥ斟>Ax5|tWe'#27J9_xT Lj]^f4bDaddEnA<ў7@~4h7 +`B-$рuz1)wWι$ Ѹ:!MlX;5)"j{Tm8]@Yg{ _81TȌuI-&pi>TXPA6zbI@O{ |7$gyIJF_fh۷?-:&4ێ}[[k:Fc̀H!lc8q wL2Iu768Ι&2dckJ8\ib%-̌U(L,CBNJuX}%"uuּ (P!fvLgWeȱ]DM` ^O #}3VP(XCu繰J-ErBTaP}h)*\HS=;NԺ9HgZA?8ݢN>rG{O~X/3!2jp/@*˜ _5ȷki[,P*LCAU |3LSڼ?*ឤ<@2p*I:O(jw/_ 7NG~2ŀ`'kl&7/ZkNQ! C=SQfSdD v#ͻQ-F=t򗘋L,gx2J)4Yfq꜀ $]g˨$̖ca0gZmVaä˥_0Г91kmoWpK8]=7/x&+Om]jɖ3ŻPCәAV-$ȪX6+Q2q-mvt3kwmjL-+srf…X숫0#-2(}Q۝x#[sV C<2U`*j}yj cO2B@%""z*|w( ~2H.vfG}'v Lge(S-q2 {+ 9s*Ҷ3[`pHʕ\c:,n\&)iQMaP&9_.L.%TI۝ xS`|8a P\'1!´"0g2 ;[b/Oy.*,/[.lN+;b0NSzXtdOy3GNVp/gߌS2NJͬ9_^Y{%=u] H7tk{R{a_Mi-o;ڦ$ [t{9wQgs\+OOO 0J⳧JIvБ4d Yo3/*ih ]u42LPVS-F\WRv/s?v\ }:B`D9CtmeLV0k7hcJևJlJWi5& A|9%`LqC4K/vM%'u@P][́oWx5+Ӊ\:EpQ PVU#3bDЈ4U0T7|l7kG+#Lq].ϟ>|J_zyMSlJbt!(d<G [qd]S$^ ٨?_.*w[d>a j[V@Cm" .h@;sm0S"IY@ XG7 J&4'}S!oM&ՑvpPaZpׁ iOLDN/CJ{m [~(o7~}秫B:cm2'S=u!M?׫>œ&K>a#fgP:QHR:B(EU ̕کjC/g5]y@  $)OH7a<&03FߊejOvj6C0 bAѿ/TFyװOOʷ]*@WלfUPE;5GغqTxu)MY 0nA%Ž&8v`2Iq C)Ci iBݒ){OU"*3S= :駄߾ۇF͋]y_iͥz&=e(,hW:E !٪\B%udc\H 3o P'\tZm6L4LD"uitȴO[6XGa&޲Pۭ1WjܗQ?p !18{ﯘ0"1G|@>A %Fk͛Ttwh|5A { J0$[ >9ocL5%O$;<7 >ǫ`ڍ D Ψ6R/ H1]Z:ʞ0Ȁzl/93hvCW Ha""bP|v DA[ @T`4([tuQ ^'41[`_,Q*S6~F͢jӡ\˙apT@v(qبϡc&zX%2)ne_|:i8MLE0ɴ%ZlzۖpErn%&hnv _u9 L=FCu@ `Uf3kA,ҭe)+v ޓ)Ȝ=́L)IH!/j٬RQBDx2nYchh`@h[^l (Lra-]s}r5B)Epz --3 |9|&X ?{@q][#pRBҦ*MݦaUle"œMh|qH"=YJvZ<6kR9?fOr`%ܜu=/d{ġlܐuh/=jma6N(yGJvjvrb lMk4QX;^~zo`U7=Ay6J;GagJWttj3J{QŖg)0j4pF{ "B5̓H9W]Lfu2@ u} !w1^4IUkWH[*F#)#I:uv?&s̙g"#IUU]4 f$NO <<<$3ܓSe35d :!ɍw'os=ސ `fÉ*3D2]ΗCD1{t;・p|1LeswǬ-ˇÞo/oKZ7 xve O\ 4)yM $Dc:hTbx|~~z @ #? )%RQ=U͌7UhG\Hl]7DIg6dCAHLv Pv mu'nd01duBe T kh+zwHe/jW! 5=v%0fw=/k&ϴ+Wmݞ0mhNv_ J0};`1u߼ܹ߲˦7_Y: JL[uv`; U!=vXetݔ+N\r\`-p  *pc2s<ةW:Bc>hcXqu9fJaWwt-U.ӷnAZ@ZבB( LLV,~xo1 ):)7&a.xy~__@SY5]̉φH%r)bbWCwoWo$6 f јAl!1}*5SS9i4ޙz5*=6,|0lig[9sӅ)8yUM], k:mlt d͆pXT2t߬1]a~ (p3gU|@+f YЮ Ld̡Fޝ .˃5;м#R}dVGR%) گsb}rLSk=/zI[)m IVt/Ua!1ytmTEvBB 17f@T5zƗPE<)Tڮjfh؅}UϷ//_r~ӗXtzi`#ygd"^A~חv aft+a;]ސJoJenK ]QثUa.ݠǴMJ  ܔv,Hu$%8݊x6TZ3}$-kwԛ=(L%}۷׿LJj1?Dl}1k4UBP:;Omz٧c-PA(g wPPq_ep5yx<;đ ~81&`>Ãn\8X@JSEQ‡c_L]͛_4f]"}<;cHR(c_159m`WNG~})9/7|9s9U2_YYȅ[WOKsS) aat׋rr -+HE]XN ܉YJv˸rl6wT Z`~634j%jXLQ}gbab1EEgkb.юh7'C;q6rG} d',zߓ<ٚ F9Zo~~;;y:Ϊ@ nU7?>)fI/Vy`jQo=&8l>.`>Ru硸BAR9 챌#?w.+~3 "D0ISrye' `b,o0ss'X1- 93yP29܂_4sց+hM;XuqfR/_:fK)3谮yph.KQ: A\i`{lΧР\$>rS ؋%a&ahKc7cjXD42Tv88fOPp/ŎmJq ww;ѫJ? '5wÚq :q?.aٙj!}`OouY MoF 28 +Εm¦|T#Y|q7 .k"K|{RyJҭ_LU#Gc{A,7-{";`jBq |zzbP#E\`}3JYer[|ݳm Ȏ-F8ĠusI݉@ǽZ 1j\vyY2[r&᳧`3kr4Њ,Oq h O0)eq XfQհ|H%3ᆏͲTskTxY^lDǒ߸ @TtAXD$ U"D wRCJ^Gawپ]'-`oH^a ?`hȮ/JOi4Ȋc49qW.UU@zRxb3 gf/ssz݃~?4צ4oL`8\<Wct t:U 8 oa`A$b< ߣ\]ϲ}=tx5C 07Vֱ,2- -df5 vcv,UZJJ`DTK*+32AAM6~R=n!9m.Nc%Tܻ l M#bը:?{`_I͖٨u1=_qܿ) c /Ɛ0f TnjXs_T>_= RbXP1y@)]͌e.j6+W6L«u-):w{t696*Wnĭ6IgV=?ga3L K5I ADŽ|O9 ~5_aC U?8t9 C0SFplēqsT)}+baW 9h{;i*erwu*X,>H[ i^}L?vL *.3h_ixzSnkp:ZzO[dh_U$UʨD,gն1վ==x3tHƈqژ?úf IDATUa$R}y`*1#UeʎLɳ!łcL㫈RWP!MI4E$W ,ɻcy= Gf3?Y@Qme RDa?u*\G>!b}uQB@'Ř} /mvg$&"o,OgrxghȒ4$1"gz^ttu|uN,W"Y,7 qZ? DkļeX{+ j_LVW~J|ySՁkgvR97UAk/!óLf%T~9>L=.UǷxfcTe_=>W)wZQ>RAWߟ_BD\ˬ_6_ BQ.5+f>mv7I* _3a."x=3%hf ;AJDw̻gSRYFo?~>6L tHU fpzTBMA$[\g&MQB3Pe/Ҡ3$.?liR}ځ`%cVQO,Y)mwN˳ps7x1E>^e~WJ8J1pJ G@d!z ֥cʕlc^R4z- Ow()h5??|||]ߌL_|o}w;Y6+">>EBؘ#PsA Ghz:q?#=Yq-=Bo $L2(3ALkcޮJ ]B)ӦLG K10Ю +|< vW1^ߟox<*].uMEH&"#ݫ3gFݟfNçtY rp"O'Ԑ3KLAaV2BY|ʂq%)yˮg'GNt~NЅƸMըEzsLl3{>Spp4=h<)]Rq&D1C!&P5̥4/XPt]}KuǠsY%cSse\"C`mp8HD4AAvlةչhLJQD̑xUV]~1]Z4?&3v,kzN(1}4Τ_Uݧ@Qrʀm#|$EUӃX+`3ˮvB~}Ѯw3S36|cw:3kNE0c&ka΅]}#f???~?q(:邚Mkp4`Jy Aq]@w\9"EWAy3#>(IYi6="ë&*JkXT/`i (o/,ix,r{5;ǼNj8X)' {vxI? : % wRy}n" 5GL@ld MvicN/۽+=|>ƌM1V>jI(c|~wl#n$>Эf cRbL{ iPxǷ@^k^?4M̌y&7 }\nq(,U| MvJ)O>HQ"K֕i1d><`ٳ8c`LHg%WKBlk:CҊJUi/.e]Њc*OY A IL`w̛Č}cA;4~y@GGC1:@X>ސPN{Ar}~ݱ"9 ֊F^!F OR}"pnij1 "?~xIRdNyU@4ЉR=vƼ ?Rw<1xaw3XHSH.Xzqۇ}||o4?GҌضT.)b曀Vx(&2?^ 315gczb[@o,,f[# AG%Z\ΠM0XVדZ*8}#90( z/']* /˄`^<~]r R'! %Nr?Jpv YRܱ+oj?5e)Z@= EZJEϋ{|ewD>4h1F\]zƑ"g>+4Q1chbd.6J1@w _]W d8uUhXKWKV1]R(dO 3\v2 FR{f'LSv”0|sy{sJC<6䷿Kegۣ](LW~|վcy3횉fj?/LevcU2+n b;-@'jVA@r|t#h!-)! /]]`DY6\ + D)lbL*pmV;ǞddYw?⟿1f<|üˆv|@O˅qN:SUEoY˳@(-u=j1cF"Gn~dtOc Jq`^+ ]@tevNqP.xV~J(WcNY94]Вk7{]=,4RNI@t{C*fgUuB́CHJ jVgǣ~}'ݥ~F>#sT̫&3aL4Eg9EN'Hd*]w &[XA+>ȇdccCUrx=_l _opGj@K,I(;f~2E4 nlYT7 4.pkfBYk=3+dI vbQ4% n+tPB_C1h ڙ?1 J#=&@vd_&,}~k\ۘ!~"lx*&2;_nkrIeJ޺xav' ub=vP\sՐu.[J?iCQ1>cƏ1*{hw5H * W@=pz-)Q g,s Pi!̻@Fk_\*K cm+~T5 Mç2]?dxҟ󟿿?UlƐz>nWFYu)` `.4d,RѮYasu]>fcʃ*%2|}%@{c9SDCKLw}/}Bbp?`'U~o5Ҝ|$Xʞ/(xi.Ӌ%Ѣ {![Y^NC$Aɧ99@[y ہHks,}~~zW^1h1пF򑐦M!p* [8JrY3%oQ(??s*Şy:?|#d9 hg2 x#\S|e,)ݟ0md|sFnPHWc M1m>lx|41xq'ZP^5jyR Yj({<\ @ IsVcðŽL2lgFәAsb=©N/rϔ o%z8>p)T o5I2xɿ2L?*~[aw^TB4# 833)9/|{!|̈́'1 } cƘE +2ؾ>G *-lIב[Dz+0/P e&!S֛L:=ºISFguD*>20[Z U kOIR&g uŦH%ؖKtP;f (07!lw| 7M?k abCoglH'=屓 Hd@MT}~Fkt:2΅C+*y*2U4j-&]BrJ_?J=\~UǬ,7m[RȂ@mWvI+`;հw0zus?ld4CO^W&H'ns D?&aax2`YvXY'"0ArmJc@RRFkH/rBzQVtVVB!d~8Rq軠A$KSS̷j- MUULzYZ x 2L anNmFT˗T4v10?gEA׿A 8z> 5=K;7]sUb/dfsADF c 8U~ol[Qn6Rt{ $fB)K^DŽ@%"=Fcc'bLxVLĊ\!'RJ,'pjc~"XvѮOTN{)aq0iaz1P`[]Rm 26ے`ADn3R=|U vj%6};D-!]2UCԉȺ'+X/ϩ%u> ʇwTxNqa15&!Nx7[0|0 ϪKAv+0D`XiQc&s Dg2#mot o=";. ڄ),nj. ow3>D'tE c5z*7AHwZ)yT=#~E_y.(r~ {4I_ mRE4xp]+*XF8Ϣ@cۮGܤW8L?誌Qeʣkj=#/(~QNrշF[..UMz#ȥvgIb'ՙL7/v׍g\hR#( C{i]T G /]WkyAf )[J56 R 8\jQmA \0%!IZ._jNYn@!juB1g!ʻHO)em|x__)גpSD7.\~LJ #HE~[֐dz^P}`WZ!(a L<ǃ /gԘK*`y0i-Aw%j#=]N19怶w@FUyInzIw`61})n+ #=f>aY7p$5Z)E'W%DRi#f`(h ВJ4 H"LxHg1F1|!KXX}z+5WOINVAxπiv;D߲ibpwP'Y1{e.&F$j6FDdA񄍷P%]=s5<m h$rkdNd>Q)Qfm1BH`W,׆ħݜd4_y+qT[Gv:Gbu] Fgw'Jť±d>H_ȋyFt< }IdE. Cfx;pCx%y*@#ͽg9hR预 &0 PbzS:xBFUhNZ(R zX*ٲMThκuy~yD5ƒ8 bX f %הGՔʏA,*TcoQQ04nHƞvz|C51PShiYH1tjb^c(q 1uWM_ӝ}:P%pM/X_c:_bvH{uGDx,Ist1qxv*ȸj;9{<+t%!4&6ƔS(2&7qʞOͱTtoZ `!1Whs w։QFy‡t5 $"b JFgth!l6931>c:Fg_qt*-'kҬyn1x'),Vnj9iUn!f:q"L~!9y 8+/| ߧ[8z<#Y@*{l'" m oN%Tz7p)@AҥIxSNWRWUC%=zz7DIsToOY֔(@;&HlL.oYꍍ<ՅL흎W7GQF3/mxTH]ݓ@ $hӑ\emIC $YdvB IDAT*vy2,uFi&Y;OAz(:q\3 h-IbTA&N"#y=jZ 0f;r<#:9ԥg x"SRɳ`ȯ6~<#IQ_uz~h4D$U.|LJƟcrx&gnV/"R9_M0y7HVmOJvS+tﵖnU9ж9.RώbC%o\6Xm1Ŏ|)`yӖO٨2E0Cdg]$~b kK#SoWr&ȏ;nFI};j䞜L+2"偞\.6Ev ;^)ZgoUrP"=c<~ q6ybv uϜmf d ]sbqJ9N\ 8T{h1OJw`N+ 4Xnq3eC/$4ܻI@oep^GI?b֭U(Z.HR5X@ U4J)Z o\YRaZd׮;Po  o|M&(o2]|=w~:G}l_ !f `8vg}FB}Mc1Z}]J dV `D.6) 6lOEQm+\CcDWip .˛نAe,Mc42F SvEs6H\gsSNRR͜ӍZꨯ*;@,MlS =6aח^|~0UБg##e3*krĜas,a73_P*U<&HbZr|`يK:A--J9Kڟ{3I|n$M#o`B+a[Lf;\낔+s,:mRrR)TAD5'f7A-Am16.8󋐁"8H}Hr3n)N;ͧ{ `;Ґ]NtӶـn`< *J)ccScun~{+^abwlތRDҥNSTtLgH&Uy7qër镓FARpaq\/v yY?MӇx>l`?g7q Pn[dC*!`Aj/ƫ{9rm@'t ʊL) YNkρLU,V0L]=s FV2_L:ɓv +]8bAz,5|p&=4"5itbw8BcX1ܱt_v͏cQ%6twFXCZ[F#ӵjg^N>&ǟ>1}|:## pDp=0<ǁ@" ]Xj Ա9Akm|UNlƊ.QB?1LR$O3pF93()OX_^Ƶҍdo|B9?rTAjr2S&b3]t=oQtD=8 Fb&ȫT9*:۬D\GcWK짫 6啧kh:ئX)pSo ǔ..4f/1ѯf0 |.]/5 Ndvku+TƨC*êDU7v D!&ĭԧ=zdgWM:9#ݯ yTsobF.}ȧ݂S@4c(}cX0*TO.P^dQ+b: cev ]A^S\kmt9u]$$v>vIF- I1|@vu±|묨H&],W9u:w&L{+!h[>}4,pzpfD{t Ut݌[x BDcW*kHrX2boc<߇R}_wHJK9ޙDR۬iV_I<tE{Hx|KT@aP GﰛP!+{w lQF}6x 7y1ܕbeG@@M#2/t>A ;Cn -HGDX;M0 v{;3`M>btoFpQ/p2z#Vӛ ;D1le,o"ېDHv37.;23Lz|if1"{/*9LXAOhYsM3Ksb%!7.xEW_Ru_|=4/gdҧ.E@>1Uکolt-=|")n w;OZvK-ŀRY,{b40ާ$":ќ hjwƯIh8J}AEbzy \88qYjɢJUw)pr/tI7'Z U kTn,Nҳd+/ڱ9 Lݍ5<4lo |½v*զ "d FX_sݓ5o'awXTZKҴ/N6D"J"*{sj/1 47xS_  $(+u)9Z>[ :&}-JS –SP ČZamHJ,J0nj55.ҝlv6‘XExXenâKSdwS\3b#}Wg"*7)$" m"b)vܡ$#6uc`CEcţ?2<#5Je/@nb]MMՀ?x Tr!^pf6ƀ’D1I7""M%kSJiW?] =6Л-;c$ .k6 @;R),xðdȟr6U2/]m^ Pmq"U[_aѼ/(9sttLO*|n#v56n) F.tSՃJ 3eh/٭pQ4ǩ@B@m`ߨhzRYj|\sրt[>]D"Q-[KSAqOI1Gy$)l&&g$͖3e.;|aI_ =XڭGQĀKasyӖU&"&VpK$D$}vѲtϹ/i"Ɂ0*e^]IWqHQuD0,l*p~/vRKp|zENSމ? gmmO="~\RoF=#%B RS$'rww~v"{Q;XEB`h}@9T ϪV}҄852bJU*=@G[X} DU9>RO3dju{Ӯf )AM?|bU4<IDAT'ؼyJS>8-bq3.P kK:)[TB v'o9Q?ᲦHbV~[tV~GgsqeL05*_8.ūrk9Ĝolv>6Wx|;b>Sf]458jziv+Y ۴rnKN$4:IV6mӾ#4)7Z]T"ܹ.UbQ>柬Կ=I0/4;2`sg_p$.G61{!$ͫ Pc7h 3-cwbсSB2qI2^ Pb|cd#)'\qf٪HZŽ1n@xwFTS N (w |zo;(*pP5 b-9rȴFcֺ3VVjIiVWWee2A HŮc ^@,ZL Dɡr}`d0Mm1]4z}z"y+3uM)4%Y^ɫ,Ĉj/eQ>/9kҰ( >@W)>YEM!NW7bt0OPN*Fy֛ Ow ]CToEgLW;ھ"kWVxÃA{J %|~n8;[g 4qh63&bL9[( ]g~^REdѠ\dKzfe$q'ՓȯvQmSfV?6tF$Cg83ya>*ѕy1St`>=l,9kd@>JdW0*:B}/s3g;LgLv\ !p=jٱdIRz-\Kb;(N/g ܤ%:kme@;>?4` PeI;.iG i&͢XyWfP6#ZQ*^Ⱥ//[$]%oUYV㸢-.|[s,)1&!l&u [dҰ190t|zш=8T QoހKB8;л;>}ur[ejAHaDEJYj^-Uv~iˎs#6 1M4}k?N-I F_%".D!T _ދ=lFxD(Fׯr AZs(DEP+@77O~o]>w~hD* \B( 2-/\ĄE h H [Z#q bR{n%ICey`Ӳ$btKV&vgMox;U~~7G䧶՗Diڮ7ߍ/n?n3g&H4f+n/i9D޸1@P;'_&4m(lemY2whJ#;2b^|;|ھtGZ}MdrdH~9K -oM"|> }m;t ` lnܜL]頩^?^j-9&4Ū*س‚Y@a+mL:k.c ^6G*"c\]-u1U1s*-RU/]uuSB\wf GQ\VȔ@@h> ㏏U".k RXɺB,dK=kd P[C) r bʪ˵FP1& *"g d3Mҍ&yrN>itI#lh.Jkc<ؠ ^nfa2-ҩ\L]" , Q.D1T߿ M،.L!m#lCT; 6O2& F5&lqKc r{1p0ZxywL\ƻk X)Z+cdmnaSx(NȉzPXqݍ:o=x|wXPN g"tLCS" 5lܧk1f6^(oE(tpVcPٴibOB%ќ4RP3ĉcpa FWtyIKX~"t$ٸg1,@::*K sK12z;c9_TqxGۃi'w l:MP mDz2D23}L:5:-ڨs,__8Ypι?Nrw ZﱃRKMAZ S@5 #!͵jȏ=Lal> e] YP讔KU5C'<;PiVN G Ղһ:\c}?CRDR~et=}b;K +Jg13u % \f NNfJ=ǒ _Aif7J|Ҍ VoeU`96ؔ>d.\^>a,cHD4ֹ_ ψHo |s*N)90!q` {A|G@i0/"* _&ۂ%o -Cm{`aaӢ sm;3 Ik]$ƥ1=X _;LFy(MO)=6ڷU+wGFX*7-t_Yy%!.ѩɭOT @à/@i98JnIҍbyz*h~4"؎-":,42vs4G/9$EߺŎ-$ bmc& BRӵo{̹}G{8ajUeWy[>~u^W>Tw\[ *C|zDM\~;鋱ۜf w4< 4 K":.1Dխrg:KV\+3{YH/E[ p8܈p^Z;d[0@+2ُ.e͛+$}=DE{ې* D|p',FJg\Pe!H3cCHvnK 4)-bfB,i|1<#4RXf>CCvb"4tt- ~(u+4b2 KyPhF[0UЈ4;YE4";\dWviO8%ҀDLfZLQw $3AsgUg@ry'4ϜcW[ 1'* uN)1jn^.kɪ&caC-~S23 Y*bRzC;F*|ŴAd_]G^G鈉xs#8^KӐ%[B :-vmeoTusfÚ LPSjus}SћSgy74US|!ѬW^ԘO LƲ(>d`Dh "H\zXpJ,Ӻ@j][9Tt"2}s bť P c tU7PCSJWf"n=10 Xn!YR% 1]'ٓe&$0aKXܿẄ.mC"\++DmVlnYd!M1cu?dt"6|Gfјa4.Z$J$eO }k#)kuFWޗȪFl|Asa%bs|G(UA53rk@D(:1?>Cw)Ѐ##*"p|']{3thif:i eF*Rp|y`1et6^vG( `eXX&pY({jAU$Y`X!_voǯSUE,کY8W;4V,)9 %i%&K*UJ.' f Vw+GsWܛMyރrH- |)v5DS|ns/b*]'X2HNB5#4̴˸: )kpT.Pt؀贖d&+ei5 -?>ƞU r20UK vzOd»[̐1H2Mp5SCxHhVbR"wX;#cEc& tE.9UqFF0;!|>)D( |7sSt΃24 7m!J.GWoO_.DL?.bu4`JVY(P:<~1K Gْe>c 袢{,92`{} 1ƹ+c$ڜ>m*=߿Cdj<sb˱eHoDI*}3A|!Ҷ|ևbLPWvQ`yv.'Rh,wZV6L9q OM*yLRf6__ gP D0=<>FVcѐ"mϗO)|it4GJ!FJ-RwLtkԔqaC+G]xRxŢ;6puU݌Њ'EJ^vl}VbvFĞRֵ[H"a4;Ή t9B5@bqID慁>TkmVbYJ%gb~3g d= =k^z^[X@EۚKvyO;,^h5:ī 3Ecz&` *g<+7Ps(حRmG:ɚı{s3Cd|DQYU8> ,LֆⱣaY2RA(,m$sԡ]( &W`MoU46pjMkRX*qvmmD}@w=(M{[ N m9݄Fl*Pp8f=3s#5f Jf,IGJ˘,2i\eA{h]T66Tcb٩V4XdQ Uw(≈[#7] jww~M q m%9Mj-2ކd\ JOJU0:>c ݜӚ#SV֨wtTg<=x;^-s#(GT6-*j}z~ۥ[&Kh{fSiK*q7 @vm[A__lS6ikDD[/5е_$!.` WK%Tev$PDňlnf a@vm jYOEEAP 0_Rr<zhzQվqf`9&VyDap_jޥbj lp5p(7uY8 8{x KۼEUIr-mXz?KDLUӎӧzqKOEnn\\I~o6*RRl}U1y^Ϩǿ)ӁUnhocABDCn[2F $#; wFg#(1JG0۪p %D{no.'#ν>ϊB4l%lQWSQ9vX+&Z:)S;Cfnڣ 4Xma}ޏX/``BoCV/DaXD `zR46E3*#_2 J$¸05m%L'&U*Hm%.Ʃ0u d}T aD!GOQi: \ Zϋm\d#/xcޏ*' B}T. n@Rf,jZ%ݤQC٪;~-}Kݛw::D;@xSA@Έ2)hnȉE4 2[ i)!8+!p5[$tCX1Epr&i WVٹ>g %I7TP,'>VD8tk552T]s痗FxS+QUWQ$f57S<@#yl7gmYȄy?vOf_˦ m|aYQl!z ʨmyy]E:XJ)^_+.0mڽµfTe3U±ci 5?r'cɸ}*u*(aU~\ buݔ3$6lm!O**i<j kHN$F-VgWG$I$ő)I#S$j~'?||!%kY$E K_~}!I޿}mɫ邸U_AW4fxƔ$őU{~'ˤ`VR/I%Irq`JH$ő6a^r%MjLW7KJ%Ԙ3%h\t>^c%?LR_ۛQ#It)\Qoof0Ɣ$ő)I#S$G $I.wƑ$I2I)I>|H$I$`uΫoIENDB`vYDd<  C AbX|GP-N +X%1nnX|GP-N +PNG  IHDRMovgAMA IDATx}=:^BkՒ5~M?K[oWKoYJx5o -S  Hd UŪ/nܨC  ׿N~?-'!oo/lyu(mM/_Mi'=d xx ';E⠅0+ C1tc /hS$4 Jxg(=]Xo=W%QM>S+yo&zD,BKt>)fB|> |7FU)Q#&c~.?gߣSd8TRUo.װTɘ4槇E>]Or1&p\-*k2w5}yك7+l)a0JG;6֫jlF0pjLshtw'~rxX4瑊_&RM$>|RҞTCt+) qA͚1}ȺR`f/arZl} #>[Wx7Gc0duS"*أ11SyGl-JM&t JRdN51/ Sဗ:S"J4j& bzsL?@SijMnE>Y4Ǒ;mov*`L0 Yhm?Q#xb)^9:}a.kh%o~Tz@nBpo(7wz{8uj#ewܫT }"1E%$s缻&. !9&8xo_,FqʸW'c`Z1J$rY^PZ8yR&MSdRq0j΋`~H~f,%!1}XSrr OIk@-Lz9 LP֜+fJ8ATa&w{$)>HUXl}3%r Ҋ(F0D3E  + |xe0k{†@Ie Jy,5w)ø1~F-uAVSG-3cG`^Yz&y?'pW['L$wwV5%R&V&4ު]r If[ႊ"lE*+chSۋ^\WG~!v8@Lh| n17ba 541KdI*T`1Hɇbq[_m;eH:^ɨ(tM?,DЪO[R= S~ GnX@1f.L\1GHܪi ۑ41QK6es.9ǁKI_~%ɳq_N̴|znbQWl| k@ b $2 Nw E 5qݼ{s1`+\o_7M3׳ԺIfA}mXɹ5hhRG@wSC;\X({iesz$aLŃtws1bm3&|K'cZ1\ #<,ųh;T'=4Gԧ8)("eZANnJ%;mu|O7S;XEX.y8U.:K bzg ', ن0V1ɠKKH(Mm.P_!@y w1ܳ/b z’oE\ˉt ՉlZg"O:UՋ=-S 7fއYd%z"v}e\޻܀ͭ߈Yx,%P&[9iR{<q{j0靁(Jۑ7"VMBH}u\е9xǂ},PJI% =HQw6Yk_8sλjk.&.ni( qr'vYzŽ|7N0,\`q #9ӭ]{cw>KAP_ygbJ e\^~BdTBL62c=- i +t8,{eˌB$l%L?J[͐a( /,-]R&ޔ^ uϣ?]##z*OQvx-<"A|Z(vd%56jU07 Ud'"/>"CNXcc7pȨ́;pp)%F#p,h :S/gX1Pse#PFvn*O<@QoXٜa.^XA3lL epygDV;@ީ3?GU8s9X`Bmq7 l;bcr3e4b M3gNf,Z u![('R!K[l(&-CaKU4OkJ!u)Et oFn-.y-^,z#q{R}hT1}KXeEH8*;d"CtYKUv*f"i}s }.βT{v0ƤE!gP.uP o-av G[(AL®e~1W}Xi59-c~٤4&mX2PwH5;c=3F&6=|^I  2es1 HPjJ\'3FJ{maO8٪bӷhm @U%eó /Ʈ[fb;53LB\%FK vN؝mP [貑o6Jey!R߽y5GKTܞcI{qGCM"LHv! rc>)e5Q5.%f3l!=Sh\6vN!,,\iZaH&"u>b)1Ԫ梐HX2/X '1:iޢE[D$546r=Z9Eh֣k2X"#1$`$J0͖˪1*_0MI\Z+5e8M=Эny/K0&u3,⽳YjuwT9 ȶ H +m7).OF+>+AIC~ d6qY*i*bǡ5oִaq1}/XcCM@U%Q.Ѳ%׶ %Z╗oMo[HF'l7B"gU[HcnH@RztvR6iX([t$awVy3@8;ցJi֔I*Vr/Nػ; "̜$xC$dΥQQnrok Pɑ4e ّI/[%,_m᭕:ҌtGG ¯H"{} Ţ>]c^/w!GaZ|ZROfV!;T} |>p|@BD" ف$ fK+pO0g50_P Z(瑕+ إ3 ,$Rm8T~$s>ԓp6`x5od;62rҜdWB)qH-(~ty)ټ[|.4}( ?䬔&P{%lqKlC'Q(CYVo(%#f!1}&ݘ%$ hvT'w> WČqzv߾nI/aㄗ *-Mm#7y컷i聆dX'2 )e6!\X͚ŁS,@ͥ JR؞H T%`+);ӛ"6> JޯM߄~[ }2+R',ܴ.yD%afL&Pb׌j8HR4Jd)\&hol>7` :_eUU+\G<2 J ww5Z*Cݾ# m>0<e> ;8TYfZb +F!X.˃YYR <' q<$RKdZR Ld&P^Z 2s.e(^"WFA}´zk,R@ؙNҤq\(>vqc˄%sBp7u>^8Lt[dǁ4)W.. 1 X|A qJB bH*$*֢܋/0QX dKs K'tӅALeIc -{4Dx!*7C\5.20yrVG(1rbz[p4.z3\\CPZ2*%Ǫyjpل"$ `9, enp1a4)w N)5)%9Yb?Ih Q3P #o ̅qCM HEbScMj^=.kmP3C5!Pˮ[6'`j`=e Ӱ9##3 "jji eHK0+_3 Ypmla[1} ^&2tHK|`šLZhέ$Kol/u%)>ac'"IF,7n<rF:BLE^yu" QSـ)fHZ1}"'w tYrYrdė)GڒNb?a1 Dkz9oߍ6},{}9VfG/7,A vbݯ{Jpa];2]pֽېMK2c?QꙨ < R{ ]ٽ,51rR0R?J\א-XE _ʐr1*2$ K`\ b1\]zZkk/$4\N&Bj F{=͹)j1ZլӚ(j݋|e(*[K S$ԅ}"mD&Jr,u|’Ϊ"XYfB L<]Hbpz ]qAL^imfKy }Sf4Ycuwd)+ %lb*w1`r&Jvp$WR7Ԑ'bZ7RǢ)OoRzavE]ӭ%LjBb!̌ )M:!rid>Lpً^Q5zxː% id#Ӫcp ˄k@ i|ٌ@>! [o>p6P=޵:z|T:=U'#M =%'1* &R Ia@v=` Ι ~ ڰ:>('d+o%Gg'JI%~3.GnSi5٪Sa"Eo m)7_" Y('I4b򓙲rk?+V:a`'c]Fl49#߾n{ M$Kd@!jCDc`hmoAL)+#A +r9z`RؼB $_ZJPUɸިh 9јW tm zKkMŚvcN)P.gB3ҐG^ Zϲ֬\\ .r嶺ܕѢBg.RgDw؁#?7n+Wsu; 5*l[ګ{fJ'״U`^Nj%UEirnr -]5RMLJƔlHr@ff&$d.( +WY95I<ǍZqML3GU1FPQ#8(y'?4cJP'5k:M#"ALeɲj&V9$򣱜^eJsSw0~um^:6 Xc)nE0|܍m^Q`?I5qx?+IO*8 >#PDfI,f2e R@2>dcwy;zu*Pc>U1T+mm,"R`Α5.=n؋}*Cbz{,!T`azld5wҲ8 3 OeH*ê^I LذmMcY)M$̘7Kfz#t3a3%zU#.| 1iYklLXZaIo=pmT'vEr1 DLQRZFY&'WqP.#LߡOzks JM6edfW&Pbڰ5z j({u*,u{T@oB$Cd$jOt9.Z3lv5>?^C|u5+ix8LYn. {K' IDATdn Qx4뜗}1sӞ )6&,_D!>ĖF3-kq݇(_c쉉T\z"J]QM!ݪmcl 0AAoriCwؼ3GLcȠSkS_Mbڰbq""΄U> t|iy:r.ݛ y6I%n`|OALr'cgѻ0;=΄ALuZ~RݢNOF9R`;'MxX͝y&Eo' bz<\}6s6'0 bzh9z_}`(Iٲ|%~8gڽOʐ N*uMSugPv{8Cbz`! g2Y&SJ64>30-;t6 bz=ؕR#˴[V{w1LL=8}s+N yNALoRVjl=$-dԆ7%RhZW %xObxyKe]`Qmq5K$Syj{ƨĩt:6G]J8V-[.5 811)YfMqC&&KTz;%CzI%UBN3o1IbأhY4X;7XE돫61VYy7 NK3+)!ė`@Ź 5ylO29 k`l`'@=0a{ތs ycțe?D=W8Zvm89K95NG}OaLͼ#;d]%{8ΐt ^Uaqca_RߙckbpYR [9j1u;}}7܂~#XgFҨ871=!D O.5f^μqCޭ;M{I]L csw5c1^јh.C(mGH4>Cn:1IF8{YWphא%TZC3*\Td6+8݅PC <*ȏfR~4cƻ1aaޕ7rb^|W,7'pCfxJ"&%4x[l?Bd~o_7| 73XagM^o [,MgB:ܴ9;U%C"!imGSI(TuMJ >Rv҄*hS Rv4 U(E߾nι8z0ܴ+CphhBi27߬sHnRLłrTwGSGHk\2Rx)TPR,'ޱB,t<N;۸d~;5~#p2 qfW##q-[}\pG΂Msγx඙_-Hv3xV%dx'l:݃nӑD "FR6C04Ѣn8؋.DKAX=YoYH tDV)_['PJ`ٰ\c!N-<1d>%/gI88۹wlt~``ud"*T9ؿNn ^mgy_!:X[1ٵ4ƳrnoC1AОކ9{ [aNӘŮ-g-Eb>"aMۮ2oCx3-s]S&c6o|egdxhGjwǶP3> M~$;g.>)t!9l[nʻD7[j友q1Q{$ϭ(1}㪉4S R %ȣX +A֦yk 5x=#ɠL;.9lAj@Vna.Ҟ4䣴?.J%P8\ #"(%0䧳C%רwXQ_P9D7ܴv6^ X;7LrGɇ}f[Oi @aKv4t=|aqWŗ ~$z ~gɒ4L.xs8Q6qq {M{J.)B5$e's?uQI0w=jhpgYP 8zz=1<J9U {,3|ϰq6 ,m߼CY R,,X]d.uƯ!WߐzO^-؜kV9& .(_wzFTZSmCUWUbYcc _ *U3v^Ŷhߺ`'='Á)Ikꃯj{rS,?J1bT:ԫ.ڣ7pР9gQLzwebftvS@90N~1*M?^2|!E;ᄀpk*W蕸ƷXYܾ֯n!Td(%R#^iἳ7ma&}`r+>UD쇡k:?^.Kg (0sl%3]P؋O""cp|pT*:mPS_>Ko q|pXp$$bڐ̇ ,N1@eϚ#zP ?v>!+=} Iv)=7=^+FտY<9/~qi=حY\ Oa VXYV?Yk#oź!@O|!XVB4Sb·9v$MLGuUSA[]sd^YI_k#E&T+\Xi /KfqȬ0T\` ;yJ%җiB~Sgt>f1dL`G1r`MHr*s+TE眿GP*D% 0*$҆'uq r6W@_JI&΁FU+4YMTA1IA/>‹!n4lB MemT2.dSi6tYۦ:^)|JXTI8~f}ejĄE:/)$?L}GY'(} Kp7;x+ա> F 6МF $+Cz=SH[II ;bJcWKw,i:͛m:MBZ/GDžkIEyUk{ /!2+!zY2p4wE] <.SӯO>&dׯV9'&.RK̲ij"-.ċQwٻu,Rpv?,z༳Ч}78%zi}F$#7&MQo.@ٲ! ף^@xd4c@O]rȅkϗ nr!A%}f0̸Id* Ǡ0=;V':qn'c+S0ې_jǔ*,X}5[yd횕Ewj`G+xdVx0dسOb*Bfߏj)wd'-:SDoϻYF:І&&meŊ'3;ޣf+.MTj:}:7m\U;nb!6`>E\Z,ȨTy-\^{*[ u$tV8$4urk=#ZhoimJ5L='FƏzJڲ&"9O^ڦO84%Q9^igy/"LI3z)Ғ=8U ~jIlRb]}=O˃|7?,}XdJqdBL#G9/5/I,܅!^JM$T +Bh!9^}S G6F2(=D{M`K)1UTz6Tf%Ws$91f5aV dȍROr  /\昽(jvX;t2Kiު,a s{W4&&,<4-i(?LӣWH811m{ םhj.YN^ĥ /)9b?k5V>7c:bÿϵf<-pAEM(̸%C1m0m_Ӳw/4fD%vXk+HFJH2=;^Ɵ0D"xjHUӂ,lԉП!VUl,lYGtqQoW8GNU+yOGtTCS0LR?H;Ĥ, w18 J]/%-aoT9]1*uku@鄃1$P!=6tܴ+*{L,8B3 z1#%90딷DQ9 nC#QȀKaۤ+WX[!(ÑovQXk5Q#&ޟUqUںt j`¿N`S%.AiO\mRg5ȸM:C_uI8.6B_;Rߜ=bavO܍>9ތ{~X'5͇[)N`cҠf=zx.1xԿk'noZ kL8;a8t0+]ѪXrJ(槢,P ^"ɞjb"(RI@^J0l0~g7,b?0#7/\u[vhz..߇ܠF%SdV= Uph;7Vf%}&Gmt뀦񗲒TT11&mY昬ot'&pl+`4?ŗgűI&hr3_,uf=>K(?<"Of&;p9.q XY!:DȗVa'֘yJ!-[]^99\K–>?Ĕ>]cbkau_"+9Vk$[O/$B&\b:8ͫ8}9^Aֳ0gȚP$ wY^E~J<*w }PS1~T:zw,ܰw~mXHժ6JwQW,,s6U1(嚋.vkaARՒ54H=~ӲUS݆Y'A @㳬U 7rG5/+rOFLRJmbRC⎸}h$$x bә.rkZ%v&/S_PA#n͒_*O~3D4DF{@W˚ZcWBjV|V8e,g TqܖİVhlf%cDu\lEWKLɋ+<{BiO΂4>Ji@ W 횵 |n!y%I. UlسX`2Ԍb])׍sj=LzN+ׅJ^ yP ]"Ruy*"R*S{W;InБ1lyS!2Q{7T ihO@;:ҳ[,9Jh-AkL](vκ?HIDAT?{`yK"R0!qF:UGL[k 7t8hQ4Z JbiۉHxrR#fSz8g= &8 .hy$wr3%yb,Xq: .!/Q b;QCTDnb[Iyp.r/72IŕvYD$꧃ /q`U* >2r$bty&mm cHmAc;5-L=^lN=UbMSs@.}̋{M6Ar[!(X.5;/'1ju_Za1s3ˌ/fRYHHJi+lB (h߾n{Wcn_Kr+o2YBYۯwMoYa"VV究z儻Rԕph?:]S~kPey=4M@1 ̥00476U둸)g5yEb7r=,F Q.ZbbEQl6%u:#a^kߗDZN'>^7jDΪnn}qaY*7HCx{N=Pkw*LY8V{}Il6E XrrX7'bL.",*v59BaC*,*%-^hZJ&,#9"dt\*ѱ/Y~ٴ$tl-p׳Q(1E[e9!B;Qi(6ys[$.HI)A57 1{W(؞X. -nyC=1R>H`N2Oz99suyI.` C'։Z5$΢t0KֽKs!տ}[T995>Taqn\'607+@}d`m,1 %KYc!\a`u!A>P,<7 PS)+n+'KP{\K_Ǔ@hy?EȒ/?q։BD7; t a5ë%}ZPsD)N a))ū˛T6FsmLd|nlRrǪؒ:PӃS1'6ӛ?7tښxEY]́a]!g/+_ _Oq㜵CK#pYNPVr @fD{v T@z>%IhʰDN.3RM *k+&iH k:bؔA}Phu:7z%#1'>X2*R`p05.z|ʎ2汿e%ٟcB"_Eu8IuJg}'xd%|6MPOy@tVŶ9177 GLx*-G}<I:tJVbI; c0ÝYaꆮTF!oY@jSGrb'ОZܓD> o/m@o}aaCՁM}Aд#\ek.-] 6UM*0[UT8o.HZgGVNO ױI,35+}7JrAF+rtzyIsяҘ(q\ҨcGۡ4YDm/'m)kf˄?h%j#Z(UcUUEǪQ]dSkTŀP|UnM*Rm;%R3Jo_ Uί(#>94Ľ&(|E6<{~uoF] bv+'gٞ >|3-ڧi Գ*$54;NQBw|1TIZO|c z(d"SBTV ;J]Ӏfbb.>3NHB]ydZJ5<.IDE0;*u$֍t6+|&i)꬜l`tU'OQ||N$J)SXc妬-ԪYyHUNk@K ߀X bݑjbb횽嗊yY%a(PqhuSQ#^ڏ`k 7?W~!ey*o TCJx(R>$ >l.P*&.ăg/@-xۭ斺q&TQD[~ӟR4h#/\4WFO0L9qGS9J\Z )l%: ޽A3HdUK^6c$cw;Z>S,=o6m/ =Ά>ĽA_5&Vnw;A"0ԗ&i88"ZbFu[/T돻f{_:&r{:- b|P|CА^cD0eû륃 ac:˒R@eޟ3;5KgSkXhmtYSfwm edl,ݸo5+bm V/IWbW0ԫC=ӏx !qeVRF$u;cʧE}Wu%*&3 QX$RQ&3h*}_A?jc%Q:*܇l_g\+iQ]ǥ֕0-~ysqrz9YyYӥgER&JXVi«g#+IQlrW+tFT[`CL.q$ٰ6"ݨ붔z7 U*1*ql,Dԟ/[VH I+yDd+IGb l46ӫ ;nYԦoL/h侾VqvuWԵ3 3813b: wP#ʯYW@J { >0oD(:P ݮ+N+xAɛa6IBM8C+vIa'?R8$rj.4aA%˴/nuKYUB hدOϕu l'{DJ,c$ zߚk JWid1cKz\5z C(mK[{cE F$b' M欞E6-)ClHb#JB 2.KVF3 nh7Ig5'vV5ERI)~H+򭱞E0n"ZF_앋f"cJŦ.p6!Ŏɲh[o){xtMzm4 pġ ,+#͖,0@ҧب+v&T&sIBϧndekx2$aK޳/Xv&[k丑IL^xDn$e1zyRy?[%iomK"qϱ:Z+ŖO.`? @C6mqR;qNbِXxH΂Q┲#A&vҹrJ . &n]6rvsT=qhMskIfي.Fw!(=UEx=rE~`] cP "Klݎĝj:zKttRޡ)od4b9+bӭ T~뚒sѐw+A1x HGot\q8K4w4Qה&7#$8A;mf͍qXLy-1y:) *ش1l`Ki EBX(DYqjhK=@K… IЯd˔㛋N/zd_¥t|e ņE]MZH+.>n):TTpk]/8v+3 <9&ZW@G^yPO2ԻzZ@/IH.lbj%+ KVsATnI߶#&4aMl>_6&kJKjYIcZQrWVPO'Ԇɍ* r)iO]+JL01#}RWύއf}z}b=V/_h^@h䣼wE9a Xm4t椆յ ij.nǢXA9 qMUm8˟Nfz5*K@M,$Ɓ㳴B!$)Pכ56~Ac3QUNlx\Ph 2AIJ򒚝SHqÔ\=b==)]-R{*N %/ɏJLXHe&᭒HEx5"mi56AԢ9CYcT aN~"J;%aAA`NG})%:@r+d/H6hG9IJRdkM2wvFMn#I.[`TT[ #K/c\HJW]7$羊0czKTJl3JNBWwLA %Ye|v~]ٓ<4d4 Q!88:|.Y\Y kdjp<}82^Qf;5u1!1 K MI=gs.PyN s{e7z^yMRy 8XIhKAԊΑ-h_{gۙ4-h]i)=*X?G> Nsu^PPfY3翛&jJaHL "a.tgO"HOl0027 O믿Zr{z{HU .(OaV%G୬i b8#21i0X;`ӻ?ڲ ֖'{~yi^ic< {2u#/yY6cۃ>>400p: i,1 # PN!1;nY=0?O=31,x!'xi``t400p: b81 v Cb8?|u3N ^&IENDB`U Dd. n  c JA&C:\temp\smile1.gifb Gh:go ung O?oWvIWPNG  IHDRIkPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.bKGDHIDATx]8 [b^9L;_1"mnu|&R#QyU~]>kc/U^j\G~b/k_񽼤l_]e8xEfr7}E}Iixé*_zX%e ^'{-FQ?eOdO'v^]`g _v2bp2cgɈ!WnW]c+NF Ed'%L}eɈA\Tߗُ?Lվd`7UA<})rٗՏ,0s-{bɈ Sٗ͐):F{-L~D؛j 4#q|Wǒ2bMk=-zAn-z눼Ϥ-zZCUm[_{*|21ڢDWEoW}U[_uDn WAﵯOjjcWA2||$O.Ks|)WǾ/4L93lWʨa,y?hd42*d8"}_Xe 2~xYdEU2* j_pB ac0KPj&3 ȺTYL);yiJޛi>ed73)RuVb)cBnTY*H}RreXn%fޯOҝ??I.tEXtOFIENDB`` Dd. n  c JA&C:\temp\smile2.gifb >ȺӻjӕCz unr e'";*=#%׫j3PNG  IHDRIkPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.bKGDHIDATx]8 - lIWƒ}cK:8}=q,)Y7yT/Z7ec`뚽<f_#m˰;lG/59Bl4oX8ż}"_͓zĎBb!Kh;nĎIE;FC}E#k_2Bc ::26A6. +G@%shW-8Y2VՃ}_ѦVP}E3<ǎMPmr F^A,[A r@yvH&C/G3$A{>bG+dUh4MMEn}E ȵ+ O\_v/W׾פMrtTɍWt[.]y4,r}*䥺]>5rm+nKx̾˶'>I }[7veUG"d2]vH_$y濭{'2BZ32\t Yqq̍؂2ugolfnf}^&־ -K[B.eC1d[rdƏll}_ˁ҅Lj6*5mp21QΈ68r9Rΐ6es=&gl/׾Ɣ3 LE0[#2ZM 3ijL2Vc3Z2M6|x|g8/m)?̳-cYL;$&3q܍ꆯ-e-Ib+FW9bG蝂\.;GZ~']w^>̾KgyLW"}E#]w᫘}E>H.}E>}E]g+@2<|Z 1ؙ@ZKg&}̈́R{hvZhF2sޗG56O; 9˭&9y)W80=˻8$ܙi $+LӓwYqJWy_O~uR弯3uW 6뫒sb%}%7ճۗ 3i1{J1#udl7L)ȖO&̱a`3TR\{P:Y̜l1̌U9>KAbKi}_Y>b=`Kh-ru-4wEE[$nf6ycSQf4󾒙{fW]H _bZ(&*Zؤ\}ϣlFKł0H0,޲6`Y֙5jM+x~5elm 2{@\ϣuc D.f{ρɳNefX4gֈ#v ,c2+y_g1kW6ZlCz1yA~,Zc6Rm`+mkah;20{ `Tw҃}_$CI}\zoeI}׾>}_$>IieKhڗ:п;|\<|r " ceYucx)7޿7ʥ%ibtEXtOFIENDB`L Dd. n  c JA&C:\temp\smile3.gifb #w@sf pun^ ti[i,PNG  IHDRIkPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.bKGDHIDATx[&P{0\ܵ%vDz@vN~I4ݾ~l3Kt_?壮u{y^mc`3F10Oc?flϿːO5#*xwgK[GgY>f_Hi*w޾c#evT/{}}dzIvQm7W3zu]s1 vDk_^|f_c>f>hHX2,KMe+lDog9Nl1k_H׾bzj$&GsX+ /ORѐk_kdW,"7v|LEPr|.e|dp                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  W;U N̾Ud|Wk_Ѣv@ ϱAsTA7pGP F־-hr-o IЫ\HA&yknu&H"׾@ An.EׯI*W׾פM]uڵ96]65^iXtT[u3p}jWtݖc틙}Em O}tpIuoʪW"d^ef kvI_$y忭ڽBZ- _B̍@8]@8#dbng1WoYKV\! A":-76K]3MGlS1fku2VE6={D9#kH9NcʱuU}IG$gXjq'_zw%+b YY} ڤ8 nn1af_xs 21bMIf_ JE j1wu$5WHR#X;U%z KΕIE*_f_%zg,D&.;W2+DW1.;U,GW+]].GS<}_~+bXqδR _ʫ<3 & B+<|Y+!cFr_d|!(eV_d/@+%+,!o̢"gY*rK`@_e׵e v8,.&"!fyW2uޗw_×+uafE$K LwZ1Gl`znV<ˢ}_\םn,v!_~ Ye!m$yTqý+YCz hcgčMVS)f2v!2T AfƆsg8U5Oj][oޭRb/:4I3u[i $+jGJ&NIJ8J%ګy_oO~5r׬dLfv}U2yBcnZ̟dfz}03PKl}3ROJ}M{)rd&6C%ȵ7 3y_yvq=PX5ڝyy_ 3XJLj#y{nFhsl+.%޲'^&!w3{͞b=2ss@L,(7%BblТN110V}.{f3Z(؊Fa1mYϲάQkz˭ٗ,ck{}_[]{]=KL]kz]#1 ŵ<΁ɳ2W^B,c3kĊ;ZαSb⼯YZ1ͬ[nP^LEm־MƾhX=C[9v̾"/8}_LNE, &9%Ob>{~(KJ]%2$NJ7+45ޟ'p;D 2d+ORϾ{KG~l ItEXtOFIENDB`H Dd. n  c JA&C:\temp\smile6.gifb Ki4"׽b unZ m{3*m< uPNG  IHDRIkPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.bKGDHIDATx[v6P^ r+sItf@b*oH0Ǻ=u]u\*߿n_׺U^Wv׼;Y爽\<˿غlːW5#:xs/n-ߟ~d w =C^WUGRQoGg9K~3ə.76|k8}OSk1 NDk_^rf_c9_Gs {+;G/7!߿/{g_pFe8b~}y}q~by_2w"dŶCl8ȋ7)x/6+پ1Ϳ<}R\dfJf۴X.-c'@[lW-82b/k_lQ; ϱ٠v@ Mf{``ۂ!/7l  }vX&C/W>b`M6 ִ/\{rOWnߓ6vR%7f_޽9nݛyis*䵺nܟ;^Rf_#ɵߤ]ǢؕUvӱT9|׿`~}_Qڗo{5﫡KOzc+Y&s[`=u\}{N1|#6r[HW0b}*\,n1;Gbv᫘}[̎||H.}Oqc׾ @~}=bO,}̏,WL[f#v[K^yL>Bp+}L;!Y."K}᥈fCGPft_o3MMHϲiU6փ| k_r fkҍmZ* 6ɾl$K}eL\3|R3;/GAfO,;+-'κʳllUmߗZ#_S!]_}AG do#t0id{.&yƺHT+b弯p#9: |^"Y9+: "HjȫNx֓y-W80;S%zWvs@>R$kg>ӠiX1=Yq~.;Ra{Y?ɞïN*uV~nvUxBfX?sy_Y폥TrizJtvԗ9$n9 Gκ?2džɃPK-rMCәb弯yqq=Pafyy_3J,՜#FVnFhsl+n%޲=9O (Bf;h<͙b=6s8 ̜,h7-u!16|ihSQL ̱]\}ϣF[bÍ8tcovh{%Xlx}fS/f_` kͽ<{n]9vY|I\EӜXuQ\{9Vxv15!6ͱ3{Ď{ lcOevbnqƦb,iksH5%:vϾx(;Ǧa}9 e)ѩ1'=? 2fr0˞[ˬއG[>k_X>}_L}8d3/k=/w;|M9)"ѹ=xr&ĸb2Ǟ+?I]m<[G~Jyj|;TPtEXtOFIENDB`. Dd. n  c JA&C:\temp\smile7.gifbl 7"{*>H un@ Q.P9PNG  IHDRIkPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.bKGDHIDATx]v(`-Yi+}c+Qs"kΘ`nd>o$/:f>~Kq {ymf/:fYFJ6^'c}f{]^\ؿQ3__}uh~/#{cدW?Row.WWގ9bo{~H2E"a GW0}P}!"}@`z̾ƈ1fȗQ` 0 F_k_EV8٥GS#o՟+B^+㩑kk_3ɯ/e.;\&Ů:®Υl4]Z.9}_Q|T6b G]z.Y}Ezao{:UoB.|uLԩ V}ŋsmdyU3gۨW9݆v/ shC#t=9) .{9[O nCW(GY< Zц@}(^}DF Kk_2Q/4br/EbSHl{Y8]$6ʅ]k^/k_)rfNA.}KDHgRёz0b>YDbΑ,bN9|/vȽ̮#.>} @Z9b ħ#SX$G^O"R _^>3 l.ECUo안8#/>d}!hnwtޗ)QƑ,rE3{P/̮"{ٵ*rAeױ9YDH\v} 6 ɱoHBL^=|9K3}_V#mdLPб5grws]^vҚl6oߗxGtM|5\nxX>+~t,1SAs=A!07&\R$kg>,RX)sddTBˁTh'}=9rIřJm~"ܮJOh}/Y=krs\\=44\=}ZsFe%S̖tvݜ7h9@Μu2qem&6JjkoΜ+}k΋y41lBοvyeJ#e|އuW"ygRJfuOj+o_S;>E:׽_T"xנ/ }_ᆵ7Ȑ9\&ueH/eͼWʗ? A؅&tEXtOFIENDB`DyK www.mathcs.shu.eduyK 6http://www.mathcs.shu.edu/DyK "http://www.shu.edu/~wachsmut/JavayK Dhttp://www.shu.edu/~wachsmut/JavaDyK *http://www.mathcs.shu.edu/JBD/images.htmlyK Thttp://www.mathcs.shu.edu/JBD/images.htmlDyK http://www.mathcs.shu.edu/JBDyK <http://www.mathcs.shu.edu/JBD-Dd   c nAJC:\bert\PRG\Java\Swing\Icons\new.gifbG)g-![2 7# unKZeTˋ;);PNG  IHDR 2>sBITBPLTE*4r~utRNSbKGDorIDATx]  )mJTꈌŢ sq;PO-!t`] w3.tCDlK>_< w^vO(ӿ2u}J3tEXtOFIENDB`GDd,  c vARC:\bert\PRG\Java\Swing\Icons\windows.gifbY GϹx`m57un-3ijA0)q PNG  IHDRl"PLTE9Z9Z{Z99999999{99ZZZZZZ{{99{{99qD "tRNS qbKGDHIDATx eGQZ?c~~ݱ_(@ZDZ@Kğh{X/$[phJ0MB:=< #*u3\E~"+(+2 :$]z1L{5S}9;1=;=&h-ftEXtOFIENDB`Dd  c pALC:\bert\PRG\Java\Swing\Icons\xwin.gifb9X4 irvQ.~uns72Dt0QPNG  IHDRa~ePLTE!9BZc{} tRNSbKGDH\IDATxQ P bv 3KSrVhSL0LR.c`&Ma}("1ɦ3dkĢA ;otEXtOFIENDB`Dd,  c pALC:\bert\PRG\Java\Swing\Icons\java.gifb-xOgJ5Mvun:i}7PNG  IHDR|PLTE{tRNS0JbKGDHXIDATxm ! w (QRvr%=0#6D &Vx{PO1{,'o~LtEXtOFIENDB` Dd< L C ALKb Ok$=Ԏ6g+$!t nn Ok$=Ԏ6g+$!tPNG  IHDRhW)NgAMA uIDATxݿvۺ=9ktNt4z S1Qw(zj6 *m S;9>~@J DDt;٬QEIx'icW?""j;#t"OgIb ,eo%I>uˑ&֣h|BL< !p}]a+r-]QVs8DT묥Q.0զ_*kJOiB5>*OKh>=}fZT=s.|^F^`Z=`;O>ԷkV3}bIcsvϳvwj>@9|z(Cr SQylYT߱RS57>qh9u K/_JU7< 7A44*'s؏0(W s99X.v9[L zYlΛW`HR8rk0|DCϴzn>{ѢܱbsJx}vdP*gNGJ+S.^0Ӣ"[ eQa7 Shu϶> |Qh#v 3X3-sʝS\3yӲ|qlN}g8/ aa spx*lǮl/&;CN/!7Èj5䇋nwfTJ͛;?OE$ҼɲT} koݒ%J=oޜhdj1ߙ( +mxn8Y'DBȯm~tG\DDg}[0Hs WsDDljh DDc4'"90͉ 4+|L*-}O ) JseLa"8"]>0DDDԔoʣ=ݳ\;DD8UAl'r^Fs$NDԶy8Hmr03&ʍʅU(yT7WɮϽ%z^Ωs"fr}N|;7iND];svo Ӝh DDcysj||Z tj ,eo%NrjyN颫Qu' Rev\f kR53|qߞL8~X+|&qǎuJ˟',|4y-4N[u S]z&pH!k 狫%QodTz5 Xe Ur62"/^C$g=ec/:`?(\㯄'U{ֳ>L6"ճZň`gTyy}syW$Qk7#0ݯ]EvSq{ЎicU@wYND&u,K,Q )ؠ|j4o#uiI=mP\njٓፄ״8_,}v{Yq9{^V^72z22}Hdu߁ݒZ/,"mT+>]̛]1;?r,!b78Yrc`fx 0 iJ=xSRNTVp}<.j!Pjg5Cwic9߂1q,Q5տ/7d4`}|)l[ɿfs{y[-}H>@?s}GE=Tm嫘.Gh}'Y6 eYיu`>i{Z}mE@:0li{[~S39\6+oۂo47~{2Z jFԐ9u>_JuSԐܸUoGߑ Q̌qQ<>7j ^oO2SZ^^yފiQ̛j546,MN/6jTq+wj=?45EE?9pXW>zNW[ӢϨuɖ}OKK 4Monnz-g@QW*3Mr]Z~=%pyX2(o[ɖcP<9=QN5!uK4'cbb,9{y^+!"1`gZS^ӜxtpwGFiN&o/WiN<}K-9HsY"": %vh DDc4'"90͉ƀiND44nϿb`[o&1r"2 i.#Yh?ꗪf޳TێViL&iɬߌi F!8GwϝJ4mrN5MV+^p-6~$T/A`D;XM^NWC l\.'QdDL,..xmOl[R+ݥ5)ib 4;ޚLlƚw{RÔZr\.2GAM'[ #Wie:9ZLniF#;J2gCXH^ W MO&-M5mjJ9IgΞ+)엹kC!Ivx2㩖D N!m$:~qsz!!dd>Qp.`  w6h7W3|zG ?;GpEL<#,tG-XL+=¸ ^\DN)(鮑Fj`, 'z-[x$;2+N\5W ! ^._,Ne3գNSy+,NJY@M]pitm_%̦_d-A_f76;MlN CAFw%jp=iSpp={VΜ~[r{Ᵹy^}P[o3U -x8*l?|EKK};_[>T e&Y> ?Q0ƣ^O.u ,qr UbB$_p6_&fcו /3 W0oixnt%i-r[=,l^(hJ!;,GC,$Y Gp A%"ItE3e2{zL$*ɿ] CȎkFC, C,uR,\/PJbsf~1 ޚ?Z^U SzVtgm-\ȿ/Ͷ}t]n_DH 24 D?d51/C3?p{ӯ?iI,]4&3.m^?qǺ=X[za?P?IH,G^aVdu?N|o\> da{L,?K!X|Ixfm Cطvn[e͚]MH,Xoxl$e|pca&q f}/Y㙁EX: Kl'[.+pbaUn՜Z%07\y,s#qzs[S$ S#lq %KEh"*ӯ[ЍTy:SE1c+q2P)t_㔗_ VR|9)$ozXnN0?&ir17 'aT%4'w$,_e Rea4A53ݦs\􏮋 W^W<.F?ک^=L3km( &_]RMohda$?H"k;UraY9Ke]j; C"y9r<%8#b9ݩR.N{WXJ8Ă/~Y0NG!V_#Ij<֧{뛹@,#"V6F#t8i|Q kGpK-ͱϦb/'UiDd4wQCVi!GCgdEDDڼx%Ed8]IGYd3!x9Xڿ[g.^s֊m$\pMA-f΂== ݞT僌 wGx, F[aT\# lkQ<~ zNO/[CG{RTrfmΕ; F] fa(x6u~j>7O`r5YƝc $C鯺AB% =coW|dN䟷?>#ZH⟿#Aʣ6Go$"i!?;" ?-#.^VyULY#?r:l5fAļ1 _|}<;7ϳa. Own\5y<im= uST>@,}&[VP?|3g73NĿtχ%uI#D7Y6opqx 6DMh}p}`32oۭsv%P$|je:{t.NӿY 7 Lhf=W'sMEXx Ex^`}o^|yXۜp]tc%-yC!~}T%5 DeaEJ/BTc u/魠S,$Y/N-B8-\0qP0`\LgQ-aY J!4!e+:[лg[CXHÈJ3fWYa_{۴yסqڧ7r-T!=X-у_\ΊD,iĿll^|a%aU aL$.%zgY˷ނΖY\{ vw9R;OjX\lk+sF[)p7v..ˆ}rp{0>P#_}i Ѽdz(Zxewc4+#E.,D $lּ`g0n^E߇͞io)i!6k=eJ W#!JS lta1?w&TAcӫ=N5%?F;"w ߝwH5&/pS-lQyOM!6;כ0U{5:Ec}&l%28[gV}˥Gtwing<ͭ$.Fֵ̛n-XrR,A9p_[Btk ,`7r~^]培B[ͯ Ky=3]t}SX0?ò%cy:?6p"$Gk3}d}K6L@k\t:ֆSTfd/4I ?0C[oytXH";YԺfԗ?Dt1n{2K; CY ár'u,tq1YM,]rň|mB3Z)? 0H9sgܰd![Wpڼ∅B"b!`,k_1,e" #a*X?l؏[Qjn w\9¥{s'Ay6ƆмeUw  fH?\ώ& ]' W*% ̿wi{גpe^^2w"&u_7n5y1rz/Tftp3b#mr]BF< }que|uqm]~a'87Kgۇ_:Ӭom-9.1v%k \̢h|L[gY))JO2bW7$,CJf;E;[0aq<]qŮu=LPiaopHGQ">={{3+Οw_', O߆?^v̓4?ZSܕ/*oSGOhқ`qVq"n<  +߹wĚGb¡n嶷|3-""ٻcF[DYMߠfkVC2 Os.(>\vjF$ ! h(j>Yu[\IsNA {'H ]5mW.yz`>?NJ K]?$bc (t@ ڗ?2-Tsbŵ@Snwt K谲楡.>Gts?jcͽd-8.Qd|2/R6+|(kpO?[IvGtgˬ6܅g_}DZ9kf@~2|-ܚ蔪T;nϏk!׿t,_f3`Sraxa{_O5Κ۳v SE_>-%O̵#A_+4sZ{5{g]AEVDv@_X(Rx֣MZx -<|f9Fk[Y*5lT'ߕs2Yзt3?u+m!?ڬ fDzُ/{$/YxkSFs/ 'GA*\'p$-VZhZ.=)Eڬ)«jUy{ 3cKWakUGmfes -1oڟyv RXAyFiS&? )l߶ݩ}辗- u2x?LŅ I2caC#A}RFP/,0/MzўB~~J~:jjXH-tc^[n;MQ w+In,,oB=Jea &lx ͦnu)Z+(f4.n)Křo6^ I?ޝ["k=;>%eM~4}/HGPiy Xd@ kaO 6_.7nlK'Bno ,,,zBijް~d$⽶G [x7kBe~oc10?0V\o,p,dsh08gC®#{XZx%M1]m߾ 4.=h~(/b)8+ yy㷭.iF6\B.^lcz >d;N~e% l>)+geɢ+ݺXwdܗd) cc?av8Jdme+ '$֤-$F,L&B~)+.JeawLEĿ-Z=(X4&Y*XH|[HjIDATpO+r,q-܈PO.VR,)}_t}j=LZhr+_D#u2#ZWp5*ޢ1l@h1՘@Plӓ~vX^{ZHl=ڶԨrr,Tl}ʶ)nJ¹mƚG1^,MW-,=O_HnK""͎B'HF&t߷[?%[gli!`7bR]ၔL,^))luVƱgOEsV .g-V9O)le>FylNB0ZgZ,l봰daBθDB뙯(0/\蛊'XG9n,4{:\K~\~  l[$#P\&i^oX(BA6BQ\o9OGPi<^\9PйXp*&>zwqag/CDziGH[HeK[I VJ(x+8 @dqYq FJ6NWfr> ^LʈZ{ .ѾQW!p @n<)V 'eNīvhQ|-lk-WByzw-=-' NJ2BQ7X(7S:g Na[:<Z~B县8HqE Ys2c῁6 K ~ܣ`6N0.&_E>  dD8ŋ+ "p#L`?P|WJ/s0k9lxooNTbZY9 #]ֿuh>S BjcaMK¢ˎqPxøLz?("ݗ/[1P:xT8ww ^ W+ĸ?n~l P9go=!ZY`^n1W7+6U&EVL@ Yio7?.k7>)-d Bj^&QMLȡ4[y6=9`6Z]#{vZ?a>7 츛t1^@ۺ;4wʄyL+868TTL X c"G6q+Ib2Y8?e12Qdj뼇Yܳ4^ol.EZ;ˌZ=KwApjT3XlnόKT7?,G0^ڡ\]¿j3#`rnu!)X)!)i\k;)P?Byfatf50?\=ZO'sn(' J>%:4#?BR--}:o!gFy h)u#XX_vNM#0/Mk,&BA܌xv,Z2llB_fNQ;JŇuj?B۝$qvuۃIm!pprwr_!2/M^Dg+6?B`w WQ7 epQl*[sれ,B&r;rp^^9т2V՟w;eG?Uic},v3}WXDL|9p[W3/ֺmXqah=MYR-d _o+n *+*6~͹|D?xPm[ Bm#>hJ1`;I!ɝ? ?YӎE,ᳺsֽ@LX6vpsI@vĴTZw0: *`Cwuկ.kV.Kܻ\ g_+3%$ .4][kIZt(5<!2] )`'#d 25;53> ⟔ibZ HLd2xlT9nkm Noŕ+m'T#5erΈU? UВ iP 3 M  3ot@Nga}p­6;}rz$9Qz(ᗰdKr7$f/ky_m8|vb. B'ƣ3P[?&/SZm4ͫ,LpD84 /c`\'p[ "da)t ZE[Hę745#w洐Or7<ѠI9sxglb)?k}2p:s/;680-L,svd(B'EaZHw< .\ ]ő ;gT|s?4^" c¹iR/]$uϥw!8#danY5{ժ -21o0 1*fI ,%!YAڼp!;s'rZHwx[s jݯS}Ay+#HwsypNޡ9y~pxY馅7FیDgaoHs!L?m8w8 . 2#P[XHGnG5#3sQv]!,Ne~^Rtʻ.4ad\- AG98+΄8;sJ'ӿq }f2` .X؛Zf b,I} &b!0%@|l=RapF6#N{w^]S`-fx~"6cU_B34Tkmr%(R.eIט@{ztUԫV-\kgk/<N d]P + ,,3[47Y3:1{uW%d!Bѿ=?)T agێb%t %bphf<}`BRdaJAv<οHjO3$y_h{V^;=D2v03 Ct@9a;u/CK[? mYiˑM%w~ ~uU&8j0}Sx¬f2a0ɱ0הwMM%]\ta+ S0kg=C1- ~G\! 9äPDu3CO0쟳&#S/Vd!a:ƉOeNBa_A3>ߚa8KZ7#b gjYˡq0`;bI,XksSHRUX-\㩢Ÿ~J6/Xx=ls=,? P~Ē")T[fj a]T{q;)Gע&R,{|,u\Hhn@?_1` &]tF?ڛ;Fkކ-  Ţ*d$&?R6W{ p Xؿb`Nj!Iyy[fLPbaQw'E eb!Me=vL&zbjѠ}'^kގ/۞巅i_}4ʠ"_7GC\cp &=~QX:zcœ6isOK#u6(yxݸI{?ށ B5BuU~ϊ:DbN#>+ba{JooMO_x"&"ȌXY DIL"4V?eb\EЙ -anK7p I.0-dɏX7b??*򲐅ؿr\NĿI'et L2/޽Ѐ栝7s6]Ŀ?%(8-`k -)rPs ?Í2*M`-!0ڟ9 W`pg\!?K8(HH쵡^IXE"d[c_'Q5?ȏΐGſKސu=o,-ۆs۪;_T8KǢ=\=54Ɋ;Y`GKۆ=|x}W;~*{ЪӇW\X߳gO,\rxՖ ][ٲطj:nuic  >wV|KnCʗkO{?ݷ_:#A5ÃZzf7 فz-RQ-܃7}姾}xram޴iVL`)[Aw>)D.72}c=ɾxm`'W[=rdыvݽ~~bƙF% AD5sc[7֯۰.;5WL(HxUlZ۩aJ+-V5HPwu,Zg<•냼&zrYb^gɆߛ:6EpKXX8iٰӟ z2z1W( L&KZjyN󦀏zp8! pbeY( uީ4^DMM/D=Г_7 x*jE .Y谪۬àpMp}v)#~p=.wXed%7yg..fXHs&2x$T8vR+-[ZISEtZ(&J,3x AI5NeJۦP˴Кim526=eA$6àF%eF fN#QʛV9J1i7j[ fBf!Z &ZRJrIB]Pvt^݁{B\iXz[Z]9clU.^3'6^y=;FsSɉ-CK;O^+l9uO⫯|7[O[۷Yd½{Ʃdo,Hy$H%yX-j4bktk- #щ4=$Xj xv + /gH.h&q\~+ӱ/?77kepݙ[o%vm å+ rzab$1F*<$#=މHb㚮+No9wٖn?ۏ3917B=J_6K5FlC^{G/ ?~oċ_'ok4j]ͦ WƧzgfV5NŮ5;PUji)%RJAZJAr0HdC^/Gn6!D̑ "D Q-}+|-YOȆٮG緎_ss}Ǐ}wrtz0qx#}E.&_qfǵW{orUkXlo8~m#vO:~+_{o?͗G͏Ov(iKDo}ۚu#l,Wc,ojHo)~k.tߚ5Z: B`)&] wZC<T,S gqGTySS}-c#=3SC!GPP* 'md(sG*8DNQ*d Q #b"hH!4mv&ԅ=M|W)9 v[> ]d&(t:8;%Tja[5HA[2aw:nOhF?V篰Pb )a6uDH0דkLRSODD,ĤήoΎصp/?Hmg1C:Kܴv[ /Lyf=x_hn84J3:TN!n:6 |0Wrbjfޮln|UH0)q K>$ {f#$Z0QwWGH̝KjmBCV%9Ǥt櫄|]1&R_2!upR1.!u[|D1H=rx.lR˜6X`|(i2IV I;+粣B”IpC&mZ}JUChCi03-Di,49hıR)(d¤#ZuZ'0R虩z'ՙ-{<ɭ|?-lP߶4th5C;&Ƴ 3z쩭W^;N^~vGc k3Y[O_0K5=SW]ⓛVU&&s^sk_.kO_/|Rg,Ѵ#ak$Źt}xM=~ ]< X nzhH&0q95Tl'=(ٍ;֝mp'?#cl0g]ܱKxLHMiSI)4[Roa$qF DBF #R|Qfr>B:,fH•4,auU+Cro6Wpɺh>rF'T F䌾٨0N-g7xݶD٭RZ'"ĉ61GL2j˥j)2ܟKMշl\s⢥s\2k [+K4c+%B#QÐ= @I i Q@3ZI zE @:PLOygb_NE戇t>Ĥjt GD? Jh0\`# @uUdKƹAXU'N5rU+[Rt~f [Y3IK<yAHT2^ {&BFDE'"Ɛ_,p@$&!IX:F@F\A)Vj40R3nvDE%c ?mz'KXPOOW6l}dWz}_{O=s}9pr>tٻK>٨=s֥ Y8.Z?;[GM2-1 !ڛ<5O=}ۗ[/=t G7WS۶tx>kd2CKf\#mS(I,wpÍ/tEm[<[=Ro`kBwDX 謺b_nr~lYOU >ws#;Ϝ9?|oϽcWբjZZr^& |-VZBNXX'E(O,8X"DQ!֯h!J3 5$Ȭ̎Yb;puNz*`+jQ)wPt8[BDm;p VS~  Y%` ܵ?9 I<0m'~3뽄>٨8gM{u9)(#'B| |./8#+80\сP?8Vl3N[F ejbDd\٬vLFD*oՌUc!m: ;MFjt: Ym^&TqQ&.: McTV9Cҩ$M2>T\i5-Lo?qzɳwYuMgNo?vtgw?3Ǘmkݺih߮͛_ {'7=fbԚUe$w7sn)_W;ylӏ/o}ɩ[K>w^~[{hK9so7Ki:LTmyd+V Tzoi).yFҔ?R o9|遛3j3O&&&.[^|_x.;ohvXJJZ F.*%7p`լH;fEΠ$tA" # Js9chAۑ=g@>75c~/=ڷ//|;/^wݩgAhmz3!4m&֩X6I_ޏ^yOk샟{."I/g<7m-JRVr=_ 84^E irm;TLE]!2P\>;L6asAOzC!`룟Wp啗`8oBL?y`*r.H7+-,^WRҀ/<0l"&p^v#I([FIkl@f0uHq.vՐRJX310O'QJdCgjQD|IZ 7dƫ\cq,,D)rݿo>_מ;gTOٗYJYWߴah[o|GyW:rl%[AO?{/} y܋/<WxŇyg__~/~_z_߳ekɉOO}׿ }7lݷ(3~OTSLwM+oZJ)359Y 3ug_(Q)e|mwKs}[k׎ U/c_|'3l*4a|p6 &Aߒ퀌gG4VT;~ǒgIĦ Y ?bLaQ:(礼,:H6L ?ȯg5ל>gn?c50J6Z'*Oy*jX$P&#G]zH=dǥGL0Χp:joԂ#uǘc#3CmcB\Eb|-a>+ѽv475> Z1JlB5F夡-1Jɤj&ԝcYº?A覰!9!iu[X x ~%TSpfĝcpa[|;]]lQJ(A*9m)AQakyA7ȁafIBc0_B ?.[ Ȩ<\;:8:1Mȋ}fLPkR2V֢3Ds#FA5_(v+E=0ZC }DkE@PFݪv XVY| ?m5;{R\]Odzb8,ض]7/m:u͕n[?}ilau}Ú~j8A*Kō#.\~7^r󭧯'o9=ؘ4{|^_7{ѻ/?w|O/^cx>㎭}~~|ۧ>+D-ѹZ:T&O3B֤Rz}N+pyhSmv5|^x:gRo~~+818wo{ן|ɫoM9HUZtuRphD˟iql/ mZHf%x8|}j%>ŏ&ŭKhN۠r@d$8FGxSt^/6t bH 7ٕA&G ya_ljܔZKYENR,FA[tp{@$vS ^R۬$ǁ6x|R$cā0l)/Lz vQ$%LJ@PDG3@ab̆b=L;={9sԶM]R[5u[, }ɩ.(S;w ڴmjšDfbzkK}ǿַxy/?:Z7=Z=Yw <_CiF=vxw?o>~ZEDiVAaA R-/(X]nӷȧ=ijO#^{(/|sǏ_|K/~>sٴvs;KxNɀzW@&M\F$yoCmeI9b&Mc'u,-v'2SM3?x~cˡm-)պh ![Nb( A42xk?|q#Tp]bAWk@_;\GXe@p?7# 7*ᮭ3FWPevߝ<倚fJ%9Lo#NJ QX 9ȁ#ۦsY my3@'mɇȴ^ EA@!:y>h50bQ#ԭ6h";Uk2,? 8 !N | otMf85؁-dgnb],Hc13l*D=d)p[P>j%03^k(ht:k';h«xyۡRx QդS?*IRI|Zƚޙuc\7T鱹z"ÍMU蟣6سvr2uΟ? gݿoc[ T31Mn)Yx@xh2y+yǟ >_yO8u|+Rzj?w_wVMeȽW};^}o??xkp>ܢntJ=tFbqBX-UM1%zato;Qz8"6D" %chdVf;PZNJˉ;;\7uɹc3f7g3O?@D_mz(Bm'hvFnD%&SY? ~Y`56x8#HHVQ}nݎ'+ tI q92eÚLPyIةca/g*[3ў@ە|]$ڭ:ˌPr$Ps30 BY#^"HGQ!?0_Fe\P`%c.J[.J ڝT̈́;MA/JX0\^g>b! 8!hFڀ^s+mЇ%G"uZMD )ÉP%@ ́P|;iyR46\Vr (͌Jf`GOL?6?:vd|ЪB_:Wk7Mls%:ڶmvϞZ-Sի>~[ޱgm2\55*"ycV_O;Lc:ihM;x>+~ۿ_zSGsUO=avVyk/=/OsZgT%uum{[@<@4:0h!ם޴{,;6k1JdH=2ҝG =9*: oWs|ܬ_0h$QႸuub.$'ğq4͢e¤9iԔd)OĝF u7羛lxWKQa#3V<emZ&%N{+hL,zèoi$ 404C@nr]*j53vVajw0*Ô Q5WD@UYR}ŬY~R'==rQo)ɦTm.J Ì(n -pyY¼5#_T9)kV:H/4Bb {F|Ϛg 2.82Ut: @  x; bga[vI7i)H GvBdy"56˃Bńe.uXI8 !%ѐ٘A7Ԏ? :4QjuXpdI5f+ {rY6A"Wx &wF#$CF_@$*EυMR.K[4N}|-w^hd0S*Ң!-2,Jڕ͝jxW]8n R==2׿U={ɥ|^?Yi X OMvSt WbᮄD]Lԑ*Ol[01WF JU;Vhiѥs'-?_^y'>}遌$$r{O߼{]G'lH%ڎ&JQIKڰKBjl4[j52g&g_3zn9I.Ibw/ݴ*ߝI|E;FNOB CUj 5I~k4D}FJ6Aఛ.$ϙ\C-Y<ʰJP rԜ- q=Kf9n ^hcau'C$w\$|ai# m0SIPV˽!kq2Zd[jhol|v,;p2pzg휿 : &2Usn"biG%Zbb0:aiyfcY(**d4Aa4n|9mׇ[FbztH Io{Lz@SMڐHeSm O gEDeuA9Q`̀?C9KˤromSmvB W¨1Q<ʘO P6ޮD ࣎沴N֢phaF]kU+Z"휛 <='\ ح!.JkZjqhEn:F9AvLbk@\-LGl?eqTO=酱Ug_salTchcXqeJ֨q~* _5.l@d/*qk! +={ād!f=o)6շ~|~m--ۺkر[o1`Q*c!K"BF:مwy ѤVth.ͱ^+gCB y'@w95)J_MBT|]Ehl&&AEw4lq:"t8d#xG%A7 qdF\ؒ؊G%n)Mf4!Y-BD^ %dHYD8 G"sZlylY?8pxI֚D&aKݟt|S-Sco$eI nbYtQɀ>A #N' Q"/6`ɚJqC!Ilt6stw@bĢoavf&=D'/*QiLF.FY.xnE,B.nQ@@)ίnViuE8\)KvGf{{ƺ;\m_ԁ-G,L6֍.} j6[Vr(wuZ]iD+woRNԪ̚QX1PG{]_fwzl]to˾?/ޫ_|;|{o?ͯ+N:רR}ȅ:8J$B}6( \-lT:&Qw]˝\47c};m\3l$<[m;uͩ@!*ϭ`N? H\^Mh2 jw@Zqzͤo' b״'08&O:>$K&R+!T %au;Po2cK5cȆ`G$%v#0B?R?+C}y|3nHd/@aX;"Sq /qtZ)Q`U0 >KMZ+Nmd&3#aL=D?=ח+/s\w+]wjnR~QDlwp:K1;=UIy=5"hhk])s!(,O^X7x乽g+/|_x㟿o͟~~~Oo~/~'l}$[)o5!q:Cww5@עM697ZvRs^&T%{l6{E,J|dC_z/>2yՎ{m&0 |T|(5-Q< `ϗxž 7|)+!#.D%![f%wJY?ċݥcްp`1rƒ A^!:{*Q4$f?$SrՍɽ Ovő=מәC?xSwNdVL|vWTʤHqU]#=`_4TS|XSIc{vA.j;i%"DSr0Zv=p$N2z>>T6J\9F'=bt|\|'" lf#P8Bbw֊BzH $g%{aNAm>%h vP>Aܱ4!,+3ikaTMj¤0:-2˫-Dm#v? < qA+%_&.g5z͉79{KOܟ[FkzwF| 7ޯʨ S`sN5ةFf̐++: Wu9~~<۞6ŽB:\/?xgoo{y[}_~ӯ_߼ۏ?/+OrfB%tJRU'}_kJ1/o)Ό3Q߻4wl_92YdSqSz)!Dw%ZM.fMSQ]ďNcGd z`YZiWtM|')C+F q` ,ea7w寺=Gs'UHUjA]"$"r w8tZ9w#Ě5*ܜ“N!kV[Ty FOZYa `oh`V&-O&*{Vk\t,4A)Ty^  s -4qzv:m?[~PwrLVTJV M"QlWLo~r [*sqv ,(~+($u@!68{. ownb~wLZh=)mc࿔|p jg̀TvL҆8y˂NpmGb3"4 v>eq +2H0"SIr55A/j:UV\<ء=nߋre!(&!)a3i yy=H@Pba,0ן^;kԾʮtv̶y~nD[RR՝3W>qKݓWupq|r9࿸B d$}L*S*NN$ y6sFB+#.KS?ZNa:߮ ? .i+bmNBut[9tmȚ |,e%g\ XC&jMt=C%Ljr>;Uڎ stN­(c&\'adZDxiU S:* C]ωsɇq^"J?:_:! !H Жu]VoKl[˯gk&'@UQ*z%I.\LWޒ[9حldj{oE:msl^ݹ۽ɿ{Kx챃KaY)\kڳnqͷ_}毺{B~iq`K1}މ^r}ѫ ֟RʃnKW>63];֔Ӧ 쀇P\ࡪ^D=jZ[,Z,Wԋ AtV)L055zs:DƄ+kE~/0>Jʭ_\(bS!W=uQt.J51AX(xy ߬^{;/K3S EbtasQ|.M- 8mdcd5IE$ l?'@J6*EHŲ1-&=hgpr$K==Y 133B fP033GGdf$sVUvqwOϛ{vq{\7+lfl>vr\??wL|TSEe1Bò?/2q&n"ٌ:"u샒El|gC:3HZ?!c$(P+M{ (FZ-+hWWS] 6s r$ Ai\,J^gW%<QiY|';@J!L?A(NZR+? SFw  2 !=s)F6 y 1F`7J.77FSj3z*OmiMc̝k  opKJzXr0 |(60zC ]@ g\Е7A'`s\SiPB!3I~d35osKm7OoZߺl)]ޘ.&JL>n FsnhN6<Vm۫5 Xzϯ~8~8Rڂc74͙wb02v6aх5kJU&@mSV_^*,S[l]U,@Wd#\CR*np4fF-qXAR:1حmoP\ý&Vċ-ޱ\`r%kڲDr$ˠoRbpֆ?"}do]-̤E"#=[ o5ோ?sI>c2EgkMۡ9Ca>ػbӃ!h?žǃLj̴t4ZsL; R a($2MYw r)!AI:QJu(?GX0\H9~Ռ/D#$$ϸgL'")5+fR"iS:Q&>SatǺJ+TDHA>q tD7$=Uj-]ttXB ':/A[aPG͑#hC9 yDI3L %dR JT[6c%[̠#ʫs:u̐]\@{T@ شRGUE=4p8|n d3~z2$!ۉ!DF0/Faɖogɲ4*p_]՝+Yte[se[#);Z[=5}QԈhz?=Ÿ΍+W+7gב3юsw˵nZu~6* l˹<;l:xr<ܱ͍ۮN҇;nDAE`yFݮpLym̖tuc,[WSq?rPSMg?iu6J[8P6CE[lpncG%]4RJ!P2Q9%Km:SԆ\̈Wܔy(*6uW;CUgc?0X.Oٱ@U_bO !T(|kRʪ`m<;H:ć̇d JF^;tJqysmt ]qp)l:m)ƝhΕ6c+(1!6owdQ,V!U (+`3o})$kă"&X<:oK#EWAh&ǍP,^b2HF~ePɐ~()|X~4b V !@8@ $HwU6SNCƠfd@ǬƑ[IKFˤAf燠ͪ22QFWk\|k   .X/Q*֦綄WҁdYVenCY((nǔCB..ˏ!i7K҈9gJ@IP:tf6r_tmxr:J\ԝNv}۲aҼcgӱcZ_ӯ,D^@=2,ȗD35ev?= >>jZʢkgS<:d[[ 'k7ϚA,wu&O?$N8MEulZYⱜdrH01P߮3,ϨgǤCr4]R%eRiUi2wyN&FT^[m'm].XAcB֞u¦͌x41Xkz[KR 6@#{o.Ώ#Ѭ/Vd!+H EpF2ύ"ҡ5DC eS&N0c'lDPpf G\ghz$4 cA"ZZW4CJ=@/lQ֩# KY#ݺ_wv~|YJ"׌@ >@>a)JNg"&ؠ2n'F-ä2i|ˌs]F\J%8UZ|:Luʪ,bˀL 4Q갛9V!]!Љz|@2l顽zL`7@CƵ&kX9r|ߎӍxyM"A7\#~$aSb`qTQAڂ 6O + a .7P5lVp;ˊ{; H̥ ǭO\_1v"AE><mls>!E5CAbێw۳I]|z¸;>vw++Ex(whG1stn:W-+Vŋsƽ,{;mUO'OLudĹT/,x[޿MrP7xHtD0FFzmS~e_QU3ᷤڬ`IEɈ+"!IP!"S0X3bgaK}y6:ُ]<_E67\Ǐ玽Cچ|aI63YXV)fItzN>7Ѭ g+ez}3{r<8?Oo޻O|Do©Q3ަ?<8]_$<>5moLQ(.amٸR̎;[}zcxX_`O 궖#7g%Fg~n2{u87Iؒ>9d7(+lqύ\ 㾕iԠUؑu6=͊6P6k 0PdX"RK)?qy~0?EB|3cH%΋,A'ajyT#f{pXzN} `fdlHБ ƻ.DA7ԥme$Cea745#l[ iS_;3H1NT㊖<ގ`OdJŀTH=? 0Ba):D, $>xHpc#*s8rH!BŰ2zZA2q/pN3* 2[Ԉ&q,)z$bmQ"VKJ|[ kP6hfrF!vY]EPȄvƳt~nתL-pp!oAzɛ4`sl< 8y:>d4S]FWE+k~R (Эg=:YCwY6^A# |{GU}$.f9?H "xxc}`d Y '1O=^'.OGIس|,[5ʚn}Ӱc1,o+Ucg8xv}j?ĞulivtRm%yy{ :Mڏ?}ύ||뽿 |&z~⻽*V9҂0vwc>>pwV;ΫK)w~\:}z>٫jo LiLG]梐:2zx-x:7ŝMHI;kя.lPw; 9rt'hASIqn,P.FeySZP+EI;Ozڣx^o"?ij:g?7$P~SA^ {5c>L57YE1ٚQ@|vbeV{5e&M^/re6UGdAo䨣1nO bb=pId)ZX i䁞GGVF}fJD86 r K*ȤTRAb2 juDnmApX0E]iU$*#$3N9aP'A; i!HerC?>1\$p|%"@yaCz A&m/ :pb 1fMJ ީ/w\zʢt":lb*Oۂ#oY[d0Sc?EymC >̗=!I]]N7O%{>_wy^\Mf k[ƍ}m}ǾmYݲm'맙Wscasa?8 >b7Ow˛ k/[i+e{v>]=x9_L%ݧ2}x1Zf67w boM{;B_7gճřL"L[Ttג5MgƥzagKߥ1L HZe.@;QӤ&sNQ_f/9sNCygG=SC]G8e}a pA# 1b2x!:AAфEdiB:cۆk1itO PsV7GŹ&hn2уy d-<Fz]Pj{d't7KLwֺxhnf]vr4֖z;Iò!O a9<jHCE| $vp@_k1;,h&f9{ݐ^hbnlrV-z3-oLJڬ k|1lrH UH&QڨWvvC< ZI 4ES( EeRC[ !v8"7JO!M'ӷ4 W %h7$r:|QZ<` X)|"M%, r2CvVYx 164@PP`_C˓ty}1iou0K+sU`OU6hqfD1'uZ(U}q ْwn6ܞZ&J!X8ܫms 2)z :eV<*1im^:ˠfjU5*i%B 7j9-ĪmzI"r )ڪ몛cfxB6.˵JE=`fMSӞ5 9&TC]vi:X6:&t/^g ;9ݭ۫ᜮ!$m-p715 VnNNj$":3d=o5A(+2 >E{ ( ?e2zݢ ym5Ux%.aUzHxc`*pL6d_eFU^AǨ4ȡj,JS j*WIyLMA]pw,٨*JO AAqaЁvwG6Zgb= iБ7 ngVY[iV==1a&4ףdUOUO4VWASvL PDr!%R|,ˤؕpN?(h%V JψXuژQ0tRwЎotSDXh`ʏɏ*\<J ziAM^1eSQɄiog{ LaWާ Mڸ[\mo7%ҩI^]rnִxzWw{8yqc3ɑ8py?{FO߼nׁ̻;k8w>޾>|~xثc (t_S˧سOgҍe֪yyj<ڵ?> >g'DrnB>=Qܜ6/:wT$XբיּwP*f&k{k:[+ݥk{%_6,jf'SұAFWkmwkg=v~s.7+aEWDBJd2zBD2FsPfPdEZY^Zn[+r@&iAkժnMWr=Nū چ3XySY8#v ;P; \;݂̰lnn:ƙ 8M>tզbҎƎǽ'ʼ1+Y7m}p@J@.U*KpbB`4LJ&-JjH"a^xT̫tx:Z:ZiT5l\mtPQנݐ\*F jP=dT)SI.KIC~4jFӄ_f%|C2 ]2e׸h>0tJz6Me֒O/#XyebATB-d qn] 8tOۑu$aVL8)9!lw4Ȧ/`AkJ)Aٕ\nWP43LvPVΏa۝B2gwodna zwkkޝʊphP0kX[6oY7yWEwK۾|{z:= ^Ͻ'Gcwݗ#/ 9oCϙo;` ~ ʼ`!Y_ {!*R,構ښcCط xudvҺ;;]ԭ/cԸdb4|v<=Btmc o(`t2{,S VpkS76ijŊ|>bJG3UVu ¥/w* .e[92]'Rd"vOX+UʬlrH8'6,drH5;Ecq:7)iMj # I_ntqٱwn*07j[d0u*L" (H(V*KPryB7[X:}BY%3Jm\(('\s*$rZ.R *1,RHlzuXViD`XawT:\-4Vb4/E:qNTl?d!:?J|{ >*EX֦!zڶ-֚`'rw}*% 3_a㛖?xq]xz սz@.Xo,KVXcqTj1m8ʥ%:gtP2lYI1Gtm/;ws~PeeWhbL//hgۛmhE:E}@Y$"nna>]x|3Cnf9Ja(jj i7TԸVB\%f#UօսAO[h'zv<7Emn(}w:ݳm.A3cќS?5"n3όv=3\at6;4M ӣsn15X_-/'L]Xn-|rJ.CTE?2_~yY˫7=_@?0_M,O48?>@{>_VQ1-Wdp 6W.5Qǁ@eSÛ>_~9h@wWg?|ھ~SC/n`PQl(V+?ܤpiV4 x߸:h̓Y6M@T= :v] m,$4ݸ IƆmT" DyܕTQ(T 3n6[y#4E¶ 'c$CxPL*N<Ȏ.qq"J,5-MD]QYb6eݶEj%lw. g[+ɾcY7>$j7wiGle!Ancv:>Ҭoc:;Z,̚GĭeAQ V],G^5O^p0N^i2j <i.ۊr&?O1t*UmieSR&U+}~)bh"JfN([N] GS9P5CHplڇ  Oije5X6;?/B$ k:oڳ1\@zB- V\caУNiSuXiÈɹ$--4x7 UV fn($paA142K2^yܤ.ak6n-m:RJ*:Δ)N+FN*\r a]{jjH+8T|FZqxz*[ƥo.?aJ2<02Ǵ6Cd!<}a(}}8?womvw KKNNwf寨WtKOY?5=>UOqEwpDPM}/"iyz2&v~׿P?~|{}o??6!`1s87" ewgSBWg"Lv7sSo9F$ z*9g& `CζG8 T0PT嵷;;+G~q$()τk[Sde:\GeQeVզ#LfYkFܔ,W"j7 ``ʙQOӫ'駗eX Z#9|"dv:VuRv317.JgƔ Nؠck5x3Og'r;CTIUǢ%_UT5pm4"Τzy^3}h&WDY^cԲ •Nm<" x blb[ m UKd\F}(q9 >3SֺaT P@C#m*3t˿Gr( Vx!tNNV&W2՚ZE%pv?@/ZɹUnsQssܘƧUqYOeç: JKG jba^p0? n1nWrIA+%@EGid 3_>vF\؂ ݫ_2OPAulSqvd9޳VU+%*= [ Sc+ DW!m><#  Cze߽-;vsc1 L*lǡ!x#vUT4f%Cᡚƒd 6YF[8B.*ࠂNo/zc$.*/34 FYv)kbק?֍Envܹ7O @9&-#\T;H4\Rqj;sd6-/ǯ/ģCIԄldю3K¡xB í:<$:ߢ"PG<ߠDrU A2*U_ dMF:J t&ivn+DX,nԩ e"h.@$a~.mGSQgtT6^ȠILnd|^W9椼5lO>zyWZ7FK}֪ژ!79Ȍi8D:՞LT =_֍Rď؜T("*aj5Sم=%%w?׷_^?in_Ou[ ,/UkkC=;<iemٿy*phyy?{< ;l?ϟ =Y&|{Y؁P,c A{7"Iݳ^^vFWsQ )LKSQc|xy"BY4ĂBno4[` Se Ik+hHw5};e\pɥgq9=nI;ZXDU,\UnJ-B2t G7G{s|ۀ3|Qpt zqDSP>XeSCUscY:EE4B`<dtE$R>r.J.֩J2̠/5h"jdVI4-R˪h(J՚ZE r՘oy#GjAN\aQX?}p^0E%@`Bav쉍d)AU]e0]Ri7"*l2*)a^]).zov6t[kru[P,&eXP,ƞ\w}Ʒ/ *F8ij[h!*ΙRGNko۶79@WU{Sqc 31nWj|:?mwF(>n,2{Z)VM٘zy:rqdYUώ=۫5yW.Tq6v=>nxs~H~}ʴZZG}ƆVn WVJsFn[;0.Pj)JLjv9X>/ [~?Ei4[˅͸ʜU&s$pyf>eGU7JP6+**%C )yL]'4L & h  "jJhߦB)AAIB|1t2$XjJV0N=I&NV:ͥV==0錚t;Y\ePF-*\7€9n;4vizA~JZes:\%<[5с}u 2-̡ݎB}(%ֺmc @a\slem?pmt-(4gv薙 ?8iV;P&?% E@ח(s~bp[ q[Zdwv q$b ;Ν}Ch7Vph-ăpX?2|.̄jyV0%j\xt1M=ibf\VW|?/͟ǟ?7olPg9}(#RMW'U EѺGpi(BMAtp(6AiTWXt4 Zf^kC P'U#+)`i vvÊXuQDM(Xq9mN[&lL1!Y{ֻ0fU\Um;he6TI#{DR LMrROXUh4 e2q&F[!C=O WP!=]mٯjzEUg]{ˆsjh^>o^u} gaIyե{mն`C%z?> EyyZ %´!xMsk݂7nGpg|vVn>'iWgұE8 זPNJo? 4F:"A@N7 =쾓Oؘ~v7OcbXUMp2cH&5uzF6,1̎hlTLs;ܞl 4dڲPM H/U_WhRȣDJC>8,?ZE~wuNi0PSfyWdwc??ύ[[i$o|3:R:7g//iJbvV<:&ec!^womK[UlvhF`*syӞ&.O/ohBRZ=3*BiwIy02zk*ycAZ"CCНSyc 9؁.$Ґ[+z?DETgY U1& yV5'gZU=]w?Y(VD!̪F ̤a{햶_Kא0i 2jEG|C 9}/p|k|ίi'Oǻ'gg?#?~X0{'}umo, B e*Gct.5 5aи2kjJ "XAbdXjJ;62E5y3yt]w^YQ,.M۞Sƛӧ+*wl PloT±1̬bbtpX?v0brF`HШ[u]ݲVf$JQ}yK,1U".j-Fy x?$[jlbRHUZC|J]* kFfg-䁆!A҈Dg9ZRL/Oz$aӓCyմœp@ơE\LmU/ *hАLy=pX0ePJ UMg3 *OċòcH2M3glFМ ZĆ(ε)Yq@9A`GSƂ(CQwo0>lW[FCFSTd"qTV.ۙ!~jaSV*#@=#~o?0S_?@Dv+˖̴si1??n@P_F~Ip.!@Œtn 3J0wu2q´'/Zv-+u}0WOF&ĹaqOm ):!a};MͲSgDbhﴹyna0XV9R*SVReSjE4La2BϋH&bLj;#M@d6B yj E2* N_0lZڕ=o M k'T4U@T44-dRTlT;45$DM<^p8MM&nKUZ_MّBxWY$308Lzu6o~͏9vb)G(\0!Ó7o:?ˇeuSy jCghyޓ !@z:A ޳h}WUW1==mgGFK+iͭjbM͎n.nF%vϓ_3I̴г(Z3i-K/yѪ#a]"ޒJ”Iโ~w(i ;k͙r$PA hΦH`/) UīwyFOI0ґ< չ!-O8}  -"X*3]* iFH(#a|)쳧?r/6~?%W/ϟ=}4t6U8ۥliݖQr #au&H&8^/=8XzOskXhA0">ZhQws7L`A2|j@ عjj^nk'S  9 |T__hZ= QQo!%+r{ryxܶJfiq1f.V}YrERjbYE3s@M^3Ph*2J:2yILiq\"u1<"tVEOJnɯak@ Mt9_< #량"ȨY ZCvqz188j9jZMT\!Eku2z*nv&: )+*j#n$FRP劐]e5:UV UԩO(7R 3' #XV Sik'mc==ٞ6Y{h?nBy@tS\U{FXA\z9|#:9_ݙ|yG-yp4} k񽑻77[VWu>XoM?{vf5&')t"Z u8$] #[\.HʿlfM<Ws7XPco9%B07Vq E%f5^ ?}C=wo* nw*|ω."Ao_m;P!K@ q&!@E(:tCD=};_r?4G9#7%E-E&ɏ97@!ꈟ zkCh^憖׿ux0znFs: ,[wy8ʞ^3wh }KaW7׎Sͺ=Ž}}}=][tmAT.iVFެQKbEnZ.*HNafQȹ 9u U(]@D8Q<7oK뚥Q?PSHoԗT(45hn0(fI_(0;yb0V)[2% 2uC, m`/ Lcbv^ 2~i[3kO>7]x s,95͝eOM3&99əqVV lТ)3 '%35~]Eb^RT51Z(*m.#0+*u**v"jeeu͆ VZA2L[Q9B޼yC;}77&Ͻ|0>(4[{m9fJ޶tJLg' \L>UlļCA3.Xygqa6?U?`ܒX@~ xD%Jʸ}ݵ mdM;=}G{5m&.0!0t9won={/;8mղY1W?K|SW/{ywCPOVd m$CB`ZN'%6чڵ\哇oÄRqzGyeg':Ύ[w-M~x䩜«&?vV-|^{Nf*r3ID'?Q/w~7/Ϟͼw~xX=?_lnnoln()~^iVr=zJR^/D%/tWN_e.쯰W٬DO$aΔvwl1e\/Jj47I|^ACņ̚k˜B9,[k4KR%qe 㺌dAf =p^d a%JacW,k*imJ\V$ZQ{M̸"l.a*AQ[4&FD%a\dqyALZkhaC‘A}B3;)h^׫ۈ5I\3IfgMcVc|ԯk|mFF*zzmѨ9QruFJB!N̢Ʌ% !] fp̭>%2kuU:U#j5UCJ0v׿aYvzm׋SO6{WGNmO`ĞS;R7IvxshC >LX}jBwؾ4^Ƽtm+K$\,ɲ G9Ƿ/<;7LSj=|ykooh@-[ufd$HH,Cpm}nB2mG?r~/c6eM =Nֺn{>x:I"E<% !$›W&Y~zSowkճOTγg=-JΣ|ۧO^<x=țOzQl2an&^wnG?N3/^|uǟϿGO>\U,ΦRRA( ?1D0/CqEWtcx|ƨhl:@^9irl3NܬHXŰ|h;3Ý6cq1Lj`նT$ UY%&pD+un`{I]]Vr.JB~CA~y  %υ\Q87d* |RejAZPx骨X.Q 9{]/0[h=^#\r"/ E:mY3Nm zS7Dz;)hvc'ek.{,7\Jr-+x9 (iy4ٹ{N/>=~Qt pCnOBMAKDPC pA??h%J#,<={`Á'7%+ivA?Ea*L;N&Fqg{?Y;/:}k3ΆlkUxl'_A%?{߇=~2yνӧPA/^X=C4 l+@ie:A-ehIƔS i@b,dV{2+h-swj3kZ5E2]YߣFea{TegV4U6d *@DC=Vv H:h1rKR5Tk˼29D) ŌBa# %R/#m*4!ƾS[Rzǽ*؜\IV]nW{cÜQK}_7S?˶7;)r$&Lt8iã ;}Z=08>!q-gF,tski~*rGq".J/hU)AyQ'=::Nf D eP>}O_=ٕc K:CJXCP"ė5$/朿wRjo|އwێZji:Am^[d/y¨Dž^}??ޞx>Tpy*or|0|? # h]fή2}vffS$.Zp\"> Dw! B3>VTԞ\nhu3a ܓUH$vC `RӬ%9H-j.X_*+r59i,hm}ɔC=9EGa9I'1dw jّӬUCQtMCOZt1ǖf~OĪK-@oi)nS\s˛n#?JKi&A>/H*}S|j:?N뭽FZJ}}浘p 4g&#H84kEЧhSh3ml"5Ը@i!1j'oZ_ @@vuum!Z?ݧPţyt;xCYbmU,6'|@:+ƭlNS\x](O~ߙ| 7om~oՁ?8ԮKI(uh-C' |e| IގAXD`(DTD%(WF};]#[ۃٜj3.x,]*W5x}!6$P[kBLHjբG+_W ƫbu *i uYI BBA9eZ- sծ;ü`^p4b9]zޡml7] Z WvR5$Y&,!?Td fV}-̑:Iִ3lrN'4!7N:ɝcztvdz.f3c쁮FSsF~TЕr8^hֱL|k{qXӮct,0n cKGU.QP^r |Z/B_? T. Di5nH-Rs2`LA hH*b>YgYlisal!iG @$ ipiVtOpŇ$$GK?  lj]MAG ;`Z\Rfmgp 1jRk`"w<<8?7[w6_(?L f2[tu}C[Ht)*-3Gv 1D!?TX8p^EBCc!j!tK[=ow9m?}pd ؙ~ۯϟve(̠՛OR_woXeN<,Υԛ w d1DЮ6i*XY1޼qt\D#'$0{%ˋ:n> Dȉp9UbErڒLe 81[yjJC[Z wP?`S"@a|"|18 AٝZ: ML*@ 搵hfD/k1b3Tzh|z\b3]I. |EDr]".VUljlgEg;dNP5[͊ rmqrRaB[52LOL  T]P_FwjM1${C=~^OOYQAuuz}%dOmuq] _k{BE7~v³[{+=[Z¸:ڜ}~we% IlVJS1fcQ$|ϔ$0[tJ.u̇9\*"Rw[r2~υN$p^ܯơYR/Dф"#~ԲI խM#nMz2n>ޅFuuӾ6i^ޓMzV+1y2"oF̴Cki89<4vͼx裩ϭD?dg?vO%\R2dLb("F&E^n""&I4(AZӱ[˵omݿ;ׯO<Эd kO?}ڲ90@ @iv6 ;~/Gkxeq4&d4 ƚ sBؤb$ D~V8̋SP&uI_'8Lm @Yh$JN ÂJS-LSG#c"M3r1]n̨TwC*bP 4JaIU],!]P猔Jx'!e7kד5d3ӨC=|cKJZ-+%t-L5FÕƺ ՗%<&M-8܉^5E46ZLEr(֪b\~E.Q]VʮzU𧬫lp^)1mOZc2hHu:\11Ri)XGN D#CƮb%f-yF\צb 'Ŏ! ppu˸Hw)d+x!v|j'_)kf>mWៗf[A h]՘?_RƗ#`97AZM|v8OG4~ٲ[L|8>3eWjť~`)Bh!RR_3 Gf~yOAN$2Ll8e*Xc܀9;i&dÀ8==~8tvڲ{t(G1ܿj.t:ώ#{'Og9?yQ{c9Jtt?LFb~"B'#AyͶ$K 8|̥ rPs_ɘqs]um[vvTrh lmPGgS`@P.^PH6zk$UF]S3Z_QƗKxD` W yd)J6ix\E *S&\mϟ+p^w=9ɷB 9]RM`?{de1 9OD\rUQDoh]r[9cچ&,7PBe#1ǥw>7kɞV1L%$PS$a@ 1B+1(@'h`3dM**IIRS.*p^UFwR:ohkp;۞ #ގl; S RT3!]zYR5Z#ISH.!dytM+ZrS&\ POG[rt !;| ^}{ o83ljQg33o= P=7xz`>?3eT&L:A޾<ئ yuܽ=|̴u}L-oAT?׶N'1+ 2CsO#2AGݹ"5¯;pJ)+_Q*Oԡ6䫣d;[xT >뗽'7Mފ$s{o>4?3/^߾[=׻u Q<\]Rx5*7W+pp:Q6 F 3jԇ/?2|B\R6ȌuO:\૵o粆x5n[&Sb]jSNϊ'<Yl/ . t \Bf4-TyEw_y_wX"rz z-sa8L' x9M*!P2movn9(G$Eygȿ<"g*7ݿ|Ƿ?#Yk D/_;zİEs9A< Ѱz:RO@bE H*D!3! >?n$r@[J'HnJYނ15R8T]٥vudzc3,CKuTX֬h]T Vm|ؐ>&pzuzmRV?DTEuz h"!izURZsB^!},*dbNCk$\VXЬ1-0_@|{mچh5}.t͠QVyIܢܦll;횚y*ți[ 5k"kX5KוZƩ:`>z͍l%Unlu;#"KgZD3'fGZqQo&CFvEFEWH*D2Z|\VU4пA${kL{<yLVLp$ egۨdv3ceO#pg'v,=)^zgy\4aVuA 9Z^B+̣GVd vyF`%ۃ3{BA8W{w@䟝o"%rQj b."ܥ4x'O-v;TX#郩OlOݍ_?+T og:. yjtfJ ٛ1XOV6GNO?޿ R 44a bcSgJBJ_?O 8ŗc}ȸGmM}{}Q2ɍDDl5'ʥҵd5C N"bD]n Hp @,yBoJ3>FIӶ-Je / +9c2i=!r=/,p'',?bhQfK; BPm_7iYhjO%uHT. ,!k~C6S5ˠT*B,JXL3&}](iZ xgXT5ۡ) iLRШ֪ަ/2;& QRXc*5_5 tL WM ]*/?EC7l޶ASX/cj CRrhnȌ{/}NںRkC /V:4CS"T2fC\H3ht*ֲT xy^leš:8,*4zh|sR!s6{L V †=IÚc:GH PU1$g~ !!A. xRdi@Aܓ?g|5?!%5\!jB4'[o~ظJN(\, D,OųW?Q/_$'/^N|5;>}իSP im+&j1' Bq)# YW d uszԲNQoWSi\_G,q[#>rg: 33uCC)<:-L8GL;T )GCLB͠IdyzX"{Q Mq @nh2LmmR]@kkuPPV{1ӇuJV6-uZWGuo`P_;ԇj^4vWCFv_6^3Ը&ʧG7{}ўᮒ!sXcshQvrzqe?ݜ?p\>X^0aSO?ˊ 0_n5F}NlͤklFO/L>78d# ),mN@ ĵK9laJw2ϴhIg8)x+|6@39@™CvB0G(Ypʽ3D|\…YXWKBIȈ 84#8/2C2 uujbg]U] ]v(-/,T[,ia;!gnx\E&hE~:^zUF&`9d 4)8FN /A;;tX\RU \nRYN3*t:mmChaEZ{sEogPXJ##$@&XӤ9ec8 ~`&睵Nkm1Z3=qVώM^1鬘u ; s0'*pݭ14lKx2ϴ_uBܐqK 9:HWAsϼgҌz^wGZV*+.]!e$5UdA]{7~"QgF05!dϜ A'PCDA~=)]Ks@:BxEs$2U4a6Ŗ[a>BVd ,䧬qO~ 9~}M׋ǣWSt G Z2\'R'|-@Ҝ kdF|9xН[} \h?xo3HrD"?^#OG@Ȗrs<֒JqM4ҿ;y{;cL.@!b"Hpi9ӧ?]Oٯ~g'<]f"LJ3uAoCh 99 .^jmG?"o@So7(Sri]6o -mnV ?b 5.hvk!pŮ S8K^EY}ig@FuE$,JdOa? #a6F;͂QX]d׹ -uwlzccoc[h͎e jUJ@%S\7T[而c6^?1Ycq (h5L7:؞9A`_YKWMWoXL: }0[ ^Zڪ,_r+.- E<UhDmʦ6hwR|M/md3S#Hf5[)/m](+lÅU41KfB!Rv?[rLD ՠWO;dS4gLƹ1u8:y5)u;1H#+ !1Ŭ;2hM+\ru5@Ƽୀ hY?oL?;vzػnHTa?92g;V{eJgʨ[G/b K4|ڤW^2mƆsQNθ"1o ٲ/G`:sj/`uڜYKCaW01H /ޜ{dT$?{ .fm#nɛC__l2?_[_&ǿ?#KWWs!]U+|n\B2+{yoj$x!HֽmjP,,[I׳մ M-|eK2ѹR7<\=8"E0w uMNA[M7>wc8v\bdnAA.9LQ5VELӨ u+&u]bM5;Cck,PE{32F&gWP 2fj9V}"ؖs6D&Ғd"8.x렯Ӛ2z{S'W{S nA (WEʈOA=Eӭ+ p4q@/E{O7ޣ;wO{olZn,r{o sU& x! 'Bd!/ cA#~^x "°!P5!< QQ~y$H%s7"@C͎ܙ~p􌂏<,I\!UH!>dvnSizwߋ|Ƀ@魿[7'@пտG@=?]3M~6ňkU%WË2OT|ʘG# _-pZc#iJ҈ѳGwws4nXOg駷=F?|g {;˨Z`8A Ǘ9%%q#\^F}Բ&V$<ؒcM*rCrETTi\kkeKS65Һeh{3;\D dBɀ" M7m$qNU+ ̋s꘯k;2Xo&2+qdQr>jTC BP /S ˆ\}->ۙ޽u |՘!F~~;/!t:gs(Ǽ$\rSLoCC3>?x֥@TXs5gyoQB<疦]RY p1aм>h\vٶ]n+@YgE6*U}٩l=>\]Vvi$&YD &n/><>3>?뉷)8=(G 5"AԄ*"B }",KFNm><Q֯X1/UP8_% 1z|~嵢^bV;)in;yPHz8\2r3y?cb{C?'gCZjHa(BrJ %@HDy2" |a4PGT3rV.M(A9N_;˓͋䰩90MV1 z.X;=,eҰ=@Y XA:%3uC7fZPcAd"E6]N!{v >p>d~  B^g Dh;3qja&8ٝrh$z$q?djጴp^tZq}lELilm] r<(l!cUܩLJoMܙ52Ξ沆E5W૕A6ow䕻o>njV-KZt֔Csl!carGæQքڶf z9 XOAg[MϪ0?Gw\!B5?,l]i11!kPFv&$\%<Lfv2t0?`aBf_i!ʶ+q TH@@!<BT!#/HE儸dC$`T,2/2?DN`ZX"_"* DhZ: }ٍ,זK"'"x?_ӿ;Ӣz}(ѩBpK߶ml3+7z_U@ pq5<. R- Jg G#b"g*Mp|hF#6|5IׯM7W:B s"A~<"L(概>A"|r| &%-]wm?BifEI>{;sY{- mq-[6f݈kFg*8jp0mɅDzZ۩dQG_^ o\նҼ4Ε,QڏwǶZqaUܞiҧUe0H] IOj_lngن\l\!-i[?^#m=(o=;m*m%5E+Kq8@Єq_HļB2J|ZϭVG˚KLNv0/P0?@j(xJp#S?dBFk!'|h*Y>ЦQNg#Dd|8RGQL 0? 8C`> 8•p@hCg 2X5<١?Ք, B;y06W`~5-WU+JU[lt-0bZ_Uj3.C3PP1 Rt>7p ᆳ99ByWMq7s{?篯|U,+N+E~8A>7\pQͬLH jP?sY5EG3UΎi]8ݥC~ yD? \J+ x(jXeX(B8erIR`M2K@V΀8, LDem7uZA'< {Uυ; F,&#?++W'gW|׶ö1GGpmy닳DG4d]COkhnnӨ[;5Ye|Sǻ׆'@;<<vGڅFvN"1{b4< ^8%$bDKT@2t܄OaP#EE>&Ed38*%l%@D_L7G  .Y2E`HV:0ABNT qA |qwWZD^YJ Q) 7>]Hw rZ,V}>/Ge1c?r̞"8& Ӝ̝\:U>y?{>0_3'q{oOiOgwY~H{q>;U2KjW͕ "`(W:H'2Y J!CD W 2ps<`nH jͦI#ݛ7 8'OTFA?@h" CJ&/^dXX`fl;Un ©!6шݿj@f;&3{vjf +Ln'ƬOVV^ߜrf))3Ǐ?xz]ٗ*Nj/>ο}\_ye\쾈{[z;ѫm| (48;UvŷXc-}]mN\H&TE ~Og0{z:nlk{͒P AB`&D삀YtJB҈GBÀeϯ:F\D}ʘn2jKZ>GōӊrpX:C,U*p j{w5EJ '(Dpԣu i& sC Tn`Grj+ҷ IF] s826I5hU=jP"& )r>WG~9&5H)pLYǏuT࿝LJΛ'}/44bTLUVN嵢`G_4|l>Kk%y˧Z@imPhxokӮpw O~cG~"?|l.#Hq?эRTAˏQgܴ1i0 A7ϤeBL@$0y%@<\,g~e7+R>iʫ*񥽬z^t ,ϫWDjAEO^vNI*)\{4LaW\ Ұ4(sa$ zD1$ᗦ4Id& kB|D H́:@2V#vjYiΆLD̊ jxH c/8:0 Y538tĬGwfE H\A_**eѹݧ2k]_#c~ˡ=?ÿSϖ^*h; N/ Ny?4QY7 jCp0R3-ީu`$JGFj|{d f𚟟h< [ȏĢX v<CSD45(7<x8 {Pm|~ۍ5Pi jE N y<ʝՋ y<|T Qdz\6q햭~?{ŭgZfg/S#[T AN9l צ*{g-S#w[ &ZP3"*B8JB!6UQHf]Aﴐ[\sxy~`ѭ[ޞѮ!pv>tNd| KKRq5!\*Zȭ2Xz)BP5 Z=_ˑ>:Dp`ZzG7 M@4&f=U"Ќ?tD|L]L"$e:0 G !0R6יj7=,++eÜyj1^pML\㰙};vj_?R gA^ntgK!Hw\q=|-㫥fk%b41˯5zĈ6]ltsP)jVZG]ZC~/Z{=S\5gǨ;=A֓'Zyc<m>#@4GiNgpxІr.0/?3 g(BFv~J yb޷RmZbMe!&τ5"VGBڴcګ?p8` J 3'$1\b>ZnWgqX|6O+=Ǔ#Sc;p>G<%0CY妋 e݆is qyIV@L(} fIY2(O0D8I7>x*z` N##s%|LavUܟ+P/?'p($R#ZB;W7iE54\JRVS+-Ԡ:3KE^N"3pD{b>ށf˃SfHv6"fOj@E `?t☛K9dj;piHWE@wsrbɇ/>ӿYt v|Ns;>y(g8mh "UIG0 G04JvC^M՝}~0M\^X, C4 F8ŜŘC@ꂧ& H%\n*ty}n^:ؠN`+G}|Q++M_Ko-쫋w7[+ck2"w3;[}N3+=ˋuϧ/2majQ5:+Z4a/ҮV)<rׂ{ygE!#B"$eڌ&bްFΞ!A`O8޺~^ݷtU#rhXy5):TŶQ<MXp>&C C ,(ll3T%m>X/ҺzguY<|lo`~  wxZPjCie:̪FU ~Cb yy,!?\1)rjBC<9< N\&% ilT4F,V  z4R08D YXc"IS>rCğ0rZ޸5>8֎K7O65YW{H & 'ޫ0{6 # OG8RuT՞-]AΏߙ;pag ] tu !О }y<~H yhMlg Q.~.64;)gRiI*rXΈJe  g$!MxDBDYf n";3񑀎j *ۍ[7tk/pHR`gTxK2 zeafϖadZ-^ju9&֭UU-ww~xt6dе9R*Okf8̮S#YmsΕUm<@ԦA}F/, hK q猤{fzHл|\LGo#Jp8 O{G5POlb땰XSnM=s) CsCِOwK]N¶jQvE+45$lKk;Jg?lUGӛG4sg鬲|^EkA[O19\ˮsd4,DWS%Y mCpH+DQD !HMC*,f*rAh0۾J49q(/>WQOd7V60]:bMm,}F-!߰A*~u)a\53嵶& v!*neb3ζl=!gsuIݦӀ?᭕1.{@߼Ly wt%VmCwMyasoCq ȴ2%g&h9Ќ{>8uįz|A i5>BK$,FY/Iyu|֮x 8S_e#QLPN1V L&"OL17$Yԃz0x&EܯL\6Ŵqٝ,I9Hf̤ݼFb8W˭ꯏ2M[/77l(D}aa1 q1(DT!ßA?*˻E|ILp_.jG{t|L3IںQ *q~n|gzZ~t V?2-{KC*wK fڣ]q-΂KZSW7΍w&M {C!0ZCa1]y!B22~Qr7YwQWf#G+Lta<(8 ,8_ʳi+ G"^DMt%ȃÆܠ͘/X]&Gnev#ЀӇC*-F{2tgUOS,$nYlawY^3٦LVƶا1eȰճ_68 ?=,Zna-m3q?/kڔ^ey0'U]RAkdM7~66Hݚfѡ7Gz@ ʞ niy5G^(BډCĶ<`7%nkRlbA2t喒QAmT'v2_Al2Ʉrr V̓jڳ<7]V͋i/֮vW/k4hf:f1 (e4J!;M3 G nZ(Dn\DAr|$D !eHh"̶DL)IRj9 Uhl$5/QKAhi5OP !Y9M-VNkfHQxGNf[W(*rhYoGWE"x\_8Z9109=R_-\/=9[l3gjQ\Hr)f3Zs .Dg6NJD"8ܣ3ݛ7@ :P>7C sr)B.&6661|G7ۅ;'0H;2tK LL(K$WftLs0Bqg2 ?4ȹeдwX Oͅkpۏ l@m#pҮ>Vy{jxm~meqBIn$9 K%ۛoo^܌wVGIeJoF9aM[=kKsT~++ϓ_,>xO|kbn0oLoH^WNg;h o&Mh@VK ڕ\ްX7<6(ty-QtJ#*Z1*[Tal϶6ud{6ꚋE* 8~iةz %;aoG12cK;b:#Z?.Q;.3Q/CӅl㥦I9z@Mcxt:D# =Hdb^.jx緊^cP!QD@eQI蓤KVN4V1/.ִe4'R],5D\ϟ39r;_Lhb B|Y os ]98qvT0+3\R[6\~|ps;=]Z<4=].^kOwg63{Et'/iNjgu.[<֞~x'@)*ՂVJjYʁtBPԵ'cY}<+\' 0Bp$8*WD@O<q9\Ԍ/G~o9j+In(>˱ɉHdht*g2tJ!"px,T 2?s3N|0T)f/0"j78݁AV4˘VhvѣM }׺{гiFͨݳeD]M:v--bO?k=+}sgkc-Ay+<{޻>x1aK]V'Hu~\vG6@).εfHJňng6zݪn}bwV};ujV[CaUŅ~cb|B&,.ΓZ1f=(o,l86gvHrN~gY-ۨlD^k3K"@3E:slL{a 2?GĕkǥcU)9SS9^'{ID<$N췉t~@0j5AA__2u6:!#+$P"F SdH,3@=('4~֛gKuQR&*q180)k‡C#ftcꅅr󽭳 )瘮rN^*[g h!Y8Gٺ95il )gťFkO4(Oq1M'YT S)$05f4&bӵ 0+1ҬL+" UB/hNN==Y8+D*b>?tr< pp"e| 0Y gyP45[_on͎u&k;}Rs9-}r|UR`~oca}zq% ;4J5o~{/>rߜߝ&^V+U7 m.t( y]5dha^t(77zԪ;].SQgO1>|wbkW/j "~kb\&hg*q7 Ȭd )b:HiI5;$m=ۺƱAm-?y;/T+Av|z &K<4)iyɂ! 8@mȿS#e:A>M)4GMqoZKM2>wrbAG2i 7OvA^1uS8V'd' XJhFFs7NCC(n&6OMu+ZMRv| ϭ!>bJ!-IVE|3 yp;˪e= arbX귊=&@lk6ȿ>ƀCc0| 98jh"s\C j9GSI  >MB̪ 5G*Z-ڈ&;$G,Z(#-:?ƣB|'CCvp C gaלC\/卆qng鰲vR`~6NjHJ^OOMn<5Z:Aȳqs`8Ԥ ^$4v@h$ -:!̤%h՛FC[иvX7:5=k]:= h̺ڱhlk]Rv ȼlZhS* 껿̋wXz"ixF-=-#÷x;B׹rYJ٥隑>p|$V> 4w~NI!ulXk".y=#~QqM%ر%q.cVx-$g&TP~+#dHnU;3$_!^ar \B=.@eUԟޤEbHry>;k#oU w~yY܏L Q~e~AJJADa`p O/,/20?ַo(ud i|cp>p8߄9엫@g2V+K y4b?|ɵ`t! fR|B꬗Tdqv$ qcQ~".L%Q3ii>'fpefg1b b'#pUO048"hJ;n]^Cx={kLT,5/ç`JRӊG8cГ@aKs:&fzc)hmZpV!a9@=4؆Lbp: Be0@ v"8"Jw6:WzW֐+ oMf)Д<_n{ִIFL geӡJn#X[R*~O>;<3s-9>fEԫS Fo uut3D˹+nsYb]+#-C}0?@нcC!2C=RzC:p#7:y65qDBͷ~<=:ĥ2 N:Rtq9wtJ>;OFo l$̄  C!4:1]>NGa|Wiԛ?H F΃XEf0Ew%45f4?B[ =pƸ9 {l3}eK!&-Ɩ;\h:?m[{n-#@,jN "!(";P.9-bknoj{uky}P73R OktrQ6WkBN}vlIzŶ um[Фieʲ*ARv}f&pzX[P p A~hwsEF%LQăJؤȘpȼ!ȞBm8 nJR!u:<43asPZ](QLAe~~|@c|vIKR3 >q} r&/Tğ|>aYۘ4Y/iK4wrsfyY{キٓxwgqtq4Wf9i>%3aiQ:CA2lLvxB\ (jeao#DO6"qAM#>M !kt=˫@^jZnG6?wkFrgVzwNJٶa> )=femھɃ8J*߸5,o-p˲ul*Ne# Ql T  B|݇CjA Pji H>A*}INm![<7F12!\0K> r3Bj[WN(/m(iYG(K)kYnNSղ|nIv {珌o=bsX9Ο#^9#hІ#ɠg"D$"mi9B^I#y~#3M /54rntm' Q='v47 GqOGZHxa5|5| N-x!L&A/C!sd8[P6pG-C4?Py&InIX 2_ڵ4gH-B^XŸzMtYo-=bV+\ WZ~ Z?w%^WdN6tsy4&os98| E J#wxwX㯎?'FAI؞X тfioԱ%o>R+y A̩Ӗu 43 ̦Bd| v VgϋKxC|-h rzƌ Hr+Ĕ+1% }0BxfZN2ʍypVԼl`(;sv e 8D?S9tWRs18>pX xąS`ѪK';̬XV|aKCEHg/>=ucٙzvf|N*:CtLq#~VЃ[ bB@O|ɀ!_CR&HfI$q~ /~? vmO-8܎?z8 F:fXЩq1;eGdz"nCg>)b4q<jpvihZd.6h0nf5nPre}}[o!ʎ =8{ɰ|dg C!w,}kkHPt/t,4:WXNcޒ[zrF%kK+^ʸ8tZ.M0EߘjznM(DɖᖾޖWnMiԣsʁi O"W+&T vָMnŚ6!0aV!Q5t L:ǶNl?B)  h#D]`գ"ȃka7$_5"͡Ax t%GcbрtcU"qc?Aco|vn95#kLuc:+a2F2Rj_+n4 >G'(a|viSfu"B M4q}hwY7???~c|o?lҦ ?_ DP>TI!4/4S7`$ h; chq3{1a8R×k&mtQɉ#zOk~S@Gj 4xvCOi,bsany|&>Π1ds6tAumR'C\]"YҠܿ5gs[ ϥlu^վ2D2F.CmL0Rc3b>ZFUX|pd(x8ZFFZ ?o&\jp&N>G-h 3k >ulXj^Ӫ1@"pk %jp/L+d/gl<۱\폏܍ub@4hRgW# b>Yz=UaQ[ r%F>e6 #l%n|6=ǦGLWA!*UE}1w󇶜&gOg+o|Әn/ro~$Y  60^5-q0z;!Zng+Ì+V @١œ?_?~oVRV|R*Q:ƍGH1h:A;G*^00*Qr6B8 + Y8&T^#1g h#/Rͤ/"qv0g)Yvۨa¸A6`w 8Nׄ!X 63iAsXS^Sx(o#՛AkCg0w#Z߂i6:d?kly8 g);ci\u-,B|[ɚ<7W"[gOVBsو*"qmvty09rN$APWaAS9B%wH?Ie^yZ_ycb.hLJq&;3yorTʡA!,нၯ!7 bS8n, lDQF]\YI!''?޷mA|\C|/GU`/O' 1 gΞN"oF5̴*1@`}8,X *3iZ9|#B4g 4;g1euR's~mDZ_ nx.iڍ<Ǵ lo׼ 5V=*AV sƿ !@4! "$`Jv O/?ۧg~SX GYS| /|~B|Di-?4 1=|xĬ}XayH{;[Y~73~U6 )3 E*&% I2&"dt:Es o@@ BpJA%+^6NhMЄ\ P8\ID`.@ ۷~dE~8k`~`Amnv8FNht{hX$Lt*5͌7whx353yQi1p;cV'D}$!UάU{%`R-G4Q]le A5iH!U<$',FϩɹnNmthʹ 0 ψ:_lIv͆ on9s9raқ戰K`i H RU%eҖeRK͒r=%_Bw>g2AB>t8 "QK8 TTz4!"p8n:#*ՐB/@kT&ϥFqj \<(9GXc&PƤ\!ϯ"BEi-NWA?wu|[s(KCF5w`!ϤroYWƅ& ԐQb;|BZL,%9jNWiJ00!l0UX{@0|P Գ`Կ"i-GƣH@EOmL>z>*/8?򏾽/2(Ps}/ڈ?^2?×NRo8+veΝ)]Xx.yd4o^ lau-/xWs֙Id<9lA "L&mT1*F9$ "1C$FAI~`@!!t_GR͊+Q9Mqs1^>N#̿pWve`~ޭ?_ KΥw s97>z BIڐq|.n]ݻrڸ>=,Kwܜ}#wL~t҅}ڲwi޷\[v/ۦ۶Lw5\VI5Y.7&HZmXRBT6 a-p`Hz=`Bo ~ H,H'sggƮ ډiesBTh:$ocL`&wR@<-DhC0bB ? 6ێۜ((;$DbjUTz'vrM^,Cn/`8 ZqnHC7fqr͸YF!H~L g1h: JrgLӫGJ2< 0j^15E3#R<da}?%yЭ {10ffCƟx [[WM|k/ެ =^/>ܞ#؁(RM, #I@BDP )]A=|o,&D2WA0B@SHii}9kPJUH+iy%-)ť D J)tP42S+Ko0˛_{~Gߺ߽kx.N/Nhw?ړ`7/_V235Bǰ1_.wՋͨ'+NNsۗon],OO{+r`Rswиrxt>ڢoa.2^]-غcjn7-S-DK7S%X[7Rdd >q*W(5kӤmSB- aleXN*%X"<)O" T@P.@f-֢'S?z2rԣ-KZmi?cxB #OцS.%yfPhj`&s^U\0? lNO7Hϻխ'szJ+ F<=B1 q5{ o˃`<V D|Avy=q_Ӄf,z~Q̞)]w#^1㵍5(Z̯,zB]â1bs !x;{GҫDT= ){($C$U~?,5B\2* #"!S%G2T 7@u"NIСz dA/8){D_GP+I}+okKh5sb+ת/ި<^xp)qt.;*l[wfFC'ɐΧ7\]:@oJB9q^~ ~-yQ,Rl\O )H_LJc9 *Ya҇W S!Pe)(ȉ8)V"4O_Z?k?d[?}4S3+Yl^ͅ7ͿRcN֦5Mr״2!떽 yBӹ>k[ja~*3soW*\؋m/D6+||gmbw%]-?Y>w*sr#2]OWfK"bl>tL]kg-,RNOmPS yTI>Dmh %ar QJ$$պ֐՛F -bG֠9iL VU)Z a/ŵR2BNRax"b~JgQ1SKldvpPe)IK4<{)*R]Ρe3\z,NDaG:PMSsӊU֨IAZzjLޡCޞ z]zm}ݹ\Y4;RUYk3yKN23pz*F:r]#3zH$V h*V((9A/b\-e~'`ncεkum-!_%hfc:, 0cJLq{:̦F%!d\`4FAh\KB9c=b<Š>dH,SOKs9t.c1a~v|Lw(NHt㐆]tS"K=N~OP)JqM=c>uSO.u=w%s|̃{7N{ϭ[wk]Ev&(98I3#@!R( C"_ϯ<|A8łdDi HK)C! C)mt*zII&nhhk9nN݈+Afx}~ۻ_~;LBιe?￴7gy_x9{esZ;߀DYjov󾭹ę5yY7yάnL:_7]b'>?UݥBJno#\.NZɦoYCLlm!4]X/R^튪7e[t͑ WI`$Gdp$.?DX U%2Y3 yy @$QBY>pRDfMMa G,Vi''2BS"7?PO*% >\π<9V)KϧFӱdD(5`LRNw$:QfEۻr$EN!ONy6IUĹ70 A:nj"#vې6촏c׸MC}e|p EqԪn+N36 y86ռ"yV">*)PR9RbxY#rKo`ju"6 +zѫ ZV9!Iwg}5`X Ș KFː+iR9bX5@\q(  Hs"v)9D^|tr6vu5e m'9W}[S/ߙ|K)Mp.m<)$5Y'/%E$,E%/@d@XE`'䁸A7|NGpB^i4  M&HWHim9޻',VɖS5wnQVɅ7nֻ? ;o@?(4c3sO&pzrg~½ iBӾ>[,wiztps8YM/pʇoIl͗7+緛WNWZWV5*VMաJ9dŬ \E1'B uMʼ\͡U; S?_"KEtd鏀J3)X !`8#䔲**<.(O!)%]C+j2^`j]2%Z0Aé`"9X+gK5erFh?hvQa&cIZ0B^wen@Q?XD?3!D)0hج+*HS°h@!kP( L&5~8Fd+x\1>O=ѻ v"1|10 XЪ gD( !$ 6Ãc A;p?,( Q]#kɽsq|t婗n/C3=|ϡi>S|r/hހ▢bTP"D7m,!TtCpqNA@@\""H~ƢlL ca'Mĉ0rQ+Ե,/^#^u?gex/k6qc rZگ܅;< &ڶIƴumoZ盩}Lu3 _{Z|:x[P`i"ܺzz>ДY'7۫0<=~2:ZsK󧊧r14KԴz>Xi%CM2޸D+W/.Yg'>?*PB+GVkPG\ * : A "A +@~ld:JB 8=c$>t":ZOEãx:* [G FCh2B"t؅,N,x.? %Sp$ls5Ʀsa415*7&/sȭ@a p2~P384BAIm4cj)C\:&/ 8R^hؠzܪdB LaLc>㏫tfP,N@g9TLg<æ?͢T^09 j"|$eQA%Q X D)0 :^HY̾roGk>F:QV}t={{?x~1. Md W !Tsa2JC$>/!N,!ZD kDZ=CfauBI"~ ",# G0gayܐ Gv( zxG܈DLza{v.3󨰀 Kkr u}osSWO:ʄue¸tMٖ:6>qBxcV́?׿? 7#˓ѕR̆[A_)Z?}|.b(XEgCΉ:ʧ:BJ_ˋ)e5_ kjy{ ZD - 3uN'mIzPā/ ~ؗF:uu TĀO gsJQQ[umE~.Vլ)Ul &)UFUh録@I:mOtpRiv2! 13`%"ѡ8ʧSw0 GDc-SdJ])EF* tz4&K5R ֐JT 9#n/3hLJa~l/uaEvҼn:_ 7)dcHCl!!) :E{D.6jG:Ȣa<+#|>uyyG90u U)8~"(E9g# 6(BMyJ]Kqi  ̏-???_WNZ:E4٘M.A{^エ΋»/B<|~8q~7-I` aA4H\ eTP+rMazk'xAApD,x' C8XA360VQT!L>~io}ao_xE|8 ^+<,w[6c[ZZԝ' S.gϬ;fթS?/u /uPzk.&72ۋ;w//޿:qLu ,'s]O|umxq֪ﮧ7]݆:5'\Yx$;p{su }ތqcb֍\=z5AՃ5Z$HKArA^+?vC\ʓ$2j }d݁@3~2r/LS9#s(x,{CQ[6ebh,B~$f*+N1-!JLD!fi=M qcS(pr9g(VxA; 3t#3`<}F1gi5Q~, tX~V%4hTR 8Bbaq'4!ٌsL)tuhGtcRJk1D0YOiFǞa0>j!p済}!e*22p@,KPg/hI>,-0 ?|9)qV¶Z63kC=)]?,P'whv~Mh7Vy3Wbgp'jgt^B NϨ\"תPJA$X+ |ALiR D/cŷ?TL k;+ksVVTOkɫG}}ܻ/9p>{o ^jfB#Wv/\y^Ǽcty/yz5}j}c|a/v`l֞Z /trۋѥn|e)%f;KStoɃ;wg6" SO+s䞨cUz}I5MBb Śwa1ajzg5GM)/S3(R䵍VUW+T|N"VH yI.+Ȥyp5K&)Q UTK&,y(/ʥenB$hqhrt{8շ;ȃ~Hb-V''$EC=!y,"yѐ$# h=P!gxؙ;rrQR.E=Vd겄RL ^$2 lCMyGQ - O"OҀV?*՘N'p$M;!fs( sQ8zwRqfNEU[B.GRB0,Jem DdD2(X|? b(&4ifa|{끥lrw)5h>?ҝAo>\z/[^]u.yn3d[h%E9ss"N ʟ(2ʍă(dZU(4FϒR guY F{(D ;M,Ug3b>:܃Obg-"V_߿zr5[/n< qYPy%nƪȥwo4ڜ17B<+'S'WB3s[|tr)ZP(qw+z|Jje>LPɬ-6f^u%<ۍ/"\L8Zs9g(eP*ThivH{CCDymRye.en7M׫Z\TbVAcf3LsSqsQ SLXT(f3 99pz5uKEb@pD`U9? 1<58. A`Qk(h%0E Cǥg b`t%cFnF\bqO| m ȳD{KPM?A4V~D bV<+]M=u+Yϋa'h'p:@ z4V R6`N'9YzJm֫p LāF"ig[>η?{3v}r ._ 4K/\>~;L}o!zu,%So<<>=-~rɝ(oO[ޙoog b7ԍ̶t#0{֣g<UN3%{]]X{cٵRKQ䖭VtԊNVrIU&Fhl(1"A LjK´o~(k+%[ih9ZQHKm I'A06j@$2I1N1յZ! 勜hO-u&LeT*~" Eؑ(U*XMT1pN,'ǃPua=br#!xs-Y -͸6bZ ' Z5`IfȠGLYY4ndtmjAᴎ ؁~ޓ1fɈ|)6?*JyT"W*z(z{i*L>,0t!CԓT{y;SBÇF 8 DDdt-* .0c0tas-B։u_̞Y^; ԼsXޥW&>w|4jĩ}o cA ڹ=?BTAPCQGiEIB,|L0Eg0M|HRy'u'??k'w޸Sy|J+͗oB;>}!_0?e{}on᧰ ,P?cI.fK]p&<]/LgOpj|fufҩ;]ߘwOrq&>?ī7{3[Y} PrKdTHҫ I}>e*e-:#Вay 5K6*km(Յ Z]9okV䩘"TH@ N@Q*I A /AB 1 Q }A'|$2p\ebYY(Iyq*Ch^?EF=>|y2C AI:֥*~> ɀo1;tx7L u׎P^džv|N;Y 5KЃ?ȏQvA!z@S*J2Nq;2j2&ubgC|!R'Sysr:r9fXj!V?Dlc2팪dd@"(qCC#OӞ 3^]yC۩cX(Mu^3n2FỊ-Lմ֖BN4Qp;US BgAJQSs+v+)|"ƽ°Ss\dɂﲉN"|l7YEyt@Ou,ı%A1Ԁ-@CGL,$c:0މÇW[?W_7g>w_y/?~o^ P-6(sN0M6'a&^[o}<]S|'2oG'k3ѥn`J nd1Efœ[SvJv%W/~?ͽpj]M!v7+Ph& sLrIs1c)e NdWqfmŴ^D+e9wlRAdf)JMW- qv(AD ~ ^$Pq`>1iiOȳyy G)D-)Mga<2_`1>@cv HW9&sfCMD>eBLLvO4 8'lAtAQ&*Ƅp608L{mEKsYƝ1iت4kzeVIG駞8"Sȱ8f6c͊vtRjqR)䢣2ఄ=#>-`qP76#$E9n ՃJ~tH*U(a~-$p jV zDW0A 6ث@ # n1b76~ۗw_}͗_|K|wn|: ({|nu^ŝ}n+ê'Q2iW:/\[yㅋ:1D7a~R; n3YڝY (6K L[tPzi{nA@Yigh2=\{뵭{?y̋ϷO`>DĔMz ZM<)C:N؎6{)g+f@B&43XZ}[lp/`ռUvPKbU* h u6ʧ?1j`1*5nx¢â0[ 9ټ{zR DJKJh%^́<syPkXZq2=l|>n(Pz"3lX@bؕ1eeUƼ6n+LQbE2TWۖ(NڹA0<`Ps X>( Yt Qpo`F9ӂy;Xy90lЎPI`yLZBtȁ2|g$1r;3(4( 4(; s0y(8FҠD8$Lr&~y@!y.%0?!\i׌N<0i%3mZ8Taeu+/UVF:U5mV^UMIraY!jM&Q%)HCN&Y6jf*8$^"< B*bA#M4\6!_]wrOX(@eب{D!8@8[g??}G?|;7o_^ww>p;_>+~8#ƻfܘDl歙S0?(uK+=5\3>J>˱IghB`g&@d+&쥤5 B>7un'23MIε=բ/M9o~ꍷ^9wz/jMtOu,iÝ1ÿK6"ZLTL 7.淖 DQ/+YC>!$Ǩq95LJQq"&K'G,k[+Ʌs陜1V|?3]Pe `DHi2杚,X-H3ܾ13F<+BYOqAe:H%85ҝ;bǍx:f7ٍmf˜On8$Bt&gc-c6AyT%>=!Ǹ\g?a-2.lې ^d!;rĄ?. Gǥgԣz%%jDvԊ!59lՠInC=#cjRa&4у6Nĩ*ŭ](Eܰ={2iz5hsr~I8dFEDCƥ=al)~׿Ο ?=ݏ>xsWWM_P3 BOa}Һ3w'\7QMz=kS݋9۰t˨ 'W[vK'WM[# Ef[Ʌ ~aѝP `0ʏd6H XVZƌ89qO@16Yi{a{p.#e9 ס1 ,~ y:`pvFk\RJspK#&-q "u,!,Z2.D 1i/xtK?Žo};şo|A{.4zssvUO؍enսԭOۯܽvS7[0?rE!j"˓Xt+V.%;Oqm1e#\bӍɵ%@n 0M@3UXwNN&H?f5ܪWbMs*)!FZ :eGNܡNQ <,m.6 M Ԇɭui"8l"Z|~$٭06Lzc`@|`RqkC q,> ?EZk3YE<SIi$qx^<}€_ J!Q0$*qΥ9lsVǤ+Q 4#V52҄Ocm>,ci K#2)kGgdY9\pT*:& ~\`\dӘ֍>!c>=0B("` YI 'K~Ÿ>>= xOYF-ۤ>O2/YE/bGɈ4)(\ʸK@K跰zϰVރRFD~CoyV%K-~ӮrG=q: }z1 FgcV'rȤd N0" IuM@_bZ 2rqlzb{)hUF2ӆv6G:@63+/|Go_O^?ÿO߽~3Ɋte{iW6:EA;ˮ]._?[wa捇G?x?[O~_}[XyJR&}|̇ٵ4e-1lWex-x\溍ky}& {=B|a9"mOܵa~ekV7RoT3Vva^Ƞ4Jܹӗxݷ<"s>z"͘{j[)# d!*3 'NogHP=䲐2Ģ ܎<ÐBAZZښwv>njɴ; ;R ~Fhv1KJۙ[7-06WWԠԒbLB <ȃ[y8 G!zéG }`V1vQf7p}vLPbyF_H"ߧ05F!Q6Cjh*Ip Bc 1!1i~<*+PTLLD$O%'>D+$cz5ft 2Q1ЂE،E|^Bz1%'Dr60,DƔrFk9F]H1u@gA>&סaX_`;meYt40 E԰Q;͒{OxF)<sq-cc Y:ZW݃:5~^3fԍ@<Ze;3&jƣQΏԈIafL9c7SC:Rzjhew['3'>dѣ}2aH i4Qtc\(;]$z5皽}[o<'?|o[n߬xOZ6r"D&Գ7^uzwSnOlڒ1Q lK&e =ǣߜN"fӦD̘GZraaS))6VE"vfNp$3u~von}V̹5Q<}n[kmӛ Qy@m̓D۪[uO4}- ˢ!1)yjEM4hv@~՘º3\airQRS0)DPQ/M^s9BL>.JeC"csYGY#LaY::4<,qG7}q.& 1#Ƞ': d\p Q[E3jl~鵛EW!OGn+eѕ2jT+Ye6.ID p~ntahc.'jZ-HHA +n46kCJ%l'y?Z Db<N C@yq(!9f |݇Oז|[AxrjP8,_CX4n>v޺ېgչ{g?/_\7^+_..Wh}yq4BP=rqA9+&?'_}??}G\8ޜ7ݺX]2GL,mD&9 5jrŖImn 7J҇#T‘ɚq,GƆZJZ=?o//wkխǯ\[w2;5gJ&= J[{g>(fr]բ^8y[1iχUY|Ih3VÊVdX%q>Ljljc`ch:HSSs-Xd=ԇBIf[ F6>}*(>oy-CraVmIѯqa OF~@ɇUhHFڸgE 4Sk>HO#uݜ1zC?$zcŰJF.IEN|_;&;F|r%F'Ctp{)LdD yzFWh %C&WH%2wX(:e2" UƃiS%'K5JvѪP3c{DRN@0h 8иш Jϳ ئ z8JEݤk#W ypɋo/\qvrfmafHj^  qv^N3?y~G_mG77{¨?`R7ˑ=$'**٭7^o|w?|OO}mJW,|wsS4Tm5KOJZUrR>XȘQq[ 1#]< ѧOD:v[V U5BmSVyLÆFP{: ho;n޿z 3϶W6\\?ϦY S&tb c'[- pGK2y=\ TK|.i`kk+˗.}k~ڧOݽw魷oڷ^~oo|ƮvO/Ow( LxZDWLig.)*93cQ`B!%L?S8,PEvVBiUjű,ڰRM& "--Yz3P+4mFR֐]VI(7AWzQα2rZ8!@nayd&צt V K_ww,s 58% gg)F#o!``ESzKBEETUixj-SQI8l.4b'TUd!pt$_M   d%7cĨf|HtT!>Rs}rܿepbN#Ho` Ėj5a[c4!bN|.Q-| OezTnbB^[SQ[&n&UH;Io cG3!{!fGAh_Q(:9g^g);2qƀWu>4p& FB@"V/u  <yn.>F" +Fgls@j΂Vlih'Ň"1(H҈j'dC:{S1 ;'ˀVg&=5Jߜ*f  S)Uu_uF) Cfa-hY!Nzzki G` "Qk*aˑ2#}pMG1:qޥLo:w/d6 a*%UV("'G3x[y?~7~k~go#2w`s/ϯ :t.".b]L'Q`.AB8 #P5@ -_uˎ2αLw捝FWO,Zx-7nܷg[̬_tTMnLՙM:;f=vu#s˧-,rzc/9}.D(ϿȪVy즛xO=}.7߲tɥ/|y~[?:+b,-v_+84xU^Nvv:;RZRsL2ѸvW"n~'gx@!UbvÆu;Ƴ'F>WXЂ$j:T07?qtCՠo1hیzg)M2 qhY.KP^I v!"=pw)[Es|*:U+Bp#So!?~u|`G&Lq$M6S0zG9c+6qnN35¦T[VmC?WsaS8h,242=8y8N#{d㹥&3c鱡V]wpRתVz:A.hшt&;Z#w -A.Eo #K$u!ydAW9]G$?CsC",Z`1g\uyu\Hh(+fNk" wv0yEAiϦaw^o^O??o|?7~KnŚΊX^ (>DBtEV2uƵX \EﮭǏm:vq"OY2;4rX_,3p'P"XCqJΨͨ=B2pЌ NPb/pe6\>jӆM{vM.|;|Ik*+-^{͗rvR}޹~/]UW~3mZb=$s΁t-¹Hewo.V{#3C]#BѕISWڽr=w:O^}=/'ߴ85gԞΏ!e$ "7:݂ =絻FùӎM6iQ j8ViN팕gm6s:CVߢ** I]Mda(EjؠsvuTL^f%R1Z=o*)1q_9d܅+RXA'.g.E{FVpOP0hdž;8|lFsÃSٙԲYDzϏg /Ѱ9A|bx}ozo>RYҸNUts ƻDW82/v+КU<̏ +QǯTHw1S}'!zvUqE@)$*BU3^'Urb *d+zFן>xŨ*3!ج. 0~ˉA`C t-0`%a-k.IUN"Pj-2eR#1Z64]XZ fY^8lJiEb1JVM# u z]m: ĠZ)YpdVb4 ,aeh\vȑN)}#C%ꡮ>yB~05JZR#kwZܻobɩdo+vpRSm5 *U;|<Ґ(kiO2p܉h}_y nlX=j *%Ƃt_Oٴqnykvxp]c8sN ?KVo_ۿwo7_?۟{[?G:-cS _\$F_kpng2aiŇAK.#=N YI0@ʂ9XjZY:F5Xh] 6 F5j^o0q.H(q;\.ME"=nش >ƭutum߳{;sO߸qd|͛7vm'NT*oZ5*U{{J]0eݿcߖͻ6ܶo zGOx₋:vU]v5G9A&WJ5>z ;_x}/~nץW\_qtn16;PXE`8Ig \6>;Db\uv&sY wҢj 3M,*&BCYJ&)իÃ=:<>xbLhQ T=}6p)a;eЛ )LGv +5TvyW +7l^ZOu2 afmAPD.loLAc!h _Ҁ5@ˏ @r ̯X636 X:'yIOU, 45a>BV 0N? drz&3fd2$!?FfEpδ䇀\dwLtBe"zŬ?d8ҙXA2/l+?o'l~'^T)AHEN$bhmJLmU+&6j=X)B[}->nZ,tE"lVm2( X`5NQ66T X,$qhx<(r`aahB]}Ne٭۷o۶RNNN}|*=1>b,&bqm5O\{_zW_PRINT?AdL ObjInfoCorelDRAW@E +DRAWBITMAPSD??"-%@>i- "-%SwS---$SvHSv^vHS--- "- %n9n%=%n9-- "-%n%n.- "-%n2n;- "-%n@nI- "-%nMnV- "-%n[nd- "-%:%:.- "-%:2:;- "-%:@:I- "-%:M:V- "-%:[:d- "-%n%e%- "-%a%X%- "-%S%J%- "-%F%=%- "-%8%/%- "-%n;e;- "-%a;X;- "-%S;J;- "-%F;=;- "-%8;3;-1Courier New-"System--Courier New-1Courier New|- . 2 ea8-1Courier New----1Courier New|- . 2 -b8-1Courier New----1Courier New|- . 2 2c8-1Courier New----1Courier New|- . 2 Id8-Times New Roman----Times New Romano- .2 7shark %2 emoving  %2 right -1Courier New----1Courier New|- . 2 T-1Courier New----1Courier New|- . 2 r-RIFF+CDR7vrsnLISTdoc mcfg *4 @ @?88 8c1LISTfnttfont Courier Newfont"@Times New Romanfont#@@ AvantGarde Bk BTfont `@CommonBulletsLIST@arrtarrw4}h i DDH65LISTxfiltLIST0filcfild$I d @<LISTdfilcfildX,1h@<2ddLISTtfilcfildh7h@<?W2f2fdLIST0filcfild$8hf@<LISTfilcfildl8h LISTotltoutld??d@<outlx1d??d@<}houtlhd??d@<}houtlnH=h-h@B@B@B' -D?hc9 V? c5  ncd' .0H`x p`Q AI`@@J@@@!Bh`J@;0DMhTMh!I8hCh`J@;0$Mh4Mh!,1h8htCh`J@;0MhMh67h8hCh`J@;0LhLh?8ht9h,DhHEh,Dh tEh,Dh Eh,Dh$$1hFhpIhGhBullet1BhHEhIhGhBullet2BhtEh(JhGhBullet3BhEhJhGhSpecial Bullet1ChHEhKhGhSpecial Bullet2tChHEhpKhGhSpecial Bullet3ChHEhGhDefault Paragraph Text:h:h^M@ok@`=?? ?Ole PRINTJL "!   #$%fg'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdewijlkmnoqprstu%$xyz{|}~@@`ԟ(r@\rCDR7- 3         - "-$@K@5K@- "- "-%@>i- "-%SwS---$SvHSv^vHS--- "- %=9=%n%=9-- "-%n%n.- "-%n2n;- "-%n@nI- "-%nMnV- "-%n[nd- "-%:%:.- "-%:2:;- "-%:@:I- "-%:M:V- "-%:[:d- "-%n%e%- "-%a%X%- "-%S%J%- "-%F%=%- "-%8%/%- "-%=;4;- "-%/;&;- "-%";;- "-%; ;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;;- "-%;w;- "-%r;i;- "-%e;\;- "-%W;N;- "-%J;A;- "-%<;3;-1Courier New-"System--Courier New-1Courier New|- . 2 ea<-1Courier New----1Courier New|- . 2 -b<-1Courier New----1Courier New|- . 2 2c<-1Courier New----1Courier New|- . 2 Id<-Times New Roman----Times New Romano- .2 pTshark %2 Tmoving  % 2 Tleft  -1Courier New----1Courier New|- . 2 T -1Courier New----1Courier New|- . 2 l - Oh+'Oh+'0   <ObjInfoCorelDRAWKP *DRAWBITMAPSO ? ?STREAMSLISTRIFF*CDR7vrsnLISTdoc mcfg *4 @ @?88 8c1LISTfnttfont Courier Newfont"@Times New Romanfont#@@ AvantGarde Bk BTfont `@CommonBulletsLIST@arrtarrw4}h i DDH65LISTxfiltLIST0filcfild$I d @<LISTdfilcfildX,1h@<2ddLISTtfilcfildh7h@<?W2f2fdLIST0filcfild$8hf@<LISTfilcfildl8h LISTotltoutld??d@<outlx1d??d@<}houtlhd??d@<}houtlnH=h-h@B@B@B' -D?hc9 V? c5  ncd' .0H`x p`Q AI`@@J@@@!Bh`J@;0DMhTMh!I8hCh`J@;0$Mh4Mh!,1h8htCh`J@;0MhMh67h8hCh`J@;0LhLh?8ht9h,DhHEh,Dh tEh,Dh Eh,Dh$$1hFhpIhGhBullet1BhHEhIhGhBullet2BhtEh(JhGhBullet3BhEhJhGhSpecial Bullet1ChHEhKhGhSpecial Bullet2tChHEhpKhGhSpecial Bullet3ChHEhGhDefault Paragraph Text:h:hrP,C?qn݄Xf㌠h2@ _<#@!ѳJAԂ: ^36&Κ }G&ǨKծP4\I!o|Q2p  HzsKn0]sV`=HhP9Y~_2NMz>2\v:zX:c~#)w d %1;ҹ aD-d`PJmhory(S*@ mBjq?R-6>2G z:G溧'K:,$tJL0qTo7€X !B# U$79Y 2 6OӕP:gq.3e].(L-uӒu;i o{32 /"wb$Uԕ8=E`QN'?ٿ?~7ۯ?_7ۮeDm6U">#,ܽ.R]ѻjRWnS}BF:3H.N?Do1+5:ACa@6  aHTRq#!D"aS׵Z7dH$k|vj^#-Zع弋LE p_XTxU$B삙7F=^~%\z`㖵˦hHQW]j~ni鱏< ۞s/|]s]edқn>Ͽmv%]1{+dɂ3&Q(Vzzr:D">#BEQ\5.%YMWBNCD@fnpAmNlViXLeRэt}u4Fw@ryPEk&BΪ7[-輐5 Re.6^b0nG+\s-- !zI%k(I*=}'#PZCQ !(?< Yw PN7<>hTĹo7bau&.R,^ERuV IgQa36%6e܂-<6c3{n9L>ha]VgD$zే/_['I׺EVW`QH&ub~vJ7A-.\ȃXZ9[>pͨrnE3IjO4Ļ0X>'w6HpFzd T*_225;CCC2LCN_hǷ?h333PHTA[L O-TW\rEپ/`fz9C )us$sb5_fx$@-%]jw1|9;3bFn[oaǟ{k=ptHZte .el0)RCjEvcǢɜdbZ(l4D~|0|rpXd/(\$ (C<' €Az,t?gRI DYw,oæLkdJB GQJZ 2)5LHz*ى]%:덂lÏB7]gȔ˴:6<0VӮUժ6 {  *#p(IRIn3]F~W >{u옭iQN$޹%5hee[j6ވ9|+H4q9 JVQ,A(<.0 ~ĝ2)󠑪 : шcdb[4*Fvf`idZQilu hut_F+j@37<0V&-oRq:I14 pscneE Z3{ũoo^}[?o1:"VZE2H$AEMp}r:6 j =N_w'_{Ȏ͑L#X/ 1_hhEݤQٌ d%'PejA)tFcllX,B?4р&"c__QVq511-NBc˖-b.3[nOg'|Ϝ9ϟo۶bv+G.O<~|}ߑ_sú]s՟~=tH޸/YdAY_(ө\!䋝rGHw@Owo/A>y1\hJ`j&b6ɍ5c@Da4ĝܮrqNczɢ2X@!(UzJCTQ3G9}өn}K=WkᎱ _{y'厺,z|PL|6D<Kc&B,!uF2m@J#KCY:-2}m'Ktd^Yf`1Ћ kxEr+8X uc|LMJ"YZ3bӮ4JUD͡]jU3F 4bwNWɓP9V!P&uZTԍAV&8,bC7Wla\)X @P Vņ1xn@/€F%3I PbLH5oIA%F8ĹxB(@a̴f vR˛asPah.JAA=TF'cyΆjBTA%+-j hi5f? ֠3 \)SdRV~ɓ6lvY[Ho(Z)2Ȳl! z}A\ ]]b:rfˎk7nHsR1[* h*I%SBV-TkŎZ\S@G\^Xs/ء3w>/~4}bUga+/pMO\-G1 ʙt互zܙv&kD&#taPB-'zO\ZXZ\>8+ Ӆ|go'[w{.؏0嵞>cfkf޳bl&TkT^ꂸ*U*E@M tw߶5Q( b8ǒhM Z&Yš]P rx/gs|Q3Z7̧?S;|Ž >t}b?_KT{*d2lzhx|tdlzrXZ,*eߏK.T+|69bpl4I~]\c!+/x=`@irؑ&6GΚz%]#̭](W_f D-mhQ,"P=ۦ6?rC>Xc¦HA-J#J bIt#BfhhTZ?7< *x(1]cE%1YC+s }d IjF5^D.o@?P>#$ۨ~>@MBvĐ2z: IH+ 2eG(XCVEQrF8R::lPPDѮR᷀*tqډNOc`3j1r&- %XhVy>?3 +65@b& hB5j3Fewzo7O}+w}o67Y05!' Gb[G}o;}s}}E]͖,\{?qwJQ"HG<\{R| Jb9OuC޶O,V,!%nϑQ5JQhlbO||03?w6\޴ةK.N&z2cytfHW_0c.&&Y,OQQ1[8s#SX\zƲJ:W r3^quՁB†Gܴ՛;9z`vA% p"i'σ|@鲸(Wlb VM.,m˗E.c"B^'n*ŭ39)hEm* &ӰX8)U B{oJ*J)UeLM\m/v.V*Ph, kni08d j$jrŠ3M&ҍH2 crRH:F G65hP ڤ*QE hBU,q:axl:خV @%cP2 㬐tdª1.( z11;uD;"0dEMkӖkbNcP?7&zR:5MVT24 na ڀBR߅ðIŌo4Z9 L X s"h!(Ѩ5 6^NUw޺{~sǏ?SWG vK&D;>qnz'>|o~q/Y ^`Ϻcӽs]Ѥg2Cr&S+$Kywԯbk"&:{{‘@8Z>Qev[8.JjX,~3⋯=uj۶m*`0kq8]j6jg%V,s:  J$^_mPYv{W.:z2"ԻDT.̆c`$&҅ۏܲU_.֜XW@>ӵhcr(wybno</Fc7Ζ\\/಻6O%Z,3ZIn&7O}!%sb3΄`,cD-j#ԋJ$59f5[]`7 ~;M@X"5sR9Q06cUiM.Ta)2;2j"l,B#2XJGt UFȘ< hS*!-Zrd>`P5֠dJz4IcjVsSrR"IsK]Jݹ%8*hPY 6sJVۊ թGϽ1&T TPPhP`PC_!TJб:JHTz@jL@@giv>CÑ~wZ/*?ÔA>hDΌ]簆*#ؗ|SO=?/cl_>o[9]fQ*{VOo} /nx |6eYQkD&CA@xȃla1 \ФS3kV/ժ]|>5br14HjHvl"9T@|J+REU!rJi[YN!Ѫ4* -cwByZ2PWނ }C/P4<\>h2ԛVd}h qS"Q@BcMSkU1PXZH- Hń.DfU8]n~ßk;_3?uUgf R(1T蜪wM;G;ri @?( +\in[}C7,..޻gB:tu;j^o|>|xΝGYZZJRHhd2?rzC`,]mJuH6 |41>52<^.2|4ET.h1W(w|Hp` Kp"ӑrزiDڅmb5M@lR"y ~HV%BAU,oR!S*Os!DT J! a[bm6 CD*3%:AEo lUDV^ntakSa>?49 tNCpZ ]`@PVgjb"j2Fyݎ۞⅘wSbCCyad(|`(©p0l3| >D mv|o ~g?kzl†M5cBGFI<|Ytk<ҡ=W}9q{#;w_{݋lg=dw&Qn:b)͉t--CD  "w ;qx'{,2֞JgG9 Pi|mذaff:t|>D8Y$t^o{yQ=L,R =r(Z.Șh?Hy`;k,wp՚uv#}xX?~'O݅F\um/<2! 䠂p~_o|#OM̈$dFޅhmWh'VdAk|+pV?8=X!p] ASi!# #טT:M#+qiZƎn-mJM@-$,k *~7(Dj Зaim8D'EV@K(uTݝ\e*uj)4pm{Ы k>-Mz^#o,~xs2O&n+O뽻"0As7t(:DS5T y  R!oR\? aOwȳh03ƚ:ǎ#i{nW뗾?>_~?o}?ohg{DvF$EB+hw;JP{:tn|5Bh&O1dKT6-4^S õB%#͢OtYH"̘ ?~N/_6a.Vkʕ{j0__<jGG$0 Vt&Q V:hYX{μW8~R^7KAh54(~4bC#Ǒt cP# q.:zͩ]*T| tF$tS@:+VFf7:xk6ltIFGفv"82 ͍s sT(tMJ>ey` J4-nկXZ ؈-P Eށ9z ?@KӳM/j]Gfk;9?A4J9J3lkN= G"Q owejЏK<4iw~TAQj02d6(`9h㱇ły'L&Ii @!ІC gљ]/|.UA9hYP5?Hw'PFd3#xX+G bC&ܾswnoϏ}k~ᕓ/|L?0vlݺ se}l.,K U6tVRB̒2QwkO>vOobU+RYG:fջʕzsp^d8?D ᕫf&-m'=x.Tо}ǃƉP(d0z=Z@z=W.tD3ҨP5')PCsV#Ra(pGS cL &56 ǘmVaD Z1/ϼ[#ϟ˗=~׎.;#njyl1,d"֔ J>MnS..y^wzvtϞJUg&{1'XSr>ùw<(er|×Zf3brUW]yY2/ N6z[l)n{jjjqqraWP(Z5[*& Mٜϧ,m u| 8ñl"" o xjph'~.=QA=`.J,GLN"?!7 Em 2"H4H5_jwxw5ۨ1&궨iNR@IHCAқ[YD")\Z/uvHqO,/LjQQ.5 25n&ûBPHWs=DjHm\$nmKn+-% X44?Ƀ@\.NL٦ ΈXI??pmO(y P: LUO)??J5^Ρj&R|排wc(^ D2ZFyì"jbrZy$5~s#rW/_x~擏}[_?.zk疎_[ZD0Q2UC㕻>'=ȮXʃ~}t.7z+MNӾbOn?ި\@^;=ӳˇGWnް8>6491FK~b}~~~׮]patDX,%sYrH tB  X:РU'roB]/Dmv?\*p&%QRJ6Nn>ɫtGx~j Z~wa }ˠ,:_bdxC>N]!Mm.yg"N㺨C| -"E+D9,g\+۵v?bT_tuKBԋhBщhrLL> GOڋ$m(j$I# У hN4'yHctDsON8l.jM$Svل`|Tʐ|*T-"1˵w>^7W<z;_\qPpqg]Gv]tC5đn'vp,:!r[&Ja.xd~ơY&h1Չ}a\Aaܵ sΎr_83L&ԧjWWM7twJNS*˕J ʧU*!3?vv)b6%:mEu&YK,8a= V(B?  CК/`;=:OPH¦ ^m`mP7@ BwA@|APυmi% /F߁ޠ*gD[3F`zAF%`REXEٌw$yi>y JCӇy/([(j krQ -Wo ZbU!X,QhHGA"H(5:> }PyVeqFYn*Rs9 6YI텒9rzGGUJD n9gDqԚvX4,- MԪ-hUTȤAeM46ٜAcb't/. CP TI8ntzAO0rMG0|^o?/\xܽolե{Ef|/?O蓅㗟{ڴ:^,ћ jW>v-op뺗l`˱뎎΍C+^xvD |JFs{ޅU++|&-2㣣ݰ`_|V Xr(m۶m޽0_bl6Kp+y Պ/A2A%,|'ҵ@dGg-pa> ,o,C@8yOoh0mM@-c@:#6Og " +J0TE{973O1I@IV^dN#gGNtjR)ggwďD? - {H^o̲IW "dwcH1$p.&EԨ/tU4ؔ+q323HɬN(4'JDdJ`:GqCP>tO $9k/ȀE؄amQ;rF6QkdP$ t VM *tNs™>R?{! :C'gԌ4jug?D8{5WsޏpuFS:bV\?K3OhkHMUC6x;|߮m1>o?ZK-׮=3/P V:wd فb f\zKvF;S;=qөe 3h> <0>d9貑 CH d3T"dyT*DKPGE>j;=7 @WPA8ιad?a.jv`8a/\y ZF'7?ҁj< E$ eyb7=FAu8Y*DZ#2tXm3?hAPD9K ɻHE`b ,[  -9+\HCiP>@ |%Lvjd.}-ٜ0؛..A7lq/+Q7N+eV-]9Yz A'\G:zyv'n?yMWl\vǟ_>rꎛ.;ub`^Z !"_tt;T! jV+pp8l62GH$FPZO}{ah9?͙Hmv`ƀ}f:#vH hH4,h6O0.o2Q-jqxGuBpgdMDDcmQr_𰰫lB]@ xFY]NLO>z1NW*._b=n>㩵Ó[=nMҠL'1 xQ%Eq}rS/ZD fwiޜԬj &t=[-,myhc݇@ y!0ޘ px(IOԇw5Y3(Yj굥)Lk ~/hzmWbp(eZg (q e,*H P:6Kdjͩ6!?[95qlooh܆=c휿G1 Im7,L^5F'3=Mc=JcC/r[K>+7/u:Z,5:ִVʝOwg[{ HiZ&)J ';@GŢ|cM2ϼ" ƒB8dZYyqK\ 1"%4+t.~ڵwsZasj`&\>ąˡt#.Ϯ\8̆7D"qƧR1LH? l{RE,UvS!eu%Ն*8(S[P6j,~ k(`Oo_sdžG:@*HKHn0^J /1 8Y]sڜCvJUi>WKBH@ۧ dQ呝O|_|O/?@{ZMt7LdjmHDegw<7;8?=hPI"+NN޶n Z`{)3:;:Toھ0Z:uv[1MDcX9,(`jm a~L2CR ¦T JT4NKW9iVǢ|<<|;hn`_)U`8@W{_gKuF!cr:z 6!+ZYls<6 GtZp}7_9saZvH&VVkn ,*"Q x biͿBj ]~UuH8*l&ASWKzޥ^g_N/ tOnf7U֦aN3[ޞ}n>i]+hvbLH5U;RțjnJrOLL~n|Cy=ѧ6P8J\t: 측)4CvUǃ匧Sx -fDS<<* ` haZ- dq p (v6 5TRʁU )wMJ]JlN]8ReOΕSby~Dͦ m"l*09J$i CN)hԺxV(v|5YxD! c4Dx%!uh;%jP?/]ٯǖ%[ #۶.:ĉ]'gRHE;ur "8Aǵr/uDdY<  C A"L1z;D"(gn@= 1z;D"P(*33s# 0 ᐄ!CCfC GC#F#ʏOƘdBO &$qDOi"V禘ɔLHe1YX)[olbyuM"yT-:6XvtZ?uU̜q|ݓL꺮/(ZV.Yt"8\,bᕶicIx}X3ϱlG:UμCոtKmi۞|6/'l'=.̻Ki_]7FC8|ǓWڬK:eǹܹ{T_zq2=RQHk0L̻OUQRUIWt[_T%G+`E'Jo7w{?MMDd   c AfC:\bert\PRG\Java\SharkAttack\Swing\Images\down.gifbq=c;\[|ƥunӝJny%pPNG  IHDR ޤVXPLTEatRNSS%bKGDH'IDATxc 3 sCxa?QPpE)tEXtOFIENDB`Dd   c AbC:\bert\PRG\Java\SharkAttack\Swing\Images\up.gifbQXac Jy%:un!-4A9' 91PNG  IHDR ޤVXPLTEatRNSS%bKGDH(IDATxc P 〹 pˀg,ˁwX iM$0z`6Ysx޷GT >Yl=Z߽=Ql!tEXtOFIENDB`Dd, " c A"hC:\bert\PRG\Java\SharkAttack\Swing\Images\start.gif!bwDG -Jun.NL2PNG  IHDR|PLTEx$-\__xxx򺺺#tRNSS%bKGDHgIDATx}K0P)'ڏQ'lBTKY i7-Y,d'DDecN@lXC ܞ1v&O"'2+Pޝ8ڲ]TtEXtOFIENDB`QDdx|B  S A? 2iYC)%1Gn`!iYC)%1GB H]xՖQkPϹi A>aE63&a|X Bua ҹ1AC່*IK͹s$77LDm`$NTM &;>6%ʓzLSյ(h.09w,f}@3zƓTO$HiC>m#nDbD.Z0"Niҡe6"=PF*#r /9U'D03HGslG,Ĝw;鼒Gyˣiz;ڄyFY?+'XB^}:h#1*_5u&L84S[M8<ЈNNP!&Q'5[L#h׋gc;ٷ g;}; b|:A~bPBb ca>EXEFiu+6 m{b-=$߈٩њ7~GR/=K_/[-.JtKg\q].SfVɿ^+~֜6+K|ŁoW+\/Ћ5$573|3dX^sgSd4$[.*frn_Qc漚ey:h(!jNM h}+ UvUỨOh狓v<䜮DJ;TgMO|F>S-G|K|Jٓ5q4|qFu8[!N7;(55 kZ(] NwLDd< B ^ S A^? Z2F%2W9( FMicrosoft Equation 3.0 DS Equation Equation.39q#pI8I T l :x 0 =ay 0 =c[],x 1 =by 1 =d[],x 2 =by 2 =c[]ObjInfo]Equation Native 4_955276220Tc`F`??`??Ole    !"%()+,-./013 FMicrosoft Equation 3.0 DS Equation Equation.39q#ڀlIHI T r !T l :  set x 1  to x 2CompObj_afObjInfobEquation Native _955276313eF`??`??Ole CompObjdffObjInfog Equation Native   FMicrosoft Equation 3.0 DS Equation Equation.39q#ڀlI8mI T l !T r :  set x 1  to x 0 FMicrosoft Equation 3.0 DS Eq_955276725jF`??`??Ole CompObjikfObjInfoluation Equation.39q#ڈ`~II T r :  decrease  x 2  and y 1 FMicrosoft Equation 3.0 DS Equation Equation.39qEquation Native _955276808hwoF H? H?Ole CompObjnpfObjInfoqEquation Native _955276881tFY?Y?Ole #ڈ,I8mI T l :  decrease  x 0  and y 1 FMicrosoft Equation 3.0 DS Equation Equation.39qCompObjsufObjInfovEquation Native  _955276892ryF Da? Da?#ڈII T r :  increase  x 2  and y 1 FMicrosoft Equation 3.0 DS Equation Equation.39q#ڈIDrI T l :  Ole #CompObjxz$fObjInfo{&Equation Native 'increase  x 0  and y 1 Oh+'0 $0 L X d p| Chapter 6: Swing and MultimediahapBert G. Wachsmuthndert Normal.dothBert G. Wachsmuthnd62tMicrosoft Word 9.0d@")n`!%2W9(` Hbdx;KC1ONjt*>6jQUAn.NZ ^4jKh~'9a%@ E9 Qe}Gʋ'b6~pe$߈ٙ{.r&\uL&|у4@Mdш]y|jqMLq:$wW9˓]5W bb_ =Ş$j'-ď߿ѧ_ߍ^q?~M6O2}ʭgd˅51Fo·\wRg %WITÛU*d8lu/y&O{狓z%8sJ;]#T<)&4߱OPDY/scoYZs{{31Ca[!nSu+ #}'$ LtMw CLebYyI 먛>Dd,B _ S A_? [2;FY\a2)Cg,n`!|;FY\a2)C 8>JxJ@g&iAD/=؜ мE.y,$]4"5a~3]:AE৥K< D e)-\HiZס *AaJ.@Xx׺Яs:;Ȇa~싃RAQKuă3gv <8ga֊*("}h[Yb"-ILMk^ln2|c/78s4n͕',:T?7P( näߠG话<;m5p~!j?O({$ ώgA@Dd,B X S AX? \2<[ZeK/<.n`!~<[ZeK/< 8>LxJ@g&9fPųR'DN1[FⰳG;ܢ97;EpS X~z83[BRQEt lum:z:7KPpzх^ӆ~:@|*(., ^8< m7c 7({|7ʻ8pHq[sQk0UӚW[ ڬ _gqsmx;s`x Jwv֟}E/ PNaүˢxN&r[*MBOrh%iZ=Z[fG3Dd,B ` S A`? ]2^,#QU ?y0n`!q^,#QU ?@ h?xRN@ h$b:1R;2ud!-'J4  C !$'Dr|Ͼ c ^f5 Q2HeYJ%!5u!}`/4^kv" Q05A $_8sREA_:SNߤ{Ϝ]i.nqoGo{sby2TP @_tO]J*hwŋ bb>0^_o |N#i2q1Y>\A n?:TV^3Dd,B Y S AY? ^2`f@JTky3n`!q`f@JTk ?xR=K@]. A *KE4m&?B8Z;"^q̛}3&oVEl!J*lTRUlAM<6٫IdCˉ 'ŵ8SREA\d:WN_els߼woB&wh3ޱ_n>ܤ'/gtw̯ .[lRŧ'}}v\77Y ~DқQs=Sċ{7q2zSLn3ɲ)4O|Zo~_1Dd,B a S Aa? _2 @Fwsfm{xwK5n`!o @Fwsfm{x =xRJ@]. AJ+KTBEHˡ/[Y D;d8C;}yskϲqdTUTp]*}†S'Bj l@M\Dls߾w{]_wND/7yn߳Y\8ƞ_2j|`CV [fcɪ#ތbA#Q9opy7&OtA@6.&֧ԁ7GhCQ_/DdF<  C AbB/Ơ(_[Lե/9nn/Ơ(_[LեPNG  IHDRZȀgAMA IDATx읭wHƟgΑn A-$4bY4le ⠅yfزɠen6ڼj.r VR;I䨫Kԭ[jNOOaao&a_'''&b/aW7fa?-?7DU"$~ُoa c wiw.m 6 rh 5*mQ$xI»]w;Qo}pYy s;\1!6ھඏx <6Fqw [gþ*7Vy;uRnbT zeSᥦn5.eZK҂[Oݥ}Ln!u"90R; ZN4[l>==X>tzzzttSϐ硟V~Sa U˗/UV_0o*';W 0>n޴g|:7'uXPa=AcRYg iƲp0ϗ>R+ŦaVPS3asaT0 c aSa0]b*lK/XޣaWd Ǘza9[z$"3iGna泊_[uz 06p#+*m50 clᏔQ| 0V/6Gp'ܶa~F>NH;na0^m1ݶa_*90] @0 X†aT0 c aH8vU0}sma.16 %†aT0 c=?x}+$lJlG{˴ؾr 0p#^zih a-[So$vl̶DU|}em&Mx;`WL&GGG|E[JR:׹؉q_lKҜ7E yt/?\4}S_-ڭacC;axS0/W^- _ vGP֟u#Krb6 +O5skaMK/>;,9 a_xF➞IXgߨqʽ1 k` O6wwQ%9^s0 ˀNOOy}|d2YzgalM[Z;&˗/̆aT0 c aSa0]b*lKL 0va.f˟N~R(/K JPFsnv5skɟ~|><ٻo4~r@㱿9w hq,sp|t,ءnύѬ+dn%)kS €san D+Uګ{S}hj)-6آ"ǁ-ҵƋاpy5A 晐T:0 *u{"^OۿM/uHK{/YDݸhSoqqm9gh@%:67ϫ T0 %l,f3/jPhsE\3Rpim!je;GP s_;^kcϑ' '´N{+ H\5{p/ ,$ 3e#[+4ZCŇb2k=aNޗBJ_zx,ڞ{N*4o\of=/<ϣ-<,tz~qq?]UAP9p2jK :s**z03Nqԭ:)׮"Dpn4~rX^uSє`CuCSB*@U+P i%eYPc@ZW,!7D|k0ʜ/g?ⰧXb  7R-~ZXoNL Դ`M&&00S]0zm٘ X\z FUAx*)y9ky?=?>>f7+q)\hHԦtT =/ֽ/8zHHz-D31 a>BDSr1}P i"" Ag3c\{4=rC4MЈ҆;ѪvNLô ;5GJGU_,uH0+K(fx<0s׿L/a J㲌S"& ,7.4(b'OkѠ?J(z*; EQĬ~9LOy,sι8S1D@BL`zoY1Tk2wފFxJ.)c@MN"(8UJ%qZ/>\񳃋Ek·ˋ4/hɐ"V\t>FėQ7YZ>\.UӮnI(>DU9ghRpl4q7pߍГ3ݽ0XCvp7"✓ٹe̾|ur)BNhu](oz\.O^8y}ZM߽΋r%涩FbZ0ޤ'Sfu񢪦%v^.릞jv^MK*p,8*M!uD# H1u,\Qm rf"dnOH(I 0WybQ<.a^0\u \qxosi4/=T:g4D² ŭ,~ĢwRr*gg_W/{UU.ڶn5.6uYqp޹ul t^YgU&oMbӺF7k&fzNf>DՇxmni[SꝚwAZ{]*!s#c& g"כ!9̈́S<ͳ͕(FDPqC2xHa8ݐמx\ch/SN2!@qj@՘2!L8Ȓ.B!"~ cP7Ͱ s2dL}S?LDF`8z{7ލz0ۡZ2 036\Q S7 Ayon?M'*{Sp~08oڶMz@Cc0'D!Kd~߼$y9|(*&hgS^A&1s~ \,q%Ƒ-JU_싦޶i|=WMY{>{՛vVmNi5{\./..8CQUŴ D(@Ib!0^PH\nώv [%BwZNbqyy!\mT*)zXUPͪh1Iw+R!@ K呈R> ?BZ6)(g&; ^ EBd#57:PU)T)̴sȄ;,-`4@5;$y;uEU֫zS|qv,NoTDd*AEG@m6RrQrD䝪y]݌iBb~\5[^UMMxgմԝm6Ma~M~ MJH<۳=۳/;eviV IرSY&|QN~wE G8PSQG,uxkng#t{Δ7J@=xdUUzer@ۚ3SūzQmxg ?Ͷ]9q0O83s`Q.٬(+u]ffmS[$X1쪎D$j崌\an|4Wg'˟u <U.Q UUuʲL.ry0X;ם r֝12K;/U9wŋp!%A !~D`Չˆ>}F":$/sCx(wO@iyimfY x6>x K)DUԆgHKzD:⪸GC7sb[ _|iH=q Icd@_DAl2X0޻Buu]E9558TmPvh pPrDC΂Co74ڨH֘5V[uD njJjI) IDAT[1ҿ,x³s}?]x}$*ddid, c;c;ޟ2sgIEQ% YBu_$=0nv䯾?_z6«7w_50&փV,$t}GL5jwEKC/ 4(vO~Ce"m6-l|Pɼ;hlpj.ݾ^}JCDj\-PFVoWe퍈M:]Dztonڠe`3@JS#BvRgʠ3`I փM K/4矼g mGl6+(X.=&LPM|YH-jGgD89~x#qـ%%juL у9#))WMXX`pM9/Gg\iMش?K%79"m lFlp5|b}";WW i9UMU;15-/zPY|%< w'z\7nnn9q2^e͏`dZH'OIs]p,n_ !.S&?کUv1 f>9}S!,\jm;VU#!ꋺ{6Ս[_L#6MuYMrI%]s_~EJ  4pss g}vUQ8$*^`oGh Ď\1imfiڪ(}p=(eT xB9C|yERė9wn9@47M۶^Y28}pň ផ۾!yLYeHE }())q;z Q]q)6TB%c7w"1ѣb3.!yR4Ȍfs)U;($f₫ wŮ%"r)lN pM/c|LT;BϨΤ``Z(8g?- 2=XM,\c!A,U,I03|_1 'Hx|1kD3Zm08|L4+>uQiY^KA۽s#m﷛Gmެd!7nkۿ޺,W\59\Saje u-"+.tft{->T*S)h .R۷(DrfU .e4k.ݮS\-HEhE9jZWӿ)0d""z0e *cc&dTvHn@^* au\!/=>vͧ\i\ 4Q ?j۶kBEBL>{ ;>ff4 Lb*r  TK`J *{4(!j2I% &=FA 8d9XuRy1S$&4$<|μxL: gP!轙oϛ_0!%'8D$B:9s-5D@Bb '6b~dDe nm`([D3QѺwϜ'!lm rw'epv٨bIf>*q!lt.)眉A$AwpA"M|`DDH6f^|U",rQ|zp,4q-, \TL{ ^IjC)qfѹ`ۏh""A֪˪o/Çِc7_ߨZUnb "C_]Vp[쨾{uߋpX~n"3F{4ڶ[]~k :Z$N:';AmU~7?Ωg:q>2Fx@@9HLA4< +Sdw`aE8]k?[Y4I*`> z6iH2qI :J14g9RDѦ:&̇'W n!ў~6 Gq_%uzn=kۀkR5.n{@c^ /}@ }m6K>Qqem+UU,Ct'0t4": ˂ yE%ªmY@4ݾ=FFETp4/^_6^-9#7Ǭ%1(6 ]۵T@HM h%PbPT`}je,/3}<TW5WN l"ek8cɊ *DӀϝ Lyjqck6Vy20d}Kd4S&l8ЛX)G0坖/kʿ25l';Gv rV Yv$Kbq>R_Ys-W !~TFOq% %d֖?-6?}?/lZOO2IR;R§O8iOzNىvPF&lwVZU-IE8jڡÈ]RIk|;}ۿB`+"}Q.FP0g_|P)W5тl01ݻEJN+oۇ8^`nDJ/@n{{>=j! 쨚 41eVF-UB\WD ˥C?|_Tkݾok.kytڻF{RvdJ1P:g1xGQ㙀oY8;*cMna!6鏔ŗwj|L|Du B1m{Rj# &>mc9 ϟxr4 ?i*:Ox@"O LƹH0r7#ژ+N$`/kpDfI 2YETAa!L#OGK"^%Np_fZHӨ灜9 4Rl+%>ػo?rQU"ݾ BRSU2lYF\]$`廪iZ|93UUUͧs. R$Ι*a_yY8hR|RBwIܭShÁc#7O!X$&Y].҂4C9/89q2^`^f\!uE:\xZ6KN@ɍ$H*!e$Te4>mt{=7e-3 F M* )U ŁȔ_?YRf^̅˙弌B<%,_pH({-[dr١. yU= sK;Zn{p?[c ||0gK3=m۶lbޒ0l.?0Hq8"jTY1ajsNDTCjUdXY1&\nPqk n]HRl(T֓>5x?rqGͩ %)$v'FUr^xwʕd1'pxD`(mK[4W8>Ќrv0~hv`/o߽pǶԚ\XhcQ!Oÿ'̎7?TI4높#O^6V|6j]Gf@ J<&gny%Z؃nIreKLHum @OFZeÓ-]Nʳ32_z:.n]u/2$zsD-yu/_>S1VjHʹFL5qRuh?6n/VR1J[P|@\*m=)OmDY"JcGik^t$3n1kq٣b?sÇ﷛MVZdrwG}&PPɹfp:HnD4xv~ˏH_v{:~נ>aAӑazf-d[ '=%Mlf#"QBuyETU7M iZq*x&hon^|u%ݻw NO4kA꓅[EseGA%맖 qAj *vo⫪l2?Z2B)N1W<)r8T$ Ypřs k2 Ee(W0@D]"y5A<0aky7$r/T! "!ɲXb~V< "2Y%` *tqC"ߜEdsn\„/{.|f! 2 +A%[7zLg [[9/HV4a[ZC+q`!EBOq{nqSնi1 AQftfZU {ȺUԑ]'@Dbi \7˕6YRO`f"Jf><"K4m oar=7]w%:$dݦ3`waS5]w}um/(ٶM&ʼn,ӟe-l6x:۾жmvυH'~:lWN+H_"/O lHK֖5Li\t=r2WDBTsW*X}Pd ЊQ pՔ[.-dxYWGBge !"Ҵ´xѲ= 5v?uWd E~Bv+\L88%Pewy6lwG~n_Oo, әg bW5{y?)&TPj 9AprZàIrU5A !y3NJB_ӡVp3 B㧮wN5V^Ha&4lJa1 ʊP-^KÛ7objܓDà:H׵GGjlCt۬ of쬈g0& d+^*AZdpb&\nc?Àɮ>ē.P-hj{m^zK7G-q=yO?QAn,E =1V jƓ{S~݊Ь^,lTu b\`WȉSF@HnsXKOm0'Lg1RB[U#.-gm}&UL3kX^,[`UDpY"sBr 8\GqA=zռ|H󊻮ib'˄}Ta8~=IiŴb:X#Qjr\:Oڼ躮i_4xu'>{Cj0LWH-L{IbRn3? xD*j-&h2U nCT3&`SxQ0U+WaaWYoy#fCl+/bd|,R HH4rfx[βI2Յ!ydo/Ā#OG2oR ^ ،v+þ ܗNb:(8 j3FՍ7L\ŞBbrT%!T\6N,Z9r?'xylho:YS"nXQ7wn:^&UDQD~w??}ߊ:t*W;m?gE~h'~qǧOU I,-. IbKƹZYɍ|D2/=@Yx\8$}QѪ%w&l08ie:G`ybBK-j̰dҔm_T#c %cOVJɉjۻE9~47*~7 Rk'DU kTъ]E~{U| H0"|{xmz#2NU,RNR zVJ5nqQ p!* pV !LUչZ"\ ܀K"nev,Ut:}W#NǏA^S8J[Z5ݶYaN?&UlÝuXjᬯ*B=)ϠG3IxͶ I /w쾺:ueTp>yv*<:Uv ndLю1dnYD=먹]Smݷi[-{'$URACK,ja~-d< OIZy;?>v>-:ܰu[ňs .ESo!< r/aXʧ_dɬ`UX6@ޜ 5$,;$0\M̞"r\n*Z!*"X25 7L[7^V^$@ avˆ\?(yLQ+}#>H} uު Z;᥶\*4Hoo߅f{Ͼ;"gƗ;ڢ6I%%m;FҶmPЈD0坴ZEe88P\?9Zͬlj9)pS-y:況#^r13n7~R/ܰg۬Kd+ /뇸x8ܠZ]׆;_ -A6)|Pn˖ X]Lqu3Z.1O TNFబNA,v2˝)0#[U6$UCbp2zf8a"o9m0v_?ã^]Z}g/Nz0@ϖ=~8e{O!,a9 |2u՝W}IxC׽i?#}HTQut/ۨ< Yipumבjf%p|ճb.w67*|pܘWN@, ꌛ a_:Q l]-2|#NCǗ!Nmo6Lelǿ?M_qb1ͤz_ǁ˄نmx8}x<1 }N\mwFߡ]^ףNR *0WU'-?xiy/87`=Aqz- ZiD=PS &LM3S^CՕɑ4E7C9Ec&B˱cD :׏ժv4uF^~/ ND] LJ$$oH{{\f/`.+ʆrJpGXרjԬ "I湨0!wH6-役>U)IyqL@dwA%mNl>fm걲%G0?"62_m8@⨾ή>G7g% }WlN>ov՝ϣm[40+AF&Inn702ȪM}wPQQU5{"xo 64s,i;)r91i4Cu율Oh+,q(۶1wzI5lmebB?|~<j~UteW=NpȶC ~Bq !Ps)YrRnϢ@QmFeаEhV&"jٝ`sWS-nn;5/Sаw_Ͽy1"b!V. I}ڶ=|o;iV<{4Mgl 8O|plW4J{?XVi*T9h6HbbiC}M`QS<Ȣ]c~De#riEDD<[U&)@^Dv_tТgk$}uۮ\4sQʶ1f)0ӃHvMX*&LO_O}yEoH/:iP$ UD6scb$h3Y؛eZwn6̋,dي^8%*0ϕŐD`ĥ6k,ConYm*RARUH /X pB/`9rԨ@0p*QXvjuj^0D@EjX1]" 놷`Ѣ q5$رBr~'xx?3H眷oe[re#4\a/ mD! #@ALk^W*aS)t k=l]=\cGo볣 })\ȘXܧVh3t7>dǜMS.^p! T6*KǧA6L vqlaJaw&TĞ Dݶ=pjK9[6l^Rræa 糴-'~0OZՓ 1ҴTWBN}|_٣N> 7h񆖡."Ȯ.d,~sCe` P#ZEdQbKA-bW@Զx0bvCgE.XbDx a6twC0͇+=ޢ4@u,m<3셦ncHZy: #"fE.=:ɝ ', e[4 ,>=.c`J;;_)^zjvKb{QPxMNb_V +GF0vyu?/[mo'W1=ycL*rf 1E|-Q`#A' 7pej'+/ޯrSXvžNJpeOvd_$y̺Od|ΰҧXgOz(GU-@jOBoZFsz{lh#Ƕ5v2mmΝ `%KSBjepVͫ"r?O_ BZfR >D+{f""0rAxiݧY,uó3gb 9MC֨Zdf>=MSc~4cX^i4dyݕdl**`N"Rt%fZd̢8L.Òl|o09 Nj1[+%e;m^ᒹƢ] [ЄmwtP&Uپ^P1uZJXBzԭ~%٦ gh6VwB_|R R@NyD+e*W 3P |Wm?sAl:E,ضʴmPbf` 1" ~j@{6\ߞ[ѻ⮡mg0$$T(CW6web{~wy/󿤩R%S;쩚,@JȑiIW(f7n8+b2ZW ?b_I]Q LTQiy ̿DgXk!5-c*ۻ1CU͸7l3UAlwyF]rh0hAff ** &j#]JN6s1)+ Pè7…!~OU#=9 l4K |ǀNfWWX`aLXEB:F!Ųb:rL81`s$uCkv֨. j|^=$H(OC#3>"w5jOk&`Ôrlur rJ~tj\RA'{[[r'%QAcjC]2et.L3u]kk+lC(} kĬTE$ul~2SP1T4Af9XPbFt"K;vtF:@ U}6}G[t-{ۂp,%FEy0J=~M/į7"񶷽mXG4ꄛg:7[p$v2g7DYKLCd4R`@ hxΩA[Up$Ŭ[>(lHf@%h-rF'!oԺz0‰0 z!Ќh,ǟ B6_,cg۷kֶ;< `~Ӂ3m\=啺C">L{#`*:sFQz1. :VNT>81j Dl[Ӂ=IF3 1`ذTP %i7kmGN_WbU3R|TL6TN2/u j~ O%8$cA01號#X+|珤L -@b:㜗+p68;+s Ϡsx]zxqXNU"b/߉lU@M3e@~C{o{O߈g\zv0gۛA^gQui4Y;IJHLUEHpaxK.>"9k/cg^ƽ:eX -@NZWPYWt#oI/n^J7hOC!S qzf&:AX@v\c&q ^J/?wup,{̈K]`{^褌tFy`,FY<^_ӽr~eXQ)I _al_v<-0WCx80jkt<"ܢ1ڀ?0 )xN0l]Æ5m(2hl.. ֺPr*xq0W>Ź+([-n/mSJUhnφD`P8^Z˯uT",MXc'\r?{,kD;Mc kQbV\0_핻)3uqOR @-`:,u*v0k؋8 x!{W~4^{j?\XWj0UxJ% k^Pj IDATjl!I! 1ϩ/lH"e$ouZt B{3x 0˅1 1Ozb?;БFpUS CݫYcwjg\P(W溊/au 3Gz{u}9Q ۻa/yZkSw qY`YŅn PYWeuÝ5I2c 8 T(rdmd3ˬcvO82 홝GFAdDq "2{f=_3ʊxJI!FN~ 0UǃAدoE C1TۈG\V#$#ޏ*5 ϟ:ٻ{b`*/P\]l[*EJd(б0`96eƐedAkߔM* j"::>q؉ebހeV&sb"R@jb&{RJ)Ḿhk: e6gGu7LDTլHd|C8u'_Vck^& V =gFeIʇm\jQ2q Կ8q%99zxU"&1YU(A,jMPQ7yV赚R,%Ή؝d} B:9*] ̄m'{tĶB ļ6Wo.m5dv-FJe QD׋h:~1ϤO ꪤa.ԑ8!';ٯi'hdjw}#'@ un@Z,R#0@:Ѳ*`ͱVv5TAU̳HecFA8 8 n%H#% ;«ez<8k{j \Q&X hU=""Jd t%E'V+ ^r bodCPh]t*Y.pa-5ULR9$&d1;Yg5-'BLh˯?Y8Y8XvINzIwa5Lyγr(Fv=n4U*rsTu!t51*@zpξۜecY+ j|"Ӌ)5'8vnyN҈htQBCcqvOhw _:8[#ڡ%BjlR!a0M,\IQvv'g=-&]'G ngl \8V)e j-ǭ =ά_*퉣9ϸ%AeQD-й2l>Ma*WVWs aqZ* \KD)3I@$YOmQ[{Ga60q-yHPQhg/ U%-!;<%!/haCCQ'PS l>uTBD7ĜTO9ĎF9qYIG 1(,HLYY!fE5DQU4\먠ubI\>(:B*@&q_حvB$NvĞ~}d{wDe$ j`%r $jE6-PrޘAYt52 ..C9b¡3[b\2ğ &Dʛ3gvlln:k_üaD4u.ux 9Ϊ3X!Qijs|nRe,`:U$CCr͙+ŬZ1z/L;X-յR"^-/_>QB,oHd#489D&o!pkkt4*%b_]-@*@ݾQ0tmg &fc1F(&]=Ag%j 9 ݱ SXBݐ$R9'+p f=|$2#@U+~$wsc.7T+#ֻ ֓rVdkm+Ѓ&`ED5 u5/ډpciGZHnaǺ^rGpv{٣{W;`/ngF^A^ BQfFC &upeRҮ`)R!{aLPyN\z{K\%O("<1(|c6;ˍ͟(hcj"1Td_~u#A!LhdRZT6(`%{`Wir"3 8vÇzGa?{>d P[iH E TylQEh>4!#uXNy$q"˴8Qiȹ1^zxx]LZ]<{?1[T@K)XTfD\QfE/_*sԗVyC̊麭1jM̸w]{',[w½~) @?^yLP.^ꉽuV^/N<a3ulN4TJB`Pqm1FyyP(7J3a]*n9}=~N?}勿᳧%8ូڟ>z#،5VbR ?~Jj B_$JXz$1&~se=1$TJ\? ESl@`ipYGwig-4]*1Z4ρ5\}sowj@, MlXm&9!u,5=BQ#]Q`6O &@_0G]Jȉ3u] U)c>O1!|"XL!Zy9q6j)?y2 熆;|v~׏;2-^mm4h)76:MB|UG'ט.FSfĔ<59g(r+2?Cg.'&fkdPWª@mb#iAY_QX*wܹ [lyh!M'%vƭnL)>ha+4 &Žd*:/}JLu=چ0s/;)lD煭 B3{4̪MKEfP w,9rDn4.6jI@UQ89ۘnkL>~ﻏv?}v"{']Ȭ???p㔯\])>#~ЖW/~xbqvj-Eɷ|YpV~⛜5*s%/CypX!De$ ~QϗH]ujΚ3&D_S"dVazӘEWBy9@]\N Ʌ ƫ^_y>_ufLgyݽ~}Ӈ|x;~ !b{g^oq.5!JٻZ0IU6l4s{ 3ۃflv253НetB7vtE: ADfeuI϶4Av"^xQ>[cwXmCkI{[qs!e g\UHTQ :P>n`sH<;~99Ԭϩ;x0>/R$"_R"#!NRbAtFX|=]WaGӟ8G""Y({ 0bTpz漨kD9磮_?ȗ/L8Ay (6_ggԾ|+fʼšsb}, =0qXdwlZO{d+hxj $vaܬJ``f UD)b4~<$tSm5A鞵N:c@]Μ9{gu { jrZW(Nnkm@E9cNL̫/rʿ_h1$ڤuLAIU^29:6qξo%;Ȁ ?aWi]Os5 5ȍ̄&sC(qwE 8#֟b0m!U\g:)EZeOU4AƽxOmvkv !*V Hzy)U` qf3W[!׬TrLi,js~̞gK|}_͋I8S7b (Aݾ~? OlW]XżJ\k|&ވi o_aMrĞ/)Zsv@}vA]=f ;h531W'>qnU i\ 2S7J8YHN8 7#L Udyg#2@ 6>r|2$ qkC;w}˧QS:9p.B3￸^l/3MD*|Hobwr}x|,] NuߍNfVDgLﷳ1C\>~G՜\4Y*+`,v>C a"pz9/N3ؼ0>#_m󋟽`wwV1vP|6 kRL&D %= L@^q|k1`([-O-9kX"v[ԓ"< =op(' OCef}*I~(|]e O.j 4:Ԙ}&cUˋ/"5cQ俪´?5WŨMՙi?}|'xIl%*ǕT}P5[/Ș O f$~իW_}wϷhH3Q$~uMQG|EsbșgdN?{-ޣcӏkfG9:{) U>/隶UCu\TK1ɁzyeT}1rfN^>a{Ճ/kflhA<\mhj0qٱuSGEoj-!23 ,ŖLM}*39=(rT5L:oƪQoATR_](Jɡ̪Z̪pSs4@*D8z-'lz{s}sV]//3@ZJ<=x_ƻݾl?=^ovΎ辬3,IkΊXD s}њ.@t2Sb}/Cxh9ᒽuTb{K`#>sj"έ ]1e$e"Ĝh}(@9'o2 Y~$b.hT IDAT#RUcC5#Ma t2rjxLMa"s%(7ZANMH ;! D;XOk:%9r`beɱܣsiBxM_ds Lj_фc ܽ߻ݨ磼\ \Q3vv}?9~v'>'X4F d-\ak[E}j 9'YTZ83q)>CM1֩z z eؙy뒼6-Z )q(hK̉0 o.ZnuK/o&dsq75pf$zʯ WwA? %xG%IZ _^*" ni%EFM­mP0b6~M&.TmάS`j<#<팍-*3+^y^EϠo"eMޓFF#ÃDݕp>6/ nFӿ<#p6#oF_7YREYx`W2EDMmLdYu  *٤v3ķ)%zq"0A,`/t60MSeCt;gPswǕ4tcW 62k מRK]!Ŭʈ6ws7 $ (ƼwmqM7r}F[:c6͆ h![2WRbj<9U`pje eW^petz*O>T؏\X$z~se*̀(]W(~ŘW!tz9/ I>о)`@Z Q2nnns\V( weV̈́SDy/(6 Z"IZ0;N,qL(݆92~͵X\yNWJ-0.+!R V^!F1*o*$aJ*$m!VUWqk$Wy$/ks&Wq7^'W*e*i)%(Do]IuM)bV Dm;Ҏfh3 Um`[?0ҩ0* d\u`ąGpאѶ728Wƕ| +:@x1AϪk#ϮžiIT){_R3a?`zW(3,}l`MqQ|9 d"ҭmSvDSlݞp!POjra_h;WFVÂ4rR66x]~6mA=VSȁZasϷc4sٔ;/ȼ#/k M:d_׫ەEfG}͌v9Kf63Εz52~X-k)P$c"g]dkolƷV&H_ lbv=Bl il4Gy>@kmmGvDpk̓Hfxz~S2ߝOa &`>e#"`8ࠢ77X/`2W~W{G$~M/lb{C;v P3@)O3ti7\WUAgsp~2v-׽="7.9{OMwIG~2q@4b1 n9y/#BĭAxC90#^^{xΌtv724 B L&N0*Hp? ߻G(4Mx$'F;(G7]yW:S]m.p HT3,-~snB[-Db1u05bj@rsˊHVb|PG'lQ"A ^^9SWyQ}+ 55W 8\F!`g>dK.R7e܋'8OnDdMa~cvoY2^u@Qs{|4Bm C.j(Eu1*c=J`b2Aj39l( "TTU)bk%Qxun #9% aۋw:ɂW=sxV&\h p8c'bk7Jp8- R#Uj="e br1(Yke\hǜHO3aϻ6ETbfh.iH.0Ʌ(@?u,㧏=^D.vp`E>u _#iĻ_M~/'~y+/\e/@%V3=z-^~`Aw(Gz]JWA5ľ3!̞zJ:x(؞6_|co4v XUsTWQ\a)i줋۠*vSt,)#mj JU ):f#Uh4 [Wiث 6ĥ] NuŢFV+t>iWtçtd%WjʕnNߋN೚T '׵ʇ(SEܲ-bԘgy1TН6u;Nu>??w'",JێZk8qE6Y:VəH@ZgUnQٯ ]UF ӕ ӎ]"b\ "d搈-٣#, oD~ϳ%w>~ .?oT+О%=?M_&GUfiYHg,'q$]CW@+%ך$VoK[SNEQ1A. b# Wh oMӎӏOO?>qeٳl.@#A.zZ^Klu2 ID nL@kad,tx<~/4kwTĎmϧ?LE^JEvl|$Bviʧ#[_EϓHB| <߳?yo#n,"}}3;sͺWvAC&HtI< |U]y֘>}:Ϫ]!Azþaиy[waGVCpzQ ytUsqE B.NJwG% Z ]6v9KDŽqNJ*qnw/e ǡ&x|7|""Jc+? 6^ߤ!;;FuM!Dd0G=h<%%+EL:N/3vo_Ni7?O?|x65Jt!&Z =TkWmD\LU$dK~}pݏb^.!Pތ-6 ߀nQ:%!pG}b_ݔX=%s~o-4B+iix+3^$zaQ%f^Z?xʞͤ-SSçv}2jK(11*M_Yp.e^!sgGd܁ mGJ4_ޙP[1W+[pa!a ŭG#Lf)w4+]$oo(]gb}Ȧ*[V\W_M{^ǕdOU=du L ,fXoN E,$  uzQ-{Irxͧ%u:x'ѐXV !}Spf + w#)~߲p|txp(ZFS"a"uX#G (J| ܄ų”kmOŢ4C<q'Co?/[/_^0_ov=zF{~ů`#Cy"K`jXZi nS &s+nJ$&7(+CАrY1)3]{(`tk @+,XNcbVT4Q,3D~}Ah.s xo}Ŝ-mnTn{##B)kBY6BqQro@sHʆɳS2`q3\qZ/BTUo-;qnOfu)?U=hOVLG2u4D_%L FCpƮ<RhE_UV7|/Dws=k}+_6$bON~wl-i#5G~BsND=r艘DklWkJ ~'_8flUh'-V<6U#.K2xK-@E*"\=%j[\-J|IS|'EnRp&p)XVtZ(`h#[/qcOI@x=|x=hM\=>:/=\V |T/sklFfRr*S4DKq$ܵp58c9^nWHY.~jeMs|)xhOǃ:-'v_qYFpePf?;BA IDAT=ŃW{b)H3~ # ΍ GZͦbJFfIZzت*0 vjAk;a:.V ,8ڵP"k!*k]VJ>>̄\+i&rbA7NsqsD0!Tg$6bbv1lPF ,A.w˙TTYuC, pþ*-f(Bc@3c9>z%]ZX^g醙|S."DH+M/fx q{?~3""z8A #q'؅cyT4{RS4*l[]j "ȹ٪gt!NO@ - EPdKy_u TCjb~%j}l7tTB E6WHPSUح`3Xb `;d]Z&޴j >#6[ JL]MyM²Es՛_|0qz³uw|߾:7ϟ?>V-3}8엗W:'P8KXd%J}>' \X)yl#}18 wJfb/@ [6)ZJ #blY5eHP[na7\u /aNY6T쪦L̞wEk0wެ|/Iq5{bV@Bæ "ǝΝ CLZ]DtLF`>BB\.uJ g Q=$hi:a+li{gE@|fTss^Qc1 fҬuͅb!"X8 Y8QZLu0zuk! @)T, prpo PSZ(%ʩ3\VmU@XE{Pդ^ťn%`9^Yi*,sgvg+%ZMe&HRaW"Mqg ѿ|%|υ 7W]a3(|jpqyÆH])::5d^-LwUdS4^vs5M d"Lu0Ws$W=FgCP]z}a9ϧ:l]36A Pח^u$[w‹{gɼ@I$>3G^Ğu[@]i;A@ \td7:)@+|RR-r@&|V0"D@&" fS#B["߹t.`_-zI?oA[f%1$]€lx?dOhȉx%ܲ`;[? _M#@"uҲ]!}F$c'h(3C  MPDdV-LwuuUVfċ^<ğ=?4V̪ ;(g˒ym6 zrE??FaωG'yi0 <\ SO 7 0_`ZED6[yL۸p k=WFmꭲm b;Sosy'AIo; c<9Db)VCd5lpz.1 t,TDq(e!׷ h- tTDAb#h<#[txx%#sMs-펞| #]y! J0rg~Q%?B'`?+*m`E.LDt%ݺTD|MK-vJ̦hZVDgx}ǣYkDbk5R^ .p .ǃ)=8ڽxp7KB߉[pءKxXT'SÑljx!N- >D8'/WO;7?1G;)tQn7J#.b3a.[֜\l_Ԫ}vYJ3>p#Wdζb֑B/Wת/_?CK^<{6*88=©yz!fv+7E=xxU8( oΧٖE-w1kl^=-H?= <Ol\wΕlTmx @R89l_›jNza=p^bb>iZ`b`(`w%\@$#pPΞqx X⸷6zb@@:{ gsaVu"x'_^9йuDKxH3P3#ɂ-( U=Sv&3܌Dj*h׃ζ> N4)' ,xzqǣʆ%\; mTjMªā\=m Q#jǸA60*}ͿYz?ˋtYa\!DXXdCD?۫G~"@K}THLMsJzϾօ * 1b..H]a:חL7 @Y5yw.ye ‚Nc"Ĥ),i<kIͧ?R%HQY&M#o$m(1j6)򶅵_p-6vo f>mw}zx}h~n4c"jVX4LٔH@A+lG`p#Rq?stEv5 ,/+S~@ /QE'n74 q?㭫clHclKMԩW!ܗwXV[K؝%з0MS(n+(iiV]ۦخ-VV]D5}4joxsL@e<f(>|F~j34@:)Z)²ajaEߥd>VsXX0#.2ynQzW͓f.pX].z@3;h ܼNF2px1fxn}I@Q^uFb搎?J3ݚ l4-8F45F IEDXN9SPCl&P: gD=~R9Qa.LB\X7͖FqXz3YzV}$2qH܏_t|%?|eOȓ>֢>_}6, `Y@ /!PO(#$'$|LK ue>W" bU5j40J ߧCyCiHئ,}ycm.W#Dcn6iTUb|Ȫ^(iC2*Y?ϞEUfIkcN!G <n϶PX^<y qMTէ vqgImrX)OΙ8 :0AXF5^:-sN%sDfMsխۋF:e^nױLYZ ""wXVCJn4PO  z– [6X8$?"M#92E4,^d<~tHcBf,]hgPEDaU3+NǓ`}{2C v3flXH yctsjICwp%ᴰEhx0%Ia8c ,\{c9~ "xT4>ӞJsS9H49}^m ` l)֨tcԢC8C"FoYd궽 3XvXk~;{7K9{R FGh8<fڄ=2Ȟwea 0_ `XPw؈#><}ŵ>l!|{fNbLjy˅͍٣+ #[#l[KvymT aF3#A;7E2;HC[)h]H$ @%g`K,L,L*1eAE|V>poND$q20yca4;_N`_ WfE.1$A^h+m- YK)Ĵoj'[6=h*T$ڥդWFM/+;(iUѻ β2˚p纱Ln ps8)ѱYfR*޼~3Eb<;_ʹ2(T2Eƺ# \?GugND-,\bQiZa?y)k/fAfOhfw FkC,'Yy5${ ~Rʪ#jw/|c Mf4WcQ+"bo\bJf]FG\U@FwxO´GV5N~͊Lu+x CnN]3@7# $= \i'!d+̋ .30J9ɛg^6_&jf9R'&C2o~kkW3[3nAUXUiz*\ɑJ`TA2K?J&3b+8DJT |7߂\ ^;l -a3AU,2qh>X"PWz̕;8Zh+G*>qG~;0}|b]9  NRYN*Pvs(\Uy¶ߏ9M[u0uKۼ28Aol=[K^q[yQyJM|41Qɦ,il 7 ĬpXp•Ց:h/˗ i|s7_6"nvp<~'_fr!ehE 릲Lx9 ؉59cEq<_dܵy{cQ\{GCq?ǿ}Oq @uGC( dȰ-,y_w'8HZA Nުޚl6&˗|f*2V=,E^-}" )7(u9($2G`Xa]PY"bP%2Fu(YVg M?! Q !1P>B? O/srxHŵ⚶قd1cb ,#a8#X8|QV:yfލrYp$ T/ڬlso`۸7"VB% Esd ΈU#xSUGHV͍ FGB*B9?RY![X Zɍ+9maNl^źwxsUq!Uf;+^bs#swts,>LBHVXvϚ@\6B\;V7[pz 3MnyrܳWy}8OJ]”V1pWo*BUp 'A;&]PV5f3QǿTqMX8cLOiWKu๤ .U_o7+q"Co۞|͗^DzW*}㟡6[L˗yHͧȒL100֙c<{S@$}&•&1c(;{s\ ûEd;B֙ D~v":\%c)R(-TTC6ݘhg"F>g ||,NX$v~ĔmyT0*W+@|UY8gKˋ,u9i>|x8>9N󤷊m 5ugt3dޞ[ O'̂f rCDt%Ŋg4N;P a`UbN;  KgsKOBUs( Ru=SμިpHnf.?%ŽS47RBzx?&R\mof6%U&ŚM7iY@Tغ|3g`g̼a5~3M6뤚8!O+3γF:AwgǗCqO?Oqmy߻~(+o\;EX%M|9Xw偐 }<$qJ 6*`0}UQDmE=t2ߡlQ˖wdvKʐ 3f7ƀG*MǛw* # 'Ɂ+fͷϲh~%0:9HpC&U$1NVB̖ˁJc,挮&g6r0Nٻ|;W]} эi^l.%ي4z!ViU.5n16e{O)u8/M$f>K!`ER/~T_17ԙ+̌+$;hQJ\aF aPK 4f!!Xd>FcrO⺴精x ]wc' ~-/?h0ڛ,4`Z.Nb[p\z,؉T0~tOm"y{k_Xמ W D;>k͵鷯?<쯈iyhϐMEa *DѴs|Khdej߆g`N"@n3aU tƅ$EDPՌ6`8ݨٻZ6I,hFh4eN, sHf3EB;*U ̮ٽӬVm0 v*2PSB)Lμۣ!iF]%g̃ie>| ۞5"(`V ^j2-$rDWfA{PWƅ W^K!}XB%r餫kEuSmVe8d,Z tV&QB<4B4 ̪MG.4YL䫆cv;ۢڀ!y5<92䛝OMܨnUߧ[KE.ZV` =,3+%Aޜ+&Xya[u<(5s]=t Ohz8\P\1zXqf^{+Ͽ/s! 182󲟦=؅ߋgC0Q!CbrU.AE( ou1kf"}f́GuPALFH2vo 7;3 *"j[jXijYjl2@+GgK ,4 PojM=:ue1@Lbt9. #`bfN5.Qjp ,of$,.A("(WC!l,4u.EH8̪ϋbsd$6K<\ukd0RLqaNDqm(عx&w׻ hq$D9*d+%x:݌ F,-ʆpw4j Sk{P4 x}3=+E1-7OǴKOt$b4f(N"a]sL0YUTj, c3IE|s`g1ͤ0$E\:2 4yCR)4w&!%A!|1})-;9z^4<@R&L^ ܛr5{|BU453<6K9sDm.%tܼš8Ϸ 51`rPu ypTzCz/Y.:/{0&7ju̜@a qun,9p>J_Z]MsؽCUm38jU4J.S!rndrzGm{l"L7mEFDM.P1lz()bok wXKFjaݣFM45qąi <=>+9@N݊Lb(ʠYPًT\S:M?嚆\[U'4Eܠp6aC̉,6 _?1-Y>mfp[>U_T.]lU“Ie1V%rё&S24"G5Z)ʅ#DӣJX5S%" ╬CN$,ӜD 87H4WtA6@i8j k:gofԵ)GlUq-M,i:]tW[%"9T{`]}c_^'BlGdzL4U[Z=7hr@nYb[>ǖn5 n^݀Es< 1  .|zRU 8$md7U_1&P|/}6zfdϧ`C$.yV>7*&.QՖմ,m`Vx5 !O tWkQNPTIcsENR{7{zvצ7X]ŵW7^! ~ńLіSjZi%xDQ=Ak?{H⃛H:3@?r*m*&4vȨ:,]m!?bgߐTu0G\S~ "y(Lugj}V)ꚜ,2K6oT$@,va@m^,KFVQ( `K?>2mFx%U|g/H7]%x\N8saRB T( 7y›DUGy131{}lnq%X- "ܰ#im1wwY ns Ԅ*S{\)k&ciGc+Bn`]gywG[S EBT7Хēt:86Cٯl$u}|~: C&L$"DIsXF5WHw_ BC/p|CrM,h[80fq })jHH0{:dQ糧!<ͷ {3n8 "V#TXXV!֜+7vr@NL-Dހbl֠SyCRhH{w`<."R9?TYDd \%$DWEzB= d.Q##StYЀEIi_8P//x_y ?wwh-w^yb0ZwM 3L4Π O@6#xA@p$??qx6՞K@zjC؛S) U2poU= @h6Y|x mOO"Ibyxf>a6î?麤,$jWj *u^ᰖܯJئ냮3XD%CJhy>Q*X_ㆶ*41淚WF1kAU IDATpiT302k`\*ĕAf`VX=`OS=q-\yVLݛQܼo`oKiG<ҩ$7kU(S睬T iclۨyX'{ќXMȍ|5'fI 1 19tsv|ݿũh"#~RwGy|Ʃ .U+0SkF-S,,䃑D HHvwf[@j:dRj4=NÉS NY>pdtTͦ{Kg5A1A!~w~8ͅSx/+3~JE6e|qa{?37`r%'AE& /[ގ5k r xȍ@pR!WYf]ԳQ#I!DXD~(PfENzgNP'^0W7S5['9ʮڋJ$͒=I̞mA4*eQP3%7/8asqJ-%B# "JsOLHͫlMmڏl*]C1PaĤS%RRǩ3@nf`!?A:vc"KW,!beta~|6Qrt1Dt(-Ҽo/QI {Ts7Kh]fQ]KPʂ0cJ s!߳xM4d>n :o @avO\M$,3F{[cIfްlM .5R-+vģn[~T(Pm=|0z3WC5(=Ζ5<ĬuZA7"2!Ll}}X83*!l@rbYHU;3뺮D = Ș9vSRN):2 \|WJ21X66~G"uB,|@\Yza6TbL|=sy)N5Gnaz_Ow@wЃ`|ɱ2 ɀt&Bq2Dso}Ki?]&7 bB.y/2^1z;[A߿|q$6C@KUf؎ZaY8PuA7Ӈe23IR&ۮBiΞ͗X.+#Bw .AD3܋n{ + <5Hx9{4ӴzW `*䐤D[iJ2UP Y8IV. M>I0wZWj+zX;t^*aqQ (Vz׏WS[I:ʃB\8 se+mCPaйA [QFfol<ƫ{E m"TU_H_"~3e" 6$`7p_qzêH*є(UE$]Gq Xslm)&"7HK{OQ!0'؏j* v u3 d7o`Y]XjIv.#u\}  #{[wo`YE$B4Wn%'ϾijY"%Fd~?^߼~ߪxO=.+Ԯ"oXycY _XzIA&z7w̲,^]4,\k@}[DQ YL@owP6";<^"@B ]o 0oEuAs0pq]@Ya (@/݁""-4=+/0agyUqbB;_K˶$SfãgRٌiLW桸CX2t<`xͥY|w*,BUBvoG!8gwUC@VȈ($ٜns@rTlSNAHKBF"3pRG_//2Ҩ/ }/3Y[*:]1;.LOa s7=[suBs  s%ДĀFIoiOE)TC kfND$,:Y "fiI l u*6flL)A7W?mIMO$9ڽȞl}ىLFX j*Tx=;<75 R@} 0(3,kI{T#f2-ۭ1ř28E!zy-"R4}L d${|P7kc4#ND.:@CQ%&M *d%ģ)=sCǠuqڸeIwC]VTmd$y*D0:hh3Og014kL2 _c}Q"%M&OWUB\rf x(m뺄ʺlQ^_?|uQW49͌;@̛kKT1Z$W62oS\z{m,Lȓ͜BUGuh Ky;㠎9:b[Jpw77" r/pC# YRWD䒡kU]o[p"XjԹ+A`5 vS) G?@UG{.mz\-quT j&M`DUG#hQ/|Vh0bx+`jwMIq#2Wie*4T+_h)̆ƈ7Gx4 ܂UtPz/Of͂CKO$(xBbk$=y=_zP0A >~pݖ^yo_HA۷^}Y8zf'+6Wby5>@D;r66]WM(s%tfH , bL;5KK.VupNM@ՁnSA)&L ۦ5t, Fyhkp9 E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~˲jĺΞ>ʹ7J 0\|}BrI6PG||Ð*xg9$D[!ca)@ jBÝC㭁C";8N.CÊUnֈ;[$|#0)ؙ !)9g%kωOGkQr  #@M>}gW$j`p)A$(6]eYt< ФՁa└33b_l tm#" H|M7|cȖ**ލ e77ɷ-B>TywQ ̔+#mpmuݰǛUW;axU /lIѤB9՝J"Dh,hO"`jv5۞{4]H-z{:NƫyfbU \:ܩs0Pt7`f >ptEܬQdF*E:(`b:v2zn S/㹚CWo@"gh09wb `a:5Z$ӐVXѧO+Lx8rwnmc{"zIq%d?֑wo:x\Ȑ)axXnzy !xsby^4׸8[KHy{^gsڞը< J5fJ77C m)-Tsޣ2Dt)\+&Sȉ !\1JЌ mmR/&|\wJ/^9@@Dt4&jm^q=Xη@X{~X=(l&@_53O-5Ry+ {qUyXc$vMpW$x߉Y@eyзUz;s{V=epA* O9BmW#-'~ "K]9*%궩Trbۋj!UI?|t7i#Pu\x ,J=C!$rꪪzY H-~@ʰ?38#gSÏQvwwhba9f3Uȉi<JR̺YJ̈́S'H z7Bہ;D "ۀ[*m)G+WJ (CJ͹u6ٚuo@i/F623d7GxE|A‰ 2?qv{W*hX]&deVQ&`wsmŒJ[Bc~p%TQ& CXsīoTWւQ@Uc`LVoc*-Bpk2zUju%NQ:$SaFj5䡻[^@ k&%\ (ryl@g`bs].Z4, La2 a,c\fmUS"O~|Y^Um~ddX,C`ZB?xH>ǟ9 o7汍HB#*Đכz;[3 i1KܓC"3g+JycjS"[|Ç$#}gfߟ?sYutQe󲘤uI$ӛ8t晙v:E,˺]7$UU7w:_q w;ˏIT? N\;X"gt_-6peM5/~Lxrɸ"ӸrtEo+״#;Т4:)#m=d`,K޹d/i,G׎RݣY!h,Ϥتq̈́P?\(4E /ak#갦QCӘ8;_,|aA7C^_+8L&?ۗ]Aŭ=/,EBC]9.>-tp a#G !>7(c#7wVEyTWr f" )kUR.F @DP}}Y5V_>O q!&|ɚ/_e`EQf-PcF\y=z6m@jNjH+H1Phyaщ dp4=dz0*w rU=QED"E#]h;3駝2;*#F""F `xvd; ]p1@"0[UU8t:Ocڟg47Xж!an۾nFM`0n]J|zVn0{%zp)tᰃ_vaԋ< M9 z@:&ܘj@U'B˝l.V&5{ݡ[S$i8Dރ95'⌶|Wpff~Ƕ;zU.UpT1 f+Ma^QZ[[ @)ʹЫj8Ĥi l_텧oO%$[@p G%֣Ju^nY]yWDu:U0"#%ofV9 tW jeDP(k7 B57Լv9WbsDWpuAjq̄bBI@XW z;t7ic7NwmbҒ@pclr -ՊD+a1s?@Kxi.Kv|SV;ew.h52Ak HLIbQyvꏽ1)hT?l+֛'67_<-f98Xyޡ4& XOUmB+̒V(0 sm -Y_, k5Dz} g$[&D^DM9sw0X] JeN S؞5媕AD#` 84e =UšT7%ȸbmX&*eQd(x9kCΓj8nD,jե5ʁ;4V&Nl7CLt"U'JKw eD."]˝MV\T[ZTU}rj$+2k q%fxs: '? }w88b|dj0038/v}" O;JЦH|ݒ+58}'܌ZZ` O]e84[(7Gմc:𐶙7]*5SoX۬cśhp@'+*a>0Ę(+"4 ^T3ق|[[D&HʙwZXxLnW]ů+XS$bT6'Lil{\wⅎc:@̋NweTsLj],*2i U#QOƎ IDATH 1ݘ;jN:xl(RlX~ׯxu+kqz3PF}ES'/f^fU ~4NF5J?[׌M! Ug,tdǎYTNYdt:77baKt̞~ߧGH莃tl6 3M 1?^X:qf"xTwBi+q{jƙm1_&Һ3ApqSF@y3/ێo8e_8r'#x:YT$k'g]b}㣲YW#lsۑo{}f)I+73T l{j `{3帻~`@_^^ֵܼ(SjT+zF՛vKLM_Bc]療AdŶ#14luq*ٖ?%Ҿ(97ATtF<*~ej~ݝowR]#!ZJ!VtZ r'nXS`0`hQ #.[\mZ,&)Ŭ8|?[3_zH%,1~koWDu:۷TuWebH<&!K4ϓ-:gمYbКOfcd[ kLeȝH׉t̟pNߞDA%ũq[ӡ/Q՟˖_Qk\5,[n vCOE3=|7밸]5bw j5x&5/7 U`BD/nT،4Wؓƥ&UXcVsT?bEBQU"c;\o/מ1Pl ?(.KՌ=)6/m}!8BTCv(fWBx-8NŢ˻:.n*NV 0(0JŚ){ +Zr {IW чLT23aꊛnm˦'>c,,.s̭ V\ww2 i/3ݱ )\x΅WiF5sD-M폁AC?ЁϿ>mp~|y27o?c:OOe %Q\q_b ؜ NNj10 iF糛W#Сݫ\[1˵#j!MS2~Q%mV-v<kx!^(Xݻw3ax3]F V= !7Ht/#' YY;[l \x#ҁm Vf:!tđ+.џ g>#bTFRY8Wv6~0e0%c5#Nͳ"^lXŗ$qaJ%W-;xu?r|#ف!fu3B~~ņ~CLOgꆡY# _~VT88*@'3 ! 7ߞ?~<9 7N߽韞Ǐ# a0~}3L:;2]UxgN$u0k?UttUa{<1[uBuu >aT&`~/6m/7oH_t_DZ;Wa%$/?w{9?~E:-k"}UpTjΠ ]&THZT: MKPm%'%ONuVH ɴ@XPsfbRY⃀^@"'$.2yb5:v % :@",`hwRau/YP6`GAY 5ˆŝz ] pJyb**^uw}3Ib=ͬKBT]y0k|1b2u>~Rd&! vpyIKl$ĉh+LC# dPb>4l * w#I $FFUYΡevܱw/,22j)U ŁȔy q*LI~6}  ?<9`,h(շ}λn',6ՒZI׋t^Y }L=Q4M|]9l\U p=ýn۫p!YBcН14ԲtW//PTҘ0 &\DUHMA0ۥ4l YV 7^x.4|q),! !8Hɼ+E@&Oc}a|jF$p悯|,1AmA"?.-m͟n1ٟ/߿Kq(HS0NVD3yE%ee g9y~v8fS@eI]4U|Wr3x%L4fu:&mfZ*(3./u̹ F *$c UNT˞.Љ8]$`\dZ5k>ސ4ݰ\EjT+Uy*3sxwAsؙջDRjyFHȕ 2$WF5Sq*HMUmNm)fѥjV+>Mi] ?jΫ0R[F|߶rZGj9qCDih+[gIi& "rB|@zx v_:1d|>^x2odt¦:ٛzv8on3*uOj@_W;tnG=%f~'j?//oEȲo~q)2w5:92m ^'Z>mK/.ۿ1K|f{9Cn曯#aνm.]>,}'5 řa7DeTr4#1Cmj[g`-L \K}yl:cjVDFbn5%Т̅'PQI^Z1{T~΃s+:hM/ (AjV(h[q=Q)3vgiLZhY&b%NW8%nj9?\h.ZpgLEo^\gZ#kװZ:\xyzdeCFGԆu0DIݍbxL;Mu!JIZE[i+~Z `y7!`_ۿ 7vחpx<Ό( 8߅J-q T+*p[Ah``-p`t*@Zifup& +g0J-s+7}M WJLF,C nk,m;ᆬT/:~sT6>ϻӉ\ s{@[pG!-f71OXVKi.vdSuV*eԚջ>uRʴl9$Unx`Y1ַ0pSff=[<[]f0)LҢ1'qcc]kgsEy<<~X8~j\-tU/'M0uAd8wxH) v27r0DN)h8>zrօ "fibݹ,REJZ0SGO= Kp+UW}z"8;+|<.CqlWtxl_z/wx{p8ӌzͶD@5'.&]餘*\-w;P[OBz*Z"q/v-=Vg!3v¦CY6+]Srō8A A 6Øwh#T2VXsNR" g\"tl&sZ+2R)ԌU E؛ibD)Q&#RT[R05 1xCDRU-&*sb)MjATq;>D25OhiHQ[ezVm7fyld&T|-u-կU_[' mEq[ &KpɁ:~`jeV#1Z,$!@,fc u}G1 fUX] 8)H?.mGb%v틭hqw}!xw4u];͏7)qU6_aBCtjNTJLXeQ~Ln3'v]qm0ǘZjy"FaŗA-hќZ3)@#}VLՓ}զ8ׯv1<Nǘ 0KISza'δOߒ%R1$̕[rdZK>yT~G-szj,҅:&*71ɲ0夠P`t4EEH62cTɨd0xf. P'3p+TDfPM - *1Y)̧礡>?D&t^^6-aS(EGFNP>uNu~d*-_5hL'&tѵ oHWZ^i) k\xy(}cCh635Zr9Z%ՉW_kg6פ!q Բ4}Dps___H)}ݷpMU,L5/"irZ`+rvղQKRdV*=3]qvRzӹ!YĀJN$pJTn ira<Ķ NfQ&.25˅@ 3c׶;F6VTbfժ PCɯ<1: lr'ݓS֯@i"R^\J5eVq\AnOD&-k+yR*8nrRppWZkjOrϧ\UΡĔuaNg-v`.,I귍/<~m4RLvo^]zGlqdq48&phF9[9,GV|FۍV,V֑h%`D"vGF45n6ᐢ&ut]HMY,U][~pZ7""\!~d/Q+3`R}8s(S^ԛH!6~8PbXoe9d_^T2Et͡. Le9s5""1C1f9fû_Nztxt(l{ STYz8X@Ha%>[n C@ i8oDϨI( !Ek29)e/͛z;e\|?8B%d1oP>2v#ڸ Iw"6Yy.-iuSrH]b7tȄ ΥmyBec瀢K3oo6e?d8et5[0y! ɣE5 *TJP:vWHM"77`DZqA 0X,-Z!T9 <@PcTo@-8w/z4ҞABRP˜490@DB M[ԕ.@аPG)RIo jѠ/ $(Sj 8S!^8)"p,0ɚohD̎fBPQ,փxg)Sˋ|2h2bf弐j5C.M[s·9jQUU`xXTx TT$$fGf}rSi#QXFaqUWРg"?x3}G_"d{_Uz,fHSUU ;+ uGoە) K[ZjtmgZsPR,"xÑ;Qb('Pv鸛 @CFaP,/Bl)lIjdD<& pxArLF^Ѕ_A],_ <\@XC(fف. ?Jl!xK1}w@SGyBd64Dl e!U2=SgmzctCt/ A}Â'PIDATz\ynyYf}̕eQ|6xTL&b yõi4;NXy=LQQG Ŷ@Plj/YUUGgnUUc! üsL% e6bnư2$| |ƩvʩZ2XHe`\O&pP+ pv\kҰ?,LGeY GsP"+u/oeHUMCÂ'LBfp\73;reQ0ss\WGUUU1gs)5Y]<`KU83 0 s.:Pv66(\#2g]I'[5B`:VCICAE8I]emQ" <* c>8vf{YWVFU@L]ᮈuyܘ;y׏FSN}Ff)c \B+ΔS DT*΋#E$ne\87 ex u0bu5kfO6vyȦ詆v@1*ibTjTrXB39,J|`(/RTVojae,Ҩ-V<,rEYe`J2c!9넏j6{Â78:t 6Ao}:c}|Htu1y1EsU0Δ`jS;tD uYBR:.Q;ʰM=۳[UW39]E:p d6obBdN˻7I`~Nt"Ꮤje{hSD́uBk52q-"fG,kܭR˭m݅8AT-YeTcgVјB4#HlzӟƒG 9+S>#[aD$ su8s]?İR)ώQ&uu&'"AY*cSXH31hȓ?m CF[ ,L xp^eI*o"Gaü>~[oykag!,ROcP0+szs(}hDXbM9W,aVF Vf! -OxK8FE$eTn쭑HJ#i."cnW=G|,%(0Sj뢺:~leo<3{.ZS%C8$B!qF"sZC%RL[Psh;D`+\ ̟erD1!ss00(s @3;ATr.ڔfiZY=?LĎ}c%vVΗGY( K-Gzޜ0o8 s`t]z4(PB, ‰!H qY>֯pv-![tp2E9-XThÝI]{^FOhrC^.0-N)kz^Ā4m /h:拑" 7K;F?.ӗsoaVx&~1 5􏻲mw}b7t}Xs a{{2}sAx^[ v~ۥKq^ԓ6׀R=GO9U|Uv +tE/=6<ߕy+T{7S6o,Kq=$hUmx u~w.2ҩta{x=tpSN1(gɣ_^+Qࡰgvd6 a{|kFۋ"P9y8fxoy&?z[\&^lcd0Ajvw_M&[~!Gr}5 ND;r?esoLx?k.W!"Sݽ'OIf| o?uu|[&Bװ+O* A5}x Ï +Feo{[d֬0dž6)cኑG ~|}ەGzk_y4/"Fx2&ԛ«Aͫ740>[sd6ۿX7^2/ǭvnk7^7^tV_}f{c5SS) 0?ɓqq*v[綀;:APϴyS(lMp)_;G OǣyN)=MM~NݗQ_Onժm۔R{ߧϻϔo)i?B۶l6R`i_0@$) I D:Xv{87/"IaHR $"IaH9WnʲWK*pι:>sh.5<ҰugF{P+}<8sth' +^x"KMJsf٦Վ?O *—k ׭ï)]ف{^ /?:Q-W]|کb>'r1Sũ֟Y19S+nq{džD3@^`Ǥ$"IaHR J30@O)z}jUhIENDB`Dd <  C AbdG*bK4Pc@i nn8G*bK4PcPNG  IHDRPgAMA IDATx/pH?] "+hs 0ha4cI͠(hj5( 9]-.vetYdPZh@OE,;l_RRwY^nkl_he[Bmx%vakɫpkE,c|/i?dyVPFb XoRM6ۍj+QHUFxj\m4KXQR$:VI΋} o3CyV Ͼs6XܶeN[f?nvN97y !&1.T?-M958 =D,VFeP0ʩ9~-Mڹ wDm ]M5iCh.Y8*Y&)pae梹Y5DMȣ¼ȹz;ӳB ^%T=~y6i Bֳ61f>V˕C^L :0S%㶫UTvuZ%X罈2BK0+ )SCf9YCOo:`0hP\~v0QlE-.D DVxR[:hNyD(w{t99N(3b)ɬdͧ]\%Vdt^p#*LQ-9iCژS+ϥ%3,ueYV-Jǜ2.[tHTZb/gFH*Vg1I&ĘPL~O9r-g19IqoTIE~F'x E%ʮqV5uZVo;G /lVx sxb8&;OT61<=!dA"dA"dA"dA"dA"dA"dKev,wd2NߝxR뺦iV0;g}+4F2>ֿ_l|7n So `Ri 4VǪn U±S PXh}Z{VC%%H dTey9Ty)FS 7n~Y h5}PD!/ shC)AL^ݦb~y{p yp`)!ۈEr'zoݎn[W~x /RL1F_Lqҵ%TǞ HX2q>9GG^Oq[B=^d{̢gղ>XpZ[Yc%"6TJN YYYYYYp]w!@NߝZ ̮ [%X]srimYiimJfB,H[,H[{>6d m=aY^{?˔`&悴ai^:uv6gQ5gxwc~u:ޔmЊCzB׵ƴZ]+:* mEsvv{}}}t4ǂbee=L 56-1/:s=u0 {KMy\JWp»ݵ n޺n훷лG[u 98:(ΤmUPXQt>!m޳Ks,~ptth`,innu?FO{3gGڪ,N>?:mhk6<4v c2 s^\TqܵspX^JU}auM3v㋋suk`hZPLRQ,/FkZMuO3?i}4׀pe~\oҿokmb Wqh|G}/XMx`vۻjRSVAȂEȂEȂv+jv[UXQs*ꚝKkJMkU50;O$dA"dA"dA"dA"dA"dA"d-c)՗^ ѽ8?H[Zf;V0)L*{vtz*ە991:91}6>:glxxLouB w-˪`po_̥+*52I(,/ի_]5&?6l QaߍB[Uv䯮H ~!nN+&, EcU ֞y%V)(Cv|z `psȐ衲3Vea9TaMbK~Y9 7(] c.bXnsmhl5[@1Z-\_FOKAx Kx+ E11mʨ0+!4&Fntm@xh}B6*V>vR:(&Mw~,aDB*ױ! m! ! ! ! ! ! ZۭBYnUaEaRcr!Y-ǡ]k˲h*ZOY<-S1 0d^$EȂEȂEȂEȂEI[Zg]!-aTϸH[|"Y@y<m'Z4*1Tî%sO /bW\Yx~-2śMɲ󋦠ͅm%76TɔyGsc,yH|ֳ3jzy /kR(/I9-\)(aÒ /WV++OΣtڊ=l%f+V4|~k)>YISCĚXNڟl@b)'7<*كNԙJq{R̋_欦k$!wX'573;0V>BTWl. LaIENDB`xDdZ y3B  S A? 2\eZEv]v `!\eZEv]Ь@::xXOA~388φ\@DKH6R$$hB&K c,,,imCĘp쮷Kf۝o}3 RV`E>K7eR=%D @":@G )u}X9Fy G)ΡxCwYVpp%U^yJtY&e,W (9<>AR7q+9h}WHǮyǮxf B4s%EUz^3.aKFt1-`= p[b"V{80؀ﱢ )P75kO>EIwT9?o4^c/rr ʥ2' ]*'Iw }_FEhs5FPqT/)Of=,)\c֬8Q2ԑ4v]wg\׺ws֨rϺQl2nE ^-]׭>ieϰT-DncjOiZYOcѹ>HVKDRc''V|GP*tUSBkZZGNn0ݠxAIb7 &_QϞﭡR*z78J1Fls[ոW8F;Ѡ|KZMAftɧ14#}4V+Rl7"#oam^w0G{Ժ a WXDd(y1B  S A? 2S2BL:Cʴ /z `!'2BL:Cʴ 6H1@::x=lE9ʼn1a-|QHPRih@IIXR@$$|fvzw|}{7̠)<}`⛧و.KE7?.y <z &nJgҝﱓ޽Zmx?^ՃVycm땍-~0yCk돕ut3:37͊ߋO 3z [^5F ?s+hƫ+h9!C+p|NE?Vɫ%su硾KJϠ}_$ }nU]>9_SO2HVIzytBzԾ¨uh)j?/җI_DaO9_gp3#O"OgI旎I^#e k=nDg`Vqf8w ޯͺqĺRLWޛZY>uisp-RP@ba?>^n>JoE3Ȝʧ'D,y C{恘Uy}٦_JΡhGVq;9TtCŦYKg|,$7l&>ZQl/=)D# ڡ3sdGb.%q<-;y%d폎)C~j:|O㚽C-Сz9RamSd`*;옽MTXdGZXW,q$+x>y4RɎ:mr%D&-My${ d#%n9"^| Y4RɎ9#[&4:2'3`$=<$;Ndw덯Ư6iZw$;Ndw=i,ӻYK5x"qoIN;/B Vf?z}#ɦ8~wʚ{e<= SD0h>xڑtJٽXwƕEٲk(V򷭿iA!.mn_yIh>zƑLJ>/YOΗNDݼ?}DyK _Ref437026731}DyK _Ref4370267311Table&pSummaryInformation(~*DocumentSummaryInformation8-CompObj2j3 i0@0 Normal_HmH sH tH l@l Heading 1<$0<$d!%d$&d!'d$-D@&^0` 5CJ KHn@n Heading 2<$0<$d!%d$&d!'d$-D@&^0`5CJtH uf@f Heading 34$<$d!%d$&d!'d$-D@&`5CJtH uX@X Heading 4&$ 0<&d@&`05CJtH u<A@< Default Paragraph Font20@2 List Bullet  & F21@2 List Number  & F@O@ Java Normal$a$OJQJtH u8&@!8 Footnote ReferenceH*@O1@ Program CodeCJOJQJmHnHuF"@FCaption$0^`0a$6mHnHuZORZ Definition Body$%d&d^a$6CJtH ufObf Example Title$hx&d ]^h`56OJQJtH uROrR Example Body$h]^ha$OJQJtH u0Z@0 Plain TextOJQJ.@. Footnote Text6B@6 Body TextCJmHnHu8Y8 Document Map-D OJQJPOP Exercise Point" hhx^h`\O\ Exercies Topic$ Hh^ha$OJQJtH u&)@& Page Number,@, Header  !, @, Footer !,, TOC 1!x 56CJ2@2 TOC 2"x^5CJ&& TOC 3 #^&& TOC 4 $X^X&& TOC 5 % ^ &@& TOC 6 &^&& TOC 7 '^&& TOC 8 (x^x&@& TOC 9 )@^@(U@( Hyperlink>*B*22 Syntax body +^DD Bug Repellent ,`5mHnHu0O0 Typewriter CJOJQJ@O1@Exercise Heading. mHnHu8#@8 Table of Figures/6.. Syntax Head058V@8 FollowedHyperlink>*B* 8O2!8Program Code SmallCJ i; n^E) GSR)A_٥ _#K<ʸN/>mos0v:b7 B()*%-](*< D p s @^_ MCTE_ !!"\#A$D$XoNBXoNQ|B" !45   "#./pqlmyzu&}=>WXST ##J$K$&/(0(((((((((())8)R)S)})))))) *N*O**** +#+$++++,,,h,i,|,,,,---R-S-d----$.%.:.{.|......//0011122y3~333344&4'4/464>4E4F4P4Z4a4m4n4y44444444445555555e5f5j5v555555555555 6 666'65666?6H6N6]6^6h6i6j6k6l6666666771727D7^7{7|777777777888888888888888888 999999/9H9I9P9Z9f9g9h999999J;K;E<F<O<`<a<~<<<=^=_=~====>>@>k>l>>>]?^?l?|????????? @ @@$@u@v@@@@@@@@-A.A?ATAiAAAAAAAAAAAABBBBCBNB[BgBhBnBuBBBBBBBBBCC"C6CGC^CrCCCCCCCCCD:D;DFDRDbDcDlDvDDDDDDDDDEEEE6E7EmEnEF FXF~FFFGGGGGHHHHHIII)JyJJJJ.KKKLLMMMNNNNNNOAOgOOOO P4PaPPPPP!QCQQQQQQR,RbRRR S0SMSkSpSSSSS T/TBTiT|TTTTTUUVV0V1V6V7VPVfVgV|X}XXXXXYBY`YYYYZDZcZZZZZ/[Q[[[[[[!\W\\\]6]d]]]]]]]{^|^^^^E_{___+``````XaYapaaaaaaa>bibjbJcKc^cccc-dcddddeIeeef f3fXfffgDgpgrgsghhhhhiiikkkkll%m&m o!ooooooooooooooopppZp[p\pppprrr(sisss/t4t|ttuEuuuuuuu'vYvZvivvvwYwww/x0xZx[x}x~xxxayby{y|yyyyyy*z+zDzEzJzzzzzzzL{M{R{{{{{{{/|0|5|{||||||b}c}}}klāQRVWzabNO҇(_`ĉJl 9OPË*NzڌSՍ͎̎ώ%'(&>Tkړ2Y~Ǖ>^ї0NuȘ͘Θ$fg͛ΛL)]˝F`ߞKw|Kv)4^ǡ(acd,ѦҦ8`Ԩը23?@\wcѭ?qHch(]bҰ[\^_`ܴYZXYu 8c׹D^޺#Rcмۼ!SGIJȾܾPQ 3e>a />JKIJZ=>f3IwD|-l,^jkr@v!@l+5=>VW};<)*+Mp3fUu 3i!RSb  %<Rop<DR92|/nQRCuwxwxVW*Zy49:wx& *+Q$9W\ ).01N}*C\(-W=PQ: ; K   J K pqZDl"l/m 9.Rk SXGIJ(Nh|}jk4 c    !=!!!!"M"h"""###Y#y####+$u$}$$$$$+%h%%%&B&n&&&&%'f'''( (<(T(~((((G*H*J*L*M*r*t*u***p+q++;-<-}-----+.T....//0U2V2q4r44444455W55558666 7S7k77777868p88899v999;::::9;|;;;<A<m<r<<<<=I=N=x=====>J>u>z>|>}>>>>>??@@@@@@AABBBoBBBBC6CPCCCCC(DSDDDDXEYEiEFFGGHBHsHHHHI.IbIII*JXJzJJJK KOKKKKKLFLKLuLLLLLLL5M7M8M$O%OAOBOPPPPLQMQuQSS@SSSSS#TNTTTTT"U#UVVXX3XNXgX}X~XXXYGYbYYYYZQZZZZ['[S[X[[[[[[[u]v]x]]]]0_1_Y_````a)aCaaaa7bcbbbc!c"c1cccpeqeeef=f\f|fff gKgggg?hkhhhhi2i`iiiiii&j^j`jajjjjjjjjjjjjkkmmn6ncnnnnoVooooopprrsCsrssss t+tktttu\uuu%vEvnvvvvw>wbwwwwwx@xBxCx.z/zKzzzzzz,[\ۀ܀ʃۃ!".<M[\ftʄ˄ф  %;NOUf|օׅ_`&'Q}ċދ/S{݌-]Ӎ؍ٍڎێ؏ُ֐א'Ga|֑9lG>?ߔ,Mm֕ەܕDE4556DQƛ_`y7r:?Wtџ;}5{ס05i٢ޢ467KLۥݥޥ78שة]wѪ,U{ӫ5SA[\Į"Gyԯ BGHAB  12KLa{Ŷ߸R{ڹ7kԺ/q4hܼ   žƾܾ&;P#f>_KMNYrGZ\]:~'VWX]^n3IJt >2LgUC~B=ingh]^Q7$SUVXYu!Wq;CH_~,XEp >dN G_ab<`(-a5Tm9g(-.>/0&'=>m&F(-W"R7<=M@AWst+Ko&RW1_<mopKLMNOPR  W      S r    : T    G L M   &Y}~OPH0~!""NTUVX  efgh~Hi"Ca2dfg)*nA B     !!T!n!s!t!!!!a#b# %%$%_%t%%%%&1&6&R&i&&&&,'p'''(I(q(((")c)))))))++,Z,,,,#-S-n-s----.?.^.../B///0D0o00000(1m1111.2X2222334B4y4445f55555667+7X7Z7[7999:%:L:i:::::<<<<<======??@@@@@@ A ABBBDDDDBEEEFYFFF'GiGGG#HbHHHHHHHHHI"I#I.INIuIvIIIIIIIJJ&JIKJKSMTMpMMMMMNKNNNNOZOOOOP>PrPPPQVQQQQRZRRRSKSkSSSSTBTGTvTTTUFUUUU6VnVVVVWWWWWWWWNXOXQXSXUXWXXXfXzXXXXXXXXXXXXXXYY&Y'Y(YfYgYhYjYlYmYYYY$Z%Z'Z(Z[[[]]r^s^^^^^ _F_v____`>`C`^`}`````;cnnnnno5ouoooo?pYppppp6q7qrrrssHtItjtkt"v#vwwxxxx{{{{{{{{{{{{=|>|Y|Z|[|\|]|||}}}}}}z{р+qˁ*_:xͅ?aІ,_*+Pۈ܈:_ykl{tupq{ǎێ./0ҐӐ'=XYđ/dΒ!VԓM{Ҕ8\̕FĖ3b̗7PU]^bƚǚ?y˝̝ϞLƟn*+ܡ8]΢Ӣբ֢[\56ĥɥ9>?NԦզ}~,rsߩ %&Z̪ 0c+Je̬Joŭޭ NPQ356=>  .  4jCƴ!Ch͵?]18Zxȹ 7nԺ;o45DGH0Fbc5i X|Kx%I5_  ,FiP_#5Tr(fvxy#$023PQa$% @VXY./gh?@P=>+,uEzZ[$%;<RS*bde'(Fbxy BxFr'Y^ :i!?[`bcXYrFOBz>QVo.wyz c$I~O AIp67LzFc.;z,o35NOP$%UDECEFVz{i j         ]    " V       Gns P"BK<Ak ]^uv12OPgh  !#!_!!!!!"N#O#s#$$$.%q%%%?&@&&&'''}(~(F)G)s)))J*K*b*x*****++7+g+++ ,;,g,,,,-C-E-F-}.~....///00111223344G444555m6n677777 88 8h88889G9e9999<:l::: ;C;h;;;;;&<I<q<<<<<&=(=)=Q=R=T=V=W=====b>c>>>tBuBBUDVDDDDD EAE|EEE&F+F,FGGGHH II>I~IIIIJJJJJJJJJJJJJJJJJOKPKKKLLzL{LLLL-MPMRMVMqMMMMNNZQ[QRRTTU3UJUhUUUUUV#VDV_VVVW-W5W?W`WWWWX8XNXSXhX{XXXXXY!Y@YKYsYYYYYZMZRZ|ZZZZZ4[t[y[{[|[\\\\B\\\{\\\\]A]C]D]]]]C^D^^+__-`.`````bbddSdUfVfffff)geggghhhhhijjFlGllmmnnnoopp6qrrrss}ssssstttttt?u@uoupu2v4v5vvvvxxxxyyjykyyyy&|'|:|S|o|||||)}T}}}}~B~~~~)\8[̀ҀACDāoqrFGDE ֆ׆;<zĈ'(()RSُڏ !"Lv1m%-245KLz',VtuFΖ  `ast?]|ۘ DFG2ܟݟ?@bc,C`d}ǢȢ !eɤ\ͥ8Wvȩߩ  Suƪ3PUyګQĬ٬&+UtѮҮcd5rsְװ56CD%&n޵',Pv(a̷#Bcٸ޸'mιӹչֹػٻbdeٿڿ9: ,HnDdx4l$=ch4Gh~ (QVXY,-W6klX@z(l@HqJR~3_v+SUV5VW-.<HVeft>?8OhiR,`_%&9:Q{8Wva1KFHIHIi j         % & ; S k s        * +    `a K\/45$_.Fc}Cdi7?DZ 6i~ [f"9ST 3Y'Vx ,FNS4w;pF e    0!\!!!!! "*"O"s"""""#1#f#####$ $A$j$$$ %*%I%h%%%%%%%%%%''])^)q)))))*C***+V++++,X,w,,,,,-g---.*.5.=.f.../1/K/P/////020I0v000011I1b111111292p22222444444 505T555556@6R666667;7o777778>8T8j88888>9?9U9V99999 :$:5:V:l:q:::::;B;T;a;;;;;;;;<<<<<<<<<<<<<??'A(ACCCCCCCD DDD'D@DADSDtDuDDDE9EEEF`FFFFF$GQGGGGGHLH}HHHHHI?IfIIIIIIII J JPJ}JJJKK"K=K_KKKKLLILkLLLLM M,MPMzMMM NbNNN OO(O)O;OEOFOQO[O\OiOtOuOOOOOOOOOOOOOOOOPPPP6P7PTPPPQQQ5RRRS#S=SYS}SS&TT$UUVVWGX#Y?YYYYYYYYYYYYZ ZZ)Z*Z7ZKZLZ]ZlZmZuZZZZZZZ [Z[[[2\\\y\\\]<]]]^k^&_'`abPcccddef5hLiiklWl`lzl{llllllllllmmmm!mSmmmmnUntnnnnnno;ozFzGzOzPzQzRzozzzF{{{{|I||}N}{}}}~&~'~~>%t0vk(OBPBCDaӑ֓#qڕɗ͘כ{|}|ڡ|ATIۭuOܱ;ʴKMѶaŸ9h W[º qܽ 823XYIJe2`a}?C 0000000000000000*000000000000000"0"0"0"0000*000000000000"0"0000000000000000000000000000)0*0000000000000000000000000000000)00000000000000000000000000000000000)000000000000)00000000000000000000000000000000)0000000000000000000000)0000)0)0)00)0)0)000)0)0)00)0)0)000)0)0)0)00)0)0)000)000*000000000000000000000000)000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0000"0"0"0"0"0000:000"0"0"0"0"0"0"0000"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)00000000000*000000)0)00)0)0)0)0)0)00)0)0)00)0)00000:0000000000000000000000000o"0o"0o"0o"0000000000000000000000000000000000000000000000000000000000000:0000000000*0000:000000000000000000000p"0p"0p"0p"0p"000000000000000000000000000000)0)0000000:000000000000000000:00000000000000000000000000000000000000000000000000000000000000000000000000)0)0)0)0)0)00000:000000000000000000000000000000000000000000000000000000000)0)00000:00000000000000000000000000000000000000000000000000000000000000000000000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)0000000*0000:000000000000000000000000000000000000000000)0000000000000000)000000000000000000000000000000000000000000000000000000)0)00000:00000000000000000000000q"0q"000000000000000000000000000000000000000000000000000000000)0)00000:000000000000000000000000000000000000000000000000000000000000000)00000:000000000000000000000000000000000000000000000000000000000000000000000000000000)0)00)000*0000:000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)000000000:0000000000000000000000000000000000000000000000000000000000)0)000000000*0000:00000000000000000000000000000000000000000000000000)0)00000:0000000000000000000000000000000000000000000000000000000)0)00)0)000000:00000000000000000000000000000000000000000000000000000)0)000*0000:0000000000000000000000000000000000000000000000000000000000)000000:0000000000000000000000000:0000000000000000000:00000000000000000000000000r"0r"0r"00r"0r"0r"0r"0r"0r"00000000000000000000000000000000000000000000000000*000000:0000000000000000000000000:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)00)0)00)0)00000000000000000000000000000000000000000000000000000000)00000000s"0s"0s"0000t"0t"0t"00000000000000000000000000000000000000000000000000000000000000000000000000000000:000u"0u"0u"0u"000000000000000000000000000000000000000000000)0)00000:0000000000000000000000000000000000000000000000000000000000000000000)0)000000:000w"0w"0w"0000000000000000000000000:000x"0x"0x"0x"0x"0x"0x"0x"000000000000000000000000)00000000000000000000000000000000000000:00000000000000000000*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0000*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*00000000000000000000000000000000000)0)0000)0)000000)0)000*0000:000000000000000000000000000000000000000)000000000000000000000000000000000000000000000000000000000000000)0)0000)0)0)0)00)0)0)0)00)0)000)0)0)0)00)0)0)0)00)0)000)0)00)0)00)0000000000000000000000000000000000000000000000000000000000000000000000000)0)00)0)00)0)00)0)00)0)000000:000000000000000000000000z"0z"000000000000*0000000000000000000000000000:0000000000000000000000:00000000000000000000000:000000000000000000000000000)0)00000000000000000000000000000000000000000000000000000000000)0)000000000000000{"0{"0{"0{"0{"000000000000000000:00000000000000000|"0|"0|"0|"0|"00000000000000000000000000000000000000)0)000*0000:00000000000000000000000000:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)0000000:0000000000000000000000000000000000000000}"0}"0}"0000}"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)00)0)0)0)0)0)00)0)000000*0000:000~"0~"0~"0~"00000000000000000000000000000000000000000000000000000000000000000000)0)000000000*000000:0000000000000:000 0 0 0 0000000000000000000000000000000000000000000000000000:00000000000000000000000000000000000000000000000000000000)0)00)000000*0000:0000000000000000000000"0"0"0"0000)0)0)0)0)00)0)0)0)0)00)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"0"0"0"0000*000000:0000000000000000 0 0000:000 0 000000!0!00000000000000000000000000000000000000000000000000000000000000000000000000)0)0000000*0000 0 0000 0 0 0000:00000000000000000000000000000000000000000)0)000000"0"0"0"0"00000000000000000000000000000000:00000000000000000000000:000 0 0 0 0 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*0000:000000000000000:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000)00)0)0000000000000000000000"0"0"0"0"0"00000"0"0"000"0"000"0"000"0"000"0"000"0"00000000*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0000000000000000000000000000)0000:00000000000000000000*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*000000000000000000000000000000      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`abcdefghijklmnopqrstuvwxyz{|}~000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)0)0)0)0)0)00)0)000000000000000000000000"0!0!0!0!0!0!0!0"0000000000000000000000000000000000000000000000000000000"0"0"00"0000000000000000000000000000000000"0"0"0"0"0"0"0"0"0"0!0!0!0!0!0!0!0"0"0"0"0"0"0"00"0000000000000000000000000000"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0"0000"0"0"00"0"0"00!00000000000000000!0"0"0"0"0"0"0!0"0"0"0"000000"0!0!0"0!0!0!0!0!0!00"00000000000000000000000000000"00"0"0"0"0"0"0"0"0"0"0"0"000000"0"0"0"0"0"0"0"0"0"0"0"0"0"0"00"0"0"0"00"0000000000"0x!0x!0x!0"0"0"0"0000"0"0"0"0"000`00*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0*.0 000&00 00000000000000000100tt  22254<@;GfZj}ˍfZOD^&d:2R0kwC 5& 9U jy*34wS.FThx*@dV)04AB[Ys9\,Z%v %/26;@DHLPVZ`fjmruz~y,, .0h014&8Z889f99:]:k::;<==@BCuD?EENFFGRHH JQU0Z_`dIi2ru7v|Ǥζ\o:dv vR;%s*%1*6h:|?H`NQX3^gnQv|)D,֛ hӜ'\f CON7"$)26;DGIOUi]gijqPwxTyyzƅ'D}|1GDlN  %f(249RBNTh]dhpGw7x{AY#x  {IWR#W%(/2C:AAB}ExIPLQUVZ`eUinqs{~NC;/ӱx     !"#$&'()*+,-.01345789:<=>?ABCEFGIJKMNOQRSTUWXY[\]^_abcdeghiklnopqstvwxy{|}9+9-9/9D9F9/zGzIz=={{{>|U|W||}}jrrr&sWsystttuuu          ! # ; O Q S g i s            wppppppB:::::Z::::XXXX::::::::::::+KRY]bmq 5!!l,b$@P T @V(  h P   3"Z  3 P  Z  3 P  Z  3 P p Z  3 P z Z  3 P  Z  3 PP  B S  ?/B84 _Toc437016061 _Ref437026731 _Toc459131355 _Toc459432972 _Toc468071421 _Toc470411073 _Toc459131356 _Toc459432973 _Toc468071422 _Toc470411074 _Toc459131357 _Toc459432974 _Toc468071423 _Toc470411075 _Toc459131358 _Toc459432975 _Toc468071424 _Toc470411076 _Toc459131359 _Toc459432976 _Toc468071425 _Toc470411077 _Toc459131360 _Toc459432977 _Toc468071426 _Toc470411078 _Toc459131361 _Toc459432978 _Toc468071427 _Toc470411079 _Toc459131362 _Toc459432979 _Toc468071428 _Toc470411080 _Toc459131363 _Toc459432980 _Toc468071429 _Toc470411081 _991246022 _Toc459131364 _Toc459432981 _Toc468071430 _Toc470411082 _991342820 _Toc459131365 _Toc459432982 _Toc468071431 _Toc470411083 _Toc459131366 _Toc459432983 _Toc468071432 _Toc470411084 _Toc459131367 _Toc459432984 _Toc468071433 _Toc470411085 _999802324 _Toc459131368 _Toc459432985 _Toc468071434 _Toc470411086 _Toc459131369 _Toc459432986 _Toc468071435 _Toc470411087 _Toc459131370 _Toc459432987 _Toc468071436 _Toc470411088 _Toc459131371 _Toc459432988 _Toc468071437 _Toc470411089 _Toc459131372 _Toc459432989 _Toc468071438 _Toc470411090 _Toc459131373 _Toc459432990 _Toc468071439 _Toc470411091 _Toc459131374 _Toc459432991 _Toc468071440 _Toc470411092 _Toc459131375 _Toc459432992 _Toc468071441 _Toc470411093 _Toc459131376 _Toc459432993 _Toc468071442 _Toc470411094 _Toc437604721 _Toc437604898 _Toc438173731 _Toc459131377 _Toc459432994 _Toc468071443 _Toc470411095 _Toc459131378 _Toc459432995 _Toc468071444 _Toc470411096 _Toc437604724 _Toc437604901 _Toc438173734 _Toc437604720 _Toc437604897 _Toc438173730 _Hlt416840070 _Hlt416840301 _Hlt437703685 _Toc437016064 _Toc459131379 _Toc459432996 _Toc468071445 _Toc470411097 _Toc437604725 _Toc437604902 _Toc438173735 _Toc437604726 _Toc437604903 _Toc438173736 _Toc459131380 _Toc459432997 _Toc468071446 _Toc470411098 _Toc437604728 _Toc437604905 _Toc438173738 _Toc470411099 _Toc437604292 _Toc438173575 _Toc437604294 _Toc438173577 _Toc437604730 _Toc437604907 _Toc438173741 _Toc437604295 _Toc438173578 _Toc470411100 _Toc459131384 _Toc459433001 _Toc468071450 _Toc470411101####>>>> + + + +9999kkkkllllu*u*u*u*%O%O%O%OPPPPGzzzzz@@@@ItItItItxxxx6666^^^^2222O#O#O#c>c>c>c>````dddGlGlGljruu!!!5     <<CCCCCC  !"#$%&@'()*+@,-./012345678@9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnpoqrstuvwxyz{|}~----VVVV"+"+"+"+9999kkkk$m$m$m$mPPPP****@O@O@O@OPPPPGzzzzz A A A Aititititxxxx<<<<ttttNNNNr#r#r#>>>>````RdRdRdlllruu0EEEE111dddU) )    <<CCCCCC||}}flڪ;DȮҮºúĺƺch  3XYYlIIJJ``aa??@C||}}A8O[!13XYIIJJ``aa??@C3||}}º YYIIJJe``aa}??@CBert G. Wachsmuth)C:\bert\writing\java\JBD - Chapter 06.docBert G. Wachsmuth)C:\bert\writing\java\JBD - Chapter 06.docBert G. Wachsmuth9C:\WINDOWS\TEMP\AutoRecovery save of JBD - Chapter 06.asdBert G. Wachsmuth9C:\WINDOWS\TEMP\AutoRecovery save of JBD - Chapter 06.asdBert G. Wachsmuth)C:\bert\writing\java\JBD - Chapter 06.docBert G. Wachsmuth)C:\bert\writing\java\JBD - Chapter 06.docBert G. Wachsmuth)C:\bert\Writing\Java\JBD - Chapter 06.docBert G. Wachsmuth9C:\WINDOWS\TEMP\AutoRecovery save of JBD - Chapter 06.asdBert G. Wachsmuth9C:\WINDOWS\TEMP\AutoRecovery save of JBD - Chapter 06.asdBert G. Wachsmuth)C:\bert\writing\java\JBD - Chapter 06.doc9IJXΰ|&  i ; K.b M@6:F 2P N` Xb 8ub0j5 ,% > nk <b CXRD?U0OyV n I,b Q~r " !D & 63DG  d$qLZ j rB ;K k ihb >n ,e0b j L .;M  ])&,nw ^i} J A  }G N   7 6lAB*    !, / 4 & ~'>KR fd tCb K ]u b& b o ? : TrJ  >b PG%b n& kl= ^@ w_J 5sK 2Z (dNM U  igb ^" + rL {(^ ;az R'>5 b YNb kD S N (  H  oM b h  D b b   ? ttq|    U! b  j= b %i      CN  2k    4'  :a0 b A-W  ]0x  M  * fE  y  #"  `U*  9  \  G "v"T  w,    : d:B/ ƅSL  (l P>>}  &  W  M  ?  $UL RZ Tor , F'NYt] , P& XN$>8D N) +b " fv W',ƅQQ7 IE #\\ u } B "ƅH5 !X Lj  b %:zP̶. AT 9 K/ L z /J SEb Bb F.L _Xede 6g ch ?tԄR0Q[ " 8gR 2,[b KAh".2[pv>E Z M Z h ƅ9 D~m{ D  3  )+1 U OƅWv 3H 1u jI@ B HJ S   @ I |b y BH#t= G G =:  o ;H HL Q $l o'><]  S  @  Z LD 'M p )(  eiUo 'il)| G ,k8ƅ]O /*X B,ob (y K Fb  $&޷|K'b = _l?GFb ]  iXb ?Z 'w # ~H U y k0Y G_ 6,~ d  :.# F1Nb sa e"r Y   # : 1Z n  }  c  g ئj     b 9O! -]! >! $'"(M~$" 8rV"\YE;" "L6 #3 # |U# A'# 0#b .4#VL8# |M# *p#b ~#ƅU#@3D#".2@# d6$ ^e$ T$b N$ %W$!% lW-% )8F%(Xt' >u'  ' Q' C(  E(b ( >( 8( u( b(b 7( kK) V) _l) 0) K) ds) ) S * ,B* iV4* UE* } |* -*b 1T* tf*b N?* P*b 6X*b @~+ Th+ W+ 0+ 4+ cE, 2, W), $q*, Wl-,b _^, U,b ae,, p,b , W;- B- (- zO-ghai-I1_}-b @s- }-8J- `?-b G`-><j.̺lF..,Mzr. aP. A. s.  P/ P/0mT,/ X/ / ?F/ T/ / zX/ v0P0b 0v>E i0 }I0b Z0pz,[1^1 wn1 Y&1 :1 J1b J1pe1 m1 tN2 x[2'>?c2r 2 R(2 T2 2 Y2b L3b I3PbZG3'>R`J3 3g3 Zk3 B"3 5l3 k3 h:3 4b 14 $54 %<4 pU4'>w#W4 FN4 M4xX74b D4 p5 1 5b k5 .n5 \x5 1U5$ r5 15 $5 ny6 ye6޷|h6 <6b 6 B768?mO6 >M6$q7 }fQ7.QA|7tb\"m7 *7 7 `#7b j7 =7 \"M8 #a8 {|8 |8.=@2;d8 H8b U8 ~h8 k98 m8 9 i/49 ?w9@9 b<9 @9 ]9 b9(Mb%: f%:ƅ\: (f: {|:L1:  r: : 8: U: ; /(; j+2; aK; hs; Z;  y; ; .;  ;NX93;  5<*E2Q< e@< &< m En> t>b h> !f> xs> Cu> *>b e5> M> '> M>  > gR? 2 ]? u?  5? M? K? e1?0d/? _T? qA? 5@ l.@ -s@MRF@ @ KT@ z A :A LpAb uA 0 B  AB 5][B lKD1,I 7Ib lI cJb 1Jb wJ&Jb  K 7K VGK'>E)K ) K ;~L  L 0Lƅ+`MjH.?Mƅ1>M xvM ~Nb :Nb hN ~!Nb D;TN gDN ^=N nN :N WNb pN $FOjp-aQO ,dO i?mO POvs9O PQO dOnA^O uOb GSP RPtFQG8P _@P b0LP*$QP mP P 7_P vyP RP XPd>6ZQ 60kQb vqQ eVQb {Qb lYQv>EgQb HR~FvR uR #4Rb MPR LS  <'Sb d(SGS eS hSpQvqbS JS &vS S GS VS )SoD+T 51YT  iT'>ioT gT ;T PT kTwT y;U MU |IU =bU  Vx0,`%V U*V qV V,/VIxW ~gFW D`Wb RW W 1W -DWئe"X̃:axXX 7ZX "*`Xb eivX ^=X ,(X  X 8X'>S`Y ?)2Y "FY $|Y OYb Y\>B-Y 5o+ZD;PHZz*:yZr] ] )^ 8T^ -$^ ^ =^b m^ 4^ {_ |p_ A'>_ 2_ @_b [_ _ pl` Z`*5|@"` L`rnR`~) Y`b I[` c` !` ` a *oa :Ua ta ^kab ab Cab Ea LaB41b0b G`b ,fb =)b |b  c Ic 5$c Euc 8cb 0c ,db vq'db BF6d vYd >Zd [d ^d -d ,eX/3%,e )hBe GeEge 5Pe {e {e me &e P fb "f$ t9f eNf WSfyt8Yf@<\m^f Mgf&5fCJf &g O gb 45g oRgb ]g`rp@jvfg oig W{igb Oug g .Lgb g:ӠLg }g GgywGh +Lh zZwh ehG\hb ulh KGq Itq 2q r cS%r .5r gr Jhr J6r kYrir =r:r *r o s  sbXK)s 3$Csb h;s &0sb [psƅ4t 2t N.t X?tƅKMtb ;Rtb qCtحNt xt *=tb +{t = u  :u 3|bu(xvu Vryu !zu {u {u u Xub !u Dgu  v um0vb KTv nlvFwHrv z"v 3v".2v E v gv xw eo5w d9Nw Lbw Uww lw &!wDHw Bwb Pj x aa5x =Rx Q~^x Zx _~x Lx&V0ly #y8 !Ey riy y y yr1zb  B3z  qz .z z lmz 7z t!{2D{ *l{ r{b { y{`Xt { { { { o | 8| =| gn|b &| .-| P|3| x|b z| r| .| Z|| {} JM} (V}b )d} ob} } %B} 2~ KA~ qR~ &d~ Ag~ M~ )e~acn    b Ib hh^h`. hh^h`OJQJo(* hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(^`o()hh^h`)hh^h`. hh^h`OJQJo(hh^h`o(.^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(0^`05o(hh^h`. hh^h`OJQJo(hh^h`) hh^h`OJQJo(^`o()hh^h`) hh^h`OJQJo(hh^h`)hh^h`)88^8`o() hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(88^8`CJo()hh^h`o(. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)^`o() hh^h`OJQJo(^`o()hh^h`)hh^h`.hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`)hh^h`) ^`o() hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(^`o()hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)0^`0o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`)hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`o(.88^8`o() hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`)h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo(hh^h`. hh^h`OJQJo(88^8`o()hh^h`o(.hh^h`)M M ^M `o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`o(. hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`.h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`. hh^h`OJQJo(^`o() hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`)0^`0o()@h ^`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`o(.hh^h`o(.hh^h`o(. hh^h`OJQJo(hh^h`.hh^h`.hh^h`) hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(^`o()hh^h`)0^`0o(. hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(^`o()hh^h`o(() hh^h`OJQJo(^`o() hh^h`OJQJo(hh^h`o(.hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`.^`o(. hh^h`OJQJo(hh^h`)hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(0^`0o(. hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`o(.hh^h`)hh^h`5o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.hh^h`o(.hh^h`)hh^h`. hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`. hh^h`.hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(hh^h`.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.^`o() hh^h`OJQJo(hh^h`)88^8`o(.hh^h`o(..^`o(...^`o(.... ^`o( ..... ((^(`o( ...... `^``o(....... `^``o(........ ^`o(......... hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.88^8`o() hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`^`. 88^8`) ^`()^`()pp^p`()  ^ `.@ @ ^@ `.  ^ `. hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`56o( ^`56o(. 000^0`056o(.. `0`^``056o(... ^`56o( .... ((^(`56o( ..... `^``56o( ......  `^``56o(.......  ^`56o(........ hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`)h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(^`o()k^`ko()hh^h`.P^`P..^`...xp^`x....  ^` .....  X ^ `X ......   ^ `....... 8^`8........ `^``......... hh^h`OJQJo(hh^h`.hh^h`)hh^h`.hh^h`)hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`. hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.88^8`o()hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(^`o() hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`)hh^h`o(.hh^h`) hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(^`o()hh^h`) hh^h`OJQJo(hh^h`.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)^`)88^8`)^`()^`()pp^p`()  ^ `.@ @ ^@ `.  ^ `. hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( 0^`0o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(88^8`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.^`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(^`o()hh^h`)88^8`o()hh^h`6o(. hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.hh^h`. hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`.P^`P..^`...xp^`x....  ^` .....  X ^ `X ......   ^ `....... 8^`8........ `^``.........hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`o(.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`o(. hh^h`OJQJo(hh^h`.hh^h`. hh^h`OJQJo(88^8`o()hh^h`)0^`0o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(0^`0o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`o(. hh^h`OJQJo(hh^h`.hh^h`. hh^h`OJQJo(hh^h`)h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)^`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`)hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.^`o()hh^h`. hh^h`o(. hh^h`OJQJo(hh^h`)^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.^`5CJOJQJo(.  ^ `5CJOJQJo(..  ^ `5CJOJQJo(... YY^Y`5CJOJQJo( .... ))^)`5CJOJQJo( ..... `^``5CJOJQJo( ...... P`P^P``5CJOJQJo(....... ^`5CJOJQJo(........hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`o(.88^8`o() hh^h`OJQJo(88^8`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(88^8`o() hh^h`OJQJo(hh^h`o(.hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`o(.hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`o(.hh^h`. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo(h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo(^`o()hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(^`o()hh^h`) hh^h`OJQJo( hh^h`OJQJo(^`o()hh^h`)hh^h`)^`o(()hh^h`) hh^h`OJQJo( hh^h`OJQJo(88^8`o() hh^h`OJQJo(hh^h`)0^`0o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(88^8`o(() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`.^`5CJOJQJo(.  ^ `5CJOJQJo(..  ^ `5CJOJQJo(... YY^Y`5CJOJQJo( .... ))^)`5CJOJQJo( ..... `^``5CJOJQJo( ...... P`P^P``5CJOJQJo(....... ^`5CJOJQJo(........hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)^`)88^8`)^`()^`()pp^p`()  ^ `.@ @ ^@ `.  ^ `. hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`o(. hh^h`o(hh^h`) hh^h`OJQJo(hh^h`o(. hh^h`OJQJo(hh^h`o(.0^`0o( 0^`0o(.0^`0o(..88^8`o(... `^``o( .... `^``o( ..... ^`o( ...... ^`o(....... pp^p`o(........ hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(h 88^8`OJQJo(h ^`OJQJo(oh   ^ `OJQJo(h   ^ `OJQJo(h xx^x`OJQJo(oh HH^H`OJQJo(h ^`OJQJo(h ^`OJQJo(oh ^`OJQJo(hh^h`) hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`5o(.88^8`o() hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(808^8`0o() hh^h`OJQJo( hh^h`OJQJo(h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`o(.hh^h`)hh^h`.P^`P..^`...x^`x.... ^` .....  X ^ `X ......   ^ `....... 8^`8........ `^``......... hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.hh^h`o(. hh^h`OJQJo(hh^h`)^`)88^8`)^`()^`()pp^p`()  ^ `.@ @ ^@ `.  ^ `. hh^h`OJQJo(hh^h`o(.hh^h`o() hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(88^8`o() hh^h`OJQJo(hh^h`o(.h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo(hh^h`.hh^h`) hh^h`OJQJo(hh^h`)hh^h`)hh^h`. hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(^`o()88^8`o()hh^h`o(.hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`.hh^h`)hh^h`) hh^h`OJQJo(h ^`OJQJo(h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo( hh^h`OJQJo(hh^h`)0^`0o(. hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(88^8`o()hh^h`. hh^h`OJQJo(0^`0o(.^`o()hh^h`. hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(k^`ko()hh^h`)hh^h`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo(h 88^8`OJQJo(h ^`OJQJo(oh   ^ `OJQJo(h   ^ `OJQJo(h xx^x`OJQJo(oh HH^H`OJQJo(h ^`OJQJo(h ^`OJQJo(oh ^`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`)88^8`o() hh^h`OJQJo(hh^h`o(.h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo(hh^h`) hh^h`o( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`.P^`P..^`...x^`x.... ^` .....  X ^ `X ......   ^ `....... 8^`8........ `^``......... hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo(^`o()hh^h`o(.hh^h`) hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`o( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`CJOJQJo() hh^h`OJQJo(hh^h`)hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(.hh^h`o(.^`o()hh^h`)8      !"#%&'()*+,7./012345689:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm8^8`o()hh^h`)hh^h`)hh^h`)hh^h`o(.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`) hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(^`5o(()hh^h`.m m ^m `o(.hh^h`) hh^h`OJQJo( hh^h`OJQJo(88^8`o()hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`)hh^h`)hh^h`o()hh^h`o(.hh^h`.hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`.hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(h^`^`)^`)^`()^`()^`()^`.^`.^`. hh^h`OJQJo(0^`0o(. hh^h`OJQJo(hh^h`)hh^h`.hh^h`o(.hh^h`o(. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo(^`o() hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(88^8`o()hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`.hh^h`) hh^h`OJQJo(hh^h`o(.hh^h`)0^`0o(. hh^h`OJQJo( hh^h`OJQJo(hh^h`)hh^h`.hh^h`)hh^h`)hh^h`)hh^h`. hh^h`OJQJo(hh^h`o(.hh^h`o(.hh^h`o(. hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo(88^8`o() hh^h`OJQJo( hh^h`OJQJo(hh^h`) hh^h`OJQJo( hh^h`OJQJo(J,=)b15cE,p5]Ob l9xG|IUfU\-dCf&{@zr.?w9lF.kl=;Kg"UF@3|m{d9NwHrv4' \"M88k c*n t9fJSvqQeNf*7n gvmP[FKGq VRZmT,/T5''MN.t:.#k[$'mL:NOi p$&OyVF.LvYd3%,epN(EET&0lyki,fbj5$QPk98"0)ioT i0TELbwkHgTZ;+LhT=B-YD;TNRW.z/(;lh[b%:_Y]BFLQW;-&e!Ey)(?oedeDjmqA?axXX=RxkD} L8#/%<4$5@^@J=&%B}$HKQE{eGN?*2,A'>_KA~!m=oVGds)"pl`&d~ljzX/8',(Xz*\&pkh6HJ 9e@<, }g)+1h;s,dOY&1;T`U* /5sK?Hw#a8geP&2 ]?7z]_we'8gRoK)ZUE*uj L`L.;@9{|8;hN$!%;")=r5FvRZ3 M?(:WMy;U,B* L$|Y7N{OkFj+2;$q*,tN2?Z142k T!'>!:#" 0c)^RhFzZwhLSB* ^=X1X2qXi~&kK)i/49H \l0GhS:1=bU$&G!qJ = u15i~gFW7(@$541Z[(l z^1kl{}PQOaK;<]( =.|En>QQ7_@P;~La0q:F!D\ Po&<2Zt=l.@K?_vz|=r-]!MU9O!"WGrU:W chrBc`)hBeu(kS *lW-%NnK<M4 ]63Zk3tLG`b7_P2~^doEF.-|Ag~@~+#Ml]0x P/q7?F/U85aAC&5][BZ||LgQ~^x[iCHKRf}\ 2r/?CN o#Iriy,PT6D vMQ AsHV)|b ABw#W4wT94U=SL TorG_ULeS2qM;Rt5o+Z[plYQGSD&d6$-Y?U&U}3Zk%i m<PG%I1JIM{QGpl&kP f:N0#gnW{igtCgQ}I0GF0Th+"(qCthfCa#4R) Y` <'Sig2,[BU@n&JB,o5 D`Wu=hodw\U,P*7Ib(YNh&oRg,d+{t~!Ntf*WN^ &U! XuKMt8lKIIJ=8c~N3$Cs*=t*p#BF6d>1_}-Dt>N I[A.%:bSXN1 5H8LpA60kQ`#7*>BweVQ(V} 4-*KXP,e0LfZ6 #}Cb9&0scJP/hai-)8F%fyI/V8Yf_oM iX1zny6uD<uOL3-s@+x|zEFum0v74I,P0p,,B ^kaY2r{fjY`?-gn|]F&!w%'Yfd zc] @zc]< @zc] @~MG Lx"*`XBF1Nvq'dU#CaV:a0 M`'Tj$'"GgzO-,e;PHZe1?N=Qk:qmK'OYK.ZC j= J1X-CT$ E(ih=^|6X*O g"p@_&CSE Wl-,ec'.Lg<6m8lI8(A [GJ6rnk oD+Tj 'w5$c1Wz"vqVKacn8T^3[+d'@~0@Dו@gj5  FMicrosoft Word Document MSWordDocWord.Document.89q Seton Hall Universityae  Chapter 6: Swing and Multimedia Title| 8@B;SE v6g|@"`j7Ea(f:*l{E _^,M>nNi0k\9 "T S`Y)S% @)S' @)S8* @=jHRW),R(2>nb9[GNt{ulh  :u>]-$^?)2Y`n=Dgub&JA&U*VMlZxM~wGh:A\M ~t.p:yZ4U=4U=Unqy W]kT4U=lI4i(-)d} r:jCm;azZ0B76xs>M@0 B@9&|B7K|8^O8rV" X>M6y$W'BE {ZnO)&KD3;ehK/BVryuGPO71\i3I]Z8G/*X B3z:r"jjvfg?1p~ai+omi]u45gY K/J} J7ZXgR? Zxvufv!zu5l3GA-W PW+!`I1#pCmO6zuRPCo.;M:X/V*6Gy !1I>u' eivXUjW]T[>t'LaO^G"m7K)s*oa0bM e5>I[`f%:"~Hod(S85SI`%VN)z AWywJKOSH!f>/ e'pe"r|U#qR~>(o Oug^"E2Q<.n5zc] - zc]P/ zc]1 )Sh4 )S6 )S8 h:3; h:3> h:3L@ 6ZQD4xW6^2t qzkHnJ%2&vSG8PE)K}G& xw9 hC*riCu>~:Aoigw, JM})rmG ih GSP) K[_aa5x}@s-~h8b\:.5r|=3H Euc1:);>i?mO|p_RP% Ik3QH8=w&'elh 1>MWvr|eo5wxvM8:aP.!,T/rlw1T*0+:51YTKTvJhrLjPj xkYrMPR73hQ'-FopU4~:UadO_~L>Zd0Lgj54'OS8X~#2_VGK2PR iT1wqmkD{' y; >.8|q| Q"MA'#m^SuW',X?tn&5Pe?MNE,k8sZG3!ux[2H5{K%_~xs.b0LP 5< u?3g3E{uivyP5@-rl& /HLm^f-DWg A|70Qk5M4+ @h ^`OJQJo(D )|0)")b()$d&()\%()&.b.(. .0.".0b)hd&()%()&()b()H(() .0..@"...b....d& ..... % ......X& .......b ........( ......... )0)")Hb()dC()%()&.( b.` (.  .!0.T!".!b)!dC()!%()4"&()l"b()"(()(# .`#0..#"...#b.... $dC .....h$% ......$& .......%b ........X%( .........% )4&0)l&")&b()&5()'%()L'&.'b.'(.@( .x(0.(".(b) )5()X)%())&())b()*(()* .*0..*"...8+b....|+5 .....+% ......,& .......`,b ........,( .........X- )-!)-").#()8.$()p.%().&..'./(./ ./!. 0".D0#)|0$()0%()0&()$1'()\1(()1 .2!..T2"...2#....2$ ..... 3% ......l3& .......3' ........4( .........4 )4!)$5")\5#()5$()5%()6&.<6'.t6(.6 .07!.h7".7#)7$()8%()H8&()8'()8(()<9 .t9!..9"...9#....4:$ .....|:% ......:& .......;' ........l;( .........< )H<!)<")<#()<$()(=%()`=&.='.=(.T> .>!.>".>#)4?$()l?%()?&()?'()@(()@ .@!.. A"...LA#....A$ .....A% ......$B& .......tB' ........B( .........9chapter1chapter6chapter chapter2figs chapter6figschapter2 Chapter1Figs9((((((((())8)R)S)})))))) *N*O****+++,,,h,i,|,,,,---R-S-d----$.%.:.{.|....33344&4'4/464>4E4F4P4Z4a4m4n4y44444444445555555e5f5j5v555555555555 6 666'65666?6H6N6]6^6h6i6j6k6l6666666771727D7^7{7|777777777888888888888888 9999/9H9I9P9Z9g9h999E<F<O<`<a<~<<<=^=_=~====>>@>k>l>]?^?l?|????????? @ @@$@u@v@@@@@@@-A.A?AiAAAAAAAAAAAABBBCBNB[BgBhBnBuBBBBBBBBBCC6CCCCCCCCCD:D;DFDRDbDcDlDvDDDDDDDDDEEEE6E7EoooooooppZp[p+RSb>>>@@jjjjjjʃۃ!".<M[\ftʄ˄ф  %;NOUf|'VWOPRHHHHHH"I#I.IuIvIIIIOXQXSXUXWXXXfXzXXXXXXXXXXXXXYY&Y'YfYgYhYjYlYmYYYY$Z%Z;j=j?j@j\jjjjjjjjj*k+k{{{{{>|Y|Z||}}pq./NOR=T=V=W===JJJJJJJJJJJJJJJJ-.<HVefti j   % & k    <<<<<<D DDD'D@DADSDtDuD OO(O)O;OEOFOQO[O\OiOtOuOOOOOOOOOOOOOOOOPPPP6P7PYYYYYYYYYYYZ ZZ)Z*Z7ZKZLZ]ZlZmZuZZZZZZWl`lzl{llllllllllmmmWy`ykyly~yyyyyyyyyyyyzzz%z5z6z>zFzGzOzPzQzBCD}Y?C@ij~%%*+?@5M5N]^jkyzۥۦ@AYZjk  /0=>]^2v2w22bbbbbbb?b@B@n@ @4@\@x@@@@,@&P@:x@P@`@r@@$@@@ @0@$L@6p@<|@`@z@@@@@@(T@>@Z@j@@P@l@@@@<@v@UnknownG:Times New Roman5Symbol3& :ArialqCentury SchoolbookBookman Old Style?5 :Courier New;Wingdings5& :Tahoma"1h8&Ai8&>5"0de2QChapter 6: Swing and MultimediaBert G. WachsmuthBert G. Wachsmuth