<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.0">
    <Name>Announcement</Name>
    <Version>7.2.1</Version>
    <Framework>7.2.x</Framework>
    <Vendor>wolkig.it - Stephan Lang</Vendor>
    <URL>https://wolkig.it</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <Description Lang="en">Announcements for maintenance windows and incidents - display notifications to agents and customers</Description>
    <Description Lang="de">Ankuendigungen fuer Wartungsfenster und Stoerungen - Benachrichtigungen fuer Agenten und Kunden anzeigen</Description>

    <ChangeLog Version="7.2.1" Date="2026-09-21">
        Adds a "Duplicate" action for announcements, restores bulleted/numbered list styling in announcement bodies (overridden by Znuny's own CSS reset), and fixes two customer-interface bugs: the header banner staying visible for one request after logout, and clicking the banner not opening its overlay (a load-order race between the announcement config and the click handler's own init). Also generalizes the header-banner injection regex and adds a 105-assertion unit test suite covering CRUD validation, active/login-announcement filtering, and the Agent/Customer AJAX endpoints (previously untested on this line), both ported forward from the 6.5.x/7.0.x/7.1.x lines.
    </ChangeLog>
    <ChangeLog Version="7.1.0" Date="2026-09-20">
        Initial release for Znuny 7.1.x, ported from the 7.2.x line: system announcements for maintenance windows and incidents, with configurable type (info/warning/critical), target audience (agent/all), optional validity window, and an optional pre-login banner. Adds a "Duplicate" action for announcements, restores bulleted/numbered list styling in announcement bodies (overridden by Znuny's own CSS reset), and fixes two customer-interface bugs: the header banner staying visible for one request after logout, and clicking the banner not opening its overlay (a load-order race between the announcement config and the click handler's own init). Adds a 105-assertion unit test suite covering CRUD validation, active/login-announcement filtering, and the Agent/Customer AJAX endpoints (previously untested on this line).
    </ChangeLog>
    <ChangeLog Version="7.0.0" Date="2026-09-20">
        Initial release for Znuny 7.0.x, ported from the 7.2.x line: system announcements for maintenance windows and incidents, with configurable type (info/warning/critical), target audience (agent/all), optional validity window, and an optional pre-login banner. Adds a "Duplicate" action for announcements, restores bulleted/numbered list styling in announcement bodies (overridden by Znuny's own CSS reset), and fixes two customer-interface bugs: the header banner staying visible for one request after logout, and clicking the banner not opening its overlay (a load-order race between the announcement config and the click handler's own init). Adds a 105-assertion unit test suite covering CRUD validation, active/login-announcement filtering, and the Agent/Customer AJAX endpoints (previously untested on this line).
    </ChangeLog>
    <ChangeLog Version="6.5.0" Date="2026-09-20">
        Initial release: system announcements for maintenance windows and incidents, with configurable type (info/warning/critical), target audience (agent/all), optional validity window, and an optional pre-login banner. Adds a 105-assertion unit test suite covering CRUD validation, active/login-announcement filtering (validity-window boundaries, audience filtering, ShowBeforeLogin gating), and the Agent/Customer AJAX endpoints (previously untested).
    </ChangeLog>

    <Filelist>
        <!-- Configuration -->
        <File Permission="660" Location="Kernel/Config/Files/XML/Announcement.xml" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KCiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gRmVhdHVyZSBUb2dnbGVzIC0tPgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iQW5ub3VuY2VtZW50OjpFbmFibGVkIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZSBvciBkaXNhYmxlIHRoZSBBbm5vdW5jZW1lbnQgZmVhdHVyZSBnbG9iYWxseS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkFubm91bmNlbWVudDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjE8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJBbm5vdW5jZW1lbnQ6OlNob3dJbkFnZW50SW50ZXJmYWNlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgYW5ub3VuY2VtZW50IGluZGljYXRvciBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIGhlYWRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkFubm91bmNlbWVudDo6VUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iQW5ub3VuY2VtZW50OjpTaG93SW5DdXN0b21lckludGVyZmFjZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93IGFubm91bmNlbWVudCBpbmRpY2F0b3IgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZSBoZWFkZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpBbm5vdW5jZW1lbnQ6OlVJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkFubm91bmNlbWVudDo6U2hvd09uTG9naW5QYWdlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgYW5ub3VuY2VtZW50cyBvbiBsb2dpbiBwYWdlcyAoYmVmb3JlIGF1dGhlbnRpY2F0aW9uKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkFubm91bmNlbWVudDo6VUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICA8IS0tIENhY2hlIFNldHRpbmdzIC0tPgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iQW5ub3VuY2VtZW50OjpDYWNoZTo6VFRMIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpbWUgdG8gbGl2ZSAoaW4gc2Vjb25kcykgZm9yIGFubm91bmNlbWVudCBjYWNoZSBvbiBjbGllbnQgc2lkZS4gRGVmYXVsdDogMzAwICg1IG1pbnV0ZXMpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6QW5ub3VuY2VtZW50OjpDYWNoZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeXGQrJCI+MzAwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICA8IS0tIEFkbWluIEZyb250ZW5kIE1vZHVsZSBSZWdpc3RyYXRpb24gLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRBbm5vdW5jZW1lbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgYW5ub3VuY2VtZW50cyBtYW5hZ2VtZW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIGFubm91bmNlbWVudHMgZm9yIG1haW50ZW5hbmNlIGFuZCBpbmNpZGVudHMuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5Bbm5vdW5jZW1lbnRzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5Bbm5vdW5jZW1lbnRzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Bbm5vdW5jZW1lbnRNYW5hZ2VyPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+QW5ub3VuY2VtZW50TWFuYWdlcjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gQUpBWCBNb2R1bGUgUmVnaXN0cmF0aW9uIC0tPgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50QW5ub3VuY2VtZW50QUpBWCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BSkFYIGVuZHBvaW50IGZvciBhZ2VudCBhbm5vdW5jZW1lbnQgZGF0YS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkFubm91bmNlbWVudCBBSkFYIEJhY2tlbmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkFubm91bmNlbWVudEFKQVg8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+dXNlcnM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjQ3VzdG9tZXJBbm5vdW5jZW1lbnRBSkFYIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFKQVggZW5kcG9pbnQgZm9yIGN1c3RvbWVyIGFubm91bmNlbWVudCBkYXRhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QW5ub3VuY2VtZW50IEFKQVggQmFja2VuZCBmb3IgQ3VzdG9tZXJzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5DdXN0b21lckFubm91bmNlbWVudEFKQVg8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICA8IS0tIE91dHB1dCBGaWx0ZXIgUmVnaXN0cmF0aW9uIC0tPgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok91dHB1dDo6RmlsdGVyQ29udGVudCMjI0Fubm91bmNlbWVudEFnZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkluamVjdHMgYW5ub3VuY2VtZW50IGluZGljYXRvciBpbnRvIGFnZW50IGludGVyZmFjZSBoZWFkZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok91dHB1dEZpbHRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJDb250ZW50OjpBbm5vdW5jZW1lbnRBZ2VudDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGVtcGxhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJIZWFkZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJDb250ZW50IyMjQW5ub3VuY2VtZW50Q3VzdG9tZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SW5qZWN0cyBhbm5vdW5jZW1lbnQgaW5kaWNhdG9yIGludG8gY3VzdG9tZXIgaW50ZXJmYWNlIGhlYWRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6T3V0cHV0RmlsdGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckNvbnRlbnQ6OkFubm91bmNlbWVudEN1c3RvbWVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUZW1wbGF0ZXMiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVySGVhZGVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok91dHB1dDo6RmlsdGVyQ29udGVudCMjI0Fubm91bmNlbWVudExvZ2luIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkluamVjdHMgYW5ub3VuY2VtZW50IGJhbm5lciBvbiBsb2dpbiBwYWdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpPdXRwdXRGaWx0ZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RmlsdGVyQ29udGVudDo6QW5ub3VuY2VtZW50TG9naW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRlbXBsYXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9naW4iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VzdG9tZXJMb2dpbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgPCEtLSBMb2FkZXIgQ29uZmlndXJhdGlvbiAtIEFnZW50IC0tPgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uSlMjIyMyMDAtQW5ub3VuY2VtZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZSAoQW5ub3VuY2VtZW50KS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFubm91bmNlbWVudC5VSS5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkNTUyMjIzIwMC1Bbm5vdW5jZW1lbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZSAoQW5ub3VuY2VtZW50KS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQuY3NzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICA8IS0tIExvYWRlciBDb25maWd1cmF0aW9uIC0gQ3VzdG9tZXIgLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkN1c3RvbWVyOjpDb21tb25KUyMjIzIwMC1Bbm5vdW5jZW1lbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlIChBbm5vdW5jZW1lbnQpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkN1c3RvbWVyLkFubm91bmNlbWVudC5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6Q3VzdG9tZXI6OkNvbW1vbkNTUyMjIzIwMC1Bbm5vdW5jZW1lbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZSAoQW5ub3VuY2VtZW50KS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQuY3NzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICA8IS0tIEFkbWluIE1vZHVsZSBMb2FkZXIgKFJpY2hUZXh0IEVkaXRvcikgLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRBbm5vdW5jZW1lbnQjIyMwMDItQW5ub3VuY2VtZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYW5ub3VuY2VtZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLlJpY2hUZXh0RWRpdG9yLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgPCEtLSBOYXZpZ2F0aW9uIE1lbnUgLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCiAgICA8IS0tIEFubm91bmNlbWVudHMgTWFpbiBNZW51IChUb3AtTGV2ZWwpIC0tPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudEFubm91bmNlbWVudCMjIzAwMS1Bbm5vdW5jZW1lbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gZm9yIGFubm91bmNlbWVudHMgaW4gYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5JdGVtQXJlYTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIGFubm91bmNlbWVudHMgZm9yIG1haW50ZW5hbmNlIGFuZCBpbmNpZGVudHMuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Bbm5vdW5jZW1lbnRNYW5hZ2VyPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+QW5ub3VuY2VtZW50TWFuYWdlcjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRBbm5vdW5jZW1lbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtPcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5Bbm5vdW5jZW1lbnRzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXIiPkFubm91bmNlbWVudHM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjkwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk1lbnU8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKPC9vdHJzX2NvbmZpZz4K</File>

        <!-- Language Files -->
        <File Permission="660" Location="Kernel/Language/de_Announcement.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0Fubm91bmNlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAjIEFkbWluIE1vZHVsZQogICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbm5vdW5jZW1lbnRzJ30gPSAnQW5rw7xuZGlndW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFubm91bmNlbWVudCd9ID0gJ0Fua8O8bmRpZ3VuZyBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFubm91bmNlbWVudCd9ID0gJ0Fua8O8bmRpZ3VuZyBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGFubm91bmNlbWVudHMuJ30gPSAnQW5rw7xuZGlndW5nZW4gZXJzdGVsbGVuIHVuZCB2ZXJ3YWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBhbm5vdW5jZW1lbnRzIGZvciBtYWludGVuYW5jZSBhbmQgaW5jaWRlbnRzLid9ID0gJ0Fua8O8bmRpZ3VuZ2VuIGbDvHIgV2FydHVuZ2VuIHVuZCBTdMO2cnVuZ2VuIHZlcndhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFubm91bmNlbWVudHMgZm9yIG1haW50ZW5hbmNlIHdpbmRvd3Mgb3IgaW5jaWRlbnRzLiBBbm5vdW5jZW1lbnRzIGNhbiBiZSBkaXNwbGF5ZWQgdG8gYWdlbnRzIGFuZC9vciBjdXN0b21lcnMgaW4gdGhlIGhlYWRlciBhcmVhLid9ID0gJ0Vyc3RlbGxlbiBTaWUgQW5rw7xuZGlndW5nZW4gZsO8ciBXYXJ0dW5nc2ZlbnN0ZXIgb2RlciBTdMO2cnVuZ2VuLiBBbmvDvG5kaWd1bmdlbiBrw7ZubmVuIGltIEhlYWRlci1CZXJlaWNoIGbDvHIgQWdlbnRlbiB1bmQvb2RlciBLdW5kZW4gYW5nZXplaWd0IHdlcmRlbi4nOwoKICAgICMgRmlsdGVyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwnfSA9ICdBbGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2ZSd9ID0gJ0FrdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlZCd9ID0gJ0dlcGxhbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwaXJlZCd9ID0gJ0FiZ2VsYXVmZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYW5ub3VuY2VtZW50cyBmb3VuZC4nfSA9ICdLZWluZSBBbmvDvG5kaWd1bmdlbiBnZWZ1bmRlbi4nOwoKICAgICMgRm9ybSBGaWVsZHMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlJ30gPSAnVGl0ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGVudCd9ID0gJ0luaGFsdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlJ30gPSAnVHlwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhcmdldCBBdWRpZW5jZSd9ID0gJ1ppZWxncnVwcGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFsaWQgZnJvbSd9ID0gJ0fDvGx0aWcgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhbGlkIHVudGlsJ30gPSAnR8O8bHRpZyBiaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBiZWZvcmUgbG9naW4nfSA9ICdWb3IgQW5tZWxkdW5nIGFuemVpZ2VuJzsKCiAgICAjIFR5cGUgT3B0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5mbyd9ID0gJ0luZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyd9ID0gJ1dhcm51bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWwnfSA9ICdLcml0aXNjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmZvJ30gPSAnSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnV2FybnVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcml0aWNhbCd9ID0gJ0tyaXRpc2NoJzsKCiAgICAjIEF1ZGllbmNlIE9wdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyBvbmx5J30gPSAnTnVyIEFnZW50ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnRzIGFuZCBDdXN0b21lcnMnfSA9ICdBZ2VudGVuIHVuZCBLdW5kZW4nOwoKICAgICMgVmFsaWRpdHkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb20nfSA9ICdWb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW50aWwnfSA9ICdCaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx3YXlzJ30gPSAnSW1tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFsaWRpdHknfSA9ICdHw7xsdGlna2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcHRpb25zJ30gPSAnT3B0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBieSd9ID0gJ0Vyc3RlbGx0IHZvbic7CgogICAgIyBBY3Rpb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUnfSA9ICdFcnN0ZWxsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSd9ID0gJ1NwZWljaGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGFuZCBjbG9zZSd9ID0gJ1NwZWljaGVybiB1bmQgYWJzY2hsaWXDn2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbmNlbCd9ID0gJ0FiYnJlY2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUnfSA9ICdMw7ZzY2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUnfSA9ICdEdXBsaXppZXJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0J30gPSAnQmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmZsaW5lJ30gPSAnT2ZmbGluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgb2ZmbGluZSd9ID0gJ09mZmxpbmUgc2V0emVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIHRvIG92ZXJ2aWV3J30gPSAnWnVyIMOcYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGFubm91bmNlbWVudD8nfSA9ICdTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGRpZXNlIEFua8O8bmRpZ3VuZyBsw7ZzY2hlbiBtw7ZjaHRlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNldCB0aGlzIGFubm91bmNlbWVudCBvZmZsaW5lPyd9ID0gJ03DtmNodGVuIFNpZSBkaWVzZSBBbmvDvG5kaWd1bmcgd2lya2xpY2ggb2ZmbGluZSBzZXR6ZW4/JzsKCiAgICAjIFBlcm1pc3Npb24gTWVzc2FnZXMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGUnfSA9ICdIaW53ZWlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHJlYWQtb25seSBhY2Nlc3MuIFRvIGNyZWF0ZSBvciBlZGl0IGFubm91bmNlbWVudHMsIHlvdSBuZWVkIFJXIHBlcm1pc3Npb24gaW4gdGhlIEFubm91bmNlbWVudE1hbmFnZXIgZ3JvdXAuJ30gPSAnU2llIGhhYmVuIG51ciBMZXNlenVncmlmZi4gVW0gQW5rw7xuZGlndW5nZW4genUgZXJzdGVsbGVuIG9kZXIgenUgYmVhcmJlaXRlbiwgYmVuw7Z0aWdlbiBTaWUgUlctQmVyZWNodGlndW5nIGluIGRlciBHcnVwcGUgQW5ub3VuY2VtZW50TWFuYWdlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgUlcgcGVybWlzc2lvbiBpbiB0aGUgQW5ub3VuY2VtZW50TWFuYWdlciBncm91cCB0byBjcmVhdGUgb3IgZWRpdCBhbm5vdW5jZW1lbnRzLid9ID0gJ1NpZSBiZW7DtnRpZ2VuIFJXLUJlcmVjaHRpZ3VuZyBpbiBkZXIgR3J1cHBlIEFubm91bmNlbWVudE1hbmFnZXIsIHVtIEFua8O8bmRpZ3VuZ2VuIHp1IGVyc3RlbGxlbiBvZGVyIHp1IGJlYXJiZWl0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkIFJXIHBlcm1pc3Npb24gaW4gdGhlIEFubm91bmNlbWVudE1hbmFnZXIgZ3JvdXAgdG8gY3JlYXRlIGFubm91bmNlbWVudHMuJ30gPSAnU2llIGJlbsO2dGlnZW4gUlctQmVyZWNodGlndW5nIGluIGRlciBHcnVwcGUgQW5ub3VuY2VtZW50TWFuYWdlciwgdW0gQW5rw7xuZGlndW5nZW4genUgZXJzdGVsbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBSVyBwZXJtaXNzaW9uIGluIHRoZSBBbm5vdW5jZW1lbnRNYW5hZ2VyIGdyb3VwIHRvIGVkaXQgYW5ub3VuY2VtZW50cy4nfSA9ICdTaWUgYmVuw7Z0aWdlbiBSVy1CZXJlY2h0aWd1bmcgaW4gZGVyIEdydXBwZSBBbm5vdW5jZW1lbnRNYW5hZ2VyLCB1bSBBbmvDvG5kaWd1bmdlbiB6dSBiZWFyYmVpdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBSVyBwZXJtaXNzaW9uIGluIHRoZSBBbm5vdW5jZW1lbnRNYW5hZ2VyIGdyb3VwIHRvIGRlbGV0ZSBhbm5vdW5jZW1lbnRzLid9ID0gJ1NpZSBiZW7DtnRpZ2VuIFJXLUJlcmVjaHRpZ3VuZyBpbiBkZXIgR3J1cHBlIEFubm91bmNlbWVudE1hbmFnZXIsIHVtIEFua8O8bmRpZ3VuZ2VuIHp1IGzDtnNjaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCBSVyBwZXJtaXNzaW9uIGluIHRoZSBBbm5vdW5jZW1lbnRNYW5hZ2VyIGdyb3VwIHRvIHNldCBhbm5vdW5jZW1lbnRzIG9mZmxpbmUuJ30gPSAnU2llIGJlbsO2dGlnZW4gUlctQmVyZWNodGlndW5nIGluIGRlciBHcnVwcGUgQW5ub3VuY2VtZW50TWFuYWdlciwgdW0gQW5rw7xuZGlndW5nZW4gb2ZmbGluZSB6dSBzZXR6ZW4uJzsKCiAgICAjIEZvcm0gSGludHMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhpcyBhbm5vdW5jZW1lbnQuJ30gPSAnV8OkaGxlbiBTaWUgZGVuIFNjaHdlcmVncmFkIGRpZXNlciBBbmvDvG5kaWd1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB3aG8gc2hvdWxkIHNlZSB0aGlzIGFubm91bmNlbWVudC4nfSA9ICdXw6RobGVuIFNpZSwgd2VyIGRpZXNlIEFua8O8bmRpZ3VuZyBzZWhlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMZWF2ZSBlbXB0eSB0byBzdGFydCBpbW1lZGlhdGVseS4nfSA9ICdMZWVyIGxhc3NlbiBmw7xyIHNvZm9ydGlnZW4gU3RhcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xlYXZlIGVtcHR5IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LiBUaW1lIGlzIGluIHlvdXIgbG9jYWwgdGltZXpvbmUuJ30gPSAnTGVlciBsYXNzZW4gZsO8ciBzb2ZvcnRpZ2VuIFN0YXJ0LiBaZWl0IGlzdCBpbiBJaHJlciBsb2thbGVuIFplaXR6b25lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMZWF2ZSBlbXB0eSBmb3Igbm8gZW5kIGRhdGUuJ30gPSAnTGVlciBsYXNzZW4gZsO8ciBrZWluIEVuZGRhdHVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMZWF2ZSBlbXB0eSBmb3Igbm8gZW5kIGRhdGUuIFRpbWUgaXMgaW4geW91ciBsb2NhbCB0aW1lem9uZS4nfSA9ICdMZWVyIGxhc3NlbiBmw7xyIGtlaW4gRW5kZGF0dW0uIFplaXQgaXN0IGluIElocmVyIGxva2FsZW4gWmVpdHpvbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rpc3BsYXkgdGhpcyBhbm5vdW5jZW1lbnQgb24gdGhlIGxvZ2luIHBhZ2UgYmVmb3JlIGF1dGhlbnRpY2F0aW9uLid9ID0gJ0RpZXNlIEFua8O8bmRpZ3VuZyBhdWYgZGVyIExvZ2luLVNlaXRlIHZvciBkZXIgQW5tZWxkdW5nIGFuemVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIGZvcm1hdCAoWVlZWS1NTS1ERCBISDpNTTpTUyknfSA9ICdCaXR0ZSBnZWJlbiBTaWUgZWluIGfDvGx0aWdlcyBEYXR1bXNmb3JtYXQgZWluIChKSkpKLU1NLVRUIEhIOk1NOlNTKSc7CgogICAgIyBUeXBlIEhpbnRzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIGluZm9ybWF0aW9uLCBubyBpbW1lZGlhdGUgYWN0aW9uIHJlcXVpcmVkLid9ID0gJ0FsbGdlbWVpbmUgSW5mb3JtYXRpb24sIGtlaW4gc29mb3J0aWdlcyBIYW5kZWxuIGVyZm9yZGVybGljaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0YW50IG5vdGljZSwgcG90ZW50aWFsIGltcGFjdCBvbiB3b3JrLid9ID0gJ1dpY2h0aWdlciBIaW53ZWlzLCBtw7ZnbGljaGUgQXVzd2lya3VuZ2VuIGF1ZiBkaWUgQXJiZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVcmdlbnQgaXNzdWUgcmVxdWlyaW5nIGltbWVkaWF0ZSBhdHRlbnRpb24uJ30gPSAnRHJpbmdlbmRlcyBQcm9ibGVtLCBkYXMgc29mb3J0aWdlIEF1Zm1lcmtzYW1rZWl0IGVyZm9yZGVydC4nOwoKICAgICMgVmFsaWRhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nfSA9ICdEaWVzZXMgRmVsZCBpc3QgZXJmb3JkZXJsaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWxpZCB1bnRpbCBtdXN0IGJlIGFmdGVyIFZhbGlkIGZyb20uJ30gPSAnR3VlbHRpZyBiaXMgbXVzcyBuYWNoIEd1ZWx0aWcgdm9uIGxpZWdlbi4nOwoKICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAjIEZyb250ZW5kIChOYXZpZ2F0aW9uIEJhbm5lciwgT3ZlcmxheSkKICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5ub3VuY2VtZW50cyd9ID0gJ0Fua8O8bmRpZ3VuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2Fubm91bmNlbWVudHMnfSA9ICdBbmvDvG5kaWd1bmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhbm5vdW5jZW1lbnRzJ30gPSAnS2VpbmUgQW5rw7xuZGlndW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwnfSA9ICdBbGxlIGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nsb3NlJ30gPSAnU2NobGllw59lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbGljayB0byB2aWV3IGFsbCBhbm5vdW5jZW1lbnRzJ30gPSAnS2xpY2tlbiBTaWUsIHVtIGFsbGUgQW5rw7xuZGlndW5nZW4gYW56dXplaWdlbic7CgogICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICMgU3lzQ29uZmlnCiAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBBbm5vdW5jZW1lbnQgZmVhdHVyZSBnbG9iYWxseS4nfSA9ICdBbmvDvG5kaWd1bmdlbiBnbG9iYWwgYWt0aXZpZXJlbiBvZGVyIGRlYWt0aXZpZXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbm5vdW5jZW1lbnQgaW5kaWNhdG9yIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgaGVhZGVyLid9ID0gJ0Fua8O8bmRpZ3VuZ3MtQW56ZWlnZSBpbSBBZ2VudGVuLUhlYWRlciBhbnplaWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbm5vdW5jZW1lbnQgaW5kaWNhdG9yIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgaGVhZGVyLid9ID0gJ0Fua8O8bmRpZ3VuZ3MtQW56ZWlnZSBpbSBLdW5kZW4tSGVhZGVyIGFuemVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFubm91bmNlbWVudHMgb24gbG9naW4gcGFnZXMgKGJlZm9yZSBhdXRoZW50aWNhdGlvbikuJ30gPSAnQW5rw7xuZGlndW5nZW4gYXVmIExvZ2luLVNlaXRlbiBhbnplaWdlbiAodm9yIGRlciBBbm1lbGR1bmcpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHRvIGxpdmUgKGluIHNlY29uZHMpIGZvciBhbm5vdW5jZW1lbnQgY2FjaGUgb24gY2xpZW50IHNpZGUuIERlZmF1bHQ6IDMwMCAoNSBtaW51dGVzKS4nfSA9ICdDYWNoZS1EYXVlciAoaW4gU2VrdW5kZW4pIGbDvHIgQW5rw7xuZGlndW5nZW4gYXVmIENsaWVudC1TZWl0ZS4gU3RhbmRhcmQ6IDMwMCAoNSBNaW51dGVuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JvdXAgdGhhdCBjYW4gbWFuYWdlIGFubm91bmNlbWVudHMgaW4gYWRtaW4gYXJlYS4nfSA9ICdHcnVwcGUsIGRpZSBBbmvDvG5kaWd1bmdlbiBpbSBBZG1pbi1CZXJlaWNoIHZlcndhbHRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWRtaW4gaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kLU1vZHVsLVJlZ2lzdHJpZXJ1bmcgZsO8ciBkYXMgQWRtaW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBhZ2VudCBhbm5vdW5jZW1lbnQgbWFuYWdlbWVudC4nfSA9ICdGcm9udGVuZC1Nb2R1bC1SZWdpc3RyaWVydW5nIGbDvHIgQWdlbnRlbi1BbmvDvG5kaWd1bmdzdmVyd2FsdHVuZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFpbiBtZW51IGl0ZW0gZm9yIGFubm91bmNlbWVudCBtYW5hZ2VyIGluIGFnZW50IGludGVyZmFjZS4nfSA9ICdIYXVwdG1lbsO8LUVpbnRyYWcgZsO8ciBBbmvDvG5kaWd1bmdzdmVyd2FsdHVuZyBpbSBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5ub3VuY2VtZW50IE1hbmFnZXInfSA9ICdBbmvDvG5kaWd1bmdzdmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGFubm91bmNlbWVudCBtYW5hZ2VyIGludGVyZmFjZS4nfSA9ICdMb2FkZXItTW9kdWwtUmVnaXN0cmllcnVuZyBmw7xyIGRhcyBBZ2VudGVuLUFua8O8bmRpZ3VuZ3N2ZXJ3YWx0dW5ncy1JbnRlcmZhY2UuJzsKCiAgICAjIE1haW4gTWVudSBOYXZpZ2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWluIG1lbnUgaXRlbSBmb3IgYW5ub3VuY2VtZW50cyBpbiBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnSGF1cHRtZW51ZWVpbnRyYWcgZnVlciBBbmt1ZW5kaWd1bmdlbiBpbSBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gYXJlYSBuYXZpZ2F0aW9uIGZvciBhbm5vdW5jZW1lbnRzLid9ID0gJ0FkbWluLUJlcmVpY2ggTmF2aWdhdGlvbiBmw7xyIEFua8O8bmRpZ3VuZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBSkFYIGVuZHBvaW50IGZvciBhZ2VudCBhbm5vdW5jZW1lbnQgZGF0YS4nfSA9ICdBSkFYLUVuZHB1bmt0IGbDvHIgQWdlbnRlbi1BbmvDvG5kaWd1bmdzZGF0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FKQVggZW5kcG9pbnQgZm9yIGN1c3RvbWVyIGFubm91bmNlbWVudCBkYXRhLid9ID0gJ0FKQVgtRW5kcHVua3QgZsO8ciBLdW5kZW4tQW5rw7xuZGlndW5nc2RhdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmplY3RzIGFubm91bmNlbWVudCBpbmRpY2F0b3IgaW50byBhZ2VudCBpbnRlcmZhY2UgaGVhZGVyLid9ID0gJ0Z1ZWd0IEFua3VlbmRpZ3VuZ3MtQW56ZWlnZSBpbiBkZW4gQWdlbnRlbi1IZWFkZXIgZWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmplY3RzIGFubm91bmNlbWVudCBpbmRpY2F0b3IgaW50byBjdXN0b21lciBpbnRlcmZhY2UgaGVhZGVyLid9ID0gJ0Z1ZWd0IEFua3VlbmRpZ3VuZ3MtQW56ZWlnZSBpbiBkZW4gS3VuZGVuLUhlYWRlciBlaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luamVjdHMgYW5ub3VuY2VtZW50IGJhbm5lciBvbiBsb2dpbiBwYWdlcy4nfSA9ICdGw7xndCBBbmvDvG5kaWd1bmdzLUJhbm5lciBhdWYgTG9naW4tU2VpdGVuIGVpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlIChBbm5vdW5jZW1lbnQpLid9ID0gJ0xpc3RlIGRlciBKUy1EYXRlaWVuLCBkaWUgaW1tZXIgZsO8ciBkYXMgQWdlbnRlbi1JbnRlcmZhY2UgZ2VsYWRlbiB3ZXJkZW4gKEFua8O8bmRpZ3VuZ2VuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZSAoQW5ub3VuY2VtZW50KS4nfSA9ICdMaXN0ZSBkZXIgQ1NTLURhdGVpZW4sIGRpZSBpbW1lciBmw7xyIGRhcyBBZ2VudGVuLUludGVyZmFjZSBnZWxhZGVuIHdlcmRlbiAoQW5rw7xuZGlndW5nZW4pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIEpTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgKEFubm91bmNlbWVudCkuJ30gPSAnTGlzdGUgZGVyIEpTLURhdGVpZW4sIGRpZSBpbW1lciBmw7xyIGRhcyBLdW5kZW4tSW50ZXJmYWNlIGdlbGFkZW4gd2VyZGVuIChBbmvDvG5kaWd1bmdlbikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgKEFubm91bmNlbWVudCkuJ30gPSAnTGlzdGUgZGVyIENTUy1EYXRlaWVuLCBkaWUgaW1tZXIgZsO8ciBkYXMgS3VuZGVuLUludGVyZmFjZSBnZWxhZGVuIHdlcmRlbiAoQW5rw7xuZGlndW5nZW4pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFkbWluIGFubm91bmNlbWVudCBpbnRlcmZhY2UuJ30gPSAnTG9hZGVyLU1vZHVsLVJlZ2lzdHJpZXJ1bmcgZsO8ciBkYXMgQWRtaW4tQW5rw7xuZGlndW5ncy1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fubm91bmNlbWVudCBBSkFYIEJhY2tlbmQnfSA9ICdBbmvDvG5kaWd1bmdlbiBBSkFYLUJhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5ub3VuY2VtZW50IEFKQVggQmFja2VuZCBmb3IgQ3VzdG9tZXJzJ30gPSAnQW5rw7xuZGlndW5nZW4gQUpBWC1CYWNrZW5kIGbDvHIgS3VuZGVuJzsKCiAgICByZXR1cm4gMTsKfQoKMTsK</File>

        <!-- System Module (Core) -->
        <File Permission="660" Location="Kernel/System/Announcement.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpBbm5vdW5jZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpKU09OJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpBbm5vdW5jZW1lbnQgLSBBbm5vdW5jZW1lbnQgbWFuYWdlbWVudAoKPWhlYWQxIERFU0NSSVBUSU9OCgpGdW5jdGlvbnMgdG8gbWFuYWdlIGFubm91bmNlbWVudHMgZm9yIG1haW50ZW5hbmNlIHdpbmRvd3MgYW5kIGluY2lkZW50cy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QuCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnQW5ub3VuY2VtZW50JzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNDsgICMgMjQgaG91cnMKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBBbm5vdW5jZW1lbnRBZGQoKQoKQWRkIGEgbmV3IGFubm91bmNlbWVudC4KCiAgICBteSAkQW5ub3VuY2VtZW50SUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAnUGxhbm5lZCBNYWludGVuYW5jZScsCiAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnU3lzdGVtIHdpbGwgYmUgZG93biBmb3IgbWFpbnRlbmFuY2UuLi4nLAogICAgICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ3dhcm5pbmcnLCAgICAgICAgICAgICAgIyBpbmZvLCB3YXJuaW5nLCBjcml0aWNhbAogICAgICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FsbCcsICAgICAgICAgICAgICAgICAgIyBhZ2VudCwgYWxsCiAgICAgICAgU2hvd0JlZm9yZUxvZ2luICA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIFZhbGlkRnJvbSAgICAgICAgPT4gJzIwMjUtMDEtMDEgMDY6MDA6MDAnLCAgIyBvcHRpb25hbAogICAgICAgIFZhbGlkVG8gICAgICAgICAgPT4gJzIwMjUtMDEtMDEgMDg6MDA6MDAnLCAgIyBvcHRpb25hbAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zIHRoZSBJRCBvZiB0aGUgY3JlYXRlZCBhbm5vdW5jZW1lbnQgb3IgdW5kZWYgb24gZXJyb3IuCgo9Y3V0CgpzdWIgQW5ub3VuY2VtZW50QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKICAgIG15ICREQk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIENoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgIGZvciBteSAkTmVlZGVkIChxdyhUaXRsZSBCb2R5IEFubm91bmNlbWVudFR5cGUgVGFyZ2V0QXVkaWVuY2UgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIFZhbGlkYXRlIEFubm91bmNlbWVudFR5cGUKICAgIGlmICggJFBhcmFte0Fubm91bmNlbWVudFR5cGV9ICF+IC9eKGluZm98d2FybmluZ3xjcml0aWNhbCkkLyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIEFubm91bmNlbWVudFR5cGUgJyRQYXJhbXtBbm5vdW5jZW1lbnRUeXBlfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIFZhbGlkYXRlIFRhcmdldEF1ZGllbmNlCiAgICBpZiAoICRQYXJhbXtUYXJnZXRBdWRpZW5jZX0gIX4gL14oYWdlbnR8YWxsKSQvICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgVGFyZ2V0QXVkaWVuY2UgJyRQYXJhbXtUYXJnZXRBdWRpZW5jZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBTZXQgZGVmYXVsdHMKICAgICRQYXJhbXtTaG93QmVmb3JlTG9naW59ICAvLz0gMDsKCiAgICAjIENvbnZlcnQgZW1wdHkgc3RyaW5ncyB0byB1bmRlZiAoTlVMTCkgZm9yIGRhdGV0aW1lIGZpZWxkcwogICAgJFBhcmFte1ZhbGlkRnJvbX0gPSB1bmRlZiBpZiAhJFBhcmFte1ZhbGlkRnJvbX0gfHwgJFBhcmFte1ZhbGlkRnJvbX0gZXEgJyc7CiAgICAkUGFyYW17VmFsaWRUb30gICA9IHVuZGVmIGlmICEkUGFyYW17VmFsaWRUb30gICB8fCAkUGFyYW17VmFsaWRUb30gZXEgJyc7CgogICAgIyBHZXQgY3VycmVudCB0aW1lc3RhbXAKICAgIG15ICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwogICAgbXkgJEN1cnJlbnRUaW1lICAgID0gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwoKICAgICMgSW5zZXJ0IGludG8gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBJTlNFUlQgSU5UTyBhbm5vdW5jZW1lbnQKICAgICAgICAgICAgICAgICh0aXRsZSwgYm9keSwgYW5ub3VuY2VtZW50X3R5cGUsIHRhcmdldF9hdWRpZW5jZSwgc2hvd19iZWZvcmVfbG9naW4sCiAgICAgICAgICAgICAgICAgdmFsaWRfZnJvbSwgdmFsaWRfdG8sIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpCiAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgXCRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgXCRQYXJhbXtBbm5vdW5jZW1lbnRUeXBlfSwKICAgICAgICAgICAgXCRQYXJhbXtUYXJnZXRBdWRpZW5jZX0sCiAgICAgICAgICAgIFwkUGFyYW17U2hvd0JlZm9yZUxvZ2lufSwKICAgICAgICAgICAgXCRQYXJhbXtWYWxpZEZyb219LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkVG99LAogICAgICAgICAgICBcJEN1cnJlbnRUaW1lLAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkQ3VycmVudFRpbWUsCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIEdldCB0aGUgSUQgb2YgdGhlIGluc2VydGVkIGFubm91bmNlbWVudAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIE1BWChpZCkgRlJPTSBhbm5vdW5jZW1lbnQgV0hFUkUgY3JlYXRlX2J5ID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICBteSAkQW5ub3VuY2VtZW50SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQW5ub3VuY2VtZW50SUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgQ2xlYXIgY2FjaGUKICAgICRTZWxmLT5fQ2FjaGVDbGVhbnVwKCk7CgogICAgcmV0dXJuICRBbm5vdW5jZW1lbnRJRDsKfQoKPWhlYWQyIEFubm91bmNlbWVudFVwZGF0ZSgpCgpVcGRhdGUgYW4gZXhpc3RpbmcgYW5ub3VuY2VtZW50LgoKICAgIG15ICRTdWNjZXNzID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50VXBkYXRlKAogICAgICAgIElEICAgICAgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgVGl0bGUnLAogICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgY29udGVudC4uLicsCiAgICAgICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnY3JpdGljYWwnLAogICAgICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgICAgICBTaG93QmVmb3JlTG9naW4gID0+IDEsCiAgICAgICAgVmFsaWRGcm9tICAgICAgICA9PiAnMjAyNS0wMS0wMSAwNjowMDowMCcsCiAgICAgICAgVmFsaWRUbyAgICAgICAgICA9PiAnMjAyNS0wMS0wMSAwODowMDowMCcsCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgKTsKClJldHVybnMgMSBvbiBzdWNjZXNzLCB1bmRlZiBvbiBlcnJvci4KCj1jdXQKCnN1YiBBbm5vdW5jZW1lbnRVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJERCT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgQ2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgZm9yIG15ICROZWVkZWQgKHF3KElEIFRpdGxlIEJvZHkgQW5ub3VuY2VtZW50VHlwZSBUYXJnZXRBdWRpZW5jZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBWYWxpZGF0ZSBBbm5vdW5jZW1lbnRUeXBlCiAgICBpZiAoICRQYXJhbXtBbm5vdW5jZW1lbnRUeXBlfSAhfiAvXihpbmZvfHdhcm5pbmd8Y3JpdGljYWwpJC8gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCBBbm5vdW5jZW1lbnRUeXBlICckUGFyYW17QW5ub3VuY2VtZW50VHlwZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBWYWxpZGF0ZSBUYXJnZXRBdWRpZW5jZQogICAgaWYgKCAkUGFyYW17VGFyZ2V0QXVkaWVuY2V9ICF+IC9eKGFnZW50fGFsbCkkLyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIFRhcmdldEF1ZGllbmNlICckUGFyYW17VGFyZ2V0QXVkaWVuY2V9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgU2V0IGRlZmF1bHRzCiAgICAkUGFyYW17U2hvd0JlZm9yZUxvZ2lufSAgLy89IDA7CgogICAgIyBDb252ZXJ0IGVtcHR5IHN0cmluZ3MgdG8gdW5kZWYgKE5VTEwpIGZvciBkYXRldGltZSBmaWVsZHMKICAgICRQYXJhbXtWYWxpZEZyb219ID0gdW5kZWYgaWYgISRQYXJhbXtWYWxpZEZyb219IHx8ICRQYXJhbXtWYWxpZEZyb219IGVxICcnOwogICAgJFBhcmFte1ZhbGlkVG99ICAgPSB1bmRlZiBpZiAhJFBhcmFte1ZhbGlkVG99ICAgfHwgJFBhcmFte1ZhbGlkVG99IGVxICcnOwoKICAgICMgR2V0IGN1cnJlbnQgdGltZXN0YW1wCiAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgIG15ICRDdXJyZW50VGltZSAgICA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKCiAgICAjIFVwZGF0ZSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSBhbm5vdW5jZW1lbnQKICAgICAgICAgICAgU0VUIHRpdGxlID0gPywgYm9keSA9ID8sIGFubm91bmNlbWVudF90eXBlID0gPywgdGFyZ2V0X2F1ZGllbmNlID0gPywKICAgICAgICAgICAgICAgIHNob3dfYmVmb3JlX2xvZ2luID0gPywgdmFsaWRfZnJvbSA9ID8sIHZhbGlkX3RvID0gPywKICAgICAgICAgICAgICAgIGNoYW5nZV90aW1lID0gPywgY2hhbmdlX2J5ID0gPwogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgXCRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgXCRQYXJhbXtBbm5vdW5jZW1lbnRUeXBlfSwKICAgICAgICAgICAgXCRQYXJhbXtUYXJnZXRBdWRpZW5jZX0sCiAgICAgICAgICAgIFwkUGFyYW17U2hvd0JlZm9yZUxvZ2lufSwKICAgICAgICAgICAgXCRQYXJhbXtWYWxpZEZyb219LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkVG99LAogICAgICAgICAgICBcJEN1cnJlbnRUaW1lLAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17SUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgQ2xlYXIgY2FjaGUKICAgICRTZWxmLT5fQ2FjaGVDbGVhbnVwKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBBbm5vdW5jZW1lbnREZWxldGUoKQoKRGVsZXRlIGFuIGFubm91bmNlbWVudC4KCiAgICBteSAkU3VjY2VzcyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnMgMSBvbiBzdWNjZXNzLCB1bmRlZiBvbiBlcnJvci4KCj1jdXQKCnN1YiBBbm5vdW5jZW1lbnREZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJERCT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgQ2hlY2sgcmVxdWlyZWQgcGFyYW1ldGVycwogICAgZm9yIG15ICROZWVkZWQgKHF3KElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBEZWxldGUgZnJvbSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGFubm91bmNlbWVudCBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0lEfSBdLAogICAgKTsKCiAgICAjIENsZWFyIGNhY2hlCiAgICAkU2VsZi0+X0NhY2hlQ2xlYW51cCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQW5ub3VuY2VtZW50R2V0KCkKCkdldCBhIHNpbmdsZSBhbm5vdW5jZW1lbnQgYnkgSUQuCgogICAgbXkgJUFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCgKICAgICAgICBJRCA9PiAxMjMsCiAgICApOwoKUmV0dXJucyBhIGhhc2ggd2l0aCBhbm5vdW5jZW1lbnQgZGF0YSBvciBlbXB0eSBoYXNoIG9uIGVycm9yLgoKPWN1dAoKc3ViIEFubm91bmNlbWVudEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKICAgIG15ICREQk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgaWYgKCAhJFBhcmFte0lEfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIElEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBDaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0Fubm91bmNlbWVudEdldDo6JyAuICRQYXJhbXtJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIFF1ZXJ5IGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgaWQsIHRpdGxlLCBib2R5LCBhbm5vdW5jZW1lbnRfdHlwZSwgdGFyZ2V0X2F1ZGllbmNlLAogICAgICAgICAgICAgICAgICAgc2hvd19iZWZvcmVfbG9naW4sIHZhbGlkX2Zyb20sIHZhbGlkX3RvLAogICAgICAgICAgICAgICAgICAgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieQogICAgICAgICAgICBGUk9NIGFubm91bmNlbWVudAogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAlQW5ub3VuY2VtZW50OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJUFubm91bmNlbWVudCA9ICgKICAgICAgICAgICAgSUQgICAgICAgICAgICAgICA9PiAkUm93WzBdLAogICAgICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgQW5ub3VuY2VtZW50VHlwZSA9PiAkUm93WzNdLAogICAgICAgICAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICRSb3dbNF0sCiAgICAgICAgICAgIFNob3dCZWZvcmVMb2dpbiAgPT4gJFJvd1s1XSwKICAgICAgICAgICAgVmFsaWRGcm9tICAgICAgICA9PiAkUm93WzZdLAogICAgICAgICAgICBWYWxpZFRvICAgICAgICAgID0+ICRSb3dbN10sCiAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgPT4gJFJvd1s4XSwKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAkUm93WzldLAogICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgID0+ICRSb3dbMTBdLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRSb3dbMTFdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIGlmICElQW5ub3VuY2VtZW50OwoKICAgICMgU3RvcmUgaW4gY2FjaGUKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVBbm5vdW5jZW1lbnQsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiAlQW5ub3VuY2VtZW50Owp9Cgo9aGVhZDIgQW5ub3VuY2VtZW50TGlzdCgpCgpHZXQgYSBsaXN0IG9mIGFubm91bmNlbWVudHMgd2l0aCBvcHRpb25hbCBmaWx0ZXJzLgoKICAgIG15IEBBbm5vdW5jZW1lbnRMaXN0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50TGlzdCgKICAgICAgICBGaWx0ZXIgPT4gJ2FjdGl2ZScsICAgICMgb3B0aW9uYWw6IGFjdGl2ZSwgc2NoZWR1bGVkLCBleHBpcmVkLCBhbGwgKGRlZmF1bHQ6IGFsbCkKICAgICAgICBMaW1pdCAgPT4gMTAwLCAgICAgICAgICMgb3B0aW9uYWw6IGxpbWl0IHJlc3VsdHMKICAgICk7CgpSZXR1cm5zIGFuIGFycmF5IG9mIGhhc2hlcyB3aXRoIGFubm91bmNlbWVudCBkYXRhLgoKPWN1dAoKc3ViIEFubm91bmNlbWVudExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRGaWx0ZXIgPSAkUGFyYW17RmlsdGVyfSB8fCAnYWxsJzsKICAgIG15ICRMaW1pdCAgPSAkUGFyYW17TGltaXR9ICB8fCAxMDAwOwoKICAgICMgQ2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdBbm5vdW5jZW1lbnRMaXN0OjonIC4gJEZpbHRlciAuICc6OicgLiAkTGltaXQ7CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIEdldCBjdXJyZW50IHRpbWVzdGFtcAogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICBteSAkQ3VycmVudFRpbWUgICAgPSAkRGF0ZVRpbWVPYmplY3QtPlRvU3RyaW5nKCk7CgogICAgIyBCdWlsZCBTUUwgYmFzZWQgb24gZmlsdGVyCiAgICBteSAkU1FMID0gJwogICAgICAgIFNFTEVDVCBpZCwgdGl0bGUsIGJvZHksIGFubm91bmNlbWVudF90eXBlLCB0YXJnZXRfYXVkaWVuY2UsCiAgICAgICAgICAgICAgIHNob3dfYmVmb3JlX2xvZ2luLCB2YWxpZF9mcm9tLCB2YWxpZF90bywKICAgICAgICAgICAgICAgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieQogICAgICAgIEZST00gYW5ub3VuY2VtZW50JzsKCiAgICBteSBAQmluZDsKCiAgICBpZiAoICRGaWx0ZXIgZXEgJ2FjdGl2ZScgKSB7CiAgICAgICAgJFNRTCAuPSAnCiAgICAgICAgICAgIFdIRVJFICh2YWxpZF9mcm9tIElTIE5VTEwgT1IgdmFsaWRfZnJvbSA8PSA/KQogICAgICAgICAgICBBTkQgKHZhbGlkX3RvIElTIE5VTEwgT1IgdmFsaWRfdG8gPj0gPyknOwogICAgICAgIHB1c2ggQEJpbmQsIFwkQ3VycmVudFRpbWUsIFwkQ3VycmVudFRpbWU7CiAgICB9CiAgICBlbHNpZiAoICRGaWx0ZXIgZXEgJ3NjaGVkdWxlZCcgKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2Zyb20gPiA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJEN1cnJlbnRUaW1lOwogICAgfQogICAgZWxzaWYgKCAkRmlsdGVyIGVxICdleHBpcmVkJyApIHsKICAgICAgICAkU1FMIC49ICcgV0hFUkUgdmFsaWRfdG8gPCA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJEN1cnJlbnRUaW1lOwogICAgfQoKICAgICMgT3JkZXIgYnkgdHlwZSBwcmlvcml0eSAoY3JpdGljYWwgPiB3YXJuaW5nID4gaW5mbyksIHRoZW4gYnkgY3JlYXRlX3RpbWUgZGVzYwogICAgJFNRTCAuPSAnCiAgICAgICAgT1JERVIgQlkgQ0FTRSBhbm5vdW5jZW1lbnRfdHlwZQogICAgICAgICAgICAgICAgICAgICBXSEVOIFwnY3JpdGljYWxcJyBUSEVOIDEKICAgICAgICAgICAgICAgICAgICAgV0hFTiBcJ3dhcm5pbmdcJyBUSEVOIDIKICAgICAgICAgICAgICAgICAgICAgV0hFTiBcJ2luZm9cJyBUSEVOIDMKICAgICAgICAgICAgICAgICAgICAgRUxTRSA0CiAgICAgICAgICAgICAgICAgRU5ELAogICAgICAgICAgICAgICAgIGNyZWF0ZV90aW1lIERFU0MnOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBCaW5kLAogICAgICAgIExpbWl0ID0+ICRMaW1pdCwKICAgICk7CgogICAgbXkgQEFubm91bmNlbWVudExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBBbm5vdW5jZW1lbnRMaXN0LCB7CiAgICAgICAgICAgIElEICAgICAgICAgICAgICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIEFubm91bmNlbWVudFR5cGUgPT4gJFJvd1szXSwKICAgICAgICAgICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAkUm93WzRdLAogICAgICAgICAgICBTaG93QmVmb3JlTG9naW4gID0+ICRSb3dbNV0sCiAgICAgICAgICAgIFZhbGlkRnJvbSAgICAgICAgPT4gJFJvd1s2XSwKICAgICAgICAgICAgVmFsaWRUbyAgICAgICAgICA9PiAkUm93WzddLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgID0+ICRSb3dbOF0sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFJvd1s5XSwKICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICA9PiAkUm93WzEwXSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAkUm93WzExXSwKICAgICAgICB9OwogICAgfQoKICAgICMgU3RvcmUgaW4gY2FjaGUKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBBbm5vdW5jZW1lbnRMaXN0LAogICAgICAgIFRUTCAgID0+IDMwMCwgICMgNSBtaW51dGVzIGZvciBsaXN0IGNhY2hlCiAgICApOwoKICAgIHJldHVybiBAQW5ub3VuY2VtZW50TGlzdDsKfQoKPWhlYWQyIEdldEFjdGl2ZUFubm91bmNlbWVudHMoKQoKR2V0IGN1cnJlbnRseSBhY3RpdmUgYW5ub3VuY2VtZW50cyBmb3IgYSBzcGVjaWZpYyBhdWRpZW5jZS4KCiAgICBteSBAQW5ub3VuY2VtZW50cyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkdldEFjdGl2ZUFubm91bmNlbWVudHMoCiAgICAgICAgQXVkaWVuY2UgPT4gJ2FnZW50JywgICMgYWdlbnQgb3IgY3VzdG9tZXIKICAgICk7CgpSZXR1cm5zIGFuIGFycmF5IG9mIGhhc2hlcyB3aXRoIGFubm91bmNlbWVudCBkYXRhLgoKPWN1dAoKc3ViIEdldEFjdGl2ZUFubm91bmNlbWVudHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTG9nT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CiAgICBteSAkREJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRBdWRpZW5jZSA9ICRQYXJhbXtBdWRpZW5jZX0gfHwgJ2FnZW50JzsKCiAgICAjIENoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnR2V0QWN0aXZlQW5ub3VuY2VtZW50czo6JyAuICRBdWRpZW5jZTsKICAgIG15ICRDYWNoZSAgICA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiBAeyRDYWNoZX0gaWYgJENhY2hlOwoKICAgICMgR2V0IGN1cnJlbnQgdGltZXN0YW1wCiAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgIG15ICRDdXJyZW50VGltZSAgICA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKCiAgICAjIEJ1aWxkIGF1ZGllbmNlIGZpbHRlcgogICAgbXkgJEF1ZGllbmNlU1FMOwogICAgaWYgKCAkQXVkaWVuY2UgZXEgJ2N1c3RvbWVyJyApIHsKICAgICAgICAjIEN1c3RvbWVycyBvbmx5IHNlZSBhbm5vdW5jZW1lbnRzIHRhcmdldGVkIHRvICdhbGwnCiAgICAgICAgJEF1ZGllbmNlU1FMID0gIkFORCB0YXJnZXRfYXVkaWVuY2UgPSAnYWxsJyI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIEFnZW50cyBzZWUgYWxsIGFubm91bmNlbWVudHMgKGJvdGggJ2FnZW50JyBhbmQgJ2FsbCcpCiAgICAgICAgJEF1ZGllbmNlU1FMID0gJyc7CiAgICB9CgogICAgIyBHZXQgYWxsIGFjdGl2ZSBhbm5vdW5jZW1lbnRzIChpbmNsdWRpbmcgdGhvc2Ugd2l0aCBzaG93X2JlZm9yZV9sb2dpbj0xKQogICAgIyBUaGUgc2hvd19iZWZvcmVfbG9naW4gZmxhZyBvbmx5IGNvbnRyb2xzIGRpc3BsYXkgb24gdGhlIGxvZ2luIHBhZ2UsCiAgICAjIGFmdGVyIGxvZ2luIHRoZXNlIGFubm91bmNlbWVudHMgYXJlIHNob3duIGxpa2UgYW55IG90aGVyCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIgogICAgICAgICAgICBTRUxFQ1QgaWQsIHRpdGxlLCBib2R5LCBhbm5vdW5jZW1lbnRfdHlwZSwgdGFyZ2V0X2F1ZGllbmNlLAogICAgICAgICAgICAgICAgICAgc2hvd19iZWZvcmVfbG9naW4sIHZhbGlkX2Zyb20sIHZhbGlkX3RvLCBjcmVhdGVfdGltZQogICAgICAgICAgICBGUk9NIGFubm91bmNlbWVudAogICAgICAgICAgICBXSEVSRSAodmFsaWRfZnJvbSBJUyBOVUxMIE9SIHZhbGlkX2Zyb20gPD0gPykKICAgICAgICAgICAgQU5EICh2YWxpZF90byBJUyBOVUxMIE9SIHZhbGlkX3RvID49ID8pCiAgICAgICAgICAgICRBdWRpZW5jZVNRTAogICAgICAgICAgICBPUkRFUiBCWSBDQVNFIGFubm91bmNlbWVudF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBXSEVOICdjcml0aWNhbCcgVEhFTiAxCiAgICAgICAgICAgICAgICAgICAgICAgICBXSEVOICd3YXJuaW5nJyBUSEVOIDIKICAgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gJ2luZm8nIFRIRU4gMwogICAgICAgICAgICAgICAgICAgICAgICAgRUxTRSA0CiAgICAgICAgICAgICAgICAgICAgIEVORCwKICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX3RpbWUgREVTQyIsCiAgICAgICAgQmluZCA9PiBbIFwkQ3VycmVudFRpbWUsIFwkQ3VycmVudFRpbWUgXSwKICAgICk7CgogICAgbXkgQEFubm91bmNlbWVudHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBBbm5vdW5jZW1lbnRzLCB7CiAgICAgICAgICAgIElEICAgICAgICAgICAgICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIEFubm91bmNlbWVudFR5cGUgPT4gJFJvd1szXSwKICAgICAgICAgICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAkUm93WzRdLAogICAgICAgICAgICBTaG93QmVmb3JlTG9naW4gID0+ICRSb3dbNV0sCiAgICAgICAgICAgIFZhbGlkRnJvbSAgICAgICAgPT4gJFJvd1s2XSwKICAgICAgICAgICAgVmFsaWRUbyAgICAgICAgICA9PiAkUm93WzddLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgID0+ICRSb3dbOF0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIFN0b3JlIGluIGNhY2hlIChzaG9ydCBUVEwgZm9yIGFjdGl2ZSBhbm5vdW5jZW1lbnRzKQogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQEFubm91bmNlbWVudHMsCiAgICAgICAgVFRMICAgPT4gNjAsICAjIDEgbWludXRlCiAgICApOwoKICAgIHJldHVybiBAQW5ub3VuY2VtZW50czsKfQoKPWhlYWQyIEdldExvZ2luQW5ub3VuY2VtZW50cygpCgpHZXQgYW5ub3VuY2VtZW50cyB0aGF0IHNob3VsZCBiZSBzaG93biBvbiBsb2dpbiBwYWdlcy4KCiAgICBteSBAQW5ub3VuY2VtZW50cyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkdldExvZ2luQW5ub3VuY2VtZW50cygKICAgICAgICBJbnRlcmZhY2UgPT4gJ2FnZW50JywgICMgYWdlbnQgb3IgY3VzdG9tZXIKICAgICk7CgpSZXR1cm5zIGFuIGFycmF5IG9mIGhhc2hlcyB3aXRoIGFubm91bmNlbWVudCBkYXRhLgoKPWN1dAoKc3ViIEdldExvZ2luQW5ub3VuY2VtZW50cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREQk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgbXkgJEludGVyZmFjZSA9ICRQYXJhbXtJbnRlcmZhY2V9IHx8ICdhZ2VudCc7CgogICAgIyBDaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldExvZ2luQW5ub3VuY2VtZW50czo6JyAuICRJbnRlcmZhY2U7CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIEdldCBjdXJyZW50IHRpbWVzdGFtcAogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICBteSAkQ3VycmVudFRpbWUgICAgPSAkRGF0ZVRpbWVPYmplY3QtPlRvU3RyaW5nKCk7CgogICAgIyBCdWlsZCBhdWRpZW5jZSBmaWx0ZXIKICAgIG15ICRBdWRpZW5jZVNRTDsKICAgIGlmICggJEludGVyZmFjZSBlcSAnY3VzdG9tZXInICkgewogICAgICAgICRBdWRpZW5jZVNRTCA9ICJBTkQgdGFyZ2V0X2F1ZGllbmNlID0gJ2FsbCciOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEF1ZGllbmNlU1FMID0gJyc7CiAgICB9CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgU0VMRUNUIGlkLCB0aXRsZSwgYm9keSwgYW5ub3VuY2VtZW50X3R5cGUsIHZhbGlkX2Zyb20sIHZhbGlkX3RvCiAgICAgICAgICAgIEZST00gYW5ub3VuY2VtZW50CiAgICAgICAgICAgIFdIRVJFIHNob3dfYmVmb3JlX2xvZ2luID0gMQogICAgICAgICAgICBBTkQgKHZhbGlkX2Zyb20gSVMgTlVMTCBPUiB2YWxpZF9mcm9tIDw9ID8pCiAgICAgICAgICAgIEFORCAodmFsaWRfdG8gSVMgTlVMTCBPUiB2YWxpZF90byA+PSA/KQogICAgICAgICAgICAkQXVkaWVuY2VTUUwKICAgICAgICAgICAgT1JERVIgQlkgQ0FTRSBhbm5vdW5jZW1lbnRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAnY3JpdGljYWwnIFRIRU4gMQogICAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAnd2FybmluZycgVEhFTiAyCiAgICAgICAgICAgICAgICAgICAgICAgICBXSEVOICdpbmZvJyBUSEVOIDMKICAgICAgICAgICAgICAgICAgICAgICAgIEVMU0UgNAogICAgICAgICAgICAgICAgICAgICBFTkQsCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV90aW1lIERFU0MiLAogICAgICAgIEJpbmQgPT4gWyBcJEN1cnJlbnRUaW1lLCBcJEN1cnJlbnRUaW1lIF0sCiAgICApOwoKICAgIG15IEBBbm5vdW5jZW1lbnRzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQW5ub3VuY2VtZW50cywgewogICAgICAgICAgICBJRCAgICAgICAgICAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICRSb3dbM10sCiAgICAgICAgICAgIFZhbGlkRnJvbSAgICAgICAgPT4gJFJvd1s0XSwKICAgICAgICAgICAgVmFsaWRUbyAgICAgICAgICA9PiAkUm93WzVdLAogICAgICAgIH07CiAgICB9CgogICAgIyBTdG9yZSBpbiBjYWNoZQogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQEFubm91bmNlbWVudHMsCiAgICAgICAgVFRMICAgPT4gNjAsICAjIDEgbWludXRlCiAgICApOwoKICAgIHJldHVybiBAQW5ub3VuY2VtZW50czsKfQoKPWhlYWQyIF9DYWNoZUNsZWFudXAoKQoKQ2xlYXIgYWxsIGFubm91bmNlbWVudCBjYWNoZXMuCgo9Y3V0CgpzdWIgX0NhY2hlQ2xlYW51cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgoKPWN1dAo=</File>

        <!-- Frontend Modules -->
        <File Permission="660" Location="Kernel/Modules/AgentAnnouncement.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRBbm5vdW5jZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRBbm5vdW5jZW1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50Jyk7CgogICAgIyBDaGVjayB3cml0ZSBwZXJtaXNzaW9uIChSVyBpbiBjb25maWd1cmVkIGdyb3VwIGZyb20gRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50QW5ub3VuY2VtZW50KQogICAgbXkgJEhhc1dyaXRlUGVybWlzc2lvbiA9ICRTZWxmLT57QWNjZXNzUnd9ID8gMSA6IDA7CgogICAgIyBHZXQgc3ViYWN0aW9uCiAgICBteSAkU3ViYWN0aW9uID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnJzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEFkZCBvciBFZGl0IGFjdGlvbiAtIHNob3cgZm9ybQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU3ViYWN0aW9uIGVxICdBZGQnIHx8ICRTdWJhY3Rpb24gZXEgJ0VkaXQnICkgewoKICAgICAgICAjIENoZWNrIHdyaXRlIHBlcm1pc3Npb24gZm9yIEFkZC9FZGl0CiAgICAgICAgaWYgKCAhJEhhc1dyaXRlUGVybWlzc2lvbiApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIFJXIHBlcm1pc3Npb24gaW4gdGhlIEFubm91bmNlbWVudE1hbmFnZXIgZ3JvdXAgdG8gY3JlYXRlIG9yIGVkaXQgYW5ub3VuY2VtZW50cy4nLAogICAgICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICVBbm5vdW5jZW1lbnQ7CiAgICAgICAgbXkgJEFubm91bmNlbWVudElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApOwoKICAgICAgICBpZiAoICRTdWJhY3Rpb24gZXEgJ0VkaXQnICYmICRBbm5vdW5jZW1lbnRJRCApIHsKICAgICAgICAgICAgJUFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9TaG93Rm9ybSgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlQW5ub3VuY2VtZW50LAogICAgICAgICAgICBTdWJhY3Rpb24gPT4gJFN1YmFjdGlvbiwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgQWRkQWN0aW9uIC0gc2F2ZSBuZXcgYW5ub3VuY2VtZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ0FkZEFjdGlvbicgKSB7CgogICAgICAgICMgQ2hlY2sgd3JpdGUgcGVybWlzc2lvbgogICAgICAgIGlmICggISRIYXNXcml0ZVBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBSVyBwZXJtaXNzaW9uIGluIHRoZSBBbm5vdW5jZW1lbnRNYW5hZ2VyIGdyb3VwIHRvIGNyZWF0ZSBhbm5vdW5jZW1lbnRzLicsCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGFsbGVuZ2UgdG9rZW4gY2hlY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICVHZXRQYXJhbSA9ICRTZWxmLT5fR2V0UGFyYW1zKCk7CgogICAgICAgICMgVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzCiAgICAgICAgbXkgQEVycm9yczsKICAgICAgICBpZiAoICEkR2V0UGFyYW17VGl0bGV9ICkgewogICAgICAgICAgICBwdXNoIEBFcnJvcnMsICdUaXRsZUludmFsaWQnOwogICAgICAgIH0KICAgICAgICBpZiAoICEkR2V0UGFyYW17Qm9keX0gKSB7CiAgICAgICAgICAgIHB1c2ggQEVycm9ycywgJ0JvZHlJbnZhbGlkJzsKICAgICAgICB9CgogICAgICAgICMgVmFsaWRhdGUgZGF0ZSByYW5nZTogVmFsaWRUbyBtdXN0IGJlIGFmdGVyIFZhbGlkRnJvbQogICAgICAgIGlmICggJEdldFBhcmFte1ZhbGlkRnJvbX0gJiYgJEdldFBhcmFte1ZhbGlkVG99ICkgewogICAgICAgICAgICBteSAkVmFsaWRGcm9tT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRHZXRQYXJhbXtWYWxpZEZyb219IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRWYWxpZFRvT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRHZXRQYXJhbXtWYWxpZFRvfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkVmFsaWRGcm9tT2JqZWN0ICYmICRWYWxpZFRvT2JqZWN0ICkgewogICAgICAgICAgICAgICAgbXkgJENvbXBhcmUgPSAkVmFsaWRGcm9tT2JqZWN0LT5Db21wYXJlKCBEYXRlVGltZU9iamVjdCA9PiAkVmFsaWRUb09iamVjdCApOwogICAgICAgICAgICAgICAgIyBDb21wYXJlIHJldHVybnMgMSBpZiBWYWxpZEZyb20gPiBWYWxpZFRvLCAwIGlmIGVxdWFsLCAtMSBpZiBWYWxpZEZyb20gPCBWYWxpZFRvCiAgICAgICAgICAgICAgICBpZiAoICRDb21wYXJlID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARXJyb3JzLCAnVmFsaWRUb0ludmFsaWQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFNob3cgZm9ybSB3aXRoIGVycm9ycwogICAgICAgIGlmIChARXJyb3JzKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dGb3JtKAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgU3ViYWN0aW9uID0+ICdBZGQnLAogICAgICAgICAgICAgICAgRXJyb3JzICAgID0+IFxARXJyb3JzLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDcmVhdGUgYW5ub3VuY2VtZW50CiAgICAgICAgbXkgJEFubm91bmNlbWVudElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJEFubm91bmNlbWVudElEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdDb3VsZCBub3QgY3JlYXRlIGFubm91bmNlbWVudCEnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBSZWRpcmVjdCB0byBvdmVydmlldwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gJ0FjdGlvbj1BZ2VudEFubm91bmNlbWVudCcgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEVkaXRBY3Rpb24gLSB1cGRhdGUgZXhpc3RpbmcgYW5ub3VuY2VtZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ0VkaXRBY3Rpb24nICkgewoKICAgICAgICAjIENoZWNrIHdyaXRlIHBlcm1pc3Npb24KICAgICAgICBpZiAoICEkSGFzV3JpdGVQZXJtaXNzaW9uICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgUlcgcGVybWlzc2lvbiBpbiB0aGUgQW5ub3VuY2VtZW50TWFuYWdlciBncm91cCB0byBlZGl0IGFubm91bmNlbWVudHMuJywKICAgICAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIENoYWxsZW5nZSB0b2tlbiBjaGVjawogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUdldFBhcmFtID0gJFNlbGYtPl9HZXRQYXJhbXMoKTsKICAgICAgICBteSAkQW5ub3VuY2VtZW50SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgICMgVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzCiAgICAgICAgbXkgQEVycm9yczsKICAgICAgICBpZiAoICEkR2V0UGFyYW17VGl0bGV9ICkgewogICAgICAgICAgICBwdXNoIEBFcnJvcnMsICdUaXRsZUludmFsaWQnOwogICAgICAgIH0KICAgICAgICBpZiAoICEkR2V0UGFyYW17Qm9keX0gKSB7CiAgICAgICAgICAgIHB1c2ggQEVycm9ycywgJ0JvZHlJbnZhbGlkJzsKICAgICAgICB9CgogICAgICAgICMgVmFsaWRhdGUgZGF0ZSByYW5nZTogVmFsaWRUbyBtdXN0IGJlIGFmdGVyIFZhbGlkRnJvbQogICAgICAgIGlmICggJEdldFBhcmFte1ZhbGlkRnJvbX0gJiYgJEdldFBhcmFte1ZhbGlkVG99ICkgewogICAgICAgICAgICBteSAkVmFsaWRGcm9tT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRHZXRQYXJhbXtWYWxpZEZyb219IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRWYWxpZFRvT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRHZXRQYXJhbXtWYWxpZFRvfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkVmFsaWRGcm9tT2JqZWN0ICYmICRWYWxpZFRvT2JqZWN0ICkgewogICAgICAgICAgICAgICAgbXkgJENvbXBhcmUgPSAkVmFsaWRGcm9tT2JqZWN0LT5Db21wYXJlKCBEYXRlVGltZU9iamVjdCA9PiAkVmFsaWRUb09iamVjdCApOwogICAgICAgICAgICAgICAgIyBDb21wYXJlIHJldHVybnMgMSBpZiBWYWxpZEZyb20gPiBWYWxpZFRvLCAwIGlmIGVxdWFsLCAtMSBpZiBWYWxpZEZyb20gPCBWYWxpZFRvCiAgICAgICAgICAgICAgICBpZiAoICRDb21wYXJlID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARXJyb3JzLCAnVmFsaWRUb0ludmFsaWQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFNob3cgZm9ybSB3aXRoIGVycm9ycwogICAgICAgIGlmIChARXJyb3JzKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dGb3JtKAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgSUQgICAgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgICAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAnRWRpdCcsCiAgICAgICAgICAgICAgICBFcnJvcnMgICAgPT4gXEBFcnJvcnMsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIFVwZGF0ZSBhbm5vdW5jZW1lbnQKICAgICAgICBteSAkU3VjY2VzcyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudFVwZGF0ZSgKICAgICAgICAgICAgSUQgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdDb3VsZCBub3QgdXBkYXRlIGFubm91bmNlbWVudCEnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBpZiBTdWJtaXRBbmRDbG9zZSB3YXMgY2xpY2tlZAogICAgICAgIG15ICRTdWJtaXRBbmRDbG9zZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXRBbmRDbG9zZScgKTsKCiAgICAgICAgaWYgKCAkU3VibWl0QW5kQ2xvc2UgKSB7CiAgICAgICAgICAgICMgUmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAnQWN0aW9uPUFnZW50QW5ub3VuY2VtZW50JyApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBTdGF5IGluIGZvcm0KICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudEFubm91bmNlbWVudDtTdWJhY3Rpb249RWRpdDtJRD0kQW5ub3VuY2VtZW50SUQiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgRGVsZXRlIGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICdEZWxldGUnICkgewoKICAgICAgICAjIENoZWNrIHdyaXRlIHBlcm1pc3Npb24KICAgICAgICBpZiAoICEkSGFzV3JpdGVQZXJtaXNzaW9uICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAnWW91IG5lZWQgUlcgcGVybWlzc2lvbiBpbiB0aGUgQW5ub3VuY2VtZW50TWFuYWdlciBncm91cCB0byBkZWxldGUgYW5ub3VuY2VtZW50cy4nLAogICAgICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQ2hhbGxlbmdlIHRva2VuIGNoZWNrCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkQW5ub3VuY2VtZW50SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgIGlmICgkQW5ub3VuY2VtZW50SUQpIHsKICAgICAgICAgICAgJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50RGVsZXRlKAogICAgICAgICAgICAgICAgSUQgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIFJlZGlyZWN0IHRvIG92ZXJ2aWV3CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAnQWN0aW9uPUFnZW50QW5ub3VuY2VtZW50JyApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgU2V0T2ZmbGluZSBhY3Rpb24gLSBzZXQgVmFsaWRUbyB0byBub3cgLSAxIG1pbnV0ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICdTZXRPZmZsaW5lJyApIHsKCiAgICAgICAgIyBDaGVjayB3cml0ZSBwZXJtaXNzaW9uCiAgICAgICAgaWYgKCAhJEhhc1dyaXRlUGVybWlzc2lvbiApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJ1lvdSBuZWVkIFJXIHBlcm1pc3Npb24gaW4gdGhlIEFubm91bmNlbWVudE1hbmFnZXIgZ3JvdXAgdG8gc2V0IGFubm91bmNlbWVudHMgb2ZmbGluZS4nLAogICAgICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQ2hhbGxlbmdlIHRva2VuIGNoZWNrCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkQW5ub3VuY2VtZW50SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgIGlmICgkQW5ub3VuY2VtZW50SUQpIHsKICAgICAgICAgICAgbXkgJUFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CgogICAgICAgICAgICBpZiAoJUFubm91bmNlbWVudCkgewogICAgICAgICAgICAgICAgIyBHZXQgY3VycmVudCB0aW1lIG1pbnVzIDEgbWludXRlCiAgICAgICAgICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+U3VidHJhY3QoIE1pbnV0ZXMgPT4gMSApOwogICAgICAgICAgICAgICAgbXkgJE9mZmxpbmVUaW1lID0gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwoKICAgICAgICAgICAgICAgICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudFVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJEFubm91bmNlbWVudHtCb2R5fSwKICAgICAgICAgICAgICAgICAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICRBbm5vdW5jZW1lbnR7QW5ub3VuY2VtZW50VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAkQW5ub3VuY2VtZW50e1RhcmdldEF1ZGllbmNlfSwKICAgICAgICAgICAgICAgICAgICBWYWxpZEZyb20gICAgICAgID0+ICRBbm5vdW5jZW1lbnR7VmFsaWRGcm9tfSwKICAgICAgICAgICAgICAgICAgICBWYWxpZFRvICAgICAgICAgID0+ICRPZmZsaW5lVGltZSwKICAgICAgICAgICAgICAgICAgICBTaG93QmVmb3JlTG9naW4gID0+ICRBbm5vdW5jZW1lbnR7U2hvd0JlZm9yZUxvZ2lufSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgUmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICdBY3Rpb249QWdlbnRBbm5vdW5jZW1lbnQnICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBEdXBsaWNhdGUgYWN0aW9uIC0gY29weSBhbiBhbm5vdW5jZW1lbnQsIGxhbmQgb24gaXRzIEVkaXQgc2NyZWVuCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ0R1cGxpY2F0ZScgKSB7CgogICAgICAgICMgQ2hlY2sgd3JpdGUgcGVybWlzc2lvbgogICAgICAgIGlmICggISRIYXNXcml0ZVBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgID0+ICdZb3UgbmVlZCBSVyBwZXJtaXNzaW9uIGluIHRoZSBBbm5vdW5jZW1lbnRNYW5hZ2VyIGdyb3VwIHRvIGR1cGxpY2F0ZSBhbm5vdW5jZW1lbnRzLicsCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGFsbGVuZ2UgdG9rZW4gY2hlY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICRBbm5vdW5jZW1lbnRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKCiAgICAgICAgbXkgJE5ld0Fubm91bmNlbWVudElEOwogICAgICAgIGlmICgkQW5ub3VuY2VtZW50SUQpIHsKICAgICAgICAgICAgbXkgJUFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CgogICAgICAgICAgICBpZiAoJUFubm91bmNlbWVudCkgewogICAgICAgICAgICAgICAgJE5ld0Fubm91bmNlbWVudElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gIkNvcHkgb2YgJEFubm91bmNlbWVudHtUaXRsZX0iLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJEFubm91bmNlbWVudHtCb2R5fSwKICAgICAgICAgICAgICAgICAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICRBbm5vdW5jZW1lbnR7QW5ub3VuY2VtZW50VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAkQW5ub3VuY2VtZW50e1RhcmdldEF1ZGllbmNlfSwKICAgICAgICAgICAgICAgICAgICBWYWxpZEZyb20gICAgICAgID0+ICRBbm5vdW5jZW1lbnR7VmFsaWRGcm9tfSwKICAgICAgICAgICAgICAgICAgICBWYWxpZFRvICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnR7VmFsaWRUb30sCiAgICAgICAgICAgICAgICAgICAgU2hvd0JlZm9yZUxvZ2luICA9PiAkQW5ub3VuY2VtZW50e1Nob3dCZWZvcmVMb2dpbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIExhbmQgb24gdGhlIG5ldyBjb3B5J3MgRWRpdCBzY3JlZW4gc28gdGhlIHRpdGxlL2RhdGVzIGNhbiBiZQogICAgICAgICMgYWRqdXN0ZWQgcmlnaHQgYXdheSwgc2FtZSBhcyB0aGUgQ2hlY2tsaXN0IGFkZC1vbidzIER1cGxpY2F0ZS4KICAgICAgICBpZiAoJE5ld0Fubm91bmNlbWVudElEKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRBbm5vdW5jZW1lbnQ7U3ViYWN0aW9uPUVkaXQ7SUQ9JE5ld0Fubm91bmNlbWVudElEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gJ0FjdGlvbj1BZ2VudEFubm91bmNlbWVudCcgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIE92ZXJ2aWV3IC0gbGlzdCBhbGwgYW5ub3VuY2VtZW50cwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd092ZXJ2aWV3KAogICAgICAgICAgICBIYXNXcml0ZVBlcm1pc3Npb24gPT4gJEhhc1dyaXRlUGVybWlzc2lvbiwKICAgICAgICApOwogICAgfQp9CgpzdWIgX1Nob3dPdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJEFubm91bmNlbWVudE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBbm5vdW5jZW1lbnQnKTsKICAgIG15ICRVc2VyT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgR2V0IGZpbHRlciBwYXJhbWV0ZXIKICAgIG15ICRGaWx0ZXIgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsdGVyJyApIHx8ICdhbGwnOwoKICAgICMgR2V0IGFubm91bmNlbWVudHMKICAgIG15IEBBbm5vdW5jZW1lbnRMaXN0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50TGlzdCggRmlsdGVyID0+ICRGaWx0ZXIgKTsKCiAgICAjIEJ1aWxkIHRhYmxlIHJvd3MKICAgIGZvciBteSAkQW5ub3VuY2VtZW50IChAQW5ub3VuY2VtZW50TGlzdCkgewoKICAgICAgICAjIEdldCBjcmVhdG9yIG5hbWUKICAgICAgICBteSAlQ3JlYXRvciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRBbm5vdW5jZW1lbnQtPntDcmVhdGVCeX0sCiAgICAgICAgKTsKICAgICAgICAkQW5ub3VuY2VtZW50LT57Q3JlYXRvck5hbWV9ID0gJENyZWF0b3J7VXNlckZ1bGxuYW1lfSB8fCAkQ3JlYXRvcntVc2VyTG9naW59IHx8ICctJzsKCiAgICAgICAgIyBEZXRlcm1pbmUgc3RhdHVzIGNsYXNzIGJhc2VkIG9uIHR5cGUKICAgICAgICBteSAkVHlwZUNsYXNzID0gJ2luZm8nOwogICAgICAgIGlmICggJEFubm91bmNlbWVudC0+e0Fubm91bmNlbWVudFR5cGV9IGVxICd3YXJuaW5nJyApIHsKICAgICAgICAgICAgJFR5cGVDbGFzcyA9ICd3YXJuaW5nJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkQW5ub3VuY2VtZW50LT57QW5ub3VuY2VtZW50VHlwZX0gZXEgJ2NyaXRpY2FsJyApIHsKICAgICAgICAgICAgJFR5cGVDbGFzcyA9ICdjcml0aWNhbCc7CiAgICAgICAgfQoKICAgICAgICAjIEJ1aWxkIGF1ZGllbmNlIGRpc3BsYXkKICAgICAgICBteSAkQXVkaWVuY2VEaXNwbGF5ID0gJEFubm91bmNlbWVudC0+e1RhcmdldEF1ZGllbmNlfSBlcSAnYWxsJwogICAgICAgICAgICA/ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQWdlbnRzIGFuZCBDdXN0b21lcnMnKQogICAgICAgICAgICA6ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQWdlbnRzIG9ubHknKTsKCiAgICAgICAgIyBCdWlsZCB2YWxpZGl0eSBkaXNwbGF5CiAgICAgICAgbXkgJFZhbGlkaXR5RGlzcGxheSA9ICcnOwogICAgICAgIGlmICggJEFubm91bmNlbWVudC0+e1ZhbGlkRnJvbX0gJiYgJEFubm91bmNlbWVudC0+e1ZhbGlkVG99ICkgewogICAgICAgICAgICAkVmFsaWRpdHlEaXNwbGF5ID0gIiRBbm5vdW5jZW1lbnQtPntWYWxpZEZyb219IC0gJEFubm91bmNlbWVudC0+e1ZhbGlkVG99IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkQW5ub3VuY2VtZW50LT57VmFsaWRGcm9tfSApIHsKICAgICAgICAgICAgJFZhbGlkaXR5RGlzcGxheSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRnJvbScpIC4gIiAkQW5ub3VuY2VtZW50LT57VmFsaWRGcm9tfSI7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEFubm91bmNlbWVudC0+e1ZhbGlkVG99ICkgewogICAgICAgICAgICAkVmFsaWRpdHlEaXNwbGF5ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVbnRpbCcpIC4gIiAkQW5ub3VuY2VtZW50LT57VmFsaWRUb30iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFZhbGlkaXR5RGlzcGxheSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQWx3YXlzJyk7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQW5ub3VuY2VtZW50Um93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRBbm5vdW5jZW1lbnR9LAogICAgICAgICAgICAgICAgVHlwZUNsYXNzICAgICAgICAgID0+ICRUeXBlQ2xhc3MsCiAgICAgICAgICAgICAgICBBdWRpZW5jZURpc3BsYXkgICAgPT4gJEF1ZGllbmNlRGlzcGxheSwKICAgICAgICAgICAgICAgIFZhbGlkaXR5RGlzcGxheSAgICA9PiAkVmFsaWRpdHlEaXNwbGF5LAogICAgICAgICAgICAgICAgSGFzV3JpdGVQZXJtaXNzaW9uID0+ICRQYXJhbXtIYXNXcml0ZVBlcm1pc3Npb259LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgQWRkIGxvZ2luIGJhZGdlIGlmIGFwcGxpY2FibGUKICAgICAgICBpZiAoICRBbm5vdW5jZW1lbnQtPntTaG93QmVmb3JlTG9naW59ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xvZ2luQmFkZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBTaG93IGVtcHR5IG1lc3NhZ2UgaWYgbm8gYW5ub3VuY2VtZW50cwogICAgaWYgKCAhQEFubm91bmNlbWVudExpc3QgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgICMgQnVpbGQgZmlsdGVyIG5hdmlnYXRpb24KICAgIG15ICVGaWx0ZXJDb3VudDsKICAgIG15IEBBbGxBbm5vdW5jZW1lbnRzID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50TGlzdCggRmlsdGVyID0+ICdhbGwnICk7CiAgICAkRmlsdGVyQ291bnR7YWxsfSA9IHNjYWxhciBAQWxsQW5ub3VuY2VtZW50czsKCiAgICBteSBAQWN0aXZlQW5ub3VuY2VtZW50cyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudExpc3QoIEZpbHRlciA9PiAnYWN0aXZlJyApOwogICAgJEZpbHRlckNvdW50e2FjdGl2ZX0gPSBzY2FsYXIgQEFjdGl2ZUFubm91bmNlbWVudHM7CgogICAgbXkgQFNjaGVkdWxlZEFubm91bmNlbWVudHMgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRMaXN0KCBGaWx0ZXIgPT4gJ3NjaGVkdWxlZCcgKTsKICAgICRGaWx0ZXJDb3VudHtzY2hlZHVsZWR9ID0gc2NhbGFyIEBTY2hlZHVsZWRBbm5vdW5jZW1lbnRzOwoKICAgIG15IEBFeHBpcmVkQW5ub3VuY2VtZW50cyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudExpc3QoIEZpbHRlciA9PiAnZXhwaXJlZCcgKTsKICAgICRGaWx0ZXJDb3VudHtleHBpcmVkfSA9IHNjYWxhciBARXhwaXJlZEFubm91bmNlbWVudHM7CgogICAgIyBPdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIEdlbmVyYXRlIGNvbnRlbnQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRBbm5vdW5jZW1lbnQnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgRmlsdGVyICAgICAgICAgICAgID0+ICRGaWx0ZXIsCiAgICAgICAgICAgIEZpbHRlckFsbCAgICAgICAgICA9PiAkRmlsdGVyQ291bnR7YWxsfSwKICAgICAgICAgICAgRmlsdGVyQWN0aXZlICAgICAgID0+ICRGaWx0ZXJDb3VudHthY3RpdmV9LAogICAgICAgICAgICBGaWx0ZXJTY2hlZHVsZWQgICAgPT4gJEZpbHRlckNvdW50e3NjaGVkdWxlZH0sCiAgICAgICAgICAgIEZpbHRlckV4cGlyZWQgICAgICA9PiAkRmlsdGVyQ291bnR7ZXhwaXJlZH0sCiAgICAgICAgICAgIEhhc1dyaXRlUGVybWlzc2lvbiA9PiAkUGFyYW17SGFzV3JpdGVQZXJtaXNzaW9ufSwKICAgICAgICB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX1Nob3dGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgSW5pdGlhbGl6ZSBSaWNoVGV4dCBlZGl0b3IKICAgICRMYXlvdXRPYmplY3QtPlNldFJpY2hUZXh0UGFyYW1ldGVycygKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgQnVpbGQgdHlwZSBzZWxlY3Rpb24gd2l0aCBndWFyYW50ZWVkIG9yZGVyIChJbmZvLCBXYXJuaW5nLCBDcml0aWNhbCkKICAgICMgVXNpbmcgYXJyYXkgb2YgaGFzaGVzIHRvIHByZXNlcnZlIG9yZGVyCiAgICBteSBAVHlwZURhdGEgPSAoCiAgICAgICAgeyBLZXkgPT4gJ2luZm8nLCAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdJbmZvJykgfSwKICAgICAgICB7IEtleSA9PiAnd2FybmluZycsICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1dhcm5pbmcnKSB9LAogICAgICAgIHsgS2V5ID0+ICdjcml0aWNhbCcsIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JpdGljYWwnKSB9LAogICAgKTsKICAgICRQYXJhbXtUeXBlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcQFR5cGVEYXRhLAogICAgICAgIE5hbWUgICAgICAgID0+ICdBbm5vdW5jZW1lbnRUeXBlJywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17QW5ub3VuY2VtZW50VHlwZX0gfHwgJ2luZm8nLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICApOwoKICAgICMgQnVpbGQgYXVkaWVuY2Ugc2VsZWN0aW9uCiAgICBteSAlQXVkaWVuY2VPcHRpb25zID0gKAogICAgICAgIGFnZW50ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQWdlbnRzIG9ubHknKSwKICAgICAgICBhbGwgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0FnZW50cyBhbmQgQ3VzdG9tZXJzJyksCiAgICApOwogICAgJFBhcmFte0F1ZGllbmNlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJUF1ZGllbmNlT3B0aW9ucywKICAgICAgICBOYW1lICAgICAgICA9PiAnVGFyZ2V0QXVkaWVuY2UnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtUYXJnZXRBdWRpZW5jZX0gfHwgJ2FsbCcsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICk7CgogICAgIyBTZXQgY2hlY2tib3ggc3RhdGVzCiAgICAkUGFyYW17U2hvd0JlZm9yZUxvZ2luQ2hlY2tlZH0gPSAkUGFyYW17U2hvd0JlZm9yZUxvZ2lufSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJzsKCiAgICAjIEZvcm1hdCBkYXRlcyBmb3Igc2VwYXJhdGUgZGF0ZSBhbmQgdGltZSBpbnB1dHMKICAgICMgQ29udmVydCBmcm9tIFVUQyAoZGF0YWJhc2UpIHRvIHVzZXIgdGltZXpvbmUgZm9yIGRpc3BsYXkKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgIG15ICVVc2VyUHJlZmVyZW5jZXMgPSAkVXNlck9iamVjdC0+R2V0UHJlZmVyZW5jZXMoIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0gKTsKICAgIG15ICRVc2VyVGltZVpvbmUgPSAkVXNlclByZWZlcmVuY2Vze1VzZXJUaW1lWm9uZX0gfHwgJ1VUQyc7CgogICAgZm9yIG15ICRLZXkgKHF3KFZhbGlkRnJvbSBWYWxpZFRvKSkgewogICAgICAgIG5leHQgaWYgISRQYXJhbXskS2V5fTsKCiAgICAgICAgIyBTdXBwb3J0IGJvdGggREFURSAoWVlZWS1NTS1ERCkgYW5kIERBVEVUSU1FIChZWVlZLU1NLUREIEhIOk1NOlNTKSBmb3JtYXRzCiAgICAgICAgbmV4dCBpZiAkUGFyYW17JEtleX0gIX4gL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KSg/OlxzKyhcZHsyfSk6KFxkezJ9KSk/LzsKCiAgICAgICAgbXkgKCAkWWVhciwgJE1vbnRoLCAkRGF5LCAkSG91ciwgJE1pbnV0ZSApID0gKCAkMSwgJDIsICQzLCAkNCAvLyAwLCAkNSAvLyAwICk7CgogICAgICAgICMgQ3JlYXRlIERhdGVUaW1lIG9iamVjdCBpbiBPVFJTL1pudW55IHRpbWV6b25lICh1c3VhbGx5IFVUQykKICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17JEtleX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCREYXRlVGltZU9iamVjdCkgewogICAgICAgICAgICAjIENvbnZlcnQgdG8gdXNlciB0aW1lem9uZSBmb3IgZGlzcGxheQogICAgICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPlRvVGltZVpvbmUoIFRpbWVab25lID0+ICRVc2VyVGltZVpvbmUgKTsKICAgICAgICAgICAgbXkgJERhdGVUaW1lVmFsdWVzID0gJERhdGVUaW1lT2JqZWN0LT5HZXQoKTsKCiAgICAgICAgICAgICRQYXJhbXsiJHtLZXl9RGF0ZSJ9ID0gc3ByaW50ZigKICAgICAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCcsCiAgICAgICAgICAgICAgICAkRGF0ZVRpbWVWYWx1ZXMtPntZZWFyfSwKICAgICAgICAgICAgICAgICREYXRlVGltZVZhbHVlcy0+e01vbnRofSwKICAgICAgICAgICAgICAgICREYXRlVGltZVZhbHVlcy0+e0RheX0KICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhcmFteyIke0tleX1UaW1lIn0gPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgJyUwMmQ6JTAyZCcsCiAgICAgICAgICAgICAgICAkRGF0ZVRpbWVWYWx1ZXMtPntIb3VyfSwKICAgICAgICAgICAgICAgICREYXRlVGltZVZhbHVlcy0+e01pbnV0ZX0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgRmFsbGJhY2s6IHBhcnNlIGRpcmVjdGx5IGlmIERhdGVUaW1lIGNyZWF0aW9uIGZhaWxzCiAgICAgICAgICAgICRQYXJhbXsiJHtLZXl9RGF0ZSJ9ID0gIiRZZWFyLSRNb250aC0kRGF5IjsKICAgICAgICAgICAgJFBhcmFteyIke0tleX1UaW1lIn0gPSAiJEhvdXI6JE1pbnV0ZSI7CiAgICAgICAgfQogICAgfQoKICAgICMgSGFuZGxlIGVycm9ycwogICAgaWYgKCAkUGFyYW17RXJyb3JzfSApIHsKICAgICAgICBmb3IgbXkgJEVycm9yICggQHsgJFBhcmFte0Vycm9yc30gfSApIHsKICAgICAgICAgICAgJFBhcmFteyRFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KICAgIH0KCiAgICAjIFNldCBoZWFkZXIgYmFzZWQgb24gYWN0aW9uCiAgICBpZiAoICRQYXJhbXtTdWJhY3Rpb259IGVxICdBZGQnICkgewogICAgICAgICRQYXJhbXtIZWFkZXJUaXRsZX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0FkZCBBbm5vdW5jZW1lbnQnKTsKICAgICAgICAkUGFyYW17QWN0aW9uTGFiZWx9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGUnKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRQYXJhbXtIZWFkZXJUaXRsZX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0VkaXQgQW5ub3VuY2VtZW50Jyk7CiAgICAgICAgJFBhcmFte0FjdGlvbkxhYmVsfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2F2ZScpOwogICAgfQoKICAgICMgT3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBHZW5lcmF0ZSBjb250ZW50CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50QW5ub3VuY2VtZW50Rm9ybScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfR2V0UGFyYW1zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFVzZXJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICBteSAlR2V0UGFyYW07CgogICAgIyBHZXQgc2NhbGFyIHBhcmFtZXRlcnMgKHdpdGhvdXQgVmFsaWRGcm9tL1ZhbGlkVG8pCiAgICBmb3IgbXkgJEtleSAocXcoVGl0bGUgQW5ub3VuY2VtZW50VHlwZSBUYXJnZXRBdWRpZW5jZSkpIHsKICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkS2V5ICkgLy8gJyc7CiAgICB9CgogICAgIyBHZXQgdXNlciB0aW1lem9uZSBmb3IgY29udmVyc2lvbgogICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcyggVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSApOwogICAgbXkgJFVzZXJUaW1lWm9uZSA9ICRVc2VyUHJlZmVyZW5jZXN7VXNlclRpbWVab25lfSB8fCAnVVRDJzsKCiAgICAjIEdldCBzZXBhcmF0ZSBkYXRlIGFuZCB0aW1lIGZpZWxkcyBhbmQgY29udmVydCBmcm9tIHVzZXIgdGltZXpvbmUgdG8gVVRDCiAgICAjIERCIGZvcm1hdDogWVlZWS1NTS1ERCBISDpNTTpTUyAoc3RvcmVkIGluIFVUQykKICAgIGZvciBteSAkS2V5IChxdyhWYWxpZEZyb20gVmFsaWRUbykpIHsKICAgICAgICBteSAkRGF0ZVZhbHVlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIiR7S2V5fURhdGUiICkgLy8gJyc7CiAgICAgICAgbXkgJFRpbWVWYWx1ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICIke0tleX1UaW1lIiApIC8vICcnOwoKICAgICAgICBpZiAoJERhdGVWYWx1ZSkgewogICAgICAgICAgICAjIERlZmF1bHQgdGltZSB0byAwMDowMCBpZiBub3QgcHJvdmlkZWQKICAgICAgICAgICAgJFRpbWVWYWx1ZSB8fD0gJzAwOjAwJzsKCiAgICAgICAgICAgICMgUGFyc2UgdGhlIHVzZXItZW50ZXJlZCBkYXRldGltZSBpbiB1c2VyIHRpbWV6b25lCiAgICAgICAgICAgIG15ICggJFllYXIsICRNb250aCwgJERheSApID0gc3BsaXQgLy0vLCAkRGF0ZVZhbHVlOwogICAgICAgICAgICBteSAoICRIb3VyLCAkTWludXRlICkgPSBzcGxpdCAvOi8sICRUaW1lVmFsdWU7CgogICAgICAgICAgICAjIENyZWF0ZSBEYXRlVGltZSBvYmplY3QgaW4gdXNlciB0aW1lem9uZQogICAgICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICAgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICAgID0+ICRNb250aCwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkRGF5LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICAgID0+ICRIb3VyLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSAgID0+ICRNaW51dGUsCiAgICAgICAgICAgICAgICAgICAgU2Vjb25kICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBUaW1lWm9uZSA9PiAkVXNlclRpbWVab25lLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkRGF0ZVRpbWVPYmplY3QpIHsKICAgICAgICAgICAgICAgICMgQ29udmVydCB0byBVVEMgZm9yIHN0b3JhZ2UKICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+VG9PVFJTVGltZVpvbmUoKTsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskS2V5fSA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgRmFsbGJhY2s6IHN0b3JlIGFzLWlzIGlmIERhdGVUaW1lIGNyZWF0aW9uIGZhaWxzCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAiJERhdGVWYWx1ZSAkVGltZVZhbHVlOjAwIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEdldFBhcmFteyRLZXl9ID0gJyc7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IGJvZHkgKFJpY2hUZXh0KQogICAgJEdldFBhcmFte0JvZHl9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0JvZHknICkgLy8gJyc7CgogICAgIyBHZXQgY2hlY2tib3hlcwogICAgJEdldFBhcmFte1Nob3dCZWZvcmVMb2dpbn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2hvd0JlZm9yZUxvZ2luJyApID8gMSA6IDA7CgogICAgcmV0dXJuICVHZXRQYXJhbTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCgo9Y3V0Cg==</File>
        <File Permission="660" Location="Kernel/Modules/AgentAnnouncementAJAX.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRBbm5vdW5jZW1lbnRBSkFYOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQW5ub3VuY2VtZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFubm91bmNlbWVudCcpOwogICAgbXkgJEpTT05PYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CgogICAgIyBTZWN1cml0eTogQ2hlY2sgaWYgdXNlciBpcyBhdXRoZW50aWNhdGVkCiAgICBpZiAoICEkU2VsZi0+e1VzZXJJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fSlNPTlJlc3BvbnNlKAogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIEVycm9yICAgPT4gJ05vdEF1dGhlbnRpY2F0ZWQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBHZXQgc3ViYWN0aW9uCiAgICBteSAkU3ViYWN0aW9uID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnJzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEdldEFubm91bmNlbWVudHMgLSBmZXRjaCBhY3RpdmUgYW5ub3VuY2VtZW50cwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU3ViYWN0aW9uIGVxICdHZXRBbm5vdW5jZW1lbnRzJyApIHsKCiAgICAgICAgbXkgQEFubm91bmNlbWVudHMgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCBBdWRpZW5jZSA9PiAnYWdlbnQnICk7CgogICAgICAgICMgRGV0ZXJtaW5lIGhpZ2hlc3QgcHJpb3JpdHkKICAgICAgICBteSAkSGlnaGVzdFByaW9yaXR5ID0gJ2luZm8nOwogICAgICAgIGZvciBteSAkQW5ub3VuY2VtZW50IChAQW5ub3VuY2VtZW50cykgewogICAgICAgICAgICBpZiAoICRBbm5vdW5jZW1lbnQtPntBbm5vdW5jZW1lbnRUeXBlfSBlcSAnY3JpdGljYWwnICkgewogICAgICAgICAgICAgICAgJEhpZ2hlc3RQcmlvcml0eSA9ICdjcml0aWNhbCc7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEFubm91bmNlbWVudC0+e0Fubm91bmNlbWVudFR5cGV9IGVxICd3YXJuaW5nJyAmJiAkSGlnaGVzdFByaW9yaXR5IG5lICdjcml0aWNhbCcgKSB7CiAgICAgICAgICAgICAgICAkSGlnaGVzdFByaW9yaXR5ID0gJ3dhcm5pbmcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9KU09OUmVzcG9uc2UoCiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLAogICAgICAgICAgICBBbm5vdW5jZW1lbnRzICAgPT4gXEBBbm5vdW5jZW1lbnRzLAogICAgICAgICAgICBDb3VudCAgICAgICAgICAgPT4gc2NhbGFyIEBBbm5vdW5jZW1lbnRzLAogICAgICAgICAgICBIaWdoZXN0UHJpb3JpdHkgPT4gJEhpZ2hlc3RQcmlvcml0eSwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgR2V0QW5ub3VuY2VtZW50IC0gZmV0Y2ggc2luZ2xlIGFubm91bmNlbWVudAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICdHZXRBbm5vdW5jZW1lbnQnICkgewoKICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgIGlmICggISRJRCB8fCAkSUQgIX4gL15cZCskLyApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSlNPTlJlc3BvbnNlKAogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3IgICA9PiAnSW52YWxpZElEJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICVBbm5vdW5jZW1lbnQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRHZXQoIElEID0+ICRJRCApOwoKICAgICAgICBpZiAoICElQW5ub3VuY2VtZW50ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9KU09OUmVzcG9uc2UoCiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvciAgID0+ICdOb3RGb3VuZCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9KU09OUmVzcG9uc2UoCiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLAogICAgICAgICAgICBBbm5vdW5jZW1lbnQgPT4gXCVBbm5vdW5jZW1lbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIFVua25vd24gc3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJFNlbGYtPl9KU09OUmVzcG9uc2UoCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgRXJyb3IgICA9PiAnVW5rbm93blN1YmFjdGlvbicsCiAgICAgICAgKTsKICAgIH0KfQoKc3ViIF9KU09OUmVzcG9uc2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJEpTT05PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CgogICAgbXkgJEpTT04gPSAkSlNPTk9iamVjdC0+RW5jb2RlKCBEYXRhID0+IFwlUGFyYW0gKTsKCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICApOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KCj1jdXQK</File>
        <File Permission="660" Location="Kernel/Modules/CustomerAnnouncementAJAX.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6Q3VzdG9tZXJBbm5vdW5jZW1lbnRBSkFYOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQW5ub3VuY2VtZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFubm91bmNlbWVudCcpOwogICAgbXkgJEpTT05PYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CgogICAgIyBTZWN1cml0eTogQ2hlY2sgaWYgY3VzdG9tZXIgaXMgYXV0aGVudGljYXRlZAogICAgaWYgKCAhJFNlbGYtPntVc2VySUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSgKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBFcnJvciAgID0+ICdOb3RBdXRoZW50aWNhdGVkJywKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IHN1YmFjdGlvbgogICAgbXkgJFN1YmFjdGlvbiA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJhY3Rpb24nICkgfHwgJyc7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBHZXRBbm5vdW5jZW1lbnRzIC0gZmV0Y2ggYWN0aXZlIGFubm91bmNlbWVudHMgZm9yIGN1c3RvbWVycwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU3ViYWN0aW9uIGVxICdHZXRBbm5vdW5jZW1lbnRzJyApIHsKCiAgICAgICAgIyBPbmx5IHJldHVybiBhbm5vdW5jZW1lbnRzIHRhcmdldGVkIHRvICdhbGwnIChjdXN0b21lcnMpCiAgICAgICAgbXkgQEFubm91bmNlbWVudHMgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCBBdWRpZW5jZSA9PiAnY3VzdG9tZXInICk7CgogICAgICAgICMgRGV0ZXJtaW5lIGhpZ2hlc3QgcHJpb3JpdHkKICAgICAgICBteSAkSGlnaGVzdFByaW9yaXR5ID0gJ2luZm8nOwogICAgICAgIGZvciBteSAkQW5ub3VuY2VtZW50IChAQW5ub3VuY2VtZW50cykgewogICAgICAgICAgICBpZiAoICRBbm5vdW5jZW1lbnQtPntBbm5vdW5jZW1lbnRUeXBlfSBlcSAnY3JpdGljYWwnICkgewogICAgICAgICAgICAgICAgJEhpZ2hlc3RQcmlvcml0eSA9ICdjcml0aWNhbCc7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEFubm91bmNlbWVudC0+e0Fubm91bmNlbWVudFR5cGV9IGVxICd3YXJuaW5nJyAmJiAkSGlnaGVzdFByaW9yaXR5IG5lICdjcml0aWNhbCcgKSB7CiAgICAgICAgICAgICAgICAkSGlnaGVzdFByaW9yaXR5ID0gJ3dhcm5pbmcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9KU09OUmVzcG9uc2UoCiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLAogICAgICAgICAgICBBbm5vdW5jZW1lbnRzICAgPT4gXEBBbm5vdW5jZW1lbnRzLAogICAgICAgICAgICBDb3VudCAgICAgICAgICAgPT4gc2NhbGFyIEBBbm5vdW5jZW1lbnRzLAogICAgICAgICAgICBIaWdoZXN0UHJpb3JpdHkgPT4gJEhpZ2hlc3RQcmlvcml0eSwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgVW5rbm93biBzdWJhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewogICAgICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSgKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBFcnJvciAgID0+ICdVbmtub3duU3ViYWN0aW9uJywKICAgICAgICApOwogICAgfQp9CgpzdWIgX0pTT05SZXNwb25zZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkSlNPTk9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKTsKCiAgICBteSAkSlNPTiA9ICRKU09OT2JqZWN0LT5FbmNvZGUoIERhdGEgPT4gXCVQYXJhbSApOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgoKPWN1dAo=</File>

        <!-- Output Filters -->
        <File Permission="660" Location="Kernel/Output/HTML/FilterContent/AnnouncementAgent.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJDb250ZW50OjpBbm5vdW5jZW1lbnRBZ2VudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50JywKICAgICdLZXJuZWw6OlN5c3RlbTo6SlNPTicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckNvbnRlbnQ6OkFubm91bmNlbWVudEFnZW50IC0gSW5qZWN0IGFubm91bmNlbWVudCBiYW5uZXIgaW50byBhZ2VudCBuYXZpZ2F0aW9uCgo9aGVhZDEgREVTQ1JJUFRJT04KClRoaXMgb3V0cHV0IGZpbHRlciBpbmplY3RzIHRoZSBhbm5vdW5jZW1lbnQgbmF2aWdhdGlvbiBiYW5uZXIgaW50byB0aGUgYWdlbnQgaW50ZXJmYWNlIGhlYWRlci4KVGhlIGJhbm5lciBzaG93cyB0aGUgbW9zdCBpbXBvcnRhbnQgYW5ub3VuY2VtZW50IGJhc2VkIG9uIHByaW9yaXR5IHJ1bGVzOgotIElmIG9ubHkgb25lIGFubm91bmNlbWVudDogc2hvdyBpdHMgdGl0bGUKLSBJZiBvbmUgaXMgY3JpdGljYWw6IHNob3cgdGhlIGNyaXRpY2FsIG9uZQotIElmIG11bHRpcGxlIGNyaXRpY2FsOiBzaG93ICJYIGFubm91bmNlbWVudHMiIHdpdGggY3JpdGljYWwgcHJpb3JpdHkgc3R5bGUKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRBbm5vdW5jZW1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50Jyk7CiAgICBteSAkSlNPTk9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKTsKCiAgICAjIENoZWNrIGlmIHdlIGhhdmUgdGVtcGxhdGUgZGF0YQogICAgcmV0dXJuIDEgaWYgISRQYXJhbXtEYXRhfTsKICAgIHJldHVybiAxIGlmIHJlZiAkUGFyYW17RGF0YX0gbmUgJ1NDQUxBUic7CiAgICByZXR1cm4gMSBpZiAhJHsgJFBhcmFte0RhdGF9IH07CgogICAgIyBDaGVjayBpZiBmZWF0dXJlIGlzIGVuYWJsZWQKICAgIG15ICRFbmFibGVkID0gJENvbmZpZ09iamVjdC0+R2V0KCdBbm5vdW5jZW1lbnQ6OkVuYWJsZWQnKTsKICAgIHJldHVybiAxIGlmICEkRW5hYmxlZDsKCiAgICBteSAkU2hvd0luQWdlbnQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Fubm91bmNlbWVudDo6U2hvd0luQWdlbnRJbnRlcmZhY2UnKTsKICAgIHJldHVybiAxIGlmICEkU2hvd0luQWdlbnQ7CgogICAgIyBPbmx5IHByb2Nlc3MgZm9yIGFnZW50IGludGVyZmFjZQogICAgcmV0dXJuIDEgaWYgJExheW91dE9iamVjdC0+e1Nlc3Npb25Tb3VyY2V9ICYmICRMYXlvdXRPYmplY3QtPntTZXNzaW9uU291cmNlfSBuZSAnQWdlbnRJbnRlcmZhY2UnOwoKICAgICMgU2tpcCBsb2dpbiBwYWdlIC0gb25seSBzaG93IG9uIGF1dGhlbnRpY2F0ZWQgcGFnZXMKICAgIHJldHVybiAxIGlmICEkTGF5b3V0T2JqZWN0LT57VXNlcklEfTsKCiAgICAjIEdldCBhY3RpdmUgYW5ub3VuY2VtZW50cyBmb3IgYWdlbnRzCiAgICBteSBAQW5ub3VuY2VtZW50cyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkdldEFjdGl2ZUFubm91bmNlbWVudHMoIEF1ZGllbmNlID0+ICdhZ2VudCcgKTsKCiAgICAjIE5vIGFubm91bmNlbWVudHMgPSBub3RoaW5nIHRvIGRpc3BsYXkKICAgIHJldHVybiAxIGlmICFAQW5ub3VuY2VtZW50czsKCiAgICAjIEdldCBjb25maWd1cmF0aW9uIHZhbHVlcwogICAgbXkgJENhY2hlVFRMID0gJENvbmZpZ09iamVjdC0+R2V0KCdBbm5vdW5jZW1lbnQ6OkNhY2hlOjpUVEwnKSB8fCAzMDA7CgogICAgIyBEZXRlcm1pbmUgZGlzcGxheSBsb2dpYwogICAgbXkgJERpc3BsYXlEYXRhID0gJFNlbGYtPl9EZXRlcm1pbmVEaXNwbGF5QW5ub3VuY2VtZW50KCBBbm5vdW5jZW1lbnRzID0+IFxAQW5ub3VuY2VtZW50cyApOwoKICAgICMgUHJlcGFyZSBhbm5vdW5jZW1lbnQgZGF0YSBmb3IgSmF2YVNjcmlwdAogICAgbXkgQEFubm91bmNlbWVudERhdGE7CiAgICBmb3IgbXkgJEFubm91bmNlbWVudCAoQEFubm91bmNlbWVudHMpIHsKICAgICAgICBwdXNoIEBBbm5vdW5jZW1lbnREYXRhLCB7CiAgICAgICAgICAgIElEICAgICAgICAgICAgICAgPT4gJEFubm91bmNlbWVudC0+e0lEfSwKICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAkQW5ub3VuY2VtZW50LT57VGl0bGV9LAogICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnQtPntCb2R5fSwKICAgICAgICAgICAgQW5ub3VuY2VtZW50VHlwZSA9PiAkQW5ub3VuY2VtZW50LT57QW5ub3VuY2VtZW50VHlwZX0sCiAgICAgICAgICAgIFZhbGlkRnJvbSAgICAgICAgPT4gJEFubm91bmNlbWVudC0+e1ZhbGlkRnJvbX0gfHwgJycsCiAgICAgICAgICAgIFZhbGlkVG8gICAgICAgICAgPT4gJEFubm91bmNlbWVudC0+e1ZhbGlkVG99IHx8ICcnLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJEFubm91bmNlbWVudHNKU09OID0gJEpTT05PYmplY3QtPkVuY29kZSggRGF0YSA9PiBcQEFubm91bmNlbWVudERhdGEgKTsKCiAgICAjIFJlbmRlciB0aGUgaW5pdGlhbGl6YXRpb24gdGVtcGxhdGUKICAgIG15ICRJbml0SFRNTCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0Fubm91bmNlbWVudC9Jbml0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBBbm5vdW5jZW1lbnRDb3VudCA9PiBzY2FsYXIgQEFubm91bmNlbWVudHMsCiAgICAgICAgICAgIEhpZ2hlc3RQcmlvcml0eSAgID0+ICREaXNwbGF5RGF0YS0+e0Rpc3BsYXlUeXBlfSwKICAgICAgICAgICAgQW5ub3VuY2VtZW50c0pTT04gPT4gJEFubm91bmNlbWVudHNKU09OLAogICAgICAgICAgICBDYWNoZVRUTCAgICAgICAgICA9PiAkQ2FjaGVUVEwsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBJbmplY3QgaW50byBwYWdlIGhlYWQgKGJlZm9yZSA8L2hlYWQ+KQogICAgaWYgKCRJbml0SFRNTCkgewogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7PC9oZWFkPn17JEluaXRIVE1MXG48L2hlYWQ+fWk7CiAgICB9CgogICAgIyBSZW5kZXIgdGhlIG5hdmlnYXRpb24gYmFyIGJhbm5lciB0ZW1wbGF0ZQogICAgbXkgJEJhbm5lckhUTUwgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBbm5vdW5jZW1lbnQvTmF2QmFyQmFubmVyJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBBbm5vdW5jZW1lbnRDb3VudCA9PiBzY2FsYXIgQEFubm91bmNlbWVudHMsCiAgICAgICAgICAgIEhpZ2hlc3RQcmlvcml0eSAgID0+ICREaXNwbGF5RGF0YS0+e0Rpc3BsYXlUeXBlfSwKICAgICAgICAgICAgRGlzcGxheVR5cGUgICAgICAgPT4gJERpc3BsYXlEYXRhLT57RGlzcGxheVR5cGV9LAogICAgICAgICAgICBEaXNwbGF5VGV4dCAgICAgICA9PiAkRGlzcGxheURhdGEtPntEaXNwbGF5VGV4dH0sCiAgICAgICAgICAgIFRvb2x0aXBUZXh0ICAgICAgID0+ICREaXNwbGF5RGF0YS0+e1Rvb2x0aXBUZXh0fSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIEluamVjdCBiYW5uZXIgaW50byBOYXZpZ2F0aW9uQ29udGFpbmVyIChhZnRlciA8L3VsPiBvZiAjTmF2aWdhdGlvbikKICAgICMgWm51bnkgNi41LnggTFRTIG5hbWVzIHRoaXMgPHVsPiAiVG9vbEJhciIgLSB0aGUgIkhlYWRlciIgcHJlZml4IHdhcwogICAgIyBvbmx5IGFkZGVkIHN0YXJ0aW5nIHdpdGggNy4wLnggLSBzbyBib3RoIHZhcmlhbnRzIGFyZSBtYXRjaGVkIGhlcmUuCiAgICBpZiAoJEJhbm5lckhUTUwpIHsKICAgICAgICAjIEluc2VydCBhZnRlciB0aGUgTmF2aWdhdGlvbiB1bCBjbG9zaW5nIHRhZywgYnV0IHN0aWxsIHdpdGhpbiBOYXZpZ2F0aW9uQ29udGFpbmVyCiAgICAgICAgaWYgKCAkeyAkUGFyYW17RGF0YX0gfSA9fiBteyg8L3VsPlxzKikoPC9kaXY+XHMqPHVsXHMraWQ9Iig/OkhlYWRlcik/VG9vbEJhciIpfWlzICkgewogICAgICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzeyg8L3VsPlxzKikoPC9kaXY+XHMqPHVsXHMraWQ9Iig/OkhlYWRlcik/VG9vbEJhciIpfXskMSRCYW5uZXJIVE1MJDJ9aXM7CiAgICAgICAgfQogICAgICAgICMgRmFsbGJhY2s6IHRyeSBpbnNlcnRpbmcgYmVmb3JlIChIZWFkZXIpVG9vbEJhcgogICAgICAgIGVsc2lmICggJHsgJFBhcmFte0RhdGF9IH0gPX4gbXsoPHVsXHMraWQ9Iig/OkhlYWRlcik/VG9vbEJhciIpfWkgKSB7CiAgICAgICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7KDx1bFxzK2lkPSIoPzpIZWFkZXIpP1Rvb2xCYXIiKX17JEJhbm5lckhUTUwkMX1pOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9EZXRlcm1pbmVEaXNwbGF5QW5ub3VuY2VtZW50KCkKCkRldGVybWluZSB3aGljaCBhbm5vdW5jZW1lbnQgdG8gZGlzcGxheSBiYXNlZCBvbiBwcmlvcml0eSBydWxlczoKMS4gT25seSBvbmUgYW5ub3VuY2VtZW50OiBzaG93IGl0cyB0aXRsZQoyLiBNdWx0aXBsZSBhbm5vdW5jZW1lbnRzIHdpdGggZXhhY3RseSBvbmUgY3JpdGljYWw6IHNob3cgdGhlIGNyaXRpY2FsIG9uZQozLiBNdWx0aXBsZSBjcml0aWNhbCBvciBvdGhlciBjb21iaW5hdGlvbnM6IHNob3cgIlggYW5ub3VuY2VtZW50cyIgd2l0aCBoaWdoZXN0IHByaW9yaXR5Cgo9Y3V0CgpzdWIgX0RldGVybWluZURpc3BsYXlBbm5vdW5jZW1lbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgQEFubm91bmNlbWVudHMgPSBAeyAkUGFyYW17QW5ub3VuY2VtZW50c30gfHwgW10gfTsKCiAgICByZXR1cm4ge30gaWYgIUBBbm5vdW5jZW1lbnRzOwoKICAgICMgQ291bnQgYnkgdHlwZQogICAgbXkgQENyaXRpY2FsQW5ub3VuY2VtZW50czsKICAgIG15IEBXYXJuaW5nQW5ub3VuY2VtZW50czsKCiAgICBmb3IgbXkgJEEgKEBBbm5vdW5jZW1lbnRzKSB7CiAgICAgICAgaWYgKCAkQS0+e0Fubm91bmNlbWVudFR5cGV9IGVxICdjcml0aWNhbCcgKSB7CiAgICAgICAgICAgIHB1c2ggQENyaXRpY2FsQW5ub3VuY2VtZW50cywgJEE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEEtPntBbm5vdW5jZW1lbnRUeXBlfSBlcSAnd2FybmluZycgKSB7CiAgICAgICAgICAgIHB1c2ggQFdhcm5pbmdBbm5vdW5jZW1lbnRzLCAkQTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvdW50ID0gc2NhbGFyIEBBbm5vdW5jZW1lbnRzOwogICAgbXkgJERpc3BsYXlUZXh0OwogICAgbXkgJERpc3BsYXlUeXBlOwogICAgbXkgJFRvb2x0aXBUZXh0OwoKICAgICMgRGV0ZXJtaW5lIGhpZ2hlc3QgcHJpb3JpdHkgdHlwZSBmb3IgZGlzcGxheSBzdHlsZQogICAgaWYgKCBAQ3JpdGljYWxBbm5vdW5jZW1lbnRzICkgewogICAgICAgICREaXNwbGF5VHlwZSA9ICdjcml0aWNhbCc7CiAgICB9CiAgICBlbHNpZiAoIEBXYXJuaW5nQW5ub3VuY2VtZW50cyApIHsKICAgICAgICAkRGlzcGxheVR5cGUgPSAnd2FybmluZyc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkRGlzcGxheVR5cGUgPSAnaW5mbyc7CiAgICB9CgogICAgIyBDYXNlIDE6IE9ubHkgb25lIGFubm91bmNlbWVudCAtIHNob3cgaXRzIHRpdGxlCiAgICBpZiAoICRDb3VudCA9PSAxICkgewogICAgICAgICREaXNwbGF5VGV4dCA9ICRBbm5vdW5jZW1lbnRzWzBdLT57VGl0bGV9OwogICAgICAgICREaXNwbGF5VHlwZSA9ICRBbm5vdW5jZW1lbnRzWzBdLT57QW5ub3VuY2VtZW50VHlwZX07CiAgICAgICAgJFRvb2x0aXBUZXh0ID0gJERpc3BsYXlUZXh0OwogICAgfQogICAgIyBDYXNlIDI6IE11bHRpcGxlIGFubm91bmNlbWVudHMgd2l0aCBleGFjdGx5IG9uZSBjcml0aWNhbCAtIHNob3cgdGhlIGNyaXRpY2FsIG9uZQogICAgZWxzaWYgKCBzY2FsYXIgQENyaXRpY2FsQW5ub3VuY2VtZW50cyA9PSAxICkgewogICAgICAgICREaXNwbGF5VGV4dCA9ICRDcml0aWNhbEFubm91bmNlbWVudHNbMF0tPntUaXRsZX07CiAgICAgICAgJERpc3BsYXlUeXBlID0gJ2NyaXRpY2FsJzsKICAgICAgICAkVG9vbHRpcFRleHQgPSAiJENvdW50ICIgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ2Fubm91bmNlbWVudHMnKSAuICIgLSAiIC4gJERpc3BsYXlUZXh0OwogICAgfQogICAgIyBDYXNlIDM6IE11bHRpcGxlIGFubm91bmNlbWVudHMgLSBzaG93IGNvdW50CiAgICBlbHNlIHsKICAgICAgICAkRGlzcGxheVRleHQgPSAiJENvdW50ICIgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ2Fubm91bmNlbWVudHMnKTsKICAgICAgICAkVG9vbHRpcFRleHQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NsaWNrIHRvIHZpZXcgYWxsIGFubm91bmNlbWVudHMnKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIERpc3BsYXlUZXh0ID0+ICREaXNwbGF5VGV4dCwKICAgICAgICBEaXNwbGF5VHlwZSA9PiAkRGlzcGxheVR5cGUsCiAgICAgICAgVG9vbHRpcFRleHQgPT4gJFRvb2x0aXBUZXh0LAogICAgfTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCgo9Y3V0Cg==</File>
        <File Permission="660" Location="Kernel/Output/HTML/FilterContent/AnnouncementCustomer.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJDb250ZW50OjpBbm5vdW5jZW1lbnRDdXN0b21lcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50JywKICAgICdLZXJuZWw6OlN5c3RlbTo6SlNPTicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckNvbnRlbnQ6OkFubm91bmNlbWVudEN1c3RvbWVyIC0gSW5qZWN0IGFubm91bmNlbWVudCBiYW5uZXIgaW50byBjdXN0b21lciBoZWFkZXIKCj1oZWFkMSBERVNDUklQVElPTgoKVGhpcyBvdXRwdXQgZmlsdGVyIGluamVjdHMgdGhlIGFubm91bmNlbWVudCBuYXZpZ2F0aW9uIGJhbm5lciBpbnRvIHRoZSBjdXN0b21lciBpbnRlcmZhY2UgaGVhZGVyLgpUaGUgYmFubmVyIHNob3dzIHRoZSBtb3N0IGltcG9ydGFudCBhbm5vdW5jZW1lbnQgYmFzZWQgb24gcHJpb3JpdHkgcnVsZXMgKGlkZW50aWNhbCB0byBhZ2VudCBpbnRlcmZhY2UpOgotIElmIG9ubHkgb25lIGFubm91bmNlbWVudDogc2hvdyBpdHMgdGl0bGUKLSBJZiBvbmUgaXMgY3JpdGljYWw6IHNob3cgdGhlIGNyaXRpY2FsIG9uZQotIElmIG11bHRpcGxlIGNyaXRpY2FsOiBzaG93ICJYIGFubm91bmNlbWVudHMiIHdpdGggY3JpdGljYWwgcHJpb3JpdHkgc3R5bGUKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRBbm5vdW5jZW1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50Jyk7CiAgICBteSAkSlNPTk9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBDaGVjayBpZiB3ZSBoYXZlIHRlbXBsYXRlIGRhdGEKICAgIHJldHVybiAxIGlmICEkUGFyYW17RGF0YX07CiAgICByZXR1cm4gMSBpZiByZWYgJFBhcmFte0RhdGF9IG5lICdTQ0FMQVInOwogICAgcmV0dXJuIDEgaWYgISR7ICRQYXJhbXtEYXRhfSB9OwoKICAgICMgQ2hlY2sgaWYgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBteSAkRW5hYmxlZCA9ICRDb25maWdPYmplY3QtPkdldCgnQW5ub3VuY2VtZW50OjpFbmFibGVkJyk7CiAgICByZXR1cm4gMSBpZiAhJEVuYWJsZWQ7CgogICAgbXkgJFNob3dJbkN1c3RvbWVyID0gJENvbmZpZ09iamVjdC0+R2V0KCdBbm5vdW5jZW1lbnQ6OlNob3dJbkN1c3RvbWVySW50ZXJmYWNlJyk7CiAgICByZXR1cm4gMSBpZiAhJFNob3dJbkN1c3RvbWVyOwoKICAgICMgT25seSBwcm9jZXNzIGZvciBjdXN0b21lciBpbnRlcmZhY2UgKGNoZWNrIG11bHRpcGxlIGluZGljYXRvcnMpCiAgICBteSAkSXNDdXN0b21lckludGVyZmFjZSA9IDA7CiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntTZXNzaW9uU291cmNlfSAmJiAkTGF5b3V0T2JqZWN0LT57U2Vzc2lvblNvdXJjZX0gZXEgJ0N1c3RvbWVySW50ZXJmYWNlJyApIHsKICAgICAgICAkSXNDdXN0b21lckludGVyZmFjZSA9IDE7CiAgICB9CiAgICBlbHNpZiAoICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17Y3VzdG9tZXJcLnBsfWkgKSB7CiAgICAgICAgJElzQ3VzdG9tZXJJbnRlcmZhY2UgPSAxOwogICAgfQogICAgcmV0dXJuIDEgaWYgISRJc0N1c3RvbWVySW50ZXJmYWNlOwoKICAgICMgVGhlIExvZ291dCBhY3Rpb24gcmVuZGVycyBpdHMgInlvdSBoYXZlIGJlZW4gbG9nZ2VkIG91dCIgcGFnZSBhcyBwYXJ0CiAgICAjIG9mIHRoZSBTQU1FIHJlcXVlc3QgdGhhdCBkZXN0cm95cyB0aGUgc2Vzc2lvbiAtICRMYXlvdXRPYmplY3QtPntVc2VySUR9CiAgICAjIGlzIHN0aWxsIHBvcHVsYXRlZCBmcm9tIGJlZm9yZSB0aGUgbG9nb3V0IGhhcHBlbmVkLCBzbyB0aGUgY2hlY2tzCiAgICAjIGJlbG93IHdvdWxkIG90aGVyd2lzZSBzdGlsbCBjb25zaWRlciB0aGlzIHBhZ2UgImxvZ2dlZCBpbiIgYW5kIGtlZXAKICAgICMgc2hvd2luZyB0aGUgaGVhZGVyIGJhbm5lciBvbmUgcmVxdWVzdCB0b28gbG9uZy4KICAgIG15ICRBY3Rpb24gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQWN0aW9uJyApIHx8ICcnOwogICAgcmV0dXJuIDEgaWYgJEFjdGlvbiBlcSAnTG9nb3V0JzsKCiAgICAjIFNraXAgaWYgbm8gY3VzdG9tZXIgdXNlciBsb2dnZWQgaW4gKGNoZWNrIHZhcmlvdXMgaW5kaWNhdG9ycykKICAgIG15ICRJc0xvZ2dlZEluID0gMDsKICAgIGlmICggJExheW91dE9iamVjdC0+e1VzZXJJRH0gfHwgJExheW91dE9iamVjdC0+e1VzZXJMb2dpbn0gfHwgJExheW91dE9iamVjdC0+e0VudlJlZn0tPntVc2VySUR9ICkgewogICAgICAgICRJc0xvZ2dlZEluID0gMTsKICAgIH0KICAgICMgQWxzbyBjaGVjayBpZiBwYWdlIGNvbnRhaW5zIGxvZ2dlZC1pbiBpbmRpY2F0b3JzCiAgICBpZiAoICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17aWQ9Im9vb1VzZXIifGNsYXNzPSJbXiJdKmxvZ2dlZC1pbnxBY3Rpb249Q3VzdG9tZXJUaWNrZXR9aSApIHsKICAgICAgICAkSXNMb2dnZWRJbiA9IDE7CiAgICB9CiAgICByZXR1cm4gMSBpZiAhJElzTG9nZ2VkSW47CgogICAgIyBHZXQgYWN0aXZlIGFubm91bmNlbWVudHMgZm9yIGN1c3RvbWVycyAob25seSB0aG9zZSB0YXJnZXRlZCB0byAnYWxsJykKICAgIG15IEBBbm5vdW5jZW1lbnRzID0gJEFubm91bmNlbWVudE9iamVjdC0+R2V0QWN0aXZlQW5ub3VuY2VtZW50cyggQXVkaWVuY2UgPT4gJ2N1c3RvbWVyJyApOwoKICAgICMgTm8gYW5ub3VuY2VtZW50cyA9IG5vdGhpbmcgdG8gZGlzcGxheQogICAgcmV0dXJuIDEgaWYgIUBBbm5vdW5jZW1lbnRzOwoKICAgICMgR2V0IGNvbmZpZ3VyYXRpb24gdmFsdWVzCiAgICBteSAkQ2FjaGVUVEwgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Fubm91bmNlbWVudDo6Q2FjaGU6OlRUTCcpIHx8IDMwMDsKCiAgICAjIERldGVybWluZSBkaXNwbGF5IGxvZ2ljIChzYW1lIGFzIGFnZW50IGludGVyZmFjZSkKICAgIG15ICREaXNwbGF5RGF0YSA9ICRTZWxmLT5fRGV0ZXJtaW5lRGlzcGxheUFubm91bmNlbWVudCggQW5ub3VuY2VtZW50cyA9PiBcQEFubm91bmNlbWVudHMgKTsKCiAgICAjIFByZXBhcmUgYW5ub3VuY2VtZW50IGRhdGEgZm9yIEphdmFTY3JpcHQKICAgIG15IEBBbm5vdW5jZW1lbnREYXRhOwogICAgZm9yIG15ICRBbm5vdW5jZW1lbnQgKEBBbm5vdW5jZW1lbnRzKSB7CiAgICAgICAgcHVzaCBAQW5ub3VuY2VtZW50RGF0YSwgewogICAgICAgICAgICBJRCAgICAgICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnQtPntJRH0sCiAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJEFubm91bmNlbWVudC0+e1RpdGxlfSwKICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAkQW5ub3VuY2VtZW50LT57Qm9keX0sCiAgICAgICAgICAgIEFubm91bmNlbWVudFR5cGUgPT4gJEFubm91bmNlbWVudC0+e0Fubm91bmNlbWVudFR5cGV9LAogICAgICAgICAgICBWYWxpZEZyb20gICAgICAgID0+ICRBbm5vdW5jZW1lbnQtPntWYWxpZEZyb219IHx8ICcnLAogICAgICAgICAgICBWYWxpZFRvICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnQtPntWYWxpZFRvfSB8fCAnJywKICAgICAgICB9OwogICAgfQoKICAgIG15ICRBbm5vdW5jZW1lbnRzSlNPTiA9ICRKU09OT2JqZWN0LT5FbmNvZGUoIERhdGEgPT4gXEBBbm5vdW5jZW1lbnREYXRhICk7CgogICAgIyBSZW5kZXIgdGhlIGluaXRpYWxpemF0aW9uIHRlbXBsYXRlCiAgICBteSAkSW5pdEhUTUwgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBbm5vdW5jZW1lbnQvSW5pdCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgQW5ub3VuY2VtZW50Q291bnQgPT4gc2NhbGFyIEBBbm5vdW5jZW1lbnRzLAogICAgICAgICAgICBIaWdoZXN0UHJpb3JpdHkgICA9PiAkRGlzcGxheURhdGEtPntEaXNwbGF5VHlwZX0sCiAgICAgICAgICAgIEFubm91bmNlbWVudHNKU09OID0+ICRBbm5vdW5jZW1lbnRzSlNPTiwKICAgICAgICAgICAgQ2FjaGVUVEwgICAgICAgICAgPT4gJENhY2hlVFRMLAogICAgICAgIH0sCiAgICApOwoKICAgICMgSW5qZWN0IGludG8gcGFnZSBoZWFkIChiZWZvcmUgPC9oZWFkPikKICAgIGlmICgkSW5pdEhUTUwpIHsKICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzezwvaGVhZD59eyRJbml0SFRNTFxuPC9oZWFkPn1pOwogICAgfQoKICAgICMgUmVuZGVyIHRoZSBuYXZpZ2F0aW9uIGJhciBiYW5uZXIgdGVtcGxhdGUgKHNhbWUgYXMgYWdlbnQpCiAgICBteSAkQmFubmVySFRNTCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0Fubm91bmNlbWVudC9OYXZCYXJCYW5uZXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEFubm91bmNlbWVudENvdW50ID0+IHNjYWxhciBAQW5ub3VuY2VtZW50cywKICAgICAgICAgICAgSGlnaGVzdFByaW9yaXR5ICAgPT4gJERpc3BsYXlEYXRhLT57RGlzcGxheVR5cGV9LAogICAgICAgICAgICBEaXNwbGF5VHlwZSAgICAgICA9PiAkRGlzcGxheURhdGEtPntEaXNwbGF5VHlwZX0sCiAgICAgICAgICAgIERpc3BsYXlUZXh0ICAgICAgID0+ICREaXNwbGF5RGF0YS0+e0Rpc3BsYXlUZXh0fSwKICAgICAgICAgICAgVG9vbHRpcFRleHQgICAgICAgPT4gJERpc3BsYXlEYXRhLT57VG9vbHRpcFRleHR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgSW5qZWN0IGJhbm5lciBpbnRvIGN1c3RvbWVyIGhlYWRlcgogICAgIyBabnVueSA3LnggQ3VzdG9tZXIgSW50ZXJmYWNlIGhhcyB2YXJpb3VzIGhlYWRlciBzdHJ1Y3R1cmVzCiAgICBpZiAoJEJhbm5lckhUTUwpIHsKICAgICAgICBteSAkSW5qZWN0ZWQgPSAwOwoKICAgICAgICAjIE9wdGlvbiAxOiBJbmplY3QgYWZ0ZXIgaW5mby13cmFwcGVyIGRpdiAocHJlZmVycmVkIHBvc2l0aW9uKQogICAgICAgIGlmICggISRJbmplY3RlZCAmJiAkeyAkUGFyYW17RGF0YX0gfSA9fiBteyg8ZGl2W14+XSpjbGFzcz0iW14iXSppbmZvLXdyYXBwZXJbXiJdKiJbXj5dKj4uKj88L2Rpdj4pfWlzICkgewogICAgICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzeyg8ZGl2W14+XSpjbGFzcz0iW14iXSppbmZvLXdyYXBwZXJbXiJdKiJbXj5dKj4uKj88L2Rpdj4pfXskMVxuJEJhbm5lckhUTUx9aXM7CiAgICAgICAgICAgICRJbmplY3RlZCA9IDEgaWYgJHsgJFBhcmFte0RhdGF9IH0gPX4gbXtBbm5vdW5jZW1lbnROYXZCYW5uZXJ9OwogICAgICAgIH0KCiAgICAgICAgIyBPcHRpb24gMjogSW5qZWN0IGFmdGVyIGhlYWRlciBlbGVtZW50CiAgICAgICAgaWYgKCAhJEluamVjdGVkICYmICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17KDwvaGVhZGVyPil9aSApIHsKICAgICAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3soPC9oZWFkZXI+KX17JEJhbm5lckhUTUxcbiQxfWk7CiAgICAgICAgICAgICRJbmplY3RlZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIE9wdGlvbiAzOiBJbmplY3QgYWZ0ZXIgbmF2IGVsZW1lbnQKICAgICAgICBpZiAoICEkSW5qZWN0ZWQgJiYgJHsgJFBhcmFte0RhdGF9IH0gPX4gbXsoPC9uYXY+KX1pICkgewogICAgICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzeyg8L25hdj4pfXskMVxuJEJhbm5lckhUTUx9aTsKICAgICAgICAgICAgJEluamVjdGVkID0gMTsKICAgICAgICB9CgogICAgICAgICMgT3B0aW9uIDQ6IEluamVjdCBhZnRlciAjSGVhZGVyIGRpdgogICAgICAgIGlmICggISRJbmplY3RlZCAmJiAkeyAkUGFyYW17RGF0YX0gfSA9fiBteyg8ZGl2W14+XSppZD0iSGVhZGVyIltePl0qPil9aSApIHsKICAgICAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3soPGRpdltePl0qaWQ9IkhlYWRlciJbXj5dKj4pfXskMVxuJEJhbm5lckhUTUx9aTsKICAgICAgICAgICAgJEluamVjdGVkID0gMTsKICAgICAgICB9CgogICAgICAgICMgT3B0aW9uIDU6IEluamVjdCBhZnRlciBvcGVuaW5nIGJvZHkgdGFnIChtb3N0IHJlbGlhYmxlIGZhbGxiYWNrKQogICAgICAgIGlmICggISRJbmplY3RlZCAmJiAkeyAkUGFyYW17RGF0YX0gfSA9fiBteyg8Ym9keVtePl0qPil9aSApIHsKICAgICAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3soPGJvZHlbXj5dKj4pfXskMVxuJEJhbm5lckhUTUx9aTsKICAgICAgICAgICAgJEluamVjdGVkID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRGV0ZXJtaW5lRGlzcGxheUFubm91bmNlbWVudCgpCgpEZXRlcm1pbmUgd2hpY2ggYW5ub3VuY2VtZW50IHRvIGRpc3BsYXkgYmFzZWQgb24gcHJpb3JpdHkgcnVsZXM6CjEuIE9ubHkgb25lIGFubm91bmNlbWVudDogc2hvdyBpdHMgdGl0bGUKMi4gTXVsdGlwbGUgYW5ub3VuY2VtZW50cyB3aXRoIGV4YWN0bHkgb25lIGNyaXRpY2FsOiBzaG93IHRoZSBjcml0aWNhbCBvbmUKMy4gTXVsdGlwbGUgY3JpdGljYWwgb3Igb3RoZXIgY29tYmluYXRpb25zOiBzaG93ICJYIGFubm91bmNlbWVudHMiIHdpdGggaGlnaGVzdCBwcmlvcml0eQoKPWN1dAoKc3ViIF9EZXRlcm1pbmVEaXNwbGF5QW5ub3VuY2VtZW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15IEBBbm5vdW5jZW1lbnRzID0gQHsgJFBhcmFte0Fubm91bmNlbWVudHN9IHx8IFtdIH07CgogICAgcmV0dXJuIHt9IGlmICFAQW5ub3VuY2VtZW50czsKCiAgICAjIENvdW50IGJ5IHR5cGUKICAgIG15IEBDcml0aWNhbEFubm91bmNlbWVudHM7CiAgICBteSBAV2FybmluZ0Fubm91bmNlbWVudHM7CgogICAgZm9yIG15ICRBIChAQW5ub3VuY2VtZW50cykgewogICAgICAgIGlmICggJEEtPntBbm5vdW5jZW1lbnRUeXBlfSBlcSAnY3JpdGljYWwnICkgewogICAgICAgICAgICBwdXNoIEBDcml0aWNhbEFubm91bmNlbWVudHMsICRBOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRBLT57QW5ub3VuY2VtZW50VHlwZX0gZXEgJ3dhcm5pbmcnICkgewogICAgICAgICAgICBwdXNoIEBXYXJuaW5nQW5ub3VuY2VtZW50cywgJEE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb3VudCA9IHNjYWxhciBAQW5ub3VuY2VtZW50czsKICAgIG15ICREaXNwbGF5VGV4dDsKICAgIG15ICREaXNwbGF5VHlwZTsKICAgIG15ICRUb29sdGlwVGV4dDsKCiAgICAjIERldGVybWluZSBoaWdoZXN0IHByaW9yaXR5IHR5cGUgZm9yIGRpc3BsYXkgc3R5bGUKICAgIGlmICggQENyaXRpY2FsQW5ub3VuY2VtZW50cyApIHsKICAgICAgICAkRGlzcGxheVR5cGUgPSAnY3JpdGljYWwnOwogICAgfQogICAgZWxzaWYgKCBAV2FybmluZ0Fubm91bmNlbWVudHMgKSB7CiAgICAgICAgJERpc3BsYXlUeXBlID0gJ3dhcm5pbmcnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJERpc3BsYXlUeXBlID0gJ2luZm8nOwogICAgfQoKICAgICMgQ2FzZSAxOiBPbmx5IG9uZSBhbm5vdW5jZW1lbnQgLSBzaG93IGl0cyB0aXRsZQogICAgaWYgKCAkQ291bnQgPT0gMSApIHsKICAgICAgICAkRGlzcGxheVRleHQgPSAkQW5ub3VuY2VtZW50c1swXS0+e1RpdGxlfTsKICAgICAgICAkRGlzcGxheVR5cGUgPSAkQW5ub3VuY2VtZW50c1swXS0+e0Fubm91bmNlbWVudFR5cGV9OwogICAgICAgICRUb29sdGlwVGV4dCA9ICREaXNwbGF5VGV4dDsKICAgIH0KICAgICMgQ2FzZSAyOiBNdWx0aXBsZSBhbm5vdW5jZW1lbnRzIHdpdGggZXhhY3RseSBvbmUgY3JpdGljYWwgLSBzaG93IHRoZSBjcml0aWNhbCBvbmUKICAgIGVsc2lmICggc2NhbGFyIEBDcml0aWNhbEFubm91bmNlbWVudHMgPT0gMSApIHsKICAgICAgICAkRGlzcGxheVRleHQgPSAkQ3JpdGljYWxBbm5vdW5jZW1lbnRzWzBdLT57VGl0bGV9OwogICAgICAgICREaXNwbGF5VHlwZSA9ICdjcml0aWNhbCc7CiAgICAgICAgJFRvb2x0aXBUZXh0ID0gIiRDb3VudCAiIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdhbm5vdW5jZW1lbnRzJykgLiAiIC0gIiAuICREaXNwbGF5VGV4dDsKICAgIH0KICAgICMgQ2FzZSAzOiBNdWx0aXBsZSBhbm5vdW5jZW1lbnRzIC0gc2hvdyBjb3VudAogICAgZWxzZSB7CiAgICAgICAgJERpc3BsYXlUZXh0ID0gIiRDb3VudCAiIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdhbm5vdW5jZW1lbnRzJyk7CiAgICAgICAgJFRvb2x0aXBUZXh0ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDbGljayB0byB2aWV3IGFsbCBhbm5vdW5jZW1lbnRzJyk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBEaXNwbGF5VGV4dCA9PiAkRGlzcGxheVRleHQsCiAgICAgICAgRGlzcGxheVR5cGUgPT4gJERpc3BsYXlUeXBlLAogICAgICAgIFRvb2x0aXBUZXh0ID0+ICRUb29sdGlwVGV4dCwKICAgIH07Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgoKPWN1dAo=</File>
        <File Permission="660" Location="Kernel/Output/HTML/FilterContent/AnnouncementLogin.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJDb250ZW50OjpBbm5vdW5jZW1lbnRMb2dpbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RmlsdGVyQ29udGVudDo6QW5ub3VuY2VtZW50TG9naW4gLSBJbmplY3QgYW5ub3VuY2VtZW50IGJhbm5lciBvbiBsb2dpbiBwYWdlcwoKPWhlYWQxIERFU0NSSVBUSU9OCgpUaGlzIG91dHB1dCBmaWx0ZXIgaW5qZWN0cyBhbm5vdW5jZW1lbnQgYmFubmVycyBvbiBsb2dpbiBwYWdlcyAoYm90aCBBZ2VudCBhbmQgQ3VzdG9tZXIpCmZvciBhbm5vdW5jZW1lbnRzIHRoYXQgaGF2ZSAiU2hvdyBCZWZvcmUgTG9naW4iIGVuYWJsZWQuCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQW5ub3VuY2VtZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFubm91bmNlbWVudCcpOwoKICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB0ZW1wbGF0ZSBkYXRhCiAgICByZXR1cm4gMSBpZiAhJFBhcmFte0RhdGF9OwogICAgcmV0dXJuIDEgaWYgcmVmICRQYXJhbXtEYXRhfSBuZSAnU0NBTEFSJzsKICAgIHJldHVybiAxIGlmICEkeyAkUGFyYW17RGF0YX0gfTsKCiAgICAjIElNUE9SVEFOVDogT25seSBzaG93IG9uIGFjdHVhbCBsb2dpbi9sb2dvdXQgcGFnZXMsIG5vdCBhZnRlciBsb2dpbgogICAgIyBDaGVjayBpZiB1c2VyIGlzIGFscmVhZHkgbG9nZ2VkIGluIGJ5IGxvb2tpbmcgZm9yIHNlc3Npb24vdXNlciBpbmRpY2F0b3JzCiAgICAjIElmIHRoZSBMYXlvdXRPYmplY3QgaGFzIGEgVXNlcklELCB0aGUgdXNlciBpcyBsb2dnZWQgaW4KICAgICMgRXhjZXB0aW9uOiBBbGxvdyBsb2dvdXQgcGFnZXMgKEFjdGlvbj1Mb2dvdXQpIHRvIHNob3cgYW5ub3VuY2VtZW50cwogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJEN1cnJlbnRBY3Rpb24gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQWN0aW9uJyApIHx8ICcnOwogICAgbXkgJElzTG9nb3V0UGFnZSA9ICggJEN1cnJlbnRBY3Rpb24gZXEgJ0xvZ291dCcgfHwgJEN1cnJlbnRBY3Rpb24gZXEgJ0N1c3RvbWVyTG9nb3V0JyApID8gMSA6IDA7CgogICAgaWYgKCAhJElzTG9nb3V0UGFnZSAmJiAoICRMYXlvdXRPYmplY3QtPntVc2VySUR9IHx8ICRMYXlvdXRPYmplY3QtPntFbnZSZWZ9LT57VXNlcklEfSApICkgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgQ2hlY2sgaWYgZmVhdHVyZSBpcyBlbmFibGVkCiAgICBteSAkRW5hYmxlZCA9ICRDb25maWdPYmplY3QtPkdldCgnQW5ub3VuY2VtZW50OjpFbmFibGVkJyk7CiAgICByZXR1cm4gMSBpZiAhJEVuYWJsZWQ7CgogICAgbXkgJFNob3dPbkxvZ2luID0gJENvbmZpZ09iamVjdC0+R2V0KCdBbm5vdW5jZW1lbnQ6OlNob3dPbkxvZ2luUGFnZScpOwogICAgcmV0dXJuIDEgaWYgISRTaG93T25Mb2dpbjsKCiAgICAjIERldGVybWluZSBpbnRlcmZhY2UgKEFnZW50IG9yIEN1c3RvbWVyKQogICAgbXkgJEludGVyZmFjZSA9ICdhZ2VudCc7CiAgICBpZiAoICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17Q3VzdG9tZXJMb2dpbn1pIHx8ICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17Y3VzdG9tZXJcLnBsfWkgKSB7CiAgICAgICAgJEludGVyZmFjZSA9ICdjdXN0b21lcic7CiAgICB9CgogICAgIyBHZXQgbG9naW4gYW5ub3VuY2VtZW50cwogICAgbXkgQEFubm91bmNlbWVudHMgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRMb2dpbkFubm91bmNlbWVudHMoIEludGVyZmFjZSA9PiAkSW50ZXJmYWNlICk7CgogICAgIyBSZXR1cm4gaWYgbm8gYW5ub3VuY2VtZW50cyB0byBzaG93CiAgICByZXR1cm4gMSBpZiAhQEFubm91bmNlbWVudHM7CgogICAgIyBSZW5kZXIgdGhlIGxvZ2luIGJhbm5lciB0ZW1wbGF0ZQogICAgbXkgJEJhbm5lckhUTUwgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBbm5vdW5jZW1lbnQvTG9naW5CYW5uZXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEFubm91bmNlbWVudHMgPT4gXEBBbm5vdW5jZW1lbnRzLAogICAgICAgICAgICBJbnRlcmZhY2UgICAgID0+ICRJbnRlcmZhY2UsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBCdWlsZCBiYW5uZXIgSFRNTCBkaXJlY3RseSBpZiB0ZW1wbGF0ZSBmYWlscwogICAgaWYgKCAhJEJhbm5lckhUTUwgKSB7CiAgICAgICAgJEJhbm5lckhUTUwgPSAkU2VsZi0+X0J1aWxkQmFubmVySFRNTCggXEBBbm5vdW5jZW1lbnRzLCAkTGF5b3V0T2JqZWN0ICk7CiAgICB9CgogICAgIyBJbmplY3QgYmFubmVyIGF0IGFwcHJvcHJpYXRlIHBvc2l0aW9uCiAgICBpZiAoJEJhbm5lckhUTUwpIHsKICAgICAgICAjIEN1c3RvbWVyIGxvZ291dDogaW5qZWN0IGRpcmVjdGx5IGFmdGVyIE1haW5Cb3ggb3BlbmluZyB0YWcKICAgICAgICBpZiAoICRJc0xvZ291dFBhZ2UgJiYgJEludGVyZmFjZSBlcSAnY3VzdG9tZXInICYmICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17KDxkaXZbXj5dKmlkPSJNYWluQm94IltePl0qPil9aSApIHsKICAgICAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3soPGRpdltePl0qaWQ9Ik1haW5Cb3giW14+XSo+KX17JDFcbiRCYW5uZXJIVE1MfWk7CiAgICAgICAgfQogICAgICAgICMgQ3VzdG9tZXIgbG9naW46IGluamVjdCBiZWZvcmUgRXJyb3JCb3ggZGl2CiAgICAgICAgZWxzaWYgKCAkSW50ZXJmYWNlIGVxICdjdXN0b21lcicgJiYgJHsgJFBhcmFte0RhdGF9IH0gPX4gbXs8ZGl2W14+XSpjbGFzcz0iW14iXSpFcnJvckJveFteIl0qIltePl0qPn1pICkgewogICAgICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzeyg8ZGl2W14+XSpjbGFzcz0iW14iXSpFcnJvckJveFteIl0qIltePl0qPil9eyRCYW5uZXJIVE1MXG4kMX1pOwogICAgICAgIH0KICAgICAgICAjIEN1c3RvbWVyIGxvZ2luIGZhbGxiYWNrOiBpbmplY3QgYmVmb3JlIENvbnRhaW5lciBkaXYKICAgICAgICBlbHNpZiAoICRJbnRlcmZhY2UgZXEgJ2N1c3RvbWVyJyAmJiAkeyAkUGFyYW17RGF0YX0gfSA9fiBtezxkaXZbXj5dKmlkPSJDb250YWluZXIiW14+XSo+fWkgKSB7CiAgICAgICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7KDxkaXZbXj5dKmlkPSJDb250YWluZXIiW14+XSo+KX17JEJhbm5lckhUTUxcbiQxfWk7CiAgICAgICAgfQogICAgICAgICMgQWdlbnQgbG9naW46IGluamVjdCBhZnRlciA8L25vc2NyaXB0PiBpbnNpZGUgTWFpbkJveAogICAgICAgIGVsc2lmICggJHsgJFBhcmFte0RhdGF9IH0gPX4gbXs8ZGl2W14+XSppZD0iTWFpbkJveCJbXj5dKmNsYXNzPSJbXiJdKkxvZ2luW14iXSoiW14+XSo+Lio/PC9ub3NjcmlwdD59aXMgKSB7CiAgICAgICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7KDwvbm9zY3JpcHQ+XHMqKShccyo8ZGl2W14+XSooPzppZD0iT2xkQnJvd3NlciJ8Y2xhc3M9IkhpZGRlbiJbXj5dKmlkPSJPbGRCcm93c2VyIikpfXskMVxuJEJhbm5lckhUTUxcbiQyfWlzOwogICAgICAgIH0KICAgICAgICAjIEFsdGVybmF0aXZlOiBpbmplY3QgYWZ0ZXIgPC9ub3NjcmlwdD4gYW55d2hlcmUKICAgICAgICBlbHNpZiAoICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17PC9ub3NjcmlwdD59aSApIHsKICAgICAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3soPC9ub3NjcmlwdD4pfXskMVxuJEJhbm5lckhUTUx9aTsKICAgICAgICB9CiAgICAgICAgIyBGYWxsYmFjazogaW5qZWN0IGFmdGVyIE1haW5Cb3ggb3BlbmluZyB0YWcKICAgICAgICBlbHNpZiAoICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17KDxkaXZbXj5dKmlkPSJNYWluQm94IltePl0qPil9aSApIHsKICAgICAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3soPGRpdltePl0qaWQ9Ik1haW5Cb3giW14+XSo+KX17JDFcbiRCYW5uZXJIVE1MfWk7CiAgICAgICAgfQogICAgICAgICMgTGFzdCByZXNvcnQ6IGluamVjdCBhZnRlciA8Ym9keS4uLj4KICAgICAgICBlbHNpZiAoICR7ICRQYXJhbXtEYXRhfSB9ID1+IG17KDxib2R5W14+XSo+KX1pICkgewogICAgICAgICAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzeyg8Ym9keVtePl0qPil9eyQxXG4kQmFubmVySFRNTH1pOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9CdWlsZEJhbm5lckhUTUwgewogICAgbXkgKCAkU2VsZiwgJEFubm91bmNlbWVudHMsICRMYXlvdXRPYmplY3QgKSA9IEBfOwoKICAgIG15ICRIVE1MID0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudExvZ2luQmFubmVyIj4nOwoKICAgIGZvciBteSAkQW5ub3VuY2VtZW50ICggQHskQW5ub3VuY2VtZW50c30gKSB7CiAgICAgICAgbXkgJFR5cGUgICAgICA9ICRBbm5vdW5jZW1lbnQtPntBbm5vdW5jZW1lbnRUeXBlfSB8fCAnaW5mbyc7CiAgICAgICAgbXkgJFRpdGxlICAgICA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEFubm91bmNlbWVudC0+e1RpdGxlfSApOwogICAgICAgIG15ICRCb2R5ICAgICAgPSAkQW5ub3VuY2VtZW50LT57Qm9keX07ICAjIEFscmVhZHkgSFRNTCBmcm9tIFdZU0lXWUcKCiAgICAgICAgbXkgJEljb25DbGFzcyA9ICdmYS1pbmZvLWNpcmNsZSc7CiAgICAgICAgaWYgKCAkVHlwZSBlcSAnd2FybmluZycgKSB7CiAgICAgICAgICAgICRJY29uQ2xhc3MgPSAnZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUeXBlIGVxICdjcml0aWNhbCcgKSB7CiAgICAgICAgICAgICRJY29uQ2xhc3MgPSAnZmEtZXhjbGFtYXRpb24tY2lyY2xlJzsKICAgICAgICB9CgogICAgICAgICRIVE1MIC49IHFxewo8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9faXRlbSBBbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9faXRlbS0tJFR5cGUiPgogICAgPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50TG9naW5CYW5uZXJfX2ljb24iPgogICAgICAgIDxpIGNsYXNzPSJmYSAkSWNvbkNsYXNzIj48L2k+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkFubm91bmNlbWVudExvZ2luQmFubmVyX19jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9fdGl0bGUiPiRUaXRsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkFubm91bmNlbWVudExvZ2luQmFubmVyX19ib2R5Ij4kQm9keTwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgp9OwogICAgfQoKICAgICRIVE1MIC49ICc8L2Rpdj4nOwoKICAgICMgQWRkIGlubGluZSBDU1MgZm9yIGxvZ2luIHBhZ2UgKGluc2lkZSBNYWluQm94KQogICAgJEhUTUwgLj0gcXsKPHN0eWxlPgouQW5ub3VuY2VtZW50TG9naW5CYW5uZXIgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQouQW5ub3VuY2VtZW50TG9naW5CYW5uZXJfX2l0ZW0gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgcGFkZGluZzogMTJweCAxNXB4OwogICAgbWFyZ2luLXRvcDogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpOwp9Ci5Bbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9faXRlbS0taW5mbyB7CiAgICBiYWNrZ3JvdW5kOiAjZDllZGY3OwogICAgYm9yZGVyOiAxcHggc29saWQgI2JjZThmMTsKICAgIGNvbG9yOiAjMzE3MDhmOwp9Ci5Bbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9faXRlbS0td2FybmluZyB7CiAgICBiYWNrZ3JvdW5kOiAjZmNmOGUzOwogICAgYm9yZGVyOiAxcHggc29saWQgI2ZhZWJjYzsKICAgIGNvbG9yOiAjOGE2ZDNiOwp9Ci5Bbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9faXRlbS0tY3JpdGljYWwgewogICAgYmFja2dyb3VuZDogI2YyZGVkZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNlYmNjZDE7CiAgICBjb2xvcjogI2E5NDQ0MjsKfQouQW5ub3VuY2VtZW50TG9naW5CYW5uZXJfX2ljb24gewogICAgZm9udC1zaXplOiAyMHB4OwogICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KLkFubm91bmNlbWVudExvZ2luQmFubmVyX19jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KLkFubm91bmNlbWVudExvZ2luQmFubmVyX190aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbWFyZ2luLWJvdHRvbTogNHB4Owp9Ci5Bbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9fYm9keSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS40Owp9Ci5Bbm5vdW5jZW1lbnRMb2dpbkJhbm5lcl9fYm9keSBwIHsKICAgIG1hcmdpbjogMDsKfQo8L3N0eWxlPgp9OwoKICAgIHJldHVybiAkSFRNTDsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCgo9Y3V0Cg==</File>

        <!-- Templates - Admin -->
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/AgentAnnouncement.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0IEFjdGlvbnNTaWRlQmFyIiByb2xlPSJtYWluIj4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIEFjdGlvbnNTaWRlQmFyQ29tcCI+ClslIElGIERhdGEuSGFzV3JpdGVQZXJtaXNzaW9uICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUFkZCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIENyZWF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT4gWyUgVHJhbnNsYXRlKCJBZGQgQW5ub3VuY2VtZW50IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBFTFNFICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk5vdGUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJZb3UgaGF2ZSByZWFkLW9ubHkgYWNjZXNzLiBUbyBjcmVhdGUgb3IgZWRpdCBhbm5vdW5jZW1lbnRzLCB5b3UgbmVlZCBSVyBwZXJtaXNzaW9uIGluIHRoZSBBbm5vdW5jZW1lbnRNYW5hZ2VyIGdyb3VwLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgRU5EICVdCgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07RmlsdGVyPWFsbCIgY2xhc3M9IlslIElGIERhdGEuRmlsdGVyID09ICdhbGwnICVdQWN0aXZlWyUgRU5EICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQWxsIikgfCBodG1sICVdIChbJSBEYXRhLkZpbHRlckFsbCB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07RmlsdGVyPWFjdGl2ZSIgY2xhc3M9IlslIElGIERhdGEuRmlsdGVyID09ICdhY3RpdmUnICVdQWN0aXZlWyUgRU5EICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQWN0aXZlIikgfCBodG1sICVdIChbJSBEYXRhLkZpbHRlckFjdGl2ZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07RmlsdGVyPXNjaGVkdWxlZCIgY2xhc3M9IlslIElGIERhdGEuRmlsdGVyID09ICdzY2hlZHVsZWQnICVdQWN0aXZlWyUgRU5EICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU2NoZWR1bGVkIikgfCBodG1sICVdIChbJSBEYXRhLkZpbHRlclNjaGVkdWxlZCB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07RmlsdGVyPWV4cGlyZWQiIGNsYXNzPSJbJSBJRiBEYXRhLkZpbHRlciA9PSAnZXhwaXJlZCcgJV1BY3RpdmVbJSBFTkQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeHBpcmVkIikgfCBodG1sICVdIChbJSBEYXRhLkZpbHRlckV4cGlyZWQgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSGludCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkNyZWF0ZSBhbm5vdW5jZW1lbnRzIGZvciBtYWludGVuYW5jZSB3aW5kb3dzIG9yIGluY2lkZW50cy4gQW5ub3VuY2VtZW50cyBjYW4gYmUgZGlzcGxheWVkIHRvIGFnZW50cyBhbmQvb3IgY3VzdG9tZXJzIGluIHRoZSBoZWFkZXIgYXJlYS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJBbm5vdW5jZW1lbnRzIikgfCBodG1sICVdPC9oMT4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFubm91bmNlbWVudHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IkFubm91bmNlbWVudFRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQXVkaWVuY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiT3B0aW9ucyIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdPC90aD4KWyUgSUYgRGF0YS5IYXNXcml0ZVBlcm1pc3Npb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIj5bJSBUcmFuc2xhdGUoIkR1cGxpY2F0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNlbnRlciI+WyUgVHJhbnNsYXRlKCJPZmZsaW5lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvdGg+ClslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSJbJSBJRiBEYXRhLkhhc1dyaXRlUGVybWlzc2lvbiAlXTlbJSBFTFNFICVdNlslIEVORCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBhbm5vdW5jZW1lbnRzIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQW5ub3VuY2VtZW50Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJBbm5vdW5jZW1lbnRUeXBlQmFkZ2UgQW5ub3VuY2VtZW50VHlwZUJhZGdlLS1bJSBEYXRhLlR5cGVDbGFzcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5Bbm5vdW5jZW1lbnRUeXBlKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgpbJSBJRiBEYXRhLkhhc1dyaXRlUGVybWlzc2lvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1FZGl0O0lEPVslIERhdGEuSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVGl0bGUgfCB0cnVuY2F0ZSg2MCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgpbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlRpdGxlIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXTwvc3Bhbj4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQXVkaWVuY2VEaXNwbGF5IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5WYWxpZGl0eURpc3BsYXkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTG9naW5CYWRnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkFubm91bmNlbWVudE9wdGlvbkJhZGdlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IGJlZm9yZSBsb2dpbiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zaWduLWluIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiTG9naW5CYWRnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRvck5hbWUgfCBodG1sICVdPC90ZD4KWyUgSUYgRGF0YS5IYXNXcml0ZVBlcm1pc3Npb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249RHVwbGljYXRlO0lEPVslIERhdGEuSUQgfCB1cmkgJV07WyUgRW52KCJDaGFsbGVuZ2VUb2tlblBhcmFtIikgfCBodG1sICVdIiBjbGFzcz0iQXNCbG9jayBBbm5vdW5jZW1lbnREdXBsaWNhdGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkR1cGxpY2F0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2V0T2ZmbGluZTtJRD1bJSBEYXRhLklEIHwgdXJpICVdO1slIEVudigiQ2hhbGxlbmdlVG9rZW5QYXJhbSIpIHwgaHRtbCAlXSIgY2xhc3M9IkFzQmxvY2sgQW5ub3VuY2VtZW50U2V0T2ZmbGluZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2V0IG9mZmxpbmUiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249RGVsZXRlO0lEPVslIERhdGEuSUQgfCB1cmkgJV07WyUgRW52KCJDaGFsbGVuZ2VUb2tlblBhcmFtIikgfCBodG1sICVdIiBjbGFzcz0iQXNCbG9jayBBbm5vdW5jZW1lbnREZWxldGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJBbm5vdW5jZW1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxzdHlsZT4KLkFubm91bmNlbWVudFR5cGVCYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwYWRkaW5nOiAycHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9Ci5Bbm5vdW5jZW1lbnRUeXBlQmFkZ2UtLWluZm8gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNzsKICAgIGNvbG9yOiAjMzE3MDhmOwp9Ci5Bbm5vdW5jZW1lbnRUeXBlQmFkZ2UtLXdhcm5pbmcgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMzsKICAgIGNvbG9yOiAjOGE2ZDNiOwp9Ci5Bbm5vdW5jZW1lbnRUeXBlQmFkZ2UtLWNyaXRpY2FsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7CiAgICBjb2xvcjogI2E5NDQ0MjsKfQouQW5ub3VuY2VtZW50T3B0aW9uQmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogIzc3NzsKfQouU2lkZWJhckNvbHVtbiAuQWN0aW9uTGlzdCBsaSBhLkFjdGl2ZSB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjZjkyOwp9Ci8qIEljb24gaG92ZXIgZWZmZWN0IC0gWm51bnkgc3RhbmRhcmQgb3JhbmdlICovCiNBbm5vdW5jZW1lbnRUYWJsZSB0ZCBhLkFzQmxvY2sgewogICAgY29sb3I6ICM3Nzc7CiAgICBwYWRkaW5nOiAycHggNXB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CiNBbm5vdW5jZW1lbnRUYWJsZSB0ZCBhLkFzQmxvY2s6aG92ZXIgewogICAgY29sb3I6ICNmOTI7Cn0KI0Fubm91bmNlbWVudFRhYmxlIHRkIGEuQXNCbG9jazpob3ZlciBpIHsKICAgIGNvbG9yOiAjZjkyOwp9Cjwvc3R5bGU+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCihmdW5jdGlvbiB3YWl0Rm9yQ29yZSgpIHsKICAgIGlmICh0eXBlb2YgQ29yZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIENvcmUuQXBwICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQ29yZS5BcHAuUmVhZHkgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICBDb3JlLkFwcC5SZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gQ29uZmlybSBkZWxldGUKICAgICAgICAgICAgJCgnLkFubm91bmNlbWVudERlbGV0ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmICghY29uZmlybSgnWyUgVHJhbnNsYXRlKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgYW5ub3VuY2VtZW50PyIpIHwgaHRtbCAlXScpKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBDb25maXJtIG9mZmxpbmUKICAgICAgICAgICAgJCgnLkFubm91bmNlbWVudFNldE9mZmxpbmUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm0oJ1slIFRyYW5zbGF0ZSgiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNldCB0aGlzIGFubm91bmNlbWVudCBvZmZsaW5lPyIpIHwgaHRtbCAlXScpKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIHNldFRpbWVvdXQod2FpdEZvckNvcmUsIDUwKTsKICAgIH0KfSkoKTsKLy9dXT4KPC9zY3JpcHQ+Cg==</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/AgentAnnouncementForm.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0IEFjdGlvbnNTaWRlQmFyIiByb2xlPSJtYWluIj4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIEFjdGlvbnNTaWRlQmFyQ29tcCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkhpbnQiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIkluZm8iKSB8IGh0bWwgJV06PC9zdHJvbmc+IFslIFRyYW5zbGF0ZSgiR2VuZXJhbCBpbmZvcm1hdGlvbiwgbm8gaW1tZWRpYXRlIGFjdGlvbiByZXF1aXJlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiV2FybmluZyIpIHwgaHRtbCAlXTo8L3N0cm9uZz4gWyUgVHJhbnNsYXRlKCJJbXBvcnRhbnQgbm90aWNlLCBwb3RlbnRpYWwgaW1wYWN0IG9uIHdvcmsuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIkNyaXRpY2FsIikgfCBodG1sICVdOjwvc3Ryb25nPiBbJSBUcmFuc2xhdGUoIlVyZ2VudCBpc3N1ZSByZXF1aXJpbmcgaW1tZWRpYXRlIGF0dGVudGlvbi4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPlslIERhdGEuSGVhZGVyVGl0bGUgfCBodG1sICVdPC9oMT4KCiAgICAgICAgPHVsIGNsYXNzPSJCcmVhZENydW1iIj4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkFubm91bmNlbWVudHMiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiQW5ub3VuY2VtZW50cyIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWFuZ2xlLXJpZ2h0Ij48L2k+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFslIERhdGEuSGVhZGVyVGl0bGUgfCBodG1sICVdCiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBEYXRhLkhlYWRlclRpdGxlIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyIgaWQ9IkFubm91bmNlbWVudEZvcm0iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJbJSBEYXRhLlN1YmFjdGlvbiB8IGh0bWwgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFsbGVuZ2VUb2tlbiIgdmFsdWU9IlslIEVudigiVXNlckNoYWxsZW5nZVRva2VuIikgfCBodG1sICVdIi8+ClslIElGIERhdGEuSUQgJV0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIi8+ClslIEVORCAlXQoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUaXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRpdGxlIiBpZD0iVGl0bGUiIHZhbHVlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuVGl0bGVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyNTUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRpdGxlRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iQm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDb250ZW50IikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBSaWNoVGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iQm9keSIgaWQ9IkJvZHkiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLkJvZHlJbnZhbGlkIHwgaHRtbCAlXSIgcm93cz0iMTUiIGNvbHM9IjgwIj5bJSBEYXRhLkJvZHkgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQm9keUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQm9keVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQW5ub3VuY2VtZW50VHlwZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlNlbGVjdCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhpcyBhbm5vdW5jZW1lbnQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGFyZ2V0QXVkaWVuY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUYXJnZXQgQXVkaWVuY2UiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQXVkaWVuY2VTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJTZWxlY3Qgd2hvIHNob3VsZCBzZWUgdGhpcyBhbm5vdW5jZW1lbnQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRGcm9tRGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlZhbGlkIGZyb20iKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkRhdGVUaW1lRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJkYXRlIiBuYW1lPSJWYWxpZEZyb21EYXRlIiBpZD0iVmFsaWRGcm9tRGF0ZSIgdmFsdWU9IlslIERhdGEuVmFsaWRGcm9tRGF0ZSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGltZSIgbmFtZT0iVmFsaWRGcm9tVGltZSIgaWQ9IlZhbGlkRnJvbVRpbWUiIHZhbHVlPSJbJSBEYXRhLlZhbGlkRnJvbVRpbWUgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJEYXRlVGltZUNsZWFyIiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnVmFsaWRGcm9tRGF0ZScpLnZhbHVlPScnOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnVmFsaWRGcm9tVGltZScpLnZhbHVlPScnOyByZXR1cm4gZmFsc2U7IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDbGVhciIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIkxlYXZlIGVtcHR5IHRvIHN0YXJ0IGltbWVkaWF0ZWx5LiBUaW1lIGlzIGluIHlvdXIgbG9jYWwgdGltZXpvbmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRUb0RhdGUiIGNsYXNzPSJbJSBEYXRhLlZhbGlkVG9JbnZhbGlkIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlZhbGlkIHVudGlsIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJEYXRlVGltZUZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZGF0ZSIgbmFtZT0iVmFsaWRUb0RhdGUiIGlkPSJWYWxpZFRvRGF0ZSIgdmFsdWU9IlslIERhdGEuVmFsaWRUb0RhdGUgfCBodG1sICVdIiBjbGFzcz0iWyUgRGF0YS5WYWxpZFRvSW52YWxpZCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGltZSIgbmFtZT0iVmFsaWRUb1RpbWUiIGlkPSJWYWxpZFRvVGltZSIgdmFsdWU9IlslIERhdGEuVmFsaWRUb1RpbWUgfCBodG1sICVdIiBjbGFzcz0iWyUgRGF0YS5WYWxpZFRvSW52YWxpZCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IkRhdGVUaW1lQ2xlYXIiIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdWYWxpZFRvRGF0ZScpLnZhbHVlPScnOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnVmFsaWRUb1RpbWUnKS52YWx1ZT0nJzsgcmV0dXJuIGZhbHNlOyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ2xlYXIiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJWYWxpZFRvU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlZhbGlkIHVudGlsIG11c3QgYmUgYWZ0ZXIgVmFsaWQgZnJvbS4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIkxlYXZlIGVtcHR5IGZvciBubyBlbmQgZGF0ZS4gVGltZSBpcyBpbiB5b3VyIGxvY2FsIHRpbWV6b25lLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNob3dCZWZvcmVMb2dpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNob3cgYmVmb3JlIGxvZ2luIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IlNob3dCZWZvcmVMb2dpbiIgaWQ9IlNob3dCZWZvcmVMb2dpbiIgdmFsdWU9IjEiIFslIERhdGEuU2hvd0JlZm9yZUxvZ2luQ2hlY2tlZCAlXS8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJEaXNwbGF5IHRoaXMgYW5ub3VuY2VtZW50IG9uIHRoZSBsb2dpbiBwYWdlIGJlZm9yZSBhdXRoZW50aWNhdGlvbi4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIFNhdmVCdXR0b25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iYnRuLWNhbmNlbC1naG9zdCBidG4tbWFpbiBidG4td2lkdGgtbWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IGJ0bi1wcmltYXJ5IGJ0bi1tYWluIGJ0bi13aWR0aC1tZCIgdHlwZT0ic3VibWl0IiBuYW1lPSJTdWJtaXRBbmRDbG9zZSIgdmFsdWU9IjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxzdHlsZT4KLyogWm51bnktc3R5bGUgZGF0ZXRpbWUgaW5wdXQgc3R5bGluZyAqLwouRGF0ZVRpbWVGaWVsZCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OwogICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGdhcDogNXB4Owp9CgouRGF0ZVRpbWVGaWVsZCBpbnB1dFt0eXBlPSJkYXRlIl0sCi5EYXRlVGltZUZpZWxkIGlucHV0W3R5cGU9InRpbWUiXSB7CiAgICBwYWRkaW5nOiA0cHggOHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAzcHggIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAyOHB4ICFpbXBvcnRhbnQ7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5EYXRlVGltZUZpZWxkIGlucHV0W3R5cGU9ImRhdGUiXSB7CiAgICB3aWR0aDogMTQwcHggIWltcG9ydGFudDsKfQoKLkRhdGVUaW1lRmllbGQgaW5wdXRbdHlwZT0idGltZSJdIHsKICAgIHdpZHRoOiAxMDBweCAhaW1wb3J0YW50Owp9CgouRGF0ZVRpbWVGaWVsZCBpbnB1dFt0eXBlPSJkYXRlIl06Zm9jdXMsCi5EYXRlVGltZUZpZWxkIGlucHV0W3R5cGU9InRpbWUiXTpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6ICNmOTIgIWltcG9ydGFudDsKICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogQ2xlYXIgYnV0dG9uIGZvciBkYXRldGltZSBmaWVsZHMgKi8KYnV0dG9uLkRhdGVUaW1lQ2xlYXIgewogICAgYmFja2dyb3VuZDogI2Y1ZjVmNSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogM3B4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA0cHggOHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDI4cHggIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjNjY2ICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7Cn0KCmJ1dHRvbi5EYXRlVGltZUNsZWFyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNlMGUwZTAgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogIzk5OSAhaW1wb3J0YW50OwogICAgY29sb3I6ICMzMzMgIWltcG9ydGFudDsKfQoKYnV0dG9uLkRhdGVUaW1lQ2xlYXI6YWN0aXZlIHsKICAgIGJhY2tncm91bmQ6ICNkMGQwZDAgIWltcG9ydGFudDsKfQoKPC9zdHlsZT4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKKGZ1bmN0aW9uIHdhaXRGb3JDb3JlKCkgewogICAgaWYgKHR5cGVvZiBDb3JlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQ29yZS5BcHAgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBDb3JlLkFwcC5SZWFkeSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgIENvcmUuQXBwLlJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAvLyBEaXNhYmxlIGF1dG9jb21wbGV0ZSBmb3IgZGF0ZSBmaWVsZHMKICAgICAgICAgICAgJCgnI1ZhbGlkRnJvbURhdGUsICNWYWxpZEZyb21UaW1lLCAjVmFsaWRUb0RhdGUsICNWYWxpZFRvVGltZScpLmF0dHIoJ2F1dG9jb21wbGV0ZScsICdvZmYnKTsKCiAgICAgICAgICAgIC8vIENsaWVudC1zaWRlIGRhdGUgcmFuZ2UgdmFsaWRhdGlvbgogICAgICAgICAgICAkKCcjQW5ub3VuY2VtZW50Rm9ybScpLm9uKCdzdWJtaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICB2YXIgVmFsaWRGcm9tRGF0ZSA9ICQoJyNWYWxpZEZyb21EYXRlJykudmFsKCk7CiAgICAgICAgICAgICAgICB2YXIgVmFsaWRGcm9tVGltZSA9ICQoJyNWYWxpZEZyb21UaW1lJykudmFsKCkgfHwgJzAwOjAwJzsKICAgICAgICAgICAgICAgIHZhciBWYWxpZFRvRGF0ZSA9ICQoJyNWYWxpZFRvRGF0ZScpLnZhbCgpOwogICAgICAgICAgICAgICAgdmFyIFZhbGlkVG9UaW1lID0gJCgnI1ZhbGlkVG9UaW1lJykudmFsKCkgfHwgJzAwOjAwJzsKCiAgICAgICAgICAgICAgICAvLyBDbGVhciBhbnkgcHJldmlvdXMgZXJyb3Igc3R5bGluZwogICAgICAgICAgICAgICAgJCgnI1ZhbGlkVG9EYXRlLCAjVmFsaWRUb1RpbWUnKS5yZW1vdmVDbGFzcygnRXJyb3InKTsKCiAgICAgICAgICAgICAgICAvLyBPbmx5IHZhbGlkYXRlIGlmIGJvdGggZGF0ZXMgYXJlIHNldAogICAgICAgICAgICAgICAgaWYgKFZhbGlkRnJvbURhdGUgJiYgVmFsaWRUb0RhdGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgVmFsaWRGcm9tID0gbmV3IERhdGUoVmFsaWRGcm9tRGF0ZSArICdUJyArIFZhbGlkRnJvbVRpbWUpOwogICAgICAgICAgICAgICAgICAgIHZhciBWYWxpZFRvID0gbmV3IERhdGUoVmFsaWRUb0RhdGUgKyAnVCcgKyBWYWxpZFRvVGltZSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChWYWxpZFRvIDw9IFZhbGlkRnJvbSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIGZpZWxkcyBhcyBpbnZhbGlkIChzYW1lIGFzIFRpdGxlIGZpZWxkKQogICAgICAgICAgICAgICAgICAgICAgICAkKCcjVmFsaWRUb0RhdGUsICNWYWxpZFRvVGltZScpLmFkZENsYXNzKCdFcnJvcicpOwogICAgICAgICAgICAgICAgICAgICAgICAkKCcjVmFsaWRUb0RhdGUnKS5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgICBzZXRUaW1lb3V0KHdhaXRGb3JDb3JlLCA1MCk7CiAgICB9Cn0pKCk7Ci8vXV0+Cjwvc2NyaXB0Pgo=</File>

        <!-- Templates - Frontend -->
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/Announcement/Init.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8IS0tIEFubm91bmNlbWVudCBJbml0aWFsaXphdGlvbiAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwogICAgLy8gV2FpdCBmb3IgQ29yZS5Db25maWcgdG8gYmUgYXZhaWxhYmxlCiAgICAoZnVuY3Rpb24gd2FpdEZvckNvcmUoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBDb3JlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQ29yZS5Db25maWcgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBDb3JlLkNvbmZpZy5TZXQgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgaW5pdEFubm91bmNlbWVudCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQod2FpdEZvckNvcmUsIDUwKTsKICAgICAgICB9CiAgICB9KSgpOwoKICAgIGZ1bmN0aW9uIGluaXRBbm5vdW5jZW1lbnQoKSB7CiAgICAgICAgLy8gU2V0IGNvbmZpZ3VyYXRpb24KICAgICAgICBDb3JlLkNvbmZpZy5TZXQoJ0Fubm91bmNlbWVudCcsIHsKICAgICAgICAgICAgSW50ZXJmYWNlOiAnWyUgRGF0YS5JbnRlcmZhY2UgfCBodG1sICVdJywKICAgICAgICAgICAgQ2FjaGVUVEw6IFslIERhdGEuQ2FjaGVUVEwgfCBodG1sICVdLAogICAgICAgICAgICBJbml0aWFsQ291bnQ6IFslIERhdGEuQW5ub3VuY2VtZW50Q291bnQgfCBodG1sICVdLAogICAgICAgICAgICBIaWdoZXN0UHJpb3JpdHk6ICdbJSBEYXRhLkhpZ2hlc3RQcmlvcml0eSB8IGh0bWwgJV0nCiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCBpbml0aWFsIGFubm91bmNlbWVudHMgZGF0YQogICAgICAgIENvcmUuQ29uZmlnLlNldCgnQW5ub3VuY2VtZW50LkRhdGEnLCBbJSBEYXRhLkFubm91bmNlbWVudHNKU09OICVdKTsKCiAgICAgICAgLy8gU2V0IHRyYW5zbGF0aW9ucwogICAgICAgIENvcmUuQ29uZmlnLlNldCgnQW5ub3VuY2VtZW50LlRyYW5zbGF0aW9ucycsIHsKICAgICAgICAgICAgJ0Fubm91bmNlbWVudHMnOiAnWyUgVHJhbnNsYXRlKCJBbm5vdW5jZW1lbnRzIikgfCBodG1sICVdJywKICAgICAgICAgICAgJ05vIGFubm91bmNlbWVudHMnOiAnWyUgVHJhbnNsYXRlKCJObyBhbm5vdW5jZW1lbnRzIikgfCBodG1sICVdJywKICAgICAgICAgICAgJ1Nob3cgYWxsJzogJ1slIFRyYW5zbGF0ZSgiU2hvdyBhbGwiKSB8IGh0bWwgJV0nLAogICAgICAgICAgICAnQ2xvc2UnOiAnWyUgVHJhbnNsYXRlKCJDbG9zZSIpIHwgaHRtbCAlXScsCiAgICAgICAgICAgICdJbmZvJzogJ1slIFRyYW5zbGF0ZSgiSW5mbyIpIHwgaHRtbCAlXScsCiAgICAgICAgICAgICdXYXJuaW5nJzogJ1slIFRyYW5zbGF0ZSgiV2FybmluZyIpIHwgaHRtbCAlXScsCiAgICAgICAgICAgICdDcml0aWNhbCc6ICdbJSBUcmFuc2xhdGUoIkNyaXRpY2FsIikgfCBodG1sICVdJywKICAgICAgICAgICAgJ1ZhbGlkIGZyb20nOiAnWyUgVHJhbnNsYXRlKCJWYWxpZCBmcm9tIikgfCBodG1sICVdJywKICAgICAgICAgICAgJ1ZhbGlkIHVudGlsJzogJ1slIFRyYW5zbGF0ZSgiVmFsaWQgdW50aWwiKSB8IGh0bWwgJV0nLAogICAgICAgICAgICAnYW5ub3VuY2VtZW50cyc6ICdbJSBUcmFuc2xhdGUoImFubm91bmNlbWVudHMiKSB8IGh0bWwgJV0nLAogICAgICAgICAgICAnQ2xpY2sgdG8gdmlldyBhbGwgYW5ub3VuY2VtZW50cyc6ICdbJSBUcmFuc2xhdGUoIkNsaWNrIHRvIHZpZXcgYWxsIGFubm91bmNlbWVudHMiKSB8IGh0bWwgJV0nCiAgICAgICAgfSk7CgogICAgICAgIC8vIENhbGwgdGhlIGludGVyZmFjZSBtb2R1bGUncyBvd24gSW5pdCgpIGRpcmVjdGx5LCBvbmNlIHRoZSBET00gaXMKICAgICAgICAvLyByZWFkeSwgaW5zdGVhZCBvZiBsZWF2aW5nIGl0IHRvIHRoYXQgbW9kdWxlJ3Mgb3duCiAgICAgICAgLy8gQ29yZS5BcHAuUmVhZHkoKSByZWdpc3RyYXRpb24uIENvcmUuQXBwLlJlYWR5KCkgb25seSBmaXJlcyBvbmNlLAogICAgICAgIC8vIGF0IHdoYXRldmVyIG1vbWVudCAkKGRvY3VtZW50KS5yZWFkeSByZXNvbHZlcyAtIGlmIHRoYXQgaGFwcGVucwogICAgICAgIC8vIGJlZm9yZSB0aGlzIHdhaXRGb3JDb3JlKCkgcG9sbGluZyBsb29wIGhhcyByZWFjaGVkIHRoaXMgcG9pbnQKICAgICAgICAvLyAoaS5lLiBiZWZvcmUgQ29yZS5Db25maWcuR2V0KCdBbm5vdW5jZW1lbnQnKSBoYXMgYW55dGhpbmcgdG8KICAgICAgICAvLyByZXR1cm4geWV0KSwgdGhlIG1vZHVsZSdzIG93biAiaWYgKENvcmUuQ29uZmlnLkdldCgnQW5ub3VuY2VtZW50JykpIgogICAgICAgIC8vIGd1YXJkIHNpbGVudGx5IHNraXBzIEluaXQoKSBmb3JldmVyLCB3aXRoIG5vIGVycm9yIGFuZCBubyByZXRyeS4KICAgICAgICAvLyBEcml2aW5nIGl0IGZyb20gaGVyZSByZW1vdmVzIHRoYXQgcmFjZSBlbnRpcmVseSAtIGJ5IHRoZSB0aW1lCiAgICAgICAgLy8gdGhpcyBsaW5lIHJ1bnMsIHRoZSBjb25maWcgYWJvdmUgaXMgYWxyZWFkeSBzZXQuCiAgICAgICAgZnVuY3Rpb24gQ2FsbE1vZHVsZUluaXQoKSB7CiAgICAgICAgICAgIGlmIChDb3JlLkFnZW50ICYmIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50ICYmIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50LkluaXQpIHsKICAgICAgICAgICAgICAgIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50LkluaXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQ29yZS5DdXN0b21lciAmJiBDb3JlLkN1c3RvbWVyLkFubm91bmNlbWVudCAmJiBDb3JlLkN1c3RvbWVyLkFubm91bmNlbWVudC5Jbml0KSB7CiAgICAgICAgICAgICAgICBDb3JlLkN1c3RvbWVyLkFubm91bmNlbWVudC5Jbml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgewogICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgQ2FsbE1vZHVsZUluaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIENhbGxNb2R1bGVJbml0KCk7CiAgICAgICAgfQogICAgfQovL11dPgo8L3NjcmlwdD4K</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/Announcement/NavBarBanner.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8IS0tIEFubm91bmNlbWVudCBOYXZpZ2F0aW9uIEJhciBCYW5uZXIgLS0+ClslIElGIERhdGEuQW5ub3VuY2VtZW50Q291bnQgPiAwICVdCjxkaXYgaWQ9IkFubm91bmNlbWVudE5hdkJhbm5lciIgY2xhc3M9IkFubm91bmNlbWVudE5hdkJhbm5lciBBbm5vdW5jZW1lbnROYXZCYW5uZXItLVslIERhdGEuRGlzcGxheVR5cGUgfCBodG1sICVdIiBkYXRhLWNvdW50PSJbJSBEYXRhLkFubm91bmNlbWVudENvdW50IHwgaHRtbCAlXSIgZGF0YS1wcmlvcml0eT0iWyUgRGF0YS5IaWdoZXN0UHJpb3JpdHkgfCBodG1sICVdIiB0aXRsZT0iWyUgRGF0YS5Ub29sdGlwVGV4dCB8IGh0bWwgJV0iPgogICAgPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50TmF2QmFubmVyX19pY29uIj4KWyUgSUYgRGF0YS5EaXNwbGF5VHlwZSA9PSAnY3JpdGljYWwnICVdCiAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSI+PC9pPgpbJSBFTFNJRiBEYXRhLkRpc3BsYXlUeXBlID09ICd3YXJuaW5nJyAlXQogICAgICAgIDxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPgpbJSBFTFNFICVdCiAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+ClslIEVORCAlXQogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnROYXZCYW5uZXJfX2NvbnRlbnQiPlslIERhdGEuRGlzcGxheVRleHQgfCBodG1sICVdPC9kaXY+ClslIElGIERhdGEuQW5ub3VuY2VtZW50Q291bnQgPiAxICVdCiAgICA8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnROYXZCYW5uZXJfX2JhZGdlIj5bJSBEYXRhLkFubm91bmNlbWVudENvdW50IHwgaHRtbCAlXTwvZGl2PgpbJSBFTkQgJV0KPC9kaXY+ClslIEVORCAlXQo=</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/Announcement/LoginBanner.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8IS0tIEFubm91bmNlbWVudCBMb2dpbiBCYW5uZXIgLSB1c2luZyBBbm5vdW5jZW1lbnRDYXJkIHN0eWxpbmcgLS0+CjxkaXYgY2xhc3M9IkFubm91bmNlbWVudExvZ2luQ29udGFpbmVyIEFubm91bmNlbWVudExvZ2luQ29udGFpbmVyLS1bJSBEYXRhLkludGVyZmFjZSB8IGh0bWwgJV0iPgpbJSBGT1JFQUNIIEFubm91bmNlbWVudCBJTiBEYXRhLkFubm91bmNlbWVudHMgJV0KICAgIDxkaXYgY2xhc3M9IkFubm91bmNlbWVudENhcmQgQW5ub3VuY2VtZW50Q2FyZC0tWyUgQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUgfCBodG1sICVdIj4KICAgICAgICA8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX19oZWFkZXIiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iQW5ub3VuY2VtZW50Q2FyZF9fdHlwZSI+ClslIElGIEFubm91bmNlbWVudC5Bbm5vdW5jZW1lbnRUeXBlID09ICdjcml0aWNhbCcgJV0KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4gWyUgVHJhbnNsYXRlKCJDcml0aWNhbCIpIHwgaHRtbCAlXQpbJSBFTFNJRiBBbm5vdW5jZW1lbnQuQW5ub3VuY2VtZW50VHlwZSA9PSAnd2FybmluZycgJV0KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPiBbJSBUcmFuc2xhdGUoIldhcm5pbmciKSB8IGh0bWwgJV0KWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IFslIFRyYW5zbGF0ZSgiSW5mbyIpIHwgaHRtbCAlXQpbJSBFTkQgJV0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkFubm91bmNlbWVudENhcmRfX3RpdGxlIj5bJSBBbm5vdW5jZW1lbnQuVGl0bGUgfCBodG1sICVdPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50Q2FyZF9fYm9keSI+WyUgQW5ub3VuY2VtZW50LkJvZHkgJV08L2Rpdj4KICAgIDwvZGl2PgpbJSBFTkQgJV0KPC9kaXY+Cgo8c3R5bGU+Ci8qIENvbnRhaW5lciBmb3IgbG9naW4gcGFnZSBhbm5vdW5jZW1lbnRzIC0gYmFzZSBzdHlsZXMgKi8KLkFubm91bmNlbWVudExvZ2luQ29udGFpbmVyIHsKICAgIHdpZHRoOiA3NTBweCAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCkgIWltcG9ydGFudDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50Owp9CgovKiBBZ2VudCBsb2dpbjogbmFycm93IHBhcmVudCByZXF1aXJlcyB0cmFuc2Zvcm0tYmFzZWQgY2VudGVyaW5nICovCi5Bbm5vdW5jZW1lbnRMb2dpbkNvbnRhaW5lci0tYWdlbnQgewogICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiA1MCUgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAxMHB4IDAgIWltcG9ydGFudDsKfQoKLyogQ3VzdG9tZXIgbG9naW46IHdpZGVyIHBhcmVudCwgdXNlIHNpbXBsZSBtYXJnaW4gYXV0byAqLwouQW5ub3VuY2VtZW50TG9naW5Db250YWluZXItLWN1c3RvbWVyIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAxMHB4IGF1dG8gIWltcG9ydGFudDsKfQoKLyogQ3VzdG9tZXIgbG9naW46IGFsaWduIGNvbnRlbnQgdG8gdG9wIGluc3RlYWQgb2YgdmVydGljYWwgY2VudGVyICovCi8qIEtlZXAgaG9yaXpvbnRhbCBjZW50ZXJpbmcgKGFsaWduLWl0ZW1zOiBjZW50ZXIpIGJ1dCBtb3ZlIHRvIHRvcCAoanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0KSAqLwpkaXYjTWFpbkJveCwKZGl2I0NvbnRhaW5lciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAzMHB4ICFpbXBvcnRhbnQ7Cn0KCi8qIEVuc3VyZSBsb2dpbiBib3ggc3RheXMgaG9yaXpvbnRhbGx5IGNlbnRlcmVkICovCmRpdiNDb250YWluZXIgI0xvZ2luLApkaXYjQ29udGFpbmVyICNSZXNldCwKZGl2I0NvbnRhaW5lciAjU2lnbnVwIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoKLyogQW5ub3VuY2VtZW50Q2FyZCBzdHlsZXMgZm9yIGxvZ2luIHBhZ2UgKGlkZW50aWNhbCB0byBvdmVybGF5KSAqLwouQW5ub3VuY2VtZW50Q2FyZCB7CiAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLkFubm91bmNlbWVudENhcmQ6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgouQW5ub3VuY2VtZW50Q2FyZC0taW5mbyB7CiAgICBiYWNrZ3JvdW5kOiAjZDllZGY3OwogICAgYm9yZGVyOiAxcHggc29saWQgI2JjZThmMTsKfQoKLkFubm91bmNlbWVudENhcmQtLXdhcm5pbmcgewogICAgYmFja2dyb3VuZDogI2ZjZjhlMzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNmYWViY2M7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkLS1jcml0aWNhbCB7CiAgICBiYWNrZ3JvdW5kOiAjZjJkZWRlOwogICAgYm9yZGVyOiAxcHggc29saWQgI2ViY2NkMTsKfQoKLkFubm91bmNlbWVudENhcmRfX2hlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX190eXBlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLkFubm91bmNlbWVudENhcmQtLWluZm8gLkFubm91bmNlbWVudENhcmRfX3R5cGUgewogICAgY29sb3I6ICMzMTcwOGY7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkLS13YXJuaW5nIC5Bbm5vdW5jZW1lbnRDYXJkX190eXBlIHsKICAgIGNvbG9yOiAjOGE2ZDNiOwp9CgouQW5ub3VuY2VtZW50Q2FyZC0tY3JpdGljYWwgLkFubm91bmNlbWVudENhcmRfX3R5cGUgewogICAgY29sb3I6ICNhOTQ0NDI7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX190aXRsZSB7CiAgICBwYWRkaW5nOiAxNXB4OwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjMzMzOwp9CgouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSB7CiAgICBwYWRkaW5nOiAwIDE1cHggMTVweCAxNXB4OwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIGNvbG9yOiAjNDQ0Owp9CgouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSBwIHsKICAgIG1hcmdpbjogMCAwIDEwcHggMDsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgcDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi8qIFpudW55IGNvcmUncyBDb3JlLlJlc2V0LmNzcyB6ZXJvZXMgbGlzdC1zdHlsZS9tYXJnaW4vcGFkZGluZyBvbiBldmVyeQogKiA8dWw+LzxvbD4gc2l0ZS13aWRlIChZVUktc3R5bGUgcmVzZXQsIG1lYW50IGZvciBuYXYvbWVudSBsaXN0cykgLSB0aGUKICogV1lTSVdZRyBlZGl0b3IncyBvd24gYnVsbGV0ZWQvbnVtYmVyZWQgbGlzdHMgbmVlZCBpdCByZXN0b3JlZCBoZXJlLCBvcgogKiB0aGV5IHJlbmRlciBhcyBwbGFpbiB1bm1hcmtlZCwgdW5pbmRlbnRlZCBsaW5lcy4gKi8KLkFubm91bmNlbWVudENhcmRfX2JvZHkgdWwsCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IG9sIHsKICAgIG1hcmdpbjogMCAwIDEwcHggMjBweDsKICAgIHBhZGRpbmc6IDA7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IHVsIHsKICAgIGxpc3Qtc3R5bGU6IGRpc2M7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IG9sIHsKICAgIGxpc3Qtc3R5bGU6IGRlY2ltYWw7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IGxpIHsKICAgIG1hcmdpbjogMCAwIDRweCAwOwp9CgouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSB1bDpsYXN0LWNoaWxkLAouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSBvbDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KPC9zdHlsZT4K</File>

        <!-- JavaScript - Agent -->
        <File Permission="660" Location="var/httpd/htdocs/js/Core.Agent.Announcement.js" Encode="Base64">Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQKICogQG1lbWJlcm9mIENvcmUuQWdlbnQKICogQGRlc2NyaXB0aW9uCiAqICAgICAgQW5ub3VuY2VtZW50IG1vZHVsZSBmb3IgYWdlbnQgaW50ZXJmYWNlCiAqLwp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQcml2YXRlIFZhcmlhYmxlcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgdmFyIENvbmZpZyA9IHt9OwogICAgdmFyIFRyYW5zbGF0aW9ucyA9IHt9OwogICAgdmFyIEFubm91bmNlbWVudHMgPSBbXTsKICAgIHZhciBDYWNoZVRpbWVzdGFtcCA9IDA7CiAgICB2YXIgUmVmcmVzaEludGVydmFsID0gbnVsbDsKCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFB1YmxpYyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LkFubm91bmNlbWVudAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZSB0aGUgbW9kdWxlCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBHZXQgY29uZmlndXJhdGlvbgogICAgICAgIENvbmZpZyA9IENvcmUuQ29uZmlnLkdldCgnQW5ub3VuY2VtZW50JykgfHwge307CiAgICAgICAgVHJhbnNsYXRpb25zID0gQ29yZS5Db25maWcuR2V0KCdBbm5vdW5jZW1lbnQuVHJhbnNsYXRpb25zJykgfHwge307CiAgICAgICAgQW5ub3VuY2VtZW50cyA9IENvcmUuQ29uZmlnLkdldCgnQW5ub3VuY2VtZW50LkRhdGEnKSB8fCBbXTsKICAgICAgICBDYWNoZVRpbWVzdGFtcCA9IERhdGUubm93KCk7CgogICAgICAgIC8vIEluaXRpYWxpemUgVUkKICAgICAgICBpZiAodHlwZW9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50LlVJICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBDb3JlLkFnZW50LkFubm91bmNlbWVudC5VSS5Jbml0KCk7CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgdXAgcmVmcmVzaCBpbnRlcnZhbAogICAgICAgIHZhciBUVEwgPSAoQ29uZmlnLkNhY2hlVFRMIHx8IDMwMCkgKiAxMDAwOwogICAgICAgIFJlZnJlc2hJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBUYXJnZXROUy5SZWZyZXNoQW5ub3VuY2VtZW50cygpOwogICAgICAgIH0sIFRUTCk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgR2V0QW5ub3VuY2VtZW50cwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm5zIHtBcnJheX0gTGlzdCBvZiBhbm5vdW5jZW1lbnRzCiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGNhY2hlZCBhbm5vdW5jZW1lbnRzCiAgICAgKi8KICAgIFRhcmdldE5TLkdldEFubm91bmNlbWVudHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gQW5ub3VuY2VtZW50czsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBHZXRBbm5vdW5jZW1lbnRDb3VudAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IE51bWJlciBvZiBhY3RpdmUgYW5ub3VuY2VtZW50cwogICAgICogQGRlc2NyaXB0aW9uIEdldCBjb3VudCBvZiBhY3RpdmUgYW5ub3VuY2VtZW50cwogICAgICovCiAgICBUYXJnZXROUy5HZXRBbm5vdW5jZW1lbnRDb3VudCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBBbm5vdW5jZW1lbnRzLmxlbmd0aDsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBHZXRIaWdoZXN0UHJpb3JpdHkKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LkFubm91bmNlbWVudAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIaWdoZXN0IHByaW9yaXR5IHR5cGUgKGNyaXRpY2FsLCB3YXJuaW5nLCBpbmZvKQogICAgICogQGRlc2NyaXB0aW9uIERldGVybWluZSBoaWdoZXN0IHByaW9yaXR5IGFtb25nIGFjdGl2ZSBhbm5vdW5jZW1lbnRzCiAgICAgKi8KICAgIFRhcmdldE5TLkdldEhpZ2hlc3RQcmlvcml0eSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBQcmlvcml0eSA9ICdpbmZvJzsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBbm5vdW5jZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChBbm5vdW5jZW1lbnRzW2ldLkFubm91bmNlbWVudFR5cGUgPT09ICdjcml0aWNhbCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnY3JpdGljYWwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChBbm5vdW5jZW1lbnRzW2ldLkFubm91bmNlbWVudFR5cGUgPT09ICd3YXJuaW5nJykgewogICAgICAgICAgICAgICAgUHJpb3JpdHkgPSAnd2FybmluZyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBQcmlvcml0eTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBSZWZyZXNoQW5ub3VuY2VtZW50cwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbiBGZXRjaCBmcmVzaCBhbm5vdW5jZW1lbnRzIGZyb20gc2VydmVyCiAgICAgKi8KICAgIFRhcmdldE5TLlJlZnJlc2hBbm5vdW5jZW1lbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIFVSTCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKTsKCiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCgKICAgICAgICAgICAgVVJMLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBBY3Rpb246ICdBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgICAgICAgICAgICAgU3ViYWN0aW9uOiAnR2V0QW5ub3VuY2VtZW50cycKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24oUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgIGlmIChSZXNwb25zZSAmJiBSZXNwb25zZS5TdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgQW5ub3VuY2VtZW50cyA9IFJlc3BvbnNlLkFubm91bmNlbWVudHMgfHwgW107CiAgICAgICAgICAgICAgICAgICAgQ2FjaGVUaW1lc3RhbXAgPSBEYXRlLm5vdygpOwoKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgVUkKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50LlVJICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgICAgICBDb3JlLkFnZW50LkFubm91bmNlbWVudC5VSS5VcGRhdGVOYXZCYW5uZXIoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdqc29uJwogICAgICAgICk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgVHJhbnNsYXRlCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IEtleSAtIFRyYW5zbGF0aW9uIGtleQogICAgICogQHJldHVybnMge1N0cmluZ30gVHJhbnNsYXRlZCBzdHJpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdHJhbnNsYXRlZCBzdHJpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuVHJhbnNsYXRlID0gZnVuY3Rpb24oS2V5KSB7CiAgICAgICAgcmV0dXJuIFRyYW5zbGF0aW9uc1tLZXldIHx8IEtleTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBFc2NhcGVIdG1sCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IFRleHQgLSBUZXh0IHRvIGVzY2FwZQogICAgICogQHJldHVybnMge1N0cmluZ30gRXNjYXBlZCBIVE1MCiAgICAgKiBAZGVzY3JpcHRpb24gRXNjYXBlIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAgKi8KICAgIFRhcmdldE5TLkVzY2FwZUh0bWwgPSBmdW5jdGlvbihUZXh0KSB7CiAgICAgICAgaWYgKCFUZXh0KSByZXR1cm4gJyc7CiAgICAgICAgdmFyIE1hcCA9IHsKICAgICAgICAgICAgJyYnOiAnJmFtcDsnLAogICAgICAgICAgICAnPCc6ICcmbHQ7JywKICAgICAgICAgICAgJz4nOiAnJmd0OycsCiAgICAgICAgICAgICciJzogJyZxdW90OycsCiAgICAgICAgICAgICInIjogJyYjMDM5OycKICAgICAgICB9OwogICAgICAgIHJldHVybiBTdHJpbmcoVGV4dCkucmVwbGFjZSgvWyY8PiInXS9nLCBmdW5jdGlvbihtKSB7IHJldHVybiBNYXBbbV07IH0pOwogICAgfTsKCiAgICAvLyBJbml0aWFsaXphdGlvbiBpcyBkcml2ZW4gYnkgQW5ub3VuY2VtZW50L0luaXQudHQsIHdoaWNoIGNhbGxzCiAgICAvLyBUYXJnZXROUy5Jbml0KCkgZGlyZWN0bHkgb25jZSB0aGUgY29uZmlnIGl0IHNldHMgaXMgYWN0dWFsbHkKICAgIC8vIGF2YWlsYWJsZSBhbmQgdGhlIERPTSBpcyByZWFkeSAtIHNlZSB0aGUgY29tbWVudCB0aGVyZS4gQQogICAgLy8gc2VsZi1yZWdpc3RlcmVkIENvcmUuQXBwLlJlYWR5KCkgaGVyZSByYWNlZCB0aGF0OiBpdCBmaXJlcyBvbmNlLCBhdAogICAgLy8gd2hhdGV2ZXIgbW9tZW50ICQoZG9jdW1lbnQpLnJlYWR5IHJlc29sdmVzLCBhbmQgaWYgdGhhdCBoYXBwZW5lZAogICAgLy8gYmVmb3JlIEluaXQudHQncyBvd24gcG9sbGluZyBsb29wIGhhZCBzZXQgdGhlIGNvbmZpZyB5ZXQsIEluaXQoKQogICAgLy8gd291bGQgc2lsZW50bHkgbmV2ZXIgcnVuLgoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkFnZW50LkFubm91bmNlbWVudCB8fCB7fSkpOwo=</File>
        <File Permission="660" Location="var/httpd/htdocs/js/Core.Agent.Announcement.UI.js" Encode="Base64">Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQuVUkKICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50CiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFVJIENvbXBvbmVudHMgZm9yIEFubm91bmNlbWVudAogKi8KdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkFnZW50ID0gQ29yZS5BZ2VudCB8fCB7fTsKQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQgPSBDb3JlLkFnZW50LkFubm91bmNlbWVudCB8fCB7fTsKCkNvcmUuQWdlbnQuQW5ub3VuY2VtZW50LlVJID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUHJpdmF0ZSBWYXJpYWJsZXMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIHZhciBTQSA9IENvcmUuQWdlbnQuQW5ub3VuY2VtZW50OwoKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUHVibGljIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQW5ub3VuY2VtZW50LlVJCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplIFVJIGNvbXBvbmVudHMKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIEluaXROYXZCYW5uZXIoKTsKICAgICAgICBUYXJnZXROUy5VcGRhdGVOYXZCYW5uZXIoKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBVcGRhdGVOYXZCYW5uZXIKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LkFubm91bmNlbWVudC5VSQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlIG5hdmlnYXRpb24gYmFubmVyIHdpdGggY3VycmVudCBhbm5vdW5jZW1lbnRzCiAgICAgKi8KICAgIFRhcmdldE5TLlVwZGF0ZU5hdkJhbm5lciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciAkQmFubmVyID0gJCgnI0Fubm91bmNlbWVudE5hdkJhbm5lcicpOwogICAgICAgIHZhciBBbm5vdW5jZW1lbnRzID0gU0EuR2V0QW5ub3VuY2VtZW50cygpOwogICAgICAgIHZhciBDb3VudCA9IEFubm91bmNlbWVudHMubGVuZ3RoOwoKICAgICAgICBpZiAoQ291bnQgPT09IDApIHsKICAgICAgICAgICAgJEJhbm5lci5yZW1vdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoYXQgdG8gZGlzcGxheQogICAgICAgIHZhciBEaXNwbGF5RGF0YSA9IERldGVybWluZURpc3BsYXlBbm5vdW5jZW1lbnQoQW5ub3VuY2VtZW50cyk7CgogICAgICAgIC8vIFVwZGF0ZSBiYW5uZXIKICAgICAgICAkQmFubmVyLmF0dHIoJ2RhdGEtY291bnQnLCBDb3VudCk7CiAgICAgICAgJEJhbm5lci5hdHRyKCdkYXRhLXByaW9yaXR5JywgRGlzcGxheURhdGEudHlwZSk7CiAgICAgICAgJEJhbm5lci5hdHRyKCd0aXRsZScsIERpc3BsYXlEYXRhLnRvb2x0aXApOwoKICAgICAgICAvLyBVcGRhdGUgdHlwZSBjbGFzcwogICAgICAgICRCYW5uZXIucmVtb3ZlQ2xhc3MoJ0Fubm91bmNlbWVudE5hdkJhbm5lci0taW5mbyBBbm5vdW5jZW1lbnROYXZCYW5uZXItLXdhcm5pbmcgQW5ub3VuY2VtZW50TmF2QmFubmVyLS1jcml0aWNhbCcpCiAgICAgICAgICAgIC5hZGRDbGFzcygnQW5ub3VuY2VtZW50TmF2QmFubmVyLS0nICsgRGlzcGxheURhdGEudHlwZSk7CgogICAgICAgIC8vIFVwZGF0ZSBpY29uCiAgICAgICAgdmFyIEljb25DbGFzcyA9ICdmYS1pbmZvLWNpcmNsZSc7CiAgICAgICAgaWYgKERpc3BsYXlEYXRhLnR5cGUgPT09ICdjcml0aWNhbCcpIHsKICAgICAgICAgICAgSWNvbkNsYXNzID0gJ2ZhLWV4Y2xhbWF0aW9uLWNpcmNsZSc7CiAgICAgICAgfSBlbHNlIGlmIChEaXNwbGF5RGF0YS50eXBlID09PSAnd2FybmluZycpIHsKICAgICAgICAgICAgSWNvbkNsYXNzID0gJ2ZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJzsKICAgICAgICB9CiAgICAgICAgJEJhbm5lci5maW5kKCcuQW5ub3VuY2VtZW50TmF2QmFubmVyX19pY29uIGknKQogICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2ZhLWluZm8tY2lyY2xlIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZScpCiAgICAgICAgICAgIC5hZGRDbGFzcyhJY29uQ2xhc3MpOwoKICAgICAgICAvLyBVcGRhdGUgdGV4dAogICAgICAgICRCYW5uZXIuZmluZCgnLkFubm91bmNlbWVudE5hdkJhbm5lcl9fY29udGVudCcpLnRleHQoRGlzcGxheURhdGEudGV4dCk7CgogICAgICAgIC8vIFVwZGF0ZSBiYWRnZSAoc2hvdyBjb3VudCB3aGVuIG11bHRpcGxlIGFubm91bmNlbWVudHMpCiAgICAgICAgaWYgKENvdW50ID4gMSkgewogICAgICAgICAgICB2YXIgJEJhZGdlID0gJEJhbm5lci5maW5kKCcuQW5ub3VuY2VtZW50TmF2QmFubmVyX19iYWRnZScpOwogICAgICAgICAgICBpZiAoJEJhZGdlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgJEJhZGdlLnRleHQoQ291bnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJEJhbm5lci5hcHBlbmQoJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudE5hdkJhbm5lcl9fYmFkZ2UiPicgKyBDb3VudCArICc8L2Rpdj4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRCYW5uZXIuZmluZCgnLkFubm91bmNlbWVudE5hdkJhbm5lcl9fYmFkZ2UnKS5yZW1vdmUoKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgU2hvd0Z1bGxPdmVybGF5CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5Bbm5vdW5jZW1lbnQuVUkKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uIFNob3cgZnVsbC1zY3JlZW4gYW5ub3VuY2VtZW50IG92ZXJsYXkKICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd0Z1bGxPdmVybGF5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIEFubm91bmNlbWVudHMgPSBTQS5HZXRBbm5vdW5jZW1lbnRzKCk7CgogICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3Rpbmcgb3ZlcmxheQogICAgICAgICQoJy5Bbm5vdW5jZW1lbnRPdmVybGF5JykucmVtb3ZlKCk7CgogICAgICAgIC8vIEJ1aWxkIG92ZXJsYXkgSFRNTAogICAgICAgIHZhciBIVE1MID0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudE92ZXJsYXkiPicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50T3ZlcmxheV9fY29udGFpbmVyIj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRPdmVybGF5X19oZWFkZXIiPicgKwogICAgICAgICAgICAgICAgICAgICc8aDI+JyArIFNBLkVzY2FwZUh0bWwoU0EuVHJhbnNsYXRlKCdBbm5vdW5jZW1lbnRzJykpICsgJyAoJyArIEFubm91bmNlbWVudHMubGVuZ3RoICsgJyk8L2gyPicgKwogICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IkFubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlIiBhcmlhLWxhYmVsPSInICsgU0EuRXNjYXBlSHRtbChTQS5UcmFuc2xhdGUoJ0Nsb3NlJykpICsgJyI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT4nICsKICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50T3ZlcmxheV9fY29udGVudCI+JzsKCiAgICAgICAgaWYgKEFubm91bmNlbWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIEhUTUwgKz0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudE92ZXJsYXlfX2VtcHR5Ij4nICsKICAgICAgICAgICAgICAgICc8cD4nICsgU0EuRXNjYXBlSHRtbChTQS5UcmFuc2xhdGUoJ05vIGFubm91bmNlbWVudHMnKSkgKyAnPC9wPicgKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFubm91bmNlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIEhUTUwgKz0gQnVpbGRBbm5vdW5jZW1lbnRDYXJkKEFubm91bmNlbWVudHNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBIVE1MICs9ICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKICAgICAgICAvLyBBcHBlbmQgdG8gYm9keQogICAgICAgICQoJ2JvZHknKS5hcHBlbmQoSFRNTCk7CgogICAgICAgIC8vIEJpbmQgY2xvc2UgaGFuZGxlcnMKICAgICAgICAkKCcuQW5ub3VuY2VtZW50T3ZlcmxheV9fY2xvc2UsIC5Bbm5vdW5jZW1lbnRPdmVybGF5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMgfHwgJChlLnRhcmdldCkuaGFzQ2xhc3MoJ0Fubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlJykgfHwgJChlLnRhcmdldCkucGFyZW50KCkuaGFzQ2xhc3MoJ0Fubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlJykpIHsKICAgICAgICAgICAgICAgIFRhcmdldE5TLkhpZGVGdWxsT3ZlcmxheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIENsb3NlIG9uIEVTQyBrZXkKICAgICAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bi5hbm5vdW5jZW1lbnQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7CiAgICAgICAgICAgICAgICBUYXJnZXROUy5IaWRlRnVsbE92ZXJsYXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBQcmV2ZW50IGJvZHkgc2Nyb2xsCiAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdBbm5vdW5jZW1lbnRPdmVybGF5LS1vcGVuJyk7CgogICAgICAgIC8vIEZvY3VzIGNsb3NlIGJ1dHRvbiBmb3IgYWNjZXNzaWJpbGl0eQogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICQoJy5Bbm5vdW5jZW1lbnRPdmVybGF5X19jbG9zZScpLmZvY3VzKCk7CiAgICAgICAgfSwgMTAwKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBIaWRlRnVsbE92ZXJsYXkKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LkFubm91bmNlbWVudC5VSQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24gSGlkZSBmdWxsLXNjcmVlbiBhbm5vdW5jZW1lbnQgb3ZlcmxheQogICAgICovCiAgICBUYXJnZXROUy5IaWRlRnVsbE92ZXJsYXkgPSBmdW5jdGlvbigpIHsKICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24uYW5ub3VuY2VtZW50Jyk7CiAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdBbm5vdW5jZW1lbnRPdmVybGF5LS1vcGVuJyk7CiAgICAgICAgJCgnLkFubm91bmNlbWVudE92ZXJsYXknKS5yZW1vdmUoKTsKICAgIH07CgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQcml2YXRlIEZ1bmN0aW9ucwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgZnVuY3Rpb24gSW5pdE5hdkJhbm5lcigpIHsKICAgICAgICB2YXIgJEJhbm5lciA9ICQoJyNBbm5vdW5jZW1lbnROYXZCYW5uZXInKTsKCiAgICAgICAgaWYgKCEkQmFubmVyLmxlbmd0aCkgcmV0dXJuOwoKICAgICAgICAvLyBDbGljayBoYW5kbGVyIC0gc2hvdyBmdWxsIG92ZXJsYXkKICAgICAgICAkQmFubmVyLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBUYXJnZXROUy5TaG93RnVsbE92ZXJsYXkoKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gQWRkIGN1cnNvciBwb2ludGVyIGZvciBiZXR0ZXIgVVgKICAgICAgICAkQmFubmVyLmNzcygnY3Vyc29yJywgJ3BvaW50ZXInKTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZSB3aGljaCBhbm5vdW5jZW1lbnQgdG8gZGlzcGxheSBiYXNlZCBvbiBwcmlvcml0eSBydWxlcwogICAgICovCiAgICBmdW5jdGlvbiBEZXRlcm1pbmVEaXNwbGF5QW5ub3VuY2VtZW50KEFubm91bmNlbWVudHMpIHsKICAgICAgICB2YXIgQ291bnQgPSBBbm5vdW5jZW1lbnRzLmxlbmd0aDsKCiAgICAgICAgaWYgKENvdW50ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICcnLCB0eXBlOiAnaW5mbycsIHRvb2x0aXA6ICcnIH07CiAgICAgICAgfQoKICAgICAgICAvLyBDYXRlZ29yaXplIGFubm91bmNlbWVudHMgYnkgdHlwZQogICAgICAgIHZhciBDcml0aWNhbEFubm91bmNlbWVudHMgPSBbXTsKICAgICAgICB2YXIgV2FybmluZ0Fubm91bmNlbWVudHMgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBbm5vdW5jZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBBID0gQW5ub3VuY2VtZW50c1tpXTsKICAgICAgICAgICAgaWYgKEEuQW5ub3VuY2VtZW50VHlwZSA9PT0gJ2NyaXRpY2FsJykgewogICAgICAgICAgICAgICAgQ3JpdGljYWxBbm5vdW5jZW1lbnRzLnB1c2goQSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQS5Bbm5vdW5jZW1lbnRUeXBlID09PSAnd2FybmluZycpIHsKICAgICAgICAgICAgICAgIFdhcm5pbmdBbm5vdW5jZW1lbnRzLnB1c2goQSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIERldGVybWluZSBoaWdoZXN0IHByaW9yaXR5IHR5cGUKICAgICAgICB2YXIgSGlnaGVzdFR5cGUgPSAnaW5mbyc7CiAgICAgICAgaWYgKENyaXRpY2FsQW5ub3VuY2VtZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIEhpZ2hlc3RUeXBlID0gJ2NyaXRpY2FsJzsKICAgICAgICB9IGVsc2UgaWYgKFdhcm5pbmdBbm5vdW5jZW1lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgSGlnaGVzdFR5cGUgPSAnd2FybmluZyc7CiAgICAgICAgfQoKICAgICAgICB2YXIgRGlzcGxheVRleHQgPSAnJzsKICAgICAgICB2YXIgRGlzcGxheVR5cGUgPSBIaWdoZXN0VHlwZTsKICAgICAgICB2YXIgVG9vbHRpcFRleHQgPSAnJzsKCiAgICAgICAgLy8gQ2FzZSAxOiBPbmx5IG9uZSBhbm5vdW5jZW1lbnQgLSBzaG93IGl0cyB0aXRsZQogICAgICAgIGlmIChDb3VudCA9PT0gMSkgewogICAgICAgICAgICBEaXNwbGF5VGV4dCA9IEFubm91bmNlbWVudHNbMF0uVGl0bGU7CiAgICAgICAgICAgIERpc3BsYXlUeXBlID0gQW5ub3VuY2VtZW50c1swXS5Bbm5vdW5jZW1lbnRUeXBlOwogICAgICAgICAgICBUb29sdGlwVGV4dCA9IERpc3BsYXlUZXh0OwogICAgICAgIH0KICAgICAgICAvLyBDYXNlIDI6IE11bHRpcGxlIGFubm91bmNlbWVudHMgd2l0aCBleGFjdGx5IG9uZSBjcml0aWNhbCAtIHNob3cgdGhlIGNyaXRpY2FsIG9uZQogICAgICAgIGVsc2UgaWYgKENyaXRpY2FsQW5ub3VuY2VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgRGlzcGxheVRleHQgPSBDcml0aWNhbEFubm91bmNlbWVudHNbMF0uVGl0bGU7CiAgICAgICAgICAgIERpc3BsYXlUeXBlID0gJ2NyaXRpY2FsJzsKICAgICAgICAgICAgVG9vbHRpcFRleHQgPSBDb3VudCArICcgJyArIFNBLlRyYW5zbGF0ZSgnYW5ub3VuY2VtZW50cycpICsgJyAtICcgKyBEaXNwbGF5VGV4dDsKICAgICAgICB9CiAgICAgICAgLy8gQ2FzZSAzOiBNdWx0aXBsZSBhbm5vdW5jZW1lbnRzIC0gc2hvdyBjb3VudAogICAgICAgIGVsc2UgewogICAgICAgICAgICBEaXNwbGF5VGV4dCA9IENvdW50ICsgJyAnICsgU0EuVHJhbnNsYXRlKCdhbm5vdW5jZW1lbnRzJyk7CiAgICAgICAgICAgIFRvb2x0aXBUZXh0ID0gU0EuVHJhbnNsYXRlKCdDbGljayB0byB2aWV3IGFsbCBhbm5vdW5jZW1lbnRzJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0ZXh0OiBEaXNwbGF5VGV4dCwKICAgICAgICAgICAgdHlwZTogRGlzcGxheVR5cGUsCiAgICAgICAgICAgIHRvb2x0aXA6IFRvb2x0aXBUZXh0CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBCdWlsZEFubm91bmNlbWVudENhcmQoQW5ub3VuY2VtZW50KSB7CiAgICAgICAgdmFyIFR5cGVJY29uID0gR2V0VHlwZUljb24oQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUpOwogICAgICAgIHZhciBUeXBlTGFiZWwgPSBTQS5UcmFuc2xhdGUoQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBBbm5vdW5jZW1lbnQuQW5ub3VuY2VtZW50VHlwZS5zbGljZSgxKSk7CgogICAgICAgIHZhciBIVE1MID0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudENhcmQgQW5ub3VuY2VtZW50Q2FyZC0tJyArIFNBLkVzY2FwZUh0bWwoQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUpICsgJyI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX19oZWFkZXIiPicgKwogICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX190eXBlIj4nICsgVHlwZUljb24gKyAnICcgKyBTQS5Fc2NhcGVIdG1sKFR5cGVMYWJlbCkgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX190aXRsZSI+JyArIFNBLkVzY2FwZUh0bWwoQW5ub3VuY2VtZW50LlRpdGxlKSArICc8L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudENhcmRfX2JvZHkiPicgKyBBbm5vdW5jZW1lbnQuQm9keSArICc8L2Rpdj4nICsgIC8vIEJvZHkgaXMgSFRNTCBmcm9tIFdZU0lXWUcKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgcmV0dXJuIEhUTUw7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0VHlwZUljb24oVHlwZSkgewogICAgICAgIHN3aXRjaCAoVHlwZSkgewogICAgICAgICAgICBjYXNlICdjcml0aWNhbCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJzxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4nOwogICAgICAgICAgICBjYXNlICd3YXJuaW5nJzoKICAgICAgICAgICAgICAgIHJldHVybiAnPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+JzsKICAgICAgICAgICAgY2FzZSAnaW5mbyc6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJzxpIGNsYXNzPSJmYSBmYS1pbmZvLWNpcmNsZSI+PC9pPic7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkFnZW50LkFubm91bmNlbWVudC5VSSB8fCB7fSkpOwo=</File>

        <!-- JavaScript - Customer -->
        <File Permission="660" Location="var/httpd/htdocs/js/Core.Customer.Announcement.js" Encode="Base64">Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICogQG1lbWJlcm9mIENvcmUuQ3VzdG9tZXIKICogQGRlc2NyaXB0aW9uCiAqICAgICAgQW5ub3VuY2VtZW50IG1vZHVsZSBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlIChpZGVudGljYWwgdG8gYWdlbnQgaW50ZXJmYWNlKQogKi8KdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkN1c3RvbWVyID0gQ29yZS5DdXN0b21lciB8fCB7fTsKCkNvcmUuQ3VzdG9tZXIuQW5ub3VuY2VtZW50ID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUHJpdmF0ZSBWYXJpYWJsZXMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgIHZhciBDb25maWcgPSB7fTsKICAgIHZhciBUcmFuc2xhdGlvbnMgPSB7fTsKICAgIHZhciBBbm5vdW5jZW1lbnRzID0gW107CiAgICB2YXIgQ2FjaGVUaW1lc3RhbXAgPSAwOwogICAgdmFyIFJlZnJlc2hJbnRlcnZhbCA9IG51bGw7CgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQdWJsaWMgTWV0aG9kcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemUgdGhlIG1vZHVsZQogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgQ29uZmlnID0gQ29yZS5Db25maWcuR2V0KCdBbm5vdW5jZW1lbnQnKSB8fCB7fTsKICAgICAgICBUcmFuc2xhdGlvbnMgPSBDb3JlLkNvbmZpZy5HZXQoJ0Fubm91bmNlbWVudC5UcmFuc2xhdGlvbnMnKSB8fCB7fTsKICAgICAgICBBbm5vdW5jZW1lbnRzID0gQ29yZS5Db25maWcuR2V0KCdBbm5vdW5jZW1lbnQuRGF0YScpIHx8IFtdOwogICAgICAgIENhY2hlVGltZXN0YW1wID0gRGF0ZS5ub3coKTsKCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBOYXZCYW5uZXIgY2xpY2sgaGFuZGxlcgogICAgICAgIEluaXROYXZCYW5uZXIoKTsKCiAgICAgICAgLy8gU2V0IHVwIHJlZnJlc2ggaW50ZXJ2YWwKICAgICAgICB2YXIgVFRMID0gKENvbmZpZy5DYWNoZVRUTCB8fCAzMDApICogMTAwMDsKICAgICAgICBSZWZyZXNoSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgVGFyZ2V0TlMuUmVmcmVzaEFubm91bmNlbWVudHMoKTsKICAgICAgICB9LCBUVEwpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEdldEFubm91bmNlbWVudHMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkN1c3RvbWVyLkFubm91bmNlbWVudAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IExpc3Qgb2YgYW5ub3VuY2VtZW50cwogICAgICovCiAgICBUYXJnZXROUy5HZXRBbm5vdW5jZW1lbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIEFubm91bmNlbWVudHM7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgR2V0QW5ub3VuY2VtZW50Q291bnQKICAgICAqIEBtZW1iZXJvZiBDb3JlLkN1c3RvbWVyLkFubm91bmNlbWVudAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBOdW1iZXIgb2YgYWN0aXZlIGFubm91bmNlbWVudHMKICAgICAqLwogICAgVGFyZ2V0TlMuR2V0QW5ub3VuY2VtZW50Q291bnQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gQW5ub3VuY2VtZW50cy5sZW5ndGg7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgR2V0SGlnaGVzdFByaW9yaXR5CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHJldHVybnMge1N0cmluZ30gSGlnaGVzdCBwcmlvcml0eSB0eXBlIChjcml0aWNhbCwgd2FybmluZywgaW5mbykKICAgICAqLwogICAgVGFyZ2V0TlMuR2V0SGlnaGVzdFByaW9yaXR5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIFByaW9yaXR5ID0gJ2luZm8nOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFubm91bmNlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKEFubm91bmNlbWVudHNbaV0uQW5ub3VuY2VtZW50VHlwZSA9PT0gJ2NyaXRpY2FsJykgewogICAgICAgICAgICAgICAgcmV0dXJuICdjcml0aWNhbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEFubm91bmNlbWVudHNbaV0uQW5ub3VuY2VtZW50VHlwZSA9PT0gJ3dhcm5pbmcnKSB7CiAgICAgICAgICAgICAgICBQcmlvcml0eSA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFByaW9yaXR5OwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFJlZnJlc2hBbm5vdW5jZW1lbnRzCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uIEZldGNoIGZyZXNoIGFubm91bmNlbWVudHMgZnJvbSBzZXJ2ZXIKICAgICAqLwogICAgVGFyZ2V0TlMuUmVmcmVzaEFubm91bmNlbWVudHMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgVVJMID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpOwoKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKAogICAgICAgICAgICBVUkwsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEFjdGlvbjogJ0N1c3RvbWVyQW5ub3VuY2VtZW50QUpBWCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdHZXRBbm5vdW5jZW1lbnRzJwogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbihSZXNwb25zZSkgewogICAgICAgICAgICAgICAgaWYgKFJlc3BvbnNlICYmIFJlc3BvbnNlLlN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICBBbm5vdW5jZW1lbnRzID0gUmVzcG9uc2UuQW5ub3VuY2VtZW50cyB8fCBbXTsKICAgICAgICAgICAgICAgICAgICBDYWNoZVRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAgICAgICAgICAgICAgICAgVXBkYXRlTmF2QmFubmVyKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdqc29uJwogICAgICAgICk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgVHJhbnNsYXRlCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IEtleSAtIFRyYW5zbGF0aW9uIGtleQogICAgICogQHJldHVybnMge1N0cmluZ30gVHJhbnNsYXRlZCBzdHJpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuVHJhbnNsYXRlID0gZnVuY3Rpb24oS2V5KSB7CiAgICAgICAgcmV0dXJuIFRyYW5zbGF0aW9uc1tLZXldIHx8IEtleTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBFc2NhcGVIdG1sCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IFRleHQgLSBUZXh0IHRvIGVzY2FwZQogICAgICogQHJldHVybnMge1N0cmluZ30gRXNjYXBlZCBIVE1MCiAgICAgKi8KICAgIFRhcmdldE5TLkVzY2FwZUh0bWwgPSBmdW5jdGlvbihUZXh0KSB7CiAgICAgICAgaWYgKCFUZXh0KSByZXR1cm4gJyc7CiAgICAgICAgdmFyIE1hcCA9IHsKICAgICAgICAgICAgJyYnOiAnJmFtcDsnLAogICAgICAgICAgICAnPCc6ICcmbHQ7JywKICAgICAgICAgICAgJz4nOiAnJmd0OycsCiAgICAgICAgICAgICciJzogJyZxdW90OycsCiAgICAgICAgICAgICInIjogJyYjMDM5OycKICAgICAgICB9OwogICAgICAgIHJldHVybiBTdHJpbmcoVGV4dCkucmVwbGFjZSgvWyY8PiInXS9nLCBmdW5jdGlvbihtKSB7IHJldHVybiBNYXBbbV07IH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFNob3dGdWxsT3ZlcmxheQogICAgICogQG1lbWJlcm9mIENvcmUuQ3VzdG9tZXIuQW5ub3VuY2VtZW50CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbiBTaG93IGZ1bGwtc2NyZWVuIGFubm91bmNlbWVudCBvdmVybGF5CiAgICAgKi8KICAgIFRhcmdldE5TLlNob3dGdWxsT3ZlcmxheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICQoJy5Bbm5vdW5jZW1lbnRPdmVybGF5JykucmVtb3ZlKCk7CgogICAgICAgIHZhciBIVE1MID0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudE92ZXJsYXkiPicgKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50T3ZlcmxheV9fY29udGFpbmVyIj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRPdmVybGF5X19oZWFkZXIiPicgKwogICAgICAgICAgICAgICAgICAgICc8aDI+JyArIFRhcmdldE5TLkVzY2FwZUh0bWwoVGFyZ2V0TlMuVHJhbnNsYXRlKCdBbm5vdW5jZW1lbnRzJykpICsgJyAoJyArIEFubm91bmNlbWVudHMubGVuZ3RoICsgJyk8L2gyPicgKwogICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IkFubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlIiBhcmlhLWxhYmVsPSInICsgVGFyZ2V0TlMuRXNjYXBlSHRtbChUYXJnZXROUy5UcmFuc2xhdGUoJ0Nsb3NlJykpICsgJyI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT4nICsKICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50T3ZlcmxheV9fY29udGVudCI+JzsKCiAgICAgICAgaWYgKEFubm91bmNlbWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIEhUTUwgKz0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudE92ZXJsYXlfX2VtcHR5Ij4nICsKICAgICAgICAgICAgICAgICc8cD4nICsgVGFyZ2V0TlMuRXNjYXBlSHRtbChUYXJnZXROUy5UcmFuc2xhdGUoJ05vIGFubm91bmNlbWVudHMnKSkgKyAnPC9wPicgKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFubm91bmNlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIEhUTUwgKz0gQnVpbGRBbm5vdW5jZW1lbnRDYXJkKEFubm91bmNlbWVudHNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBIVE1MICs9ICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKICAgICAgICAkKCdib2R5JykuYXBwZW5kKEhUTUwpOwoKICAgICAgICAkKCcuQW5ub3VuY2VtZW50T3ZlcmxheV9fY2xvc2UsIC5Bbm5vdW5jZW1lbnRPdmVybGF5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMgfHwgJChlLnRhcmdldCkuaGFzQ2xhc3MoJ0Fubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlJykgfHwgJChlLnRhcmdldCkucGFyZW50KCkuaGFzQ2xhc3MoJ0Fubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlJykpIHsKICAgICAgICAgICAgICAgIFRhcmdldE5TLkhpZGVGdWxsT3ZlcmxheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgICQoZG9jdW1lbnQpLm9uKCdrZXlkb3duLmFubm91bmNlbWVudCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHsKICAgICAgICAgICAgICAgIFRhcmdldE5TLkhpZGVGdWxsT3ZlcmxheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnQW5ub3VuY2VtZW50T3ZlcmxheS0tb3BlbicpOwoKICAgICAgICAvLyBGb2N1cyBjbG9zZSBidXR0b24gZm9yIGFjY2Vzc2liaWxpdHkKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKCcuQW5ub3VuY2VtZW50T3ZlcmxheV9fY2xvc2UnKS5mb2N1cygpOwogICAgICAgIH0sIDEwMCk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgSGlkZUZ1bGxPdmVybGF5CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5DdXN0b21lci5Bbm5vdW5jZW1lbnQKICAgICAqIEBmdW5jdGlvbgogICAgICovCiAgICBUYXJnZXROUy5IaWRlRnVsbE92ZXJsYXkgPSBmdW5jdGlvbigpIHsKICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24uYW5ub3VuY2VtZW50Jyk7CiAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdBbm5vdW5jZW1lbnRPdmVybGF5LS1vcGVuJyk7CiAgICAgICAgJCgnLkFubm91bmNlbWVudE92ZXJsYXknKS5yZW1vdmUoKTsKICAgIH07CgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQcml2YXRlIEZ1bmN0aW9ucwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplIHRoZSBuYXZpZ2F0aW9uIGJhbm5lciBjbGljayBoYW5kbGVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIEluaXROYXZCYW5uZXIoKSB7CiAgICAgICAgdmFyICRCYW5uZXIgPSAkKCcjQW5ub3VuY2VtZW50TmF2QmFubmVyJyk7CgogICAgICAgIGlmICghJEJhbm5lci5sZW5ndGgpIHJldHVybjsKCiAgICAgICAgLy8gQ2xpY2sgaGFuZGxlciAtIHNob3cgZnVsbCBvdmVybGF5CiAgICAgICAgJEJhbm5lci5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgVGFyZ2V0TlMuU2hvd0Z1bGxPdmVybGF5KCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEFkZCBjdXJzb3IgcG9pbnRlciBmb3IgYmV0dGVyIFVYCiAgICAgICAgJEJhbm5lci5jc3MoJ2N1cnNvcicsICdwb2ludGVyJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVcGRhdGUgdGhlIG5hdmlnYXRpb24gYmFubmVyIGFmdGVyIHJlZnJlc2gKICAgICAqLwogICAgZnVuY3Rpb24gVXBkYXRlTmF2QmFubmVyKCkgewogICAgICAgIHZhciAkQmFubmVyID0gJCgnI0Fubm91bmNlbWVudE5hdkJhbm5lcicpOwogICAgICAgIHZhciBDb3VudCA9IEFubm91bmNlbWVudHMubGVuZ3RoOwoKICAgICAgICBpZiAoQ291bnQgPT09IDApIHsKICAgICAgICAgICAgJEJhbm5lci5yZW1vdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkQmFubmVyLmxlbmd0aCkgcmV0dXJuOwoKICAgICAgICAvLyBEZXRlcm1pbmUgd2hhdCB0byBkaXNwbGF5CiAgICAgICAgdmFyIERpc3BsYXlEYXRhID0gRGV0ZXJtaW5lRGlzcGxheUFubm91bmNlbWVudChBbm5vdW5jZW1lbnRzKTsKCiAgICAgICAgLy8gVXBkYXRlIGJhbm5lcgogICAgICAgICRCYW5uZXIuYXR0cignZGF0YS1jb3VudCcsIENvdW50KTsKICAgICAgICAkQmFubmVyLmF0dHIoJ2RhdGEtcHJpb3JpdHknLCBEaXNwbGF5RGF0YS50eXBlKTsKICAgICAgICAkQmFubmVyLmF0dHIoJ3RpdGxlJywgRGlzcGxheURhdGEudG9vbHRpcCk7CgogICAgICAgIC8vIFVwZGF0ZSB0eXBlIGNsYXNzCiAgICAgICAgJEJhbm5lci5yZW1vdmVDbGFzcygnQW5ub3VuY2VtZW50TmF2QmFubmVyLS1pbmZvIEFubm91bmNlbWVudE5hdkJhbm5lci0td2FybmluZyBBbm5vdW5jZW1lbnROYXZCYW5uZXItLWNyaXRpY2FsJykKICAgICAgICAgICAgLmFkZENsYXNzKCdBbm5vdW5jZW1lbnROYXZCYW5uZXItLScgKyBEaXNwbGF5RGF0YS50eXBlKTsKCiAgICAgICAgLy8gVXBkYXRlIGljb24KICAgICAgICB2YXIgSWNvbkNsYXNzID0gJ2ZhLWluZm8tY2lyY2xlJzsKICAgICAgICBpZiAoRGlzcGxheURhdGEudHlwZSA9PT0gJ2NyaXRpY2FsJykgewogICAgICAgICAgICBJY29uQ2xhc3MgPSAnZmEtZXhjbGFtYXRpb24tY2lyY2xlJzsKICAgICAgICB9IGVsc2UgaWYgKERpc3BsYXlEYXRhLnR5cGUgPT09ICd3YXJuaW5nJykgewogICAgICAgICAgICBJY29uQ2xhc3MgPSAnZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnOwogICAgICAgIH0KICAgICAgICAkQmFubmVyLmZpbmQoJy5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2ljb24gaScpCiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnZmEtaW5mby1jaXJjbGUgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgZmEtZXhjbGFtYXRpb24tY2lyY2xlJykKICAgICAgICAgICAgLmFkZENsYXNzKEljb25DbGFzcyk7CgogICAgICAgIC8vIFVwZGF0ZSB0ZXh0CiAgICAgICAgJEJhbm5lci5maW5kKCcuQW5ub3VuY2VtZW50TmF2QmFubmVyX19jb250ZW50JykudGV4dChEaXNwbGF5RGF0YS50ZXh0KTsKCiAgICAgICAgLy8gVXBkYXRlIGJhZGdlIChzaG93IGNvdW50IHdoZW4gbXVsdGlwbGUgYW5ub3VuY2VtZW50cykKICAgICAgICBpZiAoQ291bnQgPiAxKSB7CiAgICAgICAgICAgIHZhciAkQmFkZ2UgPSAkQmFubmVyLmZpbmQoJy5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2JhZGdlJyk7CiAgICAgICAgICAgIGlmICgkQmFkZ2UubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkQmFkZ2UudGV4dChDb3VudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkQmFubmVyLmFwcGVuZCgnPGRpdiBjbGFzcz0iQW5ub3VuY2VtZW50TmF2QmFubmVyX19iYWRnZSI+JyArIENvdW50ICsgJzwvZGl2PicpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJEJhbm5lci5maW5kKCcuQW5ub3VuY2VtZW50TmF2QmFubmVyX19iYWRnZScpLnJlbW92ZSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZSB3aGljaCBhbm5vdW5jZW1lbnQgdG8gZGlzcGxheSBiYXNlZCBvbiBwcmlvcml0eSBydWxlcwogICAgICovCiAgICBmdW5jdGlvbiBEZXRlcm1pbmVEaXNwbGF5QW5ub3VuY2VtZW50KEFubm91bmNlbWVudExpc3QpIHsKICAgICAgICB2YXIgQ291bnQgPSBBbm5vdW5jZW1lbnRMaXN0Lmxlbmd0aDsKCiAgICAgICAgaWYgKENvdW50ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICcnLCB0eXBlOiAnaW5mbycsIHRvb2x0aXA6ICcnIH07CiAgICAgICAgfQoKICAgICAgICAvLyBDYXRlZ29yaXplIGFubm91bmNlbWVudHMgYnkgdHlwZQogICAgICAgIHZhciBDcml0aWNhbEFubm91bmNlbWVudHMgPSBbXTsKICAgICAgICB2YXIgV2FybmluZ0Fubm91bmNlbWVudHMgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBbm5vdW5jZW1lbnRMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBBID0gQW5ub3VuY2VtZW50TGlzdFtpXTsKICAgICAgICAgICAgaWYgKEEuQW5ub3VuY2VtZW50VHlwZSA9PT0gJ2NyaXRpY2FsJykgewogICAgICAgICAgICAgICAgQ3JpdGljYWxBbm5vdW5jZW1lbnRzLnB1c2goQSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQS5Bbm5vdW5jZW1lbnRUeXBlID09PSAnd2FybmluZycpIHsKICAgICAgICAgICAgICAgIFdhcm5pbmdBbm5vdW5jZW1lbnRzLnB1c2goQSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIERldGVybWluZSBoaWdoZXN0IHByaW9yaXR5IHR5cGUKICAgICAgICB2YXIgSGlnaGVzdFR5cGUgPSAnaW5mbyc7CiAgICAgICAgaWYgKENyaXRpY2FsQW5ub3VuY2VtZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIEhpZ2hlc3RUeXBlID0gJ2NyaXRpY2FsJzsKICAgICAgICB9IGVsc2UgaWYgKFdhcm5pbmdBbm5vdW5jZW1lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgSGlnaGVzdFR5cGUgPSAnd2FybmluZyc7CiAgICAgICAgfQoKICAgICAgICB2YXIgRGlzcGxheVRleHQgPSAnJzsKICAgICAgICB2YXIgRGlzcGxheVR5cGUgPSBIaWdoZXN0VHlwZTsKICAgICAgICB2YXIgVG9vbHRpcFRleHQgPSAnJzsKCiAgICAgICAgLy8gQ2FzZSAxOiBPbmx5IG9uZSBhbm5vdW5jZW1lbnQgLSBzaG93IGl0cyB0aXRsZQogICAgICAgIGlmIChDb3VudCA9PT0gMSkgewogICAgICAgICAgICBEaXNwbGF5VGV4dCA9IEFubm91bmNlbWVudExpc3RbMF0uVGl0bGU7CiAgICAgICAgICAgIERpc3BsYXlUeXBlID0gQW5ub3VuY2VtZW50TGlzdFswXS5Bbm5vdW5jZW1lbnRUeXBlOwogICAgICAgICAgICBUb29sdGlwVGV4dCA9IERpc3BsYXlUZXh0OwogICAgICAgIH0KICAgICAgICAvLyBDYXNlIDI6IE11bHRpcGxlIGFubm91bmNlbWVudHMgd2l0aCBleGFjdGx5IG9uZSBjcml0aWNhbCAtIHNob3cgdGhlIGNyaXRpY2FsIG9uZQogICAgICAgIGVsc2UgaWYgKENyaXRpY2FsQW5ub3VuY2VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgRGlzcGxheVRleHQgPSBDcml0aWNhbEFubm91bmNlbWVudHNbMF0uVGl0bGU7CiAgICAgICAgICAgIERpc3BsYXlUeXBlID0gJ2NyaXRpY2FsJzsKICAgICAgICAgICAgVG9vbHRpcFRleHQgPSBDb3VudCArICcgJyArIFRhcmdldE5TLlRyYW5zbGF0ZSgnYW5ub3VuY2VtZW50cycpICsgJyAtICcgKyBEaXNwbGF5VGV4dDsKICAgICAgICB9CiAgICAgICAgLy8gQ2FzZSAzOiBNdWx0aXBsZSBhbm5vdW5jZW1lbnRzIC0gc2hvdyBjb3VudAogICAgICAgIGVsc2UgewogICAgICAgICAgICBEaXNwbGF5VGV4dCA9IENvdW50ICsgJyAnICsgVGFyZ2V0TlMuVHJhbnNsYXRlKCdhbm5vdW5jZW1lbnRzJyk7CiAgICAgICAgICAgIFRvb2x0aXBUZXh0ID0gVGFyZ2V0TlMuVHJhbnNsYXRlKCdDbGljayB0byB2aWV3IGFsbCBhbm5vdW5jZW1lbnRzJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0ZXh0OiBEaXNwbGF5VGV4dCwKICAgICAgICAgICAgdHlwZTogRGlzcGxheVR5cGUsCiAgICAgICAgICAgIHRvb2x0aXA6IFRvb2x0aXBUZXh0CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBCdWlsZEFubm91bmNlbWVudENhcmQoQW5ub3VuY2VtZW50KSB7CiAgICAgICAgdmFyIFR5cGVJY29uID0gR2V0VHlwZUljb24oQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUpOwogICAgICAgIHZhciBUeXBlTGFiZWwgPSBUYXJnZXROUy5UcmFuc2xhdGUoQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBBbm5vdW5jZW1lbnQuQW5ub3VuY2VtZW50VHlwZS5zbGljZSgxKSk7CgogICAgICAgIHZhciBIVE1MID0gJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudENhcmQgQW5ub3VuY2VtZW50Q2FyZC0tJyArIFRhcmdldE5TLkVzY2FwZUh0bWwoQW5ub3VuY2VtZW50LkFubm91bmNlbWVudFR5cGUpICsgJyI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX19oZWFkZXIiPicgKwogICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX190eXBlIj4nICsgVHlwZUljb24gKyAnICcgKyBUYXJnZXROUy5Fc2NhcGVIdG1sKFR5cGVMYWJlbCkgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJBbm5vdW5jZW1lbnRDYXJkX190aXRsZSI+JyArIFRhcmdldE5TLkVzY2FwZUh0bWwoQW5ub3VuY2VtZW50LlRpdGxlKSArICc8L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9IkFubm91bmNlbWVudENhcmRfX2JvZHkiPicgKyBBbm5vdW5jZW1lbnQuQm9keSArICc8L2Rpdj4nICsKICAgICAgICAnPC9kaXY+JzsKCiAgICAgICAgcmV0dXJuIEhUTUw7CiAgICB9CgogICAgZnVuY3Rpb24gR2V0VHlwZUljb24oVHlwZSkgewogICAgICAgIHN3aXRjaCAoVHlwZSkgewogICAgICAgICAgICBjYXNlICdjcml0aWNhbCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJzxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4nOwogICAgICAgICAgICBjYXNlICd3YXJuaW5nJzoKICAgICAgICAgICAgICAgIHJldHVybiAnPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+JzsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAnPGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+JzsKICAgICAgICB9CiAgICB9CgogICAgLy8gSW5pdGlhbGl6YXRpb24gaXMgZHJpdmVuIGJ5IEFubm91bmNlbWVudC9Jbml0LnR0LCB3aGljaCBjYWxscwogICAgLy8gVGFyZ2V0TlMuSW5pdCgpIGRpcmVjdGx5IG9uY2UgdGhlIGNvbmZpZyBpdCBzZXRzIGlzIGFjdHVhbGx5CiAgICAvLyBhdmFpbGFibGUgYW5kIHRoZSBET00gaXMgcmVhZHkgLSBzZWUgdGhlIGNvbW1lbnQgdGhlcmUuIEEKICAgIC8vIHNlbGYtcmVnaXN0ZXJlZCBDb3JlLkFwcC5SZWFkeSgpIGhlcmUgcmFjZWQgdGhhdDogaXQgZmlyZXMgb25jZSwgYXQKICAgIC8vIHdoYXRldmVyIG1vbWVudCAkKGRvY3VtZW50KS5yZWFkeSByZXNvbHZlcywgYW5kIGlmIHRoYXQgaGFwcGVuZWQKICAgIC8vIGJlZm9yZSBJbml0LnR0J3Mgb3duIHBvbGxpbmcgbG9vcCBoYWQgc2V0IHRoZSBjb25maWcgeWV0LCBJbml0KCkKICAgIC8vIHdvdWxkIHNpbGVudGx5IG5ldmVyIHJ1biAtIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3YXMgaGFwcGVuaW5nIG9uCiAgICAvLyB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlICh0aGUgYWdlbnQgaW50ZXJmYWNlIGhhcHBlbmVkIHRvIHdpbiB0aGUKICAgIC8vIHJhY2UsIHdoaWNoIGlzIHdoeSB0aGlzIGJ1ZyBsb29rZWQgY3VzdG9tZXItb25seSkuCgogICAgcmV0dXJuIFRhcmdldE5TOwp9KENvcmUuQ3VzdG9tZXIuQW5ub3VuY2VtZW50IHx8IHt9KSk7Cg==</File>

        <!-- CSS - Agent -->
        <File Permission="660" Location="var/httpd/htdocs/skins/Agent/default/css/Core.Agent.Announcement.css" Encode="Base64">LyoqCiAqIFpudW55IEFubm91bmNlbWVudCBBZGQtb24gLSBBZ2VudCBTdHlsZXMKICoKICogRGVzaWduIFBoaWxvc29waHk6CiAqIC0gWm51bnktbmF0aXZlIGxvb2sgYW5kIGZlZWwKICogLSBBY2Nlc3NpYmxlIGFuZCBub24taW50cnVzaXZlCiAqIC0gQ2xlYXIgcHJpb3JpdHkgdmlzdWFsaXphdGlvbgogKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBDU1MgVmFyaWFibGVzIC0gQ29sb3IgUGFsZXR0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgo6cm9vdCB7CiAgICAvKiBBbm5vdW5jZW1lbnQgdHlwZSBjb2xvcnMgKi8KICAgIC0tc2EtaW5mby1iZzogI2Q5ZWRmNzsKICAgIC0tc2EtaW5mby1ib3JkZXI6ICNiY2U4ZjE7CiAgICAtLXNhLWluZm8tdGV4dDogIzMxNzA4ZjsKICAgIC0tc2EtaW5mby1pY29uOiAjMzM3YWI3OwoKICAgIC0tc2Etd2FybmluZy1iZzogI2ZjZjhlMzsKICAgIC0tc2Etd2FybmluZy1ib3JkZXI6ICNmYWViY2M7CiAgICAtLXNhLXdhcm5pbmctdGV4dDogIzhhNmQzYjsKICAgIC0tc2Etd2FybmluZy1pY29uOiAjZjBhZDRlOwoKICAgIC0tc2EtY3JpdGljYWwtYmc6ICNmMmRlZGU7CiAgICAtLXNhLWNyaXRpY2FsLWJvcmRlcjogI2ViY2NkMTsKICAgIC0tc2EtY3JpdGljYWwtdGV4dDogI2E5NDQ0MjsKICAgIC0tc2EtY3JpdGljYWwtaWNvbjogI2Q5NTM0ZjsKCiAgICAvKiBVSSBjb2xvcnMgKi8KICAgIC0tc2Etb3ZlcmxheS1iZzogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgLS1zYS1wYW5lbC1iZzogI2ZmZjsKICAgIC0tc2EtcGFuZWwtYm9yZGVyOiAjZGRkOwogICAgLS1zYS1wYW5lbC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgIC0tc2EtbGluay1jb2xvcjogI2Y5MjsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIE5hdmlnYXRpb24gQmFyIEJhbm5lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi5Bbm5vdW5jZW1lbnROYXZCYW5uZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbWF4LXdpZHRoOiAzMDBweDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7Cn0KCi5Bbm5vdW5jZW1lbnROYXZCYW5uZXI6aG92ZXIgewogICAgb3BhY2l0eTogMC45OwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKfQoKLyogVHlwZS1zcGVjaWZpYyBzdHlsZXMgKi8KLkFubm91bmNlbWVudE5hdkJhbm5lci0taW5mbyB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYS1pbmZvLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXNhLWluZm8tYm9yZGVyKTsKICAgIGNvbG9yOiB2YXIoLS1zYS1pbmZvLXRleHQpOwp9CgouQW5ub3VuY2VtZW50TmF2QmFubmVyLS13YXJuaW5nIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXNhLXdhcm5pbmctYmcpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2Etd2FybmluZy1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLXNhLXdhcm5pbmctdGV4dCk7Cn0KCi5Bbm5vdW5jZW1lbnROYXZCYW5uZXItLWNyaXRpY2FsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXNhLWNyaXRpY2FsLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXNhLWNyaXRpY2FsLWJvcmRlcik7CiAgICBjb2xvcjogdmFyKC0tc2EtY3JpdGljYWwtdGV4dCk7Cn0KCi5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2ljb24gewogICAgZm9udC1zaXplOiAxNHB4OwogICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLkFubm91bmNlbWVudE5hdkJhbm5lcl9fY29udGVudCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7Cn0KCi5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2JhZGdlIHsKICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYmFja2dyb3VuZDogIzY2NjsKICAgIGNvbG9yOiAjZmZmOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIFJlc3BvbnNpdmUgYWRqdXN0bWVudHMgKi8KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTIwMHB4KSB7CiAgICAuQW5ub3VuY2VtZW50TmF2QmFubmVyIHsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgfQp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5MDBweCkgewogICAgLkFubm91bmNlbWVudE5hdkJhbm5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgfQoKICAgIC5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2NvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpIHsKICAgIC5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2NvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLkFubm91bmNlbWVudE5hdkJhbm5lciB7CiAgICAgICAgbWF4LXdpZHRoOiBub25lOwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgfQoKICAgIC5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2ljb24gewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIEZ1bGwgT3ZlcmxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouQW5ub3VuY2VtZW50T3ZlcmxheSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYS1vdmVybGF5LWJnKTsKICAgIHotaW5kZXg6IDEwMDAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFuaW1hdGlvbjogb3ZlcmxheUZhZGVJbiAwLjJzIGVhc2U7Cn0KCkBrZXlmcmFtZXMgb3ZlcmxheUZhZGVJbiB7CiAgICBmcm9tIHsgb3BhY2l0eTogMDsgfQogICAgdG8geyBvcGFjaXR5OiAxOyB9Cn0KCmJvZHkuQW5ub3VuY2VtZW50T3ZlcmxheS0tb3BlbiB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgouQW5ub3VuY2VtZW50T3ZlcmxheV9fY29udGFpbmVyIHsKICAgIHdpZHRoOiA5MCU7CiAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgbWF4LWhlaWdodDogOTB2aDsKICAgIGJhY2tncm91bmQ6IHZhcigtLXNhLXBhbmVsLWJnKTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJveC1zaGFkb3c6IDAgMTBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYW5pbWF0aW9uOiBvdmVybGF5U2xpZGVJbiAwLjNzIGVhc2U7Cn0KCkBrZXlmcmFtZXMgb3ZlcmxheVNsaWRlSW4gewogICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgouQW5ub3VuY2VtZW50T3ZlcmxheV9faGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogMjBweCAyNXB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNhLXBhbmVsLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19oZWFkZXIgaDIgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjMzMzOwp9CgouQW5ub3VuY2VtZW50T3ZlcmxheV9fY2xvc2UgewogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGNvbG9yOiAjNjY2OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19jbG9zZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZTBlMGUwOwogICAgY29sb3I6ICMzMzM7Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcGFkZGluZzogMjBweCAyNXB4Owp9CgouQW5ub3VuY2VtZW50T3ZlcmxheV9fZW1wdHkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNjBweCAyMHB4OwogICAgY29sb3I6ICM5OTk7Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19lbXB0eSBpIHsKICAgIGZvbnQtc2l6ZTogNDhweDsKICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIEFubm91bmNlbWVudCBDYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouQW5ub3VuY2VtZW50Q2FyZCB7CiAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLkFubm91bmNlbWVudENhcmQ6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgouQW5ub3VuY2VtZW50Q2FyZC0taW5mbyB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYS1pbmZvLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXNhLWluZm8tYm9yZGVyKTsKfQoKLkFubm91bmNlbWVudENhcmQtLXdhcm5pbmcgewogICAgYmFja2dyb3VuZDogdmFyKC0tc2Etd2FybmluZy1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zYS13YXJuaW5nLWJvcmRlcik7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkLS1jcml0aWNhbCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYS1jcml0aWNhbC1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zYS1jcml0aWNhbC1ib3JkZXIpOwp9CgouQW5ub3VuY2VtZW50Q2FyZF9faGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTsKfQoKLkFubm91bmNlbWVudENhcmRfX3R5cGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgouQW5ub3VuY2VtZW50Q2FyZC0taW5mbyAuQW5ub3VuY2VtZW50Q2FyZF9fdHlwZSB7CiAgICBjb2xvcjogdmFyKC0tc2EtaW5mby10ZXh0KTsKfQoKLkFubm91bmNlbWVudENhcmQtLXdhcm5pbmcgLkFubm91bmNlbWVudENhcmRfX3R5cGUgewogICAgY29sb3I6IHZhcigtLXNhLXdhcm5pbmctdGV4dCk7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkLS1jcml0aWNhbCAuQW5ub3VuY2VtZW50Q2FyZF9fdHlwZSB7CiAgICBjb2xvcjogdmFyKC0tc2EtY3JpdGljYWwtdGV4dCk7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19iYWRnZSB7CiAgICBjb2xvcjogIzk5OTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLkFubm91bmNlbWVudENhcmRfX3RpdGxlIHsKICAgIHBhZGRpbmc6IDE1cHg7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICMzMzM7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IHsKICAgIHBhZGRpbmc6IDAgMTVweCAxNXB4IDE1cHg7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgY29sb3I6ICM0NDQ7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IHAgewogICAgbWFyZ2luOiAwIDAgMTBweCAwOwp9CgouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSBwOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLyogWm51bnkgY29yZSdzIENvcmUuUmVzZXQuY3NzIHplcm9lcyBsaXN0LXN0eWxlL21hcmdpbi9wYWRkaW5nIG9uIGV2ZXJ5CiAqIDx1bD4vPG9sPiBzaXRlLXdpZGUgKFlVSS1zdHlsZSByZXNldCwgbWVhbnQgZm9yIG5hdi9tZW51IGxpc3RzKSAtIHRoZQogKiBXWVNJV1lHIGVkaXRvcidzIG93biBidWxsZXRlZC9udW1iZXJlZCBsaXN0cyBuZWVkIGl0IHJlc3RvcmVkIGhlcmUsIG9yCiAqIHRoZXkgcmVuZGVyIGFzIHBsYWluIHVubWFya2VkLCB1bmluZGVudGVkIGxpbmVzLiAqLwouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSB1bCwKLkFubm91bmNlbWVudENhcmRfX2JvZHkgb2wgewogICAgbWFyZ2luOiAwIDAgMTBweCAyMHB4OwogICAgcGFkZGluZzogMDsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgdWwgewogICAgbGlzdC1zdHlsZTogZGlzYzsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgb2wgewogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgbGkgewogICAgbWFyZ2luOiAwIDAgNHB4IDA7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IHVsOmxhc3QtY2hpbGQsCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IG9sOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQo=</File>

        <!-- CSS - Customer -->
        <File Permission="660" Location="var/httpd/htdocs/skins/Customer/default/css/Core.Customer.Announcement.css" Encode="Base64">LyoqCiAqIFpudW55IEFubm91bmNlbWVudCBBZGQtb24gLSBDdXN0b21lciBTdHlsZXMKICoKICogU2ltaWxhciB0byBBZ2VudCBzdHlsZXMsIGFkYXB0ZWQgZm9yIEN1c3RvbWVyIGludGVyZmFjZQogKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBDU1MgVmFyaWFibGVzIC0gQ29sb3IgUGFsZXR0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgo6cm9vdCB7CiAgICAtLXNhLWluZm8tYmc6ICNkOWVkZjc7CiAgICAtLXNhLWluZm8tYm9yZGVyOiAjYmNlOGYxOwogICAgLS1zYS1pbmZvLXRleHQ6ICMzMTcwOGY7CiAgICAtLXNhLWluZm8taWNvbjogIzMzN2FiNzsKCiAgICAtLXNhLXdhcm5pbmctYmc6ICNmY2Y4ZTM7CiAgICAtLXNhLXdhcm5pbmctYm9yZGVyOiAjZmFlYmNjOwogICAgLS1zYS13YXJuaW5nLXRleHQ6ICM4YTZkM2I7CiAgICAtLXNhLXdhcm5pbmctaWNvbjogI2YwYWQ0ZTsKCiAgICAtLXNhLWNyaXRpY2FsLWJnOiAjZjJkZWRlOwogICAgLS1zYS1jcml0aWNhbC1ib3JkZXI6ICNlYmNjZDE7CiAgICAtLXNhLWNyaXRpY2FsLXRleHQ6ICNhOTQ0NDI7CiAgICAtLXNhLWNyaXRpY2FsLWljb246ICNkOTUzNGY7CgogICAgLS1zYS1vdmVybGF5LWJnOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAtLXNhLXBhbmVsLWJnOiAjZmZmOwogICAgLS1zYS1wYW5lbC1ib3JkZXI6ICNkZGQ7CiAgICAtLXNhLXBhbmVsLXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgLS1zYS1saW5rLWNvbG9yOiAjZjkyOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogTmF2aWdhdGlvbiBCYXIgQmFubmVyIChpZGVudGljYWwgdG8gQWdlbnQgaW50ZXJmYWNlKSAgICAgICAgICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLkFubm91bmNlbWVudE5hdkJhbm5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgdHJhbnNmb3JtIDAuMnMgZWFzZTsKfQoKLkFubm91bmNlbWVudE5hdkJhbm5lcjpob3ZlciB7CiAgICBvcGFjaXR5OiAwLjk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpOwp9CgovKiBUeXBlLXNwZWNpZmljIHN0eWxlcyAqLwouQW5ub3VuY2VtZW50TmF2QmFubmVyLS1pbmZvIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXNhLWluZm8tYmcpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2EtaW5mby1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLXNhLWluZm8tdGV4dCk7Cn0KCi5Bbm5vdW5jZW1lbnROYXZCYW5uZXItLXdhcm5pbmcgewogICAgYmFja2dyb3VuZDogdmFyKC0tc2Etd2FybmluZy1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zYS13YXJuaW5nLWJvcmRlcik7CiAgICBjb2xvcjogdmFyKC0tc2Etd2FybmluZy10ZXh0KTsKfQoKLkFubm91bmNlbWVudE5hdkJhbm5lci0tY3JpdGljYWwgewogICAgYmFja2dyb3VuZDogdmFyKC0tc2EtY3JpdGljYWwtYmcpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2EtY3JpdGljYWwtYm9yZGVyKTsKICAgIGNvbG9yOiB2YXIoLS1zYS1jcml0aWNhbC10ZXh0KTsKfQoKLkFubm91bmNlbWVudE5hdkJhbm5lcl9faWNvbiB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgouQW5ub3VuY2VtZW50TmF2QmFubmVyX19jb250ZW50IHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKfQoKLkFubm91bmNlbWVudE5hdkJhbm5lcl9fYmFkZ2UgewogICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgIG1pbi13aWR0aDogMjBweDsKICAgIGhlaWdodDogMjBweDsKICAgIHBhZGRpbmc6IDAgNnB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiAjNjY2OwogICAgY29sb3I6ICNmZmY7CiAgICBmbGV4LXNocmluazogMDsKfQoKLyogUmVzcG9uc2l2ZSBhZGp1c3RtZW50cyBmb3IgQ3VzdG9tZXIgaGVhZGVyICovCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEyMDBweCkgewogICAgLkFubm91bmNlbWVudE5hdkJhbm5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIH0KfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTAwcHgpIHsKICAgIC5Bbm5vdW5jZW1lbnROYXZCYW5uZXIgewogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBtYXJnaW46IDAgMTBweDsKICAgIH0KCiAgICAuQW5ub3VuY2VtZW50TmF2QmFubmVyX19jb250ZW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAuQW5ub3VuY2VtZW50TmF2QmFubmVyX19jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5Bbm5vdW5jZW1lbnROYXZCYW5uZXIgewogICAgICAgIG1heC13aWR0aDogbm9uZTsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgfQoKICAgIC5Bbm5vdW5jZW1lbnROYXZCYW5uZXJfX2ljb24gewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIEZ1bGwgT3ZlcmxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouQW5ub3VuY2VtZW50T3ZlcmxheSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYS1vdmVybGF5LWJnKTsKICAgIHotaW5kZXg6IDEwMDAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKYm9keS5Bbm5vdW5jZW1lbnRPdmVybGF5LS1vcGVuIHsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19jb250YWluZXIgewogICAgd2lkdGg6IDkwJTsKICAgIG1heC13aWR0aDogODAwcHg7CiAgICBtYXgtaGVpZ2h0OiA5MHZoOwogICAgYmFja2dyb3VuZDogdmFyKC0tc2EtcGFuZWwtYmcpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCAxMHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiAyMHB4IDI1cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tc2EtcGFuZWwtYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICBib3JkZXItcmFkaXVzOiA2cHggNnB4IDAgMDsKfQoKLkFubm91bmNlbWVudE92ZXJsYXlfX2hlYWRlciBoMiB7CiAgICBtYXJnaW46IDA7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICMzMzM7Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19jbG9zZSB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgZm9udC1zaXplOiAyMHB4OwogICAgY29sb3I6ICM2NjY7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKLkFubm91bmNlbWVudE92ZXJsYXlfX2Nsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNlMGUwZTA7CiAgICBjb2xvcjogIzMzMzsKfQoKLkFubm91bmNlbWVudE92ZXJsYXlfX2NvbnRlbnQgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiAyMHB4IDI1cHg7Cn0KCi5Bbm5vdW5jZW1lbnRPdmVybGF5X19lbXB0eSB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiA2MHB4IDIwcHg7CiAgICBjb2xvcjogIzk5OTsKfQoKLkFubm91bmNlbWVudE92ZXJsYXlfX2VtcHR5IGkgewogICAgZm9udC1zaXplOiA0OHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogQW5ub3VuY2VtZW50IENhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi5Bbm5vdW5jZW1lbnRDYXJkIHsKICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgouQW5ub3VuY2VtZW50Q2FyZDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkLS1pbmZvIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXNhLWluZm8tYmcpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2EtaW5mby1ib3JkZXIpOwp9CgouQW5ub3VuY2VtZW50Q2FyZC0td2FybmluZyB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYS13YXJuaW5nLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXNhLXdhcm5pbmctYm9yZGVyKTsKfQoKLkFubm91bmNlbWVudENhcmQtLWNyaXRpY2FsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXNhLWNyaXRpY2FsLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXNhLWNyaXRpY2FsLWJvcmRlcik7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpOwp9CgouQW5ub3VuY2VtZW50Q2FyZF9fdHlwZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkLS1pbmZvIC5Bbm5vdW5jZW1lbnRDYXJkX190eXBlIHsKICAgIGNvbG9yOiB2YXIoLS1zYS1pbmZvLXRleHQpOwp9CgouQW5ub3VuY2VtZW50Q2FyZC0td2FybmluZyAuQW5ub3VuY2VtZW50Q2FyZF9fdHlwZSB7CiAgICBjb2xvcjogdmFyKC0tc2Etd2FybmluZy10ZXh0KTsKfQoKLkFubm91bmNlbWVudENhcmQtLWNyaXRpY2FsIC5Bbm5vdW5jZW1lbnRDYXJkX190eXBlIHsKICAgIGNvbG9yOiB2YXIoLS1zYS1jcml0aWNhbC10ZXh0KTsKfQoKLkFubm91bmNlbWVudENhcmRfX3RpdGxlIHsKICAgIHBhZGRpbmc6IDE1cHg7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICMzMzM7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IHsKICAgIHBhZGRpbmc6IDAgMTVweCAxNXB4IDE1cHg7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgcCwKLkFubm91bmNlbWVudENhcmRfX2JvZHkgc3BhbiwKLkFubm91bmNlbWVudENhcmRfX2JvZHkgZGl2IHsKICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7Cn0KCi5Bbm5vdW5jZW1lbnRDYXJkX19ib2R5IHAgewogICAgbWFyZ2luOiAwIDAgMTBweCAwOwp9CgouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSBwOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLyogWm51bnkgY29yZSdzIENvcmUuUmVzZXQuY3NzIHplcm9lcyBsaXN0LXN0eWxlL21hcmdpbi9wYWRkaW5nIG9uIGV2ZXJ5CiAqIDx1bD4vPG9sPiBzaXRlLXdpZGUgKFlVSS1zdHlsZSByZXNldCwgbWVhbnQgZm9yIG5hdi9tZW51IGxpc3RzKSAtIHRoZQogKiBXWVNJV1lHIGVkaXRvcidzIG93biBidWxsZXRlZC9udW1iZXJlZCBsaXN0cyBuZWVkIGl0IHJlc3RvcmVkIGhlcmUsIG9yCiAqIHRoZXkgcmVuZGVyIGFzIHBsYWluIHVubWFya2VkLCB1bmluZGVudGVkIGxpbmVzLiAqLwouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSB1bCwKLkFubm91bmNlbWVudENhcmRfX2JvZHkgb2wgewogICAgbWFyZ2luOiAwIDAgMTBweCAyMHB4OwogICAgcGFkZGluZzogMDsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgdWwgewogICAgbGlzdC1zdHlsZTogZGlzYzsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgb2wgewogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKfQoKLkFubm91bmNlbWVudENhcmRfX2JvZHkgbGkgewogICAgbWFyZ2luOiAwIDAgNHB4IDA7CiAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50Owp9CgouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSB1bDpsYXN0LWNoaWxkLAouQW5ub3VuY2VtZW50Q2FyZF9fYm9keSBvbDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0K</File>

        <!-- Unit Tests -->
        <File Permission="660" Location="scripts/test/Announcement/AnnouncementCRUD.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXJPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJEFubm91bmNlbWVudE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50Jyk7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDE6IEFubm91bmNlbWVudEFkZCgpIC0gcmVxdWlyZWQgcGFyYW1ldGVyIHZhbGlkYXRpb24KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmZvciBteSAkTmVlZGVkIChxdyhUaXRsZSBCb2R5IEFubm91bmNlbWVudFR5cGUgVGFyZ2V0QXVkaWVuY2UgVXNlcklEKSkgewogICAgbXkgJVBhcmFtcyA9ICgKICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICJDUlVEIHRlc3QgJFJhbmRvbUlEIiwKICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdTb21lIGJvZHkgdGV4dCcsCiAgICAgICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICAgICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICk7CiAgICBkZWxldGUgJFBhcmFtc3skTmVlZGVkfTsKCiAgICBteSAkUmVzdWx0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKCVQYXJhbXMpOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAoICRSZXN1bHQgPyAxIDogMCApLAogICAgICAgICJBbm5vdW5jZW1lbnRBZGQoKTogcmV0dXJucyBmYWxzZS91bmRlZiB3aGVuIHJlcXVpcmVkIHBhcmFtZXRlciAnJE5lZWRlZCcgaXMgbWlzc2luZyIsCiAgICApOwp9CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgMjogQW5ub3VuY2VtZW50QWRkKCkgLSB2YWx1ZSB2YWxpZGF0aW9uCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpteSAkSW52YWxpZFR5cGVSZXN1bHQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJDUlVEIHRlc3QgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ1NvbWUgYm9keSB0ZXh0JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ3VyZ2VudCcsICAgICMgbm90IG9uZSBvZiBpbmZvL3dhcm5pbmcvY3JpdGljYWwKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICggJEludmFsaWRUeXBlUmVzdWx0ID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRBZGQoKTogcmVqZWN0cyBhbiBpbnZhbGlkIEFubm91bmNlbWVudFR5cGUnLAopOwoKbXkgJEludmFsaWRBdWRpZW5jZVJlc3VsdCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEFkZCgKICAgIFRpdGxlICAgICAgICAgICAgPT4gIkNSVUQgdGVzdCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnU29tZSBib2R5IHRleHQnLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdjdXN0b21lcicsICAgICMgbm90IG9uZSBvZiBhZ2VudC9hbGwKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICggJEludmFsaWRBdWRpZW5jZVJlc3VsdCA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50QWRkKCk6IHJlamVjdHMgYW4gaW52YWxpZCBUYXJnZXRBdWRpZW5jZSAob25seSBhZ2VudC9hbGwgYXJlIGFsbG93ZWQpJywKKTsKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUGFydCAzOiBBbm5vdW5jZW1lbnRBZGQoKSAtIGhhcHB5IHBhdGggKyBkZWZhdWx0cwojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKbXkgJEFubm91bmNlbWVudElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQ1JVRCB0ZXN0ICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdTb21lIGJvZHkgdGV4dCcsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICd3YXJuaW5nJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FsbCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICggJEFubm91bmNlbWVudElEICYmICRBbm5vdW5jZW1lbnRJRCA9fiAvXlxkKyQvID8gMSA6IDAgKSwKICAgICJBbm5vdW5jZW1lbnRBZGQoKTogcmV0dXJucyBhIG51bWVyaWMgSUQgb24gc3VjY2VzcyAtIElEOiAiIC4gKCAkQW5ub3VuY2VtZW50SUQgLy8gJ3VuZGVmJyApLAopOwoKbXkgJUFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CgokU2VsZi0+SXMoCiAgICAkQW5ub3VuY2VtZW50e1Nob3dCZWZvcmVMb2dpbn0sCiAgICAwLAogICAgJ0Fubm91bmNlbWVudEFkZCgpOiBTaG93QmVmb3JlTG9naW4gZGVmYXVsdHMgdG8gMCB3aGVuIG5vdCBnaXZlbicsCik7CgokU2VsZi0+SXMoCiAgICAkQW5ub3VuY2VtZW50e1ZhbGlkRnJvbX0sCiAgICB1bmRlZiwKICAgICdBbm5vdW5jZW1lbnRBZGQoKTogVmFsaWRGcm9tIHN0YXlzIE5VTEwgd2hlbiBub3QgZ2l2ZW4nLAopOwoKJFNlbGYtPklzKAogICAgJEFubm91bmNlbWVudHtWYWxpZFRvfSwKICAgIHVuZGVmLAogICAgJ0Fubm91bmNlbWVudEFkZCgpOiBWYWxpZFRvIHN0YXlzIE5VTEwgd2hlbiBub3QgZ2l2ZW4nLAopOwoKJFNlbGYtPklzKAogICAgJEFubm91bmNlbWVudHtUaXRsZX0sCiAgICAiQ1JVRCB0ZXN0ICRSYW5kb21JRCIsCiAgICAnQW5ub3VuY2VtZW50R2V0KCk6IFRpdGxlIG1hdGNoZXMgd2hhdCB3YXMgYWRkZWQnLAopOwoKJFNlbGYtPklzKAogICAgJEFubm91bmNlbWVudHtBbm5vdW5jZW1lbnRUeXBlfSwKICAgICd3YXJuaW5nJywKICAgICdBbm5vdW5jZW1lbnRHZXQoKTogQW5ub3VuY2VtZW50VHlwZSBtYXRjaGVzIHdoYXQgd2FzIGFkZGVkJywKKTsKCiRTZWxmLT5JcygKICAgICRBbm5vdW5jZW1lbnR7VGFyZ2V0QXVkaWVuY2V9LAogICAgJ2FsbCcsCiAgICAnQW5ub3VuY2VtZW50R2V0KCk6IFRhcmdldEF1ZGllbmNlIG1hdGNoZXMgd2hhdCB3YXMgYWRkZWQnLAopOwoKJFNlbGYtPlRydWUoCiAgICAoICRBbm5vdW5jZW1lbnR7Q3JlYXRlVGltZX0gPyAxIDogMCApLAogICAgJ0Fubm91bmNlbWVudEdldCgpOiBDcmVhdGVUaW1lIGlzIHBvcHVsYXRlZCcsCik7CgokU2VsZi0+SXMoCiAgICAkQW5ub3VuY2VtZW50e0NyZWF0ZUJ5fSwKICAgIDEsCiAgICAnQW5ub3VuY2VtZW50R2V0KCk6IENyZWF0ZUJ5IG1hdGNoZXMgdGhlIFVzZXJJRCB0aGF0IGNyZWF0ZWQgaXQnLAopOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDQ6IEFubm91bmNlbWVudEFkZCgpIC0gZW1wdHktc3RyaW5nIFZhbGlkRnJvbS9WYWxpZFRvIGJlY29tZSBOVUxMCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpteSAkRW1wdHlEYXRlc0lEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQ1JVRCBlbXB0eSBkYXRlcyAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnU29tZSBib2R5IHRleHQnLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBWYWxpZEZyb20gICAgICAgID0+ICcnLAogICAgVmFsaWRUbyAgICAgICAgICA9PiAnJywKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgKCAkRW1wdHlEYXRlc0lEID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRBZGQoKTogYWNjZXB0cyBlbXB0eS1zdHJpbmcgVmFsaWRGcm9tL1ZhbGlkVG8nLAopOwoKbXkgJUVtcHR5RGF0ZXNBbm5vdW5jZW1lbnQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRHZXQoIElEID0+ICRFbXB0eURhdGVzSUQgKTsKCiRTZWxmLT5JcygKICAgICRFbXB0eURhdGVzQW5ub3VuY2VtZW50e1ZhbGlkRnJvbX0sCiAgICB1bmRlZiwKICAgICdBbm5vdW5jZW1lbnRBZGQoKTogZW1wdHktc3RyaW5nIFZhbGlkRnJvbSBpcyBzdG9yZWQgYXMgTlVMTCwgbm90IHRoZSBsaXRlcmFsIGVtcHR5IHN0cmluZycsCik7CgokU2VsZi0+SXMoCiAgICAkRW1wdHlEYXRlc0Fubm91bmNlbWVudHtWYWxpZFRvfSwKICAgIHVuZGVmLAogICAgJ0Fubm91bmNlbWVudEFkZCgpOiBlbXB0eS1zdHJpbmcgVmFsaWRUbyBpcyBzdG9yZWQgYXMgTlVMTCwgbm90IHRoZSBsaXRlcmFsIGVtcHR5IHN0cmluZycsCik7CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgNTogQW5ub3VuY2VtZW50R2V0KCkgLSBlZGdlIGNhc2VzCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpteSAlTm9JRCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCgpOwoKJFNlbGYtPkZhbHNlKAogICAgKCAlTm9JRCA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50R2V0KCk6IHJldHVybnMgbm90aGluZyB3aGVuIElEIGlzIG1pc3NpbmcnLAopOwoKbXkgJU5vdEZvdW5kID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50R2V0KCBJRCA9PiA5OTk5OTk5OTkgKTsKCiRTZWxmLT5GYWxzZSgKICAgICggJU5vdEZvdW5kID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRHZXQoKTogcmV0dXJucyBhbiBlbXB0eSBoYXNoIGZvciBhIG5vbi1leGlzdGVudCBJRCcsCik7CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgNjogQW5ub3VuY2VtZW50VXBkYXRlKCkgLSByZXF1aXJlZCBwYXJhbWV0ZXIgdmFsaWRhdGlvbgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZm9yIG15ICROZWVkZWQgKHF3KElEIFRpdGxlIEJvZHkgQW5ub3VuY2VtZW50VHlwZSBUYXJnZXRBdWRpZW5jZSBVc2VySUQpKSB7CiAgICBteSAlUGFyYW1zID0gKAogICAgICAgIElEICAgICAgICAgICAgICAgPT4gJEFubm91bmNlbWVudElELAogICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgdGl0bGUnLAogICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgYm9keScsCiAgICAgICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnY3JpdGljYWwnLAogICAgICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwogICAgZGVsZXRlICRQYXJhbXN7JE5lZWRlZH07CgogICAgbXkgJFJlc3VsdCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudFVwZGF0ZSglUGFyYW1zKTsKCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgKCAkUmVzdWx0ID8gMSA6IDAgKSwKICAgICAgICAiQW5ub3VuY2VtZW50VXBkYXRlKCk6IHJldHVybnMgZmFsc2UvdW5kZWYgd2hlbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyROZWVkZWQnIGlzIG1pc3NpbmciLAogICAgKTsKfQoKbXkgJEludmFsaWRVcGRhdGVUeXBlID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50VXBkYXRlKAogICAgSUQgICAgICAgICAgICAgICA9PiAkQW5ub3VuY2VtZW50SUQsCiAgICBUaXRsZSAgICAgICAgICAgID0+ICdVcGRhdGVkIHRpdGxlJywKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgYm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICd1cmdlbnQnLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgKCAkSW52YWxpZFVwZGF0ZVR5cGUgPyAxIDogMCApLAogICAgJ0Fubm91bmNlbWVudFVwZGF0ZSgpOiByZWplY3RzIGFuIGludmFsaWQgQW5ub3VuY2VtZW50VHlwZScsCik7CgpteSAkSW52YWxpZFVwZGF0ZUF1ZGllbmNlID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50VXBkYXRlKAogICAgSUQgICAgICAgICAgICAgICA9PiAkQW5ub3VuY2VtZW50SUQsCiAgICBUaXRsZSAgICAgICAgICAgID0+ICdVcGRhdGVkIHRpdGxlJywKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgYm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2V2ZXJ5b25lJywKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICggJEludmFsaWRVcGRhdGVBdWRpZW5jZSA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50VXBkYXRlKCk6IHJlamVjdHMgYW4gaW52YWxpZCBUYXJnZXRBdWRpZW5jZScsCik7CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgNzogQW5ub3VuY2VtZW50VXBkYXRlKCkgLSBoYXBweSBwYXRoCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpteSAkVXBkYXRlUmVzdWx0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50VXBkYXRlKAogICAgSUQgICAgICAgICAgICAgICA9PiAkQW5ub3VuY2VtZW50SUQsCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJVcGRhdGVkIHRpdGxlICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdVcGRhdGVkIGJvZHkgdGV4dCcsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdjcml0aWNhbCcsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBTaG93QmVmb3JlTG9naW4gID0+IDEsCiAgICBWYWxpZEZyb20gICAgICAgID0+ICcyMDIwLTAxLTAxIDAwOjAwOjAwJywKICAgIFZhbGlkVG8gICAgICAgICAgPT4gJzIwMjAtMDEtMDIgMDA6MDA6MDAnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAoICRVcGRhdGVSZXN1bHQgPyAxIDogMCApLAogICAgJ0Fubm91bmNlbWVudFVwZGF0ZSgpOiByZXR1cm5zIHRydWUgb24gc3VjY2VzcycsCik7CgpteSAlVXBkYXRlZEFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CgokU2VsZi0+SXMoCiAgICAkVXBkYXRlZEFubm91bmNlbWVudHtUaXRsZX0sCiAgICAiVXBkYXRlZCB0aXRsZSAkUmFuZG9tSUQiLAogICAgJ0Fubm91bmNlbWVudFVwZGF0ZSgpOiBUaXRsZSB3YXMgdXBkYXRlZCcsCik7CgokU2VsZi0+SXMoCiAgICAkVXBkYXRlZEFubm91bmNlbWVudHtBbm5vdW5jZW1lbnRUeXBlfSwKICAgICdjcml0aWNhbCcsCiAgICAnQW5ub3VuY2VtZW50VXBkYXRlKCk6IEFubm91bmNlbWVudFR5cGUgd2FzIHVwZGF0ZWQnLAopOwoKJFNlbGYtPklzKAogICAgJFVwZGF0ZWRBbm5vdW5jZW1lbnR7VGFyZ2V0QXVkaWVuY2V9LAogICAgJ2FnZW50JywKICAgICdBbm5vdW5jZW1lbnRVcGRhdGUoKTogVGFyZ2V0QXVkaWVuY2Ugd2FzIHVwZGF0ZWQnLAopOwoKJFNlbGYtPklzKAogICAgJFVwZGF0ZWRBbm5vdW5jZW1lbnR7U2hvd0JlZm9yZUxvZ2lufSwKICAgIDEsCiAgICAnQW5ub3VuY2VtZW50VXBkYXRlKCk6IFNob3dCZWZvcmVMb2dpbiB3YXMgdXBkYXRlZCcsCik7CgokU2VsZi0+SXMoCiAgICAkVXBkYXRlZEFubm91bmNlbWVudHtWYWxpZEZyb219LAogICAgJzIwMjAtMDEtMDEgMDA6MDA6MDAnLAogICAgJ0Fubm91bmNlbWVudFVwZGF0ZSgpOiBWYWxpZEZyb20gd2FzIHVwZGF0ZWQnLAopOwoKJFNlbGYtPklzKAogICAgJFVwZGF0ZWRBbm5vdW5jZW1lbnR7VmFsaWRUb30sCiAgICAnMjAyMC0wMS0wMiAwMDowMDowMCcsCiAgICAnQW5ub3VuY2VtZW50VXBkYXRlKCk6IFZhbGlkVG8gd2FzIHVwZGF0ZWQnLAopOwoKIyBVcGRhdGluZyB3aXRoIGVtcHR5LXN0cmluZyBkYXRlcyBtdXN0IGNsZWFyIHRoZW0gYmFjayB0byBOVUxMLgokQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRVcGRhdGUoCiAgICBJRCAgICAgICAgICAgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgIFRpdGxlICAgICAgICAgICAgPT4gIlVwZGF0ZWQgdGl0bGUgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ1VwZGF0ZWQgYm9keSB0ZXh0JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2NyaXRpY2FsJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFZhbGlkRnJvbSAgICAgICAgPT4gJycsCiAgICBWYWxpZFRvICAgICAgICAgID0+ICcnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJUNsZWFyZWREYXRlc0Fubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CgokU2VsZi0+SXMoCiAgICAkQ2xlYXJlZERhdGVzQW5ub3VuY2VtZW50e1ZhbGlkRnJvbX0sCiAgICB1bmRlZiwKICAgICdBbm5vdW5jZW1lbnRVcGRhdGUoKTogZW1wdHktc3RyaW5nIFZhbGlkRnJvbSBjbGVhcnMgdGhlIHZhbHVlIGJhY2sgdG8gTlVMTCcsCik7CgokU2VsZi0+SXMoCiAgICAkQ2xlYXJlZERhdGVzQW5ub3VuY2VtZW50e1ZhbGlkVG99LAogICAgdW5kZWYsCiAgICAnQW5ub3VuY2VtZW50VXBkYXRlKCk6IGVtcHR5LXN0cmluZyBWYWxpZFRvIGNsZWFycyB0aGUgdmFsdWUgYmFjayB0byBOVUxMJywKKTsKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUGFydCA4OiBBbm5vdW5jZW1lbnREZWxldGUoKQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZm9yIG15ICROZWVkZWQgKHF3KElEIFVzZXJJRCkpIHsKICAgIG15ICVQYXJhbXMgPSAoCiAgICAgICAgSUQgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBkZWxldGUgJFBhcmFtc3skTmVlZGVkfTsKCiAgICBteSAkUmVzdWx0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50RGVsZXRlKCVQYXJhbXMpOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAoICRSZXN1bHQgPyAxIDogMCApLAogICAgICAgICJBbm5vdW5jZW1lbnREZWxldGUoKTogcmV0dXJucyBmYWxzZS91bmRlZiB3aGVuIHJlcXVpcmVkIHBhcmFtZXRlciAnJE5lZWRlZCcgaXMgbWlzc2luZyIsCiAgICApOwp9CgpteSAkRGVsZXRlUmVzdWx0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50RGVsZXRlKAogICAgSUQgICAgID0+ICRBbm5vdW5jZW1lbnRJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAoICREZWxldGVSZXN1bHQgPyAxIDogMCApLAogICAgJ0Fubm91bmNlbWVudERlbGV0ZSgpOiByZXR1cm5zIHRydWUgb24gc3VjY2VzcycsCik7CgpteSAlRGVsZXRlZEFubm91bmNlbWVudCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEdldCggSUQgPT4gJEFubm91bmNlbWVudElEICk7CgokU2VsZi0+RmFsc2UoCiAgICAoICVEZWxldGVkQW5ub3VuY2VtZW50ID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRHZXQoKTogdGhlIGFubm91bmNlbWVudCBpcyBnb25lIGFmdGVyIEFubm91bmNlbWVudERlbGV0ZSgpJywKKTsKCjE7Cg==</File>
        <File Permission="660" Location="scripts/test/Announcement/AnnouncementList.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXJPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkQW5ub3VuY2VtZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFubm91bmNlbWVudCcpOwpteSAkQ2FjaGVPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCnN1YiBfVGltZU9mZnNldFN0cmluZyB7CiAgICBteSAoJVBhcmFtKSA9IEBfOwoKICAgIG15ICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKICAgIGlmICggJFBhcmFte1NlY29uZHN9ID49IDAgKSB7CiAgICAgICAgJERhdGVUaW1lT2JqZWN0LT5BZGQoIFNlY29uZHMgPT4gJFBhcmFte1NlY29uZHN9ICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPlN1YnRyYWN0KCBTZWNvbmRzID0+IGFicyggJFBhcmFte1NlY29uZHN9ICkgKTsKICAgIH0KCiAgICByZXR1cm4gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwp9CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgMTogb3JkZXJpbmcgKGNyaXRpY2FsID4gd2FybmluZyA+IGluZm8sIHRoZW4gY3JlYXRlX3RpbWUgREVTQykKIyAgICAgICAgIGFuZCB0aGUgTGltaXQgcGFyYW1ldGVyCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVTZXQoKTsKCm15ICRJbmZvSUQxID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTGlzdCBvcmRlciBpbmZvLTEgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0JvZHknLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVBZGRTZWNvbmRzKDEwKTsKCm15ICRXYXJuaW5nSUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJMaXN0IG9yZGVyIHdhcm5pbmcgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0JvZHknLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnd2FybmluZycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVBZGRTZWNvbmRzKDEwKTsKCm15ICRJbmZvSUQyID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTGlzdCBvcmRlciBpbmZvLTIgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0JvZHknLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVBZGRTZWNvbmRzKDEwKTsKCm15ICRDcml0aWNhbElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTGlzdCBvcmRlciBjcml0aWNhbCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdjcml0aWNhbCcsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSBARnVsbExpc3QgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRMaXN0KCBGaWx0ZXIgPT4gJ2FsbCcgKTsKbXkgQE9yZGVySURzID0gZ3JlcCB7CiAgICBteSAkSUQgPSAkXzsKICAgIGdyZXAgeyAkSUQgPT0gJF8gfSAoICRJbmZvSUQxLCAkV2FybmluZ0lELCAkSW5mb0lEMiwgJENyaXRpY2FsSUQgKQp9IG1hcCB7ICRfLT57SUR9IH0gQEZ1bGxMaXN0OwoKJFNlbGYtPklzRGVlcGx5KAogICAgXEBPcmRlcklEcywKICAgIFsgJENyaXRpY2FsSUQsICRXYXJuaW5nSUQsICRJbmZvSUQyLCAkSW5mb0lEMSBdLAogICAgJ0Fubm91bmNlbWVudExpc3QoKTogb3JkZXJzIGNyaXRpY2FsID4gd2FybmluZyA+IGluZm8sIGFuZCBicmVha3MgdGllcyB3aXRoaW4gdGhlIHNhbWUgdHlwZSBieSBjcmVhdGVfdGltZSBERVNDJywKKTsKCm15IEBMaW1pdGVkTGlzdCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudExpc3QoCiAgICBGaWx0ZXIgPT4gJ2FsbCcsCiAgICBMaW1pdCAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBATGltaXRlZExpc3QsCiAgICAxLAogICAgJ0Fubm91bmNlbWVudExpc3QoKTogTGltaXQgcmVzdHJpY3RzIHRoZSBudW1iZXIgb2YgcmV0dXJuZWQgcm93cycsCik7CgokU2VsZi0+SXMoCiAgICAkTGltaXRlZExpc3RbMF17SUR9LAogICAgJENyaXRpY2FsSUQsCiAgICAnQW5ub3VuY2VtZW50TGlzdCgpOiB3aXRoIExpbWl0ID0+IDEsIHRoZSBzaW5nbGUgaGlnaGVzdC1wcmlvcml0eSBhbm5vdW5jZW1lbnQgaXMgcmV0dXJuZWQnLAopOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDI6IEZpbHRlciA9PiBhY3RpdmUvc2NoZWR1bGVkL2V4cGlyZWQKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMgQ2xlYXIgdGhlIGxpc3QgY2FjaGUgc28gdGhlIGZpbHRlciBxdWVyaWVzIGJlbG93IGFyZSBub3QgYW5zd2VyZWQgZnJvbQojIHRoZSAoc3RpbGwgdmFsaWQpIGNhY2hlIHBvcHVsYXRlZCBieSBQYXJ0IDEncyBGaWx0ZXIgPT4gJ2FsbCcgY2FsbC4KJENhY2hlT2JqZWN0LT5DbGVhblVwKCBUeXBlID0+ICdBbm5vdW5jZW1lbnQnICk7CgpteSAkQWN0aXZlV2luZG93SUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJMaXN0IGZpbHRlciBhY3RpdmUtd2luZG93ICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVmFsaWRGcm9tICAgICAgICA9PiBfVGltZU9mZnNldFN0cmluZyggU2Vjb25kcyA9PiAtMzYwMCApLAogICAgVmFsaWRUbyAgICAgICAgICA9PiBfVGltZU9mZnNldFN0cmluZyggU2Vjb25kcyA9PiAzNjAwICksCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSAkQWN0aXZlUGVycGV0dWFsSUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJMaXN0IGZpbHRlciBhY3RpdmUtcGVycGV0dWFsICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJFNjaGVkdWxlZElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTGlzdCBmaWx0ZXIgc2NoZWR1bGVkICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVmFsaWRGcm9tICAgICAgICA9PiBfVGltZU9mZnNldFN0cmluZyggU2Vjb25kcyA9PiAzNjAwICksCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSAkRXhwaXJlZElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTGlzdCBmaWx0ZXIgZXhwaXJlZCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFZhbGlkVG8gICAgICAgICAgPT4gX1RpbWVPZmZzZXRTdHJpbmcoIFNlY29uZHMgPT4gLTM2MDAgKSwKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCm15IEBBY3RpdmVMaXN0ID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50TGlzdCggRmlsdGVyID0+ICdhY3RpdmUnICk7Cm15ICVBY3RpdmVJRHMgPSBtYXAgeyAkXy0+e0lEfSA9PiAxIH0gQEFjdGl2ZUxpc3Q7CgokU2VsZi0+VHJ1ZSgKICAgICggJEFjdGl2ZUlEc3skQWN0aXZlV2luZG93SUR9ICAgPyAxIDogMCApLAogICAgJ0Fubm91bmNlbWVudExpc3QoRmlsdGVyPT5hY3RpdmUpOiBpbmNsdWRlcyBhbiBhbm5vdW5jZW1lbnQgd2hvc2UgdmFsaWRpdHkgd2luZG93IGNvdmVycyBub3cnLAopOwokU2VsZi0+VHJ1ZSgKICAgICggJEFjdGl2ZUlEc3skQWN0aXZlUGVycGV0dWFsSUR9ID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRMaXN0KEZpbHRlcj0+YWN0aXZlKTogaW5jbHVkZXMgYW4gYW5ub3VuY2VtZW50IHdpdGggbm8gVmFsaWRGcm9tL1ZhbGlkVG8gKHBlcnBldHVhbCknLAopOwokU2VsZi0+RmFsc2UoCiAgICAoICRBY3RpdmVJRHN7JFNjaGVkdWxlZElEfSA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50TGlzdChGaWx0ZXI9PmFjdGl2ZSk6IGV4Y2x1ZGVzIGEgbm90LXlldC1zdGFydGVkIChzY2hlZHVsZWQpIGFubm91bmNlbWVudCcsCik7CiRTZWxmLT5GYWxzZSgKICAgICggJEFjdGl2ZUlEc3skRXhwaXJlZElEfSA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50TGlzdChGaWx0ZXI9PmFjdGl2ZSk6IGV4Y2x1ZGVzIGFuIGFscmVhZHktZXhwaXJlZCBhbm5vdW5jZW1lbnQnLAopOwoKbXkgQFNjaGVkdWxlZExpc3QgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRMaXN0KCBGaWx0ZXIgPT4gJ3NjaGVkdWxlZCcgKTsKbXkgJVNjaGVkdWxlZElEcyA9IG1hcCB7ICRfLT57SUR9ID0+IDEgfSBAU2NoZWR1bGVkTGlzdDsKCiRTZWxmLT5UcnVlKAogICAgKCAkU2NoZWR1bGVkSURzeyRTY2hlZHVsZWRJRH0gPyAxIDogMCApLAogICAgJ0Fubm91bmNlbWVudExpc3QoRmlsdGVyPT5zY2hlZHVsZWQpOiBpbmNsdWRlcyB0aGUgZnV0dXJlLWRhdGVkIGFubm91bmNlbWVudCcsCik7CiRTZWxmLT5GYWxzZSgKICAgICggJFNjaGVkdWxlZElEc3skQWN0aXZlV2luZG93SUR9ID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRMaXN0KEZpbHRlcj0+c2NoZWR1bGVkKTogZXhjbHVkZXMgYSBjdXJyZW50bHkgYWN0aXZlIGFubm91bmNlbWVudCcsCik7CiRTZWxmLT5GYWxzZSgKICAgICggJFNjaGVkdWxlZElEc3skRXhwaXJlZElEfSA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50TGlzdChGaWx0ZXI9PnNjaGVkdWxlZCk6IGV4Y2x1ZGVzIGFuIGV4cGlyZWQgYW5ub3VuY2VtZW50JywKKTsKCm15IEBFeHBpcmVkTGlzdCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudExpc3QoIEZpbHRlciA9PiAnZXhwaXJlZCcgKTsKbXkgJUV4cGlyZWRJRHMgPSBtYXAgeyAkXy0+e0lEfSA9PiAxIH0gQEV4cGlyZWRMaXN0OwoKJFNlbGYtPlRydWUoCiAgICAoICRFeHBpcmVkSURzeyRFeHBpcmVkSUR9ID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRMaXN0KEZpbHRlcj0+ZXhwaXJlZCk6IGluY2x1ZGVzIHRoZSBwYXN0LWRhdGVkIGFubm91bmNlbWVudCcsCik7CiRTZWxmLT5GYWxzZSgKICAgICggJEV4cGlyZWRJRHN7JEFjdGl2ZVdpbmRvd0lEfSA/IDEgOiAwICksCiAgICAnQW5ub3VuY2VtZW50TGlzdChGaWx0ZXI9PmV4cGlyZWQpOiBleGNsdWRlcyBhIGN1cnJlbnRseSBhY3RpdmUgYW5ub3VuY2VtZW50JywKKTsKJFNlbGYtPkZhbHNlKAogICAgKCAkRXhwaXJlZElEc3skU2NoZWR1bGVkSUR9ID8gMSA6IDAgKSwKICAgICdBbm5vdW5jZW1lbnRMaXN0KEZpbHRlcj0+ZXhwaXJlZCk6IGV4Y2x1ZGVzIGEgc2NoZWR1bGVkIChmdXR1cmUpIGFubm91bmNlbWVudCcsCik7CgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVVbnNldCgpOwoKMTsK</File>
        <File Permission="660" Location="scripts/test/Announcement/GetActiveAnnouncements.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXJPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkQW5ub3VuY2VtZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFubm91bmNlbWVudCcpOwpteSAkQ2FjaGVPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCnN1YiBfTm93IHsKICAgIHJldHVybiAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9TdHJpbmcoKTsKfQoKc3ViIF9UaW1lT2Zmc2V0U3RyaW5nIHsKICAgIG15ICglUGFyYW0pID0gQF87CgogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgaWYgKCAkUGFyYW17U2Vjb25kc30gPj0gMCApIHsKICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPkFkZCggU2Vjb25kcyA9PiAkUGFyYW17U2Vjb25kc30gKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICREYXRlVGltZU9iamVjdC0+U3VidHJhY3QoIFNlY29uZHMgPT4gYWJzKCAkUGFyYW17U2Vjb25kc30gKSApOwogICAgfQoKICAgIHJldHVybiAkRGF0ZVRpbWVPYmplY3QtPlRvU3RyaW5nKCk7Cn0KCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUGFydCAxOiBUYXJnZXRBdWRpZW5jZSBmaWx0ZXJpbmcKIwojIEFnZW50cyBzZWUgYW5ub3VuY2VtZW50cyB0YXJnZXRlZCBhdCBlaXRoZXIgJ2FnZW50JyBvciAnYWxsJy4KIyBDdXN0b21lcnMgb25seSBldmVyIHNlZSBhbm5vdW5jZW1lbnRzIHRhcmdldGVkIGF0ICdhbGwnLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lU2V0KCk7CgpteSAkQWdlbnRPbmx5SUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJBY3RpdmUgYWdlbnQtb25seSAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCm15ICRBbGxBdWRpZW5jZUlEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQWN0aXZlIGFsbC1hdWRpZW5jZSAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FsbCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSBAQWdlbnRWaWV3ID0gJEFubm91bmNlbWVudE9iamVjdC0+R2V0QWN0aXZlQW5ub3VuY2VtZW50cyggQXVkaWVuY2UgPT4gJ2FnZW50JyApOwpteSAlQWdlbnRWaWV3SURzID0gbWFwIHsgJF8tPntJRH0gPT4gMSB9IEBBZ2VudFZpZXc7CgokU2VsZi0+VHJ1ZSgKICAgICggJEFnZW50Vmlld0lEc3skQWdlbnRPbmx5SUR9ID8gMSA6IDAgKSwKICAgICdHZXRBY3RpdmVBbm5vdW5jZW1lbnRzKGFnZW50KTogc2VlcyBhbiBhbm5vdW5jZW1lbnQgdGFyZ2V0ZWQgYXQgImFnZW50IicsCik7CiRTZWxmLT5UcnVlKAogICAgKCAkQWdlbnRWaWV3SURzeyRBbGxBdWRpZW5jZUlEfSA/IDEgOiAwICksCiAgICAnR2V0QWN0aXZlQW5ub3VuY2VtZW50cyhhZ2VudCk6IGFsc28gc2VlcyBhbiBhbm5vdW5jZW1lbnQgdGFyZ2V0ZWQgYXQgImFsbCInLAopOwoKbXkgQEN1c3RvbWVyVmlldyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkdldEFjdGl2ZUFubm91bmNlbWVudHMoIEF1ZGllbmNlID0+ICdjdXN0b21lcicgKTsKbXkgJUN1c3RvbWVyVmlld0lEcyA9IG1hcCB7ICRfLT57SUR9ID0+IDEgfSBAQ3VzdG9tZXJWaWV3OwoKJFNlbGYtPkZhbHNlKAogICAgKCAkQ3VzdG9tZXJWaWV3SURzeyRBZ2VudE9ubHlJRH0gPyAxIDogMCApLAogICAgJ0dldEFjdGl2ZUFubm91bmNlbWVudHMoY3VzdG9tZXIpOiBkb2VzIE5PVCBzZWUgYW4gYW5ub3VuY2VtZW50IHRhcmdldGVkIGF0ICJhZ2VudCIgb25seScsCik7CiRTZWxmLT5UcnVlKAogICAgKCAkQ3VzdG9tZXJWaWV3SURzeyRBbGxBdWRpZW5jZUlEfSA/IDEgOiAwICksCiAgICAnR2V0QWN0aXZlQW5ub3VuY2VtZW50cyhjdXN0b21lcik6IHNlZXMgYW4gYW5ub3VuY2VtZW50IHRhcmdldGVkIGF0ICJhbGwiJywKKTsKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUGFydCAyOiB2YWxpZGl0eSB3aW5kb3cgZWRnZSBjYXNlcyAoYWxsIHJlbGF0aXZlIHRvIGEgZml4ZWQgIm5vdyIpCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgokQ2FjaGVPYmplY3QtPkNsZWFuVXAoIFR5cGUgPT4gJ0Fubm91bmNlbWVudCcgKTsKCm15ICRFeHBpcmVkQm91bmRhcnlJRCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEFkZCgKICAgIFRpdGxlICAgICAgICAgICAgPT4gIkFjdGl2ZSBleHBpcmluZy1hdC1ib3VuZGFyeSAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFZhbGlkVG8gICAgICAgICAgPT4gX05vdygpLCAgICAjIFZhbGlkVG8gPT0gY3VycmVudCBmaXhlZCAibm93IgogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJFBhc3RTdGFydElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQWN0aXZlIHN0YXJ0ZWQtaW4tcGFzdCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFZhbGlkRnJvbSAgICAgICAgPT4gX1RpbWVPZmZzZXRTdHJpbmcoIFNlY29uZHMgPT4gLTM2MDAgKSwKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCm15ICRGdXR1cmVTdGFydElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQWN0aXZlIGZ1dHVyZS1zdGFydCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFZhbGlkRnJvbSAgICAgICAgPT4gX1RpbWVPZmZzZXRTdHJpbmcoIFNlY29uZHMgPT4gMzYwMCApLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKIyBBdCB0aGUgZXhhY3QgYm91bmRhcnkgKFZhbGlkVG8gPT0gbm93KSwgdGhlIFNRTCBjb25kaXRpb24gaXMKIyAidmFsaWRfdG8gPj0gPyIgc28gaXQgaXMgc3RpbGwgaW5jbHVzaXZlIC0gbXVzdCBiZSBpbmNsdWRlZC4KbXkgQEJvdW5kYXJ5VmlldyA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkdldEFjdGl2ZUFubm91bmNlbWVudHMoIEF1ZGllbmNlID0+ICdhZ2VudCcgKTsKbXkgJUJvdW5kYXJ5SURzID0gbWFwIHsgJF8tPntJRH0gPT4gMSB9IEBCb3VuZGFyeVZpZXc7CgokU2VsZi0+VHJ1ZSgKICAgICggJEJvdW5kYXJ5SURzeyRFeHBpcmVkQm91bmRhcnlJRH0gPyAxIDogMCApLAogICAgJ0dldEFjdGl2ZUFubm91bmNlbWVudHMoKTogYW4gYW5ub3VuY2VtZW50IHdob3NlIFZhbGlkVG8gZXF1YWxzICJub3ciIGlzIHN0aWxsIGluY2x1ZGVkIChpbmNsdXNpdmUgYm91bmRhcnkpJywKKTsKJFNlbGYtPlRydWUoCiAgICAoICRCb3VuZGFyeUlEc3skUGFzdFN0YXJ0SUR9ID8gMSA6IDAgKSwKICAgICdHZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCk6IGFuIGFubm91bmNlbWVudCB3aG9zZSBWYWxpZEZyb20gaXMgaW4gdGhlIHBhc3QgaXMgaW5jbHVkZWQnLAopOwokU2VsZi0+RmFsc2UoCiAgICAoICRCb3VuZGFyeUlEc3skRnV0dXJlU3RhcnRJRH0gPyAxIDogMCApLAogICAgJ0dldEFjdGl2ZUFubm91bmNlbWVudHMoKTogYW4gYW5ub3VuY2VtZW50IHdob3NlIFZhbGlkRnJvbSBpcyBpbiB0aGUgZnV0dXJlIGlzIGV4Y2x1ZGVkJywKKTsKCiMgQWR2YW5jZSBvbmUgc2Vjb25kIHBhc3QgdGhlIGV4cGlyeSAtIG11c3Qgbm93IGJlIGV4Y2x1ZGVkLgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVBZGRTZWNvbmRzKDEpOwokQ2FjaGVPYmplY3QtPkNsZWFuVXAoIFR5cGUgPT4gJ0Fubm91bmNlbWVudCcgKTsKCm15IEBBZnRlckV4cGlyeVZpZXcgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCBBdWRpZW5jZSA9PiAnYWdlbnQnICk7Cm15ICVBZnRlckV4cGlyeUlEcyA9IG1hcCB7ICRfLT57SUR9ID0+IDEgfSBAQWZ0ZXJFeHBpcnlWaWV3OwoKJFNlbGYtPkZhbHNlKAogICAgKCAkQWZ0ZXJFeHBpcnlJRHN7JEV4cGlyZWRCb3VuZGFyeUlEfSA/IDEgOiAwICksCiAgICAnR2V0QWN0aXZlQW5ub3VuY2VtZW50cygpOiBvbmUgc2Vjb25kIGFmdGVyIFZhbGlkVG8sIHRoZSBhbm5vdW5jZW1lbnQgaXMgZXhjbHVkZWQnLAopOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDM6IFNob3dCZWZvcmVMb2dpbiBkb2VzIG5vdCBhZmZlY3QgR2V0QWN0aXZlQW5ub3VuY2VtZW50cygpCiMKIyBQZXIgdGhlIG1vZHVsZSdzIG93biBjb21tZW50LCBzaG93X2JlZm9yZV9sb2dpbiBvbmx5IGNvbnRyb2xzIHRoZQojIGxvZ2luLXBhZ2UgYmFubmVyOyBhZnRlciBsb2dpbiwgc3VjaCBhbm5vdW5jZW1lbnRzIGJlaGF2ZSBsaWtlIGFueQojIG90aGVyIGFjdGl2ZSBhbm5vdW5jZW1lbnQgaGVyZS4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15ICRMb2dpbkJhbm5lcklEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQWN0aXZlIGxvZ2luLWJhbm5lciAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FnZW50JywKICAgIFNob3dCZWZvcmVMb2dpbiAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCm15IEBXaXRoTG9naW5CYW5uZXIgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCBBdWRpZW5jZSA9PiAnYWdlbnQnICk7Cm15ICVXaXRoTG9naW5CYW5uZXJJRHMgPSBtYXAgeyAkXy0+e0lEfSA9PiAxIH0gQFdpdGhMb2dpbkJhbm5lcjsKCiRTZWxmLT5UcnVlKAogICAgKCAkV2l0aExvZ2luQmFubmVySURzeyRMb2dpbkJhbm5lcklEfSA/IDEgOiAwICksCiAgICAnR2V0QWN0aXZlQW5ub3VuY2VtZW50cygpOiBhbiBhbm5vdW5jZW1lbnQgd2l0aCBTaG93QmVmb3JlTG9naW4gPT4gMSBpcyBzdGlsbCBpbmNsdWRlZCBhZnRlciBsb2dpbicsCik7CgokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVVbnNldCgpOwoKMTsK</File>
        <File Permission="660" Location="scripts/test/Announcement/GetLoginAnnouncements.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXJPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkQW5ub3VuY2VtZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFubm91bmNlbWVudCcpOwpteSAkQ2FjaGVPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCnN1YiBfTm93IHsKICAgIHJldHVybiAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9TdHJpbmcoKTsKfQoKc3ViIF9UaW1lT2Zmc2V0U3RyaW5nIHsKICAgIG15ICglUGFyYW0pID0gQF87CgogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgaWYgKCAkUGFyYW17U2Vjb25kc30gPj0gMCApIHsKICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPkFkZCggU2Vjb25kcyA9PiAkUGFyYW17U2Vjb25kc30gKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICREYXRlVGltZU9iamVjdC0+U3VidHJhY3QoIFNlY29uZHMgPT4gYWJzKCAkUGFyYW17U2Vjb25kc30gKSApOwogICAgfQoKICAgIHJldHVybiAkRGF0ZVRpbWVPYmplY3QtPlRvU3RyaW5nKCk7Cn0KCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZVNldCgpOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDE6IFNob3dCZWZvcmVMb2dpbiBnYXRlCiMKIyBPbmx5IGFubm91bmNlbWVudHMgd2l0aCBzaG93X2JlZm9yZV9sb2dpbiA9IDEgbWF5IGFwcGVhciBoZXJlLCBldmVuCiMgaWYgdGhleSBhcmUgb3RoZXJ3aXNlIGZ1bGx5IGFjdGl2ZS4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15ICRMb2dpbkFnZW50SUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJMb2dpbiBhZ2VudC1mbGFnZ2VkICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgU2hvd0JlZm9yZUxvZ2luICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJExvZ2luQWxsSUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJMb2dpbiBhbGwtZmxhZ2dlZCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FsbCcsCiAgICBTaG93QmVmb3JlTG9naW4gID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSAkTm9Mb2dpbkZsYWdJRCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEFkZCgKICAgIFRpdGxlICAgICAgICAgICAgPT4gIkxvZ2luIG5vdC1mbGFnZ2VkICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWxsJywKICAgIFNob3dCZWZvcmVMb2dpbiAgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCm15IEBBZ2VudEludGVyZmFjZVZpZXcgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRMb2dpbkFubm91bmNlbWVudHMoIEludGVyZmFjZSA9PiAnYWdlbnQnICk7Cm15ICVBZ2VudEludGVyZmFjZUlEcyA9IG1hcCB7ICRfLT57SUR9ID0+IDEgfSBAQWdlbnRJbnRlcmZhY2VWaWV3OwoKJFNlbGYtPlRydWUoCiAgICAoICRBZ2VudEludGVyZmFjZUlEc3skTG9naW5BZ2VudElEfSA/IDEgOiAwICksCiAgICAnR2V0TG9naW5Bbm5vdW5jZW1lbnRzKGFnZW50KTogaW5jbHVkZXMgYW4gImFnZW50IiBhbm5vdW5jZW1lbnQgd2l0aCBTaG93QmVmb3JlTG9naW4gPT4gMScsCik7CiRTZWxmLT5UcnVlKAogICAgKCAkQWdlbnRJbnRlcmZhY2VJRHN7JExvZ2luQWxsSUR9ID8gMSA6IDAgKSwKICAgICdHZXRMb2dpbkFubm91bmNlbWVudHMoYWdlbnQpOiBpbmNsdWRlcyBhbiAiYWxsIiBhbm5vdW5jZW1lbnQgd2l0aCBTaG93QmVmb3JlTG9naW4gPT4gMScsCik7CiRTZWxmLT5GYWxzZSgKICAgICggJEFnZW50SW50ZXJmYWNlSURzeyROb0xvZ2luRmxhZ0lEfSA/IDEgOiAwICksCiAgICAnR2V0TG9naW5Bbm5vdW5jZW1lbnRzKGFnZW50KTogZXhjbHVkZXMgYW4gb3RoZXJ3aXNlLWFjdGl2ZSBhbm5vdW5jZW1lbnQgd2l0aG91dCBTaG93QmVmb3JlTG9naW4nLAopOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDI6IEludGVyZmFjZSAoYXVkaWVuY2UpIGZpbHRlcmluZwojCiMgQ3VzdG9tZXJzIG9ubHkgZXZlciBzZWUgYW5ub3VuY2VtZW50cyB0YXJnZXRlZCBhdCAnYWxsJywgbWF0Y2hpbmcKIyBHZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCkncyBiZWhhdmlvci4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15IEBDdXN0b21lckludGVyZmFjZVZpZXcgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5HZXRMb2dpbkFubm91bmNlbWVudHMoIEludGVyZmFjZSA9PiAnY3VzdG9tZXInICk7Cm15ICVDdXN0b21lckludGVyZmFjZUlEcyA9IG1hcCB7ICRfLT57SUR9ID0+IDEgfSBAQ3VzdG9tZXJJbnRlcmZhY2VWaWV3OwoKJFNlbGYtPkZhbHNlKAogICAgKCAkQ3VzdG9tZXJJbnRlcmZhY2VJRHN7JExvZ2luQWdlbnRJRH0gPyAxIDogMCApLAogICAgJ0dldExvZ2luQW5ub3VuY2VtZW50cyhjdXN0b21lcik6IGV4Y2x1ZGVzIGFuICJhZ2VudCItb25seSBhbm5vdW5jZW1lbnQnLAopOwokU2VsZi0+VHJ1ZSgKICAgICggJEN1c3RvbWVySW50ZXJmYWNlSURzeyRMb2dpbkFsbElEfSA/IDEgOiAwICksCiAgICAnR2V0TG9naW5Bbm5vdW5jZW1lbnRzKGN1c3RvbWVyKTogaW5jbHVkZXMgYW4gImFsbCItdGFyZ2V0ZWQgYW5ub3VuY2VtZW50JywKKTsKJFNlbGYtPkZhbHNlKAogICAgKCAkQ3VzdG9tZXJJbnRlcmZhY2VJRHN7JE5vTG9naW5GbGFnSUR9ID8gMSA6IDAgKSwKICAgICdHZXRMb2dpbkFubm91bmNlbWVudHMoY3VzdG9tZXIpOiBleGNsdWRlcyBhbiBhbm5vdW5jZW1lbnQgd2l0aG91dCBTaG93QmVmb3JlTG9naW4gcmVnYXJkbGVzcyBvZiBhdWRpZW5jZScsCik7CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgMzogdmFsaWRpdHkgd2luZG93IGVkZ2UgY2FzZXMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiRDYWNoZU9iamVjdC0+Q2xlYW5VcCggVHlwZSA9PiAnQW5ub3VuY2VtZW50JyApOwoKbXkgJEV4cGlyZWRCb3VuZGFyeUlEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTG9naW4gZXhwaXJpbmctYXQtYm91bmRhcnkgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0JvZHknLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBTaG93QmVmb3JlTG9naW4gID0+IDEsCiAgICBWYWxpZFRvICAgICAgICAgID0+IF9Ob3coKSwgICAgIyBWYWxpZFRvID09IGN1cnJlbnQgZml4ZWQgIm5vdyIKICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKKTsKCm15ICRGdXR1cmVTdGFydElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiTG9naW4gZnV0dXJlLXN0YXJ0ICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgU2hvd0JlZm9yZUxvZ2luICA9PiAxLAogICAgVmFsaWRGcm9tICAgICAgICA9PiBfVGltZU9mZnNldFN0cmluZyggU2Vjb25kcyA9PiAzNjAwICksCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSBAQm91bmRhcnlWaWV3ID0gJEFubm91bmNlbWVudE9iamVjdC0+R2V0TG9naW5Bbm5vdW5jZW1lbnRzKCBJbnRlcmZhY2UgPT4gJ2FnZW50JyApOwpteSAlQm91bmRhcnlJRHMgPSBtYXAgeyAkXy0+e0lEfSA9PiAxIH0gQEJvdW5kYXJ5VmlldzsKCiRTZWxmLT5UcnVlKAogICAgKCAkQm91bmRhcnlJRHN7JEV4cGlyZWRCb3VuZGFyeUlEfSA/IDEgOiAwICksCiAgICAnR2V0TG9naW5Bbm5vdW5jZW1lbnRzKCk6IGFuIGFubm91bmNlbWVudCB3aG9zZSBWYWxpZFRvIGVxdWFscyAibm93IiBpcyBzdGlsbCBpbmNsdWRlZCAoaW5jbHVzaXZlIGJvdW5kYXJ5KScsCik7CiRTZWxmLT5GYWxzZSgKICAgICggJEJvdW5kYXJ5SURzeyRGdXR1cmVTdGFydElEfSA/IDEgOiAwICksCiAgICAnR2V0TG9naW5Bbm5vdW5jZW1lbnRzKCk6IGEgZnV0dXJlLWRhdGVkIChub3QgeWV0IHN0YXJ0ZWQpIGFubm91bmNlbWVudCBpcyBleGNsdWRlZCcsCik7CgojIEFkdmFuY2Ugb25lIHNlY29uZCBwYXN0IHRoZSBleHBpcnkgLSBtdXN0IG5vdyBiZSBleGNsdWRlZC4KJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcygxKTsKJENhY2hlT2JqZWN0LT5DbGVhblVwKCBUeXBlID0+ICdBbm5vdW5jZW1lbnQnICk7CgpteSBAQWZ0ZXJFeHBpcnlWaWV3ID0gJEFubm91bmNlbWVudE9iamVjdC0+R2V0TG9naW5Bbm5vdW5jZW1lbnRzKCBJbnRlcmZhY2UgPT4gJ2FnZW50JyApOwpteSAlQWZ0ZXJFeHBpcnlJRHMgPSBtYXAgeyAkXy0+e0lEfSA9PiAxIH0gQEFmdGVyRXhwaXJ5VmlldzsKCiRTZWxmLT5GYWxzZSgKICAgICggJEFmdGVyRXhwaXJ5SURzeyRFeHBpcmVkQm91bmRhcnlJRH0gPyAxIDogMCApLAogICAgJ0dldExvZ2luQW5ub3VuY2VtZW50cygpOiBvbmUgc2Vjb25kIGFmdGVyIFZhbGlkVG8sIHRoZSBhbm5vdW5jZW1lbnQgaXMgZXhjbHVkZWQnLAopOwoKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lVW5zZXQoKTsKCjE7Cg==</File>
        <File Permission="660" Location="scripts/test/Announcement/AnnouncementAJAX.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgQ0dJOwp1c2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVg7CnVzZSBLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyQW5ub3VuY2VtZW50QUpBWDsKCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlck9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRBbm5vdW5jZW1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QW5ub3VuY2VtZW50Jyk7Cm15ICRKU09OT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CgojIERlZmVuc2l2ZSBjbGVhbnVwOiB0aGUgZW52aXJvbm1lbnQncyBhbm5vdW5jZW1lbnQgdGFibGUgbWF5IGFscmVhZHkKIyBjb250YWluIG9sZGVyIGFubm91bmNlbWVudHMgKGUuZy4gbWFudWFsbHkgY3JlYXRlZCB2aWEgdGhlIGFkbWluIFVJKS4KIyBHZXRBY3RpdmVBbm5vdW5jZW1lbnRzKCkgLSBhbmQgdGhlcmVmb3JlIHRoZSBIaWdoZXN0UHJpb3JpdHkgZXNjYWxhdGlvbgojIGNoZWNrcyBpbiBQYXJ0IDQgYmVsb3cgLSBsb29rcyBhdCBBTEwgY3VycmVudGx5IGFjdGl2ZSBhbm5vdW5jZW1lbnRzLAojIG5vdCBqdXN0IHRoZSBvbmVzIHRoaXMgdGVzdCBjcmVhdGVzLCBzbyBzdGFydCBmcm9tIGEgY2xlYW4gdGFibGUuIFRoaXMKIyBpcyBzYWZlOiB0aGUgd2hvbGUgdGVzdCBydW5zIGluc2lkZSB0aGUgUmVzdG9yZURhdGFiYXNlIHRyYW5zYWN0aW9uCiMgKHNlZSBIZWxwZXIgb2JqZWN0IGFib3ZlKSwgd2hpY2ggaXMgcm9sbGVkIGJhY2sgb25jZSB0aGlzIGZpbGUKIyBmaW5pc2hlcywgcmVzdG9yaW5nIHdoYXRldmVyIHdhcyB0aGVyZSBiZWZvcmUuCm15IEBQcmVFeGlzdGluZ0Fubm91bmNlbWVudHMgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRMaXN0KAogICAgRmlsdGVyID0+ICdhbGwnLAogICAgTGltaXQgID0+IDEwMF8wMDAsCik7CmZvciBteSAkUHJlRXhpc3RpbmcgKEBQcmVFeGlzdGluZ0Fubm91bmNlbWVudHMpIHsKICAgICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJFByZUV4aXN0aW5nLT57SUR9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKfQoKIyBDYWxscyB0aGUgUnVuKCkgbWV0aG9kIG9mIGFuIEFKQVggZnJvbnRlbmQgbW9kdWxlIGRpcmVjdGx5ICh0aGVzZQojIG1vZHVsZXMgaGF2ZSAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMSwgc28gdGhleSBhcmUgbmV2ZXIgZmV0Y2hlZCB2aWEKIyAkS2VybmVsOjpPTS0+R2V0KCksIG9ubHkgaW5zdGFudGlhdGVkIGJ5IGhhbmQgbGlrZSB0aGUgcmVhbCBmcm9udGVuZAojIGRpc3BhdGNoZXIgd291bGQgZG8pLCBzaW11bGF0aW5nIHRoZSBpbmNvbWluZyB3ZWIgcmVxdWVzdCdzIHF1ZXJ5CiMgc3RyaW5nLCBhbmQgZGVjb2RlcyB0aGUgSlNPTiBib2R5IG9mIHRoZSByZXN1bHRpbmcgQXR0YWNobWVudCgpLgpzdWIgX0NhbGxBSkFYIHsKICAgIG15ICglUGFyYW0pID0gQF87CgogICAgJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyA9PiB7CiAgICAgICAgICAgIFdlYlJlcXVlc3QgPT4gQ0dJLT5uZXcoICRQYXJhbXtRdWVyeVN0cmluZ30gfHwgJycgKSwKICAgICAgICB9LAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCggT2JqZWN0cyA9PiBbJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnXSApOwoKICAgIG15ICVOZXdQYXJhbTsKICAgICROZXdQYXJhbXtVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gaWYgZGVmaW5lZCAkUGFyYW17VXNlcklEfTsKCiAgICBteSAkTW9kdWxlID0gJFBhcmFte01vZHVsZUNsYXNzfS0+bmV3KCVOZXdQYXJhbSk7CiAgICBteSAkT3V0cHV0ID0gJE1vZHVsZS0+UnVuKCk7CgogICAgbXkgKCAkSGVhZGVyLCAkQm9keSApID0gc3BsaXQgL1xuXG4vLCAkT3V0cHV0LCAyOwoKICAgIG15ICREYXRhID0gJEpTT05PYmplY3QtPkRlY29kZSggRGF0YSA9PiAkQm9keSApOwoKICAgIHJldHVybiAkRGF0YTsKfQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDE6IGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIChib3RoIG1vZHVsZXMpCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpteSAkQWdlbnRVbmF1dGggPSBfQ2FsbEFKQVgoCiAgICBNb2R1bGVDbGFzcyA9PiAnS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgUXVlcnlTdHJpbmcgPT4gJ1N1YmFjdGlvbj1HZXRBbm5vdW5jZW1lbnRzJywKKTsKCiRTZWxmLT5JcygKICAgICRBZ2VudFVuYXV0aC0+e1N1Y2Nlc3N9LAogICAgMCwKICAgICdBZ2VudEFubm91bmNlbWVudEFKQVgtPlJ1bigpOiBTdWNjZXNzIGlzIDAgd2l0aG91dCBhIFVzZXJJRCcsCik7CiRTZWxmLT5JcygKICAgICRBZ2VudFVuYXV0aC0+e0Vycm9yfSwKICAgICdOb3RBdXRoZW50aWNhdGVkJywKICAgICdBZ2VudEFubm91bmNlbWVudEFKQVgtPlJ1bigpOiBFcnJvciBpcyBOb3RBdXRoZW50aWNhdGVkIHdpdGhvdXQgYSBVc2VySUQnLAopOwoKbXkgJEN1c3RvbWVyVW5hdXRoID0gX0NhbGxBSkFYKAogICAgTW9kdWxlQ2xhc3MgPT4gJ0tlcm5lbDo6TW9kdWxlczo6Q3VzdG9tZXJBbm5vdW5jZW1lbnRBSkFYJywKICAgIFF1ZXJ5U3RyaW5nID0+ICdTdWJhY3Rpb249R2V0QW5ub3VuY2VtZW50cycsCik7CgokU2VsZi0+SXMoCiAgICAkQ3VzdG9tZXJVbmF1dGgtPntTdWNjZXNzfSwKICAgIDAsCiAgICAnQ3VzdG9tZXJBbm5vdW5jZW1lbnRBSkFYLT5SdW4oKTogU3VjY2VzcyBpcyAwIHdpdGhvdXQgYSBVc2VySUQnLAopOwokU2VsZi0+SXMoCiAgICAkQ3VzdG9tZXJVbmF1dGgtPntFcnJvcn0sCiAgICAnTm90QXV0aGVudGljYXRlZCcsCiAgICAnQ3VzdG9tZXJBbm5vdW5jZW1lbnRBSkFYLT5SdW4oKTogRXJyb3IgaXMgTm90QXV0aGVudGljYXRlZCB3aXRob3V0IGEgVXNlcklEJywKKTsKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUGFydCAyOiB1bmtub3duIFN1YmFjdGlvbgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKbXkgJFVua25vd25TdWJhY3Rpb24gPSBfQ2FsbEFKQVgoCiAgICBNb2R1bGVDbGFzcyA9PiAnS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIFF1ZXJ5U3RyaW5nID0+ICdTdWJhY3Rpb249U29tZXRoaW5nVGhhdERvZXNOb3RFeGlzdCcsCik7CgokU2VsZi0+SXMoCiAgICAkVW5rbm93blN1YmFjdGlvbi0+e1N1Y2Nlc3N9LAogICAgMCwKICAgICdBZ2VudEFubm91bmNlbWVudEFKQVgtPlJ1bigpOiBTdWNjZXNzIGlzIDAgZm9yIGFuIHVua25vd24gU3ViYWN0aW9uJywKKTsKJFNlbGYtPklzKAogICAgJFVua25vd25TdWJhY3Rpb24tPntFcnJvcn0sCiAgICAnVW5rbm93blN1YmFjdGlvbicsCiAgICAnQWdlbnRBbm5vdW5jZW1lbnRBSkFYLT5SdW4oKTogRXJyb3IgaXMgVW5rbm93blN1YmFjdGlvbiBmb3IgYW4gdW5rbm93biBTdWJhY3Rpb24nLAopOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDM6IEdldEFubm91bmNlbWVudCAoc2luZ2xlKSAtIEFnZW50IG9ubHkKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15ICROb0lEID0gX0NhbGxBSkFYKAogICAgTW9kdWxlQ2xhc3MgPT4gJ0tlcm5lbDo6TW9kdWxlczo6QWdlbnRBbm5vdW5jZW1lbnRBSkFYJywKICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICBRdWVyeVN0cmluZyA9PiAnU3ViYWN0aW9uPUdldEFubm91bmNlbWVudCcsCik7CgokU2VsZi0+SXMoCiAgICAkTm9JRC0+e0Vycm9yfSwKICAgICdJbnZhbGlkSUQnLAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudCk6IG1pc3NpbmcgSUQgcmV0dXJucyBJbnZhbGlkSUQnLAopOwoKbXkgJE5vbk51bWVyaWNJRCA9IF9DYWxsQUpBWCgKICAgIE1vZHVsZUNsYXNzID0+ICdLZXJuZWw6Ok1vZHVsZXM6OkFnZW50QW5ub3VuY2VtZW50QUpBWCcsCiAgICBVc2VySUQgICAgICA9PiAxLAogICAgUXVlcnlTdHJpbmcgPT4gJ1N1YmFjdGlvbj1HZXRBbm5vdW5jZW1lbnQmSUQ9YWJjJywKKTsKCiRTZWxmLT5JcygKICAgICROb25OdW1lcmljSUQtPntFcnJvcn0sCiAgICAnSW52YWxpZElEJywKICAgICdBZ2VudEFubm91bmNlbWVudEFKQVgtPlJ1bihHZXRBbm5vdW5jZW1lbnQpOiBhIG5vbi1udW1lcmljIElEIHJldHVybnMgSW52YWxpZElEJywKKTsKCm15ICROb3RGb3VuZElEID0gX0NhbGxBSkFYKAogICAgTW9kdWxlQ2xhc3MgPT4gJ0tlcm5lbDo6TW9kdWxlczo6QWdlbnRBbm5vdW5jZW1lbnRBSkFYJywKICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICBRdWVyeVN0cmluZyA9PiAnU3ViYWN0aW9uPUdldEFubm91bmNlbWVudCZJRD05OTk5OTk5OTknLAopOwoKJFNlbGYtPklzKAogICAgJE5vdEZvdW5kSUQtPntFcnJvcn0sCiAgICAnTm90Rm91bmQnLAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudCk6IGEgbm9uLWV4aXN0ZW50IG51bWVyaWMgSUQgcmV0dXJucyBOb3RGb3VuZCcsCik7CgpteSAkU2luZ2xlVGVzdElEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQUpBWCBzaW5nbGUtZ2V0ICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJEZvdW5kSUQgPSBfQ2FsbEFKQVgoCiAgICBNb2R1bGVDbGFzcyA9PiAnS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIFF1ZXJ5U3RyaW5nID0+ICJTdWJhY3Rpb249R2V0QW5ub3VuY2VtZW50JklEPSRTaW5nbGVUZXN0SUQiLAopOwoKJFNlbGYtPklzKAogICAgJEZvdW5kSUQtPntTdWNjZXNzfSwKICAgIDEsCiAgICAnQWdlbnRBbm5vdW5jZW1lbnRBSkFYLT5SdW4oR2V0QW5ub3VuY2VtZW50KTogU3VjY2VzcyBpcyAxIGZvciBhbiBleGlzdGluZyBJRCcsCik7CiRTZWxmLT5JcygKICAgICRGb3VuZElELT57QW5ub3VuY2VtZW50fXtJRH0sCiAgICAkU2luZ2xlVGVzdElELAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudCk6IHJldHVybnMgdGhlIHJlcXVlc3RlZCBhbm5vdW5jZW1lbnQnLAopOwokU2VsZi0+SXMoCiAgICAkRm91bmRJRC0+e0Fubm91bmNlbWVudH17VGl0bGV9LAogICAgIkFKQVggc2luZ2xlLWdldCAkUmFuZG9tSUQiLAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudCk6IHRoZSByZXR1cm5lZCBUaXRsZSBtYXRjaGVzJywKKTsKCiRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudERlbGV0ZSgKICAgIElEICAgICA9PiAkU2luZ2xlVGVzdElELAogICAgVXNlcklEID0+IDEsCik7CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBhcnQgNDogR2V0QW5ub3VuY2VtZW50cyAtIEhpZ2hlc3RQcmlvcml0eSBlc2NhbGF0aW9uCiMKIyBIaWdoZXN0UHJpb3JpdHkgbXVzdCByZWZsZWN0IHRoZSBoaWdoZXN0LXNldmVyaXR5IGFubm91bmNlbWVudAojIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSBhdWRpZW5jZTogY3JpdGljYWwgPiB3YXJuaW5nID4gaW5mby4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15ICRJbmZvSUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJBSkFYIHByaW9yaXR5IGluZm8gJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0JvZHknLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnaW5mbycsCiAgICBUYXJnZXRBdWRpZW5jZSAgID0+ICdhZ2VudCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSAkSW5mb09ubHlSZXN1bHQgPSBfQ2FsbEFKQVgoCiAgICBNb2R1bGVDbGFzcyA9PiAnS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIFF1ZXJ5U3RyaW5nID0+ICdTdWJhY3Rpb249R2V0QW5ub3VuY2VtZW50cycsCik7CgokU2VsZi0+SXMoCiAgICAkSW5mb09ubHlSZXN1bHQtPntIaWdoZXN0UHJpb3JpdHl9LAogICAgJ2luZm8nLAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudHMpOiBIaWdoZXN0UHJpb3JpdHkgaXMgImluZm8iIHdoZW4gb25seSBpbmZvIGFubm91bmNlbWVudHMgYXJlIGFjdGl2ZScsCik7CgpteSAkV2FybmluZ0lEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQUpBWCBwcmlvcml0eSB3YXJuaW5nICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ3dhcm5pbmcnLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJFdhcm5pbmdSZXN1bHQgPSBfQ2FsbEFKQVgoCiAgICBNb2R1bGVDbGFzcyA9PiAnS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIFF1ZXJ5U3RyaW5nID0+ICdTdWJhY3Rpb249R2V0QW5ub3VuY2VtZW50cycsCik7CgokU2VsZi0+SXMoCiAgICAkV2FybmluZ1Jlc3VsdC0+e0hpZ2hlc3RQcmlvcml0eX0sCiAgICAnd2FybmluZycsCiAgICAnQWdlbnRBbm5vdW5jZW1lbnRBSkFYLT5SdW4oR2V0QW5ub3VuY2VtZW50cyk6IEhpZ2hlc3RQcmlvcml0eSBlc2NhbGF0ZXMgdG8gIndhcm5pbmciIG9uY2Ugb25lIGlzIGFjdGl2ZScsCik7CgpteSAkQ3JpdGljYWxJRCA9ICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudEFkZCgKICAgIFRpdGxlICAgICAgICAgICAgPT4gIkFKQVggcHJpb3JpdHkgY3JpdGljYWwgJFJhbmRvbUlEIiwKICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0JvZHknLAogICAgQW5ub3VuY2VtZW50VHlwZSA9PiAnY3JpdGljYWwnLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJENyaXRpY2FsUmVzdWx0ID0gX0NhbGxBSkFYKAogICAgTW9kdWxlQ2xhc3MgPT4gJ0tlcm5lbDo6TW9kdWxlczo6QWdlbnRBbm5vdW5jZW1lbnRBSkFYJywKICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICBRdWVyeVN0cmluZyA9PiAnU3ViYWN0aW9uPUdldEFubm91bmNlbWVudHMnLAopOwoKJFNlbGYtPklzKAogICAgJENyaXRpY2FsUmVzdWx0LT57SGlnaGVzdFByaW9yaXR5fSwKICAgICdjcml0aWNhbCcsCiAgICAnQWdlbnRBbm5vdW5jZW1lbnRBSkFYLT5SdW4oR2V0QW5ub3VuY2VtZW50cyk6IEhpZ2hlc3RQcmlvcml0eSBlc2NhbGF0ZXMgdG8gImNyaXRpY2FsIiBvbmNlIG9uZSBpcyBhY3RpdmUnLAopOwoKJFNlbGYtPklzKAogICAgJENyaXRpY2FsUmVzdWx0LT57U3VjY2Vzc30sCiAgICAxLAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudHMpOiBTdWNjZXNzIGlzIDEnLAopOwoKJFNlbGYtPlRydWUoCiAgICAoICRDcml0aWNhbFJlc3VsdC0+e0NvdW50fSA+PSAzID8gMSA6IDAgKSwKICAgICdBZ2VudEFubm91bmNlbWVudEFKQVgtPlJ1bihHZXRBbm5vdW5jZW1lbnRzKTogQ291bnQgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHJldHVybmVkIEFubm91bmNlbWVudHMgKGF0IGxlYXN0IHRoZSAzIGFkZGVkIGhlcmUpJywKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBAeyAkQ3JpdGljYWxSZXN1bHQtPntBbm5vdW5jZW1lbnRzfSB9LAogICAgJENyaXRpY2FsUmVzdWx0LT57Q291bnR9LAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudHMpOiBDb3VudCBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBBbm5vdW5jZW1lbnRzIGFycmF5JywKKTsKCmZvciBteSAkSUQgKCAkSW5mb0lELCAkV2FybmluZ0lELCAkQ3JpdGljYWxJRCApIHsKICAgICRBbm5vdW5jZW1lbnRPYmplY3QtPkFubm91bmNlbWVudERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKfQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQYXJ0IDU6IEdldEFubm91bmNlbWVudHMgLSBhdWRpZW5jZSBmaWx0ZXJpbmcgKEFnZW50IHZzIEN1c3RvbWVyKQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKbXkgJEFnZW50T25seUlEID0gJEFubm91bmNlbWVudE9iamVjdC0+QW5ub3VuY2VtZW50QWRkKAogICAgVGl0bGUgICAgICAgICAgICA9PiAiQUpBWCBhdWRpZW5jZSBhZ2VudC1vbmx5ICRSYW5kb21JRCIsCiAgICBCb2R5ICAgICAgICAgICAgID0+ICdCb2R5JywKICAgIEFubm91bmNlbWVudFR5cGUgPT4gJ2luZm8nLAogICAgVGFyZ2V0QXVkaWVuY2UgICA9PiAnYWdlbnQnLAogICAgVXNlcklEICAgICAgICAgICA9PiAxLAopOwoKbXkgJEFsbEF1ZGllbmNlSUQgPSAkQW5ub3VuY2VtZW50T2JqZWN0LT5Bbm5vdW5jZW1lbnRBZGQoCiAgICBUaXRsZSAgICAgICAgICAgID0+ICJBSkFYIGF1ZGllbmNlIGFsbCAkUmFuZG9tSUQiLAogICAgQm9keSAgICAgICAgICAgICA9PiAnQm9keScsCiAgICBBbm5vdW5jZW1lbnRUeXBlID0+ICdpbmZvJywKICAgIFRhcmdldEF1ZGllbmNlICAgPT4gJ2FsbCcsCiAgICBVc2VySUQgICAgICAgICAgID0+IDEsCik7CgpteSAkQWdlbnRSZXN1bHQgPSBfQ2FsbEFKQVgoCiAgICBNb2R1bGVDbGFzcyA9PiAnS2VybmVsOjpNb2R1bGVzOjpBZ2VudEFubm91bmNlbWVudEFKQVgnLAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIFF1ZXJ5U3RyaW5nID0+ICdTdWJhY3Rpb249R2V0QW5ub3VuY2VtZW50cycsCik7CgpteSAlQWdlbnRSZXN1bHRJRHMgPSBtYXAgeyAkXy0+e0lEfSA9PiAxIH0gQHsgJEFnZW50UmVzdWx0LT57QW5ub3VuY2VtZW50c30gfTsKCiRTZWxmLT5UcnVlKAogICAgKCAkQWdlbnRSZXN1bHRJRHN7JEFnZW50T25seUlEfSA/IDEgOiAwICksCiAgICAnQWdlbnRBbm5vdW5jZW1lbnRBSkFYLT5SdW4oR2V0QW5ub3VuY2VtZW50cyk6IGluY2x1ZGVzIGFuICJhZ2VudCItdGFyZ2V0ZWQgYW5ub3VuY2VtZW50JywKKTsKJFNlbGYtPlRydWUoCiAgICAoICRBZ2VudFJlc3VsdElEc3skQWxsQXVkaWVuY2VJRH0gPyAxIDogMCApLAogICAgJ0FnZW50QW5ub3VuY2VtZW50QUpBWC0+UnVuKEdldEFubm91bmNlbWVudHMpOiBpbmNsdWRlcyBhbiAiYWxsIi10YXJnZXRlZCBhbm5vdW5jZW1lbnQnLAopOwoKbXkgJEN1c3RvbWVyUmVzdWx0ID0gX0NhbGxBSkFYKAogICAgTW9kdWxlQ2xhc3MgPT4gJ0tlcm5lbDo6TW9kdWxlczo6Q3VzdG9tZXJBbm5vdW5jZW1lbnRBSkFYJywKICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICBRdWVyeVN0cmluZyA9PiAnU3ViYWN0aW9uPUdldEFubm91bmNlbWVudHMnLAopOwoKbXkgJUN1c3RvbWVyUmVzdWx0SURzID0gbWFwIHsgJF8tPntJRH0gPT4gMSB9IEB7ICRDdXN0b21lclJlc3VsdC0+e0Fubm91bmNlbWVudHN9IH07CgokU2VsZi0+RmFsc2UoCiAgICAoICRDdXN0b21lclJlc3VsdElEc3skQWdlbnRPbmx5SUR9ID8gMSA6IDAgKSwKICAgICdDdXN0b21lckFubm91bmNlbWVudEFKQVgtPlJ1bihHZXRBbm5vdW5jZW1lbnRzKTogZXhjbHVkZXMgYW4gImFnZW50Ii1vbmx5IGFubm91bmNlbWVudCcsCik7CiRTZWxmLT5UcnVlKAogICAgKCAkQ3VzdG9tZXJSZXN1bHRJRHN7JEFsbEF1ZGllbmNlSUR9ID8gMSA6IDAgKSwKICAgICdDdXN0b21lckFubm91bmNlbWVudEFKQVgtPlJ1bihHZXRBbm5vdW5jZW1lbnRzKTogaW5jbHVkZXMgYW4gImFsbCItdGFyZ2V0ZWQgYW5ub3VuY2VtZW50JywKKTsKCjE7Cg==</File>
    </Filelist>

    <!--
        NOTE: Database table is NOT automatically dropped on uninstall!
        This preserves announcements for reinstallation.
        To manually delete: DROP TABLE announcement;
    -->

    <!-- Create database table and group on install -->
    <CodeInstall Type="post"><![CDATA[
        my $DBObject    = $Kernel::OM->Get('Kernel::System::DB');
        my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');

        # Check if announcement table already exists using INFORMATION_SCHEMA
        my $TableExists = 0;
        $DBObject->Prepare(
            SQL => "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
                    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'announcement'",
        );
        while ( my @Row = $DBObject->FetchrowArray() ) {
            $TableExists = $Row[0] ? 1 : 0;
        }

        # Create table only if it does not exist
        if ( !$TableExists ) {
            # MySQL/MariaDB syntax (Znuny default)
            $DBObject->Do(
                SQL => "CREATE TABLE announcement (
                    id INT NOT NULL AUTO_INCREMENT,
                    title VARCHAR(255) NOT NULL,
                    body LONGBLOB NOT NULL,
                    announcement_type VARCHAR(20) NOT NULL,
                    target_audience VARCHAR(20) NOT NULL,
                    show_before_login SMALLINT NOT NULL DEFAULT 0,
                    valid_from DATETIME NULL,
                    valid_to DATETIME NULL,
                    create_time DATETIME NOT NULL,
                    create_by INT NOT NULL,
                    change_time DATETIME NOT NULL,
                    change_by INT NOT NULL,
                    PRIMARY KEY (id),
                    INDEX idx_announcement_valid (valid_from, valid_to),
                    INDEX idx_announcement_type (announcement_type),
                    INDEX idx_announcement_audience (target_audience),
                    INDEX idx_announcement_login (show_before_login)
                )",
            );
        }

        # Create or reactivate AnnouncementManager group
        my $GroupID = $GroupObject->GroupLookup(
            Group => 'AnnouncementManager',
        );

        if ( $GroupID ) {
            # Group exists - reactivate it (set to valid)
            $GroupObject->GroupUpdate(
                ID      => $GroupID,
                Name    => 'AnnouncementManager',
                Comment => 'Group for managing announcements (RW=create/edit, RO=view only)',
                ValidID => 1,  # 1 = valid
                UserID  => 1,
            );
        }
        else {
            # Group does not exist - create it
            $GroupObject->GroupAdd(
                Name    => 'AnnouncementManager',
                Comment => 'Group for managing announcements (RW=create/edit, RO=view only)',
                ValidID => 1,
                UserID  => 1,
            );
        }
    ]]></CodeInstall>

    <!-- Upgrade: Convert DATE columns to DATETIME for time support -->
    <CodeUpgrade Type="post"><![CDATA[
        my $DBObject = $Kernel::OM->Get('Kernel::System::DB');

        # Check if valid_from is still DATE type and convert to DATETIME
        # This is safe to run multiple times - MySQL ignores if already DATETIME
        $DBObject->Do(
            SQL => "ALTER TABLE announcement
                    MODIFY valid_from DATETIME NULL,
                    MODIFY valid_to DATETIME NULL,
                    MODIFY create_time DATETIME NOT NULL,
                    MODIFY change_time DATETIME NOT NULL",
        );
    ]]></CodeUpgrade>

    <!-- Cleanup on uninstall: invalidate group and reset modified SysConfig -->
    <CodeUninstall Type="pre"><![CDATA[
        my $GroupObject     = $Kernel::OM->Get('Kernel::System::Group');
        my $SysConfigObject = $Kernel::OM->Get('Kernel::System::SysConfig');

        # Invalidate AnnouncementManager group
        my $GroupID = $GroupObject->GroupLookup(
            Group => 'AnnouncementManager',
        );
        if ( $GroupID ) {
            $GroupObject->GroupUpdate(
                ID      => $GroupID,
                Name    => 'AnnouncementManager',
                ValidID => 2,  # 2 = invalid
                UserID  => 1,
            );
        }

        # Reset all modified Announcement SysConfig settings to default
        # This removes entries from sysconfig_modified table
        my @SettingsToReset = (
            'Announcement::Enabled',
            'Announcement::ShowInAgentInterface',
            'Announcement::ShowInCustomerInterface',
            'Announcement::ShowOnLoginPage',
            'Announcement::Cache::TTL',
            'Frontend::Module###AgentAnnouncement',
            'Frontend::Module###AgentAnnouncementAJAX',
            'CustomerFrontend::Module###CustomerAnnouncementAJAX',
            'Frontend::Output::FilterContent###AnnouncementAgent',
            'Frontend::Output::FilterContent###AnnouncementCustomer',
            'Frontend::Output::FilterContent###AnnouncementLogin',
            'Loader::Agent::CommonJS###200-Announcement',
            'Loader::Agent::CommonCSS###200-Announcement',
            'Loader::Customer::CommonJS###200-Announcement',
            'Loader::Customer::CommonCSS###200-Announcement',
            'Loader::Module::AgentAnnouncement###002-Announcement',
            'Frontend::Navigation###AgentAnnouncement###001-Announcement',
        );

        for my $SettingName ( @SettingsToReset ) {
            $SysConfigObject->SettingReset(
                Name   => $SettingName,
                UserID => 1,
            );
        }
    ]]></CodeUninstall>

    <IntroInstall Type="pre" Title="Installation Information" Lang="en"><![CDATA[
        <h2>Thank you for installing the Announcement Add-on!</h2>
        <p>This add-on allows you to create and display announcements for maintenance windows and incidents.</p>
        <h3>Getting Started</h3>
        <p>After installation, go to <strong>Announcements</strong> in the main menu to create your first announcement.</p>
        <h3>Permissions</h3>
        <p>Users need to be members of the <code>AnnouncementManager</code> group:</p>
        <ul>
            <li><strong>RW</strong> - Full access (create, edit, delete)</li>
            <li><strong>RO</strong> - View only</li>
        </ul>
        <h3>Reinstallation</h3>
        <p>If you previously had this add-on installed, your existing announcements will be preserved.</p>
    ]]></IntroInstall>
    <IntroInstall Type="pre" Title="Installationsinformationen" Lang="de"><![CDATA[
        <h2>Vielen Dank fuer die Installation des Announcement Add-ons!</h2>
        <p>Dieses Add-on ermoeglicht das Erstellen und Anzeigen von Ankuendigungen fuer Wartungsfenster und Stoerungen.</p>
        <h3>Erste Schritte</h3>
        <p>Nach der Installation gehen Sie zu <strong>Ankuendigungen</strong> im Hauptmenue, um Ihre erste Ankuendigung zu erstellen.</p>
        <h3>Berechtigungen</h3>
        <p>Benutzer muessen Mitglied der Gruppe <code>AnnouncementManager</code> sein:</p>
        <ul>
            <li><strong>RW</strong> - Vollzugriff (Erstellen, Bearbeiten, Loeschen)</li>
            <li><strong>RO</strong> - Nur Ansehen</li>
        </ul>
        <h3>Reinstallation</h3>
        <p>Falls dieses Add-on zuvor installiert war, bleiben Ihre bestehenden Ankuendigungen erhalten.</p>
    ]]></IntroInstall>
    <IntroUninstall Type="pre" Title="Uninstall Information" Lang="en"><![CDATA[
        <h2>Uninstall Announcement Add-on</h2>
        <p>You are about to uninstall the Announcement Add-on.</p>
        <p style="color: #060; font-weight: bold;">Your announcements will be preserved!</p>
        <p>If you reinstall this add-on later, all your announcements will still be available.</p>
        <h3>Complete Removal</h3>
        <p>To permanently delete all announcements, run this SQL command after uninstalling:</p>
        <pre style="background: #f5f5f5; padding: 8px; border-radius: 4px;">DROP TABLE announcement;</pre>
    ]]></IntroUninstall>
    <IntroUninstall Type="pre" Title="Deinstallationsinformationen" Lang="de"><![CDATA[
        <h2>Announcement Add-on deinstallieren</h2>
        <p>Sie sind dabei, das Announcement Add-on zu deinstallieren.</p>
        <p style="color: #060; font-weight: bold;">Ihre Ankuendigungen bleiben erhalten!</p>
        <p>Wenn Sie dieses Add-on spaeter erneut installieren, sind alle Ankuendigungen weiterhin verfuegbar.</p>
        <h3>Vollstaendige Entfernung</h3>
        <p>Um alle Ankuendigungen dauerhaft zu loeschen, fuehren Sie nach der Deinstallation diesen SQL-Befehl aus:</p>
        <pre style="background: #f5f5f5; padding: 8px; border-radius: 4px;">DROP TABLE announcement;</pre>
    ]]></IntroUninstall>

</otrs_package>
