|
Menu |
|
|
Home |
| |
|
Discussions |
| |
|
Tools |
| |
|
Affiliates |
| |
|
Content |
| |
|
Info |
| | |
|
|
|
|
|
User Info |
|
Membership:
Latest: MichaelSnaRe
New Today: 0
New Yesterday: 0
Overall: 9144
People Online:
Visitors: 97
Members: 0
Total: 97
|
|
|
|
|
|
Full disclosure |
|
|
|
|
|
|
|
|
|
IT Security and Insecurity Portal |
|
|
Wordpress plugin hacked - I would really like to decode this |
|
Posted: Sun Apr 03, 2011 2:35 am |
|
|
meedt1 |
Beginner |
|
|
Joined: Apr 03, 2011 |
Posts: 2 |
|
|
|
|
|
|
|
<?php // This file is protected by copyright law and provided under license. Reverse engineering of this file is strictly prohibited.
$OOO0O0O00=__FILE__;$O00O00O00=__LINE__;$OO00O0000=36052;eval((base64_decode('JE8wMDBPME8wMD1mb3BlbigkT09PME8wTzAwLCdyYicpO3doaWxlKC0tJE8wME8wME8wMClmZ2V0cygkTzAwME8wTzAwLDEwMjQpO2ZnZXRzKCRPMDAwTzBPMDAsNDA5Nik7JE9PMDBPMDBPMD0oYmFzZTY0X2RlY29kZShzdHJ0cihmcmVhZCgkTzAwME8wTzAwLDM3MiksJ3k1R3IyQXBGTlpjaDBqOGlneEV0V2U5bnd6WUNsZmJzUE9ScTRUSW1hM01TL2RRVStWQjFLdUR2N0hrNlhKTG89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?>
Z2Ji0r5i0r5i0ruTlIemnvZTlpVOwDWaZuJsx4T0xeJsZB+RZBNQZ2Jit15i02X+0G7RZBN/cpZOlDWDjAJ4z9jUzpWalvxBfFNazmZTw9gaZ2X+0r5i02X+0G+4tKX+02X+0ry+cE+mbteFlqZ5l2z89Ija0pa7Y9f7xnxnztTQfv3zgDVIwmjgtuZVjAxZC921te0UzAAecuzG0WduxFwvEp/D9230C1KmhGf5g4j2xWzFE2TcEKVjt4JgWeZteAe9euOz9IARwDxTzIfaY93SCpuQCv5VlmjKfnzvbFTk0r2B01gujql78E/UZB43cE46zIj/CvjTcGxi0ry+t15i0ry38DeDw9+aZ2Ji0r5i0r5i0G46rg33zRyaNF5Bz9fsC9AKwDPaZB0mhIZOlDeQw9uTcAJsx4T0xeJscE7mNBl/NGxsWKeEe4eE9BfgEA5sWKe0xRffcEy3NF/PzpTTcGfzCvWPwnZTNpHUfG5OCpVUfDe4NFxUNpjOCp+PfpO3lB5+w9fTNpx3lIeqfpVHhRl38vKjGITINGPOzmeQwvx3CDHsznO3lvx1cGfdz9uUlmTszDeKnve1w9fTZB43NrajGIzuCIjKY9JQNpuTC9JBbeJmznxsfnjOzDWaNGxBz9A/nve1w9fTNrKPzIA/lDWPcgKcb+KclIeKfnZQNpzOCFjT8+KcsgKcz9H4Y9w6rg3qCpA1lB5pf9HqfpTUCm0jGm/jGmzOlRy4C9A3Cq/jGIzuCIjKY9JQN2zuCIjKY9JQlBP3rg36rg3Jrg3If9HqfpTUCR5qlIeOfpe2YnNaNGx4YnZ8w9uThGy4lpeBC9TKNrKP0rlvjBy3rg36rg3mCpJRw9+PZFf+zpN/NGx+w9fTxIV3l2eBlIJB8+KcZpx3lRyJNFjuwmjKlRPPZpx3l4HOC9W/NFjKlIVTCRPPgWZtW2AWEGy3NG46rg33zRyaNGA3luJ4YnNaNGx4YnZ8w9uTNG4PcgKcb+KcY9wPcGyOfv5sC9d4YnZslGPPZpx3l4HOC9WPcEy3rg36rga4fFOKNGyJNAJscGf2YnZTwvxUlm4mhGymlpAmzWz/YnymcE7mNrV1fFZUCIlLZB74zpTBhRlXhvjKlIJQz17PZBHsnBPRzpT4CRfKNpe7YnjKhR5gCpeOlDWPwvZTwnxTNpx3lIeqfpJBbE5vYnxaNF5TlIu3lvj3CD7Pj1lvNpuOCmeOCpVHNEN/NGf+w9fTxIV3lGl3hRlXwmNPh17m8+KcZF5OzDepCpT+xnZBCvNPiEy4lpAmzWz/Yn5AlmZUlRyQNGxKYpT1htHTlmZUl4uTlvjOzDWaNGxKbFgPct/jGmZTfFeBCR5Iw9V1zt/jGmKjGmKjGITINGPPN9T1nvfBYnxTw9Z/zEPPZpx3l4HOC9WPcE5XsGyOYnjslIeOzpARCpWaNGx4YnZ8w9uTNG4PcgKcb+KcZFx7fGyPiE5snBPmxpTBz9jKCvZHZB+PZv5OzDepCpT+ZB4QZByXlvxBCDHmiRlQZpx3lR7miGJ1fFZUCIlLNGlQnuXaZDT1NpHUfG5vlITKz9ARCpWONA5/z9A1zE51zngPj1lvNF5TlIu3lvj3CD7QZB+PZv5OzDepCpT+ZB4QZ1VRlRyUiRl6rga4lpAmzWz/Yn5AlmZUlRyJNGx+w9fTxIV3l2eBlIJBNG7PZFxaYn0diIeBlIJBt9e1lDAmzEPPZFx7fGy38+KclIeKfnZQNpzOCFjT8+KcsgKcY9wPcGy4fpO3lBKLwDOTwDdtw9zTt9J4zEP3NGwINpz3CpeUfDHTlRyaNGx4YnZ8w9uTNG4PNtKJNpfTfpuHf9T4NGP3NG4jGm/jGmZdzpTBcGy4zpTBtIAdzEy38+KcZFx7fGyPiE5snBPmWpVTwnjTNpjBz9AKzEymhGymlpAmzWz/YnymcE7mNrV1fFZUCIlLZB74zpTBhRlXhvjKlIJQz17PZBHsnBPmzpTBz9jKCvZHNFf3fpPPlpeBC9T1lDTUCRyvj1lPC9AQf9A/CF4QZB+PZv5OzDepCpT+ZB4QZ1VRlRyUiRl6rga4lpAmzWz/Yn5AlmZUlRyJNGx+w9fTxIV3l2eBlIJBNG7PZFxaYn0diIeBlIJBt9e1lDAmzEPPZFx7fGy38+KclIeKfnZQNpzOCFjT8+KcsgKclIeKfnZQNFxBf9W6rg3Jrg3If9HqfpTUCR53C9ftYn3TcGy4fDT4fpP/NGxaz9TmYFg/NGxKYFedwTf3zFxaNrKPZBl/NGxKYFedw4OTY9fafGyJNGlmNG4jGm/jGITIcGy4fpOuC9ZnY9xKYGyJitKPZBlPcEy4fpOuC9ZnY9xKYGyJNGxKYpT1htHdw9TQhtHKYFedwTf3zFxa8+KcY9waNGxKYFedw4OTY9fafGyJitKPZBlPcEy4fpOuC9ZNz9TmYFgPiEy4fpO3lBKLC9A3CRKLfpOuC9ZNz9TmYFg6rg33zRPPZFf3zFxaNr7PZFxaf9uReDT4fpPPcgKcb+KcZF5aCvxUWDTkze/mfDT4fpPmnEyJNGxKYFedwTf3zFxa8+KcZF5aCvxUWDTkze/mYpe3zDOKZuKPiE5BCveQzGPPZpOTY9fafGyMNGxKYFedwTf3zFxaNGXPZFf3zFxaNG46rg33zRPPZF5aCvxUWDTkze/mYpe3zDOKZuKPiRy4fpOuC9ZNz9TmYFgPcgKcb+KcZF5aCvxUWDTkze/mfDT4fpPmnEyJNFZUf9H4cGy4lpOUfpJtYn3T9BfvY9xKYGffNGaPZFxaf9uREpe3zDOKNGXPZF5aCvxUWDTkze/mYpe3zDOKZuKPct/jGRx+YpJKCuj3bIeCZDOTY9fafGffNrKPZFxaf9uREpe3zDOK8+KcsgKcsgKcz9V1zgKcb+KcY9waNGxaz9TmYFgPiRy4fpOuC9ZNz9TmYFgPcgKcb+KcZF5aCvxUWDTkze/mYpe3zDOKZuKPiEy4fpOuC9ZNz9TmYFg6rga4lpOUfpJtYn3T9BfvY9xKYGffNrKPlIJuCIgaNGxvY9xKYGyMNGx+YpJKCuj3bIeCZDOTY9fafGffNGXPZpOTY9fafGy38+KcsgKcz9V1zgKcb+KcZF5aCvxUWDTkze/mfDT4fpPmnEyJNGxvY9xKYr/jGRx+YpJKCuj3bIeCZDOTY9fafGffNrKPZpOTY9fafr/jGmKjGmKjGmZTfFeBCRy4lpOUfpJtYn3T8+KcsgKczmeQwvx3CD7PlFZ3CmxZC9laNGx3C9l/NGxOCFgPiEymZB+PZFf3zFxaNrKPZBl/NGxaz9TmYFgPiEymZB+PZF5OzDe0YnjKNrKPzIA/lDWPcgKcb+KcY9wPcGxvY9xKYGyJitKPZBl3NGxvY9xKYGyJNGxKYpT1htHdw9TQhtHKYFedwTf3zFxa8+KcY9wPcGxaz9TmYFgPitKJNGlmcEy4Ype3zDOKNrKPZFxaYn0diIuOY97dimxaf9uREpe3zDOK8+KcY9wPcGx3C9lPitKPZBl3rg3BznxulI7PZBzQwmj+8Bl6rga4lpAKYA5Olmx1NrKPlpAKYpTQzIXaZpTdzB46rg3+lIemnDuOfpjacGlUhR3lhRPQcR44hBl/NGx+wnxaWpABfFjCZDZOlDeQw9uTZuK/NGxIY9VTxnOKct/jGRxBznjuCFgPiEymZ1/jGmjvYnxqYGyalvxBfpJ/CvfTlRPPZpz3CpeAbFxC0eKPcE4jGm/jGIjOlDWPZvjvzRlkrg33zRPPZF5OzDe0YnjKNrKJNpzOCFjTNG4jGRxBznjuCFgPiEymiFjqlIT+fG51lI0JNRlQZFxaYn0diIuOY97diI31enZ/hRf5guJEf9H5wvx3fIerCDHKz9HKhI31NR5Kbn5TiEZKznOKhD3OfIA1wvZ3lFgRiq+UlDjBYn5KiRlPhRyRnp7RNG7jGRlXlDjBYn5KNFxHlpWJNmxTbFgUYIADwnjqlIT+fGNLZByQNGZlCRNPhPKcZByUh1+O9Kj2gex59BlPhRyRnp7RNG7jGRlPgWjsx4VsWmeQgDJQfpeQfGPPZByQrgamnGfqCDxTwIA1ze+mhGlPhPKcZu+mYFxKlraUhDxUfDH/CDA4hIuOwvZUC9e4Y92QwDJdhv5uwRJ1YpJqYvfOfIWUwDARlBJICpA1YGJ1fDz/wnjahIjOwRjDznZ1Y9JQit4/0G+B8G++nGl/ZByQrgamnGfvY9xKYA+mhGlPhPKcZu+mZByQNGxvY9xKYGyQNGflZB+mNG7jGRflZDOTY9fafA+mhGlPhPKcZu+mZByQNGxaz9TmYFgPhRymnGl/ZByQrgamnGf1lIjlZB+mNG7jGRflZBlPhRy4lpAKYA5Olmx19Bf4YnZQw9uTZuKPhRymhBlPhRy4zIT/zWe7fA/+nEyQNGflZB+mNG7jGRflZvAuw9V3fFTlZB+mNG7jGRflZDO3zDOlZB+mNG7jGRflZv5/f9f3Cmj+w9fTnGl/ZByQrgamnGfafFx+8RXUfvfvhIA4CDZThIjUCEJ1YpJqYvfOfIWUzpJvCIVUw9gUzpJvCIVUw9gQwDf3iuyVnu5BCDxseIeBlDTUCqutYpJqYvfOfIepCpA1YA+mhGlPhPKcZu+mC9JDY9elZB+mNG7jGRflZBlPhRy4lpAKYA5Olmx19Bf4YnZQw9uTZuKPhRymhBlPhRy4zIT/zWe7fA/+nEyQNGflZBlPhPKcZB46NGXUz9H4N2ArNpjUzpWmNG7PNTVQNRyQrgamNGXUneKLZByQNGZlCRNPhPKcZ1+UlDjBYn5KiRlPhRyRnp7RNG7jGRlXCIJ1wvZ3lFgLZ1/jGRxBznjuCFgPhqKPZ1VUwI3TwvgPwDVOlvj3zrKRwDV1Y9gkxrNvgKxGj4WdgWWDxGKV09jIht4DgqPdjrgKjtW1jtg+0ry+NR5qCDxTwIA1ztKRYFxKlraUhDxUfDH/CDA4hIuOwvZUC9e4Y92QwDJdhv5uwRJ1YpJqYvfOfIWUwDARlBJICpA1YGJ1fDz/wnjahIjOwRjDznZ1Y9JQit4/0G+B8G++NR5vY9xKYrKRZB74fDT4fpPQZBNPYpe3zDOKiENmhRxaz9TmYFgQZBNLZByQNGZlCRNPhPKcZByXlpABw9KPCIAdztKRC9JDY9WRNFzOCFeTiENmNG7PZpTdzByQNGlRNGXLZByQNGZlCRNPhPKcZByXlpABw9KPCIAdztKRlneOCpTKbENPfIA/f9WJNIO3zDPRNGXLZByQNGZlCRNPhPKcZByXz9uRz9gPlvZqiENmNG7PZpTdzByQNGlRNFAuw9V3fF4JNIO3zDPRNF5/f9f3Cmj+w9fTiEZafFx+8RXUfvfvhIA4CDZThIjUCEJ1YpJqYvfOfIWUzpJvCIVUw9gUzpJvCIVUw9gQwDf3iuyVnu5BCDxseIeBlDTUCqutYpJqYvfOfIepCpA1YGNPfFT+ztKRwn5+CpTqwnx3CD7UbGu1YpJqYvfOfIWdzIVOlDPRNFf3zFxaiENmhRxvY9xKYG7mNR5az9TmYFgJNRlQZpOTY9fafG7mNq7XhDedwIe4iRlPhRyRnp7RNG7jGRlXhDJRYIeqfr7m8+KcY9wPcGx+w9fTtpT1fGyJiE5Iw9V1zE4jGRxBznjuCFgPhqKPZ1+UCIJ1wvZ3lFgLZ1/jGIZBz9AS8+KczpeIwne/frajGRxKYFedwRyJNGxKYpT1htHmznxWYFedwRP4Y9umct/jGITINGPPN9TQYeJmzngaZDA/CpJvnveBCAJICv5TCRl3NFVXNpTQYeJmzngaZDA/CpJvnveBCAJICv5TCRl3NrKJNGfizIwmNG4jGRx+YpJKCuj3bIWPiE5OlmZObEPPZvf3zFxaZByJiRy4fDT4fpP/NGfaz9TmYFgmNrKLNGxaz9TmYFgPct/jGIe/lDWjGm/jGRx3C9Amzej3bIWPiEy4fpO3lBKLzDeKE9uOzDetYn3TcGxKYFedwR46rg33zRyaNG24Y9uOzDetYn3TNG4jGmZTfFeBCR5snBPmtIXPY9uOzDWmhGymlpAmzWz/Ynymct/jGRx+YpJKCuj3bIWPiEy4fpO3lBKLY9umWDTkzEPPZpTdw9fTWDTkze/+nE+PZpTdw9fTWDTkze/VnE+PZFf3zFxahGy4Ype3zDOKNG46rg3Jrga4lIe1f9VKNrKPNqV3C9lPlvZqie+RbBxKYFedwmulNR5vY9xKYrulNm/4lpOUfpJtYn3T9BfvY9xKYGffse+RNpOTY9fafrulNm/4lpOUfpJtYn3T9Bfaz9TmYFgmnnulNR5OCFgJnGZ6ZpA/fFulNRyUiRN6rg3Jrg3BznxulI7PZFZTlve/fr/jGmKjGIzuCIjKY9JQNpTdzuJBznj3bIWaNGx1lI0/NGx4znjKhGy4fDT4fpP/NGxaz9TmYFg/NGxBzDNJ0FOpx4zpx4w/NGxVf9A/YnxHit2+0Gy3rg36rg33zRyaNGAIY9VTnDe7YnjKlBP4lvZqcE5XsGyOYnjszIT/zEP4lvZqcEy3rg36rg3TwDOUNGNPZFjBwBydNpz3CpWPCIJKNpzUf9H4hRyR8+KclIeKfnZQNpzOCFjT8+KcsgKcZFj3bIWPiE5yzDeKY9uOzDe1Yn3TcGy4lvZqNG46rg33zRyaNGx1Yn3TNrKJiE5Iw9V1zEy3rg36rg3TwDOUNGlPE9HDw9V3zG53C9AmzE7PZ1/jGmZTfFeBCR5Iw9V1zt/jGmKjGRxICvZdwngPiE51fFZKCDVUfDeBcG51f9Z1fFNaNGx1Yn3T9BfdY9uTZuK/NFjKlm5UlBPPZFj3bIeCZDu3C9WmnE+PZBXmNG4PcByVNG4Pct/jGRx3wDzuCI0PiEyRY9uOzDeqlIeOfpeIlIJdNRyQNGxICvZdwng6rg33zRyaNGAIf9HqfpTUCTJTbpT1fF0aNGx3wDzuCI0PcEy3rg36rg3TwDOUNGNPZpTqzmeQwBP3NGKPzmeQwvx3CD7PCIJKNpe7YnjKlB7PNq/jGmZTfFeBCR5Iw9V1zt/jGmKjGRx7nvZOfpTUNrKPZFf3zFxaNGXPZFj3bIeC0AK6rga4beJBwnx3CByJNGxaz9TmYFgPhBy4lDTkze/Vnt/jGRxBwnx3CByPNGyPNGyJNpu3CRPPZFOslIAKY9X/NGxHnvZOfpTUNG46rga4fnjTnvOslIAKY9XPiEyaNGx7nvZOfpTUNrKJNGxBwnx3CBy38+KcZpHTfuJvY9xKYGyPNrKPZFe1zeJ7nvZOfpTUNGyoNGxvY9xKYGyP8R5ICpJUlRPPZFj3bIeC0AKPcRy4lIAKY9XPct/jGRxQznfsYpe3zDOKNGyJNG24fnjTnvOslIAKY9XPiBy4Ype3zDOKNraPzIVUCvNaNGx1Yn3T91AfNGaPZFZOfpTUNG46rga4CIevnDVTzmgPNGyPiEy4fnjTnvOslIAKY9XPNrXP0GykNpz/CDJBcGyaNGxvY9xKYGydNGxQznfsfDT4fpPPcEyUNrNPct/jGRxQznfsfpJ+NGyPNGyJNG24fnjTnvOslIAKY9XPiBy+NraPzIVUCvNaNGPPZpOTY9fafGydNGxQznfsYpe3zDOKNG4PhByBNG46rga4C9edCvZHtIeTzGyJNGxvY9xKYGyMNGxaz9TmYFgPcRyuNG/PZFj3bIeC0AKPcRy4lDTkze/VnEyMNrWPcByV0rg7jtlD8+KcY9wPcGy4C9edCvZHtIeTzGyLNGxKYpT1htHmznxszmZTzWuTC9JBbEP3NG4Zrg36rga4CDV4tpTdYngPiEy4fpO3lBKLCexUgmTKzn0aN253CITszDeKcGfdz9uUlmTsCpTdYngmcEy38+KcZpHTfKV3C9TKNrKPZpuTC9JBbWHTz9gPcB5dz9uUlmTszDeKnve1w9fTcG46rg33zRyaNGxQznf0Y9u3fGyLNGxUCpx0Y9u3fGy3rg3yY9H3nvjTfGPPZDuTC9JBbeJ/Y9u3fGl/NGxKYpT1htHRbnxTluxUtEP4CIevtpTdYng3NG46rg3Jrga4YnjBwByJNGx3wDzuCI0aNGx1lI0Pct/jGITIcGyOZpT1lI0PcgKcb+Kcz9jaCByRNGx3wDzuCI0acE5TlmZUlR7PNq/jGmZTfFeBCR5Iw9V1zt/jGmKjGRx3zpe1fGyJNpTdw9fTwvZTwnxTfFZuz9jUCpJBcGy4fDT4fpP/NGxaz9TmYFgPct/jGITIcGy4Y9xTlvgPitKJNpzOCFjTNG4jGm/jGIeqYpXPNR53C9Amz9jBz9AKznxBf9eqCDVUlRP3NpeBlIJBhRyR8+KclIeKfnZQNpzOCFjT8+KcsgKcY9uOzDeIY9V/cGy4Y9xTlvg/Nry/Nry/NGxBzDNPct/jGITdw9fTwDJ+bnZTlDAdlpVTzGPPZpT4znjKhGy4YnjBwB+PZpHTfuJ/z9zKhGy4CIevnvxUlG+P0G+P0G+jGRxQznfsfDT4fpP/NGxQznfsYpe3zDOKhGy4lDTkze/+nE+PZFj3bIeC0eKPct/jGITINGPPY9uOzDeMlpemcGx3zpe1fG+PZpxTlvg/NGxVf9A/YnxHcEy3rg36rg3ywDOdCDgaZpxTlvg/NryDjrg38+KcsgKcz9V1zgKcb+Kcz9jaCByRNpTdw9fTYm5TzBP3NpeBlIJBhRyR8+KclIeKfnZQNpzOCFjT8+KcsgKcY9uOzDe4znjKlIJHcGy4YnjBwBy38+KcY9uOzDe4znjKlIJHcGy4Y9xTlvgPct/jGmZTfFeBCR5KlmeT8+KcsgKczmeQwvx3CD7Plv5/YnxZC9AmzEPPZFjBwB+PZFAuw9V3fF4Jj1WPcgKcb+KcY9wPcGyOzIT/zeJTbpT1fF0aNGx1lI0PcEy3NFZTfFeBCR5Iw9V1zt/jGRx+lIeIYnPPiEy4fpO3lBKLlIAQzAjKlRPPjEy38+KczpXPb+KcZFjKlRyJNGxKYpT1htHBw9H4WvxBcGyuNG46rga4zpe1f2z3Cpe1NrKPwnZBwn4aNryPit7PZFxaYn0diIuOY97diITdw9fTlu5OfpPPhRymhvyVnBlPhRy4lvxBNG7PZuXmNG7PwIA1z9HOC9WaNGx1lI0PcE+jGq2Pit7PZFxaYn0diIuOY97diITdw9fTlu5OfpPPhRymhvyBnBlPhRy4lvxBNG7PZuXmNG7PwIA1z9HOC9WaNGx1lI0PcEy38+KcsgKcfDO3CpWaNpz3CpesznO3lvx1cGy4zpe1f2z3Cpe1915fNG4PsF+PzIT/zeJTbpT1fF0aNGx4znjKxIT/znjC0eKPcEy38+KcZFj3bIWPiE5yzDeKY9uOzDe1Yn3TcGy4lvZqNG46rg33zRyaNGx1Yn3TNrKJiE5Iw9V1zEy3NFZTfFeBCR5Iw9V1zt/jGRxICvZdwngPiE51fFZKCDVUfDeBcG51f9Z1fFNaNGx1Yn3T9BfdY9uTZuK/NFjKlm5UlBPPZFj3bIeCZDu3C9WmnE+PZBXmNG4PcByVNG4Pct/jGRx3wDzuCI0PiEyRY9uOzDeqlIeOfpeIlIJdNRyQNGxICvZdwng6rg33zRyaNGAIf9HqfpTUCTJTbpT1fF0aNGx3wDzuCI0PcEy3NFZTfFeBCR5Iw9V1zt/jGRxvY9xKYA/+nEyJNpjTY9+aNGx1Yn3T915fNGXP0Ry38+KcZFf3zFxa91AfNrKPZFj3bIeC0AKPhEy4fDT4fpOC0AK6rga4CpeIfGyPNGyPiE5OlmZObEPP0GyJiRy+hGyVNrKLNGxvY9xKYA/+nEy38+KcZpT1lI0PiEy4Y9jIf9HqcGy4lvZqNG46rg33zRPPNEx3lvZqNG4PlIeKfnZQNpzOCFjT8+KczIJBz9AqYGPPZpxTlvxpY9VTlB5OlBy4Y9gJiRx4znjKNG4jGm/jGRx3zpe1fGyJNpTdw9fTwvZTwnxTfFZuz9jUCpJBcGy4fDT4fpOCZpT4nE+PZFj3bIeC0eKPct/jGITIcGy4Y9xTlvgPitKJNpzOCFjTNG4PlIeKfnZQNpzOCFjT8+KcY9uOzDeqCv5HlIe1w9u+Cpe4cGy4Y9xTlvg/NGx3lvZqhGy+hGy+hGy4CpeIfA/4Y9xfhGy+hyKcZFf3zFxa9Bx3zAK/NGx1Yn3T91AfhGy4fDT4fpOCZpT4nE+PZFj3bIeC0eKPct/jGITINGPPY9uOzDeMlpemcGx3zpe1fG+PZpxTlvg/NGxVf9A/YnxHcEy3rg36rg3ywDOdCDgaZpxTlvg/NryDjrg38+KcsgKcz9V1zgKcb+KclIeKfnZQNpzOCFjT8+KcsgKcY9uOzDe4znjKlIJHcGy4Y9xTlvgPct/jGRxKYFedw4HOC9WPiEy4fpO3lBKLC9A3CRKLY9uOzDe1WpAKYGyQNGlUfAXmNG7PwIA1z9HOC9WaNGx4znjKNG46rga4CIevWDTkzEyJNGxKYpT1htH3C9ftYn3TcGy4fDT4fpOCZpT4nE+PZFj3bIeC0eK/NGxKYpT1htHdw9TQhtHKYFedwTf3zFxahGy4fpO3lBKLC9A3CRKLfpOuC9ZNz9TmYFgPct/jGRxKYpT1htH3C9fslIe1Yn3TcGy4zpe1fG+PZFxaf9uRtIAdzE+PZpHTfuj3bIeCZvf3zFxaZuK/NGxQznftYn3T9Bfaz9TmYFgmnEy38+KcsgKcY9uOzDe4znjKlIJHcGy4YnjBwBy38+KclIeKfnZQNGx4znjKxIT/zn06rg3Jrg3If9HqfpTUCR5Rf9T/z2Tdw9fTcGy4Y9uOzDe1hGy4lpAmzE+PZFf3zFxahGy4Ype3zDOKhGy4CpAHCveKE9g/NGxVf9A/YnxHitluNG4jGm/jGIxUrg36rga4zpe1f2z3CpWPiEy4fpO3lBKLC9A3CRKLY9uOzDe1WpAKYGyQNGlUzIesZByQNGxKYpT1htHBw9H4WvxBcG4PhRymhI3+zBl6rg3Jrg3vYpT/zEPPzIT/zeJTbpT1fF0aNGx4znjKxIT/zEy3NG46rga4Y9xTlvgPiE53C9Amz9jBz9AKznxBf9eqCDVUlRPPZFf3zFxahGy4Ype3zDOKNG46rg33zRPPZpT4znjKNrKJiE5Iw9V1zEy3NFZTfFeBCR5Iw9V1zt/jGITdw9fTzIT/CGPPZpT4znjKhGy+hGy+hGy4lpAmzEKLzmZOC9erCDVUlRy38+KcZF5Ozpx3CIlPiE5qz9T/cGy4lpAmzEKLzmZOC9etYn3TNGXP0Ry38+KcZpABz9AwNrKPZpABz9AzNrKPZF5Ozpx3CIl6rga4wnZTwelPiEy4fDT4fpPPhEy4lpAmzEKLzmZOC9etYn3T8+KcZpABz9ANNrKPZpOTY9fafGydNGx+w9fThtHIlIAdzej3bIW6rg3ICvZTw9jacGy4fpO3lBKLC9A3CRKLCpAHCveKlu/aY9HKcEx/wnTUfnxZzAKdiIABz9A1NpA1NGxOlIeONG4jGm/jGITIcG5TCn5KbEPPZpTdw9fTlu/aY9HKcExOlIeOhtH3zAKPcEy3NpjUCmx3CmeT8+KcZFj3bIWPiE5yzDeKY9uOzDe1Yn3TcGy4Y9uOzDe19BO3Cmg3ZpABz92diIT4nEy38+KcY9wPcGy4lDTkzEyJitKPzIA/lDWPcE5qCDHKY9Huzt/jGRxICvZdwngPiE51fFZKCDVUfDeBcG51f9Z1fFNaNGx1Yn3T9BfdY9uTZuK/NFjKlm5UlBPPZFj3bIeCZDu3C9WmnE+PZBXmNG4PcByVNG4Pct/jGRx3wDzuCI0PiEyRY9uOzDeqlIeOfpeIlIJdNRyQNGxICvZdwng6rg33zRyaNGAIf9HqfpTUCTJTbpT1fF0aNGx3wDzuCI0PcEy3NpjUCmx3CmeT8+KcZpT1lI0PiEy4Y9jIf9HqcGy4Y9uOzDe19BO3Cmg3ZpABz92diIT4nEy38+KcY9waNG24YnjBwBy3NpjUCmx3CmeT8+KcZpjul4ABz9AwNrKPwDe3CGPPZpABz92diTPPcRy4wnZTwelPcEySNGxOlIeO9GySNGx+w9x4Y9Hm8+KcZpjul4ABz9AzNrKPwDe3CGPPZpABz92diT4PcRy4wnZTwWPPcEySNGxOlIeO9EySNGx+w9x4Y9Hm8+KcZpjul4ABz9AnNrKPwDe3CGPPZpABz92diTlPcRy4wnZTwelPcEydNrNPcRy4lpA4zpTQz1/jGRxqfnZ5lIeOEGyJNpjTY9+aNGxOlIeOhtHNNGaPZpABz9ANNG4PhEyBNGaPZF5Ozpx3CIl6rga4lvZq9GyJNry6rga4lvZq9EyJNry6rga4lvZqeByJNGx1Yn3T915f8+KcZFjBwKPPiEy4lDTkze/Vnt/jGRx4lvxwNrKPZpjul4ABz9Aw8+KcZpx1fA4PiEy4wveBgnZTwe46rga4zFjKeByJNGxqfnZ5lIeOe1/jGRx4lvxNNrKPZpjul4ABz9AN8+KcZpjUz9z5lIeONrKPZpjul4ABz9AnNGXPZpjul4ABz9AN8+KcZpjUz9zZC9lPiEy4lDTkze/+nEyUNGx1Yn3T91Af8+Kclvf3fpjacGy4lpAmzEKLY9umlu/aY9HKcExOlIeOhtH3zAKdimjqw9V3CIlPcgKcb+KcwDA1zEymlDjOCpeWCKz3fGlP8PKcb+KcY9waNGxqCDeIgnZTwEyXNGxqCDeIE9umNG4jGm/jGRx4lvxNNrKPwDe3CGPPZpx1fAlPhBy4wDJTz4TdzBy38+KcZpx1fA4Pc1KPwDe3CGPPcGy4wveBgnZTwWPPhEy4zFjKEGy3NGXP0Ry38+KcsgKcz9V1zgKcb+KcZpx1fAlPiE5qz9T/cGy4zFjKEGyMNGxqCDeIE9umNG46rga4zFjK9GySiE5qz9T/cGyaNGxqfnZ5lIeOeBydNGx4lvxnNG4PhByBNG46rg3Jrg3JNpZBz9AS8+KcwDA1zEymlDjOCpeWCKz3Cp+mNrajGm/jGITIcGy4wDJTz4ABz92PiRy4wDJTz4TdzBy3rg36rga4lvZqEGyJNpjTY9+aNGx1lIjnNGXPZpjUz9z5lIeONG46rga4lvZq9EyJNpjTY9+aNGPPZFj3bIeC0eKPhEy4lvZqEGy3NGXP0Ry38+KcsgKcz9V1zgKcb+KcZFjBwulPiE5qz9T/cGy4lvZqEGyMNGxqCDeIgnZTwEy38+KcZFjBwuPPiE5qz9T/cGyaNGx1Yn3T915fNGKPZFjBwulPcEyUNrNPct/jGmKjGmKPwmZTw9/6rg3qwnjTNGf4CKHUfAjqw9VTZBykrg36rga4lvZq9GyJNGO3Cmg3ZF5OzDWdiITdzvjCcpTQfG44wnZTwEKLY9xfhtH78+KcZFjBwu4PiEyaY9HKcEx+w9fThtH3C9f19BO3Cmg3ZpABz92diIT4nEKLbt/jGRx1lIjnNrKPZpx1fAl6rga4lvZqEGyJNGx4lvxN8+KcsE5RlIeOY1/jGmKjGITdw9fTwDJ+bnZTlDAdlpVTzGPPZpT4znjKhGy4YnjBwB+PZpx1fAP/NGx4lvxzhGy4lvZq9G+PZFjBwu4/NGx4lvxnhGy4zFjKEG+PZFjBwul/NGx1lIjNNG46rg33C9Amz9xTlvxBCv4aNGx3lvZqNG46rg3Jrg33zRPPN9Tdw9fTYm5TzBPPZpT4znjKhGy4zpe1f2z3CpW/NGxVf9A/YnxHNG4PcE5BznxulI7PzIA/lDW6rg33C9Amz9xTlvxBCv4aNGx3zpe1fGy38+KcZpxTlvxpY9VTNrKPwIA1z9HOC9WaNGx4znjKxIT/zEy38+KcZFxaf9uRtIAdzEyJNGxKYpT1htHdw9TQhtH3C9AmznjgwnxahRlUfAXmhRx4znjKxIT/zt/jGRxQznftYn3TNrKPZFxaYn0diITdzuj3bIWaNGxvY9xKYG+PZpOTY9fafG+PZFxaYn0diIuOY97dimxaf9uReDT4fpP/NGxKYpT1htHdw9TQhtHKYFedw4OTY9fafGy38+KcZFxaYn0diITdzuJBznj3bIWaNGxKYpT1htHdw9TQhtH3C9AmznjgwnxahRlUZB74zpe1f2z3CpW/NGxKYFedw4HOC9W/NGxQznftYn3T9BfvY9xKYGffhGy4CIevWDTkze/mYpe3zDOKZuKPct/jGmZTfFeBCRy4zpe1f2z3CpW6rg3Jrg3If9HqfpTUCR5mznxtlpV3f2Tdw9fTtIAdzEPPZpTdw9fTtIAdzEy3rg36rga4Y9uOzDe8w9uTNrKPwIA1z9HOC9WaZpTdw9fTtIAdzE46rg3+lIemnDuOfpjacGyRhuH+crAX0RTs9D2db42d9qyd8eu6jnuscAdOhn35hea+htTlhTJfcR44hBN/NGx3C9AmzWHOC9W/NGx1lIjZC9AmzWHOC9WPct/jGmZTfFeBCRy4lvZqE9uOzDe8w9uT91Zf8+KcsgKczmeQwvx3CD7PzDeKE9uOzDetYn3TcGy4zIT/z9HOC9WPcgKcb+KcZpz3CpeQw9uTNrKPlvxBnvZTlpVOwDWaZFxaYn0diIuOY97dimj3fpeeW4+QZBXmhG55gTjggexNhGy4zIT/z9HOC9W38+KcY9wPcG5IY9VTnDe7YnjKlBP4zIT/z9HOC9W3NGwINpT1nDz3CpWaZpz3CpeQw9uTcE5XsGy4fpO3lBKLYnjelI+aZpz3CpeQw9uTcEy3rg3BznxulI7PgpfTfpTdw9fTlDTkzEP4zIT/z9HOC9W38+KcsgKczmeQwvx3CD7PzDeKepOuC9NaNGx3C9AmzEy3rg36rga4lpAKYA5Olmx1NrKPlpAKYpTQzIXaZpTdw9fTct/jGITINGPPZF5OfpOgwnZKlu/mzpTBCIAdzEffNrKJNGP4fpO3lBKLC9A3CRKLlpVuzDTQnveBCGyQNGxKYpT1htHdw9TQhtH3C9Amznj2YnN3NGwINGxKYpT1htHmznxAbFgaZpTdw9fTcEyOitKPZvjvzRlPcgKcZFxaf9uRNrKPZF5OfpOgwnZKlu/mzpTBCIAdzEffNG7PZBJKnBlPhRy4lpAKYA5Olmx19BfRwnjTCIAdzEff8+Kcz9V1zgKcZFxaf9uRNrKPZpTdw9fT8+KclIeKfnZQNGxKYFedwq/jGmKjGIzuCIjKY9JQNpfTf2zuCpVZC9AmzEPPZFxaf9uRhGy4fFT+zEyJNGfulI+mNG4jGm/jGRx+wnxaWpABfF0PiE5+wnxaY9HICBP4fpOuC9N38+KcY9wPcGy4lpAKYA5Olmx19Bf4YnZQw9uTZuKPitKPcGxKYpT1htHdw9TQhtH+CFemY9HsfnZ/NG7PZFxaYn0diIuOY97diITdw9fTlKx3lR4PZRwPZFxaYn0diIfTf2e7fGPPZFxaf9uRNG4PNtKJNGf1fDwmNG4jGRx3C9AmzEyJNGx+wnxaWpABfFjCZDx3lIHOC9WmnE7mhBlPhR51fFZslIe+CpAqzEPPZvxsZB+PZBl/NGx+wnxaWpABfFjCZDZOlDeQw9uTZuKPct/jGIe/lDWjGRx3C9AmzEyJNGxKYFedwq/jGITINGPPZFxHlpWPitKPZv5OfpPmNG4jGRx3C9AmzEyJNGxKYpT1htHdw9TQhtH3C9AmznjgwnxaNG7PwIA1z9HOC9WaNGx3C9AmzEy38+KclIeKfnZQNGx3C9Amzt/jGmKjGIzuCIjKY9JQNpfTfAZTlDTkz9gaNGxQw9uThGy4Cv5KY9JQl1uOlmZObEP3NG4jGm/jGRxQw9uTNrKPwIA1z9HOC9WaZpHOC9W38+KcZF5OfpPPiEy4fpO3lBKLC9A3CRKLY9uOzDe1WpAKYGyQNGxQw9uT8+KcZpxTzIAuCFx1NrKPwnZBwn4argamfFT+zElPit7PZveBCGl/rgamC9A7nvf3zFxaZByJiRyVjqy/rgamC9A7nDOTY9fafGlPit7P0qg+hyKcZDZOwDdmlIJuCIgmNrKLNGl+b2zpx4zpxRl/rgamlneOCpTKbElPit7P8ty/rga38+KcZpJ+fpTUCm0PiE5OlmZObeJdznZmzEP4zpeIwne/fF0/NGxUlFx3CDH1ct/jGRxUlFx3CDH19BfRw9jSzvZUf9H4ZuKPiE5aznO4z90alFZTzuJBzn5/w9jTcGlUnq57cG7McEXmhGymZr2mhGy4Cv5KY9JQlu/mwIAqYDfBCveQzGffcE46rga4Cv5KY9JQlu/mwIAqYDfBCveQzGffNrKPlv5BY9HKzRPmZnPmhGy4Cv5KY9JQlu/mwIAqYDfBCveQzGffct/jGITINGPPz9u+fF4aZpJ+fpTUCmjCZvf3zFxaZuK3NFVXNpedlFxHcGxUlFx3CDH19Bfaz9TmYFgmnE4PcgKcb+KcCpT1fGP4fDT4fpP/NGxaz9TmYFg3NrKPZFxaYn0diIfTf2Tdw9fTWDTkzEP4lpAKYG46rga4CIevnvj3bIWPiEy4fpO3lBKLY9umWDTkzEP4fDT4fpP/NGxaz9TmYFg/NGxUlFx3CDH19BfdwnOsfDT4fpPmnE+PZpJ+fpTUCmjCZDuObAJaz9TmYFgmnE46rg3Jrg3TCFjTrg36rga4CIevnvj3bIeCZvf3zFxaZuKPiEyIZpJ+fpTUCmjCZvf3zFxaZuK6rga4CIevnvj3bIeCZDOTY9fafGffNrKPZRxUlFx3CDH19Bfaz9TmYFgmnt/jGmKjGRxQznfsfDT4fpPPiEyIZpHTfuJ1Yn3T9BfvY9xKYGff8+KcZpHTfuJaz9TmYFgPiEyIZpHTfuJ1Yn3T9Bfaz9TmYFgmnt/jGRxQznfsCIAdzEyJNGfVnBlQZpJ+fpTUCmjCZvAuw9V3fF4mnE7mnBlQZpHTfuJvY9xKYG7mbGlQZpHTfuJaz9TmYFgQZuXmhRxUlFx3CDH19BfRw9jSzvZUf9H4ZuKQZuXmhRxQw9uT8+KcZpHTfuJ+wnxaNrKPZFxaYn0diIuOY97diITdw9fTlu5OfpPPhRy4CIevnDHOC9W6rg33zRyaNGAIY9VTnDe7YnjKlBP4CIevnv5OfpP3NG4jGm/jGITINGP4fpO3lBKLzDeKxnOKcGx+wnxacEyOiEymlvfIZB4jGRxKYpT1htH3C9fslIe1Yn3TcGx+wnxahGy4CIevnv5OfpP/NGxQznfsfDT4fpP/NGxQznfsYpe3zDOKhG5aznO4z90aZpJ+fpTUCmjCZDZOwDdmlIJuCIgmnE4/NGxUlFx3CDH19BfVf9A/YnxHZuK38+KcsgKclIeKfnZQrga4Cv5KY9JQlu/mfFT+zEffNrKJNGfulI+mrgaoNGxKYpT1htHdw9TQhtH3C9AmznjelI+PhRy4CIevnDHOC9WjGqaPZpHTfuJ+wnxa8+KcsgKczmeQwvx3CD7PzDeKxnOKcGy4zIT/z9HOC9WPcgKcb+KclFZTzuJdwnxqYGPmhB7MnG7ahRa3ZGXmhGy4zIT/z9HOC9W/NGxIY9VTxnOKct/jGmZTfFeBCRy4zIT/zWe7fA/Vnt/jGmKjGIzuCIjKY9JQNF5BY9HKEpeOzpeBcGy4fpe7fGy3rg36rg3BznxulI7PNqVa0q7RhRxKznOKhRNXhDPBiRN6rg3Jrg3If9HqfpTUCR5Bw9H4WvxBcGy4CpeQzvxaNrKPZvZOCIgmhGy4C9A7NrKPjR+PZpu3CRyJNr2BNG4jGm/jGITIcGy4CpeQzvxaNrKJNGfBw9H4ZBy3NGx/z9HmfpPPiE5Bw9H4cGy4C9A7hGy4C9TQNG46rga4lvTdwRyJNGZOwIj4z9zmYpTMYDVdCIJ+lnZ1fFeDfvOHb4AGgKxAx4fNEW3ht2u8tu5xWTjWeezn9ATY0tN1jrWDj1PH0GN6rga4lvxBNrKPZBl6rg3ICvNaNGx3ity6Zp4PiGy4CpeQzvxa8Bx3cB/PcEy4lvxBNG7JNFjuwmjKlRPPZFjHC9N/NFZOCIgaNry/NFjKlIVTCRPPZFjHC9NPcEy3hGyVNG46rg3BznxulI7PZFjKlq/jGmKjGIzuCIjKY9JQNpz3Cpe8w9uTcGy4fFT+zE+PZpJ/z2HOC9WPcgKcb+KclFZTzuJdwnxqYGPmhB7MnG7ahRa3ZGXmhG5RwnjTCIAdzEP4CDV4tIAdzE4/NGxIY9VTxnOKct/jGmZTfFeBCR51f9Z1fFNaNGxKbn5ThGy+hGyVNG4PhRymnBlPhRy4fpO3lBKLlIAQzAjKlRP3NG7PZB7mNG7PZpz3CpeAbFxC0eK6rg3Jrg3If9HqfpTUCR5qYpeqYu53wBPPZpTdw9fTtIAdzEy3rg36rg33zRyaNpx3lIHOC9WaNGx3C9AmzWHOC9WPcEyQNGlUZByJiEy4fpO3lBKLC9A3CRKLY9uOzDe1enZ/NG4jGm/jGRxRwnjTCIAdzEyJNpZOlDeQw9uTcGx3C9AmzWHOC9W38+KcY9wPcG51f9Z1fFNaNGxRwnjTCIAdzE+P0G+P0Ry3NrKJNGf3nBlPcgKclIeKfnZQNGf+w9fTxIV3lGl6rg3TCFjTrg33zRyaNFjuwmjKlRPPZpZOlDeQw9uThGy+hGy1NG4PitKPZDzTnBlPcgKclIeKfnZQNGfICpA1Y2e4YnxUlRl6rg3TCFjTrg33zRyaNF5Bz9fsC9AKwDPaZBJblA/V0TushRaUZB+PZpZOlDeQw9uTcEy3rg3BznxulI7PZvj+CpTKE9uOzDWm8+KcsgKcsgKczmeQwvx3CD7PwDOTwD/acgKcb+KcY9waNG24fpO3lBKLwDOTwDdjz9uUlmT0Y9u3fGP3NG4jGRxdz9uUlmT0Y9u3fGyJNGxKYpT1htHvwnZQY9Hmt9e1lDAmzEPPnuXaN4AKfpeQfpTUCR2PEngmlB5BznAuYnZTzG5KCB5awnzTN2uTC9JBbE50Y9u3fGyVjR5jwR5UlR5aY9faznNPzIJBNFZUlpeBNFfUlI/PCDwPWpAmzWz/YnyPlpVuzDTQhRN/NGZ+w9fTxIV3lGN3NG46rg3TCFjTNGxdz9uUlmT0Y9u3fGyJNGlm8+KclIeKfnZQNGxdz9uUlmT0Y9u3fr/jGmKjGIzuCIjKY9JQNpjaz9jSt9edCvZHtpTdYngacgKcb+KcZpuTC9JBbeJ/Y9u3fGyJNGO3Cmg3lveRlvxBcG53CITszDeKcGfdz9uUlmTsCpTdYngmcE+P0G+Pht2Pct/jGITINGPPcGy4C9edCvZHnDV3C9TKNG2JNryPcEyIZRyaNGxdz9uUlmTsCpTdYngPiGyVjRy3NG4jGmZTfFeBCR5Iw9V1zt/jGIe/lDWPlIeKfnZQNFxBf9W6rg3Jrg3If9HqfpTUCR5qYpeqYujOzIejCDxTcG4jGm/jGITINGPPcG5mznxKbn5TcG53CITszDeKcGymlDAIzeJdCDxTZBy3NG4PitKPZvjKlITQzBlPcEy3rg36rg33zRyaNFjKlmxUCpJvznNaNpTQYeJmzngaNGf1w9zTnDuUzpWmNG4PcEyJiEymCDzIZB5XsGyaY9HKc9TQYeJmzngaNGf1w9zTnDuUzpWmNG4PitKJNryPcE5BznxulI7PzIA/lDW6rg3TCFjTNFZTfFeBCR5KlmeT8+KcsgKcz9V1zgKclIeKfnZQNGORCDJ/c9TQYeJmzngaNGf1w9zTnDuUzpWmNG46rg3Jrg3If9HqfpTUCR5qYpeqYu5TlIu3fGPPZpx3lRy3rg36rg33zRPPz9u+fF4aNGx4YnNPcEy3NGx4YnNPiEy4fpO3lBKLC9A3CRKLlpVuzDTQnv5OfpP6rga4lpeBC9TKY9JQlByJN25IY9VTlpeBCn0aNGx4YnNPct/jGRx+znZdYnx3CDH1NrKPzpeqCDjKcGy4lpeBC9TKY9JQlBy38+KclIeKfnZQNFjuwmjKlRPPZF5TlIu3fpTUCm0/NFjKlIVTCRPPZF5TlIu3fpTUCm0PcEK1hG51fFZ/z97aNGx+znZdYnx3CDH1NG4Pct/jGmKjGIzuCIjKY9JQNFZTC9JDzWx3lRPPZpx3l4HOC9WPcgKcb+KcY9waNGA3luJ4YnNaZpx3l4HOC9W3NG4jGmZTfFeBCR5KlmeT8+KcZpxTCpeKzeJ4YnNPiE5UlpeQzpTBcGx4YnZ8w9uTct/jGIjazpTBcGy4zpTBtIAdzEy38+KcfDO3CpWPcGy4zpe/znxTNrKPlIeOzpx3lRP4zpe/znxTnDx3lR4PcgKcb+KcY9waNpT1nDx3lRP4zpe/znxTcEyIZRyaNGx4z9VTfpWPNtKJNGNQNRy3NGwINGPPZpxTCpeKzEyOitKPNR7QNRy3NG4jGRx4z9VszpTBnDHOC9e19uKPiEy4zpe/znxT8+KcY9waNpT1nDz3CpWaZpxTCpeKzE4PcgKcZpxTCAJIY9VTnDHOC9e19uKPiEy4zpe/znxT8+KcsgKcY9wPcG53luJ4YnNaNqyUNR4PcgKcZpxTCAJ4YnZsCIAdznjCnEyJNGN+hBN6rg33zRyaNGATCn5KbEP4zpe/nDz3CpesCIAdzn03NG4jGm/jGIzUlIeOwDPPcGx4z9VszIT/zeJQw9uTlB5OlBy4zpe/znxTnvxaYnjszIT/zE4jGmeQCpTQYBPPZpx3l4HOC9WPhRy4zpe/znxTnvxaYnjszIT/zEy38+KcsgKcY9wPcGyOz9u+fF4aZpxTCAJ4YnZsCIAdzn03NG4jGm/jGIzUlIeOwDPPcGx4z9VszpTBnDHOC9e1NpA1NGx4z9VTfpesfpO3luJ4YnN3rga4fpO3lBKLlIedCvzTxpTBcGy4zpTBtIAdzEyQNGx4z9VTfpesfpO3luJ4YnNPhRlUZBy38+KcsgKcwDVUlDe4YnNaNGx4z9VTfpeszpTBNG46rg33zRPPlIu4YnNaZpx3l4HOC9W3NG4jGmZTfFeBCR5KlmeT8+Kcz9V1zgKclIeKfnZQNpzOCFjT8+KcsgKczmeQwvx3CD7PzDeKE9uOzDeelI+aNGxIY9VTCIAdzEy3rg36rg33zRyaNGxKYpT1htH3lueBCGP4zIT/z9HOC9W3NG4jGmZTfFeBCRy4zIT/z9HOC9W6rg3TCFjTrg3BznxulI7PZFxaYn0diIuOY97dim5/f9f3CTJulI+PhRy4fpO3lBKLC9A3CRKLY9uOzDe1xpTBNG7PZBXmNG7PZpz3CpeQw9uT8+KcsgKczmeQwvx3CD7PYnjelI+aNGxulI+PcgKcb+KclIeKfnZQNpeBz9f3cGZbYFxKlr3lhu+U9BK+htTOhn3lhTJfcB7MZGN/NFxBY9KaNGxulI+PcE46rg3Jrg3If9HqfpTUCR5qYpeqYKTdw9fTcGy4Y9uOzDe8w9uTNG4jGm/jGRx3C9AmzWHOC9WPiE5RwnjTCIAdzEPPZpTdw9fTtIAdzEy38+KcY9wPcGA+lIemnDuOfpjacGlUhR3lhROMlpl3sGOMlpemcn+azDTIcn+alpHmcn+alvfIcEgUYEl/NGx3C9AmzWHOC9W/NGxdcE4jGm/jGIeqYpXPZ1V1fFZUCIlLZB74Y9uOzDe8w9uThRlXhvjKlIJQz17PhEyXlvxBCDHmiRlPhR5snBPmxnZBCvNmhGymlpAmzWz/YnymcEyQNGlXhvjKlIJQz17kNGlPhR5snBPmevZUCIlPzIT/zE5Kbn5TZB+PZv5OzDepCpT+ZB4PhRymipZBNGXLZ1/jGmZTfFeBCR5Iw9V1zt/jGmKjGmZTfFeBCR5KlmeT8+KcsgKczmeQwvx3CD7PwDOTwDdWw9Z/zEPPZFxOwIVTtIAdzE+PZpz3z9V4lBy3rg36rg3mCpJRw9+PZFf+zpN6rga4lvA/NrKPNTjNtulPgKJ0eWu8WB5pW4JjNp56ZFxOwIVTtIAdznuPNq/jGRxqCDVuC9H1NrKPZFf+zpNdiIfTfAJBznjuCFx1cGx1l9+/N2AEW4AznK238+KcY9wPcGy4wDJ/f9uQlByJitKPzIA/lDWPcgKcb+Kcz9jaCByRipx3fqH6ZFf+zpNdiIVOlvxsznZBCvZJipZBNGXLnpHtWW+kNF/4fv54wRKLCpA1fAJVf9eBbnKXhDx3fqHlCRN6rg3BznxulI7PzIA/lDW6rg3Jrga4znO3lvx1xITTCpx1NrKPwnZBwn4act/jGIzUlIeOwDPPcGy4wDJ/f9uQlB5OlBy4wDJ/f9uQNG4jGRxTbpT1fFjpY9e/zFjCnEyJNGxqCDVuC9HCZKz3z9V4ZuK6rg3ICvZTw9jaNGPPZpz3z9V4lB5OlBy4zITTCpgPit7PZF5BCvyPcgKcb+KcY9waNGA3CTJOlmZObEPPZpz3z9V4hGy4znO3lvx1xITTCpx1NG4PcEyjGRxvlpxRhtHVf9eBbEPPN4A0e2eENAx5g4VANp56ZFxOwIVTtIAdznuPN2A2xG5PbBxIY9e/zFuPNF/4lFZUlFKRNG46rg3Jrg3Jrg3If9HqfpTUCR5qlIeOfpeWw9Z/zEPPZFxOwIVTtIAdzE+PZpz3z9V4lBy3rg36rg3mCpJRw9+PZFf+zpN6rg33zRPPZFf+zpNdiIfTfAJDwnNaNGZtE2JnNAx5g4VAWB50EWdANGlRhRxKw9Z/zWHOC9WQNRlRNG4PNtKPZFxOwIVTtIAdzEy3rg36rga4wDJ/f9uQlByJNGlm8+KczIJBz9AqYGPPZpz3z9V4lB5OlBy4zITTCpgJiRx+lIJ+NG4jGm/jGITIcGy4wDJ/f9uQlByOiEymZBy3NGxqCDVuC9H1NG7JNGl/NGl6rga4wDJ/f9uQlByQiEymwGlQZpz3z9V4hRfPNGlQZF5BCvyQZBl6rg3Jrga4lvA/NrKPN4jExWAWxE5WgWZ0xEyRNG7PZFxOwIVTtIAdzEyQNGNPcGNQZpjUCFedCm0QNR46Nq/jGRxvlpxRhtHVf9eBbEPPZFjVCGy38+KcsgKcsgKczmeQwvx3CD7PCIADY9fOfpTUC4ZOlRPPZF5OzDWPiEymZB+PZpTdzu5TlT5OzDWPiEymZB+PZFxHlpWPiEymlpAmzWz/YnymhGy4w9xgwnZOCEyJNGlmhGy4zDA/CpeBbEyJNryPcgKcb+KczDVUwIA/NGxvlpxR8+KcY9waNGO3Cmg3ZF5OzDWPiGyVNG4PZF5OzDWPiEyV8+KcZpjUf9HKtmedwIeBlByJNrl6rga4lvA/NrKPZFxaYn0dimjVC2TdzKV3lvgaNGfqCveQfGl/NGxKbn5ThGy4zDA/CpeBbEy38+KcZpjUf9HKE9umNrKPZFf+zpNdiIfTfAJDwnNaNGx1l9+Pct/jGmjTfFxHlpWaNGxqCveQf2TdzB+PZDTQfpemznNmct/jGmjTfFxHlpWaNGx3C9fgznZgw9fThGymY9HKz9fTlRl38+KcY9waNGx3C9fgznZgw9fTNr+P0Ey3rga4Y9umWpeBWpAmzEyJNGPPZpjUf9HKE9umNr7P0Gy3NrXPZpjUf9HKE9umNraP0t/jGRxqCveQfA5OzDe1NrKPwDe3CGPPZpjUf9HKE9umNGXPZpTdzu5TlT5OzDWPct/jGITIcGy4lpAmzEyLNGxqCveQfA5OzDe1NG4PZF5OzDWPiEy4wDJuCmxgw9fTl1/jGITIcGy4lpAmzEyLNr2PcEy4CpeIfGyJNGxKYpT1htHdw9TQhtHafpu/htHQwnz3zDAKY9JQtpTQYBPPZBz/fr/ICFg6ZB+PZ12mNG+PZpA4WpABw9KPcEyQNGlICIZ1lr/mNG7PZFxaYn0diIuOY97diIOKC9+diIHOfITmwnx3CDH0Y9HScGymZIVK8Bl/NGPPZF5OzDWPhEyVNG4PhGy4w9xgwnZOCEy3NG7PZBzQwmj+8Bl6rg3TCFjTNGx/z9zKNrKPZBl6rg33zRPPZF5OzDWPiGy4wDJuCmxgw9fTlBy3NGxBY9fafGyJNGlICIZ1lr/mNG7PZFxaYn0diIuOY97diIOKC9+diIHOfITmwnx3CDH0Y9HScGymZIfK8Bl/NGPPZF5OzDWPcByVNG4PhGy4w9xgwnZOCEy3NG7PZBzQwmj+8BlPhRy4fpO3lBKLC9A3CRKLYFxdCGKLCIADY9fOfpTUC4V3CI/aNGlIzvg6ZIfK8Bl/NGxqCveQfA5OzDe1NG+PZpA4WpABw9KPct/jGIe/lDWPZFZ3zDOKNrKPZBl6rg33zRPPZF5OzDWPcB5ICpJUlRPPZpjUf9HKtmedwIeBlByUNrNPcEyLNGxqCveQfA5OzDe1NG4PZpu3Cme1NrKPZF5OzDWPcByBNGaPzIVUCvNaNGxqCveQf2HuC9ZTlm0PhByBNG4PhEy4wDJuCmxgw9fTl1/jGIe/lDWPZpu3Cme1NrKPzIVUCvNaNGxqCveQf2HuC9ZTlm0PhByBNG46rga4lvxOlmgPiEy4lpAmzEydNGxdY9Hul1/jGITIcGy4lvxOlmgPiGyVNG4PZFjKwnZKNrKP0t/jGRxRwnNPiEymZ1/jGITIcGy4wDJuCmxgw9fTlByLNr2PcgKczIJBcGy4YEyJNGx1fpABfr/4YEyXNGx1fpABfGySNGxqCveQf2HuC9ZTlm06Zp4ScBy3rg36rg33zRPPZp4PiRy4wDJuCmxgw9fTlBy3NpZBz9AS8+KcY9waNGxRwnNPNtKJNGlmNG4PZpZOlRyQiEymZIHRlvy6Z1/jGITIcGyaY9HKcEx3NrKJiEyaY9HKcEx+w9fTNG4PZpZOlRyQiEy4Yt/jGIe/lDWPZpZOlRyQiEy4fpO3lBKLC9A3CRKLYFxdCGKLCIADY9fOfpTUC4V3CI/aNGx3hGy4YEy/NGxOzA5OlIAdNG46rg3Jrga4wIABNrKPZpVTzmgPhRy4wIABNG7PZFZ3zDOKNG7PZBzQwmj+8BlPhRy4fpO3lBKLY9uOzDe1tDHgw9fTcG46rga4lIe1f9VKNrKPwnZBwn4argamwIABZByJiRy4wIABhyKcZv5OzDWmNrKLNGx+w9fTrga38+KclIeKfnZQNGxBznjuCFg6rg3Jrg3If9HqfpTUCR5mw9V/znZHEmedl2V3lvgaNGxmw9V/znZHE9gPcgKcb+KczDVUwIA/NGxvlpxR8+KcZpfOCpVTlmT0YnjKNrKPZBl6rga4lvA/NrKPNTjAt2ereG5PY9xPhG5PCIAdz9yPxTZitE5PNR74fpO3lBKLC9A3CRKLfpARCpeszDA/nDHOC9WQNIyPtuZ2xeNPgT4PwpHOC9ePN2AtgBN6rga4zDA/CpeBY9e1NrKPZFf+zpNdiIfTfAJBznjuCFx1cGy4lvA/hG55WTZ59eJ5NG46rg33zRPPwDJuCmgaNGxmw9V/znZ3zn0PcEyLNryPcgKczIJBz9AqYGPPZpfOCpVTlITTlB5OlBy4zDA/CpeBbEy3rg36rga4zDA/CpeBbWV3lvgPhqKPZ1VUlFx3CD7PfIA/f9WJNRlQZpfOCpVTlmTCZDT4ZuKQZBNm8+KcY9waNGO3Cmg3ZpfOCpVTlmTZzGyJitKPcpTQfG44zDA/CpeBbe/mY9gmnEy3NGxmw9V/znZHtpT1fGyQiEymNFjTCpeqfpe4iEZ1z9VTwvxTzGNm8+KcZpfOCpVTlmT0YnjKNG7JNGlLZB74zDA/CpeBbe/mCIAdzEffhRlPiGJUlFx3CD7LZByQNGZlCRN6rg3Jrga4zDA/CpeBbWV3lvgPhqKPZ1VUlFx3CD7PfIA/f9WJNqyRZ1/jGITIcGyaY9HKcExmw9V/znZHE9gPitKJNryPcEy4zDA/CpeBbWV3lvgPhqKPZB51z9VTwvxTzrKRlDe/z9jKz9gRZ1/jGRxmw9V/znZHtpT1fGyQiEymiRlQnuXaZueQlDJBfpe4ZB+PZv5OzDepCpT+ZB4QZByXhDJ+fpTUCq7mNG7PNTVQNq/jGmZTfFeBCRy4zDA/CpeBbWV3lvg6rg3Jrg3If9HqfpTUCR53C9AmznjiCT5OzDWaNG4jGm/jGRx3C9fiCT5OzDWPiE5mznxsCv5KY9JQcGymlpAmzWz/Yn5sY9umWpeBWpAmzElPct/jGITIcGyalvxBY9HmcEx3C9fiCT5OzDWPitKPZBlPcgKcb+KcZpTdzKJQWpAmzEyJNGxKYpT1htHdw9TQhtH3fpedlu5TlT5OzDeC0AuCZvzOCFeTZuK6rg3OzpxsCv5KY9JQcGymlpAmzWz/Yn5sY9umWpeBWpAmzEl/NGx3C9fiCT5OzDW/NGlmhGymCIXmNG46rg3Jrga4Y9gPiE5Bw9H4cG46rga4lIe1f9VKNrKPZ1V1z9VTwvgPlDTkztKR0ENPCIAdztKRYnxTCnjgznZgw9fTnBlPhRy4Y9gPhRymNR53zrKRYnxTCnjgznZgw9fTnBlPhRy4Y9gPhRymNR51fFT/ztKRzIJQfGu1Yn3T8qT+br/PYpe3zDOK8RyV8n578BNPCDHqYpAQzDWJNITKz9u1WpeBWpAmzEOKYpT1ct/RiRl6rg3ICvZTw9jacGy4fpO3lBKLC9A3CRKLYnxTCnjgznZgw9fTNpA1NGx3fpedlu5TlT5OzDWPcgKcb+KcZFZTlve/fGyQiEymipJ+fpTUCR5Dw9VuztKRZByQNGx3fpedlu5TlT5OzDeCZvzOCFeTZuKPhRymNRl6rga4lIe1f9VKNG7JNGPPcpTQfG44YnxTCnjgznZgw9fT9BfDw9VuzEffNrKJiEyaY9HKcEx3C9fiCT5OzDWPcEyoNGlPlDe/z9jKz9gJNmjTCpeqfpe4NRlP8RymZ1/jGRxBznjuCFgPhqKPZ17mNG7PZpTKz9u1WpeBWpAmze/mCpARz9+mnEyQNGlXhDJ+fpTUCq7m8+KcsgKcZFZTlve/fGyQiEymiGJ1z9VTwvgLZ1/jGmZTfFeBCRy4lIe1f9VK8+KcsgKczmeQwvx3CD7PlvA/E9umtpT1fGPPZFxHlpexf9eBbE+PZFxHlpe0YnjKhGy4zDA/CpeBbEyJNryPcgKcb+KczDVUwIA/NGxvlpxR8+Kclvf3fpjacGy4fFT+zWV3lvgPcgKcb+KcwDA1zEymeu5jz9x3wElkrga4lIe1f9VK9BfqCveQfGffNrKPNTjAt2ereG5rtue8eGPMcE5pW4JjNp56ZFf+zpNdim5UlvxdznxOs9yPeKOAW4WPwpuTfpAsYDeHwGyJNGfsfv5swnxKw9jaz9xszIT/zElPgWH2NGOPC9eKweJDw9Vuz9yPt2ThxEymZEHMlplmN2JENp5dznxOnvzOCFeTwG50EWdANGlThI3+z9lmN2JENp5dznxOnvzOCFeTwG50EWdANGlThIf3zRlPtuNPwpuTfpAsfIA/f9ePN2VZEKWPZBWQlvfIZB4R8+KcZFZTlve/fA/mCpT1fGffNrKPNTjAt2ereG5PlpJ1fAJ3zpyPxTZitE5PbBxvlpxRhtH+CvjKC9eKwnuPNAfNxeZANp5dznxOnDdTb9yPiEymnvf+nDAKfpAqYpe4nDz3CpWmN2A8xGyawpuTfpAsfIA/f9ePN2VZEKWPZBWQYm5mZB5iWR5PC9eKweJDw9Vuz9yPt2ThxEymZEHMlpemZB5iWR5PC9eKweJDw9Vuz9yPt2ThxEymZEHmY9wmN2JENp5dznxOnvzOCFeTwG50EWdANGlThmjvzRl3N2JEx2eEN2ZzNp5dznxOnDT4wG52xejrNGN6rg3RlIeOY1/jGIjOlDWPZKHFxDA/CpeBbElkrga4lIe1f9VK9BfqCveQfGffNrKPNTjAt2ereG5rtue8eGPMcE5pW4JjNp56ZFf+zpNdim5Bz9z3bFuQzDfslpTqfFeBznjPNAfNxeZANp5mw9V/znZHE9xPNrKPZv/4zDA/CpeBbnKmNq/jGRxBznjuCFxCZDV3lvgmnEyJNGZtxWVAgugPwF53zpy/Np5IY9VTCIAdz9y/Np54znjqlIT+fpTUCIy/Np53C9Amz9xOfpePhG5Pw9VKfpe7fpy/Np5mw9V/znZHY9xPN2zEtKKPwF/4fv54wRKLlFZTzIT7s9HmzuJ+Y9jKfnZTlDyPeKOAW4WPwpfOCpVTlmTZzpyPiEymbBxmw9V/znZHsElPtuZ2xeNPgT4PwpTdw9fTzpAKz9yPx2etgByR8+KcwmZTw9/6rg34z9zOf9VK8PKcZFZTlve/fA/mwDJuCmgmnEyJNGZtxWVAgugPgKJetTgacR4PxTZitE5PbBxKYpT1htHdw9TQhtHKw9Z/zeJ3C9fsCIAdznuPNAfNxeZANp5Kbn5TwGyJNGf3C9lmN2A8xG5PzDA/CpeBb9yPiEymbBxmw9V/znZHsElR8+KcZFZTlve/fA/mCpT1fGffNrKPNTjAt2ereG5PY9xPhG5PCIAdz9y/Np5IY9VTCIAdz9y/Np54wnxTwG5pW4JjNp56ZFxaYn0diIuOY97dimxOwIVTnDTdzuJQw9uTs9yPeKOAW4WPwFxHlpePNrKPZDTdzBlPgWH2Np5mw9V/znZHwGyJNGf6ZpfOCpVTlmTJZB5iW4xAWR5G9E5PCIAdz9yPgejrhG5PzpAKz9yPx2etgByR8+KcwmZTw9/6rg3Jrg3BznxulI7PZFZTlve/fA/4fFT+zeAuznZHnt/jGmKjGIzuCIjKY9JQNpfTf2fOCpVTlmTglIeDY9evcGy4zDA/CpeBbWT4hGy4fFT+zEyJNGf+w9fTxIV3lGlPcgKcb+KczDVUwIA/NGxvlpxR8+Kclvf3fpjacGy4fFT+zEy3rg36rg3qwnjTNGf8xKfOCpVTlm4mNraPb+KcZFjVCGyJNGZtxWVAgugPwF5OfpOPhG5PlFZTfITTfv53wDyPxTZitE5PbBxvlpxRhtH+lIeIYnOJCIfmnDfOCpVTlmTPNAfNxeZANp5mY9xPNrKPZv/4zDA/CpeBbWT4sElR8+KcZpfOCpVTlm4PiEy4fv54wRKLzDeKnvZUfBPPZFjVCG+PgeZEgeTsgEy38+KcZFjVCGyJNGZtxWVAgugPwpz3CpeQw9uTwG5pW4JjNp56ZFf+zpNdim5Bz9z3bFuQzDfslpTqfFeBznjPNAfNxeZANp5+Y9xPNrKPZv/4zDA/CpeBbe/mlFZTfITTfv53wBffsElR8+KcZpTdzKHOC9WPiEy4fv54wRKLzDeKnvzOlRPPZFjVCGy38+KcY9waNG24Y9umtIAdzEy3rg36rga4lvA/NrKPNTjAt2ereG5PzIT/z9HOC9ePN2zEtKKPwF/4fv54wRKLlFZTzIT7s9HmzuJ+Y9jKfnZTlDyPeKOAW4WPwpfOCpVTlmT3zpyPiEymbBxmw9V/znZHE9xJZB5iW4xAWR5G9E5EgWH2cG4Pt2TjEegP0EN6rga4Y9umtIAdzEyJNGxvlpxRhtHmznxsfIABcGy4lvA/NG46rg3Jrga4lIe1f9VKNrKPZFxaYn0diIuOY97dimj3fpeeW4+QZBXmNG7PZpfOCpVTlmTCZv5OfpPmnEyQNGlUfpOuC9Z1hvxaf9uRluXmNG7PZpTdzKHOC9W6rg3JNpZBz9AS8+KczpeIwne/fGykNF/jGRx1l9+PiEyRWKe0xWjWNp5IY9VTCIAdz9yPxTZitE5PbBxKYpT1htHdw9TQhtHKw9Z/zeJ3C9fsCIAdznuPNAfNxeZANp5Kbn5TwGyJNGf3C9lmN2A8xG5PzDA/CpeBb9yPiEymbBxmw9V/znZHE9xJZB5iW4xAWR5G9E5EgWH2cG4Pt2TjEegP0EN6rga4lIe1f9VKNrKPZFxaYn0diIuOY97diIzuCIjKY9JQlBKLzDeKE9uOzDeelI+aNGxvlpxRhtHmznxsfIABcGy4lvA/NG4Pct/jGmKjGmKjGmZTfFeBCRy4lIe1f9VK8+KcsgKczmeQwvx3CD7PCpJOz2VOb9JufF0acgKcb+KcZFOdCGyJNGlXivOdCG5DznZ1Y9JQiENVhqyRNrXLZByQrgami2VOb9JufF0LZ1/jGIzUlIeOwDPaNGxKYpT1htHdw9TQhtH/wnTUfnx1NpA1NGx/wnTUfngPcgKcZFOdCGyQiEy4CpAHCveKhtHOluOjtGP38+KcZFOdCGyQiEymiGJ0wnTUfnx1iRl6rg3BznxulI7PZFOdCr/jGmKjGIzuCIjKY9JQNpVUw9x5CpZuCeOdCGPPZpZUCDdZzGy3rg36rga4wIJUYByJNpHTfB5GCDJScGy4wIJUYKT4NG46rg3BznxulI7PZ1+obpu/NFzTlmj3CD7JNq2Q0GNPz9HqCDx3CIlJNTeWxRK7NqXLZByQNGxRCDJShtHOCpZuCEKLwnjwtW+act/jGmKjGIzuCIjKY9JQNFjOfIe5CpZuCeOjtGPPZpZUCDdZzGy3rg36rga4wIJUYByJNpHTfB5GCDJScGy4wIJUYKT4NG46rga4wIJUYBKLw9VRf9Kdim5OlmjTxmZUCeOjtGPPfnZ/zpeqCDxTcGy4nu5iWuxCZvOdCGffNG4Pct/jGIzUlIeOwDPaNGxRCDJShtHOCpZuCEKLlpAmzn0Pwn0PZF5OzDWPcgKcb+KcY9wPcGx+w9fThtHdCDx3zITTzGyJiEymfFZuzEl3rg36rg3uCmjTfGPPZpHTfu5OzDWPct/jGmeQlDeKcGy4Y9uOzDe1NG46rg3ICvZTw9jaNGPPZF5OzDWdiITdzv0Pwn0PZpTdzBy3rga4Y9uOzDe19uKPiEy4fpO3lBKLzDeKxme/C2Tdw9fTcGy4wIJUYBKLw9VRf9KdiITdw9fTlu/4Y9umhtH3zAKdimxaf9uRNG46rga4CIevWpAmzEyJNGxKYpT1htHRf9T/z2Tdw9fTcGy4Y9uOzDe1hGy4lpAmzE+PZpZUCD/diIA/wmedhtH+w9fTeDT4fpP/NGxRCDJShtHOCpZuCEKLlpAmzWOTY9fafG+PZF5OzDWdimxTCn5/wnxTNG46rg33zRPPZpHTfu5OzDWPcgKcb+KcZpA4zA5OzDWPiE5QznlPWpAmzEPPZFxaYn0diIuOY97diITdw9fTlueBCGyQNGxQznfgw9fThGy4lpAmzEKLY9g/NGlmNG46rg33zRPPZFxaYn0diIjaz9jSWpTqcGy4wIJUYBKLlpAmznjCcpTQfG44lpAmzEKLY9xfhtH3C9AmzEy3NrKJNGfICpA1Y2e4YnxUlRlPcgKcb+KcZpJ/zA5OzDWPiEyPZFxaYn0diIuOY97dim5/f9f3CTJ+wnxaNG7PZFxaYn0diIuOY97diITdw9fTlKx3lRyQNGlUZByQNpZOlDeQw9uTcGy4wIJUYBKLlpAmznjCcpTQfG44lpAmzEKLY9xfhtH3C9AmzEy38+KcgFeQCpTQYBPPZpJ/zA5OzDWPct/jGITIcGy4fpO3lBKLzDeKxnOKcGy4CDV4WpAmzEy3NG2JNGZ1fDwRNG4jGm/jGRxKYFedwRyJNGxKYpT1htHdw9TQhtH+CFemY9HslpAKYGyQNGxKYpT1htHdw9TQhtH3C9Amznj2YnNPhRymhvxsZByQNpZOlDeQw9uTcGy4wIJUYBKLlpAmznjCcpTQfG44lpAmzEKLY9xfhtH3C9AmzEy38+KcgFeQCpTQYBPPZFxaf9uRNG46rg3Jrg3Jrga4wIJUYBKLlpAmznjCcpTQfG44lpAmzEKLY9xfNrKPZpA4zA5OzDW6rg3Jrg3Jrg3Jrga4wIJUYBKLlDADzEP38+KcsgKczmeQwvx3CD7PCnTAlmZUl4OOCIx/znNaNGxTlmZ8CB+PZpeBlTjKlR+PZpeBl4z3CpW/NGxTlmZ0Y9HTNG4jGm/jGITIcG51fFZslIe+CpAqzEPPZuVlZB+PZBXmhG54YnZQw9uTcGy4znZBxIT/zEy3NG4PNtKJNFjKlTJBzn5/w9jTcGymnA+mhGymhBl/NAfgnu50eWfZtTJ2EeNPhRymhBlPhRy4fpO3lBKLC9A3CRKLlpVuzDTQnDx3lRy3NG4PlIeKfnZQNFxBf9W6rg31fDTKwDPPcGxTlmZ8CB4jGm/jGIjOlDWPxeJAWTZiWqajGIjOlDWPxeJeWKeEnKeEW4JE8PKcb+KcZFx7fGyJNAJscGymipNLxIAKw9+PznZBCvNXhDNL8RymhRxTlmZtfFNPhRymNpJQNpV3CIWPZByQNGxTlmZ0Y9HTNG7PZB53CR5IY9VTNGlPhRy4znZBxIT/zEy38+Kcz9jaCBy4fpO3lBKLznZBCvZjznj1w9fTcGy4fFOKNG46rg3Jrg3RlIeOY1/jGIjOlDWPxeJngeZ8EWHF8PKcwDA1zE5AnuetxeZseKAEt4T8x1ajGm/jGRxKbFgPiE5snBPPZ1VRiTfOlIH3CIlXhDNL8RymhRxTlmZtfFNPhRymNpJQNpV3CIWPZByQNGxTlmZ0Y9HTNG7PZB53CR5IY9VTNGlPhRy4znZBxIT/zEy38+Kcz9jaCBy4fpO3lBKLznZBCvZjznj1w9fTcGy4fFOKNG46rg3Jrg3RlIeOY1/jGIxTzIAuCFgkrg36rga4fFOKNrKPnuXaNGlXwqHeCIdQCvfQNpeBlIJBNFxHlpWXhDNL8RymhRxTlmZtfFNPhRymNpJQNpV3CIWPZByQNGxTlmZ0Y9HTNG7PZB53CR5IY9VTNGlPhRy4znZBxIT/zEy38+Kcz9jaCBy4fpO3lBKLznZBCvZjznj1w9fTcGy4fFOKNG46rg3Jrg3RlIeOY1/jGmKjGmZTfFeBCR5KlmeT8+KcsgKczmeQwvx3CD7PznZBCvZjznj1w9fTcGy4C9e1lDAmzEy3rg36rg3BznxulI7PZ1V4YnwPwDVOlv0JNmfBwnyRiqV4YnwPwDVOlv0JNIeBlIJBNR53zrKRznZBCvNRiqV+iRlPhRy4C9e1lDAmzE7PZ1+Ulr7XhDx3fq7XhDx3fq7mNG7PNTVQNq/jGmKjGIzuCIjKY9JQNFfOlIH3CIfjznj1w9fTcGy4C9e1lDAmzEy3rg36rg3BznxulI7PZ1V4YnwPwDVOlv0JNmfBwnyRiqV4YnwPwDVOlv0JNme+zpAKz9gPzIA4zENPY9gJNIuTlvjOzDWRiqV+iRlPhRy4C9e1lDAmzEyQNGlXhvyLiGJ4YnwLiGJ4YnwLZByQNGZlCRN6rg3Jrg3If9HqfpTUCR53C9fnlITKzexTbFgaNGx3C9AmzWz3CpW/NGxKznOKhGy4lvxHCpWPiE5OlmZObEPmCpeIfGlJiqy/NGfKCvymit7+hGymzIJQf2zOC9T/bElJiRfNz9VDznx3wD2mhGymzIJQfAj3bIWmit7VjG+PZDjUCpJBZ1KLZ1y+0ry+0Gl3hGy4lIeQw9uTNrKPzIA/lDWPcgKcb+KczDVUwIA/NGx+w9fTxIV3lr/jGRx+wnxaNrKPlpAKYpTQzIXaZpTdw9fTxIT/zE46rg3/YnjKcGx3C9Amzef3zFxahGy4Y9uOzDeNz9TmYFg3NrKPZFj3bIWPiEy4fpO3lBKLzDeKE9uOzDetYn3TcGx3C9AmzWz3CpW38+KcZFxHlpWPiE51fFZslIe+CpAqzEPmY9uOzDWUZB+PZBl/NFjKlmxUCpJvznNaZFj3bIeCZDu3C9WmnE438+KcZpTdw9fTwvZTwnxTNrKPZDTdw9fTwvZTwnxTzmZUCElQZFxHlpW6rga4Y9uOzDWPiEy4Y9uOzDeqlIeOfpWaZpTdw9fTxIT/zE46rg33zRyaNF5Bz9fsC9AKwDPaZBJCNuKMcG7QcEPQhR4ahR73hBl/NGx1fFT/ze/mwDJ/CvNmnE+PZpK3NG4jGm/jGRxBNrKPYpe7zpeqcGxd91Afct/jGRxmNrKPYpe7zpeqcGxd91Zfct/jGRxRNrKPYpe7zpeqcGxd91jfct/jGmKjGIe/lDWjGm/jGRxBNrKP0FOpxq/4zByJNr57x4w6ZpNPiEy+b2zp8+KcsgKcZFxTbFgPiE5afpu/nDeQfpTKbeJ4z9jUzpWalvxBYn51CpA1Ype1cGxKznOKcE+PxWHWnKjite55eG+PZueWxRK7ZB46rg33C9Amz9zKfpe7fGP4Y9uOzDW/NGx1fFT/ze/mzIJQfAj3bIWmnEyMNryQj1W/Nry/NGx1fFT/ze/mCpeIfGffhGy4lvxHCpeCZvxUlGffNG/PZFjKb9VT9BfICDHKWDTkzEffNGaP0G7vjE+PY9uOzDeqCDVUlIA/CpJqwnxTcGx3C9AmzE+PZFN/NGxmhGy4wR4/NA55xKept2TgnKxZWR7mhDzUCmx1hBlQZFjKb9VT9BfICDHKxIAdY9VHZuKQZBHKfpwmhGy4fpe7fG46rg33zRyaZFZTCIAdzE4jGm/jGIxUNF/jGRxQznf8w9uTNrKPZF5OfpOCZDx3lIHOC9WmnE7mhBlQZF5OfpOCZDz3CpeQw9uTZuKQNGxKYpT1htHBw9H4WvxBcr23NG7PZB7mNG7PZF5OfpOCZDe7fpeQlDTUCRff8+KcsE5vYpT/zEyaNpz3CpesznO3lvx1cGxQznf8w9uTcEy38+KcwDJ+bEP4Y9uOzDepY9VThGy4CIevtIAdzE46rga4Y9uOzDepY9VTNrKPZpHTfKHOC9W6rg3Jrg3TCFjTrg36rga4Y9uOzDeGw9jSfnyPiEy4Y9uOzDepY9VThRlQwIASZ1/jGITINGPOzIT/zeJTbpT1fF0aZpTdw9fTgIAqYve+cE4jGmZTCIAdzEP4Y9uOzDepY9VThGy4Y9uOzDeGw9jSfny38+KcsgKcZpTdw9fTfvZ3fpWPiEymY9uOzDWmhRxKbn5T8+KcZpTdw9fTfvZ3fpWaZpTdw9fThGy4Y9uOzDepY9VThGyH0G46rg33zRyaNFjuwmjKlRORwnjTCIAdzEP4Y9uOzDepY9VTcE+P0G+P0R4PNtKPZv3sZBy3rg36rga4fpOuC9Z8w9uTNrKPZF5OfpOCZDx3lIHOC9WmnE7mhBlQNGfKnBlQwIA1z9HOC9WaZpTdw9fTxIT/zE46rga4CIevWDTkzEyJNGxKYpT1htH3C9ftYn3TcGy4Y9uOzDenY9xKYG+PZpTdw9fTEpe3zDOKhGy4lpAmzWz/Ynydimxaf9uReDT4fpP/NGx+w9fTxIV3lGKLfpOuC9ZNz9TmYFgPct/jGRxKYpT1htH3C9fslIe1Yn3TcGy4Y9uOzDepY9VThGy4fpOuC9Z8w9uThGy4CIevWDTkze/mfDT4fpPmnE+PZpHTfuj3bIeCZDOTY9fafGffNG46rg3Jrg3BznxulI7PZpTdw9fTxIT/zt/jGmKjGIzuCIjKY9JQNpuWCKZHfpe1cGx1Yn3TcgKcb+KcZp/PiE5OlmZObEPjGRlmNrKLNr2/rgamgRlPit7P0E+jGRfhZByJiRyV0rNKhyKcZKKmNrKLNr2+jrPuj1w/rgamxBlPit7P0tyv01lK0tPBjG+jGRfWZByJiRyV0r4Hjt2VjqNvj1lDrga38+KcY9wPcG5+lIemnDuOfpjacGlUcAdlzA+QnE/3nF0McAdGEKuFeAuXceVvcRJ3ZB+PZFj3bIW/NGxdcEy3rg3BznxulI7Pcpz/CDAKcExd91AfNGaPZpdClvxBfpJulF5TlRP4Ce/BnETf8+Kcz9V1zgKclIeKfnZQNGx1Yn3T8+KcsgKczmeQwvx3CD7PwmTKznjWCKKaZFj3bIW/NGxuCITKlByJNGfjZB+PZF5Bz9j3lDTUCRyJNry3rg36rga4YByJNpABlIAHcyKcZBlPit7P0E+jGRfGZByJiRyVhyKcZK/mNrKLNr2+0qg/rgamtElPit7P0tyK8rWvjR+jGRfFZByJiRyV0rl1j1gV8rNKhyKcZugmNrKLNr2+8t4u0t2D0qlvj1wjGR46rga4f9H3fF0PiE51fFZKCve+lpeBcGxuCITKlu/+nE46rg3BznxulI7PlIJuCIgaZFj3bIWPhBy4Yu/4f9H3fFjfhGy4lFZTwDT1Y9JQcEyQNGxuCITKl1/jGmKjGIzuCIjKY9JQNpZHfpe1epJhcGx1Yn3ThGy4f9H3fF0PiEymEBl/NGx+lIeqYnj3CD7PiEy+cgKcb+KclIeKfnZQNpZHfpe1epJjcGx1Yn3ThGy4f9H3fF0/NGx+lIeqYnj3CD738+KcsgKczmeQwvx3CD7PzDeKnDzBz9ejz9uUlm4acgKcb+KclIeKfnZQNGxKYpT1htHdepJGbnxTlBPPY9H3nDfTfGPmC9edCvZHnDV3C9TKZB4PcEydNpuTC9JBbeJmznxsfnjOzDWact/jGmKjGmKjGP== |
|
|
|
|
|
|
|
|
Posted: Sun Apr 03, 2011 2:44 am |
|
|
johnburn |
Advanced user |
|
|
Joined: Jan 14, 2011 |
Posts: 199 |
Location: Malaysia |
|
|
|
|
|
|
Code: | <?php
if ( preg_match('#'.basename(__FILE__).'#', $_SERVER['PHP_SELF']) ) { die('You are not allowed to call this page directly.');}
if (!function_exists('memory_get_usage')) :
function memory_get_usage( $real_usage = false )
{
return false;
}
endif;
class Functions
{
var $main;
function Functions()
{
}
function createDir( $dirName, $permit = 0777 )
{
global $wpdb, $pageFlipError;
$dir = substr( $dirName, strlen( ABSPATH ) );
if ( !is_dir( $dirName ) )
{
if ( !wp_mkdir_p( $dirName ) )
{
$txt = __('Directory', 'pageFlip').' <strong>'.$dir.'</strong> '.__("didn't exist. Please create directory with permission 777 manually!", 'pageFlip').'<br />';
$pageFlipError = $pageFlipError . $this->errorMessage( $txt );
return false;
}
}
if ( !is_writeable( $dirName ) || !is_readable( $dirName ) )
{
$txt = __('Directory', 'pageFlip').' <strong>'.$dir.'</strong> '.__('is not writeable! Please set 777 permission.', 'pageFlip').'<br />';
$pageFlipError = $pageFlipError . $this->errorMessage( $txt );
return false;
}
if ( $this->checkSafeMode() && fileowner ( $dirName ) !== getmyuid () )
{
rmdir( $dirName );
$txt = __('Please create ', 'pageFlip').' <strong>'.$dir.'</strong> '.__('directory with permission 777 manually.', 'pageFlip').'<br />';
$pageFlipError = $pageFlipError . $this->errorMessage( $txt );
return false;
}
return true;
}
function imgSize( $width, $height, $thumbWidth = '', $thumbHeight = '' )
{
if( $thumbWidth === '' ) $thumbWidth = $this->main->thumbWidth;
if( $thumbHeight === '' ) $thumbHeight = $this->main->thumbHeight;
if( $width > $thumbWidth )
{
$photoSize['width'] = $thumbWidth;
$photoSize['height'] = round( $height * $thumbWidth / $width );
if( $photoSize['height'] > $thumbHeight )
{
$photoSize['width'] = round( $photoSize['width'] * $thumbHeight / $photoSize['height'] );
$photoSize['height'] = $thumbHeight;
}
}
else
{
if( $height > $thumbHeight )
{
$photoSize['height'] = $thumbHeight;
$photoSize['width'] = round( $width * $photoSize['height'] / $height );
}
else
{
$photoSize['width'] = $width;
$photoSize['height'] = $height;
}
}
return $photoSize;
}
function printImg( $img, $alt = '', $width = '', $height = '', $pageList = false )
{
if ($width === '') $width = $this->main->thumbWidth;
if ($height === '') $height = $this->main->thumbHeight;
if ($img == '')
return ' ;;';
$pathParts = pathinfo($img);
preg_match('/.*\.(.*)$/', $pathParts['basename'], $fileExt);
$result = '';
switch (strtolower( $fileExt[1] ))
{
case 'swf':
if( $pageList == false )
$result = '<script src="'.$this->main->jsUrl.'AC_RunActiveContent.js" type="text/javascript"></script>' . "\n" .
'<script type="text/javascript">' . "\n" .
' //<![CDATA[' . "\n" .
' AC_FL_RunContent( ' .
'\'codebase\',' .
'\'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0\',' .
'\'width\',' .
'\'' . $width . '\',' .
'\'height\',' .
'\'' . $height . '\',' .
'\'src\',' .
'\'' . $pathParts['dirname'] . '/' . $fileExt[0] . '\',' .
'\'quality\',' .
'\'high\',' .
'\'pluginspage\',' .
'\'http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash\',' .
'\'movie\',' .
'\'' . $pathParts['dirname'] . '/' . $fileExt[0] . '\'' .
'); //end AC code' . "\n" .
' //]]>' . "\n" .
'</script>' . "\n" .
'<noscript>';
$result .= '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="'.$width.'" height="'.$height.'">' . "\n" .
' <param name="movie" value="' . $img . '" />' . "\n" .
' <param name="quality" value="high" />' . "\n" .
' <embed src="' . $img . '" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'"></embed>' . "\n" .
'</object>';
if ($pageList == false)
$result .= '</noscript>';
break;
default:
$thumb = $this->getThumb($img);
if ( !ini_get('allow_url_fopen') || ini_get('allow_url_fopen') == 'Off' )
$photoSize = array( 'width' => $width, 'height' => $height );
else
{
$imageSize = $this->getImageSize($thumb);
if ( !$imageSize )
return __('No image', 'pageFlip');
$photoSize = $this->imgSize( $imageSize[0], $imageSize[1], $width, $height );
}
$result = "<img src=\"{$thumb}\" width=\"{$photoSize['width']}\" height=\"{$photoSize['height']}\" alt=\"{$alt}\" />";
}
return $result;
}
function img_resize( $src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100 )
{
if ( !file_exists($src) || !is_file($src) )
{
echo " $src - file not found. ";
return false;
}
$size = @getimagesize( $src );
if ( $size === false )
{
echo ' Invalid image. ';
return false;
}
$format = strtolower( substr( $size['mime'], strpos( $size['mime'], '/' ) + 1 ) );
$icfunc = "imagecreatefrom" . $format;
if ( !function_exists( $icfunc ) )
{
echo " $icfunc() - function not exists. ";
return false;
}
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min( $x_ratio, $y_ratio );
$use_x_ratio = ( $x_ratio == $ratio );
$new_width = $use_x_ratio ? $width : floor( $size[0] * $ratio );
$new_height = !$use_x_ratio ? $height : floor( $size[1] * $ratio );
$new_left = $use_x_ratio ? 0 : floor( ( $width - $new_width ) / 2 );
$new_top = !$use_x_ratio ? 0 : floor( ( $height - $new_height ) / 2 );
$memoryNeed = $width * $height * 5 + $size[0] * $size[1] * 5 + 1048576;
if ( $memoryNeed > $this->get_freeMemory() )
{
$oldLimit = $this->mToBytes( @ini_get('memory_limit') );
$newLimit = $memoryNeed + memory_get_usage();
if ( $newLimit > $oldLimit )
@ini_set( 'memory_limit', $this->bytesToM($newLimit) );
}
$isrc = $icfunc( $src );
if( !$isrc )
{
echo " $icfunc() error. ";
return false;
}
$idest = imagecreatetruecolor( $width, $height );
if( $idest === false )
{
echo " imagecreatetruecolor() error. ";
return false;
}
imagefill( $idest, 0, 0, $rgb );
imagecopyresampled( $idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1] );
if ( imagejpeg($idest, $dest, $quality) )
{
@chmod($dest, 0644);
}
else
{
echo " imagejpeg() error. ";
return false;
}
imagedestroy( $isrc );
imagedestroy( $idest );
return true;
}
function splitImage( $src, $quality=75 )
{
if ( !file_exists( $src ) ) return false;
$prefix = $this->randStr( 5 );
do {
$str = $this->randStr( 5 );
$destFiles = array( 0 => $this->main->imagesPath . '/p1_' . $str . '_' . basename( $src ),
1 => $this->main->imagesPath . '/p2_' . $str . '_' . basename( $src ) );
}
while( file_exists( $destFiles[0] ) || file_exists( $destFiles[1] ) );
$size = @getimagesize( $src );
if ( $size === false ) return false;
$format = strtolower( substr( $size['mime'], strpos( $size['mime'], '/' ) + 1 ) );
$icfunc = "imagecreatefrom" . $format;
if ( !function_exists( $icfunc ) ) return false;
$width[0] = ceil( $size[0] / 2 );
$width[1] = $size[0] - $width[0];
$left = array( 0 => 0, 1 => $width[0] );
$isrc = $icfunc( $src );
if( !$isrc ) return false;
foreach( $destFiles as $id=>$dest )
{
$idest = imagecreatetruecolor( $width[$id], $size[1] );
if( $idest === false ) return false;
imagecopyresampled( $idest, $isrc, 0, 0, $left[$id], 0,
$width[$id], $size[1], $width[$id], $size[1] );
if ( imagejpeg($idest, $dest, $quality) )
{
@chmod($dest, 0644);
}
else
{
return false;
}
imagedestroy( $idest );
$thumbName = $this->main->imagesPath . '/t_' . basename( $dest );
$newSize = $this->imgSize( $width[$id], $size[1], $this->main->thumbWidth, $this->main->thumbHeight );
$this->img_resize( $dest, $thumbName, $newSize['width'], $newSize['height'] );
}
imagedestroy( $isrc );
return $destFiles;
}
function buildImage( $images, $page, $width, $height, $layoutId, $quality=75 )
{
do
{
$destFile = $this->main->imagesPath . '/fe_' . $this->randStr() . '.jpg';
}
while( file_exists( $destFile ) );
$idest = imagecreatetruecolor( $width, $height );
if( $idest === false ) return false;
imagefill( $idest, 0, 0, $page->frameColor );
$padding = ceil( $page->frameSize / 2 );
$areaX = $areaY = $padding;
$areaW = $width - $page->frameSize;
$areaH = $height - $page->frameSize;
foreach( $this->main->layouts[(int)$layoutId]->areas as $area )
{
if( empty( $images[(int)$area->id] ) ) continue;
$size = @getimagesize( $images[(int)$area->id] );
if ( $size === false ) continue;
$format = strtolower( substr( $size['mime'], strpos( $size['mime'], '/' ) + 1 ) );
$icfunc = "imagecreatefrom" . $format;
if ( !function_exists( $icfunc ) ) continue;
$isrc = $icfunc( $images[(int)$area->id] );
if( !$isrc ) continue;
$curAreaX = ceil( $area->X * $areaW ) + $areaX + $padding;
$curAreaY = ceil( $area->Y * $areaH ) + $areaY + $padding;
$curAreaW = ceil( $area->W * $areaW ) - 2 * $padding;
$curAreaH = ceil( $area->H * $areaH ) - 2 * $padding;
$srcX = 0;
$srcY = 0;
$srcW = $size[0];
$srcH = $size[1];
$dstX = $curAreaX;
$dstY = $curAreaY;
$dstW = $curAreaW;
$dstH = $curAreaH;
$coefArea = $curAreaW / $curAreaH;
$coefImg = $size[0] / $size[1];
switch( $page->imgs[(int)$area->id]->scaling )
{
case 'scaleToFit' :
{
if( $coefArea < $coefImg )
{
$dstH = ceil( $dstW / $coefImg );
$dstY += ceil( ( $curAreaH - $dstH ) / 2 );
}
else
{
$dstW = ceil( $dstH * $coefImg );
$dstX += ceil( ( $curAreaW - $dstW ) / 2 );
}
} break;
case 'scaleToFill' :
{
if( $coefArea > $coefImg )
{
$srcH = ceil( $srcW / $coefArea );
$srcY = ceil( ( $size[1] - $srcH ) / 2 );
}
else
{
$srcW = ceil( $srcH * $coefArea );
$srcX = ceil( ( $size[0] - $srcW ) / 2 );
}
} break;
case 'doNotScale' :
{
$srcX = (int)$page->imgs[(int)$area->id]->x;
$srcY = (int)$page->imgs[(int)$area->id]->y;
$srcW = $dstW;
$srcH = $dstH;
} break;
}
imagecopyresampled( $idest, $isrc, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH );
imagedestroy( $isrc );
}
if( !imagejpeg( $idest, $destFile, $quality ) ) return false;
imagedestroy( $idest );
$destFile = basename( $destFile );
$thumbName = $this->main->imagesPath.'/t_'.$destFile;
$newSize = $this->imgSize( $width, $height, $this->main->thumbWidth, $this->main->thumbHeight );
$this->img_resize( $this->main->imagesPath.'/'.$destFile, $thumbName, $newSize['width'], $newSize['height'] );
return $destFile;
}
function getSplitImageName( $imageName )
{
$imageName = basename($imageName);
preg_match( "/^p(1|2)_[a-zA-Z0-9]{5}_([a-zA-Z0-9\._]*)$/", $imageName, $srcImageName );
return $srcImageName[2];
}
function getImageSize( $filename )
{
$filename = str_replace($this->main->siteURL.'/', ABSPATH, $filename);
if ( file_exists($filename) && is_file($filename) || $this->isUrl($filename) )
return @getimagesize($filename);
}
function getThumb( $image )
{
$pathParts = pathinfo($image);
if ( $pathParts['dirname'] == ($this->main->plugin_url . $this->main->imagesDir) && $this->getExt($image) !== 'swf' )
$thumb = $pathParts['dirname'] . '/t_' . $pathParts['basename'];
else
$thumb = $image;
return $thumb;
}
function getFullImage( $thumb, $type = 'url' )
{
$pathParts = pathinfo($thumb);
if ( $pathParts['dirname'] == ($this->main->plugin_url . $this->main->imagesDir) && $this->getExt( $thumb ) !== 'swf' )
$image = $pathParts['dirname'].'/' . str_replace( 't_', '', $pathParts['basename'] );
else
$image = $thumb;
if ( $type == 'path' )
$image = $this->main->imagesPath . basename( $image );
return $image;
}
function getResized( $name, $options=array() )
{
$name = basename($name);
$path = $this->main->imagesPath . $name;
$defaults = array(
'type' => 'url',
'max_width' => 160,
'max_height' => 240,
'background' => '0xFFFFFF',
'quality' => 90,
);
$options = array_merge($defaults, $options);
$options['background'] = hexdec(preg_replace('/^0x(.*)/', '$1', $options['background']));
$options['background'] = sprintf('%x', $options['background']);
if ( empty($options['width']) || empty($options['height']) )
{
list($width, $height) = $this->getImageSize($path);
$new_size = $this->imgSize($width, $height, $options['max_width'], $options['max_height']);
}
else
{
$new_size['width'] = &$options['width'];
$new_size['height'] = &$options['height'];
}
$new_width = &$new_size['width'];
$new_height = &$new_size['height'];
$new_name = 'q_'.$options['quality'].'_'.$new_width.'x'.$new_height.'_'.$options['background'].'_'.$name;
$new_path = $this->main->imagesPath . $new_name;
if ( !file_exists($new_path) )
{
if ($this->getExt($path) != 'swf')
$this->img_resize($path, $new_path, $new_width, $new_height, hexdec($options['background']), $options['quality']);
}
return
$options['type'] == 'url'
? $this->main->imagesUrl . $new_name
: $new_path;
}
function getExt( $filename )
{
preg_match('/.*\.(.*)$/', $filename, $fileExt);
return $fileExt[1];
}
function printHeader( $text )
{
return "<h2>".$text."</h2>";
}
function randStr( $length = 'rand', $max = 6, $min = 12 )
{
if( $length == 'rand' ) $length = rand( $max, $min );
$symb = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$str = '';
for( $i=0;$i < $length;$i++ ) $str .= substr( $symb, rand( 0, strlen( $symb ) ), 1 );
return $str;
}
function fileName( $type, $oldName )
{
preg_match('/.*\.(.*)$/', basename($oldName), $fileExt);
return substr( $type, 0, 1 ) . '_' . $this->randStr() . '.' . $fileExt[1];
}
function checkPic( $imageName )
{
if ( dirname( $imageName ) . '/' == $this->main->imagesUrl )
{
$basename = basename($imageName);
if ( substr( $basename, 0, 2 ) == 'i_' )
return 'pageFlip';
else
if ( substr( $basename, 0, 3 ) == 'fe_' )
return 'flashEditor';
else
if ( preg_match('/^p[12]_.*/', $basename) )
return 'splitImage';
}
}
function check()
{
if( !$this->checkMemoryLimit() )
$memoryLimit = $this->warningMessage( __("Attention! It's required to have Memory Limit 16 Mb or higher for roper work of PageFlip plugin.", "pageFlip") );
else $memoryLimit = '';
return $memoryLimit;
}
function checkMemoryLimit()
{
$memory_limit = (int)substr( ini_get('memory_limit'), 0, -1 );
if ( ( $memory_limit != 0 ) && ( $memory_limit < 16 ) )
return false;
else return true;
}
function checkSafeMode()
{
if ( ( gettype( ini_get( 'safe_mode' ) ) == 'string' ) )
{
if ( strtolower( ini_get( 'safe_mode' ) ) == 'off' || (int)ini_get( 'safe_mode' ) === 0 ) return false;
else return true;
}
else
return (bool)ini_get( 'safe_mode' );
}
function checkPermit( $dir )
{
if( empty( $dir ) ) $dir = $this->main->plugin_path;
$permitions = @fileperms( $dir );
$permitions = decoct( $permitions );
return substr( $permitions, strlen( $permitions )-3, strlen( $permitions ) );
}
function removeDir( $dirName )
{
if( !is_dir($dirName) )
return true;
$delete_dir = opendir($dirName);
chdir( $dirName );
while ( $delete = readdir($delete_dir) )
{
if( is_dir($delete) && ( $delete !== "." ) && ( $delete !== ".." ) )
$del_dir_names[] = $delete;
if( is_file($delete) )
$del_file_names[] = $delete;
}
if ( is_dir("0/") )
$del_dir_names[] = "0/";
if ( !empty($del_file_names) )
{
foreach ($del_file_names as $delete_this_file)
unlink( $dirName . $delete_this_file );
}
if ( !empty($del_dir_names) )
{
foreach ($del_dir_names as $delete_this_dir)
$this->removeDir( $dirName . $delete_this_dir .'/' );
}
closedir( $delete_dir );
if( rmdir($dirName) )
return true;
else
return false;
}
function getImageUrl( $filename )
{
if ( $this->isUrl($filename) )
return $filename;
else
return $this->main->plugin_url . $this->main->imagesDir . '/' . $filename;
}
function isUrl( $url )
{
return eregi("^http:\/\/[-0-9a-z\._]+.*$", trim( $url ));
}
function checkImage( $imageName )
{
$imageName = basename( $imageName );
if (!preg_match('/.*\.(jpg)|(jpeg)|(gif)|(png)|(swf)$/i', $imageName, $m))
{
echo '<strong>'.$imageName.'</strong> - <strong>' . __('Error', 'pageFlip') . '</strong>: ' . __('Wrong file type', 'pageFlip') . '<br />';
return false;
}
return true;
}
function checkTable( $tableName, $fields )
{
global $wpdb;
$sql = "SHOW COLUMNS FROM `{$tableName}`";
$columns = $wpdb->get_results($sql, ARRAY_A);
if ( $columns === false )
{
echo "<div>{$wpdb->last_error}<br />\nSQL: {$wpdb->last_query}</div>\n";
return false;
}
$existsFields = array();
foreach ( $columns as $column )
$existsFields[] = $column['Field'];
foreach ( $fields as $field => $prop )
{
if( !in_array( $field, $existsFields ) )
$wpdb->query( "ALTER TABLE `{$tableName}` ADD `{$field}` {$prop}" );
}
}
function createTable( $tableName, $fields )
{
global $wpdb;
if( $wpdb->get_var( "SHOW TABLES LIKE '".$tableName."'" ) != $tableName )
{
$columns = '';
foreach( $fields as $field=>$prop )
{
if( $columns != '' ) $columns .= ', ';
$columns .= '`'.$field.'` '.$prop.'';
}
$sql = "CREATE TABLE " . $tableName . " (".$columns.");";
$wpdb->query( $sql );
}
}
function navigationBar( $page = '', $imgPerPage = '', $type = 'pageFlip', $adParam = '', $gallery = 0 )
{
global $wpdb;
if( (int)$page < 1 ) $page = 1;
$countNumbers = 7;
$sql = $this->sqlImgList( 'count', $type, $gallery );
$countImg = $wpdb->get_var( $sql );
settype( $countImg, 'integer');
settype( $imgPerPage, 'integer');
if( $imgPerPage < 1 )
$imgPerPage = ( $countImg > 0 ) ? $countImg : 1;
$countPages = ceil( $countImg / $imgPerPage );
if( $page > $countPages ) $page = $countPages;
if( $page > 1 ) $left = $this->main->html->navigationLink( '<<', '1' , $adParam ) . ' ;;' . $this->main->html->navigationLink( '<', ( $page - 1 ) , $adParam ) . ' ;;';
else $left = '';
if( $page < $countPages ) $right = ' ;;' . $this->main->html->navigationLink( '>', ( $page + 1 ) , $adParam ) . ' ;;' . $this->main->html->navigationLink( '>>', $countPages , $adParam );
else $right = '';
if( $page + floor( $countNumbers / 2 ) > $countPages ) $minus = $page + 2 * floor( $countNumbers / 2 ) - $countPages;
else $minus = floor( $countNumbers / 2 );
$start = $page - $minus;
if( $start < 1 ) $start = 1;
$bar = '';
if( $countPages > 1 )
for( $i = $start;$i < $start + $countNumbers;$i++ )
{
if( $i > $countPages ) break;
if( $bar !== '' ) $bar .= ' ;;';
if( (int)$i === (int)$page ) $bar .= $i;
else $bar .= $this->main->html->navigationLink( $i, $i , $adParam );
}
$bar = $left . $bar . $right . ' ;;' . $this->imagesOnPage();
$result = array(
'bar' => $bar,
'page' => $page
);
return $result;
}
function galleryJumpList( $galleryId )
{
global $wpdb;
$galleryList = '';
$sql = "SELECT `id`, `name` FROM `".$this->main->table_gal_name."` ORDER BY `name` ASC";
$galleries = $wpdb->get_results( $sql, ARRAY_A );
if( count( $galleries ) > 0 )
foreach( $galleries as $gallery )
{
$galleryList .= '<option value="'.$gallery['id'].'"';
if( (int)$galleryId === (int)$gallery['id'] ) $galleryList .= ' selected="selected"';
$galleryList .= '>'.$gallery['name'].' </option>' . "\n";
}
$galleryList .= '<option value="0"';
if( (int)$galleryId === 0 ) $galleryList .= ' selected="selected"';
$galleryList .= '>'.__('Unsorted', 'pageFlip').' </option>' . "\n";
return $galleryList;
}
function imagesOnPage( )
{
$imgOnPage = get_option( 'pageFlip_imgPerPage' );
if( (string)$imgOnPage == '' )
{
$imgOnPage = $this->main->itemsPerPage[0]['value'];
add_option( 'pageFlip_imgPerPage', $imgOnPage, '', 'no' );
}
$id = rand();
$result = '<select size="1" name="itemsPerPage_' . $id . '" id="itemsPerPage_' . $id . '" style="font-size:9px; height: 19px;" onchange="itemsPerPage(this);">';
foreach( $this->main->itemsPerPage as $itemsPerPage )
{
$result .= '<option value="' . $itemsPerPage['value'] . '"';
$result .= ( (int)$itemsPerPage['value'] === (int)$imgOnPage ) ? ' selected="selected"' : '';
$result .= '>' . $itemsPerPage['label'] . '</option>';
}
$result .= '</select>';
return $result;
}
function sqlImgList( $typeQuery, $typeList, $gallery = 0 )
{
global $wpdb;
switch( $typeList )
{
case 'WPMedia':
$result['count'] = "SELECT COUNT(*) FROM `{$wpdb->postmeta}` WHERE `meta_key` = '_wp_attached_file' AND (`meta_value` LIKE '%.jpg' OR `meta_value` LIKE '%.jpeg' OR `meta_value` LIKE '%.gif' OR `meta_value` LIKE '%.swf')";
$result['list'] = "SELECT `post_id` FROM `{$wpdb->postmeta}` WHERE `meta_key` = '_wp_attached_file' AND (`meta_value` LIKE '%.jpg' OR `meta_value` LIKE '%.jpeg' OR `meta_value` LIKE '%.gif' OR `meta_value` LIKE '%.swf') ORDER BY `meta_id` DESC ";
break;
case 'NGGallery':
$result['count'] = "SELECT COUNT(*) FROM `{$wpdb->prefix}ngg_pictures` WHERE `galleryId` = '{$gallery}'";
$result['list'] = "SELECT `pid`, `filename`, `description`, `imagedate`, `alttext`, `galleryid` FROM `{$wpdb->prefix}ngg_pictures` WHERE `galleryId` = '{$gallery}' ORDER BY `imagedate` DESC ";
break;
default:
$result['count'] = "SELECT COUNT(*) FROM `{$this->main->table_img_name}` WHERE `type` = 'img' AND `gallery` = '{$gallery}'";
$result['list'] = "SELECT `id`, `name`, `filename`, `date` FROM `{$this->main->table_img_name}` WHERE `type` = 'img' AND `gallery` = '{$gallery}' ORDER BY `name` ASC, `date` DESC ";
break;
}
return $result[$typeQuery];
}
function getGalleryPreview( $galleryId, $type = 'pageFlip' )
{
global $wpdb;
switch( $type )
{
case 'NGGallery' : {
$sql = "SELECT `path`, `previewpic` FROM `{$wpdb->prefix}ngg_gallery` WHERE `gid` = '{$galleryId}'";
$gallery = $wpdb->get_row( $sql, ARRAY_A );
$sql = "SELECT `filename` FROM `{$wpdb->prefix}ngg_pictures` WHERE `pid` = '{$gallery['previewpic']}'";
$imgName = $wpdb->get_var( $sql );
if( !$imgName )
{
$sql = "SELECT `filename` FROM `{$wpdb->prefix}ngg_pictures` WHERE `galleryid` = '{$galleryId}' ORDER BY RAND() LIMIT 1";
$imgName = $wpdb->get_var( $sql );
}
$result = $this->main->siteURL.'/' . $gallery['path'] . '/thumbs/thumbs_' . $imgName;
} break;
default : {
$sql = "SELECT `filename` FROM `{$this->main->table_img_name}` WHERE `type` = 'img' AND `gallery` = '{$galleryId}' ORDER BY RAND() LIMIT 1";
$result = $this->main->functions->getImageUrl( $wpdb->get_var( $sql ) );
}
}
return $result;
}
function loadLayouts()
{
$xml = '<?xml version="1.0" ?>' .
'<Layouts>';
foreach( $this->main->layouts as $layout )
$xml .= $layout->asXML();
$xml .= '</Layouts>';
return $xml;
}
function loadAlbumXml( $bookId )
{
$book = new Book( $bookId );
return '<?xml version="1.0" encoding="UTF-8"?>' . $book->album->asXML();
}
function saveAlbumXML( $bookId )
{
$book = new Book( $bookId );
$book->album->parseFromXML( urldecode( $_POST['xml'] ) );
foreach( $book->album->pages as $page )
{
if ($page->modified == 'true')
{
unset( $newPage );
unset( $images );
foreach ( $page->imgs as $img )
$images[] = $this->getFullImage( $book->album->images[$img->id]->thumb );
$newPage = $this->buildImage( $images, $page, $book->album->pageWidth, $book->album->pageHeight, $page->template );
if( $newPage )
{
$addPage = new Page( $this->main->imagesUrl . $newPage, $page->id, '' );
if( $this->checkPic( $book->pages[(int)$page->id]->image ) == 'flashEditor' )
{
$oldPage = $this->main->plugin_path . $this->main->imagesDir . '/' . basename( $book->pages[(int)$page->id]->image );
@unlink( $oldPage );
if( $this->getExt( $oldPage ) != "swf" )
{
$thumb = $this->main->plugin_path . $this->main->imagesDir . '/t_' . basename( $book->pages[(int)$page->id]->image );
@unlink( $thumb );
}
}
$book->pages[(int)$page->id] = $addPage;
}
}
}
$book->save();
}
function myErrorHandler( $errNo, $errStr, $errFile, $errLine )
{
if( str_replace( '\\', '/', dirname( $errFile ) ) !== str_replace( '\\', '/', WP_PLUGIN_DIR . '/' . $this->main->plugin_dir ) ) return true;
switch ($errNo)
{
case E_ERROR:
case E_USER_ERROR:
{
$txt = __( '<b>Fatal error</b>: '.$errStr . ' on line ' . $errLine . ' in file ' . $errFile );
echo $this->errorMessage( $txt );
}
break;
case E_WARNING:
case E_USER_WARNING:
{
$txt = __( '<b>Warning</b>: '.$errStr . ' on line ' . $errLine . ' in file ' . $errFile );
echo $this->errorMessage( $txt );
}
break;
default:
{
$txt = __( '<b>Unknown error type</b>: '.$errStr . ' on line ' . $errLine . ' in file ' . $errFile );
echo $this->errorMessage( $txt );
}
break;
}
return true;
}
function errorMessage( $message )
{
return '<div class="wrap"><div class="error" id="error"><p>' . $message. '</p></div></div>' . "\n";
}
function warningMessage( $message )
{
return '<div class="wrap"><div class="updated fade" id="message"><p>' . $message . '</p></div></div>' . "\n";
}
function imgWriteText( $imageFile, $text, $style = array('left'=>0, 'top'=>0, 'fontFamily'=>'Helvetica', 'fontSize'=>14, 'color'=>'000000'), $rename = false )
{
global $pageFlip;
$path = pathinfo($imageFile);
list($imageWidth, $imageHeight) = $size = $this->getImageSize($imageFile);
$type = str_replace('image/', '', strtolower($size['mime']));
$imagecreate = 'imagecreatefrom'.$type;
$image = $imagecreate($imageFile);
if ( preg_match('/[#]*(..)(..)(..)/', $style['color'], $m) )
{
$r = hexdec($m[1]);
$g = hexdec($m[2]);
$b = hexdec($m[3]);
}
else
{
$r = 0xFF;$g = 0xFF;$b = 0xFF;
}
$text = html_entity_decode(stripslashes($text), ENT_COMPAT, 'UTF-8');
imagefttext($image, $style['fontSize'] * 0.75, 0, $style['left'], $style['top'] + $style['fontSize'] * 0.75, imagecolorallocate($image, $r, $g, $b), PAGEFLIP_DIR.'/fonts/'.$style['fontFamily'].'.ttf', $text);
if ($rename)
{
do {
$newName = $path['dirname'].'/'.$path['filename']. $this->randStr(1) . '.' . $path['extension'];
} while ( file_exists($newName) );
copy($imageFile, $newName);
$imageFile = $newName;
}
else
{
$imageBackup = $imageFile.'.bak';
if (!file_exists($imageBackup))
rename($imageFile, $imageBackup);
}
$imagewrite = 'image'.$type;
$imagewrite($image, $imageFile, 90);
if ( substr(basename($imageFile), 0, 2) != 'z_' )
{
$thumbName = $path['dirname'].'/'. 't_'.basename($imageFile);
$newSize = $this->imgSize( $imageWidth, $imageHeight, $pageFlip->thumbWidth, $pageFlip->thumbHeight );
$this->img_resize( $imageFile, $thumbName, $newSize['width'], $newSize['height'] );
}
return $imageFile;
}
function mToBytes($size)
{
$k = array(
'' => 1,
'B' => 1,
'K' => 1024,
'M' => 1048576,
'G' => 1073741824,
'T' => 1099511627776
);
if ( preg_match('/([\d\.]+)\s*([BKMGT]|)\w*/i', $size, $m) )
return (float)$m[1] * $k[strtoupper($m[2])];
else
return $size;
}
function bytesToM($size, $units = 'M', $precision = 0)
{
$k = array(
'' => 1,
'B' => 1,
'K' => 1024,
'M' => 1048576,
'G' => 1073741824,
'T' => 1099511627776
);
$units = strtoupper($units[0]);
return round($size / $k[$units], $precision) . $units;
}
function bytesToK($size, $units = 'K', $precision = 0)
{
return bytesToM($size, $units, $precision);
}
function get_freeMemory()
{
return $this->mToBytes( ini_get('memory_limit') ) - memory_get_usage();
}
}
?> |
|
|
|
|
|
|
|
|
|
Posted: Sun Apr 03, 2011 3:08 am |
|
|
meedt1 |
Beginner |
|
|
Joined: Apr 03, 2011 |
Posts: 2 |
|
|
|
|
|
|
|
Thanks so much, johnburn!
Does this look malicious at all? Should I be concerned that it may have compromised my Wordpress system? Or does it even look to be hacked after all? I have since removed that plugin.
Any feedback would be greatly appreciated. You guys are amazing! |
|
|
|
|
Posted: Sun Apr 03, 2011 11:59 am |
|
|
johnburn |
Advanced user |
|
|
Joined: Jan 14, 2011 |
Posts: 199 |
Location: Malaysia |
|
|
|
|
|
|
I just take a glance at the code and As far as I'm concerned it is safe with nothing malicious in it. |
|
|
|
|
|
what is name this plugin?? |
|
Posted: Tue Apr 12, 2011 1:27 pm |
|
|
prashant |
Beginner |
|
|
Joined: Apr 03, 2011 |
Posts: 4 |
|
|
|
|
|
|
|
Any One tell me Which plugin you are hack?? which plugin u talking about?? what is name this plugin?? |
|
|
|
|
www.waraxe.us Forum Index -> PHP script decode requests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
All times are GMT
Page 1 of 1
|
|
|
Powered by phpBB © 2001-2008 phpBB Group
|
|
|
|
|
|