Using NetBeans IDE to Build Quick UI s Ray Hylock, GISo Tutorial 3/8/2011



Similar documents

Tutorial: Time Of Day Part 2 GUI Design in NetBeans

Managing Contacts in Outlook

ID TECH UniMag Android SDK User Manual

Gephi Tutorial Visualization

Adobe Acrobat: Creating Interactive Forms

LabVIEW Day 1 Basics. Vern Lindberg. 1 The Look of LabVIEW

File Manager Pro User Guide. Version 3.0

Using Files as Input/Output in Java 5.0 Applications

Select the Crow s Foot entity relationship diagram (ERD) option. Create the entities and define their components.

Creating Basic HTML Forms in Microsoft FrontPage

IBM Tivoli Workload Scheduler Integration Workbench V8.6.: How to customize your automation environment by creating a custom Job Type plug-in

File Management With Windows Explorer

Windows XP File Management

Virtual Office Remote Installation Guide

S PT-E550W ELECTRONIC E C LABELING L SYSTEM

Plugin for Microsoft Dynamics CRM For On Premise and Online Deployments. User Guide v. 2.3 April 2015

HOW TO CONNECT TO FTP.TARGETANALYSIS.COM USING FILEZILLA. Installation

Project 4 DB A Simple database program

Desktop, Web and Mobile Testing Tutorials

POOSL IDE Installation Manual

Access Tutorial 6: Form Fundamentals

Evaluation. Copy. Evaluation Copy. Chapter 7: Using JDBC with Spring. 1) A Simpler Approach ) The JdbcTemplate. Class...

Setting Up Your FTP Server

6. If you want to enter specific formats, click the Format Tab to auto format the information that is entered into the field.

How To Use Outlook On A Pc Or Macbook With A Pc (For A Pc) Or Macintosh (For An Ipo) With A Macbook Or Ipo With A Ipo (For Pc) With An Outlook (For Macbook

Elixir Schedule Designer User Manual

WINDOWS POINT OF SALE (WinPOS) Property Tax Entry Module

Table of Contents. Welcome Login Password Assistance Self Registration Secure Mail Compose Drafts...

Tutorial Guide to the IS Unix Service

File I/O - Chapter 10. Many Stream Classes. Text Files vs Binary Files

Creating Database Tables in Microsoft SQL Server

Viewing and Troubleshooting Perfmon Logs

ELECTRONIC DATA PROCESSOR (EDP) QUICKSTART FOR DATA PROVIDERS

ODBC Driver Version 4 Manual

Basics Series Basics Version 9.0

ADOBE ACROBAT 7.0 CREATING FORMS

Module 1. 4 Login-Send Message to Teacher

Preview DESIGNING DATABASES WITH VISIO PROFESSIONAL: A TUTORIAL

Catalog Creator by On-site Custom Software

Hands-On: Introduction to Object-Oriented Programming in LabVIEW

User Management Resource Administrator. UMRA Example Projects. Service Management

Part 1 Foundations of object orientation

Java Software Development Kit (JDK 5.0 Update 14) Installation Step by Step Instructions

Writer Guide. Chapter 15 Using Forms in Writer

JIDE Action Framework Developer Guide

Files and input/output streams

Lab View with crio Tutorial. Control System Design Feb. 14, 2006

DATA VISUALIZATION WITH TABLEAU PUBLIC. (Data for this tutorial at

Appendix K Introduction to Microsoft Visual C++ 6.0

A database is a collection of data organised in a manner that allows access, retrieval, and use of that data.

Appendix M: Introduction to Microsoft Visual C Express Edition

Visualizing molecular simulations

Moving your GroupWise archive to Outlook 2010 Key step to take the day after your upgrade

Complete C# Database Application with One Line of Code!

Information Technology Solutions

FrontPage 2003: Forms

Connecting to LUA s webmail

For Introduction to Java Programming, 5E By Y. Daniel Liang

Exercise 1: Python Language Basics

Project Builder for Java. (Legacy)

Unit Testing & JUnit

Introduction to the use of the environment of Microsoft Visual Studio 2008

Creating a Guest Book Using WebObjects Builder

Instructions to view & create.kmz/.kml files from Google Earth

Introduction: The Xcode templates are not available in Cordova or above, so we'll use the previous version, for this recipe.

PowerPoint 2007: Basics Learning Guide

13 Managing Devices. Your computer is an assembly of many components from different manufacturers. LESSON OBJECTIVES

Excel 2003 Tutorial I

Outlook 2011 Window. [Day], [Work Week], [Full [Home]. Schedule and plan: Click the [New

Sample- for evaluation purposes only. Advanced Crystal Reports. TeachUcomp, Inc.

DEVELOPING CONTRACT - DRIVEN WEB SERVICES USING JDEVELOPER. The purpose of this tutorial is to develop a java web service using a top-down approach.

MICROSOFT OUTLOOK 2010 WORK WITH CONTACTS

User Guide. v0.1 BETA. A-Lab Software Limited

About the To-Do Bar in Outlook 2007

ICP Data Validation and Aggregation Module Training document. HHC Data Validation and Aggregation Module Training Document

Gmail: Sending, replying, attachments, and printing

Introduction to Macromedia Dreamweaver MX

Creating Drawings in Pro/ENGINEER

INTEGRATING MICROSOFT DYNAMICS CRM WITH SIMEGO DS3

Outlook 2013 ~ Advanced

Hands-On Lab. Building a Data-Driven Master/Detail Business Form using Visual Studio Lab version: Last updated: 12/10/2010.

How to Install Eclipse. Windows

Software Development Environment. Installation Guide

How to develop your own app

Converting from Netscape Messenger to Mozilla Thunderbird

Creating Acrobat Forms Acrobat 9 Professional

Document Management Quick Reference Guide

INTRODUCTION TO ATRIUM... 2 SYSTEM REQUIREMENTS... 2 TECHNICAL DETAILS... 2 LOGGING INTO ATRIUM... 3 SETTINGS... 4 NAVIGATION PANEL...

Android Environment SDK

Web Intelligence User Guide

Android Development Setup [Revision Date: 02/16/11]

Gephi Tutorial Quick Start

Step 4: Configure a new Hadoop server This perspective will add a new snap-in to your bottom pane (along with Problems and Tasks), like so:

NetBeans IDE Field Guide

Design. in NetBeans 6.0

Transcription:

Using NetBeans IDE to Build Quick UI s Ray Hylock, GISo Tutorial 3/8/2011 We will be building the following application using the NetBeans IDE. It s a simple nucleotide search tool where we have as input a sequence to search, a search sequence, the direction of the input sequence (5 3 Forward or 3 5 Reverse), the maximum percent mismatch, the minimum percent GC content, and whether or not the search sequence indicates transitions. If transitions are allowed, then the search sequence is case sensitive where a lower-case nucleotide indicates the possibility for a transition (i.e., a = A or G, c = C or T, g = A or G, and t = C or T); otherwise case doesn t matter. The input file may or may not be in FASTA format. The output is the matching nucleotide sequence from the input file with an offset to the start position in the input sequence, the percent mismatch, and the percent gc content. We also add three parameter presets to the menu bar.

INSTALLATION STEPS 1. Downloading and installing the latest NetBeans IDE (using 6.9.1 in this demo) a. Go to: http://netbeans.org/downloads/index.html b. Select the version you want and save it somewhere i. This file is an installer on windows so you just delete it after installation (not like Eclipse) ii. I typically just download ALL because I use the Java and C/C++ modules c. Install the file when the download is complete d. Run when installation is complete e. At any point in time, if you wish to run the project, you must first execute Clean and Build then Run i. 6.8 and earlier execute Build with Run, but for some reason, 6.9.1 doesn t CREATING A DESKTOP PROJECT 1. File New Project 2. In the categories section, select Java 3. In the projects section, select Java Desktop Application 4. Next Next Name the project (e.g., GisoDemo) Finish 5. You should now have something that looks like the figure below 6. In package gisodemo, you have the following files

a. GisoDemoAboutBox: This is an about box tied to Help About b. GisoDemoApp: This is where the project is instantiated; do not modify unless you know what you re doing c. GisoDemoView: This is the interface class which provides Source and Design view i. Source: the underlying code for the GUI ii. Design: the drag-and-drop view BUILDING THE EXAMPLE INTERFACE BUILDING THE INPUT 1. To being with our demo, we first want to make sure the palette is open a. If you do not see the Palette window, then Window Palette

2. Before we can continue on, we must first set some code generation variables. a. Click in any part of the white space around the application b. In the Form GisoDemoView Properties panel (below the Palette in the screenshot from part a Windows Properties), (in the following order) i. Uncheck Use Local Variable ii. Set Variable Modifiers Access = Private and 3. First, drag a Swing Panel object into the main panel (the central object) place it in the upper half of pane with full width 4. Next, in the Properties window, click on border and select Titled Border, change the Border option to EtchedBorder, type Input into the Title field and change the color to black

5. Next, we will drag a Swing Label and Combo Box control into the Input pane a. To change the variable name, right-click on the label and select Change variable name enter direction as the new name

6. To change the text for jlabel1, simply double-click it and type Species 7. To change the values in the combo box, click on it and in Properties select model Type in Forward <enter> Reverse 8. Next, we are going to add a series of Label and Spinner objects (Mismatch, GCMin) a. To modify the Spinner elements, select Properties model i. We want to use the Model Type number for both of these ii. Initial Value for Mismatch is 20, minimum is 0 and max is 100, step size 1 iii. Initial Value for GCMin is 70, minimum is 0 and max is 100, step size 1

b. Set the variable names to mismatch and gcminrespectively 9. We need to specify whether or not transitions are allowed (i.e., A G and C T) a. Drag a Check Box control next to max and name it Transitions b. Change the variable name to transitions c. If it is checked then that means allowed else disallowed 10. We need to specify a search sequence via an input field a. Add a Label called Search String and a Text Field with a variable name of search b. Clear the default text by deleting everything in Properties text

11. Next, we are going to add the controls to input a file from the File Choose (multi-step process) a. Drag a Swing Button control to the pane and change its text value (in properties) to Select File b. Next, we will add a Label to the right of the select file where we will eventually display the path to the selected file; set text to empty i. To change the variable name to filename c. Instead of using the File Chooser palette option, we will create an action for the button to call the File Chooser from i. Select Source view private File infile = null; ii. Under the method showaboutbox(), add the following (you may have to add the import to File) @Action public void filechooser(){ JFileChooser chooser = new JFileChooser(""); chooser.setfileselectionmode(jfilechooser.files_only); int returnval = chooser.showopendialog((java.awt.component) null); if (returnval == JFileChooser.APPROVE_OPTION ){ infile = chooser.getselectedfile(); filename.settext(infile.getpath()); iii. Return to the Design menu iv. Double-click the Select File button Action = filechooser 1. This assigns the method filechooser to the button when it is pressed

12. We will round out the input part with a submission button a. Add a Button names Execute b. Add the following code below the filechooser method i. The method execute sets initializes the progress bar ii. The class Task manages the progress bar and calls the runexecute method iii. The runexecute method is where the computation is done (we will be adding to this later) @Action public void execute(){ statusanimationlabel.seticon(busyicons[0]); busyiconindex = 0; busyicontimer.start(); progressbar.setvisible(true); progressbar.setindeterminate(true); jbutton1.setenabled(false); task = new Task(); task.addpropertychangelistener(propertychangelistener); task.execute(); // just like run, different from this execute private void runexecute() throws IOException{ String dir = this.direction.getselecteditem().tostring(); int mm = Integer.parseInt(this.mismatch.getValue().toString()); int gcm = Integer.parseInt(this.gcmin.getValue().toString()); boolean trans = this.transitions.isselected(); String srch = this.search.gettext(); private Task task; class Task extends SwingWorker<Void, Void> { /* * Main task. Executed in background thread. */ @Override public Void doinbackground() throws IOException { runexecute(); return null; /* * Executed in event dispatch thread */ public void done() {

// Beep Toolkit.getDefaultToolkit().beep(); // reset the status bar busyicontimer.stop(); statusanimationlabel.seticon(idleicon); progressbar.setvisible(false); progressbar.setvalue(0); // enable the execute button jbutton1.setenabled(true); /** * Invoked when task's progress property changes. */ public void propertychange(propertychangeevent evt) { if ("progress" == evt.getpropertyname()) { int progress = (Integer) evt.getnewvalue(); progressbar.setindeterminate(false); progressbar.setvisible(false); progressbar.setvalue(progress); PropertyChangeListener propertychangelistener = new PropertyChangeListener() { ; public void propertychange(propertychangeevent propertychangeevent) { String property = propertychangeevent.getpropertyname(); c. Double-click on the button and set the action to execute BUILDING THE OUTPUT 1. Add another Panel below the input and name it Output 2. Drag a Table Control object into that new Output Pane a. Change the variable name to results

3. Go to the source view and add the following line before the execute method (required import of DefaultTableModel) a. The table model controls the jtable content private DefaultTableModel model = new DefaultTableModel(); 4. Let s add a label for the total number in the result set a. Drag a Label between the top of the Table and the Panel b. Set the text to --- c. Change the variable name to resultsize

5. Now we need to write the methods to process the input a. Create a new package called compute with a new method named Compute b. Replace this class with the code provided at the end of this tutorial c. Go back to GisoDemo and enter the source view i. Add the following code the end of the runexecute method results.setautocreaterowsorter(true); model = new DefaultTableModel(); Compute c = new Compute(inFile, dir, trans, mm, gcm, srch, model); results.setmodel(model); this.resultsize.settext(model.getrowcount() + " Results"); 6. We need to assign the new DefaultTableModel to the jtable a. In design view, select the jtable: Properties model Set jtable s model property using = Custom code, jtable1.setmodel = model 7. The last thing we ll cover is the creation of menu items with preset values a. In design view, go to the Inspector window (lower-left) and right-click on menubar Add menu b. Change the variable name to presetmenu and set the text to Presets c. Drag it to the second position d. Right-click on presetmenu in the Inspector and add three menu items (Add From Palette Menu Item) i. Change the variable name to notrans and set the text to No Trans ii. Change the variable name to trans and set the text to Trans

iii. Change the variable name to reverse and set the text to Reverse e. We need to add the actions to the source (we still have to add the file from the GUI) @Action public void notrans(){ this.direction.setselectedindex(0); this.mismatch.setvalue(25); this.gcmin.setvalue(25); this.transitions.setselected(false); this.search.settext("atgaag"); @Action public void trans(){ this.direction.setselectedindex(0); this.mismatch.setvalue(25); this.gcmin.setvalue(25); this.transitions.setselected(true); this.search.settext("atgaag"); @Action public void reverse(){ this.direction.setselectedindex(1); this.mismatch.setvalue(25); this.gcmin.setvalue(25); this.transitions.setselected(true); this.search.settext("atgaag"); f. Back in the Design view, click on Presets in the menu bar and add the appropriate action to each of the menu items 8. That s it! Clean and Build then Run (a sequence file is also provided in this document) 9. Additionally, to change the application title and About box, go to gisodemo.resources and edit GisoDemoAboutBox.properties and GisoDemoApp.properties

COMPUTE.java package compute; import java.io.bufferedreader; import java.io.file; import java.io.filereader; import java.io.ioexception; import javax.swing.table.defaulttablemodel; /** * * @author Ray */ public class Compute { StringBuilder sequence = null; boolean transitions = false; int mismatch = 0; int gcmin = 0; String search = null; String direction = null; DefaultTableModel model = null; public Compute(File f, String direction, boolean transitions, int mismatch, int gcmin, String search, DefaultTableModel model) throws IOException{ this.direction = direction; this.transitions = transitions; this.mismatch = mismatch; this.gcmin = gcmin; this.search = search; this.model = model; this.sequence = new StringBuilder(); FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); String s; String seqheader = "", accession = ""; while((s = br.readline())!= null) { if(s.charat(0) == '>'){ seqheader = s; // 0=gi, 1=gi-number, 2=from datasource, 3=accession, 4=locus String[] t = s.split(" "); accession = t[3]; else { sequence.append(s.touppercase()); fr.close(); if(direction.equalsignorecase("reverse")){ StringBuilder t = new StringBuilder(); for(int i=this.sequence.length()-1; i>=0; i--){ t.append(this.sequence.charat(i)); this.sequence.delete(0, this.sequence.length()); this.sequence = t; model.addcolumn("match"); model.addcolumn("offset"); model.addcolumn("mismatch%"); model.addcolumn("gc%");

this.compute(false); private void compute(boolean sortkey) { // iterate over the sequence boolean loop = true; int pos = 0; while (loop) { boolean match = false; String v = sequence.substring(pos, pos + search.length()); if(transitions){ this.trans(v, search, pos); else { this.exact(v, search.touppercase(), pos); if (sequence.length() - search.length() == pos) { loop = false; pos++; private void exact(string v, String seq, int offset) { double mis = 0.0d; double gc = 0.0d; boolean match = false; StringBuilder s = new StringBuilder(); // compare each nucleotide for (int i = 0; i < v.length(); i++) { char n = seq.charat(i); // the search sequence char t = v.charat(i); s.append(t); if(t == 'C' t == 'G'){ gc += 100/v.length(); if(n!= t){ mis += 100/v.length(); if (i + 1 == v.length()) { if(mis <= this.mismatch && gc >= this.gcmin){ match = true; if(match){ Object[] newrow = {s.tostring(), offset, mis, gc; model.addrow(newrow); private void trans(string v, String seq, int offset) { double mis = 0.0d; double gc = 0.0d; int length = v.length(); boolean match = false; StringBuilder s = new StringBuilder(); // compare each nucleotide

for (int i = 0; i < length; i++) { char n = seq.charat(i); // the search sequence char t = v.charat(i); s.append(t); if(t == 'C' t == 'G'){ gc += 100/length; if(n == 'A' n == 'C' n == 'G' n == 'T'){ if(n!= t){ mis += 100/length; else if(n == 'a' n == 'g'){ if(t == 'C' t == 'T'){ mis += 100/length; else if(n == 'c' n == 't'){ if(t == 'A' t == 'G'){ mis += 100/length; if (i + 1 == v.length()) { if(mis <= this.mismatch && gc >= this.gcmin){ match = true; if(match){ Object[] newrow = {s.tostring(), offset, mis, gc; model.addrow(newrow);

SAMPLE SEQUENCE >gi gi-number from accession locus ATGACCGACCTCTTGAGAAGTGTTGTCACCGTAATTGATGTTTTCTACAA ATACACCAAGCAAGATGGGGAGTGTGGCACACTGAGCAAGGGTGAACTAA AGGAACTTCTGGAGAAAGAGCTTCATCCAGTTCTGAAGAACCCAGATGAT CCAGACACAGTGGATGTCATCATGCATATGCTGGATCGAGATCATGACAG AAGATTGGACTTTACTGAGTTTCTTTTGATGATATTCAAGCTGACTATGG CCTGCAACAAGGTCCTCAGCAAAGAATACTGCAAAGCTTCAGGGTCAAAG AAGCATAGGCGTGGTCACCGACACCAAGAAGAAGAAAGTGAAACAGAAGA GGATGAAGAGGATACACCAGGACATAAATCAGGTTACAGACATTCAAGTT GGAGTGAGGGAGAGGAGCATGGATATAGTTCTGGGCACTCAAGGGGAACT GTGAAATGTAGACATGGGTCCAACTCCAGGAGGCTAGGAAGACAAGGTAA TTTATCCAGCTCTGGGAACCAAGAGGGATCTCAGAAAAGATACCACAGGT CCAGCTGTGGTCATTCATGGAGTGGTGGCAAAGACAGACATGGTTCCAGC TCTGTAGAACTGAGAGAAAGAATAAACAAGTCACACATTAGCCCTTCTAG GGAATCTGGGGAGGAGTATGAATCTGGATCTGGATCAAACAGTTGGGAAA GGAAAGGTCATGGTGGTCTGTCATGTGGATTGGAGACTAGTGGGCATGAA TCAAACTCTACTCAGTCAAGAATTAGAGAACAAAAGCTTGGGTCTAGCTG TTCAGGTTCAGGAGACAGTGGGAGGCGAAGTCATGCATGTGGTTATAGCA ATTCAAGTGGGTGTGGAAGGCCACAAAATGCTTCAAGTTCTTGTCAGTCA CATAGATTTGGAGGGCAAGGAAATCAATTTAGCTATATTCAGTCAGGCTG TCAGTCAGGAATTAAGGGAGGACAAGGCCATGGCTGTGTCTCAGGAGGTC AGCCCTCTGGATGTGGTCAACCTGAGTCTAACCCCTGTAGTCAGTCCTAT AGTCAGAGAGGATATGGAGCTAGAGAAAATGGTCAACCACAGAACTGTGG AGGACAATGGAGAACAGGCTCAAGTCAGTCCTCTTGCTGTGGACAATATG GGTCTGGAGGTAGCCAGTCTTGTAGTAATGGTCAACATGAATATGGTTCC TGTGGCCGCTTTTCAAACTCTTCTAGTTCAAATGAATTTTCCAAATGTGA TCAATATGGGTCTGGTTCAAGTCAGTCTACTAGCTTTGAACAACATGGAA CAGGCTTGAGTCAGTCCTCTGGGTTCGAACAACATGTATGTGGCTCAGGT CAAACTTGTGGCCAGCATGAGTCTACATCAAGTCAATCCTTGGGCTATGA CCAGCATGGGTCTAGCTCAGGTAAGACATCTGGCTTTGGACAACATGGGT CTGGCTCAGGTCAGTCCTCTGGCTTTGGACAATGTGGGTCAGGCTCAGGT CAGTCCTCTGGCTTTGGACAGCATGGGTCTGTCTCAGGACAATCCTCTGG TTTTGGACAGCATGGGTCTGTCTCAGGACAATCCTCTGGTTTTGGACAAC ATGAGTCTAGATCACGTCAGTCTAGCTATGGCCAACATGGTTCTGGCTCA AGTCAATCATCTGGCTATGGCCAATATGGGTCTAGAGAGACATCTGGCTT TGGACAACATGGGTTGGGCTCAGGTCAATCCACTGGCTTTGGCCAATATG GATCGGGCTCAGGTCAGTCCTCTGGCTTTGGACAACATGGGTCTGGCTCA GGACAATCCTCTGGCTTTGGACAACATGAGTCTAGATCAGGTCAGTCTAG TTATGGCCAACACAGTTCTGGCTCAAGTCAGTCATCTGGCTATGGCCAAC ATGGGTCTAGACAGACATCTGGCTTTGGACAACATGGGTCAGGCTCAAGT CAATCCACTGGCTTTGGCCAATATGGATCAGGCTCAGGTCAGTCCTCTGG CTTTGGACAACATGTTTCTGGCTCAGGACAATCCTCTGGTTTTGGACAAC ATGAGTCTAGATCAGGTCATTCTAGCTATGGCCAACATGGTTTTGGCTCA AGTCAATCATCTGGCTATGGTCAACATGGGTCAAGTTCAGGACAGACATC TGGATTTGGACAACACGAGTTAAGCTCAGGTCAGTCTTCCAGCTTTGGCC AACATGGATCAGGCTCAGGTCAGTCCTCTGGCTTTGGACAACATGGGTCT GGCTCAGGACAATCCTCTGGCTTTGGACAACATGAGTCTAGATCAGGTCA GTCTAGCTATGGCCAACACAGTTCTGGCTCAAGTCAGTCATCTGGCTATG GCCAACATGGGTCTAGACAGACATCTGGCTTTGGACAACATGGGTCAGGC TCAAGTCAATCCACTGGCTTTGGCCAATATGGATCAGGCTCAGGTCAGTC CGCTGGCTTTGGACAACATGGGTCTGGCTCAGGACAATCCTCTGGCTTTG GACAGCATGAGTCTAGATCACATCAGTCCAGCTATGGCCAACATGGTTCT GGCTCAAGTCAATCATCTGGCTATGGTCAACATGGGTCAAGTTCGGGACA GACATCTGGCTTTGGACAACACAGGTCAAGCTCAGGTCAATACTCTGGCT TTGGACAACATGGATCAGGCTCAGGTCAGTCCAGTGGCTTTGGACAACAT GGGACTGGCTCAGGACAATACTCTGGTTTTGGACAACATGAGTCTAGATC

ACATCAGTCTAGCTATGGCCAACATGGTTCTGGCTCAAGTCAGTCATCTG GCTATGGTCAACATGGGTCAAGTTCAGGACAGACTTTTGGATTTGGACAA CACAGGTCAGGCTCAGGTCAATCCTCTGGCTTTGGCCAACATGGATCAGG CTCAGGTCAGTCCTCTGGCTTTGGACAACATGAGTCAGGCTCAGGAAAAT CCTCTGGCTTTGGACAGCATGAGTCTAGATCAAGTCAGTCTAATTATGGC CAACATGGTTCTGGCTCAAGTCAGTCATCTGGCTATGGTCAACATGGGTC TAGTTCAGGACAGACAACTGGCTTTGGACAACACAGGTCAAGCTCAGGCC AATACTCAGGCTTTGGACAACATGGATCAGGCTCAGATCAGTCCTCTGGC TTTGGACAACATGGGACTGGTTCAGGACAATCCTCTGGTTTTGGACAATA TGAGTCTAGATCACGTCAGTCTAGCTATGGCCAACATGGTTCTGGCTCAA GTCAATCATCTGGCTATGGTCAACATGGGTCAAATTCAGGACAGACATCT GGATTTGGACAACACAGGCCAGGCTCAGGTCAGTCCTCTGGCTTTGGCCA ATATGGATCGGGCTCAGGTCAGTCTTCTGGCTTTGGACAACATGGGTCAG GCACAGGTAAATCCTCTGGCTTTGCACAGCATGAGTACAGATCAGGTCAG TCTAGCTATGGCCAACATGGTACTGGCTCCAGTCAATCATCTGGCTGTGG CCAACATGAGTCTGGCTCAGGTCCAACCACAAGTTTTGGACAGCATGTGT CTGGCTCAGACAATTTCTCTAGTTCTGGACAACATATATCTGACTCAGGT CAGTCCACTGGATTTGGCCAATATGGTTCAGGCTCAGGTCAATCAACTGG CTTGGGCCAGGGTGAATCTCAACAAGTAGAGTCAGGATCCACAGTTCATG GGAGACAGGAAACTACTCATGGTCAGACAATAAATACCACTAGACATAGC CAGTCTGGTCAAGGACAATCCACACAGACAGGGTCCAGGGTAACTAGAAG ACGAAGATCTAGCCAAAGTGAGAACAGTGACAGTGAAGTGCACTCAAAGG TCTCACACAGACATTCAGAACACATTCACACACAAGCTGGATCTCACTAC CCAAAGTCAGGATCCACAGTTCGCAGAAGACAAGGAACTACTCATGGACA GAGAGGAGATACCACTAGACATGGCCATTCTGGTCATGGACAGTCTACAC AGACAGGTTCCAGAACATCTGGAAGACAGAGATTTAGCCACAGTGATGCC ACTGACAGTGAAGTGCACTCAGGGGTCTCACATAGACCACACTCACAAGA ACAAACTCACAGCCAAGCTGGATCTCAACATGGAGAGTCAGAATCCACAG TTCATGAGAGACATGAAACTACTTATGGACAGACAGGAGAGGCCACTGGA CATGGCCACTCTGGTCATGGACAGTCCACACAGAGAGGGTCCAGGACAAC TGGAAGAAGGGGATCTGGCCATAGTGAGTCCAGTGACAGTGAAGTGCACT CAGGGGGCTCACACAGACCACAATCACAAGAACAAACTCATGGCCAAGCC GGATCTCAACATGGAGAGTCAGGATCCACAGTTCATGGGAGACACGGAAC TACTCATGGACAGACAGGAGATACCACTAGACATGCCCACTATCATCATG GAAAATCCACACAGAGAGGGTCCAGTACAACTGGAAGAAGGGGATCTGGC CACAGTGAGTCCAGTGACAGTGAAGTGCACTCAGGGGGCTCGCACACACA TTCAGGACACACTCACGGCCAAAGTGGATCTCAACATGGAGAGTCAGAAT CCATAATTCATGACAGACACAGAATTACTCATGGACAGACAGGAGATACC ACTAGACATTCCTACTCTGGTCATGAACAAACCACACAGACAGGGTCCAG GACAACTGGAAGACAGAGAACTAGCCACAGTGAGTCCACTGACAGTGAAG TGCACTCAGGGGGCTCACACAGACCACACTCACGAGAACACACTTACGGC CAAGCCGGATCTCAACATGAAGAGCCAGAATTCACAGTTCATGAGAGACA CGGAACTACTCATGGACAGATAGGAGATACCACTGGACATTCCCACTCTG GTCATGGACAGTCCACACAGAGAGGGTCCAGGACAACTGGAAGACAGAGA TCTAGCCACAGTGAGTCCAGTGACAGTGAAGTGCACTCAGGGGTCTCACA CACACATACAGGACACACTCATGGTCAAGCTGGATCTCAACATGGACAGT CAGAATCCATAGTTCCTGAGAGACATGGAACTACTCATGGACAGACAGGA GATACCACTAGACATGCCCACTATCATCATGGATTAACCACACAGACAGG GTCCAGGACTACTGGAAGAAGGGGATCTGGCCACAGTGAGTACAGTGACA GTGAAGGGTACTCAGGAGTCTCACATACACATTCAGGACACACTCATGGC CAAGCCAGATCTCAACATGGAGAGTCAGAATCCATAGTTCATGAGAGACA TGGAACTATACATGGACAGACAGGCGATACCACCAGACATGCCCACTCTG GTCATGGACAGTCCACACAGACAGGGTCCAGGACCACTGGAAGAAGGTCA TCTGGCCACAGTGAGTACAGTGACAGTGAAGGGCACTCAGGGTTCTCACA AAGACCACACTCACGAGGACACACTCACGGCCAGGCTGGATCTCAACATG GAGAGTCAGAATCCATAGTTGACGAGAGACATGGAACTACTCATGGACAG ACAGGAGATACCAGTGGACATTCTCAATCTGGTCATGGACAGTCCACACA

GTCAGGATCCAGTACAACTGGAAGAAGGAGATCTGGCCACAGTGAGTCCA GTGACAGTGAAGTGCACTCAGGGGGCTCACATACACATTCAGGACACACA CACAGCCAAGCCAGGTCTCAACATGGAGAGTCAGAATCCACAGTTCACAA GAGACACCAAACTACTCATGGACAGACAGGAGATACCACTGAACATGGCC ACCCTAGTCATGGACAAACCATACAGACAGGGTCCAGGACAACTGGAAGA AGGGGATCTGGCCACAGTGAGTACAGTGACAGTGAAGGGCCCTCAGGGGT CTCACACACACATTCAGGACACACTCACGGTCAAGCTGGATCTCACTATC CAGAGTCAGGATCCTCAGTTCATGAGAGACACGGAACTACTCATGGACAA ACAGCAGATACCACTAGACATGGCCACTCTGGTCATGGACAGTCCACACA GAGAGGGTCCAGGACAACTGGAAGAAGGGCATCTGGCCACAGTGAGTACA GTGACAGTGAAGGGCACTCAGGGGTCTCACACACACATTCAGGACACGCT CATGGCCAAGCCGGATCTCAACATGGAGAGTCAGGATCCTCAGTTCATGA GAGACACGGAACTACTCATGGACAGACAGGAGATACCACTAGACATGCTC ACTCTGGTCATGGACAGTCCACACAGAGAGGGTCAAGGACAGCTGGAAGA AGGGGATCTGGCCACAGTGAGTCCAGTGACAGTGAAGTGCACTCAGGGGT CTCACACACACATTCAGGACACACTTATGGCCAAGCCAGATCTCAACATG GAGAGTCAGGATCTGCCATTCACGGGAGACAGGGAACTATACATGGACAG ACAGGAGATACCACTAGACATGGCCAGTCTGGTCATGGACAGTCCACACA GACAGGTTCCAGGACAACTGGAAGACAAAGATCTAGTCACAGTGAGTCCA GTGATAGTGAAGTGCACTCAGAGGCCTCACCCACACATTCAGGACACACT CACAGCCAAGCCGGATCTCGACATGGACAGTCAGGATCCTCAGGTCATGG GAGACAGGGAACTACTCATGGACAGACAGGAGATACCACTAGACATGCCC ACTATGGTTATGGACAATCCACACAGAGAGGGTCCAGGACAACTGGAAGA AGGGGATCTGGCCACAGTGAGTCCAGTGACAGTGAAGTGCACTCATGGGG CTCACACACACATTCAGGACACATTCAGGGCCAAGCTGGATCTCAACAAA GACAGCCAGGATCCACAGTTCATGGGAGACTGGAAACTACTCATGGACAG ACAGGAGATACCACTAGACATGGCCATTCTGGTTATGGACAATCCACACA GACAGGTTCCAGATCTAGTAGAGCAAGTCATTTTCAGTCACATAGTAGTG AAAGGCAAAGGCATGGATCAAGTCAGGTTTGGAAACATGGCAGCTATGGA CCTGCAGAATATGACTATGGGCACACTGGGTATGGGCCTTCTGGTGGCAG CAGAAAAAGCATCAGTAATTCTCACCTTTCATGGTCAACAGACAGCACTG CAAACAAGCAACTGTCTAGACATTGA