import java.awt.*; import java.applet.*; import java.io.*; public class morse extends Applet implements Runnable { int maxMessages = 5; String decodeString[] = { "GEC" , "SOS", "ICEBERG AHEAD", "SOS TITANIC", "MORE TEA VICAR", "RULE BRITANNIA" }; StringBuffer guessString; boolean guessed = false, loaded = false; TextField tf; Portal p; ImageButton signalLight, decode; int symbol, speed, imageCount, imageCountOld; MorseCodes mc; Image message, text, decode_on, decode_off; int unitSpeed = 200; MediaTracker track; Image radio, button_on, button_off; AudioClip dot, dash; Thread engine; public void init() { setupDisplay(); loadStuff(); } public void setupDisplay() { resize(433, 182); setBackground(new Color(0, 0, 0)); setLayout(null); } public void start() { if (engine == null) { engine = new Thread(this); engine.start(); } } public void stop() { engine.stop(); engine = null; } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { if ( !loaded ) { if (imageCountOld != imageCount) { g.setColor(Color.black); g.fillRect(0, 0, size().width, size().height); g.setColor(Color.white); g.drawString("Loading", 200, 140); g.drawRect(200, 80, 100, 20); g.setColor(Color.red); g.fillRect(201, 81, (int)((imageCount/5.0)*100)-1, 19); if (imageCount == 4) { g.setColor(new Color(0, 49, 0)); g.fillRect(0, 0, size().width, size().height); loaded = true; } imageCountOld = imageCount; } return; } // Change the parameters for the text field if ( tf != null) { tf.move(16, 88); tf.resize(245, 28); tf.setBackground(Color.black); tf.setForeground(new Color(128, 255, 128)); } if ( p != null ) { p.repaint(); } g.drawImage(radio, 0, 0, this); } public void loadStuff() { dot = getAudioClip(getCodeBase(), "dot.au"); dash = getAudioClip(getCodeBase(), "dash.au"); track = new MediaTracker(this); radio = getImage(getCodeBase(), "radio.gif"); track.addImage(radio, 0); button_on = getImage(getCodeBase(), "buton.gif"); track.addImage(button_on, 1); button_off = getImage(getCodeBase(), "butoff.gif"); track.addImage(button_off, 2); decode_on = getImage(getCodeBase(), "decode.gif"); track.addImage(decode_on, 3); } public void run() { int symbol, speed; mc = new MorseCodes(); while ( !loaded ) { imageCount = 0; for (int l=0; l<=3; l++) { if (track.statusID(l, true) != MediaTracker.LOADING) imageCount++; } repaint(); try { Thread.sleep(10); } catch (InterruptedException i) {} } message = createImage(6000, 30); text = createImage(243, 30); // create a scrolling box and add it to this window tf = new TextField(""); tf.setFont(new Font("TimesRoman", Font.BOLD, 20)); add(tf); repaint(); p = new Portal(message, 16, 23, 243, 47, 0, 0); p.startPos(-243); add(p); p.start(); // create a decode button decode = new ImageButton(decode_on, decode_off, 103, 151, 90, 19); add(decode); // create a flashing bulb signalLight = new ImageButton(button_off, button_on, 75, 155, 13, 13); add(signalLight); signalLight.state(false); tf.requestFocus(); while ( true ) { for ( int i=0; i<=maxMessages; i++ ) { guessed = false; tf.setText(""); bleepMessage( decodeString[i].toString() ); // guessed...so display result String gstring = guessString.toString().toUpperCase(); if ( gstring.equals( decodeString[i].toString() ) ) { displayMessage( "YOU GOT IT!" ); } else { displayMessage( "BAD LUCK. THE MESSAGE WAS: "+decodeString[i].toString() ); } } } } public void bleepMessage( String str ) { while (!guessed) { int wi = renderMessage(message, str); renderText(text, "*** INCOMING MESSAGE ***"); p.setImage(text); p.setFlashing(true); p.setFlashSpeed(250); p.startPos(0); try { Thread.sleep(2000); } catch ( InterruptedException i ) {}; renderText(text, ""); p.setImage(text); p.setFlashing(true); p.setFlashSpeed(250); p.startPos(0); try { Thread.sleep(300); } catch ( InterruptedException i ) {}; p.setImage(message); p.setScrollSpeed(10, 500); p.startPos(-243); p.repaint(); for (int pos=0; !guessed && pos < str.length(); pos++) { // // process each character in turn mc.setCode((int)str.charAt(pos)); symbol = mc.nextCode(); speed = 0; if ( symbol == '-' ) speed = 4; if ( symbol == '.' ) speed = 2; if ( symbol == ' ' ) speed = 7; if ( symbol == 'x' ) speed = 0; while ( speed != 0 ) { if ( symbol == '-' ) dash.play(); if ( symbol == '.' ) dot.play(); if ( symbol == ' ' ) speed = 0; if ( symbol != ' ' ) { signalLight.state(true); try { Thread.sleep((speed-1)*unitSpeed); } catch ( InterruptedException i ) {}; signalLight.state(false); try { Thread.sleep(unitSpeed); } catch ( InterruptedException i ) {}; } symbol = mc.nextCode(); if ( symbol == '-' ) speed = 4; if ( symbol == '.' ) speed = 2; if ( symbol == ' ' ) speed = 7; if ( symbol == 'x' ) speed = 0; } if ( !guessed ) try { Thread.sleep(3*unitSpeed); } catch ( InterruptedException i ) {}; } while ( (!guessed) && ( p.getX() < wi ) ) { try { Thread.sleep(100); } catch (InterruptedException i) {}; } if (!guessed) { renderText(text, "*** END OF MESSAGE ***"); p.setImage(text); p.setFlashing(true); p.setFlashSpeed(250); p.startPos(0); try { Thread.sleep(3000); } catch ( InterruptedException i ) {}; } } } public void displayMessage( String str ) { renderText(text, ""); p.setImage(text); p.setFlashing(true); p.setFlashSpeed(250); p.startPos(0); try { Thread.sleep(300); } catch ( InterruptedException i ) {}; int wi = renderMessage(message, str, 1); p.setImage(message); p.setScrollSpeed(20, 50); p.startPos(-243); p.repaint(); while ( wi > p.getX()) { try { Thread.sleep(100); } catch (InterruptedException i) {}; } } public int renderMessage(Image i, String m) { Graphics g = i.getGraphics(); StringBuffer codeString = new StringBuffer(256); for (int pos=0; pos < m.length(); pos++) { // // process each character in turn mc.setCode((int)m.charAt(pos)); symbol = mc.nextCode(); if ( symbol == '-' ) speed = 4; if ( symbol == '.' ) speed = 2; if ( symbol == ' ' ) speed = 7; while ( symbol != 'x' ) { if ( symbol == '-' ) codeString.append("-"); if ( symbol == '.' ) codeString.append("."); if ( symbol == ' ' ) codeString.append(" "); symbol = mc.nextCode(); } codeString.append(" "); } g.setColor(Color.black); g.fillRect(0, 0, 6000, 30); Font msgFont = new Font("Courier", Font.BOLD, 30); g.setFont(msgFont); g.setColor(new Color(128, 255, 128)); g.drawString(codeString.toString(), 0, 30); FontMetrics fm = getFontMetrics( msgFont); return (fm.stringWidth(codeString.toString())); } public int renderMessage(Image i, String m, int x) { Graphics g = i.getGraphics(); g.setColor(Color.black); g.fillRect(0, 0, 6000, 30); Font msgFont = new Font("Courier", Font.BOLD, 20); g.setFont(msgFont); g.setColor(new Color(128, 255, 128)); g.drawString(m, 0, 30); FontMetrics fm = getFontMetrics( msgFont); return (fm.stringWidth(m)); } public void renderText(Image i, String m) { Graphics g = i.getGraphics(); g.setColor(Color.black); g.fillRect(0, 0, 6000, 30); Font msgFont = new Font("Courier", Font.BOLD, 15); g.setFont(msgFont); g.setColor(new Color(128, 255, 128)); FontMetrics fm = getFontMetrics( msgFont); int wi = fm.stringWidth(m); g.drawString(m, (247/2)-(wi/2), 30); } public boolean action(Event e, Object arg) { Class theClass; if ( e.target == decode) { guessed = true; guessString = new StringBuffer(tf.getText()); return true; } return false; } } class MorseCodes { int maxCodes = 42; int MCodes[][] = { { ' ', ' ', 'x', ' ', ' ', ' ', ' ', ' ' }, { 'A', '.', '-', 'x', ' ', ' ', ' ', ' ' }, { 'B', '-', '.', '.', '.', 'x', ' ', ' ' }, { 'C', '-', '.', '-', '.', 'x', ' ', ' ' }, { 'D', '-', '.', '.', 'x', ' ', ' ', ' ' }, { 'E', '.', 'x', ' ', ' ', ' ', ' ', ' ' }, { 'F', '.', '.', '-', '.', 'x', ' ', ' ' }, { 'G', '-', '-', '.', 'x', ' ', ' ', ' ' }, { 'H', '.', '.', '.', '.', 'x', ' ', ' ' }, { 'I', '.', '.', 'x', ' ', ' ', ' ', ' ' }, { 'J', '.', '-', '-', '-', 'x', ' ', ' ' }, { 'K', '-', '.', '-', 'x', ' ', ' ', ' ' }, { 'L', '.', '-', '.', '.', 'x', ' ', ' ' }, { 'M', '-', '-', 'x', ' ', ' ', ' ', ' ' }, { 'N', '-', '.', 'x', ' ', ' ', ' ', ' ' }, { 'O', '-', '-', '-', 'x', ' ', ' ', ' ' }, { 'P', '.', '-', '-', '.', 'x', ' ', ' ' }, { 'Q', '-', '-', '.', '-', 'x', ' ', ' ' }, { 'R', '.', '-', '.', 'x', ' ', ' ', ' ' }, { 'S', '.', '.', '.', 'x', ' ', ' ', ' ' }, { 'T', '-', 'x', ' ', ' ', ' ', ' ', ' ' }, { 'U', '.', '.', '-', 'x', ' ', ' ', ' ' }, { 'V', '.', '.', '.', '-', 'x', ' ', ' ' }, { 'W', '.', '-', '-', 'x', ' ', ' ', ' ' }, { 'X', '-', '.', '.', '-', 'x', ' ', ' ' }, { 'Y', '-', '.', '-', '-', 'x', ' ', ' ' }, { 'Z', '-', '-', '.', '.', 'x', ' ', ' ' }, { '1', '.', '-', '-', '-', '-', 'x', ' ' }, { '2', '.', '.', '-', '-', '-', 'x', ' ' }, { '3', '.', '.', '.', '-', '-', 'x', ' ' }, { '4', '.', '.', '.', '.', '-', 'x', ' ' }, { '5', '.', '.', '.', '.', '.', 'x', ' ' }, { '6', '-', '.', '.', '.', '.', 'x', ' ' }, { '7', '-', '-', '.', '.', '.', 'x', ' ' }, { '8', '-', '-', '-', '.', '.', 'x', ' ' }, { '9', '-', '-', '-', '-', '.', 'x', ' ' }, { '0', '-', '-', '-', '-', '-', 'x', ' ' }, { '.', '.', '-', '.', '-', '.', '-', 'x' }, { ',', '-', '-', '.', '.', '-', '-', 'x' }, { ':', '-', '-', '-', '.', '.', '.', 'x' }, { '?', '.', '.', '-', '-', '.', '.', 'x' }, { '-', '-', '.', '.', '.', '.', '-', 'x' }, { '/', '-', '.', '.', '-', '.', 'x', ' ' } }; int currentCode, currentPos; public boolean setCode( int c ) { boolean flag = false; for ( int i=0; i < maxCodes; i++ ) { if ( MCodes[i][0] == c ) { flag = true; currentCode = i; currentPos = 0; } } return flag; } public int nextCode() { currentPos++; return MCodes[currentCode][currentPos]; } } -012358:<JLOPQST]^dfl=MN   ,  & .sndH@=/,4~(.snd$@=/,4~(Memory Summary on Mon Mar 23 15:30:00 1998 End of heap Count Total Size Avg Size Flags Class 331 43744 132 -RIV-X-- java/lang/Class 10 700 70 -RIV-XS- java/lang/Thread 3 160 53 -RIV-X-- java/lang/ThreadGroup 2286 139440 60 -RIV---- [C 2263 68512 30 -RIV-XS- java/lang/String 22 1016 46 -RIV--S- netscape/util/Hashtable 42 1384 32 -RIV---- [Lnetscape/security/Target; 562 28376 50 -RIV---- [B 32 9752 304 -RIV---- [I 22 1176 53 -RIV--S- netscape/security/Target 32 988 30 -RIV--S- java/lang/StringBuffer 4 144 36 --I----- [Ljava/lang/Thread; 1 40 40 -RIV--S- java/util/Properties 66 30844 467 --I----- [Ljava/util/HashtableEntry; 77 1544 20 -RIV---- [Lnetscape/security/Principal; 627 18888 30 -RIV---- java/util/HashtableEntry 12 644 53 -RIV---F sun/awt/windows/WPanelPeer 30 1428 47 -RIV---F sun/awt/windows/WLabelPeer 10 1516 151 -RIV--S- netscape/security/ImgPanel 64 1968 30 -RIV--S- java/util/Hashtable 13 404 31 -RIV---- netscape/security/XYLayout 28 844 30 -RIV---- java/awt/Insets 30 2380 79 -RIV--S- java/awt/Label 18 432 24 -RIV---- netscape/util/PrimitiveCoder 50 4732 94 -RIV---- netscape/security/RszHints 84 5500 65 -RIV---- [Ljava/lang/Object; 3 60 20 -RIV--S- java/io/FileDescriptor 11 236 21 -RIV---- java/awt/Dimension 10 232 23 -RIV--S- netscape/security/PrivilegeTable 12 848 70 -RIV---- java/awt/Button 7 264 37 -RIV---- sun/io/CharToByte8859_1 20 760 38 --I----- [Ljava/awt/Component; 12 564 47 -RIV---F sun/awt/windows/WButtonPeer 1 40 40 -RIV--S- netscape/security/UserAwtDialog 101 3884 38 -RIV---F sun/awt/windows/WGraphics 155 5996 38 -RIV---F sun/awt/windows/StandardGUIEvent 7 376 53 -RIV---F sun/awt/windows/WFramePeer 14 532 38 -RIV--SF java/awt/Font 208 12964 62 -RIV--S- java/awt/Event 1 136 136 -RIV---- netscape/security/FrmHelp 1 76 76 -RIV---- java/awt/Checkbox 1 44 44 -RIV---F sun/awt/windows/WCheckboxPeer 22 700 31 -RIV--S- java/util/Locale 2 32 16 -RIV---- netscape/net/URLStreamHandler 6 92 15 -RIV-X-- java/lang/Object 1 16 16 -RIV---- java/net/InetAddressImpl 1 16 16 -RIV---- java/net/UnknownContentHandler 41 956 23 -RIV--S- java/awt/Color 3 160 53 -RIV--S- sun/awt/windows/WFontMetrics 4 228 57 -RIV---F sun/awt/windows/WScrollbarPeer 1 236 236 -RIV---- netscape/security/FrmCert 2 48 24 -RIV-X-- java/lang/ThreadDeath 8 252 31 -RIV---- java/awt/Rectangle 1 24 24 -RIV--S- java/lang/Runtime 1 32 32 -RIV--S- netscape/security/AppletSecurity 5 216 43 -RIV---- [Ljava/lang/String; 3 96 32 --I----- [Ljava/lang/ThreadGroup; 11 336 30 -RIV--S- java/util/Vector 1 32 32 -RIV--S- java/awt/FlowLayout 1 32 32 -RIV---- netscape/applet/Console 1 136 136 -RIV---- netscape/applet/ConsoleFrame 1 44 44 -RIV--S- java/awt/GridBagLayout 5 480 96 -RIV--S- java/awt/GridBagConstraints 1 96 96 -RIV---- java/awt/TextArea 1 76 76 -RIV---- netscape/applet/HorizontalRule 7 208 29 -RIV---- netscape/applet/AppletEvent 1 28 28 -RIV--S- sun/awt/windows/WToolkit 4 376 94 -RIV--S- java/awt/Scrollbar 7 384 54 -RIV---F sun/awt/windows/PaintEvent 1 48 48 -RIV---F sun/awt/windows/WTextAreaPeer 3 136 45 -RIV---F sun/awt/windows/WCanvasPeer 13 316 24 -RIV--S- java/lang/Integer 2 96 48 -RIV---- java/awt/GridBagLayoutInfo 4 4156 1039 -RIV---- [D 1 20 20 -RIV---- netscape/applet/ConsoleInputStream 1 36 36 -RIV---- java/io/PrintStream 1 28 28 -RIV---- java/io/BufferedOutputStream 1 20 20 -RIV--S- netscape/applet/ConsoleOutputStream 1 36 36 -RIV--S- java/io/OutputStreamWriter 1 76 76 -RIV--S- sun/awt/ScreenUpdater 1 40 40 -RIV--S- java/io/BufferedWriter 1 36 36 -RIV---- netscape/applet/AppletProperties 3 68 22 -RIV---- netscape/applet/Mapping 1 28 28 -RIV--S- netscape/applet/AppletThreadKiller 1 40 40 -RIV---- netscape/applet/AppletThreadList 1 12 12 -RIV--S- netscape/net/URLStreamHandlerFactory 1 24 24 -RIV--S- netscape/security/PrivilegeManager 6 416 69 -RIV--S- netscape/security/Principal 52 2836 54 -RIV--S- netscape/security/UserTarget 1 176 176 -RIV---- netscape/security/FrmDetail 2 124 62 -RIV---- netscape/security/ParameterizedStringTarget 1 28 28 -RIV---- [[Lnetscape/security/Privilege; 3 84 28 --I----- [Lnetscape/security/Privilege; 9 216 24 -RIV--S- netscape/security/Privilege 2 44 22 -RIV---- netscape/security/SystemPrivilegeTable 1 196 196 -RIV---- netscape/security/FrmSec 1 84 84 -RIV---- netscape/security/AwtPseudoApplet 1 48 48 -RIV---F sun/awt/windows/WListPeer 1 88 88 -RIV---- java/awt/List 1 32 32 -RIV---- netscape/util/HashtableEnumerator 1 24 24 -RIV--S- java/io/File 1 20 20 -RIV---- java/util/SystemClassLoader 1 24 24 -RIV--S- java/util/StackLookup 1 172 172 --I----- [[Ljava/lang/Object; 1 20 20 -RIV--S- netscape/softupdate/SoftUpdateResourceBundle 1 64 64 -RIV---- netscape/security/ParameterizedTarget 2 80 40 -RIV--S- netscape/applet/MozillaAppletContext 4 188 47 -RIV--S- java/net/URL 2 428 214 -RIV--SF netscape/applet/DerivedAppletFrame 2 92 46 -RIV---- java/awt/BorderLayout 2 44 22 -RIV--S- netscape/applet/EventQueue 2 124 62 -RIV-X-- netscape/applet/AppletThreadGroup 2 184 92 -RIV--SF netscape/applet/AppletClassLoader 2 44 22 -RIV---- netscape/misc/WeakLink 6 184 30 -RIV--S- java/net/InetAddress 2 40 20 -RIV---- [Ljava/net/InetAddress; 2 48 24 -RIV--S- java/lang/Boolean 1 292 292 -RIV---- Headline 2 108 54 -RIV---- sun/awt/windows/WImage 2 72 36 -RIV---- sun/awt/image/OffScreenImageSource 2 152 76 -RIV---F sun/awt/image/ImageRepresentation 1 56 56 --I----- [Ljava/awt/Color; 2 188 94 -RIV---- Portal 1 100 100 -RIV---- morse 1 36 36 -RIV---- sun/awt/ScreenUpdaterEntry 7590 411272 54 Totals L=Locked, R=Resolved, I=Init, V=Verif, P=Prim, X=Sticky, S=Statics, F=Finalizer ================================================================================ -&-H*5:;<=?@       import java.awt.*; import java.applet.*; import java.net.*; class Portal extends Canvas implements Runnable { Thread engine; Image img; int originX, width, height, x, y; int autoSpeed; long delay; boolean scrolling, flashing, flash_show; Portal(Image pimage, int xp, int yp, int w, int h, int as, long t ) { scrolling = true; flashing = false; flash_show = true; autoSpeed = as; delay = t; img = pimage; x = xp; y = yp; width = w; height = h; move(x, y); resize(w, h); } public void startPos(int xpos) { originX = xpos; repaint(); } public void setImage(Image i) { stop(); img = i; flash_show=false; scrolling = false; flashing = false; start(); } public void setFlashing( boolean b) { flash_show = true; flashing = b; scrolling = false; } public void setScrolling( boolean b) { flash_show = true; scrolling = b; flashing = false; } public void setScrollSpeed(int as, long t) { setScrolling(true); autoSpeed = as; delay = t; } public void setFlashSpeed(long t) { setFlashing(true); delay = t; } public int getX() { return originX; } public void paint(Graphics g) { g.translate(-originX, 0); if ( flash_show ) { g.drawImage(img, 0, 0, this); } else { g.setColor(getBackground()); g.fillRect(0, 0, width, height); } } public void update(Graphics g) { paint(g); } public void start() { if (engine == null) { engine = new Thread(this); engine.start(); } } public void stop() { if ( engine != null) engine.stop(); engine = null; } public void run() { while (true) { while ( scrolling ) { originX += autoSpeed; try { Thread.sleep((int)delay); } catch ( InterruptedException i ) {}; repaint(); } while ( flashing ) { if ( flash_show ) flash_show = false; else flash_show = true; try { Thread.sleep(delay); } catch ( InterruptedException i ) {}; repaint(); } } } } class ImageButton extends Canvas implements Runnable { Image current, img1, img2, state; int x, y, w, h; boolean flash; Thread engine; ImageButton(Image i, Image j, int xp, int yp, int wp, int hp) { img1 = i; img2 = j; x = xp; y = yp; w = wp; h = hp; move(x, y); resize(w, h); flash = false; current = img1; state = img1; repaint(); } public void paint(Graphics g) { g.drawImage(current, 0, 0, this); } public void update(Graphics g) { paint(g); } public void flash(boolean f) { flash = f; } public void state(boolean f) { if (f) state = img2; else state = img1; current = state; repaint(); } public boolean getState() { return flash; } public void start() { if (engine == null) { engine = new Thread(this); engine.start(); } } public void stop() { if ( engine != null) engine.stop(); engine = null; } public void run() { while (true) { if ( flash ) { if (current == img1 ) current = img2; else current = img1; repaint(); } else { current = state; // repaint(); } try { Thread.sleep(100); } catch (InterruptedException e) {} } } public boolean mouseDown(Event e, int x, int y) { Event evt = new Event(this, Event.ACTION_EVENT, (Object)this); postEvent(evt); return true; } } -W]lmnopq ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = = > > ? @ A B RE RP `V bX cO d[ eH f_ g_ hD jV kZ rG sV tL uE vG x_ yK {Q ~Q J E E G V V V()I()Ljava/awt/Color;()V(I)V(II)V(IIII)V(IJ)V(J)V(Ljava/awt/Color;)V(Ljava/awt/Graphics;)V(Ljava/awt/Image;)V(Ljava/awt/Image;IIIIIJ)V3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z(Ljava/lang/Runnable;)V(Z)VCode ConstantValue ExceptionsI ImageButtonJLineNumberTableLjava/awt/Image;Ljava/lang/Thread;LocalVariablesPortal SourceFileZ autoSpeedcomponents.javadelay drawImageenginefillRect flash_showflashing getBackgroundgetXheightimgjava/awt/Canvasjava/awt/Componentjava/awt/Graphicsjava/lang/InterruptedExceptionjava/lang/Runnablejava/lang/ThreadmoveoriginXpaintrepaintresizerun scrollingsetColor setFlashSpeed setFlashingsetImagesetScrollSpeed setScrollingsleepstartstartPosstop translateupdatewidthxy  d[kZsVVjVVV`VbXx_g_f_ RNS O* *-pINZ[\]^_` " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7d D8 DA DB RK S? TL UP WH XK YK b: c> d< e8 f: h; i8 jK k8 mH nH oH()V()Z(II)V(J)V(Ljava/awt/Event;)Z(Ljava/awt/Event;II)Z(Ljava/awt/Graphics;)V3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z'(Ljava/awt/Image;Ljava/awt/Image;IIII)V((Ljava/lang/Object;ILjava/lang/Object;)V(Ljava/lang/Runnable;)V(Z)VCode ConstantValue ExceptionsI ImageButtonLineNumberTableLjava/awt/Image;Ljava/lang/Thread;LocalVariablesPortal SourceFileZcomponents.javacurrent drawImageengineflashgetStatehimg1img2java/awt/Canvasjava/awt/Componentjava/awt/Eventjava/awt/Graphicsjava/lang/InterruptedExceptionjava/lang/Runnablejava/lang/Thread mouseDownmovepaint postEventrepaintresizerunsleepstartstatestopupdatewxy  RKXKYKjKnHoHmHWHUPTL D@EW* *+*,************* ***J: %1=BJRVUCE"*J V9E*Ja=E7Y** :*WJc>E) +* *WJ  g8EA*(* *** ** * **  W4:=J& -RSaY]^jklmnopqr ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ TB TF TP TQ `O cX dG fQ gG hJ iX sE uB vE wI xK yN zA zC {M |X }[ ~X X()Ljava/lang/String;()V(I)Ljava/lang/String;(I)V(II)V(III)V(IIII)V(IIIII)V(Ljava/awt/Color;)V'(Ljava/awt/Font;)Ljava/awt/FontMetrics;(Ljava/awt/Font;)V(Ljava/awt/Graphics;)V&(Ljava/lang/Object;)Ljava/lang/String;(Ljava/lang/String;)I,(Ljava/lang/String;)Ljava/lang/StringBuffer;(Ljava/lang/String;)V(Ljava/lang/String;II)V.0Code ConstantValue ExceptionsI ImageButtonLineNumberTableLjava/awt/Color;LocalVariablesPortalScore SourceFileappendarial,helveticacomponents.javacreditsdrawRect drawScore drawStringfillRectgetFontMetricshjava/awt/Canvasjava/awt/Colorjava/awt/Component java/awt/Fontjava/awt/FontMetricsjava/awt/Graphicsjava/lang/Integerjava/lang/Stringjava/lang/StringBuffermovepaintrepaintresizesetColorsetFont stringWidthtoStringvalueOfwwhitexy£ cX~XX|XiXTHUn2**'*(*%*****Z*  -ySTUbcdefgh $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 :d G; GD GE ZP [C \Q ]X _K `P aP j= kB l@ m; n= p> q; rP s; tN vK wK xK()V()Z(II)V(J)V/(LPortal;Ljava/awt/Image;Ljava/awt/Image;IIII)V(Ljava/awt/Event;)Z(Ljava/awt/Event;II)Z(Ljava/awt/Graphics;)V3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z((Ljava/lang/Object;ILjava/lang/Object;)V(Ljava/lang/Runnable;)V(Z)VCode ConstantValue ExceptionsI ImageButton InnerClassesLPortal;LineNumberTableLjava/awt/Image;Ljava/lang/Thread;LocalVariablesPortalPortal$ImageButton Portal$Score SourceFile SyntheticZcomponents.javacurrent drawImageengineflashgetStatehimg1img2java/awt/Canvasjava/awt/Componentjava/awt/Eventjava/awt/Graphicsjava/lang/InterruptedExceptionjava/lang/Runnablejava/lang/Thread mouseDownmovepaint postEventrepaintresizerunsleepstartstatestopthis$0updatewxy  tNWZP`PaPrPwKxKvK_K]X\Q G?H]* *+*,*-* *!**** *!*********OFJJ LMNOP%Q+S7TCUHVPWXX\J]FH"*O ge^<H*OviAH7Y** :*WOkBH) +**WO ] [o;HA*(**** *** **"-TUg`abpqrstuvwx * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B VD VH VR VS fQ iZ jI lS mI nL oZ yG {D |G }K ~M P \ C E O Z ^ Z Z()Ljava/lang/String;()V(I)Ljava/lang/String;(I)V(II)V(III)V(IIII)V(LPortal;IIIII)V(Ljava/awt/Color;)V'(Ljava/awt/Font;)Ljava/awt/FontMetrics;(Ljava/awt/Font;)V(Ljava/awt/Graphics;)V&(Ljava/lang/Object;)Ljava/lang/String;(Ljava/lang/String;)I,(Ljava/lang/String;)Ljava/lang/StringBuffer;(Ljava/lang/String;)V(Ljava/lang/String;II)V.0Code ConstantValue ExceptionsI InnerClassesLPortal;LineNumberTableLjava/awt/Color;LocalVariablesPortalPortal$ImageButton Portal$ScoreScore SourceFile Syntheticappendarial,helveticacomponents.javacreditsdrawRect drawScore drawStringfillRectgetFontMetricshjava/awt/Canvasjava/awt/Colorjava/awt/Component java/awt/Fontjava/awt/FontMetricsjava/awt/Graphicsjava/lang/Integerjava/lang/Stringjava/lang/StringBuffermovepaintrepaintresizesetColorsetFont stringWidththis$0toStringvalueOfwwhitexy£ \eiZZZZoZVJW9**+"*(*)*&*****]6  GIF89a3333̙3333{{{{{ffff33f))ffZZZRRRJJJ333)))!!!,v%H7X8BĆ!FtAC *c #*$X T, S%K&\CI )pG2s 5pAJ". iA ;GIF89a3333̙3333{{{{{ffff33f))ffZZZRRRJJJ333)))!!!,s%H7PĆ!:0(@A7tH@cر#Xb T, Sf X$E)P#˟@dGIF89a3333̙3333{{{{{ffff33f))ffZZZRRRJJJ333)))!!!!,H*\ȰÇ#JHŋ3j1 $Iɓ(S\ɲ˗0cʜI͛8sǐ= JѣH*]PJJիXjʵׯ`ÊKٳhӪSpʝKݻ3:0߿  X[+^̸c bĆǘ3k9%eːJa .w^ͺ빥O4Pgͻ6⧖HnP\G!:S!T%ҫOO}T 0PX\z{wڢm5yP ($ &WU{5T`iwuv]PF(Pi (j 'U\H#R $XFxR@D R]$Xf"! YcR@$JGIF89aZ3333̙3333{{{{{ffff33f))ffZZZRRRJJJ333)))!!!,ZH*\Ȱ!#JHŋ3^@Ǐ Cj(ɓ;\R$IGIF89a"{Zc)!)119k19{!!B9B΄BBcc11罽B!!Ό9BJBJRRZZ{scZc{ss{ ̀@p0Pҏ`ٟ߯! NETSCAPE2.0!GifBuilder 0.3.2 by Yves Piguet!,"@H@0pÇ#JHŋ3jȱG" 0ɑ2dذ!!P4r 9(8hgSH@`MX@ VHrT:( f (P:v V -/ !$(*        % &