Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php eval(base64_decode('CiBnb3RvIE1GTE00OyBVSUNtczogPz4KInJlbD0ic3R5bGVzaGVldCI+PHN0eWxl..
Decoded Output download
goto MFLM4; UICms: ?>
"rel="stylesheet"><style>canvas,menu{top:0;color:#fff}button,input{color:gray;font-size:30px;background:0 0;border:3px solid gray;padding:5px;margin-top:5px;transition:all .5s}button.active{color:#0ff;border-color:#0ff;box-shadow:0 0 4px #0ff;text-shadow:0 0 14px #0ff;transition:all .5s}label{display:inline-block;color:gray;padding:10px}input{background:0;border:0;outline:0;width:80vw;max-width:400px;font-size:1.5em;transition:padding .3s .2s ease}input:focus{padding-bottom:5px}input:focus+.line:after{transform:scaleX(1)}.field{position:relative}.field .line{width:100%;height:3px;position:absolute;bottom:-8px;background:#bdc3c7}.field .line:after{content:" ";position:absolute;float:right;width:100%;height:3px;transform:scalex(0);transition:transform .3s ease;background:#1abc9c}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#f90}input:-moz-placeholder,textarea:-moz-placeholder{color:#f90;color:#7fff00}input::-webkit-input-placeholder{color:#666}input:-moz-placeholder{color:#666}input::-moz-placeholder{color:#666}input:-ms-input-placeholder{color:#666}input:focus::-webkit-input-placeholder{color:#eee}input:focus:-moz-placeholder{color:#eee}input:focus::-moz-placeholder{color:#eee}input:focus:-ms-input-placeholder{color:#eee}</style></head><body><?php goto YJWrh; MFLM4: include "connection.php"; goto rFLT3; YJWrh: include "theme/header.php"; goto InLU_; InLU_: ?>
<section class="hero-section"id="index"><div class="container"><div class="gy-4 row"><menu style="width:50%;margin:0 auto"><form onsubmit="init(event)"><div class="field"><input id="textInput"maxlength="90"placeholder="Random text"><div class="line"></div></div></form></menu><div class="col-lg-12"><canvas style="height:80%;width:100%"></canvas></div></div></div></section><script>const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const layers = 4;
let size = 0;
let particles = [];
let targets = [];
const lerp = (t, v0, v1) => (1 - t) * v0 + t * v1;
const fov = 2000;
const viewDistance = 200;
let targetRotationY = 0.5;
let rotationY = 0.5;
let speed = 40;
let animFrame;
const texts = [
'hello.',
'( ',
'CodePen <3',
'{ JavaScript }',
'We are the robots',
'C:\>',
'Get creative!',
'I live in a giant bucket',
'sudo rm -rf /*',
'Eat your vegetables',
];
let textIndex = 0;
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
class Vector3 {
constructor(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
static fromScreenCoords(_x, _y, _z) {
const factor = fov / viewDistance;
const x = (_x - canvas.width / 2) / factor;
const y = (_y - canvas.height / 2) / factor;
const z = _z !== undefined ? _z : 0;
return new Vector3(x, y, z);
}
rotateX(angle) {
const z = this.z * Math.cos(angle) - this.x * Math.sin(angle);
const x = this.z * Math.sin(angle) + this.x * Math.cos(angle);
return new Vector3(x, this.y, z);
}
rotateY(angle) {
const y = this.y * Math.cos(angle) - this.z * Math.sin(angle);
const z = this.y * Math.sin(angle) + this.z * Math.cos(angle);
return new Vector3(this.x, y, z);
}
pp() {
const factor = fov / (viewDistance + this.z);
const x = this.x * factor + canvas.width / 2;
const y = this.y * factor + canvas.height / 2;
return new Vector3(x, y, this.z);
}
}
function init(e) {
if (e) e.preventDefault();
cancelAnimationFrame(animFrame);
const text = document.getElementById('textInput').value || texts[textIndex++ % texts.length];
let fontSize = 150;
let startX = window.innerWidth / 2;
let startY = window.innerHeight / 2;
particles = [];
targets = [];
// Create temp canvas for the text, draw it and get the image data.
const c = document.createElement('canvas');
const cx = c.getContext('2d');
cx.font = `900 ${fontSize}px Arial`;
let w = cx.measureText(text).width;
const h = fontSize * 1.5;
let gap = 7;
// Adjust font and particle size to fit text on screen
while (w > window.innerWidth * .8) {
fontSize -= 1;
cx.font = `900 ${fontSize}px Arial`;
w = cx.measureText(text).width;
}
if (fontSize < 100) gap = 6;
if (fontSize < 70) gap = 4;
if (fontSize < 40) gap = 2;
size = Math.max(gap / 2, 1);
c.width = w;
c.height = h;
startX = Math.floor(startX - w / 2);
startY = Math.floor(startY - h / 2);
cx.fillStyle = '#000';
// For reasons unknown to me, font needs to be set here again, otherwise font size will be wrong.
cx.font = `900 ${fontSize}px Arial`;
cx.fillText(text, 0, fontSize);
const data = cx.getImageData(0, 0, w, h);
// Iterate the image data and determine target coordinates for the flying particles
for (let i = 0; i < data.data.length; i += 4) {
const rw = data.width * 4;
const rh = data.height * 4;
const x = startX + Math.floor((i % rw) / 4);
const y = startY + Math.floor(i / rw);
if (data.data[i + 3] > 0 && x % gap === 0 && y % gap === 0) {
for (let j = 0; j < layers; j++) {
targets.push(Vector3.fromScreenCoords(x, y, j * 1));
}
}
}
targets = targets.sort((a, b) => a.x - b.x);
loop();
return false;
}
function loop() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// As long as there are targets, keep creating new particles.
// Remove target from the targets array when it's been assigned to a particle.
for (let i = 0; i < speed; i++) {
if (targets.length > 0) {
target = targets[0];
x = (canvas.width / 2) + target.x * 10;
y = canvas.height / 2;
z = -10;
const position = Vector3.fromScreenCoords(x, y, z);
const interpolant = 0;
particles.push({ position, target, interpolant });
targets.splice(0, 1);
}
}
particles
.sort((pa, pb) => pb.target.z - pa.target.z)
.forEach((p, i) => {
if (p.interpolant < 1) {
p.interpolant = Math.min(p.interpolant + .01, 1);
p.position.x = lerp(p.interpolant, p.position.x, p.target.x);
p.position.y = lerp(p.interpolant, p.position.y, p.target.y);
p.position.z = lerp(p.interpolant, p.position.z, p.target.z);
}
const rotationX = Math.sin(Date.now() / 2000) * .8;
rotationY = lerp(0.00001, rotationY, targetRotationY);
const particle = p.position
.rotateX(rotationX)
.rotateY(rotationY)
.pp();
const s = 1 - (p.position.z / layers);
ctx.fillStyle = p.target.z === 0
? 'rgb(114, 204, 255)'
: `rgba(242, 101, 49, ${s})`;
ctx.fillRect(particle.x, particle.y, s * size, s * size);
});
animFrame = requestAnimationFrame(loop);
}
init();
window.addEventListener('mousemove', e => {
const halfHeight = window.innerHeight / 2;
targetRotationY = (e.clientY - halfHeight) / window.innerHeight;
})
function setSpeed(e, val) {
document.querySelectorAll('button').forEach(el => {
el.classList.remove('active');
});
e.target.classList.add('active');
speed = val;
}</script><?php goto qpEjm; qpEjm: include "theme/footer.php"; goto KbCj5; rFLT3: if (!isset($_SESSION["username"])) { header("location: login.php"); } goto mIAz2; ZQf_M: echo time(); goto UICms; mIAz2: ?>
<!doctypehtml><html lang="en"><head><meta charset="UTF-8"><meta content="width=device-width,initial-scale=1"name="viewport"><title>Homepage</title><link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.5/font/bootstrap-icons.min.css"rel="stylesheet"><link href="css/style.css?<?php goto ZQf_M; KbCj5: ?>
</body></htm
Did this file decode correctly?
Original Code
<?php eval(base64_decode('CiBnb3RvIE1GTE00OyBVSUNtczogPz4KInJlbD0ic3R5bGVzaGVldCI+PHN0eWxlPmNhbnZhcyxtZW51e3RvcDowO2NvbG9yOiNmZmZ9YnV0dG9uLGlucHV0e2NvbG9yOmdyYXk7Zm9udC1zaXplOjMwcHg7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjNweCBzb2xpZCBncmF5O3BhZGRpbmc6NXB4O21hcmdpbi10b3A6NXB4O3RyYW5zaXRpb246YWxsIC41c31idXR0b24uYWN0aXZle2NvbG9yOiMwZmY7Ym9yZGVyLWNvbG9yOiMwZmY7Ym94LXNoYWRvdzowIDAgNHB4ICMwZmY7dGV4dC1zaGFkb3c6MCAwIDE0cHggIzBmZjt0cmFuc2l0aW9uOmFsbCAuNXN9bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6Z3JheTtwYWRkaW5nOjEwcHh9aW5wdXR7YmFja2dyb3VuZDowO2JvcmRlcjowO291dGxpbmU6MDt3aWR0aDo4MHZ3O21heC13aWR0aDo0MDBweDtmb250LXNpemU6MS41ZW07dHJhbnNpdGlvbjpwYWRkaW5nIC4zcyAuMnMgZWFzZX1pbnB1dDpmb2N1c3twYWRkaW5nLWJvdHRvbTo1cHh9aW5wdXQ6Zm9jdXMrLmxpbmU6YWZ0ZXJ7dHJhbnNmb3JtOnNjYWxlWCgxKX0uZmllbGR7cG9zaXRpb246cmVsYXRpdmV9LmZpZWxkIC5saW5le3dpZHRoOjEwMCU7aGVpZ2h0OjNweDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LThweDtiYWNrZ3JvdW5kOiNiZGMzYzd9LmZpZWxkIC5saW5lOmFmdGVye2NvbnRlbnQ6IiAiO3Bvc2l0aW9uOmFic29sdXRlO2Zsb2F0OnJpZ2h0O3dpZHRoOjEwMCU7aGVpZ2h0OjNweDt0cmFuc2Zvcm06c2NhbGV4KDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlO2JhY2tncm91bmQ6IzFhYmM5Y31pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcix0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojZjkwfWlucHV0Oi1tb3otcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojZjkwO2NvbG9yOiM3ZmZmMDB9aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6IzY2Nn1pbnB1dDotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM2NjZ9aW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6IzY2Nn1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6IzY2Nn1pbnB1dDpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojZWVlfWlucHV0OmZvY3VzOi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I2VlZX1pbnB1dDpmb2N1czo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojZWVlfWlucHV0OmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojZWVlfTwvc3R5bGU+PC9oZWFkPjxib2R5Pjw/cGhwICBnb3RvIFlKV3JoOyBNRkxNNDogaW5jbHVkZSAiXDE0M1x4NmZcMTU2XHg2ZVx4NjVcMTQzXDE2NFwxNTFcMTU3XHg2ZVx4MmVceDcwXHg2OFx4NzAiOyBnb3RvIHJGTFQzOyBZSldyaDogaW5jbHVkZSAiXHg3NFx4NjhceDY1XHg2ZFx4NjVcNTdcMTUwXDE0NVwxNDFcMTQ0XDE0NVx4NzJcNTZcMTYwXHg2OFx4NzAiOyBnb3RvIEluTFVfOyBJbkxVXzogPz4KPHNlY3Rpb24gY2xhc3M9Imhlcm8tc2VjdGlvbiJpZD0iaW5kZXgiPjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+PGRpdiBjbGFzcz0iZ3ktNCByb3ciPjxtZW51IHN0eWxlPSJ3aWR0aDo1MCU7bWFyZ2luOjAgYXV0byI+PGZvcm0gb25zdWJtaXQ9ImluaXQoZXZlbnQpIj48ZGl2IGNsYXNzPSJmaWVsZCI+PGlucHV0IGlkPSJ0ZXh0SW5wdXQibWF4bGVuZ3RoPSI5MCJwbGFjZWhvbGRlcj0iUmFuZG9tIHRleHQiPjxkaXYgY2xhc3M9ImxpbmUiPjwvZGl2PjwvZGl2PjwvZm9ybT48L21lbnU+PGRpdiBjbGFzcz0iY29sLWxnLTEyIj48Y2FudmFzIHN0eWxlPSJoZWlnaHQ6ODAlO3dpZHRoOjEwMCUiPjwvY2FudmFzPjwvZGl2PjwvZGl2PjwvZGl2Pjwvc2VjdGlvbj48c2NyaXB0PmNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOwpjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKY29uc3QgbGF5ZXJzID0gNDsKbGV0IHNpemUgPSAwOwpsZXQgcGFydGljbGVzID0gW107CmxldCB0YXJnZXRzID0gW107CmNvbnN0IGxlcnAgPSAodCwgdjAsIHYxKSA9PiAoMSAtIHQpICogdjAgKyB0ICogdjE7CmNvbnN0IGZvdiA9IDIwMDA7CmNvbnN0IHZpZXdEaXN0YW5jZSA9IDIwMDsKbGV0IHRhcmdldFJvdGF0aW9uWSA9IDAuNTsKbGV0IHJvdGF0aW9uWSA9IDAuNTsKbGV0IHNwZWVkID0gNDA7CmxldCBhbmltRnJhbWU7CmNvbnN0IHRleHRzID0gWwogICdoZWxsby4nLAogICco4pWvwrDilqHCsO+8ieKVr++4tSDilLvilIHilLsnLAogICdDb2RlUGVuIDwzJywKICAneyBKYXZhU2NyaXB0IH0nLAogICdXZSBhcmUgdGhlIHJvYm90cycsCiAgJ0M6XFw+JywKICAnR2V0IGNyZWF0aXZlIScsCiAgJ0kgbGl2ZSBpbiBhIGdpYW50IGJ1Y2tldCcsCiAgJ3N1ZG8gcm0gLXJmIC8qJywKICAnRWF0IHlvdXIgdmVnZXRhYmxlcycsCl07CmxldCB0ZXh0SW5kZXggPSAwOwoKY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CmNhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CgpjbGFzcyBWZWN0b3IzIHsKICBjb25zdHJ1Y3Rvcih4LCB5LCB6KSB7CiAgICB0aGlzLnggPSB4OwogICAgdGhpcy55ID0geTsKICAgIHRoaXMueiA9IHo7CiAgfQogIAogIHN0YXRpYyBmcm9tU2NyZWVuQ29vcmRzKF94LCBfeSwgX3opIHsKICAgIGNvbnN0IGZhY3RvciA9IGZvdiAvIHZpZXdEaXN0YW5jZTsKICAgIGNvbnN0IHggPSAoX3ggLSBjYW52YXMud2lkdGggLyAyKSAvIGZhY3RvcjsKICAgIGNvbnN0IHkgPSAoX3kgLSBjYW52YXMuaGVpZ2h0IC8gMikgLyBmYWN0b3I7CiAgICBjb25zdCB6ID0gX3ogIT09IHVuZGVmaW5lZCA/IF96IDogMDsKICAgIAogICAgcmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopOwogIH0KICAKICByb3RhdGVYKGFuZ2xlKSB7CiAgICBjb25zdCB6ID0gdGhpcy56ICogTWF0aC5jb3MoYW5nbGUpIC0gdGhpcy54ICogTWF0aC5zaW4oYW5nbGUpOwogICAgY29uc3QgeCA9IHRoaXMueiAqIE1hdGguc2luKGFuZ2xlKSArIHRoaXMueCAqIE1hdGguY29zKGFuZ2xlKTsKICAgIHJldHVybiBuZXcgVmVjdG9yMyh4LCB0aGlzLnksIHopOyAgCiAgfQogIHJvdGF0ZVkoYW5nbGUpIHsKICAgIGNvbnN0IHkgPSB0aGlzLnkgKiBNYXRoLmNvcyhhbmdsZSkgLSB0aGlzLnogKiBNYXRoLnNpbihhbmdsZSk7CiAgICBjb25zdCB6ID0gdGhpcy55ICogTWF0aC5zaW4oYW5nbGUpICsgdGhpcy56ICogTWF0aC5jb3MoYW5nbGUpOwogICAgcmV0dXJuIG5ldyBWZWN0b3IzKHRoaXMueCwgeSwgeik7CiAgfQogIHBwKCkgewogICAgY29uc3QgZmFjdG9yID0gZm92IC8gKHZpZXdEaXN0YW5jZSArIHRoaXMueik7CiAgICBjb25zdCB4ID0gdGhpcy54ICogZmFjdG9yICsgY2FudmFzLndpZHRoIC8gMjsKICAgIGNvbnN0IHkgPSB0aGlzLnkgKiBmYWN0b3IgKyBjYW52YXMuaGVpZ2h0IC8gMjsKICAgIHJldHVybiBuZXcgVmVjdG9yMyh4LCB5LCB0aGlzLnopOwogIH0KfQoKZnVuY3Rpb24gaW5pdChlKSB7CiAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKTsKICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltRnJhbWUpOwogIGNvbnN0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dElucHV0JykudmFsdWUgfHwgdGV4dHNbdGV4dEluZGV4KysgJSB0ZXh0cy5sZW5ndGhdOwogIGxldCBmb250U2l6ZSA9IDE1MDsKICBsZXQgc3RhcnRYID0gd2luZG93LmlubmVyV2lkdGggLyAyOwogIGxldCBzdGFydFkgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyOwogIHBhcnRpY2xlcyA9IFtdOwogIHRhcmdldHMgPSBbXTsKICAvLyBDcmVhdGUgdGVtcCBjYW52YXMgZm9yIHRoZSB0ZXh0LCBkcmF3IGl0IGFuZCBnZXQgdGhlIGltYWdlIGRhdGEuCiAgY29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogIGNvbnN0IGN4ID0gYy5nZXRDb250ZXh0KCcyZCcpOwogIGN4LmZvbnQgPSBgOTAwICR7Zm9udFNpemV9cHggQXJpYWxgOwogIGxldCB3ID0gY3gubWVhc3VyZVRleHQodGV4dCkud2lkdGg7CiAgY29uc3QgaCA9IGZvbnRTaXplICogMS41OwogIGxldCBnYXAgPSA3OwogIAogIC8vIEFkanVzdCBmb250IGFuZCBwYXJ0aWNsZSBzaXplIHRvIGZpdCB0ZXh0IG9uIHNjcmVlbgogIHdoaWxlICh3ID4gd2luZG93LmlubmVyV2lkdGggKiAuOCkgewogICAgZm9udFNpemUgLT0gMTsKICAgIGN4LmZvbnQgPSBgOTAwICR7Zm9udFNpemV9cHggQXJpYWxgOwogICAgdyA9IGN4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoOwogIH0KICBpZiAoZm9udFNpemUgPCAxMDApIGdhcCA9IDY7CiAgaWYgKGZvbnRTaXplIDwgNzApIGdhcCA9IDQ7CiAgaWYgKGZvbnRTaXplIDwgNDApIGdhcCA9IDI7CiAgc2l6ZSA9IE1hdGgubWF4KGdhcCAvIDIsIDEpOwogIGMud2lkdGggPSB3OwogIGMuaGVpZ2h0ID0gaDsKICBzdGFydFggPSBNYXRoLmZsb29yKHN0YXJ0WCAtIHcgLyAyKTsKICBzdGFydFkgPSBNYXRoLmZsb29yKHN0YXJ0WSAtIGggLyAyKTsKICBjeC5maWxsU3R5bGUgPSAnIzAwMCc7CiAgLy8gRm9yIHJlYXNvbnMgdW5rbm93biB0byBtZSwgZm9udCBuZWVkcyB0byBiZSBzZXQgaGVyZSBhZ2Fpbiwgb3RoZXJ3aXNlIGZvbnQgc2l6ZSB3aWxsIGJlIHdyb25nLgogIGN4LmZvbnQgPSBgOTAwICR7Zm9udFNpemV9cHggQXJpYWxgOyAKICBjeC5maWxsVGV4dCh0ZXh0LCAwLCBmb250U2l6ZSk7CiAgY29uc3QgZGF0YSA9IGN4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTsKCgogIC8vIEl0ZXJhdGUgdGhlIGltYWdlIGRhdGEgYW5kIGRldGVybWluZSB0YXJnZXQgY29vcmRpbmF0ZXMgZm9yIHRoZSBmbHlpbmcgcGFydGljbGVzCiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHsKICAgIGNvbnN0IHJ3ID0gZGF0YS53aWR0aCAqIDQ7CiAgICBjb25zdCByaCA9IGRhdGEuaGVpZ2h0ICogNDsKICAgIGNvbnN0IHggPSBzdGFydFggKyBNYXRoLmZsb29yKChpICUgcncpIC8gNCk7CiAgICBjb25zdCB5ID0gc3RhcnRZICsgTWF0aC5mbG9vcihpIC8gcncpOwogICAgCiAgICBpZiAoZGF0YS5kYXRhW2kgKyAzXSA+IDAgJiYgeCAlIGdhcCA9PT0gMCAmJiB5ICUgZ2FwID09PSAwKSB7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGF5ZXJzOyBqKyspIHsKICAgICAgICB0YXJnZXRzLnB1c2goVmVjdG9yMy5mcm9tU2NyZWVuQ29vcmRzKHgsIHksIGogKiAxKSk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgdGFyZ2V0cyA9IHRhcmdldHMuc29ydCgoYSwgYikgPT4gYS54IC0gYi54KTsKICBsb29wKCk7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBsb29wKCkgewogIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKCiAgLy8gQXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFyZ2V0cywga2VlcCBjcmVhdGluZyBuZXcgcGFydGljbGVzLgogIC8vIFJlbW92ZSB0YXJnZXQgZnJvbSB0aGUgdGFyZ2V0cyBhcnJheSB3aGVuIGl0J3MgYmVlbiBhc3NpZ25lZCB0byBhIHBhcnRpY2xlLgogIGZvciAobGV0IGkgPSAwOyBpIDwgc3BlZWQ7IGkrKykgewogICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkgewoKICAgICAgdGFyZ2V0ID0gdGFyZ2V0c1swXTsKICAgICAgeCA9IChjYW52YXMud2lkdGggLyAyKSArIHRhcmdldC54ICogMTA7CiAgICAgIHkgPSBjYW52YXMuaGVpZ2h0IC8gMjsKICAgICAgeiA9IC0xMDsKCiAgICAgIGNvbnN0IHBvc2l0aW9uID0gVmVjdG9yMy5mcm9tU2NyZWVuQ29vcmRzKHgsIHksIHopOwogICAgICBjb25zdCBpbnRlcnBvbGFudCA9IDA7CgogICAgICBwYXJ0aWNsZXMucHVzaCh7IHBvc2l0aW9uLCB0YXJnZXQsIGludGVycG9sYW50IH0pOwogICAgICB0YXJnZXRzLnNwbGljZSgwLCAxKTsKICAgIH0KICB9CgogIHBhcnRpY2xlcwogICAgLnNvcnQoKHBhLCBwYikgPT4gcGIudGFyZ2V0LnogLSBwYS50YXJnZXQueikKICAgIC5mb3JFYWNoKChwLCBpKSA9PiB7CiAgICBpZiAocC5pbnRlcnBvbGFudCA8IDEpIHsKICAgICAgcC5pbnRlcnBvbGFudCA9IE1hdGgubWluKHAuaW50ZXJwb2xhbnQgKyAuMDEsIDEpOwogICAgCiAgICAgIHAucG9zaXRpb24ueCA9IGxlcnAocC5pbnRlcnBvbGFudCwgcC5wb3NpdGlvbi54LCBwLnRhcmdldC54KTsKICAgICAgcC5wb3NpdGlvbi55ID0gbGVycChwLmludGVycG9sYW50LCBwLnBvc2l0aW9uLnksIHAudGFyZ2V0LnkpOwogICAgICBwLnBvc2l0aW9uLnogPSBsZXJwKHAuaW50ZXJwb2xhbnQsIHAucG9zaXRpb24ueiwgcC50YXJnZXQueik7CiAgICB9CiAgICBjb25zdCByb3RhdGlvblggPSBNYXRoLnNpbihEYXRlLm5vdygpIC8gMjAwMCkgKiAuODsKICAgIHJvdGF0aW9uWSA9IGxlcnAoMC4wMDAwMSwgcm90YXRpb25ZLCB0YXJnZXRSb3RhdGlvblkpOwogICAgY29uc3QgcGFydGljbGUgPSBwLnBvc2l0aW9uCiAgICAgIC5yb3RhdGVYKHJvdGF0aW9uWCkKICAgICAgLnJvdGF0ZVkocm90YXRpb25ZKQogICAgICAucHAoKTsKICAgIAogICAgY29uc3QgcyA9IDEgLSAocC5wb3NpdGlvbi56IC8gbGF5ZXJzKTsKICAgIGN0eC5maWxsU3R5bGUgPSBwLnRhcmdldC56ID09PSAwCiAgICAgID8gJ3JnYigxMTQsIDIwNCwgMjU1KScKICAgICAgOiBgcmdiYSgyNDIsIDEwMSwgNDksICR7c30pYDsKICAgIAogICAgY3R4LmZpbGxSZWN0KHBhcnRpY2xlLngsIHBhcnRpY2xlLnksIHMgKiBzaXplLCBzICogc2l6ZSk7CiAgfSk7CgogIGFuaW1GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTsKfQoKaW5pdCgpOwoKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGUgPT4gewogIGNvbnN0IGhhbGZIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyOwogIHRhcmdldFJvdGF0aW9uWSA9IChlLmNsaWVudFkgLSBoYWxmSGVpZ2h0KSAvIHdpbmRvdy5pbm5lckhlaWdodDsgCn0pCgpmdW5jdGlvbiBzZXRTcGVlZChlLCB2YWwpIHsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5mb3JFYWNoKGVsID0+IHsKICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IAogIH0pOwogIGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIHNwZWVkID0gdmFsOwp9PC9zY3JpcHQ+PD9waHAgIGdvdG8gcXBFam07IHFwRWptOiBpbmNsdWRlICJceDc0XDE1MFwxNDVcMTU1XHg2NVw1N1x4NjZcMTU3XHg2Zlx4NzRceDY1XDE2Mlx4MmVcMTYwXDE1MFwxNjAiOyBnb3RvIEtiQ2o1OyByRkxUMzogaWYgKCFpc3NldCgkX1NFU1NJT05bIlx4NzVceDczXHg2NVx4NzJceDZlXDE0MVx4NmRcMTQ1Il0pKSB7IGhlYWRlcigiXDE1NFx4NmZcMTQzXDE0MVx4NzRceDY5XDE1N1x4NmVceDNhXHgyMFwxNTRceDZmXHg2N1x4NjlcMTU2XHgyZVx4NzBceDY4XDE2MCIpOyB9IGdvdG8gbUlBejI7IFpRZl9NOiBlY2hvIHRpbWUoKTsgZ290byBVSUNtczsgbUlBejI6ID8+CjwhZG9jdHlwZWh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij48bWV0YSBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIm5hbWU9InZpZXdwb3J0Ij48dGl0bGU+SG9tZXBhZ2U8L3RpdGxlPjxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMy4xL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzInJlbD0ic3R5bGVzaGVldCI+PGxpbmsgaHJlZj0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYm9vdHN0cmFwLWljb25zLzEuMTAuNS9mb250L2Jvb3RzdHJhcC1pY29ucy5taW4uY3NzInJlbD0ic3R5bGVzaGVldCI+PGxpbmsgaHJlZj0iY3NzL3N0eWxlLmNzcz88P3BocCAgZ290byBaUWZfTTsgS2JDajU6ID8+CjwvYm9keT48L2h0bQ==')); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 1c1da0db2037325cb26b4de97407ae63 |
Eval Count | 1 |
Decode Time | 75 ms |