<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>AgentTicketArticlePin</Name>
    <Version>11.0.2</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-07-22 10:48:31" Version="11.0.2">Changed permissions to be configurable via SysConfig.</ChangeLog>
    <ChangeLog Date="2025-08-21 09:50:41" Version="11.0.1">Initial Release.</ChangeLog>
    <Description Lang="en">Pin Articles to show them at the top of the list.</Description>
    <Description Lang="de">Ermöglicht das anheften von Artikeln an den Anfang der Artikelliste.</Description>
    <Framework>11.0.x</Framework>
    <BuildCommitID>4960e0db376a07a949ea90d609dca6c222d5be41</BuildCommitID>
    <BuildDate>2026-07-22 10:48:35</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSAyMDg2OGM1NjdjZjFlNGUwOTBiNGQyZDc3MTViMWVhMzUzYTlmM2FmIC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRab29tLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyBjb3JlIG1vZHVsZXMKdXNlIExpc3Q6OlV0aWwgcXcoYW55KTsKdXNlIFBPU0lYICAgICAgcXcoY2VpbCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHslUGFyYW19LCAkVHlwZTsKCiAgICAjIHNldCBkZWJ1ZwogICAgJFNlbGYtPntEZWJ1Z30gPSAwOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVXNlck9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJFNlbGYtPntBcnRpY2xlSUR9ICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZUlEJyApOwogICAgJFNlbGYtPntBcnRpY2xlVmlld30gICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZVZpZXcnICk7CiAgICAkU2VsZi0+e1pvb21FeHBhbmR9ICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tRXhwYW5kJyApOwogICAgJFNlbGYtPntab29tRXhwYW5kU29ydH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnWm9vbUV4cGFuZFNvcnQnICk7CiAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tVGltZWxpbmUnICk7CgogICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNhdmUgbGFzdCB1c2VkIHZpZXcgdHlwZSBpbiBwcmVmZXJlbmNlcwogICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewoKICAgICAgICBpZiAoCiAgICAgICAgICAgICFkZWZpbmVkICRTZWxmLT57QXJ0aWNsZVZpZXd9CiAgICAgICAgICAgICYmICFkZWZpbmVkICRTZWxmLT57Wm9vbUV4cGFuZH0KICAgICAgICAgICAgJiYgIWRlZmluZWQgJFNlbGYtPntab29tVGltZWxpbmV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50Wm9vbUV4cGFuZCcpOwogICAgICAgICAgICBpZiAoICRVc2VyUHJlZmVyZW5jZXN7VXNlckxhc3RVc2VkWm9vbVZpZXdUeXBlfSApIHsKICAgICAgICAgICAgICAgIGlmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyTGFzdFVzZWRab29tVmlld1R5cGV9IGVxICdFeHBhbmQnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZX0gZXEgJ0NvbGxhcHNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyTGFzdFVzZWRab29tVmlld1R5cGV9IGVxICdUaW1lbGluZScgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntab29tVGltZWxpbmV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFNlbGYtPntBcnRpY2xlVmlld30KICAgICAgICAgICAgfHwgZGVmaW5lZCAkU2VsZi0+e1pvb21FeHBhbmR9CiAgICAgICAgICAgIHx8IGRlZmluZWQgJFNlbGYtPntab29tVGltZWxpbmV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICcnOwoKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRTZWxmLT57QXJ0aWNsZVZpZXd9ICkgewogICAgICAgICAgICAgICAgJExhc3RVc2VkWm9vbVZpZXdUeXBlID0gJFNlbGYtPntBcnRpY2xlVmlld307CgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVWaWV3fSBlcSAnRXhwYW5kJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNlbGYtPntBcnRpY2xlVmlld30gZXEgJ0NvbGxhcHNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNlbGYtPntBcnRpY2xlVmlld30gZXEgJ1RpbWVsaW5lJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJExhc3RVc2VkWm9vbVZpZXdUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFpvb21FeHBhbmQnKQogICAgICAgICAgICAgICAgICAgICAgICA/ICdFeHBhbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIDogJ0NvbGxhcHNlJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGRlZmluZWQgJFNlbGYtPntab29tRXhwYW5kfSAmJiAkU2VsZi0+e1pvb21FeHBhbmR9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAnRXhwYW5kJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGRlZmluZWQgJFNlbGYtPntab29tRXhwYW5kfSAmJiAkU2VsZi0+e1pvb21FeHBhbmR9ID09IDAgKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAnQ29sbGFwc2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCAkU2VsZi0+e1pvb21UaW1lbGluZX0gJiYgJFNlbGYtPntab29tVGltZWxpbmV9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAnVGltZWxpbmUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZScsCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJExhc3RVc2VkWm9vbVZpZXdUeXBlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpbWVsaW5lVmlld0VuYWJsZWQnKSApIHsKICAgICAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gPSAwOwogICAgfQoKICAgICMgd2hldGhlciB0aGUgbWVzc2FnZSAiVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGFydGljbGUsIC4uLiIgaXMgc2hvd24KICAgICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSAvLz0gJFVzZXJQcmVmZXJlbmNlc3tVc2VyQWdlbnREb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9OwoKICAgICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IC8vPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21FeHBhbmRTb3J0Jyk7CgogICAgJFNlbGYtPntBcnRpY2xlRmlsdGVyQWN0aXZlfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VGlja2V0QXJ0aWNsZUZpbHRlcicpOwoKICAgICMgZGVmaW5lIGlmIHJpY2ggdGV4dCBzaG91bGQgYmUgdXNlZAogICAgJFNlbGYtPntSaWNoVGV4dH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21SaWNoVGV4dEZvcmNlJykKICAgICAgICB8fCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgIHx8IDA7CgogICAgIyBBbHdheXMgZXhjbHVkZSBwbGFpbiB0ZXh0IGF0dGFjaG1lbnQsIGJ1dCBleGNsdWRlIEhUTUwgYm9keSBvbmx5IGlmIHJpY2ggdGV4dCBpcyBlbmFibGVkLgogICAgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9ID0gewogICAgICAgIEV4Y2x1ZGVQbGFpblRleHQgPT4gMSwKICAgICAgICBFeGNsdWRlSFRNTEJvZHkgID0+ICRTZWxmLT57UmljaFRleHR9LAogICAgICAgIEV4Y2x1ZGVJbmxpbmUgICAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICB9OwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyB0aWNrZXQgaWQgbG9va3VwCiAgICBpZiAoICEkU2VsZi0+e1RpY2tldElEfSAmJiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0TnVtYmVyJyApICkgewogICAgICAgICRTZWxmLT57VGlja2V0SUR9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0TnVtYmVyJyApLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGlzcGxheSBzZXR0aW5ncyBmb3IgQWdlbnRUaWNrZXRab29tLCBlLmcuIHdoaWNoIHdpZGdldHMgYXJlIHNob3duCiAgICAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpOwoKICAgICMgdGhpcyBpcyBhIG1hcHBpbmcgb2YgaGlzdG9yeSB0eXBlcyB3aGljaCBpcyBiZWluZyB1c2VkCiAgICAjIGZvciB0aGUgdGltZWxpbmUgdmlldyBhbmQgaXRzIGV2ZW50IHR5cGUgZmlsdGVyCiAgICAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30gPSB7CiAgICAgICAgVGlja2V0TGlua0RlbGV0ZSAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0xpbmsgRGVsZXRlZCcpLAogICAgICAgIExvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgTG9ja2VkJyksCiAgICAgICAgU2V0UGVuZGluZ1RpbWUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1BlbmRpbmcgVGltZSBTZXQnKSwKICAgICAgICBUaWNrZXREeW5hbWljRmllbGRVcGRhdGUgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRHluYW1pYyBGaWVsZCBVcGRhdGVkJyksCiAgICAgICAgRW1haWxBZ2VudEludGVybmFsICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIEVtYWlsIChpbnRlcm5hbCknKSwKICAgICAgICBOZXdUaWNrZXQgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVGlja2V0IENyZWF0ZWQnKSwKICAgICAgICBUeXBlVXBkYXRlICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVHlwZSBVcGRhdGVkJyksCiAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdGFydCAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gVXBkYXRlIFRpbWUgSW4gRWZmZWN0JyksCiAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdG9wICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gVXBkYXRlIFRpbWUgU3RvcHBlZCcpLAogICAgICAgIEVzY2FsYXRpb25GaXJzdFJlc3BvbnNlVGltZVN0b3AgPT4gVHJhbnNsYXRhYmxlKCdFc2NhbGF0aW9uIEZpcnN0IFJlc3BvbnNlIFRpbWUgU3RvcHBlZCcpLAogICAgICAgIEN1c3RvbWVyVXBkYXRlICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdDdXN0b21lciBVcGRhdGVkJyksCiAgICAgICAgQ2hhdEludGVybmFsICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0ludGVybmFsIENoYXQnKSwKICAgICAgICBTZW5kQXV0b0ZvbGxvd1VwICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQXV0b21hdGljIEZvbGxvdy1VcCBTZW50JyksCiAgICAgICAgQWRkTm90ZSAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05vdGUgQWRkZWQnKSwKICAgICAgICBBZGROb3RlQ3VzdG9tZXIgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90ZSBBZGRlZCAoQ3VzdG9tZXIpJyksCiAgICAgICAgQWRkU01TICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NNUyBBZGRlZCcpLAogICAgICAgIEFkZFNNU0N1c3RvbWVyICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTTVMgQWRkZWQgKEN1c3RvbWVyKScpLAogICAgICAgIFN0YXRlVXBkYXRlICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTdGF0ZSBVcGRhdGVkJyksCiAgICAgICAgU2VuZEFuc3dlciAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIEFuc3dlcicpLAogICAgICAgIFNlcnZpY2VVcGRhdGUgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTZXJ2aWNlIFVwZGF0ZWQnKSwKICAgICAgICBUaWNrZXRMaW5rQWRkICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTGluayBBZGRlZCcpLAogICAgICAgIEVtYWlsQ3VzdG9tZXIgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBDdXN0b21lciBFbWFpbCcpLAogICAgICAgIFdlYlJlcXVlc3RDdXN0b21lciAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBXZWIgUmVxdWVzdCcpLAogICAgICAgIFByaW9yaXR5VXBkYXRlICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdQcmlvcml0eSBVcGRhdGVkJyksCiAgICAgICAgVW5sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBVbmxvY2tlZCcpLAogICAgICAgIEVtYWlsQWdlbnQgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdPdXRnb2luZyBFbWFpbCcpLAogICAgICAgIFRpdGxlVXBkYXRlICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaXRsZSBVcGRhdGVkJyksCiAgICAgICAgT3duZXJVcGRhdGUgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldyBPd25lcicpLAogICAgICAgIE1lcmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgTWVyZ2VkJyksCiAgICAgICAgUGhvbmVDYWxsQWdlbnQgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIFBob25lIENhbGwnKSwKICAgICAgICBGb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRm9yd2FyZGVkIE1lc3NhZ2UnKSwKICAgICAgICBVbnN1YnNjcmliZSAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUmVtb3ZlZCBVc2VyIFN1YnNjcmlwdGlvbicpLAogICAgICAgIFRpbWVBY2NvdW50aW5nICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaW1lIEFjY291bnRlZCcpLAogICAgICAgIFBob25lQ2FsbEN1c3RvbWVyICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBQaG9uZSBDYWxsJyksCiAgICAgICAgU3lzdGVtUmVxdWVzdCAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1N5c3RlbSBSZXF1ZXN0LicpLAogICAgICAgIEZvbGxvd1VwICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBGb2xsb3ctVXAnKSwKICAgICAgICBTZW5kQXV0b1JlcGx5ICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQXV0b21hdGljIFJlcGx5IFNlbnQnKSwKICAgICAgICBTZW5kQXV0b1JlamVjdCAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQXV0b21hdGljIFJlamVjdCBTZW50JyksCiAgICAgICAgUmVzcG9uc2libGVVcGRhdGUgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldyBSZXNwb25zaWJsZScpLAogICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVTdGFydCAgICAgPT4gVHJhbnNsYXRhYmxlKCdFc2NhbGF0aW9uIFNvbHV0aW9uIFRpbWUgSW4gRWZmZWN0JyksCiAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0b3AgICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gU29sdXRpb24gVGltZSBTdG9wcGVkJyksCiAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZVN0YXJ0ICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gUmVzcG9uc2UgVGltZSBJbiBFZmZlY3QnKSwKICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RvcCAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBSZXNwb25zZSBUaW1lIFN0b3BwZWQnKSwKICAgICAgICBTTEFVcGRhdGUgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnU0xBIFVwZGF0ZWQnKSwKICAgICAgICBDaGF0RXh0ZXJuYWwgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXh0ZXJuYWwgQ2hhdCcpLAogICAgICAgIE1vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdRdWV1ZSBDaGFuZ2VkJyksCiAgICAgICAgU2VuZEFnZW50Tm90aWZpY2F0aW9uICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05vdGlmaWNhdGlvbiBXYXMgU2VudCcpLAogICAgfTsKCiAgICAjIEFkZCBjdXN0b20gZmlsZXMgdG8gdGhlIHpvb20ncyBmcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIG9uIHRoZSBmbHkKICAgICMgICAgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcy4KICAgIGlmICgKICAgICAgICBkZWZpbmVkICRDb25maWdPYmplY3QtPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpCiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJykgPT0gMQogICAgICAgICkKICAgIHsKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdMb2FkZXI6Ok1vZHVsZTo6QWdlbnRUaWNrZXRab29tIyMjMDAzLUR5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gWwogICAgICAgICAgICAgICAgICAgICdDb3JlLkFnZW50LlRpY2tldFpvb20uVGltZWxpbmVWaWV3LmpzJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQXJ0aWNsZVNob3dTdGF0dXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlRmVhdHVyZXMnKS0+U2hvd0RlbGV0ZWRBcnRpY2xlcygKICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBHZXRTdGF0dXMgPT4gMQogICAgKTsKCiAgICAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9ID0gJEFydGljbGVTaG93U3RhdHVzID8gMSA6IDA7CiAgICAkU2VsZi0+e0FydGljbGVTdG9yYWdlfSAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkFydGljbGU6OkJhY2tlbmQ6Ok1JTUVCYXNlOjpBcnRpY2xlU3RvcmFnZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFRpY2tldElEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfQogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbiwgZG9uJ3Qgc2hvdyB0aWNrZXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoCiAgICAgICAgICAgICJUaGlzIHRpY2tldCBkb2VzIG5vdCBleGlzdCwgb3IgeW91IGRvbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gYWNjZXNzIGl0IGluIGl0cyBjdXJyZW50IHN0YXRlLiIKICAgICAgICApLAogICAgICAgIFdpdGhIZWFkZXIgPT4gJFNlbGYtPntTdWJhY3Rpb259ICYmICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQXJ0aWNsZVVwZGF0ZScgPyAnbm8nIDogJ3llcycsCiAgICApIGlmICEkQWNjZXNzOwoKICAgICMgZ2V0IHRpY2tldCBhdHRyaWJ1dGVzCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBBQ0wgcmVzdHJpY3Rpb25zCiAgICBteSAlUG9zc2libGVBY3Rpb25zOwogICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGFsbCByZWdpc3RlcmVkIEFjdGlvbnMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpIGVxICdIQVNIJyApIHsKCiAgICAgICAgbXkgJUFjdGlvbnMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKSB9OwoKICAgICAgICAjIG9ubHkgdXNlIHRob3NlIEFjdGlvbnMgdGhhdCBzdGF0cyB3aXRoIEFnZW50CiAgICAgICAgJVBvc3NpYmxlQWN0aW9ucyA9IG1hcCB7ICsrJENvdW50ZXIgPT4gJF8gfQogICAgICAgICAgICBncmVwIHsgc3Vic3RyKCAkXywgMCwgbGVuZ3RoICdBZ2VudCcgKSBlcSAnQWdlbnQnIH0KICAgICAgICAgICAgc29ydCBrZXlzICVBY3Rpb25zOwogICAgfQoKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVBvc3NpYmxlQWN0aW9ucywKICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVBY2xBY3Rpb24gPSAlUG9zc2libGVBY3Rpb25zOwogICAgaWYgKCRBQ0wpIHsKICAgICAgICAlQWNsQWN0aW9uID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwogICAgfQoKICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKCiAgICAjIHNob3cgZXJyb3Igc2NyZWVuIGlmIEFDTCBwcm9oaWJpdHMgdGhpcyBhY3Rpb24KICAgIGlmICggISRBY2xBY3Rpb25Mb29rdXB7ICRTZWxmLT57QWN0aW9ufSB9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgIH0KCiAgICAjIHNlbmQgcGFyYW1ldGVyIFRpY2tldElEIHRvIEpTCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldElEJywKICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICk7CgogICAgIyBtYXJrIHNob3duIHRpY2tldCBhcyBzZWVuCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGlja2V0TWFya0FzU2VlbicgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgIGlmICggJFRpY2tldHtBcmNoaXZlRmxhZ30gbmUgJ3knICkgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRTZWxmLT5fVGlja2V0SXRlbVNlZW4oIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRTdWNjZXNzLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdNYXJrQXNJbXBvcnRhbnQnICkgewoKICAgICAgICAjIE93bmVyIGFuZCBSZXNwb25zaWJsZSBjYW4gbWFyayBhcnRpY2xlcyBhcyBpbXBvcnRhbnQgb3IgcmVtb3ZlIG1hcmsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57VXNlcklEfSA9PSAkVGlja2V0e093bmVySUR9CiAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpCiAgICAgICAgICAgICAgICAmJiAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtSZXNwb25zaWJsZUlEfQogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIEFsd2F5cyB1c2UgdXNlciBpZCAxIGJlY2F1c2Ugb3RoZXIgdXNlcnMgYWxzbyBoYXZlIHRvIHNlZSB0aGUgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgbXkgJUFydGljbGVGbGFnID0gJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnR2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEFydGljbGVJc0ltcG9ydGFudCA9ICRBcnRpY2xlRmxhZ3tJbXBvcnRhbnR9OwogICAgICAgICAgICBpZiAoJEFydGljbGVJc0ltcG9ydGFudCkgewoKICAgICAgICAgICAgICAgICMgQWx3YXlzIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBvdGhlciB1c2VycyBhbHNvIGhhdmUgdG8gc2VlIHRoZSBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnRGVsZXRlKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnSW1wb3J0YW50JywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBBbHdheXMgdXNlIHVzZXIgaWQgMSBiZWNhdXNlIG90aGVyIHVzZXJzIGFsc28gaGF2ZSB0byBzZWUgdGhlIGltcG9ydGFudCBmbGFnCiAgICAgICAgICAgICAgICAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICdJbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kU2VsZi0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFNlbGYtPntBcnRpY2xlSUR9IiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHJlcXVpcmVkIG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRNYWluT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Zvcm1EcmFmdERlbGV0ZScgKSB7CiAgICAgICAgbXkgJVJlc3BvbnNlOwoKICAgICAgICBteSAkRm9ybURyYWZ0SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybURyYWZ0SUQnICkgfHwgJyc7CiAgICAgICAgaWYgKCRGb3JtRHJhZnRJRCkgewoKICAgICAgICAgICAgIyBmZXRjaCBmb3JtIGRyYWZ0IHRvIGNoZWNrIHBlcm1pc3Npb25zIGFuZCB0aWNrZXQgbG9jawogICAgICAgICAgICBteSAkRm9ybURyYWZ0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpOwogICAgICAgICAgICBteSAkRm9ybURyYWZ0ICAgICAgID0gJEZvcm1EcmFmdE9iamVjdC0+Rm9ybURyYWZ0R2V0KAogICAgICAgICAgICAgICAgRm9ybURyYWZ0SUQgPT4gJEZvcm1EcmFmdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCBmb3JtIGRyYWZ0IGFjdHVhbGx5IGJlbG9uZ3MgdG8gY3VycmVudCB0aWNrZXQKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRm9ybURyYWZ0KSAmJiAkRm9ybURyYWZ0LT57T2JqZWN0SUR9ID09ICRTZWxmLT57VGlja2V0SUR9ICkgewoKICAgICAgICAgICAgICAgICMgdXNlIGNvbmZpZyBvZiBmb3JtIGRyYWZ0IGFjdGlvbiBmb3IgY2hlY2tzCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGlja2V0OjpGcm9udGVuZDo6JyAuICRGb3JtRHJhZnQtPntBY3Rpb259ICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBhY3Rpb24gaXMgYWxsb3dlZCBhcyBwZXIgQUNMcwogICAgICAgICAgICAgICAgaWYgKCAkQWNsQWN0aW9uTG9va3VweyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9ICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb25maWcpICkgewoKICAgICAgICAgICAgICAgICAgICAjIHRpY2tldCBsb2NrIGNoZWNrCiAgICAgICAgICAgICAgICAgICAgIyAgIE5PVEU6IG93bmVyIHN0YXR1cyBvdmVycnVsZXMgcGVybWlzc2lvbiBjaGVjayBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntSZXF1aXJlZExvY2t9ICYmICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tHZXQoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPk93bmVyQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNle0Vycm9yfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiU29ycnksIHlvdSBuZWVkIHRvIGJlIHRoZSB0aWNrZXQgb3duZXIgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbmZpZy0+e1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEFjY2Vzc09rID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIk5vIHBlcm1pc3Npb24uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggISRSZXNwb25zZXtFcnJvcn0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtTdWNjZXNzfSA9ICRGb3JtRHJhZnRPYmplY3QtPkZvcm1EcmFmdERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRGb3JtRHJhZnRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJObyBwZXJtaXNzaW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFJlc3BvbnNle0Vycm9yfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiQ291bGQgbm90IGRlbGV0ZSBmb3JtIGRyYWZ0LiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJNaXNzaW5nIEZvcm1EcmFmdElEISIpOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBKU09OIG91dHB1dAogICAgICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiBcJVJlc3BvbnNlLAogICAgICAgICk7CgogICAgICAgICMgc2VuZCBKU09OIHJlc3BvbnNlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0xvYWRXaWRnZXQnICkgewogICAgICAgIG15ICRFbGVtZW50SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRWxlbWVudElEJyApOwogICAgICAgIG15ICRDb25maWc7CiAgICAgICAgV0lER0VUOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9IC8vIHt9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEVsZW1lbnRJRCBlcSAnQXN5bmNfJyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEtleSkgKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnID0gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57V2lkZ2V0c30tPnskS2V5fTsKICAgICAgICAgICAgICAgIGxhc3QgV0lER0VUOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkQ29uZmlnKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gZXZhbCB7ICRNYWluT2JqZWN0LT5SZXF1aXJlKCAkQ29uZmlnLT57TW9kdWxlfSApIH07CiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGxvYWQgJENvbmZpZy0+e01vZHVsZX06ICRAIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoICV7JFNlbGZ9ICkgfTsKICAgICAgICAgICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIm5ldygpIG9mIFdpZGdldCBtb2R1bGUgJENvbmZpZy0+e01vZHVsZX0gbm90IHN1Y2Nlc3NmdWwhIiwKCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJFdpZGdldE91dHB1dCA9ICRNb2R1bGUtPlJ1bigKICAgICAgICAgICAgICAgIFRpY2tldCAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFjbEFjdGlvbiA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIENvbmZpZyAgICA9PiAkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRXaWRnZXRPdXRwdXQtPntPdXRwdXR9IC8vICcgJywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICd1dGYtOCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGxvY2F0ZSBtb2R1bGUgZm9yIEVsZW1lbnRJRCAkRWxlbWVudElEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICcnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1hcmsgc2hvd24gYXJ0aWNsZSBhcyBzZWVuCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTWFya0FzU2VlbicgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICBteSAkSXNBcnRpY2xlRGVsZXRlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGVGZWF0dXJlcycpLT5Jc0FydGljbGVEZWxldGVkKAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkSXNBcnRpY2xlRGVsZXRlZCkgewogICAgICAgICAgICAkU3VjY2VzcyA9IDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPl9BcnRpY2xlSXRlbVNlZW4oCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBhcnRpY2xlIHVwZGF0ZQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FydGljbGVVcGRhdGUnICkgewogICAgICAgIG15ICRDb3VudCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb3VudCcgKTsKCiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgKTsKCiAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICApOwogICAgICAgICRBcnRpY2xle0NvdW50fSA9ICRDb3VudDsKCiAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleCAoZXhjbHVkaW5nIGJvZHkgYXR0YWNobWVudHMpLgogICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgJXsgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9IH0sCiAgICAgICAgKTsKICAgICAgICAkQXJ0aWNsZXtBdG1zfSA9IFwlQXRtSW5kZXg7CgogICAgICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICAgICAgbXkgJVN0YW5kYXJkVGVtcGxhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgICAgICAgICBWYWxpZCAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEFydGljbGVXaWRnZXRzSFRNTCA9ICRTZWxmLT5fQXJ0aWNsZUl0ZW0oCiAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBcnRpY2xlICAgICAgICAgICA9PiBcJUFydGljbGUsCiAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBTdGFuZGFyZFJlc3BvbnNlcyA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7QW5zd2VyfSwKICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnT25Mb2FkJywKICAgICAgICApOwoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBbICRTZWxmLT57QXJ0aWNsZUlEfSBdLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnTWVudUl0ZW1zJywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntNZW51SXRlbXN9LAogICAgICAgICk7CgogICAgICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICAlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQXJ0aWNsZVdpZGdldHNIVE1MID0+ICRBcnRpY2xlV2lkZ2V0c0hUTUwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQUpBWCA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJENvbnRlbnQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ2FuXCd0IGdldCBmb3IgQXJ0aWNsZUlEICVzIScsICRTZWxmLT57QXJ0aWNsZUlEfSApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRDb250ZW50LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgd3JpdGUgYXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3MgdG8gc2Vzc2lvbgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FydGljbGVGaWx0ZXJTZXQnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICAgICAgbXkgJFNhdmVEZWZhdWx0cyAgICAgICAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVEZWZhdWx0cycgKTsKICAgICAgICBteSBAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXInICk7CiAgICAgICAgbXkgJEN1c3RvbWVyVmlzaWJpbGl0eSAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVmlzaWJpbGl0eUZpbHRlcicgKTsKICAgICAgICBteSBAQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJJRHMgICAgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXInICk7CgogICAgICAgICMgYnVpbGQgc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIGlmIChAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHMpIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJ0NvbW11bmljYXRpb25DaGFubmVsRmlsdGVyPCc7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49IGpvaW4gJywnLCBAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHM7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49ICc+JzsKICAgICAgICB9CiAgICAgICAgaWYgKCBkZWZpbmVkICRDdXN0b21lclZpc2liaWxpdHkgJiYgJEN1c3RvbWVyVmlzaWJpbGl0eSAhPSAyICkgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAiQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyPCRDdXN0b21lclZpc2liaWxpdHk+IjsKICAgICAgICB9CiAgICAgICAgaWYgKEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEcykgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXI8JzsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gam9pbiAnLCcsIEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSB0aGUgc2Vzc2lvbgoKICAgICAgICAjIHNhdmUgZGVmYXVsdCBmaWx0ZXIgc2V0dGluZ3MgdG8gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICgkU2F2ZURlZmF1bHRzKSB7CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ0FydGljbGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0FydGljbGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdHVybiBvZmYgZmlsdGVyIGV4cGxpY2l0bHkgZm9yIHRoaXMgdGlja2V0CiAgICAgICAgaWYgKCAkU2Vzc2lvblN0cmluZyBlcSAnJyApIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgPSAnb2ZmJzsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBzZXNzaW9uCiAgICAgICAgbXkgJFVwZGF0ZSA9ICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAiQXJ0aWNsZUZpbHRlciRUaWNrZXRJRCIsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAnJzsKICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3Mgd2VyZSBzYXZlZC4nKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgd3JpdGUgYXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3MgdG8gc2Vzc2lvbgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0V2ZW5UeXBlRmlsdGVyU2V0JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFRpY2tldElEICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXRJRCcgKTsKICAgICAgICBteSAkU2F2ZURlZmF1bHRzICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVEZWZhdWx0cycgKTsKICAgICAgICBteSBARXZlbnRUeXBlRmlsdGVySURzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ0V2ZW50VHlwZUZpbHRlcicgKTsKCiAgICAgICAgIyBidWlsZCBzZXNzaW9uIHN0cmluZwogICAgICAgIG15ICRTZXNzaW9uU3RyaW5nID0gJyc7CiAgICAgICAgaWYgKEBFdmVudFR5cGVGaWx0ZXJJRHMpIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJ0V2ZW50VHlwZUZpbHRlcjwnOwogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSBqb2luICcsJywgQEV2ZW50VHlwZUZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSB0aGUgc2Vzc2lvbgoKICAgICAgICAjIHNhdmUgZGVmYXVsdCBmaWx0ZXIgc2V0dGluZ3MgdG8gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICgkU2F2ZURlZmF1bHRzKSB7CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ0V2ZW50VHlwZUZpbHRlckRlZmF1bHQnLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnRXZlbnRUeXBlRmlsdGVyRGVmYXVsdCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlc3Npb25TdHJpbmcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHR1cm4gb2ZmIGZpbHRlciBleHBsaWNpdGx5IGZvciB0aGlzIHRpY2tldAogICAgICAgIGlmICggJFNlc3Npb25TdHJpbmcgZXEgJycgKSB7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nID0gJ29mZic7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgc2Vzc2lvbgogICAgICAgIG15ICRVcGRhdGUgPSAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gIkV2ZW50VHlwZUZpbHRlciRUaWNrZXRJRCIsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAnJzsKICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRXZlbnQgdHlwZSBmaWx0ZXIgc2V0dGluZ3Mgd2VyZSBzYXZlZC4nKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICAjIGdldCBhcnRpY2xlIGZpbHRlciBzZXR0aW5ncyBmcm9tIHNlc3Npb24gc3RyaW5nCiAgICAgICAgbXkgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntTZXNzaW9ufXsgJ0FydGljbGVGaWx0ZXInIC4gJFNlbGYtPntUaWNrZXRJRH0gfTsKCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBmaWx0ZXIgZm9yIHRoaXMgdGlja2V0IGZyb20gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICggISRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyApIHsKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntTZXNzaW9ufXtBcnRpY2xlRmlsdGVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIGRvIG5vdCB1c2UgZGVmYXVsdHMgZm9yIHRoaXMgdGlja2V0IGlmIGZpbHRlciB3YXMgZXhwbGljaXRseSB0dXJuZWQgb2ZmCiAgICAgICAgZWxzaWYgKCAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgZXEgJ29mZicgKSB7CiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBleHRyYWN0IENvbW11bmljYXRpb25DaGFubmVscwogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlciA8ICggW148Pl0rICkgPiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBJRHMgPSBzcGxpdCAvLC8sICQxOwogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gPSBcQElEczsKICAgICAgICB9CgogICAgICAgICMgZXh0cmFjdCBDdXN0b21lclZpc2liaWxpdHkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZwogICAgICAgICAgICAmJiAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgPX4gbXsgQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX0gPSAkMTsKICAgICAgICB9CgogICAgICAgICMgZXh0cmFjdCBBcnRpY2xlU2VuZGVyVHlwZUlEcwogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlciA8ICggW148Pl0rICkgPiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBJRHMgPSBzcGxpdCAvLC8sICQxOwogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gPSBcQElEczsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGV2ZW50IHR5cGUgZmlsdGVyIHNldHRpbmdzIGZyb20gc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICRTZWxmLT57ICdFdmVudFR5cGVGaWx0ZXInIC4gJFNlbGYtPntUaWNrZXRJRH0gfTsKCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBmaWx0ZXIgZm9yIHRoaXMgdGlja2V0IGZyb20gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICggISRFdmVudFR5cGVGaWx0ZXJTZXNzaW9uU3RyaW5nICkgewogICAgICAgICAgICAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIGRvIG5vdCB1c2UgZGVmYXVsdHMgZm9yIHRoaXMgdGlja2V0IGlmIGZpbHRlciB3YXMgZXhwbGljaXRseSB0dXJuZWQgb2ZmCiAgICAgICAgZWxzaWYgKCAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyBlcSAnb2ZmJyApIHsKICAgICAgICAgICAgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgPSAnJzsKICAgICAgICB9CgogICAgICAgICMgU2V0IGFydGljbGUgZmlsdGVyIHdpdGggdmFsdWUgaWYgaXQgZXhpc3RzLgogICAgICAgIGlmICgKICAgICAgICAgICAgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcKICAgICAgICAgICAgJiYgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgPX4gbXsgRXZlbnRUeXBlRmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQElEcyA9IHNwbGl0IC8sLywgJDE7CiAgICAgICAgICAgICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSA9IFxASURzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuIGpvaW4gJycsCiAgICAgICAgJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBWYWx1ZSAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICksCiAgICAgICAgJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhciwKICAgICAgICAkU2VsZi0+TWFza0FnZW50Wm9vbSgKICAgICAgICAgICAgVGlja2V0ICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBY2xBY3Rpb24gPT4gXCVBY2xBY3Rpb24KICAgICAgICApLAogICAgICAgICRMYXlvdXRPYmplY3QtPkZvb3RlcjsKfQoKc3ViIE1hc2tBZ2VudFpvb20gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICAgID0gJXsgJFBhcmFte1RpY2tldH0gfTsKICAgIG15ICVBY2xBY3Rpb24gPSAleyAkUGFyYW17QWNsQWN0aW9ufSB9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgQ3JlYXRlIGEgbGlzdCBvZiBhcnRpY2xlIHNlbmRlciB0eXBlcyBmb3IgbG9va3VwCiAgICBteSAlQXJ0aWNsZVNlbmRlclR5cGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTGlzdCgpOwoKICAgICMgZWxzZSBzaG93IG5vcm1hbCB0aWNrZXQgem9vbSB2aWV3CiAgICAjIGZldGNoIGFsbCBtb3ZlIHF1ZXVlcwogICAgbXkgJU1vdmVRdWV1ZXMgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlTGlzdCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQWN0aW9uICAgPT4gJ0FnZW50VGlja2V0TW92ZScsCiAgICAgICAgVHlwZSAgICAgPT4gJ21vdmVfaW50bycsCiAgICApOwoKICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdlbmVyYXRlIHNob3duIGFydGljbGVzCiAgICBteSAkTGltaXQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1heEFydGljbGVzUGVyUGFnZScpOwoKICAgIG15ICRPcmRlciA9ICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IGVxICdyZXZlcnNlJyA/ICdERVNDJyA6ICdBU0MnOwogICAgbXkgJFBhZ2U7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgYXJ0aWNsZSBwYWdlCiAgICBteSAkQXJ0aWNsZVBhZ2UgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZVBhZ2UnICk7CgogICAgbXkgJElzVmlzaWJsZUZvckN1c3RvbWVyOwogICAgaWYgKCBkZWZpbmVkICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9ICkgewogICAgICAgICRJc1Zpc2libGVGb3JDdXN0b21lciA9ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9OwogICAgfQoKICAgICMgR2V0IGFsbCBhcnRpY2xlcy4KICAgIG15IEBBcnRpY2xlQm94QWxsID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+ICRJc1Zpc2libGVGb3JDdXN0b21lciwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzICA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICApOwoKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gKSApIHsKICAgICAgICBteSAlRmlsdGVyID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9OwoKICAgICAgICBAQXJ0aWNsZUJveEFsbCA9IGdyZXAgeyAkRmlsdGVyeyAkXy0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gfSBAQXJ0aWNsZUJveEFsbDsKICAgIH0KCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0FydGljbGVTZW5kZXJUeXBlSUR9ICkgKSB7CiAgICAgICAgbXkgJUZpbHRlciA9IG1hcCB7ICRfID0+IDEgfSBAeyAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gfTsKCiAgICAgICAgQEFydGljbGVCb3hBbGwgPSBncmVwIHsgJEZpbHRlcnsgJF8tPntTZW5kZXJUeXBlSUR9IH0gfSBAQXJ0aWNsZUJveEFsbDsKICAgIH0KCiAgICBpZiAoICRPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgQEFydGljbGVCb3hBbGwgPSByZXZlcnNlIEBBcnRpY2xlQm94QWxsOwogICAgfQoKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdzT2ZUaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIG15ICRBcnRpY2xlSUQ7CgogICAgaWYgKCAkU2VsZi0+e0FydGljbGVJRH0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlSURzID0gbWFwIHsgJF8tPntBcnRpY2xlSUR9IH0gQEFydGljbGVCb3hBbGw7CgogICAgICAgIG15ICVBcnRpY2xlSW5kZXg7CiAgICAgICAgQEFydGljbGVJbmRleHtAQXJ0aWNsZUlEc30gPSAoIDAgLi4gJCNBcnRpY2xlSURzICk7CgogICAgICAgIG15ICRJbmRleCA9ICRBcnRpY2xlSW5kZXh7ICRTZWxmLT57QXJ0aWNsZUlEfSB9OwogICAgICAgICRJbmRleCAvLz0gMDsKICAgICAgICAkUGFnZSA9IGludCggJEluZGV4IC8gJExpbWl0ICkgKyAxOwogICAgfQogICAgZWxzaWYgKCRBcnRpY2xlUGFnZSkgewogICAgICAgICRQYWdlID0gJEFydGljbGVQYWdlOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgRmluZCBsYXRlc3Qgbm90IHNlZW4gYXJ0aWNsZS4KICAgICAgICBBUlRJQ0xFOgogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3hBbGwpIHsKCiAgICAgICAgICAgICMgSWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZS4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IH0gZXEgJ3N5c3RlbScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgJEFydGljbGVGbGFnc3sgJEFydGljbGUtPntBcnRpY2xlSUR9IH0tPntTZWVufTsKICAgICAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKCiAgICAgICAgICAgIG15IEBBcnRpY2xlSURzID0gbWFwIHsgJF8tPntBcnRpY2xlSUR9IH0gQEFydGljbGVCb3hBbGw7CgogICAgICAgICAgICBteSAlQXJ0aWNsZUluZGV4OwogICAgICAgICAgICBAQXJ0aWNsZUluZGV4e0BBcnRpY2xlSURzfSA9ICggMCAuLiAkI0FydGljbGVJRHMgKTsKCiAgICAgICAgICAgIG15ICRJbmRleCA9ICRBcnRpY2xlSW5kZXh7JEFydGljbGVJRH07CiAgICAgICAgICAgICRQYWdlID0gaW50KCAkSW5kZXggLyAkTGltaXQgKSArIDE7CgogICAgICAgICAgICBsYXN0IEFSVElDTEU7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewogICAgICAgICAgICAkUGFnZSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgV2UgbmVlZCB0byBmaW5kIG91dCB3aGV0aGVyIHBhZ2luYXRpb24gaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LgogICAgIyBUaGUgZWFzaWVzdCB3YXkgd291bGQgYmUgY291bnQgdGhlIGFydGljbGVzLCBidXQgdGhhdCB3b3VsZCBzbG93CiAgICAjIGRvd24gdGhlIG1vc3QgY29tbW9uIGNhc2UgKGZld2VyIGFydGljbGVzIHRoYW4gJExpbWl0IGluIHRoZSB0aWNrZXQpLgogICAgIyBTbyBpbnN0ZWFkIHdlIHVzZSB0aGUgZm9sbG93aW5nIHRyaWNrOgogICAgIyAxKSBpZiB0aGUgJFBhZ2UgPiAxLCB3ZSBuZWVkIHBhZ2luYXRpb24KICAgICMgMikgaWYgbm90LCByZXF1ZXN0ICRMaW1pdCArIDEgYXJ0aWNsZXMuIElmICRMaW1pdCArIDEgYXJlIGFjdHVhbGx5CiAgICAjICAgIHJldHVybmVkLCBwYWdpbmF0aW9uIGlzIG5lY2Vzc2FyeQogICAgbXkgJE5lZWRQYWdpbmF0aW9uOwoKICAgIG15IEBBcnRpY2xlQm94ID0gJFNlbGYtPl9BcnRpY2xlQm94R2V0KAogICAgICAgIFBhZ2UgICAgICAgICAgPT4gJFBhZ2UsCiAgICAgICAgQXJ0aWNsZUJveEFsbCA9PiBcQEFydGljbGVCb3hBbGwsCiAgICAgICAgTGltaXQgICAgICAgICA9PiAkTGltaXQsCiAgICApOwoKICAgIGlmICggIUBBcnRpY2xlQm94ICYmICRQYWdlID4gMSApIHsKCiAgICAgICAgIyBJZiB0aGUgcGFnZSBhcmd1bWVudCBpcyBwYXN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHBhZ2VzLgogICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBuZXcgYXJ0aWNsZSBmaWx0ZXIgd2FzIGFkZGVkLgogICAgICAgICMgVHJ5IHRvIGdldCByZXN1bHRzIGZvciB0aGUgMXN0IHBhZ2UuCgogICAgICAgIEBBcnRpY2xlQm94ID0gJFNlbGYtPl9BcnRpY2xlQm94R2V0KAogICAgICAgICAgICBQYWdlICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEFydGljbGVCb3hBbGwgPT4gXEBBcnRpY2xlQm94QWxsLAogICAgICAgICAgICBMaW1pdCAgICAgICAgID0+ICRMaW1pdCwKICAgICAgICApOwogICAgfQoKICAgIGlmICggQEFydGljbGVCb3ggPiAkTGltaXQgKSB7CiAgICAgICAgcG9wIEBBcnRpY2xlQm94OwogICAgICAgICROZWVkUGFnaW5hdGlvbiA9IDE7CiAgICB9CiAgICBlbHNpZiAoICRQYWdlID09IDEgJiYgc2NhbGFyIEBBcnRpY2xlQm94QWxsIDw9ICRMaW1pdCApIHsKICAgICAgICAkTmVlZFBhZ2luYXRpb24gPSAwOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE5lZWRQYWdpbmF0aW9uID0gMTsKICAgIH0KCiAgICAkUGFnZSB8fD0gMTsKCiAgICBteSAkUGFnZXM7CiAgICBpZiAoJE5lZWRQYWdpbmF0aW9uKSB7CiAgICAgICAgJFBhZ2VzID0gY2VpbCggc2NhbGFyIEBBcnRpY2xlQm94QWxsIC8gJExpbWl0ICk7CiAgICB9CgogICAgbXkgJEFydGljbGVJREZvdW5kID0gMDsKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlQm94KSB7CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkU2VsZi0+e0FydGljbGVJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZS0+e0FydGljbGVJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICRTZWxmLT57QXJ0aWNsZUlEfSBuZSAkQXJ0aWNsZS0+e0FydGljbGVJRH07CgogICAgICAgICRBcnRpY2xlSURGb3VuZCA9IDE7CiAgICB9CgogICAgIyBnZXQgc2VsZWN0ZWQgb3IgbGFzdCBjdXN0b21lciBhcnRpY2xlCiAgICBpZiAoJEFydGljbGVJREZvdW5kKSB7CiAgICAgICAgJEFydGljbGVJRCA9ICRTZWxmLT57QXJ0aWNsZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgIGlmIChAQXJ0aWNsZUJveCkgewoKICAgICAgICAgICAgICAgICMgc2V0IGZpcnN0IGxpc3RlZCBhcnRpY2xlIGFzIGZhbGxiYWNrCiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVCb3hbMF0tPntBcnRpY2xlSUR9OwoKICAgICAgICAgICAgICAgICMgc2V0IGxhc3QgY3VzdG9tZXIgYXJ0aWNsZSBhcyBzZWxlY3RlZCBhcnRpY2xlIHJlcGxhY2luZyBsYXN0IHNldAogICAgICAgICAgICAgICAgQVJUSUNMRVRNUDoKICAgICAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlVG1wLT57U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH07CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRVRNUCBpZiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSBlcSAncmV2ZXJzZSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgZXhwYW5kIHZpZXcgaXMgdXNhYmxlIChvbmx5IGZvciBsZXNzIHRoZW4gNDAwIGFydGljbGUpCiAgICAjIGlmIHlvdSBoYXZlIG1vcmUgYXJ0aWNsZXMgaXMgZ29pbmcgdG8gYmUgc2xvdyBhbmQgbm90IHVzYWJsZQogICAgbXkgJEFydGljbGVNYXhMaW1pdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWF4QXJ0aWNsZXNab29tRXhwYW5kJykKICAgICAgICAvLyA0MDA7CiAgICBpZiAoICRTZWxmLT57Wm9vbUV4cGFuZH0gJiYgJCNBcnRpY2xlQm94ID4gJEFydGljbGVNYXhMaW1pdCApIHsKICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgIH0KCiAgICAjIGdldCBzaG93biBhcnRpY2xlKHMpCiAgICBteSBAQXJ0aWNsZUJveFNob3duOwogICAgaWYgKCAhJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICBBUlRJQ0xFQk9YOgogICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUlEIGVxICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVCb3hTaG93biwgJEFydGljbGVUbXA7CiAgICAgICAgICAgICAgICBsYXN0IEFSVElDTEVCT1g7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBAQXJ0aWNsZUJveFNob3duID0gQEFydGljbGVCb3g7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGFnZSBkZXNpZ24KICAgICRUaWNrZXR7QWdlfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgIEFnZSAgID0+ICRUaWNrZXR7QWdlfSwKICAgICAgICBTcGFjZSA9PiAnICcKICAgICk7CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICVXaWRnZXRzOwogICAgbXkgJUFzeW5jV2lkZ2V0QWN0aW9uczsKICAgIFdJREdFVDoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9IC8vIHt9IH0gKSB7CiAgICAgICAgbXkgJENvbmZpZyA9ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9LT57JEtleX07CgogICAgICAgIGlmICggJENvbmZpZy0+e0FzeW5jfSApIHsKICAgICAgICAgICAgaWYgKCAhJENvbmZpZy0+e0xvY2F0aW9ufSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBjb25maWd1cmF0aW9uIGZvciAkQ29uZmlnLT57TW9kdWxlfSBtdXN0IGNvbnRhaW4gYSBMb2NhdGlvbiwgYmVjYXVzZSBpdCBpcyBtYXJrZWQgYXMgQXN5bmMuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkRWxlbWVudElEID0gJ0FzeW5jXycgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRLZXkpOwogICAgICAgICAgICBwdXNoIEB7ICRXaWRnZXRzeyAkQ29uZmlnLT57TG9jYXRpb259IH0gfSwgewogICAgICAgICAgICAgICAgQXN5bmMgPT4gMSwKICAgICAgICAgICAgICAgIFJhbmsgID0+ICRDb25maWctPntSYW5rfSB8fCAkS2V5LAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkRWxlbWVudElELAogICAgICAgICAgICB9OwogICAgICAgICAgICAkQXN5bmNXaWRnZXRBY3Rpb25zeyRFbGVtZW50SUR9ID0gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUxvYWRXaWRnZXQ7IgogICAgICAgICAgICAgICAgLiAiVGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07RWxlbWVudElEPSRFbGVtZW50SUQiOwogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSBldmFsIHsgJE1haW5PYmplY3QtPlJlcXVpcmUoICRDb25maWctPntNb2R1bGV9ICkgfTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRTdWNjZXNzOwoKICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoJSRTZWxmKSB9OwogICAgICAgIGlmICggISRNb2R1bGUgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJuZXcoKSBvZiBXaWRnZXQgbW9kdWxlICRDb25maWctPntNb2R1bGV9IG5vdCBzdWNjZXNzZnVsISIsCgogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBXSURHRVQ7CiAgICAgICAgfQoKICAgICAgICBteSAkV2lkZ2V0T3V0cHV0ID0gJE1vZHVsZS0+UnVuKAogICAgICAgICAgICBUaWNrZXQgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIEFjbEFjdGlvbiA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgQ29uZmlnICAgID0+ICRDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRXaWRnZXRPdXRwdXQ7CgogICAgICAgICRXaWRnZXRPdXRwdXQtPntSYW5rfSAvLz0gJEtleTsKICAgICAgICBteSAkTG9jYXRpb24gPSAkV2lkZ2V0T3V0cHV0LT57TG9jYXRpb259IHx8ICRDb25maWctPntMb2NhdGlvbn07CiAgICAgICAgcHVzaCBAeyAkV2lkZ2V0c3skTG9jYXRpb259IH0sICRXaWRnZXRPdXRwdXQ7CiAgICB9CiAgICBmb3IgbXkgJExvY2F0aW9uICggc29ydCBrZXlzICVXaWRnZXRzICkgewogICAgICAgICRQYXJhbXsgJExvY2F0aW9uIC4gJ1dpZGdldHMnIH0gPSBbCiAgICAgICAgICAgIHNvcnQgeyAkYS0+e1Jhbmt9IGNtcCAkYi0+e1Jhbmt9IH0gQHsgJFdpZGdldHN7JExvY2F0aW9ufSB9CiAgICAgICAgXTsKICAgIH0KICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQXN5bmNXaWRnZXRBY3Rpb25zJywKICAgICAgICBWYWx1ZSA9PiBcJUFzeW5jV2lkZ2V0QWN0aW9ucywKICAgICk7CgogICAgIyBzZXQgZGlzcGxheSBvcHRpb25zCiAgICAkUGFyYW17SG9va30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6SG9vaycpIHx8ICdUaWNrZXQjJzsKCiAgICAjIG9ubHkgc2hvdyBhcnRpY2xlIHRyZWUgaWYgYXJ0aWNsZXMgYXJlIHByZXNlbnQsCiAgICAjIG9yIGlmIGEgZmlsdGVyIGlzIHNldCAoc28gdGhhdCB0aGUgdXNlciBoYXMgdGhlIG9wdGlvbiB0bwogICAgIyBkaXNhYmxlIHRoZSBmaWx0ZXIpCiAgICBpZiAoIEBBcnRpY2xlQm94IHx8ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gKSB7CgogICAgICAgIG15ICRQYWdpbmF0aW9uOwoKICAgICAgICBpZiAoJE5lZWRQYWdpbmF0aW9uKSB7CiAgICAgICAgICAgICRQYWdpbmF0aW9uID0gewogICAgICAgICAgICAgICAgUGFnZXMgICAgICAgPT4gJFBhZ2VzLAogICAgICAgICAgICAgICAgQ3VycmVudFBhZ2UgPT4gJFBhZ2UsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBhcnRpY2xlIHRyZWUKICAgICAgICAkUGFyYW17QXJ0aWNsZVRyZWV9ID0gJFNlbGYtPl9BcnRpY2xlVHJlZSgKICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIEFydGljbGVGbGFncyAgICAgID0+IFwlQXJ0aWNsZUZsYWdzLAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICBBcnRpY2xlTWF4TGltaXQgICA9PiAkQXJ0aWNsZU1heExpbWl0LAogICAgICAgICAgICBBcnRpY2xlQm94ICAgICAgICA9PiBcQEFydGljbGVCb3gsCiAgICAgICAgICAgIFBhZ2luYXRpb24gICAgICAgID0+ICRQYWdpbmF0aW9uLAogICAgICAgICAgICBQYWdlICAgICAgICAgICAgICA9PiAkUGFnZSwKICAgICAgICAgICAgQXJ0aWNsZUNvdW50ICAgICAgPT4gc2NhbGFyIEBBcnRpY2xlQm94LAogICAgICAgICAgICBBY2xBY3Rpb24gICAgICAgICA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgU3RhbmRhcmRSZXNwb25zZXMgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0Fuc3dlcn0sCiAgICAgICAgICAgIFN0YW5kYXJkRm9yd2FyZHMgID0+ICRTdGFuZGFyZFRlbXBsYXRlc3tGb3J3YXJkfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBhcnRpY2xlcyBpdGVtcwogICAgaWYgKCAhJFNlbGYtPntab29tVGltZWxpbmV9ICkgewoKICAgICAgICBteSBAQXJ0aWNsZUlEczsKICAgICAgICAkUGFyYW17QXJ0aWNsZUl0ZW1zfSA9ICcnOwoKICAgICAgICBteSAkQXJ0aWNsZVdpZGdldHNIVE1MID0gJyc7CgogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveFNob3duKSB7CiAgICAgICAgICAgIG15ICVBcnRpY2xlID0gJSRBcnRpY2xlVG1wOwoKICAgICAgICAgICAgJEFydGljbGVXaWRnZXRzSFRNTCAuPSAkU2VsZi0+X0FydGljbGVJdGVtKAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgICAgICBBcnRpY2xlICAgICAgICAgICA9PiBcJUFydGljbGUsCiAgICAgICAgICAgICAgICBBY2xBY3Rpb24gICAgICAgICA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIFN0YW5kYXJkUmVzcG9uc2VzID0+ICRTdGFuZGFyZFRlbXBsYXRlc3tBbnN3ZXJ9LAogICAgICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICAgICAgICAgQWN0dWFsQXJ0aWNsZUlEICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgID0+ICdTdGF0aWMnLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBBcnRpY2xlSURzLCAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH07CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBcQEFydGljbGVJRHMsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdNZW51SXRlbXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e01lbnVJdGVtc30sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte0FydGljbGVJdGVtc30gLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIEFydGljbGVXaWRnZXRzSFRNTCA9PiAkQXJ0aWNsZVdpZGdldHNIVE1MLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBhbHdheXMgc2hvdyBhcmNoaXZlZCB0aWNrZXRzIGFzIHNlZW4KICAgIGlmICggJFNlbGYtPntab29tRXhwYW5kfSAmJiAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0SXRlbU1hcmtBc1NlZW4nLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBudW1iZXIgb2YgYXJ0aWNsZXMKICAgICRQYXJhbXtBcnRpY2xlQ291bnR9ID0gc2NhbGFyIEBBcnRpY2xlQm94OwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0hlYWRlcicsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgKTsKCiAgICBteSAlQWN0aW9uTG9va3VwOwogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgcnVuIHRpY2tldCBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICBteSAlTWVudXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgIG15ICVNZW51Q2x1c3RlcnM7CiAgICAgICAgbXkgJVpvb21NZW51SXRlbXM7CgogICAgICAgIE1FTlU6CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1lbnVzeyRNZW51fS0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICBteSAkSXRlbSA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFDTCAgICA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIENvbmZpZyA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IE1FTlUgaWYgISRJdGVtOwogICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntQb3B1cFR5cGV9ICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAiQXNQb3B1cCBQb3B1cFR5cGVfJE1lbnVzeyRNZW51fS0+e1BvcHVwVHlwZX0iOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntBY3Rpb259ICkgewogICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHsgJE1lbnVzeyRNZW51fS0+e0FjdGlvbn0gfSA9IHsKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAkSXRlbS0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICRJdGVtLT57Q2xhc3N9LAogICAgICAgICAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICRJdGVtLT57TGlua1BhcmFtfSwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiAkSXRlbS0+e0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkSXRlbS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCAkSXRlbS0+e05hbWV9ICksCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICEkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9ICkgewoKICAgICAgICAgICAgICAgICRab29tTWVudUl0ZW1zeyRNZW51fSA9ICRJdGVtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIGNvbmZpZ3VyZWQgcHJpb3JpdHkgZm9yIHRoaXMgaXRlbS4gVGhlIGxvd2VzdCBDbHVzdGVyUHJpb3JpdHkKICAgICAgICAgICAgICAgICMgd2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIgd2lucy4KICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eSA9ICRNZW51Q2x1c3RlcnN7ICRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gfS0+e1ByaW9yaXR5fSB8fCAwOwogICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJQcmlvcml0eX0gfHw9IDA7CiAgICAgICAgICAgICAgICBpZiAoICEkUHJpb3JpdHkgfHwgJFByaW9yaXR5ICF+IC9eXGR7M30kLyB8fCAkUHJpb3JpdHkgPiAkTWVudXN7JE1lbnV9LT57Q2x1c3RlclByaW9yaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAkUHJpb3JpdHkgPSAkTWVudXN7JE1lbnV9LT57Q2x1c3RlclByaW9yaXR5fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRNZW51Q2x1c3RlcnN7ICRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gfS0+e1ByaW9yaXR5fSA9ICRQcmlvcml0eTsKICAgICAgICAgICAgICAgICRNZW51Q2x1c3RlcnN7ICRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gfS0+e0l0ZW1zfS0+eyRNZW51fSA9ICRJdGVtOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJENsdXN0ZXIgKCBzb3J0IGtleXMgJU1lbnVDbHVzdGVycyApIHsKICAgICAgICAgICAgJFpvb21NZW51SXRlbXN7ICRNZW51Q2x1c3RlcnN7JENsdXN0ZXJ9LT57UHJpb3JpdHl9IC4gJENsdXN0ZXIgfSA9IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDbHVzdGVyLAogICAgICAgICAgICAgICAgVHlwZSAgPT4gJ0NsdXN0ZXInLAogICAgICAgICAgICAgICAgTGluayAgPT4gJyMnLAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0NsdXN0ZXJMaW5rJywKICAgICAgICAgICAgICAgIEl0ZW1zID0+ICRNZW51Q2x1c3RlcnN7JENsdXN0ZXJ9LT57SXRlbXN9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBkaXNwbGF5IGFsbCBpdGVtcwogICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlWm9vbU1lbnVJdGVtcyApIHsKICAgICAgICAgICAgaWYgKCAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntFeHRlcm5hbExpbmt9ICYmICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0V4dGVybmFsTGlua30gPT0gMSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldE1lbnVFeHRlcm5hbExpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldE1lbnUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntUeXBlfSBlcSAnQ2x1c3RlcicgKSB7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudVN1YkNvbnRhaW5lcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBtYXAgb2YgcHJpb3JpdGllcyB2ZXJzdXMgc3ViaXRlbXMgYmFzZWQgb24gdGhlIENsdXN0ZXJQcmlvcml0eSBvZiBlYWNoIHN1Yml0ZW0KICAgICAgICAgICAgICAgICMgdGhlIHNldHRpbmdzIGtleSBvcmRlciBwcmV2YWlscyBiZXR3ZWVuIHN1Yml0ZW1zIHdpdGggZXF1YWwgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICAjIHByaW9yaXRpZXMgYXJlIGFsd2F5cyBhcHBlbmRlZCBhIHNlcXVlbnRpYWwgc3VmZml4IG9mIHR3byBkaWdpdHMgKDgwMC0wMSwgODAwLTAyLCA4MDAtMDMsIGV0Yy4pCiAgICAgICAgICAgICAgICAjIHRoaXMgZW5mb3JjZXMgZGlzdGluY3QgbWFwIGtleXMgZXZlbiBhbW9uZyBzdWJpdGVtcyB3aXRoIHRoZSBzYW1lIENsdXN0ZXJQcmlvcml0eQogICAgICAgICAgICAgICAgbXkgJVByaW9yaXR5U3VmZml4ZXM7CiAgICAgICAgICAgICAgICBteSAlTWFwUHJpb3JpdHlUb1N1Ykl0ZW07CiAgICAgICAgICAgICAgICBmb3IgbXkgJFN1Ykl0ZW0gKCBzb3J0IGtleXMgJXsgJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEl0ZW1Qcmlvcml0eSA9ICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0l0ZW1zfS0+eyRTdWJJdGVtfS0+e0NsdXN0ZXJQcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9Kys7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGVuZm9yY2UgdGhlIHR3byBkaWdpdHMgc3VmZml4LCBzaW5jZSAxMCBvciBtb3JlIHN1Yml0ZW1zIGFyZSBwb3NzaWJsZQogICAgICAgICAgICAgICAgICAgIGlmICggJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gPX4gL15cZCQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSA9ICIwIiAuICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5S2V5ID0gJEl0ZW1Qcmlvcml0eSAuICItIiAuICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9OwogICAgICAgICAgICAgICAgICAgICRNYXBQcmlvcml0eVRvU3ViSXRlbXskUHJpb3JpdHlLZXl9ID0gJFN1Ykl0ZW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZW5kZXIgc3ViaXRlbXMgYWNjb3JkaW5nIHRvIHRoZSBwcmlvcml0aWVzIG1hcAogICAgICAgICAgICAgICAgZm9yIG15ICRQcmlvcml0eUtleSAoIHNvcnQga2V5cyAlTWFwUHJpb3JpdHlUb1N1Ykl0ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Ykl0ZW0gPSAkTWFwUHJpb3JpdHlUb1N1Ykl0ZW17JFByaW9yaXR5S2V5fTsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudVN1YkNvbnRhaW5lckl0ZW0nLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0l0ZW1zfS0+eyRTdWJJdGVtfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IE1vdmVRdWV1ZXNTdHJnCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TW92ZVR5cGUnKSA9fiAvXmZvcm0kL2kgKSB7CiAgICAgICAgJE1vdmVRdWV1ZXN7MH0gICAgICAgICA9ICctICcgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ01vdmUnKSAuICcgLSc7CiAgICAgICAgJFBhcmFte01vdmVRdWV1ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkFnZW50UXVldWVMaXN0T3B0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRGVzdFF1ZXVlSUQnLAogICAgICAgICAgICBUcmVlVmlldyAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnID8gMSA6IDAsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+IFwlTW92ZVF1ZXVlcywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ01vZGVybml6ZSBTbWFsbCcsCiAgICAgICAgICAgIEN1cnJlbnRRdWV1ZUlEID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIG15ICVBY2xBY3Rpb25Mb29rdXAgPSByZXZlcnNlICVBY2xBY3Rpb247CiAgICBpZiAoCiAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudFRpY2tldE1vdmV9CiAgICAgICAgJiYgKCAkQWNsQWN0aW9uTG9va3Vwe0FnZW50VGlja2V0TW92ZX0gKQogICAgICAgICkKICAgIHsKICAgICAgICBteSAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ21vdmUnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRUaWNrZXR7VGlja2V0SUR9OwogICAgICAgIGlmICgkQWNjZXNzKSB7CiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNb3ZlVHlwZScpID1+IC9eZm9ybSQvaSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ01vdmVMaW5rJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlQWNsQWN0aW9uIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW92ZUZvcm0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVBY2xBY3Rpb24gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRNb3ZlfSA9IHsKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICdBY3Rpb249QWdlbnRUaWNrZXRNb3ZlO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV0nLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgICAgICBMaW5rUGFyYW0gICAgICA9PiAnJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+IFRyYW5zbGF0YWJsZSgnQ2hhbmdlIFF1ZXVlJyksCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1F1ZXVlJyksCiAgICAgICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnUXVldWUnKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayBpZiBBZ2VudFRpY2tldENvbXBvc2UgYW5kIEFnZW50VGlja2V0Rm9yd2FyZCBhcmUgYWxsb3dlZCBhcyBhY3Rpb24gKGZvciBkaXNwbGF5IG9mIEZvcm1EcmFmdHMpLgogICAgbXkgJUFjdGlvbkNvbmZpZyA9ICgKICAgICAgICBBZ2VudFRpY2tldENvbXBvc2UgPT4gewogICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnQWN0aW9uPUFnZW50VGlja2V0Q29tcG9zZTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiBUcmFuc2xhdGFibGUoJ1JlcGx5JyksCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUmVwbHknKSwKICAgICAgICAgICAgVHJhbnNsYXRlZE5hbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoJ1JlcGx5JyksCiAgICAgICAgfSwKICAgICAgICBBZ2VudFRpY2tldEZvcndhcmQgPT4gewogICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnQWN0aW9uPUFnZW50VGlja2V0Rm9yd2FyZDtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiBUcmFuc2xhdGFibGUoJ0ZvcndhcmQgYXJ0aWNsZSB2aWEgbWFpbCcpLAogICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0ZvcndhcmQnKSwKICAgICAgICAgICAgVHJhbnNsYXRlZE5hbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoJ0ZvcndhcmQnKSwKICAgICAgICB9LAogICAgKTsKICAgIEFDVElPTjoKICAgIGZvciBteSAkQWN0aW9uIChxdyhBZ2VudFRpY2tldENvbXBvc2UgQWdlbnRUaWNrZXRGb3J3YXJkKSkgewogICAgICAgIG5leHQgQUNUSU9OIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwogICAgICAgIG5leHQgQUNUSU9OIGlmICEkQWNsQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGlja2V0OjpGcm9udGVuZDo6JyAuICRBY3Rpb24gKTsKICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgbmV4dCBBQ1RJT04gaWYgISRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRBY3Rpb25Mb29rdXB7JEFjdGlvbn0gPSAkQWN0aW9uQ29uZmlneyRBY3Rpb259OwogICAgfQoKICAgICMgR2V0IGFuZCBzaG93IGF2YWlsYWJsZSBGb3JtRHJhZnRzLgogICAgbXkgJVNob3duRm9ybURyYWZ0RW50cmllczsKICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRMaXN0R2V0KAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRm9ybURyYWZ0TGlzdCkgKSB7CiAgICAgICAgRm9ybURyYWZ0OgogICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CiAgICAgICAgICAgIG5leHQgRm9ybURyYWZ0IGlmICEkQWN0aW9uTG9va3VweyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9OwoKICAgICAgICAgICAgcHVzaCBAeyAkU2hvd25Gb3JtRHJhZnRFbnRyaWVzeyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9IH0sICRGb3JtRHJhZnQ7CiAgICAgICAgfQogICAgfQogICAgaWYgKCVTaG93bkZvcm1EcmFmdEVudHJpZXMpIHsKCiAgICAgICAgbXkgJExhc3RBcnRpY2xlOwogICAgICAgIGlmICggJE9yZGVyIGVxICdERVNDJyApIHsKICAgICAgICAgICAgJExhc3RBcnRpY2xlID0gJEFydGljbGVCb3hBbGxbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGFzdEFydGljbGUgPSAkQXJ0aWNsZUJveEFsbFstMV07CiAgICAgICAgfQoKICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lOwogICAgICAgIGlmICggJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgPSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCk7CiAgICAgICAgfQoKICAgICAgICBteSBARm9ybURyYWZ0czsKCiAgICAgICAgZm9yIG15ICRBY3Rpb24gKAogICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7JGF9LT57VHJhbnNsYXRlZE5hbWV9CiAgICAgICAgICAgICAgICAgICAgY21wCiAgICAgICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHskYn0tPntUcmFuc2xhdGVkTmFtZX0KICAgICAgICAgICAgfSBrZXlzICVTaG93bkZvcm1EcmFmdEVudHJpZXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEFjdGlvbkRhdGEgPSAkQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5ICgKICAgICAgICAgICAgICAgIHNvcnQgewogICAgICAgICAgICAgICAgICAgICRhLT57VGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIGNtcAogICAgICAgICAgICAgICAgICAgICAgICAkYi0+e1RpdGxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAgICAkYS0+e0Zvcm1EcmFmdElEfQogICAgICAgICAgICAgICAgICAgICAgICA8PT4KICAgICAgICAgICAgICAgICAgICAgICAgJGItPntGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgIH0gQHsgJFNob3duRm9ybURyYWZ0RW50cmllc3skQWN0aW9ufSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlQnl9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlQnl9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2hvd25Gb3JtRHJhZnRBY3Rpb25FbnRyeSA9IHsKICAgICAgICAgICAgICAgICAgICAleyRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5fSwKICAgICAgICAgICAgICAgICAgICAleyRBY3Rpb25EYXRhfSwKCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHB1c2ggQEZvcm1EcmFmdHMsICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRm9ybURyYWZ0VGFibGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEZvcm1EcmFmdHMgPT4gXEBGb3JtRHJhZnRzLAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBjcmVhdGVkIGJ5IGlmIGRpZmZlcmVudCB0aGVuIFVzZXIgSUQgMQogICAgaWYgKCAkVGlja2V0e0NyZWF0ZUJ5fSA+IDEgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICAgICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgICAgICRUaWNrZXR7Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoIFVzZXJJRCA9PiAkVGlja2V0e0NyZWF0ZUJ5fSApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDcmVhdGVkQnknLAogICAgICAgICAgICBEYXRhID0+IHslVGlja2V0fSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBubyBhcnRpY2xlcyBibG9jayBpZiB0aWNrZXQgZG9lcyBub3QgY29udGFpbiBhcnRpY2xlcwogICAgaWYgKCAhQEFydGljbGVCb3ggJiYgISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGludE5vQXJ0aWNsZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgaXMgbm9ybWFsIG9yIHByb2Nlc3MgdGlja2V0CiAgICBteSAkSXNQcm9jZXNzVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q2hlY2tGb3JQcm9jZXNzVHlwZSgKICAgICAgICAnVGlja2V0SUQnID0+ICRTZWxmLT57VGlja2V0SUR9CiAgICApOwoKICAgICMgY29sbGVjdCBkYXRhIGZvciBvdmVydmlldyB3aWRnZXQKICAgIG15ICVXaWRnZXREYXRhOwogICAgaWYgKCAkSXNQcm9jZXNzVGlja2V0IHx8ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fSApIHsKICAgICAgICAlV2lkZ2V0RGF0YSA9ICRJc1Byb2Nlc3NUaWNrZXQKICAgICAgICAgICAgPyAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e1Byb2Nlc3NEaXNwbGF5fSwKICAgICAgICAgICAgICAgIFdpZGdldFRpdGxlICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc0Rpc3BsYXl9e1dpZGdldFRpdGxlfSwKICAgICAgICAgICAgICAgIFdpZGdldER5bmFtaWNGaWVsZEdyb3VwcyA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldERpc3BsYXl9LAogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgICAgICAgICAgICAgID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fXtXaWRnZXRUaXRsZX0sCiAgICAgICAgICAgICAgICBXaWRnZXREeW5hbWljRmllbGRHcm91cHMgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCgogICAgICAgICAgICApOwoKICAgICAgICAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKQogICAgICAgICAgICAtPnsgKCAkSXNQcm9jZXNzVGlja2V0ID8gJ1Byb2Nlc3NXaWRnZXREeW5hbWljRmllbGQnIDogJ0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZCcgKSB9IC8vIHt9OwogICAgfQoKICAgICMgZGVjaWRlIGlmIHdpZGdldCBzaG91bGQgYmUgc2hvd24KICAgIG15ICRTaG93V2lkZ2V0ID0gMDsKCiAgICAjIGFsd2F5cyBzaG93IGlmIHdlIGhhdmUgYSBwcm9jZXNzIHRpY2tldCBmb3IgYWN0aXZpdHkgZGlhbG9ncwogICAgaWYgKCRJc1Byb2Nlc3NUaWNrZXQpIHsKICAgICAgICAkU2hvd1dpZGdldCA9IDE7CiAgICB9CgogICAgIyBlbHNlIHNob3cgb25seSBpZiBkeW5hbWljIGZpZWxkcyBhcmUgZGVmaW5lZCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaGFzIGEgdmFsdWUKICAgIGVsc2lmICggSXNIYXNoUmVmV2l0aERhdGEoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH0gKSApIHsKICAgICAgICBERlZBTFVFOgogICAgICAgIGZvciBteSAkRmllbGROYW1lICgga2V5cyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBERlZBTFVFIHVubGVzcyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9eyRGaWVsZE5hbWV9OwogICAgICAgICAgICBuZXh0IERGVkFMVUUgdW5sZXNzICRUaWNrZXR7IkR5bmFtaWNGaWVsZF8kRmllbGROYW1lIn07CgogICAgICAgICAgICAkU2hvd1dpZGdldCA9IDE7CgogICAgICAgICAgICBsYXN0IERGVkFMVUU7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBvdmVydmlldyB3aWRnZXQgd2l0aCBlaXRoZXIgZHluYW1pYyBmaWVsZCBkYXRhIG9yIHdpdGggcHJvY2VzcyBhbmQgYWN0aXZpdHkgZGlhbG9nIGRhdGEKICAgIGlmICgkU2hvd1dpZGdldCkgewoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ092ZXJ2aWV3V2lkZ2V0JywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB0aGUgb3ZlcnZpZXcgd2lkZ2V0IGluIHRoZSBtYWluIHNjcmVlbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgPT4gJFdpZGdldERhdGF7V2lkZ2V0VGl0bGV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY29sbGVjdCBhbmQgcmVuZGVyIHByb2Nlc3MgZGF0YSBpZiBuZWNlc3NhcnkKICAgICAgICBteSAkQWN0aXZpdHlOYW1lOwogICAgICAgIG15ICROZXh0QWN0aXZpdHlEaWFsb2dzOwogICAgICAgIG15ICRQcm9jZXNzRW50aXR5SURGaWVsZDsKICAgICAgICBpZiAoJElzUHJvY2Vzc1RpY2tldCkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIERGIHdoZXJlIHRoZSBQcm9jZXNzRW50aXR5SUQgaXMgc3RvcmVkCiAgICAgICAgICAgICRQcm9jZXNzRW50aXR5SURGaWVsZCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50UHJvY2Vzc0lEIik7CgogICAgICAgICAgICAjIGdldCB0aGUgREYgd2hlcmUgdGhlIEF0aXZpdHlFbnRpdHlJRCBpcyBzdG9yZWQKICAgICAgICAgICAgbXkgJEFjdGl2aXR5RW50aXR5SURGaWVsZCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50QWN0aXZpdHlJRCIpOwoKICAgICAgICAgICAgbXkgJEFjdGl2aXR5RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHknKS0+QWN0aXZpdHlHZXQoCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICRUaWNrZXR7JEFjdGl2aXR5RW50aXR5SURGaWVsZH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBuZXh0IGFjdGl2aXR5IGRpYWxvZ3MKICAgICAgICAgICAgaWYgKCAkVGlja2V0eyRBY3Rpdml0eUVudGl0eUlERmllbGR9ICkgewogICAgICAgICAgICAgICAgJE5leHRBY3Rpdml0eURpYWxvZ3MgPSAke0FjdGl2aXR5RGF0YX0tPntBY3Rpdml0eURpYWxvZ30gfHwge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEFjdGl2aXR5TmFtZSA9ICRBY3Rpdml0eURhdGEtPntOYW1lfTsKICAgICAgICB9CgogICAgICAgIGlmICgkTmV4dEFjdGl2aXR5RGlhbG9ncykgewoKICAgICAgICAgICAgIyBnZXQgQWN0aXZpdHlEaWFsb2cgb2JqZWN0CiAgICAgICAgICAgIG15ICRBY3Rpdml0eURpYWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKTsKCiAgICAgICAgICAgICMgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgbmVlZGVkIHBlcm1pc3Npb25zIHRvIHZpZXcgdGhlCiAgICAgICAgICAgICMgZGlmZmVyZW50IGFjdGl2aXR5IGRpYWxvZ3MsIHNvIHdlIGxvb3Agb3ZlciBldmVyeSBhY3Rpdml0eSBkaWFsb2cgYW5kIGNoZWNrIGlmIHRoZXJlCiAgICAgICAgICAgICMgaXMgYSBwZXJtaXNzaW9uIGNvbmZpZ3VyZWQuIElmIHRoZXJlIGlzIGEgcGVybWlzc2lvbiBjb25maWd1cmVkIHdlIGNoZWNrIHRoaXMKICAgICAgICAgICAgIyBhbmQgZGlzcGxheS9oaWRlIHRoZSBhY3Rpdml0eSBkaWFsb2cgbGluawogICAgICAgICAgICBteSAlUGVybWlzc2lvblJpZ2h0czsKICAgICAgICAgICAgbXkgJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3Q7CiAgICAgICAgICAgIEFDVElWSVRZRElBTE9HUEVSTUlTU0lPTjoKICAgICAgICAgICAgZm9yIG15ICRJbmRleCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JE5leHRBY3Rpdml0eURpYWxvZ3N9ICkgewogICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskSW5kZXh9OwogICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRBY3Rpdml0eURpYWxvZyAgICAgICAgID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQ3VycmVudEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgYW4gaW50ZXJmYWNlIGxvb2t1cC1saXN0CiAgICAgICAgICAgICAgICBteSAlSW50ZXJmYWNlTG9va3VwID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRDdXJyZW50QWN0aXZpdHlEaWFsb2ctPntJbnRlcmZhY2V9IH07CgogICAgICAgICAgICAgICAgbmV4dCBBQ1RJVklUWURJQUxPR1BFUk1JU1NJT04gaWYgISRJbnRlcmZhY2VMb29rdXB7QWdlbnRJbnRlcmZhY2V9OwoKICAgICAgICAgICAgICAgIGlmICggJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHBlcmZvcm1hbmNlLWJvb3N0L2NhY2hlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGVybWlzc2lvblJpZ2h0c3sgJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uUmlnaHRzeyAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57UGVybWlzc2lvbn0gfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggISRQZXJtaXNzaW9uUmlnaHRzeyAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57UGVybWlzc2lvbn0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBQ1RJVklUWURJQUxPR1BFUk1JU1NJT047CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uQWN0aXZpdHlEaWFsb2dMaXN0eyRJbmRleH0gPSAkQ3VycmVudEFjdGl2aXR5RGlhbG9nRW50aXR5SUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVkdWNlIG5leHQgYWN0aXZpdHkgZGlhbG9ncyB0byB0aGUgb25lcyB0aGF0IGhhdmUgcGVybWlzc2lvbnMKICAgICAgICAgICAgJE5leHRBY3Rpdml0eURpYWxvZ3MgPSBcJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3Q7CgogICAgICAgICAgICAjIGdldCBBQ0wgcmVzdHJpY3Rpb25zCiAgICAgICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUGVybWlzc2lvbkFjdGl2aXR5RGlhbG9nTGlzdCwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGl2aXR5RGlhbG9nJywKICAgICAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJEFDTCkgewogICAgICAgICAgICAgICAgJXskTmV4dEFjdGl2aXR5RGlhbG9nc30gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTmV4dEFjdGl2aXR5RGlhbG9ncycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAnQWN0aXZpdHlOYW1lJyA9PiAkQWN0aXZpdHlOYW1lLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJE5leHRBY3Rpdml0eURpYWxvZ3MpICkgewogICAgICAgICAgICAgICAgZm9yIG15ICROZXh0QWN0aXZpdHlEaWFsb2dLZXkgKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyROZXh0QWN0aXZpdHlEaWFsb2dzfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkQWN0aXZpdHlEaWFsb2dEYXRhID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JE5leHRBY3Rpdml0eURpYWxvZ0tleX0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiBkaXJlY3Qgc3VibWl0IGlzIGFjdGl2ZSBmb3IgdGhpcyBhY3Rpdml0eSBkaWFsb2cKICAgICAgICAgICAgICAgICAgICBteSAkRGlyZWN0U3VibWl0ID0gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e0RpcmVjdFN1Ym1pdH07CiAgICAgICAgICAgICAgICAgICAgaWYgKCBhbnkgeyAkQWN0aXZpdHlEaWFsb2dEYXRhLT57RmllbGRzfXskX317RGlzcGxheX0gfSBrZXlzICRBY3Rpdml0eURpYWxvZ0RhdGEtPntGaWVsZHN9LT4lKiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERpcmVjdFN1Ym1pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJERpcmVjdFN1Ym1pdCkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGl2aXR5RGlhbG9nRGlyZWN0U3VibWl0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskTmV4dEFjdGl2aXR5RGlhbG9nS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e1N1Ym1pdEJ1dHRvblRleHR9IHx8ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFRpY2tldHskUHJvY2Vzc0VudGl0eUlERmllbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGl2aXR5RGlhbG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskTmV4dEFjdGl2aXR5RGlhbG9nS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkVGlja2V0eyRQcm9jZXNzRW50aXR5SURGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0FjdGl2aXR5RGlhbG9ncycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgICAgICBteSAkRHluYW1pY0ZpZWxkRmlsdGVyID0gewogICAgICAgICAgICAleyAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpLT57RHluYW1pY0ZpZWxkfSB8fCB7fSB9LAogICAgICAgICAgICAlewogICAgICAgICAgICAgICAgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkfSB8fCB7fQogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICAgICAgKTsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAgICAgIyB0byBzdG9yZSBkeW5hbWljIGZpZWxkcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG92ZXJ2aWV3IHdpZGdldAogICAgICAgIG15IChARmllbGRzV2lkZ2V0KTsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIWRlZmluZWQgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IGVxICcnOwoKICAgICAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgbXkgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9ICk7CgogICAgICAgICAgICBpZiAoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAoKICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNXaWRnZXQsIHsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5ICAgICAgICAgICAgICAgICAgICA9PiAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZHluYW1pYyBmaWVsZCBsb29rdXAgaGFzaCBmb3Igd2lkZ2V0IGdyb3VwcwogICAgICAgIG15ICVEeW5hbWljRmllbGRMb29rdXAgPSBtYXAgeyAoICRfLT57TmFtZX0gPT4gJF8gKSB9ICREeW5hbWljRmllbGQtPkAqOwoKICAgICAgICAjIG91dHB1dCBkeW5hbWljIGZpZWxkcyByZWdpc3RlcmVkIGZvciBhIGdyb3VwIGluIHRoZSBvdmVydmlldyB3aWRnZXQKICAgICAgICBteSBARmllbGRzSW5BR3JvdXA7CiAgICAgICAgZm9yIG15ICRHcm91cE5hbWUgKAogICAgICAgICAgICBzb3J0IGtleXMgJXsgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRHcm91cEZpZWxkc1N0cmluZyA9ICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc317JEdyb3VwTmFtZX07CgogICAgICAgICAgICAkR3JvdXBGaWVsZHNTdHJpbmcgPX4gc3tcc317fXhtc2c7CiAgICAgICAgICAgIG15IEBHcm91cEZpZWxkcyA9IHNwbGl0IC8sLywgJEdyb3VwRmllbGRzU3RyaW5nOwoKICAgICAgICAgICAgaWYgKCAkI0dyb3VwRmllbGRzICsgMSApIHsKCiAgICAgICAgICAgICAgICBteSAkU2hvd0dyb3VwVGl0bGUgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoQEZpZWxkc1dpZGdldCkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkRmllbGQtPntOYW1lfSB9IEBHcm91cEZpZWxkcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRTaG93R3JvdXBUaXRsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRERkNvbmZpZyA9ICREeW5hbWljRmllbGRMb29rdXB7ICRGaWVsZC0+e05hbWV9IH07CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNldCBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRERkNvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ1NldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXRGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBASW5jbHVkZWRGaWVsZHMgPSAkU2VsZi0+X0dldEluY2x1ZGVkRmllbGRPcmRlcmVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgPT4gJERGQ29uZmlnLT57Q29uZmlnfXtJbmNsdWRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRWYWx1ZUluZGV4ICggMCAuLiAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZUl0ZW0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9WyRWYWx1ZUluZGV4XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJbmNsdWRlRmllbGQgKEBJbmNsdWRlZEZpZWxkcykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEluY2x1ZGVERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkSW5jbHVkZUZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkSW5jbHVkZURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZUl0ZW0tPnsgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUluY2x1ZGVGaWVsZCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlREZDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgICAgICAgICA9PiAkSW5jbHVkZURGQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kSW5jbHVkZURGQ29uZmlnLT57TmFtZX0iID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRJbmNsdWRlRmllbGR7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEluY2x1ZGVGaWVsZHtMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRJbmNsdWRlREZDb25maWctPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5jbHVkZUZpZWxke05hbWV9ID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlVGlja2V0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRJbmNsdWRlRmllbGR7TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ID0+ICRJbmNsdWRlRmllbGR7TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kSW5jbHVkZUZpZWxke05hbWV9IiA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEZpZWxkc0luQUdyb3VwLCAkRmllbGQtPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkVmFsdWVJbmRleCAhPSAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhbmRhcmQgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFuZGFyZEZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWVsZC0+e05hbWV9ID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRUaXRsZSA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRGaWVsZC0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgPT4gJEZpZWxkLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRmllbGQtPntOYW1lfSIgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNJbkFHcm91cCwgJEZpZWxkLT57TmFtZX07CgogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJFNob3dHcm91cFRpdGxlKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBkeW5hbWljIGZpZWxkcyBub3QgcmVnaXN0ZXJlZCBpbiBhIGdyb3VwIGluIHRoZSBvdmVydmlldyB3aWRnZXQKICAgICAgICBteSBAUmVtYWluaW5nRmllbGRzV2lkZ2V0OwogICAgICAgIGZvciBteSAkRmllbGQgKEBGaWVsZHNXaWRnZXQpIHsKCiAgICAgICAgICAgIGlmICggIWdyZXAgeyAkXyBlcSAkRmllbGQtPntOYW1lfSB9IEBGaWVsZHNJbkFHcm91cCApIHsKICAgICAgICAgICAgICAgIHB1c2ggQFJlbWFpbmluZ0ZpZWxkc1dpZGdldCwgJEZpZWxkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRHcm91cHMnLAogICAgICAgICk7CgogICAgICAgIGlmICggJCNSZW1haW5pbmdGaWVsZHNXaWRnZXQgKyAxICkgewoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwU2VwYXJhdG9yJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdGaWVsZHMgd2l0aCBubyBncm91cCcpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZm9yIG15ICRGaWVsZCAoQFJlbWFpbmluZ0ZpZWxkc1dpZGdldCkgewoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAoJERGQ29uZmlnKSA9IGdyZXAgeyAkXy0+e05hbWV9IGVxICRGaWVsZC0+e05hbWV9IH0gJER5bmFtaWNGaWVsZC0+QCo7CgogICAgICAgICAgICAjIHNldCBmaWVsZAogICAgICAgICAgICBpZiAoICRERkNvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ1NldCcgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXRGaWVsZCcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSBASW5jbHVkZWRGaWVsZHMgPSAkU2VsZi0+X0dldEluY2x1ZGVkRmllbGRPcmRlcmVkKAogICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgPT4gJERGQ29uZmlnLT57Q29uZmlnfXtJbmNsdWRlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRWYWx1ZUluZGV4ICggMCAuLiAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZUl0ZW0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9WyRWYWx1ZUluZGV4XTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJbmNsdWRlRmllbGQgKEBJbmNsdWRlZEZpZWxkcykgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEluY2x1ZGVERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkSW5jbHVkZUZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkSW5jbHVkZURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZUl0ZW0tPnsgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUluY2x1ZGVGaWVsZCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlREZDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgICAgICAgICA9PiAkSW5jbHVkZURGQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kSW5jbHVkZURGQ29uZmlnLT57TmFtZX0iID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRJbmNsdWRlRmllbGR7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEluY2x1ZGVGaWVsZHtMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRJbmNsdWRlREZDb25maWctPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5jbHVkZUZpZWxke05hbWV9ID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlVGlja2V0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRJbmNsdWRlRmllbGR7TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ID0+ICRJbmNsdWRlRmllbGR7TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kSW5jbHVkZUZpZWxke05hbWV9IiA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEZpZWxkc0luQUdyb3VwLCAkRmllbGQtPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVmFsdWVJbmRleCAhPSAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RhbmRhcmQgZmllbGQKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFuZGFyZEZpZWxkJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXInLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWVsZC0+e05hbWV9ID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRUaXRsZSA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRGaWVsZC0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgPT4gJEZpZWxkLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRmllbGQtPntOYW1lfSIgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNJbkFHcm91cCwgJEZpZWxkLT57TmFtZX07CgogICAgICAgICAgICB9CgogICAgICAgIH0KICAgIH0KCiAgICAjIGFydGljbGUgZmlsdGVyIGlzIGFjdGl2YXRlZCBpbiBzeXNjb25maWcKICAgIGlmICggJFNlbGYtPntBcnRpY2xlRmlsdGVyQWN0aXZlfSApIHsKCiAgICAgICAgaWYgKCAkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgICAgICAjIGJ1aWxkIGV2ZW50IHR5cGUgbGlzdCBmb3IgZmlsdGVyIGRpYWxvZwogICAgICAgICAgICAkUGFyYW17RXZlbnRUeXBlRmlsdGVyU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gJFNlbGYtPntIaXN0b3J5VHlwZU1hcHBpbmd9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9LT57RXZlbnRUeXBlSUR9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0V2ZW50VHlwZUZpbHRlcicsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgICAgIEtleSAgID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0V2ZW50VHlwZUZpbHRlckRpYWxvZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgIG15IEBDb21tdW5pY2F0aW9uQ2hhbm5lbHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKS0+Q2hhbm5lbExpc3QoCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQ2hhbm5lbHMgPSBtYXAgeyAkXy0+e0NoYW5uZWxJRH0gPT4gJF8tPntEaXNwbGF5TmFtZX0gfSBAQ29tbXVuaWNhdGlvbkNoYW5uZWxzOwoKICAgICAgICAgICAgIyBidWlsZCBhcnRpY2xlIHR5cGUgbGlzdCBmb3IgZmlsdGVyIGRpYWxvZwogICAgICAgICAgICAkUGFyYW17Q2hhbm5lbHN9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJUNoYW5uZWxzLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0NvbW11bmljYXRpb25DaGFubmVsRmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBhcmFte0N1c3RvbWVyVmlzaWJpbGl0eX0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIDAgPT4gVHJhbnNsYXRhYmxlKCdJbnZpc2libGUgb25seScpLAogICAgICAgICAgICAgICAgICAgIDEgPT4gVHJhbnNsYXRhYmxlKCdWaXNpYmxlIG9ubHknKSwKICAgICAgICAgICAgICAgICAgICAyID0+IFRyYW5zbGF0YWJsZSgnVmlzaWJsZSBhbmQgaW52aXNpYmxlJyksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX0gLy8gMiwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgc2VuZGVyIHR5cGVzCiAgICAgICAgICAgIG15ICVBcnRpY2xlU2VuZGVyVHlwZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlbmRlclR5cGVMaXN0KCk7CgogICAgICAgICAgICAjIGJ1aWxkIGFydGljbGUgc2VuZGVyIHR5cGUgbGlzdCBmb3IgZmlsdGVyIGRpYWxvZwogICAgICAgICAgICAkUGFyYW17QXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJTdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJUFydGljbGVTZW5kZXJUeXBlcywKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntBcnRpY2xlU2VuZGVyVHlwZUlEfSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcicsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgVGlja2V0IElECiAgICAgICAgICAgICRQYXJhbXtUaWNrZXRJRH0gPSAkU2VsZi0+e1RpY2tldElEfTsKCiAgICAgICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgICAgIEtleSAgID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgbmVlZCB0byBiZSBtYXJrZWQgYXMgc2VlbgogICAgbXkgJEFydGljbGVBbGxTZWVuID0gMTsKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlQm94KSB7CgogICAgICAgICMgaWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZQogICAgICAgIG5leHQgQVJUSUNMRQogICAgICAgICAgICBpZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlLT57U2VuZGVyVHlwZUlEfSB9IGVxICdzeXN0ZW0nOwoKICAgICAgICAjIGxhc3QgQVJUSUNMRSBpZiBhcnRpY2xlIHdhcyBub3Qgc2hvd24KICAgICAgICBpZiAoICEkQXJ0aWNsZUZsYWdzeyAkQXJ0aWNsZS0+e0FydGljbGVJRH0gfS0+e1NlZW59ICkgewogICAgICAgICAgICAkQXJ0aWNsZUFsbFNlZW4gPSAwOwogICAgICAgICAgICBsYXN0IEFSVElDTEU7CiAgICAgICAgfQogICAgfQoKICAgICMgbWFyayB0aWNrZXQgYXMgc2VlbiBpZiBhbGwgYXJ0aWNsZSBhcmUgc2hvd24KICAgIGlmICgkQXJ0aWNsZUFsbFNlZW4pIHsKICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRGbGFnU2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgS2V5ICAgICAgPT4gJ1NlZW4nLAogICAgICAgICAgICBWYWx1ZSAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdBcnRpY2xlVGFibGVIZWlnaHQnLAogICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyVGlja2V0Wm9vbUFydGljbGVUYWJsZUhlaWdodH0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodERlZmF1bHQnLAogICAgICAgIFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SFRNTEFydGljbGVIZWlnaHREZWZhdWx0JyksCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodE1heCcsCiAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodE1heCcpLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnTGFuZ3VhZ2UnLAogICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgQXR0YWNobWVudFZpZXdNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgKICAgICAgICAgICAgICAgICdBcnRpY2xlIGNvdWxkIG5vdCBiZSBvcGVuZWQhIFBlcmhhcHMgaXQgaXMgb24gYW5vdGhlciBhcnRpY2xlIHBhZ2U/JwogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICApOwoKICAgICMgaW5pdCBqcwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnVGlja2V0Wm9vbUluaXQnLAogICAgKTsKCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7ICVQYXJhbSwgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgKTsKfQoKc3ViIF9BcnRpY2xlVHJlZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVUaWNrZXQgICAgICAgPSAleyAkUGFyYW17VGlja2V0fSB9OwogICAgbXkgJUFydGljbGVGbGFncyA9ICV7ICRQYXJhbXtBcnRpY2xlRmxhZ3N9IH07CiAgICBteSBAQXJ0aWNsZUJveCAgID0gQHsgJFBhcmFte0FydGljbGVCb3h9IH07CiAgICBteSAkQXJ0aWNsZUlEICAgID0gJFBhcmFte0FydGljbGVJRH07CiAgICBteSAkVGFibGVDbGFzc2VzOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBidWlsZCB0aHJlYWQgc3RyaW5nCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUcmVlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBUYWJsZUNsYXNzZXMgPT4gJFRhYmxlQ2xhc3NlcywKICAgICAgICAgICAgWm9vbVRpbWVsaW5lID0+ICRTZWxmLT57Wm9vbVRpbWVsaW5lfSwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRQYXJhbXtQYWdpbmF0aW9ufSAmJiAhJFNlbGYtPntab29tVGltZWxpbmV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlUGFnZXMnLAogICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtQYWdpbmF0aW9ufSwKICAgICAgICApOwogICAgfQoKICAgIG15IEBBcnRpY2xlVmlld3MgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ29sbGFwc2UnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1Nob3cgb25lIGFydGljbGUnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0V4cGFuZCcsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnU2hvdyBhbGwgYXJ0aWNsZXMnKSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIEFkZCB0aW1lbGluZSB2aWV3IG9wdGlvbiBvbmx5IGlmIGVuYWJsZWQuCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpICkgewogICAgICAgIHB1c2ggQEFydGljbGVWaWV3cywgewogICAgICAgICAgICBLZXkgICA9PiAnVGltZWxpbmUnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1Nob3cgVGlja2V0IFRpbWVsaW5lIFZpZXcnKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRBcnRpY2xlVmlld1NlbGVjdGVkID0gJ0NvbGxhcHNlJzsKICAgIGlmICggJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICAkQXJ0aWNsZVZpZXdTZWxlY3RlZCA9ICdFeHBhbmQnOwogICAgfQogICAgZWxzaWYgKCAkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CiAgICAgICAgJEFydGljbGVWaWV3U2VsZWN0ZWQgPSAnVGltZWxpbmUnOwogICAgfQoKICAgIG15ICRBcnRpY2xlVmlld1N0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcQEFydGljbGVWaWV3cywKICAgICAgICBTZWxlY3RlZElEICA9PiAkQXJ0aWNsZVZpZXdTZWxlY3RlZCwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FydGljbGVWaWV3JywKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBTZW5kIGRhdGEgdG8gSlMuCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVWaWV3U3RyZycsCiAgICAgICAgVmFsdWUgPT4gJEFydGljbGVWaWV3U3RyZywKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1pvb21FeHBhbmQnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57Wm9vbUV4cGFuZH0sCiAgICApOwoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICAjIGRlZmluZSBoaWdobGlnaHQgc3R5bGUgZm9yIGxpbmtzIGlmIGZpbHRlciBpcyBhY3RpdmUKICAgICAgICBteSAkSGlnaGxpZ2h0U3R5bGUgPSAnbWVudSc7CiAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9ICkgewogICAgICAgICAgICAkSGlnaGxpZ2h0U3R5bGUgPSAnUHJpb3JpdHlJRC01JzsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgYXJ0aWNsZSBmaWx0ZXIgbGlua3MKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEhpZ2hsaWdodFN0eWxlID0+ICRIaWdobGlnaHRTdHlsZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGFydGljbGUgZmlsdGVyIHJlc2V0IGxpbmsgb25seSBpZiBmaWx0ZXIgaXMgc2V0CiAgICAgICAgaWYgKAogICAgICAgICAgICAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gJiYgSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gKSApCiAgICAgICAgICAgIHx8ICggJFNlbGYtPntab29tVGltZWxpbmV9ICYmICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUZpbHRlclJlc2V0TGluaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRDb25maWdPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIENyZWF0ZSBhIGxpc3Qgb2YgYXJ0aWNsZSBzZW5kZXIgdHlwZXMgZm9yIGxvb2t1cAogICAgbXkgJUFydGljbGVTZW5kZXJUeXBlTGlzdCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VuZGVyVHlwZUxpc3QoKTsKCiAgICAjIHNob3cgYXJ0aWNsZSB0cmVlCiAgICBpZiAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlTGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgWm9vbUV4cGFuZFNvcnRPcmRlciA9PiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSBlcSAncmV2ZXJzZScgPyAnRGVzY2VuZGluZycgOiAnQXNjZW5kaW5nJywKICAgICAgICAgICAgICAgIFRhYmxlQ2xhc3NlcyAgICAgICAgPT4gJFRhYmxlQ2xhc3NlcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBBUlRJQ0xFOgogICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAlJEFydGljbGVUbXA7CgogICAgICAgICAgICAjIGFydGljbGUgZmlsdGVyIGlzIGFjdGl2YXRlZCBpbiBzeXNjb25maWcgYW5kIHRoZXJlIGFyZSBhcnRpY2xlcwogICAgICAgICAgICAjIHRoYXQgcGFzc2VkIHRoZSBmaWx0ZXIKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9ICYmICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntTaG93bkFydGljbGVJRHN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBzaG93IGFydGljbGUgaW4gdHJlZSBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e1Nob3duQXJ0aWNsZUlEc30tPnsgJEFydGljbGV7QXJ0aWNsZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgYXJ0aWNsZSBmbGFncwogICAgICAgICAgICBteSAkQ2xhc3MgICAgICA9ICcnOwogICAgICAgICAgICBteSAkQ2xhc3NSb3cgICA9ICcnOwogICAgICAgICAgICBteSAkTmV3QXJ0aWNsZSA9IDA7CgogICAgICAgICAgICAjIGlnbm9yZSBzeXN0ZW0gc2VuZGVyIHR5cGVzCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkQXJ0aWNsZUZsYWdzeyAkQXJ0aWNsZXtBcnRpY2xlSUR9IH0tPntTZWVufQogICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICAgICAgICAgfHwgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xle1NlbmRlclR5cGVJRH0gfSBuZSAnc3lzdGVtJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkTmV3QXJ0aWNsZSA9IDE7CgogICAgICAgICAgICAgICAgIyBzaG93IHRpY2tldCBmbGFncwoKICAgICAgICAgICAgICAgICMgYWx3YXlzIHNob3cgYXJjaGl2ZWQgdGlja2V0cyBhcyBzZWVuCiAgICAgICAgICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgICAgLj0gJyBVbnJlYWRBcnRpY2xlcyc7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzUm93IC49ICcgVW5yZWFkQXJ0aWNsZXMnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMganVzdCBzaG93IHRpY2tldCBmbGFncyBpZiBhZ2VudCBiZWxvbmdzIHRvIHRoZSB0aWNrZXQKICAgICAgICAgICAgICAgIG15ICRTaG93TWV0YTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtPd25lcklEfQogICAgICAgICAgICAgICAgICAgIHx8ICRTZWxmLT57VXNlcklEfSA9PSAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRTaG93TWV0YSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICEkU2hvd01ldGEgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OldhdGNoZXInKSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlV2F0Y2ggPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRXYXRjaEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkV2F0Y2h7ICRTZWxmLT57VXNlcklEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2hvd01ldGEgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNob3cgdGlja2V0IGZsYWdzCiAgICAgICAgICAgICAgICBpZiAoJFNob3dNZXRhKSB7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzIC49ICcgUmVtYXJrYWJsZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgLj0gJyBPcmRpbmFyeSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgdGhpcyBpcyB0aGUgc2hvd24gYXJ0aWNsZSAtPT4gc2V0IGNsYXNzIHRvIGFjdGl2ZQogICAgICAgICAgICBpZiAoICRBcnRpY2xlSUQgZXEgJEFydGljbGV7QXJ0aWNsZUlEfSAmJiAhJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICAgICAgICAgICRDbGFzc1JvdyAuPSAnIEFjdGl2ZSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRUbXBTdWJqZWN0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdENsZWFuKAoKICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgPT4gJEFydGljbGV7U3ViamVjdH0gfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQXJ0aWNsZUZpZWxkcyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVGaWVsZHMoCiAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBHZXQgdHJhbnNtaXNzaW9uIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgZW1haWwgYXJ0aWNsZXMuCiAgICAgICAgICAgIG15ICRUcmFuc21pc3Npb25TdGF0dXM7CiAgICAgICAgICAgIGlmICggJEFydGljbGV7Q2hhbm5lbE5hbWV9ICYmICRBcnRpY2xle0NoYW5uZWxOYW1lfSBlcSAnRW1haWwnICkgewogICAgICAgICAgICAgICAgJFRyYW5zbWlzc2lvblN0YXR1cyA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVUcmFuc21pc3Npb25TdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNob3cgYWxzbyBleHBhbmQvY29sbGFwc2UgaWNvbgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICAgICAgICAgIEFydGljbGVGaWVsZHMgICAgICA9PiBcJUFydGljbGVGaWVsZHMsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICBDbGFzc1JvdyAgICAgICAgICAgPT4gJENsYXNzUm93LAogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICA9PiAkVG1wU3ViamVjdCwKICAgICAgICAgICAgICAgICAgICBUcmFuc21pc3Npb25TdGF0dXMgPT4gJFRyYW5zbWlzc2lvblN0YXR1cywKICAgICAgICAgICAgICAgICAgICBab29tRXhwYW5kICAgICAgICAgPT4gJFNlbGYtPntab29tRXhwYW5kfSwKICAgICAgICAgICAgICAgICAgICBab29tRXhwYW5kU29ydCAgICAgPT4gJFNlbGYtPntab29tRXhwYW5kU29ydH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSBmbGFncwogICAgICAgICAgICAjIEFsd2F5cyB1c2UgdXNlciBpZCAxIGJlY2F1c2Ugb3RoZXIgdXNlcnMgYWxzbyBoYXZlIHRvIHNlZSB0aGUgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgbXkgJUFydGljbGVJbXBvcnRhbnRGbGFncyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUltcG9ydGFudEZsYWdze0ltcG9ydGFudH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbUltcG9ydGFudEFydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgojIFJvdGhlck9TUyAvIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKI1RPRE86IHdoZW4gbWVyZ2luZyB0byBDb3JlLCBpcyB0aGVyZSBhIHdheSB0byBtYWtlIGFkZGluZyBuZXcgZmxhZ3MgZWFzaWVyPwoKICAgICAgICAgICAgIyBzaG93IHBpbm5lZCBmbGFnCiAgICAgICAgICAgIGlmICggJEFydGljbGVJbXBvcnRhbnRGbGFnc3tQaW5uZWR9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW1QaW5uZWRBcnRpY2xlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKIyBFTyBBZ2VudFRpY2tldEFydGljbGVQaW4KCiAgICAgICAgICAgICMgYWx3YXlzIHNob3cgYXJjaGl2ZWQgdGlja2V0cyBhcyBzZWVuCiAgICAgICAgICAgIGlmICggJE5ld0FydGljbGUgJiYgJFRpY2tldHtBcmNoaXZlRmxhZ30gbmUgJ3knICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW1OZXdBcnRpY2xlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKIyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KIwojICAgICAgICAgICAgIyBCdWdmaXggZm9yIElFNzogYSB0YWJsZSBjZWxsIHNob3VsZCBub3QgYmUgZW1wdHkKIyAgICAgICAgICAgICMgKGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjZWxsIGJvcmRlcnMgYXJlIG5vdCBzaG93bik6CiMgICAgICAgICAgICAjIHdlIGFkZCBhbiBlbXB0eSBlbGVtZW50IGhlcmUKIyAgICAgICAgICAgIGVsc2UgewojICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAojICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbU5vTmV3QXJ0aWNsZScsCiMgICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiMgICAgICAgICAgICAgICAgKTsKIyAgICAgICAgICAgIH0KIwojIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKICAgICAgICAgICAgIyBEZXRlcm1pbmUgY29tbXVuaWNhdGlvbiBkaXJlY3Rpb24uCiAgICAgICAgICAgIGlmICggJEFydGljbGV7Q2hhbm5lbE5hbWV9IGVxICdJbnRlcm5hbCcgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25JbnRlcm5hbCcgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xle1NlbmRlclR5cGVJRH0gfSBlcSAnY3VzdG9tZXInICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1RyZWVJdGVtRGlyZWN0aW9uSW5jb21pbmcnICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZycgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleCAoZXhjbHVkaW5nIGJvZHkgYXR0YWNobWVudHMpLgogICAgICAgICAgICBteSAlQXRtSW5kZXg7CgogICAgICAgICAgICBpZiAoICEkQXJ0aWNsZXtBcnRpY2xlRGVsZXRlZH0gfHwgJFNlbGYtPntBcnRpY2xlU3RvcmFnZX0gPX4gbS9BcnRpY2xlU3RvcmFnZUZTLyApIHsKICAgICAgICAgICAgICAgICVBdG1JbmRleCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfSwKICAgICAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAlQXRtSW5kZXggPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoJUFydGljbGUpLT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEFydGljbGV7RGVsZXRlZFZlcnNpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgU291cmNlQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfSwKICAgICAgICAgICAgICAgICAgICBWZXJzaW9uVmlldyAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgJXsgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9IH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEFydGljbGV7QXRtc30gPSBcJUF0bUluZGV4OwoKICAgICAgICAgICAgIyBzaG93IGF0dGFjaG1lbnQgaW5mbwogICAgICAgICAgICAjIEJ1Z2ZpeCBmb3IgSUU3OiBhIHRhYmxlIGNlbGwgc2hvdWxkIG5vdCBiZSBlbXB0eQogICAgICAgICAgICAjIChiZWNhdXNlIG90aGVyd2lzZSB0aGUgY2VsbCBib3JkZXJzIGFyZSBub3Qgc2hvd24pOgogICAgICAgICAgICAjIHdlIGFkZCBhbiBlbXB0eSBlbGVtZW50IGhlcmUKICAgICAgICAgICAgaWYgKCAhJEFydGljbGV7QXRtc30gfHwgISV7ICRBcnRpY2xle0F0bXN9IH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbU5vQXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgIG15ICRBdHRhY2htZW50cyA9ICRTZWxmLT5fQ29sbGVjdEFydGljbGVBdHRhY2htZW50cygKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW1BdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50cyA9PiAkQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRpbWVsaW5lIHZpZXcKICAgIGVsc2UgewoKICAgICAgICAjIGdldCB0aWNrZXQgaGlzdG9yeQogICAgICAgIG15IEBIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFydGljbGVzIGZvciBsYXRlciB1c2UKICAgICAgICBteSBAVGltZWxpbmVBcnRpY2xlQm94ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEFydGljbGVJdGVtIChAVGltZWxpbmVBcnRpY2xlQm94KSB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgICAgICV7JEFydGljbGVJdGVtfSwKICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZUl0ZW0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgUmVhbE5hbWVzICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBBcHBlbmQgYXJ0aWNsZSBtZXRhIGRhdGEuCiAgICAgICAgICAgICRBcnRpY2xlSXRlbSA9IHsKICAgICAgICAgICAgICAgICV7JEFydGljbGVJdGVtfSwKICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgbXkgJEFydGljbGVzQnlBcnRpY2xlSUQgPSB7fTsKICAgICAgICBmb3IgbXkgJEFydGljbGUgKCBzb3J0IEBUaW1lbGluZUFydGljbGVCb3ggKSB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgICAgICV7JEFydGljbGV9LAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICAgICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEFydGljbGUtPntBdG1zfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcJUF0bUluZGV4OwogICAgICAgICAgICAkQXJ0aWNsZS0+e0JhY2tlbmR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Q2hhbm5lbE5hbWVHZXQoKTsKICAgICAgICAgICAgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEFydGljbGUtPntBcnRpY2xlSUR9IH0gPSAkQXJ0aWNsZTsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlcmUgaXMgSFRNTCBib2R5IGF0dGFjaG1lbnQuCiAgICAgICAgICAgIG15ICVBdHRhY2htZW50SW5kZXhIVE1MQm9keSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBPbmx5SFRNTEJvZHkgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgKCAkQXJ0aWNsZS0+e0hUTUxCb2R5QXR0YWNobWVudElEfSApID0gc29ydCBrZXlzICVBdHRhY2htZW50SW5kZXhIVE1MQm9keTsKICAgICAgICB9CgogICAgICAgICMgZG8gbm90IGRpc3BsYXkgdGhlc2UgdHlwZXMKICAgICAgICBteSBAVHlwZXNEb2RnZSA9IHF3KAogICAgICAgICAgICBNaXNjCiAgICAgICAgICAgIEFyY2hpdmVGbGFnVXBkYXRlCiAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uCiAgICAgICAgICAgIFJlbW92ZQogICAgICAgICAgICBTdWJzY3JpYmUKICAgICAgICAgICAgVW5zdWJzY3JpYmUKICAgICAgICAgICAgU3lzdGVtUmVxdWVzdAogICAgICAgICAgICBTZW5kQWdlbnROb3RpZmljYXRpb24KICAgICAgICAgICAgU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uCiAgICAgICAgICAgIFNlbmRBdXRvUmVqZWN0CiAgICAgICAgKTsKCiAgICAgICAgIyBzb3J0IG91dCBub24tZmlsdGVyZWQgZXZlbnQgdHlwZXMgKGlmIGFwcGxpY2FibGUpCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0KICAgICAgICAgICAgJiYgSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0gKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBmb3IgbXkgJEV2ZW50VHlwZSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30gfSApIHsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkRXZlbnRUeXBlIG5lICdOZXdUaWNrZXQnICYmICFncmVwIHsgJF8gZXEgJEV2ZW50VHlwZSB9CiAgICAgICAgICAgICAgICAgICAgQHsgJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9LT57RXZlbnRUeXBlSUR9IH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAVHlwZXNEb2RnZSwgJEV2ZW50VHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB0eXBlcyB3aGljaCBjYW4gYmUgZGVzY3JpYmVkIGFzICdhY3Rpb24gb24gYSB0aWNrZXQnCiAgICAgICAgbXkgQFR5cGVzVGlja2V0QWN0aW9uID0gcXcoCiAgICAgICAgICAgIFNlcnZpY2VVcGRhdGUKICAgICAgICAgICAgU0xBVXBkYXRlCiAgICAgICAgICAgIFN0YXRlVXBkYXRlCiAgICAgICAgICAgIFNldFBlbmRpbmdUaW1lCiAgICAgICAgICAgIFVubG9jawogICAgICAgICAgICBMb2NrCiAgICAgICAgICAgIFJlc3BvbnNpYmxlVXBkYXRlCiAgICAgICAgICAgIE93bmVyVXBkYXRlCiAgICAgICAgICAgIEN1c3RvbWVyVXBkYXRlCiAgICAgICAgICAgIE5ld1RpY2tldAogICAgICAgICAgICBUaWNrZXRMaW5rQWRkCiAgICAgICAgICAgIFRpY2tldExpbmtEZWxldGUKICAgICAgICAgICAgVGlja2V0RHluYW1pY0ZpZWxkVXBkYXRlCiAgICAgICAgICAgIE1vdmUKICAgICAgICAgICAgTWVyZ2VkCiAgICAgICAgICAgIFByaW9yaXR5VXBkYXRlCiAgICAgICAgICAgIFRpdGxlVXBkYXRlCiAgICAgICAgICAgIFR5cGVVcGRhdGUKICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZU5vdGlmeUJlZm9yZQogICAgICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RhcnQKICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZVN0b3AKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZU5vdGlmeUJlZm9yZQogICAgICAgICAgICBFc2NhbGF0aW9uU29sdXRpb25UaW1lU3RhcnQKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0b3AKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVOb3RpZnlCZWZvcmUKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdGFydAogICAgICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0b3AKICAgICAgICAgICAgVGltZUFjY291bnRpbmcKICAgICAgICApOwoKICAgICAgICAjIHR5cGVzIHdoaWNoIGFyZSB1c3VhbGx5IGJlaW5nIGNvbm5lY3RlZCB0byBzb21lIGtpbmQgb2YKICAgICAgICAjIGF1dG9tYXRpYyBwcm9jZXNzIChlLmcuIHRyaWdnZXJlZCBieSBhbm90aGVyIGFjdGlvbikKICAgICAgICBteSBAVHlwZXNUaWNrZXRBdXRvQWN0aW9uID0gcXcoCiAgICAgICAgICAgIFNlbmRBdXRvRm9sbG93VXAKICAgICAgICAgICAgU2VuZEF1dG9SZWplY3QKICAgICAgICAgICAgU2VuZEF1dG9SZXBseQogICAgICAgICk7CgogICAgICAgICMgdHlwZXMgd2hpY2ggY2FuIGJlIGNvbnNpZGVyZWQgYXMgaW50ZXJuYWwKICAgICAgICBteSBAVHlwZXNJbnRlcm5hbCA9IHF3KAogICAgICAgICAgICBBZGROb3RlCiAgICAgICAgICAgIENoYXRJbnRlcm5hbAogICAgICAgICAgICBFbWFpbEFnZW50SW50ZXJuYWwKICAgICAgICApOwoKICAgICAgICAjIG91dGdvaW5nIHR5cGVzCiAgICAgICAgbXkgQFR5cGVzT3V0Z29pbmcgPSBxdygKICAgICAgICAgICAgQWRkU01TCiAgICAgICAgICAgIEZvcndhcmQKICAgICAgICAgICAgRW1haWxBZ2VudAogICAgICAgICAgICBQaG9uZUNhbGxBZ2VudAogICAgICAgICAgICBCb3VuY2UKICAgICAgICAgICAgU2VuZEFuc3dlcgogICAgICAgICk7CgogICAgICAgICMgaW5jb21pbmcgdHlwZXMKICAgICAgICBteSBAVHlwZXNJbmNvbWluZyA9IHF3KAogICAgICAgICAgICBFbWFpbEN1c3RvbWVyCiAgICAgICAgICAgIEFkZE5vdGVDdXN0b21lcgogICAgICAgICAgICBBZGRTTVNDdXN0b21lcgogICAgICAgICAgICBQaG9uZUNhbGxDdXN0b21lcgogICAgICAgICAgICBGb2xsb3dVcAogICAgICAgICAgICBXZWJSZXF1ZXN0Q3VzdG9tZXIKICAgICAgICAgICAgQ2hhdEV4dGVybmFsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFR5cGVzUmlnaHQgPSAoCiAgICAgICAgICAgIEBUeXBlc0luY29taW5nLAogICAgICAgICAgICBAVHlwZXNUaWNrZXRBY3Rpb24sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFR5cGVzV2l0aEFydGljbGVzID0gKAogICAgICAgICAgICBAVHlwZXNPdXRnb2luZywKICAgICAgICAgICAgQFR5cGVzSW50ZXJuYWwsCiAgICAgICAgICAgIEBUeXBlc0luY29taW5nLAogICAgICAgICAgICAnUGhvbmVDYWxsQ3VzdG9tZXInLAogICAgICAgICk7CgogICAgICAgIG15ICVIaXN0b3J5SXRlbXM7CiAgICAgICAgbXkgJEl0ZW1Db3VudGVyID0gMDsKICAgICAgICBteSAkTGFzdENyZWF0ZVRpbWU7CiAgICAgICAgbXkgJExhc3RDcmVhdGVTeXN0ZW1UaW1lOwoKICAgICAgICAjIEdldCBtYXBwaW5nIG9mIGhpc3RvcnkgdHlwZXMgdG8gcmVhZGFibGUgc3RyaW5ncwogICAgICAgIG15ICVIaXN0b3J5VHlwZXM7CiAgICAgICAgbXkgJUhpc3RvcnlUeXBlQ29uZmlnID0gJXsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpIaXN0b3J5VHlwZXMnKSAvLyB7fSB9OwogICAgICAgIGZvciBteSAkRW50cnkgKCBzb3J0IGtleXMgJUhpc3RvcnlUeXBlQ29uZmlnICkgewogICAgICAgICAgICAlSGlzdG9yeVR5cGVzID0gKAogICAgICAgICAgICAgICAgJUhpc3RvcnlUeXBlcywKICAgICAgICAgICAgICAgICV7ICRIaXN0b3J5VHlwZUNvbmZpZ3skRW50cnl9IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBISVNUT1JZSVRFTToKICAgICAgICBmb3IgbXkgJEl0ZW0gKCByZXZlcnNlIEBIaXN0b3J5TGluZXMgKSB7CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBjZXJ0YWluIHR5cGVzLCBlLmcuIGV4dGVybmFsIG5vdGVzIGZyb20gY3VzdG9tZXJzCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0FkZE5vdGUnCiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2N1c3RvbWVyJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlSW5jb21pbmcnOwoKICAgICAgICAgICAgICAgICMgV2UgZmFrZSBhIGN1c3RvbSBoaXN0b3J5IHR5cGUgYmVjYXVzZSBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycyBzdGlsbAogICAgICAgICAgICAgICAgIyBoYXZlIHRoZSBoaXN0b3J5IHR5cGUgJ0FkZE5vdGUnIHdoaWNoIGRvZXMgbm90IGFsbG93IGZvciBkaXN0aW5ndWlzaGluZy4KICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0FkZE5vdGVDdXN0b21lcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGNlcnRhaW4gdHlwZXMsIGUuZy4gZXh0ZXJuYWwgU01TIGZyb20gY3VzdG9tZXJzCiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0FkZFNNUycKICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnY3VzdG9tZXInCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CgogICAgICAgICAgICAgICAgIyBXZSBmYWtlIGEgY3VzdG9tIGhpc3RvcnkgdHlwZSBiZWNhdXNlIGV4dGVybmFsIG5vdGVzIGZyb20gY3VzdG9tZXJzIHN0aWxsCiAgICAgICAgICAgICAgICAjIGhhdmUgdGhlIGhpc3RvcnkgdHlwZSAnQWRkU01TJyB3aGljaCBkb2VzIG5vdCBhbGxvdyBmb3IgZGlzdGluZ3Vpc2hpbmcuCiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdBZGRTTVNDdXN0b21lcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGludGVybmFsIGVtYWlscwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdFbWFpbEFnZW50JwogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0VtYWlsJwogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2FnZW50JwogICAgICAgICAgICAgICAgJiYgISRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ICAgICAgID0gJ1R5cGVOb3RlSW50ZXJuYWwnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnRW1haWxBZ2VudEludGVybmFsJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgY2VydGFpbiB0eXBlcywgZS5nLiBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdDaGF0JwogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQ2hhdEV4dGVybmFsJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ICAgICAgID0gJ1R5cGVJbmNvbWluZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfSBlcSAnQ2hhdCcKICAgICAgICAgICAgICAgICYmICEkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdDaGF0SW50ZXJuYWwnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gICAgICAgPSAnVHlwZUludGVybmFsJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnRm9yd2FyZCcKICAgICAgICAgICAgICAgICYmICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0VtYWlsJwogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2FnZW50JwogICAgICAgICAgICAgICAgJiYgISRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlTm90ZUludGVybmFsJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGdyZXAgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1RpY2tldEFjdGlvbiApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVUaWNrZXRBY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzVGlja2V0QXV0b0FjdGlvbiApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVUaWNrZXRBdXRvQWN0aW9uJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGdyZXAgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc0ludGVybmFsICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU5vdGVJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNJbmNvbWluZyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNPdXRnb2luZyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVPdXRnb2luZyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzRG9kZ2UgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEhJU1RPUllJVEVNOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkSXRlbS0+e0NvdW50ZXJ9ID0gJEl0ZW1Db3VudGVyKys7CgogICAgICAgICAgICBpZiAoICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdOZXdUaWNrZXQnICkgewoKICAgICAgICAgICAgICAgICMgaWYgdGhlICdOZXdUaWNrZXQnIGl0ZW0gaGFzIGFuIGFydGljbGUsIGRpc3BsYXkgdGhpcyAiY3JlYXRpb24gYXJ0aWNsZSIgZXZlbnQgc2VwYXJhdGVseQogICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17SXRlbXN9IH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgICAgICAgICAgICAgPT4gJEl0ZW0tPntDb3VudGVyfSsrLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZVJlYWRhYmxlID0+IFRyYW5zbGF0YWJsZSgnVGlja2V0IENyZWF0ZWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50YXRpb24gICAgICAgICA9PiAnUmlnaHQnLAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdOZXdUaWNrZXQnOwogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e0FydGljbGVJRH07CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57TmFtZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtb3ZlIGFydGljbGUgaW5mb3JtYXRpb24gZnJvbSB0eXBlcyB3aGljaCBzaG91bGQgbm90IGRpc3BsYXkgYXJ0aWNsZXMKICAgICAgICAgICAgaWYgKCAhZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzV2l0aEFydGljbGVzICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSAoaWYgcHJlc2VudCkKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfSA9ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9OwoKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUZpZWxkc30gPSBcJUFydGljbGVGaWVsZHM7CgogICAgICAgICAgICAgICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgYW5kIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgICAgICBteSAkQmFja2VuZCA9ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH07CgogICAgICAgICAgICAgICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgYW5kIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZU1ldGFGaWVsZHMgPSAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRCYWNrZW5kIiktPkFydGljbGVNZXRhRmllbGRzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlTWV0YUZpZWxkc30gPSBcJUFydGljbGVNZXRhRmllbGRzOwoKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlQWN0aW9ucyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVBY3Rpb25zKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICA9PiAnT25Mb2FkJywKICAgICAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlUGxhaW59ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdwbGFpbicsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUhUTUx9ID0gJEtlcm5lbDo6T00tPkdldCgiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpbWVsaW5lVmlldzo6JEJhY2tlbmQiKS0+QXJ0aWNsZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUFjdGlvbnMgPT4gXEBBcnRpY2xlQWN0aW9ucywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIGVtcHR5IGxpbmVzCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVQbGFpbn0gPX4gc3teW1xuXHJdK317fXhtc2c7CgogICAgICAgICAgICAgICAgIyBNb2RpZnkgcGxhaW4gdGV4dCBhbmQgYm9keSB0byBhdm9pZCAnPC9zY3JpcHQ+JyB0YWcgaXNzdWUgKHNlZSBidWcjMTQwMjMpLgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlUGxhaW59ID1+IHN7PC9zY3JpcHQ+fXs8IyMjL3NjcmlwdD59eG1zZzsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57Qm9keX0gICAgICAgICA9fiBzezwvc2NyaXB0Pn17PCMjIy9zY3JpcHQ+fXhtc2c7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGVGbGFnc0FsbCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZUZsYWdzTWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdHZXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRJdGVtLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJc0ltcG9ydGFudH0gPSAkQXJ0aWNsZUZsYWdzQWxse0ltcG9ydGFudH07CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJc1NlZW59ICAgICAgPSAkQXJ0aWNsZUZsYWdzTWV7U2Vlbn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e05hbWV9ICYmICRJdGVtLT57TmFtZX0gPX4gbS9eJSUveCApIHsKCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9fiBzL14lJS8veGc7CiAgICAgICAgICAgICAgICAgICAgbXkgQFZhbHVlcyA9IHNwbGl0KCAvJSUveCwgJEl0ZW0tPntOYW1lfSApOwoKICAgICAgICAgICAgICAgICAgICAjIFNlZSBkb2N1bWVudGF0aW9uIGluIEFnZW50VGlja2V0SGlzdG9yeS5wbSwgbGluZSAxNDErCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnVGlja2V0RHluYW1pY0ZpZWxkVXBkYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcyA9ICggJFZhbHVlc1sxXSwgJFZhbHVlc1s1XSAvLyAnJywgJFZhbHVlc1szXSAvLyAnJyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdUeXBlVXBkYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcyA9ICggJFZhbHVlc1syXSwgJFZhbHVlc1szXSwgJFZhbHVlc1swXSwgJFZhbHVlc1sxXSApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlUeXBlc3sgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcywKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBub3QgbmVlZGVkIHBsYWNlIGhvbGRlcgogICAgICAgICAgICAgICAgICAgICRJdGVtLT57TmFtZX0gPX4gcy9cJXMvL3hnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG1ha2UgdGhlIGhpc3RvcnkgdHlwZSBtb3JlIHJlYWRhYmxlIChpZiBhcHBsaWNhYmxlKQogICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlUmVhZGFibGV9ID0gJFNlbGYtPntIaXN0b3J5VHlwZU1hcHBpbmd9LT57ICRJdGVtLT57SGlzdG9yeVR5cGV9IH0KICAgICAgICAgICAgICAgIHx8ICRJdGVtLT57SGlzdG9yeVR5cGV9OwoKICAgICAgICAgICAgIyBncm91cCBpdGVtcyB3aGljaCBoYXBwZW5lZCAobmVhcmx5KSBjb2luY2lkZW50YWxseSB0b2dldGhlcgogICAgICAgICAgICBteSAkQ3JlYXRlU3lzdGVtVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRJdGVtLT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9ID0gJENyZWF0ZVN5c3RlbVRpbWVPYmplY3QKICAgICAgICAgICAgICAgID8gJENyZWF0ZVN5c3RlbVRpbWVPYmplY3QtPlRvRXBvY2goKQogICAgICAgICAgICAgICAgOiB1bmRlZjsKCiAgICAgICAgICAgICMgaWYgd2UgaGF2ZSB0d28gZXZlbnRzIHRoYXQgaGFwcGVuZWQgJ25lYXJseScgdGhlIHNhbWUgdGltZSwgdHJlYXQKICAgICAgICAgICAgIyB0aGVtIGFzIGlmIHRoZXkgaGFwcGVuZWQgZXhhY3RseSBvbiB0aGUgc2FtZSB0aW1lICh0aHJlc2hvbGQgNSBzZWNvbmRzKQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkTGFzdENyZWF0ZVN5c3RlbVRpbWUKICAgICAgICAgICAgICAgICYmICRJdGVtLT57Q3JlYXRlU3lzdGVtVGltZX0gPD0gJExhc3RDcmVhdGVTeXN0ZW1UaW1lCiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9ID49ICggJExhc3RDcmVhdGVTeXN0ZW1UaW1lIC0gNSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJEhpc3RvcnlJdGVtc3skTGFzdENyZWF0ZVRpbWV9IH0sICRJdGVtOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDcmVhdGVUaW1lfSA9ICRMYXN0Q3JlYXRlVGltZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJEhpc3RvcnlJdGVtc3sgJEl0ZW0tPntDcmVhdGVUaW1lfSB9IH0sICRJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGFzdENyZWF0ZVRpbWUgICAgICAgPSAkSXRlbS0+e0NyZWF0ZVRpbWV9OwogICAgICAgICAgICAkTGFzdENyZWF0ZVN5c3RlbVRpbWUgPSAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9OwogICAgICAgIH0KCiAgICAgICAgbXkgJFNvcnRCeUFydGljbGUgPSBzdWIgewoKICAgICAgICAgICAgbXkgJElzQSA9IGdyZXAgeyAkXyBlcSAkYS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1dpdGhBcnRpY2xlczsKICAgICAgICAgICAgbXkgJElzQiA9IGdyZXAgeyAkXyBlcSAkYi0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1dpdGhBcnRpY2xlczsKICAgICAgICAgICAgJElzQiBjbXAgJElzQTsKICAgICAgICB9OwoKICAgICAgICAjIHNvcnQgaGlzdG9yeSBpdGVtcyBiYXNlZCBvbiBpdGVtcyB3aXRoIGFydGljbGVzCiAgICAgICAgIyB0aGVzZSBpdGVtcyBzaG91bGQgYWx3YXlzIGJlIG9uIHRvcCBvZiBhIGxpc3Qgb2YgY29ubmVjdGVkIGl0ZW1zCiAgICAgICAgJEl0ZW1Db3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCByZXZlcnNlIHNvcnQga2V5cyAlSGlzdG9yeUl0ZW1zICkgewoKICAgICAgICAgICAgZm9yIG15ICRTdWJJdGVtICggc29ydCAkU29ydEJ5QXJ0aWNsZSBAeyAkSGlzdG9yeUl0ZW1zeyRJdGVtfSB9ICkgewogICAgICAgICAgICAgICAgJFN1Ykl0ZW0tPntDb3VudGVyfSA9ICRJdGVtQ291bnRlcisrOwoKICAgICAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRTdWJJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzUmlnaHQgKSB7CiAgICAgICAgICAgICAgICAgICAgJFN1Ykl0ZW0tPntPcmllbnRhdGlvbn0gPSAnUmlnaHQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFN1Ykl0ZW0tPntPcmllbnRhdGlvbn0gPSAnTGVmdCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtJdGVtc30gfSwgJFN1Ykl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2V0IFRpY2tldElEIGZvciB1c2FnZSBpbiBKUwogICAgICAgICRQYXJhbXtUaWNrZXRJRH0gPSAkU2VsZi0+e1RpY2tldElEfTsKCiAgICAgICAgIyBzZXQga2V5ICdUaW1lTG9uZycgZm9yIEpTCiAgICAgICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte0l0ZW1zfSB9ICkgewogICAgICAgICAgICAkSXRlbS0+e1RpbWVMb25nfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoICRJdGVtLT57Q3JlYXRlVGltZX0sICdEYXRlRm9ybWF0TG9uZycgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkQXJ0aWNsZUlEICggc29ydCBrZXlzICV7JEFydGljbGVzQnlBcnRpY2xlSUR9ICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBhcnRpY2xlIGhhcyBhdHRhY2htZW50KHMpLgogICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyRBcnRpY2xlSUR9LT57QXRtc30gKSApIHsKCiAgICAgICAgICAgICAgICBteSAoJEluZGV4KSA9IGdyZXAgeyAkUGFyYW17SXRlbXN9LT5bJF9dLT57QXJ0aWNsZUlEfSAmJiAkUGFyYW17SXRlbXN9LT5bJF9dLT57QXJ0aWNsZUlEfSA9PSAkQXJ0aWNsZUlEIH0KICAgICAgICAgICAgICAgICAgICAwIC4uIEB7ICRQYXJhbXtJdGVtc30gfTsKICAgICAgICAgICAgICAgICRQYXJhbXtJdGVtc30tPlskSW5kZXhdLT57SGFzQXR0YWNobWVudH0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEdldCBOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlIGNvbmZpZyB2YWx1ZSBmb3IgdXNhZ2UgaW4gSlMuCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnTm9UaW1lbGluZVZpZXdBdXRvQXJ0aWNsZScsCiAgICAgICAgICAgIFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCgnTm9UaW1lbGluZVZpZXdBdXRvQXJ0aWNsZScpIHx8ICcwJywKICAgICAgICApOwoKICAgICAgICAjIEluY2x1ZGUgY3VycmVudCBhcnRpY2xlIElEIG9ubHkgaWYgaXQncyBzZWxlY3RlZC4KICAgICAgICAkUGFyYW17Q3VycmVudEFydGljbGVJRH0gLy89ICRTZWxmLT57QXJ0aWNsZUlEfTsKCiAgICAgICAgIyBNb2RpZnkgYm9keSB0ZXh0IHRvIGF2b2lkICc8L3NjcmlwdD4nIHRhZyBpc3N1ZSAoc2VlIGJ1ZyMxNDAyMykuCiAgICAgICAgZm9yIG15ICRBcnRpY2xlQm94SXRlbSAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgJEFydGljbGVCb3hJdGVtLT57Qm9keX0gPX4gc3s8L3NjcmlwdD59ezwjIyMvc2NyaXB0Pn14bXNnOwogICAgICAgIH0KCiAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdUaW1lbGluZVZpZXcnLAogICAgICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICBFbmFibGVkID0+ICRDb25maWdPYmplY3QtPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpLAogICAgICAgICAgICAgICAgRGF0YSAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaW1lbGluZVZpZXcnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBqdW1wIHRvIHNlbGVjdGVkIGFydGljbGUKICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTaG93U2VsZWN0ZWRBcnRpY2xlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgYWN0aW9uIG1lbnUgZm9yIGFsbCBhcnRpY2xlcwogICAgICAgIGZvciBteSAkQXJ0aWNsZUlEICggc29ydCBrZXlzICV7JEFydGljbGVzQnlBcnRpY2xlSUR9ICkgewoKICAgICAgICAgICAgIyBzaG93IGF0dGFjaG1lbnRzIGJveAogICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyRBcnRpY2xlSUR9LT57QXRtc30gKSApIHsKCiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUF0dGFjaG1lbnRzID0gJFNlbGYtPl9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzKAogICAgICAgICAgICAgICAgICAgIEFydGljbGUgPT4gJEFydGljbGVzQnlBcnRpY2xlSUQtPnskQXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZWxpbmVWaWV3QXJ0aWNsZUF0dGFjaG1lbnRzJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+ICRBcnRpY2xlQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyByZXR1cm4gb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyAlUGFyYW0sICVUaWNrZXQgfSwKICAgICk7Cn0KCnN1YiBfVGlja2V0SXRlbVNlZW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAQXJ0aWNsZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVMaXN0KAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICk7CgogICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKICAgICAgICAkU2VsZi0+X0FydGljbGVJdGVtU2VlbigKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9BcnRpY2xlSXRlbVNlZW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkSXNBcnRpY2xlRGVsZXRlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGVGZWF0dXJlcycpLT5Jc0FydGljbGVEZWxldGVkKAogICAgICAgIEFydGljbGVJRCA9PiAkUGFyYW17QXJ0aWNsZUlEfQogICAgKTsKCiAgICAjIG1hcmsgc2hvd24gYXJ0aWNsZSBhcyBzZWVuCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVGbGFnU2V0KAogICAgICAgIFRpY2tldElEICAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEICAgICAgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJ1NlZW4nLAogICAgICAgIFZhbHVlICAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEFydGljbGVEZWxldGVkID0+ICRJc0FydGljbGVEZWxldGVkCiAgICApOwoKICAgIHJldHVybiAxOwp9CgpzdWIgX0FydGljbGVJdGVtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVRpY2tldCAgPSAleyAkUGFyYW17VGlja2V0fSB9OwogICAgbXkgJUFydGljbGUgPSAleyAkUGFyYW17QXJ0aWNsZX0gfTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgc2hvdyBhcnRpY2xlIGFjdGlvbnMKICAgIG15IEBNZW51SXRlbXMgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlQWN0aW9ucygKICAgICAgICAlUGFyYW0sCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkUGFyYW17VGlja2V0fS0+e1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlfS0+e0FydGljbGVJRH0sCiAgICAgICAgVHlwZSAgICAgICAgICAgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICApOwoKICAgIHB1c2ggQHsgJFNlbGYtPntNZW51SXRlbXN9IH0sIFxATWVudUl0ZW1zOwoKICAgICMgVE9ETzogUmV2aWV3CiAgICByZXR1cm4gJFNlbGYtPl9BcnRpY2xlUmVuZGVyKAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFNob3dCcm93c2VyTGlua01lc3NhZ2UgPT4gJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9ID8gMCA6IDEsCiAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgTWVudUl0ZW1zICAgICAgICAgICAgICA9PiBcQE1lbnVJdGVtcywKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzICAgID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICk7Cn0KCnN1YiBfQ29sbGVjdEFydGljbGVBdHRhY2htZW50cyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlQXJ0aWNsZSA9ICV7ICRQYXJhbXtBcnRpY2xlfSB9OwoKICAgIG15ICVBdHRhY2htZW50czsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGRvd25sb2FkIHR5cGUKICAgIG15ICRUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdBdHRhY2htZW50RG93bmxvYWRUeXBlJykgfHwgJ2F0dGFjaG1lbnQnOwoKICAgICRBcnRpY2xle0F0bUNvdW50fSA9IHNjYWxhciBrZXlzICV7ICRBcnRpY2xle0F0bXN9IC8vIHt9IH07CgogICAgIyBpZiBhdHRhY2htZW50IHdpbGwgYmUgZm9yY2VkIHRvIGRvd25sb2FkLCBkb24ndCBvcGVuIGEgbmV3IGRvd25sb2FkIHdpbmRvdyEKICAgIG15ICRUYXJnZXQgPSAndGFyZ2V0PSJBdHRhY2htZW50V2luZG93IiAnOwogICAgaWYgKCAkVHlwZSA9fiAvaW5saW5lL2kgKSB7CiAgICAgICAgJFRhcmdldCA9ICd0YXJnZXQ9ImF0dGFjaG1lbnQiICc7CiAgICB9CgogICAgJEF0dGFjaG1lbnRze1pvb21BdHRhY2htZW50RGlzcGxheUNvdW50fSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0Ojpab29tQXR0YWNobWVudERpc3BsYXlDb3VudCcpOwoKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAleyAkQXJ0aWNsZXtBdG1zfSB9ICkgewogICAgICAgIHB1c2ggQHsgJEF0dGFjaG1lbnRze0ZpbGVzfSB9LCB7CiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAleyAkQXJ0aWNsZXtBdG1zfS0+eyRGaWxlSUR9IH0sCiAgICAgICAgICAgIEZpbGVJRCA9PiAkRmlsZUlELAogICAgICAgICAgICBUYXJnZXQgPT4gJFRhcmdldCwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBcJUF0dGFjaG1lbnRzOwp9CgpzdWIgX0FydGljbGVCb3hHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlIEFydGljbGVCb3hBbGwgTGltaXQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgbXkgJFN0YXJ0ID0gKCAkUGFyYW17UGFnZX0gLSAxICkgKiAkUGFyYW17TGltaXR9OwoKICAgIG15ICRFbmQgPSAkUGFyYW17UGFnZX0gKiAkUGFyYW17TGltaXR9IC0gMTsKICAgIGlmICggJEVuZCA+PSBzY2FsYXIgQHsgJFBhcmFte0FydGljbGVCb3hBbGx9IH0gKSB7CgogICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZW5kIGluZGV4IGRvZXNuJ3QgZXhjZWVkIGFycmF5IHNpemUuCiAgICAgICAgJEVuZCA9IHNjYWxhciBAeyAkUGFyYW17QXJ0aWNsZUJveEFsbH0gfSAtIDE7CiAgICB9CgogICAgbXkgQEFydGljbGVJbmRleGVzID0gKCAkU3RhcnQgLi4gJEVuZCApOwoKICAgIG15ICRDb21tdW5pY2F0aW9uQ2hhbm5lbE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb21tdW5pY2F0aW9uQ2hhbm5lbCcpOwoKICAgICMgU2F2ZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgZGF0YSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgogICAgbXkgJUNvbW11bmljYXRpb25DaGFubmVsRGF0YTsKCiAgICBteSBAQXJ0aWNsZUJveDsKICAgIGZvciBteSAkSW5kZXggKEBBcnRpY2xlSW5kZXhlcykgewogICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkUGFyYW17QXJ0aWNsZUJveEFsbH0tPlskSW5kZXhdLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgKTsKCiAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJFBhcmFte0FydGljbGVCb3hBbGx9LT5bJEluZGV4XS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgUmVhbE5hbWVzICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgSW5jbHVkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IGNvbW11bmljYXRpb24gY2hhbm5lbC4KICAgICAgICBpZiAoICEkQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRheyAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9ICkgewoKICAgICAgICAgICAgIyBDb21tdW5pY2F0aW9uIGNoYW5uZWwgZGlzcGxheSBuYW1lIGlzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgIG15ICVDb21tdW5pY2F0aW9uQ2hhbm5lbCA9ICRDb21tdW5pY2F0aW9uQ2hhbm5lbE9iamVjdC0+Q2hhbm5lbEdldCgKICAgICAgICAgICAgICAgIENoYW5uZWxJRCA9PiAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgUHJlc2VuY2Ugb2YgY29tbXVuaWNhdGlvbiBjaGFubmVsIG9iamVjdCBpbmRpY2F0ZXMgaXRzIHZhbGlkaXR5LgogICAgICAgICAgICBteSAkQ2hhbm5lbE9iamVjdCA9ICRDb21tdW5pY2F0aW9uQ2hhbm5lbE9iamVjdC0+Q2hhbm5lbE9iamVjdEdldCgKICAgICAgICAgICAgICAgIENoYW5uZWxJRCA9PiAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDb21tdW5pY2F0aW9uQ2hhbm5lbERhdGF7ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gPSB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgPT4gJENvbW11bmljYXRpb25DaGFubmVse0NoYW5uZWxOYW1lfSwKICAgICAgICAgICAgICAgIENoYW5uZWxEaXNwbGF5TmFtZSA9PiAkQ29tbXVuaWNhdGlvbkNoYW5uZWx7RGlzcGxheU5hbWV9LAogICAgICAgICAgICAgICAgQ2hhbm5lbEludmFsaWQgICAgID0+ICEkQ2hhbm5lbE9iamVjdCwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICVBcnRpY2xlID0gKCAlQXJ0aWNsZSwgJXsgJENvbW11bmljYXRpb25DaGFubmVsRGF0YXsgJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gfSB9ICk7CgogICAgICAgIHB1c2ggQEFydGljbGVCb3gsIFwlQXJ0aWNsZTsKICAgIH0KCiAgICByZXR1cm4gQEFydGljbGVCb3g7Cn0KCj1oZWFkMiBfQXJ0aWNsZVJlbmRlcigpCgpSZXR1cm5zIGFydGljbGUgaHRtbC4KCiAgICBteSAkSFRNTCA9ICRTZWxmLT5fQXJ0aWNsZVJlbmRlcigKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+IDEyMywgICAgICAjIChyZXF1aXJlZCkKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgID0+IDEyMywgICAgICAjIChyZXF1aXJlZCkKICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICdTdGF0aWMnLCAjIChyZXF1aXJlZCkgU3RhdGljIG9yIE9uTG9hZAogICAgICAgIFNob3dCcm93c2VyTGlua01lc3NhZ2UgPT4gMSwgICAgICAgICMgKG9wdGlvbmFsKQogICAgKTsKClJlc3VsdDoKICAgICRIVE1MID0gIjxkaXY+Li4uPC9kaXY+IjsKCj1jdXQKCnN1YiBfQXJ0aWNsZVJlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIEFydGljbGVJRCBUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IGFydGljbGUgZGF0YS4KICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckFydGljbGUoJVBhcmFtKTsKCiAgICAjIERldGVybWluZSBjaGFubmVsIG5hbWUgZm9yIHRoaXMgQXJ0aWNsZS4KICAgIG15ICRDaGFubmVsTmFtZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Q2hhbm5lbE5hbWVHZXQoKTsKCiAgICBteSAkTG9hZGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgKICAgICAgICAiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldFpvb206OkFnZW50OjokQ2hhbm5lbE5hbWUiLAogICAgKTsKICAgIHJldHVybiBpZiAhJExvYWRlZDsKCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldFpvb206OkFnZW50OjokQ2hhbm5lbE5hbWUiKS0+QXJ0aWNsZVJlbmRlcigKICAgICAgICAlUGFyYW0sCiAgICAgICAgQXJ0aWNsZUFjdGlvbnMgPT4gJFBhcmFte01lbnVJdGVtc30sCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKfQoKc3ViIF9HZXRJbmNsdWRlZEZpZWxkT3JkZXJlZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBSZXR1cm47CgogICAgSVRFTToKICAgIGZvciBteSAkSW5jbHVkZUl0ZW0gKCBAeyAkUGFyYW17SW5jbHVkZX0gfSApIHsKCiAgICAgICAgaWYgKCAkSW5jbHVkZUl0ZW0tPntHcmlkfSApIHsKICAgICAgICAgICAgZm9yIG15ICRSb3cgKCBAeyAkSW5jbHVkZUl0ZW0tPntHcmlkfXtSb3dzfSB9ICkgewoKICAgICAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgICAgIGZvciBteSAkREZFbnRyeSAoICRSb3ctPkAqICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OIGlmICEkREZFbnRyeS0+e0RGfTsKCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAUmV0dXJuLCAkREZFbnRyeS0+e0RGfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRJbmNsdWRlSXRlbS0+e0RGfSApIHsKICAgICAgICAgICAgcHVzaCBAUmV0dXJuLCAkSW5jbHVkZUl0ZW0tPntERn07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBAUmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6U2NyaXB0VXNhZ2UpCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iQXJ0aWNsZUZpbHRlckRpYWxvZyIgY2xhc3M9IkhpZGRlbiI+CiAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgaWQ9IkFydGljbGVGaWx0ZXJEaWFsb2dGb3JtIiBuYW1lPSJBcnRpY2xlRmlsdGVyRGlhbG9nRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFnZW50VGlja2V0Wm9vbSIgbmFtZT0iQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFydGljbGVGaWx0ZXJTZXQiIG5hbWU9IlN1YmFjdGlvbiIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXSIgbmFtZT0iVGlja2V0SUQiLz4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW11bmljYXRpb25DaGFubmVsRmlsdGVyIj5bJSBUcmFuc2xhdGUoIkNvbW11bmljYXRpb24gY2hhbm5lbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5uZWxzICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkN1c3RvbWVyVmlzaWJpbGl0eUZpbHRlciI+WyUgVHJhbnNsYXRlKCJDdXN0b21lciB2aXNpYmlsaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQ3VzdG9tZXJWaXNpYmlsaXR5ICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFydGljbGVTZW5kZXJUeXBlRmlsdGVyIj5bJSBUcmFuc2xhdGUoIlNlbmRlciBUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJTdHJpbmcgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2F2ZURlZmF1bHRzIj5bJSBUcmFuc2xhdGUoIlNhdmUgZmlsdGVyIHNldHRpbmdzIGFzIGRlZmF1bHQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iU2F2ZURlZmF1bHRzIiBuYW1lPSJTYXZlRGVmYXVsdHMiIHZhbHVlPSIxIiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgPC9mb3JtPgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVGaWx0ZXJEaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRXZlbnRUeXBlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nIiBjbGFzcz0iSGlkZGVuIj4KICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBpZD0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nRm9ybSIgbmFtZT0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFnZW50VGlja2V0Wm9vbSIgbmFtZT0iQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkV2ZW5UeXBlRmlsdGVyU2V0IiBuYW1lPSJTdWJhY3Rpb24iLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iIG5hbWU9IlRpY2tldElEIi8+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8bGFiZWwgZm9yPSJFdmVudFR5cGVGaWx0ZXIiPlslIFRyYW5zbGF0ZSgiRXZlbnQgVHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkV2ZW50VHlwZUZpbHRlclN0cmluZyAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8bGFiZWwgZm9yPSJTYXZlRGVmYXVsdHMiPlslIFRyYW5zbGF0ZSgiU2F2ZSBhcyBkZWZhdWx0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IlNhdmVEZWZhdWx0cyIgbmFtZT0iU2F2ZURlZmF1bHRzIiB2YWx1ZT0iMSIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KICAgIDwvZm9ybT4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJFdmVudFR5cGVGaWx0ZXJEaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyIikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gVGlja2V0Wm9vbSBVc2VBcnRpY2xlQ29sb3JzIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSBOb01hcmdpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV0iPjxzcGFuIGNsYXNzPSJQcmlvcml0eUlELVslIERhdGEuUHJpb3JpdHlJRCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV08L3NwYW4+PC9kaXY+CiAgICAgICAgPGgxPgogICAgICAgICAgICBbJSBEYXRhLkhvb2sgJV1bJSBDb25maWcoJ1RpY2tldDo6SG9va0RpdmlkZXInKSAlXVslIERhdGEuVGlja2V0TnVtYmVyIHwgaHRtbCAlXSAmbWRhc2g7IFslIERhdGEuVGl0bGUgfCBodG1sICVdCiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgoKIyBJZnJhbWUgdXNlZCBmb3IgZml4aW5nIGJ1ZyM4NTQ1OiBBdHRhY2htZW50IGRvd25sb2FkIG5vdCBwb3NzaWJsZSBpZiBwb3AgdXAgb2YgYW5vdGhlciBhY3Rpb24gaXMgb3BlbgojIEFsbCBkb3dubG9hZHMgKGUuZy4gYXR0YWNobWVudHMpIGhhdmUgdGhpcyBpZnJhbWUgYXMgdGFyZ2V0LiBUaGlzIHByZXZlbnRzIHRoZSBicm93c2VyIGZyb20gc2VuZGluZwojIGFuIGh0dHAgcmVxdWVzdCB0byB0aGUgVGlja2V0Wm9vbSB3aW5kb3cuIEl0IHNlbmRzIHRoZSBkb3dubG9hZCByZXF1ZXN0IHRvIHRoaXMgaWZyYW1lIGluc3RlYWQuCiMgU2VuZGluZyB0aGUgZG93bmxvYWQgcmVxdWVzdCB0byB0aGUgbWFpbiB3aW5kb3cgd291bGQgbGVhZCB0byBhbiBhbGVydCBtZXNzYWdlIGFib3V0IGxlYXZpbmcgdGhlIHBhZ2UKIyBpZiBhdCB0aGUgc2FtZSB0aW1lIGEgcG9wdXAgd2luZG93IChlLmcuIGZvciBhIHRpY2tldCBhbnN3ZXIpIGlzIG9wZW5lZC4KICAgIDxpZnJhbWUgc3JjPSJhYm91dDpibGFuayIgd2lkdGg9IjAiIGhlaWdodD0iMCIgbmFtZT0iQXR0YWNobWVudFdpbmRvdyIgaWQ9IkF0dGFjaG1lbnRXaW5kb3ciPjwvaWZyYW1lPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGb3JtRHJhZnRUYWJsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoICJEcmFmdHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJGb3JtRHJhZnRUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEZPUkVBQ0ggRm9ybURyYWZ0IElOIERhdGEuRm9ybURyYWZ0cyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRHJhZnROYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIEZvcm1EcmFmdC5MaW5rIHwgSW50ZXJwb2xhdGUgJV07TG9hZEZvcm1EcmFmdD0xO0Zvcm1EcmFmdElEPVslIEZvcm1EcmFmdC5Gb3JtRHJhZnRJRCB8IGh0bWwgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iWyUgRm9ybURyYWZ0LkNsYXNzIHwgaHRtbCAlXSBNYXN0ZXJBY3Rpb25MaW5rIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LkxpbmtQYXJhbSAlXT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKEZvcm1EcmFmdC5EZXNjcmlwdGlvbikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRm9ybURyYWZ0Lk5hbWUpIHwgaHRtbCAlXSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdIFslIEZvcm1EcmFmdC5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdIFslIFRyYW5zbGF0ZSgiYnkiKSB8IGh0bWwgJV0gWyUgRm9ybURyYWZ0LkNyZWF0ZWRCeVVzZXIgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXSBbJSBGb3JtRHJhZnQuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXSBbJSBUcmFuc2xhdGUoImJ5IikgfCBodG1sICVdIFslIEZvcm1EcmFmdC5DaGFuZ2VkQnlVc2VyIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJGb3JtRHJhZnREZWxldGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdP0FjdGlvbj1BZ2VudFRpY2tldFpvb207U3ViYWN0aW9uPUZvcm1EcmFmdERlbGV0ZTtGb3JtRHJhZnRJRD1bJSBGb3JtRHJhZnQuRm9ybURyYWZ0SUQgfCBodG1sICVdO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlPSJbJSBGb3JtRHJhZnQuVGl0bGUgfCBodG1sICVdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LkxpbmtQYXJhbSAlXT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGb3JtRHJhZnRUYWJsZSIpICVdCgogICAgICAgICAgICBbJSBGT1JFQUNIIFdpZGdldCBJTiBEYXRhLlNpZGViYXJXaWRnZXRzOyAlXQogICAgICAgICAgICAgICAgWyUgSUYgV2lkZ2V0LkFzeW5jOyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIFdpZGdldC5FbGVtZW50SUQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRJc0xvYWRpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIFslIEVMU0U7ICVdCiAgICAgICAgICAgICAgICAgICAgWyUgV2lkZ2V0Lk91dHB1dCAlXQogICAgICAgICAgICAgICAgWyUgRU5EOyAlXQogICAgICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IE92ZXJmbG93VmlzaWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93IENsdXN0ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gQXJ0aWNsZVZpZXciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IkFydGljbGVWaWV3U2V0dGluZ3MiIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNldHRpbmdzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiU2V0dGluZ3MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD0ibmF2LVslIERhdGEuTmFtZSB8IHJlcGxhY2UoJyAnLCAnLScpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlR5cGUgPT0gJ0NsdXN0ZXInICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ2xhc3MgJV0iID5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0gPGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iIGNsYXNzPSJbJSBEYXRhLkNsYXNzICVdIiBbJSBEYXRhLkxpbmtQYXJhbSAlXSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSIgdGFyZ2V0PSJbJSBEYXRhLlRhcmdldCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51U3ViQ29udGFpbmVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9Im5hdi1bJSBEYXRhLk5hbWUgfCByZXBsYWNlKCcgJywgJy0nKSB8IGh0bWwgJV0tY29udGFpbmVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0TWVudVN1YkNvbnRhaW5lckl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9Im5hdi1bJSBEYXRhLk5hbWUgfCByZXBsYWNlKCcgJywgJy0nKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgSUYgIURhdGEuRXh0ZXJuYWxMaW5rICVdWyUgRW52KCJCYXNlbGluayIpICVdWyUgRU5EICVdWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIgWyUgRGF0YS5MaW5rUGFyYW0gJV0gdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iIHRhcmdldD0iWyUgRGF0YS5UYXJnZXQgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnVTdWJDb250YWluZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51UGhvbmVBc0Ryb3Bkb3duIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0IiBpZD0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5QaG9uZUVsZW1lbnRJRCB8IGh0bWwgJV0iIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGFuZGFyZFJlcGx5U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRNZW51UGhvbmVBc0Ryb3Bkb3duIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTW92ZUxpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gdGl0bGU9IlslIFRyYW5zbGF0ZSgiTW92ZSB0aWNrZXQgdG8gYSBkaWZmZXJlbnQgcXVldWUiKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50VGlja2V0TW92ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWV1ZUlEIiB2YWx1ZT0iWyUgRGF0YS5RdWV1ZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlc3RRdWV1ZUlEIiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vdmVRdWV1ZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk1vdmVMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTW92ZUZvcm0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldE1vdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTsiIGNsYXNzPSJBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNoYW5nZSBRdWV1ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNb3ZlRm9ybSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVFeHRlcm5hbExpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIFslIERhdGEuTGlua1BhcmFtICVdIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIiB0YXJnZXQ9IlslIERhdGEuVGFyZ2V0ICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudUV4dGVybmFsTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIEV4cGFuZGVkIiBpZD0iRHluYW1pY0ZpZWxkc1dpZGdldCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZShEYXRhLldpZGdldFRpdGxlKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5leHRBY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGlnaHRSb3cgQm90dG9tIj4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5bJSBUcmFuc2xhdGUoRGF0YS5BY3Rpdml0eU5hbWUpIHwgaHRtbCAlXTo8L3N0cm9uZz48L2xpPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpdml0eURpYWxvZ0RpcmVjdFN1Ym1pdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRUaWNrZXRQcm9jZXNzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU3RvcmVBY3Rpdml0eURpYWxvZyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcm9jZXNzRW50aXR5SUQiIHZhbHVlPSJbJSBEYXRhLlByb2Nlc3NFbnRpdHlJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpdml0eURpYWxvZ0VudGl0eUlEIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpdml0eURpYWxvZ0VudGl0eUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IkJ1dHRvbl9bJSBEYXRhLkFjdGl2aXR5RGlhbG9nRW50aXR5SUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciIgdHlwZT0ic3VibWl0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGl2aXR5RGlhbG9nRGlyZWN0U3VibWl0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aXZpdHlEaWFsb2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24gTmV4dEFjdGl2aXR5RGlhbG9nIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRQcm9jZXNzO1N1YmFjdGlvbj1EaXNwbGF5QWN0aXZpdHlEaWFsb2c7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTtQcm9jZXNzRW50aXR5SUQ9WyUgRGF0YS5Qcm9jZXNzRW50aXR5SUQgfCB1cmkgJV07QWN0aXZpdHlEaWFsb2dFbnRpdHlJRD1bJSBEYXRhLkFjdGl2aXR5RGlhbG9nRW50aXR5SUQgfCB1cmkgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpdml0eURpYWxvZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9BY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJBY3Rpb25NZXNzYWdlIj5bJSBUcmFuc2xhdGUoIlRoZXJlIGFyZSBubyBkaWFsb2dzIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGluIHRoZSBwcm9jZXNzLiIpIHwgaHRtbCAlXTwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vQWN0aXZpdHlEaWFsb2dzIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5leHRBY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBQcm9jZXNzSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUHJvY2Vzc0luZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJGaWVsZFNldFNlcGFyYXRvciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlN0YW5kYXJkRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDb250YWluZXIgRHluYW1pY0ZpZWxkQXV0b1Jlc2l6ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgfCBodG1sICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJTaG93RmllbGRJbmZvT3ZlcmxheSI+KzwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUgQ3V0VmFsdWUgRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXSI+CjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRCZWdpbiAtLT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRMaW5rIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbiIpICVdCjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRFbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZUxvbmciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGFuZGFyZEZpZWxkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2V0RHluYW1pY0ZpZWxkIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkU2V0U2VwYXJhdG9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IkZpZWxkU2V0U2VwYXJhdG9yIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFNldFNlcGFyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDb250YWluZXIgRHluYW1pY0ZpZWxkQXV0b1Jlc2l6ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdGl0bGU9IlslIERhdGEuTGFiZWwgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iU2hvd0ZpZWxkSW5mb092ZXJsYXkiPis8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUgQ3V0VmFsdWUgRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXSI+CjwhLS0gT3V0cHV0RmlsdGVySG9va19TZXREeW5hbWljRmllbGRCZWdpbiAtLT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJTZXREeW5hbWljRmllbGRMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZFBsYWluIikgJV0KPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1NldER5bmFtaWNGaWVsZEVuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZUxvbmciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXREeW5hbWljRmllbGRWYWx1ZUxvbmciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZFZhbHVlTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRTZXRWYWx1ZVNlcGFyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJGaWVsZFNldFNlcGFyYXRvciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXRGaWVsZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldCIpICVdCgogICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlVHJlZSI+ClslIERhdGEuQXJ0aWNsZVRyZWUgJV0KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIaW50Tm9BcnRpY2xlcyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgaXRlbSBoYXMgbm8gYXJ0aWNsZXMgeWV0LiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSGludE5vQXJ0aWNsZXMiKSAlXQoKICAgICAgICAgICAgPGRpdiBpZD0iQXJ0aWNsZUl0ZW1zIj4KWyUgRGF0YS5BcnRpY2xlSXRlbXMgJV0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICBbJSBGT1JFQUNIIFdpZGdldCBJTiBEYXRhLk1haW5XaWRnZXRzOyAlXQogICAgICAgICAgICAgICAgWyUgSUYgV2lkZ2V0LkFzeW5jOyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIFdpZGdldC5FbGVtZW50SUQgJV0iPjwvZGl2PgogICAgICAgICAgICAgICAgWyUgRUxTRTsgJV0KICAgICAgICAgICAgICAgICAgICBbJSBXaWRnZXQuT3V0cHV0ICVdCiAgICAgICAgICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgICAgIFslIEVORDsgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+Cgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlIikgJV0KPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT4KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+CiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDI+CiAgICAgICAgWyUgSUYgRGF0YS5ab29tVGltZWxpbmUgJV0KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgVGltZWxpbmUgVmlldyIpIHwgaHRtbCAlXQogICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBcnRpY2xlIE92ZXJ2aWV3IC0gJXMgQXJ0aWNsZShzKSIsIERhdGEuQXJ0aWNsZUNvdW50KSB8IGh0bWwgJV0KICAgICAgICBbJSBFTkQgJV0KICAgICAgICA8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiBDb250cm9sUm93Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVQYWdlcyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVQYWdlcyBJY29ucyI+CiAgICAgICAgWyUgRk9SRUFDSCBwYWdlIElOIFsxIC4uIERhdGEuUGFnZXNdOyAlXQogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdO0FydGljbGVQYWdlPVslIHBhZ2UgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoJ1BhZ2UgJXMnLCBwYWdlKSB8IGh0bWwgJV0iIGRhdGEtcGFnZT0iWyUgcGFnZSAlXSIgWyUgSUYgcGFnZSA9PSBEYXRhLkN1cnJlbnRQYWdlICVdY2xhc3M9IkFjdGl2ZSJbJSBFTkQgJV0+WyUgcGFnZSAlXTwvYT4KICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZVBhZ2VzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlRmlsdGVyIEljb25zIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkFydGljbGUgRmlsdGVyIikgfCBodG1sICVdOjwvc3Bhbj4KIyBPbmx5IHNob3cgb25lOiBTZXQgb3IgUmVzZXQuCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyU2V0TGluayIpICVdCiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2V0QXJ0aWNsZUZpbHRlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQWRkIEZpbHRlciIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWZpbHRlciI+PC9pPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2V0IikgfCBodG1sICVdPC9zcGFuPjwvYT4KI1slIFJlbmRlckJsb2NrRW5kKCJBcnRpY2xlRmlsdGVyU2V0TGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVGaWx0ZXJSZXNldExpbmsiKSAlXQogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IlJlc2V0QXJ0aWNsZUZpbHRlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVzZXQgRmlsdGVyIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPjxzcGFuPlslIFRyYW5zbGF0ZSgiUmVzZXQiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUZpbHRlclJlc2V0TGluayIpICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZUxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IlRpY2tldExpc3QiPgogICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlVGFibGVCb2R5IiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjcm9sbGVyIj4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgaWQ9IkFydGljbGVUYWJsZSIgY2xhc3M9IkRhdGFUYWJsZSBbJSBEYXRhLlRhYmxlQ2xhc3NlcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJObyBTb3J0YWJsZSBJbml0aWFsU29ydGluZyBbJSBEYXRhLlpvb21FeHBhbmRTb3J0T3JkZXIgJV0iPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiTm8uIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVW5yZWFkIGFydGljbGVzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRpcmVjdGlvbiBTb3J0YWJsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGlyZWN0aW9uIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtZXhjaGFuZ2UiPjwvaT48L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlNlbmRlciBTb3J0YWJsZSI+PGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJTZW5kZXIiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5uZWwgU29ydGFibGUiPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiVmlhIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdWJqZWN0IFNvcnRhYmxlIj48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZWQgU29ydGFibGUiPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQXJ0aWNsZUVkaXQgU29ydGFibGUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQXJ0aWNsZSBFZGl0ZWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWVkaXQiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJBdHRhY2htZW50cyBMYXN0IENlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnRzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wYXBlcmNsaXAiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iWyUgRGF0YS5TZW5kZXJUeXBlIHwgaHRtbCAlXSBbJSBJRiBEYXRhLlNlbmRlclR5cGUgPT0gJ2N1c3RvbWVyJyAlXUluY29taW5nWyUgRUxTRSAlXU91dGdvaW5nWyUgRU5EICVdIFslIElGIERhdGEuSXNWaXNpYmxlRm9yQ3VzdG9tZXIgJV1WaXNpYmxlRm9yQ3VzdG9tZXJbJSBFTFNFICVdTm90VmlzaWJsZUZvckN1c3RvbWVyWyUgRU5EICVdIFslIElGIERhdGEuQXJ0aWNsZURlbGV0ZWQgPT0gIjEiICVdIEFydGljbGVEZWxldGVkIFslIEVORCAlXSBbJSBEYXRhLkNsYXNzUm93IHwgaHRtbCAlXSIgaWQ9IlJvd1slIERhdGEuQXJ0aWNsZU51bWJlciB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJObyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZU51bWJlciB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IkFydGljbGVJbmZvIiBuYW1lPSJMaW5rWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgdXJpICVdIiB2YWx1ZT0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtTdWJhY3Rpb249QXJ0aWNsZVVwZGF0ZTtDb3VudD1bJSBEYXRhLkFydGljbGVOdW1iZXIgfCB1cmkgJV07VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV07QXJ0aWNsZUlEPVslIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXTsiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IkFydGljbGVJRCIgdmFsdWU9IlslIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0gVW5yZWFkQXJ0aWNsZXMgRml4ZWQgTm9uVGV4dENvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbUltcG9ydGFudEFydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW1wb3J0YW50QXJ0aWNsZXMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkltcG9ydGFudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbT5bJSBUcmFuc2xhdGUoIkltcG9ydGFudCIpIHwgaHRtbCAlXTwvZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZSIpICVdCgojIFJvdGhlck9TUyAvIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1QaW5uZWRBcnRpY2xlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlBpbm5lZEFydGljbGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlBpbm5lZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGh1bWItdGFjayI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPlslIFRyYW5zbGF0ZSgiUGlubmVkIikgfCBodG1sICVdPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1QaW5uZWRBcnRpY2xlIikgJV0KCiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5ld0FydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlVucmVhZCBBcnRpY2xlISIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1OZXdBcnRpY2xlIikgJV0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5vTmV3QXJ0aWNsZSIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTm9Db250ZW50Ij48L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1Ob05ld0FydGljbGUiKSAlXQojIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRGlyZWN0aW9uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25JbmNvbWluZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gSW5jb21pbmciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkluY29taW5nIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxvbmctYXJyb3ctbGVmdCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjAiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbkluY29taW5nIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gT3V0Z29pbmciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk91dGdvaW5nIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxvbmctYXJyb3ctcmlnaHQiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSIxIiAvPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtRGlyZWN0aW9uSW50ZXJuYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRGlyZWN0aW9uIEludGVybmFsIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbnRlcm5hbCBtZXNzYWdlIikgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjIiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbkludGVybmFsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iU2VuZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZSB8IGh0bWwgJV0iPjxhIGhyZWY9IiMiPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuUmVhbG5hbWUgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNoYW5uZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLkNoYW5uZWxEaXNwbGF5TmFtZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQ2hhbm5lbEludmFsaWQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1pc3NpbmcgY2hhbm5lbCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIFdhcm5pbmciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlRyYW5zbWlzc2lvblN0YXR1cyAmJiBEYXRhLlRyYW5zbWlzc2lvblN0YXR1cy5TdGF0dXMgPT0gJ0ZhaWxlZCcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlbmRpbmcgb2YgdGhpcyBtZXNzYWdlIGhhcyBmYWlsZWQuIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRXJyb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2hhbm5lbERpc3BsYXlOYW1lKSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlN1YmplY3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU3ViamVjdC5WYWx1ZSB8IGh0bWwgJV0iPjxhIGhyZWY9IiMiPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ3JlYXRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCdUaW1lU2hvcnQnKSAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC9hPjwvZGl2PgojIEluY2x1ZGUgY3VzdG9tIHNvcnRpbmcgaW5mb3JtYXRpb246IGRhdGUgaW4gSVNPIGZvcm1hdC4KIyBPdGhlciBkYXRlIGZvcm1hdHMgY2Fubm90IGJlIHNvcnRlZCByZWxpYWJseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5DcmVhdGVUaW1lIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUaGUgYXJ0aWNsZSB3YXMgZWRpdGVkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuSXNFZGl0ZWQgPT0gIjEiICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkVkaXRJY29uIj48aSBjbGFzcz0iZmEgZmEtY2xvbmUiPjwvaT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IlslIERhdGEuSXNFZGl0ZWQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQXR0YWNobWVudHMgQ2VudGVyIEF0dGFjaG1lbnQgRml4ZWQgTm9uVGV4dENvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbUF0dGFjaG1lbnQiKSAlXQpbJSBQUk9DRVNTIEFydGljbGVBdHRhY2htZW50cy50dCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1BdHRhY2htZW50IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1Ob0F0dGFjaG1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTm9Db250ZW50Ij48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbU5vQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGFuZGxlIHVpLXJlc2l6YWJsZS1oYW5kbGUgdWktcmVzaXphYmxlLXMiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiUmVzaXplIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUxpc3QiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZWxpbmVWaWV3IikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVWaWV3VGlja2V0QWN0aW9ucyBIaWRkZW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaW1lbGluZVZpZXdUaWNrZXRBY3Rpb25zIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iVGlja2V0QWN0aW9ucyBBcnRpY2xlSURfWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIj4KWyUgUFJPQ0VTUyBBcnRpY2xlQWN0aW9uTWVudS50dCAlXQogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVsaW5lVmlld1RpY2tldEFjdGlvbnMiKSAlXQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMgSGlkZGVuIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZWxpbmVWaWV3QXJ0aWNsZUF0dGFjaG1lbnRzIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUF0dGFjaG1lbnRzIEFydGljbGVJRF9bJSBEYXRhLkFydGljbGVJRCB8IGh0bWwgJV0iPgpbJSBQUk9DRVNTIEFydGljbGVBdHRhY2htZW50cy50dCAlXQogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVsaW5lVmlld0FydGljbGVBdHRhY2htZW50cyIpICVdCiAgICAgICAgPC9kaXY+CgogICAgICAgIDx1bCBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgPGxpIGlkPSJUZW1wbGF0ZUxpc3RJdGVtIj4KICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJVbnJlYWRBcnRpY2xlcyBSZW1hcmthYmxlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNYXJrIHRoaXMgYXJ0aWNsZSBhcyByZWFkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkltcG9ydGFudCIpIHwgaHRtbCAlXSI+PC9pPgogICAgICAgICAgICAgICAgICAgIDxlbT48L2VtPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9IlR5cGUiPjwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzcGFuPjwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IlNob3dGdWxsQXJ0aWNsZVRleHQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgRnVsbCBUZXh0IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNlYXJjaC1wbHVzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgoKICAgICAgICA8ZGl2IGlkPSJUZW1wbGF0ZUFydGljbGVEYXRhIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzdWJqZWN0Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiU3ViamVjdCIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmcm9tIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiRnJvbSIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0byI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIlRvIikgfCBodG1sICVdOiA8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImNjIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiQ2MiKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGlkZGVuIEZ1bGxBcnRpY2xlUGxhaW5UZXh0IiBkYXRhLXRpdGxlPSJbJSBUcmFuc2xhdGUoIkZ1bGwgQXJ0aWNsZSBUZXh0IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lUGxhaW5UZXh0Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIGNsYXNzPSJQbGFpblRleHQiPjwvcD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGlkZGVuIEFydGljbGVJRnJhbWUiIGRhdGEtdGl0bGU9IlslIFRyYW5zbGF0ZSgiRnVsbCBBcnRpY2xlIFRleHQiKSB8IGh0bWwgJV0iPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVZpZXcgVXNlQXJ0aWNsZUNvbG9ycyI+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iTGlzdExlZnQiPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJOb0V2ZW50cyI+WyUgVHJhbnNsYXRlKCJObyBtb3JlIGV2ZW50cyBmb3VuZC4gUGxlYXNlIHRyeSBjaGFuZ2luZyB0aGUgZmlsdGVyIHNldHRpbmdzLiIpIHwgaHRtbCAlXTwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iTGlzdFJpZ2h0Ij48L3VsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1zcGlubmVyIGZhLXNwaW4iPjwvaT48L3NwYW4+CiAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVGltZWxpbmVWaWV3IikgJV0KCiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlIikgJV0KClslIERhdGEuQXJ0aWNsZVdpZGdldHNIVE1MICVdCg==</File>
        <File Location="Kernel/Output/HTML/ArticleAction/ArticlePin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKIyBUT0RPOiB3aGVuIG1lcmdpbmcgdG8gQ29yZSwgYWRhcHQgaGFuZGxpbmcgdG8gYmUgdGhlIHNhbWUgYXMgd2l0aCAiTWFya0FzSW1wb3J0YW50Iihmb3VuZCBpbiBBZ2VudFRpY2tldFpvb20pCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBcnRpY2xlUGluOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja0FjY2VzcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCBBcnRpY2xlIENoYW5uZWxOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIERlZmluZSBhY3Rpb24gYW5kIGdldCBpdHMgZnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4KICAgIG15ICRBY3Rpb24gICAgICAgPSAnQWdlbnRUaWNrZXRBcnRpY2xlUGluJzsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENvbmZpZyAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn07CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICRQZXJtaXNzaW9uID0gMDsKCiAgICAjIGNoZWNrIGlmIG1vZHVsZSBpcyByZWdpc3RlcmVkCiAgICByZXR1cm4gaWYgISRDb25maWc7CgogICAgIyBjaGVjayBBY2wKICAgIHJldHVybiBpZiAhJFBhcmFte0FjbEFjdGlvbkxvb2t1cH0tPnskQWN0aW9ufTsKCiAgICAjIEdldCBncm91cCBuYW1lcyBmcm9tIGNvbmZpZy4KICAgIG15IEBHcm91cE5hbWVzICAgPSBAeyAkQ29uZmlnLT57R3JvdXB9ICAgfHwgW10gfTsKICAgIG15IEBHcm91cFJvTmFtZXMgPSBAeyAkQ29uZmlnLT57R3JvdXBSb30gfHwgW10gfTsKCiAgICBwdXNoKCBAR3JvdXBOYW1lcywgQEdyb3VwUm9OYW1lcyApOwoKICAgICMgSWYgYWNjZXNzIGlzIHJlc3RyaWN0ZWQsIGFsbG93IGFjY2VzcyBvbmx5IGlmIHVzZXIgaGFzIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zIGluIGNvbmZpZ3VyZWQgZ3JvdXAocykuCiAgICBpZiAoQEdyb3VwTmFtZXMpIHsKICAgICAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgIyBHZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMuCiAgICAgICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICk7CgogICAgICAgIEdST1VQOgogICAgICAgIGZvciBteSAkR3JvdXBOYW1lIChAR3JvdXBOYW1lcykgewogICAgICAgICAgICBuZXh0IEdST1VQIGlmICEkR3JvdXBOYW1lOwoKICAgICAgICAgICAgIyBHZXQgdGhlIGdyb3VwIElELgogICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgICAgICBHcm91cCA9PiAkR3JvdXBOYW1lLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IEdST1VQIGlmICEkR3JvdXBJRDsKCiAgICAgICAgICAgICMgU3RvcCBjaGVja2luZyBpZiBtZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyBmb3VuZC4KICAgICAgICAgICAgaWYgKCAkR3JvdXBzeyRHcm91cElEfSApIHsKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gMTsKICAgICAgICAgICAgICAgIGxhc3QgR1JPVVA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBPdGhlcndpc2UsIGFsd2F5cyBhbGxvdyBhY2Nlc3MuCiAgICBlbHNlIHsKICAgICAgICAkUGVybWlzc2lvbiA9IDE7CiAgICB9CgogICAgaWYgKCAkUGVybWlzc2lvbiA9PSAxICkgewoKICAgICAgICBteSAkUGluQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4nKTsKCiAgICAgICAgaWYgKCAkUGluQ29uZmlnLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgIG15ICRPayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkUGluQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0fS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGlmICEkT2s7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQaW5Db25maWctPntSZXF1aXJlZExvY2t9ICkgewogICAgICAgICAgICBteSAkTG9ja2VkID0gJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja0dldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkTG9ja2VkKSB7CiAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiBpZiAhJEFjY2Vzc09rOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB1c2UgdXNlciBpZCAxIGJlY2F1c2UgYXJ0aWNsZXMgYXJlIHBpbm5lZCBmb3IgYWxsIHVzZXJzCiAgICBteSAlQXJ0aWNsZUZsYWdzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgbXkgJEFydGljbGVJc1Bpbm5lZCA9ICRBcnRpY2xlRmxhZ3N7UGlubmVkfTsKCiAgICBteSAkTGluayAgICAgICAgPSAiQWN0aW9uPUFnZW50VGlja2V0QXJ0aWNsZVBpbjtUaWNrZXRJRD0kUGFyYW17VGlja2V0fS0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSI7CiAgICBteSAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ1BpbicpOwogICAgaWYgKCRBcnRpY2xlSXNQaW5uZWQpIHsKICAgICAgICAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ1VucGluJyk7CiAgICB9CgogICAgIyBzZXQgaW1wb3J0YW50IG1lbnUgaXRlbQogICAgbXkgJU1lbnVJdGVtID0gKAogICAgICAgIEl0ZW1UeXBlICAgID0+ICdMaW5rJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAkRGVzY3JpcHRpb24sCiAgICAgICAgTmFtZSAgICAgICAgPT4gJERlc2NyaXB0aW9uLAogICAgICAgIExpbmsgICAgICAgID0+ICRMaW5rLAogICAgKTsKCiAgICByZXR1cm4gKCBcJU1lbnVJdGVtICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketArticlePin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBhcnRpY2xlcyBhcmUgcGlubmVkIGZvciBhbGwgdXNlcnMKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVGbGFnR2V0KAogICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIG15ICRBcnRpY2xlSXNQaW5uZWQgPSAkQXJ0aWNsZUZsYWdze1Bpbm5lZH07CgogICAgaWYgKCRBcnRpY2xlSXNQaW5uZWQpIHsKCiAgICAgICAgIyB1c2UgdXNlciBpZCAxIGJlY2F1c2UgYXJ0aWNsZXMgYXJlIHBpbm5lZCBmb3IgYWxsIHVzZXJzCiAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnRGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnUGlubmVkJywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBhcnRpY2xlcyBhcmUgcGlubmVkIGZvciBhbGwgdXNlcnMKICAgICAgICAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdQaW5uZWQnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07QXJ0aWNsZUlEPSRTZWxmLT57QXJ0aWNsZUlEfSIsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Config/Files/XML/ArticlePin.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjSW50ZXJuYWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhdmFpbGFibGUgYXJ0aWNsZSBhY3Rpb25zIGZvciBJbnRlcm5hbCBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTo6QXJ0aWNsZUFjdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0QXJ0aWNsZVJlc3RvcmUiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QXJ0aWNsZVJlc3RvcmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFydGljbGVEZWxldGUiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QXJ0aWNsZURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0QXJ0aWNsZVZlcnNpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QXJ0aWNsZVZlcnNpb248L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFydGljbGVFZGl0Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEFydGljbGVFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjQwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRDb21wb3NlIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldENvbXBvc2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRGb3J3YXJkIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEZvcndhcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRCb3VuY2UiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Qm91bmNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UGhvbmUiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0UGhvbmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQcmludCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj41MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFBsYWluIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFBsYWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjYwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBc0ltcG9ydGFudCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FzSW1wb3J0YW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjcwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Tm90ZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXROb3RlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBcnRpY2xlU2VlblVuc2VlbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FydGljbGVTZWVuVW5zZWVuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjkwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9ucyMjI1Bob25lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYXZhaWxhYmxlIGFydGljbGUgYWN0aW9ucyBmb3IgUGhvbmUgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldENvbXBvc2UiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Q29tcG9zZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFydGljbGVFZGl0Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEFydGljbGVFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjExMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEZvcndhcmQiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Rm9yd2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEJvdW5jZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRCb3VuY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQaG9uZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRQaG9uZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj40MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UGxhaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0UGxhaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFya0FzSW1wb3J0YW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpNYXJrQXNJbXBvcnRhbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXROb3RlIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldE5vdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFya0FydGljbGVTZWVuVW5zZWVuIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpNYXJrQXJ0aWNsZVNlZW5VbnNlZW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+OTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXJ0aWNsZVBpbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QXJ0aWNsZVBpbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjRW1haWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhdmFpbGFibGUgYXJ0aWNsZSBhY3Rpb25zIGZvciBlLW1haWwgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldENvbXBvc2UiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Q29tcG9zZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEZvcndhcmQiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Rm9yd2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEJvdW5jZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRCb3VuY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQaG9uZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRQaG9uZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj40MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0TWVzc2FnZUxvZyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRNZXNzYWdlTG9nPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjU1MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UGxhaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0UGxhaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFya0FzSW1wb3J0YW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpNYXJrQXNJbXBvcnRhbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXROb3RlIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldE5vdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRFbWFpbFJlc2VuZCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRFbWFpbFJlc2VuZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj45MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJrQXJ0aWNsZVNlZW5VbnNlZW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246Ok1hcmtBcnRpY2xlU2VlblVuc2VlbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXJ0aWNsZVBpbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QXJ0aWNsZVBpbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjQ2hhdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGF2YWlsYWJsZSBhcnRpY2xlIGFjdGlvbnMgZm9yIENoYXQgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBc0ltcG9ydGFudCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FzSW1wb3J0YW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjcwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Rm9yd2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRGb3J3YXJkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjIwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Q29tcG9zZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRDb21wb3NlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBcnRpY2xlU2VlblVuc2VlbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FydGljbGVTZWVuVW5zZWVuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRUaWNrZXRBcnRpY2xlUGluIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5BZ2VudFRpY2tldEFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudFRpY2tldFpvb20jIyMwMTAtQXJ0aWNsZVBpbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuQXJ0aWNsZVBpbi5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFydGljbGVQaW4uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPnRoaXJkcGFydHkvanF1ZXJ5LXRhYmxlc29ydGVyLTIuMjguMTQvd2lkZ2V0LXN0YXRpY1Jvdy5taW4uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHBlcm1pc3Npb24gcmVxdWlyZWQgdG8gcGluL3VucGluIGFydGljbGVzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPm5vdGU8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0QXJ0aWNsZVBpbiMjI1JlcXVpcmVkTG9jayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgdG8gcGluIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6QWdlbnRUaWNrZXRBcnRpY2xlUGluPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="var/httpd/htdocs/js/thirdparty/jquery-tablesorter-2.28.14/widget-staticRow.min.js" Permission="660" Encode="Base64">KGZ1bmN0aW9uKGZhY3Rvcnkpe2lmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpe2RlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTt9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpe21vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7fSBlbHNlIHtmYWN0b3J5KGpRdWVyeSk7fX0oZnVuY3Rpb24oalF1ZXJ5KXsKLyohIHdpZGdldDogc3RhdGljUm93IC0gdXBkYXRlZCAxMC8zMS8yMDE1ICh2Mi4yNC4wKSAqLwohZnVuY3Rpb24ocCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHModCl7dmFyIGUsaSxhLHMsbzsodD10LmNvbmZpZykmJihpPXQud2lkZ2V0T3B0aW9ucyx0LiR0Ym9kaWVzLmVhY2goZnVuY3Rpb24oKXtlPXAodGhpcykuY2hpbGRyZW4oKSxvPWUubGVuZ3RoLGUuZmlsdGVyKGkuc3RhdGljUm93X2NsYXNzKS5lYWNoKGZ1bmN0aW9uKCl7ZT1wKHRoaXMpLHM9dm9pZCAwIT09KHM9ZS5kYXRhKGkuc3RhdGljUm93X2luZGV4KSk/KGE9cGFyc2VGbG9hdChzKSwvJS8udGVzdChzKT9NYXRoLnJvdW5kKGEvMTAwKm8pOmEpOmUuaW5kZXgoKSxlLmRhdGEoaS5zdGF0aWNSb3dfZGF0YSxzKX0pfSkpfXZhciBvPXAudGFibGVzb3J0ZXI7by5hZGRXaWRnZXQoe2lkOiJzdGF0aWNSb3ciLG9wdGlvbnM6e3N0YXRpY1Jvd19jbGFzczoiLnN0YXRpYyIsc3RhdGljUm93X2RhdGE6InN0YXRpYy1pbmRleCIsc3RhdGljUm93X2luZGV4OiJyb3ctaW5kZXgiLHN0YXRpY1Jvd19ldmVudDoic3RhdGljUm93c1JlZnJlc2gifSxpbml0OmZ1bmN0aW9uKHQsZSxpLGEpe3ModCksaS4kdGFibGUudW5iaW5kKCgidXBkYXRlQ29tcGxldGUudHNzdGF0aWNyb3dzICIrYS5zdGF0aWNSb3dfZXZlbnQpLnJlcGxhY2UoL1xzKy9nLCIgIikpLmJpbmQoInVwZGF0ZUNvbXBsZXRlLnRzc3RhdGljcm93cyAiK2Euc3RhdGljUm93X2V2ZW50LGZ1bmN0aW9uKCl7cyh0KSxvLmFwcGx5V2lkZ2V0KHQpfSl9LGZvcm1hdDpmdW5jdGlvbih0LGUsaSl7dmFyIGEscyxvLG4sYyxkLHIsbDtlLiR0Ym9kaWVzLmVhY2goZnVuY3Rpb24oKXtmb3IoYz1wLnRhYmxlc29ydGVyLnByb2Nlc3NUYm9keSh0LHAodGhpcyksITApLGQ9ITAsbz0wLHI9Yy5jaGlsZHJlbihpLnN0YXRpY1Jvd19jbGFzcyksbj1jLmNoaWxkcmVuKCJ0ciIpLmxlbmd0aC0xLGw9ci5sZW5ndGg7ZCYmbzxsOylkPSExLHIuZWFjaChmdW5jdGlvbigpe2E9cCh0aGlzKS5kYXRhKGkuc3RhdGljUm93X2RhdGEpLChhPW48PWE/bjphPDA/MDphKSE9PXAodGhpcykuaW5kZXgoKSYmKGQ9ITAscz1wKHRoaXMpLmRldGFjaCgpLG48PWE/cy5hcHBlbmRUbyhjKTowPT09YT9zLnByZXBlbmRUbyhjKTpzLmluc2VydEJlZm9yZShjLmZpbmQoInRyOmVxKCIrYSsiKSIpKSl9KSxvKys7cC50YWJsZXNvcnRlci5wcm9jZXNzVGJvZHkodCxjLCExKX0pLGUuJHRhYmxlLnRyaWdnZXJIYW5kbGVyKCJzdGF0aWNSb3dzQ29tcGxldGUiLHQpfSxyZW1vdmU6ZnVuY3Rpb24odCxlLGkpe2UuJHRhYmxlLnVuYmluZCgoInVwZGF0ZUNvbXBsZXRlLnRzc3RhdGljcm93cyAiK2kuc3RhdGljUm93X2V2ZW50KS5yZXBsYWNlKC9ccysvZywiICIpKX19KX0oalF1ZXJ5KTtyZXR1cm4galF1ZXJ5O30pKTsK</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.ArticlePin.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5BcnRpY2xlUGluCiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IKICogQGRlc2NyaXB0aW9uCiAqCiAqLwpDb3JlLkFnZW50LkFydGljbGVQaW4gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBuYW1lIEluaXQKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICoKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgbGV0ICRBcnRpY2xlVGFibGUgPSAkKCcjQXJ0aWNsZVRhYmxlJyk7CgogICAgICAgIC8vIG1ha2UgcGlubmVkIGxpc3QgaXRlbXMgc3RhdGljIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgZmlyc3Qgcm93cyBpbiB0aGUgdGFibGUgKGhhbmRsZWQgYnkganF1ZXJ5LXRhYmxlc29ydGVyIHdpZGdldCBzdGF0aWNSb3cpCiAgICAgICAgbGV0ICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW1zID0gJCgnLlBpbm5lZEFydGljbGUnLCAkQXJ0aWNsZVRhYmxlKS5jbG9zZXN0KCd0cicpOwogICAgICAgICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW1zLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7CiAgICAgICAgICAgIGxldCAkUGlubmVkQXJ0aWNsZUxpc3RJdGVtID0gJCh0aGlzKTsKICAgICAgICAgICAgJFBpbm5lZEFydGljbGVMaXN0SXRlbS5hZGRDbGFzcygnc3RhdGljJyk7CiAgICAgICAgICAgICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW0uYXR0cignZGF0YS1yb3ctaW5kZXgnLCBpbmRleCk7CiAgICAgICAgfSk7CgoKICAgICAgICBsZXQgUGlubmVkQXJ0aWNsZUlEcyA9ICQoJy5ObyBpbnB1dC5BcnRpY2xlSUQnLCAkUGlubmVkQXJ0aWNsZUxpc3RJdGVtcykubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKTsKICAgICAgICB9KS5nZXQoKTsKCiAgICAgICAgLy8gZmluZCBjb250YWluZXJzIG9mIHdpZGdldHMgb2YgcGlubmVkIGFydGljbGVzIGJ5IHRoZWlyIGFydGljbGUgSUQgYW5kIGFkZCB0aGVtIHRvIHRoZSBzdGFydCBvZiB0aGUgc3Vycm91bmRpbmcgZGl2CiAgICAgICAgbGV0ICRBcnRpY2xlV2lkZ2V0c0NvbnRhaW5lciA9ICQoJyNBcnRpY2xlSXRlbXMnKTsKICAgICAgICBsZXQgJFBpbm5lZEFydGljbGVzID0gJCgnPiBkaXYnLCAkQXJ0aWNsZVdpZGdldHNDb250YWluZXIpLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgbGV0IEFydGljbGVJRCA9ICQoJ2E6Zmlyc3QtY2hpbGQnLCAkKHRoaXMpKS5hdHRyKCduYW1lJykuc2xpY2UoNyk7CiAgICAgICAgICAgIHJldHVybiBQaW5uZWRBcnRpY2xlSURzLmluY2x1ZGVzKEFydGljbGVJRCk7CiAgICAgICAgfSk7CgogICAgICAgICRQaW5uZWRBcnRpY2xlcy5kZXRhY2goKTsKICAgICAgICAkUGlubmVkQXJ0aWNsZXMucHJlcGVuZFRvKCRBcnRpY2xlV2lkZ2V0c0NvbnRhaW5lcik7CiAgICAgICAgJFBpbm5lZEFydGljbGVzLmFkZENsYXNzKCdQaW5uZWQnKTsKCiAgICAgICAgJCgnLkhlYWRlciBoMicsICRQaW5uZWRBcnRpY2xlcykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGxldCAkUGluID0gJC5wYXJzZUhUTUwoJzxwIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlBpbm5lZCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLXRodW1iLXRhY2siPjwvaT48ZW0+WyUgVHJhbnNsYXRlKCJQaW5uZWQiKSB8IGh0bWwgJV08L2VtPjwvcD4nKTsKICAgICAgICAgICAgJCh0aGlzKS5hZnRlcigkUGluKTsKICAgICAgICB9KTsKCiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEVfRUFSTFknKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cgp9KENvcmUuQWdlbnQuQXJ0aWNsZVBpbiB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.UI.Table.Sort.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vICRvcmlnaW46IG90b2JvIC0gNmVmZGM3YmYyYTMzMjUyNzdjZDc5YTYwZjBmMjQwN2Y4YWQ1OWU4NyAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5VSS5UYWJsZS5Tb3J0LmpzCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuVUkgPSBDb3JlLlVJIHx8IHt9OwpDb3JlLlVJLlRhYmxlID0gQ29yZS5VSS5UYWJsZSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuVUkuVGFibGUuU29ydAogKiBAbWVtYmVyb2YgQ29yZS5VSS5UYWJsZQogKiBAYXV0aG9yCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgZm9yIGNsaWVudCBzaWRlIHRhYmxlIHNvcnRpbmcuCiAqLwpDb3JlLlVJLlRhYmxlLlNvcnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgQ3VzdG9tVGV4dEV4dHJhY3RvcgogICAgICogQG1lbWJlcm9mIENvcmUuVUkuVGFibGUuU29ydAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBFeHRyYWN0ZWQgdGV4dC4KICAgICAqIEBwYXJhbSB7RE9NT2JqZWN0fSAkTm9kZSAtIEN1cnJlbnQgbm9kZSBvZiB3aGljaCB0aGUgc29ydGluZyBkYXRhIHNob3VsZCBiZSBleHRyYWN0ZWQuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQ3VzdG9tIHRleHQgZXh0cmFjdG9yLiBJdCB3aWxsIGxvb2sgaWYgYW4gaGlkZGVuIGZpZWxkIHdpdGggdGhlIGNsYXNzCiAgICAgKiAgICAgICdTb3J0RGF0YScgaXMgaW4gdGhlIHRhYmxlIGNlbGwgYW5kIHJldHVybiBpdHMgY29udGVudHMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEN1c3RvbVRleHRFeHRyYWN0b3IoJE5vZGUpIHsKICAgICAgICByZXR1cm4gJCgkTm9kZSkuZmluZCgnLlNvcnREYXRhJykudmFsKCkgfHwgJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5UYWJsZS5Tb3J0CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkVGFibGUgLSBUaGUgdGFibGUgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgc29ydGVkLgogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gRmluaXNoZWQgIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24sIGNhbGxlZCBhZnRlciB0aGUgc29ydGluZy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB0YWJsZSBzb3J0aW5nLgogICAgICogICAgICBJZiB5b3UgaGF2ZSBjZWxscyB3aXRoIHNwZWNpYWwgY29udGVudCBsaWtlIGRhdGVzLCB5b3UgY2FuCiAgICAgKiAgICAgIHB1dCBhIGhpZGRlbiBmaWVsZCB3aXRoIHRoZSBjbGFzcyAnU29ydERhdGEnIGluIHRoZW0gd2hpY2ggY29udGFpbnMKICAgICAqICAgICAgYSBzb3J0YWJsZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGxpa2UgYW4gSVNPIGRhdGUuIFRoaXMgd2lsbCB0aGVuIGJlCiAgICAgKiAgICAgIHVzZWQgZm9yIHRoZSBzb3J0aW5nLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRUYWJsZSwgRmluaXNoZWQpIHsKICAgICAgICB2YXIgJFNvcnRhYmxlQ29sdW1ucywKICAgICAgICAgICAgJEluaXRpYWxTb3J0aW5nLAogICAgICAgICAgICBTb3J0T3JkZXIsCiAgICAgICAgICAgIEhlYWRlcnMgPSB7fSwKICAgICAgICAgICAgSW5pdGlhbFNvcnQgPSBbXSwKICAgICAgICAgICAgQ29sdW1uQ291bnQgPSAwOwoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJFRhYmxlKSkgewogICAgICAgICAgICAkU29ydGFibGVDb2x1bW5zID0gJFRhYmxlLmZpbmQoJ3RoLlNvcnRhYmxlJyk7CiAgICAgICAgICAgICRJbml0aWFsU29ydGluZyA9ICRTb3J0YWJsZUNvbHVtbnMuZmlsdGVyKCcuSW5pdGlhbFNvcnRpbmcnKTsKCiAgICAgICAgICAgIC8vIE9ubHkgc3RhcnQsIGlmIHRoZXJlIGFyZSBjb2x1bW5zIHRoYXQgYWxsb3cgc29ydGluZwogICAgICAgICAgICBpZiAoJFNvcnRhYmxlQ29sdW1ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgY29sdW1ucyB3aGljaCBzaG91bGQgbm90IGJlIHNvcnRlZAogICAgICAgICAgICAgICAgJFRhYmxlLmZpbmQoJ3RoJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdTb3J0YWJsZScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcnNbQ29sdW1uQ291bnRdID0geyBzb3J0ZXI6IGZhbHNlIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIENvbHVtbkNvdW50Kys7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0dldCB0aGUgY29sdW1uLCB3aGljaCBzaG91bGQgYmUgc29ydGVkIGluaXRpYWxseSAoY2FuIGJlIG9ubHkgb25lKQogICAgICAgICAgICAgICAgaWYgKCRJbml0aWFsU29ydGluZy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICBTb3J0T3JkZXIgPSAkSW5pdGlhbFNvcnRpbmcuaGFzQ2xhc3MoJ0Rlc2NlbmRpbmcnKSA/ICcxJyA6ICcwJzsKICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsbHkgc29ydCB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhc2NlbmRpbmcgKDApIG9yIGRlc2NlbmRpbmcgKDEpCiAgICAgICAgICAgICAgICAgICAgSW5pdGlhbFNvcnQgPSBbWyRJbml0aWFsU29ydGluZy5pbmRleCgpLCBTb3J0T3JkZXJdXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkVGFibGUudGFibGVzb3J0ZXIoewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IEhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgc29ydExpc3Q6IEluaXRpYWxTb3J0LAogICAgICAgICAgICAgICAgICAgIHRleHRFeHRyYWN0aW9uOiBDdXN0b21UZXh0RXh0cmFjdG9yLAovLyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KICAgICAgICAgICAgICAgICAgICB3aWRnZXRzOiBbJ3N0YXRpY1JvdyddCi8vIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgJFRhYmxlLnRhYmxlc29ydGVyLmxhbmd1YWdlID0gewogICAgICAgICAgICAgICAgICAgIHNvcnRBc2MgICAgICA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdBc2NlbmRpbmcgc29ydCBhcHBsaWVkLCAnKSwKICAgICAgICAgICAgICAgICAgICBzb3J0RGVzYyAgICAgOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRGVzY2VuZGluZyBzb3J0IGFwcGxpZWQsICcpLAogICAgICAgICAgICAgICAgICAgIHNvcnROb25lICAgICA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdObyBzb3J0IGFwcGxpZWQsICcpLAogICAgICAgICAgICAgICAgICAgIHNvcnREaXNhYmxlZCA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdzb3J0aW5nIGlzIGRpc2FibGVkJyksCiAgICAgICAgICAgICAgICAgICAgbmV4dEFzYyAgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIGFwcGx5IGFuIGFzY2VuZGluZyBzb3J0JyksCiAgICAgICAgICAgICAgICAgICAgbmV4dERlc2MgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIGFwcGx5IGEgZGVzY2VuZGluZyBzb3J0JyksCiAgICAgICAgICAgICAgICAgICAgbmV4dE5vbmUgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIHJlbW92ZSB0aGUgc29ydCcpCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24oRmluaXNoZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgJFRhYmxlLm9uKCdzb3J0RW5kJywgRmluaXNoZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5VSS5UYWJsZS5Tb3J0IHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.Agent.ArticlePin.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi5QaW5uZWQgLldpZGdldFNpbXBsZSAuSGVhZGVyID4gcCBlbSwKc3Bhbi5QaW5uZWRBcnRpY2xlIGVtIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5QaW5uZWQgLldpZGdldFNpbXBsZSB7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA0cHggMCByZ2IoIGZyb20gdmFyKC0tY29sU2hhZG93RGFyaykgciBnIGIgLyAwLjI1KTsKfQoKLlBpbm5lZCAuV2lkZ2V0U2ltcGxlIC5IZWFkZXIgPiBwIHsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHBhZGRpbmc6IDRweCAzcHggNHB4IDZweDsKICAgIG1hcmdpbjogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBmb250LXNpemU6IDEzcHg7CiAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAjZmZmOwogICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMsCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRoLlVucmVhZEFydGljbGVzIC50YWJsZXNvcnRlci1oZWFkZXItaW5uZXIgewogICAgd2lkdGg6IGNhbGMoIDE2cHggKiAzICsgOHB4KTsgLyogMyBpY29ucyArIDJweCBtYXJnaW4gKi8KfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMgc3Bhbi5VbnJlYWRBcnRpY2xlc3sKICAgIHdpZHRoOiAxNnB4OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OyAvKiBpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgQ29yZS5EZWZhdWx0LmNzcyBpbXBvcnRhbnQgc2V0dGluZyB0aGF0IHNob3VsZCBiZSBjaGFuZ2VkICovCiAgICBtYXJnaW46IDA7Cn0KCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRkLlVucmVhZEFydGljbGVzIHsKICAgIHdpZHRoOiB1bnNldDsKICAgIGhlaWdodDogMjBweDsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMgYSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGQuVW5yZWFkQXJ0aWNsZXMsCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRoLlVucmVhZEFydGljbGVzIGEgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcHggMnB4OwogICAgY29sdW1uLWdhcDogMnB4Owp9CgojQXJ0aWNsZVRhYmxlLkRhdGFUYWJsZSB0ZC5VbnJlYWRBcnRpY2xlcyBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBmbG9hdDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGQuVW5yZWFkQXJ0aWNsZXMgc3BhbiBpIHsKICAgIG1hcmdpbjogMDsKfQo=</File>
        <File Location="doc/en/AgentTicketArticlePin.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>