/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
import java.nio.charset.Charset ;
import java.nio.charset.StandardCharsets ;
import java.security.MessageDigest ;
import java.security.NoSuchAlgorithmException ;
import javax.crypto.Cipher ;
import javax.crypto.spec.SecretKeySpec ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static final String AESTYPE
= "AES" ; private static final Charset defaultCharset = Charset.forName ( "UTF-8" ) ;
private static byte [ ] encode
( byte [ ] data,
String keyStr
) { try {
SecretKeySpec keySpec = new SecretKeySpec( encodePass( keyStr) .getBytes ( ) , AESTYPE) ;
Cipher cipher = Cipher.getInstance ( AESTYPE) ;
cipher.init ( 1 , keySpec) ;
return cipher.doFinal ( data) ;
e2.printStackTrace ( ) ;
return null ;
}
}
return encodeToMD516( pass) .toLowerCase ( ) ;
}
private static byte [ ] decode
( byte [ ] data,
String keyStr
) { try {
SecretKeySpec keySpec = new SecretKeySpec( encodePass( keyStr) .getBytes ( ) , AESTYPE) ;
Cipher cipher = Cipher.getInstance ( AESTYPE) ;
cipher.init ( 2 , keySpec) ;
return cipher.doFinal ( data) ;
e2.printStackTrace ( ) ;
return null ;
}
}
return bytesToHex( encode( str.getBytes ( StandardCharsets.UTF_8 ) , key) ) ;
}
return new String ( decode
( hexToByteArray
( str.
replace ( "ScKit-" ,
"" ) ) , key
) , defaultCharset
) ; }
public static String bytesToHex
( byte [ ] bytes
) { for ( byte b : bytes) {
if ( hex.length ( ) < 2 ) {
sb.append ( 0 ) ;
}
sb.append ( hex) ;
}
return sb.toString ( ) ;
}
public static byte [ ] hexToByteArray
( String inHex
) { byte [ ] result;
int hexlen = inHex.length ( ) ;
if ( hexlen % 2 == 1 ) {
hexlen++;
result = new byte [ ( hexlen / 2 ) ] ;
inHex = "0" + inHex;
} else {
result = new byte [ ( hexlen / 2 ) ] ;
}
int j2 = 0 ;
for ( int i2 = 0 ; i2 < hexlen; i2 += 2 ) {
result
[ j2
] = ( byte ) Integer .
parseInt ( inHex.
substring ( i2, i2
+ 2 ) ,
16 ) ; j2++;
}
return result;
}
try {
for ( byte b
: MessageDigest .
getInstance ( "MD5" ) .
digest ( string.
getBytes ( ) ) ) { if ( temp.length ( ) == 1 ) {
temp = "0" + temp;
}
result = result + temp;
}
return result;
e2.printStackTrace ( ) ;
return "" ;
}
}
return encodeToMD5( encryptStr) .substring ( 8 , 24 ) ;
}
{
System .
out .
println ( m12
( "ScKit-b899ebaadb7dfe4dc7858cc57535c517" ,
"ScKit-3474160f1de80baf" ) ) ; System .
out .
println ( m12
( "ScKit-926a9758d67c3afc49f43ecbce468f47" ,
"ScKit-3474160f1de80baf" ) ) ; System .
out .
println ( m12
( "ScKit-1174f3b71933929a1908e6dac819e3ac" ,
"ScKit-3474160f1de80baf" ) ) ; System .
out .
println ( m12
( "ScKit-2f2737da037b291004eb1eddb09b3053" ,
"ScKit-3474160f1de80baf" ) ) ; System .
out .
println ( m12
( "ScKit-0511a0946a41f3bdfb9885960092920e" ,
"ScKit-3474160f1de80baf" ) ) ; System .
out .
println ( m12
( "ScKit-97b748988328057df4ea1808d598d0b3ae18f5b4c830818cbd08dd57142480b59d21a576397a0fb8d9d469699f831bc2" ,
"ScKit-3474160f1de80baf" ) ) ;
System .
out .
println ( m12
( "ScKit-83ed7591e95a89113192ddbfde1bff56efa711e3a95a791fb5e19dbf9f03b8cae77998afaeef78f6fc4916ec14b934dd" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-51df0400a36bb649af3dd8710126f31a" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-a60e4a2e9ca298eb1452c04e55eff17a" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-f514883f768d7c7137c45587adc879be3ad1423d2dee843eb9d7d60668a550cf557fa4702c4e393fa52e3fd416608f43f62663b434bdf9030086b9c04c6fcf52" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-89f9ff09d0d1e637121d50d33e8ac47d" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-eb53be1ae20fe3c481ece217d60dc17351cf38950eb859767c327f9d21d47270db578110cc0323b6feaa754d3c9508fb" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-19cb9fbe678977eff761c25b44594cb7" ,
"ScKit-e577f3e66617760c" ) ) ; System .
out .
println ( m12
( "ScKit-b934db1f0a432f613e6373292ae26bd6bac9a8bce029b851e22d639462288a5f" ,
"ScKit-cc6dfaea9756eab9" ) ) ; System .
out .
println ( m12
( "ScKit-154230b27c9b7a58a7ac01f9ac998f51" ,
"ScKit-cc6dfaea9756eab9" ) ) ; System .
out .
println ( m12
( "ScKit-5389609e853439bc6a7096c09cc2e635d1e058dfd9824a742f761adb50b3a590c8cceefec447977be23b63952c85ce50" ,
"ScKit-cc6dfaea9756eab9" ) ) ; System .
out .
println ( m12
( "ScKit-a24c533db75838a28f72c90e9c5104e9" ,
"ScKit-cc6dfaea9756eab9" ) ) ; System .
out .
println ( m12
( "ScKit-7d71504b76a9cb98c1aaf50d91864850" ,
"ScKit-cc6dfaea9756eab9" ) ) ; System .
out .
println ( m12
( "ScKit-d399305110130a2c99c1488a03b7157b0692940bcc3b2f52b8ff424340ca1eef" ,
"ScKit-cc6dfaea9756eab9" ) ) ; System .
out .
println ( m12
( "ScKit-e32e9260c6be1a3fa22ad90cc1dde42d6edfe75078134038d4ee511fa9db142f85b3b34b62cae63b0589cdc1889b505c" ,
"ScKit-cc6dfaea9756eab9" ) ) ;
System .
out .
println ( m12
( "ScKit-fefcb6669d4d98f9f43b3cccbe029b996b56284c62334629479fa5e809c30d61b22e5496643c0e0186d6582b066aa402" ,
"ScKit-bc95c38865a62aab" ) ) ;
System .
out .
println ( m12
( "ScKit-e4ef5b50d6403408aacb4743d49acdb3" ,
"ScKit-2bb8e1dbc3ffb7c7" ) ) ; System .
out .
println ( m12
( "ScKit-b78239fdc09970b6fb9b620305a04942" ,
"ScKit-2bb8e1dbc3ffb7c7" ) ) ; System .
out .
println ( m12
( "ScKit-1ffe364584764eb294011b9f10be514a" ,
"ScKit-2bb8e1dbc3ffb7c7" ) ) ; System .
out .
println ( m12
( "ScKit-903d7f64fe2746d150a1e74d251aa9b4" ,
"ScKit-2bb8e1dbc3ffb7c7" ) ) ; System .
out .
println ( m12
( "ScKit-5e01262f9ea20b18c7f62854e1c5d616" ,
"ScKit-2bb8e1dbc3ffb7c7" ) ) ; System .
out .
println ( m12
( "ScKit-f36e7818f5668ed6f48e4588347df4d58e592009c8bd7ef9ffb96de98fda350d8f7c51bc9f2523c0644f5cdcfda03dd7" ,
"ScKit-2bb8e1dbc3ffb7c7" ) ) ;
System .
out .
println ( m12
( "ScKit-3bdba809cdda5b0f578177d90a040b5120ca0097e7aa0d94402cff82987b8221" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c3a296ac07ed9cbc6e4d33e3bbe5cacd" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-e9cb135af6206083b77aab1040f8feeb175f2e001d633c0bb3d0cf10b584516a9e33df227b019aed8a49a212ba576e99f3358f7c3c8db4e9b81b7330ff833bd9" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c1ab3e655d8de876a12529fcdbf4308a408314e96d6fa6c37052d544fb5cf216" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c1ab3e655d8de876a12529fcdbf4308a6d6dbf52aaabc39aa6aee76b9caafe81063da90c0bdf596ddc32875f8b5c7b40" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c1ab3e655d8de876a12529fcdbf4308aeb14ad609d7f592a2603e61e10c890a4f0a5b204e743b4e4663c98b5a62f7e19" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c1ab3e655d8de876a12529fcdbf4308ac5765f96dab11290f67a5d268403d775" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c1ab3e655d8de876a12529fcdbf4308a5cb0099fc501e00896ee64ba7ff061a0" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-c1ab3e655d8de876a12529fcdbf4308aacc3b72edd250959b9828e592de0942a3cc1b836c59932cfc53eb2c379c88ca8" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-a701de180362303053f7854914c1fd6f0c6ed4aaba651628c0bef15d2f6c56ce4c032a5ad52c1472bff09a66142a5a79" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-415c48ba8bca6d22e3ca768eab337a998338c24a833b0813362c1768b5f9e987ff69eb82f37655e583d77349620896f1" ,
"ScKit-0f91eecb06d64ad6" ) ) ; System .
out .
println ( m12
( "ScKit-a05bb67828addf032e5cbd93ab2bc068c7430eec41e720fad1729f9c475d9e199e380e65b6c4cd3a937e6c95e9e254e4ea2dead5c6fc9ceb04014e46b4eebc27" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-f89f48f43a17df489570509319a63d7c" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-2febbb1121b0bd78110c64f82b433b0a" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-143d0d0c97ee2832be2583ab658142fa" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-2563dd46f33efe8fca5fb7db45b9115b" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-6c88c64839d2550b15eda462fb79994328965b823af0eb75ef106c6b6fa7d5c088832a5fb0debc388159aba8e3590a786d063fbb9710fc30c677ac486cea5096" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-2621c6e2dae28f0d1dd687e5ea0e1a715dd67ac03d64e6afab56eb2d221401e1" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-2621c6e2dae28f0d1dd687e5ea0e1a71057d765690606f500d266730efd17c34c5a605336f02d78e0ece36310957a40030115919e85d57e1a9e7789c9f268c42" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-66c636ba95fdf0af19e35fc7a4d007941bc5e3bc291e1ac5af6fe6f9a619acd8" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-66c636ba95fdf0af19e35fc7a4d007942c7c77e0b915f498ad5f61a740c9e7c05c2fa95c692c2e20f6ba068053075dbd42c84397f6588230f46904c9f64827ab" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-3b80dc841b3dcf486e6f8fc05192608aa96a1790a9d1b2928d0c955450428958" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-3b80dc841b3dcf486e6f8fc05192608a63280890d6bd3dee4f5c5a99419f377ba77d7a046ea9e777d18fc1d4a27522d38763a1c28c28d249191b127e54f81f709d38f7753cd705ff883714ca0bf578b1" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-9c7c08c372473cf1bd79ead865059851b7dec0b60a7e0d4a8703c9405aa7ecf2" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-439b4d08bec170a5c4ab0505bc4bbee9eead53d79510995c157e85e8e9b77c0ac6c1cd0cdd66ef408ce9cc7f992ffe6a30115919e85d57e1a9e7789c9f268c42" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-213511dd192ba3520ea48ca578ac42a0adfd3c370a2b1371c30c3092e0cacc676413b11b75790a85c66e109b7f59dd97" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-997034696930a0b9f76b1affb28e6d1d" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-6c8c5d0906b74d482ab70d500d87a3faac8280c3748004649de45c5751a4f03f301d1a2b8948f1e51fc23b1915bd26470b98b9a43c0f38be58ed3533398e39bc" ,
"ScKit-9f22c61b57bf4336" ) ) ; System .
out .
println ( m12
( "ScKit-8cb4126be631acad36d87568561f68ce503605718e5614c86881df18cbedf7f26620027f0ddf6521f405c70ec94cd066" ,
"ScKit-9f22c61b57bf4336" ) ) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwppbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwppbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OwppbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CmltcG9ydCBqYXZheC5jcnlwdG8uQ2lwaGVyOwppbXBvcnQgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYzsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFFU1RZUEUgPSAiQUVTIjsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENoYXJzZXQgZGVmYXVsdENoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7CgogICAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIGVuY29kZShieXRlW10gZGF0YSwgU3RyaW5nIGtleVN0cikgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFNlY3JldEtleVNwZWMga2V5U3BlYyA9IG5ldyBTZWNyZXRLZXlTcGVjKGVuY29kZVBhc3Moa2V5U3RyKS5nZXRCeXRlcygpLCBBRVNUWVBFKTsKICAgICAgICAgICAgQ2lwaGVyIGNpcGhlciA9IENpcGhlci5nZXRJbnN0YW5jZShBRVNUWVBFKTsKICAgICAgICAgICAgY2lwaGVyLmluaXQoMSwga2V5U3BlYyk7CiAgICAgICAgICAgIHJldHVybiBjaXBoZXIuZG9GaW5hbChkYXRhKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTIpIHsKICAgICAgICAgICAgZTIucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCQogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlUGFzcyhTdHJpbmcgcGFzcykgewogICAgICAgIHJldHVybiBlbmNvZGVUb01ENTE2KHBhc3MpLnRvTG93ZXJDYXNlKCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBkZWNvZGUoYnl0ZVtdIGRhdGEsIFN0cmluZyBrZXlTdHIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBTZWNyZXRLZXlTcGVjIGtleVNwZWMgPSBuZXcgU2VjcmV0S2V5U3BlYyhlbmNvZGVQYXNzKGtleVN0cikuZ2V0Qnl0ZXMoKSwgQUVTVFlQRSk7CiAgICAgICAgICAgIENpcGhlciBjaXBoZXIgPSBDaXBoZXIuZ2V0SW5zdGFuY2UoQUVTVFlQRSk7CiAgICAgICAgICAgIGNpcGhlci5pbml0KDIsIGtleVNwZWMpOwogICAgICAgICAgICByZXR1cm4gY2lwaGVyLmRvRmluYWwoZGF0YSk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUyKSB7CiAgICAgICAgICAgIGUyLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlU3RyKFN0cmluZyBzdHIsIFN0cmluZyBrZXkpIHsKICAgICAgICByZXR1cm4gYnl0ZXNUb0hleChlbmNvZGUoc3RyLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpLCBrZXkpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBtMTIoU3RyaW5nIHN0ciwgU3RyaW5nIGtleSkgewogICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGRlY29kZShoZXhUb0J5dGVBcnJheShzdHIucmVwbGFjZSgiU2NLaXQtIiwgIiIpKSwga2V5KSwgZGVmYXVsdENoYXJzZXQpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGJ5dGVzVG9IZXgoYnl0ZVtdIGJ5dGVzKSB7CiAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIGZvciAoYnl0ZSBiIDogYnl0ZXMpIHsKICAgICAgICAgICAgU3RyaW5nIGhleCA9IEludGVnZXIudG9IZXhTdHJpbmcoYiAmIDI1NSk7CiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoKCkgPCAyKSB7CiAgICAgICAgICAgICAgICBzYi5hcHBlbmQoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2IuYXBwZW5kKGhleCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGhleFRvQnl0ZUFycmF5KFN0cmluZyBpbkhleCkgewogICAgICAgIGJ5dGVbXSByZXN1bHQ7CiAgICAgICAgaW50IGhleGxlbiA9IGluSGV4Lmxlbmd0aCgpOwogICAgICAgIGlmIChoZXhsZW4gJSAyID09IDEpIHsKICAgICAgICAgICAgaGV4bGVuKys7CiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBieXRlWyhoZXhsZW4gLyAyKV07CiAgICAgICAgICAgIGluSGV4ID0gIjAiICsgaW5IZXg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gbmV3IGJ5dGVbKGhleGxlbiAvIDIpXTsKICAgICAgICB9CiAgICAgICAgaW50IGoyID0gMDsKICAgICAgICBmb3IgKGludCBpMiA9IDA7IGkyIDwgaGV4bGVuOyBpMiArPSAyKSB7CiAgICAgICAgICAgIHJlc3VsdFtqMl0gPSAoYnl0ZSkgSW50ZWdlci5wYXJzZUludChpbkhleC5zdWJzdHJpbmcoaTIsIGkyICsgMiksIDE2KTsKICAgICAgICAgICAgajIrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNvZGVUb01ENShTdHJpbmcgc3RyaW5nKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgICAgICAgICBmb3IgKGJ5dGUgYiA6IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIk1ENSIpLmRpZ2VzdChzdHJpbmcuZ2V0Qnl0ZXMoKSkpIHsKICAgICAgICAgICAgICAgIFN0cmluZyB0ZW1wID0gSW50ZWdlci50b0hleFN0cmluZyhiICYgMjU1KTsKICAgICAgICAgICAgICAgIGlmICh0ZW1wLmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgICAgICAgICAgICB0ZW1wID0gIjAiICsgdGVtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9IGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZTIpIHsKICAgICAgICAgICAgZTIucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlVG9NRDUxNihTdHJpbmcgZW5jcnlwdFN0cikgewogICAgICAgIHJldHVybiBlbmNvZGVUb01ENShlbmNyeXB0U3RyKS5zdWJzdHJpbmcoOCwgMjQpOwogICAgfQogICAgCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtYjg5OWViYWFkYjdkZmU0ZGM3ODU4Y2M1NzUzNWM1MTciLCAiU2NLaXQtMzQ3NDE2MGYxZGU4MGJhZiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtOTI2YTk3NThkNjdjM2FmYzQ5ZjQzZWNiY2U0NjhmNDciLCAiU2NLaXQtMzQ3NDE2MGYxZGU4MGJhZiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtMTE3NGYzYjcxOTMzOTI5YTE5MDhlNmRhYzgxOWUzYWMiLCAiU2NLaXQtMzQ3NDE2MGYxZGU4MGJhZiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtMmYyNzM3ZGEwMzdiMjkxMDA0ZWIxZWRkYjA5YjMwNTMiLCAiU2NLaXQtMzQ3NDE2MGYxZGU4MGJhZiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtMDUxMWEwOTQ2YTQxZjNiZGZiOTg4NTk2MDA5MjkyMGUiLCAiU2NLaXQtMzQ3NDE2MGYxZGU4MGJhZiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtOTdiNzQ4OTg4MzI4MDU3ZGY0ZWExODA4ZDU5OGQwYjNhZTE4ZjViNGM4MzA4MThjYmQwOGRkNTcxNDI0ODBiNTlkMjFhNTc2Mzk3YTBmYjhkOWQ0Njk2OTlmODMxYmMyIiwgIlNjS2l0LTM0NzQxNjBmMWRlODBiYWYiKSk7CgpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC04M2VkNzU5MWU5NWE4OTExMzE5MmRkYmZkZTFiZmY1NmVmYTcxMWUzYTk1YTc5MWZiNWUxOWRiZjlmMDNiOGNhZTc3OTk4YWZhZWVmNzhmNmZjNDkxNmVjMTRiOTM0ZGQiLCAiU2NLaXQtZTU3N2YzZTY2NjE3NzYwYyIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtNTFkZjA0MDBhMzZiYjY0OWFmM2RkODcxMDEyNmYzMWEiLCAiU2NLaXQtZTU3N2YzZTY2NjE3NzYwYyIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtYTYwZTRhMmU5Y2EyOThlYjE0NTJjMDRlNTVlZmYxN2EiLCAiU2NLaXQtZTU3N2YzZTY2NjE3NzYwYyIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtZjUxNDg4M2Y3NjhkN2M3MTM3YzQ1NTg3YWRjODc5YmUzYWQxNDIzZDJkZWU4NDNlYjlkN2Q2MDY2OGE1NTBjZjU1N2ZhNDcwMmM0ZTM5M2ZhNTJlM2ZkNDE2NjA4ZjQzZjYyNjYzYjQzNGJkZjkwMzAwODZiOWMwNGM2ZmNmNTIiLCAiU2NLaXQtZTU3N2YzZTY2NjE3NzYwYyIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtODlmOWZmMDlkMGQxZTYzNzEyMWQ1MGQzM2U4YWM0N2QiLCAiU2NLaXQtZTU3N2YzZTY2NjE3NzYwYyIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtZWI1M2JlMWFlMjBmZTNjNDgxZWNlMjE3ZDYwZGMxNzM1MWNmMzg5NTBlYjg1OTc2N2MzMjdmOWQyMWQ0NzI3MGRiNTc4MTEwY2MwMzIzYjZmZWFhNzU0ZDNjOTUwOGZiIiwgIlNjS2l0LWU1NzdmM2U2NjYxNzc2MGMiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTE5Y2I5ZmJlNjc4OTc3ZWZmNzYxYzI1YjQ0NTk0Y2I3IiwgIlNjS2l0LWU1NzdmM2U2NjYxNzc2MGMiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWI5MzRkYjFmMGE0MzJmNjEzZTYzNzMyOTJhZTI2YmQ2YmFjOWE4YmNlMDI5Yjg1MWUyMmQ2Mzk0NjIyODhhNWYiLCAiU2NLaXQtY2M2ZGZhZWE5NzU2ZWFiOSIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtMTU0MjMwYjI3YzliN2E1OGE3YWMwMWY5YWM5OThmNTEiLCAiU2NLaXQtY2M2ZGZhZWE5NzU2ZWFiOSIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtNTM4OTYwOWU4NTM0MzliYzZhNzA5NmMwOWNjMmU2MzVkMWUwNThkZmQ5ODI0YTc0MmY3NjFhZGI1MGIzYTU5MGM4Y2NlZWZlYzQ0Nzk3N2JlMjNiNjM5NTJjODVjZTUwIiwgIlNjS2l0LWNjNmRmYWVhOTc1NmVhYjkiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWEyNGM1MzNkYjc1ODM4YTI4ZjcyYzkwZTljNTEwNGU5IiwgIlNjS2l0LWNjNmRmYWVhOTc1NmVhYjkiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTdkNzE1MDRiNzZhOWNiOThjMWFhZjUwZDkxODY0ODUwIiwgIlNjS2l0LWNjNmRmYWVhOTc1NmVhYjkiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWQzOTkzMDUxMTAxMzBhMmM5OWMxNDg4YTAzYjcxNTdiMDY5Mjk0MGJjYzNiMmY1MmI4ZmY0MjQzNDBjYTFlZWYiLCAiU2NLaXQtY2M2ZGZhZWE5NzU2ZWFiOSIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtZTMyZTkyNjBjNmJlMWEzZmEyMmFkOTBjYzFkZGU0MmQ2ZWRmZTc1MDc4MTM0MDM4ZDRlZTUxMWZhOWRiMTQyZjg1YjNiMzRiNjJjYWU2M2IwNTg5Y2RjMTg4OWI1MDVjIiwgIlNjS2l0LWNjNmRmYWVhOTc1NmVhYjkiKSk7CgpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1mZWZjYjY2NjlkNGQ5OGY5ZjQzYjNjY2NiZTAyOWI5OTZiNTYyODRjNjIzMzQ2Mjk0NzlmYTVlODA5YzMwZDYxYjIyZTU0OTY2NDNjMGUwMTg2ZDY1ODJiMDY2YWE0MDIiLCAiU2NLaXQtYmM5NWMzODg2NWE2MmFhYiIpKTsKClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWU0ZWY1YjUwZDY0MDM0MDhhYWNiNDc0M2Q0OWFjZGIzIiwgIlNjS2l0LTJiYjhlMWRiYzNmZmI3YzciKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWI3ODIzOWZkYzA5OTcwYjZmYjliNjIwMzA1YTA0OTQyIiwgIlNjS2l0LTJiYjhlMWRiYzNmZmI3YzciKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTFmZmUzNjQ1ODQ3NjRlYjI5NDAxMWI5ZjEwYmU1MTRhIiwgIlNjS2l0LTJiYjhlMWRiYzNmZmI3YzciKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTkwM2Q3ZjY0ZmUyNzQ2ZDE1MGExZTc0ZDI1MWFhOWI0IiwgIlNjS2l0LTJiYjhlMWRiYzNmZmI3YzciKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTVlMDEyNjJmOWVhMjBiMThjN2Y2Mjg1NGUxYzVkNjE2IiwgIlNjS2l0LTJiYjhlMWRiYzNmZmI3YzciKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWYzNmU3ODE4ZjU2NjhlZDZmNDhlNDU4ODM0N2RmNGQ1OGU1OTIwMDljOGJkN2VmOWZmYjk2ZGU5OGZkYTM1MGQ4ZjdjNTFiYzlmMjUyM2MwNjQ0ZjVjZGNmZGEwM2RkNyIsICJTY0tpdC0yYmI4ZTFkYmMzZmZiN2M3IikpOwoKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtM2JkYmE4MDljZGRhNWIwZjU3ODE3N2Q5MGEwNDBiNTEyMGNhMDA5N2U3YWEwZDk0NDAyY2ZmODI5ODdiODIyMSIsICJTY0tpdC0wZjkxZWVjYjA2ZDY0YWQ2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1jM2EyOTZhYzA3ZWQ5Y2JjNmU0ZDMzZTNiYmU1Y2FjZCIsICJTY0tpdC0wZjkxZWVjYjA2ZDY0YWQ2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1lOWNiMTM1YWY2MjA2MDgzYjc3YWFiMTA0MGY4ZmVlYjE3NWYyZTAwMWQ2MzNjMGJiM2QwY2YxMGI1ODQ1MTZhOWUzM2RmMjI3YjAxOWFlZDhhNDlhMjEyYmE1NzZlOTlmMzM1OGY3YzNjOGRiNGU5YjgxYjczMzBmZjgzM2JkOSIsICJTY0tpdC0wZjkxZWVjYjA2ZDY0YWQ2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1jMWFiM2U2NTVkOGRlODc2YTEyNTI5ZmNkYmY0MzA4YTQwODMxNGU5NmQ2ZmE2YzM3MDUyZDU0NGZiNWNmMjE2IiwgIlNjS2l0LTBmOTFlZWNiMDZkNjRhZDYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWMxYWIzZTY1NWQ4ZGU4NzZhMTI1MjlmY2RiZjQzMDhhNmQ2ZGJmNTJhYWFiYzM5YWE2YWVlNzZiOWNhYWZlODEwNjNkYTkwYzBiZGY1OTZkZGMzMjg3NWY4YjVjN2I0MCIsICJTY0tpdC0wZjkxZWVjYjA2ZDY0YWQ2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1jMWFiM2U2NTVkOGRlODc2YTEyNTI5ZmNkYmY0MzA4YWViMTRhZDYwOWQ3ZjU5MmEyNjAzZTYxZTEwYzg5MGE0ZjBhNWIyMDRlNzQzYjRlNDY2M2M5OGI1YTYyZjdlMTkiLCAiU2NLaXQtMGY5MWVlY2IwNmQ2NGFkNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtYzFhYjNlNjU1ZDhkZTg3NmExMjUyOWZjZGJmNDMwOGFjNTc2NWY5NmRhYjExMjkwZjY3YTVkMjY4NDAzZDc3NSIsICJTY0tpdC0wZjkxZWVjYjA2ZDY0YWQ2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1jMWFiM2U2NTVkOGRlODc2YTEyNTI5ZmNkYmY0MzA4YTVjYjAwOTlmYzUwMWUwMDg5NmVlNjRiYTdmZjA2MWEwIiwgIlNjS2l0LTBmOTFlZWNiMDZkNjRhZDYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWMxYWIzZTY1NWQ4ZGU4NzZhMTI1MjlmY2RiZjQzMDhhYWNjM2I3MmVkZDI1MDk1OWI5ODI4ZTU5MmRlMDk0MmEzY2MxYjgzNmM1OTkzMmNmYzUzZWIyYzM3OWM4OGNhOCIsICJTY0tpdC0wZjkxZWVjYjA2ZDY0YWQ2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC1hNzAxZGUxODAzNjIzMDMwNTNmNzg1NDkxNGMxZmQ2ZjBjNmVkNGFhYmE2NTE2MjhjMGJlZjE1ZDJmNmM1NmNlNGMwMzJhNWFkNTJjMTQ3MmJmZjA5YTY2MTQyYTVhNzkiLCAiU2NLaXQtMGY5MWVlY2IwNmQ2NGFkNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtNDE1YzQ4YmE4YmNhNmQyMmUzY2E3NjhlYWIzMzdhOTk4MzM4YzI0YTgzM2IwODEzMzYyYzE3NjhiNWY5ZTk4N2ZmNjllYjgyZjM3NjU1ZTU4M2Q3NzM0OTYyMDg5NmYxIiwgIlNjS2l0LTBmOTFlZWNiMDZkNjRhZDYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWEwNWJiNjc4MjhhZGRmMDMyZTVjYmQ5M2FiMmJjMDY4Yzc0MzBlZWM0MWU3MjBmYWQxNzI5ZjljNDc1ZDllMTk5ZTM4MGU2NWI2YzRjZDNhOTM3ZTZjOTVlOWUyNTRlNGVhMmRlYWQ1YzZmYzljZWIwNDAxNGU0NmI0ZWViYzI3IiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LWY4OWY0OGY0M2ExN2RmNDg5NTcwNTA5MzE5YTYzZDdjIiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTJmZWJiYjExMjFiMGJkNzgxMTBjNjRmODJiNDMzYjBhIiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTE0M2QwZDBjOTdlZTI4MzJiZTI1ODNhYjY1ODE0MmZhIiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTI1NjNkZDQ2ZjMzZWZlOGZjYTVmYjdkYjQ1YjkxMTViIiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTZjODhjNjQ4MzlkMjU1MGIxNWVkYTQ2MmZiNzk5OTQzMjg5NjViODIzYWYwZWI3NWVmMTA2YzZiNmZhN2Q1YzA4ODgzMmE1ZmIwZGViYzM4ODE1OWFiYThlMzU5MGE3ODZkMDYzZmJiOTcxMGZjMzBjNjc3YWM0ODZjZWE1MDk2IiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTI2MjFjNmUyZGFlMjhmMGQxZGQ2ODdlNWVhMGUxYTcxNWRkNjdhYzAzZDY0ZTZhZmFiNTZlYjJkMjIxNDAxZTEiLCAiU2NLaXQtOWYyMmM2MWI1N2JmNDMzNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtMjYyMWM2ZTJkYWUyOGYwZDFkZDY4N2U1ZWEwZTFhNzEwNTdkNzY1NjkwNjA2ZjUwMGQyNjY3MzBlZmQxN2MzNGM1YTYwNTMzNmYwMmQ3OGUwZWNlMzYzMTA5NTdhNDAwMzAxMTU5MTllODVkNTdlMWE5ZTc3ODljOWYyNjhjNDIiLCAiU2NLaXQtOWYyMmM2MWI1N2JmNDMzNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtNjZjNjM2YmE5NWZkZjBhZjE5ZTM1ZmM3YTRkMDA3OTQxYmM1ZTNiYzI5MWUxYWM1YWY2ZmU2ZjlhNjE5YWNkOCIsICJTY0tpdC05ZjIyYzYxYjU3YmY0MzM2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC02NmM2MzZiYTk1ZmRmMGFmMTllMzVmYzdhNGQwMDc5NDJjN2M3N2UwYjkxNWY0OThhZDVmNjFhNzQwYzllN2MwNWMyZmE5NWM2OTJjMmUyMGY2YmEwNjgwNTMwNzVkYmQ0MmM4NDM5N2Y2NTg4MjMwZjQ2OTA0YzlmNjQ4MjdhYiIsICJTY0tpdC05ZjIyYzYxYjU3YmY0MzM2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC0zYjgwZGM4NDFiM2RjZjQ4NmU2ZjhmYzA1MTkyNjA4YWE5NmExNzkwYTlkMWIyOTI4ZDBjOTU1NDUwNDI4OTU4IiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7ClN5c3RlbS5vdXQucHJpbnRsbihtMTIoIlNjS2l0LTNiODBkYzg0MWIzZGNmNDg2ZTZmOGZjMDUxOTI2MDhhNjMyODA4OTBkNmJkM2RlZTRmNWM1YTk5NDE5ZjM3N2JhNzdkN2EwNDZlYTllNzc3ZDE4ZmMxZDRhMjc1MjJkMzg3NjNhMWMyOGMyOGQyNDkxOTFiMTI3ZTU0ZjgxZjcwOWQzOGY3NzUzY2Q3MDVmZjg4MzcxNGNhMGJmNTc4YjEiLCAiU2NLaXQtOWYyMmM2MWI1N2JmNDMzNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtOWM3YzA4YzM3MjQ3M2NmMWJkNzllYWQ4NjUwNTk4NTFiN2RlYzBiNjBhN2UwZDRhODcwM2M5NDA1YWE3ZWNmMiIsICJTY0tpdC05ZjIyYzYxYjU3YmY0MzM2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC00MzliNGQwOGJlYzE3MGE1YzRhYjA1MDViYzRiYmVlOWVlYWQ1M2Q3OTUxMDk5NWMxNTdlODVlOGU5Yjc3YzBhYzZjMWNkMGNkZDY2ZWY0MDhjZTljYzdmOTkyZmZlNmEzMDExNTkxOWU4NWQ1N2UxYTllNzc4OWM5ZjI2OGM0MiIsICJTY0tpdC05ZjIyYzYxYjU3YmY0MzM2IikpOwpTeXN0ZW0ub3V0LnByaW50bG4obTEyKCJTY0tpdC0yMTM1MTFkZDE5MmJhMzUyMGVhNDhjYTU3OGFjNDJhMGFkZmQzYzM3MGEyYjEzNzFjMzBjMzA5MmUwY2FjYzY3NjQxM2IxMWI3NTc5MGE4NWM2NmUxMDliN2Y1OWRkOTciLCAiU2NLaXQtOWYyMmM2MWI1N2JmNDMzNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtOTk3MDM0Njk2OTMwYTBiOWY3NmIxYWZmYjI4ZTZkMWQiLCAiU2NLaXQtOWYyMmM2MWI1N2JmNDMzNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtNmM4YzVkMDkwNmI3NGQ0ODJhYjcwZDUwMGQ4N2EzZmFhYzgyODBjMzc0ODAwNDY0OWRlNDVjNTc1MWE0ZjAzZjMwMWQxYTJiODk0OGYxZTUxZmMyM2IxOTE1YmQyNjQ3MGI5OGI5YTQzYzBmMzhiZTU4ZWQzNTMzMzk4ZTM5YmMiLCAiU2NLaXQtOWYyMmM2MWI1N2JmNDMzNiIpKTsKU3lzdGVtLm91dC5wcmludGxuKG0xMigiU2NLaXQtOGNiNDEyNmJlNjMxYWNhZDM2ZDg3NTY4NTYxZjY4Y2U1MDM2MDU3MThlNTYxNGM4Njg4MWRmMThjYmVkZjdmMjY2MjAwMjdmMGRkZjY1MjFmNDA1YzcwZWM5NGNkMDY2IiwgIlNjS2l0LTlmMjJjNjFiNTdiZjQzMzYiKSk7CgoJfQp9