Regenerate BlastRadiusHtmlReportTemplate This also fixes an invalid property access in compiledump.py. Change-Id: I9879c17714e25d06b63842e2c9ef3fc2fc606321
diff --git a/src/blastradius/java/com/android/tools/r8/blastradius/BlastRadiusHtmlReportTemplate.java b/src/blastradius/java/com/android/tools/r8/blastradius/BlastRadiusHtmlReportTemplate.java index 7c793cc..970f3f1 100644 --- a/src/blastradius/java/com/android/tools/r8/blastradius/BlastRadiusHtmlReportTemplate.java +++ b/src/blastradius/java/com/android/tools/r8/blastradius/BlastRadiusHtmlReportTemplate.java
@@ -68,128 +68,128 @@ "Z2UgS2VlcENvbnN0cmFpbnRzIHsKICBpbnQzMiBpZCA9IDE7CiAgcmVwZWF0ZWQgS2VlcENvbnN0cmFpbnQgY29uc3RyYWludHMgPSAyOwp9CgplbnVtIEtlZXBDb25zdHJhaW50IHsKICBET05UX09CRlVTQ0FURSA9IDA7CiAgRE9OVF9PUFRJTUlaRSA9IDE7CiAgRE9OVF9TSFJJTksgPSAyOwp9CgovLyBJbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzIGluIHRoZSBhcHAvbGlicmFyeSBhbmQgd2hpY2gga2VlcCBydWxlcyB0aGF0Ci8vIGtlZXAgaXQuCm1lc3NhZ2UgS2VwdENsYXNzSW5mbyB7CiAgaW50MzIgaWQgPSAxOwogIC8vIElkIGludG8gVHlwZVJlZmVyZW5jZS4KICBpbnQzMiBjbGFzc19yZWZlcmVuY2VfaWQgPSAyOwogIC8vIElkIGludG8gRmlsZU9yaWdpbiBvciBDbGFzc0ZpbGVJbkphck9yaWdpbi4KICBpbnQzMiBmaWxlX29yaWdpbl9pZCA9IDM7CiAgLy8gSWRzIGludG8gS2VlcFJ1bGVCbGFzdFJhZGl1cywgdGVsbGluZyB3aGljaCBydWxlcyBrZWVwIHRoaXMgY2xhc3MuCiAgLy8gQWxsb3dzIHJlYXNvbmluZyBhYm91dCBwcm9wZXJ0aWVzIHN1Y2ggYXM6CiAgLy8gLSBXaGljaCBrZWVwIHJ1bGVzIGFyZSBmdWxseSBzdWJzdW1lZCBieSBvdGhlciBrZWVwIHJ1bGVzPwogIC8vIC0gV2hpY2gga2VlcCBydWxlcyBrZWVwIHRoZSBtb3N0IGNsYXNzZXMvZmllbGRzL21ldGhvZHMKICAvLyAgIG5vdCBrZXB0IGJ5IHJ1bGVzPwogIHJlcGVhdGVkIGludDMyIGtlcHRfYnkgPSA0Owp9CgptZXNzYWdlIEtlcHRG", "aWVsZEluZm8gewogIGludDMyIGlkID0gMTsKICAvLyBJZCBpbnRvIEZpZWxkUmVmZXJlbmNlLgogIGludDMyIGZpZWxkX3JlZmVyZW5jZV9pZCA9IDI7CiAgLy8gSWQgaW50byBGaWxlT3JpZ2luIG9yIENsYXNzRmlsZUluSmFyT3JpZ2luLgogIGludDMyIGZpbGVfb3JpZ2luX2lkID0gMzsKICAvLyBJZHMgaW50byBLZWVwUnVsZUJsYXN0UmFkaXVzLCB0ZWxsaW5nIHdoaWNoIHJ1bGVzIGtlZXAgdGhpcyBmaWVsZC4KICByZXBlYXRlZCBpbnQzMiBrZXB0X2J5ID0gNDsKfQoKbWVzc2FnZSBLZXB0TWV0aG9kSW5mbyB7CiAgaW50MzIgaWQgPSAxOwogIC8vIElkIGludG8gTWV0aG9kUmVmZXJlbmNlLgogIGludDMyIG1ldGhvZF9yZWZlcmVuY2VfaWQgPSAyOwogIC8vIElkIGludG8gRmlsZU9yaWdpbiBvciBDbGFzc0ZpbGVJbkphck9yaWdpbi4KICBpbnQzMiBmaWxlX29yaWdpbl9pZCA9IDM7CiAgLy8gSWRzIGludG8gS2VlcFJ1bGVCbGFzdFJhZGl1cywgdGVsbGluZyB3aGljaCBydWxlcyBrZWVwIHRoaXMgbWV0aG9kLgogIHJlcGVhdGVkIGludDMyIGtlcHRfYnkgPSA0Owp9CgovLyBSZWZlcmVuY2VzOgoKbWVzc2FnZSBGaWVsZFJlZmVyZW5jZSB7CiAgaW50MzIgaWQgPSAxOwogIC8vIFRoZSBjbGFzcyBvbiB3aGljaCB0aGUgZmllbGQgaXMgZGVjbGFyZWQuCiAgLy8gSWQgaW50byBUeXBlUmVmZXJlbmNlLgogIGludDMyIGNsYXNzX3JlZmVyZW5jZV9pZCA9IDI7CiAgLy8gVGhlIHR5cGUgb2YgdGhlIGZpZWxkLgog", "IC8vIElkIGludG8gdHlwZSByZWZlcmVuY2UuCiAgaW50MzIgdHlwZV9yZWZlcmVuY2VfaWQgPSAzOwogIC8vIFRoZSBuYW1lIG9mIHRoZSBmaWVsZC4KICBzdHJpbmcgbmFtZSA9IDQ7Cn0KCm1lc3NhZ2UgTWV0aG9kUmVmZXJlbmNlIHsKICBpbnQzMiBpZCA9IDE7CiAgLy8gVGhlIGNsYXNzIG9uIHdoaWNoIHRoZSBtZXRob2QgaXMgZGVjbGFyZWQuCiAgLy8gSWQgaW50byBUeXBlUmVmZXJlbmNlLgogIGludDMyIGNsYXNzX3JlZmVyZW5jZV9pZCA9IDI7CiAgLy8gVGhlIHByb3RvIChyZXR1cm4gdHlwZSwgcGFyYW1ldGVyIHR5cGVzKSBvZiB0aGUgbWV0aG9kLgogIC8vIElkIGludG8gUHJvdG9SZWZlcmVuY2UuCiAgaW50MzIgcHJvdG9fcmVmZXJlbmNlX2lkID0gMzsKICAvLyBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kLgogIHN0cmluZyBuYW1lID0gNDsKfQoKbWVzc2FnZSBQcm90b1JlZmVyZW5jZSB7CiAgaW50MzIgaWQgPSAxOwogIC8vIElkIGludG8gVHlwZVJlZmVyZW5jZUxpc3QuCiAgaW50MzIgcGFyYW1ldGVyc19pZCA9IDI7CiAgLy8gSWQgaW50byBUeXBlUmVmZXJlbmNlLgogIGludDMyIHJldHVybl90eXBlX2lkID0gMzsKfQoKbWVzc2FnZSBUeXBlUmVmZXJlbmNlIHsKICBpbnQzMiBpZCA9IDE7CiAgLy8gVGhlIGRlc2NyaXB0b3IsIGUuZy4sCiAgLy8gLSBaCiAgLy8gLSBMamF2YS9sYW5nL09iamVjdDsKICAvLyAtIFtbTGphdmEvbGFuZy9PYmplY3Q7CiAgc3RyaW5nIGphdmFfZGVzY3JpcHRvciA9IDI7", - "Cn0KCm1lc3NhZ2UgVHlwZVJlZmVyZW5jZUxpc3QgewogIGludDMyIGlkID0gMTsKICByZXBlYXRlZCBpbnQzMiB0eXBlX3JlZmVyZW5jZV9pZHMgPSAyOwp9CgovLyBPcmlnaW5zOgoKbWVzc2FnZSBGaWxlT3JpZ2luIHsKICBpbnQzMiBpZCA9IDE7CiAgc3RyaW5nIGZpbGVuYW1lID0gMjsKICBNYXZlbkNvb3JkaW5hdGUgbWF2ZW5fY29vcmRpbmF0ZSA9IDM7Cn0KCi8vIFRoZSBpZHMgb2YgQ2xhc3NGaWxlSW5KYXJPcmlnaW4gYW5kIEZpbGVPcmlnaW4gYXJlIG5vbi1vdmVybGFwcGluZwovLyBieSBkZXNpZ24sIHNvIHRoYXQgYSBzaW5nbGUgaW50MzIgaWQgY2FuIGJlIHVzZWQgdG8KLy8gdW5hbWJpZ3VvdXNseSByZWZlcmVuY2UgYSBDbGFzc0ZpbGVJbkphck9yaWdpbiBvciBGaWxlT3JpZ2luLgptZXNzYWdlIENsYXNzRmlsZUluSmFyT3JpZ2luIHsKICBpbnQzMiBpZCA9IDE7CiAgaW50MzIgZmlsZV9vcmlnaW5faWQgPSAyOwogIHN0cmluZyBlbnRyeSA9IDM7Cn0KCi8vIEludGVudGlvbmFsbHkgZG9lc24ndCBkZWNsYXJlIGFuIGlkIHNpbmNlIGVhY2gga2VlcCBydWxlIGhhcyBpdHMgb3duCi8vIFRleHRGaWxlT3JpZ2luLCBpLmUuLCB0aGVyZSBpcyBubyBzaGFyaW5nIG9mIFRleHRGaWxlT3JpZ2luLgptZXNzYWdlIFRleHRGaWxlT3JpZ2luIHsKICAvLyBJZCBpbnRvIEZpbGVPcmlnaW4KICBpbnQzMiBmaWxlX29yaWdpbl9pZCA9IDE7CiAgaW50MzIgbGluZV9udW1iZXIgPSAyOwogIGludDMyIGNvbHVtbl9u", - "dW1iZXIgPSAzOwp9CgptZXNzYWdlIE1hdmVuQ29vcmRpbmF0ZSB7CiAgaW50MzIgaWQgPSAxOwogIHN0cmluZyBncm91cF9pZCA9IDI7CiAgc3RyaW5nIGFydGlmYWN0X2lkID0gMzsKICBzdHJpbmcgdmVyc2lvbiA9IDQ7Cn0KCm1lc3NhZ2UgQnVpbGRJbmZvIHsKICBpbnQzMiBjbGFzc19jb3VudCA9IDE7CiAgaW50MzIgZmllbGRfY291bnQgPSAyOwogIGludDMyIG1ldGhvZF9jb3VudCA9IDM7CiAgaW50MzIgbGl2ZV9jbGFzc19jb3VudCA9IDQ7CiAgaW50MzIgbGl2ZV9maWVsZF9jb3VudCA9IDU7CiAgaW50MzIgbGl2ZV9tZXRob2RfY291bnQgPSA2Owp9CgovLyBDb250YWluZXIuCgptZXNzYWdlIEJsYXN0UmFkaXVzQ29udGFpbmVyIHsKICAvLyBPcmlnaW5zLgogIHJlcGVhdGVkIEZpbGVPcmlnaW4gZmlsZV9vcmlnaW5fdGFibGUgPSAxOwogIHJlcGVhdGVkIENsYXNzRmlsZUluSmFyT3JpZ2luIGNsYXNzX2ZpbGVfaW5famFyX29yaWdpbl90YWJsZSA9IDI7CiAgcmVwZWF0ZWQgTWF2ZW5Db29yZGluYXRlIG1hdmVuX2Nvb3JkaW5hdGVfdGFibGUgPSAzOwoKICAvLyBSZWZlcmVuY2VzLgogIHJlcGVhdGVkIEZpZWxkUmVmZXJlbmNlIGZpZWxkX3JlZmVyZW5jZV90YWJsZSA9IDQ7CiAgcmVwZWF0ZWQgTWV0aG9kUmVmZXJlbmNlIG1ldGhvZF9yZWZlcmVuY2VfdGFibGUgPSA1OwogIHJlcGVhdGVkIFByb3RvUmVmZXJlbmNlIHByb3RvX3JlZmVyZW5jZV90YWJsZSA9IDY7CiAgcmVwZWF0ZWQgVHlwZVJlZmVyZW5j", - "ZSB0eXBlX3JlZmVyZW5jZV90YWJsZSA9IDc7CiAgcmVwZWF0ZWQgVHlwZVJlZmVyZW5jZUxpc3QgdHlwZV9yZWZlcmVuY2VfbGlzdF90YWJsZSA9IDg7CgogIC8vIEtlcHQgaXRlbXMuCiAgcmVwZWF0ZWQgS2VwdENsYXNzSW5mbyBrZXB0X2NsYXNzX2luZm9fdGFibGUgPSA5OwogIHJlcGVhdGVkIEtlcHRGaWVsZEluZm8ga2VwdF9maWVsZF9pbmZvX3RhYmxlID0gMTA7CiAgcmVwZWF0ZWQgS2VwdE1ldGhvZEluZm8ga2VwdF9tZXRob2RfaW5mb190YWJsZSA9IDExOwoKICAvLyBLZWVwIHNwZWNpZmljYXRpb25zLgogIHJlcGVhdGVkIEtlZXBDb25zdHJhaW50cyBrZWVwX2NvbnN0cmFpbnRzX3RhYmxlID0gMTI7CiAgcmVwZWF0ZWQgS2VlcFJ1bGVCbGFzdFJhZGl1cyBrZWVwX3J1bGVfYmxhc3RfcmFkaXVzX3RhYmxlID0gMTM7CiAgcmVwZWF0ZWQgR2xvYmFsS2VlcFJ1bGVCbGFzdFJhZGl1cyBnbG9iYWxfa2VlcF9ydWxlX2JsYXN0X3JhZGl1c190YWJsZSA9IDE0OwoKICAvLyBCdWlsZCBpbmZvLgogIEJ1aWxkSW5mbyBidWlsZF9pbmZvID0gMTU7Cn0KPC9zY3JpcHQ+CiAgICA8c2NyaXB0IGlkPSJibGFzdHJhZGl1cy1kYXRhIiB0eXBlPSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPjwvc2NyaXB0PgogICAgPHNjcmlwdD4vLyBDb3B5cmlnaHQgKGMpIDIwMjYsIHRoZSBSOCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZl", - "ZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVBQTElDQVRJT04gTE9HSUMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVGhpcyBzY3JpcHQgaGFuZGxlcyB0aGUgaW50ZXJhY3RpdmUgZmVhdHVyZXMgb2YgdGhlIFJlcG9ydC4KICAgSXQgaXMgZGl2aWRlZCBpbnRvOgogICAxLiBDb25zdGFudHMgJiBDb25maWd1cmF0aW9uCiAgIDIuIFVJIFV0aWxpdGllcyAoRE9NIGhlbHBlcnMpCiAgIDMuIE1haW4gQXBwIENvbnRyb2xsZXIgKFJvdXRlcikKICAgNC4gUmVwb3J0QXBwIChUaGUgbWFpbiB0YWJsZS9ncmlkIHZpZXcpCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKioKICogR2xvYmFsIENvbnN0YW50cyB1c2VkIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLgogKi8KY29uc3QgQ09OU1RBTlRTID0gewogIFZJRVdTOiB7CiAgICBNT0RVTEVTOiAibW9kdWxlcyIsCiAgICBQQUNLQUdFUzogInBhY2thZ2VzIiwKICAgIERFVEFJTFM6ICJk", - "ZXRhaWxzIiwKICAgIEZJTEVfREVUQUlMUzogImZpbGUtZGV0YWlscyIKICB9LAogIERFRkFVTFRTOiB7CiAgICBBR0dSRUdBVEVEOiAiQWdncmVnYXRlZCIKICB9LAp9OwoKLyoqCiAqIFVJIFV0aWxpdGllcwogKiBDb2xsZWN0aW9uIG9mIGhlbHBlciBmdW5jdGlvbnMgZm9yIERPTSBtYW5pcHVsYXRpb24gYW5kIGNvbW1vbiBVSSBwYXR0ZXJucy4KICovCmNvbnN0IFVJVXRpbHMgPSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgQ1NTIGNsYXNzIGZvciBzY29yZSBwZXJjZW50YWdlIGNvbG9yaW5nLgogICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcGVyY2VudGFnZSAtIFRoZSBzY29yZSBwZXJjZW50YWdlICgwLTEwMCBvciAiLS0iKS4KICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDU1MgY2xhc3MgbmFtZS4KICAgKi8KICBnZXRTY29yZUNsYXNzKHBlcmNlbnRhZ2UpIHsKICAgIGlmIChwZXJjZW50YWdlID09PSAiLS0iKSByZXR1cm4gInRleHQtZ3JheS01MDAiOwogICAgaWYgKHBlcmNlbnRhZ2UgPj0gODApIHJldHVybiAidGV4dC1ncmVlbi02MDAiOwogICAgaWYgKHBlcmNlbnRhZ2UgPj0gNjApIHJldHVybiAidGV4dC15ZWxsb3ctNjAwIjsKICAgIHJldHVybiAidGV4dC1yZWQtNjAwIjsKICB9LAoKICBnZXRNYXRjaENsYXNzKHBlcmNlbnRhZ2UpIHsKICAgIGlmIChwZXJjZW50YWdlID09PSAiLS0iKSByZXR1cm4gInRleHQtZ3JheS01MDAiOwogICAgaWYgKHBlcmNlbnRhZ2UgPCAxMCkgcmV0dXJuICJ0ZXh0LWdy", - "ZWVuLTYwMCI7CiAgICBpZiAocGVyY2VudGFnZSA8IDIwKSByZXR1cm4gInRleHQtb3JhbmdlLTYwMCI7CiAgICByZXR1cm4gInRleHQtcmVkLTYwMCI7CiAgfSwKCiAgLyoqCiAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiBhIERPTSBlbGVtZW50LgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byB0b2dnbGUuCiAgICogQHBhcmFtIHtib29sZWFufSBzaG93IC0gV2hldGhlciB0byBzaG93IG9yIGhpZGUuCiAgICovCiAgdG9nZ2xlVmlzaWJpbGl0eShlbGVtZW50LCBzaG93KSB7CiAgICBpZiAoIWVsZW1lbnQpIHJldHVybjsKICAgIGlmIChzaG93KSB7CiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgIC8vIFJlc3RvcmUgYXBwcm9wcmlhdGUgZGlzcGxheSB0eXBlCiAgICAgIGlmIChlbGVtZW50LmlkID09PSAidHMtc2VsZWN0ZWQtc3RhdGUiKSB7CiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICB9IGVsc2UgewogICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB9CiAgfSwKCiAgLyoqCiAgICogQnVpbGRzIGEgbXVsdGktc2VsZWN0IGRyb3Bkb3duIHdpdGggIlNlbGVjdCBBbGwiIC8gIkNsZWFyIiBhY3Rp", - "b25zIChab25lIEEpCiAgICogYW5kIGEgc2Nyb2xsYWJsZSBsaXN0IG9mIG9wdGlvbnMgKFpvbmUgQikuCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGFpbmVySWQgLSBJRCBvZiB0aGUgZHJvcGRvd24gY29udGFpbmVyLgogICAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnMgLSBMaXN0IG9mIG9wdGlvbnMge25hbWUsIHZhbHVlfS4KICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZFN0YXRlQXJyIC0gQXJyYXkgc3RvcmluZyBjdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWVzLgogICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU2VsZWN0aW9uQ2hhbmdlIC0gQ2FsbGJhY2sgd2hlbiBzZWxlY3Rpb24gY2hhbmdlcy4KICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlYXJjaGFibGUgLSBXaGV0aGVyIHRvIGluY2x1ZGUgYSBzZWFyY2ggYm94LgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gbXVsdGlTZWxlY3QgLSBXaGV0aGVyIHRvIGFsbG93IG11bHRpcGxlIHNlbGVjdGlvbnMuCiAgICovCiAgYnVpbGRBY3Rpb25Ecm9wZG93bihjb250YWluZXJJZCwgb3B0aW9ucywgc2VsZWN0ZWRTdGF0ZUFyciwKICAgIG9uU2VsZWN0aW9uQ2hhbmdlLCBzZWFyY2hhYmxlID0gdHJ1ZSwgbXVsdGlTZWxlY3QgPSB0cnVlLCB0b3RhbENvdW50ID0KICAgIG51bGwsIGl0ZW1OYW1lID0gIml0ZW1zIiwgc2VhcmNoQ2FsbGJhY2sgPSBudWxsKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250YWluZXJJZCk7CiAg", - "ICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwoKICAgIC8vIENvbnRhaW5lciBjb25maWcKICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgIGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nID0gIjAiOwogICAgY29udGFpbmVyLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7IC8vIENsaXAgY29ybmVycwoKICAgIC8vIC0tLSBaT05FIDA6IFNlYXJjaCAoVG9wIExldmVsKSAtLS0KICAgIGxldCBzZWFyY2hJbnB1dCA9IG51bGw7CiAgICBpZiAoc2VhcmNoYWJsZSkgewogICAgICBjb25zdCBzZWFyY2hDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgc2VhcmNoQ29udGFpbmVyLmNsYXNzTmFtZSA9ICJkcm9wZG93bi1zZWFyY2gtem9uZSI7CiAgICAgIHNlYXJjaENvbnRhaW5lci5zdHlsZS5wYWRkaW5nID0gIjAuNXJlbSI7CiAgICAgIHNlYXJjaENvbnRhaW5lci5zdHlsZS5ib3JkZXJCb3R0b20gPSAiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcikiOwogICAgICBzZWFyY2hDb250YWluZXIuc3R5bGUuYmFja2dyb3VuZCA9ICJ2YXIoLS1iZy1zdXJmYWNlKSI7CgogICAgICBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgIHNlYXJjaElucHV0LnR5cGUgPSAidGV4dCI7CiAgICAgIHNlYXJjaElucHV0LmNsYXNzTmFtZSA9ICJwb3BvdmVyLXNlYXJjaCI7CiAgICAgIHNlYXJjaElucHV0LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAg", - "ICBzZWFyY2hJbnB1dC5wbGFjZWhvbGRlciA9ICJTZWFyY2guLi4iOwoKICAgICAgc2VhcmNoQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlYXJjaElucHV0KTsKICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHNlYXJjaENvbnRhaW5lcik7CiAgICB9CgogICAgLy8gLS0tIFpPTkUgQjogT3B0aW9uIExpc3QgLS0tCiAgICBjb25zdCBsaXN0Wm9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgbGlzdFpvbmUuY2xhc3NOYW1lID0gImRyb3Bkb3duLXNjcm9sbC16b25lIjsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0Wm9uZSk7CgogICAgLy8gUmVuZGVyIExpc3QgTG9naWMKICAgIGNvbnN0IHJlbmRlckxpc3QgPSAob3B0aW9uc1RvUmVuZGVyKSA9PiB7CiAgICAgIGxpc3Rab25lLmlubmVySFRNTCA9ICIiOwoKICAgICAgaWYgKG9wdGlvbnNUb1JlbmRlci5sZW5ndGggPT09IDApIHsKICAgICAgICBsaXN0Wm9uZS5pbm5lckhUTUwgPQogICAgICAgICAgYDxkaXYgY2xhc3M9InAtNCB0ZXh0LXhzIHRleHQtZ3JheS00MDAgdGV4dC1jZW50ZXIiPk5vIG9wdGlvbnMgYXZhaWxhYmxlPC9kaXY+YDsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIG9wdGlvbnNUb1JlbmRlci5mb3JFYWNoKG9wdCA9PiB7CiAgICAgICAgLy8gU0tJUCAiQWxsIiBvcHRpb25zIGlmIHRoZXkgZXhpc3QgaW4gdGhlIHBhc3NlZCBvcHRpb25zIGxpc3QuCiAgICAgICAgaWYgKG9wdC52YWx1ZSA9PT0gImFsbCIp", - "IHJldHVybjsKCiAgICAgICAgY29uc3QgaXNDaGVja2VkID0gc2VsZWN0ZWRTdGF0ZUFyci5pbmNsdWRlcyhvcHQudmFsdWUpOwoKICAgICAgICBjb25zdCBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChtdWx0aVNlbGVjdCA/ICJsYWJlbCIgOgogICAgICAgICAgImRpdiIpOwogICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gInBvcG92ZXItaXRlbSIgKyAoaXNDaGVja2VkICYmICFtdWx0aVNlbGVjdCA/CiAgICAgICAgICAiIGFjdGl2ZS1pdGVtIiA6ICIiKTsKCiAgICAgICAgbGV0IGNoZWNrYm94ID0gbnVsbDsKICAgICAgICBpZiAobXVsdGlTZWxlY3QpIHsKICAgICAgICAgIGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgICAgIGNoZWNrYm94LnR5cGUgPSAiY2hlY2tib3giOwogICAgICAgICAgY2hlY2tib3guY2xhc3NOYW1lID0gInBvcG92ZXItY2hlY2tib3giOwogICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IGlzQ2hlY2tlZDsKICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoY2hlY2tib3gpOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0gb3B0Lm5hbWU7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChsYWJlbCk7CgogICAgICAgIC8vIEludGVyYWN0aW9uOiBUb2dnbGUgSW5kaXZpZHVhbAogICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChl", - "KSA9PiB7CiAgICAgICAgICBpZiAobXVsdGlTZWxlY3QpIHsKICAgICAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHsKICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkU3RhdGVBcnIuaW5jbHVkZXMob3B0LnZhbHVlKSkKICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RhdGVBcnIucHVzaChvcHQudmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHNlbGVjdGVkU3RhdGVBcnIuaW5kZXhPZihvcHQudmFsdWUpOwogICAgICAgICAgICAgIGlmIChpZHggPiAtMSkgc2VsZWN0ZWRTdGF0ZUFyci5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZWN0ZWRTdGF0ZUFyci5sZW5ndGggPSAwOwogICAgICAgICAgICBzZWxlY3RlZFN0YXRlQXJyLnB1c2gob3B0LnZhbHVlKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIW11bHRpU2VsZWN0KSB7CiAgICAgICAgICAgIHJlbmRlckxpc3Qob3B0aW9uc1RvUmVuZGVyKTsKICAgICAgICAgIH0KICAgICAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlKCk7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKG11bHRpU2VsZWN0KSB7CiAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChlKSA9PiB7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGhhbmRsZVNlbGVjdChlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxz", - "ZSB7CiAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgaGFuZGxlU2VsZWN0KGUpOwogICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBsaXN0Wm9uZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgfSk7CiAgICB9OwoKICAgIHJlbmRlckxpc3Qob3B0aW9ucyk7CgogICAgLy8gLS0tIFpPTkUgQzogRm9vdGVyIC0tLQogICAgbGV0IGZvb3RlciA9IG51bGw7CiAgICBpZiAodG90YWxDb3VudCAhPT0gbnVsbCkgewogICAgICBmb290ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZm9vdGVyLmNsYXNzTmFtZSA9ICJkcm9wZG93bi1mb290ZXIiOwogICAgICBmb290ZXIuc3R5bGUucGFkZGluZyA9ICIwLjVyZW0gMXJlbSI7CiAgICAgIGZvb3Rlci5zdHlsZS5mb250U2l6ZSA9ICIwLjc1cmVtIjsKICAgICAgZm9vdGVyLnN0eWxlLmNvbG9yID0gInZhcigtLXRleHQtZ3JheS00MDApIjsKICAgICAgZm9vdGVyLnN0eWxlLmJvcmRlclRvcCA9ICIxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKSI7CiAgICAgIGZvb3Rlci5zdHlsZS5iYWNrZ3JvdW5kID0gInZhcigtLWJnLXN1YnRsZSkiOwogICAgICBmb290ZXIudGV4dENvbnRlbnQgPQogICAgICAgIGBTaG93aW5nICR7b3B0aW9ucy5sZW5ndGh9IG91dCBvZiAke3RvdGFsQ291bnR9ICR7aXRlbU5hbWV9YDsKICAgICAg", - "Y29udGFpbmVyLmFwcGVuZENoaWxkKGZvb3Rlcik7CiAgICB9CgogICAgLy8gLS0tIFNlYXJjaCBMb2dpYyAtLS0KICAgIGlmIChzZWFyY2hJbnB1dCkgewogICAgICBzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlKSA9PiB7CiAgICAgICAgY29uc3QgdGVybSA9IGUudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCk7CgogICAgICAgIGlmIChzZWFyY2hDYWxsYmFjaykgewogICAgICAgICAgY29uc3QgewogICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsCiAgICAgICAgICAgIHRvdGFsOiBtQ291bnQKICAgICAgICAgIH0gPSBzZWFyY2hDYWxsYmFjayh0ZXJtKTsKICAgICAgICAgIHJlbmRlckxpc3QoZmlsdGVyZWRPcHRpb25zKTsKICAgICAgICAgIGlmIChmb290ZXIpIHsKICAgICAgICAgICAgZm9vdGVyLnRleHRDb250ZW50ID0KICAgICAgICAgICAgICBgU2hvd2luZyAke2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGh9IG91dCBvZiAke21Db3VudH0gJHtpdGVtTmFtZX1gOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBpdGVtcyA9IGxpc3Rab25lLnF1ZXJ5U2VsZWN0b3JBbGwoIi5wb3BvdmVyLWl0ZW0iKTsKICAgICAgICAgIGxldCB2aXNpYmxlQ291bnQgPSAwOwogICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoInNwYW4iKS50ZXh0Q29udGVudAogICAg", - "ICAgICAgICAgIC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBsYWJlbC5pbmNsdWRlcyh0ZXJtKTsKICAgICAgICAgICAgaXRlbS5zdHlsZS5kaXNwbGF5ID0gaXNWaXNpYmxlID8gImZsZXgiIDogIm5vbmUiOwogICAgICAgICAgICBpZiAoaXNWaXNpYmxlKSB2aXNpYmxlQ291bnQrKzsKICAgICAgICAgIH0pOwoKICAgICAgICAgIGlmIChmb290ZXIgJiYgdG90YWxDb3VudCAhPT0gbnVsbCkgewogICAgICAgICAgICBmb290ZXIudGV4dENvbnRlbnQgPQogICAgICAgICAgICAgIGBTaG93aW5nICR7dmlzaWJsZUNvdW50fSBvdXQgb2YgJHt0b3RhbENvdW50fSAke2l0ZW1OYW1lfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9LAoKICAvKioKICAgKiBSZW5kZXJzIHRoZSB0ZXh0IG9uIHRoZSBmaWx0ZXIgY2hpcCAoZS5nLiwgIk1vZHVsZTogQWxsIiBvciAiTW9kdWxlOiA6Y29yZTpuZXR3b3JrICgrMikiKS4KICAgKi8KICByZW5kZXJDaGlwVGV4dChlbGVtZW50LCBsYWJlbCwgdHlwZSwgaXNNdWx0aSA9IGZhbHNlKSB7CiAgICBpZiAoIWVsZW1lbnQpIHJldHVybjsKICAgIC8vIExvZ2ljIGZvciBkaXNwbGF5aW5nIGNsb3NlIGJ1dHRvbjogQUxXQVlTIHNob3cgaWYgJ3R5cGUnIGlzIHByZXNlbnQgKG1lYW5pbmcgcmVtb3ZhYmxlKQogICAgLy8gVGhlIHVzZXIgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZCBvcHRpb24gdG8gcmVtb3ZlIGZpbHRlciB3aGVu", - "IGFsbCBpdGVtcyBhcmUgc2VsZWN0ZWQuCiAgICBjb25zdCBzaG93Q2xvc2UgPSAhIXR5cGU7CgogICAgaWYgKCFzaG93Q2xvc2UpIHsKICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImZpbHRlci10ZXh0Ij4ke2xhYmVsfTwvc3Bhbj5gOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVyLXRleHQiPiR7bGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoaXAtY2xvc2UiIGRhdGEtY2xlYXI9IiR7dHlwZX0iPgogICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNC4yOTMgNC4yOTNhMSAxIDAgMDExLjQxNCAwTDEwIDguNTg2bDQuMjkzLTQuMjkzYTEgMSAwIDExMS40MTQgMS40MTRMMTEuNDE0IDEwbDQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0IDEuNDE0TDEwIDExLjQxNGwtNC4yOTMgNC4yOTNhMSAxIDAgMDEtMS40MTQtMS40MTRMOC41ODYgMTAgNC4yOTMgNS43MDdhMSAxIDAgMDEwLTEuNDE0eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC9zcGFuPmA7", - "CiAgICB9CiAgfSwKCiAgZ2V0RmlsdGVyTGFiZWwocHJlZml4LCBzZWxlY3RlZEFyciwgdG90YWxDb3VudCwgb3B0aW9ucyA9IFtdKSB7CiAgICBpZiAoc2VsZWN0ZWRBcnIubGVuZ3RoID09PSAwIHx8ICh0b3RhbENvdW50ID4gMCAmJiBzZWxlY3RlZEFyci5sZW5ndGggPT09CiAgICAgICAgdG90YWxDb3VudCkpIHJldHVybiBgJHtwcmVmaXh9OiBBbGxgOwogICAgaWYgKHNlbGVjdGVkQXJyLmxlbmd0aCA9PT0gMSkgewogICAgICBjb25zdCB2YWwgPSBzZWxlY3RlZEFyclswXTsKICAgICAgY29uc3Qgb3B0ID0gb3B0aW9ucy5maW5kKG8gPT4gU3RyaW5nKG8udmFsdWUpID09PSBTdHJpbmcodmFsKSk7CiAgICAgIGNvbnN0IG5hbWUgPSBvcHQgPyBvcHQubmFtZSA6IHZhbDsKICAgICAgLy8gU3RyaXAgSFRNTCB0YWdzIGlmIGFueSAobGlrZSBpbiBrZWVwUnVsZU9wdGlvbnMpCiAgICAgIGNvbnN0IGNsZWFuTmFtZSA9IG5hbWUucmVwbGFjZSgvPFtePl0qPi9nLCAiIik7CiAgICAgIHJldHVybiBgJHtwcmVmaXh9OiAke2NsZWFuTmFtZX1gOwogICAgfQogICAgcmV0dXJuIGAke3ByZWZpeH06ICR7c2VsZWN0ZWRBcnIubGVuZ3RofSBTZWxlY3RlZGA7CiAgfSwKCiAgLyoqCiAgICogRmluZHMgdGhlIGNvbW1vbiBwcmVmaXggYW1vbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncy4KICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzdHJpbmdzIC0gQXJyYXkgb2Ygc3RyaW5ncyB0byBhbmFseXplLgogICAqIEByZXR1cm5zIHtzdHJpbmd9", - "IFRoZSBjb21tb24gcHJlZml4LgogICAqLwogIGZpbmRDb21tb25QcmVmaXgoc3RyaW5ncykgewogICAgaWYgKCFzdHJpbmdzIHx8IHN0cmluZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gIiI7CiAgICBsZXQgcHJlZml4ID0gc3RyaW5nc1swXTsKICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoc3RyaW5nc1tpXS5zdGFydHNXaXRoKCJBbmRyb2lkIEdyYWRsZSBwbHVnaW4iKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHdoaWxlIChzdHJpbmdzW2ldLmluZGV4T2YocHJlZml4KSAhPT0gMCkgewogICAgICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCAtIDEpOwogICAgICAgIGlmIChwcmVmaXggPT09ICIiKSByZXR1cm4gIiI7CiAgICAgIH0KICAgIH0KICAgIC8vIEVuc3VyZSB3ZSBvbmx5IHN0cmlwIHVwIHRvIHRoZSBsYXN0IHNsYXNoIHRvIGtlZXAgdGhlIGZpbGVuYW1lLgogICAgY29uc3QgbGFzdFNsYXNoID0gcHJlZml4Lmxhc3RJbmRleE9mKCcvJyk7CiAgICBpZiAobGFzdFNsYXNoICE9PSAtMSkgewogICAgICByZXR1cm4gcHJlZml4LnN1YnN0cmluZygwLCBsYXN0U2xhc2ggKyAxKTsKICAgIH0KICAgIHJldHVybiAiIjsKICB9Cn07CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBNQUlOIEFQUCBDT05UUk9M", - "TEVSCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgpjb25zdCBBcHAgPSB7CiAgYmxhc3RSYWRpdXNEYXRhOiBudWxsLAoKICBpbml0KCkgewogICAgLy8gSW5pdGlhbGl6ZSBSZXBvcnQgKE1haW4gR3JpZCkKICAgIFJlcG9ydEFwcC5pbml0KCk7CgogICAgLy8gTG9hZCBQcm90b2J1ZiBEYXRhIGluIHRoZSBCYWNrZ3JvdW5kCiAgICB0aGlzLmxvYWRQcm90b0RhdGEoKTsKICB9LAoKICBzaG93RGV0YWlsc1ZpZXcocnVsZUlkKSB7CiAgICBSZXBvcnRBcHAuc3RhdGUuY3VycmVudFZpZXcgPSBDT05TVEFOVFMuVklFV1MuREVUQUlMUzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXBvcnQtdmlldyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWxzLXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtdmlldyIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CgogICAgY29uc3QgcnVsZUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1ydWxlLWJvZHkiKTsKICAgIGNvbnN0IGltcGFjdEJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1pbXBhY3QtYm9keSIpOwogICAgY29uc3QgaWRlbnRpY2FsUnVsZXNCb2R5ID0gZG9jdW1lbnQuZ2V0", - "RWxlbWVudEJ5SWQoCiAgICAgICJkZXRhaWxzLWlkZW50aWNhbC1ydWxlcy1ib2R5Iik7CiAgICBjb25zdCBpZGVudGljYWxSdWxlc0hlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAiZGV0YWlscy1pZGVudGljYWwtcnVsZXMtaGVhZGVyIik7CiAgICBjb25zdCBpZGVudGljYWxSdWxlc1RpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoCiAgICAgICJkZXRhaWxzLWlkZW50aWNhbC1ydWxlcy10aXRsZSIpOwogICAgY29uc3Qgc3Vic3VtZWRCeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICJkZXRhaWxzLXN1YnN1bWVkLWJ5LWJvZHkiKTsKICAgIGNvbnN0IHN1YnN1bWVkQnlIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgImRldGFpbHMtc3Vic3VtZWQtYnktaGVhZGVyIik7CiAgICBjb25zdCBzdWJzdW1lZEJ5VGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgImRldGFpbHMtc3Vic3VtZWQtYnktdGl0bGUiKTsKICAgIGNvbnN0IGltcGFjdEhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgImRldGFpbHMtcnVsZS1pbXBhY3QtaGVhZGVyIik7CiAgICBjb25zdCBjbGFzc2VzQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXRhaWxzLWNsYXNzZXMtY29udGVudCIpOwogICAgY29uc3QgbWV0aG9kc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1tZXRob2RzLWNvbnRl", - "bnQiKTsKICAgIGNvbnN0IGZpZWxkc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1maWVsZHMtY29udGVudCIpOwoKICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8ua2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlLmZpbmQociA9PiByCiAgICAgIC5pZCA9PT0gcGFyc2VJbnQocnVsZUlkKSk7CiAgICBpZiAocnVsZSkgewogICAgICBjb25zdCBmaWxlT3JpZ2luSWQgPSBydWxlPy5vcmlnaW4/LmZpbGVPcmlnaW5JZDsKICAgICAgY29uc3QgZmlsZU9yaWdpbiA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhPy5maWxlT3JpZ2luVGFibGUuZmluZChmID0+IGYKICAgICAgICAuaWQgPT09IGZpbGVPcmlnaW5JZCk7CgogICAgICBsZXQgb3JpZ2luU3RyID0gIiI7CiAgICAgIGlmIChmaWxlT3JpZ2luKSB7CiAgICAgICAgY29uc3QgbWF2ZW5OYW1lID0gZm9ybWF0TWF2ZW5Db29yZGluYXRlKGZpbGVPcmlnaW4ubWF2ZW5Db29yZGluYXRlKTsKICAgICAgICBvcmlnaW5TdHIgPQogICAgICAgICAgYCR7bWF2ZW5OYW1lIHx8IGZpbGVPcmlnaW4uZmlsZW5hbWV9OiR7cnVsZS5vcmlnaW4/LmxpbmVOdW1iZXIgfHwgMX1gOwogICAgICAgIGlmIChtYXZlbk5hbWUpIHsKICAgICAgICAgIG9yaWdpblN0ciArPSBgICgke2ZpbGVPcmlnaW4uZmlsZW5hbWV9KWA7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBjb25zdHJhaW50c01hcCA9IGdldENvbnN0cmFpbnRzTWFwKHRoaXMuYmxh", - "c3RSYWRpdXNEYXRhKTsKICAgICAgY29uc3QgY29uc3RyYWludHMgPSBjb25zdHJhaW50c01hcC5nZXQocnVsZS5jb25zdHJhaW50c0lkKSB8fCBbXTsKCiAgICAgIGNvbnN0IGdldFRhZyA9IChjLCBsYWJlbCkgPT4gewogICAgICAgIGNvbnN0IGlzUmVzdHJpY3RlZCA9IGNvbnN0cmFpbnRzLmluY2x1ZGVzKGMpOwogICAgICAgIGlmICghaXNSZXN0cmljdGVkKSByZXR1cm4gIiI7CiAgICAgICAgY29uc3QgY29sb3IgPSAidmFyKC0tdGV4dC1yZWQtNjAwKSI7CiAgICAgICAgY29uc3QgYmdDb2xvciA9ICJ2YXIoLS1iZy1yZWQtbGlnaHQpIjsKICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPSJpbXBhY3QtdGFnIiBzdHlsZT0iY29sb3I6ICR7Y29sb3J9OyBiYWNrZ3JvdW5kLWNvbG9yOiAke2JnQ29sb3J9OyBib3JkZXItY29sb3I6ICR7Y29sb3J9OyBvcGFjaXR5OiAwLjg7Ij4ke2xhYmVsfTwvc3Bhbj5gOwogICAgICB9OwoKICAgICAgY29uc3QgaW1wYWN0VGFnc0h0bWwgPSBgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltcGFjdC1jb250YWluZXIiPgogICAgICAgICAgICAgICR7Z2V0VGFnKCdET05UX09CRlVTQ0FURScsICdPQkZVU0NBVEUnKX0KICAgICAgICAgICAgICAke2dldFRhZygnRE9OVF9PUFRJTUlaRScsICdPUFRJTUlaRScpfQogICAgICAgICAgICAgICR7Z2V0VGFnKCdET05UX1NIUklOSycsICdTSFJJTksnKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwoKICAgICAgcnVsZUJvZHku", - "aW5uZXJIVE1MID0gYAogICAgICAgICAgICA8dHIgY2xhc3M9ImJvcmRlci10IGJvcmRlci1ncmF5LTIwMCI+CiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+CiAgICAgICAgICAgICAgICAke29yaWdpblN0ciA/IGA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDAuNzVyZW07IGNvbG9yOiB2YXIoLS10ZXh0LWdyYXktOTAwKTsgbWFyZ2luLWJvdHRvbTogMC41cmVtOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7Ij4ke2VzY2FwZUhUTUwob3JpZ2luU3RyKX08L2Rpdj5gIDogIiJ9CiAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1tb25vKTsgZm9udC1zaXplOiAwLjgxMjVyZW07IG1hcmdpbjogMDsgY29sb3I6IHZhcigtLXRleHQtYmx1ZS03MDApOyI+JHtlc2NhcGVIVE1MKHJ1bGUuc291cmNlKX08L3ByZT4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgYDsKCiAgICAgIGNvbnN0IGJyID0gcnVsZS5ibGFzdFJhZGl1cyB8fCB7fTsKICAgICAgY29uc3QgY2xhc3NJZHMgPSBici5jbGFzc0JsYXN0UmFkaXVzIHx8IFtdOwogICAgICBjb25zdCBmaWVsZElkcyA9IGJyLmZpZWxkQmxhc3RSYWRpdXMgfHwgW107CiAgICAgIGNvbnN0IG1ldGhvZElkcyA9IGJyLm1ldGhvZEJsYXN0UmFkaXVzIHx8IFtdOwog", - "ICAgICBjb25zdCBtYXRjaGVkVG90YWwgPSBjbGFzc0lkcy5sZW5ndGggKyBmaWVsZElkcy5sZW5ndGggKyBtZXRob2RJZHMKICAgICAgICAubGVuZ3RoOwogICAgICBjb25zdCB0b3RhbExpdmUgPSBnZXRMaXZlSXRlbUNvdW50KHRoaXMuYmxhc3RSYWRpdXNEYXRhKTsKICAgICAgY29uc3QgbGl2ZUNsYXNzZXMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uYnVpbGRJbmZvPy5saXZlQ2xhc3NDb3VudCB8fAogICAgICAwOwogICAgICBjb25zdCBsaXZlRmllbGRzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbz8ubGl2ZUZpZWxkQ291bnQgfHwgMDsKICAgICAgY29uc3QgbGl2ZU1ldGhvZHMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uYnVpbGRJbmZvPy5saXZlTWV0aG9kQ291bnQgfHwKICAgICAgICAwOwoKICAgICAgY29uc3QgcmVuZGVyTWF0Y2hDZWxsID0gKGNvdW50LCB0b3RhbCwgYm9yZGVyTGVmdCA9IHRydWUpID0+IHsKICAgICAgICBjb25zdCBwZXJjID0gdG90YWwgPiAwID8gKGNvdW50IC8gdG90YWwgKiAxMDApIDogMDsKICAgICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRNYXRjaENsYXNzKHBlcmMpOwogICAgICAgIGNvbnN0IGJsID0gYm9yZGVyTGVmdCA/ICJib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIDogIiI7CiAgICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyICR7Ymx9IiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEw", - "MHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkICR7Y29sb3JDbGFzc30iPiR7cGVyYy50b0ZpeGVkKDEpfSU8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMSI+JHtjb3VudH08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICBgOwogICAgICB9OwoKICAgICAgaW1wYWN0Qm9keS5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgIDx0ciBjbGFzcz0iYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIj4KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChjbGFzc0lkcy5sZW5ndGgsIGxpdmVDbGFzc2VzLCBmYWxzZSl9CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoZmllbGRJZHMubGVuZ3RoLCBsaXZlRmllbGRzKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChtZXRob2RJZHMubGVuZ3RoLCBsaXZlTWV0aG9kcyl9CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+CiAgICAgICAg", - "ICAgICAgICAke2ltcGFjdFRhZ3NIdG1sfQogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICBgOwoKICAgICAgY29uc3QgYWxsUnVsZXMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8ua2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlIHx8IFtdOwogICAgICBjb25zdCBzdWJzdW1pbmdJZHMgPSBici5zdWJzdW1lZEJ5IHx8IFtdOwoKICAgICAgY29uc3QgaWRlbnRpY2FsUnVsZXMgPSBbXTsKICAgICAgY29uc3Qgc3Vic3VtZWRCeVJ1bGVzID0gW107CgogICAgICBzdWJzdW1pbmdJZHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgY29uc3Qgb3RoZXJSdWxlID0gYWxsUnVsZXMuZmluZChyID0+IHIuaWQgPT09IGlkKTsKICAgICAgICBpZiAob3RoZXJSdWxlKSB7CiAgICAgICAgICBjb25zdCBvdGhlclN1YnN1bWVkQnkgPSBvdGhlclJ1bGUuYmxhc3RSYWRpdXM/LnN1YnN1bWVkQnkgfHwgW107CiAgICAgICAgICBpZiAob3RoZXJTdWJzdW1lZEJ5LmluY2x1ZGVzKHJ1bGUuaWQpKSB7CiAgICAgICAgICAgIGlkZW50aWNhbFJ1bGVzLnB1c2gob3RoZXJSdWxlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN1YnN1bWVkQnlSdWxlcy5wdXNoKG90aGVyUnVsZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIGNvbnN0IHJlbmRlclJ1bGVSb3cgPSAocikgPT4gewogICAgICAgIGNvbnN0IHJCciA9IHIuYmxhc3RSYWRpdXMgfHwge307CiAgICAgICAgY29uc3Qg", - "ckNsYXNzSWRzID0gckJyLmNsYXNzQmxhc3RSYWRpdXMgfHwgW107CiAgICAgICAgY29uc3QgckZpZWxkSWRzID0gckJyLmZpZWxkQmxhc3RSYWRpdXMgfHwgW107CiAgICAgICAgY29uc3Qgck1ldGhvZElkcyA9IHJCci5tZXRob2RCbGFzdFJhZGl1cyB8fCBbXTsKCiAgICAgICAgY29uc3QgckNvbnN0cmFpbnRzID0gY29uc3RyYWludHNNYXAuZ2V0KHIuY29uc3RyYWludHNJZCkgfHwgW107CiAgICAgICAgY29uc3QgZ2V0VGFnID0gKGMsIGxhYmVsKSA9PiB7CiAgICAgICAgICBjb25zdCBpc1Jlc3RyaWN0ZWQgPSByQ29uc3RyYWludHMuaW5jbHVkZXMoYyk7CiAgICAgICAgICBpZiAoIWlzUmVzdHJpY3RlZCkgcmV0dXJuICIiOwogICAgICAgICAgY29uc3QgY29sb3IgPSAidmFyKC0tdGV4dC1yZWQtNjAwKSI7CiAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gInZhcigtLWJnLXJlZC1saWdodCkiOwogICAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz0iaW1wYWN0LXRhZyIgc3R5bGU9ImNvbG9yOiAke2NvbG9yfTsgYmFja2dyb3VuZC1jb2xvcjogJHtiZ0NvbG9yfTsgYm9yZGVyLWNvbG9yOiAke2NvbG9yfTsgb3BhY2l0eTogMC44OyI+JHtsYWJlbH08L3NwYW4+YDsKICAgICAgICB9OwoKICAgICAgICBjb25zdCBpbXBhY3RDZWxsID0gYAogICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogNTBweDsg", - "bWluLXdpZHRoOiA1MHB4OyI+JHtnZXRUYWcoJ0RPTlRfT0JGVVNDQVRFJywgJ09CRlVTQ0FURScpfTwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0xMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9PUFRJTUlaRScsICdPUFRJTUlaRScpfTwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0xMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9TSFJJTksnLCAnU0hSSU5LJyl9PC90ZD4KICAgICAgICAgICAgYDsKCiAgICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgICA8dHIgY2xhc3M9InRhYmxlLXJvdyBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgaG92ZXI6YmctZ3JheS01MCBjdXJzb3ItcG9pbnRlciIgb25jbGljaz0iQXBwLnNob3dEZXRhaWxzVmlldygnJHtyLmlkfScpIj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RpY2t5LW5hbWUgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCBob3Zlcjp1bmRlcmxpbmUiIHRpdGxlPSIke2VzY2FwZUhUTUwoci5zb3VyY2UpfSIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA2MDBweDsgbWluLXdpZHRoOiA2MDBweDsiPgogICAgICAgICAgICAgICAgICA8cHJlIHN0eWxl", - "PSJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1tb25vKTsgZm9udC1zaXplOiAwLjgxMjVyZW07IG1hcmdpbjogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7Ij4ke2VzY2FwZUhUTUwoci5zb3VyY2UpfTwvcHJlPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKHJDbGFzc0lkcy5sZW5ndGggKyByRmllbGRJZHMubGVuZ3RoICsgck1ldGhvZElkcy5sZW5ndGgsIHRvdGFsTGl2ZSwgdHJ1ZSl9CiAgICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChyQ2xhc3NJZHMubGVuZ3RoLCBsaXZlQ2xhc3Nlcyl9CiAgICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChyRmllbGRJZHMubGVuZ3RoLCBsaXZlRmllbGRzKX0KICAgICAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKHJNZXRob2RJZHMubGVuZ3RoLCBsaXZlTWV0aG9kcyl9CiAgICAgICAgICAgICAgICAke2ltcGFjdENlbGx9CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgYDsKICAgICAgfTsKCiAgICAgIGlmIChpZGVudGljYWxSdWxlcy5sZW5ndGggPT09IDApIHsKICAgICAgICBpZGVudGljYWxSdWxlc1RpdGxlLnRleHRDb250ZW50ID0gIklkZW50aWNhbCBSdWxlcyAoTm9uZSkiOwogICAgICAgIGlkZW50aWNhbFJ1bGVzSGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgaWRlbnRpY2FsUnVsZXNCb2R5LmlubmVySFRN", - "TCA9ICIiOwogICAgICB9IGVsc2UgewogICAgICAgIGlkZW50aWNhbFJ1bGVzVGl0bGUudGV4dENvbnRlbnQgPSAiSWRlbnRpY2FsIFJ1bGVzIjsKICAgICAgICBpZGVudGljYWxSdWxlc0hlYWRlci5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgaWRlbnRpY2FsUnVsZXNCb2R5LmlubmVySFRNTCA9IGlkZW50aWNhbFJ1bGVzLm1hcChyZW5kZXJSdWxlUm93KS5qb2luKAogICAgICAgICAgIiIpOwogICAgICB9CgogICAgICBpZiAoc3Vic3VtZWRCeVJ1bGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHN1YnN1bWVkQnlUaXRsZS50ZXh0Q29udGVudCA9ICJTdWJzdW1lZCBCeSAoTm9uZSkiOwogICAgICAgIHN1YnN1bWVkQnlIZWFkZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICBzdWJzdW1lZEJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzdW1lZEJ5VGl0bGUudGV4dENvbnRlbnQgPSAiU3Vic3VtZWQgQnkiOwogICAgICAgIHN1YnN1bWVkQnlIZWFkZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgIHN1YnN1bWVkQnlCb2R5LmlubmVySFRNTCA9IHN1YnN1bWVkQnlSdWxlcy5tYXAocmVuZGVyUnVsZVJvdykuam9pbigKICAgICAgICAiIik7CiAgICAgIH0KCiAgICAgIGNvbnN0IHR5cGVSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICAgIGlmICh0aGlzLmJsYXN0UmFkaXVzRGF0YS50eXBlUmVmZXJlbmNlVGFibGUpIHsKICAgICAgICB0aGlzLmJsYXN0UmFkaXVz", - "RGF0YS50eXBlUmVmZXJlbmNlVGFibGUuZm9yRWFjaCh0ID0+IHR5cGVSZWZNYXAuc2V0KHQKICAgICAgICAgIC5pZCwgdC5qYXZhRGVzY3JpcHRvcikpOwogICAgICB9CgogICAgICBjb25zdCByZW5kZXJMaXN0ID0gKGlkcywgZ2V0TGFiZWwpID0+IHsKICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gJzxkaXYgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgY29sb3I6IHZhcigtLXRleHQtZ3JheS01MDApOyBmb250LXNpemU6IDAuODEyNXJlbTsiPk5vbmU8L2Rpdj4nOwogICAgICAgIGNvbnN0IGxpbWl0ID0gMTAwMDsKICAgICAgICBjb25zdCB0b1JlbmRlciA9IGlkcy5zbGljZSgwLCBsaW1pdCk7CiAgICAgICAgY29uc3QgbGlzdEh0bWwgPSB0b1JlbmRlci5tYXAoaWQgPT4gYAogICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDAuMzc1cmVtIDAuNXJlbTsgYm9yZGVyLXJhZGl1czogMC4zNzVyZW07IG1hcmdpbi1ib3R0b206IDAuMTI1cmVtOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyIgY2xhc3M9ImhvdmVyLWJnLWdyYXktMTAwIj4KICAgICAgICAgICAgICAgICR7Z2V0TGFiZWwoaWQpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgKS5qb2luKCIiKTsKICAgICAgICBpZiAoaWRzLmxlbmd0aCA+IGxpbWl0KSB7CiAgICAgICAgICByZXR1cm4gbGlzdEh0bWwgKyBgCiAgICAgICAgICAgICAg", - "ICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IGNvbG9yOiB2YXIoLS10ZXh0LWdyYXktNTAwKTsgZm9udC1zaXplOiAwLjgxMjVyZW07IGZvbnQtc3R5bGU6IGl0YWxpYzsiPgogICAgICAgICAgICAgICAgICAuLi4gYW5kICR7aWRzLmxlbmd0aCAtIGxpbWl0fSBtb3JlIGl0ZW1zCiAgICAgICAgICAgICAgICA8L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlzdEh0bWw7CiAgICAgIH07CgogICAgICBjbGFzc2VzQ29udGVudC5pbm5lckhUTUwgPSByZW5kZXJMaXN0KGNsYXNzSWRzLCAoaWQpID0+IHsKICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5ibGFzdFJhZGl1c0RhdGEua2VwdENsYXNzSW5mb1RhYmxlLmZpbmQoYyA9PiBjCiAgICAgICAgICAuaWQgPT09IGlkKTsKICAgICAgICByZXR1cm4gZXNjYXBlSFRNTChmb3JtYXREZXNjcmlwdG9yKHR5cGVSZWZNYXAuZ2V0KGluZm8KICAgICAgICAgID8uY2xhc3NSZWZlcmVuY2VJZCkpKTsKICAgICAgfSk7CgogICAgICBmaWVsZHNDb250ZW50LmlubmVySFRNTCA9IHJlbmRlckxpc3QoZmllbGRJZHMsIChpZCkgPT4gewogICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmJsYXN0UmFkaXVzRGF0YS5rZXB0RmllbGRJbmZvVGFibGUuZmluZChmID0+IGYKICAgICAgICAgIC5pZCA9PT0gaWQpOwogICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhLmZpZWxkUmVmZXJlbmNlVGFibGUuZmluZChyID0+IHIKICAgICAgICAgIC5pZCA9PT0g", - "aW5mbz8uZmllbGRSZWZlcmVuY2VJZCk7CiAgICAgICAgcmV0dXJuIGVzY2FwZUhUTUwoZm9ybWF0RmllbGROYW1lKHJlZiwgdGhpcy5ibGFzdFJhZGl1c0RhdGEsCiAgICAgICAgICB0eXBlUmVmTWFwKSk7CiAgICAgIH0pOwoKICAgICAgbWV0aG9kc0NvbnRlbnQuaW5uZXJIVE1MID0gcmVuZGVyTGlzdChtZXRob2RJZHMsIChpZCkgPT4gewogICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmJsYXN0UmFkaXVzRGF0YS5rZXB0TWV0aG9kSW5mb1RhYmxlLmZpbmQobSA9PiBtCiAgICAgICAgICAuaWQgPT09IGlkKTsKICAgICAgICBjb25zdCByZWYgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YS5tZXRob2RSZWZlcmVuY2VUYWJsZS5maW5kKHIgPT4gcgogICAgICAgICAgLmlkID09PSBpbmZvPy5tZXRob2RSZWZlcmVuY2VJZCk7CiAgICAgICAgcmV0dXJuIGVzY2FwZUhUTUwoZm9ybWF0TWV0aG9kTmFtZShyZWYsIHRoaXMuYmxhc3RSYWRpdXNEYXRhLAogICAgICAgICAgdHlwZVJlZk1hcCkpOwogICAgICB9KTsKCiAgICB9IGVsc2UgewogICAgICBydWxlQm9keS5pbm5lckhUTUwgPQogICAgICAgICc8dHI+PHRkIGNvbHNwYW49IjIiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyI+UnVsZSBub3QgZm91bmQuPC90ZD48L3RyPic7CiAgICAgIGNsYXNzZXNDb250ZW50LmlubmVySFRNTCA9ICIiOwogICAgICBtZXRob2RzQ29udGVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgZmllbGRzQ29udGVudC5pbm5lckhUTUwgPSAiIjsKICAgIH0K", - "CiAgICBjb25zdCBmaWxlT3JpZ2luID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmZpbGVPcmlnaW5UYWJsZS5maW5kKGYgPT4gZgogICAgICAuaWQgPT09IHJ1bGU/Lm9yaWdpbj8uZmlsZU9yaWdpbklkKTsKICAgIGNvbnN0IGZpbGVPcmlnaW5OYW1lID0gZm9ybWF0TWF2ZW5Db29yZGluYXRlKGZpbGVPcmlnaW4KICAgICAgPy5tYXZlbkNvb3JkaW5hdGUpIHx8IGZpbGVPcmlnaW4/LmZpbGVuYW1lOwogICAgdGhpcy51cGRhdGVEZXRhaWxzQnJlYWRjcnVtYnMoZmlsZU9yaWdpbk5hbWUsIGZpbGVPcmlnaW4/LmlkKTsKICB9LAoKICBzaG93UmVwb3J0VmlldygpIHsKICAgIFJlcG9ydEFwcC5zdGF0ZS5jdXJyZW50VmlldyA9IENPTlNUQU5UUy5WSUVXUy5NT0RVTEVTOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtdmlldyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWxzLXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlcG9ydC12aWV3Iikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgIFJlcG9ydEFwcC5yZW5kZXIoKTsKICB9LAoKICBzaG93RmlsZURldGFpbHNWaWV3KGZpbGVPcmlnaW5JZCkgewogICAgUmVwb3J0QXBwLnN0YXRlLmN1cnJlbnRWaWV3ID0gQ09OU1RBTlRTLlZJRVdTLkZJTEVfREVUQUlMUzsKICAgIFJlcG9ydEFwcC5zdGF0ZS5kcmlsbENvbnRl", - "eHQuZmlsZU9yaWdpbklkID0gZmlsZU9yaWdpbklkOwogICAgdGhpcy5yZW5kZXJGaWxlRGV0YWlsc1ZpZXcoZmlsZU9yaWdpbklkKTsKICB9LAoKICByZW5kZXJGaWxlRGV0YWlsc1ZpZXcoZmlsZU9yaWdpbklkKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVwb3J0LXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtdmlldyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWxzLXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwoKICAgIGNvbnN0IGltcGFjdEJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWxzLWltcGFjdC1ib2R5Iik7CiAgICBjb25zdCBydWxlc0JvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWxzLXJ1bGVzLWJvZHkiKTsKICAgIGNvbnN0IHJ1bGVzSGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy1ydWxlcy1oZWFkZXIiKTsKCiAgICBjb25zdCBmaWxlT3JpZ2luID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmZpbGVPcmlnaW5UYWJsZS5maW5kKGYgPT4gZgogICAgICAuaWQgPT09IHBhcnNlSW50KGZpbGVPcmlnaW5JZCkpOwogICAgaWYgKCFmaWxlT3JpZ2luKSByZXR1cm47CgogICAgY29uc3QgYWxsUnVsZXNGb3JGaWxlID0gdGhpcy5ibGFzdFJhZGl1c0Rh", - "dGEua2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlCiAgICAgIC5maWx0ZXIociA9PiByLm9yaWdpbj8uZmlsZU9yaWdpbklkID09PSBmaWxlT3JpZ2luLmlkKTsKICAgIGxldCBydWxlcyA9IGFsbFJ1bGVzRm9yRmlsZTsKCiAgICBjb25zdCBsZW5zID0gUmVwb3J0QXBwLnN0YXRlLmZpbHRlcnMua2VlcFJ1bGVzWzBdOwogICAgaWYgKGxlbnMpIHsKICAgICAgcnVsZXMgPSBSZXBvcnRBcHAuYXBwbHlLZWVwUnVsZUxlbnMocnVsZXMsIGxlbnMpOwogICAgfQoKICAgIGNvbnN0IGlzSWRlbnRpY2FsTGVucyA9IGxlbnMgPT09ICJJZGVudGljYWwiOwogICAgY29uc3QgaXNTdWJzdW1lZExlbnMgPSBsZW5zID09PSAiU3Vic3VtZWQiOwoKICAgIGlmIChpc0lkZW50aWNhbExlbnMgfHwgaXNTdWJzdW1lZExlbnMpIHsKICAgICAgcnVsZXNIZWFkZXIuaW5uZXJIVE1MID0gYAogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWxlZnQgYmctZ3JheS01MCB6LTMwIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDYwMHB4OyBtaW4td2lkdGg6IDYwMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPlJ1bGU8L3RoPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1sZWZ0IGJnLWdyYXktNTAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEwMCU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIo", - "LS1ib3JkZXItY29sb3IpOyI+JHtpc0lkZW50aWNhbExlbnMgPyAnSWRlbnRpY2FsIFJ1bGVzJyA6ICdTdWJzdW1lZCBCeSd9PC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIGA7CiAgICB9IGVsc2UgewogICAgICBydWxlc0hlYWRlci5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9InRleHQtbGVmdCBiZy1ncmF5LTUwIHotMzAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogNjAwcHg7IG1pbi13aWR0aDogNjAwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyI+UnVsZTwvdGg+CiAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjQiIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ij5LZXB0IEl0ZW1zIChoaWdoZXIgaXMgd29yc2UpPC90aD4KICAgICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY29sc3Bhbj0iMyIgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBiZy1ncmF5LTUwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogMTUwcHg7IG1pbi13aWR0aDogMTUwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyI+UHJvcGVydGllcyBi", - "bG9ja2VkIGJ5IHJ1bGU8L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogMTAwcHg7IG1pbi13aWR0aDogMTAwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyI+VG90YWw8L3RoPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPkNsYXNzZXM8L3RoPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPkZpZWxkczwvdGg+CiAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRl", - "eHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogMTAwcHg7IG1pbi13aWR0aDogMTAwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyI+TWV0aG9kczwvdGg+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICBgOwogICAgfQoKICAgIGNvbnN0IGxpdmVDbGFzc2VzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbz8ubGl2ZUNsYXNzQ291bnQgfHwgMDsKICAgIGNvbnN0IGxpdmVGaWVsZHMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uYnVpbGRJbmZvPy5saXZlRmllbGRDb3VudCB8fCAwOwogICAgY29uc3QgbGl2ZU1ldGhvZHMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uYnVpbGRJbmZvPy5saXZlTWV0aG9kQ291bnQgfHwgMDsKCiAgICBjb25zdCBtYXRjaGVkQ2xhc3NlcyA9IG5ldyBTZXQoKTsKICAgIGNvbnN0IG1hdGNoZWRGaWVsZHMgPSBuZXcgU2V0KCk7CiAgICBjb25zdCBtYXRjaGVkTWV0aG9kcyA9IG5ldyBTZXQoKTsKCiAgICBhbGxSdWxlc0ZvckZpbGUuZm9yRWFjaChydWxlID0+IHsKICAgICAgY29uc3QgYnIgPSBydWxlLmJsYXN0UmFkaXVzIHx8IHt9OwogICAgICAoYnIuY2xhc3NCbGFzdFJhZGl1cyB8fCBbXSkuZm9yRWFjaChpZCA9PiBtYXRjaGVkQ2xhc3Nlcy5hZGQoaWQpKTsKICAgICAgKGJyLmZpZWxkQmxhc3RSYWRpdXMgfHwgW10pLmZvckVhY2goaWQgPT4gbWF0Y2hlZEZp", - "ZWxkcy5hZGQoaWQpKTsKICAgICAgKGJyLm1ldGhvZEJsYXN0UmFkaXVzIHx8IFtdKS5mb3JFYWNoKGlkID0+IG1hdGNoZWRNZXRob2RzLmFkZChpZCkpOwogICAgfSk7CgogICAgY29uc3QgcmVuZGVyTWF0Y2hDZWxsID0gKGNvdW50LCB0b3RhbCwgYm9yZGVyTGVmdCA9IHRydWUpID0+IHsKICAgICAgY29uc3QgcGVyYyA9IHRvdGFsID4gMCA/IChjb3VudCAvIHRvdGFsICogMTAwKSA6IDA7CiAgICAgIGNvbnN0IGNvbG9yQ2xhc3MgPSBVSVV0aWxzLmdldE1hdGNoQ2xhc3MocGVyYyk7CiAgICAgIGNvbnN0IGJsID0gYm9yZGVyTGVmdCA/ICJib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIDogIiI7CiAgICAgIHJldHVybiBgCiAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgJHtibH0iIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJvbGQgJHtjb2xvckNsYXNzfSI+JHtwZXJjLnRvRml4ZWQoMSl9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMSI+JHtjb3VudH08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICBgOwogICAgfTsKCiAg", - "ICBpbXBhY3RCb2R5LmlubmVySFRNTCA9IGAKICAgICAgICAgIDx0ciBjbGFzcz0iYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIj4KICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwobWF0Y2hlZENsYXNzZXMuc2l6ZSwgbGl2ZUNsYXNzZXMsIGZhbHNlKX0KICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwobWF0Y2hlZEZpZWxkcy5zaXplLCBsaXZlRmllbGRzKX0KICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwobWF0Y2hlZE1ldGhvZHMuc2l6ZSwgbGl2ZU1ldGhvZHMpfQogICAgICAgICAgPC90cj4KICAgICAgICBgOwoKICAgIHJ1bGVzQm9keS5pbm5lckhUTUwgPSBydWxlcy5tYXAocnVsZSA9PiB7CiAgICAgIGlmIChpc0lkZW50aWNhbExlbnMgfHwgaXNTdWJzdW1lZExlbnMpIHsKICAgICAgICBjb25zdCBsaXN0ID0gaXNJZGVudGljYWxMZW5zID8gcnVsZS5pZGVudGljYWxSdWxlcyA6IHJ1bGUKICAgICAgICAgIC5zdWJzdW1lZEJ5UnVsZXM7CiAgICAgICAgY29uc3Qgb3RoZXJSdWxlc0h0bWwgPSAobGlzdCB8fCBbXSkubWFwKG90aGVyID0+IGAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAgaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyIG1iLTEiIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBBcHAuc2hvd0RldGFpbHNWaWV3KCcke290aGVyLmlkfScpIj4KICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUt", - "d3JhcDsgbWFyZ2luOiAwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7Ij4ke2VzY2FwZUhUTUwob3RoZXIuc291cmNlKX08L3ByZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCkuam9pbigiIik7CgogICAgICAgIHJldHVybiBgCiAgICAgICAgICAgICAgPHRyIGNsYXNzPSJib3JkZXItdCBib3JkZXItZ3JheS0yMDAgaG92ZXI6YmctZ3JheS01MCBjdXJzb3ItcG9pbnRlciIgb25jbGljaz0iQXBwLnNob3dEZXRhaWxzVmlldygnJHtydWxlLmlkfScpIj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RpY2t5LW5hbWUgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCBob3Zlcjp1bmRlcmxpbmUiIHRpdGxlPSIke2VzY2FwZUhUTUwocnVsZS5zb3VyY2UpfSIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA2MDBweDsgbWluLXdpZHRoOiA2MDBweDsiPgogICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1tb25vKTsgZm9udC1zaXplOiAwLjgxMjVyZW07IG1hcmdpbjogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7Ij4ke2VzY2FwZUhUTUwocnVsZS5zb3VyY2UpfTwvcHJlPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEwMCU7Ij4KICAg", - "ICAgICAgICAgICAgICAgJHtvdGhlclJ1bGVzSHRtbCB8fCAnPHNwYW4gY2xhc3M9InRleHQtZ3JheS00MDAgaXRhbGljIj5Ob25lPC9zcGFuPid9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIGA7CiAgICAgIH0KCiAgICAgIGNvbnN0IGJyID0gcnVsZS5ibGFzdFJhZGl1cyB8fCB7fTsKICAgICAgY29uc3QgYyA9IChici5jbGFzc0JsYXN0UmFkaXVzIHx8IFtdKS5sZW5ndGg7CiAgICAgIGNvbnN0IGYgPSAoYnIuZmllbGRCbGFzdFJhZGl1cyB8fCBbXSkubGVuZ3RoOwogICAgICBjb25zdCBtID0gKGJyLm1ldGhvZEJsYXN0UmFkaXVzIHx8IFtdKS5sZW5ndGg7CgogICAgICBjb25zdCBjb25zdHJhaW50c01hcCA9IGdldENvbnN0cmFpbnRzTWFwKHRoaXMuYmxhc3RSYWRpdXNEYXRhKTsKICAgICAgY29uc3QgY29uc3RyYWludHMgPSBjb25zdHJhaW50c01hcC5nZXQocnVsZS5jb25zdHJhaW50c0lkKSB8fCBbXTsKICAgICAgY29uc3QgZ2V0VGFnID0gKGMsIGxhYmVsKSA9PiB7CiAgICAgICAgY29uc3QgaXNSZXN0cmljdGVkID0gY29uc3RyYWludHMuaW5jbHVkZXMoYyk7CiAgICAgICAgaWYgKCFpc1Jlc3RyaWN0ZWQpIHJldHVybiAiIjsKICAgICAgICBjb25zdCBjb2xvciA9ICJ2YXIoLS10ZXh0LXJlZC02MDApIjsKICAgICAgICBjb25zdCBiZ0NvbG9yID0gInZhcigtLWJnLXJlZC1saWdodCkiOwogICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9ImltcGFjdC10", - "YWciIHN0eWxlPSJjb2xvcjogJHtjb2xvcn07IGJhY2tncm91bmQtY29sb3I6ICR7YmdDb2xvcn07IGJvcmRlci1jb2xvcjogJHtjb2xvcn07IG9wYWNpdHk6IDAuODsiPiR7bGFiZWx9PC9zcGFuPmA7CiAgICAgIH07CgogICAgICBjb25zdCBpbXBhY3RDZWxsID0gYAogICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDUwcHg7IG1pbi13aWR0aDogNTBweDsiPiR7Z2V0VGFnKCdET05UX09CRlVTQ0FURScsICdPQkZVU0NBVEUnKX08L3RkPgogICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTEwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDUwcHg7IG1pbi13aWR0aDogNTBweDsiPiR7Z2V0VGFnKCdET05UX09QVElNSVpFJywgJ09QVElNSVpFJyl9PC90ZD4KICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0xMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9TSFJJTksnLCAnU0hSSU5LJyl9PC90ZD4KICAgICAgICAgIGA7CgogICAgICBjb25zdCByZW5kZXJNYXRjaENlbGwgPSAoY291bnQsIHRvdGFsLCBib3JkZXJMZWZ0ID0gdHJ1ZSkgPT4gewogICAgICAgIGNvbnN0IHBlcmMgPSB0b3RhbCA+IDAgPyAoY291", - "bnQgLyB0b3RhbCAqIDEwMCkgOiAwOwogICAgICAgIGNvbnN0IGNvbG9yQ2xhc3MgPSBVSVV0aWxzLmdldE1hdGNoQ2xhc3MocGVyYyk7CiAgICAgICAgY29uc3QgYmwgPSBib3JkZXJMZWZ0ID8gImJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgOiAiIjsKICAgICAgICByZXR1cm4gYAogICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgJHtibH0iIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogMTAwcHg7IG1pbi13aWR0aDogMTAwcHg7Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJvbGQgJHtjb2xvckNsYXNzfSI+JHtwZXJjLnRvRml4ZWQoMSl9JTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCBtdC0xIj4ke2NvdW50fTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIGA7CiAgICAgIH07CgogICAgICBjb25zdCB0b3RhbExpdmUgPSBnZXRMaXZlSXRlbUNvdW50KHRoaXMuYmxhc3RSYWRpdXNEYXRhKTsKICAgICAgY29uc3QgbGl2ZUNsYXNzZXMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uYnVpbGRJbmZvCiAgICAgICAgPy5saXZlQ2xhc3NDb3VudCB8", - "fCAwOwogICAgICBjb25zdCBsaXZlRmllbGRzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbwogICAgICAgID8ubGl2ZUZpZWxkQ291bnQgfHwgMDsKICAgICAgY29uc3QgbGl2ZU1ldGhvZHMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uYnVpbGRJbmZvCiAgICAgICAgPy5saXZlTWV0aG9kQ291bnQgfHwgMDsKCiAgICAgIHJldHVybiBgCiAgICAgICAgICAgIDx0ciBjbGFzcz0iYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktNTAgY3Vyc29yLXBvaW50ZXIiIG9uY2xpY2s9IkFwcC5zaG93RGV0YWlsc1ZpZXcoJyR7cnVsZS5pZH0nKSI+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGlja3ktbmFtZSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIGhvdmVyOnVuZGVybGluZSIgdGl0bGU9IiR7ZXNjYXBlSFRNTChydWxlLnNvdXJjZSl9IiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDYwMHB4OyBtaW4td2lkdGg6IDYwMHB4OyI+CiAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1tb25vKTsgZm9udC1zaXplOiAwLjgxMjVyZW07IG1hcmdpbjogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7Ij4ke2VzY2FwZUhUTUwocnVsZS5zb3VyY2UpfTwvcHJlPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoYyArIGYgKyBtLCB0b3RhbExpdmUsIHRy", - "dWUpfQogICAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKGMsIGxpdmVDbGFzc2VzKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChmLCBsaXZlRmllbGRzKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChtLCBsaXZlTWV0aG9kcyl9CiAgICAgICAgICAgICAgJHtpbXBhY3RDZWxsfQogICAgICAgICAgICA8L3RyPgogICAgICAgICAgYDsKICAgIH0pLmpvaW4oIiIpOwoKICAgIGNvbnN0IGZpbGVPcmlnaW5OYW1lID0gZm9ybWF0TWF2ZW5Db29yZGluYXRlKGZpbGVPcmlnaW4KICAgICAgLm1hdmVuQ29vcmRpbmF0ZSkgfHwgZmlsZU9yaWdpbi5maWxlbmFtZTsKICAgIHRoaXMudXBkYXRlRmlsZURldGFpbHNCcmVhZGNydW1icyhmaWxlT3JpZ2luTmFtZSk7CiAgfSwKCiAgdXBkYXRlRmlsZURldGFpbHNCcmVhZGNydW1icyhmaWxlbmFtZSkgewogICAgY29uc3QgYmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZS1kZXRhaWxzLWJyZWFkY3J1bWJzIik7CiAgICBpZiAoIWJjKSByZXR1cm47CgogICAgY29uc3QgbGlua0NsYXNzID0gImJyZWFkY3J1bWItcGlsbCI7CiAgICBjb25zdCB0ZXh0Q2xhc3MgPSAiYnJlYWRjcnVtYi10ZXh0IjsKICAgIGNvbnN0IHNlcCA9ICc8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTMwMCBteC0xIj4vPC9zcGFuPic7CgogICAgYmMuaW5uZXJIVE1MID0gYAogICAgICAgICAgPHNwYW4gY2xhc3M9IiR7bGlua0NsYXNzfSIgaWQ9ImZpbGUtZGV0YWlscy1i", - "YWNrLXRvLXN1bW1hcnkiPlByb2plY3Q8L3NwYW4+CiAgICAgICAgICAke3NlcH0KICAgICAgICAgIDxzcGFuIGNsYXNzPSIke3RleHRDbGFzc30iPiR7ZXNjYXBlSFRNTChmaWxlbmFtZSl9PC9zcGFuPgogICAgICAgIGA7CgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy1iYWNrLXRvLXN1bW1hcnkiKS5hZGRFdmVudExpc3RlbmVyKAogICAgICAiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgdGhpcy5zaG93UmVwb3J0VmlldygpOwogICAgICB9KTsKICB9LAoKICB1cGRhdGVEZXRhaWxzQnJlYWRjcnVtYnMoZmlsZW5hbWUsIGZpbGVPcmlnaW5JZCkgewogICAgY29uc3QgYmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1icmVhZGNydW1icyIpOwogICAgaWYgKCFiYykgcmV0dXJuOwoKICAgIGNvbnN0IGxpbmtDbGFzcyA9ICJicmVhZGNydW1iLXBpbGwiOwogICAgY29uc3QgdGV4dENsYXNzID0gImJyZWFkY3J1bWItdGV4dCI7CiAgICBjb25zdCBzZXAgPSAnPHNwYW4gY2xhc3M9InRleHQtZ3JheS0zMDAgbXgtMSI+Lzwvc3Bhbj4nOwoKICAgIGxldCBodG1sID0gYAogICAgICAgICAgPHNwYW4gY2xhc3M9IiR7bGlua0NsYXNzfSIgaWQ9ImRldGFpbHMtYmFjay10by1zdW1tYXJ5Ij5Qcm9qZWN0PC9zcGFuPgogICAgICAgICAgJHtzZXB9YDsKCiAgICBpZiAoZmlsZW5hbWUgJiYgZmlsZU9yaWdpbklkICE9PSB1bmRlZmluZWQpIHsKICAgICAgaHRtbCArPSBgCiAgICAgICAg", - "ICAgIDxzcGFuIGNsYXNzPSIke2xpbmtDbGFzc30iIGlkPSJkZXRhaWxzLWJhY2stdG8tZmlsZSI+JHtlc2NhcGVIVE1MKGZpbGVuYW1lKX08L3NwYW4+CiAgICAgICAgICAgICR7c2VwfWA7CiAgICB9CgogICAgaHRtbCArPSBgPHNwYW4gY2xhc3M9IiR7dGV4dENsYXNzfSI+S2VlcCBSdWxlIERldGFpbHM8L3NwYW4+YDsKICAgIGJjLmlubmVySFRNTCA9IGh0bWw7CgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtYmFjay10by1zdW1tYXJ5IikuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgImNsaWNrIiwgKCkgPT4gewogICAgICAgIHRoaXMuc2hvd1JlcG9ydFZpZXcoKTsKICAgICAgfSk7CgogICAgaWYgKGZpbGVuYW1lICYmIGZpbGVPcmlnaW5JZCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXRhaWxzLWJhY2stdG8tZmlsZSIpLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICAgImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5zaG93RmlsZURldGFpbHNWaWV3KGZpbGVPcmlnaW5JZCk7CiAgICAgICAgfSk7CiAgICB9CiAgfSwKCiAgYXN5bmMgbG9hZFByb3RvRGF0YSgpIHsKICAgIGNvbnN0IGVtYmVkZGVkUHJvdG9TY2hlbWFTb3VyY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmxhc3RyYWRpdXMtcHJvdG8nKTsKICAgIGNvbnN0IGVtYmVkZGVkUHJvdG9EYXRhU291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYXN0cmFkaXVz", - "LWRhdGEnKTsKCiAgICB0cnkgewogICAgICBjb25zdCByb290ID0gcHJvdG9idWYucGFyc2UoZW1iZWRkZWRQcm90b1NjaGVtYVNvdXJjZS50ZXh0Q29udGVudCkucm9vdDsKICAgICAgY29uc3QgZGF0YSA9IGVtYmVkZGVkUHJvdG9EYXRhU291cmNlLnRleHRDb250ZW50LnRyaW0oKTsKICAgICAgY29uc3QgYnl0ZXMgPSBVaW50OEFycmF5LmZyb20oYXRvYihkYXRhKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpOwogICAgICBjb25zdCBCbGFzdFJhZGl1c0NvbnRhaW5lciA9IHJvb3QubG9va3VwVHlwZSgKICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMucjguYmxhc3RyYWRpdXMucHJvdG8uQmxhc3RSYWRpdXNDb250YWluZXIiKTsKICAgICAgY29uc3QgbWVzc2FnZSA9IEJsYXN0UmFkaXVzQ29udGFpbmVyLmRlY29kZShieXRlcyk7CiAgICAgIHRoaXMuYmxhc3RSYWRpdXNEYXRhID0gQmxhc3RSYWRpdXNDb250YWluZXIudG9PYmplY3QobWVzc2FnZSwgewogICAgICAgIGxvbmdzOiBTdHJpbmcsCiAgICAgICAgZW51bXM6IFN0cmluZywKICAgICAgICBieXRlczogU3RyaW5nLAogICAgICAgIGRlZmF1bHRzOiB0cnVlLAogICAgICAgIGFycmF5czogdHJ1ZSwKICAgICAgICBvYmplY3RzOiB0cnVlLAogICAgICAgIG9uZW9mczogdHJ1ZQogICAgICB9KTsKCiAgICAgIC8vIEV4dHJhY3QgYW5kIHN0cmlwIGNvbW1vbiBwcmVmaXggZnJvbSBmaWxlIG5hbWVzCiAgICAgIGlmICh0aGlzLmJsYXN0UmFkaXVzRGF0YS5maWxlT3Jp", - "Z2luVGFibGUpIHsKICAgICAgICBjb25zdCBmaWxlbmFtZXMgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YS5maWxlT3JpZ2luVGFibGUubWFwKGYgPT4gZgogICAgICAgICAgLmZpbGVuYW1lKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgY29uc3QgY29tbW9uUHJlZml4ID0gVUlVdGlscy5maW5kQ29tbW9uUHJlZml4KGZpbGVuYW1lcyk7CiAgICAgICAgaWYgKGNvbW1vblByZWZpeCkgewogICAgICAgICAgdGhpcy5ibGFzdFJhZGl1c0RhdGEuZmlsZU9yaWdpblRhYmxlLmZvckVhY2goZiA9PiB7CiAgICAgICAgICAgIGlmIChmLmZpbGVuYW1lICYmIGYuZmlsZW5hbWUuc3RhcnRzV2l0aChjb21tb25QcmVmaXgpKSB7CiAgICAgICAgICAgICAgZi5maWxlbmFtZSA9IGYuZmlsZW5hbWUuc3Vic3RyaW5nKGNvbW1vblByZWZpeC5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNvbnNvbGUubG9nKCJQcm90b2J1ZiBkYXRhIGxvYWRlZCBzdWNjZXNzZnVsbHk6IiwgdGhpcwogICAgICAgIC5ibGFzdFJhZGl1c0RhdGEpOwoKICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXIgbm93IHRoYXQgZGF0YSBpcyBhdmFpbGFibGUKICAgICAgUmVwb3J0QXBwLnJlbmRlcigpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIHByb3RvYnVmIGRhdGE6IiwgZXJyKTsKICAgIH0KICB9LAp9OwoKLyogPT09PT09PT09PT09PT09PT09", - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgUkVQT1JUIEFQUCAoR3JpZC9MaXN0IFZpZXcpCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgpjb25zdCBSZXBvcnRBcHAgPSB7CiAgc3RhdGU6IHsKICAgIGN1cnJlbnRWaWV3OiBDT05TVEFOVFMuVklFV1MuTU9EVUxFUywKICAgIGZpbHRlcnM6IHsKICAgICAga2VlcFJ1bGVzOiBbXSwKICAgICAgY2xhc3NlczogW10sCiAgICAgIGZpZWxkczogW10sCiAgICAgIG1ldGhvZHM6IFtdCiAgICB9LAogICAgYWN0aXZlRmlsdGVyQ2hpcHM6IFtdLAogICAgc29ydDogewogICAgICBieTogIm1hdGNoZXMudG90YWwiLAogICAgICBvcmRlcjogImRlc2MiCiAgICB9LAogICAgZHJpbGxDb250ZXh0OiB7CiAgICAgIG1vZHVsZTogbnVsbCwKICAgICAgcGtnOiBudWxsLAogICAgICBmaWxlT3JpZ2luSWQ6IG51bGwKICAgIH0sIC8vIE5hdmlnYXRpb24gcGF0aAogICAgc3RhdHNWaXNpYmxlOiB0cnVlCiAgfSwKICBlbGVtZW50czoge30sCgogIGluaXQoKSB7CiAgICB0aGlzLmNhY2hlRE9NRWxlbWVudHMoKTsKICAgIHRoaXMucG9wdWxhdGVIZWFkZXJJbmZvKCk7CiAgICB0aGlzLnBvcHVsYXRlRmlsdGVycygpOwogICAgdGhpcy5iaW5kRXZlbnRzKCk7CiAgICB0aGlzLnJlbmRlcigpOwogIH0sCgogIGNhY2hlRE9NRWxlbWVu", - "dHMoKSB7CiAgICBjb25zdCBnZXRCeUlkID0gKGlkKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB0aGlzLmVsZW1lbnRzID0gewogICAgICBtb2RDaGlwOiBnZXRCeUlkKCJtb2QtY2hpcC1jb250YWluZXIiKSwKICAgICAgbW9kQnRuOiBnZXRCeUlkKCJtb2QtZmlsdGVyLWJ0biIpLAogICAgICBtb2REcm9wZG93bjogZ2V0QnlJZCgibW9kLWRyb3Bkb3duIiksCiAgICAgIG1vZFRleHQ6IGdldEJ5SWQoIm1vZC1maWx0ZXItdGV4dCIpLAogICAgICBjbHNDaGlwOiBnZXRCeUlkKCJjbHMtY2hpcC1jb250YWluZXIiKSwKICAgICAgY2xzQnRuOiBnZXRCeUlkKCJjbHMtZmlsdGVyLWJ0biIpLAogICAgICBjbHNEcm9wZG93bjogZ2V0QnlJZCgiY2xzLWRyb3Bkb3duIiksCiAgICAgIGNsc1RleHQ6IGdldEJ5SWQoImNscy1maWx0ZXItdGV4dCIpLAogICAgICBmaWVsZENoaXA6IGdldEJ5SWQoImZpZWxkLWNoaXAtY29udGFpbmVyIiksCiAgICAgIGZpZWxkQnRuOiBnZXRCeUlkKCJmaWVsZC1maWx0ZXItYnRuIiksCiAgICAgIGZpZWxkRHJvcGRvd246IGdldEJ5SWQoImZpZWxkLWRyb3Bkb3duIiksCiAgICAgIGZpZWxkVGV4dDogZ2V0QnlJZCgiZmllbGQtZmlsdGVyLXRleHQiKSwKICAgICAgbWV0aG9kQ2hpcDogZ2V0QnlJZCgibWV0aG9kLWNoaXAtY29udGFpbmVyIiksCiAgICAgIG1ldGhvZEJ0bjogZ2V0QnlJZCgibWV0aG9kLWZpbHRlci1idG4iKSwKICAgICAgbWV0aG9kRHJvcGRvd246IGdldEJ5", - "SWQoIm1ldGhvZC1kcm9wZG93biIpLAogICAgICBtZXRob2RUZXh0OiBnZXRCeUlkKCJtZXRob2QtZmlsdGVyLXRleHQiKSwKICAgICAgYWRkRmlsdGVyQ29udGFpbmVyOiBnZXRCeUlkKCJhZGQtZmlsdGVyLWNvbnRhaW5lciIpLAogICAgICBhZGRGaWx0ZXJCdG46IGdldEJ5SWQoImFkZC1maWx0ZXItYnRuIiksCiAgICAgIGFkZEZpbHRlckRyb3Bkb3duOiBnZXRCeUlkKCJhZGQtZmlsdGVyLWRyb3Bkb3duIiksCiAgICAgIGFkZEZpbHRlckxpc3Q6IGdldEJ5SWQoImFkZC1maWx0ZXItbGlzdCIpLAogICAgICBsZW5zRmlsdGVyQ29udGFpbmVyOiBnZXRCeUlkKCJsZW5zLWZpbHRlci1jb250YWluZXIiKSwKICAgICAgbGVuc0ZpbHRlckJ0bjogZ2V0QnlJZCgibGVucy1maWx0ZXItYnRuIiksCiAgICAgIGxlbnNGaWx0ZXJEcm9wZG93bjogZ2V0QnlJZCgibGVucy1maWx0ZXItZHJvcGRvd24iKSwKICAgICAgbGVuc0ZpbHRlckxpc3Q6IGdldEJ5SWQoImxlbnMtZmlsdGVyLWxpc3QiKSwKICAgICAgZ3JwQnRuOiBnZXRCeUlkKCJncm91cC1ieS1idG4iKSwKICAgICAgZ3JwRHJvcGRvd246IGdldEJ5SWQoImdyb3VwLWJ5LWRyb3Bkb3duIiksCiAgICAgIGdycFRleHQ6IGdldEJ5SWQoImdyb3VwLWJ5LXRleHQiKSwKICAgICAgZ3JwQ29udGFpbmVyOiBnZXRCeUlkKCJncm91cC1ieS1jb250YWluZXIiKSwKICAgICAgZ3JwTGlzdDogZ2V0QnlJZCgiZ3JvdXAtYnktbGlzdCIpLAogICAgICB0YWJsZUhlYWRlcnM6IGdldEJ5", - "SWQoInRhYmxlLWhlYWRlcnMiKSwKICAgICAgdGFibGVEYXRhOiBnZXRCeUlkKCJ0YWJsZS1kYXRhIiksCiAgICAgIHN0YXRzVGFibGVIZWFkZXJzOiBnZXRCeUlkKCJzdGF0cy10YWJsZS1oZWFkZXJzIiksCiAgICAgIHN0YXRzVGFibGVEYXRhOiBnZXRCeUlkKCJzdGF0cy10YWJsZS1kYXRhIiksCiAgICAgIHN0YXRzQ29udGFpbmVyOiBnZXRCeUlkKCJzdGF0cy1jb250YWluZXIiKSwKICAgICAgbWFpblRhYmxlOiBnZXRCeUlkKCJtYWluLXRhYmxlIiksCiAgICAgIHRvdGFsT2JmdXNjYXRpb246IGdldEJ5SWQoInRvdGFsLW9iZnVzY2F0aW9uIiksCiAgICAgIHRvdGFsT3B0aW1pemF0aW9uOiBnZXRCeUlkKCJ0b3RhbC1vcHRpbWl6YXRpb24iKSwKICAgICAgdG90YWxTaHJpbmtpbmc6IGdldEJ5SWQoInRvdGFsLXNocmlua2luZyIpLAogICAgfTsKICB9LAoKICBwb3B1bGF0ZUhlYWRlckluZm8oKSB7fSwKCiAgLyoqCiAgICogSW5pdGlhbGl6ZXMgYWxsIGZpbHRlcnMgKFZhcmlhbnRzLCBNb2R1bGVzLCBldGMuKQogICAqLwogIHBvcHVsYXRlRmlsdGVycygpIHsKICAgIC8vIC0tLSAxLiBEeW5hbWljIEZpbHRlcnMgKE1vZHVsZXMvUGFja2FnZXMvQ2xhc3NlcykgLS0tCiAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgfSwKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgaW4gTW9kdWxlL1BhY2thZ2UvQ2xhc3MgZHJvcGRvd25zIGJhc2VkIG9uIGRlcGVuZGVuY2llcy4KICAg", - "KiBlLmcuLCBTZWxlY3RpbmcgIk1vZHVsZSBBIiBmaWx0ZXJzIHRoZSBQYWNrYWdlIG9wdGlvbnMgdG8gb25seSB0aG9zZSBpbiBNb2R1bGUgQS4KICAgKi8KICB1cGRhdGVEeW5hbWljRmlsdGVycygpIHsKICAgIGNvbnN0IHsKICAgICAga2VlcFJ1bGVzLAogICAgICBjbGFzc2VzLAogICAgICBmaWVsZHMsCiAgICAgIG1ldGhvZHMKICAgIH0gPSB0aGlzLnN0YXRlLmZpbHRlcnM7CiAgICBjb25zdCBjaGlwcyA9IHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHM7CgogICAgLy8gLS0tIDEuIEtlZXAgUnVsZXMgTGVucyAtLS0KICAgIGNvbnN0IGtlZXBSdWxlT3B0aW9ucyA9IFt7CiAgICAgICAgbmFtZTogIjxiPklkZW50aWNhbDo8L2I+IFNob3cgcnVsZXMgdGhhdCBtYXRjaCB0aGUgc2FtZSBpdGVtcyBhcyBvdGhlciBydWxlcyIsCiAgICAgICAgdmFsdWU6ICJJZGVudGljYWwiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiPGI+U3Vic3VtZWQ6PC9iPiBTaG93IHJ1bGVzIHRoYXQgbWF0Y2ggYSBzdWJzZXQgb2YgdGhlIGl0ZW1zIG1hdGNoZWQgYnkgYW5vdGhlciBydWxlIiwKICAgICAgICB2YWx1ZTogIlN1YnN1bWVkIgogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIjxiPlVudXNlZDo8L2I+IFNob3cgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCBhbnl0aGluZyIsCiAgICAgICAgdmFsdWU6ICJVbnVzZWQiCiAgICAgIH0sCiAgICBdOwoKICAgIHRoaXMuZWxlbWVudHMubW9kRHJvcGRvd24uc3R5", - "bGUubWluV2lkdGggPSAiNTUwcHgiOwogICAgdGhpcy5lbGVtZW50cy5sZW5zRmlsdGVyRHJvcGRvd24uc3R5bGUubWluV2lkdGggPSAiNTUwcHgiOwogICAgVUlVdGlscy5idWlsZEFjdGlvbkRyb3Bkb3duKCJtb2QtZHJvcGRvd24iLCBrZWVwUnVsZU9wdGlvbnMsIGtlZXBSdWxlcywKICAgICgpID0+IHsKICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgfSwgZmFsc2UsIGZhbHNlKTsKCiAgICBVSVV0aWxzLmJ1aWxkQWN0aW9uRHJvcGRvd24oImxlbnMtZmlsdGVyLWxpc3QiLCBrZWVwUnVsZU9wdGlvbnMsCiAgICAgIGtlZXBSdWxlcywgKCkgPT4gewogICAgICAgIGlmICghdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcy5pbmNsdWRlcygibW9kdWxlIikpIHsKICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMucHVzaCgibW9kdWxlIik7CiAgICAgICAgfQogICAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24odGhpcy5lbGVtZW50cy5sZW5zRmlsdGVyRHJvcGRvd24sIHRoaXMuZWxlbWVudHMKICAgICAgICAgIC5sZW5zRmlsdGVyQnRuKTsKICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgfSwgZmFsc2UsIGZhbHNlKTsKCiAgICBVSVV0aWxzLnJlbmRlckNoaXBUZXh0KHRoaXMuZWxlbWVudHMubW9kVGV4dCwgVUlVdGlscy5nZXRGaWx0ZXJMYWJlbCgKICAgICAg", - "ICAiS2VlcCBSdWxlcyIsIGtlZXBSdWxlcywga2VlcFJ1bGVPcHRpb25zLmxlbmd0aCwga2VlcFJ1bGVPcHRpb25zKSwKICAgICAgIm1vZHVsZSIsIHRydWUpOwogICAgVUlVdGlscy50b2dnbGVWaXNpYmlsaXR5KHRoaXMuZWxlbWVudHMubW9kQ2hpcCwgY2hpcHMuaW5jbHVkZXMoIm1vZHVsZSIpKTsKCiAgICAvLyAtLS0gMi4gQ2xhc3NlcyBGaWx0ZXIgLS0tCiAgICBjb25zdCB7CiAgICAgIG9wdGlvbnM6IGNsYXNzT3B0aW9ucywKICAgICAgdG90YWw6IHRvdGFsQ2xhc3NlcwogICAgfSA9IHRoaXMuZ2V0S2VwdENsYXNzZXMoKTsKICAgIFVJVXRpbHMuYnVpbGRBY3Rpb25Ecm9wZG93bigiY2xzLWRyb3Bkb3duIiwgY2xhc3NPcHRpb25zLCBjbGFzc2VzLCAoKSA9PiB7CiAgICAgIHRoaXMudXBkYXRlRHluYW1pY0ZpbHRlcnMoKTsKICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0sIHRydWUsIHRydWUsIHRvdGFsQ2xhc3NlcywgImNsYXNzZXMiLCAodGVybSkgPT4gewogICAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgICBpZiAoIWJyRGF0YSB8fCAhYnJEYXRhLmtlcHRDbGFzc0luZm9UYWJsZSkgcmV0dXJuIHsKICAgICAgICBvcHRpb25zOiBbXSwKICAgICAgICB0b3RhbDogMAogICAgICB9OwogICAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgICBickRhdGEudHlwZVJlZmVyZW5jZVRhYmxlLmZvckVhY2godCA9PiB0eXBlUmVmTWFwLnNldCh0LmlkLCB0CiAgICAg", - "ICAgLmphdmFEZXNjcmlwdG9yKSk7CgogICAgICBjb25zdCBmaWx0ZXJlZCA9IGJyRGF0YS5rZXB0Q2xhc3NJbmZvVGFibGUuZmlsdGVyKGMgPT4gewogICAgICAgIGNvbnN0IG5hbWUgPSBmb3JtYXREZXNjcmlwdG9yKHR5cGVSZWZNYXAuZ2V0KGMKICAgICAgICAgIC5jbGFzc1JlZmVyZW5jZUlkKSk7CiAgICAgICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHJlc3VsdHMgPSBmaWx0ZXJlZC5zbGljZSgwLCAxMDAwKS5tYXAoYyA9PiB7CiAgICAgICAgY29uc3QgbmFtZSA9IGVzY2FwZUhUTUwoZm9ybWF0RGVzY3JpcHRvcih0eXBlUmVmTWFwLmdldChjCiAgICAgICAgICAuY2xhc3NSZWZlcmVuY2VJZCkpKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbmFtZSwKICAgICAgICAgIHZhbHVlOiBjLmlkCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgb3B0aW9uczogcmVzdWx0cywKICAgICAgICB0b3RhbDogZmlsdGVyZWQubGVuZ3RoCiAgICAgIH07CiAgICB9KTsKICAgIFVJVXRpbHMucmVuZGVyQ2hpcFRleHQodGhpcy5lbGVtZW50cy5jbHNUZXh0LCBVSVV0aWxzLmdldEZpbHRlckxhYmVsKAogICAgICAiQ2xhc3NlcyIsIGNsYXNzZXMsIHRvdGFsQ2xhc3NlcywgY2xhc3NPcHRpb25zKSwgImNsYXNzIiwgdHJ1ZSk7CiAgICBVSVV0aWxzLnRvZ2dsZVZpc2liaWxpdHkodGhpcy5lbGVtZW50cy5jbHNDaGlwLCBj", - "aGlwcy5pbmNsdWRlcygiY2xhc3MiKSk7CgogICAgLy8gLS0tIDMuIEZpZWxkcyBGaWx0ZXIgLS0tCiAgICBjb25zdCB7CiAgICAgIG9wdGlvbnM6IGZpZWxkT3B0aW9ucywKICAgICAgdG90YWw6IHRvdGFsRmllbGRzCiAgICB9ID0gdGhpcy5nZXRLZXB0RmllbGRzKCk7CiAgICBVSVV0aWxzLmJ1aWxkQWN0aW9uRHJvcGRvd24oImZpZWxkLWRyb3Bkb3duIiwgZmllbGRPcHRpb25zLCBmaWVsZHMsCiAgKCkgPT4gewogICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgIHRoaXMucmVuZGVyKCk7CiAgICB9LCB0cnVlLCB0cnVlLCB0b3RhbEZpZWxkcywgImZpZWxkcyIsICh0ZXJtKSA9PiB7CiAgICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICAgIGlmICghYnJEYXRhIHx8ICFickRhdGEua2VwdEZpZWxkSW5mb1RhYmxlKSByZXR1cm4gewogICAgICAgIG9wdGlvbnM6IFtdLAogICAgICAgIHRvdGFsOiAwCiAgICAgIH07CiAgICAgIGNvbnN0IHR5cGVSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICAgIGJyRGF0YS50eXBlUmVmZXJlbmNlVGFibGUuZm9yRWFjaCh0ID0+IHR5cGVSZWZNYXAuc2V0KHQuaWQsIHQKICAgICAgICAuamF2YURlc2NyaXB0b3IpKTsKICAgICAgY29uc3QgZmllbGRSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICAgIGJyRGF0YS5maWVsZFJlZmVyZW5jZVRhYmxlLmZvckVhY2goZiA9PiBmaWVsZFJlZk1hcC5zZXQoZi5pZCwgZikpOwoKICAgICAgY29uc3QgZmls", - "dGVyZWQgPSBickRhdGEua2VwdEZpZWxkSW5mb1RhYmxlLmZpbHRlcihmID0+IHsKICAgICAgICBjb25zdCBmaWVsZFJlZiA9IGZpZWxkUmVmTWFwLmdldChmLmZpZWxkUmVmZXJlbmNlSWQpOwogICAgICAgIGNvbnN0IG5hbWUgPSBmb3JtYXRGaWVsZE5hbWUoZmllbGRSZWYsIGJyRGF0YSwgdHlwZVJlZk1hcCk7CiAgICAgICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHJlc3VsdHMgPSBmaWx0ZXJlZC5zbGljZSgwLCAxMDAwKS5tYXAoZiA9PiB7CiAgICAgICAgY29uc3QgZmllbGRSZWYgPSBmaWVsZFJlZk1hcC5nZXQoZi5maWVsZFJlZmVyZW5jZUlkKTsKICAgICAgICBjb25zdCBuYW1lID0gZXNjYXBlSFRNTChmb3JtYXRGaWVsZE5hbWUoZmllbGRSZWYsIGJyRGF0YSwKICAgICAgICAgIHR5cGVSZWZNYXApKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbmFtZSwKICAgICAgICAgIHZhbHVlOiBmLmlkCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgb3B0aW9uczogcmVzdWx0cywKICAgICAgICB0b3RhbDogZmlsdGVyZWQubGVuZ3RoCiAgICAgIH07CiAgICB9KTsKICAgIFVJVXRpbHMucmVuZGVyQ2hpcFRleHQodGhpcy5lbGVtZW50cy5maWVsZFRleHQsIFVJVXRpbHMuZ2V0RmlsdGVyTGFiZWwoCiAgICAgICJGaWVsZHMiLCBmaWVsZHMsIHRvdGFsRmllbGRzLCBmaWVsZE9wdGlvbnMpLCAiZmllbGQiLCB0", - "cnVlKTsKICAgIFVJVXRpbHMudG9nZ2xlVmlzaWJpbGl0eSh0aGlzLmVsZW1lbnRzLmZpZWxkQ2hpcCwgY2hpcHMuaW5jbHVkZXMoCiAgICAiZmllbGQiKSk7CgogICAgLy8gLS0tIDQuIE1ldGhvZHMgRmlsdGVyIC0tLQogICAgY29uc3QgewogICAgICBvcHRpb25zOiBtZXRob2RPcHRpb25zLAogICAgICB0b3RhbDogdG90YWxNZXRob2RzCiAgICB9ID0gdGhpcy5nZXRLZXB0TWV0aG9kcygpOwogICAgVUlVdGlscy5idWlsZEFjdGlvbkRyb3Bkb3duKCJtZXRob2QtZHJvcGRvd24iLCBtZXRob2RPcHRpb25zLCBtZXRob2RzLAogICAgKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlRHluYW1pY0ZpbHRlcnMoKTsKICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICB9LCB0cnVlLCB0cnVlLCB0b3RhbE1ldGhvZHMsICJtZXRob2RzIiwgKHRlcm0pID0+IHsKICAgICAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgICAgIGlmICghYnJEYXRhIHx8ICFickRhdGEua2VwdE1ldGhvZEluZm9UYWJsZSkgcmV0dXJuIHsKICAgICAgICAgIG9wdGlvbnM6IFtdLAogICAgICAgICAgdG90YWw6IDAKICAgICAgICB9OwogICAgICAgIGNvbnN0IHR5cGVSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgYnJEYXRhLnR5cGVSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKHQgPT4gdHlwZVJlZk1hcC5zZXQodC5pZCwgdAogICAgICAgICAgLmphdmFEZXNjcmlwdG9yKSk7CiAgICAgICAgY29uc3QgbWV0aG9kUmVmTWFw", - "ID0gbmV3IE1hcCgpOwogICAgICAgIGJyRGF0YS5tZXRob2RSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKG0gPT4gbWV0aG9kUmVmTWFwLnNldChtLmlkLCBtKSk7CgogICAgICAgIGNvbnN0IGZpbHRlcmVkID0gYnJEYXRhLmtlcHRNZXRob2RJbmZvVGFibGUuZmlsdGVyKG0gPT4gewogICAgICAgICAgY29uc3QgbWV0aG9kUmVmID0gbWV0aG9kUmVmTWFwLmdldChtLm1ldGhvZFJlZmVyZW5jZUlkKTsKICAgICAgICAgIGNvbnN0IG5hbWUgPSBmb3JtYXRNZXRob2ROYW1lKG1ldGhvZFJlZiwgYnJEYXRhLCB0eXBlUmVmTWFwKTsKICAgICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGZpbHRlcmVkLnNsaWNlKDAsIDEwMDApLm1hcChtID0+IHsKICAgICAgICAgIGNvbnN0IG1ldGhvZFJlZiA9IG1ldGhvZFJlZk1hcC5nZXQobS5tZXRob2RSZWZlcmVuY2VJZCk7CiAgICAgICAgICBjb25zdCBuYW1lID0gZXNjYXBlSFRNTChmb3JtYXRNZXRob2ROYW1lKG1ldGhvZFJlZiwgYnJEYXRhLAogICAgICAgICAgICB0eXBlUmVmTWFwKSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBuYW1lLAogICAgICAgICAgICB2YWx1ZTogbS5pZAogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgb3B0aW9uczogcmVzdWx0cywKICAgICAgICAgIHRvdGFsOiBmaWx0ZXJlZC5sZW5ndGgKICAg", - "ICAgICB9OwogICAgICB9KTsKICAgIFVJVXRpbHMucmVuZGVyQ2hpcFRleHQodGhpcy5lbGVtZW50cy5tZXRob2RUZXh0LCBVSVV0aWxzLmdldEZpbHRlckxhYmVsKAogICAgICAiTWV0aG9kcyIsIG1ldGhvZHMsIHRvdGFsTWV0aG9kcywgbWV0aG9kT3B0aW9ucyksICJtZXRob2QiLCB0cnVlKTsKICAgIFVJVXRpbHMudG9nZ2xlVmlzaWJpbGl0eSh0aGlzLmVsZW1lbnRzLm1ldGhvZENoaXAsIGNoaXBzLmluY2x1ZGVzKAogICAgICAibWV0aG9kIikpOwoKICAgIC8vIC0tLSBBZGQgRmlsdGVyIEJ1dHRvbiBMb2dpYyAtLS0KICAgIGNvbnN0IGF2YWlsYWJsZUZpbHRlcnMgPSBbXTsKICAgIGlmICghY2hpcHMuaW5jbHVkZXMoImNsYXNzIikpIGF2YWlsYWJsZUZpbHRlcnMucHVzaCh7CiAgICAgIG5hbWU6ICJDbGFzc2VzIiwKICAgICAgdmFsdWU6ICJjbGFzcyIsCiAgICAgIG9wdGlvbnM6IGNsYXNzT3B0aW9ucywKICAgICAgdG90YWw6IHRvdGFsQ2xhc3NlcywKICAgICAgc3RhdGU6IGNsYXNzZXMKICAgIH0pOwogICAgaWYgKCFjaGlwcy5pbmNsdWRlcygiZmllbGQiKSkgYXZhaWxhYmxlRmlsdGVycy5wdXNoKHsKICAgICAgbmFtZTogIkZpZWxkcyIsCiAgICAgIHZhbHVlOiAiZmllbGQiLAogICAgICBvcHRpb25zOiBmaWVsZE9wdGlvbnMsCiAgICAgIHRvdGFsOiB0b3RhbEZpZWxkcywKICAgICAgc3RhdGU6IGZpZWxkcwogICAgfSk7CiAgICBpZiAoIWNoaXBzLmluY2x1ZGVzKCJtZXRob2QiKSkgYXZhaWxhYmxlRmls", - "dGVycy5wdXNoKHsKICAgICAgbmFtZTogIk1ldGhvZHMiLAogICAgICB2YWx1ZTogIm1ldGhvZCIsCiAgICAgIG9wdGlvbnM6IG1ldGhvZE9wdGlvbnMsCiAgICAgIHRvdGFsOiB0b3RhbE1ldGhvZHMsCiAgICAgIHN0YXRlOiBtZXRob2RzCiAgICB9KTsKCiAgICBpZiAoYXZhaWxhYmxlRmlsdGVycy5sZW5ndGggPiAwKSB7CiAgICAgIHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckxpc3QuaW5uZXJIVE1MID0gYXZhaWxhYmxlRmlsdGVycwogICAgICAgIC5tYXAoZiA9PgogICAgICAgICAgYDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi1pdGVtIGFkZC1maWx0ZXItb3B0aW9uIiBkYXRhLXZhbHVlPSIke2YudmFsdWV9Ij4ke2YubmFtZX08L2E+YAogICAgICAgICAgKQogICAgICAgIC5qb2luKCIiKTsKCiAgICAgIHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyTGlzdC5xdWVyeVNlbGVjdG9yQWxsKCIuYWRkLWZpbHRlci1vcHRpb24iKQogICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgY29uc3QgdmFsID0gaXRlbS5kYXRhc2V0LnZhbHVlOwogICAgICAgICAgICBpZiAoIXRoaXMuc3Rh", - "dGUuYWN0aXZlRmlsdGVyQ2hpcHMuaW5jbHVkZXModmFsKSkgewogICAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMucHVzaCh2YWwpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDbG9zZSB0aGUgIkFkZCBmaWx0ZXIiIGRyb3Bkb3duCiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyRHJvcGRvd24uY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyQnRuLmNsYXNzTGlzdC5yZW1vdmUoImJnLWdyYXktMjAwIik7CgogICAgICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CgogICAgICAgICAgICAvLyBBdXRvLW9wZW4gbmV3bHkgYWRkZWQgZHJvcGRvd24KICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gImNsYXNzIikgdGhpcy50b2dnbGVEcm9wZG93bih0aGlzLmVsZW1lbnRzCiAgICAgICAgICAgICAgICAuY2xzRHJvcGRvd24sIHRoaXMuZWxlbWVudHMuY2xzQnRuKTsKICAgICAgICAgICAgICBpZiAodmFsID09PSAiZmllbGQiKSB0aGlzLnRvZ2dsZURyb3Bkb3duKHRoaXMuZWxlbWVudHMKICAgICAgICAgICAgICAgIC5maWVsZERyb3Bkb3duLCB0aGlzLmVsZW1lbnRzLmZpZWxkQnRuKTsKICAgICAgICAgICAgICBpZiAodmFsID09PSAibWV0aG9kIikgdGhpcy50b2dnbGVEcm9wZG93bih0aGlz", - "CiAgICAgICAgICAgICAgICAuZWxlbWVudHMubWV0aG9kRHJvcGRvd24sIHRoaXMuZWxlbWVudHMubWV0aG9kQnRuKTsKICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgfQogIH0sCgogIGdldEtlcHRDbGFzc2VzKCkgewogICAgY29uc3QgYnJEYXRhID0gQXBwLmJsYXN0UmFkaXVzRGF0YTsKICAgIGlmICghYnJEYXRhIHx8ICFickRhdGEua2VwdENsYXNzSW5mb1RhYmxlKSByZXR1cm4gewogICAgICBvcHRpb25zOiBbXSwKICAgICAgdG90YWw6IDAKICAgIH07CiAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgYnJEYXRhLnR5cGVSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKHQgPT4gdHlwZVJlZk1hcC5zZXQodC5pZCwgdAogICAgICAuamF2YURlc2NyaXB0b3IpKTsKCiAgICBjb25zdCBvcHRpb25zID0gYnJEYXRhLmtlcHRDbGFzc0luZm9UYWJsZS5zbGljZSgwLCAxMDAwKS5tYXAoYyA9PiB7CiAgICAgIGNvbnN0IG5hbWUgPSBlc2NhcGVIVE1MKGZvcm1hdERlc2NyaXB0b3IodHlwZVJlZk1hcC5nZXQoYwogICAgICAgIC5jbGFzc1JlZmVyZW5jZUlkKSkpOwogICAgICByZXR1cm4gewogICAgICAgIG5hbWUsCiAgICAgICAgdmFsdWU6IGMuaWQKICAgICAgfTsKICAgIH0pOwogICAgcmV0dXJuIHsKICAgICAgb3B0aW9ucywKICAg", - "ICAgdG90YWw6IGJyRGF0YS5rZXB0Q2xhc3NJbmZvVGFibGUubGVuZ3RoCiAgICB9OwogIH0sCgogIGdldEtlcHRGaWVsZHMoKSB7CiAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgaWYgKCFickRhdGEgfHwgIWJyRGF0YS5rZXB0RmllbGRJbmZvVGFibGUpIHJldHVybiB7CiAgICAgIG9wdGlvbnM6IFtdLAogICAgICB0b3RhbDogMAogICAgfTsKICAgIGNvbnN0IHR5cGVSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICBickRhdGEudHlwZVJlZmVyZW5jZVRhYmxlLmZvckVhY2godCA9PiB0eXBlUmVmTWFwLnNldCh0LmlkLCB0CiAgICAgIC5qYXZhRGVzY3JpcHRvcikpOwogICAgY29uc3QgZmllbGRSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICBickRhdGEuZmllbGRSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKGYgPT4gZmllbGRSZWZNYXAuc2V0KGYuaWQsIGYpKTsKCiAgICBjb25zdCBvcHRpb25zID0gYnJEYXRhLmtlcHRGaWVsZEluZm9UYWJsZS5zbGljZSgwLCAxMDAwKS5tYXAoZiA9PiB7CiAgICAgIGNvbnN0IGZpZWxkUmVmID0gZmllbGRSZWZNYXAuZ2V0KGYuZmllbGRSZWZlcmVuY2VJZCk7CiAgICAgIGNvbnN0IG5hbWUgPSBlc2NhcGVIVE1MKGZvcm1hdEZpZWxkTmFtZShmaWVsZFJlZiwgYnJEYXRhLAogICAgICAgIHR5cGVSZWZNYXApKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lLAogICAgICAgIHZhbHVlOiBmLmlkCiAgICAgIH07CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIG9w", - "dGlvbnMsCiAgICAgIHRvdGFsOiBickRhdGEua2VwdEZpZWxkSW5mb1RhYmxlLmxlbmd0aAogICAgfTsKICB9LAoKICBnZXRLZXB0TWV0aG9kcygpIHsKICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICBpZiAoIWJyRGF0YSB8fCAhYnJEYXRhLmtlcHRNZXRob2RJbmZvVGFibGUpIHJldHVybiB7CiAgICAgIG9wdGlvbnM6IFtdLAogICAgICB0b3RhbDogMAogICAgfTsKICAgIGNvbnN0IHR5cGVSZWZNYXAgPSBuZXcgTWFwKCk7CiAgICBickRhdGEudHlwZVJlZmVyZW5jZVRhYmxlLmZvckVhY2godCA9PiB0eXBlUmVmTWFwLnNldCh0LmlkLCB0CiAgICAgIC5qYXZhRGVzY3JpcHRvcikpOwogICAgY29uc3QgbWV0aG9kUmVmTWFwID0gbmV3IE1hcCgpOwogICAgYnJEYXRhLm1ldGhvZFJlZmVyZW5jZVRhYmxlLmZvckVhY2gobSA9PiBtZXRob2RSZWZNYXAuc2V0KG0uaWQsIG0pKTsKCiAgICBjb25zdCBvcHRpb25zID0gYnJEYXRhLmtlcHRNZXRob2RJbmZvVGFibGUuc2xpY2UoMCwgMTAwMCkubWFwKG0gPT4gewogICAgICBjb25zdCBtZXRob2RSZWYgPSBtZXRob2RSZWZNYXAuZ2V0KG0ubWV0aG9kUmVmZXJlbmNlSWQpOwogICAgICBjb25zdCBuYW1lID0gZXNjYXBlSFRNTChmb3JtYXRNZXRob2ROYW1lKG1ldGhvZFJlZiwgYnJEYXRhLAogICAgICAgIHR5cGVSZWZNYXApKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lLAogICAgICAgIHZhbHVlOiBtLmlkCiAgICAgIH07CiAgICB9KTsK", - "ICAgIHJldHVybiB7CiAgICAgIG9wdGlvbnMsCiAgICAgIHRvdGFsOiBickRhdGEua2VwdE1ldGhvZEluZm9UYWJsZS5sZW5ndGgKICAgIH07CiAgfSwKCiAgdG9nZ2xlRHJvcGRvd24oZHJvcGRvd24sIHRyaWdnZXJCdG4gPSBudWxsKSB7CiAgICBjb25zdCBhbGxIZWxwZXJzID0gW3sKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5ncnBEcm9wZG93biwKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMuZ3JwQnRuCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5tb2REcm9wZG93biwKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMubW9kQnRuCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5jbHNEcm9wZG93biwKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMuY2xzQnRuCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5maWVsZERyb3Bkb3duLAogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5maWVsZEJ0bgogICAgICB9LAogICAgICB7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMubWV0aG9kRHJvcGRvd24sCiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLm1ldGhvZEJ0bgogICAgICB9LAogICAgICB7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyRHJvcGRvd24sCiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckJ0bgogICAgICB9LAogICAgICB7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMu", - "bGVuc0ZpbHRlckRyb3Bkb3duLAogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5sZW5zRmlsdGVyQnRuCiAgICAgIH0sCiAgICBdOwoKICAgIGNvbnN0IGlzT3BlbmluZyA9IGRyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucygiaGlkZGVuIik7CgogICAgLy8gQ2xvc2UgYWxsIG90aGVycyBmaXJzdAogICAgYWxsSGVscGVycy5mb3JFYWNoKCh7CiAgICAgIGRkLAogICAgICBidG4KICAgIH0pID0+IHsKICAgICAgaWYgKGRkICE9PSBkcm9wZG93bikgewogICAgICAgIGlmIChkZCkgZGQuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgICAgaWYgKGJ0bikgYnRuLmNsYXNzTGlzdC5yZW1vdmUoImJnLWdyYXktMjAwIik7CiAgICAgIH0KICAgIH0pOwoKICAgIGlmIChpc09wZW5pbmcpIHsKICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgIGlmICh0cmlnZ2VyQnRuKSB0cmlnZ2VyQnRuLmNsYXNzTGlzdC5hZGQoImJnLWdyYXktMjAwIik7CiAgICB9IGVsc2UgewogICAgICBkcm9wZG93bi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKICAgICAgaWYgKHRyaWdnZXJCdG4pIHRyaWdnZXJCdG4uY2xhc3NMaXN0LnJlbW92ZSgiYmctZ3JheS0yMDAiKTsKICAgIH0KICB9LAoKICBiaW5kRXZlbnRzKCkgewogICAgLy8gLS0tIERyb3Bkb3duIE1hbmFnZW1lbnQgLS0tCiAgICBjb25zdCBtYXAgPSBbewogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5ncnBCdG4sCiAgICAgICAgZGQ6IHRo", - "aXMuZWxlbWVudHMuZ3JwRHJvcGRvd24KICAgICAgfSwKICAgICAgewogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5tb2RCdG4sCiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMubW9kRHJvcGRvd24KICAgICAgfSwKICAgICAgewogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5jbHNCdG4sCiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMuY2xzRHJvcGRvd24KICAgICAgfSwKICAgICAgewogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5maWVsZEJ0biwKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5maWVsZERyb3Bkb3duCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMubWV0aG9kQnRuLAogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLm1ldGhvZERyb3Bkb3duCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMuYWRkRmlsdGVyQnRuLAogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckRyb3Bkb3duCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMubGVuc0ZpbHRlckJ0biwKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5sZW5zRmlsdGVyRHJvcGRvd24KICAgICAgfSwKICAgIF07CgogICAgbWFwLmZvckVhY2goKHsKICAgICAgYnRuLAogICAgICBkZAogICAgfSkgPT4gewogICAgICBpZiAoYnRuICYmIGRkKSB7CiAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgICAgIGlm", - "IChlLnRhcmdldC5jbG9zZXN0KCIuY2hpcC1jbG9zZSIpKSByZXR1cm47CiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93bihkZCwgYnRuKTsKICAgICAgICAgIHRoaXMudXBkYXRlRHluYW1pY0ZpbHRlcnMoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CgogICAgLy8gR2xvYmFsIGNsaWNrIGxpc3RlbmVyIHRvIGNsb3NlIGRyb3Bkb3ducwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZSkgPT4gewogICAgICBsZXQgYW55Q2xvc2VkID0gZmFsc2U7CiAgICAgIG1hcC5mb3JFYWNoKCh7CiAgICAgICAgZGQsCiAgICAgICAgYnRuCiAgICAgIH0pID0+IHsKICAgICAgICBpZiAoZGQgJiYgIWRkLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAoIWJ0biB8fCAhYnRuLmNvbnRhaW5zKGUKICAgICAgICAgICAgLnRhcmdldCkpKSB7CiAgICAgICAgICBpZiAoIWRkLmNsYXNzTGlzdC5jb250YWlucygiaGlkZGVuIikpIHsKICAgICAgICAgICAgZGQuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgICAgICAgIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJiZy1ncmF5LTIwMCIpOwogICAgICAgICAgICBhbnlDbG9zZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChhbnlDbG9zZWQpIHsKICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgIH0KICAgIH0pOwoKICAg", - "IC8vIENoaXAgcmVtb3ZhbHMKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWx0ZXItY2hpcHMtY29udGFpbmVyIikuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgImNsaWNrIiwgKGUpID0+IHsKICAgICAgICBjb25zdCBjbG9zZUJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoIi5jaGlwLWNsb3NlIik7CiAgICAgICAgaWYgKGNsb3NlQnRuKSB7CiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29uc3QgdHlwZSA9IGNsb3NlQnRuLmRhdGFzZXQuY2xlYXI7CiAgICAgICAgICBpZiAodHlwZSA9PT0gIm1vZHVsZSIpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJzLmtlZXBSdWxlcyA9IFtdOwogICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzID0gdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcwogICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjICE9PSAibW9kdWxlIik7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJjbGFzcyIpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJzLmNsYXNzZXMgPSBbXTsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcyA9IHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMKICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYyAhPT0gImNsYXNzIik7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJmaWVsZCIpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJzLmZpZWxk", - "cyA9IFtdOwogICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzID0gdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcwogICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjICE9PSAiZmllbGQiKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gIm1ldGhvZCIpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJzLm1ldGhvZHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcyA9IHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMKICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYyAhPT0gIm1ldGhvZCIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljRmlsdGVycygpOwogICAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgICB9CiAgICAgIH0pOwoKCiAgICAvLyAtLS0gR3JvdXAgQnkgRHJvcGRvd24gLS0tCiAgICB0aGlzLmVsZW1lbnRzLmdycERyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgY29uc3QgaXRlbSA9IGUudGFyZ2V0LmNsb3Nlc3QoIi5kcm9wZG93bi1pdGVtIik7CiAgICAgIGlmICghaXRlbSkgcmV0dXJuOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuc3RhdGUuY3VycmVudFZpZXcgPSBpdGVtLmRhdGFzZXQudmFsdWU7CiAgICAgIHRoaXMuc3RhdGUuZHJpbGxDb250ZXh0ID0gewogICAgICAgIG1vZHVsZTogbnVsbCwKICAgICAgICBwa2c6IG51", - "bGwKICAgICAgfTsgLy8gUmVzZXQgRHJpbGwtRG93bgoKICAgICAgLy8gUmVzZXQgZGVmYXVsdCBzb3J0IGJhc2VkIG9uIHZpZXcKICAgICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5DTEFTU0VTIHx8CiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLkZJRUxEUyB8fAogICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5NRVRIT0RTKSB7CiAgICAgICAgdGhpcy5zdGF0ZS5zb3J0ID0gewogICAgICAgICAgYnk6ICJuYW1lIiwKICAgICAgICAgIG9yZGVyOiAiYXNjIgogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zdGF0ZS5zb3J0ID0gewogICAgICAgICAgYnk6ICJtYXRjaGVzLnRvdGFsIiwKICAgICAgICAgIG9yZGVyOiAiZGVzYyIKICAgICAgICB9OwogICAgICB9CgogICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKHRoaXMuZWxlbWVudHMuZ3JwRHJvcGRvd24sIHRoaXMuZWxlbWVudHMKICAgICAgLmdycEJ0bik7CiAgICAgIHRoaXMucmVuZGVyKCk7CiAgICB9KTsKCiAgICAvLyAtLS0gVGFibGUgU29ydGluZyAtLS0KICAgIHRoaXMuZWxlbWVudHMudGFibGVIZWFkZXJzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgY29uc3QgdGggPSBlLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1zb3J0LWJ5XSIpOwogICAgICBpZiAoIXRoKSByZXR1cm47CiAg", - "ICAgIGNvbnN0IG5ld1NvcnRCeSA9IHRoLmRhdGFzZXQuc29ydEJ5OwogICAgICBpZiAodGhpcy5zdGF0ZS5zb3J0LmJ5ID09PSBuZXdTb3J0QnkpCiAgICAgICAgdGhpcy5zdGF0ZS5zb3J0Lm9yZGVyID0gdGhpcy5zdGF0ZS5zb3J0Lm9yZGVyID09PSAiYXNjIiA/ICJkZXNjIiA6CiAgICAgICAgImFzYyI7CiAgICAgIGVsc2UgewogICAgICAgIHRoaXMuc3RhdGUuc29ydC5ieSA9IG5ld1NvcnRCeTsKICAgICAgICB0aGlzLnN0YXRlLnNvcnQub3JkZXIgPSAiZGVzYyI7CiAgICAgIH0KICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0pOwoKICAgIC8vIC0tLSBUYWJsZSBSb3cgSW50ZXJhY3Rpb24gKE1hbnVhbCBEcmlsbC1Eb3duKSAtLS0KICAgIHRoaXMuZWxlbWVudHMudGFibGVEYXRhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgY29uc3QgcnVsZVRkID0gZS50YXJnZXQuY2xvc2VzdCgidGRbZGF0YS1ydWxlLWlkXSIpOwogICAgICBpZiAocnVsZVRkKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIEFwcC5zaG93RGV0YWlsc1ZpZXcocnVsZVRkLmRhdGFzZXQucnVsZUlkKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGNvbnN0IGZpbGVUZCA9IGUudGFyZ2V0LmNsb3Nlc3QoInRkW2RhdGEtZmlsZS1vcmlnaW4taWRdIik7CiAgICAgIGlmIChmaWxlVGQpIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgQXBwLnNob3dGaWxlRGV0YWls", - "c1ZpZXcoZmlsZVRkLmRhdGFzZXQuZmlsZU9yaWdpbklkKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGNvbnN0IHRkID0gZS50YXJnZXQuY2xvc2VzdCgidGRbZGF0YS1uYW1lXSIpOwogICAgICBpZiAoIXRkKSByZXR1cm47CgogICAgICBjb25zdCB7CiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlLAogICAgICAgIG1vZHVsZU5hbWUKICAgICAgfSA9IHRkLmRhdGFzZXQ7CgogICAgICAvLyBVcGRhdGUgRHJpbGwtQ29udGV4dCAoU2lsZW50KQogICAgICBpZiAodHlwZSA9PT0gIm1vZHVsZSIpIHsKICAgICAgICB0aGlzLnN0YXRlLmRyaWxsQ29udGV4dC5tb2R1bGUgPSBuYW1lOwogICAgICAgIHRoaXMuc3RhdGUuZHJpbGxDb250ZXh0LnBrZyA9IG51bGw7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gInBhY2thZ2UiKSB7CiAgICAgICAgdGhpcy5zdGF0ZS5kcmlsbENvbnRleHQubW9kdWxlID0gbW9kdWxlTmFtZSB8fCB0aGlzLnN0YXRlCiAgICAgICAgICAuZHJpbGxDb250ZXh0Lm1vZHVsZTsKICAgICAgICB0aGlzLnN0YXRlLmRyaWxsQ29udGV4dC5wa2cgPSBuYW1lOwogICAgICB9CgogICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7CiAgICAgIHRoaXMucmVuZGVyKCk7CiAgICB9KTsKICB9LAoKICAvKioKICAgKiBDb3JlIERhdGEgUGlwZWxpbmU6IEZpbHRlcnMgYW5kIEZsYXR0ZW5zIGRhdGEgYmFzZWQgb24gY3VycmVudCBWaWV3IE1vZGUgYW5kIEZpbHRlcnMuCiAgICovCiAgYXBwbHlL", - "ZWVwUnVsZUxlbnMocnVsZXMsIGxlbnMpIHsKICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICBpZiAoIWxlbnMgfHwgIWJyRGF0YSkgcmV0dXJuIHJ1bGVzOwoKICAgIGNvbnN0IHJ1bGVNYXAgPSBuZXcgTWFwKCk7CiAgICBickRhdGEua2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlLmZvckVhY2gociA9PiB7CiAgICAgIHJ1bGVNYXAuc2V0KHIuaWQsIHIpOwogICAgfSk7CgogICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihyID0+IHsKICAgICAgY29uc3QgZ2V0U3Vic3VtZWRCeSA9IChydWxlKSA9PiBydWxlLnN1YnN1bWVkQnkgfHwgKHJ1bGUKICAgICAgICAuYmxhc3RSYWRpdXMgJiYgcnVsZS5ibGFzdFJhZGl1cy5zdWJzdW1lZEJ5KSB8fCBbXTsKICAgICAgY29uc3QgZ2V0TWF0Y2hlc1RvdGFsID0gKHJ1bGUpID0+IHsKICAgICAgICBpZiAocnVsZS5tYXRjaGVzICYmIHJ1bGUubWF0Y2hlcy50b3RhbCAhPT0gdW5kZWZpbmVkKQogICAgICAgIHJldHVybiBydWxlLm1hdGNoZXMudG90YWw7CiAgICAgICAgY29uc3QgYiA9IHJ1bGUuYmxhc3RSYWRpdXMgfHwge307CiAgICAgICAgcmV0dXJuIChiLmNsYXNzQmxhc3RSYWRpdXMgfHwgW10pLmxlbmd0aCArIChiCiAgICAgICAgICAuZmllbGRCbGFzdFJhZGl1cyB8fCBbXSkubGVuZ3RoICsgKGIubWV0aG9kQmxhc3RSYWRpdXMgfHwKICAgICAgICBbXSkubGVuZ3RoOwogICAgICB9OwoKICAgICAgY29uc3Qgc3Vic3VtZWRCeSA9IGdldFN1YnN1bWVk", - "Qnkocik7CgogICAgICBpZiAobGVucyA9PT0gIklkZW50aWNhbCIpIHsKICAgICAgICBjb25zdCBpZGVudGljYWwgPSBzdWJzdW1lZEJ5LmZpbHRlcihvdGhlcklkID0+IHsKICAgICAgICAgIGNvbnN0IG90aGVyID0gcnVsZU1hcC5nZXQob3RoZXJJZCk7CiAgICAgICAgICByZXR1cm4gb3RoZXIgJiYgKG90aGVyLmJsYXN0UmFkaXVzPy5zdWJzdW1lZEJ5IHx8IFtdKQogICAgICAgICAgICAuaW5jbHVkZXMoci5pZCk7CiAgICAgICAgfSkubWFwKG90aGVySWQgPT4gcnVsZU1hcC5nZXQob3RoZXJJZCkpOwoKICAgICAgICBpZiAoaWRlbnRpY2FsLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHIuaWRlbnRpY2FsUnVsZXMgPSBpZGVudGljYWw7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgaWYgKGxlbnMgPT09ICJTdWJzdW1lZCIpIHsKICAgICAgICBpZiAoc3Vic3VtZWRCeS5sZW5ndGggPiAwKSB7CiAgICAgICAgICByLnN1YnN1bWVkQnlSdWxlcyA9IHN1YnN1bWVkQnkubWFwKGlkID0+IHJ1bGVNYXAuZ2V0KGlkKSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgaWYgKGxlbnMgPT09ICJVbnVzZWQiKSB7CiAgICAgICAgcmV0dXJuIGdldE1hdGNoZXNUb3RhbChyKSA9PT0gMDsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0sCgogIGdldEZpbHRl", - "cmVkRGF0YSgpIHsKICAgIGNvbnN0IHsKICAgICAgY3VycmVudFZpZXcsCiAgICAgIGZpbHRlcnMKICAgIH0gPSB0aGlzLnN0YXRlOwogICAgY29uc3QgYnJEYXRhID0gQXBwLmJsYXN0UmFkaXVzRGF0YTsKICAgIGlmICghYnJEYXRhKSByZXR1cm4gW107CgogICAgbGV0IGRhdGEgPSBbXTsKICAgIGlmIChjdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLlBBQ0tBR0VTKSB7CiAgICAgIGRhdGEgPSBnZXRSdWxlRmlsZXMoYnJEYXRhKS5maWx0ZXIoZiA9PiBmLmtlZXBSdWxlcyA+IDApOwogICAgfSBlbHNlIHsKICAgICAgZGF0YSA9IGdldFJ1bGVzKGJyRGF0YSk7CiAgICAgIC8vIERlZmF1bHQ6IGhpZGUgcnVsZXMgd2l0aCB6ZXJvIG1hdGNoZXMsIHVubGVzcyB0aGUgVW51c2VkIGxlbnMgaXMgYXBwbGllZC4KICAgICAgaWYgKGZpbHRlcnMua2VlcFJ1bGVzWzBdICE9PSAiVW51c2VkIikgewogICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihyID0+IHIubWF0Y2hlcy50b3RhbCA+IDApOwogICAgICB9CiAgICB9CgogICAgLy8gQXBwbHkgS2VlcCBSdWxlcyBMZW5zIChGaWx0ZXJpbmcpCiAgICBpZiAoY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5NT0RVTEVTICYmIGZpbHRlcnMua2VlcFJ1bGVzLmxlbmd0aCA+CiAgICAgIDApIHsKICAgICAgZGF0YSA9IHRoaXMuYXBwbHlLZWVwUnVsZUxlbnMoZGF0YSwgZmlsdGVycy5rZWVwUnVsZXNbMF0pOwogICAgfQoKICAgIC8vIEFwcGx5IENsYXNzL0ZpZWxk", - "L01ldGhvZCBmaWx0ZXJzCiAgICBpZiAoZmlsdGVycy5jbGFzc2VzLmxlbmd0aCA+IDAgfHwgZmlsdGVycy5maWVsZHMubGVuZ3RoID4gMCB8fCBmaWx0ZXJzCiAgICAgIC5tZXRob2RzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgbWF0Y2hlZFJ1bGVJZHMgPSBuZXcgU2V0KCk7CgogICAgICBpZiAoZmlsdGVycy5jbGFzc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICBickRhdGEua2VwdENsYXNzSW5mb1RhYmxlLmZvckVhY2goYyA9PiB7CiAgICAgICAgICBpZiAoZmlsdGVycy5jbGFzc2VzLmluY2x1ZGVzKGMuaWQpKSB7CiAgICAgICAgICAgIChjLmtlcHRCeSB8fCBbXSkuZm9yRWFjaChyaWQgPT4gbWF0Y2hlZFJ1bGVJZHMuYWRkKHJpZCkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChmaWx0ZXJzLmZpZWxkcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYnJEYXRhLmtlcHRGaWVsZEluZm9UYWJsZS5mb3JFYWNoKGYgPT4gewogICAgICAgICAgaWYgKGZpbHRlcnMuZmllbGRzLmluY2x1ZGVzKGYuaWQpKSB7CiAgICAgICAgICAgIChmLmtlcHRCeSB8fCBbXSkuZm9yRWFjaChyaWQgPT4gbWF0Y2hlZFJ1bGVJZHMuYWRkKHJpZCkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChmaWx0ZXJzLm1ldGhvZHMubGVuZ3RoID4gMCkgewogICAgICAgIGJyRGF0YS5rZXB0TWV0aG9kSW5mb1RhYmxlLmZvckVhY2gobSA9PiB7CiAgICAgICAgICBpZiAoZmlsdGVycy5t", - "ZXRob2RzLmluY2x1ZGVzKG0uaWQpKSB7CiAgICAgICAgICAgIChtLmtlcHRCeSB8fCBbXSkuZm9yRWFjaChyaWQgPT4gbWF0Y2hlZFJ1bGVJZHMuYWRkKHJpZCkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBkYXRhID0gZGF0YS5maWx0ZXIociA9PiBtYXRjaGVkUnVsZUlkcy5oYXMoci5pZCkpOwogICAgfQoKICAgIHJldHVybiBkYXRhOwogIH0sCgogIGdldFNvcnRlZERhdGEoZGF0YSkgewogICAgY29uc3QgewogICAgICBieSwKICAgICAgb3JkZXIKICAgIH0gPSB0aGlzLnN0YXRlLnNvcnQ7CiAgICBpZiAoIWJ5KSByZXR1cm4gZGF0YTsKCiAgICBjb25zdCBnZXRWYWwgPSAob2JqLCBwYXRoKSA9PiB7CiAgICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvLCBrZXkpID0+IChvICYmIG9ba2V5XSAhPT0KICAgICAgICB1bmRlZmluZWQpID8gb1trZXldIDogMCwgb2JqKTsKICAgIH07CgogICAgcmV0dXJuIFsuLi5kYXRhXS5zb3J0KChhLCBiKSA9PiB7CiAgICAgIGNvbnN0IHZBID0gZ2V0VmFsKGEsIGJ5KTsKICAgICAgY29uc3QgdkIgPSBnZXRWYWwoYiwgYnkpOwoKICAgICAgaWYgKHR5cGVvZiB2QSA9PT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIG9yZGVyID09PSAiYXNjIiA/IHZBLmxvY2FsZUNvbXBhcmUodkIpIDogdkIubG9jYWxlQ29tcGFyZSgKICAgICAgICAgIHZBKTsKICAgICAgcmV0dXJuIG9yZGVyID09PSAiYXNjIiA/ICh2QSB8fCAwKSAtICh2QiB8fCAw", - "KSA6ICh2QiB8fCAwKSAtICh2QSB8fAogICAgICAgIDApOwogICAgfSk7CiAgfSwKCiAgdXBkYXRlQnJlYWRjcnVtYnMoKSB7CiAgICBjb25zdCBiYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbGF0LWJyZWFkY3J1bWJzIik7CiAgICBpZiAoIWJjKSByZXR1cm47CgogICAgY29uc3QgbGlua0NsYXNzID0gImJyZWFkY3J1bWItcGlsbCI7CiAgICBjb25zdCB0ZXh0Q2xhc3MgPSAiYnJlYWRjcnVtYi10ZXh0IjsKICAgIGNvbnN0IHNlcCA9ICc8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTMwMCBteC0xIj4vPC9zcGFuPic7CgogICAgbGV0IGh0bWwgPSAiIjsKICAgIGNvbnN0IHsKICAgICAgbW9kdWxlLAogICAgICBwa2c6IHBrZwogICAgfSA9IHRoaXMuc3RhdGUuZHJpbGxDb250ZXh0OwoKICAgIGNvbnN0IHRvZ2dsZVRleHQgPSB0aGlzLnN0YXRlLnN0YXRzVmlzaWJsZSA/ICJIaWRlIFN1bW1hcnkiIDoKICAgICAgIlNob3cgU3VtbWFyeSI7CiAgICBjb25zdCB0b2dnbGVIdG1sID0gYAogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZHJvcGRvd24tYnRuIiBkYXRhLWFjdGlvbj0idG9nZ2xlLXN0YXRzIiBzdHlsZT0iYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDRweDsgbWFyZ2luLWxlZnQ6IGF1dG87IGN1cnNvcjogcG9pbnRlcjsiPgogICAgICAgICAgICA8", - "c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLXRleHQtZ3JheS00MDApOyI+JHt0b2dnbGVUZXh0fTwvc3Bhbj4KICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgICAgICAgIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuMjVyZW07IGNvbG9yOiB2YXIoLS10ZXh0LWdyYXktNTAwKTsgdHJhbnNmb3JtOiAke3RoaXMuc3RhdGUuc3RhdHNWaXNpYmxlID8gJ3JvdGF0ZSgxODBkZWcpJyA6ICdyb3RhdGUoMGRlZyknfTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnM7Ij4KICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE5IDlsLTcgNy03LTciIC8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYDsKCiAgICBpZiAobW9kdWxlKSB7CiAgICAgIC8vIERyaWxsZWQgRG93biBQYXRoCiAgICAgIGh0bWwgKz0gYDxzcGFuIGNsYXNzPSIke2xpbmtDbGFzc30iIGRhdGEtYWN0aW9uPSJyZXNldCI+U3VtbWFyeTwvc3Bhbj5gOwogICAgICBodG1sICs9IHNlcDsKICAgICAgaWYgKHBrZykgewogICAgICAgIGh0bWwgKz0KICAgICAgICAgIGA8c3BhbiBjbGFzcz0iJHtsaW5r", - "Q2xhc3N9IiBkYXRhLWFjdGlvbj0ibW9kdWxlIiBkYXRhLXZhbD0iJHtlc2NhcGVIVE1MKG1vZHVsZSl9Ij4ke2VzY2FwZUhUTUwobW9kdWxlKX08L3NwYW4+YDsKICAgICAgICBodG1sICs9IHNlcDsKICAgICAgICBodG1sICs9IGA8c3BhbiBjbGFzcz0iJHt0ZXh0Q2xhc3N9Ij4ke2VzY2FwZUhUTUwocGtnKX08L3NwYW4+YDsKICAgICAgfSBlbHNlIHsKICAgICAgICBodG1sICs9IGA8c3BhbiBjbGFzcz0iJHt0ZXh0Q2xhc3N9Ij4ke2VzY2FwZUhUTUwobW9kdWxlKX08L3NwYW4+YDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gR2xvYmFsIFZpZXcKICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz0iJHt0ZXh0Q2xhc3N9Ij5TdW1tYXJ5PC9zcGFuPmA7CiAgICB9CgogICAgYmMuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgIGJjLnN0eWxlLmFsaWduSXRlbXMgPSAiY2VudGVyIjsKICAgIGJjLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgYmMuaW5uZXJIVE1MID0gaHRtbCArIHRvZ2dsZUh0bWw7CgogICAgLy8gQnJlYWRjcnVtYiBDbGljayBIYW5kbGVycwogICAgYmMucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtYWN0aW9uXSIpLmZvckVhY2goKGVsKSA9PiB7CiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgICBjb25zdCBhY3Rpb24gPSBlbC5kYXRhc2V0LmFjdGlvbjsKICAgICAgICBpZiAoYWN0aW9uID09PSAicmVzZXQiKSB7CiAgICAgICAgICB0aGlzLnN0YXRl", - "LmRyaWxsQ29udGV4dCA9IHsKICAgICAgICAgICAgbW9kdWxlOiBudWxsLAogICAgICAgICAgICBwa2c6IG51bGwKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAibW9kdWxlIikgewogICAgICAgICAgdGhpcy5zdGF0ZS5kcmlsbENvbnRleHQucGtnID0gbnVsbDsKICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICJ0b2dnbGUtc3RhdHMiKSB7CiAgICAgICAgICB0aGlzLnN0YXRlLnN0YXRzVmlzaWJsZSA9ICF0aGlzLnN0YXRlLnN0YXRzVmlzaWJsZTsKICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0sCgogIHJlbmRlcigpIHsKICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYnMoKTsKCiAgICBpZiAodGhpcy5zdGF0ZS5jdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLkZJTEVfREVUQUlMUykgewogICAgICBBcHAucmVuZGVyRmlsZURldGFpbHNWaWV3KHRoaXMuc3RhdGUuZHJpbGxDb250ZXh0LmZpbGVPcmlnaW5JZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodGhpcy5zdGF0ZS5jdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLkRFVEFJTFMpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFVwZGF0ZSBMYWJlbCBvZiBHcm91cCBEcm9wZG93bgogICAgY29uc3QgY3VycmVudFZpZXcgPSB0aGlzLnN0YXRlLmN1cnJl", - "bnRWaWV3OwogICAgY29uc3Qgdmlld0xhYmVscyA9IHsKICAgICAgbW9kdWxlczogIktlZXAgUnVsZXMiLAogICAgICBwYWNrYWdlczogIktlZXAgUnVsZSBGaWxlcyIKICAgIH07CiAgICB0aGlzLmVsZW1lbnRzLmdycFRleHQudGV4dENvbnRlbnQgPSB2aWV3TGFiZWxzW2N1cnJlbnRWaWV3XSB8fCAoCiAgICAgIGN1cnJlbnRWaWV3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY3VycmVudFZpZXcuc2xpY2UoMSkpOwoKICAgIGlmICh0aGlzLmVsZW1lbnRzLmdycExpc3QpIHsKICAgICAgdGhpcy5lbGVtZW50cy5ncnBMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kcm9wZG93bi1pdGVtIikuZm9yRWFjaCgoCiAgICAgIGVsKSA9PiB7CiAgICAgICAgaWYgKGVsLmRhdGFzZXQudmFsdWUgPT09IGN1cnJlbnRWaWV3KQogICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgiYmctZ3JheS0xMDAiLCAidGV4dC1ncmF5LTkwMCIsCiAgICAgICAgICAgICJmb250LXNlbWlib2xkIik7CiAgICAgICAgZWxzZSBlbC5jbGFzc0xpc3QucmVtb3ZlKCJiZy1ncmF5LTEwMCIsICJ0ZXh0LWdyYXktOTAwIiwKICAgICAgICAgICJmb250LXNlbWlib2xkIik7CiAgICAgIH0pOwogICAgfQoKICAgIC8vIFByb2Nlc3MgRGF0YQogICAgbGV0IGRhdGEgPSB0aGlzLmdldEZpbHRlcmVkRGF0YSgpOwogICAgZGF0YSA9IHRoaXMuZ2V0U29ydGVkRGF0YShkYXRhKTsKCiAgICAvLyBVcGRhdGUgU3VtbWFyeSBDb3VudHMKICAgIGxldCByZWxldmFudENs", - "YXNzZXMgPSBbXSwKICAgICAgbW9kQ291bnQgPSAwOwogICAgaWYgKGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuUEFDS0FHRVMpIHsKICAgICAgcmVsZXZhbnRDbGFzc2VzID0gZGF0YS5mbGF0TWFwKChwKSA9PiBwLmNsYXNzZXMgfHwgW10pOwogICAgICBtb2RDb3VudCA9IG5ldyBTZXQoZGF0YS5tYXAoKHApID0+IHAubW9kdWxlTmFtZSkpLnNpemU7CiAgICB9IGVsc2UgewogICAgICByZWxldmFudENsYXNzZXMgPSBkYXRhLmZsYXRNYXAoKG0pID0+IChtLnBhY2thZ2VzIHx8IFtdKS5mbGF0TWFwKChwKSA9PgogICAgICAgIHAuY2xhc3NlcyB8fCBbXSkpOwogICAgICBtb2RDb3VudCA9IGRhdGEubGVuZ3RoOwogICAgfQoKICAgIC8vIFN0YXRzIHRhYmxlIHZpc2liaWxpdHkKICAgIGlmICh0aGlzLmVsZW1lbnRzLnN0YXRzQ29udGFpbmVyKSB7CiAgICAgIHRoaXMuZWxlbWVudHMuc3RhdHNDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IHRoaXMuc3RhdGUuc3RhdHNWaXNpYmxlID8KICAgICAgICAiYmxvY2siIDogIm5vbmUiOwogICAgICB0aGlzLmVsZW1lbnRzLnN0YXRzQ29udGFpbmVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IHRoaXMuc3RhdGUKICAgICAgICAuc3RhdHNWaXNpYmxlID8gIjJyZW0iIDogIjAiOwogICAgfQoKICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICBjb25zdCB0b3RhbExpdmUgPSBnZXRMaXZlSXRlbUNvdW50KGJyRGF0YSk7CiAgICBjb25zdCBmb3Jt", - "YXRQZXJjID0gKGRpc2FsbG93Q291bnQpID0+IHRvdGFsTGl2ZSA+IDAgPyAoMTAwIC0gKAogICAgICBkaXNhbGxvd0NvdW50IC8gdG90YWxMaXZlICogMTAwKSkudG9GaXhlZCgxKSArICclJyA6ICctLSc7CiAgICBjb25zdCBnZXRQZXJjID0gKGRpc2FsbG93Q291bnQpID0+IHRvdGFsTGl2ZSA+IDAgPyAoMTAwIC0gKGRpc2FsbG93Q291bnQgLwogICAgICB0b3RhbExpdmUgKiAxMDApKSA6ICctLSc7CgogICAgY29uc3Qgc2V0U3RhdFZhbHVlID0gKGVsZW1lbnQsIGRpc2FsbG93Q291bnQpID0+IHsKICAgICAgaWYgKCFickRhdGEpIHsKICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gJy0tJzsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICdzdGF0LXZhbHVlICcgKyBVSVV0aWxzLmdldFNjb3JlQ2xhc3MoJy0tJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBlcmMgPSBnZXRQZXJjKGRpc2FsbG93Q291bnQpOwogICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gZm9ybWF0UGVyYyhkaXNhbGxvd0NvdW50KTsKICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAnc3RhdC12YWx1ZSAnICsgVUlVdGlscy5nZXRTY29yZUNsYXNzKHBlcmMpOwogICAgfTsKCiAgICBzZXRTdGF0VmFsdWUodGhpcy5lbGVtZW50cy50b3RhbE9iZnVzY2F0aW9uLCBnZXREaXNhbGxvd09iZnVzY2F0aW9uQ291bnQoCiAgICAgIGJyRGF0YSkpOwogICAgc2V0U3RhdFZhbHVlKHRoaXMuZWxlbWVudHMudG90YWxPcHRp", - "bWl6YXRpb24sCiAgICAgIGdldERpc2FsbG93T3B0aW1pemF0aW9uQ291bnQoYnJEYXRhKSk7CiAgICBzZXRTdGF0VmFsdWUodGhpcy5lbGVtZW50cy50b3RhbFNocmlua2luZywgZ2V0RGlzYWxsb3dTaHJpbmtpbmdDb3VudCgKICAgICAgYnJEYXRhKSk7CgogICAgLy8gUmVuZGVyIFRhYmxlcwogICAgdGhpcy5yZW5kZXJIZWFkZXJzKCk7CiAgICB0aGlzLnJlbmRlckZsYXRSb3dzKGRhdGEpOwogICAgdGhpcy5yZW5kZXJTdGF0c1RhYmxlKCk7CiAgfSwKCiAgcmVuZGVyU3RhdHNUYWJsZSgpIHsKICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICBpZiAoIWJyRGF0YSkgcmV0dXJuOwoKICAgIGNvbnN0IHN0YXRzID0gZ2V0RGV0YWlsZWRTdGF0cyhickRhdGEpOwogICAgaWYgKCFzdGF0cykgcmV0dXJuOwoKICAgIGNvbnN0IGdldEhlYWRlckNlbGwgPSAobGFiZWwsIGRpc2FsbG93Q291bnQsIHRvdGFsKSA9PiB7CiAgICAgIGNvbnN0IHBlcmMgPSB0b3RhbCA+IDAgPyAoMTAwIC0gKGRpc2FsbG93Q291bnQgLyB0b3RhbCAqIDEwMCkpIDogMTAwOwogICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRTY29yZUNsYXNzKHBlcmMpOwogICAgICByZXR1cm4gYAogICAgICAgICAgICA8dGggY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAwLjVyZW07IHBhZGRpbmctdG9wOiAxcmVtOyBiYWNrZ3JvdW5kLWNvbG9y", - "OiB2YXIoLS1iZy1ncmF5LTUwKTsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtZ3JheS05MDApOyI+JHtsYWJlbH08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LWJvbGQgJHtjb2xvckNsYXNzfSBtdC0xIj4ke3BlcmMudG9GaXhlZCgxKX0lPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RoPgogICAgICAgICAgYDsKICAgIH07CgogICAgLy8gUmVuZGVyIEhlYWRlcnMKICAgIHRoaXMuZWxlbWVudHMuc3RhdHNUYWJsZUhlYWRlcnMuaW5uZXJIVE1MID0gYAogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGggY2xhc3M9InRleHQtbGVmdCBzdGlja3ktbmFtZSBiZy1ncmF5LTUwIHotMzAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyI+Q2F0ZWdvcnk8L3RoPgogICAgICAgICAgICAke2dldEhlYWRlckNlbGwoIk9iZnVzY2F0aW9uIFNjb3JlIiwgc3RhdHMub3ZlcmFsbC5vYmZ1c2NhdGlvbiwgc3RhdHMub3ZlcmFsbC50b3RhbCl9CiAgICAgICAgICAgICR7Z2V0SGVhZGVyQ2VsbCgiT3B0aW1pemF0aW9uIFNjb3JlIiwgc3RhdHMub3ZlcmFsbC5vcHRpbWl6YXRpb24sIHN0YXRzLm92ZXJhbGwudG90YWwpfQog", - "ICAgICAgICAgICAke2dldEhlYWRlckNlbGwoIlNocmlua2luZyBTY29yZSIsIHN0YXRzLm92ZXJhbGwuc2hyaW5raW5nLCBzdGF0cy5vdmVyYWxsLnRvdGFsKX0KICAgICAgICAgIDwvdHI+CiAgICAgICAgYDsKCiAgICBjb25zdCByZW5kZXJDZWxsID0gKGRpc2FsbG93Q291bnQsIHRvdGFsKSA9PiB7CiAgICAgIGNvbnN0IHBlcmMgPSB0b3RhbCA+IDAgPyAoMTAwIC0gKGRpc2FsbG93Q291bnQgLyB0b3RhbCAqIDEwMCkpIDogMTAwOwogICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRTY29yZUNsYXNzKHBlcmMpOwogICAgICByZXR1cm4gYAogICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJvbGQgJHtjb2xvckNsYXNzfSI+JHtwZXJjLnRvRml4ZWQoMSl9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPiR7dG90YWwgLSBkaXNhbGxvd0NvdW50fS8ke3RvdGFsfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIGA7CiAgICB9OwoKICAgIGNvbnN0IHJvd3MgPSBbewogICAg", - "ICAgIGxhYmVsOiAiQ2xhc3NlcyIsCiAgICAgICAgZGF0YTogc3RhdHMuY2xhc3NlcwogICAgICB9LAogICAgICB7CiAgICAgICAgbGFiZWw6ICJGaWVsZHMiLAogICAgICAgIGRhdGE6IHN0YXRzLmZpZWxkcwogICAgICB9LAogICAgICB7CiAgICAgICAgbGFiZWw6ICJNZXRob2RzIiwKICAgICAgICBkYXRhOiBzdGF0cy5tZXRob2RzCiAgICAgIH0KICAgIF07CgogICAgdGhpcy5lbGVtZW50cy5zdGF0c1RhYmxlRGF0YS5pbm5lckhUTUwgPSByb3dzLm1hcChyb3cgPT4gYAogICAgICAgICAgPHRyIGNsYXNzPSJ0YWJsZS1yb3cgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktNTAiPgogICAgICAgICAgICA8dGQgY2xhc3M9InN0aWNreS1uYW1lIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyI+JHtyb3cubGFiZWx9PC90ZD4KICAgICAgICAgICAgJHtyZW5kZXJDZWxsKHJvdy5kYXRhLm9iZnVzY2F0aW9uLCByb3cuZGF0YS50b3RhbCl9CiAgICAgICAgICAgICR7cmVuZGVyQ2VsbChyb3cuZGF0YS5vcHRpbWl6YXRpb24sIHJvdy5kYXRhLnRvdGFsKX0KICAgICAgICAgICAgJHtyZW5kZXJDZWxsKHJvdy5kYXRhLnNocmlua2luZywgcm93LmRhdGEudG90YWwpfQogICAgICAgICAgPC90cj4KICAgICAgICBgKS5qb2luKCIiKTsKICB9LAoKICByZW5kZXJIZWFkZXJzKCkgewogICAgY29uc3QgewogICAgICBjdXJyZW50VmlldywKICAgICAgc29ydAogICAgfSA9", - "IHRoaXMuc3RhdGU7CiAgICBjb25zdCB0b3BIZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwogICAgY29uc3Qgc3ViSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKCiAgICBjb25zdCB2aWV3TGFiZWxzID0gewogICAgICBtb2R1bGVzOiAiUnVsZSIsCiAgICAgIHBhY2thZ2VzOiAiS2VlcCBSdWxlIEZpbGVzIgogICAgfTsKICAgIGNvbnN0IHRpdGxlID0gdmlld0xhYmVsc1tjdXJyZW50Vmlld107CgogICAgY29uc3QgaW5kID0gKGtleSkgPT4gewogICAgICBpZiAoc29ydC5ieSAhPT0ga2V5KSByZXR1cm4gIiI7CiAgICAgIHJldHVybiBzb3J0Lm9yZGVyID09PSAiYXNjIiA/CiAgICAgICAgYDxzcGFuIGNsYXNzPSJzb3J0LWljb24gdGV4dC1ibHVlLTYwMCBtbC0xIj7ilrI8L3NwYW4+YCA6CiAgICAgICAgYDxzcGFuIGNsYXNzPSJzb3J0LWljb24gdGV4dC1ibHVlLTYwMCBtbC0xIj7ilrw8L3NwYW4+YDsKICAgIH07CgogICAgaWYgKGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuUEFDS0FHRVMpIHsKICAgICAgdG9wSGVhZGVyLmlubmVySFRNTCA9IGAKICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWxlZnQgc3RpY2t5LW5hbWUgYmctZ3JheS01MCB6LTMwIiBkYXRhLXNvcnQtYnk9Im5hbWUiIHN0eWxlPSJ3aWR0aDogNDAwcHg7IG1pbi13aWR0aDogNDAwcHg7Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRl", - "ciBjdXJzb3ItcG9pbnRlciBob3Zlcjp0ZXh0LWJsdWUtNjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsiPgogICAgICAgICAgICAgICAgICAke3RpdGxlfSR7aW5kKCJuYW1lIil9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1jZW50ZXIgYmctZ3JheS01MCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAiIGRhdGEtc29ydC1ieT0ia2VlcFJ1bGVzIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+S2VlcCBSdWxlcyR7aW5kKCJrZWVwUnVsZXMiKX08L3RoPgogICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBiZy1ncmF5LTUwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9Im1hdGNoZXMudG90YWwiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA4MHB4OyBtaW4td2lkdGg6IDgwcHg7Ij5LZXB0IEl0ZW1zJHtpbmQoIm1hdGNoZXMudG90YWwiKX08L3RoPgogICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0x", - "MDAiIGRhdGEtc29ydC1ieT0iaW1wYWN0Lm9iZnVzY2F0aW9uIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogODBweDsgbWluLXdpZHRoOiA4MHB4OyI+T2JmdXNjYXRpb24gU2NvcmUke2luZCgiaW1wYWN0Lm9iZnVzY2F0aW9uIil9PC90aD4KICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9ImltcGFjdC5vcHRpbWl6YXRpb24iIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA4MHB4OyBtaW4td2lkdGg6IDgwcHg7Ij5PcHRpbWl6YXRpb24gU2NvcmUke2luZCgiaW1wYWN0Lm9wdGltaXphdGlvbiIpfTwvdGg+CiAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCIgZGF0YS1zb3J0LWJ5PSJpbXBhY3Quc2hyaW5raW5nIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogODBweDsgbWluLXdpZHRoOiA4MHB4OyI+U2hyaW5raW5nIFNjb3JlJHtpbmQoImltcGFjdC5zaHJpbmtpbmciKX08L3RoPgogICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9ImJnLWdyYXktNTAiIHN0", - "eWxlPSJ3aWR0aDogMTAwJTsiPjwvdGg+CiAgICAgICAgICBgOwogICAgICBzdWJIZWFkZXIuaW5uZXJIVE1MID0gYGA7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsZW5zID0gdGhpcy5zdGF0ZS5maWx0ZXJzLmtlZXBSdWxlc1swXTsKICAgICAgY29uc3QgaXNJZGVudGljYWxMZW5zID0gY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5NT0RVTEVTICYmCiAgICAgICAgbGVucyA9PT0gIklkZW50aWNhbCI7CiAgICAgIGNvbnN0IGlzU3Vic3VtZWRMZW5zID0gY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5NT0RVTEVTICYmCiAgICAgICAgbGVucyA9PT0gIlN1YnN1bWVkIjsKCiAgICAgIGlmIChpc0lkZW50aWNhbExlbnMgfHwgaXNTdWJzdW1lZExlbnMpIHsKICAgICAgICB0b3BIZWFkZXIuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1sZWZ0IHN0aWNreS1uYW1lIGJnLWdyYXktNTAgei0zMCIgZGF0YS1zb3J0LWJ5PSJuYW1lIiBzdHlsZT0id2lkdGg6IDYwMHB4OyBtaW4td2lkdGg6IDYwMHB4OyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlciBob3Zlcjp0ZXh0LWJsdWUtNjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsiPgogICAgICAgICAgICAgICAgICAgICR7dGl0bGV9JHtpbmQoIm5hbWUiKX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGg+CiAg", - "ICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWxlZnQgYmctZ3JheS01MCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogMTAwJTsiPiR7aXNJZGVudGljYWxMZW5zID8gJ0lkZW50aWNhbCBSdWxlcycgOiAnU3Vic3VtZWQgQnknfTwvdGg+CiAgICAgICAgICAgIGA7CiAgICAgICAgc3ViSGVhZGVyLmlubmVySFRNTCA9ICcnOwogICAgICB9IGVsc2UgewogICAgICAgIHRvcEhlYWRlci5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWxlZnQgc3RpY2t5LW5hbWUgYmctZ3JheS01MCB6LTMwIiBkYXRhLXNvcnQtYnk9Im5hbWUiIHN0eWxlPSJ3aWR0aDogNjAwcHg7IG1pbi13aWR0aDogNjAwcHg7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtYmx1ZS02MDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyI+CiAgICAgICAgICAgICAgICAgICAgJHt0aXRsZX0ke2luZCgibmFtZSIpfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICA8dGggY29sc3Bhbj0iNCIgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBiZy1ncmF5LTUwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyI+S2VwdCBJdGVtcyAoaGlnaGVyIGlzIHdvcnNlKTwvdGg+CiAg", - "ICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNvbHNwYW49IjMiIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDE1MHB4OyBtaW4td2lkdGg6IDE1MHB4OyI+UHJvcGVydGllcyBibG9ja2VkIGJ5IHJ1bGU8L3RoPgogICAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0iYmctZ3JheS01MCIgc3R5bGU9IndpZHRoOiAxMDAlOyI+PC90aD4KICAgICAgICAgICAgYDsKCiAgICAgICAgc3ViSGVhZGVyLmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICA8dGggY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAiIGRhdGEtc29ydC1ieT0ibWF0Y2hlcy50b3RhbCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+VG90YWwke2luZCgibWF0Y2hlcy50b3RhbCIpfTwvdGg+CiAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9Im1hdGNoZXMuY2xhc3NlcyIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6", - "IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+Q2xhc3NlcyR7aW5kKCJtYXRjaGVzLmNsYXNzZXMiKX08L3RoPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCIgZGF0YS1zb3J0LWJ5PSJtYXRjaGVzLmZpZWxkcyIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+RmllbGRzJHtpbmQoIm1hdGNoZXMuZmllbGRzIil9PC90aD4KICAgICAgICAgICAgICA8dGggY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAiIGRhdGEtc29ydC1ieT0ibWF0Y2hlcy5tZXRob2RzIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogMTAwcHg7IG1pbi13aWR0aDogMTAwcHg7Ij5NZXRob2RzJHtpbmQoIm1hdGNoZXMubWV0aG9kcyIpfTwvdGg+CiAgICAgICAgICAgIGA7CiAgICAgIH0KICAgIH0KCiAgICB0aGlzLmVsZW1lbnRzLnRhYmxlSGVhZGVycy5pbm5lckhUTUwgPSAiIjsKICAgIHRoaXMuZWxlbWVudHMudGFibGVIZWFkZXJzLmFwcGVuZCh0b3BIZWFkZXIsIHN1YkhlYWRlcik7CiAgfSwKCiAgcmVuZGVyRmxhdFJvd3MoZGF0YSkgewogICAgY29u", - "c3QgewogICAgICBjdXJyZW50VmlldwogICAgfSA9IHRoaXMuc3RhdGU7CiAgICBpZiAoIWRhdGEubGVuZ3RoKSB7CiAgICAgIHRoaXMuZWxlbWVudHMudGFibGVEYXRhLmlubmVySFRNTCA9CiAgICAgICAgYDx0cj48dGQgY29sc3Bhbj0iMTAiIGNsYXNzPSJ0ZXh0LWNlbnRlciBweS04IHRleHQtZ3JheS01MDAiPk5vIHJlc3VsdHMgZm91bmQuPC90ZD48L3RyPmA7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgY29uc3QgYnVpbGQgPSBickRhdGE/LmJ1aWxkSW5mbyB8fCB7fTsKICAgIGNvbnN0IHRvdGFsTGl2ZSA9IGdldExpdmVJdGVtQ291bnQoYnJEYXRhKTsKCiAgICBjb25zdCByZW5kZXJNYXRjaENlbGwgPSAoY291bnQsIHRvdGFsKSA9PiB7CiAgICAgIGNvbnN0IHBlcmMgPSB0b3RhbCA+IDAgPyAoY291bnQgLyB0b3RhbCAqIDEwMCkgOiAwOwogICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRNYXRjaENsYXNzKHBlcmMpOwogICAgICByZXR1cm4gYAogICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29u", - "dGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkICR7Y29sb3JDbGFzc30iPiR7cGVyYy50b0ZpeGVkKDEpfSU8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIG10LTEiPiR7Y291bnR9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgYDsKICAgIH07CgogICAgY29uc3QgcmVuZGVyU2NvcmVDZWxsID0gKGRpc2FsbG93Q291bnQsIHRvdGFsKSA9PiB7CiAgICAgIGNvbnN0IHBlcmMgPSB0b3RhbCA+IDAgPyAoMTAwIC0gKGRpc2FsbG93Q291bnQgLyB0b3RhbCAqIDEwMCkpIDogMTAwOwogICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRTY29yZUNsYXNzKHBlcmMpOwogICAgICByZXR1cm4gYAogICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA4MHB4OyBtaW4td2lkdGg6IDgwcHg7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtYm9sZCAke2NvbG9yQ2xhc3N9Ij4ke3BlcmMudG9GaXhlZCgxKX0lPC9zcGFuPgogICAgICAgICAg", - "ICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCBtdC0xIj4ke3RvdGFsIC0gZGlzYWxsb3dDb3VudH0vJHt0b3RhbH08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICBgOwogICAgfTsKCiAgICB0aGlzLmVsZW1lbnRzLnRhYmxlRGF0YS5pbm5lckhUTUwgPSBkYXRhLm1hcCgoaXRlbSkgPT4gewogICAgICBjb25zdCBjbGVhbmVkTmFtZSA9IGl0ZW0ubmFtZS5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgICAgIGNvbnN0IGVzY2FwZWROYW1lID0gZXNjYXBlSFRNTChjbGVhbmVkTmFtZSk7CiAgICAgIGxldCBuYW1lQ2VsbCA9ICIiOwogICAgICBpZiAoY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5NT0RVTEVTKSB7CiAgICAgICAgbmFtZUNlbGwgPSBgCiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGlja3ktbmFtZSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlciIgdGl0bGU9IiR7ZXNjYXBlZE5hbWV9IiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDYwMHB4OyBtaW4td2lkdGg6IDYwMHB4OyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IiBkYXRhLXJ1bGUtaWQ9IiR7aXRlbS5pZH0iPgogICAgICAgICAgICAgICAgPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7", - "IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+JHtlc2NhcGVkTmFtZX08L3ByZT4KICAgICAgICAgICAgICA8L3RkPmA7CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5QQUNLQUdFUykgewogICAgICAgIG5hbWVDZWxsID0gYAogICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RpY2t5LW5hbWUgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXIiIHRpdGxlPSIke2VzY2FwZWROYW1lfSIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA0MDBweDsgbWluLXdpZHRoOiA0MDBweDsiIGRhdGEtZmlsZS1vcmlnaW4taWQ9IiR7aXRlbS5pZH0iPgogICAgICAgICAgICAgICAgPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+JHtlc2NhcGVkTmFtZX08L3ByZT4KICAgICAgICAgICAgICA8L3RkPmA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmFtZUNlbGwgPQogICAgICAgICAgYDx0ZCBjbGFzcz0ic3RpY2t5LW5hbWUgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCIgdGl0bGU9IiR7ZXNjYXBlZE5hbWV9IiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDQwMHB4OyBtaW4td2lkdGg6IDQwMHB4OyI+", - "PHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7Ij4ke2VzY2FwZWROYW1lfTwvcHJlPjwvdGQ+YDsKICAgICAgfQoKICAgICAgaWYgKGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuUEFDS0FHRVMpIHsKICAgICAgICBjb25zdCBrZWVwUnVsZXNDZWxsID0KICAgICAgICAgIGA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogMTAwcHg7IG1pbi13aWR0aDogMTAwcHg7Ij4ke2l0ZW0ua2VlcFJ1bGVzfTwvdGQ+YDsKICAgICAgICBjb25zdCB0b3RhbEtlcHRDZWxsID0gcmVuZGVyTWF0Y2hDZWxsKGl0ZW0ubWF0Y2hlcy50b3RhbCwKICAgICAgICAgIHRvdGFsTGl2ZSk7CiAgICAgICAgY29uc3QgaW1wYWN0Q2VsbHMgPSBgCiAgICAgICAgICAgICAgJHtyZW5kZXJTY29yZUNlbGwoaXRlbS5pbXBhY3Qub2JmdXNjYXRpb24sIHRvdGFsTGl2ZSl9CiAgICAgICAgICAgICAgJHtyZW5kZXJTY29yZUNlbGwoaXRlbS5pbXBhY3Qub3B0aW1pemF0aW9uLCB0b3RhbExpdmUpfQogICAgICAgICAgICAgICR7cmVuZGVyU2NvcmVDZWxsKGl0ZW0uaW1wYWN0LnNocmlua2luZywgdG90YWxMaXZlKX0KICAgICAgICAgICAgYDsKICAgICAgICByZXR1cm4gYDx0ciBj", - "bGFzcz0idGFibGUtcm93IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpiZy1ncmF5LTUwIj4ke25hbWVDZWxsfSR7a2VlcFJ1bGVzQ2VsbH0ke3RvdGFsS2VwdENlbGx9JHtpbXBhY3RDZWxsc308dGQ+PC90ZD48L3RyPmA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgbGVucyA9IHRoaXMuc3RhdGUuZmlsdGVycy5rZWVwUnVsZXNbMF07CiAgICAgICAgY29uc3QgaXNJZGVudGljYWxMZW5zID0gY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5NT0RVTEVTICYmCiAgICAgICAgICBsZW5zID09PSAiSWRlbnRpY2FsIjsKICAgICAgICBjb25zdCBpc1N1YnN1bWVkTGVucyA9IGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUyAmJgogICAgICAgICAgbGVucyA9PT0gIlN1YnN1bWVkIjsKCiAgICAgICAgaWYgKGlzSWRlbnRpY2FsTGVucyB8fCBpc1N1YnN1bWVkTGVucykgewogICAgICAgICAgY29uc3QgcnVsZXMgPSBpc0lkZW50aWNhbExlbnMgPyBpdGVtLmlkZW50aWNhbFJ1bGVzIDogaXRlbQogICAgICAgICAgICAuc3Vic3VtZWRCeVJ1bGVzOwogICAgICAgICAgY29uc3QgcnVsZXNIdG1sID0gKHJ1bGVzIHx8IFtdKS5tYXAociA9PiBgCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtOyI+CiAgICAgICAgICAgICAgICAgIDxw", - "cmUgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsgbWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tdGV4dC1tYWluKTsiPiR7ZXNjYXBlSFRNTChyLnNvdXJjZSl9PC9wcmU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKS5qb2luKCIiKTsKICAgICAgICAgIHJldHVybiBgPHRyIGNsYXNzPSJ0YWJsZS1yb3cgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktNTAiPiR7bmFtZUNlbGx9PHRkIGNsYXNzPSJib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogMTAwJTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyI+JHtydWxlc0h0bWx9PC90ZD48L3RyPmA7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBpbXBhY3QgPSBpdGVtLmltcGFjdCB8fCBbXTsKICAgICAgICBjb25zdCBnZXRUYWcgPSAoYywgbGFiZWwpID0+IHsKICAgICAgICAgIGNvbnN0IGlzUmVzdHJpY3RlZCA9IGltcGFjdC5pbmNsdWRlcyhjKTsKICAgICAgICAgIGlmICghaXNSZXN0cmljdGVkKSByZXR1cm4gIiI7CiAgICAgICAgICBjb25zdCBjb2xvciA9ICJ2YXIoLS10ZXh0LXJlZC02MDApIjsKICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSAidmFyKC0tYmctcmVkLWxpZ2h0KSI7CiAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPSJpbXBhY3QtdGFnIiBzdHlsZT0iY29sb3I6ICR7Y29sb3J9OyBiYWNr", - "Z3JvdW5kLWNvbG9yOiAke2JnQ29sb3J9OyBib3JkZXItY29sb3I6ICR7Y29sb3J9OyBvcGFjaXR5OiAwLjg7Ij4ke2xhYmVsfTwvc3Bhbj5gOwogICAgICAgIH07CgogICAgICAgIGNvbnN0IGltcGFjdENlbGwgPSBgCiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9PQkZVU0NBVEUnLCAnT0JGVVNDQVRFJyl9PC90ZD4KICAgICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTEwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDUwcHg7IG1pbi13aWR0aDogNTBweDsiPiR7Z2V0VGFnKCdET05UX09QVElNSVpFJywgJ09QVElNSVpFJyl9PC90ZD4KICAgICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTEwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDUwcHg7IG1pbi13aWR0aDogNTBweDsiPiR7Z2V0VGFnKCdET05UX1NIUklOSycsICdTSFJJTksnKX08L3RkPgogICAgICAgICAgICBgOwoKICAgICAgICBjb25zdCBtYXRjaGVzQ2VsbHMgPSBgCiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoaXRlbS5tYXRjaGVzLnRvdGFsLCB0b3RhbExpdmUpfQogICAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxs", - "KGl0ZW0ubWF0Y2hlcy5jbGFzc2VzLCBidWlsZC5saXZlQ2xhc3NDb3VudCB8fCAwKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChpdGVtLm1hdGNoZXMuZmllbGRzLCBidWlsZC5saXZlRmllbGRDb3VudCB8fCAwKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChpdGVtLm1hdGNoZXMubWV0aG9kcywgYnVpbGQubGl2ZU1ldGhvZENvdW50IHx8IDApfQogICAgICAgICAgICBgOwogICAgICAgIHJldHVybiBgPHRyIGNsYXNzPSJ0YWJsZS1yb3cgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktNTAiPiR7bmFtZUNlbGx9JHttYXRjaGVzQ2VsbHN9JHtpbXBhY3RDZWxsfTx0ZD48L3RkPjwvdHI+YDsKICAgICAgfQogICAgfSkuam9pbigiIik7CiAgfSwKfTsKCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCAoKSA9PiBBcHAuaW5pdCgpKTs8L3NjcmlwdD4KICAgIDxzY3JpcHQ+Ly8gQ29weXJpZ2h0IChjKSAyMDI2LCB0aGUgUjggcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgYW5hbHl6aW5nIEJsYXN0IFJhZGl1", - "cyBkYXRhLgogKi8KCmZ1bmN0aW9uIGdldERpc2FsbG93T2JmdXNjYXRpb25Db3VudChkYXRhKSB7CiAgcmV0dXJuIGdldFNjb3JlKGRhdGEsICdET05UX09CRlVTQ0FURScpOwp9CgpmdW5jdGlvbiBnZXREaXNhbGxvd09wdGltaXphdGlvbkNvdW50KGRhdGEpIHsKICByZXR1cm4gZ2V0U2NvcmUoZGF0YSwgJ0RPTlRfT1BUSU1JWkUnKTsKfQoKZnVuY3Rpb24gZ2V0RGlzYWxsb3dTaHJpbmtpbmdDb3VudChkYXRhKSB7CiAgcmV0dXJuIGdldFNjb3JlKGRhdGEsICdET05UX1NIUklOSycpOwp9CgpmdW5jdGlvbiBnZXRMaXZlSXRlbUNvdW50KGRhdGEpIHsKICBpZiAoIWRhdGEgfHwgIWRhdGEuYnVpbGRJbmZvKSByZXR1cm4gMDsKICByZXR1cm4gKGRhdGEuYnVpbGRJbmZvLmxpdmVDbGFzc0NvdW50IHx8IDApICsKICAgICAgICAgKGRhdGEuYnVpbGRJbmZvLmxpdmVGaWVsZENvdW50IHx8IDApICsKICAgICAgICAgKGRhdGEuYnVpbGRJbmZvLmxpdmVNZXRob2RDb3VudCB8fCAwKTsKfQoKLyoqCiAqIFJldHVybnMgZGV0YWlsZWQgY291bnRzIGZvciB0aGUgc3RhdHMgdGFibGUuCiAqLwpmdW5jdGlvbiBnZXREZXRhaWxlZFN0YXRzKGRhdGEpIHsKICBpZiAoIWRhdGEpIHJldHVybiBudWxsOwoKICBjb25zdCBidWlsZCA9IGRhdGEuYnVpbGRJbmZvIHx8IHt9OwogIGNvbnN0IHN0YXRzID0gewogICAgY2xhc3NlczogeyB0b3RhbDogYnVpbGQubGl2ZUNsYXNzQ291bnQgfHwgMCwgb2JmdXNjYXRpb246IDAsIG9wdGltaXph", - "dGlvbjogMCwgc2hyaW5raW5nOiAwIH0sCiAgICBmaWVsZHM6IHsgdG90YWw6IGJ1aWxkLmxpdmVGaWVsZENvdW50IHx8IDAsIG9iZnVzY2F0aW9uOiAwLCBvcHRpbWl6YXRpb246IDAsIHNocmlua2luZzogMCB9LAogICAgbWV0aG9kczogeyB0b3RhbDogYnVpbGQubGl2ZU1ldGhvZENvdW50IHx8IDAsIG9iZnVzY2F0aW9uOiAwLCBvcHRpbWl6YXRpb246IDAsIHNocmlua2luZzogMCB9LAogICAgb3ZlcmFsbDogeyB0b3RhbDogZ2V0TGl2ZUl0ZW1Db3VudChkYXRhKSwgb2JmdXNjYXRpb246IDAsIG9wdGltaXphdGlvbjogMCwgc2hyaW5raW5nOiAwIH0KICB9OwoKICBjb25zdCBjb25zdHJhaW50c01hcCA9IGdldENvbnN0cmFpbnRzTWFwKGRhdGEpOwogIGNvbnN0IHJ1bGVzTWFwID0gZ2V0UnVsZXNDb25zdHJhaW50c01hcChkYXRhKTsKCiAgY29uc3QgcHJvY2Vzc1RhYmxlID0gKHRhYmxlLCBrZXkpID0+IHsKICAgIGlmICghdGFibGUpIHJldHVybjsKICAgIHRhYmxlLmZvckVhY2goaXRlbSA9PiB7CiAgICAgIGNvbnN0IGtlcHRCeSA9IGl0ZW0ua2VwdEJ5IHx8IFtdOwogICAgICBjb25zdCBjb25zdHJhaW50cyA9IGtlcHRCeS5mbGF0TWFwKHJ1bGVJZCA9PiBjb25zdHJhaW50c01hcC5nZXQocnVsZXNNYXAuZ2V0KHJ1bGVJZCkpIHx8IFtdKTsKICAgICAgaWYgKGNvbnN0cmFpbnRzLmluY2x1ZGVzKCdET05UX09CRlVTQ0FURScpKSBzdGF0c1trZXldLm9iZnVzY2F0aW9uKys7CiAgICAgIGlmIChjb25zdHJhaW50", - "cy5pbmNsdWRlcygnRE9OVF9PUFRJTUlaRScpKSBzdGF0c1trZXldLm9wdGltaXphdGlvbisrOwogICAgICBpZiAoY29uc3RyYWludHMuaW5jbHVkZXMoJ0RPTlRfU0hSSU5LJykpIHN0YXRzW2tleV0uc2hyaW5raW5nKys7CiAgICB9KTsKICB9OwoKICBwcm9jZXNzVGFibGUoZGF0YS5rZXB0Q2xhc3NJbmZvVGFibGUsICdjbGFzc2VzJyk7CiAgcHJvY2Vzc1RhYmxlKGRhdGEua2VwdEZpZWxkSW5mb1RhYmxlLCAnZmllbGRzJyk7CiAgcHJvY2Vzc1RhYmxlKGRhdGEua2VwdE1ldGhvZEluZm9UYWJsZSwgJ21ldGhvZHMnKTsKCiAgc3RhdHMub3ZlcmFsbC5vYmZ1c2NhdGlvbiA9IHN0YXRzLmNsYXNzZXMub2JmdXNjYXRpb24gKyBzdGF0cy5maWVsZHMub2JmdXNjYXRpb24gKyBzdGF0cy5tZXRob2RzLm9iZnVzY2F0aW9uOwogIHN0YXRzLm92ZXJhbGwub3B0aW1pemF0aW9uID0gc3RhdHMuY2xhc3Nlcy5vcHRpbWl6YXRpb24gKyBzdGF0cy5maWVsZHMub3B0aW1pemF0aW9uICsgc3RhdHMubWV0aG9kcy5vcHRpbWl6YXRpb247CiAgc3RhdHMub3ZlcmFsbC5zaHJpbmtpbmcgPSBzdGF0cy5jbGFzc2VzLnNocmlua2luZyArIHN0YXRzLmZpZWxkcy5zaHJpbmtpbmcgKyBzdGF0cy5tZXRob2RzLnNocmlua2luZzsKCiAgcmV0dXJuIHN0YXRzOwp9CgpmdW5jdGlvbiBnZXRDb25zdHJhaW50c01hcChkYXRhKSB7CiAgY29uc3QgY29uc3RyYWludHNNYXAgPSBuZXcgTWFwKCk7CiAgaWYgKGRhdGEua2VlcENvbnN0cmFpbnRzVGFi", - "bGUpIHsKICAgIGRhdGEua2VlcENvbnN0cmFpbnRzVGFibGUuZm9yRWFjaChjID0+IHsKICAgICAgY29uc3RyYWludHNNYXAuc2V0KGMuaWQsIGMuY29uc3RyYWludHMgfHwgW10pOwogICAgfSk7CiAgfQogIHJldHVybiBjb25zdHJhaW50c01hcDsKfQoKZnVuY3Rpb24gZ2V0UnVsZXNDb25zdHJhaW50c01hcChkYXRhKSB7CiAgY29uc3QgcnVsZXNNYXAgPSBuZXcgTWFwKCk7CiAgaWYgKGRhdGEua2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlKSB7CiAgICBkYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZS5mb3JFYWNoKHIgPT4gewogICAgICBydWxlc01hcC5zZXQoci5pZCwgci5jb25zdHJhaW50c0lkKTsKICAgIH0pOwogIH0KICByZXR1cm4gcnVsZXNNYXA7Cn0KCmZ1bmN0aW9uIGdldEltcGFjdEFycmF5KGNvbnN0cmFpbnRzKSB7CiAgaWYgKCFjb25zdHJhaW50cykgcmV0dXJuIFtdOwogIHJldHVybiBjb25zdHJhaW50czsKfQoKLyoqCiAqIFJldHVybnMgZm9ybWF0dGVkIHJ1bGVzIGZvciB0aGUgdGFibGUuCiAqLwpmdW5jdGlvbiBnZXRSdWxlcyhkYXRhKSB7CiAgaWYgKCFkYXRhIHx8ICFkYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZSkgcmV0dXJuIFtdOwogIGNvbnN0IGNvbnN0cmFpbnRzTWFwID0gZ2V0Q29uc3RyYWludHNNYXAoZGF0YSk7CiAgcmV0dXJuIGRhdGEua2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlLm1hcChydWxlID0+IHsKICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNNYXAu", - "Z2V0KHJ1bGUuY29uc3RyYWludHNJZCk7CiAgICBjb25zdCBiciA9IHJ1bGUuYmxhc3RSYWRpdXMgfHwge307CiAgICBjb25zdCBjbGFzc2VzID0gKGJyLmNsYXNzQmxhc3RSYWRpdXMgfHwgW10pLmxlbmd0aDsKICAgIGNvbnN0IGZpZWxkcyA9IChici5maWVsZEJsYXN0UmFkaXVzIHx8IFtdKS5sZW5ndGg7CiAgICBjb25zdCBtZXRob2RzID0gKGJyLm1ldGhvZEJsYXN0UmFkaXVzIHx8IFtdKS5sZW5ndGg7CiAgICByZXR1cm4gewogICAgICBpZDogcnVsZS5pZCwKICAgICAgbmFtZTogcnVsZS5zb3VyY2UsCiAgICAgIGltcGFjdDogZ2V0SW1wYWN0QXJyYXkoY29uc3RyYWludHMpLAogICAgICBtYXRjaGVzOiB7CiAgICAgICAgY2xhc3NlcywKICAgICAgICBmaWVsZHMsCiAgICAgICAgbWV0aG9kcywKICAgICAgICB0b3RhbDogY2xhc3NlcyArIGZpZWxkcyArIG1ldGhvZHMKICAgICAgfSwKICAgICAgc3Vic3VtZWRCeTogYnIuc3Vic3VtZWRCeSB8fCBbXQogICAgfTsKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgZm9ybWF0dGVkIGZpbGVzIChvcmlnaW5zKSBmb3IgdGhlIHRhYmxlLgogKi8KZnVuY3Rpb24gZ2V0UnVsZUZpbGVzKGRhdGEpIHsKICBpZiAoIWRhdGEgfHwgIWRhdGEuZmlsZU9yaWdpblRhYmxlIHx8ICFkYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZSkgcmV0dXJuIFtdOwoKICBjb25zdCBmaWxlTWFwID0gbmV3IE1hcCgpOwogIGNvbnN0IGNvbnN0cmFpbnRzTWFwID0gZ2V0Q29uc3RyYWludHNNYXAo", - "ZGF0YSk7CiAgZGF0YS5maWxlT3JpZ2luVGFibGUuZm9yRWFjaChmID0+IHsKICAgIGNvbnN0IG1hdmVuTmFtZSA9IGZvcm1hdE1hdmVuQ29vcmRpbmF0ZShmLm1hdmVuQ29vcmRpbmF0ZSk7CiAgICBmaWxlTWFwLnNldChmLmlkLCB7CiAgICAgIGlkOiBmLmlkLAogICAgICBuYW1lOiBtYXZlbk5hbWUgfHwgZi5maWxlbmFtZSwKICAgICAga2VlcFJ1bGVzOiAwLAogICAgICBtYXRjaGVzOiB7IGNsYXNzZXM6IG5ldyBTZXQoKSwgZmllbGRzOiBuZXcgU2V0KCksIG1ldGhvZHM6IG5ldyBTZXQoKSB9LAogICAgICBpbXBhY3Q6IHsKICAgICAgICBvYmZ1c2NhdGlvbjogbmV3IFNldCgpLAogICAgICAgIG9wdGltaXphdGlvbjogbmV3IFNldCgpLAogICAgICAgIHNocmlua2luZzogbmV3IFNldCgpCiAgICAgIH0KICAgIH0pOwogIH0pOwoKICBkYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZS5mb3JFYWNoKHJ1bGUgPT4gewogICAgY29uc3QgZmlsZUlkID0gcnVsZS5vcmlnaW4/LmZpbGVPcmlnaW5JZDsKICAgIGNvbnN0IGZpbGVFbnRyeSA9IGZpbGVNYXAuZ2V0KGZpbGVJZCk7CiAgICBpZiAoZmlsZUVudHJ5KSB7CiAgICAgIGZpbGVFbnRyeS5rZWVwUnVsZXMrKzsKICAgICAgY29uc3QgYnIgPSBydWxlLmJsYXN0UmFkaXVzIHx8IHt9OwogICAgICBjb25zdCBjID0gYnIuY2xhc3NCbGFzdFJhZGl1cyB8fCBbXTsKICAgICAgY29uc3QgZiA9IGJyLmZpZWxkQmxhc3RSYWRpdXMgfHwgW107CiAgICAgIGNvbnN0IG0gPSBi", - "ci5tZXRob2RCbGFzdFJhZGl1cyB8fCBbXTsKCiAgICAgIGMuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkubWF0Y2hlcy5jbGFzc2VzLmFkZChpZCkpOwogICAgICBmLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5Lm1hdGNoZXMuZmllbGRzLmFkZChpZCkpOwogICAgICBtLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5Lm1hdGNoZXMubWV0aG9kcy5hZGQoaWQpKTsKCiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNNYXAuZ2V0KHJ1bGUuY29uc3RyYWludHNJZCkgfHwgW107CiAgICAgIGlmIChjb25zdHJhaW50cy5pbmNsdWRlcygnRE9OVF9PQkZVU0NBVEUnKSkgewogICAgICAgIGMuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0Lm9iZnVzY2F0aW9uLmFkZCgnYycgKyBpZCkpOwogICAgICAgIGYuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0Lm9iZnVzY2F0aW9uLmFkZCgnZicgKyBpZCkpOwogICAgICAgIG0uZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0Lm9iZnVzY2F0aW9uLmFkZCgnbScgKyBpZCkpOwogICAgICB9CiAgICAgIGlmIChjb25zdHJhaW50cy5pbmNsdWRlcygnRE9OVF9PUFRJTUlaRScpKSB7CiAgICAgICAgYy5mb3JFYWNoKGlkID0+IGZpbGVFbnRyeS5pbXBhY3Qub3B0aW1pemF0aW9uLmFkZCgnYycgKyBpZCkpOwogICAgICAgIGYuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0Lm9wdGltaXphdGlvbi5hZGQoJ2YnICsgaWQpKTsKICAgICAgICBtLmZvckVhY2go", - "aWQgPT4gZmlsZUVudHJ5LmltcGFjdC5vcHRpbWl6YXRpb24uYWRkKCdtJyArIGlkKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbnN0cmFpbnRzLmluY2x1ZGVzKCdET05UX1NIUklOSycpKSB7CiAgICAgICAgYy5mb3JFYWNoKGlkID0+IGZpbGVFbnRyeS5pbXBhY3Quc2hyaW5raW5nLmFkZCgnYycgKyBpZCkpOwogICAgICAgIGYuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0LnNocmlua2luZy5hZGQoJ2YnICsgaWQpKTsKICAgICAgICBtLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5LmltcGFjdC5zaHJpbmtpbmcuYWRkKCdtJyArIGlkKSk7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgaWYgKGRhdGEuZ2xvYmFsS2VlcFJ1bGVCbGFzdFJhZGl1c1RhYmxlKSB7CiAgICBkYXRhLmdsb2JhbEtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZS5mb3JFYWNoKHJ1bGUgPT4gewogICAgICBjb25zdCBmaWxlSWQgPSBydWxlLm9yaWdpbj8uZmlsZU9yaWdpbklkOwogICAgICBjb25zdCBmaWxlRW50cnkgPSBmaWxlTWFwLmdldChmaWxlSWQpOwogICAgICBpZiAoZmlsZUVudHJ5KSB7CiAgICAgICAgZmlsZUVudHJ5LmtlZXBSdWxlcysrOwogICAgICB9CiAgICB9KTsKICB9CgogIHJldHVybiBBcnJheS5mcm9tKGZpbGVNYXAudmFsdWVzKCkpLm1hcChmID0+ICh7CiAgICBpZDogZi5pZCwKICAgIG5hbWU6IGYubmFtZSwKICAgIGtlZXBSdWxlczogZi5rZWVwUnVsZXMsCiAgICBtYXRjaGVzOiB7CiAgICAgIGNsYXNzZXM6IGYubWF0Y2hl", - "cy5jbGFzc2VzLnNpemUsCiAgICAgIGZpZWxkczogZi5tYXRjaGVzLmZpZWxkcy5zaXplLAogICAgICBtZXRob2RzOiBmLm1hdGNoZXMubWV0aG9kcy5zaXplLAogICAgICB0b3RhbDogZi5tYXRjaGVzLmNsYXNzZXMuc2l6ZSArIGYubWF0Y2hlcy5maWVsZHMuc2l6ZSArIGYubWF0Y2hlcy5tZXRob2RzLnNpemUKICAgIH0sCiAgICBpbXBhY3Q6IHsKICAgICAgb2JmdXNjYXRpb246IGYuaW1wYWN0Lm9iZnVzY2F0aW9uLnNpemUsCiAgICAgIG9wdGltaXphdGlvbjogZi5pbXBhY3Qub3B0aW1pemF0aW9uLnNpemUsCiAgICAgIHNocmlua2luZzogZi5pbXBhY3Quc2hyaW5raW5nLnNpemUKICAgIH0KICB9KSk7Cn0KCmZ1bmN0aW9uIGZvcm1hdERlc2NyaXB0b3IoZGVzYykgewogIGlmICghZGVzYykgcmV0dXJuICJVbmtub3duIjsKICBsZXQgZGltZW5zaW9ucyA9IDA7CiAgd2hpbGUgKGRlc2NbZGltZW5zaW9uc10gPT09ICdbJykgewogICAgZGltZW5zaW9ucysrOwogIH0KICBsZXQgYmFzZSA9IGRlc2Muc3Vic3RyaW5nKGRpbWVuc2lvbnMpOwogIGxldCByZXMgPSAiIjsKICBpZiAoYmFzZS5zdGFydHNXaXRoKCdMJykgJiYgYmFzZS5lbmRzV2l0aCgnOycpKSB7CiAgICByZXMgPSBiYXNlLnN1YnN0cmluZygxLCBiYXNlLmxlbmd0aCAtIDEpLnJlcGxhY2UoL1wvL2csICcuJyk7CiAgfSBlbHNlIGlmIChiYXNlLmxlbmd0aCA9PT0gMSkgewogICAgc3dpdGNoIChiYXNlWzBdKSB7CiAgICAgIGNhc2UgJ1YnOgogICAgICAg", - "IHJlcyA9ICJ2b2lkIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnWic6CiAgICAgICAgcmVzID0gImJvb2xlYW4iOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdCJzoKICAgICAgICByZXMgPSAiYnl0ZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ1MnOgogICAgICAgIHJlcyA9ICJzaG9ydCI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ0MnOgogICAgICAgIHJlcyA9ICJjaGFyIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnSSc6CiAgICAgICAgcmVzID0gImludCI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ0onOgogICAgICAgIHJlcyA9ICJsb25nIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnRic6CiAgICAgICAgcmVzID0gImZsb2F0IjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnRCc6CiAgICAgICAgcmVzID0gImRvdWJsZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmVzID0gYmFzZTsKICAgIH0KICB9IGVsc2UgewogICAgcmVzID0gYmFzZTsKICB9CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb25zOyBpKyspIHsKICAgIHJlcyArPSAiW10iOwogIH0KICByZXR1cm4gcmVzOwp9CgpmdW5jdGlvbiBmb3JtYXRNZXRob2ROYW1lKG1ldGhvZFJlZiwgZGF0YSwgdHlwZVJlZk1hcCkgewogIGlmICghbWV0aG9kUmVmKSByZXR1cm4gIlVua25vd24gbWV0aG9kIjsKICBjb25zdCBjbGFzc05hbWUgPSBmb3JtYXREZXNjcmlwdG9yKHR5", - "cGVSZWZNYXAuZ2V0KG1ldGhvZFJlZi5jbGFzc1JlZmVyZW5jZUlkKSk7CgogIGNvbnN0IHByb3RvID0gKGRhdGEucHJvdG9SZWZlcmVuY2VUYWJsZSB8fCBbXSkuZmluZChwID0+IHAuaWQgPT09IG1ldGhvZFJlZi5wcm90b1JlZmVyZW5jZUlkKTsKICBsZXQgcGFyYW1zID0gIiI7CiAgaWYgKHByb3RvICYmIHByb3RvLnBhcmFtZXRlcnNJZCkgewogICAgY29uc3QgbGlzdCA9IChkYXRhLnR5cGVSZWZlcmVuY2VMaXN0VGFibGUgfHwgW10pLmZpbmQobCA9PiBsLmlkID09PSBwcm90by5wYXJhbWV0ZXJzSWQpOwogICAgaWYgKGxpc3QgJiYgbGlzdC50eXBlUmVmZXJlbmNlSWRzKSB7CiAgICAgIHBhcmFtcyA9IGxpc3QudHlwZVJlZmVyZW5jZUlkcy5tYXAoaWQgPT4gZm9ybWF0RGVzY3JpcHRvcih0eXBlUmVmTWFwLmdldChpZCkpKS5qb2luKCcsICcpOwogICAgfQogIH0KICByZXR1cm4gYCR7Y2xhc3NOYW1lfS4ke21ldGhvZFJlZi5uYW1lfSgke3BhcmFtc30pYDsKfQoKZnVuY3Rpb24gZm9ybWF0RmllbGROYW1lKGZpZWxkUmVmLCBkYXRhLCB0eXBlUmVmTWFwKSB7CiAgaWYgKCFmaWVsZFJlZikgcmV0dXJuICJVbmtub3duIGZpZWxkIjsKICBjb25zdCBjbGFzc05hbWUgPSBmb3JtYXREZXNjcmlwdG9yKHR5cGVSZWZNYXAuZ2V0KGZpZWxkUmVmLmNsYXNzUmVmZXJlbmNlSWQpKTsKICByZXR1cm4gYCR7Y2xhc3NOYW1lfS4ke2ZpZWxkUmVmLm5hbWV9YDsKfQoKZnVuY3Rpb24gZm9ybWF0TWF2ZW5Db29yZGluYXRlKG0p", - "IHsKICBpZiAoIW0gfHwgIW0uZ3JvdXBJZCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIGAke20uZ3JvdXBJZH06JHttLmFydGlmYWN0SWR9OiR7bS52ZXJzaW9ufWA7Cn0KCmZ1bmN0aW9uIGVzY2FwZUhUTUwoc3RyKSB7CiAgaWYgKCFzdHIpIHJldHVybiAiIjsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1smPD4iJ10vZywgZnVuY3Rpb24obSkgewogICAgcmV0dXJuIHsKICAgICAgJyYnOiAnJmFtcDsnLAogICAgICAnPCc6ICcmbHQ7JywKICAgICAgJz4nOiAnJmd0OycsCiAgICAgICciJzogJyZxdW90OycsCiAgICAgICInIjogJyYjMzk7JwogICAgfVttXTsKICB9KTsKfQoKLyoqCiAqIFNoYXJlZCBoZWxwZXIgdG8gY291bnQga2VwdCBpdGVtcyB0aGF0IGhhdmUgYSBzcGVjaWZpYyBjb25zdHJhaW50LgogKiBBbiBpdGVtIGlzIGNvdW50ZWQgaWYgQU5ZIG9mIHRoZSBrZWVwIHJ1bGVzIHRoYXQga2VlcCBpdCBoYXMgdGhlIHNwZWNpZmllZCBjb25zdHJhaW50LgogKi8KZnVuY3Rpb24gZ2V0U2NvcmUoZGF0YSwgY29uc3RyYWludE5hbWUpIHsKICBpZiAoIWRhdGEpIHJldHVybiAwOwoKICBjb25zdCBjb25zdHJhaW50c01hcCA9IGdldENvbnN0cmFpbnRzTWFwKGRhdGEpOwogIGNvbnN0IHJ1bGVzTWFwID0gZ2V0UnVsZXNDb25zdHJhaW50c01hcChkYXRhKTsKCiAgbGV0IGNvdW50ID0gMDsKICBjb25zdCB0YWJsZXMgPSBbCiAgICBkYXRhLmtlcHRDbGFzc0luZm9UYWJsZSwKICAgIGRhdGEua2VwdEZpZWxkSW5mb1RhYmxl", - "LAogICAgZGF0YS5rZXB0TWV0aG9kSW5mb1RhYmxlCiAgXTsKCiAgdGFibGVzLmZvckVhY2godGFibGUgPT4gewogICAgaWYgKHRhYmxlKSB7CiAgICAgIHRhYmxlLmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgY29uc3QgaGFzUnVsZVdpdGhDb25zdHJhaW50ID0gKGl0ZW0ua2VwdEJ5IHx8IFtdKS5zb21lKHJ1bGVJZCA9PiB7CiAgICAgICAgICBjb25zdCBjb25zdHJhaW50c0lkID0gcnVsZXNNYXAuZ2V0KHJ1bGVJZCk7CiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzTWFwLmdldChjb25zdHJhaW50c0lkKTsKICAgICAgICAgIHJldHVybiBjb25zdHJhaW50cyAmJiBjb25zdHJhaW50cy5pbmNsdWRlcyhjb25zdHJhaW50TmFtZSk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGhhc1J1bGVXaXRoQ29uc3RyYWludCkgewogICAgICAgICAgY291bnQrKzsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0pOwogIHJldHVybiBjb3VudDsKfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K")); + "Cn0KCm1lc3NhZ2UgVHlwZVJlZmVyZW5jZUxpc3QgewogIGludDMyIGlkID0gMTsKICByZXBlYXRlZCBpbnQzMiB0eXBlX3JlZmVyZW5jZV9pZHMgPSAyOwp9CgovLyBPcmlnaW5zOgoKbWVzc2FnZSBGaWxlT3JpZ2luIHsKICBpbnQzMiBpZCA9IDE7CiAgc3RyaW5nIGZpbGVuYW1lID0gMjsKICBNYXZlbkNvb3JkaW5hdGUgbWF2ZW5fY29vcmRpbmF0ZSA9IDM7CiAgYm9vbCBwcm92aWRlZF9ieV9idWlsZF9zeXN0ZW0gPSA0Owp9CgovLyBUaGUgaWRzIG9mIENsYXNzRmlsZUluSmFyT3JpZ2luIGFuZCBGaWxlT3JpZ2luIGFyZSBub24tb3ZlcmxhcHBpbmcKLy8gYnkgZGVzaWduLCBzbyB0aGF0IGEgc2luZ2xlIGludDMyIGlkIGNhbiBiZSB1c2VkIHRvCi8vIHVuYW1iaWd1b3VzbHkgcmVmZXJlbmNlIGEgQ2xhc3NGaWxlSW5KYXJPcmlnaW4gb3IgRmlsZU9yaWdpbi4KbWVzc2FnZSBDbGFzc0ZpbGVJbkphck9yaWdpbiB7CiAgaW50MzIgaWQgPSAxOwogIGludDMyIGZpbGVfb3JpZ2luX2lkID0gMjsKICBzdHJpbmcgZW50cnkgPSAzOwp9CgovLyBJbnRlbnRpb25hbGx5IGRvZXNuJ3QgZGVjbGFyZSBhbiBpZCBzaW5jZSBlYWNoIGtlZXAgcnVsZSBoYXMgaXRzIG93bgovLyBUZXh0RmlsZU9yaWdpbiwgaS5lLiwgdGhlcmUgaXMgbm8gc2hhcmluZyBvZiBUZXh0RmlsZU9yaWdpbi4KbWVzc2FnZSBUZXh0RmlsZU9yaWdpbiB7CiAgLy8gSWQgaW50byBGaWxlT3JpZ2luCiAgaW50MzIgZmlsZV9vcmlnaW5faWQgPSAxOwogIGlu", + "dDMyIGxpbmVfbnVtYmVyID0gMjsKICBpbnQzMiBjb2x1bW5fbnVtYmVyID0gMzsKfQoKbWVzc2FnZSBNYXZlbkNvb3JkaW5hdGUgewogIGludDMyIGlkID0gMTsKICBzdHJpbmcgZ3JvdXBfaWQgPSAyOwogIHN0cmluZyBhcnRpZmFjdF9pZCA9IDM7CiAgc3RyaW5nIHZlcnNpb24gPSA0Owp9CgptZXNzYWdlIEJ1aWxkSW5mbyB7CiAgaW50MzIgY2xhc3NfY291bnQgPSAxOwogIGludDMyIGZpZWxkX2NvdW50ID0gMjsKICBpbnQzMiBtZXRob2RfY291bnQgPSAzOwogIGludDMyIGxpdmVfY2xhc3NfY291bnQgPSA0OwogIGludDMyIGxpdmVfZmllbGRfY291bnQgPSA1OwogIGludDMyIGxpdmVfbWV0aG9kX2NvdW50ID0gNjsKfQoKLy8gQ29udGFpbmVyLgoKbWVzc2FnZSBCbGFzdFJhZGl1c0NvbnRhaW5lciB7CiAgLy8gT3JpZ2lucy4KICByZXBlYXRlZCBGaWxlT3JpZ2luIGZpbGVfb3JpZ2luX3RhYmxlID0gMTsKICByZXBlYXRlZCBDbGFzc0ZpbGVJbkphck9yaWdpbiBjbGFzc19maWxlX2luX2phcl9vcmlnaW5fdGFibGUgPSAyOwogIHJlcGVhdGVkIE1hdmVuQ29vcmRpbmF0ZSBtYXZlbl9jb29yZGluYXRlX3RhYmxlID0gMzsKCiAgLy8gUmVmZXJlbmNlcy4KICByZXBlYXRlZCBGaWVsZFJlZmVyZW5jZSBmaWVsZF9yZWZlcmVuY2VfdGFibGUgPSA0OwogIHJlcGVhdGVkIE1ldGhvZFJlZmVyZW5jZSBtZXRob2RfcmVmZXJlbmNlX3RhYmxlID0gNTsKICByZXBlYXRlZCBQcm90b1JlZmVyZW5jZSBwcm90b19yZWZlcmVu", + "Y2VfdGFibGUgPSA2OwogIHJlcGVhdGVkIFR5cGVSZWZlcmVuY2UgdHlwZV9yZWZlcmVuY2VfdGFibGUgPSA3OwogIHJlcGVhdGVkIFR5cGVSZWZlcmVuY2VMaXN0IHR5cGVfcmVmZXJlbmNlX2xpc3RfdGFibGUgPSA4OwoKICAvLyBLZXB0IGl0ZW1zLgogIHJlcGVhdGVkIEtlcHRDbGFzc0luZm8ga2VwdF9jbGFzc19pbmZvX3RhYmxlID0gOTsKICByZXBlYXRlZCBLZXB0RmllbGRJbmZvIGtlcHRfZmllbGRfaW5mb190YWJsZSA9IDEwOwogIHJlcGVhdGVkIEtlcHRNZXRob2RJbmZvIGtlcHRfbWV0aG9kX2luZm9fdGFibGUgPSAxMTsKCiAgLy8gS2VlcCBzcGVjaWZpY2F0aW9ucy4KICByZXBlYXRlZCBLZWVwQ29uc3RyYWludHMga2VlcF9jb25zdHJhaW50c190YWJsZSA9IDEyOwogIHJlcGVhdGVkIEtlZXBSdWxlQmxhc3RSYWRpdXMga2VlcF9ydWxlX2JsYXN0X3JhZGl1c190YWJsZSA9IDEzOwogIHJlcGVhdGVkIEdsb2JhbEtlZXBSdWxlQmxhc3RSYWRpdXMgZ2xvYmFsX2tlZXBfcnVsZV9ibGFzdF9yYWRpdXNfdGFibGUgPSAxNDsKCiAgLy8gQnVpbGQgaW5mby4KICBCdWlsZEluZm8gYnVpbGRfaW5mbyA9IDE1Owp9Cjwvc2NyaXB0PgogICAgPHNjcmlwdCBpZD0iYmxhc3RyYWRpdXMtZGF0YSIgdHlwZT0iYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIj48L3NjcmlwdD4KICAgIDxzY3JpcHQ+Ly8gQ29weXJpZ2h0IChjKSAyMDI2LCB0aGUgUjggcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZp", + "bGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFQUExJQ0FUSU9OIExPR0lDCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFRoaXMgc2NyaXB0IGhhbmRsZXMgdGhlIGludGVyYWN0aXZlIGZlYXR1cmVzIG9mIHRoZSBSZXBvcnQuCiAgIEl0IGlzIGRpdmlkZWQgaW50bzoKICAgMS4gQ29uc3RhbnRzICYgQ29uZmlndXJhdGlvbgogICAyLiBVSSBVdGlsaXRpZXMgKERPTSBoZWxwZXJzKQogICAzLiBNYWluIEFwcCBDb250cm9sbGVyIChSb3V0ZXIpCiAgIDQuIFJlcG9ydEFwcCAoVGhlIG1haW4gdGFibGUvZ3JpZCB2aWV3KQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyoqCiAqIEdsb2JhbCBDb25zdGFudHMgdXNlZCB0aHJvdWdob3V0IHRoZSBhcHBsaWNhdGlvbi4KICovCmNvbnN0IENPTlNUQU5UUyA9IHsKICBWSUVXUzogewogICAgTU9EVUxFUzogIm1vZHVsZXMiLAogICAg", + "UEFDS0FHRVM6ICJwYWNrYWdlcyIsCiAgICBERVRBSUxTOiAiZGV0YWlscyIsCiAgICBGSUxFX0RFVEFJTFM6ICJmaWxlLWRldGFpbHMiCiAgfSwKICBERUZBVUxUUzogewogICAgQUdHUkVHQVRFRDogIkFnZ3JlZ2F0ZWQiCiAgfSwKfTsKCi8qKgogKiBVSSBVdGlsaXRpZXMKICogQ29sbGVjdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciBET00gbWFuaXB1bGF0aW9uIGFuZCBjb21tb24gVUkgcGF0dGVybnMuCiAqLwpjb25zdCBVSVV0aWxzID0gewogIC8qKgogICAqIFJldHVybnMgdGhlIENTUyBjbGFzcyBmb3Igc2NvcmUgcGVyY2VudGFnZSBjb2xvcmluZy4KICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHBlcmNlbnRhZ2UgLSBUaGUgc2NvcmUgcGVyY2VudGFnZSAoMC0xMDAgb3IgIi0tIikuCiAgICogQHJldHVybnMge3N0cmluZ30gQ1NTIGNsYXNzIG5hbWUuCiAgICovCiAgZ2V0U2NvcmVDbGFzcyhwZXJjZW50YWdlKSB7CiAgICBpZiAocGVyY2VudGFnZSA9PT0gIi0tIikgcmV0dXJuICJ0ZXh0LWdyYXktNTAwIjsKICAgIGlmIChwZXJjZW50YWdlID49IDgwKSByZXR1cm4gInRleHQtZ3JlZW4tNjAwIjsKICAgIGlmIChwZXJjZW50YWdlID49IDYwKSByZXR1cm4gInRleHQteWVsbG93LTYwMCI7CiAgICByZXR1cm4gInRleHQtcmVkLTYwMCI7CiAgfSwKCiAgZ2V0TWF0Y2hDbGFzcyhwZXJjZW50YWdlKSB7CiAgICBpZiAocGVyY2VudGFnZSA9PT0gIi0tIikgcmV0dXJuICJ0ZXh0LWdyYXktNTAwIjsKICAg", + "IGlmIChwZXJjZW50YWdlIDwgMTApIHJldHVybiAidGV4dC1ncmVlbi02MDAiOwogICAgaWYgKHBlcmNlbnRhZ2UgPCAyMCkgcmV0dXJuICJ0ZXh0LW9yYW5nZS02MDAiOwogICAgcmV0dXJuICJ0ZXh0LXJlZC02MDAiOwogIH0sCgogIC8qKgogICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBET00gZWxlbWVudC4KICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gdG9nZ2xlLgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdyAtIFdoZXRoZXIgdG8gc2hvdyBvciBoaWRlLgogICAqLwogIHRvZ2dsZVZpc2liaWxpdHkoZWxlbWVudCwgc2hvdykgewogICAgaWYgKCFlbGVtZW50KSByZXR1cm47CiAgICBpZiAoc2hvdykgewogICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICAvLyBSZXN0b3JlIGFwcHJvcHJpYXRlIGRpc3BsYXkgdHlwZQogICAgICBpZiAoZWxlbWVudC5pZCA9PT0gInRzLXNlbGVjdGVkLXN0YXRlIikgewogICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgfQogIH0sCgogIC8qKgogICAqIEJ1aWxkcyBhIG11bHRpLXNlbGVjdCBkcm9w", + "ZG93biB3aXRoICJTZWxlY3QgQWxsIiAvICJDbGVhciIgYWN0aW9ucyAoWm9uZSBBKQogICAqIGFuZCBhIHNjcm9sbGFibGUgbGlzdCBvZiBvcHRpb25zIChab25lIEIpLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRhaW5lcklkIC0gSUQgb2YgdGhlIGRyb3Bkb3duIGNvbnRhaW5lci4KICAgKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zIC0gTGlzdCBvZiBvcHRpb25zIHtuYW1lLCB2YWx1ZX0uCiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0ZWRTdGF0ZUFyciAtIEFycmF5IHN0b3JpbmcgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlcy4KICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblNlbGVjdGlvbkNoYW5nZSAtIENhbGxiYWNrIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXMuCiAgICogQHBhcmFtIHtib29sZWFufSBzZWFyY2hhYmxlIC0gV2hldGhlciB0byBpbmNsdWRlIGEgc2VhcmNoIGJveC4KICAgKiBAcGFyYW0ge2Jvb2xlYW59IG11bHRpU2VsZWN0IC0gV2hldGhlciB0byBhbGxvdyBtdWx0aXBsZSBzZWxlY3Rpb25zLgogICAqLwogIGJ1aWxkQWN0aW9uRHJvcGRvd24oY29udGFpbmVySWQsIG9wdGlvbnMsIHNlbGVjdGVkU3RhdGVBcnIsCiAgICBvblNlbGVjdGlvbkNoYW5nZSwgc2VhcmNoYWJsZSA9IHRydWUsIG11bHRpU2VsZWN0ID0gdHJ1ZSwgdG90YWxDb3VudCA9CiAgICBudWxsLCBpdGVtTmFtZSA9ICJpdGVtcyIsIHNlYXJjaENhbGxiYWNrID0gbnVsbCkgewogICAgY29uc3QgY29udGFpbmVyID0gZG9j", + "dW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOwogICAgaWYgKCFjb250YWluZXIpIHJldHVybjsKCiAgICAvLyBDb250YWluZXIgY29uZmlnCiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICBjb250YWluZXIuc3R5bGUucGFkZGluZyA9ICIwIjsKICAgIGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOyAvLyBDbGlwIGNvcm5lcnMKCiAgICAvLyAtLS0gWk9ORSAwOiBTZWFyY2ggKFRvcCBMZXZlbCkgLS0tCiAgICBsZXQgc2VhcmNoSW5wdXQgPSBudWxsOwogICAgaWYgKHNlYXJjaGFibGUpIHsKICAgICAgY29uc3Qgc2VhcmNoQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHNlYXJjaENvbnRhaW5lci5jbGFzc05hbWUgPSAiZHJvcGRvd24tc2VhcmNoLXpvbmUiOwogICAgICBzZWFyY2hDb250YWluZXIuc3R5bGUucGFkZGluZyA9ICIwLjVyZW0iOwogICAgICBzZWFyY2hDb250YWluZXIuc3R5bGUuYm9yZGVyQm90dG9tID0gIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpIjsKICAgICAgc2VhcmNoQ29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQgPSAidmFyKC0tYmctc3VyZmFjZSkiOwoKICAgICAgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICBzZWFyY2hJbnB1dC50eXBlID0gInRleHQiOwogICAgICBzZWFyY2hJbnB1dC5jbGFzc05hbWUgPSAicG9wb3Zlci1zZWFyY2giOwogICAgICBz", + "ZWFyY2hJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgc2VhcmNoSW5wdXQucGxhY2Vob2xkZXIgPSAiU2VhcmNoLi4uIjsKCiAgICAgIHNlYXJjaENvbnRhaW5lci5hcHBlbmRDaGlsZChzZWFyY2hJbnB1dCk7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXIpOwogICAgfQoKICAgIC8vIC0tLSBaT05FIEI6IE9wdGlvbiBMaXN0IC0tLQogICAgY29uc3QgbGlzdFpvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGxpc3Rab25lLmNsYXNzTmFtZSA9ICJkcm9wZG93bi1zY3JvbGwtem9uZSI7CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGlzdFpvbmUpOwoKICAgIC8vIFJlbmRlciBMaXN0IExvZ2ljCiAgICBjb25zdCByZW5kZXJMaXN0ID0gKG9wdGlvbnNUb1JlbmRlcikgPT4gewogICAgICBsaXN0Wm9uZS5pbm5lckhUTUwgPSAiIjsKCiAgICAgIGlmIChvcHRpb25zVG9SZW5kZXIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgbGlzdFpvbmUuaW5uZXJIVE1MID0KICAgICAgICAgIGA8ZGl2IGNsYXNzPSJwLTQgdGV4dC14cyB0ZXh0LWdyYXktNDAwIHRleHQtY2VudGVyIj5ObyBvcHRpb25zIGF2YWlsYWJsZTwvZGl2PmA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBvcHRpb25zVG9SZW5kZXIuZm9yRWFjaChvcHQgPT4gewogICAgICAgIC8vIFNLSVAgIkFsbCIgb3B0aW9ucyBpZiB0aGV5IGV4aXN0IGluIHRoZSBwYXNzZWQgb3B0aW9ucyBs", + "aXN0LgogICAgICAgIGlmIChvcHQudmFsdWUgPT09ICJhbGwiKSByZXR1cm47CgogICAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IHNlbGVjdGVkU3RhdGVBcnIuaW5jbHVkZXMob3B0LnZhbHVlKTsKCiAgICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobXVsdGlTZWxlY3QgPyAibGFiZWwiIDoKICAgICAgICAgICJkaXYiKTsKICAgICAgICBpdGVtLmNsYXNzTmFtZSA9ICJwb3BvdmVyLWl0ZW0iICsgKGlzQ2hlY2tlZCAmJiAhbXVsdGlTZWxlY3QgPwogICAgICAgICAgIiBhY3RpdmUtaXRlbSIgOiAiIik7CgogICAgICAgIGxldCBjaGVja2JveCA9IG51bGw7CiAgICAgICAgaWYgKG11bHRpU2VsZWN0KSB7CiAgICAgICAgICBjaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgICBjaGVja2JveC50eXBlID0gImNoZWNrYm94IjsKICAgICAgICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9ICJwb3BvdmVyLWNoZWNrYm94IjsKICAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSBpc0NoZWNrZWQ7CiAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGNoZWNrYm94KTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgIGxhYmVsLmlubmVySFRNTCA9IG9wdC5uYW1lOwogICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQobGFiZWwpOwoKICAgICAgICAvLyBJbnRlcmFjdGlvbjogVG9nZ2xlIEluZGl2", + "aWR1YWwKICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoZSkgPT4gewogICAgICAgICAgaWYgKG11bHRpU2VsZWN0KSB7CiAgICAgICAgICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7CiAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZFN0YXRlQXJyLmluY2x1ZGVzKG9wdC52YWx1ZSkpCiAgICAgICAgICAgICAgICBzZWxlY3RlZFN0YXRlQXJyLnB1c2gob3B0LnZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBpZHggPSBzZWxlY3RlZFN0YXRlQXJyLmluZGV4T2Yob3B0LnZhbHVlKTsKICAgICAgICAgICAgICBpZiAoaWR4ID4gLTEpIHNlbGVjdGVkU3RhdGVBcnIuc3BsaWNlKGlkeCwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGVjdGVkU3RhdGVBcnIubGVuZ3RoID0gMDsKICAgICAgICAgICAgc2VsZWN0ZWRTdGF0ZUFyci5wdXNoKG9wdC52YWx1ZSk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCFtdWx0aVNlbGVjdCkgewogICAgICAgICAgICByZW5kZXJMaXN0KG9wdGlvbnNUb1JlbmRlcik7CiAgICAgICAgICB9CiAgICAgICAgICBvblNlbGVjdGlvbkNoYW5nZSgpOwogICAgICAgIH07CgogICAgICAgIGlmIChtdWx0aVNlbGVjdCkgewogICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZSkgPT4gewogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBoYW5kbGVT", + "ZWxlY3QoZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGhhbmRsZVNlbGVjdChlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgbGlzdFpvbmUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgIH0pOwogICAgfTsKCiAgICByZW5kZXJMaXN0KG9wdGlvbnMpOwoKICAgIC8vIC0tLSBaT05FIEM6IEZvb3RlciAtLS0KICAgIGxldCBmb290ZXIgPSBudWxsOwogICAgaWYgKHRvdGFsQ291bnQgIT09IG51bGwpIHsKICAgICAgZm9vdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZvb3Rlci5jbGFzc05hbWUgPSAiZHJvcGRvd24tZm9vdGVyIjsKICAgICAgZm9vdGVyLnN0eWxlLnBhZGRpbmcgPSAiMC41cmVtIDFyZW0iOwogICAgICBmb290ZXIuc3R5bGUuZm9udFNpemUgPSAiMC43NXJlbSI7CiAgICAgIGZvb3Rlci5zdHlsZS5jb2xvciA9ICJ2YXIoLS10ZXh0LWdyYXktNDAwKSI7CiAgICAgIGZvb3Rlci5zdHlsZS5ib3JkZXJUb3AgPSAiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcikiOwogICAgICBmb290ZXIuc3R5bGUuYmFja2dyb3VuZCA9ICJ2YXIoLS1iZy1zdWJ0bGUpIjsKICAgICAgZm9vdGVyLnRleHRDb250ZW50ID0KICAgICAgICBgU2hvd2luZyAke29wdGlvbnMubGVuZ3RofSBvdXQg", + "b2YgJHt0b3RhbENvdW50fSAke2l0ZW1OYW1lfWA7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmb290ZXIpOwogICAgfQoKICAgIC8vIC0tLSBTZWFyY2ggTG9naWMgLS0tCiAgICBpZiAoc2VhcmNoSW5wdXQpIHsKICAgICAgc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZSkgPT4gewogICAgICAgIGNvbnN0IHRlcm0gPSBlLnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICBpZiAoc2VhcmNoQ2FsbGJhY2spIHsKICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLAogICAgICAgICAgICB0b3RhbDogbUNvdW50CiAgICAgICAgICB9ID0gc2VhcmNoQ2FsbGJhY2sodGVybSk7CiAgICAgICAgICByZW5kZXJMaXN0KGZpbHRlcmVkT3B0aW9ucyk7CiAgICAgICAgICBpZiAoZm9vdGVyKSB7CiAgICAgICAgICAgIGZvb3Rlci50ZXh0Q29udGVudCA9CiAgICAgICAgICAgICAgYFNob3dpbmcgJHtmaWx0ZXJlZE9wdGlvbnMubGVuZ3RofSBvdXQgb2YgJHttQ291bnR9ICR7aXRlbU5hbWV9YDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgaXRlbXMgPSBsaXN0Wm9uZS5xdWVyeVNlbGVjdG9yQWxsKCIucG9wb3Zlci1pdGVtIik7CiAgICAgICAgICBsZXQgdmlzaWJsZUNvdW50ID0gMDsKICAgICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbS5x", + "dWVyeVNlbGVjdG9yKCJzcGFuIikudGV4dENvbnRlbnQKICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gbGFiZWwuaW5jbHVkZXModGVybSk7CiAgICAgICAgICAgIGl0ZW0uc3R5bGUuZGlzcGxheSA9IGlzVmlzaWJsZSA/ICJmbGV4IiA6ICJub25lIjsKICAgICAgICAgICAgaWYgKGlzVmlzaWJsZSkgdmlzaWJsZUNvdW50Kys7CiAgICAgICAgICB9KTsKCiAgICAgICAgICBpZiAoZm9vdGVyICYmIHRvdGFsQ291bnQgIT09IG51bGwpIHsKICAgICAgICAgICAgZm9vdGVyLnRleHRDb250ZW50ID0KICAgICAgICAgICAgICBgU2hvd2luZyAke3Zpc2libGVDb3VudH0gb3V0IG9mICR7dG90YWxDb3VudH0gJHtpdGVtTmFtZX1gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfSwKCiAgLyoqCiAgICogUmVuZGVycyB0aGUgdGV4dCBvbiB0aGUgZmlsdGVyIGNoaXAgKGUuZy4sICJNb2R1bGU6IEFsbCIgb3IgIk1vZHVsZTogOmNvcmU6bmV0d29yayAoKzIpIikuCiAgICovCiAgcmVuZGVyQ2hpcFRleHQoZWxlbWVudCwgbGFiZWwsIHR5cGUsIGlzTXVsdGkgPSBmYWxzZSkgewogICAgaWYgKCFlbGVtZW50KSByZXR1cm47CiAgICAvLyBMb2dpYyBmb3IgZGlzcGxheWluZyBjbG9zZSBidXR0b246IEFMV0FZUyBzaG93IGlmICd0eXBlJyBpcyBwcmVzZW50IChtZWFuaW5nIHJlbW92YWJsZSkKICAgIC8vIFRoZSB1c2VyIHNwZWNpZmljYWxseSBy", + "ZXF1ZXN0ZWQgb3B0aW9uIHRvIHJlbW92ZSBmaWx0ZXIgd2hlbiBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkLgogICAgY29uc3Qgc2hvd0Nsb3NlID0gISF0eXBlOwoKICAgIGlmICghc2hvd0Nsb3NlKSB7CiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPSJmaWx0ZXItdGV4dCI+JHtsYWJlbH08L3NwYW4+YDsKICAgIH0gZWxzZSB7CiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlci10ZXh0Ij4ke2xhYmVsfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGlwLWNsb3NlIiBkYXRhLWNsZWFyPSIke3R5cGV9Ij4KICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIiB3aWR0aD0iMTQiIGhlaWdodD0iMTQiPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQuMjkzIDQuMjkzYTEgMSAwIDAxMS40MTQgMEwxMCA4LjU4Nmw0LjI5My00LjI5M2ExIDEgMCAxMTEuNDE0IDEuNDE0TDExLjQxNCAxMGw0LjI5MyA0LjI5M2ExIDEgMCAwMS0xLjQxNCAxLjQxNEwxMCAxMS40MTRsLTQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0LTEuNDE0TDguNTg2IDEwIDQuMjkzIDUuNzA3YTEgMSAwIDAxMC0xLjQxNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICAgICAgICAg", + "ICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvc3Bhbj5gOwogICAgfQogIH0sCgogIGdldEZpbHRlckxhYmVsKHByZWZpeCwgc2VsZWN0ZWRBcnIsIHRvdGFsQ291bnQsIG9wdGlvbnMgPSBbXSkgewogICAgaWYgKHNlbGVjdGVkQXJyLmxlbmd0aCA9PT0gMCB8fCAodG90YWxDb3VudCA+IDAgJiYgc2VsZWN0ZWRBcnIubGVuZ3RoID09PQogICAgICAgIHRvdGFsQ291bnQpKSByZXR1cm4gYCR7cHJlZml4fTogQWxsYDsKICAgIGlmIChzZWxlY3RlZEFyci5sZW5ndGggPT09IDEpIHsKICAgICAgY29uc3QgdmFsID0gc2VsZWN0ZWRBcnJbMF07CiAgICAgIGNvbnN0IG9wdCA9IG9wdGlvbnMuZmluZChvID0+IFN0cmluZyhvLnZhbHVlKSA9PT0gU3RyaW5nKHZhbCkpOwogICAgICBjb25zdCBuYW1lID0gb3B0ID8gb3B0Lm5hbWUgOiB2YWw7CiAgICAgIC8vIFN0cmlwIEhUTUwgdGFncyBpZiBhbnkgKGxpa2UgaW4ga2VlcFJ1bGVPcHRpb25zKQogICAgICBjb25zdCBjbGVhbk5hbWUgPSBuYW1lLnJlcGxhY2UoLzxbXj5dKj4vZywgIiIpOwogICAgICByZXR1cm4gYCR7cHJlZml4fTogJHtjbGVhbk5hbWV9YDsKICAgIH0KICAgIHJldHVybiBgJHtwcmVmaXh9OiAke3NlbGVjdGVkQXJyLmxlbmd0aH0gU2VsZWN0ZWRgOwogIH0sCgogIC8qKgogICAqIEZpbmRzIHRoZSBjb21tb24gcHJlZml4IGFtb25nIGFuIGFycmF5IG9mIHN0cmluZ3MuCiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc3RyaW5ncyAtIEFycmF5IG9mIHN0cmlu", + "Z3MgdG8gYW5hbHl6ZS4KICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbW9uIHByZWZpeC4KICAgKi8KICBmaW5kQ29tbW9uUHJlZml4KHN0cmluZ3MpIHsKICAgIGlmICghc3RyaW5ncyB8fCBzdHJpbmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICIiOwogICAgbGV0IHByZWZpeCA9IHN0cmluZ3NbMF07CiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHN0cmluZ3NbaV0uc3RhcnRzV2l0aCgiQW5kcm9pZCBHcmFkbGUgcGx1Z2luIikpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB3aGlsZSAoc3RyaW5nc1tpXS5pbmRleE9mKHByZWZpeCkgIT09IDApIHsKICAgICAgICBwcmVmaXggPSBwcmVmaXguc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGggLSAxKTsKICAgICAgICBpZiAocHJlZml4ID09PSAiIikgcmV0dXJuICIiOwogICAgICB9CiAgICB9CiAgICAvLyBFbnN1cmUgd2Ugb25seSBzdHJpcCB1cCB0byB0aGUgbGFzdCBzbGFzaCB0byBrZWVwIHRoZSBmaWxlbmFtZS4KICAgIGNvbnN0IGxhc3RTbGFzaCA9IHByZWZpeC5sYXN0SW5kZXhPZignLycpOwogICAgaWYgKGxhc3RTbGFzaCAhPT0gLTEpIHsKICAgICAgcmV0dXJuIHByZWZpeC5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoICsgMSk7CiAgICB9CiAgICByZXR1cm4gIiI7CiAgfQp9OwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09", + "PT09PT09PT09PT09PT09PT0KICAgTUFJTiBBUFAgQ09OVFJPTExFUgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKY29uc3QgQXBwID0gewogIGJsYXN0UmFkaXVzRGF0YTogbnVsbCwKCiAgaW5pdCgpIHsKICAgIC8vIEluaXRpYWxpemUgUmVwb3J0IChNYWluIEdyaWQpCiAgICBSZXBvcnRBcHAuaW5pdCgpOwoKICAgIC8vIExvYWQgUHJvdG9idWYgRGF0YSBpbiB0aGUgQmFja2dyb3VuZAogICAgdGhpcy5sb2FkUHJvdG9EYXRhKCk7CiAgfSwKCiAgc2hvd0RldGFpbHNWaWV3KHJ1bGVJZCkgewogICAgUmVwb3J0QXBwLnN0YXRlLmN1cnJlbnRWaWV3ID0gQ09OU1RBTlRTLlZJRVdTLkRFVEFJTFM7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVwb3J0LXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy12aWV3Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXRhaWxzLXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwoKICAgIGNvbnN0IHJ1bGVCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtcnVsZS1ib2R5Iik7CiAgICBjb25zdCBpbXBhY3RCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtaW1wYWN0LWJvZHkiKTsKICAgIGNv", + "bnN0IGlkZW50aWNhbFJ1bGVzQm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAiZGV0YWlscy1pZGVudGljYWwtcnVsZXMtYm9keSIpOwogICAgY29uc3QgaWRlbnRpY2FsUnVsZXNIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICAgImRldGFpbHMtaWRlbnRpY2FsLXJ1bGVzLWhlYWRlciIpOwogICAgY29uc3QgaWRlbnRpY2FsUnVsZXNUaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKAogICAgICAiZGV0YWlscy1pZGVudGljYWwtcnVsZXMtdGl0bGUiKTsKICAgIGNvbnN0IHN1YnN1bWVkQnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoCiAgICAiZGV0YWlscy1zdWJzdW1lZC1ieS1ib2R5Iik7CiAgICBjb25zdCBzdWJzdW1lZEJ5SGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoCiAgICAgICJkZXRhaWxzLXN1YnN1bWVkLWJ5LWhlYWRlciIpOwogICAgY29uc3Qgc3Vic3VtZWRCeVRpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoCiAgICAgICJkZXRhaWxzLXN1YnN1bWVkLWJ5LXRpdGxlIik7CiAgICBjb25zdCBpbXBhY3RIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgKICAgICJkZXRhaWxzLXJ1bGUtaW1wYWN0LWhlYWRlciIpOwogICAgY29uc3QgY2xhc3Nlc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1jbGFzc2VzLWNvbnRlbnQiKTsKICAgIGNvbnN0IG1ldGhvZHNDb250ZW50ID0gZG9jdW1lbnQu", + "Z2V0RWxlbWVudEJ5SWQoImRldGFpbHMtbWV0aG9kcy1jb250ZW50Iik7CiAgICBjb25zdCBmaWVsZHNDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtZmllbGRzLWNvbnRlbnQiKTsKCiAgICBjb25zdCBydWxlID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZS5maW5kKHIgPT4gcgogICAgICAuaWQgPT09IHBhcnNlSW50KHJ1bGVJZCkpOwogICAgaWYgKHJ1bGUpIHsKICAgICAgY29uc3QgZmlsZU9yaWdpbklkID0gcnVsZT8ub3JpZ2luPy5maWxlT3JpZ2luSWQ7CiAgICAgIGNvbnN0IGZpbGVPcmlnaW4gPSB0aGlzLmJsYXN0UmFkaXVzRGF0YT8uZmlsZU9yaWdpblRhYmxlLmZpbmQoZiA9PiBmCiAgICAgICAgLmlkID09PSBmaWxlT3JpZ2luSWQpOwoKICAgICAgbGV0IG9yaWdpblN0ciA9ICIiOwogICAgICBpZiAoZmlsZU9yaWdpbikgewogICAgICAgIGNvbnN0IG1hdmVuTmFtZSA9IGZvcm1hdE1hdmVuQ29vcmRpbmF0ZShmaWxlT3JpZ2luLm1hdmVuQ29vcmRpbmF0ZSk7CiAgICAgICAgb3JpZ2luU3RyID0KICAgICAgICAgIGAke21hdmVuTmFtZSB8fCBmaWxlT3JpZ2luLmZpbGVuYW1lfToke3J1bGUub3JpZ2luPy5saW5lTnVtYmVyIHx8IDF9YDsKICAgICAgICBpZiAobWF2ZW5OYW1lKSB7CiAgICAgICAgICBvcmlnaW5TdHIgKz0gYCAoJHtmaWxlT3JpZ2luLmZpbGVuYW1lfSlgOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY29uc3QgY29uc3Ry", + "YWludHNNYXAgPSBnZXRDb25zdHJhaW50c01hcCh0aGlzLmJsYXN0UmFkaXVzRGF0YSk7CiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNNYXAuZ2V0KHJ1bGUuY29uc3RyYWludHNJZCkgfHwgW107CgogICAgICBjb25zdCBnZXRUYWcgPSAoYywgbGFiZWwpID0+IHsKICAgICAgICBjb25zdCBpc1Jlc3RyaWN0ZWQgPSBjb25zdHJhaW50cy5pbmNsdWRlcyhjKTsKICAgICAgICBpZiAoIWlzUmVzdHJpY3RlZCkgcmV0dXJuICIiOwogICAgICAgIGNvbnN0IGNvbG9yID0gInZhcigtLXRleHQtcmVkLTYwMCkiOwogICAgICAgIGNvbnN0IGJnQ29sb3IgPSAidmFyKC0tYmctcmVkLWxpZ2h0KSI7CiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz0iaW1wYWN0LXRhZyIgc3R5bGU9ImNvbG9yOiAke2NvbG9yfTsgYmFja2dyb3VuZC1jb2xvcjogJHtiZ0NvbG9yfTsgYm9yZGVyLWNvbG9yOiAke2NvbG9yfTsgb3BhY2l0eTogMC44OyI+JHtsYWJlbH08L3NwYW4+YDsKICAgICAgfTsKCiAgICAgIGNvbnN0IGltcGFjdFRhZ3NIdG1sID0gYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbXBhY3QtY29udGFpbmVyIj4KICAgICAgICAgICAgICAke2dldFRhZygnRE9OVF9PQkZVU0NBVEUnLCAnT0JGVVNDQVRFJyl9CiAgICAgICAgICAgICAgJHtnZXRUYWcoJ0RPTlRfT1BUSU1JWkUnLCAnT1BUSU1JWkUnKX0KICAgICAgICAgICAgICAke2dldFRhZygnRE9OVF9TSFJJTksnLCAnU0hSSU5LJyl9CiAgICAgICAgICAg", + "IDwvZGl2PgogICAgICAgICAgYDsKCiAgICAgIHJ1bGVCb2R5LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgPHRyIGNsYXNzPSJib3JkZXItdCBib3JkZXItZ3JheS0yMDAiPgogICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzogMXJlbTsgdmVydGljYWwtYWxpZ246IHRvcDsiPgogICAgICAgICAgICAgICAgJHtvcmlnaW5TdHIgPyBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tdGV4dC1ncmF5LTkwMCk7IG1hcmdpbi1ib3R0b206IDAuNXJlbTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyI+JHtlc2NhcGVIVE1MKG9yaWdpblN0cil9PC9kaXY+YCA6ICIifQogICAgICAgICAgICAgICAgPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7IGNvbG9yOiB2YXIoLS10ZXh0LWJsdWUtNzAwKTsiPiR7ZXNjYXBlSFRNTChydWxlLnNvdXJjZSl9PC9wcmU+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIGA7CgogICAgICBjb25zdCBiciA9IHJ1bGUuYmxhc3RSYWRpdXMgfHwge307CiAgICAgIGNvbnN0IGNsYXNzSWRzID0gYnIuY2xhc3NCbGFzdFJhZGl1cyB8fCBbXTsKICAgICAgY29uc3QgZmllbGRJZHMgPSBici5maWVsZEJsYXN0UmFkaXVzIHx8IFtdOwogICAgICBjb25zdCBtZXRo", + "b2RJZHMgPSBici5tZXRob2RCbGFzdFJhZGl1cyB8fCBbXTsKICAgICAgY29uc3QgbWF0Y2hlZFRvdGFsID0gY2xhc3NJZHMubGVuZ3RoICsgZmllbGRJZHMubGVuZ3RoICsgbWV0aG9kSWRzCiAgICAgICAgLmxlbmd0aDsKICAgICAgY29uc3QgdG90YWxMaXZlID0gZ2V0TGl2ZUl0ZW1Db3VudCh0aGlzLmJsYXN0UmFkaXVzRGF0YSk7CiAgICAgIGNvbnN0IGxpdmVDbGFzc2VzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbz8ubGl2ZUNsYXNzQ291bnQgfHwKICAgICAgMDsKICAgICAgY29uc3QgbGl2ZUZpZWxkcyA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhPy5idWlsZEluZm8/LmxpdmVGaWVsZENvdW50IHx8IDA7CiAgICAgIGNvbnN0IGxpdmVNZXRob2RzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbz8ubGl2ZU1ldGhvZENvdW50IHx8CiAgICAgICAgMDsKCiAgICAgIGNvbnN0IHJlbmRlck1hdGNoQ2VsbCA9IChjb3VudCwgdG90YWwsIGJvcmRlckxlZnQgPSB0cnVlKSA9PiB7CiAgICAgICAgY29uc3QgcGVyYyA9IHRvdGFsID4gMCA/IChjb3VudCAvIHRvdGFsICogMTAwKSA6IDA7CiAgICAgICAgY29uc3QgY29sb3JDbGFzcyA9IFVJVXRpbHMuZ2V0TWF0Y2hDbGFzcyhwZXJjKTsKICAgICAgICBjb25zdCBibCA9IGJvcmRlckxlZnQgPyAiYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiA6ICIiOwogICAgICAgIHJldHVybiBgCiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciAk", + "e2JsfSIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtYm9sZCAke2NvbG9yQ2xhc3N9Ij4ke3BlcmMudG9GaXhlZCgxKX0lPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIG10LTEiPiR7Y291bnR9PC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgYDsKICAgICAgfTsKCiAgICAgIGltcGFjdEJvZHkuaW5uZXJIVE1MID0gYAogICAgICAgICAgICA8dHIgY2xhc3M9ImJvcmRlci10IGJvcmRlci1ncmF5LTIwMCI+CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoY2xhc3NJZHMubGVuZ3RoLCBsaXZlQ2xhc3NlcywgZmFsc2UpfQogICAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKGZpZWxkSWRzLmxlbmd0aCwgbGl2ZUZpZWxkcyl9CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwobWV0aG9kSWRzLmxlbmd0aCwgbGl2ZU1ldGhvZHMpfQogICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMXJl", + "bTsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiPgogICAgICAgICAgICAgICAgJHtpbXBhY3RUYWdzSHRtbH0KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgYDsKCiAgICAgIGNvbnN0IGFsbFJ1bGVzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZSB8fCBbXTsKICAgICAgY29uc3Qgc3Vic3VtaW5nSWRzID0gYnIuc3Vic3VtZWRCeSB8fCBbXTsKCiAgICAgIGNvbnN0IGlkZW50aWNhbFJ1bGVzID0gW107CiAgICAgIGNvbnN0IHN1YnN1bWVkQnlSdWxlcyA9IFtdOwoKICAgICAgc3Vic3VtaW5nSWRzLmZvckVhY2goaWQgPT4gewogICAgICAgIGNvbnN0IG90aGVyUnVsZSA9IGFsbFJ1bGVzLmZpbmQociA9PiByLmlkID09PSBpZCk7CiAgICAgICAgaWYgKG90aGVyUnVsZSkgewogICAgICAgICAgY29uc3Qgb3RoZXJTdWJzdW1lZEJ5ID0gb3RoZXJSdWxlLmJsYXN0UmFkaXVzPy5zdWJzdW1lZEJ5IHx8IFtdOwogICAgICAgICAgaWYgKG90aGVyU3Vic3VtZWRCeS5pbmNsdWRlcyhydWxlLmlkKSkgewogICAgICAgICAgICBpZGVudGljYWxSdWxlcy5wdXNoKG90aGVyUnVsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJzdW1lZEJ5UnVsZXMucHVzaChvdGhlclJ1bGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CgogICAgICBjb25zdCByZW5kZXJSdWxlUm93ID0gKHIpID0+IHsKICAgICAgICBjb25zdCByQnIg", + "PSByLmJsYXN0UmFkaXVzIHx8IHt9OwogICAgICAgIGNvbnN0IHJDbGFzc0lkcyA9IHJCci5jbGFzc0JsYXN0UmFkaXVzIHx8IFtdOwogICAgICAgIGNvbnN0IHJGaWVsZElkcyA9IHJCci5maWVsZEJsYXN0UmFkaXVzIHx8IFtdOwogICAgICAgIGNvbnN0IHJNZXRob2RJZHMgPSByQnIubWV0aG9kQmxhc3RSYWRpdXMgfHwgW107CgogICAgICAgIGNvbnN0IHJDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzTWFwLmdldChyLmNvbnN0cmFpbnRzSWQpIHx8IFtdOwogICAgICAgIGNvbnN0IGdldFRhZyA9IChjLCBsYWJlbCkgPT4gewogICAgICAgICAgY29uc3QgaXNSZXN0cmljdGVkID0gckNvbnN0cmFpbnRzLmluY2x1ZGVzKGMpOwogICAgICAgICAgaWYgKCFpc1Jlc3RyaWN0ZWQpIHJldHVybiAiIjsKICAgICAgICAgIGNvbnN0IGNvbG9yID0gInZhcigtLXRleHQtcmVkLTYwMCkiOwogICAgICAgICAgY29uc3QgYmdDb2xvciA9ICJ2YXIoLS1iZy1yZWQtbGlnaHQpIjsKICAgICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9ImltcGFjdC10YWciIHN0eWxlPSJjb2xvcjogJHtjb2xvcn07IGJhY2tncm91bmQtY29sb3I6ICR7YmdDb2xvcn07IGJvcmRlci1jb2xvcjogJHtjb2xvcn07IG9wYWNpdHk6IDAuODsiPiR7bGFiZWx9PC9zcGFuPmA7CiAgICAgICAgfTsKCiAgICAgICAgY29uc3QgaW1wYWN0Q2VsbCA9IGAKICAgICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIg", + "c3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDUwcHg7IG1pbi13aWR0aDogNTBweDsiPiR7Z2V0VGFnKCdET05UX09CRlVTQ0FURScsICdPQkZVU0NBVEUnKX08L3RkPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMTAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogNTBweDsgbWluLXdpZHRoOiA1MHB4OyI+JHtnZXRUYWcoJ0RPTlRfT1BUSU1JWkUnLCAnT1BUSU1JWkUnKX08L3RkPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMTAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogNTBweDsgbWluLXdpZHRoOiA1MHB4OyI+JHtnZXRUYWcoJ0RPTlRfU0hSSU5LJywgJ1NIUklOSycpfTwvdGQ+CiAgICAgICAgICAgIGA7CgogICAgICAgIHJldHVybiBgCiAgICAgICAgICAgICAgPHRyIGNsYXNzPSJ0YWJsZS1yb3cgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktNTAgY3Vyc29yLXBvaW50ZXIiIG9uY2xpY2s9IkFwcC5zaG93RGV0YWlsc1ZpZXcoJyR7ci5pZH0nKSI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InN0aWNreS1uYW1lIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgaG92ZXI6dW5kZXJsaW5lIiB0aXRsZT0iJHtlc2NhcGVIVE1MKHIuc291cmNlKX0iIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogNjAwcHg7IG1pbi13aWR0aDog", + "NjAwcHg7Ij4KICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+JHtlc2NhcGVIVE1MKHIuc291cmNlKX08L3ByZT4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChyQ2xhc3NJZHMubGVuZ3RoICsgckZpZWxkSWRzLmxlbmd0aCArIHJNZXRob2RJZHMubGVuZ3RoLCB0b3RhbExpdmUsIHRydWUpfQogICAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwockNsYXNzSWRzLmxlbmd0aCwgbGl2ZUNsYXNzZXMpfQogICAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwockZpZWxkSWRzLmxlbmd0aCwgbGl2ZUZpZWxkcyl9CiAgICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChyTWV0aG9kSWRzLmxlbmd0aCwgbGl2ZU1ldGhvZHMpfQogICAgICAgICAgICAgICAgJHtpbXBhY3RDZWxsfQogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIGA7CiAgICAgIH07CgogICAgICBpZiAoaWRlbnRpY2FsUnVsZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWRlbnRpY2FsUnVsZXNUaXRsZS50ZXh0Q29udGVudCA9ICJJZGVudGljYWwgUnVsZXMgKE5vbmUpIjsKICAgICAgICBpZGVudGljYWxSdWxlc0hlYWRlci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUi", + "OwogICAgICAgIGlkZW50aWNhbFJ1bGVzQm9keS5pbm5lckhUTUwgPSAiIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZGVudGljYWxSdWxlc1RpdGxlLnRleHRDb250ZW50ID0gIklkZW50aWNhbCBSdWxlcyI7CiAgICAgICAgaWRlbnRpY2FsUnVsZXNIZWFkZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgIGlkZW50aWNhbFJ1bGVzQm9keS5pbm5lckhUTUwgPSBpZGVudGljYWxSdWxlcy5tYXAocmVuZGVyUnVsZVJvdykuam9pbigKICAgICAgICAgICIiKTsKICAgICAgfQoKICAgICAgaWYgKHN1YnN1bWVkQnlSdWxlcy5sZW5ndGggPT09IDApIHsKICAgICAgICBzdWJzdW1lZEJ5VGl0bGUudGV4dENvbnRlbnQgPSAiU3Vic3VtZWQgQnkgKE5vbmUpIjsKICAgICAgICBzdWJzdW1lZEJ5SGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgc3Vic3VtZWRCeUJvZHkuaW5uZXJIVE1MID0gIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Vic3VtZWRCeVRpdGxlLnRleHRDb250ZW50ID0gIlN1YnN1bWVkIEJ5IjsKICAgICAgICBzdWJzdW1lZEJ5SGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICBzdWJzdW1lZEJ5Qm9keS5pbm5lckhUTUwgPSBzdWJzdW1lZEJ5UnVsZXMubWFwKHJlbmRlclJ1bGVSb3cpLmpvaW4oCiAgICAgICAgIiIpOwogICAgICB9CgogICAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgICBpZiAodGhpcy5ibGFzdFJhZGl1c0RhdGEudHlwZVJlZmVy", + "ZW5jZVRhYmxlKSB7CiAgICAgICAgdGhpcy5ibGFzdFJhZGl1c0RhdGEudHlwZVJlZmVyZW5jZVRhYmxlLmZvckVhY2godCA9PiB0eXBlUmVmTWFwLnNldCh0CiAgICAgICAgICAuaWQsIHQuamF2YURlc2NyaXB0b3IpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVuZGVyTGlzdCA9IChpZHMsIGdldExhYmVsKSA9PiB7CiAgICAgICAgaWYgKGlkcy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IGNvbG9yOiB2YXIoLS10ZXh0LWdyYXktNTAwKTsgZm9udC1zaXplOiAwLjgxMjVyZW07Ij5Ob25lPC9kaXY+JzsKICAgICAgICBjb25zdCBsaW1pdCA9IDEwMDA7CiAgICAgICAgY29uc3QgdG9SZW5kZXIgPSBpZHMuc2xpY2UoMCwgbGltaXQpOwogICAgICAgIGNvbnN0IGxpc3RIdG1sID0gdG9SZW5kZXIubWFwKGlkID0+IGAKICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwLjM3NXJlbSAwLjVyZW07IGJvcmRlci1yYWRpdXM6IDAuMzc1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjEyNXJlbTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyBmb250LXNpemU6IDAuODEyNXJlbTsiIGNsYXNzPSJob3Zlci1iZy1ncmF5LTEwMCI+CiAgICAgICAgICAgICAgICAke2dldExhYmVsKGlkKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCkuam9pbigiIik7CiAgICAgICAgaWYgKGlkcy5sZW5ndGggPiBsaW1pdCkgewogICAgICAg", + "ICAgcmV0dXJuIGxpc3RIdG1sICsgYAogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMC41cmVtOyBjb2xvcjogdmFyKC0tdGV4dC1ncmF5LTUwMCk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBmb250LXN0eWxlOiBpdGFsaWM7Ij4KICAgICAgICAgICAgICAgICAgLi4uIGFuZCAke2lkcy5sZW5ndGggLSBsaW1pdH0gbW9yZSBpdGVtcwogICAgICAgICAgICAgICAgPC9kaXY+YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpc3RIdG1sOwogICAgICB9OwoKICAgICAgY2xhc3Nlc0NvbnRlbnQuaW5uZXJIVE1MID0gcmVuZGVyTGlzdChjbGFzc0lkcywgKGlkKSA9PiB7CiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhLmtlcHRDbGFzc0luZm9UYWJsZS5maW5kKGMgPT4gYwogICAgICAgICAgLmlkID09PSBpZCk7CiAgICAgICAgcmV0dXJuIGVzY2FwZUhUTUwoZm9ybWF0RGVzY3JpcHRvcih0eXBlUmVmTWFwLmdldChpbmZvCiAgICAgICAgICA/LmNsYXNzUmVmZXJlbmNlSWQpKSk7CiAgICAgIH0pOwoKICAgICAgZmllbGRzQ29udGVudC5pbm5lckhUTUwgPSByZW5kZXJMaXN0KGZpZWxkSWRzLCAoaWQpID0+IHsKICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5ibGFzdFJhZGl1c0RhdGEua2VwdEZpZWxkSW5mb1RhYmxlLmZpbmQoZiA9PiBmCiAgICAgICAgICAuaWQgPT09IGlkKTsKICAgICAgICBjb25zdCByZWYgPSB0aGlzLmJsYXN0UmFkaXVzRGF0YS5maWVsZFJlZmVyZW5j", + "ZVRhYmxlLmZpbmQociA9PiByCiAgICAgICAgICAuaWQgPT09IGluZm8/LmZpZWxkUmVmZXJlbmNlSWQpOwogICAgICAgIHJldHVybiBlc2NhcGVIVE1MKGZvcm1hdEZpZWxkTmFtZShyZWYsIHRoaXMuYmxhc3RSYWRpdXNEYXRhLAogICAgICAgICAgdHlwZVJlZk1hcCkpOwogICAgICB9KTsKCiAgICAgIG1ldGhvZHNDb250ZW50LmlubmVySFRNTCA9IHJlbmRlckxpc3QobWV0aG9kSWRzLCAoaWQpID0+IHsKICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5ibGFzdFJhZGl1c0RhdGEua2VwdE1ldGhvZEluZm9UYWJsZS5maW5kKG0gPT4gbQogICAgICAgICAgLmlkID09PSBpZCk7CiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5ibGFzdFJhZGl1c0RhdGEubWV0aG9kUmVmZXJlbmNlVGFibGUuZmluZChyID0+IHIKICAgICAgICAgIC5pZCA9PT0gaW5mbz8ubWV0aG9kUmVmZXJlbmNlSWQpOwogICAgICAgIHJldHVybiBlc2NhcGVIVE1MKGZvcm1hdE1ldGhvZE5hbWUocmVmLCB0aGlzLmJsYXN0UmFkaXVzRGF0YSwKICAgICAgICAgIHR5cGVSZWZNYXApKTsKICAgICAgfSk7CgogICAgfSBlbHNlIHsKICAgICAgcnVsZUJvZHkuaW5uZXJIVE1MID0KICAgICAgICAnPHRyPjx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0icGFkZGluZzogMXJlbTsiPlJ1bGUgbm90IGZvdW5kLjwvdGQ+PC90cj4nOwogICAgICBjbGFzc2VzQ29udGVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgbWV0aG9kc0NvbnRlbnQuaW5uZXJIVE1MID0gIiI7CiAgICAg", + "IGZpZWxkc0NvbnRlbnQuaW5uZXJIVE1MID0gIiI7CiAgICB9CgogICAgY29uc3QgZmlsZU9yaWdpbiA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhPy5maWxlT3JpZ2luVGFibGUuZmluZChmID0+IGYKICAgICAgLmlkID09PSBydWxlPy5vcmlnaW4/LmZpbGVPcmlnaW5JZCk7CiAgICBjb25zdCBmaWxlT3JpZ2luTmFtZSA9IGZvcm1hdE1hdmVuQ29vcmRpbmF0ZShmaWxlT3JpZ2luCiAgICAgID8ubWF2ZW5Db29yZGluYXRlKSB8fCBmaWxlT3JpZ2luPy5maWxlbmFtZTsKICAgIHRoaXMudXBkYXRlRGV0YWlsc0JyZWFkY3J1bWJzKGZpbGVPcmlnaW5OYW1lLCBmaWxlT3JpZ2luPy5pZCk7CiAgfSwKCiAgc2hvd1JlcG9ydFZpZXcoKSB7CiAgICBSZXBvcnRBcHAuc3RhdGUuY3VycmVudFZpZXcgPSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXRhaWxzLXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy12aWV3Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXBvcnQtdmlldyIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICBSZXBvcnRBcHAucmVuZGVyKCk7CiAgfSwKCiAgc2hvd0ZpbGVEZXRhaWxzVmlldyhmaWxlT3JpZ2luSWQpIHsKICAgIFJlcG9ydEFwcC5zdGF0ZS5jdXJyZW50VmlldyA9IENPTlNUQU5UUy5WSUVXUy5GSUxFX0RF", + "VEFJTFM7CiAgICBSZXBvcnRBcHAuc3RhdGUuZHJpbGxDb250ZXh0LmZpbGVPcmlnaW5JZCA9IGZpbGVPcmlnaW5JZDsKICAgIHRoaXMucmVuZGVyRmlsZURldGFpbHNWaWV3KGZpbGVPcmlnaW5JZCk7CiAgfSwKCiAgcmVuZGVyRmlsZURldGFpbHNWaWV3KGZpbGVPcmlnaW5JZCkgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlcG9ydC12aWV3Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXRhaWxzLXZpZXciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy12aWV3Iikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKCiAgICBjb25zdCBpbXBhY3RCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy1pbXBhY3QtYm9keSIpOwogICAgY29uc3QgcnVsZXNCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy1ydWxlcy1ib2R5Iik7CiAgICBjb25zdCBydWxlc0hlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLWRldGFpbHMtcnVsZXMtaGVhZGVyIik7CgogICAgY29uc3QgZmlsZU9yaWdpbiA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhPy5maWxlT3JpZ2luVGFibGUuZmluZChmID0+IGYKICAgICAgLmlkID09PSBwYXJzZUludChmaWxlT3JpZ2luSWQpKTsKICAgIGlmICghZmlsZU9yaWdpbikgcmV0dXJuOwoKICAgIGNvbnN0", + "IGFsbFJ1bGVzRm9yRmlsZSA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZQogICAgICAuZmlsdGVyKHIgPT4gci5vcmlnaW4/LmZpbGVPcmlnaW5JZCA9PT0gZmlsZU9yaWdpbi5pZCk7CiAgICBsZXQgcnVsZXMgPSBhbGxSdWxlc0ZvckZpbGU7CgogICAgY29uc3QgbGVucyA9IFJlcG9ydEFwcC5zdGF0ZS5maWx0ZXJzLmtlZXBSdWxlc1swXTsKICAgIGlmIChsZW5zKSB7CiAgICAgIHJ1bGVzID0gUmVwb3J0QXBwLmFwcGx5S2VlcFJ1bGVMZW5zKHJ1bGVzLCBsZW5zKTsKICAgIH0KCiAgICBjb25zdCBpc0lkZW50aWNhbExlbnMgPSBsZW5zID09PSAiSWRlbnRpY2FsIjsKICAgIGNvbnN0IGlzU3Vic3VtZWRMZW5zID0gbGVucyA9PT0gIlN1YnN1bWVkIjsKCiAgICBpZiAoaXNJZGVudGljYWxMZW5zIHx8IGlzU3Vic3VtZWRMZW5zKSB7CiAgICAgIHJ1bGVzSGVhZGVyLmlubmVySFRNTCA9IGAKICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1sZWZ0IGJnLWdyYXktNTAgei0zMCIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA2MDBweDsgbWluLXdpZHRoOiA2MDBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ij5SdWxlPC90aD4KICAgICAgICAgICAgICA8dGggY2xhc3M9InRleHQtbGVmdCBiZy1ncmF5LTUwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRo", + "OiAxMDAlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPiR7aXNJZGVudGljYWxMZW5zID8gJ0lkZW50aWNhbCBSdWxlcycgOiAnU3Vic3VtZWQgQnknfTwvdGg+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICBgOwogICAgfSBlbHNlIHsKICAgICAgcnVsZXNIZWFkZXIuaW5uZXJIVE1MID0gYAogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWxlZnQgYmctZ3JheS01MCB6LTMwIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDYwMHB4OyBtaW4td2lkdGg6IDYwMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPlJ1bGU8L3RoPgogICAgICAgICAgICAgIDx0aCBjb2xzcGFuPSI0IiBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGJnLWdyYXktNTAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyI+S2VwdCBJdGVtcyAoaGlnaGVyIGlzIHdvcnNlKTwvdGg+CiAgICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNvbHNwYW49IjMiIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDE1MHB4OyBtaW4td2lkdGg6IDE1MHB4OyBib3JkZXItYm90dG9tOiAxcHggc29s", + "aWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPlByb3BlcnRpZXMgYmxvY2tlZCBieSBydWxlPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPlRvdGFsPC90aD4KICAgICAgICAgICAgICA8dGggY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ij5DbGFzc2VzPC90aD4KICAgICAgICAgICAgICA8dGggY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7Ij5GaWVsZHM8L3RoPgogICAgICAgICAgICAgIDx0aCBjbGFz", + "cz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsiPk1ldGhvZHM8L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgYDsKICAgIH0KCiAgICBjb25zdCBsaXZlQ2xhc3NlcyA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhPy5idWlsZEluZm8/LmxpdmVDbGFzc0NvdW50IHx8IDA7CiAgICBjb25zdCBsaXZlRmllbGRzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbz8ubGl2ZUZpZWxkQ291bnQgfHwgMDsKICAgIGNvbnN0IGxpdmVNZXRob2RzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbz8ubGl2ZU1ldGhvZENvdW50IHx8IDA7CgogICAgY29uc3QgbWF0Y2hlZENsYXNzZXMgPSBuZXcgU2V0KCk7CiAgICBjb25zdCBtYXRjaGVkRmllbGRzID0gbmV3IFNldCgpOwogICAgY29uc3QgbWF0Y2hlZE1ldGhvZHMgPSBuZXcgU2V0KCk7CgogICAgYWxsUnVsZXNGb3JGaWxlLmZvckVhY2gocnVsZSA9PiB7CiAgICAgIGNvbnN0IGJyID0gcnVsZS5ibGFzdFJhZGl1cyB8fCB7fTsKICAgICAgKGJyLmNsYXNzQmxhc3RSYWRpdXMgfHwgW10pLmZvckVhY2goaWQgPT4gbWF0Y2hlZENsYXNzZXMuYWRkKGlkKSk7CiAgICAgIChici5maWVsZEJsYXN0", + "UmFkaXVzIHx8IFtdKS5mb3JFYWNoKGlkID0+IG1hdGNoZWRGaWVsZHMuYWRkKGlkKSk7CiAgICAgIChici5tZXRob2RCbGFzdFJhZGl1cyB8fCBbXSkuZm9yRWFjaChpZCA9PiBtYXRjaGVkTWV0aG9kcy5hZGQoaWQpKTsKICAgIH0pOwoKICAgIGNvbnN0IHJlbmRlck1hdGNoQ2VsbCA9IChjb3VudCwgdG90YWwsIGJvcmRlckxlZnQgPSB0cnVlKSA9PiB7CiAgICAgIGNvbnN0IHBlcmMgPSB0b3RhbCA+IDAgPyAoY291bnQgLyB0b3RhbCAqIDEwMCkgOiAwOwogICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRNYXRjaENsYXNzKHBlcmMpOwogICAgICBjb25zdCBibCA9IGJvcmRlckxlZnQgPyAiYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiA6ICIiOwogICAgICByZXR1cm4gYAogICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyICR7Ymx9IiBzdHlsZT0icGFkZGluZzogMXJlbTsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkICR7Y29sb3JDbGFzc30iPiR7cGVyYy50b0ZpeGVkKDEpfSU8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIG10LTEiPiR7Y291bnR9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAg", + "ICAgICAgICA8L3RkPgogICAgICAgICAgYDsKICAgIH07CgogICAgaW1wYWN0Qm9keS5pbm5lckhUTUwgPSBgCiAgICAgICAgICA8dHIgY2xhc3M9ImJvcmRlci10IGJvcmRlci1ncmF5LTIwMCI+CiAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKG1hdGNoZWRDbGFzc2VzLnNpemUsIGxpdmVDbGFzc2VzLCBmYWxzZSl9CiAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKG1hdGNoZWRGaWVsZHMuc2l6ZSwgbGl2ZUZpZWxkcyl9CiAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKG1hdGNoZWRNZXRob2RzLnNpemUsIGxpdmVNZXRob2RzKX0KICAgICAgICAgIDwvdHI+CiAgICAgICAgYDsKCiAgICBydWxlc0JvZHkuaW5uZXJIVE1MID0gcnVsZXMubWFwKHJ1bGUgPT4gewogICAgICBpZiAoaXNJZGVudGljYWxMZW5zIHx8IGlzU3Vic3VtZWRMZW5zKSB7CiAgICAgICAgY29uc3QgbGlzdCA9IGlzSWRlbnRpY2FsTGVucyA/IHJ1bGUuaWRlbnRpY2FsUnVsZXMgOiBydWxlCiAgICAgICAgICAuc3Vic3VtZWRCeVJ1bGVzOwogICAgICAgIGNvbnN0IG90aGVyUnVsZXNIdG1sID0gKGxpc3QgfHwgW10pLm1hcChvdGhlciA9PiBgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC14cyB0ZXh0LWJsdWUtNjAwIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlciBtYi0xIiBvbmNsaWNrPSJldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgQXBwLnNob3dEZXRhaWxzVmlldygnJHtvdGhlci5pZH0nKSI+CiAgICAgICAg", + "ICAgICAgICA8cHJlIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IG1hcmdpbjogMDsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyI+JHtlc2NhcGVIVE1MKG90aGVyLnNvdXJjZSl9PC9wcmU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApLmpvaW4oIiIpOwoKICAgICAgICByZXR1cm4gYAogICAgICAgICAgICAgIDx0ciBjbGFzcz0iYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktNTAgY3Vyc29yLXBvaW50ZXIiIG9uY2xpY2s9IkFwcC5zaG93RGV0YWlsc1ZpZXcoJyR7cnVsZS5pZH0nKSI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InN0aWNreS1uYW1lIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgaG92ZXI6dW5kZXJsaW5lIiB0aXRsZT0iJHtlc2NhcGVIVE1MKHJ1bGUuc291cmNlKX0iIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogNjAwcHg7IG1pbi13aWR0aDogNjAwcHg7Ij4KICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+JHtlc2NhcGVIVE1MKHJ1bGUuc291cmNlKX08L3ByZT4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCIgc3R5", + "bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiAxMDAlOyI+CiAgICAgICAgICAgICAgICAgICR7b3RoZXJSdWxlc0h0bWwgfHwgJzxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNDAwIGl0YWxpYyI+Tm9uZTwvc3Bhbj4nfQogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICBgOwogICAgICB9CgogICAgICBjb25zdCBiciA9IHJ1bGUuYmxhc3RSYWRpdXMgfHwge307CiAgICAgIGNvbnN0IGMgPSAoYnIuY2xhc3NCbGFzdFJhZGl1cyB8fCBbXSkubGVuZ3RoOwogICAgICBjb25zdCBmID0gKGJyLmZpZWxkQmxhc3RSYWRpdXMgfHwgW10pLmxlbmd0aDsKICAgICAgY29uc3QgbSA9IChici5tZXRob2RCbGFzdFJhZGl1cyB8fCBbXSkubGVuZ3RoOwoKICAgICAgY29uc3QgY29uc3RyYWludHNNYXAgPSBnZXRDb25zdHJhaW50c01hcCh0aGlzLmJsYXN0UmFkaXVzRGF0YSk7CiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNNYXAuZ2V0KHJ1bGUuY29uc3RyYWludHNJZCkgfHwgW107CiAgICAgIGNvbnN0IGdldFRhZyA9IChjLCBsYWJlbCkgPT4gewogICAgICAgIGNvbnN0IGlzUmVzdHJpY3RlZCA9IGNvbnN0cmFpbnRzLmluY2x1ZGVzKGMpOwogICAgICAgIGlmICghaXNSZXN0cmljdGVkKSByZXR1cm4gIiI7CiAgICAgICAgY29uc3QgY29sb3IgPSAidmFyKC0tdGV4dC1yZWQtNjAwKSI7CiAgICAgICAgY29uc3QgYmdDb2xvciA9ICJ2YXIoLS1iZy1yZWQtbGlnaHQpIjsK", + "ICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPSJpbXBhY3QtdGFnIiBzdHlsZT0iY29sb3I6ICR7Y29sb3J9OyBiYWNrZ3JvdW5kLWNvbG9yOiAke2JnQ29sb3J9OyBib3JkZXItY29sb3I6ICR7Y29sb3J9OyBvcGFjaXR5OiAwLjg7Ij4ke2xhYmVsfTwvc3Bhbj5gOwogICAgICB9OwoKICAgICAgY29uc3QgaW1wYWN0Q2VsbCA9IGAKICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9PQkZVU0NBVEUnLCAnT0JGVVNDQVRFJyl9PC90ZD4KICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0xMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9PUFRJTUlaRScsICdPUFRJTUlaRScpfTwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMTAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogNTBweDsgbWluLXdpZHRoOiA1MHB4OyI+JHtnZXRUYWcoJ0RPTlRfU0hSSU5LJywgJ1NIUklOSycpfTwvdGQ+CiAgICAgICAgICBgOwoKICAgICAgY29uc3QgcmVuZGVyTWF0Y2hDZWxsID0gKGNvdW50LCB0b3RhbCwgYm9yZGVyTGVmdCA9IHRydWUpID0+IHsK", + "ICAgICAgICBjb25zdCBwZXJjID0gdG90YWwgPiAwID8gKGNvdW50IC8gdG90YWwgKiAxMDApIDogMDsKICAgICAgICBjb25zdCBjb2xvckNsYXNzID0gVUlVdGlscy5nZXRNYXRjaENsYXNzKHBlcmMpOwogICAgICAgIGNvbnN0IGJsID0gYm9yZGVyTGVmdCA/ICJib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIDogIiI7CiAgICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgICA8dGQgY2xhc3M9InRleHQtY2VudGVyICR7Ymx9IiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkICR7Y29sb3JDbGFzc30iPiR7cGVyYy50b0ZpeGVkKDEpfSU8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMSI+JHtjb3VudH08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICBgOwogICAgICB9OwoKICAgICAgY29uc3QgdG90YWxMaXZlID0gZ2V0TGl2ZUl0ZW1Db3VudCh0aGlzLmJsYXN0UmFkaXVzRGF0YSk7CiAgICAgIGNvbnN0IGxpdmVDbGFzc2VzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/", + "LmJ1aWxkSW5mbwogICAgICAgID8ubGl2ZUNsYXNzQ291bnQgfHwgMDsKICAgICAgY29uc3QgbGl2ZUZpZWxkcyA9IHRoaXMuYmxhc3RSYWRpdXNEYXRhPy5idWlsZEluZm8KICAgICAgICA/LmxpdmVGaWVsZENvdW50IHx8IDA7CiAgICAgIGNvbnN0IGxpdmVNZXRob2RzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGE/LmJ1aWxkSW5mbwogICAgICAgID8ubGl2ZU1ldGhvZENvdW50IHx8IDA7CgogICAgICByZXR1cm4gYAogICAgICAgICAgICA8dHIgY2xhc3M9ImJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBob3ZlcjpiZy1ncmF5LTUwIGN1cnNvci1wb2ludGVyIiBvbmNsaWNrPSJBcHAuc2hvd0RldGFpbHNWaWV3KCcke3J1bGUuaWR9JykiPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RpY2t5LW5hbWUgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCBob3Zlcjp1bmRlcmxpbmUiIHRpdGxlPSIke2VzY2FwZUhUTUwocnVsZS5zb3VyY2UpfSIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA2MDBweDsgbWluLXdpZHRoOiA2MDBweDsiPgogICAgICAgICAgICAgICAgPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZS13cmFwOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktbW9ubyk7IGZvbnQtc2l6ZTogMC44MTI1cmVtOyBtYXJnaW46IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+JHtlc2NhcGVIVE1MKHJ1bGUuc291cmNlKX08L3ByZT4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICR7cmVu", + "ZGVyTWF0Y2hDZWxsKGMgKyBmICsgbSwgdG90YWxMaXZlLCB0cnVlKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChjLCBsaXZlQ2xhc3Nlcyl9CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoZiwgbGl2ZUZpZWxkcyl9CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwobSwgbGl2ZU1ldGhvZHMpfQogICAgICAgICAgICAgICR7aW1wYWN0Q2VsbH0KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIGA7CiAgICB9KS5qb2luKCIiKTsKCiAgICBjb25zdCBmaWxlT3JpZ2luTmFtZSA9IGZvcm1hdE1hdmVuQ29vcmRpbmF0ZShmaWxlT3JpZ2luCiAgICAgIC5tYXZlbkNvb3JkaW5hdGUpIHx8IGZpbGVPcmlnaW4uZmlsZW5hbWU7CiAgICB0aGlzLnVwZGF0ZUZpbGVEZXRhaWxzQnJlYWRjcnVtYnMoZmlsZU9yaWdpbk5hbWUpOwogIH0sCgogIHVwZGF0ZUZpbGVEZXRhaWxzQnJlYWRjcnVtYnMoZmlsZW5hbWUpIHsKICAgIGNvbnN0IGJjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGUtZGV0YWlscy1icmVhZGNydW1icyIpOwogICAgaWYgKCFiYykgcmV0dXJuOwoKICAgIGNvbnN0IGxpbmtDbGFzcyA9ICJicmVhZGNydW1iLXBpbGwiOwogICAgY29uc3QgdGV4dENsYXNzID0gImJyZWFkY3J1bWItdGV4dCI7CiAgICBjb25zdCBzZXAgPSAnPHNwYW4gY2xhc3M9InRleHQtZ3JheS0zMDAgbXgtMSI+Lzwvc3Bhbj4nOwoKICAgIGJjLmlubmVySFRNTCA9IGAKICAgICAgICAgIDxzcGFuIGNs", + "YXNzPSIke2xpbmtDbGFzc30iIGlkPSJmaWxlLWRldGFpbHMtYmFjay10by1zdW1tYXJ5Ij5Qcm9qZWN0PC9zcGFuPgogICAgICAgICAgJHtzZXB9CiAgICAgICAgICA8c3BhbiBjbGFzcz0iJHt0ZXh0Q2xhc3N9Ij4ke2VzY2FwZUhUTUwoZmlsZW5hbWUpfTwvc3Bhbj4KICAgICAgICBgOwoKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlLWRldGFpbHMtYmFjay10by1zdW1tYXJ5IikuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgImNsaWNrIiwgKCkgPT4gewogICAgICAgIHRoaXMuc2hvd1JlcG9ydFZpZXcoKTsKICAgICAgfSk7CiAgfSwKCiAgdXBkYXRlRGV0YWlsc0JyZWFkY3J1bWJzKGZpbGVuYW1lLCBmaWxlT3JpZ2luSWQpIHsKICAgIGNvbnN0IGJjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMtYnJlYWRjcnVtYnMiKTsKICAgIGlmICghYmMpIHJldHVybjsKCiAgICBjb25zdCBsaW5rQ2xhc3MgPSAiYnJlYWRjcnVtYi1waWxsIjsKICAgIGNvbnN0IHRleHRDbGFzcyA9ICJicmVhZGNydW1iLXRleHQiOwogICAgY29uc3Qgc2VwID0gJzxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktMzAwIG14LTEiPi88L3NwYW4+JzsKCiAgICBsZXQgaHRtbCA9IGAKICAgICAgICAgIDxzcGFuIGNsYXNzPSIke2xpbmtDbGFzc30iIGlkPSJkZXRhaWxzLWJhY2stdG8tc3VtbWFyeSI+UHJvamVjdDwvc3Bhbj4KICAgICAgICAgICR7c2VwfWA7CgogICAgaWYgKGZpbGVuYW1lICYmIGZpbGVPcmlnaW5JZCAhPT0g", + "dW5kZWZpbmVkKSB7CiAgICAgIGh0bWwgKz0gYAogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtsaW5rQ2xhc3N9IiBpZD0iZGV0YWlscy1iYWNrLXRvLWZpbGUiPiR7ZXNjYXBlSFRNTChmaWxlbmFtZSl9PC9zcGFuPgogICAgICAgICAgICAke3NlcH1gOwogICAgfQoKICAgIGh0bWwgKz0gYDxzcGFuIGNsYXNzPSIke3RleHRDbGFzc30iPktlZXAgUnVsZSBEZXRhaWxzPC9zcGFuPmA7CiAgICBiYy5pbm5lckhUTUwgPSBodG1sOwoKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXRhaWxzLWJhY2stdG8tc3VtbWFyeSIpLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICJjbGljayIsICgpID0+IHsKICAgICAgICB0aGlzLnNob3dSZXBvcnRWaWV3KCk7CiAgICAgIH0pOwoKICAgIGlmIChmaWxlbmFtZSAmJiBmaWxlT3JpZ2luSWQgIT09IHVuZGVmaW5lZCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGV0YWlscy1iYWNrLXRvLWZpbGUiKS5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICJjbGljayIsICgpID0+IHsKICAgICAgICAgIHRoaXMuc2hvd0ZpbGVEZXRhaWxzVmlldyhmaWxlT3JpZ2luSWQpOwogICAgICAgIH0pOwogICAgfQogIH0sCgogIGFzeW5jIGxvYWRQcm90b0RhdGEoKSB7CiAgICBjb25zdCBlbWJlZGRlZFByb3RvU2NoZW1hU291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYXN0cmFkaXVzLXByb3RvJyk7CiAgICBjb25zdCBlbWJlZGRlZFByb3RvRGF0YVNvdXJjZSA9", + "IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibGFzdHJhZGl1cy1kYXRhJyk7CgogICAgdHJ5IHsKICAgICAgY29uc3Qgcm9vdCA9IHByb3RvYnVmLnBhcnNlKGVtYmVkZGVkUHJvdG9TY2hlbWFTb3VyY2UudGV4dENvbnRlbnQpLnJvb3Q7CiAgICAgIGNvbnN0IGRhdGEgPSBlbWJlZGRlZFByb3RvRGF0YVNvdXJjZS50ZXh0Q29udGVudC50cmltKCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gVWludDhBcnJheS5mcm9tKGF0b2IoZGF0YSksIGMgPT4gYy5jaGFyQ29kZUF0KDApKTsKICAgICAgY29uc3QgQmxhc3RSYWRpdXNDb250YWluZXIgPSByb290Lmxvb2t1cFR5cGUoCiAgICAgICAgImNvbS5hbmRyb2lkLnRvb2xzLnI4LmJsYXN0cmFkaXVzLnByb3RvLkJsYXN0UmFkaXVzQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBCbGFzdFJhZGl1c0NvbnRhaW5lci5kZWNvZGUoYnl0ZXMpOwogICAgICB0aGlzLmJsYXN0UmFkaXVzRGF0YSA9IEJsYXN0UmFkaXVzQ29udGFpbmVyLnRvT2JqZWN0KG1lc3NhZ2UsIHsKICAgICAgICBsb25nczogU3RyaW5nLAogICAgICAgIGVudW1zOiBTdHJpbmcsCiAgICAgICAgYnl0ZXM6IFN0cmluZywKICAgICAgICBkZWZhdWx0czogdHJ1ZSwKICAgICAgICBhcnJheXM6IHRydWUsCiAgICAgICAgb2JqZWN0czogdHJ1ZSwKICAgICAgICBvbmVvZnM6IHRydWUKICAgICAgfSk7CgogICAgICAvLyBFeHRyYWN0IGFuZCBzdHJpcCBjb21tb24gcHJlZml4IGZyb20gZmlsZSBuYW1lcwog", + "ICAgICBpZiAodGhpcy5ibGFzdFJhZGl1c0RhdGEuZmlsZU9yaWdpblRhYmxlKSB7CiAgICAgICAgY29uc3QgZmlsZW5hbWVzID0gdGhpcy5ibGFzdFJhZGl1c0RhdGEuZmlsZU9yaWdpblRhYmxlLm1hcChmID0+IGYKICAgICAgICAgIC5maWxlbmFtZSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIGNvbnN0IGNvbW1vblByZWZpeCA9IFVJVXRpbHMuZmluZENvbW1vblByZWZpeChmaWxlbmFtZXMpOwogICAgICAgIGlmIChjb21tb25QcmVmaXgpIHsKICAgICAgICAgIHRoaXMuYmxhc3RSYWRpdXNEYXRhLmZpbGVPcmlnaW5UYWJsZS5mb3JFYWNoKGYgPT4gewogICAgICAgICAgICBpZiAoZi5maWxlbmFtZSAmJiBmLmZpbGVuYW1lLnN0YXJ0c1dpdGgoY29tbW9uUHJlZml4KSkgewogICAgICAgICAgICAgIGYuZmlsZW5hbWUgPSBmLmZpbGVuYW1lLnN1YnN0cmluZyhjb21tb25QcmVmaXgubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zb2xlLmxvZygiUHJvdG9idWYgZGF0YSBsb2FkZWQgc3VjY2Vzc2Z1bGx5OiIsIHRoaXMKICAgICAgICAuYmxhc3RSYWRpdXNEYXRhKTsKCiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyIG5vdyB0aGF0IGRhdGEgaXMgYXZhaWxhYmxlCiAgICAgIFJlcG9ydEFwcC5yZW5kZXIoKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBwcm90b2J1ZiBkYXRhOiIsIGVycik7", + "CiAgICB9CiAgfSwKfTsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFJFUE9SVCBBUFAgKEdyaWQvTGlzdCBWaWV3KQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKY29uc3QgUmVwb3J0QXBwID0gewogIHN0YXRlOiB7CiAgICBjdXJyZW50VmlldzogQ09OU1RBTlRTLlZJRVdTLk1PRFVMRVMsCiAgICBmaWx0ZXJzOiB7CiAgICAgIGtlZXBSdWxlczogW10sCiAgICAgIGNsYXNzZXM6IFtdLAogICAgICBmaWVsZHM6IFtdLAogICAgICBtZXRob2RzOiBbXQogICAgfSwKICAgIGFjdGl2ZUZpbHRlckNoaXBzOiBbXSwKICAgIHNvcnQ6IHsKICAgICAgYnk6ICJtYXRjaGVzLnRvdGFsIiwKICAgICAgb3JkZXI6ICJkZXNjIgogICAgfSwKICAgIGRyaWxsQ29udGV4dDogewogICAgICBtb2R1bGU6IG51bGwsCiAgICAgIHBrZzogbnVsbCwKICAgICAgZmlsZU9yaWdpbklkOiBudWxsCiAgICB9LCAvLyBOYXZpZ2F0aW9uIHBhdGgKICAgIHN0YXRzVmlzaWJsZTogdHJ1ZQogIH0sCiAgZWxlbWVudHM6IHt9LAoKICBpbml0KCkgewogICAgdGhpcy5jYWNoZURPTUVsZW1lbnRzKCk7CiAgICB0aGlzLnBvcHVsYXRlSGVhZGVySW5mbygpOwogICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTsKICAgIHRoaXMuYmluZEV2ZW50cygpOwogICAg", + "dGhpcy5yZW5kZXIoKTsKICB9LAoKICBjYWNoZURPTUVsZW1lbnRzKCkgewogICAgY29uc3QgZ2V0QnlJZCA9IChpZCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgdGhpcy5lbGVtZW50cyA9IHsKICAgICAgbW9kQ2hpcDogZ2V0QnlJZCgibW9kLWNoaXAtY29udGFpbmVyIiksCiAgICAgIG1vZEJ0bjogZ2V0QnlJZCgibW9kLWZpbHRlci1idG4iKSwKICAgICAgbW9kRHJvcGRvd246IGdldEJ5SWQoIm1vZC1kcm9wZG93biIpLAogICAgICBtb2RUZXh0OiBnZXRCeUlkKCJtb2QtZmlsdGVyLXRleHQiKSwKICAgICAgY2xzQ2hpcDogZ2V0QnlJZCgiY2xzLWNoaXAtY29udGFpbmVyIiksCiAgICAgIGNsc0J0bjogZ2V0QnlJZCgiY2xzLWZpbHRlci1idG4iKSwKICAgICAgY2xzRHJvcGRvd246IGdldEJ5SWQoImNscy1kcm9wZG93biIpLAogICAgICBjbHNUZXh0OiBnZXRCeUlkKCJjbHMtZmlsdGVyLXRleHQiKSwKICAgICAgZmllbGRDaGlwOiBnZXRCeUlkKCJmaWVsZC1jaGlwLWNvbnRhaW5lciIpLAogICAgICBmaWVsZEJ0bjogZ2V0QnlJZCgiZmllbGQtZmlsdGVyLWJ0biIpLAogICAgICBmaWVsZERyb3Bkb3duOiBnZXRCeUlkKCJmaWVsZC1kcm9wZG93biIpLAogICAgICBmaWVsZFRleHQ6IGdldEJ5SWQoImZpZWxkLWZpbHRlci10ZXh0IiksCiAgICAgIG1ldGhvZENoaXA6IGdldEJ5SWQoIm1ldGhvZC1jaGlwLWNvbnRhaW5lciIpLAogICAgICBtZXRob2RCdG46IGdldEJ5SWQoIm1ldGhvZC1maWx0", + "ZXItYnRuIiksCiAgICAgIG1ldGhvZERyb3Bkb3duOiBnZXRCeUlkKCJtZXRob2QtZHJvcGRvd24iKSwKICAgICAgbWV0aG9kVGV4dDogZ2V0QnlJZCgibWV0aG9kLWZpbHRlci10ZXh0IiksCiAgICAgIGFkZEZpbHRlckNvbnRhaW5lcjogZ2V0QnlJZCgiYWRkLWZpbHRlci1jb250YWluZXIiKSwKICAgICAgYWRkRmlsdGVyQnRuOiBnZXRCeUlkKCJhZGQtZmlsdGVyLWJ0biIpLAogICAgICBhZGRGaWx0ZXJEcm9wZG93bjogZ2V0QnlJZCgiYWRkLWZpbHRlci1kcm9wZG93biIpLAogICAgICBhZGRGaWx0ZXJMaXN0OiBnZXRCeUlkKCJhZGQtZmlsdGVyLWxpc3QiKSwKICAgICAgbGVuc0ZpbHRlckNvbnRhaW5lcjogZ2V0QnlJZCgibGVucy1maWx0ZXItY29udGFpbmVyIiksCiAgICAgIGxlbnNGaWx0ZXJCdG46IGdldEJ5SWQoImxlbnMtZmlsdGVyLWJ0biIpLAogICAgICBsZW5zRmlsdGVyRHJvcGRvd246IGdldEJ5SWQoImxlbnMtZmlsdGVyLWRyb3Bkb3duIiksCiAgICAgIGxlbnNGaWx0ZXJMaXN0OiBnZXRCeUlkKCJsZW5zLWZpbHRlci1saXN0IiksCiAgICAgIGdycEJ0bjogZ2V0QnlJZCgiZ3JvdXAtYnktYnRuIiksCiAgICAgIGdycERyb3Bkb3duOiBnZXRCeUlkKCJncm91cC1ieS1kcm9wZG93biIpLAogICAgICBncnBUZXh0OiBnZXRCeUlkKCJncm91cC1ieS10ZXh0IiksCiAgICAgIGdycENvbnRhaW5lcjogZ2V0QnlJZCgiZ3JvdXAtYnktY29udGFpbmVyIiksCiAgICAgIGdycExpc3Q6IGdldEJ5SWQoImdyb3Vw", + "LWJ5LWxpc3QiKSwKICAgICAgdGFibGVIZWFkZXJzOiBnZXRCeUlkKCJ0YWJsZS1oZWFkZXJzIiksCiAgICAgIHRhYmxlRGF0YTogZ2V0QnlJZCgidGFibGUtZGF0YSIpLAogICAgICBzdGF0c1RhYmxlSGVhZGVyczogZ2V0QnlJZCgic3RhdHMtdGFibGUtaGVhZGVycyIpLAogICAgICBzdGF0c1RhYmxlRGF0YTogZ2V0QnlJZCgic3RhdHMtdGFibGUtZGF0YSIpLAogICAgICBzdGF0c0NvbnRhaW5lcjogZ2V0QnlJZCgic3RhdHMtY29udGFpbmVyIiksCiAgICAgIG1haW5UYWJsZTogZ2V0QnlJZCgibWFpbi10YWJsZSIpLAogICAgICB0b3RhbE9iZnVzY2F0aW9uOiBnZXRCeUlkKCJ0b3RhbC1vYmZ1c2NhdGlvbiIpLAogICAgICB0b3RhbE9wdGltaXphdGlvbjogZ2V0QnlJZCgidG90YWwtb3B0aW1pemF0aW9uIiksCiAgICAgIHRvdGFsU2hyaW5raW5nOiBnZXRCeUlkKCJ0b3RhbC1zaHJpbmtpbmciKSwKICAgIH07CiAgfSwKCiAgcG9wdWxhdGVIZWFkZXJJbmZvKCkge30sCgogIC8qKgogICAqIEluaXRpYWxpemVzIGFsbCBmaWx0ZXJzIChWYXJpYW50cywgTW9kdWxlcywgZXRjLikKICAgKi8KICBwb3B1bGF0ZUZpbHRlcnMoKSB7CiAgICAvLyAtLS0gMS4gRHluYW1pYyBGaWx0ZXJzIChNb2R1bGVzL1BhY2thZ2VzL0NsYXNzZXMpIC0tLQogICAgdGhpcy51cGRhdGVEeW5hbWljRmlsdGVycygpOwogIH0sCgogIC8qKgogICAqIFVwZGF0ZXMgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGluIE1vZHVsZS9QYWNrYWdlL0NsYXNz", + "IGRyb3Bkb3ducyBiYXNlZCBvbiBkZXBlbmRlbmNpZXMuCiAgICogZS5nLiwgU2VsZWN0aW5nICJNb2R1bGUgQSIgZmlsdGVycyB0aGUgUGFja2FnZSBvcHRpb25zIHRvIG9ubHkgdGhvc2UgaW4gTW9kdWxlIEEuCiAgICovCiAgdXBkYXRlRHluYW1pY0ZpbHRlcnMoKSB7CiAgICBjb25zdCB7CiAgICAgIGtlZXBSdWxlcywKICAgICAgY2xhc3NlcywKICAgICAgZmllbGRzLAogICAgICBtZXRob2RzCiAgICB9ID0gdGhpcy5zdGF0ZS5maWx0ZXJzOwogICAgY29uc3QgY2hpcHMgPSB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzOwoKICAgIC8vIC0tLSAxLiBLZWVwIFJ1bGVzIExlbnMgLS0tCiAgICBjb25zdCBrZWVwUnVsZU9wdGlvbnMgPSBbewogICAgICAgIG5hbWU6ICI8Yj5JZGVudGljYWw6PC9iPiBTaG93IHJ1bGVzIHRoYXQgbWF0Y2ggdGhlIHNhbWUgaXRlbXMgYXMgb3RoZXIgcnVsZXMiLAogICAgICAgIHZhbHVlOiAiSWRlbnRpY2FsIgogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIjxiPlN1YnN1bWVkOjwvYj4gU2hvdyBydWxlcyB0aGF0IG1hdGNoIGEgc3Vic2V0IG9mIHRoZSBpdGVtcyBtYXRjaGVkIGJ5IGFub3RoZXIgcnVsZSIsCiAgICAgICAgdmFsdWU6ICJTdWJzdW1lZCIKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICI8Yj5VbnVzZWQ6PC9iPiBTaG93IHJ1bGVzIHRoYXQgZG9uJ3QgbWF0Y2ggYW55dGhpbmciLAogICAgICAgIHZhbHVlOiAiVW51c2VkIgogICAgICB9LAogICAg", + "XTsKCiAgICB0aGlzLmVsZW1lbnRzLm1vZERyb3Bkb3duLnN0eWxlLm1pbldpZHRoID0gIjU1MHB4IjsKICAgIHRoaXMuZWxlbWVudHMubGVuc0ZpbHRlckRyb3Bkb3duLnN0eWxlLm1pbldpZHRoID0gIjU1MHB4IjsKICAgIFVJVXRpbHMuYnVpbGRBY3Rpb25Ecm9wZG93bigibW9kLWRyb3Bkb3duIiwga2VlcFJ1bGVPcHRpb25zLCBrZWVwUnVsZXMsCiAgICAoKSA9PiB7CiAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljRmlsdGVycygpOwogICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CgogICAgVUlVdGlscy5idWlsZEFjdGlvbkRyb3Bkb3duKCJsZW5zLWZpbHRlci1saXN0Iiwga2VlcFJ1bGVPcHRpb25zLAogICAgICBrZWVwUnVsZXMsICgpID0+IHsKICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMuaW5jbHVkZXMoIm1vZHVsZSIpKSB7CiAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzLnB1c2goIm1vZHVsZSIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKHRoaXMuZWxlbWVudHMubGVuc0ZpbHRlckRyb3Bkb3duLCB0aGlzLmVsZW1lbnRzCiAgICAgICAgICAubGVuc0ZpbHRlckJ0bik7CiAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljRmlsdGVycygpOwogICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CgogICAgVUlVdGlscy5yZW5kZXJDaGlwVGV4dCh0aGlzLmVsZW1lbnRzLm1v", + "ZFRleHQsIFVJVXRpbHMuZ2V0RmlsdGVyTGFiZWwoCiAgICAgICAgIktlZXAgUnVsZXMiLCBrZWVwUnVsZXMsIGtlZXBSdWxlT3B0aW9ucy5sZW5ndGgsIGtlZXBSdWxlT3B0aW9ucyksCiAgICAgICJtb2R1bGUiLCB0cnVlKTsKICAgIFVJVXRpbHMudG9nZ2xlVmlzaWJpbGl0eSh0aGlzLmVsZW1lbnRzLm1vZENoaXAsIGNoaXBzLmluY2x1ZGVzKCJtb2R1bGUiKSk7CgogICAgLy8gLS0tIDIuIENsYXNzZXMgRmlsdGVyIC0tLQogICAgY29uc3QgewogICAgICBvcHRpb25zOiBjbGFzc09wdGlvbnMsCiAgICAgIHRvdGFsOiB0b3RhbENsYXNzZXMKICAgIH0gPSB0aGlzLmdldEtlcHRDbGFzc2VzKCk7CiAgICBVSVV0aWxzLmJ1aWxkQWN0aW9uRHJvcGRvd24oImNscy1kcm9wZG93biIsIGNsYXNzT3B0aW9ucywgY2xhc3NlcywgKCkgPT4gewogICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgIHRoaXMucmVuZGVyKCk7CiAgICB9LCB0cnVlLCB0cnVlLCB0b3RhbENsYXNzZXMsICJjbGFzc2VzIiwgKHRlcm0pID0+IHsKICAgICAgY29uc3QgYnJEYXRhID0gQXBwLmJsYXN0UmFkaXVzRGF0YTsKICAgICAgaWYgKCFickRhdGEgfHwgIWJyRGF0YS5rZXB0Q2xhc3NJbmZvVGFibGUpIHJldHVybiB7CiAgICAgICAgb3B0aW9uczogW10sCiAgICAgICAgdG90YWw6IDAKICAgICAgfTsKICAgICAgY29uc3QgdHlwZVJlZk1hcCA9IG5ldyBNYXAoKTsKICAgICAgYnJEYXRhLnR5cGVSZWZlcmVuY2VUYWJsZS5mb3JF", + "YWNoKHQgPT4gdHlwZVJlZk1hcC5zZXQodC5pZCwgdAogICAgICAgIC5qYXZhRGVzY3JpcHRvcikpOwoKICAgICAgY29uc3QgZmlsdGVyZWQgPSBickRhdGEua2VwdENsYXNzSW5mb1RhYmxlLmZpbHRlcihjID0+IHsKICAgICAgICBjb25zdCBuYW1lID0gZm9ybWF0RGVzY3JpcHRvcih0eXBlUmVmTWFwLmdldChjCiAgICAgICAgICAuY2xhc3NSZWZlcmVuY2VJZCkpOwogICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSk7CiAgICAgIH0pOwogICAgICBjb25zdCByZXN1bHRzID0gZmlsdGVyZWQuc2xpY2UoMCwgMTAwMCkubWFwKGMgPT4gewogICAgICAgIGNvbnN0IG5hbWUgPSBlc2NhcGVIVE1MKGZvcm1hdERlc2NyaXB0b3IodHlwZVJlZk1hcC5nZXQoYwogICAgICAgICAgLmNsYXNzUmVmZXJlbmNlSWQpKSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG5hbWUsCiAgICAgICAgICB2YWx1ZTogYy5pZAogICAgICAgIH07CiAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIG9wdGlvbnM6IHJlc3VsdHMsCiAgICAgICAgdG90YWw6IGZpbHRlcmVkLmxlbmd0aAogICAgICB9OwogICAgfSk7CiAgICBVSVV0aWxzLnJlbmRlckNoaXBUZXh0KHRoaXMuZWxlbWVudHMuY2xzVGV4dCwgVUlVdGlscy5nZXRGaWx0ZXJMYWJlbCgKICAgICAgIkNsYXNzZXMiLCBjbGFzc2VzLCB0b3RhbENsYXNzZXMsIGNsYXNzT3B0aW9ucyksICJjbGFzcyIsIHRydWUpOwogICAgVUlVdGlscy50b2dn", + "bGVWaXNpYmlsaXR5KHRoaXMuZWxlbWVudHMuY2xzQ2hpcCwgY2hpcHMuaW5jbHVkZXMoImNsYXNzIikpOwoKICAgIC8vIC0tLSAzLiBGaWVsZHMgRmlsdGVyIC0tLQogICAgY29uc3QgewogICAgICBvcHRpb25zOiBmaWVsZE9wdGlvbnMsCiAgICAgIHRvdGFsOiB0b3RhbEZpZWxkcwogICAgfSA9IHRoaXMuZ2V0S2VwdEZpZWxkcygpOwogICAgVUlVdGlscy5idWlsZEFjdGlvbkRyb3Bkb3duKCJmaWVsZC1kcm9wZG93biIsIGZpZWxkT3B0aW9ucywgZmllbGRzLAogICgpID0+IHsKICAgICAgdGhpcy51cGRhdGVEeW5hbWljRmlsdGVycygpOwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfSwgdHJ1ZSwgdHJ1ZSwgdG90YWxGaWVsZHMsICJmaWVsZHMiLCAodGVybSkgPT4gewogICAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgICBpZiAoIWJyRGF0YSB8fCAhYnJEYXRhLmtlcHRGaWVsZEluZm9UYWJsZSkgcmV0dXJuIHsKICAgICAgICBvcHRpb25zOiBbXSwKICAgICAgICB0b3RhbDogMAogICAgICB9OwogICAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgICBickRhdGEudHlwZVJlZmVyZW5jZVRhYmxlLmZvckVhY2godCA9PiB0eXBlUmVmTWFwLnNldCh0LmlkLCB0CiAgICAgICAgLmphdmFEZXNjcmlwdG9yKSk7CiAgICAgIGNvbnN0IGZpZWxkUmVmTWFwID0gbmV3IE1hcCgpOwogICAgICBickRhdGEuZmllbGRSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKGYgPT4gZmllbGRS", + "ZWZNYXAuc2V0KGYuaWQsIGYpKTsKCiAgICAgIGNvbnN0IGZpbHRlcmVkID0gYnJEYXRhLmtlcHRGaWVsZEluZm9UYWJsZS5maWx0ZXIoZiA9PiB7CiAgICAgICAgY29uc3QgZmllbGRSZWYgPSBmaWVsZFJlZk1hcC5nZXQoZi5maWVsZFJlZmVyZW5jZUlkKTsKICAgICAgICBjb25zdCBuYW1lID0gZm9ybWF0RmllbGROYW1lKGZpZWxkUmVmLCBickRhdGEsIHR5cGVSZWZNYXApOwogICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSk7CiAgICAgIH0pOwogICAgICBjb25zdCByZXN1bHRzID0gZmlsdGVyZWQuc2xpY2UoMCwgMTAwMCkubWFwKGYgPT4gewogICAgICAgIGNvbnN0IGZpZWxkUmVmID0gZmllbGRSZWZNYXAuZ2V0KGYuZmllbGRSZWZlcmVuY2VJZCk7CiAgICAgICAgY29uc3QgbmFtZSA9IGVzY2FwZUhUTUwoZm9ybWF0RmllbGROYW1lKGZpZWxkUmVmLCBickRhdGEsCiAgICAgICAgICB0eXBlUmVmTWFwKSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG5hbWUsCiAgICAgICAgICB2YWx1ZTogZi5pZAogICAgICAgIH07CiAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIG9wdGlvbnM6IHJlc3VsdHMsCiAgICAgICAgdG90YWw6IGZpbHRlcmVkLmxlbmd0aAogICAgICB9OwogICAgfSk7CiAgICBVSVV0aWxzLnJlbmRlckNoaXBUZXh0KHRoaXMuZWxlbWVudHMuZmllbGRUZXh0LCBVSVV0aWxzLmdldEZpbHRlckxhYmVsKAogICAgICAiRmllbGRzIiwgZmllbGRzLCB0", + "b3RhbEZpZWxkcywgZmllbGRPcHRpb25zKSwgImZpZWxkIiwgdHJ1ZSk7CiAgICBVSVV0aWxzLnRvZ2dsZVZpc2liaWxpdHkodGhpcy5lbGVtZW50cy5maWVsZENoaXAsIGNoaXBzLmluY2x1ZGVzKAogICAgImZpZWxkIikpOwoKICAgIC8vIC0tLSA0LiBNZXRob2RzIEZpbHRlciAtLS0KICAgIGNvbnN0IHsKICAgICAgb3B0aW9uczogbWV0aG9kT3B0aW9ucywKICAgICAgdG90YWw6IHRvdGFsTWV0aG9kcwogICAgfSA9IHRoaXMuZ2V0S2VwdE1ldGhvZHMoKTsKICAgIFVJVXRpbHMuYnVpbGRBY3Rpb25Ecm9wZG93bigibWV0aG9kLWRyb3Bkb3duIiwgbWV0aG9kT3B0aW9ucywgbWV0aG9kcywKICAgICgpID0+IHsKICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgfSwgdHJ1ZSwgdHJ1ZSwgdG90YWxNZXRob2RzLCAibWV0aG9kcyIsICh0ZXJtKSA9PiB7CiAgICAgICAgY29uc3QgYnJEYXRhID0gQXBwLmJsYXN0UmFkaXVzRGF0YTsKICAgICAgICBpZiAoIWJyRGF0YSB8fCAhYnJEYXRhLmtlcHRNZXRob2RJbmZvVGFibGUpIHJldHVybiB7CiAgICAgICAgICBvcHRpb25zOiBbXSwKICAgICAgICAgIHRvdGFsOiAwCiAgICAgICAgfTsKICAgICAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgICAgIGJyRGF0YS50eXBlUmVmZXJlbmNlVGFibGUuZm9yRWFjaCh0ID0+IHR5cGVSZWZNYXAuc2V0KHQuaWQsIHQKICAgICAgICAgIC5qYXZhRGVz", + "Y3JpcHRvcikpOwogICAgICAgIGNvbnN0IG1ldGhvZFJlZk1hcCA9IG5ldyBNYXAoKTsKICAgICAgICBickRhdGEubWV0aG9kUmVmZXJlbmNlVGFibGUuZm9yRWFjaChtID0+IG1ldGhvZFJlZk1hcC5zZXQobS5pZCwgbSkpOwoKICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGJyRGF0YS5rZXB0TWV0aG9kSW5mb1RhYmxlLmZpbHRlcihtID0+IHsKICAgICAgICAgIGNvbnN0IG1ldGhvZFJlZiA9IG1ldGhvZFJlZk1hcC5nZXQobS5tZXRob2RSZWZlcmVuY2VJZCk7CiAgICAgICAgICBjb25zdCBuYW1lID0gZm9ybWF0TWV0aG9kTmFtZShtZXRob2RSZWYsIGJyRGF0YSwgdHlwZVJlZk1hcCk7CiAgICAgICAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pOwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmaWx0ZXJlZC5zbGljZSgwLCAxMDAwKS5tYXAobSA9PiB7CiAgICAgICAgICBjb25zdCBtZXRob2RSZWYgPSBtZXRob2RSZWZNYXAuZ2V0KG0ubWV0aG9kUmVmZXJlbmNlSWQpOwogICAgICAgICAgY29uc3QgbmFtZSA9IGVzY2FwZUhUTUwoZm9ybWF0TWV0aG9kTmFtZShtZXRob2RSZWYsIGJyRGF0YSwKICAgICAgICAgICAgdHlwZVJlZk1hcCkpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgdmFsdWU6IG0uaWQKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG9wdGlvbnM6IHJlc3VsdHMs", + "CiAgICAgICAgICB0b3RhbDogZmlsdGVyZWQubGVuZ3RoCiAgICAgICAgfTsKICAgICAgfSk7CiAgICBVSVV0aWxzLnJlbmRlckNoaXBUZXh0KHRoaXMuZWxlbWVudHMubWV0aG9kVGV4dCwgVUlVdGlscy5nZXRGaWx0ZXJMYWJlbCgKICAgICAgIk1ldGhvZHMiLCBtZXRob2RzLCB0b3RhbE1ldGhvZHMsIG1ldGhvZE9wdGlvbnMpLCAibWV0aG9kIiwgdHJ1ZSk7CiAgICBVSVV0aWxzLnRvZ2dsZVZpc2liaWxpdHkodGhpcy5lbGVtZW50cy5tZXRob2RDaGlwLCBjaGlwcy5pbmNsdWRlcygKICAgICAgIm1ldGhvZCIpKTsKCiAgICAvLyAtLS0gQWRkIEZpbHRlciBCdXR0b24gTG9naWMgLS0tCiAgICBjb25zdCBhdmFpbGFibGVGaWx0ZXJzID0gW107CiAgICBpZiAoIWNoaXBzLmluY2x1ZGVzKCJjbGFzcyIpKSBhdmFpbGFibGVGaWx0ZXJzLnB1c2goewogICAgICBuYW1lOiAiQ2xhc3NlcyIsCiAgICAgIHZhbHVlOiAiY2xhc3MiLAogICAgICBvcHRpb25zOiBjbGFzc09wdGlvbnMsCiAgICAgIHRvdGFsOiB0b3RhbENsYXNzZXMsCiAgICAgIHN0YXRlOiBjbGFzc2VzCiAgICB9KTsKICAgIGlmICghY2hpcHMuaW5jbHVkZXMoImZpZWxkIikpIGF2YWlsYWJsZUZpbHRlcnMucHVzaCh7CiAgICAgIG5hbWU6ICJGaWVsZHMiLAogICAgICB2YWx1ZTogImZpZWxkIiwKICAgICAgb3B0aW9uczogZmllbGRPcHRpb25zLAogICAgICB0b3RhbDogdG90YWxGaWVsZHMsCiAgICAgIHN0YXRlOiBmaWVsZHMKICAgIH0pOwogICAgaWYgKCFj", + "aGlwcy5pbmNsdWRlcygibWV0aG9kIikpIGF2YWlsYWJsZUZpbHRlcnMucHVzaCh7CiAgICAgIG5hbWU6ICJNZXRob2RzIiwKICAgICAgdmFsdWU6ICJtZXRob2QiLAogICAgICBvcHRpb25zOiBtZXRob2RPcHRpb25zLAogICAgICB0b3RhbDogdG90YWxNZXRob2RzLAogICAgICBzdGF0ZTogbWV0aG9kcwogICAgfSk7CgogICAgaWYgKGF2YWlsYWJsZUZpbHRlcnMubGVuZ3RoID4gMCkgewogICAgICB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKICAgICAgdGhpcy5lbGVtZW50cy5hZGRGaWx0ZXJMaXN0LmlubmVySFRNTCA9IGF2YWlsYWJsZUZpbHRlcnMKICAgICAgICAubWFwKGYgPT4KICAgICAgICAgIGA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24taXRlbSBhZGQtZmlsdGVyLW9wdGlvbiIgZGF0YS12YWx1ZT0iJHtmLnZhbHVlfSI+JHtmLm5hbWV9PC9hPmAKICAgICAgICAgICkKICAgICAgICAuam9pbigiIik7CgogICAgICB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckxpc3QucXVlcnlTZWxlY3RvckFsbCgiLmFkZC1maWx0ZXItb3B0aW9uIikKICAgICAgICAuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZSkgPT4gewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGl0ZW0uZGF0", + "YXNldC52YWx1ZTsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzLmluY2x1ZGVzKHZhbCkpIHsKICAgICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzLnB1c2godmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ2xvc2UgdGhlICJBZGQgZmlsdGVyIiBkcm9wZG93bgogICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJiZy1ncmF5LTIwMCIpOwoKICAgICAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljRmlsdGVycygpOwogICAgICAgICAgICB0aGlzLnJlbmRlcigpOwoKICAgICAgICAgICAgLy8gQXV0by1vcGVuIG5ld2x5IGFkZGVkIGRyb3Bkb3duCiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGlmICh2YWwgPT09ICJjbGFzcyIpIHRoaXMudG9nZ2xlRHJvcGRvd24odGhpcy5lbGVtZW50cwogICAgICAgICAgICAgICAgLmNsc0Ryb3Bkb3duLCB0aGlzLmVsZW1lbnRzLmNsc0J0bik7CiAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gImZpZWxkIikgdGhpcy50b2dnbGVEcm9wZG93bih0aGlzLmVsZW1lbnRzCiAgICAgICAgICAgICAgICAuZmllbGREcm9wZG93biwgdGhpcy5lbGVtZW50cy5maWVsZEJ0bik7CiAgICAgICAgICAgICAgaWYgKHZhbCA9", + "PT0gIm1ldGhvZCIpIHRoaXMudG9nZ2xlRHJvcGRvd24odGhpcwogICAgICAgICAgICAgICAgLmVsZW1lbnRzLm1ldGhvZERyb3Bkb3duLCB0aGlzLmVsZW1lbnRzLm1ldGhvZEJ0bik7CiAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKICAgIH0KICB9LAoKICBnZXRLZXB0Q2xhc3NlcygpIHsKICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICBpZiAoIWJyRGF0YSB8fCAhYnJEYXRhLmtlcHRDbGFzc0luZm9UYWJsZSkgcmV0dXJuIHsKICAgICAgb3B0aW9uczogW10sCiAgICAgIHRvdGFsOiAwCiAgICB9OwogICAgY29uc3QgdHlwZVJlZk1hcCA9IG5ldyBNYXAoKTsKICAgIGJyRGF0YS50eXBlUmVmZXJlbmNlVGFibGUuZm9yRWFjaCh0ID0+IHR5cGVSZWZNYXAuc2V0KHQuaWQsIHQKICAgICAgLmphdmFEZXNjcmlwdG9yKSk7CgogICAgY29uc3Qgb3B0aW9ucyA9IGJyRGF0YS5rZXB0Q2xhc3NJbmZvVGFibGUuc2xpY2UoMCwgMTAwMCkubWFwKGMgPT4gewogICAgICBjb25zdCBuYW1lID0gZXNjYXBlSFRNTChmb3JtYXREZXNjcmlwdG9yKHR5cGVSZWZNYXAuZ2V0KGMKICAgICAgICAuY2xhc3NSZWZlcmVuY2VJZCkpKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lLAogICAgICAgIHZhbHVlOiBjLmlkCiAgICAgIH07CiAg", + "ICB9KTsKICAgIHJldHVybiB7CiAgICAgIG9wdGlvbnMsCiAgICAgIHRvdGFsOiBickRhdGEua2VwdENsYXNzSW5mb1RhYmxlLmxlbmd0aAogICAgfTsKICB9LAoKICBnZXRLZXB0RmllbGRzKCkgewogICAgY29uc3QgYnJEYXRhID0gQXBwLmJsYXN0UmFkaXVzRGF0YTsKICAgIGlmICghYnJEYXRhIHx8ICFickRhdGEua2VwdEZpZWxkSW5mb1RhYmxlKSByZXR1cm4gewogICAgICBvcHRpb25zOiBbXSwKICAgICAgdG90YWw6IDAKICAgIH07CiAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgYnJEYXRhLnR5cGVSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKHQgPT4gdHlwZVJlZk1hcC5zZXQodC5pZCwgdAogICAgICAuamF2YURlc2NyaXB0b3IpKTsKICAgIGNvbnN0IGZpZWxkUmVmTWFwID0gbmV3IE1hcCgpOwogICAgYnJEYXRhLmZpZWxkUmVmZXJlbmNlVGFibGUuZm9yRWFjaChmID0+IGZpZWxkUmVmTWFwLnNldChmLmlkLCBmKSk7CgogICAgY29uc3Qgb3B0aW9ucyA9IGJyRGF0YS5rZXB0RmllbGRJbmZvVGFibGUuc2xpY2UoMCwgMTAwMCkubWFwKGYgPT4gewogICAgICBjb25zdCBmaWVsZFJlZiA9IGZpZWxkUmVmTWFwLmdldChmLmZpZWxkUmVmZXJlbmNlSWQpOwogICAgICBjb25zdCBuYW1lID0gZXNjYXBlSFRNTChmb3JtYXRGaWVsZE5hbWUoZmllbGRSZWYsIGJyRGF0YSwKICAgICAgICB0eXBlUmVmTWFwKSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbmFtZSwKICAgICAgICB2YWx1ZTogZi5pZAog", + "ICAgICB9OwogICAgfSk7CiAgICByZXR1cm4gewogICAgICBvcHRpb25zLAogICAgICB0b3RhbDogYnJEYXRhLmtlcHRGaWVsZEluZm9UYWJsZS5sZW5ndGgKICAgIH07CiAgfSwKCiAgZ2V0S2VwdE1ldGhvZHMoKSB7CiAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgaWYgKCFickRhdGEgfHwgIWJyRGF0YS5rZXB0TWV0aG9kSW5mb1RhYmxlKSByZXR1cm4gewogICAgICBvcHRpb25zOiBbXSwKICAgICAgdG90YWw6IDAKICAgIH07CiAgICBjb25zdCB0eXBlUmVmTWFwID0gbmV3IE1hcCgpOwogICAgYnJEYXRhLnR5cGVSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKHQgPT4gdHlwZVJlZk1hcC5zZXQodC5pZCwgdAogICAgICAuamF2YURlc2NyaXB0b3IpKTsKICAgIGNvbnN0IG1ldGhvZFJlZk1hcCA9IG5ldyBNYXAoKTsKICAgIGJyRGF0YS5tZXRob2RSZWZlcmVuY2VUYWJsZS5mb3JFYWNoKG0gPT4gbWV0aG9kUmVmTWFwLnNldChtLmlkLCBtKSk7CgogICAgY29uc3Qgb3B0aW9ucyA9IGJyRGF0YS5rZXB0TWV0aG9kSW5mb1RhYmxlLnNsaWNlKDAsIDEwMDApLm1hcChtID0+IHsKICAgICAgY29uc3QgbWV0aG9kUmVmID0gbWV0aG9kUmVmTWFwLmdldChtLm1ldGhvZFJlZmVyZW5jZUlkKTsKICAgICAgY29uc3QgbmFtZSA9IGVzY2FwZUhUTUwoZm9ybWF0TWV0aG9kTmFtZShtZXRob2RSZWYsIGJyRGF0YSwKICAgICAgICB0eXBlUmVmTWFwKSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbmFtZSwK", + "ICAgICAgICB2YWx1ZTogbS5pZAogICAgICB9OwogICAgfSk7CiAgICByZXR1cm4gewogICAgICBvcHRpb25zLAogICAgICB0b3RhbDogYnJEYXRhLmtlcHRNZXRob2RJbmZvVGFibGUubGVuZ3RoCiAgICB9OwogIH0sCgogIHRvZ2dsZURyb3Bkb3duKGRyb3Bkb3duLCB0cmlnZ2VyQnRuID0gbnVsbCkgewogICAgY29uc3QgYWxsSGVscGVycyA9IFt7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMuZ3JwRHJvcGRvd24sCiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLmdycEJ0bgogICAgICB9LAogICAgICB7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMubW9kRHJvcGRvd24sCiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLm1vZEJ0bgogICAgICB9LAogICAgICB7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMuY2xzRHJvcGRvd24sCiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLmNsc0J0bgogICAgICB9LAogICAgICB7CiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMuZmllbGREcm9wZG93biwKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMuZmllbGRCdG4KICAgICAgfSwKICAgICAgewogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLm1ldGhvZERyb3Bkb3duLAogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5tZXRob2RCdG4KICAgICAgfSwKICAgICAgewogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckRyb3Bkb3duLAogICAgICAgIGJ0bjogdGhpcy5lbGVtZW50cy5hZGRGaWx0ZXJCdG4KICAgICAg", + "fSwKICAgICAgewogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLmxlbnNGaWx0ZXJEcm9wZG93biwKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMubGVuc0ZpbHRlckJ0bgogICAgICB9LAogICAgXTsKCiAgICBjb25zdCBpc09wZW5pbmcgPSBkcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoImhpZGRlbiIpOwoKICAgIC8vIENsb3NlIGFsbCBvdGhlcnMgZmlyc3QKICAgIGFsbEhlbHBlcnMuZm9yRWFjaCgoewogICAgICBkZCwKICAgICAgYnRuCiAgICB9KSA9PiB7CiAgICAgIGlmIChkZCAhPT0gZHJvcGRvd24pIHsKICAgICAgICBpZiAoZGQpIGRkLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgICAgIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJiZy1ncmF5LTIwMCIpOwogICAgICB9CiAgICB9KTsKCiAgICBpZiAoaXNPcGVuaW5nKSB7CiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICBpZiAodHJpZ2dlckJ0bikgdHJpZ2dlckJ0bi5jbGFzc0xpc3QuYWRkKCJiZy1ncmF5LTIwMCIpOwogICAgfSBlbHNlIHsKICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgIGlmICh0cmlnZ2VyQnRuKSB0cmlnZ2VyQnRuLmNsYXNzTGlzdC5yZW1vdmUoImJnLWdyYXktMjAwIik7CiAgICB9CiAgfSwKCiAgYmluZEV2ZW50cygpIHsKICAgIC8vIC0tLSBEcm9wZG93biBNYW5hZ2VtZW50IC0tLQogICAgY29uc3QgbWFwID0gW3sKICAgICAgICBidG46", + "IHRoaXMuZWxlbWVudHMuZ3JwQnRuLAogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLmdycERyb3Bkb3duCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMubW9kQnRuLAogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLm1vZERyb3Bkb3duCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMuY2xzQnRuLAogICAgICAgIGRkOiB0aGlzLmVsZW1lbnRzLmNsc0Ryb3Bkb3duCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBidG46IHRoaXMuZWxlbWVudHMuZmllbGRCdG4sCiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMuZmllbGREcm9wZG93bgogICAgICB9LAogICAgICB7CiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLm1ldGhvZEJ0biwKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5tZXRob2REcm9wZG93bgogICAgICB9LAogICAgICB7CiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLmFkZEZpbHRlckJ0biwKICAgICAgICBkZDogdGhpcy5lbGVtZW50cy5hZGRGaWx0ZXJEcm9wZG93bgogICAgICB9LAogICAgICB7CiAgICAgICAgYnRuOiB0aGlzLmVsZW1lbnRzLmxlbnNGaWx0ZXJCdG4sCiAgICAgICAgZGQ6IHRoaXMuZWxlbWVudHMubGVuc0ZpbHRlckRyb3Bkb3duCiAgICAgIH0sCiAgICBdOwoKICAgIG1hcC5mb3JFYWNoKCh7CiAgICAgIGJ0biwKICAgICAgZGQKICAgIH0pID0+IHsKICAgICAgaWYgKGJ0biAmJiBkZCkgewogICAgICAgIGJ0bi5hZGRFdmVudExp", + "c3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgiLmNoaXAtY2xvc2UiKSkgcmV0dXJuOwogICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oZGQsIGJ0bik7CiAgICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNGaWx0ZXJzKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIEdsb2JhbCBjbGljayBsaXN0ZW5lciB0byBjbG9zZSBkcm9wZG93bnMKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUpID0+IHsKICAgICAgbGV0IGFueUNsb3NlZCA9IGZhbHNlOwogICAgICBtYXAuZm9yRWFjaCgoewogICAgICAgIGRkLAogICAgICAgIGJ0bgogICAgICB9KSA9PiB7CiAgICAgICAgaWYgKGRkICYmICFkZC5jb250YWlucyhlLnRhcmdldCkgJiYgKCFidG4gfHwgIWJ0bi5jb250YWlucyhlCiAgICAgICAgICAgIC50YXJnZXQpKSkgewogICAgICAgICAgaWYgKCFkZC5jbGFzc0xpc3QuY29udGFpbnMoImhpZGRlbiIpKSB7CiAgICAgICAgICAgIGRkLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgICAgICAgICBpZiAoYnRuKSBidG4uY2xhc3NMaXN0LnJlbW92ZSgiYmctZ3JheS0yMDAiKTsKICAgICAgICAgICAgYW55Q2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAoYW55Q2xvc2VkKSB7CiAgICAgICAgdGhpcy51cGRhdGVE", + "eW5hbWljRmlsdGVycygpOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBDaGlwIHJlbW92YWxzCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsdGVyLWNoaXBzLWNvbnRhaW5lciIpLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICJjbGljayIsIChlKSA9PiB7CiAgICAgICAgY29uc3QgY2xvc2VCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCIuY2hpcC1jbG9zZSIpOwogICAgICAgIGlmIChjbG9zZUJ0bikgewogICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IHR5cGUgPSBjbG9zZUJ0bi5kYXRhc2V0LmNsZWFyOwogICAgICAgICAgaWYgKHR5cGUgPT09ICJtb2R1bGUiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVycy5rZWVwUnVsZXMgPSBbXTsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcyA9IHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMKICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYyAhPT0gIm1vZHVsZSIpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAiY2xhc3MiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVycy5jbGFzc2VzID0gW107CiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMgPSB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzCiAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMgIT09ICJjbGFzcyIpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAiZmllbGQiKSB7", + "CiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVycy5maWVsZHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVGaWx0ZXJDaGlwcyA9IHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMKICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYyAhPT0gImZpZWxkIik7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJtZXRob2QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVycy5tZXRob2RzID0gW107CiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlRmlsdGVyQ2hpcHMgPSB0aGlzLnN0YXRlLmFjdGl2ZUZpbHRlckNoaXBzCiAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMgIT09ICJtZXRob2QiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudXBkYXRlRHluYW1pY0ZpbHRlcnMoKTsKICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgfQogICAgICB9KTsKCgogICAgLy8gLS0tIEdyb3VwIEJ5IERyb3Bkb3duIC0tLQogICAgdGhpcy5lbGVtZW50cy5ncnBEcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgIGNvbnN0IGl0ZW0gPSBlLnRhcmdldC5jbG9zZXN0KCIuZHJvcGRvd24taXRlbSIpOwogICAgICBpZiAoIWl0ZW0pIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLnN0YXRlLmN1cnJlbnRWaWV3ID0gaXRlbS5kYXRhc2V0LnZhbHVlOwogICAgICB0aGlzLnN0YXRlLmRyaWxsQ29udGV4dCA9IHsK", + "ICAgICAgICBtb2R1bGU6IG51bGwsCiAgICAgICAgcGtnOiBudWxsCiAgICAgIH07IC8vIFJlc2V0IERyaWxsLURvd24KCiAgICAgIC8vIFJlc2V0IGRlZmF1bHQgc29ydCBiYXNlZCBvbiB2aWV3CiAgICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuQ0xBU1NFUyB8fAogICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5GSUVMRFMgfHwKICAgICAgICB0aGlzLnN0YXRlLmN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTUVUSE9EUykgewogICAgICAgIHRoaXMuc3RhdGUuc29ydCA9IHsKICAgICAgICAgIGJ5OiAibmFtZSIsCiAgICAgICAgICBvcmRlcjogImFzYyIKICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc3RhdGUuc29ydCA9IHsKICAgICAgICAgIGJ5OiAibWF0Y2hlcy50b3RhbCIsCiAgICAgICAgICBvcmRlcjogImRlc2MiCiAgICAgICAgfTsKICAgICAgfQoKICAgICAgdGhpcy50b2dnbGVEcm9wZG93bih0aGlzLmVsZW1lbnRzLmdycERyb3Bkb3duLCB0aGlzLmVsZW1lbnRzCiAgICAgIC5ncnBCdG4pOwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfSk7CgogICAgLy8gLS0tIFRhYmxlIFNvcnRpbmcgLS0tCiAgICB0aGlzLmVsZW1lbnRzLnRhYmxlSGVhZGVycy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgIGNvbnN0IHRoID0gZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEt", + "c29ydC1ieV0iKTsKICAgICAgaWYgKCF0aCkgcmV0dXJuOwogICAgICBjb25zdCBuZXdTb3J0QnkgPSB0aC5kYXRhc2V0LnNvcnRCeTsKICAgICAgaWYgKHRoaXMuc3RhdGUuc29ydC5ieSA9PT0gbmV3U29ydEJ5KQogICAgICAgIHRoaXMuc3RhdGUuc29ydC5vcmRlciA9IHRoaXMuc3RhdGUuc29ydC5vcmRlciA9PT0gImFzYyIgPyAiZGVzYyIgOgogICAgICAgICJhc2MiOwogICAgICBlbHNlIHsKICAgICAgICB0aGlzLnN0YXRlLnNvcnQuYnkgPSBuZXdTb3J0Qnk7CiAgICAgICAgdGhpcy5zdGF0ZS5zb3J0Lm9yZGVyID0gImRlc2MiOwogICAgICB9CiAgICAgIHRoaXMucmVuZGVyKCk7CiAgICB9KTsKCiAgICAvLyAtLS0gVGFibGUgUm93IEludGVyYWN0aW9uIChNYW51YWwgRHJpbGwtRG93bikgLS0tCiAgICB0aGlzLmVsZW1lbnRzLnRhYmxlRGF0YS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgIGNvbnN0IHJ1bGVUZCA9IGUudGFyZ2V0LmNsb3Nlc3QoInRkW2RhdGEtcnVsZS1pZF0iKTsKICAgICAgaWYgKHJ1bGVUZCkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBBcHAuc2hvd0RldGFpbHNWaWV3KHJ1bGVUZC5kYXRhc2V0LnJ1bGVJZCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBmaWxlVGQgPSBlLnRhcmdldC5jbG9zZXN0KCJ0ZFtkYXRhLWZpbGUtb3JpZ2luLWlkXSIpOwogICAgICBpZiAoZmlsZVRkKSB7CiAgICAgICAgZS5wcmV2ZW50", + "RGVmYXVsdCgpOwogICAgICAgIEFwcC5zaG93RmlsZURldGFpbHNWaWV3KGZpbGVUZC5kYXRhc2V0LmZpbGVPcmlnaW5JZCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCB0ZCA9IGUudGFyZ2V0LmNsb3Nlc3QoInRkW2RhdGEtbmFtZV0iKTsKICAgICAgaWYgKCF0ZCkgcmV0dXJuOwoKICAgICAgY29uc3QgewogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZSwKICAgICAgICBtb2R1bGVOYW1lCiAgICAgIH0gPSB0ZC5kYXRhc2V0OwoKICAgICAgLy8gVXBkYXRlIERyaWxsLUNvbnRleHQgKFNpbGVudCkKICAgICAgaWYgKHR5cGUgPT09ICJtb2R1bGUiKSB7CiAgICAgICAgdGhpcy5zdGF0ZS5kcmlsbENvbnRleHQubW9kdWxlID0gbmFtZTsKICAgICAgICB0aGlzLnN0YXRlLmRyaWxsQ29udGV4dC5wa2cgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJwYWNrYWdlIikgewogICAgICAgIHRoaXMuc3RhdGUuZHJpbGxDb250ZXh0Lm1vZHVsZSA9IG1vZHVsZU5hbWUgfHwgdGhpcy5zdGF0ZQogICAgICAgICAgLmRyaWxsQ29udGV4dC5tb2R1bGU7CiAgICAgICAgdGhpcy5zdGF0ZS5kcmlsbENvbnRleHQucGtnID0gbmFtZTsKICAgICAgfQoKICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpOwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfSk7CiAgfSwKCiAgLyoqCiAgICogQ29yZSBEYXRhIFBpcGVsaW5lOiBGaWx0ZXJzIGFuZCBGbGF0dGVucyBkYXRhIGJhc2VkIG9uIGN1cnJlbnQg", + "VmlldyBNb2RlIGFuZCBGaWx0ZXJzLgogICAqLwogIGFwcGx5S2VlcFJ1bGVMZW5zKHJ1bGVzLCBsZW5zKSB7CiAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgaWYgKCFsZW5zIHx8ICFickRhdGEpIHJldHVybiBydWxlczsKCiAgICBjb25zdCBydWxlTWFwID0gbmV3IE1hcCgpOwogICAgYnJEYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZS5mb3JFYWNoKHIgPT4gewogICAgICBydWxlTWFwLnNldChyLmlkLCByKTsKICAgIH0pOwoKICAgIHJldHVybiBydWxlcy5maWx0ZXIociA9PiB7CiAgICAgIGNvbnN0IGdldFN1YnN1bWVkQnkgPSAocnVsZSkgPT4gcnVsZS5zdWJzdW1lZEJ5IHx8IChydWxlCiAgICAgICAgLmJsYXN0UmFkaXVzICYmIHJ1bGUuYmxhc3RSYWRpdXMuc3Vic3VtZWRCeSkgfHwgW107CiAgICAgIGNvbnN0IGdldE1hdGNoZXNUb3RhbCA9IChydWxlKSA9PiB7CiAgICAgICAgaWYgKHJ1bGUubWF0Y2hlcyAmJiBydWxlLm1hdGNoZXMudG90YWwgIT09IHVuZGVmaW5lZCkKICAgICAgICByZXR1cm4gcnVsZS5tYXRjaGVzLnRvdGFsOwogICAgICAgIGNvbnN0IGIgPSBydWxlLmJsYXN0UmFkaXVzIHx8IHt9OwogICAgICAgIHJldHVybiAoYi5jbGFzc0JsYXN0UmFkaXVzIHx8IFtdKS5sZW5ndGggKyAoYgogICAgICAgICAgLmZpZWxkQmxhc3RSYWRpdXMgfHwgW10pLmxlbmd0aCArIChiLm1ldGhvZEJsYXN0UmFkaXVzIHx8CiAgICAgICAgW10pLmxlbmd0aDsKICAgICAgfTsK", + "CiAgICAgIGNvbnN0IHN1YnN1bWVkQnkgPSBnZXRTdWJzdW1lZEJ5KHIpOwoKICAgICAgaWYgKGxlbnMgPT09ICJJZGVudGljYWwiKSB7CiAgICAgICAgY29uc3QgaWRlbnRpY2FsID0gc3Vic3VtZWRCeS5maWx0ZXIob3RoZXJJZCA9PiB7CiAgICAgICAgICBjb25zdCBvdGhlciA9IHJ1bGVNYXAuZ2V0KG90aGVySWQpOwogICAgICAgICAgcmV0dXJuIG90aGVyICYmIChvdGhlci5ibGFzdFJhZGl1cz8uc3Vic3VtZWRCeSB8fCBbXSkKICAgICAgICAgICAgLmluY2x1ZGVzKHIuaWQpOwogICAgICAgIH0pLm1hcChvdGhlcklkID0+IHJ1bGVNYXAuZ2V0KG90aGVySWQpKTsKCiAgICAgICAgaWYgKGlkZW50aWNhbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICByLmlkZW50aWNhbFJ1bGVzID0gaWRlbnRpY2FsOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChsZW5zID09PSAiU3Vic3VtZWQiKSB7CiAgICAgICAgaWYgKHN1YnN1bWVkQnkubGVuZ3RoID4gMCkgewogICAgICAgICAgci5zdWJzdW1lZEJ5UnVsZXMgPSBzdWJzdW1lZEJ5Lm1hcChpZCA9PiBydWxlTWFwLmdldChpZCkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChsZW5zID09PSAiVW51c2VkIikgewogICAgICAgIHJldHVybiBnZXRNYXRjaGVzVG90YWwocikgPT09IDA7CiAgICAgIH0KICAgICAg", + "cmV0dXJuIHRydWU7CiAgICB9KTsKICB9LAoKICBnZXRGaWx0ZXJlZERhdGEoKSB7CiAgICBjb25zdCB7CiAgICAgIGN1cnJlbnRWaWV3LAogICAgICBmaWx0ZXJzCiAgICB9ID0gdGhpcy5zdGF0ZTsKICAgIGNvbnN0IGJyRGF0YSA9IEFwcC5ibGFzdFJhZGl1c0RhdGE7CiAgICBpZiAoIWJyRGF0YSkgcmV0dXJuIFtdOwoKICAgIGxldCBkYXRhID0gW107CiAgICBpZiAoY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5QQUNLQUdFUykgewogICAgICBkYXRhID0gZ2V0UnVsZUZpbGVzKGJyRGF0YSkuZmlsdGVyKGYgPT4gZi5rZWVwUnVsZXMgPiAwKTsKICAgIH0gZWxzZSB7CiAgICAgIGRhdGEgPSBnZXRSdWxlcyhickRhdGEpOwogICAgICAvLyBEZWZhdWx0OiBoaWRlIHJ1bGVzIHdpdGggemVybyBtYXRjaGVzLCB1bmxlc3MgdGhlIFVudXNlZCBsZW5zIGlzIGFwcGxpZWQuCiAgICAgIGlmIChmaWx0ZXJzLmtlZXBSdWxlc1swXSAhPT0gIlVudXNlZCIpIHsKICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIociA9PiByLm1hdGNoZXMudG90YWwgPiAwKTsKICAgICAgfQogICAgfQoKICAgIC8vIEFwcGx5IEtlZXAgUnVsZXMgTGVucyAoRmlsdGVyaW5nKQogICAgaWYgKGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUyAmJiBmaWx0ZXJzLmtlZXBSdWxlcy5sZW5ndGggPgogICAgICAwKSB7CiAgICAgIGRhdGEgPSB0aGlzLmFwcGx5S2VlcFJ1bGVMZW5zKGRhdGEsIGZpbHRlcnMua2VlcFJ1bGVz", + "WzBdKTsKICAgIH0KCiAgICAvLyBBcHBseSBDbGFzcy9GaWVsZC9NZXRob2QgZmlsdGVycwogICAgaWYgKGZpbHRlcnMuY2xhc3Nlcy5sZW5ndGggPiAwIHx8IGZpbHRlcnMuZmllbGRzLmxlbmd0aCA+IDAgfHwgZmlsdGVycwogICAgICAubWV0aG9kcy5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IG1hdGNoZWRSdWxlSWRzID0gbmV3IFNldCgpOwoKICAgICAgaWYgKGZpbHRlcnMuY2xhc3Nlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYnJEYXRhLmtlcHRDbGFzc0luZm9UYWJsZS5mb3JFYWNoKGMgPT4gewogICAgICAgICAgaWYgKGZpbHRlcnMuY2xhc3Nlcy5pbmNsdWRlcyhjLmlkKSkgewogICAgICAgICAgICAoYy5rZXB0QnkgfHwgW10pLmZvckVhY2gocmlkID0+IG1hdGNoZWRSdWxlSWRzLmFkZChyaWQpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZmlsdGVycy5maWVsZHMubGVuZ3RoID4gMCkgewogICAgICAgIGJyRGF0YS5rZXB0RmllbGRJbmZvVGFibGUuZm9yRWFjaChmID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXJzLmZpZWxkcy5pbmNsdWRlcyhmLmlkKSkgewogICAgICAgICAgICAoZi5rZXB0QnkgfHwgW10pLmZvckVhY2gocmlkID0+IG1hdGNoZWRSdWxlSWRzLmFkZChyaWQpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZmlsdGVycy5tZXRob2RzLmxlbmd0aCA+IDApIHsKICAgICAgICBickRhdGEua2VwdE1ldGhvZEluZm9UYWJsZS5m", + "b3JFYWNoKG0gPT4gewogICAgICAgICAgaWYgKGZpbHRlcnMubWV0aG9kcy5pbmNsdWRlcyhtLmlkKSkgewogICAgICAgICAgICAobS5rZXB0QnkgfHwgW10pLmZvckVhY2gocmlkID0+IG1hdGNoZWRSdWxlSWRzLmFkZChyaWQpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQoKICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKHIgPT4gbWF0Y2hlZFJ1bGVJZHMuaGFzKHIuaWQpKTsKICAgIH0KCiAgICByZXR1cm4gZGF0YTsKICB9LAoKICBnZXRTb3J0ZWREYXRhKGRhdGEpIHsKICAgIGNvbnN0IHsKICAgICAgYnksCiAgICAgIG9yZGVyCiAgICB9ID0gdGhpcy5zdGF0ZS5zb3J0OwogICAgaWYgKCFieSkgcmV0dXJuIGRhdGE7CgogICAgY29uc3QgZ2V0VmFsID0gKG9iaiwgcGF0aCkgPT4gewogICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgobywga2V5KSA9PiAobyAmJiBvW2tleV0gIT09CiAgICAgICAgdW5kZWZpbmVkKSA/IG9ba2V5XSA6IDAsIG9iaik7CiAgICB9OwoKICAgIHJldHVybiBbLi4uZGF0YV0uc29ydCgoYSwgYikgPT4gewogICAgICBjb25zdCB2QSA9IGdldFZhbChhLCBieSk7CiAgICAgIGNvbnN0IHZCID0gZ2V0VmFsKGIsIGJ5KTsKCiAgICAgIGlmICh0eXBlb2YgdkEgPT09ICJzdHJpbmciKQogICAgICAgIHJldHVybiBvcmRlciA9PT0gImFzYyIgPyB2QS5sb2NhbGVDb21wYXJlKHZCKSA6IHZCLmxvY2FsZUNvbXBhcmUoCiAgICAgICAgICB2QSk7CiAgICAgIHJldHVybiBv", + "cmRlciA9PT0gImFzYyIgPyAodkEgfHwgMCkgLSAodkIgfHwgMCkgOiAodkIgfHwgMCkgLSAodkEgfHwKICAgICAgICAwKTsKICAgIH0pOwogIH0sCgogIHVwZGF0ZUJyZWFkY3J1bWJzKCkgewogICAgY29uc3QgYmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmxhdC1icmVhZGNydW1icyIpOwogICAgaWYgKCFiYykgcmV0dXJuOwoKICAgIGNvbnN0IGxpbmtDbGFzcyA9ICJicmVhZGNydW1iLXBpbGwiOwogICAgY29uc3QgdGV4dENsYXNzID0gImJyZWFkY3J1bWItdGV4dCI7CiAgICBjb25zdCBzZXAgPSAnPHNwYW4gY2xhc3M9InRleHQtZ3JheS0zMDAgbXgtMSI+Lzwvc3Bhbj4nOwoKICAgIGxldCBodG1sID0gIiI7CiAgICBjb25zdCB7CiAgICAgIG1vZHVsZSwKICAgICAgcGtnOiBwa2cKICAgIH0gPSB0aGlzLnN0YXRlLmRyaWxsQ29udGV4dDsKCiAgICBjb25zdCB0b2dnbGVUZXh0ID0gdGhpcy5zdGF0ZS5zdGF0c1Zpc2libGUgPyAiSGlkZSBTdW1tYXJ5IiA6CiAgICAgICJTaG93IFN1bW1hcnkiOwogICAgY29uc3QgdG9nZ2xlSHRtbCA9IGAKICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRyb3Bkb3duLWJ0biIgZGF0YS1hY3Rpb249InRvZ2dsZS1zdGF0cyIgc3R5bGU9ImJvcmRlcjogbm9uZTsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBib3JkZXItcmFkaXVzOiA0cHg7IG1hcmdpbi1sZWZ0OiBh", + "dXRvOyBjdXJzb3I6IHBvaW50ZXI7Ij4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWdyYXktNDAwKTsiPiR7dG9nZ2xlVGV4dH08L3NwYW4+CiAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgICAgICBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjI1cmVtOyBjb2xvcjogdmFyKC0tdGV4dC1ncmF5LTUwMCk7IHRyYW5zZm9ybTogJHt0aGlzLnN0YXRlLnN0YXRzVmlzaWJsZSA/ICdyb3RhdGUoMTgwZGVnKScgOiAncm90YXRlKDBkZWcpJ307IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOyI+CiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xOSA5bC03IDctNy03IiAvPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIGA7CgogICAgaWYgKG1vZHVsZSkgewogICAgICAvLyBEcmlsbGVkIERvd24gUGF0aAogICAgICBodG1sICs9IGA8c3BhbiBjbGFzcz0iJHtsaW5rQ2xhc3N9IiBkYXRhLWFjdGlvbj0icmVzZXQiPlN1bW1hcnk8L3NwYW4+YDsKICAgICAgaHRtbCArPSBzZXA7CiAgICAgIGlmIChwa2cpIHsKICAgICAgICBo", + "dG1sICs9CiAgICAgICAgICBgPHNwYW4gY2xhc3M9IiR7bGlua0NsYXNzfSIgZGF0YS1hY3Rpb249Im1vZHVsZSIgZGF0YS12YWw9IiR7ZXNjYXBlSFRNTChtb2R1bGUpfSI+JHtlc2NhcGVIVE1MKG1vZHVsZSl9PC9zcGFuPmA7CiAgICAgICAgaHRtbCArPSBzZXA7CiAgICAgICAgaHRtbCArPSBgPHNwYW4gY2xhc3M9IiR7dGV4dENsYXNzfSI+JHtlc2NhcGVIVE1MKHBrZyl9PC9zcGFuPmA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaHRtbCArPSBgPHNwYW4gY2xhc3M9IiR7dGV4dENsYXNzfSI+JHtlc2NhcGVIVE1MKG1vZHVsZSl9PC9zcGFuPmA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIEdsb2JhbCBWaWV3CiAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9IiR7dGV4dENsYXNzfSI+U3VtbWFyeTwvc3Bhbj5gOwogICAgfQoKICAgIGJjLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICBiYy5zdHlsZS5hbGlnbkl0ZW1zID0gImNlbnRlciI7CiAgICBiYy5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgIGJjLmlubmVySFRNTCA9IGh0bWwgKyB0b2dnbGVIdG1sOwoKICAgIC8vIEJyZWFkY3J1bWIgQ2xpY2sgSGFuZGxlcnMKICAgIGJjLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWFjdGlvbl0iKS5mb3JFYWNoKChlbCkgPT4gewogICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlKSA9PiB7CiAgICAgICAgY29uc3QgYWN0aW9uID0gZWwuZGF0YXNldC5hY3Rpb247CiAgICAgICAgaWYgKGFjdGlv", + "biA9PT0gInJlc2V0IikgewogICAgICAgICAgdGhpcy5zdGF0ZS5kcmlsbENvbnRleHQgPSB7CiAgICAgICAgICAgIG1vZHVsZTogbnVsbCwKICAgICAgICAgICAgcGtnOiBudWxsCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gIm1vZHVsZSIpIHsKICAgICAgICAgIHRoaXMuc3RhdGUuZHJpbGxDb250ZXh0LnBrZyA9IG51bGw7CiAgICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAidG9nZ2xlLXN0YXRzIikgewogICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0c1Zpc2libGUgPSAhdGhpcy5zdGF0ZS5zdGF0c1Zpc2libGU7CiAgICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAoKICByZW5kZXIoKSB7CiAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7CgogICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5GSUxFX0RFVEFJTFMpIHsKICAgICAgQXBwLnJlbmRlckZpbGVEZXRhaWxzVmlldyh0aGlzLnN0YXRlLmRyaWxsQ29udGV4dC5maWxlT3JpZ2luSWQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFZpZXcgPT09IENPTlNUQU5UUy5WSUVXUy5ERVRBSUxTKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBVcGRhdGUgTGFiZWwgb2YgR3JvdXAgRHJvcGRvd24KICAg", + "IGNvbnN0IGN1cnJlbnRWaWV3ID0gdGhpcy5zdGF0ZS5jdXJyZW50VmlldzsKICAgIGNvbnN0IHZpZXdMYWJlbHMgPSB7CiAgICAgIG1vZHVsZXM6ICJLZWVwIFJ1bGVzIiwKICAgICAgcGFja2FnZXM6ICJLZWVwIFJ1bGUgRmlsZXMiCiAgICB9OwogICAgdGhpcy5lbGVtZW50cy5ncnBUZXh0LnRleHRDb250ZW50ID0gdmlld0xhYmVsc1tjdXJyZW50Vmlld10gfHwgKAogICAgICBjdXJyZW50Vmlldy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGN1cnJlbnRWaWV3LnNsaWNlKDEpKTsKCiAgICBpZiAodGhpcy5lbGVtZW50cy5ncnBMaXN0KSB7CiAgICAgIHRoaXMuZWxlbWVudHMuZ3JwTGlzdC5xdWVyeVNlbGVjdG9yQWxsKCIuZHJvcGRvd24taXRlbSIpLmZvckVhY2goKAogICAgICBlbCkgPT4gewogICAgICAgIGlmIChlbC5kYXRhc2V0LnZhbHVlID09PSBjdXJyZW50VmlldykKICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoImJnLWdyYXktMTAwIiwgInRleHQtZ3JheS05MDAiLAogICAgICAgICAgICAiZm9udC1zZW1pYm9sZCIpOwogICAgICAgIGVsc2UgZWwuY2xhc3NMaXN0LnJlbW92ZSgiYmctZ3JheS0xMDAiLCAidGV4dC1ncmF5LTkwMCIsCiAgICAgICAgICAiZm9udC1zZW1pYm9sZCIpOwogICAgICB9KTsKICAgIH0KCiAgICAvLyBQcm9jZXNzIERhdGEKICAgIGxldCBkYXRhID0gdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTsKICAgIGRhdGEgPSB0aGlzLmdldFNvcnRlZERhdGEoZGF0YSk7CgogICAgLy8gVXBk", + "YXRlIFN1bW1hcnkgQ291bnRzCiAgICBsZXQgcmVsZXZhbnRDbGFzc2VzID0gW10sCiAgICAgIG1vZENvdW50ID0gMDsKICAgIGlmIChjdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLlBBQ0tBR0VTKSB7CiAgICAgIHJlbGV2YW50Q2xhc3NlcyA9IGRhdGEuZmxhdE1hcCgocCkgPT4gcC5jbGFzc2VzIHx8IFtdKTsKICAgICAgbW9kQ291bnQgPSBuZXcgU2V0KGRhdGEubWFwKChwKSA9PiBwLm1vZHVsZU5hbWUpKS5zaXplOwogICAgfSBlbHNlIHsKICAgICAgcmVsZXZhbnRDbGFzc2VzID0gZGF0YS5mbGF0TWFwKChtKSA9PiAobS5wYWNrYWdlcyB8fCBbXSkuZmxhdE1hcCgocCkgPT4KICAgICAgICBwLmNsYXNzZXMgfHwgW10pKTsKICAgICAgbW9kQ291bnQgPSBkYXRhLmxlbmd0aDsKICAgIH0KCiAgICAvLyBTdGF0cyB0YWJsZSB2aXNpYmlsaXR5CiAgICBpZiAodGhpcy5lbGVtZW50cy5zdGF0c0NvbnRhaW5lcikgewogICAgICB0aGlzLmVsZW1lbnRzLnN0YXRzQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSB0aGlzLnN0YXRlLnN0YXRzVmlzaWJsZSA/CiAgICAgICAgImJsb2NrIiA6ICJub25lIjsKICAgICAgdGhpcy5lbGVtZW50cy5zdGF0c0NvbnRhaW5lci5zdHlsZS5tYXJnaW5Cb3R0b20gPSB0aGlzLnN0YXRlCiAgICAgICAgLnN0YXRzVmlzaWJsZSA/ICIycmVtIiA6ICIwIjsKICAgIH0KCiAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgY29uc3QgdG90YWxMaXZlID0gZ2V0", + "TGl2ZUl0ZW1Db3VudChickRhdGEpOwogICAgY29uc3QgZm9ybWF0UGVyYyA9IChkaXNhbGxvd0NvdW50KSA9PiB0b3RhbExpdmUgPiAwID8gKDEwMCAtICgKICAgICAgZGlzYWxsb3dDb3VudCAvIHRvdGFsTGl2ZSAqIDEwMCkpLnRvRml4ZWQoMSkgKyAnJScgOiAnLS0nOwogICAgY29uc3QgZ2V0UGVyYyA9IChkaXNhbGxvd0NvdW50KSA9PiB0b3RhbExpdmUgPiAwID8gKDEwMCAtIChkaXNhbGxvd0NvdW50IC8KICAgICAgdG90YWxMaXZlICogMTAwKSkgOiAnLS0nOwoKICAgIGNvbnN0IHNldFN0YXRWYWx1ZSA9IChlbGVtZW50LCBkaXNhbGxvd0NvdW50KSA9PiB7CiAgICAgIGlmICghYnJEYXRhKSB7CiAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9ICctLSc7CiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAnc3RhdC12YWx1ZSAnICsgVUlVdGlscy5nZXRTY29yZUNsYXNzKCctLScpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwZXJjID0gZ2V0UGVyYyhkaXNhbGxvd0NvdW50KTsKICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGZvcm1hdFBlcmMoZGlzYWxsb3dDb3VudCk7CiAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gJ3N0YXQtdmFsdWUgJyArIFVJVXRpbHMuZ2V0U2NvcmVDbGFzcyhwZXJjKTsKICAgIH07CgogICAgc2V0U3RhdFZhbHVlKHRoaXMuZWxlbWVudHMudG90YWxPYmZ1c2NhdGlvbiwgZ2V0RGlzYWxsb3dPYmZ1c2NhdGlvbkNvdW50KAogICAgICBickRhdGEpKTsKICAg", + "IHNldFN0YXRWYWx1ZSh0aGlzLmVsZW1lbnRzLnRvdGFsT3B0aW1pemF0aW9uLAogICAgICBnZXREaXNhbGxvd09wdGltaXphdGlvbkNvdW50KGJyRGF0YSkpOwogICAgc2V0U3RhdFZhbHVlKHRoaXMuZWxlbWVudHMudG90YWxTaHJpbmtpbmcsIGdldERpc2FsbG93U2hyaW5raW5nQ291bnQoCiAgICAgIGJyRGF0YSkpOwoKICAgIC8vIFJlbmRlciBUYWJsZXMKICAgIHRoaXMucmVuZGVySGVhZGVycygpOwogICAgdGhpcy5yZW5kZXJGbGF0Um93cyhkYXRhKTsKICAgIHRoaXMucmVuZGVyU3RhdHNUYWJsZSgpOwogIH0sCgogIHJlbmRlclN0YXRzVGFibGUoKSB7CiAgICBjb25zdCBickRhdGEgPSBBcHAuYmxhc3RSYWRpdXNEYXRhOwogICAgaWYgKCFickRhdGEpIHJldHVybjsKCiAgICBjb25zdCBzdGF0cyA9IGdldERldGFpbGVkU3RhdHMoYnJEYXRhKTsKICAgIGlmICghc3RhdHMpIHJldHVybjsKCiAgICBjb25zdCBnZXRIZWFkZXJDZWxsID0gKGxhYmVsLCBkaXNhbGxvd0NvdW50LCB0b3RhbCkgPT4gewogICAgICBjb25zdCBwZXJjID0gdG90YWwgPiAwID8gKDEwMCAtIChkaXNhbGxvd0NvdW50IC8gdG90YWwgKiAxMDApKSA6IDEwMDsKICAgICAgY29uc3QgY29sb3JDbGFzcyA9IFVJVXRpbHMuZ2V0U2NvcmVDbGFzcyhwZXJjKTsKICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nLWJvdHRvbTogMC41cmVt", + "OyBwYWRkaW5nLXRvcDogMXJlbTsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctZ3JheS01MCk7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiB2YXIoLS10ZXh0LWdyYXktOTAwKTsiPiR7bGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1ib2xkICR7Y29sb3JDbGFzc30gbXQtMSI+JHtwZXJjLnRvRml4ZWQoMSl9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90aD4KICAgICAgICAgIGA7CiAgICB9OwoKICAgIC8vIFJlbmRlciBIZWFkZXJzCiAgICB0aGlzLmVsZW1lbnRzLnN0YXRzVGFibGVIZWFkZXJzLmlubmVySFRNTCA9IGAKICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWxlZnQgc3RpY2t5LW5hbWUgYmctZ3JheS01MCB6LTMwIiBzdHlsZT0icGFkZGluZzogMXJlbTsiPkNhdGVnb3J5PC90aD4KICAgICAgICAgICAgJHtnZXRIZWFkZXJDZWxsKCJPYmZ1c2NhdGlvbiBTY29yZSIsIHN0YXRzLm92ZXJhbGwub2JmdXNjYXRpb24sIHN0YXRzLm92ZXJhbGwudG90YWwpfQogICAgICAgICAgICAke2dldEhlYWRlckNlbGwoIk9wdGltaXphdGlvbiBTY29yZSIsIHN0YXRzLm92ZXJhbGwu", + "b3B0aW1pemF0aW9uLCBzdGF0cy5vdmVyYWxsLnRvdGFsKX0KICAgICAgICAgICAgJHtnZXRIZWFkZXJDZWxsKCJTaHJpbmtpbmcgU2NvcmUiLCBzdGF0cy5vdmVyYWxsLnNocmlua2luZywgc3RhdHMub3ZlcmFsbC50b3RhbCl9CiAgICAgICAgICA8L3RyPgogICAgICAgIGA7CgogICAgY29uc3QgcmVuZGVyQ2VsbCA9IChkaXNhbGxvd0NvdW50LCB0b3RhbCkgPT4gewogICAgICBjb25zdCBwZXJjID0gdG90YWwgPiAwID8gKDEwMCAtIChkaXNhbGxvd0NvdW50IC8gdG90YWwgKiAxMDApKSA6IDEwMDsKICAgICAgY29uc3QgY29sb3JDbGFzcyA9IFVJVXRpbHMuZ2V0U2NvcmVDbGFzcyhwZXJjKTsKICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkICR7Y29sb3JDbGFzc30iPiR7cGVyYy50b0ZpeGVkKDEpfSU8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj4ke3RvdGFsIC0gZGlzYWxsb3dDb3VudH0vJHt0b3RhbH08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAg", + "ICBgOwogICAgfTsKCiAgICBjb25zdCByb3dzID0gW3sKICAgICAgICBsYWJlbDogIkNsYXNzZXMiLAogICAgICAgIGRhdGE6IHN0YXRzLmNsYXNzZXMKICAgICAgfSwKICAgICAgewogICAgICAgIGxhYmVsOiAiRmllbGRzIiwKICAgICAgICBkYXRhOiBzdGF0cy5maWVsZHMKICAgICAgfSwKICAgICAgewogICAgICAgIGxhYmVsOiAiTWV0aG9kcyIsCiAgICAgICAgZGF0YTogc3RhdHMubWV0aG9kcwogICAgICB9CiAgICBdOwoKICAgIHRoaXMuZWxlbWVudHMuc3RhdHNUYWJsZURhdGEuaW5uZXJIVE1MID0gcm93cy5tYXAocm93ID0+IGAKICAgICAgICAgIDx0ciBjbGFzcz0idGFibGUtcm93IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpiZy1ncmF5LTUwIj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGlja3ktbmFtZSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsiPiR7cm93LmxhYmVsfTwvdGQ+CiAgICAgICAgICAgICR7cmVuZGVyQ2VsbChyb3cuZGF0YS5vYmZ1c2NhdGlvbiwgcm93LmRhdGEudG90YWwpfQogICAgICAgICAgICAke3JlbmRlckNlbGwocm93LmRhdGEub3B0aW1pemF0aW9uLCByb3cuZGF0YS50b3RhbCl9CiAgICAgICAgICAgICR7cmVuZGVyQ2VsbChyb3cuZGF0YS5zaHJpbmtpbmcsIHJvdy5kYXRhLnRvdGFsKX0KICAgICAgICAgIDwvdHI+CiAgICAgICAgYCkuam9pbigiIik7CiAgfSwKCiAgcmVuZGVySGVhZGVycygpIHsKICAgIGNvbnN0IHsK", + "ICAgICAgY3VycmVudFZpZXcsCiAgICAgIHNvcnQKICAgIH0gPSB0aGlzLnN0YXRlOwogICAgY29uc3QgdG9wSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKICAgIGNvbnN0IHN1YkhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CgogICAgY29uc3Qgdmlld0xhYmVscyA9IHsKICAgICAgbW9kdWxlczogIlJ1bGUiLAogICAgICBwYWNrYWdlczogIktlZXAgUnVsZSBGaWxlcyIKICAgIH07CiAgICBjb25zdCB0aXRsZSA9IHZpZXdMYWJlbHNbY3VycmVudFZpZXddOwoKICAgIGNvbnN0IGluZCA9IChrZXkpID0+IHsKICAgICAgaWYgKHNvcnQuYnkgIT09IGtleSkgcmV0dXJuICIiOwogICAgICByZXR1cm4gc29ydC5vcmRlciA9PT0gImFzYyIgPwogICAgICAgIGA8c3BhbiBjbGFzcz0ic29ydC1pY29uIHRleHQtYmx1ZS02MDAgbWwtMSI+4payPC9zcGFuPmAgOgogICAgICAgIGA8c3BhbiBjbGFzcz0ic29ydC1pY29uIHRleHQtYmx1ZS02MDAgbWwtMSI+4pa8PC9zcGFuPmA7CiAgICB9OwoKICAgIGlmIChjdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLlBBQ0tBR0VTKSB7CiAgICAgIHRvcEhlYWRlci5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1sZWZ0IHN0aWNreS1uYW1lIGJnLWdyYXktNTAgei0zMCIgZGF0YS1zb3J0LWJ5PSJuYW1lIiBzdHlsZT0id2lkdGg6IDQwMHB4OyBtaW4td2lkdGg6IDQwMHB4OyI+CiAgICAg", + "ICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC1ibHVlLTYwMCIgc3R5bGU9InBhZGRpbmc6IDFyZW07Ij4KICAgICAgICAgICAgICAgICAgJHt0aXRsZX0ke2luZCgibmFtZSIpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RoPgogICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9InRleHQtY2VudGVyIGJnLWdyYXktNTAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9ImtlZXBSdWxlcyIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsiPktlZXAgUnVsZXMke2luZCgia2VlcFJ1bGVzIil9PC90aD4KICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCIgZGF0YS1zb3J0LWJ5PSJtYXRjaGVzLnRvdGFsIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogODBweDsgbWluLXdpZHRoOiA4MHB4OyI+S2VwdCBJdGVtcyR7aW5kKCJtYXRjaGVzLnRvdGFsIil9PC90aD4KICAgICAgICAgICAgPHRoIHJvd3NwYW49IjIiIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdy", + "YXktMjAwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9ImltcGFjdC5vYmZ1c2NhdGlvbiIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDgwcHg7IG1pbi13aWR0aDogODBweDsiPk9iZnVzY2F0aW9uIFNjb3JlJHtpbmQoImltcGFjdC5vYmZ1c2NhdGlvbiIpfTwvdGg+CiAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCIgZGF0YS1zb3J0LWJ5PSJpbXBhY3Qub3B0aW1pemF0aW9uIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogODBweDsgbWluLXdpZHRoOiA4MHB4OyI+T3B0aW1pemF0aW9uIFNjb3JlJHtpbmQoImltcGFjdC5vcHRpbWl6YXRpb24iKX08L3RoPgogICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAiIGRhdGEtc29ydC1ieT0iaW1wYWN0LnNocmlua2luZyIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDgwcHg7IG1pbi13aWR0aDogODBweDsiPlNocmlua2luZyBTY29yZSR7aW5kKCJpbXBhY3Quc2hyaW5raW5nIil9PC90aD4KICAgICAgICAgICAg", + "PHRoIHJvd3NwYW49IjIiIGNsYXNzPSJiZy1ncmF5LTUwIiBzdHlsZT0id2lkdGg6IDEwMCU7Ij48L3RoPgogICAgICAgICAgYDsKICAgICAgc3ViSGVhZGVyLmlubmVySFRNTCA9IGBgOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbGVucyA9IHRoaXMuc3RhdGUuZmlsdGVycy5rZWVwUnVsZXNbMF07CiAgICAgIGNvbnN0IGlzSWRlbnRpY2FsTGVucyA9IGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUyAmJgogICAgICAgIGxlbnMgPT09ICJJZGVudGljYWwiOwogICAgICBjb25zdCBpc1N1YnN1bWVkTGVucyA9IGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUyAmJgogICAgICAgIGxlbnMgPT09ICJTdWJzdW1lZCI7CgogICAgICBpZiAoaXNJZGVudGljYWxMZW5zIHx8IGlzU3Vic3VtZWRMZW5zKSB7CiAgICAgICAgdG9wSGVhZGVyLmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9InRleHQtbGVmdCBzdGlja3ktbmFtZSBiZy1ncmF5LTUwIHotMzAiIGRhdGEtc29ydC1ieT0ibmFtZSIgc3R5bGU9IndpZHRoOiA2MDBweDsgbWluLXdpZHRoOiA2MDBweDsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC1ibHVlLTYwMCIgc3R5bGU9InBhZGRpbmc6IDFyZW07Ij4KICAgICAgICAgICAgICAgICAgICAke3RpdGxlfSR7aW5kKCJuYW1lIil9CiAgICAgICAg", + "ICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1sZWZ0IGJnLWdyYXktNTAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEwMCU7Ij4ke2lzSWRlbnRpY2FsTGVucyA/ICdJZGVudGljYWwgUnVsZXMnIDogJ1N1YnN1bWVkIEJ5J308L3RoPgogICAgICAgICAgICBgOwogICAgICAgIHN1YkhlYWRlci5pbm5lckhUTUwgPSAnJzsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b3BIZWFkZXIuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjbGFzcz0idGV4dC1sZWZ0IHN0aWNreS1uYW1lIGJnLWdyYXktNTAgei0zMCIgZGF0YS1zb3J0LWJ5PSJuYW1lIiBzdHlsZT0id2lkdGg6IDYwMHB4OyBtaW4td2lkdGg6IDYwMHB4OyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlciBob3Zlcjp0ZXh0LWJsdWUtNjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsiPgogICAgICAgICAgICAgICAgICAgICR7dGl0bGV9JHtpbmQoIm5hbWUiKX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjQiIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsi", + "PktlcHQgSXRlbXMgKGhpZ2hlciBpcyB3b3JzZSk8L3RoPgogICAgICAgICAgICAgIDx0aCByb3dzcGFuPSIyIiBjb2xzcGFuPSIzIiBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGJnLWdyYXktNTAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiAxNTBweDsgbWluLXdpZHRoOiAxNTBweDsiPlByb3BlcnRpZXMgYmxvY2tlZCBieSBydWxlPC90aD4KICAgICAgICAgICAgICA8dGggcm93c3Bhbj0iMiIgY2xhc3M9ImJnLWdyYXktNTAiIHN0eWxlPSJ3aWR0aDogMTAwJTsiPjwvdGg+CiAgICAgICAgICAgIGA7CgogICAgICAgIHN1YkhlYWRlci5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9Im1hdGNoZXMudG90YWwiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsiPlRvdGFsJHtpbmQoIm1hdGNoZXMudG90YWwiKX08L3RoPgogICAgICAgICAgICAgIDx0aCBjbGFzcz0idGV4dC1jZW50ZXIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LTIwMCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCIgZGF0YS1zb3J0LWJ5PSJtYXRjaGVzLmNs", + "YXNzZXMiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsiPkNsYXNzZXMke2luZCgibWF0Y2hlcy5jbGFzc2VzIil9PC90aD4KICAgICAgICAgICAgICA8dGggY2xhc3M9InRleHQtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAiIGRhdGEtc29ydC1ieT0ibWF0Y2hlcy5maWVsZHMiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiAxMDBweDsgbWluLXdpZHRoOiAxMDBweDsiPkZpZWxkcyR7aW5kKCJtYXRjaGVzLmZpZWxkcyIpfTwvdGg+CiAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ0ZXh0LWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIiBkYXRhLXNvcnQtYnk9Im1hdGNoZXMubWV0aG9kcyIgc3R5bGU9InBhZGRpbmc6IDAuNXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+TWV0aG9kcyR7aW5kKCJtYXRjaGVzLm1ldGhvZHMiKX08L3RoPgogICAgICAgICAgICBgOwogICAgICB9CiAgICB9CgogICAgdGhpcy5lbGVtZW50cy50YWJsZUhlYWRlcnMuaW5uZXJIVE1MID0gIiI7CiAgICB0aGlzLmVsZW1lbnRzLnRhYmxlSGVhZGVycy5hcHBlbmQodG9wSGVhZGVyLCBzdWJIZWFkZXIpOwog", + "IH0sCgogIHJlbmRlckZsYXRSb3dzKGRhdGEpIHsKICAgIGNvbnN0IHsKICAgICAgY3VycmVudFZpZXcKICAgIH0gPSB0aGlzLnN0YXRlOwogICAgaWYgKCFkYXRhLmxlbmd0aCkgewogICAgICB0aGlzLmVsZW1lbnRzLnRhYmxlRGF0YS5pbm5lckhUTUwgPQogICAgICAgIGA8dHI+PHRkIGNvbHNwYW49IjEwIiBjbGFzcz0idGV4dC1jZW50ZXIgcHktOCB0ZXh0LWdyYXktNTAwIj5ObyByZXN1bHRzIGZvdW5kLjwvdGQ+PC90cj5gOwogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgYnJEYXRhID0gQXBwLmJsYXN0UmFkaXVzRGF0YTsKICAgIGNvbnN0IGJ1aWxkID0gYnJEYXRhPy5idWlsZEluZm8gfHwge307CiAgICBjb25zdCB0b3RhbExpdmUgPSBnZXRMaXZlSXRlbUNvdW50KGJyRGF0YSk7CgogICAgY29uc3QgcmVuZGVyTWF0Y2hDZWxsID0gKGNvdW50LCB0b3RhbCkgPT4gewogICAgICBjb25zdCBwZXJjID0gdG90YWwgPiAwID8gKGNvdW50IC8gdG90YWwgKiAxMDApIDogMDsKICAgICAgY29uc3QgY29sb3JDbGFzcyA9IFVJVXRpbHMuZ2V0TWF0Y2hDbGFzcyhwZXJjKTsKICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogMTAwcHg7IG1pbi13aWR0aDogMTAwcHg7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29s", + "dW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtYm9sZCAke2NvbG9yQ2xhc3N9Ij4ke3BlcmMudG9GaXhlZCgxKX0lPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCBtdC0xIj4ke2NvdW50fTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIGA7CiAgICB9OwoKICAgIGNvbnN0IHJlbmRlclNjb3JlQ2VsbCA9IChkaXNhbGxvd0NvdW50LCB0b3RhbCkgPT4gewogICAgICBjb25zdCBwZXJjID0gdG90YWwgPiAwID8gKDEwMCAtIChkaXNhbGxvd0NvdW50IC8gdG90YWwgKiAxMDApKSA6IDEwMDsKICAgICAgY29uc3QgY29sb3JDbGFzcyA9IFVJVXRpbHMuZ2V0U2NvcmVDbGFzcyhwZXJjKTsKICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAiIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogODBweDsgbWluLXdpZHRoOiA4MHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJvbGQgJHtjb2xvckNsYXNzfSI+", + "JHtwZXJjLnRvRml4ZWQoMSl9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMSI+JHt0b3RhbCAtIGRpc2FsbG93Q291bnR9LyR7dG90YWx9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgYDsKICAgIH07CgogICAgdGhpcy5lbGVtZW50cy50YWJsZURhdGEuaW5uZXJIVE1MID0gZGF0YS5tYXAoKGl0ZW0pID0+IHsKICAgICAgY29uc3QgY2xlYW5lZE5hbWUgPSBpdGVtLm5hbWUucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogICAgICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZUhUTUwoY2xlYW5lZE5hbWUpOwogICAgICBsZXQgbmFtZUNlbGwgPSAiIjsKICAgICAgaWYgKGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUykgewogICAgICAgIG5hbWVDZWxsID0gYAogICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RpY2t5LW5hbWUgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXIiIHRpdGxlPSIke2VzY2FwZWROYW1lfSIgc3R5bGU9InBhZGRpbmc6IDFyZW07IHdpZHRoOiA2MDBweDsgbWluLXdpZHRoOiA2MDBweDsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyIgZGF0YS1ydWxlLWlkPSIke2l0ZW0uaWR9Ij4KICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsg", + "Zm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyBmb250LXNpemU6IDAuODEyNXJlbTsgbWFyZ2luOiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsiPiR7ZXNjYXBlZE5hbWV9PC9wcmU+CiAgICAgICAgICAgICAgPC90ZD5gOwogICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuUEFDS0FHRVMpIHsKICAgICAgICBuYW1lQ2VsbCA9IGAKICAgICAgICAgICAgICA8dGQgY2xhc3M9InN0aWNreS1uYW1lIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyIiB0aXRsZT0iJHtlc2NhcGVkTmFtZX0iIHN0eWxlPSJwYWRkaW5nOiAxcmVtOyB3aWR0aDogNDAwcHg7IG1pbi13aWR0aDogNDAwcHg7IiBkYXRhLWZpbGUtb3JpZ2luLWlkPSIke2l0ZW0uaWR9Ij4KICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyBmb250LXNpemU6IDAuODEyNXJlbTsgbWFyZ2luOiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsiPiR7ZXNjYXBlZE5hbWV9PC9wcmU+CiAgICAgICAgICAgICAgPC90ZD5gOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWVDZWxsID0KICAgICAgICAgIGA8dGQgY2xhc3M9InN0aWNreS1uYW1lIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiIHRpdGxlPSIke2VzY2FwZWROYW1lfSIgc3R5bGU9InBhZGRpbmc6IDFy", + "ZW07IHdpZHRoOiA0MDBweDsgbWluLXdpZHRoOiA0MDBweDsiPjxwcmUgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyBmb250LXNpemU6IDAuODEyNXJlbTsgbWFyZ2luOiAwOyI+JHtlc2NhcGVkTmFtZX08L3ByZT48L3RkPmA7CiAgICAgIH0KCiAgICAgIGlmIChjdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLlBBQ0tBR0VTKSB7CiAgICAgICAgY29uc3Qga2VlcFJ1bGVzQ2VsbCA9CiAgICAgICAgICBgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0yMDAgdGV4dC1zbSBmb250LXNlbWlib2xkIiBzdHlsZT0icGFkZGluZzogMXJlbTsgd2lkdGg6IDEwMHB4OyBtaW4td2lkdGg6IDEwMHB4OyI+JHtpdGVtLmtlZXBSdWxlc308L3RkPmA7CiAgICAgICAgY29uc3QgdG90YWxLZXB0Q2VsbCA9IHJlbmRlck1hdGNoQ2VsbChpdGVtLm1hdGNoZXMudG90YWwsCiAgICAgICAgICB0b3RhbExpdmUpOwogICAgICAgIGNvbnN0IGltcGFjdENlbGxzID0gYAogICAgICAgICAgICAgICR7cmVuZGVyU2NvcmVDZWxsKGl0ZW0uaW1wYWN0Lm9iZnVzY2F0aW9uLCB0b3RhbExpdmUpfQogICAgICAgICAgICAgICR7cmVuZGVyU2NvcmVDZWxsKGl0ZW0uaW1wYWN0Lm9wdGltaXphdGlvbiwgdG90YWxMaXZlKX0KICAgICAgICAgICAgICAke3JlbmRlclNjb3JlQ2VsbChpdGVtLmltcGFjdC5zaHJpbmtpbmcsIHRvdGFsTGl2ZSl9", + "CiAgICAgICAgICAgIGA7CiAgICAgICAgcmV0dXJuIGA8dHIgY2xhc3M9InRhYmxlLXJvdyBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgaG92ZXI6YmctZ3JheS01MCI+JHtuYW1lQ2VsbH0ke2tlZXBSdWxlc0NlbGx9JHt0b3RhbEtlcHRDZWxsfSR7aW1wYWN0Q2VsbHN9PHRkPjwvdGQ+PC90cj5gOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGxlbnMgPSB0aGlzLnN0YXRlLmZpbHRlcnMua2VlcFJ1bGVzWzBdOwogICAgICAgIGNvbnN0IGlzSWRlbnRpY2FsTGVucyA9IGN1cnJlbnRWaWV3ID09PSBDT05TVEFOVFMuVklFV1MuTU9EVUxFUyAmJgogICAgICAgICAgbGVucyA9PT0gIklkZW50aWNhbCI7CiAgICAgICAgY29uc3QgaXNTdWJzdW1lZExlbnMgPSBjdXJyZW50VmlldyA9PT0gQ09OU1RBTlRTLlZJRVdTLk1PRFVMRVMgJiYKICAgICAgICAgIGxlbnMgPT09ICJTdWJzdW1lZCI7CgogICAgICAgIGlmIChpc0lkZW50aWNhbExlbnMgfHwgaXNTdWJzdW1lZExlbnMpIHsKICAgICAgICAgIGNvbnN0IHJ1bGVzID0gaXNJZGVudGljYWxMZW5zID8gaXRlbS5pZGVudGljYWxSdWxlcyA6IGl0ZW0KICAgICAgICAgICAgLnN1YnN1bWVkQnlSdWxlczsKICAgICAgICAgIGNvbnN0IHJ1bGVzSHRtbCA9IChydWxlcyB8fCBbXSkubWFwKHIgPT4gYAogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pOyBmb250LXNpemU6IDAuODEyNXJlbTsgbWFyZ2luLWJv", + "dHRvbTogMC4yNXJlbTsiPgogICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IG1hcmdpbjogMDsgY29sb3I6IHZhcigtLXRleHQtbWFpbik7Ij4ke2VzY2FwZUhUTUwoci5zb3VyY2UpfTwvcHJlPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCkuam9pbigiIik7CiAgICAgICAgICByZXR1cm4gYDx0ciBjbGFzcz0idGFibGUtcm93IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpiZy1ncmF5LTUwIj4ke25hbWVDZWxsfTx0ZCBjbGFzcz0iYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMXJlbTsgdmVydGljYWwtYWxpZ246IHRvcDsgd2lkdGg6IDEwMCU7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1tb25vKTsiPiR7cnVsZXNIdG1sfTwvdGQ+PC90cj5gOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgaW1wYWN0ID0gaXRlbS5pbXBhY3QgfHwgW107CiAgICAgICAgY29uc3QgZ2V0VGFnID0gKGMsIGxhYmVsKSA9PiB7CiAgICAgICAgICBjb25zdCBpc1Jlc3RyaWN0ZWQgPSBpbXBhY3QuaW5jbHVkZXMoYyk7CiAgICAgICAgICBpZiAoIWlzUmVzdHJpY3RlZCkgcmV0dXJuICIiOwogICAgICAgICAgY29uc3QgY29sb3IgPSAidmFyKC0tdGV4dC1yZWQtNjAwKSI7CiAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gInZhcigtLWJnLXJlZC1saWdodCkiOwogICAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz0iaW1w", + "YWN0LXRhZyIgc3R5bGU9ImNvbG9yOiAke2NvbG9yfTsgYmFja2dyb3VuZC1jb2xvcjogJHtiZ0NvbG9yfTsgYm9yZGVyLWNvbG9yOiAke2NvbG9yfTsgb3BhY2l0eTogMC44OyI+JHtsYWJlbH08L3NwYW4+YDsKICAgICAgICB9OwoKICAgICAgICBjb25zdCBpbXBhY3RDZWxsID0gYAogICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgYm9yZGVyLWwgYm9yZGVyLWdyYXktMjAwIiBzdHlsZT0icGFkZGluZzogMC41cmVtOyB3aWR0aDogNTBweDsgbWluLXdpZHRoOiA1MHB4OyI+JHtnZXRUYWcoJ0RPTlRfT0JGVVNDQVRFJywgJ09CRlVTQ0FURScpfTwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0xMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9PUFRJTUlaRScsICdPUFRJTUlaRScpfTwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBib3JkZXItbCBib3JkZXItZ3JheS0xMDAiIHN0eWxlPSJwYWRkaW5nOiAwLjVyZW07IHdpZHRoOiA1MHB4OyBtaW4td2lkdGg6IDUwcHg7Ij4ke2dldFRhZygnRE9OVF9TSFJJTksnLCAnU0hSSU5LJyl9PC90ZD4KICAgICAgICAgICAgYDsKCiAgICAgICAgY29uc3QgbWF0Y2hlc0NlbGxzID0gYAogICAgICAgICAgICAgICR7cmVuZGVyTWF0Y2hDZWxsKGl0ZW0ubWF0Y2hlcy50b3RhbCwgdG90YWxM", + "aXZlKX0KICAgICAgICAgICAgICAke3JlbmRlck1hdGNoQ2VsbChpdGVtLm1hdGNoZXMuY2xhc3NlcywgYnVpbGQubGl2ZUNsYXNzQ291bnQgfHwgMCl9CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoaXRlbS5tYXRjaGVzLmZpZWxkcywgYnVpbGQubGl2ZUZpZWxkQ291bnQgfHwgMCl9CiAgICAgICAgICAgICAgJHtyZW5kZXJNYXRjaENlbGwoaXRlbS5tYXRjaGVzLm1ldGhvZHMsIGJ1aWxkLmxpdmVNZXRob2RDb3VudCB8fCAwKX0KICAgICAgICAgICAgYDsKICAgICAgICByZXR1cm4gYDx0ciBjbGFzcz0idGFibGUtcm93IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpiZy1ncmF5LTUwIj4ke25hbWVDZWxsfSR7bWF0Y2hlc0NlbGxzfSR7aW1wYWN0Q2VsbH08dGQ+PC90ZD48L3RyPmA7CiAgICAgIH0KICAgIH0pLmpvaW4oIiIpOwogIH0sCn07Cgpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgKCkgPT4gQXBwLmluaXQoKSk7PC9zY3JpcHQ+CiAgICA8c2NyaXB0Pi8vIENvcHlyaWdodCAoYykgMjAyNiwgdGhlIFI4IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICogVXRpbGl0", + "eSBmdW5jdGlvbnMgZm9yIGFuYWx5emluZyBCbGFzdCBSYWRpdXMgZGF0YS4KICovCgpmdW5jdGlvbiBnZXREaXNhbGxvd09iZnVzY2F0aW9uQ291bnQoZGF0YSkgewogIHJldHVybiBnZXRTY29yZShkYXRhLCAnRE9OVF9PQkZVU0NBVEUnKTsKfQoKZnVuY3Rpb24gZ2V0RGlzYWxsb3dPcHRpbWl6YXRpb25Db3VudChkYXRhKSB7CiAgcmV0dXJuIGdldFNjb3JlKGRhdGEsICdET05UX09QVElNSVpFJyk7Cn0KCmZ1bmN0aW9uIGdldERpc2FsbG93U2hyaW5raW5nQ291bnQoZGF0YSkgewogIHJldHVybiBnZXRTY29yZShkYXRhLCAnRE9OVF9TSFJJTksnKTsKfQoKZnVuY3Rpb24gZ2V0TGl2ZUl0ZW1Db3VudChkYXRhKSB7CiAgaWYgKCFkYXRhIHx8ICFkYXRhLmJ1aWxkSW5mbykgcmV0dXJuIDA7CiAgcmV0dXJuIChkYXRhLmJ1aWxkSW5mby5saXZlQ2xhc3NDb3VudCB8fCAwKSArCiAgICAgICAgIChkYXRhLmJ1aWxkSW5mby5saXZlRmllbGRDb3VudCB8fCAwKSArCiAgICAgICAgIChkYXRhLmJ1aWxkSW5mby5saXZlTWV0aG9kQ291bnQgfHwgMCk7Cn0KCi8qKgogKiBSZXR1cm5zIGRldGFpbGVkIGNvdW50cyBmb3IgdGhlIHN0YXRzIHRhYmxlLgogKi8KZnVuY3Rpb24gZ2V0RGV0YWlsZWRTdGF0cyhkYXRhKSB7CiAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbDsKCiAgY29uc3QgYnVpbGQgPSBkYXRhLmJ1aWxkSW5mbyB8fCB7fTsKICBjb25zdCBzdGF0cyA9IHsKICAgIGNsYXNzZXM6IHsgdG90YWw6IGJ1aWxkLmxpdmVDbGFz", + "c0NvdW50IHx8IDAsIG9iZnVzY2F0aW9uOiAwLCBvcHRpbWl6YXRpb246IDAsIHNocmlua2luZzogMCB9LAogICAgZmllbGRzOiB7IHRvdGFsOiBidWlsZC5saXZlRmllbGRDb3VudCB8fCAwLCBvYmZ1c2NhdGlvbjogMCwgb3B0aW1pemF0aW9uOiAwLCBzaHJpbmtpbmc6IDAgfSwKICAgIG1ldGhvZHM6IHsgdG90YWw6IGJ1aWxkLmxpdmVNZXRob2RDb3VudCB8fCAwLCBvYmZ1c2NhdGlvbjogMCwgb3B0aW1pemF0aW9uOiAwLCBzaHJpbmtpbmc6IDAgfSwKICAgIG92ZXJhbGw6IHsgdG90YWw6IGdldExpdmVJdGVtQ291bnQoZGF0YSksIG9iZnVzY2F0aW9uOiAwLCBvcHRpbWl6YXRpb246IDAsIHNocmlua2luZzogMCB9CiAgfTsKCiAgY29uc3QgY29uc3RyYWludHNNYXAgPSBnZXRDb25zdHJhaW50c01hcChkYXRhKTsKICBjb25zdCBydWxlc01hcCA9IGdldFJ1bGVzQ29uc3RyYWludHNNYXAoZGF0YSk7CgogIGNvbnN0IHByb2Nlc3NUYWJsZSA9ICh0YWJsZSwga2V5KSA9PiB7CiAgICBpZiAoIXRhYmxlKSByZXR1cm47CiAgICB0YWJsZS5mb3JFYWNoKGl0ZW0gPT4gewogICAgICBjb25zdCBrZXB0QnkgPSBpdGVtLmtlcHRCeSB8fCBbXTsKICAgICAgY29uc3QgY29uc3RyYWludHMgPSBrZXB0QnkuZmxhdE1hcChydWxlSWQgPT4gY29uc3RyYWludHNNYXAuZ2V0KHJ1bGVzTWFwLmdldChydWxlSWQpKSB8fCBbXSk7CiAgICAgIGlmIChjb25zdHJhaW50cy5pbmNsdWRlcygnRE9OVF9PQkZVU0NBVEUnKSkgc3RhdHNba2V5", + "XS5vYmZ1c2NhdGlvbisrOwogICAgICBpZiAoY29uc3RyYWludHMuaW5jbHVkZXMoJ0RPTlRfT1BUSU1JWkUnKSkgc3RhdHNba2V5XS5vcHRpbWl6YXRpb24rKzsKICAgICAgaWYgKGNvbnN0cmFpbnRzLmluY2x1ZGVzKCdET05UX1NIUklOSycpKSBzdGF0c1trZXldLnNocmlua2luZysrOwogICAgfSk7CiAgfTsKCiAgcHJvY2Vzc1RhYmxlKGRhdGEua2VwdENsYXNzSW5mb1RhYmxlLCAnY2xhc3NlcycpOwogIHByb2Nlc3NUYWJsZShkYXRhLmtlcHRGaWVsZEluZm9UYWJsZSwgJ2ZpZWxkcycpOwogIHByb2Nlc3NUYWJsZShkYXRhLmtlcHRNZXRob2RJbmZvVGFibGUsICdtZXRob2RzJyk7CgogIHN0YXRzLm92ZXJhbGwub2JmdXNjYXRpb24gPSBzdGF0cy5jbGFzc2VzLm9iZnVzY2F0aW9uICsgc3RhdHMuZmllbGRzLm9iZnVzY2F0aW9uICsgc3RhdHMubWV0aG9kcy5vYmZ1c2NhdGlvbjsKICBzdGF0cy5vdmVyYWxsLm9wdGltaXphdGlvbiA9IHN0YXRzLmNsYXNzZXMub3B0aW1pemF0aW9uICsgc3RhdHMuZmllbGRzLm9wdGltaXphdGlvbiArIHN0YXRzLm1ldGhvZHMub3B0aW1pemF0aW9uOwogIHN0YXRzLm92ZXJhbGwuc2hyaW5raW5nID0gc3RhdHMuY2xhc3Nlcy5zaHJpbmtpbmcgKyBzdGF0cy5maWVsZHMuc2hyaW5raW5nICsgc3RhdHMubWV0aG9kcy5zaHJpbmtpbmc7CgogIHJldHVybiBzdGF0czsKfQoKZnVuY3Rpb24gZ2V0Q29uc3RyYWludHNNYXAoZGF0YSkgewogIGNvbnN0IGNvbnN0cmFpbnRzTWFwID0gbmV3", + "IE1hcCgpOwogIGlmIChkYXRhLmtlZXBDb25zdHJhaW50c1RhYmxlKSB7CiAgICBkYXRhLmtlZXBDb25zdHJhaW50c1RhYmxlLmZvckVhY2goYyA9PiB7CiAgICAgIGNvbnN0cmFpbnRzTWFwLnNldChjLmlkLCBjLmNvbnN0cmFpbnRzIHx8IFtdKTsKICAgIH0pOwogIH0KICByZXR1cm4gY29uc3RyYWludHNNYXA7Cn0KCmZ1bmN0aW9uIGdldFJ1bGVzQ29uc3RyYWludHNNYXAoZGF0YSkgewogIGNvbnN0IHJ1bGVzTWFwID0gbmV3IE1hcCgpOwogIGlmIChkYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZSkgewogICAgZGF0YS5rZWVwUnVsZUJsYXN0UmFkaXVzVGFibGUuZm9yRWFjaChyID0+IHsKICAgICAgcnVsZXNNYXAuc2V0KHIuaWQsIHIuY29uc3RyYWludHNJZCk7CiAgICB9KTsKICB9CiAgcmV0dXJuIHJ1bGVzTWFwOwp9CgpmdW5jdGlvbiBnZXRJbXBhY3RBcnJheShjb25zdHJhaW50cykgewogIGlmICghY29uc3RyYWludHMpIHJldHVybiBbXTsKICByZXR1cm4gY29uc3RyYWludHM7Cn0KCi8qKgogKiBSZXR1cm5zIGZvcm1hdHRlZCBydWxlcyBmb3IgdGhlIHRhYmxlLgogKi8KZnVuY3Rpb24gZ2V0UnVsZXMoZGF0YSkgewogIGlmICghZGF0YSB8fCAhZGF0YS5rZWVwUnVsZUJsYXN0UmFkaXVzVGFibGUpIHJldHVybiBbXTsKICBjb25zdCBjb25zdHJhaW50c01hcCA9IGdldENvbnN0cmFpbnRzTWFwKGRhdGEpOwogIHJldHVybiBkYXRhLmtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZS5tYXAocnVsZSA9PiB7CiAg", + "ICBjb25zdCBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzTWFwLmdldChydWxlLmNvbnN0cmFpbnRzSWQpOwogICAgY29uc3QgYnIgPSBydWxlLmJsYXN0UmFkaXVzIHx8IHt9OwogICAgY29uc3QgY2xhc3NlcyA9IChici5jbGFzc0JsYXN0UmFkaXVzIHx8IFtdKS5sZW5ndGg7CiAgICBjb25zdCBmaWVsZHMgPSAoYnIuZmllbGRCbGFzdFJhZGl1cyB8fCBbXSkubGVuZ3RoOwogICAgY29uc3QgbWV0aG9kcyA9IChici5tZXRob2RCbGFzdFJhZGl1cyB8fCBbXSkubGVuZ3RoOwogICAgcmV0dXJuIHsKICAgICAgaWQ6IHJ1bGUuaWQsCiAgICAgIG5hbWU6IHJ1bGUuc291cmNlLAogICAgICBpbXBhY3Q6IGdldEltcGFjdEFycmF5KGNvbnN0cmFpbnRzKSwKICAgICAgbWF0Y2hlczogewogICAgICAgIGNsYXNzZXMsCiAgICAgICAgZmllbGRzLAogICAgICAgIG1ldGhvZHMsCiAgICAgICAgdG90YWw6IGNsYXNzZXMgKyBmaWVsZHMgKyBtZXRob2RzCiAgICAgIH0sCiAgICAgIHN1YnN1bWVkQnk6IGJyLnN1YnN1bWVkQnkgfHwgW10KICAgIH07CiAgfSk7Cn0KCi8qKgogKiBSZXR1cm5zIGZvcm1hdHRlZCBmaWxlcyAob3JpZ2lucykgZm9yIHRoZSB0YWJsZS4KICovCmZ1bmN0aW9uIGdldFJ1bGVGaWxlcyhkYXRhKSB7CiAgaWYgKCFkYXRhIHx8ICFkYXRhLmZpbGVPcmlnaW5UYWJsZSB8fCAhZGF0YS5rZWVwUnVsZUJsYXN0UmFkaXVzVGFibGUpIHJldHVybiBbXTsKCiAgY29uc3QgZmlsZU1hcCA9IG5ldyBNYXAoKTsKICBjb25z", + "dCBjb25zdHJhaW50c01hcCA9IGdldENvbnN0cmFpbnRzTWFwKGRhdGEpOwogIGRhdGEuZmlsZU9yaWdpblRhYmxlLmZvckVhY2goZiA9PiB7CiAgICBjb25zdCBtYXZlbk5hbWUgPSBmb3JtYXRNYXZlbkNvb3JkaW5hdGUoZi5tYXZlbkNvb3JkaW5hdGUpOwogICAgZmlsZU1hcC5zZXQoZi5pZCwgewogICAgICBpZDogZi5pZCwKICAgICAgbmFtZTogbWF2ZW5OYW1lIHx8IGYuZmlsZW5hbWUsCiAgICAgIGtlZXBSdWxlczogMCwKICAgICAgbWF0Y2hlczogeyBjbGFzc2VzOiBuZXcgU2V0KCksIGZpZWxkczogbmV3IFNldCgpLCBtZXRob2RzOiBuZXcgU2V0KCkgfSwKICAgICAgaW1wYWN0OiB7CiAgICAgICAgb2JmdXNjYXRpb246IG5ldyBTZXQoKSwKICAgICAgICBvcHRpbWl6YXRpb246IG5ldyBTZXQoKSwKICAgICAgICBzaHJpbmtpbmc6IG5ldyBTZXQoKQogICAgICB9CiAgICB9KTsKICB9KTsKCiAgZGF0YS5rZWVwUnVsZUJsYXN0UmFkaXVzVGFibGUuZm9yRWFjaChydWxlID0+IHsKICAgIGNvbnN0IGZpbGVJZCA9IHJ1bGUub3JpZ2luPy5maWxlT3JpZ2luSWQ7CiAgICBjb25zdCBmaWxlRW50cnkgPSBmaWxlTWFwLmdldChmaWxlSWQpOwogICAgaWYgKGZpbGVFbnRyeSkgewogICAgICBmaWxlRW50cnkua2VlcFJ1bGVzKys7CiAgICAgIGNvbnN0IGJyID0gcnVsZS5ibGFzdFJhZGl1cyB8fCB7fTsKICAgICAgY29uc3QgYyA9IGJyLmNsYXNzQmxhc3RSYWRpdXMgfHwgW107CiAgICAgIGNvbnN0IGYgPSBici5maWVs", + "ZEJsYXN0UmFkaXVzIHx8IFtdOwogICAgICBjb25zdCBtID0gYnIubWV0aG9kQmxhc3RSYWRpdXMgfHwgW107CgogICAgICBjLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5Lm1hdGNoZXMuY2xhc3Nlcy5hZGQoaWQpKTsKICAgICAgZi5mb3JFYWNoKGlkID0+IGZpbGVFbnRyeS5tYXRjaGVzLmZpZWxkcy5hZGQoaWQpKTsKICAgICAgbS5mb3JFYWNoKGlkID0+IGZpbGVFbnRyeS5tYXRjaGVzLm1ldGhvZHMuYWRkKGlkKSk7CgogICAgICBjb25zdCBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzTWFwLmdldChydWxlLmNvbnN0cmFpbnRzSWQpIHx8IFtdOwogICAgICBpZiAoY29uc3RyYWludHMuaW5jbHVkZXMoJ0RPTlRfT0JGVVNDQVRFJykpIHsKICAgICAgICBjLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5LmltcGFjdC5vYmZ1c2NhdGlvbi5hZGQoJ2MnICsgaWQpKTsKICAgICAgICBmLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5LmltcGFjdC5vYmZ1c2NhdGlvbi5hZGQoJ2YnICsgaWQpKTsKICAgICAgICBtLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5LmltcGFjdC5vYmZ1c2NhdGlvbi5hZGQoJ20nICsgaWQpKTsKICAgICAgfQogICAgICBpZiAoY29uc3RyYWludHMuaW5jbHVkZXMoJ0RPTlRfT1BUSU1JWkUnKSkgewogICAgICAgIGMuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0Lm9wdGltaXphdGlvbi5hZGQoJ2MnICsgaWQpKTsKICAgICAgICBmLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5LmltcGFjdC5vcHRpbWl6YXRp", + "b24uYWRkKCdmJyArIGlkKSk7CiAgICAgICAgbS5mb3JFYWNoKGlkID0+IGZpbGVFbnRyeS5pbXBhY3Qub3B0aW1pemF0aW9uLmFkZCgnbScgKyBpZCkpOwogICAgICB9CiAgICAgIGlmIChjb25zdHJhaW50cy5pbmNsdWRlcygnRE9OVF9TSFJJTksnKSkgewogICAgICAgIGMuZm9yRWFjaChpZCA9PiBmaWxlRW50cnkuaW1wYWN0LnNocmlua2luZy5hZGQoJ2MnICsgaWQpKTsKICAgICAgICBmLmZvckVhY2goaWQgPT4gZmlsZUVudHJ5LmltcGFjdC5zaHJpbmtpbmcuYWRkKCdmJyArIGlkKSk7CiAgICAgICAgbS5mb3JFYWNoKGlkID0+IGZpbGVFbnRyeS5pbXBhY3Quc2hyaW5raW5nLmFkZCgnbScgKyBpZCkpOwogICAgICB9CiAgICB9CiAgfSk7CgogIGlmIChkYXRhLmdsb2JhbEtlZXBSdWxlQmxhc3RSYWRpdXNUYWJsZSkgewogICAgZGF0YS5nbG9iYWxLZWVwUnVsZUJsYXN0UmFkaXVzVGFibGUuZm9yRWFjaChydWxlID0+IHsKICAgICAgY29uc3QgZmlsZUlkID0gcnVsZS5vcmlnaW4/LmZpbGVPcmlnaW5JZDsKICAgICAgY29uc3QgZmlsZUVudHJ5ID0gZmlsZU1hcC5nZXQoZmlsZUlkKTsKICAgICAgaWYgKGZpbGVFbnRyeSkgewogICAgICAgIGZpbGVFbnRyeS5rZWVwUnVsZXMrKzsKICAgICAgfQogICAgfSk7CiAgfQoKICByZXR1cm4gQXJyYXkuZnJvbShmaWxlTWFwLnZhbHVlcygpKS5tYXAoZiA9PiAoewogICAgaWQ6IGYuaWQsCiAgICBuYW1lOiBmLm5hbWUsCiAgICBrZWVwUnVsZXM6IGYua2VlcFJ1bGVzLAog", + "ICAgbWF0Y2hlczogewogICAgICBjbGFzc2VzOiBmLm1hdGNoZXMuY2xhc3Nlcy5zaXplLAogICAgICBmaWVsZHM6IGYubWF0Y2hlcy5maWVsZHMuc2l6ZSwKICAgICAgbWV0aG9kczogZi5tYXRjaGVzLm1ldGhvZHMuc2l6ZSwKICAgICAgdG90YWw6IGYubWF0Y2hlcy5jbGFzc2VzLnNpemUgKyBmLm1hdGNoZXMuZmllbGRzLnNpemUgKyBmLm1hdGNoZXMubWV0aG9kcy5zaXplCiAgICB9LAogICAgaW1wYWN0OiB7CiAgICAgIG9iZnVzY2F0aW9uOiBmLmltcGFjdC5vYmZ1c2NhdGlvbi5zaXplLAogICAgICBvcHRpbWl6YXRpb246IGYuaW1wYWN0Lm9wdGltaXphdGlvbi5zaXplLAogICAgICBzaHJpbmtpbmc6IGYuaW1wYWN0LnNocmlua2luZy5zaXplCiAgICB9CiAgfSkpOwp9CgpmdW5jdGlvbiBmb3JtYXREZXNjcmlwdG9yKGRlc2MpIHsKICBpZiAoIWRlc2MpIHJldHVybiAiVW5rbm93biI7CiAgbGV0IGRpbWVuc2lvbnMgPSAwOwogIHdoaWxlIChkZXNjW2RpbWVuc2lvbnNdID09PSAnWycpIHsKICAgIGRpbWVuc2lvbnMrKzsKICB9CiAgbGV0IGJhc2UgPSBkZXNjLnN1YnN0cmluZyhkaW1lbnNpb25zKTsKICBsZXQgcmVzID0gIiI7CiAgaWYgKGJhc2Uuc3RhcnRzV2l0aCgnTCcpICYmIGJhc2UuZW5kc1dpdGgoJzsnKSkgewogICAgcmVzID0gYmFzZS5zdWJzdHJpbmcoMSwgYmFzZS5sZW5ndGggLSAxKS5yZXBsYWNlKC9cLy9nLCAnLicpOwogIH0gZWxzZSBpZiAoYmFzZS5sZW5ndGggPT09IDEpIHsKICAgIHN3aXRj", + "aCAoYmFzZVswXSkgewogICAgICBjYXNlICdWJzoKICAgICAgICByZXMgPSAidm9pZCI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ1onOgogICAgICAgIHJlcyA9ICJib29sZWFuIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnQic6CiAgICAgICAgcmVzID0gImJ5dGUiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdTJzoKICAgICAgICByZXMgPSAic2hvcnQiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdDJzoKICAgICAgICByZXMgPSAiY2hhciI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ0knOgogICAgICAgIHJlcyA9ICJpbnQiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdKJzoKICAgICAgICByZXMgPSAibG9uZyI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ0YnOgogICAgICAgIHJlcyA9ICJmbG9hdCI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ0QnOgogICAgICAgIHJlcyA9ICJkb3VibGUiOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHJlcyA9IGJhc2U7CiAgICB9CiAgfSBlbHNlIHsKICAgIHJlcyA9IGJhc2U7CiAgfQogIGZvciAobGV0IGkgPSAwOyBpIDwgZGltZW5zaW9uczsgaSsrKSB7CiAgICByZXMgKz0gIltdIjsKICB9CiAgcmV0dXJuIHJlczsKfQoKZnVuY3Rpb24gZm9ybWF0TWV0aG9kTmFtZShtZXRob2RSZWYsIGRhdGEsIHR5cGVSZWZNYXApIHsKICBpZiAoIW1ldGhvZFJlZikgcmV0dXJuICJVbmtub3duIG1ldGhvZCI7CiAg", + "Y29uc3QgY2xhc3NOYW1lID0gZm9ybWF0RGVzY3JpcHRvcih0eXBlUmVmTWFwLmdldChtZXRob2RSZWYuY2xhc3NSZWZlcmVuY2VJZCkpOwoKICBjb25zdCBwcm90byA9IChkYXRhLnByb3RvUmVmZXJlbmNlVGFibGUgfHwgW10pLmZpbmQocCA9PiBwLmlkID09PSBtZXRob2RSZWYucHJvdG9SZWZlcmVuY2VJZCk7CiAgbGV0IHBhcmFtcyA9ICIiOwogIGlmIChwcm90byAmJiBwcm90by5wYXJhbWV0ZXJzSWQpIHsKICAgIGNvbnN0IGxpc3QgPSAoZGF0YS50eXBlUmVmZXJlbmNlTGlzdFRhYmxlIHx8IFtdKS5maW5kKGwgPT4gbC5pZCA9PT0gcHJvdG8ucGFyYW1ldGVyc0lkKTsKICAgIGlmIChsaXN0ICYmIGxpc3QudHlwZVJlZmVyZW5jZUlkcykgewogICAgICBwYXJhbXMgPSBsaXN0LnR5cGVSZWZlcmVuY2VJZHMubWFwKGlkID0+IGZvcm1hdERlc2NyaXB0b3IodHlwZVJlZk1hcC5nZXQoaWQpKSkuam9pbignLCAnKTsKICAgIH0KICB9CiAgcmV0dXJuIGAke2NsYXNzTmFtZX0uJHttZXRob2RSZWYubmFtZX0oJHtwYXJhbXN9KWA7Cn0KCmZ1bmN0aW9uIGZvcm1hdEZpZWxkTmFtZShmaWVsZFJlZiwgZGF0YSwgdHlwZVJlZk1hcCkgewogIGlmICghZmllbGRSZWYpIHJldHVybiAiVW5rbm93biBmaWVsZCI7CiAgY29uc3QgY2xhc3NOYW1lID0gZm9ybWF0RGVzY3JpcHRvcih0eXBlUmVmTWFwLmdldChmaWVsZFJlZi5jbGFzc1JlZmVyZW5jZUlkKSk7CiAgcmV0dXJuIGAke2NsYXNzTmFtZX0uJHtmaWVsZFJlZi5uYW1lfWA7", + "Cn0KCmZ1bmN0aW9uIGZvcm1hdE1hdmVuQ29vcmRpbmF0ZShtKSB7CiAgaWYgKCFtIHx8ICFtLmdyb3VwSWQpIHJldHVybiBudWxsOwogIHJldHVybiBgJHttLmdyb3VwSWR9OiR7bS5hcnRpZmFjdElkfToke20udmVyc2lvbn1gOwp9CgpmdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikgewogIGlmICghc3RyKSByZXR1cm4gIiI7CiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bJjw+IiddL2csIGZ1bmN0aW9uKG0pIHsKICAgIHJldHVybiB7CiAgICAgICcmJzogJyZhbXA7JywKICAgICAgJzwnOiAnJmx0OycsCiAgICAgICc+JzogJyZndDsnLAogICAgICAnIic6ICcmcXVvdDsnLAogICAgICAiJyI6ICcmIzM5OycKICAgIH1bbV07CiAgfSk7Cn0KCi8qKgogKiBTaGFyZWQgaGVscGVyIHRvIGNvdW50IGtlcHQgaXRlbXMgdGhhdCBoYXZlIGEgc3BlY2lmaWMgY29uc3RyYWludC4KICogQW4gaXRlbSBpcyBjb3VudGVkIGlmIEFOWSBvZiB0aGUga2VlcCBydWxlcyB0aGF0IGtlZXAgaXQgaGFzIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludC4KICovCmZ1bmN0aW9uIGdldFNjb3JlKGRhdGEsIGNvbnN0cmFpbnROYW1lKSB7CiAgaWYgKCFkYXRhKSByZXR1cm4gMDsKCiAgY29uc3QgY29uc3RyYWludHNNYXAgPSBnZXRDb25zdHJhaW50c01hcChkYXRhKTsKICBjb25zdCBydWxlc01hcCA9IGdldFJ1bGVzQ29uc3RyYWludHNNYXAoZGF0YSk7CgogIGxldCBjb3VudCA9IDA7CiAgY29uc3QgdGFibGVzID0gWwogICAgZGF0YS5rZXB0Q2xhc3NJ", + "bmZvVGFibGUsCiAgICBkYXRhLmtlcHRGaWVsZEluZm9UYWJsZSwKICAgIGRhdGEua2VwdE1ldGhvZEluZm9UYWJsZQogIF07CgogIHRhYmxlcy5mb3JFYWNoKHRhYmxlID0+IHsKICAgIGlmICh0YWJsZSkgewogICAgICB0YWJsZS5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIGNvbnN0IGhhc1J1bGVXaXRoQ29uc3RyYWludCA9IChpdGVtLmtlcHRCeSB8fCBbXSkuc29tZShydWxlSWQgPT4gewogICAgICAgICAgY29uc3QgY29uc3RyYWludHNJZCA9IHJ1bGVzTWFwLmdldChydWxlSWQpOwogICAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBjb25zdHJhaW50c01hcC5nZXQoY29uc3RyYWludHNJZCk7CiAgICAgICAgICByZXR1cm4gY29uc3RyYWludHMgJiYgY29uc3RyYWludHMuaW5jbHVkZXMoY29uc3RyYWludE5hbWUpOwogICAgICAgIH0pOwogICAgICAgIGlmIChoYXNSdWxlV2l0aENvbnN0cmFpbnQpIHsKICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9KTsKICByZXR1cm4gY291bnQ7Cn0KPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==")); } public static String getSummaryHtmlTemplate() {
diff --git a/tools/compiledump.py b/tools/compiledump.py index 1c83d47..c961551 100755 --- a/tools/compiledump.py +++ b/tools/compiledump.py
@@ -666,9 +666,9 @@ if args.enable_test_assertions: cmd.append('-Dcom.android.tools.r8.enableTestAssertions=1') feature_jars = dump.feature_jars() - if args.dump_blast_radius_to_directory is not None: + if args.dump_keep_radius_to_directory is not None: cmd.append('-Dcom.android.tools.r8.dumpkeepradiustodirectory=' + - args.dump_blast_radius_to_directory) + args.dump_keep_radius_to_directory) if args.dump_trace_to_directory is not None: cmd.append('-Dcom.android.tools.r8.dumptracetodirectory=' + args.dump_trace_to_directory)