diff --git a/addons/cetmix_tower_yaml/wizards/cx_tower_yaml_export_wiz.py b/addons/cetmix_tower_yaml/wizards/cx_tower_yaml_export_wiz.py new file mode 100644 index 0000000..c7ece3f --- /dev/null +++ b/addons/cetmix_tower_yaml/wizards/cx_tower_yaml_export_wiz.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjQgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KaW1wb3J0IGJhc2U2NAppbXBvcnQgcmUKCmZyb20gb2RvbyBpbXBvcnQgXywgYXBpLCBmaWVsZHMsIG1vZGVscwpmcm9tIG9kb28uZXhjZXB0aW9ucyBpbXBvcnQgVmFsaWRhdGlvbkVycm9yCgpmcm9tIC4ubW9kZWxzLmN4X3Rvd2VyX3lhbWxfbWl4aW4gaW1wb3J0IFlhbWxFeHBvcnRDb2xsZWN0b3IKCkZJTEVfSEVBREVSID0gIiIiCiMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCB3aXRoIENldG1peCBUb3dlci4KIyBEZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uOiBodHRwczovL2NldG1peC5jb20vdG93ZXIKIiIiCgpDTEVBTl9TVFIgPSByZS5jb21waWxlKHIiW15hLXowLTlfXSIpCgoKY2xhc3MgQ3hUb3dlcllhbWxFeHBvcnRXaXoobW9kZWxzLlRyYW5zaWVudE1vZGVsKToKICAgICIiIkNldG1peCBUb3dlciBZQU1MIEV4cG9ydCBXaXphcmQiIiIKCiAgICBfbmFtZSA9ICJjeC50b3dlci55YW1sLmV4cG9ydC53aXoiCiAgICBfZGVzY3JpcHRpb24gPSAiQ2V0bWl4IFRvd2VyIFlBTUwgRXhwb3J0IFdpemFyZCIKCiAgICB5YW1sX2NvZGUgPSBmaWVsZHMuVGV4dCgpCiAgICB5YW1sX2ZpbGVfbmFtZSA9IGZpZWxkcy5DaGFyKAogICAgICAgIHN0cmluZz0iWUFNTCBGaWxlIE5hbWUiLAogICAgICAgIHNpemU9MjU1LAogICAgICAgIGRlZmF1bHQ9bGFtYmRhIHNlbGY6IHNlbGYuX2RlZmF1bHRfeWFtbF9maWxlX25hbWUoKSwKICAgICAgICBoZWxwPSJTbmlwcGV0IGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbiwgZWcgJ215X3NuaXBwZXQnIiwKICAgICkKCiAgICBleHBsb2RlX2NoaWxkX3JlY29yZHMgPSBmaWVsZHMuQm9vbGVhbigKICAgICAgICBkZWZhdWx0PVRydWUsCiAgICAgICAgaGVscD0iQWRkIGVudGlyZSBjaGlsZCByZWNvcmQgZGVmaW5pdGlvbnMgdG8gdGhlIGV4cG9ydGVkIFlBTUwgZmlsZS4gIgogICAgICAgICJPdGhlcndpc2Ugb25seSByZWZlcmVuY2VzIHRvIGNoaWxkIHJlY29yZHMgd2lsbCBiZSBhZGRlZC4iLAogICAgKQogICAgcmVtb3ZlX2VtcHR5X3ZhbHVlcyA9IGZpZWxkcy5Cb29sZWFuKAogICAgICAgIHN0cmluZz0iUmVtb3ZlIEVtcHR5IHgybSBGaWVsZCBWYWx1ZXMiLAogICAgICAgIGRlZmF1bHQ9VHJ1ZSwKICAgICAgICBoZWxwPSJSZW1vdmUgZW1wdHkgTWFueTJvbmUsIE1hbnkybWFueSBhbmQgT25lMm1hbnkiCiAgICAgICAgIiBmaWVsZCB2YWx1ZXMgZnJvbSB0aGUgZXhwb3J0ZWQgWUFNTCBmaWxlLiIsCiAgICApCiAgICBwcmV2aWV3X2NvZGUgPSBmaWVsZHMuQm9vbGVhbigpCiAgICBhZGRfbWFuaWZlc3QgPSBmaWVsZHMuQm9vbGVhbigpCgogICAgTUFOSUZFU1RfRklFTERTID0gWwogICAgICAgICJtYW5pZmVzdF90ZW1wbGF0ZV9pZCIsCiAgICAgICAgIm1hbmlmZXN0X25hbWUiLAogICAgICAgICJtYW5pZmVzdF9hdXRob3JfaWRzIiwKICAgICAgICAibWFuaWZlc3RfdmVyc2lvbiIsCiAgICAgICAgIm1hbmlmZXN0X3N1bW1hcnkiLAogICAgICAgICJtYW5pZmVzdF9kZXNjcmlwdGlvbiIsCiAgICAgICAgIm1hbmlmZXN0X3dlYnNpdGUiLAogICAgICAgICJtYW5pZmVzdF9saWNlbnNlIiwKICAgICAgICAibWFuaWZlc3RfbGljZW5zZV90ZXh0IiwKICAgICAgICAibWFuaWZlc3RfY3VycmVuY3kiLAogICAgICAgICJtYW5pZmVzdF9wcmljZSIsCiAgICBdCgogICAgQGFwaS5tb2RlbAogICAgZGVmIF9nZXRfbWFuaWZlc3RfbGljZW5zZV9zZWxlY3Rpb24oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuZW52WyJjeC50b3dlci55YW1sLm1hbmlmZXN0LnRtcGwiXS5fc2VsZWN0aW9uX2xpY2Vuc2UoKQoKICAgIEBhcGkubW9kZWwKICAgIGRlZiBfZ2V0X21hbmlmZXN0X2N1cnJlbmN5X3NlbGVjdGlvbihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5lbnZbImN4LnRvd2VyLnlhbWwubWFuaWZlc3QudG1wbCJdLl9zZWxlY3Rpb25fY3VycmVuY3koKQoKICAgIG1hbmlmZXN0X3RlbXBsYXRlX2lkID0gZmllbGRzLk1hbnkyb25lKAogICAgICAgICJjeC50b3dlci55YW1sLm1hbmlmZXN0LnRtcGwiLAogICAgKQogICAgbWFuaWZlc3RfbmFtZSA9IGZpZWxkcy5DaGFyKAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX21hbmlmZXN0IiwKICAgICAgICByZWFkb25seT1GYWxzZSwKICAgICAgICBzdG9yZT1UcnVlLAogICAgICAgIHN0cmluZz0iU25pcHBldCBOYW1lIiwKICAgICAgICBoZWxwPSJMZWF2ZSB0aGlzIGZpZWxkIGJsYW5rIGlmIHlvdSBkb24ndCB3YW50IHRvIGNyZWF0ZSBhIG1hbmlmZXN0IiwKICAgICkKICAgIG1hbmlmZXN0X3dlYnNpdGUgPSBmaWVsZHMuQ2hhcigKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV9tYW5pZmVzdCIsCiAgICAgICAgcmVhZG9ubHk9RmFsc2UsCiAgICAgICAgc3RyaW5nPSJXZWJzaXRlIiwKICAgICAgICBzdG9yZT1UcnVlLAogICAgKQogICAgbWFuaWZlc3RfbGljZW5zZSA9IGZpZWxkcy5TZWxlY3Rpb24oCiAgICAgICAgc2VsZWN0aW9uPSJfZ2V0X21hbmlmZXN0X2xpY2Vuc2Vfc2VsZWN0aW9uIiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV9tYW5pZmVzdCIsCiAgICAgICAgcmVhZG9ubHk9RmFsc2UsCiAgICAgICAgc3RyaW5nPSJMaWNlbnNlIiwKICAgICAgICBzdG9yZT1UcnVlLAogICAgKQogICAgbWFuaWZlc3RfYXV0aG9yX2lkcyA9IGZpZWxkcy5NYW55Mm1hbnkoCiAgICAgICAgImN4LnRvd2VyLnlhbWwubWFuaWZlc3QuYXV0aG9yIiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV9tYW5pZmVzdCIsCiAgICAgICAgcmVhZG9ubHk9RmFsc2UsCiAgICAgICAgc3RyaW5nPSJBdXRob3JzIiwKICAgICAgICBzdG9yZT1UcnVlLAogICAgKQogICAgbWFuaWZlc3RfbGljZW5zZV90ZXh0ID0gZmllbGRzLlRleHQoCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfbWFuaWZlc3QiLCByZWFkb25seT1GYWxzZSwgc3RyaW5nPSJMaWNlbnNlIFRleHQiLCBzdG9yZT1UcnVlCiAgICApCiAgICBtYW5pZmVzdF9jdXJyZW5jeSA9IGZpZWxkcy5TZWxlY3Rpb24oCiAgICAgICAgc2VsZWN0aW9uPSJfZ2V0X21hbmlmZXN0X2N1cnJlbmN5X3NlbGVjdGlvbiIsCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfbWFuaWZlc3QiLAogICAgICAgIHN0cmluZz0iQ3VycmVuY3kiLAogICAgICAgIHJlYWRvbmx5PUZhbHNlLAogICAgICAgIHN0b3JlPVRydWUsCiAgICApCiAgICBtYW5pZmVzdF9zdW1tYXJ5ID0gZmllbGRzLkNoYXIoCiAgICAgICAgc3RyaW5nPSJTdW1tYXJ5IiwKICAgICAgICBzaXplPTE2MCwKICAgICAgICBoZWxwPSJTaG9ydCBzdW1tYXJ5IHRoYXQgaW5jbHVkZXMgY29yZSBpbmZvcm1hdGlvbi4gMTYwIHN5bWJvbHMgbWF4IiwKICAgICkKICAgIG1hbmlmZXN0X2Rlc2NyaXB0aW9uID0gZmllbGRzLlRleHQoIkRlc2NyaXB0aW9uIikKICAgIG1hbmlmZXN0X3ByaWNlID0gZmllbGRzLkZsb2F0KCJQcmljZSIpCgogICAgbWFuaWZlc3RfdmVyc2lvbiA9IGZpZWxkcy5DaGFyKAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX21hbmlmZXN0IiwKICAgICAgICByZWFkb25seT1GYWxzZSwKICAgICAgICBzdG9yZT1UcnVlLAogICAgICAgIHN0cmluZz0iVmVyc2lvbiIsCiAgICAgICAgaGVscD0iVXNlIHRoZSBNYWpvci5NaW5vci5QYXRjaCBmb3JtYXQsIGUuZy4gMS4yLjMiLAogICAgKQoKICAgIGRlZiBfY2xlYW5feWFtbF9iYXNlbmFtZShzZWxmLCBuYW1lOiBzdHIpIC0+IHN0cjoKICAgICAgICAiIiIKICAgICAgICBSZXR1cm4gKmFsd2F5cy12YWxpZCogYmFzZW5hbWUgKG5vIGV4dGVuc2lvbikgYnVpbHQgZnJvbSBhcmJpdHJhcnkgKm5hbWUqLgogICAgICAgICIiIgogICAgICAgIHJhdyA9IChuYW1lIG9yICIiKS5zdHJpcCgpLmxvd2VyKCkKICAgICAgICBiYXNlID0gcmF3WzotNV0gaWYgcmF3LmVuZHN3aXRoKCIueWFtbCIpIGVsc2UgcmF3CiAgICAgICAgYmFzZSA9IENMRUFOX1NUUi5zdWIoIl8iLCBiYXNlKQogICAgICAgIGJhc2UgPSByZS5zdWIociJfKyIsICJfIiwgYmFzZSkuc3RyaXAoIl8iKSBvciAic25pcHBldCIKICAgICAgICByZXR1cm4gYmFzZQoKICAgIGRlZiBfZGVmYXVsdF95YW1sX2ZpbGVfbmFtZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBCdWlsZCB0aGUgKmluaXRpYWwqIGZpbGUgbmFtZSBzaG93biB0byB0aGUgdXNlci4KICAgICAgICBQYXR0ZXJuOiA8bW9kZWw+XzxyZWZlcmVuY2U+LCB3aXRob3V0IOKAnC55YW1s4oCdIHN1ZmZpeC4KICAgICAgICAiIiIKICAgICAgICByZWNvcmRzID0gc2VsZi5fZ2V0X21vZGVsX3JlY29yZCgpCiAgICAgICAgcHJlZml4ID0gcmVjb3Jkcy5fbmFtZS5yZXBsYWNlKCJjeC50b3dlci4iLCAiIikucmVwbGFjZSgiLiIsICJfIikKICAgICAgICByZWYgPSByZWNvcmRzLnJlZmVyZW5jZSBpZiBsZW4ocmVjb3JkcykgPT0gMSBlbHNlICJzZWxlY3RlZCIKICAgICAgICByZXR1cm4gZiJ7cHJlZml4fV97cmVmfSIKCiAgICBAYXBpLmRlcGVuZHMoIm1hbmlmZXN0X3RlbXBsYXRlX2lkIikKICAgIGRlZiBfY29tcHV0ZV9tYW5pZmVzdChzZWxmKToKICAgICAgICBtYXBwaW5nID0gewogICAgICAgICAgICAibWFuaWZlc3RfYXV0aG9yX2lkcyI6ICJhdXRob3JfaWRzIiwKICAgICAgICAgICAgIm1hbmlmZXN0X3dlYnNpdGUiOiAid2Vic2l0ZSIsCiAgICAgICAgICAgICJtYW5pZmVzdF9saWNlbnNlIjogImxpY2Vuc2UiLAogICAgICAgICAgICAibWFuaWZlc3RfbGljZW5zZV90ZXh0IjogImxpY2Vuc2VfdGV4dCIsCiAgICAgICAgICAgICJtYW5pZmVzdF9jdXJyZW5jeSI6ICJjdXJyZW5jeSIsCiAgICAgICAgICAgICJtYW5pZmVzdF92ZXJzaW9uIjogInZlcnNpb24iLAogICAgICAgIH0KICAgICAgICBmb3IgcmVjIGluIHNlbGY6CiAgICAgICAgICAgIHRtcGwgPSByZWMubWFuaWZlc3RfdGVtcGxhdGVfaWQKICAgICAgICAgICAgaWYgbm90IHRtcGw6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBmb3Igd2l6X2ZpZWxkLCB0bXBsX2ZpZWxkIGluIG1hcHBpbmcuaXRlbXMoKToKICAgICAgICAgICAgICAgIGlmIG5vdCByZWNbd2l6X2ZpZWxkXToKICAgICAgICAgICAgICAgICAgICByZWNbd2l6X2ZpZWxkXSA9IHRtcGxbdG1wbF9maWVsZF0KCiAgICAgICAgICAgICMgcHJlcGVuZCB0ZW1wbGF0ZSdzIGZpbGUgcHJlZml4IHRvIFlBTUwgZmlsZSBuYW1lCiAgICAgICAgICAgIHByZWZpeCA9ICh0bXBsLmZpbGVfcHJlZml4IG9yICIiKS5zdHJpcCgpCiAgICAgICAgICAgIGlmIHByZWZpeDoKICAgICAgICAgICAgICAgICMgc2FuaXRpemUgcHJlZml4IHdpdGhvdXQgZGVmYXVsdGluZyB0byBhIHBsYWNlaG9sZGVyIGxpa2UgInNuaXBwZXQiCiAgICAgICAgICAgICAgICByYXcgPSBwcmVmaXgubG93ZXIoKQogICAgICAgICAgICAgICAgc2FuaXRpemVkX3ByZWZpeCA9IHJlLnN1YihyIl8rIiwgIl8iLCBDTEVBTl9TVFIuc3ViKCJfIiwgcmF3KSkuc3RyaXAoCiAgICAgICAgICAgICAgICAgICAgIl8iCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBpZiBzYW5pdGl6ZWRfcHJlZml4OgogICAgICAgICAgICAgICAgICAgICMgdXNlIGN1cnJlbnQgb3IgZGVmYXVsdCBiYXNlIG5hbWUsIHRoZW4gY2xlYW4gaXQKICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmVjLnlhbWxfZmlsZV9uYW1lIG9yIHJlYy5fZGVmYXVsdF95YW1sX2ZpbGVfbmFtZSgpCiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHJlYy5fY2xlYW5feWFtbF9iYXNlbmFtZShjdXJyZW50KQogICAgICAgICAgICAgICAgICAgICMgYXZvaWQgZG91YmxlLXByZWZpeGluZwogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBiYXNlLnN0YXJ0c3dpdGgoZiJ7c2FuaXRpemVkX3ByZWZpeH1fIik6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlYy55YW1sX2ZpbGVfbmFtZSA9IHJlYy5fY2xlYW5feWFtbF9iYXNlbmFtZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYie3Nhbml0aXplZF9wcmVmaXh9X3tiYXNlfSIKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgIEBhcGkub25jaGFuZ2UoIm1hbmlmZXN0X2xpY2Vuc2UiKQogICAgZGVmIF9vbmNoYW5nZV9tYW5pZmVzdF9saWNlbnNlKHNlbGYpOgogICAgICAgICIiIkRyb3AgcHJpY2UgYW5kIGN1cnJlbmN5IHdoZW4gdXNlciBzd2l0Y2hlcyBvZmYgdGhlICdjdXN0b20nIGxpY2Vuc2UuCgogICAgICAgIElmIG1hbmlmZXN0X2xpY2Vuc2UgIT0gJ2N1c3RvbScsIHJlc2V0IG1hbmlmZXN0X3ByaWNlIHRvIDAuMCBhbmQKICAgICAgICBtYW5pZmVzdF9jdXJyZW5jeSB0byBGYWxzZSBzbyB0aGV5IHdvbuKAmXQgYXBwZWFyIGluIHRoZSBnZW5lcmF0ZWQgWUFNTC4KICAgICAgICAiIiIKICAgICAgICBmb3IgcmVjIGluIHNlbGY6CiAgICAgICAgICAgIGlmIHJlYy5tYW5pZmVzdF9saWNlbnNlICE9ICJjdXN0b20iOgogICAgICAgICAgICAgICAgcmVjLm1hbmlmZXN0X3ByaWNlID0gMC4wCiAgICAgICAgICAgICAgICByZWMubWFuaWZlc3RfY3VycmVuY3kgPSBGYWxzZQoKICAgIEBhcGkub25jaGFuZ2UoImV4cGxvZGVfY2hpbGRfcmVjb3JkcyIsICJyZW1vdmVfZW1wdHlfdmFsdWVzIiwgKk1BTklGRVNUX0ZJRUxEUykKICAgIGRlZiBvbmNoYW5nZV9leHBsb2RlX2NoaWxkX3JlY29yZHMoc2VsZik6CiAgICAgICAgIiIiQ29tcHV0ZSBZQU1MIGNvZGUgYW5kIGZpbGUgY29udGVudC4iIiIKCiAgICAgICAgc2VsZi5lbnN1cmVfb25lKCkKCiAgICAgICAgIyBHZXQgbW9kZWwgcmVjb3JkcwogICAgICAgIHJlY29yZHMgPSBzZWxmLl9nZXRfbW9kZWxfcmVjb3JkKCkKICAgICAgICBpZiBub3QgcmVjb3JkczoKICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKF8oIk5vIHZhbGlkIHJlY29yZHMgc2VsZWN0ZWQiKSkKCiAgICAgICAgZXhwbG9kZV9yZWxhdGVkX3JlY29yZCA9IHNlbGYuZXhwbG9kZV9jaGlsZF9yZWNvcmRzCiAgICAgICAgcmVtb3ZlX2VtcHR5X3ZhbHVlcyA9IHNlbGYucmVtb3ZlX2VtcHR5X3ZhbHVlcwoKICAgICAgICAjIFByZXBhcmUgWUFNTCBoZWFkZXIKICAgICAgICB5YW1sX2hlYWRlciA9IEZJTEVfSEVBREVSLnJzdHJpcCgiXG4iKQogICAgICAgICMgVXNlIHRoZSBZQU1MIGV4cG9ydCBjb2xsZWN0b3IgZm9yIHVuaXF1ZSByZWNvcmRzCiAgICAgICAgY29sbGVjdG9yID0gWWFtbEV4cG9ydENvbGxlY3RvcigpCiAgICAgICAgcmVjb3JkX2xpc3QgPSBbXQogICAgICAgIGZvciByZWMgaW4gcmVjb3JkczoKICAgICAgICAgICAgcmVjb3JkX3lhbWxfZGljdCA9IHJlYy53aXRoX2NvbnRleHQoCiAgICAgICAgICAgICAgICBleHBsb2RlX3JlbGF0ZWRfcmVjb3JkPWV4cGxvZGVfcmVsYXRlZF9yZWNvcmQsCiAgICAgICAgICAgICAgICByZW1vdmVfZW1wdHlfdmFsdWVzPXJlbW92ZV9lbXB0eV92YWx1ZXMsCiAgICAgICAgICAgICAgICB5YW1sX2NvbGxlY3Rvcj1jb2xsZWN0b3IsCiAgICAgICAgICAgICkuX3ByZXBhcmVfcmVjb3JkX2Zvcl95YW1sKCkKCiAgICAgICAgICAgIGlmIG5vdCByZWNvcmRfeWFtbF9kaWN0OgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZWNvcmRfeWFtbF9kaWN0LCBkaWN0KSBhbmQgbGlzdChyZWNvcmRfeWFtbF9kaWN0KSA9PSBbCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIgogICAgICAgICAgICBdOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGlmICJjZXRtaXhfdG93ZXJfbW9kZWwiIG5vdCBpbiByZWNvcmRfeWFtbF9kaWN0OgogICAgICAgICAgICAgICAgcmVjb3JkX3lhbWxfZGljdFsiY2V0bWl4X3Rvd2VyX21vZGVsIl0gPSByZWMuX25hbWUucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAiY3gudG93ZXIuIiwgIiIKICAgICAgICAgICAgICAgICkucmVwbGFjZSgiLiIsICJfIikKCiAgICAgICAgICAgIHJlY29yZF9saXN0LmFwcGVuZChyZWNvcmRfeWFtbF9kaWN0KQoKICAgICAgICBpZiBub3QgcmVjb3JkX2xpc3Q6CiAgICAgICAgICAgIHNlbGYueWFtbF9jb2RlID0gZiJ7eWFtbF9oZWFkZXJ9XG4iCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBpZiBub3Qgc2VsZi5tYW5pZmVzdF9uYW1lOgogICAgICAgICAgICBtYW5pZmVzdCA9IHt9CiAgICAgICAgZWxzZToKICAgICAgICAgICAgbGljID0gKHNlbGYubWFuaWZlc3RfbGljZW5zZSBvciAiIikubG93ZXIoKQoKICAgICAgICAgICAgZmllbGRzX29yZGVyID0gWwogICAgICAgICAgICAgICAgKCJuYW1lIiwgc2VsZi5tYW5pZmVzdF9uYW1lKSwKICAgICAgICAgICAgICAgICgic3VtbWFyeSIsIHNlbGYubWFuaWZlc3Rfc3VtbWFyeSksCiAgICAgICAgICAgICAgICAoImRlc2NyaXB0aW9uIiwgc2VsZi5tYW5pZmVzdF9kZXNjcmlwdGlvbiksCiAgICAgICAgICAgICAgICAoImF1dGhvciIsIHNlbGYubWFuaWZlc3RfYXV0aG9yX2lkcy5tYXBwZWQoIm5hbWUiKSksCiAgICAgICAgICAgICAgICAoInZlcnNpb24iLCBzZWxmLm1hbmlmZXN0X3ZlcnNpb24pLAogICAgICAgICAgICAgICAgKCJ3ZWJzaXRlIiwgc2VsZi5tYW5pZmVzdF93ZWJzaXRlKSwKICAgICAgICAgICAgICAgICgibGljZW5zZSIsIHNlbGYubWFuaWZlc3RfbGljZW5zZSksCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgImxpY2Vuc2VfdGV4dCIsCiAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFuaWZlc3RfbGljZW5zZV90ZXh0IG9yICIiKS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgaWYgbGljID09ICJjdXN0b20iCiAgICAgICAgICAgICAgICAgICAgZWxzZSBOb25lLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICgicHJpY2UiLCBzZWxmLm1hbmlmZXN0X3ByaWNlKSwKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAiY3VycmVuY3kiLAogICAgICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfY3VycmVuY3kgaWYgbGljID09ICJjdXN0b20iIGVsc2UgTm9uZSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0KICAgICAgICAgICAgbWFuaWZlc3QgPSB7azogdiBmb3IgaywgdiBpbiBmaWVsZHNfb3JkZXIgaWYgdiBub3QgaW4gKEZhbHNlLCBOb25lLCAiIiwgW10pfQoKICAgICAgICByZXN1bHRfZGljdCA9IHsKICAgICAgICAgICAgImNldG1peF90b3dlcl95YW1sX3ZlcnNpb24iOiBzZWxmLmVudlsKICAgICAgICAgICAgICAgICJjeC50b3dlci55YW1sLm1peGluIgogICAgICAgICAgICBdLkNFVE1JWF9UT1dFUl9ZQU1MX1ZFUlNJT04sCiAgICAgICAgfQogICAgICAgIGlmIG1hbmlmZXN0OgogICAgICAgICAgICByZXN1bHRfZGljdFsibWFuaWZlc3QiXSA9IG1hbmlmZXN0CiAgICAgICAgcmVzdWx0X2RpY3RbInJlY29yZHMiXSA9IHJlY29yZF9saXN0CgogICAgICAgIHNlbGYueWFtbF9jb2RlID0gZiJ7eWFtbF9oZWFkZXJ9XG57cmVjb3Jkcy5fY29udmVydF9kaWN0X3RvX3lhbWwocmVzdWx0X2RpY3QpfSIKCiAgICBAYXBpLm9uY2hhbmdlKCJ5YW1sX2ZpbGVfbmFtZSIpCiAgICBkZWYgX29uY2hhbmdlX3lhbWxfZmlsZV9uYW1lKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIExpdmUtY2xlYW4gdGhlIFlBTUwgZmlsZSBuYW1lIGFzIHRoZSB1c2VyIHR5cGVzOgogICAgICAgIC0gbG93ZXJjYXNlLCB0cmltIHdoaXRlc3BhY2UKICAgICAgICAtIHJlcGxhY2UgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGgg4oCcX+KAnQogICAgICAgIC0gY29sbGFwc2UgcmVwZWF0ZWQgdW5kZXJzY29yZXMKICAgICAgICAtIGVuc3VyZSBhIHNpbmdsZSDigJwueWFtbOKAnSBzdWZmaXgKICAgICAgICAiIiIKICAgICAgICBmb3IgcmVjIGluIHNlbGY6CiAgICAgICAgICAgIHJlYy55YW1sX2ZpbGVfbmFtZSA9IHJlYy5fY2xlYW5feWFtbF9iYXNlbmFtZShyZWMueWFtbF9maWxlX25hbWUpCgogICAgQGFwaS5jb25zdHJhaW5zKCJtYW5pZmVzdF92ZXJzaW9uIikKICAgIGRlZiBfY2hlY2tfbWFuaWZlc3RfdmVyc2lvbl9mb3JtYXQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIHRoZSB1c2VyIHR5cGVzIGEgc2VtYW50aWMgdmVyc2lvbiAoeC55LnopIGluIHRoZSB3aXphcmQgaXRzZWxmLgogICAgICAgICIiIgogICAgICAgIHNlbXZlciA9IHJlLmNvbXBpbGUociJeXGQrXC5cZCtcLlxkKyQiKQogICAgICAgIGZvciByZWMgaW4gc2VsZjoKICAgICAgICAgICAgaWYgcmVjLm1hbmlmZXN0X3ZlcnNpb24gYW5kIG5vdCBzZW12ZXIubWF0Y2gocmVjLm1hbmlmZXN0X3ZlcnNpb24pOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgIF8oIlZlcnNpb24gbXVzdCBiZSBpbiBmb3JtYXQgTWFqb3IuTWlub3IuUGF0Y2gsIGUuZy4gMS4yLjMiKQogICAgICAgICAgICAgICAgKQoKICAgIGRlZiBfdmFsaWRhdGVfbWFuaWZlc3Qoc2VsZik6CiAgICAgICAgIiIiTG9naWNhbCBjcm9zcy1jaGVja3MgYmVmb3JlIHNhdmluZyBZQU1MLiIiIgogICAgICAgIGlmIHNlbGYubWFuaWZlc3RfcHJpY2UgYW5kIG5vdCBzZWxmLm1hbmlmZXN0X2N1cnJlbmN5OgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoXygiQ3VycmVuY3kgaXMgcmVxdWlyZWQgd2hlbiBwcmljZSBpcyBzcGVjaWZpZWQiKSkKICAgICAgICBpZiAoc2VsZi5tYW5pZmVzdF9saWNlbnNlIG9yICIiKS5sb3dlcigpID09ICJjdXN0b20iIGFuZCBub3QgKAogICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2xpY2Vuc2VfdGV4dCBvciAiIgogICAgICAgICkuc3RyaXAoKToKICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKF8oIkxpY2Vuc2UgdGV4dCBpcyByZXF1aXJlZCBmb3IgYSBjdXN0b20gbGljZW5zZSIpKQoKICAgIGRlZiB3cml0ZShzZWxmLCB2YWxzKToKICAgICAgICAiIiIKICAgICAgICBPdmVycmlkZSB3cml0ZSB0byBhbHdheXMgc2FuaXRpemUgYHlhbWxfZmlsZV9uYW1lYAogICAgICAgIGJlZm9yZSBwZXJzaXN0aW5nLCBtYWtpbmcgcHJvZ3JhbW1hdGljIGFzc2lnbm1lbnRzIHNhZmUuCiAgICAgICAgIiIiCiAgICAgICAgaWYgInlhbWxfZmlsZV9uYW1lIiBpbiB2YWxzOgogICAgICAgICAgICB2YWxzWyJ5YW1sX2ZpbGVfbmFtZSJdID0gc2VsZi5fY2xlYW5feWFtbF9iYXNlbmFtZSh2YWxzWyJ5YW1sX2ZpbGVfbmFtZSJdKQogICAgICAgIHJldHVybiBzdXBlcigpLndyaXRlKHZhbHMpCgogICAgZGVmIGFjdGlvbl9nZW5lcmF0ZV95YW1sX2ZpbGUoc2VsZik6CiAgICAgICAgIiIiU2F2ZSBZQU1MIGZpbGUiIiIKCiAgICAgICAgc2VsZi5lbnN1cmVfb25lKCkKCiAgICAgICAgc2VsZi5fdmFsaWRhdGVfbWFuaWZlc3QoKQogICAgICAgIGlmIG5vdCBzZWxmLnlhbWxfY29kZToKICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKF8oIk5vIFlBTUwgY29kZSBpcyBwcmVzZW50LiIpKQoKICAgICAgICAjIEdlbmVyYXRlIFlBTUwgZmlsZQogICAgICAgIHRyeToKICAgICAgICAgICAgeWFtbF9maWxlID0gYmFzZTY0LmVuY29kZWJ5dGVzKHNlbGYueWFtbF9jb2RlLmVuY29kZSgidXRmLTgiKSkKICAgICAgICAgICAgeWFtbF9maWxlX25hbWUgPSAoCiAgICAgICAgICAgICAgICBmIntzZWxmLnlhbWxfZmlsZV9uYW1lIG9yIHNlbGYuX2RlZmF1bHRfeWFtbF9maWxlX25hbWUoKX0ueWFtbCIKICAgICAgICAgICAgKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICBfKAogICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZW5jb2RlIFlBTUwgY29udGVudC4gUGxlYXNlIGVuc3VyZSBhbGwgY2hhcmFjdGVycyBhcmUgVVRGLTggY29tcGF0aWJsZS4iICAjIG5vcWE6IEU1MDEKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSBmcm9tIGV4YwoKICAgICAgICBkb3dubG9hZF93aXphcmQgPSBzZWxmLmVudlsiY3gudG93ZXIueWFtbC5leHBvcnQud2l6LmRvd25sb2FkIl0uY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAieWFtbF9maWxlIjogeWFtbF9maWxlLAogICAgICAgICAgICAgICAgInlhbWxfZmlsZV9uYW1lIjogeWFtbF9maWxlX25hbWUsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJ0eXBlIjogImlyLmFjdGlvbnMuYWN0X3dpbmRvdyIsCiAgICAgICAgICAgICJyZXNfbW9kZWwiOiAiY3gudG93ZXIueWFtbC5leHBvcnQud2l6LmRvd25sb2FkIiwKICAgICAgICAgICAgInJlc19pZCI6IGRvd25sb2FkX3dpemFyZC5pZCwKICAgICAgICAgICAgInRhcmdldCI6ICJuZXciLAogICAgICAgICAgICAidmlld19tb2RlIjogImZvcm0iLAogICAgICAgIH0KCiAgICBkZWYgX2dldF9tb2RlbF9yZWNvcmQoc2VsZik6CiAgICAgICAgIiIiR2V0IG1vZGVsIHJlY29yZHMgYmFzZWQgb24gY29udGV4dCB2YWx1ZXMKCiAgICAgICAgUmFpc2VzOgogICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6IGluIGNhc2Ugbm8gbW9kZWwgb3IgcmVjb3JkcyBzZWxlY3RlZAoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBNb2RlbFJlY29yZHM6IGEgcmVjb3Jkc2V0IG9mIHNlbGVjdGVkIHJlY29yZHMKICAgICAgICAiIiIKICAgICAgICBtb2RlbF9uYW1lID0gc2VsZi5lbnYuY29udGV4dC5nZXQoImFjdGl2ZV9tb2RlbCIpCiAgICAgICAgcmVjb3JkX2lkcyA9IHNlbGYuZW52LmNvbnRleHQuZ2V0KCJhY3RpdmVfaWRzIikKICAgICAgICBpZiBub3QgbW9kZWxfbmFtZSBvciBub3QgcmVjb3JkX2lkczoKICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKF8oIk5vIG1vZGVsIG9yIHJlY29yZHMgc2VsZWN0ZWQiKSkKICAgICAgICByZXR1cm4gc2VsZi5lbnZbbW9kZWxfbmFtZV0uYnJvd3NlKHJlY29yZF9pZHMpCg== \ No newline at end of file