Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

20985
LINES
[SHOW ALL]

< > BotCompany Repo | #1033636 // Gazelle 22 Standalone [stable version]

JavaX source code (desktop) [tags: jar-with-libs no-compiler standalone use-pretranspiled]

Download Jar. Uses 2032K of libraries. Click here for Pure Java version (21422L/120K).

1  
lib 1033505
2  
lib 1400521
3  
4  
import java.util.*;
5  
import java.util.zip.*;
6  
import java.util.List;
7  
import java.util.regex.*;
8  
import java.util.concurrent.*;
9  
import java.util.concurrent.atomic.*;
10  
import java.util.concurrent.locks.*;
11  
import java.util.function.*;
12  
import javax.swing.*;
13  
import javax.swing.event.*;
14  
import javax.swing.text.*;
15  
import javax.swing.table.*;
16  
import java.io.*;
17  
import java.net.*;
18  
import java.lang.reflect.*;
19  
import java.lang.ref.*;
20  
import java.lang.management.*;
21  
import java.security.*;
22  
import java.security.spec.*;
23  
import java.awt.*;
24  
import java.awt.event.*;
25  
import java.awt.image.*;
26  
import java.awt.geom.*;
27  
import javax.imageio.*;
28  
import java.math.*;
29  
import x30_pkg.x30_util;
30  
import static x30_pkg.x30_util.VF1;
31  
import static x30_pkg.x30_util.indexOf;
32  
import static x30_pkg.x30_util.getOpt;
33  
import static x30_pkg.x30_util.setOpt;
34  
import static x30_pkg.x30_util.callOpt;
35  
import static x30_pkg.x30_util.newWeakHashMap;
36  
import static x30_pkg.x30_util.newDangerousWeakHashMap;
37  
import static x30_pkg.x30_util.get;
38  
import static x30_pkg.x30_util.get_raw;
39  
import static x30_pkg.x30_util.assertTrue;
40  
import static x30_pkg.x30_util.isHeadless;
41  
import static x30_pkg.x30_util.isAndroid;
42  
import static x30_pkg.x30_util.isTrue;
43  
import x30_pkg.x30_util.DynamicObject;
44  
import loadableUtils.utils;
45  
import static loadableUtils.utils._threadInfo;
46  
import static loadableUtils.utils._threadInheritInfo;
47  
import static loadableUtils.utils.dm_current_mandatory;
48  
import static loadableUtils.utils.match;
49  
import static loadableUtils.utils.setOpt_raw;
50  
import static loadableUtils.utils.fieldType;
51  
import static loadableUtils.utils.format3;
52  
import static loadableUtils.utils.vm_generalIdentityHashSet;
53  
import static loadableUtils.utils.vm_generalHashMap;
54  
import static loadableUtils.utils.vm_generalWeakSubMap;
55  
import static loadableUtils.utils.bindToComponent;
56  
import static loadableUtils.utils.struct;
57  
import static loadableUtils.utils.structure;
58  
import static loadableUtils.utils.loadPage;
59  
import static loadableUtils.utils.loadPage_utf8;
60  
import static loadableUtils.utils.loadPageSilently;
61  
import static loadableUtils.utils.loadSnippet;
62  
import static loadableUtils.utils.componentPopupMenu;
63  
import static loadableUtils.utils.tablePopupMenu;
64  
import static loadableUtils.utils.tablePopupMenuFirst;
65  
import static loadableUtils.utils.sexyTableWithoutDrag;
66  
import static loadableUtils.utils.dm_current_generic;
67  
import static loadableUtils.utils.cset;
68  
import static loadableUtils.utils.DynamicObject_loading;
69  
import static loadableUtils.utils.concepts_unlisted;
70  
import static loadableUtils.utils.dynamicObjectIsLoading;
71  
import static loadableUtils.utils.rethrow;
72  
import loadableUtils.utils.F0;
73  
import loadableUtils.utils.F1;
74  
import loadableUtils.utils.IF0;
75  
import loadableUtils.utils.IF1;
76  
import loadableUtils.utils.IVF1;
77  
import loadableUtils.utils.IVF2;
78  
import loadableUtils.utils.Matches;
79  
import loadableUtils.utils.SingleComponentPanel;
80  
import loadableUtils.utils.ImageSurface;
81  
import loadableUtils.utils.structure_Data;
82  
import loadableUtils.utils.RGBImage;
83  
import loadableUtils.utils.RGB;
84  
import loadableUtils.utils.BWImage;
85  
import loadableUtils.utils.MakesBufferedImage;
86  
import loadableUtils.utils.MultiSet;
87  
import loadableUtils.utils.Concept;
88  
import loadableUtils.utils.Concepts;
89  
import loadableUtils.utils.IterableIterator;
90  
import loadableUtils.utils.IFieldIndex;
91  
import loadableUtils.utils.PersistableThrowable;
92  
import loadableUtils.utils.DynModule;
93  
import loadableUtils.utils.DynPrintLog;
94  
import loadableUtils.utils.GlobalID;
95  
import loadableUtils.utils.Rect;
96  
import loadableUtils.utils.Pt;
97  
import loadableUtils.utils.SecretValue;
98  
import static loadableUtils.utils.fixNewLines;
99  
import static loadableUtils.utils.getExceptionCause;
100  
import static loadableUtils.utils.joinWithSpace;
101  
import static loadableUtils.utils.callF;
102  
import static loadableUtils.utils.javaTok;
103  
import static loadableUtils.utils.jlabel;
104  
import static loadableUtils.utils.nohupJavax;
105  
import static loadableUtils.utils.withDBLock;
106  
import static loadableUtils.utils.join;
107  
import static loadableUtils.utils.isAWTThread;
108  
import static loadableUtils.utils.set;
109  
import static loadableUtils.utils.call;
110  
import static loadableUtils.utils.fail;
111  
import static loadableUtils.utils.print;
112  
import static loadableUtils.utils.printAlsoToSystemOut;
113  
import static loadableUtils.utils.cget;
114  
import static loadableUtils.utils.newTypeWriterTextArea;
115  
import static loadableUtils.utils.db;
116  
import loadableUtils.utils.LongRange;
117  
import loadableUtils.utils.IntRange;
118  
import loadableUtils.utils.MultiMap;
119  
import loadableUtils.utils.Meta;
120  
import loadableUtils.utils.ITokCondition;
121  
import loadableUtils.utils.PingSource;
122  
import loadableUtils.utils.ThreadPool;
123  
import loadableUtils.utils.SimpleLiveValue;
124  
import loadableUtils.utils.Matrix;
125  
import loadableUtils.utils.Best;
126  
import loadableUtils.utils.IRef;
127  
import loadableUtils.utils.F2;
128  
import loadableUtils.utils.RandomAccessAbstractList;
129  
import loadableUtils.utils.IBWIntegralImage;
130  
import loadableUtils.utils.Producer;
131  
import loadableUtils.utils.IntBuffer;
132  
import loadableUtils.utils.AbstractMatrix;
133  
import loadableUtils.utils.WithTimestamp;
134  
import loadableUtils.utils.IMeta;
135  
import loadableUtils.utils.LiveValue;
136  
import loadableUtils.utils.Timestamp;
137  
import loadableUtils.utils.DoubleRect;
138  
import loadableUtils.utils.Complex;
139  
import loadableUtils.utils.Either;
140  
import loadableUtils.utils.Steppable;
141  
import loadableUtils.utils.T3;
142  
import loadableUtils.utils.Swingable;
143  
import loadableUtils.utils.Average;
144  
import loadableUtils.utils.BWIntegralImage;
145  
import loadableUtils.utils.DoubleRange;
146  
import loadableUtils.utils.Seconds;
147  
import static loadableUtils.utils.withTimestamp;
148  
import static loadableUtils.utils.score;
149  
import static loadableUtils.utils.stepAll;
150  
import static loadableUtils.utils.infoMessage;
151  
import static loadableUtils.utils.brightnessToRGBA;
152  
import static loadableUtils.utils.withBorder;
153  
import static loadableUtils.utils.getPlural;
154  
import static loadableUtils.utils.rcallOpt;
155  
import static loadableUtils.utils.childrenOfType;
156  
import static loadableUtils.utils.nanoTime;
157  
import static loadableUtils.utils.activateFrame_v3;
158  
import static loadableUtils.utils.b;
159  
import static loadableUtils.utils.ewicOneOf;
160  
import static loadableUtils.utils.n;
161  
import static loadableUtils.utils.abs;
162  
import static loadableUtils.utils.callMain;
163  
import static loadableUtils.utils.caseInsensitiveComparator;
164  
import static loadableUtils.utils.getComponents;
165  
import static loadableUtils.utils.rep;
166  
import static loadableUtils.utils.area;
167  
import static loadableUtils.utils.add;
168  
import static loadableUtils.utils.singleComponentPanel;
169  
import static loadableUtils.utils.withMargin;
170  
import static loadableUtils.utils.addActionListener;
171  
import static loadableUtils.utils.hasMethod;
172  
import static loadableUtils.utils.containsOneOf;
173  
import static loadableUtils.utils.intersectRects;
174  
import static loadableUtils.utils.setSCPComponent;
175  
import static loadableUtils.utils.hideWindow;
176  
import static loadableUtils.utils.ymdMinusHMS;
177  
import static loadableUtils.utils.jPopDownButton_noText;
178  
import static loadableUtils.utils.swingLater;
179  
import static loadableUtils.utils.currentImage;
180  
import static loadableUtils.utils._defaultClassFinder;
181  
import static loadableUtils.utils.boolOptParam;
182  
import static loadableUtils.utils.getOptMC;
183  
import static loadableUtils.utils.setImage;
184  
import static loadableUtils.utils.regexp;
185  
import static loadableUtils.utils.alwaysOnTop;
186  
import static loadableUtils.utils.setFrameTitle;
187  
import static loadableUtils.utils.getScreenWidth;
188  
import static loadableUtils.utils.tsNow;
189  
import static loadableUtils.utils.jfind_preprocess;
190  
import static loadableUtils.utils.dm_reload;
191  
import static loadableUtils.utils.getDBProgramID;
192  
import static loadableUtils.utils.setFrameIcon;
193  
import static loadableUtils.utils.isIdentifier;
194  
import static loadableUtils.utils.getSnippetTitle;
195  
import static loadableUtils.utils.jFullCenter;
196  
import static loadableUtils.utils.dm_fieldCheckBox;
197  
import static loadableUtils.utils.indent;
198  
import static loadableUtils.utils.infoBox;
199  
import static loadableUtils.utils.toSeconds;
200  
import static loadableUtils.utils.rect;
201  
import static loadableUtils.utils.cleanUp;
202  
import static loadableUtils.utils.forEach;
203  
import static loadableUtils.utils.disposeWindow;
204  
import static loadableUtils.utils.textFieldFromComboBox;
205  
import static loadableUtils.utils.getScore;
206  
import static loadableUtils.utils.containsNewLines;
207  
import static loadableUtils.utils.stdcompare;
208  
import static loadableUtils.utils.centerAndEast;
209  
import static loadableUtils.utils.metaMapPut;
210  
import static loadableUtils.utils.makeFrame;
211  
import static loadableUtils.utils.setDoubleBuffered;
212  
import static loadableUtils.utils.asVirtualList;
213  
import static loadableUtils.utils.javaTokForJFind_array;
214  
import static loadableUtils.utils.withLeftAndRightMargin;
215  
import static loadableUtils.utils.dm_doEvery;
216  
import static loadableUtils.utils.childOfType;
217  
import static loadableUtils.utils.hgrid;
218  
import static loadableUtils.utils.getFieldType;
219  
import static loadableUtils.utils.ping_v3;
220  
import static loadableUtils.utils.flattenArray2;
221  
import static loadableUtils.utils.getParent;
222  
import static loadableUtils.utils.strOrEmpty;
223  
import static loadableUtils.utils.pqO;
224  
import static loadableUtils.utils.run;
225  
import static loadableUtils.utils.has;
226  
import static loadableUtils.utils.last;
227  
import static loadableUtils.utils.warn;
228  
import static loadableUtils.utils.distance;
229  
import static loadableUtils.utils.jrightAlignedLine;
230  
import static loadableUtils.utils.toRect;
231  
import static loadableUtils.utils.installWindowDragger;
232  
import static loadableUtils.utils.addIfNotNull;
233  
import static loadableUtils.utils.installTimer;
234  
import static loadableUtils.utils.clipBufferedImage;
235  
import static loadableUtils.utils.setText;
236  
import static loadableUtils.utils.findButton;
237  
import static loadableUtils.utils.splitAtSpace;
238  
import static loadableUtils.utils.getBounds;
239  
import static loadableUtils.utils.northAndCenterWithMargin;
240  
import static loadableUtils.utils.renderUserThreadsWithStackTraces;
241  
import static loadableUtils.utils.newConceptsWithClassFinder;
242  
import static loadableUtils.utils.replaceSublist;
243  
import static loadableUtils.utils.selectedItem;
244  
import static loadableUtils.utils.joinSubList;
245  
import static loadableUtils.utils.onSelectedItem;
246  
import static loadableUtils.utils.muricaCredentials;
247  
import static loadableUtils.utils.onUpdate;
248  
import static loadableUtils.utils.activateFrame;
249  
import static loadableUtils.utils.replace;
250  
import static loadableUtils.utils.profileToConsole;
251  
import static loadableUtils.utils.myLibraryFiles;
252  
import static loadableUtils.utils.findCodeTokens;
253  
import static loadableUtils.utils.withTypeWriterFont;
254  
import static loadableUtils.utils.printWithMS;
255  
import static loadableUtils.utils.format;
256  
import static loadableUtils.utils.heightForWidth;
257  
import static loadableUtils.utils.onEnter;
258  
import static loadableUtils.utils.hsplit;
259  
import static loadableUtils.utils.containsNewLine;
260  
import static loadableUtils.utils.centerAndEastWithMargin;
261  
import static loadableUtils.utils.getFrame;
262  
import static loadableUtils.utils.countIterator_exclusive;
263  
import static loadableUtils.utils.centerAndSouth;
264  
import static loadableUtils.utils.dm_fieldLiveValue;
265  
import static loadableUtils.utils.isLetter;
266  
import static loadableUtils.utils.toObjectArray;
267  
import static loadableUtils.utils.rectFromPoints;
268  
import static loadableUtils.utils.runnableThread;
269  
import static loadableUtils.utils.toolTip;
270  
import static loadableUtils.utils.firstToUpper;
271  
import static loadableUtils.utils.allScreenBounds;
272  
import static loadableUtils.utils.findClass_fullName;
273  
import static loadableUtils.utils.copyLocalLog;
274  
import static loadableUtils.utils.jscroll_centered;
275  
import static loadableUtils.utils.parentFile;
276  
import static loadableUtils.utils.gazelle_wavySpacer;
277  
import static loadableUtils.utils.callOnLoadMethods;
278  
import static loadableUtils.utils.dm_rEnter;
279  
import static loadableUtils.utils.toString;
280  
import static loadableUtils.utils.mapI_if1;
281  
import static loadableUtils.utils.getProgramTitle;
282  
import static loadableUtils.utils.renameFile;
283  
import static loadableUtils.utils.isDigit;
284  
import static loadableUtils.utils.regionMatches;
285  
import static loadableUtils.utils.warnIfOddCount;
286  
import static loadableUtils.utils.synchronizedMRUCache;
287  
import static loadableUtils.utils.printFileInfo;
288  
import static loadableUtils.utils.bindLiveValueListenerToComponent;
289  
import static loadableUtils.utils.screenBounds;
290  
import static loadableUtils.utils.myFrames;
291  
import static loadableUtils.utils.callStringifier;
292  
import static loadableUtils.utils.toRectangle;
293  
import static loadableUtils.utils.widthForHeight;
294  
import static loadableUtils.utils.javaxCodeDir;
295  
import static loadableUtils.utils.jLiveValueLabel;
296  
import static loadableUtils.utils.shortClassName_dropNumberPrefix;
297  
import static loadableUtils.utils.minimizeWindow;
298  
import static loadableUtils.utils.appendToFileBaseName;
299  
import static loadableUtils.utils.jbutton;
300  
import static loadableUtils.utils.setEnabled;
301  
import static loadableUtils.utils.functionCall;
302  
import static loadableUtils.utils.javaTokForStructure;
303  
import static loadableUtils.utils.northAndCenter;
304  
import static loadableUtils.utils.jline;
305  
import static loadableUtils.utils.toMS;
306  
import static loadableUtils.utils.creator;
307  
import static loadableUtils.utils.vmBus_query;
308  
import static loadableUtils.utils.change;
309  
import static loadableUtils.utils.assertEquals;
310  
import static loadableUtils.utils.getPreferredSize;
311  
import static loadableUtils.utils.md5;
312  
import static loadableUtils.utils.renderFileInfo;
313  
import static loadableUtils.utils.jCheckBoxMenuItem;
314  
import static loadableUtils.utils.find;
315  
import static loadableUtils.utils.jenableUndoRedo;
316  
import static loadableUtils.utils.setChecked;
317  
import static loadableUtils.utils.setFont;
318  
import static loadableUtils.utils.syncList;
319  
import static loadableUtils.utils.takeFirst;
320  
import static loadableUtils.utils.isEditableComboBox;
321  
import static loadableUtils.utils.numberOfCores;
322  
import static loadableUtils.utils.showWindow;
323  
import static loadableUtils.utils.plus;
324  
import static loadableUtils.utils.dm_watchField;
325  
import static loadableUtils.utils.codeTokensAsStringArray;
326  
import static loadableUtils.utils.ifloor;
327  
import static loadableUtils.utils.hmsWithColonsAndMS;
328  
import static loadableUtils.utils.smartIndexOf;
329  
import static loadableUtils.utils.repeat;
330  
import static loadableUtils.utils.structureForUser;
331  
import static loadableUtils.utils.ok;
332  
import static loadableUtils.utils.nohup;
333  
import static loadableUtils.utils.jCheckBox;
334  
import static loadableUtils.utils.onWindowClosing;
335  
import static loadableUtils.utils.asArray;
336  
import static loadableUtils.utils.pt;
337  
import static loadableUtils.utils.showText;
338  
import static loadableUtils.utils.setDefaultClassFinder;
339  
import static loadableUtils.utils.getBytecodePathForClass;
340  
import static loadableUtils.utils.standardCredentials;
341  
import static loadableUtils.utils.installWindowResizeDraggerOnBorder;
342  
import static loadableUtils.utils.singular;
343  
import static loadableUtils.utils.minus;
344  
import static loadableUtils.utils.syncAddOrCreate;
345  
import static loadableUtils.utils.keysList;
346  
import static loadableUtils.utils.intRange;
347  
import static loadableUtils.utils.getScreenHeight;
348  
import static loadableUtils.utils.boolPar;
349  
import static loadableUtils.utils.fillRect;
350  
import static loadableUtils.utils.westCenterAndEastWithMargin;
351  
import static loadableUtils.utils.indentx;
352  
import static loadableUtils.utils.getSelectedItem;
353  
import static loadableUtils.utils.loadAllClassesInByteCodePath;
354  
import static loadableUtils.utils.isChecked;
355  
import static loadableUtils.utils.similarEmptyMap;
356  
import static loadableUtils.utils.toFile;
357  
import static loadableUtils.utils.tempAdd;
358  
import static loadableUtils.utils.appendToBaseName;
359  
import static loadableUtils.utils.dropFirst;
360  
import static loadableUtils.utils.nClasses;
361  
import static loadableUtils.utils.mod;
362  
import static loadableUtils.utils.makeUndecoratedFrame;
363  
import static loadableUtils.utils.findClass;
364  
import static loadableUtils.utils.humanizeFormLabel;
365  
import static loadableUtils.utils.wrapForSmartAdd;
366  
import static loadableUtils.utils.asSet;
367  
import static loadableUtils.utils.autoFrameTitle;
368  
import static loadableUtils.utils.restart;
369  
import static loadableUtils.utils.installTrayIcon;
370  
import static loadableUtils.utils.shootScreen2;
371  
import static loadableUtils.utils.filter;
372  
import static loadableUtils.utils.mapPut;
373  
import static loadableUtils.utils.onChange;
374  
import static loadableUtils.utils.pingSource;
375  
import static loadableUtils.utils.mapToParams;
376  
import static loadableUtils.utils.isNonEmptySingleZip_byMagicHeader;
377  
import static loadableUtils.utils.withTopMargin;
378  
import static loadableUtils.utils.error;
379  
import static loadableUtils.utils.setBackground;
380  
import static loadableUtils.utils.sysNow;
381  
import static loadableUtils.utils.elapsedSeconds;
382  
import static loadableUtils.utils.hotwire;
383  
import static loadableUtils.utils.heldInstance;
384  
import static loadableUtils.utils.getProgramName;
385  
import static loadableUtils.utils.trayIcon_imageAutoSize;
386  
import loadableUtils.utils.Pair;
387  
import loadableUtils.utils.IBWImage;
388  
import loadableUtils.utils.WidthAndHeight;
389  
import loadableUtils.utils.Enterable;
390  
import loadableUtils.utils.G2Drawable;
391  
import static loadableUtils.utils.getPrintLog;
392  
import static loadableUtils.utils.unstructure;
393  
import static loadableUtils.utils.StefansOS_ConnectToServer;
394  
import static loadableUtils.utils._MethodCache;
395  
import static loadableUtils.utils.defaultMargin;
396  
import static loadableUtils.utils.preferredScreen;
397  
import javax.swing.border.*;
398  
import java.text.NumberFormat;
399  
import javax.imageio.metadata.*;
400  
import javax.imageio.stream.*;
401  
import java.awt.geom.*;
402  
import java.text.SimpleDateFormat;
403  
import java.nio.charset.Charset;
404  
import java.util.function.BiConsumer;
405  
import java.util.function.BiFunction;
406  
import java.awt.datatransfer.Transferable;
407  
import java.awt.datatransfer.DataFlavor;
408  
import java.awt.datatransfer.UnsupportedFlavorException;
409  
import java.awt.datatransfer.StringSelection;
410  
import java.awt.datatransfer.*;
411  
412  
class main {
413  
414  
  static public String programID;
415  
416  
  static public void _onLoad_initUtils() {
417  
    utils.__javax = javax();
418  
  }
419  
420  
  static public void _onLoad_defaultClassFinder() {
421  
    setDefaultClassFinder(new F1<String, Class>() {
422  
423  
      public Class get(String name) {
424  
        name = replacePrefix("loadableUtils.utils$", "main$", name);
425  
        print("_onLoad_defaultClassFinder " + name);
426  
        Class c = findClass_fullName(name);
427  
        if (c != null)
428  
          return c;
429  
        if (name.startsWith("main$"))
430  
          return loadableUtils.utils.findClass_fullName("loadableUtils.utils" + name.substring(4));
431  
        return null;
432  
      }
433  
    });
434  
  }
435  
436  
  static public ThreadLocal<Boolean> dynamicObjectIsLoading_threadLocal() {
437  
    return DynamicObject_loading;
438  
  }
439  
440  
  static public class GazelleScreenCam extends DynModule {
441  
442  
    volatile public boolean enabled = true;
443  
444  
    transient public JPanel buttons;
445  
446  
    public void setEnabled(boolean b) {
447  
      setField("enabled", b);
448  
    }
449  
450  
    public JComponent visualize_enabled() {
451  
      return dm_checkBox("enabled");
452  
    }
453  
454  
    public int pixelRows = 128, colors = 8;
455  
456  
    public String script, testScreenScript;
457  
458  
    public boolean animate = true;
459  
460  
    public boolean horizontalLayout = false;
461  
462  
    public WatchTarget watchTarget;
463  
464  
    transient public ImageSurface isPosterized, isRegions, isTestScreen;
465  
466  
    transient public ScreenCamStream images = new ScreenCamStream();
467  
468  
    transient public BWIntegralImageStream integralImages = new BWIntegralImageStream();
469  
470  
    transient public SourceTriggeredStream<BWImage> scaledAndPosterizedImages = new SourceTriggeredStream();
471  
472  
    transient public DoubleFPSCounter fpsCounter = new DoubleFPSCounter();
473  
474  
    transient public int fps;
475  
476  
    transient public WatchTargetSelector watchTargetSelector;
477  
478  
    transient public RollingAverage remainingMSPerFrame = new RollingAverage();
479  
480  
    transient public int remainingMS;
481  
482  
    transient public FunctionTimings<String> functionTimings = new FunctionTimings();
483  
484  
    transient public ReliableSingleThread rstRunScript = dm_rst(me(), new Runnable() {
485  
486  
      public void run() {
487  
        try {
488  
          _runScript();
489  
        } catch (Exception __e) {
490  
          throw rethrow(__e);
491  
        }
492  
      }
493  
494  
      public String toString() {
495  
        return "_runScript();";
496  
      }
497  
    });
498  
499  
    transient public JGazelleVScriptRunner scriptRunner;
500  
501  
    transient public JGazelleVScriptRunner testScreenScriptRunner;
502  
503  
    transient public Animation animation;
504  
505  
    transient public FastRegions_BWImage mainScreenRegions;
506  
507  
    transient public ImageSurface_HighlightRegion regionHighlighter;
508  
509  
    transient public UIURLSystem uiURLs;
510  
511  
    transient public Concepts concepts;
512  
513  
    public String uiURL;
514  
515  
    public void start() {
516  
      try {
517  
        super.start();
518  
        dm_onFieldChange("horizontalLayout", new Runnable() {
519  
520  
          public void run() {
521  
            try {
522  
              dm_reload();
523  
            } catch (Exception __e) {
524  
              throw rethrow(__e);
525  
            }
526  
          }
527  
528  
          public String toString() {
529  
            return "dm_reload();";
530  
          }
531  
        });
532  
        if (concepts == null) {
533  
          db();
534  
          concepts = db_mainConcepts();
535  
        }
536  
        uiURLs = new UIURLSystem(me(), dm_fieldLiveValue("uiURL"));
537  
        scriptRunner = new JGazelleVScriptRunner(dm_fieldLiveValue("script", me()));
538  
        testScreenScriptRunner = new JGazelleVScriptRunner(dm_fieldLiveValue("testScreenScript", me()));
539  
        images.directlyFeedInto(integralImages);
540  
        integralImages.onNewElement(ii -> scaledAndPosterizedImages.newElement(posterizeBWImage_withMeta(colors, scaledBWImageFromBWIntegralImage_withMeta_height(pixelRows, ii))));
541  
        integralImages.onNewElement(new Runnable() {
542  
543  
          public void run() {
544  
            try {
545  
              if (shouldRunScript())
546  
                rstRunScript.go();
547  
            } catch (Exception __e) {
548  
              throw rethrow(__e);
549  
            }
550  
          }
551  
552  
          public String toString() {
553  
            return "if (shouldRunScript()) rstRunScript.go();";
554  
          }
555  
        });
556  
        scaledAndPosterizedImages.onNewElement(img -> {
557  
          fpsCounter.inc();
558  
          setField("fps", iround(fpsCounter.get()));
559  
          {
560  
            if (isPosterized != null)
561  
              isPosterized.setImage_thisThread(img);
562  
          }
563  
          floodFill(img);
564  
        });
565  
        dm_doEvery(1000 / 20, new Runnable() {
566  
567  
          public void run() {
568  
            try {
569  
              if (enabled) {
570  
                {
571  
                  if (watchTargetSelector != null)
572  
                    watchTargetSelector.updateScreenCount();
573  
                }
574  
                Timestamp deadline = tsNowPlusMS(1000 / 20);
575  
                if (watchTarget instanceof WatchScreen)
576  
                  images.useScreen(((WatchScreen) watchTarget).screenNr - 1);
577  
                else if (watchTarget instanceof WatchMouse)
578  
                  images.area(mouseArea(((WatchMouse) watchTarget).width, ((WatchMouse) watchTarget).height));
579  
                images.step();
580  
                long remaining = deadline.minus(tsNow());
581  
                remainingMSPerFrame.add(remaining);
582  
                setField("remainingMS", iround(remainingMSPerFrame.get()));
583  
              }
584  
            } catch (Exception __e) {
585  
              throw rethrow(__e);
586  
            }
587  
          }
588  
589  
          public String toString() {
590  
            return "if (enabled) {\r\n        watchTargetSelector?.updateScreenCount();\r\n        Ti...";
591  
          }
592  
        });
593  
      } catch (Exception __e) {
594  
        throw rethrow(__e);
595  
      }
596  
    }
597  
598  
    public ImageSurface stdImageSurface() {
599  
      return pixelatedImageSurface().setAutoZoomToDisplay(true).repaintInThread(false);
600  
    }
601  
602  
    public JComponent visualize() {
603  
      isPosterized = stdImageSurface();
604  
      regionHighlighter = new ImageSurface_HighlightRegion(isPosterized);
605  
      regionHighlighter.regionPainter(new RegionFillPainter());
606  
      isRegions = stdImageSurface();
607  
      isTestScreen = stdImageSurface();
608  
      awtEvery(isTestScreen, 1000 / 20, new Runnable() {
609  
610  
        public void run() {
611  
          try {
612  
            stepAnimation();
613  
          } catch (Exception __e) {
614  
            throw rethrow(__e);
615  
          }
616  
        }
617  
618  
        public String toString() {
619  
          return "stepAnimation();";
620  
        }
621  
      });
622  
      JTextArea taTimings = jTextArea_noUndo();
623  
      awtEveryAndNow(taTimings, .5, new Runnable() {
624  
625  
        public void run() {
626  
          try {
627  
            setText(taTimings, renderFunctionTimings());
628  
          } catch (Exception __e) {
629  
            throw rethrow(__e);
630  
          }
631  
        }
632  
633  
        public String toString() {
634  
          return "setText(taTimings, renderFunctionTimings())";
635  
        }
636  
      });
637  
      var jSpeedInfo = dm_transientCalculatedToolTip(() -> speedInfo_long(), rightAlignLabel(dm_transientCalculatedLabel(() -> speedInfo())));
638  
      print("Labels: " + list(concepts, Label.class));
639  
      SimpleCRUD_v2 labelCRUD = new SimpleCRUD_v2(concepts, Label.class);
640  
      labelCRUD.hideFields("globalID");
641  
      labelCRUD.addCountToEnclosingTab(true);
642  
      SimpleCRUD_v2 imageCRUD = new SimpleCRUD_v2(concepts, SavedImage.class);
643  
      imageCRUD.addCountToEnclosingTab(true);
644  
      var tabs = scrollingTabs(jTopOrLeftTabs(horizontalLayout, "Posterized", withTools(isPosterized), "Regions", jscroll_centered_borderless(isRegions), "Labels", labelCRUD.make_dontStartBots(), "Saved Images", imageCRUD.make_dontStartBots(), "Script", scriptRunner.scriptAndResultPanel(), "Test Screen", testScreenPanel(), "Timings", withRightAlignedButtons(taTimings, "Reset", new Runnable() {
645  
646  
        public void run() {
647  
          try {
648  
            resetTimings();
649  
          } catch (Exception __e) {
650  
            throw rethrow(__e);
651  
          }
652  
        }
653  
654  
        public String toString() {
655  
          return "resetTimings();";
656  
        }
657  
      })));
658  
      labelCRUD.update();
659  
      imageCRUD.update();
660  
      watchTargetSelector = new WatchTargetSelector();
661  
      var vis = northAndCenter(withSideAndTopMargin(uiURLs.urlBar()), centerAndSouthOrEast(horizontalLayout, horizontalLayout ? withMargin(tabs) : withSideMargin(tabs), (borderlessScrollPane(jHigherScrollPane(jfullcenter(vstack(withLeftAndRightMargin(hstack(dm_rcheckBox("enabled", "Watch"), watchTargetSelector.visualize(), jlabel(" in "), withLabelToTheRight("colors @ ", dm_spinner("colors", 2, 256)), withLabelToTheRight("p", dm_powersOfTwoSpinner("pixelRows", 512)))), verticalStrut(2), withRightMargin(jSpeedInfo))))))));
662  
      setHorizontalMarginForAllButtons(vis, 4);
663  
      return vis;
664  
    }
665  
666  
    public String speedInfo() {
667  
      return "FPS " + fps + " idle " + remainingMS + " ms";
668  
    }
669  
670  
    public String speedInfo_long() {
671  
      return "Screen cam running at " + nFrames(fps) + "/second. " + n2(remainingMS) + " ms remaining per frame in first core.";
672  
    }
673  
674  
    public void floodFill(BWImage img) {
675  
      FastRegions_BWImage ff = new FastRegions_BWImage(img);
676  
      ff.collectBounds();
677  
      functionTimings.time("Regions", ff);
678  
      mainScreenRegions = ff;
679  
      {
680  
        if (regionHighlighter != null)
681  
          regionHighlighter.setRegions(ff);
682  
      }
683  
      if (isRegions != null && isRegions.isShowing_quick()) {
684  
        isRegions.setImage_thisThread(ff.regionsImage());
685  
      }
686  
      setEnclosingTabTitle(isRegions, nRegions(ff.regionCount()));
687  
    }
688  
689  
    public boolean useErrorHandling() {
690  
      return false;
691  
    }
692  
693  
    public String renderFunctionTimings() {
694  
      return lines(ciSorted(map(functionTimings.get(), (f, avg) -> firstToUpper(f) + ": " + n2(iround(nsToMicroseconds(avg.get()))) + " " + microSymbol() + "s (" + n2(iround(avg.n())) + ")")));
695  
    }
696  
697  
    transient public long _runScript_idx;
698  
699  
    public void _runScript() {
700  
      long n = integralImages.elementCount();
701  
      if (n > _runScript_idx) {
702  
        _runScript_idx = n;
703  
        scriptRunner.parseAndRunOn(integralImages.get());
704  
      }
705  
    }
706  
707  
    public boolean shouldRunScript() {
708  
      return isShowing(scriptRunner.scpScriptResult);
709  
    }
710  
711  
    public void stepAnimation() {
712  
      if (!animate)
713  
        return;
714  
      if (animation == null) {
715  
        animation = new AnimatedLine();
716  
        animation.start();
717  
      }
718  
      animation.nextFrame();
719  
      var img = whiteImage(animation.w, animation.h);
720  
      animation.setGraphics(createGraphics(img));
721  
      animation.paint();
722  
      {
723  
        if (isTestScreen != null)
724  
          isTestScreen.setImage(img);
725  
      }
726  
      var ii = bwIntegralImage_withMeta(img);
727  
      testScreenScriptRunner.parseAndRunOn(ii);
728  
    }
729  
730  
    public JComponent testScreenPanel() {
731  
      return centerAndSouthWithMargin(hsplit(northAndCenterWithMargin(centerAndEastWithMargin(jlabel("Input"), dm_fieldCheckBox("animate")), jscroll_centered_borderless(isTestScreen)), northAndCenterWithMargin(centerAndEastWithMargin(jlabel("Output"), testScreenScriptRunner.lblScore), testScreenScriptRunner.scpScriptResult)), testScreenScriptRunner.scriptInputField());
732  
    }
733  
734  
    public List popDownItems() {
735  
      return ll(jCheckBoxMenuItem_dyn("Horizontal Layout", () -> horizontalLayout, b -> setField("horizontalLayout", b)));
736  
    }
737  
738  
    public void unvisualize() {
739  
    }
740  
741  
    public void resetTimings() {
742  
      functionTimings.reset();
743  
    }
744  
745  
    public JComponent withTools(ImageSurface is) {
746  
      new ImageSurface_PositionToolTip(is);
747  
      return centerAndEastWithMargin(jscroll_centered_borderless(is), vstackWithSpacing(3, jbutton("A"), jbutton("B"), jbutton("C")));
748  
    }
749  
750  
    public class WatchTargetSelector {
751  
752  
      public JComboBox<WatchTarget> cb = jComboBox();
753  
754  
      public int screenCount;
755  
756  
      public JComponent visualize() {
757  
        updateList();
758  
        print("Selecting watchTarget: " + watchTarget);
759  
        selectItem(cb, watchTarget);
760  
        loadableUtils.utils.onChange(cb, watchTarget -> {
761  
          setField("watchTarget", watchTarget);
762  
          print("Chose watchTarget: " + GazelleScreenCam.this.watchTarget);
763  
        });
764  
        return cb;
765  
      }
766  
767  
      public void updateScreenCount() {
768  
        if (screenCount != screenCount())
769  
          updateList();
770  
      }
771  
772  
      public void updateList() {
773  
        swing(() -> {
774  
          setComboBoxItems(cb, makeWatchTargets());
775  
        });
776  
      }
777  
778  
      public List<WatchTarget> makeWatchTargets() {
779  
        return flattenToList(countIteratorAsList_incl(1, screenCount = screenCount(), i -> new WatchScreen(i)), new WatchMouse());
780  
      }
781  
    }
782  
  }
783  
784  
  static public boolean _moduleClass_GazelleScreenCam = true;
785  
786  
  static public class Label extends ConceptWithGlobalID {
787  
788  
    public String name;
789  
790  
    public String toString() {
791  
      return "Label " + name;
792  
    }
793  
  }
794  
795  
  static public class SavedImage extends Concept {
796  
797  
    public File path;
798  
  }
799  
800  
  static public class SavedRegion extends Concept {
801  
802  
    static final public String _fieldOrder = "image area";
803  
804  
    public Concept image;
805  
806  
    public Rect area;
807  
  }
808  
809  
  static public class ExampleForLabel extends Concept {
810  
811  
    static final public String _fieldOrder = "label example confidence";
812  
813  
    public Ref<Label> label = new Ref();
814  
815  
    public Ref example = new Ref();
816  
817  
    public double confidence = 1;
818  
  }
819  
820  
  static public class IfThenTheory extends Concept {
821  
822  
    public Ref if_ = new Ref();
823  
824  
    public Ref then = new Ref();
825  
  }
826  
827  
  static public class WatchTarget {
828  
  }
829  
830  
  static public class WatchScreen extends WatchTarget implements IFieldsToList {
831  
832  
    public int screenNr;
833  
834  
    public WatchScreen() {
835  
    }
836  
837  
    public WatchScreen(int screenNr) {
838  
      this.screenNr = screenNr;
839  
    }
840  
841  
    public boolean equals(Object o) {
842  
      if (!(o instanceof WatchScreen))
843  
        return false;
844  
      WatchScreen __1 = (WatchScreen) o;
845  
      return screenNr == __1.screenNr;
846  
    }
847  
848  
    public int hashCode() {
849  
      int h = -1787428357;
850  
      h = boostHashCombine(h, _hashCode(screenNr));
851  
      return h;
852  
    }
853  
854  
    public Object[] _fieldsToList() {
855  
      return new Object[] { screenNr };
856  
    }
857  
858  
    public String toString() {
859  
      return "Screen " + screenNr;
860  
    }
861  
  }
862  
863  
  static public class WatchMouse extends WatchTarget implements IFieldsToList {
864  
865  
    static final public String _fieldOrder = "width height";
866  
867  
    public int width;
868  
869  
    public int height;
870  
871  
    public WatchMouse(int width, int height) {
872  
      this.height = height;
873  
      this.width = width;
874  
    }
875  
876  
    public boolean equals(Object o) {
877  
      if (!(o instanceof WatchMouse))
878  
        return false;
879  
      WatchMouse __2 = (WatchMouse) o;
880  
      return width == __2.width && height == __2.height;
881  
    }
882  
883  
    public int hashCode() {
884  
      int h = 1876823350;
885  
      h = boostHashCombine(h, _hashCode(width));
886  
      h = boostHashCombine(h, _hashCode(height));
887  
      return h;
888  
    }
889  
890  
    public Object[] _fieldsToList() {
891  
      return new Object[] { width, height };
892  
    }
893  
894  
    public WatchMouse() {
895  
      height = 256;
896  
      width = iround(height * 16.0 / 9);
897  
    }
898  
899  
    public String toString() {
900  
      return "Mouse";
901  
    }
902  
  }
903  
904  
  static public void standaloneInit() {
905  
    __javax = x30.class;
906  
    x30.__javax = x30.class;
907  
    x30_pkg.x30_util.__setJavaX(x30.class);
908  
    x30.cleanKillMsg = "";
909  
    callOnLoadMethods(mc());
910  
  }
911  
912  
  static public class PrintLogModule extends DynPrintLog {
913  
914  
    public PrintLogModule() {
915  
      setModuleName("Print Log");
916  
    }
917  
918  
    public String getPrintLog() {
919  
      return printLog();
920  
    }
921  
922  
    public boolean useErrorHandling() {
923  
      return false;
924  
    }
925  
  }
926  
927  
  static public class Stem extends Concept {
928  
929  
    static final public String _fieldOrder = "host module frameRect maximized alwaysOnTop autoUpdate window btnMax";
930  
931  
    transient public GazelleHost host;
932  
933  
    public DynModule module;
934  
935  
    public Rect frameRect;
936  
937  
    public boolean maximized, alwaysOnTop, autoUpdate;
938  
939  
    transient public JFrame window;
940  
941  
    transient public JButton btnMax;
942  
943  
    public Stem() {
944  
    }
945  
946  
    public Stem(GazelleHost host) {
947  
      this.host = host;
948  
    }
949  
950  
    public Stem(GazelleHost host, DynModule module) {
951  
      this.module = module;
952  
      this.host = host;
953  
    }
954  
955  
    public Rect getFrameRect() {
956  
      return toRect(getBounds(window));
957  
    }
958  
959  
    public void saveFrameRect() {
960  
      setField("frameRect", getFrameRect());
961  
    }
962  
963  
    public void setAlwaysOnTop(boolean alwaysOnTop) {
964  
      this.alwaysOnTop = alwaysOnTop;
965  
      change();
966  
      alwaysOnTop(window, alwaysOnTop);
967  
    }
968  
969  
    public void setWindow(JFrame window) {
970  
      this.window = window;
971  
      if (frameRect != null)
972  
        setBounds(window, frameRect);
973  
      onBoundsChange(window, new Runnable() {
974  
975  
        public void run() {
976  
          try {
977  
            saveFrameRect();
978  
          } catch (Exception __e) {
979  
            throw rethrow(__e);
980  
          }
981  
        }
982  
983  
        public String toString() {
984  
          return "saveFrameRect();";
985  
        }
986  
      });
987  
      alwaysOnTop(window, alwaysOnTop);
988  
    }
989  
990  
    public boolean isMain() {
991  
      return this == host.stem;
992  
    }
993  
994  
    public void minimize() {
995  
      if (host.trayIcon == null || !isMain())
996  
        minimizeWindow(window);
997  
      else
998  
        hideWindow(window);
999  
    }
1000  
1001  
    public void deleteMe() {
1002  
      printAlsoToSystemOut = true;
1003  
      print("deleteMe " + isMain());
1004  
      if (isMain()) {
1005  
        host.cleanExit();
1006  
      } else {
1007  
        disposeWindow(window);
1008  
        {
1009  
          cleanUp(module);
1010  
          module = null;
1011  
        }
1012  
        cdelete(this);
1013  
      }
1014  
    }
1015  
1016  
    public void grabWindowState() {
1017  
      setField("maximized", !isExtendedStateNormal(window));
1018  
    }
1019  
1020  
    public void updateBtnMax() {
1021  
      if (!isShowing(btnMax))
1022  
        return;
1023  
      grabWindowState();
1024  
      setText(btnMax, maximized ? "NORM" : "MAX");
1025  
    }
1026  
1027  
    public JComponent makeWindowBorderAndTitle(JComponent contents, String title) {
1028  
      var icons = jline();
1029  
      if (host.allowFrameMaximization) {
1030  
        icons.add(btnMax = jbutton("", runnableThread(new Runnable() {
1031  
1032  
          public void run() {
1033  
            try {
1034  
              maximizeOrRestoreFrame(window);
1035  
              updateBtnMax();
1036  
            } catch (Exception __e) {
1037  
              throw rethrow(__e);
1038  
            }
1039  
          }
1040  
1041  
          public String toString() {
1042  
            return "maximizeOrRestoreFrame(window);\r\n        updateBtnMax();";
1043  
          }
1044  
        })));
1045  
        onFirstShowing(btnMax, new Runnable() {
1046  
1047  
          public void run() {
1048  
            try {
1049  
              updateBtnMax();
1050  
            } catch (Exception __e) {
1051  
              throw rethrow(__e);
1052  
            }
1053  
          }
1054  
1055  
          public String toString() {
1056  
            return "updateBtnMax();";
1057  
          }
1058  
        });
1059  
      }
1060  
      icons.add(jbutton("MIN", new Runnable() {
1061  
1062  
        public void run() {
1063  
          try {
1064  
            minimize();
1065  
          } catch (Exception __e) {
1066  
            throw rethrow(__e);
1067  
          }
1068  
        }
1069  
1070  
        public String toString() {
1071  
          return "minimize();";
1072  
        }
1073  
      }));
1074  
      icons.add(jbutton("QUIT", runnableThread(new Runnable() {
1075  
1076  
        public void run() {
1077  
          try {
1078  
            if (swingConfirm("Really quit Gazelle?"))
1079  
              deleteMe();
1080  
          } catch (Exception __e) {
1081  
            throw rethrow(__e);
1082  
          }
1083  
        }
1084  
1085  
        public String toString() {
1086  
          return "if (swingConfirm(\"Really quit Gazelle?\"))\r\n        deleteMe();";
1087  
        }
1088  
      })));
1089  
      setHorizontalMarginForAllButtons(icons, 4);
1090  
      icons.add(jPopDownButton_noText(flattenToList(!isMain() ? null : ll("Restart", runnableThread(new Runnable() {
1091  
1092  
        public void run() {
1093  
          try {
1094  
            host.restart();
1095  
          } catch (Exception __e) {
1096  
            throw rethrow(__e);
1097  
          }
1098  
        }
1099  
1100  
        public String toString() {
1101  
          return "host.restart()";
1102  
        }
1103  
      }), "Update Gazelle", runnableThread(new Runnable() {
1104  
1105  
        public void run() {
1106  
          try {
1107  
            host.upgradeGazelle();
1108  
          } catch (Exception __e) {
1109  
            throw rethrow(__e);
1110  
          }
1111  
        }
1112  
1113  
        public String toString() {
1114  
          return "host.upgradeGazelle()";
1115  
        }
1116  
      }), jCheckBoxMenuItem_dyn("Auto-Update", () -> autoUpdate, b -> cset(Stem.this, "autoUpdate", b))), "---", jCheckBoxMenuItem_dyn("Always on top", () -> alwaysOnTop, alwaysOnTop -> setAlwaysOnTop(alwaysOnTop)), "---", !isMain() ? null : ll("Screenshoot this window", runnableThread(new Runnable() {
1117  
1118  
        public void run() {
1119  
          try {
1120  
            shootWindow();
1121  
          } catch (Exception __e) {
1122  
            throw rethrow(__e);
1123  
          }
1124  
        }
1125  
1126  
        public String toString() {
1127  
          return "shootWindow();";
1128  
        }
1129  
      }), "Dump threads", runnableThread(new Runnable() {
1130  
1131  
        public void run() {
1132  
          try {
1133  
            showText("User threads", renderUserThreadsWithStackTraces());
1134  
          } catch (Exception __e) {
1135  
            throw rethrow(__e);
1136  
          }
1137  
        }
1138  
1139  
        public String toString() {
1140  
          return "showText(\"User threads\", renderUserThreadsWithStackTraces());";
1141  
        }
1142  
      }), !isMain() ? null : "Print log", !isMain() ? null : runnableThread(new Runnable() {
1143  
1144  
        public void run() {
1145  
          try {
1146  
            host.showPrintLog();
1147  
          } catch (Exception __e) {
1148  
            throw rethrow(__e);
1149  
          }
1150  
        }
1151  
1152  
        public String toString() {
1153  
          return "host.showPrintLog()";
1154  
        }
1155  
      })), ccallOpt(module, "popDownItems"))));
1156  
      JComponent actualTitle = fontSizePlus(7, jCenteredLabel(title));
1157  
      installWindowDragger(actualTitle);
1158  
      if (isMain() && haveMuricaPassword())
1159  
        actualTitle = centerAndEastWithMargin(actualTitle, compileButton());
1160  
      var spacer = gazelle_wavySpacer();
1161  
      var titleBarMain = setOpaqueBackground(host.color1, jtransparent_recursive(westCenterAndEastWithMargin(jImage_scaledToHeight(24, host.trayIconImageID), actualTitle, setOpaqueBackground(host.color2, spacer))));
1162  
      installWindowDragger(spacer);
1163  
      var titleBar = setBackground(host.color2, centerAndEast(titleBarMain, icons));
1164  
      var border = BorderFactory.createLineBorder(host.color1, host.borderSize);
1165  
      var outerPanel = withBorder(border, northAndCenter(titleBar, contents));
1166  
      installWindowResizeDraggerOnBorder(outerPanel);
1167  
      return outerPanel;
1168  
    }
1169  
1170  
    public JComponent compileButton() {
1171  
      return jimageButton(scaleImageToWidth(16, "#1101268"), "Compile & update", disableButtonWhileCalcing3(() -> compile()));
1172  
    }
1173  
1174  
    public void compile() {
1175  
      transpileOnServerWithErrorWindow(programID, true, null);
1176  
    }
1177  
1178  
    public void startAndShow() {
1179  
      module._host = this;
1180  
      setOpt_raw(module, "threadPool", threadPool);
1181  
      setOpt_raw(module, "concepts", host.concepts);
1182  
      copyLocalLog(module, mc());
1183  
      var __15 = makeVisAndTitle();
1184  
      var vis = __15.a;
1185  
      var title = __15.b;
1186  
      printWithMS("Show frame");
1187  
      JFrame frame = makeUndecoratedFrame(title, vis);
1188  
      setFrameIcon(frame, host.trayIconImageID);
1189  
      setWindow(frame);
1190  
      showWindow(window);
1191  
      if (maximized && host.allowFrameMaximization)
1192  
        maximizeFrame(window);
1193  
    }
1194  
1195  
    public Pair<JComponent, String> makeVisAndTitle() {
1196  
      JComponent vis;
1197  
      {
1198  
        AutoCloseable __13 = module.enter();
1199  
        try {
1200  
          module.start();
1201  
          printWithMS("Visualize");
1202  
          vis = swing(() -> {
1203  
            AutoCloseable __14 = module.enter();
1204  
            try {
1205  
              return module.visualize();
1206  
            } finally {
1207  
              _close(__14);
1208  
            }
1209  
          });
1210  
        } finally {
1211  
          _close(__13);
1212  
        }
1213  
      }
1214  
      String title = host.windowTitle;
1215  
      if (!isMain())
1216  
        title += appendWithColon(module.moduleName());
1217  
      vis = makeWindowBorderAndTitle(vis, title);
1218  
      return pair(vis, title);
1219  
    }
1220  
1221  
    public void revisualize() {
1222  
      if (window == null)
1223  
        return;
1224  
      try {
1225  
        module.unvisualize();
1226  
      } catch (Throwable __e) {
1227  
        printStackTrace(__e);
1228  
      }
1229  
      var __16 = makeVisAndTitle();
1230  
      var vis = __16.a;
1231  
      var title = __16.b;
1232  
      setFrameContents(window, vis);
1233  
    }
1234  
1235  
    public void shootWindow() {
1236  
      var img = renderComponentToImage(window);
1237  
      copyImageToClipboard(img);
1238  
      saveInImageDirectoryWithCounter("Gazelle/Gazelle", img);
1239  
    }
1240  
  }
1241  
1242  
  static public class GazelleHost {
1243  
1244  
    public boolean _isTransient() {
1245  
      return true;
1246  
    }
1247  
1248  
    public Stem stem;
1249  
1250  
    public DynModule gazelle;
1251  
1252  
    transient public String windowTitle = "November Gazelle v1";
1253  
1254  
    transient public String trayIconImageID = "#1103047";
1255  
1256  
    transient public int borderSize = 5;
1257  
1258  
    transient public Color color1 = awtColor("ADD8E6");
1259  
1260  
    transient public Color color2 = awtColor("EEEEEE");
1261  
1262  
    transient public Color color3 = awtColor("A3C0AA");
1263  
1264  
    transient public IF0<DynModule> moduleMaker;
1265  
1266  
    transient public ThreadPool threadPool;
1267  
1268  
    transient public TrayIcon trayIcon;
1269  
1270  
    transient public TrayIconLastPosition trayIconLastPosition;
1271  
1272  
    transient public Set<String> argsSet;
1273  
1274  
    transient public Concepts concepts;
1275  
1276  
    transient public boolean allowFrameMaximization = false;
1277  
1278  
    public GazelleHost(ThreadPool threadPool, IF0<DynModule> moduleMaker) {
1279  
      this.moduleMaker = moduleMaker;
1280  
      this.threadPool = threadPool;
1281  
    }
1282  
1283  
    public void trayIconLeftClick() {
1284  
      activateFrame_v3(mainWindow());
1285  
    }
1286  
1287  
    public void makeTrayIcon() {
1288  
      try {
1289  
        trayIcon_imageAutoSize = false;
1290  
        trayIcon = installTrayIcon(trayIconImageID, windowTitle, new Runnable() {
1291  
1292  
          public void run() {
1293  
            try {
1294  
              trayIconLeftClick();
1295  
            } catch (Exception __e) {
1296  
              throw rethrow(__e);
1297  
            }
1298  
          }
1299  
1300  
          public String toString() {
1301  
            return "trayIconLeftClick();";
1302  
          }
1303  
        }, "Show Gazelle", new Runnable() {
1304  
1305  
          public void run() {
1306  
            try {
1307  
              trayIconLeftClick();
1308  
            } catch (Exception __e) {
1309  
              throw rethrow(__e);
1310  
            }
1311  
          }
1312  
1313  
          public String toString() {
1314  
            return "trayIconLeftClick();";
1315  
          }
1316  
        }, "Exit Gazelle", new Runnable() {
1317  
1318  
          public void run() {
1319  
            try {
1320  
              cleanExit();
1321  
            } catch (Exception __e) {
1322  
              throw rethrow(__e);
1323  
            }
1324  
          }
1325  
1326  
          public String toString() {
1327  
            return "cleanExit();";
1328  
          }
1329  
        });
1330  
        trayIconLastPosition = new TrayIconLastPosition(trayIcon);
1331  
      } catch (Throwable __e) {
1332  
        print(exceptionToStringShort(__e));
1333  
      }
1334  
    }
1335  
1336  
    public void run(String[] args) {
1337  
      try {
1338  
        run2(args);
1339  
      } catch (Throwable e) {
1340  
        printStackTrace(e);
1341  
        hideTrayIcon(trayIcon);
1342  
        onWindowClosing(() -> systemExit(1), getWindow(showText_fast_noWrap("Gazelle Error", renderStackTrace(e))));
1343  
      }
1344  
    }
1345  
1346  
    public void run2(String[] args) {
1347  
      argsSet = asSet(args);
1348  
      if (!argsSet.contains("noflatlaf"))
1349  
        com.formdev.flatlaf.FlatLightLaf.setup();
1350  
      if (contains(args, "profile"))
1351  
        profileToConsole(() -> actualMain(args));
1352  
      else
1353  
        actualMain(args);
1354  
      if (argsSet.contains("brexit"))
1355  
        System.exit(0);
1356  
    }
1357  
1358  
    public void actualMain(String... args) {
1359  
      vm_generalMap_put("stefansOS", this);
1360  
      System.out.println(hmsWithColonsAndMS() + ": Init");
1361  
      if (containsOneOf(argsSet, "upgrade", "update")) {
1362  
        upgradeGazelle();
1363  
        return;
1364  
      }
1365  
      makeTrayIcon();
1366  
      initAutoUpdate();
1367  
      assertEquals(callF(_defaultClassFinder(), "main$Stem"), Stem.class);
1368  
      concepts = newConceptsWithClassFinder(programID);
1369  
      concepts.makeStructureData = () -> {
1370  
        structure_Data data = concepts.makeStructureData_base();
1371  
        data.mcDollar = mcDollar();
1372  
        return data;
1373  
      };
1374  
      concepts.fileLock().lockOrFail();
1375  
      concepts.fileLock().deleteOnExit();
1376  
      concepts.persist();
1377  
      print("Concepts loaded: " + map(__33 -> className(__33), allConcepts(concepts)));
1378  
      var stems = findConcepts(concepts, Stem.class);
1379  
      print("Stems in DB: " + l(stems));
1380  
      stem = first(stems);
1381  
      if (stem == null) {
1382  
        print("Starting new module");
1383  
        makeModule();
1384  
        stem = registerConcept(concepts, new Stem(this, gazelle));
1385  
      }
1386  
      gazelle = stem.module;
1387  
      for (var stem : list(Stem.class, concepts)) {
1388  
        stem.host = this;
1389  
        stem.startAndShow();
1390  
      }
1391  
      printWithMS("Dudadoneski");
1392  
    }
1393  
1394  
    public void showPrintLog() {
1395  
      registerConcept(concepts, new Stem(this, new PrintLogModule())).startAndShow();
1396  
    }
1397  
1398  
    public JFrame mainWindow() {
1399  
      return stem == null ? null : stem.window;
1400  
    }
1401  
1402  
    public Object dm_getStem(Object moduleOrID) {
1403  
      return stem;
1404  
    }
1405  
1406  
    public Object resolveModule(Object moduleOrID) {
1407  
      return moduleOrID == stem ? gazelle : moduleOrID;
1408  
    }
1409  
1410  
    public void cleanExit() {
1411  
      {
1412  
        startThread(new Runnable() {
1413  
1414  
          public void run() {
1415  
            try {
1416  
              print("Saving DB for exit");
1417  
              {
1418  
                cleanUp(concepts);
1419  
                concepts = null;
1420  
              }
1421  
              System.exit(0);
1422  
            } catch (Exception __e) {
1423  
              throw rethrow(__e);
1424  
            }
1425  
          }
1426  
1427  
          public String toString() {
1428  
            return "print(\"Saving DB for exit\");\r\n      { cleanUp(concepts); concepts = null; }\r\n...";
1429  
          }
1430  
        });
1431  
      }
1432  
    }
1433  
1434  
    public File myJar() {
1435  
      return getBytecodePathForClass(this);
1436  
    }
1437  
1438  
    public void upgradeGazelle() {
1439  
      File myJar = myJar();
1440  
      print("myJar", myJar);
1441  
      String date = ymdMinusHMS();
1442  
      File f = javaxCodeDir("Downloaded Updates/" + "gazelle-" + date + ".jar");
1443  
      infoBox("Downloading Update...");
1444  
      loadBinaryPageToFile(downloadURL(), f);
1445  
      printFileInfo(f);
1446  
      if (!isNonEmptySingleZip_byMagicHeader(f)) {
1447  
        infoBox("Bad file downloaded... :(");
1448  
        return;
1449  
      }
1450  
      boolean replaced = false;
1451  
      if (isFile(myJar)) {
1452  
        print("Loaded " + nClasses(loadAllClassesInByteCodePath(myJar)));
1453  
        print("Replacing with new version: " + myJar);
1454  
        renameFile(myJar, appendToBaseName(myJar, ".bak." + date));
1455  
        copyFile(f, myJar);
1456  
        printFileInfo(myJar);
1457  
        replaced = true;
1458  
      }
1459  
      infoBox(replaced ? "Installed update, replaced " + f2s(myJar) + " - now starting" : "Starting update, but could not replace originally downloaded jar");
1460  
      restart(replaced ? myJar : f);
1461  
    }
1462  
1463  
    public void restart() {
1464  
      restart(myJar());
1465  
    }
1466  
1467  
    public void restart(File jar) {
1468  
      String javaCmd = or2(currentProcessCommand(), "java");
1469  
      String cmd = pqO(javaCmd) + " -jar " + pqO(jar);
1470  
      print(cmd);
1471  
      nohup(cmd);
1472  
      cleanExit();
1473  
    }
1474  
1475  
    public void makeModule() {
1476  
      if (gazelle == null)
1477  
        gazelle = callF(moduleMaker);
1478  
    }
1479  
1480  
    public void reloadModuleInBackground(Stem mod) {
1481  
      restart();
1482  
    }
1483  
1484  
    public void initAutoUpdate() {
1485  
      print("Making SnippetUpdateConnector.");
1486  
      snippetUpdateConnector("verbose", true);
1487  
      vmBus_onMessage("snippetUpdate", new VF1<List>() {
1488  
1489  
        public void get(List l) {
1490  
          try {
1491  
            String uri = getString(l, 1);
1492  
            Matches m = new Matches();
1493  
            if (swic(uri, "/transpileOK/", m))
1494  
              if (sameSnippetID(programID(), firstIntAsString(m.rest()))) {
1495  
                if (stem.autoUpdate)
1496  
                  upgradeGazelle();
1497  
              }
1498  
          } catch (Exception __e) {
1499  
            throw rethrow(__e);
1500  
          }
1501  
        }
1502  
1503  
        public String toString() {
1504  
          return "S uri = getString(l, 1);\r\n      new Matches m;\r\n      if (swic(uri, \"/transpi...";
1505  
        }
1506  
      });
1507  
    }
1508  
1509  
    public String downloadURL() {
1510  
      return "https://botcompany.de/jar/" + psI(programID()) + "?withLibs=1&noCompiler=1" + (downloadUncompressedJAR() ? "&uncompressed=1" : "");
1511  
    }
1512  
1513  
    public boolean downloadUncompressedJAR() {
1514  
      return false;
1515  
    }
1516  
1517  
    public void revisualizeModule(Stem stem) {
1518  
      stem.revisualize();
1519  
    }
1520  
  }
1521  
1522  
  static public String windowTitle = "Gazelle 22";
1523  
1524  
  static public String progIDForDBAndAutoUpdate = "#1033636";
1525  
1526  
  static public boolean pingSourceStrictMode = false;
1527  
1528  
  static public GazelleHost host;
1529  
1530  
  static public GazelleScreenCam client;
1531  
1532  
  static public ThreadPool threadPool;
1533  
1534  
  public static void main(final String[] args) throws Exception {
1535  
    loadableUtils.utils.__setJavaX(main.class);
1536  
    standaloneInit();
1537  
    ping_v3_setPingSourceMaker(() -> {
1538  
      System.out.println("pingSourceMaker");
1539  
      if (pingSourceStrictMode)
1540  
        throw fail("Strict mode - make a ping source first!!");
1541  
      return new PingSource(threadPool, "legacy");
1542  
    });
1543  
    threadPool = new ThreadPool(findIntArg("cores", args, numberOfCores()));
1544  
    print(threadPool);
1545  
    PingSource ps = new PingSource(threadPool, print("Starting Gazelle"));
1546  
    ps.dO(() -> {
1547  
      System.out.println("Pinging");
1548  
      ping();
1549  
      print("Pinged");
1550  
      programID = progIDForDBAndAutoUpdate;
1551  
      preferredScreen = () -> {
1552  
        if (host == null)
1553  
          return 0;
1554  
        var stem = host.stem;
1555  
        if (stem == null)
1556  
          return 0;
1557  
        int screen = max(0, screenNrOfWindow(stem.window));
1558  
        print("preferredScreen", screen);
1559  
        return screen;
1560  
      };
1561  
      if (cic(args, "delete-session")) {
1562  
        print("Deleting session (" + programDir(programID) + ")");
1563  
        clearConceptsOf(programID);
1564  
      }
1565  
      host = new GazelleHost(threadPool, () -> {
1566  
        return client = new GazelleScreenCam();
1567  
      });
1568  
      if (sameSnippetID(programID, "#1033860"))
1569  
        windowTitle += " dev";
1570  
      host.windowTitle = windowTitle;
1571  
      host.run(args);
1572  
      if (!cic(args, "console")) {
1573  
        print("Stopping System.out");
1574  
        printAlsoToSystemOut = false;
1575  
      }
1576  
    });
1577  
    print("aha.");
1578  
  }
1579  
1580  
  static public Map generalMap = syncMap();
1581  
1582  
  static volatile public Concepts mainConcepts;
1583  
1584  
  static public Concepts db_mainConcepts() {
1585  
    if (mainConcepts == null)
1586  
      mainConcepts = newConceptsWithClassFinder(getDBProgramID());
1587  
    return mainConcepts;
1588  
  }
1589  
1590  
  static public void cleanMeUp_concepts() {
1591  
    if (db_mainConcepts() != null)
1592  
      db_mainConcepts().cleanMeUp();
1593  
  }
1594  
1595  
  static public Class javax() {
1596  
    return getJavaX();
1597  
  }
1598  
1599  
  static public String replacePrefix(String prefix, String replacement, String s) {
1600  
    if (!startsWith(s, prefix))
1601  
      return s;
1602  
    return replacement + substring(s, l(prefix));
1603  
  }
1604  
1605  
  static public JCheckBox dm_checkBox(String field) {
1606  
    return dm_fieldCheckBox(field);
1607  
  }
1608  
1609  
  static public JCheckBox dm_checkBox(String text, String field) {
1610  
    return dm_fieldCheckBox(text, field);
1611  
  }
1612  
1613  
  static public ReliableSingleThread dm_rst(Runnable r) {
1614  
    return dm_rst(dm_current_mandatory(), r);
1615  
  }
1616  
1617  
  static public ReliableSingleThread dm_rst(DynModule mod, Runnable r) {
1618  
    return dm_rst(mod, new ReliableSingleThread(r));
1619  
  }
1620  
1621  
  static public ReliableSingleThread dm_rst(DynModule mod, ReliableSingleThread rst) {
1622  
    rst.enter = dm_rEnter(mod);
1623  
    return rst;
1624  
  }
1625  
1626  
  static public void dm_onFieldChange(String field, Runnable onChange) {
1627  
    dm_watchField(field, onChange);
1628  
  }
1629  
1630  
  static public void dm_onFieldChange(Collection<String> fields, Runnable onChange) {
1631  
    dm_watchFields(fields, onChange);
1632  
  }
1633  
1634  
  static public BWImage posterizeBWImage_withMeta(int brightnessLevels, BWImage img) {
1635  
    return setMetaSrcUnlessSame(img, posterizeBWImage(brightnessLevels, img), functionCall("posterizeBWImage", brightnessLevels, img));
1636  
  }
1637  
1638  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta(int w, BWIntegralImage img) {
1639  
    return scaledBWImageFromBWIntegralImage(img, w);
1640  
  }
1641  
1642  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta_height(int h, BWIntegralImage img) {
1643  
    return scaledBWImageFromBWIntegralImage(img, widthForHeight(img, h), h);
1644  
  }
1645  
1646  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta(BWIntegralImage img, int w) {
1647  
    return scaledBWImageFromBWIntegralImage_withMeta(img, w, heightForWidth(img, w));
1648  
  }
1649  
1650  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta(BWIntegralImage img, int w, int h) {
1651  
    return setMetaSrc(scaledBWImageFromBWIntegralImage(img, w, h), functionCall("scaledBWImageFromBWIntegralImage", img, w, h));
1652  
  }
1653  
1654  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta(int w, IBWIntegralImage img) {
1655  
    return scaledBWImageFromBWIntegralImage(img, w);
1656  
  }
1657  
1658  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta_height(int h, IBWIntegralImage img) {
1659  
    return scaledBWImageFromBWIntegralImage(img, widthForHeight(img, h), h);
1660  
  }
1661  
1662  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta(IBWIntegralImage img, int w) {
1663  
    return scaledBWImageFromBWIntegralImage_withMeta(img, w, heightForWidth(img, w));
1664  
  }
1665  
1666  
  static public BWImage scaledBWImageFromBWIntegralImage_withMeta(IBWIntegralImage img, int w, int h) {
1667  
    return setMetaSrc(scaledBWImageFromBWIntegralImage(img, w, h), functionCall("scaledBWImageFromBWIntegralImage", img, w, h));
1668  
  }
1669  
1670  
  static public int iround(double d) {
1671  
    return (int) Math.round(d);
1672  
  }
1673  
1674  
  static public int iround(Number n) {
1675  
    return iround(toDouble(n));
1676  
  }
1677  
1678  
  static public Timestamp tsNowPlusMS(long ms) {
1679  
    return tsNow().plus(msToSeconds(ms));
1680  
  }
1681  
1682  
  static public Rect mouseArea(int w) {
1683  
    return mouseArea(w, w);
1684  
  }
1685  
1686  
  static public Rect mouseArea(int w, int h) {
1687  
    Point p = mouseLocation();
1688  
    return new Rect(p.x - w / 2, p.y - h / 2, w, h);
1689  
  }
1690  
1691  
  static public ImageSurface pixelatedImageSurface() {
1692  
    var is = imageSurface();
1693  
    imageSurface_pixelated(is);
1694  
    return is;
1695  
  }
1696  
1697  
  static public ImageSurface pixelatedImageSurface(MakesBufferedImage img) {
1698  
    return pixelatedImageSurface(toBufferedImage(img));
1699  
  }
1700  
1701  
  static public ImageSurface pixelatedImageSurface(BufferedImage img) {
1702  
    var is = pixelatedImageSurface();
1703  
    is.setImage(img);
1704  
    return is;
1705  
  }
1706  
1707  
  static public <A extends JComponent> A awtEvery(A component, long delay, Object r) {
1708  
    swingEvery(component, delay, r);
1709  
    return component;
1710  
  }
1711  
1712  
  static public <A extends JComponent> A awtEvery(A component, long delay, long firstDelay, Object r) {
1713  
    swingEvery(component, delay, firstDelay, r);
1714  
    return component;
1715  
  }
1716  
1717  
  static public void awtEvery(RootPaneContainer frame, long delay, Object r) {
1718  
    swingEvery(frame, delay, r);
1719  
  }
1720  
1721  
  static public <A extends JComponent> A awtEvery(A component, double delaySeconds, Object r) {
1722  
    return awtEvery(component, toMS(delaySeconds), r);
1723  
  }
1724  
1725  
  static public JTextArea jTextArea_noUndo() {
1726  
    return jTextArea_noUndo("");
1727  
  }
1728  
1729  
  static public JTextArea jTextArea_noUndo(final String text) {
1730  
    return swingNu(JTextArea.class, text);
1731  
  }
1732  
1733  
  static public <A extends JComponent> A awtEveryAndNow(A component, long delay, Object r) {
1734  
    swingEvery(component, delay, 0, r);
1735  
    return component;
1736  
  }
1737  
1738  
  static public <A extends JComponent> A awtEveryAndNow(A component, double delaySeconds, Object r) {
1739  
    return awtEveryAndNow(component, toMS(delaySeconds), r);
1740  
  }
1741  
1742  
  static public void awtEveryAndNow(RootPaneContainer frame, long delay, Object r) {
1743  
    swingEvery(frame, delay, 0, r);
1744  
  }
1745  
1746  
  static public <A extends JComponent> A dm_transientCalculatedToolTip(IF0<Object> calc, A component) {
1747  
    return toolTipFromLiveValue(dm_transientCalculatedLiveValue(Object.class, calc), component);
1748  
  }
1749  
1750  
  static public <A extends JLabel> A rightAlignLabel(final A a) {
1751  
    return setHorizontalAlignment(JLabel.RIGHT, a);
1752  
  }
1753  
1754  
  static public JLabel dm_transientCalculatedLabel(IF0<Object> calc) {
1755  
    return jLiveValueLabel(dm_transientCalculatedLiveValue(Object.class, calc));
1756  
  }
1757  
1758  
  static public <A extends Concept> List<A> list(Class<A> type) {
1759  
    return list(type, db_mainConcepts());
1760  
  }
1761  
1762  
  static public <A extends Concept> List<A> list(Class<A> type, Concepts cc) {
1763  
    return cc.list(type);
1764  
  }
1765  
1766  
  static public <A extends Concept> List<A> list(Concepts concepts, Class<A> type) {
1767  
    return concepts.list(type);
1768  
  }
1769  
1770  
  static public List<Concept> list(String type) {
1771  
    return db_mainConcepts().list(type);
1772  
  }
1773  
1774  
  static public List<Concept> list(Concepts concepts, String type) {
1775  
    return concepts.list(type);
1776  
  }
1777  
1778  
  static public JTabbedPane scrollingTabs(JTabbedPane pane) {
1779  
    if (pane != null) {
1780  
      swing(() -> {
1781  
        pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
1782  
      });
1783  
    }
1784  
    return pane;
1785  
  }
1786  
1787  
  static public JTabbedPane jTopOrLeftTabs(boolean horizontal, Object... x) {
1788  
    return jLeftOrTopTabs(horizontal, x);
1789  
  }
1790  
1791  
  static public JTabbedPane jTopOrLeftTabs(boolean horizontal, Collection c) {
1792  
    return jLeftOrTopTabs(horizontal, c);
1793  
  }
1794  
1795  
  static public JScrollPane jscroll_centered_borderless(Component c) {
1796  
    return borderlessScrollPane(jscroll_centered(c));
1797  
  }
1798  
1799  
  static public JPanel withRightAlignedButtons(JComponent center, Object... params) {
1800  
    return centerAndSouth(center, withMargin(jRightAlignedButtons(params)));
1801  
  }
1802  
1803  
  static public JPanel withRightAlignedButtons(Swingable center, Object... params) {
1804  
    return withRightAlignedButtons(wrap(center), params);
1805  
  }
1806  
1807  
  static public JPanel withSideAndTopMargin(Component c) {
1808  
    return withSideAndTopMargin(defaultMargin(), c);
1809  
  }
1810  
1811  
  static public JPanel withSideAndTopMargin(int w, Component c) {
1812  
    return swing(() -> {
1813  
      JPanel p = marginPanel();
1814  
      p.setBorder(BorderFactory.createEmptyBorder(w, w, 0, w));
1815  
      p.add(c);
1816  
      return p;
1817  
    });
1818  
  }
1819  
1820  
  static public JPanel centerAndSouthOrEast(boolean horizontal, Component c, Component s) {
1821  
    return horizontal ? centerAndEast(c, s) : centerAndSouth(c, s);
1822  
  }
1823  
1824  
  static public JPanel withSideMargin(Component c) {
1825  
    return withLeftAndRightMargin(c);
1826  
  }
1827  
1828  
  static public JPanel withSideMargin(int w, Component c) {
1829  
    return withLeftAndRightMargin(w, c);
1830  
  }
1831  
1832  
  static public JPanel withSideMargin(int w1, int w2, Component c) {
1833  
    return withLeftAndRightMargin(w1, w2, c);
1834  
  }
1835  
1836  
  static public JScrollPane borderlessScrollPane(JScrollPane sp) {
1837  
    return setBorder(null, withoutViewportBorder(sp));
1838  
  }
1839  
1840  
  static public JScrollPane jHigherScrollPane(final JComponent c) {
1841  
    return swing(new F0<JScrollPane>() {
1842  
1843  
      public JScrollPane get() {
1844  
        try {
1845  
          return new JScrollPane(c) {
1846  
1847  
            public Dimension getPreferredSize() {
1848  
              Component view = getViewport().getView();
1849  
              if (view == null)
1850  
                return super.getPreferredSize();
1851  
              int pref_width = view.getPreferredSize().width;
1852  
              setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
1853  
              Dimension dim = new Dimension(pref_width, super.getPreferredSize().height + getHorizontalScrollBar().getSize().height);
1854  
              setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
1855  
              return dim;
1856  
            }
1857  
          };
1858  
        } catch (Exception __e) {
1859  
          throw rethrow(__e);
1860  
        }
1861  
      }
1862  
1863  
      public String toString() {
1864  
        return "ret new JScrollPane(c) {\r\n    public Dimension getPreferredSize() {\r\n      Co...";
1865  
      }
1866  
    });
1867  
  }
1868  
1869  
  static public JPanel jfullcenter(Component c) {
1870  
    return jFullCenter(c);
1871  
  }
1872  
1873  
  static public JPanel vstack(Object... parts) {
1874  
    return vstack2(parts);
1875  
  }
1876  
1877  
  static public JPanel vstack(List parts) {
1878  
    return vstack(toObjectArray(parts));
1879  
  }
1880  
1881  
  static public JPanel hstack(Object... parts) {
1882  
    JPanel panel = new JPanel(new GridBagLayout());
1883  
    GridBagConstraints gbc = new GridBagConstraints();
1884  
    gbc.weighty = 1;
1885  
    gbc.fill = GridBagConstraints.VERTICAL;
1886  
    gbc.gridheight = GridBagConstraints.REMAINDER;
1887  
    smartAddWithLayout(panel, gbc, parts);
1888  
    gbc.weightx = 1;
1889  
    panel.add(jrigid(), gbc);
1890  
    return panel;
1891  
  }
1892  
1893  
  static public JCheckBox dm_rcheckBox(String field) {
1894  
    return dm_fieldCheckBox(field);
1895  
  }
1896  
1897  
  static public JCheckBox dm_rcheckBox(String field, String text) {
1898  
    return dm_fieldCheckBox(text, field);
1899  
  }
1900  
1901  
  static public JComponent withLabelToTheRight(JComponent component, String label) {
1902  
    return centerAndEast(component, jlabel(" " + label));
1903  
  }
1904  
1905  
  static public JComponent withLabelToTheRight(String label, JComponent component) {
1906  
    return withLabelToTheRight(component, label);
1907  
  }
1908  
1909  
  static public JSpinner dm_spinner(String field, int min, int max) {
1910  
    return liveValueSpinner(dm_fieldLiveValue(field), min, max);
1911  
  }
1912  
1913  
  static public JSpinner dm_powersOfTwoSpinner(String field, int max) {
1914  
    SimpleLiveValue<Integer> lv = dm_fieldLiveValue(field);
1915  
    return bindLiveValueToSpinner(lv, jPowersOfTwoSpinner(max, lv.get()));
1916  
  }
1917  
1918  
  static public Component verticalStrut(int height) {
1919  
    return Box.createVerticalStrut(height);
1920  
  }
1921  
1922  
  static public int withRightMargin_defaultWidth = 6;
1923  
1924  
  static public JPanel withRightMargin(Component c) {
1925  
    return withRightMargin(withRightMargin_defaultWidth, c);
1926  
  }
1927  
1928  
  static public JPanel withRightMargin(final int w, final Component c) {
1929  
    return swing(new F0<JPanel>() {
1930  
1931  
      public JPanel get() {
1932  
        try {
1933  
          JPanel p = marginPanel();
1934  
          p.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, w));
1935  
          p.add(c);
1936  
          return p;
1937  
        } catch (Exception __e) {
1938  
          throw rethrow(__e);
1939  
        }
1940  
      }
1941  
1942  
      public String toString() {
1943  
        return "JPanel p = marginPanel();\r\n    p.setBorder(BorderFactory.createEmptyBorder(0,...";
1944  
      }
1945  
    });
1946  
  }
1947  
1948  
  static public void setHorizontalMarginForAllButtons(int margin, Component c) {
1949  
    for (var btn : allButtons(c)) setHorizontalMargin(btn, margin);
1950  
  }
1951  
1952  
  static public void setHorizontalMarginForAllButtons(Component c, int margin) {
1953  
    setHorizontalMarginForAllButtons(margin, c);
1954  
  }
1955  
1956  
  static public String nFrames(long n) {
1957  
    return n2(n, "frame");
1958  
  }
1959  
1960  
  static public String nFrames(Collection l) {
1961  
    return nFrames(l(l));
1962  
  }
1963  
1964  
  static public String nFrames(Map map) {
1965  
    return nFrames(l(map));
1966  
  }
1967  
1968  
  static public String n2(long l) {
1969  
    return formatWithThousands(l);
1970  
  }
1971  
1972  
  static public String n2(AtomicLong l) {
1973  
    return n2(l.get());
1974  
  }
1975  
1976  
  static public String n2(Collection l) {
1977  
    return n2(l(l));
1978  
  }
1979  
1980  
  static public String n2(Map map) {
1981  
    return n2(l(map));
1982  
  }
1983  
1984  
  static public String n2(double l, String singular) {
1985  
    return empty(singular) ? str(l) : n2(l, singular, singular + "s");
1986  
  }
1987  
1988  
  static public String n2(double l, String singular, String plural) {
1989  
    if (fraction(l) == 0)
1990  
      return n2((long) l, singular, plural);
1991  
    else
1992  
      return l + " " + plural;
1993  
  }
1994  
1995  
  static public String n2(long l, String singular, String plural) {
1996  
    return n_fancy2(l, singular, plural);
1997  
  }
1998  
1999  
  static public String n2(long l, String singular) {
2000  
    return empty(singular) ? n2(l) : n_fancy2(l, singular, singular + "s");
2001  
  }
2002  
2003  
  static public String n2(Collection l, String singular) {
2004  
    return n2(l(l), singular);
2005  
  }
2006  
2007  
  static public String n2(Collection l, String singular, String plural) {
2008  
    return n_fancy2(l, singular, plural);
2009  
  }
2010  
2011  
  static public String n2(Map m, String singular, String plural) {
2012  
    return n_fancy2(m, singular, plural);
2013  
  }
2014  
2015  
  static public String n2(Map m, String singular) {
2016  
    return n2(l(m), singular);
2017  
  }
2018  
2019  
  static public String n2(long[] a, String singular) {
2020  
    return n2(l(a), singular);
2021  
  }
2022  
2023  
  static public String n2(Object[] a, String singular) {
2024  
    return n2(l(a), singular);
2025  
  }
2026  
2027  
  static public String n2(Object[] a, String singular, String plural) {
2028  
    return n_fancy2(a, singular, plural);
2029  
  }
2030  
2031  
  static public String n2(MultiSet ms, String singular, String plural) {
2032  
    return n_fancy2(ms, singular, plural);
2033  
  }
2034  
2035  
  static public void setEnclosingTabTitle(JComponent c, String title) {
2036  
    swing(() -> {
2037  
      Pair<JTabbedPane, Integer> p = enclosingTab(c);
2038  
      if (p == null)
2039  
        return;
2040  
      setTabTitle(p.a, p.b, title);
2041  
    });
2042  
  }
2043  
2044  
  static public String nRegions(long n) {
2045  
    return n2(n, "region");
2046  
  }
2047  
2048  
  static public String nRegions(Collection l) {
2049  
    return nRegions(l(l));
2050  
  }
2051  
2052  
  static public String nRegions(Map map) {
2053  
    return nRegions(l(map));
2054  
  }
2055  
2056  
  static public String lines(Iterable lines) {
2057  
    return fromLines(lines);
2058  
  }
2059  
2060  
  static public String lines(Object[] lines) {
2061  
    return fromLines(asList(lines));
2062  
  }
2063  
2064  
  static public List<String> lines(String s) {
2065  
    return toLines(s);
2066  
  }
2067  
2068  
  static public <A> String lines(Iterable<A> l, IF1<A, String> f) {
2069  
    return mapToLines(l, f);
2070  
  }
2071  
2072  
  static public List<String> ciSorted(Collection<String> c) {
2073  
    return sortedIgnoreCase(c);
2074  
  }
2075  
2076  
  static public List map(Iterable l, Object f) {
2077  
    return map(f, l);
2078  
  }
2079  
2080  
  static public List map(Object f, Iterable l) {
2081  
    List x = emptyList(l);
2082  
    if (l != null)
2083  
      for (Object o : l) {
2084  
        ping();
2085  
        x.add(callF(f, o));
2086  
      }
2087  
    return x;
2088  
  }
2089  
2090  
  static public <A, B> List<B> map(Iterable<A> l, F1<A, B> f) {
2091  
    return map(f, l);
2092  
  }
2093  
2094  
  static public <A, B> List<B> map(F1<A, B> f, Iterable<A> l) {
2095  
    List x = emptyList(l);
2096  
    if (l != null)
2097  
      for (A o : l) {
2098  
        ping();
2099  
        x.add(callF(f, o));
2100  
      }
2101  
    return x;
2102  
  }
2103  
2104  
  static public <A, B> List<B> map(IF1<A, B> f, Iterable<A> l) {
2105  
    return map(l, f);
2106  
  }
2107  
2108  
  static public <A, B> List<B> map(Iterable<A> l, IF1<A, B> f) {
2109  
    List x = emptyList(l);
2110  
    if (l != null)
2111  
      for (A o : l) {
2112  
        ping();
2113  
        x.add(f.get(o));
2114  
      }
2115  
    return x;
2116  
  }
2117  
2118  
  static public <A, B> List<B> map(IF1<A, B> f, A[] l) {
2119  
    return map(l, f);
2120  
  }
2121  
2122  
  static public <A, B> List<B> map(A[] l, IF1<A, B> f) {
2123  
    List x = emptyList(l);
2124  
    if (l != null)
2125  
      for (A o : l) {
2126  
        ping();
2127  
        x.add(f.get(o));
2128  
      }
2129  
    return x;
2130  
  }
2131  
2132  
  static public List map(Object f, Object[] l) {
2133  
    return map(f, asList(l));
2134  
  }
2135  
2136  
  static public List map(Object[] l, Object f) {
2137  
    return map(f, l);
2138  
  }
2139  
2140  
  static public List map(Object f, Map map) {
2141  
    return map(map, f);
2142  
  }
2143  
2144  
  static public List map(Map map, Object f) {
2145  
    List x = new ArrayList();
2146  
    if (map != null)
2147  
      for (Object _e : map.entrySet()) {
2148  
        ping();
2149  
        Map.Entry e = (Map.Entry) _e;
2150  
        x.add(callF(f, e.getKey(), e.getValue()));
2151  
      }
2152  
    return x;
2153  
  }
2154  
2155  
  static public <A, B, C> List<C> map(Map<A, B> map, IF2<A, B, C> f) {
2156  
    return map(map, (Object) f);
2157  
  }
2158  
2159  
  static public <A, B> List<A> map(IF1<A, B> f, A data1, A... moreData) {
2160  
    List x = emptyList(l(moreData) + 1);
2161  
    x.add(f.get(data1));
2162  
    if (moreData != null)
2163  
      for (A o : moreData) {
2164  
        ping();
2165  
        x.add(f.get(o));
2166  
      }
2167  
    return x;
2168  
  }
2169  
2170  
  static public double nsToMicroseconds(double ns) {
2171  
    return nanosToMicroseconds(ns);
2172  
  }
2173  
2174  
  static public String microSymbol() {
2175  
    return "\u00B5";
2176  
  }
2177  
2178  
  static public boolean isShowing(Component c) {
2179  
    return isComponentShowing(c);
2180  
  }
2181  
2182  
  static public BufferedImage whiteImage(int w, int h) {
2183  
    return newBufferedImage(w, h, Color.white);
2184  
  }
2185  
2186  
  static public BufferedImage whiteImage(int size) {
2187  
    return whiteImage(size, size);
2188  
  }
2189  
2190  
  static public Map<BufferedImage, Object> createGraphics_modulators = synchroIdentityHashMap();
2191  
2192  
  static public Graphics2D createGraphics(BufferedImage img) {
2193  
    Graphics2D g = img.createGraphics();
2194  
    Object mod = createGraphics_modulators.get(img);
2195  
    if (mod != null)
2196  
      callF(mod, g);
2197  
    return g;
2198  
  }
2199  
2200  
  static public void createGraphics_modulate(BufferedImage img, Object mod) {
2201  
    mapPut2(createGraphics_modulators, img, mod);
2202  
  }
2203  
2204  
  static public BWIntegralImage bwIntegralImage_withMeta(BufferedImage img) {
2205  
    return setMetaSrc(bwIntegralImage(img), img);
2206  
  }
2207  
2208  
  static public BWIntegralImage bwIntegralImage_withMeta(BWImage img) {
2209  
    return setMetaSrc(bwIntegralImage(img), img);
2210  
  }
2211  
2212  
  static public JPanel centerAndSouthWithMargin(Component c, Component s) {
2213  
    return centerAndSouth(c, withTopMargin(s));
2214  
  }
2215  
2216  
  static public JPanel centerAndSouthWithMargin(int margin, Component c, Component s) {
2217  
    return centerAndSouth(c, withTopMargin(margin, s));
2218  
  }
2219  
2220  
  static public <A> List<A> ll(A... a) {
2221  
    ArrayList l = new ArrayList(a.length);
2222  
    if (a != null)
2223  
      for (A x : a) l.add(x);
2224  
    return l;
2225  
  }
2226  
2227  
  static public JCheckBoxMenuItem jCheckBoxMenuItem_dyn(String text, IF0<Boolean> checked, Object r) {
2228  
    JCheckBoxMenuItem mi = jCheckBoxMenuItem(text, false, r);
2229  
    if (checked != null)
2230  
      bindToComponent(mi, new Runnable() {
2231  
2232  
        public void run() {
2233  
          try {
2234  
            boolean b = isTrue(checked.get());
2235  
            setChecked(mi, b);
2236  
          } catch (Exception __e) {
2237  
            throw rethrow(__e);
2238  
          }
2239  
        }
2240  
2241  
        public String toString() {
2242  
          return "boolean b = isTrue(checked!);\r\n    ifdef jCheckBoxMenuItem_dyn_debug\r\n      p...";
2243  
        }
2244  
      }, new Runnable() {
2245  
2246  
        public void run() {
2247  
          try {
2248  
            ;
2249  
          } catch (Exception __e) {
2250  
            throw rethrow(__e);
2251  
          }
2252  
        }
2253  
2254  
        public String toString() {
2255  
          return "ifdef jCheckBoxMenuItem_dyn_debug\r\n      print(\"jCheckBoxMenuItem_dyn: hiding...";
2256  
        }
2257  
      });
2258  
    return mi;
2259  
  }
2260  
2261  
  static public JCheckBoxMenuItem jCheckBoxMenuItem_dyn(String text, IF0<Boolean> checked, IVF1<Boolean> r) {
2262  
    return jCheckBoxMenuItem_dyn(text, checked, (Object) r);
2263  
  }
2264  
2265  
  static public int vstackWithSpacing_default = 10;
2266  
2267  
  static public JPanel vstackWithSpacing(final List parts) {
2268  
    return vstackWithSpacing(parts, vstackWithSpacing_default);
2269  
  }
2270  
2271  
  static public JPanel vstackWithSpacing(final List parts, final int spacing) {
2272  
    return swing(new F0<JPanel>() {
2273  
2274  
      public JPanel get() {
2275  
        try {
2276  
          JPanel panel = new JPanel(new GridBagLayout());
2277  
          GridBagConstraints gbc = new GridBagConstraints();
2278  
          gbc.weightx = 1;
2279  
          gbc.fill = GridBagConstraints.HORIZONTAL;
2280  
          gbc.gridwidth = GridBagConstraints.REMAINDER;
2281  
          gbc.insets = new Insets(spacing / 2, 0, (spacing + 1) / 2, 0);
2282  
          smartAddWithLayout(panel, gbc, toObjectArray(nonNulls(parts)));
2283  
          gbc.weighty = 1;
2284  
          gbc.insets = new Insets(0, 0, 0, 0);
2285  
          panel.add(jrigid(), gbc);
2286  
          return panel;
2287  
        } catch (Exception __e) {
2288  
          throw rethrow(__e);
2289  
        }
2290  
      }
2291  
2292  
      public String toString() {
2293  
        return "JPanel panel = new JPanel(new GridBagLayout);\r\n    new GridBagConstraints gbc...";
2294  
      }
2295  
    });
2296  
  }
2297  
2298  
  static public JPanel vstackWithSpacing(Component... parts) {
2299  
    return vstackWithSpacing(asList(parts), vstackWithSpacing_default);
2300  
  }
2301  
2302  
  static public JPanel vstackWithSpacing(int spacing, Component... parts) {
2303  
    return vstackWithSpacing(asList(parts), spacing);
2304  
  }
2305  
2306  
  static public JComboBox jComboBox(final String... items) {
2307  
    return jcombobox(items);
2308  
  }
2309  
2310  
  static public JComboBox jComboBox(Collection<String> items) {
2311  
    return jcombobox(items);
2312  
  }
2313  
2314  
  static public JComboBox jComboBox(Collection<String> items, String selectedItem) {
2315  
    return jcombobox(items, selectedItem);
2316  
  }
2317  
2318  
  static public <A> JComboBox<A> selectItem(A item, JComboBox<A> cb) {
2319  
    if (cb != null) {
2320  
      swing(() -> {
2321  
        cb.setSelectedItem(item);
2322  
      });
2323  
    }
2324  
    return cb;
2325  
  }
2326  
2327  
  static public <A> JComboBox<A> selectItem(JComboBox<A> cb, A item) {
2328  
    return selectItem(item, cb);
2329  
  }
2330  
2331  
  static public <A> JList<A> selectItem(JList<A> list, A item) {
2332  
    {
2333  
      swing(() -> {
2334  
        selectRow(list, jlist_indexOf(list, item));
2335  
      });
2336  
    }
2337  
    return list;
2338  
  }
2339  
2340  
  static public int screenCount() {
2341  
    return l(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices());
2342  
  }
2343  
2344  
  static public Object swing(Object f) {
2345  
    return swingAndWait(f);
2346  
  }
2347  
2348  
  static public void swing(Runnable f) {
2349  
    swingAndWait(f);
2350  
  }
2351  
2352  
  static public <A> A swing(F0<A> f) {
2353  
    return (A) swingAndWait(f);
2354  
  }
2355  
2356  
  static public <A> A swing(IF0<A> f) {
2357  
    return (A) swingAndWait(f);
2358  
  }
2359  
2360  
  static public <A> void setComboBoxItems(JComboBox<A> cb, Collection<A> items) {
2361  
    if (cb != null) {
2362  
      swing(() -> {
2363  
        cb.setModel(new DefaultComboBoxModel(new Vector(items)));
2364  
      });
2365  
    }
2366  
  }
2367  
2368  
  static public List flattenToList(Object... l) {
2369  
    Flattener f = new Flattener();
2370  
    f.add(l);
2371  
    return f.toList();
2372  
  }
2373  
2374  
  static public List<Integer> countIteratorAsList_incl(int b) {
2375  
    return countIteratorAsList_incl(0, b);
2376  
  }
2377  
2378  
  static public List<Integer> countIteratorAsList_incl(int a, int b) {
2379  
    return countIteratorToList_inclusive(a, b);
2380  
  }
2381  
2382  
  static public <A> List<A> countIteratorAsList_incl(int b, IF1<Integer, A> f) {
2383  
    return countIteratorAsList_incl(0, b, f);
2384  
  }
2385  
2386  
  static public <A> List<A> countIteratorAsList_incl(int a, int b, IF1<Integer, A> f) {
2387  
    return countIteratorToList_inclusive(a, b, f);
2388  
  }
2389  
2390  
  static public List<Integer> countIteratorAsList_incl(int a, int b, int step) {
2391  
    return countIteratorToList_inclusive(a, b, step);
2392  
  }
2393  
2394  
  static public <A> List<A> countIteratorAsList_incl(double a, double b, double step, IF1<Double, A> f) {
2395  
    return countIteratorToList_inclusive(a, b, step, f);
2396  
  }
2397  
2398  
  static public <A> List<Double> countIteratorAsList_incl(double a, double b, double step) {
2399  
    return countIteratorToList_inclusive(a, b, step);
2400  
  }
2401  
2402  
  static public <A> List<A> countIteratorAsList_incl(IF1<Double, A> f, double a, double b, double step) {
2403  
    return countIteratorToList_inclusive(f, a, b, step);
2404  
  }
2405  
2406  
  static public <A> List<A> countIteratorAsList_incl(IF1<Integer, A> f, int a, int b) {
2407  
    return countIteratorAsList_incl(f, a, b, 1);
2408  
  }
2409  
2410  
  static public <A> List<A> countIteratorAsList_incl(IF1<Integer, A> f, int a, int b, int step) {
2411  
    return countIteratorToList_inclusive(f, a, b, step);
2412  
  }
2413  
2414  
  static public int boostHashCombine(int a, int b) {
2415  
    return a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2));
2416  
  }
2417  
2418  
  static public int _hashCode(Object a) {
2419  
    return a == null ? 0 : a.hashCode();
2420  
  }
2421  
2422  
  static public Class mc() {
2423  
    return main.class;
2424  
  }
2425  
2426  
  static public String printLog() {
2427  
    return getPrintLog();
2428  
  }
2429  
2430  
  static public <A extends Component> A setBounds(final int x, final int y, final int w, final int h, final A a) {
2431  
    if (a != null) {
2432  
      swing(() -> {
2433  
        a.setBounds(x, y, w, h);
2434  
      });
2435  
    }
2436  
    return a;
2437  
  }
2438  
2439  
  static public <A extends Component> A setBounds(A a, Rect r) {
2440  
    if (a != null && r != null) {
2441  
      swing(() -> {
2442  
        a.setBounds(toRectangle(r));
2443  
      });
2444  
    }
2445  
    return a;
2446  
  }
2447  
2448  
  static public <A extends Component> A setBounds(Rect r, A a) {
2449  
    return setBounds(a, r);
2450  
  }
2451  
2452  
  static public <A extends Component> A setBounds(A a, int x, int y, int w, int h) {
2453  
    return setBounds(x, y, w, h, a);
2454  
  }
2455  
2456  
  static public <A extends Component> A onBoundsChange(A c, final Object r) {
2457  
    if (c != null && r != null) {
2458  
      swing(() -> {
2459  
        c.addComponentListener(new ComponentAdapter() {
2460  
2461  
          public void componentResized(ComponentEvent e) {
2462  
            pcallF(r);
2463  
          }
2464  
2465  
          public void componentMoved(ComponentEvent e) {
2466  
            pcallF(r);
2467  
          }
2468  
        });
2469  
      });
2470  
    }
2471  
    return c;
2472  
  }
2473  
2474  
  static public <A extends Component> A onBoundsChange(Object r, A c) {
2475  
    return onBoundsChange(c, r);
2476  
  }
2477  
2478  
  static public boolean isMain() {
2479  
    return isMainProgram();
2480  
  }
2481  
2482  
  static public <A extends Concept> List<A> cdelete(Class<A> c, Object... params) {
2483  
    return deleteConcepts(c, params);
2484  
  }
2485  
2486  
  static public void cdelete(Concept c) {
2487  
    deleteConcept(c);
2488  
  }
2489  
2490  
  static public <A extends Concept> void cdelete(Collection<A> c) {
2491  
    for (A a : cloneList(c)) cdelete(a);
2492  
  }
2493  
2494  
  static public boolean isExtendedStateNormal(JFrame f) {
2495  
    return f != null && swing(() -> f.getExtendedState() == JFrame.NORMAL);
2496  
  }
2497  
2498  
  static public void maximizeOrRestoreFrame(JFrame f) {
2499  
    if (f == null)
2500  
      return;
2501  
    if (!isExtendedStateNormal(f)) {
2502  
      swing(() -> {
2503  
        f.setExtendedState(JFrame.NORMAL);
2504  
      });
2505  
    } else
2506  
      maximizeFrame(f);
2507  
  }
2508  
2509  
  static public <A extends JComponent> A onFirstShowing(A component, Runnable onShow) {
2510  
    return onFirstComponentShow(component, onShow);
2511  
  }
2512  
2513  
  static public boolean swingConfirm(Component owner, String msg) {
2514  
    return confirmOKCancel(owner, msg);
2515  
  }
2516  
2517  
  static public boolean swingConfirm(String msg) {
2518  
    return confirmOKCancel(msg);
2519  
  }
2520  
2521  
  static public <A extends Component> A setAlwaysOnTop(A c) {
2522  
    return alwaysOnTop(c);
2523  
  }
2524  
2525  
  static public BufferedImage shootWindow(Window w) {
2526  
    w.toFront();
2527  
    sleep(50);
2528  
    return shootScreen2(w.getBounds());
2529  
  }
2530  
2531  
  static public Object ccallOpt(Concept.Ref ref, String method, Object... args) {
2532  
    return callOptWithEnter(cDeref(ref), method, args);
2533  
  }
2534  
2535  
  static public Object ccallOpt(Object object, String method, Object... args) {
2536  
    return callOptWithEnter(object, method, args);
2537  
  }
2538  
2539  
  static public <A extends JComponent> A fontSizePlus(final int delta, final A c) {
2540  
    if (c != null) {
2541  
      swing(() -> {
2542  
        Font font = c.getFont();
2543  
        c.setFont(font.deriveFont(font.getSize2D() + delta));
2544  
      });
2545  
    }
2546  
    return c;
2547  
  }
2548  
2549  
  static public JLabel jCenteredLabel(String text) {
2550  
    return jcenteredLabel(text);
2551  
  }
2552  
2553  
  static public JLabel jCenteredLabel() {
2554  
    return jcenteredLabel();
2555  
  }
2556  
2557  
  static public boolean haveMuricaPassword() {
2558  
    return nempty(muricaPassword());
2559  
  }
2560  
2561  
  static public <A extends JComponent> A setOpaqueBackground(final Color color, final A a) {
2562  
    if (a != null) {
2563  
      swing(() -> {
2564  
        a.setBackground(color);
2565  
        a.setOpaque(true);
2566  
        a.putClientProperty("substancelaf.colorizationFactor", 1.0);
2567  
      });
2568  
    }
2569  
    return a;
2570  
  }
2571  
2572  
  static public <A extends Component> A jtransparent_recursive(A a) {
2573  
    if (a instanceof JPanel) {
2574  
      ((JPanel) a).setOpaque(false);
2575  
      for (Component c : getSwingChildren(a)) jtransparent_recursive(c);
2576  
    }
2577  
    return a;
2578  
  }
2579  
2580  
  static public JLabel jImage_scaledToHeight(String imageID, int height) {
2581  
    return jImage(resizeImageToHeight_bilinear(loadImage2(imageID), height));
2582  
  }
2583  
2584  
  static public JLabel jImage_scaledToHeight(int height, String imageID) {
2585  
    return jImage_scaledToHeight(imageID, height);
2586  
  }
2587  
2588  
  static public JButton jimageButton(String imageID, Object action) {
2589  
    JButton btn = jbutton("", action);
2590  
    btn.setIcon(imageIcon(imageID));
2591  
    return btn;
2592  
  }
2593  
2594  
  static public JButton jimageButton(String imageID) {
2595  
    return jimageButton(imageID, null);
2596  
  }
2597  
2598  
  static public JButton jimageButton(BufferedImage img, String toolTip, Runnable action) {
2599  
    var btn = jbutton("", action);
2600  
    setButtonImage(btn, img);
2601  
    return setToolTip(toolTip, btn);
2602  
  }
2603  
2604  
  static public BufferedImage scaleImageToWidth(BufferedImage img, int newW) {
2605  
    return resizeImage(img, newW);
2606  
  }
2607  
2608  
  static public BufferedImage scaleImageToWidth(int newW, BufferedImage img) {
2609  
    return scaleImageToWidth(img, newW);
2610  
  }
2611  
2612  
  static public BufferedImage scaleImageToWidth(int newW, String imageID) {
2613  
    return scaleImageToWidth(newW, loadImage2(imageID));
2614  
  }
2615  
2616  
  static public Runnable disableButtonWhileCalcing3(final Runnable r) {
2617  
    return new Runnable() {
2618  
2619  
      public void run() {
2620  
        try {
2621  
          disableButtonWhileCalcing2(r);
2622  
        } catch (Exception __e) {
2623  
          throw rethrow(__e);
2624  
        }
2625  
      }
2626  
2627  
      public String toString() {
2628  
        return "disableButtonWhileCalcing2(r)";
2629  
      }
2630  
    };
2631  
  }
2632  
2633  
  static public class transpileOnServerWithErrorWindow_DaClass {
2634  
2635  
    public String snippetID;
2636  
2637  
    public JFastLogView_noWrap transpilationErrorBox;
2638  
2639  
    public Runnable onSuccess;
2640  
2641  
    public Object onError;
2642  
2643  
    public void go(boolean medium) {
2644  
      infoBox("Transpiling " + snippetID);
2645  
      final Pair<Boolean, String> p = transpileOnBestServer(snippetID, medium ? "medium" : "quick");
2646  
      swingLater(new Runnable() {
2647  
2648  
        public void run() {
2649  
          try {
2650  
            if (p.a) {
2651  
              infoBox("Transpiled OK!");
2652  
              hideWindow(transpilationErrorBox);
2653  
              transpilationErrorBox = null;
2654  
              callFInNewThread(onSuccess);
2655  
            } else {
2656  
              infoBox("Transpilation error. " + p.b);
2657  
              boolean first = transpilationErrorBox == null;
2658  
              transpilationErrorBox = maximizeFrame(scrollAllTheWayDown(showText_fast_noWrap(transpilationErrorBox, "Transpilation Error", p.b)));
2659  
              if (first) {
2660  
                setFrameIcon("#1101268", transpilationErrorBox);
2661  
                addButtonsToWindow(transpilationErrorBox, "Medium transpile", runnableThread(new Runnable() {
2662  
2663  
                  public void run() {
2664  
                    try {
2665  
                      go(true);
2666  
                    } catch (Exception __e) {
2667  
                      throw rethrow(__e);
2668  
                    }
2669  
                  }
2670  
2671  
                  public String toString() {
2672  
                    return "go(true)";
2673  
                  }
2674  
                }));
2675  
              }
2676  
              callFInNewThread(onError, p.b);
2677  
            }
2678  
          } catch (Exception __e) {
2679  
            throw rethrow(__e);
2680  
          }
2681  
        }
2682  
2683  
        public String toString() {
2684  
          return "if (p.a) {\r\n        infoBox(\"Transpiled OK!\");\r\n        hideWindow(transpilat...";
2685  
        }
2686  
      });
2687  
    }
2688  
  }
2689  
2690  
  static public void transpileOnServerWithErrorWindow(String snippetID, boolean medium, final Runnable onSuccess, Object... __) {
2691  
    nu(transpileOnServerWithErrorWindow_DaClass.class, paramsPlus(__, "snippetID", snippetID, "onSuccess", onSuccess)).go(medium);
2692  
  }
2693  
2694  
  static public <A extends Component> A maximizeFrame(A c) {
2695  
    JFrame f = swing(new F0<JFrame>() {
2696  
2697  
      public JFrame get() {
2698  
        try {
2699  
          JFrame f = getFrame(c);
2700  
          if (f != null)
2701  
            f.setExtendedState(JFrame.MAXIMIZED_BOTH);
2702  
          return f;
2703  
        } catch (Exception __e) {
2704  
          throw rethrow(__e);
2705  
        }
2706  
      }
2707  
2708  
      public String toString() {
2709  
        return "JFrame f = getFrame(c);\r\n    if (f != null)\r\n      f.setExtendedState(JFrame....";
2710  
      }
2711  
    });
2712  
    if (f != null && !isAWTThread()) {
2713  
      Dimension d = maximumWindowBounds().getSize();
2714  
      long start = sysNow();
2715  
      while (licensed()) {
2716  
        try {
2717  
          if (f.getWidth() >= d.getWidth() - 100 && f.getHeight() >= d.getHeight() - 100)
2718  
            break;
2719  
          if (sysNow() >= start + 100) {
2720  
            warn("maximizeFrame timeout");
2721  
            break;
2722  
          }
2723  
        } catch (Throwable __e) {
2724  
          printStackTrace(__e);
2725  
        }
2726  
        sleep(1);
2727  
      }
2728  
    }
2729  
    return c;
2730  
  }
2731  
2732  
  static public void _close(AutoCloseable c) {
2733  
    if (c != null)
2734  
      try {
2735  
        c.close();
2736  
      } catch (Throwable e) {
2737  
        if (c instanceof javax.imageio.stream.ImageOutputStream)
2738  
          return;
2739  
        else
2740  
          throw rethrow(e);
2741  
      }
2742  
  }
2743  
2744  
  static public String appendWithColon(String s) {
2745  
    return prependColonSpaceIfNempty(s);
2746  
  }
2747  
2748  
  static public <A, B> Pair<A, B> pair(A a, B b) {
2749  
    return new Pair(a, b);
2750  
  }
2751  
2752  
  static public <A> Pair<A, A> pair(A a) {
2753  
    return new Pair(a, a);
2754  
  }
2755  
2756  
  static public <A extends Throwable> A printStackTrace(A e) {
2757  
    if (e != null)
2758  
      print(getStackTrace(e));
2759  
    return e;
2760  
  }
2761  
2762  
  static public void printStackTrace() {
2763  
    printStackTrace(new Throwable());
2764  
  }
2765  
2766  
  static public void printStackTrace(String msg) {
2767  
    printStackTrace(new Throwable(msg));
2768  
  }
2769  
2770  
  static public void printStackTrace(String msg, Throwable e) {
2771  
    printStackTrace(new Throwable(msg, e));
2772  
  }
2773  
2774  
  static public void setFrameContents(final Component c, final Object contents) {
2775  
    swing(() -> {
2776  
      JFrame frame = getFrame(c);
2777  
      if (frame == null)
2778  
        return;
2779  
      frame.getContentPane().removeAll();
2780  
      frame.getContentPane().setLayout(new BorderLayout());
2781  
      frame.getContentPane().add(wrap(contents));
2782  
      revalidate(frame);
2783  
    });
2784  
  }
2785  
2786  
  static public BufferedImage renderComponentToImage(final Component c) {
2787  
    if (c == null)
2788  
      return null;
2789  
    return swing(new F0<BufferedImage>() {
2790  
2791  
      public BufferedImage get() {
2792  
        try {
2793  
          int w = getWidth(c), h = getHeight(c);
2794  
          BufferedImage img = newBufferedImage(w, h);
2795  
          c.paint(createGraphics(img));
2796  
          return img;
2797  
        } catch (Exception __e) {
2798  
          throw rethrow(__e);
2799  
        }
2800  
      }
2801  
2802  
      public String toString() {
2803  
        return "int w = getWidth(c), h = getHeight(c);\r\n    BufferedImage img = newBufferedIm...";
2804  
      }
2805  
    });
2806  
  }
2807  
2808  
  static public <A extends Image> A copyImageToClipboard(A img) {
2809  
    TransferableImage trans = new TransferableImage(img);
2810  
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
2811  
    vmBus_send("newClipboardContents", img);
2812  
    print("Copied image to clipboard (" + img.getWidth(null) + "*" + img.getHeight(null) + " px)");
2813  
    return img;
2814  
  }
2815  
2816  
  static public File saveInImageDirectoryWithCounter(String subPath, BufferedImage img) {
2817  
    if (img == null)
2818  
      return null;
2819  
    assertNempty(subPath);
2820  
    File dir = imagesDir();
2821  
    if (!isImageFileName(subPath))
2822  
      subPath += ".png";
2823  
    File f = makeFileNameUnique_beforeExtension_startWith1_noDot(newFile(dir, subPath));
2824  
    saveImage(f, img);
2825  
    infoBox("Saved image " + appendBracketed(img.getWidth(null) + "*" + img.getHeight(null)) + ": " + fileInfo(f));
2826  
    return f;
2827  
  }
2828  
2829  
  static public java.awt.Color awtColor(String hex) {
2830  
    byte[] b = bytesFromHex(dropPrefix("#", hex));
2831  
    return new Color(ubyteToInt(b[0]), ubyteToInt(b[1]), ubyteToInt(b[2]));
2832  
  }
2833  
2834  
  static public CleanExit cleanExit(String msg) {
2835  
    throw new CleanExit(msg);
2836  
  }
2837  
2838  
  static public CleanExit cleanExit() {
2839  
    throw new CleanExit();
2840  
  }
2841  
2842  
  static public String exceptionToStringShort(Throwable e) {
2843  
    lastException(e);
2844  
    e = getInnerException(e);
2845  
    String msg = hideCredentials(unnull(e.getMessage()));
2846  
    if (msg.indexOf("Error") < 0 && msg.indexOf("Exception") < 0)
2847  
      return baseClassName(e) + prependIfNempty(": ", msg);
2848  
    else
2849  
      return msg;
2850  
  }
2851  
2852  
  static public void hideTrayIcon(TrayIcon t) {
2853  
    removeTrayIcon(t);
2854  
  }
2855  
2856  
  static public void systemExit(int code) {
2857  
    System.exit(code);
2858  
  }
2859  
2860  
  static public Window getWindow(Object o) {
2861  
    if (!(o instanceof Component))
2862  
      return null;
2863  
    return swing(() -> {
2864  
      Component c = (Component) o;
2865  
      while (c != null) {
2866  
        if (c instanceof Window)
2867  
          return ((Window) c);
2868  
        c = c.getParent();
2869  
      }
2870  
      return null;
2871  
    });
2872  
  }
2873  
2874  
  static public JFastLogView_noWrap showText_fast_noWrap(String title, Object text) {
2875  
    return showText_fast_noWrap(null, title, text);
2876  
  }
2877  
2878  
  static public JFastLogView_noWrap showText_fast_noWrap(JFastLogView_noWrap view, String title, Object text) {
2879  
    if (view != null) {
2880  
      view.setText(str(text));
2881  
      return view;
2882  
    }
2883  
    view = jFastLogView_noWrap(str(text));
2884  
    makeFrame(title, jscroll_copyBackground(view));
2885  
    return view;
2886  
  }
2887  
2888  
  static public JFastLogView_noWrap showText_fast_noWrap(Object text) {
2889  
    return showText_fast_noWrap(autoFrameTitle(), text);
2890  
  }
2891  
2892  
  static public String renderStackTrace(StackTraceElement[] st) {
2893  
    return stackTraceToString(st);
2894  
  }
2895  
2896  
  static public String renderStackTrace(Throwable e) {
2897  
    return stackTraceToString(e);
2898  
  }
2899  
2900  
  static public String renderStackTrace(String msg) {
2901  
    return renderStackTrace(new Throwable(msg));
2902  
  }
2903  
2904  
  static public boolean contains(Collection c, Object o) {
2905  
    return c != null && c.contains(o);
2906  
  }
2907  
2908  
  static public boolean contains(Iterable it, Object a) {
2909  
    if (it != null)
2910  
      for (Object o : it) if (eq(a, o))
2911  
        return true;
2912  
    return false;
2913  
  }
2914  
2915  
  static public boolean contains(Object[] x, Object o) {
2916  
    if (x != null)
2917  
      for (Object a : x) if (eq(a, o))
2918  
        return true;
2919  
    return false;
2920  
  }
2921  
2922  
  static public boolean contains(String s, char c) {
2923  
    return s != null && s.indexOf(c) >= 0;
2924  
  }
2925  
2926  
  static public boolean contains(String s, String b) {
2927  
    return s != null && s.indexOf(b) >= 0;
2928  
  }
2929  
2930  
  static public boolean contains(BitSet bs, int i) {
2931  
    return bs != null && bs.get(i);
2932  
  }
2933  
2934  
  static public <A> boolean contains(Producer<A> p, A a) {
2935  
    if (p != null && a != null)
2936  
      while (true) {
2937  
        A x = p.next();
2938  
        if (x == null)
2939  
          break;
2940  
        if (eq(x, a))
2941  
          return true;
2942  
      }
2943  
    return false;
2944  
  }
2945  
2946  
  static public Object vm_generalMap_put(Object key, Object value) {
2947  
    return mapPutOrRemove(vm_generalMap(), key, value);
2948  
  }
2949  
2950  
  static public String mcDollar() {
2951  
    return mcName() + "$";
2952  
  }
2953  
2954  
  static public String className(Object o) {
2955  
    return getClassName(o);
2956  
  }
2957  
2958  
  static public Collection<Concept> allConcepts() {
2959  
    return db_mainConcepts().allConcepts();
2960  
  }
2961  
2962  
  static public Collection<Concept> allConcepts(Concepts concepts) {
2963  
    return concepts.allConcepts();
2964  
  }
2965  
2966  
  static public <A extends Concept> Collection<A> findConcepts(Class<A> c, Object... params) {
2967  
    return findConceptsWhere(c, params);
2968  
  }
2969  
2970  
  static public Collection<Concept> findConcepts(String c, Object... params) {
2971  
    return findConceptsWhere(c, params);
2972  
  }
2973  
2974  
  static public <A extends Concept> Collection<A> findConcepts(Concepts concepts, Class<A> c, Object... params) {
2975  
    return findConceptsWhere(concepts, c, params);
2976  
  }
2977  
2978  
  static public Collection<Concept> findConcepts(Concepts concepts, String c, Object... params) {
2979  
    return findConceptsWhere(concepts, c, params);
2980  
  }
2981  
2982  
  static public int l(Object[] a) {
2983  
    return a == null ? 0 : a.length;
2984  
  }
2985  
2986  
  static public int l(boolean[] a) {
2987  
    return a == null ? 0 : a.length;
2988  
  }
2989  
2990  
  static public int l(byte[] a) {
2991  
    return a == null ? 0 : a.length;
2992  
  }
2993  
2994  
  static public int l(short[] a) {
2995  
    return a == null ? 0 : a.length;
2996  
  }
2997  
2998  
  static public int l(long[] a) {
2999  
    return a == null ? 0 : a.length;
3000  
  }
3001  
3002  
  static public int l(int[] a) {
3003  
    return a == null ? 0 : a.length;
3004  
  }
3005  
3006  
  static public int l(float[] a) {
3007  
    return a == null ? 0 : a.length;
3008  
  }
3009  
3010  
  static public int l(double[] a) {
3011  
    return a == null ? 0 : a.length;
3012  
  }
3013  
3014  
  static public int l(char[] a) {
3015  
    return a == null ? 0 : a.length;
3016  
  }
3017  
3018  
  static public int l(Collection c) {
3019  
    return c == null ? 0 : c.size();
3020  
  }
3021  
3022  
  static public int l(Iterator i) {
3023  
    return iteratorCount_int_close(i);
3024  
  }
3025  
3026  
  static public int l(Map m) {
3027  
    return m == null ? 0 : m.size();
3028  
  }
3029  
3030  
  static public int l(CharSequence s) {
3031  
    return s == null ? 0 : s.length();
3032  
  }
3033  
3034  
  static public long l(File f) {
3035  
    return f == null ? 0 : f.length();
3036  
  }
3037  
3038  
  static public int l(Object o) {
3039  
    return o == null ? 0 : o instanceof String ? l((String) o) : o instanceof Map ? l((Map) o) : o instanceof Collection ? l((Collection) o) : o instanceof Object[] ? l((Object[]) o) : o instanceof boolean[] ? l((boolean[]) o) : o instanceof byte[] ? l((byte[]) o) : o instanceof char[] ? l((char[]) o) : o instanceof short[] ? l((short[]) o) : o instanceof int[] ? l((int[]) o) : o instanceof float[] ? l((float[]) o) : o instanceof double[] ? l((double[]) o) : o instanceof long[] ? l((long[]) o) : (Integer) call(o, "size");
3040  
  }
3041  
3042  
  static public int l(MultiSet ms) {
3043  
    return ms == null ? 0 : ms.size();
3044  
  }
3045  
3046  
  static public int l(IntRange r) {
3047  
    return r == null ? 0 : r.length();
3048  
  }
3049  
3050  
  static public long l(LongRange r) {
3051  
    return r == null ? 0 : r.length();
3052  
  }
3053  
3054  
  static public double l(DoubleRange r) {
3055  
    return r == null ? 0 : r.length();
3056  
  }
3057  
3058  
  static public int l(IntBuffer b) {
3059  
    return b == null ? 0 : b.size();
3060  
  }
3061  
3062  
  static public Object first(Object list) {
3063  
    return first((Iterable) list);
3064  
  }
3065  
3066  
  static public <A> A first(List<A> list) {
3067  
    return empty(list) ? null : list.get(0);
3068  
  }
3069  
3070  
  static public <A> A first(A[] bla) {
3071  
    return bla == null || bla.length == 0 ? null : bla[0];
3072  
  }
3073  
3074  
  static public <A, B> Pair<A, B> first(Map<A, B> map) {
3075  
    return mapEntryToPair(first(entrySet(map)));
3076  
  }
3077  
3078  
  static public <A, B> Pair<A, B> first(MultiMap<A, B> mm) {
3079  
    if (mm == null)
3080  
      return null;
3081  
    var e = first(mm.data.entrySet());
3082  
    if (e == null)
3083  
      return null;
3084  
    return pair(e.getKey(), first(e.getValue()));
3085  
  }
3086  
3087  
  static public <A> A first(IterableIterator<A> i) {
3088  
    return first((Iterator<A>) i);
3089  
  }
3090  
3091  
  static public <A> A first(Iterator<A> i) {
3092  
    return i == null || !i.hasNext() ? null : i.next();
3093  
  }
3094  
3095  
  static public <A> A first(Iterable<A> i) {
3096  
    if (i == null)
3097  
      return null;
3098  
    Iterator<A> it = i.iterator();
3099  
    return it.hasNext() ? it.next() : null;
3100  
  }
3101  
3102  
  static public Character first(String s) {
3103  
    return empty(s) ? null : s.charAt(0);
3104  
  }
3105  
3106  
  static public Character first(CharSequence s) {
3107  
    return empty(s) ? null : s.charAt(0);
3108  
  }
3109  
3110  
  static public <A, B> A first(Pair<A, B> p) {
3111  
    return p == null ? null : p.a;
3112  
  }
3113  
3114  
  static public <A, B, C> A first(T3<A, B, C> t) {
3115  
    return t == null ? null : t.a;
3116  
  }
3117  
3118  
  static public Byte first(byte[] l) {
3119  
    return empty(l) ? null : l[0];
3120  
  }
3121  
3122  
  static public int first(IntBuffer buf) {
3123  
    return buf.get(0);
3124  
  }
3125  
3126  
  static public <A> A first(A[] l, IF1<A, Boolean> pred) {
3127  
    return firstThat(l, pred);
3128  
  }
3129  
3130  
  static public <A> A first(Iterable<A> l, IF1<A, Boolean> pred) {
3131  
    return firstThat(l, pred);
3132  
  }
3133  
3134  
  static public <A> A first(IF1<A, Boolean> pred, Iterable<A> l) {
3135  
    return firstThat(pred, l);
3136  
  }
3137  
3138  
  static public <A extends Concept> A registerConcept(A c) {
3139  
    return registerConcept(db_mainConcepts(), c);
3140  
  }
3141  
3142  
  static public <A extends Concept> A registerConcept(Concepts cc, A c) {
3143  
    {
3144  
      if (cc != null)
3145  
        cc.register(c);
3146  
    }
3147  
    return c;
3148  
  }
3149  
3150  
  static public Thread startThread(Object runnable) {
3151  
    return startThread(defaultThreadName(), runnable);
3152  
  }
3153  
3154  
  static public Thread startThread(String name, Runnable runnable) {
3155  
    runnable = wrapAsActivity(runnable);
3156  
    return startThread(newThread(runnable, name));
3157  
  }
3158  
3159  
  static public Thread startThread(String name, Object runnable) {
3160  
    runnable = wrapAsActivity(runnable);
3161  
    return startThread(newThread(toRunnable(runnable), name));
3162  
  }
3163  
3164  
  static public Thread startThread(Thread t) {
3165  
    _registerThread(t);
3166  
    t.start();
3167  
    return t;
3168  
  }
3169  
3170  
  static public File myJar() {
3171  
    return first(myLibraryFiles());
3172  
  }
3173  
3174  
  static public void loadBinaryPageToFile(String url, File file) {
3175  
    try {
3176  
      print("Loading " + url);
3177  
      loadBinaryPageToFile(openConnection(new URL(url)), file);
3178  
    } catch (Exception __e) {
3179  
      throw rethrow(__e);
3180  
    }
3181  
  }
3182  
3183  
  static public void loadBinaryPageToFile(URLConnection con, File file) {
3184  
    try {
3185  
      setHeaders(con);
3186  
      loadBinaryPageToFile_noHeaders(con, file);
3187  
    } catch (Exception __e) {
3188  
      throw rethrow(__e);
3189  
    }
3190  
  }
3191  
3192  
  static public void loadBinaryPageToFile_noHeaders(URLConnection con, File file) {
3193  
    try {
3194  
      File ftemp = new File(f2s(file) + "_temp");
3195  
      FileOutputStream buf = newFileOutputStream(mkdirsFor(ftemp));
3196  
      try {
3197  
        InputStream inputStream = con.getInputStream();
3198  
        long len = 0;
3199  
        try {
3200  
          len = con.getContentLength();
3201  
        } catch (Throwable e) {
3202  
          printStackTrace(e);
3203  
        }
3204  
        String pat = "  {*}" + (len != 0 ? "/" + len : "") + " bytes loaded.";
3205  
        copyStreamWithPrints(inputStream, buf, pat);
3206  
        inputStream.close();
3207  
        buf.close();
3208  
        file.delete();
3209  
        renameFile_assertTrue(ftemp, file);
3210  
      } finally {
3211  
        if (buf != null)
3212  
          buf.close();
3213  
      }
3214  
    } catch (Exception __e) {
3215  
      throw rethrow(__e);
3216  
    }
3217  
  }
3218  
3219  
  static public boolean isFile(File f) {
3220  
    return f != null && f.isFile();
3221  
  }
3222  
3223  
  static public boolean isFile(String path) {
3224  
    return isFile(newFile(path));
3225  
  }
3226  
3227  
  static public File copyFile(File src, File dest) {
3228  
    try {
3229  
      FileInputStream inputStream = new FileInputStream(src.getPath());
3230  
      FileOutputStream outputStream = newFileOutputStream(dest.getPath());
3231  
      try {
3232  
        copyStream(inputStream, outputStream);
3233  
        inputStream.close();
3234  
      } finally {
3235  
        outputStream.close();
3236  
      }
3237  
      return dest;
3238  
    } catch (Exception __e) {
3239  
      throw rethrow(__e);
3240  
    }
3241  
  }
3242  
3243  
  static public String f2s(File f) {
3244  
    return f == null ? null : f.getAbsolutePath();
3245  
  }
3246  
3247  
  static public String f2s(String s) {
3248  
    return f2s(newFile(s));
3249  
  }
3250  
3251  
  static public String f2s(java.nio.file.Path p) {
3252  
    return p == null ? null : f2s(p.toFile());
3253  
  }
3254  
3255  
  static public String or2(String a, String b) {
3256  
    return nempty(a) ? a : b;
3257  
  }
3258  
3259  
  static public String or2(String a, String b, String c) {
3260  
    return or2(or2(a, b), c);
3261  
  }
3262  
3263  
  static public String currentProcessCommand() {
3264  
    ProcessHandle processHandle = ProcessHandle.current();
3265  
    return getVar(processHandle.info().command());
3266  
  }
3267  
3268  
  static public StefansOS_ConnectToServer snippetUpdateConnector(Object... __) {
3269  
    boolean verbose = boolPar("verbose", __);
3270  
    StefansOS_ConnectToServer connector = new StefansOS_ConnectToServer();
3271  
    connector.onLine = new VF1<String>() {
3272  
3273  
      public void get(String line) {
3274  
        try {
3275  
          Matches m = new Matches();
3276  
          if (startsWith(line, "snippetUpdates:", m)) {
3277  
            if (verbose)
3278  
              print(line);
3279  
            String msg = m.rest();
3280  
            vmBus_send("snippetUpdate", safeUnstruct(msg));
3281  
          }
3282  
        } catch (Exception __e) {
3283  
          throw rethrow(__e);
3284  
        }
3285  
      }
3286  
3287  
      public String toString() {
3288  
        return "new Matches m;\r\n    if (startsWith(line, \"snippetUpdates:\", m)) {\r\n      if (...";
3289  
      }
3290  
    };
3291  
    connector.startWithSubs("snippetUpdates");
3292  
    return connector;
3293  
  }
3294  
3295  
  static public <A> AutoCloseable vmBus_onMessage(String msg, IVF1<A> onMessage) {
3296  
    return vmBus_onMessage(msg, ivf1ToVF1(onMessage));
3297  
  }
3298  
3299  
  static public <A> AutoCloseable vmBus_onMessage(final String msg, final VF1<A> onMessage) {
3300  
    Map<String, Set> map = vm_busListenersByMessage_live();
3301  
    synchronized (map) {
3302  
      Set listeners = map.get(msg);
3303  
      if (listeners == null)
3304  
        map.put(msg, listeners = syncIdentityHashSet());
3305  
      return tempAdd(listeners, new VF2<String, Object>() {
3306  
3307  
        public void get(String _msg, Object arg) {
3308  
          try {
3309  
            callF(onMessage, arg);
3310  
          } catch (Exception __e) {
3311  
            throw rethrow(__e);
3312  
          }
3313  
        }
3314  
3315  
        public String toString() {
3316  
          return "callF(onMessage, arg)";
3317  
        }
3318  
      });
3319  
    }
3320  
  }
3321  
3322  
  static public <A, B> AutoCloseable vmBus_onMessage(String msg, final VF2<A, B> onMessage) {
3323  
    return vmBus_onMessage(msg, new VF1<Object[]>() {
3324  
3325  
      public void get(Object[] o) {
3326  
        try {
3327  
          callF(onMessage, first(o), second(o));
3328  
        } catch (Exception __e) {
3329  
          throw rethrow(__e);
3330  
        }
3331  
      }
3332  
3333  
      public String toString() {
3334  
        return "callF(onMessage, first(o), second(o));";
3335  
      }
3336  
    });
3337  
  }
3338  
3339  
  static public <A, B> AutoCloseable vmBus_onMessage(String msg, final IVF2<A, B> onMessage) {
3340  
    return vmBus_onMessage(msg, new VF1<Object[]>() {
3341  
3342  
      public void get(Object[] o) {
3343  
        try {
3344  
          callF(onMessage, first(o), second(o));
3345  
        } catch (Exception __e) {
3346  
          throw rethrow(__e);
3347  
        }
3348  
      }
3349  
3350  
      public String toString() {
3351  
        return "callF(onMessage, first(o), second(o));";
3352  
      }
3353  
    });
3354  
  }
3355  
3356  
  static public AutoCloseable vmBus_onMessage(String msg, Runnable onMessage) {
3357  
    return vmBus_onMessage(msg, runnableToVF1(onMessage));
3358  
  }
3359  
3360  
  static public String getString(Map map, Object key) {
3361  
    return map == null ? null : (String) map.get(key);
3362  
  }
3363  
3364  
  static public String getString(List l, int idx) {
3365  
    return (String) get(l, idx);
3366  
  }
3367  
3368  
  static public String getString(Object o, Object key) {
3369  
    if (o instanceof Map)
3370  
      return getString((Map) o, key);
3371  
    if (key instanceof String)
3372  
      return (String) getOpt(o, (String) key);
3373  
    throw fail("Not a string key: " + getClassName(key));
3374  
  }
3375  
3376  
  static public String getString(String key, Object o) {
3377  
    return getString(o, (Object) key);
3378  
  }
3379  
3380  
  static public boolean swic(String a, String b) {
3381  
    return startsWithIgnoreCase(a, b);
3382  
  }
3383  
3384  
  static public boolean swic(String a, String b, Matches m) {
3385  
    if (!swic(a, b))
3386  
      return false;
3387  
    m.m = new String[] { substring(a, l(b)) };
3388  
    return true;
3389  
  }
3390  
3391  
  static public boolean sameSnippetID(String a, String b) {
3392  
    if (!isSnippetID(a) || !isSnippetID(b))
3393  
      return false;
3394  
    return parseSnippetID(a) == parseSnippetID(b);
3395  
  }
3396  
3397  
  static public String programID() {
3398  
    return getProgramID();
3399  
  }
3400  
3401  
  static public String programID(Object o) {
3402  
    return getProgramID(o);
3403  
  }
3404  
3405  
  static public String firstIntAsString(String s) {
3406  
    return jextract("<int>", s);
3407  
  }
3408  
3409  
  static public long psI(String snippetID) {
3410  
    return parseSnippetID(snippetID);
3411  
  }
3412  
3413  
  static public void ping_v3_setPingSourceMaker(IF0<PingSource> pingMaker) {
3414  
    vm_generalMap_set("ping_v3_pingSourceMaker", pingMaker);
3415  
  }
3416  
3417  
  static public int findIntArg(String name, String[] args, int defaultValue) {
3418  
    int i = indexOfIC(args, name);
3419  
    return i >= 0 && i + 1 < l(args) ? parseInt(args[i + 1]) : defaultValue;
3420  
  }
3421  
3422  
  static public int cores() {
3423  
    return numberOfCores();
3424  
  }
3425  
3426  
  static public boolean ping() {
3427  
    return ping(pingSource());
3428  
  }
3429  
3430  
  static public boolean ping(PingSource source) {
3431  
    ping_v3(source);
3432  
    return true;
3433  
  }
3434  
3435  
  static public boolean ping_impl(boolean okInCleanUp) {
3436  
    return ping();
3437  
  }
3438  
3439  
  static volatile public boolean ping_pauseAll = false;
3440  
3441  
  static public int max(int a, int b) {
3442  
    return Math.max(a, b);
3443  
  }
3444  
3445  
  static public int max(int a, int b, int c) {
3446  
    return max(max(a, b), c);
3447  
  }
3448  
3449  
  static public long max(int a, long b) {
3450  
    return Math.max((long) a, b);
3451  
  }
3452  
3453  
  static public long max(long a, long b) {
3454  
    return Math.max(a, b);
3455  
  }
3456  
3457  
  static public double max(int a, double b) {
3458  
    return Math.max((double) a, b);
3459  
  }
3460  
3461  
  static public float max(float a, float b) {
3462  
    return Math.max(a, b);
3463  
  }
3464  
3465  
  static public double max(double a, double b) {
3466  
    return Math.max(a, b);
3467  
  }
3468  
3469  
  static public int max(Collection<Integer> c) {
3470  
    int x = Integer.MIN_VALUE;
3471  
    for (int i : c) x = max(x, i);
3472  
    return x;
3473  
  }
3474  
3475  
  static public double max(double[] c) {
3476  
    if (c.length == 0)
3477  
      return Double.MIN_VALUE;
3478  
    double x = c[0];
3479  
    for (int i = 1; i < c.length; i++) x = Math.max(x, c[i]);
3480  
    return x;
3481  
  }
3482  
3483  
  static public float max(float[] c) {
3484  
    if (c.length == 0)
3485  
      return Float.MAX_VALUE;
3486  
    float x = c[0];
3487  
    for (int i = 1; i < c.length; i++) x = Math.max(x, c[i]);
3488  
    return x;
3489  
  }
3490  
3491  
  static public byte max(byte[] c) {
3492  
    byte x = -128;
3493  
    for (byte d : c) if (d > x)
3494  
      x = d;
3495  
    return x;
3496  
  }
3497  
3498  
  static public short max(short[] c) {
3499  
    short x = -0x8000;
3500  
    for (short d : c) if (d > x)
3501  
      x = d;
3502  
    return x;
3503  
  }
3504  
3505  
  static public int max(int[] c) {
3506  
    int x = Integer.MIN_VALUE;
3507  
    for (int d : c) if (d > x)
3508  
      x = d;
3509  
    return x;
3510  
  }
3511  
3512  
  static public <A extends Comparable<A>> A max(A a, A b) {
3513  
    return cmp(a, b) >= 0 ? a : b;
3514  
  }
3515  
3516  
  static public int screenNrOfWindow(Window w) {
3517  
    if (w == null)
3518  
      return -1;
3519  
    Rect bounds = boundsAsRect(w);
3520  
    return indexOfMax(allScreenBounds(), screen -> area(intersectRects(bounds, screen)));
3521  
  }
3522  
3523  
  static public boolean cic(Collection<String> l, String s) {
3524  
    return containsIgnoreCase(l, s);
3525  
  }
3526  
3527  
  static public boolean cic(String[] l, String s) {
3528  
    return containsIgnoreCase(l, s);
3529  
  }
3530  
3531  
  static public boolean cic(String s, char c) {
3532  
    return containsIgnoreCase(s, c);
3533  
  }
3534  
3535  
  static public boolean cic(String a, String b) {
3536  
    return containsIgnoreCase(a, b);
3537  
  }
3538  
3539  
  static public File programDir_mine;
3540  
3541  
  static public File programDir() {
3542  
    return programDir(getProgramID());
3543  
  }
3544  
3545  
  static public File programDir(String snippetID) {
3546  
    boolean me = sameSnippetID(snippetID, programID());
3547  
    if (programDir_mine != null && me)
3548  
      return programDir_mine;
3549  
    File dir = new File(javaxDataDir(), formatSnippetIDOpt(snippetID));
3550  
    if (me) {
3551  
      String c = caseID();
3552  
      if (nempty(c))
3553  
        dir = newFile(dir, c);
3554  
    }
3555  
    return dir;
3556  
  }
3557  
3558  
  static public File programDir(String snippetID, String subPath) {
3559  
    return new File(programDir(snippetID), subPath);
3560  
  }
3561  
3562  
  static public void clearConceptsOf(String progID) {
3563  
    getProgramFile(progID, "concepts.structure").delete();
3564  
    getProgramFile(progID, "concepts.structure.gz").delete();
3565  
    getProgramFile(progID, "idCounter.structure").delete();
3566  
  }
3567  
3568  
  static public List syncMap(Object f, Map map) {
3569  
    return syncMap(map, f);
3570  
  }
3571  
3572  
  static public List syncMap(Map map, Object f) {
3573  
    return map(cloneLinkedHashMap(map), f);
3574  
  }
3575  
3576  
  static public <A, B> Map<A, B> syncMap() {
3577  
    return synchroHashMap();
3578  
  }
3579  
3580  
  static public <A, B> Map<A, B> syncMap(Map map) {
3581  
    return synchronizedMap(map);
3582  
  }
3583  
3584  
  static public Class __javax;
3585  
3586  
  static public Class getJavaX() {
3587  
    try {
3588  
      return __javax;
3589  
    } catch (Exception __e) {
3590  
      throw rethrow(__e);
3591  
    }
3592  
  }
3593  
3594  
  static public void __setJavaX(Class j) {
3595  
    __javax = j;
3596  
    _onJavaXSet();
3597  
  }
3598  
3599  
  static public boolean startsWith(String a, String b) {
3600  
    return a != null && a.startsWith(unnull(b));
3601  
  }
3602  
3603  
  static public boolean startsWith(String a, char c) {
3604  
    return nemptyString(a) && a.charAt(0) == c;
3605  
  }
3606  
3607  
  static public boolean startsWith(String a, String b, Matches m) {
3608  
    if (!startsWith(a, b))
3609  
      return false;
3610  
    if (m != null)
3611  
      m.m = new String[] { substring(a, strL(b)) };
3612  
    return true;
3613  
  }
3614  
3615  
  static public boolean startsWith(List a, List b) {
3616  
    if (a == null || listL(b) > listL(a))
3617  
      return false;
3618  
    for (int i = 0; i < listL(b); i++) if (neq(a.get(i), b.get(i)))
3619  
      return false;
3620  
    return true;
3621  
  }
3622  
3623  
  static public String substring(String s, int x) {
3624  
    return substring(s, x, strL(s));
3625  
  }
3626  
3627  
  static public String substring(String s, int x, int y) {
3628  
    if (s == null)
3629  
      return null;
3630  
    if (x < 0)
3631  
      x = 0;
3632  
    int n = s.length();
3633  
    if (y < x)
3634  
      y = x;
3635  
    if (y > n)
3636  
      y = n;
3637  
    if (x >= y)
3638  
      return "";
3639  
    return s.substring(x, y);
3640  
  }
3641  
3642  
  static public String substring(String s, IntRange r) {
3643  
    return r == null ? null : substring(s, r.start, r.end);
3644  
  }
3645  
3646  
  static public String substring(String s, CharSequence l) {
3647  
    return substring(s, lCharSequence(l));
3648  
  }
3649  
3650  
  static public void dm_watchFields(Collection<String> fields, Runnable onChange) {
3651  
    for (String field : unnullForIteration(fields)) dm_watchField(field, onChange);
3652  
  }
3653  
3654  
  static public <A extends IMeta> A setMetaSrcUnlessSame(Object b, A a, Object src) {
3655  
    if (a != b)
3656  
      setMeta(a, "src", src);
3657  
    return a;
3658  
  }
3659  
3660  
  static public BWImage posterizeBWImage(int brightnessLevels, BWImage img) {
3661  
    if (brightnessLevels >= 256 || img == null)
3662  
      return img;
3663  
    byte[] pixels = img.getBytes();
3664  
    int w = img.getWidth(), h = img.getHeight(), n = pixels.length;
3665  
    byte[] pixels2 = new byte[n];
3666  
    double factor1 = doubleRatio(brightnessLevels, 256);
3667  
    double factor2 = doubleRatio(255, brightnessLevels - 1);
3668  
    for (int i = 0; i < n; i++) pixels2[i] = (byte) iround(ifloor(ubyteToInt(pixels[i]) * factor1) * factor2);
3669  
    return new BWImage(w, h, pixels2);
3670  
  }
3671  
3672  
  static public BWImage scaledBWImageFromBWIntegralImage(int w, BWIntegralImage img) {
3673  
    return scaledBWImageFromBWIntegralImage(img, w);
3674  
  }
3675  
3676  
  static public BWImage scaledBWImageFromBWIntegralImage(BWIntegralImage img, int w) {
3677  
    return scaledBWImageFromBWIntegralImage(img, w, heightForWidth(img, w));
3678  
  }
3679  
3680  
  static public BWImage scaledBWImageFromBWIntegralImage(BWIntegralImage img, int w, int h) {
3681  
    byte[] pixels = scaledGrayBytesFromBWIntegralImage(img, w, h);
3682  
    return new BWImage(w, h, pixels);
3683  
  }
3684  
3685  
  static public BWImage scaledBWImageFromBWIntegralImage(int w, IBWIntegralImage img) {
3686  
    return scaledBWImageFromBWIntegralImage(img, w);
3687  
  }
3688  
3689  
  static public BWImage scaledBWImageFromBWIntegralImage(IBWIntegralImage img, int w) {
3690  
    return scaledBWImageFromBWIntegralImage(img, w, heightForWidth(img, w));
3691  
  }
3692  
3693  
  static public BWImage scaledBWImageFromBWIntegralImage(IBWIntegralImage img, int w, int h) {
3694  
    byte[] pixels = scaledGrayBytesFromBWIntegralImage(img, w, h);
3695  
    return new BWImage(w, h, pixels);
3696  
  }
3697  
3698  
  static public <A extends IMeta> A setMetaSrc(A a, Object src) {
3699  
    setMeta(a, "src", src);
3700  
    return a;
3701  
  }
3702  
3703  
  static public double toDouble(Object o) {
3704  
    if (o instanceof Number)
3705  
      return ((Number) o).doubleValue();
3706  
    if (o instanceof BigInteger)
3707  
      return ((BigInteger) o).doubleValue();
3708  
    if (o instanceof String)
3709  
      return parseDouble((String) o);
3710  
    if (o == null)
3711  
      return 0.0;
3712  
    throw fail(o);
3713  
  }
3714  
3715  
  static public double msToSeconds(long ms) {
3716  
    return toSeconds(ms);
3717  
  }
3718  
3719  
  static public Point mouseLocation() {
3720  
    return getMouseLocation();
3721  
  }
3722  
3723  
  static public ImageSurface imageSurface(BufferedImage img) {
3724  
    return swingNu(ImageSurface.class, img);
3725  
  }
3726  
3727  
  static public ImageSurface imageSurface(MakesBufferedImage img) {
3728  
    return swingNu(ImageSurface.class, img);
3729  
  }
3730  
3731  
  static public ImageSurface imageSurface() {
3732  
    return swingNu(ImageSurface.class);
3733  
  }
3734  
3735  
  static public void imageSurface_pixelated(ImageSurface imageSurface) {
3736  
    if (imageSurface == null)
3737  
      return;
3738  
    imageSurface.setDoubleBuffered(true);
3739  
    imageSurface.noAlpha = true;
3740  
    imageSurface.interpolationMode = RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR;
3741  
    repaint(imageSurface);
3742  
  }
3743  
3744  
  static public void imageSurface_pixelated(ImageSurface imageSurface, boolean pixelated) {
3745  
    if (pixelated)
3746  
      imageSurface_pixelated(imageSurface);
3747  
    else
3748  
      imageSurface_unpixelated(imageSurface);
3749  
  }
3750  
3751  
  static public BufferedImage toBufferedImage(Object o) {
3752  
    return toBufferedImageOpt(o);
3753  
  }
3754  
3755  
  static public void swingEvery(JComponent component, long delay, Object r) {
3756  
    installTimer(component, delay, r);
3757  
  }
3758  
3759  
  static public void swingEvery(JComponent component, long delay, long firstDelay, Object r) {
3760  
    installTimer(component, r, delay, firstDelay);
3761  
  }
3762  
3763  
  static public void swingEvery(RootPaneContainer frame, long delay, Object r) {
3764  
    installTimer(frame, delay, r);
3765  
  }
3766  
3767  
  static public void swingEvery(RootPaneContainer frame, long delay, long firstDelay, Object r) {
3768  
    installTimer(frame, delay, firstDelay, r);
3769  
  }
3770  
3771  
  static public <A> A swingNu(final Class<A> c, final Object... args) {
3772  
    return swingConstruct(c, args);
3773  
  }
3774  
3775  
  static public <A extends JComponent> A toolTipFromLiveValue(LiveValue lv, A c) {
3776  
    return bindToolTipToLiveValue(lv, c);
3777  
  }
3778  
3779  
  static public <A> LiveValue<A> dm_transientCalculatedLiveValue(Class type, IF0<A> calc) {
3780  
    return dm_transientCalculatedLiveValue(dm_current_mandatory(), type, calc);
3781  
  }
3782  
3783  
  static public <A> LiveValue<A> dm_transientCalculatedLiveValue(DynModule mod, Class type, IF0<A> calc) {
3784  
    Lock __0 = mod.lock;
3785  
    lock(__0);
3786  
    try {
3787  
      SimpleLiveValue value = new SimpleLiveValue(type, calc.get());
3788  
      mod.onFieldChange(new VF1<String>() {
3789  
3790  
        public void get(String field) {
3791  
          try {
3792  
            value.set(calc.get());
3793  
          } catch (Exception __e) {
3794  
            throw rethrow(__e);
3795  
          }
3796  
        }
3797  
3798  
        public String toString() {
3799  
          return "value.set(calc!)";
3800  
        }
3801  
      });
3802  
      return value;
3803  
    } finally {
3804  
      unlock(__0);
3805  
    }
3806  
  }
3807  
3808  
  static public LiveValue<Object> dm_transientCalculatedLiveValue(IF0<Object> calc) {
3809  
    return dm_transientCalculatedLiveValue(Object.class, calc);
3810  
  }
3811  
3812  
  static public <A extends JLabel> A setHorizontalAlignment(final int pos, final A a) {
3813  
    swingCall(a, "setHorizontalAlignment", pos);
3814  
    return a;
3815  
  }
3816  
3817  
  static public <A extends AbstractButton> A setHorizontalAlignment(final int pos, final A a) {
3818  
    swingCall(a, "setHorizontalAlignment", pos);
3819  
    return a;
3820  
  }
3821  
3822  
  static public <A extends JTextField> A setHorizontalAlignment(final int pos, final A a) {
3823  
    swingCall(a, "setHorizontalAlignment", pos);
3824  
    return a;
3825  
  }
3826  
3827  
  static public JTabbedPane jLeftOrTopTabs(boolean horizontal, Object... x) {
3828  
    return horizontal ? jLeftTabs(x) : jtabs(x);
3829  
  }
3830  
3831  
  static public JTabbedPane jLeftOrTopTabs(boolean horizontal, Collection c) {
3832  
    return horizontal ? jLeftTabs(c) : jtabs(c);
3833  
  }
3834  
3835  
  static public JPanel jRightAlignedButtons(Object... params) {
3836  
    List<JComponent> l = new ArrayList();
3837  
    for (int i = 0; i < l(params); i += 2) if (params[i] != null)
3838  
      if (params[i] instanceof JComponent)
3839  
        l.add((JComponent) params[i--]);
3840  
      else
3841  
        l.add(jbutton((String) params[i], params[i + 1]));
3842  
    return jRightAlignedLine(l);
3843  
  }
3844  
3845  
  static public JComponent wrap(Object swingable) {
3846  
    return _recordNewSwingComponent(wrap_2(swingable));
3847  
  }
3848  
3849  
  static public JComponent wrap_2(Object swingable) {
3850  
    if (swingable == null)
3851  
      return null;
3852  
    JComponent c;
3853  
    if (swingable instanceof Component)
3854  
      c = componentToJComponent((Component) swingable);
3855  
    else if (swingable instanceof Swingable)
3856  
      c = componentToJComponent(((Swingable) swingable).visualize());
3857  
    else
3858  
      c = componentToJComponent((Component) callOpt(swingable, "swing"));
3859  
    if (c instanceof JTable || c instanceof JList || c instanceof JTextArea || c instanceof JEditorPane || c instanceof JTextPane || c instanceof JTree)
3860  
      return jscroll(c);
3861  
    return c == null ? jlabel(str(swingable)) : c;
3862  
  }
3863  
3864  
  static public JPanel marginPanel() {
3865  
    return jtransparent(borderLayoutPanel());
3866  
  }
3867  
3868  
  static public <A extends JComponent> A setBorder(Border border, A c) {
3869  
    if (c != null) {
3870  
      swing(() -> {
3871  
        c.setBorder(border);
3872  
      });
3873  
    }
3874  
    return c;
3875  
  }
3876  
3877  
  static public JScrollPane withoutViewportBorder(JScrollPane sp) {
3878  
    if (sp != null) {
3879  
      swing(() -> {
3880  
        sp.setViewportBorder(null);
3881  
      });
3882  
    }
3883  
    return sp;
3884  
  }
3885  
3886  
  static public JPanel vstack2(final Object... parts) {
3887  
    return swing(new F0<JPanel>() {
3888  
3889  
      public JPanel get() {
3890  
        try {
3891  
          JPanel panel = new JPanel(new GridBagLayout());
3892  
          GridBagConstraints gbc = new GridBagConstraints();
3893  
          gbc.weightx = 1;
3894  
          gbc.fill = GridBagConstraints.HORIZONTAL;
3895  
          gbc.gridwidth = GridBagConstraints.REMAINDER;
3896  
          smartAddWithLayout(panel, gbc, parts);
3897  
          gbc.weighty = 1;
3898  
          panel.add(jrigid(), gbc);
3899  
          return panel;
3900  
        } catch (Exception __e) {
3901  
          throw rethrow(__e);
3902  
        }
3903  
      }
3904  
3905  
      public String toString() {
3906  
        return "JPanel panel = new JPanel(new GridBagLayout);\r\n    new GridBagConstraints gbc...";
3907  
      }
3908  
    });
3909  
  }
3910  
3911  
  static public JPanel smartAddWithLayout(JPanel panel, Object layout, List parts) {
3912  
    for (Object o : parts) panel.add(wrapForSmartAdd(o), layout);
3913  
    return panel;
3914  
  }
3915  
3916  
  static public JPanel smartAddWithLayout(JPanel panel, Object layout, Object... parts) {
3917  
    return smartAddWithLayout(panel, layout, asList(flattenArray2(parts)));
3918  
  }
3919  
3920  
  static public Component jrigid() {
3921  
    return javax.swing.Box.createRigidArea(new Dimension(0, 0));
3922  
  }
3923  
3924  
  static public JSpinner liveValueSpinner(SimpleLiveValue<Integer> lv, int min, int max) {
3925  
    JSpinner spinner = jSpinner(lv.get(), min, max);
3926  
    return bindLiveValueToSpinner(lv, spinner);
3927  
  }
3928  
3929  
  static public JSpinner bindLiveValueToSpinner(SimpleLiveValue<Integer> lv, JSpinner spinner) {
3930  
    onChange(spinner, new Runnable() {
3931  
3932  
      public void run() {
3933  
        try {
3934  
          lv.set(intFromSpinner(spinner));
3935  
        } catch (Exception __e) {
3936  
          throw rethrow(__e);
3937  
        }
3938  
      }
3939  
3940  
      public String toString() {
3941  
        return "lv.set(intFromSpinner(spinner))";
3942  
      }
3943  
    });
3944  
    lv.onChange(new Runnable() {
3945  
3946  
      public void run() {
3947  
        try {
3948  
          setSpinnerValue(spinner, lv.get());
3949  
        } catch (Exception __e) {
3950  
          throw rethrow(__e);
3951  
        }
3952  
      }
3953  
3954  
      public String toString() {
3955  
        return "setSpinnerValue(spinner, lv!)";
3956  
      }
3957  
    });
3958  
    return spinner;
3959  
  }
3960  
3961  
  static public <A> JSpinner jPowersOfTwoSpinner(int max, int defaultValue) {
3962  
    return rightAlignSpinner(jListSpinner(powersOfTwoUpTo(max), defaultValue));
3963  
  }
3964  
3965  
  static public List<JButton> allButtons(Component c) {
3966  
    return childrenOfType(c, JButton.class);
3967  
  }
3968  
3969  
  static public <A extends AbstractButton> A setHorizontalMargin(final int margin, final A a) {
3970  
    {
3971  
      swing(() -> {
3972  
        Insets i = a.getMargin();
3973  
        a.setMargin(new Insets(i.top, margin, i.bottom, margin));
3974  
      });
3975  
    }
3976  
    return a;
3977  
  }
3978  
3979  
  static public <A extends AbstractButton> A setHorizontalMargin(A a, int margin) {
3980  
    return setHorizontalMargin(margin, a);
3981  
  }
3982  
3983  
  static public String formatWithThousands(long l) {
3984  
    return formatWithThousandsSeparator(l);
3985  
  }
3986  
3987  
  static public boolean empty(Collection c) {
3988  
    return c == null || c.isEmpty();
3989  
  }
3990  
3991  
  static public boolean empty(Iterable c) {
3992  
    return c == null || !c.iterator().hasNext();
3993  
  }
3994  
3995  
  static public boolean empty(CharSequence s) {
3996  
    return s == null || s.length() == 0;
3997  
  }
3998  
3999  
  static public boolean empty(Map map) {
4000  
    return map == null || map.isEmpty();
4001  
  }
4002  
4003  
  static public boolean empty(Object[] o) {
4004  
    return o == null || o.length == 0;
4005  
  }
4006  
4007  
  static public boolean empty(BitSet bs) {
4008  
    return bs == null || bs.isEmpty();
4009  
  }
4010  
4011  
  static public boolean empty(Object o) {
4012  
    if (o instanceof Collection)
4013  
      return empty((Collection) o);
4014  
    if (o instanceof String)
4015  
      return empty((String) o);
4016  
    if (o instanceof Map)
4017  
      return empty((Map) o);
4018  
    if (o instanceof Object[])
4019  
      return empty((Object[]) o);
4020  
    if (o instanceof byte[])
4021  
      return empty((byte[]) o);
4022  
    if (o == null)
4023  
      return true;
4024  
    throw fail("unknown type for 'empty': " + getType(o));
4025  
  }
4026  
4027  
  static public boolean empty(Iterator i) {
4028  
    return i == null || !i.hasNext();
4029  
  }
4030  
4031  
  static public boolean empty(double[] a) {
4032  
    return a == null || a.length == 0;
4033  
  }
4034  
4035  
  static public boolean empty(float[] a) {
4036  
    return a == null || a.length == 0;
4037  
  }
4038  
4039  
  static public boolean empty(int[] a) {
4040  
    return a == null || a.length == 0;
4041  
  }
4042  
4043  
  static public boolean empty(long[] a) {
4044  
    return a == null || a.length == 0;
4045  
  }
4046  
4047  
  static public boolean empty(byte[] a) {
4048  
    return a == null || a.length == 0;
4049  
  }
4050  
4051  
  static public boolean empty(short[] a) {
4052  
    return a == null || a.length == 0;
4053  
  }
4054  
4055  
  static public boolean empty(MultiSet ms) {
4056  
    return ms == null || ms.isEmpty();
4057  
  }
4058  
4059  
  static public boolean empty(MultiMap mm) {
4060  
    return mm == null || mm.isEmpty();
4061  
  }
4062  
4063  
  static public boolean empty(File f) {
4064  
    return getFileSize(f) == 0;
4065  
  }
4066  
4067  
  static public boolean empty(IntRange r) {
4068  
    return r == null || r.empty();
4069  
  }
4070  
4071  
  static public boolean empty(DoubleRange r) {
4072  
    return r == null || r.isEmpty();
4073  
  }
4074  
4075  
  static public boolean empty(IntBuffer b) {
4076  
    return b == null || b.isEmpty();
4077  
  }
4078  
4079  
  static public boolean empty(Rect r) {
4080  
    return !(r != null && r.w != 0 && r.h != 0);
4081  
  }
4082  
4083  
  static public String str(Object o) {
4084  
    return o == null ? "null" : o.toString();
4085  
  }
4086  
4087  
  static public String str(char[] c) {
4088  
    return new String(c);
4089  
  }
4090  
4091  
  static public double fraction(double d) {
4092  
    return d % 1;
4093  
  }
4094  
4095  
  static public String n_fancy2(long l, String singular, String plural) {
4096  
    return formatWithThousandsSeparator(l) + " " + trim(l == 1 ? singular : plural);
4097  
  }
4098  
4099  
  static public String n_fancy2(Collection l, String singular, String plural) {
4100  
    return n_fancy2(l(l), singular, plural);
4101  
  }
4102  
4103  
  static public String n_fancy2(Map m, String singular, String plural) {
4104  
    return n_fancy2(l(m), singular, plural);
4105  
  }
4106  
4107  
  static public String n_fancy2(Object[] a, String singular, String plural) {
4108  
    return n_fancy2(l(a), singular, plural);
4109  
  }
4110  
4111  
  static public String n_fancy2(MultiSet ms, String singular, String plural) {
4112  
    return n_fancy2(l(ms), singular, plural);
4113  
  }
4114  
4115  
  static public Pair<JTabbedPane, Integer> enclosingTab(Component _c) {
4116  
    return swing(() -> {
4117  
      Component c = _c;
4118  
      while (c != null) {
4119  
        Container p = c.getParent();
4120  
        if (p instanceof JTabbedPane)
4121  
          return pair(((JTabbedPane) p), ((JTabbedPane) p).indexOfComponent(c));
4122  
        c = c.getParent();
4123  
      }
4124  
      return null;
4125  
    });
4126  
  }
4127  
4128  
  static public void setTabTitle(JTabbedPane tabs, int idx, String title) {
4129  
    if (tabs != null && idx >= 0) {
4130  
      swing(() -> {
4131  
        if (idx < tabs.getTabCount())
4132  
          tabs.setTitleAt(idx, title);
4133  
      });
4134  
    }
4135  
  }
4136  
4137  
  static public String fromLines(Iterable lines) {
4138  
    StringBuilder buf = new StringBuilder();
4139  
    if (lines != null)
4140  
      for (Object line : lines) buf.append(str(line)).append('\n');
4141  
    return buf.toString();
4142  
  }
4143  
4144  
  static public String fromLines(String... lines) {
4145  
    return fromLines(asList(lines));
4146  
  }
4147  
4148  
  static public <A> ArrayList<A> asList(A[] a) {
4149  
    return a == null ? new ArrayList<A>() : new ArrayList<A>(Arrays.asList(a));
4150  
  }
4151  
4152  
  static public ArrayList<Integer> asList(int[] a) {
4153  
    if (a == null)
4154  
      return null;
4155  
    ArrayList<Integer> l = emptyList(a.length);
4156  
    for (int i : a) l.add(i);
4157  
    return l;
4158  
  }
4159  
4160  
  static public ArrayList<Long> asList(long[] a) {
4161  
    if (a == null)
4162  
      return null;
4163  
    ArrayList<Long> l = emptyList(a.length);
4164  
    for (long i : a) l.add(i);
4165  
    return l;
4166  
  }
4167  
4168  
  static public ArrayList<Float> asList(float[] a) {
4169  
    if (a == null)
4170  
      return null;
4171  
    ArrayList<Float> l = emptyList(a.length);
4172  
    for (float i : a) l.add(i);
4173  
    return l;
4174  
  }
4175  
4176  
  static public ArrayList<Double> asList(double[] a) {
4177  
    if (a == null)
4178  
      return null;
4179  
    ArrayList<Double> l = emptyList(a.length);
4180  
    for (double i : a) l.add(i);
4181  
    return l;
4182  
  }
4183  
4184  
  static public ArrayList<Short> asList(short[] a) {
4185  
    if (a == null)
4186  
      return null;
4187  
    ArrayList<Short> l = emptyList(a.length);
4188  
    for (short i : a) l.add(i);
4189  
    return l;
4190  
  }
4191  
4192  
  static public <A> ArrayList<A> asList(Iterator<A> it) {
4193  
    ArrayList l = new ArrayList();
4194  
    if (it != null)
4195  
      while (it.hasNext()) l.add(it.next());
4196  
    return l;
4197  
  }
4198  
4199  
  static public <A> ArrayList<A> asList(IterableIterator<A> s) {
4200  
    return asList((Iterator) s);
4201  
  }
4202  
4203  
  static public <A> ArrayList<A> asList(Iterable<A> s) {
4204  
    if (s instanceof ArrayList)
4205  
      return (ArrayList) s;
4206  
    ArrayList l = new ArrayList();
4207  
    if (s != null)
4208  
      for (A a : s) l.add(a);
4209  
    return l;
4210  
  }
4211  
4212  
  static public <A> ArrayList<A> asList(Producer<A> p) {
4213  
    ArrayList l = new ArrayList();
4214  
    A a;
4215  
    if (p != null)
4216  
      while ((a = p.next()) != null) l.add(a);
4217  
    return l;
4218  
  }
4219  
4220  
  static public <A> ArrayList<A> asList(Enumeration<A> e) {
4221  
    ArrayList l = new ArrayList();
4222  
    if (e != null)
4223  
      while (e.hasMoreElements()) l.add(e.nextElement());
4224  
    return l;
4225  
  }
4226  
4227  
  static public <A> List<A> asList(Pair<A, A> p) {
4228  
    return p == null ? null : ll(p.a, p.b);
4229  
  }
4230  
4231  
  static public IterableIterator<String> toLines(File f) {
4232  
    return linesFromFile(f);
4233  
  }
4234  
4235  
  static public List<String> toLines(String s) {
4236  
    List<String> lines = new ArrayList<String>();
4237  
    if (s == null)
4238  
      return lines;
4239  
    int start = 0;
4240  
    while (true) {
4241  
      int i = toLines_nextLineBreak(s, start);
4242  
      if (i < 0) {
4243  
        if (s.length() > start)
4244  
          lines.add(s.substring(start));
4245  
        break;
4246  
      }
4247  
      lines.add(s.substring(start, i));
4248  
      if (s.charAt(i) == '\r' && i + 1 < s.length() && s.charAt(i + 1) == '\n')
4249  
        i += 2;
4250  
      else
4251  
        ++i;
4252  
      start = i;
4253  
    }
4254  
    return lines;
4255  
  }
4256  
4257  
  static public int toLines_nextLineBreak(String s, int start) {
4258  
    int n = s.length();
4259  
    for (int i = start; i < n; i++) {
4260  
      char c = s.charAt(i);
4261  
      if (c == '\r' || c == '\n')
4262  
        return i;
4263  
    }
4264  
    return -1;
4265  
  }
4266  
4267  
  static public List<String> mapToLines(Map map) {
4268  
    List<String> l = new ArrayList();
4269  
    for (Object key : keys(map)) l.add(str(key) + " = " + str(map.get(key)));
4270  
    return l;
4271  
  }
4272  
4273  
  static public String mapToLines(Map map, Object f) {
4274  
    return lines(map(map, f));
4275  
  }
4276  
4277  
  static public String mapToLines(Object f, Map map) {
4278  
    return lines(map(map, f));
4279  
  }
4280  
4281  
  static public String mapToLines(Object f, Iterable l) {
4282  
    return lines(map(f, l));
4283  
  }
4284  
4285  
  static public <A> String mapToLines(Iterable<A> l, IF1<A, String> f) {
4286  
    return mapToLines((Object) f, l);
4287  
  }
4288  
4289  
  static public <A> String mapToLines(IF1<A, String> f, Iterable<A> l) {
4290  
    return mapToLines((Object) f, l);
4291  
  }
4292  
4293  
  static public <A, B> String mapToLines(Map<A, B> map, IF2<A, B, String> f) {
4294  
    return lines(map(map, f));
4295  
  }
4296  
4297  
  static public <A> String mapToLines(IF1<A, String> f, A data1, A... moreData) {
4298  
    return lines(map(f, data1, moreData));
4299  
  }
4300  
4301  
  static public List<String> sortedIgnoreCase(Collection<String> c) {
4302  
    List<String> l = cloneList(c);
4303  
    Collections.sort(l, caseInsensitiveComparator());
4304  
    return l;
4305  
  }
4306  
4307  
  static public ArrayList emptyList() {
4308  
    return new ArrayList();
4309  
  }
4310  
4311  
  static public ArrayList emptyList(int capacity) {
4312  
    return new ArrayList(max(0, capacity));
4313  
  }
4314  
4315  
  static public ArrayList emptyList(Iterable l) {
4316  
    return l instanceof Collection ? emptyList(((Collection) l).size()) : emptyList();
4317  
  }
4318  
4319  
  static public ArrayList emptyList(Object[] l) {
4320  
    return emptyList(l(l));
4321  
  }
4322  
4323  
  static public <A> ArrayList<A> emptyList(Class<A> c) {
4324  
    return new ArrayList();
4325  
  }
4326  
4327  
  static public double nanosToMicroseconds(double ns) {
4328  
    return ns / 1000;
4329  
  }
4330  
4331  
  static public boolean isComponentShowing(final Component c) {
4332  
    return c != null && swing(new F0<Boolean>() {
4333  
4334  
      public Boolean get() {
4335  
        try {
4336  
          return c.isShowing();
4337  
        } catch (Exception __e) {
4338  
          throw rethrow(__e);
4339  
        }
4340  
      }
4341  
4342  
      public String toString() {
4343  
        return "ret c.isShowing();";
4344  
      }
4345  
    });
4346  
  }
4347  
4348  
  static public BufferedImage newBufferedImage(int w, int h) {
4349  
    return new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
4350  
  }
4351  
4352  
  static public BufferedImage newBufferedImage(int w, int h, RGB rgb) {
4353  
    return newBufferedImage(w, h, rgb.getColor());
4354  
  }
4355  
4356  
  static public BufferedImage newBufferedImage(int w, int h, Color color) {
4357  
    BufferedImage img = newBufferedImage(w, h);
4358  
    Graphics2D g = img.createGraphics();
4359  
    g.setColor(or(color, Color.white));
4360  
    g.fillRect(0, 0, w, h);
4361  
    return img;
4362  
  }
4363  
4364  
  static public BufferedImage newBufferedImage(Pt p, Color color) {
4365  
    return newBufferedImage(p.x, p.y, color);
4366  
  }
4367  
4368  
  static public BufferedImage newBufferedImage(int w, int h, int[] pixels) {
4369  
    return intArrayToBufferedImage(pixels, w, h);
4370  
  }
4371  
4372  
  static public <A, B> Map<A, B> synchroIdentityHashMap() {
4373  
    return synchroMap(new IdentityHashMap());
4374  
  }
4375  
4376  
  static public <A, B> void mapPut2(Map<A, B> map, A key, B value) {
4377  
    if (map != null && key != null)
4378  
      if (value != null)
4379  
        map.put(key, value);
4380  
      else
4381  
        map.remove(key);
4382  
  }
4383  
4384  
  static public BWIntegralImage bwIntegralImage(BufferedImage img) {
4385  
    return img == null ? null : new BWIntegralImage(img);
4386  
  }
4387  
4388  
  static public BWIntegralImage bwIntegralImage(BWImage img) {
4389  
    return img == null ? null : new BWIntegralImage(img);
4390  
  }
4391  
4392  
  static public <A> List<A> nonNulls(Iterable<A> l) {
4393  
    return withoutNulls(l);
4394  
  }
4395  
4396  
  static public <A> List<A> nonNulls(A[] l) {
4397  
    return withoutNulls(l);
4398  
  }
4399  
4400  
  static public <A, B> Map<A, B> nonNulls(Map<A, B> map) {
4401  
    return withoutNulls(map);
4402  
  }
4403  
4404  
  static public JComboBox jcombobox(final String... items) {
4405  
    return swing(new F0<JComboBox>() {
4406  
4407  
      public JComboBox get() {
4408  
        try {
4409  
          return new JComboBox(items);
4410  
        } catch (Exception __e) {
4411  
          throw rethrow(__e);
4412  
        }
4413  
      }
4414  
4415  
      public String toString() {
4416  
        return "ret new JComboBox(items);";
4417  
      }
4418  
    });
4419  
  }
4420  
4421  
  static public JComboBox jcombobox(Collection<String> items) {
4422  
    return jcombobox(toStringArray(items));
4423  
  }
4424  
4425  
  static public JComboBox jcombobox(Collection<String> items, String selectedItem) {
4426  
    return selectItem(selectedItem, jcombobox(items));
4427  
  }
4428  
4429  
  static public void selectRow(final JTable table, final int i) {
4430  
    if (table != null) {
4431  
      swing(() -> {
4432  
        if (i >= 0 && i < table.getRowCount()) {
4433  
          table.setRowSelectionInterval(i, i);
4434  
          scrollRowToVisible(table, i);
4435  
        } else
4436  
          table.clearSelection();
4437  
      });
4438  
    }
4439  
  }
4440  
4441  
  static public void selectRow(final JList list, final int i) {
4442  
    if (list != null) {
4443  
      swing(() -> {
4444  
        if (i >= 0 && i < listRowCount(list))
4445  
          list.setSelectedIndex(i);
4446  
        else
4447  
          list.clearSelection();
4448  
      });
4449  
    }
4450  
  }
4451  
4452  
  static public <A> int jlist_indexOf(JList<A> list, A item) {
4453  
    return swing(new F0<Integer>() {
4454  
4455  
      public Integer get() {
4456  
        try {
4457  
          ListModel<A> model = list.getModel();
4458  
          int n = model.getSize();
4459  
          for (int i = 0; i < n; i++) if (eq(model.getElementAt(i), item))
4460  
            return i;
4461  
          return -1;
4462  
        } catch (Exception __e) {
4463  
          throw rethrow(__e);
4464  
        }
4465  
      }
4466  
4467  
      public String toString() {
4468  
        return "ListModel<A> model = list.getModel();\r\n    int n = model.getSize();\r\n    for ...";
4469  
      }
4470  
    });
4471  
  }
4472  
4473  
  static public void swingAndWait(Runnable r) {
4474  
    try {
4475  
      if (isAWTThread())
4476  
        r.run();
4477  
      else
4478  
        EventQueue.invokeAndWait(addThreadInfoToRunnable(r));
4479  
    } catch (Exception __e) {
4480  
      throw rethrow(__e);
4481  
    }
4482  
  }
4483  
4484  
  static public Object swingAndWait(final Object f) {
4485  
    if (isAWTThread())
4486  
      return callF(f);
4487  
    else {
4488  
      final Var result = new Var();
4489  
      swingAndWait(new Runnable() {
4490  
4491  
        public void run() {
4492  
          try {
4493  
            result.set(callF(f));
4494  
          } catch (Exception __e) {
4495  
            throw rethrow(__e);
4496  
          }
4497  
        }
4498  
4499  
        public String toString() {
4500  
          return "result.set(callF(f));";
4501  
        }
4502  
      });
4503  
      return result.get();
4504  
    }
4505  
  }
4506  
4507  
  static public List<Integer> countIteratorToList_inclusive(int b) {
4508  
    return countIteratorToList_inclusive(0, b);
4509  
  }
4510  
4511  
  static public List<Integer> countIteratorToList_inclusive(int a, int b) {
4512  
    return asList(countIterator_inclusive(a, b));
4513  
  }
4514  
4515  
  static public <A> List<A> countIteratorToList_inclusive(int b, IF1<Integer, A> f) {
4516  
    return countIteratorToList_inclusive(0, b, f);
4517  
  }
4518  
4519  
  static public <A> List<A> countIteratorToList_inclusive(int a, int b, IF1<Integer, A> f) {
4520  
    return asList(countIterator_inclusive(a, b, f));
4521  
  }
4522  
4523  
  static public List<Integer> countIteratorToList_inclusive(int a, int b, int step) {
4524  
    return asList(countIterator_inclusive_step(a, b, step));
4525  
  }
4526  
4527  
  static public <A> List<A> countIteratorToList_inclusive(double a, double b, double step, IF1<Double, A> f) {
4528  
    return asList(countIterator_inclusive(a, b, step, f));
4529  
  }
4530  
4531  
  static public <A> List<Double> countIteratorToList_inclusive(double a, double b, double step) {
4532  
    return asList(countIterator_inclusive_step(a, b, step));
4533  
  }
4534  
4535  
  static public <A> List<A> countIteratorToList_inclusive(IF1<Double, A> f, double a, double b, double step) {
4536  
    return asList(countIterator_inclusive_step(a, b, step, f));
4537  
  }
4538  
4539  
  static public <A> List<A> countIteratorToList_inclusive(IF1<Integer, A> f, int a, int b) {
4540  
    return countIteratorToList_inclusive(f, a, b, 1);
4541  
  }
4542  
4543  
  static public <A> List<A> countIteratorToList_inclusive(IF1<Integer, A> f, int a, int b, int step) {
4544  
    return asList(countIterator_inclusive(a, b, step, f));
4545  
  }
4546  
4547  
  static public Object pcallF(Object f, Object... args) {
4548  
    return pcallFunction(f, args);
4549  
  }
4550  
4551  
  static public <A> A pcallF(F0<A> f) {
4552  
    try {
4553  
      return f == null ? null : f.get();
4554  
    } catch (Throwable __e) {
4555  
      return null;
4556  
    }
4557  
  }
4558  
4559  
  static public <A, B> B pcallF(F1<A, B> f, A a) {
4560  
    try {
4561  
      return f == null ? null : f.get(a);
4562  
    } catch (Throwable __e) {
4563  
      return null;
4564  
    }
4565  
  }
4566  
4567  
  static public <A> void pcallF(VF1<A> f, A a) {
4568  
    try {
4569  
      {
4570  
        if (f != null)
4571  
          f.get(a);
4572  
      }
4573  
    } catch (Throwable __e) {
4574  
      printStackTrace(__e);
4575  
    }
4576  
  }
4577  
4578  
  static public Object pcallF(Runnable r) {
4579  
    try {
4580  
      {
4581  
        if (r != null)
4582  
          r.run();
4583  
      }
4584  
      return null;
4585  
    } catch (Throwable __e) {
4586  
      return null;
4587  
    }
4588  
  }
4589  
4590  
  static public <A> A pcallF(IF0<A> f) {
4591  
    try {
4592  
      return f == null ? null : f.get();
4593  
    } catch (Throwable __e) {
4594  
      return null;
4595  
    }
4596  
  }
4597  
4598  
  static public <A, B> B pcallF(IF1<A, B> f, A a) {
4599  
    try {
4600  
      return f == null ? null : f.get(a);
4601  
    } catch (Throwable __e) {
4602  
      return null;
4603  
    }
4604  
  }
4605  
4606  
  static public boolean isMainProgram() {
4607  
    return creator() == null;
4608  
  }
4609  
4610  
  static public void deleteConcepts(Collection conceptsOrIDs) {
4611  
    db_mainConcepts().deleteConcepts(asList(conceptsOrIDs));
4612  
  }
4613  
4614  
  static public <A extends Concept> List<A> deleteConcepts(Class<A> c, Object... params) {
4615  
    return deleteConcepts(db_mainConcepts(), c, params);
4616  
  }
4617  
4618  
  static public <A extends Concept> List<A> deleteConcepts(Concepts cc, Class<A> c, Object... params) {
4619  
    List<A> l = asList(findConceptsWhere(cc, c, params));
4620  
    deleteConcepts(l);
4621  
    return l;
4622  
  }
4623  
4624  
  static public <A extends Concept> void deleteConcepts(Class<A> c, IF1<A, Boolean> pred) {
4625  
    deleteConcepts(db_mainConcepts(), c, pred);
4626  
  }
4627  
4628  
  static public <A extends Concept> void deleteConcepts(Concepts cc, Class<A> c, IF1<A, Boolean> pred) {
4629  
    deleteConcepts(filter(list(cc, c), pred));
4630  
  }
4631  
4632  
  static public List<Concept> deleteConcepts(Concepts cc) {
4633  
    return deleteConcepts(cc, Concept.class);
4634  
  }
4635  
4636  
  static public void deleteConcept(long id) {
4637  
    db_mainConcepts().deleteConcept(id);
4638  
  }
4639  
4640  
  static public void deleteConcept(Concepts concepts, long id) {
4641  
    concepts.deleteConcept(id);
4642  
  }
4643  
4644  
  static public void deleteConcept(Concept c) {
4645  
    if (c != null)
4646  
      c.delete();
4647  
  }
4648  
4649  
  static public void deleteConcept(Concept.Ref ref) {
4650  
    if (ref != null)
4651  
      deleteConcept(ref.get());
4652  
  }
4653  
4654  
  static public <A> ArrayList<A> cloneList(Iterable<A> l) {
4655  
    return l instanceof Collection ? cloneList((Collection) l) : asList(l);
4656  
  }
4657  
4658  
  static public <A> ArrayList<A> cloneList(Collection<A> l) {
4659  
    if (l == null)
4660  
      return new ArrayList();
4661  
    synchronized (collectionMutex(l)) {
4662  
      return new ArrayList<A>(l);
4663  
    }
4664  
  }
4665  
4666  
  static public <A extends JComponent> A onFirstComponentShow(final A component, final Runnable onShow) {
4667  
    {
4668  
      swing(() -> {
4669  
        component.addAncestorListener(new AncestorListener() {
4670  
4671  
          public void ancestorAdded(AncestorEvent event) {
4672  
            component.removeAncestorListener(this);
4673  
            pcallF(onShow);
4674  
          }
4675  
4676  
          public void ancestorRemoved(AncestorEvent event) {
4677  
          }
4678  
4679  
          public void ancestorMoved(AncestorEvent event) {
4680  
          }
4681  
        });
4682  
      });
4683  
    }
4684  
    return component;
4685  
  }
4686  
4687  
  static public boolean confirmOKCancel(final Component owner, final String msg) {
4688  
    return isTrue(swingAndWait(new F0<Object>() {
4689  
4690  
      public Object get() {
4691  
        try {
4692  
          return JOptionPane.showConfirmDialog(owner, msg, "JavaX", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION;
4693  
        } catch (Exception __e) {
4694  
          throw rethrow(__e);
4695  
        }
4696  
      }
4697  
4698  
      public String toString() {
4699  
        return "ret JOptionPane.showConfirmDialog(owner,\r\n      msg, \"JavaX\", JOptionPane.OK_...";
4700  
      }
4701  
    }));
4702  
  }
4703  
4704  
  static public boolean confirmOKCancel(String msg) {
4705  
    return confirmOKCancel(null, msg);
4706  
  }
4707  
4708  
  static volatile public boolean sleep_noSleep = false;
4709  
4710  
  static public void sleep(long ms) {
4711  
    ping();
4712  
    if (ms < 0)
4713  
      return;
4714  
    if (isAWTThread() && ms > 100)
4715  
      throw fail("Should not sleep on AWT thread");
4716  
    try {
4717  
      Thread.sleep(ms);
4718  
    } catch (Exception e) {
4719  
      throw new RuntimeException(e);
4720  
    }
4721  
  }
4722  
4723  
  static public void sleep() {
4724  
    try {
4725  
      if (sleep_noSleep)
4726  
        throw fail("nosleep");
4727  
      print("Sleeping.");
4728  
      sleepQuietly();
4729  
    } catch (Exception __e) {
4730  
      throw rethrow(__e);
4731  
    }
4732  
  }
4733  
4734  
  static public Object callOptWithEnter(Object o, String method, String[] arg) {
4735  
    return callOptWithEnter(o, method, new Object[] { arg });
4736  
  }
4737  
4738  
  static public Object callOptWithEnter(Object o, String method, Object... args) {
4739  
    if (o == null)
4740  
      return null;
4741  
    AutoCloseable __1 = tempEnter(o);
4742  
    try {
4743  
      return callOpt_withVarargs(o, method, args);
4744  
    } finally {
4745  
      _close(__1);
4746  
    }
4747  
  }
4748  
4749  
  static public <A extends Concept> A cDeref(Concept.Ref<A> ref) {
4750  
    return ref == null ? null : ref.get();
4751  
  }
4752  
4753  
  static public JLabel jcenteredLabel(String text) {
4754  
    return setHorizontalAlignment(JLabel.CENTER, jLabel(text));
4755  
  }
4756  
4757  
  static public JLabel jcenteredLabel() {
4758  
    return jcenteredLabel(" ");
4759  
  }
4760  
4761  
  static public boolean nempty(Collection c) {
4762  
    return !empty(c);
4763  
  }
4764  
4765  
  static public boolean nempty(CharSequence s) {
4766  
    return !empty(s);
4767  
  }
4768  
4769  
  static public boolean nempty(Object[] o) {
4770  
    return !empty(o);
4771  
  }
4772  
4773  
  static public boolean nempty(byte[] o) {
4774  
    return !empty(o);
4775  
  }
4776  
4777  
  static public boolean nempty(int[] o) {
4778  
    return !empty(o);
4779  
  }
4780  
4781  
  static public boolean nempty(BitSet bs) {
4782  
    return !empty(bs);
4783  
  }
4784  
4785  
  static public boolean nempty(Map m) {
4786  
    return !empty(m);
4787  
  }
4788  
4789  
  static public boolean nempty(Iterator i) {
4790  
    return i != null && i.hasNext();
4791  
  }
4792  
4793  
  static public boolean nempty(MultiMap mm) {
4794  
    return mm != null && !mm.isEmpty();
4795  
  }
4796  
4797  
  static public boolean nempty(Object o) {
4798  
    return !empty(o);
4799  
  }
4800  
4801  
  static public boolean nempty(IntRange r) {
4802  
    return !empty(r);
4803  
  }
4804  
4805  
  static public boolean nempty(IntBuffer b) {
4806  
    return b != null && !b.isEmpty();
4807  
  }
4808  
4809  
  static public boolean nempty(Rect r) {
4810  
    return r != null && r.w != 0 && r.h != 0;
4811  
  }
4812  
4813  
  static public boolean nempty(MultiSet ms) {
4814  
    return ms != null && !ms.isEmpty();
4815  
  }
4816  
4817  
  static volatile public boolean muricaPassword_pretendNotAuthed = false;
4818  
4819  
  static public String muricaPassword() {
4820  
    if (muricaPassword_pretendNotAuthed)
4821  
      return null;
4822  
    return trim(loadTextFile(muricaPasswordFile()));
4823  
  }
4824  
4825  
  static public List<Component> getSwingChildren(Component c) {
4826  
    if (c instanceof Container)
4827  
      return asList(((Container) c).getComponents());
4828  
    return emptyList();
4829  
  }
4830  
4831  
  static public JLabel jImage(Image img) {
4832  
    return jimage(img);
4833  
  }
4834  
4835  
  static public JLabel jImage(String imageID) {
4836  
    return jimage(imageID);
4837  
  }
4838  
4839  
  static public BufferedImage resizeImageToHeight_bilinear(BufferedImage img, int newH) {
4840  
    return scaleImage_bilinear(doubleRatio(newH, img.getHeight()), img);
4841  
  }
4842  
4843  
  static public BufferedImage loadImage2(String snippetIDOrURL) {
4844  
    return loadBufferedImage(snippetIDOrURL);
4845  
  }
4846  
4847  
  static public BufferedImage loadImage2(File file) {
4848  
    return loadBufferedImage(file);
4849  
  }
4850  
4851  
  static public int imageIcon_cacheSize = 10;
4852  
4853  
  static public boolean imageIcon_verbose = false;
4854  
4855  
  static public Map<String, ImageIcon> imageIcon_cache;
4856  
4857  
  static public Lock imageIcon_lock = lock();
4858  
4859  
  static public ThreadLocal<Boolean> imageIcon_fixGIF = new ThreadLocal();
4860  
4861  
  static public ImageIcon imageIcon(String imageID) {
4862  
    try {
4863  
      if (imageID == null)
4864  
        return null;
4865  
      Lock __0 = imageIcon_lock;
4866  
      lock(__0);
4867  
      try {
4868  
        if (imageIcon_cache == null)
4869  
          imageIcon_cache = new MRUCache(imageIcon_cacheSize);
4870  
        imageID = fsI(imageID);
4871  
        ImageIcon ii = imageIcon_cache.get(imageID);
4872  
        if (ii == null) {
4873  
          if (imageIcon_verbose)
4874  
            print("Loading image icon: " + imageID);
4875  
          File f = loadBinarySnippet(imageID);
4876  
          Boolean b = imageIcon_fixGIF.get();
4877  
          if (!isFalse(b))
4878  
            ii = new ImageIcon(loadBufferedImageFixingGIFs(f));
4879  
          else
4880  
            ii = new ImageIcon(f.toURI().toURL());
4881  
        } else
4882  
          imageIcon_cache.remove(imageID);
4883  
        imageIcon_cache.put(imageID, ii);
4884  
        return ii;
4885  
      } finally {
4886  
        unlock(__0);
4887  
      }
4888  
    } catch (Exception __e) {
4889  
      throw rethrow(__e);
4890  
    }
4891  
  }
4892  
4893  
  static public ImageIcon imageIcon(File f) {
4894  
    try {
4895  
      return new ImageIcon(f.toURI().toURL());
4896  
    } catch (Exception __e) {
4897  
      throw rethrow(__e);
4898  
    }
4899  
  }
4900  
4901  
  static public ImageIcon imageIcon(Image img) {
4902  
    return new ImageIcon(img);
4903  
  }
4904  
4905  
  static public ImageIcon imageIcon(RGBImage img) {
4906  
    return imageIcon(img.getBufferedImage());
4907  
  }
4908  
4909  
  static public JButton setButtonImage(BufferedImage img, JButton btn) {
4910  
    btn.setIcon(imageIcon(img));
4911  
    return btn;
4912  
  }
4913  
4914  
  static public JButton setButtonImage(JButton btn, BufferedImage img) {
4915  
    return setButtonImage(img, btn);
4916  
  }
4917  
4918  
  static public <A extends JComponent> A setToolTip(A c, Object toolTip) {
4919  
    return setToolTipText(c, toolTip);
4920  
  }
4921  
4922  
  static public <A extends JComponent> A setToolTip(Object toolTip, A c) {
4923  
    return setToolTipText(c, toolTip);
4924  
  }
4925  
4926  
  static public void setToolTip(TrayIcon trayIcon, String toolTip) {
4927  
    setTrayIconToolTip(trayIcon, toolTip);
4928  
  }
4929  
4930  
  static public BufferedImage resizeImage(BufferedImage img, int newW, int newH) {
4931  
    return resizeImage(img, newW, newH, Image.SCALE_SMOOTH);
4932  
  }
4933  
4934  
  static public BufferedImage resizeImage(BufferedImage img, int newW, int newH, int scaleType) {
4935  
    if (newW == img.getWidth() && newH == img.getHeight())
4936  
      return img;
4937  
    Image tmp = img.getScaledInstance(newW, newH, scaleType);
4938  
    BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);
4939  
    Graphics2D g2d = dimg.createGraphics();
4940  
    g2d.drawImage(tmp, 0, 0, null);
4941  
    g2d.dispose();
4942  
    return dimg;
4943  
  }
4944  
4945  
  static public BufferedImage resizeImage(BufferedImage img, int newW) {
4946  
    int newH = iround(img.getHeight() * (double) newW / img.getWidth());
4947  
    return resizeImage(img, newW, newH);
4948  
  }
4949  
4950  
  static public BufferedImage resizeImage(int newW, BufferedImage img) {
4951  
    return resizeImage(img, newW);
4952  
  }
4953  
4954  
  static public void disableButtonWhileCalcing2(final Object f) {
4955  
    final JButton button = heldInstance(JButton.class);
4956  
    disableButton(button);
4957  
    {
4958  
      startThread(new Runnable() {
4959  
4960  
        public void run() {
4961  
          try {
4962  
            try {
4963  
              boolean ok = isTrue(callF(f));
4964  
              if (ok)
4965  
                disposePossiblyInternalFrame(button);
4966  
            } finally {
4967  
              enableButton(button);
4968  
            }
4969  
          } catch (Exception __e) {
4970  
            throw rethrow(__e);
4971  
          }
4972  
        }
4973  
4974  
        public String toString() {
4975  
          return "try {\r\n      boolean ok = isTrue(callF(f));\r\n      if (ok) disposePossiblyInt...";
4976  
        }
4977  
      });
4978  
    }
4979  
  }
4980  
4981  
  static public Pair<Boolean, String> transpileOnBestServer(String snippetID, String mode) {
4982  
    try {
4983  
      return haveMuricaPassword() ? transpileOnNewServer(snippetID, mode) : transpileOnServer(snippetID, mode);
4984  
    } catch (Exception __e) {
4985  
      throw rethrow(__e);
4986  
    }
4987  
  }
4988  
4989  
  static public Pair<Boolean, String> transpileOnBestServer(String snippetID) {
4990  
    return transpileOnBestServer(snippetID, "quick");
4991  
  }
4992  
4993  
  static public void callFInNewThread(Object f, Object... args) {
4994  
    callF_thread(f, args);
4995  
  }
4996  
4997  
  static public boolean scrollAllTheWayDown_bruteForce = true;
4998  
4999  
  static public <A extends JComponent> A scrollAllTheWayDown(A c) {
5000  
    if (c != null) {
5001  
      swing(() -> {
5002  
        int h = c.getHeight() - 1;
5003  
        if (scrollAllTheWayDown_bruteForce)
5004  
          h = max(h, 100000);
5005  
        c.scrollRectToVisible(new Rectangle(0, h, 1, 1));
5006  
      });
5007  
    }
5008  
    return c;
5009  
  }
5010  
5011  
  static public void addButtonsToWindow(Component c, Object... buttonParams) {
5012  
    addToWindowWithMargin(c, jcenteredbuttons(buttonParams));
5013  
  }
5014  
5015  
  static public <A> A nu(Class<A> c, Object... values) {
5016  
    A a = nuObject(c);
5017  
    setAll(a, values);
5018  
    return a;
5019  
  }
5020  
5021  
  static public Object[] paramsPlus(Object[] a1, Object... a2) {
5022  
    if (a2 == null)
5023  
      return a1;
5024  
    if (a1 == null)
5025  
      return a2;
5026  
    if (l(a1) == 1 && a1[0] instanceof Map)
5027  
      return new Object[] { mapPlus((Map) a1[0], a2) };
5028  
    assertEvenLength(a1);
5029  
    assertEvenLength(a2);
5030  
    Map map = paramsToOrderedMap(a1);
5031  
    int n = l(a2);
5032  
    for (int i = 0; i < n; i += 2) {
5033  
      Object key = a2[i];
5034  
      if (key != null)
5035  
        map.put(key, a2[i + 1]);
5036  
    }
5037  
    return mapToParams(map);
5038  
  }
5039  
5040  
  static public Object[] paramsPlus(Map a1, Object... a2) {
5041  
    return paramsPlus(new Object[] { a1 }, a2);
5042  
  }
5043  
5044  
  static public Rectangle maximumWindowBounds() {
5045  
    return maxWindowBounds();
5046  
  }
5047  
5048  
  static volatile public boolean licensed_yes = true;
5049  
5050  
  static public boolean licensed() {
5051  
    if (!licensed_yes)
5052  
      return false;
5053  
    ping_okInCleanUp();
5054  
    return true;
5055  
  }
5056  
5057  
  static public void licensed_off() {
5058  
    licensed_yes = false;
5059  
  }
5060  
5061  
  static public String prependColonSpaceIfNempty(String s) {
5062  
    return empty(s) ? "" : ": " + s;
5063  
  }
5064  
5065  
  static public String getStackTrace(Throwable throwable) {
5066  
    lastException(throwable);
5067  
    return getStackTrace_noRecord(throwable);
5068  
  }
5069  
5070  
  static public String getStackTrace_noRecord(Throwable throwable) {
5071  
    StringWriter writer = new StringWriter();
5072  
    throwable.printStackTrace(new PrintWriter(writer));
5073  
    return hideCredentials(writer.toString());
5074  
  }
5075  
5076  
  static public String getStackTrace() {
5077  
    return getStackTrace_noRecord(new Throwable());
5078  
  }
5079  
5080  
  static public String getStackTrace(String msg) {
5081  
    return getStackTrace_noRecord(new Throwable(msg));
5082  
  }
5083  
5084  
  static public <A extends Component> A revalidate(final A c) {
5085  
    if (c == null || !c.isShowing())
5086  
      return c;
5087  
    {
5088  
      swing(() -> {
5089  
        c.revalidate();
5090  
        c.repaint();
5091  
      });
5092  
    }
5093  
    return c;
5094  
  }
5095  
5096  
  static public void revalidate(JFrame f) {
5097  
    revalidate((Component) f);
5098  
  }
5099  
5100  
  static public void revalidate(JInternalFrame f) {
5101  
    revalidate((Component) f);
5102  
  }
5103  
5104  
  static public int getWidth(Component c) {
5105  
    return c == null ? 0 : (int) swingCall(c, "getWidth");
5106  
  }
5107  
5108  
  static public int getHeight(Component c) {
5109  
    return c == null ? 0 : (int) swingCall(c, "getHeight");
5110  
  }
5111  
5112  
  static public void vmBus_send(String msg, Object... args) {
5113  
    Object arg = vmBus_wrapArgs(args);
5114  
    pcallFAll_minimalExceptionHandling(vm_busListeners_live(), msg, arg);
5115  
    pcallFAll_minimalExceptionHandling(vm_busListenersByMessage_live().get(msg), msg, arg);
5116  
  }
5117  
5118  
  static public void vmBus_send(String msg) {
5119  
    vmBus_send(msg, (Object) null);
5120  
  }
5121  
5122  
  static public <A> A assertNempty(A a) {
5123  
    return assertNempty("empty", a);
5124  
  }
5125  
5126  
  static public <A> A assertNempty(String msg, A a) {
5127  
    if (empty(a))
5128  
      throw fail(msg + ": " + a);
5129  
    return a;
5130  
  }
5131  
5132  
  static public File imagesDir() {
5133  
    return userDir_oneOf_createIfNone("Pictures", "OneDrive/Pictures", "OneDrive/Bilder", "Pictures", "Bilder");
5134  
  }
5135  
5136  
  static public File imagesDir(String sub) {
5137  
    return newFile(imagesDir(), sub);
5138  
  }
5139  
5140  
  static public boolean isImageFileName(String s) {
5141  
    return eqicOneOf(fileExtension(s), ".png", ".jpg", ".jpeg", ".gif");
5142  
  }
5143  
5144  
  static public File makeFileNameUnique_beforeExtension_startWith1_noDot(File f) {
5145  
    File orig = f;
5146  
    int n = 1;
5147  
    do {
5148  
      f = appendToFileBaseName(orig, str(n++));
5149  
    } while (f.exists());
5150  
    return f;
5151  
  }
5152  
5153  
  static public File newFile(File base, String... names) {
5154  
    for (String name : names) base = new File(base, name);
5155  
    return base;
5156  
  }
5157  
5158  
  static public File newFile(String name) {
5159  
    return name == null ? null : new File(name);
5160  
  }
5161  
5162  
  static public File newFile(String base, String... names) {
5163  
    return newFile(newFile(base), names);
5164  
  }
5165  
5166  
  static public void saveImage(File f, BufferedImage img) {
5167  
    if (hasJPEGExtension(f))
5168  
      saveJPG(f, img);
5169  
    else
5170  
      savePNG(f, img);
5171  
  }
5172  
5173  
  static public String appendBracketed(Object o) {
5174  
    String b = strOrNull(o);
5175  
    return empty(b) ? "" : "" + " (" + b + ")";
5176  
  }
5177  
5178  
  static public String appendBracketed(String a, String b) {
5179  
    return a + appendBracketed(b);
5180  
  }
5181  
5182  
  static public String fileInfo(File f) {
5183  
    return renderFileInfo(f);
5184  
  }
5185  
5186  
  static public String fileInfo(String f) {
5187  
    return renderFileInfo(newFile(f));
5188  
  }
5189  
5190  
  static public byte[] bytesFromHex(String s) {
5191  
    return hexToBytes(s);
5192  
  }
5193  
5194  
  static public String dropPrefix(String prefix, String s) {
5195  
    return s == null ? null : s.startsWith(prefix) ? s.substring(l(prefix)) : s;
5196  
  }
5197  
5198  
  static public int ubyteToInt(byte b) {
5199  
    return b & 0x0FF;
5200  
  }
5201  
5202  
  static public int ubyteToInt(char c) {
5203  
    return c & 0x0FF;
5204  
  }
5205  
5206  
  static volatile public PersistableThrowable lastException_lastException;
5207  
5208  
  static public PersistableThrowable lastException() {
5209  
    return lastException_lastException;
5210  
  }
5211  
5212  
  static public void lastException(Throwable e) {
5213  
    lastException_lastException = persistableThrowable(e);
5214  
  }
5215  
5216  
  static public Throwable getInnerException(Throwable e) {
5217  
    if (e == null)
5218  
      return null;
5219  
    while (e.getCause() != null) e = e.getCause();
5220  
    return e;
5221  
  }
5222  
5223  
  static public Throwable getInnerException(Runnable r) {
5224  
    return getInnerException(getException(r));
5225  
  }
5226  
5227  
  static public String hideCredentials(URL url) {
5228  
    return url == null ? null : hideCredentials(str(url));
5229  
  }
5230  
5231  
  static public String hideCredentials(String url) {
5232  
    try {
5233  
      if (startsWithOneOf(url, "http://", "https://") && isAGIBlueDomain(hostNameFromURL(url)))
5234  
        return url;
5235  
    } catch (Throwable e) {
5236  
      print("HideCredentials", e);
5237  
    }
5238  
    return url.replaceAll("([&?])(_pass|key|cookie)=[^&\\s\"]*", "$1$2=<hidden>");
5239  
  }
5240  
5241  
  static public String hideCredentials(Object o) {
5242  
    return hideCredentials(str(o));
5243  
  }
5244  
5245  
  static public String unnull(String s) {
5246  
    return s == null ? "" : s;
5247  
  }
5248  
5249  
  static public <A> Collection<A> unnull(Collection<A> l) {
5250  
    return l == null ? emptyList() : l;
5251  
  }
5252  
5253  
  static public <A> List<A> unnull(List<A> l) {
5254  
    return l == null ? emptyList() : l;
5255  
  }
5256  
5257  
  static public int[] unnull(int[] l) {
5258  
    return l == null ? emptyIntArray() : l;
5259  
  }
5260  
5261  
  static public char[] unnull(char[] l) {
5262  
    return l == null ? emptyCharArray() : l;
5263  
  }
5264  
5265  
  static public double[] unnull(double[] l) {
5266  
    return l == null ? emptyDoubleArray() : l;
5267  
  }
5268  
5269  
  static public <A, B> Map<A, B> unnull(Map<A, B> l) {
5270  
    return l == null ? emptyMap() : l;
5271  
  }
5272  
5273  
  static public <A> Iterable<A> unnull(Iterable<A> i) {
5274  
    return i == null ? emptyList() : i;
5275  
  }
5276  
5277  
  static public <A> A[] unnull(A[] a) {
5278  
    return a == null ? (A[]) emptyObjectArray() : a;
5279  
  }
5280  
5281  
  static public BitSet unnull(BitSet b) {
5282  
    return b == null ? new BitSet() : b;
5283  
  }
5284  
5285  
  static public Pt unnull(Pt p) {
5286  
    return p == null ? new Pt() : p;
5287  
  }
5288  
5289  
  static public <A, B> Pair<A, B> unnull(Pair<A, B> p) {
5290  
    return p != null ? p : new Pair(null, null);
5291  
  }
5292  
5293  
  static public int unnull(Integer i) {
5294  
    return i == null ? 0 : i;
5295  
  }
5296  
5297  
  static public long unnull(Long l) {
5298  
    return l == null ? 0L : l;
5299  
  }
5300  
5301  
  static public double unnull(Double l) {
5302  
    return l == null ? 0.0 : l;
5303  
  }
5304  
5305  
  static public String baseClassName(String className) {
5306  
    return substring(className, className.lastIndexOf('.') + 1);
5307  
  }
5308  
5309  
  static public String baseClassName(Object o) {
5310  
    return baseClassName(getClassName(o));
5311  
  }
5312  
5313  
  static public String prependIfNempty(String prefix, String s) {
5314  
    return empty(s) ? unnull(s) : prefix + s;
5315  
  }
5316  
5317  
  static public void removeTrayIcon(final TrayIcon t) {
5318  
    if (t != null) {
5319  
      swing(() -> {
5320  
        SystemTray.getSystemTray().remove(t);
5321  
      });
5322  
    }
5323  
  }
5324  
5325  
  static public JFastLogView_noWrap jFastLogView_noWrap() {
5326  
    return jFastLogView_noWrap("");
5327  
  }
5328  
5329  
  static public JFastLogView_noWrap jFastLogView_noWrap(String text) {
5330  
    return withTypeWriterFont(swingNu(JFastLogView_noWrap.class, text));
5331  
  }
5332  
5333  
  static public JScrollPane jscroll_copyBackground(Component c) {
5334  
    return setScrollPaneBackground(getBackground(c), jscroll(c));
5335  
  }
5336  
5337  
  static public String stackTraceToString(StackTraceElement[] st) {
5338  
    return lines(st);
5339  
  }
5340  
5341  
  static public String stackTraceToString(Throwable e) {
5342  
    return getStackTrace_noRecord(e);
5343  
  }
5344  
5345  
  static public boolean eq(Object a, Object b) {
5346  
    return a == b || a != null && b != null && a.equals(b);
5347  
  }
5348  
5349  
  static public <A, B> B mapPutOrRemove(Map<A, B> map, A key, B value) {
5350  
    if (map != null && key != null)
5351  
      if (value != null)
5352  
        return map.put(key, value);
5353  
      else
5354  
        return map.remove(key);
5355  
    return null;
5356  
  }
5357  
5358  
  static public Map vm_generalMap_map;
5359  
5360  
  static public Map vm_generalMap() {
5361  
    if (vm_generalMap_map == null)
5362  
      vm_generalMap_map = (Map) get(javax(), "generalMap");
5363  
    return vm_generalMap_map;
5364  
  }
5365  
5366  
  static public String mcName() {
5367  
    return mc().getName();
5368  
  }
5369  
5370  
  static public String getClassName(Object o) {
5371  
    return o == null ? "null" : o instanceof Class ? ((Class) o).getName() : o.getClass().getName();
5372  
  }
5373  
5374  
  static public <A extends Concept> Collection<A> findConceptsWhere(Class<A> c, Object... params) {
5375  
    return findConceptsWhere(db_mainConcepts(), c, params);
5376  
  }
5377  
5378  
  static public Collection<Concept> findConceptsWhere(String c, Object... params) {
5379  
    return findConceptsWhere(db_mainConcepts(), c, params);
5380  
  }
5381  
5382  
  static public <A extends Concept> Collection<A> findConceptsWhere(Concepts concepts, Class<A> c, Object... params) {
5383  
    ping();
5384  
    params = expandParams(c, params);
5385  
    if (concepts.fieldIndices != null)
5386  
      for (int i = 0; i < l(params); i += 2) {
5387  
        IFieldIndex<A, Object> index = concepts.getFieldIndex(c, (String) params[i]);
5388  
        if (index != null) {
5389  
          Collection<A> rawList = index.getAll(params[i + 1]);
5390  
          params = dropEntryFromParams(params, i);
5391  
          if (params == null)
5392  
            return rawList;
5393  
          List<A> l = new ArrayList();
5394  
          for (A x : rawList) if (checkConceptFields(x, params))
5395  
            l.add(x);
5396  
          return l;
5397  
        }
5398  
      }
5399  
    return filterConcepts(concepts.list(c), params);
5400  
  }
5401  
5402  
  static public Collection<Concept> findConceptsWhere(Concepts concepts, String c, Object... params) {
5403  
    return filterConcepts(concepts.list(c), params);
5404  
  }
5405  
5406  
  static public <A> int iteratorCount_int_close(Iterator<A> i) {
5407  
    try {
5408  
      int n = 0;
5409  
      if (i != null)
5410  
        while (i.hasNext()) {
5411  
          i.next();
5412  
          ++n;
5413  
        }
5414  
      if (i instanceof AutoCloseable)
5415  
        ((AutoCloseable) i).close();
5416  
      return n;
5417  
    } catch (Exception __e) {
5418  
      throw rethrow(__e);
5419  
    }
5420  
  }
5421  
5422  
  static public <A, B> Pair<A, B> mapEntryToPair(Map.Entry<A, B> e) {
5423  
    return e == null ? null : pair(e.getKey(), e.getValue());
5424  
  }
5425  
5426  
  static public <A, B> Set<Map.Entry<A, B>> entrySet(Map<A, B> map) {
5427  
    return _entrySet(map);
5428  
  }
5429  
5430  
  static public <A> A firstThat(Iterable<A> l, IF1<A, Boolean> pred) {
5431  
    for (A a : unnullForIteration(l)) if (pred.get(a))
5432  
      return a;
5433  
    return null;
5434  
  }
5435  
5436  
  static public <A> A firstThat(A[] l, IF1<A, Boolean> pred) {
5437  
    for (A a : unnullForIteration(l)) if (pred.get(a))
5438  
      return a;
5439  
    return null;
5440  
  }
5441  
5442  
  static public <A> A firstThat(IF1<A, Boolean> pred, Iterable<A> l) {
5443  
    return firstThat(l, pred);
5444  
  }
5445  
5446  
  static public <A> A firstThat(IF1<A, Boolean> pred, A[] l) {
5447  
    return firstThat(l, pred);
5448  
  }
5449  
5450  
  static public String defaultThreadName_name;
5451  
5452  
  static public String defaultThreadName() {
5453  
    if (defaultThreadName_name == null)
5454  
      defaultThreadName_name = "A thread by " + programID();
5455  
    return defaultThreadName_name;
5456  
  }
5457  
5458  
  static public Runnable wrapAsActivity(Object r) {
5459  
    if (r == null)
5460  
      return null;
5461  
    Runnable r2 = toRunnable(r);
5462  
    Object mod = dm_current_generic();
5463  
    if (mod == null)
5464  
      return r2;
5465  
    return new Runnable() {
5466  
5467  
      public void run() {
5468  
        try {
5469  
          AutoCloseable c = (AutoCloseable) (rcall("enter", mod));
5470  
          AutoCloseable __1 = c;
5471  
          try {
5472  
            r2.run();
5473  
          } finally {
5474  
            _close(__1);
5475  
          }
5476  
        } catch (Exception __e) {
5477  
          throw rethrow(__e);
5478  
        }
5479  
      }
5480  
5481  
      public String toString() {
5482  
        return "AutoCloseable c =  (AutoCloseable) (rcall enter(mod));\r\n    temp c;\r\n    r2.r...";
5483  
      }
5484  
    };
5485  
  }
5486  
5487  
  static public Thread newThread(Object runnable) {
5488  
    return new BetterThread(_topLevelErrorHandling(toRunnable(runnable)));
5489  
  }
5490  
5491  
  static public Thread newThread(Object runnable, String name) {
5492  
    if (name == null)
5493  
      name = defaultThreadName();
5494  
    return new BetterThread(_topLevelErrorHandling(toRunnable(runnable)), name);
5495  
  }
5496  
5497  
  static public Thread newThread(String name, Object runnable) {
5498  
    return newThread(runnable, name);
5499  
  }
5500  
5501  
  static public Runnable toRunnable(final Object o) {
5502  
    if (o instanceof Runnable)
5503  
      return (Runnable) o;
5504  
    if (o instanceof String)
5505  
      throw fail("callF_legacy");
5506  
    return new Runnable() {
5507  
5508  
      public void run() {
5509  
        try {
5510  
          callF(o);
5511  
        } catch (Exception __e) {
5512  
          throw rethrow(__e);
5513  
        }
5514  
      }
5515  
5516  
      public String toString() {
5517  
        return "callF(o)";
5518  
      }
5519  
    };
5520  
  }
5521  
5522  
  static public Map<Thread, Boolean> _registerThread_threads;
5523  
5524  
  static public Object _onRegisterThread;
5525  
5526  
  static public Thread _registerThread(Thread t) {
5527  
    if (_registerThread_threads == null)
5528  
      _registerThread_threads = newWeakHashMap();
5529  
    _registerThread_threads.put(t, true);
5530  
    vm_generalWeakSubMap("thread2mc").put(t, weakRef(mc()));
5531  
    callF(_onRegisterThread, t);
5532  
    return t;
5533  
  }
5534  
5535  
  static public void _registerThread() {
5536  
    _registerThread(Thread.currentThread());
5537  
  }
5538  
5539  
  static public URLConnection openConnection(String url) {
5540  
    try {
5541  
      return openConnection(new URL(url));
5542  
    } catch (Exception __e) {
5543  
      throw rethrow(__e);
5544  
    }
5545  
  }
5546  
5547  
  static public URLConnection openConnection(URL url) {
5548  
    try {
5549  
      ping();
5550  
      callOpt(javax(), "recordOpenURLConnection", str(url));
5551  
      return url.openConnection();
5552  
    } catch (Exception __e) {
5553  
      throw rethrow(__e);
5554  
    }
5555  
  }
5556  
5557  
  static public void setHeaders(URLConnection con) throws IOException {
5558  
    String computerID = getComputerID_quick();
5559  
    if (computerID != null)
5560  
      try {
5561  
        con.setRequestProperty("X-ComputerID", computerID);
5562  
        con.setRequestProperty("X-OS", System.getProperty("os.name") + " " + System.getProperty("os.version"));
5563  
      } catch (Throwable e) {
5564  
      }
5565  
  }
5566  
5567  
  static public FileOutputStream newFileOutputStream(File path) throws IOException {
5568  
    return newFileOutputStream(path.getPath());
5569  
  }
5570  
5571  
  static public FileOutputStream newFileOutputStream(String path) throws IOException {
5572  
    return newFileOutputStream(path, false);
5573  
  }
5574  
5575  
  static public FileOutputStream newFileOutputStream(File path, boolean append) throws IOException {
5576  
    return newFileOutputStream(path.getPath(), append);
5577  
  }
5578  
5579  
  static public FileOutputStream newFileOutputStream(String path, boolean append) throws IOException {
5580  
    mkdirsForFile(path);
5581  
    FileOutputStream f = new FileOutputStream(path, append);
5582  
    _registerIO(f, path, true);
5583  
    return f;
5584  
  }
5585  
5586  
  public static File mkdirsFor(File file) {
5587  
    return mkdirsForFile(file);
5588  
  }
5589  
5590  
  static public void copyStreamWithPrints(InputStream in, OutputStream out, String pat) {
5591  
    try {
5592  
      byte[] buf = new byte[65536];
5593  
      int total = 0;
5594  
      while (true) {
5595  
        int n = in.read(buf);
5596  
        if (n <= 0)
5597  
          return;
5598  
        out.write(buf, 0, n);
5599  
        if ((total + n) / 100000 > total / 100000)
5600  
          print(pat.replace("{*}", str(roundDownTo(100000, total))));
5601  
        total += n;
5602  
      }
5603  
    } catch (Exception __e) {
5604  
      throw rethrow(__e);
5605  
    }
5606  
  }
5607  
5608  
  static public File renameFile_assertTrue(File a, File b) {
5609  
    try {
5610  
      if (a.equals(b))
5611  
        return b;
5612  
      if (!a.exists())
5613  
        throw fail("Source file not found: " + f2s(a));
5614  
      if (b.exists())
5615  
        throw fail("Target file exists: " + f2s(b));
5616  
      mkdirsForFile(b);
5617  
      if (!a.renameTo(b))
5618  
        throw fail("Can't rename " + f2s(a) + " to " + f2s(b));
5619  
      return b;
5620  
    } catch (Exception __e) {
5621  
      throw rethrow(__e);
5622  
    }
5623  
  }
5624  
5625  
  static public void copyStream(InputStream in, OutputStream out) {
5626  
    try {
5627  
      byte[] buf = new byte[65536];
5628  
      while (true) {
5629  
        int n = in.read(buf);
5630  
        if (n <= 0)
5631  
          return;
5632  
        out.write(buf, 0, n);
5633  
      }
5634  
    } catch (Exception __e) {
5635  
      throw rethrow(__e);
5636  
    }
5637  
  }
5638  
5639  
  static public <A> A getVar(IF0<A> v) {
5640  
    return v == null ? null : v.get();
5641  
  }
5642  
5643  
  static public <A> A getVar(Optional<A> v) {
5644  
    return v == null ? null : v.orElse(null);
5645  
  }
5646  
5647  
  static public Object safeUnstruct(String s) {
5648  
    return unstructure(s, true);
5649  
  }
5650  
5651  
  static public <A> VF1<A> ivf1ToVF1(IVF1<A> f) {
5652  
    return f == null ? null : new VF1<A>() {
5653  
5654  
      public void get(A a) {
5655  
        try {
5656  
          f.get(a);
5657  
        } catch (Exception __e) {
5658  
          throw rethrow(__e);
5659  
        }
5660  
      }
5661  
5662  
      public String toString() {
5663  
        return "f.get(a)";
5664  
      }
5665  
    };
5666  
  }
5667  
5668  
  static public Map<String, Set> vm_busListenersByMessage_live_cache;
5669  
5670  
  static public Map<String, Set> vm_busListenersByMessage_live() {
5671  
    if (vm_busListenersByMessage_live_cache == null)
5672  
      vm_busListenersByMessage_live_cache = vm_busListenersByMessage_live_load();
5673  
    return vm_busListenersByMessage_live_cache;
5674  
  }
5675  
5676  
  static public Map<String, Set> vm_busListenersByMessage_live_load() {
5677  
    return vm_generalHashMap("busListenersByMessage");
5678  
  }
5679  
5680  
  static public <A> Set<A> syncIdentityHashSet() {
5681  
    return (Set) synchronizedSet(identityHashSet());
5682  
  }
5683  
5684  
  static public <A> A second(List<A> l) {
5685  
    return get(l, 1);
5686  
  }
5687  
5688  
  static public <A> A second(Iterable<A> l) {
5689  
    if (l == null)
5690  
      return null;
5691  
    Iterator<A> it = iterator(l);
5692  
    if (!it.hasNext())
5693  
      return null;
5694  
    it.next();
5695  
    return it.hasNext() ? it.next() : null;
5696  
  }
5697  
5698  
  static public <A> A second(A[] bla) {
5699  
    return bla == null || bla.length <= 1 ? null : bla[1];
5700  
  }
5701  
5702  
  static public <A, B> B second(Pair<A, B> p) {
5703  
    return p == null ? null : p.b;
5704  
  }
5705  
5706  
  static public <A, B, C> B second(T3<A, B, C> t) {
5707  
    return t == null ? null : t.b;
5708  
  }
5709  
5710  
  static public <A> A second(Producer<A> p) {
5711  
    if (p == null)
5712  
      return null;
5713  
    if (p.next() == null)
5714  
      return null;
5715  
    return p.next();
5716  
  }
5717  
5718  
  static public char second(String s) {
5719  
    return charAt(s, 1);
5720  
  }
5721  
5722  
  static public <A, B> B second(Either<A, B> e) {
5723  
    return e == null ? null : e.bOpt();
5724  
  }
5725  
5726  
  static public <A> A third(List<A> l) {
5727  
    return _get(l, 2);
5728  
  }
5729  
5730  
  static public <A> A third(Iterable<A> l) {
5731  
    if (l == null)
5732  
      return null;
5733  
    Iterator<A> it = iterator(l);
5734  
    for (int _repeat_0 = 0; _repeat_0 < 2; _repeat_0++) {
5735  
      if (!it.hasNext())
5736  
        return null;
5737  
      it.next();
5738  
    }
5739  
    return it.hasNext() ? it.next() : null;
5740  
  }
5741  
5742  
  static public <A> A third(Producer<A> p) {
5743  
    if (p == null)
5744  
      return null;
5745  
    for (int _repeat_1 = 0; _repeat_1 < 2; _repeat_1++) {
5746  
      if (p.next() == null)
5747  
        return null;
5748  
    }
5749  
    return p.next();
5750  
  }
5751  
5752  
  static public <A> A third(A[] bla) {
5753  
    return bla == null || bla.length <= 2 ? null : bla[2];
5754  
  }
5755  
5756  
  static public <A, B, C> C third(T3<A, B, C> t) {
5757  
    return t == null ? null : t.c;
5758  
  }
5759  
5760  
  static public <A> VF1<A> runnableToVF1(final Runnable r) {
5761  
    return r == null ? null : new VF1<A>() {
5762  
5763  
      public void get(A a) {
5764  
        try {
5765  
          r.run();
5766  
        } catch (Exception __e) {
5767  
          throw rethrow(__e);
5768  
        }
5769  
      }
5770  
5771  
      public String toString() {
5772  
        return "r.run()";
5773  
      }
5774  
    };
5775  
  }
5776  
5777  
  static public boolean startsWithIgnoreCase(String a, String b) {
5778  
    return regionMatchesIC(a, 0, b, 0, b.length());
5779  
  }
5780  
5781  
  public static boolean isSnippetID(String s) {
5782  
    try {
5783  
      parseSnippetID(s);
5784  
      return true;
5785  
    } catch (RuntimeException e) {
5786  
      return false;
5787  
    }
5788  
  }
5789  
5790  
  public static long parseSnippetID(String snippetID) {
5791  
    long id = Long.parseLong(shortenSnippetID(snippetID));
5792  
    if (id == 0)
5793  
      throw fail("0 is not a snippet ID");
5794  
    return id;
5795  
  }
5796  
5797  
  static public String getProgramID() {
5798  
    return nempty(programID) ? formatSnippetIDOpt(programID) : "?";
5799  
  }
5800  
5801  
  static public String getProgramID(Class c) {
5802  
    String id = (String) getOpt(c, "programID");
5803  
    if (nempty(id))
5804  
      return formatSnippetID(id);
5805  
    return "?";
5806  
  }
5807  
5808  
  static public String getProgramID(Object o) {
5809  
    return getProgramID(getMainClass(o));
5810  
  }
5811  
5812  
  static public String jextract(String pat, String s) {
5813  
    return jextract(pat, javaTok(s));
5814  
  }
5815  
5816  
  static public String jextract(String pat, List<String> tok) {
5817  
    List<String> tokpat = javaTok(pat);
5818  
    jfind_preprocess(tokpat);
5819  
    int i = jfind(tok, tokpat);
5820  
    if (i < 0)
5821  
      return null;
5822  
    int j = i + l(tokpat) - 2;
5823  
    return joinSubList(tok, i, j);
5824  
  }
5825  
5826  
  static public Object vm_generalMap_set(Object key, Object value) {
5827  
    return vm_generalMap_put(key, value);
5828  
  }
5829  
5830  
  static public int indexOfIC(List<String> a, String b) {
5831  
    return indexOfIgnoreCase(a, b);
5832  
  }
5833  
5834  
  static public int indexOfIC(List<String> a, String b, int i) {
5835  
    return indexOfIgnoreCase(a, b, i);
5836  
  }
5837  
5838  
  static public int indexOfIC(String[] a, String b) {
5839  
    return indexOfIC(a, b, 0);
5840  
  }
5841  
5842  
  static public int indexOfIC(String[] a, String b, int i) {
5843  
    return indexOfIgnoreCase(a, b, i);
5844  
  }
5845  
5846  
  static public int indexOfIC(String a, String b) {
5847  
    return indexOfIgnoreCase(a, b);
5848  
  }
5849  
5850  
  static public int indexOfIC(String a, String b, int i) {
5851  
    return indexOfIgnoreCase(a, b, i);
5852  
  }
5853  
5854  
  static public int parseInt(String s) {
5855  
    return emptyString(s) ? 0 : Integer.parseInt(s);
5856  
  }
5857  
5858  
  static public int parseInt(char c) {
5859  
    return Integer.parseInt(str(c));
5860  
  }
5861  
5862  
  static public int cmp(Number a, Number b) {
5863  
    return a == null ? b == null ? 0 : -1 : cmp(a.doubleValue(), b.doubleValue());
5864  
  }
5865  
5866  
  static public int cmp(double a, double b) {
5867  
    return a < b ? -1 : a == b ? 0 : 1;
5868  
  }
5869  
5870  
  static public int cmp(int a, int b) {
5871  
    return a < b ? -1 : a == b ? 0 : 1;
5872  
  }
5873  
5874  
  static public int cmp(long a, long b) {
5875  
    return a < b ? -1 : a == b ? 0 : 1;
5876  
  }
5877  
5878  
  static public int cmp(Object a, Object b) {
5879  
    if (a == null)
5880  
      return b == null ? 0 : -1;
5881  
    if (b == null)
5882  
      return 1;
5883  
    return ((Comparable) a).compareTo(b);
5884  
  }
5885  
5886  
  static public Rect boundsAsRect(Component c) {
5887  
    return boundsRect(c);
5888  
  }
5889  
5890  
  static public <A> int indexOfMax(List<A> l, IF1<A, Comparable> f) {
5891  
    Best_comparable<Integer> best = new Best_comparable();
5892  
    for (int i = 0; i < l(l); i++) best.put(i, f.get(l.get(i)));
5893  
    return or(best.get(), -1);
5894  
  }
5895  
5896  
  static public boolean containsIgnoreCase(Collection<String> l, String s) {
5897  
    if (l != null)
5898  
      for (String x : l) if (eqic(x, s))
5899  
        return true;
5900  
    return false;
5901  
  }
5902  
5903  
  static public boolean containsIgnoreCase(String[] l, String s) {
5904  
    if (l != null)
5905  
      for (String x : l) if (eqic(x, s))
5906  
        return true;
5907  
    return false;
5908  
  }
5909  
5910  
  static public boolean containsIgnoreCase(String s, char c) {
5911  
    return indexOfIgnoreCase(s, String.valueOf(c)) >= 0;
5912  
  }
5913  
5914  
  static public boolean containsIgnoreCase(String a, String b) {
5915  
    return indexOfIgnoreCase(a, b) >= 0;
5916  
  }
5917  
5918  
  static public File javaxDataDir_dir;
5919  
5920  
  static public File javaxDataDir() {
5921  
    return javaxDataDir_dir != null ? javaxDataDir_dir : new File(userHome(), "JavaX-Data");
5922  
  }
5923  
5924  
  static public File javaxDataDir(String... subs) {
5925  
    return newFile(javaxDataDir(), subs);
5926  
  }
5927  
5928  
  static public String formatSnippetIDOpt(String s) {
5929  
    return isSnippetID(s) ? formatSnippetID(s) : s;
5930  
  }
5931  
5932  
  static volatile public String caseID_caseID;
5933  
5934  
  static public String caseID() {
5935  
    return caseID_caseID;
5936  
  }
5937  
5938  
  static public void caseID(String id) {
5939  
    caseID_caseID = id;
5940  
  }
5941  
5942  
  static public File getProgramFile(String progID, String fileName) {
5943  
    if (new File(fileName).isAbsolute())
5944  
      return new File(fileName);
5945  
    return new File(getProgramDir(progID), fileName);
5946  
  }
5947  
5948  
  static public File getProgramFile(String fileName) {
5949  
    return getProgramFile(getProgramID(), fileName);
5950  
  }
5951  
5952  
  static public <A, B> LinkedHashMap<A, B> cloneLinkedHashMap(Map<A, B> map) {
5953  
    return map == null ? new LinkedHashMap() : new LinkedHashMap(map);
5954  
  }
5955  
5956  
  static public Map synchroHashMap() {
5957  
    return synchronizedMap(new HashMap());
5958  
  }
5959  
5960  
  static public Map synchronizedMap() {
5961  
    return synchroMap();
5962  
  }
5963  
5964  
  static public <A, B> Map<A, B> synchronizedMap(Map<A, B> map) {
5965  
    return synchroMap(map);
5966  
  }
5967  
5968  
  static public void _onJavaXSet() {
5969  
  }
5970  
5971  
  static public boolean nemptyString(String s) {
5972  
    return s != null && s.length() > 0;
5973  
  }
5974  
5975  
  static public int strL(String s) {
5976  
    return s == null ? 0 : s.length();
5977  
  }
5978  
5979  
  static public int listL(Collection l) {
5980  
    return l == null ? 0 : l.size();
5981  
  }
5982  
5983  
  static public boolean neq(Object a, Object b) {
5984  
    return !eq(a, b);
5985  
  }
5986  
5987  
  static public int lCharSequence(CharSequence s) {
5988  
    return s == null ? 0 : s.length();
5989  
  }
5990  
5991  
  static public String unnullForIteration(String s) {
5992  
    return s == null ? "" : s;
5993  
  }
5994  
5995  
  static public <A> Collection<A> unnullForIteration(Collection<A> l) {
5996  
    return l == null ? immutableEmptyList() : l;
5997  
  }
5998  
5999  
  static public <A> List<A> unnullForIteration(List<A> l) {
6000  
    return l == null ? immutableEmptyList() : l;
6001  
  }
6002  
6003  
  static public int[] unnullForIteration(int[] l) {
6004  
    return l == null ? emptyIntArray() : l;
6005  
  }
6006  
6007  
  static public char[] unnullForIteration(char[] l) {
6008  
    return l == null ? emptyCharArray() : l;
6009  
  }
6010  
6011  
  static public double[] unnullForIteration(double[] l) {
6012  
    return l == null ? emptyDoubleArray() : l;
6013  
  }
6014  
6015  
  static public short[] unnullForIteration(short[] l) {
6016  
    return l == null ? emptyShortArray() : l;
6017  
  }
6018  
6019  
  static public <A, B> Map<A, B> unnullForIteration(Map<A, B> l) {
6020  
    return l == null ? immutableEmptyMap() : l;
6021  
  }
6022  
6023  
  static public <A> Iterable<A> unnullForIteration(Iterable<A> i) {
6024  
    return i == null ? immutableEmptyList() : i;
6025  
  }
6026  
6027  
  static public <A> A[] unnullForIteration(A[] a) {
6028  
    return a == null ? (A[]) emptyObjectArray() : a;
6029  
  }
6030  
6031  
  static public BitSet unnullForIteration(BitSet b) {
6032  
    return b == null ? new BitSet() : b;
6033  
  }
6034  
6035  
  static public Pt unnullForIteration(Pt p) {
6036  
    return p == null ? new Pt() : p;
6037  
  }
6038  
6039  
  static public <A, B> Pair<A, B> unnullForIteration(Pair<A, B> p) {
6040  
    return p != null ? p : new Pair(null, null);
6041  
  }
6042  
6043  
  static public long unnullForIteration(Long l) {
6044  
    return l == null ? 0L : l;
6045  
  }
6046  
6047  
  static public void setMeta(IMeta o, Object key, Object value) {
6048  
    metaMapPut(o, key, value);
6049  
  }
6050  
6051  
  static public double doubleRatio(double x, double y) {
6052  
    return y == 0 ? 0 : x / y;
6053  
  }
6054  
6055  
  static public double doubleRatio(Seconds x, Seconds y) {
6056  
    return doubleRatio(x.get(), y.get());
6057  
  }
6058  
6059  
  static public byte[] scaledGrayBytesFromBWIntegralImage(int w, BWIntegralImage img) {
6060  
    return scaledGrayBytesFromBWIntegralImage(img, w);
6061  
  }
6062  
6063  
  static public byte[] scaledGrayBytesFromBWIntegralImage(BWIntegralImage img, int w) {
6064  
    return scaledGrayBytesFromBWIntegralImage(img, w, heightForWidth(img, w));
6065  
  }
6066  
6067  
  static public byte[] scaledGrayBytesFromBWIntegralImage(BWIntegralImage img, int w, int h) {
6068  
    int w1 = img.getWidth(), h1 = img.getHeight();
6069  
    double stepX = doubleRatio(w1, w), stepY = doubleRatio(h1, h);
6070  
    byte[] pixels = new byte[w * h];
6071  
    int i = 0;
6072  
    double srcY = 0;
6073  
    for (int y = 0; y < h; y++) {
6074  
      double srcX = 0, nextSrcY = srcY + stepY;
6075  
      for (int x = 0; x < w; x++) {
6076  
        double nextSrcX = srcX + stepX;
6077  
        int pixel = iround(img.getPixelAverage(srcX, srcY, nextSrcX, nextSrcY));
6078  
        pixels[i++] = clampToUByte(pixel);
6079  
        srcX = nextSrcX;
6080  
      }
6081  
      srcY = nextSrcY;
6082  
    }
6083  
    return pixels;
6084  
  }
6085  
6086  
  static public byte[] scaledGrayBytesFromBWIntegralImage(int w, IBWIntegralImage img) {
6087  
    return scaledGrayBytesFromBWIntegralImage(img, w);
6088  
  }
6089  
6090  
  static public byte[] scaledGrayBytesFromBWIntegralImage(IBWIntegralImage img, int w) {
6091  
    return scaledGrayBytesFromBWIntegralImage(img, w, heightForWidth(img, w));
6092  
  }
6093  
6094  
  static public byte[] scaledGrayBytesFromBWIntegralImage(IBWIntegralImage img, int w, int h) {
6095  
    int w1 = img.getWidth(), h1 = img.getHeight();
6096  
    double stepX = doubleRatio(w1, w), stepY = doubleRatio(h1, h);
6097  
    byte[] pixels = new byte[w * h];
6098  
    int i = 0;
6099  
    double srcY = 0;
6100  
    for (int y = 0; y < h; y++) {
6101  
      double srcX = 0, nextSrcY = srcY + stepY;
6102  
      for (int x = 0; x < w; x++) {
6103  
        double nextSrcX = srcX + stepX;
6104  
        int pixel = iround(img.getPixelAverage(srcX, srcY, nextSrcX, nextSrcY));
6105  
        pixels[i++] = clampToUByte(pixel);
6106  
        srcX = nextSrcX;
6107  
      }
6108  
      srcY = nextSrcY;
6109  
    }
6110  
    return pixels;
6111  
  }
6112  
6113  
  static public double parseDouble(String s) {
6114  
    return empty(s) ? 0.0 : Double.parseDouble(s);
6115  
  }
6116  
6117  
  static public Point getMouseLocation() {
6118  
    return MouseInfo.getPointerInfo().getLocation();
6119  
  }
6120  
6121  
  static public <A extends Component> A repaint(A c) {
6122  
    if (c != null)
6123  
      c.repaint();
6124  
    return c;
6125  
  }
6126  
6127  
  static public void imageSurface_unpixelated(ImageSurface imageSurface) {
6128  
    if (imageSurface == null)
6129  
      return;
6130  
    imageSurface.interpolationMode = RenderingHints.VALUE_INTERPOLATION_BILINEAR;
6131  
    repaint(imageSurface);
6132  
  }
6133  
6134  
  static public BufferedImage toBufferedImageOpt(Object o) {
6135  
    if (o instanceof BufferedImage)
6136  
      return ((BufferedImage) o);
6137  
    if (o instanceof Image)
6138  
      return copyImage((Image) o);
6139  
    if (o instanceof MakesBufferedImage)
6140  
      return ((MakesBufferedImage) o).getBufferedImage();
6141  
    if (o instanceof File)
6142  
      if (isImageFile((File) o))
6143  
        return loadBufferedImageFile((File) o);
6144  
    String c = getClassName(o);
6145  
    if (eqOneOf(c, "main$BWImage", "main$RGBImage"))
6146  
      return (BufferedImage) call(o, "getBufferedImage");
6147  
    if (eq(c, "main$PNGFile"))
6148  
      return (BufferedImage) call(o, "getImage");
6149  
    return null;
6150  
  }
6151  
6152  
  static public <A> A swingConstruct(final Class<A> c, final Object... args) {
6153  
    return swing(new F0<A>() {
6154  
6155  
      public A get() {
6156  
        try {
6157  
          return nuObject(c, args);
6158  
        } catch (Exception __e) {
6159  
          throw rethrow(__e);
6160  
        }
6161  
      }
6162  
6163  
      public String toString() {
6164  
        return "ret nuObject(c, args);";
6165  
      }
6166  
    });
6167  
  }
6168  
6169  
  static public <A extends JComponent> A bindToolTipToLiveValue(LiveValue lv, A c) {
6170  
    bindLiveValueListenerToComponent(c, lv, new Runnable() {
6171  
6172  
      public void run() {
6173  
        try {
6174  
          setToolTipText(c, strOrNull(lv.get()));
6175  
        } catch (Exception __e) {
6176  
          throw rethrow(__e);
6177  
        }
6178  
      }
6179  
6180  
      public String toString() {
6181  
        return "setToolTipText(c, strOrNull(lv!))";
6182  
      }
6183  
    });
6184  
    return c;
6185  
  }
6186  
6187  
  static public void lock(Lock lock) {
6188  
    try {
6189  
      ping();
6190  
      if (lock == null)
6191  
        return;
6192  
      try {
6193  
        vmBus_send("locking", lock, "thread", currentThread());
6194  
        lock.lockInterruptibly();
6195  
        vmBus_send("locked", lock, "thread", currentThread());
6196  
      } catch (InterruptedException e) {
6197  
        Object reason = vm_threadInterruptionReasonsMap().get(currentThread());
6198  
        print("Locking interrupted! Reason: " + strOr(reason, "Unknown"));
6199  
        printStackTrace(e);
6200  
        rethrow(e);
6201  
      }
6202  
    } catch (Exception __e) {
6203  
      throw rethrow(__e);
6204  
    }
6205  
  }
6206  
6207  
  static public void lock(Lock lock, String msg) {
6208  
    print("Locking: " + msg);
6209  
    lock(lock);
6210  
  }
6211  
6212  
  static public void lock(Lock lock, String msg, long timeout) {
6213  
    print("Locking: " + msg);
6214  
    lockOrFail(lock, timeout);
6215  
  }
6216  
6217  
  static public ReentrantLock lock() {
6218  
    return fairLock();
6219  
  }
6220  
6221  
  static public void unlock(Lock lock, String msg) {
6222  
    if (lock == null)
6223  
      return;
6224  
    lock.unlock();
6225  
    vmBus_send("unlocked", lock, "thread", currentThread());
6226  
    print("Unlocked: " + msg);
6227  
  }
6228  
6229  
  static public void unlock(Lock lock) {
6230  
    if (lock == null)
6231  
      return;
6232  
    lock.unlock();
6233  
    vmBus_send("unlocked", lock, "thread", currentThread());
6234  
  }
6235  
6236  
  static public Object swingCall(final Object o, final String method, final Object... args) {
6237  
    return swing(new F0<Object>() {
6238  
6239  
      public Object get() {
6240  
        try {
6241  
          return call(o, method, args);
6242  
        } catch (Exception __e) {
6243  
          throw rethrow(__e);
6244  
        }
6245  
      }
6246  
6247  
      public String toString() {
6248  
        return "ret call(o, method, args);";
6249  
      }
6250  
    });
6251  
  }
6252  
6253  
  static public JTabbedPane jLeftTabs(Object... x) {
6254  
    JTabbedPane tabs = jtabs(x);
6255  
    tabs.setTabPlacement(JTabbedPane.LEFT);
6256  
    return tabs;
6257  
  }
6258  
6259  
  static public JTabbedPane jLeftTabs(Collection c) {
6260  
    return jLeftTabs(toObjectArray(c));
6261  
  }
6262  
6263  
  static public JTabbedPane jtabs(Object... x) {
6264  
    return fillJTabs(swingNu(JTabbedPane.class), x);
6265  
  }
6266  
6267  
  static public JPanel jRightAlignedLine(Component... components) {
6268  
    return jrightAlignedLine(components);
6269  
  }
6270  
6271  
  static public JPanel jRightAlignedLine(List<? extends Component> components) {
6272  
    return jrightAlignedLine(components);
6273  
  }
6274  
6275  
  static public <A extends Component> A _recordNewSwingComponent(A c) {
6276  
    if (c != null)
6277  
      callF((Object) vm_generalMap_get("newSwingComponentRegistry"), (Object) c);
6278  
    return c;
6279  
  }
6280  
6281  
  static public JComponent componentToJComponent(Component c) {
6282  
    if (c instanceof JComponent)
6283  
      return (JComponent) c;
6284  
    if (c instanceof JFrame)
6285  
      return ((JFrame) c).getRootPane();
6286  
    if (c == null)
6287  
      return null;
6288  
    throw fail("boohoo " + getClassName(c));
6289  
  }
6290  
6291  
  static public JScrollPane jscroll(final Component c) {
6292  
    return swing(new F0<JScrollPane>() {
6293  
6294  
      public JScrollPane get() {
6295  
        try {
6296  
          return new JScrollPane(c);
6297  
        } catch (Exception __e) {
6298  
          throw rethrow(__e);
6299  
        }
6300  
      }
6301  
6302  
      public String toString() {
6303  
        return "ret new JScrollPane(c);";
6304  
      }
6305  
    });
6306  
  }
6307  
6308  
  static public <A extends JComponent> A jtransparent(final A a) {
6309  
    {
6310  
      swing(() -> {
6311  
        a.setOpaque(false);
6312  
      });
6313  
    }
6314  
    return a;
6315  
  }
6316  
6317  
  static public JPanel borderLayoutPanel() {
6318  
    return jpanel(new BorderLayout());
6319  
  }
6320  
6321  
  static public JSpinner jSpinner(final int value) {
6322  
    return swing(new F0<JSpinner>() {
6323  
6324  
      public JSpinner get() {
6325  
        try {
6326  
          JSpinner s = new JSpinner();
6327  
          s.setValue(value);
6328  
          return jSpinnerCommitOnValidEdit(s);
6329  
        } catch (Exception __e) {
6330  
          throw rethrow(__e);
6331  
        }
6332  
      }
6333  
6334  
      public String toString() {
6335  
        return "new JSpinner s;\r\n    s.setValue(value);\r\n    ret jSpinnerCommitOnValidEdit(s);";
6336  
      }
6337  
    });
6338  
  }
6339  
6340  
  static public JSpinner jSpinner(final int value, final int min, final int max) {
6341  
    return swing(new F0<JSpinner>() {
6342  
6343  
      public JSpinner get() {
6344  
        try {
6345  
          return jSpinnerCommitOnValidEdit(new JSpinner(new SpinnerNumberModel(value, min, max, 1)));
6346  
        } catch (Exception __e) {
6347  
          throw rethrow(__e);
6348  
        }
6349  
      }
6350  
6351  
      public String toString() {
6352  
        return "ret jSpinnerCommitOnValidEdit(new JSpinner(new SpinnerNumberModel(value, min,...";
6353  
      }
6354  
    });
6355  
  }
6356  
6357  
  static public int intFromSpinner(JSpinner s) {
6358  
    return toInt(s.getValue());
6359  
  }
6360  
6361  
  static public void setSpinnerValue(JSpinner s, int value) {
6362  
    setSpinnerValue(s, (Integer) value);
6363  
  }
6364  
6365  
  static public void setSpinnerValue(JSpinner s, Object value) {
6366  
    try {
6367  
      if (s != null) {
6368  
        swing(() -> {
6369  
          s.setValue(value);
6370  
        });
6371  
      }
6372  
    } catch (Throwable __e) {
6373  
      printStackTrace(__e);
6374  
    }
6375  
  }
6376  
6377  
  static public JSpinner rightAlignSpinner(JSpinner spinner) {
6378  
    setHorizontalAlignment(JTextField.RIGHT, getTextFieldFromSpinner(spinner));
6379  
    return spinner;
6380  
  }
6381  
6382  
  static public <A> JSpinner jListSpinner(List<A> entries, A defaultValue) {
6383  
    return swing(() -> {
6384  
      JSpinner s = new JSpinner();
6385  
      s.setModel(new SpinnerListModel(entries));
6386  
      if (contains(entries, defaultValue))
6387  
        setSpinnerValue(s, defaultValue);
6388  
      return s;
6389  
    });
6390  
  }
6391  
6392  
  static public List<Integer> powersOfTwoUpTo(int n) {
6393  
    IntBuffer l = new IntBuffer();
6394  
    int i = 1;
6395  
    while (i <= n && i > 0) {
6396  
      l.add(i);
6397  
      i *= 2;
6398  
    }
6399  
    return l.asVirtualList();
6400  
  }
6401  
6402  
  static public String formatWithThousandsSeparator(long l) {
6403  
    return NumberFormat.getInstance(new Locale("en_US")).format(l);
6404  
  }
6405  
6406  
  static public String getType(Object o) {
6407  
    return getClassName(o);
6408  
  }
6409  
6410  
  static public long getFileSize(String path) {
6411  
    return path == null ? 0 : new File(path).length();
6412  
  }
6413  
6414  
  static public long getFileSize(File f) {
6415  
    return f == null ? 0 : f.length();
6416  
  }
6417  
6418  
  static public String trim(String s) {
6419  
    return s == null ? null : s.trim();
6420  
  }
6421  
6422  
  static public String trim(StringBuilder buf) {
6423  
    return buf.toString().trim();
6424  
  }
6425  
6426  
  static public String trim(StringBuffer buf) {
6427  
    return buf.toString().trim();
6428  
  }
6429  
6430  
  static public CloseableIterableIterator<String> linesFromFile(File f) {
6431  
    return linesFromFile(f, null);
6432  
  }
6433  
6434  
  static public CloseableIterableIterator<String> linesFromFile(File f, IResourceHolder resourceHolder) {
6435  
    try {
6436  
      if (!f.exists())
6437  
        return emptyCloseableIterableIterator();
6438  
      if (ewic(f.getName(), ".gz"))
6439  
        return linesFromReader(utf8bufferedReader(newGZIPInputStream(f)), resourceHolder);
6440  
      return linesFromReader(utf8bufferedReader(f), resourceHolder);
6441  
    } catch (Exception __e) {
6442  
      throw rethrow(__e);
6443  
    }
6444  
  }
6445  
6446  
  static public CloseableIterableIterator<String> linesFromFile(String path) {
6447  
    return linesFromFile(path, null);
6448  
  }
6449  
6450  
  static public CloseableIterableIterator<String> linesFromFile(String path, IResourceHolder resourceHolder) {
6451  
    return linesFromFile(newFile(path), resourceHolder);
6452  
  }
6453  
6454  
  static public <A, B> Set<A> keys(Map<A, B> map) {
6455  
    return map == null ? new HashSet() : map.keySet();
6456  
  }
6457  
6458  
  static public Set keys(Object map) {
6459  
    return keys((Map) map);
6460  
  }
6461  
6462  
  static public <A> Set<A> keys(MultiSet<A> ms) {
6463  
    return ms.keySet();
6464  
  }
6465  
6466  
  static public <A, B> Set<A> keys(MultiMap<A, B> mm) {
6467  
    return mm.keySet();
6468  
  }
6469  
6470  
  static public <A> A or(A a, A b) {
6471  
    return a != null ? a : b;
6472  
  }
6473  
6474  
  static public BufferedImage intArrayToBufferedImage(int[] pixels, int w, int h) {
6475  
    int[] bitMasks = new int[] { 0xFF0000, 0xFF00, 0xFF, 0xFF000000 };
6476  
    SinglePixelPackedSampleModel sm = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, w, h, bitMasks);
6477  
    DataBufferInt db = new DataBufferInt(pixels, pixels.length);
6478  
    WritableRaster wr = Raster.createWritableRaster(sm, db, new Point());
6479  
    return new BufferedImage(ColorModel.getRGBdefault(), wr, false, null);
6480  
  }
6481  
6482  
  static public Map synchroMap() {
6483  
    return synchroHashMap();
6484  
  }
6485  
6486  
  static public <A, B> Map<A, B> synchroMap(Map<A, B> map) {
6487  
    return new SynchronizedMap(map);
6488  
  }
6489  
6490  
  static public <A> List<A> withoutNulls(Iterable<A> l) {
6491  
    if (l instanceof List)
6492  
      if (!containsNulls((List) l))
6493  
        return ((List) l);
6494  
    List<A> l2 = new ArrayList();
6495  
    for (A a : l) if (a != null)
6496  
      l2.add(a);
6497  
    return l2;
6498  
  }
6499  
6500  
  static public <A, B> Map<A, B> withoutNulls(Map<A, B> map) {
6501  
    Map<A, B> map2 = similarEmptyMap(map);
6502  
    for (A a : keys(map)) if (a != null) {
6503  
      B b = map.get(a);
6504  
      if (b != null)
6505  
        map2.put(a, b);
6506  
    }
6507  
    return map2;
6508  
  }
6509  
6510  
  static public <A> List<A> withoutNulls(A[] l) {
6511  
    List<A> l2 = new ArrayList();
6512  
    if (l != null)
6513  
      for (A a : l) if (a != null)
6514  
        l2.add(a);
6515  
    return l2;
6516  
  }
6517  
6518  
  static public String[] toStringArray(Collection<String> c) {
6519  
    String[] a = new String[l(c)];
6520  
    Iterator<String> it = c.iterator();
6521  
    for (int i = 0; i < l(a); i++) a[i] = it.next();
6522  
    return a;
6523  
  }
6524  
6525  
  static public String[] toStringArray(Object o) {
6526  
    if (o instanceof String[])
6527  
      return (String[]) o;
6528  
    else if (o instanceof Collection)
6529  
      return toStringArray((Collection<String>) o);
6530  
    else
6531  
      throw fail("Not a collection or array: " + getClassName(o));
6532  
  }
6533  
6534  
  static public void scrollRowToVisible(JTable t, int rowIndex) {
6535  
    int colIndex = 0;
6536  
    if (!(t.getParent() instanceof JViewport))
6537  
      return;
6538  
    JViewport viewport = (JViewport) t.getParent();
6539  
    Rectangle rect = t.getCellRect(rowIndex, colIndex, true);
6540  
    Rectangle viewRect = viewport.getViewRect();
6541  
    int x = viewRect.x;
6542  
    int y = viewRect.y;
6543  
    if (rect.x >= viewRect.x && rect.x <= (viewRect.x + viewRect.width - rect.width)) {
6544  
    } else if (rect.x < viewRect.x) {
6545  
      x = rect.x;
6546  
    } else if (rect.x > (viewRect.x + viewRect.width - rect.width)) {
6547  
      x = rect.x - viewRect.width + rect.width;
6548  
    }
6549  
    if (rect.y >= viewRect.y && rect.y <= (viewRect.y + viewRect.height - rect.height)) {
6550  
    } else if (rect.y < viewRect.y) {
6551  
      y = rect.y;
6552  
    } else if (rect.y > (viewRect.y + viewRect.height - rect.height)) {
6553  
      y = rect.y - viewRect.height + rect.height;
6554  
    }
6555  
    viewport.setViewPosition(new Point(x, y));
6556  
  }
6557  
6558  
  static public int listRowCount(JList list) {
6559  
    return list == null ? 0 : swing(new F0<Integer>() {
6560  
6561  
      public Integer get() {
6562  
        try {
6563  
          return list.getModel().getSize();
6564  
        } catch (Exception __e) {
6565  
          throw rethrow(__e);
6566  
        }
6567  
      }
6568  
6569  
      public String toString() {
6570  
        return "ret list.getModel().getSize();";
6571  
      }
6572  
    });
6573  
  }
6574  
6575  
  static public Runnable addThreadInfoToRunnable(final Object r) {
6576  
    final Object info = _threadInfo();
6577  
    return info == null ? asRunnable(r) : new Runnable() {
6578  
6579  
      public void run() {
6580  
        try {
6581  
          _inheritThreadInfo(info);
6582  
          callF(r);
6583  
        } catch (Exception __e) {
6584  
          throw rethrow(__e);
6585  
        }
6586  
      }
6587  
6588  
      public String toString() {
6589  
        return "_inheritThreadInfo(info); callF(r);";
6590  
      }
6591  
    };
6592  
  }
6593  
6594  
  static public IterableIterator<Integer> countIterator_inclusive(final int a, final int b) {
6595  
    return countIterator_exclusive(a, b + 1);
6596  
  }
6597  
6598  
  static public <A> IterableIterator<A> countIterator_inclusive(int a, int b, IF1<Integer, A> f) {
6599  
    return countIterator_inclusive(a, b, 1, f);
6600  
  }
6601  
6602  
  static public <A> IterableIterator<A> countIterator_inclusive(int a, int b, int step, IF1<Integer, A> f) {
6603  
    return countIterator_inclusive_step(a, b, 1, f);
6604  
  }
6605  
6606  
  static public <A> IterableIterator<A> countIterator_inclusive(double a, double b, double step, IF1<Double, A> f) {
6607  
    return countIterator_inclusive_step(a, b, step, f);
6608  
  }
6609  
6610  
  static public IterableIterator<Integer> countIterator_inclusive_step(int a, final int b, int step) {
6611  
    assertTrue("step > 0", step > 0);
6612  
    return new IterableIterator<Integer>() {
6613  
6614  
      public int i = a;
6615  
6616  
      public boolean hasNext() {
6617  
        return i <= b;
6618  
      }
6619  
6620  
      public Integer next() {
6621  
        var j = i;
6622  
        i += step;
6623  
        return j;
6624  
      }
6625  
    };
6626  
  }
6627  
6628  
  static public IterableIterator<Double> countIterator_inclusive_step(double a, double b, double step) {
6629  
    assertTrue("step > 0", step > 0);
6630  
    return new IterableIterator<Double>() {
6631  
6632  
      public double i = a;
6633  
6634  
      public boolean hasNext() {
6635  
        return i <= b;
6636  
      }
6637  
6638  
      public Double next() {
6639  
        var j = i;
6640  
        i += step;
6641  
        return j;
6642  
      }
6643  
    };
6644  
  }
6645  
6646  
  static public <A> IterableIterator<A> countIterator_inclusive_step(double a, double b, double step, IF1<Double, A> f) {
6647  
    return mapI_if1(f, countIterator_inclusive_step(a, b, step));
6648  
  }
6649  
6650  
  static public <A> IterableIterator<A> countIterator_inclusive_step(int a, int b, int step, IF1<Integer, A> f) {
6651  
    return mapI_if1(f, countIterator_inclusive_step(a, b, step));
6652  
  }
6653  
6654  
  static public Object pcallFunction(Object f, Object... args) {
6655  
    try {
6656  
      return callFunction(f, args);
6657  
    } catch (Throwable __e) {
6658  
      printStackTrace(__e);
6659  
    }
6660  
    return null;
6661  
  }
6662  
6663  
  static public Object collectionMutex(List l) {
6664  
    return l;
6665  
  }
6666  
6667  
  static public Object collectionMutex(Object o) {
6668  
    if (o instanceof List)
6669  
      return o;
6670  
    String c = className(o);
6671  
    if (eq(c, "java.util.TreeMap$KeySet"))
6672  
      c = className(o = getOpt(o, "m"));
6673  
    else if (eq(c, "java.util.HashMap$KeySet"))
6674  
      c = className(o = get_raw(o, "this$0"));
6675  
    if (eqOneOf(c, "java.util.TreeMap$AscendingSubMap", "java.util.TreeMap$DescendingSubMap"))
6676  
      c = className(o = get_raw(o, "m"));
6677  
    return o;
6678  
  }
6679  
6680  
  static public Object sleepQuietly_monitor = new Object();
6681  
6682  
  static public void sleepQuietly() {
6683  
    try {
6684  
      assertFalse(isAWTThread());
6685  
      synchronized (sleepQuietly_monitor) {
6686  
        sleepQuietly_monitor.wait();
6687  
      }
6688  
    } catch (Exception __e) {
6689  
      throw rethrow(__e);
6690  
    }
6691  
  }
6692  
6693  
  static public AutoCloseable tempEnter(Object o) {
6694  
    return o == null ? null : optCast(AutoCloseable.class, rcallOpt("enter", o));
6695  
  }
6696  
6697  
  static public AutoCloseable tempEnter(Enterable o) {
6698  
    return o == null ? null : o.enter();
6699  
  }
6700  
6701  
  static public Object callOpt_withVarargs(Object o, String method, Object... args) {
6702  
    try {
6703  
      if (o == null)
6704  
        return null;
6705  
      if (o instanceof Class) {
6706  
        Class c = (Class) o;
6707  
        _MethodCache cache = callOpt_getCache(c);
6708  
        Method me = cache.findMethod(method, args);
6709  
        if (me == null) {
6710  
          return null;
6711  
        }
6712  
        if ((me.getModifiers() & Modifier.STATIC) == 0)
6713  
          return null;
6714  
        return invokeMethod(me, null, args);
6715  
      } else {
6716  
        Class c = o.getClass();
6717  
        _MethodCache cache = callOpt_getCache(c);
6718  
        Method me = cache.findMethod(method, args);
6719  
        if (me != null)
6720  
          return invokeMethod(me, o, args);
6721  
        List<Method> methods = cache.cache.get(method);
6722  
        if (methods != null)
6723  
          methodSearch: for (Method m : methods) {
6724  
            {
6725  
              if (!(m.isVarArgs()))
6726  
                continue;
6727  
            }
6728  
            Object[] newArgs = massageArgsForVarArgsCall(m, args);
6729  
            if (newArgs != null)
6730  
              return invokeMethod(m, o, newArgs);
6731  
          }
6732  
        return null;
6733  
      }
6734  
    } catch (Exception __e) {
6735  
      throw rethrow(__e);
6736  
    }
6737  
  }
6738  
6739  
  static public JLabel jLabel(String text) {
6740  
    return jlabel(text);
6741  
  }
6742  
6743  
  static public JLabel jLabel() {
6744  
    return jlabel();
6745  
  }
6746  
6747  
  static public String loadTextFile(String fileName) {
6748  
    return loadTextFile(fileName, null);
6749  
  }
6750  
6751  
  static public String loadTextFile(File f, String defaultContents) {
6752  
    return loadTextFile(f, defaultContents, "UTF-8");
6753  
  }
6754  
6755  
  static public String loadTextFile(File f, String defaultContents, String encoding) {
6756  
    try {
6757  
      checkFileNotTooBigToRead(f);
6758  
      if (f == null || !f.exists())
6759  
        return defaultContents;
6760  
      FileInputStream fileInputStream = new FileInputStream(f);
6761  
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, encoding);
6762  
      return loadTextFile(inputStreamReader);
6763  
    } catch (Exception __e) {
6764  
      throw rethrow(__e);
6765  
    }
6766  
  }
6767  
6768  
  public static String loadTextFile(File fileName) {
6769  
    return loadTextFile(fileName, null);
6770  
  }
6771  
6772  
  static public String loadTextFile(String fileName, String defaultContents) {
6773  
    return fileName == null ? defaultContents : loadTextFile(newFile(fileName), defaultContents);
6774  
  }
6775  
6776  
  static public String loadTextFile(Reader reader) throws IOException {
6777  
    StringBuilder builder = new StringBuilder();
6778  
    try {
6779  
      char[] buffer = new char[1024];
6780  
      int n;
6781  
      while (-1 != (n = reader.read(buffer))) builder.append(buffer, 0, n);
6782  
    } finally {
6783  
      reader.close();
6784  
    }
6785  
    return str(builder);
6786  
  }
6787  
6788  
  static public File muricaPasswordFile() {
6789  
    return new File(javaxSecretDir(), "murica/muricaPasswordFile");
6790  
  }
6791  
6792  
  static public JLabel jim
6793  
[...]
6794  
6795  
6796  
6797  
6798  
6799  
6800  
6801  
6802  
6803  
6804  
6805  
6806  
6807  
6808  
6809  
6810  
6811  
6812  
6813  
6814  
6815  
6816  
6817  
6818  
6819  
6820  
6821  
6822  
6823  
6824  
6825  
6826  
6827  
6828  
6829  
6830  
6831  
6832  
6833  
6834  
6835  
6836  
6837  
6838  
6839  
6840  
6841  
6842  
6843  
6844  
6845  
6846  
6847  
6848  
6849  
6850  
6851  
6852  
6853  
6854  
6855  
6856  
6857  
6858  
6859  
6860  
6861  
6862  
6863  
6864  
6865  
6866  
6867  
6868  
6869  
6870  
6871  
6872  
6873  
6874  
6875  
6876  
6877  
6878  
6879  
6880  
6881  
6882  
6883  
6884  
6885  
6886  
6887  
6888  
6889  
6890  
6891  
6892  
6893  
6894  
6895  
6896  
6897  
6898  
6899  
6900  
6901  
6902  
6903  
6904  
6905  
6906  
6907  
6908  
6909  
6910  
6911  
6912  
6913  
6914  
6915  
6916  
6917  
6918  
6919  
6920  
6921  
6922  
6923  
6924  
6925  
6926  
6927  
6928  
6929  
6930  
6931  
6932  
6933  
6934  
6935  
6936  
6937  
6938  
6939  
6940  
6941  
6942  
6943  
6944  
6945  
6946  
6947  
6948  
6949  
6950  
6951  
6952  
6953  
6954  
6955  
6956  
6957  
6958  
6959  
6960  
6961  
6962  
6963  
6964  
6965  
6966  
6967  
6968  
6969  
6970  
6971  
6972  
6973  
6974  
6975  
6976  
6977  
6978  
6979  
6980  
6981  
6982  
6983  
6984  
6985  
6986  
6987  
6988  
6989  
6990  
6991  
6992  
6993  
6994  
6995  
6996  
6997  
6998  
6999  
7000  
7001  
7002  
7003  
7004  
7005  
7006  
7007  
7008  
7009  
7010  
7011  
7012  
7013  
7014  
7015  
7016  
7017  
7018  
7019  
7020  
7021  
7022  
7023  
7024  
7025  
7026  
7027  
7028  
7029  
7030  
7031  
7032  
7033  
7034  
7035  
7036  
7037  
7038  
7039  
7040  
7041  
7042  
7043  
7044  
7045  
7046  
7047  
7048  
7049  
7050  
7051  
7052  
7053  
7054  
7055  
7056  
7057  
7058  
7059  
7060  
7061  
7062  
7063  
7064  
7065  
7066  
7067  
7068  
7069  
7070  
7071  
7072  
7073  
7074  
7075  
7076  
7077  
7078  
7079  
7080  
7081  
7082  
7083  
7084  
7085  
7086  
7087  
7088  
7089  
7090  
7091  
7092  
7093  
7094  
7095  
7096  
7097  
7098  
7099  
7100  
7101  
7102  
7103  
7104  
7105  
7106  
7107  
7108  
7109  
7110  
7111  
7112  
7113  
7114  
7115  
7116  
7117  
7118  
7119  
7120  
7121  
7122  
7123  
7124  
7125  
7126  
7127  
7128  
7129  
7130  
7131  
7132  
7133  
7134  
7135  
7136  
7137  
7138  
7139  
7140  
7141  
7142  
7143  
7144  
7145  
7146  
7147  
7148  
7149  
7150  
7151  
7152  
7153  
7154  
7155  
7156  
7157  
7158  
7159  
7160  
7161  
7162  
7163  
7164  
7165  
7166  
7167  
7168  
7169  
7170  
7171  
7172  
7173  
7174  
7175  
7176  
7177  
7178  
7179  
7180  
7181  
7182  
7183  
7184  
7185  
7186  
7187  
7188  
7189  
7190  
7191  
7192  
7193  
7194  
7195  
7196  
7197  
7198  
7199  
7200  
7201  
7202  
7203  
7204  
7205  
7206  
7207  
7208  
7209  
7210  
7211  
7212  
7213  
7214  
7215  
7216  
7217  
7218  
7219  
7220  
7221  
7222  
7223  
7224  
7225  
7226  
7227  
7228  
7229  
7230  
7231  
7232  
7233  
7234  
7235  
7236  
7237  
7238  
7239  
7240  
7241  
7242  
7243  
7244  
7245  
7246  
7247  
7248  
7249  
7250  
7251  
7252  
7253  
7254  
7255  
7256  
7257  
7258  
7259  
7260  
7261  
7262  
7263  
7264  
7265  
7266  
7267  
7268  
7269  
7270  
7271  
7272  
7273  
7274  
7275  
7276  
7277  
7278  
7279  
7280  
7281  
7282  
7283  
7284  
7285  
7286  
7287  
7288  
7289  
7290  
7291  
7292  
7293  
7294  
7295  
7296  
7297  
7298  
7299  
7300  
7301  
7302  
7303  
7304  
7305  
7306  
7307  
7308  
7309  
7310  
7311  
7312  
7313  
7314  
7315  
7316  
7317  
7318  
7319  
7320  
7321  
7322  
7323  
7324  
7325  
7326  
7327  
7328  
7329  
7330  
7331  
7332  
7333  
7334  
7335  
7336  
7337  
7338  
7339  
7340  
7341  
7342  
7343  
7344  
7345  
7346  
7347  
7348  
7349  
7350  
7351  
7352  
7353  
7354  
7355  
7356  
7357  
7358  
7359  
7360  
7361  
7362  
7363  
7364  
7365  
7366  
7367  
7368  
7369  
7370  
7371  
7372  
7373  
7374  
7375  
7376  
7377  
7378  
7379  
7380  
7381  
7382  
7383  
7384  
7385  
7386  
7387  
7388  
7389  
7390  
7391  
7392  
7393  
7394  
7395  
7396  
7397  
7398  
7399  
7400  
7401  
7402  
7403  
7404  
7405  
7406  
7407  
7408  
7409  
7410  
7411  
7412  
7413  
7414  
7415  
7416  
7417  
7418  
7419  
7420  
7421  
7422  
7423  
7424  
7425  
7426  
7427  
7428  
7429  
7430  
7431  
7432  
7433  
7434  
7435  
7436  
7437  
7438  
7439  
7440  
7441  
7442  
7443  
7444  
7445  
7446  
7447  
7448  
7449  
7450  
7451  
7452  
7453  
7454  
7455  
7456  
7457  
7458  
7459  
7460  
7461  
7462  
7463  
7464  
7465  
7466  
7467  
7468  
7469  
7470  
7471  
7472  
7473  
7474  
7475  
7476  
7477  
7478  
7479  
7480  
7481  
7482  
7483  
7484  
7485  
7486  
7487  
7488  
7489  
7490  
7491  
7492  
7493  
7494  
7495  
7496  
7497  
7498  
7499  
7500  
7501  
7502  
7503  
7504  
7505  
7506  
7507  
7508  
7509  
7510  
7511  
7512  
7513  
7514  
7515  
7516  
7517  
7518  
7519  
7520  
7521  
7522  
7523  
7524  
7525  
7526  
7527  
7528  
7529  
7530  
7531  
7532  
7533  
7534  
7535  
7536  
7537  
7538  
7539  
7540  
7541  
7542  
7543  
7544  
7545  
7546  
7547  
7548  
7549  
7550  
7551  
7552  
7553  
7554  
7555  
7556  
7557  
7558  
7559  
7560  
7561  
7562  
7563  
7564  
7565  
7566  
7567  
7568  
7569  
7570  
7571  
7572  
7573  
7574  
7575  
7576  
7577  
7578  
7579  
7580  
7581  
7582  
7583  
7584  
7585  
7586  
7587  
7588  
7589  
7590  
7591  
7592  
7593  
7594  
7595  
7596  
7597  
7598  
7599  
7600  
7601  
7602  
7603  
7604  
7605  
7606  
7607  
7608  
7609  
7610  
7611  
7612  
7613  
7614  
7615  
7616  
7617  
7618  
7619  
7620  
7621  
7622  
7623  
7624  
7625  
7626  
7627  
7628  
7629  
7630  
7631  
7632  
7633  
7634  
7635  
7636  
7637  
7638  
7639  
7640  
7641  
7642  
7643  
7644  
7645  
7646  
7647  
7648  
7649  
7650  
7651  
7652  
7653  
7654  
7655  
7656  
7657  
7658  
7659  
7660  
7661  
7662  
7663  
7664  
7665  
7666  
7667  
7668  
7669  
7670  
7671  
7672  
7673  
7674  
7675  
7676  
7677  
7678  
7679  
7680  
7681  
7682  
7683  
7684  
7685  
7686  
7687  
7688  
7689  
7690  
7691  
7692  
7693  
7694  
7695  
7696  
7697  
7698  
7699  
7700  
7701  
7702  
7703  
7704  
7705  
7706  
7707  
7708  
7709  
7710  
7711  
7712  
7713  
7714  
7715  
7716  
7717  
7718  
7719  
7720  
7721  
7722  
7723  
7724  
7725  
7726  
7727  
7728  
7729  
7730  
7731  
7732  
7733  
7734  
7735  
7736  
7737  
7738  
7739  
7740  
7741  
7742  
7743  
7744  
7745  
7746  
7747  
7748  
7749  
7750  
7751  
7752  
7753  
7754  
7755  
7756  
7757  
7758  
7759  
7760  
7761  
7762  
7763  
7764  
7765  
7766  
7767  
7768  
7769  
7770  
7771  
7772  
7773  
7774  
7775  
7776  
7777  
7778  
7779  
7780  
7781  
7782  
7783  
7784  
7785  
7786  
7787  
7788  
7789  
7790  
7791  
7792  
7793  
7794  
7795  
7796  
7797  
7798  
7799  
7800  
7801  
7802  
7803  
7804  
7805  
7806  
7807  
7808  
7809  
7810  
7811  
7812  
7813  
7814  
7815  
7816  
7817  
7818  
7819  
7820  
7821  
7822  
7823  
7824  
7825  
7826  
7827  
7828  
7829  
7830  
7831  
7832  
7833  
7834  
7835  
7836  
7837  
7838  
7839  
7840  
7841  
7842  
7843  
7844  
7845  
7846  
7847  
7848  
7849  
7850  
7851  
7852  
7853  
7854  
7855  
7856  
7857  
7858  
7859  
7860  
7861  
7862  
7863  
7864  
7865  
7866  
7867  
7868  
7869  
7870  
7871  
7872  
7873  
7874  
7875  
7876  
7877  
7878  
7879  
7880  
7881  
7882  
7883  
7884  
7885  
7886  
7887  
7888  
7889  
7890  
7891  
7892  
7893  
7894  
7895  
7896  
7897  
7898  
7899  
7900  
7901  
7902  
7903  
7904  
7905  
7906  
7907  
7908  
7909  
7910  
7911  
7912  
7913  
7914  
7915  
7916  
7917  
7918  
7919  
7920  
7921  
7922  
7923  
7924  
7925  
7926  
7927  
7928  
7929  
7930  
7931  
7932  
7933  
7934  
7935  
7936  
7937  
7938  
7939  
7940  
7941  
7942  
7943  
7944  
7945  
7946  
7947  
7948  
7949  
7950  
7951  
7952  
7953  
7954  
7955  
7956  
7957  
7958  
7959  
7960  
7961  
7962  
7963  
7964  
7965  
7966  
7967  
7968  
7969  
7970  
7971  
7972  
7973  
7974  
7975  
7976  
7977  
7978  
7979  
7980  
7981  
7982  
7983  
7984  
7985  
7986  
7987  
7988  
7989  
7990  
7991  
7992  
7993  
7994  
7995  
7996  
7997  
7998  
7999  
8000  
8001  
8002  
8003  
8004  
8005  
8006  
8007  
8008  
8009  
8010  
8011  
8012  
8013  
8014  
8015  
8016  
8017  
8018  
8019  
8020  
8021  
8022  
8023  
8024  
8025  
8026  
8027  
8028  
8029  
8030  
8031  
8032  
8033  
8034  
8035  
8036  
8037  
8038  
8039  
8040  
8041  
8042  
8043  
8044  
8045  
8046  
8047  
8048  
8049  
8050  
8051  
8052  
8053  
8054  
8055  
8056  
8057  
8058  
8059  
8060  
8061  
8062  
8063  
8064  
8065  
8066  
8067  
8068  
8069  
8070  
8071  
8072  
8073  
8074  
8075  
8076  
8077  
8078  
8079  
8080  
8081  
8082  
8083  
8084  
8085  
8086  
8087  
8088  
8089  
8090  
8091  
8092  
8093  
8094  
8095  
8096  
8097  
8098  
8099  
8100  
8101  
8102  
8103  
8104  
8105  
8106  
8107  
8108  
8109  
8110  
8111  
8112  
8113  
8114  
8115  
8116  
8117  
8118  
8119  
8120  
8121  
8122  
8123  
8124  
8125  
8126  
8127  
8128  
8129  
8130  
8131  
8132  
8133  
8134  
8135  
8136  
8137  
8138  
8139  
8140  
8141  
8142  
8143  
8144  
8145  
8146  
8147  
8148  
8149  
8150  
8151  
8152  
8153  
8154  
8155  
8156  
8157  
8158  
8159  
8160  
8161  
8162  
8163  
8164  
8165  
8166  
8167  
8168  
8169  
8170  
8171  
8172  
8173  
8174  
8175  
8176  
8177  
8178  
8179  
8180  
8181  
8182  
8183  
8184  
8185  
8186  
8187  
8188  
8189  
8190  
8191  
8192  
8193  
8194  
8195  
8196  
8197  
8198  
8199  
8200  
8201  
8202  
8203  
8204  
8205  
8206  
8207  
8208  
8209  
8210  
8211  
8212  
8213  
8214  
8215  
8216  
8217  
8218  
8219  
8220  
8221  
8222  
8223  
8224  
8225  
8226  
8227  
8228  
8229  
8230  
8231  
8232  
8233  
8234  
8235  
8236  
8237  
8238  
8239  
8240  
8241  
8242  
8243  
8244  
8245  
8246  
8247  
8248  
8249  
8250  
8251  
8252  
8253  
8254  
8255  
8256  
8257  
8258  
8259  
8260  
8261  
8262  
8263  
8264  
8265  
8266  
8267  
8268  
8269  
8270  
8271  
8272  
8273  
8274  
8275  
8276  
8277  
8278  
8279  
8280  
8281  
8282  
8283  
8284  
8285  
8286  
8287  
8288  
8289  
8290  
8291  
8292  
8293  
8294  
8295  
8296  
8297  
8298  
8299  
8300  
8301  
8302  
8303  
8304  
8305  
8306  
8307  
8308  
8309  
8310  
8311  
8312  
8313  
8314  
8315  
8316  
8317  
8318  
8319  
8320  
8321  
8322  
8323  
8324  
8325  
8326  
8327  
8328  
8329  
8330  
8331  
8332  
8333  
8334  
8335  
8336  
8337  
8338  
8339  
8340  
8341  
8342  
8343  
8344  
8345  
8346  
8347  
8348  
8349  
8350  
8351  
8352  
8353  
8354  
8355  
8356  
8357  
8358  
8359  
8360  
8361  
8362  
8363  
8364  
8365  
8366  
8367  
8368  
8369  
8370  
8371  
8372  
8373  
8374  
8375  
8376  
8377  
8378  
8379  
8380  
8381  
8382  
8383  
8384  
8385  
8386  
8387  
8388  
8389  
8390  
8391  
8392  
8393  
8394  
8395  
8396  
8397  
8398  
8399  
8400  
8401  
8402  
8403  
8404  
8405  
8406  
8407  
8408  
8409  
8410  
8411  
8412  
8413  
8414  
8415  
8416  
8417  
8418  
8419  
8420  
8421  
8422  
8423  
8424  
8425  
8426  
8427  
8428  
8429  
8430  
8431  
8432  
8433  
8434  
8435  
8436  
8437  
8438  
8439  
8440  
8441  
8442  
8443  
8444  
8445  
8446  
8447  
8448  
8449  
8450  
8451  
8452  
8453  
8454  
8455  
8456  
8457  
8458  
8459  
8460  
8461  
8462  
8463  
8464  
8465  
8466  
8467  
8468  
8469  
8470  
8471  
8472  
8473  
8474  
8475  
8476  
8477  
8478  
8479  
8480  
8481  
8482  
8483  
8484  
8485  
8486  
8487  
8488  
8489  
8490  
8491  
8492  
8493  
8494  
8495  
8496  
8497  
8498  
8499  
8500  
8501  
8502  
8503  
8504  
8505  
8506  
8507  
8508  
8509  
8510  
8511  
8512  
8513  
8514  
8515  
8516  
8517  
8518  
8519  
8520  
8521  
8522  
8523  
8524  
8525  
8526  
8527  
8528  
8529  
8530  
8531  
8532  
8533  
8534  
8535  
8536  
8537  
8538  
8539  
8540  
8541  
8542  
8543  
8544  
8545  
8546  
8547  
8548  
8549  
8550  
8551  
8552  
8553  
8554  
8555  
8556  
8557  
8558  
8559  
8560  
8561  
8562  
8563  
8564  
8565  
8566  
8567  
8568  
8569  
8570  
8571  
8572  
8573  
8574  
8575  
8576  
8577  
8578  
8579  
8580  
8581  
8582  
8583  
8584  
8585  
8586  
8587  
8588  
8589  
8590  
8591  
8592  
8593  
8594  
8595  
8596  
8597  
8598  
8599  
8600  
8601  
8602  
8603  
8604  
8605  
8606  
8607  
8608  
8609  
8610  
8611  
8612  
8613  
8614  
8615  
8616  
8617  
8618  
8619  
8620  
8621  
8622  
8623  
8624  
8625  
8626  
8627  
8628  
8629  
8630  
8631  
8632  
8633  
8634  
8635  
8636  
8637  
8638  
8639  
8640  
8641  
8642  
8643  
8644  
8645  
8646  
8647  
8648  
8649  
8650  
8651  
8652  
8653  
8654  
8655  
8656  
8657  
8658  
8659  
8660  
8661  
8662  
8663  
8664  
8665  
8666  
8667  
8668  
8669  
8670  
8671  
8672  
8673  
8674  
8675  
8676  
8677  
8678  
8679  
8680  
8681  
8682  
8683  
8684  
8685  
8686  
8687  
8688  
8689  
8690  
8691  
8692  
8693  
8694  
8695  
8696  
8697  
8698  
8699  
8700  
8701  
8702  
8703  
8704  
8705  
8706  
8707  
8708  
8709  
8710  
8711  
8712  
8713  
8714  
8715  
8716  
8717  
8718  
8719  
8720  
8721  
8722  
8723  
8724  
8725  
8726  
8727  
8728  
8729  
8730  
8731  
8732  
8733  
8734  
8735  
8736  
8737  
8738  
8739  
8740  
8741  
8742  
8743  
8744  
8745  
8746  
8747  
8748  
8749  
8750  
8751  
8752  
8753  
8754  
8755  
8756  
8757  
8758  
8759  
8760  
8761  
8762  
8763  
8764  
8765  
8766  
8767  
8768  
8769  
8770  
8771  
8772  
8773  
8774  
8775  
8776  
8777  
8778  
8779  
8780  
8781  
8782  
8783  
8784  
8785  
8786  
8787  
8788  
8789  
8790  
8791  
8792  
8793  
8794  
8795  
8796  
8797  
8798  
8799  
8800  
8801  
8802  
8803  
8804  
8805  
8806  
8807  
8808  
8809  
8810  
8811  
8812  
8813  
8814  
8815  
8816  
8817  
8818  
8819  
8820  
8821  
8822  
8823  
8824  
8825  
8826  
8827  
8828  
8829  
8830  
8831  
8832  
8833  
8834  
8835  
8836  
8837  
8838  
8839  
8840  
8841  
8842  
8843  
8844  
8845  
8846  
8847  
8848  
8849  
8850  
8851  
8852  
8853  
8854  
8855  
8856  
8857  
8858  
8859  
8860  
8861  
8862  
8863  
8864  
8865  
8866  
8867  
8868  
8869  
8870  
8871  
8872  
8873  
8874  
8875  
8876  
8877  
8878  
8879  
8880  
8881  
8882  
8883  
8884  
8885  
8886  
8887  
8888  
8889  
8890  
8891  
8892  
8893  
8894  
8895  
8896  
8897  
8898  
8899  
8900  
8901  
8902  
8903  
8904  
8905  
8906  
8907  
8908  
8909  
8910  
8911  
8912  
8913  
8914  
8915  
8916  
8917  
8918  
8919  
8920  
8921  
8922  
8923  
8924  
8925  
8926  
8927  
8928  
8929  
8930  
8931  
8932  
8933  
8934  
8935  
8936  
8937  
8938  
8939  
8940  
8941  
8942  
8943  
8944  
8945  
8946  
8947  
8948  
8949  
8950  
8951  
8952  
8953  
8954  
8955  
8956  
8957  
8958  
8959  
8960  
8961  
8962  
8963  
8964  
8965  
8966  
8967  
8968  
8969  
8970  
8971  
8972  
8973  
8974  
8975  
8976  
8977  
8978  
8979  
8980  
8981  
8982  
8983  
8984  
8985  
8986  
8987  
8988  
8989  
8990  
8991  
8992  
8993  
8994  
8995  
8996  
8997  
8998  
8999  
9000  
9001  
9002  
9003  
9004  
9005  
9006  
9007  
9008  
9009  
9010  
9011  
9012  
9013  
9014  
9015  
9016  
9017  
9018  
9019  
9020  
9021  
9022  
9023  
9024  
9025  
9026  
9027  
9028  
9029  
9030  
9031  
9032  
9033  
9034  
9035  
9036  
9037  
9038  
9039  
9040  
9041  
9042  
9043  
9044  
9045  
9046  
9047  
9048  
9049  
9050  
9051  
9052  
9053  
9054  
9055  
9056  
9057  
9058  
9059  
9060  
9061  
9062  
9063  
9064  
9065  
9066  
9067  
9068  
9069  
9070  
9071  
9072  
9073  
9074  
9075  
9076  
9077  
9078  
9079  
9080  
9081  
9082  
9083  
9084  
9085  
9086  
9087  
9088  
9089  
9090  
9091  
9092  
9093  
9094  
9095  
9096  
9097  
9098  
9099  
9100  
9101  
9102  
9103  
9104  
9105  
9106  
9107  
9108  
9109  
9110  
9111  
9112  
9113  
9114  
9115  
9116  
9117  
9118  
9119  
9120  
9121  
9122  
9123  
9124  
9125  
9126  
9127  
9128  
9129  
9130  
9131  
9132  
9133  
9134  
9135  
9136  
9137  
9138  
9139  
9140  
9141  
9142  
9143  
9144  
9145  
9146  
9147  
9148  
9149  
9150  
9151  
9152  
9153  
9154  
9155  
9156  
9157  
9158  
9159  
9160  
9161  
9162  
9163  
9164  
9165  
9166  
9167  
9168  
9169  
9170  
9171  
9172  
9173  
9174  
9175  
9176  
9177  
9178  
9179  
9180  
9181  
9182  
9183  
9184  
9185  
9186  
9187  
9188  
9189  
9190  
9191  
9192  
9193  
9194  
9195  
9196  
9197  
9198  
9199  
9200  
9201  
9202  
9203  
9204  
9205  
9206  
9207  
9208  
9209  
9210  
9211  
9212  
9213  
9214  
9215  
9216  
9217  
9218  
9219  
9220  
9221  
9222  
9223  
9224  
9225  
9226  
9227  
9228  
9229  
9230  
9231  
9232  
9233  
9234  
9235  
9236  
9237  
9238  
9239  
9240  
9241  
9242  
9243  
9244  
9245  
9246  
9247  
9248  
9249  
9250  
9251  
9252  
9253  
9254  
9255  
9256  
9257  
9258  
9259  
9260  
9261  
9262  
9263  
9264  
9265  
9266  
9267  
9268  
9269  
9270  
9271  
9272  
9273  
9274  
9275  
9276  
9277  
9278  
9279  
9280  
9281  
9282  
9283  
9284  
9285  
9286  
9287  
9288  
9289  
9290  
9291  
9292  
9293  
9294  
9295  
9296  
9297  
9298  
9299  
9300  
9301  
9302  
9303  
9304  
9305  
9306  
9307  
9308  
9309  
9310  
9311  
9312  
9313  
9314  
9315  
9316  
9317  
9318  
9319  
9320  
9321  
9322  
9323  
9324  
9325  
9326  
9327  
9328  
9329  
9330  
9331  
9332  
9333  
9334  
9335  
9336  
9337  
9338  
9339  
9340  
9341  
9342  
9343  
9344  
9345  
9346  
9347  
9348  
9349  
9350  
9351  
9352  
9353  
9354  
9355  
9356  
9357  
9358  
9359  
9360  
9361  
9362  
9363  
9364  
9365  
9366  
9367  
9368  
9369  
9370  
9371  
9372  
9373  
9374  
9375  
9376  
9377  
9378  
9379  
9380  
9381  
9382  
9383  
9384  
9385  
9386  
9387  
9388  
9389  
9390  
9391  
9392  
9393  
9394  
9395  
9396  
9397  
9398  
9399  
9400  
9401  
9402  
9403  
9404  
9405  
9406  
9407  
9408  
9409  
9410  
9411  
9412  
9413  
9414  
9415  
9416  
9417  
9418  
9419  
9420  
9421  
9422  
9423  
9424  
9425  
9426  
9427  
9428  
9429  
9430  
9431  
9432  
9433  
9434  
9435  
9436  
9437  
9438  
9439  
9440  
9441  
9442  
9443  
9444  
9445  
9446  
9447  
9448  
9449  
9450  
9451  
9452  
9453  
9454  
9455  
9456  
9457  
9458  
9459  
9460  
9461  
9462  
9463  
9464  
9465  
9466  
9467  
9468  
9469  
9470  
9471  
9472  
9473  
9474  
9475  
9476  
9477  
9478  
9479  
9480  
9481  
9482  
9483  
9484  
9485  
9486  
9487  
9488  
9489  
9490  
9491  
9492  
9493  
9494  
9495  
9496  
9497  
9498  
9499  
9500  
9501  
9502  
9503  
9504  
9505  
9506  
9507  
9508  
9509  
9510  
9511  
9512  
9513  
9514  
9515  
9516  
9517  
9518  
9519  
9520  
9521  
9522  
9523  
9524  
9525  
9526  
9527  
9528  
9529  
9530  
9531  
9532  
9533  
9534  
9535  
9536  
9537  
9538  
9539  
9540  
9541  
9542  
9543  
9544  
9545  
9546  
9547  
9548  
9549  
9550  
9551  
9552  
9553  
9554  
9555  
9556  
9557  
9558  
9559  
9560  
9561  
9562  
9563  
9564  
9565  
9566  
9567  
9568  
9569  
9570  
9571  
9572  
9573  
9574  
9575  
9576  
9577  
9578  
9579  
9580  
9581  
9582  
9583  
9584  
9585  
9586  
9587  
9588  
9589  
9590  
9591  
9592  
9593  
9594  
9595  
9596  
9597  
9598  
9599  
9600  
9601  
9602  
9603  
9604  
9605  
9606  
9607  
9608  
9609  
9610  
9611  
9612  
9613  
9614  
9615  
9616  
9617  
9618  
9619  
9620  
9621  
9622  
9623  
9624  
9625  
9626  
9627  
9628  
9629  
9630  
9631  
9632  
9633  
9634  
9635  
9636  
9637  
9638  
9639  
9640  
9641  
9642  
9643  
9644  
9645  
9646  
9647  
9648  
9649  
9650  
9651  
9652  
9653  
9654  
9655  
9656  
9657  
9658  
9659  
9660  
9661  
9662  
9663  
9664  
9665  
9666  
9667  
9668  
9669  
9670  
9671  
9672  
9673  
9674  
9675  
9676  
9677  
9678  
9679  
9680  
9681  
9682  
9683  
9684  
9685  
9686  
9687  
9688  
9689  
9690  
9691  
9692  
9693  
9694  
9695  
9696  
9697  
9698  
9699  
9700  
9701  
9702  
9703  
9704  
9705  
9706  
9707  
9708  
9709  
9710  
9711  
9712  
9713  
9714  
9715  
9716  
9717  
9718  
9719  
9720  
9721  
9722  
9723  
9724  
9725  
9726  
9727  
9728  
9729  
9730  
9731  
9732  
9733  
9734  
9735  
9736  
9737  
9738  
9739  
9740  
9741  
9742  
9743  
9744  
9745  
9746  
9747  
9748  
9749  
9750  
9751  
9752  
9753  
9754  
9755  
9756  
9757  
9758  
9759  
9760  
9761  
9762  
9763  
9764  
9765  
9766  
9767  
9768  
9769  
9770  
9771  
9772  
9773  
9774  
9775  
9776  
9777  
9778  
9779  
9780  
9781  
9782  
9783  
9784  
9785  
9786  
9787  
9788  
9789  
9790  
9791  
9792  
9793  
9794  
9795  
9796  
9797  
9798  
9799  
9800  
9801  
9802  
9803  
9804  
9805  
9806  
9807  
9808  
9809  
9810  
9811  
9812  
9813  
9814  
9815  
9816  
9817  
9818  
9819  
9820  
9821  
9822  
9823  
9824  
9825  
9826  
9827  
9828  
9829  
9830  
9831  
9832  
9833  
9834  
9835  
9836  
9837  
9838  
9839  
9840  
9841  
9842  
9843  
9844  
9845  
9846  
9847  
9848  
9849  
9850  
9851  
9852  
9853  
9854  
9855  
9856  
9857  
9858  
9859  
9860  
9861  
9862  
9863  
9864  
9865  
9866  
9867  
9868  
9869  
9870  
9871  
9872  
9873  
9874  
9875  
9876  
9877  
9878  
9879  
9880  
9881  
9882  
9883  
9884  
9885  
9886  
9887  
9888  
9889  
9890  
9891  
9892  
9893  
9894  
9895  
9896  
9897  
9898  
9899  
9900  
9901  
9902  
9903  
9904  
9905  
9906  
9907  
9908  
9909  
9910  
9911  
9912  
9913  
9914  
9915  
9916  
9917  
9918  
9919  
9920  
9921  
9922  
9923  
9924  
9925  
9926  
9927  
9928  
9929  
9930  
9931  
9932  
9933  
9934  
9935  
9936  
9937  
9938  
9939  
9940  
9941  
9942  
9943  
9944  
9945  
9946  
9947  
9948  
9949  
9950  
9951  
9952  
9953  
9954  
9955  
9956  
9957  
9958  
9959  
9960  
9961  
9962  
9963  
9964  
9965  
9966  
9967  
9968  
9969  
9970  
9971  
9972  
9973  
9974  
9975  
9976  
9977  
9978  
9979  
9980  
9981  
9982  
9983  
9984  
9985  
9986  
9987  
9988  
9989  
9990  
9991  
9992  
9993  
9994  
9995  
9996  
9997  
9998  
9999  
10000  
10001  
10002  
10003  
10004  
10005  
10006  
10007  
10008  
10009  
10010  
10011  
10012  
10013  
10014  
10015  
10016  
10017  
10018  
10019  
10020  
10021  
10022  
10023  
10024  
10025  
10026  
10027  
10028  
10029  
10030  
10031  
10032  
10033  
10034  
10035  
10036  
10037  
10038  
10039  
10040  
10041  
10042  
10043  
10044  
10045  
10046  
10047  
10048  
10049  
10050  
10051  
10052  
10053  
10054  
10055  
10056  
10057  
10058  
10059  
10060  
10061  
10062  
10063  
10064  
10065  
10066  
10067  
10068  
10069  
10070  
10071  
10072  
10073  
10074  
10075  
10076  
10077  
10078  
10079  
10080  
10081  
10082  
10083  
10084  
10085  
10086  
10087  
10088  
10089  
10090  
10091  
10092  
10093  
10094  
10095  
10096  
10097  
10098  
10099  
10100  
10101  
10102  
10103  
10104  
10105  
10106  
10107  
10108  
10109  
10110  
10111  
10112  
10113  
10114  
10115  
10116  
10117  
10118  
10119  
10120  
10121  
10122  
10123  
10124  
10125  
10126  
10127  
10128  
10129  
10130  
10131  
10132  
10133  
10134  
10135  
10136  
10137  
10138  
10139  
10140  
10141  
10142  
10143  
10144  
10145  
10146  
10147  
10148  
10149  
10150  
10151  
10152  
10153  
10154  
10155  
10156  
10157  
10158  
10159  
10160  
10161  
10162  
10163  
10164  
10165  
10166  
10167  
10168  
10169  
10170  
10171  
10172  
10173  
10174  
10175  
10176  
10177  
10178  
10179  
10180  
10181  
10182  
10183  
10184  
10185  
10186  
10187  
10188  
10189  
10190  
10191  
10192  
10193  
10194  
10195  
10196  
10197  
10198  
10199  
10200  
10201  
10202  
10203  
10204  
10205  
10206  
10207  
10208  
10209  
10210  
10211  
10212  
10213  
10214  
10215  
10216  
10217  
10218  
10219  
10220  
10221  
10222  
10223  
10224  
10225  
10226  
10227  
10228  
10229  
10230  
10231  
10232  
10233  
10234  
10235  
10236  
10237  
10238  
10239  
10240  
10241  
10242  
10243  
10244  
10245  
10246  
10247  
10248  
10249  
10250  
10251  
10252  
10253  
10254  
10255  
10256  
10257  
10258  
10259  
10260  
10261  
10262  
10263  
10264  
10265  
10266  
10267  
10268  
10269  
10270  
10271  
10272  
10273  
10274  
10275  
10276  
10277  
10278  
10279  
10280  
10281  
10282  
10283  
10284  
10285  
10286  
10287  
10288  
10289  
10290  
10291  
10292  
10293  
10294  
10295  
10296  
10297  
10298  
10299  
10300  
10301  
10302  
10303  
10304  
10305  
10306  
10307  
10308  
10309  
10310  
10311  
10312  
10313  
10314  
10315  
10316  
10317  
10318  
10319  
10320  
10321  
10322  
10323  
10324  
10325  
10326  
10327  
10328  
10329  
10330  
10331  
10332  
10333  
10334  
10335  
10336  
10337  
10338  
10339  
10340  
10341  
10342  
10343  
10344  
10345  
10346  
10347  
10348  
10349  
10350  
10351  
10352  
10353  
10354  
10355  
10356  
10357  
10358  
10359  
10360  
10361  
10362  
10363  
10364  
10365  
10366  
10367  
10368  
10369  
10370  
10371  
10372  
10373  
10374  
10375  
10376  
10377  
10378  
10379  
10380  
10381  
10382  
10383  
10384  
10385  
10386  
10387  
10388  
10389  
10390  
10391  
10392  
10393  
10394  
10395  
10396  
10397  
10398  
10399  
10400  
10401  
10402  
10403  
10404  
10405  
10406  
10407  
10408  
10409  
10410  
10411  
10412  
10413  
10414  
10415  
10416  
10417  
10418  
10419  
10420  
10421  
10422  
10423  
10424  
10425  
10426  
10427  
10428  
10429  
10430  
10431  
10432  
10433  
10434  
10435  
10436  
10437  
10438  
10439  
10440  
10441  
10442  
10443  
10444  
10445  
10446  
10447  
10448  
10449  
10450  
10451  
10452  
10453  
10454  
10455  
10456  
10457  
10458  
10459  
10460  
10461  
10462  
10463  
10464  
10465  
10466  
10467  
10468  
10469  
10470  
10471  
10472  
10473  
10474  
10475  
10476  
10477  
10478  
10479  
10480  
10481  
10482  
10483  
10484  
10485  
10486  
10487  
10488  
10489  
10490  
10491  
10492  
10493  
10494  
10495  
10496  
10497  
10498  
10499  
10500  
10501  
10502  
10503  
10504  
10505  
10506  
10507  
10508  
10509  
10510  
10511  
10512  
10513  
10514  
10515  
10516  
10517  
10518  
10519  
10520  
10521  
10522  
10523  
10524  
10525  
10526  
10527  
10528  
10529  
10530  
10531  
10532  
10533  
10534  
10535  
10536  
10537  
10538  
10539  
10540  
10541  
10542  
10543  
10544  
10545  
10546  
10547  
10548  
10549  
10550  
10551  
10552  
10553  
10554  
10555  
10556  
10557  
10558  
10559  
10560  
10561  
10562  
10563  
10564  
10565  
10566  
10567  
10568  
10569  
10570  
10571  
10572  
10573  
10574  
10575  
10576  
10577  
10578  
10579  
10580  
10581  
10582  
10583  
10584  
10585  
10586  
10587  
10588  
10589  
10590  
10591  
10592  
10593  
10594  
10595  
10596  
10597  
10598  
10599  
10600  
10601  
10602  
10603  
10604  
10605  
10606  
10607  
10608  
10609  
10610  
10611  
10612  
10613  
10614  
10615  
10616  
10617  
10618  
10619  
10620  
10621  
10622  
10623  
10624  
10625  
10626  
10627  
10628  
10629  
10630  
10631  
10632  
10633  
10634  
10635  
10636  
10637  
10638  
10639  
10640  
10641  
10642  
10643  
10644  
10645  
10646  
10647  
10648  
10649  
10650  
10651  
10652  
10653  
10654  
10655  
10656  
10657  
10658  
10659  
10660  
10661  
10662  
10663  
10664  
10665  
10666  
10667  
10668  
10669  
10670  
10671  
10672  
10673  
10674  
10675  
10676  
10677  
10678  
10679  
10680  
10681  
10682  
10683  
10684  
10685  
10686  
10687  
10688  
10689  
10690  
10691  
10692  
10693  
10694  
10695  
10696  
10697  
10698  
10699  
10700  
10701  
10702  
10703  
10704  
10705  
10706  
10707  
10708  
10709  
10710  
10711  
10712  
10713  
10714  
10715  
10716  
10717  
10718  
10719  
10720  
10721  
10722  
10723  
10724  
10725  
10726  
10727  
10728  
10729  
10730  
10731  
10732  
10733  
10734  
10735  
10736  
10737  
10738  
10739  
10740  
10741  
10742  
10743  
10744  
10745  
10746  
10747  
10748  
10749  
10750  
10751  
10752  
10753  
10754  
10755  
10756  
10757  
10758  
10759  
10760  
10761  
10762  
10763  
10764  
10765  
10766  
10767  
10768  
10769  
10770  
10771  
10772  
10773  
10774  
10775  
10776  
10777  
10778  
10779  
10780  
10781  
10782  
10783  
10784  
10785  
10786  
10787  
10788  
10789  
10790  
10791  
10792  
10793  
10794  
10795  
10796  
10797  
10798  
10799  
10800  
10801  
10802  
10803  
10804  
10805  
10806  
10807  
10808  
10809  
10810  
10811  
10812  
10813  
10814  
10815  
10816  
10817  
10818  
10819  
10820  
10821  
10822  
10823  
10824  
10825  
10826  
10827  
10828  
10829  
10830  
10831  
10832  
10833  
10834  
10835  
10836  
10837  
10838  
10839  
10840  
10841  
10842  
10843  
10844  
10845  
10846  
10847  
10848  
10849  
10850  
10851  
10852  
10853  
10854  
10855  
10856  
10857  
10858  
10859  
10860  
10861  
10862  
10863  
10864  
10865  
10866  
10867  
10868  
10869  
10870  
10871  
10872  
10873  
10874  
10875  
10876  
10877  
10878  
10879  
10880  
10881  
10882  
10883  
10884  
10885  
10886  
10887  
10888  
10889  
10890  
10891  
10892  
10893  
10894  
10895  
10896  
10897  
10898  
10899  
10900  
10901  
10902  
10903  
10904  
10905  
10906  
10907  
10908  
10909  
10910  
10911  
10912  
10913  
10914  
10915  
10916  
10917  
10918  
10919  
10920  
10921  
10922  
10923  
10924  
10925  
10926  
10927  
10928  
10929  
10930  
10931  
10932  
10933  
10934  
10935  
10936  
10937  
10938  
10939  
10940  
10941  
10942  
10943  
10944  
10945  
10946  
10947  
10948  
10949  
10950  
10951  
10952  
10953  
10954  
10955  
10956  
10957  
10958  
10959  
10960  
10961  
10962  
10963  
10964  
10965  
10966  
10967  
10968  
10969  
10970  
10971  
10972  
10973  
10974  
10975  
10976  
10977  
10978  
10979  
10980  
10981  
10982  
10983  
10984  
10985  
10986  
10987  
10988  
10989  
10990  
10991  
10992  
10993  
10994  
10995  
10996  
10997  
10998  
10999  
11000  
11001  
11002  
11003  
11004  
11005  
11006  
11007  
11008  
11009  
11010  
11011  
11012  
11013  
11014  
11015  
11016  
11017  
11018  
11019  
11020  
11021  
11022  
11023  
11024  
11025  
11026  
11027  
11028  
11029  
11030  
11031  
11032  
11033  
11034  
11035  
11036  
11037  
11038  
11039  
11040  
11041  
11042  
11043  
11044  
11045  
11046  
11047  
11048  
11049  
11050  
11051  
11052  
11053  
11054  
11055  
11056  
11057  
11058  
11059  
11060  
11061  
11062  
11063  
11064  
11065  
11066  
11067  
11068  
11069  
11070  
11071  
11072  
11073  
11074  
11075  
11076  
11077  
11078  
11079  
11080  
11081  
11082  
11083  
11084  
11085  
11086  
11087  
11088  
11089  
11090  
11091  
11092  
11093  
11094  
11095  
11096  
11097  
11098  
11099  
11100  
11101  
11102  
11103  
11104  
11105  
11106  
11107  
11108  
11109  
11110  
11111  
11112  
11113  
11114  
11115  
11116  
11117  
11118  
11119  
11120  
11121  
11122  
11123  
11124  
11125  
11126  
11127  
11128  
11129  
11130  
11131  
11132  
11133  
11134  
11135  
11136  
11137  
11138  
11139  
11140  
11141  
11142  
11143  
11144  
11145  
11146  
11147  
11148  
11149  
11150  
11151  
11152  
11153  
11154  
11155  
11156  
11157  
11158  
11159  
11160  
11161  
11162  
11163  
11164  
11165  
11166  
11167  
11168  
11169  
11170  
11171  
11172  
11173  
11174  
11175  
11176  
11177  
11178  
11179  
11180  
11181  
11182  
11183  
11184  
11185  
11186  
11187  
11188  
11189  
11190  
11191  
11192  
11193  
11194  
11195  
11196  
11197  
11198  
11199  
11200  
11201  
11202  
11203  
11204  
11205  
11206  
11207  
11208  
11209  
11210  
11211  
11212  
11213  
11214  
11215  
11216  
11217  
11218  
11219  
11220  
11221  
11222  
11223  
11224  
11225  
11226  
11227  
11228  
11229  
11230  
11231  
11232  
11233  
11234  
11235  
11236  
11237  
11238  
11239  
11240  
11241  
11242  
11243  
11244  
11245  
11246  
11247  
11248  
11249  
11250  
11251  
11252  
11253  
11254  
11255  
11256  
11257  
11258  
11259  
11260  
11261  
11262  
11263  
11264  
11265  
11266  
11267  
11268  
11269  
11270  
11271  
11272  
11273  
11274  
11275  
11276  
11277  
11278  
11279  
11280  
11281  
11282  
11283  
11284  
11285  
11286  
11287  
11288  
11289  
11290  
11291  
11292  
11293  
11294  
11295  
11296  
11297  
11298  
11299  
11300  
11301  
11302  
11303  
11304  
11305  
11306  
11307  
11308  
11309  
11310  
11311  
11312  
11313  
11314  
11315  
11316  
11317  
11318  
11319  
11320  
11321  
11322  
11323  
11324  
11325  
11326  
11327  
11328  
11329  
11330  
11331  
11332  
11333  
11334  
11335  
11336  
11337  
11338  
11339  
11340  
11341  
11342  
11343  
11344  
11345  
11346  
11347  
11348  
11349  
11350  
11351  
11352  
11353  
11354  
11355  
11356  
11357  
11358  
11359  
11360  
11361  
11362  
11363  
11364  
11365  
11366  
11367  
11368  
11369  
11370  
11371  
11372  
11373  
11374  
11375  
11376  
11377  
11378  
11379  
11380  
11381  
11382  
11383  
11384  
11385  
11386  
11387  
11388  
11389  
11390  
11391  
11392  
11393  
11394  
11395  
11396  
11397  
11398  
11399  
11400  
11401  
11402  
11403  
11404  
11405  
11406  
11407  
11408  
11409  
11410  
11411  
11412  
11413  
11414  
11415  
11416  
11417  
11418  
11419  
11420  
11421  
11422  
11423  
11424  
11425  
11426  
11427  
11428  
11429  
11430  
11431  
11432  
11433  
11434  
11435  
11436  
11437  
11438  
11439  
11440  
11441  
11442  
11443  
11444  
11445  
11446  
11447  
11448  
11449  
11450  
11451  
11452  
11453  
11454  
11455  
11456  
11457  
11458  
11459  
11460  
11461  
11462  
11463  
11464  
11465  
11466  
11467  
11468  
11469  
11470  
11471  
11472  
11473  
11474  
11475  
11476  
11477  
11478  
11479  
11480  
11481  
11482  
11483  
11484  
11485  
11486  
11487  
11488  
11489  
11490  
11491  
11492  
11493  
11494  
11495  
11496  
11497  
11498  
11499  
11500  
11501  
11502  
11503  
11504  
11505  
11506  
11507  
11508  
11509  
11510  
11511  
11512  
11513  
11514  
11515  
11516  
11517  
11518  
11519  
11520  
11521  
11522  
11523  
11524  
11525  
11526  
11527  
11528  
11529  
11530  
11531  
11532  
11533  
11534  
11535  
11536  
11537  
11538  
11539  
11540  
11541  
11542  
11543  
11544  
11545  
11546  
11547  
11548  
11549  
11550  
11551  
11552  
11553  
11554  
11555  
11556  
11557  
11558  
11559  
11560  
11561  
11562  
11563  
11564  
11565  
11566  
11567  
11568  
11569  
11570  
11571  
11572  
11573  
11574  
11575  
11576  
11577  
11578  
11579  
11580  
11581  
11582  
11583  
11584  
11585  
11586  
11587  
11588  
11589  
11590  
11591  
11592  
11593  
11594  
11595  
11596  
11597  
11598  
11599  
11600  
11601  
11602  
11603  
11604  
11605  
11606  
11607  
11608  
11609  
11610  
11611  
11612  
11613  
11614  
11615  
11616  
11617  
11618  
11619  
11620  
11621  
11622  
11623  
11624  
11625  
11626  
11627  
11628  
11629  
11630  
11631  
11632  
11633  
11634  
11635  
11636  
11637  
11638  
11639  
11640  
11641  
11642  
11643  
11644  
11645  
11646  
11647  
11648  
11649  
11650  
11651  
11652  
11653  
11654  
11655  
11656  
11657  
11658  
11659  
11660  
11661  
11662  
11663  
11664  
11665  
11666  
11667  
11668  
11669  
11670  
11671  
11672  
11673  
11674  
11675  
11676  
11677  
11678  
11679  
11680  
11681  
11682  
11683  
11684  
11685  
11686  
11687  
11688  
11689  
11690  
11691  
11692  
11693  
11694  
11695  
11696  
11697  
11698  
11699  
11700  
11701  
11702  
11703  
11704  
11705  
11706  
11707  
11708  
11709  
11710  
11711  
11712  
11713  
11714  
11715  
11716  
11717  
11718  
11719  
11720  
11721  
11722  
11723  
11724  
11725  
11726  
11727  
11728  
11729  
11730  
11731  
11732  
11733  
11734  
11735  
11736  
11737  
11738  
11739  
11740  
11741  
11742  
11743  
11744  
11745  
11746  
11747  
11748  
11749  
11750  
11751  
11752  
11753  
11754  
11755  
11756  
11757  
11758  
11759  
11760  
11761  
11762  
11763  
11764  
11765  
11766  
11767  
11768  
11769  
11770  
11771  
11772  
11773  
11774  
11775  
11776  
11777  
11778  
11779  
11780  
11781  
11782  
11783  
11784  
11785  
11786  
11787  
11788  
11789  
11790  
11791  
11792  
11793  
11794  
11795  
11796  
11797  
11798  
11799  
11800  
11801  
11802  
11803  
11804  
11805  
11806  
11807  
11808  
11809  
11810  
11811  
11812  
11813  
11814  
11815  
11816  
11817  
11818  
11819  
11820  
11821  
11822  
11823  
11824  
11825  
11826  
11827  
11828  
11829  
11830  
11831  
11832  
11833  
11834  
11835  
11836  
11837  
11838  
11839  
11840  
11841  
11842  
11843  
11844  
11845  
11846  
11847  
11848  
11849  
11850  
11851  
11852  
11853  
11854  
11855  
11856  
11857  
11858  
11859  
11860  
11861  
11862  
11863  
11864  
11865  
11866  
11867  
11868  
11869  
11870  
11871  
11872  
11873  
11874  
11875  
11876  
11877  
11878  
11879  
11880  
11881  
11882  
11883  
11884  
11885  
11886  
11887  
11888  
11889  
11890  
11891  
11892  
11893  
11894  
11895  
11896  
11897  
11898  
11899  
11900  
11901  
11902  
11903  
11904  
11905  
11906  
11907  
11908  
11909  
11910  
11911  
11912  
11913  
11914  
11915  
11916  
11917  
11918  
11919  
11920  
11921  
11922  
11923  
11924  
11925  
11926  
11927  
11928  
11929  
11930  
11931  
11932  
11933  
11934  
11935  
11936  
11937  
11938  
11939  
11940  
11941  
11942  
11943  
11944  
11945  
11946  
11947  
11948  
11949  
11950  
11951  
11952  
11953  
11954  
11955  
11956  
11957  
11958  
11959  
11960  
11961  
11962  
11963  
11964  
11965  
11966  
11967  
11968  
11969  
11970  
11971  
11972  
11973  
11974  
11975  
11976  
11977  
11978  
11979  
11980  
11981  
11982  
11983  
11984  
11985  
11986  
11987  
11988  
11989  
11990  
11991  
11992  
11993  
11994  
11995  
11996  
11997  
11998  
11999  
12000  
12001  
12002  
12003  
12004  
12005  
12006  
12007  
12008  
12009  
12010  
12011  
12012  
12013  
12014  
12015  
12016  
12017  
12018  
12019  
12020  
12021  
12022  
12023  
12024  
12025  
12026  
12027  
12028  
12029  
12030  
12031  
12032  
12033  
12034  
12035  
12036  
12037  
12038  
12039  
12040  
12041  
12042  
12043  
12044  
12045  
12046  
12047  
12048  
12049  
12050  
12051  
12052  
12053  
12054  
12055  
12056  
12057  
12058  
12059  
12060  
12061  
12062  
12063  
12064  
12065  
12066  
12067  
12068  
12069  
12070  
12071  
12072  
12073  
12074  
12075  
12076  
12077  
12078  
12079  
12080  
12081  
12082  
12083  
12084  
12085  
12086  
12087  
12088  
12089  
12090  
12091  
12092  
12093  
12094  
12095  
12096  
12097  
12098  
12099  
12100  
12101  
12102  
12103  
12104  
12105  
12106  
12107  
12108  
12109  
12110  
12111  
12112  
12113  
12114  
12115  
12116  
12117  
12118  
12119  
12120  
12121  
12122  
12123  
12124  
12125  
12126  
12127  
12128  
12129  
12130  
12131  
12132  
12133  
12134  
12135  
12136  
12137  
12138  
12139  
12140  
12141  
12142  
12143  
12144  
12145  
12146  
12147  
12148  
12149  
12150  
12151  
12152  
12153  
12154  
12155  
12156  
12157  
12158  
12159  
12160  
12161  
12162  
12163  
12164  
12165  
12166  
12167  
12168  
12169  
12170  
12171  
12172  
12173  
12174  
12175  
12176  
12177  
12178  
12179  
12180  
12181  
12182  
12183  
12184  
12185  
12186  
12187  
12188  
12189  
12190  
12191  
12192  
12193  
12194  
12195  
12196  
12197  
12198  
12199  
12200  
12201  
12202  
12203  
12204  
12205  
12206  
12207  
12208  
12209  
12210  
12211  
12212  
12213  
12214  
12215  
12216  
12217  
12218  
12219  
12220  
12221  
12222  
12223  
12224  
12225  
12226  
12227  
12228  
12229  
12230  
12231  
12232  
12233  
12234  
12235  
12236  
12237  
12238  
12239  
12240  
12241  
12242  
12243  
12244  
12245  
12246  
12247  
12248  
12249  
12250  
12251  
12252  
12253  
12254  
12255  
12256  
12257  
12258  
12259  
12260  
12261  
12262  
12263  
12264  
12265  
12266  
12267  
12268  
12269  
12270  
12271  
12272  
12273  
12274  
12275  
12276  
12277  
12278  
12279  
12280  
12281  
12282  
12283  
12284  
12285  
12286  
12287  
12288  
12289  
12290  
12291  
12292  
12293  
12294  
12295  
12296  
12297  
12298  
12299  
12300  
12301  
12302  
12303  
12304  
12305  
12306  
12307  
12308  
12309  
12310  
12311  
12312  
12313  
12314  
12315  
12316  
12317  
12318  
12319  
12320  
12321  
12322  
12323  
12324  
12325  
12326  
12327  
12328  
12329  
12330  
12331  
12332  
12333  
12334  
12335  
12336  
12337  
12338  
12339  
12340  
12341  
12342  
12343  
12344  
12345  
12346  
12347  
12348  
12349  
12350  
12351  
12352  
12353  
12354  
12355  
12356  
12357  
12358  
12359  
12360  
12361  
12362  
12363  
12364  
12365  
12366  
12367  
12368  
12369  
12370  
12371  
12372  
12373  
12374  
12375  
12376  
12377  
12378  
12379  
12380  
12381  
12382  
12383  
12384  
12385  
12386  
12387  
12388  
12389  
12390  
12391  
12392  
12393  
12394  
12395  
12396  
12397  
12398  
12399  
12400  
12401  
12402  
12403  
12404  
12405  
12406  
12407  
12408  
12409  
12410  
12411  
12412  
12413  
12414  
12415  
12416  
12417  
12418  
12419  
12420  
12421  
12422  
12423  
12424  
12425  
12426  
12427  
12428  
12429  
12430  
12431  
12432  
12433  
12434  
12435  
12436  
12437  
12438  
12439  
12440  
12441  
12442  
12443  
12444  
12445  
12446  
12447  
12448  
12449  
12450  
12451  
12452  
12453  
12454  
12455  
12456  
12457  
12458  
12459  
12460  
12461  
12462  
12463  
12464  
12465  
12466  
12467  
12468  
12469  
12470  
12471  
12472  
12473  
12474  
12475  
12476  
12477  
12478  
12479  
12480  
12481  
12482  
12483  
12484  
12485  
12486  
12487  
12488  
12489  
12490  
12491  
12492  
12493  
12494  
12495  
12496  
12497  
12498  
12499  
12500  
12501  
12502  
12503  
12504  
12505  
12506  
12507  
12508  
12509  
12510  
12511  
12512  
12513  
12514  
12515  
12516  
12517  
12518  
12519  
12520  
12521  
12522  
12523  
12524  
12525  
12526  
12527  
12528  
12529  
12530  
12531  
12532  
12533  
12534  
12535  
12536  
12537  
12538  
12539  
12540  
12541  
12542  
12543  
12544  
12545  
12546  
12547  
12548  
12549  
12550  
12551  
12552  
12553  
12554  
12555  
12556  
12557  
12558  
12559  
12560  
12561  
12562  
12563  
12564  
12565  
12566  
12567  
12568  
12569  
12570  
12571  
12572  
12573  
12574  
12575  
12576  
12577  
12578  
12579  
12580  
12581  
12582  
12583  
12584  
12585  
12586  
12587  
12588  
12589  
12590  
12591  
12592  
12593  
12594  
12595  
12596  
12597  
12598  
12599  
12600  
12601  
12602  
12603  
12604  
12605  
12606  
12607  
12608  
12609  
12610  
12611  
12612  
12613  
12614  
12615  
12616  
12617  
12618  
12619  
12620  
12621  
12622  
12623  
12624  
12625  
12626  
12627  
12628  
12629  
12630  
12631  
12632  
12633  
12634  
12635  
12636  
12637  
12638  
12639  
12640  
12641  
12642  
12643  
12644  
12645  
12646  
12647  
12648  
12649  
12650  
12651  
12652  
12653  
12654  
12655  
12656  
12657  
12658  
12659  
12660  
12661  
12662  
12663  
12664  
12665  
12666  
12667  
12668  
12669  
12670  
12671  
12672  
12673  
12674  
12675  
12676  
12677  
12678  
12679  
12680  
12681  
12682  
12683  
12684  
12685  
12686  
12687  
12688  
12689  
12690  
12691  
12692  
12693  
12694  
12695  
12696  
12697  
12698  
12699  
12700  
12701  
12702  
12703  
12704  
12705  
12706  
12707  
12708  
12709  
12710  
12711  
12712  
12713  
12714  
12715  
12716  
12717  
12718  
12719  
12720  
12721  
12722  
12723  
12724  
12725  
12726  
12727  
12728  
12729  
12730  
12731  
12732  
12733  
12734  
12735  
12736  
12737  
12738  
12739  
12740  
12741  
12742  
12743  
12744  
12745  
12746  
12747  
12748  
12749  
12750  
12751  
12752  
12753  
12754  
12755  
12756  
12757  
12758  
12759  
12760  
12761  
12762  
12763  
12764  
12765  
12766  
12767  
12768  
12769  
12770  
12771  
12772  
12773  
12774  
12775  
12776  
12777  
12778  
12779  
12780  
12781  
12782  
12783  
12784  
12785  
12786  
12787  
12788  
12789  
12790  
12791  
12792  
12793  
12794  
12795  
12796  
12797  
12798  
12799  
12800  
12801  
12802  
12803  
12804  
12805  
12806  
12807  
12808  
12809  
12810  
12811  
12812  
12813  
12814  
12815  
12816  
12817  
12818  
12819  
12820  
12821  
12822  
12823  
12824  
12825  
12826  
12827  
12828  
12829  
12830  
12831  
12832  
12833  
12834  
12835  
12836  
12837  
12838  
12839  
12840  
12841  
12842  
12843  
12844  
12845  
12846  
12847  
12848  
12849  
12850  
12851  
12852  
12853  
12854  
12855  
12856  
12857  
12858  
12859  
12860  
12861  
12862  
12863  
12864  
12865  
12866  
12867  
12868  
12869  
12870  
12871  
12872  
12873  
12874  
12875  
12876  
12877  
12878  
12879  
12880  
12881  
12882  
12883  
12884  
12885  
12886  
12887  
12888  
12889  
12890  
12891  
12892  
12893  
12894  
12895  
12896  
12897  
12898  
12899  
12900  
12901  
12902  
12903  
12904  
12905  
12906  
12907  
12908  
12909  
12910  
12911  
12912  
12913  
12914  
12915  
12916  
12917  
12918  
12919  
12920  
12921  
12922  
12923  
12924  
12925  
12926  
12927  
12928  
12929  
12930  
12931  
12932  
12933  
12934  
12935  
12936  
12937  
12938  
12939  
12940  
12941  
12942  
12943  
12944  
12945  
12946  
12947  
12948  
12949  
12950  
12951  
12952  
12953  
12954  
12955  
12956  
12957  
12958  
12959  
12960  
12961  
12962  
12963  
12964  
12965  
12966  
12967  
12968  
12969  
12970  
12971  
12972  
12973  
12974  
12975  
12976  
12977  
12978  
12979  
12980  
12981  
12982  
12983  
12984  
12985  
12986  
12987  
12988  
12989  
12990  
12991  
12992  
12993  
12994  
12995  
12996  
12997  
12998  
12999  
13000  
13001  
13002  
13003  
13004  
13005  
13006  
13007  
13008  
13009  
13010  
13011  
13012  
13013  
13014  
13015  
13016  
13017  
13018  
13019  
13020  
13021  
13022  
13023  
13024  
13025  
13026  
13027  
13028  
13029  
13030  
13031  
13032  
13033  
13034  
13035  
13036  
13037  
13038  
13039  
13040  
13041  
13042  
13043  
13044  
13045  
13046  
13047  
13048  
13049  
13050  
13051  
13052  
13053  
13054  
13055  
13056  
13057  
13058  
13059  
13060  
13061  
13062  
13063  
13064  
13065  
13066  
13067  
13068  
13069  
13070  
13071  
13072  
13073  
13074  
13075  
13076  
13077  
13078  
13079  
13080  
13081  
13082  
13083  
13084  
13085  
13086  
13087  
13088  
13089  
13090  
13091  
13092  
13093  
13094  
13095  
13096  
13097  
13098  
13099  
13100  
13101  
13102  
13103  
13104  
13105  
13106  
13107  
13108  
13109  
13110  
13111  
13112  
13113  
13114  
13115  
13116  
13117  
13118  
13119  
13120  
13121  
13122  
13123  
13124  
13125  
13126  
13127  
13128  
13129  
13130  
13131  
13132  
13133  
13134  
13135  
13136  
13137  
13138  
13139  
13140  
13141  
13142  
13143  
13144  
13145  
13146  
13147  
13148  
13149  
13150  
13151  
13152  
13153  
13154  
13155  
13156  
13157  
13158  
13159  
13160  
13161  
13162  
13163  
13164  
13165  
13166  
13167  
13168  
13169  
13170  
13171  
13172  
13173  
13174  
13175  
13176  
13177  
13178  
13179  
13180  
13181  
13182  
13183  
13184  
13185  
13186  
13187  
13188  
13189  
13190  
13191  
13192  
13193  
13194  
13195  
13196  
13197  
13198  
13199  
13200  
13201  
13202  
13203  
13204  
13205  
13206  
13207  
13208  
13209  
13210  
13211  
13212  
13213  
13214  
13215  
13216  
13217  
13218  
13219  
13220  
13221  
13222  
13223  
13224  
13225  
13226  
13227  
13228  
13229  
13230  
13231  
13232  
13233  
13234  
13235  
13236  
13237  
13238  
13239  
13240  
13241  
13242  
13243  
13244  
13245  
13246  
13247  
13248  
13249  
13250  
13251  
13252  
13253  
13254  
13255  
13256  
13257  
13258  
13259  
13260  
13261  
13262  
13263  
13264  
13265  
13266  
13267  
13268  
13269  
13270  
13271  
13272  
13273  
13274  
13275  
13276  
13277  
13278  
13279  
13280  
13281  
13282  
13283  
13284  
13285  
13286  
13287  
13288  
13289  
13290  
13291  
13292  
13293  
13294  
13295  
13296  
13297  
13298  
13299  
13300  
13301  
13302  
13303  
13304  
13305  
13306  
13307  
13308  
13309  
13310  
13311  
13312  
13313  
13314  
13315  
13316  
13317  
13318  
13319  
13320  
13321  
13322  
13323  
13324  
13325  
13326  
13327  
13328  
13329  
13330  
13331  
13332  
13333  
13334  
13335  
13336  
13337  
13338  
13339  
13340  
13341  
13342  
13343  
13344  
13345  
13346  
13347  
13348  
13349  
13350  
13351  
13352  
13353  
13354  
13355  
13356  
13357  
13358  
13359  
13360  
13361  
13362  
13363  
13364  
13365  
13366  
13367  
13368  
13369  
13370  
13371  
13372  
13373  
13374  
13375  
13376  
13377  
13378  
13379  
13380  
13381  
13382  
13383  
13384  
13385  
13386  
13387  
13388  
13389  
13390  
13391  
13392  
13393  
13394  
13395  
13396  
13397  
13398  
13399  
13400  
13401  
13402  
13403  
13404  
13405  
13406  
13407  
13408  
13409  
13410  
13411  
13412  
13413  
13414  
13415  
13416  
13417  
13418  
13419  
13420  
13421  
13422  
13423  
13424  
13425  
13426  
13427  
13428  
13429  
13430  
13431  
13432  
13433  
13434  
13435  
13436  
13437  
13438  
13439  
13440  
13441  
13442  
13443  
13444  
13445  
13446  
13447  
13448  
13449  
13450  
13451  
13452  
13453  
13454  
13455  
13456  
13457  
13458  
13459  
13460  
13461  
13462  
13463  
13464  
13465  
13466  
13467  
13468  
13469  
13470  
13471  
13472  
13473  
13474  
13475  
13476  
13477  
13478  
13479  
13480  
13481  
13482  
13483  
13484  
13485  
13486  
13487  
13488  
13489  
13490  
13491  
13492  
13493  
13494  
13495  
13496  
13497  
13498  
13499  
13500  
13501  
13502  
13503  
13504  
13505  
13506  
13507  
13508  
13509  
13510  
13511  
13512  
13513  
13514  
13515  
13516  
13517  
13518  
13519  
13520  
13521  
13522  
13523  
13524  
13525  
13526  
13527  
13528  
13529  
13530  
13531  
13532  
13533  
13534  
13535  
13536  
13537  
13538  
13539  
13540  
13541  
13542  
13543  
13544  
13545  
13546  
13547  
13548  
13549  
13550  
13551  
13552  
13553  
13554  
13555  
13556  
13557  
13558  
13559  
13560  
13561  
13562  
13563  
13564  
13565  
13566  
13567  
13568  
13569  
13570  
13571  
13572  
13573  
13574  
13575  
13576  
13577  
13578  
13579  
13580  
13581  
13582  
13583  
13584  
13585  
13586  
13587  
13588  
13589  
13590  
13591  
13592  
13593  
13594  
13595  
13596  
13597  
13598  
13599  
13600  
13601  
13602  
13603  
13604  
13605  
13606  
13607  
13608  
13609  
13610  
13611  
13612  
13613  
13614  
13615  
13616  
13617  
13618  
13619  
13620  
13621  
13622  
13623  
13624  
13625  
13626  
13627  
13628  
13629  
13630  
13631  
13632  
13633  
13634  
13635  
13636  
13637  
13638  
13639  
13640  
13641  
13642  
13643  
13644  
13645  
13646  
13647  
13648  
13649  
13650  
13651  
13652  
13653  
13654  
13655  
13656  
13657  
13658  
13659  
13660  
13661  
13662  
13663  
13664  
13665  
13666  
13667  
13668  
13669  
13670  
13671  
13672  
13673  
13674  
13675  
13676  
13677  
13678  
13679  
13680  
13681  
13682  
13683  
13684  
13685  
13686  
13687  
13688  
13689  
13690  
13691  
13692  
13693  
13694  
13695  
13696  
13697  
13698  
13699  
13700  
13701  
13702  
13703  
13704  
13705  
13706  
13707  
13708  
13709  
13710  
13711  
13712  
13713  
13714  
13715  
13716  
13717  
13718  
13719  
13720  
13721  
13722  
13723  
13724  
13725  
13726  
13727  
13728  
13729  
13730  
13731  
13732  
13733  
13734  
13735  
13736  
13737  
13738  
13739  
13740  
13741  
13742  
13743  
13744  
13745  
13746  
13747  
13748  
13749  
13750  
13751  
13752  
13753  
13754  
13755  
13756  
13757  
13758  
13759  
13760  
13761  
13762  
13763  
13764  
13765  
13766  
13767  
13768  
13769  
13770  
13771  
13772  
13773  
13774  
13775  
13776  
13777  
13778  
13779  
13780  
13781  
13782  
13783  
13784  
13785  
13786  
13787  
13788  
13789  
13790  
13791  
13792  
13793  
13794  
13795  
13796  
13797  
13798  
13799  
13800  
13801  
13802  
13803  
13804  
13805  
13806  
13807  
13808  
13809  
13810  
13811  
13812  
13813  
13814  
13815  
13816  
13817  
13818  
13819  
13820  
13821  
13822  
13823  
13824  
13825  
13826  
13827  
13828  
13829  
13830  
13831  
13832  
13833  
13834  
13835  
13836  
13837  
13838  
13839  
13840  
13841  
13842  
13843  
13844  
13845  
13846  
13847  
13848  
13849  
13850  
13851  
13852  
13853  
13854  
13855  
13856  
13857  
13858  
13859  
13860  
13861  
13862  
13863  
13864  
13865  
13866  
13867  
13868  
13869  
13870  
13871  
13872  
13873  
13874  
13875  
13876  
13877  
13878  
13879  
13880  
13881  
13882  
13883  
13884  
13885  
13886  
13887  
13888  
13889  
13890  
13891  
13892  
13893  
13894  
13895  
13896  
13897  
13898  
13899  
13900  
13901  
13902  
13903  
13904  
13905  
13906  
13907  
13908  
13909  
13910  
13911  
13912  
13913  
13914  
13915  
13916  
13917  
13918  
13919  
13920  
13921  
13922  
13923  
13924  
13925  
13926  
13927  
13928  
13929  
13930  
13931  
13932  
13933  
13934  
13935  
13936  
13937  
13938  
13939  
13940  
13941  
13942  
13943  
13944  
13945  
13946  
13947  
13948  
13949  
13950  
13951  
13952  
13953  
13954  
13955  
13956  
13957  
13958  
13959  
13960  
13961  
13962  
13963  
13964  
13965  
13966  
13967  
13968  
13969  
13970  
13971  
13972  
13973  
13974  
13975  
13976  
13977  
13978  
13979  
13980  
13981  
13982  
13983  
13984  
13985  
13986  
13987  
13988  
13989  
13990  
13991  
13992  
13993  
13994  
13995  
13996  
13997  
13998  
13999  
14000  
14001  
14002  
14003  
14004  
14005  
14006  
14007  
14008  
14009  
14010  
14011  
14012  
14013  
14014  
14015  
14016  
14017  
14018  
14019  
14020  
14021  
14022  
14023  
14024  
14025  
14026  
14027  
14028  
14029  
14030  
14031  
14032  
14033  
14034  
14035  
14036  
14037  
14038  
14039  
14040  
14041  
14042  
14043  
14044  
14045  
14046  
14047  
14048  
14049  
14050  
14051  
14052  
14053  
14054  
14055  
14056  
14057  
14058  
14059  
14060  
14061  
14062  
14063  
14064  
14065  
14066  
14067  
14068  
14069  
14070  
14071  
14072  
14073  
14074  
14075  
14076  
14077  
14078  
14079  
14080  
14081  
14082  
14083  
14084  
14085  
14086  
14087  
14088  
14089  
14090  
14091  
14092  
14093  
14094  
14095  
14096  
14097  
14098  
14099  
14100  
14101  
14102  
14103  
14104  
14105  
14106  
14107  
14108  
14109  
14110  
14111  
14112  
14113  
14114  
14115  
14116  
14117  
14118  
14119  
14120  
14121  
14122  
14123  
14124  
14125  
14126  
14127  
14128  
14129  
14130  
14131  
14132  
14133  
14134  
14135  
14136  
14137  
14138  
14139  
14140  
14141  
14142  
14143  
14144  
14145  
14146  
14147  
14148  
14149  
14150  
14151  
14152  
14153  
14154  
14155  
14156  
14157  
14158  
14159  
14160  
14161  
14162  
14163  
14164  
14165  
14166  
14167  
14168  
14169  
14170  
14171  
14172  
14173  
14174  
14175  
14176  
14177  
14178  
14179  
14180  
14181  
14182  
14183  
14184  
14185  
14186  
14187  
14188  
14189  
14190  
14191  
14192  
14193  
14194  
14195  
14196  
14197  
14198  
14199  
14200  
14201  
14202  
14203  
14204  
14205  
14206  
14207  
14208  
14209  
14210  
14211  
14212  
14213  
14214  
14215  
14216  
14217  
14218  
14219  
14220  
14221  
14222  
14223  
14224  
14225  
14226  
14227  
14228  
14229  
14230  
14231  
14232  
14233  
14234  
14235  
14236  
14237  
14238  
14239  
14240  
14241  
14242  
14243  
14244  
14245  
14246  
14247  
14248  
14249  
14250  
14251  
14252  
14253  
14254  
14255  
14256  
14257  
14258  
14259  
14260  
14261  
14262  
14263  
14264  
14265  
14266  
14267  
14268  
14269  
14270  
14271  
14272  
14273  
14274  
14275  
14276  
14277  
14278  
14279  
14280  
14281  
14282  
14283  
14284  
14285  
14286  
14287  
14288  
14289  
14290  
14291  
14292  
14293  
14294  
14295  
14296  
14297  
14298  
14299  
14300  
14301  
14302  
14303  
14304  
14305  
14306  
14307  
14308  
14309  
14310  
14311  
14312  
14313  
14314  
14315  
14316  
14317  
14318  
14319  
14320  
14321  
14322  
14323  
14324  
14325  
14326  
14327  
14328  
14329  
14330  
14331  
14332  
14333  
14334  
14335  
14336  
14337  
14338  
14339  
14340  
14341  
14342  
14343  
14344  
14345  
14346  
14347  
14348  
14349  
14350  
14351  
14352  
14353  
14354  
14355  
14356  
14357  
14358  
14359  
14360  
14361  
14362  
14363  
14364  
14365  
14366  
14367  
14368  
14369  
14370  
14371  
14372  
14373  
14374  
14375  
14376  
14377  
14378  
14379  
14380  
14381  
14382  
14383  
14384  
14385  
14386  
14387  
14388  
14389  
14390  
14391  
14392  
14393  
14394  
14395  
14396  
14397  
14398  
14399  
14400  
14401  
14402  
14403  
14404  
14405  
14406  
14407  
14408  
14409  
14410  
14411  
14412  
14413  
14414  
14415  
14416  
14417  
14418  
14419  
14420  
14421  
14422  
14423  
14424  
14425  
14426  
14427  
14428  
14429  
14430  
14431  
14432  
14433  
14434  
14435  
14436  
14437  
14438  
14439  
14440  
14441  
14442  
14443  
14444  
14445  
14446  
14447  
14448  
14449  
14450  
14451  
14452  
14453  
14454  
14455  
14456  
14457  
14458  
14459  
14460  
14461  
14462  
14463  
14464  
14465  
14466  
14467  
14468  
14469  
14470  
14471  
14472  
14473  
14474  
14475  
14476  
14477  
14478  
14479  
14480  
14481  
14482  
14483  
14484  
14485  
14486  
14487  
14488  
14489  
14490  
14491  
14492  
14493  
14494  
14495  
14496  
14497  
14498  
14499  
14500  
14501  
14502  
14503  
14504  
14505  
14506  
14507  
14508  
14509  
14510  
14511  
14512  
14513  
14514  
14515  
14516  
14517  
14518  
14519  
14520  
14521  
14522  
14523  
14524  
14525  
14526  
14527  
14528  
14529  
14530  
14531  
14532  
14533  
14534  
14535  
14536  
14537  
14538  
14539  
14540  
14541  
14542  
14543  
14544  
14545  
14546  
14547  
14548  
14549  
14550  
14551  
14552  
14553  
14554  
14555  
14556  
14557  
14558  
14559  
14560  
14561  
14562  
14563  
14564  
14565  
14566  
14567  
14568  
14569  
14570  
14571  
14572  
14573  
14574  
14575  
14576  
14577  
14578  
14579  
14580  
14581  
14582  
14583  
14584  
14585  
14586  
14587  
14588  
14589  
14590  
14591  
14592  
14593  
14594  
14595  
14596  
14597  
14598  
14599  
14600  
14601  
14602  
14603  
14604  
14605  
14606  
14607  
14608  
14609  
14610  
14611  
14612  
14613  
14614  
14615  
14616  
14617  
14618  
14619  
14620  
14621  
14622  
14623  
14624  
14625  
14626  
14627  
14628  
14629  
14630  
14631  
14632  
14633  
14634  
14635  
14636  
14637  
14638  
14639  
14640  
14641  
14642  
14643  
14644  
14645  
14646  
14647  
14648  
14649  
14650  
14651  
14652  
14653  
14654  
14655  
14656  
14657  
14658  
14659  
14660  
14661  
14662  
14663  
14664  
14665  
14666  
14667  
14668  
14669  
14670  
14671  
14672  
14673  
14674  
14675  
14676  
14677  
14678  
14679  
14680  
14681  
14682  
14683  
14684  
14685  
14686  
14687  
14688  
14689  
14690  
14691  
14692  
14693  
14694  
14695  
14696  
14697  
14698  
14699  
14700  
14701  
14702  
14703  
14704  
14705  
14706  
14707  
14708  
14709  
14710  
14711  
14712  
14713  
14714  
14715  
14716  
14717  
14718  
14719  
14720  
14721  
14722  
14723  
14724  
14725  
14726  
14727  
14728  
14729  
14730  
14731  
14732  
14733  
14734  
14735  
14736  
14737  
14738  
14739  
14740  
14741  
14742  
14743  
14744  
14745  
14746  
14747  
14748  
14749  
14750  
14751  
14752  
14753  
14754  
14755  
14756  
14757  
14758  
14759  
14760  
14761  
14762  
14763  
14764  
14765  
14766  
14767  
14768  
14769  
14770  
14771  
14772  
14773  
14774  
14775  
14776  
14777  
14778  
14779  
14780  
14781  
14782  
14783  
14784  
14785  
14786  
14787  
14788  
14789  
14790  
14791  
14792  
14793  
14794  
14795  
14796  
14797  
14798  
14799  
14800  
14801  
14802  
14803  
14804  
14805  
14806  
14807  
14808  
14809  
14810  
14811  
14812  
14813  
14814  
14815  
14816  
14817  
14818  
14819  
14820  
14821  
14822  
14823  
14824  
14825  
14826  
14827  
14828  
14829  
14830  
14831  
14832  
14833  
14834  
14835  
14836  
14837  
14838  
14839  
14840  
14841  
14842  
14843  
14844  
14845  
14846  
14847  
14848  
14849  
14850  
14851  
14852  
14853  
14854  
14855  
14856  
14857  
14858  
14859  
14860  
14861  
14862  
14863  
14864  
14865  
14866  
14867  
14868  
14869  
14870  
14871  
14872  
14873  
14874  
14875  
14876  
14877  
14878  
14879  
14880  
14881  
14882  
14883  
14884  
14885  
14886  
14887  
14888  
14889  
14890  
14891  
14892  
14893  
14894  
14895  
14896  
14897  
14898  
14899  
14900  
14901  
14902  
14903  
14904  
14905  
14906  
14907  
14908  
14909  
14910  
14911  
14912  
14913  
14914  
14915  
14916  
14917  
14918  
14919  
14920  
14921  
14922  
14923  
14924  
14925  
14926  
14927  
14928  
14929  
14930  
14931  
14932  
14933  
14934  
14935  
14936  
14937  
14938  
14939  
14940  
14941  
14942  
14943  
14944  
14945  
14946  
14947  
14948  
14949  
14950  
14951  
14952  
14953  
14954  
14955  
14956  
14957  
14958  
14959  
14960  
14961  
14962  
14963  
14964  
14965  
14966  
14967  
14968  
14969  
14970  
14971  
14972  
14973  
14974  
14975  
14976  
14977  
14978  
14979  
14980  
14981  
14982  
14983  
14984  
14985  
14986  
14987  
14988  
14989  
14990  
14991  
14992  
14993  
14994  
14995  
14996  
14997  
14998  
14999  
15000  
15001  
15002  
15003  
15004  
15005  
15006  
15007  
15008  
15009  
15010  
15011  
15012  
15013  
15014  
15015  
15016  
15017  
15018  
15019  
15020  
15021  
15022  
15023  
15024  
15025  
15026  
15027  
15028  
15029  
15030  
15031  
15032  
15033  
15034  
15035  
15036  
15037  
15038  
15039  
15040  
15041  
15042  
15043  
15044  
15045  
15046  
15047  
15048  
15049  
15050  
15051  
15052  
15053  
15054  
15055  
15056  
15057  
15058  
15059  
15060  
15061  
15062  
15063  
15064  
15065  
15066  
15067  
15068  
15069  
15070  
15071  
15072  
15073  
15074  
15075  
15076  
15077  
15078  
15079  
15080  
15081  
15082  
15083  
15084  
15085  
15086  
15087  
15088  
15089  
15090  
15091  
15092  
15093  
15094  
15095  
15096  
15097  
15098  
15099  
15100  
15101  
15102  
15103  
15104  
15105  
15106  
15107  
15108  
15109  
15110  
15111  
15112  
15113  
15114  
15115  
15116  
15117  
15118  
15119  
15120  
15121  
15122  
15123  
15124  
15125  
15126  
15127  
15128  
15129  
15130  
15131  
15132  
15133  
15134  
15135  
15136  
15137  
15138  
15139  
15140  
15141  
15142  
15143  
15144  
15145  
15146  
15147  
15148  
15149  
15150  
15151  
15152  
15153  
15154  
15155  
15156  
15157  
15158  
15159  
15160  
15161  
15162  
15163  
15164  
15165  
15166  
15167  
15168  
15169  
15170  
15171  
15172  
15173  
15174  
15175  
15176  
15177  
15178  
15179  
15180  
15181  
15182  
15183  
15184  
15185  
15186  
15187  
15188  
15189  
15190  
15191  
15192  
15193  
15194  
15195  
15196  
15197  
15198  
15199  
15200  
15201  
15202  
15203  
15204  
15205  
15206  
15207  
15208  
15209  
15210  
15211  
15212  
15213  
15214  
15215  
15216  
15217  
15218  
15219  
15220  
15221  
15222  
15223  
15224  
15225  
15226  
15227  
15228  
15229  
15230  
15231  
15232  
15233  
15234  
15235  
15236  
15237  
15238  
15239  
15240  
15241  
15242  
15243  
15244  
15245  
15246  
15247  
15248  
15249  
15250  
15251  
15252  
15253  
15254  
15255  
15256  
15257  
15258  
15259  
15260  
15261  
15262  
15263  
15264  
15265  
15266  
15267  
15268  
15269  
15270  
15271  
15272  
15273  
15274  
15275  
15276  
15277  
15278  
15279  
15280  
15281  
15282  
15283  
15284  
15285  
15286  
15287  
15288  
15289  
15290  
15291  
15292  
15293  
15294  
15295  
15296  
15297  
15298  
15299  
15300  
15301  
15302  
15303  
15304  
15305  
15306  
15307  
15308  
15309  
15310  
15311  
15312  
15313  
15314  
15315  
15316  
15317  
15318  
15319  
15320  
15321  
15322  
15323  
15324  
15325  
15326  
15327  
15328  
15329  
15330  
15331  
15332  
15333  
15334  
15335  
15336  
15337  
15338  
15339  
15340  
15341  
15342  
15343  
15344  
15345  
15346  
15347  
15348  
15349  
15350  
15351  
15352  
15353  
15354  
15355  
15356  
15357  
15358  
15359  
15360  
15361  
15362  
15363  
15364  
15365  
15366  
15367  
15368  
15369  
15370  
15371  
15372  
15373  
15374  
15375  
15376  
15377  
15378  
15379  
15380  
15381  
15382  
15383  
15384  
15385  
15386  
15387  
15388  
15389  
15390  
15391  
15392  
15393  
15394  
15395  
15396  
15397  
15398  
15399  
15400  
15401  
15402  
15403  
15404  
15405  
15406  
15407  
15408  
15409  
15410  
15411  
15412  
15413  
15414  
15415  
15416  
15417  
15418  
15419  
15420  
15421  
15422  
15423  
15424  
15425  
15426  
15427  
15428  
15429  
15430  
15431  
15432  
15433  
15434  
15435  
15436  
15437  
15438  
15439  
15440  
15441  
15442  
15443  
15444  
15445  
15446  
15447  
15448  
15449  
15450  
15451  
15452  
15453  
15454  
15455  
15456  
15457  
15458  
15459  
15460  
15461  
15462  
15463  
15464  
15465  
15466  
15467  
15468  
15469  
15470  
15471  
15472  
15473  
15474  
15475  
15476  
15477  
15478  
15479  
15480  
15481  
15482  
15483  
15484  
15485  
15486  
15487  
15488  
15489  
15490  
15491  
15492  
15493  
15494  
15495  
15496  
15497  
15498  
15499  
15500  
15501  
15502  
15503  
15504  
15505  
15506  
15507  
15508  
15509  
15510  
15511  
15512  
15513  
15514  
15515  
15516  
15517  
15518  
15519  
15520  
15521  
15522  
15523  
15524  
15525  
15526  
15527  
15528  
15529  
15530  
15531  
15532  
15533  
15534  
15535  
15536  
15537  
15538  
15539  
15540  
15541  
15542  
15543  
15544  
15545  
15546  
15547  
15548  
15549  
15550  
15551  
15552  
15553  
15554  
15555  
15556  
15557  
15558  
15559  
15560  
15561  
15562  
15563  
15564  
15565  
15566  
15567  
15568  
15569  
15570  
15571  
15572  
15573  
15574  
15575  
15576  
15577  
15578  
15579  
15580  
15581  
15582  
15583  
15584  
15585  
15586  
15587  
15588  
15589  
15590  
15591  
15592  
15593  
15594  
15595  
15596  
15597  
15598  
15599  
15600  
15601  
15602  
15603  
15604  
15605  
15606  
15607  
15608  
15609  
15610  
15611  
15612  
15613  
15614  
15615  
15616  
15617  
15618  
15619  
15620  
15621  
15622  
15623  
15624  
15625  
15626  
15627  
15628  
15629  
15630  
15631  
15632  
15633  
15634  
15635  
15636  
15637  
15638  
15639  
15640  
15641  
15642  
15643  
15644  
15645  
15646  
15647  
15648  
15649  
15650  
15651  
15652  
15653  
15654  
15655  
15656  
15657  
15658  
15659  
15660  
15661  
15662  
15663  
15664  
15665  
15666  
15667  
15668  
15669  
15670  
15671  
15672  
15673  
15674  
15675  
15676  
15677  
15678  
15679  
15680  
15681  
15682  
15683  
15684  
15685  
15686  
15687  
15688  
15689  
15690  
15691  
15692  
15693  
15694  
15695  
15696  
15697  
15698  
15699  
15700  
15701  
15702  
15703  
15704  
15705  
15706  
15707  
15708  
15709  
15710  
15711  
15712  
15713  
15714  
15715  
15716  
15717  
15718  
15719  
15720  
15721  
15722  
15723  
15724  
15725  
15726  
15727  
15728  
15729  
15730  
15731  
15732  
15733  
15734  
15735  
15736  
15737  
15738  
15739  
15740  
15741  
15742  
15743  
15744  
15745  
15746  
15747  
15748  
15749  
15750  
15751  
15752  
15753  
15754  
15755  
15756  
15757  
15758  
15759  
15760  
15761  
15762  
15763  
15764  
15765  
15766  
15767  
15768  
15769  
15770  
15771  
15772  
15773  
15774  
15775  
15776  
15777  
15778  
15779  
15780  
15781  
15782  
15783  
15784  
15785  
15786  
15787  
15788  
15789  
15790  
15791  
15792  
15793  
15794  
15795  
15796  
15797  
15798  
15799  
15800  
15801  
15802  
15803  
15804  
15805  
15806  
15807  
15808  
15809  
15810  
15811  
15812  
15813  
15814  
15815  
15816  
15817  
15818  
15819  
15820  
15821  
15822  
15823  
15824  
15825  
15826  
15827  
15828  
15829  
15830  
15831  
15832  
15833  
15834  
15835  
15836  
15837  
15838  
15839  
15840  
15841  
15842  
15843  
15844  
15845  
15846  
15847  
15848  
15849  
15850  
15851  
15852  
15853  
15854  
15855  
15856  
15857  
15858  
15859  
15860  
15861  
15862  
15863  
15864  
15865  
15866  
15867  
15868  
15869  
15870  
15871  
15872  
15873  
15874  
15875  
15876  
15877  
15878  
15879  
15880  
15881  
15882  
15883  
15884  
15885  
15886  
15887  
15888  
15889  
15890  
15891  
15892  
15893  
15894  
15895  
15896  
15897  
15898  
15899  
15900  
15901  
15902  
15903  
15904  
15905  
15906  
15907  
15908  
15909  
15910  
15911  
15912  
15913  
15914  
15915  
15916  
15917  
15918  
15919  
15920  
15921  
15922  
15923  
15924  
15925  
15926  
15927  
15928  
15929  
15930  
15931  
15932  
15933  
15934  
15935  
15936  
15937  
15938  
15939  
15940  
15941  
15942  
15943  
15944  
15945  
15946  
15947  
15948  
15949  
15950  
15951  
15952  
15953  
15954  
15955  
15956  
15957  
15958  
15959  
15960  
15961  
15962  
15963  
15964  
15965  
15966  
15967  
15968  
15969  
15970  
15971  
15972  
15973  
15974  
15975  
15976  
15977  
15978  
15979  
15980  
15981  
15982  
15983  
15984  
15985  
15986  
15987  
15988  
15989  
15990  
15991  
15992  
15993  
15994  
15995  
15996  
15997  
15998  
15999  
16000  
16001  
16002  
16003  
16004  
16005  
16006  
16007  
16008  
16009  
16010  
16011  
16012  
16013  
16014  
16015  
16016  
16017  
16018  
16019  
16020  
16021  
16022  
16023  
16024  
16025  
16026  
16027  
16028  
16029  
16030  
16031  
16032  
16033  
16034  
16035  
16036  
16037  
16038  
16039  
16040  
16041  
16042  
16043  
16044  
16045  
16046  
16047  
16048  
16049  
16050  
16051  
16052  
16053  
16054  
16055  
16056  
16057  
16058  
16059  
16060  
16061  
16062  
16063  
16064  
16065  
16066  
16067  
16068  
16069  
16070  
16071  
16072  
16073  
16074  
16075  
16076  
16077  
16078  
16079  
16080  
16081  
16082  
16083  
16084  
16085  
16086  
16087  
16088  
16089  
16090  
16091  
16092  
16093  
16094  
16095  
16096  
16097  
16098  
16099  
16100  
16101  
16102  
16103  
16104  
16105  
16106  
16107  
16108  
16109  
16110  
16111  
16112  
16113  
16114  
16115  
16116  
16117  
16118  
16119  
16120  
16121  
16122  
16123  
16124  
16125  
16126  
16127  
16128  
16129  
16130  
16131  
16132  
16133  
16134  
16135  
16136  
16137  
16138  
16139  
16140  
16141  
16142  
16143  
16144  
16145  
16146  
16147  
16148  
16149  
16150  
16151  
16152  
16153  
16154  
16155  
16156  
16157  
16158  
16159  
16160  
16161  
16162  
16163  
16164  
16165  
16166  
16167  
16168  
16169  
16170  
16171  
16172  
16173  
16174  
16175  
16176  
16177  
16178  
16179  
16180  
16181  
16182  
16183  
16184  
16185  
16186  
16187  
16188  
16189  
16190  
16191  
16192  
16193  
16194  
16195  
16196  
16197  
16198  
16199  
16200  
16201  
16202  
16203  
16204  
16205  
16206  
16207  
16208  
16209  
16210  
16211  
16212  
16213  
16214  
16215  
16216  
16217  
16218  
16219  
16220  
16221  
16222  
16223  
16224  
16225  
16226  
16227  
16228  
16229  
16230  
16231  
16232  
16233  
16234  
16235  
16236  
16237  
16238  
16239  
16240  
16241  
16242  
16243  
16244  
16245  
16246  
16247  
16248  
16249  
16250  
16251  
16252  
16253  
16254  
16255  
16256  
16257  
16258  
16259  
16260  
16261  
16262  
16263  
16264  
16265  
16266  
16267  
16268  
16269  
16270  
16271  
16272  
16273  
16274  
16275  
16276  
16277  
16278  
16279  
16280  
16281  
16282  
16283  
16284  
16285  
16286  
16287  
16288  
16289  
16290  
16291  
16292  
16293  
16294  
16295  
16296  
16297  
16298  
16299  
16300  
16301  
16302  
16303  
16304  
16305  
16306  
16307  
16308  
16309  
16310  
16311  
16312  
16313  
16314  
16315  
16316  
16317  
16318  
16319  
16320  
16321  
16322  
16323  
16324  
16325  
16326  
16327  
16328  
16329  
16330  
16331  
16332  
16333  
16334  
16335  
16336  
16337  
16338  
16339  
16340  
16341  
16342  
16343  
16344  
16345  
16346  
16347  
16348  
16349  
16350  
16351  
16352  
16353  
16354  
16355  
16356  
16357  
16358  
16359  
16360  
16361  
16362  
16363  
16364  
16365  
16366  
16367  
16368  
16369  
16370  
16371  
16372  
16373  
16374  
16375  
16376  
16377  
16378  
16379  
16380  
16381  
16382  
16383  
16384  
16385  
16386  
16387  
16388  
16389  
16390  
16391  
16392  
16393  
16394  
16395  
16396  
16397  
16398  
16399  
16400  
16401  
16402  
16403  
16404  
16405  
16406  
16407  
16408  
16409  
16410  
16411  
16412  
16413  
16414  
16415  
16416  
16417  
16418  
16419  
16420  
16421  
16422  
16423  
16424  
16425  
16426  
16427  
16428  
16429  
16430  
16431  
16432  
16433  
16434  
16435  
16436  
16437  
16438  
16439  
16440  
16441  
16442  
16443  
16444  
16445  
16446  
16447  
16448  
16449  
16450  
16451  
16452  
16453  
16454  
16455  
16456  
16457  
16458  
16459  
16460  
16461  
16462  
16463  
16464  
16465  
16466  
16467  
16468  
16469  
16470  
16471  
16472  
16473  
16474  
16475  
16476  
16477  
16478  
16479  
16480  
16481  
16482  
16483  
16484  
16485  
16486  
16487  
16488  
16489  
16490  
16491  
16492  
16493  
16494  
16495  
16496  
16497  
16498  
16499  
16500  
16501  
16502  
16503  
16504  
16505  
16506  
16507  
16508  
16509  
16510  
16511  
16512  
16513  
16514  
16515  
16516  
16517  
16518  
16519  
16520  
16521  
16522  
16523  
16524  
16525  
16526  
16527  
16528  
16529  
16530  
16531  
16532  
16533  
16534  
16535  
16536  
16537  
16538  
16539  
16540  
16541  
16542  
16543  
16544  
16545  
16546  
16547  
16548  
16549  
16550  
16551  
16552  
16553  
16554  
16555  
16556  
16557  
16558  
16559  
16560  
16561  
16562  
16563  
16564  
16565  
16566  
16567  
16568  
16569  
16570  
16571  
16572  
16573  
16574  
16575  
16576  
16577  
16578  
16579  
16580  
16581  
16582  
16583  
16584  
16585  
16586  
16587  
16588  
16589  
16590  
16591  
16592  
16593  
16594  
16595  
16596  
16597  
16598  
16599  
16600  
16601  
16602  
16603  
16604  
16605  
16606  
16607  
16608  
16609  
16610  
16611  
16612  
16613  
16614  
16615  
16616  
16617  
16618  
16619  
16620  
16621  
16622  
16623  
16624  
16625  
16626  
16627  
16628  
16629  
16630  
16631  
16632  
16633  
16634  
16635  
16636  
16637  
16638  
16639  
16640  
16641  
16642  
16643  
16644  
16645  
16646  
16647  
16648  
16649  
16650  
16651  
16652  
16653  
16654  
16655  
16656  
16657  
16658  
16659  
16660  
16661  
16662  
16663  
16664  
16665  
16666  
16667  
16668  
16669  
16670  
16671  
16672  
16673  
16674  
16675  
16676  
16677  
16678  
16679  
16680  
16681  
16682  
16683  
16684  
16685  
16686  
16687  
16688  
16689  
16690  
16691  
16692  
16693  
16694  
16695  
16696  
16697  
16698  
16699  
16700  
16701  
16702  
16703  
16704  
16705  
16706  
16707  
16708  
16709  
16710  
16711  
16712  
16713  
16714  
16715  
16716  
16717  
16718  
16719  
16720  
16721  
16722  
16723  
16724  
16725  
16726  
16727  
16728  
16729  
16730  
16731  
16732  
16733  
16734  
16735  
16736  
16737  
16738  
16739  
16740  
16741  
16742  
16743  
16744  
16745  
16746  
16747  
16748  
16749  
16750  
16751  
16752  
16753  
16754  
16755  
16756  
16757  
16758  
16759  
16760  
16761  
16762  
16763  
16764  
16765  
16766  
16767  
16768  
16769  
16770  
16771  
16772  
16773  
16774  
16775  
16776  
16777  
16778  
16779  
16780  
16781  
16782  
16783  
16784  
16785  
16786  
16787  
16788  
16789  
16790  
16791  
16792  
16793  
16794  
16795  
16796  
16797  
16798  
16799  
16800  
16801  
16802  
16803  
16804  
16805  
16806  
16807  
16808  
16809  
16810  
16811  
16812  
16813  
16814  
16815  
16816  
16817  
16818  
16819  
16820  
16821  
16822  
16823  
16824  
16825  
16826  
16827  
16828  
16829  
16830  
16831  
16832  
16833  
16834  
16835  
16836  
16837  
16838  
16839  
16840  
16841  
16842  
16843  
16844  
16845  
16846  
16847  
16848  
16849  
16850  
16851  
16852  
16853  
16854  
16855  
16856  
16857  
16858  
16859  
16860  
16861  
16862  
16863  
16864  
16865  
16866  
16867  
16868  
16869  
16870  
16871  
16872  
16873  
16874  
16875  
16876  
16877  
16878  
16879  
16880  
16881  
16882  
16883  
16884  
16885  
16886  
16887  
16888  
16889  
16890  
16891  
16892  
16893  
16894  
16895  
16896  
16897  
16898  
16899  
16900  
16901  
16902  
16903  
16904  
16905  
16906  
16907  
16908  
16909  
16910  
16911  
16912  
16913  
16914  
16915  
16916  
16917  
16918  
16919  
16920  
16921  
16922  
16923  
16924  
16925  
16926  
16927  
16928  
16929  
16930  
16931  
16932  
16933  
16934  
16935  
16936  
16937  
16938  
16939  
16940  
16941  
16942  
16943  
16944  
16945  
16946  
16947  
16948  
16949  
16950  
16951  
16952  
16953  
16954  
16955  
16956  
16957  
16958  
16959  
16960  
16961  
16962  
16963  
16964  
16965  
16966  
16967  
16968  
16969  
16970  
16971  
16972  
16973  
16974  
16975  
16976  
16977  
16978  
16979  
16980  
16981  
16982  
16983  
16984  
16985  
16986  
16987  
16988  
16989  
16990  
16991  
16992  
16993  
16994  
16995  
16996  
16997  
16998  
16999  
17000  
17001  
17002  
17003  
17004  
17005  
17006  
17007  
17008  
17009  
17010  
17011  
17012  
17013  
17014  
17015  
17016  
17017  
17018  
17019  
17020  
17021  
17022  
17023  
17024  
17025  
17026  
17027  
17028  
17029  
17030  
17031  
17032  
17033  
17034  
17035  
17036  
17037  
17038  
17039  
17040  
17041  
17042  
17043  
17044  
17045  
17046  
17047  
17048  
17049  
17050  
17051  
17052  
17053  
17054  
17055  
17056  
17057  
17058  
17059  
17060  
17061  
17062  
17063  
17064  
17065  
17066  
17067  
17068  
17069  
17070  
17071  
17072  
17073  
17074  
17075  
17076  
17077  
17078  
17079  
17080  
17081  
17082  
17083  
17084  
17085  
17086  
17087  
17088  
17089  
17090  
17091  
17092  
17093  
17094  
17095  
17096  
17097  
17098  
17099  
17100  
17101  
17102  
17103  
17104  
17105  
17106  
17107  
17108  
17109  
17110  
17111  
17112  
17113  
17114  
17115  
17116  
17117  
17118  
17119  
17120  
17121  
17122  
17123  
17124  
17125  
17126  
17127  
17128  
17129  
17130  
17131  
17132  
17133  
17134  
17135  
17136  
17137  
17138  
17139  
17140  
17141  
17142  
17143  
17144  
17145  
17146  
17147  
17148  
17149  
17150  
17151  
17152  
17153  
17154  
17155  
17156  
17157  
17158  
17159  
17160  
17161  
17162  
17163  
17164  
17165  
17166  
17167  
17168  
17169  
17170  
17171  
17172  
17173  
17174  
17175  
17176  
17177  
17178  
17179  
17180  
17181  
17182  
17183  
17184  
17185  
17186  
17187  
17188  
17189  
17190  
17191  
17192  
17193  
17194  
17195  
17196  
17197  
17198  
17199  
17200  
17201  
17202  
17203  
17204  
17205  
17206  
17207  
17208  
17209  
17210  
17211  
17212  
17213  
17214  
17215  
17216  
17217  
17218  
17219  
17220  
17221  
17222  
17223  
17224  
17225  
17226  
17227  
17228  
17229  
17230  
17231  
17232  
17233  
17234  
17235  
17236  
17237  
17238  
17239  
17240  
17241  
17242  
17243  
17244  
17245  
17246  
17247  
17248  
17249  
17250  
17251  
17252  
17253  
17254  
17255  
17256  
17257  
17258  
17259  
17260  
17261  
17262  
17263  
17264  
17265  
17266  
17267  
17268  
17269  
17270  
17271  
17272  
17273  
17274  
17275  
17276  
17277  
17278  
17279  
17280  
17281  
17282  
17283  
17284  
17285  
17286  
17287  
17288  
17289  
17290  
17291  
17292  
17293  
17294  
17295  
17296  
17297  
17298  
17299  
17300  
17301  
17302  
17303  
17304  
17305  
17306  
17307  
17308  
17309  
17310  
17311  
17312  
17313  
17314  
17315  
17316  
17317  
17318  
17319  
17320  
17321  
17322  
17323  
17324  
17325  
17326  
17327  
17328  
17329  
17330  
17331  
17332  
17333  
17334  
17335  
17336  
17337  
17338  
17339  
17340  
17341  
17342  
17343  
17344  
17345  
17346  
17347  
17348  
17349  
17350  
17351  
17352  
17353  
17354  
17355  
17356  
17357  
17358  
17359  
17360  
17361  
17362  
17363  
17364  
17365  
17366  
17367  
17368  
17369  
17370  
17371  
17372  
17373  
17374  
17375  
17376  
17377  
17378  
17379  
17380  
17381  
17382  
17383  
17384  
17385  
17386  
17387  
17388  
17389  
17390  
17391  
17392  
17393  
17394  
17395  
17396  
17397  
17398  
17399  
17400  
17401  
17402  
17403  
17404  
17405  
17406  
17407  
17408  
17409  
17410  
17411  
17412  
17413  
17414  
17415  
17416  
17417  
17418  
17419  
17420  
17421  
17422  
17423  
17424  
17425  
17426  
17427  
17428  
17429  
17430  
17431  
17432  
17433  
17434  
17435  
17436  
17437  
17438  
17439  
17440  
17441  
17442  
17443  
17444  
17445  
17446  
17447  
17448  
17449  
17450  
17451  
17452  
17453  
17454  
17455  
17456  
17457  
17458  
17459  
17460  
17461  
17462  
17463  
17464  
17465  
17466  
17467  
17468  
17469  
17470  
17471  
17472  
17473  
17474  
17475  
17476  
17477  
17478  
17479  
17480  
17481  
17482  
17483  
17484  
17485  
17486  
17487  
17488  
17489  
17490  
17491  
17492  
17493  
17494  
17495  
17496  
17497  
17498  
17499  
17500  
17501  
17502  
17503  
17504  
17505  
17506  
17507  
17508  
17509  
17510  
17511  
17512  
17513  
17514  
17515  
17516  
17517  
17518  
17519  
17520  
17521  
17522  
17523  
17524  
17525  
17526  
17527  
17528  
17529  
17530  
17531  
17532  
17533  
17534  
17535  
17536  
17537  
17538  
17539  
17540  
17541  
17542  
17543  
17544  
17545  
17546  
17547  
17548  
17549  
17550  
17551  
17552  
17553  
17554  
17555  
17556  
17557  
17558  
17559  
17560  
17561  
17562  
17563  
17564  
17565  
17566  
17567  
17568  
17569  
17570  
17571  
17572  
17573  
17574  
17575  
17576  
17577  
17578  
17579  
17580  
17581  
17582  
17583  
17584  
17585  
17586  
17587  
17588  
17589  
17590  
17591  
17592  
17593  
17594  
17595  
17596  
17597  
17598  
17599  
17600  
17601  
17602  
17603  
17604  
17605  
17606  
17607  
17608  
17609  
17610  
17611  
17612  
17613  
17614  
17615  
17616  
17617  
17618  
17619  
17620  
17621  
17622  
17623  
17624  
17625  
17626  
17627  
17628  
17629  
17630  
17631  
17632  
17633  
17634  
17635  
17636  
17637  
17638  
17639  
17640  
17641  
17642  
17643  
17644  
17645  
17646  
17647  
17648  
17649  
17650  
17651  
17652  
17653  
17654  
17655  
17656  
17657  
17658  
17659  
17660  
17661  
17662  
17663  
17664  
17665  
17666  
17667  
17668  
17669  
17670  
17671  
17672  
17673  
17674  
17675  
17676  
17677  
17678  
17679  
17680  
17681  
17682  
17683  
17684  
17685  
17686  
17687  
17688  
17689  
17690  
17691  
17692  
17693  
17694  
17695  
17696  
17697  
17698  
17699  
17700  
17701  
17702  
17703  
17704  
17705  
17706  
17707  
17708  
17709  
17710  
17711  
17712  
17713  
17714  
17715  
17716  
17717  
17718  
17719  
17720  
17721  
17722  
17723  
17724  
17725  
17726  
17727  
17728  
17729  
17730  
17731  
17732  
17733  
17734  
17735  
17736  
17737  
17738  
17739  
17740  
17741  
17742  
17743  
17744  
17745  
17746  
17747  
17748  
17749  
17750  
17751  
17752  
17753  
17754  
17755  
17756  
17757  
17758  
17759  
17760  
17761  
17762  
17763  
17764  
17765  
17766  
17767  
17768  
17769  
17770  
17771  
17772  
17773  
17774  
17775  
17776  
17777  
17778  
17779  
17780  
17781  
17782  
17783  
17784  
17785  
17786  
17787  
17788  
17789  
17790  
17791  
17792  
17793  
17794  
17795  
17796  
17797  
17798  
17799  
17800  
17801  
17802  
17803  
17804  
17805  
17806  
17807  
17808  
17809  
17810  
17811  
17812  
17813  
17814  
17815  
17816  
17817  
17818  
17819  
17820  
17821  
17822  
17823  
17824  
17825  
17826  
17827  
17828  
17829  
17830  
17831  
17832  
17833  
17834  
17835  
17836  
17837  
17838  
17839  
17840  
17841  
17842  
17843  
17844  
17845  
17846  
17847  
17848  
17849  
17850  
17851  
17852  
17853  
17854  
17855  
17856  
17857  
17858  
17859  
17860  
17861  
17862  
17863  
17864  
17865  
17866  
17867  
17868  
17869  
17870  
17871  
17872  
17873  
17874  
17875  
17876  
17877  
17878  
17879  
17880  
17881  
17882  
17883  
17884  
17885  
17886  
17887  
17888  
17889  
17890  
17891  
17892  
17893  
17894  
17895  
17896  
17897  
17898  
17899  
17900  
17901  
17902  
17903  
17904  
17905  
17906  
17907  
17908  
17909  
17910  
17911  
17912  
17913  
17914  
17915  
17916  
17917  
17918  
17919  
17920  
17921  
17922  
17923  
17924  
17925  
17926  
17927  
17928  
17929  
17930  
17931  
17932  
17933  
17934  
17935  
17936  
17937  
17938  
17939  
17940  
17941  
17942  
17943  
17944  
17945  
17946  
17947  
17948  
17949  
17950  
17951  
17952  
17953  
17954  
17955  
17956  
17957  
17958  
17959  
17960  
17961  
17962  
17963  
17964  
17965  
17966  
17967  
17968  
17969  
17970  
17971  
17972  
17973  
17974  
17975  
17976  
17977  
17978  
17979  
17980  
17981  
17982  
17983  
17984  
17985  
17986  
17987  
17988  
17989  
17990  
17991  
17992  
17993  
17994  
17995  
17996  
17997  
17998  
17999  
18000  
18001  
18002  
18003  
18004  
18005  
18006  
18007  
18008  
18009  
18010  
18011  
18012  
18013  
18014  
18015  
18016  
18017  
18018  
18019  
18020  
18021  
18022  
18023  
18024  
18025  
18026  
18027  
18028  
18029  
18030  
18031  
18032  
18033  
18034  
18035  
18036  
18037  
18038  
18039  
18040  
18041  
18042  
18043  
18044  
18045  
18046  
18047  
18048  
18049  
18050  
18051  
18052  
18053  
18054  
18055  
18056  
18057  
18058  
18059  
18060  
18061  
18062  
18063  
18064  
18065  
18066  
18067  
18068  
18069  
18070  
18071  
18072  
18073  
18074  
18075  
18076  
18077  
18078  
18079  
18080  
18081  
18082  
18083  
18084  
18085  
18086  
18087  
18088  
18089  
18090  
18091  
18092  
18093  
18094  
18095  
18096  
18097  
18098  
18099  
18100  
18101  
18102  
18103  
18104  
18105  
18106  
18107  
18108  
18109  
18110  
18111  
18112  
18113  
18114  
18115  
18116  
18117  
18118  
18119  
18120  
18121  
18122  
18123  
18124  
18125  
18126  
18127  
18128  
18129  
18130  
18131  
18132  
18133  
18134  
18135  
18136  
18137  
18138  
18139  
18140  
18141  
18142  
18143  
18144  
18145  
18146  
18147  
18148  
18149  
18150  
18151  
18152  
18153  
18154  
18155  
18156  
18157  
18158  
18159  
18160  
18161  
18162  
18163  
18164  
18165  
18166  
18167  
18168  
18169  
18170  
18171  
18172  
18173  
18174  
18175  
18176  
18177  
18178  
18179  
18180  
18181  
18182  
18183  
18184  
18185  
18186  
18187  
18188  
18189  
18190  
18191  
18192  
18193  
18194  
18195  
18196  
18197  
18198  
18199  
18200  
18201  
18202  
18203  
18204  
18205  
18206  
18207  
18208  
18209  
18210  
18211  
18212  
18213  
18214  
18215  
18216  
18217  
18218  
18219  
18220  
18221  
18222  
18223  
18224  
18225  
18226  
18227  
18228  
18229  
18230  
18231  
18232  
18233  
18234  
18235  
18236  
18237  
18238  
18239  
18240  
18241  
18242  
18243  
18244  
18245  
18246  
18247  
18248  
18249  
18250  
18251  
18252  
18253  
18254  
18255  
18256  
18257  
18258  
18259  
18260  
18261  
18262  
18263  
18264  
18265  
18266  
18267  
18268  
18269  
18270  
18271  
18272  
18273  
18274  
18275  
18276  
18277  
18278  
18279  
18280  
18281  
18282  
18283  
18284  
18285  
18286  
18287  
18288  
18289  
18290  
18291  
18292  
18293  
18294  
18295  
18296  
18297  
18298  
18299  
18300  
18301  
18302  
18303  
18304  
18305  
18306  
18307  
18308  
18309  
18310  
18311  
18312  
18313  
18314  
18315  
18316  
18317  
18318  
18319  
18320  
18321  
18322  
18323  
18324  
18325  
18326  
18327  
18328  
18329  
18330  
18331  
18332  
18333  
18334  
18335  
18336  
18337  
18338  
18339  
18340  
18341  
18342  
18343  
18344  
18345  
18346  
18347  
18348  
18349  
18350  
18351  
18352  
18353  
18354  
18355  
18356  
18357  
18358  
18359  
18360  
18361  
18362  
18363  
18364  
18365  
18366  
18367  
18368  
18369  
18370  
18371  
18372  
18373  
18374  
18375  
18376  
18377  
18378  
18379  
18380  
18381  
18382  
18383  
18384  
18385  
18386  
18387  
18388  
18389  
18390  
18391  
18392  
18393  
18394  
18395  
18396  
18397  
18398  
18399  
18400  
18401  
18402  
18403  
18404  
18405  
18406  
18407  
18408  
18409  
18410  
18411  
18412  
18413  
18414  
18415  
18416  
18417  
18418  
18419  
18420  
18421  
18422  
18423  
18424  
18425  
18426  
18427  
18428  
18429  
18430  
18431  
18432  
18433  
18434  
18435  
18436  
18437  
18438  
18439  
18440  
18441  
18442  
18443  
18444  
18445  
18446  
18447  
18448  
18449  
18450  
18451  
18452  
18453  
18454  
18455  
18456  
18457  
18458  
18459  
18460  
18461  
18462  
18463  
18464  
18465  
18466  
18467  
18468  
18469  
18470  
18471  
18472  
18473  
18474  
18475  
18476  
18477  
18478  
18479  
18480  
18481  
18482  
18483  
18484  
18485  
18486  
18487  
18488  
18489  
18490  
18491  
18492  
18493  
18494  
18495  
18496  
18497  
18498  
18499  
18500  
18501  
18502  
18503  
18504  
18505  
18506  
18507  
18508  
18509  
18510  
18511  
18512  
18513  
18514  
18515  
18516  
18517  
18518  
18519  
18520  
18521  
18522  
18523  
18524  
18525  
18526  
18527  
18528  
18529  
18530  
18531  
18532  
18533  
18534  
18535  
18536  
18537  
18538  
18539  
18540  
18541  
18542  
18543  
18544  
18545  
18546  
18547  
18548  
18549  
18550  
18551  
18552  
18553  
18554  
18555  
18556  
18557  
18558  
18559  
18560  
18561  
18562  
18563  
18564  
18565  
18566  
18567  
18568  
18569  
18570  
18571  
18572  
18573  
18574  
18575  
18576  
18577  
18578  
18579  
18580  
18581  
18582  
18583  
18584  
18585  
18586  
18587  
18588  
18589  
18590  
18591  
18592  
18593  
18594  
18595  
18596  
18597  
18598  
18599  
18600  
18601  
18602  
18603  
18604  
18605  
18606  
18607  
18608  
18609  
18610  
18611  
18612  
18613  
18614  
18615  
18616  
18617  
18618  
18619  
18620  
18621  
18622  
18623  
18624  
18625  
18626  
18627  
18628  
18629  
18630  
18631  
18632  
18633  
18634  
18635  
18636  
18637  
18638  
18639  
18640  
18641  
18642  
18643  
18644  
18645  
18646  
18647  
18648  
18649  
18650  
18651  
18652  
18653  
18654  
18655  
18656  
18657  
18658  
18659  
18660  
18661  
18662  
18663  
18664  
18665  
18666  
18667  
18668  
18669  
18670  
18671  
18672  
18673  
18674  
18675  
18676  
18677  
18678  
18679  
18680  
18681  
18682  
18683  
18684  
18685  
18686  
18687  
18688  
18689  
18690  
18691  
18692  
18693  
18694  
18695  
18696  
18697  
18698  
18699  
18700  
18701  
18702  
18703  
18704  
18705  
18706  
18707  
18708  
18709  
18710  
18711  
18712  
18713  
18714  
18715  
18716  
18717  
18718  
18719  
18720  
18721  
18722  
18723  
18724  
18725  
18726  
18727  
18728  
18729  
18730  
18731  
18732  
18733  
18734  
18735  
18736  
18737  
18738  
18739  
18740  
18741  
18742  
18743  
18744  
18745  
18746  
18747  
18748  
18749  
18750  
18751  
18752  
18753  
18754  
18755  
18756  
18757  
18758  
18759  
18760  
18761  
18762  
18763  
18764  
18765  
18766  
18767  
18768  
18769  
18770  
18771  
18772  
18773  
18774  
18775  
18776  
18777  
18778  
18779  
18780  
18781  
18782  
18783  
18784  
18785  
18786  
18787  
18788  
18789  
18790  
18791  
18792  
18793  
18794  
18795  
18796  
18797  
18798  
18799  
18800  
18801  
18802  
18803  
18804  
18805  
18806  
18807  
18808  
18809  
18810  
18811  
18812  
18813  
18814  
18815  
18816  
18817  
18818  
18819  
18820  
18821  
18822  
18823  
18824  
18825  
18826  
18827  
18828  
18829  
18830  
18831  
18832  
18833  
18834  
18835  
18836  
18837  
18838  
18839  
18840  
18841  
18842  
18843  
18844  
18845  
18846  
18847  
18848  
18849  
18850  
18851  
18852  
18853  
18854  
18855  
18856  
18857  
18858  
18859  
18860  
18861  
18862  
18863  
18864  
18865  
18866  
18867  
18868  
18869  
18870  
18871  
18872  
18873  
18874  
18875  
18876  
18877  
18878  
18879  
18880  
18881  
18882  
18883  
18884  
18885  
18886  
18887  
18888  
18889  
18890  
18891  
18892  
18893  
18894  
18895  
18896  
18897  
18898  
18899  
18900  
18901  
18902  
18903  
18904  
18905  
18906  
18907  
18908  
18909  
18910  
18911  
18912  
18913  
18914  
18915  
18916  
18917  
18918  
18919  
18920  
18921  
18922  
18923  
18924  
18925  
18926  
18927  
18928  
18929  
18930  
18931  
18932  
18933  
18934  
18935  
18936  
18937  
18938  
18939  
18940  
18941  
18942  
18943  
18944  
18945  
18946  
18947  
18948  
18949  
18950  
18951  
18952  
18953  
18954  
18955  
18956  
18957  
18958  
18959  
18960  
18961  
18962  
18963  
18964  
18965  
18966  
18967  
18968  
18969  
18970  
18971  
18972  
18973  
18974  
18975  
18976  
18977  
18978  
18979  
18980  
18981  
18982  
18983  
18984  
18985  
18986  
18987  
18988  
18989  
18990  
18991  
18992  
18993  
18994  
18995  
18996  
18997  
18998  
18999  
19000  
19001  
19002  
19003  
19004  
19005  
19006  
19007  
19008  
19009  
19010  
19011  
19012  
19013  
19014  
19015  
19016  
19017  
19018  
19019  
19020  
19021  
19022  
19023  
19024  
19025  
19026  
19027  
19028  
19029  
19030  
19031  
19032  
19033  
19034  
19035  
19036  
19037  
19038  
19039  
19040  
19041  
19042  
19043  
19044  
19045  
19046  
19047  
19048  
19049  
19050  
19051  
19052  
19053  
19054  
19055  
19056  
19057  
19058  
19059  
19060  
19061  
19062  
19063  
19064  
19065  
19066  
19067  
19068  
19069  
19070  
19071  
19072  
19073  
19074  
19075  
19076  
19077  
19078  
19079  
19080  
19081  
19082  
19083  
19084  
19085  
19086  
19087  
19088  
19089  
19090  
19091  
19092  
19093  
19094  
19095  
19096  
19097  
19098  
19099  
19100  
19101  
19102  
19103  
19104  
19105  
19106  
19107  
19108  
19109  
19110  
19111  
19112  
19113  
19114  
19115  
19116  
19117  
19118  
19119  
19120  
19121  
19122  
19123  
19124  
19125  
19126  
19127  
19128  
19129  
19130  
19131  
19132  
19133  
19134  
19135  
19136  
19137  
19138  
19139  
19140  
19141  
19142  
19143  
19144  
19145  
19146  
19147  
19148  
19149  
19150  
19151  
19152  
19153  
19154  
19155  
19156  
19157  
19158  
19159  
19160  
19161  
19162  
19163  
19164  
19165  
19166  
19167  
19168  
19169  
19170  
19171  
19172  
19173  
19174  
19175  
19176  
19177  
19178  
19179  
19180  
19181  
19182  
19183  
19184  
19185  
19186  
19187  
19188  
19189  
19190  
19191  
19192  
19193  
19194  
19195  
19196  
19197  
19198  
19199  
19200  
19201  
19202  
19203  
19204  
19205  
19206  
19207  
19208  
19209  
19210  
19211  
19212  
19213  
19214  
19215  
19216  
19217  
19218  
19219  
19220  
19221  
19222  
19223  
19224  
19225  
19226  
19227  
19228  
19229  
19230  
19231  
19232  
19233  
19234  
19235  
19236  
19237  
19238  
19239  
19240  
19241  
19242  
19243  
19244  
19245  
19246  
19247  
19248  
19249  
19250  
19251  
19252  
19253  
19254  
19255  
19256  
19257  
19258  
19259  
19260  
19261  
19262  
19263  
19264  
19265  
19266  
19267  
19268  
19269  
19270  
19271  
19272  
19273  
19274  
19275  
19276  
19277  
19278  
19279  
19280  
19281  
19282  
19283  
19284  
19285  
19286  
19287  
19288  
19289  
19290  
19291  
19292  
19293  
19294  
19295  
19296  
19297  
19298  
19299  
19300  
19301  
19302  
19303  
19304  
19305  
19306  
19307  
19308  
19309  
19310  
19311  
19312  
19313  
19314  
19315  
19316  
19317  
19318  
19319  
19320  
19321  
19322  
19323  
19324  
19325  
19326  
19327  
19328  
19329  
19330  
19331  
19332  
19333  
19334  
19335  
19336  
19337  
19338  
19339  
19340  
19341  
19342  
19343  
19344  
19345  
19346  
19347  
19348  
19349  
19350  
19351  
19352  
19353  
19354  
19355  
19356  
19357  
19358  
19359  
19360  
19361  
19362  
19363  
19364  
19365  
19366  
19367  
19368  
19369  
19370  
19371  
19372  
19373  
19374  
19375  
19376  
19377  
19378  
19379  
19380  
19381  
19382  
19383  
19384  
19385  
19386  
19387  
19388  
19389  
19390  
19391  
19392  
19393  
19394  
19395  
19396  
19397  
19398  
19399  
19400  
19401  
19402  
19403  
19404  
19405  
19406  
19407  
19408  
19409  
19410  
19411  
19412  
19413  
19414  
19415  
19416  
19417  
19418  
19419  
19420  
19421  
19422  
19423  
19424  
19425  
19426  
19427  
19428  
19429  
19430  
19431  
19432  
19433  
19434  
19435  
19436  
19437  
19438  
19439  
19440  
19441  
19442  
19443  
19444  
19445  
19446  
19447  
19448  
19449  
19450  
19451  
19452  
19453  
19454  
19455  
19456  
19457  
19458  
19459  
19460  
19461  
19462  
19463  
19464  
19465  
19466  
19467  
19468  
19469  
19470  
19471  
19472  
19473  
19474  
19475  
19476  
19477  
19478  
19479  
19480  
19481  
19482  
19483  
19484  
19485  
19486  
19487  
19488  
19489  
19490  
19491  
19492  
19493  
19494  
19495  
19496  
19497  
19498  
19499  
19500  
19501  
19502  
19503  
19504  
19505  
19506  
19507  
19508  
19509  
19510  
19511  
19512  
19513  
19514  
19515  
19516  
19517  
19518  
19519  
19520  
19521  
19522  
19523  
19524  
19525  
19526  
19527  
19528  
19529  
19530  
19531  
19532  
19533  
19534  
19535  
19536  
19537  
19538  
19539  
19540  
19541  
19542  
19543  
19544  
19545  
19546  
19547  
19548  
19549  
19550  
19551  
19552  
19553  
19554  
19555  
19556  
19557  
19558  
19559  
19560  
19561  
19562  
19563  
19564  
19565  
19566  
19567  
19568  
19569  
19570  
19571  
19572  
19573  
19574  
19575  
19576  
19577  
19578  
19579  
19580  
19581  
19582  
19583  
19584  
19585  
19586  
19587  
19588  
19589  
19590  
19591  
19592  
19593  
19594  
19595  
19596  
19597  
19598  
19599  
19600  
19601  
19602  
19603  
19604  
19605  
19606  
19607  
19608  
19609  
19610  
19611  
19612  
19613  
19614  
19615  
19616  
19617  
19618  
19619  
19620  
19621  
19622  
19623  
19624  
19625  
19626  
19627  
19628  
19629  
19630  
19631  
19632  
19633  
19634  
19635  
19636  
19637  
19638  
19639  
19640  
19641  
19642  
19643  
19644  
19645  
19646  
19647  
19648  
19649  
19650  
19651  
19652  
19653  
19654  
19655  
19656  
19657  
19658  
19659  
19660  
19661  
19662  
19663  
19664  
19665  
19666  
19667  
19668  
19669  
19670  
19671  
19672  
19673  
19674  
19675  
19676  
19677  
19678  
19679  
19680  
19681  
19682  
19683  
19684  
19685  
19686  
19687  
19688  
19689  
19690  
19691  
19692  
19693  
19694  
19695  
19696  
19697  
19698  
19699  
19700  
19701  
19702  
19703  
19704  
19705  
19706  
19707  
19708  
19709  
19710  
19711  
19712  
19713  
19714  
19715  
19716  
19717  
19718  
19719  
19720  
19721  
19722  
19723  
19724  
19725  
19726  
19727  
19728  
19729  
19730  
19731  
19732  
19733  
19734  
19735  
19736  
19737  
19738  
19739  
19740  
19741  
19742  
19743  
19744  
19745  
19746  
19747  
19748  
19749  
19750  
19751  
19752  
19753  
19754  
19755  
19756  
19757  
19758  
19759  
19760  
19761  
19762  
19763  
19764  
19765  
19766  
19767  
19768  
19769  
19770  
19771  
19772  
19773  
19774  
19775  
19776  
19777  
19778  
19779  
19780  
19781  
19782  
19783  
19784  
19785  
19786  
19787  
19788  
19789  
19790  
19791  
19792  
19793  
19794  
19795  
19796  
19797  
19798  
19799  
19800  
19801  
19802  
19803  
19804  
19805  
19806  
19807  
19808  
19809  
19810  
19811  
19812  
19813  
19814  
19815  
19816  
19817  
19818  
19819  
19820  
19821  
19822  
19823  
19824  
19825  
19826  
19827  
19828  
19829  
19830  
19831  
19832  
19833  
19834  
19835  
19836  
19837  
19838  
19839  
19840  
19841  
19842  
19843  
19844  
19845  
19846  
19847  
19848  
19849  
19850  
19851  
19852  
19853  
19854  
19855  
19856  
19857  
19858  
19859  
19860  
19861  
19862  
19863  
19864  
19865  
19866  
19867  
19868  
19869  
19870  
19871  
19872  
19873  
19874  
19875  
19876  
19877  
19878  
19879  
19880  
19881  
19882  
19883  
19884  
19885  
19886  
19887  
19888  
19889  
19890  
19891  
19892  
19893  
19894  
19895  
19896  
19897  
19898  
19899  
19900  
19901  
19902  
19903  
19904  
19905  
19906  
19907  
19908  
19909  
19910  
19911  
19912  
19913  
19914  
19915  
19916  
19917  
19918  
19919  
19920  
19921  
19922  
19923  
19924  
19925  
19926  
19927  
19928  
19929  
19930  
19931  
19932  
19933  
19934  
19935  
19936  
19937  
19938  
19939  
19940  
19941  
19942  
19943  
19944  
19945  
19946  
19947  
19948  
19949  
19950  
19951  
19952  
19953  
19954  
19955  
19956  
19957  
19958  
19959  
19960  
19961  
19962  
19963  
19964  
19965  
19966  
19967  
19968  
19969  
19970  
19971  
19972  
19973  
19974  
19975  
19976  
19977  
19978  
19979  
19980  
19981  
19982  
19983  
19984  
19985  
19986  
19987  
19988  
19989  
19990  
19991  
19992  
19993  
19994  
19995  
19996  
19997  
19998  
19999  
20000  
20001  
20002  
20003  
20004  
20005  
20006  
20007  
20008  
20009  
20010  
20011  
20012  
20013  
20014  
20015  
20016  
20017  
20018  
20019  
20020  
20021  
20022  
20023  
20024  
20025  
20026  
20027  
20028  
20029  
20030  
20031  
20032  
20033  
20034  
20035  
20036  
20037  
20038  
20039  
20040  
20041  
20042  
20043  
20044  
20045  
20046  
20047  
20048  
20049  
20050  
20051  
20052  
20053  
20054  
20055  
20056  
20057  
20058  
20059  
20060  
20061  
20062  
20063  
20064  
20065  
20066  
20067  
20068  
20069  
20070  
20071  
20072  
20073  
20074  
20075  
20076  
20077  
20078  
20079  
20080  
20081  
20082  
20083  
20084  
20085  
20086  
20087  
20088  
20089  
20090  
20091  
20092  
20093  
20094  
20095  
20096  
20097  
20098  
20099  
20100  
20101  
20102  
20103  
20104  
20105  
20106  
20107  
20108  
20109  
20110  
20111  
20112  
20113  
20114  
20115  
20116  
20117  
20118  
20119  
20120  
20121  
20122  
20123  
20124  
20125  
20126  
20127  
20128  
20129  
20130  
20131  
20132  
20133  
20134  
20135  
20136  
20137  
20138  
20139  
20140  
20141  
20142  
20143  
20144  
20145  
20146  
20147  
20148  
20149  
20150  
20151  
20152  
20153  
20154  
20155  
20156  
20157  
20158  
20159  
20160  
20161  
20162  
20163  
20164  
20165  
20166  
20167  
20168  
20169  
20170  
20171  
20172  
20173  
20174  
20175  
20176  
20177  
20178  
20179  
20180  
20181  
20182  
20183  
20184  
20185  
20186  
20187  
20188  
20189  
20190  
20191  
20192  
20193  
20194  
20195  
20196  
20197  
20198  
20199  
20200  
20201  
20202  
20203  
20204  
20205  
20206  
20207  
20208  
20209  
20210  
20211  
20212  
20213  
20214  
20215  
20216  
20217  
20218  
20219  
20220  
20221  
20222  
20223  
20224  
20225  
20226  
20227  
20228  
20229  
20230  
20231  
20232  
20233  
20234  
20235  
20236  
20237  
20238  
20239  
20240  
20241  
20242  
20243  
20244  
20245  
20246  
20247  
20248  
20249  
20250  
20251  
20252  
20253  
20254  
20255  
20256  
20257  
20258  
20259  
20260  
20261  
20262  
20263  
20264  
20265  
20266  
20267  
20268  
20269  
20270  
20271  
20272  
20273  
20274  
20275  
20276  
20277  
20278  
20279  
20280  
20281  
20282  
20283  
20284  
20285  
20286  
20287  
20288  
20289  
20290  
20291  
20292  
20293  
20294  
20295  
20296  
20297  
20298  
20299  
20300  
20301  
20302  
20303  
20304  
20305  
20306  
20307  
20308  
20309  
20310  
20311  
20312  
20313  
20314  
20315  
20316  
20317  
20318  
20319  
20320  
20321  
20322  
20323  
20324  
20325  
20326  
20327  
20328  
20329  
20330  
20331  
20332  
20333  
20334  
20335  
20336  
20337  
20338  
20339  
20340  
20341  
20342  
20343  
20344  
20345  
20346  
20347  
20348  
20349  
20350  
20351  
20352  
20353  
20354  
20355  
20356  
20357  
20358  
20359  
20360  
20361  
20362  
20363  
20364  
20365  
20366  
20367  
20368  
20369  
20370  
20371  
20372  
20373  
20374  
20375  
20376  
20377  
20378  
20379  
20380  
20381  
20382  
20383  
20384  
20385  
20386  
20387  
20388  
20389  
20390  
20391  
20392  
20393  
20394  
20395  
20396  
20397  
20398  
20399  
20400  
20401  
20402  
20403  
20404  
20405  
20406  
20407  
20408  
20409  
20410  
20411  
20412  
20413  
20414  
20415  
20416  
20417  
20418  
20419  
20420  
20421  
20422  
20423  
20424  
20425  
20426  
20427  
20428  
20429  
20430  
20431  
20432  
20433  
20434  
20435  
20436  
20437  
20438  
20439  
20440  
20441  
20442  
20443  
20444  
20445  
20446  
20447  
20448  
20449  
20450  
20451  
20452  
20453  
20454  
20455  
20456  
20457  
20458  
20459  
20460  
20461  
20462  
20463  
20464  
20465  
20466  
20467  
20468  
20469  
20470  
20471  
20472  
20473  
20474  
20475  
20476  
20477  
20478  
20479  
20480  
20481  
20482  
20483  
20484  
20485  
20486  
20487  
20488  
20489  
20490  
20491  
20492  
20493  
20494  
20495  
20496  
20497  
20498  
20499  
20500  
20501  
20502  
20503  
20504  
20505  
20506  
20507  
20508  
20509  
20510  
20511  
20512  
20513  
20514  
20515  
20516  
20517  
20518  
20519  
20520  
20521  
20522  
20523  
20524  
20525  
20526  
20527  
20528  
20529  
20530  
20531  
20532  
20533  
20534  
20535  
20536  
20537  
20538  
20539  
20540  
20541  
20542  
20543  
20544  
20545  
20546  
20547  
20548  
20549  
20550  
20551  
20552  
20553  
20554  
20555  
20556  
20557  
20558  
20559  
20560  
20561  
20562  
20563  
20564  
20565  
20566  
20567  
20568  
20569  
20570  
20571  
20572  
20573  
20574  
20575  
20576  
20577  
20578  
20579  
20580  
20581  
20582  
20583  
20584  
20585  
20586  
20587  
20588  
20589  
20590  
20591  
20592  
20593  
20594  
20595  
20596  
20597  
20598  
20599  
20600  
20601  
20602  
20603  
20604  
20605  
20606  
20607  
20608  
20609  
20610  
20611  
20612  
20613  
20614  
20615  
20616  
20617  
20618  
20619  
20620  
20621  
20622  
20623  
20624  
20625  
20626  
20627  
20628  
20629  
20630  
20631  
20632  
20633  
20634  
20635  
20636  
20637  
20638  
20639  
20640  
20641  
20642  
20643  
20644  
20645  
20646  
20647  
20648  
20649  
20650  
20651  
20652  
20653  
20654  
20655  
20656  
20657  
20658  
20659  
20660  
20661  
20662  
20663  
20664  
20665  
20666  
20667  
20668  
20669  
20670  
20671  
20672  
20673  
20674  
20675  
20676  
20677  
20678  
20679  
20680  
20681  
20682  
20683  
20684  
20685  
20686  
20687  
20688  
20689  
20690  
20691  
20692  
20693  
20694  
20695  
20696  
20697  
20698  
20699  
20700  
20701  
20702  
20703  
20704  
20705  
20706  
20707  
20708  
20709  
20710  
20711  
20712  
20713  
20714  
20715  
20716  
20717  
20718  
20719  
20720  
20721  
20722  
20723  
20724  
20725  
20726  
20727  
20728  
20729  
20730  
20731  
20732  
20733  
20734  
20735  
20736  
20737  
20738  
20739  
20740  
20741  
20742  
20743  
20744  
20745  
20746  
20747  
20748  
20749  
20750  
20751  
20752  
20753  
20754  
20755  
20756  
20757  
20758  
20759  
20760  
20761  
20762  
20763  
20764  
20765  
20766  
20767  
20768  
20769  
20770  
20771  
20772  
20773  
20774  
20775  
20776  
20777  
20778  
20779  
20780  
20781  
20782  
20783  
20784  
20785  
20786  
20787  
20788  
20789  
20790  
20791  
20792  
20793  
20794  
20795  
20796  
20797  
20798  
20799  
20800  
20801  
20802  
20803  
20804  
20805  
20806  
20807  
20808  
20809  
20810  
20811  
20812  
20813  
20814  
20815  
20816  
20817  
20818  
20819  
20820  
20821  
20822  
20823  
20824  
20825  
20826  
20827  
20828  
20829  
20830  
20831  
20832  
20833  
20834  
20835  
20836  
20837  
20838  
20839  
20840  
20841  
20842  
20843  
20844  
20845  
20846  
20847  
20848  
20849  
20850  
20851  
20852  
20853  
20854  
20855  
20856  
20857  
20858  
20859  
20860  
20861  
20862  
20863  
20864  
20865  
20866  
20867  
20868  
20869  
20870  
20871  
20872  
20873  
20874  
20875  
20876  
20877  
20878  
20879  
20880  
20881  
20882  
20883  
20884  
20885  
20886  
20887  
20888  
20889  
20890  
20891  
20892  
20893  
20894  
20895  
20896  
20897  
20898  
20899  
20900  
20901  
20902  
20903  
20904  
20905  
20906  
20907  
20908  
20909  
20910  
20911  
20912  
20913  
20914  
20915  
20916  
20917  
20918  
20919  
20920  
20921  
20922  
20923  
20924  
20925  
20926  
20927  
20928  
20929  
20930  
20931  
20932  
20933  
20934  
20935  
20936  
20937  
20938  
20939  
20940  
20941  
20942  
20943  
20944  
20945  
20946  
20947  
20948  
20949  
20950  
20951  
20952  
20953  
20954  
20955  
20956  
20957  
20958  
20959  
20960  
20961  
20962  
20963  
20964  
20965  
20966  
20967  
20968  
20969  
20970  
20971  
20972  
20973  
20974  
20975  
20976  
20977  
20978  
20979  
20980  
20981  
20982  
20983  
20984  
20985  

Author comment

Began life as a copy of #1033525

full source  download  show line numbers  debug dex  old transpilations   

Travelled to 3 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj

No comments. add comment

Snippet ID: #1033636
Snippet name: Gazelle 22 Standalone [stable version]
Eternal ID of this version: #1033636/25
Text MD5: 51a7295aa229a4ae9c8b296f2d932f51
Transpilation MD5: 4c6fa38870f514b15736bd85f2cbcc56
Author: stefan
Category: javax / screen recognition
Type: JavaX source code (desktop)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2022-01-09 16:30:36
Source code size: 604779 bytes / 20985 lines
Pitched / IR pitched: No / No
Views / Downloads: 604 / 3144
Version history: 24 change(s)
Referenced in: [show references]