From 49472d32a14c898632fe941bd9c76b017abd7920 Mon Sep 17 00:00:00 2001 From: git_admin Date: Mon, 27 Apr 2026 06:52:46 +0000 Subject: [PATCH] Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace) --- addons/cetmix_tower_server/models/cx_tower_command_log.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 addons/cetmix_tower_server/models/cx_tower_command_log.py diff --git a/addons/cetmix_tower_server/models/cx_tower_command_log.py b/addons/cetmix_tower_server/models/cx_tower_command_log.py new file mode 100644 index 0000000..3b98108 --- /dev/null +++ b/addons/cetmix_tower_server/models/cx_tower_command_log.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjIgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCmltcG9ydCBsb2dnaW5nCgpmcm9tIGFuc2kyaHRtbCBpbXBvcnQgQW5zaTJIVE1MQ29udmVydGVyCgpmcm9tIG9kb28gaW1wb3J0IF8sIGFwaSwgZmllbGRzLCBtb2RlbHMKCmZyb20gLmNvbnN0YW50cyBpbXBvcnQgQ09NTUFORF9TVE9QUEVELCBHRU5FUkFMX0VSUk9SCgpodG1sX2NvbnZlcnRlciA9IEFuc2kySFRNTENvbnZlcnRlcihpbmxpbmU9VHJ1ZSkKX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIEN4VG93ZXJDb21tYW5kTG9nKG1vZGVscy5Nb2RlbCk6CiAgICAiIiJDb21tYW5kIGV4ZWN1dGlvbiBsb2ciIiIKCiAgICBfbmFtZSA9ICJjeC50b3dlci5jb21tYW5kLmxvZyIKICAgIF9kZXNjcmlwdGlvbiA9ICJDZXRtaXggVG93ZXIgQ29tbWFuZCBMb2ciCiAgICBfb3JkZXIgPSAic3RhcnRfZGF0ZSBkZXNjLCBpZCBkZXNjIgoKICAgIGFjdGl2ZSA9IGZpZWxkcy5Cb29sZWFuKGRlZmF1bHQ9VHJ1ZSkKICAgIG5hbWUgPSBmaWVsZHMuQ2hhcihjb21wdXRlPSJfY29tcHV0ZV9uYW1lIiwgc3RvcmU9VHJ1ZSkKICAgIGxhYmVsID0gZmllbGRzLkNoYXIoCiAgICAgICAgaGVscD0iQ3VzdG9tIGxhYmVsLiBDYW4gYmUgdXNlZCBmb3Igc2VhcmNoL3RyYWNraW5nIiwKICAgICAgICBpbmRleD0idHJpZ3JhbSIsCiAgICAgICAgdW5hY2NlbnQ9RmFsc2UsCiAgICApCiAgICBzZXJ2ZXJfaWQgPSBmaWVsZHMuTWFueTJvbmUoCiAgICAgICAgY29tb2RlbF9uYW1lPSJjeC50b3dlci5zZXJ2ZXIiLCByZXF1aXJlZD1UcnVlLCBpbmRleD1UcnVlLCBvbmRlbGV0ZT0iY2FzY2FkZSIKICAgICkKICAgIGpldF90ZW1wbGF0ZV9pZCA9IGZpZWxkcy5NYW55Mm9uZSgKICAgICAgICBjb21vZGVsX25hbWU9ImN4LnRvd2VyLmpldC50ZW1wbGF0ZSIsCiAgICAgICAgaW5kZXg9VHJ1ZSwKICAgICAgICBvbmRlbGV0ZT0iY2FzY2FkZSIsCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfamV0X2lkIiwKICAgICAgICBzdG9yZT1UcnVlLAogICAgICAgIHJlYWRvbmx5PUZhbHNlLAogICAgKQogICAgamV0X2lkID0gZmllbGRzLk1hbnkyb25lKAogICAgICAgIGNvbW9kZWxfbmFtZT0iY3gudG93ZXIuamV0IiwKICAgICAgICBpbmRleD1UcnVlLAogICAgICAgIG9uZGVsZXRlPSJjYXNjYWRlIiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV9qZXRfaWQiLAogICAgICAgIHN0b3JlPVRydWUsCiAgICAgICAgcmVhZG9ubHk9RmFsc2UsCiAgICApCiAgICB3YXlwb2ludF9pZCA9IGZpZWxkcy5NYW55Mm9uZSgKICAgICAgICBjb21vZGVsX25hbWU9ImN4LnRvd2VyLmpldC53YXlwb2ludCIsCiAgICAgICAgcmVsYXRlZD0icGxhbl9sb2dfaWQud2F5cG9pbnRfaWQiLAogICAgICAgIHJlYWRvbmx5PVRydWUsCiAgICApCgogICAgIyAtLSBUaW1lCiAgICBzdGFydF9kYXRlID0gZmllbGRzLkRhdGV0aW1lKHN0cmluZz0iU3RhcnRlZCIpCiAgICBmaW5pc2hfZGF0ZSA9IGZpZWxkcy5EYXRldGltZShzdHJpbmc9IkZpbmlzaGVkIikKICAgIGR1cmF0aW9uID0gZmllbGRzLkZsb2F0KAogICAgICAgIGhlbHA9IlRpbWUgY29uc3VtZWQgZm9yIGV4ZWN1dGlvbiwgc2Vjb25kcyIsCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfZHVyYXRpb24iLAogICAgICAgIHN0b3JlPVRydWUsCiAgICApCiAgICBkdXJhdGlvbl9jdXJyZW50ID0gZmllbGRzLkZsb2F0KAogICAgICAgIHN0cmluZz0iRHVyYXRpb24sIHNlYyIsCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfZHVyYXRpb25fY3VycmVudCIsCiAgICAgICAgY29tcHV0ZV9zdWRvPVRydWUsCiAgICAgICAgaGVscD0iRm9yIGhvdyBsb25nIGEgZmxpZ2h0IHBsYW4gaXMgYWxyZWFkeSBydW5uaW5nIiwKICAgICkKICAgICMgLS0gQ29tbWFuZAogICAgaXNfcnVubmluZyA9IGZpZWxkcy5Cb29sZWFuKAogICAgICAgIGhlbHA9IkNvbW1hbmQgaXMgYmVpbmcgZXhlY3V0ZWQgcmlnaHQgbm93IiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV9kdXJhdGlvbiIsCiAgICAgICAgc3RvcmU9VHJ1ZSwKICAgICkKICAgIGNvbW1hbmRfaWQgPSBmaWVsZHMuTWFueTJvbmUoCiAgICAgICAgY29tb2RlbF9uYW1lPSJjeC50b3dlci5jb21tYW5kIiwgcmVxdWlyZWQ9VHJ1ZSwgaW5kZXg9VHJ1ZSwgb25kZWxldGU9InJlc3RyaWN0IgogICAgKQogICAgYWNjZXNzX2xldmVsID0gZmllbGRzLlNlbGVjdGlvbigKICAgICAgICByZWxhdGVkPSJjb21tYW5kX2lkLmFjY2Vzc19sZXZlbCIsCiAgICAgICAgcmVhZG9ubHk9VHJ1ZSwKICAgICAgICBzdG9yZT1UcnVlLAogICAgICAgIGluZGV4PVRydWUsCiAgICApCgogICAgY29tbWFuZF9hY3Rpb24gPSBmaWVsZHMuU2VsZWN0aW9uKHJlbGF0ZWQ9ImNvbW1hbmRfaWQuYWN0aW9uIiwgc3RvcmU9VHJ1ZSkKICAgIHBhdGggPSBmaWVsZHMuQ2hhcihzdHJpbmc9IkV4ZWN1dGlvbiBQYXRoIiwgaGVscD0iV2hlcmUgY29tbWFuZCB3YXMgZXhlY3V0ZWQiKQogICAgY29kZSA9IGZpZWxkcy5UZXh0KHN0cmluZz0iQ29tbWFuZCBDb2RlIiwgaGVscD0iQ29tbWFuZCBjb2RlIHRoYXQgd2FzIGV4ZWN1dGVkIikKICAgIGNvbW1hbmRfc3RhdHVzID0gZmllbGRzLkludGVnZXIoCiAgICAgICAgc3RyaW5nPSJFeGl0IENvZGUiLAogICAgICAgIGhlbHA9IjAgaWYgY29tbWFuZCBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuXG4iCiAgICAgICAgIi0xMDAgZ2VuZXJhbCBlcnJvcixcbiIKICAgICAgICAiLTEwMSBub3QgZm91bmQsXG4iCiAgICAgICAgIi0yMDEgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGlzIGNvbW1hbmQgaXMgcnVubmluZyxcbiIKICAgICAgICAiLTIwMiBubyBydW5uZXIgZm91bmQgZm9yIHRoZSBjb21tYW5kIGFjdGlvbixcbiIKICAgICAgICAiLTIwMyBQeXRob24gY29kZSBleGVjdXRpb24gZmFpbGVkLFxuIgogICAgICAgICItMjA1IHBsYW4gbGluZSBjb25kaXRpb24gY2hlY2sgZmFpbGVkLFxuIgogICAgICAgICItMjA2IGNvbW1hbmQgdGltZWQgb3V0LFxuIgogICAgICAgICItMjA3IGNvbW1hbmQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBzZXJ2ZXIsXG4iCiAgICAgICAgIi0yMDggY29tbWFuZCBpcyBzdG9wcGVkIGJ5IHVzZXIsXG4iCiAgICAgICAgIjUwMyBpZiBTU0ggY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCIsCiAgICApCiAgICBjb21tYW5kX3Jlc3BvbnNlID0gZmllbGRzLlRleHQoc3RyaW5nPSJSZXNwb25zZSIpCiAgICBjb21tYW5kX2Vycm9yID0gZmllbGRzLlRleHQoc3RyaW5nPSJFcnJvciIpCiAgICBjb21tYW5kX3Jlc3VsdF9odG1sID0gZmllbGRzLkh0bWwoCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfY29tbWFuZF9yZXN1bHRfaHRtbCIsCiAgICAgICAgaGVscD0iUmVzdWx0IGNvbnZlcnRlZCB0byBIVE1MLiBVc2VkIGZvciBTU0ggY29tbWFuZHMuIiwKICAgICkKICAgIHVzZV9zdWRvID0gZmllbGRzLlNlbGVjdGlvbigKICAgICAgICBzdHJpbmc9IlVzZSBzdWRvIiwKICAgICAgICBzZWxlY3Rpb249WygibiIsICJXaXRob3V0IHBhc3N3b3JkIiksICgicCIsICJXaXRoIHBhc3N3b3JkIildLAogICAgICAgIGhlbHA9IlJ1biBjb21tYW5kcyB1c2luZyAnc3VkbyciLAogICAgKQogICAgY29uZGl0aW9uID0gZmllbGRzLkNoYXIoCiAgICAgICAgcmVhZG9ubHk9VHJ1ZSwKICAgICkKICAgIGlzX3NraXBwZWQgPSBmaWVsZHMuQm9vbGVhbigKICAgICAgICByZWFkb25seT1UcnVlLAogICAgKQoKICAgICMgLS0gRmxpZ2h0IFBsYW4KICAgIHBsYW5fbG9nX2lkID0gZmllbGRzLk1hbnkyb25lKGNvbW9kZWxfbmFtZT0iY3gudG93ZXIucGxhbi5sb2ciLCBvbmRlbGV0ZT0iY2FzY2FkZSIpCiAgICB0cmlnZ2VyZWRfcGxhbl9sb2dfaWQgPSBmaWVsZHMuTWFueTJvbmUoY29tb2RlbF9uYW1lPSJjeC50b3dlci5wbGFuLmxvZyIpCgogICAgdHJpZ2dlcmVkX3BsYW5fY29tbWFuZF9sb2dfaWRzID0gZmllbGRzLk9uZTJtYW55KAogICAgICAgIGNvbW9kZWxfbmFtZT0iY3gudG93ZXIuY29tbWFuZC5sb2ciLAogICAgICAgIGludmVyc2VfbmFtZT0icGxhbl9sb2dfaWQiLAogICAgICAgIHJlbGF0ZWQ9InRyaWdnZXJlZF9wbGFuX2xvZ19pZC5jb21tYW5kX2xvZ19pZHMiLAogICAgICAgIHJlYWRvbmx5PVRydWUsCiAgICAgICAgc3RyaW5nPSJUcmlnZ2VyZWQgRmxpZ2h0IFBsYW4gQ29tbWFuZHMiLAogICAgKQogICAgc2NoZWR1bGVkX3Rhc2tfaWQgPSBmaWVsZHMuTWFueTJvbmUoCiAgICAgICAgImN4LnRvd2VyLnNjaGVkdWxlZC50YXNrIiwKICAgICAgICBvbmRlbGV0ZT0ic2V0IG51bGwiLAogICAgICAgIGhlbHA9IlNjaGVkdWxlZCB0YXNrIHRoYXQgdHJpZ2dlcmVkIHRoaXMgY29tbWFuZCIsCiAgICApCiAgICB2YXJpYWJsZV92YWx1ZXMgPSBmaWVsZHMuSnNvbigKICAgICAgICBkZWZhdWx0PXt9LAogICAgICAgIGhlbHA9IkN1c3RvbSB2YXJpYWJsZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIiwKICAgICkKCiAgICBAYXBpLmRlcGVuZHMoIm5hbWUiLCAiY29tbWFuZF9pZC5uYW1lIikKICAgIGRlZiBfY29tcHV0ZV9uYW1lKHNlbGYpOgogICAgICAgIGZvciByZWMgaW4gc2VsZjoKICAgICAgICAgICAgcmVjLm5hbWUgPSAiOiAiLmpvaW4oKHJlYy5zZXJ2ZXJfaWQubmFtZSwgcmVjLmNvbW1hbmRfaWQubmFtZSkpICAjIHR5cGU6IGlnbm9yZQoKICAgIEBhcGkuZGVwZW5kcygicGxhbl9sb2dfaWQiKQogICAgZGVmIF9jb21wdXRlX2pldF9pZChzZWxmKToKICAgICAgICBmb3IgY29tbWFuZF9sb2cgaW4gc2VsZjoKICAgICAgICAgICAgaWYgY29tbWFuZF9sb2cucGxhbl9sb2dfaWQ6CiAgICAgICAgICAgICAgICBjb21tYW5kX2xvZy51cGRhdGUoCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiamV0X2lkIjogY29tbWFuZF9sb2cucGxhbl9sb2dfaWQuamV0X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogY29tbWFuZF9sb2cucGxhbl9sb2dfaWQuamV0X3RlbXBsYXRlX2lkLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKCiAgICBAYXBpLmRlcGVuZHMoInN0YXJ0X2RhdGUiLCAiZmluaXNoX2RhdGUiKQogICAgZGVmIF9jb21wdXRlX2R1cmF0aW9uKHNlbGYpOgogICAgICAgIGZvciBjb21tYW5kX2xvZyBpbiBzZWxmOgogICAgICAgICAgICBpZiBub3QgY29tbWFuZF9sb2cuc3RhcnRfZGF0ZToKICAgICAgICAgICAgICAgIGNvbW1hbmRfbG9nLmlzX3J1bm5pbmcgPSBGYWxzZQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgbm90IGNvbW1hbmRfbG9nLmZpbmlzaF9kYXRlOgogICAgICAgICAgICAgICAgY29tbWFuZF9sb2cuaXNfcnVubmluZyA9IFRydWUKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGR1cmF0aW9uID0gKAogICAgICAgICAgICAgICAgY29tbWFuZF9sb2cuZmluaXNoX2RhdGUgLSBjb21tYW5kX2xvZy5zdGFydF9kYXRlCiAgICAgICAgICAgICkudG90YWxfc2Vjb25kcygpCiAgICAgICAgICAgIGNvbW1hbmRfbG9nLnVwZGF0ZSgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAiZHVyYXRpb24iOiBkdXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAiaXNfcnVubmluZyI6IEZhbHNlLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCgogICAgQGFwaS5kZXBlbmRzKCJpc19ydW5uaW5nIikKICAgIGRlZiBfY29tcHV0ZV9kdXJhdGlvbl9jdXJyZW50KHNlbGYpOgogICAgICAgICIiIlNob3dzIHJlbGF0aXZlIHRpbWUgYmV0d2VlbiBub3coKSBhbmQgc3RhcnQgdGltZSBmb3IgcnVubmluZyBjb21tYW5kcywKICAgICAgICBhbmQgY29tcHV0ZWQgZHVyYXRpb24gZm9yIGZpbmlzaGVkIG9uZXMuCiAgICAgICAgIiIiCiAgICAgICAgbm93ID0gZmllbGRzLkRhdGV0aW1lLm5vdygpCiAgICAgICAgZm9yIGNvbW1hbmRfbG9nIGluIHNlbGY6CiAgICAgICAgICAgIGlmIGNvbW1hbmRfbG9nLmlzX3J1bm5pbmc6CiAgICAgICAgICAgICAgICBjb21tYW5kX2xvZy5kdXJhdGlvbl9jdXJyZW50ID0gKAogICAgICAgICAgICAgICAgICAgIG5vdyAtIGNvbW1hbmRfbG9nLnN0YXJ0X2RhdGUKICAgICAgICAgICAgICAgICkudG90YWxfc2Vjb25kcygpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjb21tYW5kX2xvZy5kdXJhdGlvbl9jdXJyZW50ID0gY29tbWFuZF9sb2cuZHVyYXRpb24KCiAgICBAYXBpLmRlcGVuZHMoImNvbW1hbmRfcmVzcG9uc2UiLCAiY29tbWFuZF9lcnJvciIpCiAgICBkZWYgX2NvbXB1dGVfY29tbWFuZF9yZXN1bHRfaHRtbChzZWxmKToKICAgICAgICBmb3IgY29tbWFuZF9sb2cgaW4gc2VsZjoKICAgICAgICAgICAgY29tbWFuZF9yZXN1bHQgPSBjb21tYW5kX2xvZy5jb21tYW5kX3Jlc3BvbnNlIG9yIGNvbW1hbmRfbG9nLmNvbW1hbmRfZXJyb3IKICAgICAgICAgICAgaWYgY29tbWFuZF9yZXN1bHQ6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9sb2cuY29tbWFuZF9yZXN1bHRfaHRtbCA9IGh0bWxfY29udmVydGVyLmNvbnZlcnQoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgIF9sb2dnZXIuZXJyb3IoIkVycm9yIGNvbnZlcnRpbmcgY29tbWFuZCByZXNwb25zZSB0byBIVE1MOiAlcyIsIGUpCiAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9sb2cuY29tbWFuZF9yZXN1bHRfaHRtbCA9IF8oCiAgICAgICAgICAgICAgICAgICAgICAgICI8cD48c3Ryb25nPkVycm9yIGNvbnZlcnRpbmcgY29tbWFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgIiByZXNwb25zZSB0byBIVE1MOiAlKGVycm9yKXM8L3N0cm9uZz48L3A+IiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9ZSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjb21tYW5kX2xvZy5jb21tYW5kX3Jlc3VsdF9odG1sID0gRmFsc2UKCiAgICBkZWYgc3RhcnQoc2VsZiwgc2VydmVyX2lkLCBjb21tYW5kX2lkLCBzdGFydF9kYXRlPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAiIiJDcmVhdGVzIGluaXRpYWwgbG9nIHJlY29yZCB3aGVuIGNvbW1hbmQgaXMgc3RhcnRlZAoKICAgICAgICBBcmdzOgogICAgICAgICAgICBzZXJ2ZXJfaWQgKGludCkgaWQgb2YgdGhlIHNlcnZlci4KICAgICAgICAgICAgY29tbWFuZF9pZCAoaW50KSBpZCBvZiB0aGUgY29tbWFuZC4KICAgICAgICAgICAgc3RhcnRfZGF0ZSAoZGF0ZXRpbWUpIGNvbW1hbmQgc3RhcnQgZGF0ZSB0aW1lLgogICAgICAgICAgICAqKmt3YXJncyAoZGljdCk6IG9wdGlvbmFsIHZhbHVlcwogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIChjeC50b3dlci5jb21tYW5kLmxvZygpKSBuZXcgY29tbWFuZCBsb2cgcmVjb3JkIG9yIEZhbHNlCiAgICAgICAgIiIiCiAgICAgICAgdmFscyA9IHsKICAgICAgICAgICAgInNlcnZlcl9pZCI6IHNlcnZlcl9pZCwKICAgICAgICAgICAgImNvbW1hbmRfaWQiOiBjb21tYW5kX2lkLAogICAgICAgICAgICAic3RhcnRfZGF0ZSI6IHN0YXJ0X2RhdGUgaWYgc3RhcnRfZGF0ZSBlbHNlIGZpZWxkcy5EYXRldGltZS5ub3coKSwKICAgICAgICB9CiAgICAgICAgIyBBcHBseSBrd2FyZ3MKICAgICAgICB2YWxzLnVwZGF0ZShrd2FyZ3MpCiAgICAgICAgbG9nX3JlY29yZCA9IHNlbGYuc3VkbygpLmNyZWF0ZSh2YWxzKQogICAgICAgIHJldHVybiBsb2dfcmVjb3JkCgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgU3RvcCB0aGUgY29tbWFuZCBleGVjdXRpb24uCiAgICAgICAgIiIiCiAgICAgICAgdXNlcl9uYW1lID0gc2VsZi5lbnYudXNlci5uYW1lCiAgICAgICAgZm9yIGxvZyBpbiBzZWxmOgogICAgICAgICAgICBpZiBub3QgbG9nLmlzX3J1bm5pbmc6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgbG9nLmZpbmlzaCgKICAgICAgICAgICAgICAgIHN0YXR1cz1DT01NQU5EX1NUT1BQRUQsCiAgICAgICAgICAgICAgICBlcnJvcj1fKCJTdG9wcGVkIGJ5IHVzZXIgJSh1c2VyKXMiLCB1c2VyPXVzZXJfbmFtZSksCiAgICAgICAgICAgICkKCiAgICAgICAgICAgICMgRW5zdXJlIGZsaWdodCBwbGFuIGxvZyBpcyBzdG9wcGVkIHRvbwogICAgICAgICAgICBpZiBsb2cucGxhbl9sb2dfaWQgYW5kIGxvZy5wbGFuX2xvZ19pZC5pc19ydW5uaW5nOgogICAgICAgICAgICAgICAgbG9nLnBsYW5fbG9nX2lkLnN0b3AoKQoKICAgIGRlZiBmaW5pc2goCiAgICAgICAgc2VsZiwgZmluaXNoX2RhdGU9Tm9uZSwgc3RhdHVzPU5vbmUsIHJlc3BvbnNlPU5vbmUsIGVycm9yPU5vbmUsICoqa3dhcmdzCiAgICApOgogICAgICAgICIiIlNhdmUgZmluYWwgY29tbWFuZCByZXN1bHQgd2hlbiBjb21tYW5kIGlzIGZpbmlzaGVkLgogICAgICAgIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZm9yIG11bHRpcGxlIGNvbW1hbmQgbG9ncyBhdCBvbmNlLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBmaW5pc2hfZGF0ZSAoZGF0ZXRpbWUpIGNvbW1hbmQgZmluaXNoIGRhdGUgdGltZS4KICAgICAgICAgICAgc3RhdHVzIChpbnQsIG9wdGlvbmFsKTogY29tbWFuZCBleGVjdXRpb24gc3RhdHVzLiBEZWZhdWx0cyB0byBOb25lLgogICAgICAgICAgICByZXNwb25zZSAoQ2hhciwgb3B0aW9uYWwpOiBDb21tYW5kIHJlc3BvbnNlLiBEZWZhdWx0cyB0byBOb25lLgogICAgICAgICAgICBlcnJvciAoQ2hhciwgb3B0aW9uYWwpOiBDb21tYW5kIGVycm9yLiBEZWZhdWx0cyB0byBOb25lLgogICAgICAgICAgICAqKmt3YXJncyAoZGljdCk6IG9wdGlvbmFsIHZhbHVlcwogICAgICAgICIiIgogICAgICAgIHNlbGZfd2l0aF9zdWRvID0gc2VsZi5zdWRvKCkKCiAgICAgICAgIyBEdXJhdGlvbgogICAgICAgIG5vdyA9IGZpZWxkcy5EYXRldGltZS5ub3coKQogICAgICAgIGRhdGVfZmluaXNoID0gZmluaXNoX2RhdGUgaWYgZmluaXNoX2RhdGUgZWxzZSBub3cKCiAgICAgICAgdmFscyA9IHsKICAgICAgICAgICAgImZpbmlzaF9kYXRlIjogZGF0ZV9maW5pc2gsCiAgICAgICAgICAgICJjb21tYW5kX3N0YXR1cyI6IEdFTkVSQUxfRVJST1IgaWYgc3RhdHVzIGlzIE5vbmUgZWxzZSBzdGF0dXMsCiAgICAgICAgICAgICJjb21tYW5kX3Jlc3BvbnNlIjogcmVzcG9uc2UsCiAgICAgICAgICAgICJjb21tYW5kX2Vycm9yIjogZXJyb3IsCiAgICAgICAgfQoKICAgICAgICAjIEFwcGx5IGt3YXJncyBhbmQgd3JpdGUKICAgICAgICB2YWxzLnVwZGF0ZShrd2FyZ3MpCiAgICAgICAgc2VsZl93aXRoX3N1ZG8ud3JpdGUodmFscykKCiAgICAgICAgIyBUcmlnZ2VyIHBvc3QgZmluaXNoIGhvb2sKICAgICAgICBmb3IgY29tbWFuZF9sb2cgaW4gc2VsZl93aXRoX3N1ZG86CiAgICAgICAgICAgIGNvbW1hbmRfbG9nLl9jb21tYW5kX2ZpbmlzaGVkKCkKCiAgICBkZWYgcmVjb3JkKAogICAgICAgIHNlbGYsCiAgICAgICAgc2VydmVyX2lkLAogICAgICAgIGNvbW1hbmRfaWQsCiAgICAgICAgc3RhcnRfZGF0ZT1Ob25lLAogICAgICAgIGZpbmlzaF9kYXRlPU5vbmUsCiAgICAgICAgc3RhdHVzPTAsCiAgICAgICAgcmVzcG9uc2U9Tm9uZSwKICAgICAgICBlcnJvcj1Ob25lLAogICAgICAgICoqa3dhcmdzLAogICAgKToKICAgICAgICAiIiJSZWNvcmQgY29tcGxldGVkIGNvbW1hbmQgZGlyZWN0bHkgd2l0aG91dCB1c2luZyBzdGFydC9zdG9wCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIHNlcnZlcl9pZCAoaW50KSBpZCBvZiB0aGUgc2VydmVyLgogICAgICAgICAgICBjb21tYW5kX2lkIChpbnQpIGlkIG9mIHRoZSBjb21tYW5kLgogICAgICAgICAgICBzdGFydF9kYXRlIChkYXRldGltZSkgY29tbWFuZCBzdGFydCBkYXRlIHRpbWUuCiAgICAgICAgICAgIGZpbmlzaF9kYXRlIChkYXRldGltZSkgY29tbWFuZCBmaW5pc2ggZGF0ZSB0aW1lLgogICAgICAgICAgICBzdGF0dXMgKGludCwgb3B0aW9uYWwpOiBjb21tYW5kIGV4ZWN1dGlvbiBzdGF0dXMuIERlZmF1bHRzIHRvIDAuCiAgICAgICAgICAgIHJlc3BvbnNlIChsaXN0LCBvcHRpb25hbCk6IFNTSCByZXNwb25zZS4gRGVmYXVsdHMgdG8gTm9uZS4KICAgICAgICAgICAgZXJyb3IgKGxpc3QsIG9wdGlvbmFsKTogU1NIIGVycm9yLiBEZWZhdWx0cyB0byBOb25lLgogICAgICAgICAgICAqKmt3YXJncyAoZGljdCk6IHZhbHVlcyB0byBzdG9yZQogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIChjeC50b3dlci5jb21tYW5kLmxvZygpKSBuZXcgY29tbWFuZCBsb2cgcmVjb3JkCiAgICAgICAgIiIiCiAgICAgICAgdmFscyA9IGt3YXJncyBvciB7fQogICAgICAgIG5vdyA9IGZpZWxkcy5EYXRldGltZS5ub3coKQogICAgICAgIHZhbHMudXBkYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAic2VydmVyX2lkIjogc2VydmVyX2lkLAogICAgICAgICAgICAgICAgImNvbW1hbmRfaWQiOiBjb21tYW5kX2lkLAogICAgICAgICAgICAgICAgInN0YXJ0X2RhdGUiOiBzdGFydF9kYXRlIG9yIG5vdywKICAgICAgICAgICAgICAgICJmaW5pc2hfZGF0ZSI6IGZpbmlzaF9kYXRlIG9yIG5vdywKICAgICAgICAgICAgICAgICJjb21tYW5kX3N0YXR1cyI6IHN0YXR1cywKICAgICAgICAgICAgICAgICJjb21tYW5kX3Jlc3BvbnNlIjogcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAiY29tbWFuZF9lcnJvciI6IGVycm9yLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHJlYyA9IHNlbGYuc3VkbygpLmNyZWF0ZSh2YWxzKQogICAgICAgIHJlYy5fY29tbWFuZF9maW5pc2hlZCgpCiAgICAgICAgcmV0dXJuIHJlYwoKICAgIGRlZiBfY29tbWFuZF9maW5pc2hlZChzZWxmKToKICAgICAgICAiIiJUcmlnZ2VyZWQgd2hlbiBjb21tYW5kIGlzIGZpbmlzaGVkCiAgICAgICAgSW5oZXJpdCB0byBpbXBsZW1lbnQgeW91ciBvd24gaG9va3MKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgYm9vbDogVHJ1ZSBpZiBldmVudCB3YXMgaGFuZGxlZAogICAgICAgICIiIgoKICAgICAgICBzZWxmLmVuc3VyZV9vbmUoKQoKICAgICAgICAjIERvIG5vdCBub3RpZnkgaWYgY29tbWFuZCBpcyBydW4gZnJvbSBhIEZsaWdodCBQbGFuLgogICAgICAgIGlmIHNlbGYucGxhbl9sb2dfaWQ6ICAjIHR5cGU6IGlnbm9yZQogICAgICAgICAgICBzZWxmLnBsYW5fbG9nX2lkLl9wbGFuX2NvbW1hbmRfZmluaXNoZWQoc2VsZikgICMgdHlwZTogaWdub3JlCiAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgICMgQ2hlY2sgaWYgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZAogICAgICAgIElDUF9zdWRvID0gc2VsZi5lbnZbImlyLmNvbmZpZ19wYXJhbWV0ZXIiXS5zdWRvKCkKICAgICAgICBub3RpZmljYXRpb25fdHlwZV9zdWNjZXNzID0gSUNQX3N1ZG8uZ2V0X3BhcmFtKAogICAgICAgICAgICAiY2V0bWl4X3Rvd2VyX3NlcnZlci5ub3RpZmljYXRpb25fdHlwZV9zdWNjZXNzIgogICAgICAgICkKICAgICAgICBub3RpZmljYXRpb25fdHlwZV9lcnJvciA9IElDUF9zdWRvLmdldF9wYXJhbSgKICAgICAgICAgICAgImNldG1peF90b3dlcl9zZXJ2ZXIubm90aWZpY2F0aW9uX3R5cGVfZXJyb3IiCiAgICAgICAgKQoKICAgICAgICAjIFByZXBhcmUgbm90aWZpY2F0aW9ucwogICAgICAgIGlmIG5vdCBub3RpZmljYXRpb25fdHlwZV9zdWNjZXNzIGFuZCBub3Qgbm90aWZpY2F0aW9uX3R5cGVfZXJyb3I6CiAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgICMgVXNlIGNvbnRleHQgdGltZXN0YW1wIHRvIGF2b2lkIHRpbWV6b25lIGlzc3VlcwogICAgICAgIGNvbnRleHRfdGltZXN0YW1wID0gZmllbGRzLkRhdGV0aW1lLmNvbnRleHRfdGltZXN0YW1wKAogICAgICAgICAgICBzZWxmLCBmaWVsZHMuRGF0ZXRpbWUubm93KCkKICAgICAgICApCgogICAgICAgICMgQWN0aW9uIGZvciBidXR0b24KICAgICAgICBhY3Rpb24gPSBzZWxmLmVudlsiaXIuYWN0aW9ucy5hY3Rfd2luZG93Il0uX2Zvcl94bWxfaWQoCiAgICAgICAgICAgICJjZXRtaXhfdG93ZXJfc2VydmVyLmFjdGlvbl9jeF90b3dlcl9jb21tYW5kX2xvZyIKICAgICAgICApCgogICAgICAgIGNvbnRleHQgPSBzZWxmLmVudi5jb250ZXh0LmNvcHkoKQogICAgICAgIHBhcmFtcyA9IGRpY3QoY29udGV4dC5nZXQoInBhcmFtcyIpIG9yIHt9KQogICAgICAgIHBhcmFtc1siYnV0dG9uX25hbWUiXSA9IF8oIlZpZXcgTG9nIikKICAgICAgICBjb250ZXh0WyJwYXJhbXMiXSA9IHBhcmFtcwogICAgICAgIGFjdGlvbi51cGRhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJ2aWV3cyI6IFsoRmFsc2UsICJmb3JtIildLAogICAgICAgICAgICAgICAgImNvbnRleHQiOiBjb250ZXh0LAogICAgICAgICAgICAgICAgInJlc19pZCI6IHNlbGYuaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgICMgU2VuZCBub3RpZmljYXRpb24KICAgICAgICBpZiBzZWxmLmNvbW1hbmRfc3RhdHVzID09IDAgYW5kIG5vdGlmaWNhdGlvbl90eXBlX3N1Y2Nlc3M6CiAgICAgICAgICAgICMgU3VjY2VzcyBub3RpZmljYXRpb24KICAgICAgICAgICAgc2VsZi5jcmVhdGVfdWlkLm5vdGlmeV9zdWNjZXNzKAogICAgICAgICAgICAgICAgbWVzc2FnZT1fKAogICAgICAgICAgICAgICAgICAgICIlKHRpbWVzdGFtcClzPGJyLz4iICJDb21tYW5kICclKG5hbWUpcycgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IiwKICAgICAgICAgICAgICAgICAgICBuYW1lPXNlbGYuY29tbWFuZF9pZC5uYW1lLAogICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1jb250ZXh0X3RpbWVzdGFtcCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICB0aXRsZT1zZWxmLnNlcnZlcl9pZC5uYW1lLAogICAgICAgICAgICAgICAgc3RpY2t5PW5vdGlmaWNhdGlvbl90eXBlX3N1Y2Nlc3MgPT0gInN0aWNreSIsCiAgICAgICAgICAgICAgICBhY3Rpb249YWN0aW9uLAogICAgICAgICAgICApCgogICAgICAgICMgRXJyb3Igbm90aWZpY2F0aW9uCiAgICAgICAgaWYgc2VsZi5jb21tYW5kX3N0YXR1cyAhPSAwIGFuZCBub3RpZmljYXRpb25fdHlwZV9lcnJvcjoKICAgICAgICAgICAgc2VsZi5jcmVhdGVfdWlkLm5vdGlmeV9kYW5nZXIoCiAgICAgICAgICAgICAgICBtZXNzYWdlPV8oCiAgICAgICAgICAgICAgICAgICAgIiUodGltZXN0YW1wKXM8YnIvPiIgIkNvbW1hbmQgJyUobmFtZSlzJyBmaW5pc2hlZCB3aXRoIGVycm9yIiwKICAgICAgICAgICAgICAgICAgICBuYW1lPXNlbGYuY29tbWFuZF9pZC5uYW1lLAogICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1jb250ZXh0X3RpbWVzdGFtcCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICB0aXRsZT1zZWxmLnNlcnZlcl9pZC5uYW1lLAogICAgICAgICAgICAgICAgc3RpY2t5PW5vdGlmaWNhdGlvbl90eXBlX2Vycm9yID09ICJzdGlja3kiLAogICAgICAgICAgICAgICAgYWN0aW9uPWFjdGlvbiwKICAgICAgICAgICAgKQoKICAgICAgICByZXR1cm4gVHJ1ZQo= \ No newline at end of file