start_main
aktive_ventile_zaehlen
objekt_id_von_ventil_1_angeschlossen
objekt_id_von_ventil_2_angeschlossen
anlegen_in
objekt_id_von_ventil_3_angeschlossen
objekt_id_von_ventil_4_angeschlossen
start
objekt_id_von_ventil_5_angeschlossen
max_laufzeit
objekt_id_von_ventil_6_angeschlossen
Ventil_1_angeschlossen
objekt_id_restlaufzeit_ventil_1_eDP
Ventil_2_angeschlossen
objekt_id_restlaufzeit_ventil_2_eDP
Ventil_3_angeschlossen
objekt_id_restlaufzeit_ventil_3_eDP
Ventil_4_angeschlossen
objekt_id_restlaufzeit_ventil_4_eDP
Ventil_5_angeschlossen
objekt_id_restlaufzeit_ventil_5_eDP
Ventil_6_angeschlossen
objekt_id_restlaufzeit_ventil_6_eDP
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
objekt_id_laufzeit_alle_ventile_anzeige
objekt_id_aktive_ventile_eDP
Alexa_verwenden
objekt_id_alle_ventile_stop_eDP
Alexa_SmartName_Ventil_1
Alexa_SmartName_Ventil_2
objekt_id_angeschlossene_ventile_eDP
Alexa_SmartName_Ventil_3
Alexa_SmartName_Ventil_4
Alexa_SmartName_Ventil_5
Alexa_SmartName_Ventil_6
Alexa_SmartName_alle_Ventile_nacheinander
Alexa_SmartName_alle_Ventile_stop
objekt_id_ventil_1_dp_start_stop_adapter
objekt_id_ventil_2_dp_start_stop_adapter
objekt_id_ventil_3_dp_start_stop_adapter
objekt_id_ventil_4_dp_start_stop_adapter
objekt_id_ventil_5_dp_start_stop_adapter
angeschlossene_ventile_zaehlen
objekt_id_ventil_6_dp_start_stop_adapter
objekt_id_alle_ventile_stop_adapter
ventil_stop_befehl
objekt_id_restlaufzeit_ventil_1_Adapter
Status_Ventil_1
Status_Ventil_2
objekt_id_restlaufzeit_ventil_2_Adapter
Status_Ventil_3
Status_Ventil_4
objekt_id_restlaufzeit_ventil_3_Adapter
Status_Ventil_5
Status_Ventil_6
objekt_id_restlaufzeit_ventil_4_Adapter
objekt_id_restlaufzeit_ventil_5_Adapter
objekt_id_restlaufzeit_ventil_6_Adapter
dp_erstellen
laufzeit_ventil
restlaufzeit_alle_ventile_anzeige
alles_aus
Ventil_2
Ventil_3
Ventil_4
Ventil_5
Ventil_6
Datenpunkte_erstellen
LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwpmdW5jdGlvbiBjcmVhdGVVc2VyU3RhdGVzKHdoZXJlLCBmb3JjZSwgc3RhdGVzVG9DcmVhdGUsIGNhbGxiYWNrID0gdW5kZWZpbmVkKSB7CiAKICAgIGNvbnN0IFdBUk4gPSBmYWxzZTsgLy8gT25seSBmb3IgMF91c2VyZGF0YS4wOiBUaHJvd3Mgd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIGZvcmNlPWZhbHNlLiBEZWZhdWx0IGlzIGZhbHNlLCBzbyBubyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgZXhpc3RzLgogICAgY29uc3QgTE9HX0RFQlVHID0gZmFsc2U7IC8vIFRvIGRlYnVnIHRoaXMgZnVuY3Rpb24sIHNldCB0byB0cnVlCiAgICAvLyBQZXIgaXNzdWUgIzQ3NCAoaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCksIHRoZSB1c2VkIGZ1bmN0aW9uIHNldE9iamVjdCgpIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayAKICAgIC8vIGJlZm9yZSB0aGUgc3RhdGUgaXMgYWN0dWFsIGNyZWF0ZWQuIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlciBhcyBhIHdvcmthcm91bmQuCiAgICBjb25zdCBERUxBWSA9IDUwOyAvLyBEZWxheSBpbiBtaWxsaXNlY29uZHMgKG1zKS4gSW5jcmVhc2UgdGhpcyB0byAxMDAsIGlmIGl0IGlzIG5vdCB3b3JraW5nLgoKICAgIC8vIFZhbGlkYXRlICJ3aGVyZSIKICAgIGlmICh3aGVyZS5lbmRzV2l0aCgnLicpKSB3aGVyZSA9IHdoZXJlLnNsaWNlKDAsIC0xKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRvdAogICAgaWYgKCAod2hlcmUubWF0Y2goL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKSkkfDBfdXNlcmRhdGFcLjAkKS8pID09IG51bGwpICkgewogICAgICAgIGxvZygnVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCB0byBjcmVhdGUgc3RhdGVzIHVuZGVyIFsnICsgd2hlcmUgKyAnXScsICdlcnJvcicpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBQcmVwYXJlICJzdGF0ZXNUb0NyZWF0ZSIgc2luY2Ugd2UgYWxzbyBhbGxvdyBhIHNpbmdsZSBzdGF0ZSB0byBjcmVhdGUKICAgIGlmKCFBcnJheS5pc0FycmF5KHN0YXRlc1RvQ3JlYXRlWzBdKSkgc3RhdGVzVG9DcmVhdGUgPSBbc3RhdGVzVG9DcmVhdGVdOyAvLyB3cmFwIGludG8gYXJyYXksIGlmIGp1c3Qgb25lIGFycmF5IGFuZCBub3QgaW5zaWRlIGFuIGFycmF5CgogICAgLy8gQWRkICJ3aGVyZSIgdG8gU1RBVEVTX1RPX0NSRUFURQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBscFBhdGggPSBzdGF0ZXNUb0NyZWF0ZVtpXVswXS5yZXBsYWNlKC9cLipcLi9nLCAnLicpOyAvLyByZXBsYWNlIGFsbCBtdWx0aXBsZSBkb3RzIGxpa2UgJy4uJywgJy4uLicgd2l0aCBhIHNpbmdsZSAnLicKICAgICAgICBscFBhdGggPSBscFBhdGgucmVwbGFjZSgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pXC4pfDBfdXNlcmRhdGFcLjBcLikvLCcnKSAvLyByZW1vdmUgYW55IGphdmFzY3JpcHQueC4gLyAwX3VzZXJkYXRhLjAuIGZyb20gYmVnaW5uaW5nCiAgICAgICAgbHBQYXRoID0gd2hlcmUgKyAnLicgKyBscFBhdGg7IC8vIGFkZCB3aGVyZSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nCiAgICAgICAgc3RhdGVzVG9DcmVhdGVbaV1bMF0gPSBscFBhdGg7CiAgICB9CgogICAgaWYgKHdoZXJlICE9ICcwX3VzZXJkYXRhLjAnKSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciBqYXZhc2NyaXB0LngKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJyk7CiAgICAgICAgICAgIGxldCBsb29wSW5pdCA9IChsb29wUGFyYW1bMV1bJ2RlZiddID09IHVuZGVmaW5lZCkgPyBudWxsIDogbG9vcFBhcmFtWzFdWydkZWYnXTsgLy8gbWltaWMgc2FtZSBiZWhhdmlvciBhcyBjcmVhdGVTdGF0ZSBpZiBubyBpbml0IHZhbHVlIGlzIHByb3ZpZGVkCiAgICAgICAgICAgIGNyZWF0ZVN0YXRlKGxvb3BQYXJhbVswXSwgbG9vcEluaXQsIGZvcmNlLCBsb29wUGFyYW1bMV0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgcHJvY2Vzc2VkLicpOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wCiAgICAgICAgbGV0IG51bVN0YXRlcyA9IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsKICAgICAgICBsZXQgY291bnRlciA9IC0xOwogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7CiAgICAgICAgICAgIGNvdW50ZXIgKz0gMTsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nICgnW0RlYnVnXSBDdXJyZW50bHkgcHJvY2Vzc2luZyBmb2xsb3dpbmcgc3RhdGU6IFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgaWYoICgkKGxvb3BQYXJhbVswXSkubGVuZ3RoID4gMCkgJiYgKGV4aXN0c1N0YXRlKGxvb3BQYXJhbVswXSkpICkgeyAvLyBXb3JrYXJvdW5kIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc4CiAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyBleGlzdGluZy4KICAgICAgICAgICAgICAgIGlmIChXQVJOICYmICFmb3JjZSkgbG9nKCdTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcgYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGNyZWF0ZWQuJywgJ3dhcm4nKTsKICAgICAgICAgICAgICAgIGlmICghV0FSTiAmJiBMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcuIE9wdGlvbiBmb3JjZSAoPW92ZXJ3cml0ZSkgaXMgc2V0IHRvIFsnICsgZm9yY2UgKyAnXS4nKTsKICAgICAgICAgICAgICAgIGlmKCFmb3JjZSkgewogICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlIGV4aXN0cyBhbmQgc2hhbGwgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGZvcmNlPWZhbHNlCiAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGRvIG5vdCBwcm9jZWVkLgogICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIGV4ZWN1dGUgbm93LicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIG91dCBhbmQgY29udGludWUgd2l0aCBuZXh0IGVsZW1lbnQgaW4gbG9vcC4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODQ1MjkyMC9jb250aW51ZS1pbi1jdXJzb3ItZm9yZWFjaAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gLy8gaWYoIWZvcmNlKQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTdGF0ZSBpcyBub3QgZXhpc3Rpbmcgb3IgZm9yY2UgPSB0cnVlLCBzbyB3ZSBhcmUgY29udGludWluZyB0byBjcmVhdGUgdGhlIHN0YXRlIHRocm91Z2ggc2V0T2JqZWN0KCkuCiAgICAgICAgICAgIGxldCBvYmogPSB7fTsKICAgICAgICAgICAgb2JqLnR5cGUgPSAnc3RhdGUnOwogICAgICAgICAgICBvYmoubmF0aXZlID0ge307CiAgICAgICAgICAgIG9iai5jb21tb24gPSBsb29wUGFyYW1bMV07CiAgICAgICAgICAgIHNldE9iamVjdChsb29wUGFyYW1bMF0sIG9iaiwgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgIGxvZygnQ2Fubm90IHdyaXRlIG9iamVjdCBmb3Igc3RhdGUgWycgKyBsb29wUGFyYW1bMF0gKyAnXTogJyArIGVycik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJykKICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLmRlZiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnYm9vbGVhbicpIGluaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdzdHJpbmcnKSBpbml0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGxvb3BQYXJhbVsxXS5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKGxvb3BQYXJhbVswXSwgaW5pdCwgdHJ1ZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gc2V0U3RhdGUgZHVyY2hnZWbDvGhydDogJyArIGxvb3BQYXJhbVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0sIERFTEFZICsgKDIwICogY291bnRlcikgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9Cn0KCi8vQWxsZ2VtZWluZSBEYXRlbnB1bmt0ZSBlcnN0ZWxsZW4uIEFsZXhhX1NtYXJ0TmFtZV9hbGxlX1ZlbnRpbGVfbmFjaGVpbmFuZGVyCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDFfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwMSBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDJfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwMiBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDNfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwMyBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDRfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwNCBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDVfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwNSBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLlZlbnRpbGVfYW5nZXNjaGxvc3Nlbi5WZW50aWxfMDZfYW5nZXNjaGxvc3NlbicsIHsnbmFtZSc6J1ZlbnRpbCAwNiBhbmdlc2NobG9zc2VuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA4QW56ZWlnZV9HZXNhbXRsYXVmemVpdF9hbGxlIFZlbnRpbGVfbmFjaGVpbmFuZGVyJywgeyduYW1lJzonQW56ZWlnZSBHZXNhbXRsYXVmemVpdCBhbGxlIFZlbnRpbGUgbmFjaGVpbmFuZGVyJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4JzptYXhfbGF1ZnplaXQsICdkZWYnOjB9XSwgICAgICAgICAgICAKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDlha3RpdmVfVmVudGlsZScsIHsnbmFtZSc6J2FrdGl2ZSBWZW50aWxlJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonVmVudGlsZScsJ2RlZic6MCwgfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAwYW5nZXNjaGxvc3NlbmVfVmVudGlsZScsIHsnbmFtZSc6J2FuZ2VzY2hsb3NzZW5lIFZlbnRpbGUnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOidWZW50aWxlJywnZGVmJzowLCB9XSwgICAgCgpdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpOwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4xMGZhbHNlX3N0b3BwdF9CZXdhZXNzZXJ1bmcnLCB7J25hbWUnOidmYWxzZSBzdG9wcHQgQmV3w6Rzc2VydW5nJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCdkZWYnOnRydWUsInNtYXJ0TmFtZSI6IHsiZGUiOiBBbGV4YV9TbWFydE5hbWVfYWxsZV9WZW50aWxlX3N0b3AsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDdFaW5nYWJlX0dlc2FtdGxhdWZ6ZWl0X2FsbGUgVmVudGlsZV9uYWNoZWluYW5kZXInLCB7J25hbWUnOidFaW5nYWJlIEdlc2FtdGxhdWZ6ZWl0IGFsbGUgVmVudGlsZSBuYWNoZWluYW5kZXInLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6bWF4X2xhdWZ6ZWl0LCAnZGVmJzowLCJzbWFydE5hbWUiOiB7ImRlIjogQWxleGFfU21hcnROYW1lX2FsbGVfVmVudGlsZV9uYWNoZWluYW5kZXIsInNtYXJ0VHlwZSI6ICJMSUdIVCIsImJ5T04iOiAic3RvcmVkIn0gfV0sICAgICAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMTBmYWxzZV9zdG9wcHRfQmV3YWVzc2VydW5nJywgeyduYW1lJzonZmFsc2Ugc3RvcHB0IEJld8Okc3NlcnVuZycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogZmFsc2UgfV0sCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA3RWluZ2FiZV9HZXNhbXRsYXVmemVpdF9hbGxlIFZlbnRpbGVfbmFjaGVpbmFuZGVyJywgeyduYW1lJzonRWluZ2FiZSBHZXNhbXRsYXVmemVpdCBhbGxlIFZlbnRpbGUgbmFjaGVpbmFuZGVyJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOm1heF9sYXVmemVpdCwgJ2RlZic6MCwgInNtYXJ0TmFtZSI6IGZhbHNlIH1dLCAgICAgIAoKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07Ci8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDEgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF8xX2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDFFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMScsIHsnbmFtZSc6J1ZlbnRpbCAxIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCAic21hcnROYW1lIjogeyJkZSI6IEFsZXhhX1NtYXJ0TmFtZV9WZW50aWxfMSwic21hcnRUeXBlIjogIkxJR0hUIiwiYnlPTiI6ICJzdG9yZWQifSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzFfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDFFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMScsIHsnbmFtZSc6J1ZlbnRpbCAxIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IGZhbHNlICYmIFZlbnRpbF8xX2FuZ2VzY2hsb3NzZW4gPT0gZmFsc2UpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAxRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzEnLCB7J25hbWUnOidWZW50aWwgMSBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDEgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfMV9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAxRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzEnLCB7J25hbWUnOidWZW50aWwgMSBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCAyIHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfMl9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAyRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzInLCB7J25hbWUnOidWZW50aWwgMiBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwgInNtYXJ0TmFtZSI6IHsiZGUiOiBBbGV4YV9TbWFydE5hbWVfVmVudGlsXzIsInNtYXJ0VHlwZSI6ICJMSUdIVCIsImJ5T04iOiAic3RvcmVkIn0gfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDIgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF8yX2FuZ2VzY2hsb3NzZW4gPT0gZmFsc2UpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAyRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzInLCB7J25hbWUnOidWZW50aWwgMiBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDIgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfMl9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wMkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF8yJywgeyduYW1lJzonVmVudGlsIDIgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCAyIHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzJfYW5nZXNjaGxvc3NlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wMkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF8yJywgeyduYW1lJzonVmVudGlsIDIgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDMgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF8zX2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDNFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMycsIHsnbmFtZSc6J1ZlbnRpbCAzIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCAic21hcnROYW1lIjogeyJkZSI6IEFsZXhhX1NtYXJ0TmFtZV9WZW50aWxfMywic21hcnRUeXBlIjogIkxJR0hUIiwiYnlPTiI6ICJzdG9yZWQifSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMyBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzNfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDNFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfMycsIHsnbmFtZSc6J1ZlbnRpbCAzIEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgMyBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IGZhbHNlICYmIFZlbnRpbF8zX2FuZ2VzY2hsb3NzZW4gPT0gZmFsc2UpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAzRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzMnLCB7J25hbWUnOidWZW50aWwgMyBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDMgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfM19hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjAzRWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzMnLCB7J25hbWUnOidWZW50aWwgMyBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgNCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzRfYW5nZXNjaGxvc3NlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNEVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF80JywgeyduYW1lJzonVmVudGlsIDQgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsICJzbWFydE5hbWUiOiB7ImRlIjogQWxleGFfU21hcnROYW1lX1ZlbnRpbF80LCJzbWFydFR5cGUiOiAiTElHSFQiLCJieU9OIjogInN0b3JlZCJ9IH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCA0IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfNF9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNEVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF80JywgeyduYW1lJzonVmVudGlsIDQgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCA0IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzRfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDRFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNCcsIHsnbmFtZSc6J1ZlbnRpbCA0IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aWwgNCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IGZhbHNlICYmIFZlbnRpbF80X2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDRFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNCcsIHsnbmFtZSc6J1ZlbnRpbCA0IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vZmFsbHMgQWxleGEgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpbCA1IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfNV9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA1RWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzUnLCB7J25hbWUnOidWZW50aWwgNSBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwgInNtYXJ0TmFtZSI6IHsiZGUiOiBBbGV4YV9TbWFydE5hbWVfVmVudGlsXzUsInNtYXJ0VHlwZSI6ICJMSUdIVCIsImJ5T04iOiAic3RvcmVkIn0gfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGkgNSBuaWNodCB2ZXJ3ZW5kZXQgd2lyZAppZiAoQWxleGFfdmVyd2VuZGVuID09IHRydWUgJiYgVmVudGlsXzVfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDVFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNScsIHsnbmFtZSc6J1ZlbnRpbCA1IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aSA1IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzVfYW5nZXNjaGxvc3NlbiA9PSBmYWxzZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDVFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNScsIHsnbmFtZSc6J1ZlbnRpbCA1IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCJzbWFydE5hbWUiOiBmYWxzZSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIG5pY2h0IHZlcndlbmRldCB3aXJkIHVuZCBWZW50aSA1IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gZmFsc2UgJiYgVmVudGlsXzVfYW5nZXNjaGxvc3NlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNUVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF81JywgeyduYW1lJzonVmVudGlsIDUgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9mYWxscyBBbGV4YSB2ZXJ3ZW5kZXQgd2lyZCB1bmQgVmVudGlsIDYgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSB0cnVlICYmIFZlbnRpbF82X2FuZ2VzY2hsb3NzZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2FyZGVuYS5CZXdhZXNzZXJ1bmcuMDZFaW5nYWJlX3VuZF9BbnplaWdlX1Jlc3RsYXVmemVpdF9WZW50aWxfNicsIHsnbmFtZSc6J1ZlbnRpbCA2IEVpbmdhYmUgdW5kIEFuemVpZ2UgUmVzdGxhdWZ6ZWl0JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2xldmVsJywndW5pdCc6J01pbnV0ZW4nLCdtaW4nOjAsICdtYXgnOjU5LCAnZGVmJzowLCAic21hcnROYW1lIjogeyJkZSI6IEFsZXhhX1NtYXJ0TmFtZV9WZW50aWxfNiwic21hcnRUeXBlIjogIkxJR0hUIiwiYnlPTiI6ICJzdG9yZWQifSB9XSwKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLHRydWUsIHN0YXRlc1RvQ3JlYXRlKX07CgovL2ZhbGxzIEFsZXhhIHZlcndlbmRldCB3aXJkIHVuZCBWZW50aSA2IG5pY2h0IHZlcndlbmRldCB3aXJkCmlmIChBbGV4YV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBWZW50aWxfNl9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF82JywgeyduYW1lJzonVmVudGlsIDYgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpIDYgbmljaHQgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfNl9hbmdlc2NobG9zc2VuID09IGZhbHNlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHYXJkZW5hLkJld2Flc3NlcnVuZy4wNkVpbmdhYmVfdW5kX0FuemVpZ2VfUmVzdGxhdWZ6ZWl0X1ZlbnRpbF82JywgeyduYW1lJzonVmVudGlsIDYgRWluZ2FiZSB1bmQgQW56ZWlnZSBSZXN0bGF1ZnplaXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonbGV2ZWwnLCd1bml0JzonTWludXRlbicsJ21pbic6MCwgJ21heCc6NTksICdkZWYnOjAsInNtYXJ0TmFtZSI6IGZhbHNlIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sdHJ1ZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vZmFsbHMgQWxleGEgbmljaHQgdmVyd2VuZGV0IHdpcmQgdW5kIFZlbnRpIDYgdmVyd2VuZGV0IHdpcmQKaWYgKEFsZXhhX3ZlcndlbmRlbiA9PSBmYWxzZSAmJiBWZW50aWxfNl9hbmdlc2NobG9zc2VuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dhcmRlbmEuQmV3YWVzc2VydW5nLjA2RWluZ2FiZV91bmRfQW56ZWlnZV9SZXN0bGF1ZnplaXRfVmVudGlsXzYnLCB7J25hbWUnOidWZW50aWwgNiBFaW5nYWJlIHVuZCBBbnplaWdlIFJlc3RsYXVmemVpdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidsZXZlbCcsJ3VuaXQnOidNaW51dGVuJywnbWluJzowLCAnbWF4Jzo1OSwgJ2RlZic6MCwic21hcnROYW1lIjogZmFsc2UgfV0sCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbix0cnVlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgovL0Z1bmt0aW9uIG1haW4gbWl0IFZlcnrDtmdlcnVuZyBhdWZydWZlbgp0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAvLyBtYWluKCk7Cn0sIDgwMDApOwptYWluKCk7Cgo=
Datenpunkte erstellen
main
Beschreibe diese Funktion …
start_main
2000
ms
log
✅ Das Blockly Gardena Bewässerung ist gestartet
aktive Ventile bei Blockly Start auf 0
aktive_ventile_zaehlen
0
angeschlossene Ventile eigene DP
objekt_id_von_ventil_1_angeschlossen
anlegen_in
.Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_01_angeschlossen
objekt_id_von_ventil_2_angeschlossen
anlegen_in
.Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_02_angeschlossen
objekt_id_von_ventil_3_angeschlossen
anlegen_in
.Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_03_angeschlossen
objekt_id_von_ventil_4_angeschlossen
anlegen_in
.Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_04_angeschlossen
objekt_id_von_ventil_5_angeschlossen
anlegen_in
.Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_05_angeschlossen
objekt_id_von_ventil_6_angeschlossen
anlegen_in
.Gardena.Bewaesserung.Ventile_angeschlossen.Ventil_06_angeschlossen
Restlaufzeit Ventile eigene DP
objekt_id_restlaufzeit_ventil_1_eDP
anlegen_in
.Gardena.Bewaesserung.01Eingabe_und_Anzeige_Restlaufzeit_Ventil_1
objekt_id_restlaufzeit_ventil_2_eDP
anlegen_in
.Gardena.Bewaesserung.02Eingabe_und_Anzeige_Restlaufzeit_Ventil_2
objekt_id_restlaufzeit_ventil_3_eDP
anlegen_in
.Gardena.Bewaesserung.03Eingabe_und_Anzeige_Restlaufzeit_Ventil_3
objekt_id_restlaufzeit_ventil_4_eDP
anlegen_in
.Gardena.Bewaesserung.04Eingabe_und_Anzeige_Restlaufzeit_Ventil_4
objekt_id_restlaufzeit_ventil_5_eDP
anlegen_in
.Gardena.Bewaesserung.05Eingabe_und_Anzeige_Restlaufzeit_Ventil_5
objekt_id_restlaufzeit_ventil_6_eDP
anlegen_in
.Gardena.Bewaesserung.06Eingabe_und_Anzeige_Restlaufzeit_Ventil_6
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
anlegen_in
.Gardena.Bewaesserung.07Eingabe_Gesamtlaufzeit_alle Ventile_nacheinander
objekt_id_laufzeit_alle_ventile_anzeige
anlegen_in
.Gardena.Bewaesserung.08Anzeige_Gesamtlaufzeit_alle Ventile_nacheinander
aktive Ventile eigener DP
objekt_id_aktive_ventile_eDP
anlegen_in
.Gardena.Bewaesserung.09aktive_Ventile
alle Ventile stop eigener DP
objekt_id_alle_ventile_stop_eDP
anlegen_in
.Gardena.Bewaesserung.10false_stoppt_Bewaesserung
angeschlossene Ventile eigener DP
objekt_id_angeschlossene_ventile_eDP
anlegen_in
.Gardena.Bewaesserung.00angeschlossene_Ventile
angeschlossene Ventile bei Blockly einstellen
EQ
Ventil_1_angeschlossen
TRUE
true
FALSE
Object ID
objekt_id_von_ventil_1_angeschlossen
TRUE
0
true
FALSE
Object ID
objekt_id_von_ventil_1_angeschlossen
FALSE
0
EQ
Ventil_2_angeschlossen
TRUE
true
FALSE
Object ID
objekt_id_von_ventil_2_angeschlossen
TRUE
0
true
FALSE
Object ID
objekt_id_von_ventil_2_angeschlossen
FALSE
0
EQ
Ventil_3_angeschlossen
TRUE
true
FALSE
Object ID
objekt_id_von_ventil_3_angeschlossen
TRUE
0
true
FALSE
Object ID
objekt_id_von_ventil_3_angeschlossen
FALSE
0
EQ
Ventil_4_angeschlossen
TRUE
true
FALSE
Object ID
objekt_id_von_ventil_4_angeschlossen
TRUE
0
true
FALSE
Object ID
objekt_id_von_ventil_4_angeschlossen
FALSE
0
EQ
Ventil_5_angeschlossen
TRUE
true
FALSE
Object ID
objekt_id_von_ventil_5_angeschlossen
TRUE
0
true
FALSE
Object ID
objekt_id_von_ventil_5_angeschlossen
FALSE
0
EQ
Ventil_6_angeschlossen
TRUE
true
FALSE
Object ID
objekt_id_von_ventil_6_angeschlossen
TRUE
0
true
FALSE
Object ID
objekt_id_von_ventil_6_angeschlossen
FALSE
0
aktive Ventile zaehlen eigener DP
ne
default
objekt_id_restlaufzeit_ventil_1_eDP
default
objekt_id_restlaufzeit_ventil_2_eDP
default
objekt_id_restlaufzeit_ventil_3_eDP
default
objekt_id_restlaufzeit_ventil_4_eDP
default
objekt_id_restlaufzeit_ventil_5_eDP
default
objekt_id_restlaufzeit_ventil_6_eDP
aktive_ventile_zaehlen
0
NEQ
val
objekt_id_restlaufzeit_ventil_1_eDP
0
aktive_ventile_zaehlen
1
NEQ
val
objekt_id_restlaufzeit_ventil_2_eDP
0
aktive_ventile_zaehlen
1
NEQ
val
objekt_id_restlaufzeit_ventil_3_eDP
0
aktive_ventile_zaehlen
1
NEQ
val
objekt_id_restlaufzeit_ventil_4_eDP
0
aktive_ventile_zaehlen
1
NEQ
val
objekt_id_restlaufzeit_ventil_5_eDP
0
aktive_ventile_zaehlen
1
NEQ
val
objekt_id_restlaufzeit_ventil_6_eDP
0
aktive_ventile_zaehlen
1
true
FALSE
Object ID
objekt_id_aktive_ventile_eDP
TRUE
aktive_ventile_zaehlen
0
angeschlossene Ventile zaehlen eigener DP
ne
default
objekt_id_von_ventil_1_angeschlossen
default
objekt_id_von_ventil_2_angeschlossen
default
objekt_id_von_ventil_3_angeschlossen
default
objekt_id_von_ventil_4_angeschlossen
default
objekt_id_von_ventil_5_angeschlossen
default
objekt_id_von_ventil_6_angeschlossen
angeschlossene_ventile_zaehlen
0
EQ
val
objekt_id_von_ventil_1_angeschlossen
TRUE
angeschlossene_ventile_zaehlen
1
EQ
val
objekt_id_von_ventil_2_angeschlossen
TRUE
angeschlossene_ventile_zaehlen
1
EQ
val
objekt_id_von_ventil_3_angeschlossen
TRUE
angeschlossene_ventile_zaehlen
1
EQ
val
objekt_id_von_ventil_4_angeschlossen
TRUE
angeschlossene_ventile_zaehlen
1
EQ
val
objekt_id_von_ventil_5_angeschlossen
TRUE
angeschlossene_ventile_zaehlen
1
EQ
val
objekt_id_von_ventil_6_angeschlossen
TRUE
angeschlossene_ventile_zaehlen
1
true
FALSE
Object ID
objekt_id_angeschlossene_ventile_eDP
TRUE
angeschlossene_ventile_zaehlen
0
alle Ventile stoppen eigene DP
ne
default
objekt_id_alle_ventile_stop_eDP
state.val
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_laufzeit_alle_ventile_anzeige
TRUE
0
0
false
FALSE
Object ID
objekt_id_alle_ventile_stop_adapter
TRUE
ventil_stop_befehl
0
true
TRUE
Object ID
objekt_id_alle_ventile_stop_eDP
TRUE
2000
Ventil 1 ueber die App
ne
default
objekt_id_restlaufzeit_ventil_1_Adapter
GT
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
0
0
Ventil 2 ueber die App
ne
default
objekt_id_restlaufzeit_ventil_2_Adapter
GT
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
0
0
Ventil 3 ueber die App
ne
default
objekt_id_restlaufzeit_ventil_3_Adapter
GT
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
0
0
Ventil 4 ueber die App
ne
default
objekt_id_restlaufzeit_ventil_4_Adapter
GT
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
0
0
Ventil 5 ueber die App
ne
default
objekt_id_restlaufzeit_ventil_5_Adapter
GT
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
0
0
Ventil 6 ueber die App
ne
default
objekt_id_restlaufzeit_ventil_6_Adapter
GT
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
0
0
Ventil 1 ueber eigenen DP
ne
false
default
objekt_id_restlaufzeit_ventil_1_eDP
EQ
val
Status_Ventil_1
OK
LT
aktive_ventile_zaehlen
3
AND
GT
state.val
0
LTE
state.val
59
false
FALSE
Object ID
objekt_id_ventil_1_dp_start_stop_adapter
TRUE
MULTIPLY
1
state.val
60
0
GT
state.val
59
false
FALSE
Object ID
objekt_id_ventil_1_dp_start_stop_adapter
TRUE
MULTIPLY
59
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_1_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
0
0
warn
❗️ Ventil 1 ist nicht angeschlossen oder nicht erreichbar ❗️
true
TRUE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
0
1000
Ventil 2 ueber eigenen DP
ne
false
default
objekt_id_restlaufzeit_ventil_2_eDP
EQ
val
Status_Ventil_2
OK
LT
aktive_ventile_zaehlen
3
AND
GT
state.val
0
LTE
state.val
59
false
FALSE
Object ID
objekt_id_ventil_2_dp_start_stop_adapter
TRUE
MULTIPLY
1
state.val
60
0
GT
state.val
59
false
FALSE
Object ID
objekt_id_ventil_2_dp_start_stop_adapter
TRUE
MULTIPLY
59
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_2_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
0
0
warn
❗️ Ventil 2 ist nicht angeschlossen oder nicht erreichbar ❗️
true
TRUE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
0
1000
Ventil 3 ueber eigenen DP
ne
false
default
objekt_id_restlaufzeit_ventil_3_eDP
EQ
val
Status_Ventil_3
OK
LT
aktive_ventile_zaehlen
3
AND
GT
state.val
0
LTE
state.val
59
false
FALSE
Object ID
objekt_id_ventil_3_dp_start_stop_adapter
TRUE
MULTIPLY
1
state.val
60
0
GT
state.val
59
false
FALSE
Object ID
objekt_id_ventil_3_dp_start_stop_adapter
TRUE
MULTIPLY
59
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_3_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
0
0
warn
❗️ Ventil 3 ist nicht angeschlossen oder nicht erreichbar ❗️
true
TRUE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
0
1000
Ventil 4 ueber eigenen DP
ne
false
default
objekt_id_restlaufzeit_ventil_4_eDP
EQ
val
Status_Ventil_4
OK
LT
aktive_ventile_zaehlen
3
AND
GT
state.val
0
LTE
state.val
59
false
FALSE
Object ID
objekt_id_ventil_4_dp_start_stop_adapter
TRUE
MULTIPLY
1
state.val
60
0
GT
state.val
59
false
FALSE
Object ID
objekt_id_ventil_4_dp_start_stop_adapter
TRUE
MULTIPLY
59
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_4_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
0
0
warn
❗️ Ventil 4 ist nicht angeschlossen oder nicht erreichbar ❗️
true
TRUE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
0
1000
Ventil 5 ueber eigenen DP
ne
false
default
objekt_id_restlaufzeit_ventil_5_eDP
EQ
val
Status_Ventil_5
OK
LT
aktive_ventile_zaehlen
3
AND
GT
state.val
0
LTE
state.val
59
false
FALSE
Object ID
objekt_id_ventil_5_dp_start_stop_adapter
TRUE
MULTIPLY
1
state.val
60
0
GT
state.val
59
false
FALSE
Object ID
objekt_id_ventil_5_dp_start_stop_adapter
TRUE
MULTIPLY
59
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_5_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
0
0
warn
❗️ Ventil 5 ist nicht angeschlossen oder nicht erreichbar ❗️
true
TRUE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
0
1000
Ventil 6 ueber eigenen DP
ne
false
default
objekt_id_restlaufzeit_ventil_6_eDP
EQ
val
Status_Ventil_6
OK
LT
aktive_ventile_zaehlen
3
AND
GT
state.val
0
LTE
state.val
59
false
FALSE
Object ID
objekt_id_ventil_6_dp_start_stop_adapter
TRUE
MULTIPLY
1
state.val
60
0
GT
state.val
59
false
FALSE
Object ID
objekt_id_ventil_6_dp_start_stop_adapter
TRUE
MULTIPLY
59
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_6_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
0
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
0
0
warn
❗️ Ventil 6 ist nicht angeschlossen oder nicht erreichbar ❗️
true
TRUE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
0
1000
alle Ventile nacheinander eigene DP
ne
default
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
laufzeit_ventil
0
AND
LTE
state.val
MULTIPLY
0
angeschlossene_ventile_zaehlen
59
GTE
state.val
angeschlossene_ventile_zaehlen
true
FALSE
Object ID
objekt_id_laufzeit_alle_ventile_anzeige
TRUE
ROUNDDOWN
3.1
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
TRUE
ROUNDDOWN
3.1
state.val
0
laufzeit_ventil
MULTIPLY
1
DIVIDE
1
state.val
0
angeschlossene_ventile_zaehlen
60000
AND
LT
state.val
angeschlossene_ventile_zaehlen
GT
state.val
0
true
FALSE
Object ID
objekt_id_laufzeit_alle_ventile_anzeige
TRUE
MULTIPLY
1
angeschlossene_ventile_zaehlen
1
0
true
FALSE
Object ID
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
TRUE
MULTIPLY
1
angeschlossene_ventile_zaehlen
1
0
GT
state.val
MULTIPLY
0
angeschlossene_ventile_zaehlen
59
true
FALSE
Object ID
objekt_id_laufzeit_alle_ventile_anzeige
TRUE
MULTIPLY
1
angeschlossene_ventile_zaehlen
59
0
true
FALSE
Object ID
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
TRUE
MULTIPLY
1
angeschlossene_ventile_zaehlen
59
0
Ventil_2
Ventil_3
Ventil_4
Ventil_5
Ventil_6
GT
state.val
0
AND
LT
aktive_ventile_zaehlen
2
EQ
val
objekt_id_von_ventil_1_angeschlossen
TRUE
Ventil 1
false
FALSE
Object ID
objekt_id_ventil_1_dp_start_stop_adapter
TRUE
MULTIPLY
60000
DIVIDE
1
laufzeit_ventil
60000
60
0
EQ
state.val
0
false
FALSE
Object ID
objekt_id_ventil_1_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_1_eDP
TRUE
0
0
AND
LT
aktive_ventile_zaehlen
2
EQ
val
objekt_id_von_ventil_2_angeschlossen
TRUE
Ventil_2
laufzeit_ventil
ms
Ventil 2
GT
state.val
0
false
FALSE
Object ID
objekt_id_ventil_2_dp_start_stop_adapter
TRUE
MULTIPLY
60000
DIVIDE
1
laufzeit_ventil
60000
60
0
EQ
state.val
0
Ventil_2
false
FALSE
Object ID
objekt_id_ventil_2_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_2_eDP
TRUE
0
0
AND
LT
aktive_ventile_zaehlen
2
EQ
val
objekt_id_von_ventil_3_angeschlossen
TRUE
Ventil_3
laufzeit_ventil
ms
Ventil 3
GT
state.val
0
false
FALSE
Object ID
objekt_id_ventil_3_dp_start_stop_adapter
TRUE
MULTIPLY
60000
DIVIDE
1
laufzeit_ventil
60000
60
0
EQ
state.val
0
Ventil_3
false
FALSE
Object ID
objekt_id_ventil_3_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_3_eDP
TRUE
0
0
AND
LT
aktive_ventile_zaehlen
2
EQ
val
objekt_id_von_ventil_4_angeschlossen
TRUE
Ventil_4
laufzeit_ventil
ms
Ventil 4
GT
state.val
0
false
FALSE
Object ID
objekt_id_ventil_4_dp_start_stop_adapter
TRUE
MULTIPLY
60000
DIVIDE
1
laufzeit_ventil
60000
60
0
EQ
state.val
0
Ventil_4
false
FALSE
Object ID
objekt_id_ventil_4_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_4_eDP
TRUE
0
0
AND
LT
aktive_ventile_zaehlen
2
EQ
val
objekt_id_von_ventil_5_angeschlossen
TRUE
Ventil_5
laufzeit_ventil
ms
Ventil 5
GT
state.val
0
false
FALSE
Object ID
objekt_id_ventil_5_dp_start_stop_adapter
TRUE
MULTIPLY
60000
DIVIDE
1
laufzeit_ventil
60000
60
0
EQ
state.val
0
Ventil_5
false
FALSE
Object ID
objekt_id_ventil_5_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_5_eDP
TRUE
0
0
AND
LT
aktive_ventile_zaehlen
2
EQ
val
objekt_id_von_ventil_6_angeschlossen
TRUE
Ventil_6
laufzeit_ventil
ms
Ventil 6
GT
state.val
0
false
FALSE
Object ID
objekt_id_ventil_6_dp_start_stop_adapter
TRUE
MULTIPLY
60000
DIVIDE
1
laufzeit_ventil
60000
60
0
EQ
state.val
0
Ventil_6
false
FALSE
Object ID
objekt_id_ventil_6_dp_start_stop_adapter
TRUE
ventil_stop_befehl
0
true
FALSE
Object ID
objekt_id_restlaufzeit_ventil_6_eDP
TRUE
0
0
EQ
state.val
0
true
FALSE
Object ID
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
TRUE
0
0
false
FALSE
Object ID
objekt_id_alle_ventile_stop_adapter
TRUE
ventil_stop_befehl
0
Ventil_2
Ventil_3
Ventil_4
Ventil_5
Ventil_6
Anzeige Laufzeit alle Ventile eigener DP
ne
default
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
restlaufzeit_alle_ventile_anzeige
GT
state.val
0
true
FALSE
objekt_id_laufzeit_alle_ventile_anzeige
TRUE
val
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
0
restlaufzeit_alle_ventile_anzeige
restlaufzeit_alle_ventile_anzeige
1
min
GT
val
objekt_id_laufzeit_alle_ventile_anzeige
0
true
FALSE
objekt_id_laufzeit_alle_ventile_anzeige
TRUE
MINUS
1
val
objekt_id_laufzeit_alle_ventile_anzeige
1
0
Eingabe Laufzeit alle Ventile auf 0 eigener DP
ne
default
objekt_id_laufzeit_alle_ventile_anzeige
EQ
state.val
0
true
FALSE
objekt_id_restlaufzeit_alle_Ventile_nacheinander_eDP
0
0
Alle Ventile Stopp in der App
ne
default
objekt_id_restlaufzeit_ventil_1_Adapter
default
objekt_id_restlaufzeit_ventil_2_Adapter
default
objekt_id_restlaufzeit_ventil_3_Adapter
default
objekt_id_restlaufzeit_ventil_4_Adapter
default
objekt_id_restlaufzeit_ventil_5_Adapter
default
objekt_id_restlaufzeit_ventil_6_Adapter
alles_aus
alles_aus
5000
ms
AND
EQ
val
objekt_id_restlaufzeit_ventil_1_Adapter
null
AND
EQ
val
objekt_id_restlaufzeit_ventil_2_Adapter
null
AND
EQ
val
objekt_id_restlaufzeit_ventil_3_Adapter
null
AND
EQ
val
objekt_id_restlaufzeit_ventil_4_Adapter
null
AND
EQ
val
objekt_id_restlaufzeit_ventil_5_Adapter
null
EQ
val
objekt_id_restlaufzeit_ventil_6_Adapter
null
true
FALSE
Object ID
objekt_id_alle_ventile_stop_eDP
FALSE
0
start_main
start
dp_erstellen
alles_aus
Ventil_2
Ventil_3
Ventil_4
Ventil_5
Ventil_6
start
1000
ms
max_laufzeit
0
Ventil_1_angeschlossen
max_laufzeit
59
Ventil_2_angeschlossen
max_laufzeit
59
Ventil_3_angeschlossen
max_laufzeit
59
Ventil_4_angeschlossen
max_laufzeit
59
Ventil_5_angeschlossen
max_laufzeit
59
Ventil_6_angeschlossen
max_laufzeit
59
Forum Link: https://forum.iobroker.net/post/408094
0_userdata.0 oder javascript.x
javascript.x (x=Instanznummer)
anlegen_in
0_userdata.0
angeschlossene Ventile auf wahr stellen
Ventil_1_angeschlossen
TRUE
Ventil_2_angeschlossen
TRUE
Ventil_3_angeschlossen
TRUE
Ventil_4_angeschlossen
TRUE
Ventil_5_angeschlossen
FALSE
Ventil_6_angeschlossen
FALSE
Falls iot Adapter verwendet wird
Alexa_verwenden
TRUE
SmartName für iot Adapter-Alexa reinschreiben
Alexa_SmartName_Ventil_1
Ventil eins
Alexa_SmartName_Ventil_2
Ventil zwei
Alexa_SmartName_Ventil_3
Ventil drei
Alexa_SmartName_Ventil_4
Ventil vier
Alexa_SmartName_Ventil_5
Ventil fünf
Alexa_SmartName_Ventil_6
Ventil sechs
Alexa_SmartName_alle_Ventile_nacheinander
alle Ventile
Alexa_SmartName_alle_Ventile_stop
Bewässerung
Ventile start-stop smartgarden Adapter auswählen
objekt_id_ventil_1_dp_start_stop_adapter
smartgarden.0.LOCATION_xxx.duration_value
objekt_id_ventil_2_dp_start_stop_adapter
smartgarden.0.LOCATION_xxx.duration_value
objekt_id_ventil_3_dp_start_stop_adapter
smartgarden.0.LOCATION_xxx.duration_value
objekt_id_ventil_4_dp_start_stop_adapter
smartgarden.0.LOCATION_xxx.duration_value
objekt_id_ventil_5_dp_start_stop_adapter
smartgarden.0.LOCATION_xxx.duration_value
objekt_id_ventil_6_dp_start_stop_adapter
smartgarden.0.LOCATION_xxx.duration_value
objekt_id_alle_ventile_stop_adapter
smartgarden.0.LOCATION_xxx.stop_all_valves_i
ventil_stop_befehl
STOP_UNTIL_NEXT_TASK
Status Ventile smartgarden Adapter auswählen
Status_Ventil_1
smartgarden.0.LOCATION_xxx.state_value
Status_Ventil_2
smartgarden.0.LOCATION_xxx.state_value
Status_Ventil_3
smartgarden.0.LOCATION_xxx.state_value
Status_Ventil_4
smartgarden.0.LOCATION_xxx.state_value
Status_Ventil_5
smartgarden.0.LOCATION_xxx.state_value
Status_Ventil_6
smartgarden.0.LOCATION_xxx.state_value
Ventile Restlaufzeit smartgarden Adapter auswählen
objekt_id_restlaufzeit_ventil_1_Adapter
smartgarden.0.LOCATION_xxx.duration_leftover_i
objekt_id_restlaufzeit_ventil_2_Adapter
smartgarden.0.LOCATION_xxx.duration_leftover_i
objekt_id_restlaufzeit_ventil_3_Adapter
smartgarden.0.LOCATION_xxx.duration_leftover_i
objekt_id_restlaufzeit_ventil_4_Adapter
smartgarden.0.LOCATION_xxx.duration_leftover_i
objekt_id_restlaufzeit_ventil_5_Adapter
smartgarden.0.LOCATION_xxx.duration_leftover_i
objekt_id_restlaufzeit_ventil_6_Adapter
smartgarden.0.LOCATION_xxx.duration_leftover_i
dp_erstellen
2000
ms