/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.io.PrintStream;
public class Main {
public static void main
(String args
[]) {
private StackTraceElement getCallSite() {
for (StackTraceElement e
: Thread.
currentThread() .getStackTrace())
if (!e.getMethodName().equals("getStackTrace")
&& !e.getClassName().equals(getClass().getName()))
return e;
return null;
}
@Override
public void println
(String s
) { }
@Override
public void println
(Object o
) { StackTraceElement e = getCallSite();
String callSite
= e
== null ? "??" : e.
getFileName() + ":" + e.getLineNumber();
super.println(o + "\t\t[" + callSite + "]");
}
});
System.
out.
println("Hello world"); printStuff();
}
public static void printStuff() {
System.
out.
println("More output!"); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgIFN5c3RlbS5zZXRPdXQobmV3IFByaW50U3RyZWFtKFN5c3RlbS5vdXQpIHsKCiAgICAgICAgICAgIHByaXZhdGUgU3RhY2tUcmFjZUVsZW1lbnQgZ2V0Q2FsbFNpdGUoKSB7CiAgICAgICAgICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IGUgOiBUaHJlYWQuY3VycmVudFRocmVhZCgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTdGFja1RyYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoImdldFN0YWNrVHJhY2UiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWUuZ2V0Q2xhc3NOYW1lKCkuZXF1YWxzKGdldENsYXNzKCkuZ2V0TmFtZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIHByaW50bG4oU3RyaW5nIHMpIHsKICAgICAgICAgICAgICAgIHByaW50bG4oKE9iamVjdCkgcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBwcmludGxuKE9iamVjdCBvKSB7CiAgICAgICAgICAgICAgICBTdGFja1RyYWNlRWxlbWVudCBlID0gZ2V0Q2FsbFNpdGUoKTsKICAgICAgICAgICAgICAgIFN0cmluZyBjYWxsU2l0ZSA9IGUgPT0gbnVsbCA/ICI/PyIgOiBlLmdldEZpbGVOYW1lKCkgKyAiOiIKICAgICAgICAgICAgICAgICAgICAgICAgKyBlLmdldExpbmVOdW1iZXIoKTsKICAgICAgICAgICAgICAgIHN1cGVyLnByaW50bG4obyArICJcdFx0WyIgKyBjYWxsU2l0ZSArICJdIik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyB3b3JsZCIpOwogICAgICAgIHByaW50U3R1ZmYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdHVmZigpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vcmUgb3V0cHV0ISIpOwogICAgfQp9Cg==