Update deprecated language files removal script on upgrade1.10.x
@ -1,247 +0,0 @@ |
||||
<?php |
||||
/* See license terms in /license.txt */ |
||||
|
||||
/* FIX for IE cache when using https */ |
||||
session_cache_limiter("none"); |
||||
|
||||
/** |
||||
* This is an interface between Chamilo and Videoconference application |
||||
* |
||||
|
||||
*/ |
||||
/*==== DEBUG ====*/ |
||||
$debug=0; |
||||
/*==== CONSTANTS ==== */ |
||||
define('VIDEOCONF_UPLOAD_PATH', '/videoconf'); |
||||
$presentation_extension = array('.ppt', '.odp'); |
||||
$image_extension = array ('.png', '.jpg', '.gif', '.jpeg'); |
||||
|
||||
if ($debug>0) |
||||
{ |
||||
// dump the request |
||||
$v = array_keys(get_defined_vars()); |
||||
error_log(var_export($v, true),3, '/tmp/log'); |
||||
|
||||
foreach (array_keys(get_defined_vars()) as $k) { |
||||
if ($k == 'GLOBALS') |
||||
continue; |
||||
error_log($k, 3, '/tmp/log'); |
||||
error_log(var_export($$k, true), 3, '/tmp/log'); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
/*==== Flash loose the cookie ===*/ |
||||
/* needed when using the nice upload window : |
||||
if ($_SERVER['HTTP_USER_AGENT'] == 'Shockwave Flash') { |
||||
$sid = $_REQUEST['sid']; |
||||
if ($debug>0) error_log("reusing: ".$sid); |
||||
session_id($sid); |
||||
} */ |
||||
|
||||
/*==== INCLUDE ====*/ |
||||
require_once '../inc/global.inc.php'; |
||||
api_block_anonymous_users(); |
||||
require_once ("../newscorm/openoffice_presentation.class.php"); |
||||
|
||||
/*==== Variables initialisation ====*/ |
||||
$action = $_REQUEST["action"]; //safe as only used in if()'s |
||||
$seek = array('/','%2F','..'); |
||||
$destroy = array('','',''); |
||||
$cidReq = str_replace($seek,$destroy,$_REQUEST["cidReq"]); |
||||
$cidReq = Security::remove_XSS($cidReq); |
||||
|
||||
$user_id = api_get_user_id(); |
||||
$coursePath = api_get_path(SYS_COURSE_PATH).$cidReq.'/document'; |
||||
$_course = CourseManager::get_course_information($cidReq); |
||||
$_course['path'] = $_course['directory']; |
||||
// FIXME: add_document needs this to work |
||||
$_course['dbName'] = $_course['db_name']; |
||||
|
||||
// FIXME: check if CourseManager::get_user_in_course_status return != |
||||
// COURSEMANAGER when the code is not valid |
||||
if ($debug>0) error_log($coursePath, 0); |
||||
|
||||
if ($action == "uploadgui") |
||||
{ |
||||
echo '<form enctype="multipart/form-data" action="api.php" method="POST"> |
||||
<input type="hidden" name="MAX_FILE_SIZE" value="100000000" /> |
||||
<input type="hidden" name="action" value="upload" /> |
||||
<input type="hidden" name="cidReq" value="'.$cidReq.'" /> |
||||
<input type="hidden" name="sid" value="'.Security::remove_XSS($_REQUEST["sid"]).'" /> |
||||
|
||||
'.get_lang('SelectFile').': <input name="Filedata" type="file" /><br /> |
||||
<input type="submit" value="'.get_lang('UploadFile').'" /> |
||||
</form> |
||||
'; |
||||
die(); |
||||
} |
||||
else if ($action == "upload") |
||||
{ |
||||
if ($debug >0) error_log("upload".$_FILES['Filedata']); |
||||
/*==== PERMISSION ====*/ |
||||
$permissions = CourseManager::get_user_in_course_status($user_id, $cidReq); |
||||
if ($permissions != COURSEMANAGER) |
||||
{ |
||||
if ($debug >0) error_log("Upload from videoconf not allowed !!!",0); |
||||
die('Not allowed'); // this user is not allowed to add upload documents |
||||
} |
||||
/*==== UPLOAD ====*/ |
||||
$destPath = $coursePath.VIDEOCONF_UPLOAD_PATH; |
||||
|
||||
/*==== creation of /videoconf ====*/ |
||||
if (!is_dir($destPath)) |
||||
{ |
||||
$result = create_unexisting_directory($_course,$user_id, api_get_session_id(), 0,NULL,$coursePath,VIDEOCONF_UPLOAD_PATH); |
||||
if (!$result) |
||||
{ |
||||
if ($debug>0) error_log("Can't create ".$destPath." folder",0); |
||||
} |
||||
} |
||||
|
||||
/*==== file upload ====*/ |
||||
$newPath = $_FILES['Filedata']['name']; |
||||
if($debug>0) error_log($newPath); |
||||
|
||||
/*==== extension extraction ====*/ |
||||
$file_name = (strrpos($newPath,'.')>0 ? substr($newPath, 0, strrpos($newPath,'.')) : $newPath); |
||||
$file_extension = (strrpos($newPath,'.')>0 ? substr($newPath, strrpos($newPath,'.'),10) : ''); |
||||
if($debug>0) error_log(strrpos($newPath,'.')); |
||||
if($debug>0) error_log($file_extension); |
||||
|
||||
/*==== conversion if needed ====*/ |
||||
if (!in_array(strtolower($file_extension), $image_extension)) |
||||
{ |
||||
if($debug>0) error_log("converting: ".$file_extension); |
||||
$take_slide_name = false; |
||||
$o_ppt = new OpenofficePresentation($take_slide_name); |
||||
$o_ppt -> set_slide_size(640,480); |
||||
$o_ppt -> convert_document($_FILES['Filedata'],'add_docs_to_visio'); |
||||
} |
||||
|
||||
echo '<html><body><script language="javascript">setTimeout(1000,window.close());</script></body></html>'; |
||||
} |
||||
else if ($action == "service") |
||||
{ |
||||
/*==== List files ====*/ |
||||
if ($debug>0) error_log("sending file list",0); |
||||
$subaction = $_REQUEST["subaction"]; |
||||
$is_manager = (CourseManager::get_user_in_course_status($user_id, $cidReq) == COURSEMANAGER); |
||||
if ($subaction == "list") |
||||
{ |
||||
// FIXME: check security around $_REQUEST["cwd"] |
||||
$cwd = $_REQUEST["cwd"]; |
||||
|
||||
|
||||
// treat /.. |
||||
$nParent = 0; // the number of /.. into the url |
||||
while (substr($cwd, -3, 3) == "/..") |
||||
{ |
||||
// go to parent directory |
||||
$cwd= substr($cwd, 0, -3); |
||||
if (strlen($cwd) == 0) $cwd="/"; |
||||
$nParent++; |
||||
} |
||||
for (;$nParent >0; $nParent--){ |
||||
$cwd = (strrpos($cwd,'/')>-1 ? substr($cwd, 0, strrpos($cwd,'/')) : $cwd); |
||||
} |
||||
|
||||
if (strlen($cwd) == 0) $cwd="/"; |
||||
|
||||
if (Security::check_abs_path($cwd,api_get_path(SYS_PATH))) |
||||
die(); |
||||
|
||||
// check if user can delete files. He must be manager and be inside /videoconf |
||||
$is_below_videoconf_dir = (substr($cwd,0,strlen(VIDEOCONF_UPLOAD_PATH)) == VIDEOCONF_UPLOAD_PATH); |
||||
if($debug>0) error_log('Current working directory: '.$cwd); |
||||
if($debug>0) error_log('Videoconf upload path: '.VIDEOCONF_UPLOAD_PATH); |
||||
/* $canDelete = ($canDelete && $isBellowVideoConfUploadPath); |
||||
*/ |
||||
$can_delete = ($is_manager && $is_below_videoconf_dir); |
||||
|
||||
// get files list |
||||
$files = DocumentManager::get_all_document_data($_course, $cwd, 0, NULL, false); |
||||
printf("<dokeosobject><fileListMeta></fileListMeta><fileList>"); |
||||
printf("<folders>"); |
||||
|
||||
// title filter |
||||
if (is_array($files)) foreach (array_keys($files) as $k) |
||||
{ |
||||
// converting to UTF-8 |
||||
$files[$k]['title'] = api_convert_encoding( |
||||
api_strlen($files[$k]['title']) > 32 ? |
||||
api_substr($files[$k]['title'],0, 32)."..." : |
||||
$files[$k]['title'], |
||||
'utf-8',api_get_system_encoding()); |
||||
// removing '<', '>' and '_' |
||||
$files[$k]['title'] = str_replace(array('<','>','_'),' ', $files[$k]['title']); |
||||
} |
||||
|
||||
if(is_array($files)) |
||||
{ |
||||
|
||||
foreach($files as $i) |
||||
{ |
||||
if ($i["filetype"] == "folder") |
||||
printf('<folder><path>%s</path><title>%s</title><canDelete>%s</canDelete></folder>', $i['path'],$i['title'],($can_delete?'true':'false')); |
||||
} |
||||
} |
||||
printf("</folders><files>"); |
||||
if(is_array($files)) |
||||
{ |
||||
foreach($files as $i) { |
||||
$extension = (strrpos($i['path'],'.')>0 ? substr($i['path'], strrpos($i['path'],'.'),10) : ''); |
||||
if ($i["filetype"] == "file" && in_array(strtolower($extension), $image_extension)) |
||||
printf('<file><path>%s</path><title>%s</title><canDelete>%s</canDelete></file>', $i['path'],$i['title'],($can_delete?'true':'false')); |
||||
} |
||||
} |
||||
printf("</files><ppts>"); |
||||
printf("</ppts>"); |
||||
printf("</fileList></dokeosobject>"); |
||||
} |
||||
else if ($subaction == "delete") |
||||
{ |
||||
/*==== PERMISSION ====*/ |
||||
$permissions = CourseManager::get_user_in_course_status($user_id, $cidReq); |
||||
if ($permissions != COURSEMANAGER) |
||||
{ |
||||
if ($debug > 0) error_log("Upload from videoconf not allowed !!!",0); |
||||
die(); // this user is not allowed to add upload documents |
||||
} |
||||
/*==== DELETE ====*/ |
||||
$path = str_replace('../','',$_REQUEST["path"]); |
||||
if ((substr($path,0,strlen(VIDEOCONF_UPLOAD_PATH)) != VIDEOCONF_UPLOAD_PATH)) |
||||
{ |
||||
if ($debug >0 ) error_log("Delete from videoconf for "+$path+" NOT ALLOWED",0); |
||||
die(); |
||||
} |
||||
DocumentManager::delete_document($_course, $path, $coursePath); |
||||
echo "<result>OK</result>"; // We have to return something to OpenLaszlo |
||||
} |
||||
} else if ($action == "download") { |
||||
/*==== DOWNLOAD ====*/ |
||||
//check if the document is in the database |
||||
if(!DocumentManager::get_document_id($_course,$_REQUEST['file'])) { |
||||
//file not found! |
||||
if ($debug>0) error_log("404 ".$_REQUEST["file"]); |
||||
header("HTTP/1.0 404 Not Found"); |
||||
$error404 = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">'; |
||||
$error404 .= '<html><head>'; |
||||
$error404 .= '<title>404 Not Found</title>'; |
||||
$error404 .= '</head><body>'; |
||||
$error404 .= '<h1>Not Found</h1>'; |
||||
$error404 .= '<p>The requested URL was not found on this server.</p>'; |
||||
$error404 .= '<hr>'; |
||||
$error404 .= '</body></html>'; |
||||
echo($error404); |
||||
exit; |
||||
} |
||||
$doc_url = str_replace('../','',$_REQUEST['file']); |
||||
if ($debug >0) error_log($doc_url); |
||||
$full_file_name = $coursePath.$doc_url; |
||||
if (Security::check_abs_path($full_file_name, $coursePath.'/')) { |
||||
DocumentManager::file_send_for_download($full_file_name,false); |
||||
} |
||||
exit; |
||||
} |
@ -1,76 +0,0 @@ |
||||
<?php |
||||
/* See license terms in /license.txt */ |
||||
|
||||
require_once '../inc/global.inc.php'; |
||||
|
||||
// check the request comes from our red5 server |
||||
$ips = gethostbynamel(api_get_setting('service_visio','visio_host')); |
||||
$is_our_server = false; |
||||
|
||||
// ignoring null file |
||||
if ($_FILES["file"]["size"] == 0) |
||||
exit(0); |
||||
|
||||
if(is_array($ips)) |
||||
{ |
||||
foreach($ips as $ip) |
||||
{ |
||||
//get 255 range for known server address |
||||
$split = split('.',$ip); |
||||
$ip_range_server = $split[0].'.'.$split[1].'.'.$split[2]; |
||||
//get 255 range for request source address |
||||
$split = split('.',$_SERVER['REMOTE_ADDR']); |
||||
$ip_range_request = $split[0].'.'.$split[1].'.'.$split[2]; |
||||
if($ip_range_server == $ip_range_request){$is_our_server = true;} |
||||
} |
||||
} |
||||
if($is_our_server) |
||||
{ |
||||
if(api_get_setting('service_visio','active')=='true') |
||||
{ |
||||
//check encryption key |
||||
$string1 = $_GET['course_code'].$_GET['user_id'].gmdate('Ymd').$_configuration['security_key']; |
||||
$string2 = $_GET['course_code'].$_GET['user_id'].(gmdate('Ymd')-1).$_configuration['security_key']; |
||||
if(md5($string1) == $_GET['checker'] or md5($string2) == $_GET['checker']) |
||||
{ |
||||
$course_info = api_get_course_info($_GET['course_code']); |
||||
$target = api_get_path(SYS_COURSE_PATH).$course_info['path'].'/document/audio/'; |
||||
$basename = basename( $_FILES['file']['name']); |
||||
$target = $target . $basename ; |
||||
if(!move_uploaded_file($_FILES['file']['tmp_name'], $target)) { |
||||
error_log(__FILE__.':'.__LINE__.': File upload to '.$target.' failed',0); |
||||
} else { |
||||
$id = add_document($course_info,'/audio/'.$basename,'file',filesize($target),$basename); |
||||
if($id !== false) |
||||
{ |
||||
$res = api_item_property_update($course_info,TOOL_DOCUMENT,$id,'DocumentAdded',$_GET['user_id']); |
||||
if($res === false) |
||||
{ |
||||
error_log(__FILE__.':'.__LINE__.': Something went wrong with item properties update of '.$target,0); |
||||
} |
||||
else |
||||
{//make sound invisible? |
||||
//$res = api_item_property_update($course_info,TOOL_DOCUMENT,$id,'invisible',$_GET['user_id']); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
error_log(__FILE__.':'.__LINE__.': Could not create document record for document '.$target,0); |
||||
} |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
error_log(__FILE__.':'.__LINE__.': Attempting to save file but hash check did not suceed (hacking attempt?)',0); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
error_log(__FILE__.':'.__LINE__.': Attempting to save file but videoconf is not enabled',0); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
error_log(__FILE__.':'.__LINE__.': Attempting to save file but coming from unknown source',0); |
||||
} |
||||
?> |
@ -1,86 +0,0 @@ |
||||
<?php |
||||
/* See license terms in /license.txt */ |
||||
|
||||
/* FIX for IE cache when using https */ |
||||
session_cache_limiter("none"); |
||||
|
||||
/** |
||||
* This script gives information to the videoconference scripts (in OpenLaszlo) |
||||
* to use the right URL and ports for the videoconference. |
||||
*/ |
||||
|
||||
require("../../main/inc/global.inc.php"); |
||||
require_once('get_translation.lib.php'); |
||||
api_block_anonymous_users(); |
||||
|
||||
//$confkey = "0123456789abcdef0123456789abcdef"; |
||||
$confkey = api_get_setting('service_visio','visio_pass'); |
||||
$challenge = api_generate_password(32); //generate a 32 characters-long challenge key |
||||
|
||||
printf ('<?xml version="1.0" encoding="UTF-8" ?>');
|
||||
|
||||
printf('<dokeosobject>'); |
||||
|
||||
printf('<courseobject>'); |
||||
foreach ($_SESSION['_course'] as $key => $val) |
||||
printf('<%s>%s</%s>',$key,api_utf8_encode($val),$key); |
||||
printf('</courseobject>'); |
||||
|
||||
printf('<userobject>'); |
||||
foreach ($_SESSION['_user'] as $key => $val) |
||||
if ($key != "auth_source") |
||||
{ |
||||
if (( $key == "lastName" || $key == "firstName" ) && strlen($val) == 0) |
||||
$val = get_lang('Unknown'); |
||||
printf('<%s>%s</%s>',$key,api_utf8_encode($val),$key); |
||||
} |
||||
|
||||
printf('<sid>%s</sid>', session_id()); |
||||
$isadmin =((CourseManager::get_user_in_course_status($_SESSION['_user']['user_id'], $_SESSION['_course']['sysCode']) == COURSEMANAGER)|| |
||||
api_is_platform_admin() || |
||||
api_is_course_tutor() || |
||||
api_is_course_admin() || |
||||
api_is_course_coach() ? "true" : "false"); |
||||
printf('<key>%s</key>', md5($confkey.$challenge)); |
||||
printf('<challenge>%s</challenge>', $challenge); |
||||
printf('<isUploadAllowed>%s</isUploadAllowed>', $isadmin); |
||||
printf('<canStartModerator>%s</canStartModerator>',($isadmin=='true' || $_SESSION["roomType"] == "conference")?'true':'false'); |
||||
printf('<mustStartModerator>%s</mustStartModerator>',($isadmin=='true' || $_SESSION["roomType"] == "conference")?'true':'false'); |
||||
printf('</userobject>'); |
||||
|
||||
printf('<config>'); |
||||
printf('<host>'.api_get_setting('service_visio','visio_host').'</host>'); |
||||
printf('<port>'.api_get_setting('service_visio','visio_port').'</port>'); |
||||
printf('</config>'); |
||||
|
||||
$path = preg_replace('/^([^:]*:\/\/)/','',api_get_path(WEB_PATH)); |
||||
$path = str_replace('/','_',$path); |
||||
printf('<roomConfig>'); |
||||
printf('<portal>%s</portal>', $path); |
||||
printf('<roomType>%s</roomType>', $_SESSION['roomType']); // fixme remove + |
||||
printf('</roomConfig>'); |
||||
|
||||
printf('<recorderparams>'); |
||||
|
||||
if(isset($_SESSION['oLP'])) |
||||
{ |
||||
switch ($_SESSION['whereami']) |
||||
{ |
||||
case 'lp/build' : |
||||
$student_view = 'false'; |
||||
break; |
||||
default : |
||||
$student_view = 'true'; |
||||
break; |
||||
} |
||||
$document_id = $_SESSION['oLP']->current; |
||||
} |
||||
|
||||
printf('<studentview>%s</studentview>',$student_view); |
||||
printf('<documentid>%s</documentid>',$document_id); |
||||
printf('</recorderparams>'); |
||||
printf('<languageobject>'); |
||||
printf(get_language_file_as_xml($language_interface)); |
||||
printf('</languageobject>'); |
||||
printf('</dokeosobject>'); |
||||
?> |
@ -1,95 +0,0 @@ |
||||
<?php |
||||
/* See license terms in /license.txt */ |
||||
/** |
||||
* Library for language translation from Chamilo language files to XML for videoconference |
||||
* @uses main_api.lib.php for api_get_path() |
||||
*/ |
||||
/** |
||||
* This function reads a Chamilo language file and transforms it into XML, |
||||
* then returns the XML string to the caller. |
||||
*/ |
||||
function get_language_file_as_xml($language='english') |
||||
{ |
||||
$path = api_get_path(SYS_LANG_PATH).$language.'/'; |
||||
if(!is_dir($path) or !is_readable($path)) |
||||
{ |
||||
if($language != 'english') |
||||
{ |
||||
return get_language_file_as_xml('english'); |
||||
} |
||||
else |
||||
{ |
||||
return ''; |
||||
} |
||||
} |
||||
//error_log('Analysing path '.$path); |
||||
$file = $path.'videoconf.inc.php'; |
||||
if(!is_file($file) or !is_readable($file)) |
||||
{ |
||||
if($language != 'english') |
||||
{ |
||||
return get_language_file_as_xml('english'); |
||||
} |
||||
else |
||||
{ |
||||
return ''; |
||||
} |
||||
} |
||||
|
||||
/* |
||||
$convert = true; |
||||
if(substr($language,-7,7) == 'unicode') |
||||
{//do not convert if the language ends with 'unicode', which means it's in UTF-8 |
||||
$convert=false; |
||||
} |
||||
$list = file($file); |
||||
$xml = ''; |
||||
foreach ( $list as $line ) |
||||
{ |
||||
if(substr($line,0,1)=='$') |
||||
{ |
||||
$items = array(); |
||||
$match = preg_match('/^\$([^\s]*)\s*=\s*"(.*)";$/',$line,$items); |
||||
if($match) |
||||
{ |
||||
//todo: The following conversion should only happen for old language files (encoded in ISO-8859-1). |
||||
if($convert) |
||||
{ |
||||
$string = api_convert_encoding($items[2],'UTF-8','ISO-8859-1'); |
||||
} |
||||
else |
||||
{ |
||||
$string = $items[2]; |
||||
} |
||||
$xml .= '<labelfield><labelid>'.$items[1].'</labelid><labelvalue>'.stripslashes($string).'</labelvalue></labelfield>'."\n"; |
||||
} |
||||
} |
||||
} |
||||
*/ |
||||
|
||||
//--------- |
||||
$non_utf8_encoding = api_get_non_utf8_encoding($language); |
||||
$list = file($file); |
||||
$xml = ''; |
||||
foreach ( $list as $line ) { |
||||
if(substr($line, 0, 1)=='$') { |
||||
$items = array(); |
||||
$match = preg_match('/^\$([^\s]*)\s*=\s*"(.*)";$/', $line, $items); |
||||
if($match) { |
||||
$string = $items[2]; |
||||
if (!api_is_valid_utf8($string)) { |
||||
$string = api_html_entity_decode(api_utf8_encode($string, $non_utf8_encoding), ENT_QUOTES, 'UTF-8'); |
||||
} |
||||
$xml .= '<labelfield><labelid>'.$items[1].'</labelid><labelvalue>'.stripslashes($string).'</labelvalue></labelfield>'."\n"; |
||||
} |
||||
} |
||||
} |
||||
//--------- |
||||
|
||||
if(empty($xml) && $language!='english') |
||||
{ |
||||
return get_language_file_as_xml('english'); |
||||
} |
||||
return $xml; |
||||
} |
||||
?> |
@ -1,15 +0,0 @@ |
||||
<?php |
||||
/* See license terms in /license.txt */ |
||||
/** |
||||
* Generates the HTML page containing the iframe that loads the videoconference's Flash plugin |
||||
*/ |
||||
require_once '../inc/global.inc.php'; |
||||
api_protect_course_script(); |
||||
// Only allow conference or classroom modes. Others are likely to be attacks |
||||
if ($_GET['type'] == 'conference' or $_GET['type'] == 'classroom') { |
||||
$_SESSION["roomType"] = $_GET['type']; |
||||
} |
||||
?> |
||||
<span align="center"> |
||||
<iframe frameborder="0" scrolling="no" width="100%" height="100%" src="videoconference.php"></iframe> |
||||
</span> |
Before Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 230 B |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 254 B |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 227 B |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 441 B |
Before Width: | Height: | Size: 155 B |
Before Width: | Height: | Size: 978 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 210 B |
Before Width: | Height: | Size: 332 B |
Before Width: | Height: | Size: 168 B |
Before Width: | Height: | Size: 362 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 168 B |
Before Width: | Height: | Size: 367 B |
Before Width: | Height: | Size: 332 B |
Before Width: | Height: | Size: 166 B |
Before Width: | Height: | Size: 363 B |
Before Width: | Height: | Size: 987 B |
Before Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 230 B |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 254 B |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 227 B |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |