<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>OpenStreetMap</Name>
    <Version>11.0.2</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://rother-oss.com/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-05-13 15:30:31" Version="11.0.2">Add Hungarian translation.</ChangeLog>
    <ChangeLog Date="2024-12-12 07:12:05" Version="11.0.1">Initial Release on OTOBO 11.
Added a map for CIs connected to specific tickets.</ChangeLog>
    <Description Lang="en">Adds an interface to OpenStreetMap.</Description>
    <Description Lang="hu">Kapcsolódási felületet ad az OpenStreetMap-térképhez.</Description>
    <Framework>11.0.x</Framework>
    <IntroInstall Lang="en" Title="Installation Information" Type="pre">
        &lt;br/&gt;
        &lt;br/&gt;
        This plugin relies on the tile servers of OpenStreetMap (https://www.openstreetmap.org/about). If you plan on using it, please consider donating to them (https://wiki.osmfoundation.org/wiki/Donate), to help them keeping their servers running. (When doing this, you could tell them who sent you. ;)
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;
    </IntroInstall>
    <IntroInstall Lang="hu" Title="Telepítési információk" Type="pre">
        &lt;br/&gt;
        &lt;br/&gt;
        Ez a bővítmény az OpenStreetMap csempekiszolgálóira támaszkodik (https://www.openstreetmap.org/about). Ha azt tervezi, hogy használni fogja, akkor fontolja meg, hogy adományozzon nekik (https://wiki.osmfoundation.org/wiki/Donate), hogy segítsen a kiszolgálóik működésének fenntartásában. Ha ezt teszi, akkor elmondhatja nekik, hogy ki küldte Önt. ;)
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;
    </IntroInstall>
    <BuildCommitID>1c3a752bf52b291a44dbdf8cd0f003a0004e5bcc</BuildCommitID>
    <BuildDate>2026-05-13 15:30:34</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Kernel/Config/Files/XML/OpenStreetMap.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpTaG93Rm9yQ2xhc3NlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gb3Igd2hpY2ggY2xhc3NlcyB0aGUgbWFwIGlzIGRpc3BsYXllZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSVRTTUNvbmZpZ0l0ZW06OlN1YnNpZGlhcnkiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6SW5jaWRlbnRTdGF0ZUNvbG9ycyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db2xvciByZXByZXNlbnRhdGlvbiBvZiBpbmNpZGVudCBzdGF0ZXMgb24gdGhlIG1hcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3BlcmF0aW9uYWwiPiMyMmU1YTA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ildhcm5pbmciPiNlMGQwNDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkluY2lkZW50Ij4jZmYzMDAwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudE9wZW5TdHJlZXRNYXAjIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpDdXN0b21lck9wZW5TdHJlZXRNYXAjIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudERhc2hib2FyZCMjIzQzNy1PU00iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkN1c3RvbWVyRGFzaGJvYXJkIyMjNDM3LU9TTSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNQ29uZmlnSXRlbVpvb20jIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudE9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPk9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+Q01EQjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50SVRTTUNvbmZpZ0l0ZW0jIyMwMDQtT3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1jb25maWdpdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPk9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjQ3VzdG9tZXJPcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPk1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQ3VzdG9tZXJPcGVuU3RyZWV0TWFwIyMjMDAyLU9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlNob3cgdGhlIE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5NYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUN1c3RvbWVyT3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5NYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TWVudTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY2Vzc0tleSI+bzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj43MjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic3ZnSWNvbiI+dmFyL2h0dHBkL2h0ZG9jcy9za2lucy9DdXN0b21lci9kZWZhdWx0L2ltZy9tYXAuc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRGFzaGJvYXJkQmFja2VuZCMjIzAwMDItT3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgT3BlblN0cmVldE1hcCBkYXNoYm9hcmQgYmFja2VuZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcCB3aXRoIENvbmZpZ0l0ZW1zIGFuZCBDdXN0b21lcnMuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYWNoZVRUTExvY2FsIj4xNDQwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+Q29udGVudExhcmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYW5kYXRvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok91dHB1dDo6RmlsdGVyRWxlbWVudFBvc3QjIyNPdXRwdXRGaWx0ZXJQb3N0T3BlblN0cmVldE1hcENJV2lkZ2V0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk91dHB1dCBmaWx0ZXIgdG8gYWRkIGFuIE9wZW5TdHJlZXRNYXAgd2lkZ2V0IHRvIHRoZSBBZ2VudElUU01Db25maWdJdGVtWm9vbSBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QmFzZTo6T3V0cHV0RmlsdGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckVsZW1lbnRQb3N0OjpPcGVuU3RyZWV0TWFwQ0lXaWRnZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRlbXBsYXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPlN1YnNpZGlhcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPi9vdG9iby13ZWIvc2tpbnMvQWdlbnQvZGVmYXVsdC9pbWcvTG9jYXRpb24uc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPkJhc2ljQ0lJbmZvMDE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj5Mb2NhdGlvbi1MYXRpdHVkZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+TG9jYXRpb24tTG9uZ2l0dWRlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5MaW5lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj5LZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6TGluZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb25DbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbkNsYXNzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj40PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPiNmZjAwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDAzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwNSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDA2IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwOCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDA5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAxMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDEyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAxNCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDE1IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTYiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAxNyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDE4IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAyMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZyMjIzAwMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlNlbGY8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFyZ2luIj4wLjI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnIyMjMDAyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBob3cgdGhlIG1hcCBpcyBwcmVzZW50ZWQgZm9yIGEgZ2l2ZW4gYWN0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnREYXNoYm9hcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U3Vic2lkaWFyeTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjAuNDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U3Vic2lkaWFyeTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjEuMjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5DdXN0b21lckRhc2hib2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5TdWJzaWRpYXJ5PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmdpbiI+MC40PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZyMjIzAwNSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkN1c3RvbWVyT3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5TdWJzaWRpYXJ5PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmdpbiI+MS40PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6Okljb25PdmVycmlkZSMjI0Jhc2ljQ0lJbmZvMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gYmFzZWQgb24gY29uZmlnIGl0ZW0gaW5mb3JtYXRpb24uIERlZmluZSAiU3RhdGVzIiBhbmQgYXNzaWduICJJY29uUGF0aHMiIHRvIHRoZW0uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6Okljb25zOjpCYXNpY0NJSW5mbzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGFuZ2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIj5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZSI+UHJvZHVjdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGhzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYW5nZXIiPi9vdG9iby13ZWIvc2tpbnMvQWdlbnQvZGVmYXVsdC9pbWcvTG9jYXRpb25SZWQuc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckRhc2hib2FyZDo6VGlsZXMjIyNPcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpbGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQ3VzdG9tZXJEYXNoYm9hcmQuIE1vZHVsZSBpcyByZXF1aXJlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlldzo6RGFzaGJvYXJkOjpUaWxlczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPcmRlciI+NzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGVtcGxhdGUiPkRhc2hib2FyZC9UaWxlT1NNQ2FudmFzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWciPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSBUaWNrZXQgU3BlY2lmaWMgY29uZmlncyAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDYiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudFRpY2tldE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U3Vic2lkaWFyeTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjEuNDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUXVldWVzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGlja2V0VHlwZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpY2tldE9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPlRpY2tldE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+Q01EQjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRUaWNrZXRPcGVuU3RyZWV0TWFwIyMjNDM3LU9TTSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudFRpY2tldE9wZW5TdHJlZXRNYXAjIyMwMDUtVGlja2V0T3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyB0aWNrZXRzIG9uIGEgbWFwLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50VGlja2V0T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="Kernel/Language/hu_OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X09wZW5TdHJlZXRNYXA7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBPcGVuU3RyZWV0TWFwV2lkZ2V0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuU3RyZWV0TWFwJ30gPSAnT3BlblN0cmVldE1hcCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9yIHJlcHJlc2VudGF0aW9uIG9mIGluY2lkZW50IHN0YXRlcyBvbiB0aGUgbWFwLid9ID0gJ0EgdMOpcmvDqXBlbiBsw6l2xZEgaW5jaWRlbnPDoWxsYXBvdG9rIHN6w61uw6FicsOhem9sw6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGjDoXR0w6lycHJvZ3JhbS1pbmZvcm3DoWNpw7NrYXQgYXogZWd5ZXMgb3N6dMOhbHlva27DoWwuIEEg4oCeTG9jYXRpb25JbmZv4oCdIHRhcnRhbG1hemhhdGphIGEgaGVseWluZm9ybcOhY2nDs2thdCwgYW1lbHlla2V0IHZhZ3kgYSDigJ5Tb3VyY2VLZXlz4oCdIGZvcnLDoXNrdWxjc2JhbiBrZWxsIG1lZ2Fkbmkgc3rDqWxlc3PDqWcgKOKAnkxhdGl0dWRl4oCdKSDDqXMgaG9zc3rDunPDoWcgKOKAnkxvbmdpdHVkZeKAnSkgZm9ybcOhYmFuLCB2YWd5IGEg4oCeTGlua2VkQ2xhc3Nlc+KAnSBrdWxjc2JhbiBsw6l2xZEga2FwY3NvbHQgb3N6dMOhbHlva2thbCwgYW1lbHllayB0YXJ0YWxtYXp6w6FrIGEga29vcmRpbsOhdMOha2F0LiBBIOKAnkxpbmVDb2xvcuKAnSBhZGphIG1lZyBhIHZvbmFsIHN6w61uw6l0LCBhbWVseSB2YWd5IOKAniNyZ2LigJ0gKHDDqWxkw6F1bCDigJ4jZmYwMDAw4oCdKSB2YWd5IMO8emVtYmUgw6FsbMOtdMOhc2kgw6FsbGFwb3QgKOKAnkRlcGxveW1lbnRTdGF0ZeKAnSkgdmFneSBpbmNpZGVuc8OhbGxhcG90ICjigJ5JbmNpZGVudFN0YXRl4oCdKSBsZWhldCwgaG9neSBlZ3llenplbiBhIG1lZ2Fkb3R0IHN6w61ubmVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi4nfSA9ICdBenQgw6FsbMOtdGphIGJlLCBob2d5IGEgdMOpcmvDqXAgaG9neWFuIGplbGVuamVuIG1lZyBlZ3kgYWRvdHQgbcWxdmVsZXRuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3Igd2hpY2ggY2xhc3NlcyB0aGUgbWFwIGlzIGRpc3BsYXllZC4nfSA9ICdNZWx5aWsgb3N6dMOhbHlva27DoWwgamVsZW5qZW4gbWVnIGEgdMOpcmvDqXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcCd9ID0gJ1TDqXJrw6lwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW5TdHJlZXRNYXAgd2l0aCBDb25maWdJdGVtcyBhbmQgQ3VzdG9tZXJzLid9ID0gJ09wZW5TdHJlZXRNYXAga29uZmlndXLDoWNpw7NlbGVtZWtrZWwgw6lzIMO8Z3lmZWxla2tlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0cHV0IGZpbHRlciB0byBhZGQgYW4gT3BlblN0cmVldE1hcCB3aWRnZXQgdG8gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tIHNjcmVlbi4nfSA9CiAgICAgICAgJ0tpbWVuZXRzesWxcsWRIGFoaG96LCBob2d5IE9wZW5TdHJlZXRNYXAgZmVsw7xsZXRpIGVsZW1ldCBhZGpvbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGtvbmZpZ3Vyw6FjacOzZWxlbS1uYWd5w610w6FzIGvDqXBlcm55xZFqw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJyaWRlcyB0aGUgZGVmYXVsdCBpY29uIGJhc2VkIG9uIGNvbmZpZyBpdGVtIGluZm9ybWF0aW9uLiBEZWZpbmUgIlN0YXRlcyIgYW5kIGFzc2lnbiAiSWNvblBhdGhzIiB0byB0aGVtLid9ID0KICAgICAgICAnRmVsw7xsYsOtcsOhbGphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgaWtvbnQgYSBrb25maWd1csOhY2nDs2VsZW0taW5mb3Jtw6FjacOzayBhbGFwasOhbi4gQSDigJ5TdGF0ZXPigJ0gaGF0w6Fyb3p6YSBtZWcgYXogw6FsbGFwb3Rva2F0LCDDqXMgYXog4oCeSWNvblBhdGhz4oCdIHJlbmRlbGkgaG96esOhanVrIGF6IGlrb27DunR2b25hbGFrYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBPcGVuU3RyZWV0TWFwIGRhc2hib2FyZCBiYWNrZW5kLid9ID0gJ1BhcmFtw6l0ZXJlayBheiBPcGVuU3RyZWV0TWFwIHZlesOpcmzFkXB1bHQgaMOhdHTDqXJwcm9ncmFtasOhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBPcGVuU3RyZWV0TWFwJ30gPSAnQXogT3BlblN0cmVldE1hcCBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aWNrZXRzIG9uIGEgbWFwLid9ID0gJ0plZ3llayBtZWdqZWxlbsOtdMOpc2UgZWd5IHTDqXJrw6lwZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXAnfSA9ICdKZWd5dMOpcmvDqXAnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AgentOpenStreetMap.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI1IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50T3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciBteSAkQXR0cmlidXRlICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCkgKSB7CiAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEF0dHJpYnV0ZSApOwogICAgfQoKICAgICMgQUpBWCBmdW5jdGlvbiBjYWxsCiAgICBpZiAoICRHZXRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IGljb24gYW5kIGxvY2F0aW9uIGluZm8KICAgICAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbW9kdWxlIHBhZ2UKICAgIGVsc2UgewoKICAgICAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuLCB1c2VkIGZvciBiYWNrbGlua3MKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ09wZW5TdHJlZXRNYXAnKSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudE9wZW5TdHJlZXRNYXAnLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwoKICAgIH0KCn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketOpenStreetMap.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI1IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0T3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzaG93IG1vZHVsZSBwYWdlCiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ09wZW5TdHJlZXRNYXAnKSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50T3BlblN0cmVldE1hcCcsCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
        <File Location="Kernel/Modules/CustomerOpenStreetMap.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI1IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyT3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciBteSAkQXR0cmlidXRlICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCkgKSB7CiAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEF0dHJpYnV0ZSApOwogICAgfQoKICAgICMgQUpBWCBmdW5jdGlvbiBjYWxsCiAgICBpZiAoICRHZXRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IGljb24gYW5kIGxvY2F0aW9uIGluZm8KICAgICAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbW9kdWxlIHBhZ2UKICAgIGVsc2UgewoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lck9wZW5TdHJlZXRNYXAnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFNlbGYtPntNb2R1bGVSZWd9e1RpdGxlfSB8fCAnTWFwJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKCiAgICB9Cgp9CgoxOwo=</File>
        <File Location="Kernel/Output/HTML/Dashboard/OpenStreetMap.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok9wZW5TdHJlZXRNYXA7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjICAgICRTZWxmLT57UHJlZktleVNob3dufSAgICA9ICdVc2VyRGFzaGJvYXJkUHJlZicgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bic7CiAgICAjICAgICRTZWxmLT57UHJlZktleVNob3duTWF4fSA9ICdVc2VyRGFzaGJvYXJkUHJlZicgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bk1heCc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUHJlZmVyZW5jZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgICMKICAgICMgICAgIyBkaXNhYmxlIHBhcmFtcwogICAgcmV0dXJuOwp9CgpzdWIgQ29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgIyAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAlQ29uZmlnID0gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAoKICAgICAgICAjICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30gLiAnQWN0aW9uPUFnZW50Q3VzdG9tZXJNYXAnLAogICAgICAgICMgICAgICAgIExpbmtUaXRsZSAgICAgICAgICAgICAgICAgPT4gJ0RldGFpbCcsCiAgICAgICAgIyAgICAgICAgUHJlZmVyZW5jZXNSZWxvYWRSZXF1aXJlZCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJUNvbmZpZzsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQ29udGVudExhcmdlT3BlblN0cmVldE1hcCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFdpZHRoICA9PiAnMTAwJScsCiAgICAgICAgICAgIEhlaWdodCA9PiAnNDAwcHgnLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnREYXNoYm9hcmRPcGVuU3RyZWV0TWFwJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkQ29udGVudDsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/FilterElementPost/OpenStreetMapCIWidget.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAyMCBSb3RoZXIgT1NTIEdtYkgsIGh0dHA6Ly9yb3RoZXItb3NzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckVsZW1lbnRQb3N0OjpPcGVuU3RyZWV0TWFwQ0lXaWRnZXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICAjIGdldCB0aGUgYWN0aXZlIGNsYXNzZXMKICAgIG15ICRTaG93TWFwQ2xhc3NlcyA9ICRDb25maWdPYmplY3QtPkdldCgnT3BlblN0cmVldE1hcDo6U2hvd0ZvckNsYXNzZXMnKTsKICAgIHJldHVybiAxIGlmICEkU2hvd01hcENsYXNzZXM7CgogICAgIyBnZXQgdGhlIHZlcnNpb24gb2YgdGhlIHNob3duIENJCiAgICAkU2VsZi0+e1JlcXVlc3RlZFVSTH0gPX4gL0NvbmZpZ0l0ZW1JRD0oXGQrKS87CiAgICByZXR1cm4gMSBpZiAhJDE7CgogICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICBDb25maWdJdGVtSUQgID0+ICQxLAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICk7CgogICAgIyBpbnNlcnQgbWFwIGlmIENJIGJlbG9uZ3MgdG8gYWN0aXZlIGNsYXNzCiAgICBpZiAoICRTaG93TWFwQ2xhc3Nlcy0+eyAnSVRTTUNvbmZpZ0l0ZW06OicgLiAkVmVyc2lvbi0+e0NsYXNzfSB9ICkgewogICAgICAgIG15ICRPU01DYW52YXMgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdPcGVuU3RyZWV0TWFwV2lkZ2V0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHt9LAogICAgICAgICk7CgogICAgICAgICMgaW5zZXJ0IGF0IHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBzaWRlYmFyIGNvbHVtbgogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHMvXihccys8XC9kaXY+XHMqXG5ccys8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4pLyRPU01DYW52YXNcbiQxL207CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentDashboardOpenStreetMap.tt" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50TGFyZ2VPcGVuU3RyZWV0TWFwIikgJV0KPGRpdiBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSJ3aWR0aDogWyUgRGF0YS5XaWR0aCAlXTsgaGVpZ2h0OiBbJSBEYXRhLkhlaWdodCAlXTsiPgogICAgPHA+CiAgICAgICAgICBbJSBUcmFuc2xhdGUoIkxvYWRpbmcuLi4iKSB8IGh0bWwgJV0KICAgIDwvcD4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZW50TGFyZ2VPcGVuU3RyZWV0TWFwIikgJV0K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentOpenStreetMap.tt" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgY2xhc3M9Ik9wZW5TdHJlZXRNYXBXaW5kb3ciIGlkPSJPU00iPgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGZpZ3VyZSBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSdoZWlnaHQ6NzV2aDttYXJnaW46MHB4Oyc+CiAgICAgICAgPC9maWd1cmU+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/CustomerOpenStreetMap.tt" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgaWQ9J29vb0NvbnRlbnQnIGNsYXNzPSdPU00nPgogICAgPGRpdiBpZD0nb29vSGVhZGVyJz4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKERhdGEuVGl0bGUpIHwgaHRtbCAlXTwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9J29vb01haW5Cb3gnPgogICAgICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIj4KICAgICAgICA8L2ZpZ3VyZT4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/Dashboard/TileOSMCanvas.tt" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgaWQ9Im9vb1RpbGVbJSBEYXRhLlRpbGVJRCB8IGh0bWwgJV0iIGNsYXNzPSJvb29UaWxlIG9vb1RpbGVfT1NNQ2FudmFzIj4KICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIj4KICAgIDwvZmlndXJlPgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/OpenStreetMapWidget.tt" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAyMCBSb3RoZXIgT1NTIEdtYkgsIGh0dHA6Ly9yb3RoZXItb3NzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiT3BlblN0cmVldE1hcCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIiBzdHlsZT0naGVpZ2h0OjMwMHB4O21hcmdpbjowcHg7Jz4KICAgICAgICAgICAgICAgICAgICA8L2ZpZ3VyZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4K</File>
        <File Location="Kernel/System/OpenStreetMap/Icons/BasicCIInfo.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpJY29uczo6QmFzaWNDSUluZm87Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6Okljb25zOjpCYXNpY0NJSW5mbwoKPWhlYWQxIERFU0NSSVBUSU9OCgpEZWZpbmVzIHdoaWNoIGljb25zIHRvIHVzZSwgYmFzZWQgb24gc3RhdGVzLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4KCiAgICBteSAkSWNvbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpJY29uczo6QmFzaWNDSUluZm8tPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSBcJVBhcmFtOwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldEljb24oKQoKUmV0dXJucyB0aGUgaWNvbiBwYXRoIGluZm8uCgogICAgbXkgJEljb25QYXRoID0gJEljb25PYmplY3QtPkdldEljb24oCiAgICAgICAgVmVyc2lvbiA9PiAkVmVyc2lvbiwKICAgICk7Cgo9Y3V0CgpzdWIgR2V0SWNvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvVmVyc2lvbi8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIFNUQVRFOgogICAgZm9yIG15ICROYW1lICgga2V5cyAleyAkU2VsZi0+e1N0YXRlc30gfSApIHsKICAgICAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICV7ICRTZWxmLT57U3RhdGVzfXskTmFtZX0gfSApIHsKICAgICAgICAgICAgaWYgKCAhJFBhcmFte1ZlcnNpb259eyRBdHRyfSB8fCAkUGFyYW17VmVyc2lvbn17JEF0dHJ9IG5lICRTZWxmLT57U3RhdGVzfXskTmFtZX17JEF0dHJ9ICkgewogICAgICAgICAgICAgICAgbmV4dCBTVEFURTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB3ZSBmdWxsZmlsbCBhbGwgcmVxdWlyZW1lbnRzIGhlcmUKICAgICAgICByZXR1cm4gJFNlbGYtPntJY29uUGF0aHN9eyROYW1lfSBpZiAkU2VsZi0+e0ljb25QYXRoc317JE5hbWV9OwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/System/OpenStreetMap/Line.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMaW5lOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxpbmUgLSBCYWNrZW5kIGZvciBJVFNNQ29uZmlnSXRlbSBjbGFzc2VzIGxpbmtlZCB0byB0d28gbG9jYXRpb25zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6TGluZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHYXRoZXJJbmZvKCkKCkdhdGhlcnMgbG9jYXRpb24gYW5kIGljb24gaW5mby4KCiAgICBteSAlSW5mbyA9ICRCYWNrZW5kT2JqZWN0LT5HYXRoZXJJbmZvKAogICAgICAgIENsYXNzICAgICAgICA9PiAnTGluZV9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgcHVzaCBAQ0lzLCAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgY2xhc3MgYmFja2VuZHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJUxpbmtCYWNrZW5kRGVmCiAgICAgICAgPSBtYXAgeyAkXy0+e0NsYXNzfSA9PiAkXyB9IHZhbHVlcyAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnJykgLy8ge30gfTsKCiAgICAjIGNvbG9yIGRlZmluaXRpb25zCiAgICBteSAkSW5jaWRlbnRTdGF0ZUNvbG9yczsKICAgIGlmICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmVDb2xvcn0gZXEgIkluY2lkZW50U3RhdGUiICkgewogICAgICAgICRJbmNpZGVudFN0YXRlQ29sb3JzID0gJENvbmZpZ09iamVjdC0+R2V0KCdPcGVuU3RyZWV0TWFwOjpJbmNpZGVudFN0YXRlQ29sb3JzJyk7CiAgICB9CgogICAgI3VzZSBEYXRhOjpEdW1wZXI7CiAgICAjcHJpbnQgU1RERVJSICJ2bzYwIC0gQ0lzOiAiLkR1bXBlcihcQENJcyk7CiAgICBteSAoICRGcm9tLCAkVG8sICVJY29ucywgJUxpbmVzICk7CiAgICBDSToKICAgIGZvciBteSAkQ29uZmlnSXRlbSAoQENJcykgewoKICAgICAgICBteSAkTGlua0xpc3QgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBARW5kczsKCiAgICAgICAgTElOS1M6CiAgICAgICAgZm9yIG15ICRMVHlwZXMgKCB2YWx1ZXMgJXskTGlua0xpc3R9ICkgewogICAgICAgICAgICBmb3IgbXkgJExEaXJzICggdmFsdWVzICV7JExUeXBlc30gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJENJTnVtcyAoIHZhbHVlcyAleyRMRGlyc30gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rZWRJdGVtICggdmFsdWVzICV7JENJTnVtc30gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkRW5kc1swXSAmJiAkTGlua2VkSXRlbS0+e0NsYXNzfSBlcSAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFbmRzWzBdID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kc1sxXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IExJTktTOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkRW5kc1sxXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJExpbmtlZEl0ZW0tPntDbGFzc30gZXEgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVuZHNbMV0gPSAkTGlua2VkSXRlbS0+e0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRzWzBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIEBFbmRzICE9IDIgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIHR3byBlbmRzISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15IEBJbmZvOwogICAgICAgIGZvciBteSAkaSAoIDAsIDEgKSB7CiAgICAgICAgICAgIG15ICRCYWNrZW5kT2JqZWN0CiAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoICRMaW5rQmFja2VuZERlZnsgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bJGldIH17QmFja2VuZH0gKTsKCiAgICAgICAgICAgICV7ICRJbmZvWyRpXSB9ID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEVuZHNbJGldLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WyRpXSwKICAgICAgICAgICAgICAgIEJhY2tlbmREZWYgICA9PiAkTGlua0JhY2tlbmREZWZ7ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WyRpXSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJEluZm9bJGlde0Zyb219IHx8ICEkSW5mb1skaV17VG99ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGNvb3JkaW5hdGVzIGZvdW5kIGZvciBsaW5rZWQgQ29uZmlnSXRlbTogJEVuZHNbJGldISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dCBDSTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRpICggMCwgMSApIHsKCiAgICAgICAgICAgICMgZGVmaW5lIGNvb3JkaW5hdGVzCiAgICAgICAgICAgIGlmICggISRGcm9tICkgewogICAgICAgICAgICAgICAgJEZyb20gPSBbICRJbmZvWyRpXXtGcm9tfVswXSwgJEluZm9bJGlde0Zyb219WzFdIF07CiAgICAgICAgICAgICAgICAkVG8gICA9IFsgJEluZm9bJGlde1RvfVswXSwgICAkSW5mb1skaV17VG99WzFdIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICRGcm9tLT5bMF0gPiAkSW5mb1skaV17RnJvbX1bMF0gKSB7ICRGcm9tLT5bMF0gPSAkSW5mb1skaV17RnJvbX1bMF0gfQogICAgICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzFdID4gJEluZm9bJGlde0Zyb219WzFdICkgeyAkRnJvbS0+WzFdID0gJEluZm9bJGlde0Zyb219WzFdIH0KICAgICAgICAgICAgICAgIGlmICggJFRvLT5bMF0gPCAkSW5mb1skaV17VG99WzBdICkgICAgIHsgJFRvLT5bMF0gICA9ICRJbmZvWyRpXXtUb31bMF0gfQogICAgICAgICAgICAgICAgaWYgKCAkVG8tPlsxXSA8ICRJbmZvWyRpXXtUb31bMV0gKSAgICAgeyAkVG8tPlsxXSAgID0gJEluZm9bJGlde1RvfVsxXSB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGljb25zIGlmIG9ubHkgdGhpcyBDb25maWdJdGVtIGlzIHNob3duCiAgICAgICAgICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gJiYgJEluZm9bJGlde0ljb25zfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0ciAocXcvUGF0aCBMYXRpdHVkZSBMb25naXR1ZGUgTGluay8pIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRJY29uc3skQXR0cn0gfSwgQHsgJEluZm9bJGlde0ljb25zfXskQXR0cn0gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbGluZSAoTGlua1NlbGYgb25seSBmb3IgYWdlbnRzKQogICAgICAgIHB1c2ggQHsgJExpbmVze0Zyb20wfSB9LCAkSW5mb1swXXtGcm9tfVswXTsKICAgICAgICBwdXNoIEB7ICRMaW5lc3tGcm9tMX0gfSwgJEluZm9bMF17RnJvbX1bMV07CiAgICAgICAgcHVzaCBAeyAkTGluZXN7VG8wfSB9LCAgICRJbmZvWzFde0Zyb219WzBdOwogICAgICAgIHB1c2ggQHsgJExpbmVze1RvMX0gfSwgICAkSW5mb1sxXXtGcm9tfVsxXTsKICAgICAgICBwdXNoIEB7ICRMaW5lc3tDb2xvcn0gfSwKICAgICAgICAgICAgJEluY2lkZW50U3RhdGVDb2xvcnMKICAgICAgICAgICAgPyAkSW5jaWRlbnRTdGF0ZUNvbG9ycy0+eyAkQ29uZmlnSXRlbS0+e0N1ckluY2lTdGF0ZX0gfSB8fCAiIzU1MjI0NCIKICAgICAgICAgICAgOiAkUGFyYW17QmFja2VuZERlZn17TGluZUNvbG9yfSB8fCAiIzU1MjI0NCI7CiAgICAgICAgcHVzaCBAeyAkTGluZXN7V2VpZ2h0fSB9LCAkUGFyYW17QmFja2VuZERlZn17TGluZVdpZHRofSB8fCA1OwogICAgICAgIHB1c2ggQHsgJExpbmVze0xpbmt9IH0sCiAgICAgICAgICAgICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmtTZWxmfSAmJiAkUGFyYW17VXNlcklEfSApCiAgICAgICAgICAgID8gIkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IgogICAgICAgICAgICA6ICcnOwoKICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgICAgIExpbmVzID0+IFwlTGluZXMsCiAgICApOwoKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVE9CTyBwcm9qZWN0IChMPGh0dHBzOi8vb3RvYm8ub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/System/OpenStreetMap/LocalObject.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhbE9iamVjdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhbE9iamVjdCAtIEJhY2tlbmQgZm9yIElUU01Db25maWdJdGVtIGNsYXNzZXMgbGlua2VkIHRvIG9uZSBsb2NhdGlvbgoKPWhlYWQxIERFU0NSSVBUSU9OCgpGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIG1hcCBzZWN0aW9uIGFuZCBpY29uIGxvY2F0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxvY2FsT2JqZWN0Jyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdhdGhlckluZm8oKQoKR2F0aGVycyBsb2NhdGlvbiBhbmQgaWNvbiBpbmZvLgoKICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdDbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgcHVzaCBAQ0lzLCAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgY2xhc3MgYmFja2VuZHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJUxpbmtCYWNrZW5kRGVmCiAgICAgICAgPSBtYXAgeyAkXy0+e0NsYXNzfSA9PiAkXyB9IHZhbHVlcyAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnJykgLy8ge30gfTsKCiAgICBteSAoICRGcm9tLCAkVG8sICVJY29ucyApOwogICAgQ0k6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDSXMpIHsKCiAgICAgICAgbXkgJExpbmtMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkgICAgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJExvY2F0aW9uSUQ7CgogICAgICAgIExJTktTOgogICAgICAgIGZvciBteSAkTFR5cGVzICggdmFsdWVzICV7JExpbmtMaXN0fSApIHsKICAgICAgICAgICAgZm9yIG15ICRMRGlycyAoIHZhbHVlcyAleyRMVHlwZXN9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRDSU51bXMgKCB2YWx1ZXMgJXskTERpcnN9ICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkTGlua2VkSXRlbSAoIHZhbHVlcyAleyRDSU51bXN9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkTGlua2VkSXRlbS0+e0NsYXNzfSBlcSAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMb2NhdGlvbklEID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBMSU5LUzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRCYWNrZW5kT2JqZWN0CiAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCggJExpbmtCYWNrZW5kRGVmeyAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSB9e0JhY2tlbmR9ICk7CgogICAgICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkTG9jYXRpb25JRCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WzBdLAogICAgICAgICAgICBCYWNrZW5kRGVmICAgPT4gJExpbmtCYWNrZW5kRGVmeyAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSB9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRJbmZve0Zyb219IHx8ICEkSW5mb3tUb30gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gY29vcmRpbmF0ZXMgZm91bmQgZm9yIGxpbmtlZCBDb25maWdJdGVtOiAkTG9jYXRpb25JRCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IENJOwogICAgICAgIH0KCiAgICAgICAgIyBkZWZpbmUgY29vcmRpbmF0ZXMKICAgICAgICBpZiAoICEkRnJvbSApIHsKICAgICAgICAgICAgJEZyb20gPSBbICRJbmZve0Zyb219WzBdLCAkSW5mb3tGcm9tfVsxXSBdOwogICAgICAgICAgICAkVG8gICA9IFsgJEluZm97VG99WzBdLCAgICRJbmZve1RvfVsxXSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzBdID4gJEluZm97RnJvbX1bMF0gKSB7ICRGcm9tLT5bMF0gPSAkSW5mb3tGcm9tfVswXSB9CiAgICAgICAgICAgIGlmICggJEZyb20tPlsxXSA+ICRJbmZve0Zyb219WzFdICkgeyAkRnJvbS0+WzFdID0gJEluZm97RnJvbX1bMV0gfQogICAgICAgICAgICBpZiAoICRUby0+WzBdIDwgJEluZm97VG99WzBdICkgICAgIHsgJFRvLT5bMF0gICA9ICRJbmZve1RvfVswXSB9CiAgICAgICAgICAgIGlmICggJFRvLT5bMV0gPCAkSW5mb3tUb31bMV0gKSAgICAgeyAkVG8tPlsxXSAgID0gJEluZm97VG99WzFdIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIGljb24KICAgICAgICAjICAgICAgICBwdXNoIEB7ICRJY29uc3tQYXRofSB9LCAgICAgICRQYXJhbXtCYWNrZW5kRGVmfXtJY29uUGF0aH07CiAgICAgICAgcHVzaCBAeyAkSWNvbnN7UGF0aH0gfSwgICAgICAkSW5mb3tJY29uc317UGF0aH1bMF07CiAgICAgICAgcHVzaCBAeyAkSWNvbnN7TGF0aXR1ZGV9IH0sICAkSW5mb3tJY29uc317TGF0aXR1ZGV9WzBdOwogICAgICAgIHB1c2ggQHsgJEljb25ze0xvbmdpdHVkZX0gfSwgJEluZm97SWNvbnN9e0xvbmdpdHVkZX1bMF07CiAgICAgICAgcHVzaCBAeyAkSWNvbnN7TGlua30gfSwgICAgICAkSW5mb3tJY29uc317TGlua31bMF07CgojICAgICAgICBwdXNoIEB7ICRJY29uc3tMaW5rfSB9LCAgICAgICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmtTZWxmfSApID8gIkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IiA6ICcnOwoKICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgKTsKCn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RPQk8gcHJvamVjdCAoTDxodHRwczovL290b2JvLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK</File>
        <File Location="Kernel/System/OpenStreetMap/Location.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbiAtIEJhY2tlbmQgZm9yIElUU01Db25maWdJdGVtOjpMb2NhdGlvbiBjbGFzc2VzIGNvbnRhaW5pbmcgR1BTTG9uZ2l0dWRlIGFuZCBHUFNMYXRpdHVkZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIG1hcCBzZWN0aW9uIGFuZCBpY29uIGxvY2F0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxvY2F0aW9uJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdhdGhlckluZm8oKQoKR2F0aGVycyBsb2NhdGlvbiBhbmQgaWNvbiBpbmZvLgoKICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdMb2NhdGlvbl9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWw6IG9ubHkgY29uc2lkZXIgQ29uZmlnSXRlbUlEIDEyMywgaW5zdGVhZCBvZiB3aG9sZSBjbGFzcwogICAgKTsKCj1jdXQKCnN1YiBHYXRoZXJJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgIGZvciBteSAkTmVlZGVkIChxdy9CYWNrZW5kRGVmIENsYXNzLykgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICBteSBAQ0lzOwogICAgaWYgKCAkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICBwdXNoIEBDSXMsICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0NvbmZpZ0l0ZW1JRHN9ICkgewogICAgICAgIGZvciBteSAkSUQgKCAkUGFyYW17Q29uZmlnSXRlbUlEc30tPkAqICkgewogICAgICAgICAgICBwdXNoIEBDSXMsICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRJRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkSWNvbk9iamVjdDsKICAgIGlmICggJFBhcmFte0JhY2tlbmREZWZ9e0ljb25PdmVycmlkZX0gKSB7CiAgICAgICAgbXkgJE92ZXJyaWRlQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPcGVuU3RyZWV0TWFwOjpJY29uT3ZlcnJpZGUnKS0+eyAkUGFyYW17QmFja2VuZERlZn17SWNvbk92ZXJyaWRlfSB9OwoKICAgICAgICAjIGxvYWQgdGhlIG1vZHVsZQogICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRPdmVycmlkZUNvbmZpZy0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGxvYWQgdGhlIG92ZXJyaWRlIG1vZHVsZSAkT3ZlcnJpZGVDb25maWctPntNb2R1bGV9ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgbmV3IGluc3RhbmNlCiAgICAgICAgJEljb25PYmplY3QgPSAkT3ZlcnJpZGVDb25maWctPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICV7JE92ZXJyaWRlQ29uZmlnfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICggJEZyb20sICRUbywgJUljb25zICk7CiAgICBDSToKICAgIGZvciBteSAkQ29uZmlnSXRlbSAoQENJcykgewogICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIFZlcnNpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW0tPntMYXN0VmVyc2lvbklEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRMYXRpdHVkZSAgPSAkVmVyc2lvbi0+eyJEeW5hbWljRmllbGRfTG9jYXRpb24tTGF0aXR1ZGUifSAgfHwgdW5kZWY7CiAgICAgICAgbXkgJExvbmdpdHVkZSA9ICRWZXJzaW9uLT57IkR5bmFtaWNGaWVsZF9Mb2NhdGlvbi1Mb25naXR1ZGUifSB8fCB1bmRlZjsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkTGF0aXR1ZGUgfHwgIWRlZmluZWQgJExvbmdpdHVkZSApIHsKICAgICAgICAgICAgbmV4dCBDSTsKICAgICAgICB9CgogICAgICAgICMgZGVmaW5lIGNvb3JkaW5hdGVzCiAgICAgICAgaWYgKCAhJEZyb20gKSB7CiAgICAgICAgICAgICRGcm9tID0gWyAkTGF0aXR1ZGUsICRMb25naXR1ZGUgXTsKICAgICAgICAgICAgJFRvICAgPSBbICRMYXRpdHVkZSwgJExvbmdpdHVkZSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzBdID4gJExhdGl0dWRlICkgIHsgJEZyb20tPlswXSA9ICRMYXRpdHVkZSB9CiAgICAgICAgICAgIGlmICggJEZyb20tPlsxXSA+ICRMb25naXR1ZGUgKSB7ICRGcm9tLT5bMV0gPSAkTG9uZ2l0dWRlIH0KICAgICAgICAgICAgaWYgKCAkVG8tPlswXSA8ICRMYXRpdHVkZSApICAgIHsgJFRvLT5bMF0gICA9ICRMYXRpdHVkZSB9CiAgICAgICAgICAgIGlmICggJFRvLT5bMV0gPCAkTG9uZ2l0dWRlICkgICB7ICRUby0+WzFdICAgPSAkTG9uZ2l0dWRlIH0KICAgICAgICB9CgogICAgICAgIG15ICRJY29uID0gJFBhcmFte0JhY2tlbmREZWZ9e0ljb25QYXRofTsKICAgICAgICBpZiAoICRQYXJhbXtCYWNrZW5kRGVmfXtJY29uT3ZlcnJpZGV9ICkgewogICAgICAgICAgICBteSAkT3ZlcnJpZGVJY29uID0gJEljb25PYmplY3QtPkdldEljb24oCiAgICAgICAgICAgICAgICBWZXJzaW9uID0+ICRWZXJzaW9uLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRPdmVycmlkZUljb24pIHsKICAgICAgICAgICAgICAgICRJY29uID0gJE92ZXJyaWRlSWNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwbGFjZSBJY29uIChMaW5rU2VsZiBvbmx5IGZvciBhZ2VudHMpCiAgICAgICAgaWYgKCRJY29uKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze1BhdGh9IH0sICAgICAgJEljb247CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze0xhdGl0dWRlfSB9LCAgJExhdGl0dWRlOwogICAgICAgICAgICBwdXNoIEB7ICRJY29uc3tMb25naXR1ZGV9IH0sICRMb25naXR1ZGU7CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze0xpbmt9IH0sCiAgICAgICAgICAgICAgICAoICRQYXJhbXtCYWNrZW5kRGVmfXtMaW5rU2VsZn0gJiYgJFBhcmFte1VzZXJJRH0gKQogICAgICAgICAgICAgICAgPyAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iCiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICBwdXNoIEB7ICRJY29uc3tUb29sdGlwfSB9LAogICAgICAgICAgICAgICAgKCAkUGFyYW17QmFja2VuZERlZn17VG9vbHRpcH0gKQogICAgICAgICAgICAgICAgPyAkVmVyc2lvbi0+e05hbWV9CiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgKTsKCn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RPQk8gcHJvamVjdCAoTDxodHRwczovL290b2JvLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK</File>
        <File Location="Kernel/System/OpenStreetMap/Section.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpTZWN0aW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OlNlY3Rpb24gLSBCYWNrZW5kIGZvciBJVFNNQ29uZmlnSXRlbSBjbGFzc2VzIGxpbmtlZCB0byB0d28gbG9jYXRpb25zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6U2VjdGlvbicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHYXRoZXJJbmZvKCkKCkdhdGhlcnMgbG9jYXRpb24gYW5kIGljb24gaW5mby4KCiAgICBteSAlSW5mbyA9ICRCYWNrZW5kT2JqZWN0LT5HYXRoZXJJbmZvKAogICAgICAgIENsYXNzICAgICAgICA9PiAnTGluZV9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CiAgICBteSAkTGlua09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CiAgICBteSAkUGFyZW50Q2xhc3MgICAgICA9ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WzBdOwoKICAgICMgc2VjdGlvbnMgYXJlIGRyYXduIGFzIHBhcnRzIG9mIHRoZSBsaW5rZWQgY2xhc3MsIHRoZXkgbmVlZCB0byBiZSBnYXRoZXJlZCBmaXJzdAogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgbXkgJExpbmtMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkgICAgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBMSU5LUzoKICAgICAgICBmb3IgbXkgJExUeXBlcyAoIHZhbHVlcyAleyRMaW5rTGlzdH0gKSB7CiAgICAgICAgICAgIGZvciBteSAkTERpcnMgKCB2YWx1ZXMgJXskTFR5cGVzfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQ0lOdW1zICggdmFsdWVzICV7JExEaXJzfSApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJExpbmtlZEl0ZW0gKCB2YWx1ZXMgJXskQ0lOdW1zfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJExpbmtlZEl0ZW0tPntDbGFzc30gZXEgJFBhcmVudENsYXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQENJcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCggQ29uZmlnSXRlbUlEID0+ICRMaW5rZWRJdGVtLT57Q29uZmlnSXRlbUlEfSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFAQ0lzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJObyBsaW5rIG9mIGNsYXNzICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WzBdIGZvdW5kIGZvciBDb25maWdJdGVtSUQgJFBhcmFte0NvbmZpZ0l0ZW1JRH0hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgICAgIG15ICVDbGFzc1RvSUQgICAgICAgICAgICA9IHJldmVyc2UgJXsgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCggQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJyApIH07CgogICAgICAgIHB1c2ggQENJcywgQHsKICAgICAgICAgICAgJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1SZXN1bHRMaXN0KAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NUb0lEeyRQYXJlbnRDbGFzc30sCiAgICAgICAgICAgICkKICAgICAgICB9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGNsYXNzIGJhY2tlbmRzCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICVMaW5rQmFja2VuZERlZgogICAgICAgID0gbWFwIHsgJF8tPntDbGFzc30gPT4gJF8gfSB2YWx1ZXMgJXsgJENvbmZpZ09iamVjdC0+R2V0KCdPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZycpIC8vIHt9IH07CiAgICBteSAkUGFyZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJExpbmtCYWNrZW5kRGVmeyRQYXJlbnRDbGFzc317QmFja2VuZH0gKTsKCiAgICBteSAoICRGcm9tLCAkVG8sICVJY29ucywgJUxpbmVzICk7CgogICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBwYXJlbnQgQ0lzCiAgICBDSToKICAgIGZvciBteSAkQ29uZmlnSXRlbSAoQENJcykgewoKICAgICAgICBteSAlUGFyZW50SW5mbyA9ICRQYXJlbnRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAkUGFyZW50Q2xhc3MsCiAgICAgICAgICAgIEJhY2tlbmREZWYgICA9PiAkTGlua0JhY2tlbmREZWZ7JFBhcmVudENsYXNzfSwKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfSwKICAgICAgICApOwoKICAgICAgICBteSAkTGlua0xpc3QgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAU2VjdGlvbnM7CgogICAgIyBoaWVyIHdlaXRlci4uLgogICAgIyAgICAgICAgTElOS1M6CiAgICAjICAgICAgICBmb3IgbXkgJExUeXBlcyAoIHZhbHVlcyAleyAkTGlua0xpc3QgfSApIHsKICAgICMgICAgICAgICAgZm9yIG15ICRMRGlycyAoIHZhbHVlcyAleyAkTFR5cGVzIH0gKSB7CiAgICAjICAgICAgICAgICAgZm9yIG15ICRDSU51bXMgKCB2YWx1ZXMgJXsgJExEaXJzIH0gKSB7CiAgICAjICAgICAgICAgICAgICBmb3IgbXkgJExpbmtlZEl0ZW0gKCB2YWx1ZXMgJXsgJENJTnVtcyB9ICkgewogICAgIwogICAgIyAgICAgICAgICAgICAgICBpZiAoICEkRW5kc1swXSAmJiAkTGlua2VkSXRlbS0+e0NsYXNzfSBlcSAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfSApIHsKICAgICMgICAgICAgICAgICAgICAgICAgICRFbmRzWzBdID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgIyAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kc1sxXSApIHsKICAgICMgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IExJTktTOwogICAgIyAgICAgICAgICAgICAgICAgICAgfQogICAgIyAgICAgICAgICAgICAgICB9CiAgICAjICAgICAgICAgICAgICAgIGVsc2lmICggISRFbmRzWzFdICYmICRMaW5rZWRJdGVtLT57Q2xhc3N9IGVxICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WzFdICkgewogICAgIyAgICAgICAgICAgICAgICAgICAgJEVuZHNbMV0gPSAkTGlua2VkSXRlbS0+e0NvbmZpZ0l0ZW1JRH07CiAgICAjICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRzWzBdICkgewogICAgIyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAjICAgICAgICAgICAgICAgICAgICB9CiAgICAjICAgICAgICAgICAgICAgIH0KICAgICMKICAgICMgICAgICAgICAgICAgIH0KICAgICMgICAgICAgICAgICB9CiAgICAjICAgICAgICAgIH0KICAgICMgICAgICAgIH0KICAgICMKICAgIH0KIyN1c2UgRGF0YTo6RHVtcGVyOwojI3ByaW50IFNUREVSUiAidm82MCAtIEljb25zOiAiLkR1bXBlcihcJUljb25zKTsKIyNwcmludCBTVERFUlIgInZvNjAgLSBMaW5lczogIi5EdW1wZXIoXCVMaW5lcyk7CiAgICAjCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgICAgIExpbmVzID0+IFwlTGluZXMsCiAgICApOwoKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVE9CTyBwcm9qZWN0IChMPGh0dHBzOi8vb3RvYm8ub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/System/OpenStreetMap.pm" Permission="644" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJE9TTU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdlbmVyYXRlUmVzcG9uc2UoKQoKR2VuZXJhdGVzIHRoZSBSZXNwb25zZSBjb250YWluaW5nIGFsbCB0aGUgaW5mby4KCiAgICBteSAkUmVzcG9uc2UgPSAkT1NNT2JqZWN0LT5HZW5lcmF0ZVJlc3BvbnNlKAogICAgICAgIE9yaWdpbmFsQWN0aW9uID0+IEFjdGlvbiwKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhdGVSZXNwb25zZSB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmV0dXJuRXJyID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnRnJvbScsCiAgICAgICAgICAgIERhdGEgPT4gWyAtMTAsIC0xMCBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdUbycsCiAgICAgICAgICAgIERhdGEgPT4gWyAxMCwgMTAgXSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17T3JpZ2luYWxBY3Rpb259ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPcmlnaW5hbEFjdGlvbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRSZXR1cm5FcnI7CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgdGhlIHRlbXBsYXRlcyBmb3IgYWxsIGFjdGlvbnMKICAgIG15ICRUZW1wbGF0ZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZycpOwogICAgaWYgKCAhJFRlbXBsYXRlcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyBBY3Rpb25Db25maWdzIGZvdW5kIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gZXEgJ0NvbW1vbkFjdGlvbicgKSB7CiAgICAgICAgJFBhcmFte09yaWdpbmFsQWN0aW9ufSA9ICRQYXJhbXtVc2VySUR9ID8gKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpDb21tb25QYXJhbScpLT57J0FjdGlvbid9IHx8ICdDb21tb25BY3Rpb24nICkgOgogICAgICAgICAgICAoICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJGcm9udGVuZDo6Q29tbW9uUGFyYW0nKS0+eydBY3Rpb24nfSB8fCAnQ3VzdG9tZXJDb21tb25BY3Rpb24nICk7CiAgICB9CgogICAgIyBnZXQgdGhlIG1hcCBjb25maWcgZm9yIHRoZSBjdXJyZW50IGFjdGlvbgogICAgbXkgJE1hcENvbmZpZzsKICAgIFRFTVBMQVRFOgogICAgZm9yIG15ICRDdXJyQ29uZiAoIHZhbHVlcyAleyRUZW1wbGF0ZXN9ICkgewoKICAgICAgICBpZiAoICRDdXJyQ29uZi0+e0FjdGlvbn0gZXEgJFBhcmFte09yaWdpbmFsQWN0aW9ufSApIHsKICAgICAgICAgICAgJE1hcENvbmZpZyA9ICRDdXJyQ29uZjsKICAgICAgICAgICAgbGFzdCBURU1QTEFURTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJE1hcENvbmZpZyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBBY3Rpb25Db25maWcgZm91bmQgZm9yICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybiAkUmV0dXJuRXJyOwogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICBteSAkQ3VzdG9tZXJHcm91cE9iamVjdCAgPSAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gJiYgJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lckdyb3VwU3VwcG9ydCcpICkgPyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcpIDogdW5kZWY7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJUNsYXNzSURzOwogICAgewogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICk7CiAgICAgICAgJUNsYXNzSURzID0gcmV2ZXJzZSAleyRDbGFzc0xpc3R9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGNsYXNzIGJhY2tlbmRzCiAgICBteSAlQmFja2VuZERlZiA9IG1hcCB7ICRfLT57Q2xhc3N9ID0+ICRfIH0gdmFsdWVzICV7ICRDb25maWdPYmplY3QtPkdldCgnT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcnKSB9OwoKICAgIG15ICVDb25maWdJdGVtSURzQnlDbGFzczsKICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRUaWNrZXRPcGVuU3RyZWV0TWFwJyApIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBteSBAQ0lzID0gJFNlbGYtPl9HZXRDb25maWdJdGVtc0xpbmtlZFRvVGlja2V0cygKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBBY3Rpb25Db25maWcgPT4gJE1hcENvbmZpZywKICAgICAgICApOwoKICAgICAgICAjIGJ1bmRsZSBhbGwgQ0lzIGZvciBlYWNoIGNsYXNzCiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtIChAQ0lzKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJENvbmZpZ0l0ZW1JRHNCeUNsYXNzeyAkQ29uZmlnSXRlbS0+e0NsYXNzfSB9IH0sICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgKCAkUmV0dXJuLCAlSWNvbnMsICVMaW5lcyApOwogICAgQ0FURUdPUlk6CiAgICBmb3IgbXkgJENhdGVnb3J5ICggQHsgJE1hcENvbmZpZy0+e1Nob3d9IH0gKSB7CiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgaWYgKCAkQ2F0ZWdvcnkgZXEgJ1NlbGYnICkgewogICAgICAgICAgICAlRGF0YSA9ICRTZWxmLT5fQ2xhc3NHZXQoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBCYWNrZW5kRGVmID0+IFwlQmFja2VuZERlZiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISREYXRhe0NsYXNzfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkUmV0dXJuRXJyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEFkZCBDb25maWdJdGVtSUQgb3Igc2ltaWxhcgogICAgICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gZXEgJ0FnZW50VGlja2V0T3BlblN0cmVldE1hcCcgKSB7CiAgICAgICAgICAgIG5leHQgQ0FURUdPUlkgaWYgISRDb25maWdJdGVtSURzQnlDbGFzc3skQ2F0ZWdvcnl9OwoKICAgICAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgID0+ICRDYXRlZ29yeSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gJENvbmZpZ0l0ZW1JRHNCeUNsYXNzeyRDYXRlZ29yeX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgICAgIENsYXNzICAgPT4gJENhdGVnb3J5LAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRHN7JENhdGVnb3J5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBpdGVtcyBvbmx5IGlmIHVzZXIgaGFzIGFjY2VzcyByaWdodHMKICAgICAgICBteSAkSGFzQWNjZXNzOwoKICAgICAgICAjIGFnZW50cwogICAgICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRUaWNrZXRPcGVuU3RyZWV0TWFwJyApIHsKICAgICAgICAgICAgJEhhc0FjY2VzcyA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgICAgICRIYXNBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFNjb3BlICAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJERhdGF7Q2xhc3NJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAncm8nLAogICAgICAgICAgICAgICAgTG9nTm8gICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjdXN0b21lciB1c2VycyB3aXRoIGdyb3VwIHN1cHBvcnQKICAgICAgICBlbHNpZiAoJEN1c3RvbWVyR3JvdXBPYmplY3QpIHsKICAgICAgICAgICAgbXkgJENsYXNzSXRlbSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRGF0YXtDbGFzc0lEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHVzZXIgZ3JvdXBzCiAgICAgICAgICAgIG15IEBHcm91cElEcyA9ICRDdXN0b21lckdyb3VwT2JqZWN0LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdJRCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGxvb2tpbmcgZm9yIGdyb3VwIGlkCiAgICAgICAgICAgIEdST1VQOgogICAgICAgICAgICBmb3IgbXkgJEdyb3VwSUQgKEBHcm91cElEcykgewogICAgICAgICAgICAgICAgaWYgKCAkQ2xhc3NJdGVtLT57UGVybWlzc2lvbn0gJiYgJEdyb3VwSUQgZXEgJENsYXNzSXRlbS0+e1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgICAgICRIYXNBY2Nlc3MgPSAxOwogICAgICAgICAgICAgICAgICAgIGxhc3QgR1JPVVA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY3VzdG9tZXIgdXNlcnMgd2l0aG91dCBncm91cCBzdXBwb3J0IChzaG93IGV2ZXJ5dGhpbmcgd2hpY2ggaXMgY29uZmlndXJlZCkKICAgICAgICBlbHNpZiAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICRIYXNBY2Nlc3MgPSAxOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBDQVRFR09SWSBpZiAhJEhhc0FjY2VzczsKCiAgICAgICAgaWYgKCAhJEJhY2tlbmREZWZ7ICREYXRhe0NsYXNzfSB9e0JhY2tlbmR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gQmFja2VuZCBkZWZpbmVkIGZvciAkRGF0YXtDbGFzc30hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRSZXR1cm5FcnI7CiAgICAgICAgfQoKICAgICAgICBteSAlSW5mbyA9ICRLZXJuZWw6Ok9NLT5HZXQoICRCYWNrZW5kRGVmeyAkRGF0YXtDbGFzc30gfXtCYWNrZW5kfSApLT5HYXRoZXJJbmZvKAogICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgQmFja2VuZERlZiA9PiAkQmFja2VuZERlZnsgJERhdGF7Q2xhc3N9IH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0gLy8gdW5kZWYsCiAgICAgICAgKTsKCiAgICAgICAgIyBBZGp1c3QgbWFwIGN1dG91dAogICAgICAgIGlmICggIWRlZmluZWQgJFJldHVybiAmJiAkSW5mb3tGcm9tfSApIHsKICAgICAgICAgICAgJFJldHVybiA9IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRJbmZve0Zyb219LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0Zyb20nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRJbmZve1RvfSwKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUbycsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluZm97RnJvbX0gKSB7CiAgICAgICAgICAgIGlmICggJEluZm97RnJvbX1bMF0gPCAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzBdICkgeyAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzBdID0gJEluZm97RnJvbX1bMF0gfQogICAgICAgICAgICBpZiAoICRJbmZve0Zyb219WzFdIDwgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSApIHsgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSA9ICRJbmZve0Zyb219WzFdIH0KICAgICAgICAgICAgaWYgKCAkSW5mb3tUb31bMF0gPiAkUmV0dXJuLT5bMV0tPntEYXRhfS0+WzBdICkgICB7ICRSZXR1cm4tPlsxXS0+e0RhdGF9LT5bMF0gPSAkSW5mb3tUb31bMF0gfQogICAgICAgICAgICBpZiAoICRJbmZve1RvfVsxXSA+ICRSZXR1cm4tPlsxXS0+e0RhdGF9LT5bMV0gKSAgIHsgJFJldHVybi0+WzFdLT57RGF0YX0tPlsxXSA9ICRJbmZve1RvfVsxXSB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXh0IENBVEVHT1JZOwogICAgICAgIH0KCiAgICAgICAgIyBnYXRoZXIgaWNvbiBpbmZvCiAgICAgICAgaWYgKCAkSW5mb3tJY29uc30gKSB7CiAgICAgICAgICAgIGlmICggJEluZm97SWNvbnN9e0xhdGl0dWRlfSAmJiAkSW5mb3tJY29uc317TG9uZ2l0dWRlfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdy9MYXRpdHVkZSBMb25naXR1ZGUgUGF0aCBMaW5rIFRvb2x0aXAvKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRJbmZve0ljb25zfXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI3sgJEluZm97SWNvbnN9e0xhdGl0dWRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkSWNvbnN7JEtleX0gfSwgJEluZm97SWNvbnN9eyRLZXl9WyRpXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI3sgJEluZm97SWNvbnN9e0xhdGl0dWRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkSWNvbnN7JEtleX0gfSwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2F0aGVyIGxpbmUgaW5mbwogICAgICAgIGlmICggJEluZm97TGluZXN9ICkgewogICAgICAgICAgICBpZiAoICRJbmZve0xpbmVzfXtGcm9tMH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcvRnJvbTAgVG8wIEZyb20xIFRvMSBDb2xvciBMaW5rIFRvb2x0aXAgV2VpZ2h0LykgewogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkSW5mb3tMaW5lc317JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCN7ICRJbmZve0xpbmVzfXtGcm9tMH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJExpbmVzeyRLZXl9IH0sICRJbmZve0xpbmVzfXskS2V5fVskaV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCN7ICRJbmZve0xpbmVzfXtGcm9tMH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJExpbmVzeyRLZXl9IH0sICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFJldHVybiApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG1hcCBkYXRhIHByb3ZpZGVkISAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgIH0KCiAgICAjIGlmIG5vIGNvb3JkaW5hdGVzIHdoZXJlIHByb3ZpZGVkCiAgICBmb3IgbXkgJGkgKCAwLCAxICkgewogICAgICAgIGZvciBteSAkaiAoIDAsIDEgKSB7CiAgICAgICAgICAgICRSZXR1cm4tPlskaV0tPntEYXRhfS0+WyRqXSAvLz0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBtYXJnaW4gaXMgZWl0aGVyIGEgZnJhY3Rpb24gb2YgdGhlIG1hcCBjdXRvdXQsIG9yLCBpZiBpdCBpcyB0byBzbWFsbCwgdGhlIHByZWRlZmluZWQgbWFyZ2luCiAgICBteSAkTWFyZ2luID0gKAogICAgICAgIHNvcnQgeyAkYSA8PT4gJGIgfSAoCiAgICAgICAgICAgICRNYXBDb25maWctPntNYXJnaW59LAogICAgICAgICAgICAwLjA4ICogKCAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzFdIC0gJFJldHVybi0+WzBdLT57RGF0YX0tPlswXSApLAogICAgICAgICAgICAwLjA4ICogKCAkUmV0dXJuLT5bMV0tPntEYXRhfS0+WzFdIC0gJFJldHVybi0+WzFdLT57RGF0YX0tPlswXSApCiAgICAgICAgKQogICAgKVstMV07CgogICAgJFJldHVybi0+WzBdLT57RGF0YX0tPlswXSAtPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSAtPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzFdLT57RGF0YX0tPlswXSArPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzFdLT57RGF0YX0tPlsxXSArPSAkTWFyZ2luOwoKICAgIGlmICglSWNvbnMpIHsKICAgICAgICBwdXNoIEB7JFJldHVybn0sIHsKICAgICAgICAgICAgTmFtZSA9PiAnSWNvbnMnLAogICAgICAgICAgICBEYXRhID0+IFwlSWNvbnMsCiAgICAgICAgfTsKICAgIH0KICAgIGlmICglTGluZXMpIHsKICAgICAgICBwdXNoIEB7JFJldHVybn0sIHsKICAgICAgICAgICAgTmFtZSA9PiAnTGluZXMnLAogICAgICAgICAgICBEYXRhID0+IFwlTGluZXMsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gJFJldHVybjsKCn0KCj1oZWFkMiBfQ2xhc3NHZXQoKQoKUHJvdmlkZXMgdGhlIGNsYXNzIGluIGRlcGVuZGVuY2Ugb2YgdGhlIHNpdGUgdmlzaXRlZC4KCiAgICBteSAoICRDbGFzc0lELCAkQ2xhc3MgKSA9ICRPU01PYmplY3QtPl9DbGFzc0dldCgKICAgICAgICBPcmlnaW5hbEFjdGlvbiA9PiAnQWN0aW9uJywKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIF9DbGFzc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvT3JpZ2luYWxBY3Rpb24gQmFja2VuZERlZi8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20nICkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkQ0kgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRQYXJhbXtCYWNrZW5kRGVmfXsgJENJLT57Q2xhc3N9IH0gKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENJLT57Q2xhc3NJRH0sCiAgICAgICAgICAgIENsYXNzICAgPT4gJENJLT57Q2xhc3N9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuOwoKfQoKc3ViIF9HZXRDb25maWdJdGVtc0xpbmtlZFRvVGlja2V0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXVlcyBUaWNrZXRUeXBlcykpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtBY3Rpb25Db25maWd9eyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCBpbiBBY3Rpb25Db25maWchIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc3RhdGUgbGlzdAogICAgbXkgJFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAncHJlcHJvZHVjdGl2ZScsICdwcm9kdWN0aXZlJyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgY3JlYXRlIHN0YXRlIHN0cmluZwogICAgbXkgJERlcGxTdGF0ZVN0cmluZyA9IGpvaW4gcXssIH0sIGtleXMgJXskU3RhdGVMaXN0fTsKCiAgICBteSAlU2VhcmNoQ3JpdGVyaWEgPSAoKTsKICAgIGlmICggQHsgJFBhcmFte0FjdGlvbkNvbmZpZ317UXVldWVzfSB9ICkgewogICAgICAgICRTZWFyY2hDcml0ZXJpYXtRdWV1ZXN9ID0gJFBhcmFte0FjdGlvbkNvbmZpZ317UXVldWVzfTsKICAgIH0KICAgIGlmICggQHsgJFBhcmFte0FjdGlvbkNvbmZpZ317VGlja2V0VHlwZXN9IH0gKSB7CiAgICAgICAgJFNlYXJjaENyaXRlcmlhe1R5cGVzfSA9ICRQYXJhbXtBY3Rpb25Db25maWd9e1RpY2tldFR5cGVzfTsKICAgIH0KCiAgICBteSBAVGlja2V0SURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZWFyY2goCiAgICAgICAgUmVzdWx0ICAgID0+ICdBUlJBWScsCiAgICAgICAgU3RhdGVUeXBlID0+ICdPcGVuJywKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgJVNlYXJjaENyaXRlcmlhLAogICAgKTsKCiAgICBteSAlQ29uZmlnSXRlbUlESGFzaDsKICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICBteSAlTGlua2VkQ29uZmlnSXRlbXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdCgKICAgICAgICAgICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBLZXkxICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgRGlyZWN0aW9uID0+ICJCb3RoIiwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJUxpbmtlZENvbmZpZ0l0ZW1zICkgewogICAgICAgICAgICAkQ29uZmlnSXRlbUlESGFzaHskQ29uZmlnSXRlbUlEfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9ucyBkYXRhCiAgICBteSBAQ29uZmlnSXRlbUxpc3Q7CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJUNvbmZpZ0l0ZW1JREhhc2ggKSB7CgogICAgICAgICMgZ2V0IHZlcnNpb24gZGF0YQogICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1MaXN0LCAkQ29uZmlnSXRlbTsKICAgIH0KCiAgICByZXR1cm4gQENvbmZpZ0l0ZW1MaXN0Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UT0JPIHByb2plY3QgKEw8aHR0cHM6Ly9vdG9iby5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgoKPWN1dAo=</File>
        <File Location="var/httpd/htdocs/js/Core.OpenStreetMap.js" Permission="644" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxOCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CgpDb3JlLk9wZW5TdHJlZXRNYXAgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgdmFyIENhbnZhc0lEID0gJ29wZW5zdHJlZXRtYXAtY2FudmFzJzsKCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICggJCggIiMiICsgQ2FudmFzSUQgKS5sZW5ndGggPiAwICkgewogICAgICAgICAgICBUYXJnZXROUy5DcmVhdGVNYXAoKTsKICAgICAgICB9CiAgICB9OwoKICAgIFRhcmdldE5TLkNyZWF0ZU1hcCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBDU1MgbGFkZW4KICAgICAgICBUYXJnZXROUy5Mb2FkQ1NTKCIvb3RvYm8td2ViL3NraW5zL0FnZW50L2RlZmF1bHQvY3NzL3RoaXJkcGFydHkvbGVhZmxldC0xLjQuMC9sZWFmbGV0LmNzcyIpOwoKICAgICAgICAvLyBMZWFmbGV0c2NyaXB0IGxhZGVuCiAgICAgICAgVGFyZ2V0TlMuTG9hZFNjcmlwdCgiL290b2JvLXdlYi9qcy90aGlyZHBhcnR5L2xlYWZsZXQtMS40LjAvbGVhZmxldC5qcyIsIFRhcmdldE5TLk1hcFNjcmlwdCk7CiAgICB9OwoKICAgIFRhcmdldE5TLk1hcFNjcmlwdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgdmFyIG1hcGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICIjIiArIENhbnZhc0lEICk7CiAgICAgICAgbWFwY2FudmFzLmlubmVySFRNTCA9ICIiOwoKICAgICAgICAvLyBLYXJ0ZW4gYW5sZWdlbgoKICAgICAgICB2YXIgb3NtID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywgewogICAgICAgICAgICBtYXhab29tOiAyMCwKICAgICAgICAgICAgYXR0cmlidXRpb246ICdNYXAgZGF0YSAmY29weTsgPGEgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcDwvYT4gYW5kIGNvbnRyaWJ1dG9ycyA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wLyIgdGFyZ2V0PSJfYmxhbmsiPkNDLUJZLVNBPC9hPicKICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciBtYXAgPSBMLm1hcChtYXBjYW52YXMsIHsgbGF5ZXJzOiBvc20sIHRhcDogZmFsc2UgfSApIDsKCiAgICAgICAgLy8gTWl0IE1hw59zdGFiCgogICAgICAgICAgICBMLmNvbnRyb2wuc2NhbGUoe2ltcGVyaWFsOmZhbHNlfSkuYWRkVG8obWFwKTsKCiAgICAgICAgLy9LYXJ0ZW5hdXNzY2huaXR0IHfDpGhsZW4KICAgICAgICB2YXIgRGF0YSA9IHt9OwoKICAgICAgICAvLyBnYXRoZXIgaW5mbyBmcm9tIHVybCAobmVlZCBDb25maWdJdGVtSUQpCiAgICAgICAgdmFyIGhhc2g7CiAgICAgICAgdmFyIGhhc2hlcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNsaWNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJz8nKSArIDEpLnNwbGl0KCc7Jyk7CiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGhhc2ggPSBoYXNoZXNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgRGF0YVtoYXNoWzBdXSA9IGhhc2hbMV07CiAgICAgICAgfQoKICAgICAgICAvLyBzdG9yZSB0aGUgb3JpZ2luYWwgYWN0aW9uCiAgICAgICAgaWYgKCBEYXRhWydBY3Rpb24nXSAhPSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgIERhdGFbJ09yaWdpbmFsQWN0aW9uJ10gPSBEYXRhWydBY3Rpb24nXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIChDdXN0b21lcilGcm9udGVuZDo6Q29tbW9uUGFyYW0jIyNBY3Rpb24KICAgICAgICAgICAgRGF0YVsnT3JpZ2luYWxBY3Rpb24nXSA9ICdDb21tb25BY3Rpb24nOwogICAgICAgIH0KCiAgICAgICAgLy8gdXNlIGFnZW50IG9yIGN1c3RvbWVyIGludGVyZmFjZQogICAgICAgIGlmICggQ29yZS5Db25maWcuR2V0KCdTZXNzaW9uTmFtZScpID09PSBDb3JlLkNvbmZpZy5HZXQoJ0N1c3RvbWVyUGFuZWxTZXNzaW9uTmFtZScpICkgewogICAgICAgICAgICBEYXRhWydBY3Rpb24nXSA9ICdDdXN0b21lck9wZW5TdHJlZXRNYXAnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgRGF0YVsnQWN0aW9uJ10gPSAnQWdlbnRPcGVuU3RyZWV0TWFwJzsKICAgICAgICB9CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbihSZXNwb25zZSl7CgogICAgICAgICAgICB2YXIgYm91bmRzID0gWyBbIFJlc3BvbnNlWydGcm9tJ11bMF1bMF0sIFJlc3BvbnNlWydGcm9tJ11bMV1bMF0gXSwgWyBSZXNwb25zZVsnVG8nXVswXVswXSwgUmVzcG9uc2VbJ1RvJ11bMV1bMF0gXSBdOwoKICAgICAgICAgICAgLy8gbGluayBmdW5jdGlvbiBjcmVhdG9yIHRvIGhhdmUgY29uc3RhbnQgVXJscyBmb3Igb2xkIGJyb3dzZXJzLCB0b28KICAgICAgICAgICAgZnVuY3Rpb24gR2V0TGlua09wZW5lciggVXJsICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKCBVcmwsICJfc2VsZiIgKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHBsYWNlIGljb25zCiAgICAgICAgICAgIGlmICggUmVzcG9uc2VbJ0ljb25zJ10gKSB7CiAgICAgICAgICAgICAgICB2YXIgSWNvbnMgPSB7fTsKCiAgICAgICAgICAgICAgICAvLyBtYXAgdGhlIHVub3JkZXJlZCBSZXNwb25zZSBhcnJheSB0byBhbiBhdHRyaWJ1dGUgaGFzaAogICAgICAgICAgICAgICAgUmVzcG9uc2VbJ0ljb25zJ10ubWFwKGZ1bmN0aW9uKG4peyBJY29uc1sgblswXSBdID0gblsxXSB9KTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEljb25zWydMYXRpdHVkZSddLmxlbmd0aCA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBJY29uOwogICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byBtYXAKICAgICAgICAgICAgICAgICAgICBpZiAoIEljb25zWydQYXRoJ11baV0gPT0gJycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEljb24gPSBMLm1hcmtlcihbSWNvbnNbJ0xhdGl0dWRlJ11baV0sIEljb25zWydMb25naXR1ZGUnXVtpXV0pLmFkZFRvKG1hcCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgTG9nbyA9IEwuaWNvbih7IGljb25Vcmw6IEljb25zWydQYXRoJ11baV0sIGljb25TaXplOiBbMTAsIDE1XSwgaWNvbkFuY2hvcjogWzUsIDE1XSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbiA9IEwubWFya2VyKFtJY29uc1snTGF0aXR1ZGUnXVtpXSwgSWNvbnNbJ0xvbmdpdHVkZSddW2ldXSwge2ljb246IExvZ299KTsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbi5hZGRUbyhtYXApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gbGluawogICAgICAgICAgICAgICAgICAgIGlmICggSWNvbnNbJ0xpbmsnXVtpXSAhPSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE9wZW5VcmwgPSBHZXRMaW5rT3BlbmVyKCBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykrSWNvbnNbJ0xpbmsnXVtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICBJY29uLm9uKCAiY2xpY2siLCBPcGVuVXJsICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyB0b29sdGlwCiAgICAgICAgICAgICAgICAgICAgaWYgKCBJY29uc1snVG9vbHRpcCddICYmIEljb25zWydUb29sdGlwJ11baV0gIT0gJycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEljb24uYmluZFRvb2x0aXAoIEljb25zWydUb29sdGlwJ11baV0gKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGRyYXcgbGluZXMKICAgICAgICAgICAgaWYgKCBSZXNwb25zZVsnTGluZXMnXSApIHsKICAgICAgICAgICAgICAgIC8vIG1hcCB0aGUgdW5vcmRlcmVkIFJlc3BvbnNlIGFycmF5IHRvIGFuIGF0dHJpYnV0ZSBoYXNoCiAgICAgICAgICAgICAgICB2YXIgTGluZXMgPSB7fTsKICAgICAgICAgICAgICAgIFJlc3BvbnNlWydMaW5lcyddLm1hcChmdW5jdGlvbihuKXsgTGluZXNbIG5bMF0gXSA9IG5bMV0gfSk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IExpbmVzWydGcm9tMCddLmxlbmd0aCA7IGkrKykgewoKICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gbWFwCiAgICAgICAgICAgICAgICAgICAgdmFyIExpbmUgPSBMLnBvbHlsaW5lKFsgW0xpbmVzWydGcm9tMCddW2ldLCBMaW5lc1snRnJvbTEnXVtpXV0sIFtMaW5lc1snVG8wJ11baV0sIExpbmVzWydUbzEnXVtpXV0gXSwge2NvbG9yOiBMaW5lc1snQ29sb3InXVtpXSwgd2VpZ2h0OiBMaW5lc1snV2VpZ2h0J11baV0sIG9wYWNpdHk6IDF9ICk7CiAgICAgICAgICAgICAgICAgICAgTGluZS5hZGRUbyhtYXApOwoKICAgICAgICAgICAgICAgICAgICAvLyBsaW5rCiAgICAgICAgICAgICAgICAgICAgaWYgKCBMaW5lc1snTGluayddW2ldICE9ICcnICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3BlblVybCA9IEdldExpbmtPcGVuZXIoIENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKStMaW5lc1snTGluayddW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgIExpbmUub24oICJjbGljayIsIE9wZW5VcmwgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIHRvb2x0aXAKICAgICAgICAgICAgICAgICAgICBpZiAoIEljb25zWydUb29sdGlwJ10gJiYgSWNvbnNbJ1Rvb2x0aXAnXVtpXSAhPSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbi5iaW5kVG9vbHRpcCggSWNvbnNbJ1Rvb2x0aXAnXVtpXSApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNjYWxlIG1hcAogICAgICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyggYm91bmRzICk7CgogICAgICAgICAgICAvLyBLYXJ0ZSBiZWkgcmVzaXplIG5ldSBza2FsaWVyZW4KICAgICAgICAgICAgICAgIG1hcC5vbigicmVzaXplIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyggYm91bmRzICk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgfTsKCiAgICBUYXJnZXROUy5Mb2FkU2NyaXB0ID0gZnVuY3Rpb24gKHVybCxjYWxsYmFjaykgewogICAgICAgIHZhciBzY3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzY3IudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwogICAgICAgIHNjci5hc3luYyA9ICJhc3luYyI7CiAgICAgICAgaWYodHlwZW9mKGNhbGxiYWNrKT09ImZ1bmN0aW9uIikgewogICAgICAgICAgICBzY3Iub25sb2FkRG9uZSA9IGZhbHNlOwogICAgICAgICAgICBzY3Iub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoICFzY3Iub25sb2FkRG9uZSApIHsKICAgICAgICAgICAgICAgICAgICBzY3Iub25sb2FkRG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgc2NyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCAoICJsb2FkZWQiID09PSBzY3IucmVhZHlTdGF0ZSB8fCAiY29tcGxldGUiID09PSBzY3IucmVhZHlTdGF0ZSApICYmICFzY3Iub25sb2FkRG9uZSApIHsKICAgICAgICAgICAgICAgICAgICBzY3Iub25sb2FkRG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzY3Iuc3JjID0gdXJsOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyKTsKICAgIH07IC8vIExvYWRTY3JpcHQKCiAgICBUYXJnZXROUy5Mb2FkQ1NTID0gZnVuY3Rpb24gKHVybCkgewogICAgICAgIHZhciBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwogICAgICAgIGwudHlwZSA9ICJ0ZXh0L2NzcyI7CiAgICAgICAgbC5yZWwgPSAic3R5bGVzaGVldCI7CiAgICAgICAgbC5ocmVmID0gdXJsOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQobCk7CiAgICB9OyAvLyBMb2FkQ1NTCgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKCn0oQ29yZS5PcGVuU3RyZWV0TWFwIHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/js/thirdparty/leaflet-1.4.0/leaflet.js" Permission="644" Encode="Base64">LyogQHByZXNlcnZlCiAqIExlYWZsZXQgMS40LjAsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KICogKGMpIDIwMTAtMjAxOCBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlCiAqLwohZnVuY3Rpb24odCxpKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2koZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0saSk6aSh0Lkw9e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3ZhciBpLGUsbixvO2ZvcihlPTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspe289YXJndW1lbnRzW2VdO2ZvcihpIGluIG8pdFtpXT1vW2ldfXJldHVybiB0fWZ1bmN0aW9uIGUodCxpKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYodC5iaW5kKXJldHVybiB0LmJpbmQuYXBwbHkodCxlLmNhbGwoYXJndW1lbnRzLDEpKTt2YXIgbj1lLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGksbi5sZW5ndGg/bi5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpOmFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuX2xlYWZsZXRfaWQ9dC5fbGVhZmxldF9pZHx8KytlaSx0Ll9sZWFmbGV0X2lkfWZ1bmN0aW9uIG8odCxpLGUpe3ZhciBuLG8scyxyO3JldHVybiByPWZ1bmN0aW9uKCl7bj0hMSxvJiYocy5hcHBseShlLG8pLG89ITEpfSxzPWZ1bmN0aW9uKCl7bj9vPWFyZ3VtZW50czoodC5hcHBseShlLGFyZ3VtZW50cyksc2V0VGltZW91dChyLGkpLG49ITApfX1mdW5jdGlvbiBzKHQsaSxlKXt2YXIgbj1pWzFdLG89aVswXSxzPW4tbztyZXR1cm4gdD09PW4mJmU/dDooKHQtbyklcytzKSVzK299ZnVuY3Rpb24gcigpe3JldHVybiExfWZ1bmN0aW9uIGEodCxpKXt2YXIgZT1NYXRoLnBvdygxMCx2b2lkIDA9PT1pPzY6aSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1KHQpe3JldHVybiBoKHQpLnNwbGl0KC9ccysvKX1mdW5jdGlvbiBsKHQsaSl7dC5oYXNPd25Qcm9wZXJ0eSgib3B0aW9ucyIpfHwodC5vcHRpb25zPXQub3B0aW9ucz9paSh0Lm9wdGlvbnMpOnt9KTtmb3IodmFyIGUgaW4gaSl0Lm9wdGlvbnNbZV09aVtlXTtyZXR1cm4gdC5vcHRpb25zfWZ1bmN0aW9uIGModCxpLGUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZT9vLnRvVXBwZXJDYXNlKCk6bykrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0W29dKSk7cmV0dXJuKGkmJi0xIT09aS5pbmRleE9mKCI/Iik/IiYiOiI/Iikrbi5qb2luKCImIil9ZnVuY3Rpb24gXyh0LGkpe3JldHVybiB0LnJlcGxhY2UobmksZnVuY3Rpb24odCxlKXt2YXIgbj1pW2VdO2lmKHZvaWQgMD09PW4pdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgIit0KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmKG49bihpKSksbn0pfWZ1bmN0aW9uIGQodCxpKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdPT09aSlyZXR1cm4gZTtyZXR1cm4tMX1mdW5jdGlvbiBwKHQpe3JldHVybiB3aW5kb3dbIndlYmtpdCIrdF18fHdpbmRvd1sibW96Iit0XXx8d2luZG93WyJtcyIrdF19ZnVuY3Rpb24gbSh0KXt2YXIgaT0rbmV3IERhdGUsZT1NYXRoLm1heCgwLDE2LShpLXJpKSk7cmV0dXJuIHJpPWkrZSx3aW5kb3cuc2V0VGltZW91dCh0LGUpfWZ1bmN0aW9uIGYodCxpLG4pe2lmKCFufHxhaSE9PW0pcmV0dXJuIGFpLmNhbGwod2luZG93LGUodCxpKSk7dC5jYWxsKGkpfWZ1bmN0aW9uIGcodCl7dCYmaGkuY2FsbCh3aW5kb3csdCl9ZnVuY3Rpb24gdigpe31mdW5jdGlvbiB5KHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgTCYmTCYmTC5NaXhpbil7dD1vaSh0KT90Olt0XTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldPT09TC5NaXhpbi5FdmVudHMmJmNvbnNvbGUud2FybigiRGVwcmVjYXRlZCBpbmNsdWRlIG9mIEwuTWl4aW4uRXZlbnRzOiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMsIHBsZWFzZSBpbmhlcml0IGZyb20gTC5FdmVudGVkIGluc3RlYWQuIiwobmV3IEVycm9yKS5zdGFjayl9fWZ1bmN0aW9uIHgodCxpLGUpe3RoaXMueD1lP01hdGgucm91bmQodCk6dCx0aGlzLnk9ZT9NYXRoLnJvdW5kKGkpOml9ZnVuY3Rpb24gdyh0LGksZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4P3Q6b2kodCk/bmV3IHgodFswXSx0WzFdKTp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmIngiaW4gdCYmInkiaW4gdD9uZXcgeCh0LngsdC55KTpuZXcgeCh0LGksZSl9ZnVuY3Rpb24gUCh0LGkpe2lmKHQpZm9yKHZhciBlPWk/W3QsaV06dCxuPTAsbz1lLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGVbbl0pfWZ1bmN0aW9uIGIodCxpKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFA/dDpuZXcgUCh0LGkpfWZ1bmN0aW9uIFQodCxpKXtpZih0KWZvcih2YXIgZT1pP1t0LGldOnQsbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0aGlzLmV4dGVuZChlW25dKX1mdW5jdGlvbiB6KHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUP3Q6bmV3IFQodCxpKX1mdW5jdGlvbiBNKHQsaSxlKXtpZihpc05hTih0KXx8aXNOYU4oaSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitpKyIpIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2ksdm9pZCAwIT09ZSYmKHRoaXMuYWx0PStlKX1mdW5jdGlvbiBDKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIE0/dDpvaSh0KSYmIm9iamVjdCIhPXR5cGVvZiB0WzBdPzM9PT10Lmxlbmd0aD9uZXcgTSh0WzBdLHRbMV0sdFsyXSk6Mj09PXQubGVuZ3RoP25ldyBNKHRbMF0sdFsxXSk6bnVsbDp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmImxhdCJpbiB0P25ldyBNKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbix0LmFsdCk6dm9pZCAwPT09aT9udWxsOm5ldyBNKHQsaSxlKX1mdW5jdGlvbiBTKHQsaSxlLG4pe2lmKG9pKHQpKXJldHVybiB0aGlzLl9hPXRbMF0sdGhpcy5fYj10WzFdLHRoaXMuX2M9dFsyXSx2b2lkKHRoaXMuX2Q9dFszXSk7dGhpcy5fYT10LHRoaXMuX2I9aSx0aGlzLl9jPWUsdGhpcy5fZD1ufWZ1bmN0aW9uIFoodCxpLGUsbil7cmV0dXJuIG5ldyBTKHQsaSxlLG4pfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpfWZ1bmN0aW9uIGsodCxpKXt2YXIgZSxuLG8scyxyLGEsaD0iIjtmb3IoZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyl7Zm9yKG49MCxzPShyPXRbZV0pLmxlbmd0aDtuPHM7bisrKWE9cltuXSxoKz0obj8iTCI6Ik0iKSthLngrIiAiK2EueTtoKz1pP0ppPyJ6IjoieCI6IiJ9cmV0dXJuIGh8fCJNMCAwIn1mdW5jdGlvbiBCKHQpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MH1mdW5jdGlvbiBBKHQsaSxlLG4pe3JldHVybiJ0b3VjaHN0YXJ0Ij09PWk/Tyh0LGUsbik6InRvdWNobW92ZSI9PT1pP1codCxlLG4pOiJ0b3VjaGVuZCI9PT1pJiZIKHQsZSxuKSx0aGlzfWZ1bmN0aW9uIEkodCxpLGUpe3ZhciBuPXRbIl9sZWFmbGV0XyIraStlXTtyZXR1cm4idG91Y2hzdGFydCI9PT1pP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0ZSxuLCExKToidG91Y2htb3ZlIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKGllLG4sITEpOiJ0b3VjaGVuZCI9PT1pJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKGVlLG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuZSxuLCExKSksdGhpc31mdW5jdGlvbiBPKHQsaSxuKXt2YXIgbz1lKGZ1bmN0aW9uKHQpe2lmKCJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSl7aWYoIShvZS5pbmRleE9mKHQudGFyZ2V0LnRhZ05hbWUpPDApKXJldHVybjtQdCh0KX1qKHQsaSl9KTt0WyJfbGVhZmxldF90b3VjaHN0YXJ0IituXT1vLHQuYWRkRXZlbnRMaXN0ZW5lcih0ZSxvLCExKSxyZXx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRlLFIsITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGllLE4sITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGVlLEQsITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKG5lLEQsITApLHJlPSEwKX1mdW5jdGlvbiBSKHQpe3NlW3QucG9pbnRlcklkXT10LGFlKyt9ZnVuY3Rpb24gTih0KXtzZVt0LnBvaW50ZXJJZF0mJihzZVt0LnBvaW50ZXJJZF09dCl9ZnVuY3Rpb24gRCh0KXtkZWxldGUgc2VbdC5wb2ludGVySWRdLGFlLS19ZnVuY3Rpb24gaih0LGkpe3QudG91Y2hlcz1bXTtmb3IodmFyIGUgaW4gc2UpdC50b3VjaGVzLnB1c2goc2VbZV0pO3QuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9ZnVuY3Rpb24gVyh0LGksZSl7dmFyIG49ZnVuY3Rpb24odCl7KHQucG9pbnRlclR5cGUhPT10Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiYibW91c2UiIT09dC5wb2ludGVyVHlwZXx8MCE9PXQuYnV0dG9ucykmJmoodCxpKX07dFsiX2xlYWZsZXRfdG91Y2htb3ZlIitlXT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihpZSxuLCExKX1mdW5jdGlvbiBIKHQsaSxlKXt2YXIgbj1mdW5jdGlvbih0KXtqKHQsaSl9O3RbIl9sZWFmbGV0X3RvdWNoZW5kIitlXT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihlZSxuLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIobmUsbiwhMSl9ZnVuY3Rpb24gRih0LGksZSl7ZnVuY3Rpb24gbih0KXt2YXIgaTtpZihWaSl7aWYoIWJpfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47aT1hZX1lbHNlIGk9dC50b3VjaGVzLmxlbmd0aDtpZighKGk+MSkpe3ZhciBlPURhdGUubm93KCksbj1lLShzfHxlKTtyPXQudG91Y2hlcz90LnRvdWNoZXNbMF06dCxhPW4+MCYmbjw9aCxzPWV9fWZ1bmN0aW9uIG8odCl7aWYoYSYmIXIuY2FuY2VsQnViYmxlKXtpZihWaSl7aWYoIWJpfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47dmFyIGUsbixvPXt9O2ZvcihuIGluIHIpZT1yW25dLG9bbl09ZSYmZS5iaW5kP2UuYmluZChyKTplO3I9b31yLnR5cGU9ImRibGNsaWNrIixpKHIpLHM9bnVsbH19dmFyIHMscixhPSExLGg9MjUwO3JldHVybiB0W2xlK2hlK2VdPW4sdFtsZSt1ZStlXT1vLHRbbGUrImRibGNsaWNrIitlXT1pLHQuYWRkRXZlbnRMaXN0ZW5lcihoZSxuLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIodWUsbywhMSksdC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsaSwhMSksdGhpc31mdW5jdGlvbiBVKHQsaSl7dmFyIGU9dFtsZStoZStpXSxuPXRbbGUrdWUraV0sbz10W2xlKyJkYmxjbGljayIraV07cmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoZSxlLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIodWUsbiwhMSksYml8fHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLG8sITEpLHRoaXN9ZnVuY3Rpb24gVih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk6dH1mdW5jdGlvbiBxKHQsaSl7dmFyIGU9dC5zdHlsZVtpXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2ldO2lmKCghZXx8ImF1dG8iPT09ZSkmJmRvY3VtZW50LmRlZmF1bHRWaWV3KXt2YXIgbj1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk7ZT1uP25baV06bnVsbH1yZXR1cm4iYXV0byI9PT1lP251bGw6ZX1mdW5jdGlvbiBHKHQsaSxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBuLmNsYXNzTmFtZT1pfHwiIixlJiZlLmFwcGVuZENoaWxkKG4pLG59ZnVuY3Rpb24gSyh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBZKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWCh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5sYXN0Q2hpbGQhPT10JiZpLmFwcGVuZENoaWxkKHQpfWZ1bmN0aW9uIEoodCl7dmFyIGk9dC5wYXJlbnROb2RlO2kmJmkuZmlyc3RDaGlsZCE9PXQmJmkuaW5zZXJ0QmVmb3JlKHQsaS5maXJzdENoaWxkKX1mdW5jdGlvbiAkKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpcmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGkpO3ZhciBlPWV0KHQpO3JldHVybiBlLmxlbmd0aD4wJiZuZXcgUmVnRXhwKCIoXnxcXHMpIitpKyIoXFxzfCQpIikudGVzdChlKX1mdW5jdGlvbiBRKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpZm9yKHZhciBlPXUoaSksbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0LmNsYXNzTGlzdC5hZGQoZVtuXSk7ZWxzZSBpZighJCh0LGkpKXt2YXIgcz1ldCh0KTtpdCh0LChzP3MrIiAiOiIiKStpKX19ZnVuY3Rpb24gdHQodCxpKXt2b2lkIDAhPT10LmNsYXNzTGlzdD90LmNsYXNzTGlzdC5yZW1vdmUoaSk6aXQodCxoKCgiICIrZXQodCkrIiAiKS5yZXBsYWNlKCIgIitpKyIgIiwiICIpKSl9ZnVuY3Rpb24gaXQodCxpKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWk6dC5jbGFzc05hbWUuYmFzZVZhbD1pfWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0LmNvcnJlc3BvbmRpbmdFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdFbGVtZW50KSx2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9ZnVuY3Rpb24gbnQodCxpKXsib3BhY2l0eSJpbiB0LnN0eWxlP3Quc3R5bGUub3BhY2l0eT1pOiJmaWx0ZXIiaW4gdC5zdHlsZSYmb3QodCxpKX1mdW5jdGlvbiBvdCh0LGkpe3ZhciBlPSExLG49IkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhIjt0cnl7ZT10LmZpbHRlcnMuaXRlbShuKX1jYXRjaCh0KXtpZigxPT09aSlyZXR1cm59aT1NYXRoLnJvdW5kKDEwMCppKSxlPyhlLkVuYWJsZWQ9MTAwIT09aSxlLk9wYWNpdHk9aSk6dC5zdHlsZS5maWx0ZXIrPSIgcHJvZ2lkOiIrbisiKG9wYWNpdHk9IitpKyIpIn1mdW5jdGlvbiBzdCh0KXtmb3IodmFyIGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gaSlyZXR1cm4gdFtlXTtyZXR1cm4hMX1mdW5jdGlvbiBydCh0LGksZSl7dmFyIG49aXx8bmV3IHgoMCwwKTt0LnN0eWxlW2NlXT0oUmk/InRyYW5zbGF0ZSgiK24ueCsicHgsIituLnkrInB4KSI6InRyYW5zbGF0ZTNkKCIrbi54KyJweCwiK24ueSsicHgsMCkiKSsoZT8iIHNjYWxlKCIrZSsiKSI6IiIpfWZ1bmN0aW9uIGF0KHQsaSl7dC5fbGVhZmxldF9wb3M9aSxqaT9ydCh0LGkpOih0LnN0eWxlLmxlZnQ9aS54KyJweCIsdC5zdHlsZS50b3A9aS55KyJweCIpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0Ll9sZWFmbGV0X3Bvc3x8bmV3IHgoMCwwKX1mdW5jdGlvbiB1dCgpe210KHdpbmRvdywiZHJhZ3N0YXJ0IixQdCl9ZnVuY3Rpb24gbHQoKXtmdCh3aW5kb3csImRyYWdzdGFydCIsUHQpfWZ1bmN0aW9uIGN0KHQpe2Zvcig7LTE9PT10LnRhYkluZGV4Oyl0PXQucGFyZW50Tm9kZTt0LnN0eWxlJiYoX3QoKSxtZT10LGZlPXQuc3R5bGUub3V0bGluZSx0LnN0eWxlLm91dGxpbmU9Im5vbmUiLG10KHdpbmRvdywia2V5ZG93biIsX3QpKX1mdW5jdGlvbiBfdCgpe21lJiYobWUuc3R5bGUub3V0bGluZT1mZSxtZT12b2lkIDAsZmU9dm9pZCAwLGZ0KHdpbmRvdywia2V5ZG93biIsX3QpKX1mdW5jdGlvbiBkdCh0KXtkb3t0PXQucGFyZW50Tm9kZX13aGlsZSghKHQub2Zmc2V0V2lkdGgmJnQub2Zmc2V0SGVpZ2h0fHx0PT09ZG9jdW1lbnQuYm9keSkpO3JldHVybiB0fWZ1bmN0aW9uIHB0KHQpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3g6aS53aWR0aC90Lm9mZnNldFdpZHRofHwxLHk6aS5oZWlnaHQvdC5vZmZzZXRIZWlnaHR8fDEsYm91bmRpbmdDbGllbnRSZWN0Oml9fWZ1bmN0aW9uIG10KHQsaSxlLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSlndCh0LG8saVtvXSxlKTtlbHNlIGZvcih2YXIgcz0wLHI9KGk9dShpKSkubGVuZ3RoO3M8cjtzKyspZ3QodCxpW3NdLGUsbik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZnQodCxpLGUsbil7aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXZ0KHQsbyxpW29dLGUpO2Vsc2UgaWYoaSlmb3IodmFyIHM9MCxyPShpPXUoaSkpLmxlbmd0aDtzPHI7cysrKXZ0KHQsaVtzXSxlLG4pO2Vsc2V7Zm9yKHZhciBhIGluIHRbeWVdKXZ0KHQsYSx0W3llXVthXSk7ZGVsZXRlIHRbeWVdfXJldHVybiB0aGlzfWZ1bmN0aW9uIGd0KHQsaSxlLG8pe3ZhciBzPWkrbihlKSsobz8iXyIrbihvKToiIik7aWYodFt5ZV0mJnRbeWVdW3NdKXJldHVybiB0aGlzO3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBlLmNhbGwob3x8dCxpfHx3aW5kb3cuZXZlbnQpfSxhPXI7VmkmJjA9PT1pLmluZGV4T2YoInRvdWNoIik/QSh0LGkscixzKTohcWl8fCJkYmxjbGljayIhPT1pfHwhRnx8VmkmJkVpPyJhZGRFdmVudExpc3RlbmVyImluIHQ/Im1vdXNld2hlZWwiPT09aT90LmFkZEV2ZW50TGlzdGVuZXIoIm9ud2hlZWwiaW4gdD8id2hlZWwiOiJtb3VzZXdoZWVsIixyLCExKToibW91c2VlbnRlciI9PT1pfHwibW91c2VsZWF2ZSI9PT1pPyhyPWZ1bmN0aW9uKGkpe2k9aXx8d2luZG93LmV2ZW50LEN0KHQsaSkmJmEoaSl9LHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1pPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsciwhMSkpOigiY2xpY2siPT09aSYmemkmJihyPWZ1bmN0aW9uKHQpe1N0KHQsYSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSk6ImF0dGFjaEV2ZW50ImluIHQmJnQuYXR0YWNoRXZlbnQoIm9uIitpLHIpOkYodCxyLHMpLHRbeWVdPXRbeWVdfHx7fSx0W3llXVtzXT1yfWZ1bmN0aW9uIHZ0KHQsaSxlLG8pe3ZhciBzPWkrbihlKSsobz8iXyIrbihvKToiIikscj10W3llXSYmdFt5ZV1bc107aWYoIXIpcmV0dXJuIHRoaXM7VmkmJjA9PT1pLmluZGV4T2YoInRvdWNoIik/SSh0LGkscyk6IXFpfHwiZGJsY2xpY2siIT09aXx8IVV8fFZpJiZFaT8icmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKCJvbndoZWVsImluIHQ/IndoZWVsIjoibW91c2V3aGVlbCIsciwhMSk6dC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIj09PWk/Im1vdXNlb3ZlciI6Im1vdXNlbGVhdmUiPT09aT8ibW91c2VvdXQiOmksciwhMSk6ImRldGFjaEV2ZW50ImluIHQmJnQuZGV0YWNoRXZlbnQoIm9uIitpLHIpOlUodCxzKSx0W3llXVtzXT1udWxsfWZ1bmN0aW9uIHl0KHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQub3JpZ2luYWxFdmVudD90Lm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQ9ITA6dC5jYW5jZWxCdWJibGU9ITAsTXQodCksdGhpc31mdW5jdGlvbiB4dCh0KXtyZXR1cm4gZ3QodCwibW91c2V3aGVlbCIseXQpLHRoaXN9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIG10KHQsIm1vdXNlZG93biB0b3VjaHN0YXJ0IGRibGNsaWNrIix5dCksZ3QodCwiY2xpY2siLHp0KSx0aGlzfWZ1bmN0aW9uIFB0KHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gTHQodCl7cmV0dXJuIFB0KHQpLHl0KHQpLHRoaXN9ZnVuY3Rpb24gYnQodCxpKXtpZighaSlyZXR1cm4gbmV3IHgodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGU9cHQoaSksbj1lLmJvdW5kaW5nQ2xpZW50UmVjdDtyZXR1cm4gbmV3IHgoKHQuY2xpZW50WC1uLmxlZnQpL2UueC1pLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvZS55LWkuY2xpZW50VG9wKX1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gYmk/dC53aGVlbERlbHRhWS8yOnQuZGVsdGFZJiYwPT09dC5kZWx0YU1vZGU/LXQuZGVsdGFZL3hlOnQuZGVsdGFZJiYxPT09dC5kZWx0YU1vZGU/MjAqLXQuZGVsdGFZOnQuZGVsdGFZJiYyPT09dC5kZWx0YU1vZGU/NjAqLXQuZGVsdGFZOnQuZGVsdGFYfHx0LmRlbHRhWj8wOnQud2hlZWxEZWx0YT8odC53aGVlbERlbHRhWXx8dC53aGVlbERlbHRhKS8yOnQuZGV0YWlsJiZNYXRoLmFicyh0LmRldGFpbCk8MzI3NjU/MjAqLXQuZGV0YWlsOnQuZGV0YWlsP3QuZGV0YWlsLy0zMjc2NSo2MDowfWZ1bmN0aW9uIHp0KHQpe3dlW3QudHlwZV09ITB9ZnVuY3Rpb24gTXQodCl7dmFyIGk9d2VbdC50eXBlXTtyZXR1cm4gd2VbdC50eXBlXT0hMSxpfWZ1bmN0aW9uIEN0KHQsaSl7dmFyIGU9aS5yZWxhdGVkVGFyZ2V0O2lmKCFlKXJldHVybiEwO3RyeXtmb3IoO2UmJmUhPT10OyllPWUucGFyZW50Tm9kZX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4gZSE9PXR9ZnVuY3Rpb24gU3QodCxpKXt2YXIgZT10LnRpbWVTdGFtcHx8dC5vcmlnaW5hbEV2ZW50JiZ0Lm9yaWdpbmFsRXZlbnQudGltZVN0YW1wLG49Z2UmJmUtZ2U7biYmbj4xMDAmJm48NTAwfHx0LnRhcmdldC5fc2ltdWxhdGVkQ2xpY2smJiF0Ll9zaW11bGF0ZWQ/THQodCk6KGdlPWUsaSh0KSl9ZnVuY3Rpb24gWnQodCxpKXtpZighaXx8IXQubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dmFyIGU9aSppO3JldHVybiB0PUF0KHQsZSksdD1rdCh0LGUpfWZ1bmN0aW9uIEV0KHQsaSxlKXtyZXR1cm4gTWF0aC5zcXJ0KER0KHQsaSxlLCEwKSl9ZnVuY3Rpb24ga3QodCxpKXt2YXIgZT10Lmxlbmd0aCxuPW5ldyh0eXBlb2YgVWludDhBcnJheSE9dm9pZCAwKyIiP1VpbnQ4QXJyYXk6QXJyYXkpKGUpO25bMF09bltlLTFdPTEsQnQodCxuLGksMCxlLTEpO3ZhciBvLHM9W107Zm9yKG89MDtvPGU7bysrKW5bb10mJnMucHVzaCh0W29dKTtyZXR1cm4gc31mdW5jdGlvbiBCdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPTA7Zm9yKHI9bisxO3I8PW8tMTtyKyspKGE9RHQodFtyXSx0W25dLHRbb10sITApKT5oJiYocz1yLGg9YSk7aD5lJiYoaVtzXT0xLEJ0KHQsaSxlLG4scyksQnQodCxpLGUscyxvKSl9ZnVuY3Rpb24gQXQodCxpKXtmb3IodmFyIGU9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKU50KHRbbl0sdFtvXSk+aSYmKGUucHVzaCh0W25dKSxvPW4pO3JldHVybiBvPHMtMSYmZS5wdXNoKHRbcy0xXSksZX1mdW5jdGlvbiBJdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPW4/a2U6UnQodCxlKSx1PVJ0KGksZSk7Zm9yKGtlPXU7Oyl7aWYoIShofHUpKXJldHVyblt0LGldO2lmKGgmdSlyZXR1cm4hMTthPVJ0KHI9T3QodCxpLHM9aHx8dSxlLG8pLGUpLHM9PT1oPyh0PXIsaD1hKTooaT1yLHU9YSl9fWZ1bmN0aW9uIE90KHQsaSxlLG4sbyl7dmFyIHMscixhPWkueC10LngsaD1pLnktdC55LHU9bi5taW4sbD1uLm1heDtyZXR1cm4gOCZlPyhzPXQueCthKihsLnktdC55KS9oLHI9bC55KTo0JmU/KHM9dC54K2EqKHUueS10LnkpL2gscj11LnkpOjImZT8ocz1sLngscj10LnkraCoobC54LXQueCkvYSk6MSZlJiYocz11Lngscj10LnkraCoodS54LXQueCkvYSksbmV3IHgocyxyLG8pfWZ1bmN0aW9uIFJ0KHQsaSl7dmFyIGU9MDtyZXR1cm4gdC54PGkubWluLng/ZXw9MTp0Lng+aS5tYXgueCYmKGV8PTIpLHQueTxpLm1pbi55P2V8PTQ6dC55PmkubWF4LnkmJihlfD04KSxlfWZ1bmN0aW9uIE50KHQsaSl7dmFyIGU9aS54LXQueCxuPWkueS10Lnk7cmV0dXJuIGUqZStuKm59ZnVuY3Rpb24gRHQodCxpLGUsbil7dmFyIG8scz1pLngscj1pLnksYT1lLngtcyxoPWUueS1yLHU9YSphK2gqaDtyZXR1cm4gdT4wJiYoKG89KCh0LngtcykqYSsodC55LXIpKmgpL3UpPjE/KHM9ZS54LHI9ZS55KTpvPjAmJihzKz1hKm8scis9aCpvKSksYT10LngtcyxoPXQueS1yLG4/YSphK2gqaDpuZXcgeChzLHIpfWZ1bmN0aW9uIGp0KHQpe3JldHVybiFvaSh0WzBdKXx8Im9iamVjdCIhPXR5cGVvZiB0WzBdWzBdJiZ2b2lkIDAhPT10WzBdWzBdfWZ1bmN0aW9uIFd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIkRlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuIiksanQodCl9ZnVuY3Rpb24gSHQodCxpLGUpe3ZhciBuLG8scyxyLGEsaCx1LGwsYyxfPVsxLDQsMiw4XTtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKyl0W29dLl9jb2RlPVJ0KHRbb10saSk7Zm9yKHI9MDtyPDQ7cisrKXtmb3IobD1fW3JdLG49W10sbz0wLHM9KHU9dC5sZW5ndGgpLTE7bzx1O3M9bysrKWE9dFtvXSxoPXRbc10sYS5fY29kZSZsP2guX2NvZGUmbHx8KChjPU90KGgsYSxsLGksZSkpLl9jb2RlPVJ0KGMsaSksbi5wdXNoKGMpKTooaC5fY29kZSZsJiYoKGM9T3QoaCxhLGwsaSxlKSkuX2NvZGU9UnQoYyxpKSxuLnB1c2goYykpLG4ucHVzaChhKSk7dD1ufXJldHVybiB0fWZ1bmN0aW9uIEZ0KHQsaSl7dmFyIGUsbixvLHMscj0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGE9cj9yLmNvb3JkaW5hdGVzOm51bGwsaD1bXSx1PWkmJmkucG9pbnRUb0xheWVyLGw9aSYmaS5jb29yZHNUb0xhdExuZ3x8VXQ7aWYoIWEmJiFyKXJldHVybiBudWxsO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBlPWwoYSksdT91KHQsZSk6bmV3ICRlKGUpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKG89MCxzPWEubGVuZ3RoO288cztvKyspZT1sKGFbb10pLGgucHVzaCh1P3UodCxlKTpuZXcgJGUoZSkpO3JldHVybiBuZXcgS2UoaCk7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIG49VnQoYSwiTGluZVN0cmluZyI9PT1yLnR5cGU/MDoxLGwpLG5ldyBubihuLGkpO2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBuPVZ0KGEsIlBvbHlnb24iPT09ci50eXBlPzE6MixsKSxuZXcgb24obixpKTtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG89MCxzPXIuZ2VvbWV0cmllcy5sZW5ndGg7bzxzO28rKyl7dmFyIGM9RnQoe2dlb21ldHJ5OnIuZ2VvbWV0cmllc1tvXSx0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnQucHJvcGVydGllc30saSk7YyYmaC5wdXNoKGMpfXJldHVybiBuZXcgS2UoaCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIil9fWZ1bmN0aW9uIFV0KHQpe3JldHVybiBuZXcgTSh0WzFdLHRbMF0sdFsyXSl9ZnVuY3Rpb24gVnQodCxpLGUpe2Zvcih2YXIgbixvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspbj1pP1Z0KHRbc10saS0xLGUpOihlfHxVdCkodFtzXSksby5wdXNoKG4pO3JldHVybiBvfWZ1bmN0aW9uIHF0KHQsaSl7cmV0dXJuIGk9Im51bWJlciI9PXR5cGVvZiBpP2k6Nix2b2lkIDAhPT10LmFsdD9bYSh0LmxuZyxpKSxhKHQubGF0LGkpLGEodC5hbHQsaSldOlthKHQubG5nLGkpLGEodC5sYXQsaSldfWZ1bmN0aW9uIEd0KHQsaSxlLG4pe2Zvcih2YXIgbz1bXSxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW8ucHVzaChpP0d0KHRbc10saS0xLGUsbik6cXQodFtzXSxuKSk7cmV0dXJuIWkmJmUmJm8ucHVzaChvWzBdKSxvfWZ1bmN0aW9uIEt0KHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9pKHt9LHQuZmVhdHVyZSx7Z2VvbWV0cnk6ZX0pOll0KGUpfWZ1bmN0aW9uIFl0KHQpe3JldHVybiJGZWF0dXJlIj09PXQudHlwZXx8IkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZT90Ont0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnt9LGdlb21ldHJ5OnR9fWZ1bmN0aW9uIFh0KHQsaSl7cmV0dXJuIG5ldyBzbih0LGkpfWZ1bmN0aW9uIEp0KHQsaSl7cmV0dXJuIG5ldyBtbih0LGkpfWZ1bmN0aW9uICR0KHQpe3JldHVybiBYaT9uZXcgdm4odCk6bnVsbH1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gSml8fCRpP25ldyBQbih0KTpudWxsfXZhciB0aT1PYmplY3QuZnJlZXplO09iamVjdC5mcmVlemU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBpaT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiB0LnByb3RvdHlwZT1pLG5ldyB0fX0oKSxlaT0wLG5pPS9ceyAqKFtcd18tXSspICpcfS9nLG9pPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LHNpPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9IixyaT0wLGFpPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAoIlJlcXVlc3RBbmltYXRpb25GcmFtZSIpfHxtLGhpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8cCgiQ2FuY2VsQW5pbWF0aW9uRnJhbWUiKXx8cCgiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGZ1bmN0aW9uKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9LHVpPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtmcmVlemU6dGksZXh0ZW5kOmksY3JlYXRlOmlpLGJpbmQ6ZSxsYXN0SWQ6ZWksc3RhbXA6bix0aHJvdHRsZTpvLHdyYXBOdW06cyxmYWxzZUZuOnIsZm9ybWF0TnVtOmEsdHJpbTpoLHNwbGl0V29yZHM6dSxzZXRPcHRpb25zOmwsZ2V0UGFyYW1TdHJpbmc6Yyx0ZW1wbGF0ZTpfLGlzQXJyYXk6b2ksaW5kZXhPZjpkLGVtcHR5SW1hZ2VVcmw6c2kscmVxdWVzdEZuOmFpLGNhbmNlbEZuOmhpLHJlcXVlc3RBbmltRnJhbWU6ZixjYW5jZWxBbmltRnJhbWU6Z30pO3YuZXh0ZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXplJiZ0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY2FsbEluaXRIb29rcygpfSxuPWUuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG89aWkobik7by5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlPW87Zm9yKHZhciBzIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShzKSYmInByb3RvdHlwZSIhPT1zJiYiX19zdXBlcl9fIiE9PXMmJihlW3NdPXRoaXNbc10pO3JldHVybiB0LnN0YXRpY3MmJihpKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoeSh0LmluY2x1ZGVzKSxpLmFwcGx5KG51bGwsW29dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG8ub3B0aW9ucyYmKHQub3B0aW9ucz1pKGlpKG8ub3B0aW9ucyksdC5vcHRpb25zKSksaShvLHQpLG8uX2luaXRIb29rcz1bXSxvLmNhbGxJbml0SG9va3M9ZnVuY3Rpb24oKXtpZighdGhpcy5faW5pdEhvb2tzQ2FsbGVkKXtuLmNhbGxJbml0SG9va3MmJm4uY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxpPW8uX2luaXRIb29rcy5sZW5ndGg7dDxpO3QrKylvLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LHYuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZSx0KSx0aGlzfSx2Lm1lcmdlT3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZS5vcHRpb25zLHQpLHRoaXN9LHYuYWRkSW5pdEhvb2s9ZnVuY3Rpb24odCl7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3RoaXNbdF0uYXBwbHkodGhpcyxpKX07cmV0dXJuIHRoaXMucHJvdG90eXBlLl9pbml0SG9va3M9dGhpcy5wcm90b3R5cGUuX2luaXRIb29rc3x8W10sdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGUpLHRoaXN9O3ZhciBsaT17b246ZnVuY3Rpb24odCxpLGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vbihuLHRbbl0saSk7ZWxzZSBmb3IodmFyIG89MCxzPSh0PXUodCkpLmxlbmd0aDtvPHM7bysrKXRoaXMuX29uKHRbb10saSxlKTtyZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKHQsaSxlKXtpZih0KWlmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGkpO2Vsc2UgZm9yKHZhciBvPTAscz0odD11KHQpKS5sZW5ndGg7bzxzO28rKyl0aGlzLl9vZmYodFtvXSxpLGUpO2Vsc2UgZGVsZXRlIHRoaXMuX2V2ZW50cztyZXR1cm4gdGhpc30sX29uOmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fTt2YXIgbj10aGlzLl9ldmVudHNbdF07bnx8KG49W10sdGhpcy5fZXZlbnRzW3RdPW4pLGU9PT10aGlzJiYoZT12b2lkIDApO2Zvcih2YXIgbz17Zm46aSxjdHg6ZX0scz1uLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspaWYoc1tyXS5mbj09PWkmJnNbcl0uY3R4PT09ZSlyZXR1cm47cy5wdXNoKG8pfSxfb2ZmOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbixvLHM7aWYodGhpcy5fZXZlbnRzJiYobj10aGlzLl9ldmVudHNbdF0pKWlmKGkpe2lmKGU9PT10aGlzJiYoZT12b2lkIDApLG4pZm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBhPW5bb107aWYoYS5jdHg9PT1lJiZhLmZuPT09aSlyZXR1cm4gYS5mbj1yLHRoaXMuX2ZpcmluZ0NvdW50JiYodGhpcy5fZXZlbnRzW3RdPW49bi5zbGljZSgpKSx2b2lkIG4uc3BsaWNlKG8sMSl9fWVsc2V7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspbltvXS5mbj1yO2RlbGV0ZSB0aGlzLl9ldmVudHNbdF19fSxmaXJlOmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5saXN0ZW5zKHQsbikpcmV0dXJuIHRoaXM7dmFyIG89aSh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXMsc291cmNlVGFyZ2V0OmUmJmUuc291cmNlVGFyZ2V0fHx0aGlzfSk7aWYodGhpcy5fZXZlbnRzKXt2YXIgcz10aGlzLl9ldmVudHNbdF07aWYocyl7dGhpcy5fZmlyaW5nQ291bnQ9dGhpcy5fZmlyaW5nQ291bnQrMXx8MTtmb3IodmFyIHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe3ZhciBoPXNbcl07aC5mbi5jYWxsKGguY3R4fHx0aGlzLG8pfXRoaXMuX2ZpcmluZ0NvdW50LS19fXJldHVybiBuJiZ0aGlzLl9wcm9wYWdhdGVFdmVudChvKSx0aGlzfSxsaXN0ZW5zOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF07aWYoZSYmZS5sZW5ndGgpcmV0dXJuITA7aWYoaSlmb3IodmFyIG4gaW4gdGhpcy5fZXZlbnRQYXJlbnRzKWlmKHRoaXMuX2V2ZW50UGFyZW50c1tuXS5saXN0ZW5zKHQsaSkpcmV0dXJuITA7cmV0dXJuITF9LG9uY2U6ZnVuY3Rpb24odCxpLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBvIGluIHQpdGhpcy5vbmNlKG8sdFtvXSxpKTtyZXR1cm4gdGhpc312YXIgcz1lKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxpLG4pLm9mZih0LHMsbil9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsaSxuKS5vbih0LHMsbil9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbbih0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW24odCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tlXS5maXJlKHQudHlwZSxpKHtsYXllcjp0LnRhcmdldCxwcm9wYWdhdGVkRnJvbTp0LnRhcmdldH0sdCksITApfX07bGkuYWRkRXZlbnRMaXN0ZW5lcj1saS5vbixsaS5yZW1vdmVFdmVudExpc3RlbmVyPWxpLmNsZWFyQWxsRXZlbnRMaXN0ZW5lcnM9bGkub2ZmLGxpLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyPWxpLm9uY2UsbGkuZmlyZUV2ZW50PWxpLmZpcmUsbGkuaGFzRXZlbnRMaXN0ZW5lcnM9bGkubGlzdGVuczt2YXIgY2k9di5leHRlbmQobGkpLF9pPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9O3gucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh3KHQpKX0sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3VidHJhY3Qodyh0KSl9LF9zdWJ0cmFjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2aWRlQnkodCl9LF9kaXZpZGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxtdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRpcGx5QnkodCl9LF9tdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LHNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KHRoaXMueCp0LngsdGhpcy55KnQueSl9LHVuc2NhbGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodGhpcy54L3QueCx0aGlzLnkvdC55KX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9LGZsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKX0sX2Zsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpfSxfY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9LHRydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKX0sX3RydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1faSh0aGlzLngpLHRoaXMueT1faSh0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dmFyIGk9KHQ9dyh0KSkueC10aGlzLngsZT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoaSppK2UqZSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4odD13KHQpKS54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0PXcodCksTWF0aC5hYnModC54KTw9TWF0aC5hYnModGhpcy54KSYmTWF0aC5hYnModC55KTw9TWF0aC5hYnModGhpcy55KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUG9pbnQoIithKHRoaXMueCkrIiwgIithKHRoaXMueSkrIikifX0sUC5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD13KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRUb3BMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlufSxnZXRCb3R0b21SaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbil9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3ZhciBpLGU7cmV0dXJuKHQ9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgeD93KHQpOmIodCkpaW5zdGFuY2VvZiBQPyhpPXQubWluLGU9dC5tYXgpOmk9ZT10LGkueD49dGhpcy5taW4ueCYmZS54PD10aGlzLm1heC54JiZpLnk+PXRoaXMubWluLnkmJmUueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PWIodCk7dmFyIGk9dGhpcy5taW4sZT10aGlzLm1heCxuPXQubWluLG89dC5tYXgscz1vLng+PWkueCYmbi54PD1lLngscj1vLnk+PWkueSYmbi55PD1lLnk7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Yih0KTt2YXIgaT10aGlzLm1pbixlPXRoaXMubWF4LG49dC5taW4sbz10Lm1heCxzPW8ueD5pLngmJm4ueDxlLngscj1vLnk+aS55JiZuLnk8ZS55O3JldHVybiBzJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxULnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIE0paT10LGU9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFQpKXJldHVybiB0P3RoaXMuZXh0ZW5kKEModCl8fHoodCkpOnRoaXM7aWYoaT10Ll9zb3V0aFdlc3QsZT10Ll9ub3J0aEVhc3QsIWl8fCFlKXJldHVybiB0aGlzfXJldHVybiBufHxvPyhuLmxhdD1NYXRoLm1pbihpLmxhdCxuLmxhdCksbi5sbmc9TWF0aC5taW4oaS5sbmcsbi5sbmcpLG8ubGF0PU1hdGgubWF4KGUubGF0LG8ubGF0KSxvLmxuZz1NYXRoLm1heChlLmxuZyxvLmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IE0oaS5sYXQsaS5sbmcpLHRoaXMuX25vcnRoRWFzdD1uZXcgTShlLmxhdCxlLmxuZykpLHRoaXN9LHBhZDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj1NYXRoLmFicyhpLmxhdC1lLmxhdCkqdCxvPU1hdGguYWJzKGkubG5nLWUubG5nKSp0O3JldHVybiBuZXcgVChuZXcgTShpLmxhdC1uLGkubG5nLW8pLG5ldyBNKGUubGF0K24sZS5sbmcrbykpfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE0oKHRoaXMuX3NvdXRoV2VzdC5sYXQrdGhpcy5fbm9ydGhFYXN0LmxhdCkvMiwodGhpcy5fc291dGhXZXN0LmxuZyt0aGlzLl9ub3J0aEVhc3QubG5nKS8yKX0sZ2V0U291dGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdH0sZ2V0Tm9ydGhFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdH0sZ2V0Tm9ydGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCkpfSxnZXRXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sYXR9LGdldEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxuZ30sZ2V0Tm9ydGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxhdH0sY29udGFpbnM6ZnVuY3Rpb24odCl7dD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBNfHwibGF0ImluIHQ/Qyh0KTp6KHQpO3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7cmV0dXJuIHQgaW5zdGFuY2VvZiBUPyhpPXQuZ2V0U291dGhXZXN0KCksZT10LmdldE5vcnRoRWFzdCgpKTppPWU9dCxpLmxhdD49bi5sYXQmJmUubGF0PD1vLmxhdCYmaS5sbmc+PW4ubG5nJiZlLmxuZzw9by5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+PWkubGF0JiZuLmxhdDw9ZS5sYXQscj1vLmxuZz49aS5sbmcmJm4ubG5nPD1lLmxuZztyZXR1cm4gcyYmcn0sb3ZlcmxhcHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+aS5sYXQmJm4ubGF0PGUubGF0LHI9by5sbmc+aS5sbmcmJm4ubG5nPGUubG5nO3JldHVybiBzJiZyfSx0b0JCb3hTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5nZXRXZXN0KCksdGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0Tm9ydGgoKV0uam9pbigiLCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PXoodCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksaSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19LE0ucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PUModCksTWF0aC5tYXgoTWF0aC5hYnModGhpcy5sYXQtdC5sYXQpLE1hdGguYWJzKHRoaXMubG5nLXQubG5nKSk8PSh2b2lkIDA9PT1pPzFlLTk6aSkpfSx0b1N0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iTGF0TG5nKCIrYSh0aGlzLmxhdCx0KSsiLCAiK2EodGhpcy5sbmcsdCkrIikifSxkaXN0YW5jZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBwaS5kaXN0YW5jZSh0aGlzLEModCkpfSx3cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHBpLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPTE4MCp0LzQwMDc1MDE3LGU9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIHooW3RoaXMubGF0LWksdGhpcy5sbmctZV0sW3RoaXMubGF0K2ksdGhpcy5sbmcrZV0pfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmxhdCx0aGlzLmxuZyx0aGlzLmFsdCl9fTt2YXIgZGk9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoaSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShlLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5zY2FsZShpKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybiBudWxsO3ZhciBpPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsZT10aGlzLnNjYWxlKHQpO3JldHVybiBuZXcgUCh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1pbixlKSx0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1heCxlKSl9LGluZmluaXRlOiExLHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy53cmFwTG5nP3ModC5sbmcsdGhpcy53cmFwTG5nLCEwKTp0LmxuZztyZXR1cm4gbmV3IE0odGhpcy53cmFwTGF0P3ModC5sYXQsdGhpcy53cmFwTGF0LCEwKTp0LmxhdCxpLHQuYWx0KX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10LmdldENlbnRlcigpLGU9dGhpcy53cmFwTGF0TG5nKGkpLG49aS5sYXQtZS5sYXQsbz1pLmxuZy1lLmxuZztpZigwPT09biYmMD09PW8pcmV0dXJuIHQ7dmFyIHM9dC5nZXRTb3V0aFdlc3QoKSxyPXQuZ2V0Tm9ydGhFYXN0KCk7cmV0dXJuIG5ldyBUKG5ldyBNKHMubGF0LW4scy5sbmctbyksbmV3IE0oci5sYXQtbixyLmxuZy1vKSl9fSxwaT1pKHt9LGRpLHt3cmFwTG5nOlstMTgwLDE4MF0sUjo2MzcxZTMsZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1NYXRoLlBJLzE4MCxuPXQubGF0KmUsbz1pLmxhdCplLHM9TWF0aC5zaW4oKGkubGF0LXQubGF0KSplLzIpLHI9TWF0aC5zaW4oKGkubG5nLXQubG5nKSplLzIpLGE9cypzK01hdGguY29zKG4pKk1hdGguY29zKG8pKnIqcixoPTIqTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksTWF0aC5zcXJ0KDEtYSkpO3JldHVybiB0aGlzLlIqaH19KSxtaT17Ujo2Mzc4MTM3LE1BWF9MQVRJVFVERTo4NS4wNTExMjg3Nzk4LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLk1BWF9MQVRJVFVERSxuPU1hdGgubWF4KE1hdGgubWluKGUsdC5sYXQpLC1lKSxvPU1hdGguc2luKG4qaSk7cmV0dXJuIG5ldyB4KHRoaXMuUip0LmxuZyppLHRoaXMuUipNYXRoLmxvZygoMStvKS8oMS1vKSkvMil9LHVucHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT0xODAvTWF0aC5QSTtyZXR1cm4gbmV3IE0oKDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueS90aGlzLlIpKS1NYXRoLlBJLzIpKmksdC54KmkvdGhpcy5SKX0sYm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9NjM3ODEzNypNYXRoLlBJO3JldHVybiBuZXcgUChbLXQsLXRdLFt0LHRdKX0oKX07Uy5wcm90b3R5cGU9e3RyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl90cmFuc2Zvcm0odC5jbG9uZSgpLGkpfSxfdHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSx0Lng9aSoodGhpcy5fYSp0LngrdGhpcy5fYiksdC55PWkqKHRoaXMuX2MqdC55K3RoaXMuX2QpLHR9LHVudHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSxuZXcgeCgodC54L2ktdGhpcy5fYikvdGhpcy5fYSwodC55L2ktdGhpcy5fZCkvdGhpcy5fYyl9fTt2YXIgZmksZ2ksdmkseWk9aSh7fSxwaSx7Y29kZToiRVBTRzozODU3Iixwcm9qZWN0aW9uOm1pLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqbWkuUik7cmV0dXJuIFoodCwuNSwtdCwuNSl9KCl9KSx4aT1pKHt9LHlpLHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSx3aT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsUGk9IkFjdGl2ZVhPYmplY3QiaW4gd2luZG93LExpPVBpJiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixiaT0ibXNMYXVuY2hVcmkiaW4gbmF2aWdhdG9yJiYhKCJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQpLFRpPUIoIndlYmtpdCIpLHppPUIoImFuZHJvaWQiKSxNaT1CKCJhbmRyb2lkIDIiKXx8QigiYW5kcm9pZCAzIiksQ2k9cGFyc2VJbnQoL1dlYktpdFwvKFswLTldKyl8JC8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KVsxXSwxMCksU2k9emkmJkIoIkdvb2dsZSIpJiZDaTw1MzcmJiEoIkF1ZGlvTm9kZSJpbiB3aW5kb3cpLFppPSEhd2luZG93Lm9wZXJhLEVpPUIoImNocm9tZSIpLGtpPUIoImdlY2tvIikmJiFUaSYmIVppJiYhUGksQmk9IUVpJiZCKCJzYWZhcmkiKSxBaT1CKCJwaGFudG9tIiksSWk9Ik9UcmFuc2l0aW9uImluIHdpLE9pPTA9PT1uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiV2luIiksUmk9UGkmJiJ0cmFuc2l0aW9uImluIHdpLE5pPSJXZWJLaXRDU1NNYXRyaXgiaW4gd2luZG93JiYibTExImluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4JiYhTWksRGk9Ik1velBlcnNwZWN0aXZlImluIHdpLGppPSF3aW5kb3cuTF9ESVNBQkxFXzNEJiYoUml8fE5pfHxEaSkmJiFJaSYmIUFpLFdpPSJ1bmRlZmluZWQiIT10eXBlb2Ygb3JpZW50YXRpb258fEIoIm1vYmlsZSIpLEhpPVdpJiZUaSxGaT1XaSYmTmksVWk9IXdpbmRvdy5Qb2ludGVyRXZlbnQmJndpbmRvdy5NU1BvaW50ZXJFdmVudCxWaT0hKCF3aW5kb3cuUG9pbnRlckV2ZW50JiYhVWkpLHFpPSF3aW5kb3cuTF9OT19UT1VDSCYmKFZpfHwib250b3VjaHN0YXJ0ImluIHdpbmRvd3x8d2luZG93LkRvY3VtZW50VG91Y2gmJmRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpLEdpPVdpJiZaaSxLaT1XaSYma2ksWWk9KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHx3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkvd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSk+MSxYaT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQsSmk9ISghZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TfHwhRSgic3ZnIikuY3JlYXRlU1ZHUmVjdCksJGk9IUppJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPSIxIi8+Jzt2YXIgaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGkuc3R5bGUuYmVoYXZpb3I9InVybCgjZGVmYXVsdCNWTUwpIixpJiYib2JqZWN0Ij09dHlwZW9mIGkuYWRqfWNhdGNoKHQpe3JldHVybiExfX0oKSxRaT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7aWU6UGksaWVsdDk6TGksZWRnZTpiaSx3ZWJraXQ6VGksYW5kcm9pZDp6aSxhbmRyb2lkMjM6TWksYW5kcm9pZFN0b2NrOlNpLG9wZXJhOlppLGNocm9tZTpFaSxnZWNrbzpraSxzYWZhcmk6QmkscGhhbnRvbTpBaSxvcGVyYTEyOklpLHdpbjpPaSxpZTNkOlJpLHdlYmtpdDNkOk5pLGdlY2tvM2Q6RGksYW55M2Q6amksbW9iaWxlOldpLG1vYmlsZVdlYmtpdDpIaSxtb2JpbGVXZWJraXQzZDpGaSxtc1BvaW50ZXI6VWkscG9pbnRlcjpWaSx0b3VjaDpxaSxtb2JpbGVPcGVyYTpHaSxtb2JpbGVHZWNrbzpLaSxyZXRpbmE6WWksY2FudmFzOlhpLHN2ZzpKaSx2bWw6JGl9KSx0ZT1VaT8iTVNQb2ludGVyRG93biI6InBvaW50ZXJkb3duIixpZT1VaT8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixlZT1VaT8iTVNQb2ludGVyVXAiOiJwb2ludGVydXAiLG5lPVVpPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixvZT1bIklOUFVUIiwiU0VMRUNUIiwiT1BUSU9OIl0sc2U9e30scmU9ITEsYWU9MCxoZT1VaT8iTVNQb2ludGVyRG93biI6Vmk/InBvaW50ZXJkb3duIjoidG91Y2hzdGFydCIsdWU9VWk/Ik1TUG9pbnRlclVwIjpWaT8icG9pbnRlcnVwIjoidG91Y2hlbmQiLGxlPSJfbGVhZmxldF8iLGNlPXN0KFsidHJhbnNmb3JtIiwid2Via2l0VHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIl0pLF9lPXN0KFsid2Via2l0VHJhbnNpdGlvbiIsInRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJtc1RyYW5zaXRpb24iXSksZGU9IndlYmtpdFRyYW5zaXRpb24iPT09X2V8fCJPVHJhbnNpdGlvbiI9PT1fZT9fZSsiRW5kIjoidHJhbnNpdGlvbmVuZCI7aWYoIm9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQpZmk9ZnVuY3Rpb24oKXttdCh3aW5kb3csInNlbGVjdHN0YXJ0IixQdCl9LGdpPWZ1bmN0aW9uKCl7ZnQod2luZG93LCJzZWxlY3RzdGFydCIsUHQpfTtlbHNle3ZhciBwZT1zdChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO2ZpPWZ1bmN0aW9uKCl7aWYocGUpe3ZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTt2aT10W3BlXSx0W3BlXT0ibm9uZSJ9fSxnaT1mdW5jdGlvbigpe3BlJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW3BlXT12aSx2aT12b2lkIDApfX12YXIgbWUsZmUsZ2UsdmU9KE9iamVjdC5mcmVlemV8fE9iamVjdCkoe1RSQU5TRk9STTpjZSxUUkFOU0lUSU9OOl9lLFRSQU5TSVRJT05fRU5EOmRlLGdldDpWLGdldFN0eWxlOnEsY3JlYXRlOkcscmVtb3ZlOkssZW1wdHk6WSx0b0Zyb250OlgsdG9CYWNrOkosaGFzQ2xhc3M6JCxhZGRDbGFzczpRLHJlbW92ZUNsYXNzOnR0LHNldENsYXNzOml0LGdldENsYXNzOmV0LHNldE9wYWNpdHk6bnQsdGVzdFByb3A6c3Qsc2V0VHJhbnNmb3JtOnJ0LHNldFBvc2l0aW9uOmF0LGdldFBvc2l0aW9uOmh0LGRpc2FibGVUZXh0U2VsZWN0aW9uOmZpLGVuYWJsZVRleHRTZWxlY3Rpb246Z2ksZGlzYWJsZUltYWdlRHJhZzp1dCxlbmFibGVJbWFnZURyYWc6bHQscHJldmVudE91dGxpbmU6Y3QscmVzdG9yZU91dGxpbmU6X3QsZ2V0U2l6ZWRQYXJlbnROb2RlOmR0LGdldFNjYWxlOnB0fSkseWU9Il9sZWFmbGV0X2V2ZW50cyIseGU9T2kmJkVpPzIqd2luZG93LmRldmljZVBpeGVsUmF0aW86a2k/d2luZG93LmRldmljZVBpeGVsUmF0aW86MSx3ZT17fSxQZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7b246bXQsb2ZmOmZ0LHN0b3BQcm9wYWdhdGlvbjp5dCxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246eHQsZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246d3QscHJldmVudERlZmF1bHQ6UHQsc3RvcDpMdCxnZXRNb3VzZVBvc2l0aW9uOmJ0LGdldFdoZWVsRGVsdGE6VHQsZmFrZVN0b3A6enQsc2tpcHBlZDpNdCxpc0V4dGVybmFsVGFyZ2V0OkN0LGFkZExpc3RlbmVyOm10LHJlbW92ZUxpc3RlbmVyOmZ0fSksTGU9Y2kuZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxpLGUsbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWV8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9aHQodCksdGhpcy5fb2Zmc2V0PWkuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKCJzdGFydCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCEwKSx0aGlzLl9jb21wbGV0ZSgpKX0sX2FuaW1hdGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltSWQ9Zih0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24odCl7dmFyIGk9K25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSxlPTFlMyp0aGlzLl9kdXJhdGlvbjtpPGU/dGhpcy5fcnVuRnJhbWUodGhpcy5fZWFzZU91dChpL2UpLHQpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fc3RhcnRQb3MuYWRkKHRoaXMuX29mZnNldC5tdWx0aXBseUJ5KHQpKTtpJiZlLl9yb3VuZCgpLGF0KHRoaXMuX2VsLGUpLHRoaXMuZmlyZSgic3RlcCIpfSxfY29tcGxldGU6ZnVuY3Rpb24oKXtnKHRoaXMuX2FuaW1JZCksdGhpcy5faW5Qcm9ncmVzcz0hMSx0aGlzLmZpcmUoImVuZCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxiZT1jaS5leHRlbmQoe29wdGlvbnM6e2Nyczp5aSxjZW50ZXI6dm9pZCAwLHpvb206dm9pZCAwLG1pblpvb206dm9pZCAwLG1heFpvb206dm9pZCAwLGxheWVyczpbXSxtYXhCb3VuZHM6dm9pZCAwLHJlbmRlcmVyOnZvaWQgMCx6b29tQW5pbWF0aW9uOiEwLHpvb21BbmltYXRpb25UaHJlc2hvbGQ6NCxmYWRlQW5pbWF0aW9uOiEwLG1hcmtlclpvb21BbmltYXRpb246ITAsdHJhbnNmb3JtM0RMaW1pdDo4Mzg4NjA4LHpvb21TbmFwOjEsem9vbURlbHRhOjEsdHJhY2tSZXNpemU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtpPWwodGhpcyxpKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9sYXllcnM9e30sdGhpcy5fem9vbUJvdW5kTGF5ZXJzPXt9LHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2luaXRDb250YWluZXIodCksdGhpcy5faW5pdExheW91dCgpLHRoaXMuX29uUmVzaXplPWUodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGkubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhpLm1heEJvdW5kcyksdm9pZCAwIT09aS56b29tJiYodGhpcy5fem9vbT10aGlzLl9saW1pdFpvb20oaS56b29tKSksaS5jZW50ZXImJnZvaWQgMCE9PWkuem9vbSYmdGhpcy5zZXRWaWV3KEMoaS5jZW50ZXIpLGkuem9vbSx7cmVzZXQ6ITB9KSx0aGlzLmNhbGxJbml0SG9va3MoKSx0aGlzLl96b29tQW5pbWF0ZWQ9X2UmJmppJiYhR2kmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX3pvb21BbmltYXRlZCYmKHRoaXMuX2NyZWF0ZUFuaW1Qcm94eSgpLG10KHRoaXMuX3Byb3h5LGRlLHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCx0aGlzKSksdGhpcy5fYWRkTGF5ZXJzKHRoaXMub3B0aW9ucy5sYXllcnMpfSxzZXRWaWV3OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT12b2lkIDA9PT1lP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIoQyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLG49bnx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJiEwIT09biYmKHZvaWQgMCE9PW4uYW5pbWF0ZSYmKG4uem9vbT1pKHthbmltYXRlOm4uYW5pbWF0ZX0sbi56b29tKSxuLnBhbj1pKHthbmltYXRlOm4uYW5pbWF0ZSxkdXJhdGlvbjpuLmR1cmF0aW9ufSxuLnBhbikpLHRoaXMuX3pvb20hPT1lP3RoaXMuX3RyeUFuaW1hdGVkWm9vbSYmdGhpcy5fdHJ5QW5pbWF0ZWRab29tKHQsZSxuLnpvb20pOnRoaXMuX3RyeUFuaW1hdGVkUGFuKHQsbi5wYW4pKT8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcyk6KHRoaXMuX3Jlc2V0Vmlldyh0LGUpLHRoaXMpfSxzZXRab29tOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOml9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10fHwoamk/dGhpcy5vcHRpb25zLnpvb21EZWx0YToxKSx0aGlzLnNldFpvb20odGhpcy5fem9vbSt0LGkpfSx6b29tT3V0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dHx8KGppP3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxpKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxzPSh0IGluc3RhbmNlb2YgeD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSkuc3VidHJhY3QobykubXVsdGlwbHlCeSgxLTEvbikscj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoby5hZGQocykpO3JldHVybiB0aGlzLnNldFZpZXcocixpLHt6b29tOmV9KX0sX2dldEJvdW5kc0NlbnRlclpvb206ZnVuY3Rpb24odCxpKXtpPWl8fHt9LHQ9dC5nZXRCb3VuZHM/dC5nZXRCb3VuZHMoKTp6KHQpO3ZhciBlPXcoaS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSksbj13KGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGUuYWRkKG4pKTtpZigobz0ibnVtYmVyIj09dHlwZW9mIGkubWF4Wm9vbT9NYXRoLm1pbihpLm1heFpvb20sbyk6byk9PT0xLzApcmV0dXJue2NlbnRlcjp0LmdldENlbnRlcigpLHpvb206b307dmFyIHM9bi5zdWJ0cmFjdChlKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLG8pLGE9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksbyk7cmV0dXJue2NlbnRlcjp0aGlzLnVucHJvamVjdChyLmFkZChhKS5kaXZpZGVCeSgyKS5hZGQocyksbyksem9vbTpvfX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsaSl7aWYoISh0PXoodCkpLmlzVmFsaWQoKSl0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBhcmUgbm90IHZhbGlkLiIpO3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5zZXRWaWV3KGUuY2VudGVyLGUuem9vbSxpKX0sZml0V29ybGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZml0Qm91bmRzKFtbLTkwLC0xODBdLFs5MCwxODBdXSx0KX0scGFuVG86ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5zZXRWaWV3KHQsdGhpcy5fem9vbSx7cGFuOml9KX0scGFuQnk6ZnVuY3Rpb24odCxpKXtpZih0PXcodCkucm91bmQoKSxpPWl8fHt9LCF0LngmJiF0LnkpcmV0dXJuIHRoaXMuZmlyZSgibW92ZWVuZCIpO2lmKCEwIT09aS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpcmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgTGUsdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxpLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLCExIT09aS5hbmltYXRlKXtRKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtcGFuLWFuaW0iKTt2YXIgZT10aGlzLl9nZXRNYXBQYW5lUG9zKCkuc3VidHJhY3QodCkucm91bmQoKTt0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLGUsaS5kdXJhdGlvbnx8LjI1LGkuZWFzZUxpbmVhcml0eSl9ZWxzZSB0aGlzLl9yYXdQYW5CeSh0KSx0aGlzLmZpcmUoIm1vdmUiKS5maXJlKCJtb3ZlZW5kIik7cmV0dXJuIHRoaXN9LGZseVRvOmZ1bmN0aW9uKHQsaSxlKXtmdW5jdGlvbiBuKHQpe3ZhciBpPShnKmctbSptKyh0Py0xOjEpKngqeCp2KnYpLygyKih0P2c6bSkqeCp2KSxlPU1hdGguc3FydChpKmkrMSktaTtyZXR1cm4gZTwxZS05Py0xODpNYXRoLmxvZyhlKX1mdW5jdGlvbiBvKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHIodCl7cmV0dXJuIG8odCkvcyh0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBtKihzKHcpL3Modyt5KnQpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBtKihzKHcpKnIodyt5KnQpLW8odykpL3h9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsMS41KX1mdW5jdGlvbiBsKCl7dmFyIGU9KERhdGUubm93KCktUCkvYixuPXUoZSkqTDtlPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPWYobCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KGMuYWRkKF8uc3VidHJhY3QoYykubXVsdGlwbHlCeShoKG4pL3YpKSxwKSx0aGlzLmdldFNjYWxlWm9vbShtL2EobikscCkse2ZseVRvOiEwfSkpOnRoaXMuX21vdmUodCxpKS5fbW92ZUVuZCghMCl9aWYoITE9PT0oZT1lfHx7fSkuYW5pbWF0ZXx8IWppKXJldHVybiB0aGlzLnNldFZpZXcodCxpLGUpO3RoaXMuX3N0b3AoKTt2YXIgYz10aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSksXz10aGlzLnByb2plY3QodCksZD10aGlzLmdldFNpemUoKSxwPXRoaXMuX3pvb207dD1DKHQpLGk9dm9pZCAwPT09aT9wOmk7dmFyIG09TWF0aC5tYXgoZC54LGQueSksZz1tKnRoaXMuZ2V0Wm9vbVNjYWxlKHAsaSksdj1fLmRpc3RhbmNlVG8oYyl8fDEseT0xLjQyLHg9eSp5LHc9bigwKSxQPURhdGUubm93KCksTD0obigxKS13KS95LGI9ZS5kdXJhdGlvbj8xZTMqZS5kdXJhdGlvbjoxZTMqTCouODtyZXR1cm4gdGhpcy5fbW92ZVN0YXJ0KCEwLGUubm9Nb3ZlU3RhcnQpLGwuY2FsbCh0aGlzKSx0aGlzfSxmbHlUb0JvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5mbHlUbyhlLmNlbnRlcixlLnpvb20saSl9LHNldE1heEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4odD16KHQpKS5pc1ZhbGlkKCk/KHRoaXMub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMub2ZmKCJtb3ZlZW5kIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMub3B0aW9ucy5tYXhCb3VuZHM9dCx0aGlzLl9sb2FkZWQmJnRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcygpLHRoaXMub24oIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpOih0aGlzLm9wdGlvbnMubWF4Qm91bmRzPW51bGwsdGhpcy5vZmYoIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5taW5ab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbT10LHRoaXMuX2xvYWRlZCYmaSE9PXQmJih0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKSx0aGlzLmdldFpvb20oKTx0aGlzLm9wdGlvbnMubWluWm9vbSk/dGhpcy5zZXRab29tKHQpOnRoaXN9LHNldE1heFpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhab29tPXQsdGhpcy5fbG9hZGVkJiZpIT09dCYmKHRoaXMuZmlyZSgiem9vbWxldmVsc2NoYW5nZSIpLHRoaXMuZ2V0Wm9vbSgpPnRoaXMub3B0aW9ucy5tYXhab29tKT90aGlzLnNldFpvb20odCk6dGhpc30scGFuSW5zaWRlQm91bmRzOmZ1bmN0aW9uKHQsaSl7dGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwO3ZhciBlPXRoaXMuZ2V0Q2VudGVyKCksbj10aGlzLl9saW1pdENlbnRlcihlLHRoaXMuX3pvb20seih0KSk7cmV0dXJuIGUuZXF1YWxzKG4pfHx0aGlzLnBhblRvKG4saSksdGhpcy5fZW5mb3JjaW5nQm91bmRzPSExLHRoaXN9LHBhbkluc2lkZTpmdW5jdGlvbih0LGkpe3ZhciBlPXcoKGk9aXx8e30pLnBhZGRpbmdUb3BMZWZ0fHxpLnBhZGRpbmd8fFswLDBdKSxuPXcoaS5wYWRkaW5nQm90dG9tUmlnaHR8fGkucGFkZGluZ3x8WzAsMF0pLG89dGhpcy5nZXRDZW50ZXIoKSxzPXRoaXMucHJvamVjdChvKSxyPXRoaXMucHJvamVjdCh0KSxhPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxoPWEuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHU9YihbYS5taW4uYWRkKGUpLGEubWF4LnN1YnRyYWN0KG4pXSk7aWYoIXUuY29udGFpbnMocikpe3RoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMDt2YXIgbD1zLnN1YnRyYWN0KHIpLGM9dyhyLngrbC54LHIueStsLnkpOyhyLng8dS5taW4ueHx8ci54PnUubWF4LngpJiYoYy54PXMueC1sLngsbC54PjA/Yy54Kz1oLngtZS54OmMueC09aC54LW4ueCksKHIueTx1Lm1pbi55fHxyLnk+dS5tYXgueSkmJihjLnk9cy55LWwueSxsLnk+MD9jLnkrPWgueS1lLnk6Yy55LT1oLnktbi55KSx0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KGMpLGkpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMX1yZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PWkoe2FuaW1hdGU6ITEscGFuOiEwfSwhMD09PXQ/e2FuaW1hdGU6ITB9OnQpO3ZhciBuPXRoaXMuZ2V0U2l6ZSgpO3RoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2xhc3RDZW50ZXI9bnVsbDt2YXIgbz10aGlzLmdldFNpemUoKSxzPW4uZGl2aWRlQnkoMikucm91bmQoKSxyPW8uZGl2aWRlQnkoMikucm91bmQoKSxhPXMuc3VidHJhY3Qocik7cmV0dXJuIGEueHx8YS55Pyh0LmFuaW1hdGUmJnQucGFuP3RoaXMucGFuQnkoYSk6KHQucGFuJiZ0aGlzLl9yYXdQYW5CeShhKSx0aGlzLmZpcmUoIm1vdmUiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQoZSh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6bixuZXdTaXplOm99KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZSgidmlld3Jlc2V0IiksdGhpcy5fc3RvcCgpfSxsb2NhdGU6ZnVuY3Rpb24odCl7aWYodD10aGlzLl9sb2NhdGVPcHRpb25zPWkoe3RpbWVvdXQ6MWU0LHdhdGNoOiExfSx0KSwhKCJnZW9sb2NhdGlvbiJpbiBuYXZpZ2F0b3IpKXJldHVybiB0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtjb2RlOjAsbWVzc2FnZToiR2VvbG9jYXRpb24gbm90IHN1cHBvcnRlZC4ifSksdGhpczt2YXIgbj1lKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksbz1lKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyk7cmV0dXJuIHQud2F0Y2g/dGhpcy5fbG9jYXRpb25XYXRjaElkPW5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKG4sbyx0KTpuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG4sbyx0KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGk9dC5jb2RlLGU9dC5tZXNzYWdlfHwoMT09PWk/InBlcm1pc3Npb24gZGVuaWVkIjoyPT09aT8icG9zaXRpb24gdW5hdmFpbGFibGUiOiJ0aW1lb3V0Iik7dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3JiYhdGhpcy5fbG9hZGVkJiZ0aGlzLmZpdFdvcmxkKCksdGhpcy5maXJlKCJsb2NhdGlvbmVycm9yIix7Y29kZTppLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIGVycm9yOiAiK2UrIi4ifSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe3ZhciBpPW5ldyBNKHQuY29vcmRzLmxhdGl0dWRlLHQuY29vcmRzLmxvbmdpdHVkZSksZT1pLnRvQm91bmRzKDIqdC5jb29yZHMuYWNjdXJhY3kpLG49dGhpcy5fbG9jYXRlT3B0aW9ucztpZihuLnNldFZpZXcpe3ZhciBvPXRoaXMuZ2V0Qm91bmRzWm9vbShlKTt0aGlzLnNldFZpZXcoaSxuLm1heFpvb20/TWF0aC5taW4obyxuLm1heFpvb20pOm8pfXZhciBzPXtsYXRsbmc6aSxib3VuZHM6ZSx0aW1lc3RhbXA6dC50aW1lc3RhbXB9O2Zvcih2YXIgciBpbiB0LmNvb3JkcykibnVtYmVyIj09dHlwZW9mIHQuY29vcmRzW3JdJiYoc1tyXT10LmNvb3Jkc1tyXSk7dGhpcy5maXJlKCJsb2NhdGlvbmZvdW5kIixzKX0sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGkpe2lmKCFpKXJldHVybiB0aGlzO3ZhciBlPXRoaXNbdF09bmV3IGkodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goZSksdGhpcy5vcHRpb25zW3RdJiZlLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2luaXRFdmVudHMoITApLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBiZWluZyByZXVzZWQgYnkgYW5vdGhlciBpbnN0YW5jZSIpO3RyeXtkZWxldGUgdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkLGRlbGV0ZSB0aGlzLl9jb250YWluZXJJZH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQ9dm9pZCAwLHRoaXMuX2NvbnRhaW5lcklkPXZvaWQgMH12b2lkIDAhPT10aGlzLl9sb2NhdGlvbldhdGNoSWQmJnRoaXMuc3RvcExvY2F0ZSgpLHRoaXMuX3N0b3AoKSxLKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKGcodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoInVubG9hZCIpO3ZhciB0O2Zvcih0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0ucmVtb3ZlKCk7Zm9yKHQgaW4gdGhpcy5fcGFuZXMpSyh0aGlzLl9wYW5lc1t0XSk7cmV0dXJuIHRoaXMuX2xheWVycz1bXSx0aGlzLl9wYW5lcz1bXSxkZWxldGUgdGhpcy5fbWFwUGFuZSxkZWxldGUgdGhpcy5fcmVuZGVyZXIsdGhpc30sY3JlYXRlUGFuZTpmdW5jdGlvbih0LGkpe3ZhciBlPUcoImRpdiIsImxlYWZsZXQtcGFuZSIrKHQ/IiBsZWFmbGV0LSIrdC5yZXBsYWNlKCJQYW5lIiwiIikrIi1wYW5lIjoiIiksaXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXI6dGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFBpeGVsQm91bmRzKCk7cmV0dXJuIG5ldyBUKHRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSx0aGlzLnVucHJvamVjdCh0LmdldFRvcFJpZ2h0KCkpKX0sZ2V0TWluWm9vbTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbT90aGlzLl9sYXllcnNNaW5ab29tfHwwOnRoaXMub3B0aW9ucy5taW5ab29tfSxnZXRNYXhab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tP3ZvaWQgMD09PXRoaXMuX2xheWVyc01heFpvb20/MS8wOnRoaXMuX2xheWVyc01heFpvb206dGhpcy5vcHRpb25zLm1heFpvb219LGdldEJvdW5kc1pvb206ZnVuY3Rpb24odCxpLGUpe3Q9eih0KSxlPXcoZXx8WzAsMF0pO3ZhciBuPXRoaXMuZ2V0Wm9vbSgpfHwwLG89dGhpcy5nZXRNaW5ab29tKCkscz10aGlzLmdldE1heFpvb20oKSxyPXQuZ2V0Tm9ydGhXZXN0KCksYT10LmdldFNvdXRoRWFzdCgpLGg9dGhpcy5nZXRTaXplKCkuc3VidHJhY3QoZSksdT1iKHRoaXMucHJvamVjdChhLG4pLHRoaXMucHJvamVjdChyLG4pKS5nZXRTaXplKCksbD1qaT90aGlzLm9wdGlvbnMuem9vbVNuYXA6MSxjPWgueC91LngsXz1oLnkvdS55LGQ9aT9NYXRoLm1heChjLF8pOk1hdGgubWluKGMsXyk7cmV0dXJuIG49dGhpcy5nZXRTY2FsZVpvb20oZCxuKSxsJiYobj1NYXRoLnJvdW5kKG4vKGwvMTAwKSkqKGwvMTAwKSxuPWk/TWF0aC5jZWlsKG4vbCkqbDpNYXRoLmZsb29yKG4vbCkqbCksTWF0aC5tYXgobyxNYXRoLm1pbihzLG4pKX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplJiYhdGhpcy5fc2l6ZUNoYW5nZWR8fCh0aGlzLl9zaXplPW5ldyB4KHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8MCx0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwwKSx0aGlzLl9zaXplQ2hhbmdlZD0hMSksdGhpcy5fc2l6ZS5jbG9uZSgpfSxnZXRQaXhlbEJvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGkpO3JldHVybiBuZXcgUChlLGUuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5fcGFuZXNbdF06dH0sZ2V0UGFuZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFuZXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGdldFpvb21TY2FsZTpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMub3B0aW9ucy5jcnM7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksZS5zY2FsZSh0KS9lLnNjYWxlKGkpfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLm9wdGlvbnMuY3JzO2k9dm9pZCAwPT09aT90aGlzLl96b29tOmk7dmFyIG49ZS56b29tKHQqZS5zY2FsZShpKSk7cmV0dXJuIGlzTmFOKG4pPzEvMDpufSxwcm9qZWN0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KEModCksaSl9LHVucHJvamVjdDpmdW5jdGlvbih0LGkpe3JldHVybiBpPXZvaWQgMD09PWk/dGhpcy5fem9vbTppLHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyh3KHQpLGkpfSxsYXllclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dyh0KS5hZGQodGhpcy5nZXRQaXhlbE9yaWdpbigpKTtyZXR1cm4gdGhpcy51bnByb2plY3QoaSl9LGxhdExuZ1RvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0KEModCkpLl9yb3VuZCgpLl9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpfSx3cmFwTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmcoQyh0KSl9LHdyYXBMYXRMbmdCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZ0JvdW5kcyh6KHQpKX0sZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5kaXN0YW5jZShDKHQpLEMoaSkpfSxjb250YWluZXJQb2ludFRvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdyh0KS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxsYXllclBvaW50VG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdyh0KS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sY29udGFpbmVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHcodCkpO3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhpKX0sbGF0TG5nVG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0aGlzLmxhdExuZ1RvTGF5ZXJQb2ludChDKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBidCh0LHRoaXMuX2NvbnRhaW5lcil9LG1vdXNlRXZlbnRUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSl9LG1vdXNlRXZlbnRUb0xhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fY29udGFpbmVyPVYodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJNYXAgY29udGFpbmVyIG5vdCBmb3VuZC4iKTtpZihpLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiIpO210KGksInNjcm9sbCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9bihpKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZqaSxRKHQsImxlYWZsZXQtY29udGFpbmVyIisocWk/IiBsZWFmbGV0LXRvdWNoIjoiIikrKFlpPyIgbGVhZmxldC1yZXRpbmEiOiIiKSsoTGk/IiBsZWFmbGV0LW9sZGllIjoiIikrKEJpPyIgbGVhZmxldC1zYWZhcmkiOiIiKSsodGhpcy5fZmFkZUFuaW1hdGVkPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGk9cSh0LCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1pJiYicmVsYXRpdmUiIT09aSYmImZpeGVkIiE9PWkmJih0LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMuX2luaXRQYW5lcygpLHRoaXMuX2luaXRDb250cm9sUG9zJiZ0aGlzLl9pbml0Q29udHJvbFBvcygpfSxfaW5pdFBhbmVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFuZXM9e307dGhpcy5fcGFuZVJlbmRlcmVycz17fSx0aGlzLl9tYXBQYW5lPXRoaXMuY3JlYXRlUGFuZSgibWFwUGFuZSIsdGhpcy5fY29udGFpbmVyKSxhdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpLHRoaXMuY3JlYXRlUGFuZSgidGlsZVBhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoInNoYWRvd1BhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoIm92ZXJsYXlQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJtYXJrZXJQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJ0b29sdGlwUGFuZSIpLHRoaXMuY3JlYXRlUGFuZSgicG9wdXBQYW5lIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChRKHQubWFya2VyUGFuZSwibGVhZmxldC16b29tLWhpZGUiKSxRKHQuc2hhZG93UGFuZSwibGVhZmxldC16b29tLWhpZGUiKSl9LF9yZXNldFZpZXc6ZnVuY3Rpb24odCxpKXthdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpO3ZhciBlPSF0aGlzLl9sb2FkZWQ7dGhpcy5fbG9hZGVkPSEwLGk9dGhpcy5fbGltaXRab29tKGkpLHRoaXMuZmlyZSgidmlld3ByZXJlc2V0Iik7dmFyIG49dGhpcy5fem9vbSE9PWk7dGhpcy5fbW92ZVN0YXJ0KG4sITEpLl9tb3ZlKHQsaSkuX21vdmVFbmQobiksdGhpcy5maXJlKCJ2aWV3cmVzZXQiKSxlJiZ0aGlzLmZpcmUoImxvYWQiKX0sX21vdmVTdGFydDpmdW5jdGlvbih0LGkpe3JldHVybiB0JiZ0aGlzLmZpcmUoInpvb21zdGFydCIpLGl8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IiksdGhpc30sX21vdmU6ZnVuY3Rpb24odCxpLGUpe3ZvaWQgMD09PWkmJihpPXRoaXMuX3pvb20pO3ZhciBuPXRoaXMuX3pvb20hPT1pO3JldHVybiB0aGlzLl96b29tPWksdGhpcy5fbGFzdENlbnRlcj10LHRoaXMuX3BpeGVsT3JpZ2luPXRoaXMuX2dldE5ld1BpeGVsT3JpZ2luKHQpLChufHxlJiZlLnBpbmNoKSYmdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLmZpcmUoIm1vdmUiLGUpfSxfbW92ZUVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5maXJlKCJ6b29tZW5kIiksdGhpcy5maXJlKCJtb3ZlZW5kIil9LF9zdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fZmx5VG9GcmFtZSksdGhpcy5fcGFuQW5pbSYmdGhpcy5fcGFuQW5pbS5zdG9wKCksdGhpc30sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe2F0KHRoaXMuX21hcFBhbmUsdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpKX0sX2dldFpvb21TcGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWF4Wm9vbSgpLXRoaXMuZ2V0TWluWm9vbSgpfSxfcGFuSW5zaWRlTWF4Qm91bmRzOmZ1bmN0aW9uKCl7dGhpcy5fZW5mb3JjaW5nQm91bmRzfHx0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU2V0IG1hcCBjZW50ZXIgYW5kIHpvb20gZmlyc3QuIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKHQpe3RoaXMuX3RhcmdldHM9e30sdGhpcy5fdGFyZ2V0c1tuKHRoaXMuX2NvbnRhaW5lcildPXRoaXM7dmFyIGk9dD9mdDptdDtpKHRoaXMuX2NvbnRhaW5lciwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyIsdGhpcy5faGFuZGxlRE9NRXZlbnQsdGhpcyksdGhpcy5vcHRpb25zLnRyYWNrUmVzaXplJiZpKHdpbmRvdywicmVzaXplIix0aGlzLl9vblJlc2l6ZSx0aGlzKSxqaSYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJih0P3RoaXMub2ZmOnRoaXMub24pLmNhbGwodGhpcywibW92ZWVuZCIsdGhpcy5fb25Nb3ZlRW5kKX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7Zyh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PWYoZnVuY3Rpb24oKXt0aGlzLmludmFsaWRhdGVTaXplKHtkZWJvdW5jZU1vdmVlbmQ6ITB9KX0sdGhpcyl9LF9vblNjcm9sbDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A9MCx0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdD0wfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO01hdGgubWF4KE1hdGguYWJzKHQueCksTWF0aC5hYnModC55KSk+PXRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0JiZ0aGlzLl9yZXNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0aGlzLmdldFpvb20oKSl9LF9maW5kRXZlbnRUYXJnZXRzOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG89W10scz0ibW91c2VvdXQiPT09aXx8Im1vdXNlb3ZlciI9PT1pLHI9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxhPSExO3I7KXtpZigoZT10aGlzLl90YXJnZXRzW24ocildKSYmKCJjbGljayI9PT1pfHwicHJlY2xpY2siPT09aSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGUpKXthPSEwO2JyZWFrfWlmKGUmJmUubGlzdGVucyhpLCEwKSl7aWYocyYmIUN0KHIsdCkpYnJlYWs7aWYoby5wdXNoKGUpLHMpYnJlYWt9aWYocj09PXRoaXMuX2NvbnRhaW5lcilicmVhaztyPXIucGFyZW50Tm9kZX1yZXR1cm4gby5sZW5ndGh8fGF8fHN8fCFDdChyLHQpfHwobz1bdGhpc10pLG99LF9oYW5kbGVET01FdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFNdCh0KSl7dmFyIGk9dC50eXBlOyJtb3VzZWRvd24iIT09aSYmImtleXByZXNzIiE9PWl8fGN0KHQudGFyZ2V0fHx0LnNyY0VsZW1lbnQpLHRoaXMuX2ZpcmVET01FdmVudCh0LGkpfX0sX21vdXNlRXZlbnRzOlsiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXSxfZmlyZURPTUV2ZW50OmZ1bmN0aW9uKHQsZSxuKXtpZigiY2xpY2siPT09dC50eXBlKXt2YXIgbz1pKHt9LHQpO28udHlwZT0icHJlY2xpY2siLHRoaXMuX2ZpcmVET01FdmVudChvLG8udHlwZSxuKX1pZighdC5fc3RvcHBlZCYmKG49KG58fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpKSkubGVuZ3RoKXt2YXIgcz1uWzBdOyJjb250ZXh0bWVudSI9PT1lJiZzLmxpc3RlbnMoZSwhMCkmJlB0KHQpO3ZhciByPXtvcmlnaW5hbEV2ZW50OnR9O2lmKCJrZXlwcmVzcyIhPT10LnR5cGUpe3ZhciBhPXMuZ2V0TGF0TG5nJiYoIXMuX3JhZGl1c3x8cy5fcmFkaXVzPD0xMCk7ci5jb250YWluZXJQb2ludD1hP3RoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChzLmdldExhdExuZygpKTp0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHIubGF5ZXJQb2ludD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHIuY29udGFpbmVyUG9pbnQpLHIubGF0bG5nPWE/cy5nZXRMYXRMbmcoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhyLmxheWVyUG9pbnQpfWZvcih2YXIgaD0wO2g8bi5sZW5ndGg7aCsrKWlmKG5baF0uZmlyZShlLHIsITApLHIub3JpZ2luYWxFdmVudC5fc3RvcHBlZHx8ITE9PT1uW2hdLm9wdGlvbnMuYnViYmxpbmdNb3VzZUV2ZW50cyYmLTEhPT1kKHRoaXMuX21vdXNlRXZlbnRzLGUpKXJldHVybn19LF9kcmFnZ2FibGVNb3ZlZDpmdW5jdGlvbih0KXtyZXR1cm4odD10LmRyYWdnaW5nJiZ0LmRyYWdnaW5nLmVuYWJsZWQoKT90OnRoaXMpLmRyYWdnaW5nJiZ0LmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuYm94Wm9vbSYmdGhpcy5ib3hab29tLm1vdmVkKCl9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsaT10aGlzLl9oYW5kbGVycy5sZW5ndGg7dDxpO3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGl8fHRoaXMse3RhcmdldDp0aGlzfSk6dGhpcy5vbigibG9hZCIsdCxpKSx0aGlzfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiBodCh0aGlzLl9tYXBQYW5lKXx8bmV3IHgoMCwwKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsaSl7cmV0dXJuKHQmJnZvaWQgMCE9PWk/dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCxpKTp0aGlzLmdldFBpeGVsT3JpZ2luKCkpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LF9nZXROZXdQaXhlbE9yaWdpbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KGUpLl9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKS5fcm91bmQoKX0sX2xhdExuZ1RvTmV3TGF5ZXJQb2ludDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KG4pfSxfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gYihbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksaSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGkpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxpKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksaSkuX3N1YnRyYWN0KG4pXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsaSxlKXtpZighZSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxpKSxvPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHM9bmV3IFAobi5zdWJ0cmFjdChvKSxuLmFkZChvKSkscj10aGlzLl9nZXRCb3VuZHNPZmZzZXQocyxlLGkpO3JldHVybiByLnJvdW5kKCkuZXF1YWxzKFswLDBdKT90OnRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGkpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdDt2YXIgZT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgUChlLm1pbi5hZGQodCksZS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4saSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj1iKHRoaXMucHJvamVjdChpLmdldE5vcnRoRWFzdCgpLGUpLHRoaXMucHJvamVjdChpLmdldFNvdXRoV2VzdCgpLGUpKSxvPW4ubWluLnN1YnRyYWN0KHQubWluKSxzPW4ubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IHgodGhpcy5fcmVib3VuZChvLngsLXMueCksdGhpcy5fcmVib3VuZChvLnksLXMueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGkpe3JldHVybiB0K2k+MD9NYXRoLnJvdW5kKHQtaSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldE1pblpvb20oKSxlPXRoaXMuZ2V0TWF4Wm9vbSgpLG49amk/dGhpcy5vcHRpb25zLnpvb21TbmFwOjE7cmV0dXJuIG4mJih0PU1hdGgucm91bmQodC9uKSpuKSxNYXRoLm1heChpLE1hdGgubWluKGUsdCkpfSxfb25QYW5UcmFuc2l0aW9uU3RlcDpmdW5jdGlvbigpe3RoaXMuZmlyZSgibW92ZSIpfSxfb25QYW5UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dHQodGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShpJiZpLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMoZSkpJiYodGhpcy5wYW5CeShlLGkpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PUcoImRpdiIsImxlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkIik7dGhpcy5fcGFuZXMubWFwUGFuZS5hcHBlbmRDaGlsZCh0KSx0aGlzLm9uKCJ6b29tYW5pbSIsZnVuY3Rpb24odCl7dmFyIGk9Y2UsZT10aGlzLl9wcm94eS5zdHlsZVtpXTtydCh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodC5jZW50ZXIsdC56b29tKSx0aGlzLmdldFpvb21TY2FsZSh0Lnpvb20sMSkpLGU9PT10aGlzLl9wcm94eS5zdHlsZVtpXSYmdGhpcy5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSx0aGlzKSx0aGlzLm9uKCJsb2FkIG1vdmVlbmQiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRDZW50ZXIoKSxpPXRoaXMuZ2V0Wm9vbSgpO3J0KHRoaXMuX3Byb3h5LHRoaXMucHJvamVjdCh0LGkpLHRoaXMuZ2V0Wm9vbVNjYWxlKGksMSkpfSx0aGlzKSx0aGlzLl9vbigidW5sb2FkIix0aGlzLl9kZXN0cm95QW5pbVByb3h5LHRoaXMpfSxfZGVzdHJveUFuaW1Qcm94eTpmdW5jdGlvbigpe0sodGhpcy5fcHJveHkpLGRlbGV0ZSB0aGlzLl9wcm94eX0sX2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsaSxlKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGU9ZXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8ITE9PT1lLmFuaW1hdGV8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoaS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShpKSxvPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pO3JldHVybiEoITAhPT1lLmFuaW1hdGUmJiF0aGlzLmdldFNpemUoKS5jb250YWlucyhvKSkmJihmKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZVN0YXJ0KCEwLCExKS5fYW5pbWF0ZVpvb20odCxpLCEwKX0sdGhpcyksITApfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCxpLG4sbyl7dGhpcy5fbWFwUGFuZSYmKG4mJih0aGlzLl9hbmltYXRpbmdab29tPSEwLHRoaXMuX2FuaW1hdGVUb0NlbnRlcj10LHRoaXMuX2FuaW1hdGVUb1pvb209aSxRKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtem9vbS1hbmltIikpLHRoaXMuZmlyZSgiem9vbWFuaW0iLHtjZW50ZXI6dCx6b29tOmksbm9VcGRhdGU6b30pLHNldFRpbWVvdXQoZSh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZ0dCh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX2FuaW1hdGluZ1pvb209ITEsdGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSksZihmdW5jdGlvbigpe3RoaXMuX21vdmVFbmQoITApfSx0aGlzKSl9fSksVGU9di5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3ByaWdodCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtyZXR1cm4gaSYmaS5yZW1vdmVDb250cm9sKHRoaXMpLHRoaXMub3B0aW9ucy5wb3NpdGlvbj10LGkmJmkuYWRkQ29udHJvbCh0aGlzKSx0aGlzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXt0aGlzLnJlbW92ZSgpLHRoaXMuX21hcD10O3ZhciBpPXRoaXMuX2NvbnRhaW5lcj10aGlzLm9uQWRkKHQpLGU9dGhpcy5nZXRQb3NpdGlvbigpLG49dC5fY29udHJvbENvcm5lcnNbZV07cmV0dXJuIFEoaSwibGVhZmxldC1jb250cm9sIiksLTEhPT1lLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGksbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXA/KEsodGhpcy5fY29udGFpbmVyKSx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHRoaXMuX21hcCksdGhpcy5fbWFwPW51bGwsdGhpcyk6dGhpc30sX3JlZm9jdXNPbk1hcDpmdW5jdGlvbih0KXt0aGlzLl9tYXAmJnQmJnQuc2NyZWVuWD4wJiZ0LnNjcmVlblk+MCYmdGhpcy5fbWFwLmdldENvbnRhaW5lcigpLmZvY3VzKCl9fSksemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUZSh0KX07YmUuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZSgpLHRoaXN9LF9pbml0Q29udHJvbFBvczpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxvKXt2YXIgcz1lK3QrIiAiK2UrbztpW3Qrb109RygiZGl2IixzLG4pfXZhciBpPXRoaXMuX2NvbnRyb2xDb3JuZXJzPXt9LGU9ImxlYWZsZXQtIixuPXRoaXMuX2NvbnRyb2xDb250YWluZXI9RygiZGl2IixlKyJjb250cm9sLWNvbnRhaW5lciIsdGhpcy5fY29udGFpbmVyKTt0KCJ0b3AiLCJsZWZ0IiksdCgidG9wIiwicmlnaHQiKSx0KCJib3R0b20iLCJsZWZ0IiksdCgiYm90dG9tIiwicmlnaHQiKX0sX2NsZWFyQ29udHJvbFBvczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9jb250cm9sQ29ybmVycylLKHRoaXMuX2NvbnRyb2xDb3JuZXJzW3RdKTtLKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250cm9sQ29ybmVycyxkZWxldGUgdGhpcy5fY29udHJvbENvbnRhaW5lcn19KTt2YXIgTWU9VGUuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246InRvcHJpZ2h0IixhdXRvWkluZGV4OiEwLGhpZGVTaW5nbGVCYXNlOiExLHNvcnRMYXllcnM6ITEsc29ydEZ1bmN0aW9uOmZ1bmN0aW9uKHQsaSxlLG4pe3JldHVybiBlPG4/LTE6bjxlPzE6MH19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2wodGhpcyxlKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHM9W10sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gaSl0aGlzLl9hZGRMYXllcihpW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwPXQsdC5vbigiem9vbWVuZCIsdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycyx0aGlzKTtmb3IodmFyIGk9MDtpPHRoaXMuX2xheWVycy5sZW5ndGg7aSsrKXRoaXMuX2xheWVyc1tpXS5sYXllci5vbigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gVGUucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcyx0KSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoInpvb21lbmQiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyk7Zm9yKHZhciB0PTA7dDx0aGlzLl9sYXllcnMubGVuZ3RoO3QrKyl0aGlzLl9sYXllcnNbdF0ubGF5ZXIub2ZmKCJhZGQgcmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxpKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sYWRkT3ZlcmxheTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGksITApLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt0Lm9mZigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTt2YXIgaT10aGlzLl9nZXRMYXllcihuKHQpKTtyZXR1cm4gaSYmdGhpcy5fbGF5ZXJzLnNwbGljZSh0aGlzLl9sYXllcnMuaW5kZXhPZihpKSwxKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sZXhwYW5kOmZ1bmN0aW9uKCl7USh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD1udWxsO3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkueS0odGhpcy5fY29udGFpbmVyLm9mZnNldFRvcCs1MCk7cmV0dXJuIHQ8dGhpcy5fc2VjdGlvbi5jbGllbnRIZWlnaHQ/KFEodGhpcy5fc2VjdGlvbiwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXIiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD10KyJweCIpOnR0KHRoaXMuX3NlY3Rpb24sImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIiksdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycygpLHRoaXN9LGNvbGxhcHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHR0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpLHRoaXN9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtY29udHJvbC1sYXllcnMiLGk9dGhpcy5fY29udGFpbmVyPUcoImRpdiIsdCksZT10aGlzLm9wdGlvbnMuY29sbGFwc2VkO2kuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksd3QoaSkseHQoaSk7dmFyIG49dGhpcy5fc2VjdGlvbj1HKCJzZWN0aW9uIix0KyItbGlzdCIpO2UmJih0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLmNvbGxhcHNlLHRoaXMpLHppfHxtdChpLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBvPXRoaXMuX2xheWVyc0xpbms9RygiYSIsdCsiLXRvZ2dsZSIsaSk7by5ocmVmPSIjIixvLnRpdGxlPSJMYXllcnMiLHFpPyhtdChvLCJjbGljayIsTHQpLG10KG8sImNsaWNrIix0aGlzLmV4cGFuZCx0aGlzKSk6bXQobywiZm9jdXMiLHRoaXMuZXhwYW5kLHRoaXMpLGV8fHRoaXMuZXhwYW5kKCksdGhpcy5fYmFzZUxheWVyc0xpc3Q9RygiZGl2Iix0KyItYmFzZSIsbiksdGhpcy5fc2VwYXJhdG9yPUcoImRpdiIsdCsiLXNlcGFyYXRvciIsbiksdGhpcy5fb3ZlcmxheXNMaXN0PUcoImRpdiIsdCsiLW92ZXJsYXlzIixuKSxpLmFwcGVuZENoaWxkKG4pfSxfZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9sYXllcnMubGVuZ3RoO2krKylpZih0aGlzLl9sYXllcnNbaV0mJm4odGhpcy5fbGF5ZXJzW2ldLmxheWVyKT09PXQpcmV0dXJuIHRoaXMuX2xheWVyc1tpXX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsaSxuKXt0aGlzLl9tYXAmJnQub24oImFkZCByZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyksdGhpcy5fbGF5ZXJzLnB1c2goe2xheWVyOnQsbmFtZTppLG92ZXJsYXk6bn0pLHRoaXMub3B0aW9ucy5zb3J0TGF5ZXJzJiZ0aGlzLl9sYXllcnMuc29ydChlKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMub3B0aW9ucy5zb3J0RnVuY3Rpb24odC5sYXllcixpLmxheWVyLHQubmFtZSxpLm5hbWUpfSx0aGlzKSksdGhpcy5vcHRpb25zLmF1dG9aSW5kZXgmJnQuc2V0WkluZGV4JiYodGhpcy5fbGFzdFpJbmRleCsrLHQuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpKSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcztZKHRoaXMuX2Jhc2VMYXllcnNMaXN0KSxZKHRoaXMuX292ZXJsYXlzTGlzdCksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdO3ZhciB0LGksZSxuLG89MDtmb3IoZT0wO2U8dGhpcy5fbGF5ZXJzLmxlbmd0aDtlKyspbj10aGlzLl9sYXllcnNbZV0sdGhpcy5fYWRkSXRlbShuKSxpPWl8fG4ub3ZlcmxheSx0PXR8fCFuLm92ZXJsYXksbys9bi5vdmVybGF5PzA6MTtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlJiYodD10JiZvPjEsdGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheT10PyIiOiJub25lIiksdGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9aSYmdD8iIjoibm9uZSIsdGhpc30sX29uTGF5ZXJDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGk9dGhpcy5fZ2V0TGF5ZXIobih0LnRhcmdldCkpLGU9aS5vdmVybGF5PyJhZGQiPT09dC50eXBlPyJvdmVybGF5YWRkIjoib3ZlcmxheXJlbW92ZSI6ImFkZCI9PT10LnR5cGU/ImJhc2VsYXllcmNoYW5nZSI6bnVsbDtlJiZ0aGlzLl9tYXAuZmlyZShlLGkpfSxfY3JlYXRlUmFkaW9FbGVtZW50OmZ1bmN0aW9uKHQsaSl7dmFyIGU9JzxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiIG5hbWU9IicrdCsnIicrKGk/JyBjaGVja2VkPSJjaGVja2VkIic6IiIpKyIvPiIsbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbi5pbm5lckhUTUw9ZSxuLmZpcnN0Q2hpbGR9LF9hZGRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKSxvPXRoaXMuX21hcC5oYXNMYXllcih0LmxheWVyKTt0Lm92ZXJsYXk/KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9ImNoZWNrYm94IixpLmNsYXNzTmFtZT0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIsaS5kZWZhdWx0Q2hlY2tlZD1vKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgibGVhZmxldC1iYXNlLWxheWVycyIsbyksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLnB1c2goaSksaS5sYXllcklkPW4odC5sYXllciksbXQoaSwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayx0aGlzKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cy5pbm5lckhUTUw9IiAiK3QubmFtZTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChyKSxyLmFwcGVuZENoaWxkKGkpLHIuYXBwZW5kQ2hpbGQocyksKHQub3ZlcmxheT90aGlzLl9vdmVybGF5c0xpc3Q6dGhpcy5fYmFzZUxheWVyc0xpc3QpLmFwcGVuZENoaWxkKGUpLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKSxlfSxfb25JbnB1dENsaWNrOmZ1bmN0aW9uKCl7dmFyIHQsaSxlPXRoaXMuX2xheWVyQ29udHJvbElucHV0cyxuPVtdLG89W107dGhpcy5faGFuZGxpbmdDbGljaz0hMDtmb3IodmFyIHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSl0PWVbc10saT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLHQuY2hlY2tlZD9uLnB1c2goaSk6dC5jaGVja2VkfHxvLnB1c2goaSk7Zm9yKHM9MDtzPG8ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIob1tzXSkmJnRoaXMuX21hcC5yZW1vdmVMYXllcihvW3NdKTtmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXRoaXMuX21hcC5oYXNMYXllcihuW3NdKXx8dGhpcy5fbWFwLmFkZExheWVyKG5bc10pO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITEsdGhpcy5fcmVmb2N1c09uTWFwKCl9LF9jaGVja0Rpc2FibGVkTGF5ZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksZT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj10aGlzLl9tYXAuZ2V0Wm9vbSgpLG89ZS5sZW5ndGgtMTtvPj0wO28tLSl0PWVbb10saT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLHQuZGlzYWJsZWQ9dm9pZCAwIT09aS5vcHRpb25zLm1pblpvb20mJm48aS5vcHRpb25zLm1pblpvb218fHZvaWQgMCE9PWkub3B0aW9ucy5tYXhab29tJiZuPmkub3B0aW9ucy5tYXhab29tfSxfZXhwYW5kSWZOb3RDb2xsYXBzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYhdGhpcy5vcHRpb25zLmNvbGxhcHNlZCYmdGhpcy5leHBhbmQoKSx0aGlzfSxfZXhwYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kKCl9LF9jb2xsYXBzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxhcHNlKCl9fSksQ2U9VGUuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoidG9wbGVmdCIsem9vbUluVGV4dDoiKyIsem9vbUluVGl0bGU6Ilpvb20gaW4iLHpvb21PdXRUZXh0OiImI3gyMjEyOyIsem9vbU91dFRpdGxlOiJab29tIG91dCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPSJsZWFmbGV0LWNvbnRyb2wtem9vbSIsZT1HKCJkaXYiLGkrIiBsZWFmbGV0LWJhciIpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbUluVGV4dCxuLnpvb21JblRpdGxlLGkrIi1pbiIsZSx0aGlzLl96b29tSW4pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbU91dFRleHQsbi56b29tT3V0VGl0bGUsaSsiLW91dCIsZSx0aGlzLl96b29tT3V0KSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksZX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITAsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxfem9vbUluOmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPHRoaXMuX21hcC5nZXRNYXhab29tKCkmJnRoaXMuX21hcC56b29tSW4odGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhKih0LnNoaWZ0S2V5PzM6MSkpfSxfem9vbU91dDpmdW5jdGlvbih0KXshdGhpcy5fZGlzYWJsZWQmJnRoaXMuX21hcC5fem9vbT50aGlzLl9tYXAuZ2V0TWluWm9vbSgpJiZ0aGlzLl9tYXAuem9vbU91dCh0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxpLGUsbixvKXt2YXIgcz1HKCJhIixlLG4pO3JldHVybiBzLmlubmVySFRNTD10LHMuaHJlZj0iIyIscy50aXRsZT1pLHMuc2V0QXR0cmlidXRlKCJyb2xlIiwiYnV0dG9uIikscy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpLHd0KHMpLG10KHMsImNsaWNrIixMdCksbXQocywiY2xpY2siLG8sdGhpcyksbXQocywiY2xpY2siLHRoaXMuX3JlZm9jdXNPbk1hcCx0aGlzKSxzfSxfdXBkYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT0ibGVhZmxldC1kaXNhYmxlZCI7dHQodGhpcy5fem9vbUluQnV0dG9uLGkpLHR0KHRoaXMuX3pvb21PdXRCdXR0b24saSksKHRoaXMuX2Rpc2FibGVkfHx0Ll96b29tPT09dC5nZXRNaW5ab29tKCkpJiZRKHRoaXMuX3pvb21PdXRCdXR0b24saSksKHRoaXMuX2Rpc2FibGVkfHx0Ll96b29tPT09dC5nZXRNYXhab29tKCkpJiZRKHRoaXMuX3pvb21JbkJ1dHRvbixpKX19KTtiZS5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksYmUuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBDZSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSk7dmFyIFNlPVRlLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbWxlZnQiLG1heFdpZHRoOjEwMCxtZXRyaWM6ITAsaW1wZXJpYWw6ITB9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPUcoImRpdiIsImxlYWZsZXQtY29udHJvbC1zY2FsZSIpLGU9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl9hZGRTY2FsZXMoZSwibGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmUiLGkpLHQub24oZS51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl91cGRhdGUsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpfSxfYWRkU2NhbGVzOmZ1bmN0aW9uKHQsaSxlKXt0Lm1ldHJpYyYmKHRoaXMuX21TY2FsZT1HKCJkaXYiLGksZSkpLHQuaW1wZXJpYWwmJih0aGlzLl9pU2NhbGU9RygiZGl2IixpLGUpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxpPXQuZ2V0U2l6ZSgpLnkvMixlPXQuZGlzdGFuY2UodC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLGldKSx0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCxpXSkpO3RoaXMuX3VwZGF0ZVNjYWxlcyhlKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMubWV0cmljJiZ0JiZ0aGlzLl91cGRhdGVNZXRyaWModCksdGhpcy5vcHRpb25zLmltcGVyaWFsJiZ0JiZ0aGlzLl91cGRhdGVJbXBlcmlhbCh0KX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRSb3VuZE51bSh0KSxlPWk8MWUzP2krIiBtIjppLzFlMysiIGttIjt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZSxpL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG89My4yODA4Mzk5KnQ7bz41MjgwPyhpPW8vNTI4MCxlPXRoaXMuX2dldFJvdW5kTnVtKGkpLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxlKyIgbWkiLGUvaSkpOihuPXRoaXMuX2dldFJvdW5kTnVtKG8pLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxuKyIgZnQiLG4vbykpfSxfdXBkYXRlU2NhbGU6ZnVuY3Rpb24odCxpLGUpe3Quc3R5bGUud2lkdGg9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqZSkrInB4Iix0LmlubmVySFRNTD1pfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxlPXQvaTtyZXR1cm4gZT1lPj0xMD8xMDplPj01PzU6ZT49Mz8zOmU+PTI/MjoxLGkqZX19KSxaZT1UZS5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwOi8vbGVhZmxldGpzLmNvbSIgdGl0bGU9IkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcyI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe3QuYXR0cmlidXRpb25Db250cm9sPXRoaXMsdGhpcy5fY29udGFpbmVyPUcoImRpdiIsImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiIpLHd0KHRoaXMuX2NvbnRhaW5lcik7Zm9yKHZhciBpIGluIHQuX2xheWVycyl0Ll9sYXllcnNbaV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9jb250YWluZXJ9LHNldFByZWZpeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeD10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCksdGhpcyk6dGhpc30scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzKTp0aGlzfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD1bXTtmb3IodmFyIGkgaW4gdGhpcy5fYXR0cmlidXRpb25zKXRoaXMuX2F0dHJpYnV0aW9uc1tpXSYmdC5wdXNoKGkpO3ZhciBlPVtdO3RoaXMub3B0aW9ucy5wcmVmaXgmJmUucHVzaCh0aGlzLm9wdGlvbnMucHJlZml4KSx0Lmxlbmd0aCYmZS5wdXNoKHQuam9pbigiLCAiKSksdGhpcy5fY29udGFpbmVyLmlubmVySFRNTD1lLmpvaW4oIiB8ICIpfX19KTtiZS5tZXJnZU9wdGlvbnMoe2F0dHJpYnV0aW9uQ29udHJvbDohMH0pLGJlLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKG5ldyBaZSkuYWRkVG8odGhpcyl9KTtUZS5MYXllcnM9TWUsVGUuWm9vbT1DZSxUZS5TY2FsZT1TZSxUZS5BdHRyaWJ1dGlvbj1aZSx6ZS5sYXllcnM9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgTWUodCxpLGUpfSx6ZS56b29tPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ2UodCl9LHplLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2UodCl9LHplLmF0dHJpYnV0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmUodCl9O3ZhciBFZT12LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQ/dGhpczoodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCksdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZD8odGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlbW92ZUhvb2tzKCksdGhpcyk6dGhpc30sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KTtFZS5hZGRUbz1mdW5jdGlvbih0LGkpe3JldHVybiB0LmFkZEhhbmRsZXIoaSx0aGlzKSx0aGlzfTt2YXIga2UsQmU9e0V2ZW50czpsaX0sQWU9cWk/InRvdWNoc3RhcnQgbW91c2Vkb3duIjoibW91c2Vkb3duIixJZT17bW91c2Vkb3duOiJtb3VzZXVwIix0b3VjaHN0YXJ0OiJ0b3VjaGVuZCIscG9pbnRlcmRvd246InRvdWNoZW5kIixNU1BvaW50ZXJEb3duOiJ0b3VjaGVuZCJ9LE9lPXttb3VzZWRvd246Im1vdXNlbW92ZSIsdG91Y2hzdGFydDoidG91Y2htb3ZlIixwb2ludGVyZG93bjoidG91Y2htb3ZlIixNU1BvaW50ZXJEb3duOiJ0b3VjaG1vdmUifSxSZT1jaS5leHRlbmQoe29wdGlvbnM6e2NsaWNrVG9sZXJhbmNlOjN9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUsbil7bCh0aGlzLG4pLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kcmFnU3RhcnRUYXJnZXQ9aXx8dCx0aGlzLl9wcmV2ZW50T3V0bGluZT1lfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwobXQodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LEFlLHRoaXMuX29uRG93bix0aGlzKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQmJihSZS5fZHJhZ2dpbmc9PT10aGlzJiZ0aGlzLmZpbmlzaERyYWcoKSxmdCh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsQWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKCF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJih0aGlzLl9tb3ZlZD0hMSwhJCh0aGlzLl9lbGVtZW50LCJsZWFmbGV0LXpvb20tYW5pbSIpJiYhKFJlLl9kcmFnZ2luZ3x8dC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbiYmIXQudG91Y2hlc3x8KFJlLl9kcmFnZ2luZz10aGlzLHRoaXMuX3ByZXZlbnRPdXRsaW5lJiZjdCh0aGlzLl9lbGVtZW50KSx1dCgpLGZpKCksdGhpcy5fbW92aW5nKSkpKXt0aGlzLmZpcmUoImRvd24iKTt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsZT1kdCh0aGlzLl9lbGVtZW50KTt0aGlzLl9zdGFydFBvaW50PW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3BhcmVudFNjYWxlPXB0KGUpLG10KGRvY3VtZW50LE9lW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLG10KGRvY3VtZW50LEllW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYoIXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZClpZih0LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MSl0aGlzLl9tb3ZlZD0hMDtlbHNle3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsZT1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKS5fc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KGUueHx8ZS55KSYmKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LFB0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1odCh0aGlzLl9lbGVtZW50KS5zdWJ0cmFjdChlKSxRKGRvY3VtZW50LmJvZHksImxlYWZsZXQtZHJhZ2dpbmciKSx0aGlzLl9sYXN0VGFyZ2V0PXQudGFyZ2V0fHx0LnNyY0VsZW1lbnQsd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmdGhpcy5fbGFzdFRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnRJbnN0YW5jZSYmKHRoaXMuX2xhc3RUYXJnZXQ9dGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksUSh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX2FuaW1SZXF1ZXN0PWYodGhpcy5fdXBkYXRlUG9zaXRpb24sdGhpcywhMCkpKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RFdmVudH07dGhpcy5maXJlKCJwcmVkcmFnIix0KSxhdCh0aGlzLl9lbGVtZW50LHRoaXMuX25ld1BvcyksdGhpcy5maXJlKCJkcmFnIix0KX0sX29uVXA6ZnVuY3Rpb24odCl7IXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZCYmdGhpcy5maW5pc2hEcmFnKCl9LGZpbmlzaERyYWc6ZnVuY3Rpb24oKXt0dChkb2N1bWVudC5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKHR0KHRoaXMuX2xhc3RUYXJnZXQsImxlYWZsZXQtZHJhZy10YXJnZXQiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpO2Zvcih2YXIgdCBpbiBPZSlmdChkb2N1bWVudCxPZVt0XSx0aGlzLl9vbk1vdmUsdGhpcyksZnQoZG9jdW1lbnQsSWVbdF0sdGhpcy5fb25VcCx0aGlzKTtsdCgpLGdpKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITEsUmUuX2RyYWdnaW5nPSExfX0pLE5lPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtzaW1wbGlmeTpadCxwb2ludFRvU2VnbWVudERpc3RhbmNlOkV0LGNsb3Nlc3RQb2ludE9uU2VnbWVudDpmdW5jdGlvbih0LGksZSl7cmV0dXJuIER0KHQsaSxlKX0sY2xpcFNlZ21lbnQ6SXQsX2dldEVkZ2VJbnRlcnNlY3Rpb246T3QsX2dldEJpdENvZGU6UnQsX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OkR0LGlzRmxhdDpqdCxfZmxhdDpXdH0pLERlPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtjbGlwUG9seWdvbjpIdH0pLGplPXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE0odC55LHQueCl9LGJvdW5kczpuZXcgUChbLTE4MCwtOTBdLFsxODAsOTBdKX0sV2U9e1I6NjM3ODEzNyxSX01JTk9SOjYzNTY3NTIuMzE0MjQ1MTc5LGJvdW5kczpuZXcgUChbLTIwMDM3NTA4LjM0Mjc5LC0xNTQ5NjU3MC43Mzk3Ml0sWzIwMDM3NTA4LjM0Mjc5LDE4NzY0NjU2LjIzMTM4XSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT1NYXRoLlBJLzE4MCxlPXRoaXMuUixuPXQubGF0Kmksbz10aGlzLlJfTUlOT1IvZSxzPU1hdGguc3FydCgxLW8qbykscj1zKk1hdGguc2luKG4pLGE9TWF0aC50YW4oTWF0aC5QSS80LW4vMikvTWF0aC5wb3coKDEtcikvKDErcikscy8yKTtyZXR1cm4gbj0tZSpNYXRoLmxvZyhNYXRoLm1heChhLDFlLTEwKSksbmV3IHgodC5sbmcqaSplLG4pfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9MTgwL01hdGguUEksbj10aGlzLlIsbz10aGlzLlJfTUlOT1IvbixzPU1hdGguc3FydCgxLW8qbykscj1NYXRoLmV4cCgtdC55L24pLGE9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIpLGg9MCx1PS4xO2g8MTUmJk1hdGguYWJzKHUpPjFlLTc7aCsrKWk9cypNYXRoLnNpbihhKSxpPU1hdGgucG93KCgxLWkpLygxK2kpLHMvMiksYSs9dT1NYXRoLlBJLzItMipNYXRoLmF0YW4ocippKS1hO3JldHVybiBuZXcgTShhKmUsdC54KmUvbil9fSxIZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7TG9uTGF0OmplLE1lcmNhdG9yOldlLFNwaGVyaWNhbE1lcmNhdG9yOm1pfSksRmU9aSh7fSxwaSx7Y29kZToiRVBTRzozMzk1Iixwcm9qZWN0aW9uOldlLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqV2UuUik7cmV0dXJuIFoodCwuNSwtdCwuNSl9KCl9KSxVZT1pKHt9LHBpLHtjb2RlOiJFUFNHOjQzMjYiLHByb2plY3Rpb246amUsdHJhbnNmb3JtYXRpb246WigxLzE4MCwxLC0xLzE4MCwuNSl9KSxWZT1pKHt9LGRpLHtwcm9qZWN0aW9uOmplLHRyYW5zZm9ybWF0aW9uOlooMSwwLC0xLDApLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1pLmxuZy10LmxuZyxuPWkubGF0LXQubGF0O3JldHVybiBNYXRoLnNxcnQoZSplK24qbil9LGluZmluaXRlOiEwfSk7ZGkuRWFydGg9cGksZGkuRVBTRzMzOTU9RmUsZGkuRVBTRzM4NTc9eWksZGkuRVBTRzkwMDkxMz14aSxkaS5FUFNHNDMyNj1VZSxkaS5TaW1wbGU9VmU7dmFyIHFlPWNpLmV4dGVuZCh7b3B0aW9uczp7cGFuZToib3ZlcmxheVBhbmUiLGF0dHJpYnV0aW9uOm51bGwsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXB8fHRoaXMuX21hcFRvQWRkKX0scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5yZW1vdmVMYXllcih0aGlzKSx0aGlzfSxnZXRQYW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0UGFuZSh0P3RoaXMub3B0aW9uc1t0XXx8dDp0aGlzLm9wdGlvbnMucGFuZSl9LGFkZEludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuX3RhcmdldHNbbih0KV09dGhpcyx0aGlzfSxyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuX21hcC5fdGFyZ2V0c1tuKHQpXSx0aGlzfSxnZXRBdHRyaWJ1dGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRpb259LF9sYXllckFkZDpmdW5jdGlvbih0KXt2YXIgaT10LnRhcmdldDtpZihpLmhhc0xheWVyKHRoaXMpKXtpZih0aGlzLl9tYXA9aSx0aGlzLl96b29tQW5pbWF0ZWQ9aS5fem9vbUFuaW1hdGVkLHRoaXMuZ2V0RXZlbnRzKXt2YXIgZT10aGlzLmdldEV2ZW50cygpO2kub24oZSx0aGlzKSx0aGlzLm9uY2UoInJlbW92ZSIsZnVuY3Rpb24oKXtpLm9mZihlLHRoaXMpfSx0aGlzKX10aGlzLm9uQWRkKGkpLHRoaXMuZ2V0QXR0cmlidXRpb24mJmkuYXR0cmlidXRpb25Db250cm9sJiZpLmF0dHJpYnV0aW9uQ29udHJvbC5hZGRBdHRyaWJ1dGlvbih0aGlzLmdldEF0dHJpYnV0aW9uKCkpLHRoaXMuZmlyZSgiYWRkIiksaS5maXJlKCJsYXllcmFkZCIse2xheWVyOnRoaXN9KX19fSk7YmUuaW5jbHVkZSh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7aWYoIXQuX2xheWVyQWRkKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci4iKTt2YXIgaT1uKHQpO3JldHVybiB0aGlzLl9sYXllcnNbaV0/dGhpczoodGhpcy5fbGF5ZXJzW2ldPXQsdC5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCksdGhpcyl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPW4odCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT8odGhpcy5fbG9hZGVkJiZ0Lm9uUmVtb3ZlKHRoaXMpLHQuZ2V0QXR0cmlidXRpb24mJnRoaXMuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbC5yZW1vdmVBdHRyaWJ1dGlvbih0LmdldEF0dHJpYnV0aW9uKCkpLGRlbGV0ZSB0aGlzLl9sYXllcnNbaV0sdGhpcy5fbG9hZGVkJiYodGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0LmZpcmUoInJlbW92ZSIpKSx0Ll9tYXA9dC5fbWFwVG9BZGQ9bnVsbCx0aGlzKTp0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJm4odClpbiB0aGlzLl9sYXllcnN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sX2FkZExheWVyczpmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxlPSh0PXQ/b2kodCk/dDpbdF06W10pLmxlbmd0aDtpPGU7aSsrKXRoaXMuYWRkTGF5ZXIodFtpXSl9LF9hZGRab29tTGltaXQ6ZnVuY3Rpb24odCl7IWlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW24odCldPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3JlbW92ZVpvb21MaW1pdDpmdW5jdGlvbih0KXt2YXIgaT1uKHQpO3RoaXMuX3pvb21Cb3VuZExheWVyc1tpXSYmKGRlbGV0ZSB0aGlzLl96b29tQm91bmRMYXllcnNbaV0sdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD0xLzAsaT0tMS8wLGU9dGhpcy5fZ2V0Wm9vbVNwYW4oKTtmb3IodmFyIG4gaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgbz10aGlzLl96b29tQm91bmRMYXllcnNbbl0ub3B0aW9uczt0PXZvaWQgMD09PW8ubWluWm9vbT90Ok1hdGgubWluKHQsby5taW5ab29tKSxpPXZvaWQgMD09PW8ubWF4Wm9vbT9pOk1hdGgubWF4KGksby5tYXhab29tKX10aGlzLl9sYXllcnNNYXhab29tPWk9PT0tMS8wP3ZvaWQgMDppLHRoaXMuX2xheWVyc01pblpvb209dD09PTEvMD92b2lkIDA6dCxlIT09dGhpcy5fZ2V0Wm9vbVNwYW4oKSYmdGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIiksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20mJnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuZ2V0Wm9vbSgpPnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNYXhab29tKSx2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbSYmdGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5nZXRab29tKCk8dGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01pblpvb20pfX0pO3ZhciBHZT1xZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9O3ZhciBlLG47aWYodClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tpXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpXSksZGVsZXRlIHRoaXMuX2xheWVyc1tpXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJih0IGluIHRoaXMuX2xheWVyc3x8dGhpcy5nZXRMYXllcklkKHQpaW4gdGhpcy5fbGF5ZXJzKX0sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKX0saW52b2tlOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKGkgaW4gdGhpcy5fbGF5ZXJzKShlPXRoaXMuX2xheWVyc1tpXSlbdF0mJmVbdF0uYXBwbHkoZSxuKTtyZXR1cm4gdGhpc30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5hZGRMYXllcix0KX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5yZW1vdmVMYXllcix0KX0sZWFjaExheWVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl0LmNhbGwoaSx0aGlzLl9sYXllcnNbZV0pO3JldHVybiB0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodC5wdXNoLHQpLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoInNldFpJbmRleCIsdCl9LGdldExheWVySWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9fSksS2U9R2UuZXh0ZW5kKHthZGRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT90aGlzOih0LmFkZEV2ZW50UGFyZW50KHRoaXMpLEdlLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcmFkZCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSx0LnJlbW92ZUV2ZW50UGFyZW50KHRoaXMpLEdlLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSk6dGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVDtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXt2YXIgZT10aGlzLl9sYXllcnNbaV07dC5leHRlbmQoZS5nZXRCb3VuZHM/ZS5nZXRCb3VuZHMoKTplLmdldExhdExuZygpKX1yZXR1cm4gdH19KSxZZT12LmV4dGVuZCh7b3B0aW9uczp7cG9wdXBBbmNob3I6WzAsMF0sdG9vbHRpcEFuY2hvcjpbMCwwXX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtsKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighZSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG49dGhpcy5fY3JlYXRlSW1nKGUsaSYmIklNRyI9PT1pLnRhZ05hbWU/aTpudWxsKTtyZXR1cm4gdGhpcy5fc2V0SWNvblN0eWxlcyhuLHQpLG59LF9zZXRJY29uU3R5bGVzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLG49ZVtpKyJTaXplIl07Im51bWJlciI9PXR5cGVvZiBuJiYobj1bbixuXSk7dmFyIG89dyhuKSxzPXcoInNoYWRvdyI9PT1pJiZlLnNoYWRvd0FuY2hvcnx8ZS5pY29uQW5jaG9yfHxvJiZvLmRpdmlkZUJ5KDIsITApKTt0LmNsYXNzTmFtZT0ibGVhZmxldC1tYXJrZXItIitpKyIgIisoZS5jbGFzc05hbWV8fCIiKSxzJiYodC5zdHlsZS5tYXJnaW5MZWZ0PS1zLngrInB4Iix0LnN0eWxlLm1hcmdpblRvcD0tcy55KyJweCIpLG8mJih0LnN0eWxlLndpZHRoPW8ueCsicHgiLHQuc3R5bGUuaGVpZ2h0PW8ueSsicHgiKX0sX2NyZWF0ZUltZzpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGkuc3JjPXQsaX0sX2dldEljb25Vcmw6ZnVuY3Rpb24odCl7cmV0dXJuIFlpJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl18fHRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxYZT1ZZS5leHRlbmQoe29wdGlvbnM6e2ljb25Vcmw6Im1hcmtlci1pY29uLnBuZyIsaWNvblJldGluYVVybDoibWFya2VyLWljb24tMngucG5nIixzaGFkb3dVcmw6Im1hcmtlci1zaGFkb3cucG5nIixpY29uU2l6ZTpbMjUsNDFdLGljb25BbmNob3I6WzEyLDQxXSxwb3B1cEFuY2hvcjpbMSwtMzRdLHRvb2x0aXBBbmNob3I6WzE2LC0yOF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXtyZXR1cm4gWGUuaW1hZ2VQYXRofHwoWGUuaW1hZ2VQYXRoPXRoaXMuX2RldGVjdEljb25QYXRoKCkpLCh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRofHxYZS5pbWFnZVBhdGgpK1llLnByb3RvdHlwZS5fZ2V0SWNvblVybC5jYWxsKHRoaXMsdCl9LF9kZXRlY3RJY29uUGF0aDpmdW5jdGlvbigpe3ZhciB0PUcoImRpdiIsImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGgiLGRvY3VtZW50LmJvZHkpLGk9cSh0LCJiYWNrZ3JvdW5kLWltYWdlIil8fHEodCwiYmFja2dyb3VuZEltYWdlIik7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksaT1udWxsPT09aXx8MCE9PWkuaW5kZXhPZigidXJsIik/IiI6aS5yZXBsYWNlKC9edXJsXChbIiddPy8sIiIpLnJlcGxhY2UoL21hcmtlci1pY29uXC5wbmdbIiddP1wpJC8sIiIpfX0pLEplPUVlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXJrZXI9dH0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIuX2ljb247dGhpcy5fZHJhZ2dhYmxlfHwodGhpcy5fZHJhZ2dhYmxlPW5ldyBSZSh0LHQsITApKSx0aGlzLl9kcmFnZ2FibGUub24oe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxwcmVkcmFnOnRoaXMuX29uUHJlRHJhZyxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcykuZW5hYmxlKCksUSh0LCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmRpc2FibGUoKSx0aGlzLl9tYXJrZXIuX2ljb24mJnR0KHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX2FkanVzdFBhbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXJrZXIsZT1pLl9tYXAsbj10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuU3BlZWQsbz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuUGFkZGluZyxzPWh0KGkuX2ljb24pLHI9ZS5nZXRQaXhlbEJvdW5kcygpLGE9ZS5nZXRQaXhlbE9yaWdpbigpLGg9YihyLm1pbi5fc3VidHJhY3QoYSkuYWRkKG8pLHIubWF4Ll9zdWJ0cmFjdChhKS5zdWJ0cmFjdChvKSk7aWYoIWguY29udGFpbnMocykpe3ZhciB1PXcoKE1hdGgubWF4KGgubWF4Lngscy54KS1oLm1heC54KS8oci5tYXgueC1oLm1heC54KS0oTWF0aC5taW4oaC5taW4ueCxzLngpLWgubWluLngpLyhyLm1pbi54LWgubWluLngpLChNYXRoLm1heChoLm1heC55LHMueSktaC5tYXgueSkvKHIubWF4LnktaC5tYXgueSktKE1hdGgubWluKGgubWluLnkscy55KS1oLm1pbi55KS8oci5taW4ueS1oLm1pbi55KSkubXVsdGlwbHlCeShuKTtlLnBhbkJ5KHUse2FuaW1hdGU6ITF9KSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5fYWRkKHUpLHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZCh1KSxhdChpLl9pY29uLHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zKSx0aGlzLl9vbkRyYWcodCksdGhpcy5fcGFuUmVxdWVzdD1mKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpfX0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fb2xkTGF0TG5nPXRoaXMuX21hcmtlci5nZXRMYXRMbmcoKSx0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoImRyYWdzdGFydCIpfSxfb25QcmVEcmFnOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW4mJihnKHRoaXMuX3BhblJlcXVlc3QpLHRoaXMuX3BhblJlcXVlc3Q9Zih0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLHQpKSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFya2VyLGU9aS5fc2hhZG93LG49aHQoaS5faWNvbiksbz1pLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKG4pO2UmJmF0KGUsbiksaS5fbGF0bG5nPW8sdC5sYXRsbmc9byx0Lm9sZExhdExuZz10aGlzLl9vbGRMYXRMbmcsaS5maXJlKCJtb3ZlIix0KS5maXJlKCJkcmFnIix0KX0sX29uRHJhZ0VuZDpmdW5jdGlvbih0KXtnKHRoaXMuX3BhblJlcXVlc3QpLGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmcsdGhpcy5fbWFya2VyLmZpcmUoIm1vdmVlbmQiKS5maXJlKCJkcmFnZW5kIix0KX19KSwkZT1xZS5leHRlbmQoe29wdGlvbnM6e2ljb246bmV3IFhlLGludGVyYWN0aXZlOiEwLGtleWJvYXJkOiEwLHRpdGxlOiIiLGFsdDoiIix6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTAscGFuZToibWFya2VyUGFuZSIsYnViYmxpbmdNb3VzZUV2ZW50czohMSxkcmFnZ2FibGU6ITEsYXV0b1BhbjohMSxhdXRvUGFuUGFkZGluZzpbNTAsNTBdLGF1dG9QYW5TcGVlZDoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2wodGhpcyxpKSx0aGlzLl9sYXRsbmc9Qyh0KX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMuX3pvb21BbmltYXRlZCYmdC5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sdGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSYmKHRoaXMub3B0aW9ucy5kcmFnZ2FibGU9ITAsdGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpKSxkZWxldGUgdGhpcy5kcmFnZ2luZyx0aGlzLl96b29tQW5pbWF0ZWQmJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5fcmVtb3ZlSWNvbigpLHRoaXMuX3JlbW92ZVNoYWRvdygpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXtyZXR1cm57em9vbTp0aGlzLnVwZGF0ZSx2aWV3cmVzZXQ6dGhpcy51cGRhdGV9fSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbGF0bG5nO3JldHVybiB0aGlzLl9sYXRsbmc9Qyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse29sZExhdExuZzppLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKX0sc2V0SWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb249dCx0aGlzLl9tYXAmJih0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCx0aGlzLl9wb3B1cC5vcHRpb25zKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb259LHVwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2ljb24mJnRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKHQpfXJldHVybiB0aGlzfSxfaW5pdEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT0ibGVhZmxldC16b29tLSIrKHRoaXMuX3pvb21BbmltYXRlZD8iYW5pbWF0ZWQiOiJoaWRlIiksZT10Lmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxuPSExO2UhPT10aGlzLl9pY29uJiYodGhpcy5faWNvbiYmdGhpcy5fcmVtb3ZlSWNvbigpLG49ITAsdC50aXRsZSYmKGUudGl0bGU9dC50aXRsZSksIklNRyI9PT1lLnRhZ05hbWUmJihlLmFsdD10LmFsdHx8IiIpKSxRKGUsaSksdC5rZXlib2FyZCYmKGUudGFiSW5kZXg9IjAiKSx0aGlzLl9pY29uPWUsdC5yaXNlT25Ib3ZlciYmdGhpcy5vbih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pO3ZhciBvPXQuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxzPSExO28hPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxzPSEwKSxvJiYoUShvLGkpLG8uYWx0PSIiKSx0aGlzLl9zaGFkb3c9byx0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLG4mJnRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLG8mJnMmJnRoaXMuZ2V0UGFuZSgic2hhZG93UGFuZSIpLmFwcGVuZENoaWxkKHRoaXMuX3NoYWRvdyl9LF9yZW1vdmVJY29uOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyJiZ0aGlzLm9mZih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pLEsodGhpcy5faWNvbiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJksodGhpcy5fc2hhZG93KSx0aGlzLl9zaGFkb3c9bnVsbH0sX3NldFBvczpmdW5jdGlvbih0KXthdCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmYXQodGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24uc3R5bGUuekluZGV4PXRoaXMuX3pJbmRleCt0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoaSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihRKHRoaXMuX2ljb24sImxlYWZsZXQtaW50ZXJhY3RpdmUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLEplKSl7dmFyIHQ9dGhpcy5vcHRpb25zLmRyYWdnYWJsZTt0aGlzLmRyYWdnaW5nJiYodD10aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSx0aGlzLmRyYWdnaW5nLmRpc2FibGUoKSksdGhpcy5kcmFnZ2luZz1uZXcgSmUodGhpcyksdCYmdGhpcy5kcmFnZ2luZy5lbmFibGUoKX19LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTtudCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmbnQodGhpcy5fc2hhZG93LHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pLFFlPXFlLmV4dGVuZCh7b3B0aW9uczp7c3Ryb2tlOiEwLGNvbG9yOiIjMzM4OGZmIix3ZWlnaHQ6MyxvcGFjaXR5OjEsbGluZUNhcDoicm91bmQiLGxpbmVKb2luOiJyb3VuZCIsZGFzaEFycmF5Om51bGwsZGFzaE9mZnNldDpudWxsLGZpbGw6ITEsZmlsbENvbG9yOm51bGwsZmlsbE9wYWNpdHk6LjIsZmlsbFJ1bGU6ImV2ZW5vZGQiLGludGVyYWN0aXZlOiEwLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0aGlzLHQpLHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXRofSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0KCksdGhpcy5fdXBkYXRlKCl9LF9jbGlja1RvbGVyYW5jZTpmdW5jdGlvbigpe3JldHVybih0aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowKSt0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZX19KSx0bj1RZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITAscmFkaXVzOjEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLGkpLHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMuX3JhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMucmVkcmF3KCksdGhpcy5maXJlKCJtb3ZlIix7bGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dCYmdC5yYWRpdXN8fHRoaXMuX3JhZGl1cztyZXR1cm4gUWUucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhpKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxpPXRoaXMuX3JhZGl1c1l8fHQsZT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QrZSxpK2VdO3RoaXMuX3B4Qm91bmRzPW5ldyBQKHRoaXMuX3BvaW50LnN1YnRyYWN0KG4pLHRoaXMuX3BvaW50LmFkZChuKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBhdGgoKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlQ2lyY2xlKHRoaXMpfSxfZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzJiYhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfX0pLGVuPXRuLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlJiYoZT1pKHt9LG4se3JhZGl1czplfSkpLGwodGhpcyxlKSx0aGlzLl9sYXRsbmc9Qyh0KSxpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX21SYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tUmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLl9yYWRpdXMsdGhpcy5fcmFkaXVzWXx8dGhpcy5fcmFkaXVzXTtyZXR1cm4gbmV3IFQodGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSksdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5hZGQodCkpKX0sc2V0U3R5bGU6UWUucHJvdG90eXBlLnNldFN0eWxlLF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF0bG5nLmxuZyxpPXRoaXMuX2xhdGxuZy5sYXQsZT10aGlzLl9tYXAsbj1lLm9wdGlvbnMuY3JzO2lmKG4uZGlzdGFuY2U9PT1waS5kaXN0YW5jZSl7dmFyIG89TWF0aC5QSS8xODAscz10aGlzLl9tUmFkaXVzL3BpLlIvbyxyPWUucHJvamVjdChbaStzLHRdKSxhPWUucHJvamVjdChbaS1zLHRdKSxoPXIuYWRkKGEpLmRpdmlkZUJ5KDIpLHU9ZS51bnByb2plY3QoaCkubGF0LGw9TWF0aC5hY29zKChNYXRoLmNvcyhzKm8pLU1hdGguc2luKGkqbykqTWF0aC5zaW4odSpvKSkvKE1hdGguY29zKGkqbykqTWF0aC5jb3ModSpvKSkpL287KGlzTmFOKGwpfHwwPT09bCkmJihsPXMvTWF0aC5jb3MoTWF0aC5QSS8xODAqaSkpLHRoaXMuX3BvaW50PWguc3VidHJhY3QoZS5nZXRQaXhlbE9yaWdpbigpKSx0aGlzLl9yYWRpdXM9aXNOYU4obCk/MDpoLngtZS5wcm9qZWN0KFt1LHQtbF0pLngsdGhpcy5fcmFkaXVzWT1oLnktci55fWVsc2V7dmFyIGM9bi51bnByb2plY3Qobi5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsMF0pKTt0aGlzLl9wb2ludD1lLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLHRoaXMuX3JhZGl1cz10aGlzLl9wb2ludC54LWUubGF0TG5nVG9MYXllclBvaW50KGMpLnh9dGhpcy5fdXBkYXRlQm91bmRzKCl9fSksbm49UWUuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49MS8wLG89bnVsbCxzPUR0LHI9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtyPGE7cisrKWZvcih2YXIgaD10aGlzLl9wYXJ0c1tyXSx1PTEsbD1oLmxlbmd0aDt1PGw7dSsrKXt2YXIgYz1zKHQsaT1oW3UtMV0sZT1oW3VdLCEwKTtjPG4mJihuPWMsbz1zKHQsaSxlKSl9cmV0dXJuIG8mJihvLmRpc3RhbmNlPU1hdGguc3FydChuKSksb30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhPXRoaXMuX3JpbmdzWzBdLGg9YS5sZW5ndGg7aWYoIWgpcmV0dXJuIG51bGw7Zm9yKHQ9MCxpPTA7dDxoLTE7dCsrKWkrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWkpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKHQ9MCxuPTA7dDxoLTE7dCsrKWlmKG89YVt0XSxzPWFbdCsxXSxlPW8uZGlzdGFuY2VUbyhzKSwobis9ZSk+aSlyZXR1cm4gcj0obi1pKS9lLHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW3MueC1yKihzLngtby54KSxzLnktcioocy55LW8ueSldKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sYWRkTGF0TG5nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8dGhpcy5fZGVmYXVsdFNoYXBlKCksdD1DKHQpLGkucHVzaCh0KSx0aGlzLl9ib3VuZHMuZXh0ZW5kKHQpLHRoaXMucmVkcmF3KCl9LF9zZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3RoaXMuX2JvdW5kcz1uZXcgVCx0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpfSxfZGVmYXVsdFNoYXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGp0KHRoaXMuX2xhdGxuZ3MpP3RoaXMuX2xhdGxuZ3M6dGhpcy5fbGF0bG5nc1swXX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1bXSxlPWp0KHQpLG49MCxvPXQubGVuZ3RoO248bztuKyspZT8oaVtuXT1DKHRbbl0pLHRoaXMuX2JvdW5kcy5leHRlbmQoaVtuXSkpOmlbbl09dGhpcy5fY29udmVydExhdExuZ3ModFtuXSk7cmV0dXJuIGl9LF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFA7dGhpcy5fcmluZ3M9W10sdGhpcy5fcHJvamVjdExhdGxuZ3ModGhpcy5fbGF0bG5ncyx0aGlzLl9yaW5ncyx0KTt2YXIgaT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLGU9bmV3IHgoaSxpKTt0aGlzLl9ib3VuZHMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKSYmKHQubWluLl9zdWJ0cmFjdChlKSx0Lm1heC5fYWRkKGUpLHRoaXMuX3B4Qm91bmRzPXQpfSxfcHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24odCxpLGUpe3ZhciBuLG8scz10WzBdaW5zdGFuY2VvZiBNLHI9dC5sZW5ndGg7aWYocyl7Zm9yKG89W10sbj0wO248cjtuKyspb1tuXT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRbbl0pLGUuZXh0ZW5kKG9bbl0pO2kucHVzaChvKX1lbHNlIGZvcihuPTA7bjxyO24rKyl0aGlzLl9wcm9qZWN0TGF0bG5ncyh0W25dLGksZSl9LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcztpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2V7dmFyIGksZSxuLG8scyxyLGEsaD10aGlzLl9wYXJ0cztmb3IoaT0wLG49MCxvPXRoaXMuX3JpbmdzLmxlbmd0aDtpPG87aSsrKWZvcihlPTAscz0oYT10aGlzLl9yaW5nc1tpXSkubGVuZ3RoO2U8cy0xO2UrKykocj1JdChhW2VdLGFbZSsxXSx0LGUsITApKSYmKGhbbl09aFtuXXx8W10saFtuXS5wdXNoKHJbMF0pLHJbMV09PT1hW2UrMV0mJmUhPT1zLTJ8fChoW25dLnB1c2goclsxXSksbisrKSl9fSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsaT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXT1adCh0W2VdLGkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKCF0aGlzLl9weEJvdW5kc3x8IXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHQpKXJldHVybiExO2ZvcihlPTAscz10aGlzLl9wYXJ0cy5sZW5ndGg7ZTxzO2UrKylmb3Iobj0wLG89KHI9KGE9dGhpcy5fcGFydHNbZV0pLmxlbmd0aCktMTtuPHI7bz1uKyspaWYoKGl8fDAhPT1uKSYmRXQodCxhW29dLGFbbl0pPD1oKXJldHVybiEwO3JldHVybiExfX0pO25uLl9mbGF0PVd0O3ZhciBvbj1ubi5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITB9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh8fCF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aH0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhLGgsdT10aGlzLl9yaW5nc1swXSxsPXUubGVuZ3RoO2lmKCFsKXJldHVybiBudWxsO2ZvcihzPXI9YT0wLHQ9MCxpPWwtMTt0PGw7aT10KyspZT11W3RdLG49dVtpXSxvPWUueSpuLngtbi55KmUueCxyKz0oZS54K24ueCkqbyxhKz0oZS55K24ueSkqbyxzKz0zKm87cmV0dXJuIGg9MD09PXM/dVswXTpbci9zLGEvc10sdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhoKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe3ZhciBpPW5uLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGU9aS5sZW5ndGg7cmV0dXJuIGU+PTImJmlbMF1pbnN0YW5jZW9mIE0mJmlbMF0uZXF1YWxzKGlbZS0xXSkmJmkucG9wKCksaX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7bm4ucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxqdCh0aGlzLl9sYXRsbmdzKSYmKHRoaXMuX2xhdGxuZ3M9W3RoaXMuX2xhdGxuZ3NdKX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBqdCh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzWzBdOnRoaXMuX2xhdGxuZ3NbMF1bMF19LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxpPXRoaXMub3B0aW9ucy53ZWlnaHQsZT1uZXcgeChpLGkpO2lmKHQ9bmV3IFAodC5taW4uc3VidHJhY3QoZSksdC5tYXguYWRkKGUpKSx0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2UgZm9yKHZhciBuLG89MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtvPHM7bysrKShuPUh0KHRoaXMuX3JpbmdzW29dLHQsITApKS5sZW5ndGgmJnRoaXMuX3BhcnRzLnB1c2gobil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywhMCl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvLHMscixhLGgsdT0hMTtpZighdGhpcy5fcHhCb3VuZHN8fCF0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlyZXR1cm4hMTtmb3Iobz0wLGE9dGhpcy5fcGFydHMubGVuZ3RoO288YTtvKyspZm9yKHM9MCxyPShoPShpPXRoaXMuX3BhcnRzW29dKS5sZW5ndGgpLTE7czxoO3I9cysrKWU9aVtzXSxuPWlbcl0sZS55PnQueSE9bi55PnQueSYmdC54PChuLngtZS54KSoodC55LWUueSkvKG4ueS1lLnkpK2UueCYmKHU9IXUpO3JldHVybiB1fHxubi5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApfX0pLHNuPUtlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2wodGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdCYmdGhpcy5hZGREYXRhKHQpfSxhZGREYXRhOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvPW9pKHQpP3Q6dC5mZWF0dXJlcztpZihvKXtmb3IoaT0wLGU9by5sZW5ndGg7aTxlO2krKykoKG49b1tpXSkuZ2VvbWV0cmllc3x8bi5nZW9tZXRyeXx8bi5mZWF0dXJlc3x8bi5jb29yZGluYXRlcykmJnRoaXMuYWRkRGF0YShuKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm9wdGlvbnM7aWYocy5maWx0ZXImJiFzLmZpbHRlcih0KSlyZXR1cm4gdGhpczt2YXIgcj1GdCh0LHMpO3JldHVybiByPyhyLmZlYXR1cmU9WXQodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLHMub25FYWNoRmVhdHVyZSYmcy5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKSk6dGhpc30scmVzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcHRpb25zPWkoe30sdC5kZWZhdWx0T3B0aW9ucyksdGhpcy5fc2V0TGF5ZXJTdHlsZSh0LHRoaXMub3B0aW9ucy5zdHlsZSksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGkpe3RoaXMuX3NldExheWVyU3R5bGUoaSx0KX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsaSl7ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkodC5mZWF0dXJlKSksdC5zZXRTdHlsZSYmdC5zZXRTdHlsZShpKX19KSxybj17dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3JldHVybiBLdCh0aGlzLHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6cXQodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07JGUuaW5jbHVkZShybiksZW4uaW5jbHVkZShybiksdG4uaW5jbHVkZShybiksbm4uaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPSFqdCh0aGlzLl9sYXRsbmdzKSxlPUd0KHRoaXMuX2xhdGxuZ3MsaT8xOjAsITEsdCk7cmV0dXJuIEt0KHRoaXMse3R5cGU6KGk/Ik11bHRpIjoiIikrIkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmV9KX19KSxvbi5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24odCl7dmFyIGk9IWp0KHRoaXMuX2xhdGxuZ3MpLGU9aSYmIWp0KHRoaXMuX2xhdGxuZ3NbMF0pLG49R3QodGhpcy5fbGF0bG5ncyxlPzI6aT8xOjAsITAsdCk7cmV0dXJuIGl8fChuPVtuXSksS3QodGhpcyx7dHlwZTooZT8iTXVsdGkiOiIiKSsiUG9seWdvbiIsY29vcmRpbmF0ZXM6bn0pfX0pLEdlLmluY2x1ZGUoe3RvTXVsdGlQb2ludDpmdW5jdGlvbih0KXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oZSl7aS5wdXNoKGUudG9HZW9KU09OKHQpLmdlb21ldHJ5LmNvb3JkaW5hdGVzKX0pLEt0KHRoaXMse3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOml9KX0sdG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5JiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnkudHlwZTtpZigiTXVsdGlQb2ludCI9PT1pKXJldHVybiB0aGlzLnRvTXVsdGlQb2ludCh0KTt2YXIgZT0iR2VvbWV0cnlDb2xsZWN0aW9uIj09PWksbj1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oaSl7aWYoaS50b0dlb0pTT04pe3ZhciBvPWkudG9HZW9KU09OKHQpO2lmKGUpbi5wdXNoKG8uZ2VvbWV0cnkpO2Vsc2V7dmFyIHM9WXQobyk7IkZlYXR1cmVDb2xsZWN0aW9uIj09PXMudHlwZT9uLnB1c2guYXBwbHkobixzLmZlYXR1cmVzKTpuLnB1c2gocyl9fX0pLGU/S3QodGhpcyx7Z2VvbWV0cmllczpuLHR5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiJ9KTp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm59fX0pO3ZhciBhbj1YdCxobj1xZS5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6IiIsaW50ZXJhY3RpdmU6ITEsY3Jvc3NPcmlnaW46ITEsZXJyb3JPdmVybGF5VXJsOiIiLHpJbmRleDoxLGNsYXNzTmFtZToiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPXooaSksbCh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihRKHRoaXMuX2ltYWdlLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSkpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKSx0aGlzLl9yZXNldCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe0sodGhpcy5faW1hZ2UpLHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5faW1hZ2UmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGFjaXR5JiZ0aGlzLnNldE9wYWNpdHkodC5vcGFjaXR5KSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZYKHRoaXMuX2ltYWdlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJkoodGhpcy5faW1hZ2UpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXJsPXQsdGhpcy5faW1hZ2UmJih0aGlzLl9pbWFnZS5zcmM9dCksdGhpc30sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ib3VuZHM9eih0KSx0aGlzLl9tYXAmJnRoaXMuX3Jlc2V0KCksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3pvb206dGhpcy5fcmVzZXQsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0fTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9hbmltYXRlWm9vbSksdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZX0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PSJJTUciPT09dGhpcy5fdXJsLnRhZ05hbWUsaT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpHKCJpbWciKTtRKGksImxlYWZsZXQtaW1hZ2UtbGF5ZXIiKSx0aGlzLl96b29tQW5pbWF0ZWQmJlEoaSwibGVhZmxldC16b29tLWFuaW1hdGVkIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmUShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZD1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksaS5vbmVycm9yPWUodGhpcy5fb3ZlcmxheU9uRXJyb3IsdGhpcywiZXJyb3IiKSwodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2lufHwiIj09PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbikmJihpLmNyb3NzT3JpZ2luPSEwPT09dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luPyIiOnRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiksdGhpcy5vcHRpb25zLnpJbmRleCYmdGhpcy5fdXBkYXRlWkluZGV4KCksdD90aGlzLl91cmw9aS5zcmM6KGkuc3JjPXRoaXMuX3VybCxpLmFsdD10aGlzLm9wdGlvbnMuYWx0KX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5nZXRab29tU2NhbGUodC56b29tKSxlPXRoaXMuX21hcC5fbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kcyh0aGlzLl9ib3VuZHMsdC56b29tLHQuY2VudGVyKS5taW47cnQodGhpcy5faW1hZ2UsZSxpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW1hZ2UsaT1uZXcgUCh0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXROb3J0aFdlc3QoKSksdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0U291dGhFYXN0KCkpKSxlPWkuZ2V0U2l6ZSgpO2F0KHQsaS5taW4pLHQuc3R5bGUud2lkdGg9ZS54KyJweCIsdC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7bnQodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2UmJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfb3ZlcmxheU9uRXJyb3I6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImVycm9yIik7dmFyIHQ9dGhpcy5vcHRpb25zLmVycm9yT3ZlcmxheVVybDt0JiZ0aGlzLl91cmwhPT10JiYodGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXQpfX0pLHVuPWhuLmV4dGVuZCh7b3B0aW9uczp7YXV0b3BsYXk6ITAsbG9vcDohMH0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PSJWSURFTyI9PT10aGlzLl91cmwudGFnTmFtZSxpPXRoaXMuX2ltYWdlPXQ/dGhpcy5fdXJsOkcoInZpZGVvIik7aWYoUShpLCJsZWFmbGV0LWltYWdlLWxheWVyIiksdGhpcy5fem9vbUFuaW1hdGVkJiZRKGksImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZGVkZGF0YT1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksdCl7Zm9yKHZhciBuPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNvdXJjZSIpLG89W10scz0wO3M8bi5sZW5ndGg7cysrKW8ucHVzaChuW3NdLnNyYyk7dGhpcy5fdXJsPW4ubGVuZ3RoPjA/bzpbaS5zcmNdfWVsc2V7b2kodGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksaS5hdXRvcGxheT0hIXRoaXMub3B0aW9ucy5hdXRvcGxheSxpLmxvb3A9ISF0aGlzLm9wdGlvbnMubG9vcDtmb3IodmFyIGE9MDthPHRoaXMuX3VybC5sZW5ndGg7YSsrKXt2YXIgaD1HKCJzb3VyY2UiKTtoLnNyYz10aGlzLl91cmxbYV0saS5hcHBlbmRDaGlsZChoKX19fX0pLGxuPXFlLmV4dGVuZCh7b3B0aW9uczp7b2Zmc2V0OlswLDddLGNsYXNzTmFtZToiIixwYW5lOiJwb3B1cFBhbmUifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1pfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl96b29tQW5pbWF0ZWQ9dC5fem9vbUFuaW1hdGVkLHRoaXMuX2NvbnRhaW5lcnx8dGhpcy5faW5pdExheW91dCgpLHQuX2ZhZGVBbmltYXRlZCYmbnQodGhpcy5fY29udGFpbmVyLDApLGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMudXBkYXRlKCksdC5fZmFkZUFuaW1hdGVkJiZudCh0aGlzLl9jb250YWluZXIsMSksdGhpcy5icmluZ1RvRnJvbnQoKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fZmFkZUFuaW1hdGVkPyhudCh0aGlzLl9jb250YWluZXIsMCksdGhpcy5fcmVtb3ZlVGltZW91dD1zZXRUaW1lb3V0KGUoSyx2b2lkIDAsdGhpcy5fY29udGFpbmVyKSwyMDApKTpLKHRoaXMuX2NvbnRhaW5lcil9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPUModCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hZGp1c3RQYW4oKSksdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxzZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb250ZW50PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIsdGhpcy5fYWRqdXN0UGFuKCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17em9vbTp0aGlzLl91cGRhdGVQb3NpdGlvbix2aWV3cmVzZXQ6dGhpcy5fdXBkYXRlUG9zaXRpb259O3JldHVybiB0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZYKHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZKKHRoaXMuX2NvbnRhaW5lciksdGhpc30sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250ZW50KXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb250ZW50P3RoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlfHx0aGlzKTp0aGlzLl9jb250ZW50O2lmKCJzdHJpbmciPT10eXBlb2YgaSl0LmlubmVySFRNTD1pO2Vsc2V7Zm9yKDt0Lmhhc0NoaWxkTm9kZXMoKTspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3QuYXBwZW5kQ2hpbGQoaSl9dGhpcy5maXJlKCJjb250ZW50dXBkYXRlIil9fSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSxpPXcodGhpcy5vcHRpb25zLm9mZnNldCksZT10aGlzLl9nZXRBbmNob3IoKTt0aGlzLl96b29tQW5pbWF0ZWQ/YXQodGhpcy5fY29udGFpbmVyLHQuYWRkKGUpKTppPWkuYWRkKHQpLmFkZChlKTt2YXIgbj10aGlzLl9jb250YWluZXJCb3R0b209LWkueSxvPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikraS54O3RoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209bisicHgiLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5sZWZ0PW8rInB4In19LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm5bMCwwXX19KSxjbj1sbi5leHRlbmQoe29wdGlvbnM6e21heFdpZHRoOjMwMCxtaW5XaWR0aDo1MCxtYXhIZWlnaHQ6bnVsbCxhdXRvUGFuOiEwLGF1dG9QYW5QYWRkaW5nVG9wTGVmdDpudWxsLGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6bnVsbCxhdXRvUGFuUGFkZGluZzpbNSw1XSxrZWVwSW5WaWV3OiExLGNsb3NlQnV0dG9uOiEwLGF1dG9DbG9zZTohMCxjbG9zZU9uRXNjYXBlS2V5OiEwLGNsYXNzTmFtZToiIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW5Qb3B1cCh0aGlzKSx0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXtsbi5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHQuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2YgUWV8fHRoaXMuX3NvdXJjZS5vbigicHJlY2xpY2siLHl0KSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe2xuLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIFFlfHx0aGlzLl9zb3VyY2Uub2ZmKCJwcmVjbGljayIseXQpKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9bG4ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybih2b2lkIDAhPT10aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrP3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s6dGhpcy5fbWFwLm9wdGlvbnMuY2xvc2VQb3B1cE9uQ2xpY2spJiYodC5wcmVjbGljaz10aGlzLl9jbG9zZSksdGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0Lm1vdmVlbmQ9dGhpcy5fYWRqdXN0UGFuKSx0fSxfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5jbG9zZVBvcHVwKHRoaXMpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LXBvcHVwIixpPXRoaXMuX2NvbnRhaW5lcj1HKCJkaXYiLHQrIiAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSxlPXRoaXMuX3dyYXBwZXI9RygiZGl2Iix0KyItY29udGVudC13cmFwcGVyIixpKTtpZih0aGlzLl9jb250ZW50Tm9kZT1HKCJkaXYiLHQrIi1jb250ZW50IixlKSx3dChlKSx4dCh0aGlzLl9jb250ZW50Tm9kZSksbXQoZSwiY29udGV4dG1lbnUiLHl0KSx0aGlzLl90aXBDb250YWluZXI9RygiZGl2Iix0KyItdGlwLWNvbnRhaW5lciIsaSksdGhpcy5fdGlwPUcoImRpdiIsdCsiLXRpcCIsdGhpcy5fdGlwQ29udGFpbmVyKSx0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pe3ZhciBuPXRoaXMuX2Nsb3NlQnV0dG9uPUcoImEiLHQrIi1jbG9zZS1idXR0b24iLGkpO24uaHJlZj0iI2Nsb3NlIixuLmlubmVySFRNTD0iJiMyMTU7IixtdChuLCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpfX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGk9dC5zdHlsZTtpLndpZHRoPSIiLGkud2hpdGVTcGFjZT0ibm93cmFwIjt2YXIgZT10Lm9mZnNldFdpZHRoO2U9TWF0aC5taW4oZSx0aGlzLm9wdGlvbnMubWF4V2lkdGgpLGU9TWF0aC5tYXgoZSx0aGlzLm9wdGlvbnMubWluV2lkdGgpLGkud2lkdGg9ZSsxKyJweCIsaS53aGl0ZVNwYWNlPSIiLGkuaGVpZ2h0PSIiO3ZhciBuPXQub2Zmc2V0SGVpZ2h0LG89dGhpcy5vcHRpb25zLm1heEhlaWdodDtvJiZuPm8/KGkuaGVpZ2h0PW8rInB4IixRKHQsImxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQiKSk6dHQodCwibGVhZmxldC1wb3B1cC1zY3JvbGxlZCIpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLGU9dGhpcy5fZ2V0QW5jaG9yKCk7YXQodGhpcy5fY29udGFpbmVyLGkuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5hdXRvUGFuKXt0aGlzLl9tYXAuX3BhbkFuaW0mJnRoaXMuX21hcC5fcGFuQW5pbS5zdG9wKCk7dmFyIHQ9dGhpcy5fbWFwLGk9cGFyc2VJbnQocSh0aGlzLl9jb250YWluZXIsIm1hcmdpbkJvdHRvbSIpLDEwKXx8MCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQraSxuPXRoaXMuX2NvbnRhaW5lcldpZHRoLG89bmV3IHgodGhpcy5fY29udGFpbmVyTGVmdCwtZS10aGlzLl9jb250YWluZXJCb3R0b20pO28uX2FkZChodCh0aGlzLl9jb250YWluZXIpKTt2YXIgcz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG8pLHI9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLGE9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxyKSxoPXcodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fHIpLHU9dC5nZXRTaXplKCksbD0wLGM9MDtzLngrbitoLng+dS54JiYobD1zLngrbi11LngraC54KSxzLngtbC1hLng8MCYmKGw9cy54LWEueCkscy55K2UraC55PnUueSYmKGM9cy55K2UtdS55K2gueSkscy55LWMtYS55PDAmJihjPXMueS1hLnkpLChsfHxjKSYmdC5maXJlKCJhdXRvcGFuc3RhcnQiKS5wYW5CeShbbCxjXSl9fSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksTHQodCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3I/dGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpOlswLDBdKX19KTtiZS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksYmUuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNufHwodD1uZXcgY24oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOih0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnRoaXMuY2xvc2VQb3B1cCgpLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KSl9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQhPT10aGlzLl9wb3B1cHx8KHQ9dGhpcy5fcG9wdXAsdGhpcy5fcG9wdXA9bnVsbCksdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLHFlLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGkpe3JldHVybiB0IGluc3RhbmNlb2YgY24/KGwodCxpKSx0aGlzLl9wb3B1cD10LHQuX3NvdXJjZT10aGlzKToodGhpcy5fcG9wdXAmJiFpfHwodGhpcy5fcG9wdXA9bmV3IGNuKGksdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITApLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5vZmYoe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEsdGhpcy5fcG9wdXA9bnVsbCksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQsaSl7aWYodCBpbnN0YW5jZW9mIHFlfHwoaT10LHQ9dGhpcyksdCBpbnN0YW5jZW9mIEtlKWZvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpe3Q9dGhpcy5fbGF5ZXJzW2VdO2JyZWFrfXJldHVybiBpfHwoaT10LmdldENlbnRlcj90LmdldENlbnRlcigpOnQuZ2V0TGF0TG5nKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJih0aGlzLl9wb3B1cC5fc291cmNlPXQsdGhpcy5fcG9wdXAudXBkYXRlKCksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCxpKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX21hcD90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0KSksdGhpc30saXNQb3B1cE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5pc09wZW4oKX0sc2V0UG9wdXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt2YXIgaT10LmxheWVyfHx0LnRhcmdldDt0aGlzLl9wb3B1cCYmdGhpcy5fbWFwJiYoTHQodCksaSBpbnN0YW5jZW9mIFFlP3RoaXMub3BlblBvcHVwKHQubGF5ZXJ8fHQudGFyZ2V0LHQubGF0bG5nKTp0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiZ0aGlzLl9wb3B1cC5fc291cmNlPT09aT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cChpLHQubGF0bG5nKSl9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10Lm9yaWdpbmFsRXZlbnQua2V5Q29kZSYmdGhpcy5fb3BlblBvcHVwKHQpfX0pO3ZhciBfbj1sbi5leHRlbmQoe29wdGlvbnM6e3BhbmU6InRvb2x0aXBQYW5lIixvZmZzZXQ6WzAsMF0sZGlyZWN0aW9uOiJhdXRvIixwZXJtYW5lbnQ6ITEsc3RpY2t5OiExLGludGVyYWN0aXZlOiExLG9wYWNpdHk6Ljl9LG9uQWRkOmZ1bmN0aW9uKHQpe2xuLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCksdGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KSx0LmZpcmUoInRvb2x0aXBvcGVuIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgidG9vbHRpcG9wZW4iLHt0b29sdGlwOnRoaXN9LCEwKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7bG4ucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30sITApfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1sbi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHFpJiYhdGhpcy5vcHRpb25zLnBlcm1hbmVudCYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlVG9vbHRpcCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD0ibGVhZmxldC10b29sdGlwICIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fCIiKSsiIGxlYWZsZXQtem9vbS0iKyh0aGlzLl96b29tQW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpO3RoaXMuX2NvbnRlbnROb2RlPXRoaXMuX2NvbnRhaW5lcj1HKCJkaXYiLHQpfSxfdXBkYXRlTGF5b3V0OmZ1bmN0aW9uKCl7fSxfYWRqdXN0UGFuOmZ1bmN0aW9uKCl7fSxfc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9dGhpcy5fY29udGFpbmVyLG49aS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Q2VudGVyKCkpLG89aS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxzPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24scj1lLm9mZnNldFdpZHRoLGE9ZS5vZmZzZXRIZWlnaHQsaD13KHRoaXMub3B0aW9ucy5vZmZzZXQpLHU9dGhpcy5fZ2V0QW5jaG9yKCk7InRvcCI9PT1zP3Q9dC5hZGQodygtci8yK2gueCwtYStoLnkrdS55LCEwKSk6ImJvdHRvbSI9PT1zP3Q9dC5zdWJ0cmFjdCh3KHIvMi1oLngsLWgueSwhMCkpOiJjZW50ZXIiPT09cz90PXQuc3VidHJhY3QodyhyLzIraC54LGEvMi11LnkraC55LCEwKSk6InJpZ2h0Ij09PXN8fCJhdXRvIj09PXMmJm8ueDxuLng/KHM9InJpZ2h0Iix0PXQuYWRkKHcoaC54K3UueCx1LnktYS8yK2gueSwhMCkpKToocz0ibGVmdCIsdD10LnN1YnRyYWN0KHcocit1LngtaC54LGEvMi11LnktaC55LCEwKSkpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1yaWdodCIpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1sZWZ0IiksdHQoZSwibGVhZmxldC10b29sdGlwLXRvcCIpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1ib3R0b20iKSxRKGUsImxlYWZsZXQtdG9vbHRpcC0iK3MpLGF0KGUsdCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2NvbnRhaW5lciYmbnQodGhpcy5fY29udGFpbmVyLHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7dGhpcy5fc2V0UG9zaXRpb24oaSl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciYmIXRoaXMub3B0aW9ucy5zdGlja3k/dGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yKCk6WzAsMF0pfX0pO2JlLmluY2x1ZGUoe29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIF9ufHwodD1uZXcgX24oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOnRoaXMuYWRkTGF5ZXIodCl9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLHFlLmluY2x1ZGUoe2JpbmRUb29sdGlwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfbj8obCh0LGkpLHRoaXMuX3Rvb2x0aXA9dCx0Ll9zb3VyY2U9dGhpcyk6KHRoaXMuX3Rvb2x0aXAmJiFpfHwodGhpcy5fdG9vbHRpcD1uZXcgX24oaSx0aGlzKSksdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpKSx0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQmJnRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpJiZ0aGlzLm9wZW5Ub29sdGlwKCksdGhpc30sdW5iaW5kVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoITApLHRoaXMuY2xvc2VUb29sdGlwKCksdGhpcy5fdG9vbHRpcD1udWxsKSx0aGlzfSxfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6ZnVuY3Rpb24odCl7aWYodHx8IXRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkKXt2YXIgaT10PyJvZmYiOiJvbiIsZT17cmVtb3ZlOnRoaXMuY2xvc2VUb29sdGlwLG1vdmU6dGhpcy5fbW92ZVRvb2x0aXB9O3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQ/ZS5hZGQ9dGhpcy5fb3BlblRvb2x0aXA6KGUubW91c2VvdmVyPXRoaXMuX29wZW5Ub29sdGlwLGUubW91c2VvdXQ9dGhpcy5jbG9zZVRvb2x0aXAsdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmKGUubW91c2Vtb3ZlPXRoaXMuX21vdmVUb29sdGlwKSxxaSYmKGUuY2xpY2s9dGhpcy5fb3BlblRvb2x0aXApKSx0aGlzW2ldKGUpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0fX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCxpKXtpZih0IGluc3RhbmNlb2YgcWV8fChpPXQsdD10aGlzKSx0IGluc3RhbmNlb2YgS2UpZm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dD10aGlzLl9sYXllcnNbZV07YnJlYWt9cmV0dXJuIGl8fChpPXQuZ2V0Q2VudGVyP3QuZ2V0Q2VudGVyKCk6dC5nZXRMYXRMbmcoKSksdGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiYodGhpcy5fdG9vbHRpcC5fc291cmNlPXQsdGhpcy5fdG9vbHRpcC51cGRhdGUoKSx0aGlzLl9tYXAub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcCxpKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKFEodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyLCJsZWFmbGV0LWNsaWNrYWJsZSIpLHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fY2xvc2UoKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKHR0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwibGVhZmxldC1jbGlja2FibGUiKSx0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikpKSx0aGlzfSx0b2dnbGVUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fbWFwP3RoaXMuY2xvc2VUb29sdGlwKCk6dGhpcy5vcGVuVG9vbHRpcCh0KSksdGhpc30saXNUb29sdGlwT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwLmlzT3BlbigpfSxzZXRUb29sdGlwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdG9vbHRpcCYmdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpLHRoaXN9LGdldFRvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcH0sX29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPXQubGF5ZXJ8fHQudGFyZ2V0O3RoaXMuX3Rvb2x0aXAmJnRoaXMuX21hcCYmdGhpcy5vcGVuVG9vbHRpcChpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3k/dC5sYXRsbmc6dm9pZCAwKX0sX21vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10LmxhdGxuZzt0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiZ0Lm9yaWdpbmFsRXZlbnQmJihpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0Lm9yaWdpbmFsRXZlbnQpLGU9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLG49dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhlKSksdGhpcy5fdG9vbHRpcC5zZXRMYXRMbmcobil9fSk7dmFyIGRuPVllLmV4dGVuZCh7b3B0aW9uczp7aWNvblNpemU6WzEyLDEyXSxodG1sOiExLGJnUG9zOm51bGwsY2xhc3NOYW1lOiJsZWFmbGV0LWRpdi1pY29uIn0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXt2YXIgaT10JiYiRElWIj09PXQudGFnTmFtZT90OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9dGhpcy5vcHRpb25zO2lmKGkuaW5uZXJIVE1MPSExIT09ZS5odG1sP2UuaHRtbDoiIixlLmJnUG9zKXt2YXIgbj13KGUuYmdQb3MpO2kuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1uLngrInB4ICIrLW4ueSsicHgifXJldHVybiB0aGlzLl9zZXRJY29uU3R5bGVzKGksImljb24iKSxpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KTtZZS5EZWZhdWx0PVhlO3ZhciBwbj1xZS5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6V2ksdXBkYXRlV2hlblpvb21pbmc6ITAsdXBkYXRlSW50ZXJ2YWw6MjAwLHpJbmRleDoxLGJvdW5kczpudWxsLG1pblpvb206MCxtYXhab29tOnZvaWQgMCxtYXhOYXRpdmVab29tOnZvaWQgMCxtaW5OYXRpdmVab29tOnZvaWQgMCxub1dyYXA6ITEscGFuZToidGlsZVBhbmUiLGNsYXNzTmFtZToiIixrZWVwQnVmZmVyOjJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl9sZXZlbHM9e30sdGhpcy5fdGlsZXM9e30sdGhpcy5fcmVzZXRWaWV3KCksdGhpcy5fdXBkYXRlKCl9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0Ll9hZGRab29tTGltaXQodGhpcyl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksSyh0aGlzLl9jb250YWluZXIpLHQuX3JlbW92ZVpvb21MaW1pdCh0aGlzKSx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl90aWxlWm9vbT12b2lkIDB9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihYKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKEoodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KE1hdGgubWluKSksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3ByZXJlc2V0OnRoaXMuX2ludmFsaWRhdGVBbGwsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0Vmlldyx6b29tOnRoaXMuX3Jlc2V0Vmlldyxtb3ZlZW5kOnRoaXMuX29uTW92ZUVuZH07cmV0dXJuIHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX29uTW92ZXx8KHRoaXMuX29uTW92ZT1vKHRoaXMuX29uTW92ZUVuZCx0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsdGhpcykpLHQubW92ZT10aGlzLl9vbk1vdmUpLHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9LGdldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnRpbGVTaXplO3JldHVybiB0IGluc3RhbmNlb2YgeD90Om5ldyB4KHQsdCl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXImJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10aGlzLm9wdGlvbnMuekluZGV4KX0sX3NldEF1dG9aSW5kZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9dGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sbj0tdCgtMS8wLDEvMCksbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylpPWVbb10uc3R5bGUuekluZGV4LGVbb10hPT10aGlzLl9jb250YWluZXImJmkmJihuPXQobiwraSkpO2lzRmluaXRlKG4pJiYodGhpcy5vcHRpb25zLnpJbmRleD1uK3QoLTEsMSksdGhpcy5fdXBkYXRlWkluZGV4KCkpfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmIUxpKXtudCh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0PStuZXcgRGF0ZSxpPSExLGU9ITE7Zm9yKHZhciBuIGluIHRoaXMuX3RpbGVzKXt2YXIgbz10aGlzLl90aWxlc1tuXTtpZihvLmN1cnJlbnQmJm8ubG9hZGVkKXt2YXIgcz1NYXRoLm1pbigxLCh0LW8ubG9hZGVkKS8yMDApO250KG8uZWwscyksczwxP2k9ITA6KG8uYWN0aXZlP2U9ITA6dGhpcy5fb25PcGFxdWVUaWxlKG8pLG8uYWN0aXZlPSEwKX19ZSYmIXRoaXMuX25vUHJ1bmUmJnRoaXMuX3BydW5lVGlsZXMoKSxpJiYoZyh0aGlzLl9mYWRlRnJhbWUpLHRoaXMuX2ZhZGVGcmFtZT1mKHRoaXMuX3VwZGF0ZU9wYWNpdHksdGhpcykpfX0sX29uT3BhcXVlVGlsZTpyLF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPUcoImRpdiIsImxlYWZsZXQtbGF5ZXIgIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8IiIpKSx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSl9LF91cGRhdGVMZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpdGhpcy5fbGV2ZWxzW2VdLmVsLmNoaWxkcmVuLmxlbmd0aHx8ZT09PXQ/KHRoaXMuX2xldmVsc1tlXS5lbC5zdHlsZS56SW5kZXg9aS1NYXRoLmFicyh0LWUpLHRoaXMuX29uVXBkYXRlTGV2ZWwoZSkpOihLKHRoaXMuX2xldmVsc1tlXS5lbCksdGhpcy5fcmVtb3ZlVGlsZXNBdFpvb20oZSksdGhpcy5fb25SZW1vdmVMZXZlbChlKSxkZWxldGUgdGhpcy5fbGV2ZWxzW2VdKTt2YXIgbj10aGlzLl9sZXZlbHNbdF0sbz10aGlzLl9tYXA7cmV0dXJuIG58fCgobj10aGlzLl9sZXZlbHNbdF09e30pLmVsPUcoImRpdiIsImxlYWZsZXQtdGlsZS1jb250YWluZXIgbGVhZmxldC16b29tLWFuaW1hdGVkIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWksbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksbi5lbC5vZmZzZXRXaWR0aCx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1uLG59fSxfb25VcGRhdGVMZXZlbDpyLF9vblJlbW92ZUxldmVsOnIsX29uQ3JlYXRlTGV2ZWw6cixfcHJ1bmVUaWxlczpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQsaSxlPXRoaXMuX21hcC5nZXRab29tKCk7aWYoZT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8ZTx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGk9dGhpcy5fdGlsZXNbdF0pLnJldGFpbj1pLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpaWYoKGk9dGhpcy5fdGlsZXNbdF0pLmN1cnJlbnQmJiFpLmFjdGl2ZSl7dmFyIG49aS5jb29yZHM7dGhpcy5fcmV0YWluUGFyZW50KG4ueCxuLnksbi56LG4uei01KXx8dGhpcy5fcmV0YWluQ2hpbGRyZW4obi54LG4ueSxuLnosbi56KzIpfWZvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLnJldGFpbnx8dGhpcy5fcmVtb3ZlVGlsZSh0KX19fSxfcmVtb3ZlVGlsZXNBdFpvb206ZnVuY3Rpb24odCl7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW2ldLmNvb3Jkcy56PT09dCYmdGhpcy5fcmVtb3ZlVGlsZShpKX0sX3JlbW92ZUFsbFRpbGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCl9LF9pbnZhbGlkYXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xldmVscylLKHRoaXMuX2xldmVsc1t0XS5lbCksdGhpcy5fb25SZW1vdmVMZXZlbCh0KSxkZWxldGUgdGhpcy5fbGV2ZWxzW3RdO3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksdGhpcy5fdGlsZVpvb209dm9pZCAwfSxfcmV0YWluUGFyZW50OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPU1hdGguZmxvb3IodC8yKSxzPU1hdGguZmxvb3IoaS8yKSxyPWUtMSxhPW5ldyB4KCtvLCtzKTthLno9K3I7dmFyIGg9dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGEpLHU9dGhpcy5fdGlsZXNbaF07cmV0dXJuIHUmJnUuYWN0aXZlPyh1LnJldGFpbj0hMCwhMCk6KHUmJnUubG9hZGVkJiYodS5yZXRhaW49ITApLHI+biYmdGhpcy5fcmV0YWluUGFyZW50KG8scyxyLG4pKX0sX3JldGFpbkNoaWxkcmVuOmZ1bmN0aW9uKHQsaSxlLG4pe2Zvcih2YXIgbz0yKnQ7bzwyKnQrMjtvKyspZm9yKHZhciBzPTIqaTtzPDIqaSsyO3MrKyl7dmFyIHI9bmV3IHgobyxzKTtyLno9ZSsxO3ZhciBhPXRoaXMuX3RpbGVDb29yZHNUb0tleShyKSxoPXRoaXMuX3RpbGVzW2FdO2gmJmguYWN0aXZlP2gucmV0YWluPSEwOihoJiZoLmxvYWRlZCYmKGgucmV0YWluPSEwKSxlKzE8biYmdGhpcy5fcmV0YWluQ2hpbGRyZW4obyxzLGUrMSxuKSl9fSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBpPXQmJih0LnBpbmNofHx0LmZseVRvKTt0aGlzLl9zZXRWaWV3KHRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl9tYXAuZ2V0Wm9vbSgpLGksaSl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9zZXRWaWV3KHQuY2VudGVyLHQuem9vbSwhMCx0Lm5vVXBkYXRlKX0sX2NsYW1wWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHZvaWQgMCE9PWkubWluTmF0aXZlWm9vbSYmdDxpLm1pbk5hdGl2ZVpvb20/aS5taW5OYXRpdmVab29tOnZvaWQgMCE9PWkubWF4TmF0aXZlWm9vbSYmaS5tYXhOYXRpdmVab29tPHQ/aS5tYXhOYXRpdmVab29tOnR9LF9zZXRWaWV3OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPXRoaXMuX2NsYW1wWm9vbShNYXRoLnJvdW5kKGkpKTsodm9pZCAwIT09dGhpcy5vcHRpb25zLm1heFpvb20mJm8+dGhpcy5vcHRpb25zLm1heFpvb218fHZvaWQgMCE9PXRoaXMub3B0aW9ucy5taW5ab29tJiZvPHRoaXMub3B0aW9ucy5taW5ab29tKSYmKG89dm9pZCAwKTt2YXIgcz10aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcmJm8hPT10aGlzLl90aWxlWm9vbTtuJiYhc3x8KHRoaXMuX3RpbGVab29tPW8sdGhpcy5fYWJvcnRMb2FkaW5nJiZ0aGlzLl9hYm9ydExvYWRpbmcoKSx0aGlzLl91cGRhdGVMZXZlbHMoKSx0aGlzLl9yZXNldEdyaWQoKSx2b2lkIDAhPT1vJiZ0aGlzLl91cGRhdGUodCksZXx8dGhpcy5fcHJ1bmVUaWxlcygpLHRoaXMuX25vUHJ1bmU9ISFlKSx0aGlzLl9zZXRab29tVHJhbnNmb3Jtcyh0LGkpfSxfc2V0Wm9vbVRyYW5zZm9ybXM6ZnVuY3Rpb24odCxpKXtmb3IodmFyIGUgaW4gdGhpcy5fbGV2ZWxzKXRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2VdLHQsaSl9LF9zZXRab29tVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUsdC56b29tKSxvPXQub3JpZ2luLm11bHRpcGx5Qnkobikuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihpLGUpKS5yb3VuZCgpO2ppP3J0KHQuZWwsbyxuKTphdCh0LmVsLG8pfSxfcmVzZXRHcmlkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5vcHRpb25zLmNycyxlPXRoaXMuX3RpbGVTaXplPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXRoaXMuX3RpbGVab29tLG89dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHModGhpcy5fdGlsZVpvb20pO28mJih0aGlzLl9nbG9iYWxUaWxlUmFuZ2U9dGhpcy5fcHhCb3VuZHNUb1RpbGVSYW5nZShvKSksdGhpcy5fd3JhcFg9aS53cmFwTG5nJiYhdGhpcy5vcHRpb25zLm5vV3JhcCYmW01hdGguZmxvb3IodC5wcm9qZWN0KFswLGkud3JhcExuZ1swXV0sbikueC9lLngpLE1hdGguY2VpbCh0LnByb2plY3QoWzAsaS53cmFwTG5nWzFdXSxuKS54L2UueSldLHRoaXMuX3dyYXBZPWkud3JhcExhdCYmIXRoaXMub3B0aW9ucy5ub1dyYXAmJltNYXRoLmZsb29yKHQucHJvamVjdChbaS53cmFwTGF0WzBdLDBdLG4pLnkvZS54KSxNYXRoLmNlaWwodC5wcm9qZWN0KFtpLndyYXBMYXRbMV0sMF0sbikueS9lLnkpXX0sX29uTW92ZUVuZDpmdW5jdGlvbigpe3RoaXMuX21hcCYmIXRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fdXBkYXRlKCl9LF9nZXRUaWxlZFBpeGVsQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPWkuX2FuaW1hdGluZ1pvb20/TWF0aC5tYXgoaS5fYW5pbWF0ZVRvWm9vbSxpLmdldFpvb20oKSk6aS5nZXRab29tKCksbj1pLmdldFpvb21TY2FsZShlLHRoaXMuX3RpbGVab29tKSxvPWkucHJvamVjdCh0LHRoaXMuX3RpbGVab29tKS5mbG9vcigpLHM9aS5nZXRTaXplKCkuZGl2aWRlQnkoMipuKTtyZXR1cm4gbmV3IFAoby5zdWJ0cmFjdChzKSxvLmFkZChzKSl9LF91cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO2lmKGkpe3ZhciBlPXRoaXMuX2NsYW1wWm9vbShpLmdldFpvb20oKSk7aWYodm9pZCAwPT09dCYmKHQ9aS5nZXRDZW50ZXIoKSksdm9pZCAwIT09dGhpcy5fdGlsZVpvb20pe3ZhciBuPXRoaXMuX2dldFRpbGVkUGl4ZWxCb3VuZHModCksbz10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKG4pLHM9by5nZXRDZW50ZXIoKSxyPVtdLGE9dGhpcy5vcHRpb25zLmtlZXBCdWZmZXIsaD1uZXcgUChvLmdldEJvdHRvbUxlZnQoKS5zdWJ0cmFjdChbYSwtYV0pLG8uZ2V0VG9wUmlnaHQoKS5hZGQoW2EsLWFdKSk7aWYoIShpc0Zpbml0ZShvLm1pbi54KSYmaXNGaW5pdGUoby5taW4ueSkmJmlzRmluaXRlKG8ubWF4LngpJiZpc0Zpbml0ZShvLm1heC55KSkpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXMiKTtmb3IodmFyIHUgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3VdLmNvb3JkcztsLno9PT10aGlzLl90aWxlWm9vbSYmaC5jb250YWlucyhuZXcgeChsLngsbC55KSl8fCh0aGlzLl90aWxlc1t1XS5jdXJyZW50PSExKX1pZihNYXRoLmFicyhlLXRoaXMuX3RpbGVab29tKT4xKXRoaXMuX3NldFZpZXcodCxlKTtlbHNle2Zvcih2YXIgYz1vLm1pbi55O2M8PW8ubWF4Lnk7YysrKWZvcih2YXIgXz1vLm1pbi54O188PW8ubWF4Lng7XysrKXt2YXIgZD1uZXcgeChfLGMpO2lmKGQuej10aGlzLl90aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGlsZShkKSl7dmFyIHA9dGhpcy5fdGlsZXNbdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGQpXTtwP3AuY3VycmVudD0hMDpyLnB1c2goZCl9fWlmKHIuc29ydChmdW5jdGlvbih0LGkpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktaS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoImxvYWRpbmciKSk7dmFyIG09ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2ZvcihfPTA7XzxyLmxlbmd0aDtfKyspdGhpcy5fYWRkVGlsZShyW19dLG0pO3RoaXMuX2xldmVsLmVsLmFwcGVuZENoaWxkKG0pfX19fX0sX2lzVmFsaWRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5vcHRpb25zLmNycztpZighaS5pbmZpbml0ZSl7dmFyIGU9dGhpcy5fZ2xvYmFsVGlsZVJhbmdlO2lmKCFpLndyYXBMbmcmJih0Lng8ZS5taW4ueHx8dC54PmUubWF4LngpfHwhaS53cmFwTGF0JiYodC55PGUubWluLnl8fHQueT5lLm1heC55KSlyZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmJvdW5kcylyZXR1cm4hMDt2YXIgbj10aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModCk7cmV0dXJuIHoodGhpcy5vcHRpb25zLmJvdW5kcykub3ZlcmxhcHMobil9LF9rZXlUb0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGlsZUNvb3Jkcyh0KSl9LF90aWxlQ29vcmRzVG9Od1NlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXQuc2NhbGVCeShlKSxvPW4uYWRkKGUpO3JldHVybltpLnVucHJvamVjdChuLHQueiksaS51bnByb2plY3Qobyx0LnopXX0sX3RpbGVDb29yZHNUb0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlQ29vcmRzVG9Od1NlKHQpLGU9bmV3IFQoaVswXSxpWzFdKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5vV3JhcHx8KGU9dGhpcy5fbWFwLndyYXBMYXRMbmdCb3VuZHMoZSkpLGV9LF90aWxlQ29vcmRzVG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiOiIrdC55KyI6Iit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9dC5zcGxpdCgiOiIpLGU9bmV3IHgoK2lbMF0sK2lbMV0pO3JldHVybiBlLno9K2lbMl0sZX0sX3JlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fdGlsZXNbdF07aSYmKEsoaS5lbCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6aS5lbCxjb29yZHM6dGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpfSkpfSxfaW5pdFRpbGU6ZnVuY3Rpb24odCl7USh0LCJsZWFmbGV0LXRpbGUiKTt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7dC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4Iix0Lm9uc2VsZWN0c3RhcnQ9cix0Lm9ubW91c2Vtb3ZlPXIsTGkmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJm50KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHppJiYhTWkmJih0LnN0eWxlLldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eT0iaGlkZGVuIil9LF9hZGRUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49dGhpcy5fZ2V0VGlsZVBvcyh0KSxvPXRoaXMuX3RpbGVDb29yZHNUb0tleSh0KSxzPXRoaXMuY3JlYXRlVGlsZSh0aGlzLl93cmFwQ29vcmRzKHQpLGUodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKHMpLHRoaXMuY3JlYXRlVGlsZS5sZW5ndGg8MiYmZihlKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxzKSksYXQocyxuKSx0aGlzLl90aWxlc1tvXT17ZWw6cyxjb29yZHM6dCxjdXJyZW50OiEwfSxpLmFwcGVuZENoaWxkKHMpLHRoaXMuZmlyZSgidGlsZWxvYWRzdGFydCIse3RpbGU6cyxjb29yZHM6dH0pfSxfdGlsZVJlYWR5OmZ1bmN0aW9uKHQsaSxuKXtpJiZ0aGlzLmZpcmUoInRpbGVlcnJvciIse2Vycm9yOmksdGlsZTpuLGNvb3Jkczp0fSk7dmFyIG89dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpOyhuPXRoaXMuX3RpbGVzW29dKSYmKG4ubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8obnQobi5lbCwwKSxnKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPWYodGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSk6KG4uYWN0aXZlPSEwLHRoaXMuX3BydW5lVGlsZXMoKSksaXx8KFEobi5lbCwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuZmlyZSgidGlsZWxvYWQiLHt0aWxlOm4uZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoImxvYWQiKSxMaXx8IXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkP2YodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKTpzZXRUaW1lb3V0KGUodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKSwyNTApKSl9LF9nZXRUaWxlUG9zOmZ1bmN0aW9uKHQpe3JldHVybiB0LnNjYWxlQnkodGhpcy5nZXRUaWxlU2l6ZSgpKS5zdWJ0cmFjdCh0aGlzLl9sZXZlbC5vcmlnaW4pfSxfd3JhcENvb3JkczpmdW5jdGlvbih0KXt2YXIgaT1uZXcgeCh0aGlzLl93cmFwWD9zKHQueCx0aGlzLl93cmFwWCk6dC54LHRoaXMuX3dyYXBZP3ModC55LHRoaXMuX3dyYXBZKTp0LnkpO3JldHVybiBpLno9dC56LGl9LF9weEJvdW5kc1RvVGlsZVJhbmdlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0VGlsZVNpemUoKTtyZXR1cm4gbmV3IFAodC5taW4udW5zY2FsZUJ5KGkpLmZsb29yKCksdC5tYXgudW5zY2FsZUJ5KGkpLmNlaWwoKS5zdWJ0cmFjdChbMSwxXSkpfSxfbm9UaWxlc1RvTG9hZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcylpZighdGhpcy5fdGlsZXNbdF0ubG9hZGVkKXJldHVybiExO3JldHVybiEwfX0pLG1uPXBuLmV4dGVuZCh7b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTgsc3ViZG9tYWluczoiYWJjIixlcnJvclRpbGVVcmw6IiIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dCwoaT1sKHRoaXMsaSkpLmRldGVjdFJldGluYSYmWWkmJmkubWF4Wm9vbT4wJiYoaS50aWxlU2l6ZT1NYXRoLmZsb29yKGkudGlsZVNpemUvMiksaS56b29tUmV2ZXJzZT8oaS56b29tT2Zmc2V0LS0saS5taW5ab29tKyspOihpLnpvb21PZmZzZXQrKyxpLm1heFpvb20tLSksaS5taW5ab29tPU1hdGgubWF4KDAsaS5taW5ab29tKSksInN0cmluZyI9PXR5cGVvZiBpLnN1YmRvbWFpbnMmJihpLnN1YmRvbWFpbnM9aS5zdWJkb21haW5zLnNwbGl0KCIiKSkseml8fHRoaXMub24oInRpbGV1bmxvYWQiLHRoaXMuX29uVGlsZVJlbW92ZSl9LHNldFVybDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl91cmw9PT10JiZ2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5fdXJsPXQsaXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxjcmVhdGVUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIG10KG4sImxvYWQiLGUodGhpcy5fdGlsZU9uTG9hZCx0aGlzLGksbikpLG10KG4sImVycm9yIixlKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsaSxuKSksKHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8IiI9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pJiYobi5jcm9zc09yaWdpbj0hMD09PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbj8iIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLG4uYWx0PSIiLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksbi5zcmM9dGhpcy5nZXRUaWxlVXJsKHQpLG59LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9e3I6WWk/IkAyeCI6IiIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O2lmKHRoaXMuX21hcCYmIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSl7dmFyIG49dGhpcy5fZ2xvYmFsVGlsZVJhbmdlLm1heC55LXQueTt0aGlzLm9wdGlvbnMudG1zJiYoZS55PW4pLGVbIi15Il09bn1yZXR1cm4gXyh0aGlzLl91cmwsaShlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGkpe0xpP3NldFRpbWVvdXQoZSh0LHRoaXMsbnVsbCxpKSwwKTp0KG51bGwsaSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZpLmdldEF0dHJpYnV0ZSgic3JjIikhPT1uJiYoaS5zcmM9biksdChlLGkpfSxfb25UaWxlUmVtb3ZlOmZ1bmN0aW9uKHQpe3QudGlsZS5vbmxvYWQ9bnVsbH0sX2dldFpvb21Gb3JVcmw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tLGU9dGhpcy5vcHRpb25zLnpvb21SZXZlcnNlLG49dGhpcy5vcHRpb25zLnpvb21PZmZzZXQ7cmV0dXJuIGUmJih0PWktdCksdCtufSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaV19LF9hYm9ydExvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgdCxpO2Zvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmNvb3Jkcy56IT09dGhpcy5fdGlsZVpvb20mJigoaT10aGlzLl90aWxlc1t0XS5lbCkub25sb2FkPXIsaS5vbmVycm9yPXIsaS5jb21wbGV0ZXx8KGkuc3JjPXNpLEsoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdKSl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVzW3RdO2lmKGkpcmV0dXJuIFNpfHxpLmVsLnNldEF0dHJpYnV0ZSgic3JjIixzaSkscG4ucHJvdG90eXBlLl9yZW1vdmVUaWxlLmNhbGwodGhpcyx0KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGksZSl7aWYodGhpcy5fbWFwJiYoIWV8fGUuZ2V0QXR0cmlidXRlKCJzcmMiKSE9PXNpKSlyZXR1cm4gcG4ucHJvdG90eXBlLl90aWxlUmVhZHkuY2FsbCh0aGlzLHQsaSxlKX19KSxmbj1tbi5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6IldNUyIscmVxdWVzdDoiR2V0TWFwIixsYXllcnM6IiIsc3R5bGVzOiIiLGZvcm1hdDoiaW1hZ2UvanBlZyIsdHJhbnNwYXJlbnQ6ITEsdmVyc2lvbjoiMS4xLjEifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dDt2YXIgbj1pKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyk7Zm9yKHZhciBvIGluIGUpbyBpbiB0aGlzLm9wdGlvbnN8fChuW29dPWVbb10pO3ZhciBzPShlPWwodGhpcyxlKSkuZGV0ZWN0UmV0aW5hJiZZaT8yOjEscj10aGlzLmdldFRpbGVTaXplKCk7bi53aWR0aD1yLngqcyxuLmhlaWdodD1yLnkqcyx0aGlzLndtc1BhcmFtcz1ufSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGk9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2ldPXRoaXMuX2Nycy5jb2RlLG1uLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fdGlsZUNvb3Jkc1RvTndTZSh0KSxlPXRoaXMuX2NycyxuPWIoZS5wcm9qZWN0KGlbMF0pLGUucHJvamVjdChpWzFdKSksbz1uLm1pbixzPW4ubWF4LHI9KHRoaXMuX3dtc1ZlcnNpb24+PTEuMyYmdGhpcy5fY3JzPT09VWU/W28ueSxvLngscy55LHMueF06W28ueCxvLnkscy54LHMueV0pLmpvaW4oIiwiKSxhPW1uLnByb3RvdHlwZS5nZXRUaWxlVXJsLmNhbGwodGhpcyx0KTtyZXR1cm4gYStjKHRoaXMud21zUGFyYW1zLGEsdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkrKHRoaXMub3B0aW9ucy51cHBlcmNhc2U/IiZCQk9YPSI6IiZiYm94PSIpK3J9LHNldFBhcmFtczpmdW5jdGlvbih0LGUpe3JldHVybiBpKHRoaXMud21zUGFyYW1zLHQpLGV8fHRoaXMucmVkcmF3KCksdGhpc319KTttbi5XTVM9Zm4sSnQud21zPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBmbih0LGkpfTt2YXIgZ249cWUuZXh0ZW5kKHtvcHRpb25zOntwYWRkaW5nOi4xLHRvbGVyYW5jZTowfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KSxuKHRoaXMpLHRoaXMuX2xheWVycz10aGlzLl9sYXllcnN8fHt9fSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl96b29tQW5pbWF0ZWQmJlEodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl91cGRhdGUoKSx0aGlzLm9uKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpLHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl9yZXNldCx6b29tOnRoaXMuX29uWm9vbSxtb3ZlZW5kOnRoaXMuX3VwZGF0ZSx6b29tZW5kOnRoaXMuX29uWm9vbUVuZH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fb25BbmltWm9vbSksdH0sX29uQW5pbVpvb206ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlVHJhbnNmb3JtKHQuY2VudGVyLHQuem9vbSl9LF9vblpvb206ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fbWFwLmdldENlbnRlcigpLHRoaXMuX21hcC5nZXRab29tKCkpfSxfdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fbWFwLmdldFpvb21TY2FsZShpLHRoaXMuX3pvb20pLG49aHQodGhpcy5fY29udGFpbmVyKSxvPXRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSguNSt0aGlzLm9wdGlvbnMucGFkZGluZykscz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9jZW50ZXIsaSkscj10aGlzLl9tYXAucHJvamVjdCh0LGkpLnN1YnRyYWN0KHMpLGE9by5tdWx0aXBseUJ5KC1lKS5hZGQobikuYWRkKG8pLnN1YnRyYWN0KHIpO2ppP3J0KHRoaXMuX2NvbnRhaW5lcixhLGUpOmF0KHRoaXMuX2NvbnRhaW5lcixhKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKTtmb3IodmFyIHQgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5fcmVzZXQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9wcm9qZWN0KCl9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5wYWRkaW5nLGk9dGhpcy5fbWFwLmdldFNpemUoKSxlPXRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpLm11bHRpcGx5QnkoLXQpKS5yb3VuZCgpO3RoaXMuX2JvdW5kcz1uZXcgUChlLGUuYWRkKGkubXVsdGlwbHlCeSgxKzIqdCkpLnJvdW5kKCkpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fem9vbT10aGlzLl9tYXAuZ2V0Wm9vbSgpfX0pLHZuPWduLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9Z24ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe2duLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpLHRoaXMuX2RyYXcoKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bXQodCwibW91c2Vtb3ZlIixvKHRoaXMuX29uTW91c2VNb3ZlLDMyLHRoaXMpLHRoaXMpLG10KHQsImNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIGNvbnRleHRtZW51Iix0aGlzLl9vbkNsaWNrLHRoaXMpLG10KHQsIm1vdXNlb3V0Iix0aGlzLl9oYW5kbGVNb3VzZU91dCx0aGlzKSx0aGlzLl9jdHg9dC5nZXRDb250ZXh0KCIyZCIpfSxfZGVzdHJveUNvbnRhaW5lcjpmdW5jdGlvbigpe2codGhpcy5fcmVkcmF3UmVxdWVzdCksZGVsZXRlIHRoaXMuX2N0eCxLKHRoaXMuX2NvbnRhaW5lciksZnQodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyfSxfdXBkYXRlUGF0aHM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocyl7dGhpcy5fcmVkcmF3Qm91bmRzPW51bGw7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpO3RoaXMuX3JlZHJhdygpfX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe2duLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5fYm91bmRzLGk9dGhpcy5fY29udGFpbmVyLGU9dC5nZXRTaXplKCksbj1ZaT8yOjE7YXQoaSx0Lm1pbiksaS53aWR0aD1uKmUueCxpLmhlaWdodD1uKmUueSxpLnN0eWxlLndpZHRoPWUueCsicHgiLGkuc3R5bGUuaGVpZ2h0PWUueSsicHgiLFlpJiZ0aGlzLl9jdHguc2NhbGUoMiwyKSx0aGlzLl9jdHgudHJhbnNsYXRlKC10Lm1pbi54LC10Lm1pbi55KSx0aGlzLmZpcmUoInVwZGF0ZSIpfX0sX3Jlc2V0OmZ1bmN0aW9uKCl7Z24ucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX2xheWVyc1tuKHQpXT10O3ZhciBpPXQuX29yZGVyPXtsYXllcjp0LHByZXY6dGhpcy5fZHJhd0xhc3QsbmV4dDpudWxsfTt0aGlzLl9kcmF3TGFzdCYmKHRoaXMuX2RyYXdMYXN0Lm5leHQ9aSksdGhpcy5fZHJhd0xhc3Q9aSx0aGlzLl9kcmF3Rmlyc3Q9dGhpcy5fZHJhd0ZpcnN0fHx0aGlzLl9kcmF3TGFzdH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXIsZT1pLm5leHQsbz1pLnByZXY7ZT9lLnByZXY9bzp0aGlzLl9kcmF3TGFzdD1vLG8/by5uZXh0PWU6dGhpcy5fZHJhd0ZpcnN0PWUsZGVsZXRlIHQuX29yZGVyLGRlbGV0ZSB0aGlzLl9sYXllcnNbbih0KV0sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHQuX3Byb2plY3QoKSx0Ll91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVEYXNoQXJyYXk6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0Lm9wdGlvbnMuZGFzaEFycmF5KXt2YXIgaSxlLG49dC5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgvWywgXSsvKSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe2lmKGk9TnVtYmVyKG5bZV0pLGlzTmFOKGkpKXJldHVybjtvLnB1c2goaSl9dC5vcHRpb25zLl9kYXNoQXJyYXk9b31lbHNlIHQub3B0aW9ucy5fZGFzaEFycmF5PXQub3B0aW9ucy5kYXNoQXJyYXl9LF9yZXF1ZXN0UmVkcmF3OmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyh0KSx0aGlzLl9yZWRyYXdSZXF1ZXN0PXRoaXMuX3JlZHJhd1JlcXVlc3R8fGYodGhpcy5fcmVkcmF3LHRoaXMpKX0sX2V4dGVuZFJlZHJhd0JvdW5kczpmdW5jdGlvbih0KXtpZih0Ll9weEJvdW5kcyl7dmFyIGk9KHQub3B0aW9ucy53ZWlnaHR8fDApKzE7dGhpcy5fcmVkcmF3Qm91bmRzPXRoaXMuX3JlZHJhd0JvdW5kc3x8bmV3IFAsdGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZCh0Ll9weEJvdW5kcy5taW4uc3VidHJhY3QoW2ksaV0pKSx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1heC5hZGQoW2ksaV0pKX19LF9yZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXdSZXF1ZXN0PW51bGwsdGhpcy5fcmVkcmF3Qm91bmRzJiYodGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKSx0aGlzLl9yZWRyYXdCb3VuZHMubWF4Ll9jZWlsKCkpLHRoaXMuX2NsZWFyKCksdGhpcy5fZHJhdygpLHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsfSxfY2xlYXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWRyYXdCb3VuZHM7aWYodCl7dmFyIGk9dC5nZXRTaXplKCk7dGhpcy5fY3R4LmNsZWFyUmVjdCh0Lm1pbi54LHQubWluLnksaS54LGkueSl9ZWxzZSB0aGlzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLl9jb250YWluZXIud2lkdGgsdGhpcy5fY29udGFpbmVyLmhlaWdodCl9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9yZWRyYXdCb3VuZHM7aWYodGhpcy5fY3R4LnNhdmUoKSxpKXt2YXIgZT1pLmdldFNpemUoKTt0aGlzLl9jdHguYmVnaW5QYXRoKCksdGhpcy5fY3R4LnJlY3QoaS5taW4ueCxpLm1pbi55LGUueCxlLnkpLHRoaXMuX2N0eC5jbGlwKCl9dGhpcy5fZHJhd2luZz0hMDtmb3IodmFyIG49dGhpcy5fZHJhd0ZpcnN0O247bj1uLm5leHQpdD1uLmxheWVyLCghaXx8dC5fcHhCb3VuZHMmJnQuX3B4Qm91bmRzLmludGVyc2VjdHMoaSkpJiZ0Ll91cGRhdGVQYXRoKCk7dGhpcy5fZHJhd2luZz0hMSx0aGlzLl9jdHgucmVzdG9yZSgpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe2lmKHRoaXMuX2RyYXdpbmcpe3ZhciBlLG4sbyxzLHI9dC5fcGFydHMsYT1yLmxlbmd0aCxoPXRoaXMuX2N0eDtpZihhKXtmb3IoaC5iZWdpblBhdGgoKSxlPTA7ZTxhO2UrKyl7Zm9yKG49MCxvPXJbZV0ubGVuZ3RoO248bztuKyspcz1yW2VdW25dLGhbbj8ibGluZVRvIjoibW92ZVRvIl0ocy54LHMueSk7aSYmaC5jbG9zZVBhdGgoKX10aGlzLl9maWxsU3Ryb2tlKGgsdCl9fX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXtpZih0aGlzLl9kcmF3aW5nJiYhdC5fZW1wdHkoKSl7dmFyIGk9dC5fcG9pbnQsZT10aGlzLl9jdHgsbj1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksbz0oTWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXNZKSwxKXx8bikvbjsxIT09byYmKGUuc2F2ZSgpLGUuc2NhbGUoMSxvKSksZS5iZWdpblBhdGgoKSxlLmFyYyhpLngsaS55L28sbiwwLDIqTWF0aC5QSSwhMSksMSE9PW8mJmUucmVzdG9yZSgpLHRoaXMuX2ZpbGxTdHJva2UoZSx0KX19LF9maWxsU3Ryb2tlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9aS5vcHRpb25zO2UuZmlsbCYmKHQuZ2xvYmFsQWxwaGE9ZS5maWxsT3BhY2l0eSx0LmZpbGxTdHlsZT1lLmZpbGxDb2xvcnx8ZS5jb2xvcix0LmZpbGwoZS5maWxsUnVsZXx8ImV2ZW5vZGQiKSksZS5zdHJva2UmJjAhPT1lLndlaWdodCYmKHQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goaS5vcHRpb25zJiZpLm9wdGlvbnMuX2Rhc2hBcnJheXx8W10pLHQuZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5LHQubGluZVdpZHRoPWUud2VpZ2h0LHQuc3Ryb2tlU3R5bGU9ZS5jb2xvcix0LmxpbmVDYXA9ZS5saW5lQ2FwLHQubGluZUpvaW49ZS5saW5lSm9pbix0LnN0cm9rZSgpKX0sX29uQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGUsbj10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSxvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShpPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmkuX2NvbnRhaW5zUG9pbnQobikmJiF0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGkpJiYoZT1pKTtlJiYoenQodCksdGhpcy5fZmlyZUV2ZW50KFtlXSx0KSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXtpZih0aGlzLl9tYXAmJiF0aGlzLl9tYXAuZHJhZ2dpbmcubW92aW5nKCkmJiF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pe3ZhciBpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO3RoaXMuX2hhbmRsZU1vdXNlSG92ZXIodCxpKX19LF9oYW5kbGVNb3VzZU91dDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9ob3ZlcmVkTGF5ZXI7aSYmKHR0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2ZpcmVFdmVudChbaV0sdCwibW91c2VvdXQiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCl9LF9oYW5kbGVNb3VzZUhvdmVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG4sbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoZT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZlLl9jb250YWluc1BvaW50KGkpJiYobj1lKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKFEodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5fZmlyZUV2ZW50KFtuXSx0LCJtb3VzZW92ZXIiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bikpLHRoaXMuX2hvdmVyZWRMYXllciYmdGhpcy5fZmlyZUV2ZW50KFt0aGlzLl9ob3ZlcmVkTGF5ZXJdLHQpfSxfZmlyZUV2ZW50OmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9tYXAuX2ZpcmVET01FdmVudChpLGV8fGkudHlwZSx0KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXt2YXIgaT10Ll9vcmRlcjtpZihpKXt2YXIgZT1pLm5leHQsbj1pLnByZXY7ZSYmKGUucHJldj1uLG4/bi5uZXh0PWU6ZSYmKHRoaXMuX2RyYXdGaXJzdD1lKSxpLnByZXY9dGhpcy5fZHJhd0xhc3QsdGhpcy5fZHJhd0xhc3QubmV4dD1pLGkubmV4dD1udWxsLHRoaXMuX2RyYXdMYXN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9fSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXI7aWYoaSl7dmFyIGU9aS5uZXh0LG49aS5wcmV2O24mJihuLm5leHQ9ZSxlP2UucHJldj1uOm4mJih0aGlzLl9kcmF3TGFzdD1uKSxpLnByZXY9bnVsbCxpLm5leHQ9dGhpcy5fZHJhd0ZpcnN0LHRoaXMuX2RyYXdGaXJzdC5wcmV2PWksdGhpcy5fZHJhd0ZpcnN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9fX0pLHluPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkb2N1bWVudC5uYW1lc3BhY2VzLmFkZCgibHZtbCIsInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiksZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSx4bj17X2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9RygiZGl2IiwibGVhZmxldC12bWwtY29udGFpbmVyIil9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fChnbi5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuZmlyZSgidXBkYXRlIikpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyPXluKCJzaGFwZSIpO1EoaSwibGVhZmxldC12bWwtc2hhcGUgIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8IiIpKSxpLmNvb3Jkc2l6ZT0iMSAxIix0Ll9wYXRoPXluKCJwYXRoIiksaS5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0aGlzLl91cGRhdGVTdHlsZSh0KSx0aGlzLl9sYXllcnNbbih0KV09dH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChpKSx0Lm9wdGlvbnMuaW50ZXJhY3RpdmUmJnQuYWRkSW50ZXJhY3RpdmVUYXJnZXQoaSl9LF9yZW1vdmVQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX2NvbnRhaW5lcjtLKGkpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoaSksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3N0cm9rZSxlPXQuX2ZpbGwsbj10Lm9wdGlvbnMsbz10Ll9jb250YWluZXI7by5zdHJva2VkPSEhbi5zdHJva2Usby5maWxsZWQ9ISFuLmZpbGwsbi5zdHJva2U/KGl8fChpPXQuX3N0cm9rZT15bigic3Ryb2tlIikpLG8uYXBwZW5kQ2hpbGQoaSksaS53ZWlnaHQ9bi53ZWlnaHQrInB4IixpLmNvbG9yPW4uY29sb3IsaS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9pLmRhc2hTdHlsZT1vaShuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbigiICIpOm4uZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywiICIpOmkuZGFzaFN0eWxlPSIiLGkuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKCJidXR0IiwiZmxhdCIpLGkuam9pbnN0eWxlPW4ubGluZUpvaW4pOmkmJihvLnJlbW92ZUNoaWxkKGkpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGV8fChlPXQuX2ZpbGw9eW4oImZpbGwiKSksby5hcHBlbmRDaGlsZChlKSxlLmNvbG9yPW4uZmlsbENvbG9yfHxuLmNvbG9yLGUub3BhY2l0eT1uLmZpbGxPcGFjaXR5KTplJiYoby5yZW1vdmVDaGlsZChlKSx0Ll9maWxsPW51bGwpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LnJvdW5kKCksZT1NYXRoLnJvdW5kKHQuX3JhZGl1cyksbj1NYXRoLnJvdW5kKHQuX3JhZGl1c1l8fGUpO3RoaXMuX3NldFBhdGgodCx0Ll9lbXB0eSgpPyJNMCAwIjoiQUwgIitpLngrIiwiK2kueSsiICIrZSsiLCIrbisiIDAsMjM1OTI2MDAiKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnY9aX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtYKHQuX2NvbnRhaW5lcil9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtKKHQuX2NvbnRhaW5lcil9fSx3bj0kaT95bjpFLFBuPWduLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9Z24ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0Lnpvb21zdGFydD10aGlzLl9vblpvb21TdGFydCx0fSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj13bigic3ZnIiksdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksdGhpcy5fcm9vdEdyb3VwPXduKCJnIiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3RHcm91cCl9LF9kZXN0cm95Q29udGFpbmVyOmZ1bmN0aW9uKCl7Syh0aGlzLl9jb250YWluZXIpLGZ0KHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lcixkZWxldGUgdGhpcy5fcm9vdEdyb3VwLGRlbGV0ZSB0aGlzLl9zdmdTaXplfSxfb25ab29tU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe2duLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5fYm91bmRzLGk9dC5nZXRTaXplKCksZT10aGlzLl9jb250YWluZXI7dGhpcy5fc3ZnU2l6ZSYmdGhpcy5fc3ZnU2l6ZS5lcXVhbHMoaSl8fCh0aGlzLl9zdmdTaXplPWksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixpLngpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGkueSkpLGF0KGUsdC5taW4pLGUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbdC5taW4ueCx0Lm1pbi55LGkueCxpLnldLmpvaW4oIiAiKSksdGhpcy5maXJlKCJ1cGRhdGUiKX19LF9pbml0UGF0aDpmdW5jdGlvbih0KXt2YXIgaT10Ll9wYXRoPXduKCJwYXRoIik7dC5vcHRpb25zLmNsYXNzTmFtZSYmUShpLHQub3B0aW9ucy5jbGFzc05hbWUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmUShpLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5fdXBkYXRlU3R5bGUodCksdGhpcy5fbGF5ZXJzW24odCldPXR9LF9hZGRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3Jvb3RHcm91cHx8dGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0LmFkZEludGVyYWN0aXZlVGFyZ2V0KHQuX3BhdGgpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXtLKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5fcGF0aCxlPXQub3B0aW9ucztpJiYoZS5zdHJva2U/KGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLGUuY29sb3IpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsZS5vcGFjaXR5KSxpLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixlLndlaWdodCksaS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lY2FwIixlLmxpbmVDYXApLGkuc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWpvaW4iLGUubGluZUpvaW4pLGUuZGFzaEFycmF5P2kuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IixlLmRhc2hBcnJheSk6aS5yZW1vdmVBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiKSxlLmRhc2hPZmZzZXQ/aS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixlLmRhc2hPZmZzZXQpOmkucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIpKTppLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwibm9uZSIpLGUuZmlsbD8oaS5zZXRBdHRyaWJ1dGUoImZpbGwiLGUuZmlsbENvbG9yfHxlLmNvbG9yKSxpLnNldEF0dHJpYnV0ZSgiZmlsbC1vcGFjaXR5IixlLmZpbGxPcGFjaXR5KSxpLnNldEF0dHJpYnV0ZSgiZmlsbC1ydWxlIixlLmZpbGxSdWxlfHwiZXZlbm9kZCIpKTppLnNldEF0dHJpYnV0ZSgiZmlsbCIsIm5vbmUiKSl9LF91cGRhdGVQb2x5OmZ1bmN0aW9uKHQsaSl7dGhpcy5fc2V0UGF0aCh0LGsodC5fcGFydHMsaSkpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LGU9TWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXMpLDEpLG49ImEiK2UrIiwiKyhNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxlKSsiIDAgMSwwICIsbz10Ll9lbXB0eSgpPyJNMCAwIjoiTSIrKGkueC1lKSsiLCIraS55K24rMiplKyIsMCAiK24rMiotZSsiLDAgIjt0aGlzLl9zZXRQYXRoKHQsbyl9LF9zZXRQYXRoOmZ1bmN0aW9uKHQsaSl7dC5fcGF0aC5zZXRBdHRyaWJ1dGUoImQiLGkpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe1godC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtKKHQuX3BhdGgpfX0pOyRpJiZQbi5pbmNsdWRlKHhuKSxiZS5pbmNsdWRlKHtnZXRSZW5kZXJlcjpmdW5jdGlvbih0KXt2YXIgaT10Lm9wdGlvbnMucmVuZGVyZXJ8fHRoaXMuX2dldFBhbmVSZW5kZXJlcih0Lm9wdGlvbnMucGFuZSl8fHRoaXMub3B0aW9ucy5yZW5kZXJlcnx8dGhpcy5fcmVuZGVyZXI7cmV0dXJuIGl8fChpPXRoaXMuX3JlbmRlcmVyPXRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpLHRoaXMuaGFzTGF5ZXIoaSl8fHRoaXMuYWRkTGF5ZXIoaSksaX0sX2dldFBhbmVSZW5kZXJlcjpmdW5jdGlvbih0KXtpZigib3ZlcmxheVBhbmUiPT09dHx8dm9pZCAwPT09dClyZXR1cm4hMTt2YXIgaT10aGlzLl9wYW5lUmVuZGVyZXJzW3RdO3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLl9jcmVhdGVSZW5kZXJlcih7cGFuZTp0fSksdGhpcy5fcGFuZVJlbmRlcmVyc1t0XT1pKSxpfSxfY3JlYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmZXJDYW52YXMmJiR0KHQpfHxRdCh0KX19KTt2YXIgTG49b24uZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7b24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxpKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNldExhdExuZ3ModGhpcy5fYm91bmRzVG9MYXRMbmdzKHQpKX0sX2JvdW5kc1RvTGF0TG5nczpmdW5jdGlvbih0KXtyZXR1cm4gdD16KHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtQbi5jcmVhdGU9d24sUG4ucG9pbnRzVG9QYXRoPWssc24uZ2VvbWV0cnlUb0xheWVyPUZ0LHNuLmNvb3Jkc1RvTGF0TG5nPVV0LHNuLmNvb3Jkc1RvTGF0TG5ncz1WdCxzbi5sYXRMbmdUb0Nvb3Jkcz1xdCxzbi5sYXRMbmdzVG9Db29yZHM9R3Qsc24uZ2V0RmVhdHVyZT1LdCxzbi5hc0ZlYXR1cmU9WXQsYmUubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIGJuPUVlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9dC5fY29udGFpbmVyLHRoaXMuX3BhbmU9dC5fcGFuZXMub3ZlcmxheVBhbmUsdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0Lm9uKCJ1bmxvYWQiLHRoaXMuX2Rlc3Ryb3ksdGhpcyl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2Z0KHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7Syh0aGlzLl9wYW5lKSxkZWxldGUgdGhpcy5fcGFuZX0sX3Jlc2V0U3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHRoaXMuX21vdmVkPSExfSxfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6ZnVuY3Rpb24oKXswIT09dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTApfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIXQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24pcmV0dXJuITE7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCksZmkoKSx1dCgpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG10KGRvY3VtZW50LHtjb250ZXh0bWVudTpMdCxtb3VzZW1vdmU6dGhpcy5fb25Nb3VzZU1vdmUsbW91c2V1cDp0aGlzLl9vbk1vdXNlVXAsa2V5ZG93bjp0aGlzLl9vbktleURvd259LHRoaXMpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbW92ZWR8fCh0aGlzLl9tb3ZlZD0hMCx0aGlzLl9ib3g9RygiZGl2IiwibGVhZmxldC16b29tLWJveCIsdGhpcy5fY29udGFpbmVyKSxRKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jcm9zc2hhaXIiKSx0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpLHRoaXMuX3BvaW50PXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KTt2YXIgaT1uZXcgUCh0aGlzLl9wb2ludCx0aGlzLl9zdGFydFBvaW50KSxlPWkuZ2V0U2l6ZSgpO2F0KHRoaXMuX2JveCxpLm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWUueCsicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKEsodGhpcy5fYm94KSx0dCh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY3Jvc3NoYWlyIikpLGdpKCksbHQoKSxmdChkb2N1bWVudCx7Y29udGV4dG1lbnU6THQsbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXtpZigoMT09PXQud2hpY2h8fDE9PT10LmJ1dHRvbikmJih0aGlzLl9maW5pc2goKSx0aGlzLl9tb3ZlZCkpe3RoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCksdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9c2V0VGltZW91dChlKHRoaXMuX3Jlc2V0U3RhdGUsdGhpcyksMCk7dmFyIGk9bmV3IFQodGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQpKTt0aGlzLl9tYXAuZml0Qm91bmRzKGkpLmZpcmUoImJveHpvb21lbmQiLHtib3hab29tQm91bmRzOml9KX19LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiYm94Wm9vbSIsYm4pLGJlLm1lcmdlT3B0aW9ucyh7ZG91YmxlQ2xpY2tab29tOiEwfSk7dmFyIFRuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9tYXAub24oImRibGNsaWNrIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoImRibGNsaWNrIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxfb25Eb3VibGVDbGljazpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAsZT1pLmdldFpvb20oKSxuPWkub3B0aW9ucy56b29tRGVsdGEsbz10Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/ZS1uOmUrbjsiY2VudGVyIj09PWkub3B0aW9ucy5kb3VibGVDbGlja1pvb20/aS5zZXRab29tKG8pOmkuc2V0Wm9vbUFyb3VuZCh0LmNvbnRhaW5lclBvaW50LG8pfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiZG91YmxlQ2xpY2tab29tIixUbiksYmUubWVyZ2VPcHRpb25zKHtkcmFnZ2luZzohMCxpbmVydGlhOiFNaSxpbmVydGlhRGVjZWxlcmF0aW9uOjM0MDAsaW5lcnRpYU1heFNwZWVkOjEvMCxlYXNlTGluZWFyaXR5Oi4yLHdvcmxkQ29weUp1bXA6ITEsbWF4Qm91bmRzVmlzY29zaXR5OjB9KTt2YXIgem49RWUuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe2lmKCF0aGlzLl9kcmFnZ2FibGUpe3ZhciB0PXRoaXMuX21hcDt0aGlzLl9kcmFnZ2FibGU9bmV3IFJlKHQuX21hcFBhbmUsdC5fY29udGFpbmVyKSx0aGlzLl9kcmFnZ2FibGUub24oe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcyksdGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbigicHJlZHJhZyIsdGhpcy5fb25QcmVEcmFnV3JhcCx0aGlzKSx0Lm9uKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fb25ab29tRW5kLHRoaXMpKX1RKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnIiksdGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpLHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0dCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibGVhZmxldC1ncmFiIiksdHQodGhpcy5fbWFwLl9jb250YWluZXIsImxlYWZsZXQtdG91Y2gtZHJhZyIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcDtpZih0Ll9zdG9wKCksdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpe3ZhciBpPXoodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTt0aGlzLl9vZmZzZXRMaW1pdD1iKHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Tm9ydGhXZXN0KCkpLm11bHRpcGx5QnkoLTEpLHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0U291dGhFYXN0KCkpLm11bHRpcGx5QnkoLTEpLmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSksdGhpcy5fdmlzY29zaXR5PU1hdGgubWluKDEsTWF0aC5tYXgoMCx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpKX1lbHNlIHRoaXMuX29mZnNldExpbWl0PW51bGw7dC5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKSx0Lm9wdGlvbnMuaW5lcnRpYSYmKHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIGk9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M7dGhpcy5fcG9zaXRpb25zLnB1c2goZSksdGhpcy5fdGltZXMucHVzaChpKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhpKX10aGlzLl9tYXAuZmlyZSgibW92ZSIsdCkuZmlyZSgiZHJhZyIsdCl9LF9wcnVuZVBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IoO3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGg+MSYmdC10aGlzLl90aW1lc1swXT41MDspdGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFswLDBdKTt0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQ9aS5zdWJ0cmFjdCh0KS54LHRoaXMuX3dvcmxkV2lkdGg9dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHMoKS5nZXRTaXplKCkueH0sX3Zpc2NvdXNMaW1pdDpmdW5jdGlvbih0LGkpe3JldHVybiB0LSh0LWkpKnRoaXMuX3Zpc2Nvc2l0eX0sX29uUHJlRHJhZ0xpbWl0OmZ1bmN0aW9uKCl7aWYodGhpcy5fdmlzY29zaXR5JiZ0aGlzLl9vZmZzZXRMaW1pdCl7dmFyIHQ9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3Muc3VidHJhY3QodGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcyksaT10aGlzLl9vZmZzZXRMaW1pdDt0Lng8aS5taW4ueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWluLngpKSx0Lnk8aS5taW4ueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWluLnkpKSx0Lng+aS5tYXgueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWF4LngpKSx0Lnk+aS5tYXgueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWF4LnkpKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcz10aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLmFkZCh0KX19LF9vblByZURyYWdXcmFwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd29ybGRXaWR0aCxpPU1hdGgucm91bmQodC8yKSxlPXRoaXMuX2luaXRpYWxXb3JsZE9mZnNldCxuPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLngsbz0obi1pK2UpJXQraS1lLHM9KG4raStlKSV0LWktZSxyPU1hdGguYWJzKG8rZSk8TWF0aC5hYnMocytlKT9vOnM7dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3M9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PXJ9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5vcHRpb25zLG49IWUuaW5lcnRpYXx8dGhpcy5fdGltZXMubGVuZ3RoPDI7aWYoaS5maXJlKCJkcmFnZW5kIix0KSxuKWkuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKTt2YXIgbz10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSkscz0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxyPWUuZWFzZUxpbmVhcml0eSxhPW8ubXVsdGlwbHlCeShyL3MpLGg9YS5kaXN0YW5jZVRvKFswLDBdKSx1PU1hdGgubWluKGUuaW5lcnRpYU1heFNwZWVkLGgpLGw9YS5tdWx0aXBseUJ5KHUvaCksYz11LyhlLmluZXJ0aWFEZWNlbGVyYXRpb24qciksXz1sLm11bHRpcGx5QnkoLWMvMikucm91bmQoKTtfLnh8fF8ueT8oXz1pLl9saW1pdE9mZnNldChfLGkub3B0aW9ucy5tYXhCb3VuZHMpLGYoZnVuY3Rpb24oKXtpLnBhbkJ5KF8se2R1cmF0aW9uOmMsZWFzZUxpbmVhcml0eTpyLG5vTW92ZVN0YXJ0OiEwLGFuaW1hdGU6ITB9KX0pKTppLmZpcmUoIm1vdmVlbmQiKX19fSk7YmUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJkcmFnZ2luZyIsem4pLGJlLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pO3ZhciBNbj1FZS5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD0iMCIpLG10KHQse2ZvY3VzOnRoaXMuX29uRm9jdXMsYmx1cjp0aGlzLl9vbkJsdXIsbW91c2Vkb3duOnRoaXMuX29uTW91c2VEb3dufSx0aGlzKSx0aGlzLl9tYXAub24oe2ZvY3VzOnRoaXMuX2FkZEhvb2tzLGJsdXI6dGhpcy5fcmVtb3ZlSG9va3N9LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUhvb2tzKCksZnQodGhpcy5fbWFwLl9jb250YWluZXIse2ZvY3VzOnRoaXMuX29uRm9jdXMsYmx1cjp0aGlzLl9vbkJsdXIsbW91c2Vkb3duOnRoaXMuX29uTW91c2VEb3dufSx0aGlzKSx0aGlzLl9tYXAub2ZmKHtmb2N1czp0aGlzLl9hZGRIb29rcyxibHVyOnRoaXMuX3JlbW92ZUhvb2tzfSx0aGlzKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWQpe3ZhciB0PWRvY3VtZW50LmJvZHksaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10LnNjcm9sbFRvcHx8aS5zY3JvbGxUb3Asbj10LnNjcm9sbExlZnR8fGkuc2Nyb2xsTGVmdDt0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpLHdpbmRvdy5zY3JvbGxUbyhuLGUpfX0sX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkPSEwLHRoaXMuX21hcC5maXJlKCJmb2N1cyIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZSgiYmx1ciIpfSxfc2V0UGFuRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXRoaXMuX3BhbktleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihpPTAsZT1vLmxlZnQubGVuZ3RoO2k8ZTtpKyspbltvLmxlZnRbaV1dPVstMSp0LDBdO2ZvcihpPTAsZT1vLnJpZ2h0Lmxlbmd0aDtpPGU7aSsrKW5bby5yaWdodFtpXV09W3QsMF07Zm9yKGk9MCxlPW8uZG93bi5sZW5ndGg7aTxlO2krKyluW28uZG93bltpXV09WzAsdF07Zm9yKGk9MCxlPW8udXAubGVuZ3RoO2k8ZTtpKyspbltvLnVwW2ldXT1bMCwtMSp0XX0sX3NldFpvb21EZWx0YTpmdW5jdGlvbih0KXt2YXIgaSxlLG49dGhpcy5fem9vbUtleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihpPTAsZT1vLnpvb21Jbi5sZW5ndGg7aTxlO2krKyluW28uem9vbUluW2ldXT10O2ZvcihpPTAsZT1vLnpvb21PdXQubGVuZ3RoO2k8ZTtpKyspbltvLnpvb21PdXRbaV1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXttdChkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfcmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtmdChkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGksZT10LmtleUNvZGUsbj10aGlzLl9tYXA7aWYoZSBpbiB0aGlzLl9wYW5LZXlzKW4uX3BhbkFuaW0mJm4uX3BhbkFuaW0uX2luUHJvZ3Jlc3N8fChpPXRoaXMuX3BhbktleXNbZV0sdC5zaGlmdEtleSYmKGk9dyhpKS5tdWx0aXBseUJ5KDMpKSxuLnBhbkJ5KGkpLG4ub3B0aW9ucy5tYXhCb3VuZHMmJm4ucGFuSW5zaWRlQm91bmRzKG4ub3B0aW9ucy5tYXhCb3VuZHMpKTtlbHNlIGlmKGUgaW4gdGhpcy5fem9vbUtleXMpbi5zZXRab29tKG4uZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5PzM6MSkqdGhpcy5fem9vbUtleXNbZV0pO2Vsc2V7aWYoMjchPT1lfHwhbi5fcG9wdXB8fCFuLl9wb3B1cC5vcHRpb25zLmNsb3NlT25Fc2NhcGVLZXkpcmV0dXJuO24uY2xvc2VQb3B1cCgpfUx0KHQpfX19KTtiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImtleWJvYXJkIixNbiksYmUubWVyZ2VPcHRpb25zKHtzY3JvbGxXaGVlbFpvb206ITAsd2hlZWxEZWJvdW5jZVRpbWU6NDAsd2hlZWxQeFBlclpvb21MZXZlbDo2MH0pO3ZhciBDbj1FZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtmdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKX0sX29uV2hlZWxTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGk9VHQodCksbj10aGlzLl9tYXAub3B0aW9ucy53aGVlbERlYm91bmNlVGltZTt0aGlzLl9kZWx0YSs9aSx0aGlzLl9sYXN0TW91c2VQb3M9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUpO3ZhciBvPU1hdGgubWF4KG4tKCtuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUpLDApO2NsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9c2V0VGltZW91dChlKHRoaXMuX3BlcmZvcm1ab29tLHRoaXMpLG8pLEx0KHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10LmdldFpvb20oKSxlPXRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwfHwwO3QuX3N0b3AoKTt2YXIgbj10aGlzLl9kZWx0YS8oNCp0aGlzLl9tYXAub3B0aW9ucy53aGVlbFB4UGVyWm9vbUxldmVsKSxvPTQqTWF0aC5sb2coMi8oMStNYXRoLmV4cCgtTWF0aC5hYnMobikpKSkvTWF0aC5MTjIscz1lP01hdGguY2VpbChvL2UpKmU6byxyPXQuX2xpbWl0Wm9vbShpKyh0aGlzLl9kZWx0YT4wP3M6LXMpKS1pO3RoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsciYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStyKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrcikpfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixDbiksYmUubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSk7dmFyIFNuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXttdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2Z0KHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihQdCh0KSx0aGlzLl9maXJlQ2xpY2s9ITAsdC50b3VjaGVzLmxlbmd0aD4xKXJldHVybiB0aGlzLl9maXJlQ2xpY2s9ITEsdm9pZCBjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO3ZhciBpPXQudG91Y2hlc1swXSxuPWkudGFyZ2V0O3RoaXMuX3N0YXJ0UG9zPXRoaXMuX25ld1Bvcz1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKSxuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZRKG4sImxlYWZsZXQtYWN0aXZlIiksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChlKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlZG93biIsaSksbXQoZG9jdW1lbnQse3RvdWNobW92ZTp0aGlzLl9vbk1vdmUsdG91Y2hlbmQ6dGhpcy5fb25VcH0sdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLGZ0KGRvY3VtZW50LHt0b3VjaG1vdmU6dGhpcy5fb25Nb3ZlLHRvdWNoZW5kOnRoaXMuX29uVXB9LHRoaXMpLHRoaXMuX2ZpcmVDbGljayYmdCYmdC5jaGFuZ2VkVG91Y2hlcyl7dmFyIGk9dC5jaGFuZ2VkVG91Y2hlc1swXSxlPWkudGFyZ2V0O2UmJmUudGFnTmFtZSYmImEiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnR0KGUsImxlYWZsZXQtYWN0aXZlIiksdGhpcy5fc2ltdWxhdGVFdmVudCgibW91c2V1cCIsaSksdGhpcy5faXNUYXBWYWxpZCgpJiZ0aGlzLl9zaW11bGF0ZUV2ZW50KCJjbGljayIsaSl9fSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaT10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlbW92ZSIsaSl9LF9zaW11bGF0ZUV2ZW50OmZ1bmN0aW9uKHQsaSl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7ZS5fc2ltdWxhdGVkPSEwLGkudGFyZ2V0Ll9zaW11bGF0ZWRDbGljaz0hMCxlLmluaXRNb3VzZUV2ZW50KHQsITAsITAsd2luZG93LDEsaS5zY3JlZW5YLGkuc2NyZWVuWSxpLmNsaWVudFgsaS5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksaS50YXJnZXQuZGlzcGF0Y2hFdmVudChlKX19KTtxaSYmIVZpJiZiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRhcCIsU24pLGJlLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOnFpJiYhTWksYm91bmNlQXRab29tTGltaXRzOiEwfSk7dmFyIFpuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtRKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxtdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3R0KHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxmdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxfb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiYhaS5fYW5pbWF0aW5nWm9vbSYmIXRoaXMuX3pvb21pbmcpe3ZhciBlPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9jZW50ZXJQb2ludD1pLmdldFNpemUoKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnRMYXRMbmc9aS5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX2NlbnRlclBvaW50KSwiY2VudGVyIiE9PWkub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPWkuY29udGFpbmVyUG9pbnRUb0xhdExuZyhlLmFkZChuKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9ZS5kaXN0YW5jZVRvKG4pLHRoaXMuX3N0YXJ0Wm9vbT1pLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLGkuX3N0b3AoKSxtdChkb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSx0aGlzKSxtdChkb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksUHQodCl9fSxfb25Ub3VjaE1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmdGhpcy5fem9vbWluZyl7dmFyIGk9dGhpcy5fbWFwLG49aS5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0LnRvdWNoZXNbMF0pLG89aS5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0LnRvdWNoZXNbMV0pLHM9bi5kaXN0YW5jZVRvKG8pL3RoaXMuX3N0YXJ0RGlzdDtpZih0aGlzLl96b29tPWkuZ2V0U2NhbGVab29tKHMsdGhpcy5fc3RhcnRab29tKSwhaS5vcHRpb25zLmJvdW5jZUF0Wm9vbUxpbWl0cyYmKHRoaXMuX3pvb208aS5nZXRNaW5ab29tKCkmJnM8MXx8dGhpcy5fem9vbT5pLmdldE1heFpvb20oKSYmcz4xKSYmKHRoaXMuX3pvb209aS5fbGltaXRab29tKHRoaXMuX3pvb20pKSwiY2VudGVyIj09PWkub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT09cylyZXR1cm59ZWxzZXt2YXIgcj1uLl9hZGQobykuX2RpdmlkZUJ5KDIpLl9zdWJ0cmFjdCh0aGlzLl9jZW50ZXJQb2ludCk7aWYoMT09PXMmJjA9PT1yLngmJjA9PT1yLnkpcmV0dXJuO3RoaXMuX2NlbnRlcj1pLnVucHJvamVjdChpLnByb2plY3QodGhpcy5fcGluY2hTdGFydExhdExuZyx0aGlzLl96b29tKS5zdWJ0cmFjdChyKSx0aGlzLl96b29tKX10aGlzLl9tb3ZlZHx8KGkuX21vdmVTdGFydCghMCwhMSksdGhpcy5fbW92ZWQ9ITApLGcodGhpcy5fYW5pbVJlcXVlc3QpO3ZhciBhPWUoaS5fbW92ZSxpLHRoaXMuX2NlbnRlcix0aGlzLl96b29tLHtwaW5jaDohMCxyb3VuZDohMX0pO3RoaXMuX2FuaW1SZXF1ZXN0PWYoYSx0aGlzLCEwKSxQdCh0KX19LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJnRoaXMuX3pvb21pbmc/KHRoaXMuX3pvb21pbmc9ITEsZyh0aGlzLl9hbmltUmVxdWVzdCksZnQoZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUpLGZ0KGRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbj90aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwhMCx0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk6dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKSk6dGhpcy5fem9vbWluZz0hMX19KTtiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRvdWNoWm9vbSIsWm4pLGJlLkJveFpvb209Ym4sYmUuRG91YmxlQ2xpY2tab29tPVRuLGJlLkRyYWc9em4sYmUuS2V5Ym9hcmQ9TW4sYmUuU2Nyb2xsV2hlZWxab29tPUNuLGJlLlRhcD1TbixiZS5Ub3VjaFpvb209Wm4sT2JqZWN0LmZyZWV6ZT10aSx0LnZlcnNpb249IjEuNC4wIix0LkNvbnRyb2w9VGUsdC5jb250cm9sPXplLHQuQnJvd3Nlcj1RaSx0LkV2ZW50ZWQ9Y2ksdC5NaXhpbj1CZSx0LlV0aWw9dWksdC5DbGFzcz12LHQuSGFuZGxlcj1FZSx0LmV4dGVuZD1pLHQuYmluZD1lLHQuc3RhbXA9bix0LnNldE9wdGlvbnM9bCx0LkRvbUV2ZW50PVBlLHQuRG9tVXRpbD12ZSx0LlBvc0FuaW1hdGlvbj1MZSx0LkRyYWdnYWJsZT1SZSx0LkxpbmVVdGlsPU5lLHQuUG9seVV0aWw9RGUsdC5Qb2ludD14LHQucG9pbnQ9dyx0LkJvdW5kcz1QLHQuYm91bmRzPWIsdC5UcmFuc2Zvcm1hdGlvbj1TLHQudHJhbnNmb3JtYXRpb249Wix0LlByb2plY3Rpb249SGUsdC5MYXRMbmc9TSx0LmxhdExuZz1DLHQuTGF0TG5nQm91bmRzPVQsdC5sYXRMbmdCb3VuZHM9eix0LkNSUz1kaSx0Lkdlb0pTT049c24sdC5nZW9KU09OPVh0LHQuZ2VvSnNvbj1hbix0LkxheWVyPXFlLHQuTGF5ZXJHcm91cD1HZSx0LmxheWVyR3JvdXA9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IEdlKHQsaSl9LHQuRmVhdHVyZUdyb3VwPUtlLHQuZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS2UodCl9LHQuSW1hZ2VPdmVybGF5PWhuLHQuaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IGhuKHQsaSxlKX0sdC5WaWRlb092ZXJsYXk9dW4sdC52aWRlb092ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgdW4odCxpLGUpfSx0LkRpdk92ZXJsYXk9bG4sdC5Qb3B1cD1jbix0LnBvcHVwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBjbih0LGkpfSx0LlRvb2x0aXA9X24sdC50b29sdGlwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBfbih0LGkpfSx0Lkljb249WWUsdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWWUodCl9LHQuRGl2SWNvbj1kbix0LmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkbih0KX0sdC5NYXJrZXI9JGUsdC5tYXJrZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3ICRlKHQsaSl9LHQuVGlsZUxheWVyPW1uLHQudGlsZUxheWVyPUp0LHQuR3JpZExheWVyPXBuLHQuZ3JpZExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcG4odCl9LHQuU1ZHPVBuLHQuc3ZnPVF0LHQuUmVuZGVyZXI9Z24sdC5DYW52YXM9dm4sdC5jYW52YXM9JHQsdC5QYXRoPVFlLHQuQ2lyY2xlTWFya2VyPXRuLHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB0bih0LGkpfSx0LkNpcmNsZT1lbix0LmNpcmNsZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBlbih0LGksZSl9LHQuUG9seWxpbmU9bm4sdC5wb2x5bGluZT1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgbm4odCxpKX0sdC5Qb2x5Z29uPW9uLHQucG9seWdvbj1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgb24odCxpKX0sdC5SZWN0YW5nbGU9TG4sdC5yZWN0YW5nbGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IExuKHQsaSl9LHQuTWFwPWJlLHQubWFwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBiZSh0LGkpfTt2YXIgRW49d2luZG93Lkw7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPUVuLHRoaXN9LHdpbmRvdy5MPXR9KTsK</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.OpenStreetMap.css" Permission="644" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgouT3BlblN0cmVldE1hcFdpbmRvdyB7CiAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1ZjU7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDBweCAjZTllOWU5OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICBtYXJnaW4tdG9wOiAxNnB4Owp9CgouT3BlblN0cmVldE1hcFdpbmRvdyA+IC5Db250ZW50IHsKICAgIHBhZGRpbmc6IDhweCA4cHggMTBweCAxMHB4OwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwJTsKfQoKfQo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/thirdparty/leaflet-1.4.0/leaflet.css" Permission="644" Encode="Base64">LyogcmVxdWlyZWQgc3R5bGVzICovCgoubGVhZmxldC1wYW5lLAoubGVhZmxldC10aWxlLAoubGVhZmxldC1tYXJrZXItaWNvbiwKLmxlYWZsZXQtbWFya2VyLXNoYWRvdywKLmxlYWZsZXQtdGlsZS1jb250YWluZXIsCi5sZWFmbGV0LXBhbmUgPiBzdmcsCi5sZWFmbGV0LXBhbmUgPiBjYW52YXMsCi5sZWFmbGV0LXpvb20tYm94LAoubGVhZmxldC1pbWFnZS1sYXllciwKLmxlYWZsZXQtbGF5ZXIgewoJcG9zaXRpb246IGFic29sdXRlOwoJbGVmdDogMDsKCXRvcDogMDsKCX0KLmxlYWZsZXQtY29udGFpbmVyIHsKCW92ZXJmbG93OiBoaWRkZW47Cgl9Ci5sZWFmbGV0LXRpbGUsCi5sZWFmbGV0LW1hcmtlci1pY29uLAoubGVhZmxldC1tYXJrZXItc2hhZG93IHsKCS13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CgkgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwoJICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCSAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7Cgl9Ci8qIFNhZmFyaSByZW5kZXJzIG5vbi1yZXRpbmEgdGlsZSBvbiByZXRpbmEgYmV0dGVyIHdpdGggdGhpcywgYnV0IENocm9tZSBpcyB3b3JzZSAqLwoubGVhZmxldC1zYWZhcmkgLmxlYWZsZXQtdGlsZSB7CglpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7Cgl9Ci8qIGhhY2sgdGhhdCBwcmV2ZW50cyBodyBsYXllcnMgInN0cmV0Y2hpbmciIHdoZW4gbG9hZGluZyBuZXcgdGlsZXMgKi8KLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHsKCXdpZHRoOiAxNjAwcHg7CgloZWlnaHQ6IDE2MDBweDsKCS13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwoJfQoubGVhZmxldC1tYXJrZXItaWNvbiwKLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7CglkaXNwbGF5OiBibG9jazsKCX0KLyogLmxlYWZsZXQtY29udGFpbmVyIHN2ZzogcmVzZXQgc3ZnIG1heC13aWR0aCBkZWNsZXJhdGlvbiBzaGlwcGVkIGluIEpvb21sYSEgKGpvb21sYS5vcmcpIDMueCAqLwovKiAubGVhZmxldC1jb250YWluZXIgaW1nOiBtYXAgaXMgYnJva2VuIGluIEZGIGlmIHlvdSBoYXZlIG1heC13aWR0aDogMTAwJSBvbiB0aWxlcyAqLwoubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtb3ZlcmxheS1wYW5lIHN2ZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW1hcmtlci1wYW5lIGltZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXNoYWRvdy1wYW5lIGltZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUtcGFuZSBpbWcsCi5sZWFmbGV0LWNvbnRhaW5lciBpbWcubGVhZmxldC1pbWFnZS1sYXllciwKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUgewoJbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CgltYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7Cgl9CgoubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC16b29tIHsKCS1tcy10b3VjaC1hY3Rpb246IHBhbi14IHBhbi15OwoJdG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTsKCX0KLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZyB7CgktbXMtdG91Y2gtYWN0aW9uOiBwaW5jaC16b29tOwoJLyogRmFsbGJhY2sgZm9yIEZGIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBwaW5jaC16b29tICovCgl0b3VjaC1hY3Rpb246IG5vbmU7Cgl0b3VjaC1hY3Rpb246IHBpbmNoLXpvb207Cn0KLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZy5sZWFmbGV0LXRvdWNoLXpvb20gewoJLW1zLXRvdWNoLWFjdGlvbjogbm9uZTsKCXRvdWNoLWFjdGlvbjogbm9uZTsKfQoubGVhZmxldC1jb250YWluZXIgewoJLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKfQoubGVhZmxldC1jb250YWluZXIgYSB7Cgktd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoNTEsIDE4MSwgMjI5LCAwLjQpOwp9Ci5sZWFmbGV0LXRpbGUgewoJZmlsdGVyOiBpbmhlcml0OwoJdmlzaWJpbGl0eTogaGlkZGVuOwoJfQoubGVhZmxldC10aWxlLWxvYWRlZCB7Cgl2aXNpYmlsaXR5OiBpbmhlcml0OwoJfQoubGVhZmxldC16b29tLWJveCB7Cgl3aWR0aDogMDsKCWhlaWdodDogMDsKCS1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKCSAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCXotaW5kZXg6IDgwMDsKCX0KLyogd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg4MzE5ICovCi5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcgewoJLW1vei11c2VyLXNlbGVjdDogbm9uZTsKCX0KCi5sZWFmbGV0LXBhbmUgICAgICAgICB7IHotaW5kZXg6IDQwMDsgfQoKLmxlYWZsZXQtdGlsZS1wYW5lICAgIHsgei1pbmRleDogMjAwOyB9Ci5sZWFmbGV0LW92ZXJsYXktcGFuZSB7IHotaW5kZXg6IDQwMDsgfQoubGVhZmxldC1zaGFkb3ctcGFuZSAgeyB6LWluZGV4OiA1MDA7IH0KLmxlYWZsZXQtbWFya2VyLXBhbmUgIHsgei1pbmRleDogNjAwOyB9Ci5sZWFmbGV0LXRvb2x0aXAtcGFuZSAgIHsgei1pbmRleDogNjUwOyB9Ci5sZWFmbGV0LXBvcHVwLXBhbmUgICB7IHotaW5kZXg6IDcwMDsgfQoKLmxlYWZsZXQtbWFwLXBhbmUgY2FudmFzIHsgei1pbmRleDogMTAwOyB9Ci5sZWFmbGV0LW1hcC1wYW5lIHN2ZyAgICB7IHotaW5kZXg6IDIwMDsgfQoKLmxlYWZsZXQtdm1sLXNoYXBlIHsKCXdpZHRoOiAxcHg7CgloZWlnaHQ6IDFweDsKCX0KLmx2bWwgewoJYmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJcG9zaXRpb246IGFic29sdXRlOwoJfQoKCi8qIGNvbnRyb2wgcG9zaXRpb25pbmcgKi8KCi5sZWFmbGV0LWNvbnRyb2wgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJei1pbmRleDogODAwOwoJcG9pbnRlci1ldmVudHM6IHZpc2libGVQYWludGVkOyAvKiBJRSA5LTEwIGRvZXNuJ3QgaGF2ZSBhdXRvICovCglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KLmxlYWZsZXQtdG9wLAoubGVhZmxldC1ib3R0b20gewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogMTAwMDsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJfQoubGVhZmxldC10b3AgewoJdG9wOiAwOwoJfQoubGVhZmxldC1yaWdodCB7CglyaWdodDogMDsKCX0KLmxlYWZsZXQtYm90dG9tIHsKCWJvdHRvbTogMDsKCX0KLmxlYWZsZXQtbGVmdCB7CglsZWZ0OiAwOwoJfQoubGVhZmxldC1jb250cm9sIHsKCWZsb2F0OiBsZWZ0OwoJY2xlYXI6IGJvdGg7Cgl9Ci5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wgewoJZmxvYXQ6IHJpZ2h0OwoJfQoubGVhZmxldC10b3AgLmxlYWZsZXQtY29udHJvbCB7CgltYXJnaW4tdG9wOiAxMHB4OwoJfQoubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbCB7CgltYXJnaW4tYm90dG9tOiAxMHB4OwoJfQoubGVhZmxldC1sZWZ0IC5sZWFmbGV0LWNvbnRyb2wgewoJbWFyZ2luLWxlZnQ6IDEwcHg7Cgl9Ci5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wgewoJbWFyZ2luLXJpZ2h0OiAxMHB4OwoJfQoKCi8qIHpvb20gYW5kIGZhZGUgYW5pbWF0aW9ucyAqLwoKLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LXRpbGUgewoJd2lsbC1jaGFuZ2U6IG9wYWNpdHk7Cgl9Ci5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1wb3B1cCB7CglvcGFjaXR5OiAwOwoJLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJfQoubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtbWFwLXBhbmUgLmxlYWZsZXQtcG9wdXAgewoJb3BhY2l0eTogMTsKCX0KLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7Cgktd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKCSAgICAtbXMtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwoJICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Cgl9Ci5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHsKCXdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07Cgl9Ci5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHsKCS13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwwLjI1LDEpOwoJICAgLW1vei10cmFuc2l0aW9uOiAgICAtbW96LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7CgkgICAgICAgIHRyYW5zaXRpb246ICAgICAgICAgdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTsKCX0KLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXRpbGUsCi5sZWFmbGV0LXBhbi1hbmltIC5sZWFmbGV0LXRpbGUgewoJLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwoJICAgLW1vei10cmFuc2l0aW9uOiBub25lOwoJICAgICAgICB0cmFuc2l0aW9uOiBub25lOwoJfQoKLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXpvb20taGlkZSB7Cgl2aXNpYmlsaXR5OiBoaWRkZW47Cgl9CgoKLyogY3Vyc29ycyAqLwoKLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJY3Vyc29yOiBwb2ludGVyOwoJfQoubGVhZmxldC1ncmFiIHsKCWN1cnNvcjogLXdlYmtpdC1ncmFiOwoJY3Vyc29yOiAgICAtbW96LWdyYWI7CgljdXJzb3I6ICAgICAgICAgZ3JhYjsKCX0KLmxlYWZsZXQtY3Jvc3NoYWlyLAoubGVhZmxldC1jcm9zc2hhaXIgLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJY3Vyc29yOiBjcm9zc2hhaXI7Cgl9Ci5sZWFmbGV0LXBvcHVwLXBhbmUsCi5sZWFmbGV0LWNvbnRyb2wgewoJY3Vyc29yOiBhdXRvOwoJfQoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiLAoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiIC5sZWFmbGV0LWludGVyYWN0aXZlLAoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIHsKCWN1cnNvcjogbW92ZTsKCWN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKCWN1cnNvcjogICAgLW1vei1ncmFiYmluZzsKCWN1cnNvcjogICAgICAgICBncmFiYmluZzsKCX0KCi8qIG1hcmtlciAmIG92ZXJsYXlzIGludGVyYWN0aXZpdHkgKi8KLmxlYWZsZXQtbWFya2VyLWljb24sCi5sZWFmbGV0LW1hcmtlci1zaGFkb3csCi5sZWFmbGV0LWltYWdlLWxheWVyLAoubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgsCi5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJfQoKLmxlYWZsZXQtbWFya2VyLWljb24ubGVhZmxldC1pbnRlcmFjdGl2ZSwKLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSwKLmxlYWZsZXQtcGFuZSA+IHN2ZyBwYXRoLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJcG9pbnRlci1ldmVudHM6IHZpc2libGVQYWludGVkOyAvKiBJRSA5LTEwIGRvZXNuJ3QgaGF2ZSBhdXRvICovCglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KCi8qIHZpc3VhbCB0d2Vha3MgKi8KCi5sZWFmbGV0LWNvbnRhaW5lciB7CgliYWNrZ3JvdW5kOiAjZGRkOwoJb3V0bGluZTogMDsKCX0KLmxlYWZsZXQtY29udGFpbmVyIGEgewoJY29sb3I6ICMwMDc4QTg7Cgl9Ci5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtYWN0aXZlIHsKCW91dGxpbmU6IDJweCBzb2xpZCBvcmFuZ2U7Cgl9Ci5sZWFmbGV0LXpvb20tYm94IHsKCWJvcmRlcjogMnB4IGRvdHRlZCAjMzhmOwoJYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjUpOwoJfQoKCi8qIGdlbmVyYWwgdHlwb2dyYXBoeSAqLwoubGVhZmxldC1jb250YWluZXIgewoJZm9udDogMTJweC8xLjUgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKCX0KCgovKiBnZW5lcmFsIHRvb2xiYXIgc3R5bGVzICovCgoubGVhZmxldC1iYXIgewoJYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC42NSk7Cglib3JkZXItcmFkaXVzOiA0cHg7Cgl9Ci5sZWFmbGV0LWJhciBhLAoubGVhZmxldC1iYXIgYTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7Cgl3aWR0aDogMjZweDsKCWhlaWdodDogMjZweDsKCWxpbmUtaGVpZ2h0OiAyNnB4OwoJZGlzcGxheTogYmxvY2s7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cgljb2xvcjogYmxhY2s7Cgl9Ci5sZWFmbGV0LWJhciBhLAoubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CglkaXNwbGF5OiBibG9jazsKCX0KLmxlYWZsZXQtYmFyIGE6aG92ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKCX0KLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQgewoJYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OwoJYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKCX0KLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7Cglib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7Cglib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OwoJYm9yZGVyLWJvdHRvbTogbm9uZTsKCX0KLmxlYWZsZXQtYmFyIGEubGVhZmxldC1kaXNhYmxlZCB7CgljdXJzb3I6IGRlZmF1bHQ7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwoJY29sb3I6ICNiYmI7Cgl9CgoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYSB7Cgl3aWR0aDogMzBweDsKCWhlaWdodDogMzBweDsKCWxpbmUtaGVpZ2h0OiAzMHB4OwoJfQoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpmaXJzdC1jaGlsZCB7Cglib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7Cglib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwoJfQoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHsKCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDsKCWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7Cgl9CgovKiB6b29tIGNvbnRyb2wgKi8KCi5sZWFmbGV0LWNvbnRyb2wtem9vbS1pbiwKLmxlYWZsZXQtY29udHJvbC16b29tLW91dCB7Cglmb250OiBib2xkIDE4cHggJ0x1Y2lkYSBDb25zb2xlJywgTW9uYWNvLCBtb25vc3BhY2U7Cgl0ZXh0LWluZGVudDogMXB4OwoJfQoKLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC16b29tLWluLCAubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20tb3V0ICB7Cglmb250LXNpemU6IDIycHg7Cgl9CgoKLyogbGF5ZXJzIGNvbnRyb2wgKi8KCi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIHsKCWJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNCk7CgliYWNrZ3JvdW5kOiAjZmZmOwoJYm9yZGVyLXJhZGl1czogNXB4OwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9sYXllcnMucG5nKTsKCXdpZHRoOiAzNnB4OwoJaGVpZ2h0OiAzNnB4OwoJfQoubGVhZmxldC1yZXRpbmEgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbGF5ZXJzLTJ4LnBuZyk7CgliYWNrZ3JvdW5kLXNpemU6IDI2cHggMjZweDsKCX0KLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHsKCXdpZHRoOiA0NHB4OwoJaGVpZ2h0OiA0NHB4OwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycyAubGVhZmxldC1jb250cm9sLWxheWVycy1saXN0LAoubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJZGlzcGxheTogbm9uZTsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCB7CglkaXNwbGF5OiBibG9jazsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgewoJcGFkZGluZzogNnB4IDEwcHggNnB4IDZweDsKCWNvbG9yOiAjMzMzOwoJYmFja2dyb3VuZDogI2ZmZjsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIHsKCW92ZXJmbG93LXk6IHNjcm9sbDsKCW92ZXJmbG93LXg6IGhpZGRlbjsKCXBhZGRpbmctcmlnaHQ6IDVweDsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IgewoJbWFyZ2luLXRvcDogMnB4OwoJcG9zaXRpb246IHJlbGF0aXZlOwoJdG9wOiAxcHg7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIGxhYmVsIHsKCWRpc3BsYXk6IGJsb2NrOwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycy1zZXBhcmF0b3IgewoJaGVpZ2h0OiAwOwoJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CgltYXJnaW46IDVweCAtMTBweCA1cHggLTZweDsKCX0KCi8qIERlZmF1bHQgaWNvbiBVUkxzICovCi5sZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbWFya2VyLWljb24ucG5nKTsKCX0KCgovKiBhdHRyaWJ1dGlvbiBhbmQgc2NhbGUgY29udHJvbHMgKi8KCi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIHsKCWJhY2tncm91bmQ6ICNmZmY7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CgltYXJnaW46IDA7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sCi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7CglwYWRkaW5nOiAwIDVweDsKCWNvbG9yOiAjMzMzOwoJfQoubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGEgewoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJfQoubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGE6aG92ZXIgewoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cgl9Ci5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLAoubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7Cglmb250LXNpemU6IDExcHg7Cgl9Ci5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7CgltYXJnaW4tbGVmdDogNXB4OwoJfQoubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7CgltYXJnaW4tYm90dG9tOiA1cHg7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7Cglib3JkZXI6IDJweCBzb2xpZCAjNzc3OwoJYm9yZGVyLXRvcDogbm9uZTsKCWxpbmUtaGVpZ2h0OiAxLjE7CglwYWRkaW5nOiAycHggNXB4IDFweDsKCWZvbnQtc2l6ZTogMTFweDsKCXdoaXRlLXNwYWNlOiBub3dyYXA7CglvdmVyZmxvdzogaGlkZGVuOwoJLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwoJICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKCWJhY2tncm91bmQ6ICNmZmY7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZTpub3QoOmZpcnN0LWNoaWxkKSB7Cglib3JkZXItdG9wOiAycHggc29saWQgIzc3NzsKCWJvcmRlci1ib3R0b206IG5vbmU7CgltYXJnaW4tdG9wOiAtMnB4OwoJfQoubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7Cglib3JkZXItYm90dG9tOiAycHggc29saWQgIzc3NzsKCX0KCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLAoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgewoJYm94LXNoYWRvdzogbm9uZTsKCX0KLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciB7Cglib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7CgliYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwoJfQoKCi8qIHBvcHVwICovCgoubGVhZmxldC1wb3B1cCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CgltYXJnaW4tYm90dG9tOiAyMHB4OwoJfQoubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIgewoJcGFkZGluZzogMXB4OwoJdGV4dC1hbGlnbjogbGVmdDsKCWJvcmRlci1yYWRpdXM6IDEycHg7Cgl9Ci5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgewoJbWFyZ2luOiAxM3B4IDE5cHg7CglsaW5lLWhlaWdodDogMS40OwoJfQoubGVhZmxldC1wb3B1cC1jb250ZW50IHAgewoJbWFyZ2luOiAxOHB4IDA7Cgl9Ci5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIgewoJd2lkdGg6IDQwcHg7CgloZWlnaHQ6IDIwcHg7Cglwb3NpdGlvbjogYWJzb2x1dGU7CglsZWZ0OiA1MCU7CgltYXJnaW4tbGVmdDogLTIwcHg7CglvdmVyZmxvdzogaGlkZGVuOwoJcG9pbnRlci1ldmVudHM6IG5vbmU7Cgl9Ci5sZWFmbGV0LXBvcHVwLXRpcCB7Cgl3aWR0aDogMTdweDsKCWhlaWdodDogMTdweDsKCXBhZGRpbmc6IDFweDsKCgltYXJnaW46IC0xMHB4IGF1dG8gMDsKCgktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKCSAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwoJICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CgkgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKCX0KLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyLAoubGVhZmxldC1wb3B1cC10aXAgewoJYmFja2dyb3VuZDogd2hpdGU7Cgljb2xvcjogIzMzMzsKCWJveC1zaGFkb3c6IDAgM3B4IDE0cHggcmdiYSgwLDAsMCwwLjQpOwoJfQoubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbiB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDA7CglyaWdodDogMDsKCXBhZGRpbmc6IDRweCA0cHggMCAwOwoJYm9yZGVyOiBub25lOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJd2lkdGg6IDE4cHg7CgloZWlnaHQ6IDE0cHg7Cglmb250OiAxNnB4LzE0cHggVGFob21hLCBWZXJkYW5hLCBzYW5zLXNlcmlmOwoJY29sb3I6ICNjM2MzYzM7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglmb250LXdlaWdodDogYm9sZDsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwoJfQoubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbjpob3ZlciB7Cgljb2xvcjogIzk5OTsKCX0KLmxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQgewoJb3ZlcmZsb3c6IGF1dG87Cglib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKCWJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwoJfQoKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyIHsKCXpvb206IDE7Cgl9Ci5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcCB7Cgl3aWR0aDogMjRweDsKCW1hcmdpbjogMCBhdXRvOwoKCS1tcy1maWx0ZXI6ICJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCkiOwoJZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCk7Cgl9Ci5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIgewoJbWFyZ2luLXRvcDogLTFweDsKCX0KCi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtem9vbSwKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtY29udHJvbC1sYXllcnMsCi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciwKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHsKCWJvcmRlcjogMXB4IHNvbGlkICM5OTk7Cgl9CgoKLyogZGl2IGljb24gKi8KCi5sZWFmbGV0LWRpdi1pY29uIHsKCWJhY2tncm91bmQ6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjNjY2OwoJfQoKCi8qIFRvb2x0aXAgKi8KLyogQmFzZSBzdHlsZXMgZm9yIHRoZSBlbGVtZW50IHRoYXQgaGFzIGEgdG9vbHRpcCAqLwoubGVhZmxldC10b29sdGlwIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXBhZGRpbmc6IDZweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjZmZmOwoJYm9yZGVyLXJhZGl1czogM3B4OwoJY29sb3I6ICMyMjI7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwoJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKCS1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CgktbXMtdXNlci1zZWxlY3Q6IG5vbmU7Cgl1c2VyLXNlbGVjdDogbm9uZTsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40KTsKCX0KLmxlYWZsZXQtdG9vbHRpcC5sZWFmbGV0LWNsaWNrYWJsZSB7CgljdXJzb3I6IHBvaW50ZXI7Cglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlLAoubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUsCi5sZWFmbGV0LXRvb2x0aXAtbGVmdDpiZWZvcmUsCi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJYm9yZGVyOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKCWNvbnRlbnQ6ICIiOwoJfQoKLyogRGlyZWN0aW9ucyAqLwoKLmxlYWZsZXQtdG9vbHRpcC1ib3R0b20gewoJbWFyZ2luLXRvcDogNnB4Owp9Ci5sZWFmbGV0LXRvb2x0aXAtdG9wIHsKCW1hcmdpbi10b3A6IC02cHg7Cn0KLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlLAoubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUgewoJbGVmdDogNTAlOwoJbWFyZ2luLWxlZnQ6IC02cHg7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSB7Cglib3R0b206IDA7CgltYXJnaW4tYm90dG9tOiAtMTJweDsKCWJvcmRlci10b3AtY29sb3I6ICNmZmY7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSB7Cgl0b3A6IDA7CgltYXJnaW4tdG9wOiAtMTJweDsKCW1hcmdpbi1sZWZ0OiAtNnB4OwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKCX0KLmxlYWZsZXQtdG9vbHRpcC1sZWZ0IHsKCW1hcmdpbi1sZWZ0OiAtNnB4Owp9Ci5sZWFmbGV0LXRvb2x0aXAtcmlnaHQgewoJbWFyZ2luLWxlZnQ6IDZweDsKfQoubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLAoubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7Cgl0b3A6IDUwJTsKCW1hcmdpbi10b3A6IC02cHg7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtbGVmdDpiZWZvcmUgewoJcmlnaHQ6IDA7CgltYXJnaW4tcmlnaHQ6IC0xMnB4OwoJYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHsKCWxlZnQ6IDA7CgltYXJnaW4tbGVmdDogLTEycHg7Cglib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7Cgl9Cgo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/thirdparty/nvd3-1.7.1/nv.d3.css" Permission="644" Encode="Base64">LyoqKioqKioqKioqKioqKioqKioqCiAqIFNWRyBDU1MKICovCgoKc3ZnIHsKICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgLyogVHJ5aW5nIHRvIGdldCBTVkcgdG8gYWN0IGxpa2UgYSBncmVlZHkgYmxvY2sgaW4gYWxsIGJyb3dzZXJzICovCiAgZGlzcGxheTogYmxvY2s7Ci8qIFJvdGhlciBPU1MgLyBPcGVuU3RyZWV0TWFwCiAgd2lkdGg6MTAwJTsKICBoZWlnaHQ6MTAwJTsKRU8gUm90aGVyICovCn0KCi8qKioqKioqKioqKioqKioqKioqKgogIERlZmF1bHQgQ1NTIGZvciBhbiBzdmcgZWxlbWVudCBudmQzIHVzZWQKKi8Kc3ZnLm52ZDMtc3ZnIHsKICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBkaXNwbGF5OiBibG9jazsKLyogUm90aGVyIE9TUyAvIE9wZW5TdHJlZXRNYXAgKi8KICAgIHdpZHRoOjEwMCU7CiAgICBoZWlnaHQ6MTAwJTsKLyogRU8gUm90aGVyICovCn0KCi8qKioqKioqKioqKioqKioqKioqKgogIEJveCBzaGFkb3cgYW5kIGJvcmRlciByYWRpdXMgc3R5bGluZwoqLwoubnZ0b29sdGlwLndpdGgtM2Qtc2hhZG93LCAud2l0aC0zZC1zaGFkb3cgLm52dG9vbHRpcCB7CiAgLW1vei1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwoKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi8qKioqKioqKioqKioqKioqKioqKgogKiBUT09MVElQIENTUwogKi8KCi5udnRvb2x0aXAgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDEuMCk7CiAgcGFkZGluZzogMXB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpOwogIHotaW5kZXg6IDEwMDAwOwoKICBmb250LWZhbWlseTogQXJpYWw7CiAgZm9udC1zaXplOiAxM3B4OwogIHRleHQtYWxpZ246IGxlZnQ7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogIHdoaXRlLXNwYWNlOiBub3dyYXA7CgogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLypHaXZlIHRvb2x0aXBzIHRoYXQgb2xkIGZhZGUgaW4gdHJhbnNpdGlvbiBieQogICAgcHV0dGluZyBhICJ3aXRoLXRyYW5zaXRpb25zIiBjbGFzcyBvbiB0aGUgY29udGFpbmVyIGRpdi4KKi8KLm52dG9vbHRpcC53aXRoLXRyYW5zaXRpb25zLCAud2l0aC10cmFuc2l0aW9ucyAubnZ0b29sdGlwIHsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSA1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgNTBtcyBsaW5lYXI7CgogIHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zOwogIC1tb3otdHJhbnNpdGlvbi1kZWxheTogMjAwbXM7CiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAyMDBtczsKfQoKLm52dG9vbHRpcC54LW52dG9vbHRpcCwKLm52dG9vbHRpcC55LW52dG9vbHRpcCB7CiAgcGFkZGluZzogOHB4Owp9CgoubnZ0b29sdGlwIGgzIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNHB4IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NywyNDcsMjQ3LDAuNzUpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7CgogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsKICBib3JkZXItcmFkaXVzOiAxcHggNXB4IDAgMDsKfQoKLm52dG9vbHRpcCBwIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNXB4IDE0cHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubnZ0b29sdGlwIHNwYW4gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW46IDJweCAwOwp9CgoubnZ0b29sdGlwIHRhYmxlIHsKICBtYXJnaW46IDZweDsKICBib3JkZXItc3BhY2luZzowOwp9CgoKLm52dG9vbHRpcCB0YWJsZSB0ZCB7CiAgcGFkZGluZzogMnB4IDlweCAycHggMDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoubnZ0b29sdGlwIHRhYmxlIHRkLmtleSB7CiAgZm9udC13ZWlnaHQ6bm9ybWFsOwp9Ci5udnRvb2x0aXAgdGFibGUgdGQudmFsdWUgewogIHRleHQtYWxpZ246IHJpZ2h0OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoubnZ0b29sdGlwIHRhYmxlIHRyLmhpZ2hsaWdodCB0ZCB7CiAgcGFkZGluZzogMXB4IDlweCAxcHggMDsKICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDsKICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7CiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgYm9yZGVyLXRvcC13aWR0aDogMXB4Owp9CgoubnZ0b29sdGlwIHRhYmxlIHRkLmxlZ2VuZC1jb2xvci1ndWlkZSBkaXYgewogIHdpZHRoOiA4cHg7CiAgaGVpZ2h0OiA4cHg7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLm52dG9vbHRpcCAuZm9vdGVyIHsKICBwYWRkaW5nOiAzcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubnZ0b29sdGlwLXBlbmRpbmctcmVtb3ZhbCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubnZkMyB0ZXh0IHsKICBmb250OiBub3JtYWwgMTJweCBBcmlhbDsKfQoKLm52ZDMgLnRpdGxlIHsKIGZvbnQ6IGJvbGQgMTRweCBBcmlhbDsKfQoKLm52ZDMgLm52LWJhY2tncm91bmQgewogIGZpbGw6IHdoaXRlOwogIGZpbGwtb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtbm9EYXRhIHsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCgovKioqKioqKioqKgoqICBCcnVzaAoqLwoKLm52LWJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjEyNTsKICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cn0KCgovKioqKioqKioqKgoqICBMZWdlbmQKKi8KCi5udmQzIC5udi1sZWdlbmQgLm52LXNlcmllcyB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgoubnZkMyAubnYtbGVnZW5kIC5udi1kaXNhYmxlZCBjaXJjbGUgewogIGZpbGwtb3BhY2l0eTogMDsKfQoKCi8qKioqKioqKioqCiogIEF4ZXMKKi8KCi5heGlzIHsKICBvcGFjaXR5OiAxOwp9CgouYXhpcy5udi1kaXNhYmxlZCB7CiAgb3BhY2l0eTogMDsKfQoKLm52ZDMgLm52LWF4aXMgewogIHBvaW50ZXItZXZlbnRzOm5vbmU7Cn0KCi5udmQzIC5udi1heGlzIHBhdGggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjMDAwOwogIHN0cm9rZS1vcGFjaXR5OiAuNzU7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAubnYtYXhpcyBwYXRoLmRvbWFpbiB7CiAgc3Ryb2tlLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMgLm52LWF4aXMubnYteCBwYXRoLmRvbWFpbiB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7Cn0KCi5udmQzIC5udi1heGlzIGxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjZTVlNWU1OwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKfQoKLm52ZDMgLm52LWF4aXMgLnplcm8gbGluZSwKLyp0aGlzIHNlbGVjdG9yIG1heSBub3QgYmUgbmVjZXNzYXJ5Ki8gLm52ZDMgLm52LWF4aXMgbGluZS56ZXJvIHsKICBzdHJva2Utb3BhY2l0eTogLjc1Owp9CgoubnZkMyAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0IHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm52ZDMgLnggIC5udi1heGlzIC5udi1heGlzTWF4TWluIHRleHQsCi5udmQzIC54MiAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0LAoubnZkMyAueDMgLm52LWF4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZQp9CgoKLyoqKioqKioqKioKKiAgQnJ1c2gKKi8KCi5udi1icnVzaCAucmVzaXplIHBhdGggewogIGZpbGw6ICNlZWU7CiAgc3Ryb2tlOiAjNjY2Owp9CgoKLyoqKioqKioqKioKKiAgQmFycwoqLwoKLm52ZDMgLm52LWJhcnMgLm5lZ2F0aXZlIHJlY3QgewogICAgemZpbGw6IGJyb3duOwp9CgoubnZkMyAubnYtYmFycyByZWN0IHsKICB6ZmlsbDogc3RlZWxibHVlOwogIGZpbGwtb3BhY2l0eTogLjc1OwoKICB0cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cn0KCi5udmQzIC5udi1iYXJzIHJlY3QuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHJlY3QgewogIGZpbGw6IGxpZ2h0Ymx1ZTsKfQoKLm52ZDMgLm52LWJhcnMgdGV4dCB7CiAgZmlsbDogcmdiYSgwLDAsMCwwKTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHRleHQgewogIGZpbGw6IHJnYmEoMCwwLDAsMSk7Cn0KCgovKioqKioqKioqKgoqICBCYXJzCiovCgoubnZkMyAubnYtbXVsdGliYXIgLm52LWdyb3VwcyByZWN0LAoubnZkMyAubnYtbXVsdGliYXJIb3Jpem9udGFsIC5udi1ncm91cHMgcmVjdCwKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgcmVjdCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CgogIHRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKfQoKLm52ZDMgLm52LW11bHRpYmFyIC5udi1ncm91cHMgcmVjdDpob3ZlciwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIsCi5udmQzIC5udi1kaXNjcmV0ZWJhciAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgdGV4dCwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHRleHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZpbGw6IHJnYmEoMCwwLDAsMSk7CiAgc3Ryb2tlOiByZ2JhKDAsMCwwLDApOwp9CgovKioqKioqKioqKioKKiAgUGllIENoYXJ0CiovCgoubnZkMy5udi1waWUgcGF0aCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwoKfQoKLm52ZDMubnYtcGllIC5udi1waWUtdGl0bGUgewogICAgZm9udC1zaXplOiAyNHB4OwogICAgZmlsbDogcmdiYSgxOSwgMTk2LCAyNDksIDAuNTkpOwp9CgoubnZkMy5udi1waWUgLm52LXNsaWNlIHRleHQgewogIHN0cm9rZTogIzAwMDsKICBzdHJva2Utd2lkdGg6IDA7Cn0KCi5udmQzLm52LXBpZSBwYXRoIHsKICBzdHJva2U6ICNmZmY7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgc3Ryb2tlLW9wYWNpdHk6IDE7Cn0KCi5udmQzLm52LXBpZSAuaG92ZXIgcGF0aCB7CiAgZmlsbC1vcGFjaXR5OiAuNzsKfQoubnZkMy5udi1waWUgLm52LWxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoubnZkMy5udi1waWUgLm52LWxhYmVsIHJlY3QgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLyoqKioqKioqKioKKiBMaW5lcwoqLwoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKfQoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUubnYtdGhpbi1saW5lIHsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKCi5udmQzIC5udi1ncm91cHMgcGF0aC5udi1hcmVhIHsKICBzdHJva2U6IG5vbmU7Cn0KCi5udmQzIC5udi1saW5lLmhvdmVyIHBhdGggewogIHN0cm9rZS13aWR0aDogNnB4Owp9CgoubnZkMy5udi1saW5lIC5udmQzLm52LXNjYXR0ZXIgLm52LWdyb3VwcyAubnYtcG9pbnQgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtc2NhdHRlci5udi1zaW5nbGUtcG9pbnQgLm52LWdyb3VwcyAubnYtcG9pbnQgewogIGZpbGwtb3BhY2l0eTogLjUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjUgIWltcG9ydGFudDsKfQoKCi53aXRoLXRyYW5zaXRpb25zIC5udmQzIC5udi1ncm91cHMgLm52LXBvaW50IHsKICB0cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cgp9CgoubnZkMy5udi1zY2F0dGVyIC5udi1ncm91cHMgLm52LXBvaW50LmhvdmVyLAoubnZkMyAubnYtZ3JvdXBzIC5udi1wb2ludC5ob3ZlciB7CiAgc3Ryb2tlLXdpZHRoOiA3cHg7CiAgZmlsbC1vcGFjaXR5OiAuOTUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjk1ICFpbXBvcnRhbnQ7Cn0KCgoubnZkMyAubnYtcG9pbnQtcGF0aHMgcGF0aCB7CiAgc3Ryb2tlOiAjYWFhOwogIHN0cm9rZS1vcGFjaXR5OiAwOwogIGZpbGw6ICNlZWU7CiAgZmlsbC1vcGFjaXR5OiAwOwp9CgoKCi5udmQzIC5udi1pbmRleExpbmUgewogIGN1cnNvcjogZXctcmVzaXplOwp9CgoKLyoqKioqKioqKioKKiBEaXN0cmlidXRpb24KKi8KCi5udmQzIC5udi1kaXN0cmlidXRpb24gewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoKLyoqKioqKioqKioKKiAgU2NhdHRlcgoqLwoKLm52ZDMgLm52LWdyb3VwcyAubnYtcG9pbnQuaG92ZXIgewogIHN0cm9rZS13aWR0aDogMjBweDsKICBzdHJva2Utb3BhY2l0eTogLjU7Cn0KCi5udmQzIC5udi1zY2F0dGVyIC5udi1wb2ludC5ob3ZlciB7CiAgZmlsbC1vcGFjaXR5OiAxOwp9CgoKLyoqKioqKioqKioKKiAgU3RhY2tlZCBBcmVhCiovCgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEgewogIGZpbGwtb3BhY2l0eTogLjc7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwp9CgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjk7Cn0KCgoubnZkMy5udi1zdGFja2VkYXJlYSAubnYtZ3JvdXBzIC5udi1wb2ludCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgZmlsbC1vcGFjaXR5OiAwOwp9CgoKLyoqKioqKioqKioKKiAgTGluZSBQbHVzIEJhcgoqLwoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0IHsKICBmaWxsLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0OmhvdmVyIHsKICBmaWxsLW9wYWNpdHk6IDE7Cn0KCgovKioqKioqKioqKgoqICBCdWxsZXQKKi8KCi5udmQzLm52LWJ1bGxldCB7IGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsgfQoubnZkMy5udi1idWxsZXQgLm52LW1lYXN1cmUgeyBmaWxsLW9wYWNpdHk6IC44OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtbWVhc3VyZTpob3ZlciB7IGZpbGwtb3BhY2l0eTogMTsgfQoubnZkMy5udi1idWxsZXQgLm52LW1hcmtlciB7IHN0cm9rZTogIzAwMDsgc3Ryb2tlLXdpZHRoOiAycHg7IH0KLm52ZDMubnYtYnVsbGV0IC5udi1tYXJrZXJUcmlhbmdsZSB7IHN0cm9rZTogIzAwMDsgZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAxLjVweDsgfQoubnZkMy5udi1idWxsZXQgLm52LXRpY2sgbGluZSB7IHN0cm9rZTogIzY2Njsgc3Ryb2tlLXdpZHRoOiAuNXB4OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczAgeyBmaWxsOiAjZWVlOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczEgeyBmaWxsOiAjZGRkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczIgeyBmaWxsOiAjY2NjOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtdGl0bGUgeyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtc3VidGl0bGUgeyBmaWxsOiAjOTk5OyB9CgoKLm52ZDMubnYtYnVsbGV0IC5udi1yYW5nZSB7CiAgZmlsbDogI2JhYmFiYTsKICBmaWxsLW9wYWNpdHk6IC40Owp9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2U6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgovKioqKioqKioqKgoqIFNwYXJrbGluZQoqLwoKLm52ZDMubnYtc3BhcmtsaW5lIHBhdGggewogIGZpbGw6IG5vbmU7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgZy5udi1ob3ZlclZhbHVlIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtaG92ZXJWYWx1ZSBsaW5lIHsKICBzdHJva2U6ICMzMzM7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKIH0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMsCi5udmQzLm52LXNwYXJrbGluZXBsdXMgZyB7CiAgcG9pbnRlci1ldmVudHM6IGFsbDsKfQoKLm52ZDMgLm52LWhvdmVyQXJlYSB7CiAgZmlsbC1vcGFjaXR5OiAwOwogIHN0cm9rZS1vcGFjaXR5OiAwOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi14VmFsdWUsCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LXlWYWx1ZSB7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZvbnQtc2l6ZTogLjllbTsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi15VmFsdWUgewogIHN0cm9rZTogI2Y2NjsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtbWF4VmFsdWUgewogIHN0cm9rZTogIzJjYTAyYzsKICBmaWxsOiAjMmNhMDJjOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi1taW5WYWx1ZSB7CiAgc3Ryb2tlOiAjZDYyNzI4OwogIGZpbGw6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LWN1cnJlbnRWYWx1ZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAxLjFlbTsKfQoKLyoqKioqKioqKioKKiBoaXN0b3JpY2FsIHN0b2NrCiovCgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljayB7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5udmQzLm52LW9obGNCYXIgLm52LXRpY2tzIC5udi10aWNrLmhvdmVyIHsKICBzdHJva2Utd2lkdGg6IDJweDsKfQoKLm52ZDMubnYtb2hsY0JhciAubnYtdGlja3MgLm52LXRpY2sucG9zaXRpdmUgewogICAgc3Ryb2tlOiAjMmNhMDJjOwp9CgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljay5uZWdhdGl2ZSB7CiAgICBzdHJva2U6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LWhpc3RvcmljYWxTdG9ja0NoYXJ0IC5udi1heGlzIC5udi1heGlzbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoubnZkMy5udi1oaXN0b3JpY2FsU3RvY2tDaGFydCAubnYtZHJhZ1RhcmdldCB7CiAgZmlsbC1vcGFjaXR5OiAwOwogIHN0cm9rZTogbm9uZTsKICBjdXJzb3I6IG1vdmU7Cn0KCi5udmQzIC5udi1icnVzaCAuZXh0ZW50IHsKICBmaWxsLW9wYWNpdHk6IDAgIWltcG9ydGFudDsKfQoKLm52ZDMgLm52LWJydXNoQmFja2dyb3VuZCByZWN0IHsKICBzdHJva2U6ICMwMDA7CiAgc3Ryb2tlLXdpZHRoOiAuNDsKICBmaWxsOiAjZmZmOwogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgovKioqKioqKioqKgoqIFBhcmFsbGVsIENvb3JkaW5hdGVzCiovCgoubnZkMyAuYmFja2dyb3VuZCBwYXRoIHsKICBmaWxsOiBub25lOwogIHN0cm9rZTogI0VFRTsKICBzdHJva2Utb3BhY2l0eTogLjQ7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAuZm9yZWdyb3VuZCBwYXRoIHsKICBmaWxsOiBub25lOwogIHN0cm9rZS1vcGFjaXR5OiAuNzsKfQoKLm52ZDMgLmJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjM7CiAgc3Ryb2tlOiAjZmZmOwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKfQoKLm52ZDMgLmF4aXMgbGluZSwgLmF4aXMgcGF0aCB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICMwMDA7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAuYXhpcyB0ZXh0IHsKICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmOwp9CgovKioqKgpJbnRlcmFjdGl2ZSBMYXllcgoqLwoubnZkMyAubnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUgewogIHBvaW50ZXItZXZlbnRzOm5vbmU7Cn0KLm52ZDMgbGluZS5udi1ndWlkZWxpbmUgewogIHN0cm9rZTogI2NjYzsKfQo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/Location.svg" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wYmV0YTEgKDMyZDQ4MTIsIDIwMTktMDktMTkpIgogICBzb2RpcG9kaTpkb2NuYW1lPSJMb2NhdGlvbi5zdmciCiAgIHdpZHRoPSI4MiIKICAgaGVpZ2h0PSIxMjIiCiAgIHZpZXdCb3g9IjAgMCAyMS42OTU4MzMgMzIuMjc5MTY3IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4Ij4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTpjeT0iOTguOTgwODU0IgogICAgIGlua3NjYXBlOmN4PSI1Mi4wNzMxOTIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi42MDAyNTY1IgogICAgIHVuaXRzPSJweCIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaWQ9Im5hbWVkdmlldzgzOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI5MDciCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNjAwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczIiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODEuNzU2MjQ4LC0xMjQuMDg5NTkpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDgzNSIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQiCiAgICAgICBkPSJtIDEwMy4xODc1LDEzNC45Mzc1IGMgMCwxLjQ2MTI1IC0wLjI5NjE1LDIuODUzMzQgLTAuODMxNjksNC4xMTk1MSAtMS43NDYyMiwzLjk1MTEzIC05Ljc1MTY0MywxNy4wNDcxNiAtOS43NTE2NDMsMTcuMDQ3MTYgMCwwIC04LjA0MDkwNywtMTMuMDg1MTcgLTkuNzUxNjQ0LC0xNy4wNDcxNiAtMC41MzU1NDYsLTEuMjY2MTcgLTAuODMxNjkyLC0yLjY1ODI2IC0wLjgzMTY5MiwtNC4xMTk1MSAtMmUtNiwtNS44NDUwMSA0LjczODMyMSwtMTAuNTgzMzMgMTAuNTgzMzMzLC0xMC41ODMzMyA1Ljg0NTAxMywwIDEwLjU4MzMzNiw0LjczODMyIDEwLjU4MzMzNiwxMC41ODMzMyB6IiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDgzOCIKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQiCiAgICAgICBkPSJtIDk2LjU3MjkxNywxMzQuOTM3NSBhIDMuOTY4NzUsMy45Njg3NSAwIDAgMSAtMy45Njg3NSwzLjk2ODc1IDMuOTY4NzUsMy45Njg3NSAwIDAgMSAtMy45Njg3NSwtMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgMy45Njg3NSwtMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgMy45Njg3NSwzLjk2ODc1IHoiIC8+CiAgPC9nPgo8L3N2Zz4K</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/LocationRed.svg" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaWQ9InN2ZzgiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDIxLjY5NTgzMyAzMi4yNzkxNjciCiAgIGhlaWdodD0iMTIyIgogICB3aWR0aD0iODIiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkxvY2F0aW9uUmVkLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wYmV0YTEgKDMyZDQ4MTIsIDIwMTktMDktMTkpIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXJvdGF0aW9uPSIwIgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE2MDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTA3IgogICAgIGlkPSJuYW1lZHZpZXc4MzkiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTp6b29tPSIyLjI5NDYwODMiCiAgICAgaW5rc2NhcGU6Y3g9IjExMi44NDY0IgogICAgIGlua3NjYXBlOmN5PSI2Mi4wMjQyNzIiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI1IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOCIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHN0eWxlPSJmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybyIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43NTYyNDgsLTEyNC4wODk1OSkiPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTAzLjE4NzUsMTM0LjkzNzUgYyAwLDEuNDYxMjUgLTAuMjk2MTUsMi44NTMzNCAtMC44MzE2OSw0LjExOTUxIC0xLjc0NjIyLDMuOTUxMTMgLTkuNzUxNjQzLDE3LjA0NzE2IC05Ljc1MTY0MywxNy4wNDcxNiAwLDAgLTguMDQwOTA3LC0xMy4wODUxNyAtOS43NTE2NDQsLTE3LjA0NzE2IC0wLjUzNTU0NiwtMS4yNjYxNyAtMC44MzE2OTIsLTIuNjU4MjYgLTAuODMxNjkyLC00LjExOTUxIC0yZS02LC01Ljg0NTAxIDQuNzM4MzIxLC0xMC41ODMzMyAxMC41ODMzMzMsLTEwLjU4MzMzIDUuODQ1MDEzLDAgMTAuNTgzMzM2LDQuNzM4MzIgMTAuNTgzMzM2LDEwLjU4MzMzIHoiCiAgICAgICBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlLW9wYWNpdHk6MTtmaWxsOiNkYzAwMDAiCiAgICAgICBpZD0icGF0aDgzNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA5Ni41NzI5MTcsMTM0LjkzNzUgYSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgLTMuOTY4NzUsMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgLTMuOTY4NzUsLTMuOTY4NzUgMy45Njg3NSwzLjk2ODc1IDAgMCAxIDMuOTY4NzUsLTMuOTY4NzUgMy45Njg3NSwzLjk2ODc1IDAgMCAxIDMuOTY4NzUsMy45Njg3NSB6IgogICAgICAgc3R5bGU9ImZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6I2ZmZmZmZiIKICAgICAgIGlkPSJwYXRoODM4IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8L2c+Cjwvc3ZnPgo=</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/css/Core.OpenStreetMap.css" Permission="644" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qIEN1c3RvbWVyIERhc2hib2FyZCAqLwoub29vVGlsZV9PU01DYW52YXMgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKI29wZW5zdHJlZXRtYXAtY2FudmFzIHsKICAgIGhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWFyZ2luOiAwOwp9CgovKiBDdXN0b21lck9wZW5TdHJlZXRNYXAgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogICAgLk9TTSA+ICNvb29IZWFkZXIsCiAgICAuT1NNID4gI29vb0N1c3RvbWVyTm90aWZpY2F0aW9ucyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuT1NNID4gI29vb01haW5Cb3ggewogICAgICAgIGhlaWdodDogY2FsYyggMTAwdmggLSAxMDRweCApOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC5PU00gPiAjb29vSGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDE0NXB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDEuMnB4IHNvbGlkICNlNWU1ZWI7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLk9TTSA+ICNvb29NYWluQm94IHsKICAgICAgICBoZWlnaHQ6IGNhbGMoIDEwMHZoIC0gMTk0LjJweCApOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLk9TTSNvb29Db250ZW50IHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIC5PU00gPiAjb29vQ3VzdG9tZXJOb3RpZmljYXRpb25zIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgIH0KCiAgICAuT1NNICNvcGVuc3RyZWV0bWFwLWNhbnZhcyAubGVhZmxldC1sZWZ0IHsKICAgICAgICBsZWZ0OiA1NnB4OwogICAgfQp9Cg==</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/img/map.svg" Permission="644" Encode="Base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQuNjUgNC45OGwtNS0xLjc1Yy0uNDItLjE1LS44OC0uMTUtMS4zLS4wMUw0LjM2IDQuNTZDMy41NSA0Ljg0IDMgNS42IDMgNi40NnYxMS44NWMwIDEuNDEgMS40MSAyLjM3IDIuNzIgMS44NmwyLjkzLTEuMTRjLjIyLS4wOS40Ny0uMDkuNjktLjAxbDUgMS43NWMuNDIuMTUuODguMTUgMS4zLjAxbDMuOTktMS4zNGMuODEtLjI3IDEuMzYtMS4wNCAxLjM2LTEuOVY1LjY5YzAtMS40MS0xLjQxLTIuMzctMi43Mi0xLjg2bC0yLjkzIDEuMTRjLS4yMi4wOC0uNDYuMDktLjY5LjAxek0xNSAxOC44OWwtNi0yLjExVjUuMTFsNiAyLjExdjExLjY3eiIvPjwvc3ZnPg==</File>
        <File Location="doc/en/OpenStreetMap.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDMwNT4+CnN0cmVhbQp42nVRO0/DQAze+RX+A3Ft39NSdQPiIdgqsiGGtGm6UKFO/H18d4EOgBLLZyf+Hj64AAPZw5DEXoLD2apHi9O/+QKoGh18WjUo+hjgDD7m7+IdXmD3xxRrRqNw2hgj1YIFJCqKDaeEMcQqYPN0Jrj7MJDbETYPDOIx5cQwLiBJ0dlxYHYYRGCcX7dE2aA0EvOROEaiPRNPs/W0iGx7v4b1KHmixdX/y9v43Ag4oXDwlaDK8IYvCbOGFX7S4leUsC9M7VwGt+1IE/dacv1yPLQQWSzv1zw3rsETsqip94IU8hU+2GDdRxXtVrEm3mRot1ctWawk5NWM+jKwzdFCFOhqhlFDkGZGbcnVTCB0dmWdri+gcF3M7FeOLvtocqcfI3Mz0PLCDf9+/HWxu5svPiWBUQplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzQ+PgpzdHJlYW0KeNpTKFQwVDAAQkMFcyMgMlBIzgXy3IE4nSAdyAUAh+oMRwplbmRzdHJlYW0KZW5kb2JqCjI4IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNzc3Pj4Kc3RyZWFtCnja7VjBbtswDL3vK/QD1khRoiQg8GHAVmC3brkNO7RxvMt66C77/VGWqjhK0ARJeumMxLEiyyIpvMcnSj0rVCAfVN7IF9TmSf7dyfXr4P5prT5+QYVWk2Wj1qOiaLSJTnXeaw9RrYcfKwCDAMEAeAZ43AIQ7tqP2P9cf1Wf1wq0gSC/5K382sDq292Rzj/VbtSRDSezoDr0UZMJ2SJuN32HSLyaDONm6K304hYwxr6zcZX6AC3lzs22OrEf2s6EBKjDgZnthc7TbGZZvmitTB1Rm0A1AjBmLJF4R6u0VICPDpDtdMFIKRzAwR71fm4jguYQGhsyf985gIOWjfGVp0vrHbZOAWiCP8YDlB4Q5wZEMEDaUGiJMAgRHAoywSUSMODDMPHZoAyTVIXo05BVZonkmGlA4nh6yHwySASrjfONBwslFkq8SokGr9dSohE2Y5xGxy+zCwsi2yyqBdfSKxf53hfoCyfQrLJAnEGBVuYMmdbsCDcUOkNeI2KNaCZ0md9J6ETUkko/YAqhd0W92fad8RJb5f2k6SHHbSn3mzq63KdcIdPnGU/nASuecuvpkgfeN5cdYYvNGexvKG82amBu4Z/waYJLzIZCXSw7VEigp5tyfs8xClr2tY1ny+7w/wL+HirfBviMWiDcAn8rwCcyBd4JyyXp27Ktq0n/QvyXl9OT9GLaJWY6QdIHP5WHOB8AWTbywPSqDT3mArLvaGakGK5CdIa2GJZFi7FZjYVYlwCXXQuqEd8Ct97o6A8S9pgSduRrYfkQ69kEcT2j2O1hKiBP53EXhMvUOLxA650Bfg+NVwO+rTai1SHaXS3TRR9KqoQxY3dK0cMZpQRob/3BnJtpr3+7coKAdbCxujwvJ7ilp3Bw4mI+HTi56IF0hNbGwqildQl/UVMicIPXfTrcTrUIgw5gW1oMdbc1DDuVScfIL+XGmVVDpcbczkKNpXUNNfYxe5wa5f6sNMXg1N8kW8xOe7LqSeYKu7+/1Xd1f0yZnGZhYMfe6xBeTu4stbbuP/wDwuf5SQplbmRzdHJlYW0KZW5kb2JqCjMxIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTEwPj4Kc3RyZWFtCnjaUyhUMFQwAEJDBXMjIDJQSM4F8tyBOB0nXaigZ2xpYapQDuTpmpmZ6pkbmyjkKpiYWSC4OQrBCoEKTiEK+m6GCpZ6lmZGZgohaWAN5uZ6FhYWCiEp0TYGhibGIGwXG+Kl4BoCtyGQCwBXxB/VCmVuZHN0cmVhbQplbmRvYmoKMzQgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTg+PgpzdHJlYW0KeNplUMtOxDAMvPMV/oFmbcd1EqnKAfEQ3Fb0hji025YLFdoTv4+bPlYIJZY91jjODFyBAO0QBLaLcJkNPVt8Hvm+hdMTQXJJWaGdwDM7sZKjk+ShHd4bxMhISZFoRFJF7AmpG6yXMnOz9pewHgZBnHzhM3e54oj2QpeybMS6z4SlzpVvVnJHKy5kGi8lmCfL/ZaH/NG+wmMLV3A+xRp+TACLCxhgBtG4gy94g/Mh0ExI0Zl6n4oZigsgBvLiVKAqjcWa08uM8PD9Z/a2qVKtXfCy7Trguu2fjctACC7GuFnIVGzEsNg3Inq61T0VbaLifBCbLSNmwS55/9D57hfj4mfqCmVuZHN0cmVhbQplbmRvYmoKMzcgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyMjY+PgpzdHJlYW0KeNptUDFuwzAM3PsKfsAKScmkBBgaArQFugXVVnSwY7tLM2TK90tbdhqghUSQdySF08EVCNAOgbJdhPPF0KvF1z0fCxxeCJJLwgJlNpKjC8lDGT86xMhISZBoQhJBHAipH41Lmamr/BLGoQbE2a/zzH1uWJO90KcctsF2yIRrnRvf1eGeKua4dKbzGsyz5WHLY/4sb/Bc4ArOp9jCbVEZnKLCBYLEHXzDO5z+fPFxqxFpnfqw7d1h3fzHjEZUXYyx2rFrCdS6wGr96hLT6hTq4tCE6Om3HmiXvws6Pf0AeI9b4wplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTAwNT4+CnN0cmVhbQp42r1XzZLbNgy+9yn4AmYB8E+c8fjQmTYzvaX1rdODbWlzaQ7JJa8fACQlSrbXznbb3dVapAngw4cfkuaLQQP8iyYR/4G5fObRB34+XX1+MTbn6Mw3Hu2y9TGYz8bHoQ3+MX+aj+aXo/n5NzTZ5kjRHF+MJ2e9S2ZHyQ45mOP41x6AECAA/3iAUwQ4TwCO50758Pfxd1WB3jofSXTwaybPKpzNiFXFQAApipiK/HpcI4xkKaYGsY5WGDsDLntLQzY7hGjjbOCAwJ/jOGPDUMchlLlxasZnuiyy48DmHP93Ec0fH25Mfv10AwbDxlS+Vwg4XYDoRT6vzLyDOUKL6nRvE84IeA6A0esDLw4wZ8DRbzGoRtfFmvFzUKzLueri0LLsgZB9SXRg9vAyAnpWyUYRJ8ATHjg1aC+G5M3tO7OxzVx4pZuqJMj71VqGGIaD33cq0aUD5n0xxOnNY8WDxZwYWKnVuXBu0vKtSJ2wrDhV6DIXY7MjIJqPYieci57TqP7KFKamkid94aI6zYUw65uiIpTkagtFWgLBEDgR3jnXyMM2z8b/JM+cjSF19tRDZXAs3NG+sCBESY1pAkqc15Q/lYCczMD9piZzlzcSLgdQAqshEgucM65mA2cLgZLeFopYjxPv4WyZzOtrJusbuljU+X1LiiKzJAwnQs6zqSZ3K9+L7qcTpvqgZmWxYC5eCQhRjtUAg6lmF39nZS08gqLZVXXTrQjVTD2JwtR8xt6rWiJaZo2tPjb3wXVFRr40I2mYaHOoLbuvPX+j9hY+OepzwfLinXaJBr3UdOsHcW5C8FIDpqO39RZ1XFOH+2nrM133yLGjfCq9R2Ma73SUWhkF1Ks9tDHbJ/I56B6n4EtPpVUM5oqzhFLp3mWp9GEo5b+d/HqjJh0FmzzvwTRwqLJbtm91tjqn205fZji16PA2v/jyqAPwShtT2lhTS11ykK+1KRzIzsFstf66m1VgstnRppPgdJ/hBykz95ylYywBLhF9Lk6MNT9kAqMNyLQ7dmMIQ3GDaHgoSHzagrQR3PhPxf85NRlfRZ9qXDeduzIg5z6JJg38gNQxUAqrCM8srHdKJcrVWrtMW7JeC8sS6A7G23fd+0w7zvSMb2C6F3wnps/TE92u0f/a4nJO+X8D9CMHqoduPh+/4Gzie8aPx68X5DtNA3eZlrNuv13MtK5jds2V1knZH8s30k9Ypp54q7szGTe3b6V3aT3T83Qk5HNbfAMdveC70sHXxZVkPZvpdUyukOfWXu7Xd1jqG6ZJh7JSV/t/RSRfP10eQr1+Ri5p5+f7Zx3euyTz/VRWJe64w9AO5VcWPv70HdeZdPsKZW5kc3RyZWFtCmVuZG9iago0NCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI0Nj4+CnN0cmVhbQp42m1Qu07FMAzd+Qr/QIPtpI4jVRmQAIntim6IoY+UhTvcid/HbdoKBEosx8fHkc+BGxCgHYLIdhGmq1XPFh9nfujh/okguSQs0C8GsrqQPPTzW4eojJQEiQqSCOJISMNsWMpMXcXXMAxjQFz8xmcecsMx2Q9DymEntmMm3N658V0lD1Rr1rVTpi2YF8vjnuf83r/AYw83cD5pC1/rlsFFjHCFIHoUn/AKlz8Sf041Iq2LPuxzZ1kn/zGjkRidqlY7qCzbLl7UaVTrV5fYRPhyqjc3Ts1mVDVi15Ubaf1u7PSbFlbWZOYGX8GpHMoPLZe7b3SpaiwKZW5kc3RyZWFtCmVuZG9iago0NyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE1ODM+PgpzdHJlYW0KeNrNWcmO4zYQvecr9ANWSBYXETB0CJAMkNskfQty8CLPJXPoXPL7qYVFUbLk7sy4gcy02y2KruVV1aui3L12tjP433bJ4Y/pLl/x6hO+vty9v3Z9zhG6f/DqkHsfQ/e183HQi7+637vP3U8v3Y+/2C73ObrYvdw676D3kLqDS/2QQ/dy/eNojLPGBIP/vDGnaMx5MgZw7ZTHP19+ZRHW9+CjIxnW9iYDioA+W1tEnKfxYA3+cZ1Gj2+D44/+/LK0NLrexaSmlquFrY0iCK7HXdbEPjaWDs6YhFb6Aa1Gs3025hLIWvJg9PkoHtA92aumVBB7i3AYVA74G6Ltfvu0sfj3lw2j0Amb5D6bZKerce6G75c7NU9QhyDHkFY6zdkae/UjAW5P+PfpOgb8007GRj9icBEDm/PobFnNg7HnYKwHWXd1d3mPLOTgROLzPLF9DkGBc8b1Kd/h9nz8Zq2Y58bDUjVmzlgAsgiEucEMxAVfWHp4z9gwrC1i+dDUEzmFKrxPRTTmvZUEHAlLTkD8oXUMC8GO/trpvPT9Ct+fokukI16i3ztQXz8E6oy8kFe6kU8oNRljrF3C1JdLSAwRw36fcptQDzMTIANwoDhrk4QRKYjCGuUVzpLvqJb1mRutceTt9GS8wREpxj28pw/Be+gzuJVuYj4L06rSk3HeMyqMBCX36coUUriCSITQhDge4CioegrOBXldAzYTynuCBT70KcD/JVwLBoch9BDCOlzXD2HwiPv8SidzAnlJwIvXiMtgpMUxUkTJU+QySUdh75awKH70Qdn6noB4iwZkV4lKYBf2x6i7dBSplD2IOK4MUr/+rfotnzbJFzKNdYfN2oGy6iCqJattwgSIxbU50riLFiHOCcc++n0bjeccZ8le9PO7tEbBzW7jVmRCWmpjtOtdkflYf+urdlNBBecQXfEVDHawooprmIHjIfAHqLvTroqJbKoSWwso7jSSEC0o/eS4iBdsxMs5MkXjpM2PIuJcuMsOMakgWWcK5u3rHHXCiz+9GTvR2GLnKM6sKTblH6PeJTtwAq2YKYOUiikzjzbrqxcIwadSRA2hEAyib2WBtibOlFJ4tB8/V7Kl6hdwfBtQAYU3kjKMV1HSOiOq1dQYV4aomrJnBUMbXqWOm94mgxKsJj0ySqGadylrTF7Qin5ZDZfZT/TCkiXSHNyxgpBcKykyLzS7CLaWt7bUVATE7DKUqtnLXTwUlJ13WPGqSOfSbuyA4nyJSC7AX6TEFNDEvVMAlXhi6oBblzfANxcDqsv8Enoyd/5tMX2xYY3lu3oAg+jciWogStdns0iAVhU7xEOuzgikCqqrShtbodiBpwaZ+ZJXKJgwzUyqRMb+EWLU222jVGKISaieeSmpdhCw5rjLeBpzajIu5HWRRLPjtNxhgjgviaAMpWXHA4dYXXXofvtFkka4iU0r3PRIXVNwG+IpsNreyuTU1kFoCauCUaXz4CVi28jNIDFAadnRuOhCbkmMZW13Pjl70xkcS4VL4j7VaSLdpDeqxsV51phpKng07QTycZ4V2SDfZpZcTYzOWEgszKNIPQAzSN40ib0cAyTtaDzgfCGt380H52V60HHUNq3sQYJIeTuf6si+sn5mSPZ/DrC8tLNA0h0a8Nq/vA5K81w+2sr0MKfA6g5b0dThRmh11NHzR630uSXsl+Ide8OavTk9F/QUzROidR8NPtBuknfITyDvwR7n2tbhj3YSuoQ1+9VkkK484rGCzgNiXhCNCFw8QYrLwlHhZbJtSQcWRAHR7I+smhmxBZ4GYe/lOY31x5napQM1TV3rf78RlvGdz3d1yvb+LbQet8nHDc6tG9w341hb8myTjnZaye1Du7KlAg/wRr9WkIbNffcAbfqz82SxPNFZB3p5eIo7mU5lsx1bPQLVhxUbR7K0fIAhNClnMRUoBCCCKVbnsJj12dXNKV2kbw3c8zGtjtRhY6QGHvNbjlgz4Z5LNRZXPQCV8Tm1Z/B28NmXNLY8DmlLYEkOUFqQpzelCtpj8SbTp2VANee4xaT/VhObJa7doHnm8dr1kIdQvmiIoU/g6zcN5XLvaxH6JoKepcWU+mEYihc3s9bx+Yd/AQ9/sOkKZW5kc3RyZWFtCmVuZG9iago1MCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEwMTE+PgpzdHJlYW0KeNrtWMlu2zAQvfcr+ANiOcMdMHQo0AboLa1vRQ+2ZPfSHNJLf7/DVZQsF26tADkECaNIIjnLe7NQ7JkBE/QDzCL9CjY80d0DjR/1+mHP3n8C5rk3aNj+TA/RceUl24/fdkI4FOCNADgJMEaIIwg4jPTM9wi79DwMeiasEuIs43zEQ9+h9bTDwfcqT9THHkT8v+/kLk0+QLpHF96chjgQz3Q95uvYf99/Zh/37Jlx6Z1mv4OWilth2RNTxpWbn+wre7wwUXAg0wRHI+mvNMC+PKw8/FWdAYpLZTB5owPkWmd3kC5Zp1PRaUtpqLlHNRcpkBx01MlRh7HXpAVhCUYVB4cJ8QnBdKIhbW93aQ2hBFgcTagpWaaWxeFNWAg2QyCECncChrGHdoLIYNuyVLke1BLNsQqu9DjA0lfRcjkjXafIZp9NtiapSeaSrGRA34X9AhXD0MdkDGkV5YpzZJdP6iyhuY8ADjl4XBLg/CIEcOQEnIu8D98m+mQO44AN7mpIZ2S3Mwe417pGD1lnLp2Xr8NLSJXAQeu56OrEhpiIPo6/5ji8muPuZtmM/qAEdxbvzbrZIq0naGOY2AnusCbvl3kTcwq9rk4qeTo57NYIBqO5Rr9weI7K7PsUzjM7Ykg3nk4FYdJ1nduY95TxjtJPfH/d5jLrMLdcTTmq2dTUTYNgecoVKj4xrbunJHAf+N5xIbcCP8wPOgdLhlPK03pCMyJD+bNW3+Lw21BGRG4KyKUEzNEdTkmBnKDp/+K8cHdF9A0Ob5GeVgScVd4vl4ZQLiC4alSF22HaZnih1pSf5YbBGhyTc3zcb6hBGQMwjIbTiNMQKCZ/lpJIEIdtax6QuaBSS7WSdFdhtp47DY2JwxQtKyolQBwsIXQFolyBAjQ+Vy9KDQnysrIQpsZgXE21vekUS6syi1VXyLWok3memgd7bJ3qi9Y/wajCt3nOieTppA/VFl3fubxXEBSzTjEW1XCRX6csQ6+LtYvWq+2HC5TSNvbFjZdcOZiwedVXLoUU6RYj6LEgh0KZC/IEVbS7DZBtyr9Ew0m3a/V/fJH6LzkCLGS/QAMwrY8ts7igzFrntmnTIHV7ULg3D91uxSwBpaRyc2KR1hI8/9ra1mw4FeqpxP1/7Si9B6z2Hk3tqEJNW+xkPpmkzWQuRE2irL1K1GLFuZuVJCU8t6BeCxXGm458kk4+9o0Lm3PBGDpLvBounG7iggeuJb5xYWMuaFR0tNCvhQvnW7iglaMjxhsXVriQvdZ+CO0MnbutVPlTaL1NH0PXOGGoBDvnclN2Tsc+qQxXDun95HZyVKFA28Ymw3xt6PrOaPnfH6oWpj2++wMmDwLQCmVuZHN0cmVhbQplbmRvYmoKNTMgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMjA1Pj4Kc3RyZWFtCnja7VnJjtw2EL3nK/gDzbCKq4CGDgYSA7k5mVuQQy9SLvbBueT3U8VdavWkMyPbCTKwNWpRxWLVe7VQkvgsQCj6B8Ij/Vfi8omu3tPxez2/exLf/whikINDJ55moRGloZ8YpBm0eLr+elQqoILBKYBJgXNKnUHB6Upjw4h4TON80JjyRqlZR3nE03jAoEjDaRhNFrTnEVT8PR70MQmfIF1HYZgu8UCc6XzO5+v429NP4ocn8VlIPQQr/iQH0EivvPgkjAvl4qP4RXxojkogb5REp+mvdiB+fr8x+McGFEoc+OIREOA5EIZ4KGXovkpzDN0jRqIehPobJjq0J/mpHoxAPGZVEFiQp5cWayMdZotvNY+eDD3baDRgAf862mz/CYgDz5TqKc29MCueeIp26ynzFEdc9bKMGF108BWj1aOTWE72dIuCr4u6tChNSipIfVFGsET1l2uNJOfyxGjFBrYUORWzV8WB8yT5rwkEeCQQBpA+wFsk3EbCSysDgBysxYwvyUn0LgFM5SmXqTmfp5vldlhWa6mMWa1dye0ArrH24sqd57Nue25Fmii12/H0WnQXwQsWpcWwU8I97MRGvtEys3kk38BTjQjuVQlnLN9A1cLYhuYi6+IMMbYkGI+0TGlpuAx+nmFWOZV0cAKbLmn0VGTj2gvIYgodBuVI3p2SJlBb6yllbW9bpzNKN4t4lYISk8d3zVJiyqWklpzO/hgIPD/DmpBSUUq5ilyE+GrSriPBrJdwML1MYcy0zCD5uPCNz7wO+IybKiRWXuJIwca5Vqk25zYu6rzCac960gzHrTDuIidqvEwJJdPzGe/0BZgYYUQu2bFmFHS1nY3LC0TivV0bySCXMKc93bDwCNZ8RyvU3Pt/l1u+i+aSspDTxeSqT/PRXLN+zHNivY25O28RWRVNurXQfJAyUjPnjWpsLoumw3MVhvEQsrkMY+fr1cSc61pZLU6r9I5mp9Z2u0JJF6asMXJXpakqi+F4rDc43dJAKwZjyTU9Nel1C2eyS5EthkzRqCJRsnVJNihycf/2itpKO+C99jp/kfZqSSKs1lYmRHdLx2z1qpbuVACWGzwq+KiOCx7rfepRqXxSaoPNbSGjyllFD0u2Va5aRFrX6/rHotDv2oPRgQxGNxRCRkEvUTB3UPgbL/tWew+xF25fHmnXGJwke269SxyPXMA2aW7pRW4dOxfd2sUi2bYp/5TPe5vh2/SNswlBGBYIFg2lZnd08X6BFNfenwv9Lo9LGgZJoH7T0Dl3fZD7aQmXLxtW2mjp3FtY3QurfZqD9kGC9Xeaw+2Lkp2evTzJLdf+DzWHtkLeoSaKfN137do8jDLSqND20hsr3vHZbeT789jxBorznfM45uvGk13cZPW0kNiUMGTJKG1Wz3/xOZ7iCWmvZWLVyCs8UgkMUg107lkEutcnb31kK4poC2Ld8JWi6MXvSvaLGdqUIPq3mHlFzFgI0uuvFDIY2uM4Y8IPuGW9GjZ+zxCxtMHQ4X8fIhmh/lvQwTlLzJv8Nahepu9B22/1vQwhbG4jxoOLr5gefpG3RmZYfvXSrrJTi0l55of0stg4lFrzN7tk0Ixrdz989xesaybBCmVuZHN0cmVhbQplbmRvYmoKNTYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMDcyPj4Kc3RyZWFtCnja7VnLrts2EN33K/gDZmf4JmBoESAN0F0a74IuJNvqJlkkm/x+hi9JtCXbkWUkAYp7dSWRvBzOmTMPUuwLQwb0g8wK+gV2/Exv7+j6b7i/ObA//0LmuTfCsENPjcJx5SU7nD7uAZwA9AYQz4DGAHQI2J6ozTcC96k9XNQGVgH0Mo4Xom12wnqaofWNygN11yDE52Yn92lwi+lduNBzPsZLiJ7uXb6fmn8Pf7O3B/aFcemdZt/CKhW3YNlnpowrL5/YB/Z+VJEjqQRcGEl/pUH2z7uZxq+zIOzCSwHBtICEX1wv2qSL97S6dAXFQz/1NTs0pEano7I+6T2MAxonbSNgPwAagevoWYW5gf7NNULsR1BvGUDcMsB5uPAcUKR7L0AoFecM89D4gmxFB1kjIRU34iYSwdRkTzQ3cQijwopH6jR6HwBJyrejYigKOU6pL0xqTJlAmtQyCg7j5LkIKdQiqNFXUJcZwpy5pXCT7BkmTppBtlt/ic8PcwqRe61FhtJ4jmgSlsTrzO8+3Xu8kraBVCm51LoWDcpFmxQOJXgjHHqCFxn4HnUfdYEQBfQam1cSYn+2XZRYVtLppw1VO7+mXjuC5TJYsgZLLYBlI4+iSnjM6hB4eknD0VUXQ4TWMUxktwUQOK7kbCKiYUxlQnURBbp89UMUWBFZHokYKICD0Bm/2nDTWDExX26NpJgAq54OGpUXP0UK1IJr4X4lVrw8cWTK9JAos728h+hkLUdnfj06bZMUBL0ah0tZQbwoKxgwF7LXp4WLNDv2nzJ4oe84qYSo2huqv5C4oR/rioEwdtugLqTlXpaa7t4KIjsoqFLTUBNMKT8gMRdhu2TH10ZZYSge+axOawLLy+oH8ha3mJgwFDot/kgttW4PUCQEEO8DXUZTbwU3XsK9ufd5y8Et1mTyRd7niIi17GlGedD7CjfTHmpsDwbrdDaSGZ5JQvJGqsuSpSek2NbXpKCyU67PlQsaDP23NAGQON1r1skh4EDOEvvCQnLIr9LtGvxmZ12bhEN5F0u+U0m4ti4A2tNjOzeKeF5PtvLXWhW3D0Uk6SWueJEdMxvLitwwbgHtdM81ZOQno8axVnxIMOMe7nJBM4FrITutLKbhnIqFMDKOHqqJ6H9wrdpLygXpBFd+sVxQr9xEVrJXlAsB6Eg7nNhv9M/FMxW93YZy2zinwHGryunIffVWYHYHiCpwXSxAzyzgdfWIIpaopVzWBL+Y1bQ4UXAn3P9/gHTT+ZWx3JWIfuX88fS0e0kACGfC5kL+8wFA/4QAMEpYOMzcNkB4xVHZjQ+SH/Dzx3ZYW54Ta3Tcgf7NToqjr94M2k/7/PSzxc4Yza1U+cPF8Jo+XcwxyFhyOZdL6bIhkcpw5QT1j5mH1Cr1Y73G/CUmh4tmZ7TczxU9jc2GeDx7vv/jO81812cKZW5kc3RyZWFtCmVuZG9iago1OSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDY4MT4+CnN0cmVhbQp42r1WyW7bMBC99yv4A2Znhjtg6FCgDdBbWt+KHixLyqU5pJf+foebFlt17cQOEpoSOZrhe7NwxItAAfyHwhH/gzg889sDj6dx/rQTH7+gCDJYsmI3CEUkNT+Slzooset+bAE8AQYLiD2gtQAtAu47XgsN0Tavx8Fr4DTAoJI80b7ZkAfWsA+NLoKmbRDSc7NR2yy8x/yehLE/pEE08NyWuWt+7r6KzzvxIqQK3og/DIC0dODEs9DW15df4rt4nIBKZDQgySr+VRbFt4eVxd8rVIDYxJdKgt0DMovpvOgylhD4dHlE4HGf95oNWobRmgQ2ZNyjHGHe2icSG7PNn1k9qnw93/04sI+k8TwQkNZJZ9TD8pXIRQyoJXClpaWzwNlZjt2Xzv1v2FEqnjieHPNKBKxYjVaVg7SNVGOhy3uJFFsVKJtXJsNRTvXVSFxhdHNm9QmzVVlUz7xWoUJ7tJFBQvHYcEzV1dGEKIMxVFi1QSLaTCtHdInsocwp6k8s3sCyMtJwYizMg/bJRTWkMttjRJbIi/6+InAvzYVYDsxromFhIe0XVyaL9dCtebPfllXA8K4rvB2xoFfS93pqXYq8hBoPBbFyUXydhCnP362ctGV0Yzl5hc5LSg8SSCBT6F76eV50Zt4uqymGppS2+s3V5w41AI2WhvBcEejuUgScNCyxtB9D1d+tCnSFy7h+mN+Afrr1YwWHYbpgxviZmWz7rGfqHOK3t81x9CCdo8uT/DYglrl8v6QiMFLXTmZ2lPe/pW/K7cAtpFXb/10483ufA6ccbULLzz5/otUR226tBMxb0I21RjqlSxM6vuY2dC3UrHPSe79aAZqNNZWkmoy9TZeBK6jOeyEsm21lx95nxJQyOrU4CZe2JI3mg+XzDCf94eOHv7DiuNwKZW5kc3RyZWFtCmVuZG9iago2MiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI2MD4+CnN0cmVhbQp42m2RsW6EMAyG9z6FX4DUdoKTSChDpbZSt1OzVR3ggFt6w033+mcSgiq1IpZj8xv5/4AbEKA+BJ71IJyvWr1rXI78kuH5jSCaKCyQV21yMC5ayPPXgBgYKQoSLUgiiBMhjbP2YmIaan8L7aF3iKsteuYxdeyjfmGMye3CfkqE5Z46O1TxSLXmsL1ZziWYV83Tnuf0nT/gNcMNjI2hh/u2pTMePVzBSWjFD3zC6Y/F31OdSG+8dfvcUdbJf2B04r0JIVQcdb+p7GOdGBdYNZUUqxG7HASUyOFbYVUY6mXzlDrp7T6i/2UDS4uG9cmraOrLCHFDpLydbdIGo9k7PT0AavptrwplbmRzdHJlYW0KZW5kb2JqCjY3IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTgyPj4Kc3RyZWFtCnjatVVNb9swDL3vV+gPROOHRFuA4cOArcBu3XIbdkhiu5f20F7690tKspc4DrCPLgmtSLLe4yNFyT07dKBfdA3pD9zpSXt3ag9X7bPzKQm7V+3tkg8S3ZML0s6dR/fd3btPe/fxC7rkk5C4/eQCsQ/cuB01vk3R7YcfHQAhQAT9BICDABxHANaxQ+p/7r9mCAyeg5Bh7FCXs0+Idbm9bssPqSxjzMs+7y+9FPIkzexm7V34eUYSUHVEUjIQL5XI/CNtWn2cohHPREt4PKpQUGjWJwu6b3cbgy8PG5TqIjZlPtPhOALRpO3piuYd6CwTUVaclgrU1KMI4GEAmBhQQ6r/b/pQ28zAZ7lWPRonzylVbE1n7Aq8QiOPCq2WUq/bgbsS1yOazSMhqSsBECZL8S0XNqlVKoamUuu2MJwsJ6jFo4Y2LXie0CIWOFnE2raEcT34ssHE4CXGFd0iTWnU+lRUU3uY1S+BUGF5yvJsjjX0V3G+KKdh7DF0xQPFfx+hJD4CrqiyUMulWbItg0YHxDHbkus/lPpvVUSSfMPtuoqG/1JF0ScKK04Yhp64m7d3DkuVbJW19mMro2yVI2E5ePIeOsZflWNQCm3J3bFwKa9ws7zod8qrjGri5nnTQTd1nJHrGZWtRPq4RPwKkdpShFoCZYtW5zIkS33NnCbs5iLqEeq7BpGXY56rDhjSOGTi3E66C0MofVVW/puDV+e1XhCc2lgvCImaw7DcELV76yoT8I1W/E4arYh22W6nrQP7/sMbmQmcwQplbmRzdHJlYW0KZW5kb2JqCjIxOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDQ5Nz4+CnN0cmVhbQp42l2US4+bMBSF9/wKL6eqRmADdiJFSDwlFn1MM9M9MU6KOjHIkEX+feEeZ1QNUiJ93Mv1OQebsGyr1g4LC3+6UR/Nws6D7Z2Zx5vThp3MZbABF6wf9OKJ/vW1m4Kw/NZN37urYeHv9qUt8q8vt0H/nTvbPxfje//89tpwyXpzRuvrfTJMeG6r431ezLW155EdDgFj4a918ry4O3vK+/Fkvmz3frjeuMFe2NNbeaQ7x9s0vZursQuLgiyjcRza9Nibeeq0cZ29mOAQrVfGDs16ZYGx/ad6kuKx01n/6Ry1J2v7+s+zjUQEEiAOikE7UEIU+1pKlPiaBO1Biij1M3egFLQnkjmoJFJeSwWSoJpoJ0ANUY7aOpoI66VQXUBZCtVFDYLqEqunUF1VIKiufCdU155yoiYmkpQSjxoQrcc5/MkYpEAJCFMkrcdjqJYS5DsVyHdSSjzx61FKPEW6sgAVIMqMS2QmK5BfgTLjCplJyozvUVMRCDMVHO2RoIKjHAkqOMqRkoKjAgkqOCp9DY5KeFBwVEGZgof64R2u1q3p9yB/7MjHDuY1GeQNno8j34365w0sBKTH9KKEwIYSJQiCRAzCaxMUjkgwXlT/i9lOzHbOP465vjm3njv6GNCJ3g7fYM3H92Iap+0p+v0D6HUP5QplbmRzdHJlYW0KZW5kb2JqCjIxOSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDU1MD4+CnN0cmVhbQp42l2U0W6jMBBF3/kKP3a1qoJtsIkUIQEGbaTtbnfTfAABJ0VtADnkIX+/MNfNVkUK0WHGnrkXM6tia7Z9N7HVsxuanZ3YsetbZy/D1TWWHeyp6wMuWNs1kye6N+d6DFbFUz3+qs+WrbbF/uePp+9/rl3zdqn79vGvPV3fa/e4f6m4Yq09IvvlNlomPG/N7naZ7HnbHwe22QSMreZl3WVyN/aQtcPBflue/XatdV1/Yg/7YkdPdtdxfLdn208sDNKUtuNorxlaexnrxrq6P9lgE85XyjbVfKWB7dsv8SjBssOxea0dpUdz+nzn6UIiBAkQB0lQAoqIpI/FRJGPKdAapIliv2cCikFrIuXX5aAMVBBp35kBKVBJlAhQRZQhNhciQvUYGnL0GUNDXoKgwRgQujY+hq5LTxlRJYkUucTDCkQVOIc+JUEaFIGwiyKXuESfSoF8pgb5THKJR74eucRjuKRyUA4il7iCS8qAfAVyiWu4pMglvkZMhyDsqaFoDc80FGXwTENRBpc0FOV4fxqKCh+DogIaNBQZaNBQZNCnhqLS61N3N8ro05O78lL9f7qmA+1PLv84xx/nnpdkC6/Quwx9NuJcfjn3gk6zmP9TIuiXGQjnUBQgqBIShHcvyGEh4YaoQD4zAflMUiIi6BMGVFB1jgqRASGmsadEhcR/E+Fn9cuHvUyk+0Bqrs7N44HGFg2eZUZ0vb1PtnEYl1X0+weJMjIzCmVuZHN0cmVhbQplbmRvYmoKMjIyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTM+PgpzdHJlYW0KeNqr/08d8AMAXstIMQplbmRzdHJlYW0KZW5kb2JqCjIyMyAwIG9iago8PC9MZW5ndGgxIDE4OTY3L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggOTA1Nz4+CnN0cmVhbQp42s18CXBcV5Xovff1pq1bve/dr/v1Iqlbu9SSLclqqbXZkhM53tSObe1WEq94S2ISOwuQIAIMRSYMBAhDEoahmPDkJCQQJyEQqPD5NSkoPjVADczPTzFhiqkpfs0Pw4Bb/5z73mt1y7KzTOB/Xeu9c+89796z3XPPue/JhBJCqshdRCAt1+9sbstv++tOaLkEvzPzZ0+LvT3CDCE0APW/OnRi6ejZhQvnoP4UITWupSO3H7rH9f0/EGL+74Q03HTT4uwCPT77ZUI2dQB+BhuMfYZBqB+Beuymo6dv+0h31d1Q/wtCTL85cnx+9pVv/vg1QgbvIET3wNHZ204ID5l3EDJqAnzx2OzRxbO6iVmo1xHCtp04uXhiU+a644RsPQ39jxId62KXiB76ltkUtIwrd3qQtFHkguAw+CMSYoEbVatk8tDwAvkCIX9gwhurBpj7EdosEvpJ7GMCu8QfEchb/dwG5Rg5hvjsdVZDyGq37pHCD9n3Vt+EemT1TaWu4ZG/Wd1U1v7iuro23o/JN8rGU+pFPJmkRZnsnhrOi+L4s8S8Y1w27Nw3JXf45br8zCFxefeUzOKz3zAB//Pz0pw/EpFJXiY5aegiyCA3M9go07QszhxqlFlaXBDlb03KusS+i3W0Mjc8PywbhqcishDP33DjVESK+JenRHlyEpqyeb8odyPUnc+LKwr27IJcB01qTZRbsL8FMb81OSUCNcuzolw5OTUDLSL2VSKUQSgz45/J5/N+mabyeUkmk1OL+XyjLKRFGEcXnwXK9LnJKVkvDcoGaRD4yMt0plHWpSWgS1xY0c8NitiDFPsVCvAqCzPD87LQEIHOnLgsLsMEKy36ODC5Y2pm0j97Q35KykfyopzdOQV9fmRNnb9R1qdlYy51kTBFUgaoSoMSSFwanJXZ3CGZzgMVsr6hUTamRSS1Kjf/rI7MiTiCnJ3JI8rMECfVlL5orCK54cGGSFH2FelyXVQqo9AUkJADvmfE4WVpFvXC5UX8KFNZ9AORGpWgHWl2SJmi6iqPyzF4ivjXWCt9qDrNGbpYVSmAsv1SJN8QaZRr0iuMDcsLs0ONsjkNiKIoV+e24eMASIN5uQZrN0CtBmqNsgWGqeUiEUEC8zCvbM7NiMszomwGoTXKtenxXVMruoWhfEyuWZRua5St6fEdU+M7lUZ/BNrtvN2WXiGW3O6pFYslJ9PZQdmSQpsFSx5cqcZLDVxk6gJNCPHJqRUUHnA7uAz6xWkbIhI8psF+pR8fgaWALXngZBToH4XWclVdRYErhNglkFZOJlsuUkq5ruxpskLY8K4p2SINisNyFRhfpQQGNyjOwPRPW62UmMng4PLMis2Qkj+c8kdBTA7gzZ5qlJ3pFYp3F8gZ7+70ioB3T3pFh3dvekWPd196xYB3f3rFiPdAesWE92B6pQLv9WlJk7tsmAEJS2KTTA/gAmmUG0o6XcXO9ymdqZLORLHzpNIZShO5JvUu+AsDfyGgSwT+8B4B/vAeBf7wLgF/eI8Bf3iPA394TwB/eE8Cf3ivA/7wnk6LvdxMG9MwrXVGzIFuZ3JclbD00mirTWm5MSU3wipshgUwKl5Fi9Jst4Qe8ZoYfuS+paha6pKbG1b01Dk8BY4MGWwtlcyV3W1psZPT2w54dPjKSWB1bjg5thPXU3w3Gdoida+0UScy1wECAIo3JhhWxWx3o9yZbnL3NsqZt0IFC54H9C7QCXHFxSZxFFc+yHLr8vKoNAquYgq2CPCs4A4ylDodINJucFEuuRbQdOA14xxNrsilFpebJFHsXYbxNpWjiE3KWLIOWgBTlGfQaWR3TD3JREH0P8kSgi8/iI7UBD5Z4tjSCCzh3Pr1OIPOTNk3WG5mAawvN7sA3Sw36wd4Bh3Z+mdmgSxw79IIKFOCGUaAP7jxWWC8DSaRFJepAy8BStCDZemvGBVGRI7inAi4Tiqucm0u0P1mTQ4itOoTqhykXhBRT7FLNvH+EWkUJ0Xt9RbFh8yoEia7pprEXthykXq1UUS6NBUY4lDbWrq7K8rbyKxVTUlo230llOQ0Vc1gCLCeZU29W8BRNKEUR+Ta3NSkH7ZMsTfftNJEHbBA+8t6b/BPlvVmN3z2Wk8MpOXu1LUmHEzLm1LLQBvaFzB1VVRQaJPcBE/kOMtom5pO0CwlWCxNsM6UUYfA78AWoiG+AyMefa/sFrlAF9UrgRcqsZBIXqVxGHxrd0qTwwjUNqUikioJlZMi06PAtFNZ4BBewFq2N8kdsJ7HrtK+FYajDrvcCfC2tNwFt3GU2zAIWByBvVST1EQaTVgeB3B7+iI4KwCuA4AicH36IuUtkwDwlh2IMwzADYiDwE7EQWAX4iCwO/0keL0BgPYARDm0N/0kVdqmAFLa8ohHEdqHeBy6EfE4tB/xOHQA58wBcBDnRGAa50RgBudEYBZxRgCYQxwE5hEHgQXEQWCR0zUI0CFOF0JLnC6EbuJ0IXQzpwuhWzhdCB3mdCF0hNOF0FGQ8eaiAo/xmrwFwOMK2A/gCRQ6r2Wh9j7YRlWckwqIOKc4DlVxTsPDPcVRz/Aaf+KsAuITtyogot8G46gItysgIpxTQER4P+D2Fse7g9c4+p0KiOjnFRDRL8CTKsJdCogIdysgItwDuH3F8e7lNY7+AQVE9A8qIKJ/CJ5UEe5TQES4XwER4cPpJyt0TAtWB1OyaVEWYpO3aftwI+hMIJgnipCPVREXiZDKZ0Lu2moDEVpStvZIm9PqkCLRTmvG4KauTKe1Q4owaM4kacLgtNZJ9KIkFa6TOhijX2A6fWHOq6efExgrzDIduyRdXpYkdlavY5f/VqA6tkd/+S4dY3sBvvwVzC03AwUXmZvUkLpxOTE5la0Co3CPQ6uTTPh5jUwrtfxT8QgzulIZgxRNACGZ9jaX03ox6vNF8VeSJB/9nA+uhXmMDOjqJJta/Xv2KoydWDEsDGX9BEfbi33TDCB6PYA1pDouGJ2pFQMZYonOTmVYp8MgPRgIRaRAUGJTroA94IJL0ImpLqlc/QM7w75NfCRI4tlokOoEuo3ogBsdPUQEwTHOKKfY4ZHskt7oTcVwvGgimYwYDZz6ji57JuNuc7nt8fYkOxN12YKmjsJPOoxBq88v/N4kOmxh45uFm19ZHKjyRVz228/ZnQFPRSXb43Axp/3y17/9L4TrDiTFlkB3dhIgcdKZbbMr1AhEpxd0iwTUcgC4dowbqF5PDiiSDAaD8WAsGQE6jEAdcSF5mlDb26BmTCQkydnelulkmc4ODrNY7v6Dv0f5/vGFVF1zffzxL4caazu3NP7dU/T4nqFbD0o+NuiTLjYOOz5d/9m6aOFCW0tP7CWQSh1k9rvZSyRJWrJgcVSgRDhPBEYFdgfQpp8mer1jHEjVTROdLqibSCSj8WjMYPSliNNhBIElE1LUYHA6XO1tXaAfNxKM7QngIIMNbJel1mu1tm4auan7wlJfo83ss1lqLddNzT02d+CxpfwEW5acDmeFu+fw8NlzbpPL7qr1GZM7v3jq0BdvTIJOUY6PghxriZeks/VcbjqKgtNTQdAEZ7USYvVaPW4nIJozBrAb4kJiSsRnUwRmbaf/477R0fsO/huK7N8m992Yf/xxdunAI3NzjxxQRHX5mQ8eOvTBQgOuA5zfAfOLpDmbvrb2+DlLOBaJKdqLce1F1OkjbUrV2a4AkjNCf4trYgXJoNf7pKi/8NvX8PYatZyS3F5RISbi84a/gpdvEI2eSqDHT+qzCWxhhC7qqU4nHOAWDqQ5GZLiJ75OKRYxGD0p+9qkjuIaVQl65R9w/n+IewNIxjBW2FY54nNFf420KBS4onxutJePsO+RZrIl25OgOj3YMxMMAjOcN1ID0esM+kUggk6DaALjYDLcQwS5ZJpJo5QAu0iY0HpwIZfZCVdWiT2BQWW6OvmKBNWxm6PhuTPzX56b+/L8/FaLJeKx2DKbs0f6+49kA1nPQaT6MXpO8v1YsvfNPj439/hsncln8cZN7oFjA/Cv0nQPuiJVfh8A+YVJMhtTfcOiQc9KvANQGyYhe1yyx9VVaFXE1hkpkR86owhSx+aisYA3Vngp4fVLCNH+hJddivovv4B0/frXXKaDeP3Vr3ySQgN5BWioIfZsLTcjxYA2cqOvaKNKxVEuv1BiBzYSzgb4GAJljBwsmqKNWOMdOhiv3A5xzAj9Z7S853wKufozYF6R4uhvFu3sDfY8+K5EVorYzJU6wug2HWwgzDFOi4KKk1i8Ka43ukvEZAVfmjQkkoK1VFpuO3jWdvadeDQQkB6v9JlrfJWPiz6vGPdZQqaf/ZPJb2bPw/TPo9nRT/6x2kKppZrqCwv+KNCW88Ys1YUVen21pUjfg8B/kMSyEW8l25C6IAnEE+XUJWk5VRTv7GxI8pn9hsInwl4PgJagkR4Je9gl0XP5Gz6pwkR/VNjtEUUPG/VJ1ZWFFvqER+THq3xNvAprwgI2g5oAz6CaP3gn1fzB6qM6WIcxQ4nJg8U3sRJrB4/+6tTDs7MP792L16l7MjO9fdOdndN9vTOZPzw+M/P4/Dy/5o5m+4/lcsf6s0dzCg0oi3aQhQNoAE9uoDqQkI7gWmQH9BRlgmEynXDCPukMO0NBP+DapIQRzKPoJ0tsG3wlOku+vdBH9nd3729/AlUl+V63x93uuP2JJ9ilvqW+3pv6nufaAcspyGJ7INAe/keVptVV9gDQVEfaSSbbHoHtJA47O9sGHhPUp6eLpOiz1HVXX1/fXt/W2twpxWHhebjhKpuMstOV+S6+07hgw3G53GyNWnanpdoS9jjGmtPPBT3BFPg0sWN/VybVbxB0JvNzUZcravv5z/f5zDaLrar+fKzh2xoD3XN9bdOB9LZaS9hvpLropkigOfC/NL/XCDrmnBBBR3QCOc9FTO8ALtg0aD0wzndM3A+CerS9dtImJRpQxt6UK5Hkjgz9HO7dHUqdG6Dm+NDzgSm4Q4yr4/UTrf6ox26pm+jo3jG59+eDJ0f6j8eDUbel2ncg3j88OrFnqWP07FBlLOUJuqXqSKgt3theI361/0BrIuwOuaUKp9ScSKXNluYduf7pduAjBIrZBTqBaDIbQqELsJXyTYNbBxDtIg5JiqkLBjcMbbGonjjC2qJR/+cSgUDscyg3egnWiM8Xvvzv3MlVo5EQZX1CLHYW/EcY54KFyb0cOKhpUuJjYWGsLU5lbWg+SlsUfHnuEUfO79hxYSQW8MQaRutT440hH3seNsyHdt41NnbXTnoLDy8fahmvqxtvobf4lf0K+b2fvQiRA9DgBOuj28BDrPlbuHqJJ5nU8WUAxiYAEQlwXIqyNJc1Hzf8rkK0WYOm3+nrnNaQ6fvPmkJW9kLUU2O+/ILdQe02NlRp8Ucc9kKS/tTmwLlrQbqPwNz1ZPsz8WC1QCD4G5eDEEjbIejmS1IQwpqv8mddEHfBZkrOq71qRz5bA1TWkzqwmCTu5RqdRnBlwkb0ujMq3cLZeuG7hpDNJlZ87ONAvy1k+K5Q73WIhr+8xxSy24Om9z9oiDjYi/FARdXlS1YHpM40V3geGHJY2VBVRSDutBV6abfNCeZhK/yAvmRzcrlKINdFHoMoHk8LPaDvgGJKHfEO7vGIkWqBDw+uaUS1I2hki+bCB2g/mlFhqy9hpu8v/JLb1Kc99eyYveAJw64UA17oG2hWUS/3KxKsxSYWgbmT5CPZSjfkLhXgThgI1w3C9fL1aMCNIDxuxOBsWhOxksYESxHQDDgW99lBCnoIQYTHdHs5gmKsZQj5fNYRCBASSAYSURGDrEQsbirbYMqcvJtHCDzy5Mu7nVVjUhSh3t3NwycGssdzLbuCUd+Hb7hhIHvDjgEWAaPOww7oC9aPnp+cvDAq+Sn41tz02NjMzNjYNJfBAMhggr0OmUUdOZSt9EJmUanKQGGRMReGXwK4IzSyNTkE0dT80Mrj2CWOWNYL7AWDANUFk1IEJvDH4wmFPWWXAP7WxUDApq2EP/qwwtXugJb/efY0twJrA8AiiyhMJQMGHlyexmX7w1BjIYe8IY+Kfa2+Sf8VdJwkCwpH8Y2SE3S14dLsxJ+V1uFpe81SCVY+a4ZJkiQRj8XisbU0C3RWdMKQzWxhSsy8pkx64Safs9Zhr6hMVo/v3pNr9RicthpvsHt/x/Yz2dxtEyzSmXZFKix6venA+Nh0tWAxiV5Pg3fswnU7zo8Wbfd1brsPXmm7QdQWVxzfUTa238h6pA1sOAxzoRUvqbh/biN+HWLfh8qN+GXIqu5aM2JFFhHQsQiyWFJYS0AzhTjuPH8JrieLkFQYuNrCuEMJ0+BlggLwFysi6gAF0o4l7YkStHzWEolEIJd2JhKxaISnHeCGlG2li9uuw7guIIsZI51gA0yMeQpfr96TqW/y6221zlAgcLBl151DY2dzg2dGCh93UoNuWzPsLz05i1WoCDn8Lrc48v7te+4ZHjs3+vBRY0Ovtv9QGfTdQD46LvuBw5DJyAwGnle7IF7HIxQdaNetZm1+zdoNRmI0kPMmajReHRmsXcWDZugHmSyVPKFggaphJwIK6h0SpBAxqcLoBzk4ixnhug2+XT1nUawgIVExcCMGvjfiSs4glFmajXcFHPoqg6eWnUu6m8MeT7jweZ7FziHcNH4wFPZAfGFQ9NzNukHPKdJFPpQ1J0F0XioYq0B/guqvGmDRMshezhNUtwkMFxReAZwoqiyGDV50XnUaMuKBAED5G6Pms650mpB0VzrT1gLTNyTiUl28sjShwyCsK7MWlnW+hdW7op86HbrZ1SoYgtbKCt2N8W1bXfn2kVODA+8bbp/yR30P7N6dy+3aleNuPHfujKPSGTdWuNwClXoyLeE2ZTU0hKrWuXQ8LwZhVYCtRMl1T4cp1VFVOG7ClzC0TGOWH9aCZX/WqadK+rrEUVhpwBAlkTj8qAFDMePhnFiv8N/0+QlUbyrT3a85bf/Odha5/fAq4XolXf25dgVmPNT6x1j76ipolJCn2askyr9FEUDb/1zMzazAS4QMZCtEt8moU6If5MeqbE6C4F6LfYptRWeX/zrsOxLPmZTwOGks33as2go2upk16fLZnmrVSP+J3euSPJ/62m6vN+p4ofHmNaoLH3vVHrd7nB95gWh0ku8AnVoe7rpGHv4dyeeN8t/icJcfUvQm5MG+O8kd2apG2JfotjZYq1sVl+7CdaufNhkNgl7vHofQrtSX+wg2IophmnuG8BpG1oMt0EcMoGDcB7QudUl3ko648sOX9FW1fBWdt7kxRKwpU/w6AzgvuQ/0bGwFZTA/262NtR9rGFqzZTvIJEpuQVvmukdp2Ll7hgAXtc/KtjU3t4i3NHMyrZn5u7Lz716HrDV1bx4ssrm34yoccq6ssQ51r4I1zXP8XoVep5boh0sTfT+ySNA9LZW05r/+dg8AcmN3jk/cMTZ2x8T4nWO31Q83NAzXK9fnLoyMXEDnMXphsnV7Q8P21taJhoaJVjUe7IZ4MMLjQYgrPBBXVJbGFWshr1uNKZAwlLaXFuMKgr1XBI2liNlwMXAs7VQF4VXiij9L9Pgyjx4XUUO6suhR2W+0/OBvFP5VgVAQiJ9XBKWSv0I84ZIwaVzdcUrCLve62KwccS3sKunDx4o70pVhV7w87Fq/A2U2CruixairdVdAiHiKYZcbwq6HUSbfC6hxV8zvDhW2l2w0fG3Sz/O460vjsm1y6ukgBg/b/HDHhZrnjVk7+uHiUi1GJ0qGBUZA6An0+DPrEZT0Q0XgPYToZpQVrYUtfrUf1zWBPRyXChcqD1eUdS2SMPj/mJbwFg9IDM4r7YeeqRddFrvgrPa1hDWzce9phU3YHQ5DgCgONP7r2pKuqU+hHLyQY7wIcsiQAwrZsasc7ITHtVchQT1QH12PBjoXQOclSPlsRVpKpiT+oiSDIYYSYfBznyZWcvBj1BhDF6Cd/MAi8frMFqc9NNB0XWf35q2dXfm29kPBGrvZ5jLbNsUmAqlkZqxt840tgydj0zafrcIeDgndwZClVhzoahlNJuK1Drelyuzydbn8liqLOJhp3ZpItyLfFrgcYcukvhiTQq4k3KuHTYhBfIlOgG9F2kFNMSZFLAgvqYEaDedL0UkJMsSkZXiAAahGBs57DUvdwOpJnZ2HpDHcwGIu58aRaEmkqrxlojvcPfEtu5swGG3CHXkUoVGX3WSurnqf3+WPd+6hDtHjDmdR31mECr912nV6bv/gyyuZG1bfFoUzGz+cchdDR+7GeSOj95Y05rPVylsV2G/UQyuV4uKrSSWIhBp9I3rrsWNnecwMuUbUx9wQfRw5d+5IgcchfT09fQDxHGF1lTmAHh/pe9qFSY0aJ5l1ir8uBkm8gbB7iwdDSI6PeJNWt3Zex8+F+MFQ2YEQ/XfR9JzRb62wBk3fNEa9dtG0/GFTwMpcYXe1rbBgdeD5Dv1sba0j4rAVXqY9dgfVaHsNaKsjO5+J4RmWXqPOQ/SwCvTkvNEA0TrEMAzXtLJfY5Nedy+kZPp7i+2QjQG5dSQZT1odVrf6Ekg5cUsmILxbTziP79xufgD3UkT3aUPYZopad++wRk22sOHTuojfETQcub426XSbth82hFwgYn+FubBgc1IWe/PNGOM8VVV743Z74ec/idvsP6Si3a7YQDe3gTbyvmyljwp6zEa005OYlmCorMGa3igPiWlsarnLRmgK122kNZ6IxeriKtfrk48QU5KPdeef2GhVjOmBM9FRLe0wSknnaK7jWMdkGu2rq7Njk2pfe++5tapCTTgEc0XftsqB1r3dNIYmt0r6u/o2UQhtIG7Hc9E9mGvQDJAngev6ayV+Z/cX32ls4e80/Oo7V85QgL9ypdP4+jVIJ2phEdf6a30uByCaE/jO1VUS26Ary5RsXr+8fcuW23ft4tfs1q1Z/K3c9+jhw4/uU663nTt79hz+8n0KF2uEn1XXZeOwX8PCwHedEP6dF5Q3GtoRros443H1CHftDZTiRbrAjMhqFM+rt1isXslq/pTVxy7hOzS+I/wsUZFw1wZM+ypwzma4/CfwXU+asimYCryX7rx2pIDc63Ql73rBfyWlhg6D+qZCO+Ls0pgu0lAUiNHYTn8GvqrwVV/I9rN4KtsQ7PHYAq64w5FYaBpcyAx0Xfj7Y+ivRK/X/uu6HdHGwaToiTotYUeiqXtuS9/dPffxdfkmfQ1k00HOj8tmsNlGcLh6QW8UwOEKVC/AtoSOl90BVmk4AK7XUe7e2ov4sJtBPAebHdXrrv2U4rQ7SAcwFwdLVbKOYlynvd/ggWw5/13S2qEvJGx0enfT4G2TsTF/POpxuFMd4W5poMkREnxWl6+y+uHvoTunbSHR8yH6zd7Zrq1HN9ssjqinzhIJ9yQyvSZqCrvNrpq/RUFF/B7Pg2iz++ByGmQSgBgdtBfmX1voYY2CxVAlyFh7zxEKYnCagM3HWIwwtPdLnepJtbIM2yPtnWwXENSAO03hj66Ehfbaw95oQ+HSF2kaSbgbLeluyeOy0Xs9sAz/7hX+/Qzo6DLQkyEj2Vw7FYz4JYpABR0Fi0KPcQfoAKRvFHBr1B/QPrUoeWWeIZ2xrlgcIoT1st5I2OrnK2ht6pG7ZMToaPfhvonzW5M7fdW1Ya/N3yDWj6W2tbtjXpuzKhmhYV3ETSMo8v+w2zf76E/6bhnIncx5nJWxWlvQ7ktk45mh6uoKU0OwUvcfTj9y/Ikqs+Yn6B/ZizzvyGTbwZPCKgUDAraYsKR+H7H2FUB5alBX9vZRDXrVrB7ZMa7LDPYuZvtvyQ4f2dx+3+nqKl806Ok/7G3LhgcHm1sGBlro9/oPb4F/2+8c3fq1z0YEf9AVMdr2Z1OFz490dIzgL/crvat/YFbuV5T35uzAFe7EEV97I0SLnwVpby7ovyQNhd8bQzZv3PDrwpvcWPezSxFfjfnyczawU3MNLaCUlO+AekFQtTCfjyRgI+jLbvZVo01uKz2i5bmCYy3jAkKSSb8/2ZZsbUz5E/54KqXlCUVZdZW5WmPCoIYfILAysf28s/9wNnu4f1Zq3Dzf2zu/qVmSu7oa6ru66lsGB1vwl+7Y2bhpprt7ZtNMr2OoqWt/JrO/q23A/j876+o7M3V1nQWxpyHV05Nq6FHfeYMg/8i+r+ndxo+rDCVpOpvGt86Bce2rplK919eV6L3ER3atZT5lDOxZr/EObgio82bQPfv+FRpXDKFM74zg9QeslufwE+qZg46qH7Hx6A/SHdCFEw+YnZC1KAeqpe35rI3veeHaoMcJA9V04p5nUwJA7eM0ia2rL4bDwZpg+YXeFw5aEYJL4fY1GAQYWL2V/JSchJ03kPVa+TtLoB7+zSvOK9kQFcAUXKpd4pLhwjIW7cH502gm6PLV2nUBp9VaVV0TSjvTbZaRDruztsbALN4qq1EPsZ7k7GpX9BmDyyfARsfJ9eSBbOUANVX4YcPVIqJ6q8UAsR9GxCCRKlpR4Rg319YIRqNpurqSmUzhccwEeHKXxAbeSUzGmzZ4UMXMZ6MTsNomrp+4/rrtMPG2kaH+vs2bOtpikVhcckqxiM0YTFGjFvyv+bdSUM0U1oCMdipYCipDGOFJlgg1Q07oHnAIfocnSGsfcwgBhxuAGDZnlN6s2mt5VO21SNj8fOixEH3mibDbFThr94Q8FbqDZx3usMekO4htvOOk0rHvpNKxj3c88QT/npKSF8kymI0369K+dFTfuqMp4aeOmXWmk18zmDIbaSO/o/voMVJDQuq3k7v5u1f+7eR2/u1kVYc6oDoeDrcb9qkncLN64ndR5TAzQtS/I1T/OnDa0vt/YPm+gfB/e+6Tf4H3H49++OVCtPBDfYvuEcA1ojUS9Tnl7w31OwvR1Wf0LWt/kaj8sFY2Bh7iN/gt6eokb7lAKsmf8Yd9nIyzU+ivrtL/A34GfO0xet8a513T1wb0PXsN+l69cm5qf+/pQTreDp7QruCxX74zGtjvrs7j/4sfduMa/exr1+aF7X7ntLOTmGNdpe+lP5098fG/RELC1/D7k//CGPfjNx7r2o5f2fYn5eM4GWDC1ee8Fj1s6E9LK+TLIXb7Nebfhues635+w9+Xvbcy2rRmS9T81nYlfEahi+3agL5rzXPoz6v7t2Mbmg3Qi9fmhb5GvO9It5/mf11/9bnH35ns3oUvDsF2HPpTzs0+euX4oOM6eoTomYc0s0qw75fJPpYjm1mM1IGd9bIJ+I39/+XH35O1bCUjFP9Ko1QWT0NM/HuymT7wtodpg98t5Aj5Kyi/eHeFttB7ysq31xdW+Y7KGPtKWfmNVgTz2y5bNigfg/KjjYvO8R6Vg7y8XF70dVctB8vKF95h+YVh4i3KslaM1e+y3GF8o7SYjpWVf3pnpWKu4s3SUjlZLPvfdpF5+dH6UrUfyssbl2rHe1Q+U/2ZmoaaJ8qLueEq5Svryv9+Z8WStXx1rdSm30bpLZbztc9aq60PWX9hm7R9xfaafcL+pT9b+U9Hh1p+5ax+26UDMzE2TG6CbO0viQEytgbSQz4CHur+GhfUKf/PZA5B1kd1ePBt4xkgwpTYoKbAjJhoTIUF0kbTKqwjAXpQhfXER8+psAHaH1RhM+mgMsmR4+QEuZ2cJDeTJaDmNBHBT7aQVigi2QUti3DfQc5A/zw5TE6RWXKMLEDbJDxznNwC/fP8qQHAOQ34x6H9FNTr+GinYfRTkF02Q1mCMRDjDJkjTfDUcXIUWpXxTsI4t5JGwJ4FvCOAeQygW3lv8wbzj8D9KLQdAdrrSRrmu1UdXSQ3wFin4PckOQtXpHUE5jrGqbyOPwc8iYErRxWDQNeVcw3C00fg3g69Lbz0APeHyDC09WyA31h8YiO5aX17OIWnoB9pE0tGv9aImkwViZ4CLNTcCWg7Bc+f4hJp4jpYgv7rgXM8vRh/lrxyw9QKpR/Ly1T5Q/4TK8Q4+NRoe1ggDQg+s9mUMNlMgkmpDRlaDAEDr1UOXjJ/q+Jbum+B4VRAvWbwEsnywusCGVqJ0ft3TMnZ+6dWhIWhlQTWvmm6C8wse//8rilEycPPM72mOpPDJFQ3PEtXPyjrPrrCyNCT+gUDGRr6v65VbgkKZW5kc3RyZWFtCmVuZG9iagoyMjYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMz4+CnN0cmVhbQp42qv/T2XwAAAVq1EQCmVuZHN0cmVhbQplbmRvYmoKMjI3IDAgb2JqCjw8L0xlbmd0aDEgMTk4MzUvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5NjU3Pj4Kc3RyZWFtCnja3XwJdBvHlWBVdaMbaDSObhw8wANgE+ABgKRIAjxFgeAhkaBI6iZkUSQkUpJtXZHlQ3KiOJZjW4zjTTIzTjLxEcfO5HrZafqIvbEm8TqOk9nntZOsk8nhXG8yjncymbV3JplcBPdXNQCCFCXbGW9m36LM7l9Vv6v+Xb+qW0YYIWRFtyAOtUzsaG6dKr0/Bi0X4W/24A2n/d2fIyJCuALqHzl08vCxG+befRbqjyFk8x4+eubQDwJ3vx8h+/MIRZxH5jNz+OuZ/45Q98uAHz8CDeKHhQcR6nFDvfbIsdM3fThtfwXqnQhJ/NETBzOHP3+6FqGhXoRMpccyN53kXrFPIjS6E/D9xzPH5m+6Y+JOqJ9GiBw4eWr+ZFd8/ARCY9+F/ocQT/z4A8gEfQtkClpSxh3vR624Geq0i/38CDnghnNVNHloaA49jdDvCffqsoAQ/wBu9iP8Z7QP/45cZI9w6I1+vVA6USfFJ39PYJzlTv6B7DfJc8u/hrp1+ddGPY+Hji93kp9B+29z7bcub1hVz4/3Ovpfq8Yz6oXxdBTx62jX1FDa7089iezbUrqwY++U3u7T69Ozh/wLu6Z0Esz8FzMyo4MHtQO+QEBHaR0NaIOPgAwGZpNRHUd0/+yhqE4i/jm//vSkzof2PlKPpYGhg0O6MDQV0LlgevtVUwEt4FuY8uuTk9CUSPv8eieFOtNp/6KBnZnT66EpV/PrLbS/hWI+PTnlB2oWMn5dmpyahRY/7ZMoFKdQfNY3m06nfToOp9Oajian5tPpqM5F/DAOH8wAZaaBySndpCV1QUsCH2kdz0Z1PqIBXf65RdOBpJ/2UIp9BgX0qnOzQwd1rjEAnQP+Bf8CTLDYYgoCk9umZid9me3pKS0dSPv1xI4p6PNR1nLzR3VTRBcHwo8gYkhKgKqW1EDiWjKjkwOHdHwQqNBNjVFdjPgpqdaBg0/y6ICfjqAnZtMUZXaQkWqOPCJa0cBQsjFQkL0lsloXkjEKDgMJA8D3rH9oQctQvTB5IR+Vqe73AZF5KkE7WmbQmMJ6mcf1WngK+VZYK35IjjCGHrFKHCjbpwXSjYGobossEjKkz2UGo7o9Aoh+vy4PjNLHAdCSad1Ga9uhZoNaVHfAME4mEj9I4CDMq9sHZv0Ls37dDkKL6s5IaufUIj83mK7VbfPaTVFdiaS2TaV2GI2+ALS7WLsaWUSOgV1Tiw7HgI4zSd0RpjYLlpxclOnFBhcde0ETXHByapEKD7hNLoB+6bSNAQ0ey8M+o58+Aq5AW9LAyWagfzO0rlbVZRS4iJBLA2kN6KjvEYwx05UrghYRGdo5pTu0pH9It4LxSRoYXNI/C9M/rigY2VEyuTC7qAph/ULYVwNicgNvrnBU90QWMb17Qc70XhJZ5Oi9NLLI03tZZNFE7+WRRYHefZFFkd4rIotmeq+MLFrovSGi5eWuC7MgYc3fpONp6iBRvbGo01vofIfRGS7qDBU6TxmdVRGk28J/BH/VwF8V0OUH/ug9APzRew3wR+8a8EfvtcAfvQeBP3oPAX/0Xgf80Xs98EfvkYi/l5lpNALTKrP+AdDt7ABTJbhehNpqU0SPhvUoeGEzOMBm/2W0qGU6NRoRr4jho9y3FFSLvXpz46IJe4amIJBRBjcUS+bS7taIP8bobQM8PHTpJOCd605O25H3MbaaDPZpnYut2EOZawcBAMXrEwxekemM6rFIU0lvVI+/ESpY8EFA7wCdIG/Q3+TfTD0fZDmysLBZ2wyhYgqWCIisEA7iGHvcINJOCFFe3QloPETNIEPTLQPh+YUmze/vXYDxulaj+JuMsXQeWgDTr8/SoJHYNvUo8XN+36MkxJWnkzSQmiEmawxbGwYXHljrj7M0mBnrBhmYnQPrG8jMQTcZyPgAnqWBbO0zGSALwrs2DMrUYIZh4A9ubBYYb51JNCNk8hAlQAkmsCzTJaPCiJSjICMCrpNGqFyZC3TfnZeDH1pNoZwctF4QUU+hSzez/mFtM52Uaq+3ID7KTE7CaOdUk78XllxKfa7RT+nKq0AIQm2keHU3lLeeWec0pVHb3lhEyUBeVbM0BVjLcl69fRAomqgUh3XnwNSkD5ZMf2+6abEJu8FBN63q3e6bXNWbWPfZKz3RH9E7w1eaMBnRu8ILQBu1L2Dqsqig0Ca9CZ4YYCxT28zrhJqlBs7SBH5mjDoIcQeWkDziWzDizW+X3VIuaIjq1SAKFVlIIJ2jcQhia2c4L4dhqHWFA1pOEjlOCkxvBqY9hoNDegG+7GrS28Gft1ymfQSGw26XHgN4NKJ3wC1F5TYEAvYPw1qal9RYhJqwngJwa+QRCFYAjAOAKTAReQSzlkkAWMs2ijMEwHaKQ4EdFIcCOykOBXZFHoWo1w/QboAwg/ZEHsVG2xRARlua4mEK7aV4DLqK4jFoH8Vj0DSdcwCA/XROCszQOSkwS+ekQIbiDANwgOJQ4CDFocAcxaHAPKMrCdAhRheFDjO6KHSE0UWhqxldFLqG0UWhaxldFDrK6KLQMZBxd0GBx1lN7wPwhAFuAvAkFTqrJaD2DlhGczinDJDiXMdwcA7nNDzcUxj1elZjT9xggPSJGw2Qot8E4+QQzhggRThrgBThZsDtLYz3TlZj6O8yQIp+zgAp+rvhyRzCLQZIEd5jgBThVsDdWBjvPKsx9NsMkKK/1wAp+u3wZA7hDgOkCHcaIEW4EHnUwpN8spoM6+Z5naudvCm/DkdBZxyqh52YH/ZjVuRFASQ9UVXilAXEtYTVtkCrR3FrgZqYEhdKsDceU9q1AIHmeB0OCR6lXsOPaFp2XGsnBH+c8KbsgTITvo8jJJshPLmoLS1oGrnBxJOlz3CYJ7tNS7fwhOwBeOmzdG+5FSi4QMzIhlwJJ9hDSQoaPGgsGCCiNxwXtJoQzBlva/V6lAuKzaawP7ji5ymcbUd4+WYytvwC+TiSUWhRmBtM+GBgjPbQbekMAQhPACgja5ATPeFFAQ2SUCxGx/R43IJ2wlvirve4yZhLlVRXEP4oXVVERveQr6ByVJEoU+kgo9BKMJmDsSqAvnANJ5aE1TgjzS0IoiB43N621g5ao1RXVUY8VofkMdkdsmS3ybWe8gA51FVrtUpmgRN9TqvdItkVX6ASxI8ql5fJNeTLqAwGb0iEKjDPOWBSMop4mJfHhxDHuVMEM+G462pcmkksC9cac9XVBUR2j7V3YEpQCQ4GOHKNKksOPpV9atTsstvBscxmLzRgMTuOvXf5eZvTanniCbdd5gSO3O62Wpbe9UO8GzGb2A9E7QObcKNKFEKxRKsbKAIZcIg3cfw8AnVPg5TdKQGbTGjaUFpVVVWoKlgXADpEoA4xUQRyGgwwOYnxkKZ52uLxGInH2gFW2ohz7Mze7L9QdWLLzpn2ltr+7h//OD7UvGPXwCuv4vm9Ww5kFBu5xabsm4ztdL2w6Xd4cFO2ZXBwOJl9jeqqZfnX5Cj5KmpALQmwaMxhxJ1DHMEceSfQaJpBJlNFCkjmZxDPV/JjobqakAa0lIeRx00lVxfSapj+qAJBgCVe2k5FGgJDYRIlR0WL3WyenNl2PjV2fnJmwmyxW0R73an4zIMz+z+e6bw2TN7ttFitptjYhT3pC6l2k2y2Os3l2lUPXz3/yWk/qBn0TOX6AMjVCZYVSTQwOfKYCtKEOS4vSEVBSClXykq9gGiPC2C3yMvMbEWcKpUfEyD+wfn+/vOzy5iKEC0fv6H12m0vvUQuzjwwe/D+aUN0S+9+8NZt5yeWvgjyojRYgAY/ak5ErqxRdqZTXRuoNTRau45GtYAnDygB/BvqlB9kujzBHPQRHGD3H+PxHlW2OQ1ywIudv6cXqkGUo0kAmnzU+qmncZjMQw8/bcI8706B+Xs4So4PlWlAjyCW5u1rZXp3IVwE8K/opI9iP5v8J4rNTkk6Si4qNln5vZPO/C3aRYnJ29DN5DnUgvoSPXWYN4GtE+oXwjkRC8jEC6Z5oAHPgIjAlngezQAxlUxCLahJC4Gp1JmpRXk9l9iOERKKjSzeEaOkAqVt5BrFET3edejh/fsfPhQ7WGdXIECkdu66Y2zsjl3hPTX321TV9mUMLvC6IlXXABKglpdanDbV1DB+YdeuC+OlnudoWMzL8RTIsRo1JcIyR4DcfAiZF0ykKIgA4dWoyhXUXMGcsyqCIb9AHsjF3QAFSEbBqs2mZq+Bm11R7TYV3+OygUDtS7dC3YYbs9+xqYqdnKO17Cu43KYWdIvuA5psqCzhtWFGEjW0y0f6e/NTqIUBl241xlr+AzkNYwVQIFHlL7GYRRNE5VGwFuJOYYOzYDCk8WAfRnSsw6JnNT/YiNmiCZPTHpvNkv2fd+Z4siv4zy1gIJbs73BpndWhWPHMLV8D02FEKPbsX+BzkmqVLb/K3l/gDS8DPSqqTlQwrigpRe6jIiXYzgOHq32HyRX/MzXOj9kMaQ72OG15k1RsS/cV/OKH5EtIo/r0KxKHaRTGHIIgdw6W1dUK1ZDmCYaCOefI+wMn1IEYuCL3oCsEjpeQ50GwdvUXko3I0i+oOyo20cljAUPkoq6yxEghoey9NizjQ0vfNeiTVVHI3ogvOEiBxrMggwpUmwiUSoQqhIcUYEUjbM30Bes8JlgzC5TV4WKSSjAzs2sdqk208dkdilV2KrLTjP/aKZOLTnnpFoci8CS59KLV6bSS83andekp0i47WVyl/vsC+K8DjJpqAqJZzlUhquZcNRQK1TC7WOWdXk8TKXJMWJhe2P2RTOYju41rYujmiYmbh4zrvz08Pf3w4SMP79v38JE9F8Yg0BtXVIjtDbk1E1YiAfMgHR7RuEEgjFF50G0EHvN4QCqVngpfGeCqWkgE88jHd61IJm1qfo3EH5/asGGq40UjA/pl95Yt3S++SC62XdXVtT+e/XXebLJ/tXNT33j2pyv0QMSD/K4VxRNtNbAUYpZTQIQHtZnwPMQxbro4s2hoaGhtaN3QHNNCEBWYC7FYVkfFFVpFXKCVUSx6Ib55S7g+YiCQozxvN0tiRc14/EdOm90NYdfetbdtIB7pxNihfEPrrd3a92rEYTKLZt65ZWK4y1j7Kf0bdscTGVXZ1t3XKuEIVz8Y6UpRbjCqBf0S0G+McoI4HvEcOsfEi98JXJAZ0HhFiq32dP2qNFGbi6F2LRStCdH45g3VsXgLaztomS6ddU1kbYCmERrsoKSKMF38jxPtskuWpfHrt8w0j/Uk9sS7Dg9svNbvcMuS6Nu7YWTf1PbNe7t6rh6QWtoku+yWdg92hLtqXa6mrT2x7c0NIUW2ukR/fX9nd1+5J7It2bajxYgbNaCbbtCNl8YxKnwO0gCqCMNCAMeL3JpWm3MYd5Fh5BaOAGkAqb1IA9eLbL19GbzEZnMsfYxJc95pY64Bc2kw143kb1ApqklUuwlbE8A9V0IwXEtRSV0dz+wQVI4Fwz9zEnO5QExkXuWyv+KdFouDz/6aU60ey+u/NDnM5G8Uq2heutVilSzkXYJkc3qXniZJi5XNXQWcfRriVy1qTTTTjCxQLkHwgrwW1ibCsRi2OlDUQgyrqw3lYpjIMfPjOEYQZxDkpRSVxNmtjbtHJT/kHJYS8fOft3gsDqh4ZMnJPftpiwuy3U89Y/aSLzntEMsskgt/LrvLBXTeIgh2RbIsPYsfcmNstWSnSS/L++Mgq90sDwkmakBQZBpR8vii5IwlIeXtwXaqm5WoDql3IKcZtrrgAOmn4T1gVwT8TPYk09HXHKqQ3YQ/2aVYbU6XbLGQ7VRPKkBLn6c+GwU7l4kVwmUEHfkCBFMTj0dTeunkVKJSACJKUnlrr06JNFGbyUnOlwis7afkMiQWCivxWDrhroQ0tDJSGQ5qNCKHgkFzcUSOxVYnLpQbEjcSzXyIxL9ne7CyuZ6Bazf2XdvfO1em2O7d0dy8o719R3PTjhhehuW/j7I7EO0bPjs2dmawu7kPMofmjkxv92xHfKa3N9MBvE4Ar1Hy9zley/K81lBegQEvZYWboVwV81rJeF3bT90mh2QE+0t4hazA4NWIs2BNHveqtABYVtfyetvRjRuvTXZlqvJbT9+B7mbGa2xnU/OOGLEOnhlL3Tzc1ZykaRr5DEs3v7ehN6t1Znp6Z+KxWcYs8wXQLf4R6DbKYtg6+xQauaqLNyrwWBRFgrBw5XK03OayLlQXWpVNQslvRAv6w1dt2+CwSjazTXZsqOi4qr013VUb9oiKWRZle8vOtpFTmxKnU8TqqfVYVbPZJoiWztnu3tkO2crbRdEhK3UVQ2fHRs5sMdYTwzZ/dlnb9L6BbXrfVttUrmCbB3uT1/aBbfbMlRfZJlzJzyCpmaJKGm5KAG+ps0M9zTgI+6PReKa3Z7ajY7YHBFDgF3I7K+yAGlBnIgYt9ATgHHt3bkLzNEoyRTHr42ZgHa3kxgKBQEOg3kt3ZgG2H4DokFeSkXauzj5KYCsTiEEKAm4jZ2/fcFVfy1iJVZKckj8T33pDsv/oxt6rkzj7o4N2vMvUmqrHitI701FfbXFKVqmuNXnj+Pab+zuPjj42mTJHBzSgEcSId5KfANWHUnoVaCeIBBGJAjpnxqLItsNeSFNBObDmIFRCLc5DQEtaHg+aoR/4nS96wsBKJ+iq0oDqa7VaWJ80i+gLq4LHY1jfJatUmxGw8xugn2onrYpiPUm1NCI7nfLIyMaKFqdksXlt5HONwcNOWXZmMyxWPgAx0nF405Dikp0mgemjk1SCPiKoF40khuvLiWBSgEwyKsIeEdgwmZgWqlNmUA0ztEqqGhYSytBYNAru1BvtibXBEOFQMBqyFBJlphOaIbDtv5EjvIlgSGSl/x0j2tYOXrTwgqB4+uLp+bKjPUMnEokTg5uuhtD4iT0bNuzpiNNrHC/DHmJi/ES3WuEQLZLAiZbS+d198Y2GKW6KJGiYjGU2bpyN5S0Rowm4/CP4nYaiiUa/sX9i3oQxP2NirBdvAWpgB7B2C9BukKxcEvHwh6aoLvqSjammQoybbSXcO9LZf2Bq8PVvqx+oMyrk0yy+/SDcgZaXUT9M9+fkAchlYHYsgoaeg1bLIsZPLi/rbWFK+y64/BJoD9C9gb/ELPKIbmBY9Kar1fpbtjpxTWwO5nxHLMG/9Fhslh+m8sTigEW2qtYXvheGivUfEx8uorPzt5LLKlv/+lUj/gIt6INAS/6s0XuFHegHi88ajeGWpgxdcEnIWzrRmS/EmlkqZaxYXupQphmzKHAmU0kKshoj9KX0DdBbjmgjRREAhQhCEUaifFU7ooEz35k23K0TdYCEqF6pu11Br+up2WOYL03hfrmLsrQpr+zeRMNItKD1fW3dO1XPyS7Cnbgqp/vS5I76ofrsq5cYAn6aXrsb4p3xSDJvo/8KvqmhyccNEzUYL2FaLlhqdd5SfdCz0sg2abmedML21syY8ofv26PKNqV/MLy1pcDQPCzPx/Zmv88I1gzqf7hCPWTqK+taHdC+Zu9Y/cfsHeuSpzdvPp00rr2t6Xh8qq1tKh5Ptz5+dmjobCp1dnj4bKqXLjR0uYnP9ho0TEBsi4Jd0bW1J9GZS4bYeinQrXRJUXJDxVmGx94ovblUSpdJb7ozlXmZlR/oKaQ3TTtjhBu4cTR142BHU/Y3zK/uolnOYHM82xTb39M9HWuf7unZH8vF5svlrStcVBct+SkjKK+Tt16C88a5gfLm89bL5wZYtS2dZvZhX0kO+iEiR9fmBoa9nwJ+q9C5x310pcwxW1KIagXbNhZXwx1gO4TBzsm5tW6RX4JXEFZ5B5MMXX0N76hClcFQjXvlELTG4NOzVuUdeLvfaTVV2oIjzXkdl0xvIlanE/Y/XXub/m3FH6a6Upjx1gh5z2eAtzZ2nr7+Xrs6lT9Zh612WKsL19TS8/R4bgHN7bHrVp2Biit7bG9ujw0NjTZBkqWeAy2bkz079jdNtIb3VFsk0SqZS5Oh5gEyNNA+GD6y9eyW/RabKEjj0XBjo8Mz0N/QXxuoFW2yRTD7KiKR+kbF5u9u6d96FeOBHoa2kQVIVDIpPcokb+JN5yHGchw/LbBFk2opL1gfJEkUIX+0tgoRreAV0h/IfWpra1w0HrsU+uKnkOaELs1+8tnRoxUlgmqy2PxeX2PdiKwo8gjVyJxVccr4q9nFkM/kkOwuqRX0RjMhdoR+QrXKDmZzy7/Fv8B/gN1nn2FNKg+bB8zyt3yc8hmNBJ8vakwnZGPTGgwGTav9JrfcMQZYDX9fOZ6ZPUbJGhsa3grG8QdYSV85cPXVB3A5W1Vf2ZJKbaGwcS6zDOu7hMrpOYYXF44WqleOFspRef3K0QLdzwuwk28v2srHS/APVP5Z3mGWnPxXOafD4uA/+zneIRGL3WoxZ9vNVixJ+Hli5mUFNuvX4r+wWA1bhfnJ8zB/KH++oFXKl54vVBedL4RQMFgXKs37DiWojh4t5Akross4+mgjTyncX5qcFoudP389JVLh7udUm8XBvfdGSFTM7zoveInktGM52w50SRbcnn0eSLZa8POCaKMUvwOHXa7s3+H3u+nZz/If8DOEhzXOn6isKXNCTpQ7wi7kQ7WNtavzIaat9o6O/CFWScdKRvSMKtutH/2oxWFVxYc/Jbhkh+XeeySHzSF+4uGgJLvsz31NdshW87f+zizJqu1v/9bmsFrN3/62YVOdkFuaUStKJDaWYRMvg+0QesJM38CcEwVSnFlXFkytjMmyFW0Ak6qpD+XefOQSaSOPLsSBmHCpreWM7XtK3/GhxpFSD+HsZkFIdO/IlO3v2LOXpSkDDSnITogZbG7zxMlu1WFzErMkcdqRvVpj25E0bmP2+J0tow0DIdxoUyD7pC9TH4e9Tw2O0/eYOI4zCBnt3O5Cu2a0gwYwecbIXbk7We7K5XNX4xn8q5VnwLYzBi6pY7ikkOcS1AE5RAU7f/bl3usxMVWw13p4hr7ig02uE4KH0+cs97oB0R6i7/W8RckElR5btYxjyLbvH+2IH5uYONbRcWxi9/T07l3T07uk/Q8dPvKJ/dMPHTn80P6+By8sPPjgwoUHmS/QD7dfI19CXlSa8DglgrdAIwSCXIZNk1x1xfNzJhXv6IiX/NThstvUd4miDQLaZyQ7WLycO/sfGeXdsmjnDwmEzjEOzErAZz1qT2woB1uhyTzmMeHP5TfBlGeeLzotq0d1dVpjO/W44uOyjjyrBUryZxiiGMC/heCYvWBXzT/vjG8f2bDVZXVY3Wah/Ejf/KneoSdxW7ci22AVs0rLvTNNg+PNLapTEpzmeO/xdMd1Yy/mzlu+RS7COnbKyNHr8mYNu1oec1jkDoNlC9NIENyrg2gU1jzM8bDZx/SBd8IDsBBeDt9YFNpQa3swQF8EGkl6IRErOnfOpyQ5b151YCi24Ximp//kYHiywq7Ksq1xtGV7y4aJiBwyyQ7py9l/pAsGnnQ6pCcE/FT73ODgNT0VFZJd9lijkcnWjlFNBL+RXqInivTY+nmwS3rOTNi7GfZGsJq9xTeBV0OSAQv6YVR85lxVyZIrWNrEQmah5XKKWO6M0/DhtkCbgl8HcgZU+ir1+7Iq4iQ4qjKQ/U//Gzvp2vVFaj5fBDrM+JMyuOkpnACddCxn8Y+BnjgaTWxuw5xYCxTRrxwuI25BME2DzFfEbZhUHMVqO7SgVneJrPPCzkt7xb466Cl2/l2xSDcNGw/39J8ebdxRLYiKbLWWb6zuSm84sL06FigVHS4cJiDuKBV69tWa8s1B/M2uw4nhE30V5bxDlFwWtxdS5LFp1SG7bCYOOyUHfbn8ok014gH+DfkmyDOM9j1exsRuJCLlJkgXOZ4Ac/T9FM0wVuyunGZ/5wsYxZ3phIslweHKxtoaqqf6Ve+NctnvyiGTyBL+1Snw3Eysa64vdaRty8KM2WRTSyffX161a0Pn3uBwS/t4Y/1YG34qcU1Pz+G+4VPJXV95qJY4HR5z4FP7tYbs9dMj0fGW5omWyGjUyIHD6Cc4gn8Coaxq/W9uaIyj39zE18S4Cz2a1lOj0av2kxpWMa7GXoim2LfB2k33YxBLaexkQmCJDjdDI6qHM2JptbOy1AOIthiNparxXQ/LuKjpkjX1EVVVRGX1BT/oVj2qB/5T3dkZt+pV3ezCcosL6F7UDwlMz+Nqbk8rgQYVxuuJ/D4RXMdHAwBGtxU1pR/PfSLkFXLhLZ4PeGIuxfDcW/yJkNPKPhEq6wqu/kJIZV8IUbmUwuUG8J0hNIJ2Jbb7vQQyvVHFIXJYgCyHfjEhQ57kTtnNEKst006blbNYSlI5gQ0PIzQ8MjyyZTOMMNi/qbenM962IVBbq7npFxWqWJl3eTF/mGecVcY6OoqgXGa7AjDFQvQqABygkzlVtV8V2muH25yPOGWbikuf9WGFAdtsLtW+L5i2u1z2uXKiWJ0KV/JsOaBRYPLLwWdDBPIWm/NlFS4fk+0uu/mu3M0FAedl2nePbC9R7jSu2VdefpnZZDtc34MOgEmUJbx5a8y9UaNmQs2xdY1ZDBeMgVkBswc6lnn5HP4dVw17icpEOTG+AYPm83TE0zCegpx1HFvCWWDMeR59d1bq5PGjosMK6Wx2q2iXblVks8hN26wO2WL5wydkidEaW07gqyD/KGPnUTRZMDb2VfV0qeaNWLbi0PTFJFML7jafPf/eM6IIwx254fQ1sl1+mu97/e6FX2zhFclu6f3+mZtf7hKc1tz7v/LlftxPvgLzGDKpSFEOyphMylBpVYGHuLFny0dQuhILWoPDduSG66+GFNMsnr3t9ptE85dXT8Jveu3uhX/azLO5utHP8VZcg2yFmEBP3fA0Ex/92M+GrO1GTMjrgKpg1Om0sY8Lvvtz+hmCary7hCzLRyTYx/1XyNq5pSxdFdB9y1mkLiLIvbKQe7HDRgqAfwSIiLsg/ylHMTT8hahKVlzWzWHmszSWkBn2Lp56rYs2o9tWtaYTlmA4CM5L97Pq5Z33Cn790XU+/fv4ep8Dzq33OWDF+t8IYnreil/HP0MlVI/2/Hc0+VWxIkStBlGlmfIJVTBIbyWtJSb8uiRnP2a3WkF3eCyrw6IGwAwWPLJT/KpFtUo28bGLFpesYMtzIMv65f3cfZDnTcDw/2K8RXD6sUSCPhvHS0ksiNyojzVxxU1pA7UFiUhAonDOCqkhRrDBOQJ1s2A+CGu5ZUbGFgsYuySRGbbrkejxiB+ea39Tz7GjE/owMp5NdMBmTyKcdO5NT2s8mU5Tf9i3d9cO4HO8rjYUqq8F+7exSJhfVmmetvp0ibok2zh63MU5XeEUcL0vCNVYex6HoZD/fP+2vmP94RjmaubjjQOh/uPJ1mG7xPt8uBn71KZtLaN37L3wo3cPffB429ZYRBBkgaibDo3e8unxu//1nnCiLb6jqaOhaV8fJs/tvHtq+wNzTSGLqawnEUk1Je7cG48mfGUin33JZCkr231h8/iZgeMvvm/nh/Y6vF7OLnB2S3XgyKcyH/mHm7O32ds3pU60xfsS8+25f++Z+1ecM47eX4G02fH5f3vqzz5A7y9tvvBs9o7lelOQPwZVeupv/Og3DOzfhZp2QP83TMGVfzlq/MiNZAvsBb5Dv/ldvhk9g6rIHagS/Ql/5H1oP3k/arls/4vsW7Urj9H5xjh/NH1xoO+JK9D3jXXm/t3bRw95yBiLuN/cmFxPDv+7b40Gkr08j/8RP7JzhX5y/5V5Ia2o9i2Pvw/V/Ifx9lGkcc/R73D+HWPcRr+LWdO2F0X/pHzsRROwBYxeof/yfZH/u7TiDKokR68wfyd9X7Dm9x32/vTtlVEJy7aM3ytF8OX89wMGXSS5Dn1XmmfHn1b3b8Y28jaA33NlXvC3UeNb0u0O+i7hCnN3vTXZvWXeFFRLXrs05kAeWLOuXb3ZcZ9BldxHjPWXdFy6DoOOOyBhN0HfODGjKPhQDQmiDlLG9uf/X/7wbhRGTwF/z6yWN7kb9t6Ps73lpXKUkPkNx70BxeCv/JL222G/dKXnppEP/gL/L8uMqKife/5No9fDXx+aRQvoGSz9kWUWf2FV+c3aQpJvqdxKXikuXEuh7H5T5X4oL1xaeD+UA5cpD79N5Z9oMW1fU7542fLav6cITcLtb1Ceyxex948sj5ndq8pdq8qrb61Ydlq+UVykikJpetPlNCv3rC3WGii3XKY88/YUuQbKX9rMa8o1lykvrS72qrdY9tufLJSs49AVyynHXVA+USg/c3qdR53/rMSVz6oVf9KyRb1LfckorkOuu4rKxUvKa+5QoYyvKXPul97e4pHebPGa6W4Z9qfXwI76Q4h+7diIetD7IFp+yOaFOt1Lm9Eh2Jlj3gIrg8p26RTGSIWaARNkx7U5mEOduDUH86gGX5ODTagc35WDBWj/qxxsR+3462gAnUAn0Rl0Cl2NDqMj6DTyo1bYrW2A4kc7oWUe7tvQ9dB/EF2LrkMZdBzNQdskPHMC6J+HdvpUP+CcBvwT0H4d1OvZaKdh9Otg1WuGchjGoBjXowOoCZ46gY5BqzHeKRjnRsgyT0L9MDoKmMcBupH1Nq8z/zDcj0HbUaC9AUVgvhtzo/vRdhjrOvg7hW6AK6V1GOY6zqgcZ88BT/6KS0f1VwJdl85FxzsMrUehfgq1AU4LKz0gg0NoCDB61nkquua59WS4GmM3o/k6wKLU+otmeuPR87I2JH0d4FKNnoS262CU65ikmphuDkP/BEiEngannkRf3z61iPHdaR0b/7OMk4tITD62ua2aQ40UfKLbHDKrZs5s1AaFFqFCYDUpedH+tOVp/mkwKAvUbcmLKMEKq3NocLEW37ltSk/cObXIzQ0uhmjti+ZbwPwSdx7cOUVR0vB7otdcD4GfkxufxMvv1fn3LxI0+KhpTkCDg/8Hc2MTZQplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjw8L1R5cGUvT2JqU3RtL04gMjAwL0ZpcnN0IDE3NjgvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1MDY4Pj4Kc3RyZWFtCnja7Vxbc9tGln7fX4G3ETNlsO+XlEu1trWeqMZJPLEzyS6HD7QEydyRRRVJJfa/3+90N8gG2SBpm3KcqnWZAtC3c853Ln0Bun3FKi4rpyuO/xIPrhIKt76SRleCVcqZSvDKMF4JUVn8BMoriWKVN7igMHOqEqbi3PtKWLSD6sJXXClWSYGmQUISCWsq6SpuDK+QxS3aUMh3VlaBqDKgB6rMVxr0mBOVRtNc60pb0BcOjIABMEOkpVUVcamkrQzY1JZVBvWNtxWaFBbPFs/OgWU8e8jiXCWZY5WDhBz1vQKLildgXUoNphgSFDI4B/OGgz3OK2k9+ObEvgWjgvgniSC14l5CZFEpqQlDEoWEgaDKUBlgpawnOJBCkHHIpDlkD3JJBsS0wY0HhOBEK8JIkeiGqqOw8mAMjWoN/XAmcQOoOKMUYpWhumGi8qhtoEVLV+2gLlwhOcoAG6rqcAMWOSFsoQYOAbUFGBBCOw7c0JQDKY+2SS/WVtoT3qjgSamMEjSagFK1d9QEtEAq8wJXqILDlgwzhBz0woh3sG3oD0wEN8Q7TMsQ/hwWZQR4B65GEO8oIcA7dGQEKYx0DRKwBSOBCmzNSCgWNmsktIIiRkEPDrSAPIwSVxSGDRgNHaKI0YQoQ4NAp/J0BVKcpDKcRELTRoFxMGYMKRgPxgJnrsCNlSgM00COJ2PGjSOdoZYjtwEYhjyCC7oB9qRb40id8A7jSdNwC+NRg5MJe8jIgaVlpHuSORgTyFhG9iEVbohDpFqyOrJjMgQucc+hCg6YLfdU25NTEssoI8iA4SkWpg83oxTiAnq2kgqDfxtMyICC0VQGFCyxDP+BGYAEGHCMODUWmJM64VJOkgGjnDOketiVc8jnluAkLYJDL0lQS6bD6cZABSHFwrkIXUtKoJKc5GeS/MaRx8EQqmALcHiUcWQ5jCAO1iXoryOH1BCfU6xC41SXIGdEi8qKWM4R6JrKEcaOGCADhJdRmiEHJTeFrQJMTbkEeLBjQhxOjBxPeBrSNiGiyA8C2JrUxwlSuCTVJXsI/kThQXtPQYvAFJCSjBr4CkpjBKej0EaAkCkKsi5LBivgvQDJ0p0mREJpTziQhORHTjkKxoQNaU0wyrWa2iOUXLBLyqUIR9ywEI7phohSEPNkr4SVF7AzETIlhThGN9BakEJJCvwEANgTobiGniUhQdFbcCplgKAKkAgKcnQDPBUVchTJiJyHgwvyDu+hO03sM7AeeKb4aQJUJBYngQQ5GiEgKKDD5IGPotBPSCkqQugQoiQz5QRcHfU4gmoQ4pZqeuooiLaDNgyVA6uPHw9//fHN/zYXS9ydv2OVRsf30+np8PnslpKeU9GY8nI+u3jVLEfDl2fPh6+b90uUn1w3z+Llabycj09P/wP1Pqrw6w93zfDJ7e1sOXx1/2ZJTy+mt/8ePp3NL5v5iIEBNh5+NzwfPhvx+PAE1V4N/zZ7PRuenVy8ndwtm3nNB2DzJ8gyovguXR08RoqaoojWrEa3cySSC1CZzm5rnhF1pvbUKQlTC+rtta0tXJsYMe7odMUWXa5qESIWBIfhEx8IfEfGWOQYKy9qSbFCi9rCFjVTtWP2yLKKbYyVYzX1cXCDmvnIiNPi6IS3QFYAV9Egj4lawY+IEeePL7HcIqxNrWiMJnSN7pT48Iofna7aoqtUrREChYBq0WMRHwimR7Yq2bEqIWpDEZLrGsM4Gj/W7OgeJAtWBWsyNNYEtpz4QBkuj053y6hgybVlYXRV00hUcYQV3Qq8EYmHz6nv+5SY/Jkhfbt6uef4kjx9jFLQn1e8VcrPP53T7+Ttcnm3+HY4bK+///57PbtrbhfLedMs303u6tn8erhSGAaLtaXpCkxSI+Ap42uPrltBc6so8JUq7Gh8/H9DX6Ehv5tMb5azb982Nzez/5wtZ29m9XS2slvM5GoanGL0WksaOFuGEEeLCbp23Bzbm7boI8BpRr2lR2QPs6La0cQZbDFzdL95MX03XS5GJ2ezi0evlpP5cpANX8bDHybvmk4uOAGVtsw36Bgsy1MogXcSxAD9FBI2CK67s5M78IPeY01unYcJDbUVSwyszp7YwJrsEbm2QCZkikRDr0mkdOvXTciBY+snNXB8/aQHTvS1blLrfqN1M3AZ93bgMu7dwGXM+4Er8Z7pZEXg79PLxQhTSZSmZSm6uPjkXB+D00FnDN7lcjrwmdRTPEaxU41vAJIXeUpow8sCsXzA3RmfrSjmJbzutEojV282klDKbiTJgXc7aNOw7GRx/yZrNhc5L0Yz6LxtGuXQek43TQxoaSekbbZKi2gFTrrFxAY7qmPpW4VpPa5ATA5ofW4rQwUubDGDDWh8VMqhOn6XsRT4DXbngz3TMiddaJUzXDnbBwMa2cZB9cAQCtOaYoF3ypClDADEVSkDeuZ6P396iz3Xy54e0KJkgZYZ0PpkIcMOaNGykOEGtIi5lzsfuVslfkMQ9bHnB7Qe2hLL68AkhCzmwCSEKuYAcdGHX15ObrNouyx2S9NqZoke9CVcMQewC1/MAe6SFXMAvOSHW+cm98HqeexZw4p9vKZnKQ7AxW21LHg/LrAHWdYDtCp1KUdAq9IUc6BVaffzKLalF7qXR5SmBeMSPWhVFfUgoFXFiznQqjoAR2G2eFT9LMIgVBFGAYNQRRiJ9yKKxPoBIOot/nwvfyRzEUHwrYsAgm1dxA8Go4vODnvR8pPsczXMoNdPwdCVTNf0rFXWcCjqUpfAk4vIVEOvQsco3g5//e//oVdKQqG3q27vb27GyHJ5lkVELGYYiRmkK+dpjbhs27yoyVWelJh5lvOUtbVzPXnc1BjCpbwYYWIer6xGPbPK8z0CdBvMMozqE7kLE0b/TPXAYVztejDUTtZwuCJ72uZ5hh8qFmYltRclAbbq9aHRac8IjGxEOU9xWeu1bKJTj3Naempp9RHrVqLpk1TlPKl9bV1ZARsgd/LC6rUu5ymFaVtPntS6VqokwBaQ5jDlbOapHW2qHW2qHW3mmG3l6R157jBeNg2zmye1qbUpG0u/hZFiZZvHd1hs1x03PER1Awas1pXpaY/xpu3Jk7b2vMfaHautLudJJ2rMUst5ZICynCeMr1kPLwIetOal6wy9HrThCV3vApOup0EFMHVPFqdF3R6nlKz2spwnLAb8tiePWwx8yo7XG2a7PQs/LDZ3Y+yG+3vbn8d74gmps7VIdKxnzWK5CJ91hHWdsOo0Xd40j6+aqyvGtGTMasbMZfphPgtemfWnO9+/vZzMm9tleI9PtH9o3i/D2/0iEeXRcINGVWzcIM2oRFjGdONTenO68wXcBuGX8+a38H1BmTB+1qBRnaQyiRA929MdLzWfT+eLZdvw8MVksRJv+Gx2DwYeiTUrLsdA9LBikuw8AR1YiDKH9Debcm8uFGTCG5lT1D2qZYmapNbTvU2U5W5qokAtQa1y0n1WRQp1EesgHJ4FhLYsszAyAOTjFuwk5ZuUbtfljN7NquxnVe+weR+pBtNL9h84EQkgnszTr9Nata1MWZ7ufH/a2pDKbcjkNiTXjIscVttjQ8l+Alw+apaYVi18TYQw5NkoQGtzB/mY2FC8yNHs2Jzr4TCFkxW0V2toP57LWC/YbZOMiNrhKXqYLE8m1bRlktO3ba5o6J1qk/3S21x6vyPcsLWRaJnFPJ2o41m1gRZl5ST+2hhpWt2qrrG1ba1Q0hmiF+s4UvTszgw1EzGuuieprDi+VFQ2BIKr6NRBL4nTwP3F2qKt3BGbOlPpbQmikuI7g1Yc+UBKysx4q38RXeUJuf6VnJcgoDZXyk/wSKLJd8Og+2EQ/c656m50JtVHI7IrIqtO8EsqicEvqqQQ/PJBRHxZc2S98dJAoz8k5XoLujhAH6ajj7yXtOYrlUjslsgWJEoWpnPx7Fcq3p444vrFM7l47isVT+0Wz/eLl/dl1n+l4und4nHWL18+HnfsK5XP7JGP98vnHzq+f6qou/sFkfcLOusXoo7afsFs9gtJ6nys4vgDaLUwHjlYo2hf+j0a7YyteyV4CCUeLNluBcpMgfFLhlaBIlcg71Fg3ic6uWeafLUe+rYi06hqJdLlxjLCRWHElU1427aOMtbpvoPMlZrPkZz+Y0TUaj3ADPN+/UCiq4LoUdVOfaboBbH2waJbMWyatefi7Z0Ab77uzww9n75HnW4vAXUM3eXTENc3+EtzNsPX0wVidZ+YuyCiaYROc0Wq3xe9qFy+8KEnqVw7W8+jG0FPVxuXcNRV2/4e6+jMT1w+onLuC0LyCWHzKOKbgvjJPPLhl/NfEAuVzUBpUi7WNFardMeQ3fbLng/NPPtysh8vKB4JI9ePkf/ag2fWXlFVu4OrzoOrzYKr7wwDVU9wzbtYzz8TqiaJlwXH4jLkvlHFJwbe8rxubUlH7a47E0Kf91Fefh0wPpiTruaUEdovNUISrAB5NGMv/kROnsQ1aZVS5e9B9G5nN5mz+3zK4OUhI6l82OD7BpUHdGvt4muu8dU7hZKlpDndQzii6Mzs/QMOlXXndWdWZy9iu5Vqc6XmE3mvD5gHdkOP+Uzxr9LLHRWV1N6v8lsILtZthJcPmV9svtcLL06v1v7RCVs99ProbLb1KaGsfUugbfZ2oX2Ru2cVUHQWHT4b7fwdht6vhTIqu43L5cbVGR7YQ4wrX2TwH/mWcmUcx5yh76N17OjSWZDoReBQCfdw/yUn5T43DJ8bhj/EMLKuRLCHmnnsU/YXmoGJfGkmSduKLv4g0f+giZbQBSiCSQjG/0zO8XmTrvi6JHpPEjx6TzKIPQMx73ITkg8cVj9lOvHQ5vfQg0LTMVP5J7XMz5gpcJ5bqMotVO2P7xtBTn+ihR4Qn1eDa7Ue25jU5tZI8ZgWYjsWor+MhXz6FGIXUnssQeSWYHJLMIdYgtz9Zu1jvz9bOUP2oc8KUln6QLF7uEf7xpPlgnQnSqLnozN3LElOd5wt036mKPPPFH15KS596hrZy7/9Fczu57X9fi2+UD7deUzIytBtTqRnaVTn32DJAz50lJ0PHVsiyX76UOdrM7elqVfnbJXWfF2udb/zA+Kk9GyAllSjfd5IPg2SsdxPzWJ2P79oFlUsGc4VeDm5blYS8vbb5dslnhejfPfzunbcFXtAdb7abDeK+2IrnnZ1xS1ccTtqlfY6xo2kVdw1WsUtolXcD1qlbZBxH+e4y444VJq413Mcj1JYhGPG1ipsay9azNbNRJcMe8/SVrO080wV4YlbNUv8yC4/nd2iWX19aP0e+u7Q+quthqO4lXIDWHWoIHG7ZQas2gGsKgMbTSHt5Yt7kSrpiwKqXoD0Bl9lgJQ7tL4t1o+7Iw+or1m5vjq0fr6p8kAg0/7JuKOpintxKi3KjNg+RswGI6ZYP+17OKB+WZFGHljfrANJ/Fy/il/IbxiscYe2ZzcM1n60wcbtNFUMylXc9FEZtUthXMeqKTC1ftTqvWVzPPy+uZxOns7eh6Nd6EhX69sz1J7Nm8lyNj95MXnd/Fr9Pl2+rd6CznzeXA0+8xsn9FP3y7ezedtbtp1Yu0sj9Zzhw/k0rdbt1gKbxoU0OnbhWJjL+4tmfvL+8rfp3eXVu/fVv04whxS0Y+Jfg0EUA13s2WTZnJx9S8coMs0lR4NS/ZXJvzD2l0GU+Me75vZJ6I/TXs/n0+U44Pr97LIZ/rxofrxf3kxvATMlvpi8aW4WqPfD/bvFiIWe9+z0VISb+empalMAaNwyHU4gpYbbdtZdLSlvpfagz2eT5eRmdh1i5shIP5ZiRCf4GGHHio0s12PlR9qKsRVwG1EZb8aOMvzY6ZGwesyZoZwx52bkkMy5G1mJdIliGs/GjAyTuPqRcXbMrYUD4eoZHMHgakeW6bEQHIbsKq/kWEg3MsqNBVEFD8KBhmNjydmITqM0UuLeIc2AYzkSElelwAckUBZ8oaw2Iy8ErigHrqUFPa4glkdUwZXbkXJirASemR8rCb7AnzI8SGqNw72LaaBvtAQWnNpAQFcVnYaq6UzmcKivRxjElU4bco7ux1qDr3AMssY95PF0aLMfQ46RBD/jALmyEXJehfYjsgQ5qAfIDR1cGyAXLECuGSBHzRZ6maCHxgL0wkXojQnQk+gBekASoCdVEfRMRcgRgTzKRshVglxFyLUJkEs6YlewCDkYC5CjTIAcqg6QywQ5T5BbFyDX4J4gl05HyKEiglzKBDk9E+R0IK+GOgypRdHByYBdwjRM5UGbVKCNDSpAm+haZUVno8KvKzpwVqNv0NICajGS8VRrWhiP0NPhkY6PtdGgI8baqhEdXo1fUgfD1aGer/AbG/AH1x0jRow8bH+8in90eNTq1Kpn52f0TBli+HSyaELuP8//cf70yV//cT+9+Pdicnv56Ons5jJUPGsWF/PpHeJdOCI1hPDzs1cfFsvm3fnt1SwE/+vpYjn/cPLkcvamGQx/pCOxprfXJ+eXCNnT5YcBqN/d3TTvKIIz+PzZL3Ru8/CXcCJravL17G/nZ99P7oZtrSyCdxkZPllchNE4oh7tmgwPj2Bjw1dg6p+0nQwx4u67Znr9NpV68tv1L9NLBGqgH1p7SqH9kYLrPpIsnMVNB007OR6eI7hML57cXt80FRs+v5lcI/wY9A/U/AfE9seISbezRfOYtf8c6/w7TWfEUmTrQZYgbJZ0OnkMpyj9fHrTCKTIjW6woz1KYfvU9l+3F7NL4L9C8tF3CabLCejMqPdNne/r2c+3U5Ru6OzbRPj/AE69yBEKZW5kc3RyZWFtCmVuZG9iagoyMjggMCBvYmoKPDwvVHlwZS9PYmpTdG0vTiAzL0ZpcnN0IDIwL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzU1Pj4Kc3RyZWFtCnjajVHLbsIwELz3K3wEVch2CEmRUKQApUQqffAoB8TBJNtgNdhRbKrm77uOgD6kSvVt1zszO7M8JIx4nk94PyQ8IL4fkMGALusS6EQrSxfHnXXFKBm72n14dCgMNL/JaHU/nV0/H2X6ZoTKOnPIj4WoGuwYTFrJ0uqqUWBk7lgWtbFwSNSrRh0cl8ZWdSvO9A7a9LHKoJIqbyUZKCtt3cYFyrKAA5aERREdr0nAPLpGyt6ZcqnvkvFMlPSMiqKr7ya+FqGxSR0TZ4xR13ZFx+sxusClXshNSEeinILM96eh+D1fy8zuSc/3G7LhUH9sOt0wRBwGxrscg+Pd7pYmVhQyjVVeAGF0UojckACJ6wJwmyehtIEBO78e+/Ei9OboH8QB/o7V5QcWvQeNdweYyAI87LhDzn8Zv1zPddg/znarUp1h/pckO9NTTJlAKcSaDW+UtnSpV0riOBCP90/in4SZuJ0KZW5kc3RyZWFtCmVuZG9iagoyMjkgMCBvYmoKPDwvVHlwZS9YUmVmL0lEWzwwYWIzZmIyN2Y5Mjg0MzllN2ZjZTcyMmVkY2RhM2Y1Zj48MGFiM2ZiMjdmOTI4NDM5ZTdmY2U3MjJlZGNkYTNmNWY+XS9Sb290CjEgMCBSL0luZm8gMiAwIFIvU2l6ZSAyMzAvV1sxIDIgMl0vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0OTA+PgpzdHJlYW0KeNol1NlbzFEYwPHzTiJjiRqmBZMtEhrEDKNFyJI9WbIrUhRKtGePrIWUJcm+h+xbIV248B+46nHlf8jv6735POf7nufcnec1xnR324zdfIV2eCgm0BixlxlDdkKHBDVrGqlO1tMjcTj1JPAEbDbTpfy/8IMe4A89oRcEQG+wQx/oK45yfdYPnonzp2Z/aJGQCs1AeC6hHZoD4CUMlLC/OguCV+JyaQbDa4lI13TAG4n8pTkI3kp0gOZgeC9uP00nfJDYYs0Q+CieLM1Q+AxhEC7eFr0YAnNgD8wAHwyFmbAUZsFsGAbLYDmsgFRwwUpIg1WwGiJgOKyH6TAfEmEEJMEaWAvpMBLWwQbYCNNgFHjAC3MhDuJhNERCAiTDPFgAY2AhpMAiWAxjYQlshyzYAVGQDTmwE3ZBLoyDaMiD3bAX8mE8FMA+mAxTYALEwlTYBJthImyBrZABmbANYsANk6AQHkAR7IcDcAfKoBhKoBTKoQJuw2GohINwCE7CETgKx+A4VMEJOAXVcBZOwxm4AOfgPNRALdTBRbgE9XAZrkADXIOrcAOuQyPchCa4Bc1wH+7CPWiDp/AYWuEFvIMv8El8PmspxOXrv/8B3yThtzVLdDPr0vXwXTL+WLNMr0VjoUWTx5h/Klls4gplbmRzdHJlYW0KZW5kb2JqCnN0YXJ0eHJlZgo0MTAxNQolJUVPRgo=</File>
    </Filelist>
</otrs_package>