Jump to content

ICPNetworks V4 ~~> Multiplataform: L2j & L2OFF


Ivan Pires

Recommended Posts

 

Pra quem quiser deixar o painel 'dark mode' fiz umas alterações no CSS: é só ir no templates/ICP_Control_Panel/styles/css/icpnetwork.css e colar o

image.png.fbb7956a77646633f633d79ca0883948.png

.card-header {
  background-color: #19212A !important;
  color: white !important;
}

.card-text {
  color: #AFB0B2 !important;
}

.card {
  background-color: #2A3744 !important;

  -webkit-box-shadow: 3px 3px 12px 1px rgba(0,0,0,0.22) !important;
  -moz-box-shadow: 3px 3px 12px 1px rgba(0,0,0,0.22) !important;
  box-shadow: 3px 3px 12px 1px rgba(0,0,0,0.22) !important;
}

.card-body {
  color: #AFB0B2 !important;
  border-color: #25303C !important;
}

.border-top, .border-bottom {
  border-color: #25303C !important;
}

.table {
  color: white !important;
  --bs-table-striped-color: white !important;
}

.table > tr > td {
  color: white !important;
}

body {
  background-color: #121923 !important;
}

.h3, .h2, .h1 {
  color: white !important;
}

.sidebar {
  background-color: #19212A !important;
}

span {
  color: white !important;
}

.nav-link {
  color: #BDBEBF !important;
}

.nav-link:not(last-child) {
  border-bottom: 1px solid #2A3744;
}

.active {
  color: #DA8425 !important;
}

.feather {
  color: #BDBEBF !important;
}

.news-author {
  color: lightgray !important;
}

.table>:not(caption)>*>* {
  border-color: #25303C !important;
}

p {
  color: white !important;
}

input {
  color: white !important;
  background-color: #19212A !important;
  border-color: #25303C !important;
}

input>.control {
  color: #6C7570 !important;
}

input>:placeholder {
  color: #6C7570 !important;
}

.input-group-text {
  color: white !important;
  background-color: #19212A !important;
  border-color: #25303C !important;
}

.form-select {
  color: #6C7570 !important;
  background-color: #19212A !important;
  border-color: #25303C !important;
}

.btn-primary {
  background-color: #19212A;
  border-color: #2C3B4A !important;
}

.border-start {
  border-color: #2C3B4A !important;
}

.form-control-dark {
  background-color: #1B1E21 !important;
}

.menu-title {
  background-color: rgb(22, 24, 27) !important;
  color: white !important;
}

.news-profile {
  border-color: #2C3B4A !important;
}

/* Style for the entire scrollbar */
::-webkit-scrollbar {
  width: 12px; /* Width of the scrollbar */
}

/* Track */
::-webkit-scrollbar-track {
  background: #191C1F; /* Background of the track */
}

/* Handle */
::-webkit-scrollbar-thumb {
  background: #0e141d; /* Color of the scrollbar handle */
  border-radius: 6px; /* Rounding the corners */
}

/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
  background: #0e141d; /* Color of the handle on hover */
}
  • Like 1

Bigs?

Link to comment
Share on other sites

  • 4 weeks later...

Em 27/01/2023 at 13:16, Voldigoad disse:

Creio q seja a ultima coisa q nao consegui solucionar ainda 

Erro fatal : PDOException não capturado: SQLSTATE[42S22]: Coluna não encontrada: 1054 Coluna desconhecida 'a.password' em 'cláusula where' em C:\xampp\htdocs\ipc\src\engine\classes\LoginServer.php:120 Rastreamento de pilha: #0 C:\xampp\htdocs\ipc\src\engine\classes\LoginServer.php(120): PDOStatement->execute(Array) #1 C:\xampp\htdocs\ipc\src\engine\classes\LoginServer.php(392): ICPNetworks\LoginServer->execute('SELECT * FROM a...', Array) #2 C:\xampp\htdocs\ipc\src\engine\post.php(135): ICPNetworks\LoginServer->passChange('76180036', '761800362594', '761800362594', 'denner') #3 C:\xampp\htdocs\ipc\src\engine\module_template.php(59): require_once('C:\\xampp\\htdocs...') #4 C:\xampp\htdocs\ipc\src\index.php(27): require_once('C:\\xampp\\htdocs...') #5 {main} lançado em  C:\xampp\htdocs\ipc\src\engine\classes\LoginServer.php  na linha  120

Segue o arquivo de correção do erro

Colocar na pasta ICP\engine\classes\

LoginServer.zip

  • Like 1

Jean Almeida - L2 Vanguard

Link to comment
Share on other sites

Resolver erro ao selecionar uma tumb no perfil do adm, substitui a partir da linha 2044 na função createThumb, até a linha 2203.
image.png.5d50055c9f3b96e4042bf09da2b56983.png

extenção suportada: gif, jpeg, jpg, png, bmp.

O código está abaixo, mas se prefirir deixei o arquivo GameServer.php para download

colocar em: engine\classes\
 

private function createThumb($imgPath, $imgName, $thumbPath, $thumbName, $thumbWidth, $ext) {
			switch ($ext) {
				case "gif":
					$source = @imagecreatefromgif($imgPath . $imgName);
					break;
				case "jpeg":
				case "jpg":
					$source = @imagecreatefromjpeg($imgPath . $imgName);
					break;
				case "png":
					$source = @imagecreatefrompng($imgPath . $imgName);
					break;
				case "bmp":
					$source = @imagecreatefrombmp($imgPath . $imgName);
					break;
				default:
					$source = false;
					break;
			}
		
			if (!$source) {
				error_log('Failed to create image from source: ' . $imgPath . $imgName);
				return false;
			}
		
			$ratio = $thumbWidth / imagesx($source);
			$height = imagesy($source) * $ratio;
			$new_image = imagecreatetruecolor($thumbWidth, $height);
		
			if ($ext === "png") {
				imagealphablending($new_image, false);
				imagesavealpha($new_image, true);
			}
		
			imagecopyresampled($new_image, $source, 0, 0, 0, 0, $thumbWidth, $height, imagesx($source), imagesy($source));
		
			switch ($ext) {
				case "gif":
					imagegif($new_image, $thumbPath . $thumbName);
					break;
				case "jpeg":
				case "jpg":
					imagejpeg($new_image, $thumbPath . $thumbName);
					break;
				case "png":
					imagepng($new_image, $thumbPath . $thumbName);
					break;
				case "bmp":
					imagebmp($new_image, $thumbPath . $thumbName);
					break;
				default:
					imagejpeg($new_image, $thumbPath . $thumbName);
					break;
			}
		
			imagedestroy($source);
			imagedestroy($new_image);
		
			return true;
		}
		
		public function editProfile($name, $email, $photo, $login, $senderPrivId) {
			if ($senderPrivId >= 6) {
				if (!empty($photo["name"])) {
					$error = null;
					$height = 1024;
					$width = 1600;
					$weight = 1000000; // 1MB
					$dimensions = getimagesize($photo["tmp_name"]);
		
					if ($dimensions) {
						$mimeType = $dimensions['mime'];
						$validTypes = [
							'image/gif' => 'gif',
							'image/jpeg' => 'jpeg',
							'image/png' => 'png',
							'image/bmp' => 'bmp'
						];
						$ext = $validTypes[$mimeType] ?? null;
		
						$error .= !$ext ? "Unsupported image type.<br>" : null;
						$error .= $dimensions[1] > $height ? "The image height must not exceed " . $height . " pixels.<br>" : null;
						$error .= $dimensions[0] > $width ? "The image width must not exceed " . $width . " pixels.<br>" : null;
						$error .= $photo["size"] > $weight ? "The image must have a maximum of " . $weight . " bytes.<br>" : null;
		
						if (empty($error)) {
							$imgName = md5(uniqid(time())) . "." . $ext;
							$imagePath = "images/profiles/" . $imgName;
							move_uploaded_file($photo["tmp_name"], $imagePath);
							$thumbCreated = $this->createThumb("images/profiles/", $imgName, "images/profiles/", $imgName, 100, $ext);
		
							if ($thumbCreated) {
								$records = $this->execute("SELECT * FROM icp_staff WHERE login = ?", [$login]);
		
								if (count($records) == 1) {
									if (!empty($records[0]["img"])) {
										if (file_exists("images/profiles/" . $records[0]["img"])) {
											unlink("images/profiles/" . $records[0]["img"]);
										}
									}
									$records2 = $this->execute("UPDATE icp_staff SET name = ?, email = ?, img = ? WHERE login = ?", [$name, $email, $imgName, $login]);
								} else {
									$records2 = $this->execute("INSERT INTO icp_staff (name, email, img, login) VALUES (?, ?, ?, ?)", [$name, $email, $imgName, $login]);
								}
		
								if ($records2) {
									return $this->resposta("Profile saved successfully.", "Success!", "success");
								} else {
									return $this->resposta("An error occurred while trying to edit the profile.", "Oops...", "error");
								}
							} else {
								return $this->resposta("Failed to create thumbnail.", "Oops...", "error");
							}
						} else {
							return $this->resposta($error, "Oops...", "error");
						}
					} else {
						return $this->resposta("This is not an image.", "Oops...", "error");
					}
				} else {
					$records = $this->execute("SELECT * FROM icp_staff WHERE login = ?", [$login]);
		
					if (count($records) == 1) {
						$records2 = $this->execute("UPDATE icp_staff SET name = ?, email = ? WHERE login = ?", [$name, $email, $login]);
					} else {
						$records2 = $this->execute("INSERT INTO icp_staff (name, email, img, login) VALUES (?, ?, ?, ?)", [$name, $email, "", $login]);
					}
		
					if ($records2) {
						return $this->resposta("Profile saved successfully.", "Success!", "success");
					} else {
						return $this->resposta("An error occurred while trying to edit the profile.", "Oops...", "error");
					}
				}
			} else {
				return $this->resposta("You are not allowed to do this.", "Oops...", "error");
			}
		}
		
		public function deleteProfile($login, $senderPrivId) {
			if ($senderPrivId >= 6) {
				$records = $this->execute("SELECT img FROM icp_staff WHERE login = ?", [$login]);
		
				if (count($records) == 1) {
					$records2 = $this->execute("DELETE FROM icp_staff WHERE login = ?", [$login]);
		
					if ($records2) {
						if (!empty($records[0]["img"])) {
							if (file_exists("images/profiles/" . $records[0]["img"])) {
								unlink("images/profiles/" . $records[0]["img"]);
							}
						}
						return $this->resposta("Profile deleted successfully.", "Success!", "success");
					}
				}
				return $this->resposta("An error occurred while trying to delete the profile.", "Oops...", "error");
			} else {
				return $this->resposta("You are not allowed to do this.", "Oops...", "error");
			}
		}

 

GameServer.zip

  • Like 3

Jean Almeida - L2 Vanguard

Link to comment
Share on other sites

  • 1 month later...

A pagina é fantastica e o melhor dos projetos web aqui na comunidade. Adorei usá-la e penso continuar. Procurei nos posts anteriores mas não encontrei...

Estou usando faz alguns meses e funciona tudo perfeito. To com um erro que os usuarios podem me mandar as screenshots, a pagina guarda e a conta admin consegue ver a imagem anexada, mas se a conta admin manda otra screenshot, a imagem armazena mas o usuario normal não ve nada anexado. Levo a semana toda procurando onde arrumar isso mas não consegui, ainda. Outtro problema, talvez menor que vou ajustar depois é aumentar o limite de tamanho pois tem gente mandando a imagem com a qualidade muito alta e não o deixa anexar.

  • Like 1
Link to comment
Share on other sites

Se tivessem mais pessoas dispostas a ajudar e com conhecimento intermediário/avançado no projeto seria melhor e mais rápido o desenvolvimento para a comunidade.

Edited by Ivan Pires
  • Like 4
  • I love it 1

 

 

 

Link to comment
Share on other sites

10 minutos atrás, Ivan Pires disse:

Se tivessem mais pessoas dispostas a ajudar e com conhecimento intermediário/avançado no projeto seria melhor e mais rápido o desenvolvimento para a comunidade.

Concordo com seu desabafo pra reclamar tem gente demais pra ajudar meu amigo! É dificil! 

  • Like 1

Thalys Augusto

Link to comment
Share on other sites

Em 16/10/2024 at 21:17, Ivan Pires disse:

Se tivessem mais pessoas dispostas a ajudar e com conhecimento intermediário/avançado no projeto seria melhor e mais rápido o desenvolvimento para a comunidade.

Não sei muito, mas fico feliz em ajudar como posso, esse projeto é top e tem futuro! É muito complicado quando é somente 1 ou duas pessoas para desenvolver tudo, demanda muito tempo e às vezes é estressante, no sentido de adaptar para várias revs, cada projeto tem sua particularidade...

 

Edited by darkdomi

Jean Almeida - L2 Vanguard

Link to comment
Share on other sites

  • 1 month later...

Alguém pode me ajudar, por favor ? Estava tudo funcionando, mas depois que entrei no game, o site começou a dar o erro abaixo. Como corrijo?


Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\engine\engine.php:13 Stack trace: #0 C:\xampp\htdocs\index.php(19): require_once() #1 {main} thrown in C:\xampp\htdocs\engine\engine.php on line 13

Link to comment
Share on other sites

  • 2 weeks later...
1 hora atrás, Syclone95 disse:

Fiz isso já, porém as informações que o chatgpt da são muito imprecisas. 

 

O problema no código parece estar na seguinte parte:

 $configsUpdate = $game->prepare("UPDATE icp_configs SET SERVER = ?"); $configs->execute([$_POST["serverVersion"]]); 

O erro acontece porque você está chamando $configs->execute() e não $configsUpdate->execute(). O $configs é o resultado de um SELECT, e não do UPDATE preparado na linha anterior. O objeto correto para executar é $configsUpdate.


Correção:

Substitua a linha:

$configs->execute([$_POST["serverVersion"]]);

Por:

$configsUpdate->execute([$_POST["serverVersion"]]); 

Código ajustado:

$configsUpdate = $game->prepare("UPDATE icp_configs SET SERVER = ?"); $configsUpdate->execute([$_POST["serverVersion"]]);

Motivo do erro:

  • O $configs é o PDOStatement retornado pelo SELECT * FROM icp_configs.
  • O $configsUpdate é o PDOStatement preparado para o UPDATE icp_configs SET SERVER = ?.
  • Chamar $configs->execute() novamente é inválido porque não corresponde ao UPDATE.

Após esse ajuste, o erro "Número de variáveis vinculadas não corresponde" não deverá mais ocorrer.

Se persistir, valide se $_POST["serverVersion"] está recebendo um valor correto.

 

Pos fiz a mesma coisa que falei, e me deu um resultado ate bem simples e facil.
Pode n ser a solução porem vc descobrir aonde e oque causa. O ideal é passar o maximo de info que puder sobre o codigo q fica mais facil descobrir o problema

Edited by SageBR
  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...
Em 26/09/2022 at 03:52, Ivan Pires disse:
 
 

Introdução

Essa é uma atualização do sistema ICPNetworks V3.

Foram corrigidos os bugs reportados e o sistema foi totalmente recodificado.

O sistema teve implementações, agora ele funciona nas versões mais recentes, como as versões do GOD, Classic e Essence.

Em razão de ele ter sido totalmente recodificado, TESTEM TUDO antes de colocar online.

Reportem aqui os bugs encontrados.

 


 

O sistema ICPNetworks V4 não é somente um site, ele é um painel administrativo onde tudo é gerenciado através dele.

Nesse novo sistema, vocês encontrarão uma variedade imensa de funções. Entre elas está a mais cobiçada, a entrega automática de doações! (APIs atualizadas!!)
O sistema conta com 4 formas de pagamentos, sendo 3 delas automáticas:

  1. Depósito/transferencia para sua conta bancária (Entrega manual)
  2. PagSeguro (PIX incluído e entrega automática)
  3. MercadoPago (PIX incluído e entrega automática)
  4. PayPal (Entrega automática)

Outra ferramenta muito interessante é o sistema de templates, com ele você pode rodar qualquer site de lineage 2 dentro do sistema ICPNetworks V4. Você se lembra daquele site antiiiiigo que você sempre quis recolocar online e ele está com a programação desatualizada/insegura? Agora você pode colocar ele online novamente com o sistema ICPNetworks V4! Alem disso, qualquer pessoa poderá adicionar ou editar qualquer template de forma simples e fácil, sabendo apenas o basico de HTML, CSS e JavaScript. VOCÊ NÃO PRECISA SABER PROGRAMAÇÂO!!!

 

Compatibilidade

O sistema foi criado para ser compatível com a grande maioria dos servidores de lineage 2 da atualidade.
O sistema foi testado nas seguintes crônicas e projetos:

  • C4:
    1. L2jlisvus
  • Interlude:
    1. Frozen
    2. aCis (versão nova e antiga)
    3. Dream V2 e V3
    4. Lucera
    5. RusAcis
    6. L2OFF AdvExt64
  • Essence:
    1. L2jMobius
    2. L2-scripts
  • Classic:
    1. Lucera
  • Gracia Final:
    1. L2jServer
    2. L2spyke
  • Freya:
    1. L2jBR
  • High Five:
    1. L2-scripts
    2. Revolt-Team (Versão do Alex (CCCP))
    3. L2jEternity
    4. Sunrise
  • GOD:
    1. L2-scripts
 

Tutoriais

Instalação

Configuração

Apresentação

Templates

 

Arquivos

Requisitos para usar o sistema:

  • Java (L2j):
    1. MySQL MariaDB 10+
    2. PHP 7.4.19+ (com o Driver PDO MySQL instalado)
  • C++ (L2OFF):
    1. SQL Server 2012+
    2. PHP 7.4.19+ (com o Driver PDO Sql Serv instalado)

Download

download.png

Senha: ByIvanPires

 

Para próximas atualizações

  • Criar um forum interno
  • Criar sistema de indicações
  • Criar sistema multilinguagem
  • Criar cadastro de clans que irao jogar no servidor
  • Criar filtro de organização para loja de itens e para loja de personagens
  • Adicionar novas opções de doações
  • Criar o sistema de VIP
 

Créditos

Antes de tudo, eu gostaria de agradecer ao fórum L2jBrasil e os administradores @Kelvin e @Grundor pelo carinho de ter criado uma área exclusiva só para os conteúdos da ICPNetworks, fiquei muito feliz e lisonjeado. 💗

Agradeço a todos que ajudaram de todas as formas para que esse projeto pudesse ser concluído.

Agradeço também a L2jCenter por sempre estar patrocinando os meus projetos.

Os templates disponibilizados nesse sistema são de autoria da AtualStudio @AiroN.

Não vou nomear todo mundo para não correr o risco de esquecer o nome de ninguém. Mas agradeço a todos de coração! Sem a colaboração de todos, não teríamos chegado até aqui.

Um forte abraço a todos os membros da L2jBrasil e até a próxima!

 

l2jbrasil.png

l2jcenter.png

logo_menor2_icp_novo.png

Funciona para l2jorion?

angelo colli henriques

Link to comment
Share on other sites

Tengo un template HTML+css, podré integrarlo a este proyecto.

 

Utilizo una versión de L2Jmobius Interlude CT0 , por lo que nose si será compatible.

 

Tengo mis dudas

Gabo Bazooka

Link to comment
Share on other sites

Em 26/09/2022 at 03:52, Ivan Pires disse:
 
 

Introdução

Essa é uma atualização do sistema ICPNetworks V3.

Foram corrigidos os bugs reportados e o sistema foi totalmente recodificado.

O sistema teve implementações, agora ele funciona nas versões mais recentes, como as versões do GOD, Classic e Essence.

Em razão de ele ter sido totalmente recodificado, TESTEM TUDO antes de colocar online.

Reportem aqui os bugs encontrados.

 


 

O sistema ICPNetworks V4 não é somente um site, ele é um painel administrativo onde tudo é gerenciado através dele.

Nesse novo sistema, vocês encontrarão uma variedade imensa de funções. Entre elas está a mais cobiçada, a entrega automática de doações! (APIs atualizadas!!)
O sistema conta com 4 formas de pagamentos, sendo 3 delas automáticas:

  1. Depósito/transferencia para sua conta bancária (Entrega manual)
  2. PagSeguro (PIX incluído e entrega automática)
  3. MercadoPago (PIX incluído e entrega automática)
  4. PayPal (Entrega automática)

Outra ferramenta muito interessante é o sistema de templates, com ele você pode rodar qualquer site de lineage 2 dentro do sistema ICPNetworks V4. Você se lembra daquele site antiiiiigo que você sempre quis recolocar online e ele está com a programação desatualizada/insegura? Agora você pode colocar ele online novamente com o sistema ICPNetworks V4! Alem disso, qualquer pessoa poderá adicionar ou editar qualquer template de forma simples e fácil, sabendo apenas o basico de HTML, CSS e JavaScript. VOCÊ NÃO PRECISA SABER PROGRAMAÇÂO!!!

 

Compatibilidade

O sistema foi criado para ser compatível com a grande maioria dos servidores de lineage 2 da atualidade.
O sistema foi testado nas seguintes crônicas e projetos:

  • C4:
    1. L2jlisvus
  • Interlude:
    1. Frozen
    2. aCis (versão nova e antiga)
    3. Dream V2 e V3
    4. Lucera
    5. RusAcis
    6. L2OFF AdvExt64
  • Essence:
    1. L2jMobius
    2. L2-scripts
  • Classic:
    1. Lucera
  • Gracia Final:
    1. L2jServer
    2. L2spyke
  • Freya:
    1. L2jBR
  • High Five:
    1. L2-scripts
    2. Revolt-Team (Versão do Alex (CCCP))
    3. L2jEternity
    4. Sunrise
  • GOD:
    1. L2-scripts
 

Tutoriais

Instalação

Configuração

Apresentação

Templates

 

Arquivos

Requisitos para usar o sistema:

  • Java (L2j):
    1. MySQL MariaDB 10+
    2. PHP 7.4.19+ (com o Driver PDO MySQL instalado)
  • C++ (L2OFF):
    1. SQL Server 2012+
    2. PHP 7.4.19+ (com o Driver PDO Sql Serv instalado)

Download

download.png

Senha: ByIvanPires

 

Para próximas atualizações

  • Criar um forum interno
  • Criar sistema de indicações
  • Criar sistema multilinguagem
  • Criar cadastro de clans que irao jogar no servidor
  • Criar filtro de organização para loja de itens e para loja de personagens
  • Adicionar novas opções de doações
  • Criar o sistema de VIP
 

Créditos

Antes de tudo, eu gostaria de agradecer ao fórum L2jBrasil e os administradores @Kelvin e @Grundor pelo carinho de ter criado uma área exclusiva só para os conteúdos da ICPNetworks, fiquei muito feliz e lisonjeado. 💗

Agradeço a todos que ajudaram de todas as formas para que esse projeto pudesse ser concluído.

Agradeço também a L2jCenter por sempre estar patrocinando os meus projetos.

Os templates disponibilizados nesse sistema são de autoria da AtualStudio @AiroN.

Não vou nomear todo mundo para não correr o risco de esquecer o nome de ninguém. Mas agradeço a todos de coração! Sem a colaboração de todos, não teríamos chegado até aqui.

Um forte abraço a todos os membros da L2jBrasil e até a próxima!

 

l2jbrasil.png

l2jcenter.png

logo_menor2_icp_novo.png

O meu capcha para criar a conta está bugado não funciona... e o design está desalinhado... poderia me ajudar, por favor? Estou com PhP versão 8.0, será que é isso?

image.png.c8786d1ddbf2b2faff69c53063929444.png

angelo colli henriques

Link to comment
Share on other sites

  • 1 month later...

 

Olá amigos,

 

Queria saber se alguém ainda está conseguindo fazer funcionar a entrega automática de doações, já que o Mercado Pago mudou o sistema IPN para Webhook e me disseram que é necessário adaptá-lo novamente.

 

Saudações e boa semana!

Link to comment
Share on other sites

2 horas atrás, Daro disse:

 

Olá amigos,

 

Queria saber se alguém ainda está conseguindo fazer funcionar a entrega automática de doações, já que o Mercado Pago mudou o sistema IPN para Webhook e me disseram que é necessário adaptá-lo novamente.

 

Saudações e boa semana!

Estou refazendo a integração, agora com SDK do mercado pago, assim que concluir eu irei postar aqui, ando sem muito tempo, mas assim que concluir eu posto aqui

  • Like 1

Jean Almeida - L2 Vanguard

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.