<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>LightAdmin-AutoRepliesAndSignatures</Name>
    <Version>11.0.1</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-09-21 15:57:22" Version="11.0.1">Initial Release.</ChangeLog>
    <Description Lang="en">Enable the LightAdmin capability for the Signature and Auto Response features</Description>
    <Framework>11.0.x</Framework>
    <BuildCommitID>6ba2d995989b2090900c5070d948a14b88c507a9</BuildCommitID>
    <BuildDate>2026-09-21 15:57:26</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AdminAutoResponse.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL01vZHVsZXMvQWRtaW5BdXRvUmVzcG9uc2UucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluQXV0b1Jlc3BvbnNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgcHJlZiBmb3IgY29sdW1ucyBrZXkKICAgICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSA9ICdJbmNsdWRlSW52YWxpZCcgLiAnLScgLiAkU2VsZi0+e0FjdGlvbn07CgogICAgbXkgJVByZWZlcmVuY2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUHJlZmVyZW5jZXN7ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSB9OwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgaWYgKCAhJFBhcmFte0FjY2Vzc1J3fSAmJiAkUGFyYW17QWNjZXNzUm99ICkgewogICAgICAgICRTZWxmLT57TGlnaHRBZG1pbn0gPSAxOwogICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRBdXRvUmVzcG9uc2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyk7CiAgICBteSAkUXVldWVPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgogICAgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbmNsdWRlSW52YWxpZCcgKTsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSwKICAgICAgICAgICAgVmFsdWUgID0+ICRQYXJhbXtJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUGFyYW17SW5jbHVkZUludmFsaWR9OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICBteSAkSUQgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICBteSAlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldCgKICAgICAgICAgICAgSUQgPT4gJElELAogICAgICAgICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlQXV0b1Jlc3BvbnNlTWVtYmVyTGlzdCggQXV0b1Jlc3BvbnNlSUQgPT4gJElEICk7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIE5vIHBlcm1pc3Npb24gZm9yIHRoZSB0ZW1wbGF0ZS4KICAgICAgICAgICAgaWYgKCAhJERhdGF7UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICAgICAlRGF0YSA9ICgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJERhdGF7UGVybWlzc2lvbn0gZXEgJ3JvJyApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdOb3RpY2UnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTm8gcGVybWlzc2lvbiB0byBlZGl0IHRoaXMgYXV0byByZXNwb25zZS4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAoICVHZXRQYXJhbSwgJUVycm9ycyApOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhJRCBOYW1lIENvbW1lbnQgVmFsaWRJRCBSZXNwb25zZSBTdWJqZWN0IFR5cGVJRCBBZGRyZXNzSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGNvbXBvc2VkIGNvbnRlbnQgdHlwZQogICAgICAgICRHZXRQYXJhbXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2hhcnNldAogICAgICAgICRHZXRQYXJhbXtDaGFyc2V0fSA9ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH07CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEIEFkZHJlc3NJRCBUeXBlSUQgU3ViamVjdCkpIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdJbnZhbGlkJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlQXV0b1Jlc3BvbnNlTWVtYmVyTGlzdCggQXV0b1Jlc3BvbnNlSUQgPT4gJEdldFBhcmFte0lEfSApOwogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUuCiAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7Tm9QZXJtaXNzaW9ufSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgYXV0byByZXNwb25zZQogICAgICAgICAgICBteSAkVXBkYXRlID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlVXBkYXRlKCAlR2V0UGFyYW0sIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0gKTsKCiAgICAgICAgICAgIGlmICgkVXBkYXRlKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGVkaXRpbmcgdGhlIGF1dG8gcmVzcG9uc2UsIGp1c3QgcmVkaXJlY3QgdG8gdGhlIGVkaXQgc2NyZWVuCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgICAgICAgICAmJiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKSBlcSAnMScgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRJRCIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSByZXR1cm4gdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdDaGFuZ2UnLAogICAgICAgICAgICBFcnJvcnMgPT4gXCVFcnJvcnMsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQXV0b1Jlc3BvbnNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkJyApIHsKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgJEdldFBhcmFte05hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hbWUnICk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAoICVHZXRQYXJhbSwgJUVycm9ycyApOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhJRCBOYW1lIENvbW1lbnQgVmFsaWRJRCBSZXNwb25zZSBTdWJqZWN0IFR5cGVJRCBBZGRyZXNzSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGNvbXBvc2VkIGNvbnRlbnQgdHlwZQogICAgICAgICRHZXRQYXJhbXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2hhcnNldAogICAgICAgICRHZXRQYXJhbXtDaGFyc2V0fSA9ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH07CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEIEFkZHJlc3NJRCBUeXBlSUQgU3ViamVjdCkpIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdJbnZhbGlkJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBhZGQgc3RhdGUKICAgICAgICAgICAgbXkgJEF1dG9SZXNwb25zZUlEID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlQWRkKAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJEF1dG9SZXNwb25zZUlEKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnQXV0byBSZXNwb25zZSBhZGRlZCEnKSApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICBFcnJvcnMgPT4gXCVFcnJvcnMsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQXV0b1Jlc3BvbnNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRBdXRvUmVzcG9uc2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkUGFyYW17VmFsaWRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRQYXJhbXtFcnJvcnN9LT57J1ZhbGlkSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgJFBhcmFte1R5cGVPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiB7ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZVR5cGVMaXN0KCksIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtUeXBlSUR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkUGFyYW17RXJyb3JzfS0+eydUeXBlSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgJFBhcmFte1N5c3RlbUFkZHJlc3NPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4geyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpLT5TeXN0ZW1BZGRyZXNzTGlzdCggVmFsaWQgPT4gMSApLCB9LAogICAgICAgIE5hbWUgICAgICAgID0+ICdBZGRyZXNzSUQnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtBZGRyZXNzSUR9LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkUGFyYW17RXJyb3JzfS0+eydBZGRyZXNzSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHJlZm9ybWF0IGZyb20gcGxhaW4gdG8gaHRtbAogICAgICAgIGlmICggJFBhcmFte0NvbnRlbnRUeXBlfSAmJiAkUGFyYW17Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICAgICAkUGFyYW17UmVzcG9uc2V9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtSZXNwb25zZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgcmVmb3JtYXQgZnJvbSBodG1sIHRvIHBsYWluCiAgICAgICAgaWYgKCAkUGFyYW17Q29udGVudFR5cGV9ICYmICRQYXJhbXtDb250ZW50VHlwZX0gPX4gL3RleHRcL2h0bWwvaSApIHsKICAgICAgICAgICAgJFBhcmFte1Jlc3BvbnNlfSA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1Jlc3BvbnNlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdVcGRhdGUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtFcnJvcnN9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgIyBzZXQgdXAgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgICRMYXlvdXRPYmplY3QtPlNldFJpY2hUZXh0UGFyYW1ldGVycygKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfT3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgbXkgJFF1ZXVlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSW5jbHVkZUludmFsaWQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJbmNsdWRlSW52YWxpZCAgICAgICAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgIEluY2x1ZGVJbnZhbGlkQ2hlY2tlZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/ICdjaGVja2VkJyA6ICcnLAogICAgICAgIH0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0ZpbHRlcicgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIG15ICRBdXRvUmVzcG9uc2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyk7CiAgICBteSAlTGlzdCA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUxpc3QoCiAgICAgICAgVmFsaWQgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPyAwIDogMSwKICAgICk7CiAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CgogICAgICAgICMgY2hlY2sgcXVldWUgcGVybWlzc2lvbnMgb2YgbGlua2VkIHRlbXBsYXRlcy4KICAgICAgICBmb3IgbXkgJExpc3RLZXkgKCBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldCggSUQgPT4gJExpc3RLZXkgKTsKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlSUQgPT4gJERhdGF7SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICghJERhdGF7UGVybWlzc2lvbn0pIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkTGlzdHskTGlzdEtleX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSByZXN1bHRzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCVMaXN0KSB7CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIGZvciBteSAkSUQgKCBzb3J0IHsgJExpc3R7JGF9IGNtcCAkTGlzdHskYn0gfSBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldCgKICAgICAgICAgICAgICAgIElEID0+ICRJRCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkRGF0YXtWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+IGludCByYW5kIDUsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBhIG5vIGRhdGEgbWVzc2FnZSBpcyBkaXNwbGF5ZWQKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Modules/AdminQueueAutoResponse.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5RdWV1ZUF1dG9SZXNwb25zZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5RdWV1ZUF1dG9SZXNwb25zZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgaWYgKCAhJFBhcmFte0FjY2Vzc1J3fSAmJiAkUGFyYW17QWNjZXNzUm99ICkgewogICAgICAgICRTZWxmLT57TGlnaHRBZG1pbn0gPSAxOwogICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJE91dHB1dCAgICAgID0gJyc7CiAgICAkUGFyYW17SUR9ICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICRQYXJhbXtBY3Rpb259ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FjdGlvbicgKQogICAgICAgIHx8ICdBZG1pblF1ZXVlQXV0b1Jlc3BvbnNlJzsKICAgICRQYXJhbXtGaWx0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFF1ZXVlT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgbXkgJEF1dG9SZXNwb25zZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRvUmVzcG9uc2UnKTsKCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdldCBUeXBlIEF1dG8gUmVzcG9uc2VzIGRhdGEKICAgICAgICBteSAlVHlwZVJlc3BvbnNlc0RhdGEgPSAkQXV0b1Jlc3BvbnNlT2JqZWN0LT5BdXRvUmVzcG9uc2VUeXBlTGlzdCgpOwoKICAgICAgICAjIGdldCBxdWV1ZSBkYXRhCiAgICAgICAgbXkgJVF1ZXVlRGF0YSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoCiAgICAgICAgICAgIElEID0+ICRQYXJhbXtJRH0sCiAgICAgICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICRRdWV1ZURhdGF7UGVybWlzc2lvbn0gPSAkUXVldWVPYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbICRQYXJhbXtJRH0gXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgTm8gcGVybWlzc2lvbiBmb3IgdGhlIHF1ZXVlLgogICAgICAgICAgICBpZiAoICEkUXVldWVEYXRhe1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgJVF1ZXVlRGF0YSA9ICgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXVlRGF0YXtQZXJtaXNzaW9ufSBlcSAncm8nICkgewogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ05vdGljZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdObyBwZXJtaXNzaW9uIHRvIGVkaXQgYXV0byByZXNwb25zZXMgZm9yIHRoaXMgcXVldWUuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU3ViYWN0aW9uID0+ICRTZWxmLT57U3ViYWN0aW9ufSwKICAgICAgICAgICAgICAgIFF1ZXVlTmFtZSA9PiAkUXVldWVEYXRhe05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgJVF1ZXVlRGF0YSwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEFjdGlvbkhvbWUgPT4gJ0FkbWluUXVldWUnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRUeXBlSUQgKCBzb3J0IGtleXMgJVR5cGVSZXNwb25zZXNEYXRhICkgewoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKIyAgICAgICAgICAgICMgZ2V0IGFsbCB2YWxpZCBBdXRvIFJlc3BvbnNlcyBkYXRhIGZvciBhcHByb3ByaWF0ZSBBdXRvIFJlc3BvbnNlcyB0eXBlCiMgICAgICAgICAgICBteSAlQXV0b1Jlc3BvbnNlTGlzdEJ5VHlwZSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUxpc3QoCiMgICAgICAgICAgICAgICAgVHlwZUlEID0+ICRUeXBlSUQsCiMgICAgICAgICAgICApOwojCiMgICAgICAgICAgICAjIGdldCBzZWxlY3RlZCBBdXRvIFJlc3BvbnNlcyBmb3IgYXBwcm9wcmlhdGUgQXV0byBSZXNwb25zZXMgdHlwZSBhbmQgUXVldWUKIyAgICAgICAgICAgIG15ICVBdXRvUmVzcG9uc2VEYXRhID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlR2V0QnlUeXBlUXVldWVJRCgKIyAgICAgICAgICAgICAgICBRdWV1ZUlEID0+ICRQYXJhbXtJRH0sCiMgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAkVHlwZVJlc3BvbnNlc0RhdGF7JFR5cGVJRH0sCiMgICAgICAgICAgICApOwojCiMgICAgICAgICAgICAkUGFyYW17RGF0YVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiMgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJJRHNfJFR5cGVJRCIsCiMgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRBdXRvUmVzcG9uc2VEYXRhe0F1dG9SZXNwb25zZUlEfSB8fCAnJywKIyAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlLAojICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAojICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAojICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFc1MHBjJywKIyAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICglUXVldWVEYXRhKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgYWxsIHZhbGlkIEF1dG8gUmVzcG9uc2VzIGRhdGEgZm9yIGFwcHJvcHJpYXRlIEF1dG8gUmVzcG9uc2VzIHR5cGUKICAgICAgICAgICAgICAgIG15ICVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlTGlzdCgKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQXV0b1Jlc3BvbnNlSUQgKCBzb3J0IGtleXMgJUF1dG9SZXNwb25zZUxpc3RCeVR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVRdWV1ZXMgICAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUF1dG9SZXNwb25zZU1lbWJlckxpc3QoIEF1dG9SZXNwb25zZUlEID0+ICRBdXRvUmVzcG9uc2VJRCApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEF1dG9SZXNwb25zZUxpc3RCeVR5cGV7JEF1dG9SZXNwb25zZUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgIyBnZXQgc2VsZWN0ZWQgQXV0byBSZXNwb25zZXMgZm9yIGFwcHJvcHJpYXRlIEF1dG8gUmVzcG9uc2VzIHR5cGUgYW5kIFF1ZXVlCiAgICAgICAgICAgICAgICBteSAlQXV0b1Jlc3BvbnNlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUdldEJ5VHlwZVF1ZXVlSUQoCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkUGFyYW17SUR9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFR5cGVSZXNwb25zZXNEYXRheyRUeXBlSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJJRHNfJFR5cGVJRCIsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRBdXRvUmVzcG9uc2VEYXRhe0F1dG9SZXNwb25zZUlEfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlLAogICAgICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFc1MHBjJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NoYW5nZUl0ZW1MaXN0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICA9PiAkVHlwZVJlc3BvbnNlc0RhdGF7JFR5cGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVHlwZUlEID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5RdWV1ZUF1dG9SZXNwb25zZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIH0KCiAgICAjIHF1ZXVlcyB0byBxdWV1ZV9hdXRvX3Jlc3BvbnNlcwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZUFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15IEBOZXdJRHMgPSAoKTsKCiAgICAgICAgIyBnZXQgVHlwZSBBdXRvIFJlc3BvbnNlcyBkYXRhCiAgICAgICAgbXkgJVR5cGVSZXNwb25zZXNEYXRhID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlVHlwZUxpc3QoKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB1c2VyIGhhcyBydyBwZXJtaXNzaW9ucyBvbiB0aGUgUXVldWVJRAogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsgJFBhcmFte0lEfSBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBubyBwZXJtaXNzaW9uIHRvIGNoYW5nZS4KICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1DaGFuZ2U7SUQ9JFBhcmFte0lEfSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbnMgb24gZXZlcnkgQXV0b1Jlc3BvbnNlSUQKICAgICAgICAgICAgQ0hFQ0tfQVVUT19SRVNQT05TRV9JRDoKICAgICAgICAgICAgZm9yIG15ICRUeXBlSUQgKCBzb3J0IGtleXMgJVR5cGVSZXNwb25zZXNEYXRhICkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtQXV0b1Jlc3BvbnNlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiSURzXyRUeXBlSUQiICk7CgogICAgICAgICAgICAgICAgbmV4dCBDSEVDS19BVVRPX1JFU1BPTlNFX0lEIGlmICEkUGFyYW1BdXRvUmVzcG9uc2VJRDsKICAgICAgICAgICAgICAgIG15ICVBdXRvUmVzcG9uc2VMaXN0QnlUeXBlID0gJEF1dG9SZXNwb25zZU9iamVjdC0+QXV0b1Jlc3BvbnNlTGlzdCggVHlwZUlEID0+ICRUeXBlSUQgKTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF1dG9SZXNwb25zZUlEICgga2V5cyAlQXV0b1Jlc3BvbnNlTGlzdEJ5VHlwZSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlUXVldWVzICAgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCBBdXRvUmVzcG9uc2VJRCA9PiAkQXV0b1Jlc3BvbnNlSUQgKTsKICAgICAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEF1dG9SZXNwb25zZUxpc3RCeVR5cGV7JEF1dG9SZXNwb25zZUlEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBubyBwZXJtaXNzaW9uIHRvIGNoYW5nZS4KICAgICAgICAgICAgICAgIGlmICggISRBdXRvUmVzcG9uc2VMaXN0QnlUeXBleyAkUGFyYW1BdXRvUmVzcG9uc2VJRCB9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUNoYW5nZTtJRD0kUGFyYW17SUR9IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBzZXQgQXV0byBSZXNwb25zZXMgSURzIGZvciB0aGlzIHF1ZXVlLgogICAgICAgIGZvciBteSAkVHlwZUlEICggc29ydCBrZXlzICVUeXBlUmVzcG9uc2VzRGF0YSApIHsKICAgICAgICAgICAgcHVzaCggQE5ld0lEcywgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIklEc18kVHlwZUlEIiApICk7CiAgICAgICAgfQoKICAgICAgICAkQXV0b1Jlc3BvbnNlT2JqZWN0LT5BdXRvUmVzcG9uc2VRdWV1ZSgKICAgICAgICAgICAgUXVldWVJRCAgICAgICAgID0+ICRQYXJhbXtJRH0sCiAgICAgICAgICAgIEF1dG9SZXNwb25zZUlEcyA9PiBcQE5ld0lEcywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgcXVldWUgLSBhdXRvIHJlc3BvbnNlIHJlbGF0aW9uLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byBvdmVydmlldwogICAgICAgIGlmICgKICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgJiYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkgZXEgJzEnICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRQYXJhbXtJRH0iICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGVsc2UgISBwcmludCBmb3JtCiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdldCBxdWV1ZSBkYXRhCiAgICAgICAgbXkgJVF1ZXVlRGF0YTsKICAgICAgICBteSAkUXVldWVIZWFkZXI7CgogICAgICAgICMgZmlsdGVyIHF1ZXVlcyB3aXRob3V0IGF1dG8gcmVzcG9uc2VzCiAgICAgICAgaWYgKCAkUGFyYW17RmlsdGVyfSBlcSAnUXVldWVzV2l0aG91dEF1dG9SZXNwb25zZXMnICkgewoKICAgICAgICAgICAgJVF1ZXVlRGF0YSA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZVdpdGhvdXRRdWV1ZSgpOwoKICAgICAgICAgICAgIyB1c2UgYXBwcm9wcmlhdGUgaGVhZGVyCiAgICAgICAgICAgICRRdWV1ZUhlYWRlciA9IFRyYW5zbGF0YWJsZSgnUXVldWVzICggd2l0aG91dCBhdXRvIHJlc3BvbnNlcyApJyk7CgogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJVF1ZXVlRGF0YSAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAgICAgJFF1ZXVlSGVhZGVyID0gVHJhbnNsYXRhYmxlKCdRdWV1ZXMnKTsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4geyAlUXVldWVEYXRhLCAlUGFyYW0sIH0KICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyUXVldWVzJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdGaWx0ZXJBdXRvUmVzcG9uc2VzJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwoKICAgICAgICBpZiAoICRQYXJhbXtGaWx0ZXJ9IGVxICdRdWV1ZXNXaXRob3V0QXV0b1Jlc3BvbnNlcycgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdTaG93QWxsUXVldWVzJyApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1F1ZXVlc1dpdGhvdXRBdXRvUmVzcG9uc2VzJyApOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZUhlYWRlciA9PiAkUXVldWVIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CgogICAgICAgICAgICAjIEZpbHRlciBvdXQgcXVldWVzIHdpdGhvdXQgcGVybWlzc2lvbi4KICAgICAgICAgICAgbXkgJVJ3UXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxRdWV1ZXMoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJFF1ZXVlSUQgKCBrZXlzICVRdWV1ZURhdGEgKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJFF1ZXVlRGF0YXskUXVldWVJRH0gaWYgISRSd1F1ZXVlc3skUXVldWVJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgYW55IHF1ZXVlcywgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoJVF1ZXVlRGF0YSkgewogICAgICAgICAgICBmb3IgKCBzb3J0IHsgJFF1ZXVlRGF0YXskYX0gY21wICRRdWV1ZURhdGF7JGJ9IH0ga2V5cyAlUXVldWVEYXRhICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSXRlbScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgPT4gJFF1ZXVlRGF0YXskX30sCiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJF8sCiAgICAgICAgICAgICAgICAgICAgICAgICVRdWV1ZURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9RdWV1ZXNGb3VuZE1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdmFsaWQgQXV0byBSZXNwb25zZSBJRHMKICAgICAgICBteSAlQXV0b1Jlc3BvbnNlTGlzdCA9ICRBdXRvUmVzcG9uc2VPYmplY3QtPkF1dG9SZXNwb25zZUxpc3QoKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIGZvciBteSAkQXV0b1Jlc3BvbnNlSUQgKCBzb3J0IGtleXMgJUF1dG9SZXNwb25zZUxpc3QgKSB7CiAgICAgICAgICAgICAgICBteSAlUXVldWVzICAgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCBBdXRvUmVzcG9uc2VJRCA9PiAkQXV0b1Jlc3BvbnNlSUQgKTsKICAgICAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXV0b1Jlc3BvbnNlTGlzdHskQXV0b1Jlc3BvbnNlSUR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBhdXRvIHJlc3BvbnNlcywgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoIGtleXMgJUF1dG9SZXNwb25zZUxpc3QgKSB7CiAgICAgICAgICAgIGZvciBteSAkQXV0b1Jlc3BvbnNlSUQgKCBzb3J0IGtleXMgJUF1dG9SZXNwb25zZUxpc3QgKSB7CgogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkQXV0b1Jlc3BvbnNlT2JqZWN0LT5BdXRvUmVzcG9uc2VHZXQoCiAgICAgICAgICAgICAgICAgICAgSUQgPT4gJEF1dG9SZXNwb25zZUlELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlUmVzcG9uc2VEYXRhSXRlbSA9ICgKICAgICAgICAgICAgICAgICAgICBJRCAgID0+ICREYXRhe0lEfSwKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICREYXRhe1R5cGV9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJERhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1MaXN0JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFwlUmVzcG9uc2VEYXRhSXRlbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vQXV0b1Jlc3BvbnNlc0ZvdW5kTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblF1ZXVlQXV0b1Jlc3BvbnNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgfQogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Modules/AdminSignature.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL01vZHVsZXMvQWRtaW5TaWduYXR1cmUucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU2lnbmF0dXJlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgcHJlZiBmb3IgY29sdW1ucyBrZXkKICAgICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSA9ICdJbmNsdWRlSW52YWxpZCcgLiAnLScgLiAkU2VsZi0+e0FjdGlvbn07CgogICAgbXkgJVByZWZlcmVuY2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUHJlZmVyZW5jZXN7ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSB9OwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIGlmICggISRQYXJhbXtBY2Nlc3NSd30gJiYgJFBhcmFte0FjY2Vzc1JvfSApIHsKICAgICAgICAkU2VsZi0+e0xpZ2h0QWRtaW59ID0gMTsKICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFNpZ25hdHVyZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTaWduYXR1cmUnKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICBteSAkUXVldWVPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIG15ICROb3RpZmljYXRpb24gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTm90aWZpY2F0aW9uJyApIHx8ICcnOwoKICAgICRQYXJhbXtJbmNsdWRlSW52YWxpZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSW5jbHVkZUludmFsaWQnICk7CgogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtJbmNsdWRlSW52YWxpZH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+U2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEtleSAgICA9PiAkU2VsZi0+e1ByZWZLZXlJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgIFZhbHVlICA9PiAkUGFyYW17SW5jbHVkZUludmFsaWR9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57SW5jbHVkZUludmFsaWR9ID0gJFBhcmFte0luY2x1ZGVJbnZhbGlkfTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZScgKSB7CiAgICAgICAgbXkgJElEICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgbXkgJURhdGEgPSAkU2lnbmF0dXJlT2JqZWN0LT5TaWduYXR1cmVHZXQoCiAgICAgICAgICAgIElEID0+ICRJRCwKICAgICAgICApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU2lnbmF0dXJlTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgIFNpZ25hdHVyZUlEID0+ICRJRAogICAgICAgICAgICApOwogICAgICAgICAgICAkRGF0YXtQZXJtaXNzaW9ufSA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIGZvciB0aGUgdGVtcGxhdGUuCiAgICAgICAgICAgIGlmICggISREYXRhe1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgJURhdGEgPSAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICREYXRhe1Blcm1pc3Npb259IGVxICdybycgKSB7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05vIHBlcm1pc3Npb24gdG8gZWRpdCB0aGlzIHNpZ25hdHVyZS4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiBUcmFuc2xhdGFibGUoJ1NpZ25hdHVyZSB1cGRhdGVkIScpICkKICAgICAgICAgICAgaWYgKCAkTm90aWZpY2F0aW9uICYmICROb3RpZmljYXRpb24gZXEgJ1VwZGF0ZScgKTsKCiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0NoYW5nZScsCiAgICAgICAgICAgICVEYXRhLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQgTmFtZSBUZXh0IENvbW1lbnQgVmFsaWRJRCkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KICAgICAgICAkR2V0UGFyYW17J1RleHQnfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgIFBhcmFtID0+ICdUZXh0JywKICAgICAgICAgICAgUmF3ICAgPT4gMQogICAgICAgICkgfHwgJyc7CgogICAgICAgICMgZ2V0IGNvbnRlbnQgdHlwZQogICAgICAgIG15ICRDb250ZW50VHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAkQ29udGVudFR5cGUgPSAndGV4dC9odG1sJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEIFRleHQpKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnSW52YWxpZCcgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewoKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTaWduYXR1cmVNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgU2lnbmF0dXJlSUQgPT4gJEdldFBhcmFte0lEfQogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUuCiAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7Tm9QZXJtaXNzaW9ufSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgc2lnbmF0dXJlCiAgICAgICAgICAgIG15ICRVcGRhdGUgPSAkU2lnbmF0dXJlT2JqZWN0LT5TaWduYXR1cmVVcGRhdGUoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQ29udGVudFR5cGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkVXBkYXRlKSB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGVkaXRpbmcgdGhlIHNpZ25hdHVyZSwganVzdCByZWRpcmVjdCB0byB0aGUgZWRpdCBzY3JlZW4KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKQogICAgICAgICAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1DaGFuZ2U7SUQ9JElEO05vdGlmaWNhdGlvbj1VcGRhdGUiCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSByZXR1cm4gdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O05vdGlmaWNhdGlvbj1VcGRhdGUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIGhhcyBnb25lIHdyb25nCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwojICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgIG15ICRFcnJvckluZm8gPSAkRXJyb3Jze05vUGVybWlzc2lvbn0gPwogICAgICAgICAgICAgICAgICAgICAgICAnTm8gcGVybWlzc2lvbiB0byB1cGRhdGUgdGhpcyBzaWduYXR1cmUuJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICdUaGVyZSB3ZXJlIGVycm9ycywgY291bGQgbm90IHVwZGF0ZSB0aGlzIHNpZ25hdHVyZS4nOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICBJbmZvID0+ICRFcnJvckluZm8sCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicKICAgICAgICApOwojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0NoYW5nZScsCiAgICAgICAgICAgIEVycm9ycyA9PiBcJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewogICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQgTmFtZSBDb21tZW50IFZhbGlkSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgJEdldFBhcmFteydUZXh0J30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgICAgICBQYXJhbSA9PiAnVGV4dCcsCiAgICAgICAgICAgIFJhdyAgID0+IDEKICAgICAgICApIHx8ICcnOwoKICAgICAgICAjIGdldCBjb250ZW50IHR5cGUKICAgICAgICBteSAkQ29udGVudFR5cGUgPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJENvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBkYXRhCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KE5hbWUgVmFsaWRJRCBUZXh0KSkgewogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIGVycm9ycyBvY2N1cnJlZAogICAgICAgIGlmICggISVFcnJvcnMgKSB7CgogICAgICAgICAgICAjIGFkZCBzaWduYXR1cmUKICAgICAgICAgICAgbXkgJE5ld1NpZ25hdHVyZSA9ICRTaWduYXR1cmVPYmplY3QtPlNpZ25hdHVyZUFkZCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICRDb250ZW50VHlwZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkTmV3U2lnbmF0dXJlKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnU2lnbmF0dXJlIGFkZGVkIScpICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2lnbmF0dXJlJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIGhhcyBnb25lIHdyb25nCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBQcmlvcml0eSA9PiAnRXJyb3InICk7CiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0FkZCcsCiAgICAgICAgICAgIEVycm9ycyA9PiBcJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TaWduYXR1cmUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnU2lnbmF0dXJlIHVwZGF0ZWQhJykgKQogICAgICAgICAgICBpZiAoICROb3RpZmljYXRpb24gJiYgJE5vdGlmaWNhdGlvbiBlcSAnVXBkYXRlJyApOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNpZ25hdHVyZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCn0KCnN1YiBfRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0LT5TZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIHJlZm9ybWF0IGZyb20gcGxhaW4gdG8gaHRtbAogICAgICAgIGlmICggJFBhcmFte0NvbnRlbnRUeXBlfSAmJiAkUGFyYW17Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICAgICAkUGFyYW17VGV4dH0gPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0hUTUwoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1RleHR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHJlZm9ybWF0IGZyb20gaHRtbCB0byBwbGFpbgogICAgICAgIGlmICggJFBhcmFte0NvbnRlbnRUeXBlfSAmJiAkUGFyYW17Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgICAgICRQYXJhbXtUZXh0fSA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1RleHR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25MaXN0JywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnLAogICAgKTsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRQYXJhbXtWYWxpZE9wdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgVmFsaWRhdGVfUmVxdWlyZWQgJyAuICggJFBhcmFte0Vycm9yc30tPnsnVmFsaWRJREludmFsaWQnfSB8fCAnJyApLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3VXBkYXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17RXJyb3JzfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvd3MgaGVhZGVyCiAgICBpZiAoICRQYXJhbXtBY3Rpb259IGVxICdDaGFuZ2UnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZCcgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9PdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICBteSAkUXVldWVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25MaXN0JywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkJywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSW5jbHVkZUludmFsaWQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJbmNsdWRlSW52YWxpZCAgICAgICAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgIEluY2x1ZGVJbnZhbGlkQ2hlY2tlZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/ICdjaGVja2VkJyA6ICcnLAogICAgICAgIH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0ZpbHRlcicsCiAgICApOwoKICAgIG15ICRTaWduYXR1cmVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2lnbmF0dXJlJyk7CiAgICBteSAlTGlzdCAgICAgICAgICAgID0gJFNpZ25hdHVyZU9iamVjdC0+U2lnbmF0dXJlTGlzdCgKICAgICAgICBWYWxpZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/IDAgOiAxLAogICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKCiAgICAgICAgIyBjaGVjayBxdWV1ZSBwZXJtaXNzaW9ucyBvZiBsaW5rZWQgc2lnbmF0dXJlcy4KICAgICAgICBmb3IgbXkgJExpc3RLZXkgKCBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRTaWduYXR1cmVPYmplY3QtPlNpZ25hdHVyZUdldCggSUQgPT4gJExpc3RLZXkgKTsKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTaWduYXR1cmVNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgU2lnbmF0dXJlSUQgPT4gJERhdGF7SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICghJERhdGF7UGVybWlzc2lvbn0pIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkTGlzdHskTGlzdEtleX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSByZXN1bHRzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCVMaXN0KSB7CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIGZvciBteSAkTGlzdEtleSAoIHNvcnQgeyAkTGlzdHskYX0gY21wICRMaXN0eyRifSB9IGtleXMgJUxpc3QgKSB7CgogICAgICAgICAgICBteSAlRGF0YSA9ICRTaWduYXR1cmVPYmplY3QtPlNpZ25hdHVyZUdldCggSUQgPT4gJExpc3RLZXkgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkRGF0YXtWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminAutoResponse.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkF1dG8gUmVzcG9uc2UgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdBdXRvIFJlc3BvbnNlIE1hbmFnZW1lbnQnKSwKICAgICAgICAgICAgICAgIExpbmsgPT4gRW52KCJBY3Rpb24iKSwKICAgICAgICAgICAgfSwKICAgICAgICBdCiAgICAlXQoKICAgIFslIFNXSVRDSCBEYXRhLkFjdGlvbiAlXQogICAgICAgIFslIENBU0UgJ0FkZCcgJV0KICAgICAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gVHJhbnNsYXRlKCJBZGQgQXV0byBSZXNwb25zZSIpLH0pICVdCiAgICAgICAgWyUgQ0FTRSAnQ2hhbmdlJyAlXQogICAgICAgICAgICBbJSBVU0UgRWRpdFRpdGxlID0gU3RyaW5nKFRyYW5zbGF0ZSgiRWRpdCBBdXRvIFJlc3BvbnNlIikpICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuTmFtZSApIH0pICVdCiAgICBbJSBFTkQgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5jbHVkZUludmFsaWQiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIgYnkgdmFsaWQgc3RhdGUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJJbmNsdWRlSW52YWxpZCIgbmFtZT0iSW5jbHVkZUludmFsaWQiIHZhbHVlPSIxIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbmNsdWRlIGludmFsaWQgYXV0byByZXNwb25zZXMiKSB8IGh0bWwgJV0iIFslIERhdGEuSW5jbHVkZUludmFsaWRDaGVja2VkIHwgaHRtbCAlXS8+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJJbmNsdWRlSW52YWxpZCI+WyUgVHJhbnNsYXRlKCJJbmNsdWRlIGludmFsaWQgYXV0byByZXNwb25zZXMiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluY2x1ZGVJbnZhbGlkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIEF1dG8gUmVzcG9uc2UiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkZpbHRlciIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj48bGFiZWwgZm9yPSJGaWx0ZXJBdXRvUmVzcG9uc2VzIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgQXV0byBSZXNwb25zZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyQXV0b1Jlc3BvbnNlcyIgY2xhc3M9IkZpbHRlckJveCIgcGxhY2Vob2xkZXI9IlslIFRyYW5zbGF0ZSgiSnVzdCBzdGFydCB0eXBpbmcgdG8gZmlsdGVyLi4uIikgfCBodG1sICVdIiBuYW1lPSJGaWx0ZXJBdXRvUmVzcG9uc2VzIiB2YWx1ZT0iIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIGF1dG8gcmVzcG9uc2VzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaWx0ZXIiKSAlXQogICAgPC9kaXY+CgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IkF1dG9SZXNwb25zZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzMzcGMiPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICE9IDEgJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1DaGFuZ2U7SUQ9WyUgRGF0YS5JRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkZpbHRlck1lc3NhZ2UgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij5bJSBUcmFuc2xhdGUoIk5vIG1hdGNoZXMgZm91bmQuIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KCiAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdBZGQnICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgQXV0byBSZXNwb25zZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVkaXQgQXV0byBSZXNwb25zZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVORCAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCB1cmkgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJTdWJqZWN0Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlN1YmplY3QiIGlkPSJTdWJqZWN0IiB2YWx1ZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuU3ViamVjdEludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUmljaFRleHQiPlslIFRyYW5zbGF0ZSgiUmVzcG9uc2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJpY2hUZXh0IiBjbGFzcz0iUmljaFRleHQiIHJvd3M9IjEwIiBjb2xzPSI2MCIgbmFtZT0iUmVzcG9uc2UiPlslIERhdGEuUmVzcG9uc2UgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlR5cGVJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZU9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVHlwZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUeXBlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkFkZHJlc3NJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJBdXRvIHJlc3BvbnNlIGZyb20iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TeXN0ZW1BZGRyZXNzT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBZGRyZXNzSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFkZHJlc3NJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVmFsaWRJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJWYWxpZElERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJWYWxpZElEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUGVybWlzc2lvbiAhPSAncm8nICVdCiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXRBbmRDb250aW51ZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUgYW5kIGZpbmlzaCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgRU8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUmVmZXJlbmNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0YWdzIikgfCBodG1sICVdOjwvcD4KICAgICAgICAgICAgICAgIDxkbD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9TVUJKRUNUWzIwXSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBmaXJzdCAyMCBjaGFyYWN0ZXIgb2YgdGhlIHN1YmplY3QuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9FTUFJTFs1XSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBmaXJzdCA1IGxpbmVzIG9mIHRoZSBlbWFpbC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX1JFQUxOQU1FJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUbyBnZXQgdGhlIG5hbWUgb2YgdGhlIHRpY2tldCdzIGN1c3RvbWVyIHVzZXIgKGlmIGdpdmVuKS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgYXJ0aWNsZSBhdHRyaWJ1dGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9Gcm9tJmd0OywgJmx0O09UT0JPX0NVU1RPTUVSX1RvJmd0OywKICAgICAgICAgICAgICAgICAgICAgICAgJmx0O09UT0JPX0NVU1RPTUVSX0NjJmd0OywgJmx0O09UT0JPX0NVU1RPTUVSX1N1YmplY3QmZ3Q7LCAmbHQ7T1RPQk9fQ1VTVE9NRVJfQm9keSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX0RBVEFfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aGUgY3VycmVudCBjdXN0b21lciB1c2VyIGRhdGEiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19PV05FUl8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgb3duZXIgb3B0aW9ucyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX09XTkVSX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19SRVNQT05TSUJMRV8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgcmVzcG9uc2libGUgb3B0aW9ucyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1JFU1BPTlNJQkxFX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVJSRU5UXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgdXNlciB3aG8gcmVxdWVzdGVkIHRoaXMgYWN0aW9uIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fQ1VSUkVOVF9Vc2VyRmlyc3RuYW1lJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fVElDS0VUXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIHRpY2tldCBkYXRhIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX1RpY2tldE51bWJlciZndDssICZsdDtPVE9CT19USUNLRVRfVGlja2V0SUQmZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fVElDS0VUX1F1ZXVlJmd0OywgJmx0O09UT0JPX1RJQ0tFVF9TdGF0ZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aWNrZXQgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwga2V5IHZhbHVlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfVGVzdEZpZWxkJmd0OywKICAgICAgICAgICAgICAgICAgICAgICAgJmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfVGlja2V0RnJlZVRleHQxJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF8qX1ZhbHVlJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJPcHRpb25zIG9mIHRpY2tldCBkeW5hbWljIGZpZWxkcyBkaXNwbGF5IHZhbHVlcywgdXNlZnVsIGZvciBEcm9wZG93biBhbmQgTXVsdGlzZWxlY3QgZmllbGRzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9UZXN0RmllbGRfVmFsdWUmZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9UaWNrZXRGcmVlVGV4dDFfVmFsdWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DT05GSUdfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ29uZmlnIG9wdGlvbnMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DT05GSUdfSHR0cFR5cGUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICA8L2RsPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJlc3BvbnNlUmVmZXJlbmNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeGFtcGxlIHJlc3BvbnNlIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSI1IiBjb2xzPSI2MCIgaWQ9IlJlc3BvbnNlUmVmZXJlbmNlIj4KVGhhbmtzIGZvciB5b3VyIGVtYWlsLgoKWW91IHdyb3RlOgombHQ7c25pcCZndDsKJmx0O09UT0JPX0NVU1RPTUVSX0VNQUlMWzZdJmd0OwombHQ7L3NuaXAmZ3Q7CgotLQpTdXBlciBTdXBwb3J0IENvbXBhbnkgSW5jLiAtIFdhdGVyZm9yZCBCdXNpbmVzcyBQYXJrCjUyMDEgQmx1ZSBMYWdvb24gRHJpdmUgLSA4dGggRmxvb3IgJmFtcDsgOXRoIEZsb29yIC0gTWlhbWksIDMzMTI2IFVTQQpFbWFpbDogaG90QGZsb3JpZGEuY29tIC0gV2ViOiBodHRwOi8vaG90LmZsb3JpZGEuY29tLwogICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminSignature.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlNpZ25hdHVyZSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ1NpZ25hdHVyZSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBTV0lUQ0ggRGF0YS5BY3Rpb24gJV0KICAgICAgICBbJSBDQVNFICdBZGQnICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IFRyYW5zbGF0ZSgiQWRkIFNpZ25hdHVyZSIpLH0pICVdCiAgICAgICAgWyUgQ0FTRSAnQ2hhbmdlJyAlXQogICAgICAgICAgICBbJSBVU0UgRWRpdFRpdGxlID0gU3RyaW5nKFRyYW5zbGF0ZSgiRWRpdCBTaWduYXR1cmUiKSkgJV0KICAgICAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gRWRpdFRpdGxlLmFwcGVuZCggJzogJywgRGF0YS5OYW1lICkgfSkgJV0KICAgIFslIEVORCAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmNsdWRlSW52YWxpZCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkZpbHRlciBieSB2YWxpZCBzdGF0ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkluY2x1ZGVJbnZhbGlkIiBuYW1lPSJJbmNsdWRlSW52YWxpZCIgdmFsdWU9IjEiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkluY2x1ZGUgaW52YWxpZCBzaWduYXR1cmVzIikgfCBodG1sICVdIiBbJSBEYXRhLkluY2x1ZGVJbnZhbGlkQ2hlY2tlZCB8IGh0bWwgJV0vPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW5jbHVkZUludmFsaWQiPlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIHNpZ25hdHVyZXMiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluY2x1ZGVJbnZhbGlkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1BZGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgU2lnbmF0dXJlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGaWx0ZXIiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyU2lnbmF0dXJlcyI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIFNpZ25hdHVyZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyU2lnbmF0dXJlcyIgY2xhc3M9IkZpbHRlckJveCIgcGxhY2Vob2xkZXI9IlslIFRyYW5zbGF0ZSgiSnVzdCBzdGFydCB0eXBpbmcgdG8gZmlsdGVyLi4uIikgfCBodG1sICVdIiBuYW1lPSJGaWx0ZXJTaWduYXR1cmVzIiB2YWx1ZT0iIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIHNpZ25hdHVyZXMiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlciIpICVdCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IlNpZ25hdHVyZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxICVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249Q2hhbmdlO0lEPVslIERhdGEuSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyMCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRmlsdGVyTWVzc2FnZSBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPlslIFRyYW5zbGF0ZSgiTm8gbWF0Y2hlcyBmb3VuZC4iKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdVcGRhdGUiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdBZGQnICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgU2lnbmF0dXJlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTaWduYXR1cmUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgdXJpICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSUQiIHZhbHVlPSJbJSBEYXRhLklEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRpbnVlQWZ0ZXJTYXZlIiBpZD0iQ29udGludWVBZnRlclNhdmUiIHZhbHVlPSIiLz4KICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJSaWNoVGV4dCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJTaWduYXR1cmUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSMgVGV4dGFyZWFzIGFsd2F5cyBzd2FsbG93IHRoZSBmaXJzdCBuZXdsaW5lIGZyb20gdGhlaXIgZGF0YSwgdGhlcmVmb3JlIHdlIG11c3QgcHJlcGVuZCBvbmUgc2luY2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSB3aGl0ZSBzcGFjZS4gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iUmljaFRleHQiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCIgcm93cz0iMTAiIGNvbHM9IjYwIiBuYW1lPSJUZXh0Ij5bJSAiXG4iIF8gRGF0YS5UZXh0IHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmljaFRleHRTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlZhbGlkSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb21tZW50IiBpZD0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbi1BdXRvUmVwbGllc0FuZFNpZ25hdHVyZXMKICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlBlcm1pc3Npb24gIT0gJ3JvJyAlXQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQojIEVPIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSGludCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0YWdzIikgfCBodG1sICVdOjwvcD4KICAgICAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX09XTkVSXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRpY2tldCBvd25lciBvcHRpb25zIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19PV05FUl9Vc2VyRmlyc3RuYW1lJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fUkVTUE9OU0lCTEVfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGlja2V0IHJlc3BvbnNpYmxlIG9wdGlvbnMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Jmx0O09UT0JPX1JFU1BPTlNJQkxFX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVJSRU5UXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgdXNlciB3aG8gcmVxdWVzdGVkIHRoaXMgYWN0aW9uIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19DVVJSRU5UX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19USUNLRVRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aGUgdGlja2V0IGRhdGEiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9UaWNrZXROdW1iZXI+LCAmbHQ7T1RPQk9fVElDS0VUX1RpY2tldElEJmd0OywgJmx0O09UT0JPX1RJQ0tFVF9RdWV1ZSZndDssICZsdDtPVE9CT19USUNLRVRfU3RhdGUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgY3VzdG9tZXIgdXNlciBkYXRhIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DT05GSUdfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ29uZmlnIG9wdGlvbnMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX0NPTkZJR19IdHRwVHlwZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeGFtcGxlIHNpZ25hdHVyZSIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSI1IiBjb2xzPSI2MCIgbmFtZT0iUmVzcG9uc2UiPgpZb3VyIE9UT0JPLVRlYW0KCiZsdDtPVE9CT19DVVJSRU5UX1VzZXJGaXJzdG5hbWUmZ3Q7ICZsdDtPVE9CT19DVVJSRU5UX1VzZXJMYXN0bmFtZSZndDsKCi0tClN1cGVyIFN1cHBvcnQgQ29tcGFueSBJbmMuIC0gV2F0ZXJmb3JkIEJ1c2luZXNzIFBhcmsKNTIwMSBCbHVlIExhZ29vbiBEcml2ZSAtIDh0aCBGbG9vciAmIDl0aCBGbG9vciAtIE1pYW1pLCAzMzEyNiBVU0EKRW1haWw6IGhvdEBmbG9yaWRhLmNvbSAtIFdlYjogaHR0cDovL2hvdC5mbG9yaWRhLmNvbS8KLS0KUFM6IFlvdXIgZW1haWwgYWRkcmVzcyBpbiBvdXIgZGF0YWJhc2UgaXMgIiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJFbWFpbCZndDsiLgogICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==</File>
        <File Location="Custom/Kernel/System/Queue.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL1N5c3RlbS9RdWV1ZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpRdWV1ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICBxdyhLZXJuZWw6OlN5c3RlbTo6RXZlbnRIYW5kbGVyKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRyYW5zbGF0aW9ucycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6UXVldWUgLSBxdWV1ZSBsaWIKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHF1ZXVlIGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIHF1ZXVlIG9yIG90aGVyIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCkRvbid0IHVzZSB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHksIHVzZSB0aGUgT2JqZWN0TWFuYWdlciBpbnN0ZWFkOgoKICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e1F1ZXVlSUR9ID0gJFBhcmFte1F1ZXVlSUR9IHx8ICcnOwoKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdRdWV1ZSc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKCiAgICAjIGxvYWQgZ2VuZXJhdG9yIHByZWZlcmVuY2VzIG1vZHVsZQogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnUXVldWU6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlOjpQcmVmZXJlbmNlc0RCJzsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJhdG9yTW9kdWxlKSApIHsKICAgICAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fSA9ICRHZW5lcmF0b3JNb2R1bGUtPm5ldygpOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgIGRlZmF1bHQgcXVldWUgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICMgIHRoZXNlIHNldHRpbmdzIGFyZSB1c2VkIGJ5IHRoZSBDTEkgdmVyc2lvbiAgICAgICAgICMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICRTZWxmLT57UXVldWVEZWZhdWx0c30gPSB7CiAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICBVbmxvY2tUaW1lb3V0ICAgICAgID0+IDAsCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEICAgICA9PiAxLAogICAgICAgIFNhbHV0YXRpb25JRCAgICAgICAgPT4gMSwKICAgICAgICBTaWduYXR1cmVJRCAgICAgICAgID0+IDEsCiAgICAgICAgRm9sbG93VXBJRCAgICAgICAgICA9PiAxLAogICAgICAgIEZvbGxvd1VwTG9jayAgICAgICAgPT4gMCwKICAgIH07CgogICAgIyBpbml0IG9mIGV2ZW50IGhhbmRsZXIKICAgICRTZWxmLT5FdmVudEhhbmRsZXJJbml0KAogICAgICAgIENvbmZpZyA9PiAnUXVldWU6OkV2ZW50TW9kdWxlUG9zdCcsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldFN5c3RlbUFkZHJlc3MoKQoKZ2V0IGEgcXVldWUgc3lzdGVtIGVtYWlsIGFkZHJlc3MgYXMgaGFzaCAoRW1haWwsIFJlYWxOYW1lKQoKICAgIG15ICVBZGRyZXNzID0gJFF1ZXVlT2JqZWN0LT5HZXRTeXN0ZW1BZGRyZXNzKAogICAgICAgIFF1ZXVlSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBHZXRTeXN0ZW1BZGRyZXNzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBteSAlQWRkcmVzczsKICAgIG15ICRRdWV1ZUlEID0gJFBhcmFte1F1ZXVlSUR9IHx8ICRTZWxmLT57UXVldWVJRH07CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1Qgc2EudmFsdWUwLCBzYS52YWx1ZTEgRlJPTSBzeXN0ZW1fYWRkcmVzcyBzYSwgcXVldWUgc3EgJwogICAgICAgICAgICAuICdXSEVSRSBzcS5pZCA9ID8gQU5EIHNhLmlkID0gc3Euc3lzdGVtX2FkZHJlc3NfaWQnLAogICAgICAgIEJpbmQgID0+IFsgXCRRdWV1ZUlEIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFkZHJlc3N7RW1haWx9ICAgID0gJFJvd1swXTsKICAgICAgICAkQWRkcmVzc3tSZWFsTmFtZX0gPSAkUm93WzFdOwogICAgfQoKICAgICMgcHJlcGFyZSByZWFsbmFtZSBxdW90ZQogICAgaWYgKCAkQWRkcmVzc3tSZWFsTmFtZX0gPX4gLygsfEB8XCh8XCl8OikvICYmICRBZGRyZXNze1JlYWxOYW1lfSAhfiAvXigifCcpLyApIHsKICAgICAgICAkQWRkcmVzc3tSZWFsTmFtZX0gPX4gcy8iL1wiL2c7CiAgICAgICAgJEFkZHJlc3N7UmVhbE5hbWV9ID0gJyInIC4gJEFkZHJlc3N7UmVhbE5hbWV9IC4gJyInOwogICAgfQoKICAgIHJldHVybiAlQWRkcmVzczsKfQoKPWhlYWQyIEdldFNpZ25hdHVyZSgpCgpnZXQgYSBxdWV1ZSBzaWduYXR1cmUKCiAgICBteSAkU2lnbmF0dXJlID0gJFF1ZXVlT2JqZWN0LT5HZXRTaWduYXR1cmUoUXVldWVJRCA9PiAxMjMpOwoKPWN1dAoKc3ViIEdldFNpZ25hdHVyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXVlSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIHRleHQgRlJPTSBzaWduYXR1cmUgc2ksIHF1ZXVlIHNxICcKICAgICAgICAgICAgLiAnIFdIRVJFIHNxLmlkID0gPyBBTkQgc3Euc2lnbmF0dXJlX2lkID0gc2kuaWQnLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtRdWV1ZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFN0cmluZyA9ICcnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFN0cmluZyA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBRdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoKQoKdG8gYWRkIGEgdGVtcGxhdGUgdG8gYSBxdWV1ZQoKICAgIG15ICRTdWNjZXNzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgUXVldWVJRCAgICAgICAgICAgID0+IDEyMywKICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIEFjdGl2ZSAgICAgICAgICAgICA9PiAxLCAgICAgICAgIyB0byBzZXQvY29uZmlybSAoMSkgb3IgcmVtb3ZlICgwKSB0aGUgcmVsYXRpb24KICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVldWVJRCBTdGFuZGFyZFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZGVsZXRlIGV4aXN0aW5nIHJlbGF0aW9uCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBxdWV1ZV9zdGFuZGFyZF90ZW1wbGF0ZQogICAgICAgICAgICBXSEVSRSBxdWV1ZV9pZCA9ID8KICAgICAgICAgICAgQU5EIHN0YW5kYXJkX3RlbXBsYXRlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17UXVldWVJRH0sIFwkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSBdLAogICAgKTsKCiAgICAjIHJldHVybiBpZiByZWxhdGlvbiBpcyBub3QgYWN0aXZlCiAgICBpZiAoICEkUGFyYW17QWN0aXZlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGluc2VydCBuZXcgcmVsYXRpb24KICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBJTlNFUlQgSU5UTyBxdWV1ZV9zdGFuZGFyZF90ZW1wbGF0ZSAocXVldWVfaWQsIHN0YW5kYXJkX3RlbXBsYXRlX2lkLCBjcmVhdGVfdGltZSwKICAgICAgICAgICAgICAgIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkKICAgICAgICAgICAgVkFMVUVTICg/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtRdWV1ZUlEfSwgXCRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CiAgICByZXR1cm4gJFN1Y2Nlc3M7Cn0KCj1oZWFkMiBRdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCkKCmdldCBzdGFuZGFyZCByZXNwb25zZXMgb2YgYSBxdWV1ZQoKICAgIG15ICVUZW1wbGF0ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIFF1ZXVlSUQgPT4gMTIzICk7CgpSZXR1cm5zOgogICAgJVRlbXBsYXRlcyA9ICgKICAgICAgICAxID0+ICdTb21lIE5hbWUnLAogICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICApOwoKICAgIG15ICVSZXNwb25zZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgUXVldWVJRCAgICAgICA9PiAxMjMsCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKClJldHVybnM6CiAgICAlUmVzcG9uc2VzID0gKAogICAgICAgIEFuc3dlciA9PiB7CiAgICAgICAgICAgIDEgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgfSwKICAgICAgICAjIC4uLgogICAgKTsKCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gMTIzICk7CgpSZXR1cm5zOgogICAgJVF1ZXVlcyA9ICgKICAgICAgICAxID0+ICdTb21lIE5hbWUnLAogICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1F1ZXVlSUR9ICYmICEkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCBubyBTdGFuZGFyZFRlbXBsYXRlSUQgb3IgUXVldWVJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKICAgIG15ICREQk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIG15ICRUZW1wbGF0ZVR5cGVzID0gJFBhcmFte1RlbXBsYXRlVHlwZXN9IHx8ICcwJzsKCiAgICBteSAkQ2FjaGVLZXk7CgogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgdGhpcyByZXN1bHQgaXMgcHJlc2VudCAoaW4gY2FjaGUpCiAgICAgICAgJENhY2hlS2V5ID0gIlN0YW5kYXJkVGVtcGxhdGVzOjokUGFyYW17UXVldWVJRH06OiRUZW1wbGF0ZVR5cGVzIjsKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICAgICAjIGdldCBzdGQuIHRlbXBsYXRlcwogICAgICAgIG15ICRTUUwgPSAiU0VMRUNUIHN0LmlkLCBzdC5uYW1lLCBzdC50ZW1wbGF0ZV90eXBlICIKICAgICAgICAgICAgLiAiIEZST00gc3RhbmRhcmRfdGVtcGxhdGUgc3QsIHF1ZXVlX3N0YW5kYXJkX3RlbXBsYXRlIHFzdCBXSEVSRSAiCiAgICAgICAgICAgIC4gIiBxc3QucXVldWVfaWQgSU4gKCIKICAgICAgICAgICAgLiAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17UXVldWVJRH0sICdJbnRlZ2VyJyApCiAgICAgICAgICAgIC4gIikgQU5EICIKICAgICAgICAgICAgLiAiIHFzdC5zdGFuZGFyZF90ZW1wbGF0ZV9pZCA9IHN0LmlkIEFORCAiCiAgICAgICAgICAgIC4gIiBzdC52YWxpZF9pZCBJTiAoICR7XChqb2luICcsICcsICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKSl9ICkiCiAgICAgICAgICAgIC4gIiBPUkRFUiBCWSBzdC5uYW1lIjsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoIFNRTCA9PiAkU1FMICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlczsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgIGlmICggJFBhcmFte1RlbXBsYXRlVHlwZXN9ICkgewogICAgICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVzeyAkUm93WzJdIH0tPnsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTdGFuZGFyZFRlbXBsYXRlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBzdGQgdGVtcGxhdGVzIChpbiBjYWNoZSkKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlU3RhbmRhcmRUZW1wbGF0ZXMsCgogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVTdGFuZGFyZFRlbXBsYXRlczsKICAgIH0KCiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBpZiB0aGlzIHJlc3VsdCBpcyBwcmVzZW50IChpbiBjYWNoZSkKICAgICAgICAkQ2FjaGVLZXkgPSAiUXVldWVzOjokUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSI7CiAgICAgICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICV7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdIQVNIJzsKCiAgICAgICAgIyBnZXQgcXVldWVzCiAgICAgICAgbXkgJFNRTCA9ICJTRUxFQ1QgcS5pZCwgcS5uYW1lICIKICAgICAgICAgICAgLiAiIEZST00gcXVldWUgcSwgcXVldWVfc3RhbmRhcmRfdGVtcGxhdGUgcXN0IFdIRVJFICIKICAgICAgICAgICAgLiAiIHFzdC5zdGFuZGFyZF90ZW1wbGF0ZV9pZCBJTiAoIgogICAgICAgICAgICAuICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9LCAnSW50ZWdlcicgKQogICAgICAgICAgICAuICIpIEFORCAiCiAgICAgICAgICAgIC4gIiBxc3QucXVldWVfaWQgPSBxLmlkIEFORCAiCiAgICAgICAgICAgIC4gIiBxLnZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJFZhbGlkT2JqZWN0LT5WYWxpZElEc0dldCgpKX0gKSIKICAgICAgICAgICAgLiAiIE9SREVSIEJZIHEubmFtZSI7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKCBTUUwgPT4gJFNRTCApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSAlUXVldWVzOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUXVldWVzeyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBxdWV1ZXMgKGluIGNhY2hlKQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVRdWV1ZXMsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICVRdWV1ZXM7CiAgICB9Cn0KCj1oZWFkMiBHZXRBbGxRdWV1ZXMoKQoKZ2V0IGFsbCB2YWxpZCBzeXN0ZW0gcXVldWVzCgogICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+R2V0QWxsUXVldWVzKCk7CgpnZXQgYWxsIHN5c3RlbSBxdWV1ZXMgb2YgYSB1c2VyIHdpdGggcGVybWlzc2lvbiB0eXBlIChlLiBnLiBDPHJvPiwgQzxtb3ZlX2ludG8+LCBDPHJ3PiwgLi4uKQoKICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPkdldEFsbFF1ZXVlcyggVXNlcklEID0+IDEyMywgVHlwZSA9PiAncm8nICk7Cgo9Y3V0CgpzdWIgR2V0QWxsUXVldWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFR5cGUgPSAkUGFyYW17VHlwZX0gfHwgJ3JvJzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CiAgICBteSAkREJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZldGNoIGFsbCBxdWV1ZXMKICAgIG15ICRDYWNoZUtleTsKICAgIGlmICggJFBhcmFte1VzZXJJRH0gKSB7CgogICAgICAgICMgZ2V0IGdyb3VwIGxpc3QKICAgICAgICBteSAlR3JvdXBMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25Vc2VyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAkVHlwZSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISVHcm91cExpc3Q7CgogICAgICAgIG15ICRHcm91cFN0cmluZyA9IGpvaW4gJywgJywgc29ydCBrZXlzICVHcm91cExpc3Q7CiAgICAgICAgJENhY2hlS2V5ID0gIkdldEFsbFF1ZXVlczo6VXNlcklEOjoke1R5cGV9Ojoke0dyb3VwU3RyaW5nfTo6JFBhcmFte1VzZXJJRH0iOwoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICV7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHF1ZXVlIFdIRVJFICIKICAgICAgICAgICAgICAgIC4gIiBncm91cF9pZCBJTiAoICRHcm91cFN0cmluZyApIEFORCAiCiAgICAgICAgICAgICAgICAuICIgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkpfSApIiwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewoKICAgICAgICAjIGdldCBncm91cCBpZHMKICAgICAgICBteSBAR3JvdXBJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgICAgIFJlc3VsdCA9PiAnSUQnLAogICAgICAgICk7CgogICAgICAgIHJldHVybiBpZiAhQEdyb3VwSURzOwoKICAgICAgICBteSAkR3JvdXBTdHJpbmcgPSBqb2luICcsICcsIHNvcnQgQEdyb3VwSURzOwogICAgICAgICRDYWNoZUtleSA9ICJHZXRBbGxRdWV1ZXM6OkN1c3RvbWVyVXNlcklEOjoke1R5cGV9Ojoke0dyb3VwU3RyaW5nfTo6JFBhcmFte0N1c3RvbWVyVXNlcklEfSI7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBuYW1lIEZST00gcXVldWUgV0hFUkUgIgogICAgICAgICAgICAgICAgLiAiIGdyb3VwX2lkIElOICggJEdyb3VwU3RyaW5nICkgQU5EICIKICAgICAgICAgICAgICAgIC4gIiB2YWxpZF9pZCBJTiAoICR7XChqb2luICcsICcsICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKSl9ICkiLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgJENhY2hlS2V5ID0gJ0dldEFsbFF1ZXVlcyc7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBuYW1lIEZST00gcXVldWUgV0hFUkUgdmFsaWRfaWQgSU4gIgogICAgICAgICAgICAgICAgLiAiKCAke1woam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkpfSApIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICVNb3ZlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE1vdmVRdWV1ZXN7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJU1vdmVRdWV1ZXMsCiAgICApOwoKICAgIHJldHVybiAlTW92ZVF1ZXVlczsKfQoKPWhlYWQyIEdldEFsbEN1c3RvbVF1ZXVlcygpCgpnZXQgYWxsIGN1c3RvbSBxdWV1ZXMgb2Ygb25lIHVzZXIKCiAgICBteSBAUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxDdXN0b21RdWV1ZXMoIFVzZXJJRCA9PiAxMjMgKTsKCj1jdXQKCnN1YiBHZXRBbGxDdXN0b21RdWV1ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldEFsbEN1c3RvbVF1ZXVlczo6JyAuICRQYXJhbXtVc2VySUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgc2VhcmNoIGFsbCBjdXN0b20gcXVldWVzCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgcXVldWVfaWQgRlJPTSBwZXJzb25hbF9xdWV1ZXMgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAUXVldWVJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBRdWV1ZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAUXVldWVJRHMsCiAgICApOwoKICAgIHJldHVybiBAUXVldWVJRHM7Cn0KCj1oZWFkMiBRdWV1ZUxvb2t1cCgpCgpnZXQgaWQgb3IgbmFtZSBmb3IgcXVldWUKCiAgICBteSAkUXVldWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZUlEID0+ICRRdWV1ZUlEICk7CgogICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUXVldWUgKTsKCj1jdXQKCnN1YiBRdWV1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVldWV9ICYmICEkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gUXVldWUgb3IgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgKGFscmVhZHkgY2FjaGVkKSBxdWV1ZSBkYXRhCiAgICBteSAlUXVldWVMaXN0ID0gJFNlbGYtPlF1ZXVlTGlzdCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkS2V5OwogICAgbXkgJFZhbHVlOwogICAgbXkgJFJldHVybkRhdGE7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2V5ICAgICAgICA9ICdRdWV1ZUlEJzsKICAgICAgICAkVmFsdWUgICAgICA9ICRQYXJhbXtRdWV1ZUlEfTsKICAgICAgICAkUmV0dXJuRGF0YSA9ICRRdWV1ZUxpc3R7ICRQYXJhbXtRdWV1ZUlEfSB9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEtleSAgID0gJ1F1ZXVlJzsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17UXVldWV9OwogICAgICAgIG15ICVRdWV1ZUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAlUXVldWVMaXN0OwogICAgICAgICRSZXR1cm5EYXRhID0gJFF1ZXVlTGlzdFJldmVyc2V7ICRQYXJhbXtRdWV1ZX0gfTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGRhdGEgZXhpc3RzCiAgICBpZiAoICEkUmV0dXJuRGF0YSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZvdW5kIG5vICRLZXkgZm9yICRWYWx1ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkUmV0dXJuRGF0YTsKfQoKPWhlYWQyIEdldEZvbGxvd1VwT3B0aW9uKCkKCmdldCBGb2xsb3dVcE9wdGlvbiBmb3IgdGhlIGdpdmVuIFF1ZXVlSUQKCiAgICBteSAkRm9sbG93VXBPcHRpb24gPSAkUXVldWVPYmplY3QtPkdldEZvbGxvd1VwT3B0aW9uKCBRdWV1ZUlEID0+ICRRdWV1ZUlEICk7CgpyZXR1cm5zIGFueSBvZiAncG9zc2libGUnLCAncmVqZWN0JywgJ25ldyB0aWNrZXQnLgoKPWN1dAoKc3ViIEdldEZvbGxvd1VwT3B0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZldGNoIHF1ZXVlcyBkYXRhCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBzZi5uYW1lIEZST00gZm9sbG93X3VwX3Bvc3NpYmxlIHNmLCBxdWV1ZSBzcSAnCiAgICAgICAgICAgIC4gJyBXSEVSRSBzcS5mb2xsb3dfdXBfaWQgPSBzZi5pZCBBTkQgc3EuaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17UXVldWVJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkUmV0dXJuID0gJyc7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUmV0dXJuID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFJldHVybjsKfQoKPWhlYWQyIEdldEZvbGxvd1VwT3B0aW9uTGlzdCgpCgpnZXQgRm9sbG93LVVwIE9wdGlvbiBsaXN0CgogICAgbXkgJUZvbGxvd1VwT3B0aW9uTGlzdCA9ICRRdWV1ZU9iamVjdC0+R2V0Rm9sbG93VXBPcHRpb25MaXN0KAogICAgICAgIFZhbGlkID0+IDAsICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICk7CgpSZXR1cm46CgogICAgJUZvbGxvd1VwT3B0aW9uTGlzdCA9ICgKICAgICAgICAgICAgICAnMScgPT4gJ3Bvc3NpYmxlJywKICAgICAgICAgICAgICAnMycgPT4gJ25ldyB0aWNrZXQnLAogICAgICAgICAgICAgICcyJyA9PiAncmVqZWN0JwogICAgICAgICAgICApCgo9Y3V0CgpzdWIgR2V0Rm9sbG93VXBPcHRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZQogICAgbXkgJFZhbGlkID0gJFBhcmFte1ZhbGlkfSA/IDEgOiAwOwoKICAgICMgY3JlYXRlIHRoZSB2YWxpZCBsaXN0CiAgICBteSAkVmFsaWRJRHMgPSBqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICMgYnVpbGQgU1FMCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGZvbGxvd191cF9wb3NzaWJsZSc7CgogICAgIyBhZGQgV0hFUkUgc3RhdGVtZW50CiAgICBpZiAoJFZhbGlkKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2lkIElOICgnIC4gJFZhbGlkSURzIC4gJyknOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgZGF0YSBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRm9sbG93VXBPcHRpb25MaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEZvbGxvd1VwT3B0aW9uTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJUZvbGxvd1VwT3B0aW9uTGlzdDsKfQoKPWhlYWQyIEdldEZvbGxvd1VwTG9ja09wdGlvbigpCgpnZXQgRm9sbG93VXBMb2NrT3B0aW9uIGZvciB0aGUgZ2l2ZW4gUXVldWVJRAoKICAgIG15ICRGb2xsb3dVcExvY2tPcHRpb24gPSAkUXVldWVPYmplY3QtPkdldEZvbGxvd1VwTG9ja09wdGlvbiggUXVldWVJRCA9PiAkUXVldWVJRCApOwoKcmV0dXJucyAnMScgaWYgdGlja2V0IHNob3VsZCBiZSBsb2NrZWQgYWZ0ZXIgYSBmb2xsb3cgdXAsICcwJyBpZiBub3QuCgo9Y3V0CgpzdWIgR2V0Rm9sbG93VXBMb2NrT3B0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgKGFscmVhZHkgY2FjaGVkKSBxdWV1ZSBkYXRhCiAgICBteSAlUXVldWUgPSAkU2VsZi0+UXVldWVHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISVRdWV1ZTsKICAgIHJldHVybiAkUXVldWV7Rm9sbG93VXBMb2NrfTsKfQoKPWhlYWQyIEdldFF1ZXVlR3JvdXBJRCgpCgpnZXQgR3JvdXBJRCBkZWZpbmVkIGZvciB0aGUgZ2l2ZW4gUXVldWVJRC4KCiAgICBteSAkR3JvdXBJRCA9ICRRdWV1ZU9iamVjdC0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRRdWV1ZUlEICk7Cgo9Y3V0CgpzdWIgR2V0UXVldWVHcm91cElEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgKGFscmVhZHkgY2FjaGVkKSBxdWV1ZSBkYXRhCiAgICBteSAlUXVldWUgPSAkU2VsZi0+UXVldWVHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISVRdWV1ZTsKICAgIHJldHVybiAkUXVldWV7R3JvdXBJRH07Cn0KCj1oZWFkMiBRdWV1ZUFkZCgpCgphZGQgcXVldWUgd2l0aCBhdHRyaWJ1dGVzCgogICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NvbWU6OlF1ZXVlJywKICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgR3JvdXBJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMTIwLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgZmlyc3QgcmVzcG9uc2UgZXNjYWxhdGlvbiBpcyA2MCUgcmVhY2hlZCkKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDgwLCAgICAgICAgICAjIChvcHRpb25hbCwgbm90aWZ5IGFnZW50IGlmIHVwZGF0ZSBlc2NhbGF0aW9uIGlzIDgwJSByZWFjaGVkKQogICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNTgwLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsICAgICAgICAgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZCkKICAgICAgICBVbmxvY2tUaW1lb3V0ICAgICAgID0+IDQ4MCwgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBGb2xsb3dVcElEICAgICAgICAgID0+IDMsICAgICAgICAgICAjIHBvc3NpYmxlICgxKSwgcmVqZWN0ICgyKSBvciBuZXcgdGlja2V0ICgzKSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKICAgICAgICBGb2xsb3dVcExvY2sgICAgICAgID0+IDAsICAgICAgICAgICAjIHllcyAoMSkgb3Igbm8gKDApIChvcHRpb25hbCwgZGVmYXVsdCAwKQogICAgICAgIERlZmF1bHRTaWduS2V5ICAgICAgPT4gJ2tleSBuYW1lJywgICMgKG9wdGlvbmFsKQogICAgICAgIFN5c3RlbUFkZHJlc3NJRCAgICAgPT4gMSwKICAgICAgICBTYWx1dGF0aW9uSUQgICAgICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgZnJvbSB3ZWIgYW5kIG5vdCBmcm9tIGNvbW1hbmQgbGluZQogICAgaWYgKCAhJFBhcmFte05vRGVmYXVsdFZhbHVlc30gKSB7CiAgICAgICAgZm9yICgKICAgICAgICAgICAgcXcoVW5sb2NrVGltZW91dCBGaXJzdFJlc3BvbnNlVGltZSBGaXJzdFJlc3BvbnNlTm90aWZ5IFVwZGF0ZVRpbWUgVXBkYXRlTm90aWZ5IFNvbHV0aW9uVGltZSBTb2x1dGlvbk5vdGlmeQogICAgICAgICAgICBGb2xsb3dVcExvY2sgU3lzdGVtQWRkcmVzc0lEIFNhbHV0YXRpb25JRCBTaWduYXR1cmVJRAogICAgICAgICAgICBGb2xsb3dVcElEIEZvbGxvd1VwTG9jayBEZWZhdWx0U2lnbktleSBDYWxlbmRhcikKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgSSBhZGRlZCBkZWZhdWx0IHZhbHVlcyBpbiB0aGUgTG9hZCBSb3V0aW5lCiAgICAgICAgICAgIGlmICggISRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntRdWV1ZURlZmF1bHRzfS0+eyRffSB8fCAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAocXcoTmFtZSBHcm91cElEIFN5c3RlbUFkZHJlc3NJRCBTYWx1dGF0aW9uSUQgU2lnbmF0dXJlSUQgVmFsaWRJRCBVc2VySUQgRm9sbG93VXBJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIHF1ZXVlIG5hbWUKICAgICRQYXJhbXtOYW1lfSA9fiBzLyhcbnxccikvL2c7CiAgICAkUGFyYW17TmFtZX0gPX4gcy9ccyQvL2c7CgogICAgIyBjaGVjayBxdWV1ZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiAvOjokL2kgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIFF1ZXVlIG5hbWUgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGEgcXVldWUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICggJFNlbGYtPk5hbWVFeGlzdHNDaGVjayggTmFtZSA9PiAkUGFyYW17TmFtZX0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkEgcXVldWUgd2l0aCB0aGUgbmFtZSAnJFBhcmFte05hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICREQk9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBxdWV1ZSAobmFtZSwgZ3JvdXBfaWQsIHVubG9ja190aW1lb3V0LCBzeXN0ZW1fYWRkcmVzc19pZCwgJwogICAgICAgICAgICAuICcgY2FsZW5kYXJfbmFtZSwgZGVmYXVsdF9zaWduX2tleSwgc2FsdXRhdGlvbl9pZCwgc2lnbmF0dXJlX2lkLCAnCiAgICAgICAgICAgIC4gJyBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksIHVwZGF0ZV90aW1lLCAnCiAgICAgICAgICAgIC4gJyB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksIGZvbGxvd191cF9pZCwgJwogICAgICAgICAgICAuICcgZm9sbG93X3VwX2xvY2ssIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgJwogICAgICAgICAgICAuICcgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgLiAnICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCAnCiAgICAgICAgICAgIC4gJyA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgIFwkUGFyYW17R3JvdXBJRH0sICAgICAgICAgICAgIFwkUGFyYW17VW5sb2NrVGltZW91dH0sIFwkUGFyYW17U3lzdGVtQWRkcmVzc0lEfSwKICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgICAgIFwkUGFyYW17RGVmYXVsdFNpZ25LZXl9LCAgICAgIFwkUGFyYW17U2FsdXRhdGlvbklEfSwgIFwkUGFyYW17U2lnbmF0dXJlSUR9LAogICAgICAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LCAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte0ZvbGxvd1VwSUR9LCAgICAgICAgXCRQYXJhbXtGb2xsb3dVcExvY2t9LCAgICAgICAgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRQYXJhbXtDb21tZW50fSwgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgICAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBuZXcgaWQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBxdWV1ZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUXVldWVJRCA9ICcnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZTJRdWV1ZUJ5Q3JlYXRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1N0YW5kYXJkVGVtcGxhdGUyUXVldWVCeUNyZWF0aW5nJyk7CgogICAgIyBhZGQgZGVmYXVsdCByZXNwb25zZXMgKGlmIG5lZWRlZCksIGFkZCByZXNwb25zZSBieSBuYW1lCiAgICBpZiAoCiAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGUyUXVldWVCeUNyZWF0aW5nCiAgICAgICAgJiYgcmVmICRTdGFuZGFyZFRlbXBsYXRlMlF1ZXVlQnlDcmVhdGluZyBlcSAnQVJSQVknCiAgICAgICAgJiYgQHskU3RhbmRhcmRUZW1wbGF0ZTJRdWV1ZUJ5Q3JlYXRpbmd9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGdldCBzdGFuZGFyZCB0ZW1wbGF0ZSBvYmplY3QKICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CgogICAgICAgIFNUOgogICAgICAgIGZvciBteSAkU1QgKCBAeyRTdGFuZGFyZFRlbXBsYXRlMlF1ZXVlQnlDcmVhdGluZ30gKSB7CgogICAgICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlID0+ICRTVCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgU1QgaWYgISRTdGFuZGFyZFRlbXBsYXRlSUQ7CgogICAgICAgICAgICAkU2VsZi0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRTdGFuZGFyZFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc3RhbmRhcmQgdGVtcGxhdGUgaWQKICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlSUQyUXVldWVCeUNyZWF0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCcgU3RhbmRhcmRUZW1wbGF0ZTJRdWV1ZUJ5Q3JlYXRpbmcnKTsKCiAgICAjIGdldCBxdWV1ZSBkYXRhIHdpdGggdXBkYXRlZCBuYW1lIGZvciBRdWV1ZUNyZWF0ZSBldmVudAogICAgbXkgJVF1ZXVlID0gJFNlbGYtPlF1ZXVlR2V0KCBOYW1lID0+ICRQYXJhbXtOYW1lfSApOwoKICAgICMgdHJpZ2dlciBldmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnUXVldWVDcmVhdGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgUXVldWUgPT4gXCVRdWV1ZSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJVF1ZXVlcyA9ICRTZWxmLT5RdWV1ZUxpc3QoKTsKCiAgICAjIGdlbmVyYXRlIGNoYWluZWQgdHJhbnNsYXRpb25zIGF1dG9tYXRpY2FsbHkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUcmFuc2xhdGlvbnMnKS0+VHJhbnNsYXRlUGFyZW50Q2hpbGRFbGVtZW50cygKICAgICAgICBTdHJpbmdzID0+IFsgdmFsdWVzICVRdWV1ZXMgXSwKICAgICk7CgogICAgcmV0dXJuICRRdWV1ZUlEIGlmICEkU3RhbmRhcmRUZW1wbGF0ZUlEMlF1ZXVlQnlDcmVhdGluZzsKICAgIHJldHVybiAkUXVldWVJRCBpZiByZWYgJFN0YW5kYXJkVGVtcGxhdGVJRDJRdWV1ZUJ5Q3JlYXRpbmcgbmUgJ0FSUkFZJzsKICAgIHJldHVybiAkUXVldWVJRCBpZiAhQHskU3RhbmRhcmRUZW1wbGF0ZUlEMlF1ZXVlQnlDcmVhdGluZ307CgogICAgIyBhZGQgdGVtcGxhdGUgYnkgaWQKICAgIGZvciBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEICggQHskU3RhbmRhcmRUZW1wbGF0ZUlEMlF1ZXVlQnlDcmVhdGluZ30gKSB7CgogICAgICAgICRTZWxmLT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRTdGFuZGFyZFRlbXBsYXRlSUQsCiAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFF1ZXVlSUQ7Cn0KCj1oZWFkMiBRdWV1ZUdldCgpCgpnZXQgcXVldWUgYXR0cmlidXRlcwoKICAgIG15ICVRdWV1ZSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoCiAgICAgICAgSUQgICAgPT4gMTIzLAogICAgKTsKCiAgICBteSAlUXVldWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KAogICAgICAgIE5hbWUgID0+ICdTb21lOjpRdWV1ZScsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSUQgb3IgTmFtZSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBydW50aW1lIGNhY2hlCiAgICBteSAkQ2FjaGVLZXk7CiAgICBteSAkS2V5OwogICAgbXkgJFZhbHVlOwogICAgaWYgKCAkUGFyYW17SUR9ICkgewogICAgICAgICRDYWNoZUtleSA9ICdRdWV1ZUdldElEOjonIC4gJFBhcmFte0lEfTsKICAgICAgICAkS2V5ICAgICAgPSAnSUQnOwogICAgICAgICRWYWx1ZSAgICA9ICRQYXJhbXtJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQ2FjaGVLZXkgPSAnUXVldWVHZXROYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgICRLZXkgICAgICA9ICdOYW1lJzsKICAgICAgICAkVmFsdWUgICAgPSAkUGFyYW17TmFtZX07CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIHNxbAogICAgbXkgQEJpbmQ7CiAgICBteSAkU1FMID0gJ1NFTEVDVCBxLm5hbWUsIHEuZ3JvdXBfaWQsIHEudW5sb2NrX3RpbWVvdXQsICcKICAgICAgICAuICdxLnN5c3RlbV9hZGRyZXNzX2lkLCBxLnNhbHV0YXRpb25faWQsIHEuc2lnbmF0dXJlX2lkLCBxLmNvbW1lbnRzLCBxLnZhbGlkX2lkLCAnCiAgICAgICAgLiAncS5maXJzdF9yZXNwb25zZV90aW1lLCBxLmZpcnN0X3Jlc3BvbnNlX25vdGlmeSwgJwogICAgICAgIC4gJ3EudXBkYXRlX3RpbWUsIHEudXBkYXRlX25vdGlmeSwgcS5zb2x1dGlvbl90aW1lLCBxLnNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgIC4gJ3EuZm9sbG93X3VwX2lkLCBxLmZvbGxvd191cF9sb2NrLCBzYS52YWx1ZTAsIHNhLnZhbHVlMSwgcS5pZCwgJwogICAgICAgIC4gJ3EuZGVmYXVsdF9zaWduX2tleSwgcS5jYWxlbmRhcl9uYW1lLCBxLmNyZWF0ZV90aW1lLCBxLmNoYW5nZV90aW1lIEZST00gcXVldWUgcSwgJwogICAgICAgIC4gJ3N5c3RlbV9hZGRyZXNzIHNhIFdIRVJFIHEuc3lzdGVtX2FkZHJlc3NfaWQgPSBzYS5pZCBBTkQgJzsKCiAgICBpZiAoICRQYXJhbXtJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAncS5pZCA9ID8nOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17SUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNRTCAuPSAncS5uYW1lID0gPyc7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXtOYW1lfTsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBCaW5kLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBEYXRhID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICAgPT4gJERhdGFbMThdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICREYXRhWzBdLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgICAgID0+ICREYXRhWzFdLAogICAgICAgICAgICBVbmxvY2tUaW1lb3V0ICAgICAgID0+ICREYXRhWzJdLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+ICREYXRhWzhdLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+ICREYXRhWzldLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+ICREYXRhWzEwXSwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAkRGF0YVsxMV0sCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gJERhdGFbMTJdLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+ICREYXRhWzEzXSwKICAgICAgICAgICAgRm9sbG93VXBJRCAgICAgICAgICA9PiAkRGF0YVsxNF0sCiAgICAgICAgICAgIEZvbGxvd1VwTG9jayAgICAgICAgPT4gJERhdGFbMTVdLAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgICAgID0+ICREYXRhWzNdLAogICAgICAgICAgICBTYWx1dGF0aW9uSUQgICAgICAgID0+ICREYXRhWzRdLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgICAgID0+ICREYXRhWzVdLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICREYXRhWzZdLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+ICREYXRhWzddLAogICAgICAgICAgICBFbWFpbCAgICAgICAgICAgICAgID0+ICREYXRhWzE2XSwKICAgICAgICAgICAgUmVhbE5hbWUgICAgICAgICAgICA9PiAkRGF0YVsxN10sCiAgICAgICAgICAgIERlZmF1bHRTaWduS2V5ICAgICAgPT4gJERhdGFbMTldLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICREYXRhWzIwXSB8fCAnJywKICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAkRGF0YVsyMV0sCiAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJERhdGFbMjJdLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiBkYXRhIGV4aXN0cwogICAgaWYgKCAhJURhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGb3VuZCBubyAkS2V5IGZvciAkVmFsdWUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBxdWV1ZSBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlF1ZXVlUHJlZmVyZW5jZXNHZXQoIFF1ZXVlSUQgPT4gJERhdGF7UXVldWVJRH0gKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlRGF0YSA9ICggJURhdGEsICVQcmVmZXJlbmNlcyApOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVEYXRhLAogICAgKTsKCiAgICByZXR1cm4gJURhdGE7Cn0KCj1oZWFkMiBRdWV1ZVVwZGF0ZSgpCgp1cGRhdGUgcXVldWUgYXR0cmlidXRlcwoKICAgIG15ICRTdWNjZXNzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVVwZGF0ZSgKICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdTb21lOjpRdWV1ZScsCiAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgIEdyb3VwSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywgIyAob3B0aW9uYWwpIGRlZmF1bHQgJycKICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEyMCwgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA2MCwgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgZmlyc3QgcmVzcG9uc2UgZXNjYWxhdGlvbiBpcyA2MCUgcmVhY2hlZCkKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICMgKG9wdGlvbmFsLCBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQpCiAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1ODAsICMgKG9wdGlvbmFsKQogICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsICAjIChvcHRpb25hbCwgbm90aWZ5IGFnZW50IGlmIHNvbHV0aW9uIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQpCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEICAgICA9PiAxLAogICAgICAgIFNhbHV0YXRpb25JRCAgICAgICAgPT4gMSwKICAgICAgICBTaWduYXR1cmVJRCAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgRm9sbG93VXBJRCAgICAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1NvbWUgQ29tbWVudDInLAogICAgICAgIERlZmF1bHRTaWduS2V5ICAgICAgPT4gJycKICAgICAgICBVbmxvY2tUaW1lT3V0ICAgICAgID0+ICcnCiAgICAgICAgRm9sbG93VXBMb2NrICAgICAgICA9PiAxLAogICAgICAgIFBhcmVudFF1ZXVlSUQgICAgICAgPT4gJycsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAoCiAgICAgICAgcXcoUXVldWVJRCBOYW1lIFZhbGlkSUQgR3JvdXBJRCBTeXN0ZW1BZGRyZXNzSUQgU2FsdXRhdGlvbklEIFNpZ25hdHVyZUlEIFVzZXJJRCBGb2xsb3dVcElEKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBGb2xsb3dVcExvY2sgMCB8IDEKICAgICRQYXJhbXtGb2xsb3dVcExvY2t9ID0gJFBhcmFte0ZvbGxvd1VwTG9ja30gfHwgMDsKCiAgICAjIERlZmF1bHRTaWduS2V5ICAgJycgfHwgJ3N0cmluZycKICAgICRQYXJhbXtEZWZhdWx0U2lnbktleX0gPSAkUGFyYW17RGVmYXVsdFNpZ25LZXl9IHx8ICcnOwoKICAgICMgQ2FsZW5kYXIgc3RyaW5nICAnJywgJzEnLCAnMicsICczJywgJzQnLCAnNScgIGRlZmF1bHQgJycKICAgICRQYXJhbXtDYWxlbmRhcn0gfHw9ICcnOwoKICAgICMgY29udGVudCAtPiB0aW1lIGluIHNlY29uZHMKICAgIGZvciBteSAkVGltZSAocXcoIFVubG9ja1RpbWVvdXQgRmlyc3RSZXNwb25zZVRpbWUgVXBkYXRlVGltZSBTb2x1dGlvblRpbWUgKSkgewoKICAgICAgICAkUGFyYW17JFRpbWV9ID0gJFBhcmFteyRUaW1lfSB8fCAwOwoKICAgICAgICBpZiAoICRQYXJhbXskVGltZX0gIX4gbXteXGQrJH1zbXggKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkVGltZSBpcyBub3QgbnVtZXJpYyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjb250ZW50IGludGVnZXIgZnJvbSAwIC0gOTkKICAgIGZvciBteSAkTm90aWZ5IChxdyhGaXJzdFJlc3BvbnNlTm90aWZ5ICBVcGRhdGVOb3RpZnkgIFNvbHV0aW9uTm90aWZ5KSkgewoKICAgICAgICAkUGFyYW17JE5vdGlmeX0gPSAkUGFyYW17JE5vdGlmeX0gfHwgMDsKCiAgICAgICAgaWYgKCAkUGFyYW17JE5vdGlmeX0gIX4gbXteXGR7MSwyfX1zbXggKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkTm90aWZ5IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDk5ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIHF1ZXVlIG5hbWUKICAgICRQYXJhbXtOYW1lfSA9fiBzLyhcbnxccikvL2c7CiAgICAkUGFyYW17TmFtZX0gPX4gcy9ccyQvL2c7CgogICAgIyBjaGVjayBxdWV1ZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiAvOjokL2kgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIFF1ZXVlIG5hbWUgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHF1ZXVlIG5hbWUgZXhpc3RzCiAgICBteSAlQWxsUXVldWUgPSAkU2VsZi0+UXVldWVMaXN0KCBWYWxpZCA9PiAwICk7CiAgICBteSAlT2xkUXVldWUgPSAkU2VsZi0+UXVldWVHZXQoIElEID0+ICRQYXJhbXtRdWV1ZUlEfSApOwoKICAgICMgY2hlY2sgaWYgYSBxdWV1ZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAgaWYgKAogICAgICAgICRTZWxmLT5OYW1lRXhpc3RzQ2hlY2soCiAgICAgICAgICAgIElEICAgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtOYW1lfQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBIHF1ZXVlIHdpdGggdGhlIG5hbWUgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgU1FMCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgVVBEQVRFIHF1ZXVlCiAgICAgICAgICAgIFNFVCBuYW1lID0gPywgY29tbWVudHMgPSA/LCBncm91cF9pZCA9ID8sIHVubG9ja190aW1lb3V0ID0gPywgZmlyc3RfcmVzcG9uc2VfdGltZSA9ID8sCiAgICAgICAgICAgICAgICBmaXJzdF9yZXNwb25zZV9ub3RpZnkgPSA/LCB1cGRhdGVfdGltZSA9ID8sIHVwZGF0ZV9ub3RpZnkgPSA/LCBzb2x1dGlvbl90aW1lID0gPywKICAgICAgICAgICAgICAgIHNvbHV0aW9uX25vdGlmeSA9ID8sIGZvbGxvd191cF9pZCA9ID8sIGZvbGxvd191cF9sb2NrID0gPywgc3lzdGVtX2FkZHJlc3NfaWQgPSA/LAogICAgICAgICAgICAgICAgY2FsZW5kYXJfbmFtZSA9ID8sIGRlZmF1bHRfc2lnbl9rZXkgPSA/LCBzYWx1dGF0aW9uX2lkID0gPywgc2lnbmF0dXJlX2lkID0gPywKICAgICAgICAgICAgICAgIHZhbGlkX2lkID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPwogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgXCRQYXJhbXtDb21tZW50fSwgICAgICAgICAgICAgXCRQYXJhbXtHcm91cElEfSwgXCRQYXJhbXtVbmxvY2tUaW1lb3V0fSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sICAgICAgICBcJFBhcmFte1NvbHV0aW9uTm90aWZ5fSwKICAgICAgICAgICAgXCRQYXJhbXtGb2xsb3dVcElEfSwgICAgICAgIFwkUGFyYW17Rm9sbG93VXBMb2NrfSwgICAgICAgIFwkUGFyYW17U3lzdGVtQWRkcmVzc0lEfSwKICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgICAgIFwkUGFyYW17RGVmYXVsdFNpZ25LZXl9LCAgICAgIFwkUGFyYW17U2FsdXRhdGlvbklEfSwKICAgICAgICAgICAgXCRQYXJhbXtTaWduYXR1cmVJRH0sICAgICAgIFwkUGFyYW17VmFsaWRJRH0sICAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBxdWV1ZSBkYXRhIHdpdGggdXBkYXRlZCBuYW1lIGZvciBRdWV1ZVVwZGF0ZSBldmVudAogICAgbXkgJVF1ZXVlID0gJFNlbGYtPlF1ZXVlR2V0KCBOYW1lID0+ICRQYXJhbXtOYW1lfSApOwoKICAgICMgdHJpZ2dlciBldmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnUXVldWVVcGRhdGUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgUXVldWUgICAgPT4gXCVRdWV1ZSwKICAgICAgICAgICAgT2xkUXVldWUgPT4gXCVPbGRRdWV1ZSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAxIGlmICRQYXJhbXtOYW1lfSBlcSAkT2xkUXVldWV7TmFtZX07CgogICAgIyB1cGRhdGVkIGFsbCBzdWIgcXVldWUgbmFtZXMKICAgIG15IEBQYXJlbnRRdWV1ZSA9IHNwbGl0KCAvOjovLCAkT2xkUXVldWV7TmFtZX0gKTsKCiAgICBmb3IgbXkgJFF1ZXVlSUQgKCBzb3J0IGtleXMgJUFsbFF1ZXVlICkgewoKICAgICAgICBteSBAU3ViUXVldWUgPSBzcGxpdCggLzo6LywgJEFsbFF1ZXVleyRRdWV1ZUlEfSApOwoKICAgICAgICBpZiAoICQjU3ViUXVldWUgPiAkI1BhcmVudFF1ZXVlICkgewoKICAgICAgICAgICAgaWYgKCAkQWxsUXVldWV7JFF1ZXVlSUR9ID1+IC9eXFEkT2xkUXVldWV7TmFtZX06OlxFL2kgKSB7CgogICAgICAgICAgICAgICAgbXkgJE5ld1F1ZXVlTmFtZSA9ICRBbGxRdWV1ZXskUXVldWVJRH07CiAgICAgICAgICAgICAgICAkTmV3UXVldWVOYW1lID1+IHMvXFEkT2xkUXVldWV7TmFtZX1cRS8kUGFyYW17TmFtZX0vOwoKICAgICAgICAgICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUgcXVldWUKICAgICAgICAgICAgICAgICAgICAgICAgU0VUIG5hbWUgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/CiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkTmV3UXVldWVOYW1lLCBcJFBhcmFte1VzZXJJRH0sIFwkUXVldWVJRCBdLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlc2V0IGNhY2hlCiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgJVF1ZXVlcyA9ICRTZWxmLT5RdWV1ZUxpc3QoKTsKCiAgICAjIGdlbmVyYXRlIGNoYWluZWQgdHJhbnNsYXRpb25zIGF1dG9tYXRpY2FsbHkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUcmFuc2xhdGlvbnMnKS0+VHJhbnNsYXRlUGFyZW50Q2hpbGRFbGVtZW50cygKICAgICAgICBTdHJpbmdzID0+IFsgdmFsdWVzICVRdWV1ZXMgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBRdWV1ZUxpc3QoKQoKZ2V0IGFsbCBxdWV1ZXMKCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoKTsKCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKCj1jdXQKCnN1YiBRdWV1ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCB2YWxpZCBvcHRpb24KICAgIG15ICRWYWxpZCA9ICRQYXJhbXtWYWxpZH07CiAgICBpZiAoICFkZWZpbmVkICRWYWxpZCB8fCAkVmFsaWQgKSB7CiAgICAgICAgJFZhbGlkID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRWYWxpZCA9IDA7CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1F1ZXVlTGlzdDo6JyAuICRWYWxpZDsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICV7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHNxbCBxdWVyeQogICAgaWYgKCRWYWxpZCkgewogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHF1ZXVlIFdIRVJFIHZhbGlkX2lkIElOICIKICAgICAgICAgICAgICAgIC4gIiggJHtcKGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkpfSApIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lIEZST00gcXVldWUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlUXVldWVzLAogICAgKTsKCiAgICByZXR1cm4gJVF1ZXVlczsKfQoKPWhlYWQyIFF1ZXVlUHJlZmVyZW5jZXNTZXQoKQoKc2V0IHF1ZXVlIHByZWZlcmVuY2VzCgogICAgJFF1ZXVlT2JqZWN0LT5RdWV1ZVByZWZlcmVuY2VzU2V0KAogICAgICAgIFF1ZXVlSUQgPT4gMTIzLAogICAgICAgIEtleSAgICAgPT4gJ1VzZXJDb21tZW50JywKICAgICAgICBWYWx1ZSAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgY2FjaGUKICAgIG15ICROYW1lICAgICAgPSAkU2VsZi0+UXVldWVMb29rdXAoIFF1ZXVlSUQgPT4gJFBhcmFte1F1ZXVlSUR9ICk7CiAgICBteSBAQ2FjaGVLZXlzID0gKAogICAgICAgICdRdWV1ZUdldElEOjonIC4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICdRdWV1ZUdldE5hbWU6OicgLiAkTmFtZSwKICAgICk7CiAgICBmb3IgbXkgJENhY2hlS2V5IChAQ2FjaGVLZXlzKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5RdWV1ZVByZWZlcmVuY2VzU2V0KCVQYXJhbSk7Cn0KCj1oZWFkMiBRdWV1ZVByZWZlcmVuY2VzR2V0KCkKCmdldCBxdWV1ZSBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVQcmVmZXJlbmNlc0dldCgKICAgICAgICBRdWV1ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUXVldWVQcmVmZXJlbmNlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+UXVldWVQcmVmZXJlbmNlc0dldCglUGFyYW0pOwp9CgpzdWIgREVTVFJPWSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgZXhlY3V0ZSBhbGwgdHJhbnNhY3Rpb24gZXZlbnRzCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyVHJhbnNhY3Rpb24oKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE5hbWVFeGlzdHNDaGVjaygpCgpyZXR1cm4gMSBpZiBhbm90aGVyIHF1ZXVlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzCgogICAgJEV4aXN0ID0gJFF1ZXVlT2JqZWN0LT5OYW1lRXhpc3RzQ2hlY2soCiAgICAgICAgTmFtZSA9PiAnU29tZTo6UXVldWUnLAogICAgICAgIElEID0+IDEsICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgTmFtZUV4aXN0c0NoZWNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBpZCBGUk9NIHF1ZXVlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRGbGFnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0lEfSB8fCAkUGFyYW17SUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRGbGFnID0gMTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRGbGFnKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCj1mb3Igc3RvcHdvcmRzIHJvIHJ3Cgo9aGVhZDIgUXVldWVMaXN0UGVybWlzc2lvbigpCgpHZXQgdGhlIHBlcm1pc3Npb24gZm9yIGEgbGlzdCBvZiBxdWV1ZXMuClJldHVybnMgbm90aGluZyBpZiB0aGUgdXNlciBoYXMgbm8gJ3JvJyBvbiBhbnkgcXVldWUsICdybycgaWYgdGhlIHVzZXIgaGFzIG5vICdydycgb24gYXQgbGVhc3Qgb25lIHF1ZXVlCmFuZCAncncnIGlmIHRoZSB1c2VyIGhhcyBmdWxsIHBlcm1pc3Npb24gb24gYWxsIHF1ZXVlcy4KCiAgICBteSAkUGVybWlzc2lvbiA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICBRdWV1ZUlEcyA9PiBcQFF1ZXVlSURzLCAgICAgICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBEZWZhdWx0ICA9PiAncncnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0ICdybycgKHJvfHJ3KSBmYWxsYmFjayBwZXJtaXNzaW9uIGlmIG5vIHF1ZXVlcyBnaXZlbgogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZUxpc3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVJvUXVldWVzID0gJFNlbGYtPkdldEFsbFF1ZXVlcyggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CiAgICBteSAlUndRdWV1ZXMgPSAkU2VsZi0+R2V0QWxsUXVldWVzKAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICk7CgogICAgIyAncm8nIGlzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb24gaWYgbm8gcXVldWUgaXMgZ2l2ZW4gYW5kIHBhcmFtZXRlciAnRGVmYXVsdCcgaXMgbm90IHNldC4KICAgIG15ICREZWZhdWx0UGVybWlzc2lvbiA9ICRQYXJhbXtEZWZhdWx0fSB8fCAncm8nOwoKICAgIHJldHVybiAkRGVmYXVsdFBlcm1pc3Npb24gaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte1F1ZXVlSURzfSApOwoKICAgICMgZmluYWwgcGVybWlzc2lvbiBpcyBydyBvciAnJyBpZiBhbGwgYXJlIG9mIHRoYXQga2luZCwgZWxzZSBybwogICAgbXkgJFBlcm1pc3Npb247CiAgICBRVUVVRToKICAgIGZvciBteSAkUXVldWVJRCAoIEB7ICRQYXJhbXtRdWV1ZUlEc30gfSApIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQZXJtaXNzaW9uICkgewogICAgICAgICAgICBpZiAoICRSd1F1ZXVlc3skUXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkUGVybWlzc2lvbiA9ICdydyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUm9RdWV1ZXN7JFF1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAncm8nOwogICAgICAgICAgICAgICAgbGFzdCBRVUVVRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2lmICggJFBlcm1pc3Npb24gZXEgJycgKSB7CiAgICAgICAgICAgIGlmICggJFJ3UXVldWVzeyRRdWV1ZUlEfSB8fCAkUndRdWV1ZXN7JFF1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAncm8nOwogICAgICAgICAgICAgICAgbGFzdCBRVUVVRTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAhJFJ3UXVldWVzeyRRdWV1ZUlEfSApIHsKICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAncm8nOwogICAgICAgICAgICBsYXN0IFFVRVVFOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBlcm1pc3Npb247Cn0KCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4tQXV0b1JlcGxpZXNBbmRTaWduYXR1cmVzCgo9aGVhZDIgUXVldWVTaWduYXR1cmVNZW1iZXJMaXN0KCkKCmdldCBxdWV1ZXMgYXNzb2NpYXRlZCB0byBhIHNpZ25hdHVyZQoKICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU2lnbmF0dXJlTWVtYmVyTGlzdCggU2lnbmF0dXJlSUQgPT4gMTIzICk7CgpSZXR1cm5zOgogICAgJVF1ZXVlcyA9ICgKICAgICAgICAxID0+ICdTb21lIE5hbWUnLAogICAgICAgIDIgPT4gJ1NvbWUgTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXVlU2lnbmF0dXJlTWVtYmVyTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2lnbmF0dXJlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnR290IG5vIFNpZ25hdHVyZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRWYWxpZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwogICAgbXkgJERCT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgbXkgJENhY2hlS2V5OwoKICAgICMgY2hlY2sgaWYgdGhpcyByZXN1bHQgaXMgcHJlc2VudCAoaW4gY2FjaGUpCiAgICAkQ2FjaGVLZXkgPSAiUXVldWVzU2lnbmF0dXJlczo6JFBhcmFte1NpZ25hdHVyZUlEfSI7CiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBnZXQgcXVldWVzCiAgICBteSAkU1FMID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHF1ZXVlIFdIRVJFIHNpZ25hdHVyZV9pZCA9ID8gQU5EICIKICAgICAgICAuICIgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkpfSApIgogICAgICAgIC4gIiBPUkRFUiBCWSBuYW1lIjsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2lnbmF0dXJlSUR9IF0KICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHN0b3JlIHF1ZXVlcyAoaW4gY2FjaGUpCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVRdWV1ZXMsCiAgICApOwoKICAgIHJldHVybiAlUXVldWVzOwp9Cgo9aGVhZDIgUXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCkKCmdldCBxdWV1ZXMgYXNzb2NpYXRlZCB0byBhbiBhdXRvIHJlc3BvbnNlCgogICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0KCBBdXRvUmVzcG9uc2VJRCA9PiAxMjMgKTsKClJldHVybnM6CiAgICAlUXVldWVzID0gKAogICAgICAgIDEgPT4gJ1NvbWUgTmFtZScsCiAgICAgICAgMiA9PiAnU29tZSBOYW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgUXVldWVBdXRvUmVzcG9uc2VNZW1iZXJMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtBdXRvUmVzcG9uc2VJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gQXV0b1Jlc3BvbnNlSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CiAgICBteSAkREJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBxdWV1ZXMKICAgIG15ICRTUUwgPSAiU0VMRUNUIHEuaWQsIHEubmFtZSAiCiAgICAgICAgLiAiIEZST00gcXVldWUgcSwgcXVldWVfYXV0b19yZXNwb25zZSBxYXIgV0hFUkUgIgogICAgICAgIC4gIiBxYXIuYXV0b19yZXNwb25zZV9pZCA9ID8gQU5EICIKICAgICAgICAuICIgcWFyLnF1ZXVlX2lkID0gcS5pZCBBTkQgIgogICAgICAgIC4gIiBxLnZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJFZhbGlkT2JqZWN0LT5WYWxpZElEc0dldCgpKX0gKSIKICAgICAgICAuICIgT1JERVIgQlkgcS5uYW1lIjsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17QXV0b1Jlc3BvbnNlSUR9IF0KICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUXVldWVzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXVlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJVF1ZXVlczsKfQoKIyBFTyBMaWdodEFkbWluLUF1dG9SZXBsaWVzQW5kU2lnbmF0dXJlcwoxOwo=</File>
        <File Location="doc/en/LightAdmin-AutoRepliesAndSignatures.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>