1 line
5.6 KiB
Python
1 line
5.6 KiB
Python
IyBDb3B5cmlnaHQgKEMpIDIwMjIgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCmZyb20gb2RvbyBpbXBvcnQgXywgYXBpLCBmaWVsZHMsIG1vZGVscwpmcm9tIG9kb28uZXhjZXB0aW9ucyBpbXBvcnQgVmFsaWRhdGlvbkVycm9yCgoKY2xhc3MgVG93ZXJWYXJpYWJsZU9wdGlvbihtb2RlbHMuTW9kZWwpOgogICAgIiIiCiAgICBNb2RlbCB0byBtYW5hZ2UgdmFyaWFibGUgb3B0aW9ucyBpbiB0aGUgQ2V0bWl4IFRvd2VyLgoKICAgIFRoZSBtb2RlbCBhbGxvd3MgZGVmaW5pbmcgb3B0aW9ucwogICAgdGhhdCBhcmUgbGlua2VkIHRvIHRvd2VyIHZhcmlhYmxlcyBhbmQgY2FuIGJlIHVzZWQgdG8KICAgICBtYW5hZ2UgY29uZmlndXJhdGlvbnMgb3Igc2V0dGluZ3MgZm9yIHRob3NlIHZhcmlhYmxlcy4KICAgICIiIgoKICAgIF9uYW1lID0gImN4LnRvd2VyLnZhcmlhYmxlLm9wdGlvbiIKICAgIF9kZXNjcmlwdGlvbiA9ICJDZXRtaXggVG93ZXIgVmFyaWFibGUgT3B0aW9ucyIKICAgIF9pbmhlcml0ID0gWyJjeC50b3dlci5yZWZlcmVuY2UubWl4aW4iLCAiY3gudG93ZXIuYWNjZXNzLm1peGluIl0KICAgIF9vcmRlciA9ICJzZXF1ZW5jZSwgbmFtZSIKCiAgICBhY2Nlc3NfbGV2ZWwgPSBmaWVsZHMuU2VsZWN0aW9uKAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX2FjY2Vzc19sZXZlbCIsCiAgICAgICAgcmVhZG9ubHk9RmFsc2UsCiAgICAgICAgc3RvcmU9VHJ1ZSwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICApCiAgICBuYW1lID0gZmllbGRzLkNoYXIocmVxdWlyZWQ9VHJ1ZSkKICAgIHZhbHVlX2NoYXIgPSBmaWVsZHMuQ2hhcihzdHJpbmc9IlZhbHVlIiwgcmVxdWlyZWQ9VHJ1ZSkKICAgIHZhcmlhYmxlX2lkID0gZmllbGRzLk1hbnkyb25lKAogICAgICAgIGNvbW9kZWxfbmFtZT0iY3gudG93ZXIudmFyaWFibGUiLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgb25kZWxldGU9ImNhc2NhZGUiLAogICAgKQogICAgc2VxdWVuY2UgPSBmaWVsZHMuSW50ZWdlcihkZWZhdWx0PTEwKQoKICAgICMgRGVmaW5lIGEgU1FMIGNvbnN0cmFpbnQgdG8gZW5zdXJlIHRoZSBjb21iaW5hdGlvbiBvZgogICAgIyAnbmFtZScgYW5kICd2YXJpYWJsZV9pZCcgaXMgdW5pcXVlCiAgICBfc3FsX2NvbnN0cmFpbnRzID0gWwogICAgICAgICgKICAgICAgICAgICAgInVuaXF1ZV92YXJpYWJsZV9vcHRpb24iLAogICAgICAgICAgICAidW5pcXVlICh2YWx1ZV9jaGFyLCB2YXJpYWJsZV9pZCkiLAogICAgICAgICAgICAiVGhlIGNvbWJpbmF0aW9uIG9mIFZhbHVlIGFuZCBWYXJpYWJsZSBtdXN0IGJlIHVuaXF1ZS4iLAogICAgICAgICksCiAgICAgICAgKAogICAgICAgICAgICAidW5pcXVlX3ZhcmlhYmxlX29wdGlvbl9uYW1lIiwKICAgICAgICAgICAgInVuaXF1ZSAobmFtZSwgdmFyaWFibGVfaWQpIiwKICAgICAgICAgICAgIlRoZSBjb21iaW5hdGlvbiBvZiBOYW1lIGFuZCBWYXJpYWJsZSBtdXN0IGJlIHVuaXF1ZS4iLAogICAgICAgICksCiAgICBdCgogICAgQGFwaS5kZXBlbmRzKCJ2YXJpYWJsZV9pZCIsICJ2YXJpYWJsZV9pZC5hY2Nlc3NfbGV2ZWwiKQogICAgZGVmIF9jb21wdXRlX2FjY2Vzc19sZXZlbChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBBdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzX2xldmVsIGJhc2VkIG9uIFZhcmlhYmxlIGFjY2VzcyBsZXZlbAogICAgICAgICIiIgogICAgICAgIGZvciByZWMgaW4gc2VsZjoKICAgICAgICAgICAgaWYgcmVjLnZhcmlhYmxlX2lkOgogICAgICAgICAgICAgICAgcmVjLmFjY2Vzc19sZXZlbCA9IHJlYy52YXJpYWJsZV9pZC5hY2Nlc3NfbGV2ZWwKCiAgICBAYXBpLmNvbnN0cmFpbnMoImFjY2Vzc19sZXZlbCIsICJ2YXJpYWJsZV9pZCIpCiAgICBkZWYgX2NoZWNrX2FjY2Vzc19sZXZlbF9jb25zaXN0ZW5jeShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBFbnN1cmUgdGhhdCB0aGUgYWNjZXNzIGxldmVsIG9mIHRoZSB2YXJpYWJsZSB2YWx1ZSBpcyBub3QgbG93ZXIgdGhhbgogICAgICAgIHRoZSBhY2Nlc3MgbGV2ZWwgb2YgdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUuCiAgICAgICAgIiIiCiAgICAgICAgYWNjZXNzX2xldmVsX2RpY3QgPSBkaWN0KAogICAgICAgICAgICBzZWxmLmZpZWxkc19nZXQoWyJhY2Nlc3NfbGV2ZWwiXSlbImFjY2Vzc19sZXZlbCJdWyJzZWxlY3Rpb24iXQogICAgICAgICkKICAgICAgICBmb3IgcmVjIGluIHNlbGY6CiAgICAgICAgICAgIGlmIG5vdCByZWMudmFyaWFibGVfaWQ6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBpZiBub3QgcmVjLmFjY2Vzc19sZXZlbDoKICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICBfKAogICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXNzIGxldmVsIGlzIG5vdCBkZWZpbmVkIGZvciAnJShvcHRpb24pcyciLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb249cmVjLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBpZiByZWMuYWNjZXNzX2xldmVsIDwgcmVjLnZhcmlhYmxlX2lkLmFjY2Vzc19sZXZlbDoKICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICBfKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGFjY2VzcyBsZXZlbCBmb3IgVmFyaWFibGUgT3B0aW9uICclKHZhbHVlKXMnICIKICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBiZSBsb3dlciB0aGFuIHRoZSBhY2Nlc3MgbGV2ZWwgb2YgaXRzICIKICAgICAgICAgICAgICAgICAgICAgICAgIlZhcmlhYmxlICclKHZhcmlhYmxlKXMnLlxuIgogICAgICAgICAgICAgICAgICAgICAgICAiVmFyaWFibGUgQWNjZXNzIExldmVsOiAlKHZhcl9sZXZlbClzXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICJWYXJpYWJsZSBPcHRpb24gQWNjZXNzIExldmVsOiAlKHZhbF9sZXZlbClzIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9cmVjLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXJlYy52YXJpYWJsZV9pZC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB2YXJfbGV2ZWw9YWNjZXNzX2xldmVsX2RpY3RbcmVjLnZhcmlhYmxlX2lkLmFjY2Vzc19sZXZlbF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbF9sZXZlbD1hY2Nlc3NfbGV2ZWxfZGljdFtyZWMuYWNjZXNzX2xldmVsXSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCgogICAgIyBXb3JrYXJvdW5kIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSBub3QgYmVpbmcgc2V0CiAgICBAYXBpLm1vZGVsX2NyZWF0ZV9tdWx0aQogICAgZGVmIGNyZWF0ZShzZWxmLCB2YWxzX2xpc3QpOgogICAgICAgIHZhcmlhYmxlX29iaiA9IHNlbGYuZW52WyJjeC50b3dlci52YXJpYWJsZSJdCiAgICAgICAgZm9yIHZhbHMgaW4gdmFsc19saXN0OgogICAgICAgICAgICAjIFNldCBhY2Nlc3MgbGV2ZWwgZnJvbSB0aGUgdmFyaWFibGUKICAgICAgICAgICAgIyBpZiBub3QgcHJvdmlkZWQgZXhwbGljaXRseQogICAgICAgICAgICBhY2Nlc3NfbGV2ZWwgPSB2YWxzLmdldCgiYWNjZXNzX2xldmVsIikKICAgICAgICAgICAgaWYgYWNjZXNzX2xldmVsOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgdmFyaWFibGVfaWQgPSB2YWxzLmdldCgidmFyaWFibGVfaWQiKQogICAgICAgICAgICBpZiB2YXJpYWJsZV9pZDoKICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVfb2JqLmJyb3dzZSh2YXJpYWJsZV9pZCkKICAgICAgICAgICAgICAgIHZhbHNbImFjY2Vzc19sZXZlbCJdID0gdmFyaWFibGUuYWNjZXNzX2xldmVsCiAgICAgICAgcmV0dXJuIHN1cGVyKCkuY3JlYXRlKHZhbHNfbGlzdCkKCiAgICBkZWYgX2dldF9wcmVfcG9wdWxhdGVkX21vZGVsX2RhdGEoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRGVmaW5lIHRoZSBtb2RlbCByZWxhdGlvbnNoaXBzIGZvciByZWZlcmVuY2UgZ2VuZXJhdGlvbi4KICAgICAgICAiIiIKICAgICAgICByZXMgPSBzdXBlcigpLl9nZXRfcHJlX3BvcHVsYXRlZF9tb2RlbF9kYXRhKCkKICAgICAgICByZXMudXBkYXRlKHsiY3gudG93ZXIudmFyaWFibGUub3B0aW9uIjogWyJjeC50b3dlci52YXJpYWJsZSIsICJ2YXJpYWJsZV9pZCJdfSkKICAgICAgICByZXR1cm4gcmVzCg== |