Prezentacja i formatowanie wyników
Dostępne formaty dla zachowania wyników
Do formatowania wyników w A-Parser stosowany jest system szablonów Template Toolkit, co pozwala łatwo zapisywać wyniki scrapowania w różnych formatach:
- W plikach tekstowych jako lista: jeden wynik na wiersz, przez separator, w dowolnym formacie
- W plikach
CSVz możliwością dalszego importu do Excel, Google Docs itp. - W
XML,JSONi innych formatach przechowywania danych - W
HTMLgenerując strony "w locie" - W formacie zrzutów
SQLdo bezpośredniego importu do bazy danych lub bezpośrednio zapisując do bazy SQLite - W formacie binarnym do zapisywania obrazów (
jpg, png, gif,...), dokumentów (pdf, docx,...), plików wykonywalnych i archiwów (exe, dmg, zip,...) oraz dowolnych innych typów danych
Edycja formatu wyniku
Result format (Format wyniku) - pozwala formatować wyniki do pożądanego wyglądu przy użyciu szablonów, jest stosowany dla każdej kombinacji zapytanie-wyniki.

- Ogólny format wyniku określa się w polu
Result format - Format wyniku dla każdego scrapera z osobna można ustawić w ustawieniach scrapera w
Result format
A-Parser obsługuje pracę z wieloma scraperami w jednym zadaniu, w ogólnym formacie wyników należy wskazać, z którego scrapera wyprowadzić wynik:
$p1- wyniki z pierwszego scrapera (
SE::Google na zrzucie ekranu), $p2- wyniki z drugiego scrapera (
SE::Bing na zrzucie ekranu)- Numer porządkowy scrapera wyświetlany jest po lewej stronie pola wyboru scrapera
$p1.preseti$p2.presetoznacza, że należy pobrać wartość formatu wyniku z ustawień odpowiednich scraperów- W tym przykładzie
$p1.presetmożna zastąpić przez$p1.serp.format('$link\n'), co przyniesie taki sam efekt, przy czym format wyniku z ustawień nie będzie już używany
Result format (Format wyniku) można podać w wygodnym edytorze wielowierszowym, klikając odpowiednią ikonę w polu edycji:

W ogólnym formacie wyników dostępne są następujące zmienne:
$query- zapytanie po sformatowaniu$query.*- wszystkie zmienne odnoszące się do zapytania, opisane w artykule Szablony w zapytaniach$p1, $p2, ...- zmienne do dostępu do wyników scrapowania dla każdego scrapera z osobna (Podgląd możliwych wyników dla każdego scrapera)$p1.query, $p2.query, ...- zapytania po sformatowaniu z uwzględnieniem formatu zapytania wskazanego w ustawieniach każdego scrapera
Początkowy i końcowy tekst
Dla każdego pliku wyników określa się osobny Początkowy/Końcowy tekst:
- Do tworzenia nagłówka pliku CSV
- Dla tagów początkowych i końcowych pliku XML
- Dla nagłówka (header), sekcji górnej i stopki (footer) plików HTML
- Dla dowolnych innych zastosowań
Aby aktywować tę funkcję, należy kliknąć przycisk More options (Więcej opcji) w dolnej części Edytora zadań

W tekście początkowym i końcowym obsługiwane jest użycie systemu szablonów Template Toolkit, dostępne zmienne:
$query- zapytanie po sformatowaniu$query.*- wszystkie zmienne odnoszące się do zapytania, opisane w artykule Szablony w zapytaniach
Ważne! Te zmienne są dostępne tylko przy zapisywaniu każdego zapytania do osobnego pliku lub przy użyciu tych samych zmiennych w Formacie nazwy pliku wyniku.
Format nazwy pliku wyników
A-Parser pozwala używać szablonów również w nazwach plików wynikowych, co umożliwia automatyczne tworzenie plików i folderów na podstawie bieżącej daty, numeru porządkowego zapytania, samego zapytania i w dowolnym innym formacie.

W polu File name (Nazwa pliku) obsługiwane są następujące zmienne:
- Wszystkie zmienne dostępne dla Ogólnego formatu wyniku
$queriesfile- ścieżka i nazwa pliku z zapytaniami, jeśli zapytania podano przez formularz, będzie zawierać queries_from_text.txt$datefile- obiekt wtyczki date systemu szablonów Template Toolkit, skonfigurowany na format daty%b-%d_%H-%M-%S, przy formatowaniu zwraca bieżący czas i datę w postaci May-08_20-08-38, format można zmienić w Ustawieniach dodatkowych
Domyślnie nazwa pliku jest tworzona na podstawie daty i godziny w momencie startu zadania
Kompleksowy przykład
reports/$queriesfile/${query}.txt
- Zostanie utworzony folder reports
- Zostanie utworzony podfolder o nazwie pliku zapytań
- W podfolderze zostanie utworzonych tyle plików, ile zapytań jest używanych w zadaniu, jako nazwa pliku zostanie użyte samo zapytanie z rozszerzeniem
.txt
Zmienna $query jest zapisana w formacie ${query}, aby zapobiec interpretacji rozszerzenia .txt jako części zmiennej, więcej szczegółów w dokumentacji systemu szablonów Template Toolkit
⏩ Wideo. Nazywanie plików wyników
W tym filmie przedstawimy kilka przykładów nazywania pliku wyniku:
- Numeracja pliku wyniku zgodnie z zapytaniami.
- Numeracja pliku wyniku + część nazwy zapytania.
- Nazywanie pliku wyniku według zapytania, jeśli zapytanie jest linkiem.
Przegląd dostępnych wyników
Każdy scraper posiada własny zestaw wyników, listę dostępnych wyników można przejrzeć najeżdżając kursorem na scraper, w wyskakującej podpowiedzi zostanie wyświetlona lista prostych wyników oraz tablic, wraz z listą elementów zagnieżdżonych:

Na żółto zaznaczono wyniki wspólne dla wszystkich scraperów:
$query- zapytanie przekazane do scrapera po sformatowaniu$query.orig- oryginalne zapytanie (w takiej formie, w jakiej było w pliku lub w polu wprowadzania zapytań)$query.first- pierwsze zapytanie przy użyciu opcji zagnieżdżonego scrapowania (Parse all results lub Parse to level)$info.success- informacja o powodzeniu scrapowania danego zapytania$info.retries- liczba wykorzystanych prób dla danego zapytania$info.stats- statystyki pracy scrapera dla danego zapytania$pages.$i.data- tablica z nieprzetworzonymi odpowiedziami od serwera dla możliwości samodzielnego wyodrębnienia dodatkowych informacji
SE::Bing:$totalcount- liczba wyników wyszukiwania$adsz elementami$link,$anchor,$visiblelink,$snippet,$positioni$page- tablica z listą reklam$related.$i.key- tablica z listą powiązanych słów kluczowych$serpz elementami$link,$anchor,$snippet,$cache- tablica z głównymi wynikami wyszukiwarki
Zauważ, że dla tablic jawnie wskazywana jest zmienna $i, co oznacza, że elementów jest kilka i można się do nich odwołać przez indeks (numer pozycji) lub iterować po każdym elemencie w pętli.
Rezultat $pages.$i.data zostanie automatycznie zmieniony na $data dla tych scraperów, które nie "przechodzą po stronach" w ramach jednego zapytania. Na przykład jak
DeepL::Translator.
Prezentacja wyników
A-Parser został stworzony do scrapowania informacji wszelkiego rodzaju, w tym celu wprowadzono 2 typy wyników:
- Proste wyniki (Flat)
- Tablice wyników (Array)
Rozważmy każdy typ na przykładzie scrapera
SE::Google, zrzut ekranu wyników:

Proste wyniki
Simple results (Proste wyniki) - gdy jednemu zapytaniu odpowiada jeden wynik, przykłady:
- Liczba wyników dla zapytania ($totalcount)
- Czy zapytanie jest literówką ($misspell, nie przedstawiony na zrzucie ekranu)
Inne przykłady:
- Wartość przetłumaczonego tekstu ($translated) w scraperze
DeepL::Translator - Liczba domen odsyłających ($domains), wartość zaufania ($trustflow), linki zwrotne ($backlinks) itp. w scraperze
Rank::MajesticSEO
Pojedyncze wyniki są zapisywane w zwykłych zmiennych (prefiks $ + nazwa łacińska)
Tablice wyników
Tablice wyników - gdy jednemu zapytaniu odpowiada lista wyników, każdy element listy z kolei może zawierać kilka zagnieżdżonych elementów. Przeanalizujmy to na przykładzie wyników Google - są one reprezentowane w scraperze przez tablicę $serp, dla przejrzystości użyjemy tabeli, zapiszemy pierwsze 5 wyników:
| Link ($link) | Anchor ($anchor) | Snippet ($snippet) |
|---|---|---|
| http://www.speedtest.net/ | Speedtest.net by Ookla - The Global Broadband Speed Test | Test your Internet connection bandwidth to locations around the world with this interactive broadband speed test from Ookla. |
| http://en.wikipedia.org/wiki/Test_cricket | Test cricket - Wikipedia, the free encyclopedia | Test cricket is the longest form of the sport of cricket. Test matches are played between national representative teams with "Test status", as determined by the ... |
| http://www.speakeasy.net/speedtest/ | Speakeasy Speed Test | Saturday 03-May 2014, 11:04:29 AM Your IP: The Speakeasy Speed Test requires Flash v7 or higher. Please update your browser. See Pricing Or Call Today |
| http://www.humanmetrics.com/cgi-win/jtypes2.asp | Personality test based on C. Jung and I. Briggs Myers type theory | Humanmetrics Jung Typology Test™ instrument uses methodology, questionnaire, scoring and software that are proprietary to Humanmetrics, and shall not be ... |
| http://test-ipv6.com/ | Test your IPv6. | This will test your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address. ... Test your IPv6 connectivity. JavaScript ... |
Każda pozycja wyników jest zapisywana w tablicy z 3 zagnieżdżonymi elementami - link ($link), anchor ($anchor), snippet ($snippet)
Inny przykład - lista powiązanych słów kluczowych, która jest zapisywana w tablicy $related:
| Słowo kluczowe ($key) |
|---|
| test wwe |
| depression test |
| test my speed |
| wonderlic test |
| test personality |
| act test |
| jiggle test |
| bipolar test |
Jak widać, w tej tablicy jest tylko jeden zagnieżdżony element - słowo kluczowe ($key)
Numeracja elementów tablic zaczyna się od 0, przykład dostępu do poszczególnych elementów tablicy:
$serp.0.link- pierwszy link z wyników$serp.3.anchor- czwarty anchor z wyników$related.0.key- pierwsze powiązane słowo kluczowe
Bardziej szczegółowo formatowanie prostych wyników i tablic zostanie opisane poniżej
Zasady formatowania
Po tym, jak scraper zebrał dane w prostych wynikach i tablicach, należy je wyświetlić (zapisać do pliku) w odpowiednim formacie. Dla wygody i funkcjonalności w A-Parser wykorzystywany jest silnik szablonów Template Toolkit. Przeanalizujmy często używane konstrukcje, w tym celu skorzystamy z narzędzia Testowanie szablonów. Wybierzmy projekt dla scrapera
SE::Google:

Na zrzucie ekranu przedstawiono 3 pola:
- JSON - wewnętrzna reprezentacja danych w scraperze
- Template - szablon, według którego odbywa się formatowanie wyniku
- Result - bezpośrednio przekształcone dane według wskazanego szablonu, właśnie w takiej formie wynik zostanie zapisany do pliku
Zmieniając szablon możemy zmieniać wygląd wyniku, rozważmy następujący szablon:

Tekst w polu Template (Szablon):
Raport dla zapytania: $query
Konkurencja: $totalcount
Lista linków, anchorów i snippetów:
$serp.format('$link $anchor\n$snippet\n\n')
Wyróżnijmy główne zasady:
- Zwykły tekst jest wyprowadzany do wyniku bez zmian
- Aby wyprowadzić proste wyniki, należy w odpowiednim miejscu umieścić zmienną zawierającą pożądany wynik z prefiksem
$ - Do formatowania tablic używana jest metoda
.format, o której nieco niżej \nodpowiada za przejście do nowej linii
Formatowanie tablic
Przeanalizujmy konstrukcję:
$serp.format('$link $anchor\n$snippet\n\n')
Ten zapis oznacza, że dla tablicy $serp należy wywołać metodę .format z parametrem '$link $anchor\n$snippet\n\n'. Metoda .format łączy w ciąg znaków wszystkie elementy tablicy według szablonu podanego w parametrze, sam szablon oznacza: dla każdego elementu tablicy $serp wyprowadź link i anchor oddzielone spacją, następnie od nowej linii wyprowadź snippet, po czym następują jeszcze dwa przejścia do nowej linii, tworząc w rezultacie pustą linię między wynikami.
Użycie systemu szablonów
Wyprowadzanie zmiennych
Aby skorzystać z systemu szablonów, należy wstawić tagi [% %], a wewnątrz tagów wprowadzić logikę, która ma zostać wykonana.


Przejście po tablicy
Do wyprowadzania elementów tablicy należy użyć konstrukcji FOREACH:
[% FOREACH i IN p1.list;
i.cms _ "\n";
END %]
Więcej informacji i przykładów dotyczących systemu szablonów znajduje się w Cechy pracy szablonów w A-Parser.
Przykłady
Wyprowadzanie konkurencji
Wyświetlanie konkurencji dla zapytania (liczby wyników dla zapytania) dla wszystkich scraperów wyszukiwarek (
SE::Google,
SE::Yandex...).
Format wyniku:
$query: $totalcount\n
Przykład wyniku:
test: 3910000000
viagra: 278000000
okna pvch: 3220000
...
Scrapowanie linków
Wyprowadzanie linków z wyników wyszukiwarek.
Format wyniku:
$serp.format('$link\n')
Przykład wyniku:
http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
http://www.humanmetrics.com/cgi-win/jtypes2.asp
http://html5test.com/
http://test-ipv6.com/
...
Scrapowanie podpowiedzi
Wyprowadzanie podpowiedzi wyszukiwarek.
Format wyniku:
$results.format('$suggest\n')
Przykład wyniku:
testowy serwer tanki online
testy gia z rosyjskiego
przepis na ciasto na naleśniki
testicula
ciasto na pizzę na mleku
Wyprowadzanie danych o zapytaniu
W
Net::HTTP i scraperach na nim opartych dodatkowo dostępne jest wyświetlanie:
$proxy- proxy, na którym wykonano zapytanie$headers- nagłówki odpowiedzi$code- kod odpowiedzi$reason- status odpowiedzi

Wyprowadzanie wartości zmiennych w JSON
Wyprowadzanie wszystkich przekierowań zapytania
Dla tego zadania dostępna jest zmienna $response, która pozwala pobierać dowolne zmienne zapytania, w tym wszystkie poprzednie przekierowania.
Format wyniku:
$response.Redirects.format('$URI\n--> ')$response.URI
Wynik pracy scrapera:

Wyprowadzanie do JSON z użyciem systemu szablonów do zapisu daty
W przykładzie pokazano wyświetlanie wyników scrapera
Net::Whois w formacie JSON.

W rezultacie otrzymamy sprawdzaną domenę, datę w momencie sprawdzenia oraz wynik sprawdzenia. Jak widać w Formacie wyniku, datę pobieramy za pomocą systemu szablonów Template Toolkit.
Format wyniku:
{
"domain": "$query",
"date": "[% USE d = date(format = '%d.%m.20%y', locale = 'C');d.format() %]",
"expire": "$p1.expire_date",
},
Przykład wyniku:
[{
"domain": "a-parser.com",
"date": "05.05.2021",
"expire": "25.02.2022",
},
{}]
Pobierz przykład
Jak zaimportować przykład do A-Parser
eJxtVG1v2jAQ/ivWCUQrZaxM2pdM+0BRkTYx6ErRPgQ0efWFeXXszHYYVZT/3nMS
EtruQyTf23P33EtK8Nw9uluLDr2DOCkhr98QwxJ9HP/4baRj79jNkWe5QjaBCHJu
HdrgnZw5kUFgygvlYbeLgFDo6ebGZjyglVvNGNuCMBmXegsxvQd/C7RPW4hONu6x
sSRDtlnfMME+s6C8SGsYkkZDMR5m4w9Xw6dRxJR54FQUqWejy09i3LhdXLLhrkfF
Yy5tizvIJ+NG/tkkI6eKPugKXvMD3hsqOJUKe/WcpCXPkAyDEBmsXbqxP3py5UJI
L43mqmEdOtR3YqMl0aV4bcg3MJfo5tZkfa66HaeOJW17gCCKOvZ7EwNxypXDCByV
OucUKl5bpEfLvbGrPNRD+hKMniq1wAOq3q3Gvy6kEjTOaUpBX9rA/7us3mBUHb3z
VAe0/yzVALG3BYHUwvXqWx8kzMLsibj4RbSVzKQn2c1MocOuXJHyETHvWrYMLcuM
xS5LA9zmpvXNUQtyTPqJTfNWV1Y7eEXkxWBeKh+MTuV+RRSsFHjyLPQ93clKz0y4
gsBMF0rRYBze9Qsyde0ggtC18E3wrE4R2Lf3EoE3Rrmva9KF+7KSFvBjKDCjXp5n
bSFp69XmbnFugbOlqrMnJ/F9c3Ku3tLAkNZ3b2ixiFq16865+weU50cdlxWN64+7
bZwCdK2MgDrkaBYQT6pnHsF5pA==
Sprawdzanie witryny pod kątem obecności w Google News według słowa kluczowego

Format wyniku:
[% linksToOneString = p1.serp.format('$link. ');
matches = linksToOneString.match('.+?(' _ p1.query.domain _ ').+?');
IF matches.0;
p1.query.orig _';yes' _ "\n";
ELSE;
p1.query.orig _';no' _ "\n";
END %]
Przykład wyniku:
scraper google|a-parser.com;no
scraper google|forbes.ru;yes
Pobierz przykład
Jak zaimportować przykład do A-Parser
eJylVVFv2jAQ/iuR1YpWo1EQ7UuqaaIMpk6stKV9AoRccqQeju3aCQVR/vvOTkjS
ruNlEoq4u+++O9+dz1uSUrM0txoMpIaE4y1R7j8JyagXhj+kjDl4Z173GeZLL5IJ
ZcLDX2EQ8Go8WNNEcSBNoqg2oC3PuOaOhggWNOMpaW5JulGA7HIFWrPIGlmEsqIx
zGUmEENWlGeIae3+DccwqkIS8WrIATRnYmkUumCQGn9wwCXmNfr7x0Psz3Wozg4m
omtQTkU8O4xXWq43GlLNwNQ8W0EQkN102iTYLKyr6UudUNu08fFEuNM+yKGAETqK
2PvqqZZvK+YvHO6kcWQxvtc4vZwIVMyfwSDqo6PvTCcN/8u3k4Y3sywvGeiNX8zB
DAnQ5lg+CTvzJmSCFuLM132viOQHqCi5pGYIbVxuwDTeufQGo95nQCE/4G6+T8Tx
lJTFGNEVPEgsxoK54dvXCKUbmtj6HUU0BWvdF+TUT9d28mgUsZRJQXleUTvKVZUf
BXvJx00i1maFbelrmaAqBUfgUt13Y0yOnEyQInO+d7kPCReUG2gSg6n2KSYSlZZU
Z2hgKWiaSj1UNh1Ub4kUHc4HsAJe+Tv6q4zxCK9dZ4FO14Xj55DhXxy78nT1UDiG
rxpzKFmcdDX8VXlFciBjPHj0hMfmLGEpyqbrrnBIAlQuAVRZshtbskRqKMMUzEV0
XEEKhJ35qmMdVaneHcMtKiMzPbfUeY2b+ztk3PSNFGe2IQZwKeUFIW8WJG1f9i75
IJPprmpyLQYq51IsWDwsruV+HDLxgGtzKLrSLj5bJpFxjk02cF8NW8cUTbVCdd6P
zl0XwlZyvyQxScnNz1F+cqUZ5nxhE0ywMfWoBeWccv54P6hbSDWgKEyy4Ly9cN/A
fs/zb8tpLnKN54S2E9rV//bTGz3L97o/lwneuf/iwvv2hBsAt55NO4VYYh9sN939
CUkvf0vssoO1oiKCKL8SO9ej4oEp36tt/ZkJtzucy9/mNgfZqlsI6rB9BofOPil/
AGn6WSM=
Wyprowadzanie wartości timestamp w formacie daty
Czasami zdarza się, że w wynikach nie ma zwykłej daty, ale jest wartość timestamp, jak w scraperze
Social::Instagram::Tag. Tę wartość można przedstawić w formacie daty, używając silnika szablonów Template-Toolkit.

Format wyniku:
[% USE date;
query.orig _ ": total posts - " _ postscount _ "\nPosts:\n";
FOREACH i IN posts;
d = date.format(i.time, format => '%d.%m.20%y');
i.link _ " - " _ d _ ":\n";
i.text _ "\n";
END %]
Przykład wyniku:
sport: total posts - 96500663
Posts:
https://www.instagram.com/p/COfJHshAkeD/ - 05.05.2021:
Quelques exemples de notre nouvelle campagne de communication personnalisable avec le nom des clubs 😀
Vous préférez quel visuel : 1, 2, 3, 4, 5 ? 🤔
#clubnormand #tennis #padel #beachtennis #tenniscourt #padelcourt #beachtenniscourt #lnt #LigueNormandieTennis #🎾 #sport #normandie #normandietourisme
https://www.instagram.com/p/COfJG7olavg/ - 05.05.2021:
💥 Sau màn lật đổ “Bà già” thành công, Nửa xanh thành Milan chính thức vượt qua Nửa đỏ về số lần lên đỉnh nước Ý nhiều nhất lịch sử.
-----------------------------
➖ Website: https://webthethao247.com/
➖ https://g.page/webthethao247?share
#wtt247 #webthethao247 #thethao #sport #bongda #SerieA #InterMilan #Juventus #ACMilan
https://www.instagram.com/p/COfJG1Hg7ax/ - 05.05.2021:
Which Skill was better 1 or 2? 🤔👇
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
________________________________________
Leave a Like 👍🏽
Subscribe for more 🔔
Leave your thoughts in the Comments 💬
________________________________________
❌Ignore the Tags ❌
#football #soccer #fussball #futbol #fifa #championsleague #bundesliga #ucl #footballmemes #goal #transfer #sports #penalty #ultimateteam #pacybits #fut #ultras #laliga #freekick #referee #sport #calcio #messi #ronaldo #skills #premierleague #foul #footballseason
https://www.instagram.com/p/COfIlXqhfAa/ - 05.05.2021:
Be Fuckin’ Ready 🤣🤣🤣
Get ready to fly!!!! 🏐🏐🏐🏐
Follow - @crackonkings
#beachball #nalin&kane #trance #music #90s #onyerhead #festival #party #afterparty #love #summer #uk #happy #sesh #crackon #football #sport #festivaloutfit #festivalfashion #sun #dj #dancing #club #festivalgirl #house #techno #rave
...
Pobierz przykład
Jak zaimportować przykład do A-Parser
eJx1VNtuGjEQ/RXLCkoj0VVSqS9bpRKhoFJRNuXyxKLKxQa58dqO7aVBiH/vjPeW
pM0+7RzPzDlzsU80MP/g753wIniark/Uxn+a0oXZSqbSdKJ9YHvHijRdsj15T5ay
EAAVlgRDOAuCiCewlKB9apnzwmGm9RsJwImLHStVoP0TDUcrgMschHOSYwbJwd4Z
V7AASqIbPTBVotu6R1aLUeT8lOtcP5bCHRPj5J78JDlNQVBgiljjgwehOQU4GltT
6hB98lzfI5LCT05jlnE2Hw2GX4kkk1nljnDg5DYyJZWYdzIJUHifVCa5/Uwuezzp
FcmH697x8gpiCHwyUVI/RKpGAa/ENYSVVxBPraAIj2ZfSG9Dz5tNn1aF+3Fkgrov
7E1Sz6U9XLCDWBrslYydb2LAmrECu3WB6vG0qeAqCU+YgXEugzSaqYoBx9WxrrR8
jN3WBnyxxVL4sTMFQKi6Bo+NujW9iDaFFGWM/VHF0HTHlBd96kHqmIEQ/vpEBuFY
MC6zqAfwEzV6oNRUHITq3GL+u1IqDrs12EHQpA78v0v2T45zW95zKti6Pw40tFmi
dZd976K4mZo9VM5/Qd1KFjKA7Ye4T4BeA/gghG17NsOeFcaJlqbOXLPDTbNC44p3
IxvYDnpRxouxvAS3Ru/kPquvTeNZ6iVc50wPDV5HrEuXSsFYvJh36zHw9RjQ6AS+
Dh5GCiy9ua40GKP8t0Ul1ToJ6/cRBRbQyeesdcotU2o1nz4/wUAfjM30yLlX44uL
Qb01Drm2sLx7A2sFpZ037cvSPlWnt96X9HSGuf3291UAFonugEG3PAyFpjfnvwdy
t1Y=