import java.util.* ;
import static java.util .stream .Collectors .toList ;
class Ideone {
public static void main
( String [ ] args
) { String points
= "54.199997, 88.399216, 135.2, 250.09616, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 120.79874, 135.2, 168.19669, 178.7, 207.49712, " + "135.2, 168.19669, 370.1, 391.69785, 108.2, 120.79874, 135.2, 189.49884, 135.2, 180.7966, 370.1, 391.69785, 108.2, 115.39928, 135.2, 215.59856, " +
"135.2, 172.69742, 377.9, 391.6986, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 120.79874, 135.2, 212.59627, 135.2, 172.69742, 370.1, 391.69785, " +
"108.2, 120.79874, 135.2, 212.59627, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 212.59627, 135.2, 172.69742, 374.0, 391.69824, " +
"108.2, 115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 120.79874, 135.2, 189.49884, " +
"135.2, 180.7966, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 120.79874, 135.2, 212.59627, 135.2, 172.69742, 374.0, 391.69824, " +
"108.2, 120.79874, 135.2, 217.09616, 135.2, 170.59763, 377.9, 391.6986, 108.2, 120.79874, 135.2, 208.99689, 135.2, 163.39717, 374.0, 391.69824, " +
"108.2, 120.79874, 135.2, 214.6982, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 189.49884, 135.2, 180.7966, 374.0, 391.69824, " +
"135.2, 250.09616, 517.1, 544.6972, 108.2, 120.79874, 135.2, 198.79779, 135.2, 187.69778, 377.9, 391.6986, 108.2, 115.39928, 135.2, 215.59856, " +
"135.2, 172.69742, 377.9, 391.6986, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 121.69865, 135.2, 191.89688, 135.2, 214.39604, 370.1, 391.69785, " +
"108.2, 120.79874, 135.2, 217.39865, 135.2, 175.69711, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 120.79874, 135.2, 219.49155, " +
"135.2, 163.39717, 374.0, 391.69824, 108.2, 120.79874, 135.2, 201.19598, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 218.59897, " +
"135.2, 189.49573, 370.1, 391.69785, 108.2, 120.79874, 135.2, 218.59897, 135.2, 189.49573, 370.1, 391.69785, 108.2, 120.79874, 135.2, 209.5979, " +
"135.2, 163.39717, 370.1, 391.69785, 108.2, 120.79874, 135.2, 174.19609, 135.2, 172.69742, 370.1, 391.69785, 108.2, 120.79874, 135.2, 174.19609, " +
"135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 189.49884, 135.2, 180.7966, 374.0, 391.69824, 108.2, 120.79874, 135.2, 214.39862, " +
"135.2, 178.9956, 374.0, 391.69824, 108.2, 120.79874, 135.2, 161.59735, 135.2, 196.39772, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, " +
"108.2, 115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, 108.2, 115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, " +
"108.2, 120.79874, 135.2, 195.1961, 135.2, 208.6958, 135.2, 178.0957, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 118.99892, " +
"135.2, 144.1991, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 118.99892, 135.2, 193.09724, 374.0, 391.69824, 108.2, 120.79874, " +
"135.2, 185.59799, 135.2, 189.19801, 377.9, 391.6986, 108.2, 120.79874, 135.2, 202.997, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, " +
"135.2, 217.69742, 135.2, 163.39717, 374.0, 391.69824, 135.2, 250.09616, 517.1, 544.6972, 108.2, 120.79874, 135.2, 187.69786, 135.2, 172.69742, " +
"370.1, 391.69785, 108.2, 115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, 108.2, 120.79874, 135.2, 208.99646, 135.2, 182.8964, " +
"374.0, 391.69824, 108.2, 120.79874, 135.2, 214.6982, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 178.69823, 135.2, 163.39717, " +
"374.0, 391.69824, 108.2, 120.79874, 135.2, 178.69844, 135.2, 172.69742, 370.1, 391.69785, 108.2, 120.79874, 135.2, 178.69844, 135.2, 172.69742, " +
"377.9, 391.6986, 108.2, 120.79874, 135.2, 221.29475, 135.2, 163.39717, 374.0, 391.69824, 108.2, 120.79874, 135.2, 221.29475, 135.2, 163.39717, " +
"370.1, 391.69785, 524.7, 553.7995, 54.199997, 88.399216, 108.2, 121.69865, 135.2, 191.89688, 135.2, 214.39604, 440.6, 468.19724, 108.2, 125.59826, " +
"135.2, 179.2979, 187.7, 210.49771, 135.2, 208.69688, 370.1, 391.69785, 108.2, 120.79874, 135.2, 178.69844, 135.2, 172.69742, 374.0, 391.69824, " +
"517.1, 544.6972, 54.199997, 88.399216, 108.2, 121.69865, 135.2, 191.89688, 135.2, 214.39604, 436.7, 468.19687, 108.2, 118.698944, 135.2, " +
"196.99606, 135.2, 172.99727, 360.2, 391.69687, 108.2, 120.79874, 135.2, 201.19598, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, " +
"209.5979, 135.2, 163.39717, 370.1, 391.69785, 108.2, 120.79874, 135.2, 189.49884, 135.2, 180.7966, 374.0, 391.69824, 108.2, 120.79874, 135.2, " +
"208.69637, 135.2, 175.39758, 377.9, 391.6986, 108.2, 115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, 108.2, 115.39928, 135.2, " +
"215.59856, 135.2, 172.69742, 377.9, 391.6986, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 121.69865, 135.2, 191.89688, 135.2, 214.39604, 436.7, " +
"468.19687, 108.2, 118.698944, 135.2, 208.09802, 135.2, 162.79724, 364.1, 391.69724, 135.2, 250.09616, 517.1, 544.6972, 108.2, 120.79874, 135.2, " +
"178.0957, 135.2, 163.39717, 374.0, 391.69824, 108.2, 120.79874, 135.2, 185.59691, 135.2, 163.39717, 370.1, 391.69785, 108.2, 115.39928, 135.2, " +
"178.69844, 135.2, 172.69742, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 125.59826, 135.2, 179.2979, 187.7, 210.49771, 135.2, " +
"213.79517, 370.1, 391.69785, 517.1, 544.6972, 54.199997, 88.399216, 108.2, 120.79874, 135.2, 214.6982, 135.2, 172.69742, 370.1, 391.69785, 108.2, " +
"120.79874, 135.2, 212.59627, 135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 180.79544, 135.2, 167.29678, 374.0, 391.69824, 108.2, " +
"120.79874, 135.2, 165.49696, 135.2, 167.29678, 374.0, 391.69824, 108.2, 120.79874, 135.2, 165.49696, 135.2, 167.29678, 374.0, 391.69824, 108.2, " +
"115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, 108.2, 115.39928, 135.2, 215.59856, 135.2, 172.69742, 377.9, 391.6986, 108.2, " +
"115.39928, 135.2, 190.69446, 135.2, 190.69894, 377.9, 391.6986, 108.2, 115.39928, 135.2, 165.49861, 135.2, 195.19905, 377.9, 391.6986, 517.1, " +
"544.6972, 54.199997, 88.399216, 108.2, 118.99892, 135.2, 205.99895, 135.2, 195.79625, 374.0, 391.69824, 517.1, 544.6972, 54.199997, 88.399216, " +
"108.2, 118.99892, 135.2, 201.49861, 374.0, 391.69824, 108.2, 118.698944, 135.2, 201.79861, 135.2, 183.19757, 364.1, 391.69724, 517.1, 544.6972, " +
"54.199997, 87.499214, 108.2, 125.59826, 135.2, 182.2976, 190.7, 214.39763, 135.2, 215.897, 370.1, 391.69785, 517.1, 544.6972, 54.199997, " +
"87.499214, 108.2, 118.99892, 135.2, 211.99535, 370.1, 391.69785, 108.2, 121.69865, 135.2, 191.89688, 135.2, 214.39604, 364.1, 391.69724, 108.2, " +
"121.69865, 135.2, 191.89688, 135.2, 214.39604, 370.1, 391.69785, 108.2, 125.59826, 135.2, 222.19763, 135.2, 215.2975, 370.1, 391.69785, 108.2, " +
"115.39928, 135.2, 199.99884, 135.2, 193.99792, 377.9, 391.6986, 108.2, 115.39928, 135.2, 175.69751, 135.2, 166.39688, 374.0, 391.69824, 135.2, " +
"250.09616, 523.1, 544.6978, 108.2, 115.39928, 135.2, 198.797, 135.2, 171.1964, 374.0, 391.69824, 108.2, 115.39928, 135.2, 198.797, 135.2, " +
"171.1964, 377.9, 391.6986, 108.2, 115.39928, 135.2, 198.797, 135.2, 171.1964, 377.9, 391.6986, 523.1, 544.6978, 54.199997, 87.499214, 108.2, " +
"118.698944, 135.2, 174.19894, 135.2, 161.59735, 370.1, 391.69785, 108.2, 120.79874, 135.2, 178.69844, 135.2, 180.7966, 377.9, 391.6986, 108.2, " +
"120.79874, 135.2, 189.49884, 135.2, 180.7966, 370.1, 391.69785, 108.2, 115.39928, 135.2, 160.99742, 135.2, 195.79776, 377.9, 391.6986, 523.1, " +
"544.6978, 54.199997, 87.499214, 108.2, 120.79874, 135.2, 217.69742, 135.2, 163.39717, 370.1, 391.69785, 108.2, 120.79874, 135.2, 212.59627, " +
"135.2, 172.69742, 374.0, 391.69824, 108.2, 120.79874, 135.2, 187.09769, 135.2, 163.39717, 377.9, 391.6986, 108.2, 115.39928, 135.2, 215.59856, " +
"135.2, 172.69742, 377.9, 391.6986, 108.2, 120.79874, 135.2, 195.1961, 135.2, 209.29948, 135.2, 166.09691, 135.2, 173.89784, 135.2, 200.29836, " +
"370.1, 391.69785, 108.2, 118.698944, 135.2, 181.39537, 135.2, 193.09871, 377.9, 391.6986, 527.0, 544.69824, 54.199997, 87.499214, 108.2, " +
"125.59826, 135.2, 179.2979, 187.7, 211.39763, 135.2, 208.69688, 370.1, 391.69785, 108.2, 120.79874, 135.2, 212.59627, 135.2, 172.69742, 374.0, " +
"391.69824, 524.7, 553.7995, 54.199997, 87.499214, 108.2, 120.79874, 135.2, 216.79735, 135.2, 163.39717, 374.0, 391.69824, 108.2, 121.69865, " +
"135.2, 191.89688, 135.2, 214.39604, 440.6, 468.19724, 517.1, 544.6972" ;
String [ ] pointss
= points.
split ( ", " ) ; List< Column> columns = new ArrayList<> ( ) ;
for ( int i = 0 ; i < pointss.length ; i += 2 ) {
columns.
add ( new Column
( Float .
parseFloat ( pointss
[ i
] ) ,
Float .
parseFloat ( pointss
[ i
+ 1 ] ) ) ) ; }
List< Column> columnsWithOverlap = columns.stream ( )
.distinct ( )
.sorted ( )
.collect ( toList( ) ) ;
System .
out .
println ( columnsWithOverlap
) ; }
}
class Column implements Comparable< Column> {
private final float startX;
private final float endX;
public Column( float startX, float endX) {
this .startX = startX;
this .endX = endX;
}
public boolean isSameColumn( Column c) {
return c.startX <= this .startX && this .startX < c.endX || this .startX <= c.startX && c.startX < this .endX ;
}
@Override
public int hashCode( ) {
return Objects.hash ( startX, endX) ;
}
@Override
public boolean equals
( Object obj
) { if ( obj == null ) return false ;
if ( getClass( ) != obj.getClass ( ) ) return false ;
final Column other = ( Column) obj;
return this .startX == other.startX && this .endX == other.endX ;
}
@Override
public int compareTo( Column o) {
return isSameColumn
( o
) ? 0 : Float .
compare ( this .
startX , o.
startX ) ; }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgc3RhdGljIGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9ycy50b0xpc3Q7CgpjbGFzcyBJZGVvbmUgewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKCSAgU3RyaW5nIHBvaW50cyA9ICI1NC4xOTk5OTcsIDg4LjM5OTIxNiwgMTM1LjIsIDI1MC4wOTYxNiwgNTE3LjEsIDU0NC42OTcyLCA1NC4xOTk5OTcsIDg4LjM5OTIxNiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE2OC4xOTY2OSwgMTc4LjcsIDIwNy40OTcxMiwgIiArCgkgICAgICAgICAgIjEzNS4yLCAxNjguMTk2NjksIDM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxODkuNDk4ODQsIDEzNS4yLCAxODAuNzk2NiwgMzcwLjEsIDM5MS42OTc4NSwgMTA4LjIsIDExNS4zOTkyOCwgMTM1LjIsIDIxNS41OTg1NiwgIiArCgkgICAgICAgICAgIjEzNS4yLCAxNzIuNjk3NDIsIDM3Ny45LCAzOTEuNjk4NiwgNTE3LjEsIDU0NC42OTcyLCA1NC4xOTk5OTcsIDg4LjM5OTIxNiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIxMi41OTYyNywgMTM1LjIsIDE3Mi42OTc0MiwgMzcwLjEsIDM5MS42OTc4NSwgIiArCgkgICAgICAgICAgIjEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTIuNTk2MjcsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTIuNTk2MjcsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsICIgKwoJICAgICAgICAgICIxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMjE1LjU5ODU2LCAxMzUuMiwgMTcyLjY5NzQyLCAzNzcuOSwgMzkxLjY5ODYsIDUxNy4xLCA1NDQuNjk3MiwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxODkuNDk4ODQsICIgKwoJICAgICAgICAgICIxMzUuMiwgMTgwLjc5NjYsIDM3NC4wLCAzOTEuNjk4MjQsIDUxNy4xLCA1NDQuNjk3MiwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTIuNTk2MjcsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsICIgKwoJICAgICAgICAgICIxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjE3LjA5NjE2LCAxMzUuMiwgMTcwLjU5NzYzLCAzNzcuOSwgMzkxLjY5ODYsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMDguOTk2ODksIDEzNS4yLCAxNjMuMzk3MTcsIDM3NC4wLCAzOTEuNjk4MjQsICIgKwoJICAgICAgICAgICIxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjE0LjY5ODIsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxODkuNDk4ODQsIDEzNS4yLCAxODAuNzk2NiwgMzc0LjAsIDM5MS42OTgyNCwgIiArCgkgICAgICAgICAgIjEzNS4yLCAyNTAuMDk2MTYsIDUxNy4xLCA1NDQuNjk3MiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE5OC43OTc3OSwgMTM1LjIsIDE4Ny42OTc3OCwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMjE1LjU5ODU2LCAiICsKCSAgICAgICAgICAiMTM1LjIsIDE3Mi42OTc0MiwgMzc3LjksIDM5MS42OTg2LCA1MTcuMSwgNTQ0LjY5NzIsIDU0LjE5OTk5NywgODguMzk5MjE2LCAxMDguMiwgMTIxLjY5ODY1LCAxMzUuMiwgMTkxLjg5Njg4LCAxMzUuMiwgMjE0LjM5NjA0LCAzNzAuMSwgMzkxLjY5Nzg1LCAiICsKCSAgICAgICAgICAiMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIxNy4zOTg2NSwgMTM1LjIsIDE3NS42OTcxMSwgMzc0LjAsIDM5MS42OTgyNCwgNTE3LjEsIDU0NC42OTcyLCA1NC4xOTk5OTcsIDg4LjM5OTIxNiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIxOS40OTE1NSwgIiArCgkgICAgICAgICAgIjEzNS4yLCAxNjMuMzk3MTcsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMDEuMTk1OTgsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTguNTk4OTcsICIgKwoJICAgICAgICAgICIxMzUuMiwgMTg5LjQ5NTczLCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjE4LjU5ODk3LCAxMzUuMiwgMTg5LjQ5NTczLCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjA5LjU5NzksICIgKwoJICAgICAgICAgICIxMzUuMiwgMTYzLjM5NzE3LCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTc0LjE5NjA5LCAxMzUuMiwgMTcyLjY5NzQyLCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTc0LjE5NjA5LCAiICsKCSAgICAgICAgICAiMTM1LjIsIDE3Mi42OTc0MiwgMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE4OS40OTg4NCwgMTM1LjIsIDE4MC43OTY2LCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjE0LjM5ODYyLCAiICsKCSAgICAgICAgICAiMTM1LjIsIDE3OC45OTU2LCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTYxLjU5NzM1LCAxMzUuMiwgMTk2LjM5NzcyLCAzNzQuMCwgMzkxLjY5ODI0LCA1MTcuMSwgNTQ0LjY5NzIsIDU0LjE5OTk5NywgODguMzk5MjE2LCAiICsKCSAgICAgICAgICAiMTA4LjIsIDExNS4zOTkyOCwgMTM1LjIsIDIxNS41OTg1NiwgMTM1LjIsIDE3Mi42OTc0MiwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMjE1LjU5ODU2LCAxMzUuMiwgMTcyLjY5NzQyLCAzNzcuOSwgMzkxLjY5ODYsICIgKwoJICAgICAgICAgICIxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTk1LjE5NjEsIDEzNS4yLCAyMDguNjk1OCwgMTM1LjIsIDE3OC4wOTU3LCAzNzQuMCwgMzkxLjY5ODI0LCA1MTcuMSwgNTQ0LjY5NzIsIDU0LjE5OTk5NywgODguMzk5MjE2LCAxMDguMiwgMTE4Ljk5ODkyLCAiICsKCSAgICAgICAgICAiMTM1LjIsIDE0NC4xOTkxLCAzNzQuMCwgMzkxLjY5ODI0LCA1MTcuMSwgNTQ0LjY5NzIsIDU0LjE5OTk5NywgODguMzk5MjE2LCAxMDguMiwgMTE4Ljk5ODkyLCAxMzUuMiwgMTkzLjA5NzI0LCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTIwLjc5ODc0LCAiICsKCSAgICAgICAgICAiMTM1LjIsIDE4NS41OTc5OSwgMTM1LjIsIDE4OS4xOTgwMSwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjAyLjk5NywgMTM1LjIsIDE3Mi42OTc0MiwgMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgIiArCgkgICAgICAgICAgIjEzNS4yLCAyMTcuNjk3NDIsIDEzNS4yLCAxNjMuMzk3MTcsIDM3NC4wLCAzOTEuNjk4MjQsIDEzNS4yLCAyNTAuMDk2MTYsIDUxNy4xLCA1NDQuNjk3MiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE4Ny42OTc4NiwgMTM1LjIsIDE3Mi42OTc0MiwgIiArCgkgICAgICAgICAgIjM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMTUuMzk5MjgsIDEzNS4yLCAyMTUuNTk4NTYsIDEzNS4yLCAxNzIuNjk3NDIsIDM3Ny45LCAzOTEuNjk4NiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIwOC45OTY0NiwgMTM1LjIsIDE4Mi44OTY0LCAiICsKCSAgICAgICAgICAiMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIxNC42OTgyLCAxMzUuMiwgMTcyLjY5NzQyLCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTc4LjY5ODIzLCAxMzUuMiwgMTYzLjM5NzE3LCAiICsKCSAgICAgICAgICAiMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE3OC42OTg0NCwgMTM1LjIsIDE3Mi42OTc0MiwgMzcwLjEsIDM5MS42OTc4NSwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE3OC42OTg0NCwgMTM1LjIsIDE3Mi42OTc0MiwgIiArCgkgICAgICAgICAgIjM3Ny45LCAzOTEuNjk4NiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIyMS4yOTQ3NSwgMTM1LjIsIDE2My4zOTcxNywgMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIyMS4yOTQ3NSwgMTM1LjIsIDE2My4zOTcxNywgIiArCgkgICAgICAgICAgIjM3MC4xLCAzOTEuNjk3ODUsIDUyNC43LCA1NTMuNzk5NSwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsIDEwOC4yLCAxMjEuNjk4NjUsIDEzNS4yLCAxOTEuODk2ODgsIDEzNS4yLCAyMTQuMzk2MDQsIDQ0MC42LCA0NjguMTk3MjQsIDEwOC4yLCAxMjUuNTk4MjYsICIgKwoJICAgICAgICAgICIxMzUuMiwgMTc5LjI5NzksIDE4Ny43LCAyMTAuNDk3NzEsIDEzNS4yLCAyMDguNjk2ODgsIDM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxNzguNjk4NDQsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsICIgKwoJICAgICAgICAgICI1MTcuMSwgNTQ0LjY5NzIsIDU0LjE5OTk5NywgODguMzk5MjE2LCAxMDguMiwgMTIxLjY5ODY1LCAxMzUuMiwgMTkxLjg5Njg4LCAxMzUuMiwgMjE0LjM5NjA0LCA0MzYuNywgNDY4LjE5Njg3LCAxMDguMiwgMTE4LjY5ODk0NCwgMTM1LjIsICIgKwoJICAgICAgICAgICIxOTYuOTk2MDYsIDEzNS4yLCAxNzIuOTk3MjcsIDM2MC4yLCAzOTEuNjk2ODcsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMDEuMTk1OTgsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAiICsKCSAgICAgICAgICAiMjA5LjU5NzksIDEzNS4yLCAxNjMuMzk3MTcsIDM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxODkuNDk4ODQsIDEzNS4yLCAxODAuNzk2NiwgMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsICIgKwoJICAgICAgICAgICIyMDguNjk2MzcsIDEzNS4yLCAxNzUuMzk3NTgsIDM3Ny45LCAzOTEuNjk4NiwgMTA4LjIsIDExNS4zOTkyOCwgMTM1LjIsIDIxNS41OTg1NiwgMTM1LjIsIDE3Mi42OTc0MiwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgIiArCgkgICAgICAgICAgIjIxNS41OTg1NiwgMTM1LjIsIDE3Mi42OTc0MiwgMzc3LjksIDM5MS42OTg2LCA1MTcuMSwgNTQ0LjY5NzIsIDU0LjE5OTk5NywgODguMzk5MjE2LCAxMDguMiwgMTIxLjY5ODY1LCAxMzUuMiwgMTkxLjg5Njg4LCAxMzUuMiwgMjE0LjM5NjA0LCA0MzYuNywgIiArCgkgICAgICAgICAgIjQ2OC4xOTY4NywgMTA4LjIsIDExOC42OTg5NDQsIDEzNS4yLCAyMDguMDk4MDIsIDEzNS4yLCAxNjIuNzk3MjQsIDM2NC4xLCAzOTEuNjk3MjQsIDEzNS4yLCAyNTAuMDk2MTYsIDUxNy4xLCA1NDQuNjk3MiwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsICIgKwoJICAgICAgICAgICIxNzguMDk1NywgMTM1LjIsIDE2My4zOTcxNywgMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE4NS41OTY5MSwgMTM1LjIsIDE2My4zOTcxNywgMzcwLjEsIDM5MS42OTc4NSwgMTA4LjIsIDExNS4zOTkyOCwgMTM1LjIsICIgKwoJICAgICAgICAgICIxNzguNjk4NDQsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsIDUxNy4xLCA1NDQuNjk3MiwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsIDEwOC4yLCAxMjUuNTk4MjYsIDEzNS4yLCAxNzkuMjk3OSwgMTg3LjcsIDIxMC40OTc3MSwgMTM1LjIsICIgKwoJICAgICAgICAgICIyMTMuNzk1MTcsIDM3MC4xLCAzOTEuNjk3ODUsIDUxNy4xLCA1NDQuNjk3MiwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTQuNjk4MiwgMTM1LjIsIDE3Mi42OTc0MiwgMzcwLjEsIDM5MS42OTc4NSwgMTA4LjIsICIgKwoJICAgICAgICAgICIxMjAuNzk4NzQsIDEzNS4yLCAyMTIuNTk2MjcsIDEzNS4yLCAxNzIuNjk3NDIsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxODAuNzk1NDQsIDEzNS4yLCAxNjcuMjk2NzgsIDM3NC4wLCAzOTEuNjk4MjQsIDEwOC4yLCAiICsKCSAgICAgICAgICAiMTIwLjc5ODc0LCAxMzUuMiwgMTY1LjQ5Njk2LCAxMzUuMiwgMTY3LjI5Njc4LCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTY1LjQ5Njk2LCAxMzUuMiwgMTY3LjI5Njc4LCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgIiArCgkgICAgICAgICAgIjExNS4zOTkyOCwgMTM1LjIsIDIxNS41OTg1NiwgMTM1LjIsIDE3Mi42OTc0MiwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMjE1LjU5ODU2LCAxMzUuMiwgMTcyLjY5NzQyLCAzNzcuOSwgMzkxLjY5ODYsIDEwOC4yLCAiICsKCSAgICAgICAgICAiMTE1LjM5OTI4LCAxMzUuMiwgMTkwLjY5NDQ2LCAxMzUuMiwgMTkwLjY5ODk0LCAzNzcuOSwgMzkxLjY5ODYsIDEwOC4yLCAxMTUuMzk5MjgsIDEzNS4yLCAxNjUuNDk4NjEsIDEzNS4yLCAxOTUuMTk5MDUsIDM3Ny45LCAzOTEuNjk4NiwgNTE3LjEsICIgKwoJICAgICAgICAgICI1NDQuNjk3MiwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsIDEwOC4yLCAxMTguOTk4OTIsIDEzNS4yLCAyMDUuOTk4OTUsIDEzNS4yLCAxOTUuNzk2MjUsIDM3NC4wLCAzOTEuNjk4MjQsIDUxNy4xLCA1NDQuNjk3MiwgNTQuMTk5OTk3LCA4OC4zOTkyMTYsICIgKwoJICAgICAgICAgICIxMDguMiwgMTE4Ljk5ODkyLCAxMzUuMiwgMjAxLjQ5ODYxLCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTE4LjY5ODk0NCwgMTM1LjIsIDIwMS43OTg2MSwgMTM1LjIsIDE4My4xOTc1NywgMzY0LjEsIDM5MS42OTcyNCwgNTE3LjEsIDU0NC42OTcyLCAiICsKCSAgICAgICAgICAiNTQuMTk5OTk3LCA4Ny40OTkyMTQsIDEwOC4yLCAxMjUuNTk4MjYsIDEzNS4yLCAxODIuMjk3NiwgMTkwLjcsIDIxNC4zOTc2MywgMTM1LjIsIDIxNS44OTcsIDM3MC4xLCAzOTEuNjk3ODUsIDUxNy4xLCA1NDQuNjk3MiwgNTQuMTk5OTk3LCAiICsKCSAgICAgICAgICAiODcuNDk5MjE0LCAxMDguMiwgMTE4Ljk5ODkyLCAxMzUuMiwgMjExLjk5NTM1LCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgMTIxLjY5ODY1LCAxMzUuMiwgMTkxLjg5Njg4LCAxMzUuMiwgMjE0LjM5NjA0LCAzNjQuMSwgMzkxLjY5NzI0LCAxMDguMiwgIiArCgkgICAgICAgICAgIjEyMS42OTg2NSwgMTM1LjIsIDE5MS44OTY4OCwgMTM1LjIsIDIxNC4zOTYwNCwgMzcwLjEsIDM5MS42OTc4NSwgMTA4LjIsIDEyNS41OTgyNiwgMTM1LjIsIDIyMi4xOTc2MywgMTM1LjIsIDIxNS4yOTc1LCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgIiArCgkgICAgICAgICAgIjExNS4zOTkyOCwgMTM1LjIsIDE5OS45OTg4NCwgMTM1LjIsIDE5My45OTc5MiwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMTc1LjY5NzUxLCAxMzUuMiwgMTY2LjM5Njg4LCAzNzQuMCwgMzkxLjY5ODI0LCAxMzUuMiwgIiArCgkgICAgICAgICAgIjI1MC4wOTYxNiwgNTIzLjEsIDU0NC42OTc4LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMTk4Ljc5NywgMTM1LjIsIDE3MS4xOTY0LCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMTk4Ljc5NywgMTM1LjIsICIgKwoJICAgICAgICAgICIxNzEuMTk2NCwgMzc3LjksIDM5MS42OTg2LCAxMDguMiwgMTE1LjM5OTI4LCAxMzUuMiwgMTk4Ljc5NywgMTM1LjIsIDE3MS4xOTY0LCAzNzcuOSwgMzkxLjY5ODYsIDUyMy4xLCA1NDQuNjk3OCwgNTQuMTk5OTk3LCA4Ny40OTkyMTQsIDEwOC4yLCAiICsKCSAgICAgICAgICAiMTE4LjY5ODk0NCwgMTM1LjIsIDE3NC4xOTg5NCwgMTM1LjIsIDE2MS41OTczNSwgMzcwLjEsIDM5MS42OTc4NSwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDE3OC42OTg0NCwgMTM1LjIsIDE4MC43OTY2LCAzNzcuOSwgMzkxLjY5ODYsIDEwOC4yLCAiICsKCSAgICAgICAgICAiMTIwLjc5ODc0LCAxMzUuMiwgMTg5LjQ5ODg0LCAxMzUuMiwgMTgwLjc5NjYsIDM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMTUuMzk5MjgsIDEzNS4yLCAxNjAuOTk3NDIsIDEzNS4yLCAxOTUuNzk3NzYsIDM3Ny45LCAzOTEuNjk4NiwgNTIzLjEsICIgKwoJICAgICAgICAgICI1NDQuNjk3OCwgNTQuMTk5OTk3LCA4Ny40OTkyMTQsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTcuNjk3NDIsIDEzNS4yLCAxNjMuMzk3MTcsIDM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAyMTIuNTk2MjcsICIgKwoJICAgICAgICAgICIxMzUuMiwgMTcyLjY5NzQyLCAzNzQuMCwgMzkxLjY5ODI0LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMTg3LjA5NzY5LCAxMzUuMiwgMTYzLjM5NzE3LCAzNzcuOSwgMzkxLjY5ODYsIDEwOC4yLCAxMTUuMzk5MjgsIDEzNS4yLCAyMTUuNTk4NTYsICIgKwoJICAgICAgICAgICIxMzUuMiwgMTcyLjY5NzQyLCAzNzcuOSwgMzkxLjY5ODYsIDEwOC4yLCAxMjAuNzk4NzQsIDEzNS4yLCAxOTUuMTk2MSwgMTM1LjIsIDIwOS4yOTk0OCwgMTM1LjIsIDE2Ni4wOTY5MSwgMTM1LjIsIDE3My44OTc4NCwgMTM1LjIsIDIwMC4yOTgzNiwgIiArCgkgICAgICAgICAgIjM3MC4xLCAzOTEuNjk3ODUsIDEwOC4yLCAxMTguNjk4OTQ0LCAxMzUuMiwgMTgxLjM5NTM3LCAxMzUuMiwgMTkzLjA5ODcxLCAzNzcuOSwgMzkxLjY5ODYsIDUyNy4wLCA1NDQuNjk4MjQsIDU0LjE5OTk5NywgODcuNDk5MjE0LCAxMDguMiwgIiArCgkgICAgICAgICAgIjEyNS41OTgyNiwgMTM1LjIsIDE3OS4yOTc5LCAxODcuNywgMjExLjM5NzYzLCAxMzUuMiwgMjA4LjY5Njg4LCAzNzAuMSwgMzkxLjY5Nzg1LCAxMDguMiwgMTIwLjc5ODc0LCAxMzUuMiwgMjEyLjU5NjI3LCAxMzUuMiwgMTcyLjY5NzQyLCAzNzQuMCwgIiArCgkgICAgICAgICAgIjM5MS42OTgyNCwgNTI0LjcsIDU1My43OTk1LCA1NC4xOTk5OTcsIDg3LjQ5OTIxNCwgMTA4LjIsIDEyMC43OTg3NCwgMTM1LjIsIDIxNi43OTczNSwgMTM1LjIsIDE2My4zOTcxNywgMzc0LjAsIDM5MS42OTgyNCwgMTA4LjIsIDEyMS42OTg2NSwgIiArCgkgICAgICAgICAgIjEzNS4yLCAxOTEuODk2ODgsIDEzNS4yLCAyMTQuMzk2MDQsIDQ0MC42LCA0NjguMTk3MjQsIDUxNy4xLCA1NDQuNjk3MiI7CgkgIFN0cmluZ1tdIHBvaW50c3MgPSBwb2ludHMuc3BsaXQoIiwgIik7CgkgIExpc3Q8Q29sdW1uPiBjb2x1bW5zID0gbmV3IEFycmF5TGlzdDw+ICgpOwoJICBmb3IgKGludCBpID0gMDsgaSA8IHBvaW50c3MubGVuZ3RoOyBpICs9IDIpIHsKCSAgICBjb2x1bW5zLmFkZChuZXcgQ29sdW1uKEZsb2F0LnBhcnNlRmxvYXQocG9pbnRzc1tpXSksIEZsb2F0LnBhcnNlRmxvYXQocG9pbnRzc1tpKzFdKSkpOwoJICB9CgkgIExpc3Q8Q29sdW1uPiBjb2x1bW5zV2l0aE92ZXJsYXAgPSAgY29sdW1ucy5zdHJlYW0oKQoJICAgICAgICAgIC5kaXN0aW5jdCgpCgkgICAgICAgICAgLnNvcnRlZCgpCgkgICAgICAgICAgLmNvbGxlY3QodG9MaXN0KCkpOwoJICBTeXN0ZW0ub3V0LnByaW50bG4oY29sdW1uc1dpdGhPdmVybGFwKTsKCX0KfQoKY2xhc3MgQ29sdW1uIGltcGxlbWVudHMgQ29tcGFyYWJsZTxDb2x1bW4+IHsKICBwcml2YXRlIGZpbmFsIGZsb2F0IHN0YXJ0WDsKICBwcml2YXRlIGZpbmFsIGZsb2F0IGVuZFg7CgogIHB1YmxpYyBDb2x1bW4oZmxvYXQgc3RhcnRYLCBmbG9hdCBlbmRYKSB7CiAgICB0aGlzLnN0YXJ0WCA9IHN0YXJ0WDsKICAgIHRoaXMuZW5kWCA9IGVuZFg7CiAgfQoKICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVDb2x1bW4oQ29sdW1uIGMpIHsKICAgIHJldHVybiBjLnN0YXJ0WCA8PSB0aGlzLnN0YXJ0WCAmJiB0aGlzLnN0YXJ0WCA8IGMuZW5kWCB8fCB0aGlzLnN0YXJ0WCA8PSBjLnN0YXJ0WCAmJiBjLnN0YXJ0WCA8IHRoaXMuZW5kWDsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICByZXR1cm4gT2JqZWN0cy5oYXNoKHN0YXJ0WCwgZW5kWCk7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgcmV0dXJuIGZhbHNlOwogICAgZmluYWwgQ29sdW1uIG90aGVyID0gKENvbHVtbikgb2JqOwogICAgcmV0dXJuIHRoaXMuc3RhcnRYID09IG90aGVyLnN0YXJ0WCAmJiB0aGlzLmVuZFggPT0gb3RoZXIuZW5kWDsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBpbnQgY29tcGFyZVRvKENvbHVtbiBvKSB7CiAgICByZXR1cm4gaXNTYW1lQ29sdW1uKG8pID8gMCA6IEZsb2F0LmNvbXBhcmUodGhpcy5zdGFydFgsIG8uc3RhcnRYKTsKICB9Cn0=