Como exibir clima e temperatura de uma localidade em PHP

Veja como usar a API da OpenWeatherMap para exibir informações sobre o clima de uma localidade

09/02/2024

Como exibir clima e temperatura de uma localidade em PHP

Como exibir clima e temperatura de uma localidade em PHP

Introdução

O objetivo deste tutorial é explicar como exibir informações sobre o clima e a temperatura de uma determinada localidade usando PHP. Por meio de uma abordagem passo a passo, detalharemos como criar um widget que busca dados meteorológicos em tempo real através da API do OpenWeatherMap. Este guia é projetado para ajudar desenvolvedores a integrarem funcionalidades climáticas em seus projetos web, destacando a obtenção da chave da API, a implementação do código PHP, e a personalização visual do widget de temperatura.

Exibição do Código Completo

A seguir, apresentamos o código PHP completo necessário para exibir informações sobre o clima e a temperatura de uma localidade específica. Esse script faz uso da API do OpenWeatherMap para buscar dados meteorológicos em tempo real e exibi-los em um widget personalizado.

<?php

function getWeatherWidget($localidade, $apiKey) {

	static $icons = [
		'01d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIj48cGF0aCBkPSJNMzIgNDIuNWM1Ljc5OSAwIDEwLjUtNC43MDEgMTAuNS0xMC41UzM3Ljc5OSAyMS41IDMyIDIxLjUgMjEuNSAyNi4yMDEgMjEuNSAzMiAyNi4yMDEgNDIuNSAzMiA0Mi41eiIgZmlsbD0idXJsKCNBKSIgc3Ryb2tlPSIjZjhhZjE4IiBzdHJva2Utd2lkdGg9Ii41Ii8+PHBhdGggZD0iTTMyIDE1LjcxVjkuNW0wIDQ1di02LjIxbTExLjUyLTI3LjgxbDQuMzktNC4zOU0xNi4wOSA0Ny45MWw0LjM5LTQuMzltMC0yM2wtNC4zOS00LjM5bTMxLjgyIDMxLjc4bC00LjM5LTQuMzlNMTUuNzEgMzJIOS41bTQ1IDBoLTYuMjEiIHN0cm9rZT0iI2ZiYmYyNCIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJBIiB4MT0iMjYuNzUiIHkxPSIyMi45MSIgeDI9IjM3LjI1IiB5Mj0iNDEuMDkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZmJiZjI0Ii8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiNmYmJmMjQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNTllMGIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',
		'01n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTQ2LjY2IDM2LjJhMTYuNjYgMTYuNjYgMCAwIDEtMTEuODE5LTQuNzk4QTE2LjY2IDE2LjY2IDAgMCAxIDI5Ljg4IDE5LjY1YTE2LjI5IDE2LjI5IDAgMCAxIC41NS00LjE1IDE2LjU2IDE2LjU2IDAgMCAwLTEzLjQzNSAxMC41NDUgMTYuNTYgMTYuNTYgMCAwIDAgMy4wMjggMTYuODA5IDE2LjU2IDE2LjU2IDAgMCAwIDE2LjI3MSA1LjE5M0ExNi41NiAxNi41NiAwIDAgMCA0OC41IDM2LjFsLTEuODQuMXoiIGZpbGw9InVybCgjQSkiIHN0cm9rZT0iIzcyYjlkNSIgc3Ryb2tlLXdpZHRoPSIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iQSIgeDE9IjIxLjkyIiB5MT0iMTguNzUiIHgyPSIzOC41MiIgeTI9IjQ3LjUyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNWVhZmNmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+',
		'02d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIj48cGF0aCBkPSJNMTkgMjlhNSA1IDAgMSAwIDAtMTAgNSA1IDAgMSAwIDAgMTB6IiBmaWxsPSJ1cmwoI0EpIiBzdHJva2U9IiNmOGFmMTgiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTkgMTUuNjdWMTIuNW0wIDIzdi0zLjE3bTUuODktMTQuMjJsMi4yNC0yLjI0TTEwLjg3IDMyLjEzbDIuMjQtMi4yNG0wLTExLjc4bC0yLjI0LTIuMjRtMTYuMjYgMTYuMjZsLTIuMjQtMi4yNE03LjUgMjRoMy4xN20xOS44MyAwaC0zLjE3IiBzdHJva2U9IiNmYmJmMjQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHBhdGggZD0iTTQ2LjUgMzEuNWgtLjMyYTEwLjQ5IDEwLjQ5IDAgMCAwLTYuMTQ0LTEyLjE0OUExMC40OSAxMC40OSAwIDAgMCAyNy4wNyAyMy41YTcgNyAwIDAgMC03LjAyNi0uMDY2QTcgNyAwIDAgMCAxNi41IDI5LjVhNy4yMSA3LjIxIDAgMCAwIC4xIDEuMTQgNy41IDcuNSAwIDAgMC02LjAyNSA4LjA2NEE3LjUgNy41IDAgMCAwIDE4IDQ1LjVhNC4yMSA0LjIxIDAgMCAwIC41IDBoMjhhNyA3IDAgMCAwIDctNyA3IDcgMCAwIDAtNy03eiIgZmlsbD0idXJsKCNCKSIgc3Ryb2tlPSIjZTZlZmZjIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9nPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iQSIgeDE9IjE2LjUiIHkxPSIxOS42NyIgeDI9IjIxLjUiIHkyPSIyOC4zMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmYmJmMjQiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2ZiYmYyNCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y1OWUwYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJCIiB4MT0iMjIuNTYiIHkxPSIyMS45NiIgeDI9IjM5LjIiIHkyPSI1MC44IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+',
		'02n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLXdpZHRoPSIuNSI+PHBhdGggZD0iTTI5LjMzIDI2LjY4YTEwLjYxIDEwLjYxIDAgMCAxLTcuNTIzLTMuMDU4IDEwLjYxIDEwLjYxIDAgMCAxLTMuMTU3LTcuNDgyQTEwLjUgMTAuNSAwIDAgMSAxOSAxMy41YTEwLjU0IDEwLjU0IDAgMCAwLTguNTUyIDYuNzExIDEwLjU0IDEwLjU0IDAgMCAwIDEuOTI3IDEwLjY5OSAxMC41NCAxMC41NCAwIDAgMCAxMC4zNTcgMy4zMDVBMTAuNTQgMTAuNTQgMCAwIDAgMzAuNSAyNi42MWMtLjM4OS4wNDMtLjc3OS4wNjctMS4xNy4wN3oiIGZpbGw9InVybCgjQSkiIHN0cm9rZT0iIzcyYjlkNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik00Ni41IDMxLjVoLS4zMmExMC40OSAxMC40OSAwIDAgMC02LjE0NC0xMi4xNDlBMTAuNDkgMTAuNDkgMCAwIDAgMjcuMDcgMjMuNWE3IDcgMCAwIDAtNy4wMjYtLjA2NkE3IDcgMCAwIDAgMTYuNSAyOS41YTcuMjEgNy4yMSAwIDAgMCAuMSAxLjE0IDcuNSA3LjUgMCAwIDAtNi4wMjUgOC4wNjRBNy41IDcuNSAwIDAgMCAxOCA0NS41YTQuMjEgNC4yMSAwIDAgMCAuNSAwaDI4YTcgNyAwIDAgMCA3LTcgNyA3IDAgMCAwLTctN3oiIGZpbGw9InVybCgjQikiIHN0cm9rZT0iI2U2ZWZmYyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PC9nPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iQSIgeDE9IjEzLjU4IiB5MT0iMTUuNTciIHgyPSIyNC4xNSIgeTI9IjMzLjg3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNWVhZmNmIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkIiIHgxPSIyMi41NiIgeTE9IjIxLjk2IiB4Mj0iMzkuMiIgeTI9IjUwLjgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiNmM2Y3ZmUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkZWVhZmIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',
		'03d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTQ2LjUgMzEuNWgtLjMyYTEwLjQ5IDEwLjQ5IDAgMCAwLTYuMTQ0LTEyLjE0OUExMC40OSAxMC40OSAwIDAgMCAyNy4wNyAyMy41YTcgNyAwIDAgMC03LjAyNi0uMDY2QTcgNyAwIDAgMCAxNi41IDI5LjVhNy4yMSA3LjIxIDAgMCAwIC4xIDEuMTQgNy41IDcuNSAwIDAgMC02LjAyNSA4LjA2NEE3LjUgNy41IDAgMCAwIDE4IDQ1LjVhNC4yMSA0LjIxIDAgMCAwIC41IDBoMjhhNyA3IDAgMCAwIDctNyA3IDcgMCAwIDAtNy03eiIgZmlsbD0idXJsKCNBKSIgc3Ryb2tlPSIjZTZlZmZjIiBzdHJva2Utd2lkdGg9Ii41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIyMi41NiIgeTE9IjIxLjk2IiB4Mj0iMzkuMiIgeTI9IjUwLjgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiNmM2Y3ZmUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkZWVhZmIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',
		'03n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTQ2LjUgMzEuNWgtLjMyYTEwLjQ5IDEwLjQ5IDAgMCAwLTYuMTQ0LTEyLjE0OUExMC40OSAxMC40OSAwIDAgMCAyNy4wNyAyMy41YTcgNyAwIDAgMC03LjAyNi0uMDY2QTcgNyAwIDAgMCAxNi41IDI5LjVhNy4yMSA3LjIxIDAgMCAwIC4xIDEuMTQgNy41IDcuNSAwIDAgMC02LjAyNSA4LjA2NEE3LjUgNy41IDAgMCAwIDE4IDQ1LjVhNC4yMSA0LjIxIDAgMCAwIC41IDBoMjhhNyA3IDAgMCAwIDctNyA3IDcgMCAwIDAtNy03eiIgZmlsbD0idXJsKCNBKSIgc3Ryb2tlPSIjZTZlZmZjIiBzdHJva2Utd2lkdGg9Ii41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIyMi41NiIgeTE9IjIxLjk2IiB4Mj0iMzkuMiIgeTI9IjUwLjgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiNmM2Y3ZmUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkZWVhZmIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',
		'04d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBjbGlwLXBhdGg9InVybCgjQykiPjxnIGNsaXAtcGF0aD0idXJsKCNEKSI+PHBhdGggZD0iTTI2Ny4zNCAyNjUuMThhMzIuNDQzIDMyLjQ0MyAwIDAgMCAyMC4wMjYgMjkuOTcxIDMyLjQyNiAzMi40MjYgMCAwIDAgMTIuNDE0IDIuNDY5aDEyOS43NXYtLjEyYy43NyAwIDEuNTMuMTIgMi4zMS4xMmEzNC43NSAzNC43NSAwIDAgMCAyMy4zOTYtOS4wNDkgMzQuNzUgMzQuNzUgMCAwIDAtMTYuOTA2LTU5Ljg0MSAzMi4zOCAzMi4zOCAwIDAgMC0yLjE3NS0xOC4wMDQgMzIuMzc1IDMyLjM3NSAwIDAgMC0xMS41MTMtMTQuMDExIDMyLjM4IDMyLjM4IDAgMCAwLTE3LjI0Mi01LjYyNCAzMi4zOSAzMi4zOSAwIDAgMC0xNy41NiA0LjUyOSA0OC41OCA0OC41OCAwIDAgMC02MC4zMTgtMTkuNTY2IDQ4LjU4IDQ4LjU4IDAgMCAwLTI0LjY3OCAyMy4xMjcgNDguNTc1IDQ4LjU3NSAwIDAgMC0zLjYwNCAzMy42MjljLS40OSAwLTEtLjA3LTEuNDYtLjA3LTQuMjYgMC04LjQ3OC44MzktMTIuNDE0IDIuNDY5YTMyLjQ1IDMyLjQ1IDAgMCAwLTEwLjUyNSA3LjAzMyAzMi40NCAzMi40NCAwIDAgMC05LjUwMSAyMi45Mzh6IiBmaWxsPSJ1cmwoI0EpIiBzdHJva2U9IiNlNGViZjgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjRSkiPjxwYXRoIGQ9Ik0zNTkuODQgMjUyYy0uODUgMC0xLjY4LjA5LTIuNTMuMTNhODMuODk2IDgzLjg5NiAwIDAgMC02LjQzMS01Ny44MzMgODMuOSA4My45IDAgMCAwLTQyLjUwNS0zOS43NDFBODMuODk3IDgzLjg5NyAwIDAgMCAyMDQuNDQgMTg3LjkyYTU1LjkxIDU1LjkxIDAgMCAwLTI4LjA3NC03LjkxOSA1NS45MDYgNTUuOTA2IDAgMCAwLTQ4Ljk2MyAyNy44MjdBNTUuOTE4IDU1LjkxOCAwIDAgMCAxMTkuODQgMjM2YTU2LjUxIDU2LjUxIDAgMCAwIC44IDkuMDggNTkuOTk2IDU5Ljk5NiAwIDAgMC0zNi42NyAyMi45MjMgNjAgNjAgMCAwIDAgNy41NjUgODAuMzI0QTYwLjAwNSA2MC4wMDUgMCAwIDAgMTMxLjg0IDM2NGMxLjM1IDAgMi42Ny0uMTEgNC0uMnYuMmgyMjRhNTYgNTYgMCAwIDAgNTYtNTYgNTYgNTYgMCAwIDAtNTYtNTZ6IiBmaWxsPSJ1cmwoI0IpIiBzdHJva2U9IiNlNmVmZmMiIHN0cm9rZS13aWR0aD0iNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PC9nPjwvZz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIzMTkuNTgiIHkxPSIxODEuNjIiIHgyPSI0MDAuMiIgeTI9IjMyMS4yNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNiY2MzY2YiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2JjYzNjZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzhiOTJhMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJCIiB4MT0iMTY4LjI5IiB5MT0iMTc1LjY4IiB4Mj0iMzAxLjQ4IiB5Mj0iNDA2LjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9IkMiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4Ljg0IDE0NSkiIGQ9Ik0wIDBoMzk4djIyMkgweiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJEIj48cGF0aCBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjYuODQgMTcyKSIgZD0iTTAgMGgyMDAuMjZ2MTI2LjEySDB6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9IkUiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4Ljg0IDE0NSkiIGQ9Ik0wIDBoMzUwdjIyMkgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==',
		'04n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBjbGlwLXBhdGg9InVybCgjQykiPjxnIGNsaXAtcGF0aD0idXJsKCNEKSI+PHBhdGggZD0iTTI2Ny4zNCAyNjUuMThhMzIuNDQzIDMyLjQ0MyAwIDAgMCAyMC4wMjYgMjkuOTcxIDMyLjQyNiAzMi40MjYgMCAwIDAgMTIuNDE0IDIuNDY5aDEyOS43NXYtLjEyYy43NyAwIDEuNTMuMTIgMi4zMS4xMmEzNC43NSAzNC43NSAwIDAgMCAyMy4zOTYtOS4wNDkgMzQuNzUgMzQuNzUgMCAwIDAtMTYuOTA2LTU5Ljg0MSAzMi4zOCAzMi4zOCAwIDAgMC0yLjE3NS0xOC4wMDQgMzIuMzc1IDMyLjM3NSAwIDAgMC0xMS41MTMtMTQuMDExIDMyLjM4IDMyLjM4IDAgMCAwLTE3LjI0Mi01LjYyNCAzMi4zOSAzMi4zOSAwIDAgMC0xNy41NiA0LjUyOSA0OC41OCA0OC41OCAwIDAgMC02MC4zMTgtMTkuNTY2IDQ4LjU4IDQ4LjU4IDAgMCAwLTI0LjY3OCAyMy4xMjcgNDguNTc1IDQ4LjU3NSAwIDAgMC0zLjYwNCAzMy42MjljLS40OSAwLTEtLjA3LTEuNDYtLjA3LTQuMjYgMC04LjQ3OC44MzktMTIuNDE0IDIuNDY5YTMyLjQ1IDMyLjQ1IDAgMCAwLTEwLjUyNSA3LjAzMyAzMi40NCAzMi40NCAwIDAgMC05LjUwMSAyMi45Mzh6IiBmaWxsPSJ1cmwoI0EpIiBzdHJva2U9IiNlNGViZjgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjRSkiPjxwYXRoIGQ9Ik0zNTkuODQgMjUyYy0uODUgMC0xLjY4LjA5LTIuNTMuMTNhODMuOSA4My45IDAgMCAwLTQ4LjkzNi05Ny41NzRBODMuODk3IDgzLjg5NyAwIDAgMCAyMDQuNDQgMTg3LjkyYTU1LjkxIDU1LjkxIDAgMCAwLTI4LjA3NC03LjkxOSA1NS45MDYgNTUuOTA2IDAgMCAwLTQ4Ljk2NCAyNy44MjdBNTUuOTA3IDU1LjkwNyAwIDAgMCAxMTkuODQgMjM2YTU2LjUxIDU2LjUxIDAgMCAwIC44IDkuMDggNTkuOTk2IDU5Ljk5NiAwIDAgMC0zNi42NyAyMi45MjMgNjAgNjAgMCAwIDAgNy41NjUgODAuMzI0QTYwLjAwNSA2MC4wMDUgMCAwIDAgMTMxLjg0IDM2NGMxLjM1IDAgMi42Ny0uMTEgNC0uMnYuMmgyMjRhNTYgNTYgMCAwIDAgNTYtNTYgNTYgNTYgMCAwIDAtNTYtNTZ6IiBmaWxsPSJ1cmwoI0IpIiBzdHJva2U9IiNhYmI0YzIiIHN0cm9rZS13aWR0aD0iNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PC9nPjwvZz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIzMTkuNTgiIHkxPSIxODEuNjIiIHgyPSI0MDAuMiIgeTI9IjMyMS4yNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNiY2MzY2YiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2JjYzNjZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzhiOTJhMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJCIiB4MT0iMTY4LjI5IiB5MT0iMTc1LjY4IiB4Mj0iMzAxLjQ4IiB5Mj0iNDA2LjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzhiOTJhMCIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjOGI5MmEwIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNmI3NTgzIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9IkMiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4Ljg0IDE0NSkiIGQ9Ik0wIDBoMzk4djIyMkgweiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJEIj48cGF0aCBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjYuODQgMTcyKSIgZD0iTTAgMGgyMDAuMjZ2MTI2LjEySDB6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9IkUiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4Ljg0IDE0NSkiIGQ9Ik0wIDBoMzUwdjIyMkgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==',
		'09d' => 'PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjY0IiB3aWR0aD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyMi41NiIgeDI9IjM5LjIiIHkxPSIyMS45NiIgeTI9IjUwLjgiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzQyODZlZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjNDI4NmVlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDk1MGJjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjIuNTMiIHgyPSIyNS40NyIgeGxpbms6aHJlZj0iI2IiIHkxPSI0Mi45NSIgeTI9IjQ4LjA1Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjI5LjUzIiB4Mj0iMzIuNDciIHhsaW5rOmhyZWY9IiNiIiB5MT0iNDIuOTUiIHkyPSI0OC4wNSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzNi41MyIgeDI9IjM5LjQ3IiB4bGluazpocmVmPSIjYiIgeTE9IjQyLjk1IiB5Mj0iNDguMDUiLz48ZyBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiPjxwYXRoIGQ9Im00Ni41IDMxLjVoLS4zMmExMC40OSAxMC40OSAwIDAgMCAtNi4xNDQtMTIuMTQ5IDEwLjQ5IDEwLjQ5IDAgMCAwIC0xMi45NjYgNC4xNDkgNyA3IDAgMCAwIC03LjAyNi0uMDY2IDcgNyAwIDAgMCAtMy41NDQgNi4wNjYgNy4yMSA3LjIxIDAgMCAwIC4xIDEuMTQgNy41IDcuNSAwIDAgMCAtNi4wMjUgOC4wNjQgNy41IDcuNSAwIDAgMCA3LjQyNSA2Ljc5NiA0LjIxIDQuMjEgMCAwIDAgLjUgMGgyOGE3IDcgMCAwIDAgNy03IDcgNyAwIDAgMCAtNy03eiIgZmlsbD0idXJsKCNhKSIgc3Ryb2tlPSIjZTZlZmZjIiBzdHJva2Utd2lkdGg9Ii41Ii8+PGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Im0yNC4zOSA0My4wMy0uNzggNC45NCIgc3Ryb2tlPSJ1cmwoI2MpIi8+PHBhdGggZD0ibTMxLjM5IDQzLjAzLS43OCA0Ljk0IiBzdHJva2U9InVybCgjZCkiLz48cGF0aCBkPSJtMzguMzkgNDMuMDMtLjc4IDQuOTQiIHN0cm9rZT0idXJsKCNlKSIvPjwvZz48L2c+PC9zdmc+',
		'09n' => 'PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjY0IiB3aWR0aD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyMi41NiIgeDI9IjM5LjIiIHkxPSIyMS45NiIgeTI9IjUwLjgiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzQyODZlZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjNDI4NmVlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDk1MGJjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjIuNTMiIHgyPSIyNS40NyIgeGxpbms6aHJlZj0iI2IiIHkxPSI0Mi45NSIgeTI9IjQ4LjA1Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjI5LjUzIiB4Mj0iMzIuNDciIHhsaW5rOmhyZWY9IiNiIiB5MT0iNDIuOTUiIHkyPSI0OC4wNSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzNi41MyIgeDI9IjM5LjQ3IiB4bGluazpocmVmPSIjYiIgeTE9IjQyLjk1IiB5Mj0iNDguMDUiLz48ZyBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiPjxwYXRoIGQ9Im00Ni41IDMxLjVoLS4zMmExMC40OSAxMC40OSAwIDAgMCAtNi4xNDQtMTIuMTQ5IDEwLjQ5IDEwLjQ5IDAgMCAwIC0xMi45NjYgNC4xNDkgNyA3IDAgMCAwIC03LjAyNi0uMDY2IDcgNyAwIDAgMCAtMy41NDQgNi4wNjYgNy4yMSA3LjIxIDAgMCAwIC4xIDEuMTQgNy41IDcuNSAwIDAgMCAtNi4wMjUgOC4wNjQgNy41IDcuNSAwIDAgMCA3LjQyNSA2Ljc5NiA0LjIxIDQuMjEgMCAwIDAgLjUgMGgyOGE3IDcgMCAwIDAgNy03IDcgNyAwIDAgMCAtNy03eiIgZmlsbD0idXJsKCNhKSIgc3Ryb2tlPSIjZTZlZmZjIiBzdHJva2Utd2lkdGg9Ii41Ii8+PGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Im0yNC4zOSA0My4wMy0uNzggNC45NCIgc3Ryb2tlPSJ1cmwoI2MpIi8+PHBhdGggZD0ibTMxLjM5IDQzLjAzLS43OCA0Ljk0IiBzdHJva2U9InVybCgjZCkiLz48cGF0aCBkPSJtMzguMzkgNDMuMDMtLjc4IDQuOTQiIHN0cm9rZT0idXJsKCNlKSIvPjwvZz48L2c+PC9zdmc+',
		'10d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiPjxnIHN0cm9rZS1taXRlcmxpbWl0PSIxMCI+PHBhdGggZD0iTTE5IDI5YTUgNSAwIDEgMCAwLTEwIDUgNSAwIDEgMCAwIDEweiIgZmlsbD0idXJsKCNBKSIgc3Ryb2tlPSIjZjhhZjE4IiBzdHJva2Utd2lkdGg9Ii41Ii8+PHBhdGggZD0iTTE5IDE1LjY3VjEyLjVtMCAyM3YtMy4xN201Ljg5LTE0LjIybDIuMjQtMi4yNE0xMC44NyAzMi4xM2wyLjI0LTIuMjRtMC0xMS43OGwtMi4yNC0yLjI0bTE2LjI2IDE2LjI2bC0yLjI0LTIuMjRNNy41IDI0aDMuMTdtMTkuODMgMGgtMy4xNyIgc3Ryb2tlPSIjZmJiZjI0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjxwYXRoIGQ9Ik00Ni41IDMxLjVoLS4zMmExMC40OSAxMC40OSAwIDAgMC02LjE0NC0xMi4xNDlBMTAuNDkgMTAuNDkgMCAwIDAgMjcuMDcgMjMuNWE3IDcgMCAwIDAtNy4wMjYtLjA2NkE3IDcgMCAwIDAgMTYuNSAyOS41YTcuMjEgNy4yMSAwIDAgMCAuMSAxLjE0IDcuNSA3LjUgMCAwIDAtNi4wMjUgOC4wNjRBNy41IDcuNSAwIDAgMCAxOCA0NS41YTQuMjEgNC4yMSAwIDAgMCAuNSAwaDI4YTcgNyAwIDAgMCA3LTcgNyA3IDAgMCAwLTctN3oiIGZpbGw9InVybCgjQikiIHN0cm9rZT0iI2U2ZWZmYyIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48cGF0aCBkPSJNMjQuMzkgNDMuMDNsLS43OCA0Ljk0IiBzdHJva2U9InVybCgjQykiLz48cGF0aCBkPSJNMzEuMzkgNDMuMDNsLS43OCA0Ljk0IiBzdHJva2U9InVybCgjRCkiLz48cGF0aCBkPSJNMzguMzkgNDMuMDNsLS43OCA0Ljk0IiBzdHJva2U9InVybCgjRSkiLz48L2c+PC9nPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iQSIgeDE9IjE2LjUiIHkxPSIxOS42NyIgeDI9IjIxLjUiIHkyPSIyOC4zMyIgeGxpbms6aHJlZj0iI0YiPjxzdG9wIHN0b3AtY29sb3I9IiNmYmJmMjQiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2ZiYmYyNCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y1OWUwYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJCIiB4MT0iMjIuNTYiIHkxPSIyMS45NiIgeDI9IjM5LjIiIHkyPSI1MC44IiB4bGluazpocmVmPSIjRiI+PHN0b3Agc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkMiIHgxPSIyMi41MyIgeTE9IjQyLjk1IiB4Mj0iMjUuNDciIHkyPSI0OC4wNSIgeGxpbms6aHJlZj0iI0YiPjxzdG9wIHN0b3AtY29sb3I9IiM0Mjg2ZWUiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iIzQyODZlZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA5NTBiYyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJEIiB4MT0iMjkuNTMiIHkxPSI0Mi45NSIgeDI9IjMyLjQ3IiB5Mj0iNDguMDUiIHhsaW5rOmhyZWY9IiNGIj48c3RvcCBzdG9wLWNvbG9yPSIjNDI4NmVlIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM0Mjg2ZWUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOTUwYmMiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iRSIgeDE9IjM2LjUzIiB5MT0iNDIuOTUiIHgyPSIzOS40NyIgeTI9IjQ4LjA1IiB4bGluazpocmVmPSIjRiI+PHN0b3Agc3RvcC1jb2xvcj0iIzQyODZlZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjNDI4NmVlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDk1MGJjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+PC9kZWZzPjwvc3ZnPg==',
		'10n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiPjxnIHN0cm9rZS13aWR0aD0iLjUiPjxwYXRoIGQ9Ik0yOS4zMyAyNi42OGExMC42MSAxMC42MSAwIDAgMS03LjUyMy0zLjA1OCAxMC42MSAxMC42MSAwIDAgMS0zLjE1Ny03LjQ4MkExMC41IDEwLjUgMCAwIDEgMTkgMTMuNWExMC41NCAxMC41NCAwIDAgMC04LjU1MiA2LjcxMSAxMC41NCAxMC41NCAwIDAgMCAxLjkyNyAxMC42OTkgMTAuNTQgMTAuNTQgMCAwIDAgMTAuMzU3IDMuMzA1QTEwLjU0IDEwLjU0IDAgMCAwIDMwLjUgMjYuNjFjLS4zODkuMDQzLS43NzkuMDY3LTEuMTcuMDd6IiBmaWxsPSJ1cmwoI0EpIiBzdHJva2U9IiM3MmI5ZDUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNNDYuNSAzMS41aC0uMzJhMTAuNDkgMTAuNDkgMCAwIDAtNi4xNDQtMTIuMTQ5QTEwLjQ5IDEwLjQ5IDAgMCAwIDI3LjA3IDIzLjVhNyA3IDAgMCAwLTcuMDI2LS4wNjZBNyA3IDAgMCAwIDE2LjUgMjkuNWE3LjIxIDcuMjEgMCAwIDAgLjEgMS4xNCA3LjUgNy41IDAgMCAwLTYuMDI1IDguMDY0QTcuNSA3LjUgMCAwIDAgMTggNDUuNWE0LjIxIDQuMjEgMCAwIDAgLjUgMGgyOGE3IDcgMCAwIDAgNy03IDcgNyAwIDAgMC03LTd6IiBmaWxsPSJ1cmwoI0IpIiBzdHJva2U9IiNlNmVmZmMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIj48cGF0aCBkPSJNMjQuMzkgNDMuMDNsLS43OCA0Ljk0IiBzdHJva2U9InVybCgjQykiLz48cGF0aCBkPSJNMzEuMzkgNDMuMDNsLS43OCA0Ljk0IiBzdHJva2U9InVybCgjRCkiLz48cGF0aCBkPSJNMzguMzkgNDMuMDNsLS43OCA0Ljk0IiBzdHJva2U9InVybCgjRSkiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJBIiB4MT0iMTMuNTgiIHkxPSIxNS41NyIgeDI9IjI0LjE1IiB5Mj0iMzMuODciIHhsaW5rOmhyZWY9IiNGIj48c3RvcCBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1ZWFmY2YiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iQiIgeDE9IjIyLjU2IiB5MT0iMjEuOTYiIHgyPSIzOS4yIiB5Mj0iNTAuOCIgeGxpbms6aHJlZj0iI0YiPjxzdG9wIHN0b3AtY29sb3I9IiNmM2Y3ZmUiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2RlZWFmYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJDIiB4MT0iMjIuNTMiIHkxPSI0Mi45NSIgeDI9IjI1LjQ3IiB5Mj0iNDguMDUiIHhsaW5rOmhyZWY9IiNGIj48c3RvcCBzdG9wLWNvbG9yPSIjNDI4NmVlIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM0Mjg2ZWUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOTUwYmMiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iRCIgeDE9IjI5LjUzIiB5MT0iNDIuOTUiIHgyPSIzMi40NyIgeTI9IjQ4LjA1IiB4bGluazpocmVmPSIjRiI+PHN0b3Agc3RvcC1jb2xvcj0iIzQyODZlZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjNDI4NmVlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDk1MGJjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkUiIHgxPSIzNi41MyIgeTE9IjQyLjk1IiB4Mj0iMzkuNDciIHkyPSI0OC4wNSIgeGxpbms6aHJlZj0iI0YiPjxzdG9wIHN0b3AtY29sb3I9IiM0Mjg2ZWUiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iIzQyODZlZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA5NTBiYyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJGIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPjwvZGVmcz48L3N2Zz4=',
		'11d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLXdpZHRoPSIuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIj48cGF0aCBkPSJNNDYuNSAzMS41aC0uMzJhMTAuNDkgMTAuNDkgMCAwIDAtNi4xNDQtMTIuMTQ5QTEwLjQ5IDEwLjQ5IDAgMCAwIDI3LjA3IDIzLjVhNyA3IDAgMCAwLTcuMDI2LS4wNjZBNyA3IDAgMCAwIDE2LjUgMjkuNWE3LjIxIDcuMjEgMCAwIDAgLjEgMS4xNCA3LjUgNy41IDAgMCAwLTYuMDI1IDguMDY0QTcuNSA3LjUgMCAwIDAgMTggNDUuNWE0LjIxIDQuMjEgMCAwIDAgLjUgMGgyOGE3IDcgMCAwIDAgNy03IDcgNyAwIDAgMC03LTd6IiBmaWxsPSJ1cmwoI0EpIiBzdHJva2U9IiNlNmVmZmMiLz48cGF0aCBkPSJNMzAgMzZsLTQgMTJoNGwtMiAxMCAxMC0xNGgtNmw0LThoLTZ6IiBmaWxsPSJ1cmwoI0IpIiBzdHJva2U9IiNmNmE4MjMiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJBIiB4MT0iMjIuNTYiIHkxPSIyMS45NiIgeDI9IjM5LjIiIHkyPSI1MC44IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkIiIHgxPSIyNi43NCIgeTE9IjM3Ljg4IiB4Mj0iMzUuNzYiIHkyPSI1My41MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmN2IyM2IiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2Y3YjIzYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y1OWUwYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==',
		'11n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLXdpZHRoPSIuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIj48cGF0aCBkPSJNNDYuNSAzMS41aC0uMzJhMTAuNDkgMTAuNDkgMCAwIDAtNi4xNDQtMTIuMTQ5QTEwLjQ5IDEwLjQ5IDAgMCAwIDI3LjA3IDIzLjVhNyA3IDAgMCAwLTcuMDI2LS4wNjZBNyA3IDAgMCAwIDE2LjUgMjkuNWE3LjIxIDcuMjEgMCAwIDAgLjEgMS4xNCA3LjUgNy41IDAgMCAwLTYuMDI1IDguMDY0QTcuNSA3LjUgMCAwIDAgMTggNDUuNWE0LjIxIDQuMjEgMCAwIDAgLjUgMGgyOGE3IDcgMCAwIDAgNy03IDcgNyAwIDAgMC03LTd6IiBmaWxsPSJ1cmwoI0EpIiBzdHJva2U9IiNlNmVmZmMiLz48cGF0aCBkPSJNMzAgMzZsLTQgMTJoNGwtMiAxMCAxMC0xNGgtNmw0LThoLTZ6IiBmaWxsPSJ1cmwoI0IpIiBzdHJva2U9IiNmNmE4MjMiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJBIiB4MT0iMjIuNTYiIHkxPSIyMS45NiIgeDI9IjM5LjIiIHkyPSI1MC44IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjZjNmN2ZlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZGVlYWZiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkIiIHgxPSIyNi43NCIgeTE9IjM3Ljg4IiB4Mj0iMzUuNzYiIHkyPSI1My41MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmN2IyM2IiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2Y3YjIzYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y1OWUwYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==',
		'13d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiPjxnIHN0cm9rZS1taXRlcmxpbWl0PSIxMCI+PHBhdGggZD0iTTE5IDI5YTUgNSAwIDEgMCAwLTEwIDUgNSAwIDEgMCAwIDEweiIgZmlsbD0idXJsKCNBKSIgc3Ryb2tlPSIjZjhhZjE4IiBzdHJva2Utd2lkdGg9Ii41Ii8+PHBhdGggZD0iTTE5IDE1LjY3VjEyLjVtMCAyM3YtMy4xN201Ljg5LTE0LjIybDIuMjQtMi4yNE0xMC44NyAzMi4xM2wyLjI0LTIuMjRtMC0xMS43OGwtMi4yNC0yLjI0bTE2LjI2IDE2LjI2bC0yLjI0LTIuMjRNNy41IDI0aDMuMTdtMTkuODMgMGgtMy4xNyIgc3Ryb2tlPSIjZmJiZjI0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjxwYXRoIGQ9Ik00Ni41IDMxLjVoLS4zMmExMC40OSAxMC40OSAwIDAgMC02LjE0NC0xMi4xNDlBMTAuNDkgMTAuNDkgMCAwIDAgMjcuMDcgMjMuNWE3IDcgMCAwIDAtNy4wMjYtLjA2NkE3IDcgMCAwIDAgMTYuNSAyOS41YTcuMjEgNy4yMSAwIDAgMCAuMSAxLjE0IDcuNSA3LjUgMCAwIDAtNi4wMjUgOC4wNjRBNy41IDcuNSAwIDAgMCAxOCA0NS41YTQuMjEgNC4yMSAwIDAgMCAuNSAwaDI4YTcgNyAwIDAgMCA3LTcgNyA3IDAgMCAwLTctN3oiIGZpbGw9InVybCgjQikiIHN0cm9rZT0iI2U2ZWZmYyIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxwYXRoIGQ9Ik0zMSA0Ni4yNWExLjI1IDEuMjUgMCAxIDAgMC0yLjUgMS4yNSAxLjI1IDAgMCAwIDAgMi41eiIgc3Ryb2tlPSJ1cmwoI0MpIi8+PHBhdGggZD0iTTMzLjE3IDQ2LjI1bC0xLjA5LS42M20tMi4xNi0xLjI0bC0xLjA5LS42M00zMSA0Mi41djEuMjVtMCAzLjc1di0xLjI1bS0xLjA4LS42M2wtMS4wOS42M200LjM0LTIuNWwtMS4wOS42MyIgc3Ryb2tlPSJ1cmwoI0QpIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48cGF0aCBkPSJNMjQgNDYuMjVhMS4yNSAxLjI1IDAgMSAwIDAtMi41IDEuMjUgMS4yNSAwIDAgMCAwIDIuNXoiIHN0cm9rZT0idXJsKCNFKSIvPjxwYXRoIGQ9Ik0yNi4xNyA0Ni4yNWwtMS4wOS0uNjNtLTIuMTYtMS4yNGwtMS4wOS0uNjNNMjQgNDIuNXYxLjI1bTAgMy43NXYtMS4yNW0tMS4wOC0uNjNsLTEuMDkuNjNtNC4zNC0yLjVsLTEuMDkuNjMiIHN0cm9rZT0idXJsKCNGKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHBhdGggZD0iTTM4IDQ2LjI1YTEuMjUgMS4yNSAwIDEgMCAwLTIuNSAxLjI1IDEuMjUgMCAwIDAgMCAyLjV6IiBzdHJva2U9InVybCgjRykiLz48cGF0aCBkPSJNNDAuMTcgNDYuMjVsLTEuMDktLjYzbS0yLjE2LTEuMjRsLTEuMDktLjYzTTM4IDQyLjV2MS4yNW0wIDMuNzV2LTEuMjVtLTEuMDgtLjYzbC0xLjA5LjYzbTQuMzQtMi41bC0xLjA5LjYzIiBzdHJva2U9InVybCgjSCkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvZz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIxNi41IiB5MT0iMTkuNjciIHgyPSIyMS41IiB5Mj0iMjguMzMiIHhsaW5rOmhyZWY9IiNJIj48c3RvcCBzdG9wLWNvbG9yPSIjZmJiZjI0Ii8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiNmYmJmMjQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNTllMGIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iQiIgeDE9IjIyLjU2IiB5MT0iMjEuOTYiIHgyPSIzOS4yIiB5Mj0iNTAuOCIgeGxpbms6aHJlZj0iI0kiPjxzdG9wIHN0b3AtY29sb3I9IiNmM2Y3ZmUiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2RlZWFmYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJDIiB4MT0iMzAuMTIiIHkxPSI0My40OCIgeDI9IjMxLjg4IiB5Mj0iNDYuNTIiIHhsaW5rOmhyZWY9IiNJIj48c3RvcCBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1ZWFmY2YiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iRCIgeDE9IjI5LjY3IiB5MT0iNDIuNjkiIHgyPSIzMi4zMyIgeTI9IjQ3LjMxIiB4bGluazpocmVmPSIjSSI+PHN0b3Agc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNWVhZmNmIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkUiIHgxPSIyMy4xMiIgeTE9IjQzLjQ4IiB4Mj0iMjQuODgiIHkyPSI0Ni41MiIgeGxpbms6aHJlZj0iI0kiPjxzdG9wIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzVlYWZjZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJGIiB4MT0iMjIuNjciIHkxPSI0Mi42OSIgeDI9IjI1LjMzIiB5Mj0iNDcuMzEiIHhsaW5rOmhyZWY9IiNJIj48c3RvcCBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1ZWFmY2YiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iRyIgeDE9IjM3LjEyIiB5MT0iNDMuNDgiIHgyPSIzOC44OCIgeTI9IjQ2LjUyIiB4bGluazpocmVmPSIjSSI+PHN0b3Agc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNWVhZmNmIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkgiIHgxPSIzNi42NyIgeTE9IjQyLjY5IiB4Mj0iMzkuMzMiIHkyPSI0Ny4zMSIgeGxpbms6aHJlZj0iI0kiPjxzdG9wIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzVlYWZjZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJJIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPjwvZGVmcz48L3N2Zz4=',
		'13n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiPjxnIHN0cm9rZS1taXRlcmxpbWl0PSIxMCI+PHBhdGggZD0iTTE5IDI5YTUgNSAwIDEgMCAwLTEwIDUgNSAwIDEgMCAwIDEweiIgZmlsbD0idXJsKCNBKSIgc3Ryb2tlPSIjZjhhZjE4IiBzdHJva2Utd2lkdGg9Ii41Ii8+PHBhdGggZD0iTTE5IDE1LjY3VjEyLjVtMCAyM3YtMy4xN201Ljg5LTE0LjIybDIuMjQtMi4yNE0xMC44NyAzMi4xM2wyLjI0LTIuMjRtMC0xMS43OGwtMi4yNC0yLjI0bTE2LjI2IDE2LjI2bC0yLjI0LTIuMjRNNy41IDI0aDMuMTdtMTkuODMgMGgtMy4xNyIgc3Ryb2tlPSIjZmJiZjI0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjxwYXRoIGQ9Ik00Ni41IDMxLjVoLS4zMmExMC40OSAxMC40OSAwIDAgMC02LjE0NC0xMi4xNDlBMTAuNDkgMTAuNDkgMCAwIDAgMjcuMDcgMjMuNWE3IDcgMCAwIDAtNy4wMjYtLjA2NkE3IDcgMCAwIDAgMTYuNSAyOS41YTcuMjEgNy4yMSAwIDAgMCAuMSAxLjE0IDcuNSA3LjUgMCAwIDAtNi4wMjUgOC4wNjRBNy41IDcuNSAwIDAgMCAxOCA0NS41YTQuMjEgNC4yMSAwIDAgMCAuNSAwaDI4YTcgNyAwIDAgMCA3LTcgNyA3IDAgMCAwLTctN3oiIGZpbGw9InVybCgjQikiIHN0cm9rZT0iI2U2ZWZmYyIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxwYXRoIGQ9Ik0zMSA0Ni4yNWExLjI1IDEuMjUgMCAxIDAgMC0yLjUgMS4yNSAxLjI1IDAgMCAwIDAgMi41eiIgc3Ryb2tlPSJ1cmwoI0MpIi8+PHBhdGggZD0iTTMzLjE3IDQ2LjI1bC0xLjA5LS42M20tMi4xNi0xLjI0bC0xLjA5LS42M00zMSA0Mi41djEuMjVtMCAzLjc1di0xLjI1bS0xLjA4LS42M2wtMS4wOS42M200LjM0LTIuNWwtMS4wOS42MyIgc3Ryb2tlPSJ1cmwoI0QpIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48cGF0aCBkPSJNMjQgNDYuMjVhMS4yNSAxLjI1IDAgMSAwIDAtMi41IDEuMjUgMS4yNSAwIDAgMCAwIDIuNXoiIHN0cm9rZT0idXJsKCNFKSIvPjxwYXRoIGQ9Ik0yNi4xNyA0Ni4yNWwtMS4wOS0uNjNtLTIuMTYtMS4yNGwtMS4wOS0uNjNNMjQgNDIuNXYxLjI1bTAgMy43NXYtMS4yNW0tMS4wOC0uNjNsLTEuMDkuNjNtNC4zNC0yLjVsLTEuMDkuNjMiIHN0cm9rZT0idXJsKCNGKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHBhdGggZD0iTTM4IDQ2LjI1YTEuMjUgMS4yNSAwIDEgMCAwLTIuNSAxLjI1IDEuMjUgMCAwIDAgMCAyLjV6IiBzdHJva2U9InVybCgjRykiLz48cGF0aCBkPSJNNDAuMTcgNDYuMjVsLTEuMDktLjYzbS0yLjE2LTEuMjRsLTEuMDktLjYzTTM4IDQyLjV2MS4yNW0wIDMuNzV2LTEuMjVtLTEuMDgtLjYzbC0xLjA5LjYzbTQuMzQtMi41bC0xLjA5LjYzIiBzdHJva2U9InVybCgjSCkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvZz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIxNi41IiB5MT0iMTkuNjciIHgyPSIyMS41IiB5Mj0iMjguMzMiIHhsaW5rOmhyZWY9IiNJIj48c3RvcCBzdG9wLWNvbG9yPSIjZmJiZjI0Ii8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiNmYmJmMjQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNTllMGIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iQiIgeDE9IjIyLjU2IiB5MT0iMjEuOTYiIHgyPSIzOS4yIiB5Mj0iNTAuOCIgeGxpbms6aHJlZj0iI0kiPjxzdG9wIHN0b3AtY29sb3I9IiNmM2Y3ZmUiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2YzZjdmZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2RlZWFmYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJDIiB4MT0iMzAuMTIiIHkxPSI0My40OCIgeDI9IjMxLjg4IiB5Mj0iNDYuNTIiIHhsaW5rOmhyZWY9IiNJIj48c3RvcCBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1ZWFmY2YiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iRCIgeDE9IjI5LjY3IiB5MT0iNDIuNjkiIHgyPSIzMi4zMyIgeTI9IjQ3LjMxIiB4bGluazpocmVmPSIjSSI+PHN0b3Agc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNWVhZmNmIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkUiIHgxPSIyMy4xMiIgeTE9IjQzLjQ4IiB4Mj0iMjQuODgiIHkyPSI0Ni41MiIgeGxpbms6aHJlZj0iI0kiPjxzdG9wIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzVlYWZjZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJGIiB4MT0iMjIuNjciIHkxPSI0Mi42OSIgeDI9IjI1LjMzIiB5Mj0iNDcuMzEiIHhsaW5rOmhyZWY9IiNJIj48c3RvcCBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIuNDUiIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1ZWFmY2YiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iRyIgeDE9IjM3LjEyIiB5MT0iNDMuNDgiIHgyPSIzOC44OCIgeTI9IjQ2LjUyIiB4bGluazpocmVmPSIjSSI+PHN0b3Agc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iLjQ1IiBzdG9wLWNvbG9yPSIjODZjM2RiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNWVhZmNmIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IkgiIHgxPSIzNi42NyIgeTE9IjQyLjY5IiB4Mj0iMzkuMzMiIHkyPSI0Ny4zMSIgeGxpbms6aHJlZj0iI0kiPjxzdG9wIHN0b3AtY29sb3I9IiM4NmMzZGIiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iIzg2YzNkYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzVlYWZjZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJJIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPjwvZGVmcz48L3N2Zz4=',
		'50d' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTE3IDI1aDMwbS0zMCA3aDMwbS0zMCA3aDMwIiBzdHJva2U9InVybCgjQSkiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJBIiB4MT0iLW5hbiIgeTE9Ii1uYW4iIHgyPSItbmFuIiB5Mj0iLW5hbiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNkNGQ3ZGQiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2Q0ZDdkZCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2JlYzFjNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==',
		'50n' => 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTE3IDI1aDMwbS0zMCA3aDMwbS0zMCA3aDMwIiBzdHJva2U9InVybCgjQSkiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJBIiB4MT0iLW5hbiIgeTE9Ii1uYW4iIHgyPSItbmFuIiB5Mj0iLW5hbiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNkNGQ3ZGQiLz48c3RvcCBvZmZzZXQ9Ii40NSIgc3RvcC1jb2xvcj0iI2Q0ZDdkZCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2JlYzFjNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=='
	];

	// Verifica e cria o diretório de cache, se necessário
	if (!is_dir('./cache')) {
		mkdir('./cache/');
	}

	$cacheFile = "./cache/" . md5($localidade) . ".json";
	$cacheLifetime = 600; // 10 minutos para a atualização do cache
	$extendedCacheLifetime = 3600; // 1 hora para uso do cache estendido
	$useExtendedCache = false;

	// Verifica se o cache existe e decide se deve usar o cache estendido
	if (file_exists($cacheFile)) {
		$cacheAge = time() - filemtime($cacheFile);
		if ($cacheAge < $cacheLifetime) {
			$dados = json_decode(file_get_contents($cacheFile), true);
		} elseif ($cacheAge < $extendedCacheLifetime) {
			$useExtendedCache = true;
		}
	}

	// Solicitação à API ou uso do cache
	if (!isset($dados) || $useExtendedCache) {
		$url = "https://api.openweathermap.org/data/2.5/weather?q=" . urlencode($localidade) . "&units=metric&lang=pt_br&appid=" . $apiKey;
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_URL, $url);
		$resposta = curl_exec($ch);
		$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
		curl_close($ch);

		if ($httpCode == 200) {
			$dados = json_decode($resposta, true);
			file_put_contents($cacheFile, $resposta);
		} elseif ($useExtendedCache) {
			$dados = json_decode(file_get_contents($cacheFile), true);
		} else {
			return "Não foi possível obter a previsão do tempo.";
		}
	}

	// Preparação do widget
	if ($dados['cod'] != 200) {
		return "Não foi possível obter a previsão do tempo para $localidade.";
	} else {
		$iconCode = $dados['weather'][0]['icon'];
		$iconUrl = 'data:image/svg+xml;base64,' . $icons[$iconCode];
		// Define a cor de fundo: azul para dia, cinza escuro para noite
		$backgroundColor = strpos($iconCode, 'n') !== false ? '#223355' : '#0066cc'; 

		$localidade = explode(',', $localidade,2)[0];
		$temperatura = (int) $dados['main']['temp'];

		// HTML do widget
		$widgetHtml = "<div style='display: inline-flex; gap: 4px; justify-content: center; align-items: center; font-family: sans-serif; font-size: 24px; font-weight: 400; background-color: $backgroundColor; background-image: linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.3) 80%); color: #fff; padding: 4px 20px; border-radius: 10px; text-align: center; text-shadow: 1.5px 1.5px 1.5px rgba(0,0,0,0.4); box-shadow:  1.5px 1.5px 1.5px rgba(0,0,0,0.2); user-select: none;'>";
		$widgetHtml .= "<div>" . htmlentities($localidade) . "</div>";
		$widgetHtml .= "<img src='{$iconUrl}' alt='Ícone do tempo' style='width: 50px; height: 50px; filter: drop-shadow(0px 0px 2px rgba(0,0,0,0.3))'>";
		$widgetHtml .= "<div style='font-weight: bold;'>" . $temperatura . "°C</div>";
		$widgetHtml .= "</div>";

		return $widgetHtml;
	}
}

// Substitua SUA_CHAVE_API pela sua chave de API real
$apiKey = "SUA_CHAVE_API"; 
// Informe a localidade no formato "Cidade,Estado,País"
$localidade = "São Paulo,SP,Brazil";

// Exibe a localidade e a temperatura
echo getWeatherWidget($localidade, $apiKey);
?>

Lembre-se de substituir SUA_CHAVE_API pela sua chave de API obtida do OpenWeatherMap antes de executar o script.

Como obter a Chave da API no OpenWeatherMap

Para utilizar a API do OpenWeatherMap e acessar os dados meteorológicos, é necessário obter uma chave de API. Siga os passos abaixo para criar sua chave:

  • Acesse o site do OpenWeatherMap e faça o cadastro ou login.
  • Navegue até a seção de API keys no painel de controle do usuário.
  • Clique em Create key ou Gerar nova chave para criar sua chave de API.
  • Dê um nome à sua chave e, se necessário, uma descrição, e confirme a criação.
  • Após a criação, a chave de API será exibida. Copie e guarde-a em segurança, pois ela será usada no seu script PHP.

Com a chave de API em mãos, substitua SUA_CHAVE_API no código PHP pelo valor da sua chave.

Explicando o Código

Função getWeatherWidget

A função getWeatherWidget é responsável por buscar os dados meteorológicos e gerar o widget de clima. Ela recebe dois parâmetros: $localidade para definir a localidade desejada e $apiKey que é a chave da API do OpenWeatherMap.

function getWeatherWidget($localidade, $apiKey) { ... }

Sistema de Cache e Requisição à API

O sistema de cache é projetado para economizar solicitações à API do OpenWeatherMap, armazenando os dados meteorológicos localmente por um período. Primeiro, o script verifica a existência de um arquivo de cache para a localidade desejada. Se o arquivo existir e for recente o suficiente (dentro do período definido por $cacheLifetime), os dados são lidos diretamente do cache, evitando uma nova solicitação à API.

Caso o arquivo de cache esteja desatualizado (mas ainda dentro de um período estendido definido por $extendedCacheLifetime), o script ainda usará esses dados, mas marcará para uma atualização posterior. Se o arquivo de cache não existir ou estiver muito desatualizado, o script fará uma nova solicitação à API do OpenWeatherMap, atualizará o cache com os novos dados e, em seguida, usará esses dados para montar o widget de clima.

// Verificação e uso do cache
if (file_exists($cacheFile)) {
    $cacheAge = time() - filemtime($cacheFile);
    if ($cacheAge < $cacheLifetime) {
        $dados = json_decode(file_get_contents($cacheFile), true);
    } elseif ($cacheAge < $extendedCacheLifetime) {
        $useExtendedCache = true;
    }
}

// Requisição à API e atualização do cache
if (!isset($dados) || $useExtendedCache) {
    $url = "https://api.openweathermap.org/data/2.5/weather?q=" . urlencode($localidade) . "&units=metric&lang=pt_br&appid=" . $apiKey;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    $resposta = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($httpCode == 200) {
        $dados = json_decode($resposta, true);
        file_put_contents($cacheFile, $resposta);
    } elseif ($useExtendedCache) {
        $dados = json_decode(file_get_contents($cacheFile), true);
    } else {
        return "Não foi possível obter a previsão do tempo.";
    }
}

Essa abordagem otimiza o uso da API, permitindo que o número de chamadas por dia fique dentro do limite de 1.000 chamadas diárias que é oferecido gratuitamente.

Manipulação da Resposta JSON e Construção do Widget

A resposta da API é decodificada de JSON para um array associativo usando json_decode, permitindo o acesso direto aos elementos como temperatura e ícone do clima. Com esses dados, construímos o HTML do widget dinamicamente. Este processo envolve a inserção da localidade, do ícone do clima (convertido em base64 para incorporação direta) e da temperatura atual em uma estrutura HTML estilizável, pronta para ser exibida em uma página web.


// Decodificação da resposta JSON para array associativo
$dados = json_decode($resposta, true);

// Restante do código...

// Preparação do HTML do widget com dados meteorológicos
$iconCode = $dados['weather'][0]['icon'];
$iconUrl = 'data:image/svg+xml;base64,' . $icons[$iconCode];

// Define a cor de fundo: azul para dia, cinza escuro para noite
$backgroundColor = strpos($iconCode, 'n') !== false ? '#223355' : '#0066cc';
$localidade = explode(',', $localidade, 2)[0];
$temperatura = (int) $dados['main']['temp'];

// HTML do widget
$widgetHtml = "<div style='display: inline-flex; gap: 4px; justify-content: center; align-items: center; font-family: sans-serif; font-size: 24px; font-weight: 400; background-color: $backgroundColor; background-image: linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.3) 80%); color: #fff; padding: 4px 20px; border-radius: 10px; text-align: center; text-shadow: 1.5px 1.5px 1.5px rgba(0,0,0,0.4); box-shadow:  1.5px 1.5px 1.5px rgba(0,0,0,0.2); user-select: none;'>";
$widgetHtml .= "<div>" . htmlentities($localidade) . "</div>";
$widgetHtml .= "<img src='{$iconUrl}' alt='Ícone do tempo' style='width: 50px; height: 50px; filter: drop-shadow(0px 0px 2px rgba(0,0,0,0.3))'>";
$widgetHtml .= "<div style='font-weight: bold;'>" . $temperatura . "°C</div>";
$widgetHtml .= "</div>";

Chamada da Função e Configuração

Para exibir o widget de clima no seu site, é necessário chamar a função getWeatherWidget com dois parâmetros: a localidade desejada e a chave da API do OpenWeatherMap. A chave da API é essencial para autenticar a solicitação na API do OpenWeatherMap, enquanto a localidade especifica de qual cidade você deseja obter a previsão do tempo.


// Substitua 'SUA_CHAVE_API' pela sua chave de API real do OpenWeatherMap
$apiKey = "SUA_CHAVE_API";
// Especifique a localidade no formato "Cidade,Estado,Pais"
$localidade = "São Paulo,SP,Brazil";

// Chamada da função para exibir o widget de clima
echo getWeatherWidget($localidade, $apiKey);

Substitua SUA_CHAVE_API pela chave que você obteve ao se registrar na plataforma do OpenWeatherMap. A localidade deve ser informada no formato "Cidade,Estado,Pais" (sem as aspas), onde "Estado" e "País" são opcionais, dependendo da precisão desejada e da especificidade da localidade.

Conclusão

Este tutorial apresentou como exibir clima e temperatura usando PHP e a API OpenWeatherMap. O exemplo básico aqui serve como uma introdução para integrar funcionalidades meteorológicas em seus projetos.

Explore mais a API do OpenWeatherMap para personalizar e enriquecer suas aplicações com diversos dados climáticos disponíveis.

Este artigo nas redes sociais: Facebook, Twitter/X, LinkedIn, Telegram, Pinterest, Tumblr, Flipboard, Mastodon

Domínios hospedados
Clientes satisfeitos