NEWS
Alias auf Shelly - unerwartete Änderung des Aliastyps
-
Hallo,
bei meinem Ziel eine Lampe via Bewegungsmelder[BWM] (Aktivität ja/nein+ Lichstärke Aqara RTCGQ14LM ) und einem Schalter shelly 1l (via mqtt angeschlossen, es wurde für diesen Typ keine andere Möglichkeit angezeigt, das ist aber hier auch nicht das Problem) zu steuern bin ich auf folgendes Problem gestoßen. Das Script arbeitet mit Bugfix vgl Blocklyscreenshots und Ausgabe einwandfrei, aber ich würd gerne den Bugfix loswerden, daher bitte angeben ob dies von mir ein Anwender/Logikfehler ist oder aber ein Bug
Szenario 1: Ich komme in den Raum, Licht geht an, ich verlasse den Raum 1min später ist das Licht aus. - Check
Szenario 2: Trivial ich mache das Licht via adminoberfläche mit Hilfe des Aliases an und aus - Check
Hier aber schon einmal dazu der Aufbau des Aliases:{ "common": { "name": "EGKuecheFensterLicht", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": true, "def": false, "alias": { "id": { "read": "mqtt.0.shellies.shelly1l-XXX.relay.0", "write": "mqtt.0.shellies.shelly1l-XXX.relay.0.command" }, "read": "val=='on'", "write": "val?'on':'off'" }, "custom": { "influxdb.0": { "enabled": true, "storageType": "", "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": false, "changesRelogInterval": 0, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "enableDebugLogs": false, "debounce": 0 } } }, "type": "state", "native": {}, "_id": "alias.0.eg.Kueche.EGKuecheFensterLicht", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1676219920642 }
Zur Erklärung:
Der Shelly hat zwei unterschiedliche Ort, lesen kann man via: mqtt.0.shellies.shelly1l-XXX.relay.0 [Zeile 12] hier gibt es die Werte on und off, zum schreiben gibt es den Punkt mqtt.0.shellies.shelly1l-XXX.relay.0.command [Zeile13]- wieder per on und off, dieses wollte ich aber als Boolsche Variabe haben, deshalb mit den zwei Funktionen (zum lesen: val=='on' [Zeile 15] und zum schreiben: val?'on':'off [Zeile 16]) angepasst. Dies funktioniert soweit ganz gut.
Szenario 3:
Ich schalte den Shelly manuell ohne Script am laufen: im Adminbereich wird der alias entsprechend meines Schaltens korrekt angezeigt - Check
Jetzt kommen wir zu Scenario 4 wo ich den Bug vermute:
Ich lasse das Licht via Script anschalten und schalte das Licht nun manuell aus. Nach >1 Minute warten, ohne dabei den BWM auszulösen will ich nun das das Licht wieder angeht, dabei passiert jedoch folgendes: Das Licht bleibt aus. Nach intensiver Fehlersuche stellte sich herraus das durch die manuelle Betätigung des Schalters der Shelly der Datentyp des Alias von boolean auf string geändert hat und ich nun die nativen Befehle zum lesen nutzen muss (on/off). Dies sehe ich als Fehler an, zumindest würde ich hier erwarten das es bei boolean bleibt/was wäre hier eine Alternative?
Zum besseren Verständnis anbei die Bilder des Blockly zusammen mit der Debugausgabe.
Anbei nun noch die Debugausgabe
#Start des Blocklys #Szenario 1 23:40:25.185 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0: Bewegung 23:40:25.187 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:boolean Wert ist: false 23:40:25.187 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 1: erkanntfalse 23:40:25.188 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 2: Licht ist aus 23:40:25.188 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 23:40:57.142 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0: Bewegung 23:40:57.145 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 1: nicht erkannt 23:41:25.190 debug javascript.0 (582687) script.js.EG.kueche.beweg2: X: Licht ausschalten #Szenario 1 Ende #Szenario 4 23:41:38.344 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0: Bewegung 23:41:38.346 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:boolean Wert ist: false 23:41:38.347 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 1: erkanntfalse 23:41:38.347 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 2: Licht ist aus 23:41:38.348 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten #Hier wird die schelly manuell ausgeschaltet und der Raum verlassen 23:42:10.318 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0: Bewegung 23:42:10.320 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 1: nicht erkannt 23:42:38.348 debug javascript.0 (582687) script.js.EG.kueche.beweg2: X: Licht ausschalten #Hier wird der Raum wieder betreten 23:42:46.041 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0: Bewegung #Hier wird nun der mMn. Bug deutlich: 23:42:46.042 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:string Wert ist: off 23:42:46.043 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0.5: Bugfix wrong typestring Wert ist: off 23:42:46.043 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0.5b: aus 23:42:46.044 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 1: erkanntfalse 23:42:46.044 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 2: Licht ist aus 23:42:46.044 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 23:43:18.019 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 0: Bewegung 23:43:18.020 debug javascript.0 (582687) script.js.EG.kueche.beweg2: 1: nicht erkannt 23:43:46.046 debug javascript.0 (582687) script.js.EG.kueche.beweg2: X: Licht ausschalten #Szenario 4 Ende
Hinweis: Es geht mir hier nicht um ein besseres Script sondern schlicht darum habe ich einen Fehler dabei gemacht oder ist das hier tatsächlich ein Bug(siehe Zeile 25: Typ=string erwartet hätte ich hier bool )? Der Aliastyp ist ja boolean, was man auch in Szenario 1(z.B. Zeile 4 Typ=boolean) gut sehen kann. Kann das erklärt bestätigt/gelöst werden?
Weitere Scenarien habe ich nicht geprüft...
Entschuldigung für den langen Text aber ich hatte keine Idee das viel kürzer hinzubekommen.
Bin dankbar für jede Hilfe.Systemdata Bitte Ausfüllen Hardwaresystem: PI4 Arbeitsspeicher: 4GB Festplattenart: USB-Stick Betriebssystem: Debian GNU/Linux 11 (bullseye) Node-Version: Nodejs-Version: 18.14.0 NPM-Version: Installationsart: Manuell Image genutzt: Nein Ort/Name der Imagedatei: JS Controller: 4.0.24
-
@iomas ok ich verstehe es nicht nicht. wo genau ändert sich ein datentyp?
Zeig bitte mal das generierte blockly JavaScript ( im blockly Editor Fenster oben das blockly/Js Icon klicken.
-
@apollon77 In der Debug Ausgabe in Zeile: 4/14 ist er booelan, in Zeile 25 ist er string
anbei das JS:
var LichtNachdetektionAnbleiben, schwellWertLicht, idLichtSchalter, LichtDurchBewegAn, lichtIstAn, verl_C3_A4ngerungLicht, initLichtAus; // Beschreibe diese Funktion … async function Licht_ausschalten() { console.debug('X: Licht ausschalten'); LichtDurchBewegAn = false; setStateDelayed(idLichtSchalter, false, false, parseInt(((0) || "").toString(), 10), false); } LichtNachdetektionAnbleiben = 60000; schwellWertLicht = getState("0_userdata.0.Technik.EG.Kueche.EGKuecheFensterBeweg.BrigthnessSchwellwert").val; idLichtSchalter = 'alias.0.eg.Kueche.EGKuecheFensterLicht'; LichtDurchBewegAn = false; on({id: "alias.0.eg.Kueche.EGKuecheFensterBeweg"/*EGKuecheFensterBeweg*/, change: "any", ack: true}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.debug('0: Bewegung '); if ((obj.state ? obj.state.val : "")) { lichtIstAn = getState(idLichtSchalter).val; console.debug((['0.1: Hinweise: Typ:',typeof lichtIstAn,' Wert ist: ',lichtIstAn].join(''))); if (true && typeof lichtIstAn != 'boolean') { console.debug((['0.5: Bugfix wrong type',typeof lichtIstAn,' Wert ist: ',lichtIstAn].join(''))); if (lichtIstAn == 'on') { lichtIstAn = true; console.debug('0.5a: an'); } else { lichtIstAn = false; console.debug('0.5b: aus'); } } console.debug(('1: erkannt' + String(lichtIstAn))); if (lichtIstAn) { console.debug('2: Licht ist bereits an'); if (LichtDurchBewegAn) { console.debug('3: verlängere Lichtdauer'); (function () {if (initLichtAus) {clearTimeout(initLichtAus); initLichtAus = null;}})(); (function () {if (verl_C3_A4ngerungLicht) {clearTimeout(verl_C3_A4ngerungLicht); verl_C3_A4ngerungLicht = null;}})(); verl_C3_A4ngerungLicht = setTimeout(async function () { await Licht_ausschalten(); }, parseInt(LichtNachdetektionAnbleiben)); } else { console.debug('3:nothing2do Licht nicht durch Algo gesetzt'); } } else { console.debug('2: Licht ist aus'); if (getState("alias.0.eg.Kueche.EGKuecheFensterBewegLux").val < schwellWertLicht) { console.debug('3: kleiner Schwellwert->Licht anschalten'); LichtDurchBewegAn = true; setStateDelayed(idLichtSchalter, true, false, parseInt(((0) || "").toString(), 10), false); initLichtAus = setTimeout(async function () { await Licht_ausschalten(); }, parseInt(LichtNachdetektionAnbleiben)); } else { console.debug('3: größer Schwellwert'); } } } else { console.debug('1: nicht erkannt'); } }); //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyJTNBTiU1QmNJJTNGJTdEMiU3Qjh3ZHZmJTNGOGM0VyolMjIlM0VMaWNodE5hY2hkZXRla3Rpb25BbmJsZWliZW4lM0MlMkZ2YXJpYWJsZSUzRSUzQ3ZhcmlhYmxlJTIwaWQlM0QlMjJofiU3RHQ5TUxMJTVEaXRfViU3Q1ZSWTNNJTI1JTIyJTNFc2Nod2VsbFdlcnRMaWNodCUzQyUyRnZhcmlhYmxlJTNFJTNDdmFyaWFibGUlMjBpZCUzRCUyMiUyNEhyYk9FLnE5UTU3NCU3RCU2MGJRNEklMjUlMjIlM0VpZExpY2h0U2NoYWx0ZXIlM0MlMkZ2YXJpYWJsZSUzRSUzQ3ZhcmlhYmxlJTIwaWQlM0QlMjJOKSUyQioxfjNaU2xtKmR4ZmVoJTYwJTVCRSUyMiUzRUxpY2h0RHVyY2hCZXdlZ0FuJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIycmglMjMlMkZOYkglM0ZWLkpOcWMlMjNUclAlN0MlNUQlMjIlM0VsaWNodElzdEFuJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMHR5cGUlM0QlMjJ0aW1lb3V0JTIyJTIwaWQlM0QlMjJ2ZXJsJUMzJUE0bmdlcnVuZ0xpY2h0JTIyJTNFdmVybCVDMyVBNG5nZXJ1bmdMaWNodCUzQyUyRnZhcmlhYmxlJTNFJTNDdmFyaWFibGUlMjB0eXBlJTNEJTIydGltZW91dCUyMiUyMGlkJTNEJTIyaW5pdExpY2h0QXVzJTIyJTNFaW5pdExpY2h0QXVzJTNDJTJGdmFyaWFibGUlM0UlM0MlMkZ2YXJpYWJsZXMlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjIqLSUzRkglNjBXbjRnRCU3RDBfKSk3WW9kRCUyMiUyMHglM0QlMjIxNjMlMjIlMjB5JTNEJTIyMTMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMiUzQU4lNUJjSSUzRiU3RDIlN0I4d2R2ZiUzRjhjNFcqJTIyJTNFTGljaHROYWNoZGV0ZWt0aW9uQW5ibGVpYmVuJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJwdTZVLkMlMjNXUmJQJTVEUDkoTXglNDAtSyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTYwMDAwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMiUyQ2c2YX44dXIlMkZPbWElM0RkVkYzJTVEeCU1QiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyaH4lN0R0OU1MTCU1RGl0X1YlN0NWUlkzTSUyNSUyMiUzRXNjaHdlbGxXZXJ0TGljaHQlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJ2aEN3Zy05bDNNb0NpVFZNJTdCZzQ4JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLlRlY2huaWsuRUcuS3VlY2hlLkVHS3VlY2hlRmVuc3RlckJld2VnLkJyaWd0aG5lc3NTY2h3ZWxsd2VydCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjIlM0YlN0RwKV83bDcyTHclMjMlMjNXdV8lN0JqQ2olMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMiUyNEhyYk9FLnE5UTU3NCU3RCU2MGJRNEklMjUlMjIlM0VpZExpY2h0U2NoYWx0ZXIlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZmllbGRfb2lkJTIyJTIwaWQlM0QlMjI5WCU2MGglNjA0ZElwcHQyYiUyM0lNNyUyNTA1JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyb2lkJTIyJTNFYWxpYXMuMC5lZy5LdWVjaGUuRUdLdWVjaGVGZW5zdGVyTGljaHQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyJTVCc001QyFoeWUlN0M2RX5JbFlqNTluJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJOKSUyQioxfjNaU2xtKmR4ZmVoJTYwJTVCRSUyMiUzRUxpY2h0RHVyY2hCZXdlZ0FuJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2Jvb2xlYW4lMjIlMjBpZCUzRCUyMl9zJTJCJTdCJTQwYSUyQ2RzZk8lNUQlNUQqSXdOWTMlNUQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJCT09MJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb24lMjIlMjBpZCUzRCUyMnUxKmw4KUdSQSUzRlBCaiU1QlJBMGElMjRTJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxpYXMuMC5lZy5LdWVjaGUuRUdLdWVjaGVGZW5zdGVyQmV3ZWclM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTkRJVElPTiUyMiUzRWFueSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQUNLX0NPTkRJVElPTiUyMiUzRXRydWUlM0MlMkZmaWVsZCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyWWFRYSU3QiU1RHJVOUx4aHdYclclMjRGJTI1fiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFZGVidWclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIydEUwKWpzcyUyRlNMSEp5ZCUzRi5MaTFHJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRTAlM0ElMjBCZXdlZ3VuZyUyMCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMjFJbTclM0ZLYnVVJTNBJTNCYyU3QyljJTNCJTI1ZFQlMkIlMjIlM0UlM0NtdXRhdGlvbiUyMGVsc2UlM0QlMjIxJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMiklMjQtbiU1RFklM0JfS2tZMyUyNU0qcUE5VEwlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFc3RhdGUudmFsJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMmYlM0RVZiU1QnRYTnhPa3lzdnklNUVrWDR3JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJyaCUyMyUyRk5iSCUzRlYuSk5xYyUyM1RyUCU3QyU1RCUyMiUzRWxpY2h0SXN0QW4lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlX3ZhciUyMiUyMGlkJTNEJTIyJTNEOCU0MGl5JTQwSDRtYylJVSU1RUl2JTVENmNhJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyT0lEJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMlc5LkczdCUzRmY5JTNEcnZPSDZjUWpGKCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMk5NaXYlM0QlMjMlMkIpJTdDJTI1JTQwJTJDKFhrSC0pU34lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMiUyNEhyYk9FLnE5UTU3NCU3RCU2MGJRNEklMjUlMjIlM0VpZExpY2h0U2NoYWx0ZXIlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjIlNURvb04pMzJYJTdEbSUzRmZWMDU1KUtEJTNEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VkZWJ1ZyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dF9qb2luJTIyJTIwaWQlM0QlMjIlNURqenkpTTR1cUNBJTIzSWNHfkdnVXMlMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyNCUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMiUzRHklMjN5WiUyRjI0NSUyMyUyNSU3RE0hZ1M0VyUyQiglMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMC4xJTNBJTIwSGlud2Vpc2UlM0ElMjBUeXAlM0ElM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBREQxJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udmVydF90eXBlJTIyJTIwaWQlM0QlMjJqJTNCaSUyNDJaSllQaiUyNGghJTNEJTJGZmY5Ry0lMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJVEVNJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyUHRNYmslNjAlNDAlNUQlM0QlMkMlN0JFX1UzQXptamYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMnJoJTIzJTJGTmJIJTNGVi5KTnFjJTIzVHJQJTdDJTVEJTIyJTNFbGljaHRJc3RBbiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBREQyJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyJTNBJTNGJTdCSFQlMkZwMGtjJTVFWnNSblNCQSUzQkklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTIwV2VydCUyMGlzdCUzQSUyMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkFERDMlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJTUF90ViU2MG5HdX4yb2t6UyU1RFMwMCU3QyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIycmglMjMlMkZOYkglM0ZWLkpOcWMlMjNUclAlN0MlNUQlMjIlM0VsaWNodElzdEFuJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIyd0dpJTdCYiU3Q3clM0JBTjEuLWwlNUIqeTh4cSUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX29wZXJhdGlvbiUyMiUyMGlkJTNEJTIyQjQlNUQpNDFVdSUzRCp0bHohZipkJTIzJTJGJTJGJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VBTkQlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19ib29sZWFuJTIyJTIwaWQlM0QlMjJ4N2ZxX1VmRXElM0IuJTI0VlMlNUQlMjRNQVQxJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQk9PTCUyMiUzRVRSVUUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyR0clN0RVQyklMjU4JTJGaDhxTjNxdG5SZW0lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRU5FUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnZlcnRfdHlwZSUyMiUyMGlkJTNEJTIyKkclNDAlM0ZSITZ0JTJCJTNBYmNIUDMlM0QpeiUzQTglMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJVEVNJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyJTJCb0o4JTYwNE81Zi56OWdzUSUzQTUlN0NFMyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIycmglMjMlMkZOYkglM0ZWLkpOcWMlMjNUclAlN0MlNUQlMjIlM0VsaWNodElzdEFuJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjIlMkJodEsqJTdCfiU0MFVzenAlNURyS01VKnpBJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRWJvb2xlYW4lM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyaXN2YW96TmtLJTI0JTdDenYyJTNEMGphfmElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWRlYnVnJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0X2pvaW4lMjIlMjBpZCUzRCUyMjclNjByIWglM0RCYVB6MWtFblBob34lMjMlMjUlMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyNCUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMm5oa1BxdENhdlM4QyU2MGFLYUZGME8lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMC41JTNBJTIwQnVnZml4JTIwd3JvbmclMjB0eXBlJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnZlcnRfdHlwZSUyMiUyMGlkJTNEJTIyKiglMjNYJTJCY3goKkR5JTQwTUV6JTNCcSU1RS5BJTIyJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySVRFTSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMnlhZTU4JTVEKHBEazElNUUlN0MlMjRuJTVCMWI1JTVFJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJyaCUyMyUyRk5iSCUzRlYuSk5xYyUyM1RyUCU3QyU1RCUyMiUzRWxpY2h0SXN0QW4lM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQUREMiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMmltY1RmSDBWM2IlMjMpfiU1RGM4JTdEKlkqJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUyMFdlcnQlMjBpc3QlM0ElMjAlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBREQzJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyLnlMcCU1RFIlMjVCZHRuJTYwJTNEQyU3RDVUQ0pNJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJyaCUyMyUyRk5iSCUzRlYuSk5xYyUyM1RyUCU3QyU1RCUyMiUzRWxpY2h0SXN0QW4lM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJzX2ZYQzIlNDBydGlXTiUyM2JKVDRnQkolMjIlM0UlM0NtdXRhdGlvbiUyMGVsc2UlM0QlMjIxJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJ3JTNCSCUyM3lIM2FlJTVEeiUzRGwyJTVFUkk0KiUyMyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjIlNUV5NWdMdiU1RS0lNDBlZiUzRjQ1a1ZWdXIwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJyaCUyMyUyRk5iSCUzRlYuSk5xYyUyM1RyUCU3QyU1RCUyMiUzRWxpY2h0SXN0QW4lM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyTk8lNUJWKHElM0IlMjNkLTlTU1QlMkYwbU9iJTNEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRW9uJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjJWQldsJTYwZyUyQyUzQSU2MFUxJTJCNiUzRkMhX3pVYSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIycmglMjMlMkZOYkglM0ZWLkpOcWMlMjNUclAlN0MlNUQlMjIlM0VsaWNodElzdEFuJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2Jvb2xlYW4lMjIlMjBpZCUzRCUyMjNiIW0oJTI0QmolMjQ2cnFsJTI1VCU3RGhGR3olMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJCT09MJTIyJTNFVFJVRSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyJTNEJTI0fjhiJTdCIVhkNnp6YjMpc2pHa2MlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWRlYnVnJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMmUlN0NhSSUyRklLJTdCSSU1RUZBS0k2ci4tNzIlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMC41YSUzQSUyMGFuJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkVMU0UlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjJpJTQwJTdEcWtSeCl+UHguUSU3RHc4ZSUyQzJGJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJyaCUyMyUyRk5iSCUzRlYuSk5xYyUyM1RyUCU3QyU1RCUyMiUzRWxpY2h0SXN0QW4lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfYm9vbGVhbiUyMiUyMGlkJTNEJTIyTmR0a0taUnR1TlRYMVglNUIyaXJlRiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkJPT0wlMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyJTIzRiU1RSF+flVIRjc4MUdpNTNDJTYwIWQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWRlYnVnJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMk5pY3ZPRVUtOCUyRkQ2Z2VDTCUyQyUyNVZuJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRTAuNWIlM0ElMjBhdXMlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyX0Y0QXNJKiU3RDMlN0MyJTdCJTIzRiU0MCU1QmUwOTIlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWRlYnVnJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMmRrbFU4MURtMW1LMUg0cmklNUUlN0J0KiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRleHRfam9pbiUyMiUyMGlkJTNEJTIyOXVKLmpmY01ELSU3QiU3QyUyQyUzRCUyRkwxcng5JTIyJTNFJTNDbXV0YXRpb24lMjBpdGVtcyUzRCUyMjIlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkFERDAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjIuRFNQQ3ZpdilnQTV5UThvRi1COSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UxJTNBJTIwZXJrYW5udCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkFERDElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJsJTNBNS5KRnAlN0Jra0FPUlpGMUZQViklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMnJoJTIzJTJGTmJIJTNGVi5KTnFjJTIzVHJQJTdDJTVEJTIyJTNFbGljaHRJc3RBbiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMiU2MEhNJTI0Ym9aSVc4RSU0MDJBSiU3QkN4KEIlMjIlM0UlM0NtdXRhdGlvbiUyMGVsc2UlM0QlMjIxJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjI0NCUzQVlMcSU1Qml6JTVEJTNGJTNBQnlDMyElM0FpbCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIycmglMjMlMkZOYkglM0ZWLkpOcWMlMjNUclAlN0MlNUQlMjIlM0VsaWNodElzdEFuJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJua0ZDJTI0dyUyQyUyNEIlNUQlM0ElNUQuJTdDJTdEam5DM2QlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWRlYnVnJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMkpzZUVrLX5UJTNBamg2KWFMLmIydSElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMiUzQSUyMExpY2h0JTIwaXN0JTIwYmVyZWl0cyUyMGFuJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIybVg5MlQlM0JpOVF0JTNGJTI1WSlvcXYlNUV6ZSUyMiUzRSUzQ211dGF0aW9uJTIwZWxzZSUzRCUyMjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMm1vd3JibDElMjNMTmh5b1RfLU5oJTVCZyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyTiklMkIqMX4zWlNsbSpkeGZlaCU2MCU1QkUlMjIlM0VMaWNodER1cmNoQmV3ZWdBbiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyJTJDWXE1QlNSZiFYKUczdkZIZGslM0ExJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VkZWJ1ZyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJsNS1NJTJCJTI0KmZ2MyU3RClTaSpud3glNURoJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRTMlM0ElMjB2ZXJsJUMzJUE0bmdlcmUlMjBMaWNodGRhdWVyJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c19jbGVhcnRpbWVvdXQlMjIlMjBpZCUzRCUyMndFSTBiU2lXOUdibDglNUVJciUzQSUyRn4lM0ElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFaW5pdExpY2h0QXVzJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfY2xlYXJ0aW1lb3V0JTIyJTIwaWQlM0QlMjIqKlczJTVFJTYwZWYlMkMlNURRJTIzXyFRIUslN0QuRCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0V2ZXJsJUMzJUE0bmdlcnVuZ0xpY2h0JTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfc2V0dGltZW91dF92YXJpYWJsZSUyMiUyMGlkJTNEJTIyTX40WiUyRnklMkMlN0QlNUJxdiUyRiUzRiU1RU0hVXN2ISUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0V2ZXJsJUMzJUE0bmdlcnVuZ0xpY2h0JTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyJTdDWEV+bnhNdCklNDAuKTJKVnBOaVBYJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMTAwMCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyJTJDVHQlM0ZBZ1QlNUIxLnBLbG4lNDBYJTVCIWtBJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjIlM0FOJTVCY0klM0YlN0QyJTdCOHdkdmYlM0Y4YzRXKiUyMiUzRUxpY2h0TmFjaGRldGVrdGlvbkFuYmxlaWJlbiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxub3JldHVybiUyMiUyMGlkJTNEJTIyJTYweiU3QktCS1hMJTQwSi1DJTYwKGNUSWJ1UyUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMkxpY2h0JTIwYXVzc2NoYWx0ZW4lMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRUxTRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJHMWJIJTJGJTdCT2c3JTNBQlgoKiElNUVNZDQxJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VkZWJ1ZyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjItZGJoJTJDV0ouRiUzRjgxUEIhaHpuZSU3QiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UzJTNBbm90aGluZzJkbyUyMExpY2h0JTIwbmljaHQlMjBkdXJjaCUyMEFsZ28lMjBnZXNldHp0JTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRUxTRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJOJTNCbHApYUMlMjQlNjBmKWYuektJVHpNUyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFZGVidWclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyWiU3Q3MlNDAtWSU3Q2N6d2wlN0IuMylGcFlufiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UyJTNBJTIwTGljaHQlMjBpc3QlMjBhdXMlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJSJTJDcWF1JTQwVWxacCU1QmslNUVFJTNEOSpYcXklMjIlM0UlM0NtdXRhdGlvbiUyMGVsc2UlM0QlMjIxJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJZKkNRay1aaE5fNHYlNUIlN0QlNUJsIUolNUJtJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VMVCUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyIV8lNjBKNGElN0IxJTdCS18lM0IlMkNQdCUzQSU2MCU2MGQ0JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWxpYXMuMC5lZy5LdWVjaGUuRUdLdWVjaGVGZW5zdGVyQmV3ZWdMdXglM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyekd6aEtQbk8uOENXZColM0RJLSUyMyUyNUQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMmh+JTdEdDlNTEwlNURpdF9WJTdDVlJZM00lMjUlMjIlM0VzY2h3ZWxsV2VydExpY2h0JTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyRihzJTNGdiUyRjBUTFRlQSU1RVZrZSUyNVBBWiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFZGVidWclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyaXBiISUzRih1TWpueVElNURYOC4lNUUlMkNfZyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UzJTNBJTIwa2xlaW5lciUyMFNjaHdlbGx3ZXJ0LSUyNmd0JTNCTGljaHQlMjBhbnNjaGFsdGVuJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjJSdTNkRU1PcSUzRH5kQyE4KjRCYiUzRHAlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMk4pJTJCKjF+M1pTbG0qZHhmZWglNjAlNUJFJTIyJTNFTGljaHREdXJjaEJld2VnQW4lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfYm9vbGVhbiUyMiUyMGlkJTNEJTIycCU0MDVKc05LfiUzRiU3QiUyNHBHZ1hRNCUyNTJnJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQk9PTCUyMiUzRVRSVUUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbF9leCUyMiUyMGlkJTNEJTIyXyUzRGRkT3FkNFE0ZyUyNDFzX1B2WXFpJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVFlQRSUyMiUzRWZhbHNlJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDTEVBUl9SVU5OSU5HJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMk9JRCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJmaWVsZF9vaWQlMjIlMjBpZCUzRCUyMlIzdFRJOGVDJTJGZSUyNXMlMkJyLSUyQk16QWMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJvaWQlMjIlM0VPYmplY3QlMjBJRCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyMEQzSDUlMjNmVWRfJTNBYkM5QmMuKDAzJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjIlMjRIcmJPRS5xOVE1NzQlN0QlNjBiUTRJJTI1JTIyJTNFaWRMaWNodFNjaGFsdGVyJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIybG9naWNfYm9vbGVhbiUyMiUyMGlkJTNEJTIyOSU2MDFTODR5VSU1RGx6OGhzd00qUGwyJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQk9PTCUyMiUzRVRSVUUlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyREVMQVlfTVMlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMi0oUyUyM0N5VTluZHolM0Jza1klM0RWdiUyQi0lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c19zZXR0aW1lb3V0X3ZhcmlhYmxlJTIyJTIwaWQlM0QlMjJJUCglM0I4ZnklN0RwZiU3Q0tzKiUyQ01ETjVqJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRWluaXRMaWNodEF1cyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyREVMQVlfTVMlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMnBzJTI1JTVFWGZNKiUzRHIlM0QlNUJUUHowcS5MMiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTYwMDAwJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJ1JTdCfmxEJTNGUn40cV8lMkNQLnJFJTVCZH5XJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjIlM0FOJTVCY0klM0YlN0QyJTdCOHdkdmYlM0Y4YzRXKiUyMiUzRUxpY2h0TmFjaGRldGVrdGlvbkFuYmxlaWJlbiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxub3JldHVybiUyMiUyMGlkJTNEJTIybSU3QiUyQ2xDMDJ0Tkk4al82TDMlM0IqcHklMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJMaWNodCUyMGF1c3NjaGFsdGVuJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkVMU0UlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyaGZVIW5JTCpXJTNBKiU3Q0p6JTI1aHZaJTdERSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFZGVidWclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIydyoxN3YlMkYlN0JoLiUyNEF2Sm4pQ1dHJTNCUiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UzJTNBJTIwZ3IlQzMlQjYlQzMlOUZlciUyMFNjaHdlbGx3ZXJ0JTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJFTFNFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZGVidWclMjIlMjBpZCUzRCUyMmMlM0RnKmZJJTIzLUx5JTIzJTJDSEslN0JHenNxNiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNldmVyaXR5JTIyJTNFZGVidWclM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIydGV4dCUyMiUyMGlkJTNEJTIyJTNCNSU3RDRQJTI0YTRLak1jYzZBbE9ZZDYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJURVhUJTIyJTNFMSUzQSUyMG5pY2h0JTIwZXJrYW5udCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZm5vcmV0dXJuJTIyJTIwaWQlM0QlMjJ1MHdSJTQweUhrbCUzQWQlMkIlMjQlNUJxJTI0SjhfZiUyMiUyMHglM0QlMjI4MzglMjIlMjB5JTNEJTIyOTYzJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRUxpY2h0JTIwYXVzc2NoYWx0ZW4lM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyU1RBQ0slMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJkZWJ1ZyUyMiUyMGlkJTNEJTIyZjB3LSU3REVGd1p2JTNCJTNEMUxDJTNBJTNBbUdqJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VkZWJ1ZyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJ0ViUyQ0s0JTI1QmYlM0EuUWd1Q1hHJTdEJTI0VSU1QiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRFWFQlMjIlM0VYJTNBJTIwTGljaHQlMjBhdXNzY2hhbHRlbiUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyJTNEZCUyRmglM0RTRU9tKCUzRG8lMjRrZUJUcDMlMkIlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMk4pJTJCKjF+M1pTbG0qZHhmZWglNjAlNUJFJTIyJTNFTGljaHREdXJjaEJld2VnQW4lM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfYm9vbGVhbiUyMiUyMGlkJTNEJTIyJTI1JTVEKjRYdmglNUQlM0JkZFElMjM2ZiUyNSU1RTMoJTNEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQk9PTCUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xfZXglMjIlMjBpZCUzRCUyMmRfSzEtRHElMkIlN0IyJTJDKldxLWUxXyUzQiU0MCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlRZUEUlMjIlM0VmYWxzZSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJPSUQlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfb2lkJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyb2lkJTIyJTNFT2JqZWN0JTIwSUQlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMmJkJTVCMUZqZlYlNUVkJTNGbWolN0JxdFpudCklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMiUyNEhyYk9FLnE5UTU3NCU3RCU2MGJRNEklMjUlMjIlM0VpZExpY2h0U2NoYWx0ZXIlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJsb2dpY19ib29sZWFuJTIyJTIwaWQlM0QlMjJ3aiUyQzByV2hwdWsyJTdCJTQwRlFRNWlqdiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkJPT0wlMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyMiUyQmJVSCU3Q2MlM0JsbmtXSyU1RGJSJTNEbFNLJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF
-
@iomas sagte: Debugausgabe
Passiert das auch, wenn die Read-Konvertierung weg gelassen wird (automatische Konvertierung)?
-
@paul53
Meinst du im Alias die Zeile 15 leeren "read": "val=='on'",?
Im Admin Adapter stet dann direkt val, das kann man wohl nicht löschen.
ich habe das jetzt mal getestet: allerdings ohne den javascriptadapter neu zu starten, ich hätte da ein anderes Ergebnis erwartet aber das folgende ist passiert:#case normal durch bewegungsmelder 19:32:50.355 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0: Bewegung 19:32:50.357 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:boolean Wert ist: false 19:32:50.357 debug javascript.0 (783) script.js.EG.kueche.beweg2: 1: erkanntfalse 19:32:50.358 debug javascript.0 (783) script.js.EG.kueche.beweg2: 2: Licht ist aus 19:32:50.361 debug javascript.0 (783) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 19:33:22.338 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0: Bewegung 19:33:22.339 debug javascript.0 (783) script.js.EG.kueche.beweg2: 1: nicht erkannt 19:33:50.366 debug javascript.0 (783) script.js.EG.kueche.beweg2: X: Licht ausschalten #case durch beweg an durch manuelles schalten ausgeschaltet 19:33:53.270 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0: Bewegung 19:33:53.270 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:boolean Wert ist: false 19:33:53.271 debug javascript.0 (783) script.js.EG.kueche.beweg2: 1: erkanntfalse 19:33:53.271 debug javascript.0 (783) script.js.EG.kueche.beweg2: 2: Licht ist aus 19:33:53.272 debug javascript.0 (783) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 19:34:25.254 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0: Bewegung 19:34:25.255 debug javascript.0 (783) script.js.EG.kueche.beweg2: 1: nicht erkannt 19:34:53.274 debug javascript.0 (783) script.js.EG.kueche.beweg2: X: Licht ausschalten 19:35:36.111 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0: Bewegung 19:35:36.113 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:string Wert ist: off 19:35:36.114 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0.5: Bugfix wrong typestring Wert ist: off 19:35:36.114 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0.5b: aus 19:35:36.115 debug javascript.0 (783) script.js.EG.kueche.beweg2: 1: erkanntfalse 19:35:36.115 debug javascript.0 (783) script.js.EG.kueche.beweg2: 2: Licht ist aus 19:35:36.117 debug javascript.0 (783) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 19:36:08.093 debug javascript.0 (783) script.js.EG.kueche.beweg2: 0: Bewegung 19:36:08.094 debug javascript.0 (783) script.js.EG.kueche.beweg2: 1: nicht erkannt 19:36:36.122 debug javascript.0 (783) script.js.EG.kueche.beweg2: X: Licht ausschalten
das verhalten hat sich nicht geändert :? soll ich den js adapter einmal neu starten?
-
@iomas
Kleiner Nachtrag das neustarten des Scriptes (nicht des adapters) ändert daran leider auc nichts -
@iomas
Nachtrag 2, In der Adminoberfläche macht es keinen Unterschied ob ich konvertiere oder nicht in beiden Fällen wird entsprechend true oder false angezeigt, habe mich dennoch entschieden es wieder auf val=='on' zu setzen da das mit meiner Logik irgendwie mehr entspricht :? -
@iomas sagte: soll ich den js adapter einmal neu starten?
Der Alias wird im js-controller verarbeitet.
-
@paul53
habe die readfunktionalität noch einmal entfernt und auch den js adapter neu gestartet leider mit gleichem Ergebnis. -
@iomas sagte: js adapter neu gestartet
Starte mal ioBroker neu.
-
@paul53
hat leider nichts gebracht -
@iomas sagte: hat leider nichts gebracht
Noch ein Versuch: Ändere die Rolle des Alias in "switch".
-
@paul53
habe die Rolle in switch geändert leider bleibt es dabei, es wird ein string draus. -
@iomas sagte: bleibt es dabei, es wird ein string draus.
Mal InfluxDB auf dem Alias deaktiviert?
-
@paul53
InfluxDB abschalten hat leider keinen Einfluß auf das beschriebene Verhalten. -
@iomas
Ich habe den Javascript-Code mal zum Testen übernommen, zwei Aliase und zwei MQTT-Datenpunkte erstellt und getestet: Ich erhalte immer nur:0.1: Hinweise: Typ:boolean Wert ist: false
oder true. Mit welchem Ablauf erscheint?
0.1: Hinweise: Typ:string Wert ist: off
-
@paul53
Dieser erscheint wenn ich den shelly über die app frühzeitig ausschalte, also Licht geht an, ich schalte per App oder phsyikalisch den Schalter aus. Wenn danach erneut der Bewegungsmelder aktiviert wird, dann kommt es zu besagtem Wechsel des Typs. -
@iomas sagte in Alias auf Shelly - unerwartete Änderung des Aliastyps:
Licht geht an, ich schalte per App oder phsyikalisch den Schalter aus. Wenn danach erneut der Bewegungsmelder aktiviert wird
Habe ich mal nachgestellt:
16:49:48.115 info javascript.1 (2077) script.js.common.Neuer_Test: 0: Bewegung 16:49:48.116 info javascript.1 (2077) script.js.common.Neuer_Test: 0.1: Hinweise: Typ:boolean Wert ist: false 16:49:48.116 info javascript.1 (2077) script.js.common.Neuer_Test: 1: erkanntfalse 16:49:48.117 info javascript.1 (2077) script.js.common.Neuer_Test: 2: Licht ist aus 16:49:48.117 info javascript.1 (2077) script.js.common.Neuer_Test: 3: kleiner Schwellwert->Licht anschalten 16:49:48.248 info javascript.1 (2077) script.js.common.Neuer_Test: Alias: true, Ack: true, Skript: script.js.common.Shelly1 16:50:00.164 info javascript.1 (2077) script.js.common.Neuer_Test: Alias: false, Ack: true, Skript: script.js.common.Shelly1 16:50:48.117 info javascript.1 (2077) script.js.common.Neuer_Test: X: Licht ausschalten 16:50:48.176 info javascript.1 (2077) script.js.common.Neuer_Test: Alias: false, Ack: true, Skript: script.js.common.Shelly1 16:51:02.813 info javascript.1 (2077) script.js.common.Neuer_Test: 0: Bewegung 16:51:02.813 info javascript.1 (2077) script.js.common.Neuer_Test: 0.1: Hinweise: Typ:boolean Wert ist: false 16:51:02.813 info javascript.1 (2077) script.js.common.Neuer_Test: 1: erkanntfalse 16:51:02.813 info javascript.1 (2077) script.js.common.Neuer_Test: 2: Licht ist aus 16:51:02.813 info javascript.1 (2077) script.js.common.Neuer_Test: 3: kleiner Schwellwert->Licht anschalten 16:51:02.886 info javascript.1 (2077) script.js.common.Neuer_Test: Alias: true, Ack: true, Skript: script.js.common.Shelly1 16:52:02.817 info javascript.1 (2077) script.js.common.Neuer_Test: X: Licht ausschalten 16:52:02.916 info javascript.1 (2077) script.js.common.Neuer_Test: Alias: false, Ack: true, Skript: script.js.common.Shelly1
Der zusätzliche Log-Eintrag kommt aus dem Debug-Log auf dem Alias:
on({id: idLichtSchalter}, function(dp) { log('Alias: ' + dp.state.val + ', Ack: ' + dp.state.ack + ', Skript: ' + dp.state.c); });
Was mir auffällt: Der Debug-Trigger liefert stets "Ack: true", d.h. auf das ursprüngliche Setzen mit ack = false reagiert der Trigger nicht. Allerdings reagiert das MQTT-Kommando:
17:25:49.123 info javascript.1 (2077) script.js.common.Neuer_Test: X: Licht ausschalten 17:25:49.127 info javascript.1 (2077) script.js.common.Neuer_Test: MQTT Command: off, Ack: false 17:25:49.180 info javascript.1 (2077) script.js.common.Neuer_Test: Alias: false, Ack: true, Skript: script.js.common.Shelly1
-
@paul53 said in Alias auf Shelly - unerwartete Änderung des Aliastyps:
on({id: idLichtSchalter}, function(dp) {
Ich habe mein Script mal um folgendes erweitert, analog zu deinem JS, hoffe ich...
on({id: [].concat(idLichtSchalter), change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.debug((['Alias: ',(obj.state ? obj.state.val : ""),', Ack: ',(obj.state ? obj.state.ack : ""),', Skript: ',(obj.state ? obj.state.from : "")].join(''))); });
ist was im blockly unter JS dazukam.
Die Ausgabe sieht bei mir danach wie folgt aus:17:21:44.814 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0: Bewegung 17:21:44.815 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:boolean Wert ist: false 17:21:44.815 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 1: erkanntfalse 17:21:44.817 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 2: Licht ist aus 17:21:44.821 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 17:21:44.913 debug javascript.0 (291426) script.js.EG.kueche.beweg2: Alias: true, Ack: true, Skript: system.adapter.mqtt.0 17:22:03.022 debug javascript.0 (291426) script.js.EG.kueche.beweg2: Alias: false, Ack: true, Skript: system.adapter.mqtt.0 17:22:16.783 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0: Bewegung 17:22:16.784 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 1: nicht erkannt 17:22:44.823 debug javascript.0 (291426) script.js.EG.kueche.beweg2: X: Licht ausschalten 17:22:54.973 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0: Bewegung 17:22:54.974 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0.1: Hinweise: Typ:string Wert ist: off 17:22:54.974 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0.5: Bugfix wrong typestring Wert ist: off 17:22:54.974 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0.5b: aus 17:22:54.975 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 1: erkanntfalse 17:22:54.976 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 2: Licht ist aus 17:22:54.977 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 3: kleiner Schwellwert->Licht anschalten 17:22:55.046 debug javascript.0 (291426) script.js.EG.kueche.beweg2: Alias: true, Ack: true, Skript: system.adapter.mqtt.0 17:23:26.961 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 0: Bewegung 17:23:26.962 debug javascript.0 (291426) script.js.EG.kueche.beweg2: 1: nicht erkannt 17:23:54.979 debug javascript.0 (291426) script.js.EG.kueche.beweg2: X: Licht ausschalten 17:23:55.052 debug javascript.0 (291426) script.js.EG.kueche.beweg2: Alias: false, Ack: true, Skript: system.adapter.mqtt.0
hilft das weiter?
-
@iomas sagte: hilft das weiter?
Nicht wirklich. Ich kann das Verhalten mit "Wert ist: off" bei mir nicht nachstellen - bei gleichem Ablauf. Version des Hosts (js-controller)?
Außerdem triggert mein Debug-Trigger auf "wurde aktualisiert".