From 02723e8c259dbe1ed273410191344b756cd7abed Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 22:37:45 +0000 Subject: [PATCH] fix: resolve CI linting issues across codebase --- app/src/codesnap/core/dependency_graph.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 app/src/codesnap/core/dependency_graph.py diff --git a/app/src/codesnap/core/dependency_graph.py b/app/src/codesnap/core/dependency_graph.py new file mode 100644 index 0000000..8049128 --- /dev/null +++ b/app/src/codesnap/core/dependency_graph.py @@ -0,0 +1 @@ +{"encoding":"base64","content":"JydgRGVwZW5kZW5jeSBncmFwaCBhbmFseXNpcyBtb2R1bGUgZm9yIENvZGVTTmFwLicKCiAgICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbwoKICAgICAgaW1wb3J0IHJlCiAgICAgIGZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcywgZmllbGQKICAgICAgZnJvbSBwYXRobGliIEltcG9ydCBQYXRoCgogICAgICBpbXBvcnQgbmV0d29ya194IG54CgoKCiBAZGF0YWNsYXNzCmNsYXNzIERlcGVuZGVuY3k6CiAgICAicmVwcmVzZW50cyBhIGRlcGVuZGVuY3kgYmV0d2VlbiBmaWxlcy4iCiAgICBzb3VyY2VfZmlsZTogUGF0aAogICAgdGFyZ2V0X2ZpbGU6IFBhdGgKICAgIGltcG9ydF9zdGF0ZW1lbnQ6IHN0cgogICAgaW1wb3J0X3R5cGU6IHN0ciA9ICJpbXBvcnQiCgoKQGRhdGFjbGFzcwpjbGFzcyBGaWxlTm9kZToKICAgICJyZXByZXNlbnRzIGEgZmlsZSBpbiB0aGUgZGVwZW5kZW5jeSBncmFwaC4iCiAgICBwYXRoOiBQYXRoCiAgICBsYW5ndWFnZTogc3RyCiAgICBmaWxlX3NpemU6IGludCA9IDAKICAgIGxpbmVfY291bnQ6IGludCA9IDAKICAgIGZ1bmN0aW9uc19jb3VudDogaW50ID0gMAogICAgY2xhc3Nlcy1jb3VudDogaW50ID0gMAoKQGRhdGFjbGFzcwpjbGFzcyBHcmFwaE1ldHJpY3M6CiAgICAibWV0cmljcyBmb3IgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIgogICAgdG90YWxfZmlsZXM6IGludCA9IDAKICAgIHRvdGFsX2VkZ2VzOiBpbnQgPSAwCiAgICBvcXBoYW5lZF9maWxlczogbGlzdFtQYXRoXSA9IGZpZWxkKGRlZmF1bHRfZmFjdG9yeT1saXN0KQogICAgY2lyY3VsYXJfZGVwZW5kZW5jaWVzOiBsaXN0W2xpc3RbUGF0aF1dXSA9IGZpZWxkKGRlZmF1bHRfZmFjdG9yeT1saXN0KQogICAgbWF4X2RlcHRoOiBpbnQgPSAwCiAgICBkZW5zaXR5OiBmbG9hdCA9IDAuMAoKCmNsYXNzIERlcGVuZGVuY3lQYXJzZXI6CiAgICAicGFyc2VyIGZvciBleHRyYWN0aW5nIGltcG9ydC9yZXF1aXJlIHN0YXRlbWVudHMgZnJvbSBmaWxlcy4iCgogICAgSU1QT1JUX1BBVFRFUk5TOiBkaWN0W3N0ciwgdHVwbGVbcmUuUGF0dGVybiwgc3RyXV0gPSB7CiAgICAgICAgInB5dGhvbiI6ICgKICAgICAgICAgICAgcmUuY29tcGlsZSgKICAgICAgICAgICAgICAgICdeKD86ZnJvbVxcLnswLDFbYS1aQTAtOV9dKyBcXGlmcm9tXFxcL3thLXpBLTEwX2JdKiknLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAiaW1wb3J0IgogICAgICAgICksCiAgICAgICAgImpldmFzc2NyaXB0IjogKAogICAgICAgICAgICByZS5jb21waWxlKAogICAgICAgICAgICAgICAgJyg/OmVxdWlyZVxcKChcXCcqW15cXCcqXSpcXCdcXCdcXHxcXHcpJyArCiAgICAgICAgICAgICAgICgnKD86aW1wb3J0XFxiez9cfXxdXFxcKiBhcyBcdytcXC9cXC98XFx3KylcXHMmZnJvbVxcLiopW15cXCcqXSpcXCcqXSInLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAicmVxdWlyZS9pbXBvcnQiCiAgICAgICAgKSwKICAgICAgICAidHlwZXNjcmlwdCI6ICgKICAgICAgICAgICAgcmUuY29tcGlsZSgKICAgICAgICAgICAgICAgICcoPzplcXVpcmVcXChcXHMqW15cXCcqXSpcXCdcXCdcXHxcXHcpJyArCiAgICAgICAgICAgICAgICgnKD86aW1wb3J0XFxiez9cfXxdXFxcKiBhcyBcdytcXC9cXC98XFx3KylcXHMmZnJvbVxcLiopW15cXCcqXSpcXCcqXSInLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAiaW1wb3J0IgogICAgICAgICksCiAgICAgICAgImdvIjogKAogICAgICAgICAgICByZS5jb21waWxlKAogICAgICAgICAgICAgICAgJ15cXHMrPmltcG9ydFxcW15cXCcqXSpcXCcqJywKICAgICAgICAgICAgICAgIHJlX211bHRpbGluZQogICAgICAgICAgKSwKICAgICAgICAgICAgImltcG9ydCIKICAgICAgICApLAogICAgICAgICJydXN0IjogKAogICAgICAgICAgICByZS5jb21waWxlKAogICAgICAgICAgICAgICAgJyg/OnVzZVxcKChbYS1aQTAtOV86XSspJyArCiAgICAgICAgICAgICAgICgnZXh0ZXJuXFxcY3JhdGVcXChbYS1aQTAtOV9dKyknLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAidXNlL2NyYXRlIgogICAgICAgICksCiAgICAgICAgImphdmEiOiAoCiAgICAgICAgICAgIHJlLmNvbXBpbGUoCiAgICAgICAgICAgICAgICdeXFxzKig/OmltcG9ydFxcKFthLXpBLTEwXy5dKykcXCpcXCk/JCksCiAgICAgICAgICAgICAgICByZV9tdWx0aWxpbmUKICAgICAgICApLAogICAgICAgICAgICAiaW1wb3J0IgogICAgICAgICksCiAgICB9CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX2ltcG9ydF9wYXR0ZXJucyA9IHNlbGYuSU1QT1JUX1BVVEVSTlMKCiAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGg6IFBhdGgsIGNvbnRlbnQ6IHN0ciwgbGFuZ3VhZ2U6IHN0cikgLT4gbGlzdFtEZXBlbmRlbmN5XToKICAgICAgICAicGFyc2UgYSBmaWxlIGFuZCBleHRyYWN0IGltcG9ydCBkZXBlbmRlbmNpZXMuCgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBmaWxlX3BhdGg6IFBhdGggdG8gdGhlIHNvdXJjZSBmaWxlLgogICAgICAgICAgICBjb250ZW50OiBGaWxlIGNvbnRlbnQgYXMgc3RyaW5nLgogICAgICAgICAgICBsYW5ndWFnZTogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb2YgdGhlIGZpbGUuCgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBMaXN0IG9mIERlcGVuZGVuY3kgb2JqZWN0cy4iCiAgICAgICAgZGVwZW5kZW5jaWVzID0gW10KICAgICAgICBwYXR0ZXJuX2luZm8gPSBzZWxmLmltcG9ydF9wYXR0ZXJucy5nZXQobGFuZ3VhZ2UpCgoKICAgICAgICBpZiBwYXR0ZXJuX2luZm8gaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcwoKICAgICAgICBwYXR0ZXJuLCBpbXBvcnRfdHlwZSA9IHBhdHRlcm5faW5mbwoKICAgICAgICBmb3IgbWF0Y2ggaW4gcGF0dGVybi5maW5kYWxsKGNvbnRlbnQpOgogICAgICAgICAgICBncm91cHMgPSBtYXRjaC5ncm91cHMKICAgICAgICAgICAgaW1wb3J0X3RhcmdldCA9IE5vbmUKCiAgICAgICAgICAgIGZvciBncm91cCBpbiBncm91cHM6CiAgICAgICAgICAgICAgICBpZiBncm91cDoKICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdGFyZ2V0ID0gZ3JvdXAKICAgICAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICBpZiBpbXBvcnRfdGFyZ2V0OgogICAgICAgICAgICBkZXBlbmRlbmN5ID0gRGVwZW5kZW5jeSgKICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlID0gZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGUgPSBQYXRoKGltcG9ydF90YXJnZXQpLAogICAgICAgICAgICAgICAgaW1wb3J0X3N0YXRlbWVudCA9IG1hdGNoLmdyb3VwKDEpLAogICAgICAgICAgICAgICAgaW1wb3J0X3R5cGUgPSBpbXBvcnRfdHlwZQogICAgICAgICAgICApCiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoZGVwZW5kZW5jeSkKCiAgICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcwoKY2xhc3MgRGVwZW5kZW5jeUdyYXBoQnVpbGRlcjoKICAgICJidWlsZGVyIGZvciBjcmVhdGluZyBhbmQgYW5hbHl6aW5nIGRlcGVuZGVuY3kgZ3JhcGhzLiIKCiAgICBkZWYgX19pbml0X19fc2VsZik6CiAgICAgICAgc2VsZi5ncmFwaCA9IG54LkRpR3JhcGgoKQogICAgICAgIHNlbGYubm9kZV9kYXRhOiBkaWN0W1BhdGgsIEZpbGVPbmRdID0ge30KICAgICAgICBzZWxmLmRlcGVuZGVuY3lfcGFyc2VyID0gRGVwZW5kZW5jeVBhcnNlcigpCgogICAgZGVmIGFkZF9maWxlKHNlbGYsIGZpbGVfcGF0aDogUGF0aCwgbGFuZ3VhZ2U6IHN0ciwgZmlsZV9zaXplOiBpbnQgPSAwLAogICAgICAgICAgbGluZV9jb3VudDogaW50ID0gMCwgZnVuY3Rpb25zX2NvdW50OiBpbnQgPSAwLAogICAgICAgICAgY2xhc3Nlc19jb3VudDogaW50ID0gMCkgLT4gTm9uZToKICAgICAgICAiYWRkIGEgZmlsZSBub2RlIHRvIHRoZSBncmFwaC4KCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGZpbGVfcGF0aDogUGF0aCB0byB0aGUgZmlsZS4KICAgICAgICAgICAgbGFuZ3VhZ2U6IFByb2dyYW1taW5nIGxhbmd1YWdlLgogICAgICAgICAgICBmaWxlX3NpemU6IFNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMuCiAgICAgICAgICAgIGxpbmVfY291bnQ6IE51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZS4KICAgICAgICAgICAgZnVuY3Rpb25zX2NvdW50OiBOdW1iZXIgb2YgZnVuY3Rpb25zIGluIHRoZSBmaWxlLgogICAgICAgICAgICBjbGFzc2VzX2NvdW50OiBOdW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgZmlsZS4iCiAgICAgICAgbm9kZSA9IEZpbGVOb2RlKAogICAgICAgICAgICBwYXRoID0gZmlsZV9wYXRoLAogICAgICAgICAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLAogICAgICAgICAgICBmaWxlX3NpemUgPSBmaWxlX3NpemUsCiAgICAgICAgICAgIGxpbmVfY291bnQgPSBsaW5lX2NvdW50LAogICAgICAgICAgICBmdW5jdGlvbnNfY291bnQgPSBmdW5jdGlvbnNfY291bnQsCiAgICAgICAgICAgIGNsYXNzZXNfY291bnQgPSBjbGFzc2VzX2NvdW50CiAgICAgICAgKQoKICAgICAgICBzZWxmLm5vZGVfZGF0YVtm/aWxlX3BhdGhdID0gbm9kZQogICAgICAgIHNlbGYuZ3JhcGguYWRkX25vZGUoZmlsZV9wYXRoLCAqKXsKICAgICAgICAgICAgImxhbmd1YWdlIjogbGFuZ3VhZ2UsCiAgICAgICAgICAgICJmaWxlX3NpemUiOiBmaWxlX3NpemUsCiAgICAgICAgICAgICJsaW5lX2NvdW50IjogbGluZV9jb3VudCwKICAgICAgICAgICAgImZ1bmN0aW9uc19jb3VudCI6IGZ1bmN0aW9uc19jb3VudCwKICAgICAgICAgICAgImNsYXNzZXNfY291bnQiOiBjbGFzc2VzX2NvdW50CiAgICAgICAgfSkKCiAgICBkZWYgYWRkX2RlcGVuZGVuY3koc2VsZiwgZGVwZW5kZW5jeTogRGVwZW5kZW5jeSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRfdGFyZ2V0OiBQYXRoIHwgTm9uZSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgImFkZCBhbiBlZGdlIHRvIHRoZSBncmFwaCByZXByZXNlbnRpbmcgYSBkZXBlbmRlbmN5LgoKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgZGVwZW5kZW5jeTogVGhlIGRlcGVuZGVuY3kgdG8gYWRkLgogICAgICAgICAgICByZXNvbHZlZHRhcmdldDogT3B0aW9uYWwgcmVzb2x2ZWQgcGF0aCB0byB0aGUgdGFyZ2V0IGZpbGUuIgogICAgICAgIHRhcmdldCA9IHJlc29sdmVkdF90YXJnZXQgaWYgcmVzb2x2ZWRfdGFyZ2V0IGVsc2UgZGVwZW5kZW5jeS50YXJnZXRfZmlsZQogICAgICAgIHNlbGYuZ3JhcGguYWRkX2VkZ2UoZGVwZW5kZW5jeS5zb3VyY2VfZmlsZSwgdGFyZ2V0LCAqKHsKICAgICAgICAgICAgImltcG9ydF9zdGF0ZW1lbnQiOiBkZXBlbmRlbmN5LmltcG9ydF9zdGF0ZW1lbnQsCiAgICAgICAgICAgICJpbXBvcnRfdHlwZSI6IGRlcGVuZGVuY3kuaW1wb3J0X3R5cGUKICAgICAgICB9KQoKICAgIGRlZiBhZGRfZGVwZW5kZW5jaWVzKHNlbGYsIGRlcGVuZGVuY2llczogbGlzdFtEZXBlbmRlbmN5XSwKICAgICAgICAgICAgICAgICAgcmVzb2x2ZXI6IGNhbGxhYmxlIHwgTm9uZSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgImFkZCBtdWx0aXBsZSBkZXBlbmRlbmNpZXMgdG8gdGhlIGdyYXBoLgoKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBMaXN0IG9mIGRlcGVuZGVuY2llcyB0byBhZGQuCiAgICAgICAgICAgIHJlc29sdmVyOiBPcHRpb25hbCBmdW5jdGlvbiB0byByZXNvbHZlIGltcG9ydCB0YXJnZXRzIHRvIGZpbGUgcGF0aHMuIgogICAgICAgIGZvciBkZXAgaW4gZGVwZW5kZW5jaWVzOgogICAgICAgICAgICByZXNvbHZlZCA9IE5vbmUKICAgICAgICAgICAgaWYgcmVzb2x2ZXI6CiAgICAgICAgICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVyKGRlcC50YXJnZXRfZmlsZSwgZGVwLnNvdXJjZV9maWxlKQogICAgICAgICAgICBzZWxmLmFkZF9kZXBlbmRlbmN5KGRlcCwgcmVzb2x2ZWQpCgogICAgZGVmIGJ1aWxkX2Zyb21fYW5hbHlzaXMoc2VsZiwgYW5hbHlzaXNfcmVzdWx0OiBkaWN0KSAtPiBOb25lOgogICAgICAgICJidWlsZCB0aGUgZ3JhcGggZnJvbSBhIGZ1bGwgYW5hbHlzaXMgcmVzdWx0LgoKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgYW5hbHlzaXNfcmVzdWx0OiBSZXN1bHQgZnJvbSB0aGUgYW5hbHl6ZXIgY29udGFpbmluZyBmaWxlIGluZm8gYW5kIGRlcGVuZGVuY2llcy4iCiAgICAgICAgZm9yIGZpbGVfaW5mbyBpbiBhbmFseXNpc19yZXN1bHQuZ2V0KCJmaWxlcyIsIFtdKToKICAgICAgICAgICAgZmlsZV9wYXRoID0gUGF0aChmaWxlX2luZm9bInBhdGgiXSkKICAgICAgICAgICAgc2VsZi5hZGRfZmlsZSgKICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IGZpbGVfcGF0aCwKICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gZmlsZV9pbmZvLmdldCgibGFuZ3VhZ2UiLCAidW5rbm93biIpLAogICAgICAgICAgICAgICAgZmlsZV9zaXplID0gZmlsZV9pbmZvLmdldCgic2l6ZSIsIDApLAogICAgICAgICAgICAgICAgbGluZV9jb3VudCA9IGZpbGVfaW5mby5nZXQoImxpbmVzIiwgMCksCiAgICAgICAgICAgICAgICBmdW5jdGlvbnNfY291bnQgPSBsZW4oZmlsZV9pbmZvLmdldCgiZnVuY3Rpb25zIiwgW10pKSwKICAgICAgICAgICAgICAgIGNsYXNzZXNfY291bnQgPSBsZW4oZmlsZV9pbmZvLmdldCgiY2xhc3NlcyIsIFtdKSkKICAgICAgICApCgogICAgICAgIGZvciBkZXBfaW5mbyBpbiBhbmFseXNpc19yZXN1bHQuZ2V0KCJkZXBlbmRlbmNpZXMiLCBbXSk6CiAgICAgICAgICAgIHNvdXJjZSA9IFBhdGgoZGVwX2luZm9bInNvdXJjZSJdKQogICAgICAgICAgICB0YXJnZXQgPSBQYXRoKGRlcF9pbmZvWyJ0YXJnZXQiXSkKICAgICAgICAgICAgc2VsZi5ncmFwaC5hZGRfZWRnZShzb3VyY2UsIHRhcmdldCkKCiAgICBkZWYgZmluZF9vcHBoYW5lZF9maWxlcyhzZWxmKSAtPiBsaXN0W1BhdGhdOgogICAgICAgICJmaW5kIGZpbGVzIHdpdGggbm8gZGVwZW5kZW5jaWVzIHRvIG9yIGZyb20gb3RoZXIgZmlsZXMuCgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBMaXN0IG9mIG9ycGhhbmVkIGZpbGUgcGF0aHMuIgogICAgICAgIG9ycGhhbmVkID0gW10KICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoLm5vZGVzKCk6CiAgICAgICAgICAgIGluX2RlZ3JlZSA9IHNlbGYuZ3JhcGguaW5fZGVncmVlKG5vZGUpCiAgICAgICAgICAgIG91dF9kZWdyZWUgPSBzZWxmLmdyYXBoLm91dF9kZWdyZWUobm9kZSkKICAgICAgICAgICAgaWYgaW5fZGVncmVlID09IDAgYW5kIG91dF9kZWdyZWUgPT0gMDoKICAgICAgICAgICAgICAgIG9ycGhhbmVkLmFwcGVuZChub2RlKQogICAgICAgIHJldHVybiBvcHBoYW5lZAoKICAgIGRlZiBmaW5kX2N5Y2xlcyhzZWxmKSAtPiBsaXN0W2xpc3RbUGF0aF1dXToKICAgICAgICAiZmluZCBhbGwgY3ljbGVzIGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgoKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgTGlzdCBvZiBjeWNsZXMsIHdoZXJlIGVhY2ggY3ljbGUgaXMgYSBsaXN0IG9mIGZpbGUgcGF0aHMuIgogICAgICAgIGN5Y2xlcyA9IFtdCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmb3IgY3ljbGUgaW4gbnguc2ltcGxlX2N5Y2xlcyhzZWxmLmdyYXBoKToKICAgICAgICAgICAgICAgIGlmIGxlbihjeWNsZSkgPiAxOgogICAgICAgICAgICAgICAgICAgIGN5Y2xlX3BhdGhzID0gW1BhdGgoYykgZm9yIGMgaW4gY3ljbGVdCiAgICAgICAgICAgICAgICAgICAgY3ljbGVzLmFwcGVuZChjeWNsZV9wYXRocykKICAgICAgICBleGNlcHQgbnguTmV0d29ya1hFcnJvcjoKICAgICAgICAgICAgcGFzcwogICAgICAgIHJldHVybiBjeWNsZXMKCiAgICBkZWYgY2FsY3VsYXRlX21ldHJpY3Moc2VsZikgLT4gR3JhcGhNZXRyaWNzOgogICAgICAgICJjYWxjdWxhdGUgbWV0cmljcyBmb3IgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBHcmFwaE1ldHJpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgdmFyaW91cyBtZXRyaWNzLiIKCiAgICAgICAgbWV0cmljcyA9IEdyYXBoTWV0cmljcygpCgoKICAgICAgICBtZXRyaWNzLnRvdGFsX2ZpbGVzID0gc2VsZi5ncmFwaC5udW1iZXJfb2Zfbm9kZXMoKQogICAgICAgIG1ldHJpY3MudG90YWxfZWRnZXMgPSBzZWxmLmdyYXBoLm51bWJlcl9vZl9lZGdlcygpCgoKICAgICAgICBtZXRyaWNzLm9ycGhhbmVkX2ZpbGVzID0gc2VsZi5maW5kX29ycGhhbmVkX2ZpbGVzKCkKICAgICAgICBtZXRyaWNzLmNpcmN1bGFyX2RlcGVuZGVuY2llcyA9IHNlbGYuZmluZF9jeWNsZXMoKQoKICAgICAgICBpZiBzZWxmLmdyYXBoLm51bWJlcl9vZl9ub2RlcygpID4gMDoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgbWV0cmljcy5tYXhfZGVwdGggPSBueC5kYWdfbG9uZ2VzdF9wYXRoX2xlbmd0aChzZWxmLmdyYXBoKQogICAgICAgICAgICBleGNlcHQgbnguTmV0d29ya1hFcnJvcjoKICAgICAgICAgICAgICAgIG1ldHJpY3MubWF4X2RlcHRoID0gMAoKICAgICAgICBpZiBzZWxmLmdyYXBoLm51bWJlcl9vZl9ub2RlcygpID4gMDoKICAgICAgICAgICAgbWF4X3Bvc3NpYmxlX2VkZ2VzID0gc2VsZi5ncmFwaC5udW1iZXJfb2Zfbm9kZXMoKSAqIChzZWxmLmdyYXBoLm51bWJlcl9vZl9ub2RlcygpIC0gMSkKICAgICAgICAgICAgaWYgbWF4X3Bvc3NpYmxlX2VkZ2VzID4gMDoKICAgICAgICAgICAgICAgIG1ldHJpY3MuZGVuc2l0eSA9IHNlbGYuZ3JhcGguY291bnRfb2ZfZWRnZXMoKSAvIG1heF9wb3NzaWJsZV9lZGdlcwoKICAgICAgICByZXR1cm4gbWV0cmljcwoKICAgIGRlZiBnZXRfdHJhbnNpdGl2ZV9jbG9zdXJlKHNlbGYsIGZpbGVfcGF0aDogUGF0aCkgLT4gc2V0W1BhdGhdOgogICAgICAgICJnZXQgYWxsIGZpbGVzIHRoYXQgZGVwZW5kIG9uIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0aGUgZ2l2ZW4gZmlsZS4KCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGZpbGVfcGF0aDogVGhlIGZpbGUgdG8gZmluZCBkZXBlbmRlbnRzIGZvci4KCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIFNldCBvZiBmaWxlIHBhdGhzIHRoYXQgZGVwZW5kIG9uIHRoZSBnaXZlbiBmaWxlLiIKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkZXNjZW5kYW50cyA9IG54LmRlc2NlbmRhbnRzKHNlbGYuZ3JhcGgsIGZpbGVfcGF0aCkKICAgICAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnRzCiAgICAgICAgZXhjZXB0IG54Lk5ldHdvcmtYRXJyb3I6CiAgICAgICAgICAgIHJldHVybiBzZXQoKQoKICAgIGRlZiBnZXRfZGVwZW5kZW5jaWVzKHNlbGYsIGZpbGVfcGF0aDogUGF0aCkgLT4gc2V0W1BhdGhdOgogICAgICAgICJnZXQgYWxsIGZpbGVzIHRoYXQgdGhlIGdpdmVuIGZpbGUgZGVwZW5kcyBvbiAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuCgoKCiAgICAgICAgQXJnczoKICAgICAgICAgICAgZmlsZV9wYXRoOiBUaGUgZmlsZSB0byBnZXQgZGVwZW5kZW5jaWVzIGZvci4KCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIFNldCBvZiBmaWxlIHBhdGhzIHRoYXQgdGhlIGdpdmVuIGZpbGUgZGVwZW5kcyBvbi4iCgogICAgICAgIHRyeToKICAgICAgICAgICAgYW5jZXN0b3JzID0gbnguYW5jZXN0b3JzKHNlbGYuZ3JhcGgsIGZpbGVfcGF0aCkKICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9ycwogICAgICAgIGV4Y2VwdCBueC5OZXR3b3JrWEVycm9yOgogICAgICAgICAgICByZXR1cm4gc2V0KCkKCiAgICBkZWYgdG9fZG90KHNlbGYpIC0+IHN0cjoKICAgICAgICAiZXhwb3J0IHRoZSBncmFwaCBpbiBET1QgZm9ybWF0IGZvciB2aXN1YWxpemF0aW9uLgoKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgRE9UIGZvcm1hdCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiIKCiAgICAgICAgcmV0dXJuIG54LmRyYXdpbmcubmJfeHBvdG8udG9fcHlkb3Qoc2VsZi5ncmFwaCkudG9fc3RyaW5nKCkK"} \ No newline at end of file