home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / debug / RemoteAgent.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  21.7 KB  |  1,478 lines

  1. package sun.tools.debug;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.DataInputStream;
  7. import java.io.DataOutputStream;
  8. import java.io.EOFException;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.PipedInputStream;
  12. import java.io.PipedOutputStream;
  13. import java.net.Socket;
  14. import java.util.Hashtable;
  15.  
  16. class RemoteAgent implements AgentConstants {
  17.    private Socket socket;
  18.    // $FF: renamed from: in java.io.DataInputStream
  19.    private DataInputStream field_0;
  20.    private DataOutputStream out;
  21.    private Hashtable objects = new Hashtable();
  22.    private DebuggerCallback client;
  23.    private AgentIn debugIn;
  24.    private Thread debugInThread;
  25.    private RemoteClass classObject;
  26.    RemoteClass classClass;
  27.    RemoteClass classString;
  28.    boolean closeRemoteInterpreter = false;
  29.    private RemoteThreadGroup systemThreadGroup;
  30.    private boolean verbose = false;
  31.    private boolean closing = false;
  32.    private boolean closed = false;
  33.  
  34.    private int readPassword(String var1) {
  35.       int var2 = 0;
  36.       int var3 = "23456789abcdefghijkmnpqrstuvwxyz".length();
  37.  
  38.       for(int var4 = 0; var4 < var1.length(); ++var4) {
  39.          int var5 = "23456789abcdefghijkmnpqrstuvwxyz".indexOf(var1.charAt(var4));
  40.          if (var5 == -1) {
  41.             return 0;
  42.          }
  43.  
  44.          var2 = var2 * var3 + var5;
  45.       }
  46.  
  47.       int var8 = 0;
  48.  
  49.       for(int var6 = 0; var6 < 8; ++var6) {
  50.          int var7 = var2 & 6 << var6 * 3;
  51.          var8 |= var7 >> var6 + 1;
  52.       }
  53.  
  54.       return var8;
  55.    }
  56.  
  57.    private void initSession(boolean var1) throws Exception {
  58.       int var2 = this.field_0.readInt();
  59.       if (var2 != 3) {
  60.          System.err.println("Version mismatch between debugger and remote agent.");
  61.          System.exit(1);
  62.       }
  63.  
  64.       this.classObject = (RemoteClass)this.readValue(this.field_0);
  65.       this.classClass = (RemoteClass)this.readValue(this.field_0);
  66.       this.classString = (RemoteClass)this.readValue(this.field_0);
  67.       this.message("loading classes ...");
  68.       int var3 = this.field_0.readInt();
  69.  
  70.       for(int var4 = 0; var4 < var3; ++var4) {
  71.          RemoteClass var10000 = (RemoteClass)this.readValue(this.field_0);
  72.       }
  73.  
  74.       this.systemThreadGroup = (RemoteThreadGroup)this.readValue(this.field_0);
  75.       this.setVerbose(var1);
  76.       this.closing = this.closed = false;
  77.    }
  78.  
  79.    RemoteAgent(String var1, String var2, String var3, DebuggerCallback var4, boolean var5) throws Exception {
  80.       this.verbose = var5;
  81.       if (var1.equals("127.0.0.1") && var2 == null) {
  82.          String var6 = System.getProperty("file.separator");
  83.          String var7 = new String(System.getProperty("java.home") + var6 + "bin" + var6 + "java_g -debug " + var3 + " sun.tools.debug.EmptyApp");
  84.          this.message("starting child: " + var7);
  85.          Process var8 = Runtime.getRuntime().exec(var7);
  86.          DataInputStream var9 = new DataInputStream(var8.getInputStream());
  87.          String var10 = var9.readLine();
  88.          if (var10 == null) {
  89.             this.error("Failed to exec a child java interpreter.");
  90.             System.exit(1);
  91.          }
  92.  
  93.          var2 = var10.substring(var10.indexOf("=") + 1);
  94.          this.message("password returned: " + var2);
  95.          this.closeRemoteInterpreter = true;
  96.       }
  97.  
  98.       this.client = var4;
  99.       this.socket = new Socket(var1, this.readPassword(var2));
  100.       DataInputStream var11 = new DataInputStream(new BufferedInputStream((new Socket(var1, this.getDebugPort())).getInputStream()));
  101.       this.debugIn = new AgentIn(this, var11, var4, var5);
  102.       this.debugInThread = new Thread(this.debugIn, "Agent input");
  103.       this.debugInThread.start();
  104.       this.field_0 = new DataInputStream(new BufferedInputStream(this.socket.getInputStream()));
  105.       this.out = new DataOutputStream(new BufferedOutputStream(this.socket.getOutputStream()));
  106.       this.message("connected");
  107.       this.initSession(var5);
  108.    }
  109.  
  110.    RemoteAgent(DebuggerCallback var1, boolean var2) throws Exception {
  111.       if (!Agent.isDebuggable()) {
  112.          throw new IllegalAccessError();
  113.       } else {
  114.          this.verbose = var2;
  115.          this.client = var1;
  116.          PipedInputStream var3 = new PipedInputStream();
  117.          PipedOutputStream var4 = new PipedOutputStream();
  118.          PipedInputStream var5 = new PipedInputStream();
  119.          Agent.connectToAgent(var4, var3, var5);
  120.          DataInputStream var6 = new DataInputStream(new BufferedInputStream(var5));
  121.          this.debugIn = new AgentIn(this, var6, var1, var2);
  122.          this.debugInThread = new Thread(this.debugIn, "Agent input");
  123.          this.debugInThread.start();
  124.          this.field_0 = new DataInputStream(var3);
  125.          this.out = new DataOutputStream(var4);
  126.          this.message("connected");
  127.          Agent.addSystemThread(Thread.currentThread());
  128.          this.initSession(var2);
  129.       }
  130.    }
  131.  
  132.    int getDebugPort() {
  133.       return this.socket.getPort();
  134.    }
  135.  
  136.    InputStream getSourceFile(String var1, String var2) throws Exception {
  137.       DataOutputStream var4 = this.out;
  138.       synchronized(var4){}
  139.  
  140.       try {
  141.          this.out.write(59);
  142.          this.out.writeUTF(var2);
  143.          this.out.writeUTF(var1);
  144.  
  145.          try {
  146.             this.getReply(59);
  147.          } catch (Exception var11) {
  148.             Object var3 = null;
  149.             return (InputStream)var3;
  150.          }
  151.  
  152.          int var6 = this.field_0.readInt();
  153.          if (var6 == -1) {
  154.             Object var16 = null;
  155.             return (InputStream)var16;
  156.          } else {
  157.             this.message("getSourceFile: allocating " + var6 + " bytes.");
  158.             byte[] var7 = new byte[var6];
  159.  
  160.             try {
  161.                this.field_0.readFully(var7);
  162.             } catch (IOException var12) {
  163.                this.error("unable to read " + var2);
  164.                Object var14 = null;
  165.                return (InputStream)var14;
  166.             }
  167.  
  168.             ByteArrayInputStream var15 = new ByteArrayInputStream(var7);
  169.             return var15;
  170.          }
  171.       } catch (Throwable var13) {
  172.          throw var13;
  173.       }
  174.    }
  175.  
  176.    String objectToString(int var1) {
  177.       DataOutputStream var3 = this.out;
  178.       synchronized(var3){}
  179.  
  180.       String var2;
  181.       try {
  182.          try {
  183.             this.out.write(60);
  184.             this.out.writeInt(var1);
  185.             this.getReply(60);
  186.             var2 = this.field_0.readUTF();
  187.             return var2;
  188.          } catch (Exception var7) {
  189.             var2 = "<communication error>";
  190.          }
  191.       } catch (Throwable var8) {
  192.          throw var8;
  193.       }
  194.  
  195.       return var2;
  196.    }
  197.  
  198.    void close() {
  199.       this.message("close(" + this.closeRemoteInterpreter + ")");
  200.       this.closing = true;
  201.  
  202.       try {
  203.          this.debugInThread.stop();
  204.          if (this.closeRemoteInterpreter) {
  205.             DataOutputStream var1 = this.out;
  206.             synchronized(var1){}
  207.  
  208.             try {
  209.                this.out.write(58);
  210.                this.getReply(58);
  211.             } catch (Throwable var4) {
  212.                throw var4;
  213.             }
  214.          }
  215.  
  216.          if (this.socket != null) {
  217.             this.socket.close();
  218.          }
  219.       } catch (Exception var5) {
  220.       }
  221.  
  222.       this.closed = true;
  223.    }
  224.  
  225.    RemoteObject get(Integer var1) {
  226.       return (RemoteObject)this.objects.get(var1);
  227.    }
  228.  
  229.    private void put(Integer var1, RemoteObject var2) {
  230.       this.objects.put(var1, var2);
  231.    }
  232.  
  233.    RemoteValue readValue(DataInputStream var1) throws Exception {
  234.       int var2 = var1.readInt();
  235.       switch (var2) {
  236.          case 0:
  237.             return new RemoteBoolean(var1.readBoolean());
  238.          case 1:
  239.             return new RemoteByte(var1.readByte());
  240.          case 2:
  241.             return new RemoteChar(var1.readChar());
  242.          case 3:
  243.             return new RemoteShort(var1.readShort());
  244.          case 4:
  245.             return new RemoteInt(var1.readInt());
  246.          case 5:
  247.             return new RemoteLong(var1.readLong());
  248.          case 6:
  249.             return new RemoteFloat(var1.readFloat());
  250.          case 7:
  251.             return new RemoteDouble(var1.readDouble());
  252.          case 9:
  253.             int var15 = var1.readInt();
  254.             if (var15 == 0) {
  255.                return null;
  256.             }
  257.  
  258.             Integer var24 = new Integer(var15);
  259.             RemoteClass var30 = (RemoteClass)this.get(var24);
  260.             if (var30 == null) {
  261.                this.put(var24, var30 = new RemoteClass(this, var15));
  262.             }
  263.  
  264.             var15 = var1.readInt();
  265.             var24 = new Integer(var15);
  266.             int var33 = var1.readInt();
  267.             RemoteArray var7 = (RemoteArray)this.get(var24);
  268.             if (var7 == null) {
  269.                this.put(var24, var7 = new RemoteArray(this, var15, var30, var33));
  270.             }
  271.  
  272.             return var7;
  273.          case 15:
  274.             int var13 = var1.readInt();
  275.             Integer var22 = new Integer(var13);
  276.             RemoteClass var29 = (RemoteClass)this.get(var22);
  277.             if (var29 == null) {
  278.                this.put(var22, var29 = new RemoteClass(this, var13));
  279.             }
  280.  
  281.             var13 = var1.readInt();
  282.             var22 = new Integer(var13);
  283.             RemoteThreadGroup var32 = (RemoteThreadGroup)this.get(var22);
  284.             if (var32 == null) {
  285.                this.put(var22, var32 = new RemoteThreadGroup(this, var13, var29));
  286.             }
  287.  
  288.             return var32;
  289.          case 16:
  290.             int var12 = var1.readInt();
  291.             Integer var21 = new Integer(var12);
  292.             RemoteClass var28 = (RemoteClass)this.get(var21);
  293.             if (var28 == null) {
  294.                this.put(var21, var28 = new RemoteClass(this, var12));
  295.             }
  296.  
  297.             return var28;
  298.          case 17:
  299.             int var10 = var1.readInt();
  300.             if (var10 == 0) {
  301.                return null;
  302.             }
  303.  
  304.             Integer var19 = new Integer(var10);
  305.             RemoteClass var27 = (RemoteClass)this.get(var19);
  306.             if (var27 == null) {
  307.                this.put(var19, var27 = new RemoteClass(this, var10));
  308.             }
  309.  
  310.             var10 = var1.readInt();
  311.             var19 = new Integer(var10);
  312.             RemoteObject var31 = this.get(var19);
  313.             if (var31 == null) {
  314.                this.put(var19, var31 = new RemoteObject(this, var10, var27));
  315.             }
  316.  
  317.             return var31;
  318.          case 18:
  319.             int var9 = var1.readInt();
  320.             Integer var18 = new Integer(var9);
  321.             RemoteString var26 = (RemoteString)this.get(var18);
  322.             if (var26 == null) {
  323.                this.put(var18, var26 = new RemoteString(this, var9));
  324.             }
  325.  
  326.             return var26;
  327.          case 19:
  328.             int var3 = var1.readInt();
  329.             Integer var4 = new Integer(var3);
  330.             RemoteClass var5 = (RemoteClass)this.get(var4);
  331.             if (var5 == null) {
  332.                this.put(var4, var5 = new RemoteClass(this, var3));
  333.             }
  334.  
  335.             var3 = var1.readInt();
  336.             var4 = new Integer(var3);
  337.             RemoteThread var6 = (RemoteThread)this.get(var4);
  338.             if (var6 == null) {
  339.                this.put(var4, var6 = new RemoteThread(this, var3, var5));
  340.             }
  341.  
  342.             return var6;
  343.          default:
  344.             this.error("invalid type code: " + var2);
  345.             return null;
  346.       }
  347.    }
  348.  
  349.    private void getReply(int var1) throws Exception {
  350.       if (this.closed) {
  351.          throw new NoSessionException();
  352.       } else {
  353.          this.out.flush();
  354.  
  355.          while(true) {
  356.             int var2 = 0;
  357.  
  358.             try {
  359.                var2 = this.field_0.readInt();
  360.             } catch (EOFException var4) {
  361.                if (!this.closing) {
  362.                   this.error("unexpected eof");
  363.                }
  364.  
  365.                return;
  366.             } catch (IOException var5) {
  367.                if (this.closing) {
  368.                   return;
  369.                }
  370.  
  371.                throw var5;
  372.             }
  373.  
  374.             if (var2 == -2) {
  375.                Exception var3 = new Exception(this.field_0.readUTF());
  376.                throw var3;
  377.             }
  378.  
  379.             if (var2 == var1) {
  380.                return;
  381.             }
  382.  
  383.             this.error("unexpected reply: wanted " + var1 + ", got " + var2);
  384.          }
  385.       }
  386.    }
  387.  
  388.    RemoteClass[] listClasses() throws Exception {
  389.       DataOutputStream var2 = this.out;
  390.       synchronized(var2){}
  391.  
  392.       RemoteClass[] var1;
  393.       try {
  394.          this.out.write(49);
  395.          this.getReply(49);
  396.          int var4 = this.field_0.readInt();
  397.          this.message("reading " + var4 + " classes...");
  398.          RemoteClass[] var5 = new RemoteClass[var4];
  399.  
  400.          for(int var6 = 0; var6 < var4; ++var6) {
  401.             var5[var6] = (RemoteClass)this.readValue(this.field_0);
  402.          }
  403.  
  404.          var1 = var5;
  405.       } catch (Throwable var8) {
  406.          throw var8;
  407.       }
  408.  
  409.       return var1;
  410.    }
  411.  
  412.    RemoteClass findClass(String var1) throws Exception {
  413.       RemoteClass[] var2 = this.listClasses();
  414.  
  415.       for(int var3 = 0; var3 < var2.length; ++var3) {
  416.          String var4 = var2[var3].getName();
  417.          if (var1.equals(var4)) {
  418.             return var2[var3];
  419.          }
  420.  
  421.          int var5 = var4.lastIndexOf(".");
  422.          if (var5 >= 0 && var4.length() > var5) {
  423.             var4 = var4.substring(var5 + 1);
  424.          }
  425.  
  426.          if (var1.equals(var4)) {
  427.             return var2[var3];
  428.          }
  429.       }
  430.  
  431.       return this.getClassByName(var1);
  432.    }
  433.  
  434.    RemoteThreadGroup[] listThreadGroups(RemoteThreadGroup var1) throws Exception {
  435.       Object var2 = null;
  436.       DataOutputStream var3 = this.out;
  437.       synchronized(var3){}
  438.  
  439.       try {
  440.          this.out.write(47);
  441.          this.out.writeInt(var1 == null ? 0 : ((RemoteObject)var1).getId());
  442.          this.getReply(47);
  443.          int var5 = this.field_0.readInt();
  444.          var9 = new RemoteThreadGroup[var5];
  445.          this.message("listThreadGroups: " + var5 + " groups");
  446.  
  447.          for(int var6 = 0; var6 < var5; ++var6) {
  448.             var9[var6] = (RemoteThreadGroup)this.readValue(this.field_0);
  449.          }
  450.       } catch (Throwable var8) {
  451.          throw var8;
  452.       }
  453.  
  454.       return var9;
  455.    }
  456.  
  457.    RemoteThread[] listThreads(RemoteThreadGroup var1, boolean var2) throws Exception {
  458.       DataOutputStream var4 = this.out;
  459.       synchronized(var4){}
  460.  
  461.       RemoteThread[] var3;
  462.       try {
  463.          this.out.write(25);
  464.          this.out.writeInt(var1 == null ? this.systemThreadGroup.getId() : ((RemoteObject)var1).getId());
  465.          this.out.writeBoolean(var2);
  466.          this.getReply(25);
  467.          int var6 = this.field_0.readInt();
  468.          RemoteThread[] var7 = new RemoteThread[var6];
  469.  
  470.          for(int var8 = 0; var8 < var6; ++var8) {
  471.             var7[var8] = (RemoteThread)this.readValue(this.field_0);
  472.          }
  473.  
  474.          var3 = var7;
  475.       } catch (Throwable var10) {
  476.          throw var10;
  477.       }
  478.  
  479.       return var3;
  480.    }
  481.  
  482.    void suspendThread(int var1) throws Exception {
  483.       DataOutputStream var2 = this.out;
  484.       synchronized(var2){}
  485.  
  486.       try {
  487.          this.out.write(27);
  488.          this.out.writeInt(var1);
  489.          this.getReply(27);
  490.       } catch (Throwable var4) {
  491.          throw var4;
  492.       }
  493.  
  494.    }
  495.  
  496.    void resumeThread(int var1) throws Exception {
  497.       DataOutputStream var2 = this.out;
  498.       synchronized(var2){}
  499.  
  500.       try {
  501.          this.out.write(28);
  502.          this.out.writeInt(var1);
  503.          this.getReply(28);
  504.       } catch (Throwable var4) {
  505.          throw var4;
  506.       }
  507.  
  508.    }
  509.  
  510.    void resumeLastSuspendedThreads() throws Exception {
  511.       DataOutputStream var1 = this.out;
  512.       synchronized(var1){}
  513.  
  514.       try {
  515.          this.out.write(29);
  516.          this.getReply(29);
  517.       } catch (Throwable var3) {
  518.          throw var3;
  519.       }
  520.  
  521.    }
  522.  
  523.    RemoteStackFrame[] dumpStack(RemoteThread var1) throws Exception {
  524.       DataOutputStream var3 = this.out;
  525.       synchronized(var3){}
  526.  
  527.       RemoteStackFrame[] var2;
  528.       try {
  529.          this.out.write(32);
  530.          this.out.writeInt(((RemoteObject)var1).getId());
  531.          this.getReply(32);
  532.          int var5 = this.field_0.readInt();
  533.          RemoteStackFrame[] var6 = new RemoteStackFrame[var5];
  534.  
  535.          for(int var7 = 0; var7 < var5; ++var7) {
  536.             RemoteObject var8 = (RemoteObject)this.readValue(this.field_0);
  537.             var6[var7] = new RemoteStackFrame(var8, var1, var7, this);
  538.             var6[var7].className = this.field_0.readUTF();
  539.             var6[var7].methodName = this.field_0.readUTF();
  540.             var6[var7].lineno = this.field_0.readInt();
  541.             var6[var7].pc = this.field_0.readInt();
  542.             var6[var7].setRemoteClass((RemoteClass)this.readValue(this.field_0));
  543.             int var9 = this.field_0.readInt();
  544.             var6[var7].localVariables = new LocalVariable[var9];
  545.  
  546.             for(int var10 = 0; var10 < var9; ++var10) {
  547.                LocalVariable var11 = new LocalVariable();
  548.                var11.slot = this.field_0.readInt();
  549.                var11.name = this.field_0.readUTF();
  550.                var11.signature = this.field_0.readUTF();
  551.                var11.methodArgument = this.field_0.readBoolean();
  552.                this.message("lvar " + var10 + ": slot=" + var11.slot + ", name=" + var11.name + ", sig=" + var11.signature + ", arg=" + var11.methodArgument);
  553.                var6[var7].localVariables[var10] = var11;
  554.             }
  555.          }
  556.  
  557.          var2 = var6;
  558.       } catch (Throwable var13) {
  559.          throw var13;
  560.       }
  561.  
  562.       return var2;
  563.    }
  564.  
  565.    void stopThread(int var1) throws Exception {
  566.       DataOutputStream var2 = this.out;
  567.       synchronized(var2){}
  568.  
  569.       try {
  570.          this.out.write(56);
  571.          this.out.writeInt(var1);
  572.          this.getReply(56);
  573.       } catch (Throwable var4) {
  574.          throw var4;
  575.       }
  576.  
  577.    }
  578.  
  579.    void stopThreadGroup(int var1) throws Exception {
  580.       DataOutputStream var2 = this.out;
  581.       synchronized(var2){}
  582.  
  583.       try {
  584.          this.out.write(57);
  585.          this.out.writeInt(var1);
  586.          this.getReply(57);
  587.       } catch (Throwable var4) {
  588.          throw var4;
  589.       }
  590.  
  591.    }
  592.  
  593.    void getClassInfo(RemoteClass var1) throws Exception {
  594.       DataOutputStream var2 = this.out;
  595.       synchronized(var2){}
  596.  
  597.       try {
  598.          this.out.write(20);
  599.          this.out.writeInt(var1.id);
  600.          this.getReply(20);
  601.          var1.name = this.field_0.readUTF();
  602.          var1.sourceName = this.field_0.readUTF();
  603.          var1.intf = this.field_0.readInt() != 0;
  604.          var1.superclass = (RemoteClass)this.readValue(this.field_0);
  605.          var1.loader = (RemoteObject)this.readValue(this.field_0);
  606.          var1.interfaces = new RemoteClass[this.field_0.readInt()];
  607.  
  608.          for(int var4 = 0; var4 < var1.interfaces.length; ++var4) {
  609.             var1.interfaces[var4] = (RemoteClass)this.readValue(this.field_0);
  610.          }
  611.       } catch (Throwable var6) {
  612.          throw var6;
  613.       }
  614.  
  615.    }
  616.  
  617.    RemoteClass getClassByName(String var1) throws Exception {
  618.       DataOutputStream var3 = this.out;
  619.       synchronized(var3){}
  620.  
  621.       RemoteClass var2;
  622.       try {
  623.          this.out.write(22);
  624.          this.out.writeUTF(var1);
  625.          this.getReply(22);
  626.          var2 = (RemoteClass)this.readValue(this.field_0);
  627.       } catch (Throwable var6) {
  628.          throw var6;
  629.       }
  630.  
  631.       return var2;
  632.    }
  633.  
  634.    void getThreadGroupInfo(RemoteThreadGroup var1) throws Exception {
  635.       DataOutputStream var2 = this.out;
  636.       synchronized(var2){}
  637.  
  638.       try {
  639.          this.out.write(48);
  640.          this.out.writeInt(var1.id);
  641.          this.getReply(48);
  642.          var1.parent = (RemoteThreadGroup)this.readValue(this.field_0);
  643.          var1.name = this.field_0.readUTF();
  644.          var1.maxPriority = this.field_0.readInt();
  645.          var1.daemon = this.field_0.readBoolean();
  646.       } catch (Throwable var4) {
  647.          throw var4;
  648.       }
  649.  
  650.    }
  651.  
  652.    String getThreadName(int var1) throws Exception {
  653.       DataOutputStream var3 = this.out;
  654.       synchronized(var3){}
  655.  
  656.       String var2;
  657.       try {
  658.          this.out.write(21);
  659.          this.out.writeInt(var1);
  660.          this.getReply(21);
  661.          var2 = this.field_0.readUTF();
  662.       } catch (Throwable var6) {
  663.          throw var6;
  664.       }
  665.  
  666.       return var2;
  667.    }
  668.  
  669.    int getThreadStatus(int var1) throws Exception {
  670.       DataOutputStream var3 = this.out;
  671.       synchronized(var3){}
  672.  
  673.       int var2;
  674.       try {
  675.          this.out.write(31);
  676.          this.out.writeInt(var1);
  677.          this.getReply(31);
  678.          var2 = this.field_0.readInt();
  679.       } catch (Throwable var6) {
  680.          throw var6;
  681.       }
  682.  
  683.       return var2;
  684.    }
  685.  
  686.    // $FF: renamed from: gc (sun.tools.debug.RemoteObject[]) void
  687.    void method_0(RemoteObject[] var1) throws Exception {
  688.       DataOutputStream var2 = this.out;
  689.       synchronized(var2){}
  690.  
  691.       try {
  692.          this.out.write(23);
  693.          this.out.writeInt(var1.length);
  694.  
  695.          for(int var4 = 0; var4 < var1.length; ++var4) {
  696.             if (var1[var4] == null) {
  697.                this.out.writeInt(0);
  698.             } else {
  699.                this.out.writeInt(var1[var4].id);
  700.             }
  701.          }
  702.  
  703.          this.getReply(23);
  704.          this.out.write(24);
  705.          this.getReply(24);
  706.          this.objects = new Hashtable();
  707.  
  708.          while(this.readValue(this.field_0) != null) {
  709.          }
  710.       } catch (Throwable var6) {
  711.          throw var6;
  712.       }
  713.  
  714.    }
  715.  
  716.    void trace(boolean var1) throws Exception {
  717.       DataOutputStream var2 = this.out;
  718.       synchronized(var2){}
  719.  
  720.       try {
  721.          this.out.write(34);
  722.          this.out.writeInt(3);
  723.          this.out.writeInt(var1 ? 1 : 0);
  724.          this.getReply(34);
  725.       } catch (Throwable var4) {
  726.          throw var4;
  727.       }
  728.  
  729.    }
  730.  
  731.    void itrace(boolean var1) throws Exception {
  732.       DataOutputStream var2 = this.out;
  733.       synchronized(var2){}
  734.  
  735.       try {
  736.          this.out.write(34);
  737.          this.out.writeInt(4);
  738.          this.out.writeInt(var1 ? 1 : 0);
  739.          this.getReply(34);
  740.       } catch (Throwable var4) {
  741.          throw var4;
  742.       }
  743.  
  744.    }
  745.  
  746.    int totalMemory() throws Exception {
  747.       DataOutputStream var2 = this.out;
  748.       synchronized(var2){}
  749.  
  750.       int var1;
  751.       try {
  752.          this.out.write(34);
  753.          this.out.writeInt(1);
  754.          this.getReply(34);
  755.          var1 = this.field_0.readInt();
  756.       } catch (Throwable var5) {
  757.          throw var5;
  758.       }
  759.  
  760.       return var1;
  761.    }
  762.  
  763.    int freeMemory() throws Exception {
  764.       DataOutputStream var2 = this.out;
  765.       synchronized(var2){}
  766.  
  767.       int var1;
  768.       try {
  769.          this.out.write(34);
  770.          this.out.writeInt(2);
  771.          this.getReply(34);
  772.          var1 = this.field_0.readInt();
  773.       } catch (Throwable var5) {
  774.          throw var5;
  775.       }
  776.  
  777.       return var1;
  778.    }
  779.  
  780.    RemoteThreadGroup run(int var1, String[] var2) throws Exception {
  781.       DataOutputStream var4 = this.out;
  782.       synchronized(var4){}
  783.  
  784.       RemoteThreadGroup var3;
  785.       try {
  786.          this.out.write(26);
  787.          this.out.write(var1);
  788.  
  789.          for(int var6 = 0; var6 < var1; ++var6) {
  790.             this.out.writeUTF(var2[var6]);
  791.          }
  792.  
  793.          this.getReply(26);
  794.          var3 = (RemoteThreadGroup)this.readValue(this.field_0);
  795.       } catch (Throwable var8) {
  796.          throw var8;
  797.       }
  798.  
  799.       return var3;
  800.    }
  801.  
  802.    RemoteField[] getFields(int var1) throws Exception {
  803.       DataOutputStream var3 = this.out;
  804.       synchronized(var3){}
  805.  
  806.       RemoteField[] var2;
  807.       try {
  808.          this.out.write(35);
  809.          this.out.writeInt(var1);
  810.          this.getReply(35);
  811.          int var5 = this.field_0.readInt();
  812.          RemoteField[] var6 = new RemoteField[var5];
  813.  
  814.          for(int var7 = 0; var7 < var5; ++var7) {
  815.             int var8 = this.field_0.readInt();
  816.             String var9 = this.field_0.readUTF();
  817.             String var10 = this.field_0.readUTF();
  818.             short var11 = this.field_0.readShort();
  819.             RemoteClass var12 = (RemoteClass)this.readValue(this.field_0);
  820.             var6[var7] = new RemoteField(this, var8, var9, var10, var11, var12);
  821.          }
  822.  
  823.          var2 = var6;
  824.       } catch (Throwable var14) {
  825.          throw var14;
  826.       }
  827.  
  828.       return var2;
  829.    }
  830.  
  831.    RemoteValue[] getElements(int var1, int var2, int var3, int var4) throws Exception {
  832.       DataOutputStream var6 = this.out;
  833.       synchronized(var6){}
  834.  
  835.       RemoteValue[] var5;
  836.       try {
  837.          this.out.write(40);
  838.          this.out.writeInt(var1);
  839.          this.out.writeInt(var2);
  840.          this.out.writeInt(var3);
  841.          this.out.writeInt(var4);
  842.          this.getReply(40);
  843.          RemoteValue[] var8 = new RemoteValue[this.field_0.readInt()];
  844.  
  845.          for(int var9 = 0; var9 < var8.length; ++var9) {
  846.             var8[var9] = this.readValue(this.field_0);
  847.          }
  848.  
  849.          var5 = var8;
  850.       } catch (Throwable var11) {
  851.          throw var11;
  852.       }
  853.  
  854.       return var5;
  855.    }
  856.  
  857.    RemoteField[] getMethods(int var1) throws Exception {
  858.       DataOutputStream var3 = this.out;
  859.       synchronized(var3){}
  860.  
  861.       RemoteField[] var2;
  862.       try {
  863.          this.out.write(36);
  864.          this.out.writeInt(var1);
  865.          this.getReply(36);
  866.          int var5 = this.field_0.readInt();
  867.          this.message("getting (" + var5 + ") methods");
  868.          RemoteField[] var6 = new RemoteField[var5];
  869.  
  870.          for(int var7 = 0; var7 < var5; ++var7) {
  871.             int var8 = this.field_0.readInt();
  872.             String var9 = this.field_0.readUTF();
  873.             String var10 = this.field_0.readUTF();
  874.             short var11 = this.field_0.readShort();
  875.             RemoteClass var10000 = (RemoteClass)this.readValue(this.field_0);
  876.             var6[var7] = new RemoteField(this, var8, var9, var10, var11, (RemoteClass)null);
  877.          }
  878.  
  879.          var2 = var6;
  880.       } catch (Throwable var13) {
  881.          throw var13;
  882.       }
  883.  
  884.       return var2;
  885.    }
  886.  
  887.    int getMethodLineNumber(int var1, int var2) throws Exception {
  888.       DataOutputStream var4 = this.out;
  889.       synchronized(var4){}
  890.  
  891.       int var3;
  892.       try {
  893.          this.out.write(72);
  894.          this.out.writeInt(var1);
  895.          this.out.writeInt(var2);
  896.          this.getReply(72);
  897.          var3 = this.field_0.readInt();
  898.       } catch (Throwable var7) {
  899.          throw var7;
  900.       }
  901.  
  902.       return var3;
  903.    }
  904.  
  905.    int[] getSlotSignature(int var1, int var2) throws Exception {
  906.       DataOutputStream var4 = this.out;
  907.       synchronized(var4){}
  908.  
  909.       int[] var3;
  910.       try {
  911.          this.out.write(38);
  912.          this.out.writeInt(var1);
  913.          this.out.writeInt(var2);
  914.          this.getReply(38);
  915.          int[] var6 = new int[this.field_0.readInt()];
  916.  
  917.          for(int var7 = 0; var7 < var6.length; ++var7) {
  918.             var6[var7] = this.field_0.readInt();
  919.          }
  920.  
  921.          var3 = var6;
  922.       } catch (Throwable var9) {
  923.          throw var9;
  924.       }
  925.  
  926.       return var3;
  927.    }
  928.  
  929.    RemoteValue getSlotValue(int var1, int var2) throws Exception {
  930.       DataOutputStream var4 = this.out;
  931.       synchronized(var4){}
  932.  
  933.       RemoteValue var3;
  934.       try {
  935.          this.out.write(39);
  936.          this.out.writeInt(var1);
  937.          this.out.writeInt(var2);
  938.          this.getReply(39);
  939.          RemoteValue var6 = this.readValue(this.field_0);
  940.          if (var6 != null && var6.isObject() && var6.getClass().getName().equals("java.lang.ArrayIndexOutOfBoundsException")) {
  941.             throw new ArrayIndexOutOfBoundsException("invalid slot index " + var2);
  942.          }
  943.  
  944.          var3 = var6;
  945.       } catch (Throwable var8) {
  946.          throw var8;
  947.       }
  948.  
  949.       return var3;
  950.    }
  951.  
  952.    RemoteValue getStackValue(int var1, int var2, int var3, char var4) throws Exception {
  953.       DataOutputStream var6 = this.out;
  954.       synchronized(var6){}
  955.  
  956.       RemoteValue var5;
  957.       try {
  958.          this.out.write(50);
  959.          this.out.writeInt(var1);
  960.          this.out.writeInt(var2);
  961.          this.out.writeInt(var3);
  962.          this.out.writeChar(var4);
  963.          this.getReply(50);
  964.          var5 = this.readValue(this.field_0);
  965.       } catch (Throwable var9) {
  966.          throw var9;
  967.       }
  968.  
  969.       return var5;
  970.    }
  971.  
  972.    void setSlotValue(int var1, int var2, int var3) throws Exception {
  973.       DataOutputStream var4 = this.out;
  974.       synchronized(var4){}
  975.  
  976.       try {
  977.          this.out.write(68);
  978.          this.out.writeInt(var1);
  979.          this.out.writeInt(var2);
  980.          this.out.writeInt(4);
  981.          this.out.writeInt(var3);
  982.          this.getReply(68);
  983.       } catch (Throwable var6) {
  984.          throw var6;
  985.       }
  986.  
  987.    }
  988.  
  989.    void setSlotValue(int var1, int var2, boolean var3) throws Exception {
  990.       DataOutputStream var4 = this.out;
  991.       synchronized(var4){}
  992.  
  993.       try {
  994.          this.out.write(68);
  995.          this.out.writeInt(var1);
  996.          this.out.writeInt(var2);
  997.          this.out.writeInt(0);
  998.          this.out.writeBoolean(var3);
  999.          this.getReply(68);
  1000.       } catch (Throwable var6) {
  1001.          throw var6;
  1002.       }
  1003.  
  1004.    }
  1005.  
  1006.    void setSlotValue(int var1, int var2, char var3) throws Exception {
  1007.       DataOutputStream var4 = this.out;
  1008.       synchronized(var4){}
  1009.  
  1010.       try {
  1011.          this.out.write(68);
  1012.          this.out.writeInt(var1);
  1013.          this.out.writeInt(var2);
  1014.          this.out.writeInt(4);
  1015.          this.out.writeInt(var3);
  1016.          this.getReply(68);
  1017.       } catch (Throwable var6) {
  1018.          throw var6;
  1019.       }
  1020.  
  1021.    }
  1022.  
  1023.    void setSlotValue(int var1, int var2, long var3) throws Exception {
  1024.       DataOutputStream var5 = this.out;
  1025.       synchronized(var5){}
  1026.  
  1027.       try {
  1028.          this.out.write(68);
  1029.          this.out.writeInt(var1);
  1030.          this.out.writeInt(var2);
  1031.          this.out.writeInt(5);
  1032.          this.out.writeLong(var3);
  1033.          this.getReply(68);
  1034.       } catch (Throwable var7) {
  1035.          throw var7;
  1036.       }
  1037.  
  1038.    }
  1039.  
  1040.    void setSlotValue(int var1, int var2, float var3) throws Exception {
  1041.       DataOutputStream var4 = this.out;
  1042.       synchronized(var4){}
  1043.  
  1044.       try {
  1045.          this.out.write(68);
  1046.          this.out.writeInt(var1);
  1047.          this.out.writeInt(var2);
  1048.          this.out.writeInt(7);
  1049.          this.out.writeDouble((double)var3);
  1050.          this.getReply(68);
  1051.       } catch (Throwable var6) {
  1052.          throw var6;
  1053.       }
  1054.  
  1055.    }
  1056.  
  1057.    void setSlotValue(int var1, int var2, double var3) throws Exception {
  1058.       DataOutputStream var5 = this.out;
  1059.       synchronized(var5){}
  1060.  
  1061.       try {
  1062.          this.out.write(68);
  1063.          this.out.writeInt(var1);
  1064.          this.out.writeInt(var2);
  1065.          this.out.writeInt(7);
  1066.          this.out.writeDouble(var3);
  1067.          this.getReply(68);
  1068.       } catch (Throwable var7) {
  1069.          throw var7;
  1070.       }
  1071.  
  1072.    }
  1073.  
  1074.    void setStackValue(int var1, int var2, int var3, int var4) throws Exception {
  1075.       DataOutputStream var5 = this.out;
  1076.       synchronized(var5){}
  1077.  
  1078.       try {
  1079.          this.out.write(69);
  1080.          this.out.writeInt(var1);
  1081.          this.out.writeInt(var2);
  1082.          this.out.writeInt(var3);
  1083.          this.out.writeInt(4);
  1084.          this.out.writeInt(var4);
  1085.          this.getReply(69);
  1086.       } catch (Throwable var7) {
  1087.          throw var7;
  1088.       }
  1089.  
  1090.    }
  1091.  
  1092.    void setStackValue(int var1, int var2, int var3, boolean var4) throws Exception {
  1093.       DataOutputStream var5 = this.out;
  1094.       synchronized(var5){}
  1095.  
  1096.       try {
  1097.          this.out.write(69);
  1098.          this.out.writeInt(var1);
  1099.          this.out.writeInt(var2);
  1100.          this.out.writeInt(var3);
  1101.          this.out.writeInt(0);
  1102.          this.out.writeBoolean(var4);
  1103.          this.getReply(69);
  1104.       } catch (Throwable var7) {
  1105.          throw var7;
  1106.       }
  1107.  
  1108.    }
  1109.  
  1110.    void setStackValue(int var1, int var2, int var3, char var4) throws Exception {
  1111.       DataOutputStream var5 = this.out;
  1112.       synchronized(var5){}
  1113.  
  1114.       try {
  1115.          this.out.write(69);
  1116.          this.out.writeInt(var1);
  1117.          this.out.writeInt(var2);
  1118.          this.out.writeInt(var3);
  1119.          this.out.writeInt(4);
  1120.          this.out.writeInt(var4);
  1121.          this.getReply(69);
  1122.       } catch (Throwable var7) {
  1123.          throw var7;
  1124.       }
  1125.  
  1126.    }
  1127.  
  1128.    void setStackValue(int var1, int var2, int var3, long var4) throws Exception {
  1129.       DataOutputStream var6 = this.out;
  1130.       synchronized(var6){}
  1131.  
  1132.       try {
  1133.          this.out.write(69);
  1134.          this.out.writeInt(var1);
  1135.          this.out.writeInt(var2);
  1136.          this.out.writeInt(var3);
  1137.          this.out.writeInt(5);
  1138.          this.out.writeLong(var4);
  1139.          this.getReply(69);
  1140.       } catch (Throwable var8) {
  1141.          throw var8;
  1142.       }
  1143.  
  1144.    }
  1145.  
  1146.    void setStackValue(int var1, int var2, int var3, float var4) throws Exception {
  1147.       DataOutputStream var5 = this.out;
  1148.       synchronized(var5){}
  1149.  
  1150.       try {
  1151.          this.out.write(69);
  1152.          this.out.writeInt(var1);
  1153.          this.out.writeInt(var2);
  1154.          this.out.writeInt(var3);
  1155.          this.out.writeInt(7);
  1156.          this.out.writeDouble((double)var4);
  1157.          this.getReply(69);
  1158.       } catch (Throwable var7) {
  1159.          throw var7;
  1160.       }
  1161.  
  1162.    }
  1163.  
  1164.    void setStackValue(int var1, int var2, int var3, double var4) throws Exception {
  1165.       DataOutputStream var6 = this.out;
  1166.       synchronized(var6){}
  1167.  
  1168.       try {
  1169.          this.out.write(69);
  1170.          this.out.writeInt(var1);
  1171.          this.out.writeInt(var2);
  1172.          this.out.writeInt(var3);
  1173.          this.out.writeInt(7);
  1174.          this.out.writeDouble(var4);
  1175.          this.getReply(69);
  1176.       } catch (Throwable var8) {
  1177.          throw var8;
  1178.       }
  1179.  
  1180.    }
  1181.  
  1182.    String setBreakpointLine(RemoteClass var1, int var2) throws Exception {
  1183.       DataOutputStream var4 = this.out;
  1184.       synchronized(var4){}
  1185.  
  1186.       String var3;
  1187.       try {
  1188.          this.out.write(41);
  1189.          this.out.writeInt(((RemoteObject)var1).getId());
  1190.          this.out.writeInt(var2);
  1191.          this.getReply(41);
  1192.          var3 = this.field_0.readUTF();
  1193.       } catch (Throwable var7) {
  1194.          throw var7;
  1195.       }
  1196.  
  1197.       return var3;
  1198.    }
  1199.  
  1200.    String setBreakpointMethod(RemoteClass var1, RemoteField var2) throws Exception {
  1201.       DataOutputStream var4 = this.out;
  1202.       synchronized(var4){}
  1203.  
  1204.       String var3;
  1205.       try {
  1206.          this.out.write(42);
  1207.          this.out.writeInt(((RemoteObject)var1).getId());
  1208.          this.out.writeInt(var2.slot);
  1209.          this.getReply(42);
  1210.          var3 = this.field_0.readUTF();
  1211.       } catch (Throwable var7) {
  1212.          throw var7;
  1213.       }
  1214.  
  1215.       return var3;
  1216.    }
  1217.  
  1218.    String[] listBreakpoints() throws Exception {
  1219.       DataOutputStream var2 = this.out;
  1220.       synchronized(var2){}
  1221.  
  1222.       String[] var1;
  1223.       try {
  1224.          this.out.write(65);
  1225.          this.getReply(65);
  1226.          String[] var4 = new String[this.field_0.readInt()];
  1227.  
  1228.          for(int var5 = 0; var5 < var4.length; ++var5) {
  1229.             var4[var5] = this.field_0.readUTF();
  1230.          }
  1231.  
  1232.          var1 = var4;
  1233.       } catch (Throwable var7) {
  1234.          throw var7;
  1235.       }
  1236.  
  1237.       return var1;
  1238.    }
  1239.  
  1240.    String clearBreakpoint(RemoteClass var1, int var2) throws Exception {
  1241.       DataOutputStream var4 = this.out;
  1242.       synchronized(var4){}
  1243.  
  1244.       String var3;
  1245.       try {
  1246.          this.message("clearing bkpt at " + var1.getName() + ", pc " + var2);
  1247.          this.out.write(43);
  1248.          this.out.writeInt(((RemoteObject)var1).getId());
  1249.          this.out.writeInt(var2);
  1250.          this.getReply(43);
  1251.          var3 = this.field_0.readUTF();
  1252.       } catch (Throwable var7) {
  1253.          throw var7;
  1254.       }
  1255.  
  1256.       return var3;
  1257.    }
  1258.  
  1259.    String clearBreakpointLine(RemoteClass var1, int var2) throws Exception {
  1260.       DataOutputStream var4 = this.out;
  1261.       synchronized(var4){}
  1262.  
  1263.       String var3;
  1264.       try {
  1265.          this.message("clearing bkpt at " + var1.getName() + ":" + var2);
  1266.          this.out.write(44);
  1267.          this.out.writeInt(((RemoteObject)var1).getId());
  1268.          this.out.writeInt(var2);
  1269.          this.getReply(44);
  1270.          var3 = this.field_0.readUTF();
  1271.       } catch (Throwable var7) {
  1272.          throw var7;
  1273.       }
  1274.  
  1275.       return var3;
  1276.    }
  1277.  
  1278.    String clearBreakpointMethod(RemoteClass var1, RemoteField var2) throws Exception {
  1279.       DataOutputStream var4 = this.out;
  1280.       synchronized(var4){}
  1281.  
  1282.       String var3;
  1283.       try {
  1284.          this.message("clearing bkpt at " + var1.getName() + ":" + var2.getName());
  1285.          this.out.write(45);
  1286.          this.out.writeInt(((RemoteObject)var1).getId());
  1287.          this.out.writeInt(var2.slot);
  1288.          this.getReply(45);
  1289.          var3 = this.field_0.readUTF();
  1290.       } catch (Throwable var7) {
  1291.          throw var7;
  1292.       }
  1293.  
  1294.       return var3;
  1295.    }
  1296.  
  1297.    void catchExceptionClass(RemoteClass var1) throws Exception {
  1298.       DataOutputStream var2 = this.out;
  1299.       synchronized(var2){}
  1300.  
  1301.       try {
  1302.          this.out.write(53);
  1303.          this.out.writeInt(((RemoteObject)var1).getId());
  1304.          this.getReply(53);
  1305.       } catch (Throwable var4) {
  1306.          throw var4;
  1307.       }
  1308.  
  1309.    }
  1310.  
  1311.    void ignoreExceptionClass(RemoteClass var1) throws Exception {
  1312.       DataOutputStream var2 = this.out;
  1313.       synchronized(var2){}
  1314.  
  1315.       try {
  1316.          this.out.write(54);
  1317.          this.out.writeInt(((RemoteObject)var1).getId());
  1318.          this.getReply(54);
  1319.       } catch (Throwable var4) {
  1320.          throw var4;
  1321.       }
  1322.  
  1323.    }
  1324.  
  1325.    String[] getExceptionCatchList() throws Exception {
  1326.       DataOutputStream var2 = this.out;
  1327.       synchronized(var2){}
  1328.  
  1329.       String[] var1;
  1330.       try {
  1331.          this.out.write(55);
  1332.          this.getReply(55);
  1333.          int var4 = this.field_0.readInt();
  1334.          String[] var5 = new String[var4];
  1335.  
  1336.          for(int var6 = 0; var6 < var4; ++var6) {
  1337.             RemoteClass var7 = (RemoteClass)this.readValue(this.field_0);
  1338.             var5[var6] = var7.getName();
  1339.          }
  1340.  
  1341.          var1 = var5;
  1342.       } catch (Throwable var9) {
  1343.          throw var9;
  1344.       }
  1345.  
  1346.       return var1;
  1347.    }
  1348.  
  1349.    String getSourcePath() throws Exception {
  1350.       DataOutputStream var2 = this.out;
  1351.       synchronized(var2){}
  1352.  
  1353.       String var1;
  1354.       try {
  1355.          this.out.write(61);
  1356.          this.getReply(61);
  1357.          var1 = this.field_0.readUTF();
  1358.       } catch (Throwable var5) {
  1359.          throw var5;
  1360.       }
  1361.  
  1362.       return var1;
  1363.    }
  1364.  
  1365.    void setSourcePath(String var1) throws Exception {
  1366.       DataOutputStream var2 = this.out;
  1367.       synchronized(var2){}
  1368.  
  1369.       try {
  1370.          this.out.write(62);
  1371.          this.out.writeUTF(var1);
  1372.          this.getReply(62);
  1373.       } catch (Throwable var4) {
  1374.          throw var4;
  1375.       }
  1376.  
  1377.    }
  1378.  
  1379.    void stepThread(int var1, boolean var2) throws Exception {
  1380.       DataOutputStream var3 = this.out;
  1381.       synchronized(var3){}
  1382.  
  1383.       try {
  1384.          this.out.write(63);
  1385.          this.out.writeInt(var1);
  1386.          this.out.writeBoolean(var2);
  1387.          this.getReply(63);
  1388.       } catch (Throwable var5) {
  1389.          throw var5;
  1390.       }
  1391.  
  1392.    }
  1393.  
  1394.    void stepNextThread(int var1) throws Exception {
  1395.       DataOutputStream var2 = this.out;
  1396.       synchronized(var2){}
  1397.  
  1398.       try {
  1399.          this.out.write(64);
  1400.          this.out.writeInt(var1);
  1401.          this.getReply(64);
  1402.       } catch (Throwable var4) {
  1403.          throw var4;
  1404.       }
  1405.  
  1406.    }
  1407.  
  1408.    private void setVerbose(boolean var1) throws Exception {
  1409.       DataOutputStream var2 = this.out;
  1410.       synchronized(var2){}
  1411.  
  1412.       try {
  1413.          this.out.write(51);
  1414.          this.out.writeBoolean(var1);
  1415.          this.getReply(51);
  1416.       } catch (Throwable var4) {
  1417.          throw var4;
  1418.       }
  1419.  
  1420.    }
  1421.  
  1422.    void objectFinalize(int var1) throws Exception {
  1423.       DataOutputStream var2 = this.out;
  1424.       synchronized(var2){}
  1425.  
  1426.       try {
  1427.          this.out.write(70);
  1428.          this.out.writeInt(var1);
  1429.          this.out.write(70);
  1430.       } catch (Throwable var4) {
  1431.          throw var4;
  1432.       }
  1433.  
  1434.    }
  1435.  
  1436.    int[] getLineNumbers(RemoteClass var1) throws Exception {
  1437.       DataOutputStream var3 = this.out;
  1438.       synchronized(var3){}
  1439.  
  1440.       int[] var2;
  1441.       try {
  1442.          this.out.write(71);
  1443.          this.out.writeInt(((RemoteObject)var1).getId());
  1444.          this.getReply(71);
  1445.          int var5 = this.field_0.readInt();
  1446.          int[] var6 = new int[var5];
  1447.  
  1448.          for(int var7 = 0; var7 < var5; ++var7) {
  1449.             var6[var7] = this.field_0.readInt();
  1450.          }
  1451.  
  1452.          var2 = var6;
  1453.       } catch (Throwable var9) {
  1454.          throw var9;
  1455.       }
  1456.  
  1457.       return var2;
  1458.    }
  1459.  
  1460.    void error(String var1) {
  1461.       try {
  1462.          this.client.printToConsole("[Internal debugger error: " + var1 + "]\n");
  1463.       } catch (Exception var2) {
  1464.          System.out.println("[Internal debugger error: " + var1 + "]");
  1465.       }
  1466.    }
  1467.  
  1468.    void message(String var1) {
  1469.       if (this.verbose) {
  1470.          try {
  1471.             this.client.printToConsole("[debugger: " + var1 + "]\n");
  1472.          } catch (Exception var2) {
  1473.             System.out.println("[debugger: " + var1 + "]");
  1474.          }
  1475.       }
  1476.    }
  1477. }
  1478.