- Home
- Deutsch
- Cloud Dienste
- Logikwert-Datenpunkt in IOT-Adapter
Logikwert-Datenpunkt in IOT-Adapter
-
Hallo liebes Forum,
vor einiger Zeit hatte ich schon Mal ein Thema eröffnet, worum es darin ging, wie man mit Alexa Abfragen machen kann über den Alexa 2.0 - Adapter. Dort wurde mir empfohlen, den IOT-Adapter zu wählen und am Besten dazu die Assistenz-Lizenz zu erwerben.
Gemacht --> Getan!
Nun habe ich Skripte erstellt, welche von Alexa getriggert werden sollen. Also ein Logikdatenpunkt erstellt, worauf ein Skript dann anfangen soll zu arbeiten. Ich möchte nun den Datenpunkt im IOT-Adapter hinterlegen und mir wird ständig eine Fehlermeldung ausgeworfen, dass dies nicht möglich sei!
Kann mir vielleicht jemand helfen, dass ich mit Alexa diesen Datenpunkt triggern kann?
Vielen Dank schon Mal! Ich wünsche Euch einen guten Rutsch ins neue Jahr.Gruß
Dennis -
Hallo,
Stell mal den Datenpunkt so ein das er geschrieben werden darf.
Unmittelbar danach in in den iot Adapter einfügen. -
@Scripthase
wenn Du in den Objekten auf Deinen Datenpunkt gehst,(rechts das Bleistiftsymbol anklicken und dann wieder ganz recht in RAW, kannst Du das auch selbst einfügen. Geht eigentlich sogar schneller.
Hier ein Beispiel:
mit diesen Teil ergänzen, wobei Fensteransage in diesem Fall der smartName ist.
, "smartName": { "de": "Fensteransage", "smartType": "SWITCH" } },
daraus wird dann in iot das hier (den smartType, hier im Beispiel = Switch, kannst Du auch direkt einstellen)
-
@dslraser
Vielen Dank für deine Antwort!
Ich habe es Mal nach deinem Weg angewendet und es scheint zu funktionieren. Komisch! Wieso muss man es denn über diesen Weg machen? Mit der Berechtigung anpassen hat es nicht funktioniert, aber hier über das bisschen Code anpassen schon. -
@Scripthase
warum das so ist kann ich Dir nicht sagen. Ich erstelle meine eigenen Datenpunkte alle per Script / Blockly und dabei füge ich dann nach Bedarf gleich den smartNamen und den Typ direkt mit ein. -
@dslraser
Entschuldige, wenn ich so dumm frage... Wie erstellst Du deine Datenpunkte per Skript / Blockly?
Ich erstelle die immer unter den Objekten. -
@Scripthase sagte in Logikwert-Datenpunkt in IOT-Adapter:
@dslraser
Entschuldige, wenn ich so dumm frage... Wie erstellst Du deine Datenpunkte per Skript / Blockly?
Ich erstelle die immer unter den Objekten.Hier mal ein Beispiel. (zwei Beispiele)
Hier wird in der ersten Funktion ein Datenpunkt erstellt unter Javascript.0
Im zweiten Beispiel unter 0_userdata.0 (das ist eine Vorlage von paul53 )zum "umgestalten" der Datenpunkte einfach da </> rauf klicken und dann ändern.
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="procedures_defcustomnoreturn" id="}`|TJu~h$I)LcxvN*p|[" x="13" y="13"> <mutation statements="false"></mutation> <field name="NAME">Datenpunkt_im_Javascript_Ordner_anlegen</field> <field name="SCRIPT">Ly9EYXRlbnB1bmt0IEJ1dHRvbiBmw7xyIEFuc2FnZSBlcnN0ZWxsZW4KY3JlYXRlU3RhdGUoIkVpZ2VuZV9EYXRlbnB1bmt0ZS4wMUFsZXhhMkFuc2FnZW4uQW5zYWdlbi5GZW5zdGVyYW5zYWdlIiwgewogICAgbmFtZTogJ0ZlbnN0ZXJhbnNhZ2UnLCAKICAgICJyb2xlIjogImJ1dHRvbiIsCiAgICAidHlwZSI6ICJidXR0b24iLAogICAgInJlYWQiOiBmYWxzZSwKICAgICJ3cml0ZSI6IHRydWUsCiAgICAic21hcnROYW1lIjogewogICAgImRlIjogIkZlbnN0ZXJhbnNhZ2UiLAogICAgInNtYXJ0VHlwZSI6ICJTV0lUQ0giCn0KfSk7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_callcustomnoreturn" id="Cs[B(f2xL,GNDwczSxmg" x="13" y="63"> <mutation name="Datenpunkt_im_Javascript_Ordner_anlegen"></mutation> </block> <block type="procedures_defcustomnoreturn" id="W*N4e![)YJVOn7OYX5n." x="13" y="113"> <mutation statements="false"></mutation> <field name="NAME">Datenpunkt_in_0_userdata_anlegen</field> <field name="SCRIPT">Ly8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDAxID0gJzAxQWxleGEuQW5zYWdlbi5GZW5zdGVyYW5zYWdlJzsKY29uc3QgZHRwMDAxID0ge3R5cGU6ICdidXR0b24nLCByZWFkOiBmYWxzZSwgd3JpdGU6IHRydWUsIG5hbWU6ICdGZW5zdGVyYW5zYWdlJyxyb2xlOiAnYnV0dG9uJywic21hcnROYW1lIjogeyJkZSI6ICJGZW5zdGVyYW5zYWdlIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9fTsKIApmdW5jdGlvbiBjcmVhdGVEcDAwMShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAwMSgnMF91c2VyZGF0YS4wLicgKyBkcDAwMSwgZHRwMDAxKTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_callcustomnoreturn" id="K|oI^L_Ms_x$zi}Ga}f!" x="13" y="163"> <mutation name="Datenpunkt_in_0_userdata_anlegen"></mutation> </block> </xml>
-
@Scripthase
wenn es mehrere sind, dann nummeriere ich die einfach durch und erstelle die in einem einzigen Schritt. Wenn Du mal irgendetwas neu aufsetzen willst, dann sind alle Datenpunkte mit einem Klick wieder erstellt.Beispiel: (kannst Du ja hinterher wieder löschen)
<block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defcustomnoreturn" id="|YOBZy0(J_8~^4VAn@z%" x="13" y="263"> <mutation statements="false"></mutation> <field name="NAME">Datenpunkte_anlegen</field> <field name="SCRIPT">Ly8jIyMjIyMjIyMjIyMjIyMjIyMjIy0tLUZlbnN0ZXIgQW56YWhsIGdla2lwcHQtZ2XDtmZmbmV0LWdlc2NobG9zc2VuLWdlc2FtdC0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMDEgPSAnRmVuc3Rlcl96YWVobGVuLjAxX0FuemFobF9GZW5zdGVyX2dla2lwcHQnOwpjb25zdCBkdHAwMDEgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzAxX0FuemFobF9GZW5zdGVyX2dla2lwcHQnLHJvbGU6ICdudW1iZXInfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAwMShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAwMDEoJzBfdXNlcmRhdGEuMC4nICsgZHAwMDEsIGR0cDAwMSk7CgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMDIgPSAnRmVuc3Rlcl96YWVobGVuLjAyX0FuemFobF9GZW5zdGVyX29mZmVuJzsKY29uc3QgZHRwMDAyID0ge3R5cGU6ICdudW1iZXInLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcwMl9BbnphaGxfRmVuc3Rlcl9vZmZlbicscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDAyKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAwMignMF91c2VyZGF0YS4wLicgKyBkcDAwMiwgZHRwMDAyKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwMyA9ICdGZW5zdGVyX3phZWhsZW4uMDNfQW56YWhsX0ZlbnN0ZXJfZ2VzY2hsb3NzZW4nOwpjb25zdCBkdHAwMDMgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzAzX0FuemFobF9GZW5zdGVyX2dlc2NobG9zc2VuJyxyb2xlOiAnbnVtYmVyJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMDMoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDAzKCcwX3VzZXJkYXRhLjAuJyArIGRwMDAzLCBkdHAwMDMpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDA0ID0gJ0ZlbnN0ZXJfemFlaGxlbi4wNF9BbnphaGxfRmVuc3Rlcl9nZXNhbXQnOwpjb25zdCBkdHAwMDQgPSB7dHlwZTogJ251bWJlcicsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA0X0FuemFobF9GZW5zdGVyX2dlc2FtdCcscm9sZTogJ251bWJlcid9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDA0KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAwNCgnMF91c2VyZGF0YS4wLicgKyBkcDAwNCwgZHRwMDA0KTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1GZW5zdGVyIG9mZmVuZS1nZWtpcHB0ZSBGZW5zdGVyIExpc3RlLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwNSA9ICdGZW5zdGVyX3phZWhsZW4uMDVfb2ZmZW5lX2dla2lwcHRlX0ZlbnN0ZXJfTGlzdGUnOwpjb25zdCBkdHAwMDUgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA1X29mZmVuZV9nZWtpcHB0ZV9GZW5zdGVyX0xpc3RlJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMDUoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnc3RyaW5nJykgaW5pdCA9ICdub2NoIGxlZXInOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDA1KCcwX3VzZXJkYXRhLjAuJyArIGRwMDA1LCBkdHAwMDUpOwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIy0tLURQIGdlc2FtdGUgRmVuc3RlciBMaXN0ZSBtaXQgWnVzdGFuZCBhbmxlZ2VuLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwNiA9ICdGZW5zdGVyX3phZWhsZW4uMDZfZ2VzYW10ZV9GZW5zdGVyX0xpc3RlJzsKY29uc3QgZHRwMDA2ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcwNl9nZXNhbXRlX0ZlbnN0ZXJfTGlzdGUnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAwNihpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAwMDYoJzBfdXNlcmRhdGEuMC4nICsgZHAwMDYsIGR0cDAwNik7CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tRmVuc3RlciBMaXN0ZSBpUW9udHJvbCBhbmxlZ2VuLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwNyA9ICdGZW5zdGVyX3phZWhsZW4uMDdfaVFvbnRyb2xfRmVuc3Rlcl9MaXN0ZSc7CmNvbnN0IGR0cDAwNyA9IHt0eXBlOiAnc3RyaW5nJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlLCBuYW1lOiAnMDdfaVFvbnRyb2xfRmVuc3Rlcl9MaXN0ZScscm9sZTogJ3N0cmluZyd9OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDA3KGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAwNygnMF91c2VyZGF0YS4wLicgKyBkcDAwNywgZHRwMDA3KTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1EUCBOYWNocmljaHRlbnZlcnNhbmQgVGVsZWdyYW0gYW5zY2hhbHRlbi1hdXNzY2hhbHRlbiBhbmxlZ2VuLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAwOCA9ICdOYWNocmljaHRlbnZlcnNhbmQuVGVsZWdyYW0uMDFUZWxlZ3JhbV9OYWNocmljaHRlbnZlcnNhbmRfRmVuc3Rlcl96YWVobGVuJzsKY29uc3QgZHRwMDA4ID0ge3R5cGU6ICdib29sZWFuJywgcmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUsIG5hbWU6ICcwMVRlbGVncmFtX05hY2hyaWNodGVudmVyc2FuZF9GZW5zdGVyX3phZWhsZW4nLHJvbGU6ICdzd2l0Y2gnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAwOChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAwOCgnMF91c2VyZGF0YS4wLicgKyBkcDAwOCwgZHRwMDA4KTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS1EUCBOYWNocmljaHRlbnZlcnNhbmQgRS1NYWlsIGFuc2NoYWx0ZW4tYXVzc2NoYWx0ZW4gYW5sZWdlbi0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMDkgPSAnTmFjaHJpY2h0ZW52ZXJzYW5kLkVNYWlsLjAxRU1haWxfTmFjaHJpY2h0ZW52ZXJzYW5kX0ZlbnN0ZXJfemFlaGxlbic7CmNvbnN0IGR0cDAwOSA9IHt0eXBlOiAnYm9vbGVhbicsIHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlLCBuYW1lOiAnMDFFTWFpbF9OYWNocmljaHRlbnZlcnNhbmRfRmVuc3Rlcl96YWVobGVuJyxyb2xlOiAnc3dpdGNoJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMDkoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgc2V0T2JqZWN0KGlkLCBvYmosIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgaWYgKGVycikgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0OiAnICsgZXJyKQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKGNvbW1vbi5kZWYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NldFN0YXRlKGlkLCBpbml0LCB0cnVlKTt9LDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KY3JlYXRlRHAwMDkoJzBfdXNlcmRhdGEuMC4nICsgZHAwMDksIGR0cDAwOSk7CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tQWxleGEgRGF0ZW5wdW5rdGUgYW5sZWdlbi0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyBEYXRlbnB1bmt0IHVudGVyIDBfdXNlcmRhdGEuMCBlcnN0ZWxsZW4KY29uc3QgZHAwMTAgPSAnQWxleGFfQW5zYWdlbi5TdGltbWVuLjAxQWxleGEnOwpjb25zdCBkdHAwMTAgPSB7dHlwZTogJ2Jvb2xlYW4nLCByZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSwgbmFtZTogJzAxQWxleGEnLHJvbGU6ICdzd2l0Y2gnLCJzbWFydE5hbWUiOiB7ImRlIjogIkFsZXhhIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9fTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxMChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMCgnMF91c2VyZGF0YS4wLicgKyBkcDAxMCwgZHRwMDEwKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxMSA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDJIYW5zJzsKY29uc3QgZHRwMDExID0ge3R5cGU6ICdib29sZWFuJywgcmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUsIG5hbWU6ICcwMkhhbnMnLHJvbGU6ICdzd2l0Y2gnLCJzbWFydE5hbWUiOiB7ImRlIjogIkhhbnMiLCJzbWFydFR5cGUiOiAiU1dJVENIIn19OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDExKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMSgnMF91c2VyZGF0YS4wLicgKyBkcDAxMSwgZHRwMDExKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxMiA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDNWaWNraSc7CmNvbnN0IGR0cDAxMiA9IHt0eXBlOiAnYm9vbGVhbicsIHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlLCBuYW1lOiAnMDNWaWNraScscm9sZTogJ3N3aXRjaCcsInNtYXJ0TmFtZSI6IHsiZGUiOiAiVmlja2kiLCJzbWFydFR5cGUiOiAiU1dJVENIIn19OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDEyKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMignMF91c2VyZGF0YS4wLicgKyBkcDAxMiwgZHRwMDEyKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxMyA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDRDb25jaGl0YSc7CmNvbnN0IGR0cDAxMyA9IHt0eXBlOiAnYm9vbGVhbicsIHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlLCBuYW1lOiAnMDRDb25jaGl0YScscm9sZTogJ3N3aXRjaCcsInNtYXJ0TmFtZSI6IHsiZGUiOiAiQ29uY2hpdGEiLCJzbWFydFR5cGUiOiAiU1dJVENIIn19OwogCmZ1bmN0aW9uIGNyZWF0ZURwMDEzKGlkLCBjb21tb24pIHsKICAgIGlmKCQoaWQpLmxlbmd0aCkgbG9nKCdEYXRlbnB1bmt0ICcgKyBpZCArICcgZXhpc3RpZXJ0IGJlcmVpdHMgIScsICd3YXJuJyk7CiAgICBlbHNlIHsKICAgICAgICB2YXIgb2JqID0ge307CiAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgIG9iai5jb21tb24gPSBjb21tb247CiAgICAgICAgb2JqLm5hdGl2ZSA9IHt9OwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnbm9jaCBsZWVyJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxMygnMF91c2VyZGF0YS4wLicgKyBkcDAxMywgZHRwMDEzKTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxNCA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDVBbGV4YV9zc21sJzsKY29uc3QgZHRwMDE0ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcwNUFsZXhhX3NzbWwnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxNChpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnPHNwZWFrPjx2b2ljZSBuYW1lPSJBbGV4YSI+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxNCgnMF91c2VyZGF0YS4wLicgKyBkcDAxNCwgZHRwMDE0KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxNSA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDZIYW5zX3NzbWwnOwpjb25zdCBkdHAwMTUgPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA2SGFuc19zc21sJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMTUoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJzxzcGVhaz48dm9pY2UgbmFtZT0iSGFucyI+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxNSgnMF91c2VyZGF0YS4wLicgKyBkcDAxNSwgZHRwMDE1KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxNiA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDdWaWNraV9zc21sJzsKY29uc3QgZHRwMDE2ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcwN1ZpY2tpX3NzbWwnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxNihpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnPHNwZWFrPjx2b2ljZSBuYW1lPSJWaWNraSI+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxNignMF91c2VyZGF0YS4wLicgKyBkcDAxNiwgZHRwMDE2KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxNyA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDhDb25jaGl0YV9zc21sJzsKY29uc3QgZHRwMDE3ID0ge3R5cGU6ICdzdHJpbmcnLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UsIG5hbWU6ICcwOENvbmNoaXRhX3NzbWwnLHJvbGU6ICdzdHJpbmcnfTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxNyhpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIHNldE9iamVjdChpZCwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgIGlmIChlcnIpIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdDogJyArIGVycikKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZihjb21tb24uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ251bWJlcicpIGluaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmKGNvbW1vbi50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnPHNwZWFrPjx2b2ljZSBuYW1lPSJDb25jaGl0YSI+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpbml0ID0gY29tbW9uLmRlZjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2V0U3RhdGUoaWQsIGluaXQsIHRydWUpO30sMTAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxNygnMF91c2VyZGF0YS4wLicgKyBkcDAxNywgZHRwMDE3KTsKCi8vIERhdGVucHVua3QgdW50ZXIgMF91c2VyZGF0YS4wIGVyc3RlbGxlbgpjb25zdCBkcDAxOCA9ICdBbGV4YV9BbnNhZ2VuLlN0aW1tZW4uMDlzc21sX2VuZGUnOwpjb25zdCBkdHAwMTggPSB7dHlwZTogJ3N0cmluZycsIHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSwgbmFtZTogJzA5c3NtbF9lbmRlJyxyb2xlOiAnc3RyaW5nJ307CiAKZnVuY3Rpb24gY3JlYXRlRHAwMTgoaWQsIGNvbW1vbikgewogICAgaWYoJChpZCkubGVuZ3RoKSBsb2coJ0RhdGVucHVua3QgJyArIGlkICsgJyBleGlzdGllcnQgYmVyZWl0cyAhJywgJ3dhcm4nKTsKICAgIGVsc2UgewogICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgb2JqLmNvbW1vbiA9IGNvbW1vbjsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJzwvdm9pY2U+PC9zcGVhaz4nOwogICAgICAgICAgICAgICAgfSBlbHNlIGluaXQgPSBjb21tb24uZGVmOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtzZXRTdGF0ZShpZCwgaW5pdCwgdHJ1ZSk7fSwxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9CmNyZWF0ZURwMDE4KCcwX3VzZXJkYXRhLjAuJyArIGRwMDE4LCBkdHAwMTgpOwoKLy8gRGF0ZW5wdW5rdCB1bnRlciAwX3VzZXJkYXRhLjAgZXJzdGVsbGVuCmNvbnN0IGRwMDE5ID0gJ0FsZXhhX0Fuc2FnZW4uQW5zYWdlbi5GZW5zdGVyYW5zYWdlJzsKY29uc3QgZHRwMDE5ID0ge3R5cGU6ICdidXR0b24nLCByZWFkOiBmYWxzZSwgd3JpdGU6IHRydWUsIG5hbWU6ICdGZW5zdGVyYW5zYWdlJyxyb2xlOiAnYnV0dG9uJywic21hcnROYW1lIjogeyJkZSI6ICJGZW5zdGVyYW5zYWdlIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9fTsKIApmdW5jdGlvbiBjcmVhdGVEcDAxOShpZCwgY29tbW9uKSB7CiAgICBpZigkKGlkKS5sZW5ndGgpIGxvZygnRGF0ZW5wdW5rdCAnICsgaWQgKyAnIGV4aXN0aWVydCBiZXJlaXRzICEnLCAnd2FybicpOwogICAgZWxzZSB7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIG9iai50eXBlID0gJ3N0YXRlJzsKICAgICAgICBvYmouY29tbW9uID0gY29tbW9uOwogICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICBzZXRPYmplY3QoaWQsIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICBpZiAoZXJyKSBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3Q6ICcgKyBlcnIpCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoY29tbW9uLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihjb21tb24udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgaWYoY29tbW9uLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJ25vY2ggbGVlcic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaW5pdCA9IGNvbW1vbi5kZWY7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfQpjcmVhdGVEcDAxOSgnMF91c2VyZGF0YS4wLicgKyBkcDAxOSwgZHRwMDE5KTsK</field> <comment pinned="false" h="80" w="160">legt Datenpunkte für den die Anzahl gekippter/geöffneter/geschlossenen/gesamt Fenster an</comment> </block>
ergibt das hier (aber noch ohne Daten, hier sind die Datenpunkte schon befüllt, die Funktion verwende ich in einem kompletten Blockly)