Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Thursday, 31 January 2019

Partech is doubling the size of its African venture fund to $143 million

Partech has doubled its Africa VC fund to $143 million and opened a Nairobi office to complement its Dakar practice.

The Partech Africa Fund plans to make 20 to 25 investments across roughly 10 countries over the next several years, according to General Partner Tidjane Deme. The fund has added Ceasar Nyagha as Investment Officer for the Kenya office to expand its East Africa reach.

Partech Africa will primarily target Series A and B investments and some pre-series rounds at higher dollar amounts. “We will consider seed-funding—what we call seed-plus—tickets in the $500,000 range,” Deme told TechCrunch on a call from Dakar.

“In terms of sectors, we’re agnostic. We’ve been looking at all…sectors. We’re open to all plays; we have a strong appetite for people who are tapping into Africa’s informal economies,” he said.

African startups who want to pitch to the new fund should seek a referral. “My usual recommendation is to find someone who can introduce you to any member of the team. We receive a lot of requests…but an intro and recommendation…shortcuts one through all that,” Deme said.

Headquartered in Paris, Partech has offices in Berlin, San Francisco, Dakar, and now Nairobi. To bring the Arica fund to $143 million the VC firm tapped a number of other funds, several undisclosed corporate venture arms, and development finance institutions.

They include Averroes Finance III, the IFC, the EBRD, and African Development Bank. Deme would not list figures, but confirmed “the IFC and European Bank for Reconstruction committed the largest amounts.”

On why players like the IFC, which has its own VC shop for African startups, would place capital with Partech, Deme explained, “many have existing mandates to co-invest…others may not know this territory as well and would rather invest in another fund” with regional experience.

Partech used that experience in 2018 to make 4 investments in African startups (2 undisclosed). They led the $16 million round in South African fintech firm Yoco (covered here at TechCrunch) and a $3 million round in Nigerian B2B e-commerce platform TradeDepot.

Partech Africa joined several Africa focused funds over the last few years to mark a surge in VC for the continent’s startups. Partech announced its first raise of $70 million in early 2018 next to TLcom Capital’s $40 million, and TPG Growth’s $2 billion.

Africa focused VC firms, including those locally run and managed, have grown to 51 globally, according to recent Crunchbase research.

As for a bead on total VC spending for African tech, figures can vary widely.

By Partech’s numbers, compiled from an annual survey it does on Africa, 2017 funding for African startups reached $560 million.

Partech hasn’t released its 2018 Africa VC estimate but it will now be up  some $70 million more from its own recent raise.



from TechCrunch https://tcrn.ch/2Sez7f4
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support