<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>30</bug_id>
          
          <creation_ts>2003-08-07 01:31:39 +0200</creation_ts>
          <short_desc>Error Swapping Buffers with JInternalFrame</short_desc>
          <delta_ts>2010-03-24 07:45:44 +0100</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>windows</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>WORKSFORME</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>46</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:45:44 +0100</bug_when>
    <thetext>


---- Reported by moussaba 2003-08-07 13:31:39 ----

When GLcanvas added to a JInternalFrame, when frame is iconized and restored it 
crashes and generates the following exception:

net.java.games.jogl.GLException: Error swapping buffers
	at 
net.java.games.jogl.impl.windows.WindowsOnscreenGLContext.swapBuffers
(WindowsOnscreenGLContext.java:137)
	at net.java.games.jogl.impl.GLContext.invokeGL(GLContext.java:187)
	at net.java.games.jogl.GLCanvas.displayImpl(GLCanvas.java:179)
	at net.java.games.jogl.GLCanvas.display(GLCanvas.java:84)
	at net.java.games.jogl.Animator$1.run(Animator.java:104)
	at java.lang.Thread.run(Thread.java:534)

Below is example source code that generates the exception

*
 * Lesson06.java
 * Modified on August 07, 2003
 * Reproduces the GLException: Error Swapping Buffers when
 * Using JInternalFrame.  Iconize the Internal Frame, restore it and you will
 * get the above mentioned exception.  This does not occur when the main window
 * is iconized.
 * Created on July 16, 2003, 11:30 AM
 * Modified on August 97,2003
 */

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.net.*;
import java.nio.*;
import javax.imageio.*;

import net.java.games.jogl.*;
import net.java.games.jogl.util.*;

/** Port of the NeHe OpenGL Tutorial (Lesson 6)
 * to Java using the Jogl interface to OpenGL.  Jogl can be obtained
 * at http://jogl.dev.java.net/
 *
 * @author Kevin Duling (jattier@hotmail.com)
 */
public class Lesson06
{
  static Animator animator = null;
  static class Renderer
    implements GLEventListener,
               KeyListener
  {
    private float	xrot;				// X Rotation ( NEW )
    private float	yrot;				// Y Rotation ( NEW )
    private float	zrot;				// Z Rotation ( NEW )
    private int[] texture= new int[2];

    /** Called by the drawable to initiate OpenGL rendering by the client.
     * After all GLEventListeners have been notified of a display event, the
     * drawable will swap its buffers if necessary.
     * @param gLDrawable The GLDrawable object.
     */
    public void display(GLDrawable gLDrawable)
    {
      final GL gl = gLDrawable.getGL();
      gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
      gl.glLoadIdentity();						
			// Reset The View
      gl.glTranslatef(0.0f,0.0f,-5.0f);

      gl.glRotatef(xrot,1.0f,0.0f,0.0f);
      gl.glRotatef(yrot,0.0f,1.0f,0.0f);
      gl.glRotatef(zrot,0.0f,0.0f,1.0f);

      gl.glColor3f(1.0f, 1.0f, 1.0f);
      gl.glBindTexture(GL.GL_TEXTURE_2D, texture[0]);
      gl.glBegin(GL.GL_QUADS);
      //Bottom of Cube
        gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, -0.25f, -1.0f);
        gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, -0.25f, -1.0f);
        gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -0.25f,  1.0f);
        gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -0.25f,  1.0f);
      gl.glEnd();

      gl.glBindTexture(GL.GL_TEXTURE_2D, texture[1]);
      gl.glBegin(GL.GL_QUADS);
  // Top Face
          gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f,  0.0f, -1.0f);
          gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f,  0.0f,  1.0f);
          gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f,  0.0f,  1.0f);
          gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f,  0.0f, -1.0f);



      gl.glBegin(GL.GL_QUADS);

        /*gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f,  1.0f);
        gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f,  1.0f);
        gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f,  1.0f,  1.0f);
        gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f,  1.0f,  1.0f);
       */
      // Back Face
      gl.glColor3f(0.0f, 0.4f, 0.0f); // Set The Color To Blue
      gl.glVertex3f(1.0f, -0.25f, -1.0f); // Top Right Of The Quad (Back)
      gl.glVertex3f( -1.0f, -0.25f, -1.0f); // Top Left Of The Quad (Back)
      gl.glVertex3f( -1.0f, 0.0f, -1.0f); // Bottom Left Of The Quad (Back)
      gl.glVertex3f(1.0f, 0.0f, -1.0f); // Bottom Right Of The Quad (Back)

      /*gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
               gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f,  1.0f, -1.0f);
               gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f,  1.0f, -1.0f);
           gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);*/
      // Front Face
      //glColor3f (1.0f, 0.0f, 0.0f);	// Set The Color To Red
      gl.glColor3f(0.0f, 0.4f, 0.0f); // Set The Color To Blue
      gl.glVertex3f(1.0f, 0.0f, 1.0f); // Top Right Of The Quad (Front)
      gl.glVertex3f( -1.0f, 0.0f, 1.0f); // Top Left Of The Quad (Front)
      gl.glVertex3f( -1.0f, -0.25f, 1.0f); // Bottom Left Of The Quad (Front)
      gl.glVertex3f(1.0f, -0.25f, 1.0f); // Bottom Right Of The Quad (Front)


        // Right face
        gl.glColor3f (0.0f, 0.4f, 0.0f);	// Set The Color To Blue
        gl.glVertex3f (1.0f, 0.0f, -1.0f);	// Top Right Of The Quad (Right)
        gl.glVertex3f (1.0f, 0.0f, 1.0f);	// Top Left Of The Quad (Right)
        gl.glVertex3f (1.0f, -0.25f, 1.0f);	// Bottom Left Of The Quad (Right)
        gl.glVertex3f (1.0f, -0.25f, -1.0f);	// Bottom Right Of The Quad 
(Right)

        /*gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
        gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f,  1.0f, -1.0f);
        gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f,  1.0f,  1.0f);
        gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f,  1.0f);*/
        // Left Face
        gl.glColor3f(0.0f, 0.4f, 0.0f); // Set The Color To Blue
        gl.glVertex3f( -1.0f, 0.0f, 1.0f); // Top Right Of The Quad (Left)
        gl.glVertex3f( -1.0f, 0.0f, -1.0f); // Top Left Of The Quad (Left)
        gl.glVertex3f( -1.0f, -0.25f, -1.0f); // Bottom Left Of The Quad (Left)
        gl.glVertex3f (-1.0f, -0.25f, 1.0f);	// Bottom Right Of The Quad (Left)


        /*gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
        gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f,  1.0f);
        gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f,  1.0f,  1.0f);
        gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f,  1.0f, -1.0f);
        */
      gl.glEnd();

      xrot+=0.3f;
      yrot+=0.2f;
      zrot+=0.4f;
    }


    /** Called when the display mode has been changed.  &lt;B&gt;!! CURRENTLY 
UNIMPLEMENTED IN JOGL !!&lt;/B&gt;
     * @param gLDrawable The GLDrawable object.
     * @param modeChanged Indicates if the video mode has changed.
     * @param deviceChanged Indicates if the video device has changed.
     */
    public void displayChanged(GLDrawable gLDrawable, boolean modeChanged, 
boolean deviceChanged)
    {
    }

    /** Called by the drawable immediately after the OpenGL context is
     * initialized for the first time. Can be used to perform one-time OpenGL
     * initialization such as setup of lights and display lists.
     * @param gLDrawable The GLDrawable object.
     */
    public void init(GLDrawable gLDrawable)
    {
      final GL gl = gLDrawable.getGL();
      gl.glShadeModel(GL.GL_SMOOTH);              // Enable Smooth Shading
      gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    // Black Background
      gl.glClearDepth(1.0f);                      // Depth Buffer Setup
      gl.glEnable(GL.GL_DEPTH_TEST);					
		// Enables Depth Testing
      gl.glDepthFunc(GL.GL_LEQUAL);					
			// The Type Of Depth Testing To Do
      gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);	// 
Really Nice Perspective Calculations
      gl.glEnable(GL.GL_TEXTURE_2D);
      gLDrawable.addKeyListener(this);
      texture[0] = genTexture(gl);
      gl.glBindTexture(GL.GL_TEXTURE_2D, texture[0]);
      BufferedImage img = readPNGImage(&quot;./tnetMSP.jpg&quot;);
      makeRGBTexture(gl, gLDrawable.getGLU(), img, GL.GL_TEXTURE_2D, false);
      gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,
                         GL.GL_LINEAR);
      gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,
                         GL.GL_LINEAR);
      texture[1] = genTexture(gl);
      gl.glBindTexture(GL.GL_TEXTURE_2D, texture[1]);
      BufferedImage img2 = readPNGImage(&quot;./tnetRF.jpg&quot;);
      makeRGBTexture(gl, gLDrawable.getGLU(), img2, GL.GL_TEXTURE_2D, false);
      gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,
                         GL.GL_LINEAR);
      gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,
                         GL.GL_LINEAR);

    }

    /** Called by the drawable during the first repaint after the component has
     * been resized. The client can update the viewport and view volume of the
     * window appropriately, for example by a call to
     * GL.glViewport(int, int, int, int); note that for convenience the component
     * has already called GL.glViewport(int, int, int, int)(x, y, width, height)
     * when this method is called, so the client may not have to do anything in
     * this method.
     * @param gLDrawable The GLDrawable object.
     * @param x The X Coordinate of the viewport rectangle.
     * @param y The Y coordinate of the viewport rectanble.
     * @param width The new width of the window.
     * @param height The new height of the window.
     */
    public void reshape(GLDrawable gLDrawable, int x, int y, int width, int height)
    {
      final GL gl = gLDrawable.getGL();
      final GLU glu = gLDrawable.getGLU();

      if (height &lt;= 0) // avoid a divide by zero error!
        height = 1;
      final float h = (float)width / (float)height;
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL.GL_PROJECTION);
      gl.glLoadIdentity();
      glu.gluPerspective(45.0f, h, 1.0, 20.0);
      gl.glMatrixMode(GL.GL_MODELVIEW);
      gl.glLoadIdentity();
    }

    /** Invoked when a key has been pressed.
     * See the class description for {@link KeyEvent} for a definition of
     * a key pressed event.
     * @param e The KeyEvent.
     */
    public void keyPressed(KeyEvent e)
    {}

    /** Invoked when a key has been released.
     * See the class description for {@link KeyEvent} for a definition of
     * a key released event.
     * @param e The KeyEvent.
     */
    public void keyReleased(KeyEvent e)
    {}

    /** Invoked when a key has been typed.
     * See the class description for {@link KeyEvent} for a definition of
     * a key typed event.
     * @param e The KeyEvent.
     */
    public void keyTyped(KeyEvent e)
    {
      if (e.getKeyChar() == KeyEvent.VK_ESCAPE)
      {

        System.exit(0);
      }
    }

    private BufferedImage readPNGImage(String resourceName)
    {
      try
      {
        URL url = getResource(resourceName);
        if (url == null)
        {
          throw new RuntimeException(&quot;Error reading resource &quot; + resourceName);
        }
        BufferedImage img = ImageIO.read(url);
        java.awt.geom.AffineTransform tx = 
java.awt.geom.AffineTransform.getScaleInstance(1, -1);
        tx.translate(0, -img.getHeight(null));
        AffineTransformOp op = new AffineTransformOp(tx, 
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        img = op.filter(img, null);
        return img;
      }
      catch (IOException e)
      {
        throw new RuntimeException(e);
      }
    }

    private void makeRGBTexture(GL gl, GLU glu, BufferedImage img, int target, 
boolean mipmapped)
    {
      ByteBuffer dest = null;
      switch (img.getType())
      {
        case BufferedImage.TYPE_3BYTE_BGR:
        case BufferedImage.TYPE_CUSTOM:
        {
          byte[] data = ((DataBufferByte) img.getRaster().getDataBuffer()).getData
();
          dest = ByteBuffer.allocateDirect(data.length);
          dest.order(ByteOrder.nativeOrder());
          dest.put(data, 0, data.length);
          break;
        }
        case BufferedImage.TYPE_INT_RGB:
        {
          int[] data = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
          dest = ByteBuffer.allocateDirect(data.length * BufferUtils.SIZEOF_INT);
          dest.order(ByteOrder.nativeOrder());
          dest.asIntBuffer().put(data, 0, data.length);
          break;
        }
        default:
          throw new RuntimeException(&quot;Unsupported image type &quot; + img.getType());
      }

      if (mipmapped)
      {
        glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), 
GL.GL_RGB, GL.GL_UNSIGNED_BYTE, dest);
      }
      else
      {
        gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, 
GL.GL_RGB, GL.GL_UNSIGNED_BYTE, dest);
      }
    }

    private int genTexture(GL gl)
    {
      final int[] tmp = new int[1];
      gl.glGenTextures(1, tmp);
      return tmp[0];
    }
  }

  /** Retrieve a URL resource from the jar.  If the resource is not found, then
   * the local disk is also checked.
   * @param filename Complete filename, including parent path
   * @return a URL object if resource is found, otherwise null.
   */
  public final static URL getResource(final String filename)
  {
    // Try to load resource from jar
    URL url = ClassLoader.getSystemResource(filename);
    // If not found in jar, then load from disk
    if (url == null)
    {
      try
      {
        url = new URL(&quot;file&quot;, &quot;localhost&quot;, filename);
      }
      catch (Exception urlException){} // ignore
    }
    return url;
  }

  /** Program&apos;s main entry point
   * @param args command line arguments.
   */
  public static void main(String[] args)
  {
    Frame frame = new Frame(&quot;Lesson 6: Texture Mapping&quot;);

    JDesktopPane desktop=new JDesktopPane();
    JInternalFrame l6frame = new JInternalFrame(&quot;3D texture&quot;, true,true,true,true);

    l6frame.setBounds(0, 0, 400, 400);

    GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new 
GLCapabilities());

    canvas.addGLEventListener(new Renderer());
    animator = new Animator(canvas);
    l6frame.getContentPane().add(canvas);

    desktop.add(&quot;Center&quot;,l6frame);

//    frame.add(canvas);
    frame.add(desktop);
    frame.setSize(1024, 768);


    frame.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        animator.stop();
        System.exit(0);
      }
    });

    frame.show();
    l6frame.setVisible(true);
    animator.start();

  }
}



---- Additional Comments From moussaba 2003-08-07 13:33:11 ----

Created an attachment
Test Case for generating Exception with JinternalFrame




---- Additional Comments From moussaba 2003-08-07 13:34:56 ----

Created an attachment
Test Case for generating Exception with JinternalFrame




---- Additional Comments From moussaba 2003-08-07 13:36:04 ----

Created an attachment
Jar File for reproducing error




---- Additional Comments From kbr 2005-01-31 01:53:52 ----

Sorry for not investigating this bug until now. JOGL had proper
addNotify/removeNotify tracking added a while ago and the current JOGL source
runs the enclosed demo correctly. Please reopen this bug or file a new one if
you are still seeing problems.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:45 EDT  ---

This bug was previously known as _bug_ 30 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=30
Imported an attachment (id=7)
Imported an attachment (id=8)
Imported an attachment (id=9)

The original submitter of attachment 7 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 8 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 9 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7</attachid>
            <date>2003-08-07 13:33:00 +0200</date>
            <delta_ts>2003-08-07 13:33:00 +0200</delta_ts>
            <desc>Test Case for generating Exception with JinternalFrame</desc>
            <filename>Lesson06.java</filename>
            <type>text/plain</type>
            <size>13987</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoNCiAqIExlc3NvbjA2LmphdmENCiAqIE1vZGlmaWVkIG9uIEF1Z3VzdCAwNywgMjAwMw0KICog
UmVwcm9kdWNlcyB0aGUgR0xFeGNlcHRpb246IEVycm9yIFN3YXBwaW5nIEJ1ZmZlcnMgd2hlbg0K
ICogVXNpbmcgSkludGVybmFsRnJhbWUuICBJY29uaXplIHRoZSBJbnRlcm5hbCBGcmFtZSwgcmVz
dG9yZSBpdCBhbmQgeW91IHdpbGwNCiAqIGdldCB0aGUgYWJvdmUgbWVudGlvbmVkIGV4Y2VwdGlv
bi4gIFRoaXMgZG9lcyBub3Qgb2NjdXIgd2hlbiB0aGUgbWFpbiB3aW5kb3cNCiAqIGlzIGljb25p
emVkLg0KICogQ3JlYXRlZCBvbiBKdWx5IDE2LCAyMDAzLCAxMTozMCBBTQ0KICogTW9kaWZpZWQg
b24gQXVndXN0IDk3LDIwMDMNCiAqLw0KDQppbXBvcnQgamF2YS5hd3QuKjsNCmltcG9ydCBqYXZh
LmF3dC5ldmVudC4qOw0KaW1wb3J0IGphdmEuYXd0LmltYWdlLio7DQppbXBvcnQgamF2YXguc3dp
bmcuKjsNCmltcG9ydCBqYXZheC5zd2luZy5ldmVudC4qOw0KaW1wb3J0IGphdmEuaW8uKjsNCmlt
cG9ydCBqYXZhLm5ldC4qOw0KaW1wb3J0IGphdmEubmlvLio7DQppbXBvcnQgamF2YXguaW1hZ2Vp
by4qOw0KDQppbXBvcnQgbmV0LmphdmEuZ2FtZXMuam9nbC4qOw0KaW1wb3J0IG5ldC5qYXZhLmdh
bWVzLmpvZ2wudXRpbC4qOw0KDQovKiogUG9ydCBvZiB0aGUgTmVIZSBPcGVuR0wgVHV0b3JpYWwg
KExlc3NvbiA2KQ0KICogdG8gSmF2YSB1c2luZyB0aGUgSm9nbCBpbnRlcmZhY2UgdG8gT3BlbkdM
LiAgSm9nbCBjYW4gYmUgb2J0YWluZWQNCiAqIGF0IGh0dHA6Ly9qb2dsLmRldi5qYXZhLm5ldC8N
CiAqDQogKiBAYXV0aG9yIEtldmluIER1bGluZyAoamF0dGllckBob3RtYWlsLmNvbSkNCiAqLw0K
cHVibGljIGNsYXNzIExlc3NvbjA2DQp7DQogIHN0YXRpYyBBbmltYXRvciBhbmltYXRvciA9IG51
bGw7DQogIHN0YXRpYyBjbGFzcyBSZW5kZXJlcg0KICAgIGltcGxlbWVudHMgR0xFdmVudExpc3Rl
bmVyLA0KICAgICAgICAgICAgICAgS2V5TGlzdGVuZXINCiAgew0KICAgIHByaXZhdGUgZmxvYXQJ
eHJvdDsJCQkJLy8gWCBSb3RhdGlvbiAoIE5FVyApDQogICAgcHJpdmF0ZSBmbG9hdAl5cm90OwkJ
CQkvLyBZIFJvdGF0aW9uICggTkVXICkNCiAgICBwcml2YXRlIGZsb2F0CXpyb3Q7CQkJCS8vIFog
Um90YXRpb24gKCBORVcgKQ0KICAgIHByaXZhdGUgaW50W10gdGV4dHVyZT0gbmV3IGludFsyXTsN
Cg0KICAgIC8qKiBDYWxsZWQgYnkgdGhlIGRyYXdhYmxlIHRvIGluaXRpYXRlIE9wZW5HTCByZW5k
ZXJpbmcgYnkgdGhlIGNsaWVudC4NCiAgICAgKiBBZnRlciBhbGwgR0xFdmVudExpc3RlbmVycyBo
YXZlIGJlZW4gbm90aWZpZWQgb2YgYSBkaXNwbGF5IGV2ZW50LCB0aGUNCiAgICAgKiBkcmF3YWJs
ZSB3aWxsIHN3YXAgaXRzIGJ1ZmZlcnMgaWYgbmVjZXNzYXJ5Lg0KICAgICAqIEBwYXJhbSBnTERy
YXdhYmxlIFRoZSBHTERyYXdhYmxlIG9iamVjdC4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBk
aXNwbGF5KEdMRHJhd2FibGUgZ0xEcmF3YWJsZSkNCiAgICB7DQogICAgICBmaW5hbCBHTCBnbCA9
IGdMRHJhd2FibGUuZ2V0R0woKTsNCiAgICAgIGdsLmdsQ2xlYXIoR0wuR0xfQ09MT1JfQlVGRkVS
X0JJVCB8IEdMLkdMX0RFUFRIX0JVRkZFUl9CSVQpOw0KICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHko
KTsJCQkJCQkJCQkvLyBSZXNldCBUaGUgVmlldw0KICAgICAgZ2wuZ2xUcmFuc2xhdGVmKDAuMGYs
MC4wZiwtNS4wZik7DQoNCiAgICAgIGdsLmdsUm90YXRlZih4cm90LDEuMGYsMC4wZiwwLjBmKTsN
CiAgICAgIGdsLmdsUm90YXRlZih5cm90LDAuMGYsMS4wZiwwLjBmKTsNCiAgICAgIGdsLmdsUm90
YXRlZih6cm90LDAuMGYsMC4wZiwxLjBmKTsNCg0KICAgICAgZ2wuZ2xDb2xvcjNmKDEuMGYsIDEu
MGYsIDEuMGYpOw0KICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTC5HTF9URVhUVVJFXzJELCB0ZXh0
dXJlWzBdKTsNCiAgICAgIGdsLmdsQmVnaW4oR0wuR0xfUVVBRFMpOw0KICAgICAgLy9Cb3R0b20g
b2YgQ3ViZQ0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMS4wZiwgMS4wZik7IGdsLmdsVmVydGV4
M2YoLTEuMGYsIC0wLjI1ZiwgLTEuMGYpOw0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwg
MS4wZik7IGdsLmdsVmVydGV4M2YoIDEuMGYsIC0wLjI1ZiwgLTEuMGYpOw0KICAgICAgICBnbC5n
bFRleENvb3JkMmYoMC4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoIDEuMGYsIC0wLjI1ZiwgIDEu
MGYpOw0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMS4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2Yo
LTEuMGYsIC0wLjI1ZiwgIDEuMGYpOw0KICAgICAgZ2wuZ2xFbmQoKTsNCg0KICAgICAgZ2wuZ2xC
aW5kVGV4dHVyZShHTC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlWzFdKTsNCiAgICAgIGdsLmdsQmVn
aW4oR0wuR0xfUVVBRFMpOw0KICAvLyBUb3AgRmFjZQ0KICAgICAgICAgIGdsLmdsVGV4Q29vcmQy
ZigwLjBmLCAxLjBmKTsgZ2wuZ2xWZXJ0ZXgzZigtMS4wZiwgIDAuMGYsIC0xLjBmKTsNCiAgICAg
ICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoLTEuMGYsICAw
LjBmLCAgMS4wZik7DQogICAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDEuMGYsIDAuMGYpOyBnbC5n
bFZlcnRleDNmKCAxLjBmLCAgMC4wZiwgIDEuMGYpOw0KICAgICAgICAgIGdsLmdsVGV4Q29vcmQy
ZigxLjBmLCAxLjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgIDAuMGYsIC0xLjBmKTsNCg0KDQoN
CiAgICAgIGdsLmdsQmVnaW4oR0wuR0xfUVVBRFMpOw0KDQogICAgICAgIC8qZ2wuZ2xUZXhDb29y
ZDJmKDAuMGYsIDAuMGYpOyBnbC5nbFZlcnRleDNmKC0xLjBmLCAtMS4wZiwgIDEuMGYpOw0KICAg
ICAgICBnbC5nbFRleENvb3JkMmYoMS4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoIDEuMGYsIC0x
LjBmLCAgMS4wZik7DQogICAgICAgIGdsLmdsVGV4Q29vcmQyZigxLjBmLCAxLjBmKTsgZ2wuZ2xW
ZXJ0ZXgzZiggMS4wZiwgIDEuMGYsICAxLjBmKTsNCiAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDAu
MGYsIDEuMGYpOyBnbC5nbFZlcnRleDNmKC0xLjBmLCAgMS4wZiwgIDEuMGYpOw0KICAgICAgICov
DQogICAgICAvLyBCYWNrIEZhY2UNCiAgICAgIGdsLmdsQ29sb3IzZigwLjBmLCAwLjRmLCAwLjBm
KTsgLy8gU2V0IFRoZSBDb2xvciBUbyBCbHVlDQogICAgICBnbC5nbFZlcnRleDNmKDEuMGYsIC0w
LjI1ZiwgLTEuMGYpOyAvLyBUb3AgUmlnaHQgT2YgVGhlIFF1YWQgKEJhY2spDQogICAgICBnbC5n
bFZlcnRleDNmKCAtMS4wZiwgLTAuMjVmLCAtMS4wZik7IC8vIFRvcCBMZWZ0IE9mIFRoZSBRdWFk
IChCYWNrKQ0KICAgICAgZ2wuZ2xWZXJ0ZXgzZiggLTEuMGYsIDAuMGYsIC0xLjBmKTsgLy8gQm90
dG9tIExlZnQgT2YgVGhlIFF1YWQgKEJhY2spDQogICAgICBnbC5nbFZlcnRleDNmKDEuMGYsIDAu
MGYsIC0xLjBmKTsgLy8gQm90dG9tIFJpZ2h0IE9mIFRoZSBRdWFkIChCYWNrKQ0KDQogICAgICAv
KmdsLmdsVGV4Q29vcmQyZigxLjBmLCAwLjBmKTsgZ2wuZ2xWZXJ0ZXgzZigtMS4wZiwgLTEuMGYs
IC0xLjBmKTsNCiAgICAgICAgICAgICAgIGdsLmdsVGV4Q29vcmQyZigxLjBmLCAxLjBmKTsgZ2wu
Z2xWZXJ0ZXgzZigtMS4wZiwgIDEuMGYsIC0xLjBmKTsNCiAgICAgICAgICAgICAgIGdsLmdsVGV4
Q29vcmQyZigwLjBmLCAxLjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgIDEuMGYsIC0xLjBmKTsN
CiAgICAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDAuMGYsIDAuMGYpOyBnbC5nbFZlcnRleDNmKCAx
LjBmLCAtMS4wZiwgLTEuMGYpOyovDQogICAgICAvLyBGcm9udCBGYWNlDQogICAgICAvL2dsQ29s
b3IzZiAoMS4wZiwgMC4wZiwgMC4wZik7CS8vIFNldCBUaGUgQ29sb3IgVG8gUmVkDQogICAgICBn
bC5nbENvbG9yM2YoMC4wZiwgMC40ZiwgMC4wZik7IC8vIFNldCBUaGUgQ29sb3IgVG8gQmx1ZQ0K
ICAgICAgZ2wuZ2xWZXJ0ZXgzZigxLjBmLCAwLjBmLCAxLjBmKTsgLy8gVG9wIFJpZ2h0IE9mIFRo
ZSBRdWFkIChGcm9udCkNCiAgICAgIGdsLmdsVmVydGV4M2YoIC0xLjBmLCAwLjBmLCAxLjBmKTsg
Ly8gVG9wIExlZnQgT2YgVGhlIFF1YWQgKEZyb250KQ0KICAgICAgZ2wuZ2xWZXJ0ZXgzZiggLTEu
MGYsIC0wLjI1ZiwgMS4wZik7IC8vIEJvdHRvbSBMZWZ0IE9mIFRoZSBRdWFkIChGcm9udCkNCiAg
ICAgIGdsLmdsVmVydGV4M2YoMS4wZiwgLTAuMjVmLCAxLjBmKTsgLy8gQm90dG9tIFJpZ2h0IE9m
IFRoZSBRdWFkIChGcm9udCkNCg0KDQogICAgICAgIC8vIFJpZ2h0IGZhY2UNCiAgICAgICAgZ2wu
Z2xDb2xvcjNmICgwLjBmLCAwLjRmLCAwLjBmKTsJLy8gU2V0IFRoZSBDb2xvciBUbyBCbHVlDQog
ICAgICAgIGdsLmdsVmVydGV4M2YgKDEuMGYsIDAuMGYsIC0xLjBmKTsJLy8gVG9wIFJpZ2h0IE9m
IFRoZSBRdWFkIChSaWdodCkNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgzZiAoMS4wZiwgMC4wZiwgMS4w
Zik7CS8vIFRvcCBMZWZ0IE9mIFRoZSBRdWFkIChSaWdodCkNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgz
ZiAoMS4wZiwgLTAuMjVmLCAxLjBmKTsJLy8gQm90dG9tIExlZnQgT2YgVGhlIFF1YWQgKFJpZ2h0
KQ0KICAgICAgICBnbC5nbFZlcnRleDNmICgxLjBmLCAtMC4yNWYsIC0xLjBmKTsJLy8gQm90dG9t
IFJpZ2h0IE9mIFRoZSBRdWFkIChSaWdodCkNCg0KICAgICAgICAvKmdsLmdsVGV4Q29vcmQyZigx
LjBmLCAwLjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgLTEuMGYsIC0xLjBmKTsNCiAgICAgICAg
Z2wuZ2xUZXhDb29yZDJmKDEuMGYsIDEuMGYpOyBnbC5nbFZlcnRleDNmKCAxLjBmLCAgMS4wZiwg
LTEuMGYpOw0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwgMS4wZik7IGdsLmdsVmVydGV4
M2YoIDEuMGYsICAxLjBmLCAgMS4wZik7DQogICAgICAgIGdsLmdsVGV4Q29vcmQyZigwLjBmLCAw
LjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgLTEuMGYsICAxLjBmKTsqLw0KICAgICAgICAvLyBM
ZWZ0IEZhY2UNCiAgICAgICAgZ2wuZ2xDb2xvcjNmKDAuMGYsIDAuNGYsIDAuMGYpOyAvLyBTZXQg
VGhlIENvbG9yIFRvIEJsdWUNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgzZiggLTEuMGYsIDAuMGYsIDEu
MGYpOyAvLyBUb3AgUmlnaHQgT2YgVGhlIFF1YWQgKExlZnQpDQogICAgICAgIGdsLmdsVmVydGV4
M2YoIC0xLjBmLCAwLjBmLCAtMS4wZik7IC8vIFRvcCBMZWZ0IE9mIFRoZSBRdWFkIChMZWZ0KQ0K
ICAgICAgICBnbC5nbFZlcnRleDNmKCAtMS4wZiwgLTAuMjVmLCAtMS4wZik7IC8vIEJvdHRvbSBM
ZWZ0IE9mIFRoZSBRdWFkIChMZWZ0KQ0KICAgICAgICBnbC5nbFZlcnRleDNmICgtMS4wZiwgLTAu
MjVmLCAxLjBmKTsJLy8gQm90dG9tIFJpZ2h0IE9mIFRoZSBRdWFkIChMZWZ0KQ0KDQoNCiAgICAg
ICAgLypnbC5nbFRleENvb3JkMmYoMC4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoLTEuMGYsIC0x
LjBmLCAtMS4wZik7DQogICAgICAgIGdsLmdsVGV4Q29vcmQyZigxLjBmLCAwLjBmKTsgZ2wuZ2xW
ZXJ0ZXgzZigtMS4wZiwgLTEuMGYsICAxLjBmKTsNCiAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDEu
MGYsIDEuMGYpOyBnbC5nbFZlcnRleDNmKC0xLjBmLCAgMS4wZiwgIDEuMGYpOw0KICAgICAgICBn
bC5nbFRleENvb3JkMmYoMC4wZiwgMS4wZik7IGdsLmdsVmVydGV4M2YoLTEuMGYsICAxLjBmLCAt
MS4wZik7DQogICAgICAgICovDQogICAgICBnbC5nbEVuZCgpOw0KDQogICAgICB4cm90Kz0wLjNm
Ow0KICAgICAgeXJvdCs9MC4yZjsNCiAgICAgIHpyb3QrPTAuNGY7DQogICAgfQ0KDQoNCiAgICAv
KiogQ2FsbGVkIHdoZW4gdGhlIGRpc3BsYXkgbW9kZSBoYXMgYmVlbiBjaGFuZ2VkLiAgPEI+ISEg
Q1VSUkVOVExZIFVOSU1QTEVNRU5URUQgSU4gSk9HTCAhITwvQj4NCiAgICAgKiBAcGFyYW0gZ0xE
cmF3YWJsZSBUaGUgR0xEcmF3YWJsZSBvYmplY3QuDQogICAgICogQHBhcmFtIG1vZGVDaGFuZ2Vk
IEluZGljYXRlcyBpZiB0aGUgdmlkZW8gbW9kZSBoYXMgY2hhbmdlZC4NCiAgICAgKiBAcGFyYW0g
ZGV2aWNlQ2hhbmdlZCBJbmRpY2F0ZXMgaWYgdGhlIHZpZGVvIGRldmljZSBoYXMgY2hhbmdlZC4N
CiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBkaXNwbGF5Q2hhbmdlZChHTERyYXdhYmxlIGdMRHJh
d2FibGUsIGJvb2xlYW4gbW9kZUNoYW5nZWQsIGJvb2xlYW4gZGV2aWNlQ2hhbmdlZCkNCiAgICB7
DQogICAgfQ0KDQogICAgLyoqIENhbGxlZCBieSB0aGUgZHJhd2FibGUgaW1tZWRpYXRlbHkgYWZ0
ZXIgdGhlIE9wZW5HTCBjb250ZXh0IGlzDQogICAgICogaW5pdGlhbGl6ZWQgZm9yIHRoZSBmaXJz
dCB0aW1lLiBDYW4gYmUgdXNlZCB0byBwZXJmb3JtIG9uZS10aW1lIE9wZW5HTA0KICAgICAqIGlu
aXRpYWxpemF0aW9uIHN1Y2ggYXMgc2V0dXAgb2YgbGlnaHRzIGFuZCBkaXNwbGF5IGxpc3RzLg0K
ICAgICAqIEBwYXJhbSBnTERyYXdhYmxlIFRoZSBHTERyYXdhYmxlIG9iamVjdC4NCiAgICAgKi8N
CiAgICBwdWJsaWMgdm9pZCBpbml0KEdMRHJhd2FibGUgZ0xEcmF3YWJsZSkNCiAgICB7DQogICAg
ICBmaW5hbCBHTCBnbCA9IGdMRHJhd2FibGUuZ2V0R0woKTsNCiAgICAgIGdsLmdsU2hhZGVNb2Rl
bChHTC5HTF9TTU9PVEgpOyAgICAgICAgICAgICAgLy8gRW5hYmxlIFNtb290aCBTaGFkaW5nDQog
ICAgICBnbC5nbENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41Zik7ICAgIC8vIEJsYWNr
IEJhY2tncm91bmQNCiAgICAgIGdsLmdsQ2xlYXJEZXB0aCgxLjBmKTsgICAgICAgICAgICAgICAg
ICAgICAgLy8gRGVwdGggQnVmZmVyIFNldHVwDQogICAgICBnbC5nbEVuYWJsZShHTC5HTF9ERVBU
SF9URVNUKTsJCQkJCQkJLy8gRW5hYmxlcyBEZXB0aCBUZXN0aW5nDQogICAgICBnbC5nbERlcHRo
RnVuYyhHTC5HTF9MRVFVQUwpOwkJCQkJCQkJLy8gVGhlIFR5cGUgT2YgRGVwdGggVGVzdGluZyBU
byBEbw0KICAgICAgZ2wuZ2xIaW50KEdMLkdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwg
R0wuR0xfTklDRVNUKTsJLy8gUmVhbGx5IE5pY2UgUGVyc3BlY3RpdmUgQ2FsY3VsYXRpb25zDQog
ICAgICBnbC5nbEVuYWJsZShHTC5HTF9URVhUVVJFXzJEKTsNCiAgICAgIGdMRHJhd2FibGUuYWRk
S2V5TGlzdGVuZXIodGhpcyk7DQogICAgICB0ZXh0dXJlWzBdID0gZ2VuVGV4dHVyZShnbCk7DQog
ICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVbMF0pOw0KICAg
ICAgQnVmZmVyZWRJbWFnZSBpbWcgPSByZWFkUE5HSW1hZ2UoIi4vdG5ldE1TUC5qcGciKTsNCiAg
ICAgIG1ha2VSR0JUZXh0dXJlKGdsLCBnTERyYXdhYmxlLmdldEdMVSgpLCBpbWcsIEdMLkdMX1RF
WFRVUkVfMkQsIGZhbHNlKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJF
XzJELCBHTC5HTF9URVhUVVJFX01JTl9GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
R0wuR0xfTElORUFSKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJE
LCBHTC5HTF9URVhUVVJFX01BR19GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgR0wu
R0xfTElORUFSKTsNCiAgICAgIHRleHR1cmVbMV0gPSBnZW5UZXh0dXJlKGdsKTsNCiAgICAgIGds
LmdsQmluZFRleHR1cmUoR0wuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZVsxXSk7DQogICAgICBCdWZm
ZXJlZEltYWdlIGltZzIgPSByZWFkUE5HSW1hZ2UoIi4vdG5ldFJGLmpwZyIpOw0KICAgICAgbWFr
ZVJHQlRleHR1cmUoZ2wsIGdMRHJhd2FibGUuZ2V0R0xVKCksIGltZzIsIEdMLkdMX1RFWFRVUkVf
MkQsIGZhbHNlKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJELCBH
TC5HTF9URVhUVVJFX01JTl9GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xf
TElORUFSKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJELCBHTC5H
TF9URVhUVVJFX01BR19GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xfTElO
RUFSKTsNCg0KICAgIH0NCg0KICAgIC8qKiBDYWxsZWQgYnkgdGhlIGRyYXdhYmxlIGR1cmluZyB0
aGUgZmlyc3QgcmVwYWludCBhZnRlciB0aGUgY29tcG9uZW50IGhhcw0KICAgICAqIGJlZW4gcmVz
aXplZC4gVGhlIGNsaWVudCBjYW4gdXBkYXRlIHRoZSB2aWV3cG9ydCBhbmQgdmlldyB2b2x1bWUg
b2YgdGhlDQogICAgICogd2luZG93IGFwcHJvcHJpYXRlbHksIGZvciBleGFtcGxlIGJ5IGEgY2Fs
bCB0bw0KICAgICAqIEdMLmdsVmlld3BvcnQoaW50LCBpbnQsIGludCwgaW50KTsgbm90ZSB0aGF0
IGZvciBjb252ZW5pZW5jZSB0aGUgY29tcG9uZW50DQogICAgICogaGFzIGFscmVhZHkgY2FsbGVk
IEdMLmdsVmlld3BvcnQoaW50LCBpbnQsIGludCwgaW50KSh4LCB5LCB3aWR0aCwgaGVpZ2h0KQ0K
ICAgICAqIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBzbyB0aGUgY2xpZW50IG1heSBub3Qg
aGF2ZSB0byBkbyBhbnl0aGluZyBpbg0KICAgICAqIHRoaXMgbWV0aG9kLg0KICAgICAqIEBwYXJh
bSBnTERyYXdhYmxlIFRoZSBHTERyYXdhYmxlIG9iamVjdC4NCiAgICAgKiBAcGFyYW0geCBUaGUg
WCBDb29yZGluYXRlIG9mIHRoZSB2aWV3cG9ydCByZWN0YW5nbGUuDQogICAgICogQHBhcmFtIHkg
VGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdmlld3BvcnQgcmVjdGFuYmxlLg0KICAgICAqIEBwYXJh
bSB3aWR0aCBUaGUgbmV3IHdpZHRoIG9mIHRoZSB3aW5kb3cuDQogICAgICogQHBhcmFtIGhlaWdo
dCBUaGUgbmV3IGhlaWdodCBvZiB0aGUgd2luZG93Lg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lk
IHJlc2hhcGUoR0xEcmF3YWJsZSBnTERyYXdhYmxlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCkNCiAgICB7DQogICAgICBmaW5hbCBHTCBnbCA9IGdMRHJhd2FibGUuZ2V0R0wo
KTsNCiAgICAgIGZpbmFsIEdMVSBnbHUgPSBnTERyYXdhYmxlLmdldEdMVSgpOw0KDQogICAgICBp
ZiAoaGVpZ2h0IDw9IDApIC8vIGF2b2lkIGEgZGl2aWRlIGJ5IHplcm8gZXJyb3IhDQogICAgICAg
IGhlaWdodCA9IDE7DQogICAgICBmaW5hbCBmbG9hdCBoID0gKGZsb2F0KXdpZHRoIC8gKGZsb2F0
KWhlaWdodDsNCiAgICAgIGdsLmdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7DQogICAg
ICBnbC5nbE1hdHJpeE1vZGUoR0wuR0xfUFJPSkVDVElPTik7DQogICAgICBnbC5nbExvYWRJZGVu
dGl0eSgpOw0KICAgICAgZ2x1LmdsdVBlcnNwZWN0aXZlKDQ1LjBmLCBoLCAxLjAsIDIwLjApOw0K
ICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMLkdMX01PREVMVklFVyk7DQogICAgICBnbC5nbExvYWRJ
ZGVudGl0eSgpOw0KICAgIH0NCg0KICAgIC8qKiBJbnZva2VkIHdoZW4gYSBrZXkgaGFzIGJlZW4g
cHJlc3NlZC4NCiAgICAgKiBTZWUgdGhlIGNsYXNzIGRlc2NyaXB0aW9uIGZvciB7QGxpbmsgS2V5
RXZlbnR9IGZvciBhIGRlZmluaXRpb24gb2YNCiAgICAgKiBhIGtleSBwcmVzc2VkIGV2ZW50Lg0K
ICAgICAqIEBwYXJhbSBlIFRoZSBLZXlFdmVudC4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBr
ZXlQcmVzc2VkKEtleUV2ZW50IGUpDQogICAge30NCg0KICAgIC8qKiBJbnZva2VkIHdoZW4gYSBr
ZXkgaGFzIGJlZW4gcmVsZWFzZWQuDQogICAgICogU2VlIHRoZSBjbGFzcyBkZXNjcmlwdGlvbiBm
b3Ige0BsaW5rIEtleUV2ZW50fSBmb3IgYSBkZWZpbml0aW9uIG9mDQogICAgICogYSBrZXkgcmVs
ZWFzZWQgZXZlbnQuDQogICAgICogQHBhcmFtIGUgVGhlIEtleUV2ZW50Lg0KICAgICAqLw0KICAg
IHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpDQogICAge30NCg0KICAgIC8qKiBJ
bnZva2VkIHdoZW4gYSBrZXkgaGFzIGJlZW4gdHlwZWQuDQogICAgICogU2VlIHRoZSBjbGFzcyBk
ZXNjcmlwdGlvbiBmb3Ige0BsaW5rIEtleUV2ZW50fSBmb3IgYSBkZWZpbml0aW9uIG9mDQogICAg
ICogYSBrZXkgdHlwZWQgZXZlbnQuDQogICAgICogQHBhcmFtIGUgVGhlIEtleUV2ZW50Lg0KICAg
ICAqLw0KICAgIHB1YmxpYyB2b2lkIGtleVR5cGVkKEtleUV2ZW50IGUpDQogICAgew0KICAgICAg
aWYgKGUuZ2V0S2V5Q2hhcigpID09IEtleUV2ZW50LlZLX0VTQ0FQRSkNCiAgICAgIHsNCg0KICAg
ICAgICBTeXN0ZW0uZXhpdCgwKTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBwcml2YXRlIEJ1ZmZl
cmVkSW1hZ2UgcmVhZFBOR0ltYWdlKFN0cmluZyByZXNvdXJjZU5hbWUpDQogICAgew0KICAgICAg
dHJ5DQogICAgICB7DQogICAgICAgIFVSTCB1cmwgPSBnZXRSZXNvdXJjZShyZXNvdXJjZU5hbWUp
Ow0KICAgICAgICBpZiAodXJsID09IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgcmVhZGluZyByZXNvdXJjZSAiICsgcmVzb3VyY2VO
YW1lKTsNCiAgICAgICAgfQ0KICAgICAgICBCdWZmZXJlZEltYWdlIGltZyA9IEltYWdlSU8ucmVh
ZCh1cmwpOw0KICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSB0eCA9IGphdmEu
YXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtLmdldFNjYWxlSW5zdGFuY2UoMSwgLTEpOw0KICAgICAg
ICB0eC50cmFuc2xhdGUoMCwgLWltZy5nZXRIZWlnaHQobnVsbCkpOw0KICAgICAgICBBZmZpbmVU
cmFuc2Zvcm1PcCBvcCA9IG5ldyBBZmZpbmVUcmFuc2Zvcm1PcCh0eCwgQWZmaW5lVHJhbnNmb3Jt
T3AuVFlQRV9ORUFSRVNUX05FSUdIQk9SKTsNCiAgICAgICAgaW1nID0gb3AuZmlsdGVyKGltZywg
bnVsbCk7DQogICAgICAgIHJldHVybiBpbWc7DQogICAgICB9DQogICAgICBjYXRjaCAoSU9FeGNl
cHRpb24gZSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7
DQogICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSB2b2lkIG1ha2VSR0JUZXh0dXJlKEdMIGds
LCBHTFUgZ2x1LCBCdWZmZXJlZEltYWdlIGltZywgaW50IHRhcmdldCwgYm9vbGVhbiBtaXBtYXBw
ZWQpDQogICAgew0KICAgICAgQnl0ZUJ1ZmZlciBkZXN0ID0gbnVsbDsNCiAgICAgIHN3aXRjaCAo
aW1nLmdldFR5cGUoKSkNCiAgICAgIHsNCiAgICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVf
M0JZVEVfQkdSOg0KICAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9DVVNUT006DQogICAg
ICAgIHsNCiAgICAgICAgICBieXRlW10gZGF0YSA9ICgoRGF0YUJ1ZmZlckJ5dGUpIGltZy5nZXRS
YXN0ZXIoKS5nZXREYXRhQnVmZmVyKCkpLmdldERhdGEoKTsNCiAgICAgICAgICBkZXN0ID0gQnl0
ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChkYXRhLmxlbmd0aCk7DQogICAgICAgICAgZGVzdC5vcmRl
cihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSk7DQogICAgICAgICAgZGVzdC5wdXQoZGF0YSwgMCwg
ZGF0YS5sZW5ndGgpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGNhc2Ug
QnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6DQogICAgICAgIHsNCiAgICAgICAgICBpbnRbXSBk
YXRhID0gKChEYXRhQnVmZmVySW50KSBpbWcuZ2V0UmFzdGVyKCkuZ2V0RGF0YUJ1ZmZlcigpKS5n
ZXREYXRhKCk7DQogICAgICAgICAgZGVzdCA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoZGF0
YS5sZW5ndGggKiBCdWZmZXJVdGlscy5TSVpFT0ZfSU5UKTsNCiAgICAgICAgICBkZXN0Lm9yZGVy
KEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsNCiAgICAgICAgICBkZXN0LmFzSW50QnVmZmVyKCku
cHV0KGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0K
ICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJV
bnN1cHBvcnRlZCBpbWFnZSB0eXBlICIgKyBpbWcuZ2V0VHlwZSgpKTsNCiAgICAgIH0NCg0KICAg
ICAgaWYgKG1pcG1hcHBlZCkNCiAgICAgIHsNCiAgICAgICAgZ2x1LmdsdUJ1aWxkMkRNaXBtYXBz
KHRhcmdldCwgR0wuR0xfUkdCOCwgaW1nLmdldFdpZHRoKCksIGltZy5nZXRIZWlnaHQoKSwgR0wu
R0xfUkdCLCBHTC5HTF9VTlNJR05FRF9CWVRFLCBkZXN0KTsNCiAgICAgIH0NCiAgICAgIGVsc2UN
CiAgICAgIHsNCiAgICAgICAgZ2wuZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgR0wuR0xfUkdCLCBp
bWcuZ2V0V2lkdGgoKSwgaW1nLmdldEhlaWdodCgpLCAwLCBHTC5HTF9SR0IsIEdMLkdMX1VOU0lH
TkVEX0JZVEUsIGRlc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHByaXZhdGUgaW50IGdlblRl
eHR1cmUoR0wgZ2wpDQogICAgew0KICAgICAgZmluYWwgaW50W10gdG1wID0gbmV3IGludFsxXTsN
CiAgICAgIGdsLmdsR2VuVGV4dHVyZXMoMSwgdG1wKTsNCiAgICAgIHJldHVybiB0bXBbMF07DQog
ICAgfQ0KICB9DQoNCiAgLyoqIFJldHJpZXZlIGEgVVJMIHJlc291cmNlIGZyb20gdGhlIGphci4g
IElmIHRoZSByZXNvdXJjZSBpcyBub3QgZm91bmQsIHRoZW4NCiAgICogdGhlIGxvY2FsIGRpc2sg
aXMgYWxzbyBjaGVja2VkLg0KICAgKiBAcGFyYW0gZmlsZW5hbWUgQ29tcGxldGUgZmlsZW5hbWUs
IGluY2x1ZGluZyBwYXJlbnQgcGF0aA0KICAgKiBAcmV0dXJuIGEgVVJMIG9iamVjdCBpZiByZXNv
dXJjZSBpcyBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuDQogICAqLw0KICBwdWJsaWMgZmluYWwgc3Rh
dGljIFVSTCBnZXRSZXNvdXJjZShmaW5hbCBTdHJpbmcgZmlsZW5hbWUpDQogIHsNCiAgICAvLyBU
cnkgdG8gbG9hZCByZXNvdXJjZSBmcm9tIGphcg0KICAgIFVSTCB1cmwgPSBDbGFzc0xvYWRlci5n
ZXRTeXN0ZW1SZXNvdXJjZShmaWxlbmFtZSk7DQogICAgLy8gSWYgbm90IGZvdW5kIGluIGphciwg
dGhlbiBsb2FkIGZyb20gZGlzaw0KICAgIGlmICh1cmwgPT0gbnVsbCkNCiAgICB7DQogICAgICB0
cnkNCiAgICAgIHsNCiAgICAgICAgdXJsID0gbmV3IFVSTCgiZmlsZSIsICJsb2NhbGhvc3QiLCBm
aWxlbmFtZSk7DQogICAgICB9DQogICAgICBjYXRjaCAoRXhjZXB0aW9uIHVybEV4Y2VwdGlvbil7
fSAvLyBpZ25vcmUNCiAgICB9DQogICAgcmV0dXJuIHVybDsNCiAgfQ0KDQogIC8qKiBQcm9ncmFt
J3MgbWFpbiBlbnRyeSBwb2ludA0KICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1l
bnRzLg0KICAgKi8NCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykNCiAg
ew0KICAgIEZyYW1lIGZyYW1lID0gbmV3IEZyYW1lKCJMZXNzb24gNjogVGV4dHVyZSBNYXBwaW5n
Iik7DQoNCiAgICBKRGVza3RvcFBhbmUgZGVza3RvcD1uZXcgSkRlc2t0b3BQYW5lKCk7DQogICAg
SkludGVybmFsRnJhbWUgbDZmcmFtZSA9IG5ldyBKSW50ZXJuYWxGcmFtZSgiM0QgdGV4dHVyZSIs
IHRydWUsdHJ1ZSx0cnVlLHRydWUpOw0KDQogICAgbDZmcmFtZS5zZXRCb3VuZHMoMCwgMCwgNDAw
LCA0MDApOw0KDQogICAgR0xDYW52YXMgY2FudmFzID0gR0xEcmF3YWJsZUZhY3RvcnkuZ2V0RmFj
dG9yeSgpLmNyZWF0ZUdMQ2FudmFzKG5ldyBHTENhcGFiaWxpdGllcygpKTsNCg0KICAgIGNhbnZh
cy5hZGRHTEV2ZW50TGlzdGVuZXIobmV3IFJlbmRlcmVyKCkpOw0KICAgIGFuaW1hdG9yID0gbmV3
IEFuaW1hdG9yKGNhbnZhcyk7DQogICAgbDZmcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChjYW52
YXMpOw0KDQogICAgZGVza3RvcC5hZGQoIkNlbnRlciIsbDZmcmFtZSk7DQoNCi8vICAgIGZyYW1l
LmFkZChjYW52YXMpOw0KICAgIGZyYW1lLmFkZChkZXNrdG9wKTsNCiAgICBmcmFtZS5zZXRTaXpl
KDEwMjQsIDc2OCk7DQoNCg0KICAgIGZyYW1lLmFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dB
ZGFwdGVyKCkNCiAgICB7DQogICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2
ZW50IGUpDQogICAgICB7DQogICAgICAgIGFuaW1hdG9yLnN0b3AoKTsNCiAgICAgICAgU3lzdGVt
LmV4aXQoMCk7DQogICAgICB9DQogICAgfSk7DQogICAgLy9hbmltYXRvci5zdG9wKCk7DQogICAg
ZnJhbWUuc2hvdygpOw0KICAgIGw2ZnJhbWUuc2V0VmlzaWJsZSh0cnVlKTsNCiAgICBhbmltYXRv
ci5zdGFydCgpOw0KDQogIH0NCn0NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>8</attachid>
            <date>2003-08-07 13:34:00 +0200</date>
            <delta_ts>2003-08-07 13:34:00 +0200</delta_ts>
            <desc>Test Case for generating Exception with JinternalFrame</desc>
            <filename>Lesson06.java</filename>
            <type>text/plain</type>
            <size>13987</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoNCiAqIExlc3NvbjA2LmphdmENCiAqIE1vZGlmaWVkIG9uIEF1Z3VzdCAwNywgMjAwMw0KICog
UmVwcm9kdWNlcyB0aGUgR0xFeGNlcHRpb246IEVycm9yIFN3YXBwaW5nIEJ1ZmZlcnMgd2hlbg0K
ICogVXNpbmcgSkludGVybmFsRnJhbWUuICBJY29uaXplIHRoZSBJbnRlcm5hbCBGcmFtZSwgcmVz
dG9yZSBpdCBhbmQgeW91IHdpbGwNCiAqIGdldCB0aGUgYWJvdmUgbWVudGlvbmVkIGV4Y2VwdGlv
bi4gIFRoaXMgZG9lcyBub3Qgb2NjdXIgd2hlbiB0aGUgbWFpbiB3aW5kb3cNCiAqIGlzIGljb25p
emVkLg0KICogQ3JlYXRlZCBvbiBKdWx5IDE2LCAyMDAzLCAxMTozMCBBTQ0KICogTW9kaWZpZWQg
b24gQXVndXN0IDk3LDIwMDMNCiAqLw0KDQppbXBvcnQgamF2YS5hd3QuKjsNCmltcG9ydCBqYXZh
LmF3dC5ldmVudC4qOw0KaW1wb3J0IGphdmEuYXd0LmltYWdlLio7DQppbXBvcnQgamF2YXguc3dp
bmcuKjsNCmltcG9ydCBqYXZheC5zd2luZy5ldmVudC4qOw0KaW1wb3J0IGphdmEuaW8uKjsNCmlt
cG9ydCBqYXZhLm5ldC4qOw0KaW1wb3J0IGphdmEubmlvLio7DQppbXBvcnQgamF2YXguaW1hZ2Vp
by4qOw0KDQppbXBvcnQgbmV0LmphdmEuZ2FtZXMuam9nbC4qOw0KaW1wb3J0IG5ldC5qYXZhLmdh
bWVzLmpvZ2wudXRpbC4qOw0KDQovKiogUG9ydCBvZiB0aGUgTmVIZSBPcGVuR0wgVHV0b3JpYWwg
KExlc3NvbiA2KQ0KICogdG8gSmF2YSB1c2luZyB0aGUgSm9nbCBpbnRlcmZhY2UgdG8gT3BlbkdM
LiAgSm9nbCBjYW4gYmUgb2J0YWluZWQNCiAqIGF0IGh0dHA6Ly9qb2dsLmRldi5qYXZhLm5ldC8N
CiAqDQogKiBAYXV0aG9yIEtldmluIER1bGluZyAoamF0dGllckBob3RtYWlsLmNvbSkNCiAqLw0K
cHVibGljIGNsYXNzIExlc3NvbjA2DQp7DQogIHN0YXRpYyBBbmltYXRvciBhbmltYXRvciA9IG51
bGw7DQogIHN0YXRpYyBjbGFzcyBSZW5kZXJlcg0KICAgIGltcGxlbWVudHMgR0xFdmVudExpc3Rl
bmVyLA0KICAgICAgICAgICAgICAgS2V5TGlzdGVuZXINCiAgew0KICAgIHByaXZhdGUgZmxvYXQJ
eHJvdDsJCQkJLy8gWCBSb3RhdGlvbiAoIE5FVyApDQogICAgcHJpdmF0ZSBmbG9hdAl5cm90OwkJ
CQkvLyBZIFJvdGF0aW9uICggTkVXICkNCiAgICBwcml2YXRlIGZsb2F0CXpyb3Q7CQkJCS8vIFog
Um90YXRpb24gKCBORVcgKQ0KICAgIHByaXZhdGUgaW50W10gdGV4dHVyZT0gbmV3IGludFsyXTsN
Cg0KICAgIC8qKiBDYWxsZWQgYnkgdGhlIGRyYXdhYmxlIHRvIGluaXRpYXRlIE9wZW5HTCByZW5k
ZXJpbmcgYnkgdGhlIGNsaWVudC4NCiAgICAgKiBBZnRlciBhbGwgR0xFdmVudExpc3RlbmVycyBo
YXZlIGJlZW4gbm90aWZpZWQgb2YgYSBkaXNwbGF5IGV2ZW50LCB0aGUNCiAgICAgKiBkcmF3YWJs
ZSB3aWxsIHN3YXAgaXRzIGJ1ZmZlcnMgaWYgbmVjZXNzYXJ5Lg0KICAgICAqIEBwYXJhbSBnTERy
YXdhYmxlIFRoZSBHTERyYXdhYmxlIG9iamVjdC4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBk
aXNwbGF5KEdMRHJhd2FibGUgZ0xEcmF3YWJsZSkNCiAgICB7DQogICAgICBmaW5hbCBHTCBnbCA9
IGdMRHJhd2FibGUuZ2V0R0woKTsNCiAgICAgIGdsLmdsQ2xlYXIoR0wuR0xfQ09MT1JfQlVGRkVS
X0JJVCB8IEdMLkdMX0RFUFRIX0JVRkZFUl9CSVQpOw0KICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHko
KTsJCQkJCQkJCQkvLyBSZXNldCBUaGUgVmlldw0KICAgICAgZ2wuZ2xUcmFuc2xhdGVmKDAuMGYs
MC4wZiwtNS4wZik7DQoNCiAgICAgIGdsLmdsUm90YXRlZih4cm90LDEuMGYsMC4wZiwwLjBmKTsN
CiAgICAgIGdsLmdsUm90YXRlZih5cm90LDAuMGYsMS4wZiwwLjBmKTsNCiAgICAgIGdsLmdsUm90
YXRlZih6cm90LDAuMGYsMC4wZiwxLjBmKTsNCg0KICAgICAgZ2wuZ2xDb2xvcjNmKDEuMGYsIDEu
MGYsIDEuMGYpOw0KICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTC5HTF9URVhUVVJFXzJELCB0ZXh0
dXJlWzBdKTsNCiAgICAgIGdsLmdsQmVnaW4oR0wuR0xfUVVBRFMpOw0KICAgICAgLy9Cb3R0b20g
b2YgQ3ViZQ0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMS4wZiwgMS4wZik7IGdsLmdsVmVydGV4
M2YoLTEuMGYsIC0wLjI1ZiwgLTEuMGYpOw0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwg
MS4wZik7IGdsLmdsVmVydGV4M2YoIDEuMGYsIC0wLjI1ZiwgLTEuMGYpOw0KICAgICAgICBnbC5n
bFRleENvb3JkMmYoMC4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoIDEuMGYsIC0wLjI1ZiwgIDEu
MGYpOw0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMS4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2Yo
LTEuMGYsIC0wLjI1ZiwgIDEuMGYpOw0KICAgICAgZ2wuZ2xFbmQoKTsNCg0KICAgICAgZ2wuZ2xC
aW5kVGV4dHVyZShHTC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlWzFdKTsNCiAgICAgIGdsLmdsQmVn
aW4oR0wuR0xfUVVBRFMpOw0KICAvLyBUb3AgRmFjZQ0KICAgICAgICAgIGdsLmdsVGV4Q29vcmQy
ZigwLjBmLCAxLjBmKTsgZ2wuZ2xWZXJ0ZXgzZigtMS4wZiwgIDAuMGYsIC0xLjBmKTsNCiAgICAg
ICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoLTEuMGYsICAw
LjBmLCAgMS4wZik7DQogICAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDEuMGYsIDAuMGYpOyBnbC5n
bFZlcnRleDNmKCAxLjBmLCAgMC4wZiwgIDEuMGYpOw0KICAgICAgICAgIGdsLmdsVGV4Q29vcmQy
ZigxLjBmLCAxLjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgIDAuMGYsIC0xLjBmKTsNCg0KDQoN
CiAgICAgIGdsLmdsQmVnaW4oR0wuR0xfUVVBRFMpOw0KDQogICAgICAgIC8qZ2wuZ2xUZXhDb29y
ZDJmKDAuMGYsIDAuMGYpOyBnbC5nbFZlcnRleDNmKC0xLjBmLCAtMS4wZiwgIDEuMGYpOw0KICAg
ICAgICBnbC5nbFRleENvb3JkMmYoMS4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoIDEuMGYsIC0x
LjBmLCAgMS4wZik7DQogICAgICAgIGdsLmdsVGV4Q29vcmQyZigxLjBmLCAxLjBmKTsgZ2wuZ2xW
ZXJ0ZXgzZiggMS4wZiwgIDEuMGYsICAxLjBmKTsNCiAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDAu
MGYsIDEuMGYpOyBnbC5nbFZlcnRleDNmKC0xLjBmLCAgMS4wZiwgIDEuMGYpOw0KICAgICAgICov
DQogICAgICAvLyBCYWNrIEZhY2UNCiAgICAgIGdsLmdsQ29sb3IzZigwLjBmLCAwLjRmLCAwLjBm
KTsgLy8gU2V0IFRoZSBDb2xvciBUbyBCbHVlDQogICAgICBnbC5nbFZlcnRleDNmKDEuMGYsIC0w
LjI1ZiwgLTEuMGYpOyAvLyBUb3AgUmlnaHQgT2YgVGhlIFF1YWQgKEJhY2spDQogICAgICBnbC5n
bFZlcnRleDNmKCAtMS4wZiwgLTAuMjVmLCAtMS4wZik7IC8vIFRvcCBMZWZ0IE9mIFRoZSBRdWFk
IChCYWNrKQ0KICAgICAgZ2wuZ2xWZXJ0ZXgzZiggLTEuMGYsIDAuMGYsIC0xLjBmKTsgLy8gQm90
dG9tIExlZnQgT2YgVGhlIFF1YWQgKEJhY2spDQogICAgICBnbC5nbFZlcnRleDNmKDEuMGYsIDAu
MGYsIC0xLjBmKTsgLy8gQm90dG9tIFJpZ2h0IE9mIFRoZSBRdWFkIChCYWNrKQ0KDQogICAgICAv
KmdsLmdsVGV4Q29vcmQyZigxLjBmLCAwLjBmKTsgZ2wuZ2xWZXJ0ZXgzZigtMS4wZiwgLTEuMGYs
IC0xLjBmKTsNCiAgICAgICAgICAgICAgIGdsLmdsVGV4Q29vcmQyZigxLjBmLCAxLjBmKTsgZ2wu
Z2xWZXJ0ZXgzZigtMS4wZiwgIDEuMGYsIC0xLjBmKTsNCiAgICAgICAgICAgICAgIGdsLmdsVGV4
Q29vcmQyZigwLjBmLCAxLjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgIDEuMGYsIC0xLjBmKTsN
CiAgICAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDAuMGYsIDAuMGYpOyBnbC5nbFZlcnRleDNmKCAx
LjBmLCAtMS4wZiwgLTEuMGYpOyovDQogICAgICAvLyBGcm9udCBGYWNlDQogICAgICAvL2dsQ29s
b3IzZiAoMS4wZiwgMC4wZiwgMC4wZik7CS8vIFNldCBUaGUgQ29sb3IgVG8gUmVkDQogICAgICBn
bC5nbENvbG9yM2YoMC4wZiwgMC40ZiwgMC4wZik7IC8vIFNldCBUaGUgQ29sb3IgVG8gQmx1ZQ0K
ICAgICAgZ2wuZ2xWZXJ0ZXgzZigxLjBmLCAwLjBmLCAxLjBmKTsgLy8gVG9wIFJpZ2h0IE9mIFRo
ZSBRdWFkIChGcm9udCkNCiAgICAgIGdsLmdsVmVydGV4M2YoIC0xLjBmLCAwLjBmLCAxLjBmKTsg
Ly8gVG9wIExlZnQgT2YgVGhlIFF1YWQgKEZyb250KQ0KICAgICAgZ2wuZ2xWZXJ0ZXgzZiggLTEu
MGYsIC0wLjI1ZiwgMS4wZik7IC8vIEJvdHRvbSBMZWZ0IE9mIFRoZSBRdWFkIChGcm9udCkNCiAg
ICAgIGdsLmdsVmVydGV4M2YoMS4wZiwgLTAuMjVmLCAxLjBmKTsgLy8gQm90dG9tIFJpZ2h0IE9m
IFRoZSBRdWFkIChGcm9udCkNCg0KDQogICAgICAgIC8vIFJpZ2h0IGZhY2UNCiAgICAgICAgZ2wu
Z2xDb2xvcjNmICgwLjBmLCAwLjRmLCAwLjBmKTsJLy8gU2V0IFRoZSBDb2xvciBUbyBCbHVlDQog
ICAgICAgIGdsLmdsVmVydGV4M2YgKDEuMGYsIDAuMGYsIC0xLjBmKTsJLy8gVG9wIFJpZ2h0IE9m
IFRoZSBRdWFkIChSaWdodCkNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgzZiAoMS4wZiwgMC4wZiwgMS4w
Zik7CS8vIFRvcCBMZWZ0IE9mIFRoZSBRdWFkIChSaWdodCkNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgz
ZiAoMS4wZiwgLTAuMjVmLCAxLjBmKTsJLy8gQm90dG9tIExlZnQgT2YgVGhlIFF1YWQgKFJpZ2h0
KQ0KICAgICAgICBnbC5nbFZlcnRleDNmICgxLjBmLCAtMC4yNWYsIC0xLjBmKTsJLy8gQm90dG9t
IFJpZ2h0IE9mIFRoZSBRdWFkIChSaWdodCkNCg0KICAgICAgICAvKmdsLmdsVGV4Q29vcmQyZigx
LjBmLCAwLjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgLTEuMGYsIC0xLjBmKTsNCiAgICAgICAg
Z2wuZ2xUZXhDb29yZDJmKDEuMGYsIDEuMGYpOyBnbC5nbFZlcnRleDNmKCAxLjBmLCAgMS4wZiwg
LTEuMGYpOw0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwgMS4wZik7IGdsLmdsVmVydGV4
M2YoIDEuMGYsICAxLjBmLCAgMS4wZik7DQogICAgICAgIGdsLmdsVGV4Q29vcmQyZigwLjBmLCAw
LjBmKTsgZ2wuZ2xWZXJ0ZXgzZiggMS4wZiwgLTEuMGYsICAxLjBmKTsqLw0KICAgICAgICAvLyBM
ZWZ0IEZhY2UNCiAgICAgICAgZ2wuZ2xDb2xvcjNmKDAuMGYsIDAuNGYsIDAuMGYpOyAvLyBTZXQg
VGhlIENvbG9yIFRvIEJsdWUNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgzZiggLTEuMGYsIDAuMGYsIDEu
MGYpOyAvLyBUb3AgUmlnaHQgT2YgVGhlIFF1YWQgKExlZnQpDQogICAgICAgIGdsLmdsVmVydGV4
M2YoIC0xLjBmLCAwLjBmLCAtMS4wZik7IC8vIFRvcCBMZWZ0IE9mIFRoZSBRdWFkIChMZWZ0KQ0K
ICAgICAgICBnbC5nbFZlcnRleDNmKCAtMS4wZiwgLTAuMjVmLCAtMS4wZik7IC8vIEJvdHRvbSBM
ZWZ0IE9mIFRoZSBRdWFkIChMZWZ0KQ0KICAgICAgICBnbC5nbFZlcnRleDNmICgtMS4wZiwgLTAu
MjVmLCAxLjBmKTsJLy8gQm90dG9tIFJpZ2h0IE9mIFRoZSBRdWFkIChMZWZ0KQ0KDQoNCiAgICAg
ICAgLypnbC5nbFRleENvb3JkMmYoMC4wZiwgMC4wZik7IGdsLmdsVmVydGV4M2YoLTEuMGYsIC0x
LjBmLCAtMS4wZik7DQogICAgICAgIGdsLmdsVGV4Q29vcmQyZigxLjBmLCAwLjBmKTsgZ2wuZ2xW
ZXJ0ZXgzZigtMS4wZiwgLTEuMGYsICAxLjBmKTsNCiAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDEu
MGYsIDEuMGYpOyBnbC5nbFZlcnRleDNmKC0xLjBmLCAgMS4wZiwgIDEuMGYpOw0KICAgICAgICBn
bC5nbFRleENvb3JkMmYoMC4wZiwgMS4wZik7IGdsLmdsVmVydGV4M2YoLTEuMGYsICAxLjBmLCAt
MS4wZik7DQogICAgICAgICovDQogICAgICBnbC5nbEVuZCgpOw0KDQogICAgICB4cm90Kz0wLjNm
Ow0KICAgICAgeXJvdCs9MC4yZjsNCiAgICAgIHpyb3QrPTAuNGY7DQogICAgfQ0KDQoNCiAgICAv
KiogQ2FsbGVkIHdoZW4gdGhlIGRpc3BsYXkgbW9kZSBoYXMgYmVlbiBjaGFuZ2VkLiAgPEI+ISEg
Q1VSUkVOVExZIFVOSU1QTEVNRU5URUQgSU4gSk9HTCAhITwvQj4NCiAgICAgKiBAcGFyYW0gZ0xE
cmF3YWJsZSBUaGUgR0xEcmF3YWJsZSBvYmplY3QuDQogICAgICogQHBhcmFtIG1vZGVDaGFuZ2Vk
IEluZGljYXRlcyBpZiB0aGUgdmlkZW8gbW9kZSBoYXMgY2hhbmdlZC4NCiAgICAgKiBAcGFyYW0g
ZGV2aWNlQ2hhbmdlZCBJbmRpY2F0ZXMgaWYgdGhlIHZpZGVvIGRldmljZSBoYXMgY2hhbmdlZC4N
CiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBkaXNwbGF5Q2hhbmdlZChHTERyYXdhYmxlIGdMRHJh
d2FibGUsIGJvb2xlYW4gbW9kZUNoYW5nZWQsIGJvb2xlYW4gZGV2aWNlQ2hhbmdlZCkNCiAgICB7
DQogICAgfQ0KDQogICAgLyoqIENhbGxlZCBieSB0aGUgZHJhd2FibGUgaW1tZWRpYXRlbHkgYWZ0
ZXIgdGhlIE9wZW5HTCBjb250ZXh0IGlzDQogICAgICogaW5pdGlhbGl6ZWQgZm9yIHRoZSBmaXJz
dCB0aW1lLiBDYW4gYmUgdXNlZCB0byBwZXJmb3JtIG9uZS10aW1lIE9wZW5HTA0KICAgICAqIGlu
aXRpYWxpemF0aW9uIHN1Y2ggYXMgc2V0dXAgb2YgbGlnaHRzIGFuZCBkaXNwbGF5IGxpc3RzLg0K
ICAgICAqIEBwYXJhbSBnTERyYXdhYmxlIFRoZSBHTERyYXdhYmxlIG9iamVjdC4NCiAgICAgKi8N
CiAgICBwdWJsaWMgdm9pZCBpbml0KEdMRHJhd2FibGUgZ0xEcmF3YWJsZSkNCiAgICB7DQogICAg
ICBmaW5hbCBHTCBnbCA9IGdMRHJhd2FibGUuZ2V0R0woKTsNCiAgICAgIGdsLmdsU2hhZGVNb2Rl
bChHTC5HTF9TTU9PVEgpOyAgICAgICAgICAgICAgLy8gRW5hYmxlIFNtb290aCBTaGFkaW5nDQog
ICAgICBnbC5nbENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41Zik7ICAgIC8vIEJsYWNr
IEJhY2tncm91bmQNCiAgICAgIGdsLmdsQ2xlYXJEZXB0aCgxLjBmKTsgICAgICAgICAgICAgICAg
ICAgICAgLy8gRGVwdGggQnVmZmVyIFNldHVwDQogICAgICBnbC5nbEVuYWJsZShHTC5HTF9ERVBU
SF9URVNUKTsJCQkJCQkJLy8gRW5hYmxlcyBEZXB0aCBUZXN0aW5nDQogICAgICBnbC5nbERlcHRo
RnVuYyhHTC5HTF9MRVFVQUwpOwkJCQkJCQkJLy8gVGhlIFR5cGUgT2YgRGVwdGggVGVzdGluZyBU
byBEbw0KICAgICAgZ2wuZ2xIaW50KEdMLkdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwg
R0wuR0xfTklDRVNUKTsJLy8gUmVhbGx5IE5pY2UgUGVyc3BlY3RpdmUgQ2FsY3VsYXRpb25zDQog
ICAgICBnbC5nbEVuYWJsZShHTC5HTF9URVhUVVJFXzJEKTsNCiAgICAgIGdMRHJhd2FibGUuYWRk
S2V5TGlzdGVuZXIodGhpcyk7DQogICAgICB0ZXh0dXJlWzBdID0gZ2VuVGV4dHVyZShnbCk7DQog
ICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVbMF0pOw0KICAg
ICAgQnVmZmVyZWRJbWFnZSBpbWcgPSByZWFkUE5HSW1hZ2UoIi4vdG5ldE1TUC5qcGciKTsNCiAg
ICAgIG1ha2VSR0JUZXh0dXJlKGdsLCBnTERyYXdhYmxlLmdldEdMVSgpLCBpbWcsIEdMLkdMX1RF
WFRVUkVfMkQsIGZhbHNlKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJF
XzJELCBHTC5HTF9URVhUVVJFX01JTl9GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
R0wuR0xfTElORUFSKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJE
LCBHTC5HTF9URVhUVVJFX01BR19GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgR0wu
R0xfTElORUFSKTsNCiAgICAgIHRleHR1cmVbMV0gPSBnZW5UZXh0dXJlKGdsKTsNCiAgICAgIGds
LmdsQmluZFRleHR1cmUoR0wuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZVsxXSk7DQogICAgICBCdWZm
ZXJlZEltYWdlIGltZzIgPSByZWFkUE5HSW1hZ2UoIi4vdG5ldFJGLmpwZyIpOw0KICAgICAgbWFr
ZVJHQlRleHR1cmUoZ2wsIGdMRHJhd2FibGUuZ2V0R0xVKCksIGltZzIsIEdMLkdMX1RFWFRVUkVf
MkQsIGZhbHNlKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJELCBH
TC5HTF9URVhUVVJFX01JTl9GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xf
TElORUFSKTsNCiAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJELCBHTC5H
TF9URVhUVVJFX01BR19GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xfTElO
RUFSKTsNCg0KICAgIH0NCg0KICAgIC8qKiBDYWxsZWQgYnkgdGhlIGRyYXdhYmxlIGR1cmluZyB0
aGUgZmlyc3QgcmVwYWludCBhZnRlciB0aGUgY29tcG9uZW50IGhhcw0KICAgICAqIGJlZW4gcmVz
aXplZC4gVGhlIGNsaWVudCBjYW4gdXBkYXRlIHRoZSB2aWV3cG9ydCBhbmQgdmlldyB2b2x1bWUg
b2YgdGhlDQogICAgICogd2luZG93IGFwcHJvcHJpYXRlbHksIGZvciBleGFtcGxlIGJ5IGEgY2Fs
bCB0bw0KICAgICAqIEdMLmdsVmlld3BvcnQoaW50LCBpbnQsIGludCwgaW50KTsgbm90ZSB0aGF0
IGZvciBjb252ZW5pZW5jZSB0aGUgY29tcG9uZW50DQogICAgICogaGFzIGFscmVhZHkgY2FsbGVk
IEdMLmdsVmlld3BvcnQoaW50LCBpbnQsIGludCwgaW50KSh4LCB5LCB3aWR0aCwgaGVpZ2h0KQ0K
ICAgICAqIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBzbyB0aGUgY2xpZW50IG1heSBub3Qg
aGF2ZSB0byBkbyBhbnl0aGluZyBpbg0KICAgICAqIHRoaXMgbWV0aG9kLg0KICAgICAqIEBwYXJh
bSBnTERyYXdhYmxlIFRoZSBHTERyYXdhYmxlIG9iamVjdC4NCiAgICAgKiBAcGFyYW0geCBUaGUg
WCBDb29yZGluYXRlIG9mIHRoZSB2aWV3cG9ydCByZWN0YW5nbGUuDQogICAgICogQHBhcmFtIHkg
VGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdmlld3BvcnQgcmVjdGFuYmxlLg0KICAgICAqIEBwYXJh
bSB3aWR0aCBUaGUgbmV3IHdpZHRoIG9mIHRoZSB3aW5kb3cuDQogICAgICogQHBhcmFtIGhlaWdo
dCBUaGUgbmV3IGhlaWdodCBvZiB0aGUgd2luZG93Lg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lk
IHJlc2hhcGUoR0xEcmF3YWJsZSBnTERyYXdhYmxlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCkNCiAgICB7DQogICAgICBmaW5hbCBHTCBnbCA9IGdMRHJhd2FibGUuZ2V0R0wo
KTsNCiAgICAgIGZpbmFsIEdMVSBnbHUgPSBnTERyYXdhYmxlLmdldEdMVSgpOw0KDQogICAgICBp
ZiAoaGVpZ2h0IDw9IDApIC8vIGF2b2lkIGEgZGl2aWRlIGJ5IHplcm8gZXJyb3IhDQogICAgICAg
IGhlaWdodCA9IDE7DQogICAgICBmaW5hbCBmbG9hdCBoID0gKGZsb2F0KXdpZHRoIC8gKGZsb2F0
KWhlaWdodDsNCiAgICAgIGdsLmdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7DQogICAg
ICBnbC5nbE1hdHJpeE1vZGUoR0wuR0xfUFJPSkVDVElPTik7DQogICAgICBnbC5nbExvYWRJZGVu
dGl0eSgpOw0KICAgICAgZ2x1LmdsdVBlcnNwZWN0aXZlKDQ1LjBmLCBoLCAxLjAsIDIwLjApOw0K
ICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMLkdMX01PREVMVklFVyk7DQogICAgICBnbC5nbExvYWRJ
ZGVudGl0eSgpOw0KICAgIH0NCg0KICAgIC8qKiBJbnZva2VkIHdoZW4gYSBrZXkgaGFzIGJlZW4g
cHJlc3NlZC4NCiAgICAgKiBTZWUgdGhlIGNsYXNzIGRlc2NyaXB0aW9uIGZvciB7QGxpbmsgS2V5
RXZlbnR9IGZvciBhIGRlZmluaXRpb24gb2YNCiAgICAgKiBhIGtleSBwcmVzc2VkIGV2ZW50Lg0K
ICAgICAqIEBwYXJhbSBlIFRoZSBLZXlFdmVudC4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBr
ZXlQcmVzc2VkKEtleUV2ZW50IGUpDQogICAge30NCg0KICAgIC8qKiBJbnZva2VkIHdoZW4gYSBr
ZXkgaGFzIGJlZW4gcmVsZWFzZWQuDQogICAgICogU2VlIHRoZSBjbGFzcyBkZXNjcmlwdGlvbiBm
b3Ige0BsaW5rIEtleUV2ZW50fSBmb3IgYSBkZWZpbml0aW9uIG9mDQogICAgICogYSBrZXkgcmVs
ZWFzZWQgZXZlbnQuDQogICAgICogQHBhcmFtIGUgVGhlIEtleUV2ZW50Lg0KICAgICAqLw0KICAg
IHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKEtleUV2ZW50IGUpDQogICAge30NCg0KICAgIC8qKiBJ
bnZva2VkIHdoZW4gYSBrZXkgaGFzIGJlZW4gdHlwZWQuDQogICAgICogU2VlIHRoZSBjbGFzcyBk
ZXNjcmlwdGlvbiBmb3Ige0BsaW5rIEtleUV2ZW50fSBmb3IgYSBkZWZpbml0aW9uIG9mDQogICAg
ICogYSBrZXkgdHlwZWQgZXZlbnQuDQogICAgICogQHBhcmFtIGUgVGhlIEtleUV2ZW50Lg0KICAg
ICAqLw0KICAgIHB1YmxpYyB2b2lkIGtleVR5cGVkKEtleUV2ZW50IGUpDQogICAgew0KICAgICAg
aWYgKGUuZ2V0S2V5Q2hhcigpID09IEtleUV2ZW50LlZLX0VTQ0FQRSkNCiAgICAgIHsNCg0KICAg
ICAgICBTeXN0ZW0uZXhpdCgwKTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBwcml2YXRlIEJ1ZmZl
cmVkSW1hZ2UgcmVhZFBOR0ltYWdlKFN0cmluZyByZXNvdXJjZU5hbWUpDQogICAgew0KICAgICAg
dHJ5DQogICAgICB7DQogICAgICAgIFVSTCB1cmwgPSBnZXRSZXNvdXJjZShyZXNvdXJjZU5hbWUp
Ow0KICAgICAgICBpZiAodXJsID09IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgcmVhZGluZyByZXNvdXJjZSAiICsgcmVzb3VyY2VO
YW1lKTsNCiAgICAgICAgfQ0KICAgICAgICBCdWZmZXJlZEltYWdlIGltZyA9IEltYWdlSU8ucmVh
ZCh1cmwpOw0KICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSB0eCA9IGphdmEu
YXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtLmdldFNjYWxlSW5zdGFuY2UoMSwgLTEpOw0KICAgICAg
ICB0eC50cmFuc2xhdGUoMCwgLWltZy5nZXRIZWlnaHQobnVsbCkpOw0KICAgICAgICBBZmZpbmVU
cmFuc2Zvcm1PcCBvcCA9IG5ldyBBZmZpbmVUcmFuc2Zvcm1PcCh0eCwgQWZmaW5lVHJhbnNmb3Jt
T3AuVFlQRV9ORUFSRVNUX05FSUdIQk9SKTsNCiAgICAgICAgaW1nID0gb3AuZmlsdGVyKGltZywg
bnVsbCk7DQogICAgICAgIHJldHVybiBpbWc7DQogICAgICB9DQogICAgICBjYXRjaCAoSU9FeGNl
cHRpb24gZSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7
DQogICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSB2b2lkIG1ha2VSR0JUZXh0dXJlKEdMIGds
LCBHTFUgZ2x1LCBCdWZmZXJlZEltYWdlIGltZywgaW50IHRhcmdldCwgYm9vbGVhbiBtaXBtYXBw
ZWQpDQogICAgew0KICAgICAgQnl0ZUJ1ZmZlciBkZXN0ID0gbnVsbDsNCiAgICAgIHN3aXRjaCAo
aW1nLmdldFR5cGUoKSkNCiAgICAgIHsNCiAgICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVf
M0JZVEVfQkdSOg0KICAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9DVVNUT006DQogICAg
ICAgIHsNCiAgICAgICAgICBieXRlW10gZGF0YSA9ICgoRGF0YUJ1ZmZlckJ5dGUpIGltZy5nZXRS
YXN0ZXIoKS5nZXREYXRhQnVmZmVyKCkpLmdldERhdGEoKTsNCiAgICAgICAgICBkZXN0ID0gQnl0
ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChkYXRhLmxlbmd0aCk7DQogICAgICAgICAgZGVzdC5vcmRl
cihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSk7DQogICAgICAgICAgZGVzdC5wdXQoZGF0YSwgMCwg
ZGF0YS5sZW5ndGgpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGNhc2Ug
QnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6DQogICAgICAgIHsNCiAgICAgICAgICBpbnRbXSBk
YXRhID0gKChEYXRhQnVmZmVySW50KSBpbWcuZ2V0UmFzdGVyKCkuZ2V0RGF0YUJ1ZmZlcigpKS5n
ZXREYXRhKCk7DQogICAgICAgICAgZGVzdCA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoZGF0
YS5sZW5ndGggKiBCdWZmZXJVdGlscy5TSVpFT0ZfSU5UKTsNCiAgICAgICAgICBkZXN0Lm9yZGVy
KEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsNCiAgICAgICAgICBkZXN0LmFzSW50QnVmZmVyKCku
cHV0KGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0K
ICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJV
bnN1cHBvcnRlZCBpbWFnZSB0eXBlICIgKyBpbWcuZ2V0VHlwZSgpKTsNCiAgICAgIH0NCg0KICAg
ICAgaWYgKG1pcG1hcHBlZCkNCiAgICAgIHsNCiAgICAgICAgZ2x1LmdsdUJ1aWxkMkRNaXBtYXBz
KHRhcmdldCwgR0wuR0xfUkdCOCwgaW1nLmdldFdpZHRoKCksIGltZy5nZXRIZWlnaHQoKSwgR0wu
R0xfUkdCLCBHTC5HTF9VTlNJR05FRF9CWVRFLCBkZXN0KTsNCiAgICAgIH0NCiAgICAgIGVsc2UN
CiAgICAgIHsNCiAgICAgICAgZ2wuZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgR0wuR0xfUkdCLCBp
bWcuZ2V0V2lkdGgoKSwgaW1nLmdldEhlaWdodCgpLCAwLCBHTC5HTF9SR0IsIEdMLkdMX1VOU0lH
TkVEX0JZVEUsIGRlc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHByaXZhdGUgaW50IGdlblRl
eHR1cmUoR0wgZ2wpDQogICAgew0KICAgICAgZmluYWwgaW50W10gdG1wID0gbmV3IGludFsxXTsN
CiAgICAgIGdsLmdsR2VuVGV4dHVyZXMoMSwgdG1wKTsNCiAgICAgIHJldHVybiB0bXBbMF07DQog
ICAgfQ0KICB9DQoNCiAgLyoqIFJldHJpZXZlIGEgVVJMIHJlc291cmNlIGZyb20gdGhlIGphci4g
IElmIHRoZSByZXNvdXJjZSBpcyBub3QgZm91bmQsIHRoZW4NCiAgICogdGhlIGxvY2FsIGRpc2sg
aXMgYWxzbyBjaGVja2VkLg0KICAgKiBAcGFyYW0gZmlsZW5hbWUgQ29tcGxldGUgZmlsZW5hbWUs
IGluY2x1ZGluZyBwYXJlbnQgcGF0aA0KICAgKiBAcmV0dXJuIGEgVVJMIG9iamVjdCBpZiByZXNv
dXJjZSBpcyBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuDQogICAqLw0KICBwdWJsaWMgZmluYWwgc3Rh
dGljIFVSTCBnZXRSZXNvdXJjZShmaW5hbCBTdHJpbmcgZmlsZW5hbWUpDQogIHsNCiAgICAvLyBU
cnkgdG8gbG9hZCByZXNvdXJjZSBmcm9tIGphcg0KICAgIFVSTCB1cmwgPSBDbGFzc0xvYWRlci5n
ZXRTeXN0ZW1SZXNvdXJjZShmaWxlbmFtZSk7DQogICAgLy8gSWYgbm90IGZvdW5kIGluIGphciwg
dGhlbiBsb2FkIGZyb20gZGlzaw0KICAgIGlmICh1cmwgPT0gbnVsbCkNCiAgICB7DQogICAgICB0
cnkNCiAgICAgIHsNCiAgICAgICAgdXJsID0gbmV3IFVSTCgiZmlsZSIsICJsb2NhbGhvc3QiLCBm
aWxlbmFtZSk7DQogICAgICB9DQogICAgICBjYXRjaCAoRXhjZXB0aW9uIHVybEV4Y2VwdGlvbil7
fSAvLyBpZ25vcmUNCiAgICB9DQogICAgcmV0dXJuIHVybDsNCiAgfQ0KDQogIC8qKiBQcm9ncmFt
J3MgbWFpbiBlbnRyeSBwb2ludA0KICAgKiBAcGFyYW0gYXJncyBjb21tYW5kIGxpbmUgYXJndW1l
bnRzLg0KICAgKi8NCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykNCiAg
ew0KICAgIEZyYW1lIGZyYW1lID0gbmV3IEZyYW1lKCJMZXNzb24gNjogVGV4dHVyZSBNYXBwaW5n
Iik7DQoNCiAgICBKRGVza3RvcFBhbmUgZGVza3RvcD1uZXcgSkRlc2t0b3BQYW5lKCk7DQogICAg
SkludGVybmFsRnJhbWUgbDZmcmFtZSA9IG5ldyBKSW50ZXJuYWxGcmFtZSgiM0QgdGV4dHVyZSIs
IHRydWUsdHJ1ZSx0cnVlLHRydWUpOw0KDQogICAgbDZmcmFtZS5zZXRCb3VuZHMoMCwgMCwgNDAw
LCA0MDApOw0KDQogICAgR0xDYW52YXMgY2FudmFzID0gR0xEcmF3YWJsZUZhY3RvcnkuZ2V0RmFj
dG9yeSgpLmNyZWF0ZUdMQ2FudmFzKG5ldyBHTENhcGFiaWxpdGllcygpKTsNCg0KICAgIGNhbnZh
cy5hZGRHTEV2ZW50TGlzdGVuZXIobmV3IFJlbmRlcmVyKCkpOw0KICAgIGFuaW1hdG9yID0gbmV3
IEFuaW1hdG9yKGNhbnZhcyk7DQogICAgbDZmcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChjYW52
YXMpOw0KDQogICAgZGVza3RvcC5hZGQoIkNlbnRlciIsbDZmcmFtZSk7DQoNCi8vICAgIGZyYW1l
LmFkZChjYW52YXMpOw0KICAgIGZyYW1lLmFkZChkZXNrdG9wKTsNCiAgICBmcmFtZS5zZXRTaXpl
KDEwMjQsIDc2OCk7DQoNCg0KICAgIGZyYW1lLmFkZFdpbmRvd0xpc3RlbmVyKG5ldyBXaW5kb3dB
ZGFwdGVyKCkNCiAgICB7DQogICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2
ZW50IGUpDQogICAgICB7DQogICAgICAgIGFuaW1hdG9yLnN0b3AoKTsNCiAgICAgICAgU3lzdGVt
LmV4aXQoMCk7DQogICAgICB9DQogICAgfSk7DQogICAgLy9hbmltYXRvci5zdG9wKCk7DQogICAg
ZnJhbWUuc2hvdygpOw0KICAgIGw2ZnJhbWUuc2V0VmlzaWJsZSh0cnVlKTsNCiAgICBhbmltYXRv
ci5zdGFydCgpOw0KDQogIH0NCn0NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>9</attachid>
            <date>2003-08-07 13:36:00 +0200</date>
            <delta_ts>2003-08-07 13:36:00 +0200</delta_ts>
            <desc>Jar File for reproducing error</desc>
            <filename>lesson06.jar</filename>
            <type>application/octet-stream</type>
            <size>13880</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">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
dFJGLmpwZ1BLBQYAAAAABwAHAKkBAAB5NAAAAAA=
</data>

          </attachment>
      

    </bug>

</bugzilla>