__d
("javascript-blowfish-1.0.5",[],(function(a
,b
,c
,d
,e
,f
){"use strict";b
={};var g
={exports
:b
};function h
(){var a
=function(b
,c
){this.
key=b
,(c
==="ecb"||c
==="cbc")&&(this.
mode=c
),this.
sBox0=a.
sBox0.
slice(),this.
sBox1=a.
sBox1.
slice(),this.
sBox2=a.
sBox2.
slice(),this.
sBox3=a.
sBox3.
slice(),this.
pArray=a.
pArray.
slice(),this.
generateSubkeys(b
)};a.
prototype={sBox0
:null,sBox1
:null,sBox2
:null,sBox3
:null,pArray
:null,key
:null,mode
:"ecb",iv
:"abc12345",keyStr
:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encrypt
:function(a
,b
){if(this.
mode==="ecb")return this.
encryptECB(a
);if(this.
mode==="cbc")return this.
encryptCBC(a
,b
);throw new Error
("\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f.")},decrypt
:function(a
,b
){if(this.
mode==="ecb")return this.
decryptECB(a
);if(this.
mode==="cbc")return this.
decryptCBC(a
,b
);throw new Error
("\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f.")},encryptECB
:function(a
){a
=this.
utf8Decode(a
);var b
=Math.
ceil(a.
length/8),c
="";for(var d
=0;d
<b
;d
++){var e
=a.
substr(d
*8,8);if(e.
length<8){var f
=8-e.
length;while(0<f
--)e
+="\0"}var g
;f
=this.
split64by32(e
);e
=f
[0];g
=f
[1];f
=this.
encipher(e
,g
);e
=f
[0];g
=f
[1];c
+=this.
num2block32(e
)+this.
num2block32(g
)}return c
},encryptCBC
:function(a
,b
){a
=this.
utf8Decode(a
);var c
=Math.
ceil(a.
length/8),d
;b
=this.
split64by32(b
);d
=b
[0];b
=b
[1];var e
="";for(var f
=0;f
<c
;f
++){var g
=a.
substr(f
*8,8);if(g.
length<8){var h
=8-g.
length;while(0<h
--)g
+="\0"}var i
;h
=this.
split64by32(g
);g
=h
[0];i
=h
[1];g
=this.
xor(g
,d
);i
=this.
xor(i
,b
);h
=this.
encipher(g
,i
);g
=h
[0];i
=h
[1];d
=g
;b
=i
;e
+=this.
num2block32(g
)+this.
num2block32(i
)}return e
},decryptECB
:function(a
){var b
=Math.
ceil(a.
length/8),c
="";for(var d
=0;d
<b
;d
++){var e
=a.
substr(d
*8,8);if(e.
length<8)throw new Error
("\u0417\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0430: \u0434\u043b\u0438\u043d\u043d\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u0430 8 \u0431\u0430\u044b\u0439\u0442\u0430\u043c.");var f
,g
;e
=this.
split64by32(e
);f
=e
[0];g
=e
[1];e
=this.
decipher(f
,g
);f
=e
[0];g
=e
[1];c
+=this.
num2block32(f
)+this.
num2block32(g
)}c
=this.
utf8Encode(c
);return c
},decryptCBC
:function(a
,b
){var c
=Math.
ceil(a.
length/8),d
,e
,f
;b
=this.
split64by32(b
);d
=b
[0];b
=b
[1];var g
="";for(var h
=0;h
<c
;h
++){var i
=a.
substr(h
*8,8);if(i.
length<8)throw new Error
("\u0417\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0430: \u0434\u043b\u0438\u043d\u043d\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u0430 8 \u0431\u0430\u0439\u0442\u0430\u043c.");var j
,k
;i
=this.
split64by32(i
);j
=i
[0];k
=i
[1];e
=j
;f
=k
;i
=this.
decipher(j
,k
);j
=i
[0];k
=i
[1];j
=this.
xor(j
,d
);k
=this.
xor(k
,b
);d
=e
;b
=f
;g
+=this.
num2block32(j
)+this.
num2block32(k
)}g
=this.
utf8Encode(g
);return g
},F
:function(a
){var b
=a
>>>24,c
=a
<<8>>>24,d
=a
<<16>>>24;a
=a
<<24>>>24;b
=this.
addMod32(this.
sBox0[b
],this.
sBox1[c
]);b
=this.
xor(b
,this.
sBox2[d
]);b
=this.
addMod32(b
,this.
sBox3[a
]);return b
},encipher
:function(a
,b
){var c
;for(var d
=0;d
<16;d
++)a
=this.
xor(a
,this.
pArray[d
]),b
=this.
xor(this.
F(a
),b
),c
=a
,a
=b
,b
=c
;c
=a
;a
=b
;b
=c
;b
=this.
xor(b
,this.
pArray[16]);a
=this.
xor(a
,this.
pArray[17]);return[a
,b
]},decipher
:function(a
,b
){var c
;a
=this.
xor(a
,this.
pArray[17]);b
=this.
xor(b
,this.
pArray[16]);c
=a
;a
=b
;b
=c
;for(var d
=15;d
>=0;d
--)c
=a
,a
=b
,b
=c
,b
=this.
xor(this.
F(a
),b
),a
=this.
xor(a
,this.
pArray[d
]);return[a
,b
]},generateSubkeys
:function(a
){var b
=0,c
=0,d
,e
;for(d
=0;d
<18;d
++){for(e
=4;e
>0;e
--)b
=this.
fixNegative(b
<<8|a.
charCodeAt(c
)),c
=(c
+1)%a.
length;this.
pArray[d
]=this.
xor(this.
pArray[d
],b
);b
=0}e
=[0,0];for(d
=0;d
<18;d
+=2)e
=this.
encipher(e
[0],e
[1]),this.
pArray[d
]=e
[0],this.
pArray[d
+1]=e
[1];for(d
=0;d
<256;d
+=2)e
=this.
encipher(e
[0],e
[1]),this.
sBox0[d
]=e
[0],this.
sBox0[d
+1]=e
[1];for(d
=0;d
<256;d
+=2)e
=this.
encipher(e
[0],e
[1]),this.
sBox1[d
]=e
[0],this.
sBox1[d
+1]=e
[1];for(d
=0;d
<256;d
+=2)e
=this.
encipher(e
[0],e
[1]),this.
sBox2[d
]=e
[0],this.
sBox2[d
+1]=e
[1];for(d
=0;d
<256;d
+=2)e
=this.
encipher(e
[0],e
[1]),this.
sBox3[d
]=e
[0],this.
sBox3[d
+1]=e
[1]},block32toNum
:function(a
){return this.
fixNegative(a.
charCodeAt(0)<<24|a.
charCodeAt(1)<<16|a.
charCodeAt(2)<<8|a.
charCodeAt(3))},num2block32
:function(a
){return String.
fromCharCode(a
>>>24)+String.
fromCharCode(a
<<8>>>24)+String.
fromCharCode(a
<<16>>>24)+String.
fromCharCode(a
<<24>>>24)},xor
:function(a
,b
){return this.
fixNegative(a
^b
)},addMod32
:function(a
,b
){return this.
fixNegative(a
+b
|0)},fixNegative
:function(a
){return a
>>>0},split64by32
:function(a
){var b
=a.
substring(0,4);a
=a.
substring(4,8);return[this.
block32toNum(b
),this.
block32toNum(a
)]},utf8Decode
:function(a
){var b
="";for(var c
=0;c
<a.
length;c
++){var d
=a.
charCodeAt(c
);d
<128?b
+=String.
fromCharCode(d
):d
>127&&d
<2048?(b
+=String.
fromCharCode(d
>>6|192),b
+=String.
fromCharCode(d
&63|128)):(b
+=String.
fromCharCode(d
>>12|224),b
+=String.
fromCharCode(d
>>6&63|128),b
+=String.
fromCharCode(d
&63|128))}return b
},utf8Encode
:function(a
){var b
="",c
=0,d
=0,e
=0,f
;while(c
<a.
length)d
=a.
charCodeAt(c
),d
<128?(b
+=String.
fromCharCode(d
),c
++):d
>191&&d
<224?(e
=a.
charCodeAt(c
+1),b
+=String.
fromCharCode((d
&31)<<6|e
&63),c
+=2):(e
=a.
charCodeAt(c
+1),f
=a.
charCodeAt(c
+2),b
+=String.
fromCharCode((d
&15)<<12|(e
&63)<<6|f
&63),c
+=3);return b
},base64Encode
:function(a
){var b
="",c
,d
,e
,f
,g
,h
,i
=0;while(i
<a.
length)c
=a.
charCodeAt(i
++),d
=a.
charCodeAt(i
++),e
=a.
charCodeAt(i
++),f
=c
>>2,c
=(c
&3)<<4|d
>>4,g
=(d
&15)<<2|e
>>6,h
=e
&63,isNaN
(d
)?g
=h
=64:isNaN
(e
)&&(h
=64),b
=b
+this.
keyStr.
charAt(f
)+this.
keyStr.
charAt(c
)+this.
keyStr.
charAt(g
)+this.
keyStr.
charAt(h
);return b
},base64Decode
:function(a
){var b
="",c
,d
,e
,f
,g
,h
=0;a
=a.
replace(/[^A
-Za
-z0
-9\
+\
/\
=]/g
,"");while(h
<a.
length)d
=this.
keyStr.
indexOf(a.
charAt(h
++)),e
=this.
keyStr.
indexOf(a.
charAt(h
++)),f
=this.
keyStr.
indexOf(a.
charAt(h
++)),g
=this.
keyStr.
indexOf(a.
charAt(h
++)),d
=d
<<2|e
>>4,e
=(e
&15)<<4|f
>>2,c
=(f
&3)<<6|g
,b
=b
+String.
fromCharCode(d
),f
!=64&&(b
=b
+String.
fromCharCode(e
)),g
!=64&&(b
=b
+String.
fromCharCode(c
));return b
},trimZeros
:function(a
){return a.
replace(/\
0+$
/g
,"")}};a.
pArray=[
X19kKCJqYXZhc2NyaXB0LWJsb3dmaXNoLTEuMC41IixbXSwoZnVuY3Rpb24oYSxiLGMsZCxlLGYpeyJ1c2Ugc3RyaWN0IjtiPXt9O3ZhciBnPXtleHBvcnRzOmJ9O2Z1bmN0aW9uIGgoKXt2YXIgYT1mdW5jdGlvbihiLGMpe3RoaXMua2V5PWIsKGM9PT0iZWNiInx8Yz09PSJjYmMiKSYmKHRoaXMubW9kZT1jKSx0aGlzLnNCb3gwPWEuc0JveDAuc2xpY2UoKSx0aGlzLnNCb3gxPWEuc0JveDEuc2xpY2UoKSx0aGlzLnNCb3gyPWEuc0JveDIuc2xpY2UoKSx0aGlzLnNCb3gzPWEuc0JveDMuc2xpY2UoKSx0aGlzLnBBcnJheT1hLnBBcnJheS5zbGljZSgpLHRoaXMuZ2VuZXJhdGVTdWJrZXlzKGIpfTthLnByb3RvdHlwZT17c0JveDA6bnVsbCxzQm94MTpudWxsLHNCb3gyOm51bGwsc0JveDM6bnVsbCxwQXJyYXk6bnVsbCxrZXk6bnVsbCxtb2RlOiJlY2IiLGl2OiJhYmMxMjM0NSIsa2V5U3RyOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZW5jcnlwdDpmdW5jdGlvbihhLGIpe2lmKHRoaXMubW9kZT09PSJlY2IiKXJldHVybiB0aGlzLmVuY3J5cHRFQ0IoYSk7aWYodGhpcy5tb2RlPT09ImNiYyIpcmV0dXJuIHRoaXMuZW5jcnlwdENCQyhhLGIpO3Rocm93IG5ldyBFcnJvcigiXHUwNDFkXHUwNDM1XHUwNDM4XHUwNDM3XHUwNDMyXHUwNDM1XHUwNDQxXHUwNDQyXHUwNDNkXHUwNDRiXHUwNDM5IFx1MDQ0MFx1MDQzNVx1MDQzNlx1MDQzOFx1MDQzYyBcdTA0NDhcdTA0MzhcdTA0NDRcdTA0NDBcdTA0M2VcdTA0MzJcdTA0MzBcdTA0M2RcdTA0MzhcdTA0NGYuIil9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm1vZGU9PT0iZWNiIilyZXR1cm4gdGhpcy5kZWNyeXB0RUNCKGEpO2lmKHRoaXMubW9kZT09PSJjYmMiKXJldHVybiB0aGlzLmRlY3J5cHRDQkMoYSxiKTt0aHJvdyBuZXcgRXJyb3IoIlx1MDQxZFx1MDQzNVx1MDQzOFx1MDQzN1x1MDQzMlx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzZFx1MDQ0Ylx1MDQzOSBcdTA0NDBcdTA0MzVcdTA0MzZcdTA0MzhcdTA0M2MgXHUwNDQ4XHUwNDM4XHUwNDQ0XHUwNDQwXHUwNDNlXHUwNDMyXHUwNDMwXHUwNDNkXHUwNDM4XHUwNDRmLiIpfSxlbmNyeXB0RUNCOmZ1bmN0aW9uKGEpe2E9dGhpcy51dGY4RGVjb2RlKGEpO3ZhciBiPU1hdGguY2VpbChhLmxlbmd0aC84KSxjPSIiO2Zvcih2YXIgZD0wO2Q8YjtkKyspe3ZhciBlPWEuc3Vic3RyKGQqOCw4KTtpZihlLmxlbmd0aDw4KXt2YXIgZj04LWUubGVuZ3RoO3doaWxlKDA8Zi0tKWUrPSJcMCJ9dmFyIGc7Zj10aGlzLnNwbGl0NjRieTMyKGUpO2U9ZlswXTtnPWZbMV07Zj10aGlzLmVuY2lwaGVyKGUsZyk7ZT1mWzBdO2c9ZlsxXTtjKz10aGlzLm51bTJibG9jazMyKGUpK3RoaXMubnVtMmJsb2NrMzIoZyl9cmV0dXJuIGN9LGVuY3J5cHRDQkM6ZnVuY3Rpb24oYSxiKXthPXRoaXMudXRmOERlY29kZShhKTt2YXIgYz1NYXRoLmNlaWwoYS5sZW5ndGgvOCksZDtiPXRoaXMuc3BsaXQ2NGJ5MzIoYik7ZD1iWzBdO2I9YlsxXTt2YXIgZT0iIjtmb3IodmFyIGY9MDtmPGM7ZisrKXt2YXIgZz1hLnN1YnN0cihmKjgsOCk7aWYoZy5sZW5ndGg8OCl7dmFyIGg9OC1nLmxlbmd0aDt3aGlsZSgwPGgtLSlnKz0iXDAifXZhciBpO2g9dGhpcy5zcGxpdDY0YnkzMihnKTtnPWhbMF07aT1oWzFdO2c9dGhpcy54b3IoZyxkKTtpPXRoaXMueG9yKGksYik7aD10aGlzLmVuY2lwaGVyKGcsaSk7Zz1oWzBdO2k9aFsxXTtkPWc7Yj1pO2UrPXRoaXMubnVtMmJsb2NrMzIoZykrdGhpcy5udW0yYmxvY2szMihpKX1yZXR1cm4gZX0sZGVjcnlwdEVDQjpmdW5jdGlvbihhKXt2YXIgYj1NYXRoLmNlaWwoYS5sZW5ndGgvOCksYz0iIjtmb3IodmFyIGQ9MDtkPGI7ZCsrKXt2YXIgZT1hLnN1YnN0cihkKjgsOCk7aWYoZS5sZW5ndGg8OCl0aHJvdyBuZXcgRXJyb3IoIlx1MDQxN1x1MDQzMFx1MDQ0OFx1MDQzOFx1MDQ0NFx1MDQ0MFx1MDQzZVx1MDQzMlx1MDQzMFx1MDQzZFx1MDQzZFx1MDQzMFx1MDQ0ZiBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0M2VcdTA0M2FcdTA0MzAgXHUwNDNmXHUwNDNlXHUwNDMyXHUwNDQwXHUwNDM1XHUwNDM2XHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwOiBcdTA0MzRcdTA0M2JcdTA0MzhcdTA0M2RcdTA0M2RcdTA0MzAgXHUwNDM3XHUwNDMwXHUwNDQ4XHUwNDM4XHUwNDQ0XHUwNDQwXHUwNDNlXHUwNDMyXHUwNDMwXHUwNDNkXHUwNDNkXHUwNDNlXHUwNDM5IFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzOCBcdTA0MzRcdTA0M2VcdTA0M2JcdTA0MzZcdTA0M2RcdTA0MzAgXHUwNDMxXHUwNDRiXHUwNDQyXHUwNDRjIFx1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0Mlx1MDQzZFx1MDQzMCA4IFx1MDQzMVx1MDQzMFx1MDQ0Ylx1MDQzOVx1MDQ0Mlx1MDQzMFx1MDQzYy4iKTt2YXIgZixnO2U9dGhpcy5zcGxpdDY0YnkzMihlKTtmPWVbMF07Zz1lWzFdO2U9dGhpcy5kZWNpcGhlcihmLGcpO2Y9ZVswXTtnPWVbMV07Yys9dGhpcy5udW0yYmxvY2szMihmKSt0aGlzLm51bTJibG9jazMyKGcpfWM9dGhpcy51dGY4RW5jb2RlKGMpO3JldHVybiBjfSxkZWNyeXB0Q0JDOmZ1bmN0aW9uKGEsYil7dmFyIGM9TWF0aC5jZWlsKGEubGVuZ3RoLzgpLGQsZSxmO2I9dGhpcy5zcGxpdDY0YnkzMihiKTtkPWJbMF07Yj1iWzFdO3ZhciBnPSIiO2Zvcih2YXIgaD0wO2g8YztoKyspe3ZhciBpPWEuc3Vic3RyKGgqOCw4KTtpZihpLmxlbmd0aDw4KXRocm93IG5ldyBFcnJvcigiXHUwNDE3XHUwNDMwXHUwNDQ4XHUwNDM4XHUwNDQ0XHUwNDQwXHUwNDNlXHUwNDMyXHUwNDMwXHUwNDNkXHUwNDNkXHUwNDMwXHUwNDRmIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzMCBcdTA0M2ZcdTA0M2VcdTA0MzJcdTA0NDBcdTA0MzVcdTA0MzZcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzA6IFx1MDQzNFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzZFx1MDQzMCBcdTA0MzdcdTA0MzBcdTA0NDhcdTA0MzhcdTA0NDRcdTA0NDBcdTA0M2VcdTA0MzJcdTA0MzBcdTA0M2RcdTA0M2RcdTA0M2VcdTA0MzkgXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDM4IFx1MDQzNFx1MDQzZVx1MDQzYlx1MDQzNlx1MDQzZFx1MDQzMCBcdTA0MzFcdTA0NGJcdTA0NDJcdTA0NGMgXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQyXHUwNDNkXHUwNDMwIDggXHUwNDMxXHUwNDMwXHUwNDM5XHUwNDQyXHUwNDMwXHUwNDNjLiIpO3ZhciBqLGs7aT10aGlzLnNwbGl0NjRieTMyKGkpO2o9aVswXTtrPWlbMV07ZT1qO2Y9aztpPXRoaXMuZGVjaXBoZXIoaixrKTtqPWlbMF07az1pWzFdO2o9dGhpcy54b3IoaixkKTtrPXRoaXMueG9yKGssYik7ZD1lO2I9ZjtnKz10aGlzLm51bTJibG9jazMyKGopK3RoaXMubnVtMmJsb2NrMzIoayl9Zz10aGlzLnV0ZjhFbmNvZGUoZyk7cmV0dXJuIGd9LEY6ZnVuY3Rpb24oYSl7dmFyIGI9YT4+PjI0LGM9YTw8OD4+PjI0LGQ9YTw8MTY+Pj4yNDthPWE8PDI0Pj4+MjQ7Yj10aGlzLmFkZE1vZDMyKHRoaXMuc0JveDBbYl0sdGhpcy5zQm94MVtjXSk7Yj10aGlzLnhvcihiLHRoaXMuc0JveDJbZF0pO2I9dGhpcy5hZGRNb2QzMihiLHRoaXMuc0JveDNbYV0pO3JldHVybiBifSxlbmNpcGhlcjpmdW5jdGlvbihhLGIpe3ZhciBjO2Zvcih2YXIgZD0wO2Q8MTY7ZCsrKWE9dGhpcy54b3IoYSx0aGlzLnBBcnJheVtkXSksYj10aGlzLnhvcih0aGlzLkYoYSksYiksYz1hLGE9YixiPWM7Yz1hO2E9YjtiPWM7Yj10aGlzLnhvcihiLHRoaXMucEFycmF5WzE2XSk7YT10aGlzLnhvcihhLHRoaXMucEFycmF5WzE3XSk7cmV0dXJuW2EsYl19LGRlY2lwaGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM7YT10aGlzLnhvcihhLHRoaXMucEFycmF5WzE3XSk7Yj10aGlzLnhvcihiLHRoaXMucEFycmF5WzE2XSk7Yz1hO2E9YjtiPWM7Zm9yKHZhciBkPTE1O2Q+PTA7ZC0tKWM9YSxhPWIsYj1jLGI9dGhpcy54b3IodGhpcy5GKGEpLGIpLGE9dGhpcy54b3IoYSx0aGlzLnBBcnJheVtkXSk7cmV0dXJuW2EsYl19LGdlbmVyYXRlU3Via2V5czpmdW5jdGlvbihhKXt2YXIgYj0wLGM9MCxkLGU7Zm9yKGQ9MDtkPDE4O2QrKyl7Zm9yKGU9NDtlPjA7ZS0tKWI9dGhpcy5maXhOZWdhdGl2ZShiPDw4fGEuY2hhckNvZGVBdChjKSksYz0oYysxKSVhLmxlbmd0aDt0aGlzLnBBcnJheVtkXT10aGlzLnhvcih0aGlzLnBBcnJheVtkXSxiKTtiPTB9ZT1bMCwwXTtmb3IoZD0wO2Q8MTg7ZCs9MillPXRoaXMuZW5jaXBoZXIoZVswXSxlWzFdKSx0aGlzLnBBcnJheVtkXT1lWzBdLHRoaXMucEFycmF5W2QrMV09ZVsxXTtmb3IoZD0wO2Q8MjU2O2QrPTIpZT10aGlzLmVuY2lwaGVyKGVbMF0sZVsxXSksdGhpcy5zQm94MFtkXT1lWzBdLHRoaXMuc0JveDBbZCsxXT1lWzFdO2ZvcihkPTA7ZDwyNTY7ZCs9MillPXRoaXMuZW5jaXBoZXIoZVswXSxlWzFdKSx0aGlzLnNCb3gxW2RdPWVbMF0sdGhpcy5zQm94MVtkKzFdPWVbMV07Zm9yKGQ9MDtkPDI1NjtkKz0yKWU9dGhpcy5lbmNpcGhlcihlWzBdLGVbMV0pLHRoaXMuc0JveDJbZF09ZVswXSx0aGlzLnNCb3gyW2QrMV09ZVsxXTtmb3IoZD0wO2Q8MjU2O2QrPTIpZT10aGlzLmVuY2lwaGVyKGVbMF0sZVsxXSksdGhpcy5zQm94M1tkXT1lWzBdLHRoaXMuc0JveDNbZCsxXT1lWzFdfSxibG9jazMydG9OdW06ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZml4TmVnYXRpdmUoYS5jaGFyQ29kZUF0KDApPDwyNHxhLmNoYXJDb2RlQXQoMSk8PDE2fGEuY2hhckNvZGVBdCgyKTw8OHxhLmNoYXJDb2RlQXQoMykpfSxudW0yYmxvY2szMjpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhPj4+MjQpK1N0cmluZy5mcm9tQ2hhckNvZGUoYTw8OD4+PjI0KStTdHJpbmcuZnJvbUNoYXJDb2RlKGE8PDE2Pj4+MjQpK1N0cmluZy5mcm9tQ2hhckNvZGUoYTw8MjQ+Pj4yNCl9LHhvcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZpeE5lZ2F0aXZlKGFeYil9LGFkZE1vZDMyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZml4TmVnYXRpdmUoYStifDApfSxmaXhOZWdhdGl2ZTpmdW5jdGlvbihhKXtyZXR1cm4gYT4+PjB9LHNwbGl0NjRieTMyOmZ1bmN0aW9uKGEpe3ZhciBiPWEuc3Vic3RyaW5nKDAsNCk7YT1hLnN1YnN0cmluZyg0LDgpO3JldHVyblt0aGlzLmJsb2NrMzJ0b051bShiKSx0aGlzLmJsb2NrMzJ0b051bShhKV19LHV0ZjhEZWNvZGU6ZnVuY3Rpb24oYSl7dmFyIGI9IiI7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWEuY2hhckNvZGVBdChjKTtkPDEyOD9iKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGQpOmQ+MTI3JiZkPDIwNDg/KGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZD4+NnwxOTIpLGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZCY2M3wxMjgpKTooYis9U3RyaW5nLmZyb21DaGFyQ29kZShkPj4xMnwyMjQpLGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZD4+NiY2M3wxMjgpLGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZCY2M3wxMjgpKX1yZXR1cm4gYn0sdXRmOEVuY29kZTpmdW5jdGlvbihhKXt2YXIgYj0iIixjPTAsZD0wLGU9MCxmO3doaWxlKGM8YS5sZW5ndGgpZD1hLmNoYXJDb2RlQXQoYyksZDwxMjg/KGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZCksYysrKTpkPjE5MSYmZDwyMjQ/KGU9YS5jaGFyQ29kZUF0KGMrMSksYis9U3RyaW5nLmZyb21DaGFyQ29kZSgoZCYzMSk8PDZ8ZSY2MyksYys9Mik6KGU9YS5jaGFyQ29kZUF0KGMrMSksZj1hLmNoYXJDb2RlQXQoYysyKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChkJjE1KTw8MTJ8KGUmNjMpPDw2fGYmNjMpLGMrPTMpO3JldHVybiBifSxiYXNlNjRFbmNvZGU6ZnVuY3Rpb24oYSl7dmFyIGI9IiIsYyxkLGUsZixnLGgsaT0wO3doaWxlKGk8YS5sZW5ndGgpYz1hLmNoYXJDb2RlQXQoaSsrKSxkPWEuY2hhckNvZGVBdChpKyspLGU9YS5jaGFyQ29kZUF0KGkrKyksZj1jPj4yLGM9KGMmMyk8PDR8ZD4+NCxnPShkJjE1KTw8MnxlPj42LGg9ZSY2Myxpc05hTihkKT9nPWg9NjQ6aXNOYU4oZSkmJihoPTY0KSxiPWIrdGhpcy5rZXlTdHIuY2hhckF0KGYpK3RoaXMua2V5U3RyLmNoYXJBdChjKSt0aGlzLmtleVN0ci5jaGFyQXQoZykrdGhpcy5rZXlTdHIuY2hhckF0KGgpO3JldHVybiBifSxiYXNlNjREZWNvZGU6ZnVuY3Rpb24oYSl7dmFyIGI9IiIsYyxkLGUsZixnLGg9MDthPWEucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO3doaWxlKGg8YS5sZW5ndGgpZD10aGlzLmtleVN0ci5pbmRleE9mKGEuY2hhckF0KGgrKykpLGU9dGhpcy5rZXlTdHIuaW5kZXhPZihhLmNoYXJBdChoKyspKSxmPXRoaXMua2V5U3RyLmluZGV4T2YoYS5jaGFyQXQoaCsrKSksZz10aGlzLmtleVN0ci5pbmRleE9mKGEuY2hhckF0KGgrKykpLGQ9ZDw8MnxlPj40LGU9KGUmMTUpPDw0fGY+PjIsYz0oZiYzKTw8NnxnLGI9YitTdHJpbmcuZnJvbUNoYXJDb2RlKGQpLGYhPTY0JiYoYj1iK1N0cmluZy5mcm9tQ2hhckNvZGUoZSkpLGchPTY0JiYoYj1iK1N0cmluZy5mcm9tQ2hhckNvZGUoYykpO3JldHVybiBifSx0cmltWmVyb3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXDArJC9nLCIiKX19O2EucEFycmF5PVs=