<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>AgentTicketArticlePin</Name>
    <Version>11.1.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-10-26 12:06:23" Version="11.1.2">Update to OTOBO 11.1.1.</ChangeLog>
    <ChangeLog Date="2026-07-22 10:49:33" Version="11.1.1">Update to OTOBO 11.1.</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.1.x</Framework>
    <BuildCommitID>e4f3c5ebf214aa1943395ae8186cf255eff2dc86</BuildCommitID>
    <BuildDate>2026-10-26 12:06:27</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA1NzhiNGIxOTkyN2Y2MzE4Mzc2YzAyZTMxNzg4ZTI0MjVlMTA0MTE2IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRab29tLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyBjb3JlIG1vZHVsZXMKdXNlIExpc3Q6OlV0aWwgcXcoYW55IG5vbmUpOwp1c2UgUE9TSVggICAgICBxdyhjZWlsKTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3MgeyVQYXJhbX0sICRUeXBlOwoKICAgICMgc2V0IGRlYnVnCiAgICAkU2VsZi0+e0RlYnVnfSA9IDA7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRVc2VyT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkU2VsZi0+e0FydGljbGVJRH0gICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlSUQnICk7CiAgICAkU2VsZi0+e0FydGljbGVWaWV3fSAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlVmlldycgKTsKICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1pvb21FeHBhbmQnICk7CiAgICAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tRXhwYW5kU29ydCcgKTsKICAgICRTZWxmLT57Wm9vbVRpbWVsaW5lfSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1pvb21UaW1lbGluZScgKTsKCiAgICBteSAlVXNlclByZWZlcmVuY2VzID0gJFVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2F2ZSBsYXN0IHVzZWQgdmlldyB0eXBlIGluIHByZWZlcmVuY2VzCiAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gKSB7CgogICAgICAgIGlmICgKICAgICAgICAgICAgIWRlZmluZWQgJFNlbGYtPntBcnRpY2xlVmlld30KICAgICAgICAgICAgJiYgIWRlZmluZWQgJFNlbGYtPntab29tRXhwYW5kfQogICAgICAgICAgICAmJiAhZGVmaW5lZCAkU2VsZi0+e1pvb21UaW1lbGluZX0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntab29tRXhwYW5kfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRab29tRXhwYW5kJyk7CiAgICAgICAgICAgIGlmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyTGFzdFVzZWRab29tVmlld1R5cGV9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZX0gZXEgJ0V4cGFuZCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntab29tRXhwYW5kfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRVc2VyUHJlZmVyZW5jZXN7VXNlckxhc3RVc2VkWm9vbVZpZXdUeXBlfSBlcSAnQ29sbGFwc2UnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZX0gZXEgJ1RpbWVsaW5lJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgZGVmaW5lZCAkU2VsZi0+e0FydGljbGVWaWV3fQogICAgICAgICAgICB8fCBkZWZpbmVkICRTZWxmLT57Wm9vbUV4cGFuZH0KICAgICAgICAgICAgfHwgZGVmaW5lZCAkU2VsZi0+e1pvb21UaW1lbGluZX0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJExhc3RVc2VkWm9vbVZpZXdUeXBlID0gJyc7CgogICAgICAgICAgICBpZiAoIGRlZmluZWQgJFNlbGYtPntBcnRpY2xlVmlld30gKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAkU2VsZi0+e0FydGljbGVWaWV3fTsKCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZVZpZXd9IGVxICdFeHBhbmQnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkU2VsZi0+e0FydGljbGVWaWV3fSBlcSAnQ29sbGFwc2UnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkU2VsZi0+e0FydGljbGVWaWV3fSBlcSAnVGltZWxpbmUnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbVRpbWVsaW5lfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50Wm9vbUV4cGFuZCcpCiAgICAgICAgICAgICAgICAgICAgICAgID8gJ0V4cGFuZCcKICAgICAgICAgICAgICAgICAgICAgICAgOiAnQ29sbGFwc2UnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRTZWxmLT57Wm9vbUV4cGFuZH0gPT0gMSApIHsKICAgICAgICAgICAgICAgICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICdFeHBhbmQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRTZWxmLT57Wm9vbUV4cGFuZH0gPT0gMCApIHsKICAgICAgICAgICAgICAgICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICdDb2xsYXBzZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBkZWZpbmVkICRTZWxmLT57Wm9vbVRpbWVsaW5lfSAmJiAkU2VsZi0+e1pvb21UaW1lbGluZX0gPT0gMSApIHsKICAgICAgICAgICAgICAgICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICdUaW1lbGluZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFVzZXJPYmplY3QtPlNldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEtleSAgICA9PiAnVXNlckxhc3RVc2VkWm9vbVZpZXdUeXBlJywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkTGFzdFVzZWRab29tVmlld1R5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpICkgewogICAgICAgICRTZWxmLT57Wm9vbVRpbWVsaW5lfSA9IDA7CiAgICB9CgogICAgIyB3aGV0aGVyIHRoZSBtZXNzYWdlICJUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSwgLi4uIiBpcyBzaG93bgogICAgJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9IC8vPSAkVXNlclByZWZlcmVuY2Vze1VzZXJBZ2VudERvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX07CgogICAgJFNlbGYtPntab29tRXhwYW5kU29ydH0gLy89ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Wm9vbUV4cGFuZFNvcnQnKTsKCiAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpUaWNrZXRBcnRpY2xlRmlsdGVyJyk7CgogICAgIyBkZWZpbmUgaWYgcmljaCB0ZXh0IHNob3VsZCBiZSB1c2VkCiAgICAkU2VsZi0+e1JpY2hUZXh0fSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Wm9vbVJpY2hUZXh0Rm9yY2UnKQogICAgICAgIHx8ICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9CiAgICAgICAgfHwgMDsKCiAgICAjIEFsd2F5cyBleGNsdWRlIHBsYWluIHRleHQgYXR0YWNobWVudCwgYnV0IGV4Y2x1ZGUgSFRNTCBib2R5IG9ubHkgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQuCiAgICAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gPSB7CiAgICAgICAgRXhjbHVkZVBsYWluVGV4dCA9PiAxLAogICAgICAgIEV4Y2x1ZGVIVE1MQm9keSAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgRXhjbHVkZUlubGluZSAgICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgIH07CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIHRpY2tldCBpZCBsb29rdXAKICAgIGlmICggISRTZWxmLT57VGlja2V0SUR9ICYmICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXROdW1iZXInICkgKSB7CiAgICAgICAgJFNlbGYtPntUaWNrZXRJRH0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRJRExvb2t1cCgKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXROdW1iZXInICksCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBkaXNwbGF5IHNldHRpbmdzIGZvciBBZ2VudFRpY2tldFpvb20sIGUuZy4gd2hpY2ggd2lkZ2V0cyBhcmUgc2hvd24KICAgICRTZWxmLT57RGlzcGxheVNldHRpbmdzfSA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIik7CgogICAgIyB0aGlzIGlzIGEgbWFwcGluZyBvZiBoaXN0b3J5IHR5cGVzIHdoaWNoIGlzIGJlaW5nIHVzZWQKICAgICMgZm9yIHRoZSB0aW1lbGluZSB2aWV3IGFuZCBpdHMgZXZlbnQgdHlwZSBmaWx0ZXIKICAgICRTZWxmLT57SGlzdG9yeVR5cGVNYXBwaW5nfSA9IHsKICAgICAgICBUaWNrZXRMaW5rRGVsZXRlICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTGluayBEZWxldGVkJyksCiAgICAgICAgTG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBMb2NrZWQnKSwKICAgICAgICBTZXRQZW5kaW5nVGltZSAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUGVuZGluZyBUaW1lIFNldCcpLAogICAgICAgIFRpY2tldER5bmFtaWNGaWVsZFVwZGF0ZSAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdEeW5hbWljIEZpZWxkIFVwZGF0ZWQnKSwKICAgICAgICBFbWFpbEFnZW50SW50ZXJuYWwgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3V0Z29pbmcgRW1haWwgKGludGVybmFsKScpLAogICAgICAgIE5ld1RpY2tldCAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgQ3JlYXRlZCcpLAogICAgICAgIFR5cGVVcGRhdGUgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUeXBlIFVwZGF0ZWQnKSwKICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0YXJ0ICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBVcGRhdGUgVGltZSBJbiBFZmZlY3QnKSwKICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0b3AgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBVcGRhdGUgVGltZSBTdG9wcGVkJyksCiAgICAgICAgRXNjYWxhdGlvbkZpcnN0UmVzcG9uc2VUaW1lU3RvcCA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gRmlyc3QgUmVzcG9uc2UgVGltZSBTdG9wcGVkJyksCiAgICAgICAgQ3VzdG9tZXJVcGRhdGUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0N1c3RvbWVyIFVwZGF0ZWQnKSwKICAgICAgICBDaGF0SW50ZXJuYWwgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnSW50ZXJuYWwgQ2hhdCcpLAogICAgICAgIFNlbmRBdXRvRm9sbG93VXAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdXRvbWF0aWMgRm9sbG93LVVwIFNlbnQnKSwKICAgICAgICBBZGROb3RlICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90ZSBBZGRlZCcpLAogICAgICAgIEFkZE5vdGVDdXN0b21lciAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdOb3RlIEFkZGVkIChDdXN0b21lciknKSwKICAgICAgICBBZGRTTVMgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnU01TIEFkZGVkJyksCiAgICAgICAgQWRkU01TQ3VzdG9tZXIgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NNUyBBZGRlZCAoQ3VzdG9tZXIpJyksCiAgICAgICAgU3RhdGVVcGRhdGUgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1N0YXRlIFVwZGF0ZWQnKSwKICAgICAgICBTZW5kQW5zd2VyICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3V0Z29pbmcgQW5zd2VyJyksCiAgICAgICAgU2VydmljZVVwZGF0ZSAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NlcnZpY2UgVXBkYXRlZCcpLAogICAgICAgIFRpY2tldExpbmtBZGQgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdMaW5rIEFkZGVkJyksCiAgICAgICAgRW1haWxDdXN0b21lciAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIEN1c3RvbWVyIEVtYWlsJyksCiAgICAgICAgV2ViUmVxdWVzdEN1c3RvbWVyICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIFdlYiBSZXF1ZXN0JyksCiAgICAgICAgUHJpb3JpdHlVcGRhdGUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1ByaW9yaXR5IFVwZGF0ZWQnKSwKICAgICAgICBVbmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVGlja2V0IFVubG9ja2VkJyksCiAgICAgICAgRW1haWxBZ2VudCAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIEVtYWlsJyksCiAgICAgICAgVGl0bGVVcGRhdGUgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpdGxlIFVwZGF0ZWQnKSwKICAgICAgICBPd25lclVwZGF0ZSAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTmV3IE93bmVyJyksCiAgICAgICAgTWVyZ2VkICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBNZXJnZWQnKSwKICAgICAgICBQaG9uZUNhbGxBZ2VudCAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3V0Z29pbmcgUGhvbmUgQ2FsbCcpLAogICAgICAgIEZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdGb3J3YXJkZWQgTWVzc2FnZScpLAogICAgICAgIFVuc3Vic2NyaWJlICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZW1vdmVkIFVzZXIgU3Vic2NyaXB0aW9uJyksCiAgICAgICAgVGltZUFjY291bnRpbmcgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpbWUgQWNjb3VudGVkJyksCiAgICAgICAgUGhvbmVDYWxsQ3VzdG9tZXIgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIFBob25lIENhbGwnKSwKICAgICAgICBTeXN0ZW1SZXF1ZXN0ICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnU3lzdGVtIFJlcXVlc3QuJyksCiAgICAgICAgRm9sbG93VXAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIEZvbGxvdy1VcCcpLAogICAgICAgIFNlbmRBdXRvUmVwbHkgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdXRvbWF0aWMgUmVwbHkgU2VudCcpLAogICAgICAgIFNlbmRBdXRvUmVqZWN0ICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdXRvbWF0aWMgUmVqZWN0IFNlbnQnKSwKICAgICAgICBSZXNwb25zaWJsZVVwZGF0ZSAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTmV3IFJlc3BvbnNpYmxlJyksCiAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0YXJ0ICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gU29sdXRpb24gVGltZSBJbiBFZmZlY3QnKSwKICAgICAgICBFc2NhbGF0aW9uU29sdXRpb25UaW1lU3RvcCAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBTb2x1dGlvbiBUaW1lIFN0b3BwZWQnKSwKICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RhcnQgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBSZXNwb25zZSBUaW1lIEluIEVmZmVjdCcpLAogICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVTdG9wICAgICAgPT4gVHJhbnNsYXRhYmxlKCdFc2NhbGF0aW9uIFJlc3BvbnNlIFRpbWUgU3RvcHBlZCcpLAogICAgICAgIFNMQVVwZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTTEEgVXBkYXRlZCcpLAogICAgICAgIENoYXRFeHRlcm5hbCAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdFeHRlcm5hbCBDaGF0JyksCiAgICAgICAgTW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1F1ZXVlIENoYW5nZWQnKSwKICAgICAgICBTZW5kQWdlbnROb3RpZmljYXRpb24gICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90aWZpY2F0aW9uIFdhcyBTZW50JyksCiAgICB9OwoKICAgICMgQWRkIGN1c3RvbSBmaWxlcyB0byB0aGUgem9vbSdzIGZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gb24gdGhlIGZseQogICAgIyAgICB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzLgogICAgaWYgKAogICAgICAgIGRlZmluZWQgJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJykKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpbWVsaW5lVmlld0VuYWJsZWQnKSA9PSAxCiAgICAgICAgKQogICAgewogICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgS2V5ICAgPT4gJ0xvYWRlcjo6TW9kdWxlOjpBZ2VudFRpY2tldFpvb20jIyMwMDMtRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ0NvcmUuQWdlbnQuVGlja2V0Wm9vbS5UaW1lbGluZVZpZXcuanMnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBcnRpY2xlU2hvd1N0YXR1cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGVGZWF0dXJlcycpLT5TaG93RGVsZXRlZEFydGljbGVzKAogICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEdldFN0YXR1cyA9PiAxCiAgICApOwoKICAgICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30gPSAkQXJ0aWNsZVNob3dTdGF0dXMgPyAxIDogMDsKICAgICRTZWxmLT57QXJ0aWNsZVN0b3JhZ2V9ICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6QXJ0aWNsZTo6QmFja2VuZDo6TUlNRUJhc2U6OkFydGljbGVTdG9yYWdlJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlbGYtPntUaWNrZXRJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gVGlja2V0SUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICdybycsCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuLCBkb24ndCBzaG93IHRpY2tldAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgKICAgICAgICAgICAgIlRoaXMgdGlja2V0IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgaXQgaW4gaXRzIGN1cnJlbnQgc3RhdGUuIgogICAgICAgICksCiAgICAgICAgV2l0aEhlYWRlciA9PiAkU2VsZi0+e1N1YmFjdGlvbn0gJiYgJFNlbGYtPntTdWJhY3Rpb259IGVxICdBcnRpY2xlVXBkYXRlJyA/ICdubycgOiAneWVzJywKICAgICkgaWYgISRBY2Nlc3M7CgogICAgIyBnZXQgdGlja2V0IGF0dHJpYnV0ZXMKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgICMgZ2V0IEFDTCByZXN0cmljdGlvbnMKICAgIG15ICVQb3NzaWJsZUFjdGlvbnM7CiAgICBteSAkQ291bnRlciA9IDA7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgYWxsIHJlZ2lzdGVyZWQgQWN0aW9ucwogICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJykgZXEgJ0hBU0gnICkgewoKICAgICAgICBteSAlQWN0aW9ucyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpIH07CgogICAgICAgICMgb25seSB1c2UgdGhvc2UgQWN0aW9ucyB0aGF0IHN0YXRzIHdpdGggQWdlbnQKICAgICAgICAlUG9zc2libGVBY3Rpb25zID0gbWFwIHsgKyskQ291bnRlciA9PiAkXyB9CiAgICAgICAgICAgIGdyZXAgeyBzdWJzdHIoICRfLCAwLCBsZW5ndGggJ0FnZW50JyApIGVxICdBZ2VudCcgfQogICAgICAgICAgICBzb3J0IGtleXMgJUFjdGlvbnM7CiAgICB9CgogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUG9zc2libGVBY3Rpb25zLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgbXkgJUFjbEFjdGlvbiA9ICVQb3NzaWJsZUFjdGlvbnM7CiAgICBpZiAoJEFDTCkgewogICAgICAgICVBY2xBY3Rpb24gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xBY3Rpb25EYXRhKCk7CiAgICB9CgogICAgIyBjaGVjayBpZiBBQ0wgcmVzdHJpY3Rpb25zIGV4aXN0CiAgICBteSAlQWNsQWN0aW9uTG9va3VwID0gcmV2ZXJzZSAlQWNsQWN0aW9uOwoKICAgICMgc2hvdyBlcnJvciBzY3JlZW4gaWYgQUNMIHByb2hpYml0cyB0aGlzIGFjdGlvbgogICAgaWYgKCAhJEFjbEFjdGlvbkxvb2t1cHsgJFNlbGYtPntBY3Rpb259IH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgfQoKICAgICMgc2VuZCBwYXJhbWV0ZXIgVGlja2V0SUQgdG8gSlMKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnVGlja2V0SUQnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgKTsKCiAgICAjIG1hcmsgc2hvd24gdGlja2V0IGFzIHNlZW4KICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUaWNrZXRNYXJrQXNTZWVuJyApIHsKICAgICAgICBteSAkU3VjY2VzcyA9IDE7CgogICAgICAgICMgYWx3YXlzIHNob3cgYXJjaGl2ZWQgdGlja2V0cyBhcyBzZWVuCiAgICAgICAgaWYgKCAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPl9UaWNrZXRJdGVtU2VlbiggVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ01hcmtBc0ltcG9ydGFudCcgKSB7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBPd25lciBhbmQgUmVzcG9uc2libGUgY2FuIG1hcmsgYXJ0aWNsZXMgYXMgaW1wb3J0YW50IG9yIHJlbW92ZSBtYXJrCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtPd25lcklEfQogICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6UmVzcG9uc2libGUnKQogICAgICAgICAgICAgICAgJiYgJFNlbGYtPntVc2VySUR9ID09ICRUaWNrZXR7UmVzcG9uc2libGVJRH0KICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBBbHdheXMgdXNlIHVzZXIgaWQgMSBiZWNhdXNlIG90aGVyIHVzZXJzIGFsc28gaGF2ZSB0byBzZWUgdGhlIGltcG9ydGFudCBmbGFnCiAgICAgICAgICAgIG15ICVBcnRpY2xlRmxhZyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlSXNJbXBvcnRhbnQgPSAkQXJ0aWNsZUZsYWd7SW1wb3J0YW50fTsKICAgICAgICAgICAgaWYgKCRBcnRpY2xlSXNJbXBvcnRhbnQpIHsKCiAgICAgICAgICAgICAgICAjIEFsd2F5cyB1c2UgdXNlciBpZCAxIGJlY2F1c2Ugb3RoZXIgdXNlcnMgYWxzbyBoYXZlIHRvIHNlZSB0aGUgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgICAgICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0ltcG9ydGFudCcsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgQWx3YXlzIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBvdGhlciB1c2VycyBhbHNvIGhhdmUgdG8gc2VlIHRoZSBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnU2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnSW1wb3J0YW50JywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07QXJ0aWNsZUlEPSRTZWxmLT57QXJ0aWNsZUlEfSIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCByZXF1aXJlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTWFpbk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdGb3JtRHJhZnREZWxldGUnICkgewogICAgICAgIG15ICVSZXNwb25zZTsKCiAgICAgICAgbXkgJEZvcm1EcmFmdElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdElEJyApIHx8ICcnOwogICAgICAgIGlmICgkRm9ybURyYWZ0SUQpIHsKCiAgICAgICAgICAgICMgZmV0Y2ggZm9ybSBkcmFmdCB0byBjaGVjayBwZXJtaXNzaW9ucyBhbmQgdGlja2V0IGxvY2sKICAgICAgICAgICAgIyAgIE5PVEU6IHBhc3NpbmcgdGhlIG9iamVjdCBpZCBlbnN1cmVzIHZlcmlmaWNhdGlvbiB0aGF0IGZvcm0gZHJhZnQgYmVsb25ncyB0byB0aWNrZXQKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGb3JtRHJhZnQnKTsKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdCAgICAgICA9ICRGb3JtRHJhZnRPYmplY3QtPkZvcm1EcmFmdEdldCgKICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRGb3JtRHJhZnRJRCwKICAgICAgICAgICAgICAgIE9iamVjdElEICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRm9ybURyYWZ0KSApIHsKCiAgICAgICAgICAgICAgICAjIHVzZSBjb25maWcgb2YgZm9ybSBkcmFmdCBhY3Rpb24gZm9yIGNoZWNrcwogICAgICAgICAgICAgICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJ1RpY2tldDo6RnJvbnRlbmQ6OicgLiAkRm9ybURyYWZ0LT57QWN0aW9ufSApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgYWN0aW9uIGlzIGFsbG93ZWQgYXMgcGVyIEFDTHMKICAgICAgICAgICAgICAgIGlmICggJEFjbEFjdGlvbkxvb2t1cHsgJEZvcm1EcmFmdC0+e0FjdGlvbn0gfSAmJiBJc0hhc2hSZWZXaXRoRGF0YSgkQ29uZmlnKSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyB0aWNrZXQgbG9jayBjaGVjawogICAgICAgICAgICAgICAgICAgICMgICBOT1RFOiBvd25lciBzdGF0dXMgb3ZlcnJ1bGVzIHBlcm1pc3Npb24gY2hlY2sgaW4gdGhpcyBjYXNlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnLT57UmVxdWlyZWRMb2NrfSAmJiAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrR2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlNvcnJ5LCB5b3UgbmVlZCB0byBiZSB0aGUgdGlja2V0IG93bmVyIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJENvbmZpZy0+e1Blcm1pc3Npb259LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJObyBwZXJtaXNzaW9uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUmVzcG9uc2V7RXJyb3J9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7U3VjY2Vzc30gPSAkRm9ybURyYWZ0T2JqZWN0LT5Gb3JtRHJhZnREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkRm9ybURyYWZ0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+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+e0FjdGlvbn07U3ViYWN0aW9uPUxvYWRXaWRnZXQ7IgogICAgICAgICAgICAgICAgLiAiVGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07RWxlbWVudElEPSRFbGVtZW50SUQiOwogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSBldmFsIHsgJE1haW5PYmplY3QtPlJlcXVpcmUoICRDb25maWctPntNb2R1bGV9ICkgfTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRTdWNjZXNzOwoKICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoICRTZWxmLT4lKiApIH07CiAgICAgICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIm5ldygpIG9mIFdpZGdldCBtb2R1bGUgJENvbmZpZy0+e01vZHVsZX0gbm90IHN1Y2Nlc3NmdWwhIiwKCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CgogICAgICAgIG15ICRXaWRnZXRPdXRwdXQgPSAkTW9kdWxlLT5SdW4oCiAgICAgICAgICAgIFRpY2tldCAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgQWNsQWN0aW9uID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBDb25maWcgICAgPT4gJENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IFdJREdFVCB1bmxlc3MgJFdpZGdldE91dHB1dDsKCiAgICAgICAgJFdpZGdldE91dHB1dC0+e1Jhbmt9IC8vPSAkS2V5OwogICAgICAgIG15ICRMb2NhdGlvbiA9ICRXaWRnZXRPdXRwdXQtPntMb2NhdGlvbn0gfHwgJENvbmZpZy0+e0xvY2F0aW9ufTsKICAgICAgICBwdXNoIEB7ICRXaWRnZXRzeyRMb2NhdGlvbn0gfSwgJFdpZGdldE91dHB1dDsKICAgIH0KICAgIGZvciBteSAkTG9jYXRpb24gKCBzb3J0IGtleXMgJVdpZGdldHMgKSB7CiAgICAgICAgJFBhcmFteyAkTG9jYXRpb24gLiAnV2lkZ2V0cycgfSA9IFsKICAgICAgICAgICAgc29ydCB7ICRhLT57UmFua30gY21wICRiLT57UmFua30gfSBAeyAkV2lkZ2V0c3skTG9jYXRpb259IH0KICAgICAgICBdOwogICAgfQogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdBc3luY1dpZGdldEFjdGlvbnMnLAogICAgICAgIFZhbHVlID0+IFwlQXN5bmNXaWRnZXRBY3Rpb25zLAogICAgKTsKCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtIb29rfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJykgfHwgJ1RpY2tldCMnOwoKICAgICMgb25seSBzaG93IGFydGljbGUgdHJlZSBpZiBhcnRpY2xlcyBhcmUgcHJlc2VudCwKICAgICMgb3IgaWYgYSBmaWx0ZXIgaXMgc2V0IChzbyB0aGF0IHRoZSB1c2VyIGhhcyB0aGUgb3B0aW9uIHRvCiAgICAjIGRpc2FibGUgdGhlIGZpbHRlcikKICAgIGlmICggQEFydGljbGVCb3ggfHwgJFNlbGYtPntBcnRpY2xlRmlsdGVyfSApIHsKCiAgICAgICAgbXkgJFBhZ2luYXRpb247CgogICAgICAgIGlmICgkTmVlZFBhZ2luYXRpb24pIHsKICAgICAgICAgICAgJFBhZ2luYXRpb24gPSB7CiAgICAgICAgICAgICAgICBQYWdlcyAgICAgICA9PiAkUGFnZXMsCiAgICAgICAgICAgICAgICBDdXJyZW50UGFnZSA9PiAkUGFnZSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGFydGljbGUgdHJlZQogICAgICAgICRQYXJhbXtBcnRpY2xlVHJlZX0gPSAkU2VsZi0+X0FydGljbGVUcmVlKAogICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgQXJ0aWNsZUZsYWdzICAgICAgPT4gXCVBcnRpY2xlRmxhZ3MsCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIEFydGljbGVNYXhMaW1pdCAgID0+ICRBcnRpY2xlTWF4TGltaXQsCiAgICAgICAgICAgIEFydGljbGVCb3ggICAgICAgID0+IFxAQXJ0aWNsZUJveCwKICAgICAgICAgICAgUGFnaW5hdGlvbiAgICAgICAgPT4gJFBhZ2luYXRpb24sCiAgICAgICAgICAgIFBhZ2UgICAgICAgICAgICAgID0+ICRQYWdlLAogICAgICAgICAgICBBcnRpY2xlQ291bnQgICAgICA9PiBzY2FsYXIgQEFydGljbGVCb3gsCiAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBTdGFuZGFyZFJlc3BvbnNlcyA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7QW5zd2VyfSwKICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFydGljbGVzIGl0ZW1zCiAgICBpZiAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlSURzOwogICAgICAgICRQYXJhbXtBcnRpY2xlSXRlbXN9ID0gJyc7CgogICAgICAgIG15ICRBcnRpY2xlV2lkZ2V0c0hUTUwgPSAnJzsKCiAgICAgICAgQVJUSUNMRToKICAgICAgICBmb3IgbXkgJEFydGljbGVUbXAgKEBBcnRpY2xlQm94U2hvd24pIHsKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZVRtcC0+JSo7CgogICAgICAgICAgICAkQXJ0aWNsZVdpZGdldHNIVE1MIC49ICRTZWxmLT5fQXJ0aWNsZUl0ZW0oCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFydGljbGUgICAgICAgICAgID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgU3RhbmRhcmRSZXNwb25zZXMgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0Fuc3dlcn0sCiAgICAgICAgICAgICAgICBTdGFuZGFyZEZvcndhcmRzICA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7Rm9yd2FyZH0sCiAgICAgICAgICAgICAgICBBY3R1YWxBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1N0YXRpYycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQEFydGljbGVJRHMsICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUlEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFxAQXJ0aWNsZUlEcywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01lbnVJdGVtcycsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TWVudUl0ZW1zfSwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17QXJ0aWNsZUl0ZW1zfSAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRab29tJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQXJ0aWNsZVdpZGdldHNIVE1MID0+ICRBcnRpY2xlV2lkZ2V0c0hUTUwsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgaWYgKCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKCiAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRJdGVtTWFya0FzU2VlbicsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG51bWJlciBvZiBhcnRpY2xlcwogICAgJFBhcmFte0FydGljbGVDb3VudH0gPSBzY2FsYXIgQEFydGljbGVCb3g7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSGVhZGVyJywKICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwoKICAgIG15ICVBY3Rpb25Mb29rdXA7CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBydW4gdGlja2V0IG1lbnUgbW9kdWxlcwogICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVNZW51cyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZScpIH07CiAgICAgICAgbXkgJU1lbnVDbHVzdGVyczsKICAgICAgICBteSAlWm9vbU1lbnVJdGVtczsKCiAgICAgICAgTUVOVToKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgIG15ICRJdGVtID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0LAogICAgICAgICAgICAgICAgQUNMICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQ29uZmlnID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IE1FTlUgdW5sZXNzICRJdGVtOwoKICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57UG9wdXBUeXBlfSApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gIkFzUG9wdXAgUG9wdXBUeXBlXyRNZW51c3skTWVudX0tPntQb3B1cFR5cGV9IjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57QWN0aW9ufSApIHsKICAgICAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7ICRNZW51c3skTWVudX0tPntBY3Rpb259IH0gPSB7CiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJEl0ZW0tPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAkSXRlbS0+e0NsYXNzfSwKICAgICAgICAgICAgICAgICAgICBMaW5rUGFyYW0gICAgICA9PiAkSXRlbS0+e0xpbmtQYXJhbX0sCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gJEl0ZW0tPntEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSggJEl0ZW0tPntOYW1lfSApLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJOYW1lfSApIHsKCiAgICAgICAgICAgICAgICAkWm9vbU1lbnVJdGVtc3skTWVudX0gPSAkSXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHRoZSBjb25maWd1cmVkIHByaW9yaXR5IGZvciB0aGlzIGl0ZW0uIFRoZSBsb3dlc3QgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGUgc2FtZSBjbHVzdGVyIHdpbnMuCiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHkgPSAkTWVudUNsdXN0ZXJzeyAkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9IH0tPntQcmlvcml0eX0gfHwgMDsKICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntDbHVzdGVyUHJpb3JpdHl9IHx8PSAwOwogICAgICAgICAgICAgICAgaWYgKCAhJFByaW9yaXR5IHx8ICRQcmlvcml0eSAhfiAvXlxkezN9JC8gfHwgJFByaW9yaXR5ID4gJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJQcmlvcml0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5ID0gJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJQcmlvcml0eX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkTWVudUNsdXN0ZXJzeyAkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9IH0tPntQcmlvcml0eX0gPSAkUHJpb3JpdHk7CiAgICAgICAgICAgICAgICAkTWVudUNsdXN0ZXJzeyAkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9IH0tPntJdGVtc30tPnskTWVudX0gPSAkSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRDbHVzdGVyICggc29ydCBrZXlzICVNZW51Q2x1c3RlcnMgKSB7CiAgICAgICAgICAgICRab29tTWVudUl0ZW1zeyAkTWVudUNsdXN0ZXJzeyRDbHVzdGVyfS0+e1ByaW9yaXR5fSAuICRDbHVzdGVyIH0gPSB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ2x1c3RlciwKICAgICAgICAgICAgICAgIFR5cGUgID0+ICdDbHVzdGVyJywKICAgICAgICAgICAgICAgIExpbmsgID0+ICcjJywKICAgICAgICAgICAgICAgIENsYXNzID0+ICdDbHVzdGVyTGluaycsCiAgICAgICAgICAgICAgICBJdGVtcyA9PiAkTWVudUNsdXN0ZXJzeyRDbHVzdGVyfS0+e0l0ZW1zfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgZGlzcGxheSBhbGwgaXRlbXMKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVpvb21NZW51SXRlbXMgKSB7CiAgICAgICAgICAgIGlmICggJFpvb21NZW51SXRlbXN7JEl0ZW19LT57RXh0ZXJuYWxMaW5rfSAmJiAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntFeHRlcm5hbExpbmt9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51RXh0ZXJuYWxMaW5rJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRab29tTWVudUl0ZW1zeyRJdGVtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkWm9vbU1lbnVJdGVtc3skSXRlbX17Q29uZmlnfXtUeXBlfSAmJiAkWm9vbU1lbnVJdGVtc3skSXRlbX17Q29uZmlnfXtUeXBlfSBlcSAnRm9ybScgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51SXRlbScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudUZvcm1HZW5lcmljJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRab29tTWVudUl0ZW1zeyRJdGVtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51SXRlbScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e1R5cGV9IGVxICdDbHVzdGVyJyApIHsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51U3ViQ29udGFpbmVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIG1hcCBvZiBwcmlvcml0aWVzIHZlcnN1cyBzdWJpdGVtcyBiYXNlZCBvbiB0aGUgQ2x1c3RlclByaW9yaXR5IG9mIGVhY2ggc3ViaXRlbQogICAgICAgICAgICAgICAgIyB0aGUgc2V0dGluZ3Mga2V5IG9yZGVyIHByZXZhaWxzIGJldHdlZW4gc3ViaXRlbXMgd2l0aCBlcXVhbCBDbHVzdGVyUHJpb3JpdHkKICAgICAgICAgICAgICAgICMgcHJpb3JpdGllcyBhcmUgYWx3YXlzIGFwcGVuZGVkIGEgc2VxdWVudGlhbCBzdWZmaXggb2YgdHdvIGRpZ2l0cyAoODAwLTAxLCA4MDAtMDIsIDgwMC0wMywgZXRjLikKICAgICAgICAgICAgICAgICMgdGhpcyBlbmZvcmNlcyBkaXN0aW5jdCBtYXAga2V5cyBldmVuIGFtb25nIHN1Yml0ZW1zIHdpdGggdGhlIHNhbWUgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICBteSAlUHJpb3JpdHlTdWZmaXhlczsKICAgICAgICAgICAgICAgIG15ICVNYXBQcmlvcml0eVRvU3ViSXRlbTsKICAgICAgICAgICAgICAgIGZvciBteSAkU3ViSXRlbSAoIHNvcnQga2V5cyAleyAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntJdGVtc30gfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkSXRlbVByaW9yaXR5ID0gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9LT57JFN1Ykl0ZW19LT57Q2x1c3RlclByaW9yaXR5fTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0rKzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZW5mb3JjZSB0aGUgdHdvIGRpZ2l0cyBzdWZmaXgsIHNpbmNlIDEwIG9yIG1vcmUgc3ViaXRlbXMgYXJlIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSA9fiAvXlxkJC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9ID0gIjAiIC4gJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlLZXkgPSAkSXRlbVByaW9yaXR5IC4gIi0iIC4gJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgJE1hcFByaW9yaXR5VG9TdWJJdGVteyRQcmlvcml0eUtleX0gPSAkU3ViSXRlbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJlbmRlciBzdWJpdGVtcyBhY2NvcmRpbmcgdG8gdGhlIHByaW9yaXRpZXMgbWFwCiAgICAgICAgICAgICAgICBmb3IgbXkgJFByaW9yaXR5S2V5ICggc29ydCBrZXlzICVNYXBQcmlvcml0eVRvU3ViSXRlbSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3ViSXRlbSA9ICRNYXBQcmlvcml0eVRvU3ViSXRlbXskUHJpb3JpdHlLZXl9OwogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9LT57JFN1Ykl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgTW92ZVF1ZXVlc1N0cmcKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNb3ZlVHlwZScpID1+IC9eZm9ybSQvaSApIHsKICAgICAgICAkTW92ZVF1ZXVlc3swfSAgICAgICAgID0gJy0gJyAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTW92ZScpIC4gJyAtJzsKICAgICAgICAkUGFyYW17TW92ZVF1ZXVlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QWdlbnRRdWV1ZUxpc3RPcHRpb24oCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdEZXN0UXVldWVJRCcsCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgPyAxIDogMCwKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVNb3ZlUXVldWVzLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnTW9kZXJuaXplIFNtYWxsJywKICAgICAgICAgICAgQ3VycmVudFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICApOwogICAgfQogICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKICAgIGlmICgKICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+e0FnZW50VGlja2V0TW92ZX0KICAgICAgICAmJiAoICRBY2xBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRNb3ZlfSApCiAgICAgICAgKQogICAgewogICAgICAgIG15ICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAnbW92ZScsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17VGlja2V0SUR9ID0gJFRpY2tldHtUaWNrZXRJRH07CiAgICAgICAgaWYgKCRBY2Nlc3MpIHsKICAgICAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1vdmVUeXBlJykgPX4gL15mb3JtJC9pICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW92ZUxpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVBY2xBY3Rpb24gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb3ZlRm9ybScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUFjbEFjdGlvbiB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHtBZ2VudFRpY2tldE1vdmV9ID0gewogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJ0FjdGlvbj1BZ2VudFRpY2tldE1vdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXScsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gVHJhbnNsYXRhYmxlKCdDaGFuZ2UgUXVldWUnKSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUXVldWUnKSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdRdWV1ZScpLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIENoZWNrIGlmIEFnZW50VGlja2V0Q29tcG9zZSBhbmQgQWdlbnRUaWNrZXRGb3J3YXJkIGFyZSBhbGxvd2VkIGFzIGFjdGlvbiAoZm9yIGRpc3BsYXkgb2YgRm9ybURyYWZ0cykuCiAgICBteSAlQWN0aW9uQ29uZmlnID0gKAogICAgICAgIEFnZW50VGlja2V0Q29tcG9zZSA9PiB7CiAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICdBY3Rpb249QWdlbnRUaWNrZXRDb21wb3NlO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV0nLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgTGlua1BhcmFtICAgICAgPT4gJycsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+IFRyYW5zbGF0YWJsZSgnUmVwbHknKSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZXBseScpLAogICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnUmVwbHknKSwKICAgICAgICB9LAogICAgICAgIEFnZW50VGlja2V0Rm9yd2FyZCA9PiB7CiAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICdBY3Rpb249QWdlbnRUaWNrZXRGb3J3YXJkO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV0nLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgTGlua1BhcmFtICAgICAgPT4gJycsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+IFRyYW5zbGF0YWJsZSgnRm9yd2FyZCBhcnRpY2xlIHZpYSBtYWlsJyksCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRm9yd2FyZCcpLAogICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnRm9yd2FyZCcpLAogICAgICAgIH0sCiAgICApOwogICAgQUNUSU9OOgogICAgZm9yIG15ICRBY3Rpb24gKHF3KEFnZW50VGlja2V0Q29tcG9zZSBBZ2VudFRpY2tldEZvcndhcmQpKSB7CgogICAgICAgIG5leHQgQUNUSU9OIHVubGVzcyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwogICAgICAgIG5leHQgQUNUSU9OIHVubGVzcyAkQWNsQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGlja2V0OjpGcm9udGVuZDo6JyAuICRBY3Rpb24gKTsKICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgbmV4dCBBQ1RJT04gdW5sZXNzICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRBY3Rpb25Mb29rdXB7JEFjdGlvbn0gPSAkQWN0aW9uQ29uZmlneyRBY3Rpb259OwogICAgfQoKICAgICMgR2V0IGFuZCBzaG93IGF2YWlsYWJsZSBGb3JtRHJhZnRzLgogICAgbXkgJVNob3duRm9ybURyYWZ0RW50cmllczsKICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRMaXN0R2V0KAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICk7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRm9ybURyYWZ0TGlzdCkgKSB7CiAgICAgICAgRm9ybURyYWZ0OgogICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CiAgICAgICAgICAgIG5leHQgRm9ybURyYWZ0IGlmICEkQWN0aW9uTG9va3VweyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9OwoKICAgICAgICAgICAgcHVzaCBAeyAkU2hvd25Gb3JtRHJhZnRFbnRyaWVzeyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9IH0sICRGb3JtRHJhZnQ7CiAgICAgICAgfQogICAgfQogICAgaWYgKCVTaG93bkZvcm1EcmFmdEVudHJpZXMpIHsKCiAgICAgICAgbXkgJExhc3RBcnRpY2xlOwogICAgICAgIGlmICggJE9yZGVyIGVxICdERVNDJyApIHsKICAgICAgICAgICAgJExhc3RBcnRpY2xlID0gJEFydGljbGVCb3hBbGxbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGFzdEFydGljbGUgPSAkQXJ0aWNsZUJveEFsbFstMV07CiAgICAgICAgfQoKICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lOwogICAgICAgIGlmICggJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgPSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCk7CiAgICAgICAgfQoKICAgICAgICBteSBARm9ybURyYWZ0czsKCiAgICAgICAgZm9yIG15ICRBY3Rpb24gKAogICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7JGF9LT57VHJhbnNsYXRlZE5hbWV9CiAgICAgICAgICAgICAgICAgICAgY21wCiAgICAgICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHskYn0tPntUcmFuc2xhdGVkTmFtZX0KICAgICAgICAgICAgfSBrZXlzICVTaG93bkZvcm1EcmFmdEVudHJpZXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEFjdGlvbkRhdGEgPSAkQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5ICgKICAgICAgICAgICAgICAgIHNvcnQgewogICAgICAgICAgICAgICAgICAgICRhLT57VGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIGNtcAogICAgICAgICAgICAgICAgICAgICAgICAkYi0+e1RpdGxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAgICAkYS0+e0Zvcm1EcmFmdElEfQogICAgICAgICAgICAgICAgICAgICAgICA8PT4KICAgICAgICAgICAgICAgICAgICAgICAgJGItPntGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgIH0gQHsgJFNob3duRm9ybURyYWZ0RW50cmllc3skQWN0aW9ufSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlQnl9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlQnl9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2hvd25Gb3JtRHJhZnRBY3Rpb25FbnRyeSA9IHsKICAgICAgICAgICAgICAgICAgICAleyRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5fSwKICAgICAgICAgICAgICAgICAgICAleyRBY3Rpb25EYXRhfSwKCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHB1c2ggQEZvcm1EcmFmdHMsICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRm9ybURyYWZ0VGFibGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEZvcm1EcmFmdHMgPT4gXEBGb3JtRHJhZnRzLAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBjcmVhdGVkIGJ5IGlmIGRpZmZlcmVudCB0aGVuIFVzZXIgSUQgMQogICAgaWYgKCAkVGlja2V0e0NyZWF0ZUJ5fSA+IDEgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICAgICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgICAgICRUaWNrZXR7Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoIFVzZXJJRCA9PiAkVGlja2V0e0NyZWF0ZUJ5fSApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDcmVhdGVkQnknLAogICAgICAgICAgICBEYXRhID0+IHslVGlja2V0fSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBubyBhcnRpY2xlcyBibG9jayBpZiB0aWNrZXQgZG9lcyBub3QgY29udGFpbiBhcnRpY2xlcwogICAgaWYgKCAhQEFydGljbGVCb3ggJiYgISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGludE5vQXJ0aWNsZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgaXMgbm9ybWFsIG9yIHByb2Nlc3MgdGlja2V0CiAgICBteSAkSXNQcm9jZXNzVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q2hlY2tGb3JQcm9jZXNzVHlwZSgKICAgICAgICAnVGlja2V0SUQnID0+ICRTZWxmLT57VGlja2V0SUR9CiAgICApOwoKICAgICMgY29sbGVjdCBkYXRhIGZvciBvdmVydmlldyB3aWRnZXQKICAgIG15ICVXaWRnZXREYXRhOwogICAgaWYgKCAkSXNQcm9jZXNzVGlja2V0IHx8ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fSApIHsKICAgICAgICAlV2lkZ2V0RGF0YSA9ICRJc1Byb2Nlc3NUaWNrZXQKICAgICAgICAgICAgPyAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e1Byb2Nlc3NEaXNwbGF5fSwKICAgICAgICAgICAgICAgIFdpZGdldFRpdGxlICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc0Rpc3BsYXl9e1dpZGdldFRpdGxlfSwKICAgICAgICAgICAgICAgIFdpZGdldER5bmFtaWNGaWVsZEdyb3VwcyA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldERpc3BsYXl9LAogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgICAgICAgICAgICAgID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fXtXaWRnZXRUaXRsZX0sCiAgICAgICAgICAgICAgICBXaWRnZXREeW5hbWljRmllbGRHcm91cHMgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCgogICAgICAgICAgICApOwoKICAgICAgICAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKQogICAgICAgICAgICAtPnsgKCAkSXNQcm9jZXNzVGlja2V0ID8gJ1Byb2Nlc3NXaWRnZXREeW5hbWljRmllbGQnIDogJ0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZCcgKSB9IC8vIHt9OwogICAgfQoKICAgICMgZGVjaWRlIGlmIHdpZGdldCBzaG91bGQgYmUgc2hvd24KICAgIG15ICRTaG93V2lkZ2V0ID0gMDsKCiAgICAjIGFsd2F5cyBzaG93IGlmIHdlIGhhdmUgYSBwcm9jZXNzIHRpY2tldCBmb3IgYWN0aXZpdHkgZGlhbG9ncwogICAgaWYgKCRJc1Byb2Nlc3NUaWNrZXQpIHsKICAgICAgICAkU2hvd1dpZGdldCA9IDE7CiAgICB9CgogICAgIyBlbHNlIHNob3cgb25seSBpZiBkeW5hbWljIGZpZWxkcyBhcmUgZGVmaW5lZCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaGFzIGEgdmFsdWUKICAgIGVsc2lmICggSXNIYXNoUmVmV2l0aERhdGEoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH0gKSApIHsKICAgICAgICBERlZBTFVFOgogICAgICAgIGZvciBteSAkRmllbGROYW1lICgga2V5cyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBERlZBTFVFIHVubGVzcyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9eyRGaWVsZE5hbWV9OwogICAgICAgICAgICBuZXh0IERGVkFMVUUgdW5sZXNzICRUaWNrZXR7IkR5bmFtaWNGaWVsZF8kRmllbGROYW1lIn07CgogICAgICAgICAgICAkU2hvd1dpZGdldCA9IDE7CgogICAgICAgICAgICBsYXN0IERGVkFMVUU7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBvdmVydmlldyB3aWRnZXQgd2l0aCBlaXRoZXIgZHluYW1pYyBmaWVsZCBkYXRhIG9yIHdpdGggcHJvY2VzcyBhbmQgYWN0aXZpdHkgZGlhbG9nIGRhdGEKICAgIGlmICgkU2hvd1dpZGdldCkgewoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ092ZXJ2aWV3V2lkZ2V0JywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB0aGUgb3ZlcnZpZXcgd2lkZ2V0IGluIHRoZSBtYWluIHNjcmVlbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgPT4gJFdpZGdldERhdGF7V2lkZ2V0VGl0bGV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY29sbGVjdCBhbmQgcmVuZGVyIHByb2Nlc3MgZGF0YSBpZiBuZWNlc3NhcnkKICAgICAgICBteSAkQWN0aXZpdHlOYW1lOwogICAgICAgIG15ICROZXh0QWN0aXZpdHlEaWFsb2dzOwogICAgICAgIG15ICRQcm9jZXNzRW50aXR5SURGaWVsZDsKICAgICAgICBpZiAoJElzUHJvY2Vzc1RpY2tldCkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIERGIHdoZXJlIHRoZSBQcm9jZXNzRW50aXR5SUQgaXMgc3RvcmVkCiAgICAgICAgICAgICRQcm9jZXNzRW50aXR5SURGaWVsZCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50UHJvY2Vzc0lEIik7CgogICAgICAgICAgICAjIGdldCB0aGUgREYgd2hlcmUgdGhlIEFjdGl2aXR5RW50aXR5SUQgaXMgc3RvcmVkCiAgICAgICAgICAgIG15ICRBY3Rpdml0eUVudGl0eUlERmllbGQgPSAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCJQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudEFjdGl2aXR5SUQiKTsKCiAgICAgICAgICAgIG15ICRBY3Rpdml0eURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5JyktPkFjdGl2aXR5R2V0KAogICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAkVGlja2V0eyRBY3Rpdml0eUVudGl0eUlERmllbGR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgbmV4dCBhY3Rpdml0eSBkaWFsb2dzCiAgICAgICAgICAgIGlmICggJFRpY2tldHskQWN0aXZpdHlFbnRpdHlJREZpZWxkfSApIHsKCiAgICAgICAgICAgICAgICAjIHByb3RlY3Rpb24gYWdhaW5zdCBhdXRvdml2aWZpY2F0aW9uCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRBY3Rpdml0eURhdGEpICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQWN0aXZpdHlEYXRhLT57QWN0aXZpdHlEaWFsb2d9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJE5leHRBY3Rpdml0eURpYWxvZ3MgPSAke0FjdGl2aXR5RGF0YX0tPntBY3Rpdml0eURpYWxvZ307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTmV4dEFjdGl2aXR5RGlhbG9ncyA9IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRBY3Rpdml0eU5hbWUgPSAkQWN0aXZpdHlEYXRhLT57TmFtZX07CiAgICAgICAgfQoKICAgICAgICBpZiAoJE5leHRBY3Rpdml0eURpYWxvZ3MpIHsKCiAgICAgICAgICAgICMgZ2V0IEFjdGl2aXR5RGlhbG9nIG9iamVjdAogICAgICAgICAgICBteSAkQWN0aXZpdHlEaWFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5RGlhbG9nJyk7CgogICAgICAgICAgICAjIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgdGhlIG5lZWRlZCBwZXJtaXNzaW9ucyB0byB2aWV3IHRoZQogICAgICAgICAgICAjIGRpZmZlcmVudCBhY3Rpdml0eSBkaWFsb2dzLCBzbyB3ZSBsb29wIG92ZXIgZXZlcnkgYWN0aXZpdHkgZGlhbG9nIGFuZCBjaGVjayBpZiB0aGVyZQogICAgICAgICAgICAjIGlzIGEgcGVybWlzc2lvbiBjb25maWd1cmVkLiBJZiB0aGVyZSBpcyBhIHBlcm1pc3Npb24gY29uZmlndXJlZCB3ZSBjaGVjayB0aGlzCiAgICAgICAgICAgICMgYW5kIGRpc3BsYXkvaGlkZSB0aGUgYWN0aXZpdHkgZGlhbG9nIGxpbmsKICAgICAgICAgICAgbXkgJVBlcm1pc3Npb25SaWdodHM7CiAgICAgICAgICAgIG15ICVQZXJtaXNzaW9uQWN0aXZpdHlEaWFsb2dMaXN0OwogICAgICAgICAgICBBQ1RJVklUWURJQUxPR1BFUk1JU1NJT046CiAgICAgICAgICAgIGZvciBteSAkSW5kZXggKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyROZXh0QWN0aXZpdHlEaWFsb2dzfSApIHsKICAgICAgICAgICAgICAgIG15ICRDdXJyZW50QWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JEluZGV4fTsKICAgICAgICAgICAgICAgIG15ICRDdXJyZW50QWN0aXZpdHlEaWFsb2cgICAgICAgICA9ICRBY3Rpdml0eURpYWxvZ09iamVjdC0+QWN0aXZpdHlEaWFsb2dHZXQoCiAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlECiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIGFuIGludGVyZmFjZSBsb29rdXAtbGlzdAogICAgICAgICAgICAgICAgbXkgJUludGVyZmFjZUxvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAeyAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57SW50ZXJmYWNlfSB9OwoKICAgICAgICAgICAgICAgIG5leHQgQUNUSVZJVFlESUFMT0dQRVJNSVNTSU9OIGlmICEkSW50ZXJmYWNlTG9va3Vwe0FnZW50SW50ZXJmYWNlfTsKCiAgICAgICAgICAgICAgICBpZiAoICRDdXJyZW50QWN0aXZpdHlEaWFsb2ctPntQZXJtaXNzaW9ufSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBwZXJmb3JtYW5jZS1ib29zdC9jYWNoZQogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFBlcm1pc3Npb25SaWdodHN7ICRDdXJyZW50QWN0aXZpdHlEaWFsb2ctPntQZXJtaXNzaW9ufSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUGVybWlzc2lvblJpZ2h0c3sgJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259IH0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUGVybWlzc2lvblJpZ2h0c3sgJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQUNUSVZJVFlESUFMT0dQRVJNSVNTSU9OOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkUGVybWlzc2lvbkFjdGl2aXR5RGlhbG9nTGlzdHskSW5kZXh9ID0gJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlZHVjZSBuZXh0IGFjdGl2aXR5IGRpYWxvZ3MgdG8gdGhlIG9uZXMgdGhhdCBoYXZlIHBlcm1pc3Npb25zCiAgICAgICAgICAgICROZXh0QWN0aXZpdHlEaWFsb2dzID0gXCVQZXJtaXNzaW9uQWN0aXZpdHlEaWFsb2dMaXN0OwoKICAgICAgICAgICAgIyBnZXQgQUNMIHJlc3RyaWN0aW9ucwogICAgICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3QsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpdml0eURpYWxvZycsCiAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgICAgICV7JE5leHRBY3Rpdml0eURpYWxvZ3N9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05leHRBY3Rpdml0eURpYWxvZ3MnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0FjdGl2aXR5TmFtZScgPT4gJEFjdGl2aXR5TmFtZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCROZXh0QWN0aXZpdHlEaWFsb2dzKSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkTmV4dEFjdGl2aXR5RGlhbG9nS2V5ICggc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXskTmV4dEFjdGl2aXR5RGlhbG9nc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFjdGl2aXR5RGlhbG9nRGF0YSA9ICRBY3Rpdml0eURpYWxvZ09iamVjdC0+QWN0aXZpdHlEaWFsb2dHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0FnZW50SW50ZXJmYWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkTmV4dEFjdGl2aXR5RGlhbG9ncy0+eyROZXh0QWN0aXZpdHlEaWFsb2dLZXl9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZGlyZWN0IHN1Ym1pdCBpcyBhY3RpdmUgZm9yIHRoaXMgYWN0aXZpdHkgZGlhbG9nCiAgICAgICAgICAgICAgICAgICAgbXkgJERpcmVjdFN1Ym1pdCA9ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntEaXJlY3RTdWJtaXR9OwogICAgICAgICAgICAgICAgICAgIGlmICggYW55IHsgJEFjdGl2aXR5RGlhbG9nRGF0YS0+e0ZpZWxkc317JF99e0Rpc3BsYXl9IH0ga2V5cyAkQWN0aXZpdHlEaWFsb2dEYXRhLT57RmllbGRzfS0+JSogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREaXJlY3RTdWJtaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCREaXJlY3RTdWJtaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBY3Rpdml0eURpYWxvZ0RpcmVjdFN1Ym1pdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JE5leHRBY3Rpdml0eURpYWxvZ0tleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntTdWJtaXRCdXR0b25UZXh0fSB8fCAkQWN0aXZpdHlEaWFsb2dEYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRUaWNrZXR7JFByb2Nlc3NFbnRpdHlJREZpZWxkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBY3Rpdml0eURpYWxvZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JE5leHRBY3Rpdml0eURpYWxvZ0tleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFRpY2tldHskUHJvY2Vzc0VudGl0eUlERmllbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9BY3Rpdml0eURpYWxvZ3MnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHRvIHN0b3JlIGR5bmFtaWMgZmllbGRzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgb3ZlcnZpZXcgd2lkZ2V0CiAgICAgICAgbXkgJUZpZWxkVG9Hcm91cEluZGV4OwogICAgICAgIG15IEBXaWRnZXRGaWVsZENvbnRlbnQ7CiAgICAgICAgbXkgJEdyb3VwSW5kZXggPSAwOwogICAgICAgIGZvciBteSAkR3JvdXBOYW1lICggc29ydCBrZXlzICV7ICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30gfSApIHsKICAgICAgICAgICAgbXkgJEdyb3VwRmllbGRzU3RyaW5nID0gJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzfXskR3JvdXBOYW1lfTsKICAgICAgICAgICAgJEdyb3VwRmllbGRzU3RyaW5nID1+IHN7XHN9e314bXNnOwoKICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNwbGl0IC8sLywgJEdyb3VwRmllbGRzU3RyaW5nICkgewogICAgICAgICAgICAgICAgJEZpZWxkVG9Hcm91cEluZGV4eyRGaWVsZH0gPSAkR3JvdXBJbmRleDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFdpZGdldEZpZWxkQ29udGVudFsgJEdyb3VwSW5kZXgrKyBde05hbWV9ID0gJEdyb3VwTmFtZTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgICAgICBteSAkRHluYW1pY0ZpZWxkRmlsdGVyID0gewogICAgICAgICAgICAleyAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpLT57RHluYW1pY0ZpZWxkfSB8fCB7fSB9LAogICAgICAgICAgICAlewogICAgICAgICAgICAgICAgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkfSB8fCB7fQogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICAgICAgKTsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIWRlZmluZWQgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IGVxICcnOwoKICAgICAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgbXkgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9ICk7CgogICAgICAgICAgICBpZiAoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIE11bHRpTGluayAgICAgICAgICA9PiAxLAoKICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHVuZ3JvdXBlZCBmaWVsZHMgd2lsbCBlbmQgdXAgaW4gdGhlIGxhc3QgZ3JvdXAgd2l0aG91dCBuYW1lCiAgICAgICAgICAgICAgICBteSAkSW5kZXggPSAkRmllbGRUb0dyb3VwSW5kZXh7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IC8vICRHcm91cEluZGV4OwogICAgICAgICAgICAgICAgcHVzaCBAeyAkV2lkZ2V0RmllbGRDb250ZW50WyRJbmRleF17RmllbGRzfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgICAgPT4gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgICAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0iID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGR5bmFtaWMgZmllbGQgbG9va3VwIGhhc2ggZm9yIHdpZGdldCBncm91cHMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkTG9va3VwID0gbWFwIHsgKCAkXy0+e05hbWV9ID0+ICRfICkgfSAkRHluYW1pY0ZpZWxkLT5AKjsKCiAgICAgICAgIyBvdXRwdXQgZHluYW1pYyBmaWVsZHMgcmVnaXN0ZXJlZCBmb3IgYSBncm91cCBpbiB0aGUgb3ZlcnZpZXcgd2lkZ2V0CiAgICAgICAgbXkgQEZpZWxkc0luQUdyb3VwOwogICAgICAgIEdST1VQOgogICAgICAgIGZvciBteSAkR3JvdXBDb250ZW50IChAV2lkZ2V0RmllbGRDb250ZW50KSB7CiAgICAgICAgICAgIG5leHQgR1JPVVAgaWYgISRHcm91cENvbnRlbnQtPntGaWVsZHN9OwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkR3JvdXBDb250ZW50LT57TmFtZX0gLy8gVHJhbnNsYXRhYmxlKCdGaWVsZHMgd2l0aCBubyBncm91cCcpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciBteSAkRmllbGQgKCAkR3JvdXBDb250ZW50LT57RmllbGRzfS0+QCogKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJERGQ29uZmlnID0gJER5bmFtaWNGaWVsZExvb2t1cHsgJEZpZWxkLT57TmFtZX0gfTsKCiAgICAgICAgICAgICAgICAjIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBsZW5zIGZpZWxkIHBvaW50aW5nIHRvIGEgU2V0LCBnZXQgdGhlIGNvbmZpZyBvZiB0aGUgU2V0CiAgICAgICAgICAgICAgICBpZiAoICRERkNvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ0xlbnMnICkgewogICAgICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVERiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBJRCA9PiAkREZDb25maWctPntDb25maWd9e0F0dHJpYnV0ZURGfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZURGLT57RmllbGRUeXBlfSBlcSAnU2V0JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERGQ29uZmlnID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZURGLT4lKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRERkNvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJERGQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNldCBmaWVsZAogICAgICAgICAgICAgICAgaWYgKCAkREZDb25maWctPntGaWVsZFR5cGV9IGVxICdTZXQnICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXRGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG15IEBJbmNsdWRlZEZpZWxkcyA9ICRTZWxmLT5fR2V0SW5jbHVkZWRGaWVsZE9yZGVyZWQoCiAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgPT4gJERGQ29uZmlnLT57Q29uZmlnfXtJbmNsdWRlfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBTRVRJTkRFWDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFZhbHVlSW5kZXggKCAwIC4uICQjeyAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZUl0ZW0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9WyRWYWx1ZUluZGV4XTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgU0VUSU5ERVggaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRWYWx1ZUl0ZW0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgSU5ORVJGSUVMRDoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJbmNsdWRlRmllbGQgKEBJbmNsdWRlZEZpZWxkcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBJTk5FUkZJRUxEIGlmICFkZWZpbmVkICRWYWx1ZUl0ZW0tPnskSW5jbHVkZUZpZWxkfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgSU5ORVJGSUVMRCBpZiAkVmFsdWVJdGVtLT57JEluY2x1ZGVGaWVsZH0gZXEgJyc7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEluY2x1ZGVERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEluY2x1ZGVGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEluY2x1ZGVERkNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBWYWx1ZU1heENoYXJzIGhlcmUsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEluY2x1ZGVERkNvbmZpZy0+e0xhYmVsfSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICVJbmNsdWRlRmllbGQgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlREZDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkSW5jbHVkZUZpZWxke05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkSW5jbHVkZUZpZWxke0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEluY2x1ZGVERkNvbmZpZy0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5jbHVkZUZpZWxke05hbWV9ID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRJbmNsdWRlRmllbGR7TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkSW5jbHVkZUZpZWxke0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEluY2x1ZGVGaWVsZHtOYW1lfSIgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlSW5kZXggIT0gJCN7ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzdGFuZGFyZCBmaWVsZAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXInLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57TGlua30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRGaWVsZC0+e0xpbmt9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEluZGV4ICggMCAuLiAkI3sgJEZpZWxkLT57TGlua30gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVmFsdWVJdGVtTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkLT57TmFtZX0gPT4gJEZpZWxkLT57VGl0bGV9WyRJbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlVGlja2V0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxpYXMgZm9yIHRpY2tldCB0aXRsZSwgVGl0bGUgd2lsbCBiZSBvdmVyd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkRmllbGQtPntWYWx1ZX1bJEluZGV4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfVskSW5kZXhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEZpZWxkLT57TGlua31bJEluZGV4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ID0+ICRGaWVsZC0+e0xpbmtQcmV2aWV3fVskSW5kZXhdLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRmllbGQtPntOYW1lfSIgPT4gJEZpZWxkLT57VGl0bGV9WyRJbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSW5kZXggIT0gJCN7ICRGaWVsZC0+e0xpbmt9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTXVsdGl2YWx1ZVNlcGFyYXRvckxpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVmFsdWVJdGVtTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWVsZC0+e05hbWV9ID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxpYXMgZm9yIHRpY2tldCB0aXRsZSwgVGl0bGUgd2lsbCBiZSBvdmVyd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRUaXRsZSA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRGaWVsZC0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICBpZiAoICRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKCiAgICAgICAgICAgICMgYnVpbGQgZXZlbnQgdHlwZSBsaXN0IGZvciBmaWx0ZXIgZGlhbG9nCiAgICAgICAgICAgICRQYXJhbXtFdmVudFR5cGVGaWx0ZXJTdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30sCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnRXZlbnRUeXBlRmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRXZlbnRUeXBlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgbXkgQENvbW11bmljYXRpb25DaGFubmVscyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb21tdW5pY2F0aW9uQ2hhbm5lbCcpLT5DaGFubmVsTGlzdCgKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVDaGFubmVscyA9IG1hcCB7ICRfLT57Q2hhbm5lbElEfSA9PiAkXy0+e0Rpc3BsYXlOYW1lfSB9IEBDb21tdW5pY2F0aW9uQ2hhbm5lbHM7CgogICAgICAgICAgICAjIGJ1aWxkIGFydGljbGUgdHlwZSBsaXN0IGZvciBmaWx0ZXIgZGlhbG9nCiAgICAgICAgICAgICRQYXJhbXtDaGFubmVsc30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXInLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJWaXNpYmlsaXR5fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgMCA9PiBUcmFuc2xhdGFibGUoJ0ludmlzaWJsZSBvbmx5JyksCiAgICAgICAgICAgICAgICAgICAgMSA9PiBUcmFuc2xhdGFibGUoJ1Zpc2libGUgb25seScpLAogICAgICAgICAgICAgICAgICAgIDIgPT4gVHJhbnNsYXRhYmxlKCdWaXNpYmxlIGFuZCBpbnZpc2libGUnKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q3VzdG9tZXJWaXNpYmlsaXR5fSAvLyAyLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdDdXN0b21lclZpc2liaWxpdHlGaWx0ZXInLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBzZW5kZXIgdHlwZXMKICAgICAgICAgICAgbXkgJUFydGljbGVTZW5kZXJUeXBlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VuZGVyVHlwZUxpc3QoKTsKCiAgICAgICAgICAgICMgYnVpbGQgYXJ0aWNsZSBzZW5kZXIgdHlwZSBsaXN0IGZvciBmaWx0ZXIgZGlhbG9nCiAgICAgICAgICAgICRQYXJhbXtBcnRpY2xlU2VuZGVyVHlwZUZpbHRlclN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlQXJ0aWNsZVNlbmRlclR5cGVzLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0FydGljbGVTZW5kZXJUeXBlSUR9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FydGljbGVTZW5kZXJUeXBlRmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBUaWNrZXQgSUQKICAgICAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SUR9OwoKICAgICAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUZpbHRlckRpYWxvZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHRpY2tldCBuZWVkIHRvIGJlIG1hcmtlZCBhcyBzZWVuCiAgICBteSAkQXJ0aWNsZUFsbFNlZW4gPSAxOwogICAgQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3gpIHsKCiAgICAgICAgIyBpZ25vcmUgc3lzdGVtIHNlbmRlciB0eXBlCiAgICAgICAgbmV4dCBBUlRJQ0xFCiAgICAgICAgICAgIGlmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpOZXdBcnRpY2xlSWdub3JlU3lzdGVtU2VuZGVyJykKICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IH0gZXEgJ3N5c3RlbSc7CgogICAgICAgICMgbGFzdCBBUlRJQ0xFIGlmIGFydGljbGUgd2FzIG5vdCBzaG93bgogICAgICAgIGlmICggISRBcnRpY2xlRmxhZ3N7ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSB9LT57U2Vlbn0gKSB7CiAgICAgICAgICAgICRBcnRpY2xlQWxsU2VlbiA9IDA7CiAgICAgICAgICAgIGxhc3QgQVJUSUNMRTsKICAgICAgICB9CiAgICB9CgogICAgIyBtYXJrIHRpY2tldCBhcyBzZWVuIGlmIGFsbCBhcnRpY2xlIGFyZSBzaG93bgogICAgaWYgKCRBcnRpY2xlQWxsU2VlbikgewogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldEZsYWdTZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBLZXkgICAgICA9PiAnU2VlbicsCiAgICAgICAgICAgIFZhbHVlICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVUYWJsZUhlaWdodCcsCiAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e1VzZXJUaWNrZXRab29tQXJ0aWNsZVRhYmxlSGVpZ2h0fSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0RGVmYXVsdCcsCiAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodERlZmF1bHQnKSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0TWF4JywKICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0TWF4JyksCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdMYW5ndWFnZScsCiAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICBBdHRhY2htZW50Vmlld01lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKAogICAgICAgICAgICAgICAgJ0FydGljbGUgY291bGQgbm90IGJlIG9wZW5lZCEgUGVyaGFwcyBpdCBpcyBvbiBhbm90aGVyIGFydGljbGUgcGFnZT8nCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICk7CgogICAgIyBpbml0IGpzCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUaWNrZXRab29tSW5pdCcsCiAgICApOwoKICAgICMgcmV0dXJuIG91dHB1dAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwp9CgpzdWIgX0FydGljbGVUcmVlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVRpY2tldCAgICAgICA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CiAgICBteSAlQXJ0aWNsZUZsYWdzID0gJXsgJFBhcmFte0FydGljbGVGbGFnc30gfTsKICAgIG15IEBBcnRpY2xlQm94ICAgPSBAeyAkUGFyYW17QXJ0aWNsZUJveH0gfTsKICAgIG15ICRBcnRpY2xlSUQgICAgPSAkUGFyYW17QXJ0aWNsZUlEfTsKICAgIG15ICRUYWJsZUNsYXNzZXM7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGJ1aWxkIHRocmVhZCBzdHJpbmcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1RyZWUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFRhYmxlQ2xhc3NlcyA9PiAkVGFibGVDbGFzc2VzLAogICAgICAgICAgICBab29tVGltZWxpbmUgPT4gJFNlbGYtPntab29tVGltZWxpbmV9LAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggJFBhcmFte1BhZ2luYXRpb259ICYmICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVQYWdlcycsCiAgICAgICAgICAgIERhdGEgPT4gJFBhcmFte1BhZ2luYXRpb259LAogICAgICAgICk7CiAgICB9CgogICAgbXkgQEFydGljbGVWaWV3cyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDb2xsYXBzZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnU2hvdyBvbmUgYXJ0aWNsZScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnRXhwYW5kJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdTaG93IGFsbCBhcnRpY2xlcycpLAogICAgICAgIH0sCiAgICApOwoKICAgICMgQWRkIHRpbWVsaW5lIHZpZXcgb3B0aW9uIG9ubHkgaWYgZW5hYmxlZC4KICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJykgKSB7CiAgICAgICAgcHVzaCBAQXJ0aWNsZVZpZXdzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaW1lbGluZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnU2hvdyBUaWNrZXQgVGltZWxpbmUgVmlldycpLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJEFydGljbGVWaWV3U2VsZWN0ZWQgPSAnQ29sbGFwc2UnOwogICAgaWYgKCAkU2VsZi0+e1pvb21FeHBhbmR9ICkgewogICAgICAgICRBcnRpY2xlVmlld1NlbGVjdGVkID0gJ0V4cGFuZCc7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkQXJ0aWNsZVZpZXdTZWxlY3RlZCA9ICdUaW1lbGluZSc7CiAgICB9CgogICAgbXkgJEFydGljbGVWaWV3U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFxAQXJ0aWNsZVZpZXdzLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRBcnRpY2xlVmlld1NlbGVjdGVkLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgU29ydCAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICBOYW1lICAgICAgICA9PiAnQXJ0aWNsZVZpZXcnLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIFNlbmQgZGF0YSB0byBKUy4KICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZVZpZXdTdHJnJywKICAgICAgICBWYWx1ZSA9PiAkQXJ0aWNsZVZpZXdTdHJnLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnWm9vbUV4cGFuZCcsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntab29tRXhwYW5kfSwKICAgICk7CgogICAgIyBhcnRpY2xlIGZpbHRlciBpcyBhY3RpdmF0ZWQgaW4gc3lzY29uZmlnCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlckFjdGl2ZX0gKSB7CgogICAgICAgICMgZGVmaW5lIGhpZ2hsaWdodCBzdHlsZSBmb3IgbGlua3MgaWYgZmlsdGVyIGlzIGFjdGl2ZQogICAgICAgIG15ICRIaWdobGlnaHRTdHlsZSA9ICdtZW51JzsKICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gKSB7CiAgICAgICAgICAgICRIaWdobGlnaHRTdHlsZSA9ICdQcmlvcml0eUlELTUnOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBhcnRpY2xlIGZpbHRlciBsaW5rcwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nTGluaycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgSGlnaGxpZ2h0U3R5bGUgPT4gJEhpZ2hsaWdodFN0eWxlLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYXJ0aWNsZSBmaWx0ZXIgcmVzZXQgbGluayBvbmx5IGlmIGZpbHRlciBpcyBzZXQKICAgICAgICBpZiAoCiAgICAgICAgICAgICggISRTZWxmLT57Wm9vbVRpbWVsaW5lfSAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntBcnRpY2xlRmlsdGVyfSApICkKICAgICAgICAgICAgfHwgKCAkU2VsZi0+e1pvb21UaW1lbGluZX0gJiYgJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlRmlsdGVyUmVzZXRMaW5rJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgQ3JlYXRlIGEgbGlzdCBvZiBhcnRpY2xlIHNlbmRlciB0eXBlcyBmb3IgbG9va3VwCiAgICBteSAlQXJ0aWNsZVNlbmRlclR5cGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTGlzdCgpOwoKICAgICMgc2hvdyBhcnRpY2xlIHRyZWUKICAgIGlmICggISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBab29tRXhwYW5kU29ydE9yZGVyID0+ICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IGVxICdyZXZlcnNlJyA/ICdEZXNjZW5kaW5nJyA6ICdBc2NlbmRpbmcnLAogICAgICAgICAgICAgICAgVGFibGVDbGFzc2VzICAgICAgICA9PiAkVGFibGVDbGFzc2VzLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2hpbmcgYWNjb3VudGVkIHRpbWVzIG9mIGFsbCBhcnRpY2xlcyB0byBjaGVjayBpZiB3ZSBkaXNwbGF5IHRoZSBjb2x1bW4KICAgICAgICBteSAlQXJ0aWNsZUFjY291bnRlZFRpbWVzOwogICAgICAgIG15ICRTaG93VGltZVVuaXRzID0gMDsKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfXtBcnRpY2xlTGlzdFNob3dUaW1lVW5pdHN9ICkgewogICAgICAgICAgICBmb3IgbXkgJEFydGljbGVUbXAgKEBBcnRpY2xlQm94KSB7CgogICAgICAgICAgICAgICAgIyBHZXQgYWNjb3VudGVkIHRpbWUgZm9yIGFydGljbGUgdXNpbmcgQXJ0aWNsZUFjY291bnRlZFRpbWVHZXQKICAgICAgICAgICAgICAgICRBcnRpY2xlQWNjb3VudGVkVGltZXN7ICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSB9ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVBY2NvdW50ZWRUaW1lR2V0KAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRTaG93VGltZVVuaXRzID0gKCBhbnkgeyAkXyAhPSAwIH0gdmFsdWVzICVBcnRpY2xlQWNjb3VudGVkVGltZXMgKSA/IDEgOiAwOwogICAgICAgICAgICBpZiAoJFNob3dUaW1lVW5pdHMpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVVbml0SGVhZGVyJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlVG1wLT4lKjsKCiAgICAgICAgICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZyBhbmQgdGhlcmUgYXJlIGFydGljbGVzCiAgICAgICAgICAgICMgdGhhdCBwYXNzZWQgdGhlIGZpbHRlcgogICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlckFjdGl2ZX0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gJiYgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e1Nob3duQXJ0aWNsZUlEc30gKSB7CgogICAgICAgICAgICAgICAgICAgICMgZG8gbm90IHNob3cgYXJ0aWNsZSBpbiB0cmVlIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBmaWx0ZXIKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57U2hvd25BcnRpY2xlSURzfS0+eyAkQXJ0aWNsZXtBcnRpY2xlSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2hvdyBhcnRpY2xlIGZsYWdzCiAgICAgICAgICAgIG15ICRDbGFzcyAgICAgID0gJyc7CiAgICAgICAgICAgIG15ICRDbGFzc1JvdyAgID0gJyc7CiAgICAgICAgICAgIG15ICROZXdBcnRpY2xlID0gMDsKCiAgICAgICAgICAgICMgaWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZXMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRBcnRpY2xlRmxhZ3N7ICRBcnRpY2xle0FydGljbGVJRH0gfS0+e1NlZW59CiAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgISRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpOZXdBcnRpY2xlSWdub3JlU3lzdGVtU2VuZGVyJykKICAgICAgICAgICAgICAgICAgICB8fCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGV7U2VuZGVyVHlwZUlEfSB9IG5lICdzeXN0ZW0nCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICROZXdBcnRpY2xlID0gMTsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGlja2V0IGZsYWdzCgogICAgICAgICAgICAgICAgIyBhbHdheXMgc2hvdyBhcmNoaXZlZCB0aWNrZXRzIGFzIHNlZW4KICAgICAgICAgICAgICAgIGlmICggJFRpY2tldHtBcmNoaXZlRmxhZ30gbmUgJ3knICkgewogICAgICAgICAgICAgICAgICAgICRDbGFzcyAgICAuPSAnIFVucmVhZEFydGljbGVzJzsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3NSb3cgLj0gJyBVbnJlYWRBcnRpY2xlcyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBqdXN0IHNob3cgdGlja2V0IGZsYWdzIGlmIGFnZW50IGJlbG9uZ3MgdG8gdGhlIHRpY2tldAogICAgICAgICAgICAgICAgbXkgJFNob3dNZXRhOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRTZWxmLT57VXNlcklEfSA9PSAkVGlja2V0e093bmVySUR9CiAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntVc2VySUR9ID09ICRUaWNrZXR7UmVzcG9uc2libGVJRH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFNob3dNZXRhID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggISRTaG93TWV0YSAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6V2F0Y2hlcicpICkgewogICAgICAgICAgICAgICAgICAgIG15ICVXYXRjaCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFdhdGNoR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRXYXRjaHsgJFNlbGYtPntVc2VySUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTaG93TWV0YSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2hvdyB0aWNrZXQgZmxhZ3MKICAgICAgICAgICAgICAgIGlmICgkU2hvd01ldGEpIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgLj0gJyBSZW1hcmthYmxlJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRDbGFzcyAuPSAnIE9yZGluYXJ5JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiB0aGlzIGlzIHRoZSBzaG93biBhcnRpY2xlIC09PiBzZXQgY2xhc3MgdG8gYWN0aXZlCiAgICAgICAgICAgIGlmICggJEFydGljbGVJRCBlcSAkQXJ0aWNsZXtBcnRpY2xlSUR9ICYmICEkU2VsZi0+e1pvb21FeHBhbmR9ICkgewogICAgICAgICAgICAgICAgJENsYXNzUm93IC49ICcgQWN0aXZlJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFRtcFN1YmplY3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdWJqZWN0Q2xlYW4oCgogICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkQXJ0aWNsZXtTdWJqZWN0fSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcygKICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFNob3dUaW1lVW5pdHMpIHsKCiAgICAgICAgICAgICAgICBteSAlVGltZVVuaXRGaWVsZCA9ICgKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQXJ0aWNsZUFjY291bnRlZFRpbWVzeyAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH0gfSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAnVGltZSBVbml0JwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRBcnRpY2xle1RpbWVVbml0fSA9ICRBcnRpY2xlQWNjb3VudGVkVGltZXN7ICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSB9OwoKICAgICAgICAgICAgICAgICRBcnRpY2xlRmllbGRze1RpbWVVbml0fSA9IFwlVGltZVVuaXRGaWVsZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBHZXQgdHJhbnNtaXNzaW9uIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgZW1haWwgYXJ0aWNsZXMuCiAgICAgICAgICAgIG15ICRUcmFuc21pc3Npb25TdGF0dXM7CiAgICAgICAgICAgIGlmICggJEFydGljbGV7Q2hhbm5lbE5hbWV9ICYmICRBcnRpY2xle0NoYW5uZWxOYW1lfSBlcSAnRW1haWwnICkgewogICAgICAgICAgICAgICAgJFRyYW5zbWlzc2lvblN0YXR1cyA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVUcmFuc21pc3Npb25TdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNob3cgYWxzbyBleHBhbmQvY29sbGFwc2UgaWNvbgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICAgICAgICAgIEFydGljbGVGaWVsZHMgICAgICA9PiBcJUFydGljbGVGaWVsZHMsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICBDbGFzc1JvdyAgICAgICAgICAgPT4gJENsYXNzUm93LAogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICA9PiAkVG1wU3ViamVjdCwKICAgICAgICAgICAgICAgICAgICBUcmFuc21pc3Npb25TdGF0dXMgPT4gJFRyYW5zbWlzc2lvblN0YXR1cywKICAgICAgICAgICAgICAgICAgICBab29tRXhwYW5kICAgICAgICAgPT4gJFNlbGYtPntab29tRXhwYW5kfSwKICAgICAgICAgICAgICAgICAgICBab29tRXhwYW5kU29ydCAgICAgPT4gJFNlbGYtPntab29tRXhwYW5kU29ydH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd1RpbWVVbml0cyAgICAgID0+ICRTaG93VGltZVVuaXRzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGFydGljbGUgZmxhZ3MKICAgICAgICAgICAgIyBBbHdheXMgdXNlIHVzZXIgaWQgMSBiZWNhdXNlIG90aGVyIHVzZXJzIGFsc28gaGF2ZSB0byBzZWUgdGhlIGltcG9ydGFudCBmbGFnCiAgICAgICAgICAgIG15ICVBcnRpY2xlSW1wb3J0YW50RmxhZ3MgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdHZXQoCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGltcG9ydGFudCBmbGFnCiAgICAgICAgICAgIGlmICggJEFydGljbGVJbXBvcnRhbnRGbGFnc3tJbXBvcnRhbnR9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW1JbXBvcnRhbnRBcnRpY2xlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKIyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KI1RPRE86IHdoZW4gbWVyZ2luZyB0byBDb3JlLCBpcyB0aGVyZSBhIHdheSB0byBtYWtlIGFkZGluZyBuZXcgZmxhZ3MgZWFzaWVyPwogICAgICAgICAgICAjIHNob3cgcGlubmVkIGZsYWcKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUltcG9ydGFudEZsYWdze1Bpbm5lZH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbVBpbm5lZEFydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgogICAgICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgICAgICBpZiAoICROZXdBcnRpY2xlICYmICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTmV3QXJ0aWNsZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KIyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KIyAgICAgICAgICAgICMgQnVnZml4IGZvciBJRTc6IGEgdGFibGUgY2VsbCBzaG91bGQgbm90IGJlIGVtcHR5CiMgICAgICAgICAgICAjIChiZWNhdXNlIG90aGVyd2lzZSB0aGUgY2VsbCBib3JkZXJzIGFyZSBub3Qgc2hvd24pOgojICAgICAgICAgICAgIyB3ZSBhZGQgYW4gZW1wdHkgZWxlbWVudCBoZXJlCiMgICAgICAgICAgICBlbHNlIHsKIyAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKIyAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW1Ob05ld0FydGljbGUnLAojICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAojICAgICAgICAgICAgICAgICk7CiMgICAgICAgICAgICB9CiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgogICAgICAgICAgICAjIERldGVybWluZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbi4KICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtDaGFubmVsTmFtZX0gZXEgJ0ludGVybmFsJyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdUcmVlSXRlbURpcmVjdGlvbkludGVybmFsJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGV7U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25JbmNvbWluZycgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICAgICAgICAgIG15ICVBdG1JbmRleDsKCiAgICAgICAgICAgIGlmICggISRBcnRpY2xle0FydGljbGVEZWxldGVkfSB8fCAkU2VsZi0+e0FydGljbGVTdG9yYWdlfSA9fiBtL0FydGljbGVTdG9yYWdlRlMvICkgewogICAgICAgICAgICAgICAgJUF0bUluZGV4ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCVBcnRpY2xlKS0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9LAogICAgICAgICAgICAgICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICVBdG1JbmRleCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtEZWxldGVkVmVyc2lvbklEfSwKICAgICAgICAgICAgICAgICAgICBTb3VyY2VBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9LAogICAgICAgICAgICAgICAgICAgIFZlcnNpb25WaWV3ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQXJ0aWNsZXtBdG1zfSA9IFwlQXRtSW5kZXg7CgogICAgICAgICAgICAjIHNob3cgYXR0YWNobWVudCBpbmZvCiAgICAgICAgICAgICMgQnVnZml4IGZvciBJRTc6IGEgdGFibGUgY2VsbCBzaG91bGQgbm90IGJlIGVtcHR5CiAgICAgICAgICAgICMgKGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjZWxsIGJvcmRlcnMgYXJlIG5vdCBzaG93bik6CiAgICAgICAgICAgICMgd2UgYWRkIGFuIGVtcHR5IGVsZW1lbnQgaGVyZQogICAgICAgICAgICBpZiAoICEkQXJ0aWNsZXtBdG1zfSB8fCAhJXsgJEFydGljbGV7QXRtc30gfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTm9BdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnRzID0gJFNlbGYtPl9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzKAogICAgICAgICAgICAgICAgICAgIEFydGljbGUgPT4gXCVBcnRpY2xlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbUF0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+ICRBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGltZWxpbmUgdmlldwogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IHRpY2tldCBoaXN0b3J5CiAgICAgICAgbXkgQEhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXJ0aWNsZXMgZm9yIGxhdGVyIHVzZQogICAgICAgIG15IEBUaW1lbGluZUFydGljbGVCb3ggPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICk7CgogICAgICAgIGZvciBteSAkQXJ0aWNsZUl0ZW0gKEBUaW1lbGluZUFydGljbGVCb3gpIHsKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgJXskQXJ0aWNsZUl0ZW19LAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xlSXRlbS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFwcGVuZCBhcnRpY2xlIG1ldGEgZGF0YS4KICAgICAgICAgICAgJEFydGljbGVJdGVtID0gewogICAgICAgICAgICAgICAgJXskQXJ0aWNsZUl0ZW19LAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSAkQXJ0aWNsZXNCeUFydGljbGVJRCA9IHt9OwogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoIHNvcnQgQFRpbWVsaW5lQXJ0aWNsZUJveCApIHsKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgJXskQXJ0aWNsZX0sCiAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgR2V0IGF0dGFjaG1lbnQgaW5kZXggKGV4Y2x1ZGluZyBib2R5IGF0dGFjaG1lbnRzKS4KICAgICAgICAgICAgbXkgJUF0bUluZGV4ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkQXJ0aWNsZS0+e0F0bXN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwlQXRtSW5kZXg7CiAgICAgICAgICAgICRBcnRpY2xlLT57QmFja2VuZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpOwogICAgICAgICAgICAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkQXJ0aWNsZS0+e0FydGljbGVJRH0gfSA9ICRBcnRpY2xlOwoKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGVyZSBpcyBIVE1MIGJvZHkgYXR0YWNobWVudC4KICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRJbmRleEhUTUxCb2R5ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIE9ubHlIVE1MQm9keSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAoICRBcnRpY2xlLT57SFRNTEJvZHlBdHRhY2htZW50SUR9ICkgPSBzb3J0IGtleXMgJUF0dGFjaG1lbnRJbmRleEhUTUxCb2R5OwogICAgICAgIH0KCiAgICAgICAgIyBkbyBub3QgZGlzcGxheSB0aGVzZSB0eXBlcwogICAgICAgIG15IEBUeXBlc0RvZGdlID0gcXcoCiAgICAgICAgICAgIE1pc2MKICAgICAgICAgICAgQXJjaGl2ZUZsYWdVcGRhdGUKICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24KICAgICAgICAgICAgUmVtb3ZlCiAgICAgICAgICAgIFN1YnNjcmliZQogICAgICAgICAgICBVbnN1YnNjcmliZQogICAgICAgICAgICBTeXN0ZW1SZXF1ZXN0CiAgICAgICAgICAgIFNlbmRBZ2VudE5vdGlmaWNhdGlvbgogICAgICAgICAgICBTZW5kQ3VzdG9tZXJOb3RpZmljYXRpb24KICAgICAgICAgICAgU2VuZEF1dG9SZWplY3QKICAgICAgICApOwoKICAgICAgICAjIHNvcnQgb3V0IG5vbi1maWx0ZXJlZCBldmVudCB0eXBlcyAoaWYgYXBwbGljYWJsZSkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfQogICAgICAgICAgICAmJiBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGZvciBteSAkRXZlbnRUeXBlICggc29ydCBrZXlzICV7ICRTZWxmLT57SGlzdG9yeVR5cGVNYXBwaW5nfSB9ICkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRFdmVudFR5cGUgbmUgJ05ld1RpY2tldCcgJiYgbm9uZSB7ICRfIGVxICRFdmVudFR5cGUgfQogICAgICAgICAgICAgICAgICAgIEB7ICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFR5cGVzRG9kZ2UsICRFdmVudFR5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdHlwZXMgd2hpY2ggY2FuIGJlIGRlc2NyaWJlZCBhcyAnYWN0aW9uIG9uIGEgdGlja2V0JwogICAgICAgIG15IEBUeXBlc1RpY2tldEFjdGlvbiA9IHF3KAogICAgICAgICAgICBTZXJ2aWNlVXBkYXRlCiAgICAgICAgICAgIFNMQVVwZGF0ZQogICAgICAgICAgICBTdGF0ZVVwZGF0ZQogICAgICAgICAgICBTZXRQZW5kaW5nVGltZQogICAgICAgICAgICBVbmxvY2sKICAgICAgICAgICAgTG9jawogICAgICAgICAgICBSZXNwb25zaWJsZVVwZGF0ZQogICAgICAgICAgICBPd25lclVwZGF0ZQogICAgICAgICAgICBDdXN0b21lclVwZGF0ZQogICAgICAgICAgICBOZXdUaWNrZXQKICAgICAgICAgICAgVGlja2V0TGlua0FkZAogICAgICAgICAgICBUaWNrZXRMaW5rRGVsZXRlCiAgICAgICAgICAgIFRpY2tldER5bmFtaWNGaWVsZFVwZGF0ZQogICAgICAgICAgICBNb3ZlCiAgICAgICAgICAgIE1lcmdlZAogICAgICAgICAgICBQcmlvcml0eVVwZGF0ZQogICAgICAgICAgICBUaXRsZVVwZGF0ZQogICAgICAgICAgICBUeXBlVXBkYXRlCiAgICAgICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVOb3RpZnlCZWZvcmUKICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZVN0YXJ0CiAgICAgICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVTdG9wCiAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVOb3RpZnlCZWZvcmUKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0YXJ0CiAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVTdG9wCiAgICAgICAgICAgIEVzY2FsYXRpb25VcGRhdGVUaW1lTm90aWZ5QmVmb3JlCiAgICAgICAgICAgIEVzY2FsYXRpb25VcGRhdGVUaW1lU3RhcnQKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdG9wCiAgICAgICAgICAgIFRpbWVBY2NvdW50aW5nCiAgICAgICAgKTsKCiAgICAgICAgIyB0eXBlcyB3aGljaCBhcmUgdXN1YWxseSBiZWluZyBjb25uZWN0ZWQgdG8gc29tZSBraW5kIG9mCiAgICAgICAgIyBhdXRvbWF0aWMgcHJvY2VzcyAoZS5nLiB0cmlnZ2VyZWQgYnkgYW5vdGhlciBhY3Rpb24pCiAgICAgICAgbXkgQFR5cGVzVGlja2V0QXV0b0FjdGlvbiA9IHF3KAogICAgICAgICAgICBTZW5kQXV0b0ZvbGxvd1VwCiAgICAgICAgICAgIFNlbmRBdXRvUmVqZWN0CiAgICAgICAgICAgIFNlbmRBdXRvUmVwbHkKICAgICAgICApOwoKICAgICAgICAjIHR5cGVzIHdoaWNoIGNhbiBiZSBjb25zaWRlcmVkIGFzIGludGVybmFsCiAgICAgICAgbXkgQFR5cGVzSW50ZXJuYWwgPSBxdygKICAgICAgICAgICAgQWRkTm90ZQogICAgICAgICAgICBDaGF0SW50ZXJuYWwKICAgICAgICAgICAgRW1haWxBZ2VudEludGVybmFsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRnb2luZyB0eXBlcwogICAgICAgIG15IEBUeXBlc091dGdvaW5nID0gcXcoCiAgICAgICAgICAgIEFkZFNNUwogICAgICAgICAgICBGb3J3YXJkCiAgICAgICAgICAgIEVtYWlsQWdlbnQKICAgICAgICAgICAgUGhvbmVDYWxsQWdlbnQKICAgICAgICAgICAgQm91bmNlCiAgICAgICAgICAgIFNlbmRBbnN3ZXIKICAgICAgICApOwoKICAgICAgICAjIGluY29taW5nIHR5cGVzCiAgICAgICAgbXkgQFR5cGVzSW5jb21pbmcgPSBxdygKICAgICAgICAgICAgRW1haWxDdXN0b21lcgogICAgICAgICAgICBBZGROb3RlQ3VzdG9tZXIKICAgICAgICAgICAgQWRkU01TQ3VzdG9tZXIKICAgICAgICAgICAgUGhvbmVDYWxsQ3VzdG9tZXIKICAgICAgICAgICAgRm9sbG93VXAKICAgICAgICAgICAgV2ViUmVxdWVzdEN1c3RvbWVyCiAgICAgICAgICAgIENoYXRFeHRlcm5hbAogICAgICAgICk7CgogICAgICAgIG15IEBUeXBlc1JpZ2h0ID0gKAogICAgICAgICAgICBAVHlwZXNJbmNvbWluZywKICAgICAgICAgICAgQFR5cGVzVGlja2V0QWN0aW9uLAogICAgICAgICk7CgogICAgICAgIG15IEBUeXBlc1dpdGhBcnRpY2xlcyA9ICgKICAgICAgICAgICAgQFR5cGVzT3V0Z29pbmcsCiAgICAgICAgICAgIEBUeXBlc0ludGVybmFsLAogICAgICAgICAgICBAVHlwZXNJbmNvbWluZywKICAgICAgICAgICAgJ1Bob25lQ2FsbEN1c3RvbWVyJywKICAgICAgICApOwoKICAgICAgICBteSAlSGlzdG9yeUl0ZW1zOwogICAgICAgIG15ICRJdGVtQ291bnRlciA9IDA7CiAgICAgICAgbXkgJExhc3RDcmVhdGVUaW1lOwogICAgICAgIG15ICRMYXN0Q3JlYXRlU3lzdGVtVGltZTsKCiAgICAgICAgIyBHZXQgbWFwcGluZyBvZiBoaXN0b3J5IHR5cGVzIHRvIHJlYWRhYmxlIHN0cmluZ3MKICAgICAgICBteSAlSGlzdG9yeVR5cGVzOwogICAgICAgIG15ICVIaXN0b3J5VHlwZUNvbmZpZyA9ICV7ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SGlzdG9yeVR5cGVzJykgLy8ge30gfTsKICAgICAgICBmb3IgbXkgJEVudHJ5ICggc29ydCBrZXlzICVIaXN0b3J5VHlwZUNvbmZpZyApIHsKICAgICAgICAgICAgJUhpc3RvcnlUeXBlcyA9ICgKICAgICAgICAgICAgICAgICVIaXN0b3J5VHlwZXMsCiAgICAgICAgICAgICAgICAleyAkSGlzdG9yeVR5cGVDb25maWd7JEVudHJ5fSB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgSElTVE9SWUlURU06CiAgICAgICAgZm9yIG15ICRJdGVtICggcmV2ZXJzZSBASGlzdG9yeUxpbmVzICkgewoKICAgICAgICAgICAgIyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgY2VydGFpbiB0eXBlcywgZS5nLiBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdBZGROb3RlJwogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZUluY29taW5nJzsKCiAgICAgICAgICAgICAgICAjIFdlIGZha2UgYSBjdXN0b20gaGlzdG9yeSB0eXBlIGJlY2F1c2UgZXh0ZXJuYWwgbm90ZXMgZnJvbSBjdXN0b21lcnMgc3RpbGwKICAgICAgICAgICAgICAgICMgaGF2ZSB0aGUgaGlzdG9yeSB0eXBlICdBZGROb3RlJyB3aGljaCBkb2VzIG5vdCBhbGxvdyBmb3IgZGlzdGluZ3Vpc2hpbmcuCiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdBZGROb3RlQ3VzdG9tZXInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBjZXJ0YWluIHR5cGVzLCBlLmcuIGV4dGVybmFsIFNNUyBmcm9tIGN1c3RvbWVycwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdBZGRTTVMnCiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2N1c3RvbWVyJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlSW5jb21pbmcnOwoKICAgICAgICAgICAgICAgICMgV2UgZmFrZSBhIGN1c3RvbSBoaXN0b3J5IHR5cGUgYmVjYXVzZSBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycyBzdGlsbAogICAgICAgICAgICAgICAgIyBoYXZlIHRoZSBoaXN0b3J5IHR5cGUgJ0FkZFNNUycgd2hpY2ggZG9lcyBub3QgYWxsb3cgZm9yIGRpc3Rpbmd1aXNoaW5nLgogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQWRkU01TQ3VzdG9tZXInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBpbnRlcm5hbCBlbWFpbHMKICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnRW1haWxBZ2VudCcKICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdFbWFpbCcKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdhZ2VudCcKICAgICAgICAgICAgICAgICYmICEkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSAgICAgICA9ICdUeXBlTm90ZUludGVybmFsJzsKICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0VtYWlsQWdlbnRJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGNlcnRhaW4gdHlwZXMsIGUuZy4gZXh0ZXJuYWwgbm90ZXMgZnJvbSBjdXN0b21lcnMKICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfSBlcSAnQ2hhdCcKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0NoYXRFeHRlcm5hbCc7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSAgICAgICA9ICdUeXBlSW5jb21pbmcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0NoYXQnCiAgICAgICAgICAgICAgICAmJiAhJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQ2hhdEludGVybmFsJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ICAgICAgID0gJ1R5cGVJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0ZvcndhcmQnCiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdFbWFpbCcKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdhZ2VudCcKICAgICAgICAgICAgICAgICYmICEkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU5vdGVJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBhbnkgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1RpY2tldEFjdGlvbiApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVUaWNrZXRBY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggYW55IHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNUaWNrZXRBdXRvQWN0aW9uICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZVRpY2tldEF1dG9BY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggYW55IHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNJbnRlcm5hbCApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVOb3RlSW50ZXJuYWwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggYW55IHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNJbmNvbWluZyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBhbnkgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc091dGdvaW5nICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU91dGdvaW5nJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCBhbnkgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc0RvZGdlICkgewogICAgICAgICAgICAgICAgbmV4dCBISVNUT1JZSVRFTTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEl0ZW0tPntDb3VudGVyfSA9ICRJdGVtQ291bnRlcisrOwoKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnTmV3VGlja2V0JyApIHsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZSAnTmV3VGlja2V0JyBpdGVtIGhhcyBhbiBhcnRpY2xlLCBkaXNwbGF5IHRoaXMgImNyZWF0aW9uIGFydGljbGUiIGV2ZW50IHNlcGFyYXRlbHkKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntBcnRpY2xlSUR9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0l0ZW1zfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JEl0ZW19LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyICAgICAgICAgICAgID0+ICRJdGVtLT57Q291bnRlcn0rKywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGVSZWFkYWJsZSA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBDcmVhdGVkJyksCiAgICAgICAgICAgICAgICAgICAgICAgIE9yaWVudGF0aW9uICAgICAgICAgPT4gJ1JpZ2h0JywKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnTmV3VGlja2V0JzsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntBcnRpY2xlSUR9OwogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e05hbWV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbW92ZSBhcnRpY2xlIGluZm9ybWF0aW9uIGZyb20gdHlwZXMgd2hpY2ggc2hvdWxkIG5vdCBkaXNwbGF5IGFydGljbGVzCiAgICAgICAgICAgIGlmICggbm9uZSB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzV2l0aEFydGljbGVzICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSAoaWYgcHJlc2VudCkKICAgICAgICAgICAgaWYgKCAkSXRlbS0+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+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1dpdGhBcnRpY2xlczsKICAgICAgICAgICAgJElzQiBjbXAgJElzQTsKICAgICAgICB9OwoKICAgICAgICAjIHNvcnQgaGlzdG9yeSBpdGVtcyBiYXNlZCBvbiBpdGVtcyB3aXRoIGFydGljbGVzCiAgICAgICAgIyB0aGVzZSBpdGVtcyBzaG91bGQgYWx3YXlzIGJlIG9uIHRvcCBvZiBhIGxpc3Qgb2YgY29ubmVjdGVkIGl0ZW1zCiAgICAgICAgJEl0ZW1Db3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCByZXZlcnNlIHNvcnQga2V5cyAlSGlzdG9yeUl0ZW1zICkgewoKICAgICAgICAgICAgZm9yIG15ICRTdWJJdGVtICggc29ydCAkU29ydEJ5QXJ0aWNsZSBAeyAkSGlzdG9yeUl0ZW1zeyRJdGVtfSB9ICkgewogICAgICAgICAgICAgICAgJFN1Ykl0ZW0tPntDb3VudGVyfSA9ICRJdGVtQ291bnRlcisrOwoKICAgICAgICAgICAgICAgIGlmICggYW55IHsgJF8gZXEgJFN1Ykl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNSaWdodCApIHsKICAgICAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e09yaWVudGF0aW9ufSA9ICdSaWdodCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e09yaWVudGF0aW9ufSA9ICdMZWZ0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0l0ZW1zfSB9LCAkU3ViSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgVGlja2V0SUQgZm9yIHVzYWdlIGluIEpTCiAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SUR9OwoKICAgICAgICAjIHNldCBrZXkgJ1RpbWVMb25nJyBmb3IgSlMKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17SXRlbXN9IH0gKSB7CiAgICAgICAgICAgICRJdGVtLT57VGltZUxvbmd9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZyggJEl0ZW0tPntDcmVhdGVUaW1lfSwgJ0RhdGVGb3JtYXRMb25nJyApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRBcnRpY2xlSUQgKCBzb3J0IGtleXMgJXskQXJ0aWNsZXNCeUFydGljbGVJRH0gKSB7CgogICAgICAgICAgICAjIENoZWNrIGlmIGFydGljbGUgaGFzIGF0dGFjaG1lbnQocykuCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0tPntBdG1zfSApICkgewoKICAgICAgICAgICAgICAgIG15ICgkSW5kZXgpID0gZ3JlcCB7ICRQYXJhbXtJdGVtc30tPlskX10tPntBcnRpY2xlSUR9ICYmICRQYXJhbXtJdGVtc30tPlskX10tPntBcnRpY2xlSUR9ID09ICRBcnRpY2xlSUQgfQogICAgICAgICAgICAgICAgICAgIDAgLi4gQHsgJFBhcmFte0l0ZW1zfSB9OwogICAgICAgICAgICAgICAgJFBhcmFte0l0ZW1zfS0+WyRJbmRleF0tPntIYXNBdHRhY2htZW50fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgR2V0IE5vVGltZWxpbmVWaWV3QXV0b0FydGljbGUgY29uZmlnIHZhbHVlIGZvciB1c2FnZSBpbiBKUy4KICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlJywKICAgICAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlJykgfHwgJzAnLAogICAgICAgICk7CgogICAgICAgICMgSW5jbHVkZSBjdXJyZW50IGFydGljbGUgSUQgb25seSBpZiBpdCdzIHNlbGVjdGVkLgogICAgICAgICRQYXJhbXtDdXJyZW50QXJ0aWNsZUlEfSAvLz0gJFNlbGYtPntBcnRpY2xlSUR9OwoKICAgICAgICAjIE1vZGlmeSBib2R5IHRleHQgdG8gYXZvaWQgJzwvc2NyaXB0PicgdGFnIGlzc3VlIChzZWUgYnVnIzE0MDIzKS4KICAgICAgICBmb3IgbXkgJEFydGljbGVCb3hJdGVtIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICAkQXJ0aWNsZUJveEl0ZW0tPntCb2R5fSA9fiBzezwvc2NyaXB0Pn17PCMjIy9zY3JpcHQ+fXhtc2c7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVsaW5lVmlldycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIEVuYWJsZWQgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJyksCiAgICAgICAgICAgICAgICBEYXRhICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVsaW5lVmlldycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGp1bXAgdG8gc2VsZWN0ZWQgYXJ0aWNsZQogICAgICAgIGlmICggJFNlbGYtPntBcnRpY2xlSUR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dTZWxlY3RlZEFydGljbGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBhY3Rpb24gbWVudSBmb3IgYWxsIGFydGljbGVzCiAgICAgICAgZm9yIG15ICRBcnRpY2xlSUQgKCBzb3J0IGtleXMgJXskQXJ0aWNsZXNCeUFydGljbGVJRH0gKSB7CgogICAgICAgICAgICAjIHNob3cgYXR0YWNobWVudHMgYm94CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0tPntBdG1zfSApICkgewoKICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlQXR0YWNobWVudHMgPSAkU2VsZi0+X0NvbGxlY3RBcnRpY2xlQXR0YWNobWVudHMoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZSA9PiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyRBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudHMgPT4gJEFydGljbGVBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7ICVQYXJhbSwgJVRpY2tldCB9LAogICAgKTsKfQoKc3ViIF9UaWNrZXRJdGVtU2VlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBBcnRpY2xlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKCiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewogICAgICAgICRTZWxmLT5fQXJ0aWNsZUl0ZW1TZWVuKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX0FydGljbGVJdGVtU2VlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRJc0FydGljbGVEZWxldGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZUZlYXR1cmVzJyktPklzQXJ0aWNsZURlbGV0ZWQoCiAgICAgICAgQXJ0aWNsZUlEID0+ICRQYXJhbXtBcnRpY2xlSUR9CiAgICApOwoKICAgICMgbWFyayBzaG93biBhcnRpY2xlIGFzIHNlZW4KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICBLZXkgICAgICAgICAgICA9PiAnU2VlbicsCiAgICAgICAgVmFsdWUgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQXJ0aWNsZURlbGV0ZWQgPT4gJElzQXJ0aWNsZURlbGV0ZWQKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfQXJ0aWNsZUl0ZW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CiAgICBteSAlQXJ0aWNsZSA9ICV7ICRQYXJhbXtBcnRpY2xlfSB9OwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzaG93IGFydGljbGUgYWN0aW9ucwogICAgbXkgQE1lbnVJdGVtcyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVBY3Rpb25zKAogICAgICAgICVQYXJhbSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICk7CgogICAgcHVzaCBAeyAkU2VsZi0+e01lbnVJdGVtc30gfSwgXEBNZW51SXRlbXM7CgogICAgIyBUT0RPOiBSZXZpZXcKICAgIHJldHVybiAkU2VsZi0+X0FydGljbGVSZW5kZXIoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gPyAwIDogMSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBNZW51SXRlbXMgICAgICAgICAgICAgID0+IFxATWVudUl0ZW1zLAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgICAgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKfQoKc3ViIF9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVBcnRpY2xlID0gJXsgJFBhcmFte0FydGljbGV9IH07CgogICAgbXkgJUF0dGFjaG1lbnRzOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZG93bmxvYWQgdHlwZQogICAgbXkgJFR5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0F0dGFjaG1lbnREb3dubG9hZFR5cGUnKSB8fCAnYXR0YWNobWVudCc7CgogICAgJEFydGljbGV7QXRtQ291bnR9ID0gc2NhbGFyIGtleXMgJXsgJEFydGljbGV7QXRtc30gLy8ge30gfTsKCiAgICAjIGlmIGF0dGFjaG1lbnQgd2lsbCBiZSBmb3JjZWQgdG8gZG93bmxvYWQsIGRvbid0IG9wZW4gYSBuZXcgZG93bmxvYWQgd2luZG93IQogICAgbXkgJFRhcmdldCA9ICd0YXJnZXQ9IkF0dGFjaG1lbnRXaW5kb3ciICc7CiAgICBpZiAoICRUeXBlID1+IC9pbmxpbmUvaSApIHsKICAgICAgICAkVGFyZ2V0ID0gJ3RhcmdldD0iYXR0YWNobWVudCIgJzsKICAgIH0KCiAgICAkQXR0YWNobWVudHN7Wm9vbUF0dGFjaG1lbnREaXNwbGF5Q291bnR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Olpvb21BdHRhY2htZW50RGlzcGxheUNvdW50Jyk7CgogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkRmlsZUlEICggc29ydCBrZXlzICV7ICRBcnRpY2xle0F0bXN9IH0gKSB7CiAgICAgICAgcHVzaCBAeyAkQXR0YWNobWVudHN7RmlsZXN9IH0sIHsKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICV7ICRBcnRpY2xle0F0bXN9LT57JEZpbGVJRH0gfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRGaWxlSUQsCiAgICAgICAgICAgIFRhcmdldCA9PiAkVGFyZ2V0LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFwlQXR0YWNobWVudHM7Cn0KCnN1YiBfQXJ0aWNsZUJveEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2UgQXJ0aWNsZUJveEFsbCBMaW1pdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICBteSAkU3RhcnQgPSAoICRQYXJhbXtQYWdlfSAtIDEgKSAqICRQYXJhbXtMaW1pdH07CgogICAgbXkgJEVuZCA9ICRQYXJhbXtQYWdlfSAqICRQYXJhbXtMaW1pdH0gLSAxOwogICAgaWYgKCAkRW5kID49IHNjYWxhciBAeyAkUGFyYW17QXJ0aWNsZUJveEFsbH0gfSApIHsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBlbmQgaW5kZXggZG9lc24ndCBleGNlZWQgYXJyYXkgc2l6ZS4KICAgICAgICAkRW5kID0gc2NhbGFyIEB7ICRQYXJhbXtBcnRpY2xlQm94QWxsfSB9IC0gMTsKICAgIH0KCiAgICBteSBAQXJ0aWNsZUluZGV4ZXMgPSAoICRTdGFydCAuLiAkRW5kICk7CgogICAgbXkgJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJyk7CgogICAgIyBTYXZlIGNvbW11bmljYXRpb24gY2hhbm5lbCBkYXRhIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCiAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRhOwoKICAgIG15IEBBcnRpY2xlQm94OwogICAgZm9yIG15ICRJbmRleCAoQEFydGljbGVJbmRleGVzKSB7CiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlQm94QWxsfS0+WyRJbmRleF0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICApOwoKICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkUGFyYW17QXJ0aWNsZUJveEFsbH0tPlskSW5kZXhdLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBJbmNsdWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgY29tbXVuaWNhdGlvbiBjaGFubmVsLgogICAgICAgIGlmICggISRDb21tdW5pY2F0aW9uQ2hhbm5lbERhdGF7ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gKSB7CgogICAgICAgICAgICAjIENvbW11bmljYXRpb24gY2hhbm5lbCBkaXNwbGF5IG5hbWUgaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgbXkgJUNvbW11bmljYXRpb25DaGFubmVsID0gJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0LT5DaGFubmVsR2V0KAogICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBQcmVzZW5jZSBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWwgb2JqZWN0IGluZGljYXRlcyBpdHMgdmFsaWRpdHkuCiAgICAgICAgICAgIG15ICRDaGFubmVsT2JqZWN0ID0gJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0LT5DaGFubmVsT2JqZWN0R2V0KAogICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENvbW11bmljYXRpb25DaGFubmVsRGF0YXsgJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gfSA9IHsKICAgICAgICAgICAgICAgIENoYW5uZWxOYW1lICAgICAgICA9PiAkQ29tbXVuaWNhdGlvbkNoYW5uZWx7Q2hhbm5lbE5hbWV9LAogICAgICAgICAgICAgICAgQ2hhbm5lbERpc3BsYXlOYW1lID0+ICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtEaXNwbGF5TmFtZX0sCiAgICAgICAgICAgICAgICBDaGFubmVsSW52YWxpZCAgICAgPT4gISRDaGFubmVsT2JqZWN0LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJUFydGljbGUgPSAoICVBcnRpY2xlLCAleyAkQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRheyAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9IH0gKTsKCiAgICAgICAgcHVzaCBAQXJ0aWNsZUJveCwgXCVBcnRpY2xlOwogICAgfQoKICAgIHJldHVybiBAQXJ0aWNsZUJveDsKfQoKPWhlYWQyIF9BcnRpY2xlUmVuZGVyKCkKClJldHVybnMgYXJ0aWNsZSBodG1sLgoKICAgIG15ICRIVE1MID0gJFNlbGYtPl9BcnRpY2xlUmVuZGVyKAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgPT4gMTIzLCAgICAgICMgKHJlcXVpcmVkKQogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgICAgPT4gMTIzLCAgICAgICMgKHJlcXVpcmVkKQogICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJ1N0YXRpYycsICMgKHJlcXVpcmVkKSBTdGF0aWMgb3IgT25Mb2FkCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAxLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKUmVzdWx0OgogICAgJEhUTUwgPSAiPGRpdj4uLi48L2Rpdj4iOwoKPWN1dAoKc3ViIF9BcnRpY2xlUmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgYXJ0aWNsZSBkYXRhLgogICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQXJ0aWNsZSglUGFyYW0pOwoKICAgICMgRGV0ZXJtaW5lIGNoYW5uZWwgbmFtZSBmb3IgdGhpcyBBcnRpY2xlLgogICAgbXkgJENoYW5uZWxOYW1lID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpOwoKICAgIG15ICRMb2FkZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKAogICAgICAgICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRDaGFubmVsTmFtZSIsCiAgICApOwogICAgcmV0dXJuIGlmICEkTG9hZGVkOwoKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRDaGFubmVsTmFtZSIpLT5BcnRpY2xlUmVuZGVyKAogICAgICAgICVQYXJhbSwKICAgICAgICBBcnRpY2xlQWN0aW9ucyA9PiAkUGFyYW17TWVudUl0ZW1zfSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwp9CgpzdWIgX0dldEluY2x1ZGVkRmllbGRPcmRlcmVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFJldHVybjsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJbmNsdWRlSXRlbSAoIEB7ICRQYXJhbXtJbmNsdWRlfSB9ICkgewoKICAgICAgICBpZiAoICRJbmNsdWRlSXRlbS0+e0dyaWR9ICkgewogICAgICAgICAgICBmb3IgbXkgJFJvdyAoIEB7ICRJbmNsdWRlSXRlbS0+e0dyaWR9e1Jvd3N9IH0gKSB7CgogICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgZm9yIG15ICRERkVudHJ5ICggJFJvdy0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT0xVTU4gaWYgISRERkVudHJ5LT57REZ9OwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBSZXR1cm4sICRERkVudHJ5LT57REZ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluY2x1ZGVJdGVtLT57REZ9ICkgewogICAgICAgICAgICBwdXNoIEBSZXR1cm4sICRJbmNsdWRlSXRlbS0+e0RGfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIEBSZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA1NzhiNGIxOTkyN2Y2MzE4Mzc2YzAyZTMxNzg4ZTI0MjVlMTA0MTE2IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6U2NyaXB0VXNhZ2UpCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iQXJ0aWNsZUZpbHRlckRpYWxvZyIgY2xhc3M9IkhpZGRlbiI+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+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51SXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPSJuYXYtWyUgRGF0YS5OYW1lIHwgcmVwbGFjZSgnICcsICctJykgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuVHlwZSA9PSAnQ2x1c3RlcicgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DbGFzcyAlXSIgPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuQ2xhc3MgJV0iIFslIERhdGEuTGlua1BhcmFtICVdIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIiB0YXJnZXQ9IlslIERhdGEuVGFyZ2V0IHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVTdWJDb250YWluZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibmF2LVslIERhdGEuTmFtZSB8IHJlcGxhY2UoJyAnLCAnLScpIHwgaHRtbCAlXS1jb250YWluZXIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD0ibmF2LVslIERhdGEuTmFtZSB8IHJlcGxhY2UoJyAnLCAnLScpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBJRiAhRGF0YS5FeHRlcm5hbExpbmsgJV1bJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBFTkQgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIiBbJSBEYXRhLkxpbmtQYXJhbSAlXSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSIgdGFyZ2V0PSJbJSBEYXRhLlRhcmdldCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnVTdWJDb250YWluZXJJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudVN1YkNvbnRhaW5lciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVGb3JtR2VuZXJpYyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgIyB1c2luZyBhIGZvcm0gaGVyZSBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHRoZSBiYWNrZW5kIHRvIHBlcmZvcm0gYSBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgb24gYW4gYXJ0aWNsZSBhY3Rpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0iVGlja2V0QWN0aW9uRm9ybSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+ClslIElGIERhdGEuU3ViYWN0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuU3ViYWN0aW9uIHwgaHRtbCAlXSIgLz4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJUaWNrZXRNZW51Rm9ybUFjdGlvbiBbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudUZvcm1HZW5lcmljIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnVJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0TWVudVBob25lQXNEcm9wZG93biIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSIgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9ImdldCIgaWQ9IlslIERhdGEuRm9ybUlEIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIERhdGEuQWN0aW9uIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuUGhvbmVFbGVtZW50SUQgfCBodG1sICVdIiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3RhbmRhcmRSZXBseVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudVBob25lQXNEcm9wZG93biIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk1vdmVMaW5rIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdGlja2V0IHRvIGEgZGlmZmVyZW50IHF1ZXVlIikgfCBodG1sICVdIiBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgfCBodG1sICVdIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZ2VudFRpY2tldE1vdmUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUXVldWVJRCIgdmFsdWU9IlslIERhdGEuUXVldWVJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGlja2V0SUQiIHZhbHVlPSJbJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJEZXN0UXVldWVJRCIgY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUXVldWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Nb3ZlUXVldWVzU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNb3ZlTGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk1vdmVGb3JtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRNb3ZlO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV07IiBjbGFzcz0iQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDaGFuZ2UgUXVldWUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiUXVldWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiTW92ZUZvcm0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51RXh0ZXJuYWxMaW5rIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIiBbJSBEYXRhLkxpbmtQYXJhbSAlXSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSIgdGFyZ2V0PSJbJSBEYXRhLlRhcmdldCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnVFeHRlcm5hbExpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBFeHBhbmRlZCIgaWQ9IkR5bmFtaWNGaWVsZHNXaWRnZXQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoRGF0YS5XaWRnZXRUaXRsZSkgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOZXh0QWN0aXZpdHlEaWFsb2dzIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+WyUgVHJhbnNsYXRlKERhdGEuQWN0aXZpdHlOYW1lKSB8IGh0bWwgJV06PC9zdHJvbmc+PC9saT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aXZpdHlEaWFsb2dEaXJlY3RTdWJtaXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgfCBodG1sICVdIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50VGlja2V0UHJvY2VzcyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlN0b3JlQWN0aXZpdHlEaWFsb2ciLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUHJvY2Vzc0VudGl0eUlEIiB2YWx1ZT0iWyUgRGF0YS5Qcm9jZXNzRW50aXR5SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCIgdmFsdWU9IlslIERhdGEuQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJCdXR0b25fWyUgRGF0YS5BY3Rpdml0eURpYWxvZ0VudGl0eUlEIHwgdXJpICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIHR5cGU9InN1Ym1pdCI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpdml0eURpYWxvZ0RpcmVjdFN1Ym1pdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGl2aXR5RGlhbG9nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uIE5leHRBY3Rpdml0eURpYWxvZyIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0UHJvY2VzcztTdWJhY3Rpb249RGlzcGxheUFjdGl2aXR5RGlhbG9nO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV07UHJvY2Vzc0VudGl0eUlEPVslIERhdGEuUHJvY2Vzc0VudGl0eUlEIHwgdXJpICVdO0FjdGl2aXR5RGlhbG9nRW50aXR5SUQ9WyUgRGF0YS5BY3Rpdml0eURpYWxvZ0VudGl0eUlEIHwgdXJpICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aXZpdHlEaWFsb2ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vQWN0aXZpdHlEaWFsb2dzIikgJV0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iQWN0aW9uTWVzc2FnZSI+WyUgVHJhbnNsYXRlKCJUaGVyZSBhcmUgbm8gZGlhbG9ncyBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2Vzcy4iKSB8IGh0bWwgJV08L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJOb0FjdGl2aXR5RGlhbG9ncyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJOZXh0QWN0aXZpdHlEaWFsb2dzIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgUHJvY2Vzc0luZm8iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlByb2Nlc3NJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRHcm91cHMiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwU2VwYXJhdG9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iRmllbGRTZXRTZXBhcmF0b3IiPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwU2VwYXJhdG9yIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGFuZGFyZEZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkQ29udGFpbmVyIER5bmFtaWNGaWVsZEF1dG9SZXNpemUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT0iWyUgRGF0YS5MYWJlbCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iU2hvd0ZpZWxkSW5mb092ZXJsYXkiPis8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIEN1dFZhbHVlIER5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgJV0iPgo8IS0tIE91dHB1dEZpbHRlckhvb2tfV2lkZ2V0RHluYW1pY0ZpZWxkQmVnaW4gLS0+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkTGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlZhbHVlSXRlbUxpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iWyUgSUYgRGF0YS5MaW5rUHJldmlldyAlXSBkYXRhLXRyaWdnZXI9ImZsb2F0ZXIiIGRhdGEtZmxvYXRlci11cmw9IlslIERhdGEuTGlua1ByZXZpZXcgfCBJbnRlcnBvbGF0ZSAlXSJbJSBFTkQgJV0gdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJEeW5hbWljRmllbGRMaW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTXVsdGl2YWx1ZVNlcGFyYXRvckxpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTXVsdGl2YWx1ZVNlcGFyYXRvckxpbmsiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiVmFsdWVJdGVtTGluayIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbiIpICVdCjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRFbmQgLS0+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+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVVbml0SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpbWVVbml0Ij48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlRpbWUgVW5pdHMiKSB8IGh0bWwgJV08L2E+PC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVVbml0SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJbJSBEYXRhLlNlbmRlclR5cGUgfCBodG1sICVdIFslIElGIERhdGEuU2VuZGVyVHlwZSA9PSAnY3VzdG9tZXInICVdSW5jb21pbmdbJSBFTFNFICVdT3V0Z29pbmdbJSBFTkQgJV0gWyUgSUYgRGF0YS5Jc1Zpc2libGVGb3JDdXN0b21lciAlXVZpc2libGVGb3JDdXN0b21lclslIEVMU0UgJV1Ob3RWaXNpYmxlRm9yQ3VzdG9tZXJbJSBFTkQgJV0gWyUgSUYgRGF0YS5BcnRpY2xlRGVsZXRlZCA9PSAiMSIgJV0gQXJ0aWNsZURlbGV0ZWQgWyUgRU5EICVdIFslIERhdGEuQ2xhc3NSb3cgfCBodG1sICVdIiBpZD0iUm93WyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ik5vIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iQXJ0aWNsZUluZm8iIG5hbWU9IkxpbmtbJSBEYXRhLkFydGljbGVOdW1iZXIgfCB1cmkgJV0iIHZhbHVlPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRab29tO1N1YmFjdGlvbj1BcnRpY2xlVXBkYXRlO0NvdW50PVslIERhdGEuQXJ0aWNsZU51bWJlciB8IHVyaSAlXTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXTtBcnRpY2xlSUQ9WyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdOyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iQXJ0aWNsZUlEIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkFydGljbGVOdW1iZXIgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSBVbnJlYWRBcnRpY2xlcyBGaXhlZCBOb25UZXh0Q29udGVudCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbXBvcnRhbnRBcnRpY2xlcyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1pbmZvLWNpcmNsZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1JbXBvcnRhbnRBcnRpY2xlIikgJV0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtUGlubmVkQXJ0aWNsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJQaW5uZWRBcnRpY2xlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJQaW5uZWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRodW1iLXRhY2siPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbT5bJSBUcmFuc2xhdGUoIlBpbm5lZCIpIHwgaHRtbCAlXTwvZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtUGlubmVkQXJ0aWNsZSIpICVdCiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5ld0FydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlVucmVhZCBBcnRpY2xlISIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1OZXdBcnRpY2xlIikgJV0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5vTmV3QXJ0aWNsZSIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTm9Db250ZW50Ij48L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1Ob05ld0FydGljbGUiKSAlXQojIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRGlyZWN0aW9uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25JbmNvbWluZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gSW5jb21pbmciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkluY29taW5nIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxvbmctYXJyb3ctbGVmdCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjAiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbkluY29taW5nIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gT3V0Z29pbmciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk91dGdvaW5nIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxvbmctYXJyb3ctcmlnaHQiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSIxIiAvPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtRGlyZWN0aW9uSW50ZXJuYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRGlyZWN0aW9uIEludGVybmFsIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbnRlcm5hbCBtZXNzYWdlIikgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjIiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbkludGVybmFsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iU2VuZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZSB8IGh0bWwgJV0iPjxhIGhyZWY9IiMiPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuUmVhbG5hbWUgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNoYW5uZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLkNoYW5uZWxEaXNwbGF5TmFtZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQ2hhbm5lbEludmFsaWQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1pc3NpbmcgY2hhbm5lbCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIFdhcm5pbmciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlRyYW5zbWlzc2lvblN0YXR1cyAmJiBEYXRhLlRyYW5zbWlzc2lvblN0YXR1cy5TdGF0dXMgPT0gJ0ZhaWxlZCcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlbmRpbmcgb2YgdGhpcyBtZXNzYWdlIGhhcyBmYWlsZWQuIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRXJyb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2hhbm5lbERpc3BsYXlOYW1lKSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlN1YmplY3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU3ViamVjdC5WYWx1ZSB8IGh0bWwgJV0iPjxhIGhyZWY9IiMiPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ3JlYXRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCdUaW1lU2hvcnQnKSAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC9hPjwvZGl2PgojIEluY2x1ZGUgY3VzdG9tIHNvcnRpbmcgaW5mb3JtYXRpb246IGRhdGUgaW4gSVNPIGZvcm1hdC4KIyBPdGhlciBkYXRlIGZvcm1hdHMgY2Fubm90IGJlIHNvcnRlZCByZWxpYWJseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5DcmVhdGVUaW1lIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUaGUgYXJ0aWNsZSB3YXMgZWRpdGVkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuSXNFZGl0ZWQgPT0gIjEiICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkVkaXRJY29uIj48aSBjbGFzcz0iZmEgZmEtY2xvbmUiPjwvaT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IlslIERhdGEuSXNFZGl0ZWQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQXR0YWNobWVudHMgQ2VudGVyIEF0dGFjaG1lbnQgRml4ZWQgTm9uVGV4dENvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbUF0dGFjaG1lbnQiKSAlXQpbJSBQUk9DRVNTIEFydGljbGVBdHRhY2htZW50cy50dCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1BdHRhY2htZW50IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1Ob0F0dGFjaG1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTm9Db250ZW50Ij48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbU5vQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlNob3dUaW1lVW5pdHMgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ik5vIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UaW1lVW5pdCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIYW5kbGUgdWktcmVzaXphYmxlLWhhbmRsZSB1aS1yZXNpemFibGUtcyI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJSZXNpemUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBcnRpY2xlTGlzdCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaW1lbGluZVZpZXciKSAlXQoKICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVZpZXdUaWNrZXRBY3Rpb25zIEhpZGRlbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVsaW5lVmlld1RpY2tldEFjdGlvbnMiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJUaWNrZXRBY3Rpb25zIEFydGljbGVJRF9bJSBEYXRhLkFydGljbGVJRCB8IGh0bWwgJV0iPgpbJSBQUk9DRVNTIEFydGljbGVBY3Rpb25NZW51LnR0ICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGltZWxpbmVWaWV3VGlja2V0QWN0aW9ucyIpICVdCiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lVmlld0FydGljbGVBdHRhY2htZW50cyBIaWRkZW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlQXR0YWNobWVudHMgQXJ0aWNsZUlEX1slIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXSI+ClslIFBST0NFU1MgQXJ0aWNsZUF0dGFjaG1lbnRzLnR0ICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGltZWxpbmVWaWV3QXJ0aWNsZUF0dGFjaG1lbnRzIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPHVsIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICA8bGkgaWQ9IlRlbXBsYXRlTGlzdEl0ZW0iPgogICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlVucmVhZEFydGljbGVzIFJlbWFya2FibGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1hcmsgdGhpcyBhcnRpY2xlIGFzIHJlYWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1pbmZvLWNpcmNsZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPGVtPjwvZW0+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz0iVHlwZSI+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PHNwYW4+PC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iU2hvd0Z1bGxBcnRpY2xlVGV4dCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBGdWxsIFRleHQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc2VhcmNoLXBsdXMiPjwvaT4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CgogICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlQXJ0aWNsZURhdGEiIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN1YmplY3QiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgVHJhbnNsYXRlKCJTdWJqZWN0IikgfCBodG1sICVdOiA8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZyb20iPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgVHJhbnNsYXRlKCJGcm9tIikgfCBodG1sICVdOiA8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiVG8iKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iY2MiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgVHJhbnNsYXRlKCJDYyIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIaWRkZW4gRnVsbEFydGljbGVQbGFpblRleHQiIGRhdGEtdGl0bGU9IlslIFRyYW5zbGF0ZSgiRnVsbCBBcnRpY2xlIFRleHQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVQbGFpblRleHQiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgY2xhc3M9IlBsYWluVGV4dCI+PC9wPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIaWRkZW4gQXJ0aWNsZUlGcmFtZSIgZGF0YS10aXRsZT0iWyUgVHJhbnNsYXRlKCJGdWxsIEFydGljbGUgVGV4dCIpIHwgaHRtbCAlXSI+PC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lVmlldyBVc2VBcnRpY2xlQ29sb3JzIj4KICAgICAgICAgICAgPHVsIGNsYXNzPSJMaXN0TGVmdCI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Ik5vRXZlbnRzIj5bJSBUcmFuc2xhdGUoIk5vIG1vcmUgZXZlbnRzIGZvdW5kLiBQbGVhc2UgdHJ5IGNoYW5naW5nIHRoZSBmaWx0ZXIgc2V0dGluZ3MuIikgfCBodG1sICVdPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHVsIGNsYXNzPSJMaXN0UmlnaHQiPjwvdWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrRW5kKCJUaW1lbGluZVZpZXciKSAlXQoKICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWUiKSAlXQoKWyUgRGF0YS5BcnRpY2xlV2lkZ2V0c0hUTUwgJV0K</File>
        <File Location="Kernel/Config/Files/XML/ArticlePin.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zOjpJbnRlcm5hbCMjIzAwMS1BZ2VudFRpY2tldEFydGljbGVQaW4iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhdmFpbGFibGUgYXJ0aWNsZSBhY3Rpb25zIGZvciBJbnRlcm5hbCBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTo6QXJ0aWNsZUFjdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9uczo6UGhvbmUjIyMwMDEtQWdlbnRUaWNrZXRBcnRpY2xlUGluIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYXZhaWxhYmxlIGFydGljbGUgYWN0aW9ucyBmb3IgUGhvbmUgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBcnRpY2xlUGluIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBcnRpY2xlUGluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjExMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFydGljbGU6OkFjdGlvbnM6OkVtYWlsIyMjMDAxLUFnZW50VGlja2V0QXJ0aWNsZVBpbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGF2YWlsYWJsZSBhcnRpY2xlIGFjdGlvbnMgZm9yIGUtbWFpbCBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTo6QXJ0aWNsZUFjdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50VGlja2V0QXJ0aWNsZVBpbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+QWdlbnRUaWNrZXRBcnRpY2xlUGluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRUaWNrZXRab29tIyMjMDEwLUFydGljbGVQaW4iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFydGljbGVQaW4uY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5BcnRpY2xlUGluLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT50aGlyZHBhcnR5L2pxdWVyeS10YWJsZXNvcnRlci0yLjI4LjE0L3dpZGdldC1zdGF0aWNSb3cubWluLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRBcnRpY2xlUGluIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBwZXJtaXNzaW9uIHJlcXVpcmVkIHRvIHBpbi91bnBpbiBhcnRpY2xlcyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpBZ2VudFRpY2tldEFydGljbGVQaW48L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ub3RlPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4jIyNSZXF1aXJlZExvY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIHRvIHBpbiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</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/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="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/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/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>