Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    How to make Deadline Animation in HTML CSS & JS

    25 November 2025

    How to make Animated Download Button in HTML CSS & JS

    21 November 2025

    How to make Password Input Light in HTML CSS & JavaScript

    18 November 2025
    Facebook X (Twitter) Instagram YouTube Telegram Threads
    Coding StellaCoding Stella
    • Home
    • Blog
    • HTML & CSS
      • Login Form
    • JavaScript
    • Hire us!
    Coding StellaCoding Stella
    Home - JavaScript - How to create Escape Road Game using HTML CSS and JS
    JavaScript

    How to create Escape Road Game using HTML CSS and JS

    Coding StellaBy Coding Stella14 October 2025Updated:16 October 2025No Comments12 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Email WhatsApp Copy Link

    Let’s create an Escape Road Game using HTML, CSS, and JavaScript! 🎮
    This fun and interactive project will feature a car racing down a road while avoiding obstacles, testing the player’s speed and reflexes.

    We’ll use:

    • HTML to build the game layout and structure.
    • CSS to design the road, car, and obstacle elements with smooth animations.
    • JavaScript to handle the game logic, movement, collision detection, and score tracking.

    This project is perfect for anyone who loves games and wants to learn how to combine visuals and interactivity on the web. Let’s hit the road and start coding our exciting Escape Road Game! 🚗💨

    HTML :

    This HTML file runs a Unity WebGL game called Escape Road inside the browser with a custom loading screen and Firebase integration. It sets up a fullscreen <canvas> where the Unity game renders, and a loading animation (with a background, car icon, and progress bar) is drawn using another <canvas> until the game finishes loading. JavaScript dynamically loads Unity build files (.loader.js, .data, .wasm, etc.) and shows progress. Once loaded, it hides the loading screen and starts the game. Firebase is initialized for analytics and authentication using its config keys, allowing tracking and potential login support. The code is fully responsive, adapting to desktop and mobile screens while maintaining a 16:9 game aspect ratio.

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=no">
      <title>Escape Road Game| @coding.stella</title>
    
      <link rel="shortcut icon" href="icon.png">
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/abisdbest/classroom.google.com@85146ac051b67a3c32ebdf898bb0144d818d580b/drive.google.com/escape%20road/TemplateData/style.css">
    
      <script id="gmsoft-jssdk" src=""></script>
      <script src="//www.google.com/jsapi"></script>
      <script>
        window.parent.maeExportApis_();
      </script>
    
    </head>
    
    <body class="dark">
    
      <div id="unity-container" class="unity-desktop">
        <p style="opacity: 0;position: absolute;">_</p>
        <canvas id="unity-canvas" style="cursor: default;" width="455" height="614"></canvas>
      </div>
    
      <div id="loading-cover" style="background: black; display: none;">
        <div id="unity-loading-bar">
    
          <canvas id="logo-canvas" style="position: absolute; background-color: black;" width="454535" height="255">
    
            <img src="https://cdn.jsdelivr.net/gh/abisdbest/classroom.google.com@85146ac051b67a3c32ebdf898bb0144d818d580b/drive.google.com/escape%20road/loading.png" id="ld_bg">
            <img src="https://cdn.jsdelivr.net/gh/abisdbest/classroom.google.com@85146ac051b67a3c32ebdf898bb0144d818d580b/drive.google.com/escape%20road/car-icon.png" id="ld_car">
    
          </canvas>
    
        </div>
      </div>
    
      <img id="azlogo" class="az" src="https://cdn.jsdelivr.net/gh/abisdbest/classroom.google.com@85146ac051b67a3c32ebdf898bb0144d818d580b/drive.google.com/escape%20road/az_logo.png" style="opacity: 0; display: none;">
    
      <script type="text/javascript">
        const container = document.querySelector("#unity-container");
        const canvas = document.querySelector("#unity-canvas");
        const loadingCover = document.querySelector("#loading-cover");
        const fullscreenButton = document.querySelector("#unity-fullscreen-button");
        const buildUrl = "https://cdn.jsdelivr.net/gh/abisdbest/classroom.google.com@85146ac051b67a3c32ebdf898bb0144d818d580b/drive.google.com/escape%20road/TemplateData";
        const loaderUrl = "data:@file/javascript;base64,ZnVuY3Rpb24gY3JlYXRlVW5pdHlJbnN0YW5jZSh0LG4sbCl7ZnVuY3Rpb24gZChlLHQpe2lmKCFkLmFib3J0ZWQmJm4uc2hvd0Jhbm5lcilyZXR1cm4iZXJyb3IiPT10JiYoZC5hYm9ydGVkPSEwKSxuLnNob3dCYW5uZXIoZSx0KTtzd2l0Y2godCl7Y2FzZSJlcnJvciI6Y29uc29sZS5lcnJvcihlKTticmVhaztjYXNlIndhcm5pbmciOmNvbnNvbGUud2FybihlKTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKGUpfX1mdW5jdGlvbiByKGUpe3ZhciB0PWUucmVhc29ufHxlLmVycm9yLG49dD90LnRvU3RyaW5nKCk6ZS5tZXNzYWdlfHxlLnJlYXNvbnx8IiIscj10JiZ0LnN0YWNrP3Quc3RhY2sudG9TdHJpbmcoKToiIjsobis9IlxuIisocj1yLnN0YXJ0c1dpdGgobik/ci5zdWJzdHJpbmcobi5sZW5ndGgpOnIpLnRyaW0oKSkmJmMuc3RhY2tUcmFjZVJlZ0V4cCYmYy5zdGFja1RyYWNlUmVnRXhwLnRlc3QobikmJmsobixlLmZpbGVuYW1lfHx0JiYodC5maWxlTmFtZXx8dC5zb3VyY2VVUkwpfHwiIixlLmxpbmVub3x8dCYmKHQubGluZU51bWJlcnx8dC5saW5lKXx8MCl9ZnVuY3Rpb24gZShlLHQsbil7dmFyIHI9ZVt0XTt2b2lkIDAhPT1yJiZyfHwoY29uc29sZS53YXJuKCdDb25maWcgb3B0aW9uICInK3QrJyIgaXMgbWlzc2luZyBvciBlbXB0eS4gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmFsdWU6ICInK24rJyIuIENvbnNpZGVyIHVwZGF0aW5nIHlvdXIgV2ViR0wgdGVtcGxhdGUgdG8gaW5jbHVkZSB0aGUgbWlzc2luZyBjb25maWcgb3B0aW9uLicpLGVbdF09bil9bD1sfHxmdW5jdGlvbigpe307dmFyIG8sYz17Y2FudmFzOnQsd2ViZ2xDb250ZXh0QXR0cmlidXRlczp7cHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHBvd2VyUHJlZmVyZW5jZToyfSxjYWNoZUNvbnRyb2w6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PWMuZGF0YVVybD8ibXVzdC1yZXZhbGlkYXRlIjoibm8tc3RvcmUifSxzdHJlYW1pbmdBc3NldHNVcmw6IlN0cmVhbWluZ0Fzc2V0cyIsZG93bmxvYWRQcm9ncmVzczp7fSxkZWluaXRpYWxpemVyczpbXSxpbnRlcnZhbHM6e30sc2V0SW50ZXJ2YWw6ZnVuY3Rpb24oZSx0KXtlPXdpbmRvdy5zZXRJbnRlcnZhbChlLHQpO3JldHVybiB0aGlzLmludGVydmFsc1tlXT0hMCxlfSxjbGVhckludGVydmFsOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmludGVydmFsc1tlXSx3aW5kb3cuY2xlYXJJbnRlcnZhbChlKX0scHJlUnVuOltdLHBvc3RSdW46W10scHJpbnQ6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LHByaW50RXJyOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSksInN0cmluZyI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZCIpJiYoLTEhPWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtaW1lIik/ZCgnSFRUUCBSZXNwb25zZSBIZWFkZXIgIkNvbnRlbnQtVHlwZSIgY29uZmlndXJlZCBpbmNvcnJlY3RseSBvbiB0aGUgc2VydmVyIGZvciBmaWxlICcrYy5jb2RlVXJsKycgLCBzaG91bGQgYmUgImFwcGxpY2F0aW9uL3dhc20iLiBTdGFydHVwIHRpbWUgcGVyZm9ybWFuY2Ugd2lsbCBzdWZmZXIuJywid2FybmluZyIpOmQoJ1dlYkFzc2VtYmx5IHN0cmVhbWluZyBjb21waWxhdGlvbiBmYWlsZWQhIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpZiAiQ29udGVudC1FbmNvZGluZyIgSFRUUCBoZWFkZXIgaXMgaW5jb3JyZWN0bHkgZW5hYmxlZCBvbiB0aGUgc2VydmVyIGZvciBmaWxlICcrYy5jb2RlVXJsKyIsIGJ1dCB0aGUgZmlsZSBpcyBub3QgcHJlLWNvbXByZXNzZWQgb24gZGlzayAob3IgdmljZSB2ZXJzYSkuIENoZWNrIHRoZSBOZXR3b3JrIHRhYiBpbiBicm93c2VyIERldnRvb2xzIHRvIGRlYnVnIHNlcnZlciBoZWFkZXIgY29uZmlndXJhdGlvbi4iLCJ3YXJuaW5nIikpfSxsb2NhdGVGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXNhYmxlZENhbnZhc0V2ZW50czpbImNvbnRleHRtZW51IiwiZHJhZ3N0YXJ0Il19O2ZvcihvIGluIGUobiwiY29tcGFueU5hbWUiLCJVbml0eSIpLGUobiwicHJvZHVjdE5hbWUiLCJXZWJHTCBQbGF5ZXIiKSxlKG4sInByb2R1Y3RWZXJzaW9uIiwiMS4wIiksbiljW29dPW5bb107Yy5zdHJlYW1pbmdBc3NldHNVcmw9bmV3IFVSTChjLnN0cmVhbWluZ0Fzc2V0c1VybCxkb2N1bWVudC5VUkwpLmhyZWY7dmFyIGE9Yy5kaXNhYmxlZENhbnZhc0V2ZW50cy5zbGljZSgpO2Z1bmN0aW9uIGkoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfWEuZm9yRWFjaChmdW5jdGlvbihlKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxpKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsciksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsciksYy5kZWluaXRpYWxpemVycy5wdXNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIGMuZGlzYWJsZUFjY2Vzc1RvTWVkaWFEZXZpY2VzKCksYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkpfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIixyKSxjLmludGVydmFscyl3aW5kb3cuY2xlYXJJbnRlcnZhbChlKTtjLmludGVydmFscz17fX0pLGMuUXVpdENsZWFudXA9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGMuZGVpbml0aWFsaXplcnMubGVuZ3RoO2UrKyljLmRlaW5pdGlhbGl6ZXJzW2VdKCk7Yy5kZWluaXRpYWxpemVycz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgYy5vblF1aXQmJmMub25RdWl0KCl9O3ZhciBzLHUsZixoLGIsbSxwLGcsdz0iIix2PSIiLHk9KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLGZ1bmN0aW9uKGUpe2RvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudD09PXQ/dC5zdHlsZS53aWR0aCYmKHc9dC5zdHlsZS53aWR0aCx2PXQuc3R5bGUuaGVpZ2h0LHQuc3R5bGUud2lkdGg9IjEwMCUiLHQuc3R5bGUuaGVpZ2h0PSIxMDAlIik6dyYmKHQuc3R5bGUud2lkdGg9dyx0LnN0eWxlLmhlaWdodD12LHY9dz0iIil9KSx7TW9kdWxlOmMsU2V0RnVsbHNjcmVlbjpmdW5jdGlvbigpe2lmKGMuU2V0RnVsbHNjcmVlbilyZXR1cm4gYy5TZXRGdWxsc2NyZWVuLmFwcGx5KGMsYXJndW1lbnRzKTtjLnByaW50KCJGYWlsZWQgdG8gc2V0IEZ1bGxzY3JlZW4gbW9kZTogUGxheWVyIG5vdCBsb2FkZWQgeWV0LiIpfSxTZW5kTWVzc2FnZTpmdW5jdGlvbigpe2lmKGMuU2VuZE1lc3NhZ2UpcmV0dXJuIGMuU2VuZE1lc3NhZ2UuYXBwbHkoYyxhcmd1bWVudHMpO2MucHJpbnQoIkZhaWxlZCB0byBleGVjdXRlIFNlbmRNZXNzYWdlOiBQbGF5ZXIgbm90IGxvYWRlZCB5ZXQuIil9LFF1aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtjLnNob3VsZFF1aXQ9ITAsYy5vblF1aXQ9ZX0pfX0pO2Z1bmN0aW9uIGsoZSx0LG4pey0xPT1lLmluZGV4T2YoImZ1bGxzY3JlZW4gZXJyb3IiKSYmKGMuc3RhcnR1cEVycm9ySGFuZGxlcj9jLnN0YXJ0dXBFcnJvckhhbmRsZXIoZSx0LG4pOmMuZXJyb3JIYW5kbGVyJiZjLmVycm9ySGFuZGxlcihlLHQsbil8fChjb25zb2xlLmxvZygiSW52b2tpbmcgZXJyb3IgaGFuZGxlciBkdWUgdG9cbiIrZSksImZ1bmN0aW9uIj09dHlwZW9mIGR1bXAmJmR1bXAoIkludm9raW5nIGVycm9yIGhhbmRsZXIgZHVlIHRvXG4iK2UpLGsuZGlkU2hvd0Vycm9yTWVzc2FnZXx8KC0xIT0oZT0iQW4gZXJyb3Igb2NjdXJyZWQgcnVubmluZyB0aGUgVW5pdHkgY29udGVudCBvbiB0aGlzIHBhZ2UuIFNlZSB5b3VyIGJyb3dzZXIgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBtb3JlIGluZm8uIFRoZSBlcnJvciB3YXM6XG4iK2UpLmluZGV4T2YoIkRJU0FCTEVfRVhDRVBUSU9OX0NBVENISU5HIik/ZT0iQW4gZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCwgYnV0IGV4Y2VwdGlvbiBoYW5kbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBpbiB0aGlzIGJ1aWxkLiBJZiB5b3UgYXJlIHRoZSBkZXZlbG9wZXIgb2YgdGhpcyBjb250ZW50LCBlbmFibGUgZXhjZXB0aW9ucyBpbiB5b3VyIHByb2plY3QgV2ViR0wgcGxheWVyIHNldHRpbmdzIHRvIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGV4Y2VwdGlvbiBvciBzZWUgdGhlIHN0YWNrIHRyYWNlLiI6LTEhPWUuaW5kZXhPZigiQ2Fubm90IGVubGFyZ2UgbWVtb3J5IGFycmF5cyIpP2U9Ik91dCBvZiBtZW1vcnkuIElmIHlvdSBhcmUgdGhlIGRldmVsb3BlciBvZiB0aGlzIGNvbnRlbnQsIHRyeSBhbGxvY2F0aW5nIG1vcmUgbWVtb3J5IHRvIHlvdXIgV2ViR0wgYnVpbGQgaW4gdGhlIFdlYkdMIHBsYXllciBzZXR0aW5ncy4iOi0xPT1lLmluZGV4T2YoIkludmFsaWQgYXJyYXkgYnVmZmVyIGxlbmd0aCIpJiYtMT09ZS5pbmRleE9mKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpJiYtMT09ZS5pbmRleE9mKCJvdXQgb2YgbWVtb3J5IikmJi0xPT1lLmluZGV4T2YoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkiKXx8KGU9IlRoZSBicm93c2VyIGNvdWxkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgV2ViR0wgY29udGVudC4gSWYgeW91IGFyZSB0aGUgZGV2ZWxvcGVyIG9mIHRoaXMgY29udGVudCwgdHJ5IGFsbG9jYXRpbmcgbGVzcyBtZW1vcnkgdG8geW91ciBXZWJHTCBidWlsZCBpbiB0aGUgV2ViR0wgcGxheWVyIHNldHRpbmdzLiIpLGFsZXJ0KGUpLGsuZGlkU2hvd0Vycm9yTWVzc2FnZT0hMCkpKX1mdW5jdGlvbiB4KGUsdCl7aWYoInN5bWJvbHNVcmwiIT1lKXt2YXIgbj1jLmRvd25sb2FkUHJvZ3Jlc3NbZV0scj0obj1ufHwoYy5kb3dubG9hZFByb2dyZXNzW2VdPXtzdGFydGVkOiExLGZpbmlzaGVkOiExLGxlbmd0aENvbXB1dGFibGU6ITEsdG90YWw6MCxsb2FkZWQ6MH0pLCJvYmplY3QiIT10eXBlb2YgdHx8InByb2dyZXNzIiE9dC50eXBlJiYibG9hZCIhPXQudHlwZXx8KG4uc3RhcnRlZHx8KG4uc3RhcnRlZD0hMCxuLmxlbmd0aENvbXB1dGFibGU9dC5sZW5ndGhDb21wdXRhYmxlKSxuLnRvdGFsPXQudG90YWwsbi5sb2FkZWQ9dC5sb2FkZWQsImxvYWQiPT10LnR5cGUmJihuLmZpbmlzaGVkPSEwKSksMCksbz0wLGE9MCxpPTAscz0wO2ZvcihlIGluIGMuZG93bmxvYWRQcm9ncmVzcyl7aWYoIShuPWMuZG93bmxvYWRQcm9ncmVzc1tlXSkuc3RhcnRlZClyZXR1cm47YSsrLG4ubGVuZ3RoQ29tcHV0YWJsZT8ocis9bi5sb2FkZWQsbys9bi50b3RhbCxpKyspOm4uZmluaXNoZWR8fHMrK31sKC45KihhPyhhLXMtKG8/aSooby1yKS9vOjApKS9hOjApKX19ZnVuY3Rpb24gXygpe3ZhciBvPXRoaXM7by5pc0Nvbm5lY3RlZD1uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe3RyeXtmdW5jdGlvbiByKCl7by5vcGVuREJUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KG8ub3BlbkRCVGltZW91dCksby5vcGVuREJUaW1lb3V0PW51bGwpfW8ub3BlbkRCVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dm9pZCAwPT09by5kYXRhYmFzZSYmbihuZXcgRXJyb3IoIkNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlOiBUaW1lb3V0LiIpKX0sMmUzKTt2YXIgZT1oLm9wZW4ocy5uYW1lLHMudmVyc2lvbik7ZS5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ7KGU9KGU9ZSkudGFyZ2V0LnJlc3VsdCkub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhmLm5hbWUpfHxlLmNyZWF0ZU9iamVjdFN0b3JlKGYubmFtZSksZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHUubmFtZSl8fCh0PWUuY3JlYXRlT2JqZWN0U3RvcmUodS5uYW1lLHtrZXlQYXRoOiJ1cmwifSksWyJ2ZXJzaW9uIiwiY29tcGFueSIsInByb2R1Y3QiLCJ1cGRhdGVkIiwicmV2YWxpZGF0ZWQiLCJhY2Nlc3NlZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dC5jcmVhdGVJbmRleChlLGUpfSkpfSxlLm9uc3VjY2Vzcz1mdW5jdGlvbihlKXtyKCksby5kYXRhYmFzZT1lLnRhcmdldC5yZXN1bHQsdCgpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oZSl7cigpLG8uZGF0YWJhc2U9bnVsbCxuKG5ldyBFcnJvcigiQ291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UuIikpfX1jYXRjaChlKXtyKCksby5kYXRhYmFzZT1udWxsLG4obmV3IEVycm9yKCJDb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZS4iKSl9fSl9ZnVuY3Rpb24gUyhlKXtjb25zb2xlLmxvZygiW1VuaXR5Q2FjaGVdICIrZSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gRS5saW5rPUUubGlua3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEUubGluay5ocmVmPWUsRS5saW5rLmhyZWZ9ZnVuY3Rpb24gQyh0KXt0PXR8fHt9LHRoaXMuaGVhZGVycz1uZXcgSGVhZGVycyxPYmplY3Qua2V5cyh0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVyc1tlXSl9LmJpbmQodGhpcykpLHRoaXMucmVkaXJlY3RlZD10LnJlZGlyZWN0ZWQsdGhpcy5zdGF0dXM9dC5zdGF0dXMsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dCx0aGlzLnR5cGU9dC50eXBlLHRoaXMudXJsPXQudXJsLHRoaXMucGFyc2VkQm9keT10LnBhcnNlZEJvZHksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm9rIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDIwMDw9dGhpcy5zdGF0dXMmJnRoaXMuc3RhdHVzPD0yOTl9LmJpbmQodGhpcyl9KX1mdW5jdGlvbiBCKGUsdCxuLHIsbyl7dmFyIGE9e3VybDplLHZlcnNpb246cC52ZXJzaW9uLGNvbXBhbnk6dCxwcm9kdWN0Om4sdXBkYXRlZDpyLHJldmFsaWRhdGVkOnIsYWNjZXNzZWQ6cixyZXNwb25zZTp7aGVhZGVyczp7fX19O3JldHVybiBvJiYoby5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oZSx0KXthLnJlc3BvbnNlLmhlYWRlcnNbdF09ZX0pLFsicmVkaXJlY3RlZCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJ0eXBlIiwidXJsIl0uZm9yRWFjaChmdW5jdGlvbihlKXthLnJlc3BvbnNlW2VdPW9bZV19KSxhLnJlc3BvbnNlLnBhcnNlZEJvZHk9by5wYXJzZWRCb2R5KSxhfWMuU3lzdGVtSW5mbz1mdW5jdGlvbigpe3ZhciBlLHQsbixyLG89bmF2aWdhdG9yLnVzZXJBZ2VudCsiICIsYT1bWyJGaXJlZm94IiwiRmlyZWZveCJdLFsiT1BSIiwiT3BlcmEiXSxbIkVkZyIsIkVkZ2UiXSxbIlNhbXN1bmdCcm93c2VyIiwiU2Ftc3VuZyBCcm93c2VyIl0sWyJUcmlkZW50IiwiSW50ZXJuZXQgRXhwbG9yZXIiXSxbIk1TSUUiLCJJbnRlcm5ldCBFeHBsb3JlciJdLFsiQ2hyb21lIiwiQ2hyb21lIl0sWyJDcmlPUyIsIkNocm9tZSBvbiBpT1MgU2FmYXJpIl0sWyJGeGlPUyIsIkZpcmVmb3ggb24gaU9TIFNhZmFyaSJdLFsiU2FmYXJpIiwiU2FmYXJpIl1dO2Z1bmN0aW9uIGkoZSx0LG4pe3JldHVybihlPVJlZ0V4cChlLCJpIikuZXhlYyh0KSkmJmVbbl19Zm9yKHZhciBzPTA7czxhLmxlbmd0aDsrK3MpaWYodD1pKGFbc11bMF0rIlsvIF0oLio/KVsgXFwpXSIsbywxKSl7ZT1hW3NdWzFdO2JyZWFrfSJTYWZhcmkiPT1lJiYodD1pKCJWZXJzaW9uLyguKj8pICIsbywxKSksIkludGVybmV0IEV4cGxvcmVyIj09ZSYmKHQ9aSgicnY6KC4qPylcXCk/ICIsbywxKXx8dCk7Zm9yKHZhciBsPVtbIldpbmRvd3MgKC4qPylbOyldIiwiV2luZG93cyJdLFsiQW5kcm9pZCAoWzAtOV8uXSspIiwiQW5kcm9pZCJdLFsiaVBob25lIE9TIChbMC05Xy5dKykiLCJpUGhvbmVPUyJdLFsiaVBhZC4qPyBPUyAoWzAtOV8uXSspIiwiaVBhZE9TIl0sWyJGcmVlQlNEKCApIiwiRnJlZUJTRCJdLFsiT3BlbkJTRCggKSIsIk9wZW5CU0QiXSxbIkxpbnV4fFgxMSgpIiwiTGludXgiXSxbIk1hYyBPUyBYIChbMC05X1xcLl0rKSIsIk1hY09TIl0sWyJib3R8Z29vZ2xlfGJhaWR1fGJpbmd8bXNufHRlb21hfHNsdXJwfHlhbmRleCIsIlNlYXJjaCBCb3QiXV0sZD0wO2Q8bC5sZW5ndGg7KytkKWlmKGM9aShsW2RdWzBdLG8sMSkpe249bFtkXVsxXSxjPWMucmVwbGFjZSgvXy9nLCIuIik7YnJlYWt9dmFyIHUsYz17Ik5UIDUuMCI6IjIwMDAiLCJOVCA1LjEiOiJYUCIsIk5UIDUuMiI6IlNlcnZlciAyMDAzIiwiTlQgNi4wIjoiVmlzdGEiLCJOVCA2LjEiOiI3IiwiTlQgNi4yIjoiOCIsIk5UIDYuMyI6IjguMSIsIk5UIDEwLjAiOiIxMCJ9W2NdfHxjLGY9KChmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSYmKHU9KGg9Zi5nZXRDb250ZXh0KCJ3ZWJnbDIiKSk/MjowLGh8fChoPWYmJmYuZ2V0Q29udGV4dCgid2ViZ2wiKSkmJih1PTEpLGgmJihyPWguZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikmJmguZ2V0UGFyYW1ldGVyKDM3NDQ2KXx8aC5nZXRQYXJhbWV0ZXIoNzkzNykpKSwidW5kZWZpbmVkIiE9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyKSxoPSJvYmplY3QiPT10eXBlb2YgV2ViQXNzZW1ibHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJBc3NlbWJseS5jb21waWxlO3JldHVybnt3aWR0aDpzY3JlZW4ud2lkdGgsaGVpZ2h0OnNjcmVlbi5oZWlnaHQsdXNlckFnZW50Om8udHJpbSgpLGJyb3dzZXI6ZXx8IlVua25vd24gYnJvd3NlciIsYnJvd3NlclZlcnNpb246dHx8IlVua25vd24gdmVyc2lvbiIsbW9iaWxlOi9Nb2JpbGV8QW5kcm9pZHxpUChhZHxob25lKS8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbiksb3M6bnx8IlVua25vd24gT1MiLG9zVmVyc2lvbjpjfHwiVW5rbm93biBPUyBWZXJzaW9uIixncHU6cnx8IlVua25vd24gR1BVIixsYW5ndWFnZTpuYXZpZ2F0b3IudXNlckxhbmd1YWdlfHxuYXZpZ2F0b3IubGFuZ3VhZ2UsaGFzV2ViR0w6dSxoYXNDdXJzb3JMb2NrOiEhZG9jdW1lbnQuYm9keS5yZXF1ZXN0UG9pbnRlckxvY2ssaGFzRnVsbHNjcmVlbjohIWRvY3VtZW50LmJvZHkucmVxdWVzdEZ1bGxzY3JlZW58fCEhZG9jdW1lbnQuYm9keS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbixoYXNUaHJlYWRzOmYsaGFzV2FzbTpoLGhhc1dhc21UaHJlYWRzOiExfX0oKSxjLmFib3J0SGFuZGxlcj1mdW5jdGlvbihlKXtyZXR1cm4gayhlLCIiLDApLCEwfSxFcnJvci5zdGFja1RyYWNlTGltaXQ9TWF0aC5tYXgoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0fHwwLDUwKSxjLnJlYWRCb2R5V2l0aFByb2dyZXNzPWZ1bmN0aW9uKGEsaSxzKXt2YXIgZT1hLmJvZHk/YS5ib2R5LmdldFJlYWRlcigpOnZvaWQgMCxsPXZvaWQgMCE9PWEuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiAwO3ZhciB0PWUuaGVhZGVycy5nZXQoIkNvbnRlbnQtRW5jb2RpbmciKSxuPXBhcnNlSW50KGUuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikpO3N3aXRjaCh0KXtjYXNlImJyIjpyZXR1cm4gTWF0aC5yb3VuZCg1Km4pO2Nhc2UiZ3ppcCI6cmV0dXJuIE1hdGgucm91bmQoNCpuKTtkZWZhdWx0OnJldHVybiBufX0oYSxsKSx1PW5ldyBVaW50OEFycmF5KGQpLGM9W10sZj0wLGg9MDtyZXR1cm4gbHx8Y29uc29sZS53YXJuKCJbVW5pdHlDYWNoZV0gUmVzcG9uc2UgaXMgc2VydmVkIHdpdGhvdXQgQ29udGVudC1MZW5ndGggaGVhZGVyLiBQbGVhc2UgcmVjb25maWd1cmUgc2VydmVyIHRvIGluY2x1ZGUgdmFsaWQgQ29udGVudC1MZW5ndGggZm9yIGJldHRlciBkb3dubG9hZCBwZXJmb3JtYW5jZS4iKSxmdW5jdGlvbiBvKCl7cmV0dXJuIHZvaWQgMD09PWU/YS5hcnJheUJ1ZmZlcigpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIGkoe3R5cGU6InByb2dyZXNzIixyZXNwb25zZTphLHRvdGFsOmUubGVuZ3RoLGxvYWRlZDowLGxlbmd0aENvbXB1dGFibGU6bCxjaHVuazpzP3Q6bnVsbH0pLHR9KTplLnJlYWQoKS50aGVuKGZ1bmN0aW9uKGUpe2lmKGUuZG9uZSl7aWYoZj09PWQpcmV0dXJuIHU7aWYoZjxkKXJldHVybiB1LnNsaWNlKDAsZik7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGYpLG49KHQuc2V0KHUsMCksaCkscj0wO3I8Yy5sZW5ndGg7KytyKXQuc2V0KGNbcl0sbiksbis9Y1tyXS5sZW5ndGg7cmV0dXJuIHR9cmV0dXJuIGYrZS52YWx1ZS5sZW5ndGg8PXUubGVuZ3RoPyh1LnNldChlLnZhbHVlLGYpLGg9ZitlLnZhbHVlLmxlbmd0aCk6Yy5wdXNoKGUudmFsdWUpLGYrPWUudmFsdWUubGVuZ3RoLGkoe3R5cGU6InByb2dyZXNzIixyZXNwb25zZTphLHRvdGFsOk1hdGgubWF4KGQsZiksbG9hZGVkOmYsbGVuZ3RoQ29tcHV0YWJsZTpsLGNodW5rOnM/ZS52YWx1ZTpudWxsfSksbygpfSl9KCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gaSh7dHlwZToibG9hZCIscmVzcG9uc2U6YSx0b3RhbDplLmxlbmd0aCxsb2FkZWQ6ZS5sZW5ndGgsbGVuZ3RoQ29tcHV0YWJsZTpsLGNodW5rOm51bGx9KSxhLnBhcnNlZEJvZHk9ZSxhfSl9LGMuZmV0Y2hXaXRoUHJvZ3Jlc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbigpe307cmV0dXJuIHQmJnQub25Qcm9ncmVzcyYmKG49dC5vblByb2dyZXNzKSxmZXRjaChlLHQpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGMucmVhZEJvZHlXaXRoUHJvZ3Jlc3MoZSxuLHQuZW5hYmxlU3RyZWFtaW5nRG93bmxvYWQpfSl9LGMuVW5pdHlDYWNoZT0ocz17bmFtZToiVW5pdHlDYWNoZSIsdmVyc2lvbjozfSx1PXtuYW1lOiJSZXF1ZXN0U3RvcmUiLHZlcnNpb246MX0sZj17bmFtZToiV2ViQXNzZW1ibHkiLHZlcnNpb246MX0saD13aW5kb3cuaW5kZXhlZERCfHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREIsXy5Vbml0eUNhY2hlRGF0YWJhc2U9cyxfLlJlcXVlc3RTdG9yZT11LF8uV2ViQXNzZW1ibHlTdG9yZT1mLGI9bnVsbCxfLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGI9Ynx8bmV3IF99LF8uZGVzdHJveUluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGI/Yi5jbG9zZSgpLnRoZW4oZnVuY3Rpb24oKXtiPW51bGx9KTpQcm9taXNlLnJlc29sdmUoKX0sXy5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZGVzdHJveUluc3RhbmNlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciBuPWguZGVsZXRlRGF0YWJhc2Uocy5uYW1lKTtuLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2UoKX0sbi5vbmVycm9yPWZ1bmN0aW9uKCl7dChuZXcgRXJyb3IoIkNvdWxkIG5vdCBkZWxldGUgZGF0YWJhc2UuIikpfSxuLm9uYmxvY2tlZD1mdW5jdGlvbigpe3QobmV3IEVycm9yKCJEYXRhYmFzZSBibG9ja2VkLiIpKX19KX0pfSxfLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGEsaSxzKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7dHJ5e3ZhciBlLHIsbztudWxsPT09dGhpcy5kYXRhYmFzZT9uKG5ldyBFcnJvcigiaW5kZXhlZERCIGFjY2VzcyBkZW5pZWQiKSk6KGU9LTEhPVsicHV0IiwiZGVsZXRlIiwiY2xlYXIiXS5pbmRleE9mKGkpPyJyZWFkd3JpdGUiOiJyZWFkb25seSIscj10aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKFthXSxlKS5vYmplY3RTdG9yZShhKSwib3BlbktleUN1cnNvciI9PWkmJihyPXIuaW5kZXgoc1swXSkscz1zLnNsaWNlKDEpKSwobz1yW2ldLmFwcGx5KHIscykpLm9uc3VjY2Vzcz1mdW5jdGlvbihlKXt0KGUudGFyZ2V0LnJlc3VsdCl9LG8ub25lcnJvcj1mdW5jdGlvbihlKXtuKGUpfSl9Y2F0Y2goZSl7bihlKX19LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKX0sXy5wcm90b3R5cGUubG9hZFJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhlY3V0ZSh1Lm5hbWUsImdldCIsW2VdKX0sXy5wcm90b3R5cGUuc3RvcmVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4ZWN1dGUodS5uYW1lLCJwdXQiLFtlXSl9LF8ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQudGhlbihmdW5jdGlvbigpe3RoaXMuZGF0YWJhc2UmJih0aGlzLmRhdGFiYXNlLmNsb3NlKCksdGhpcy5kYXRhYmFzZT1udWxsKX0uYmluZCh0aGlzKSl9LF8pLGMuY2FjaGVkRmV0Y2g9KG09Yy5Vbml0eUNhY2hlLHA9bS5SZXF1ZXN0U3RvcmUsZz1jLmZldGNoV2l0aFByb2dyZXNzLEMucHJvdG90eXBlLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnBhcnNlZEJvZHkuYnVmZmVyKX0sQy5wcm90b3R5cGUuYmxvYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFycmF5QnVmZmVyKCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJsb2IoW2VdKX0pfSxDLnByb3RvdHlwZS5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04ucGFyc2UoZSl9KX0sQy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbigpe3ZhciBlPW5ldyBUZXh0RGVjb2RlcjtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUuZGVjb2RlKHRoaXMucGFyc2VkQm9keSkpfSxmdW5jdGlvbihyLG8pe3ZhciBlLHQsYT1tLmdldEluc3RhbmNlKCksbj1FKCJzdHJpbmciPT10eXBlb2Ygcj9yOnIudXJsKSxpPXtlbmFibGVkOihlPW4sKCEodD1vKXx8IXQubWV0aG9kfHwiR0VUIj09PXQubWV0aG9kKSYmKCghdHx8LTEhPVsibXVzdC1yZXZhbGlkYXRlIiwiaW1tdXRhYmxlIl0uaW5kZXhPZih0LmNvbnRyb2wpKSYmISFlLm1hdGNoKCJeaHR0cHM/Oi8vIikpKX07ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBnKGUsdCkudGhlbihmdW5jdGlvbihlKXtpZihpLmVuYWJsZWQmJiFpLnJldmFsaWRhdGVkKXtpZigzMDQ9PT1lLnN0YXR1cylyZXR1cm4gaS5yZXN1bHQucmV2YWxpZGF0ZWQ9aS5yZXN1bHQuYWNjZXNzZWQsaS5yZXZhbGlkYXRlZD0hMCxhLnN0b3JlUmVxdWVzdChpLnJlc3VsdCkudGhlbihmdW5jdGlvbigpe1MoIiciK2kucmVzdWx0LnVybCsiJyBzdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQgYW5kIHNlcnZlZCBmcm9tIHRoZSBpbmRleGVkREIgY2FjaGUiKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe1MoIiciK2kucmVzdWx0LnVybCsiJyBzdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQgYnV0IG5vdCBzdG9yZWQgaW4gdGhlIGluZGV4ZWREQiBjYWNoZSBkdWUgdG8gdGhlIGVycm9yOiAiK2UpfSksbmV3IEMoaS5yZXN1bHQucmVzcG9uc2UpOzIwMD09ZS5zdGF0dXM/KGkucmVzdWx0PUIoZS51cmwsaS5jb21wYW55LGkucHJvZHVjdCxpLmFjY2Vzc2VkLGUpLGkucmV2YWxpZGF0ZWQ9ITAsYS5zdG9yZVJlcXVlc3QoaS5yZXN1bHQpLnRoZW4oZnVuY3Rpb24oKXtTKCInIitpLnJlc3VsdC51cmwrIicgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYW5kIHN0b3JlZCBpbiB0aGUgaW5kZXhlZERCIGNhY2hlIil9KS5jYXRjaChmdW5jdGlvbihlKXtTKCInIitpLnJlc3VsdC51cmwrIicgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYnV0IG5vdCBzdG9yZWQgaW4gdGhlIGluZGV4ZWREQiBjYWNoZSBkdWUgdG8gdGhlIGVycm9yOiAiK2UpfSkpOlMoIiciK2kucmVzdWx0LnVybCsiJyByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogIitlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KX1yZXR1cm4gZX0pfWZ1bmN0aW9uIGwoZSl7byYmby5vblByb2dyZXNzJiYoby5vblByb2dyZXNzKHt0eXBlOiJwcm9ncmVzcyIsdG90YWw6ZS5wYXJzZWRCb2R5Lmxlbmd0aCxsb2FkZWQ6ZS5wYXJzZWRCb2R5Lmxlbmd0aCxsZW5ndGhDb21wdXRhYmxlOiEwfSksby5vblByb2dyZXNzKHt0eXBlOiJsb2FkIix0b3RhbDplLnBhcnNlZEJvZHkubGVuZ3RoLGxvYWRlZDplLnBhcnNlZEJvZHkubGVuZ3RoLGxlbmd0aENvbXB1dGFibGU6ITB9KSl9cmV0dXJuIG8mJihpLmNvbnRyb2w9by5jb250cm9sLGkuY29tcGFueT1vLmNvbXBhbnksaS5wcm9kdWN0PW8ucHJvZHVjdCksaS5yZXN1bHQ9QihuLGkuY29tcGFueSxpLnByb2R1Y3QsRGF0ZS5ub3coKSksaS5yZXZhbGlkYXRlZD0hMSxpLmVuYWJsZWQ/YS5sb2FkUmVxdWVzdChpLnJlc3VsdC51cmwpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWV8fGUudmVyc2lvbiE9PXAudmVyc2lvbilyZXR1cm4gcyhyLG8pO2kucmVzdWx0PWUsaS5yZXN1bHQuYWNjZXNzZWQ9RGF0ZS5ub3coKTt2YXIgdCxuPW5ldyBDKGkucmVzdWx0LnJlc3BvbnNlKTtyZXR1cm4iaW1tdXRhYmxlIj09aS5jb250cm9sPyhpLnJldmFsaWRhdGVkPSEwLGEuc3RvcmVSZXF1ZXN0KGkucmVzdWx0KSxTKCInIitpLnJlc3VsdC51cmwrIicgc2VydmVkIGZyb20gdGhlIGluZGV4ZWREQiBjYWNoZSB3aXRob3V0IHJldmFsaWRhdGlvbiIpLGwobiksbik6KGU9aS5yZXN1bHQudXJsLCh0PXdpbmRvdy5sb2NhdGlvbi5ocmVmLm1hdGNoKC9eW2Etel0rOlwvXC9bXlwvXSsvKSkmJiFlLmxhc3RJbmRleE9mKHRbMF0sMCl8fCFuLmhlYWRlcnMuZ2V0KCJMYXN0LU1vZGlmaWVkIikmJiFuLmhlYWRlcnMuZ2V0KCJFVGFnIik/KGU9KG89b3x8e30pLmhlYWRlcnN8fHt9LG8uaGVhZGVycz1lLG4uaGVhZGVycy5nZXQoIkxhc3QtTW9kaWZpZWQiKT8oZVsiSWYtTW9kaWZpZWQtU2luY2UiXT1uLmhlYWRlcnMuZ2V0KCJMYXN0LU1vZGlmaWVkIiksZVsiQ2FjaGUtQ29udHJvbCJdPSJuby1jYWNoZSIpOm4uaGVhZGVycy5nZXQoIkVUYWciKSYmKGVbIklmLU5vbmUtTWF0Y2giXT1uLmhlYWRlcnMuZ2V0KCJFVGFnIiksZVsiQ2FjaGUtQ29udHJvbCJdPSJuby1jYWNoZSIpLHMocixvKSk6ZmV0Y2goaS5yZXN1bHQudXJsLHttZXRob2Q6IkhFQUQifSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gaS5yZXZhbGlkYXRlZD1bIkxhc3QtTW9kaWZpZWQiLCJFVGFnIl0uZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIW4uaGVhZGVycy5nZXQoZSl8fG4uaGVhZGVycy5nZXQoZSk9PXQuaGVhZGVycy5nZXQoZSl9KSxpLnJldmFsaWRhdGVkPyhpLnJlc3VsdC5yZXZhbGlkYXRlZD1pLnJlc3VsdC5hY2Nlc3NlZCxhLnN0b3JlUmVxdWVzdChpLnJlc3VsdCksUygiJyIraS5yZXN1bHQudXJsKyInIHN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgc2VydmVkIGZyb20gdGhlIGluZGV4ZWREQiBjYWNoZSIpLGwobiksbik6cyhyLG8pfSkpfSkuY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIFMoIkZhaWxlZCB0byBsb2FkICciK2kucmVzdWx0LnVybCsiJyBmcm9tIGluZGV4ZWREQiBjYWNoZSBkdWUgdG8gdGhlIGVycm9yOiAiK2UpLGcocixvKX0pOmcocixvKX0pO3ZhciBVPXtnemlwOntyZXF1aXJlOmZ1bmN0aW9uKGUpe3ZhciB0LG49eyJpbmZsYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBjPWUoIi4vemxpYi9pbmZsYXRlIiksZj1lKCIuL3V0aWxzL2NvbW1vbiIpLGg9ZSgiLi91dGlscy9zdHJpbmdzIiksYj1lKCIuL3psaWIvY29uc3RhbnRzIikscj1lKCIuL3psaWIvbWVzc2FnZXMiKSxvPWUoIi4vemxpYi96c3RyZWFtIiksYT1lKCIuL3psaWIvZ3poZWFkZXIiKSxtPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7dGhpcy5vcHRpb25zPWYuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO2lmKHQucmF3JiYwPD10LndpbmRvd0JpdHMmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cz0tdC53aW5kb3dCaXRzLDA9PT10LndpbmRvd0JpdHMmJih0LndpbmRvd0JpdHM9LTE1KSksISgwPD10LndpbmRvd0JpdHMmJnQud2luZG93Qml0czwxNil8fGUmJmUud2luZG93Qml0c3x8KHQud2luZG93Qml0cys9MzIpLDE1PHQud2luZG93Qml0cyYmdC53aW5kb3dCaXRzPDQ4JiYwPT0oMTUmdC53aW5kb3dCaXRzKSYmKHQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IG8sdGhpcy5zdHJtLmF2YWlsX291dD0wLChlPWMuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0LndpbmRvd0JpdHMpKSE9PWIuWl9PSyl0aHJvdyBuZXcgRXJyb3IocltlXSk7dGhpcy5oZWFkZXI9bmV3IGEsYy5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9ZnVuY3Rpb24gcyhlLHQpe2lmKCh0PW5ldyBpKHQpKS5wdXNoKGUsITApLHQuZXJyKXRocm93IHQubXNnfHxyW3QuZXJyXTtyZXR1cm4gdC5yZXN1bHR9aS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhLGkscz10aGlzLnN0cm0sbD10aGlzLm9wdGlvbnMuY2h1bmtTaXplLGQ9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksdT0hMTtpZih0aGlzLmVuZGVkKXJldHVybiExO3I9dD09PX5+dD90OiEwPT09dD9iLlpfRklOSVNIOmIuWl9OT19GTFVTSCwic3RyaW5nIj09dHlwZW9mIGU/cy5pbnB1dD1oLmJpbnN0cmluZzJidWYoZSk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PW0uY2FsbChlKT9zLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOnMuaW5wdXQ9ZSxzLm5leHRfaW49MCxzLmF2YWlsX2luPXMuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1zLmF2YWlsX291dCYmKHMub3V0cHV0PW5ldyBmLkJ1ZjgobCkscy5uZXh0X291dD0wLHMuYXZhaWxfb3V0PWwpLChuPWMuaW5mbGF0ZShzLGIuWl9OT19GTFVTSCkpPT09Yi5aX05FRURfRElDVCYmZCYmKGk9InN0cmluZyI9PXR5cGVvZiBkP2guc3RyaW5nMmJ1ZihkKToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09bS5jYWxsKGQpP25ldyBVaW50OEFycmF5KGQpOmQsbj1jLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxpKSksbj09PWIuWl9CVUZfRVJST1ImJiEwPT09dSYmKG49Yi5aX09LLHU9ITEpLG4hPT1iLlpfU1RSRUFNX0VORCYmbiE9PWIuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChuKSwhKHRoaXMuZW5kZWQ9ITApfXdoaWxlKCFzLm5leHRfb3V0fHwwIT09cy5hdmFpbF9vdXQmJm4hPT1iLlpfU1RSRUFNX0VORCYmKDAhPT1zLmF2YWlsX2lufHxyIT09Yi5aX0ZJTklTSCYmciE9PWIuWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhpPWgudXRmOGJvcmRlcihzLm91dHB1dCxzLm5leHRfb3V0KSxvPXMubmV4dF9vdXQtaSxhPWguYnVmMnN0cmluZyhzLm91dHB1dCxpKSxzLm5leHRfb3V0PW8scy5hdmFpbF9vdXQ9bC1vLG8mJmYuYXJyYXlTZXQocy5vdXRwdXQscy5vdXRwdXQsaSxvLDApLHRoaXMub25EYXRhKGEpKTp0aGlzLm9uRGF0YShmLnNocmlua0J1ZihzLm91dHB1dCxzLm5leHRfb3V0KSkpLDA9PT1zLmF2YWlsX2luJiYwPT09cy5hdmFpbF9vdXQmJih1PSEwKSwoMDxzLmF2YWlsX2lufHwwPT09cy5hdmFpbF9vdXQpJiZuIT09Yi5aX1NUUkVBTV9FTkQpO3JldHVybihyPW49PT1iLlpfU1RSRUFNX0VORD9iLlpfRklOSVNIOnIpPT09Yi5aX0ZJTklTSD8obj1jLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsbj09PWIuWl9PSyk6ciE9PWIuWl9TWU5DX0ZMVVNIfHwodGhpcy5vbkVuZChiLlpfT0spLCEocy5hdmFpbF9vdXQ9MCkpfSxpLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0saS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PWIuWl9PSyYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PWYuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sbi5JbmZsYXRlPWksbi5pbmZsYXRlPXMsbi5pbmZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxzKGUsdCl9LG4udW5nemlwPXN9LCJ1dGlscy9jb21tb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQxNkFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIEludDMyQXJyYXksbz0obi5hc3NpZ249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt0Lmxlbmd0aDspe3ZhciBuPXQuc2hpZnQoKTtpZihuKXtpZigib2JqZWN0IiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihuKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIHIgaW4gbiluLmhhc093blByb3BlcnR5KHIpJiYoZVtyXT1uW3JdKX19cmV0dXJuIGV9LG4uc2hyaW5rQnVmPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGghPT10KXtpZihlLnN1YmFycmF5KXJldHVybiBlLnN1YmFycmF5KDAsdCk7ZS5sZW5ndGg9dH1yZXR1cm4gZX0se2FycmF5U2V0OmZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYodC5zdWJhcnJheSYmZS5zdWJhcnJheSllLnNldCh0LnN1YmFycmF5KG4sbityKSxvKTtlbHNlIGZvcih2YXIgYT0wO2E8cjthKyspZVtvK2FdPXRbbithXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLG89MCxhPTAsaT1lLmxlbmd0aDthPGk7YSsrKW8rPWVbYV0ubGVuZ3RoO2ZvcihyPW5ldyBVaW50OEFycmF5KG8pLGE9dD0wLGk9ZS5sZW5ndGg7YTxpO2ErKyluPWVbYV0sci5zZXQobix0KSx0Kz1uLmxlbmd0aDtyZXR1cm4gcn19KSxhPXthcnJheVNldDpmdW5jdGlvbihlLHQsbixyLG8pe2Zvcih2YXIgYT0wO2E8cjthKyspZVtvK2FdPXRbbithXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZSl9fTtuLnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KG4uQnVmOD1VaW50OEFycmF5LG4uQnVmMTY9VWludDE2QXJyYXksbi5CdWYzMj1JbnQzMkFycmF5LG4uYXNzaWduKG4sbykpOihuLkJ1Zjg9QXJyYXksbi5CdWYxNj1BcnJheSxuLkJ1ZjMyPUFycmF5LG4uYXNzaWduKG4sYSkpfSxuLnNldFR5cGVkKHIpfSwidXRpbHMvc3RyaW5ncy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgbD1lKCIuL2NvbW1vbiIpLG89ITAsYT0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2goZSl7bz0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaChlKXthPSExfWZvcih2YXIgZD1uZXcgbC5CdWY4KDI1Nikscj0wO3I8MjU2O3IrKylkW3JdPTI1Mjw9cj82OjI0ODw9cj81OjI0MDw9cj80OjIyNDw9cj8zOjE5Mjw9cj8yOjE7ZnVuY3Rpb24gdShlLHQpe2lmKHQ8NjU1MzcmJihlLnN1YmFycmF5JiZhfHwhZS5zdWJhcnJheSYmbykpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxsLnNocmlua0J1ZihlLHQpKTtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbn1kWzI1NF09ZFsyNTRdPTEsbi5zdHJpbmcyYnVmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsbyxhPWUubGVuZ3RoLGk9MCxzPTA7czxhO3MrKyk1NTI5Nj09KDY0NTEyJihuPWUuY2hhckNvZGVBdChzKSkpJiZzKzE8YSYmNTYzMjA9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQocysxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxzKyspLGkrPW48MTI4PzE6bjwyMDQ4PzI6bjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IGwuQnVmOChpKSxzPW89MDtvPGk7cysrKTU1Mjk2PT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KHMpKSkmJnMrMTxhJiY1NjMyMD09KDY0NTEyJihyPWUuY2hhckNvZGVBdChzKzEpKSkmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLHMrKyksbjwxMjg/dFtvKytdPW46KG48MjA0OD90W28rK109MTkyfG4+Pj42OihuPDY1NTM2P3RbbysrXT0yMjR8bj4+PjEyOih0W28rK109MjQwfG4+Pj4xOCx0W28rK109MTI4fG4+Pj4xMiY2MyksdFtvKytdPTEyOHxuPj4+NiY2MyksdFtvKytdPTEyOHw2MyZuKTtyZXR1cm4gdH0sbi5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsZS5sZW5ndGgpfSxuLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBsLkJ1ZjgoZS5sZW5ndGgpLG49MCxyPXQubGVuZ3RoO248cjtuKyspdFtuXT1lLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9LG4uYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG89dHx8ZS5sZW5ndGgsYT1uZXcgQXJyYXkoMipvKSxpPTAscz0wO3M8bzspaWYoKG49ZVtzKytdKTwxMjgpYVtpKytdPW47ZWxzZSBpZig0PChyPWRbbl0pKWFbaSsrXT02NTUzMyxzKz1yLTE7ZWxzZXtmb3IobiY9Mj09PXI/MzE6Mz09PXI/MTU6NzsxPHImJnM8bzspbj1uPDw2fDYzJmVbcysrXSxyLS07MTxyP2FbaSsrXT02NTUzMzpuPDY1NTM2P2FbaSsrXT1uOihuLT02NTUzNixhW2krK109NTUyOTZ8bj4+MTAmMTAyMyxhW2krK109NTYzMjB8MTAyMyZuKX1yZXR1cm4gdShhLGkpfSxuLnV0Zjhib3JkZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49KHQ9KHQ9dHx8ZS5sZW5ndGgpPmUubGVuZ3RoP2UubGVuZ3RoOnQpLTE7MDw9biYmMTI4PT0oMTkyJmVbbl0pOyluLS07cmV0dXJuIShuPDApJiYwIT09biYmbitkW2Vbbl1dPnQ/bjp0fX0sInpsaWIvaW5mbGF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgTD1lKCIuLi91dGlscy9jb21tb24iKSxPPWUoIi4vYWRsZXIzMiIpLEk9ZSgiLi9jcmMzMiIpLEE9ZSgiLi9pbmZmYXN0IiksUD1lKCIuL2luZnRyZWVzIiksRD0wLE49LTIsej0xLHI9ODUyLG89NTkyO2Z1bmN0aW9uIEYoZSl7cmV0dXJuKGU+Pj4yNCYyNTUpKyhlPj4+OCY2NTI4MCkrKCg2NTI4MCZlKTw8OCkrKCgyNTUmZSk8PDI0KX1mdW5jdGlvbiBhKCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBMLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBMLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIGkoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KHQ9ZS5zdGF0ZSxlLnRvdGFsX2luPWUudG90YWxfb3V0PXQudG90YWw9MCxlLm1zZz0iIix0LndyYXAmJihlLmFkbGVyPTEmdC53cmFwKSx0Lm1vZGU9eix0Lmxhc3Q9MCx0LmhhdmVkaWN0PTAsdC5kbWF4PTMyNzY4LHQuaGVhZD1udWxsLHQuaG9sZD0wLHQuYml0cz0wLHQubGVuY29kZT10LmxlbmR5bj1uZXcgTC5CdWYzMihyKSx0LmRpc3Rjb2RlPXQuZGlzdGR5bj1uZXcgTC5CdWYzMihvKSx0LnNhbmU9MSx0LmJhY2s9LTEsRCk6Tn1mdW5jdGlvbiBzKGUpe3ZhciB0O3JldHVybiBlJiZlLnN0YXRlPygodD1lLnN0YXRlKS53c2l6ZT0wLHQud2hhdmU9MCx0LnduZXh0PTAsaShlKSk6Tn1mdW5jdGlvbiBsKGUsdCl7dmFyIG4scjtyZXR1cm4hZXx8IWUuc3RhdGV8fChyPWUuc3RhdGUsdDwwPyhuPTAsdD0tdCk6KG49MSsodD4+NCksdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8MTU8dCkpP046KG51bGwhPT1yLndpbmRvdyYmci53Yml0cyE9PXQmJihyLndpbmRvdz1udWxsKSxyLndyYXA9bixyLndiaXRzPXQscyhlKSl9ZnVuY3Rpb24gZChlLHQpe3ZhciBuO3JldHVybiBlPyhuPW5ldyBhLChlLnN0YXRlPW4pLndpbmRvdz1udWxsLChuPWwoZSx0KSkhPT1EJiYoZS5zdGF0ZT1udWxsKSxuKTpOfXZhciBaLGosSD0hMDtmdW5jdGlvbiBNKGUsdCxuLHIpe3ZhciBvO3JldHVybiBudWxsPT09KGU9ZS5zdGF0ZSkud2luZG93JiYoZS53c2l6ZT0xPDxlLndiaXRzLGUud25leHQ9MCxlLndoYXZlPTAsZS53aW5kb3c9bmV3IEwuQnVmOChlLndzaXplKSkscj49ZS53c2l6ZT8oTC5hcnJheVNldChlLndpbmRvdyx0LG4tZS53c2l6ZSxlLndzaXplLDApLGUud25leHQ9MCxlLndoYXZlPWUud3NpemUpOihyPChvPWUud3NpemUtZS53bmV4dCkmJihvPXIpLEwuYXJyYXlTZXQoZS53aW5kb3csdCxuLXIsbyxlLnduZXh0KSwoci09byk/KEwuYXJyYXlTZXQoZS53aW5kb3csdCxuLXIsciwwKSxlLnduZXh0PXIsZS53aGF2ZT1lLndzaXplKTooZS53bmV4dCs9byxlLnduZXh0PT09ZS53c2l6ZSYmKGUud25leHQ9MCksZS53aGF2ZTxlLndzaXplJiYoZS53aGF2ZSs9bykpKSwwfW4uaW5mbGF0ZVJlc2V0PXMsbi5pbmZsYXRlUmVzZXQyPWwsbi5pbmZsYXRlUmVzZXRLZWVwPWksbi5pbmZsYXRlSW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gZChlLDE1KX0sbi5pbmZsYXRlSW5pdDI9ZCxuLmluZmxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8sYSxpLHMsbCxkLHUsYyxmLGgsYixtLHAsZyx3LHYseSxrLHgsXyxTLEUsQz0wLEI9bmV3IEwuQnVmOCg0KSxVPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighZXx8IWUuc3RhdGV8fCFlLm91dHB1dHx8IWUuaW5wdXQmJjAhPT1lLmF2YWlsX2luKXJldHVybiBOOzEyPT09KG49ZS5zdGF0ZSkubW9kZSYmKG4ubW9kZT0xMyksaT1lLm5leHRfb3V0LG89ZS5vdXRwdXQsbD1lLmF2YWlsX291dCxhPWUubmV4dF9pbixyPWUuaW5wdXQscz1lLmF2YWlsX2luLGQ9bi5ob2xkLHU9bi5iaXRzLGM9cyxmPWwsXz1EO2U6Zm9yKDs7KXN3aXRjaChuLm1vZGUpe2Nhc2UgejppZigwPT09bi53cmFwKW4ubW9kZT0xMztlbHNle2Zvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKDImbi53cmFwJiYzNTYxNT09PWQpQltuLmNoZWNrPTBdPTI1NSZkLEJbMV09ZD4+PjgmMjU1LG4uY2hlY2s9SShuLmNoZWNrLEIsMiwwKSx1PWQ9MCxuLm1vZGU9MjtlbHNlIGlmKG4uZmxhZ3M9MCxuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksISgxJm4ud3JhcCl8fCgoKDI1NSZkKTw8OCkrKGQ+PjgpKSUzMSllLm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPTMwO2Vsc2UgaWYoOCE9KDE1JmQpKWUubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPTMwO2Vsc2V7aWYodS09NCx4PTgrKDE1JihkPj4+PTQpKSwwPT09bi53Yml0cyluLndiaXRzPXg7ZWxzZSBpZih4Pm4ud2JpdHMpe2UubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9MzA7YnJlYWt9bi5kbWF4PTE8PHgsZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPTUxMiZkPzEwOjEyLHU9ZD0wfX1icmVhaztjYXNlIDI6Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9aWYobi5mbGFncz1kLDghPSgyNTUmbi5mbGFncykpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0Jm4uZmxhZ3Mpe2UubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT0zMDticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1kPj44JjEpLDUxMiZuLmZsYWdzJiYoQlswXT0yNTUmZCxCWzFdPWQ+Pj44JjI1NSxuLmNoZWNrPUkobi5jaGVjayxCLDIsMCkpLHU9ZD0wLG4ubW9kZT0zO2Nhc2UgMzpmb3IoO3U8MzI7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1kKSw1MTImbi5mbGFncyYmKEJbMF09MjU1JmQsQlsxXT1kPj4+OCYyNTUsQlsyXT1kPj4+MTYmMjU1LEJbM109ZD4+PjI0JjI1NSxuLmNoZWNrPUkobi5jaGVjayxCLDQsMCkpLHU9ZD0wLG4ubW9kZT00O2Nhc2UgNDpmb3IoO3U8MTY7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPTI1NSZkLG4uaGVhZC5vcz1kPj44KSw1MTImbi5mbGFncyYmKEJbMF09MjU1JmQsQlsxXT1kPj4+OCYyNTUsbi5jaGVjaz1JKG4uY2hlY2ssQiwyLDApKSx1PWQ9MCxuLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZuLmZsYWdzKXtmb3IoO3U8MTY7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1uLmxlbmd0aD1kLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49ZCksNTEyJm4uZmxhZ3MmJihCWzBdPTI1NSZkLEJbMV09ZD4+PjgmMjU1LG4uY2hlY2s9SShuLmNoZWNrLEIsMiwwKSksdT1kPTB9ZWxzZSBuLmhlYWQmJihuLmhlYWQuZXh0cmE9bnVsbCk7bi5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmbi5mbGFncyYmKChoPXM8KGg9bi5sZW5ndGgpP3M6aCkmJihuLmhlYWQmJih4PW4uaGVhZC5leHRyYV9sZW4tbi5sZW5ndGgsbi5oZWFkLmV4dHJhfHwobi5oZWFkLmV4dHJhPW5ldyBBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksTC5hcnJheVNldChuLmhlYWQuZXh0cmEscixhLGgseCkpLDUxMiZuLmZsYWdzJiYobi5jaGVjaz1JKG4uY2hlY2sscixoLGEpKSxzLT1oLGErPWgsbi5sZW5ndGgtPWgpLG4ubGVuZ3RoKSlicmVhayBlO24ubGVuZ3RoPTAsbi5tb2RlPTc7Y2FzZSA3OmlmKDIwNDgmbi5mbGFncyl7aWYoMD09PXMpYnJlYWsgZTtmb3IoaD0wO3g9clthK2grK10sbi5oZWFkJiZ4JiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpKSx4JiZoPHM7KTtpZig1MTImbi5mbGFncyYmKG4uY2hlY2s9SShuLmNoZWNrLHIsaCxhKSkscy09aCxhKz1oLHgpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmbi5mbGFncyl7aWYoMD09PXMpYnJlYWsgZTtmb3IoaD0wO3g9clthK2grK10sbi5oZWFkJiZ4JiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpKSx4JiZoPHM7KTtpZig1MTImbi5mbGFncyYmKG4uY2hlY2s9SShuLmNoZWNrLHIsaCxhKSkscy09aCxhKz1oLHgpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT05O2Nhc2UgOTppZig1MTImbi5mbGFncyl7Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9aWYoZCE9PSg2NTUzNSZuLmNoZWNrKSl7ZS5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLG4ubW9kZT0zMDticmVha311PWQ9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7dTwzMjspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWUuYWRsZXI9bi5jaGVjaz1GKGQpLHU9ZD0wLG4ubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1uLmhhdmVkaWN0KXJldHVybiBlLm5leHRfb3V0PWksZS5hdmFpbF9vdXQ9bCxlLm5leHRfaW49YSxlLmF2YWlsX2luPXMsbi5ob2xkPWQsbi5iaXRzPXUsMjtlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9MTI7Y2FzZSAxMjppZig1PT09dHx8Nj09PXQpYnJlYWsgZTtjYXNlIDEzOmlmKG4ubGFzdClkPj4+PTcmdSx1LT03JnUsbi5tb2RlPTI3O2Vsc2V7Zm9yKDt1PDM7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1zd2l0Y2gobi5sYXN0PTEmZCwtLXUsMyYoZD4+Pj0xKSl7Y2FzZSAwOm4ubW9kZT0xNDticmVhaztjYXNlIDE6dmFyIFQsVD1SPXZvaWQgMCxSPW47aWYoSCl7Zm9yKFo9bmV3IEwuQnVmMzIoNTEyKSxqPW5ldyBMLkJ1ZjMyKDMyKSxUPTA7VDwxNDQ7KVIubGVuc1tUKytdPTg7Zm9yKDtUPDI1NjspUi5sZW5zW1QrK109OTtmb3IoO1Q8MjgwOylSLmxlbnNbVCsrXT03O2Zvcig7VDwyODg7KVIubGVuc1tUKytdPTg7Zm9yKFAoMSxSLmxlbnMsMCwyODgsWiwwLFIud29yayx7Yml0czo5fSksVD0wO1Q8MzI7KVIubGVuc1tUKytdPTU7UCgyLFIubGVucywwLDMyLGosMCxSLndvcmsse2JpdHM6NX0pLEg9ITF9aWYoUi5sZW5jb2RlPVosUi5sZW5iaXRzPTksUi5kaXN0Y29kZT1qLFIuZGlzdGJpdHM9NSxuLm1vZGU9MjAsNiE9PXQpYnJlYWs7ZD4+Pj0yLHUtPTI7YnJlYWsgZTtjYXNlIDI6bi5tb2RlPTE3O2JyZWFrO2Nhc2UgMzplLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9MzB9ZD4+Pj0yLHUtPTJ9YnJlYWs7Y2FzZSAxNDpmb3IoZD4+Pj03JnUsdS09NyZ1O3U8MzI7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1pZigoNjU1MzUmZCkhPShkPj4+MTZeNjU1MzUpKXtlLm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsbi5tb2RlPTMwO2JyZWFrfWlmKG4ubGVuZ3RoPTY1NTM1JmQsdT1kPTAsbi5tb2RlPTE1LDY9PT10KWJyZWFrIGU7Y2FzZSAxNTpuLm1vZGU9MTY7Y2FzZSAxNjppZihoPW4ubGVuZ3RoKXtpZigwPT09KGg9bDwoaD1zPGg/czpoKT9sOmgpKWJyZWFrIGU7TC5hcnJheVNldChvLHIsYSxoLGkpLHMtPWgsYSs9aCxsLT1oLGkrPWgsbi5sZW5ndGgtPWh9ZWxzZSBuLm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO3U8MTQ7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1pZihuLm5sZW49MjU3KygzMSZkKSxkPj4+PTUsdS09NSxuLm5kaXN0PTErKDMxJmQpLGQ+Pj49NSx1LT01LG4ubmNvZGU9NCsoMTUmZCksZD4+Pj00LHUtPTQsMjg2PG4ubmxlbnx8MzA8bi5uZGlzdCl7ZS5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9MzA7YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7dTwzOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9bi5sZW5zW1Vbbi5oYXZlKytdXT03JmQsZD4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tVW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsUz17Yml0czpuLmxlbmJpdHN9LF89UCgwLG4ubGVucywwLDE5LG4ubGVuY29kZSwwLG4ud29yayxTKSxuLmxlbmJpdHM9Uy5iaXRzLF8pe2UubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLG4ubW9kZT0zMDticmVha31uLmhhdmU9MCxuLm1vZGU9MTk7Y2FzZSAxOTpmb3IoO24uaGF2ZTxuLm5sZW4rbi5uZGlzdDspe2Zvcig7Zz0oQz1uLmxlbmNvZGVbZCYoMTw8bi5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdz02NTUzNSZDLCEoKHA9Qz4+PjI0KTw9dSk7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1pZih3PDE2KWQ+Pj49cCx1LT1wLG4ubGVuc1tuLmhhdmUrK109dztlbHNle2lmKDE2PT09dyl7Zm9yKEU9cCsyO3U8RTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKGQ+Pj49cCx1LT1wLDA9PT1uLmhhdmUpe2UubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9MzA7YnJlYWt9eD1uLmxlbnNbbi5oYXZlLTFdLGg9MysoMyZkKSxkPj4+PTIsdS09Mn1lbHNlIGlmKDE3PT09dyl7Zm9yKEU9cCszO3U8RTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fXg9MCxoPTMrKDcmKGQ+Pj49cCkpLGQ+Pj49Myx1PXUtcC0zfWVsc2V7Zm9yKEU9cCs3O3U8RTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fXg9MCxoPTExKygxMjcmKGQ+Pj49cCkpLGQ+Pj49Nyx1PXUtcC03fWlmKG4uaGF2ZStoPm4ubmxlbituLm5kaXN0KXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPTMwO2JyZWFrfWZvcig7aC0tOyluLmxlbnNbbi5oYXZlKytdPXh9fWlmKDMwPT09bi5tb2RlKWJyZWFrO2lmKDA9PT1uLmxlbnNbMjU2XSl7ZS5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPTMwO2JyZWFrfWlmKG4ubGVuYml0cz05LFM9e2JpdHM6bi5sZW5iaXRzfSxfPVAoMSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLFMpLG4ubGVuYml0cz1TLmJpdHMsXyl7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPTMwO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixTPXtiaXRzOm4uZGlzdGJpdHN9LF89UCgyLG4ubGVucyxuLm5sZW4sbi5uZGlzdCxuLmRpc3Rjb2RlLDAsbi53b3JrLFMpLG4uZGlzdGJpdHM9Uy5iaXRzLF8pe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLG4ubW9kZT0zMDticmVha31pZihuLm1vZGU9MjAsNj09PXQpYnJlYWsgZTtjYXNlIDIwOm4ubW9kZT0yMTtjYXNlIDIxOmlmKDY8PXMmJjI1ODw9bCl7ZS5uZXh0X291dD1pLGUuYXZhaWxfb3V0PWwsZS5uZXh0X2luPWEsZS5hdmFpbF9pbj1zLG4uaG9sZD1kLG4uYml0cz11LEEoZSxmKSxpPWUubmV4dF9vdXQsbz1lLm91dHB1dCxsPWUuYXZhaWxfb3V0LGE9ZS5uZXh0X2luLHI9ZS5pbnB1dCxzPWUuYXZhaWxfaW4sZD1uLmhvbGQsdT1uLmJpdHMsMTI9PT1uLm1vZGUmJihuLmJhY2s9LTEpO2JyZWFrfWZvcihuLmJhY2s9MDtnPShDPW4ubGVuY29kZVtkJigxPDxuLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx3PTY1NTM1JkMsISgocD1DPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKGcmJjA9PSgyNDAmZykpe2Zvcih2PXAseT1nLGs9dztnPShDPW4ubGVuY29kZVtrKygoZCYoMTw8dit5KS0xKT4+dildKT4+PjE2JjI1NSx3PTY1NTM1JkMsISh2KyhwPUM+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9ZD4+Pj12LHUtPXYsbi5iYWNrKz12fWlmKGQ+Pj49cCx1LT1wLG4uYmFjays9cCxuLmxlbmd0aD13LDA9PT1nKXtuLm1vZGU9MjY7YnJlYWt9aWYoMzImZyl7bi5iYWNrPS0xLG4ubW9kZT0xMjticmVha31pZig2NCZnKXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9MzA7YnJlYWt9bi5leHRyYT0xNSZnLG4ubW9kZT0yMjtjYXNlIDIyOmlmKG4uZXh0cmEpe2ZvcihFPW4uZXh0cmE7dTxFOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9bi5sZW5ndGgrPWQmKDE8PG4uZXh0cmEpLTEsZD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT0yMztjYXNlIDIzOmZvcig7Zz0oQz1uLmRpc3Rjb2RlW2QmKDE8PG4uZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx3PTY1NTM1JkMsISgocD1DPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKDA9PSgyNDAmZykpe2Zvcih2PXAseT1nLGs9dztnPShDPW4uZGlzdGNvZGVbaysoKGQmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsdz02NTUzNSZDLCEodisocD1DPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWQ+Pj49dix1LT12LG4uYmFjays9dn1pZihkPj4+PXAsdS09cCxuLmJhY2srPXAsNjQmZyl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsbi5tb2RlPTMwO2JyZWFrfW4ub2Zmc2V0PXcsbi5leHRyYT0xNSZnLG4ubW9kZT0yNDtjYXNlIDI0OmlmKG4uZXh0cmEpe2ZvcihFPW4uZXh0cmE7dTxFOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9bi5vZmZzZXQrPWQmKDE8PG4uZXh0cmEpLTEsZD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfWlmKG4ub2Zmc2V0Pm4uZG1heCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9MzA7YnJlYWt9bi5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PWwpYnJlYWsgZTtpZihuLm9mZnNldD4oaD1mLWwpKXtpZigoaD1uLm9mZnNldC1oKT5uLndoYXZlJiZuLnNhbmUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPTMwO2JyZWFrfWI9aD5uLnduZXh0PyhoLT1uLnduZXh0LG4ud3NpemUtaCk6bi53bmV4dC1oLGg+bi5sZW5ndGgmJihoPW4ubGVuZ3RoKSxtPW4ud2luZG93fWVsc2UgbT1vLGI9aS1uLm9mZnNldCxoPW4ubGVuZ3RoO2ZvcihsLT1oPWw8aD9sOmgsbi5sZW5ndGgtPWg7b1tpKytdPW1bYisrXSwtLWg7KTswPT09bi5sZW5ndGgmJihuLm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWwpYnJlYWsgZTtvW2krK109bi5sZW5ndGgsbC0tLG4ubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKG4ud3JhcCl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZHw9clthKytdPDx1LHUrPTh9aWYoZi09bCxlLnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLGYmJihlLmFkbGVyPW4uY2hlY2s9KG4uZmxhZ3M/STpPKShuLmNoZWNrLG8sZixpLWYpKSxmPWwsKG4uZmxhZ3M/ZDpGKGQpKSE9PW4uY2hlY2spe2UubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsbi5tb2RlPTMwO2JyZWFrfXU9ZD0wfW4ubW9kZT0yODtjYXNlIDI4OmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9aWYoZCE9PSg0Mjk0OTY3Mjk1Jm4udG90YWwpKXtlLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPTMwO2JyZWFrfXU9ZD0wfW4ubW9kZT0yOTtjYXNlIDI5Ol89MTticmVhayBlO2Nhc2UgMzA6Xz0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gTn1yZXR1cm4gZS5uZXh0X291dD1pLGUuYXZhaWxfb3V0PWwsZS5uZXh0X2luPWEsZS5hdmFpbF9pbj1zLG4uaG9sZD1kLG4uYml0cz11LChuLndzaXplfHxmIT09ZS5hdmFpbF9vdXQmJm4ubW9kZTwzMCYmKG4ubW9kZTwyN3x8NCE9PXQpKSYmTShlLGUub3V0cHV0LGUubmV4dF9vdXQsZi1lLmF2YWlsX291dCk/KG4ubW9kZT0zMSwtNCk6KGMtPWUuYXZhaWxfaW4sZi09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9YyxlLnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLG4ud3JhcCYmZiYmKGUuYWRsZXI9bi5jaGVjaz0obi5mbGFncz9JOk8pKG4uY2hlY2ssbyxmLGUubmV4dF9vdXQtZikpLGUuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKygxMj09PW4ubW9kZT8xMjg6MCkrKDIwPT09bi5tb2RlfHwxNT09PW4ubW9kZT8yNTY6MCksKDA9PWMmJjA9PT1mfHw0PT09dCkmJl89PT1EPy01Ol8pfSxuLmluZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KCh0PWUuc3RhdGUpLndpbmRvdyYmKHQud2luZG93PW51bGwpLGUuc3RhdGU9bnVsbCxEKTpOfSxuLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5zdGF0ZSYmMCE9KDImKGU9ZS5zdGF0ZSkud3JhcCk/KChlLmhlYWQ9dCkuZG9uZT0hMSxEKTpOfSxuLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10Lmxlbmd0aDtyZXR1cm4hZXx8IWUuc3RhdGV8fDAhPT0obj1lLnN0YXRlKS53cmFwJiYxMSE9PW4ubW9kZT9OOjExPT09bi5tb2RlJiZPKDEsdCxyLDApIT09bi5jaGVjaz8tMzpNKGUsdCxyLHIpPyhuLm1vZGU9MzEsLTQpOihuLmhhdmVkaWN0PTEsRCl9LG4uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSwiemxpYi9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSwiemxpYi9tZXNzYWdlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0sInpsaWIvenN0cmVhbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0sInpsaWIvZ3poZWFkZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSwiemxpYi9hZGxlcjMyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89NjU1MzUmZXwwLGE9ZT4+PjE2JjY1NTM1fDAsaT0wOzAhPT1uOyl7Zm9yKG4tPWk9MmUzPG4/MmUzOm47YT1hKyhvPW8rdFtyKytdfDApfDAsLS1pOyk7byU9NjU1MjEsYSU9NjU1MjF9cmV0dXJuIG98YTw8MTZ8MH19LCJ6bGliL2NyYzMyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PDI1Njt0Kyspe2Zvcih2YXIgbj10LHI9MDtyPDg7cisrKW49MSZuPzM5ODgyOTIzODRebj4+PjE6bj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1zLGE9cituO2VePS0xO2Zvcih2YXIgaT1yO2k8YTtpKyspZT1lPj4+OF5vWzI1NSYoZV50W2ldKV07cmV0dXJuLTFeZX19LCJ6bGliL2luZmZhc3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGEsaSxzLGw9ZS5zdGF0ZSxkPWUubmV4dF9pbix1PWUuaW5wdXQsYz1kKyhlLmF2YWlsX2luLTUpLGY9ZS5uZXh0X291dCxoPWUub3V0cHV0LGI9Zi0odC1lLmF2YWlsX291dCksbT1mKyhlLmF2YWlsX291dC0yNTcpLHA9bC5kbWF4LGc9bC53c2l6ZSx3PWwud2hhdmUsdj1sLnduZXh0LHk9bC53aW5kb3csaz1sLmhvbGQseD1sLmJpdHMsXz1sLmxlbmNvZGUsUz1sLmRpc3Rjb2RlLEU9KDE8PGwubGVuYml0cyktMSxDPSgxPDxsLmRpc3RiaXRzKS0xO2U6ZG97Zm9yKHg8MTUmJihrKz11W2QrK108PHgseCs9OCxrKz11W2QrK108PHgseCs9OCksbj1fW2smRV07Oyl7aWYoaz4+Pj1yPW4+Pj4yNCx4LT1yLDA9PShyPW4+Pj4xNiYyNTUpKWhbZisrXT02NTUzNSZuO2Vsc2V7aWYoISgxNiZyKSl7aWYoMD09KDY0JnIpKXtuPV9bKDY1NTM1Jm4pKyhrJigxPDxyKS0xKV07Y29udGludWV9aWYoMzImcil7bC5tb2RlPTEyO2JyZWFrIGV9ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsbC5tb2RlPTMwO2JyZWFrIGV9Zm9yKG89NjU1MzUmbiwociY9MTUpJiYoeDxyJiYoays9dVtkKytdPDx4LHgrPTgpLG8rPWsmKDE8PHIpLTEsaz4+Pj1yLHgtPXIpLHg8MTUmJihrKz11W2QrK108PHgseCs9OCxrKz11W2QrK108PHgseCs9OCksbj1TW2smQ107Oyl7aWYoaz4+Pj1yPW4+Pj4yNCx4LT1yLCEoMTYmKHI9bj4+PjE2JjI1NSkpKXtpZigwPT0oNjQmcikpe249U1soNjU1MzUmbikrKGsmKDE8PHIpLTEpXTtjb250aW51ZX1lLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixsLm1vZGU9MzA7YnJlYWsgZX1pZihhPTY1NTM1Jm4seDwociY9MTUpJiYoays9dVtkKytdPDx4LCh4Kz04KTxyJiYoays9dVtkKytdPDx4LHgrPTgpKSxwPChhKz1rJigxPDxyKS0xKSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixsLm1vZGU9MzA7YnJlYWsgZX1pZihrPj4+PXIseC09ciwocj1mLWIpPGEpe2lmKHc8KHI9YS1yKSYmbC5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGwubW9kZT0zMDticmVhayBlfWlmKHM9eSwoaT0wKT09PXYpe2lmKGkrPWctcixyPG8pe2ZvcihvLT1yO2hbZisrXT15W2krK10sLS1yOyk7aT1mLWEscz1ofX1lbHNlIGlmKHY8cil7aWYoaSs9Zyt2LXIsKHItPXYpPG8pe2ZvcihvLT1yO2hbZisrXT15W2krK10sLS1yOyk7aWYoaT0wLHY8byl7Zm9yKG8tPXI9djtoW2YrK109eVtpKytdLC0tcjspO2k9Zi1hLHM9aH19fWVsc2UgaWYoaSs9di1yLHI8byl7Zm9yKG8tPXI7aFtmKytdPXlbaSsrXSwtLXI7KTtpPWYtYSxzPWh9Zm9yKDsyPG87KWhbZisrXT1zW2krK10saFtmKytdPXNbaSsrXSxoW2YrK109c1tpKytdLG8tPTM7byYmKGhbZisrXT1zW2krK10sMTxvJiYoaFtmKytdPXNbaSsrXSkpfWVsc2V7Zm9yKGk9Zi1hO2hbZisrXT1oW2krK10saFtmKytdPWhbaSsrXSxoW2YrK109aFtpKytdLDI8KG8tPTMpOyk7byYmKGhbZisrXT1oW2krK10sMTxvJiYoaFtmKytdPWhbaSsrXSkpfWJyZWFrfX1icmVha319d2hpbGUoZDxjJiZmPG0pO2smPSgxPDwoeC09KG89eD4+Myk8PDMpKS0xLGUubmV4dF9pbj1kLT1vLGUubmV4dF9vdXQ9ZixlLmF2YWlsX2luPWQ8Yz9jLWQrNTo1LShkLWMpLGUuYXZhaWxfb3V0PWY8bT9tLWYrMjU3OjI1Ny0oZi1tKSxsLmhvbGQ9ayxsLmJpdHM9eH19LCJ6bGliL2luZnRyZWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBBPWUoIi4uL3V0aWxzL2NvbW1vbiIpLFA9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxEPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sTj1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sej1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyLG8sYSxpLHMpe2Zvcih2YXIgbCxkLHUsYyxmLGgsYixtLHAsZz1zLmJpdHMsdz0wLHY9MCx5PTAsaz0wLHg9MCxfPTAsUz0wLEU9MCxDPTAsQj0wLFU9bnVsbCxUPTAsUj1uZXcgQS5CdWYxNigxNiksTD1uZXcgQS5CdWYxNigxNiksTz1udWxsLEk9MCx3PTA7dzw9MTU7dysrKVJbd109MDtmb3Iodj0wO3Y8cjt2KyspUlt0W24rdl1dKys7Zm9yKHg9ZyxrPTE1OzE8PWsmJjA9PT1SW2tdO2stLSk7aWYoazx4JiYoeD1rKSwwPT09aylvW2ErK109MjA5NzE1MjAsb1thKytdPTIwOTcxNTIwLHMuYml0cz0xO2Vsc2V7Zm9yKHk9MTt5PGsmJjA9PT1SW3ldO3krKyk7Zm9yKHg8eSYmKHg9eSksdz1FPTE7dzw9MTU7dysrKWlmKChFPShFPDw9MSktUlt3XSk8MClyZXR1cm4tMTtpZigwPEUmJigwPT09ZXx8MSE9PWspKXJldHVybi0xO2ZvcihMWzFdPTAsdz0xO3c8MTU7dysrKUxbdysxXT1MW3ddK1Jbd107Zm9yKHY9MDt2PHI7disrKTAhPT10W24rdl0mJihpW0xbdFtuK3ZdXSsrXT12KTtpZihoPTA9PT1lPyhVPU89aSwxOSk6MT09PWU/KFU9UCxULT0yNTcsTz1ELEktPTI1NywyNTYpOihVPU4sTz16LC0xKSx3PXksZj1hLFM9dj1CPTAsdT0tMSxjPShDPTE8PChfPXgpKS0xLDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2Zvcig7Oyl7Zm9yKHA9aVt2XTxoPyhtPTAsaVt2XSk6aVt2XT5oPyhtPU9bSStpW3ZdXSxVW1QraVt2XV0pOihtPTk2LDApLGw9MTw8KGI9dy1TKSx5PWQ9MTw8XztvW2YrKEI+PlMpKyhkLT1sKV09Yjw8MjR8bTw8MTZ8cHwwLDAhPT1kOyk7Zm9yKGw9MTw8dy0xO0ImbDspbD4+PTE7aWYoQj0wIT09bD8oQiZsLTEpK2w6MCx2KyssMD09LS1SW3ddKXtpZih3PT09aylicmVhazt3PXRbbitpW3ZdXX1pZih4PHcmJihCJmMpIT09dSl7Zm9yKGYrPXksRT0xPDwoXz13LShTPTA9PT1TP3g6UykpO18rUzxrJiYhKChFLT1SW18rU10pPD0wKTspXysrLEU8PD0xO2lmKEMrPTE8PF8sMT09PWUmJjg1MjxDfHwyPT09ZSYmNTkyPEMpcmV0dXJuIDE7b1t1PUImY109eDw8MjR8Xzw8MTZ8Zi1hfDB9fTAhPT1CJiYob1tmK0JdPXctUzw8MjR8NjQ8PDE2fDApLHMuYml0cz14fXJldHVybiAwfX19O2Zvcih0IGluIG4pblt0XS5mb2xkZXI9dC5zdWJzdHJpbmcoMCx0Lmxhc3RJbmRleE9mKCIvIikrMSk7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQubWF0Y2goL15cLy8pP251bGw6ZT90Lm1hdGNoKC9eXC5cLj9cLy8pP28oZS5mb2xkZXIrdCk6YShlLHQpOm8odCk7aWYobilyZXR1cm4gbi5leHBvcnRzfHwobi5wYXJlbnQ9ZSxuKHIuYmluZChudWxsLG4pLG4sbi5leHBvcnRzPXt9KSksbi5leHBvcnRzO3Rocm93Im1vZHVsZSBub3QgZm91bmQ6ICIrdH12YXIgbz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4oZT1lLnNwbGl0KCIvIikuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIi4uIj09ZT90LnBvcCgpOiIuIj09ZXx8IiI9PWV8fHQucHVzaChlKX0pP3Quam9pbigiLyIpOm51bGwpP25bZV18fG5bZSsiLmpzIl18fG5bZSsiL2luZGV4LmpzIl06bnVsbH0sYT1mdW5jdGlvbihlLHQpe3JldHVybiBlP28oZS5mb2xkZXIrIm5vZGVfbW9kdWxlcy8iK3QpfHxhKGUucGFyZW50LHQpOm51bGx9O3JldHVybiByKG51bGwsZSl9LGRlY29tcHJlc3M6ZnVuY3Rpb24oZSl7dGhpcy5leHBvcnRzfHwodGhpcy5leHBvcnRzPXRoaXMucmVxdWlyZSgiaW5mbGF0ZS5qcyIpKTt0cnl7cmV0dXJuIHRoaXMuZXhwb3J0cy5pbmZsYXRlKGUpfWNhdGNoKGUpe319LGhhc1VuaXR5TWFya2VyOmZ1bmN0aW9uKGUpe3ZhciB0PTEwLG49IlVuaXR5V2ViIENvbXByZXNzZWQgQ29udGVudCAoZ3ppcCkiO2lmKHQ+ZS5sZW5ndGh8fDMxIT1lWzBdfHwxMzkhPWVbMV0pcmV0dXJuITE7dmFyIHI9ZVszXTtpZig0JnIpe2lmKHQrMj5lLmxlbmd0aClyZXR1cm4hMTtpZigodCs9MitlW3RdKyhlW3QrMV08PDgpKT5lLmxlbmd0aClyZXR1cm4hMX1pZig4JnIpe2Zvcig7dDxlLmxlbmd0aCYmZVt0XTspdCsrO2lmKHQrMT5lLmxlbmd0aClyZXR1cm4hMTt0Kyt9cmV0dXJuIDE2JnImJlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KHQsdCtuLmxlbmd0aCsxKSk9PW4rIlwwIn19fTtmdW5jdGlvbiBUKG4pe3gobik7dmFyIGU9Yy5jYWNoZUNvbnRyb2woY1tuXSksdD1jLmNvbXBhbnlOYW1lJiZjLnByb2R1Y3ROYW1lP2MuY2FjaGVkRmV0Y2g6Yy5mZXRjaFdpdGhQcm9ncmVzcyxyPWNbbl0scj0vZmlsZTpcL1wvLy5leGVjKHIpPyJzYW1lLW9yaWdpbiI6dm9pZCAwO3JldHVybiB0KGNbbl0se21ldGhvZDoiR0VUIixjb21wYW55TmFtZTpjLmNvbXBhbnlOYW1lLHByb2R1Y3ROYW1lOmMucHJvZHVjdE5hbWUsY29udHJvbDplLG1vZGU6cixvblByb2dyZXNzOmZ1bmN0aW9uKGUpe3gobixlKX19KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBpPWUucGFyc2VkQm9keSxzPWNbbl0sbmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXt0cnl7Zm9yKHZhciBuIGluIFUpe3ZhciByLG8sYTtpZihVW25dLmhhc1VuaXR5TWFya2VyKGkpKXJldHVybiBzJiZjb25zb2xlLmxvZygnWW91IGNhbiByZWR1Y2Ugc3RhcnR1cCB0aW1lIGlmIHlvdSBjb25maWd1cmUgeW91ciB3ZWIgc2VydmVyIHRvIGFkZCAiQ29udGVudC1FbmNvZGluZzogJytuKyciIHJlc3BvbnNlIGhlYWRlciB3aGVuIHNlcnZpbmcgIicrcysnIiBmaWxlLicpLChyPVVbbl0pLndvcmtlcnx8KG89VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbInRoaXMucmVxdWlyZSA9ICIsci5yZXF1aXJlLnRvU3RyaW5nKCksIjsgdGhpcy5kZWNvbXByZXNzID0gIixyLmRlY29tcHJlc3MudG9TdHJpbmcoKSwiOyB0aGlzLm9ubWVzc2FnZSA9ICIsZnVuY3Rpb24oZSl7ZT17aWQ6ZS5kYXRhLmlkLGRlY29tcHJlc3NlZDp0aGlzLmRlY29tcHJlc3MoZS5kYXRhLmNvbXByZXNzZWQpfTtwb3N0TWVzc2FnZShlLGUuZGVjb21wcmVzc2VkP1tlLmRlY29tcHJlc3NlZC5idWZmZXJdOltdKX0udG9TdHJpbmcoKSwiOyBwb3N0TWVzc2FnZSh7IHJlYWR5OiB0cnVlIH0pOyJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0pKSxyLndvcmtlcj1uZXcgV29ya2VyKG8pLHIud29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtlLmRhdGEucmVhZHk/VVJMLnJldm9rZU9iamVjdFVSTChvKToodGhpcy5jYWxsYmFja3NbZS5kYXRhLmlkXShlLmRhdGEuZGVjb21wcmVzc2VkKSxkZWxldGUgdGhpcy5jYWxsYmFja3NbZS5kYXRhLmlkXSl9LHIud29ya2VyLmNhbGxiYWNrcz17fSxyLndvcmtlci5uZXh0Q2FsbGJhY2tJZD0wKSxhPXIud29ya2VyLm5leHRDYWxsYmFja0lkKyssci53b3JrZXIuY2FsbGJhY2tzW2FdPWUsdm9pZCByLndvcmtlci5wb3N0TWVzc2FnZSh7aWQ6YSxjb21wcmVzc2VkOml9LFtpLmJ1ZmZlcl0pfWUoaSl9Y2F0Y2goZSl7dChlKX19KTt2YXIgaSxzfSkuY2F0Y2goZnVuY3Rpb24oZSl7dmFyIHQ9IkZhaWxlZCB0byBkb3dubG9hZCBmaWxlICIrY1tuXTsiZmlsZToiPT1sb2NhdGlvbi5wcm90b2NvbD9kKHQrIi4gTG9hZGluZyB3ZWIgcGFnZXMgdmlhIGEgZmlsZTovLyBVUkwgd2l0aG91dCBhIHdlYiBzZXJ2ZXIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuIFBsZWFzZSB1c2UgYSBsb2NhbCBkZXZlbG9wbWVudCB3ZWIgc2VydmVyIHRvIGhvc3QgVW5pdHkgY29udGVudCwgb3IgdXNlIHRoZSBVbml0eSBCdWlsZCBhbmQgUnVuIG9wdGlvbi4iLCJlcnJvciIpOmNvbnNvbGUuZXJyb3IodCl9KX1mdW5jdGlvbiBSKCl7UHJvbWlzZS5hbGwoW1QoImZyYW1ld29ya1VybCIpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZV0se3R5cGU6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSkpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLGUpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2kuc3JjPXMsaS5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHVuaXR5RnJhbWV3b3JrfHwhdW5pdHlGcmFtZXdvcmspe3ZhciBlLHQ9W1siYnIiLCJiciJdLFsiZ3oiLCJnemlwIl1dO2ZvcihlIGluIHQpe3ZhciBuLHI9dFtlXTtpZihjLmZyYW1ld29ya1VybC5lbmRzV2l0aCgiLiIrclswXSkpcmV0dXJuIG49IlVuYWJsZSB0byBwYXJzZSAiK2MuZnJhbWV3b3JrVXJsKyIhIiwiZmlsZToiPT1sb2NhdGlvbi5wcm90b2NvbD92b2lkIGQobisiIExvYWRpbmcgcHJlLWNvbXByZXNzZWQgKGJyb3RsaSBvciBnemlwKSBjb250ZW50IHZpYSBhIGZpbGU6Ly8gVVJMIHdpdGhvdXQgYSB3ZWIgc2VydmVyIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiBQbGVhc2UgdXNlIGEgbG9jYWwgZGV2ZWxvcG1lbnQgd2ViIHNlcnZlciB0byBob3N0IGNvbXByZXNzZWQgVW5pdHkgY29udGVudCwgb3IgdXNlIHRoZSBVbml0eSBCdWlsZCBhbmQgUnVuIG9wdGlvbi4iLCJlcnJvciIpOihuKz0nIFRoaXMgY2FuIGhhcHBlbiBpZiBidWlsZCBjb21wcmVzc2lvbiB3YXMgZW5hYmxlZCBidXQgd2ViIHNlcnZlciBob3N0aW5nIHRoZSBjb250ZW50IHdhcyBtaXNjb25maWd1cmVkIHRvIG5vdCBzZXJ2ZSB0aGUgZmlsZSB3aXRoIEhUVFAgUmVzcG9uc2UgSGVhZGVyICJDb250ZW50LUVuY29kaW5nOiAnK3JbMV0rJyIgcHJlc2VudC4gQ2hlY2sgYnJvd3NlciBDb25zb2xlIGFuZCBEZXZ0b29scyBOZXR3b3JrIHRhYiB0byBkZWJ1Zy4nLCJiciI9PXJbMF0mJiJodHRwOiI9PWxvY2F0aW9uLnByb3RvY29sJiYocj0tMSE9WyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKGxvY2F0aW9uLmhvc3RuYW1lKT8iIjoiTWlncmF0ZSB5b3VyIHNlcnZlciB0byB1c2UgSFRUUFMuIixuPS9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPyJVbmFibGUgdG8gcGFyc2UgIitjLmZyYW1ld29ya1VybCsnITxicj5JZiB1c2luZyBjdXN0b20gd2ViIHNlcnZlciwgdmVyaWZ5IHRoYXQgd2ViIHNlcnZlciBpcyBzZW5kaW5nIC5iciBmaWxlcyB3aXRoIEhUVFAgUmVzcG9uc2UgSGVhZGVyICJDb250ZW50LUVuY29kaW5nOiBiciIuIEJyb3RsaSBjb21wcmVzc2lvbiBtYXkgbm90IGJlIHN1cHBvcnRlZCBpbiBGaXJlZm94IG92ZXIgSFRUUCBjb25uZWN0aW9ucy4gJytyKycgU2VlIDxhIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA2NzUiPmh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA2NzU8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLic6IlVuYWJsZSB0byBwYXJzZSAiK2MuZnJhbWV3b3JrVXJsKychPGJyPklmIHVzaW5nIGN1c3RvbSB3ZWIgc2VydmVyLCB2ZXJpZnkgdGhhdCB3ZWIgc2VydmVyIGlzIHNlbmRpbmcgLmJyIGZpbGVzIHdpdGggSFRUUCBSZXNwb25zZSBIZWFkZXIgIkNvbnRlbnQtRW5jb2Rpbmc6IGJyIi4gQnJvdGxpIGNvbXByZXNzaW9uIG1heSBub3QgYmUgc3VwcG9ydGVkIG92ZXIgSFRUUCBjb25uZWN0aW9ucy4gTWlncmF0ZSB5b3VyIHNlcnZlciB0byB1c2UgSFRUUFMuJyksdm9pZCBkKG4sImVycm9yIikpfWQoIlVuYWJsZSB0byBwYXJzZSAiK2MuZnJhbWV3b3JrVXJsKyIhIFRoZSBmaWxlIGlzIGNvcnJ1cHQsIG9yIGNvbXByZXNzaW9uIHdhcyBtaXNjb25maWd1cmVkPyAoY2hlY2sgQ29udGVudC1FbmNvZGluZyBIVFRQIFJlc3BvbnNlIEhlYWRlciBvbiB3ZWIgc2VydmVyKSIsImVycm9yIil9dmFyIG89dW5pdHlGcmFtZXdvcms7dW5pdHlGcmFtZXdvcms9bnVsbCxpLm9ubG9hZD1udWxsLFVSTC5yZXZva2VPYmplY3RVUkwocyksYShvKX0saS5vbmVycm9yPWZ1bmN0aW9uKGUpe2QoIlVuYWJsZSB0byBsb2FkIGZpbGUgIitjLmZyYW1ld29ya1VybCsiISBDaGVjayB0aGF0IHRoZSBmaWxlIGV4aXN0cyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gKGFsc28gY2hlY2sgYnJvd3NlciBDb25zb2xlIGFuZCBEZXZ0b29scyBOZXR3b3JrIHRhYiB0byBkZWJ1ZykiLCJlcnJvciIpfSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGMuZGVpbml0aWFsaXplcnMucHVzaChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaSl9KX0pfSksVCgiY29kZVVybCIpXSkudGhlbihmdW5jdGlvbihlKXtjLndhc21CaW5hcnk9ZVsxXSxlWzBdKGMpfSk7dmFyIGU9VCgiZGF0YVVybCIpO2MucHJlUnVuLnB1c2goZnVuY3Rpb24oKXtjLmFkZFJ1bkRlcGVuZGVuY3koImRhdGFVcmwiKSxlLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLG49MCxyPSJVbml0eVdlYkRhdGExLjBcMCI7aWYoIVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KG4sbityLmxlbmd0aCkpPT1yKXRocm93InVua25vd24gZGF0YSBmb3JtYXQiO3ZhciBvPXQuZ2V0VWludDMyKG4rPXIubGVuZ3RoLCEwKTtmb3Iobis9NDtuPG87KXt2YXIgYT10LmdldFVpbnQzMihuLCEwKSxpPShuKz00LHQuZ2V0VWludDMyKG4sITApKSxzPShuKz00LHQuZ2V0VWludDMyKG4sITApKSxsPShuKz00LFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KG4sbitzKSkpO24rPXM7Zm9yKHZhciBkPTAsdT1sLmluZGV4T2YoIi8iLGQpKzE7MDx1O2Q9dSx1PWwuaW5kZXhPZigiLyIsZCkrMSljLkZTX2NyZWF0ZVBhdGgobC5zdWJzdHJpbmcoMCxkKSxsLnN1YnN0cmluZyhkLHUtMSksITAsITApO2MuRlNfY3JlYXRlRGF0YUZpbGUobCxudWxsLGUuc3ViYXJyYXkoYSxhK2kpLCEwLCEwLCEwKX1jLnJlbW92ZVJ1bkRlcGVuZGVuY3koImRhdGFVcmwiKX0pfSl9cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7Yy5TeXN0ZW1JbmZvLmhhc1dlYkdMP2MuU3lzdGVtSW5mby5oYXNXYXNtPygxPT1jLlN5c3RlbUluZm8uaGFzV2ViR0wmJmMucHJpbnQoJ1dhcm5pbmc6IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0ICJXZWJHTCAyIiBHcmFwaGljcyBBUEksIHN3aXRjaGluZyB0byAiV2ViR0wgMSInKSxjLnN0YXJ0dXBFcnJvckhhbmRsZXI9dCxsKDApLGMucG9zdFJ1bi5wdXNoKGZ1bmN0aW9uKCl7bCgxKSxkZWxldGUgYy5zdGFydHVwRXJyb3JIYW5kbGVyLGUoeSl9KSxSKCkpOnQoIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkFzc2VtYmx5LiIpOnQoIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkdMLiIpfSl9";
        const config = {
          dataUrl: buildUrl + "/data.unityweb",
          frameworkUrl: "data:@file/javascript;base64,ZnVuY3Rpb24gdW5pdHlGcmFtZXdvcmsoTW9kdWxlKSB7CnZhciBNb2R1bGU9dHlwZW9mIE1vZHVsZSE9PSJ1bmRlZmluZWQiP01vZHVsZTp7fTtNb2R1bGVbIlVTRVJfSlNQUkVfUExBQ0VIT0xERVIiXT0iVVNFUl9KU1BSRV9QTEFDRUhPTERFUiI7ZnVuY3Rpb24gUG9pbnRlcl9zdHJpbmdpZnkocyxsZW4pe3dhcm5PbmNlKCJUaGUgSmF2YVNjcmlwdCBmdW5jdGlvbiAnUG9pbnRlcl9zdHJpbmdpZnkocHRyVG9Tb21lQ1N0cmluZyknIGlzIG9ic29sZXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIFVuaXR5IHZlcnNpb24uIFBsZWFzZSBjYWxsICdVVEY4VG9TdHJpbmcocHRyVG9Tb21lQ1N0cmluZyknIGluc3RlYWQuIik7cmV0dXJuIFVURjhUb1N0cmluZyhzLGxlbil9TW9kdWxlWyJQb2ludGVyX3N0cmluZ2lmeSJdPVBvaW50ZXJfc3RyaW5naWZ5O3ZhciBzdGFja1RyYWNlUmVmZXJlbmNlPSIoXnxcXG4pKFxccythdFxccyt8KWpzU3RhY2tUcmFjZShcXHMrXFwofEApKFteXFxuXSspOlxcZCs6XFxkKyhcXCl8KShcXG58JCkiO3ZhciBzdGFja1RyYWNlUmVmZXJlbmNlTWF0Y2g9anNTdGFja1RyYWNlKCkubWF0Y2gobmV3IFJlZ0V4cChzdGFja1RyYWNlUmVmZXJlbmNlKSk7aWYoc3RhY2tUcmFjZVJlZmVyZW5jZU1hdGNoKU1vZHVsZS5zdGFja1RyYWNlUmVnRXhwPW5ldyBSZWdFeHAoc3RhY2tUcmFjZVJlZmVyZW5jZS5yZXBsYWNlKCIoW15cXG5dKykiLHN0YWNrVHJhY2VSZWZlcmVuY2VNYXRjaFs0XS5yZXBsYWNlKC9bXFxeJHt9W1xdKCkuKis/fF0vZywiXFwkJiIpKS5yZXBsYWNlKCJqc1N0YWNrVHJhY2UiLCJbXlxcbl0rIikpO3ZhciBhYm9ydD1mdW5jdGlvbih3aGF0KXtpZihBQk9SVClyZXR1cm47QUJPUlQ9dHJ1ZTtFWElUU1RBVFVTPTE7aWYodHlwZW9mIEVOVklST05NRU5UX0lTX1BUSFJFQUQhPT0idW5kZWZpbmVkIiYmRU5WSVJPTk1FTlRfSVNfUFRIUkVBRCljb25zb2xlLmVycm9yKCJQdGhyZWFkIGFib3J0aW5nIGF0ICIrKG5ldyBFcnJvcikuc3RhY2spO2lmKHdoYXQhPT11bmRlZmluZWQpe291dCh3aGF0KTtlcnIod2hhdCk7d2hhdD1KU09OLnN0cmluZ2lmeSh3aGF0KX1lbHNle3doYXQ9IiJ9dmFyIG1lc3NhZ2U9ImFib3J0KCIrd2hhdCsiKSBhdCAiK3N0YWNrVHJhY2UoKTtpZihNb2R1bGUuYWJvcnRIYW5kbGVyJiZNb2R1bGUuYWJvcnRIYW5kbGVyKG1lc3NhZ2UpKXJldHVybjt0aHJvdyBtZXNzYWdlfTtNb2R1bGVbIlNldEZ1bGxzY3JlZW4iXT1mdW5jdGlvbihmdWxsc2NyZWVuKXtpZih0eXBlb2YgcnVudGltZUluaXRpYWxpemVkPT09InVuZGVmaW5lZCJ8fCFydW50aW1lSW5pdGlhbGl6ZWQpe2NvbnNvbGUubG9nKCJSdW50aW1lIG5vdCBpbml0aWFsaXplZCB5ZXQuIil9ZWxzZSBpZih0eXBlb2YgSlNFdmVudHM9PT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coIlBsYXllciBub3QgbG9hZGVkIHlldC4iKX1lbHNle3ZhciB0bXA9SlNFdmVudHMuY2FuUGVyZm9ybUV2ZW50SGFuZGxlclJlcXVlc3RzO0pTRXZlbnRzLmNhblBlcmZvcm1FdmVudEhhbmRsZXJSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiAxfTtNb2R1bGUuY2NhbGwoIlNldEZ1bGxzY3JlZW4iLG51bGwsWyJudW1iZXIiXSxbZnVsbHNjcmVlbl0pO0pTRXZlbnRzLmNhblBlcmZvcm1FdmVudEhhbmRsZXJSZXF1ZXN0cz10bXB9fTtpZih0eXBlb2YgRU5WSVJPTk1FTlRfSVNfUFRIUkVBRD09PSJ1bmRlZmluZWQifHwhRU5WSVJPTk1FTlRfSVNfUFRIUkVBRCl7TW9kdWxlWyJwcmVSdW4iXS5wdXNoKGZ1bmN0aW9uKCl7dmFyIHVuaXR5RmlsZVN5c3RlbUluaXQ9TW9kdWxlWyJ1bml0eUZpbGVTeXN0ZW1Jbml0Il18fGZ1bmN0aW9uKCl7RlMubWtkaXIoIi9pZGJmcyIpO0ZTLm1vdW50KElEQkZTLHt9LCIvaWRiZnMiKTtNb2R1bGUuYWRkUnVuRGVwZW5kZW5jeSgiSlNfRmlsZVN5c3RlbV9Nb3VudCIpO0ZTLnN5bmNmcyh0cnVlLGZ1bmN0aW9uKGVycil7aWYoZXJyKWNvbnNvbGUubG9nKCJJbmRleGVkREIgaXMgbm90IGF2YWlsYWJsZS4gRGF0YSB3aWxsIG5vdCBwZXJzaXN0IGluIGNhY2hlIGFuZCBQbGF5ZXJQcmVmcyB3aWxsIG5vdCBiZSBzYXZlZC4iKTtNb2R1bGUucmVtb3ZlUnVuRGVwZW5kZW5jeSgiSlNfRmlsZVN5c3RlbV9Nb3VudCIpfSl9O3VuaXR5RmlsZVN5c3RlbUluaXQoKX0pfXZhciB2aWRlb0lucHV0RGV2aWNlcz1bXTt2YXIgdmlkZW9JbnB1dERldmljZXNFbnVtZXJhdGVkPWZhbHNlO3ZhciByZW1vdmVFbnVtZXJhdGVNZWRpYURldmljZXNSdW5EZXBlbmRlbmN5O3ZhciBlbnVtZXJhdGVXYXRjaGRvZz1udWxsO2Z1bmN0aW9uIG1hdGNoVG9PbGREZXZpY2UobmV3RGV2aWNlKXt2YXIgb2xkRGV2aWNlcz1PYmplY3Qua2V5cyh2aWRlb0lucHV0RGV2aWNlcyk7Zm9yKHZhciBpPTA7aTxvbGREZXZpY2VzLmxlbmd0aDsrK2kpe3ZhciBvbGQ9dmlkZW9JbnB1dERldmljZXNbb2xkRGV2aWNlc1tpXV07aWYob2xkLmRldmljZUlkJiZvbGQuZGV2aWNlSWQ9PW5ld0RldmljZS5kZXZpY2VJZClyZXR1cm4gb2xkfWZvcih2YXIgaT0wO2k8b2xkRGV2aWNlcy5sZW5ndGg7KytpKXt2YXIgb2xkPXZpZGVvSW5wdXREZXZpY2VzW29sZERldmljZXNbaV1dO2lmKG9sZD09bmV3RGV2aWNlKXJldHVybiBvbGR9Zm9yKHZhciBpPTA7aTxvbGREZXZpY2VzLmxlbmd0aDsrK2kpe3ZhciBvbGQ9dmlkZW9JbnB1dERldmljZXNbb2xkRGV2aWNlc1tpXV07aWYob2xkLmxhYmVsJiZvbGQubGFiZWw9PW5ld0RldmljZS5sYWJlbClyZXR1cm4gb2xkfWZvcih2YXIgaT0wO2k8b2xkRGV2aWNlcy5sZW5ndGg7KytpKXt2YXIgb2xkPXZpZGVvSW5wdXREZXZpY2VzW29sZERldmljZXNbaV1dO2lmKG9sZC5ncm91cElkJiZvbGQua2luZCYmb2xkLmdyb3VwSWQ9PW5ld0RldmljZS5ncm91cElkJiZvbGQua2luZD09bmV3RGV2aWNlLmtpbmQpcmV0dXJuIG9sZH19ZnVuY3Rpb24gYXNzaWduTmV3VmlkZW9JbnB1dElkKCl7Zm9yKHZhciBpPTA7OysraSl7aWYoIXZpZGVvSW5wdXREZXZpY2VzW2ldKXJldHVybiBpfX1mdW5jdGlvbiB1cGRhdGVWaWRlb0lucHV0RGV2aWNlcyhkZXZpY2VzKXtyZW1vdmVFbnVtZXJhdGVNZWRpYURldmljZXNSdW5EZXBlbmRlbmN5KCk7dmlkZW9JbnB1dERldmljZXM9W107dmFyIHJldGFpbmVkRGV2aWNlcz17fTt2YXIgbmV3RGV2aWNlcz1bXTtkZXZpY2VzLmZvckVhY2goZnVuY3Rpb24oZGV2aWNlKXtpZihkZXZpY2Uua2luZD09PSJ2aWRlb2lucHV0Iil7dmFyIG9sZERldmljZT1tYXRjaFRvT2xkRGV2aWNlKGRldmljZSk7aWYob2xkRGV2aWNlKXtyZXRhaW5lZERldmljZXNbb2xkRGV2aWNlLmlkXT1vbGREZXZpY2V9ZWxzZXtuZXdEZXZpY2VzLnB1c2goZGV2aWNlKX19fSk7dmlkZW9JbnB1dERldmljZXM9cmV0YWluZWREZXZpY2VzO25ld0RldmljZXMuZm9yRWFjaChmdW5jdGlvbihkZXZpY2Upe2lmKCFkZXZpY2UuaWQpe2RldmljZS5pZD1hc3NpZ25OZXdWaWRlb0lucHV0SWQoKTtkZXZpY2UubmFtZT1kZXZpY2UubGFiZWx8fCJWaWRlbyBpbnB1dCAjIisoZGV2aWNlLmlkKzEpO2RldmljZS5pc0Zyb250RmFjaW5nPWRldmljZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImZyb250Iil8fCFkZXZpY2UubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJmcm9udCIpJiYhZGV2aWNlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiYmFjayIpO3ZpZGVvSW5wdXREZXZpY2VzW2RldmljZS5pZF09ZGV2aWNlfX0pfWZ1bmN0aW9uIGVudW1lcmF0ZU1lZGlhRGV2aWNlTGlzdCgpe2lmKCF2aWRlb0lucHV0RGV2aWNlcylyZXR1cm47bmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbihkZXZpY2VzKXt1cGRhdGVWaWRlb0lucHV0RGV2aWNlcyhkZXZpY2VzKTt2aWRlb0lucHV0RGV2aWNlc0VudW1lcmF0ZWQ9dHJ1ZX0pLmNhdGNoKGZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVW5hYmxlIHRvIGVudW1lcmF0ZSBtZWRpYSBkZXZpY2VzOiAiK2UrIlxuV2ViY2FtcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIik7ZGlzYWJsZUFjY2Vzc1RvTWVkaWFEZXZpY2VzKCl9KTtpZigvRmlyZWZveC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7c2V0VGltZW91dChlbnVtZXJhdGVNZWRpYURldmljZUxpc3QsNmU0KTt3YXJuT25jZSgiQXBwbHlpbmcgd29ya2Fyb3VuZCB0byBGaXJlZm94IGJ1ZyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk3OTc3Iil9fWZ1bmN0aW9uIGRpc2FibGVBY2Nlc3NUb01lZGlhRGV2aWNlcygpe2lmKG5hdmlnYXRvci5tZWRpYURldmljZXMmJm5hdmlnYXRvci5tZWRpYURldmljZXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7bmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5yZW1vdmVFdmVudExpc3RlbmVyKCJkZXZpY2VjaGFuZ2UiLGVudW1lcmF0ZU1lZGlhRGV2aWNlTGlzdCl9dmlkZW9JbnB1dERldmljZXM9bnVsbH1Nb2R1bGVbImRpc2FibGVBY2Nlc3NUb01lZGlhRGV2aWNlcyJdPWRpc2FibGVBY2Nlc3NUb01lZGlhRGV2aWNlcztpZighbmF2aWdhdG9yLm1lZGlhRGV2aWNlcyl7Y29uc29sZS53YXJuKCJuYXZpZ2F0b3IubWVkaWFEZXZpY2VzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiBXZWJjYW0gYWNjZXNzIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4iKyhsb2NhdGlvbi5wcm90b2NvbD09Imh0dHBzOiI/IiI6IiBUcnkgaG9zdGluZyB0aGUgcGFnZSBvdmVyIEhUVFBTLCBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZGlzYWJsZSB3ZWJjYW0gYWNjZXNzIHdoZW4gaW5zZWN1cmUgSFRUUCBpcyBiZWluZyB1c2VkLiIpKTtkaXNhYmxlQWNjZXNzVG9NZWRpYURldmljZXMoKX1lbHNlIGlmKHR5cGVvZiBFTlZJUk9OTUVOVF9JU19QVEhSRUFEPT09InVuZGVmaW5lZCJ8fCFFTlZJUk9OTUVOVF9JU19QVEhSRUFEKXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0cnl7YWRkUnVuRGVwZW5kZW5jeSgiZW51bWVyYXRlTWVkaWFEZXZpY2VzIik7cmVtb3ZlRW51bWVyYXRlTWVkaWFEZXZpY2VzUnVuRGVwZW5kZW5jeT1mdW5jdGlvbigpe2lmKGVudW1lcmF0ZVdhdGNoZG9nIT09bnVsbCljbGVhclRpbWVvdXQoZW51bWVyYXRlV2F0Y2hkb2cpO3JlbW92ZVJ1bkRlcGVuZGVuY3koImVudW1lcmF0ZU1lZGlhRGV2aWNlcyIpO2lmKG5hdmlnYXRvci5tZWRpYURldmljZXMpY29uc29sZS5sb2coIm5hdmlnYXRvci5tZWRpYURldmljZXMgc3VwcG9ydCBhdmFpbGFibGUiKTtyZW1vdmVFbnVtZXJhdGVNZWRpYURldmljZXNSdW5EZXBlbmRlbmN5PWZ1bmN0aW9uKCl7fX07ZW51bWVyYXRlTWVkaWFEZXZpY2VMaXN0KCk7ZW51bWVyYXRlV2F0Y2hkb2c9c2V0VGltZW91dChyZW1vdmVFbnVtZXJhdGVNZWRpYURldmljZXNSdW5EZXBlbmRlbmN5LDFlMyk7bmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5hZGRFdmVudExpc3RlbmVyKCJkZXZpY2VjaGFuZ2UiLGVudW1lcmF0ZU1lZGlhRGV2aWNlTGlzdCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCJVbmFibGUgdG8gZW51bWVyYXRlIG1lZGlhIGRldmljZXM6ICIrZSk7ZGlzYWJsZUFjY2Vzc1RvTWVkaWFEZXZpY2VzKCl9fSwwKTtmdW5jdGlvbiBTZW5kTWVzc2FnZShnYW1lT2JqZWN0LGZ1bmMscGFyYW0pe3ZhciBmdW5jX2NzdHI9c3RyaW5nVG9OZXdVVEY4KGZ1bmMpO3ZhciBnYW1lT2JqZWN0X2NzdHI9c3RyaW5nVG9OZXdVVEY4KGdhbWVPYmplY3QpO3ZhciBwYXJhbV9jc3RyPTA7dHJ5e2lmKHBhcmFtPT09dW5kZWZpbmVkKV9TZW5kTWVzc2FnZShnYW1lT2JqZWN0X2NzdHIsZnVuY19jc3RyKTtlbHNlIGlmKHR5cGVvZiBwYXJhbT09PSJzdHJpbmciKXtwYXJhbV9jc3RyPXN0cmluZ1RvTmV3VVRGOChwYXJhbSk7X1NlbmRNZXNzYWdlU3RyaW5nKGdhbWVPYmplY3RfY3N0cixmdW5jX2NzdHIscGFyYW1fY3N0cil9ZWxzZSBpZih0eXBlb2YgcGFyYW09PT0ibnVtYmVyIilfU2VuZE1lc3NhZ2VGbG9hdChnYW1lT2JqZWN0X2NzdHIsZnVuY19jc3RyLHBhcmFtKTtlbHNlIHRocm93IiIrcGFyYW0rIiBpcyBkb2VzIG5vdCBoYXZlIGEgdHlwZSB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgU2VuZE1lc3NhZ2UuIn1maW5hbGx5e19mcmVlKHBhcmFtX2NzdHIpO19mcmVlKGdhbWVPYmplY3RfY3N0cik7X2ZyZWUoZnVuY19jc3RyKX19TW9kdWxlWyJTZW5kTWVzc2FnZSJdPVNlbmRNZXNzYWdlO3ZhciBtb2R1bGVPdmVycmlkZXM9e307dmFyIGtleTtmb3Ioa2V5IGluIE1vZHVsZSl7aWYoTW9kdWxlLmhhc093blByb3BlcnR5KGtleSkpe21vZHVsZU92ZXJyaWRlc1trZXldPU1vZHVsZVtrZXldfX12YXIgYXJndW1lbnRzXz1bXTt2YXIgdGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIjt2YXIgcXVpdF89ZnVuY3Rpb24oc3RhdHVzLHRvVGhyb3cpe3Rocm93IHRvVGhyb3d9O3ZhciBFTlZJUk9OTUVOVF9JU19XRUI9ZmFsc2U7dmFyIEVOVklST05NRU5UX0lTX1dPUktFUj1mYWxzZTt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT1mYWxzZTt2YXIgRU5WSVJPTk1FTlRfSVNfU0hFTEw9ZmFsc2U7RU5WSVJPTk1FTlRfSVNfV0VCPXR5cGVvZiB3aW5kb3c9PT0ib2JqZWN0IjtFTlZJUk9OTUVOVF9JU19XT1JLRVI9dHlwZW9mIGltcG9ydFNjcmlwdHM9PT0iZnVuY3Rpb24iO0VOVklST05NRU5UX0lTX05PREU9dHlwZW9mIHByb2Nlc3M9PT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09PSJzdHJpbmciO0VOVklST05NRU5UX0lTX1NIRUxMPSFFTlZJUk9OTUVOVF9JU19XRUImJiFFTlZJUk9OTUVOVF9JU19OT0RFJiYhRU5WSVJPTk1FTlRfSVNfV09SS0VSO3ZhciBzY3JpcHREaXJlY3Rvcnk9IiI7ZnVuY3Rpb24gbG9jYXRlRmlsZShwYXRoKXtpZihNb2R1bGVbImxvY2F0ZUZpbGUiXSl7cmV0dXJuIE1vZHVsZVsibG9jYXRlRmlsZSJdKHBhdGgsc2NyaXB0RGlyZWN0b3J5KX1yZXR1cm4gc2NyaXB0RGlyZWN0b3J5K3BhdGh9dmFyIHJlYWRfLHJlYWRBc3luYyxyZWFkQmluYXJ5LHNldFdpbmRvd1RpdGxlO3ZhciBub2RlRlM7dmFyIG5vZGVQYXRoO2lmKEVOVklST05NRU5UX0lTX05PREUpe2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7c2NyaXB0RGlyZWN0b3J5PXJlcXVpcmUoInBhdGgiKS5kaXJuYW1lKHNjcmlwdERpcmVjdG9yeSkrIi8ifWVsc2V7c2NyaXB0RGlyZWN0b3J5PV9fZGlybmFtZSsiLyJ9cmVhZF89ZnVuY3Rpb24gc2hlbGxfcmVhZChmaWxlbmFtZSxiaW5hcnkpe2lmKCFub2RlRlMpbm9kZUZTPXJlcXVpcmUoImZzIik7aWYoIW5vZGVQYXRoKW5vZGVQYXRoPXJlcXVpcmUoInBhdGgiKTtmaWxlbmFtZT1ub2RlUGF0aFsibm9ybWFsaXplIl0oZmlsZW5hbWUpO3JldHVybiBub2RlRlNbInJlYWRGaWxlU3luYyJdKGZpbGVuYW1lLGJpbmFyeT9udWxsOiJ1dGY4Iil9O3JlYWRCaW5hcnk9ZnVuY3Rpb24gcmVhZEJpbmFyeShmaWxlbmFtZSl7dmFyIHJldD1yZWFkXyhmaWxlbmFtZSx0cnVlKTtpZighcmV0LmJ1ZmZlcil7cmV0PW5ldyBVaW50OEFycmF5KHJldCl9YXNzZXJ0KHJldC5idWZmZXIpO3JldHVybiByZXR9O2lmKHByb2Nlc3NbImFyZ3YiXS5sZW5ndGg+MSl7dGhpc1Byb2dyYW09cHJvY2Vzc1siYXJndiJdWzFdLnJlcGxhY2UoL1xcL2csIi8iKX1hcmd1bWVudHNfPXByb2Nlc3NbImFyZ3YiXS5zbGljZSgyKTtpZih0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpe21vZHVsZVsiZXhwb3J0cyJdPU1vZHVsZX1wcm9jZXNzWyJvbiJdKCJ1bmNhdWdodEV4Y2VwdGlvbiIsZnVuY3Rpb24oZXgpe2lmKCEoZXggaW5zdGFuY2VvZiBFeGl0U3RhdHVzKSl7dGhyb3cgZXh9fSk7cHJvY2Vzc1sib24iXSgidW5oYW5kbGVkUmVqZWN0aW9uIixhYm9ydCk7cXVpdF89ZnVuY3Rpb24oc3RhdHVzKXtwcm9jZXNzWyJleGl0Il0oc3RhdHVzKX07TW9kdWxlWyJpbnNwZWN0Il09ZnVuY3Rpb24oKXtyZXR1cm4iW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF0ifX1lbHNlIGlmKEVOVklST05NRU5UX0lTX1NIRUxMKXtpZih0eXBlb2YgcmVhZCE9InVuZGVmaW5lZCIpe3JlYWRfPWZ1bmN0aW9uIHNoZWxsX3JlYWQoZil7cmV0dXJuIHJlYWQoZil9fXJlYWRCaW5hcnk9ZnVuY3Rpb24gcmVhZEJpbmFyeShmKXt2YXIgZGF0YTtpZih0eXBlb2YgcmVhZGJ1ZmZlcj09PSJmdW5jdGlvbiIpe3JldHVybiBuZXcgVWludDhBcnJheShyZWFkYnVmZmVyKGYpKX1kYXRhPXJlYWQoZiwiYmluYXJ5Iik7YXNzZXJ0KHR5cGVvZiBkYXRhPT09Im9iamVjdCIpO3JldHVybiBkYXRhfTtpZih0eXBlb2Ygc2NyaXB0QXJncyE9InVuZGVmaW5lZCIpe2FyZ3VtZW50c189c2NyaXB0QXJnc31lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHMhPSJ1bmRlZmluZWQiKXthcmd1bWVudHNfPWFyZ3VtZW50c31pZih0eXBlb2YgcXVpdD09PSJmdW5jdGlvbiIpe3F1aXRfPWZ1bmN0aW9uKHN0YXR1cyl7cXVpdChzdGF0dXMpfX1pZih0eXBlb2YgcHJpbnQhPT0idW5kZWZpbmVkIil7aWYodHlwZW9mIGNvbnNvbGU9PT0idW5kZWZpbmVkIiljb25zb2xlPXt9O2NvbnNvbGUubG9nPXByaW50O2NvbnNvbGUud2Fybj1jb25zb2xlLmVycm9yPXR5cGVvZiBwcmludEVyciE9PSJ1bmRlZmluZWQiP3ByaW50RXJyOnByaW50fX1lbHNlIGlmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKXtpZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe3NjcmlwdERpcmVjdG9yeT1zZWxmLmxvY2F0aW9uLmhyZWZ9ZWxzZSBpZih0eXBlb2YgZG9jdW1lbnQhPT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCl7c2NyaXB0RGlyZWN0b3J5PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjfWlmKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKCJibG9iOiIpIT09MCl7c2NyaXB0RGlyZWN0b3J5PXNjcmlwdERpcmVjdG9yeS5zdWJzdHIoMCxzY3JpcHREaXJlY3RvcnkubGFzdEluZGV4T2YoIi8iKSsxKX1lbHNle3NjcmlwdERpcmVjdG9yeT0iIn17cmVhZF89ZnVuY3Rpb24odXJsKXt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbigiR0VUIix1cmwsZmFsc2UpO3hoci5zZW5kKG51bGwpO3JldHVybiB4aHIucmVzcG9uc2VUZXh0fTtpZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe3JlYWRCaW5hcnk9ZnVuY3Rpb24odXJsKXt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbigiR0VUIix1cmwsZmFsc2UpO3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIuc2VuZChudWxsKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeGhyLnJlc3BvbnNlKX19cmVhZEFzeW5jPWZ1bmN0aW9uKHVybCxvbmxvYWQsb25lcnJvcil7dmFyIHhocj1uZXcgWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oIkdFVCIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoeGhyLnN0YXR1cz09MjAwfHx4aHIuc3RhdHVzPT0wJiZ4aHIucmVzcG9uc2Upe29ubG9hZCh4aHIucmVzcG9uc2UpO3JldHVybn1vbmVycm9yKCl9O3hoci5vbmVycm9yPW9uZXJyb3I7eGhyLnNlbmQobnVsbCl9fXNldFdpbmRvd1RpdGxlPWZ1bmN0aW9uKHRpdGxlKXtkb2N1bWVudC50aXRsZT10aXRsZX19ZWxzZXt9dmFyIG91dD1Nb2R1bGVbInByaW50Il18fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7dmFyIGVycj1Nb2R1bGVbInByaW50RXJyIl18fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihrZXkgaW4gbW9kdWxlT3ZlcnJpZGVzKXtpZihtb2R1bGVPdmVycmlkZXMuaGFzT3duUHJvcGVydHkoa2V5KSl7TW9kdWxlW2tleV09bW9kdWxlT3ZlcnJpZGVzW2tleV19fW1vZHVsZU92ZXJyaWRlcz1udWxsO2lmKE1vZHVsZVsiYXJndW1lbnRzIl0pYXJndW1lbnRzXz1Nb2R1bGVbImFyZ3VtZW50cyJdO2lmKE1vZHVsZVsidGhpc1Byb2dyYW0iXSl0aGlzUHJvZ3JhbT1Nb2R1bGVbInRoaXNQcm9ncmFtIl07aWYoTW9kdWxlWyJxdWl0Il0pcXVpdF89TW9kdWxlWyJxdWl0Il07dmFyIFNUQUNLX0FMSUdOPTE2O2Z1bmN0aW9uIGFsaWduTWVtb3J5KHNpemUsZmFjdG9yKXtpZighZmFjdG9yKWZhY3Rvcj1TVEFDS19BTElHTjtyZXR1cm4gTWF0aC5jZWlsKHNpemUvZmFjdG9yKSpmYWN0b3J9ZnVuY3Rpb24gd2Fybk9uY2UodGV4dCl7aWYoIXdhcm5PbmNlLnNob3duKXdhcm5PbmNlLnNob3duPXt9O2lmKCF3YXJuT25jZS5zaG93blt0ZXh0XSl7d2Fybk9uY2Uuc2hvd25bdGV4dF09MTtlcnIodGV4dCl9fXZhciB0ZW1wUmV0MD0wO3ZhciBzZXRUZW1wUmV0MD1mdW5jdGlvbih2YWx1ZSl7dGVtcFJldDA9dmFsdWV9O3ZhciBnZXRUZW1wUmV0MD1mdW5jdGlvbigpe3JldHVybiB0ZW1wUmV0MH07dmFyIHdhc21CaW5hcnk7aWYoTW9kdWxlWyJ3YXNtQmluYXJ5Il0pd2FzbUJpbmFyeT1Nb2R1bGVbIndhc21CaW5hcnkiXTt2YXIgbm9FeGl0UnVudGltZT1Nb2R1bGVbIm5vRXhpdFJ1bnRpbWUiXXx8dHJ1ZTtpZih0eXBlb2YgV2ViQXNzZW1ibHkhPT0ib2JqZWN0Iil7YWJvcnQoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKX12YXIgd2FzbU1lbW9yeTt2YXIgQUJPUlQ9ZmFsc2U7dmFyIEVYSVRTVEFUVVM7ZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbix0ZXh0KXtpZighY29uZGl0aW9uKXthYm9ydCgiQXNzZXJ0aW9uIGZhaWxlZDogIit0ZXh0KX19ZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpe3ZhciBmdW5jPU1vZHVsZVsiXyIraWRlbnRdO2Fzc2VydChmdW5jLCJDYW5ub3QgY2FsbCB1bmtub3duIGZ1bmN0aW9uICIraWRlbnQrIiwgbWFrZSBzdXJlIGl0IGlzIGV4cG9ydGVkIik7cmV0dXJuIGZ1bmN9ZnVuY3Rpb24gY2NhbGwoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmdzLG9wdHMpe3ZhciB0b0M9eyJzdHJpbmciOmZ1bmN0aW9uKHN0cil7dmFyIHJldD0wO2lmKHN0ciE9PW51bGwmJnN0ciE9PXVuZGVmaW5lZCYmc3RyIT09MCl7dmFyIGxlbj0oc3RyLmxlbmd0aDw8MikrMTtyZXQ9c3RhY2tBbGxvYyhsZW4pO3N0cmluZ1RvVVRGOChzdHIscmV0LGxlbil9cmV0dXJuIHJldH0sImFycmF5IjpmdW5jdGlvbihhcnIpe3ZhciByZXQ9c3RhY2tBbGxvYyhhcnIubGVuZ3RoKTt3cml0ZUFycmF5VG9NZW1vcnkoYXJyLHJldCk7cmV0dXJuIHJldH19O2Z1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpe2lmKHJldHVyblR5cGU9PT0ic3RyaW5nIilyZXR1cm4gVVRGOFRvU3RyaW5nKHJldCk7aWYocmV0dXJuVHlwZT09PSJib29sZWFuIilyZXR1cm4gQm9vbGVhbihyZXQpO3JldHVybiByZXR9dmFyIGZ1bmM9Z2V0Q0Z1bmMoaWRlbnQpO3ZhciBjQXJncz1bXTt2YXIgc3RhY2s9MDtpZihhcmdzKXtmb3IodmFyIGk9MDtpPGFyZ3MubGVuZ3RoO2krKyl7dmFyIGNvbnZlcnRlcj10b0NbYXJnVHlwZXNbaV1dO2lmKGNvbnZlcnRlcil7aWYoc3RhY2s9PT0wKXN0YWNrPXN0YWNrU2F2ZSgpO2NBcmdzW2ldPWNvbnZlcnRlcihhcmdzW2ldKX1lbHNle2NBcmdzW2ldPWFyZ3NbaV19fX12YXIgcmV0PWZ1bmMuYXBwbHkobnVsbCxjQXJncyk7cmV0PWNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpO2lmKHN0YWNrIT09MClzdGFja1Jlc3RvcmUoc3RhY2spO3JldHVybiByZXR9ZnVuY3Rpb24gY3dyYXAoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxvcHRzKXthcmdUeXBlcz1hcmdUeXBlc3x8W107dmFyIG51bWVyaWNBcmdzPWFyZ1R5cGVzLmV2ZXJ5KGZ1bmN0aW9uKHR5cGUpe3JldHVybiB0eXBlPT09Im51bWJlciJ9KTt2YXIgbnVtZXJpY1JldD1yZXR1cm5UeXBlIT09InN0cmluZyI7aWYobnVtZXJpY1JldCYmbnVtZXJpY0FyZ3MmJiFvcHRzKXtyZXR1cm4gZ2V0Q0Z1bmMoaWRlbnQpfXJldHVybiBmdW5jdGlvbigpe3JldHVybiBjY2FsbChpZGVudCxyZXR1cm5UeXBlLGFyZ1R5cGVzLGFyZ3VtZW50cyxvcHRzKX19dmFyIFVURjhEZWNvZGVyPXR5cGVvZiBUZXh0RGVjb2RlciE9PSJ1bmRlZmluZWQiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnVuZGVmaW5lZDtmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwLGlkeCxtYXhCeXRlc1RvUmVhZCl7dmFyIGVuZElkeD1pZHgrbWF4Qnl0ZXNUb1JlYWQ7dmFyIGVuZFB0cj1pZHg7d2hpbGUoaGVhcFtlbmRQdHJdJiYhKGVuZFB0cj49ZW5kSWR4KSkrK2VuZFB0cjtpZihlbmRQdHItaWR4PjE2JiZoZWFwLnN1YmFycmF5JiZVVEY4RGVjb2Rlcil7cmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwLnN1YmFycmF5KGlkeCxlbmRQdHIpKX1lbHNle3ZhciBzdHI9IiI7d2hpbGUoaWR4PGVuZFB0cil7dmFyIHUwPWhlYXBbaWR4KytdO2lmKCEodTAmMTI4KSl7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTtjb250aW51ZX12YXIgdTE9aGVhcFtpZHgrK10mNjM7aWYoKHUwJjIyNCk9PTE5Mil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCh1MCYzMSk8PDZ8dTEpO2NvbnRpbnVlfXZhciB1Mj1oZWFwW2lkeCsrXSY2MztpZigodTAmMjQwKT09MjI0KXt1MD0odTAmMTUpPDwxMnx1MTw8Nnx1Mn1lbHNle3UwPSh1MCY3KTw8MTh8dTE8PDEyfHUyPDw2fGhlYXBbaWR4KytdJjYzfWlmKHUwPDY1NTM2KXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUodTApfWVsc2V7dmFyIGNoPXUwLTY1NTM2O3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxjaD4+MTAsNTYzMjB8Y2gmMTAyMyl9fX1yZXR1cm4gc3RyfWZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsbWF4Qnl0ZXNUb1JlYWQpe3JldHVybiBwdHI/VVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LHB0cixtYXhCeXRlc1RvUmVhZCk6IiJ9ZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLGhlYXAsb3V0SWR4LG1heEJ5dGVzVG9Xcml0ZSl7aWYoIShtYXhCeXRlc1RvV3JpdGU+MCkpcmV0dXJuIDA7dmFyIHN0YXJ0SWR4PW91dElkeDt2YXIgZW5kSWR4PW91dElkeCttYXhCeXRlc1RvV3JpdGUtMTtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgdT1zdHIuY2hhckNvZGVBdChpKTtpZih1Pj01NTI5NiYmdTw9NTczNDMpe3ZhciB1MT1zdHIuY2hhckNvZGVBdCgrK2kpO3U9NjU1MzYrKCh1JjEwMjMpPDwxMCl8dTEmMTAyM31pZih1PD0xMjcpe2lmKG91dElkeD49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPXV9ZWxzZSBpZih1PD0yMDQ3KXtpZihvdXRJZHgrMT49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPTE5Mnx1Pj42O2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2UgaWYodTw9NjU1MzUpe2lmKG91dElkeCsyPj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109MjI0fHU+PjEyO2hlYXBbb3V0SWR4KytdPTEyOHx1Pj42JjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2V7aWYob3V0SWR4KzM+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT0yNDB8dT4+MTg7aGVhcFtvdXRJZHgrK109MTI4fHU+PjEyJjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1Pj42JjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfX1oZWFwW291dElkeF09MDtyZXR1cm4gb3V0SWR4LXN0YXJ0SWR4fWZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsb3V0UHRyLG1heEJ5dGVzVG9Xcml0ZSl7cmV0dXJuIHN0cmluZ1RvVVRGOEFycmF5KHN0cixIRUFQVTgsb3V0UHRyLG1heEJ5dGVzVG9Xcml0ZSl9ZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEY4KHN0cil7dmFyIGxlbj0wO2Zvcih2YXIgaT0wO2k8c3RyLmxlbmd0aDsrK2kpe3ZhciB1PXN0ci5jaGFyQ29kZUF0KGkpO2lmKHU+PTU1Mjk2JiZ1PD01NzM0Myl1PTY1NTM2KygodSYxMDIzKTw8MTApfHN0ci5jaGFyQ29kZUF0KCsraSkmMTAyMztpZih1PD0xMjcpKytsZW47ZWxzZSBpZih1PD0yMDQ3KWxlbis9MjtlbHNlIGlmKHU8PTY1NTM1KWxlbis9MztlbHNlIGxlbis9NH1yZXR1cm4gbGVufWZ1bmN0aW9uIGFsbG9jYXRlVVRGOChzdHIpe3ZhciBzaXplPWxlbmd0aEJ5dGVzVVRGOChzdHIpKzE7dmFyIHJldD1fbWFsbG9jKHNpemUpO2lmKHJldClzdHJpbmdUb1VURjhBcnJheShzdHIsSEVBUDgscmV0LHNpemUpO3JldHVybiByZXR9ZnVuY3Rpb24gYWxsb2NhdGVVVEY4T25TdGFjayhzdHIpe3ZhciBzaXplPWxlbmd0aEJ5dGVzVVRGOChzdHIpKzE7dmFyIHJldD1zdGFja0FsbG9jKHNpemUpO3N0cmluZ1RvVVRGOEFycmF5KHN0cixIRUFQOCxyZXQsc2l6ZSk7cmV0dXJuIHJldH1mdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksYnVmZmVyKXtIRUFQOC5zZXQoYXJyYXksYnVmZmVyKX1mdW5jdGlvbiB3cml0ZUFzY2lpVG9NZW1vcnkoc3RyLGJ1ZmZlcixkb250QWRkTnVsbCl7Zm9yKHZhciBpPTA7aTxzdHIubGVuZ3RoOysraSl7SEVBUDhbYnVmZmVyKys+PjBdPXN0ci5jaGFyQ29kZUF0KGkpfWlmKCFkb250QWRkTnVsbClIRUFQOFtidWZmZXI+PjBdPTB9ZnVuY3Rpb24gYWxpZ25VcCh4LG11bHRpcGxlKXtpZih4JW11bHRpcGxlPjApe3grPW11bHRpcGxlLXglbXVsdGlwbGV9cmV0dXJuIHh9dmFyIGJ1ZmZlcixIRUFQOCxIRUFQVTgsSEVBUDE2LEhFQVBVMTYsSEVBUDMyLEhFQVBVMzIsSEVBUEYzMixIRUFQRjY0O2Z1bmN0aW9uIHVwZGF0ZUdsb2JhbEJ1ZmZlckFuZFZpZXdzKGJ1Zil7YnVmZmVyPWJ1ZjtNb2R1bGVbIkhFQVA4Il09SEVBUDg9bmV3IEludDhBcnJheShidWYpO01vZHVsZVsiSEVBUDE2Il09SEVBUDE2PW5ldyBJbnQxNkFycmF5KGJ1Zik7TW9kdWxlWyJIRUFQMzIiXT1IRUFQMzI9bmV3IEludDMyQXJyYXkoYnVmKTtNb2R1bGVbIkhFQVBVOCJdPUhFQVBVOD1uZXcgVWludDhBcnJheShidWYpO01vZHVsZVsiSEVBUFUxNiJdPUhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGJ1Zik7TW9kdWxlWyJIRUFQVTMyIl09SEVBUFUzMj1uZXcgVWludDMyQXJyYXkoYnVmKTtNb2R1bGVbIkhFQVBGMzIiXT1IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYnVmKTtNb2R1bGVbIkhFQVBGNjQiXT1IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoYnVmKX12YXIgSU5JVElBTF9NRU1PUlk9TW9kdWxlWyJJTklUSUFMX01FTU9SWSJdfHwzMzU1NDQzMjt2YXIgd2FzbVRhYmxlO3ZhciBfX0FUUFJFUlVOX189W107dmFyIF9fQVRJTklUX189W107dmFyIF9fQVRNQUlOX189W107dmFyIF9fQVRFWElUX189W107dmFyIF9fQVRQT1NUUlVOX189W107dmFyIHJ1bnRpbWVJbml0aWFsaXplZD1mYWxzZTt2YXIgcnVudGltZUV4aXRlZD1mYWxzZTtmdW5jdGlvbiBwcmVSdW4oKXtpZihNb2R1bGVbInByZVJ1biJdKXtpZih0eXBlb2YgTW9kdWxlWyJwcmVSdW4iXT09ImZ1bmN0aW9uIilNb2R1bGVbInByZVJ1biJdPVtNb2R1bGVbInByZVJ1biJdXTt3aGlsZShNb2R1bGVbInByZVJ1biJdLmxlbmd0aCl7YWRkT25QcmVSdW4oTW9kdWxlWyJwcmVSdW4iXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKX1mdW5jdGlvbiBpbml0UnVudGltZSgpe3J1bnRpbWVJbml0aWFsaXplZD10cnVlO2lmKCFNb2R1bGVbIm5vRlNJbml0Il0mJiFGUy5pbml0LmluaXRpYWxpemVkKUZTLmluaXQoKTtUVFkuaW5pdCgpO1NPQ0tGUy5yb290PUZTLm1vdW50KFNPQ0tGUyx7fSxudWxsKTtQSVBFRlMucm9vdD1GUy5tb3VudChQSVBFRlMse30sbnVsbCk7Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyl9ZnVuY3Rpb24gcHJlTWFpbigpe0ZTLmlnbm9yZVBlcm1pc3Npb25zPWZhbHNlO2NhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRNQUlOX18pfWZ1bmN0aW9uIGV4aXRSdW50aW1lKCl7cnVudGltZUV4aXRlZD10cnVlfWZ1bmN0aW9uIHBvc3RSdW4oKXtpZihNb2R1bGVbInBvc3RSdW4iXSl7aWYodHlwZW9mIE1vZHVsZVsicG9zdFJ1biJdPT0iZnVuY3Rpb24iKU1vZHVsZVsicG9zdFJ1biJdPVtNb2R1bGVbInBvc3RSdW4iXV07d2hpbGUoTW9kdWxlWyJwb3N0UnVuIl0ubGVuZ3RoKXthZGRPblBvc3RSdW4oTW9kdWxlWyJwb3N0UnVuIl0uc2hpZnQoKSl9fWNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQT1NUUlVOX18pfWZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKXtfX0FUUFJFUlVOX18udW5zaGlmdChjYil9ZnVuY3Rpb24gYWRkT25Jbml0KGNiKXtfX0FUSU5JVF9fLnVuc2hpZnQoY2IpfWZ1bmN0aW9uIGFkZE9uUG9zdFJ1bihjYil7X19BVFBPU1RSVU5fXy51bnNoaWZ0KGNiKX12YXIgcnVuRGVwZW5kZW5jaWVzPTA7dmFyIHJ1bkRlcGVuZGVuY3lXYXRjaGVyPW51bGw7dmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZD1udWxsO2Z1bmN0aW9uIGdldFVuaXF1ZVJ1bkRlcGVuZGVuY3koaWQpe3JldHVybiBpZH1mdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKXtydW5EZXBlbmRlbmNpZXMrKztpZihNb2R1bGVbIm1vbml0b3JSdW5EZXBlbmRlbmNpZXMiXSl7TW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0ocnVuRGVwZW5kZW5jaWVzKX19ZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCl7cnVuRGVwZW5kZW5jaWVzLS07aWYoTW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0pe01vZHVsZVsibW9uaXRvclJ1bkRlcGVuZGVuY2llcyJdKHJ1bkRlcGVuZGVuY2llcyl9aWYocnVuRGVwZW5kZW5jaWVzPT0wKXtpZihydW5EZXBlbmRlbmN5V2F0Y2hlciE9PW51bGwpe2NsZWFySW50ZXJ2YWwocnVuRGVwZW5kZW5jeVdhdGNoZXIpO3J1bkRlcGVuZGVuY3lXYXRjaGVyPW51bGx9aWYoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKXt2YXIgY2FsbGJhY2s9ZGVwZW5kZW5jaWVzRnVsZmlsbGVkO2RlcGVuZGVuY2llc0Z1bGZpbGxlZD1udWxsO2NhbGxiYWNrKCl9fX1Nb2R1bGVbInByZWxvYWRlZEltYWdlcyJdPXt9O01vZHVsZVsicHJlbG9hZGVkQXVkaW9zIl09e307ZnVuY3Rpb24gYWJvcnQod2hhdCl7aWYoTW9kdWxlWyJvbkFib3J0Il0pe01vZHVsZVsib25BYm9ydCJdKHdoYXQpfXdoYXQrPSIiO2Vycih3aGF0KTtBQk9SVD10cnVlO0VYSVRTVEFUVVM9MTt3aGF0PSJhYm9ydCgiK3doYXQrIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgZT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHdoYXQpO3Rocm93IGV9dmFyIGRhdGFVUklQcmVmaXg9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSl7cmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZGF0YVVSSVByZWZpeCl9ZnVuY3Rpb24gaXNGaWxlVVJJKGZpbGVuYW1lKXtyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLyIpfXZhciB3YXNtQmluYXJ5RmlsZT0iYnVpbGQud2FzbSI7aWYoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpe3dhc21CaW5hcnlGaWxlPWxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpfWZ1bmN0aW9uIGdldEJpbmFyeShmaWxlKXt0cnl7aWYoZmlsZT09d2FzbUJpbmFyeUZpbGUmJndhc21CaW5hcnkpe3JldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KX1pZihyZWFkQmluYXJ5KXtyZXR1cm4gcmVhZEJpbmFyeShmaWxlKX1lbHNle3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn19Y2F0Y2goZXJyKXthYm9ydChlcnIpfX1mdW5jdGlvbiBnZXRCaW5hcnlQcm9taXNlKCl7aWYoIXdhc21CaW5hcnkmJihFTlZJUk9OTUVOVF9JU19XRUJ8fEVOVklST05NRU5UX0lTX1dPUktFUikpe2lmKHR5cGVvZiBmZXRjaD09PSJmdW5jdGlvbiImJiFpc0ZpbGVVUkkod2FzbUJpbmFyeUZpbGUpKXtyZXR1cm4gZmV0Y2god2FzbUJpbmFyeUZpbGUse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXtpZighcmVzcG9uc2VbIm9rIl0pe3Rocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrd2FzbUJpbmFyeUZpbGUrIicifXJldHVybiByZXNwb25zZVsiYXJyYXlCdWZmZXIiXSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZ2V0QmluYXJ5KHdhc21CaW5hcnlGaWxlKX0pfWVsc2V7aWYocmVhZEFzeW5jKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe3JlYWRBc3luYyh3YXNtQmluYXJ5RmlsZSxmdW5jdGlvbihyZXNwb25zZSl7cmVzb2x2ZShuZXcgVWludDhBcnJheShyZXNwb25zZSkpfSxyZWplY3QpfSl9fX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBnZXRCaW5hcnkod2FzbUJpbmFyeUZpbGUpfSl9ZnVuY3Rpb24gY3JlYXRlV2FzbSgpe3ZhciBpbmZvPXsiYSI6YXNtTGlicmFyeUFyZ307ZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLG1vZHVsZSl7dmFyIGV4cG9ydHM9aW5zdGFuY2UuZXhwb3J0cztNb2R1bGVbImFzbSJdPWV4cG9ydHM7d2FzbU1lbW9yeT1Nb2R1bGVbImFzbSJdWyJqaiJdO3VwZGF0ZUdsb2JhbEJ1ZmZlckFuZFZpZXdzKHdhc21NZW1vcnkuYnVmZmVyKTt3YXNtVGFibGU9TW9kdWxlWyJhc20iXVsiSmoiXTthZGRPbkluaXQoTW9kdWxlWyJhc20iXVsia2oiXSk7cmVtb3ZlUnVuRGVwZW5kZW5jeSgid2FzbS1pbnN0YW50aWF0ZSIpfWFkZFJ1bkRlcGVuZGVuY3koIndhc20taW5zdGFudGlhdGUiKTtmdW5jdGlvbiByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdChyZXN1bHQpe3JlY2VpdmVJbnN0YW5jZShyZXN1bHRbImluc3RhbmNlIl0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIocmVjZWl2ZXIpe3JldHVybiBnZXRCaW5hcnlQcm9taXNlKCkudGhlbihmdW5jdGlvbihiaW5hcnkpe3ZhciByZXN1bHQ9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LGluZm8pO3JldHVybiByZXN1bHR9KS50aGVuKHJlY2VpdmVyLGZ1bmN0aW9uKHJlYXNvbil7ZXJyKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK3JlYXNvbik7YWJvcnQocmVhc29uKX0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoKXtpZighd2FzbUJpbmFyeSYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT09ImZ1bmN0aW9uIiYmIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkmJiFpc0ZpbGVVUkkod2FzbUJpbmFyeUZpbGUpJiZ0eXBlb2YgZmV0Y2g9PT0iZnVuY3Rpb24iKXtyZXR1cm4gZmV0Y2god2FzbUJpbmFyeUZpbGUse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXt2YXIgcmVzdWx0PVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLGluZm8pO3JldHVybiByZXN1bHQudGhlbihyZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCxmdW5jdGlvbihyZWFzb24pe2Vycigid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrcmVhc29uKTtlcnIoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIik7cmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIocmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpfSl9KX1lbHNle3JldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KX19aWYoTW9kdWxlWyJpbnN0YW50aWF0ZVdhc20iXSl7dHJ5e3ZhciBleHBvcnRzPU1vZHVsZVsiaW5zdGFudGlhdGVXYXNtIl0oaW5mbyxyZWNlaXZlSW5zdGFuY2UpO3JldHVybiBleHBvcnRzfWNhdGNoKGUpe2VycigiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitlKTtyZXR1cm4gZmFsc2V9fWluc3RhbnRpYXRlQXN5bmMoKTtyZXR1cm57fX12YXIgdGVtcERvdWJsZTt2YXIgdGVtcEk2NDt2YXIgQVNNX0NPTlNUUz17NDIzNDAwODpmdW5jdGlvbigpe3JldHVybiBNb2R1bGUud2ViZ2xDb250ZXh0QXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGF9LDQyMzQwNjk6ZnVuY3Rpb24oKXtyZXR1cm4gTW9kdWxlLndlYmdsQ29udGV4dEF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyfSw0MjM0MTMzOmZ1bmN0aW9uKCl7cmV0dXJuIE1vZHVsZS53ZWJnbENvbnRleHRBdHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZX19O2Z1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcyl7d2hpbGUoY2FsbGJhY2tzLmxlbmd0aD4wKXt2YXIgY2FsbGJhY2s9Y2FsbGJhY2tzLnNoaWZ0KCk7aWYodHlwZW9mIGNhbGxiYWNrPT0iZnVuY3Rpb24iKXtjYWxsYmFjayhNb2R1bGUpO2NvbnRpbnVlfXZhciBmdW5jPWNhbGxiYWNrLmZ1bmM7aWYodHlwZW9mIGZ1bmM9PT0ibnVtYmVyIil7aWYoY2FsbGJhY2suYXJnPT09dW5kZWZpbmVkKXsoZnVuY3Rpb24oKXtkeW5DYWxsX3YuY2FsbChudWxsLGZ1bmMpfSkoKX1lbHNleyhmdW5jdGlvbihhMSl7ZHluQ2FsbF92aS5hcHBseShudWxsLFtmdW5jLGExXSl9KShjYWxsYmFjay5hcmcpfX1lbHNle2Z1bmMoY2FsbGJhY2suYXJnPT09dW5kZWZpbmVkP251bGw6Y2FsbGJhY2suYXJnKX19fWZ1bmN0aW9uIGRlbWFuZ2xlKGZ1bmMpe3JldHVybiBmdW5jfWZ1bmN0aW9uIGRlbWFuZ2xlQWxsKHRleHQpe3ZhciByZWdleD0vXGJfWltcd1xkX10rL2c7cmV0dXJuIHRleHQucmVwbGFjZShyZWdleCxmdW5jdGlvbih4KXt2YXIgeT1kZW1hbmdsZSh4KTtyZXR1cm4geD09PXk/eDp5KyIgWyIreCsiXSJ9KX1mdW5jdGlvbiBkeW5DYWxsTGVnYWN5KHNpZyxwdHIsYXJncyl7dmFyIGY9TW9kdWxlWyJkeW5DYWxsXyIrc2lnXTtyZXR1cm4gYXJncyYmYXJncy5sZW5ndGg/Zi5hcHBseShudWxsLFtwdHJdLmNvbmNhdChhcmdzKSk6Zi5jYWxsKG51bGwscHRyKX1mdW5jdGlvbiBkeW5DYWxsKHNpZyxwdHIsYXJncyl7cmV0dXJuIGR5bkNhbGxMZWdhY3koc2lnLHB0cixhcmdzKX1mdW5jdGlvbiBqc1N0YWNrVHJhY2UoKXt2YXIgZXJyb3I9bmV3IEVycm9yO2lmKCFlcnJvci5zdGFjayl7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChlKXtlcnJvcj1lfWlmKCFlcnJvci5zdGFjayl7cmV0dXJuIihubyBzdGFjayB0cmFjZSBhdmFpbGFibGUpIn19cmV0dXJuIGVycm9yLnN0YWNrLnRvU3RyaW5nKCl9dmFyIHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyPTA7ZnVuY3Rpb24ga2VlcFJ1bnRpbWVBbGl2ZSgpe3JldHVybiBub0V4aXRSdW50aW1lfHxydW50aW1lS2VlcGFsaXZlQ291bnRlcj4wfWZ1bmN0aW9uIHN0YWNrVHJhY2UoKXt2YXIganM9anNTdGFja1RyYWNlKCk7aWYoTW9kdWxlWyJleHRyYVN0YWNrVHJhY2UiXSlqcys9IlxuIitNb2R1bGVbImV4dHJhU3RhY2tUcmFjZSJdKCk7cmV0dXJuIGRlbWFuZ2xlQWxsKGpzKX1mdW5jdGlvbiBfQWRkRG9jdW1lbnQoY29sbGVjdGlvblBhdGgsdmFsdWUsb2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZFBhdGg9VVRGOFRvU3RyaW5nKGNvbGxlY3Rpb25QYXRoKTt2YXIgcGFyc2VkVmFsdWU9VVRGOFRvU3RyaW5nKHZhbHVlKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLmZpcmVzdG9yZSgpLmNvbGxlY3Rpb24ocGFyc2VkUGF0aCkuYWRkKEpTT04ucGFyc2UocGFyc2VkVmFsdWUpKS50aGVuKGZ1bmN0aW9uKHVudXNlZCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogZG9jdW1lbnQgYWRkZWQgaW4gY29sbGVjdGlvbiAiK3BhcnNlZFBhdGgpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX0FkZEVsZW1lbnRJbkFycmF5RmllbGQoY29sbGVjdGlvblBhdGgsZG9jdW1lbnRJZCxmaWVsZCx2YWx1ZSxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcoY29sbGVjdGlvblBhdGgpO3ZhciBwYXJzZWRJZD1VVEY4VG9TdHJpbmcoZG9jdW1lbnRJZCk7dmFyIHBhcnNlZEZpZWxkPVVURjhUb1N0cmluZyhmaWVsZCk7dmFyIHBhcnNlZFZhbHVlPVVURjhUb1N0cmluZyh2YWx1ZSk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXt2YXIgdmFsdWU9e307dmFsdWVbcGFyc2VkRmllbGRdPWZpcmViYXNlLmZpcmVzdG9yZS5GaWVsZFZhbHVlLmFycmF5VW5pb24oSlNPTi5wYXJzZShwYXJzZWRWYWx1ZSkpO2ZpcmViYXNlLmZpcmVzdG9yZSgpLmNvbGxlY3Rpb24ocGFyc2VkUGF0aCkuZG9jKHBhcnNlZElkKS51cGRhdGUodmFsdWUpLnRoZW4oZnVuY3Rpb24oKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJTdWNjZXNzOiBlbGVtZW50ICIrcGFyc2VkVmFsdWUrIiB3YXMgYWRkZWQgaW4gIitwYXJzZWRGaWVsZCl9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfQ3JlYXRlVXNlcldpdGhFbWFpbEFuZFBhc3N3b3JkKGVtYWlsLHBhc3N3b3JkLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRFbWFpbD1VVEY4VG9TdHJpbmcoZW1haWwpO3ZhciBwYXJzZWRQYXNzd29yZD1VVEY4VG9TdHJpbmcocGFzc3dvcmQpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuYXV0aCgpLmNyZWF0ZVVzZXJXaXRoRW1haWxBbmRQYXNzd29yZChwYXJzZWRFbWFpbCxwYXJzZWRQYXNzd29yZCkudGhlbihmdW5jdGlvbih1bnVzZWQpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IHNpZ25lZCB1cCBmb3IgIitwYXJzZWRFbWFpbCl9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfRGVsZXRlRG9jdW1lbnQoY29sbGVjdGlvblBhdGgsZG9jdW1lbnRJZCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcoY29sbGVjdGlvblBhdGgpO3ZhciBwYXJzZWRJZD1VVEY4VG9TdHJpbmcoZG9jdW1lbnRJZCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5maXJlc3RvcmUoKS5jb2xsZWN0aW9uKHBhcnNlZFBhdGgpLmRvYyhwYXJzZWRJZCkuZGVsZXRlKCkudGhlbihmdW5jdGlvbigpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGRvY3VtZW50ICIrcGFyc2VkSWQrIiB3YXMgZGVsZXRlZCIpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX0RlbGV0ZUZpZWxkKGNvbGxlY3Rpb25QYXRoLGRvY3VtZW50SWQsZmllbGQsb2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZFBhdGg9VVRGOFRvU3RyaW5nKGNvbGxlY3Rpb25QYXRoKTt2YXIgcGFyc2VkSWQ9VVRGOFRvU3RyaW5nKGRvY3VtZW50SWQpO3ZhciBwYXJzZWRGaWVsZD1VVEY4VG9TdHJpbmcoZmllbGQpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7dmFyIHZhbHVlPXt9O3ZhbHVlW3BhcnNlZEZpZWxkXT1maXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5kZWxldGUoKTtmaXJlYmFzZS5maXJlc3RvcmUoKS5jb2xsZWN0aW9uKHBhcnNlZFBhdGgpLmRvYyhwYXJzZWRJZCkudXBkYXRlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogZmllbGQgIitwYXJzZWRGaWVsZCsiIHdhcyBkZWxldGVkIil9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfRGVsZXRlSlNPTihwYXRoLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhwYXRoKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLmRhdGFiYXNlKCkucmVmKHBhcnNlZFBhdGgpLnJlbW92ZSgpLnRoZW4oZnVuY3Rpb24odW51c2VkKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJTdWNjZXNzOiAiK3BhcnNlZFBhdGgrIiB3YXMgZGVsZXRlZCIpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9Eb3dubG9hZEZpbGUocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5zdG9yYWdlKCkucmVmKHBhcnNlZFBhdGgpLmdldERvd25sb2FkVVJMKCkudGhlbihmdW5jdGlvbih1cmwpe3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIub25sb2FkPWZ1bmN0aW9uKGV2ZW50KXt2YXIgZGF0YT14aHIucmVzcG9uc2U7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjayxhcnJheUJ1ZmZlclRvQmFzZTY0KGRhdGEpKX07eGhyLm9wZW4oIkdFVCIsdXJsKTt4aHIuc2VuZCgpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX1mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcil7dmFyIGJpbmFyeT0iIjt2YXIgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTt2YXIgbGVuPWJ5dGVzLmJ5dGVMZW5ndGg7Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtiaW5hcnkrPVN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pfXJldHVybiB3aW5kb3cuYnRvYShiaW5hcnkpfX1mdW5jdGlvbiBfRmV0Y2hBZCgpe3RyeXt3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0ubG9nKCJXR1NESzogR2V0dGluZyBXZWVHb28gSW5HYW1lIEFkIik7d2luZG93W3ByZXJvbGwuY29uZmlnLmxvYWRlck9iamVjdE5hbWVdLnJlZmV0Y2hBZCgpfWNhdGNoKGUpe2NvbnNvbGUubG9nKCJObyBXZWVHb29BRkcgaW1wbGVtZW50YXRpb24gZm91bmQhIil9fWZ1bmN0aW9uIF9HRF9TREtfSW5pdChnYW1lS2V5KXtnYW1lS2V5PVBvaW50ZXJfc3RyaW5naWZ5KGdhbWVLZXkpO3dpbmRvd1siR0RfT1BUSU9OUyJdPXtkZWJ1ZzpmYWxzZSxnYW1lSWQ6Z2FtZUtleSxvbkV2ZW50OmZ1bmN0aW9uKGV2ZW50KXtzd2l0Y2goZXZlbnQubmFtZSl7Y2FzZSJTREtfR0FNRV9TVEFSVCI6U2VuZE1lc3NhZ2UoIkdhbWVEaXN0cmlidXRpb24iLCJSZXN1bWVHYW1lQ2FsbGJhY2siKTticmVhaztjYXNlIlNES19HQU1FX1BBVVNFIjpTZW5kTWVzc2FnZSgiR2FtZURpc3RyaWJ1dGlvbiIsIlBhdXNlR2FtZUNhbGxiYWNrIik7YnJlYWs7Y2FzZSJTREtfUkVXQVJERURfV0FUQ0hfQ09NUExFVEUiOlNlbmRNZXNzYWdlKCJHYW1lRGlzdHJpYnV0aW9uIiwiUmV3YXJkZWRDb21wbGV0ZUNhbGxiYWNrIik7YnJlYWs7Y2FzZSJTREtfRVJST1IiOmJyZWFrfX19OyhmdW5jdGlvbihkLHMsaWQpe3ZhciBqcyxmanM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTtpZihkLmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm47anM9ZC5jcmVhdGVFbGVtZW50KHMpO2pzLmlkPWlkO2pzLnNyYz0iLy9odG1sNS5hcGkuZ2FtZWRpc3RyaWJ1dGlvbi5jb20vbWFpbi5taW4uanMiO2Zqcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqcyxmanMpfSkoZG9jdW1lbnQsInNjcmlwdCIsImdhbWVkaXN0cmlidXRpb24tanNzZGsiKX1mdW5jdGlvbiBfR0RfU0RLX1ByZWxvYWRBZCgpe2lmKHR5cGVvZiBnZHNkayE9PSJ1bmRlZmluZWQiJiZ0eXBlb2YgZ2RzZGsucHJlbG9hZEFkIT09InVuZGVmaW5lZCIpe2dkc2RrLnByZWxvYWRBZChnZHNkay5BZFR5cGUuUmV3YXJkZWQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe1NlbmRNZXNzYWdlKCJHYW1lRGlzdHJpYnV0aW9uIiwiUHJlbG9hZFJld2FyZGVkVmlkZW9DYWxsYmFjayIsMSl9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7U2VuZE1lc3NhZ2UoIkdhbWVEaXN0cmlidXRpb24iLCJQcmVsb2FkUmV3YXJkZWRWaWRlb0NhbGxiYWNrIiwwKX0pfX1mdW5jdGlvbiBfR0RfU0RLX1NlbmRFdmVudChvcHRpb25zKXtvcHRpb25zPVBvaW50ZXJfc3RyaW5naWZ5KG9wdGlvbnMpO2lmKHR5cGVvZiBnZHNkayE9PSJ1bmRlZmluZWQiJiZ0eXBlb2YgZ2RzZGsuc2VuZEV2ZW50IT09InVuZGVmaW5lZCImJnR5cGVvZiBvcHRpb25zIT09InVuZGVmaW5lZCIpe2dkc2RrLnNlbmRFdmVudChvcHRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXtjb25zb2xlLmxvZygiR2FtZSBldmVudCBwb3N0IG1lc3NhZ2Ugc2VudCBTdWNjZXNmdWxseS4uLiIpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe2NvbnNvbGUubG9nKGVycm9yLm1lc3NhZ2UpfSl9fWZ1bmN0aW9uIF9HRF9TREtfU2hvd0FkKGFkVHlwZSl7aWYodHlwZW9mIGdkc2RrIT09InVuZGVmaW5lZCImJnR5cGVvZiBnZHNkay5zaG93QWQhPT0idW5kZWZpbmVkIil7YWRUeXBlPVBvaW50ZXJfc3RyaW5naWZ5KGFkVHlwZSl8fGdkc2RrLkFkVHlwZS5JbnRlcnN0aXRpYWw7Y29uc29sZS5sb2coImdkIHNob3cgYWRzOiAiK2FkVHlwZSk7Z2RzZGsuc2hvd0FkKGFkVHlwZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSl7aWYoYWRUeXBlPT09Z2RzZGsuQWRUeXBlLlJld2FyZGVkKXtTZW5kTWVzc2FnZSgiR2FtZURpc3RyaWJ1dGlvbiIsIlJld2FyZGVkVmlkZW9TdWNjZXNzQ2FsbGJhY2siKX19KS5jYXRjaChmdW5jdGlvbihlcnJvcil7aWYoYWRUeXBlPT09Z2RzZGsuQWRUeXBlLlJld2FyZGVkKXtTZW5kTWVzc2FnZSgiR2FtZURpc3RyaWJ1dGlvbiIsIlJld2FyZGVkVmlkZW9GYWlsdXJlQ2FsbGJhY2siKX19KX19ZnVuY3Rpb24gX0dhbWVFdmVudChnYW1lRXZlbnROYW1lKXt0cnl7d2luZG93W3ByZXJvbGwuY29uZmlnLmxvYWRlck9iamVjdE5hbWVdLmxvZygiV0dTREs6IFNlbmRpbmcgZ2FtZSBldmVudCIpO3dpbmRvd1twcmVyb2xsLmNvbmZpZy5sb2FkZXJPYmplY3ROYW1lXS5HYW1lRXZlbnQoZ2FtZUV2ZW50TmFtZSl9Y2F0Y2goZSl7Y29uc29sZS5sb2coIk5vIFdlZUdvb0FGRyBpbXBsZW1lbnRhdGlvbiBmb3VuZCEiKX19ZnVuY3Rpb24gX0dldEN1cnJlbnRQcm9qZWN0SWQoKXt2YXIgcHJvamVjdElkPWZpcmViYXNlQ29uZmlnLnByb2plY3RJZDt2YXIgYnVmZmVyU2l6ZT1sZW5ndGhCeXRlc1VURjgocHJvamVjdElkKSsxO3ZhciBidWZmZXI9X21hbGxvYyhidWZmZXJTaXplKTtzdHJpbmdUb1VURjgocHJvamVjdElkLGJ1ZmZlcixidWZmZXJTaXplKTtyZXR1cm4gYnVmZmVyfWZ1bmN0aW9uIF9HZXREb2N1bWVudChjb2xsZWN0aW9uUGF0aCxkb2N1bWVudElkLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhjb2xsZWN0aW9uUGF0aCk7dmFyIHBhcnNlZElkPVVURjhUb1N0cmluZyhkb2N1bWVudElkKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLmZpcmVzdG9yZSgpLmNvbGxlY3Rpb24ocGFyc2VkUGF0aCkuZG9jKHBhcnNlZElkKS5nZXQoKS50aGVuKGZ1bmN0aW9uKGRvYyl7aWYoZG9jLmV4aXN0cyl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjayxKU09OLnN0cmluZ2lmeShkb2MuZGF0YSgpKSl9ZWxzZXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJudWxsIil9fSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX0dldERvY3VtZW50c0luQ29sbGVjdGlvbihjb2xsZWN0aW9uUGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcoY29sbGVjdGlvblBhdGgpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuZmlyZXN0b3JlKCkuY29sbGVjdGlvbihwYXJzZWRQYXRoKS5nZXQoKS50aGVuKGZ1bmN0aW9uKHF1ZXJ5U25hcHNob3Qpe3ZhciBkb2NzPXt9O3F1ZXJ5U25hcHNob3QuZm9yRWFjaChmdW5jdGlvbihkb2Mpe2RvY3NbZG9jLmlkXT1kb2MuZGF0YSgpfSk7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjayxKU09OLnN0cmluZ2lmeShkb2NzKSl9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfR2V0SlNPTihwYXRoLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhwYXRoKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLmRhdGFiYXNlKCkucmVmKHBhcnNlZFBhdGgpLm9uY2UoInZhbHVlIikudGhlbihmdW5jdGlvbihzbmFwc2hvdCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjayxKU09OLnN0cmluZ2lmeShzbmFwc2hvdC52YWwoKSkpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9JbmNyZW1lbnRGaWVsZFZhbHVlKGNvbGxlY3Rpb25QYXRoLGRvY3VtZW50SWQsZmllbGQsaW5jcmVtZW50LG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhjb2xsZWN0aW9uUGF0aCk7dmFyIHBhcnNlZElkPVVURjhUb1N0cmluZyhkb2N1bWVudElkKTt2YXIgcGFyc2VkRmllbGQ9VVRGOFRvU3RyaW5nKGZpZWxkKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e3ZhciB2YWx1ZT17fTt2YWx1ZVtwYXJzZWRGaWVsZF09ZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuaW5jcmVtZW50KGluY3JlbWVudCk7ZmlyZWJhc2UuZmlyZXN0b3JlKCkuY29sbGVjdGlvbihwYXJzZWRQYXRoKS5kb2MocGFyc2VkSWQpLnVwZGF0ZSh2YWx1ZSkudGhlbihmdW5jdGlvbigpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGluY3JlbWVudGVkICIrcGFyc2VkRmllbGQrIiBieSAiK2luY3JlbWVudCl9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX12YXIgSlNfQWNjZWxlcm9tZXRlcj1udWxsO3ZhciBKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrPTA7ZnVuY3Rpb24gX0pTX0FjY2VsZXJvbWV0ZXJfSXNSdW5uaW5nKCl7cmV0dXJuIEpTX0FjY2VsZXJvbWV0ZXImJkpTX0FjY2VsZXJvbWV0ZXIuYWN0aXZhdGVkfHxKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrIT0wfXZhciBKU19BY2NlbGVyb21ldGVyX211bHRpcGxpZXI9MTt2YXIgSlNfQWNjZWxlcm9tZXRlcl9sYXN0VmFsdWU9e3g6MCx5OjAsejowfTtmdW5jdGlvbiBKU19BY2NlbGVyb21ldGVyX2V2ZW50SGFuZGxlcigpe0pTX0FjY2VsZXJvbWV0ZXJfbGFzdFZhbHVlPXt4OkpTX0FjY2VsZXJvbWV0ZXIueCpKU19BY2NlbGVyb21ldGVyX211bHRpcGxpZXIseTpKU19BY2NlbGVyb21ldGVyLnkqSlNfQWNjZWxlcm9tZXRlcl9tdWx0aXBsaWVyLHo6SlNfQWNjZWxlcm9tZXRlci56KkpTX0FjY2VsZXJvbWV0ZXJfbXVsdGlwbGllcn07aWYoSlNfQWNjZWxlcm9tZXRlcl9jYWxsYmFjayE9MClkeW5DYWxsX3ZmZmYoSlNfQWNjZWxlcm9tZXRlcl9jYWxsYmFjayxKU19BY2NlbGVyb21ldGVyX2xhc3RWYWx1ZS54LEpTX0FjY2VsZXJvbWV0ZXJfbGFzdFZhbHVlLnksSlNfQWNjZWxlcm9tZXRlcl9sYXN0VmFsdWUueil9dmFyIEpTX0FjY2VsZXJvbWV0ZXJfZnJlcXVlbmN5UmVxdWVzdD0wO3ZhciBKU19BY2NlbGVyb21ldGVyX2ZyZXF1ZW5jeT0wO3ZhciBKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2s9MDt2YXIgSlNfR3Jhdml0eVNlbnNvcl9jYWxsYmFjaz0wO3ZhciBKU19HeXJvc2NvcGVfY2FsbGJhY2s9MDtmdW5jdGlvbiBKU19Db21wdXRlR3Jhdml0eShhY2NlbGVyb21ldGVyVmFsdWUsbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUpe3ZhciBkaWZmZXJlbmNlPXt4OmFjY2VsZXJvbWV0ZXJWYWx1ZS54LWxpbmVhckFjY2VsZXJhdGlvblZhbHVlLngseTphY2NlbGVyb21ldGVyVmFsdWUueS1saW5lYXJBY2NlbGVyYXRpb25WYWx1ZS55LHo6YWNjZWxlcm9tZXRlclZhbHVlLnotbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUuen07dmFyIGRpZmZlcmVuY2VNYWduaXR1ZGVTcT1kaWZmZXJlbmNlLngqZGlmZmVyZW5jZS54K2RpZmZlcmVuY2UueSpkaWZmZXJlbmNlLnkrZGlmZmVyZW5jZS56KmRpZmZlcmVuY2Uuejt2YXIgc3VtPXt4OmFjY2VsZXJvbWV0ZXJWYWx1ZS54K2xpbmVhckFjY2VsZXJhdGlvblZhbHVlLngseTphY2NlbGVyb21ldGVyVmFsdWUueStsaW5lYXJBY2NlbGVyYXRpb25WYWx1ZS55LHo6YWNjZWxlcm9tZXRlclZhbHVlLnorbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUuen07dmFyIHN1bU1hZ25pdHVkZVNxPXN1bS54KnN1bS54K3N1bS55KnN1bS55K3N1bS56KnN1bS56O3JldHVybiBkaWZmZXJlbmNlTWFnbml0dWRlU3E8PXN1bU1hZ25pdHVkZVNxP2RpZmZlcmVuY2U6c3VtfWZ1bmN0aW9uIEpTX0RldmljZU1vdGlvbl9ldmVudEhhbmRsZXIoZXZlbnQpe3ZhciBhY2NlbGVyb21ldGVyVmFsdWU9e3g6ZXZlbnQuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS54KkpTX0FjY2VsZXJvbWV0ZXJfbXVsdGlwbGllcix5OmV2ZW50LmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueSpKU19BY2NlbGVyb21ldGVyX211bHRpcGxpZXIsejpldmVudC5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LnoqSlNfQWNjZWxlcm9tZXRlcl9tdWx0aXBsaWVyfTtpZihKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrIT0wKWR5bkNhbGxfdmZmZihKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrLGFjY2VsZXJvbWV0ZXJWYWx1ZS54LGFjY2VsZXJvbWV0ZXJWYWx1ZS55LGFjY2VsZXJvbWV0ZXJWYWx1ZS56KTt2YXIgbGluZWFyQWNjZWxlcmF0aW9uVmFsdWU9e3g6ZXZlbnQuYWNjZWxlcmF0aW9uLngqSlNfQWNjZWxlcm9tZXRlcl9tdWx0aXBsaWVyLHk6ZXZlbnQuYWNjZWxlcmF0aW9uLnkqSlNfQWNjZWxlcm9tZXRlcl9tdWx0aXBsaWVyLHo6ZXZlbnQuYWNjZWxlcmF0aW9uLnoqSlNfQWNjZWxlcm9tZXRlcl9tdWx0aXBsaWVyfTtpZihKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2shPTApZHluQ2FsbF92ZmZmKEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9jYWxsYmFjayxsaW5lYXJBY2NlbGVyYXRpb25WYWx1ZS54LGxpbmVhckFjY2VsZXJhdGlvblZhbHVlLnksbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUueik7aWYoSlNfR3Jhdml0eVNlbnNvcl9jYWxsYmFjayE9MCl7dmFyIGdyYXZpdHlWYWx1ZT1KU19Db21wdXRlR3Jhdml0eShhY2NlbGVyb21ldGVyVmFsdWUsbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUpO2R5bkNhbGxfdmZmZihKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrLGdyYXZpdHlWYWx1ZS54LGdyYXZpdHlWYWx1ZS55LGdyYXZpdHlWYWx1ZS56KX1pZihKU19HeXJvc2NvcGVfY2FsbGJhY2shPTApe3ZhciBkZWdUb1JhZD1NYXRoLlBJLzE4MDtkeW5DYWxsX3ZmZmYoSlNfR3lyb3Njb3BlX2NhbGxiYWNrLGV2ZW50LnJvdGF0aW9uUmF0ZS5hbHBoYSpkZWdUb1JhZCxldmVudC5yb3RhdGlvblJhdGUuYmV0YSpkZWdUb1JhZCxldmVudC5yb3RhdGlvblJhdGUuZ2FtbWEqZGVnVG9SYWQpfX12YXIgSlNfRGV2aWNlU2Vuc29yUGVybWlzc2lvbnM9MDtmdW5jdGlvbiBKU19SZXF1ZXN0RGV2aWNlU2Vuc29yUGVybWlzc2lvbnMocGVybWlzc2lvbnMpe2lmKHBlcm1pc3Npb25zJjEpe2lmKHR5cGVvZiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50LnJlcXVlc3RQZXJtaXNzaW9uPT09ImZ1bmN0aW9uIil7RGV2aWNlT3JpZW50YXRpb25FdmVudC5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oZnVuY3Rpb24ocGVybWlzc2lvblN0YXRlKXtpZihwZXJtaXNzaW9uU3RhdGU9PT0iZ3JhbnRlZCIpe0pTX0RldmljZVNlbnNvclBlcm1pc3Npb25zJj1+MX1lbHNle3dhcm5PbmNlKCJEZXZpY2VPcmllbnRhdGlvbkV2ZW50IHBlcm1pc3Npb24gbm90IGdyYW50ZWQiKX19KS5jYXRjaChmdW5jdGlvbihlcnIpe3dhcm5PbmNlKGVycik7SlNfRGV2aWNlU2Vuc29yUGVybWlzc2lvbnN8PTF9KX19aWYocGVybWlzc2lvbnMmMil7aWYodHlwZW9mIERldmljZU1vdGlvbkV2ZW50LnJlcXVlc3RQZXJtaXNzaW9uPT09ImZ1bmN0aW9uIil7RGV2aWNlTW90aW9uRXZlbnQucmVxdWVzdFBlcm1pc3Npb24oKS50aGVuKGZ1bmN0aW9uKHBlcm1pc3Npb25TdGF0ZSl7aWYocGVybWlzc2lvblN0YXRlPT09ImdyYW50ZWQiKXtKU19EZXZpY2VTZW5zb3JQZXJtaXNzaW9ucyY9fjJ9ZWxzZXt3YXJuT25jZSgiRGV2aWNlTW90aW9uRXZlbnQgcGVybWlzc2lvbiBub3QgZ3JhbnRlZCIpfX0pLmNhdGNoKGZ1bmN0aW9uKGVycil7d2Fybk9uY2UoZXJyKTtKU19EZXZpY2VTZW5zb3JQZXJtaXNzaW9uc3w9Mn0pfX19ZnVuY3Rpb24gSlNfRGV2aWNlTW90aW9uX2FkZCgpe2lmKEpTX0FjY2VsZXJvbWV0ZXJfY2FsbGJhY2s9PTAmJkpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9jYWxsYmFjaz09MCYmSlNfR3Jhdml0eVNlbnNvcl9jYWxsYmFjaz09MCYmSlNfR3lyb3Njb3BlX2NhbGxiYWNrPT0wKXtKU19SZXF1ZXN0RGV2aWNlU2Vuc29yUGVybWlzc2lvbnMoMik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImRldmljZW1vdGlvbiIsSlNfRGV2aWNlTW90aW9uX2V2ZW50SGFuZGxlcil9fWZ1bmN0aW9uIEpTX0RlZmluZUFjY2VsZXJvbWV0ZXJNdWx0aXBsaWVyKCl7dmFyIGc9OS44MDY2NTtKU19BY2NlbGVyb21ldGVyX211bHRpcGxpZXI9LyhpUGhvbmV8aVBhZHxNYWNpbnRvc2gpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT8xL2c6LTEvZ31mdW5jdGlvbiBfSlNfQWNjZWxlcm9tZXRlcl9TdGFydChjYWxsYmFjayxmcmVxdWVuY3kpe0pTX0RlZmluZUFjY2VsZXJvbWV0ZXJNdWx0aXBsaWVyKCk7aWYodHlwZW9mIEFjY2VsZXJvbWV0ZXI9PT0idW5kZWZpbmVkIil7SlNfRGV2aWNlTW90aW9uX2FkZCgpO2lmKGNhbGxiYWNrIT0wKUpTX0FjY2VsZXJvbWV0ZXJfY2FsbGJhY2s9Y2FsbGJhY2s7cmV0dXJufWlmKGNhbGxiYWNrIT0wKUpTX0FjY2VsZXJvbWV0ZXJfY2FsbGJhY2s9Y2FsbGJhY2s7ZnVuY3Rpb24gSW5pdGlhbGl6ZUFjY2VsZXJvbWV0ZXIoZnJlcXVlbmN5KXtKU19BY2NlbGVyb21ldGVyPW5ldyBBY2NlbGVyb21ldGVyKHtmcmVxdWVuY3k6ZnJlcXVlbmN5LHJlZmVyZW5jZUZyYW1lOiJkZXZpY2UifSk7SlNfQWNjZWxlcm9tZXRlci5hZGRFdmVudExpc3RlbmVyKCJyZWFkaW5nIixKU19BY2NlbGVyb21ldGVyX2V2ZW50SGFuZGxlcik7SlNfQWNjZWxlcm9tZXRlci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oZSl7d2Fybk9uY2UoZS5lcnJvcj9lLmVycm9yOmUpfSk7SlNfQWNjZWxlcm9tZXRlci5zdGFydCgpO0pTX0FjY2VsZXJvbWV0ZXJfZnJlcXVlbmN5PWZyZXF1ZW5jeX1pZihKU19BY2NlbGVyb21ldGVyKXtpZihKU19BY2NlbGVyb21ldGVyX2ZyZXF1ZW5jeSE9ZnJlcXVlbmN5KXtKU19BY2NlbGVyb21ldGVyLnN0b3AoKTtKU19BY2NlbGVyb21ldGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWRpbmciLEpTX0FjY2VsZXJvbWV0ZXJfZXZlbnRIYW5kbGVyKTtJbml0aWFsaXplQWNjZWxlcm9tZXRlcihmcmVxdWVuY3kpfX1lbHNlIGlmKEpTX0FjY2VsZXJvbWV0ZXJfZnJlcXVlbmN5UmVxdWVzdCE9MCl7SlNfQWNjZWxlcm9tZXRlcl9mcmVxdWVuY3lSZXF1ZXN0PWZyZXF1ZW5jeX1lbHNle0pTX0FjY2VsZXJvbWV0ZXJfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3k7bmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJhY2NlbGVyb21ldGVyIn0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtpZihyZXN1bHQuc3RhdGU9PT0iZ3JhbnRlZCIpe0luaXRpYWxpemVBY2NlbGVyb21ldGVyKEpTX0FjY2VsZXJvbWV0ZXJfZnJlcXVlbmN5UmVxdWVzdCl9ZWxzZXt3YXJuT25jZSgiTm8gcGVybWlzc2lvbiB0byB1c2UgQWNjZWxlcm9tZXRlci4iKX1KU19BY2NlbGVyb21ldGVyX2ZyZXF1ZW5jeVJlcXVlc3Q9MH0pfX1mdW5jdGlvbiBKU19EZXZpY2VNb3Rpb25fcmVtb3ZlKCl7aWYoSlNfQWNjZWxlcm9tZXRlcl9jYWxsYmFjaz09MCYmSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX2NhbGxiYWNrPT0wJiZKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrPT0wJiZKU19HeXJvc2NvcGVfY2FsbGJhY2s9PTApe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJkZXZpY2Vtb3Rpb24iLEpTX0RldmljZU9yaWVudGF0aW9uX2V2ZW50SGFuZGxlcil9fWZ1bmN0aW9uIF9KU19BY2NlbGVyb21ldGVyX1N0b3AoKXtpZihKU19BY2NlbGVyb21ldGVyKXtpZih0eXBlb2YgR3Jhdml0eVNlbnNvciE9PSJ1bmRlZmluZWQifHxKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrPT0wKXtKU19BY2NlbGVyb21ldGVyLnN0b3AoKTtKU19BY2NlbGVyb21ldGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWRpbmciLEpTX0FjY2VsZXJvbWV0ZXJfZXZlbnRIYW5kbGVyKTtKU19BY2NlbGVyb21ldGVyPW51bGx9SlNfQWNjZWxlcm9tZXRlcl9jYWxsYmFjaz0wO0pTX0FjY2VsZXJvbWV0ZXJfZnJlcXVlbmN5PTB9ZWxzZSBpZihKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrIT0wKXtKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrPTA7SlNfRGV2aWNlTW90aW9uX3JlbW92ZSgpfX1mdW5jdGlvbiBfSlNfQ3Vyc29yX1NldEltYWdlKHB0cixsZW5ndGgpe3ZhciBiaW5hcnk9IiI7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKWJpbmFyeSs9U3RyaW5nLmZyb21DaGFyQ29kZShIRUFQVThbcHRyK2ldKTtNb2R1bGUuY2FudmFzLnN0eWxlLmN1cnNvcj0idXJsKGRhdGE6aW1hZ2UvY3VyO2Jhc2U2NCwiK2J0b2EoYmluYXJ5KSsiKSxkZWZhdWx0In1mdW5jdGlvbiBfSlNfQ3Vyc29yX1NldFNob3coc2hvdyl7TW9kdWxlLmNhbnZhcy5zdHlsZS5jdXJzb3I9c2hvdz8iZGVmYXVsdCI6Im5vbmUifWZ1bmN0aW9uIGpzRG9tQ3NzRXNjYXBlSWQoaWQpe2lmKHR5cGVvZiB3aW5kb3cuQ1NTIT09InVuZGVmaW5lZCImJnR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gd2luZG93LkNTUy5lc2NhcGUoaWQpfXJldHVybiBpZC5yZXBsYWNlKC8oI3xcLnxcK3xcW3xcXXxcKHxcKXxce3xcfSkvZywiXFwkMSIpfWZ1bmN0aW9uIGpzQ2FudmFzU2VsZWN0b3IoKXt2YXIgY2FudmFzSWQ9TW9kdWxlWyJjYW52YXMiXT9Nb2R1bGVbImNhbnZhcyJdLmlkOiJ1bml0eS1jYW52YXMiO3JldHVybiIjIitqc0RvbUNzc0VzY2FwZUlkKGNhbnZhc0lkKX1mdW5jdGlvbiBfSlNfRE9NX01hcFZpZXdwb3J0Q29vcmRpbmF0ZVRvRWxlbWVudExvY2FsQ29vcmRpbmF0ZSh2aWV3cG9ydFgsdmlld3BvcnRZLHRhcmdldFgsdGFyZ2V0WSl7dmFyIGNhbnZhcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGpzQ2FudmFzU2VsZWN0b3IoKSk7dmFyIHJlY3Q9Y2FudmFzJiZjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7SEVBUFUzMlt0YXJnZXRYPj4yXT12aWV3cG9ydFgtKHJlY3Q/cmVjdC5sZWZ0OjApO0hFQVBVMzJbdGFyZ2V0WT4+Ml09dmlld3BvcnRZLShyZWN0P3JlY3QudG9wOjApfWZ1bmN0aW9uIHN0cmluZ1RvTmV3VVRGOChqc1N0cmluZyl7dmFyIGxlbmd0aD1sZW5ndGhCeXRlc1VURjgoanNTdHJpbmcpKzE7dmFyIGNTdHJpbmc9X21hbGxvYyhsZW5ndGgpO3N0cmluZ1RvVVRGOChqc1N0cmluZyxjU3RyaW5nLGxlbmd0aCk7cmV0dXJuIGNTdHJpbmd9ZnVuY3Rpb24gX0pTX0RPTV9Vbml0eUNhbnZhc1NlbGVjdG9yKCl7dmFyIGNhbnZhc1NlbGVjdG9yPWpzQ2FudmFzU2VsZWN0b3IoKTtpZihfSlNfRE9NX1VuaXR5Q2FudmFzU2VsZWN0b3Iuc2VsZWN0b3IhPWNhbnZhc1NlbGVjdG9yKXtfZnJlZShfSlNfRE9NX1VuaXR5Q2FudmFzU2VsZWN0b3IucHRyKTtfSlNfRE9NX1VuaXR5Q2FudmFzU2VsZWN0b3IucHRyPXN0cmluZ1RvTmV3VVRGOChjYW52YXNTZWxlY3Rvcik7X0pTX0RPTV9Vbml0eUNhbnZhc1NlbGVjdG9yLnNlbGVjdG9yPWNhbnZhc1NlbGVjdG9yfXJldHVybiBfSlNfRE9NX1VuaXR5Q2FudmFzU2VsZWN0b3IucHRyfWZ1bmN0aW9uIF9KU19FdmFsX0V2YWxKUyhwdHIpe3ZhciBzdHI9VVRGOFRvU3RyaW5nKHB0cik7dHJ5e2V2YWwoc3RyKX1jYXRjaChleGNlcHRpb24pe2NvbnNvbGUuZXJyb3IoZXhjZXB0aW9uKX19ZnVuY3Rpb24gX0pTX0V2YWxfT3BlblVSTChwdHIpe3ZhciBzdHI9VVRGOFRvU3RyaW5nKHB0cik7d2luZG93Lm9wZW4oc3RyLCJfYmxhbmsiLCIiKX12YXIgZnM9e251bVBlbmRpbmdTeW5jOjAsc3luY0ludGVybmFsOjFlMyxzeW5jSW5Qcm9ncmVzczpmYWxzZSxzeW5jOmZ1bmN0aW9uKG9ubHlQZW5kaW5nU3luYyl7aWYob25seVBlbmRpbmdTeW5jKXtpZihmcy5udW1QZW5kaW5nU3luYz09MClyZXR1cm59ZWxzZSBpZihmcy5zeW5jSW5Qcm9ncmVzcyl7ZnMubnVtUGVuZGluZ1N5bmMrKztyZXR1cm59ZnMuc3luY0luUHJvZ3Jlc3M9dHJ1ZTtGUy5zeW5jZnMoZmFsc2UsZnVuY3Rpb24oZXJyKXtmcy5zeW5jSW5Qcm9ncmVzcz1mYWxzZX0pO2ZzLm51bVBlbmRpbmdTeW5jPTB9fTtmdW5jdGlvbiBfSlNfRmlsZVN5c3RlbV9Jbml0aWFsaXplKCl7TW9kdWxlLnNldEludGVydmFsKGZ1bmN0aW9uKCl7ZnMuc3luYyh0cnVlKX0sZnMuc3luY0ludGVybmFsKX1mdW5jdGlvbiBfSlNfRmlsZVN5c3RlbV9TeW5jKCl7ZnMuc3luYyhmYWxzZSl9dmFyIEpTX0dyYXZpdHlTZW5zb3I9bnVsbDtmdW5jdGlvbiBfSlNfR3Jhdml0eVNlbnNvcl9Jc1J1bm5pbmcoKXtyZXR1cm4gdHlwZW9mIEdyYXZpdHlTZW5zb3IhPT0idW5kZWZpbmVkIj9KU19HcmF2aXR5U2Vuc29yJiZKU19HcmF2aXR5U2Vuc29yLmFjdGl2YXRlZDpKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrIT0wfWZ1bmN0aW9uIEpTX0dyYXZpdHlTZW5zb3JfZXZlbnRIYW5kbGVyKCl7aWYoSlNfR3Jhdml0eVNlbnNvcl9jYWxsYmFjayE9MClkeW5DYWxsX3ZmZmYoSlNfR3Jhdml0eVNlbnNvcl9jYWxsYmFjayxKU19HcmF2aXR5U2Vuc29yLngqSlNfQWNjZWxlcm9tZXRlcl9tdWx0aXBsaWVyLEpTX0dyYXZpdHlTZW5zb3IueSpKU19BY2NlbGVyb21ldGVyX211bHRpcGxpZXIsSlNfR3Jhdml0eVNlbnNvci56KkpTX0FjY2VsZXJvbWV0ZXJfbXVsdGlwbGllcil9dmFyIEpTX0dyYXZpdHlTZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD0wO3ZhciBKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3I9bnVsbDtmdW5jdGlvbiBKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZXZlbnRIYW5kbGVyKCl7dmFyIGxpbmVhckFjY2VsZXJhdGlvblZhbHVlPXt4OkpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvci54KkpTX0FjY2VsZXJvbWV0ZXJfbXVsdGlwbGllcix5OkpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvci55KkpTX0FjY2VsZXJvbWV0ZXJfbXVsdGlwbGllcix6OkpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvci56KkpTX0FjY2VsZXJvbWV0ZXJfbXVsdGlwbGllcn07aWYoSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX2NhbGxiYWNrIT0wKWR5bkNhbGxfdmZmZihKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2ssbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUueCxsaW5lYXJBY2NlbGVyYXRpb25WYWx1ZS55LGxpbmVhckFjY2VsZXJhdGlvblZhbHVlLnopO2lmKEpTX0dyYXZpdHlTZW5zb3JfY2FsbGJhY2shPTAmJnR5cGVvZiBHcmF2aXR5U2Vuc29yPT09InVuZGVmaW5lZCIpe3ZhciBncmF2aXR5VmFsdWU9SlNfQ29tcHV0ZUdyYXZpdHkoSlNfQWNjZWxlcm9tZXRlcl9sYXN0VmFsdWUsbGluZWFyQWNjZWxlcmF0aW9uVmFsdWUpO2R5bkNhbGxfdmZmZihKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrLGdyYXZpdHlWYWx1ZS54LGdyYXZpdHlWYWx1ZS55LGdyYXZpdHlWYWx1ZS56KX19dmFyIEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9mcmVxdWVuY3lSZXF1ZXN0PTA7dmFyIEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9mcmVxdWVuY3k9MDtmdW5jdGlvbiBfSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX1N0YXJ0KGNhbGxiYWNrLGZyZXF1ZW5jeSl7SlNfRGVmaW5lQWNjZWxlcm9tZXRlck11bHRpcGxpZXIoKTtpZih0eXBlb2YgTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yPT09InVuZGVmaW5lZCIpe0pTX0RldmljZU1vdGlvbl9hZGQoKTtpZihjYWxsYmFjayE9MClKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2s9Y2FsbGJhY2s7cmV0dXJufWlmKGNhbGxiYWNrIT0wKUpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9jYWxsYmFjaz1jYWxsYmFjaztmdW5jdGlvbiBJbml0aWFsaXplTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yKGZyZXF1ZW5jeSl7SlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yPW5ldyBMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3Ioe2ZyZXF1ZW5jeTpmcmVxdWVuY3kscmVmZXJlbmNlRnJhbWU6ImRldmljZSJ9KTtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3IuYWRkRXZlbnRMaXN0ZW5lcigicmVhZGluZyIsSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX2V2ZW50SGFuZGxlcik7SlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXt3YXJuT25jZShlLmVycm9yP2UuZXJyb3I6ZSl9KTtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3Iuc3RhcnQoKTtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZnJlcXVlbmN5PWZyZXF1ZW5jeX1pZihKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3Ipe2lmKEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9mcmVxdWVuY3khPWZyZXF1ZW5jeSl7SlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yLnN0b3AoKTtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZGluZyIsSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX2V2ZW50SGFuZGxlcik7SW5pdGlhbGl6ZUxpbmVhckFjY2VsZXJhdGlvblNlbnNvcihmcmVxdWVuY3kpfX1lbHNlIGlmKEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9mcmVxdWVuY3lSZXF1ZXN0IT0wKXtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3l9ZWxzZXtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3k7bmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJhY2NlbGVyb21ldGVyIn0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtpZihyZXN1bHQuc3RhdGU9PT0iZ3JhbnRlZCIpe0luaXRpYWxpemVMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3IoSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX2ZyZXF1ZW5jeVJlcXVlc3QpfWVsc2V7d2Fybk9uY2UoIk5vIHBlcm1pc3Npb24gdG8gdXNlIExpbmVhckFjY2VsZXJhdGlvblNlbnNvci4iKX1KU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD0wfSl9fWZ1bmN0aW9uIF9KU19HcmF2aXR5U2Vuc29yX1N0YXJ0KGNhbGxiYWNrLGZyZXF1ZW5jeSl7aWYodHlwZW9mIEdyYXZpdHlTZW5zb3I9PT0idW5kZWZpbmVkIil7X0pTX0FjY2VsZXJvbWV0ZXJfU3RhcnQoMCxNYXRoLm1heChmcmVxdWVuY3ksSlNfQWNjZWxlcm9tZXRlcl9mcmVxdWVuY3kpKTtfSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX1N0YXJ0KDAsTWF0aC5tYXgoZnJlcXVlbmN5LEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9mcmVxdWVuY3kpKTtKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrPWNhbGxiYWNrO3JldHVybn1KU19EZWZpbmVBY2NlbGVyb21ldGVyTXVsdGlwbGllcigpO0pTX0dyYXZpdHlTZW5zb3JfY2FsbGJhY2s9Y2FsbGJhY2s7ZnVuY3Rpb24gSW5pdGlhbGl6ZUdyYXZpdHlTZW5zb3IoZnJlcXVlbmN5KXtKU19HcmF2aXR5U2Vuc29yPW5ldyBHcmF2aXR5U2Vuc29yKHtmcmVxdWVuY3k6ZnJlcXVlbmN5LHJlZmVyZW5jZUZyYW1lOiJkZXZpY2UifSk7SlNfR3Jhdml0eVNlbnNvci5hZGRFdmVudExpc3RlbmVyKCJyZWFkaW5nIixKU19HcmF2aXR5U2Vuc29yX2V2ZW50SGFuZGxlcik7SlNfR3Jhdml0eVNlbnNvci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oZSl7d2Fybk9uY2UoZS5lcnJvcj9lLmVycm9yOmUpfSk7SlNfR3Jhdml0eVNlbnNvci5zdGFydCgpfWlmKEpTX0dyYXZpdHlTZW5zb3Ipe0pTX0dyYXZpdHlTZW5zb3Iuc3RvcCgpO0pTX0dyYXZpdHlTZW5zb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZGluZyIsSlNfR3Jhdml0eVNlbnNvcl9ldmVudEhhbmRsZXIpO0luaXRpYWxpemVHcmF2aXR5U2Vuc29yKGZyZXF1ZW5jeSl9ZWxzZSBpZihKU19HcmF2aXR5U2Vuc29yX2ZyZXF1ZW5jeVJlcXVlc3QhPTApe0pTX0dyYXZpdHlTZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3l9ZWxzZXtKU19HcmF2aXR5U2Vuc29yX2ZyZXF1ZW5jeVJlcXVlc3Q9ZnJlcXVlbmN5O25hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZToiYWNjZWxlcm9tZXRlciJ9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7aWYocmVzdWx0LnN0YXRlPT09ImdyYW50ZWQiKXtJbml0aWFsaXplR3Jhdml0eVNlbnNvcihKU19HcmF2aXR5U2Vuc29yX2ZyZXF1ZW5jeVJlcXVlc3QpfWVsc2V7d2Fybk9uY2UoIk5vIHBlcm1pc3Npb24gdG8gdXNlIEdyYXZpdHlTZW5zb3IuIil9SlNfR3Jhdml0eVNlbnNvcl9mcmVxdWVuY3lSZXF1ZXN0PTB9KX19ZnVuY3Rpb24gX0pTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9TdG9wKCl7aWYoSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yKXtpZih0eXBlb2YgR3Jhdml0eVNlbnNvciE9PSJ1bmRlZmluZWQifHxKU19HcmF2aXR5U2Vuc29yX2NhbGxiYWNrPT0wKXtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3Iuc3RvcCgpO0pTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvci5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkaW5nIixKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZXZlbnRIYW5kbGVyKTtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3I9bnVsbH1KU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2s9MDtKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfZnJlcXVlbmN5PTB9ZWxzZSBpZihKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2shPTApe0pTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9jYWxsYmFjaz0wO0pTX0RldmljZU1vdGlvbl9yZW1vdmUoKX19ZnVuY3Rpb24gX0pTX0dyYXZpdHlTZW5zb3JfU3RvcCgpe0pTX0dyYXZpdHlTZW5zb3JfY2FsbGJhY2s9MDtpZih0eXBlb2YgR3Jhdml0eVNlbnNvcj09PSJ1bmRlZmluZWQiKXtpZihKU19BY2NlbGVyb21ldGVyX2NhbGxiYWNrPT0wKV9KU19BY2NlbGVyb21ldGVyX1N0b3AoKTtpZihKU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfY2FsbGJhY2s9PTApX0pTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvcl9TdG9wKCk7cmV0dXJufWlmKEpTX0dyYXZpdHlTZW5zb3Ipe0pTX0dyYXZpdHlTZW5zb3Iuc3RvcCgpO0pTX0dyYXZpdHlTZW5zb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZGluZyIsSlNfR3Jhdml0eVNlbnNvcl9ldmVudEhhbmRsZXIpO0pTX0dyYXZpdHlTZW5zb3I9bnVsbH19ZnVuY3Rpb24gX0pTX0d1YXJkQWdhaW5zdEpzRXhjZXB0aW9ucyhjYil7dHJ5eyhmdW5jdGlvbigpe2R5bkNhbGxfdi5jYWxsKG51bGwsY2IpfSkoKX1jYXRjaChlKXtjb25zb2xlLndhcm4oZSl9fXZhciBKU19HeXJvc2NvcGU9bnVsbDtmdW5jdGlvbiBfSlNfR3lyb3Njb3BlX0lzUnVubmluZygpe3JldHVybiBKU19HeXJvc2NvcGUmJkpTX0d5cm9zY29wZS5hY3RpdmF0ZWR8fEpTX0d5cm9zY29wZV9jYWxsYmFjayE9MH1mdW5jdGlvbiBKU19HeXJvc2NvcGVfZXZlbnRIYW5kbGVyKCl7aWYoSlNfR3lyb3Njb3BlX2NhbGxiYWNrIT0wKWR5bkNhbGxfdmZmZihKU19HeXJvc2NvcGVfY2FsbGJhY2ssSlNfR3lyb3Njb3BlLngsSlNfR3lyb3Njb3BlLnksSlNfR3lyb3Njb3BlLnopfXZhciBKU19HeXJvc2NvcGVfZnJlcXVlbmN5UmVxdWVzdD0wO2Z1bmN0aW9uIF9KU19HeXJvc2NvcGVfU3RhcnQoY2FsbGJhY2ssZnJlcXVlbmN5KXtpZih0eXBlb2YgR3lyb3Njb3BlPT09InVuZGVmaW5lZCIpe0pTX0RldmljZU1vdGlvbl9hZGQoKTtKU19HeXJvc2NvcGVfY2FsbGJhY2s9Y2FsbGJhY2s7cmV0dXJufUpTX0d5cm9zY29wZV9jYWxsYmFjaz1jYWxsYmFjaztmdW5jdGlvbiBJbml0aWFsaXplR3lyb3Njb3BlKGZyZXF1ZW5jeSl7SlNfR3lyb3Njb3BlPW5ldyBHeXJvc2NvcGUoe2ZyZXF1ZW5jeTpmcmVxdWVuY3kscmVmZXJlbmNlRnJhbWU6ImRldmljZSJ9KTtKU19HeXJvc2NvcGUuYWRkRXZlbnRMaXN0ZW5lcigicmVhZGluZyIsSlNfR3lyb3Njb3BlX2V2ZW50SGFuZGxlcik7SlNfR3lyb3Njb3BlLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXt3YXJuT25jZShlLmVycm9yP2UuZXJyb3I6ZSl9KTtKU19HeXJvc2NvcGUuc3RhcnQoKX1pZihKU19HeXJvc2NvcGUpe0pTX0d5cm9zY29wZS5zdG9wKCk7SlNfR3lyb3Njb3BlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWRpbmciLEpTX0d5cm9zY29wZV9ldmVudEhhbmRsZXIpO0luaXRpYWxpemVHeXJvc2NvcGUoZnJlcXVlbmN5KX1lbHNlIGlmKEpTX0d5cm9zY29wZV9mcmVxdWVuY3lSZXF1ZXN0IT0wKXtKU19HeXJvc2NvcGVfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3l9ZWxzZXtKU19HeXJvc2NvcGVfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3k7bmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJneXJvc2NvcGUifSkudGhlbihmdW5jdGlvbihyZXN1bHQpe2lmKHJlc3VsdC5zdGF0ZT09PSJncmFudGVkIil7SW5pdGlhbGl6ZUd5cm9zY29wZShKU19HeXJvc2NvcGVfZnJlcXVlbmN5UmVxdWVzdCl9ZWxzZXt3YXJuT25jZSgiTm8gcGVybWlzc2lvbiB0byB1c2UgR3lyb3Njb3BlLiIpfUpTX0d5cm9zY29wZV9mcmVxdWVuY3lSZXF1ZXN0PTB9KX19ZnVuY3Rpb24gX0pTX0d5cm9zY29wZV9TdG9wKCl7aWYoSlNfR3lyb3Njb3BlKXtKU19HeXJvc2NvcGUuc3RvcCgpO0pTX0d5cm9zY29wZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkaW5nIixKU19HeXJvc2NvcGVfZXZlbnRIYW5kbGVyKTtKU19HeXJvc2NvcGU9bnVsbDtKU19HeXJvc2NvcGVfY2FsbGJhY2s9MH1lbHNlIGlmKEpTX0d5cm9zY29wZV9jYWxsYmFjayE9MCl7SlNfR3lyb3Njb3BlX2NhbGxiYWNrPTA7SlNfRGV2aWNlTW90aW9uX3JlbW92ZSgpfX1mdW5jdGlvbiBfSlNfSW5pdF9Db250ZXh0TWVudUhhbmRsZXIoKXtjb25zdCBfaGFuZGxlQ29udGV4dE1lbnU9ZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50LnRhcmdldC5sb2NhbE5hbWUhPT0iY2FudmFzIilfUmVsZWFzZUtleXMoKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLF9oYW5kbGVDb250ZXh0TWVudSk7TW9kdWxlLmRlaW5pdGlhbGl6ZXJzLnB1c2goZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsX2hhbmRsZUNvbnRleHRNZW51KX0pfWZ1bmN0aW9uIF9KU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfSXNSdW5uaW5nKCl7cmV0dXJuIEpTX0xpbmVhckFjY2VsZXJhdGlvblNlbnNvciYmSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yLmFjdGl2YXRlZHx8SlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX2NhbGxiYWNrIT0wfWZ1bmN0aW9uIF9KU19Mb2dfRHVtcChwdHIsdHlwZSl7dmFyIHN0cj1VVEY4VG9TdHJpbmcocHRyKTtpZih0eXBlb2YgZHVtcD09ImZ1bmN0aW9uIilkdW1wKHN0cik7c3dpdGNoKHR5cGUpe2Nhc2UgMDpjYXNlIDE6Y2FzZSA0OmNvbnNvbGUuZXJyb3Ioc3RyKTtyZXR1cm47Y2FzZSAyOmNvbnNvbGUud2FybihzdHIpO3JldHVybjtjYXNlIDM6Y2FzZSA1OmNvbnNvbGUubG9nKHN0cik7cmV0dXJuO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5rbm93biBjb25zb2xlIG1lc3NhZ2UgdHlwZSEiKTtjb25zb2xlLmVycm9yKHN0cil9fWZ1bmN0aW9uIF9KU19Mb2dfU3RhY2tUcmFjZShidWZmZXIsYnVmZmVyU2l6ZSl7dmFyIHRyYWNlPXN0YWNrVHJhY2UoKTtpZihidWZmZXIpc3RyaW5nVG9VVEY4KHRyYWNlLGJ1ZmZlcixidWZmZXJTaXplKTtyZXR1cm4gbGVuZ3RoQnl0ZXNVVEY4KHRyYWNlKX12YXIgSlNfT3JpZW50YXRpb25TZW5zb3I9bnVsbDt2YXIgSlNfT3JpZW50YXRpb25TZW5zb3JfY2FsbGJhY2s9MDtmdW5jdGlvbiBfSlNfT3JpZW50YXRpb25TZW5zb3JfSXNSdW5uaW5nKCl7cmV0dXJuIEpTX09yaWVudGF0aW9uU2Vuc29yJiZKU19PcmllbnRhdGlvblNlbnNvci5hY3RpdmF0ZWR8fEpTX09yaWVudGF0aW9uU2Vuc29yX2NhbGxiYWNrIT0wfWZ1bmN0aW9uIEpTX09yaWVudGF0aW9uU2Vuc29yX2V2ZW50SGFuZGxlcigpe2lmKEpTX09yaWVudGF0aW9uU2Vuc29yX2NhbGxiYWNrIT0wKWR5bkNhbGxfdmZmZmYoSlNfT3JpZW50YXRpb25TZW5zb3JfY2FsbGJhY2ssSlNfT3JpZW50YXRpb25TZW5zb3IucXVhdGVybmlvblswXSxKU19PcmllbnRhdGlvblNlbnNvci5xdWF0ZXJuaW9uWzFdLEpTX09yaWVudGF0aW9uU2Vuc29yLnF1YXRlcm5pb25bMl0sSlNfT3JpZW50YXRpb25TZW5zb3IucXVhdGVybmlvblszXSl9dmFyIEpTX09yaWVudGF0aW9uU2Vuc29yX2ZyZXF1ZW5jeVJlcXVlc3Q9MDtmdW5jdGlvbiBKU19EZXZpY2VPcmllbnRhdGlvbl9ldmVudEhhbmRsZXIoZXZlbnQpe2lmKEpTX09yaWVudGF0aW9uU2Vuc29yX2NhbGxiYWNrKXt2YXIgZGVnVG9SYWQ9TWF0aC5QSS8xODA7dmFyIHg9ZXZlbnQuYmV0YSpkZWdUb1JhZDt2YXIgeT1ldmVudC5nYW1tYSpkZWdUb1JhZDt2YXIgej1ldmVudC5hbHBoYSpkZWdUb1JhZDt2YXIgY3g9TWF0aC5jb3MoeC8yKTt2YXIgc3g9TWF0aC5zaW4oeC8yKTt2YXIgY3k9TWF0aC5jb3MoeS8yKTt2YXIgc3k9TWF0aC5zaW4oeS8yKTt2YXIgY3o9TWF0aC5jb3Moei8yKTt2YXIgc3o9TWF0aC5zaW4oei8yKTt2YXIgcXg9c3gqY3kqY3otY3gqc3kqc3o7dmFyIHF5PWN4KnN5KmN6K3N4KmN5KnN6O3ZhciBxej1jeCpjeSpzeitzeCpzeSpjejt2YXIgcXc9Y3gqY3kqY3otc3gqc3kqc3o7ZHluQ2FsbF92ZmZmZihKU19PcmllbnRhdGlvblNlbnNvcl9jYWxsYmFjayxxeCxxeSxxeixxdyl9fWZ1bmN0aW9uIF9KU19PcmllbnRhdGlvblNlbnNvcl9TdGFydChjYWxsYmFjayxmcmVxdWVuY3kpe2lmKHR5cGVvZiBSZWxhdGl2ZU9yaWVudGF0aW9uU2Vuc29yPT09InVuZGVmaW5lZCIpe2lmKEpTX09yaWVudGF0aW9uU2Vuc29yX2NhbGxiYWNrPT0wKXtKU19PcmllbnRhdGlvblNlbnNvcl9jYWxsYmFjaz1jYWxsYmFjaztKU19SZXF1ZXN0RGV2aWNlU2Vuc29yUGVybWlzc2lvbnMoMSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImRldmljZW9yaWVudGF0aW9uIixKU19EZXZpY2VPcmllbnRhdGlvbl9ldmVudEhhbmRsZXIpfXJldHVybn1KU19PcmllbnRhdGlvblNlbnNvcl9jYWxsYmFjaz1jYWxsYmFjaztmdW5jdGlvbiBJbml0aWFsaXplT3JpZW50YXRpb25TZW5zb3IoZnJlcXVlbmN5KXtKU19PcmllbnRhdGlvblNlbnNvcj1uZXcgUmVsYXRpdmVPcmllbnRhdGlvblNlbnNvcih7ZnJlcXVlbmN5OmZyZXF1ZW5jeSxyZWZlcmVuY2VGcmFtZToiZGV2aWNlIn0pO0pTX09yaWVudGF0aW9uU2Vuc29yLmFkZEV2ZW50TGlzdGVuZXIoInJlYWRpbmciLEpTX09yaWVudGF0aW9uU2Vuc29yX2V2ZW50SGFuZGxlcik7SlNfT3JpZW50YXRpb25TZW5zb3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGUpe3dhcm5PbmNlKGUuZXJyb3I/ZS5lcnJvcjplKX0pO0pTX09yaWVudGF0aW9uU2Vuc29yLnN0YXJ0KCl9aWYoSlNfT3JpZW50YXRpb25TZW5zb3Ipe0pTX09yaWVudGF0aW9uU2Vuc29yLnN0b3AoKTtKU19PcmllbnRhdGlvblNlbnNvci5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkaW5nIixKU19PcmllbnRhdGlvblNlbnNvcl9ldmVudEhhbmRsZXIpO0luaXRpYWxpemVPcmllbnRhdGlvblNlbnNvcihmcmVxdWVuY3kpfWVsc2UgaWYoSlNfT3JpZW50YXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdCE9MCl7SlNfT3JpZW50YXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD1mcmVxdWVuY3l9ZWxzZXtKU19PcmllbnRhdGlvblNlbnNvcl9mcmVxdWVuY3lSZXF1ZXN0PWZyZXF1ZW5jeTtQcm9taXNlLmFsbChbbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJhY2NlbGVyb21ldGVyIn0pLG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZToiZ3lyb3Njb3BlIn0pXSkudGhlbihmdW5jdGlvbihyZXN1bHRzKXtpZihyZXN1bHRzLmV2ZXJ5KGZ1bmN0aW9uKHJlc3VsdCl7cmV0dXJuIHJlc3VsdC5zdGF0ZT09PSJncmFudGVkIn0pKXtJbml0aWFsaXplT3JpZW50YXRpb25TZW5zb3IoSlNfT3JpZW50YXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdCl9ZWxzZXt3YXJuT25jZSgiTm8gcGVybWlzc2lvbnMgdG8gdXNlIFJlbGF0aXZlT3JpZW50YXRpb25TZW5zb3IuIil9SlNfT3JpZW50YXRpb25TZW5zb3JfZnJlcXVlbmN5UmVxdWVzdD0wfSl9fWZ1bmN0aW9uIF9KU19PcmllbnRhdGlvblNlbnNvcl9TdG9wKCl7aWYoSlNfT3JpZW50YXRpb25TZW5zb3Ipe0pTX09yaWVudGF0aW9uU2Vuc29yLnN0b3AoKTtKU19PcmllbnRhdGlvblNlbnNvci5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkaW5nIixKU19PcmllbnRhdGlvblNlbnNvcl9ldmVudEhhbmRsZXIpO0pTX09yaWVudGF0aW9uU2Vuc29yPW51bGx9ZWxzZSBpZihKU19PcmllbnRhdGlvblNlbnNvcl9jYWxsYmFjayE9MCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRldmljZW9yaWVudGF0aW9uIixKU19EZXZpY2VPcmllbnRhdGlvbl9ldmVudEhhbmRsZXIpfUpTX09yaWVudGF0aW9uU2Vuc29yX2NhbGxiYWNrPTB9ZnVuY3Rpb24gX0pTX1JlcXVlc3REZXZpY2VTZW5zb3JQZXJtaXNzaW9uc09uVG91Y2goKXtpZihKU19EZXZpY2VTZW5zb3JQZXJtaXNzaW9ucz09MClyZXR1cm47SlNfUmVxdWVzdERldmljZVNlbnNvclBlcm1pc3Npb25zKEpTX0RldmljZVNlbnNvclBlcm1pc3Npb25zKX1mdW5jdGlvbiBfSlNfUnVuUXVpdENhbGxiYWNrcygpe01vZHVsZS5RdWl0Q2xlYW51cCgpfXZhciBKU19TY3JlZW5PcmllbnRhdGlvbl9jYWxsYmFjaz0wO2Z1bmN0aW9uIEpTX1NjcmVlbk9yaWVudGF0aW9uX2V2ZW50SGFuZGxlcigpe2lmKEpTX1NjcmVlbk9yaWVudGF0aW9uX2NhbGxiYWNrKWR5bkNhbGxfdmlpaShKU19TY3JlZW5PcmllbnRhdGlvbl9jYWxsYmFjayx3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQsc2NyZWVuLm9yaWVudGF0aW9uP3NjcmVlbi5vcmllbnRhdGlvbi5hbmdsZTp3aW5kb3cub3JpZW50YXRpb24pfWZ1bmN0aW9uIF9KU19TY3JlZW5PcmllbnRhdGlvbl9EZUluaXQoKXtKU19TY3JlZW5PcmllbnRhdGlvbl9jYWxsYmFjaz0wO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEpTX1NjcmVlbk9yaWVudGF0aW9uX2V2ZW50SGFuZGxlcik7aWYoc2NyZWVuLm9yaWVudGF0aW9uKXtzY3JlZW4ub3JpZW50YXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixKU19TY3JlZW5PcmllbnRhdGlvbl9ldmVudEhhbmRsZXIpfX1mdW5jdGlvbiBfSlNfU2NyZWVuT3JpZW50YXRpb25fSW5pdChjYWxsYmFjayl7aWYoIUpTX1NjcmVlbk9yaWVudGF0aW9uX2NhbGxiYWNrKXtpZihzY3JlZW4ub3JpZW50YXRpb24pe3NjcmVlbi5vcmllbnRhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEpTX1NjcmVlbk9yaWVudGF0aW9uX2V2ZW50SGFuZGxlcil9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSlNfU2NyZWVuT3JpZW50YXRpb25fZXZlbnRIYW5kbGVyKTtKU19TY3JlZW5PcmllbnRhdGlvbl9jYWxsYmFjaz1jYWxsYmFjaztzZXRUaW1lb3V0KEpTX1NjcmVlbk9yaWVudGF0aW9uX2V2ZW50SGFuZGxlciwwKX19dmFyIEpTX1NjcmVlbk9yaWVudGF0aW9uX3JlcXVlc3RlZExvY2tUeXBlPS0xO3ZhciBKU19TY3JlZW5PcmllbnRhdGlvbl9hcHBsaWVkTG9ja1R5cGU9LTE7dmFyIEpTX1NjcmVlbk9yaWVudGF0aW9uX3RpbWVvdXRJRD0tMTtmdW5jdGlvbiBfSlNfU2NyZWVuT3JpZW50YXRpb25fTG9jayhvcmllbnRhdGlvbkxvY2tUeXBlKXtpZighc2NyZWVuLm9yaWVudGF0aW9ufHwhc2NyZWVuLm9yaWVudGF0aW9uLmxvY2spe3JldHVybn1mdW5jdGlvbiBhcHBseUxvY2soKXtKU19TY3JlZW5PcmllbnRhdGlvbl9hcHBsaWVkTG9ja1R5cGU9SlNfU2NyZWVuT3JpZW50YXRpb25fcmVxdWVzdGVkTG9ja1R5cGU7dmFyIHNjcmVlbk9yaWVudGF0aW9ucz1bImFueSIsMCwibGFuZHNjYXBlIiwicG9ydHJhaXQiLCJwb3J0cmFpdC1wcmltYXJ5IiwicG9ydHJhaXQtc2Vjb25kYXJ5IiwibGFuZHNjYXBlLXByaW1hcnkiLCJsYW5kc2NhcGUtc2Vjb25kYXJ5Il07dmFyIHR5cGU9c2NyZWVuT3JpZW50YXRpb25zW0pTX1NjcmVlbk9yaWVudGF0aW9uX2FwcGxpZWRMb2NrVHlwZV07c2NyZWVuLm9yaWVudGF0aW9uLmxvY2sodHlwZSkudGhlbihmdW5jdGlvbigpe2lmKEpTX1NjcmVlbk9yaWVudGF0aW9uX3JlcXVlc3RlZExvY2tUeXBlIT1KU19TY3JlZW5PcmllbnRhdGlvbl9hcHBsaWVkTG9ja1R5cGUpe0pTX1NjcmVlbk9yaWVudGF0aW9uX3RpbWVvdXRJRD1zZXRUaW1lb3V0KGFwcGx5TG9jaywwKX1lbHNle0pTX1NjcmVlbk9yaWVudGF0aW9uX3RpbWVvdXRJRD0tMX19KS5jYXRjaChmdW5jdGlvbihlcnIpe3dhcm5PbmNlKGVycik7SlNfU2NyZWVuT3JpZW50YXRpb25fdGltZW91dElEPS0xfSl9SlNfU2NyZWVuT3JpZW50YXRpb25fcmVxdWVzdGVkTG9ja1R5cGU9b3JpZW50YXRpb25Mb2NrVHlwZTtpZihKU19TY3JlZW5PcmllbnRhdGlvbl90aW1lb3V0SUQ9PS0xJiZvcmllbnRhdGlvbkxvY2tUeXBlIT1KU19TY3JlZW5PcmllbnRhdGlvbl9hcHBsaWVkTG9ja1R5cGUpe0pTX1NjcmVlbk9yaWVudGF0aW9uX3RpbWVvdXRJRD1zZXRUaW1lb3V0KGFwcGx5TG9jaywwKX19dmFyIFdFQkF1ZGlvPXthdWRpb0luc3RhbmNlSWRDb3VudGVyOjAsYXVkaW9JbnN0YW5jZXM6e30sYXVkaW9Db250ZXh0Om51bGwsYXVkaW9XZWJFbmFibGVkOjAsYXVkaW9DYWNoZTpbXSxwZW5kaW5nQXVkaW9Tb3VyY2VzOnt9fTtmdW5jdGlvbiBqc0F1ZGlvTWl4aW5TZXRQaXRjaChzb3VyY2Upe3NvdXJjZS5lc3RpbWF0ZVBsYXliYWNrUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD0oV0VCQXVkaW8uYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lLXNvdXJjZS5wbGF5YmFja1N0YXJ0VGltZSkqc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZTtpZihzb3VyY2UubG9vcCYmdD49c291cmNlLmxvb3BTdGFydCl7dD0odC1zb3VyY2UubG9vcFN0YXJ0KSUoc291cmNlLmxvb3BFbmQtc291cmNlLmxvb3BTdGFydCkrc291cmNlLmxvb3BTdGFydH1yZXR1cm4gdH07c291cmNlLnNldFBpdGNoPWZ1bmN0aW9uKG5ld1BpdGNoKXt2YXIgY3VyUG9zaXRpb249c291cmNlLmVzdGltYXRlUGxheWJhY2tQb3NpdGlvbigpO2lmKGN1clBvc2l0aW9uPj0wKXtzb3VyY2UucGxheWJhY2tTdGFydFRpbWU9V0VCQXVkaW8uYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lLWN1clBvc2l0aW9uL25ld1BpdGNofWlmKHNvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUhPT1uZXdQaXRjaClzb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlPW5ld1BpdGNofX1mdW5jdGlvbiBqc0F1ZGlvQ3JlYXRlVW5jb21wcmVzc2VkU291bmRDbGlwKGJ1ZmZlcixlcnJvcil7dmFyIHNvdW5kQ2xpcD17YnVmZmVyOmJ1ZmZlcixlcnJvcjplcnJvcn07c291bmRDbGlwLnJlbGVhc2U9ZnVuY3Rpb24oKXt9O3NvdW5kQ2xpcC5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtpZighdGhpcy5idWZmZXIpe2NvbnNvbGUubG9nKCJUcnlpbmcgdG8gZ2V0IGxlbmd0aCBvZiBzb3VuZCB3aGljaCBpcyBub3QgbG9hZGVkLiIpO3JldHVybiAwfXZhciBzYW1wbGVSYXRlUmF0aW89NDQxMDAvdGhpcy5idWZmZXIuc2FtcGxlUmF0ZTtyZXR1cm4gdGhpcy5idWZmZXIubGVuZ3RoKnNhbXBsZVJhdGVSYXRpb307c291bmRDbGlwLmdldERhdGE9ZnVuY3Rpb24ocHRyLGxlbmd0aCl7aWYoIXRoaXMuYnVmZmVyKXtjb25zb2xlLmxvZygiVHJ5aW5nIHRvIGdldCBkYXRhIG9mIHNvdW5kIHdoaWNoIGlzIG5vdCBsb2FkZWQuIik7cmV0dXJuIDB9dmFyIHN0YXJ0T3V0cHV0QnVmZmVyPXB0cj4+Mjt2YXIgb3V0cHV0PUhFQVBGMzIuc3ViYXJyYXkoc3RhcnRPdXRwdXRCdWZmZXIsc3RhcnRPdXRwdXRCdWZmZXIrKGxlbmd0aD4+MikpO3ZhciBudW1NYXhTYW1wbGVzPU1hdGguZmxvb3IoKGxlbmd0aD4+MikvdGhpcy5idWZmZXIubnVtYmVyT2ZDaGFubmVscyk7dmFyIG51bVJlYWRTYW1wbGVzPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aCxudW1NYXhTYW1wbGVzKTtmb3IodmFyIGk9MDtpPHRoaXMuYnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7aSsrKXt2YXIgY2hhbm5lbERhdGE9dGhpcy5idWZmZXIuZ2V0Q2hhbm5lbERhdGEoaSkuc3ViYXJyYXkoMCxudW1SZWFkU2FtcGxlcyk7b3V0cHV0LnNldChjaGFubmVsRGF0YSxpKm51bVJlYWRTYW1wbGVzKX1yZXR1cm4gbnVtUmVhZFNhbXBsZXMqdGhpcy5idWZmZXIubnVtYmVyT2ZDaGFubmVscyo0fTtzb3VuZENsaXAuZ2V0TnVtYmVyT2ZDaGFubmVscz1mdW5jdGlvbigpe2lmKCF0aGlzLmJ1ZmZlcil7Y29uc29sZS5sb2coIlRyeWluZyB0byBnZXQgbWV0YWRhdGEgb2Ygc291bmQgd2hpY2ggaXMgbm90IGxvYWRlZC4iKTtyZXR1cm4gMH1yZXR1cm4gdGhpcy5idWZmZXIubnVtYmVyT2ZDaGFubmVsc307c291bmRDbGlwLmdldEZyZXF1ZW5jeT1mdW5jdGlvbigpe2lmKCF0aGlzLmJ1ZmZlcil7Y29uc29sZS5sb2coIlRyeWluZyB0byBnZXQgbWV0YWRhdGEgb2Ygc291bmQgd2hpY2ggaXMgbm90IGxvYWRlZC4iKTtyZXR1cm4gMH1yZXR1cm4gdGhpcy5idWZmZXIuc2FtcGxlUmF0ZX07c291bmRDbGlwLmNyZWF0ZVNvdXJjZU5vZGU9ZnVuY3Rpb24oKXtpZighdGhpcy5idWZmZXIpe2NvbnNvbGUubG9nKCJUcnlpbmcgdG8gcGxheSBzb3VuZCB3aGljaCBpcyBub3QgbG9hZGVkLiIpfXZhciBzb3VyY2U9V0VCQXVkaW8uYXVkaW9Db250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3NvdXJjZS5idWZmZXI9dGhpcy5idWZmZXI7anNBdWRpb01peGluU2V0UGl0Y2goc291cmNlKTtyZXR1cm4gc291cmNlfTtyZXR1cm4gc291bmRDbGlwfWZ1bmN0aW9uIGpzQXVkaW9DcmVhdGVDaGFubmVsKGNhbGxiYWNrLHVzZXJEYXRhKXt2YXIgY2hhbm5lbD17Y2FsbGJhY2s6Y2FsbGJhY2ssdXNlckRhdGE6dXNlckRhdGEsc291cmNlOm51bGwsZ2FpbjpXRUJBdWRpby5hdWRpb0NvbnRleHQuY3JlYXRlR2FpbigpLHBhbm5lcjpXRUJBdWRpby5hdWRpb0NvbnRleHQuY3JlYXRlUGFubmVyKCksdGhyZWVEOmZhbHNlLGxvb3A6ZmFsc2UsbG9vcFN0YXJ0OjAsbG9vcEVuZDowLHBpdGNoOjF9O2NoYW5uZWwucGFubmVyLnJvbGxvZmZGYWN0b3I9MDtjaGFubmVsLnJlbGVhc2U9ZnVuY3Rpb24oKXt0aGlzLmRpc2Nvbm5lY3RTb3VyY2UoKTt0aGlzLmdhaW4uZGlzY29ubmVjdCgpO3RoaXMucGFubmVyLmRpc2Nvbm5lY3QoKX07Y2hhbm5lbC5wbGF5U291bmRDbGlwPWZ1bmN0aW9uKHNvdW5kQ2xpcCxzdGFydFRpbWUsc3RhcnRPZmZzZXQpe3RyeXt2YXIgc2VsZj10aGlzO3RoaXMuc291cmNlPXNvdW5kQ2xpcC5jcmVhdGVTb3VyY2VOb2RlKCk7dGhpcy5zZXR1cFBhbm5pbmcoKTt0aGlzLnNvdXJjZS5vbmVuZGVkPWZ1bmN0aW9uKCl7c2VsZi5zb3VyY2UuaXNTdG9wcGVkPXRydWU7c2VsZi5kaXNjb25uZWN0U291cmNlKCk7aWYoc2VsZi5jYWxsYmFjayl7ZHluQ2FsbCgidmkiLHNlbGYuY2FsbGJhY2ssW3NlbGYudXNlckRhdGFdKX19O3RoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wO3RoaXMuc291cmNlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydDt0aGlzLnNvdXJjZS5sb29wRW5kPXRoaXMubG9vcEVuZDt0aGlzLnNvdXJjZS5zdGFydChzdGFydFRpbWUsc3RhcnRPZmZzZXQpO3RoaXMuc291cmNlLnBsYXliYWNrU3RhcnRUaW1lPXN0YXJ0VGltZS1zdGFydE9mZnNldC90aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUudmFsdWU7dGhpcy5zb3VyY2Uuc2V0UGl0Y2godGhpcy5waXRjaCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcigiQ2hhbm5lbC5wbGF5U291bmRDbGlwIGVycm9yLiBFeGNlcHRpb246ICIrZSl9fTtjaGFubmVsLnN0b3A9ZnVuY3Rpb24oZGVsYXkpe2lmKCF0aGlzLnNvdXJjZSl7cmV0dXJufXRyeXtjaGFubmVsLnNvdXJjZS5zdG9wKFdFQkF1ZGlvLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZStkZWxheSl9Y2F0Y2goZSl7fWlmKGRlbGF5PT0wKXt0aGlzLmRpc2Nvbm5lY3RTb3VyY2UoKX19O2NoYW5uZWwuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zb3VyY2Upe3JldHVybiB0cnVlfWlmKHRoaXMuc291cmNlLmlzUGF1c2VkTW9ja05vZGUpe3JldHVybiB0cnVlfWlmKHRoaXMuc291cmNlLm1lZGlhRWxlbWVudCl7cmV0dXJuIHRoaXMuc291cmNlLm1lZGlhRWxlbWVudC5wYXVzZWR8fHRoaXMuc291cmNlLnBhdXNlUmVxdWVzdGVkfXJldHVybiBmYWxzZX07Y2hhbm5lbC5wYXVzZT1mdW5jdGlvbigpe2lmKCF0aGlzLnNvdXJjZXx8dGhpcy5zb3VyY2UuaXNQYXVzZWRNb2NrTm9kZSl7cmV0dXJufWlmKHRoaXMuc291cmNlLm1lZGlhRWxlbWVudCl7dGhpcy5zb3VyY2UuX3BhdXNlTWVkaWFFbGVtZW50KCk7cmV0dXJufXZhciBwYXVzZWRTb3VyY2U9e2lzUGF1c2VkTW9ja05vZGU6dHJ1ZSxidWZmZXI6dGhpcy5zb3VyY2UuYnVmZmVyLGxvb3A6dGhpcy5zb3VyY2UubG9vcCxsb29wU3RhcnQ6dGhpcy5zb3VyY2UubG9vcFN0YXJ0LGxvb3BFbmQ6dGhpcy5zb3VyY2UubG9vcEVuZCxwbGF5YmFja1JhdGU6dGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlLHNjaGVkdWxlZFN0b3BUaW1lOnVuZGVmaW5lZCxwbGF5YmFja1BhdXNlZEF0UG9zaXRpb246dGhpcy5zb3VyY2UuZXN0aW1hdGVQbGF5YmFja1Bvc2l0aW9uKCksc2V0UGl0Y2g6ZnVuY3Rpb24odil7dGhpcy5wbGF5YmFja1JhdGU9dn0sc3RvcDpmdW5jdGlvbih3aGVuKXt0aGlzLnNjaGVkdWxlZFN0b3BUaW1lPXdoZW59fTt0aGlzLnN0b3AoMCk7dGhpcy5kaXNjb25uZWN0U291cmNlKCk7dGhpcy5zb3VyY2U9cGF1c2VkU291cmNlfTtjaGFubmVsLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMuc291cmNlJiZ0aGlzLnNvdXJjZS5tZWRpYUVsZW1lbnQpe3RoaXMuc291cmNlLnN0YXJ0KHVuZGVmaW5lZCx0aGlzLnNvdXJjZS5jdXJyZW50VGltZSk7cmV0dXJufWlmKCF0aGlzLnNvdXJjZXx8IXRoaXMuc291cmNlLmlzUGF1c2VkTW9ja05vZGUpe3JldHVybn12YXIgcGF1c2VkU291cmNlPXRoaXMuc291cmNlO3ZhciBzb3VuZENsaXA9anNBdWRpb0NyZWF0ZVVuY29tcHJlc3NlZFNvdW5kQ2xpcChwYXVzZWRTb3VyY2UuYnVmZmVyLGZhbHNlKTt0aGlzLnBsYXlTb3VuZENsaXAoc291bmRDbGlwLFdFQkF1ZGlvLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSxNYXRoLm1heCgwLHBhdXNlZFNvdXJjZS5wbGF5YmFja1BhdXNlZEF0UG9zaXRpb24pKTt0aGlzLnNvdXJjZS5sb29wPXBhdXNlZFNvdXJjZS5sb29wO3RoaXMuc291cmNlLmxvb3BTdGFydD1wYXVzZWRTb3VyY2UubG9vcFN0YXJ0O3RoaXMuc291cmNlLmxvb3BFbmQ9cGF1c2VkU291cmNlLmxvb3BFbmQ7dGhpcy5zb3VyY2Uuc2V0UGl0Y2gocGF1c2VkU291cmNlLnBsYXliYWNrUmF0ZSk7aWYodHlwZW9mIHBhdXNlZFNvdXJjZS5zY2hlZHVsZWRTdG9wVGltZSE9PSJ1bmRlZmluZWQiKXt2YXIgZGVsYXk9TWF0aC5tYXgocGF1c2VkU291cmNlLnNjaGVkdWxlZFN0b3BUaW1lLVdFQkF1ZGlvLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSwwKTt0aGlzLnN0b3AoZGVsYXkpfX07Y2hhbm5lbC5zZXRMb29wPWZ1bmN0aW9uKGxvb3Ape3RoaXMubG9vcD1sb29wO2lmKCF0aGlzLnNvdXJjZXx8dGhpcy5zb3VyY2UubG9vcD09bG9vcCl7cmV0dXJufXRoaXMuc291cmNlLmxvb3A9bG9vcH07Y2hhbm5lbC5zZXRMb29wUG9pbnRzPWZ1bmN0aW9uKGxvb3BTdGFydCxsb29wRW5kKXt0aGlzLmxvb3BTdGFydD1sb29wU3RhcnQ7dGhpcy5sb29wRW5kPWxvb3BFbmQ7aWYoIXRoaXMuc291cmNlKXtyZXR1cm59aWYodGhpcy5zb3VyY2UubG9vcFN0YXJ0IT09bG9vcFN0YXJ0KXt0aGlzLnNvdXJjZS5sb29wU3RhcnQ9bG9vcFN0YXJ0fWlmKHRoaXMuc291cmNlLmxvb3BFbmQhPT1sb29wRW5kKXt0aGlzLnNvdXJjZS5sb29wRW5kPWxvb3BFbmR9fTtjaGFubmVsLnNldDNEPWZ1bmN0aW9uKHRocmVlRCl7aWYodGhpcy50aHJlZUQ9PXRocmVlRCl7cmV0dXJufXRoaXMudGhyZWVEPXRocmVlRDtpZighdGhpcy5zb3VyY2Upe3JldHVybn10aGlzLnNldHVwUGFubmluZygpfTtjaGFubmVsLnNldFBpdGNoPWZ1bmN0aW9uKHBpdGNoKXt0aGlzLnBpdGNoPXBpdGNoO2lmKCF0aGlzLnNvdXJjZSl7cmV0dXJufXRoaXMuc291cmNlLnNldFBpdGNoKHBpdGNoKX07Y2hhbm5lbC5zZXRWb2x1bWU9ZnVuY3Rpb24odm9sdW1lKXtpZih0aGlzLmdhaW4uZ2Fpbi52YWx1ZT09dm9sdW1lKXtyZXR1cm59dGhpcy5nYWluLmdhaW4udmFsdWU9dm9sdW1lfTtjaGFubmVsLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHgseSx6KXt2YXIgcD10aGlzLnBhbm5lcjtpZihwLnBvc2l0aW9uWCl7aWYocC5wb3NpdGlvblgudmFsdWUhPT14KXAucG9zaXRpb25YLnZhbHVlPXg7aWYocC5wb3NpdGlvblkudmFsdWUhPT15KXAucG9zaXRpb25ZLnZhbHVlPXk7aWYocC5wb3NpdGlvbloudmFsdWUhPT16KXAucG9zaXRpb25aLnZhbHVlPXp9ZWxzZSBpZihwLl94IT09eHx8cC5feSE9PXl8fHAuX3ohPT16KXtwLnNldFBvc2l0aW9uKHgseSx6KTtwLl94PXg7cC5feT15O3AuX3o9en19O2NoYW5uZWwuZGlzY29ubmVjdFNvdXJjZT1mdW5jdGlvbigpe2lmKCF0aGlzLnNvdXJjZXx8dGhpcy5zb3VyY2UuaXNQYXVzZWRNb2NrTm9kZSl7cmV0dXJufWlmKHRoaXMuc291cmNlLm1lZGlhRWxlbWVudCl7dGhpcy5zb3VyY2UuX3BhdXNlTWVkaWFFbGVtZW50KCl9dGhpcy5zb3VyY2Uub25lbmRlZD1udWxsO3RoaXMuc291cmNlLmRpc2Nvbm5lY3QoKTtkZWxldGUgdGhpcy5zb3VyY2V9O2NoYW5uZWwuc2V0dXBQYW5uaW5nPWZ1bmN0aW9uKCl7aWYodGhpcy5zb3VyY2UuaXNQYXVzZWRNb2NrTm9kZSlyZXR1cm47dGhpcy5zb3VyY2UuZGlzY29ubmVjdCgpO3RoaXMucGFubmVyLmRpc2Nvbm5lY3QoKTt0aGlzLmdhaW4uZGlzY29ubmVjdCgpO2lmKHRoaXMudGhyZWVEKXt0aGlzLnNvdXJjZS5jb25uZWN0KHRoaXMucGFubmVyKTt0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9ZWxzZXt0aGlzLnNvdXJjZS5jb25uZWN0KHRoaXMuZ2Fpbil9dGhpcy5nYWluLmNvbm5lY3QoV0VCQXVkaW8uYXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKX07Y2hhbm5lbC5pc1N0b3BwZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zb3VyY2Upe3JldHVybiB0cnVlfWlmKHRoaXMuc291cmNlLm1lZGlhRWxlbWVudCl7cmV0dXJuIHRoaXMuc291cmNlLmlzU3RvcHBlZH1yZXR1cm4gZmFsc2V9O3JldHVybiBjaGFubmVsfWZ1bmN0aW9uIF9KU19Tb3VuZF9DcmVhdGVfQ2hhbm5lbChjYWxsYmFjayx1c2VyRGF0YSl7aWYoV0VCQXVkaW8uYXVkaW9XZWJFbmFibGVkPT0wKXJldHVybjtXRUJBdWRpby5hdWRpb0luc3RhbmNlc1srK1dFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VJZENvdW50ZXJdPWpzQXVkaW9DcmVhdGVDaGFubmVsKGNhbGxiYWNrLHVzZXJEYXRhKTtyZXR1cm4gV0VCQXVkaW8uYXVkaW9JbnN0YW5jZUlkQ291bnRlcn1mdW5jdGlvbiBfSlNfU291bmRfR2V0TGVuZ3RoKGJ1ZmZlckluc3RhbmNlKXtpZihXRUJBdWRpby5hdWRpb1dlYkVuYWJsZWQ9PTApcmV0dXJuIDA7dmFyIHNvdW5kQ2xpcD1XRUJBdWRpby5hdWRpb0luc3RhbmNlc1tidWZmZXJJbnN0YW5jZV07aWYoIXNvdW5kQ2xpcClyZXR1cm4gMDtyZXR1cm4gc291bmRDbGlwLmdldExlbmd0aCgpfWZ1bmN0aW9uIF9KU19Tb3VuZF9HZXRMb2FkU3RhdGUoYnVmZmVySW5zdGFuY2Upe2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm4gMjt2YXIgc291bmQ9V0VCQXVkaW8uYXVkaW9JbnN0YW5jZXNbYnVmZmVySW5zdGFuY2VdO2lmKHNvdW5kLmVycm9yKXJldHVybiAyO2lmKHNvdW5kLmJ1ZmZlcnx8c291bmQudXJsKXJldHVybiAwO3JldHVybiAxfWZ1bmN0aW9uIGpzQXVkaW9QbGF5UGVuZGluZ0Jsb2NrZWRBdWRpbyhzb3VuZElkKXt2YXIgcGVuZGluZ0F1ZGlvPVdFQkF1ZGlvLnBlbmRpbmdBdWRpb1NvdXJjZXNbc291bmRJZF07cGVuZGluZ0F1ZGlvLnNvdXJjZU5vZGUuX3N0YXJ0UGxheWJhY2socGVuZGluZ0F1ZGlvLm9mZnNldCk7ZGVsZXRlIFdFQkF1ZGlvLnBlbmRpbmdBdWRpb1NvdXJjZXNbc291bmRJZF19ZnVuY3Rpb24ganNBdWRpb1BsYXlCbG9ja2VkQXVkaW9zKCl7T2JqZWN0LmtleXMoV0VCQXVkaW8ucGVuZGluZ0F1ZGlvU291cmNlcykuZm9yRWFjaChmdW5jdGlvbihhdWRpb0lkKXtqc0F1ZGlvUGxheVBlbmRpbmdCbG9ja2VkQXVkaW8oYXVkaW9JZCl9KX1mdW5jdGlvbiBfSlNfU291bmRfSW5pdCgpe3RyeXt3aW5kb3cuQXVkaW9Db250ZXh0PXdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7V0VCQXVkaW8uYXVkaW9Db250ZXh0PW5ldyBBdWRpb0NvbnRleHQ7dmFyIHRyeVRvUmVzdW1lQXVkaW9Db250ZXh0PWZ1bmN0aW9uKCl7aWYoV0VCQXVkaW8uYXVkaW9Db250ZXh0LnN0YXRlPT09InN1c3BlbmRlZCIpV0VCQXVkaW8uYXVkaW9Db250ZXh0LnJlc3VtZSgpLmNhdGNoKGZ1bmN0aW9uKGVycm9yKXtjb25zb2xlLndhcm4oIkNvdWxkIG5vdCByZXN1bWUgYXVkaW8gY29udGV4dC4gRXhjZXB0aW9uOiAiK2Vycm9yKX0pO2Vsc2UgTW9kdWxlLmNsZWFySW50ZXJ2YWwocmVzdW1lSW50ZXJ2YWwpfTt2YXIgcmVzdW1lSW50ZXJ2YWw9TW9kdWxlLnNldEludGVydmFsKHRyeVRvUmVzdW1lQXVkaW9Db250ZXh0LDQwMCk7V0VCQXVkaW8uYXVkaW9XZWJFbmFibGVkPTE7dmFyIF91c2VyRXZlbnRDYWxsYmFjaz1mdW5jdGlvbigpe3RyeXtpZihXRUJBdWRpby5hdWRpb0NvbnRleHQuc3RhdGUhPT0icnVubmluZyImJldFQkF1ZGlvLmF1ZGlvQ29udGV4dC5zdGF0ZSE9PSJjbG9zZWQiKXtXRUJBdWRpby5hdWRpb0NvbnRleHQucmVzdW1lKCkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe2NvbnNvbGUud2FybigiQ291bGQgbm90IHJlc3VtZSBhdWRpbyBjb250ZXh0LiBFeGNlcHRpb246ICIrZXJyb3IpfSl9anNBdWRpb1BsYXlCbG9ja2VkQXVkaW9zKCk7dmFyIGF1ZGlvQ2FjaGVTaXplPTIwO3doaWxlKFdFQkF1ZGlvLmF1ZGlvQ2FjaGUubGVuZ3RoPGF1ZGlvQ2FjaGVTaXplKXt2YXIgYXVkaW89bmV3IEF1ZGlvO2F1ZGlvLmF1dG9wbGF5PWZhbHNlO1dFQkF1ZGlvLmF1ZGlvQ2FjaGUucHVzaChhdWRpbyl9fWNhdGNoKGUpe319O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF91c2VyRXZlbnRDYWxsYmFjayk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLF91c2VyRXZlbnRDYWxsYmFjayk7TW9kdWxlLmRlaW5pdGlhbGl6ZXJzLnB1c2goZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfdXNlckV2ZW50Q2FsbGJhY2spO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixfdXNlckV2ZW50Q2FsbGJhY2spfSl9Y2F0Y2goZSl7YWxlcnQoIldlYiBBdWRpbyBBUEkgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIiKX19ZnVuY3Rpb24ganNBdWRpb0NyZWF0ZVVuY29tcHJlc3NlZFNvdW5kQ2xpcEZyb21Db21wcmVzc2VkQXVkaW8oYXVkaW9EYXRhKXt2YXIgc291bmRDbGlwPWpzQXVkaW9DcmVhdGVVbmNvbXByZXNzZWRTb3VuZENsaXAobnVsbCxmYWxzZSk7V0VCQXVkaW8uYXVkaW9Db250ZXh0LmRlY29kZUF1ZGlvRGF0YShhdWRpb0RhdGEsZnVuY3Rpb24oX2J1ZmZlcil7c291bmRDbGlwLmJ1ZmZlcj1fYnVmZmVyfSxmdW5jdGlvbihfZXJyb3Ipe3NvdW5kQ2xpcC5lcnJvcj10cnVlO2NvbnNvbGUubG9nKCJEZWNvZGUgZXJyb3I6ICIrX2Vycm9yKX0pO3JldHVybiBzb3VuZENsaXB9ZnVuY3Rpb24ganNBdWRpb0FkZFBlbmRpbmdCbG9ja2VkQXVkaW8oc291cmNlTm9kZSxvZmZzZXQpe1dFQkF1ZGlvLnBlbmRpbmdBdWRpb1NvdXJjZXNbc291cmNlTm9kZS5tZWRpYUVsZW1lbnQuc3JjXT17c291cmNlTm9kZTpzb3VyY2VOb2RlLG9mZnNldDpvZmZzZXR9fWZ1bmN0aW9uIGpzQXVkaW9HZXRNaW1lVHlwZUZyb21UeXBlKGZtb2RTb3VuZFR5cGUpe3N3aXRjaChmbW9kU291bmRUeXBlKXtjYXNlIDEzOnJldHVybiJhdWRpby9tcGVnIjtjYXNlIDIwOnJldHVybiJhdWRpby93YXYiO2RlZmF1bHQ6cmV0dXJuImF1ZGlvL21wNCJ9fWZ1bmN0aW9uIGpzQXVkaW9DcmVhdGVDb21wcmVzc2VkU291bmRDbGlwKGF1ZGlvRGF0YSxmbW9kU291bmRUeXBlKXt2YXIgbWltZVR5cGU9anNBdWRpb0dldE1pbWVUeXBlRnJvbVR5cGUoZm1vZFNvdW5kVHlwZSk7dmFyIGJsb2I9bmV3IEJsb2IoW2F1ZGlvRGF0YV0se3R5cGU6bWltZVR5cGV9KTt2YXIgc291bmRDbGlwPXt1cmw6VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSxlcnJvcjpmYWxzZSxtZWRpYUVsZW1lbnQ6bmV3IEF1ZGlvfTtzb3VuZENsaXAubWVkaWFFbGVtZW50LnByZWxvYWQ9Im1ldGFkYXRhIjtzb3VuZENsaXAubWVkaWFFbGVtZW50LnNyYz1zb3VuZENsaXAudXJsO3NvdW5kQ2xpcC5yZWxlYXNlPWZ1bmN0aW9uKCl7aWYoIXRoaXMubWVkaWFFbGVtZW50KXtyZXR1cm59dGhpcy5tZWRpYUVsZW1lbnQuc3JjPSIiO1VSTC5yZXZva2VPYmplY3RVUkwodGhpcy51cmwpO2RlbGV0ZSB0aGlzLm1lZGlhRWxlbWVudDtkZWxldGUgdGhpcy51cmx9O3NvdW5kQ2xpcC5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZWRpYUVsZW1lbnQuZHVyYXRpb24qNDQxMDB9O3NvdW5kQ2xpcC5nZXREYXRhPWZ1bmN0aW9uKHB0cixsZW5ndGgpe2NvbnNvbGUud2FybigiZ2V0RGF0YSgpIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgc291bmQuIik7cmV0dXJuIDB9O3NvdW5kQ2xpcC5nZXROdW1iZXJPZkNoYW5uZWxzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJnZXROdW1iZXJPZkNoYW5uZWxzKCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBzb3VuZC4iKTtyZXR1cm4gMH07c291bmRDbGlwLmdldEZyZXF1ZW5jeT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiZ2V0RnJlcXVlbmN5KCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBzb3VuZC4iKTtyZXR1cm4gMH07c291bmRDbGlwLmNyZWF0ZVNvdXJjZU5vZGU9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO3ZhciBtZWRpYUVsZW1lbnQ9V0VCQXVkaW8uYXVkaW9DYWNoZS5sZW5ndGg/V0VCQXVkaW8uYXVkaW9DYWNoZS5wb3AoKTpuZXcgQXVkaW87bWVkaWFFbGVtZW50LnByZWxvYWQ9Im1ldGFkYXRhIjttZWRpYUVsZW1lbnQuc3JjPXRoaXMudXJsO3ZhciBzb3VyY2U9V0VCQXVkaW8uYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShtZWRpYUVsZW1lbnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsImxvb3AiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc291cmNlLm1lZGlhRWxlbWVudC5sb29wfSxzZXQ6ZnVuY3Rpb24odil7aWYoc291cmNlLm1lZGlhRWxlbWVudC5sb29wIT09dilzb3VyY2UubWVkaWFFbGVtZW50Lmxvb3A9dn19KTtzb3VyY2UucGxheWJhY2tSYXRlPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UucGxheWJhY2tSYXRlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBzb3VyY2UubWVkaWFFbGVtZW50LnBsYXliYWNrUmF0ZX0sc2V0OmZ1bmN0aW9uKHYpe2lmKHNvdXJjZS5tZWRpYUVsZW1lbnQucGxheWJhY2tSYXRlIT09dilzb3VyY2UubWVkaWFFbGVtZW50LnBsYXliYWNrUmF0ZT12fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHNvdXJjZS5tZWRpYUVsZW1lbnQuY3VycmVudFRpbWV9LHNldDpmdW5jdGlvbih2KXtpZihzb3VyY2UubWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lIT09dilzb3VyY2UubWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPXZ9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvdXJjZSwibXV0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBzb3VyY2UubWVkaWFFbGVtZW50Lm11dGV9LHNldDpmdW5jdGlvbih2KXtpZihzb3VyY2UubWVkaWFFbGVtZW50Lm11dGUhPT12KXNvdXJjZS5tZWRpYUVsZW1lbnQubXV0ZT12fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsIm9uZW5kZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc291cmNlLm1lZGlhRWxlbWVudC5vbmVuZGVkfSxzZXQ6ZnVuY3Rpb24ob25lbmRlZCl7c291cmNlLm1lZGlhRWxlbWVudC5vbmVuZGVkPW9uZW5kZWR9fSk7c291cmNlLnBsYXlQcm9taXNlPW51bGw7c291cmNlLnBsYXlUaW1lb3V0PW51bGw7c291cmNlLnBhdXNlUmVxdWVzdGVkPWZhbHNlO3NvdXJjZS5pc1N0b3BwZWQ9ZmFsc2U7c291cmNlLl9wYXVzZU1lZGlhRWxlbWVudD1mdW5jdGlvbigpe2lmKHNvdXJjZS5wbGF5UHJvbWlzZXx8c291cmNlLnBsYXlUaW1lb3V0KXtzb3VyY2UucGF1c2VSZXF1ZXN0ZWQ9dHJ1ZX1lbHNle3NvdXJjZS5tZWRpYUVsZW1lbnQucGF1c2UoKX19O3NvdXJjZS5fc3RhcnRQbGF5YmFjaz1mdW5jdGlvbihvZmZzZXQpe2lmKHNvdXJjZS5wbGF5UHJvbWlzZXx8c291cmNlLnBsYXlUaW1lb3V0KXtzb3VyY2UubWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPW9mZnNldDtzb3VyY2UucGF1c2VSZXF1ZXN0ZWQ9ZmFsc2U7cmV0dXJufXNvdXJjZS5tZWRpYUVsZW1lbnQuY3VycmVudFRpbWU9b2Zmc2V0O3NvdXJjZS5wbGF5UHJvbWlzZT1zb3VyY2UubWVkaWFFbGVtZW50LnBsYXkoKTtpZihzb3VyY2UucGxheVByb21pc2Upe3NvdXJjZS5wbGF5UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7aWYoc291cmNlLnBhdXNlUmVxdWVzdGVkKXtzb3VyY2UubWVkaWFFbGVtZW50LnBhdXNlKCk7c291cmNlLnBhdXNlUmVxdWVzdGVkPWZhbHNlfXNvdXJjZS5wbGF5UHJvbWlzZT1udWxsfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3NvdXJjZS5wbGF5UHJvbWlzZT1udWxsO2lmKGVycm9yLm5hbWUhPT0iTm90QWxsb3dlZEVycm9yIil0aHJvdyBlcnJvcjtqc0F1ZGlvQWRkUGVuZGluZ0Jsb2NrZWRBdWRpbyhzb3VyY2Usb2Zmc2V0KX0pfX07c291cmNlLnN0YXJ0PWZ1bmN0aW9uKHN0YXJ0VGltZSxvZmZzZXQpe2lmKHR5cGVvZiBzdGFydFRpbWU9PT0idW5kZWZpbmVkIil7c3RhcnRUaW1lPVdFQkF1ZGlvLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZX1pZih0eXBlb2Ygb2Zmc2V0PT09InVuZGVmaW5lZCIpe29mZnNldD0wfXZhciBzdGFydERlbGF5VGhyZXNob2xkTVM9NDt2YXIgc3RhcnREZWxheU1TPShzdGFydFRpbWUtV0VCQXVkaW8uYXVkaW9Db250ZXh0LmN1cnJlbnRUaW1lKSoxZTM7aWYoc3RhcnREZWxheU1TPnN0YXJ0RGVsYXlUaHJlc2hvbGRNUyl7c291cmNlLnBsYXlUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzb3VyY2UucGxheVRpbWVvdXQ9bnVsbDtzb3VyY2UuX3N0YXJ0UGxheWJhY2sob2Zmc2V0KX0sc3RhcnREZWxheU1TKX1lbHNle3NvdXJjZS5fc3RhcnRQbGF5YmFjayhvZmZzZXQpfX07c291cmNlLnN0b3A9ZnVuY3Rpb24oc3RvcFRpbWUpe2lmKHR5cGVvZiBzdG9wVGltZT09PSJ1bmRlZmluZWQiKXtzdG9wVGltZT1XRUJBdWRpby5hdWRpb0NvbnRleHQuY3VycmVudFRpbWV9dmFyIHN0b3BEZWxheVRocmVzaG9sZE1TPTQ7dmFyIHN0b3BEZWxheU1TPShzdG9wVGltZS1XRUJBdWRpby5hdWRpb0NvbnRleHQuY3VycmVudFRpbWUpKjFlMztpZihzdG9wRGVsYXlNUz5zdG9wRGVsYXlUaHJlc2hvbGRNUyl7c2V0VGltZW91dChmdW5jdGlvbigpe3NvdXJjZS5fcGF1c2VNZWRpYUVsZW1lbnQoKTtzb3VyY2UuaXNTdG9wcGVkPXRydWV9LHN0b3BEZWxheU1TKX1lbHNle3NvdXJjZS5fcGF1c2VNZWRpYUVsZW1lbnQoKTtzb3VyY2UuaXNTdG9wcGVkPXRydWV9fTtqc0F1ZGlvTWl4aW5TZXRQaXRjaChzb3VyY2UpO3JldHVybiBzb3VyY2V9O3JldHVybiBzb3VuZENsaXB9ZnVuY3Rpb24gX0pTX1NvdW5kX0xvYWQocHRyLGxlbmd0aCxkZWNvbXByZXNzLGZtb2RTb3VuZFR5cGUpe2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm4gMDt2YXIgYXVkaW9EYXRhPUhFQVBVOC5idWZmZXIuc2xpY2UocHRyLHB0citsZW5ndGgpO2lmKGxlbmd0aDwxMzEwNzIpZGVjb21wcmVzcz0xO3ZhciBzb3VuZDtpZihkZWNvbXByZXNzKXtzb3VuZD1qc0F1ZGlvQ3JlYXRlVW5jb21wcmVzc2VkU291bmRDbGlwRnJvbUNvbXByZXNzZWRBdWRpbyhhdWRpb0RhdGEpfWVsc2V7c291bmQ9anNBdWRpb0NyZWF0ZUNvbXByZXNzZWRTb3VuZENsaXAoYXVkaW9EYXRhLGZtb2RTb3VuZFR5cGUpfVdFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VzWysrV0VCQXVkaW8uYXVkaW9JbnN0YW5jZUlkQ291bnRlcl09c291bmQ7cmV0dXJuIFdFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VJZENvdW50ZXJ9ZnVuY3Rpb24ganNBdWRpb0NyZWF0ZVVuY29tcHJlc3NlZFNvdW5kQ2xpcEZyb21QQ00oY2hhbm5lbHMsbGVuZ3RoLHNhbXBsZVJhdGUscHRyKXt2YXIgYnVmZmVyPVdFQkF1ZGlvLmF1ZGlvQ29udGV4dC5jcmVhdGVCdWZmZXIoY2hhbm5lbHMsbGVuZ3RoLHNhbXBsZVJhdGUpO2Zvcih2YXIgaT0wO2k8Y2hhbm5lbHM7aSsrKXt2YXIgb2Zmcz0ocHRyPj4yKStsZW5ndGgqaTt2YXIgY29weVRvQ2hhbm5lbD1idWZmZXJbImNvcHlUb0NoYW5uZWwiXXx8ZnVuY3Rpb24oc291cmNlLGNoYW5uZWxOdW1iZXIsc3RhcnRJbkNoYW5uZWwpe3ZhciBjbGlwcGVkPXNvdXJjZS5zdWJhcnJheSgwLE1hdGgubWluKHNvdXJjZS5sZW5ndGgsdGhpcy5sZW5ndGgtKHN0YXJ0SW5DaGFubmVsfDApKSk7dGhpcy5nZXRDaGFubmVsRGF0YShjaGFubmVsTnVtYmVyfDApLnNldChjbGlwcGVkLHN0YXJ0SW5DaGFubmVsfDApfTtjb3B5VG9DaGFubmVsLmFwcGx5KGJ1ZmZlcixbSEVBUEYzMi5zdWJhcnJheShvZmZzLG9mZnMrbGVuZ3RoKSxpLDBdKX1yZXR1cm4ganNBdWRpb0NyZWF0ZVVuY29tcHJlc3NlZFNvdW5kQ2xpcChidWZmZXIsZmFsc2UpfWZ1bmN0aW9uIF9KU19Tb3VuZF9Mb2FkX1BDTShjaGFubmVscyxsZW5ndGgsc2FtcGxlUmF0ZSxwdHIpe2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm4gMDt2YXIgc291bmQ9anNBdWRpb0NyZWF0ZVVuY29tcHJlc3NlZFNvdW5kQ2xpcEZyb21QQ00oY2hhbm5lbHMsbGVuZ3RoLHNhbXBsZVJhdGUscHRyKTtXRUJBdWRpby5hdWRpb0luc3RhbmNlc1srK1dFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VJZENvdW50ZXJdPXNvdW5kO3JldHVybiBXRUJBdWRpby5hdWRpb0luc3RhbmNlSWRDb3VudGVyfWZ1bmN0aW9uIF9KU19Tb3VuZF9QbGF5KGJ1ZmZlckluc3RhbmNlLGNoYW5uZWxJbnN0YW5jZSxvZmZzZXQsZGVsYXkpe2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm47X0pTX1NvdW5kX1N0b3AoY2hhbm5lbEluc3RhbmNlLDApO3ZhciBzb3VuZENsaXA9V0VCQXVkaW8uYXVkaW9JbnN0YW5jZXNbYnVmZmVySW5zdGFuY2VdO3ZhciBjaGFubmVsPVdFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VzW2NoYW5uZWxJbnN0YW5jZV07aWYoIXNvdW5kQ2xpcCl7Y29uc29sZS5sb2coIlRyeWluZyB0byBwbGF5IHNvdW5kIHdoaWNoIGlzIG5vdCBsb2FkZWQuIik7cmV0dXJufXRyeXtjaGFubmVsLnBsYXlTb3VuZENsaXAoc291bmRDbGlwLFdFQkF1ZGlvLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZStkZWxheSxvZmZzZXQpfWNhdGNoKGVycm9yKXtjb25zb2xlLmVycm9yKCJwbGF5U291bmRDbGlwIGVycm9yLiBFeGNlcHRpb246ICIrZSl9fWZ1bmN0aW9uIF9KU19Tb3VuZF9SZWxlYXNlSW5zdGFuY2UoaW5zdGFuY2Upe3ZhciBvYmplY3Q9V0VCQXVkaW8uYXVkaW9JbnN0YW5jZXNbaW5zdGFuY2VdO2lmKG9iamVjdCl7b2JqZWN0LnJlbGVhc2UoKX1kZWxldGUgV0VCQXVkaW8uYXVkaW9JbnN0YW5jZXNbaW5zdGFuY2VdfWZ1bmN0aW9uIF9KU19Tb3VuZF9SZXN1bWVJZk5lZWRlZCgpe2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm47aWYoV0VCQXVkaW8uYXVkaW9Db250ZXh0LnN0YXRlPT09InN1c3BlbmRlZCIpV0VCQXVkaW8uYXVkaW9Db250ZXh0LnJlc3VtZSgpLmNhdGNoKGZ1bmN0aW9uKGVycm9yKXtjb25zb2xlLndhcm4oIkNvdWxkIG5vdCByZXN1bWUgYXVkaW8gY29udGV4dC4gRXhjZXB0aW9uOiAiK2Vycm9yKX0pfWZ1bmN0aW9uIF9KU19Tb3VuZF9TZXQzRChjaGFubmVsSW5zdGFuY2UsdGhyZWVEKXt2YXIgY2hhbm5lbD1XRUJBdWRpby5hdWRpb0luc3RhbmNlc1tjaGFubmVsSW5zdGFuY2VdO2NoYW5uZWwuc2V0M0QodGhyZWVEKX1mdW5jdGlvbiBfSlNfU291bmRfU2V0TGlzdGVuZXJPcmllbnRhdGlvbih4LHkseix4VXAseVVwLHpVcCl7aWYoV0VCQXVkaW8uYXVkaW9XZWJFbmFibGVkPT0wKXJldHVybjt4PS14O3k9LXk7ej0tejt2YXIgbD1XRUJBdWRpby5hdWRpb0NvbnRleHQubGlzdGVuZXI7aWYobC5mb3J3YXJkWCl7aWYobC5mb3J3YXJkWC52YWx1ZSE9PXgpbC5mb3J3YXJkWC52YWx1ZT14O2lmKGwuZm9yd2FyZFkudmFsdWUhPT15KWwuZm9yd2FyZFkudmFsdWU9eTtpZihsLmZvcndhcmRaLnZhbHVlIT09eilsLmZvcndhcmRaLnZhbHVlPXo7aWYobC51cFgudmFsdWUhPT14VXApbC51cFgudmFsdWU9eFVwO2lmKGwudXBZLnZhbHVlIT09eVVwKWwudXBZLnZhbHVlPXlVcDtpZihsLnVwWi52YWx1ZSE9PXpVcClsLnVwWi52YWx1ZT16VXB9ZWxzZSBpZihsLl9mb3J3YXJkWCE9PXh8fGwuX2ZvcndhcmRZIT09eXx8bC5fZm9yd2FyZFohPT16fHxsLl91cFghPT14VXB8fGwuX3VwWSE9PXlVcHx8bC5fdXBaIT09elVwKXtsLnNldE9yaWVudGF0aW9uKHgseSx6LHhVcCx5VXAselVwKTtsLl9mb3J3YXJkWD14O2wuX2ZvcndhcmRZPXk7bC5fZm9yd2FyZFo9ejtsLl91cFg9eFVwO2wuX3VwWT15VXA7bC5fdXBaPXpVcH19ZnVuY3Rpb24gX0pTX1NvdW5kX1NldExpc3RlbmVyUG9zaXRpb24oeCx5LHope2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm47dmFyIGw9V0VCQXVkaW8uYXVkaW9Db250ZXh0Lmxpc3RlbmVyO2lmKGwucG9zaXRpb25YKXtpZihsLnBvc2l0aW9uWC52YWx1ZSE9PXgpbC5wb3NpdGlvblgudmFsdWU9eDtpZihsLnBvc2l0aW9uWS52YWx1ZSE9PXkpbC5wb3NpdGlvblkudmFsdWU9eTtpZihsLnBvc2l0aW9uWi52YWx1ZSE9PXopbC5wb3NpdGlvbloudmFsdWU9en1lbHNlIGlmKGwuX3Bvc2l0aW9uWCE9PXh8fGwuX3Bvc2l0aW9uWSE9PXl8fGwuX3Bvc2l0aW9uWiE9PXope2wuc2V0UG9zaXRpb24oeCx5LHopO2wuX3Bvc2l0aW9uWD14O2wuX3Bvc2l0aW9uWT15O2wuX3Bvc2l0aW9uWj16fX1mdW5jdGlvbiBfSlNfU291bmRfU2V0TG9vcChjaGFubmVsSW5zdGFuY2UsbG9vcCl7aWYoV0VCQXVkaW8uYXVkaW9XZWJFbmFibGVkPT0wKXJldHVybjt2YXIgY2hhbm5lbD1XRUJBdWRpby5hdWRpb0luc3RhbmNlc1tjaGFubmVsSW5zdGFuY2VdO2NoYW5uZWwuc2V0TG9vcChsb29wKX1mdW5jdGlvbiBfSlNfU291bmRfU2V0TG9vcFBvaW50cyhjaGFubmVsSW5zdGFuY2UsbG9vcFN0YXJ0LGxvb3BFbmQpe2lmKFdFQkF1ZGlvLmF1ZGlvV2ViRW5hYmxlZD09MClyZXR1cm47dmFyIGNoYW5uZWw9V0VCQXVkaW8uYXVkaW9JbnN0YW5jZXNbY2hhbm5lbEluc3RhbmNlXTtjaGFubmVsLnNldExvb3BQb2ludHMobG9vcFN0YXJ0LGxvb3BFbmQpfWZ1bmN0aW9uIF9KU19Tb3VuZF9TZXRQYXVzZWQoY2hhbm5lbEluc3RhbmNlLHBhdXNlZCl7aWYoV0VCQXVkaW8uYXVkaW9XZWJFbmFibGVkPT0wKXJldHVybjt2YXIgY2hhbm5lbD1XRUJBdWRpby5hdWRpb0luc3RhbmNlc1tjaGFubmVsSW5zdGFuY2VdO2lmKHBhdXNlZCE9Y2hhbm5lbC5pc1BhdXNlZCgpKXtpZihwYXVzZWQpY2hhbm5lbC5wYXVzZSgpO2Vsc2UgY2hhbm5lbC5yZXN1bWUoKX19ZnVuY3Rpb24gX0pTX1NvdW5kX1NldFBpdGNoKGNoYW5uZWxJbnN0YW5jZSx2KXtpZihXRUJBdWRpby5hdWRpb1dlYkVuYWJsZWQ9PTApcmV0dXJuO3RyeXt2YXIgY2hhbm5lbD1XRUJBdWRpby5hdWRpb0luc3RhbmNlc1tjaGFubmVsSW5zdGFuY2VdO2NoYW5uZWwuc2V0UGl0Y2godil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcigiSlNfU291bmRfU2V0UGl0Y2goY2hhbm5lbD0iK2NoYW5uZWxJbnN0YW5jZSsiLCBwaXRjaD0iK3YrIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK2UpfX1mdW5jdGlvbiBfSlNfU291bmRfU2V0UG9zaXRpb24oY2hhbm5lbEluc3RhbmNlLHgseSx6KXtpZihXRUJBdWRpby5hdWRpb1dlYkVuYWJsZWQ9PTApcmV0dXJuO3ZhciBjaGFubmVsPVdFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VzW2NoYW5uZWxJbnN0YW5jZV07Y2hhbm5lbC5zZXRQb3NpdGlvbih4LHkseil9ZnVuY3Rpb24gX0pTX1NvdW5kX1NldFZvbHVtZShjaGFubmVsSW5zdGFuY2Usdil7aWYoV0VCQXVkaW8uYXVkaW9XZWJFbmFibGVkPT0wKXJldHVybjt0cnl7dmFyIGNoYW5uZWw9V0VCQXVkaW8uYXVkaW9JbnN0YW5jZXNbY2hhbm5lbEluc3RhbmNlXTtjaGFubmVsLnNldFZvbHVtZSh2KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKCJKU19Tb3VuZF9TZXRWb2x1bWUoY2hhbm5lbD0iK2NoYW5uZWxJbnN0YW5jZSsiLCB2b2x1bWU9Iit2KyIpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitlKX19ZnVuY3Rpb24gX0pTX1NvdW5kX1N0b3AoY2hhbm5lbEluc3RhbmNlLGRlbGF5KXtpZihXRUJBdWRpby5hdWRpb1dlYkVuYWJsZWQ9PTApcmV0dXJuO3ZhciBjaGFubmVsPVdFQkF1ZGlvLmF1ZGlvSW5zdGFuY2VzW2NoYW5uZWxJbnN0YW5jZV07Y2hhbm5lbC5zdG9wKGRlbGF5KX1mdW5jdGlvbiBfSlNfU3lzdGVtSW5mb19HZXRCcm93c2VyTmFtZShidWZmZXIsYnVmZmVyU2l6ZSl7dmFyIGJyb3dzZXI9TW9kdWxlLlN5c3RlbUluZm8uYnJvd3NlcjtpZihidWZmZXIpc3RyaW5nVG9VVEY4KGJyb3dzZXIsYnVmZmVyLGJ1ZmZlclNpemUpO3JldHVybiBsZW5ndGhCeXRlc1VURjgoYnJvd3Nlcil9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fR2V0QnJvd3NlclZlcnNpb25TdHJpbmcoYnVmZmVyLGJ1ZmZlclNpemUpe3ZhciBicm93c2VyVmVyPU1vZHVsZS5TeXN0ZW1JbmZvLmJyb3dzZXJWZXJzaW9uO2lmKGJ1ZmZlcilzdHJpbmdUb1VURjgoYnJvd3NlclZlcixidWZmZXIsYnVmZmVyU2l6ZSk7cmV0dXJuIGxlbmd0aEJ5dGVzVVRGOChicm93c2VyVmVyKX1mdW5jdGlvbiBfSlNfU3lzdGVtSW5mb19HZXRDYW52YXNDbGllbnRTaXplKGRvbUVsZW1lbnRTZWxlY3RvcixvdXRXaWR0aCxvdXRIZWlnaHQpe3ZhciBzZWxlY3Rvcj1VVEY4VG9TdHJpbmcoZG9tRWxlbWVudFNlbGVjdG9yKTt2YXIgY2FudmFzPXNlbGVjdG9yPT0iI2NhbnZhcyI/TW9kdWxlWyJjYW52YXMiXTpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTt2YXIgdz0wLGg9MDtpZihjYW52YXMpe3ZhciBzaXplPWNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt3PXNpemUud2lkdGg7aD1zaXplLmhlaWdodH1IRUFQRjY0W291dFdpZHRoPj4zXT13O0hFQVBGNjRbb3V0SGVpZ2h0Pj4zXT1ofWZ1bmN0aW9uIF9KU19TeXN0ZW1JbmZvX0dldERvY3VtZW50VVJMKGJ1ZmZlcixidWZmZXJTaXplKXtpZihidWZmZXIpc3RyaW5nVG9VVEY4KGRvY3VtZW50LlVSTCxidWZmZXIsYnVmZmVyU2l6ZSk7cmV0dXJuIGxlbmd0aEJ5dGVzVVRGOChkb2N1bWVudC5VUkwpfWZ1bmN0aW9uIF9KU19TeXN0ZW1JbmZvX0dldEdQVUluZm8oYnVmZmVyLGJ1ZmZlclNpemUpe3ZhciBncHVpbmZvPU1vZHVsZS5TeXN0ZW1JbmZvLmdwdTtpZihidWZmZXIpc3RyaW5nVG9VVEY4KGdwdWluZm8sYnVmZmVyLGJ1ZmZlclNpemUpO3JldHVybiBsZW5ndGhCeXRlc1VURjgoZ3B1aW5mbyl9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fR2V0TGFuZ3VhZ2UoYnVmZmVyLGJ1ZmZlclNpemUpe3ZhciBsYW5ndWFnZT1Nb2R1bGUuU3lzdGVtSW5mby5sYW5ndWFnZTtpZihidWZmZXIpc3RyaW5nVG9VVEY4KGxhbmd1YWdlLGJ1ZmZlcixidWZmZXJTaXplKTtyZXR1cm4gbGVuZ3RoQnl0ZXNVVEY4KGxhbmd1YWdlKX1mdW5jdGlvbiBfSlNfU3lzdGVtSW5mb19HZXRNYXRjaFdlYkdMVG9DYW52YXNTaXplKCl7cmV0dXJuIE1vZHVsZS5tYXRjaFdlYkdMVG9DYW52YXNTaXplfHxNb2R1bGUubWF0Y2hXZWJHTFRvQ2FudmFzU2l6ZT09PXVuZGVmaW5lZH1mdW5jdGlvbiBfSlNfU3lzdGVtSW5mb19HZXRNZW1vcnkoKXtyZXR1cm4gSEVBUFU4Lmxlbmd0aC8oMTAyNCoxMDI0KX1mdW5jdGlvbiBfSlNfU3lzdGVtSW5mb19HZXRPUyhidWZmZXIsYnVmZmVyU2l6ZSl7dmFyIGJyb3dzZXI9TW9kdWxlLlN5c3RlbUluZm8ub3MrIiAiK01vZHVsZS5TeXN0ZW1JbmZvLm9zVmVyc2lvbjtpZihidWZmZXIpc3RyaW5nVG9VVEY4KGJyb3dzZXIsYnVmZmVyLGJ1ZmZlclNpemUpO3JldHVybiBsZW5ndGhCeXRlc1VURjgoYnJvd3Nlcil9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fR2V0UHJlZmVycmVkRGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiBNb2R1bGUubWF0Y2hXZWJHTFRvQ2FudmFzU2l6ZT09ZmFsc2U/MTpNb2R1bGUuZGV2aWNlUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW98fDF9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fR2V0U2NyZWVuU2l6ZShvdXRXaWR0aCxvdXRIZWlnaHQpe0hFQVBGNjRbb3V0V2lkdGg+PjNdPU1vZHVsZS5TeXN0ZW1JbmZvLndpZHRoO0hFQVBGNjRbb3V0SGVpZ2h0Pj4zXT1Nb2R1bGUuU3lzdGVtSW5mby5oZWlnaHR9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fR2V0U3RyZWFtaW5nQXNzZXRzVVJMKGJ1ZmZlcixidWZmZXJTaXplKXtpZihidWZmZXIpc3RyaW5nVG9VVEY4KE1vZHVsZS5zdHJlYW1pbmdBc3NldHNVcmwsYnVmZmVyLGJ1ZmZlclNpemUpO3JldHVybiBsZW5ndGhCeXRlc1VURjgoTW9kdWxlLnN0cmVhbWluZ0Fzc2V0c1VybCl9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fSGFzQXN0Y0hkcigpe3ZhciBleHQ9R0xjdHguZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpO2lmKGV4dCYmZXh0LmdldFN1cHBvcnRlZFByb2ZpbGVzKXtyZXR1cm4gZXh0LmdldFN1cHBvcnRlZFByb2ZpbGVzKCkuaW5jbHVkZXMoImhkciIpfXJldHVybiBmYWxzZX1mdW5jdGlvbiBfSlNfU3lzdGVtSW5mb19IYXNDdXJzb3JMb2NrKCl7cmV0dXJuIE1vZHVsZS5TeXN0ZW1JbmZvLmhhc0N1cnNvckxvY2t9ZnVuY3Rpb24gX0pTX1N5c3RlbUluZm9fSGFzRnVsbHNjcmVlbigpe3JldHVybiBNb2R1bGUuU3lzdGVtSW5mby5oYXNGdWxsc2NyZWVufWZ1bmN0aW9uIF9KU19TeXN0ZW1JbmZvX0hhc1dlYkdMKCl7cmV0dXJuIE1vZHVsZS5TeXN0ZW1JbmZvLmhhc1dlYkdMfWZ1bmN0aW9uIF9KU19Vbml0eUVuZ2luZVNob3VsZFF1aXQoKXtyZXR1cm4hIU1vZHVsZS5zaG91bGRRdWl0fXZhciB3cj17cmVxdWVzdHM6e30scmVzcG9uc2VzOnt9LGFib3J0Q29udHJvbGxlcnM6e30sdGltZXI6e30sbmV4dFJlcXVlc3RJZDoxfTtmdW5jdGlvbiBfSlNfV2ViUmVxdWVzdF9BYm9ydChyZXF1ZXN0SWQpe3ZhciBhYm9ydENvbnRyb2xsZXI9d3IuYWJvcnRDb250cm9sbGVyc1tyZXF1ZXN0SWRdO2lmKCFhYm9ydENvbnRyb2xsZXJ8fGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCl7cmV0dXJufWFib3J0Q29udHJvbGxlci5hYm9ydCgpfWZ1bmN0aW9uIF9KU19XZWJSZXF1ZXN0X0NyZWF0ZSh1cmwsbWV0aG9kKXt2YXIgX3VybD1VVEY4VG9TdHJpbmcodXJsKTt2YXIgX21ldGhvZD1VVEY4VG9TdHJpbmcobWV0aG9kKTt2YXIgYWJvcnRDb250cm9sbGVyPW5ldyBBYm9ydENvbnRyb2xsZXI7dmFyIHJlcXVlc3RPcHRpb25zPXt1cmw6X3VybCxpbml0OnttZXRob2Q6X21ldGhvZCxzaWduYWw6YWJvcnRDb250cm9sbGVyLnNpZ25hbCxoZWFkZXJzOnt9LGVuYWJsZVN0cmVhbWluZ0Rvd25sb2FkOnRydWV9LHRlbXBCdWZmZXI6bnVsbCx0ZW1wQnVmZmVyU2l6ZTowfTt3ci5hYm9ydENvbnRyb2xsZXJzW3dyLm5leHRSZXF1ZXN0SWRdPWFib3J0Q29udHJvbGxlcjt3ci5yZXF1ZXN0c1t3ci5uZXh0UmVxdWVzdElkXT1yZXF1ZXN0T3B0aW9ucztyZXR1cm4gd3IubmV4dFJlcXVlc3RJZCsrfWZ1bmN0aW9uIGpzV2ViUmVxdWVzdEdldFJlc3BvbnNlSGVhZGVyU3RyaW5nKHJlcXVlc3RJZCl7dmFyIHJlc3BvbnNlPXdyLnJlc3BvbnNlc1tyZXF1ZXN0SWRdO2lmKCFyZXNwb25zZSl7cmV0dXJuIiJ9aWYocmVzcG9uc2UuaGVhZGVyU3RyaW5nKXtyZXR1cm4gcmVzcG9uc2UuaGVhZGVyU3RyaW5nfXZhciBoZWFkZXJzPSIiO3ZhciBlbnRyaWVzPXJlc3BvbnNlLmhlYWRlcnMuZW50cmllcygpO2Zvcih2YXIgcmVzdWx0PWVudHJpZXMubmV4dCgpOyFyZXN1bHQuZG9uZTtyZXN1bHQ9ZW50cmllcy5uZXh0KCkpe2hlYWRlcnMrPXJlc3VsdC52YWx1ZVswXSsiOiAiK3Jlc3VsdC52YWx1ZVsxXSsiXHJcbiJ9cmVzcG9uc2UuaGVhZGVyU3RyaW5nPWhlYWRlcnM7cmV0dXJuIGhlYWRlcnN9ZnVuY3Rpb24gX0pTX1dlYlJlcXVlc3RfR2V0UmVzcG9uc2VNZXRhRGF0YShyZXF1ZXN0SWQsaGVhZGVyQnVmZmVyLGhlYWRlclNpemUscmVzcG9uc2VVcmxCdWZmZXIscmVzcG9uc2VVcmxTaXplKXt2YXIgcmVzcG9uc2U9d3IucmVzcG9uc2VzW3JlcXVlc3RJZF07aWYoIXJlc3BvbnNlKXtzdHJpbmdUb1VURjgoIiIsaGVhZGVyQnVmZmVyLGhlYWRlclNpemUpO3N0cmluZ1RvVVRGOCgiIixyZXNwb25zZVVybEJ1ZmZlcixyZXNwb25zZVVybFNpemUpO3JldHVybn1pZihoZWFkZXJCdWZmZXIpe3ZhciBoZWFkZXJzPWpzV2ViUmVxdWVzdEdldFJlc3BvbnNlSGVhZGVyU3RyaW5nKHJlcXVlc3RJZCk7c3RyaW5nVG9VVEY4KGhlYWRlcnMsaGVhZGVyQnVmZmVyLGhlYWRlclNpemUpfWlmKHJlc3BvbnNlVXJsQnVmZmVyKXtzdHJpbmdUb1VURjgocmVzcG9uc2UudXJsLHJlc3BvbnNlVXJsQnVmZmVyLHJlc3BvbnNlVXJsU2l6ZSl9fWZ1bmN0aW9uIF9KU19XZWJSZXF1ZXN0X0dldFJlc3BvbnNlTWV0YURhdGFMZW5ndGhzKHJlcXVlc3RJZCxidWZmZXIpe3ZhciByZXNwb25zZT13ci5yZXNwb25zZXNbcmVxdWVzdElkXTtpZighcmVzcG9uc2Upe0hFQVBVMzJbYnVmZmVyPj4yXT0wO0hFQVBVMzJbKGJ1ZmZlcj4+MikrMV09MDtyZXR1cm59dmFyIGhlYWRlcnM9anNXZWJSZXF1ZXN0R2V0UmVzcG9uc2VIZWFkZXJTdHJpbmcocmVxdWVzdElkKTtIRUFQVTMyW2J1ZmZlcj4+Ml09bGVuZ3RoQnl0ZXNVVEY4KGhlYWRlcnMpO0hFQVBVMzJbKGJ1ZmZlcj4+MikrMV09bGVuZ3RoQnl0ZXNVVEY4KHJlc3BvbnNlLnVybCl9ZnVuY3Rpb24gX0pTX1dlYlJlcXVlc3RfUmVsZWFzZShyZXF1ZXN0SWQpe2lmKHdyLnRpbWVyW3JlcXVlc3RJZF0pe2NsZWFyVGltZW91dCh3ci50aW1lcltyZXF1ZXN0SWRdKX1kZWxldGUgd3IucmVxdWVzdHNbcmVxdWVzdElkXTtkZWxldGUgd3IucmVzcG9uc2VzW3JlcXVlc3RJZF07ZGVsZXRlIHdyLmFib3J0Q29udHJvbGxlcnNbcmVxdWVzdElkXTtkZWxldGUgd3IudGltZXJbcmVxdWVzdElkXX1mdW5jdGlvbiBfSlNfV2ViUmVxdWVzdF9TZW5kKHJlcXVlc3RJZCxwdHIsbGVuZ3RoLGFyZyxvbnJlc3BvbnNlLG9ucHJvZ3Jlc3Mpe3ZhciByZXF1ZXN0T3B0aW9ucz13ci5yZXF1ZXN0c1tyZXF1ZXN0SWRdO3ZhciBhYm9ydENvbnRyb2xsZXI9d3IuYWJvcnRDb250cm9sbGVyc1tyZXF1ZXN0SWRdO2Z1bmN0aW9uIGdldFRlbXBCdWZmZXIoc2l6ZSl7aWYoIXJlcXVlc3RPcHRpb25zLnRlbXBCdWZmZXIpe2NvbnN0IGluaXRpYWxTaXplPU1hdGgubWF4KHNpemUsMTAyNCk7cmVxdWVzdE9wdGlvbnMudGVtcEJ1ZmZlcj1fbWFsbG9jKGluaXRpYWxTaXplKTtyZXF1ZXN0T3B0aW9ucy50ZW1wQnVmZmVyU2l6ZT1pbml0aWFsU2l6ZX1pZihyZXF1ZXN0T3B0aW9ucy50ZW1wQnVmZmVyU2l6ZTxzaXplKXtfZnJlZShyZXF1ZXN0T3B0aW9ucy50ZW1wQnVmZmVyKTtyZXF1ZXN0T3B0aW9ucy50ZW1wQnVmZmVyPV9tYWxsb2Moc2l6ZSk7cmVxdWVzdE9wdGlvbnMudGVtcEJ1ZmZlclNpemU9c2l6ZX1yZXR1cm4gcmVxdWVzdE9wdGlvbnMudGVtcEJ1ZmZlcn1mdW5jdGlvbiBDbGVhclRpbWVvdXQoKXtpZih3ci50aW1lcltyZXF1ZXN0SWRdKXtjbGVhclRpbWVvdXQod3IudGltZXJbcmVxdWVzdElkXSk7ZGVsZXRlIHdyLnRpbWVyW3JlcXVlc3RJZF19fWZ1bmN0aW9uIEhhbmRsZVN1Y2Nlc3MocmVzcG9uc2UsYm9keSl7Q2xlYXJUaW1lb3V0KCk7aWYoIW9ucmVzcG9uc2Upe3JldHVybn12YXIga1dlYlJlcXVlc3RPSz0wO2lmKHJlcXVlc3RPcHRpb25zLmluaXQuZW5hYmxlU3RyZWFtaW5nRG93bmxvYWQpe2R5bkNhbGwoInZpaWlpaWkiLG9ucmVzcG9uc2UsW2FyZyxyZXNwb25zZS5zdGF0dXMsMCxib2R5Lmxlbmd0aCwwLGtXZWJSZXF1ZXN0T0tdKX1lbHNlIGlmKGJvZHkubGVuZ3RoIT0wKXt2YXIgYnVmZmVyPV9tYWxsb2MoYm9keS5sZW5ndGgpO0hFQVBVOC5zZXQoYm9keSxidWZmZXIpO2R5bkNhbGwoInZpaWlpaWkiLG9ucmVzcG9uc2UsW2FyZyxyZXNwb25zZS5zdGF0dXMsYnVmZmVyLGJvZHkubGVuZ3RoLDAsa1dlYlJlcXVlc3RPS10pfWVsc2V7ZHluQ2FsbCgidmlpaWlpaSIsb25yZXNwb25zZSxbYXJnLHJlc3BvbnNlLnN0YXR1cywwLDAsMCxrV2ViUmVxdWVzdE9LXSl9aWYocmVxdWVzdE9wdGlvbnMudGVtcEJ1ZmZlcil7X2ZyZWUocmVxdWVzdE9wdGlvbnMudGVtcEJ1ZmZlcil9fWZ1bmN0aW9uIEhhbmRsZUVycm9yKGVycixjb2RlKXtDbGVhclRpbWVvdXQoKTtpZighb25yZXNwb25zZSl7cmV0dXJufXZhciBsZW49bGVuZ3RoQnl0ZXNVVEY4KGVycikrMTt2YXIgYnVmZmVyPV9tYWxsb2MobGVuKTtzdHJpbmdUb1VURjgoZXJyLGJ1ZmZlcixsZW4pO2R5bkNhbGwoInZpaWlpaWkiLG9ucmVzcG9uc2UsW2FyZyw1MDAsMCwwLGJ1ZmZlcixjb2RlXSk7X2ZyZWUoYnVmZmVyKTtpZihyZXF1ZXN0T3B0aW9ucy50ZW1wQnVmZmVyKXtfZnJlZShyZXF1ZXN0T3B0aW9ucy50ZW1wQnVmZmVyKX19ZnVuY3Rpb24gSGFuZGxlUHJvZ3Jlc3MoZSl7aWYoIW9ucHJvZ3Jlc3N8fCFlLmxlbmd0aENvbXB1dGFibGUpe3JldHVybn12YXIgcmVzcG9uc2U9ZS5yZXNwb25zZTt3ci5yZXNwb25zZXNbcmVxdWVzdElkXT1yZXNwb25zZTtpZihlLmNodW5rKXt2YXIgYnVmZmVyPWdldFRlbXBCdWZmZXIoZS5jaHVuay5sZW5ndGgpO0hFQVBVOC5zZXQoZS5jaHVuayxidWZmZXIpO2R5bkNhbGwoInZpaWlpaWkiLG9ucHJvZ3Jlc3MsW2FyZyxyZXNwb25zZS5zdGF0dXMsZS5sb2FkZWQsZS50b3RhbCxidWZmZXIsZS5jaHVuay5sZW5ndGhdKX1lbHNle2R5bkNhbGwoInZpaWlpaWkiLG9ucHJvZ3Jlc3MsW2FyZyxyZXNwb25zZS5zdGF0dXMsZS5sb2FkZWQsZS50b3RhbCwwLDBdKX19dHJ5e2lmKGxlbmd0aD4wKXt2YXIgcG9zdERhdGE9SEVBUFU4LnN1YmFycmF5KHB0cixwdHIrbGVuZ3RoKTtyZXF1ZXN0T3B0aW9ucy5pbml0LmJvZHk9bmV3IEJsb2IoW3Bvc3REYXRhXSl9aWYocmVxdWVzdE9wdGlvbnMudGltZW91dCl7d3IudGltZXJbcmVxdWVzdElkXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmVxdWVzdE9wdGlvbnMuaXNUaW1lZE91dD10cnVlO2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfSxyZXF1ZXN0T3B0aW9ucy50aW1lb3V0KX12YXIgZmV0Y2hJbXBsPU1vZHVsZS5mZXRjaFdpdGhQcm9ncmVzcztyZXF1ZXN0T3B0aW9ucy5pbml0Lm9uUHJvZ3Jlc3M9SGFuZGxlUHJvZ3Jlc3M7aWYoTW9kdWxlLmNvbXBhbnlOYW1lJiZNb2R1bGUucHJvZHVjdE5hbWUmJk1vZHVsZS5jYWNoZWRGZXRjaCl7ZmV0Y2hJbXBsPU1vZHVsZS5jYWNoZWRGZXRjaDtyZXF1ZXN0T3B0aW9ucy5pbml0LmNvbXBhbnlOYW1lPU1vZHVsZS5jb21wYW55TmFtZTtyZXF1ZXN0T3B0aW9ucy5pbml0LnByb2R1Y3ROYW1lPU1vZHVsZS5wcm9kdWN0TmFtZTtyZXF1ZXN0T3B0aW9ucy5jb250cm9sPU1vZHVsZS5jYWNoZUNvbnRyb2wocmVxdWVzdE9wdGlvbnMudXJsKX1mZXRjaEltcGwocmVxdWVzdE9wdGlvbnMudXJsLHJlcXVlc3RPcHRpb25zLmluaXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe3dyLnJlc3BvbnNlc1tyZXF1ZXN0SWRdPXJlc3BvbnNlO0hhbmRsZVN1Y2Nlc3MocmVzcG9uc2UscmVzcG9uc2UucGFyc2VkQm9keSl9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7dmFyIGtXZWJFcnJvclVua25vd249Mjt2YXIga1dlYkVycm9yQWJvcnRlZD0xNzt2YXIga1dlYkVycm9yVGltZW91dD0xNDtpZihyZXF1ZXN0T3B0aW9ucy5pc1RpbWVkT3V0KXtIYW5kbGVFcnJvcigiQ29ubmVjdGlvbiB0aW1lZCBvdXQuIixrV2ViRXJyb3JUaW1lb3V0KX1lbHNlIGlmKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCl7SGFuZGxlRXJyb3IoIkFib3J0ZWQuIixrV2ViRXJyb3JBYm9ydGVkKX1lbHNle0hhbmRsZUVycm9yKGVycm9yLm1lc3NhZ2Usa1dlYkVycm9yVW5rbm93bil9fSl9Y2F0Y2goZXJyb3Ipe3ZhciBrV2ViRXJyb3JVbmtub3duPTI7SGFuZGxlRXJyb3IoZXJyb3IubWVzc2FnZSxrV2ViRXJyb3JVbmtub3duKX19ZnVuY3Rpb24gX0pTX1dlYlJlcXVlc3RfU2V0UmVkaXJlY3RMaW1pdChyZXF1ZXN0LHJlZGlyZWN0TGltaXQpe3ZhciByZXF1ZXN0T3B0aW9ucz13ci5yZXF1ZXN0c1tyZXF1ZXN0XTtpZighcmVxdWVzdE9wdGlvbnMpe3JldHVybn1yZXF1ZXN0T3B0aW9ucy5pbml0LnJlZGlyZWN0PXJlZGlyZWN0TGltaXQ9PT0wPyJlcnJvciI6ImZvbGxvdyJ9ZnVuY3Rpb24gX0pTX1dlYlJlcXVlc3RfU2V0UmVxdWVzdEhlYWRlcihyZXF1ZXN0SWQsaGVhZGVyLHZhbHVlKXt2YXIgcmVxdWVzdE9wdGlvbnM9d3IucmVxdWVzdHNbcmVxdWVzdElkXTtpZighcmVxdWVzdE9wdGlvbnMpe3JldHVybn12YXIgX2hlYWRlcj1VVEY4VG9TdHJpbmcoaGVhZGVyKTt2YXIgX3ZhbHVlPVVURjhUb1N0cmluZyh2YWx1ZSk7cmVxdWVzdE9wdGlvbnMuaW5pdC5oZWFkZXJzW19oZWFkZXJdPV92YWx1ZX1mdW5jdGlvbiBfSlNfV2ViUmVxdWVzdF9TZXRUaW1lb3V0KHJlcXVlc3RJZCx0aW1lb3V0KXt2YXIgcmVxdWVzdE9wdGlvbnM9d3IucmVxdWVzdHNbcmVxdWVzdElkXTtpZighcmVxdWVzdE9wdGlvbnMpe3JldHVybn1yZXF1ZXN0T3B0aW9ucy50aW1lb3V0PXRpbWVvdXR9ZnVuY3Rpb24gX0xpc3RlbkZvckNoaWxkQWRkZWQocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS5vbigiY2hpbGRfYWRkZWQiLGZ1bmN0aW9uKHNuYXBzaG90KXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLEpTT04uc3RyaW5naWZ5KHNuYXBzaG90LnZhbCgpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX0xpc3RlbkZvckNoaWxkQ2hhbmdlZChwYXRoLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhwYXRoKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLmRhdGFiYXNlKCkucmVmKHBhcnNlZFBhdGgpLm9uKCJjaGlsZF9jaGFuZ2VkIixmdW5jdGlvbihzbmFwc2hvdCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjayxKU09OLnN0cmluZ2lmeShzbmFwc2hvdC52YWwoKSkpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9MaXN0ZW5Gb3JDaGlsZFJlbW92ZWQocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS5vbigiY2hpbGRfcmVtb3ZlZCIsZnVuY3Rpb24oc25hcHNob3Qpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssSlNPTi5zdHJpbmdpZnkoc25hcHNob3QudmFsKCkpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfTGlzdGVuRm9yQ29sbGVjdGlvbkNoYW5nZShjb2xsZWN0aW9uUGF0aCxpbmNsdWRlTWV0YWRhdGFDaGFuZ2VzLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhjb2xsZWN0aW9uUGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtpZih0eXBlb2YgZmlyZXN0b3JlbGlzdGVuZXJzPT09InVuZGVmaW5lZCIpZmlyZXN0b3JlbGlzdGVuZXJzPXt9O3RoaXMuZmlyZXN0b3JlbGlzdGVuZXJzW3BhcnNlZFBhdGgrIi9jb2xsZWN0aW9uLyJdPWZpcmViYXNlLmZpcmVzdG9yZSgpLmNvbGxlY3Rpb24ocGFyc2VkUGF0aCkub25TbmFwc2hvdCh7aW5jbHVkZU1ldGFkYXRhQ2hhbmdlczppbmNsdWRlTWV0YWRhdGFDaGFuZ2VzPT0xfSxmdW5jdGlvbihxdWVyeVNuYXBzaG90KXt2YXIgZG9jcz17fTtxdWVyeVNuYXBzaG90LmZvckVhY2goZnVuY3Rpb24oZG9jKXtkb2NzW2RvYy5pZF09ZG9jLmRhdGEoKX0pO3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZG9jcykpfSxmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfTGlzdGVuRm9yRG9jdW1lbnRDaGFuZ2UoY29sbGVjdGlvblBhdGgsZG9jdW1lbnRJZCxpbmNsdWRlTWV0YWRhdGFDaGFuZ2VzLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhjb2xsZWN0aW9uUGF0aCk7dmFyIHBhcnNlZElkPVVURjhUb1N0cmluZyhkb2N1bWVudElkKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2lmKHR5cGVvZiBmaXJlc3RvcmVsaXN0ZW5lcnM9PT0idW5kZWZpbmVkIilmaXJlc3RvcmVsaXN0ZW5lcnM9e307dGhpcy5maXJlc3RvcmVsaXN0ZW5lcnNbcGFyc2VkUGF0aCsiLyIrcGFyc2VkSWRdPWZpcmViYXNlLmZpcmVzdG9yZSgpLmNvbGxlY3Rpb24ocGFyc2VkUGF0aCkuZG9jKHBhcnNlZElkKS5vblNuYXBzaG90KHtpbmNsdWRlTWV0YWRhdGFDaGFuZ2VzOmluY2x1ZGVNZXRhZGF0YUNoYW5nZXM9PTF9LGZ1bmN0aW9uKGRvYyl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjayxKU09OLnN0cmluZ2lmeShkb2MuZGF0YSgpKSl9LGZ1bmN0aW9uKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9MaXN0ZW5Gb3JWYWx1ZUNoYW5nZWQocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS5vbigidmFsdWUiLGZ1bmN0aW9uKHNuYXBzaG90KXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLEpTT04uc3RyaW5naWZ5KHNuYXBzaG90LnZhbCgpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX0xvZ0V2ZW50KGV2ZW50TmFtZSl7dmFyIGV2ZW50X25hbWU9VVRGOFRvU3RyaW5nKGV2ZW50TmFtZSk7ZmlyZWJhc2UuYW5hbHl0aWNzKCkubG9nRXZlbnQoZXZlbnRfbmFtZSl9ZnVuY3Rpb24gX0xvZ0V2ZW50UGFyYW1ldGVyKGV2ZW50TmFtZSxldmVudFBhcmFtZXRlcil7dmFyIGV2ZW50X25hbWU9VVRGOFRvU3RyaW5nKGV2ZW50TmFtZSk7dmFyIGV2ZW50X3BhcmFtPUpTT04ucGFyc2UoVVRGOFRvU3RyaW5nKGV2ZW50UGFyYW1ldGVyKSk7ZmlyZWJhc2UuYW5hbHl0aWNzKCkubG9nRXZlbnQoZXZlbnRfbmFtZSxldmVudF9wYXJhbSl9ZnVuY3Rpb24gX01vZGlmeU51bWJlcldpdGhUcmFuc2FjdGlvbihwYXRoLGFtb3VudCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS50cmFuc2FjdGlvbihmdW5jdGlvbihjdXJyZW50VmFsdWUpe2lmKCFpc05hTihjdXJyZW50VmFsdWUpKXtyZXR1cm4gY3VycmVudFZhbHVlK2Ftb3VudH1lbHNle3JldHVybiBhbW91bnR9fSkudGhlbihmdW5jdGlvbih1bnVzZWQpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IHRyYW5zYWN0aW9uIHJ1biBpbiAiK3BhcnNlZFBhdGgpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9PbkF1dGhTdGF0ZUNoYW5nZWQob2JqZWN0TmFtZSxvblVzZXJTaWduZWRJbixvblVzZXJTaWduZWRPdXQpe3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkT25Vc2VyU2lnbmVkSW49VVRGOFRvU3RyaW5nKG9uVXNlclNpZ25lZEluKTt2YXIgcGFyc2VkT25Vc2VyU2lnbmVkT3V0PVVURjhUb1N0cmluZyhvblVzZXJTaWduZWRPdXQpO2ZpcmViYXNlLmF1dGgoKS5vbkF1dGhTdGF0ZUNoYW5nZWQoZnVuY3Rpb24odXNlcil7aWYodXNlcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRPblVzZXJTaWduZWRJbixKU09OLnN0cmluZ2lmeSh1c2VyKSl9ZWxzZXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZE9uVXNlclNpZ25lZE91dCwiVXNlciBzaWduZWQgb3V0Iil9fSl9ZnVuY3Rpb24gX0RvUGluZyhXZ09iamVjdE5hbWUpe3dpbmRvd1sid2dVbml0eUluc3RhbmNlIl09TW9kdWxlO3RyeXt3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0ubG9nKCJXR1NESzogV2VlR29vIEluR2FtZSBBZCwgcGluZ2luZy4iKTt3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0ucGluZyhXZ09iamVjdE5hbWUpfWNhdGNoKGUpe2NvbnNvbGUubG9nKCJXR1NESzogTm8gcHJvZHVjdGlvbiBXR1NESyByZXNvdXJjZXMgZm91bmQsIGxvYWRpbmcgZGV2ZWxvcG1lbnQgcmVzb3VyY2VzLiIpO3ZhciB3Z0NvbmY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7d2dDb25mLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKGV2KXt2YXIgd2dMaWJyYXJ5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3dnTGlicmFyeS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbihldil7Y29uc29sZS5sb2coIldHU0RLOiBEZXZlbG9wbWVudCByZXNvdXJjZXMgbG9hZGVkLiIpO19QaW5nKFdnT2JqZWN0TmFtZSx0cnVlKX0uYmluZCh0aGlzKSk7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh3Z0xpYnJhcnkpO3dnTGlicmFyeS5zcmM9Imh0dHBzOi8vYWZnLndncGxheWVyLmNvbS93Z3BsYXllci5jb20vanMvUmtRRGg4S1d0NjJWb0gwOUZQTllxQS8yMzU3OTk1Njc5L3dnQWRzLmpzIn0uYmluZCh0aGlzKSk7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh3Z0NvbmYpO3dnQ29uZi5zcmM9Imh0dHBzOi8vYWZnLndncGxheWVyLmNvbS93Z3BsYXllci5jb20vd2dBZHMuaWZyYW1lLmNvbmYuanMifX1mdW5jdGlvbiBfUGluZyhXZ09iamVjdE5hbWUsaXNTdHJpbmcpe3ZhciBvYmpOYW1lO2lmKGlzU3RyaW5nPT09dHJ1ZSl7b2JqTmFtZT1XZ09iamVjdE5hbWV9ZWxzZXtvYmpOYW1lPVBvaW50ZXJfc3RyaW5naWZ5KFdnT2JqZWN0TmFtZSl9c2V0VGltZW91dChmdW5jdGlvbigpe19Eb1Bpbmcob2JqTmFtZSl9LDI1MCl9ZnVuY3Rpb24gX1Bvc3RKU09OKHBhdGgsdmFsdWUsb2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZFBhdGg9VVRGOFRvU3RyaW5nKHBhdGgpO3ZhciBwYXJzZWRWYWx1ZT1VVEY4VG9TdHJpbmcodmFsdWUpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuZGF0YWJhc2UoKS5yZWYocGFyc2VkUGF0aCkuc2V0KEpTT04ucGFyc2UocGFyc2VkVmFsdWUpKS50aGVuKGZ1bmN0aW9uKHVudXNlZCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogIitwYXJzZWRWYWx1ZSsiIHdhcyBwb3N0ZWQgdG8gIitwYXJzZWRQYXRoKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfUHVzaEpTT04ocGF0aCx2YWx1ZSxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZFZhbHVlPVVURjhUb1N0cmluZyh2YWx1ZSk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS5wdXNoKCkuc2V0KEpTT04ucGFyc2UocGFyc2VkVmFsdWUpKS50aGVuKGZ1bmN0aW9uKHVudXNlZCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogIitwYXJzZWRWYWx1ZSsiIHdhcyBwdXNoZWQgdG8gIitwYXJzZWRQYXRoKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfUmVkaXJlY3QodXJsKXt1cmw9UG9pbnRlcl9zdHJpbmdpZnkodXJsKTt3aW5kb3cub3Blbih1cmwpfWZ1bmN0aW9uIF9SZWRpcmVjdERvbWFpbihjaGVja19kb21haW5zX3N0cixyZWRpcmVjdF9kb21haW4pe3ZhciByZWRpcmVjdD10cnVlO3ZhciBkb21haW5zX3N0cmluZz1Qb2ludGVyX3N0cmluZ2lmeShjaGVja19kb21haW5zX3N0cik7dmFyIHJlZGlyZWN0X2RvbWFpbl9zdHJpbmc9UG9pbnRlcl9zdHJpbmdpZnkocmVkaXJlY3RfZG9tYWluKTt2YXIgY2hlY2tfZG9tYWlucz1kb21haW5zX3N0cmluZy5zcGxpdCgifCIpO2Zvcih2YXIgaT0wO2k8Y2hlY2tfZG9tYWlucy5sZW5ndGg7aSsrKXt2YXIgZG9tYWluPWNoZWNrX2RvbWFpbnNbaV07aWYoZG9jdW1lbnQubG9jYXRpb24uaG9zdD09ZG9tYWluKXtyZWRpcmVjdD1mYWxzZX19aWYocmVkaXJlY3Qpe2RvY3VtZW50LmxvY2F0aW9uPXJlZGlyZWN0X2RvbWFpbl9zdHJpbmc7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIF9SZWZldGNoUmV3YXJkKCl7dHJ5e3dpbmRvd1twcmVyb2xsLmNvbmZpZy5sb2FkZXJPYmplY3ROYW1lXS5sb2coIldHU0RLOiBSZWZldGNoaW5nIHJld2FyZCBhZC4iKTt3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0ucmV3YXJkZWQuaW5pdFNsb3QuY2FsbCh3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0pfWNhdGNoKGUpe2NvbnNvbGUubG9nKCJObyBXZWVHb29BRkcgaW1wbGVtZW50YXRpb24gZm91bmQhIil9fWZ1bmN0aW9uIF9SZWdpc3RlckdhbWVDb250cm9scygpe3RyeXt3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0ubG9nKCJXR1NESzogR2FtZSBjb250cm9scyByZWdpc3RlcmVkLiIpO3dpbmRvd1t3aW5kb3cucHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0ucmVnaXN0ZXJHYW1lQ29udHJvbHMoTW9kdWxlKX1jYXRjaChlKXtjb25zb2xlLmxvZygiV0dTREs6IENhbiBub3QgcmVnaXN0ZXIgZ2FtZSBjb250cm9scy4iKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X1JlZ2lzdGVyR2FtZUNvbnRyb2xzKCl9LDI1MCl9fWZ1bmN0aW9uIF9Eb1JlZ2lzdGVyUmV3YXJkQ2FsbGJhY2tzKCl7dHJ5e3dpbmRvd1twcmVyb2xsLmNvbmZpZy5sb2FkZXJPYmplY3ROYW1lXS5sb2coIldHU0RLOiBSZXdhcmQgY2FsbGJhY2tzIHJlZ2lzdGVyZWQuIik7d2luZG93W3dpbmRvdy5wcmVyb2xsLmNvbmZpZy5sb2FkZXJPYmplY3ROYW1lXS5yZWdpc3RlclJld2FyZENhbGxiYWNrcyh7b25SZWFkeToiT25SZWFkeU1ldGhvZCIsb25TdWNjZXNzOiJPblN1Y2Nlc3NNZXRob2QiLG9uRmFpbDoiT25GYWlsTWV0aG9kIn0pfWNhdGNoKGUpe2NvbnNvbGUubG9nKCJXR1NESzogQ2FuIG5vdCByZWdpc3RlciByZXdhcmQgYWQgY2FsbGJhY2tzLiIpO19SZWdpc3RlclJld2FyZENhbGxiYWNrcygpfX1mdW5jdGlvbiBfUmVnaXN0ZXJSZXdhcmRDYWxsYmFja3MoKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X0RvUmVnaXN0ZXJSZXdhcmRDYWxsYmFja3MoKX0sMjUwKX1mdW5jdGlvbiBfUmVtb3ZlRWxlbWVudEluQXJyYXlGaWVsZChjb2xsZWN0aW9uUGF0aCxkb2N1bWVudElkLGZpZWxkLHZhbHVlLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhjb2xsZWN0aW9uUGF0aCk7dmFyIHBhcnNlZElkPVVURjhUb1N0cmluZyhkb2N1bWVudElkKTt2YXIgcGFyc2VkRmllbGQ9VVRGOFRvU3RyaW5nKGZpZWxkKTt2YXIgcGFyc2VkVmFsdWU9VVRGOFRvU3RyaW5nKHZhbHVlKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e3ZhciB2YWx1ZT17fTt2YWx1ZVtwYXJzZWRGaWVsZF09ZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuYXJyYXlSZW1vdmUoSlNPTi5wYXJzZShwYXJzZWRWYWx1ZSkpO2ZpcmViYXNlLmZpcmVzdG9yZSgpLmNvbGxlY3Rpb24ocGFyc2VkUGF0aCkuZG9jKHBhcnNlZElkKS51cGRhdGUodmFsdWUpLnRoZW4oZnVuY3Rpb24oKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJTdWNjZXNzOiBlbGVtZW50ICIrcGFyc2VkVmFsdWUrIiB3YXMgcmVtb3ZlZCBpbiAiK3BhcnNlZEZpZWxkKX0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9TREtfRm9jdXNHYW1lQ29udGFpbmVyKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJmb2N1cyBnYW1lIGNvbnRhaW5lciIpfSw1MDApfWZ1bmN0aW9uIF9TREtfSW5pdChfZW5hYmxlQWRzLF9nYW1lS2V5LF9wdWJJRCxfZGVidWcsX3VubG9ja1RpbWVyLF90aW1lU2hvd0ludGVyKXtfZ2FtZUtleT1VVEY4VG9TdHJpbmcoX2dhbWVLZXkpO19wdWJJRD1VVEY4VG9TdHJpbmcoX3B1YklEKTtfZGVidWc9X2RlYnVnPT0xP3RydWU6ZmFsc2U7X2VuYWJsZUFkcz1fZW5hYmxlQWRzPT0xP3RydWU6ZmFsc2U7d2luZG93WyJHTVNPRlRfT1BUSU9OUyJdPXtlbmFibGVBZHM6X2VuYWJsZUFkcyxkZWJ1ZzpfZGVidWcsZ2FtZUlkOl9nYW1lS2V5LHB1YklkOl9wdWJJRCx1bmxvY2tUaW1lcjpfdW5sb2NrVGltZXIsdGltZVNob3dJbnRlcjpfdGltZVNob3dJbnRlcn07KGZ1bmN0aW9uKGQscyxpZCl7dmFyIGpzLGZqcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdO2lmKGQuZ2V0RWxlbWVudEJ5SWQoaWQpKXJldHVybjtqcz1kLmNyZWF0ZUVsZW1lbnQocyk7anMuaWQ9aWQ7anMuc3JjPSIiO2Zqcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqcyxmanMpfSkoZG9jdW1lbnQsInNjcmlwdCIsImdtc29mdC1qc3NkayIpO2NvbnNvbGUubG9nKCIlYyAlYyAlYyBHTVNPRlQgU0RLIHwgVmVyc2lvbjogMy4yICVjICVjICVjIiwiYmFja2dyb3VuZDogIzk4NTRkOCIsImJhY2tncm91bmQ6ICM2YzJjYTciLCJjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogIzQ1MGY3ODsiLCJiYWNrZ3JvdW5kOiAjNmMyY2E3IiwiYmFja2dyb3VuZDogIzk4NTRkOCIsImJhY2tncm91bmQ6ICNmZmZmZmYiKX1mdW5jdGlvbiBfU0RLX0luaXRQYXJhbSgpe1NlbmRNZXNzYWdlKCJHbVNvZnQiLCJTZXRQYXJhbSIsSlNPTi5zdHJpbmdpZnkod2luZG93WyJHTVNPRlRfT1BUSU9OUyJdKSl9ZnVuY3Rpb24gX1NES19QcmVsb2FkQWQoKXtpZih3aW5kb3dbIkdNU09GVF9PUFRJT05TIl0uZW5hYmxlQWRzPT1mYWxzZSl7aWYoYWZnLnJlYWR5KXtTZW5kTWVzc2FnZSgiR21Tb2Z0IiwiUHJlbG9hZFJld2FyZGVkVmlkZW9DYWxsYmFjayIsMSk7YWZnLmFkQnJlYWsoe3R5cGU6InJld2FyZCIsbmFtZToicmV3YXJkIGFkcyIsYmVmb3JlUmV3YXJkOmZ1bmN0aW9uKHNob3dBZEZuKXt0aGlzLl9zaG93UmV3YXJkQWRGbj1zaG93QWRGbjtjb25zb2xlLmxvZygiYmVmb3JlIHJld2FyZCIpfS5iaW5kKHRoaXMpLGFkVmlld2VkOmZ1bmN0aW9uKCl7dGhpcy5fc2hvd1Jld2FyZEFkRm49bnVsbDtTZW5kTWVzc2FnZSgiR21Tb2Z0IiwiUmV3YXJkZWRWaWRlb1N1Y2Nlc3NDYWxsYmFjayIpO2NvbnNvbGUubG9nKCJhZCB2aWV3ZWQiKX0uYmluZCh0aGlzKSxhZERpc21pc3NlZDpmdW5jdGlvbigpe3RoaXMuX3Nob3dSZXdhcmRBZEZuPW51bGw7U2VuZE1lc3NhZ2UoIkdtU29mdCIsIlJld2FyZGVkVmlkZW9GYWlsdXJlQ2FsbGJhY2siKTtjb25zb2xlLmxvZygiYWQgZmFpbHVyZSIpfS5iaW5kKHRoaXMpLGFkQnJlYWtEb25lOmZ1bmN0aW9uKHBsYWNlbWVudEluZm8pe2NvbnNvbGUubG9nKCJhZCBicmVhayBkb25lIik7U2VuZE1lc3NhZ2UoIkdtU29mdCIsIlJlc3VtZUdhbWVDYWxsYmFjayIpfS5iaW5kKHRoaXMpfSl9ZWxzZXtjb25zb2xlLmxvZygibm8gcmV3YXJkIGFkcyIpO1NlbmRNZXNzYWdlKCJHbVNvZnQiLCJQcmVsb2FkUmV3YXJkZWRWaWRlb0NhbGxiYWNrIiwwKTtTZW5kTWVzc2FnZSgiR21Tb2Z0IiwiUmVzdW1lR2FtZUNhbGxiYWNrIil9fWVsc2V7U2VuZE1lc3NhZ2UoIkdtU29mdCIsIlJlc3VtZUdhbWVDYWxsYmFjayIpfX1mdW5jdGlvbiBfU0RLX1NlbmRFdmVudChvcHRpb25zKXtvcHRpb25zPVVURjhUb1N0cmluZyhvcHRpb25zKTtpZih0eXBlb2YgZ2RzZGshPT0idW5kZWZpbmVkIiYmdHlwZW9mIGdkc2RrLnNlbmRFdmVudCE9PSJ1bmRlZmluZWQiJiZ0eXBlb2Ygb3B0aW9ucyE9PSJ1bmRlZmluZWQiKXtnZHNkay5zZW5kRXZlbnQob3B0aW9ucykudGhlbihmdW5jdGlvbihyZXNwb25zZSl7Y29uc29sZS5sb2coIkdhbWUgZXZlbnQgcG9zdCBtZXNzYWdlIHNlbnQgU3VjY2VzZnVsbHkuLi4iKX0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKXtjb25zb2xlLmxvZyhlcnJvci5tZXNzYWdlKX0pfX1mdW5jdGlvbiBfU0RLX1Nob3dBZChhZFR5cGUpe2lmKHdpbmRvd1siR01TT0ZUX09QVElPTlMiXS5lbmFibGVBZHM9PWZhbHNlKXthZFR5cGU9VVRGOFRvU3RyaW5nKGFkVHlwZSk7dmFyIF9hZF90eXBlPVsicHJlcm9sbCIsInN0YXJ0IiwicGF1c2UiLCJuZXh0IiwiYnJvd3NlIiwicmV3YXJkIiwicHJlbG9hZC1yZXdhcmQiXTtpZihfYWRfdHlwZS5pbmRleE9mKGFkVHlwZSk+LTE9PWZhbHNlKWFkVHlwZT0ic3RhcnQiO2NvbnNvbGUubG9nKCJhZCB0eXBlIithZFR5cGUpO2lmKGFkVHlwZT09InN0YXJ0Inx8YWRUeXBlPT0icHJlcm9sbCJ8fGFkVHlwZT09Im5leHQiKXtpZihhZmcucmVhZHkpe2FmZy5hZEJyZWFrKHt0eXBlOmFkVHlwZSxuYW1lOmFkVHlwZSxiZWZvcmVBZDpmdW5jdGlvbigpe2FmZy5vbkJlZm9yZUFkKCk7Y29uc29sZS5sb2coImJlZm9yZSBhZCIpO1NlbmRNZXNzYWdlKCJHbVNvZnQiLCJQYXVzZUdhbWVDYWxsYmFjayIpfS5iaW5kKHRoaXMpLGFkQnJlYWtEb25lOmZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIlByZXJvbGwgZG9uZSB2aWV3ZWQiKTtTZW5kTWVzc2FnZSgiR21Tb2Z0IiwiUmVzdW1lR2FtZUNhbGxiYWNrIil9LmJpbmQodGhpcyl9KX1lbHNle2NvbnNvbGUubG9nKCJubyAiK2FkVHlwZSsiIGFkcyIpO1NlbmRNZXNzYWdlKCJHbVNvZnQiLCJSZXN1bWVHYW1lQ2FsbGJhY2siKX19ZWxzZSBpZihhZFR5cGU9PSJyZXdhcmQiKXtpZih0aGlzLl9zaG93UmV3YXJkQWRGbil7U2VuZE1lc3NhZ2UoIkdtU29mdCIsIlBhdXNlR2FtZUNhbGxiYWNrIik7dGhpcy5fc2hvd1Jld2FyZEFkRm4oKX19fWVsc2V7U2VuZE1lc3NhZ2UoIkdtU29mdCIsIlJlc3VtZUdhbWVDYWxsYmFjayIpfX1mdW5jdGlvbiBfU2V0RG9jdW1lbnQoY29sbGVjdGlvblBhdGgsZG9jdW1lbnRJZCx2YWx1ZSxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcoY29sbGVjdGlvblBhdGgpO3ZhciBwYXJzZWRJZD1VVEY4VG9TdHJpbmcoZG9jdW1lbnRJZCk7dmFyIHBhcnNlZFZhbHVlPVVURjhUb1N0cmluZyh2YWx1ZSk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5maXJlc3RvcmUoKS5jb2xsZWN0aW9uKHBhcnNlZFBhdGgpLmRvYyhwYXJzZWRJZCkuc2V0KEpTT04ucGFyc2UocGFyc2VkVmFsdWUpKS50aGVuKGZ1bmN0aW9uKCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogZG9jdW1lbnQgIitwYXJzZWRJZCsiIHdhcyBzZXQiKX0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9TZXRVc2VyUHJvcGVydGllcyhwcm9wZXJ0aWVzKXt2YXIgcHJvcHM9SlNPTi5wYXJzZShVVEY4VG9TdHJpbmcocHJvcGVydGllcykpO2ZpcmViYXNlLmFuYWx5dGljcygpLnNldFVzZXJQcm9wZXJ0aWVzKHByb3BzKX1mdW5jdGlvbiBfU2hvd1Jld2FyZEFkQ2FsbGJhY2soKXt3aW5kb3dbcHJlcm9sbC5jb25maWcubG9hZGVyT2JqZWN0TmFtZV0uc2hvd1Jld2FyZEFkKCl9ZnVuY3Rpb24gX1NpZ25JbkFub255bW91c2x5KG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuYXV0aCgpLnNpZ25JbkFub255bW91c2x5KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IHNpZ25lZCB1cCBmb3IgIityZXN1bHQpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX1NpZ25JbldpdGhFbWFpbEFuZFBhc3N3b3JkKGVtYWlsLHBhc3N3b3JkLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRFbWFpbD1VVEY4VG9TdHJpbmcoZW1haWwpO3ZhciBwYXJzZWRQYXNzd29yZD1VVEY4VG9TdHJpbmcocGFzc3dvcmQpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuYXV0aCgpLnNpZ25JbldpdGhFbWFpbEFuZFBhc3N3b3JkKHBhcnNlZEVtYWlsLHBhcnNlZFBhc3N3b3JkKS50aGVuKGZ1bmN0aW9uKHVudXNlZCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2Vzczogc2lnbmVkIGluIGZvciAiK3BhcnNlZEVtYWlsKX0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9TaWduSW5XaXRoRmFjZWJvb2sob2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXt2YXIgcHJvdmlkZXI9bmV3IGZpcmViYXNlLmF1dGguRmFjZWJvb2tBdXRoUHJvdmlkZXI7ZmlyZWJhc2UuYXV0aCgpLnNpZ25JbldpdGhSZWRpcmVjdChwcm92aWRlcikudGhlbihmdW5jdGlvbih1bnVzZWQpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IHNpZ25lZCBpbiB3aXRoIEZhY2Vib29rISIpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX1NpZ25JbldpdGhHb29nbGUob2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXt2YXIgcHJvdmlkZXI9bmV3IGZpcmViYXNlLmF1dGguR29vZ2xlQXV0aFByb3ZpZGVyO2ZpcmViYXNlLmF1dGgoKS5zaWduSW5XaXRoUmVkaXJlY3QocHJvdmlkZXIpLnRoZW4oZnVuY3Rpb24odW51c2VkKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJTdWNjZXNzOiBzaWduZWQgaW4gd2l0aCBHb29nbGUhIil9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfU3RvcExpc3RlbmluZ0ZvckNoaWxkQWRkZWQocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS5vZmYoImNoaWxkX2FkZGVkIik7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogbGlzdGVuZXIgcmVtb3ZlZCIpfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfU3RvcExpc3RlbmluZ0ZvckNoaWxkQ2hhbmdlZChwYXRoLG9iamVjdE5hbWUsY2FsbGJhY2ssZmFsbGJhY2spe3ZhciBwYXJzZWRQYXRoPVVURjhUb1N0cmluZyhwYXRoKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLmRhdGFiYXNlKCkucmVmKHBhcnNlZFBhdGgpLm9mZigiY2hpbGRfY2hhbmdlZCIpO3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGxpc3RlbmVyIHJlbW92ZWQiKX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX1N0b3BMaXN0ZW5pbmdGb3JDaGlsZFJlbW92ZWQocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS5vZmYoImNoaWxkX3JlbW92ZWQiKTt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJTdWNjZXNzOiBsaXN0ZW5lciByZW1vdmVkIil9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9TdG9wTGlzdGVuaW5nRm9yQ29sbGVjdGlvbkNoYW5nZShjb2xsZWN0aW9uUGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcoY29sbGVjdGlvblBhdGgpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7aWYodHlwZW9mIGZpcmVzdG9yZWxpc3RlbmVycz09PSJ1bmRlZmluZWQiKWZpcmVzdG9yZWxpc3RlbmVycz17fTt0aGlzLmZpcmVzdG9yZWxpc3RlbmVyc1twYXJzZWRQYXRoKyIvY29sbGVjdGlvbi8iXSgpO3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGxpc3RlbmVyIHdhcyByZW1vdmVkIil9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9TdG9wTGlzdGVuaW5nRm9yRG9jdW1lbnRDaGFuZ2UoY29sbGVjdGlvblBhdGgsZG9jdW1lbnRJZCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcoY29sbGVjdGlvblBhdGgpO3ZhciBwYXJzZWRJZD1VVEY4VG9TdHJpbmcoZG9jdW1lbnRJZCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtpZih0eXBlb2YgZmlyZXN0b3JlbGlzdGVuZXJzPT09InVuZGVmaW5lZCIpZmlyZXN0b3JlbGlzdGVuZXJzPXt9O3RoaXMuZmlyZXN0b3JlbGlzdGVuZXJzW3BhcnNlZFBhdGgrIi8iK3BhcnNlZElkXSgpO3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGxpc3RlbmVyIHdhcyByZW1vdmVkIil9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9fWZ1bmN0aW9uIF9TdG9wTGlzdGVuaW5nRm9yVmFsdWVDaGFuZ2VkKHBhdGgsb2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZFBhdGg9VVRGOFRvU3RyaW5nKHBhdGgpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuZGF0YWJhc2UoKS5yZWYocGFyc2VkUGF0aCkub2ZmKCJ2YWx1ZSIpO3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGxpc3RlbmVyIHJlbW92ZWQiKX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX1RvZ2dsZUJvb2xlYW5XaXRoVHJhbnNhY3Rpb24ocGF0aCxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS50cmFuc2FjdGlvbihmdW5jdGlvbihjdXJyZW50VmFsdWUpe2lmKHR5cGVvZiBjdXJyZW50VmFsdWU9PT0iYm9vbGVhbiIpe3JldHVybiFjdXJyZW50VmFsdWV9ZWxzZXtyZXR1cm4gdHJ1ZX19KS50aGVuKGZ1bmN0aW9uKHVudXNlZCl7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRDYWxsYmFjaywiU3VjY2VzczogdHJhbnNhY3Rpb24gcnVuIGluICIrcGFyc2VkUGF0aCl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX1VwZGF0ZURvY3VtZW50KGNvbGxlY3Rpb25QYXRoLGRvY3VtZW50SWQsdmFsdWUsb2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZFBhdGg9VVRGOFRvU3RyaW5nKGNvbGxlY3Rpb25QYXRoKTt2YXIgcGFyc2VkSWQ9VVRGOFRvU3RyaW5nKGRvY3VtZW50SWQpO3ZhciBwYXJzZWRWYWx1ZT1VVEY4VG9TdHJpbmcodmFsdWUpO3ZhciBwYXJzZWRPYmplY3ROYW1lPVVURjhUb1N0cmluZyhvYmplY3ROYW1lKTt2YXIgcGFyc2VkQ2FsbGJhY2s9VVRGOFRvU3RyaW5nKGNhbGxiYWNrKTt2YXIgcGFyc2VkRmFsbGJhY2s9VVRGOFRvU3RyaW5nKGZhbGxiYWNrKTt0cnl7ZmlyZWJhc2UuZmlyZXN0b3JlKCkuY29sbGVjdGlvbihwYXJzZWRQYXRoKS5kb2MocGFyc2VkSWQpLnVwZGF0ZShKU09OLnBhcnNlKHBhcnNlZFZhbHVlKSkudGhlbihmdW5jdGlvbigpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGRvY3VtZW50ICIrcGFyc2VkSWQrIiB3YXMgdXBkYXRlZCIpfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9KX1jYXRjaChlcnJvcil7d2luZG93LnVuaXR5SW5zdGFuY2UuU2VuZE1lc3NhZ2UocGFyc2VkT2JqZWN0TmFtZSxwYXJzZWRGYWxsYmFjayxKU09OLnN0cmluZ2lmeShlcnJvcixPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpKX19ZnVuY3Rpb24gX1VwZGF0ZUpTT04ocGF0aCx2YWx1ZSxvYmplY3ROYW1lLGNhbGxiYWNrLGZhbGxiYWNrKXt2YXIgcGFyc2VkUGF0aD1VVEY4VG9TdHJpbmcocGF0aCk7dmFyIHBhcnNlZFZhbHVlPVVURjhUb1N0cmluZyh2YWx1ZSk7dmFyIHBhcnNlZE9iamVjdE5hbWU9VVRGOFRvU3RyaW5nKG9iamVjdE5hbWUpO3ZhciBwYXJzZWRDYWxsYmFjaz1VVEY4VG9TdHJpbmcoY2FsbGJhY2spO3ZhciBwYXJzZWRGYWxsYmFjaz1VVEY4VG9TdHJpbmcoZmFsbGJhY2spO3RyeXtmaXJlYmFzZS5kYXRhYmFzZSgpLnJlZihwYXJzZWRQYXRoKS51cGRhdGUoSlNPTi5wYXJzZShwYXJzZWRWYWx1ZSkpLnRoZW4oZnVuY3Rpb24odW51c2VkKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZENhbGxiYWNrLCJTdWNjZXNzOiAiK3BhcnNlZFZhbHVlKyIgd2FzIHVwZGF0ZWQgaW4gIitwYXJzZWRQYXRoKX0pfWNhdGNoKGVycm9yKXt3aW5kb3cudW5pdHlJbnN0YW5jZS5TZW5kTWVzc2FnZShwYXJzZWRPYmplY3ROYW1lLHBhcnNlZEZhbGxiYWNrLEpTT04uc3RyaW5naWZ5KGVycm9yLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSkpfX1mdW5jdGlvbiBfVXBsb2FkRmlsZShwYXRoLGRhdGEsb2JqZWN0TmFtZSxjYWxsYmFjayxmYWxsYmFjayl7dmFyIHBhcnNlZFBhdGg9VVRGOFRvU3RyaW5nKHBhdGgpO3ZhciBwYXJzZWREYXRhPVVURjhUb1N0cmluZyhkYXRhKTt2YXIgcGFyc2VkT2JqZWN0TmFtZT1VVEY4VG9TdHJpbmcob2JqZWN0TmFtZSk7dmFyIHBhcnNlZENhbGxiYWNrPVVURjhUb1N0cmluZyhjYWxsYmFjayk7dmFyIHBhcnNlZEZhbGxiYWNrPVVURjhUb1N0cmluZyhmYWxsYmFjayk7dHJ5e2ZpcmViYXNlLnN0b3JhZ2UoKS5yZWYocGFyc2VkUGF0aCkucHV0KGJhc2U2NFRvQXJyYXlCdWZmZXIocGFyc2VkRGF0YSkpLnRoZW4oZnVuY3Rpb24oc25hcHNob3Qpe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkQ2FsbGJhY2ssIlN1Y2Nlc3M6IGRhdGEgd2FzIHBvc3RlZCB0byAiK3BhcnNlZFBhdGgpfSl9Y2F0Y2goZXJyb3Ipe3dpbmRvdy51bml0eUluc3RhbmNlLlNlbmRNZXNzYWdlKHBhcnNlZE9iamVjdE5hbWUscGFyc2VkRmFsbGJhY2ssSlNPTi5zdHJpbmdpZnkoZXJyb3IsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSl9ZnVuY3Rpb24gYmFzZTY0VG9BcnJheUJ1ZmZlcihiYXNlNjQpe3ZhciBiaW5hcnlfc3RyaW5nPXdpbmRvdy5hdG9iKGJhc2U2NCk7dmFyIGxlbj1iaW5hcnlfc3RyaW5nLmxlbmd0aDt2YXIgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2J5dGVzW2ldPWJpbmFyeV9zdHJpbmcuY2hhckNvZGVBdChpKX1yZXR1cm4gYnl0ZXMuYnVmZmVyfX12YXIgRXhjZXB0aW9uSW5mb0F0dHJzPXtERVNUUlVDVE9SX09GRlNFVDowLFJFRkNPVU5UX09GRlNFVDo0LFRZUEVfT0ZGU0VUOjgsQ0FVR0hUX09GRlNFVDoxMixSRVRIUk9XTl9PRkZTRVQ6MTMsU0laRToxNn07ZnVuY3Rpb24gX19fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbihzaXplKXtyZXR1cm4gX21hbGxvYyhzaXplK0V4Y2VwdGlvbkluZm9BdHRycy5TSVpFKStFeGNlcHRpb25JbmZvQXR0cnMuU0laRX1mdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cil7dGhpcy5leGNQdHI9ZXhjUHRyO3RoaXMucHRyPWV4Y1B0ci1FeGNlcHRpb25JbmZvQXR0cnMuU0laRTt0aGlzLnNldF90eXBlPWZ1bmN0aW9uKHR5cGUpe0hFQVAzMlt0aGlzLnB0citFeGNlcHRpb25JbmZvQXR0cnMuVFlQRV9PRkZTRVQ+PjJdPXR5cGV9O3RoaXMuZ2V0X3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gSEVBUDMyW3RoaXMucHRyK0V4Y2VwdGlvbkluZm9BdHRycy5UWVBFX09GRlNFVD4+Ml19O3RoaXMuc2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oZGVzdHJ1Y3Rvcil7SEVBUDMyW3RoaXMucHRyK0V4Y2VwdGlvbkluZm9BdHRycy5ERVNUUlVDVE9SX09GRlNFVD4+Ml09ZGVzdHJ1Y3Rvcn07dGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBIRUFQMzJbdGhpcy5wdHIrRXhjZXB0aW9uSW5mb0F0dHJzLkRFU1RSVUNUT1JfT0ZGU0VUPj4yXX07dGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24ocmVmY291bnQpe0hFQVAzMlt0aGlzLnB0citFeGNlcHRpb25JbmZvQXR0cnMuUkVGQ09VTlRfT0ZGU0VUPj4yXT1yZWZjb3VudH07dGhpcy5zZXRfY2F1Z2h0PWZ1bmN0aW9uKGNhdWdodCl7Y2F1Z2h0PWNhdWdodD8xOjA7SEVBUDhbdGhpcy5wdHIrRXhjZXB0aW9uSW5mb0F0dHJzLkNBVUdIVF9PRkZTRVQ+PjBdPWNhdWdodH07dGhpcy5nZXRfY2F1Z2h0PWZ1bmN0aW9uKCl7cmV0dXJuIEhFQVA4W3RoaXMucHRyK0V4Y2VwdGlvbkluZm9BdHRycy5DQVVHSFRfT0ZGU0VUPj4wXSE9MH07dGhpcy5zZXRfcmV0aHJvd249ZnVuY3Rpb24ocmV0aHJvd24pe3JldGhyb3duPXJldGhyb3duPzE6MDtIRUFQOFt0aGlzLnB0citFeGNlcHRpb25JbmZvQXR0cnMuUkVUSFJPV05fT0ZGU0VUPj4wXT1yZXRocm93bn07dGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gSEVBUDhbdGhpcy5wdHIrRXhjZXB0aW9uSW5mb0F0dHJzLlJFVEhST1dOX09GRlNFVD4+MF0hPTB9O3RoaXMuaW5pdD1mdW5jdGlvbih0eXBlLGRlc3RydWN0b3Ipe3RoaXMuc2V0X3R5cGUodHlwZSk7dGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTt0aGlzLnNldF9yZWZjb3VudCgwKTt0aGlzLnNldF9jYXVnaHQoZmFsc2UpO3RoaXMuc2V0X3JldGhyb3duKGZhbHNlKX07dGhpcy5hZGRfcmVmPWZ1bmN0aW9uKCl7dmFyIHZhbHVlPUhFQVAzMlt0aGlzLnB0citFeGNlcHRpb25JbmZvQXR0cnMuUkVGQ09VTlRfT0ZGU0VUPj4yXTtIRUFQMzJbdGhpcy5wdHIrRXhjZXB0aW9uSW5mb0F0dHJzLlJFRkNPVU5UX09GRlNFVD4+Ml09dmFsdWUrMX07dGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBwcmV2PUhFQVAzMlt0aGlzLnB0citFeGNlcHRpb25JbmZvQXR0cnMuUkVGQ09VTlRfT0ZGU0VUPj4yXTtIRUFQMzJbdGhpcy5wdHIrRXhjZXB0aW9uSW5mb0F0dHJzLlJFRkNPVU5UX09GRlNFVD4+Ml09cHJldi0xO3JldHVybiBwcmV2PT09MX19ZnVuY3Rpb24gQ2F0Y2hJbmZvKHB0cil7dGhpcy5mcmVlPWZ1bmN0aW9uKCl7X2ZyZWUodGhpcy5wdHIpO3RoaXMucHRyPTB9O3RoaXMuc2V0X2Jhc2VfcHRyPWZ1bmN0aW9uKGJhc2VQdHIpe0hFQVAzMlt0aGlzLnB0cj4+Ml09YmFzZVB0cn07dGhpcy5nZXRfYmFzZV9wdHI9ZnVuY3Rpb24oKXtyZXR1cm4gSEVBUDMyW3RoaXMucHRyPj4yXX07dGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKGFkanVzdGVkUHRyKXt2YXIgcHRyU2l6ZT00O0hFQVAzMlt0aGlzLnB0citwdHJTaXplPj4yXT1hZGp1c3RlZFB0cn07dGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7dmFyIHB0clNpemU9NDtyZXR1cm4gSEVBUDMyW3RoaXMucHRyK3B0clNpemU+PjJdfTt0aGlzLmdldF9leGNlcHRpb25fcHRyPWZ1bmN0aW9uKCl7dmFyIGlzUG9pbnRlcj1fX19jeGFfaXNfcG9pbnRlcl90eXBlKHRoaXMuZ2V0X2V4Y2VwdGlvbl9pbmZvKCkuZ2V0X3R5cGUoKSk7aWYoaXNQb2ludGVyKXtyZXR1cm4gSEVBUDMyW3RoaXMuZ2V0X2Jhc2VfcHRyKCk+PjJdfXZhciBhZGp1c3RlZD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtpZihhZGp1c3RlZCE9PTApcmV0dXJuIGFkanVzdGVkO3JldHVybiB0aGlzLmdldF9iYXNlX3B0cigpfTt0aGlzLmdldF9leGNlcHRpb25faW5mbz1mdW5jdGlvbigpe3JldHVybiBuZXcgRXhjZXB0aW9uSW5mbyh0aGlzLmdldF9iYXNlX3B0cigpKX07aWYocHRyPT09dW5kZWZpbmVkKXt0aGlzLnB0cj1fbWFsbG9jKDgpO3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKX1lbHNle3RoaXMucHRyPXB0cn19dmFyIGV4Y2VwdGlvbkNhdWdodD1bXTtmdW5jdGlvbiBleGNlcHRpb25fYWRkUmVmKGluZm8pe2luZm8uYWRkX3JlZigpfXZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50PTA7ZnVuY3Rpb24gX19fY3hhX2JlZ2luX2NhdGNoKHB0cil7dmFyIGNhdGNoSW5mbz1uZXcgQ2F0Y2hJbmZvKHB0cik7dmFyIGluZm89Y2F0Y2hJbmZvLmdldF9leGNlcHRpb25faW5mbygpO2lmKCFpbmZvLmdldF9jYXVnaHQoKSl7aW5mby5zZXRfY2F1Z2h0KHRydWUpO3VuY2F1Z2h0RXhjZXB0aW9uQ291bnQtLX1pbmZvLnNldF9yZXRocm93bihmYWxzZSk7ZXhjZXB0aW9uQ2F1Z2h0LnB1c2goY2F0Y2hJbmZvKTtleGNlcHRpb25fYWRkUmVmKGluZm8pO3JldHVybiBjYXRjaEluZm8uZ2V0X2V4Y2VwdGlvbl9wdHIoKX12YXIgZXhjZXB0aW9uTGFzdD0wO2Z1bmN0aW9uIF9fX2N4YV9mcmVlX2V4Y2VwdGlvbihwdHIpe3JldHVybiBfZnJlZShuZXcgRXhjZXB0aW9uSW5mbyhwdHIpLnB0cil9ZnVuY3Rpb24gZXhjZXB0aW9uX2RlY1JlZihpbmZvKXtpZihpbmZvLnJlbGVhc2VfcmVmKCkmJiFpbmZvLmdldF9yZXRocm93bigpKXt2YXIgZGVzdHJ1Y3Rvcj1pbmZvLmdldF9kZXN0cnVjdG9yKCk7aWYoZGVzdHJ1Y3Rvcil7KGZ1bmN0aW9uKGExKXtyZXR1cm4gZHluQ2FsbF9paS5hcHBseShudWxsLFtkZXN0cnVjdG9yLGExXSl9KShpbmZvLmV4Y1B0cil9X19fY3hhX2ZyZWVfZXhjZXB0aW9uKGluZm8uZXhjUHRyKX19ZnVuY3Rpb24gX19fY3hhX2VuZF9jYXRjaCgpe19zZXRUaHJldygwKTt2YXIgY2F0Y2hJbmZvPWV4Y2VwdGlvbkNhdWdodC5wb3AoKTtleGNlcHRpb25fZGVjUmVmKGNhdGNoSW5mby5nZXRfZXhjZXB0aW9uX2luZm8oKSk7Y2F0Y2hJbmZvLmZyZWUoKTtleGNlcHRpb25MYXN0PTB9ZnVuY3Rpb24gX19fcmVzdW1lRXhjZXB0aW9uKGNhdGNoSW5mb1B0cil7dmFyIGNhdGNoSW5mbz1uZXcgQ2F0Y2hJbmZvKGNhdGNoSW5mb1B0cik7dmFyIHB0cj1jYXRjaEluZm8uZ2V0X2Jhc2VfcHRyKCk7aWYoIWV4Y2VwdGlvbkxhc3Qpe2V4Y2VwdGlvbkxhc3Q9cHRyfWNhdGNoSW5mby5mcmVlKCk7dGhyb3cgcHRyfWZ1bmN0aW9uIF9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzIoKXt2YXIgdGhyb3duPWV4Y2VwdGlvbkxhc3Q7aWYoIXRocm93bil7c2V0VGVtcFJldDAoMCk7cmV0dXJuIDB8MH12YXIgaW5mbz1uZXcgRXhjZXB0aW9uSW5mbyh0aHJvd24pO3ZhciB0aHJvd25UeXBlPWluZm8uZ2V0X3R5cGUoKTt2YXIgY2F0Y2hJbmZvPW5ldyBDYXRjaEluZm87Y2F0Y2hJbmZvLnNldF9iYXNlX3B0cih0aHJvd24pO2lmKCF0aHJvd25UeXBlKXtzZXRUZW1wUmV0MCgwKTtyZXR1cm4gY2F0Y2hJbmZvLnB0cnwwfXZhciB0eXBlQXJyYXk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt2YXIgc3RhY2tUb3A9c3RhY2tTYXZlKCk7dmFyIGV4Y2VwdGlvblRocm93QnVmPXN0YWNrQWxsb2MoNCk7SEVBUDMyW2V4Y2VwdGlvblRocm93QnVmPj4yXT10aHJvd247Zm9yKHZhciBpPTA7aTx0eXBlQXJyYXkubGVuZ3RoO2krKyl7dmFyIGNhdWdodFR5cGU9dHlwZUFycmF5W2ldO2lmKGNhdWdodFR5cGU9PT0wfHxjYXVnaHRUeXBlPT09dGhyb3duVHlwZSl7YnJlYWt9aWYoX19fY3hhX2Nhbl9jYXRjaChjYXVnaHRUeXBlLHRocm93blR5cGUsZXhjZXB0aW9uVGhyb3dCdWYpKXt2YXIgYWRqdXN0ZWQ9SEVBUDMyW2V4Y2VwdGlvblRocm93QnVmPj4yXTtpZih0aHJvd24hPT1hZGp1c3RlZCl7Y2F0Y2hJbmZvLnNldF9hZGp1c3RlZF9wdHIoYWRqdXN0ZWQpfXNldFRlbXBSZXQwKGNhdWdodFR5cGUpO3JldHVybiBjYXRjaEluZm8ucHRyfDB9fXN0YWNrUmVzdG9yZShzdGFja1RvcCk7c2V0VGVtcFJldDAodGhyb3duVHlwZSk7cmV0dXJuIGNhdGNoSW5mby5wdHJ8MH1mdW5jdGlvbiBfX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaF8zKCl7dmFyIHRocm93bj1leGNlcHRpb25MYXN0O2lmKCF0aHJvd24pe3NldFRlbXBSZXQwKDApO3JldHVybiAwfDB9dmFyIGluZm89bmV3IEV4Y2VwdGlvbkluZm8odGhyb3duKTt2YXIgdGhyb3duVHlwZT1pbmZvLmdldF90eXBlKCk7dmFyIGNhdGNoSW5mbz1uZXcgQ2F0Y2hJbmZvO2NhdGNoSW5mby5zZXRfYmFzZV9wdHIodGhyb3duKTtpZighdGhyb3duVHlwZSl7c2V0VGVtcFJldDAoMCk7cmV0dXJuIGNhdGNoSW5mby5wdHJ8MH12YXIgdHlwZUFycmF5PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dmFyIHN0YWNrVG9wPXN0YWNrU2F2ZSgpO3ZhciBleGNlcHRpb25UaHJvd0J1Zj1zdGFja0FsbG9jKDQpO0hFQVAzMltleGNlcHRpb25UaHJvd0J1Zj4+Ml09dGhyb3duO2Zvcih2YXIgaT0wO2k8dHlwZUFycmF5Lmxlbmd0aDtpKyspe3ZhciBjYXVnaHRUeXBlPXR5cGVBcnJheVtpXTtpZihjYXVnaHRUeXBlPT09MHx8Y2F1Z2h0VHlwZT09PXRocm93blR5cGUpe2JyZWFrfWlmKF9fX2N4YV9jYW5fY2F0Y2goY2F1Z2h0VHlwZSx0aHJvd25UeXBlLGV4Y2VwdGlvblRocm93QnVmKSl7dmFyIGFkanVzdGVkPUhFQVAzMltleGNlcHRpb25UaHJvd0J1Zj4+Ml07aWYodGhyb3duIT09YWRqdXN0ZWQpe2NhdGNoSW5mby5zZXRfYWRqdXN0ZWRfcHRyKGFkanVzdGVkKX1zZXRUZW1wUmV0MChjYXVnaHRUeXBlKTtyZXR1cm4gY2F0Y2hJbmZvLnB0cnwwfX1zdGFja1Jlc3RvcmUoc3RhY2tUb3ApO3NldFRlbXBSZXQwKHRocm93blR5cGUpO3JldHVybiBjYXRjaEluZm8ucHRyfDB9ZnVuY3Rpb24gX19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2hfNCgpe3ZhciB0aHJvd249ZXhjZXB0aW9uTGFzdDtpZighdGhyb3duKXtzZXRUZW1wUmV0MCgwKTtyZXR1cm4gMHwwfXZhciBpbmZvPW5ldyBFeGNlcHRpb25JbmZvKHRocm93bik7dmFyIHRocm93blR5cGU9aW5mby5nZXRfdHlwZSgpO3ZhciBjYXRjaEluZm89bmV3IENhdGNoSW5mbztjYXRjaEluZm8uc2V0X2Jhc2VfcHRyKHRocm93bik7aWYoIXRocm93blR5cGUpe3NldFRlbXBSZXQwKDApO3JldHVybiBjYXRjaEluZm8ucHRyfDB9dmFyIHR5cGVBcnJheT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3ZhciBzdGFja1RvcD1zdGFja1NhdmUoKTt2YXIgZXhjZXB0aW9uVGhyb3dCdWY9c3RhY2tBbGxvYyg0KTtIRUFQMzJbZXhjZXB0aW9uVGhyb3dCdWY+PjJdPXRocm93bjtmb3IodmFyIGk9MDtpPHR5cGVBcnJheS5sZW5ndGg7aSsrKXt2YXIgY2F1Z2h0VHlwZT10eXBlQXJyYXlbaV07aWYoY2F1Z2h0VHlwZT09PTB8fGNhdWdodFR5cGU9PT10aHJvd25UeXBlKXticmVha31pZihfX19jeGFfY2FuX2NhdGNoKGNhdWdodFR5cGUsdGhyb3duVHlwZSxleGNlcHRpb25UaHJvd0J1Zikpe3ZhciBhZGp1c3RlZD1IRUFQMzJbZXhjZXB0aW9uVGhyb3dCdWY+PjJdO2lmKHRocm93biE9PWFkanVzdGVkKXtjYXRjaEluZm8uc2V0X2FkanVzdGVkX3B0cihhZGp1c3RlZCl9c2V0VGVtcFJldDAoY2F1Z2h0VHlwZSk7cmV0dXJuIGNhdGNoSW5mby5wdHJ8MH19c3RhY2tSZXN0b3JlKHN0YWNrVG9wKTtzZXRUZW1wUmV0MCh0aHJvd25UeXBlKTtyZXR1cm4gY2F0Y2hJbmZvLnB0cnwwfWZ1bmN0aW9uIF9fX2N4YV9yZXRocm93KCl7dmFyIGNhdGNoSW5mbz1leGNlcHRpb25DYXVnaHQucG9wKCk7aWYoIWNhdGNoSW5mbyl7YWJvcnQoIm5vIGV4Y2VwdGlvbiB0byB0aHJvdyIpfXZhciBpbmZvPWNhdGNoSW5mby5nZXRfZXhjZXB0aW9uX2luZm8oKTt2YXIgcHRyPWNhdGNoSW5mby5nZXRfYmFzZV9wdHIoKTtpZighaW5mby5nZXRfcmV0aHJvd24oKSl7ZXhjZXB0aW9uQ2F1Z2h0LnB1c2goY2F0Y2hJbmZvKTtpbmZvLnNldF9yZXRocm93bih0cnVlKTtpbmZvLnNldF9jYXVnaHQoZmFsc2UpO3VuY2F1Z2h0RXhjZXB0aW9uQ291bnQrK31lbHNle2NhdGNoSW5mby5mcmVlKCl9ZXhjZXB0aW9uTGFzdD1wdHI7dGhyb3cgcHRyfWZ1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsdHlwZSxkZXN0cnVjdG9yKXt2YXIgaW5mbz1uZXcgRXhjZXB0aW9uSW5mbyhwdHIpO2luZm8uaW5pdCh0eXBlLGRlc3RydWN0b3IpO2V4Y2VwdGlvbkxhc3Q9cHRyO3VuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKzt0aHJvdyBwdHJ9ZnVuY3Rpb24gX2dtdGltZV9yKHRpbWUsdG1QdHIpe3ZhciBkYXRlPW5ldyBEYXRlKEhFQVAzMlt0aW1lPj4yXSoxZTMpO0hFQVAzMlt0bVB0cj4+Ml09ZGF0ZS5nZXRVVENTZWNvbmRzKCk7SEVBUDMyW3RtUHRyKzQ+PjJdPWRhdGUuZ2V0VVRDTWludXRlcygpO0hFQVAzMlt0bVB0cis4Pj4yXT1kYXRlLmdldFVUQ0hvdXJzKCk7SEVBUDMyW3RtUHRyKzEyPj4yXT1kYXRlLmdldFVUQ0RhdGUoKTtIRUFQMzJbdG1QdHIrMTY+PjJdPWRhdGUuZ2V0VVRDTW9udGgoKTtIRUFQMzJbdG1QdHIrMjA+PjJdPWRhdGUuZ2V0VVRDRnVsbFllYXIoKS0xOTAwO0hFQVAzMlt0bVB0cisyND4+Ml09ZGF0ZS5nZXRVVENEYXkoKTtIRUFQMzJbdG1QdHIrMzY+PjJdPTA7SEVBUDMyW3RtUHRyKzMyPj4yXT0wO3ZhciBzdGFydD1EYXRlLlVUQyhkYXRlLmdldFVUQ0Z1bGxZZWFyKCksMCwxLDAsMCwwLDApO3ZhciB5ZGF5PShkYXRlLmdldFRpbWUoKS1zdGFydCkvKDFlMyo2MCo2MCoyNCl8MDtIRUFQMzJbdG1QdHIrMjg+PjJdPXlkYXk7aWYoIV9nbXRpbWVfci5HTVRTdHJpbmcpX2dtdGltZV9yLkdNVFN0cmluZz1hbGxvY2F0ZVVURjgoIkdNVCIpO0hFQVAzMlt0bVB0cis0MD4+Ml09X2dtdGltZV9yLkdNVFN0cmluZztyZXR1cm4gdG1QdHJ9ZnVuY3Rpb24gX19fZ210aW1lX3IoYTAsYTEpe3JldHVybiBfZ210aW1lX3IoYTAsYTEpfWZ1bmN0aW9uIF90enNldCgpe2lmKF90enNldC5jYWxsZWQpcmV0dXJuO190enNldC5jYWxsZWQ9dHJ1ZTt2YXIgY3VycmVudFllYXI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO3ZhciB3aW50ZXI9bmV3IERhdGUoY3VycmVudFllYXIsMCwxKTt2YXIgc3VtbWVyPW5ldyBEYXRlKGN1cnJlbnRZZWFyLDYsMSk7dmFyIHdpbnRlck9mZnNldD13aW50ZXIuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgc3VtbWVyT2Zmc2V0PXN1bW1lci5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBzdGRUaW1lem9uZU9mZnNldD1NYXRoLm1heCh3aW50ZXJPZmZzZXQsc3VtbWVyT2Zmc2V0KTtIRUFQMzJbX19nZXRfdGltZXpvbmUoKT4+Ml09c3RkVGltZXpvbmVPZmZzZXQqNjA7SEVBUDMyW19fZ2V0X2RheWxpZ2h0KCk+PjJdPU51bWJlcih3aW50ZXJPZmZzZXQhPXN1bW1lck9mZnNldCk7ZnVuY3Rpb24gZXh0cmFjdFpvbmUoZGF0ZSl7dmFyIG1hdGNoPWRhdGUudG9UaW1lU3RyaW5nKCkubWF0Y2goL1woKFtBLVphLXogXSspXCkkLyk7cmV0dXJuIG1hdGNoP21hdGNoWzFdOiJHTVQifXZhciB3aW50ZXJOYW1lPWV4dHJhY3Rab25lKHdpbnRlcik7dmFyIHN1bW1lck5hbWU9ZXh0cmFjdFpvbmUoc3VtbWVyKTt2YXIgd2ludGVyTmFtZVB0cj1hbGxvY2F0ZVVURjgod2ludGVyTmFtZSk7dmFyIHN1bW1lck5hbWVQdHI9YWxsb2NhdGVVVEY4KHN1bW1lck5hbWUpO2lmKHN1bW1lck9mZnNldDx3aW50ZXJPZmZzZXQpe0hFQVAzMltfX2dldF90em5hbWUoKT4+Ml09d2ludGVyTmFtZVB0cjtIRUFQMzJbX19nZXRfdHpuYW1lKCkrND4+Ml09c3VtbWVyTmFtZVB0cn1lbHNle0hFQVAzMltfX2dldF90em5hbWUoKT4+Ml09c3VtbWVyTmFtZVB0cjtIRUFQMzJbX19nZXRfdHpuYW1lKCkrND4+Ml09d2ludGVyTmFtZVB0cn19ZnVuY3Rpb24gX2xvY2FsdGltZV9yKHRpbWUsdG1QdHIpe190enNldCgpO3ZhciBkYXRlPW5ldyBEYXRlKEhFQVAzMlt0aW1lPj4yXSoxZTMpO0hFQVAzMlt0bVB0cj4+Ml09ZGF0ZS5nZXRTZWNvbmRzKCk7SEVBUDMyW3RtUHRyKzQ+PjJdPWRhdGUuZ2V0TWludXRlcygpO0hFQVAzMlt0bVB0cis4Pj4yXT1kYXRlLmdldEhvdXJzKCk7SEVBUDMyW3RtUHRyKzEyPj4yXT1kYXRlLmdldERhdGUoKTtIRUFQMzJbdG1QdHIrMTY+PjJdPWRhdGUuZ2V0TW9udGgoKTtIRUFQMzJbdG1QdHIrMjA+PjJdPWRhdGUuZ2V0RnVsbFllYXIoKS0xOTAwO0hFQVAzMlt0bVB0cisyND4+Ml09ZGF0ZS5nZXREYXkoKTt2YXIgc3RhcnQ9bmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLDAsMSk7dmFyIHlkYXk9KGRhdGUuZ2V0VGltZSgpLXN0YXJ0LmdldFRpbWUoKSkvKDFlMyo2MCo2MCoyNCl8MDtIRUFQMzJbdG1QdHIrMjg+PjJdPXlkYXk7SEVBUDMyW3RtUHRyKzM2Pj4yXT0tKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSo2MCk7dmFyIHN1bW1lck9mZnNldD1uZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksNiwxKS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciB3aW50ZXJPZmZzZXQ9c3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgZHN0PShzdW1tZXJPZmZzZXQhPXdpbnRlck9mZnNldCYmZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpPT1NYXRoLm1pbih3aW50ZXJPZmZzZXQsc3VtbWVyT2Zmc2V0KSl8MDtIRUFQMzJbdG1QdHIrMzI+PjJdPWRzdDt2YXIgem9uZVB0cj1IRUFQMzJbX19nZXRfdHpuYW1lKCkrKGRzdD80OjApPj4yXTtIRUFQMzJbdG1QdHIrNDA+PjJdPXpvbmVQdHI7cmV0dXJuIHRtUHRyfWZ1bmN0aW9uIF9fX2xvY2FsdGltZV9yKGEwLGExKXtyZXR1cm4gX2xvY2FsdGltZV9yKGEwLGExKX12YXIgUEFUSD17c3BsaXRQYXRoOmZ1bmN0aW9uKGZpbGVuYW1lKXt2YXIgc3BsaXRQYXRoUmU9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvO3JldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKX0sbm9ybWFsaXplQXJyYXk6ZnVuY3Rpb24ocGFydHMsYWxsb3dBYm92ZVJvb3Qpe3ZhciB1cD0wO2Zvcih2YXIgaT1wYXJ0cy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGxhc3Q9cGFydHNbaV07aWYobGFzdD09PSIuIil7cGFydHMuc3BsaWNlKGksMSl9ZWxzZSBpZihsYXN0PT09Ii4uIil7cGFydHMuc3BsaWNlKGksMSk7dXArK31lbHNlIGlmKHVwKXtwYXJ0cy5zcGxpY2UoaSwxKTt1cC0tfX1pZihhbGxvd0Fib3ZlUm9vdCl7Zm9yKDt1cDt1cC0tKXtwYXJ0cy51bnNoaWZ0KCIuLiIpfX1yZXR1cm4gcGFydHN9LG5vcm1hbGl6ZTpmdW5jdGlvbihwYXRoKXt2YXIgaXNBYnNvbHV0ZT1wYXRoLmNoYXJBdCgwKT09PSIvIix0cmFpbGluZ1NsYXNoPXBhdGguc3Vic3RyKC0xKT09PSIvIjtwYXRoPVBBVEgubm9ybWFsaXplQXJyYXkocGF0aC5zcGxpdCgiLyIpLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4hIXB9KSwhaXNBYnNvbHV0ZSkuam9pbigiLyIpO2lmKCFwYXRoJiYhaXNBYnNvbHV0ZSl7cGF0aD0iLiJ9aWYocGF0aCYmdHJhaWxpbmdTbGFzaCl7cGF0aCs9Ii8ifXJldHVybihpc0Fic29sdXRlPyIvIjoiIikrcGF0aH0sZGlybmFtZTpmdW5jdGlvbihwYXRoKXt2YXIgcmVzdWx0PVBBVEguc3BsaXRQYXRoKHBhdGgpLHJvb3Q9cmVzdWx0WzBdLGRpcj1yZXN1bHRbMV07aWYoIXJvb3QmJiFkaXIpe3JldHVybiIuIn1pZihkaXIpe2Rpcj1kaXIuc3Vic3RyKDAsZGlyLmxlbmd0aC0xKX1yZXR1cm4gcm9vdCtkaXJ9LGJhc2VuYW1lOmZ1bmN0aW9uKHBhdGgpe2lmKHBhdGg9PT0iLyIpcmV0dXJuIi8iO3BhdGg9UEFUSC5ub3JtYWxpemUocGF0aCk7cGF0aD1wYXRoLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciBsYXN0U2xhc2g9cGF0aC5sYXN0SW5kZXhPZigiLyIpO2lmKGxhc3RTbGFzaD09PS0xKXJldHVybiBwYXRoO3JldHVybiBwYXRoLnN1YnN0cihsYXN0U2xhc2grMSl9LGV4dG5hbWU6ZnVuY3Rpb24ocGF0aCl7cmV0dXJuIFBBVEguc3BsaXRQYXRoKHBhdGgpWzNdfSxqb2luOmZ1bmN0aW9uKCl7dmFyIHBhdGhzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gUEFUSC5ub3JtYWxpemUocGF0aHMuam9pbigiLyIpKX0sam9pbjI6ZnVuY3Rpb24obCxyKXtyZXR1cm4gUEFUSC5ub3JtYWxpemUobCsiLyIrcil9fTtmdW5jdGlvbiBnZXRSYW5kb21EZXZpY2UoKXtpZih0eXBlb2YgY3J5cHRvPT09Im9iamVjdCImJnR5cGVvZiBjcnlwdG9bImdldFJhbmRvbVZhbHVlcyJdPT09ImZ1bmN0aW9uIil7dmFyIHJhbmRvbUJ1ZmZlcj1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhbmRvbUJ1ZmZlcik7cmV0dXJuIHJhbmRvbUJ1ZmZlclswXX19ZWxzZSBpZihFTlZJUk9OTUVOVF9JU19OT0RFKXt0cnl7dmFyIGNyeXB0b19tb2R1bGU9cmVxdWlyZSgiY3J5cHRvIik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0b19tb2R1bGVbInJhbmRvbUJ5dGVzIl0oMSlbMF19fWNhdGNoKGUpe319cmV0dXJuIGZ1bmN0aW9uKCl7YWJvcnQoInJhbmRvbURldmljZSIpfX12YXIgUEFUSF9GUz17cmVzb2x2ZTpmdW5jdGlvbigpe3ZhciByZXNvbHZlZFBhdGg9IiIscmVzb2x2ZWRBYnNvbHV0ZT1mYWxzZTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aC0xO2k+PS0xJiYhcmVzb2x2ZWRBYnNvbHV0ZTtpLS0pe3ZhciBwYXRoPWk+PTA/YXJndW1lbnRzW2ldOkZTLmN3ZCgpO2lmKHR5cGVvZiBwYXRoIT09InN0cmluZyIpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIil9ZWxzZSBpZighcGF0aCl7cmV0dXJuIiJ9cmVzb2x2ZWRQYXRoPXBhdGgrIi8iK3Jlc29sdmVkUGF0aDtyZXNvbHZlZEFic29sdXRlPXBhdGguY2hhckF0KDApPT09Ii8ifXJlc29sdmVkUGF0aD1QQVRILm5vcm1hbGl6ZUFycmF5KHJlc29sdmVkUGF0aC5zcGxpdCgiLyIpLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4hIXB9KSwhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbigiLyIpO3JldHVybihyZXNvbHZlZEFic29sdXRlPyIvIjoiIikrcmVzb2x2ZWRQYXRofHwiLiJ9LHJlbGF0aXZlOmZ1bmN0aW9uKGZyb20sdG8pe2Zyb209UEFUSF9GUy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTt0bz1QQVRIX0ZTLnJlc29sdmUodG8pLnN1YnN0cigxKTtmdW5jdGlvbiB0cmltKGFycil7dmFyIHN0YXJ0PTA7Zm9yKDtzdGFydDxhcnIubGVuZ3RoO3N0YXJ0Kyspe2lmKGFycltzdGFydF0hPT0iIilicmVha312YXIgZW5kPWFyci5sZW5ndGgtMTtmb3IoO2VuZD49MDtlbmQtLSl7aWYoYXJyW2VuZF0hPT0iIilicmVha31pZihzdGFydD5lbmQpcmV0dXJuW107cmV0dXJuIGFyci5zbGljZShzdGFydCxlbmQtc3RhcnQrMSl9dmFyIGZyb21QYXJ0cz10cmltKGZyb20uc3BsaXQoIi8iKSk7dmFyIHRvUGFydHM9dHJpbSh0by5zcGxpdCgiLyIpKTt2YXIgbGVuZ3RoPU1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsdG9QYXJ0cy5sZW5ndGgpO3ZhciBzYW1lUGFydHNMZW5ndGg9bGVuZ3RoO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7aWYoZnJvbVBhcnRzW2ldIT09dG9QYXJ0c1tpXSl7c2FtZVBhcnRzTGVuZ3RoPWk7YnJlYWt9fXZhciBvdXRwdXRQYXJ0cz1bXTtmb3IodmFyIGk9c2FtZVBhcnRzTGVuZ3RoO2k8ZnJvbVBhcnRzLmxlbmd0aDtpKyspe291dHB1dFBhcnRzLnB1c2goIi4uIil9b3V0cHV0UGFydHM9b3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7cmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oIi8iKX19O3ZhciBUVFk9e3R0eXM6W10saW5pdDpmdW5jdGlvbigpe30sc2h1dGRvd246ZnVuY3Rpb24oKXt9LHJlZ2lzdGVyOmZ1bmN0aW9uKGRldixvcHMpe1RUWS50dHlzW2Rldl09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6b3BzfTtGUy5yZWdpc3RlckRldmljZShkZXYsVFRZLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKHN0cmVhbSl7dmFyIHR0eT1UVFkudHR5c1tzdHJlYW0ubm9kZS5yZGV2XTtpZighdHR5KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0Myl9c3RyZWFtLnR0eT10dHk7c3RyZWFtLnNlZWthYmxlPWZhbHNlfSxjbG9zZTpmdW5jdGlvbihzdHJlYW0pe3N0cmVhbS50dHkub3BzLmZsdXNoKHN0cmVhbS50dHkpfSxmbHVzaDpmdW5jdGlvbihzdHJlYW0pe3N0cmVhbS50dHkub3BzLmZsdXNoKHN0cmVhbS50dHkpfSxyZWFkOmZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3Mpe2lmKCFzdHJlYW0udHR5fHwhc3RyZWFtLnR0eS5vcHMuZ2V0X2NoYXIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDYwKX12YXIgYnl0ZXNSZWFkPTA7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXt2YXIgcmVzdWx0O3RyeXtyZXN1bHQ9c3RyZWFtLnR0eS5vcHMuZ2V0X2NoYXIoc3RyZWFtLnR0eSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjkpfWlmKHJlc3VsdD09PXVuZGVmaW5lZCYmYnl0ZXNSZWFkPT09MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNil9aWYocmVzdWx0PT09bnVsbHx8cmVzdWx0PT09dW5kZWZpbmVkKWJyZWFrO2J5dGVzUmVhZCsrO2J1ZmZlcltvZmZzZXQraV09cmVzdWx0fWlmKGJ5dGVzUmVhZCl7c3RyZWFtLm5vZGUudGltZXN0YW1wPURhdGUubm93KCl9cmV0dXJuIGJ5dGVzUmVhZH0sd3JpdGU6ZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvcyl7aWYoIXN0cmVhbS50dHl8fCFzdHJlYW0udHR5Lm9wcy5wdXRfY2hhcil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNjApfXRyeXtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3N0cmVhbS50dHkub3BzLnB1dF9jaGFyKHN0cmVhbS50dHksYnVmZmVyW29mZnNldCtpXSl9fWNhdGNoKGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDI5KX1pZihsZW5ndGgpe3N0cmVhbS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpfXJldHVybiBpfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjpmdW5jdGlvbih0dHkpe2lmKCF0dHkuaW5wdXQubGVuZ3RoKXt2YXIgcmVzdWx0PW51bGw7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7dmFyIEJVRlNJWkU9MjU2O3ZhciBidWY9QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYyhCVUZTSVpFKTpuZXcgQnVmZmVyKEJVRlNJWkUpO3ZhciBieXRlc1JlYWQ9MDt0cnl7Ynl0ZXNSZWFkPW5vZGVGUy5yZWFkU3luYyhwcm9jZXNzLnN0ZGluLmZkLGJ1ZiwwLEJVRlNJWkUsbnVsbCl9Y2F0Y2goZSl7aWYoZS50b1N0cmluZygpLmluY2x1ZGVzKCJFT0YiKSlieXRlc1JlYWQ9MDtlbHNlIHRocm93IGV9aWYoYnl0ZXNSZWFkPjApe3Jlc3VsdD1idWYuc2xpY2UoMCxieXRlc1JlYWQpLnRvU3RyaW5nKCJ1dGYtOCIpfWVsc2V7cmVzdWx0PW51bGx9fWVsc2UgaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnR5cGVvZiB3aW5kb3cucHJvbXB0PT0iZnVuY3Rpb24iKXtyZXN1bHQ9d2luZG93LnByb21wdCgiSW5wdXQ6ICIpO2lmKHJlc3VsdCE9PW51bGwpe3Jlc3VsdCs9IlxuIn19ZWxzZSBpZih0eXBlb2YgcmVhZGxpbmU9PSJmdW5jdGlvbiIpe3Jlc3VsdD1yZWFkbGluZSgpO2lmKHJlc3VsdCE9PW51bGwpe3Jlc3VsdCs9IlxuIn19aWYoIXJlc3VsdCl7cmV0dXJuIG51bGx9dHR5LmlucHV0PWludEFycmF5RnJvbVN0cmluZyhyZXN1bHQsdHJ1ZSl9cmV0dXJuIHR0eS5pbnB1dC5zaGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbih0dHksdmFsKXtpZih2YWw9PT1udWxsfHx2YWw9PT0xMCl7b3V0KFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119ZWxzZXtpZih2YWwhPTApdHR5Lm91dHB1dC5wdXNoKHZhbCl9fSxmbHVzaDpmdW5jdGlvbih0dHkpe2lmKHR0eS5vdXRwdXQmJnR0eS5vdXRwdXQubGVuZ3RoPjApe291dChVVEY4QXJyYXlUb1N0cmluZyh0dHkub3V0cHV0LDApKTt0dHkub3V0cHV0PVtdfX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyOmZ1bmN0aW9uKHR0eSx2YWwpe2lmKHZhbD09PW51bGx8fHZhbD09PTEwKXtlcnIoVVRGOEFycmF5VG9TdHJpbmcodHR5Lm91dHB1dCwwKSk7dHR5Lm91dHB1dD1bXX1lbHNle2lmKHZhbCE9MCl0dHkub3V0cHV0LnB1c2godmFsKX19LGZsdXNoOmZ1bmN0aW9uKHR0eSl7aWYodHR5Lm91dHB1dCYmdHR5Lm91dHB1dC5sZW5ndGg+MCl7ZXJyKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119fX19O2Z1bmN0aW9uIG1tYXBBbGxvYyhzaXplKXt2YXIgYWxpZ25lZFNpemU9YWxpZ25NZW1vcnkoc2l6ZSw2NTUzNik7dmFyIHB0cj1fbWFsbG9jKGFsaWduZWRTaXplKTt3aGlsZShzaXplPGFsaWduZWRTaXplKUhFQVA4W3B0citzaXplKytdPTA7cmV0dXJuIHB0cn12YXIgTUVNRlM9e29wc190YWJsZTpudWxsLG1vdW50OmZ1bmN0aW9uKG1vdW50KXtyZXR1cm4gTUVNRlMuY3JlYXRlTm9kZShudWxsLCIvIiwxNjM4NHw1MTEsMCl9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24ocGFyZW50LG5hbWUsbW9kZSxkZXYpe2lmKEZTLmlzQmxrZGV2KG1vZGUpfHxGUy5pc0ZJRk8obW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDYzKX1pZighTUVNRlMub3BzX3RhYmxlKXtNRU1GUy5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpNRU1GUy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6TUVNRlMubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6TUVNRlMubm9kZV9vcHMubG9va3VwLG1rbm9kOk1FTUZTLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpNRU1GUy5ub2RlX29wcy5yZW5hbWUsdW5saW5rOk1FTUZTLm5vZGVfb3BzLnVubGluayxybWRpcjpNRU1GUy5ub2RlX29wcy5ybWRpcixyZWFkZGlyOk1FTUZTLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpNRU1GUy5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpNRU1GUy5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6TUVNRlMubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOk1FTUZTLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOk1FTUZTLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6TUVNRlMuc3RyZWFtX29wcy5yZWFkLHdyaXRlOk1FTUZTLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6TUVNRlMuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOk1FTUZTLnN0cmVhbV9vcHMubW1hcCxtc3luYzpNRU1GUy5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpNRU1GUy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6TUVNRlMubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazpNRU1GUy5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6TUVNRlMubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOk1FTUZTLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpGUy5jaHJkZXZfc3RyZWFtX29wc319fXZhciBub2RlPUZTLmNyZWF0ZU5vZGUocGFyZW50LG5hbWUsbW9kZSxkZXYpO2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe25vZGUubm9kZV9vcHM9TUVNRlMub3BzX3RhYmxlLmRpci5ub2RlO25vZGUuc3RyZWFtX29wcz1NRU1GUy5vcHNfdGFibGUuZGlyLnN0cmVhbTtub2RlLmNvbnRlbnRzPXt9fWVsc2UgaWYoRlMuaXNGaWxlKG5vZGUubW9kZSkpe25vZGUubm9kZV9vcHM9TUVNRlMub3BzX3RhYmxlLmZpbGUubm9kZTtub2RlLnN0cmVhbV9vcHM9TUVNRlMub3BzX3RhYmxlLmZpbGUuc3RyZWFtO25vZGUudXNlZEJ5dGVzPTA7bm9kZS5jb250ZW50cz1udWxsfWVsc2UgaWYoRlMuaXNMaW5rKG5vZGUubW9kZSkpe25vZGUubm9kZV9vcHM9TUVNRlMub3BzX3RhYmxlLmxpbmsubm9kZTtub2RlLnN0cmVhbV9vcHM9TUVNRlMub3BzX3RhYmxlLmxpbmsuc3RyZWFtfWVsc2UgaWYoRlMuaXNDaHJkZXYobm9kZS5tb2RlKSl7bm9kZS5ub2RlX29wcz1NRU1GUy5vcHNfdGFibGUuY2hyZGV2Lm5vZGU7bm9kZS5zdHJlYW1fb3BzPU1FTUZTLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtfW5vZGUudGltZXN0YW1wPURhdGUubm93KCk7aWYocGFyZW50KXtwYXJlbnQuY29udGVudHNbbmFtZV09bm9kZTtwYXJlbnQudGltZXN0YW1wPW5vZGUudGltZXN0YW1wfXJldHVybiBub2RlfSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTpmdW5jdGlvbihub2RlKXtpZighbm9kZS5jb250ZW50cylyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7aWYobm9kZS5jb250ZW50cy5zdWJhcnJheSlyZXR1cm4gbm9kZS5jb250ZW50cy5zdWJhcnJheSgwLG5vZGUudXNlZEJ5dGVzKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobm9kZS5jb250ZW50cyl9LGV4cGFuZEZpbGVTdG9yYWdlOmZ1bmN0aW9uKG5vZGUsbmV3Q2FwYWNpdHkpe3ZhciBwcmV2Q2FwYWNpdHk9bm9kZS5jb250ZW50cz9ub2RlLmNvbnRlbnRzLmxlbmd0aDowO2lmKHByZXZDYXBhY2l0eT49bmV3Q2FwYWNpdHkpcmV0dXJuO3ZhciBDQVBBQ0lUWV9ET1VCTElOR19NQVg9MTAyNCoxMDI0O25ld0NhcGFjaXR5PU1hdGgubWF4KG5ld0NhcGFjaXR5LHByZXZDYXBhY2l0eSoocHJldkNhcGFjaXR5PENBUEFDSVRZX0RPVUJMSU5HX01BWD8yOjEuMTI1KT4+PjApO2lmKHByZXZDYXBhY2l0eSE9MCluZXdDYXBhY2l0eT1NYXRoLm1heChuZXdDYXBhY2l0eSwyNTYpO3ZhciBvbGRDb250ZW50cz1ub2RlLmNvbnRlbnRzO25vZGUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobmV3Q2FwYWNpdHkpO2lmKG5vZGUudXNlZEJ5dGVzPjApbm9kZS5jb250ZW50cy5zZXQob2xkQ29udGVudHMuc3ViYXJyYXkoMCxub2RlLnVzZWRCeXRlcyksMCl9LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0aW9uKG5vZGUsbmV3U2l6ZSl7aWYobm9kZS51c2VkQnl0ZXM9PW5ld1NpemUpcmV0dXJuO2lmKG5ld1NpemU9PTApe25vZGUuY29udGVudHM9bnVsbDtub2RlLnVzZWRCeXRlcz0wfWVsc2V7dmFyIG9sZENvbnRlbnRzPW5vZGUuY29udGVudHM7bm9kZS5jb250ZW50cz1uZXcgVWludDhBcnJheShuZXdTaXplKTtpZihvbGRDb250ZW50cyl7bm9kZS5jb250ZW50cy5zZXQob2xkQ29udGVudHMuc3ViYXJyYXkoMCxNYXRoLm1pbihuZXdTaXplLG5vZGUudXNlZEJ5dGVzKSkpfW5vZGUudXNlZEJ5dGVzPW5ld1NpemV9fSxub2RlX29wczp7Z2V0YXR0cjpmdW5jdGlvbihub2RlKXt2YXIgYXR0cj17fTthdHRyLmRldj1GUy5pc0NocmRldihub2RlLm1vZGUpP25vZGUuaWQ6MTthdHRyLmlubz1ub2RlLmlkO2F0dHIubW9kZT1ub2RlLm1vZGU7YXR0ci5ubGluaz0xO2F0dHIudWlkPTA7YXR0ci5naWQ9MDthdHRyLnJkZXY9bm9kZS5yZGV2O2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe2F0dHIuc2l6ZT00MDk2fWVsc2UgaWYoRlMuaXNGaWxlKG5vZGUubW9kZSkpe2F0dHIuc2l6ZT1ub2RlLnVzZWRCeXRlc31lbHNlIGlmKEZTLmlzTGluayhub2RlLm1vZGUpKXthdHRyLnNpemU9bm9kZS5saW5rLmxlbmd0aH1lbHNle2F0dHIuc2l6ZT0wfWF0dHIuYXRpbWU9bmV3IERhdGUobm9kZS50aW1lc3RhbXApO2F0dHIubXRpbWU9bmV3IERhdGUobm9kZS50aW1lc3RhbXApO2F0dHIuY3RpbWU9bmV3IERhdGUobm9kZS50aW1lc3RhbXApO2F0dHIuYmxrc2l6ZT00MDk2O2F0dHIuYmxvY2tzPU1hdGguY2VpbChhdHRyLnNpemUvYXR0ci5ibGtzaXplKTtyZXR1cm4gYXR0cn0sc2V0YXR0cjpmdW5jdGlvbihub2RlLGF0dHIpe2lmKGF0dHIubW9kZSE9PXVuZGVmaW5lZCl7bm9kZS5tb2RlPWF0dHIubW9kZX1pZihhdHRyLnRpbWVzdGFtcCE9PXVuZGVmaW5lZCl7bm9kZS50aW1lc3RhbXA9YXR0ci50aW1lc3RhbXB9aWYoYXR0ci5zaXplIT09dW5kZWZpbmVkKXtNRU1GUy5yZXNpemVGaWxlU3RvcmFnZShub2RlLGF0dHIuc2l6ZSl9fSxsb29rdXA6ZnVuY3Rpb24ocGFyZW50LG5hbWUpe3Rocm93IEZTLmdlbmVyaWNFcnJvcnNbNDRdfSxta25vZDpmdW5jdGlvbihwYXJlbnQsbmFtZSxtb2RlLGRldil7cmV0dXJuIE1FTUZTLmNyZWF0ZU5vZGUocGFyZW50LG5hbWUsbW9kZSxkZXYpfSxyZW5hbWU6ZnVuY3Rpb24ob2xkX25vZGUsbmV3X2RpcixuZXdfbmFtZSl7aWYoRlMuaXNEaXIob2xkX25vZGUubW9kZSkpe3ZhciBuZXdfbm9kZTt0cnl7bmV3X25vZGU9RlMubG9va3VwTm9kZShuZXdfZGlyLG5ld19uYW1lKX1jYXRjaChlKXt9aWYobmV3X25vZGUpe2Zvcih2YXIgaSBpbiBuZXdfbm9kZS5jb250ZW50cyl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNTUpfX19ZGVsZXRlIG9sZF9ub2RlLnBhcmVudC5jb250ZW50c1tvbGRfbm9kZS5uYW1lXTtvbGRfbm9kZS5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCk7b2xkX25vZGUubmFtZT1uZXdfbmFtZTtuZXdfZGlyLmNvbnRlbnRzW25ld19uYW1lXT1vbGRfbm9kZTtuZXdfZGlyLnRpbWVzdGFtcD1vbGRfbm9kZS5wYXJlbnQudGltZXN0YW1wO29sZF9ub2RlLnBhcmVudD1uZXdfZGlyfSx1bmxpbms6ZnVuY3Rpb24ocGFyZW50LG5hbWUpe2RlbGV0ZSBwYXJlbnQuY29udGVudHNbbmFtZV07cGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcjpmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyIG5vZGU9RlMubG9va3VwTm9kZShwYXJlbnQsbmFtZSk7Zm9yKHZhciBpIGluIG5vZGUuY29udGVudHMpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDU1KX1kZWxldGUgcGFyZW50LmNvbnRlbnRzW25hbWVdO3BhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcjpmdW5jdGlvbihub2RlKXt2YXIgZW50cmllcz1bIi4iLCIuLiJdO2Zvcih2YXIga2V5IGluIG5vZGUuY29udGVudHMpe2lmKCFub2RlLmNvbnRlbnRzLmhhc093blByb3BlcnR5KGtleSkpe2NvbnRpbnVlfWVudHJpZXMucHVzaChrZXkpfXJldHVybiBlbnRyaWVzfSxzeW1saW5rOmZ1bmN0aW9uKHBhcmVudCxuZXduYW1lLG9sZHBhdGgpe3ZhciBub2RlPU1FTUZTLmNyZWF0ZU5vZGUocGFyZW50LG5ld25hbWUsNTExfDQwOTYwLDApO25vZGUubGluaz1vbGRwYXRoO3JldHVybiBub2RlfSxyZWFkbGluazpmdW5jdGlvbihub2RlKXtpZighRlMuaXNMaW5rKG5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDI4KX1yZXR1cm4gbm9kZS5saW5rfX0sc3RyZWFtX29wczp7cmVhZDpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe3ZhciBjb250ZW50cz1zdHJlYW0ubm9kZS5jb250ZW50cztpZihwb3NpdGlvbj49c3RyZWFtLm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBzaXplPU1hdGgubWluKHN0cmVhbS5ub2RlLnVzZWRCeXRlcy1wb3NpdGlvbixsZW5ndGgpO2lmKHNpemU+OCYmY29udGVudHMuc3ViYXJyYXkpe2J1ZmZlci5zZXQoY29udGVudHMuc3ViYXJyYXkocG9zaXRpb24scG9zaXRpb24rc2l6ZSksb2Zmc2V0KX1lbHNle2Zvcih2YXIgaT0wO2k8c2l6ZTtpKyspYnVmZmVyW29mZnNldCtpXT1jb250ZW50c1twb3NpdGlvbitpXX1yZXR1cm4gc2l6ZX0sd3JpdGU6ZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uLGNhbk93bil7aWYoYnVmZmVyLmJ1ZmZlcj09PUhFQVA4LmJ1ZmZlcil7Y2FuT3duPWZhbHNlfWlmKCFsZW5ndGgpcmV0dXJuIDA7dmFyIG5vZGU9c3RyZWFtLm5vZGU7bm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKTtpZihidWZmZXIuc3ViYXJyYXkmJighbm9kZS5jb250ZW50c3x8bm9kZS5jb250ZW50cy5zdWJhcnJheSkpe2lmKGNhbk93bil7bm9kZS5jb250ZW50cz1idWZmZXIuc3ViYXJyYXkob2Zmc2V0LG9mZnNldCtsZW5ndGgpO25vZGUudXNlZEJ5dGVzPWxlbmd0aDtyZXR1cm4gbGVuZ3RofWVsc2UgaWYobm9kZS51c2VkQnl0ZXM9PT0wJiZwb3NpdGlvbj09PTApe25vZGUuY29udGVudHM9YnVmZmVyLnNsaWNlKG9mZnNldCxvZmZzZXQrbGVuZ3RoKTtub2RlLnVzZWRCeXRlcz1sZW5ndGg7cmV0dXJuIGxlbmd0aH1lbHNlIGlmKHBvc2l0aW9uK2xlbmd0aDw9bm9kZS51c2VkQnl0ZXMpe25vZGUuY29udGVudHMuc2V0KGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsb2Zmc2V0K2xlbmd0aCkscG9zaXRpb24pO3JldHVybiBsZW5ndGh9fU1FTUZTLmV4cGFuZEZpbGVTdG9yYWdlKG5vZGUscG9zaXRpb24rbGVuZ3RoKTtpZihub2RlLmNvbnRlbnRzLnN1YmFycmF5JiZidWZmZXIuc3ViYXJyYXkpe25vZGUuY29udGVudHMuc2V0KGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsb2Zmc2V0K2xlbmd0aCkscG9zaXRpb24pfWVsc2V7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXtub2RlLmNvbnRlbnRzW3Bvc2l0aW9uK2ldPWJ1ZmZlcltvZmZzZXQraV19fW5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KG5vZGUudXNlZEJ5dGVzLHBvc2l0aW9uK2xlbmd0aCk7cmV0dXJuIGxlbmd0aH0sbGxzZWVrOmZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsd2hlbmNlKXt2YXIgcG9zaXRpb249b2Zmc2V0O2lmKHdoZW5jZT09PTEpe3Bvc2l0aW9uKz1zdHJlYW0ucG9zaXRpb259ZWxzZSBpZih3aGVuY2U9PT0yKXtpZihGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3Bvc2l0aW9uKz1zdHJlYW0ubm9kZS51c2VkQnl0ZXN9fWlmKHBvc2l0aW9uPDApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDI4KX1yZXR1cm4gcG9zaXRpb259LGFsbG9jYXRlOmZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsbGVuZ3RoKXtNRU1GUy5leHBhbmRGaWxlU3RvcmFnZShzdHJlYW0ubm9kZSxvZmZzZXQrbGVuZ3RoKTtzdHJlYW0ubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoc3RyZWFtLm5vZGUudXNlZEJ5dGVzLG9mZnNldCtsZW5ndGgpfSxtbWFwOmZ1bmN0aW9uKHN0cmVhbSxhZGRyZXNzLGxlbmd0aCxwb3NpdGlvbixwcm90LGZsYWdzKXtpZihhZGRyZXNzIT09MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjgpfWlmKCFGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDQzKX12YXIgcHRyO3ZhciBhbGxvY2F0ZWQ7dmFyIGNvbnRlbnRzPXN0cmVhbS5ub2RlLmNvbnRlbnRzO2lmKCEoZmxhZ3MmMikmJmNvbnRlbnRzLmJ1ZmZlcj09PWJ1ZmZlcil7YWxsb2NhdGVkPWZhbHNlO3B0cj1jb250ZW50cy5ieXRlT2Zmc2V0fWVsc2V7aWYocG9zaXRpb24+MHx8cG9zaXRpb24rbGVuZ3RoPGNvbnRlbnRzLmxlbmd0aCl7aWYoY29udGVudHMuc3ViYXJyYXkpe2NvbnRlbnRzPWNvbnRlbnRzLnN1YmFycmF5KHBvc2l0aW9uLHBvc2l0aW9uK2xlbmd0aCl9ZWxzZXtjb250ZW50cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb250ZW50cyxwb3NpdGlvbixwb3NpdGlvbitsZW5ndGgpfX1hbGxvY2F0ZWQ9dHJ1ZTtwdHI9bW1hcEFsbG9jKGxlbmd0aCk7aWYoIXB0cil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNDgpfUhFQVA4LnNldChjb250ZW50cyxwdHIpfXJldHVybntwdHI6cHRyLGFsbG9jYXRlZDphbGxvY2F0ZWR9fSxtc3luYzpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgsbW1hcEZsYWdzKXtpZighRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0Myl9aWYobW1hcEZsYWdzJjIpe3JldHVybiAwfXZhciBieXRlc1dyaXR0ZW49TUVNRlMuc3RyZWFtX29wcy53cml0ZShzdHJlYW0sYnVmZmVyLDAsbGVuZ3RoLG9mZnNldCxmYWxzZSk7cmV0dXJuIDB9fX07dmFyIElEQkZTPXtkYnM6e30saW5kZXhlZERCOmZ1bmN0aW9uKCl7aWYodHlwZW9mIGluZGV4ZWREQiE9PSJ1bmRlZmluZWQiKXJldHVybiBpbmRleGVkREI7dmFyIHJldD1udWxsO2lmKHR5cGVvZiB3aW5kb3c9PT0ib2JqZWN0IilyZXQ9d2luZG93LmluZGV4ZWREQnx8d2luZG93Lm1vekluZGV4ZWREQnx8d2luZG93LndlYmtpdEluZGV4ZWREQnx8d2luZG93Lm1zSW5kZXhlZERCO2Fzc2VydChyZXQsIklEQkZTIHVzZWQsIGJ1dCBpbmRleGVkREIgbm90IHN1cHBvcnRlZCIpO3JldHVybiByZXR9LERCX1ZFUlNJT046MjEsREJfU1RPUkVfTkFNRToiRklMRV9EQVRBIixtb3VudDpmdW5jdGlvbihtb3VudCl7cmV0dXJuIE1FTUZTLm1vdW50LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sc3luY2ZzOmZ1bmN0aW9uKG1vdW50LHBvcHVsYXRlLGNhbGxiYWNrKXtJREJGUy5nZXRMb2NhbFNldChtb3VudCxmdW5jdGlvbihlcnIsbG9jYWwpe2lmKGVycilyZXR1cm4gY2FsbGJhY2soZXJyKTtJREJGUy5nZXRSZW1vdGVTZXQobW91bnQsZnVuY3Rpb24oZXJyLHJlbW90ZSl7aWYoZXJyKXJldHVybiBjYWxsYmFjayhlcnIpO3ZhciBzcmM9cG9wdWxhdGU/cmVtb3RlOmxvY2FsO3ZhciBkc3Q9cG9wdWxhdGU/bG9jYWw6cmVtb3RlO0lEQkZTLnJlY29uY2lsZShzcmMsZHN0LGNhbGxiYWNrKX0pfSl9LGdldERCOmZ1bmN0aW9uKG5hbWUsY2FsbGJhY2spe3ZhciBkYj1JREJGUy5kYnNbbmFtZV07aWYoZGIpe3JldHVybiBjYWxsYmFjayhudWxsLGRiKX12YXIgcmVxO3RyeXtyZXE9SURCRlMuaW5kZXhlZERCKCkub3BlbihuYW1lLElEQkZTLkRCX1ZFUlNJT04pfWNhdGNoKGUpe3JldHVybiBjYWxsYmFjayhlKX1pZighcmVxKXtyZXR1cm4gY2FsbGJhY2soIlVuYWJsZSB0byBjb25uZWN0IHRvIEluZGV4ZWREQiIpfXJlcS5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oZSl7dmFyIGRiPWUudGFyZ2V0LnJlc3VsdDt2YXIgdHJhbnNhY3Rpb249ZS50YXJnZXQudHJhbnNhY3Rpb247dmFyIGZpbGVTdG9yZTtpZihkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKElEQkZTLkRCX1NUT1JFX05BTUUpKXtmaWxlU3RvcmU9dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSl9ZWxzZXtmaWxlU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSl9aWYoIWZpbGVTdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCJ0aW1lc3RhbXAiKSl7ZmlsZVN0b3JlLmNyZWF0ZUluZGV4KCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXAiLHt1bmlxdWU6ZmFsc2V9KX19O3JlcS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXtkYj1yZXEucmVzdWx0O0lEQkZTLmRic1tuYW1lXT1kYjtjYWxsYmFjayhudWxsLGRiKX07cmVxLm9uZXJyb3I9ZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfX0sZ2V0TG9jYWxTZXQ6ZnVuY3Rpb24obW91bnQsY2FsbGJhY2spe3ZhciBlbnRyaWVzPXt9O2Z1bmN0aW9uIGlzUmVhbERpcihwKXtyZXR1cm4gcCE9PSIuIiYmcCE9PSIuLiJ9ZnVuY3Rpb24gdG9BYnNvbHV0ZShyb290KXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIFBBVEguam9pbjIocm9vdCxwKX19dmFyIGNoZWNrPUZTLnJlYWRkaXIobW91bnQubW91bnRwb2ludCkuZmlsdGVyKGlzUmVhbERpcikubWFwKHRvQWJzb2x1dGUobW91bnQubW91bnRwb2ludCkpO3doaWxlKGNoZWNrLmxlbmd0aCl7dmFyIHBhdGg9Y2hlY2sucG9wKCk7dmFyIHN0YXQ7dHJ5e3N0YXQ9RlMuc3RhdChwYXRoKX1jYXRjaChlKXtyZXR1cm4gY2FsbGJhY2soZSl9aWYoRlMuaXNEaXIoc3RhdC5tb2RlKSl7Y2hlY2sucHVzaC5hcHBseShjaGVjayxGUy5yZWFkZGlyKHBhdGgpLmZpbHRlcihpc1JlYWxEaXIpLm1hcCh0b0Fic29sdXRlKHBhdGgpKSl9ZW50cmllc1twYXRoXT17InRpbWVzdGFtcCI6c3RhdC5tdGltZX19cmV0dXJuIGNhbGxiYWNrKG51bGwse3R5cGU6ImxvY2FsIixlbnRyaWVzOmVudHJpZXN9KX0sZ2V0UmVtb3RlU2V0OmZ1bmN0aW9uKG1vdW50LGNhbGxiYWNrKXt2YXIgZW50cmllcz17fTtJREJGUy5nZXREQihtb3VudC5tb3VudHBvaW50LGZ1bmN0aW9uKGVycixkYil7aWYoZXJyKXJldHVybiBjYWxsYmFjayhlcnIpO3RyeXt2YXIgdHJhbnNhY3Rpb249ZGIudHJhbnNhY3Rpb24oW0lEQkZTLkRCX1NUT1JFX05BTUVdLCJyZWFkb25seSIpO3RyYW5zYWN0aW9uLm9uZXJyb3I9ZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfTt2YXIgc3RvcmU9dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSk7dmFyIGluZGV4PXN0b3JlLmluZGV4KCJ0aW1lc3RhbXAiKTtpbmRleC5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKGV2ZW50KXt2YXIgY3Vyc29yPWV2ZW50LnRhcmdldC5yZXN1bHQ7aWYoIWN1cnNvcil7cmV0dXJuIGNhbGxiYWNrKG51bGwse3R5cGU6InJlbW90ZSIsZGI6ZGIsZW50cmllczplbnRyaWVzfSl9ZW50cmllc1tjdXJzb3IucHJpbWFyeUtleV09eyJ0aW1lc3RhbXAiOmN1cnNvci5rZXl9O2N1cnNvci5jb250aW51ZSgpfX1jYXRjaChlKXtyZXR1cm4gY2FsbGJhY2soZSl9fSl9LGxvYWRMb2NhbEVudHJ5OmZ1bmN0aW9uKHBhdGgsY2FsbGJhY2spe3ZhciBzdGF0LG5vZGU7dHJ5e3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoKTtub2RlPWxvb2t1cC5ub2RlO3N0YXQ9RlMuc3RhdChwYXRoKX1jYXRjaChlKXtyZXR1cm4gY2FsbGJhY2soZSl9aWYoRlMuaXNEaXIoc3RhdC5tb2RlKSl7cmV0dXJuIGNhbGxiYWNrKG51bGwseyJ0aW1lc3RhbXAiOnN0YXQubXRpbWUsIm1vZGUiOnN0YXQubW9kZX0pfWVsc2UgaWYoRlMuaXNGaWxlKHN0YXQubW9kZSkpe25vZGUuY29udGVudHM9TUVNRlMuZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXkobm9kZSk7cmV0dXJuIGNhbGxiYWNrKG51bGwseyJ0aW1lc3RhbXAiOnN0YXQubXRpbWUsIm1vZGUiOnN0YXQubW9kZSwiY29udGVudHMiOm5vZGUuY29udGVudHN9KX1lbHNle3JldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoIm5vZGUgdHlwZSBub3Qgc3VwcG9ydGVkIikpfX0sc3RvcmVMb2NhbEVudHJ5OmZ1bmN0aW9uKHBhdGgsZW50cnksY2FsbGJhY2spe3RyeXtpZihGUy5pc0RpcihlbnRyeVsibW9kZSJdKSl7RlMubWtkaXJUcmVlKHBhdGgsZW50cnlbIm1vZGUiXSl9ZWxzZSBpZihGUy5pc0ZpbGUoZW50cnlbIm1vZGUiXSkpe0ZTLndyaXRlRmlsZShwYXRoLGVudHJ5WyJjb250ZW50cyJdLHtjYW5Pd246dHJ1ZX0pfWVsc2V7cmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcigibm9kZSB0eXBlIG5vdCBzdXBwb3J0ZWQiKSl9RlMuY2htb2QocGF0aCxlbnRyeVsibW9kZSJdKTtGUy51dGltZShwYXRoLGVudHJ5WyJ0aW1lc3RhbXAiXSxlbnRyeVsidGltZXN0YW1wIl0pfWNhdGNoKGUpe3JldHVybiBjYWxsYmFjayhlKX1jYWxsYmFjayhudWxsKX0scmVtb3ZlTG9jYWxFbnRyeTpmdW5jdGlvbihwYXRoLGNhbGxiYWNrKXt0cnl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgpO3ZhciBzdGF0PUZTLnN0YXQocGF0aCk7aWYoRlMuaXNEaXIoc3RhdC5tb2RlKSl7RlMucm1kaXIocGF0aCl9ZWxzZSBpZihGUy5pc0ZpbGUoc3RhdC5tb2RlKSl7RlMudW5saW5rKHBhdGgpfX1jYXRjaChlKXtyZXR1cm4gY2FsbGJhY2soZSl9Y2FsbGJhY2sobnVsbCl9LGxvYWRSZW1vdGVFbnRyeTpmdW5jdGlvbihzdG9yZSxwYXRoLGNhbGxiYWNrKXt2YXIgcmVxPXN0b3JlLmdldChwYXRoKTtyZXEub25zdWNjZXNzPWZ1bmN0aW9uKGV2ZW50KXtjYWxsYmFjayhudWxsLGV2ZW50LnRhcmdldC5yZXN1bHQpfTtyZXEub25lcnJvcj1mdW5jdGlvbihlKXtjYWxsYmFjayh0aGlzLmVycm9yKTtlLnByZXZlbnREZWZhdWx0KCl9fSxzdG9yZVJlbW90ZUVudHJ5OmZ1bmN0aW9uKHN0b3JlLHBhdGgsZW50cnksY2FsbGJhY2spe3ZhciByZXE9c3RvcmUucHV0KGVudHJ5LHBhdGgpO3JlcS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXtjYWxsYmFjayhudWxsKX07cmVxLm9uZXJyb3I9ZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfX0scmVtb3ZlUmVtb3RlRW50cnk6ZnVuY3Rpb24oc3RvcmUscGF0aCxjYWxsYmFjayl7dmFyIHJlcT1zdG9yZS5kZWxldGUocGF0aCk7cmVxLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2NhbGxiYWNrKG51bGwpfTtyZXEub25lcnJvcj1mdW5jdGlvbihlKXtjYWxsYmFjayh0aGlzLmVycm9yKTtlLnByZXZlbnREZWZhdWx0KCl9fSxyZWNvbmNpbGU6ZnVuY3Rpb24oc3JjLGRzdCxjYWxsYmFjayl7dmFyIHRvdGFsPTA7dmFyIGNyZWF0ZT1bXTtPYmplY3Qua2V5cyhzcmMuZW50cmllcykuZm9yRWFjaChmdW5jdGlvbihrZXkpe3ZhciBlPXNyYy5lbnRyaWVzW2tleV07dmFyIGUyPWRzdC5lbnRyaWVzW2tleV07aWYoIWUyfHxlWyJ0aW1lc3RhbXAiXS5nZXRUaW1lKCkhPWUyWyJ0aW1lc3RhbXAiXS5nZXRUaW1lKCkpe2NyZWF0ZS5wdXNoKGtleSk7dG90YWwrK319KTt2YXIgcmVtb3ZlPVtdO09iamVjdC5rZXlzKGRzdC5lbnRyaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7aWYoIXNyYy5lbnRyaWVzW2tleV0pe3JlbW92ZS5wdXNoKGtleSk7dG90YWwrK319KTtpZighdG90YWwpe3JldHVybiBjYWxsYmFjayhudWxsKX12YXIgZXJyb3JlZD1mYWxzZTt2YXIgZGI9c3JjLnR5cGU9PT0icmVtb3RlIj9zcmMuZGI6ZHN0LmRiO3ZhciB0cmFuc2FjdGlvbj1kYi50cmFuc2FjdGlvbihbSURCRlMuREJfU1RPUkVfTkFNRV0sInJlYWR3cml0ZSIpO3ZhciBzdG9yZT10cmFuc2FjdGlvbi5vYmplY3RTdG9yZShJREJGUy5EQl9TVE9SRV9OQU1FKTtmdW5jdGlvbiBkb25lKGVycil7aWYoZXJyJiYhZXJyb3JlZCl7ZXJyb3JlZD10cnVlO3JldHVybiBjYWxsYmFjayhlcnIpfX10cmFuc2FjdGlvbi5vbmVycm9yPWZ1bmN0aW9uKGUpe2RvbmUodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfTt0cmFuc2FjdGlvbi5vbmNvbXBsZXRlPWZ1bmN0aW9uKGUpe2lmKCFlcnJvcmVkKXtjYWxsYmFjayhudWxsKX19O2NyZWF0ZS5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihwYXRoKXtpZihkc3QudHlwZT09PSJsb2NhbCIpe0lEQkZTLmxvYWRSZW1vdGVFbnRyeShzdG9yZSxwYXRoLGZ1bmN0aW9uKGVycixlbnRyeSl7aWYoZXJyKXJldHVybiBkb25lKGVycik7SURCRlMuc3RvcmVMb2NhbEVudHJ5KHBhdGgsZW50cnksZG9uZSl9KX1lbHNle0lEQkZTLmxvYWRMb2NhbEVudHJ5KHBhdGgsZnVuY3Rpb24oZXJyLGVudHJ5KXtpZihlcnIpcmV0dXJuIGRvbmUoZXJyKTtJREJGUy5zdG9yZVJlbW90ZUVudHJ5KHN0b3JlLHBhdGgsZW50cnksZG9uZSl9KX19KTtyZW1vdmUuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHBhdGgpe2lmKGRzdC50eXBlPT09ImxvY2FsIil7SURCRlMucmVtb3ZlTG9jYWxFbnRyeShwYXRoLGRvbmUpfWVsc2V7SURCRlMucmVtb3ZlUmVtb3RlRW50cnkoc3RvcmUscGF0aCxkb25lKX19KX19O3ZhciBGUz17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOmZhbHNlLGlnbm9yZVBlcm1pc3Npb25zOnRydWUsdHJhY2tpbmdEZWxlZ2F0ZTp7fSx0cmFja2luZzp7b3BlbkZsYWdzOntSRUFEOjEsV1JJVEU6Mn19LEVycm5vRXJyb3I6bnVsbCxnZW5lcmljRXJyb3JzOnt9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxsb29rdXBQYXRoOmZ1bmN0aW9uKHBhdGgsb3B0cyl7cGF0aD1QQVRIX0ZTLnJlc29sdmUoRlMuY3dkKCkscGF0aCk7b3B0cz1vcHRzfHx7fTtpZighcGF0aClyZXR1cm57cGF0aDoiIixub2RlOm51bGx9O3ZhciBkZWZhdWx0cz17Zm9sbG93X21vdW50OnRydWUscmVjdXJzZV9jb3VudDowfTtmb3IodmFyIGtleSBpbiBkZWZhdWx0cyl7aWYob3B0c1trZXldPT09dW5kZWZpbmVkKXtvcHRzW2tleV09ZGVmYXVsdHNba2V5XX19aWYob3B0cy5yZWN1cnNlX2NvdW50Pjgpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDMyKX12YXIgcGFydHM9UEFUSC5ub3JtYWxpemVBcnJheShwYXRoLnNwbGl0KCIvIikuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiEhcH0pLGZhbHNlKTt2YXIgY3VycmVudD1GUy5yb290O3ZhciBjdXJyZW50X3BhdGg9Ii8iO2Zvcih2YXIgaT0wO2k8cGFydHMubGVuZ3RoO2krKyl7dmFyIGlzbGFzdD1pPT09cGFydHMubGVuZ3RoLTE7aWYoaXNsYXN0JiZvcHRzLnBhcmVudCl7YnJlYWt9Y3VycmVudD1GUy5sb29rdXBOb2RlKGN1cnJlbnQscGFydHNbaV0pO2N1cnJlbnRfcGF0aD1QQVRILmpvaW4yKGN1cnJlbnRfcGF0aCxwYXJ0c1tpXSk7aWYoRlMuaXNNb3VudHBvaW50KGN1cnJlbnQpKXtpZighaXNsYXN0fHxpc2xhc3QmJm9wdHMuZm9sbG93X21vdW50KXtjdXJyZW50PWN1cnJlbnQubW91bnRlZC5yb290fX1pZighaXNsYXN0fHxvcHRzLmZvbGxvdyl7dmFyIGNvdW50PTA7d2hpbGUoRlMuaXNMaW5rKGN1cnJlbnQubW9kZSkpe3ZhciBsaW5rPUZTLnJlYWRsaW5rKGN1cnJlbnRfcGF0aCk7Y3VycmVudF9wYXRoPVBBVEhfRlMucmVzb2x2ZShQQVRILmRpcm5hbWUoY3VycmVudF9wYXRoKSxsaW5rKTt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgoY3VycmVudF9wYXRoLHtyZWN1cnNlX2NvdW50Om9wdHMucmVjdXJzZV9jb3VudH0pO2N1cnJlbnQ9bG9va3VwLm5vZGU7aWYoY291bnQrKz40MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMzIpfX19fXJldHVybntwYXRoOmN1cnJlbnRfcGF0aCxub2RlOmN1cnJlbnR9fSxnZXRQYXRoOmZ1bmN0aW9uKG5vZGUpe3ZhciBwYXRoO3doaWxlKHRydWUpe2lmKEZTLmlzUm9vdChub2RlKSl7dmFyIG1vdW50PW5vZGUubW91bnQubW91bnRwb2ludDtpZighcGF0aClyZXR1cm4gbW91bnQ7cmV0dXJuIG1vdW50W21vdW50Lmxlbmd0aC0xXSE9PSIvIj9tb3VudCsiLyIrcGF0aDptb3VudCtwYXRofXBhdGg9cGF0aD9ub2RlLm5hbWUrIi8iK3BhdGg6bm9kZS5uYW1lO25vZGU9bm9kZS5wYXJlbnR9fSxoYXNoTmFtZTpmdW5jdGlvbihwYXJlbnRpZCxuYW1lKXt2YXIgaGFzaD0wO2Zvcih2YXIgaT0wO2k8bmFtZS5sZW5ndGg7aSsrKXtoYXNoPShoYXNoPDw1KS1oYXNoK25hbWUuY2hhckNvZGVBdChpKXwwfXJldHVybihwYXJlbnRpZCtoYXNoPj4+MCklRlMubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGU6ZnVuY3Rpb24obm9kZSl7dmFyIGhhc2g9RlMuaGFzaE5hbWUobm9kZS5wYXJlbnQuaWQsbm9kZS5uYW1lKTtub2RlLm5hbWVfbmV4dD1GUy5uYW1lVGFibGVbaGFzaF07RlMubmFtZVRhYmxlW2hhc2hdPW5vZGV9LGhhc2hSZW1vdmVOb2RlOmZ1bmN0aW9uKG5vZGUpe3ZhciBoYXNoPUZTLmhhc2hOYW1lKG5vZGUucGFyZW50LmlkLG5vZGUubmFtZSk7aWYoRlMubmFtZVRhYmxlW2hhc2hdPT09bm9kZSl7RlMubmFtZVRhYmxlW2hhc2hdPW5vZGUubmFtZV9uZXh0fWVsc2V7dmFyIGN1cnJlbnQ9RlMubmFtZVRhYmxlW2hhc2hdO3doaWxlKGN1cnJlbnQpe2lmKGN1cnJlbnQubmFtZV9uZXh0PT09bm9kZSl7Y3VycmVudC5uYW1lX25leHQ9bm9kZS5uYW1lX25leHQ7YnJlYWt9Y3VycmVudD1jdXJyZW50Lm5hbWVfbmV4dH19fSxsb29rdXBOb2RlOmZ1bmN0aW9uKHBhcmVudCxuYW1lKXt2YXIgZXJyQ29kZT1GUy5tYXlMb29rdXAocGFyZW50KTtpZihlcnJDb2RlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnJDb2RlLHBhcmVudCl9dmFyIGhhc2g9RlMuaGFzaE5hbWUocGFyZW50LmlkLG5hbWUpO2Zvcih2YXIgbm9kZT1GUy5uYW1lVGFibGVbaGFzaF07bm9kZTtub2RlPW5vZGUubmFtZV9uZXh0KXt2YXIgbm9kZU5hbWU9bm9kZS5uYW1lO2lmKG5vZGUucGFyZW50LmlkPT09cGFyZW50LmlkJiZub2RlTmFtZT09PW5hbWUpe3JldHVybiBub2RlfX1yZXR1cm4gRlMubG9va3VwKHBhcmVudCxuYW1lKX0sY3JlYXRlTm9kZTpmdW5jdGlvbihwYXJlbnQsbmFtZSxtb2RlLHJkZXYpe3ZhciBub2RlPW5ldyBGUy5GU05vZGUocGFyZW50LG5hbWUsbW9kZSxyZGV2KTtGUy5oYXNoQWRkTm9kZShub2RlKTtyZXR1cm4gbm9kZX0sZGVzdHJveU5vZGU6ZnVuY3Rpb24obm9kZSl7RlMuaGFzaFJlbW92ZU5vZGUobm9kZSl9LGlzUm9vdDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZT09PW5vZGUucGFyZW50fSxpc01vdW50cG9pbnQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuISFub2RlLm1vdW50ZWR9LGlzRmlsZTpmdW5jdGlvbihtb2RlKXtyZXR1cm4obW9kZSY2MTQ0MCk9PT0zMjc2OH0saXNEaXI6ZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNjE0NDApPT09MTYzODR9LGlzTGluazpmdW5jdGlvbihtb2RlKXtyZXR1cm4obW9kZSY2MTQ0MCk9PT00MDk2MH0saXNDaHJkZXY6ZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNjE0NDApPT09ODE5Mn0saXNCbGtkZXY6ZnVuY3Rpb24obW9kZSl7cmV0dXJuKG1vZGUmNjE0NDApPT09MjQ1NzZ9LGlzRklGTzpmdW5jdGlvbihtb2RlKXtyZXR1cm4obW9kZSY2MTQ0MCk9PT00MDk2fSxpc1NvY2tldDpmdW5jdGlvbihtb2RlKXtyZXR1cm4obW9kZSY0OTE1Mik9PT00OTE1Mn0sZmxhZ01vZGVzOnsiciI6MCwicisiOjIsInciOjU3NywidysiOjU3OCwiYSI6MTA4OSwiYSsiOjEwOTB9LG1vZGVTdHJpbmdUb0ZsYWdzOmZ1bmN0aW9uKHN0cil7dmFyIGZsYWdzPUZTLmZsYWdNb2Rlc1tzdHJdO2lmKHR5cGVvZiBmbGFncz09PSJ1bmRlZmluZWQiKXt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZmlsZSBvcGVuIG1vZGU6ICIrc3RyKX1yZXR1cm4gZmxhZ3N9LGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOmZ1bmN0aW9uKGZsYWcpe3ZhciBwZXJtcz1bInIiLCJ3IiwicnciXVtmbGFnJjNdO2lmKGZsYWcmNTEyKXtwZXJtcys9IncifXJldHVybiBwZXJtc30sbm9kZVBlcm1pc3Npb25zOmZ1bmN0aW9uKG5vZGUscGVybXMpe2lmKEZTLmlnbm9yZVBlcm1pc3Npb25zKXtyZXR1cm4gMH1pZihwZXJtcy5pbmNsdWRlcygiciIpJiYhKG5vZGUubW9kZSYyOTIpKXtyZXR1cm4gMn1lbHNlIGlmKHBlcm1zLmluY2x1ZGVzKCJ3IikmJiEobm9kZS5tb2RlJjE0Nikpe3JldHVybiAyfWVsc2UgaWYocGVybXMuaW5jbHVkZXMoIngiKSYmIShub2RlLm1vZGUmNzMpKXtyZXR1cm4gMn1yZXR1cm4gMH0sbWF5TG9va3VwOmZ1bmN0aW9uKGRpcil7dmFyIGVyckNvZGU9RlMubm9kZVBlcm1pc3Npb25zKGRpciwieCIpO2lmKGVyckNvZGUpcmV0dXJuIGVyckNvZGU7aWYoIWRpci5ub2RlX29wcy5sb29rdXApcmV0dXJuIDI7cmV0dXJuIDB9LG1heUNyZWF0ZTpmdW5jdGlvbihkaXIsbmFtZSl7dHJ5e3ZhciBub2RlPUZTLmxvb2t1cE5vZGUoZGlyLG5hbWUpO3JldHVybiAyMH1jYXRjaChlKXt9cmV0dXJuIEZTLm5vZGVQZXJtaXNzaW9ucyhkaXIsInd4Iil9LG1heURlbGV0ZTpmdW5jdGlvbihkaXIsbmFtZSxpc2Rpcil7dmFyIG5vZGU7dHJ5e25vZGU9RlMubG9va3VwTm9kZShkaXIsbmFtZSl9Y2F0Y2goZSl7cmV0dXJuIGUuZXJybm99dmFyIGVyckNvZGU9RlMubm9kZVBlcm1pc3Npb25zKGRpciwid3giKTtpZihlcnJDb2RlKXtyZXR1cm4gZXJyQ29kZX1pZihpc2Rpcil7aWYoIUZTLmlzRGlyKG5vZGUubW9kZSkpe3JldHVybiA1NH1pZihGUy5pc1Jvb3Qobm9kZSl8fEZTLmdldFBhdGgobm9kZSk9PT1GUy5jd2QoKSl7cmV0dXJuIDEwfX1lbHNle2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe3JldHVybiAzMX19cmV0dXJuIDB9LG1heU9wZW46ZnVuY3Rpb24obm9kZSxmbGFncyl7aWYoIW5vZGUpe3JldHVybiA0NH1pZihGUy5pc0xpbmsobm9kZS5tb2RlKSl7cmV0dXJuIDMyfWVsc2UgaWYoRlMuaXNEaXIobm9kZS5tb2RlKSl7aWYoRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZmxhZ3MpIT09InIifHxmbGFncyY1MTIpe3JldHVybiAzMX19cmV0dXJuIEZTLm5vZGVQZXJtaXNzaW9ucyhub2RlLEZTLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGZsYWdzKSl9LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZDpmdW5jdGlvbihmZF9zdGFydCxmZF9lbmQpe2ZkX3N0YXJ0PWZkX3N0YXJ0fHwwO2ZkX2VuZD1mZF9lbmR8fEZTLk1BWF9PUEVOX0ZEUztmb3IodmFyIGZkPWZkX3N0YXJ0O2ZkPD1mZF9lbmQ7ZmQrKyl7aWYoIUZTLnN0cmVhbXNbZmRdKXtyZXR1cm4gZmR9fXRocm93IG5ldyBGUy5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtOmZ1bmN0aW9uKGZkKXtyZXR1cm4gRlMuc3RyZWFtc1tmZF19LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbihzdHJlYW0sZmRfc3RhcnQsZmRfZW5kKXtpZighRlMuRlNTdHJlYW0pe0ZTLkZTU3RyZWFtPWZ1bmN0aW9uKCl7fTtGUy5GU1N0cmVhbS5wcm90b3R5cGU9e29iamVjdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX0sc2V0OmZ1bmN0aW9uKHZhbCl7dGhpcy5ub2RlPXZhbH19LGlzUmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0xfX0saXNXcml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0wfX0saXNBcHBlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYWdzJjEwMjR9fX19dmFyIG5ld1N0cmVhbT1uZXcgRlMuRlNTdHJlYW07Zm9yKHZhciBwIGluIHN0cmVhbSl7bmV3U3RyZWFtW3BdPXN0cmVhbVtwXX1zdHJlYW09bmV3U3RyZWFtO3ZhciBmZD1GUy5uZXh0ZmQoZmRfc3RhcnQsZmRfZW5kKTtzdHJlYW0uZmQ9ZmQ7RlMuc3RyZWFtc1tmZF09c3RyZWFtO3JldHVybiBzdHJlYW19LGNsb3NlU3RyZWFtOmZ1bmN0aW9uKGZkKXtGUy5zdHJlYW1zW2ZkXT1udWxsfSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbjpmdW5jdGlvbihzdHJlYW0pe3ZhciBkZXZpY2U9RlMuZ2V0RGV2aWNlKHN0cmVhbS5ub2RlLnJkZXYpO3N0cmVhbS5zdHJlYW1fb3BzPWRldmljZS5zdHJlYW1fb3BzO2lmKHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4pe3N0cmVhbS5zdHJlYW1fb3BzLm9wZW4oc3RyZWFtKX19LGxsc2VlazpmdW5jdGlvbigpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDcwKX19LG1ham9yOmZ1bmN0aW9uKGRldil7cmV0dXJuIGRldj4+OH0sbWlub3I6ZnVuY3Rpb24oZGV2KXtyZXR1cm4gZGV2JjI1NX0sbWFrZWRldjpmdW5jdGlvbihtYSxtaSl7cmV0dXJuIG1hPDw4fG1pfSxyZWdpc3RlckRldmljZTpmdW5jdGlvbihkZXYsb3BzKXtGUy5kZXZpY2VzW2Rldl09e3N0cmVhbV9vcHM6b3BzfX0sZ2V0RGV2aWNlOmZ1bmN0aW9uKGRldil7cmV0dXJuIEZTLmRldmljZXNbZGV2XX0sZ2V0TW91bnRzOmZ1bmN0aW9uKG1vdW50KXt2YXIgbW91bnRzPVtdO3ZhciBjaGVjaz1bbW91bnRdO3doaWxlKGNoZWNrLmxlbmd0aCl7dmFyIG09Y2hlY2sucG9wKCk7bW91bnRzLnB1c2gobSk7Y2hlY2sucHVzaC5hcHBseShjaGVjayxtLm1vdW50cyl9cmV0dXJuIG1vdW50c30sc3luY2ZzOmZ1bmN0aW9uKHBvcHVsYXRlLGNhbGxiYWNrKXtpZih0eXBlb2YgcG9wdWxhdGU9PT0iZnVuY3Rpb24iKXtjYWxsYmFjaz1wb3B1bGF0ZTtwb3B1bGF0ZT1mYWxzZX1GUy5zeW5jRlNSZXF1ZXN0cysrO2lmKEZTLnN5bmNGU1JlcXVlc3RzPjEpe2Vycigid2FybmluZzogIitGUy5zeW5jRlNSZXF1ZXN0cysiIEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmsiKX12YXIgbW91bnRzPUZTLmdldE1vdW50cyhGUy5yb290Lm1vdW50KTt2YXIgY29tcGxldGVkPTA7ZnVuY3Rpb24gZG9DYWxsYmFjayhlcnJDb2RlKXtGUy5zeW5jRlNSZXF1ZXN0cy0tO3JldHVybiBjYWxsYmFjayhlcnJDb2RlKX1mdW5jdGlvbiBkb25lKGVyckNvZGUpe2lmKGVyckNvZGUpe2lmKCFkb25lLmVycm9yZWQpe2RvbmUuZXJyb3JlZD10cnVlO3JldHVybiBkb0NhbGxiYWNrKGVyckNvZGUpfXJldHVybn1pZigrK2NvbXBsZXRlZD49bW91bnRzLmxlbmd0aCl7ZG9DYWxsYmFjayhudWxsKX19bW91bnRzLmZvckVhY2goZnVuY3Rpb24obW91bnQpe2lmKCFtb3VudC50eXBlLnN5bmNmcyl7cmV0dXJuIGRvbmUobnVsbCl9bW91bnQudHlwZS5zeW5jZnMobW91bnQscG9wdWxhdGUsZG9uZSl9KX0sbW91bnQ6ZnVuY3Rpb24odHlwZSxvcHRzLG1vdW50cG9pbnQpe3ZhciByb290PW1vdW50cG9pbnQ9PT0iLyI7dmFyIHBzZXVkbz0hbW91bnRwb2ludDt2YXIgbm9kZTtpZihyb290JiZGUy5yb290KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigxMCl9ZWxzZSBpZighcm9vdCYmIXBzZXVkbyl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKG1vdW50cG9pbnQse2ZvbGxvd19tb3VudDpmYWxzZX0pO21vdW50cG9pbnQ9bG9va3VwLnBhdGg7bm9kZT1sb29rdXAubm9kZTtpZihGUy5pc01vdW50cG9pbnQobm9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDEwKX1pZighRlMuaXNEaXIobm9kZS5tb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNTQpfX12YXIgbW91bnQ9e3R5cGU6dHlwZSxvcHRzOm9wdHMsbW91bnRwb2ludDptb3VudHBvaW50LG1vdW50czpbXX07dmFyIG1vdW50Um9vdD10eXBlLm1vdW50KG1vdW50KTttb3VudFJvb3QubW91bnQ9bW91bnQ7bW91bnQucm9vdD1tb3VudFJvb3Q7aWYocm9vdCl7RlMucm9vdD1tb3VudFJvb3R9ZWxzZSBpZihub2RlKXtub2RlLm1vdW50ZWQ9bW91bnQ7aWYobm9kZS5tb3VudCl7bm9kZS5tb3VudC5tb3VudHMucHVzaChtb3VudCl9fXJldHVybiBtb3VudFJvb3R9LHVubW91bnQ6ZnVuY3Rpb24obW91bnRwb2ludCl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKG1vdW50cG9pbnQse2ZvbGxvd19tb3VudDpmYWxzZX0pO2lmKCFGUy5pc01vdW50cG9pbnQobG9va3VwLm5vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOCl9dmFyIG5vZGU9bG9va3VwLm5vZGU7dmFyIG1vdW50PW5vZGUubW91bnRlZDt2YXIgbW91bnRzPUZTLmdldE1vdW50cyhtb3VudCk7T2JqZWN0LmtleXMoRlMubmFtZVRhYmxlKS5mb3JFYWNoKGZ1bmN0aW9uKGhhc2gpe3ZhciBjdXJyZW50PUZTLm5hbWVUYWJsZVtoYXNoXTt3aGlsZShjdXJyZW50KXt2YXIgbmV4dD1jdXJyZW50Lm5hbWVfbmV4dDtpZihtb3VudHMuaW5jbHVkZXMoY3VycmVudC5tb3VudCkpe0ZTLmRlc3Ryb3lOb2RlKGN1cnJlbnQpfWN1cnJlbnQ9bmV4dH19KTtub2RlLm1vdW50ZWQ9bnVsbDt2YXIgaWR4PW5vZGUubW91bnQubW91bnRzLmluZGV4T2YobW91bnQpO25vZGUubW91bnQubW91bnRzLnNwbGljZShpZHgsMSl9LGxvb2t1cDpmdW5jdGlvbihwYXJlbnQsbmFtZSl7cmV0dXJuIHBhcmVudC5ub2RlX29wcy5sb29rdXAocGFyZW50LG5hbWUpfSxta25vZDpmdW5jdGlvbihwYXRoLG1vZGUsZGV2KXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7cGFyZW50OnRydWV9KTt2YXIgcGFyZW50PWxvb2t1cC5ub2RlO3ZhciBuYW1lPVBBVEguYmFzZW5hbWUocGF0aCk7aWYoIW5hbWV8fG5hbWU9PT0iLiJ8fG5hbWU9PT0iLi4iKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOCl9dmFyIGVyckNvZGU9RlMubWF5Q3JlYXRlKHBhcmVudCxuYW1lKTtpZihlcnJDb2RlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnJDb2RlKX1pZighcGFyZW50Lm5vZGVfb3BzLm1rbm9kKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig2Myl9cmV0dXJuIHBhcmVudC5ub2RlX29wcy5ta25vZChwYXJlbnQsbmFtZSxtb2RlLGRldil9LGNyZWF0ZTpmdW5jdGlvbihwYXRoLG1vZGUpe21vZGU9bW9kZSE9PXVuZGVmaW5lZD9tb2RlOjQzODttb2RlJj00MDk1O21vZGV8PTMyNzY4O3JldHVybiBGUy5ta25vZChwYXRoLG1vZGUsMCl9LG1rZGlyOmZ1bmN0aW9uKHBhdGgsbW9kZSl7bW9kZT1tb2RlIT09dW5kZWZpbmVkP21vZGU6NTExO21vZGUmPTUxMXw1MTI7bW9kZXw9MTYzODQ7cmV0dXJuIEZTLm1rbm9kKHBhdGgsbW9kZSwwKX0sbWtkaXJUcmVlOmZ1bmN0aW9uKHBhdGgsbW9kZSl7dmFyIGRpcnM9cGF0aC5zcGxpdCgiLyIpO3ZhciBkPSIiO2Zvcih2YXIgaT0wO2k8ZGlycy5sZW5ndGg7KytpKXtpZighZGlyc1tpXSljb250aW51ZTtkKz0iLyIrZGlyc1tpXTt0cnl7RlMubWtkaXIoZCxtb2RlKX1jYXRjaChlKXtpZihlLmVycm5vIT0yMCl0aHJvdyBlfX19LG1rZGV2OmZ1bmN0aW9uKHBhdGgsbW9kZSxkZXYpe2lmKHR5cGVvZiBkZXY9PT0idW5kZWZpbmVkIil7ZGV2PW1vZGU7bW9kZT00Mzh9bW9kZXw9ODE5MjtyZXR1cm4gRlMubWtub2QocGF0aCxtb2RlLGRldil9LHN5bWxpbms6ZnVuY3Rpb24ob2xkcGF0aCxuZXdwYXRoKXtpZighUEFUSF9GUy5yZXNvbHZlKG9sZHBhdGgpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0NCl9dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKG5ld3BhdGgse3BhcmVudDp0cnVlfSk7dmFyIHBhcmVudD1sb29rdXAubm9kZTtpZighcGFyZW50KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0NCl9dmFyIG5ld25hbWU9UEFUSC5iYXNlbmFtZShuZXdwYXRoKTt2YXIgZXJyQ29kZT1GUy5tYXlDcmVhdGUocGFyZW50LG5ld25hbWUpO2lmKGVyckNvZGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVyckNvZGUpfWlmKCFwYXJlbnQubm9kZV9vcHMuc3ltbGluayl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNjMpfXJldHVybiBwYXJlbnQubm9kZV9vcHMuc3ltbGluayhwYXJlbnQsbmV3bmFtZSxvbGRwYXRoKX0scmVuYW1lOmZ1bmN0aW9uKG9sZF9wYXRoLG5ld19wYXRoKXt2YXIgb2xkX2Rpcm5hbWU9UEFUSC5kaXJuYW1lKG9sZF9wYXRoKTt2YXIgbmV3X2Rpcm5hbWU9UEFUSC5kaXJuYW1lKG5ld19wYXRoKTt2YXIgb2xkX25hbWU9UEFUSC5iYXNlbmFtZShvbGRfcGF0aCk7dmFyIG5ld19uYW1lPVBBVEguYmFzZW5hbWUobmV3X3BhdGgpO3ZhciBsb29rdXAsb2xkX2RpcixuZXdfZGlyO2xvb2t1cD1GUy5sb29rdXBQYXRoKG9sZF9wYXRoLHtwYXJlbnQ6dHJ1ZX0pO29sZF9kaXI9bG9va3VwLm5vZGU7bG9va3VwPUZTLmxvb2t1cFBhdGgobmV3X3BhdGgse3BhcmVudDp0cnVlfSk7bmV3X2Rpcj1sb29rdXAubm9kZTtpZighb2xkX2Rpcnx8IW5ld19kaXIpdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNDQpO2lmKG9sZF9kaXIubW91bnQhPT1uZXdfZGlyLm1vdW50KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig3NSl9dmFyIG9sZF9ub2RlPUZTLmxvb2t1cE5vZGUob2xkX2RpcixvbGRfbmFtZSk7dmFyIHJlbGF0aXZlPVBBVEhfRlMucmVsYXRpdmUob2xkX3BhdGgsbmV3X2Rpcm5hbWUpO2lmKHJlbGF0aXZlLmNoYXJBdCgwKSE9PSIuIil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjgpfXJlbGF0aXZlPVBBVEhfRlMucmVsYXRpdmUobmV3X3BhdGgsb2xkX2Rpcm5hbWUpO2lmKHJlbGF0aXZlLmNoYXJBdCgwKSE9PSIuIil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNTUpfXZhciBuZXdfbm9kZTt0cnl7bmV3X25vZGU9RlMubG9va3VwTm9kZShuZXdfZGlyLG5ld19uYW1lKX1jYXRjaChlKXt9aWYob2xkX25vZGU9PT1uZXdfbm9kZSl7cmV0dXJufXZhciBpc2Rpcj1GUy5pc0RpcihvbGRfbm9kZS5tb2RlKTt2YXIgZXJyQ29kZT1GUy5tYXlEZWxldGUob2xkX2RpcixvbGRfbmFtZSxpc2Rpcik7aWYoZXJyQ29kZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyQ29kZSl9ZXJyQ29kZT1uZXdfbm9kZT9GUy5tYXlEZWxldGUobmV3X2RpcixuZXdfbmFtZSxpc2Rpcik6RlMubWF5Q3JlYXRlKG5ld19kaXIsbmV3X25hbWUpO2lmKGVyckNvZGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVyckNvZGUpfWlmKCFvbGRfZGlyLm5vZGVfb3BzLnJlbmFtZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNjMpfWlmKEZTLmlzTW91bnRwb2ludChvbGRfbm9kZSl8fG5ld19ub2RlJiZGUy5pc01vdW50cG9pbnQobmV3X25vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigxMCl9aWYobmV3X2RpciE9PW9sZF9kaXIpe2VyckNvZGU9RlMubm9kZVBlcm1pc3Npb25zKG9sZF9kaXIsInciKTtpZihlcnJDb2RlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnJDb2RlKX19dHJ5e2lmKEZTLnRyYWNraW5nRGVsZWdhdGVbIndpbGxNb3ZlUGF0aCJdKXtGUy50cmFja2luZ0RlbGVnYXRlWyJ3aWxsTW92ZVBhdGgiXShvbGRfcGF0aCxuZXdfcGF0aCl9fWNhdGNoKGUpe2VycigiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnd2lsbE1vdmVQYXRoJ10oJyIrb2xkX3BhdGgrIicsICciK25ld19wYXRoKyInKSB0aHJldyBhbiBleGNlcHRpb246ICIrZS5tZXNzYWdlKX1GUy5oYXNoUmVtb3ZlTm9kZShvbGRfbm9kZSk7dHJ5e29sZF9kaXIubm9kZV9vcHMucmVuYW1lKG9sZF9ub2RlLG5ld19kaXIsbmV3X25hbWUpfWNhdGNoKGUpe3Rocm93IGV9ZmluYWxseXtGUy5oYXNoQWRkTm9kZShvbGRfbm9kZSl9dHJ5e2lmKEZTLnRyYWNraW5nRGVsZWdhdGVbIm9uTW92ZVBhdGgiXSlGUy50cmFja2luZ0RlbGVnYXRlWyJvbk1vdmVQYXRoIl0ob2xkX3BhdGgsbmV3X3BhdGgpfWNhdGNoKGUpe2VycigiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25Nb3ZlUGF0aCddKCciK29sZF9wYXRoKyInLCAnIituZXdfcGF0aCsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK2UubWVzc2FnZSl9fSxybWRpcjpmdW5jdGlvbihwYXRoKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7cGFyZW50OnRydWV9KTt2YXIgcGFyZW50PWxvb2t1cC5ub2RlO3ZhciBuYW1lPVBBVEguYmFzZW5hbWUocGF0aCk7dmFyIG5vZGU9RlMubG9va3VwTm9kZShwYXJlbnQsbmFtZSk7dmFyIGVyckNvZGU9RlMubWF5RGVsZXRlKHBhcmVudCxuYW1lLHRydWUpO2lmKGVyckNvZGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKGVyckNvZGUpfWlmKCFwYXJlbnQubm9kZV9vcHMucm1kaXIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDYzKX1pZihGUy5pc01vdW50cG9pbnQobm9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDEwKX10cnl7aWYoRlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbERlbGV0ZVBhdGgiXSl7RlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbERlbGV0ZVBhdGgiXShwYXRoKX19Y2F0Y2goZSl7ZXJyKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsRGVsZXRlUGF0aCddKCciK3BhdGgrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UpfXBhcmVudC5ub2RlX29wcy5ybWRpcihwYXJlbnQsbmFtZSk7RlMuZGVzdHJveU5vZGUobm9kZSk7dHJ5e2lmKEZTLnRyYWNraW5nRGVsZWdhdGVbIm9uRGVsZXRlUGF0aCJdKUZTLnRyYWNraW5nRGVsZWdhdGVbIm9uRGVsZXRlUGF0aCJdKHBhdGgpfWNhdGNoKGUpe2VycigiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25EZWxldGVQYXRoJ10oJyIrcGF0aCsiJykgdGhyZXcgYW4gZXhjZXB0aW9uOiAiK2UubWVzc2FnZSl9fSxyZWFkZGlyOmZ1bmN0aW9uKHBhdGgpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6dHJ1ZX0pO3ZhciBub2RlPWxvb2t1cC5ub2RlO2lmKCFub2RlLm5vZGVfb3BzLnJlYWRkaXIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDU0KX1yZXR1cm4gbm9kZS5ub2RlX29wcy5yZWFkZGlyKG5vZGUpfSx1bmxpbms6ZnVuY3Rpb24ocGF0aCl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse3BhcmVudDp0cnVlfSk7dmFyIHBhcmVudD1sb29rdXAubm9kZTt2YXIgbmFtZT1QQVRILmJhc2VuYW1lKHBhdGgpO3ZhciBub2RlPUZTLmxvb2t1cE5vZGUocGFyZW50LG5hbWUpO3ZhciBlcnJDb2RlPUZTLm1heURlbGV0ZShwYXJlbnQsbmFtZSxmYWxzZSk7aWYoZXJyQ29kZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyQ29kZSl9aWYoIXBhcmVudC5ub2RlX29wcy51bmxpbmspe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDYzKX1pZihGUy5pc01vdW50cG9pbnQobm9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDEwKX10cnl7aWYoRlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbERlbGV0ZVBhdGgiXSl7RlMudHJhY2tpbmdEZWxlZ2F0ZVsid2lsbERlbGV0ZVBhdGgiXShwYXRoKX19Y2F0Y2goZSl7ZXJyKCJGUy50cmFja2luZ0RlbGVnYXRlWyd3aWxsRGVsZXRlUGF0aCddKCciK3BhdGgrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UpfXBhcmVudC5ub2RlX29wcy51bmxpbmsocGFyZW50LG5hbWUpO0ZTLmRlc3Ryb3lOb2RlKG5vZGUpO3RyeXtpZihGUy50cmFja2luZ0RlbGVnYXRlWyJvbkRlbGV0ZVBhdGgiXSlGUy50cmFja2luZ0RlbGVnYXRlWyJvbkRlbGV0ZVBhdGgiXShwYXRoKX1jYXRjaChlKXtlcnIoIkZTLnRyYWNraW5nRGVsZWdhdGVbJ29uRGVsZXRlUGF0aCddKCciK3BhdGgrIicpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UpfX0scmVhZGxpbms6ZnVuY3Rpb24ocGF0aCl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgpO3ZhciBsaW5rPWxvb2t1cC5ub2RlO2lmKCFsaW5rKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0NCl9aWYoIWxpbmsubm9kZV9vcHMucmVhZGxpbmspe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDI4KX1yZXR1cm4gUEFUSF9GUy5yZXNvbHZlKEZTLmdldFBhdGgobGluay5wYXJlbnQpLGxpbmsubm9kZV9vcHMucmVhZGxpbmsobGluaykpfSxzdGF0OmZ1bmN0aW9uKHBhdGgsZG9udEZvbGxvdyl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse2ZvbGxvdzohZG9udEZvbGxvd30pO3ZhciBub2RlPWxvb2t1cC5ub2RlO2lmKCFub2RlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0NCl9aWYoIW5vZGUubm9kZV9vcHMuZ2V0YXR0cil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNjMpfXJldHVybiBub2RlLm5vZGVfb3BzLmdldGF0dHIobm9kZSl9LGxzdGF0OmZ1bmN0aW9uKHBhdGgpe3JldHVybiBGUy5zdGF0KHBhdGgsdHJ1ZSl9LGNobW9kOmZ1bmN0aW9uKHBhdGgsbW9kZSxkb250Rm9sbG93KXt2YXIgbm9kZTtpZih0eXBlb2YgcGF0aD09PSJzdHJpbmciKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250Rm9sbG93fSk7bm9kZT1sb29rdXAubm9kZX1lbHNle25vZGU9cGF0aH1pZighbm9kZS5ub2RlX29wcy5zZXRhdHRyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig2Myl9bm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUse21vZGU6bW9kZSY0MDk1fG5vZGUubW9kZSZ+NDA5NSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2htb2Q6ZnVuY3Rpb24ocGF0aCxtb2RlKXtGUy5jaG1vZChwYXRoLG1vZGUsdHJ1ZSl9LGZjaG1vZDpmdW5jdGlvbihmZCxtb2RlKXt2YXIgc3RyZWFtPUZTLmdldFN0cmVhbShmZCk7aWYoIXN0cmVhbSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCl9RlMuY2htb2Qoc3RyZWFtLm5vZGUsbW9kZSl9LGNob3duOmZ1bmN0aW9uKHBhdGgsdWlkLGdpZCxkb250Rm9sbG93KXt2YXIgbm9kZTtpZih0eXBlb2YgcGF0aD09PSJzdHJpbmciKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250Rm9sbG93fSk7bm9kZT1sb29rdXAubm9kZX1lbHNle25vZGU9cGF0aH1pZighbm9kZS5ub2RlX29wcy5zZXRhdHRyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig2Myl9bm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUse3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bjpmdW5jdGlvbihwYXRoLHVpZCxnaWQpe0ZTLmNob3duKHBhdGgsdWlkLGdpZCx0cnVlKX0sZmNob3duOmZ1bmN0aW9uKGZkLHVpZCxnaWQpe3ZhciBzdHJlYW09RlMuZ2V0U3RyZWFtKGZkKTtpZighc3RyZWFtKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig4KX1GUy5jaG93bihzdHJlYW0ubm9kZSx1aWQsZ2lkKX0sdHJ1bmNhdGU6ZnVuY3Rpb24ocGF0aCxsZW4pe2lmKGxlbjwwKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOCl9dmFyIG5vZGU7aWYodHlwZW9mIHBhdGg9PT0ic3RyaW5nIil7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse2ZvbGxvdzp0cnVlfSk7bm9kZT1sb29rdXAubm9kZX1lbHNle25vZGU9cGF0aH1pZighbm9kZS5ub2RlX29wcy5zZXRhdHRyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig2Myl9aWYoRlMuaXNEaXIobm9kZS5tb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMzEpfWlmKCFGUy5pc0ZpbGUobm9kZS5tb2RlKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjgpfXZhciBlcnJDb2RlPUZTLm5vZGVQZXJtaXNzaW9ucyhub2RlLCJ3Iik7aWYoZXJyQ29kZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyQ29kZSl9bm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUse3NpemU6bGVuLHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZTpmdW5jdGlvbihmZCxsZW4pe3ZhciBzdHJlYW09RlMuZ2V0U3RyZWFtKGZkKTtpZighc3RyZWFtKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig4KX1pZigoc3RyZWFtLmZsYWdzJjIwOTcxNTUpPT09MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjgpfUZTLnRydW5jYXRlKHN0cmVhbS5ub2RlLGxlbil9LHV0aW1lOmZ1bmN0aW9uKHBhdGgsYXRpbWUsbXRpbWUpe3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6dHJ1ZX0pO3ZhciBub2RlPWxvb2t1cC5ub2RlO25vZGUubm9kZV9vcHMuc2V0YXR0cihub2RlLHt0aW1lc3RhbXA6TWF0aC5tYXgoYXRpbWUsbXRpbWUpfSl9LG9wZW46ZnVuY3Rpb24ocGF0aCxmbGFncyxtb2RlLGZkX3N0YXJ0LGZkX2VuZCl7aWYocGF0aD09PSIiKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0NCl9ZmxhZ3M9dHlwZW9mIGZsYWdzPT09InN0cmluZyI/RlMubW9kZVN0cmluZ1RvRmxhZ3MoZmxhZ3MpOmZsYWdzO21vZGU9dHlwZW9mIG1vZGU9PT0idW5kZWZpbmVkIj80Mzg6bW9kZTtpZihmbGFncyY2NCl7bW9kZT1tb2RlJjQwOTV8MzI3Njh9ZWxzZXttb2RlPTB9dmFyIG5vZGU7aWYodHlwZW9mIHBhdGg9PT0ib2JqZWN0Iil7bm9kZT1wYXRofWVsc2V7cGF0aD1QQVRILm5vcm1hbGl6ZShwYXRoKTt0cnl7dmFyIGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgse2ZvbGxvdzohKGZsYWdzJjEzMTA3Mil9KTtub2RlPWxvb2t1cC5ub2RlfWNhdGNoKGUpe319dmFyIGNyZWF0ZWQ9ZmFsc2U7aWYoZmxhZ3MmNjQpe2lmKG5vZGUpe2lmKGZsYWdzJjEyOCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjApfX1lbHNle25vZGU9RlMubWtub2QocGF0aCxtb2RlLDApO2NyZWF0ZWQ9dHJ1ZX19aWYoIW5vZGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDQ0KX1pZihGUy5pc0NocmRldihub2RlLm1vZGUpKXtmbGFncyY9fjUxMn1pZihmbGFncyY2NTUzNiYmIUZTLmlzRGlyKG5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDU0KX1pZighY3JlYXRlZCl7dmFyIGVyckNvZGU9RlMubWF5T3Blbihub2RlLGZsYWdzKTtpZihlcnJDb2RlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnJDb2RlKX19aWYoZmxhZ3MmNTEyKXtGUy50cnVuY2F0ZShub2RlLDApfWZsYWdzJj1+KDEyOHw1MTJ8MTMxMDcyKTt2YXIgc3RyZWFtPUZTLmNyZWF0ZVN0cmVhbSh7bm9kZTpub2RlLHBhdGg6RlMuZ2V0UGF0aChub2RlKSxmbGFnczpmbGFncyxzZWVrYWJsZTp0cnVlLHBvc2l0aW9uOjAsc3RyZWFtX29wczpub2RlLnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ZmFsc2V9LGZkX3N0YXJ0LGZkX2VuZCk7aWYoc3RyZWFtLnN0cmVhbV9vcHMub3Blbil7c3RyZWFtLnN0cmVhbV9vcHMub3BlbihzdHJlYW0pfWlmKE1vZHVsZVsibG9nUmVhZEZpbGVzIl0mJiEoZmxhZ3MmMSkpe2lmKCFGUy5yZWFkRmlsZXMpRlMucmVhZEZpbGVzPXt9O2lmKCEocGF0aCBpbiBGUy5yZWFkRmlsZXMpKXtGUy5yZWFkRmlsZXNbcGF0aF09MTtlcnIoIkZTLnRyYWNraW5nRGVsZWdhdGUgZXJyb3Igb24gcmVhZCBmaWxlOiAiK3BhdGgpfX10cnl7aWYoRlMudHJhY2tpbmdEZWxlZ2F0ZVsib25PcGVuRmlsZSJdKXt2YXIgdHJhY2tpbmdGbGFncz0wO2lmKChmbGFncyYyMDk3MTU1KSE9PTEpe3RyYWNraW5nRmxhZ3N8PUZTLnRyYWNraW5nLm9wZW5GbGFncy5SRUFEfWlmKChmbGFncyYyMDk3MTU1KSE9PTApe3RyYWNraW5nRmxhZ3N8PUZTLnRyYWNraW5nLm9wZW5GbGFncy5XUklURX1GUy50cmFja2luZ0RlbGVnYXRlWyJvbk9wZW5GaWxlIl0ocGF0aCx0cmFja2luZ0ZsYWdzKX19Y2F0Y2goZSl7ZXJyKCJGUy50cmFja2luZ0RlbGVnYXRlWydvbk9wZW5GaWxlJ10oJyIrcGF0aCsiJywgZmxhZ3MpIHRocmV3IGFuIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UpfXJldHVybiBzdHJlYW19LGNsb3NlOmZ1bmN0aW9uKHN0cmVhbSl7aWYoRlMuaXNDbG9zZWQoc3RyZWFtKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCl9aWYoc3RyZWFtLmdldGRlbnRzKXN0cmVhbS5nZXRkZW50cz1udWxsO3RyeXtpZihzdHJlYW0uc3RyZWFtX29wcy5jbG9zZSl7c3RyZWFtLnN0cmVhbV9vcHMuY2xvc2Uoc3RyZWFtKX19Y2F0Y2goZSl7dGhyb3cgZX1maW5hbGx5e0ZTLmNsb3NlU3RyZWFtKHN0cmVhbS5mZCl9c3RyZWFtLmZkPW51bGx9LGlzQ2xvc2VkOmZ1bmN0aW9uKHN0cmVhbSl7cmV0dXJuIHN0cmVhbS5mZD09PW51bGx9LGxsc2VlazpmdW5jdGlvbihzdHJlYW0sb2Zmc2V0LHdoZW5jZSl7aWYoRlMuaXNDbG9zZWQoc3RyZWFtKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCl9aWYoIXN0cmVhbS5zZWVrYWJsZXx8IXN0cmVhbS5zdHJlYW1fb3BzLmxsc2Vlayl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNzApfWlmKHdoZW5jZSE9MCYmd2hlbmNlIT0xJiZ3aGVuY2UhPTIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDI4KX1zdHJlYW0ucG9zaXRpb249c3RyZWFtLnN0cmVhbV9vcHMubGxzZWVrKHN0cmVhbSxvZmZzZXQsd2hlbmNlKTtzdHJlYW0udW5nb3R0ZW49W107cmV0dXJuIHN0cmVhbS5wb3NpdGlvbn0scmVhZDpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe2lmKGxlbmd0aDwwfHxwb3NpdGlvbjwwKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOCl9aWYoRlMuaXNDbG9zZWQoc3RyZWFtKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCl9aWYoKHN0cmVhbS5mbGFncyYyMDk3MTU1KT09PTEpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDgpfWlmKEZTLmlzRGlyKHN0cmVhbS5ub2RlLm1vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigzMSl9aWYoIXN0cmVhbS5zdHJlYW1fb3BzLnJlYWQpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDI4KX12YXIgc2Vla2luZz10eXBlb2YgcG9zaXRpb24hPT0idW5kZWZpbmVkIjtpZighc2Vla2luZyl7cG9zaXRpb249c3RyZWFtLnBvc2l0aW9ufWVsc2UgaWYoIXN0cmVhbS5zZWVrYWJsZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNzApfXZhciBieXRlc1JlYWQ9c3RyZWFtLnN0cmVhbV9vcHMucmVhZChzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pO2lmKCFzZWVraW5nKXN0cmVhbS5wb3NpdGlvbis9Ynl0ZXNSZWFkO3JldHVybiBieXRlc1JlYWR9LHdyaXRlOmZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbixjYW5Pd24pe2lmKGxlbmd0aDwwfHxwb3NpdGlvbjwwKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOCl9aWYoRlMuaXNDbG9zZWQoc3RyZWFtKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCl9aWYoKHN0cmVhbS5mbGFncyYyMDk3MTU1KT09PTApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDgpfWlmKEZTLmlzRGlyKHN0cmVhbS5ub2RlLm1vZGUpKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigzMSl9aWYoIXN0cmVhbS5zdHJlYW1fb3BzLndyaXRlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOCl9aWYoc3RyZWFtLnNlZWthYmxlJiZzdHJlYW0uZmxhZ3MmMTAyNCl7RlMubGxzZWVrKHN0cmVhbSwwLDIpfXZhciBzZWVraW5nPXR5cGVvZiBwb3NpdGlvbiE9PSJ1bmRlZmluZWQiO2lmKCFzZWVraW5nKXtwb3NpdGlvbj1zdHJlYW0ucG9zaXRpb259ZWxzZSBpZighc3RyZWFtLnNlZWthYmxlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig3MCl9dmFyIGJ5dGVzV3JpdHRlbj1zdHJlYW0uc3RyZWFtX29wcy53cml0ZShzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24sY2FuT3duKTtpZighc2Vla2luZylzdHJlYW0ucG9zaXRpb24rPWJ5dGVzV3JpdHRlbjt0cnl7aWYoc3RyZWFtLnBhdGgmJkZTLnRyYWNraW5nRGVsZWdhdGVbIm9uV3JpdGVUb0ZpbGUiXSlGUy50cmFja2luZ0RlbGVnYXRlWyJvbldyaXRlVG9GaWxlIl0oc3RyZWFtLnBhdGgpfWNhdGNoKGUpe2VycigiRlMudHJhY2tpbmdEZWxlZ2F0ZVsnb25Xcml0ZVRvRmlsZSddKCciK3N0cmVhbS5wYXRoKyInKSB0aHJldyBhbiBleGNlcHRpb246ICIrZS5tZXNzYWdlKX1yZXR1cm4gYnl0ZXNXcml0dGVufSxhbGxvY2F0ZTpmdW5jdGlvbihzdHJlYW0sb2Zmc2V0LGxlbmd0aCl7aWYoRlMuaXNDbG9zZWQoc3RyZWFtKSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCl9aWYob2Zmc2V0PDB8fGxlbmd0aDw9MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjgpfWlmKChzdHJlYW0uZmxhZ3MmMjA5NzE1NSk9PT0wKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig4KX1pZighRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpJiYhRlMuaXNEaXIoc3RyZWFtLm5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDQzKX1pZighc3RyZWFtLnN0cmVhbV9vcHMuYWxsb2NhdGUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDEzOCl9c3RyZWFtLnN0cmVhbV9vcHMuYWxsb2NhdGUoc3RyZWFtLG9mZnNldCxsZW5ndGgpfSxtbWFwOmZ1bmN0aW9uKHN0cmVhbSxhZGRyZXNzLGxlbmd0aCxwb3NpdGlvbixwcm90LGZsYWdzKXtpZigocHJvdCYyKSE9PTAmJihmbGFncyYyKT09PTAmJihzdHJlYW0uZmxhZ3MmMjA5NzE1NSkhPT0yKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyKX1pZigoc3RyZWFtLmZsYWdzJjIwOTcxNTUpPT09MSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMil9aWYoIXN0cmVhbS5zdHJlYW1fb3BzLm1tYXApe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDQzKX1yZXR1cm4gc3RyZWFtLnN0cmVhbV9vcHMubW1hcChzdHJlYW0sYWRkcmVzcyxsZW5ndGgscG9zaXRpb24scHJvdCxmbGFncyl9LG1zeW5jOmZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxtbWFwRmxhZ3Mpe2lmKCFzdHJlYW18fCFzdHJlYW0uc3RyZWFtX29wcy5tc3luYyl7cmV0dXJuIDB9cmV0dXJuIHN0cmVhbS5zdHJlYW1fb3BzLm1zeW5jKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxtbWFwRmxhZ3MpfSxtdW5tYXA6ZnVuY3Rpb24oc3RyZWFtKXtyZXR1cm4gMH0saW9jdGw6ZnVuY3Rpb24oc3RyZWFtLGNtZCxhcmcpe2lmKCFzdHJlYW0uc3RyZWFtX29wcy5pb2N0bCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoNTkpfXJldHVybiBzdHJlYW0uc3RyZWFtX29wcy5pb2N0bChzdHJlYW0sY21kLGFyZyl9LHJlYWRGaWxlOmZ1bmN0aW9uKHBhdGgsb3B0cyl7b3B0cz1vcHRzfHx7fTtvcHRzLmZsYWdzPW9wdHMuZmxhZ3N8fDA7b3B0cy5lbmNvZGluZz1vcHRzLmVuY29kaW5nfHwiYmluYXJ5IjtpZihvcHRzLmVuY29kaW5nIT09InV0ZjgiJiZvcHRzLmVuY29kaW5nIT09ImJpbmFyeSIpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmNvZGluZyB0eXBlICInK29wdHMuZW5jb2RpbmcrJyInKX12YXIgcmV0O3ZhciBzdHJlYW09RlMub3BlbihwYXRoLG9wdHMuZmxhZ3MpO3ZhciBzdGF0PUZTLnN0YXQocGF0aCk7dmFyIGxlbmd0aD1zdGF0LnNpemU7dmFyIGJ1Zj1uZXcgVWludDhBcnJheShsZW5ndGgpO0ZTLnJlYWQoc3RyZWFtLGJ1ZiwwLGxlbmd0aCwwKTtpZihvcHRzLmVuY29kaW5nPT09InV0ZjgiKXtyZXQ9VVRGOEFycmF5VG9TdHJpbmcoYnVmLDApfWVsc2UgaWYob3B0cy5lbmNvZGluZz09PSJiaW5hcnkiKXtyZXQ9YnVmfUZTLmNsb3NlKHN0cmVhbSk7cmV0dXJuIHJldH0sd3JpdGVGaWxlOmZ1bmN0aW9uKHBhdGgsZGF0YSxvcHRzKXtvcHRzPW9wdHN8fHt9O29wdHMuZmxhZ3M9b3B0cy5mbGFnc3x8NTc3O3ZhciBzdHJlYW09RlMub3BlbihwYXRoLG9wdHMuZmxhZ3Msb3B0cy5tb2RlKTtpZih0eXBlb2YgZGF0YT09PSJzdHJpbmciKXt2YXIgYnVmPW5ldyBVaW50OEFycmF5KGxlbmd0aEJ5dGVzVVRGOChkYXRhKSsxKTt2YXIgYWN0dWFsTnVtQnl0ZXM9c3RyaW5nVG9VVEY4QXJyYXkoZGF0YSxidWYsMCxidWYubGVuZ3RoKTtGUy53cml0ZShzdHJlYW0sYnVmLDAsYWN0dWFsTnVtQnl0ZXMsdW5kZWZpbmVkLG9wdHMuY2FuT3duKX1lbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSl7RlMud3JpdGUoc3RyZWFtLGRhdGEsMCxkYXRhLmJ5dGVMZW5ndGgsdW5kZWZpbmVkLG9wdHMuY2FuT3duKX1lbHNle3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIil9RlMuY2xvc2Uoc3RyZWFtKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIEZTLmN1cnJlbnRQYXRofSxjaGRpcjpmdW5jdGlvbihwYXRoKXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OnRydWV9KTtpZihsb29rdXAubm9kZT09PW51bGwpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDQ0KX1pZighRlMuaXNEaXIobG9va3VwLm5vZGUubW9kZSkpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKDU0KX12YXIgZXJyQ29kZT1GUy5ub2RlUGVybWlzc2lvbnMobG9va3VwLm5vZGUsIngiKTtpZihlcnJDb2RlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnJDb2RlKX1GUy5jdXJyZW50UGF0aD1sb29rdXAucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzOmZ1bmN0aW9uKCl7RlMubWtkaXIoIi90bXAiKTtGUy5ta2RpcigiL2hvbWUiKTtGUy5ta2RpcigiL2hvbWUvd2ViX3VzZXIiKX0sY3JlYXRlRGVmYXVsdERldmljZXM6ZnVuY3Rpb24oKXtGUy5ta2RpcigiL2RldiIpO0ZTLnJlZ2lzdGVyRGV2aWNlKEZTLm1ha2VkZXYoMSwzKSx7cmVhZDpmdW5jdGlvbigpe3JldHVybiAwfSx3cml0ZTpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zKXtyZXR1cm4gbGVuZ3RofX0pO0ZTLm1rZGV2KCIvZGV2L251bGwiLEZTLm1ha2VkZXYoMSwzKSk7VFRZLnJlZ2lzdGVyKEZTLm1ha2VkZXYoNSwwKSxUVFkuZGVmYXVsdF90dHlfb3BzKTtUVFkucmVnaXN0ZXIoRlMubWFrZWRldig2LDApLFRUWS5kZWZhdWx0X3R0eTFfb3BzKTtGUy5ta2RldigiL2Rldi90dHkiLEZTLm1ha2VkZXYoNSwwKSk7RlMubWtkZXYoIi9kZXYvdHR5MSIsRlMubWFrZWRldig2LDApKTt2YXIgcmFuZG9tX2RldmljZT1nZXRSYW5kb21EZXZpY2UoKTtGUy5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHJhbmRvbV9kZXZpY2UpO0ZTLmNyZWF0ZURldmljZSgiL2RldiIsInVyYW5kb20iLHJhbmRvbV9kZXZpY2UpO0ZTLm1rZGlyKCIvZGV2L3NobSIpO0ZTLm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzOmZ1bmN0aW9uKCl7RlMubWtkaXIoIi9wcm9jIik7dmFyIHByb2Nfc2VsZj1GUy5ta2RpcigiL3Byb2Mvc2VsZiIpO0ZTLm1rZGlyKCIvcHJvYy9zZWxmL2ZkIik7RlMubW91bnQoe21vdW50OmZ1bmN0aW9uKCl7dmFyIG5vZGU9RlMuY3JlYXRlTm9kZShwcm9jX3NlbGYsImZkIiwxNjM4NHw1MTEsNzMpO25vZGUubm9kZV9vcHM9e2xvb2t1cDpmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyIGZkPStuYW1lO3ZhciBzdHJlYW09RlMuZ2V0U3RyZWFtKGZkKTtpZighc3RyZWFtKXRocm93IG5ldyBGUy5FcnJub0Vycm9yKDgpO3ZhciByZXQ9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOmZ1bmN0aW9uKCl7cmV0dXJuIHN0cmVhbS5wYXRofX19O3JldC5wYXJlbnQ9cmV0O3JldHVybiByZXR9fTtyZXR1cm4gbm9kZX19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtczpmdW5jdGlvbigpe2lmKE1vZHVsZVsic3RkaW4iXSl7RlMuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLE1vZHVsZVsic3RkaW4iXSl9ZWxzZXtGUy5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKX1pZihNb2R1bGVbInN0ZG91dCJdKXtGUy5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsTW9kdWxlWyJzdGRvdXQiXSl9ZWxzZXtGUy5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0Iil9aWYoTW9kdWxlWyJzdGRlcnIiXSl7RlMuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLE1vZHVsZVsic3RkZXJyIl0pfWVsc2V7RlMuc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKX12YXIgc3RkaW49RlMub3BlbigiL2Rldi9zdGRpbiIsMCk7dmFyIHN0ZG91dD1GUy5vcGVuKCIvZGV2L3N0ZG91dCIsMSk7dmFyIHN0ZGVycj1GUy5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LGVuc3VyZUVycm5vRXJyb3I6ZnVuY3Rpb24oKXtpZihGUy5FcnJub0Vycm9yKXJldHVybjtGUy5FcnJub0Vycm9yPWZ1bmN0aW9uIEVycm5vRXJyb3IoZXJybm8sbm9kZSl7dGhpcy5ub2RlPW5vZGU7dGhpcy5zZXRFcnJubz1mdW5jdGlvbihlcnJubyl7dGhpcy5lcnJubz1lcnJub307dGhpcy5zZXRFcnJubyhlcnJubyk7dGhpcy5tZXNzYWdlPSJGUyBlcnJvciJ9O0ZTLkVycm5vRXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcjtGUy5FcnJub0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GUy5FcnJub0Vycm9yO1s0NF0uZm9yRWFjaChmdW5jdGlvbihjb2RlKXtGUy5nZW5lcmljRXJyb3JzW2NvZGVdPW5ldyBGUy5FcnJub0Vycm9yKGNvZGUpO0ZTLmdlbmVyaWNFcnJvcnNbY29kZV0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSl9LHN0YXRpY0luaXQ6ZnVuY3Rpb24oKXtGUy5lbnN1cmVFcnJub0Vycm9yKCk7RlMubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KTtGUy5tb3VudChNRU1GUyx7fSwiLyIpO0ZTLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpO0ZTLmNyZWF0ZURlZmF1bHREZXZpY2VzKCk7RlMuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCk7RlMuZmlsZXN5c3RlbXM9eyJNRU1GUyI6TUVNRlMsIklEQkZTIjpJREJGU319LGluaXQ6ZnVuY3Rpb24oaW5wdXQsb3V0cHV0LGVycm9yKXtGUy5pbml0LmluaXRpYWxpemVkPXRydWU7RlMuZW5zdXJlRXJybm9FcnJvcigpO01vZHVsZVsic3RkaW4iXT1pbnB1dHx8TW9kdWxlWyJzdGRpbiJdO01vZHVsZVsic3Rkb3V0Il09b3V0cHV0fHxNb2R1bGVbInN0ZG91dCJdO01vZHVsZVsic3RkZXJyIl09ZXJyb3J8fE1vZHVsZVsic3RkZXJyIl07RlMuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl9LHF1aXQ6ZnVuY3Rpb24oKXtGUy5pbml0LmluaXRpYWxpemVkPWZhbHNlO3ZhciBmZmx1c2g9TW9kdWxlWyJfZmZsdXNoIl07aWYoZmZsdXNoKWZmbHVzaCgwKTtmb3IodmFyIGk9MDtpPEZTLnN0cmVhbXMubGVuZ3RoO2krKyl7dmFyIHN0cmVhbT1GUy5zdHJlYW1zW2ldO2lmKCFzdHJlYW0pe2NvbnRpbnVlfUZTLmNsb3NlKHN0cmVhbSl9fSxnZXRNb2RlOmZ1bmN0aW9uKGNhblJlYWQsY2FuV3JpdGUpe3ZhciBtb2RlPTA7aWYoY2FuUmVhZCltb2RlfD0yOTJ8NzM7aWYoY2FuV3JpdGUpbW9kZXw9MTQ2O3JldHVybiBtb2RlfSxmaW5kT2JqZWN0OmZ1bmN0aW9uKHBhdGgsZG9udFJlc29sdmVMYXN0TGluayl7dmFyIHJldD1GUy5hbmFseXplUGF0aChwYXRoLGRvbnRSZXNvbHZlTGFzdExpbmspO2lmKHJldC5leGlzdHMpe3JldHVybiByZXQub2JqZWN0fWVsc2V7cmV0dXJuIG51bGx9fSxhbmFseXplUGF0aDpmdW5jdGlvbihwYXRoLGRvbnRSZXNvbHZlTGFzdExpbmspe3RyeXt2YXIgbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250UmVzb2x2ZUxhc3RMaW5rfSk7cGF0aD1sb29rdXAucGF0aH1jYXRjaChlKXt9dmFyIHJldD17aXNSb290OmZhbHNlLGV4aXN0czpmYWxzZSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOmZhbHNlLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtwYXJlbnQ6dHJ1ZX0pO3JldC5wYXJlbnRFeGlzdHM9dHJ1ZTtyZXQucGFyZW50UGF0aD1sb29rdXAucGF0aDtyZXQucGFyZW50T2JqZWN0PWxvb2t1cC5ub2RlO3JldC5uYW1lPVBBVEguYmFzZW5hbWUocGF0aCk7bG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCx7Zm9sbG93OiFkb250UmVzb2x2ZUxhc3RMaW5rfSk7cmV0LmV4aXN0cz10cnVlO3JldC5wYXRoPWxvb2t1cC5wYXRoO3JldC5vYmplY3Q9bG9va3VwLm5vZGU7cmV0Lm5hbWU9bG9va3VwLm5vZGUubmFtZTtyZXQuaXNSb290PWxvb2t1cC5wYXRoPT09Ii8ifWNhdGNoKGUpe3JldC5lcnJvcj1lLmVycm5vfXJldHVybiByZXR9LGNyZWF0ZVBhdGg6ZnVuY3Rpb24ocGFyZW50LHBhdGgsY2FuUmVhZCxjYW5Xcml0ZSl7cGFyZW50PXR5cGVvZiBwYXJlbnQ9PT0ic3RyaW5nIj9wYXJlbnQ6RlMuZ2V0UGF0aChwYXJlbnQpO3ZhciBwYXJ0cz1wYXRoLnNwbGl0KCIvIikucmV2ZXJzZSgpO3doaWxlKHBhcnRzLmxlbmd0aCl7dmFyIHBhcnQ9cGFydHMucG9wKCk7aWYoIXBhcnQpY29udGludWU7dmFyIGN1cnJlbnQ9UEFUSC5qb2luMihwYXJlbnQscGFydCk7dHJ5e0ZTLm1rZGlyKGN1cnJlbnQpfWNhdGNoKGUpe31wYXJlbnQ9Y3VycmVudH1yZXR1cm4gY3VycmVudH0sY3JlYXRlRmlsZTpmdW5jdGlvbihwYXJlbnQsbmFtZSxwcm9wZXJ0aWVzLGNhblJlYWQsY2FuV3JpdGUpe3ZhciBwYXRoPVBBVEguam9pbjIodHlwZW9mIHBhcmVudD09PSJzdHJpbmciP3BhcmVudDpGUy5nZXRQYXRoKHBhcmVudCksbmFtZSk7dmFyIG1vZGU9RlMuZ2V0TW9kZShjYW5SZWFkLGNhbldyaXRlKTtyZXR1cm4gRlMuY3JlYXRlKHBhdGgsbW9kZSl9LGNyZWF0ZURhdGFGaWxlOmZ1bmN0aW9uKHBhcmVudCxuYW1lLGRhdGEsY2FuUmVhZCxjYW5Xcml0ZSxjYW5Pd24pe3ZhciBwYXRoPW5hbWU/UEFUSC5qb2luMih0eXBlb2YgcGFyZW50PT09InN0cmluZyI/cGFyZW50OkZTLmdldFBhdGgocGFyZW50KSxuYW1lKTpwYXJlbnQ7dmFyIG1vZGU9RlMuZ2V0TW9kZShjYW5SZWFkLGNhbldyaXRlKTt2YXIgbm9kZT1GUy5jcmVhdGUocGF0aCxtb2RlKTtpZihkYXRhKXtpZih0eXBlb2YgZGF0YT09PSJzdHJpbmciKXt2YXIgYXJyPW5ldyBBcnJheShkYXRhLmxlbmd0aCk7Zm9yKHZhciBpPTAsbGVuPWRhdGEubGVuZ3RoO2k8bGVuOysraSlhcnJbaV09ZGF0YS5jaGFyQ29kZUF0KGkpO2RhdGE9YXJyfUZTLmNobW9kKG5vZGUsbW9kZXwxNDYpO3ZhciBzdHJlYW09RlMub3Blbihub2RlLDU3Nyk7RlMud3JpdGUoc3RyZWFtLGRhdGEsMCxkYXRhLmxlbmd0aCwwLGNhbk93bik7RlMuY2xvc2Uoc3RyZWFtKTtGUy5jaG1vZChub2RlLG1vZGUpfXJldHVybiBub2RlfSxjcmVhdGVEZXZpY2U6ZnVuY3Rpb24ocGFyZW50LG5hbWUsaW5wdXQsb3V0cHV0KXt2YXIgcGF0aD1QQVRILmpvaW4yKHR5cGVvZiBwYXJlbnQ9PT0ic3RyaW5nIj9wYXJlbnQ6RlMuZ2V0UGF0aChwYXJlbnQpLG5hbWUpO3ZhciBtb2RlPUZTLmdldE1vZGUoISFpbnB1dCwhIW91dHB1dCk7aWYoIUZTLmNyZWF0ZURldmljZS5tYWpvcilGUy5jcmVhdGVEZXZpY2UubWFqb3I9NjQ7dmFyIGRldj1GUy5tYWtlZGV2KEZTLmNyZWF0ZURldmljZS5tYWpvcisrLDApO0ZTLnJlZ2lzdGVyRGV2aWNlKGRldix7b3BlbjpmdW5jdGlvbihzdHJlYW0pe3N0cmVhbS5zZWVrYWJsZT1mYWxzZX0sY2xvc2U6ZnVuY3Rpb24oc3RyZWFtKXtpZihvdXRwdXQmJm91dHB1dC5idWZmZXImJm91dHB1dC5idWZmZXIubGVuZ3RoKXtvdXRwdXQoMTApfX0scmVhZDpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zKXt2YXIgYnl0ZXNSZWFkPTA7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXt2YXIgcmVzdWx0O3RyeXtyZXN1bHQ9aW5wdXQoKX1jYXRjaChlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOSl9aWYocmVzdWx0PT09dW5kZWZpbmVkJiZieXRlc1JlYWQ9PT0wKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig2KX1pZihyZXN1bHQ9PT1udWxsfHxyZXN1bHQ9PT11bmRlZmluZWQpYnJlYWs7Ynl0ZXNSZWFkKys7YnVmZmVyW29mZnNldCtpXT1yZXN1bHR9aWYoYnl0ZXNSZWFkKXtzdHJlYW0ubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKX1yZXR1cm4gYnl0ZXNSZWFkfSx3cml0ZTpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zKXtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3RyeXtvdXRwdXQoYnVmZmVyW29mZnNldCtpXSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoMjkpfX1pZihsZW5ndGgpe3N0cmVhbS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpfXJldHVybiBpfX0pO3JldHVybiBGUy5ta2RldihwYXRoLG1vZGUsZGV2KX0sZm9yY2VMb2FkRmlsZTpmdW5jdGlvbihvYmope2lmKG9iai5pc0RldmljZXx8b2JqLmlzRm9sZGVyfHxvYmoubGlua3x8b2JqLmNvbnRlbnRzKXJldHVybiB0cnVlO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCE9PSJ1bmRlZmluZWQiKXt0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpfWVsc2UgaWYocmVhZF8pe3RyeXtvYmouY29udGVudHM9aW50QXJyYXlGcm9tU3RyaW5nKHJlYWRfKG9iai51cmwpLHRydWUpO29iai51c2VkQnl0ZXM9b2JqLmNvbnRlbnRzLmxlbmd0aH1jYXRjaChlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyOSl9fWVsc2V7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKX19LGNyZWF0ZUxhenlGaWxlOmZ1bmN0aW9uKHBhcmVudCxuYW1lLHVybCxjYW5SZWFkLGNhbldyaXRlKXtmdW5jdGlvbiBMYXp5VWludDhBcnJheSgpe3RoaXMubGVuZ3RoS25vd249ZmFsc2U7dGhpcy5jaHVua3M9W119TGF6eVVpbnQ4QXJyYXkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBMYXp5VWludDhBcnJheV9nZXQoaWR4KXtpZihpZHg+dGhpcy5sZW5ndGgtMXx8aWR4PDApe3JldHVybiB1bmRlZmluZWR9dmFyIGNodW5rT2Zmc2V0PWlkeCV0aGlzLmNodW5rU2l6ZTt2YXIgY2h1bmtOdW09aWR4L3RoaXMuY2h1bmtTaXplfDA7cmV0dXJuIHRoaXMuZ2V0dGVyKGNodW5rTnVtKVtjaHVua09mZnNldF19O0xhenlVaW50OEFycmF5LnByb3RvdHlwZS5zZXREYXRhR2V0dGVyPWZ1bmN0aW9uIExhenlVaW50OEFycmF5X3NldERhdGFHZXR0ZXIoZ2V0dGVyKXt0aGlzLmdldHRlcj1nZXR0ZXJ9O0xhenlVaW50OEFycmF5LnByb3RvdHlwZS5jYWNoZUxlbmd0aD1mdW5jdGlvbiBMYXp5VWludDhBcnJheV9jYWNoZUxlbmd0aCgpe3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKCJIRUFEIix1cmwsZmFsc2UpO3hoci5zZW5kKG51bGwpO2lmKCEoeGhyLnN0YXR1cz49MjAwJiZ4aHIuc3RhdHVzPDMwMHx8eGhyLnN0YXR1cz09PTMwNCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrdXJsKyIuIFN0YXR1czogIit4aHIuc3RhdHVzKTt2YXIgZGF0YWxlbmd0aD1OdW1iZXIoeGhyLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKTt2YXIgaGVhZGVyO3ZhciBoYXNCeXRlU2VydmluZz0oaGVhZGVyPXhoci5nZXRSZXNwb25zZUhlYWRlcigiQWNjZXB0LVJhbmdlcyIpKSYmaGVhZGVyPT09ImJ5dGVzIjt2YXIgdXNlc0d6aXA9KGhlYWRlcj14aHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciKSkmJmhlYWRlcj09PSJnemlwIjt2YXIgY2h1bmtTaXplPTEwMjQqMTAyNDtpZighaGFzQnl0ZVNlcnZpbmcpY2h1bmtTaXplPWRhdGFsZW5ndGg7dmFyIGRvWEhSPWZ1bmN0aW9uKGZyb20sdG8pe2lmKGZyb20+dG8pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK2Zyb20rIiwgIit0bysiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIik7aWYodG8+ZGF0YWxlbmd0aC0xKXRocm93IG5ldyBFcnJvcigib25seSAiK2RhdGFsZW5ndGgrIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIHhocj1uZXcgWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oIkdFVCIsdXJsLGZhbHNlKTtpZihkYXRhbGVuZ3RoIT09Y2h1bmtTaXplKXhoci5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrZnJvbSsiLSIrdG8pO2lmKHR5cGVvZiBVaW50OEFycmF5IT0idW5kZWZpbmVkIil4aHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciI7aWYoeGhyLm92ZXJyaWRlTWltZVR5cGUpe3hoci5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIil9eGhyLnNlbmQobnVsbCk7aWYoISh4aHIuc3RhdHVzPj0yMDAmJnhoci5zdGF0dXM8MzAwfHx4aHIuc3RhdHVzPT09MzA0KSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIit1cmwrIi4gU3RhdHVzOiAiK3hoci5zdGF0dXMpO2lmKHhoci5yZXNwb25zZSE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZXx8W10pfWVsc2V7cmV0dXJuIGludEFycmF5RnJvbVN0cmluZyh4aHIucmVzcG9uc2VUZXh0fHwiIix0cnVlKX19O3ZhciBsYXp5QXJyYXk9dGhpcztsYXp5QXJyYXkuc2V0RGF0YUdldHRlcihmdW5jdGlvbihjaHVua051bSl7dmFyIHN0YXJ0PWNodW5rTnVtKmNodW5rU2l6ZTt2YXIgZW5kPShjaHVua051bSsxKSpjaHVua1NpemUtMTtlbmQ9TWF0aC5taW4oZW5kLGRhdGFsZW5ndGgtMSk7aWYodHlwZW9mIGxhenlBcnJheS5jaHVua3NbY2h1bmtOdW1dPT09InVuZGVmaW5lZCIpe2xhenlBcnJheS5jaHVua3NbY2h1bmtOdW1dPWRvWEhSKHN0YXJ0LGVuZCl9aWYodHlwZW9mIGxhenlBcnJheS5jaHVua3NbY2h1bmtOdW1dPT09InVuZGVmaW5lZCIpdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIGxhenlBcnJheS5jaHVua3NbY2h1bmtOdW1dfSk7aWYodXNlc0d6aXB8fCFkYXRhbGVuZ3RoKXtjaHVua1NpemU9ZGF0YWxlbmd0aD0xO2RhdGFsZW5ndGg9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoO2NodW5rU2l6ZT1kYXRhbGVuZ3RoO291dCgiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIil9dGhpcy5fbGVuZ3RoPWRhdGFsZW5ndGg7dGhpcy5fY2h1bmtTaXplPWNodW5rU2l6ZTt0aGlzLmxlbmd0aEtub3duPXRydWV9O2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCE9PSJ1bmRlZmluZWQiKXtpZighRU5WSVJPTk1FTlRfSVNfV09SS0VSKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBsYXp5QXJyYXk9bmV3IExhenlVaW50OEFycmF5O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlBcnJheSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5sZW5ndGhLbm93bil7dGhpcy5jYWNoZUxlbmd0aCgpfXJldHVybiB0aGlzLl9sZW5ndGh9fSxjaHVua1NpemU6e2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmxlbmd0aEtub3duKXt0aGlzLmNhY2hlTGVuZ3RoKCl9cmV0dXJuIHRoaXMuX2NodW5rU2l6ZX19fSk7dmFyIHByb3BlcnRpZXM9e2lzRGV2aWNlOmZhbHNlLGNvbnRlbnRzOmxhenlBcnJheX19ZWxzZXt2YXIgcHJvcGVydGllcz17aXNEZXZpY2U6ZmFsc2UsdXJsOnVybH19dmFyIG5vZGU9RlMuY3JlYXRlRmlsZShwYXJlbnQsbmFtZSxwcm9wZXJ0aWVzLGNhblJlYWQsY2FuV3JpdGUpO2lmKHByb3BlcnRpZXMuY29udGVudHMpe25vZGUuY29udGVudHM9cHJvcGVydGllcy5jb250ZW50c31lbHNlIGlmKHByb3BlcnRpZXMudXJsKXtub2RlLmNvbnRlbnRzPW51bGw7bm9kZS51cmw9cHJvcGVydGllcy51cmx9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobm9kZSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBzdHJlYW1fb3BzPXt9O3ZhciBrZXlzPU9iamVjdC5rZXlzKG5vZGUuc3RyZWFtX29wcyk7a2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7dmFyIGZuPW5vZGUuc3RyZWFtX29wc1trZXldO3N0cmVhbV9vcHNba2V5XT1mdW5jdGlvbiBmb3JjZUxvYWRMYXp5RmlsZSgpe0ZTLmZvcmNlTG9hZEZpbGUobm9kZSk7cmV0dXJuIGZuLmFwcGx5KG51bGwsYXJndW1lbnRzKX19KTtzdHJlYW1fb3BzLnJlYWQ9ZnVuY3Rpb24gc3RyZWFtX29wc19yZWFkKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbil7RlMuZm9yY2VMb2FkRmlsZShub2RlKTt2YXIgY29udGVudHM9c3RyZWFtLm5vZGUuY29udGVudHM7aWYocG9zaXRpb24+PWNvbnRlbnRzLmxlbmd0aClyZXR1cm4gMDt2YXIgc2l6ZT1NYXRoLm1pbihjb250ZW50cy5sZW5ndGgtcG9zaXRpb24sbGVuZ3RoKTtpZihjb250ZW50cy5zbGljZSl7Zm9yKHZhciBpPTA7aTxzaXplO2krKyl7YnVmZmVyW29mZnNldCtpXT1jb250ZW50c1twb3NpdGlvbitpXX19ZWxzZXtmb3IodmFyIGk9MDtpPHNpemU7aSsrKXtidWZmZXJbb2Zmc2V0K2ldPWNvbnRlbnRzLmdldChwb3NpdGlvbitpKX19cmV0dXJuIHNpemV9O25vZGUuc3RyZWFtX29wcz1zdHJlYW1fb3BzO3JldHVybiBub2RlfSxjcmVhdGVQcmVsb2FkZWRGaWxlOmZ1bmN0aW9uKHBhcmVudCxuYW1lLHVybCxjYW5SZWFkLGNhbldyaXRlLG9ubG9hZCxvbmVycm9yLGRvbnRDcmVhdGVGaWxlLGNhbk93bixwcmVGaW5pc2gpe0Jyb3dzZXIuaW5pdCgpO3ZhciBmdWxsbmFtZT1uYW1lP1BBVEhfRlMucmVzb2x2ZShQQVRILmpvaW4yKHBhcmVudCxuYW1lKSk6cGFyZW50O3ZhciBkZXA9Z2V0VW5pcXVlUnVuRGVwZW5kZW5jeSgiY3AgIitmdWxsbmFtZSk7ZnVuY3Rpb24gcHJvY2Vzc0RhdGEoYnl0ZUFycmF5KXtmdW5jdGlvbiBmaW5pc2goYnl0ZUFycmF5KXtpZihwcmVGaW5pc2gpcHJlRmluaXNoKCk7aWYoIWRvbnRDcmVhdGVGaWxlKXtGUy5jcmVhdGVEYXRhRmlsZShwYXJlbnQsbmFtZSxieXRlQXJyYXksY2FuUmVhZCxjYW5Xcml0ZSxjYW5Pd24pfWlmKG9ubG9hZClvbmxvYWQoKTtyZW1vdmVSdW5EZXBlbmRlbmN5KGRlcCl9dmFyIGhhbmRsZWQ9ZmFsc2U7TW9kdWxlWyJwcmVsb2FkUGx1Z2lucyJdLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKXtpZihoYW5kbGVkKXJldHVybjtpZihwbHVnaW5bImNhbkhhbmRsZSJdKGZ1bGxuYW1lKSl7cGx1Z2luWyJoYW5kbGUiXShieXRlQXJyYXksZnVsbG5hbWUsZmluaXNoLGZ1bmN0aW9uKCl7aWYob25lcnJvcilvbmVycm9yKCk7cmVtb3ZlUnVuRGVwZW5kZW5jeShkZXApfSk7aGFuZGxlZD10cnVlfX0pO2lmKCFoYW5kbGVkKWZpbmlzaChieXRlQXJyYXkpfWFkZFJ1bkRlcGVuZGVuY3koZGVwKTtpZih0eXBlb2YgdXJsPT0ic3RyaW5nIil7QnJvd3Nlci5hc3luY0xvYWQodXJsLGZ1bmN0aW9uKGJ5dGVBcnJheSl7cHJvY2Vzc0RhdGEoYnl0ZUFycmF5KX0sb25lcnJvcil9ZWxzZXtwcm9jZXNzRGF0YSh1cmwpfX0saW5kZXhlZERCOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQn0sREJfTkFNRTpmdW5jdGlvbigpe3JldHVybiJFTV9GU18iK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZX0sREJfVkVSU0lPTjoyMCxEQl9TVE9SRV9OQU1FOiJGSUxFX0RBVEEiLHNhdmVGaWxlc1RvREI6ZnVuY3Rpb24ocGF0aHMsb25sb2FkLG9uZXJyb3Ipe29ubG9hZD1vbmxvYWR8fGZ1bmN0aW9uKCl7fTtvbmVycm9yPW9uZXJyb3J8fGZ1bmN0aW9uKCl7fTt2YXIgaW5kZXhlZERCPUZTLmluZGV4ZWREQigpO3RyeXt2YXIgb3BlblJlcXVlc3Q9aW5kZXhlZERCLm9wZW4oRlMuREJfTkFNRSgpLEZTLkRCX1ZFUlNJT04pfWNhdGNoKGUpe3JldHVybiBvbmVycm9yKGUpfW9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbiBvcGVuUmVxdWVzdF9vbnVwZ3JhZGVuZWVkZWQoKXtvdXQoImNyZWF0aW5nIGRiIik7dmFyIGRiPW9wZW5SZXF1ZXN0LnJlc3VsdDtkYi5jcmVhdGVPYmplY3RTdG9yZShGUy5EQl9TVE9SRV9OQU1FKX07b3BlblJlcXVlc3Qub25zdWNjZXNzPWZ1bmN0aW9uIG9wZW5SZXF1ZXN0X29uc3VjY2Vzcygpe3ZhciBkYj1vcGVuUmVxdWVzdC5yZXN1bHQ7dmFyIHRyYW5zYWN0aW9uPWRiLnRyYW5zYWN0aW9uKFtGUy5EQl9TVE9SRV9OQU1FXSwicmVhZHdyaXRlIik7dmFyIGZpbGVzPXRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKEZTLkRCX1NUT1JFX05BTUUpO3ZhciBvaz0wLGZhaWw9MCx0b3RhbD1wYXRocy5sZW5ndGg7ZnVuY3Rpb24gZmluaXNoKCl7aWYoZmFpbD09MClvbmxvYWQoKTtlbHNlIG9uZXJyb3IoKX1wYXRocy5mb3JFYWNoKGZ1bmN0aW9uKHBhdGgpe3ZhciBwdXRSZXF1ZXN0PWZpbGVzLnB1dChGUy5hbmFseXplUGF0aChwYXRoKS5vYmplY3QuY29udGVudHMscGF0aCk7cHV0UmVxdWVzdC5vbnN1Y2Nlc3M9ZnVuY3Rpb24gcHV0UmVxdWVzdF9vbnN1Y2Nlc3MoKXtvaysrO2lmKG9rK2ZhaWw9PXRvdGFsKWZpbmlzaCgpfTtwdXRSZXF1ZXN0Lm9uZXJyb3I9ZnVuY3Rpb24gcHV0UmVxdWVzdF9vbmVycm9yKCl7ZmFpbCsrO2lmKG9rK2ZhaWw9PXRvdGFsKWZpbmlzaCgpfX0pO3RyYW5zYWN0aW9uLm9uZXJyb3I9b25lcnJvcn07b3BlblJlcXVlc3Qub25lcnJvcj1vbmVycm9yfSxsb2FkRmlsZXNGcm9tREI6ZnVuY3Rpb24ocGF0aHMsb25sb2FkLG9uZXJyb3Ipe29ubG9hZD1vbmxvYWR8fGZ1bmN0aW9uKCl7fTtvbmVycm9yPW9uZXJyb3J8fGZ1bmN0aW9uKCl7fTt2YXIgaW5kZXhlZERCPUZTLmluZGV4ZWREQigpO3RyeXt2YXIgb3BlblJlcXVlc3Q9aW5kZXhlZERCLm9wZW4oRlMuREJfTkFNRSgpLEZTLkRCX1ZFUlNJT04pfWNhdGNoKGUpe3JldHVybiBvbmVycm9yKGUpfW9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZD1vbmVycm9yO29wZW5SZXF1ZXN0Lm9uc3VjY2Vzcz1mdW5jdGlvbiBvcGVuUmVxdWVzdF9vbnN1Y2Nlc3MoKXt2YXIgZGI9b3BlblJlcXVlc3QucmVzdWx0O3RyeXt2YXIgdHJhbnNhY3Rpb249ZGIudHJhbnNhY3Rpb24oW0ZTLkRCX1NUT1JFX05BTUVdLCJyZWFkb25seSIpfWNhdGNoKGUpe29uZXJyb3IoZSk7cmV0dXJufXZhciBmaWxlcz10cmFuc2FjdGlvbi5vYmplY3RTdG9yZShGUy5EQl9TVE9SRV9OQU1FKTt2YXIgb2s9MCxmYWlsPTAsdG90YWw9cGF0aHMubGVuZ3RoO2Z1bmN0aW9uIGZpbmlzaCgpe2lmKGZhaWw9PTApb25sb2FkKCk7ZWxzZSBvbmVycm9yKCl9cGF0aHMuZm9yRWFjaChmdW5jdGlvbihwYXRoKXt2YXIgZ2V0UmVxdWVzdD1maWxlcy5nZXQocGF0aCk7Z2V0UmVxdWVzdC5vbnN1Y2Nlc3M9ZnVuY3Rpb24gZ2V0UmVxdWVzdF9vbnN1Y2Nlc3MoKXtpZihGUy5hbmFseXplUGF0aChwYXRoKS5leGlzdHMpe0ZTLnVubGluayhwYXRoKX1GUy5jcmVhdGVEYXRhRmlsZShQQVRILmRpcm5hbWUocGF0aCksUEFUSC5iYXNlbmFtZShwYXRoKSxnZXRSZXF1ZXN0LnJlc3VsdCx0cnVlLHRydWUsdHJ1ZSk7b2srKztpZihvaytmYWlsPT10b3RhbClmaW5pc2goKX07Z2V0UmVxdWVzdC5vbmVycm9yPWZ1bmN0aW9uIGdldFJlcXVlc3Rfb25lcnJvcigpe2ZhaWwrKztpZihvaytmYWlsPT10b3RhbClmaW5pc2goKX19KTt0cmFuc2FjdGlvbi5vbmVycm9yPW9uZXJyb3J9O29wZW5SZXF1ZXN0Lm9uZXJyb3I9b25lcnJvcn19O3ZhciBTWVNDQUxMUz17bWFwcGluZ3M6e30sREVGQVVMVF9QT0xMTUFTSzo1LHVtYXNrOjUxMSxjYWxjdWxhdGVBdDpmdW5jdGlvbihkaXJmZCxwYXRoLGFsbG93RW1wdHkpe2lmKHBhdGhbMF09PT0iLyIpe3JldHVybiBwYXRofXZhciBkaXI7aWYoZGlyZmQ9PT0tMTAwKXtkaXI9RlMuY3dkKCl9ZWxzZXt2YXIgZGlyc3RyZWFtPUZTLmdldFN0cmVhbShkaXJmZCk7aWYoIWRpcnN0cmVhbSl0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig4KTtkaXI9ZGlyc3RyZWFtLnBhdGh9aWYocGF0aC5sZW5ndGg9PTApe2lmKCFhbGxvd0VtcHR5KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig0NCl9cmV0dXJuIGRpcn1yZXR1cm4gUEFUSC5qb2luMihkaXIscGF0aCl9LGRvU3RhdDpmdW5jdGlvbihmdW5jLHBhdGgsYnVmKXt0cnl7dmFyIHN0YXQ9ZnVuYyhwYXRoKX1jYXRjaChlKXtpZihlJiZlLm5vZGUmJlBBVEgubm9ybWFsaXplKHBhdGgpIT09UEFUSC5ub3JtYWxpemUoRlMuZ2V0UGF0aChlLm5vZGUpKSl7cmV0dXJuLTU0fXRocm93IGV9SEVBUDMyW2J1Zj4+Ml09c3RhdC5kZXY7SEVBUDMyW2J1Zis0Pj4yXT0wO0hFQVAzMltidWYrOD4+Ml09c3RhdC5pbm87SEVBUDMyW2J1ZisxMj4+Ml09c3RhdC5tb2RlO0hFQVAzMltidWYrMTY+PjJdPXN0YXQubmxpbms7SEVBUDMyW2J1ZisyMD4+Ml09c3RhdC51aWQ7SEVBUDMyW2J1ZisyND4+Ml09c3RhdC5naWQ7SEVBUDMyW2J1ZisyOD4+Ml09c3RhdC5yZGV2O0hFQVAzMltidWYrMzI+PjJdPTA7dGVtcEk2ND1bc3RhdC5zaXplPj4+MCwodGVtcERvdWJsZT1zdGF0LnNpemUsK01hdGguYWJzKHRlbXBEb3VibGUpPj0xP3RlbXBEb3VibGU+MD8oTWF0aC5taW4oK01hdGguZmxvb3IodGVtcERvdWJsZS80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KXwwKT4+PjA6fn4rTWF0aC5jZWlsKCh0ZW1wRG91YmxlLSsofn50ZW1wRG91YmxlPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sSEVBUDMyW2J1Zis0MD4+Ml09dGVtcEk2NFswXSxIRUFQMzJbYnVmKzQ0Pj4yXT10ZW1wSTY0WzFdO0hFQVAzMltidWYrNDg+PjJdPTQwOTY7SEVBUDMyW2J1Zis1Mj4+Ml09c3RhdC5ibG9ja3M7SEVBUDMyW2J1Zis1Nj4+Ml09c3RhdC5hdGltZS5nZXRUaW1lKCkvMWUzfDA7SEVBUDMyW2J1Zis2MD4+Ml09MDtIRUFQMzJbYnVmKzY0Pj4yXT1zdGF0Lm10aW1lLmdldFRpbWUoKS8xZTN8MDtIRUFQMzJbYnVmKzY4Pj4yXT0wO0hFQVAzMltidWYrNzI+PjJdPXN0YXQuY3RpbWUuZ2V0VGltZSgpLzFlM3wwO0hFQVAzMltidWYrNzY+PjJdPTA7dGVtcEk2ND1bc3RhdC5pbm8+Pj4wLCh0ZW1wRG91YmxlPXN0YXQuaW5vLCtNYXRoLmFicyh0ZW1wRG91YmxlKT49MT90ZW1wRG91YmxlPjA/KE1hdGgubWluKCtNYXRoLmZsb29yKHRlbXBEb3VibGUvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSl8MCk+Pj4wOn5+K01hdGguY2VpbCgodGVtcERvdWJsZS0rKH5+dGVtcERvdWJsZT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEhFQVAzMltidWYrODA+PjJdPXRlbXBJNjRbMF0sSEVBUDMyW2J1Zis4ND4+Ml09dGVtcEk2NFsxXTtyZXR1cm4gMH0sZG9Nc3luYzpmdW5jdGlvbihhZGRyLHN0cmVhbSxsZW4sZmxhZ3Msb2Zmc2V0KXt2YXIgYnVmZmVyPUhFQVBVOC5zbGljZShhZGRyLGFkZHIrbGVuKTtGUy5tc3luYyhzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW4sZmxhZ3MpfSxkb01rZGlyOmZ1bmN0aW9uKHBhdGgsbW9kZSl7cGF0aD1QQVRILm5vcm1hbGl6ZShwYXRoKTtpZihwYXRoW3BhdGgubGVuZ3RoLTFdPT09Ii8iKXBhdGg9cGF0aC5zdWJzdHIoMCxwYXRoLmxlbmd0aC0xKTtGUy5ta2RpcihwYXRoLG1vZGUsMCk7cmV0dXJuIDB9LGRvTWtub2Q6ZnVuY3Rpb24ocGF0aCxtb2RlLGRldil7c3dpdGNoKG1vZGUmNjE0NDApe2Nhc2UgMzI3Njg6Y2FzZSA4MTkyOmNhc2UgMjQ1NzY6Y2FzZSA0MDk2OmNhc2UgNDkxNTI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4tMjh9RlMubWtub2QocGF0aCxtb2RlLGRldik7cmV0dXJuIDB9LGRvUmVhZGxpbms6ZnVuY3Rpb24ocGF0aCxidWYsYnVmc2l6ZSl7aWYoYnVmc2l6ZTw9MClyZXR1cm4tMjg7dmFyIHJldD1GUy5yZWFkbGluayhwYXRoKTt2YXIgbGVuPU1hdGgubWluKGJ1ZnNpemUsbGVuZ3RoQnl0ZXNVVEY4KHJldCkpO3ZhciBlbmRDaGFyPUhFQVA4W2J1ZitsZW5dO3N0cmluZ1RvVVRGOChyZXQsYnVmLGJ1ZnNpemUrMSk7SEVBUDhbYnVmK2xlbl09ZW5kQ2hhcjtyZXR1cm4gbGVufSxkb0FjY2VzczpmdW5jdGlvbihwYXRoLGFtb2RlKXtpZihhbW9kZSZ+Nyl7cmV0dXJuLTI4fXZhciBub2RlO3ZhciBsb29rdXA9RlMubG9va3VwUGF0aChwYXRoLHtmb2xsb3c6dHJ1ZX0pO25vZGU9bG9va3VwLm5vZGU7aWYoIW5vZGUpe3JldHVybi00NH12YXIgcGVybXM9IiI7aWYoYW1vZGUmNClwZXJtcys9InIiO2lmKGFtb2RlJjIpcGVybXMrPSJ3IjtpZihhbW9kZSYxKXBlcm1zKz0ieCI7aWYocGVybXMmJkZTLm5vZGVQZXJtaXNzaW9ucyhub2RlLHBlcm1zKSl7cmV0dXJuLTJ9cmV0dXJuIDB9LGRvRHVwOmZ1bmN0aW9uKHBhdGgsZmxhZ3Msc3VnZ2VzdEZEKXt2YXIgc3VnZ2VzdD1GUy5nZXRTdHJlYW0oc3VnZ2VzdEZEKTtpZihzdWdnZXN0KUZTLmNsb3NlKHN1Z2dlc3QpO3JldHVybiBGUy5vcGVuKHBhdGgsZmxhZ3MsMCxzdWdnZXN0RkQsc3VnZ2VzdEZEKS5mZH0sZG9SZWFkdjpmdW5jdGlvbihzdHJlYW0saW92LGlvdmNudCxvZmZzZXQpe3ZhciByZXQ9MDtmb3IodmFyIGk9MDtpPGlvdmNudDtpKyspe3ZhciBwdHI9SEVBUDMyW2lvditpKjg+PjJdO3ZhciBsZW49SEVBUDMyW2lvdisoaSo4KzQpPj4yXTt2YXIgY3Vycj1GUy5yZWFkKHN0cmVhbSxIRUFQOCxwdHIsbGVuLG9mZnNldCk7aWYoY3VycjwwKXJldHVybi0xO3JldCs9Y3VycjtpZihjdXJyPGxlbilicmVha31yZXR1cm4gcmV0fSxkb1dyaXRldjpmdW5jdGlvbihzdHJlYW0saW92LGlvdmNudCxvZmZzZXQpe3ZhciByZXQ9MDtmb3IodmFyIGk9MDtpPGlvdmNudDtpKyspe3ZhciBwdHI9SEVBUDMyW2lvditpKjg+PjJdO3ZhciBsZW49SEVBUDMyW2lvdisoaSo4KzQpPj4yXTt2YXIgY3Vycj1GUy53cml0ZShzdHJlYW0sSEVBUDgscHRyLGxlbixvZmZzZXQpO2lmKGN1cnI8MClyZXR1cm4tMTtyZXQrPWN1cnJ9cmV0dXJuIHJldH0sdmFyYXJnczp1bmRlZmluZWQsZ2V0OmZ1bmN0aW9uKCl7U1lTQ0FMTFMudmFyYXJncys9NDt2YXIgcmV0PUhFQVAzMltTWVNDQUxMUy52YXJhcmdzLTQ+PjJdO3JldHVybiByZXR9LGdldFN0cjpmdW5jdGlvbihwdHIpe3ZhciByZXQ9VVRGOFRvU3RyaW5nKHB0cik7cmV0dXJuIHJldH0sZ2V0U3RyZWFtRnJvbUZEOmZ1bmN0aW9uKGZkKXt2YXIgc3RyZWFtPUZTLmdldFN0cmVhbShmZCk7aWYoIXN0cmVhbSl0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig4KTtyZXR1cm4gc3RyZWFtfSxnZXQ2NDpmdW5jdGlvbihsb3csaGlnaCl7cmV0dXJuIGxvd319O2Z1bmN0aW9uIF9fX3N5c19fbmV3c2VsZWN0KG5mZHMscmVhZGZkcyx3cml0ZWZkcyxleGNlcHRmZHMsdGltZW91dCl7dHJ5e3ZhciB0b3RhbD0wO3ZhciBzcmNSZWFkTG93PXJlYWRmZHM/SEVBUDMyW3JlYWRmZHM+PjJdOjAsc3JjUmVhZEhpZ2g9cmVhZGZkcz9IRUFQMzJbcmVhZGZkcys0Pj4yXTowO3ZhciBzcmNXcml0ZUxvdz13cml0ZWZkcz9IRUFQMzJbd3JpdGVmZHM+PjJdOjAsc3JjV3JpdGVIaWdoPXdyaXRlZmRzP0hFQVAzMlt3cml0ZWZkcys0Pj4yXTowO3ZhciBzcmNFeGNlcHRMb3c9ZXhjZXB0ZmRzP0hFQVAzMltleGNlcHRmZHM+PjJdOjAsc3JjRXhjZXB0SGlnaD1leGNlcHRmZHM/SEVBUDMyW2V4Y2VwdGZkcys0Pj4yXTowO3ZhciBkc3RSZWFkTG93PTAsZHN0UmVhZEhpZ2g9MDt2YXIgZHN0V3JpdGVMb3c9MCxkc3RXcml0ZUhpZ2g9MDt2YXIgZHN0RXhjZXB0TG93PTAsZHN0RXhjZXB0SGlnaD0wO3ZhciBhbGxMb3c9KHJlYWRmZHM/SEVBUDMyW3JlYWRmZHM+PjJdOjApfCh3cml0ZWZkcz9IRUFQMzJbd3JpdGVmZHM+PjJdOjApfChleGNlcHRmZHM/SEVBUDMyW2V4Y2VwdGZkcz4+Ml06MCk7dmFyIGFsbEhpZ2g9KHJlYWRmZHM/SEVBUDMyW3JlYWRmZHMrND4+Ml06MCl8KHdyaXRlZmRzP0hFQVAzMlt3cml0ZWZkcys0Pj4yXTowKXwoZXhjZXB0ZmRzP0hFQVAzMltleGNlcHRmZHMrND4+Ml06MCk7dmFyIGNoZWNrPWZ1bmN0aW9uKGZkLGxvdyxoaWdoLHZhbCl7cmV0dXJuIGZkPDMyP2xvdyZ2YWw6aGlnaCZ2YWx9O2Zvcih2YXIgZmQ9MDtmZDxuZmRzO2ZkKyspe3ZhciBtYXNrPTE8PGZkJTMyO2lmKCFjaGVjayhmZCxhbGxMb3csYWxsSGlnaCxtYXNrKSl7Y29udGludWV9dmFyIHN0cmVhbT1GUy5nZXRTdHJlYW0oZmQpO2lmKCFzdHJlYW0pdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoOCk7dmFyIGZsYWdzPVNZU0NBTExTLkRFRkFVTFRfUE9MTE1BU0s7aWYoc3RyZWFtLnN0cmVhbV9vcHMucG9sbCl7ZmxhZ3M9c3RyZWFtLnN0cmVhbV9vcHMucG9sbChzdHJlYW0pfWlmKGZsYWdzJjEmJmNoZWNrKGZkLHNyY1JlYWRMb3csc3JjUmVhZEhpZ2gsbWFzaykpe2ZkPDMyP2RzdFJlYWRMb3c9ZHN0UmVhZExvd3xtYXNrOmRzdFJlYWRIaWdoPWRzdFJlYWRIaWdofG1hc2s7dG90YWwrK31pZihmbGFncyY0JiZjaGVjayhmZCxzcmNXcml0ZUxvdyxzcmNXcml0ZUhpZ2gsbWFzaykpe2ZkPDMyP2RzdFdyaXRlTG93PWRzdFdyaXRlTG93fG1hc2s6ZHN0V3JpdGVIaWdoPWRzdFdyaXRlSGlnaHxtYXNrO3RvdGFsKyt9aWYoZmxhZ3MmMiYmY2hlY2soZmQsc3JjRXhjZXB0TG93LHNyY0V4Y2VwdEhpZ2gsbWFzaykpe2ZkPDMyP2RzdEV4Y2VwdExvdz1kc3RFeGNlcHRMb3d8bWFzazpkc3RFeGNlcHRIaWdoPWRzdEV4Y2VwdEhpZ2h8bWFzazt0b3RhbCsrfX1pZihyZWFkZmRzKXtIRUFQMzJbcmVhZGZkcz4+Ml09ZHN0UmVhZExvdztIRUFQMzJbcmVhZGZkcys0Pj4yXT1kc3RSZWFkSGlnaH1pZih3cml0ZWZkcyl7SEVBUDMyW3dyaXRlZmRzPj4yXT1kc3RXcml0ZUxvdztIRUFQMzJbd3JpdGVmZHMrND4+Ml09ZHN0V3JpdGVIaWdofWlmKGV4Y2VwdGZkcyl7SEVBUDMyW2V4Y2VwdGZkcz4+Ml09ZHN0RXhjZXB0TG93O0hFQVAzMltleGNlcHRmZHMrND4+Ml09ZHN0RXhjZXB0SGlnaH1yZXR1cm4gdG90YWx9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX12YXIgRVJSTk9fQ09ERVM9e0VQRVJNOjYzLEVOT0VOVDo0NCxFU1JDSDo3MSxFSU5UUjoyNyxFSU86MjksRU5YSU86NjAsRTJCSUc6MSxFTk9FWEVDOjQ1LEVCQURGOjgsRUNISUxEOjEyLEVBR0FJTjo2LEVXT1VMREJMT0NLOjYsRU5PTUVNOjQ4LEVBQ0NFUzoyLEVGQVVMVDoyMSxFTk9UQkxLOjEwNSxFQlVTWToxMCxFRVhJU1Q6MjAsRVhERVY6NzUsRU5PREVWOjQzLEVOT1RESVI6NTQsRUlTRElSOjMxLEVJTlZBTDoyOCxFTkZJTEU6NDEsRU1GSUxFOjMzLEVOT1RUWTo1OSxFVFhUQlNZOjc0LEVGQklHOjIyLEVOT1NQQzo1MSxFU1BJUEU6NzAsRVJPRlM6NjksRU1MSU5LOjM0LEVQSVBFOjY0LEVET006MTgsRVJBTkdFOjY4LEVOT01TRzo0OSxFSURSTToyNCxFQ0hSTkc6MTA2LEVMMk5TWU5DOjE1NixFTDNITFQ6MTA3LEVMM1JTVDoxMDgsRUxOUk5HOjEwOSxFVU5BVENIOjExMCxFTk9DU0k6MTExLEVMMkhMVDoxMTIsRURFQURMSzoxNixFTk9MQ0s6NDYsRUJBREU6MTEzLEVCQURSOjExNCxFWEZVTEw6MTE1LEVOT0FOTzoxMDQsRUJBRFJRQzoxMDMsRUJBRFNMVDoxMDIsRURFQURMT0NLOjE2LEVCRk9OVDoxMDEsRU5PU1RSOjEwMCxFTk9EQVRBOjExNixFVElNRToxMTcsRU5PU1I6MTE4LEVOT05FVDoxMTksRU5PUEtHOjEyMCxFUkVNT1RFOjEyMSxFTk9MSU5LOjQ3LEVBRFY6MTIyLEVTUk1OVDoxMjMsRUNPTU06MTI0LEVQUk9UTzo2NSxFTVVMVElIT1A6MzYsRURPVERPVDoxMjUsRUJBRE1TRzo5LEVOT1RVTklROjEyNixFQkFERkQ6MTI3LEVSRU1DSEc6MTI4LEVMSUJBQ0M6MTI5LEVMSUJCQUQ6MTMwLEVMSUJTQ046MTMxLEVMSUJNQVg6MTMyLEVMSUJFWEVDOjEzMyxFTk9TWVM6NTIsRU5PVEVNUFRZOjU1LEVOQU1FVE9PTE9ORzozNyxFTE9PUDozMixFT1BOT1RTVVBQOjEzOCxFUEZOT1NVUFBPUlQ6MTM5LEVDT05OUkVTRVQ6MTUsRU5PQlVGUzo0MixFQUZOT1NVUFBPUlQ6NSxFUFJPVE9UWVBFOjY3LEVOT1RTT0NLOjU3LEVOT1BST1RPT1BUOjUwLEVTSFVURE9XTjoxNDAsRUNPTk5SRUZVU0VEOjE0LEVBRERSSU5VU0U6MyxFQ09OTkFCT1JURUQ6MTMsRU5FVFVOUkVBQ0g6NDAsRU5FVERPV046MzgsRVRJTUVET1VUOjczLEVIT1NURE9XTjoxNDIsRUhPU1RVTlJFQUNIOjIzLEVJTlBST0dSRVNTOjI2LEVBTFJFQURZOjcsRURFU1RBRERSUkVROjE3LEVNU0dTSVpFOjM1LEVQUk9UT05PU1VQUE9SVDo2NixFU09DS1ROT1NVUFBPUlQ6MTM3LEVBRERSTk9UQVZBSUw6NCxFTkVUUkVTRVQ6MzksRUlTQ09OTjozMCxFTk9UQ09OTjo1MyxFVE9PTUFOWVJFRlM6MTQxLEVVU0VSUzoxMzYsRURRVU9UOjE5LEVTVEFMRTo3MixFTk9UU1VQOjEzOCxFTk9NRURJVU06MTQ4LEVJTFNFUToyNSxFT1ZFUkZMT1c6NjEsRUNBTkNFTEVEOjExLEVOT1RSRUNPVkVSQUJMRTo1NixFT1dORVJERUFEOjYyLEVTVFJQSVBFOjEzNX07dmFyIFNPQ0tGUz17bW91bnQ6ZnVuY3Rpb24obW91bnQpe01vZHVsZVsid2Vic29ja2V0Il09TW9kdWxlWyJ3ZWJzb2NrZXQiXSYmIm9iamVjdCI9PT10eXBlb2YgTW9kdWxlWyJ3ZWJzb2NrZXQiXT9Nb2R1bGVbIndlYnNvY2tldCJdOnt9O01vZHVsZVsid2Vic29ja2V0Il0uX2NhbGxiYWNrcz17fTtNb2R1bGVbIndlYnNvY2tldCJdWyJvbiJdPWZ1bmN0aW9uKGV2ZW50LGNhbGxiYWNrKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGNhbGxiYWNrKXt0aGlzLl9jYWxsYmFja3NbZXZlbnRdPWNhbGxiYWNrfXJldHVybiB0aGlzfTtNb2R1bGVbIndlYnNvY2tldCJdLmVtaXQ9ZnVuY3Rpb24oZXZlbnQscGFyYW0pe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSl7dGhpcy5fY2FsbGJhY2tzW2V2ZW50XS5jYWxsKHRoaXMscGFyYW0pfX07cmV0dXJuIEZTLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTYzODR8NTExLDApfSxjcmVhdGVTb2NrZXQ6ZnVuY3Rpb24oZmFtaWx5LHR5cGUscHJvdG9jb2wpe3R5cGUmPX41MjYzMzY7dmFyIHN0cmVhbWluZz10eXBlPT0xO2lmKHByb3RvY29sKXthc3NlcnQoc3RyZWFtaW5nPT0ocHJvdG9jb2w9PTYpKX12YXIgc29jaz17ZmFtaWx5OmZhbWlseSx0eXBlOnR5cGUscHJvdG9jb2w6cHJvdG9jb2wsc2VydmVyOm51bGwsZXJyb3I6bnVsbCxwZWVyczp7fSxwZW5kaW5nOltdLHJlY3ZfcXVldWU6W10sc29ja19vcHM6U09DS0ZTLndlYnNvY2tldF9zb2NrX29wc307dmFyIG5hbWU9U09DS0ZTLm5leHRuYW1lKCk7dmFyIG5vZGU9RlMuY3JlYXRlTm9kZShTT0NLRlMucm9vdCxuYW1lLDQ5MTUyLDApO25vZGUuc29jaz1zb2NrO3ZhciBzdHJlYW09RlMuY3JlYXRlU3RyZWFtKHtwYXRoOm5hbWUsbm9kZTpub2RlLGZsYWdzOjIsc2Vla2FibGU6ZmFsc2Usc3RyZWFtX29wczpTT0NLRlMuc3RyZWFtX29wc30pO3NvY2suc3RyZWFtPXN0cmVhbTtyZXR1cm4gc29ja30sZ2V0U29ja2V0OmZ1bmN0aW9uKGZkKXt2YXIgc3RyZWFtPUZTLmdldFN0cmVhbShmZCk7aWYoIXN0cmVhbXx8IUZTLmlzU29ja2V0KHN0cmVhbS5ub2RlLm1vZGUpKXtyZXR1cm4gbnVsbH1yZXR1cm4gc3RyZWFtLm5vZGUuc29ja30sc3RyZWFtX29wczp7cG9sbDpmdW5jdGlvbihzdHJlYW0pe3ZhciBzb2NrPXN0cmVhbS5ub2RlLnNvY2s7cmV0dXJuIHNvY2suc29ja19vcHMucG9sbChzb2NrKX0saW9jdGw6ZnVuY3Rpb24oc3RyZWFtLHJlcXVlc3QsdmFyYXJncyl7dmFyIHNvY2s9c3RyZWFtLm5vZGUuc29jaztyZXR1cm4gc29jay5zb2NrX29wcy5pb2N0bChzb2NrLHJlcXVlc3QsdmFyYXJncyl9LHJlYWQ6ZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uKXt2YXIgc29jaz1zdHJlYW0ubm9kZS5zb2NrO3ZhciBtc2c9c29jay5zb2NrX29wcy5yZWN2bXNnKHNvY2ssbGVuZ3RoKTtpZighbXNnKXtyZXR1cm4gMH1idWZmZXIuc2V0KG1zZy5idWZmZXIsb2Zmc2V0KTtyZXR1cm4gbXNnLmJ1ZmZlci5sZW5ndGh9LHdyaXRlOmZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbil7dmFyIHNvY2s9c3RyZWFtLm5vZGUuc29jaztyZXR1cm4gc29jay5zb2NrX29wcy5zZW5kbXNnKHNvY2ssYnVmZmVyLG9mZnNldCxsZW5ndGgpfSxjbG9zZTpmdW5jdGlvbihzdHJlYW0pe3ZhciBzb2NrPXN0cmVhbS5ub2RlLnNvY2s7c29jay5zb2NrX29wcy5jbG9zZShzb2NrKX19LG5leHRuYW1lOmZ1bmN0aW9uKCl7aWYoIVNPQ0tGUy5uZXh0bmFtZS5jdXJyZW50KXtTT0NLRlMubmV4dG5hbWUuY3VycmVudD0wfXJldHVybiJzb2NrZXRbIitTT0NLRlMubmV4dG5hbWUuY3VycmVudCsrKyJdIn0sd2Vic29ja2V0X3NvY2tfb3BzOntjcmVhdGVQZWVyOmZ1bmN0aW9uKHNvY2ssYWRkcixwb3J0KXt2YXIgd3M7aWYodHlwZW9mIGFkZHI9PT0ib2JqZWN0Iil7d3M9YWRkcjthZGRyPW51bGw7cG9ydD1udWxsfWlmKHdzKXtpZih3cy5fc29ja2V0KXthZGRyPXdzLl9zb2NrZXQucmVtb3RlQWRkcmVzcztwb3J0PXdzLl9zb2NrZXQucmVtb3RlUG9ydH1lbHNle3ZhciByZXN1bHQ9L3dzW3NdPzpcL1wvKFteOl0rKTooXGQrKS8uZXhlYyh3cy51cmwpO2lmKCFyZXN1bHQpe3Rocm93IG5ldyBFcnJvcigiV2ViU29ja2V0IFVSTCBtdXN0IGJlIGluIHRoZSBmb3JtYXQgd3Mocyk6Ly9hZGRyZXNzOnBvcnQiKX1hZGRyPXJlc3VsdFsxXTtwb3J0PXBhcnNlSW50KHJlc3VsdFsyXSwxMCl9fWVsc2V7dHJ5e3ZhciBydW50aW1lQ29uZmlnPU1vZHVsZVsid2Vic29ja2V0Il0mJiJvYmplY3QiPT09dHlwZW9mIE1vZHVsZVsid2Vic29ja2V0Il07dmFyIHVybD0id3M6IyIucmVwbGFjZSgiIyIsIi8vIik7aWYocnVudGltZUNvbmZpZyl7aWYoInN0cmluZyI9PT10eXBlb2YgTW9kdWxlWyJ3ZWJzb2NrZXQiXVsidXJsIl0pe3VybD1Nb2R1bGVbIndlYnNvY2tldCJdWyJ1cmwiXX19aWYodXJsPT09IndzOi8vInx8dXJsPT09IndzczovLyIpe3ZhciBwYXJ0cz1hZGRyLnNwbGl0KCIvIik7dXJsPXVybCtwYXJ0c1swXSsiOiIrcG9ydCsiLyIrcGFydHMuc2xpY2UoMSkuam9pbigiLyIpfXZhciBzdWJQcm90b2NvbHM9ImJpbmFyeSI7aWYocnVudGltZUNvbmZpZyl7aWYoInN0cmluZyI9PT10eXBlb2YgTW9kdWxlWyJ3ZWJzb2NrZXQiXVsic3VicHJvdG9jb2wiXSl7c3ViUHJvdG9jb2xzPU1vZHVsZVsid2Vic29ja2V0Il1bInN1YnByb3RvY29sIl19fXZhciBvcHRzPXVuZGVmaW5lZDtpZihzdWJQcm90b2NvbHMhPT0ibnVsbCIpe3N1YlByb3RvY29scz1zdWJQcm90b2NvbHMucmVwbGFjZSgvXiArfCArJC9nLCIiKS5zcGxpdCgvICosICovKTtvcHRzPUVOVklST05NRU5UX0lTX05PREU/eyJwcm90b2NvbCI6c3ViUHJvdG9jb2xzLnRvU3RyaW5nKCl9OnN1YlByb3RvY29sc31pZihydW50aW1lQ29uZmlnJiZudWxsPT09TW9kdWxlWyJ3ZWJzb2NrZXQiXVsic3VicHJvdG9jb2wiXSl7c3ViUHJvdG9jb2xzPSJudWxsIjtvcHRzPXVuZGVmaW5lZH12YXIgV2ViU29ja2V0Q29uc3RydWN0b3I7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7V2ViU29ja2V0Q29uc3RydWN0b3I9cmVxdWlyZSgid3MiKX1lbHNle1dlYlNvY2tldENvbnN0cnVjdG9yPVdlYlNvY2tldH13cz1uZXcgV2ViU29ja2V0Q29uc3RydWN0b3IodXJsLG9wdHMpO3dzLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIn1jYXRjaChlKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSE9TVFVOUkVBQ0gpfX12YXIgcGVlcj17YWRkcjphZGRyLHBvcnQ6cG9ydCxzb2NrZXQ6d3MsZGdyYW1fc2VuZF9xdWV1ZTpbXX07U09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5hZGRQZWVyKHNvY2sscGVlcik7U09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5oYW5kbGVQZWVyRXZlbnRzKHNvY2sscGVlcik7aWYoc29jay50eXBlPT09MiYmdHlwZW9mIHNvY2suc3BvcnQhPT0idW5kZWZpbmVkIil7cGVlci5kZ3JhbV9zZW5kX3F1ZXVlLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NSwicCIuY2hhckNvZGVBdCgwKSwibyIuY2hhckNvZGVBdCgwKSwiciIuY2hhckNvZGVBdCgwKSwidCIuY2hhckNvZGVBdCgwKSwoc29jay5zcG9ydCY2NTI4MCk+Pjgsc29jay5zcG9ydCYyNTVdKSl9cmV0dXJuIHBlZXJ9LGdldFBlZXI6ZnVuY3Rpb24oc29jayxhZGRyLHBvcnQpe3JldHVybiBzb2NrLnBlZXJzW2FkZHIrIjoiK3BvcnRdfSxhZGRQZWVyOmZ1bmN0aW9uKHNvY2sscGVlcil7c29jay5wZWVyc1twZWVyLmFkZHIrIjoiK3BlZXIucG9ydF09cGVlcn0scmVtb3ZlUGVlcjpmdW5jdGlvbihzb2NrLHBlZXIpe2RlbGV0ZSBzb2NrLnBlZXJzW3BlZXIuYWRkcisiOiIrcGVlci5wb3J0XX0saGFuZGxlUGVlckV2ZW50czpmdW5jdGlvbihzb2NrLHBlZXIpe3ZhciBmaXJzdD10cnVlO3ZhciBoYW5kbGVPcGVuPWZ1bmN0aW9uKCl7TW9kdWxlWyJ3ZWJzb2NrZXQiXS5lbWl0KCJvcGVuIixzb2NrLnN0cmVhbS5mZCk7dHJ5e3ZhciBxdWV1ZWQ9cGVlci5kZ3JhbV9zZW5kX3F1ZXVlLnNoaWZ0KCk7d2hpbGUocXVldWVkKXtwZWVyLnNvY2tldC5zZW5kKHF1ZXVlZCk7cXVldWVkPXBlZXIuZGdyYW1fc2VuZF9xdWV1ZS5zaGlmdCgpfX1jYXRjaChlKXtwZWVyLnNvY2tldC5jbG9zZSgpfX07ZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShkYXRhKXtpZih0eXBlb2YgZGF0YT09PSJzdHJpbmciKXt2YXIgZW5jb2Rlcj1uZXcgVGV4dEVuY29kZXI7ZGF0YT1lbmNvZGVyLmVuY29kZShkYXRhKX1lbHNle2Fzc2VydChkYXRhLmJ5dGVMZW5ndGghPT11bmRlZmluZWQpO2lmKGRhdGEuYnl0ZUxlbmd0aD09MCl7cmV0dXJufWVsc2V7ZGF0YT1uZXcgVWludDhBcnJheShkYXRhKX19dmFyIHdhc2ZpcnN0PWZpcnN0O2ZpcnN0PWZhbHNlO2lmKHdhc2ZpcnN0JiZkYXRhLmxlbmd0aD09PTEwJiZkYXRhWzBdPT09MjU1JiZkYXRhWzFdPT09MjU1JiZkYXRhWzJdPT09MjU1JiZkYXRhWzNdPT09MjU1JiZkYXRhWzRdPT09InAiLmNoYXJDb2RlQXQoMCkmJmRhdGFbNV09PT0ibyIuY2hhckNvZGVBdCgwKSYmZGF0YVs2XT09PSJyIi5jaGFyQ29kZUF0KDApJiZkYXRhWzddPT09InQiLmNoYXJDb2RlQXQoMCkpe3ZhciBuZXdwb3J0PWRhdGFbOF08PDh8ZGF0YVs5XTtTT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLnJlbW92ZVBlZXIoc29jayxwZWVyKTtwZWVyLnBvcnQ9bmV3cG9ydDtTT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLmFkZFBlZXIoc29jayxwZWVyKTtyZXR1cm59c29jay5yZWN2X3F1ZXVlLnB1c2goe2FkZHI6cGVlci5hZGRyLHBvcnQ6cGVlci5wb3J0LGRhdGE6ZGF0YX0pO01vZHVsZVsid2Vic29ja2V0Il0uZW1pdCgibWVzc2FnZSIsc29jay5zdHJlYW0uZmQpfWlmKEVOVklST05NRU5UX0lTX05PREUpe3BlZXIuc29ja2V0Lm9uKCJvcGVuIixoYW5kbGVPcGVuKTtwZWVyLnNvY2tldC5vbigibWVzc2FnZSIsZnVuY3Rpb24oZGF0YSxmbGFncyl7aWYoIWZsYWdzLmJpbmFyeSl7cmV0dXJufWhhbmRsZU1lc3NhZ2UobmV3IFVpbnQ4QXJyYXkoZGF0YSkuYnVmZmVyKX0pO3BlZXIuc29ja2V0Lm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtNb2R1bGVbIndlYnNvY2tldCJdLmVtaXQoImNsb3NlIixzb2NrLnN0cmVhbS5mZCl9KTtwZWVyLnNvY2tldC5vbigiZXJyb3IiLGZ1bmN0aW9uKGVycm9yKXtzb2NrLmVycm9yPUVSUk5PX0NPREVTLkVDT05OUkVGVVNFRDtNb2R1bGVbIndlYnNvY2tldCJdLmVtaXQoImVycm9yIixbc29jay5zdHJlYW0uZmQsc29jay5lcnJvciwiRUNPTk5SRUZVU0VEOiBDb25uZWN0aW9uIHJlZnVzZWQiXSl9KX1lbHNle3BlZXIuc29ja2V0Lm9ub3Blbj1oYW5kbGVPcGVuO3BlZXIuc29ja2V0Lm9uY2xvc2U9ZnVuY3Rpb24oKXtNb2R1bGVbIndlYnNvY2tldCJdLmVtaXQoImNsb3NlIixzb2NrLnN0cmVhbS5mZCl9O3BlZXIuc29ja2V0Lm9ubWVzc2FnZT1mdW5jdGlvbiBwZWVyX3NvY2tldF9vbm1lc3NhZ2UoZXZlbnQpe2hhbmRsZU1lc3NhZ2UoZXZlbnQuZGF0YSl9O3BlZXIuc29ja2V0Lm9uZXJyb3I9ZnVuY3Rpb24oZXJyb3Ipe3NvY2suZXJyb3I9RVJSTk9fQ09ERVMuRUNPTk5SRUZVU0VEO01vZHVsZVsid2Vic29ja2V0Il0uZW1pdCgiZXJyb3IiLFtzb2NrLnN0cmVhbS5mZCxzb2NrLmVycm9yLCJFQ09OTlJFRlVTRUQ6IENvbm5lY3Rpb24gcmVmdXNlZCJdKX19fSxwb2xsOmZ1bmN0aW9uKHNvY2spe2lmKHNvY2sudHlwZT09PTEmJnNvY2suc2VydmVyKXtyZXR1cm4gc29jay5wZW5kaW5nLmxlbmd0aD82NHwxOjB9dmFyIG1hc2s9MDt2YXIgZGVzdD1zb2NrLnR5cGU9PT0xP1NPQ0tGUy53ZWJzb2NrZXRfc29ja19vcHMuZ2V0UGVlcihzb2NrLHNvY2suZGFkZHIsc29jay5kcG9ydCk6bnVsbDtpZihzb2NrLnJlY3ZfcXVldWUubGVuZ3RofHwhZGVzdHx8ZGVzdCYmZGVzdC5zb2NrZXQucmVhZHlTdGF0ZT09PWRlc3Quc29ja2V0LkNMT1NJTkd8fGRlc3QmJmRlc3Quc29ja2V0LnJlYWR5U3RhdGU9PT1kZXN0LnNvY2tldC5DTE9TRUQpe21hc2t8PTY0fDF9aWYoIWRlc3R8fGRlc3QmJmRlc3Quc29ja2V0LnJlYWR5U3RhdGU9PT1kZXN0LnNvY2tldC5PUEVOKXttYXNrfD00fWlmKGRlc3QmJmRlc3Quc29ja2V0LnJlYWR5U3RhdGU9PT1kZXN0LnNvY2tldC5DTE9TSU5HfHxkZXN0JiZkZXN0LnNvY2tldC5yZWFkeVN0YXRlPT09ZGVzdC5zb2NrZXQuQ0xPU0VEKXttYXNrfD0xNn1yZXR1cm4gbWFza30saW9jdGw6ZnVuY3Rpb24oc29jayxyZXF1ZXN0LGFyZyl7c3dpdGNoKHJlcXVlc3Qpe2Nhc2UgMjE1MzE6dmFyIGJ5dGVzPTA7aWYoc29jay5yZWN2X3F1ZXVlLmxlbmd0aCl7Ynl0ZXM9c29jay5yZWN2X3F1ZXVlWzBdLmRhdGEubGVuZ3RofUhFQVAzMlthcmc+PjJdPWJ5dGVzO3JldHVybiAwO2RlZmF1bHQ6cmV0dXJuIEVSUk5PX0NPREVTLkVJTlZBTH19LGNsb3NlOmZ1bmN0aW9uKHNvY2spe2lmKHNvY2suc2VydmVyKXt0cnl7c29jay5zZXJ2ZXIuY2xvc2UoKX1jYXRjaChlKXt9c29jay5zZXJ2ZXI9bnVsbH12YXIgcGVlcnM9T2JqZWN0LmtleXMoc29jay5wZWVycyk7Zm9yKHZhciBpPTA7aTxwZWVycy5sZW5ndGg7aSsrKXt2YXIgcGVlcj1zb2NrLnBlZXJzW3BlZXJzW2ldXTt0cnl7cGVlci5zb2NrZXQuY2xvc2UoKX1jYXRjaChlKXt9U09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5yZW1vdmVQZWVyKHNvY2sscGVlcil9cmV0dXJuIDB9LGJpbmQ6ZnVuY3Rpb24oc29jayxhZGRyLHBvcnQpe2lmKHR5cGVvZiBzb2NrLnNhZGRyIT09InVuZGVmaW5lZCJ8fHR5cGVvZiBzb2NrLnNwb3J0IT09InVuZGVmaW5lZCIpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9c29jay5zYWRkcj1hZGRyO3NvY2suc3BvcnQ9cG9ydDtpZihzb2NrLnR5cGU9PT0yKXtpZihzb2NrLnNlcnZlcil7c29jay5zZXJ2ZXIuY2xvc2UoKTtzb2NrLnNlcnZlcj1udWxsfXRyeXtzb2NrLnNvY2tfb3BzLmxpc3Rlbihzb2NrLDApfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKXRocm93IGU7aWYoZS5lcnJubyE9PUVSUk5PX0NPREVTLkVPUE5PVFNVUFApdGhyb3cgZX19fSxjb25uZWN0OmZ1bmN0aW9uKHNvY2ssYWRkcixwb3J0KXtpZihzb2NrLnNlcnZlcil7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU9QTk9UU1VQUCl9aWYodHlwZW9mIHNvY2suZGFkZHIhPT0idW5kZWZpbmVkIiYmdHlwZW9mIHNvY2suZHBvcnQhPT0idW5kZWZpbmVkIil7dmFyIGRlc3Q9U09DS0ZTLndlYnNvY2tldF9zb2NrX29wcy5nZXRQZWVyKHNvY2ssc29jay5kYWRkcixzb2NrLmRwb3J0KTtpZihkZXN0KXtpZihkZXN0LnNvY2tldC5yZWFkeVN0YXRlPT09ZGVzdC5zb2NrZXQuQ09OTkVDVElORyl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFMUkVBRFkpfWVsc2V7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlTQ09OTil9fX12YXIgcGVlcj1TT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLmNyZWF0ZVBlZXIoc29jayxhZGRyLHBvcnQpO3NvY2suZGFkZHI9cGVlci5hZGRyO3NvY2suZHBvcnQ9cGVlci5wb3J0O3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlBST0dSRVNTKX0sbGlzdGVuOmZ1bmN0aW9uKHNvY2ssYmFja2xvZyl7aWYoIUVOVklST05NRU5UX0lTX05PREUpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVPUE5PVFNVUFApfWlmKHNvY2suc2VydmVyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfXZhciBXZWJTb2NrZXRTZXJ2ZXI9cmVxdWlyZSgid3MiKS5TZXJ2ZXI7dmFyIGhvc3Q9c29jay5zYWRkcjtzb2NrLnNlcnZlcj1uZXcgV2ViU29ja2V0U2VydmVyKHtob3N0Omhvc3QscG9ydDpzb2NrLnNwb3J0fSk7TW9kdWxlWyJ3ZWJzb2NrZXQiXS5lbWl0KCJsaXN0ZW4iLHNvY2suc3RyZWFtLmZkKTtzb2NrLnNlcnZlci5vbigiY29ubmVjdGlvbiIsZnVuY3Rpb24od3Mpe2lmKHNvY2sudHlwZT09PTEpe3ZhciBuZXdzb2NrPVNPQ0tGUy5jcmVhdGVTb2NrZXQoc29jay5mYW1pbHksc29jay50eXBlLHNvY2sucHJvdG9jb2wpO3ZhciBwZWVyPVNPQ0tGUy53ZWJzb2NrZXRfc29ja19vcHMuY3JlYXRlUGVlcihuZXdzb2NrLHdzKTtuZXdzb2NrLmRhZGRyPXBlZXIuYWRkcjtuZXdzb2NrLmRwb3J0PXBlZXIucG9ydDtzb2NrLnBlbmRpbmcucHVzaChuZXdzb2NrKTtNb2R1bGVbIndlYnNvY2tldCJdLmVtaXQoImNvbm5lY3Rpb24iLG5ld3NvY2suc3RyZWFtLmZkKX1lbHNle1NPQ0tGUy53ZWJzb2NrZXRfc29ja19vcHMuY3JlYXRlUGVlcihzb2NrLHdzKTtNb2R1bGVbIndlYnNvY2tldCJdLmVtaXQoImNvbm5lY3Rpb24iLHNvY2suc3RyZWFtLmZkKX19KTtzb2NrLnNlcnZlci5vbigiY2xvc2VkIixmdW5jdGlvbigpe01vZHVsZVsid2Vic29ja2V0Il0uZW1pdCgiY2xvc2UiLHNvY2suc3RyZWFtLmZkKTtzb2NrLnNlcnZlcj1udWxsfSk7c29jay5zZXJ2ZXIub24oImVycm9yIixmdW5jdGlvbihlcnJvcil7c29jay5lcnJvcj1FUlJOT19DT0RFUy5FSE9TVFVOUkVBQ0g7TW9kdWxlWyJ3ZWJzb2NrZXQiXS5lbWl0KCJlcnJvciIsW3NvY2suc3RyZWFtLmZkLHNvY2suZXJyb3IsIkVIT1NUVU5SRUFDSDogSG9zdCBpcyB1bnJlYWNoYWJsZSJdKX0pfSxhY2NlcHQ6ZnVuY3Rpb24obGlzdGVuc29jayl7aWYoIWxpc3RlbnNvY2suc2VydmVyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfXZhciBuZXdzb2NrPWxpc3RlbnNvY2sucGVuZGluZy5zaGlmdCgpO25ld3NvY2suc3RyZWFtLmZsYWdzPWxpc3RlbnNvY2suc3RyZWFtLmZsYWdzO3JldHVybiBuZXdzb2NrfSxnZXRuYW1lOmZ1bmN0aW9uKHNvY2sscGVlcil7dmFyIGFkZHIscG9ydDtpZihwZWVyKXtpZihzb2NrLmRhZGRyPT09dW5kZWZpbmVkfHxzb2NrLmRwb3J0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9UQ09OTil9YWRkcj1zb2NrLmRhZGRyO3BvcnQ9c29jay5kcG9ydH1lbHNle2FkZHI9c29jay5zYWRkcnx8MDtwb3J0PXNvY2suc3BvcnR8fDB9cmV0dXJue2FkZHI6YWRkcixwb3J0OnBvcnR9fSxzZW5kbXNnOmZ1bmN0aW9uKHNvY2ssYnVmZmVyLG9mZnNldCxsZW5ndGgsYWRkcixwb3J0KXtpZihzb2NrLnR5cGU9PT0yKXtpZihhZGRyPT09dW5kZWZpbmVkfHxwb3J0PT09dW5kZWZpbmVkKXthZGRyPXNvY2suZGFkZHI7cG9ydD1zb2NrLmRwb3J0fWlmKGFkZHI9PT11bmRlZmluZWR8fHBvcnQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVERVNUQUREUlJFUSl9fWVsc2V7YWRkcj1zb2NrLmRhZGRyO3BvcnQ9c29jay5kcG9ydH12YXIgZGVzdD1TT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLmdldFBlZXIoc29jayxhZGRyLHBvcnQpO2lmKHNvY2sudHlwZT09PTEpe2lmKCFkZXN0fHxkZXN0LnNvY2tldC5yZWFkeVN0YXRlPT09ZGVzdC5zb2NrZXQuQ0xPU0lOR3x8ZGVzdC5zb2NrZXQucmVhZHlTdGF0ZT09PWRlc3Quc29ja2V0LkNMT1NFRCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVENPTk4pfWVsc2UgaWYoZGVzdC5zb2NrZXQucmVhZHlTdGF0ZT09PWRlc3Quc29ja2V0LkNPTk5FQ1RJTkcpe3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBR0FJTil9fWlmKEFycmF5QnVmZmVyLmlzVmlldyhidWZmZXIpKXtvZmZzZXQrPWJ1ZmZlci5ieXRlT2Zmc2V0O2J1ZmZlcj1idWZmZXIuYnVmZmVyfXZhciBkYXRhO2RhdGE9YnVmZmVyLnNsaWNlKG9mZnNldCxvZmZzZXQrbGVuZ3RoKTtpZihzb2NrLnR5cGU9PT0yKXtpZighZGVzdHx8ZGVzdC5zb2NrZXQucmVhZHlTdGF0ZSE9PWRlc3Quc29ja2V0Lk9QRU4pe2lmKCFkZXN0fHxkZXN0LnNvY2tldC5yZWFkeVN0YXRlPT09ZGVzdC5zb2NrZXQuQ0xPU0lOR3x8ZGVzdC5zb2NrZXQucmVhZHlTdGF0ZT09PWRlc3Quc29ja2V0LkNMT1NFRCl7ZGVzdD1TT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLmNyZWF0ZVBlZXIoc29jayxhZGRyLHBvcnQpfWRlc3QuZGdyYW1fc2VuZF9xdWV1ZS5wdXNoKGRhdGEpO3JldHVybiBsZW5ndGh9fXRyeXtkZXN0LnNvY2tldC5zZW5kKGRhdGEpO3JldHVybiBsZW5ndGh9Y2F0Y2goZSl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKX19LHJlY3Ztc2c6ZnVuY3Rpb24oc29jayxsZW5ndGgpe2lmKHNvY2sudHlwZT09PTEmJnNvY2suc2VydmVyKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9UQ09OTil9dmFyIHF1ZXVlZD1zb2NrLnJlY3ZfcXVldWUuc2hpZnQoKTtpZighcXVldWVkKXtpZihzb2NrLnR5cGU9PT0xKXt2YXIgZGVzdD1TT0NLRlMud2Vic29ja2V0X3NvY2tfb3BzLmdldFBlZXIoc29jayxzb2NrLmRhZGRyLHNvY2suZHBvcnQpO2lmKCFkZXN0KXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9UQ09OTil9ZWxzZSBpZihkZXN0LnNvY2tldC5yZWFkeVN0YXRlPT09ZGVzdC5zb2NrZXQuQ0xPU0lOR3x8ZGVzdC5zb2NrZXQucmVhZHlTdGF0ZT09PWRlc3Quc29ja2V0LkNMT1NFRCl7cmV0dXJuIG51bGx9ZWxzZXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQUdBSU4pfX1lbHNle3Rocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVBR0FJTil9fXZhciBxdWV1ZWRMZW5ndGg9cXVldWVkLmRhdGEuYnl0ZUxlbmd0aHx8cXVldWVkLmRhdGEubGVuZ3RoO3ZhciBxdWV1ZWRPZmZzZXQ9cXVldWVkLmRhdGEuYnl0ZU9mZnNldHx8MDt2YXIgcXVldWVkQnVmZmVyPXF1ZXVlZC5kYXRhLmJ1ZmZlcnx8cXVldWVkLmRhdGE7dmFyIGJ5dGVzUmVhZD1NYXRoLm1pbihsZW5ndGgscXVldWVkTGVuZ3RoKTt2YXIgcmVzPXtidWZmZXI6bmV3IFVpbnQ4QXJyYXkocXVldWVkQnVmZmVyLHF1ZXVlZE9mZnNldCxieXRlc1JlYWQpLGFkZHI6cXVldWVkLmFkZHIscG9ydDpxdWV1ZWQucG9ydH07aWYoc29jay50eXBlPT09MSYmYnl0ZXNSZWFkPHF1ZXVlZExlbmd0aCl7dmFyIGJ5dGVzUmVtYWluaW5nPXF1ZXVlZExlbmd0aC1ieXRlc1JlYWQ7cXVldWVkLmRhdGE9bmV3IFVpbnQ4QXJyYXkocXVldWVkQnVmZmVyLHF1ZXVlZE9mZnNldCtieXRlc1JlYWQsYnl0ZXNSZW1haW5pbmcpO3NvY2sucmVjdl9xdWV1ZS51bnNoaWZ0KHF1ZXVlZCl9cmV0dXJuIHJlc319fTtmdW5jdGlvbiBnZXRTb2NrZXRGcm9tRkQoZmQpe3ZhciBzb2NrZXQ9U09DS0ZTLmdldFNvY2tldChmZCk7aWYoIXNvY2tldCl0aHJvdyBuZXcgRlMuRXJybm9FcnJvcig4KTtyZXR1cm4gc29ja2V0fWZ1bmN0aW9uIHNldEVyck5vKHZhbHVlKXtIRUFQMzJbX19fZXJybm9fbG9jYXRpb24oKT4+Ml09dmFsdWU7cmV0dXJuIHZhbHVlfWZ1bmN0aW9uIGluZXRQdG9uNChzdHIpe3ZhciBiPXN0ci5zcGxpdCgiLiIpO2Zvcih2YXIgaT0wO2k8NDtpKyspe3ZhciB0bXA9TnVtYmVyKGJbaV0pO2lmKGlzTmFOKHRtcCkpcmV0dXJuIG51bGw7YltpXT10bXB9cmV0dXJuKGJbMF18YlsxXTw8OHxiWzJdPDwxNnxiWzNdPDwyNCk+Pj4wfWZ1bmN0aW9uIGpzdG9pX3Eoc3RyKXtyZXR1cm4gcGFyc2VJbnQoc3RyKX1mdW5jdGlvbiBpbmV0UHRvbjYoc3RyKXt2YXIgd29yZHM7dmFyIHcsb2Zmc2V0LHo7dmFyIHZhbGlkNnJlZ3g9L14oKD89Lio6OikoPyEuKjo6Lis6OikoOjopPyhbXGRBLUZdezEsNH06KDp8XGIpfCl7NX18KFtcZEEtRl17MSw0fTopezZ9KSgoKFtcZEEtRl17MSw0fSgoPyFcMyk6Onw6XGJ8JCkpfCg/IVwyXDMpKXsyfXwoKCgyWzAtNF18MVxkfFsxLTldKT9cZHwyNVswLTVdKVwuP1xiKXs0fSkkL2k7dmFyIHBhcnRzPVtdO2lmKCF2YWxpZDZyZWd4LnRlc3Qoc3RyKSl7cmV0dXJuIG51bGx9aWYoc3RyPT09Ijo6Iil7cmV0dXJuWzAsMCwwLDAsMCwwLDAsMF19aWYoc3RyLnN0YXJ0c1dpdGgoIjo6Iikpe3N0cj1zdHIucmVwbGFjZSgiOjoiLCJaOiIpfWVsc2V7c3RyPXN0ci5yZXBsYWNlKCI6OiIsIjpaOiIpfWlmKHN0ci5pbmRleE9mKCIuIik+MCl7c3RyPXN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoIlsuXSIsImciKSwiOiIpO3dvcmRzPXN0ci5zcGxpdCgiOiIpO3dvcmRzW3dvcmRzLmxlbmd0aC00XT1qc3RvaV9xKHdvcmRzW3dvcmRzLmxlbmd0aC00XSkranN0b2lfcSh3b3Jkc1t3b3Jkcy5sZW5ndGgtM10pKjI1Njt3b3Jkc1t3b3Jkcy5sZW5ndGgtM109anN0b2lfcSh3b3Jkc1t3b3Jkcy5sZW5ndGgtMl0pK2pzdG9pX3Eod29yZHNbd29yZHMubGVuZ3RoLTFdKSoyNTY7d29yZHM9d29yZHMuc2xpY2UoMCx3b3Jkcy5sZW5ndGgtMil9ZWxzZXt3b3Jkcz1zdHIuc3BsaXQoIjoiKX1vZmZzZXQ9MDt6PTA7Zm9yKHc9MDt3PHdvcmRzLmxlbmd0aDt3Kyspe2lmKHR5cGVvZiB3b3Jkc1t3XT09PSJzdHJpbmciKXtpZih3b3Jkc1t3XT09PSJaIil7Zm9yKHo9MDt6PDgtd29yZHMubGVuZ3RoKzE7eisrKXtwYXJ0c1t3K3pdPTB9b2Zmc2V0PXotMX1lbHNle3BhcnRzW3crb2Zmc2V0XT1faHRvbnMocGFyc2VJbnQod29yZHNbd10sMTYpKX19ZWxzZXtwYXJ0c1t3K29mZnNldF09d29yZHNbd119fXJldHVybltwYXJ0c1sxXTw8MTZ8cGFydHNbMF0scGFydHNbM108PDE2fHBhcnRzWzJdLHBhcnRzWzVdPDwxNnxwYXJ0c1s0XSxwYXJ0c1s3XTw8MTZ8cGFydHNbNl1dfWZ1bmN0aW9uIHdyaXRlU29ja2FkZHIoc2EsZmFtaWx5LGFkZHIscG9ydCxhZGRybGVuKXtzd2l0Y2goZmFtaWx5KXtjYXNlIDI6YWRkcj1pbmV0UHRvbjQoYWRkcik7aWYoYWRkcmxlbil7SEVBUDMyW2FkZHJsZW4+PjJdPTE2fUhFQVAxNltzYT4+MV09ZmFtaWx5O0hFQVAzMltzYSs0Pj4yXT1hZGRyO0hFQVAxNltzYSsyPj4xXT1faHRvbnMocG9ydCk7dGVtcEk2ND1bMD4+PjAsKHRlbXBEb3VibGU9MCwrTWF0aC5hYnModGVtcERvdWJsZSk+PTE/dGVtcERvdWJsZT4wPyhNYXRoLm1pbigrTWF0aC5mbG9vcih0ZW1wRG91YmxlLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpfDApPj4+MDp+fitNYXRoLmNlaWwoKHRlbXBEb3VibGUtKyh+fnRlbXBEb3VibGU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxIRUFQMzJbc2ErOD4+Ml09dGVtcEk2NFswXSxIRUFQMzJbc2ErMTI+PjJdPXRlbXBJNjRbMV07YnJlYWs7Y2FzZSAxMDphZGRyPWluZXRQdG9uNihhZGRyKTtpZihhZGRybGVuKXtIRUFQMzJbYWRkcmxlbj4+Ml09Mjh9SEVBUDMyW3NhPj4yXT1mYW1pbHk7SEVBUDMyW3NhKzg+PjJdPWFkZHJbMF07SEVBUDMyW3NhKzEyPj4yXT1hZGRyWzFdO0hFQVAzMltzYSsxNj4+Ml09YWRkclsyXTtIRUFQMzJbc2ErMjA+PjJdPWFkZHJbM107SEVBUDE2W3NhKzI+PjFdPV9odG9ucyhwb3J0KTtIRUFQMzJbc2ErND4+Ml09MDtIRUFQMzJbc2ErMjQ+PjJdPTA7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gNX1yZXR1cm4gMH12YXIgRE5TPXthZGRyZXNzX21hcDp7aWQ6MSxhZGRyczp7fSxuYW1lczp7fX0sbG9va3VwX25hbWU6ZnVuY3Rpb24obmFtZSl7dmFyIHJlcz1pbmV0UHRvbjQobmFtZSk7aWYocmVzIT09bnVsbCl7cmV0dXJuIG5hbWV9cmVzPWluZXRQdG9uNihuYW1lKTtpZihyZXMhPT1udWxsKXtyZXR1cm4gbmFtZX12YXIgYWRkcjtpZihETlMuYWRkcmVzc19tYXAuYWRkcnNbbmFtZV0pe2FkZHI9RE5TLmFkZHJlc3NfbWFwLmFkZHJzW25hbWVdfWVsc2V7dmFyIGlkPUROUy5hZGRyZXNzX21hcC5pZCsrO2Fzc2VydChpZDw2NTUzNSwiZXhjZWVkZWQgbWF4IGFkZHJlc3MgbWFwcGluZ3Mgb2YgNjU1MzUiKTthZGRyPSIxNzIuMjkuIisoaWQmMjU1KSsiLiIrKGlkJjY1MjgwKTtETlMuYWRkcmVzc19tYXAubmFtZXNbYWRkcl09bmFtZTtETlMuYWRkcmVzc19tYXAuYWRkcnNbbmFtZV09YWRkcn1yZXR1cm4gYWRkcn0sbG9va3VwX2FkZHI6ZnVuY3Rpb24oYWRkcil7aWYoRE5TLmFkZHJlc3NfbWFwLm5hbWVzW2FkZHJdKXtyZXR1cm4gRE5TLmFkZHJlc3NfbWFwLm5hbWVzW2FkZHJdfXJldHVybiBudWxsfX07ZnVuY3Rpb24gX19fc3lzX2FjY2VwdDQoZmQsYWRkcixhZGRybGVuLGZsYWdzKXt0cnl7dmFyIHNvY2s9Z2V0U29ja2V0RnJvbUZEKGZkKTt2YXIgbmV3c29jaz1zb2NrLnNvY2tfb3BzLmFjY2VwdChzb2NrKTtpZihhZGRyKXt2YXIgZXJybm89d3JpdGVTb2NrYWRkcihhZGRyLG5ld3NvY2suZmFtaWx5LEROUy5sb29rdXBfbmFtZShuZXdzb2NrLmRhZGRyKSxuZXdzb2NrLmRwb3J0LGFkZHJsZW4pfXJldHVybiBuZXdzb2NrLnN0cmVhbS5mZH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19hY2Nlc3MocGF0aCxhbW9kZSl7dHJ5e3BhdGg9U1lTQ0FMTFMuZ2V0U3RyKHBhdGgpO3JldHVybiBTWVNDQUxMUy5kb0FjY2VzcyhwYXRoLGFtb2RlKX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIGluZXROdG9wNChhZGRyKXtyZXR1cm4oYWRkciYyNTUpKyIuIisoYWRkcj4+OCYyNTUpKyIuIisoYWRkcj4+MTYmMjU1KSsiLiIrKGFkZHI+PjI0JjI1NSl9ZnVuY3Rpb24gaW5ldE50b3A2KGludHMpe3ZhciBzdHI9IiI7dmFyIHdvcmQ9MDt2YXIgbG9uZ2VzdD0wO3ZhciBsYXN0emVybz0wO3ZhciB6c3RhcnQ9MDt2YXIgbGVuPTA7dmFyIGk9MDt2YXIgcGFydHM9W2ludHNbMF0mNjU1MzUsaW50c1swXT4+MTYsaW50c1sxXSY2NTUzNSxpbnRzWzFdPj4xNixpbnRzWzJdJjY1NTM1LGludHNbMl0+PjE2LGludHNbM10mNjU1MzUsaW50c1szXT4+MTZdO3ZhciBoYXNpcHY0PXRydWU7dmFyIHY0cGFydD0iIjtmb3IoaT0wO2k8NTtpKyspe2lmKHBhcnRzW2ldIT09MCl7aGFzaXB2ND1mYWxzZTticmVha319aWYoaGFzaXB2NCl7djRwYXJ0PWluZXROdG9wNChwYXJ0c1s2XXxwYXJ0c1s3XTw8MTYpO2lmKHBhcnRzWzVdPT09LTEpe3N0cj0iOjpmZmZmOiI7c3RyKz12NHBhcnQ7cmV0dXJuIHN0cn1pZihwYXJ0c1s1XT09PTApe3N0cj0iOjoiO2lmKHY0cGFydD09PSIwLjAuMC4wIil2NHBhcnQ9IiI7aWYodjRwYXJ0PT09IjAuMC4wLjEiKXY0cGFydD0iMSI7c3RyKz12NHBhcnQ7cmV0dXJuIHN0cn19Zm9yKHdvcmQ9MDt3b3JkPDg7d29yZCsrKXtpZihwYXJ0c1t3b3JkXT09PTApe2lmKHdvcmQtbGFzdHplcm8+MSl7bGVuPTB9bGFzdHplcm89d29yZDtsZW4rK31pZihsZW4+bG9uZ2VzdCl7bG9uZ2VzdD1sZW47enN0YXJ0PXdvcmQtbG9uZ2VzdCsxfX1mb3Iod29yZD0wO3dvcmQ8ODt3b3JkKyspe2lmKGxvbmdlc3Q+MSl7aWYocGFydHNbd29yZF09PT0wJiZ3b3JkPj16c3RhcnQmJndvcmQ8enN0YXJ0K2xvbmdlc3Qpe2lmKHdvcmQ9PT16c3RhcnQpe3N0cis9IjoiO2lmKHpzdGFydD09PTApc3RyKz0iOiJ9Y29udGludWV9fXN0cis9TnVtYmVyKF9udG9ocyhwYXJ0c1t3b3JkXSY2NTUzNSkpLnRvU3RyaW5nKDE2KTtzdHIrPXdvcmQ8Nz8iOiI6IiJ9cmV0dXJuIHN0cn1mdW5jdGlvbiByZWFkU29ja2FkZHIoc2Esc2FsZW4pe3ZhciBmYW1pbHk9SEVBUDE2W3NhPj4xXTt2YXIgcG9ydD1fbnRvaHMoSEVBUFUxNltzYSsyPj4xXSk7dmFyIGFkZHI7c3dpdGNoKGZhbWlseSl7Y2FzZSAyOmlmKHNhbGVuIT09MTYpe3JldHVybntlcnJubzoyOH19YWRkcj1IRUFQMzJbc2ErND4+Ml07YWRkcj1pbmV0TnRvcDQoYWRkcik7YnJlYWs7Y2FzZSAxMDppZihzYWxlbiE9PTI4KXtyZXR1cm57ZXJybm86Mjh9fWFkZHI9W0hFQVAzMltzYSs4Pj4yXSxIRUFQMzJbc2ErMTI+PjJdLEhFQVAzMltzYSsxNj4+Ml0sSEVBUDMyW3NhKzIwPj4yXV07YWRkcj1pbmV0TnRvcDYoYWRkcik7YnJlYWs7ZGVmYXVsdDpyZXR1cm57ZXJybm86NX19cmV0dXJue2ZhbWlseTpmYW1pbHksYWRkcjphZGRyLHBvcnQ6cG9ydH19ZnVuY3Rpb24gZ2V0U29ja2V0QWRkcmVzcyhhZGRycCxhZGRybGVuLGFsbG93TnVsbCl7aWYoYWxsb3dOdWxsJiZhZGRycD09PTApcmV0dXJuIG51bGw7dmFyIGluZm89cmVhZFNvY2thZGRyKGFkZHJwLGFkZHJsZW4pO2lmKGluZm8uZXJybm8pdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoaW5mby5lcnJubyk7aW5mby5hZGRyPUROUy5sb29rdXBfYWRkcihpbmZvLmFkZHIpfHxpbmZvLmFkZHI7cmV0dXJuIGluZm99ZnVuY3Rpb24gX19fc3lzX2JpbmQoZmQsYWRkcixhZGRybGVuKXt0cnl7dmFyIHNvY2s9Z2V0U29ja2V0RnJvbUZEKGZkKTt2YXIgaW5mbz1nZXRTb2NrZXRBZGRyZXNzKGFkZHIsYWRkcmxlbik7c29jay5zb2NrX29wcy5iaW5kKHNvY2ssaW5mby5hZGRyLGluZm8ucG9ydCk7cmV0dXJuIDB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfY2htb2QocGF0aCxtb2RlKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7RlMuY2htb2QocGF0aCxtb2RlKTtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19jb25uZWN0KGZkLGFkZHIsYWRkcmxlbil7dHJ5e3ZhciBzb2NrPWdldFNvY2tldEZyb21GRChmZCk7dmFyIGluZm89Z2V0U29ja2V0QWRkcmVzcyhhZGRyLGFkZHJsZW4pO3NvY2suc29ja19vcHMuY29ubmVjdChzb2NrLGluZm8uYWRkcixpbmZvLnBvcnQpO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX2R1cDIob2xkZmQsc3VnZ2VzdEZEKXt0cnl7dmFyIG9sZD1TWVNDQUxMUy5nZXRTdHJlYW1Gcm9tRkQob2xkZmQpO2lmKG9sZC5mZD09PXN1Z2dlc3RGRClyZXR1cm4gc3VnZ2VzdEZEO3JldHVybiBTWVNDQUxMUy5kb0R1cChvbGQucGF0aCxvbGQuZmxhZ3Msc3VnZ2VzdEZEKX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19mY250bDY0KGZkLGNtZCx2YXJhcmdzKXtTWVNDQUxMUy52YXJhcmdzPXZhcmFyZ3M7dHJ5e3ZhciBzdHJlYW09U1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKGZkKTtzd2l0Y2goY21kKXtjYXNlIDA6e3ZhciBhcmc9U1lTQ0FMTFMuZ2V0KCk7aWYoYXJnPDApe3JldHVybi0yOH12YXIgbmV3U3RyZWFtO25ld1N0cmVhbT1GUy5vcGVuKHN0cmVhbS5wYXRoLHN0cmVhbS5mbGFncywwLGFyZyk7cmV0dXJuIG5ld1N0cmVhbS5mZH1jYXNlIDE6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gc3RyZWFtLmZsYWdzO2Nhc2UgNDp7dmFyIGFyZz1TWVNDQUxMUy5nZXQoKTtzdHJlYW0uZmxhZ3N8PWFyZztyZXR1cm4gMH1jYXNlIDEyOnt2YXIgYXJnPVNZU0NBTExTLmdldCgpO3ZhciBvZmZzZXQ9MDtIRUFQMTZbYXJnK29mZnNldD4+MV09MjtyZXR1cm4gMH1jYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDA7Y2FzZSAxNjpjYXNlIDg6cmV0dXJuLTI4O2Nhc2UgOTpzZXRFcnJObygyOCk7cmV0dXJuLTE7ZGVmYXVsdDp7cmV0dXJuLTI4fX19Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfZnN0YXQ2NChmZCxidWYpe3RyeXt2YXIgc3RyZWFtPVNZU0NBTExTLmdldFN0cmVhbUZyb21GRChmZCk7cmV0dXJuIFNZU0NBTExTLmRvU3RhdChGUy5zdGF0LHN0cmVhbS5wYXRoLGJ1Zil9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfZnRydW5jYXRlNjQoZmQsemVybyxsb3csaGlnaCl7dHJ5e3ZhciBsZW5ndGg9U1lTQ0FMTFMuZ2V0NjQobG93LGhpZ2gpO0ZTLmZ0cnVuY2F0ZShmZCxsZW5ndGgpO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX2dldGN3ZChidWYsc2l6ZSl7dHJ5e2lmKHNpemU9PT0wKXJldHVybi0yODt2YXIgY3dkPUZTLmN3ZCgpO3ZhciBjd2RMZW5ndGhJbkJ5dGVzPWxlbmd0aEJ5dGVzVVRGOChjd2QpO2lmKHNpemU8Y3dkTGVuZ3RoSW5CeXRlcysxKXJldHVybi02ODtzdHJpbmdUb1VURjgoY3dkLGJ1ZixzaXplKTtyZXR1cm4gYnVmfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX2dldGRlbnRzNjQoZmQsZGlycCxjb3VudCl7dHJ5e3ZhciBzdHJlYW09U1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKGZkKTtpZighc3RyZWFtLmdldGRlbnRzKXtzdHJlYW0uZ2V0ZGVudHM9RlMucmVhZGRpcihzdHJlYW0ucGF0aCl9dmFyIHN0cnVjdF9zaXplPTI4MDt2YXIgcG9zPTA7dmFyIG9mZj1GUy5sbHNlZWsoc3RyZWFtLDAsMSk7dmFyIGlkeD1NYXRoLmZsb29yKG9mZi9zdHJ1Y3Rfc2l6ZSk7d2hpbGUoaWR4PHN0cmVhbS5nZXRkZW50cy5sZW5ndGgmJnBvcytzdHJ1Y3Rfc2l6ZTw9Y291bnQpe3ZhciBpZDt2YXIgdHlwZTt2YXIgbmFtZT1zdHJlYW0uZ2V0ZGVudHNbaWR4XTtpZihuYW1lWzBdPT09Ii4iKXtpZD0xO3R5cGU9NH1lbHNle3ZhciBjaGlsZD1GUy5sb29rdXBOb2RlKHN0cmVhbS5ub2RlLG5hbWUpO2lkPWNoaWxkLmlkO3R5cGU9RlMuaXNDaHJkZXYoY2hpbGQubW9kZSk/MjpGUy5pc0RpcihjaGlsZC5tb2RlKT80OkZTLmlzTGluayhjaGlsZC5tb2RlKT8xMDo4fXRlbXBJNjQ9W2lkPj4+MCwodGVtcERvdWJsZT1pZCwrTWF0aC5hYnModGVtcERvdWJsZSk+PTE/dGVtcERvdWJsZT4wPyhNYXRoLm1pbigrTWF0aC5mbG9vcih0ZW1wRG91YmxlLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpfDApPj4+MDp+fitNYXRoLmNlaWwoKHRlbXBEb3VibGUtKyh+fnRlbXBEb3VibGU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxIRUFQMzJbZGlycCtwb3M+PjJdPXRlbXBJNjRbMF0sSEVBUDMyW2RpcnArcG9zKzQ+PjJdPXRlbXBJNjRbMV07dGVtcEk2ND1bKGlkeCsxKSpzdHJ1Y3Rfc2l6ZT4+PjAsKHRlbXBEb3VibGU9KGlkeCsxKSpzdHJ1Y3Rfc2l6ZSwrTWF0aC5hYnModGVtcERvdWJsZSk+PTE/dGVtcERvdWJsZT4wPyhNYXRoLm1pbigrTWF0aC5mbG9vcih0ZW1wRG91YmxlLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpfDApPj4+MDp+fitNYXRoLmNlaWwoKHRlbXBEb3VibGUtKyh+fnRlbXBEb3VibGU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxIRUFQMzJbZGlycCtwb3MrOD4+Ml09dGVtcEk2NFswXSxIRUFQMzJbZGlycCtwb3MrMTI+PjJdPXRlbXBJNjRbMV07SEVBUDE2W2RpcnArcG9zKzE2Pj4xXT0yODA7SEVBUDhbZGlycCtwb3MrMTg+PjBdPXR5cGU7c3RyaW5nVG9VVEY4KG5hbWUsZGlycCtwb3MrMTksMjU2KTtwb3MrPXN0cnVjdF9zaXplO2lkeCs9MX1GUy5sbHNlZWsoc3RyZWFtLGlkeCpzdHJ1Y3Rfc2l6ZSwwKTtyZXR1cm4gcG9zfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX2dldGVnaWQzMigpe3JldHVybiAwfWZ1bmN0aW9uIF9fX3N5c19nZXRldWlkMzIoKXtyZXR1cm4gX19fc3lzX2dldGVnaWQzMigpfWZ1bmN0aW9uIF9fX3N5c19nZXRwZWVybmFtZShmZCxhZGRyLGFkZHJsZW4pe3RyeXt2YXIgc29jaz1nZXRTb2NrZXRGcm9tRkQoZmQpO2lmKCFzb2NrLmRhZGRyKXtyZXR1cm4tNTN9dmFyIGVycm5vPXdyaXRlU29ja2FkZHIoYWRkcixzb2NrLmZhbWlseSxETlMubG9va3VwX25hbWUoc29jay5kYWRkciksc29jay5kcG9ydCxhZGRybGVuKTtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19nZXRydXNhZ2Uod2hvLHVzYWdlKXt0cnl7X21lbXNldCh1c2FnZSwwLDEzNik7SEVBUDMyW3VzYWdlPj4yXT0xO0hFQVAzMlt1c2FnZSs0Pj4yXT0yO0hFQVAzMlt1c2FnZSs4Pj4yXT0zO0hFQVAzMlt1c2FnZSsxMj4+Ml09NDtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19nZXRzb2NrbmFtZShmZCxhZGRyLGFkZHJsZW4pe3RyeXtlcnIoIl9fc3lzX2dldHNvY2tuYW1lICIrZmQpO3ZhciBzb2NrPWdldFNvY2tldEZyb21GRChmZCk7dmFyIGVycm5vPXdyaXRlU29ja2FkZHIoYWRkcixzb2NrLmZhbWlseSxETlMubG9va3VwX25hbWUoc29jay5zYWRkcnx8IjAuMC4wLjAiKSxzb2NrLnNwb3J0LGFkZHJsZW4pO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX2dldHNvY2tvcHQoZmQsbGV2ZWwsb3B0bmFtZSxvcHR2YWwsb3B0bGVuKXt0cnl7dmFyIHNvY2s9Z2V0U29ja2V0RnJvbUZEKGZkKTtpZihsZXZlbD09PTEpe2lmKG9wdG5hbWU9PT00KXtIRUFQMzJbb3B0dmFsPj4yXT1zb2NrLmVycm9yO0hFQVAzMltvcHRsZW4+PjJdPTQ7c29jay5lcnJvcj1udWxsO3JldHVybiAwfX1yZXR1cm4tNTB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfZ2V0dWlkMzIoKXtyZXR1cm4gX19fc3lzX2dldGVnaWQzMigpfWZ1bmN0aW9uIF9fX3N5c19pb2N0bChmZCxvcCx2YXJhcmdzKXtTWVNDQUxMUy52YXJhcmdzPXZhcmFyZ3M7dHJ5e3ZhciBzdHJlYW09U1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKGZkKTtzd2l0Y2gob3Ape2Nhc2UgMjE1MDk6Y2FzZSAyMTUwNTp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLTU5O3JldHVybiAwfWNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OntpZighc3RyZWFtLnR0eSlyZXR1cm4tNTk7cmV0dXJuIDB9Y2FzZSAyMTUxOTp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLTU5O3ZhciBhcmdwPVNZU0NBTExTLmdldCgpO0hFQVAzMlthcmdwPj4yXT0wO3JldHVybiAwfWNhc2UgMjE1MjA6e2lmKCFzdHJlYW0udHR5KXJldHVybi01OTtyZXR1cm4tMjh9Y2FzZSAyMTUzMTp7dmFyIGFyZ3A9U1lTQ0FMTFMuZ2V0KCk7cmV0dXJuIEZTLmlvY3RsKHN0cmVhbSxvcCxhcmdwKX1jYXNlIDIxNTIzOntpZighc3RyZWFtLnR0eSlyZXR1cm4tNTk7cmV0dXJuIDB9Y2FzZSAyMTUyNDp7aWYoIXN0cmVhbS50dHkpcmV0dXJuLTU5O3JldHVybiAwfWRlZmF1bHQ6YWJvcnQoImJhZCBpb2N0bCBzeXNjYWxsICIrb3ApfX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19saXN0ZW4oZmQsYmFja2xvZyl7dHJ5e3ZhciBzb2NrPWdldFNvY2tldEZyb21GRChmZCk7c29jay5zb2NrX29wcy5saXN0ZW4oc29jayxiYWNrbG9nKTtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19sc3RhdDY0KHBhdGgsYnVmKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7cmV0dXJuIFNZU0NBTExTLmRvU3RhdChGUy5sc3RhdCxwYXRoLGJ1Zil9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfbWtkaXIocGF0aCxtb2RlKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7cmV0dXJuIFNZU0NBTExTLmRvTWtkaXIocGF0aCxtb2RlKX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIHN5c2NhbGxNbWFwMihhZGRyLGxlbixwcm90LGZsYWdzLGZkLG9mZil7b2ZmPDw9MTI7dmFyIHB0cjt2YXIgYWxsb2NhdGVkPWZhbHNlO2lmKChmbGFncyYxNikhPT0wJiZhZGRyJTY1NTM2IT09MCl7cmV0dXJuLTI4fWlmKChmbGFncyYzMikhPT0wKXtwdHI9X21lbWFsaWduKDY1NTM2LGxlbik7aWYoIXB0cilyZXR1cm4tNDg7X21lbXNldChwdHIsMCxsZW4pO2FsbG9jYXRlZD10cnVlfWVsc2V7dmFyIGluZm89RlMuZ2V0U3RyZWFtKGZkKTtpZighaW5mbylyZXR1cm4tODt2YXIgcmVzPUZTLm1tYXAoaW5mbyxhZGRyLGxlbixvZmYscHJvdCxmbGFncyk7cHRyPXJlcy5wdHI7YWxsb2NhdGVkPXJlcy5hbGxvY2F0ZWR9U1lTQ0FMTFMubWFwcGluZ3NbcHRyXT17bWFsbG9jOnB0cixsZW46bGVuLGFsbG9jYXRlZDphbGxvY2F0ZWQsZmQ6ZmQscHJvdDpwcm90LGZsYWdzOmZsYWdzLG9mZnNldDpvZmZ9O3JldHVybiBwdHJ9ZnVuY3Rpb24gX19fc3lzX21tYXAyKGFkZHIsbGVuLHByb3QsZmxhZ3MsZmQsb2ZmKXt0cnl7cmV0dXJuIHN5c2NhbGxNbWFwMihhZGRyLGxlbixwcm90LGZsYWdzLGZkLG9mZil9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBzeXNjYWxsTXVubWFwKGFkZHIsbGVuKXtpZigoYWRkcnwwKT09PS0xfHxsZW49PT0wKXtyZXR1cm4tMjh9dmFyIGluZm89U1lTQ0FMTFMubWFwcGluZ3NbYWRkcl07aWYoIWluZm8pcmV0dXJuIDA7aWYobGVuPT09aW5mby5sZW4pe3ZhciBzdHJlYW09RlMuZ2V0U3RyZWFtKGluZm8uZmQpO2lmKHN0cmVhbSl7aWYoaW5mby5wcm90JjIpe1NZU0NBTExTLmRvTXN5bmMoYWRkcixzdHJlYW0sbGVuLGluZm8uZmxhZ3MsaW5mby5vZmZzZXQpfUZTLm11bm1hcChzdHJlYW0pfVNZU0NBTExTLm1hcHBpbmdzW2FkZHJdPW51bGw7aWYoaW5mby5hbGxvY2F0ZWQpe19mcmVlKGluZm8ubWFsbG9jKX19cmV0dXJuIDB9ZnVuY3Rpb24gX19fc3lzX211bm1hcChhZGRyLGxlbil7dHJ5e3JldHVybiBzeXNjYWxsTXVubWFwKGFkZHIsbGVuKX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19vcGVuKHBhdGgsZmxhZ3MsdmFyYXJncyl7U1lTQ0FMTFMudmFyYXJncz12YXJhcmdzO3RyeXt2YXIgcGF0aG5hbWU9U1lTQ0FMTFMuZ2V0U3RyKHBhdGgpO3ZhciBtb2RlPXZhcmFyZ3M/U1lTQ0FMTFMuZ2V0KCk6MDt2YXIgc3RyZWFtPUZTLm9wZW4ocGF0aG5hbWUsZmxhZ3MsbW9kZSk7cmV0dXJuIHN0cmVhbS5mZH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fXZhciBQSVBFRlM9e0JVQ0tFVF9CVUZGRVJfU0laRTo4MTkyLG1vdW50OmZ1bmN0aW9uKG1vdW50KXtyZXR1cm4gRlMuY3JlYXRlTm9kZShudWxsLCIvIiwxNjM4NHw1MTEsMCl9LGNyZWF0ZVBpcGU6ZnVuY3Rpb24oKXt2YXIgcGlwZT17YnVja2V0czpbXX07cGlwZS5idWNrZXRzLnB1c2goe2J1ZmZlcjpuZXcgVWludDhBcnJheShQSVBFRlMuQlVDS0VUX0JVRkZFUl9TSVpFKSxvZmZzZXQ6MCxyb2Zmc2V0OjB9KTt2YXIgck5hbWU9UElQRUZTLm5leHRuYW1lKCk7dmFyIHdOYW1lPVBJUEVGUy5uZXh0bmFtZSgpO3ZhciByTm9kZT1GUy5jcmVhdGVOb2RlKFBJUEVGUy5yb290LHJOYW1lLDQwOTYsMCk7dmFyIHdOb2RlPUZTLmNyZWF0ZU5vZGUoUElQRUZTLnJvb3Qsd05hbWUsNDA5NiwwKTtyTm9kZS5waXBlPXBpcGU7d05vZGUucGlwZT1waXBlO3ZhciByZWFkYWJsZVN0cmVhbT1GUy5jcmVhdGVTdHJlYW0oe3BhdGg6ck5hbWUsbm9kZTpyTm9kZSxmbGFnczowLHNlZWthYmxlOmZhbHNlLHN0cmVhbV9vcHM6UElQRUZTLnN0cmVhbV9vcHN9KTtyTm9kZS5zdHJlYW09cmVhZGFibGVTdHJlYW07dmFyIHdyaXRhYmxlU3RyZWFtPUZTLmNyZWF0ZVN0cmVhbSh7cGF0aDp3TmFtZSxub2RlOndOb2RlLGZsYWdzOjEsc2Vla2FibGU6ZmFsc2Usc3RyZWFtX29wczpQSVBFRlMuc3RyZWFtX29wc30pO3dOb2RlLnN0cmVhbT13cml0YWJsZVN0cmVhbTtyZXR1cm57cmVhZGFibGVfZmQ6cmVhZGFibGVTdHJlYW0uZmQsd3JpdGFibGVfZmQ6d3JpdGFibGVTdHJlYW0uZmR9fSxzdHJlYW1fb3BzOntwb2xsOmZ1bmN0aW9uKHN0cmVhbSl7dmFyIHBpcGU9c3RyZWFtLm5vZGUucGlwZTtpZigoc3RyZWFtLmZsYWdzJjIwOTcxNTUpPT09MSl7cmV0dXJuIDI1Nnw0fWVsc2V7aWYocGlwZS5idWNrZXRzLmxlbmd0aD4wKXtmb3IodmFyIGk9MDtpPHBpcGUuYnVja2V0cy5sZW5ndGg7aSsrKXt2YXIgYnVja2V0PXBpcGUuYnVja2V0c1tpXTtpZihidWNrZXQub2Zmc2V0LWJ1Y2tldC5yb2Zmc2V0PjApe3JldHVybiA2NHwxfX19fXJldHVybiAwfSxpb2N0bDpmdW5jdGlvbihzdHJlYW0scmVxdWVzdCx2YXJhcmdzKXtyZXR1cm4gRVJSTk9fQ09ERVMuRUlOVkFMfSxmc3luYzpmdW5jdGlvbihzdHJlYW0pe3JldHVybiBFUlJOT19DT0RFUy5FSU5WQUx9LHJlYWQ6ZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uKXt2YXIgcGlwZT1zdHJlYW0ubm9kZS5waXBlO3ZhciBjdXJyZW50TGVuZ3RoPTA7Zm9yKHZhciBpPTA7aTxwaXBlLmJ1Y2tldHMubGVuZ3RoO2krKyl7dmFyIGJ1Y2tldD1waXBlLmJ1Y2tldHNbaV07Y3VycmVudExlbmd0aCs9YnVja2V0Lm9mZnNldC1idWNrZXQucm9mZnNldH1hc3NlcnQoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyLmlzVmlldyhidWZmZXIpKTt2YXIgZGF0YT1idWZmZXIuc3ViYXJyYXkob2Zmc2V0LG9mZnNldCtsZW5ndGgpO2lmKGxlbmd0aDw9MCl7cmV0dXJuIDB9aWYoY3VycmVudExlbmd0aD09MCl7dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUFHQUlOKX12YXIgdG9SZWFkPU1hdGgubWluKGN1cnJlbnRMZW5ndGgsbGVuZ3RoKTt2YXIgdG90YWxSZWFkPXRvUmVhZDt2YXIgdG9SZW1vdmU9MDtmb3IodmFyIGk9MDtpPHBpcGUuYnVja2V0cy5sZW5ndGg7aSsrKXt2YXIgY3VyckJ1Y2tldD1waXBlLmJ1Y2tldHNbaV07dmFyIGJ1Y2tldFNpemU9Y3VyckJ1Y2tldC5vZmZzZXQtY3VyckJ1Y2tldC5yb2Zmc2V0O2lmKHRvUmVhZDw9YnVja2V0U2l6ZSl7dmFyIHRtcFNsaWNlPWN1cnJCdWNrZXQuYnVmZmVyLnN1YmFycmF5KGN1cnJCdWNrZXQucm9mZnNldCxjdXJyQnVja2V0Lm9mZnNldCk7aWYodG9SZWFkPGJ1Y2tldFNpemUpe3RtcFNsaWNlPXRtcFNsaWNlLnN1YmFycmF5KDAsdG9SZWFkKTtjdXJyQnVja2V0LnJvZmZzZXQrPXRvUmVhZH1lbHNle3RvUmVtb3ZlKyt9ZGF0YS5zZXQodG1wU2xpY2UpO2JyZWFrfWVsc2V7dmFyIHRtcFNsaWNlPWN1cnJCdWNrZXQuYnVmZmVyLnN1YmFycmF5KGN1cnJCdWNrZXQucm9mZnNldCxjdXJyQnVja2V0Lm9mZnNldCk7ZGF0YS5zZXQodG1wU2xpY2UpO2RhdGE9ZGF0YS5zdWJhcnJheSh0bXBTbGljZS5ieXRlTGVuZ3RoKTt0b1JlYWQtPXRtcFNsaWNlLmJ5dGVMZW5ndGg7dG9SZW1vdmUrK319aWYodG9SZW1vdmUmJnRvUmVtb3ZlPT1waXBlLmJ1Y2tldHMubGVuZ3RoKXt0b1JlbW92ZS0tO3BpcGUuYnVja2V0c1t0b1JlbW92ZV0ub2Zmc2V0PTA7cGlwZS5idWNrZXRzW3RvUmVtb3ZlXS5yb2Zmc2V0PTB9cGlwZS5idWNrZXRzLnNwbGljZSgwLHRvUmVtb3ZlKTtyZXR1cm4gdG90YWxSZWFkfSx3cml0ZTpmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe3ZhciBwaXBlPXN0cmVhbS5ub2RlLnBpcGU7YXNzZXJ0KGJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmZmVyKSk7dmFyIGRhdGE9YnVmZmVyLnN1YmFycmF5KG9mZnNldCxvZmZzZXQrbGVuZ3RoKTt2YXIgZGF0YUxlbj1kYXRhLmJ5dGVMZW5ndGg7aWYoZGF0YUxlbjw9MCl7cmV0dXJuIDB9dmFyIGN1cnJCdWNrZXQ9bnVsbDtpZihwaXBlLmJ1Y2tldHMubGVuZ3RoPT0wKXtjdXJyQnVja2V0PXtidWZmZXI6bmV3IFVpbnQ4QXJyYXkoUElQRUZTLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OjAscm9mZnNldDowfTtwaXBlLmJ1Y2tldHMucHVzaChjdXJyQnVja2V0KX1lbHNle2N1cnJCdWNrZXQ9cGlwZS5idWNrZXRzW3BpcGUuYnVja2V0cy5sZW5ndGgtMV19YXNzZXJ0KGN1cnJCdWNrZXQub2Zmc2V0PD1QSVBFRlMuQlVDS0VUX0JVRkZFUl9TSVpFKTt2YXIgZnJlZUJ5dGVzSW5DdXJyQnVmZmVyPVBJUEVGUy5CVUNLRVRfQlVGRkVSX1NJWkUtY3VyckJ1Y2tldC5vZmZzZXQ7aWYoZnJlZUJ5dGVzSW5DdXJyQnVmZmVyPj1kYXRhTGVuKXtjdXJyQnVja2V0LmJ1ZmZlci5zZXQoZGF0YSxjdXJyQnVja2V0Lm9mZnNldCk7Y3VyckJ1Y2tldC5vZmZzZXQrPWRhdGFMZW47cmV0dXJuIGRhdGFMZW59ZWxzZSBpZihmcmVlQnl0ZXNJbkN1cnJCdWZmZXI+MCl7Y3VyckJ1Y2tldC5idWZmZXIuc2V0KGRhdGEuc3ViYXJyYXkoMCxmcmVlQnl0ZXNJbkN1cnJCdWZmZXIpLGN1cnJCdWNrZXQub2Zmc2V0KTtjdXJyQnVja2V0Lm9mZnNldCs9ZnJlZUJ5dGVzSW5DdXJyQnVmZmVyO2RhdGE9ZGF0YS5zdWJhcnJheShmcmVlQnl0ZXNJbkN1cnJCdWZmZXIsZGF0YS5ieXRlTGVuZ3RoKX12YXIgbnVtQnVja2V0cz1kYXRhLmJ5dGVMZW5ndGgvUElQRUZTLkJVQ0tFVF9CVUZGRVJfU0laRXwwO3ZhciByZW1FbGVtZW50cz1kYXRhLmJ5dGVMZW5ndGglUElQRUZTLkJVQ0tFVF9CVUZGRVJfU0laRTtmb3IodmFyIGk9MDtpPG51bUJ1Y2tldHM7aSsrKXt2YXIgbmV3QnVja2V0PXtidWZmZXI6bmV3IFVpbnQ4QXJyYXkoUElQRUZTLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OlBJUEVGUy5CVUNLRVRfQlVGRkVSX1NJWkUscm9mZnNldDowfTtwaXBlLmJ1Y2tldHMucHVzaChuZXdCdWNrZXQpO25ld0J1Y2tldC5idWZmZXIuc2V0KGRhdGEuc3ViYXJyYXkoMCxQSVBFRlMuQlVDS0VUX0JVRkZFUl9TSVpFKSk7ZGF0YT1kYXRhLnN1YmFycmF5KFBJUEVGUy5CVUNLRVRfQlVGRkVSX1NJWkUsZGF0YS5ieXRlTGVuZ3RoKX1pZihyZW1FbGVtZW50cz4wKXt2YXIgbmV3QnVja2V0PXtidWZmZXI6bmV3IFVpbnQ4QXJyYXkoUElQRUZTLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OmRhdGEuYnl0ZUxlbmd0aCxyb2Zmc2V0OjB9O3BpcGUuYnVja2V0cy5wdXNoKG5ld0J1Y2tldCk7bmV3QnVja2V0LmJ1ZmZlci5zZXQoZGF0YSl9cmV0dXJuIGRhdGFMZW59LGNsb3NlOmZ1bmN0aW9uKHN0cmVhbSl7dmFyIHBpcGU9c3RyZWFtLm5vZGUucGlwZTtwaXBlLmJ1Y2tldHM9bnVsbH19LG5leHRuYW1lOmZ1bmN0aW9uKCl7aWYoIVBJUEVGUy5uZXh0bmFtZS5jdXJyZW50KXtQSVBFRlMubmV4dG5hbWUuY3VycmVudD0wfXJldHVybiJwaXBlWyIrUElQRUZTLm5leHRuYW1lLmN1cnJlbnQrKysiXSJ9fTtmdW5jdGlvbiBfX19zeXNfcGlwZShmZFB0cil7dHJ5e2lmKGZkUHRyPT0wKXt0aHJvdyBuZXcgRlMuRXJybm9FcnJvcigyMSl9dmFyIHJlcz1QSVBFRlMuY3JlYXRlUGlwZSgpO0hFQVAzMltmZFB0cj4+Ml09cmVzLnJlYWRhYmxlX2ZkO0hFQVAzMltmZFB0cis0Pj4yXT1yZXMud3JpdGFibGVfZmQ7cmV0dXJuIDB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfcG9sbChmZHMsbmZkcyx0aW1lb3V0KXt0cnl7dmFyIG5vbnplcm89MDtmb3IodmFyIGk9MDtpPG5mZHM7aSsrKXt2YXIgcG9sbGZkPWZkcys4Kmk7dmFyIGZkPUhFQVAzMltwb2xsZmQ+PjJdO3ZhciBldmVudHM9SEVBUDE2W3BvbGxmZCs0Pj4xXTt2YXIgbWFzaz0zMjt2YXIgc3RyZWFtPUZTLmdldFN0cmVhbShmZCk7aWYoc3RyZWFtKXttYXNrPVNZU0NBTExTLkRFRkFVTFRfUE9MTE1BU0s7aWYoc3RyZWFtLnN0cmVhbV9vcHMucG9sbCl7bWFzaz1zdHJlYW0uc3RyZWFtX29wcy5wb2xsKHN0cmVhbSl9fW1hc2smPWV2ZW50c3w4fDE2O2lmKG1hc2spbm9uemVybysrO0hFQVAxNltwb2xsZmQrNj4+MV09bWFza31yZXR1cm4gbm9uemVyb31jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19yZWFkbGluayhwYXRoLGJ1ZixidWZzaXplKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7cmV0dXJuIFNZU0NBTExTLmRvUmVhZGxpbmsocGF0aCxidWYsYnVmc2l6ZSl9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfcmVjdmZyb20oZmQsYnVmLGxlbixmbGFncyxhZGRyLGFkZHJsZW4pe3RyeXt2YXIgc29jaz1nZXRTb2NrZXRGcm9tRkQoZmQpO3ZhciBtc2c9c29jay5zb2NrX29wcy5yZWN2bXNnKHNvY2ssbGVuKTtpZighbXNnKXJldHVybiAwO2lmKGFkZHIpe3ZhciBlcnJubz13cml0ZVNvY2thZGRyKGFkZHIsc29jay5mYW1pbHksRE5TLmxvb2t1cF9uYW1lKG1zZy5hZGRyKSxtc2cucG9ydCxhZGRybGVuKX1IRUFQVTguc2V0KG1zZy5idWZmZXIsYnVmKTtyZXR1cm4gbXNnLmJ1ZmZlci5ieXRlTGVuZ3RofWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX3JlY3Ztc2coZmQsbWVzc2FnZSxmbGFncyl7dHJ5e3ZhciBzb2NrPWdldFNvY2tldEZyb21GRChmZCk7dmFyIGlvdj1IRUFQMzJbbWVzc2FnZSs4Pj4yXTt2YXIgbnVtPUhFQVAzMlttZXNzYWdlKzEyPj4yXTt2YXIgdG90YWw9MDtmb3IodmFyIGk9MDtpPG51bTtpKyspe3RvdGFsKz1IRUFQMzJbaW92Kyg4KmkrNCk+PjJdfXZhciBtc2c9c29jay5zb2NrX29wcy5yZWN2bXNnKHNvY2ssdG90YWwpO2lmKCFtc2cpcmV0dXJuIDA7dmFyIG5hbWU9SEVBUDMyW21lc3NhZ2U+PjJdO2lmKG5hbWUpe3ZhciBlcnJubz13cml0ZVNvY2thZGRyKG5hbWUsc29jay5mYW1pbHksRE5TLmxvb2t1cF9uYW1lKG1zZy5hZGRyKSxtc2cucG9ydCl9dmFyIGJ5dGVzUmVhZD0wO3ZhciBieXRlc1JlbWFpbmluZz1tc2cuYnVmZmVyLmJ5dGVMZW5ndGg7Zm9yKHZhciBpPTA7Ynl0ZXNSZW1haW5pbmc+MCYmaTxudW07aSsrKXt2YXIgaW92YmFzZT1IRUFQMzJbaW92Kyg4KmkrMCk+PjJdO3ZhciBpb3ZsZW49SEVBUDMyW2lvdisoOCppKzQpPj4yXTtpZighaW92bGVuKXtjb250aW51ZX12YXIgbGVuZ3RoPU1hdGgubWluKGlvdmxlbixieXRlc1JlbWFpbmluZyk7dmFyIGJ1Zj1tc2cuYnVmZmVyLnN1YmFycmF5KGJ5dGVzUmVhZCxieXRlc1JlYWQrbGVuZ3RoKTtIRUFQVTguc2V0KGJ1Zixpb3ZiYXNlK2J5dGVzUmVhZCk7Ynl0ZXNSZWFkKz1sZW5ndGg7Ynl0ZXNSZW1haW5pbmctPWxlbmd0aH1yZXR1cm4gYnl0ZXNSZWFkfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX3JlbmFtZShvbGRfcGF0aCxuZXdfcGF0aCl7dHJ5e29sZF9wYXRoPVNZU0NBTExTLmdldFN0cihvbGRfcGF0aCk7bmV3X3BhdGg9U1lTQ0FMTFMuZ2V0U3RyKG5ld19wYXRoKTtGUy5yZW5hbWUob2xkX3BhdGgsbmV3X3BhdGgpO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX3JtZGlyKHBhdGgpe3RyeXtwYXRoPVNZU0NBTExTLmdldFN0cihwYXRoKTtGUy5ybWRpcihwYXRoKTtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19zZW5kbXNnKGZkLG1lc3NhZ2UsZmxhZ3Mpe3RyeXt2YXIgc29jaz1nZXRTb2NrZXRGcm9tRkQoZmQpO3ZhciBpb3Y9SEVBUDMyW21lc3NhZ2UrOD4+Ml07dmFyIG51bT1IRUFQMzJbbWVzc2FnZSsxMj4+Ml07dmFyIGFkZHIscG9ydDt2YXIgbmFtZT1IRUFQMzJbbWVzc2FnZT4+Ml07dmFyIG5hbWVsZW49SEVBUDMyW21lc3NhZ2UrND4+Ml07aWYobmFtZSl7dmFyIGluZm89cmVhZFNvY2thZGRyKG5hbWUsbmFtZWxlbik7aWYoaW5mby5lcnJubylyZXR1cm4taW5mby5lcnJubztwb3J0PWluZm8ucG9ydDthZGRyPUROUy5sb29rdXBfYWRkcihpbmZvLmFkZHIpfHxpbmZvLmFkZHJ9dmFyIHRvdGFsPTA7Zm9yKHZhciBpPTA7aTxudW07aSsrKXt0b3RhbCs9SEVBUDMyW2lvdisoOCppKzQpPj4yXX12YXIgdmlldz1uZXcgVWludDhBcnJheSh0b3RhbCk7dmFyIG9mZnNldD0wO2Zvcih2YXIgaT0wO2k8bnVtO2krKyl7dmFyIGlvdmJhc2U9SEVBUDMyW2lvdisoOCppKzApPj4yXTt2YXIgaW92bGVuPUhFQVAzMltpb3YrKDgqaSs0KT4+Ml07Zm9yKHZhciBqPTA7ajxpb3ZsZW47aisrKXt2aWV3W29mZnNldCsrXT1IRUFQOFtpb3ZiYXNlK2o+PjBdfX1yZXR1cm4gc29jay5zb2NrX29wcy5zZW5kbXNnKHNvY2ssdmlldywwLHRvdGFsLGFkZHIscG9ydCl9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfc2VuZHRvKGZkLG1lc3NhZ2UsbGVuZ3RoLGZsYWdzLGFkZHIsYWRkcl9sZW4pe3RyeXt2YXIgc29jaz1nZXRTb2NrZXRGcm9tRkQoZmQpO3ZhciBkZXN0PWdldFNvY2tldEFkZHJlc3MoYWRkcixhZGRyX2xlbix0cnVlKTtpZighZGVzdCl7cmV0dXJuIEZTLndyaXRlKHNvY2suc3RyZWFtLEhFQVA4LG1lc3NhZ2UsbGVuZ3RoKX1lbHNle3JldHVybiBzb2NrLnNvY2tfb3BzLnNlbmRtc2coc29jayxIRUFQOCxtZXNzYWdlLGxlbmd0aCxkZXN0LmFkZHIsZGVzdC5wb3J0KX19Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfc2V0c29ja29wdChmZCl7dHJ5e3JldHVybi01MH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19zaHV0ZG93bihmZCxob3cpe3RyeXtnZXRTb2NrZXRGcm9tRkQoZmQpO3JldHVybi01Mn1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19zb2NrZXQoZG9tYWluLHR5cGUscHJvdG9jb2wpe3RyeXt2YXIgc29jaz1TT0NLRlMuY3JlYXRlU29ja2V0KGRvbWFpbix0eXBlLHByb3RvY29sKTtyZXR1cm4gc29jay5zdHJlYW0uZmR9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfc3RhdDY0KHBhdGgsYnVmKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7cmV0dXJuIFNZU0NBTExTLmRvU3RhdChGUy5zdGF0LHBhdGgsYnVmKX1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuLWUuZXJybm99fWZ1bmN0aW9uIF9fX3N5c19zdGF0ZnM2NChwYXRoLHNpemUsYnVmKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7SEVBUDMyW2J1Zis0Pj4yXT00MDk2O0hFQVAzMltidWYrNDA+PjJdPTQwOTY7SEVBUDMyW2J1Zis4Pj4yXT0xZTY7SEVBUDMyW2J1ZisxMj4+Ml09NWU1O0hFQVAzMltidWYrMTY+PjJdPTVlNTtIRUFQMzJbYnVmKzIwPj4yXT1GUy5uZXh0SW5vZGU7SEVBUDMyW2J1ZisyND4+Ml09MWU2O0hFQVAzMltidWYrMjg+PjJdPTQyO0hFQVAzMltidWYrNDQ+PjJdPTI7SEVBUDMyW2J1ZiszNj4+Ml09MjU1O3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX3RydW5jYXRlNjQocGF0aCx6ZXJvLGxvdyxoaWdoKXt0cnl7cGF0aD1TWVNDQUxMUy5nZXRTdHIocGF0aCk7dmFyIGxlbmd0aD1TWVNDQUxMUy5nZXQ2NChsb3csaGlnaCk7RlMudHJ1bmNhdGUocGF0aCxsZW5ndGgpO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4tZS5lcnJub319ZnVuY3Rpb24gX19fc3lzX3VuYW1lKGJ1Zil7dHJ5e2lmKCFidWYpcmV0dXJuLTIxO3ZhciBsYXlvdXQ9eyJfX3NpemVfXyI6MzkwLCJkb21haW5uYW1lIjozMjUsIm1hY2hpbmUiOjI2MCwibm9kZW5hbWUiOjY1LCJyZWxlYXNlIjoxMzAsInN5c25hbWUiOjAsInZlcnNpb24iOjE5NX07dmFyIGNvcHlTdHJpbmc9ZnVuY3Rpb24oZWxlbWVudCx2YWx1ZSl7dmFyIG9mZnNldD1sYXlvdXRbZWxlbWVudF07d3JpdGVBc2NpaVRvTWVtb3J5KHZhbHVlLGJ1ZitvZmZzZXQpfTtjb3B5U3RyaW5nKCJzeXNuYW1lIiwiRW1zY3JpcHRlbiIpO2NvcHlTdHJpbmcoIm5vZGVuYW1lIiwiZW1zY3JpcHRlbiIpO2NvcHlTdHJpbmcoInJlbGVhc2UiLCIxLjAiKTtjb3B5U3RyaW5nKCJ2ZXJzaW9uIiwiIzEiKTtjb3B5U3RyaW5nKCJtYWNoaW5lIiwid2FzbTMyIik7cmV0dXJuIDB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfX19zeXNfdW5saW5rKHBhdGgpe3RyeXtwYXRoPVNZU0NBTExTLmdldFN0cihwYXRoKTtGUy51bmxpbmsocGF0aCk7cmV0dXJuIDB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybi1lLmVycm5vfX1mdW5jdGlvbiBfYWJvcnQoKXthYm9ydCgpfWZ1bmN0aW9uIF9jbG9jaygpe2lmKF9jbG9jay5zdGFydD09PXVuZGVmaW5lZClfY2xvY2suc3RhcnQ9RGF0ZS5ub3coKTtyZXR1cm4oRGF0ZS5ub3coKS1fY2xvY2suc3RhcnQpKigxZTYvMWUzKXwwfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2dldF9ub3dfcmVzKCl7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7cmV0dXJuIDF9ZWxzZSBpZih0eXBlb2YgZGF0ZU5vdyE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gMWUzfWVsc2UgcmV0dXJuIDFlM312YXIgX2Vtc2NyaXB0ZW5fZ2V0X25vd19pc19tb25vdG9uaWM9dHJ1ZTtmdW5jdGlvbiBfY2xvY2tfZ2V0cmVzKGNsa19pZCxyZXMpe3ZhciBuc2VjO2lmKGNsa19pZD09PTApe25zZWM9MWUzKjFlM31lbHNlIGlmKGNsa19pZD09PTEmJl9lbXNjcmlwdGVuX2dldF9ub3dfaXNfbW9ub3RvbmljKXtuc2VjPV9lbXNjcmlwdGVuX2dldF9ub3dfcmVzKCl9ZWxzZXtzZXRFcnJObygyOCk7cmV0dXJuLTF9SEVBUDMyW3Jlcz4+Ml09bnNlYy8xZTl8MDtIRUFQMzJbcmVzKzQ+PjJdPW5zZWM7cmV0dXJuIDB9dmFyIF9lbXNjcmlwdGVuX2dldF9ub3c7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7X2Vtc2NyaXB0ZW5fZ2V0X25vdz1mdW5jdGlvbigpe3ZhciB0PXByb2Nlc3NbImhydGltZSJdKCk7cmV0dXJuIHRbMF0qMWUzK3RbMV0vMWU2fX1lbHNlIGlmKHR5cGVvZiBkYXRlTm93IT09InVuZGVmaW5lZCIpe19lbXNjcmlwdGVuX2dldF9ub3c9ZGF0ZU5vd31lbHNlIF9lbXNjcmlwdGVuX2dldF9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O2Z1bmN0aW9uIF9jbG9ja19nZXR0aW1lKGNsa19pZCx0cCl7dmFyIG5vdztpZihjbGtfaWQ9PT0wKXtub3c9RGF0ZS5ub3coKX1lbHNlIGlmKChjbGtfaWQ9PT0xfHxjbGtfaWQ9PT00KSYmX2Vtc2NyaXB0ZW5fZ2V0X25vd19pc19tb25vdG9uaWMpe25vdz1fZW1zY3JpcHRlbl9nZXRfbm93KCl9ZWxzZXtzZXRFcnJObygyOCk7cmV0dXJuLTF9SEVBUDMyW3RwPj4yXT1ub3cvMWUzfDA7SEVBUDMyW3RwKzQ+PjJdPW5vdyUxZTMqMWUzKjFlM3wwO3JldHVybiAwfWZ1bmN0aW9uIF9kaWZmdGltZSh0aW1lMSx0aW1lMCl7cmV0dXJuIHRpbWUxLXRpbWUwfWZ1bmN0aW9uIF9kbGNsb3NlKGhhbmRsZSl7fWZ1bmN0aW9uIF9kbGVycm9yKCl7cmV0dXJuIDB9ZnVuY3Rpb24gX2Rsb3BlbihmaWxlbmFtZSxmbGFnKXt9ZnVuY3Rpb24gX2Rsc3ltKGhhbmRsZSxzeW1ib2wpe3JldHVybiAwfXZhciByZWFkQXNtQ29uc3RBcmdzQXJyYXk9W107ZnVuY3Rpb24gcmVhZEFzbUNvbnN0QXJncyhzaWdQdHIsYnVmKXtyZWFkQXNtQ29uc3RBcmdzQXJyYXkubGVuZ3RoPTA7dmFyIGNoO2J1Zj4+PTI7d2hpbGUoY2g9SEVBUFU4W3NpZ1B0cisrXSl7dmFyIGRvdWJsZT1jaDwxMDU7aWYoZG91YmxlJiZidWYmMSlidWYrKztyZWFkQXNtQ29uc3RBcmdzQXJyYXkucHVzaChkb3VibGU/SEVBUEY2NFtidWYrKz4+MV06SEVBUDMyW2J1Zl0pOysrYnVmfXJldHVybiByZWFkQXNtQ29uc3RBcmdzQXJyYXl9ZnVuY3Rpb24gbWFpblRocmVhZEVNX0FTTShjb2RlLHNpZ1B0cixhcmdidWYsc3luYyl7dmFyIGFyZ3M9cmVhZEFzbUNvbnN0QXJncyhzaWdQdHIsYXJnYnVmKTtyZXR1cm4gQVNNX0NPTlNUU1tjb2RlXS5hcHBseShudWxsLGFyZ3MpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2FzbV9jb25zdF9pbnRfc3luY19vbl9tYWluX3RocmVhZChjb2RlLHNpZ1B0cixhcmdidWYpe3JldHVybiBtYWluVGhyZWFkRU1fQVNNKGNvZGUsc2lnUHRyLGFyZ2J1ZiwxKX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfbWFpbl9sb29wX3RpbWluZyhtb2RlLHZhbHVlKXtCcm93c2VyLm1haW5Mb29wLnRpbWluZ01vZGU9bW9kZTtCcm93c2VyLm1haW5Mb29wLnRpbWluZ1ZhbHVlPXZhbHVlO2lmKCFCcm93c2VyLm1haW5Mb29wLmZ1bmMpe3JldHVybiAxfWlmKCFCcm93c2VyLm1haW5Mb29wLnJ1bm5pbmcpe0Jyb3dzZXIubWFpbkxvb3AucnVubmluZz10cnVlfWlmKG1vZGU9PTApe0Jyb3dzZXIubWFpbkxvb3Auc2NoZWR1bGVyPWZ1bmN0aW9uIEJyb3dzZXJfbWFpbkxvb3Bfc2NoZWR1bGVyX3NldFRpbWVvdXQoKXt2YXIgdGltZVVudGlsTmV4dFRpY2s9TWF0aC5tYXgoMCxCcm93c2VyLm1haW5Mb29wLnRpY2tTdGFydFRpbWUrdmFsdWUtX2Vtc2NyaXB0ZW5fZ2V0X25vdygpKXwwO3NldFRpbWVvdXQoQnJvd3Nlci5tYWluTG9vcC5ydW5uZXIsdGltZVVudGlsTmV4dFRpY2spfTtCcm93c2VyLm1haW5Mb29wLm1ldGhvZD0idGltZW91dCJ9ZWxzZSBpZihtb2RlPT0xKXtCcm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcj1mdW5jdGlvbiBCcm93c2VyX21haW5Mb29wX3NjaGVkdWxlcl9yQUYoKXtCcm93c2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZShCcm93c2VyLm1haW5Mb29wLnJ1bm5lcil9O0Jyb3dzZXIubWFpbkxvb3AubWV0aG9kPSJyQUYifWVsc2UgaWYobW9kZT09Mil7aWYodHlwZW9mIHNldEltbWVkaWF0ZT09PSJ1bmRlZmluZWQiKXt2YXIgc2V0SW1tZWRpYXRlcz1bXTt2YXIgZW1zY3JpcHRlbk1haW5Mb29wTWVzc2FnZUlkPSJzZXRpbW1lZGlhdGUiO3ZhciBCcm93c2VyX3NldEltbWVkaWF0ZV9tZXNzYWdlSGFuZGxlcj1mdW5jdGlvbihldmVudCl7aWYoZXZlbnQuZGF0YT09PWVtc2NyaXB0ZW5NYWluTG9vcE1lc3NhZ2VJZHx8ZXZlbnQuZGF0YS50YXJnZXQ9PT1lbXNjcmlwdGVuTWFpbkxvb3BNZXNzYWdlSWQpe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3NldEltbWVkaWF0ZXMuc2hpZnQoKSgpfX07YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsQnJvd3Nlcl9zZXRJbW1lZGlhdGVfbWVzc2FnZUhhbmRsZXIsdHJ1ZSk7c2V0SW1tZWRpYXRlPWZ1bmN0aW9uIEJyb3dzZXJfZW11bGF0ZWRfc2V0SW1tZWRpYXRlKGZ1bmMpe3NldEltbWVkaWF0ZXMucHVzaChmdW5jKTtpZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe2lmKE1vZHVsZVsic2V0SW1tZWRpYXRlcyJdPT09dW5kZWZpbmVkKU1vZHVsZVsic2V0SW1tZWRpYXRlcyJdPVtdO01vZHVsZVsic2V0SW1tZWRpYXRlcyJdLnB1c2goZnVuYyk7cG9zdE1lc3NhZ2Uoe3RhcmdldDplbXNjcmlwdGVuTWFpbkxvb3BNZXNzYWdlSWR9KX1lbHNlIHBvc3RNZXNzYWdlKGVtc2NyaXB0ZW5NYWluTG9vcE1lc3NhZ2VJZCwiKiIpfX1Ccm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcj1mdW5jdGlvbiBCcm93c2VyX21haW5Mb29wX3NjaGVkdWxlcl9zZXRJbW1lZGlhdGUoKXtzZXRJbW1lZGlhdGUoQnJvd3Nlci5tYWluTG9vcC5ydW5uZXIpfTtCcm93c2VyLm1haW5Mb29wLm1ldGhvZD0iaW1tZWRpYXRlIn1yZXR1cm4gMH1mdW5jdGlvbiBfZXhpdChzdGF0dXMpe2V4aXQoc3RhdHVzKX1mdW5jdGlvbiBtYXliZUV4aXQoKXtpZigha2VlcFJ1bnRpbWVBbGl2ZSgpKXt0cnl7X2V4aXQoRVhJVFNUQVRVUyl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXMpe3JldHVybn10aHJvdyBlfX19ZnVuY3Rpb24gc2V0TWFpbkxvb3AoYnJvd3Nlckl0ZXJhdGlvbkZ1bmMsZnBzLHNpbXVsYXRlSW5maW5pdGVMb29wLGFyZyxub1NldFRpbWluZyl7YXNzZXJ0KCFCcm93c2VyLm1haW5Mb29wLmZ1bmMsImVtc2NyaXB0ZW5fc2V0X21haW5fbG9vcDogdGhlcmUgY2FuIG9ubHkgYmUgb25lIG1haW4gbG9vcCBmdW5jdGlvbiBhdCBvbmNlOiBjYWxsIGVtc2NyaXB0ZW5fY2FuY2VsX21haW5fbG9vcCB0byBjYW5jZWwgdGhlIHByZXZpb3VzIG9uZSBiZWZvcmUgc2V0dGluZyBhIG5ldyBvbmUgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycy4iKTtCcm93c2VyLm1haW5Mb29wLmZ1bmM9YnJvd3Nlckl0ZXJhdGlvbkZ1bmM7QnJvd3Nlci5tYWluTG9vcC5hcmc9YXJnO3ZhciB0aGlzTWFpbkxvb3BJZD1Ccm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcDtmdW5jdGlvbiBjaGVja0lzUnVubmluZygpe2lmKHRoaXNNYWluTG9vcElkPEJyb3dzZXIubWFpbkxvb3AuY3VycmVudGx5UnVubmluZ01haW5sb29wKXttYXliZUV4aXQoKTtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9QnJvd3Nlci5tYWluTG9vcC5ydW5uaW5nPWZhbHNlO0Jyb3dzZXIubWFpbkxvb3AucnVubmVyPWZ1bmN0aW9uIEJyb3dzZXJfbWFpbkxvb3BfcnVubmVyKCl7aWYoQUJPUlQpcmV0dXJuO2lmKEJyb3dzZXIubWFpbkxvb3AucXVldWUubGVuZ3RoPjApe3ZhciBzdGFydD1EYXRlLm5vdygpO3ZhciBibG9ja2VyPUJyb3dzZXIubWFpbkxvb3AucXVldWUuc2hpZnQoKTtibG9ja2VyLmZ1bmMoYmxvY2tlci5hcmcpO2lmKEJyb3dzZXIubWFpbkxvb3AucmVtYWluaW5nQmxvY2tlcnMpe3ZhciByZW1haW5pbmc9QnJvd3Nlci5tYWluTG9vcC5yZW1haW5pbmdCbG9ja2Vyczt2YXIgbmV4dD1yZW1haW5pbmclMT09MD9yZW1haW5pbmctMTpNYXRoLmZsb29yKHJlbWFpbmluZyk7aWYoYmxvY2tlci5jb3VudGVkKXtCcm93c2VyLm1haW5Mb29wLnJlbWFpbmluZ0Jsb2NrZXJzPW5leHR9ZWxzZXtuZXh0PW5leHQrLjU7QnJvd3Nlci5tYWluTG9vcC5yZW1haW5pbmdCbG9ja2Vycz0oOCpyZW1haW5pbmcrbmV4dCkvOX19Y29uc29sZS5sb2coJ21haW4gbG9vcCBibG9ja2VyICInK2Jsb2NrZXIubmFtZSsnIiB0b29rICcrKERhdGUubm93KCktc3RhcnQpKyIgbXMiKTtCcm93c2VyLm1haW5Mb29wLnVwZGF0ZVN0YXR1cygpO2lmKCFjaGVja0lzUnVubmluZygpKXJldHVybjtzZXRUaW1lb3V0KEJyb3dzZXIubWFpbkxvb3AucnVubmVyLDApO3JldHVybn1pZighY2hlY2tJc1J1bm5pbmcoKSlyZXR1cm47QnJvd3Nlci5tYWluTG9vcC5jdXJyZW50RnJhbWVOdW1iZXI9QnJvd3Nlci5tYWluTG9vcC5jdXJyZW50RnJhbWVOdW1iZXIrMXwwO2lmKEJyb3dzZXIubWFpbkxvb3AudGltaW5nTW9kZT09MSYmQnJvd3Nlci5tYWluTG9vcC50aW1pbmdWYWx1ZT4xJiZCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRGcmFtZU51bWJlciVCcm93c2VyLm1haW5Mb29wLnRpbWluZ1ZhbHVlIT0wKXtCcm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcigpO3JldHVybn1lbHNlIGlmKEJyb3dzZXIubWFpbkxvb3AudGltaW5nTW9kZT09MCl7QnJvd3Nlci5tYWluTG9vcC50aWNrU3RhcnRUaW1lPV9lbXNjcmlwdGVuX2dldF9ub3coKX1HTC5uZXdSZW5kZXJpbmdGcmFtZVN0YXJ0ZWQoKTtCcm93c2VyLm1haW5Mb29wLnJ1bkl0ZXIoYnJvd3Nlckl0ZXJhdGlvbkZ1bmMpO2lmKCFjaGVja0lzUnVubmluZygpKXJldHVybjtpZih0eXBlb2YgU0RMPT09Im9iamVjdCImJlNETC5hdWRpbyYmU0RMLmF1ZGlvLnF1ZXVlTmV3QXVkaW9EYXRhKVNETC5hdWRpby5xdWV1ZU5ld0F1ZGlvRGF0YSgpO0Jyb3dzZXIubWFpbkxvb3Auc2NoZWR1bGVyKCl9O2lmKCFub1NldFRpbWluZyl7aWYoZnBzJiZmcHM+MClfZW1zY3JpcHRlbl9zZXRfbWFpbl9sb29wX3RpbWluZygwLDFlMy9mcHMpO2Vsc2UgX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcF90aW1pbmcoMSwxKTtCcm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcigpfWlmKHNpbXVsYXRlSW5maW5pdGVMb29wKXt0aHJvdyJ1bndpbmQifX1mdW5jdGlvbiBjYWxsVXNlckNhbGxiYWNrKGZ1bmMsc3luY2hyb25vdXMpe2lmKEFCT1JUKXtyZXR1cm59aWYoc3luY2hyb25vdXMpe2Z1bmMoKTtyZXR1cm59dHJ5e2Z1bmMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXhpdFN0YXR1cyl7cmV0dXJufWVsc2UgaWYoZSE9PSJ1bndpbmQiKXtpZihlJiZ0eXBlb2YgZT09PSJvYmplY3QiJiZlLnN0YWNrKWVycigiZXhjZXB0aW9uIHRocm93bjogIitbZSxlLnN0YWNrXSk7dGhyb3cgZX19fXZhciBCcm93c2VyPXttYWluTG9vcDp7cnVubmluZzpmYWxzZSxzY2hlZHVsZXI6bnVsbCxtZXRob2Q6IiIsY3VycmVudGx5UnVubmluZ01haW5sb29wOjAsZnVuYzpudWxsLGFyZzowLHRpbWluZ01vZGU6MCx0aW1pbmdWYWx1ZTowLGN1cnJlbnRGcmFtZU51bWJlcjowLHF1ZXVlOltdLHBhdXNlOmZ1bmN0aW9uKCl7QnJvd3Nlci5tYWluTG9vcC5zY2hlZHVsZXI9bnVsbDtCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcCsrfSxyZXN1bWU6ZnVuY3Rpb24oKXtCcm93c2VyLm1haW5Mb29wLmN1cnJlbnRseVJ1bm5pbmdNYWlubG9vcCsrO3ZhciB0aW1pbmdNb2RlPUJyb3dzZXIubWFpbkxvb3AudGltaW5nTW9kZTt2YXIgdGltaW5nVmFsdWU9QnJvd3Nlci5tYWluTG9vcC50aW1pbmdWYWx1ZTt2YXIgZnVuYz1Ccm93c2VyLm1haW5Mb29wLmZ1bmM7QnJvd3Nlci5tYWluTG9vcC5mdW5jPW51bGw7c2V0TWFpbkxvb3AoZnVuYywwLGZhbHNlLEJyb3dzZXIubWFpbkxvb3AuYXJnLHRydWUpO19lbXNjcmlwdGVuX3NldF9tYWluX2xvb3BfdGltaW5nKHRpbWluZ01vZGUsdGltaW5nVmFsdWUpO0Jyb3dzZXIubWFpbkxvb3Auc2NoZWR1bGVyKCl9LHVwZGF0ZVN0YXR1czpmdW5jdGlvbigpe2lmKE1vZHVsZVsic2V0U3RhdHVzIl0pe3ZhciBtZXNzYWdlPU1vZHVsZVsic3RhdHVzTWVzc2FnZSJdfHwiUGxlYXNlIHdhaXQuLi4iO3ZhciByZW1haW5pbmc9QnJvd3Nlci5tYWluTG9vcC5yZW1haW5pbmdCbG9ja2Vyczt2YXIgZXhwZWN0ZWQ9QnJvd3Nlci5tYWluTG9vcC5leHBlY3RlZEJsb2NrZXJzO2lmKHJlbWFpbmluZyl7aWYocmVtYWluaW5nPGV4cGVjdGVkKXtNb2R1bGVbInNldFN0YXR1cyJdKG1lc3NhZ2UrIiAoIisoZXhwZWN0ZWQtcmVtYWluaW5nKSsiLyIrZXhwZWN0ZWQrIikiKX1lbHNle01vZHVsZVsic2V0U3RhdHVzIl0obWVzc2FnZSl9fWVsc2V7TW9kdWxlWyJzZXRTdGF0dXMiXSgiIil9fX0scnVuSXRlcjpmdW5jdGlvbihmdW5jKXtpZihBQk9SVClyZXR1cm47aWYoTW9kdWxlWyJwcmVNYWluTG9vcCJdKXt2YXIgcHJlUmV0PU1vZHVsZVsicHJlTWFpbkxvb3AiXSgpO2lmKHByZVJldD09PWZhbHNlKXtyZXR1cm59fWNhbGxVc2VyQ2FsbGJhY2soZnVuYyk7aWYoTW9kdWxlWyJwb3N0TWFpbkxvb3AiXSlNb2R1bGVbInBvc3RNYWluTG9vcCJdKCl9fSxpc0Z1bGxzY3JlZW46ZmFsc2UscG9pbnRlckxvY2s6ZmFsc2UsbW9kdWxlQ29udGV4dENyZWF0ZWRDYWxsYmFja3M6W10sd29ya2VyczpbXSxpbml0OmZ1bmN0aW9uKCl7aWYoIU1vZHVsZVsicHJlbG9hZFBsdWdpbnMiXSlNb2R1bGVbInByZWxvYWRQbHVnaW5zIl09W107aWYoQnJvd3Nlci5pbml0dGVkKXJldHVybjtCcm93c2VyLmluaXR0ZWQ9dHJ1ZTt0cnl7bmV3IEJsb2I7QnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3I9dHJ1ZX1jYXRjaChlKXtCcm93c2VyLmhhc0Jsb2JDb25zdHJ1Y3Rvcj1mYWxzZTtjb25zb2xlLmxvZygid2FybmluZzogbm8gYmxvYiBjb25zdHJ1Y3RvciwgY2Fubm90IGNyZWF0ZSBibG9icyB3aXRoIG1pbWV0eXBlcyIpfUJyb3dzZXIuQmxvYkJ1aWxkZXI9dHlwZW9mIE1vekJsb2JCdWlsZGVyIT0idW5kZWZpbmVkIj9Nb3pCbG9iQnVpbGRlcjp0eXBlb2YgV2ViS2l0QmxvYkJ1aWxkZXIhPSJ1bmRlZmluZWQiP1dlYktpdEJsb2JCdWlsZGVyOiFCcm93c2VyLmhhc0Jsb2JDb25zdHJ1Y3Rvcj9jb25zb2xlLmxvZygid2FybmluZzogbm8gQmxvYkJ1aWxkZXIiKTpudWxsO0Jyb3dzZXIuVVJMT2JqZWN0PXR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiP3dpbmRvdy5VUkw/d2luZG93LlVSTDp3aW5kb3cud2Via2l0VVJMOnVuZGVmaW5lZDtpZighTW9kdWxlLm5vSW1hZ2VEZWNvZGluZyYmdHlwZW9mIEJyb3dzZXIuVVJMT2JqZWN0PT09InVuZGVmaW5lZCIpe2NvbnNvbGUubG9nKCJ3YXJuaW5nOiBCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgY3JlYXRpbmcgb2JqZWN0IFVSTHMuIEJ1aWx0LWluIGJyb3dzZXIgaW1hZ2UgZGVjb2Rpbmcgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiIpO01vZHVsZS5ub0ltYWdlRGVjb2Rpbmc9dHJ1ZX12YXIgaW1hZ2VQbHVnaW49e307aW1hZ2VQbHVnaW5bImNhbkhhbmRsZSJdPWZ1bmN0aW9uIGltYWdlUGx1Z2luX2NhbkhhbmRsZShuYW1lKXtyZXR1cm4hTW9kdWxlLm5vSW1hZ2VEZWNvZGluZyYmL1wuKGpwZ3xqcGVnfHBuZ3xibXApJC9pLnRlc3QobmFtZSl9O2ltYWdlUGx1Z2luWyJoYW5kbGUiXT1mdW5jdGlvbiBpbWFnZVBsdWdpbl9oYW5kbGUoYnl0ZUFycmF5LG5hbWUsb25sb2FkLG9uZXJyb3Ipe3ZhciBiPW51bGw7aWYoQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3Ipe3RyeXtiPW5ldyBCbG9iKFtieXRlQXJyYXldLHt0eXBlOkJyb3dzZXIuZ2V0TWltZXR5cGUobmFtZSl9KTtpZihiLnNpemUhPT1ieXRlQXJyYXkubGVuZ3RoKXtiPW5ldyBCbG9iKFtuZXcgVWludDhBcnJheShieXRlQXJyYXkpLmJ1ZmZlcl0se3R5cGU6QnJvd3Nlci5nZXRNaW1ldHlwZShuYW1lKX0pfX1jYXRjaChlKXt3YXJuT25jZSgiQmxvYiBjb25zdHJ1Y3RvciBwcmVzZW50IGJ1dCBmYWlsczogIitlKyI7IGZhbGxpbmcgYmFjayB0byBibG9iIGJ1aWxkZXIiKX19aWYoIWIpe3ZhciBiYj1uZXcgQnJvd3Nlci5CbG9iQnVpbGRlcjtiYi5hcHBlbmQobmV3IFVpbnQ4QXJyYXkoYnl0ZUFycmF5KS5idWZmZXIpO2I9YmIuZ2V0QmxvYigpfXZhciB1cmw9QnJvd3Nlci5VUkxPYmplY3QuY3JlYXRlT2JqZWN0VVJMKGIpO3ZhciBpbWc9bmV3IEltYWdlO2ltZy5vbmxvYWQ9ZnVuY3Rpb24gaW1nX29ubG9hZCgpe2Fzc2VydChpbWcuY29tcGxldGUsIkltYWdlICIrbmFtZSsiIGNvdWxkIG5vdCBiZSBkZWNvZGVkIik7dmFyIGNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtjYW52YXMud2lkdGg9aW1nLndpZHRoO2NhbnZhcy5oZWlnaHQ9aW1nLmhlaWdodDt2YXIgY3R4PWNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO2N0eC5kcmF3SW1hZ2UoaW1nLDAsMCk7TW9kdWxlWyJwcmVsb2FkZWRJbWFnZXMiXVtuYW1lXT1jYW52YXM7QnJvd3Nlci5VUkxPYmplY3QucmV2b2tlT2JqZWN0VVJMKHVybCk7aWYob25sb2FkKW9ubG9hZChieXRlQXJyYXkpfTtpbWcub25lcnJvcj1mdW5jdGlvbiBpbWdfb25lcnJvcihldmVudCl7Y29uc29sZS5sb2coIkltYWdlICIrdXJsKyIgY291bGQgbm90IGJlIGRlY29kZWQiKTtpZihvbmVycm9yKW9uZXJyb3IoKX07aW1nLnNyYz11cmx9O01vZHVsZVsicHJlbG9hZFBsdWdpbnMiXS5wdXNoKGltYWdlUGx1Z2luKTt2YXIgYXVkaW9QbHVnaW49e307YXVkaW9QbHVnaW5bImNhbkhhbmRsZSJdPWZ1bmN0aW9uIGF1ZGlvUGx1Z2luX2NhbkhhbmRsZShuYW1lKXtyZXR1cm4hTW9kdWxlLm5vQXVkaW9EZWNvZGluZyYmbmFtZS5zdWJzdHIoLTQpaW57Ii5vZ2ciOjEsIi53YXYiOjEsIi5tcDMiOjF9fTthdWRpb1BsdWdpblsiaGFuZGxlIl09ZnVuY3Rpb24gYXVkaW9QbHVnaW5faGFuZGxlKGJ5dGVBcnJheSxuYW1lLG9ubG9hZCxvbmVycm9yKXt2YXIgZG9uZT1mYWxzZTtmdW5jdGlvbiBmaW5pc2goYXVkaW8pe2lmKGRvbmUpcmV0dXJuO2RvbmU9dHJ1ZTtNb2R1bGVbInByZWxvYWRlZEF1ZGlvcyJdW25hbWVdPWF1ZGlvO2lmKG9ubG9hZClvbmxvYWQoYnl0ZUFycmF5KX1mdW5jdGlvbiBmYWlsKCl7aWYoZG9uZSlyZXR1cm47ZG9uZT10cnVlO01vZHVsZVsicHJlbG9hZGVkQXVkaW9zIl1bbmFtZV09bmV3IEF1ZGlvO2lmKG9uZXJyb3Ipb25lcnJvcigpfWlmKEJyb3dzZXIuaGFzQmxvYkNvbnN0cnVjdG9yKXt0cnl7dmFyIGI9bmV3IEJsb2IoW2J5dGVBcnJheV0se3R5cGU6QnJvd3Nlci5nZXRNaW1ldHlwZShuYW1lKX0pfWNhdGNoKGUpe3JldHVybiBmYWlsKCl9dmFyIHVybD1Ccm93c2VyLlVSTE9iamVjdC5jcmVhdGVPYmplY3RVUkwoYik7dmFyIGF1ZGlvPW5ldyBBdWRpbzthdWRpby5hZGRFdmVudExpc3RlbmVyKCJjYW5wbGF5dGhyb3VnaCIsZnVuY3Rpb24oKXtmaW5pc2goYXVkaW8pfSxmYWxzZSk7YXVkaW8ub25lcnJvcj1mdW5jdGlvbiBhdWRpb19vbmVycm9yKGV2ZW50KXtpZihkb25lKXJldHVybjtjb25zb2xlLmxvZygid2FybmluZzogYnJvd3NlciBjb3VsZCBub3QgZnVsbHkgZGVjb2RlIGF1ZGlvICIrbmFtZSsiLCB0cnlpbmcgc2xvd2VyIGJhc2U2NCBhcHByb2FjaCIpO2Z1bmN0aW9uIGVuY29kZTY0KGRhdGEpe3ZhciBCQVNFPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjt2YXIgUEFEPSI9Ijt2YXIgcmV0PSIiO3ZhciBsZWZ0Y2hhcj0wO3ZhciBsZWZ0Yml0cz0wO2Zvcih2YXIgaT0wO2k8ZGF0YS5sZW5ndGg7aSsrKXtsZWZ0Y2hhcj1sZWZ0Y2hhcjw8OHxkYXRhW2ldO2xlZnRiaXRzKz04O3doaWxlKGxlZnRiaXRzPj02KXt2YXIgY3Vycj1sZWZ0Y2hhcj4+bGVmdGJpdHMtNiY2MztsZWZ0Yml0cy09NjtyZXQrPUJBU0VbY3Vycl19fWlmKGxlZnRiaXRzPT0yKXtyZXQrPUJBU0VbKGxlZnRjaGFyJjMpPDw0XTtyZXQrPVBBRCtQQUR9ZWxzZSBpZihsZWZ0Yml0cz09NCl7cmV0Kz1CQVNFWyhsZWZ0Y2hhciYxNSk8PDJdO3JldCs9UEFEfXJldHVybiByZXR9YXVkaW8uc3JjPSJkYXRhOmF1ZGlvL3gtIituYW1lLnN1YnN0cigtMykrIjtiYXNlNjQsIitlbmNvZGU2NChieXRlQXJyYXkpO2ZpbmlzaChhdWRpbyl9O2F1ZGlvLnNyYz11cmw7QnJvd3Nlci5zYWZlU2V0VGltZW91dChmdW5jdGlvbigpe2ZpbmlzaChhdWRpbyl9LDFlNCl9ZWxzZXtyZXR1cm4gZmFpbCgpfX07TW9kdWxlWyJwcmVsb2FkUGx1Z2lucyJdLnB1c2goYXVkaW9QbHVnaW4pO2Z1bmN0aW9uIHBvaW50ZXJMb2NrQ2hhbmdlKCl7QnJvd3Nlci5wb2ludGVyTG9jaz1kb2N1bWVudFsicG9pbnRlckxvY2tFbGVtZW50Il09PT1Nb2R1bGVbImNhbnZhcyJdfHxkb2N1bWVudFsibW96UG9pbnRlckxvY2tFbGVtZW50Il09PT1Nb2R1bGVbImNhbnZhcyJdfHxkb2N1bWVudFsid2Via2l0UG9pbnRlckxvY2tFbGVtZW50Il09PT1Nb2R1bGVbImNhbnZhcyJdfHxkb2N1bWVudFsibXNQb2ludGVyTG9ja0VsZW1lbnQiXT09PU1vZHVsZVsiY2FudmFzIl19dmFyIGNhbnZhcz1Nb2R1bGVbImNhbnZhcyJdO2lmKGNhbnZhcyl7Y2FudmFzLnJlcXVlc3RQb2ludGVyTG9jaz1jYW52YXNbInJlcXVlc3RQb2ludGVyTG9jayJdfHxjYW52YXNbIm1velJlcXVlc3RQb2ludGVyTG9jayJdfHxjYW52YXNbIndlYmtpdFJlcXVlc3RQb2ludGVyTG9jayJdfHxjYW52YXNbIm1zUmVxdWVzdFBvaW50ZXJMb2NrIl18fGZ1bmN0aW9uKCl7fTtjYW52YXMuZXhpdFBvaW50ZXJMb2NrPWRvY3VtZW50WyJleGl0UG9pbnRlckxvY2siXXx8ZG9jdW1lbnRbIm1vekV4aXRQb2ludGVyTG9jayJdfHxkb2N1bWVudFsid2Via2l0RXhpdFBvaW50ZXJMb2NrIl18fGRvY3VtZW50WyJtc0V4aXRQb2ludGVyTG9jayJdfHxmdW5jdGlvbigpe307Y2FudmFzLmV4aXRQb2ludGVyTG9jaz1jYW52YXMuZXhpdFBvaW50ZXJMb2NrLmJpbmQoZG9jdW1lbnQpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsb2NrY2hhbmdlIixwb2ludGVyTG9ja0NoYW5nZSxmYWxzZSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW96cG9pbnRlcmxvY2tjaGFuZ2UiLHBvaW50ZXJMb2NrQ2hhbmdlLGZhbHNlKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRwb2ludGVybG9ja2NoYW5nZSIscG9pbnRlckxvY2tDaGFuZ2UsZmFsc2UpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1zcG9pbnRlcmxvY2tjaGFuZ2UiLHBvaW50ZXJMb2NrQ2hhbmdlLGZhbHNlKTtpZihNb2R1bGVbImVsZW1lbnRQb2ludGVyTG9jayJdKXtjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGV2KXtpZighQnJvd3Nlci5wb2ludGVyTG9jayYmTW9kdWxlWyJjYW52YXMiXS5yZXF1ZXN0UG9pbnRlckxvY2spe01vZHVsZVsiY2FudmFzIl0ucmVxdWVzdFBvaW50ZXJMb2NrKCk7ZXYucHJldmVudERlZmF1bHQoKX19LGZhbHNlKX19fSxjcmVhdGVDb250ZXh0OmZ1bmN0aW9uKGNhbnZhcyx1c2VXZWJHTCxzZXRJbk1vZHVsZSx3ZWJHTENvbnRleHRBdHRyaWJ1dGVzKXtpZih1c2VXZWJHTCYmTW9kdWxlLmN0eCYmY2FudmFzPT1Nb2R1bGUuY2FudmFzKXJldHVybiBNb2R1bGUuY3R4O3ZhciBjdHg7dmFyIGNvbnRleHRIYW5kbGU7aWYodXNlV2ViR0wpe3ZhciBjb250ZXh0QXR0cmlidXRlcz17YW50aWFsaWFzOmZhbHNlLGFscGhhOmZhbHNlLG1ham9yVmVyc2lvbjp0eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9PSJ1bmRlZmluZWQiPzI6MX07aWYod2ViR0xDb250ZXh0QXR0cmlidXRlcyl7Zm9yKHZhciBhdHRyaWJ1dGUgaW4gd2ViR0xDb250ZXh0QXR0cmlidXRlcyl7Y29udGV4dEF0dHJpYnV0ZXNbYXR0cmlidXRlXT13ZWJHTENvbnRleHRBdHRyaWJ1dGVzW2F0dHJpYnV0ZV19fWlmKHR5cGVvZiBHTCE9PSJ1bmRlZmluZWQiKXtjb250ZXh0SGFuZGxlPUdMLmNyZWF0ZUNvbnRleHQoY2FudmFzLGNvbnRleHRBdHRyaWJ1dGVzKTtpZihjb250ZXh0SGFuZGxlKXtjdHg9R0wuZ2V0Q29udGV4dChjb250ZXh0SGFuZGxlKS5HTGN0eH19fWVsc2V7Y3R4PWNhbnZhcy5nZXRDb250ZXh0KCIyZCIpfWlmKCFjdHgpcmV0dXJuIG51bGw7aWYoc2V0SW5Nb2R1bGUpe2lmKCF1c2VXZWJHTClhc3NlcnQodHlwZW9mIEdMY3R4PT09InVuZGVmaW5lZCIsImNhbm5vdCBzZXQgaW4gbW9kdWxlIGlmIEdMY3R4IGlzIHVzZWQsIGJ1dCB3ZSBhcmUgYSBub24tR0wgY29udGV4dCB0aGF0IHdvdWxkIHJlcGxhY2UgaXQiKTtNb2R1bGUuY3R4PWN0eDtpZih1c2VXZWJHTClHTC5tYWtlQ29udGV4dEN1cnJlbnQoY29udGV4dEhhbmRsZSk7TW9kdWxlLnVzZVdlYkdMPXVzZVdlYkdMO0Jyb3dzZXIubW9kdWxlQ29udGV4dENyZWF0ZWRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihjYWxsYmFjayl7Y2FsbGJhY2soKX0pO0Jyb3dzZXIuaW5pdCgpfXJldHVybiBjdHh9LGRlc3Ryb3lDb250ZXh0OmZ1bmN0aW9uKGNhbnZhcyx1c2VXZWJHTCxzZXRJbk1vZHVsZSl7fSxmdWxsc2NyZWVuSGFuZGxlcnNJbnN0YWxsZWQ6ZmFsc2UsbG9ja1BvaW50ZXI6dW5kZWZpbmVkLHJlc2l6ZUNhbnZhczp1bmRlZmluZWQscmVxdWVzdEZ1bGxzY3JlZW46ZnVuY3Rpb24obG9ja1BvaW50ZXIscmVzaXplQ2FudmFzKXtCcm93c2VyLmxvY2tQb2ludGVyPWxvY2tQb2ludGVyO0Jyb3dzZXIucmVzaXplQ2FudmFzPXJlc2l6ZUNhbnZhcztpZih0eXBlb2YgQnJvd3Nlci5sb2NrUG9pbnRlcj09PSJ1bmRlZmluZWQiKUJyb3dzZXIubG9ja1BvaW50ZXI9dHJ1ZTtpZih0eXBlb2YgQnJvd3Nlci5yZXNpemVDYW52YXM9PT0idW5kZWZpbmVkIilCcm93c2VyLnJlc2l6ZUNhbnZhcz1mYWxzZTt2YXIgY2FudmFzPU1vZHVsZVsiY2FudmFzIl07ZnVuY3Rpb24gZnVsbHNjcmVlbkNoYW5nZSgpe0Jyb3dzZXIuaXNGdWxsc2NyZWVuPWZhbHNlO3ZhciBjYW52YXNDb250YWluZXI9Y2FudmFzLnBhcmVudE5vZGU7aWYoKGRvY3VtZW50WyJmdWxsc2NyZWVuRWxlbWVudCJdfHxkb2N1bWVudFsibW96RnVsbFNjcmVlbkVsZW1lbnQiXXx8ZG9jdW1lbnRbIm1zRnVsbHNjcmVlbkVsZW1lbnQiXXx8ZG9jdW1lbnRbIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50Il18fGRvY3VtZW50WyJ3ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQiXSk9PT1jYW52YXNDb250YWluZXIpe2NhbnZhcy5leGl0RnVsbHNjcmVlbj1Ccm93c2VyLmV4aXRGdWxsc2NyZWVuO2lmKEJyb3dzZXIubG9ja1BvaW50ZXIpY2FudmFzLnJlcXVlc3RQb2ludGVyTG9jaygpO0Jyb3dzZXIuaXNGdWxsc2NyZWVuPXRydWU7aWYoQnJvd3Nlci5yZXNpemVDYW52YXMpe0Jyb3dzZXIuc2V0RnVsbHNjcmVlbkNhbnZhc1NpemUoKX1lbHNle0Jyb3dzZXIudXBkYXRlQ2FudmFzRGltZW5zaW9ucyhjYW52YXMpfX1lbHNle2NhbnZhc0NvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjYW52YXMsY2FudmFzQ29udGFpbmVyKTtjYW52YXNDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYW52YXNDb250YWluZXIpO2lmKEJyb3dzZXIucmVzaXplQ2FudmFzKXtCcm93c2VyLnNldFdpbmRvd2VkQ2FudmFzU2l6ZSgpfWVsc2V7QnJvd3Nlci51cGRhdGVDYW52YXNEaW1lbnNpb25zKGNhbnZhcyl9fWlmKE1vZHVsZVsib25GdWxsU2NyZWVuIl0pTW9kdWxlWyJvbkZ1bGxTY3JlZW4iXShCcm93c2VyLmlzRnVsbHNjcmVlbik7aWYoTW9kdWxlWyJvbkZ1bGxzY3JlZW4iXSlNb2R1bGVbIm9uRnVsbHNjcmVlbiJdKEJyb3dzZXIuaXNGdWxsc2NyZWVuKX1pZighQnJvd3Nlci5mdWxsc2NyZWVuSGFuZGxlcnNJbnN0YWxsZWQpe0Jyb3dzZXIuZnVsbHNjcmVlbkhhbmRsZXJzSW5zdGFsbGVkPXRydWU7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsZnVsbHNjcmVlbkNoYW5nZSxmYWxzZSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW96ZnVsbHNjcmVlbmNoYW5nZSIsZnVsbHNjcmVlbkNoYW5nZSxmYWxzZSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsZnVsbHNjcmVlbkNoYW5nZSxmYWxzZSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiTVNGdWxsc2NyZWVuQ2hhbmdlIixmdWxsc2NyZWVuQ2hhbmdlLGZhbHNlKX12YXIgY2FudmFzQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NhbnZhcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjYW52YXNDb250YWluZXIsY2FudmFzKTtjYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY2FudmFzKTtjYW52YXNDb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW49Y2FudmFzQ29udGFpbmVyWyJyZXF1ZXN0RnVsbHNjcmVlbiJdfHxjYW52YXNDb250YWluZXJbIm1velJlcXVlc3RGdWxsU2NyZWVuIl18fGNhbnZhc0NvbnRhaW5lclsibXNSZXF1ZXN0RnVsbHNjcmVlbiJdfHwoY2FudmFzQ29udGFpbmVyWyJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiJdP2Z1bmN0aW9uKCl7Y2FudmFzQ29udGFpbmVyWyJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiJdKEVsZW1lbnRbIkFMTE9XX0tFWUJPQVJEX0lOUFVUIl0pfTpudWxsKXx8KGNhbnZhc0NvbnRhaW5lclsid2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4iXT9mdW5jdGlvbigpe2NhbnZhc0NvbnRhaW5lclsid2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4iXShFbGVtZW50WyJBTExPV19LRVlCT0FSRF9JTlBVVCJdKX06bnVsbCk7Y2FudmFzQ29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCl9LGV4aXRGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7aWYoIUJyb3dzZXIuaXNGdWxsc2NyZWVuKXtyZXR1cm4gZmFsc2V9dmFyIENGUz1kb2N1bWVudFsiZXhpdEZ1bGxzY3JlZW4iXXx8ZG9jdW1lbnRbImNhbmNlbEZ1bGxTY3JlZW4iXXx8ZG9jdW1lbnRbIm1vekNhbmNlbEZ1bGxTY3JlZW4iXXx8ZG9jdW1lbnRbIm1zRXhpdEZ1bGxzY3JlZW4iXXx8ZG9jdW1lbnRbIndlYmtpdENhbmNlbEZ1bGxTY3JlZW4iXXx8ZnVuY3Rpb24oKXt9O0NGUy5hcHBseShkb2N1bWVudCxbXSk7cmV0dXJuIHRydWV9LG5leHRSQUY6MCxmYWtlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uKGZ1bmMpe3ZhciBub3c9RGF0ZS5ub3coKTtpZihCcm93c2VyLm5leHRSQUY9PT0wKXtCcm93c2VyLm5leHRSQUY9bm93KzFlMy82MH1lbHNle3doaWxlKG5vdysyPj1Ccm93c2VyLm5leHRSQUYpe0Jyb3dzZXIubmV4dFJBRis9MWUzLzYwfX12YXIgZGVsYXk9TWF0aC5tYXgoQnJvd3Nlci5uZXh0UkFGLW5vdywwKTtzZXRUaW1lb3V0KGZ1bmMsZGVsYXkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6ZnVuY3Rpb24oZnVuYyl7aWYodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09PSJmdW5jdGlvbiIpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTtyZXR1cm59dmFyIFJBRj1Ccm93c2VyLmZha2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7UkFGKGZ1bmMpfSxzYWZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uKGZ1bmMpe3JldHVybiBCcm93c2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2NhbGxVc2VyQ2FsbGJhY2soZnVuYyl9KX0sc2FmZVNldFRpbWVvdXQ6ZnVuY3Rpb24oZnVuYyx0aW1lb3V0KXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2NhbGxVc2VyQ2FsbGJhY2soZnVuYyl9LHRpbWVvdXQpfSxnZXRNaW1ldHlwZTpmdW5jdGlvbihuYW1lKXtyZXR1cm57ImpwZyI6ImltYWdlL2pwZWciLCJqcGVnIjoiaW1hZ2UvanBlZyIsInBuZyI6ImltYWdlL3BuZyIsImJtcCI6ImltYWdlL2JtcCIsIm9nZyI6ImF1ZGlvL29nZyIsIndhdiI6ImF1ZGlvL3dhdiIsIm1wMyI6ImF1ZGlvL21wZWcifVtuYW1lLnN1YnN0cihuYW1lLmxhc3RJbmRleE9mKCIuIikrMSldfSxnZXRVc2VyTWVkaWE6ZnVuY3Rpb24oZnVuYyl7aWYoIXdpbmRvdy5nZXRVc2VyTWVkaWEpe3dpbmRvdy5nZXRVc2VyTWVkaWE9bmF2aWdhdG9yWyJnZXRVc2VyTWVkaWEiXXx8bmF2aWdhdG9yWyJtb3pHZXRVc2VyTWVkaWEiXX13aW5kb3cuZ2V0VXNlck1lZGlhKGZ1bmMpfSxnZXRNb3ZlbWVudFg6ZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudFsibW92ZW1lbnRYIl18fGV2ZW50WyJtb3pNb3ZlbWVudFgiXXx8ZXZlbnRbIndlYmtpdE1vdmVtZW50WCJdfHwwfSxnZXRNb3ZlbWVudFk6ZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudFsibW92ZW1lbnRZIl18fGV2ZW50WyJtb3pNb3ZlbWVudFkiXXx8ZXZlbnRbIndlYmtpdE1vdmVtZW50WSJdfHwwfSxnZXRNb3VzZVdoZWVsRGVsdGE6ZnVuY3Rpb24oZXZlbnQpe3ZhciBkZWx0YT0wO3N3aXRjaChldmVudC50eXBlKXtjYXNlIkRPTU1vdXNlU2Nyb2xsIjpkZWx0YT1ldmVudC5kZXRhaWwvMzticmVhaztjYXNlIm1vdXNld2hlZWwiOmRlbHRhPWV2ZW50LndoZWVsRGVsdGEvMTIwO2JyZWFrO2Nhc2Uid2hlZWwiOmRlbHRhPWV2ZW50LmRlbHRhWTtzd2l0Y2goZXZlbnQuZGVsdGFNb2RlKXtjYXNlIDA6ZGVsdGEvPTEwMDticmVhaztjYXNlIDE6ZGVsdGEvPTM7YnJlYWs7Y2FzZSAyOmRlbHRhKj04MDticmVhaztkZWZhdWx0OnRocm93InVucmVjb2duaXplZCBtb3VzZSB3aGVlbCBkZWx0YSBtb2RlOiAiK2V2ZW50LmRlbHRhTW9kZX1icmVhaztkZWZhdWx0OnRocm93InVucmVjb2duaXplZCBtb3VzZSB3aGVlbCBldmVudDogIitldmVudC50eXBlfXJldHVybiBkZWx0YX0sbW91c2VYOjAsbW91c2VZOjAsbW91c2VNb3ZlbWVudFg6MCxtb3VzZU1vdmVtZW50WTowLHRvdWNoZXM6e30sbGFzdFRvdWNoZXM6e30sY2FsY3VsYXRlTW91c2VFdmVudDpmdW5jdGlvbihldmVudCl7aWYoQnJvd3Nlci5wb2ludGVyTG9jayl7aWYoZXZlbnQudHlwZSE9Im1vdXNlbW92ZSImJiJtb3pNb3ZlbWVudFgiaW4gZXZlbnQpe0Jyb3dzZXIubW91c2VNb3ZlbWVudFg9QnJvd3Nlci5tb3VzZU1vdmVtZW50WT0wfWVsc2V7QnJvd3Nlci5tb3VzZU1vdmVtZW50WD1Ccm93c2VyLmdldE1vdmVtZW50WChldmVudCk7QnJvd3Nlci5tb3VzZU1vdmVtZW50WT1Ccm93c2VyLmdldE1vdmVtZW50WShldmVudCl9aWYodHlwZW9mIFNETCE9InVuZGVmaW5lZCIpe0Jyb3dzZXIubW91c2VYPVNETC5tb3VzZVgrQnJvd3Nlci5tb3VzZU1vdmVtZW50WDtCcm93c2VyLm1vdXNlWT1TREwubW91c2VZK0Jyb3dzZXIubW91c2VNb3ZlbWVudFl9ZWxzZXtCcm93c2VyLm1vdXNlWCs9QnJvd3Nlci5tb3VzZU1vdmVtZW50WDtCcm93c2VyLm1vdXNlWSs9QnJvd3Nlci5tb3VzZU1vdmVtZW50WX19ZWxzZXt2YXIgcmVjdD1Nb2R1bGVbImNhbnZhcyJdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBjdz1Nb2R1bGVbImNhbnZhcyJdLndpZHRoO3ZhciBjaD1Nb2R1bGVbImNhbnZhcyJdLmhlaWdodDt2YXIgc2Nyb2xsWD10eXBlb2Ygd2luZG93LnNjcm9sbFghPT0idW5kZWZpbmVkIj93aW5kb3cuc2Nyb2xsWDp3aW5kb3cucGFnZVhPZmZzZXQ7dmFyIHNjcm9sbFk9dHlwZW9mIHdpbmRvdy5zY3JvbGxZIT09InVuZGVmaW5lZCI/d2luZG93LnNjcm9sbFk6d2luZG93LnBhZ2VZT2Zmc2V0O2lmKGV2ZW50LnR5cGU9PT0idG91Y2hzdGFydCJ8fGV2ZW50LnR5cGU9PT0idG91Y2hlbmQifHxldmVudC50eXBlPT09InRvdWNobW92ZSIpe3ZhciB0b3VjaD1ldmVudC50b3VjaDtpZih0b3VjaD09PXVuZGVmaW5lZCl7cmV0dXJufXZhciBhZGp1c3RlZFg9dG91Y2gucGFnZVgtKHNjcm9sbFgrcmVjdC5sZWZ0KTt2YXIgYWRqdXN0ZWRZPXRvdWNoLnBhZ2VZLShzY3JvbGxZK3JlY3QudG9wKTthZGp1c3RlZFg9YWRqdXN0ZWRYKihjdy9yZWN0LndpZHRoKTthZGp1c3RlZFk9YWRqdXN0ZWRZKihjaC9yZWN0LmhlaWdodCk7dmFyIGNvb3Jkcz17eDphZGp1c3RlZFgseTphZGp1c3RlZFl9O2lmKGV2ZW50LnR5cGU9PT0idG91Y2hzdGFydCIpe0Jyb3dzZXIubGFzdFRvdWNoZXNbdG91Y2guaWRlbnRpZmllcl09Y29vcmRzO0Jyb3dzZXIudG91Y2hlc1t0b3VjaC5pZGVudGlmaWVyXT1jb29yZHN9ZWxzZSBpZihldmVudC50eXBlPT09InRvdWNoZW5kInx8ZXZlbnQudHlwZT09PSJ0b3VjaG1vdmUiKXt2YXIgbGFzdD1Ccm93c2VyLnRvdWNoZXNbdG91Y2guaWRlbnRpZmllcl07aWYoIWxhc3QpbGFzdD1jb29yZHM7QnJvd3Nlci5sYXN0VG91Y2hlc1t0b3VjaC5pZGVudGlmaWVyXT1sYXN0O0Jyb3dzZXIudG91Y2hlc1t0b3VjaC5pZGVudGlmaWVyXT1jb29yZHN9cmV0dXJufXZhciB4PWV2ZW50LnBhZ2VYLShzY3JvbGxYK3JlY3QubGVmdCk7dmFyIHk9ZXZlbnQucGFnZVktKHNjcm9sbFkrcmVjdC50b3ApO3g9eCooY3cvcmVjdC53aWR0aCk7eT15KihjaC9yZWN0LmhlaWdodCk7QnJvd3Nlci5tb3VzZU1vdmVtZW50WD14LUJyb3dzZXIubW91c2VYO0Jyb3dzZXIubW91c2VNb3ZlbWVudFk9eS1Ccm93c2VyLm1vdXNlWTtCcm93c2VyLm1vdXNlWD14O0Jyb3dzZXIubW91c2VZPXl9fSxhc3luY0xvYWQ6ZnVuY3Rpb24odXJsLG9ubG9hZCxvbmVycm9yLG5vUnVuRGVwKXt2YXIgZGVwPSFub1J1bkRlcD9nZXRVbmlxdWVSdW5EZXBlbmRlbmN5KCJhbCAiK3VybCk6IiI7cmVhZEFzeW5jKHVybCxmdW5jdGlvbihhcnJheUJ1ZmZlcil7YXNzZXJ0KGFycmF5QnVmZmVyLCdMb2FkaW5nIGRhdGEgZmlsZSAiJyt1cmwrJyIgZmFpbGVkIChubyBhcnJheUJ1ZmZlcikuJyk7b25sb2FkKG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7aWYoZGVwKXJlbW92ZVJ1bkRlcGVuZGVuY3koZGVwKX0sZnVuY3Rpb24oZXZlbnQpe2lmKG9uZXJyb3Ipe29uZXJyb3IoKX1lbHNle3Rocm93J0xvYWRpbmcgZGF0YSBmaWxlICInK3VybCsnIiBmYWlsZWQuJ319KTtpZihkZXApYWRkUnVuRGVwZW5kZW5jeShkZXApfSxyZXNpemVMaXN0ZW5lcnM6W10sdXBkYXRlUmVzaXplTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dmFyIGNhbnZhcz1Nb2R1bGVbImNhbnZhcyJdO0Jyb3dzZXIucmVzaXplTGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIpe2xpc3RlbmVyKGNhbnZhcy53aWR0aCxjYW52YXMuaGVpZ2h0KX0pfSxzZXRDYW52YXNTaXplOmZ1bmN0aW9uKHdpZHRoLGhlaWdodCxub1VwZGF0ZXMpe3ZhciBjYW52YXM9TW9kdWxlWyJjYW52YXMiXTtCcm93c2VyLnVwZGF0ZUNhbnZhc0RpbWVuc2lvbnMoY2FudmFzLHdpZHRoLGhlaWdodCk7aWYoIW5vVXBkYXRlcylCcm93c2VyLnVwZGF0ZVJlc2l6ZUxpc3RlbmVycygpfSx3aW5kb3dlZFdpZHRoOjAsd2luZG93ZWRIZWlnaHQ6MCxzZXRGdWxsc2NyZWVuQ2FudmFzU2l6ZTpmdW5jdGlvbigpe2lmKHR5cGVvZiBTREwhPSJ1bmRlZmluZWQiKXt2YXIgZmxhZ3M9SEVBUFUzMltTREwuc2NyZWVuPj4yXTtmbGFncz1mbGFnc3w4Mzg4NjA4O0hFQVAzMltTREwuc2NyZWVuPj4yXT1mbGFnc31Ccm93c2VyLnVwZGF0ZUNhbnZhc0RpbWVuc2lvbnMoTW9kdWxlWyJjYW52YXMiXSk7QnJvd3Nlci51cGRhdGVSZXNpemVMaXN0ZW5lcnMoKX0sc2V0V2luZG93ZWRDYW52YXNTaXplOmZ1bmN0aW9uKCl7aWYodHlwZW9mIFNETCE9InVuZGVmaW5lZCIpe3ZhciBmbGFncz1IRUFQVTMyW1NETC5zY3JlZW4+PjJdO2ZsYWdzPWZsYWdzJn44Mzg4NjA4O0hFQVAzMltTREwuc2NyZWVuPj4yXT1mbGFnc31Ccm93c2VyLnVwZGF0ZUNhbnZhc0RpbWVuc2lvbnMoTW9kdWxlWyJjYW52YXMiXSk7QnJvd3Nlci51cGRhdGVSZXNpemVMaXN0ZW5lcnMoKX0sdXBkYXRlQ2FudmFzRGltZW5zaW9uczpmdW5jdGlvbihjYW52YXMsd05hdGl2ZSxoTmF0aXZlKXtpZih3TmF0aXZlJiZoTmF0aXZlKXtjYW52YXMud2lkdGhOYXRpdmU9d05hdGl2ZTtjYW52YXMuaGVpZ2h0TmF0aXZlPWhOYXRpdmV9ZWxzZXt3TmF0aXZlPWNhbnZhcy53aWR0aE5hdGl2ZTtoTmF0aXZlPWNhbnZhcy5oZWlnaHROYXRpdmV9dmFyIHc9d05hdGl2ZTt2YXIgaD1oTmF0aXZlO2lmKE1vZHVsZVsiZm9yY2VkQXNwZWN0UmF0aW8iXSYmTW9kdWxlWyJmb3JjZWRBc3BlY3RSYXRpbyJdPjApe2lmKHcvaDxNb2R1bGVbImZvcmNlZEFzcGVjdFJhdGlvIl0pe3c9TWF0aC5yb3VuZChoKk1vZHVsZVsiZm9yY2VkQXNwZWN0UmF0aW8iXSl9ZWxzZXtoPU1hdGgucm91bmQody9Nb2R1bGVbImZvcmNlZEFzcGVjdFJhdGlvIl0pfX1pZigoZG9jdW1lbnRbImZ1bGxzY3JlZW5FbGVtZW50Il18fGRvY3VtZW50WyJtb3pGdWxsU2NyZWVuRWxlbWVudCJdfHxkb2N1bWVudFsibXNGdWxsc2NyZWVuRWxlbWVudCJdfHxkb2N1bWVudFsid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiXXx8ZG9jdW1lbnRbIndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCJdKT09PWNhbnZhcy5wYXJlbnROb2RlJiZ0eXBlb2Ygc2NyZWVuIT0idW5kZWZpbmVkIil7dmFyIGZhY3Rvcj1NYXRoLm1pbihzY3JlZW4ud2lkdGgvdyxzY3JlZW4uaGVpZ2h0L2gpO3c9TWF0aC5yb3VuZCh3KmZhY3Rvcik7aD1NYXRoLnJvdW5kKGgqZmFjdG9yKX1pZihCcm93c2VyLnJlc2l6ZUNhbnZhcyl7aWYoY2FudmFzLndpZHRoIT13KWNhbnZhcy53aWR0aD13O2lmKGNhbnZhcy5oZWlnaHQhPWgpY2FudmFzLmhlaWdodD1oO2lmKHR5cGVvZiBjYW52YXMuc3R5bGUhPSJ1bmRlZmluZWQiKXtjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoIndpZHRoIik7Y2FudmFzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKX19ZWxzZXtpZihjYW52YXMud2lkdGghPXdOYXRpdmUpY2FudmFzLndpZHRoPXdOYXRpdmU7aWYoY2FudmFzLmhlaWdodCE9aE5hdGl2ZSljYW52YXMuaGVpZ2h0PWhOYXRpdmU7aWYodHlwZW9mIGNhbnZhcy5zdHlsZSE9InVuZGVmaW5lZCIpe2lmKHchPXdOYXRpdmV8fGghPWhOYXRpdmUpe2NhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eSgid2lkdGgiLHcrInB4IiwiaW1wb3J0YW50Iik7Y2FudmFzLnN0eWxlLnNldFByb3BlcnR5KCJoZWlnaHQiLGgrInB4IiwiaW1wb3J0YW50Iil9ZWxzZXtjYW52YXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoIndpZHRoIik7Y2FudmFzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKX19fX0sd2dldFJlcXVlc3RzOnt9LG5leHRXZ2V0UmVxdWVzdEhhbmRsZTowLGdldE5leHRXZ2V0UmVxdWVzdEhhbmRsZTpmdW5jdGlvbigpe3ZhciBoYW5kbGU9QnJvd3Nlci5uZXh0V2dldFJlcXVlc3RIYW5kbGU7QnJvd3Nlci5uZXh0V2dldFJlcXVlc3RIYW5kbGUrKztyZXR1cm4gaGFuZGxlfX07ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fY2FuY2VsX21haW5fbG9vcCgpe0Jyb3dzZXIubWFpbkxvb3AucGF1c2UoKTtCcm93c2VyLm1haW5Mb29wLmZ1bmM9bnVsbH1mdW5jdGlvbiBfZW1zY3JpcHRlbl9jbGVhcl9pbnRlcnZhbChpZCl7Y2xlYXJJbnRlcnZhbChpZCl9dmFyIEpTRXZlbnRzPXtpbkV2ZW50SGFuZGxlcjowLHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciBpPUpTRXZlbnRzLmV2ZW50SGFuZGxlcnMubGVuZ3RoLTE7aT49MDstLWkpe0pTRXZlbnRzLl9yZW1vdmVIYW5kbGVyKGkpfUpTRXZlbnRzLmV2ZW50SGFuZGxlcnM9W107SlNFdmVudHMuZGVmZXJyZWRDYWxscz1bXX0scmVnaXN0ZXJSZW1vdmVFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2lmKCFKU0V2ZW50cy5yZW1vdmVFdmVudExpc3RlbmVyc1JlZ2lzdGVyZWQpe19fQVRFWElUX18ucHVzaChKU0V2ZW50cy5yZW1vdmVBbGxFdmVudExpc3RlbmVycyk7SlNFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcnNSZWdpc3RlcmVkPXRydWV9fSxkZWZlcnJlZENhbGxzOltdLGRlZmVyQ2FsbDpmdW5jdGlvbih0YXJnZXRGdW5jdGlvbixwcmVjZWRlbmNlLGFyZ3NMaXN0KXtmdW5jdGlvbiBhcnJheXNIYXZlRXF1YWxDb250ZW50KGFyckEsYXJyQil7aWYoYXJyQS5sZW5ndGghPWFyckIubGVuZ3RoKXJldHVybiBmYWxzZTtmb3IodmFyIGkgaW4gYXJyQSl7aWYoYXJyQVtpXSE9YXJyQltpXSlyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9Zm9yKHZhciBpIGluIEpTRXZlbnRzLmRlZmVycmVkQ2FsbHMpe3ZhciBjYWxsPUpTRXZlbnRzLmRlZmVycmVkQ2FsbHNbaV07aWYoY2FsbC50YXJnZXRGdW5jdGlvbj09dGFyZ2V0RnVuY3Rpb24mJmFycmF5c0hhdmVFcXVhbENvbnRlbnQoY2FsbC5hcmdzTGlzdCxhcmdzTGlzdCkpe3JldHVybn19SlNFdmVudHMuZGVmZXJyZWRDYWxscy5wdXNoKHt0YXJnZXRGdW5jdGlvbjp0YXJnZXRGdW5jdGlvbixwcmVjZWRlbmNlOnByZWNlZGVuY2UsYXJnc0xpc3Q6YXJnc0xpc3R9KTtKU0V2ZW50cy5kZWZlcnJlZENhbGxzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5wcmVjZWRlbmNlPHkucHJlY2VkZW5jZX0pfSxyZW1vdmVEZWZlcnJlZENhbGxzOmZ1bmN0aW9uKHRhcmdldEZ1bmN0aW9uKXtmb3IodmFyIGk9MDtpPEpTRXZlbnRzLmRlZmVycmVkQ2FsbHMubGVuZ3RoOysraSl7aWYoSlNFdmVudHMuZGVmZXJyZWRDYWxsc1tpXS50YXJnZXRGdW5jdGlvbj09dGFyZ2V0RnVuY3Rpb24pe0pTRXZlbnRzLmRlZmVycmVkQ2FsbHMuc3BsaWNlKGksMSk7LS1pfX19LGNhblBlcmZvcm1FdmVudEhhbmRsZXJSZXF1ZXN0czpmdW5jdGlvbigpe3JldHVybiBKU0V2ZW50cy5pbkV2ZW50SGFuZGxlciYmSlNFdmVudHMuY3VycmVudEV2ZW50SGFuZGxlci5hbGxvd3NEZWZlcnJlZENhbGxzfSxydW5EZWZlcnJlZENhbGxzOmZ1bmN0aW9uKCl7aWYoIUpTRXZlbnRzLmNhblBlcmZvcm1FdmVudEhhbmRsZXJSZXF1ZXN0cygpKXtyZXR1cm59Zm9yKHZhciBpPTA7aTxKU0V2ZW50cy5kZWZlcnJlZENhbGxzLmxlbmd0aDsrK2kpe3ZhciBjYWxsPUpTRXZlbnRzLmRlZmVycmVkQ2FsbHNbaV07SlNFdmVudHMuZGVmZXJyZWRDYWxscy5zcGxpY2UoaSwxKTstLWk7Y2FsbC50YXJnZXRGdW5jdGlvbi5hcHBseShudWxsLGNhbGwuYXJnc0xpc3QpfX0sZXZlbnRIYW5kbGVyczpbXSxyZW1vdmVBbGxIYW5kbGVyc09uVGFyZ2V0OmZ1bmN0aW9uKHRhcmdldCxldmVudFR5cGVTdHJpbmcpe2Zvcih2YXIgaT0wO2k8SlNFdmVudHMuZXZlbnRIYW5kbGVycy5sZW5ndGg7KytpKXtpZihKU0V2ZW50cy5ldmVudEhhbmRsZXJzW2ldLnRhcmdldD09dGFyZ2V0JiYoIWV2ZW50VHlwZVN0cmluZ3x8ZXZlbnRUeXBlU3RyaW5nPT1KU0V2ZW50cy5ldmVudEhhbmRsZXJzW2ldLmV2ZW50VHlwZVN0cmluZykpe0pTRXZlbnRzLl9yZW1vdmVIYW5kbGVyKGktLSl9fX0sX3JlbW92ZUhhbmRsZXI6ZnVuY3Rpb24oaSl7dmFyIGg9SlNFdmVudHMuZXZlbnRIYW5kbGVyc1tpXTtoLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGguZXZlbnRUeXBlU3RyaW5nLGguZXZlbnRMaXN0ZW5lckZ1bmMsaC51c2VDYXB0dXJlKTtKU0V2ZW50cy5ldmVudEhhbmRsZXJzLnNwbGljZShpLDEpfSxyZWdpc3Rlck9yUmVtb3ZlSGFuZGxlcjpmdW5jdGlvbihldmVudEhhbmRsZXIpe3ZhciBqc0V2ZW50SGFuZGxlcj1mdW5jdGlvbiBqc0V2ZW50SGFuZGxlcihldmVudCl7KytKU0V2ZW50cy5pbkV2ZW50SGFuZGxlcjtKU0V2ZW50cy5jdXJyZW50RXZlbnRIYW5kbGVyPWV2ZW50SGFuZGxlcjtKU0V2ZW50cy5ydW5EZWZlcnJlZENhbGxzKCk7ZXZlbnRIYW5kbGVyLmhhbmRsZXJGdW5jKGV2ZW50KTtKU0V2ZW50cy5ydW5EZWZlcnJlZENhbGxzKCk7LS1KU0V2ZW50cy5pbkV2ZW50SGFuZGxlcn07aWYoZXZlbnRIYW5kbGVyLmNhbGxiYWNrZnVuYyl7ZXZlbnRIYW5kbGVyLmV2ZW50TGlzdGVuZXJGdW5jPWpzRXZlbnRIYW5kbGVyO2V2ZW50SGFuZGxlci50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudEhhbmRsZXIuZXZlbnRUeXBlU3RyaW5nLGpzRXZlbnRIYW5kbGVyLGV2ZW50SGFuZGxlci51c2VDYXB0dXJlKTtKU0V2ZW50cy5ldmVudEhhbmRsZXJzLnB1c2goZXZlbnRIYW5kbGVyKTtKU0V2ZW50cy5yZWdpc3RlclJlbW92ZUV2ZW50TGlzdGVuZXJzKCl9ZWxzZXtmb3IodmFyIGk9MDtpPEpTRXZlbnRzLmV2ZW50SGFuZGxlcnMubGVuZ3RoOysraSl7aWYoSlNFdmVudHMuZXZlbnRIYW5kbGVyc1tpXS50YXJnZXQ9PWV2ZW50SGFuZGxlci50YXJnZXQmJkpTRXZlbnRzLmV2ZW50SGFuZGxlcnNbaV0uZXZlbnRUeXBlU3RyaW5nPT1ldmVudEhhbmRsZXIuZXZlbnRUeXBlU3RyaW5nKXtKU0V2ZW50cy5fcmVtb3ZlSGFuZGxlcihpLS0pfX19fSxnZXROb2RlTmFtZUZvclRhcmdldDpmdW5jdGlvbih0YXJnZXQpe2lmKCF0YXJnZXQpcmV0dXJuIiI7aWYodGFyZ2V0PT13aW5kb3cpcmV0dXJuIiN3aW5kb3ciO2lmKHRhcmdldD09c2NyZWVuKXJldHVybiIjc2NyZWVuIjtyZXR1cm4gdGFyZ2V0JiZ0YXJnZXQubm9kZU5hbWU/dGFyZ2V0Lm5vZGVOYW1lOiIifSxmdWxsc2NyZWVuRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWR9fTt2YXIgY3VycmVudEZ1bGxzY3JlZW5TdHJhdGVneT17fTtmdW5jdGlvbiBtYXliZUNTdHJpbmdUb0pzU3RyaW5nKGNTdHJpbmcpe3JldHVybiBjU3RyaW5nPjI/VVRGOFRvU3RyaW5nKGNTdHJpbmcpOmNTdHJpbmd9dmFyIHNwZWNpYWxIVE1MVGFyZ2V0cz1bMCx0eXBlb2YgZG9jdW1lbnQhPT0idW5kZWZpbmVkIj9kb2N1bWVudDowLHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIj93aW5kb3c6MF07ZnVuY3Rpb24gZmluZEV2ZW50VGFyZ2V0KHRhcmdldCl7dGFyZ2V0PW1heWJlQ1N0cmluZ1RvSnNTdHJpbmcodGFyZ2V0KTt2YXIgZG9tRWxlbWVudD1zcGVjaWFsSFRNTFRhcmdldHNbdGFyZ2V0XXx8KHR5cGVvZiBkb2N1bWVudCE9PSJ1bmRlZmluZWQiP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTp1bmRlZmluZWQpO3JldHVybiBkb21FbGVtZW50fWZ1bmN0aW9uIGZpbmRDYW52YXNFdmVudFRhcmdldCh0YXJnZXQpe3JldHVybiBmaW5kRXZlbnRUYXJnZXQodGFyZ2V0KX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9nZXRfY2FudmFzX2VsZW1lbnRfc2l6ZSh0YXJnZXQsd2lkdGgsaGVpZ2h0KXt2YXIgY2FudmFzPWZpbmRDYW52YXNFdmVudFRhcmdldCh0YXJnZXQpO2lmKCFjYW52YXMpcmV0dXJuLTQ7SEVBUDMyW3dpZHRoPj4yXT1jYW52YXMud2lkdGg7SEVBUDMyW2hlaWdodD4+Ml09Y2FudmFzLmhlaWdodH1mdW5jdGlvbiBnZXRDYW52YXNFbGVtZW50U2l6ZSh0YXJnZXQpe3ZhciBzdGFja1RvcD1zdGFja1NhdmUoKTt2YXIgdz1zdGFja0FsbG9jKDgpO3ZhciBoPXcrNDt2YXIgdGFyZ2V0SW50PXN0YWNrQWxsb2ModGFyZ2V0LmlkLmxlbmd0aCsxKTtzdHJpbmdUb1VURjgodGFyZ2V0LmlkLHRhcmdldEludCx0YXJnZXQuaWQubGVuZ3RoKzEpO3ZhciByZXQ9X2Vtc2NyaXB0ZW5fZ2V0X2NhbnZhc19lbGVtZW50X3NpemUodGFyZ2V0SW50LHcsaCk7dmFyIHNpemU9W0hFQVAzMlt3Pj4yXSxIRUFQMzJbaD4+Ml1dO3N0YWNrUmVzdG9yZShzdGFja1RvcCk7cmV0dXJuIHNpemV9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X2NhbnZhc19lbGVtZW50X3NpemUodGFyZ2V0LHdpZHRoLGhlaWdodCl7dmFyIGNhbnZhcz1maW5kQ2FudmFzRXZlbnRUYXJnZXQodGFyZ2V0KTtpZighY2FudmFzKXJldHVybi00O2NhbnZhcy53aWR0aD13aWR0aDtjYW52YXMuaGVpZ2h0PWhlaWdodDtyZXR1cm4gMH1mdW5jdGlvbiBzZXRDYW52YXNFbGVtZW50U2l6ZSh0YXJnZXQsd2lkdGgsaGVpZ2h0KXtpZighdGFyZ2V0LmNvbnRyb2xUcmFuc2ZlcnJlZE9mZnNjcmVlbil7dGFyZ2V0LndpZHRoPXdpZHRoO3RhcmdldC5oZWlnaHQ9aGVpZ2h0fWVsc2V7dmFyIHN0YWNrVG9wPXN0YWNrU2F2ZSgpO3ZhciB0YXJnZXRJbnQ9c3RhY2tBbGxvYyh0YXJnZXQuaWQubGVuZ3RoKzEpO3N0cmluZ1RvVVRGOCh0YXJnZXQuaWQsdGFyZ2V0SW50LHRhcmdldC5pZC5sZW5ndGgrMSk7X2Vtc2NyaXB0ZW5fc2V0X2NhbnZhc19lbGVtZW50X3NpemUodGFyZ2V0SW50LHdpZHRoLGhlaWdodCk7c3RhY2tSZXN0b3JlKHN0YWNrVG9wKX19ZnVuY3Rpb24gcmVnaXN0ZXJSZXN0b3JlT2xkU3R5bGUoY2FudmFzKXt2YXIgY2FudmFzU2l6ZT1nZXRDYW52YXNFbGVtZW50U2l6ZShjYW52YXMpO3ZhciBvbGRXaWR0aD1jYW52YXNTaXplWzBdO3ZhciBvbGRIZWlnaHQ9Y2FudmFzU2l6ZVsxXTt2YXIgb2xkQ3NzV2lkdGg9Y2FudmFzLnN0eWxlLndpZHRoO3ZhciBvbGRDc3NIZWlnaHQ9Y2FudmFzLnN0eWxlLmhlaWdodDt2YXIgb2xkQmFja2dyb3VuZENvbG9yPWNhbnZhcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7dmFyIG9sZERvY3VtZW50QmFja2dyb3VuZENvbG9yPWRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yO3ZhciBvbGRQYWRkaW5nTGVmdD1jYW52YXMuc3R5bGUucGFkZGluZ0xlZnQ7dmFyIG9sZFBhZGRpbmdSaWdodD1jYW52YXMuc3R5bGUucGFkZGluZ1JpZ2h0O3ZhciBvbGRQYWRkaW5nVG9wPWNhbnZhcy5zdHlsZS5wYWRkaW5nVG9wO3ZhciBvbGRQYWRkaW5nQm90dG9tPWNhbnZhcy5zdHlsZS5wYWRkaW5nQm90dG9tO3ZhciBvbGRNYXJnaW5MZWZ0PWNhbnZhcy5zdHlsZS5tYXJnaW5MZWZ0O3ZhciBvbGRNYXJnaW5SaWdodD1jYW52YXMuc3R5bGUubWFyZ2luUmlnaHQ7dmFyIG9sZE1hcmdpblRvcD1jYW52YXMuc3R5bGUubWFyZ2luVG9wO3ZhciBvbGRNYXJnaW5Cb3R0b209Y2FudmFzLnN0eWxlLm1hcmdpbkJvdHRvbTt2YXIgb2xkRG9jdW1lbnRCb2R5TWFyZ2luPWRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luO3ZhciBvbGREb2N1bWVudE92ZXJmbG93PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdzt2YXIgb2xkRG9jdW1lbnRTY3JvbGw9ZG9jdW1lbnQuYm9keS5zY3JvbGw7dmFyIG9sZEltYWdlUmVuZGVyaW5nPWNhbnZhcy5zdHlsZS5pbWFnZVJlbmRlcmluZztmdW5jdGlvbiByZXN0b3JlT2xkU3R5bGUoKXt2YXIgZnVsbHNjcmVlbkVsZW1lbnQ9ZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O2lmKCFmdWxsc2NyZWVuRWxlbWVudCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIscmVzdG9yZU9sZFN0eWxlKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIixyZXN0b3JlT2xkU3R5bGUpO3NldENhbnZhc0VsZW1lbnRTaXplKGNhbnZhcyxvbGRXaWR0aCxvbGRIZWlnaHQpO2NhbnZhcy5zdHlsZS53aWR0aD1vbGRDc3NXaWR0aDtjYW52YXMuc3R5bGUuaGVpZ2h0PW9sZENzc0hlaWdodDtjYW52YXMuc3R5bGUuYmFja2dyb3VuZENvbG9yPW9sZEJhY2tncm91bmRDb2xvcjtpZighb2xkRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IndoaXRlIjtkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvcj1vbGREb2N1bWVudEJhY2tncm91bmRDb2xvcjtjYW52YXMuc3R5bGUucGFkZGluZ0xlZnQ9b2xkUGFkZGluZ0xlZnQ7Y2FudmFzLnN0eWxlLnBhZGRpbmdSaWdodD1vbGRQYWRkaW5nUmlnaHQ7Y2FudmFzLnN0eWxlLnBhZGRpbmdUb3A9b2xkUGFkZGluZ1RvcDtjYW52YXMuc3R5bGUucGFkZGluZ0JvdHRvbT1vbGRQYWRkaW5nQm90dG9tO2NhbnZhcy5zdHlsZS5tYXJnaW5MZWZ0PW9sZE1hcmdpbkxlZnQ7Y2FudmFzLnN0eWxlLm1hcmdpblJpZ2h0PW9sZE1hcmdpblJpZ2h0O2NhbnZhcy5zdHlsZS5tYXJnaW5Ub3A9b2xkTWFyZ2luVG9wO2NhbnZhcy5zdHlsZS5tYXJnaW5Cb3R0b209b2xkTWFyZ2luQm90dG9tO2RvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luPW9sZERvY3VtZW50Qm9keU1hcmdpbjtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9b2xkRG9jdW1lbnRPdmVyZmxvdztkb2N1bWVudC5ib2R5LnNjcm9sbD1vbGREb2N1bWVudFNjcm9sbDtjYW52YXMuc3R5bGUuaW1hZ2VSZW5kZXJpbmc9b2xkSW1hZ2VSZW5kZXJpbmc7aWYoY2FudmFzLkdMY3R4T2JqZWN0KWNhbnZhcy5HTGN0eE9iamVjdC5HTGN0eC52aWV3cG9ydCgwLDAsb2xkV2lkdGgsb2xkSGVpZ2h0KTtpZihjdXJyZW50RnVsbHNjcmVlblN0cmF0ZWd5LmNhbnZhc1Jlc2l6ZWRDYWxsYmFjayl7KGZ1bmN0aW9uKGExLGEyLGEzKXtyZXR1cm4gZHluQ2FsbF9paWlpLmFwcGx5KG51bGwsW2N1cnJlbnRGdWxsc2NyZWVuU3RyYXRlZ3kuY2FudmFzUmVzaXplZENhbGxiYWNrLGExLGEyLGEzXSl9KSgzNywwLGN1cnJlbnRGdWxsc2NyZWVuU3RyYXRlZ3kuY2FudmFzUmVzaXplZENhbGxiYWNrVXNlckRhdGEpfX19ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIscmVzdG9yZU9sZFN0eWxlKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIixyZXN0b3JlT2xkU3R5bGUpO3JldHVybiByZXN0b3JlT2xkU3R5bGV9ZnVuY3Rpb24gc2V0TGV0dGVyYm94KGVsZW1lbnQsdG9wQm90dG9tLGxlZnRSaWdodCl7ZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD1lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodD1sZWZ0UmlnaHQrInB4IjtlbGVtZW50LnN0eWxlLnBhZGRpbmdUb3A9ZWxlbWVudC5zdHlsZS5wYWRkaW5nQm90dG9tPXRvcEJvdHRvbSsicHgifWZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlKXtyZXR1cm4gc3BlY2lhbEhUTUxUYXJnZXRzLmluZGV4T2YoZSk8MD9lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnsibGVmdCI6MCwidG9wIjowfX1mdW5jdGlvbiBfSlNFdmVudHNfcmVzaXplQ2FudmFzRm9yRnVsbHNjcmVlbih0YXJnZXQsc3RyYXRlZ3kpe3ZhciByZXN0b3JlT2xkU3R5bGU9cmVnaXN0ZXJSZXN0b3JlT2xkU3R5bGUodGFyZ2V0KTt2YXIgY3NzV2lkdGg9c3RyYXRlZ3kuc29mdEZ1bGxzY3JlZW4/aW5uZXJXaWR0aDpzY3JlZW4ud2lkdGg7dmFyIGNzc0hlaWdodD1zdHJhdGVneS5zb2Z0RnVsbHNjcmVlbj9pbm5lckhlaWdodDpzY3JlZW4uaGVpZ2h0O3ZhciByZWN0PWdldEJvdW5kaW5nQ2xpZW50UmVjdCh0YXJnZXQpO3ZhciB3aW5kb3dlZENzc1dpZHRoPXJlY3Qud2lkdGg7dmFyIHdpbmRvd2VkQ3NzSGVpZ2h0PXJlY3QuaGVpZ2h0O3ZhciBjYW52YXNTaXplPWdldENhbnZhc0VsZW1lbnRTaXplKHRhcmdldCk7dmFyIHdpbmRvd2VkUnR0V2lkdGg9Y2FudmFzU2l6ZVswXTt2YXIgd2luZG93ZWRSdHRIZWlnaHQ9Y2FudmFzU2l6ZVsxXTtpZihzdHJhdGVneS5zY2FsZU1vZGU9PTMpe3NldExldHRlcmJveCh0YXJnZXQsKGNzc0hlaWdodC13aW5kb3dlZENzc0hlaWdodCkvMiwoY3NzV2lkdGgtd2luZG93ZWRDc3NXaWR0aCkvMik7Y3NzV2lkdGg9d2luZG93ZWRDc3NXaWR0aDtjc3NIZWlnaHQ9d2luZG93ZWRDc3NIZWlnaHR9ZWxzZSBpZihzdHJhdGVneS5zY2FsZU1vZGU9PTIpe2lmKGNzc1dpZHRoKndpbmRvd2VkUnR0SGVpZ2h0PHdpbmRvd2VkUnR0V2lkdGgqY3NzSGVpZ2h0KXt2YXIgZGVzaXJlZENzc0hlaWdodD13aW5kb3dlZFJ0dEhlaWdodCpjc3NXaWR0aC93aW5kb3dlZFJ0dFdpZHRoO3NldExldHRlcmJveCh0YXJnZXQsKGNzc0hlaWdodC1kZXNpcmVkQ3NzSGVpZ2h0KS8yLDApO2Nzc0hlaWdodD1kZXNpcmVkQ3NzSGVpZ2h0fWVsc2V7dmFyIGRlc2lyZWRDc3NXaWR0aD13aW5kb3dlZFJ0dFdpZHRoKmNzc0hlaWdodC93aW5kb3dlZFJ0dEhlaWdodDtzZXRMZXR0ZXJib3godGFyZ2V0LDAsKGNzc1dpZHRoLWRlc2lyZWRDc3NXaWR0aCkvMik7Y3NzV2lkdGg9ZGVzaXJlZENzc1dpZHRofX1pZighdGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvcil0YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSJibGFjayI7aWYoIWRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yKWRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yPSJibGFjayI7dGFyZ2V0LnN0eWxlLndpZHRoPWNzc1dpZHRoKyJweCI7dGFyZ2V0LnN0eWxlLmhlaWdodD1jc3NIZWlnaHQrInB4IjtpZihzdHJhdGVneS5maWx0ZXJpbmdNb2RlPT0xKXt0YXJnZXQuc3R5bGUuaW1hZ2VSZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiO3RhcmdldC5zdHlsZS5pbWFnZVJlbmRlcmluZz0iLW1vei1jcmlzcC1lZGdlcyI7dGFyZ2V0LnN0eWxlLmltYWdlUmVuZGVyaW5nPSItby1jcmlzcC1lZGdlcyI7dGFyZ2V0LnN0eWxlLmltYWdlUmVuZGVyaW5nPSItd2Via2l0LW9wdGltaXplLWNvbnRyYXN0Ijt0YXJnZXQuc3R5bGUuaW1hZ2VSZW5kZXJpbmc9Im9wdGltaXplLWNvbnRyYXN0Ijt0YXJnZXQuc3R5bGUuaW1hZ2VSZW5kZXJpbmc9ImNyaXNwLWVkZ2VzIjt0YXJnZXQuc3R5bGUuaW1hZ2VSZW5kZXJpbmc9InBpeGVsYXRlZCJ9dmFyIGRwaVNjYWxlPXN0cmF0ZWd5LmNhbnZhc1Jlc29sdXRpb25TY2FsZU1vZGU9PTI/ZGV2aWNlUGl4ZWxSYXRpbzoxO2lmKHN0cmF0ZWd5LmNhbnZhc1Jlc29sdXRpb25TY2FsZU1vZGUhPTApe3ZhciBuZXdXaWR0aD1jc3NXaWR0aCpkcGlTY2FsZXwwO3ZhciBuZXdIZWlnaHQ9Y3NzSGVpZ2h0KmRwaVNjYWxlfDA7c2V0Q2FudmFzRWxlbWVudFNpemUodGFyZ2V0LG5ld1dpZHRoLG5ld0hlaWdodCk7aWYodGFyZ2V0LkdMY3R4T2JqZWN0KXRhcmdldC5HTGN0eE9iamVjdC5HTGN0eC52aWV3cG9ydCgwLDAsbmV3V2lkdGgsbmV3SGVpZ2h0KX1yZXR1cm4gcmVzdG9yZU9sZFN0eWxlfWZ1bmN0aW9uIF9KU0V2ZW50c19yZXF1ZXN0RnVsbHNjcmVlbih0YXJnZXQsc3RyYXRlZ3kpe2lmKHN0cmF0ZWd5LnNjYWxlTW9kZSE9MHx8c3RyYXRlZ3kuY2FudmFzUmVzb2x1dGlvblNjYWxlTW9kZSE9MCl7X0pTRXZlbnRzX3Jlc2l6ZUNhbnZhc0ZvckZ1bGxzY3JlZW4odGFyZ2V0LHN0cmF0ZWd5KX1pZih0YXJnZXQucmVxdWVzdEZ1bGxzY3JlZW4pe3RhcmdldC5yZXF1ZXN0RnVsbHNjcmVlbigpfWVsc2UgaWYodGFyZ2V0LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKXt0YXJnZXQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCl9ZWxzZXtyZXR1cm4gSlNFdmVudHMuZnVsbHNjcmVlbkVuYWJsZWQoKT8tMzotMX1jdXJyZW50RnVsbHNjcmVlblN0cmF0ZWd5PXN0cmF0ZWd5O2lmKHN0cmF0ZWd5LmNhbnZhc1Jlc2l6ZWRDYWxsYmFjayl7KGZ1bmN0aW9uKGExLGEyLGEzKXtyZXR1cm4gZHluQ2FsbF9paWlpLmFwcGx5KG51bGwsW3N0cmF0ZWd5LmNhbnZhc1Jlc2l6ZWRDYWxsYmFjayxhMSxhMixhM10pfSkoMzcsMCxzdHJhdGVneS5jYW52YXNSZXNpemVkQ2FsbGJhY2tVc2VyRGF0YSl9cmV0dXJuIDB9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fZXhpdF9mdWxsc2NyZWVuKCl7aWYoIUpTRXZlbnRzLmZ1bGxzY3JlZW5FbmFibGVkKCkpcmV0dXJuLTE7SlNFdmVudHMucmVtb3ZlRGVmZXJyZWRDYWxscyhfSlNFdmVudHNfcmVxdWVzdEZ1bGxzY3JlZW4pO3ZhciBkPXNwZWNpYWxIVE1MVGFyZ2V0c1sxXTtpZihkLmV4aXRGdWxsc2NyZWVuKXtkLmZ1bGxzY3JlZW5FbGVtZW50JiZkLmV4aXRGdWxsc2NyZWVuKCl9ZWxzZSBpZihkLndlYmtpdEV4aXRGdWxsc2NyZWVuKXtkLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50JiZkLndlYmtpdEV4aXRGdWxsc2NyZWVuKCl9ZWxzZXtyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiByZXF1ZXN0UG9pbnRlckxvY2sodGFyZ2V0KXtpZih0YXJnZXQucmVxdWVzdFBvaW50ZXJMb2NrKXt0YXJnZXQucmVxdWVzdFBvaW50ZXJMb2NrKCl9ZWxzZSBpZih0YXJnZXQubXNSZXF1ZXN0UG9pbnRlckxvY2spe3RhcmdldC5tc1JlcXVlc3RQb2ludGVyTG9jaygpfWVsc2V7aWYoZG9jdW1lbnQuYm9keS5yZXF1ZXN0UG9pbnRlckxvY2t8fGRvY3VtZW50LmJvZHkubXNSZXF1ZXN0UG9pbnRlckxvY2spe3JldHVybi0zfWVsc2V7cmV0dXJuLTF9fXJldHVybiAwfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2V4aXRfcG9pbnRlcmxvY2soKXtKU0V2ZW50cy5yZW1vdmVEZWZlcnJlZENhbGxzKHJlcXVlc3RQb2ludGVyTG9jayk7aWYoZG9jdW1lbnQuZXhpdFBvaW50ZXJMb2NrKXtkb2N1bWVudC5leGl0UG9pbnRlckxvY2soKX1lbHNlIGlmKGRvY3VtZW50Lm1zRXhpdFBvaW50ZXJMb2NrKXtkb2N1bWVudC5tc0V4aXRQb2ludGVyTG9jaygpfWVsc2V7cmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gZmlsbEZ1bGxzY3JlZW5DaGFuZ2VFdmVudERhdGEoZXZlbnRTdHJ1Y3Qpe3ZhciBmdWxsc2NyZWVuRWxlbWVudD1kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O3ZhciBpc0Z1bGxzY3JlZW49ISFmdWxsc2NyZWVuRWxlbWVudDtIRUFQMzJbZXZlbnRTdHJ1Y3Q+PjJdPWlzRnVsbHNjcmVlbjtIRUFQMzJbZXZlbnRTdHJ1Y3QrND4+Ml09SlNFdmVudHMuZnVsbHNjcmVlbkVuYWJsZWQoKTt2YXIgcmVwb3J0ZWRFbGVtZW50PWlzRnVsbHNjcmVlbj9mdWxsc2NyZWVuRWxlbWVudDpKU0V2ZW50cy5wcmV2aW91c0Z1bGxzY3JlZW5FbGVtZW50O3ZhciBub2RlTmFtZT1KU0V2ZW50cy5nZXROb2RlTmFtZUZvclRhcmdldChyZXBvcnRlZEVsZW1lbnQpO3ZhciBpZD1yZXBvcnRlZEVsZW1lbnQmJnJlcG9ydGVkRWxlbWVudC5pZD9yZXBvcnRlZEVsZW1lbnQuaWQ6IiI7c3RyaW5nVG9VVEY4KG5vZGVOYW1lLGV2ZW50U3RydWN0KzgsMTI4KTtzdHJpbmdUb1VURjgoaWQsZXZlbnRTdHJ1Y3QrMTM2LDEyOCk7SEVBUDMyW2V2ZW50U3RydWN0KzI2ND4+Ml09cmVwb3J0ZWRFbGVtZW50P3JlcG9ydGVkRWxlbWVudC5jbGllbnRXaWR0aDowO0hFQVAzMltldmVudFN0cnVjdCsyNjg+PjJdPXJlcG9ydGVkRWxlbWVudD9yZXBvcnRlZEVsZW1lbnQuY2xpZW50SGVpZ2h0OjA7SEVBUDMyW2V2ZW50U3RydWN0KzI3Mj4+Ml09c2NyZWVuLndpZHRoO0hFQVAzMltldmVudFN0cnVjdCsyNzY+PjJdPXNjcmVlbi5oZWlnaHQ7aWYoaXNGdWxsc2NyZWVuKXtKU0V2ZW50cy5wcmV2aW91c0Z1bGxzY3JlZW5FbGVtZW50PWZ1bGxzY3JlZW5FbGVtZW50fX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9nZXRfZnVsbHNjcmVlbl9zdGF0dXMoZnVsbHNjcmVlblN0YXR1cyl7aWYoIUpTRXZlbnRzLmZ1bGxzY3JlZW5FbmFibGVkKCkpcmV0dXJuLTE7ZmlsbEZ1bGxzY3JlZW5DaGFuZ2VFdmVudERhdGEoZnVsbHNjcmVlblN0YXR1cyk7cmV0dXJuIDB9ZnVuY3Rpb24gZmlsbEdhbWVwYWRFdmVudERhdGEoZXZlbnRTdHJ1Y3QsZSl7SEVBUEY2NFtldmVudFN0cnVjdD4+M109ZS50aW1lc3RhbXA7Zm9yKHZhciBpPTA7aTxlLmF4ZXMubGVuZ3RoOysraSl7SEVBUEY2NFtldmVudFN0cnVjdCtpKjgrMTY+PjNdPWUuYXhlc1tpXX1mb3IodmFyIGk9MDtpPGUuYnV0dG9ucy5sZW5ndGg7KytpKXtpZih0eXBlb2YgZS5idXR0b25zW2ldPT09Im9iamVjdCIpe0hFQVBGNjRbZXZlbnRTdHJ1Y3QraSo4KzUyOD4+M109ZS5idXR0b25zW2ldLnZhbHVlfWVsc2V7SEVBUEY2NFtldmVudFN0cnVjdCtpKjgrNTI4Pj4zXT1lLmJ1dHRvbnNbaV19fWZvcih2YXIgaT0wO2k8ZS5idXR0b25zLmxlbmd0aDsrK2kpe2lmKHR5cGVvZiBlLmJ1dHRvbnNbaV09PT0ib2JqZWN0Iil7SEVBUDMyW2V2ZW50U3RydWN0K2kqNCsxMDQwPj4yXT1lLmJ1dHRvbnNbaV0ucHJlc3NlZH1lbHNle0hFQVAzMltldmVudFN0cnVjdCtpKjQrMTA0MD4+Ml09ZS5idXR0b25zW2ldPT0xfX1IRUFQMzJbZXZlbnRTdHJ1Y3QrMTI5Nj4+Ml09ZS5jb25uZWN0ZWQ7SEVBUDMyW2V2ZW50U3RydWN0KzEzMDA+PjJdPWUuaW5kZXg7SEVBUDMyW2V2ZW50U3RydWN0Kzg+PjJdPWUuYXhlcy5sZW5ndGg7SEVBUDMyW2V2ZW50U3RydWN0KzEyPj4yXT1lLmJ1dHRvbnMubGVuZ3RoO3N0cmluZ1RvVVRGOChlLmlkLGV2ZW50U3RydWN0KzEzMDQsNjQpO3N0cmluZ1RvVVRGOChlLm1hcHBpbmcsZXZlbnRTdHJ1Y3QrMTM2OCw2NCl9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fZ2V0X2dhbWVwYWRfc3RhdHVzKGluZGV4LGdhbWVwYWRTdGF0ZSl7aWYoaW5kZXg8MHx8aW5kZXg+PUpTRXZlbnRzLmxhc3RHYW1lcGFkU3RhdGUubGVuZ3RoKXJldHVybi01O2lmKCFKU0V2ZW50cy5sYXN0R2FtZXBhZFN0YXRlW2luZGV4XSlyZXR1cm4tNztmaWxsR2FtZXBhZEV2ZW50RGF0YShnYW1lcGFkU3RhdGUsSlNFdmVudHMubGFzdEdhbWVwYWRTdGF0ZVtpbmRleF0pO3JldHVybiAwfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2dldF9oZWFwX21heCgpe3JldHVybiAyMTQ3NDgzNjQ4fWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2dldF9udW1fZ2FtZXBhZHMoKXtyZXR1cm4gSlNFdmVudHMubGFzdEdhbWVwYWRTdGF0ZS5sZW5ndGh9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5faHRtbDVfcmVtb3ZlX2FsbF9ldmVudF9saXN0ZW5lcnMoKXtKU0V2ZW50cy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2lzX3dlYmdsX2NvbnRleHRfbG9zdChjb250ZXh0SGFuZGxlKXtyZXR1cm4hR0wuY29udGV4dHNbY29udGV4dEhhbmRsZV18fEdMLmNvbnRleHRzW2NvbnRleHRIYW5kbGVdLkdMY3R4LmlzQ29udGV4dExvc3QoKX1mdW5jdGlvbiByZWFsbHlOZWdhdGl2ZSh4KXtyZXR1cm4geDwwfHx4PT09MCYmMS94PT09LUluZmluaXR5fWZ1bmN0aW9uIGNvbnZlcnRJMzJQYWlyVG9JNTMobG8saGkpe3JldHVybihsbz4+PjApK2hpKjQyOTQ5NjcyOTZ9ZnVuY3Rpb24gY29udmVydFUzMlBhaXJUb0k1MyhsbyxoaSl7cmV0dXJuKGxvPj4+MCkrKGhpPj4+MCkqNDI5NDk2NzI5Nn1mdW5jdGlvbiByZVNpZ24odmFsdWUsYml0cyl7aWYodmFsdWU8PTApe3JldHVybiB2YWx1ZX12YXIgaGFsZj1iaXRzPD0zMj9NYXRoLmFicygxPDxiaXRzLTEpOk1hdGgucG93KDIsYml0cy0xKTtpZih2YWx1ZT49aGFsZiYmKGJpdHM8PTMyfHx2YWx1ZT5oYWxmKSl7dmFsdWU9LTIqaGFsZit2YWx1ZX1yZXR1cm4gdmFsdWV9ZnVuY3Rpb24gdW5TaWduKHZhbHVlLGJpdHMpe2lmKHZhbHVlPj0wKXtyZXR1cm4gdmFsdWV9cmV0dXJuIGJpdHM8PTMyPzIqTWF0aC5hYnMoMTw8Yml0cy0xKSt2YWx1ZTpNYXRoLnBvdygyLGJpdHMpK3ZhbHVlfWZ1bmN0aW9uIGZvcm1hdFN0cmluZyhmb3JtYXQsdmFyYXJncyl7dmFyIHRleHRJbmRleD1mb3JtYXQ7dmFyIGFyZ0luZGV4PXZhcmFyZ3M7ZnVuY3Rpb24gcHJlcFZhcmFyZyhwdHIsdHlwZSl7aWYodHlwZT09PSJkb3VibGUifHx0eXBlPT09Imk2NCIpe2lmKHB0ciY3KXtwdHIrPTR9fWVsc2V7fXJldHVybiBwdHJ9ZnVuY3Rpb24gZ2V0TmV4dEFyZyh0eXBlKXt2YXIgcmV0O2FyZ0luZGV4PXByZXBWYXJhcmcoYXJnSW5kZXgsdHlwZSk7aWYodHlwZT09PSJkb3VibGUiKXtyZXQ9SEVBUEY2NFthcmdJbmRleD4+M107YXJnSW5kZXgrPTh9ZWxzZSBpZih0eXBlPT0iaTY0Iil7cmV0PVtIRUFQMzJbYXJnSW5kZXg+PjJdLEhFQVAzMlthcmdJbmRleCs0Pj4yXV07YXJnSW5kZXgrPTh9ZWxzZXt0eXBlPSJpMzIiO3JldD1IRUFQMzJbYXJnSW5kZXg+PjJdO2FyZ0luZGV4Kz00fXJldHVybiByZXR9dmFyIHJldD1bXTt2YXIgY3VycixuZXh0LGN1cnJBcmc7d2hpbGUoMSl7dmFyIHN0YXJ0VGV4dEluZGV4PXRleHRJbmRleDtjdXJyPUhFQVA4W3RleHRJbmRleD4+MF07aWYoY3Vycj09PTApYnJlYWs7bmV4dD1IRUFQOFt0ZXh0SW5kZXgrMT4+MF07aWYoY3Vycj09Mzcpe3ZhciBmbGFnQWx3YXlzU2lnbmVkPWZhbHNlO3ZhciBmbGFnTGVmdEFsaWduPWZhbHNlO3ZhciBmbGFnQWx0ZXJuYXRpdmU9ZmFsc2U7dmFyIGZsYWdaZXJvUGFkPWZhbHNlO3ZhciBmbGFnUGFkU2lnbj1mYWxzZTtmbGFnc0xvb3A6d2hpbGUoMSl7c3dpdGNoKG5leHQpe2Nhc2UgNDM6ZmxhZ0Fsd2F5c1NpZ25lZD10cnVlO2JyZWFrO2Nhc2UgNDU6ZmxhZ0xlZnRBbGlnbj10cnVlO2JyZWFrO2Nhc2UgMzU6ZmxhZ0FsdGVybmF0aXZlPXRydWU7YnJlYWs7Y2FzZSA0ODppZihmbGFnWmVyb1BhZCl7YnJlYWsgZmxhZ3NMb29wfWVsc2V7ZmxhZ1plcm9QYWQ9dHJ1ZTticmVha31jYXNlIDMyOmZsYWdQYWRTaWduPXRydWU7YnJlYWs7ZGVmYXVsdDpicmVhayBmbGFnc0xvb3B9dGV4dEluZGV4Kys7bmV4dD1IRUFQOFt0ZXh0SW5kZXgrMT4+MF19dmFyIHdpZHRoPTA7aWYobmV4dD09NDIpe3dpZHRoPWdldE5leHRBcmcoImkzMiIpO3RleHRJbmRleCsrO25leHQ9SEVBUDhbdGV4dEluZGV4KzE+PjBdfWVsc2V7d2hpbGUobmV4dD49NDgmJm5leHQ8PTU3KXt3aWR0aD13aWR0aCoxMCsobmV4dC00OCk7dGV4dEluZGV4Kys7bmV4dD1IRUFQOFt0ZXh0SW5kZXgrMT4+MF19fXZhciBwcmVjaXNpb25TZXQ9ZmFsc2UscHJlY2lzaW9uPS0xO2lmKG5leHQ9PTQ2KXtwcmVjaXNpb249MDtwcmVjaXNpb25TZXQ9dHJ1ZTt0ZXh0SW5kZXgrKztuZXh0PUhFQVA4W3RleHRJbmRleCsxPj4wXTtpZihuZXh0PT00Mil7cHJlY2lzaW9uPWdldE5leHRBcmcoImkzMiIpO3RleHRJbmRleCsrfWVsc2V7d2hpbGUoMSl7dmFyIHByZWNpc2lvbkNocj1IRUFQOFt0ZXh0SW5kZXgrMT4+MF07aWYocHJlY2lzaW9uQ2hyPDQ4fHxwcmVjaXNpb25DaHI+NTcpYnJlYWs7cHJlY2lzaW9uPXByZWNpc2lvbioxMCsocHJlY2lzaW9uQ2hyLTQ4KTt0ZXh0SW5kZXgrK319bmV4dD1IRUFQOFt0ZXh0SW5kZXgrMT4+MF19aWYocHJlY2lzaW9uPDApe3ByZWNpc2lvbj02O3ByZWNpc2lvblNldD1mYWxzZX12YXIgYXJnU2l6ZTtzd2l0Y2goU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0KSl7Y2FzZSJoIjp2YXIgbmV4dE5leHQ9SEVBUDhbdGV4dEluZGV4KzI+PjBdO2lmKG5leHROZXh0PT0xMDQpe3RleHRJbmRleCsrO2FyZ1NpemU9MX1lbHNle2FyZ1NpemU9Mn1icmVhaztjYXNlImwiOnZhciBuZXh0TmV4dD1IRUFQOFt0ZXh0SW5kZXgrMj4+MF07aWYobmV4dE5leHQ9PTEwOCl7dGV4dEluZGV4Kys7YXJnU2l6ZT04fWVsc2V7YXJnU2l6ZT00fWJyZWFrO2Nhc2UiTCI6Y2FzZSJxIjpjYXNlImoiOmFyZ1NpemU9ODticmVhaztjYXNlInoiOmNhc2UidCI6Y2FzZSJJIjphcmdTaXplPTQ7YnJlYWs7ZGVmYXVsdDphcmdTaXplPW51bGx9aWYoYXJnU2l6ZSl0ZXh0SW5kZXgrKztuZXh0PUhFQVA4W3RleHRJbmRleCsxPj4wXTtzd2l0Y2goU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0KSl7Y2FzZSJkIjpjYXNlImkiOmNhc2UidSI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6Y2FzZSJwIjp7dmFyIHNpZ25lZD1uZXh0PT0xMDB8fG5leHQ9PTEwNTthcmdTaXplPWFyZ1NpemV8fDQ7Y3VyckFyZz1nZXROZXh0QXJnKCJpIithcmdTaXplKjgpO3ZhciBhcmdUZXh0O2lmKGFyZ1NpemU9PTgpe2N1cnJBcmc9bmV4dD09MTE3P2NvbnZlcnRVMzJQYWlyVG9JNTMoY3VyckFyZ1swXSxjdXJyQXJnWzFdKTpjb252ZXJ0STMyUGFpclRvSTUzKGN1cnJBcmdbMF0sY3VyckFyZ1sxXSl9aWYoYXJnU2l6ZTw9NCl7dmFyIGxpbWl0PU1hdGgucG93KDI1NixhcmdTaXplKS0xO2N1cnJBcmc9KHNpZ25lZD9yZVNpZ246dW5TaWduKShjdXJyQXJnJmxpbWl0LGFyZ1NpemUqOCl9dmFyIGN1cnJBYnNBcmc9TWF0aC5hYnMoY3VyckFyZyk7dmFyIHByZWZpeD0iIjtpZihuZXh0PT0xMDB8fG5leHQ9PTEwNSl7YXJnVGV4dD1yZVNpZ24oY3VyckFyZyw4KmFyZ1NpemUsMSkudG9TdHJpbmcoMTApfWVsc2UgaWYobmV4dD09MTE3KXthcmdUZXh0PXVuU2lnbihjdXJyQXJnLDgqYXJnU2l6ZSwxKS50b1N0cmluZygxMCk7Y3VyckFyZz1NYXRoLmFicyhjdXJyQXJnKX1lbHNlIGlmKG5leHQ9PTExMSl7YXJnVGV4dD0oZmxhZ0FsdGVybmF0aXZlPyIwIjoiIikrY3VyckFic0FyZy50b1N0cmluZyg4KX1lbHNlIGlmKG5leHQ9PTEyMHx8bmV4dD09ODgpe3ByZWZpeD1mbGFnQWx0ZXJuYXRpdmUmJmN1cnJBcmchPTA/IjB4IjoiIjtpZihjdXJyQXJnPDApe2N1cnJBcmc9LWN1cnJBcmc7YXJnVGV4dD0oY3VyckFic0FyZy0xKS50b1N0cmluZygxNik7dmFyIGJ1ZmZlcj1bXTtmb3IodmFyIGk9MDtpPGFyZ1RleHQubGVuZ3RoO2krKyl7YnVmZmVyLnB1c2goKDE1LXBhcnNlSW50KGFyZ1RleHRbaV0sMTYpKS50b1N0cmluZygxNikpfWFyZ1RleHQ9YnVmZmVyLmpvaW4oIiIpO3doaWxlKGFyZ1RleHQubGVuZ3RoPGFyZ1NpemUqMilhcmdUZXh0PSJmIithcmdUZXh0fWVsc2V7YXJnVGV4dD1jdXJyQWJzQXJnLnRvU3RyaW5nKDE2KX1pZihuZXh0PT04OCl7cHJlZml4PXByZWZpeC50b1VwcGVyQ2FzZSgpO2FyZ1RleHQ9YXJnVGV4dC50b1VwcGVyQ2FzZSgpfX1lbHNlIGlmKG5leHQ9PTExMil7aWYoY3VyckFic0FyZz09PTApe2FyZ1RleHQ9IihuaWwpIn1lbHNle3ByZWZpeD0iMHgiO2FyZ1RleHQ9Y3VyckFic0FyZy50b1N0cmluZygxNil9fWlmKHByZWNpc2lvblNldCl7d2hpbGUoYXJnVGV4dC5sZW5ndGg8cHJlY2lzaW9uKXthcmdUZXh0PSIwIithcmdUZXh0fX1pZihjdXJyQXJnPj0wKXtpZihmbGFnQWx3YXlzU2lnbmVkKXtwcmVmaXg9IisiK3ByZWZpeH1lbHNlIGlmKGZsYWdQYWRTaWduKXtwcmVmaXg9IiAiK3ByZWZpeH19aWYoYXJnVGV4dC5jaGFyQXQoMCk9PSItIil7cHJlZml4PSItIitwcmVmaXg7YXJnVGV4dD1hcmdUZXh0LnN1YnN0cigxKX13aGlsZShwcmVmaXgubGVuZ3RoK2FyZ1RleHQubGVuZ3RoPHdpZHRoKXtpZihmbGFnTGVmdEFsaWduKXthcmdUZXh0Kz0iICJ9ZWxzZXtpZihmbGFnWmVyb1BhZCl7YXJnVGV4dD0iMCIrYXJnVGV4dH1lbHNle3ByZWZpeD0iICIrcHJlZml4fX19YXJnVGV4dD1wcmVmaXgrYXJnVGV4dDthcmdUZXh0LnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGNocil7cmV0LnB1c2goY2hyLmNoYXJDb2RlQXQoMCkpfSk7YnJlYWt9Y2FzZSJmIjpjYXNlIkYiOmNhc2UiZSI6Y2FzZSJFIjpjYXNlImciOmNhc2UiRyI6e2N1cnJBcmc9Z2V0TmV4dEFyZygiZG91YmxlIik7dmFyIGFyZ1RleHQ7aWYoaXNOYU4oY3VyckFyZykpe2FyZ1RleHQ9Im5hbiI7ZmxhZ1plcm9QYWQ9ZmFsc2V9ZWxzZSBpZighaXNGaW5pdGUoY3VyckFyZykpe2FyZ1RleHQ9KGN1cnJBcmc8MD8iLSI6IiIpKyJpbmYiO2ZsYWdaZXJvUGFkPWZhbHNlfWVsc2V7dmFyIGlzR2VuZXJhbD1mYWxzZTt2YXIgZWZmZWN0aXZlUHJlY2lzaW9uPU1hdGgubWluKHByZWNpc2lvbiwyMCk7aWYobmV4dD09MTAzfHxuZXh0PT03MSl7aXNHZW5lcmFsPXRydWU7cHJlY2lzaW9uPXByZWNpc2lvbnx8MTt2YXIgZXhwb25lbnQ9cGFyc2VJbnQoY3VyckFyZy50b0V4cG9uZW50aWFsKGVmZmVjdGl2ZVByZWNpc2lvbikuc3BsaXQoImUiKVsxXSwxMCk7aWYocHJlY2lzaW9uPmV4cG9uZW50JiZleHBvbmVudD49LTQpe25leHQ9KG5leHQ9PTEwMz8iZiI6IkYiKS5jaGFyQ29kZUF0KDApO3ByZWNpc2lvbi09ZXhwb25lbnQrMX1lbHNle25leHQ9KG5leHQ9PTEwMz8iZSI6IkUiKS5jaGFyQ29kZUF0KDApO3ByZWNpc2lvbi0tfWVmZmVjdGl2ZVByZWNpc2lvbj1NYXRoLm1pbihwcmVjaXNpb24sMjApfWlmKG5leHQ9PTEwMXx8bmV4dD09Njkpe2FyZ1RleHQ9Y3VyckFyZy50b0V4cG9uZW50aWFsKGVmZmVjdGl2ZVByZWNpc2lvbik7aWYoL1tlRV1bLStdXGQkLy50ZXN0KGFyZ1RleHQpKXthcmdUZXh0PWFyZ1RleHQuc2xpY2UoMCwtMSkrIjAiK2FyZ1RleHQuc2xpY2UoLTEpfX1lbHNlIGlmKG5leHQ9PTEwMnx8bmV4dD09NzApe2FyZ1RleHQ9Y3VyckFyZy50b0ZpeGVkKGVmZmVjdGl2ZVByZWNpc2lvbik7aWYoY3VyckFyZz09PTAmJnJlYWxseU5lZ2F0aXZlKGN1cnJBcmcpKXthcmdUZXh0PSItIithcmdUZXh0fX12YXIgcGFydHM9YXJnVGV4dC5zcGxpdCgiZSIpO2lmKGlzR2VuZXJhbCYmIWZsYWdBbHRlcm5hdGl2ZSl7d2hpbGUocGFydHNbMF0ubGVuZ3RoPjEmJnBhcnRzWzBdLmluY2x1ZGVzKCIuIikmJihwYXJ0c1swXS5zbGljZSgtMSk9PSIwInx8cGFydHNbMF0uc2xpY2UoLTEpPT0iLiIpKXtwYXJ0c1swXT1wYXJ0c1swXS5zbGljZSgwLC0xKX19ZWxzZXtpZihmbGFnQWx0ZXJuYXRpdmUmJmFyZ1RleHQuaW5kZXhPZigiLiIpPT0tMSlwYXJ0c1swXSs9Ii4iO3doaWxlKHByZWNpc2lvbj5lZmZlY3RpdmVQcmVjaXNpb24rKylwYXJ0c1swXSs9IjAifWFyZ1RleHQ9cGFydHNbMF0rKHBhcnRzLmxlbmd0aD4xPyJlIitwYXJ0c1sxXToiIik7aWYobmV4dD09NjkpYXJnVGV4dD1hcmdUZXh0LnRvVXBwZXJDYXNlKCk7aWYoY3VyckFyZz49MCl7aWYoZmxhZ0Fsd2F5c1NpZ25lZCl7YXJnVGV4dD0iKyIrYXJnVGV4dH1lbHNlIGlmKGZsYWdQYWRTaWduKXthcmdUZXh0PSIgIithcmdUZXh0fX19d2hpbGUoYXJnVGV4dC5sZW5ndGg8d2lkdGgpe2lmKGZsYWdMZWZ0QWxpZ24pe2FyZ1RleHQrPSIgIn1lbHNle2lmKGZsYWdaZXJvUGFkJiYoYXJnVGV4dFswXT09Ii0ifHxhcmdUZXh0WzBdPT0iKyIpKXthcmdUZXh0PWFyZ1RleHRbMF0rIjAiK2FyZ1RleHQuc2xpY2UoMSl9ZWxzZXthcmdUZXh0PShmbGFnWmVyb1BhZD8iMCI6IiAiKSthcmdUZXh0fX19aWYobmV4dDw5NylhcmdUZXh0PWFyZ1RleHQudG9VcHBlckNhc2UoKTthcmdUZXh0LnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGNocil7cmV0LnB1c2goY2hyLmNoYXJDb2RlQXQoMCkpfSk7YnJlYWt9Y2FzZSJzIjp7dmFyIGFyZz1nZXROZXh0QXJnKCJpOCoiKTt2YXIgYXJnTGVuZ3RoPWFyZz9fc3RybGVuKGFyZyk6IihudWxsKSIubGVuZ3RoO2lmKHByZWNpc2lvblNldClhcmdMZW5ndGg9TWF0aC5taW4oYXJnTGVuZ3RoLHByZWNpc2lvbik7aWYoIWZsYWdMZWZ0QWxpZ24pe3doaWxlKGFyZ0xlbmd0aDx3aWR0aC0tKXtyZXQucHVzaCgzMil9fWlmKGFyZyl7Zm9yKHZhciBpPTA7aTxhcmdMZW5ndGg7aSsrKXtyZXQucHVzaChIRUFQVThbYXJnKys+PjBdKX19ZWxzZXtyZXQ9cmV0LmNvbmNhdChpbnRBcnJheUZyb21TdHJpbmcoIihudWxsKSIuc3Vic3RyKDAsYXJnTGVuZ3RoKSx0cnVlKSl9aWYoZmxhZ0xlZnRBbGlnbil7d2hpbGUoYXJnTGVuZ3RoPHdpZHRoLS0pe3JldC5wdXNoKDMyKX19YnJlYWt9Y2FzZSJjIjp7aWYoZmxhZ0xlZnRBbGlnbilyZXQucHVzaChnZXROZXh0QXJnKCJpOCIpKTt3aGlsZSgtLXdpZHRoPjApe3JldC5wdXNoKDMyKX1pZighZmxhZ0xlZnRBbGlnbilyZXQucHVzaChnZXROZXh0QXJnKCJpOCIpKTticmVha31jYXNlIm4iOnt2YXIgcHRyPWdldE5leHRBcmcoImkzMioiKTtIRUFQMzJbcHRyPj4yXT1yZXQubGVuZ3RoO2JyZWFrfWNhc2UiJSI6e3JldC5wdXNoKGN1cnIpO2JyZWFrfWRlZmF1bHQ6e2Zvcih2YXIgaT1zdGFydFRleHRJbmRleDtpPHRleHRJbmRleCsyO2krKyl7cmV0LnB1c2goSEVBUDhbaT4+MF0pfX19dGV4dEluZGV4Kz0yfWVsc2V7cmV0LnB1c2goY3Vycik7dGV4dEluZGV4Kz0xfX1yZXR1cm4gcmV0fWZ1bmN0aW9uIHRyYXZlcnNlU3RhY2soYXJncyl7aWYoIWFyZ3N8fCFhcmdzLmNhbGxlZXx8IWFyZ3MuY2FsbGVlLm5hbWUpe3JldHVybltudWxsLCIiLCIiXX12YXIgZnVuc3RyPWFyZ3MuY2FsbGVlLnRvU3RyaW5nKCk7dmFyIGZ1bmNuYW1lPWFyZ3MuY2FsbGVlLm5hbWU7dmFyIHN0cj0iKCI7dmFyIGZpcnN0PXRydWU7Zm9yKHZhciBpIGluIGFyZ3Mpe3ZhciBhPWFyZ3NbaV07aWYoIWZpcnN0KXtzdHIrPSIsICJ9Zmlyc3Q9ZmFsc2U7aWYodHlwZW9mIGE9PT0ibnVtYmVyInx8dHlwZW9mIGE9PT0ic3RyaW5nIil7c3RyKz1hfWVsc2V7c3RyKz0iKCIrdHlwZW9mIGErIikifX1zdHIrPSIpIjt2YXIgY2FsbGVyPWFyZ3MuY2FsbGVlLmNhbGxlcjthcmdzPWNhbGxlcj9jYWxsZXIuYXJndW1lbnRzOltdO2lmKGZpcnN0KXN0cj0iIjtyZXR1cm5bYXJncyxmdW5jbmFtZSxzdHJdfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2dldF9jYWxsc3RhY2tfanMoZmxhZ3Mpe3ZhciBjYWxsc3RhY2s9anNTdGFja1RyYWNlKCk7dmFyIGlUaGlzRnVuYz1jYWxsc3RhY2subGFzdEluZGV4T2YoIl9lbXNjcmlwdGVuX2xvZyIpO3ZhciBpVGhpc0Z1bmMyPWNhbGxzdGFjay5sYXN0SW5kZXhPZigiX2Vtc2NyaXB0ZW5fZ2V0X2NhbGxzdGFjayIpO3ZhciBpTmV4dExpbmU9Y2FsbHN0YWNrLmluZGV4T2YoIlxuIixNYXRoLm1heChpVGhpc0Z1bmMsaVRoaXNGdW5jMikpKzE7Y2FsbHN0YWNrPWNhbGxzdGFjay5zbGljZShpTmV4dExpbmUpO2lmKGZsYWdzJjMyKXt3YXJuT25jZSgiRU1fTE9HX0RFTUFOR0xFIGlzIGRlcHJlY2F0ZWQ7IGlnbm9yaW5nIil9aWYoZmxhZ3MmOCYmdHlwZW9mIGVtc2NyaXB0ZW5fc291cmNlX21hcD09PSJ1bmRlZmluZWQiKXt3YXJuT25jZSgnU291cmNlIG1hcCBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLCBlbXNjcmlwdGVuX2xvZyB3aXRoIEVNX0xPR19DX1NUQUNLIHdpbGwgYmUgaWdub3JlZC4gQnVpbGQgd2l0aCAiLS1wcmUtanMgJEVNU0NSSVBURU4vc3JjL2Vtc2NyaXB0ZW4tc291cmNlLW1hcC5taW4uanMiIGxpbmtlciBmbGFnIHRvIGFkZCBzb3VyY2UgbWFwIGxvYWRpbmcgdG8gY29kZS4nKTtmbGFnc149ODtmbGFnc3w9MTZ9dmFyIHN0YWNrX2FyZ3M9bnVsbDtpZihmbGFncyYxMjgpe3N0YWNrX2FyZ3M9dHJhdmVyc2VTdGFjayhhcmd1bWVudHMpO3doaWxlKHN0YWNrX2FyZ3NbMV0uaW5jbHVkZXMoIl9lbXNjcmlwdGVuXyIpKXN0YWNrX2FyZ3M9dHJhdmVyc2VTdGFjayhzdGFja19hcmdzWzBdKX12YXIgbGluZXM9Y2FsbHN0YWNrLnNwbGl0KCJcbiIpO2NhbGxzdGFjaz0iIjt2YXIgbmV3RmlyZWZveFJlPW5ldyBSZWdFeHAoIlxccyooLio/KUAoLio/KTooWzAtOV0rKTooWzAtOV0rKSIpO3ZhciBmaXJlZm94UmU9bmV3IFJlZ0V4cCgiXFxzKiguKj8pQCguKik6KC4qKSg6KC4qKSk/Iik7dmFyIGNocm9tZVJlPW5ldyBSZWdFeHAoIlxccyphdCAoLio/KSBcXCgoLiopOiguKik6KC4qKVxcKSIpO2Zvcih2YXIgbCBpbiBsaW5lcyl7dmFyIGxpbmU9bGluZXNbbF07dmFyIHN5bWJvbE5hbWU9IiI7dmFyIGZpbGU9IiI7dmFyIGxpbmVubz0wO3ZhciBjb2x1bW49MDt2YXIgcGFydHM9Y2hyb21lUmUuZXhlYyhsaW5lKTtpZihwYXJ0cyYmcGFydHMubGVuZ3RoPT01KXtzeW1ib2xOYW1lPXBhcnRzWzFdO2ZpbGU9cGFydHNbMl07bGluZW5vPXBhcnRzWzNdO2NvbHVtbj1wYXJ0c1s0XX1lbHNle3BhcnRzPW5ld0ZpcmVmb3hSZS5leGVjKGxpbmUpO2lmKCFwYXJ0cylwYXJ0cz1maXJlZm94UmUuZXhlYyhsaW5lKTtpZihwYXJ0cyYmcGFydHMubGVuZ3RoPj00KXtzeW1ib2xOYW1lPXBhcnRzWzFdO2ZpbGU9cGFydHNbMl07bGluZW5vPXBhcnRzWzNdO2NvbHVtbj1wYXJ0c1s0XXwwfWVsc2V7Y2FsbHN0YWNrKz1saW5lKyJcbiI7Y29udGludWV9fXZhciBoYXZlU291cmNlTWFwPWZhbHNlO2lmKGZsYWdzJjgpe3ZhciBvcmlnPWVtc2NyaXB0ZW5fc291cmNlX21hcC5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOmxpbmVubyxjb2x1bW46Y29sdW1ufSk7aGF2ZVNvdXJjZU1hcD1vcmlnJiZvcmlnLnNvdXJjZTtpZihoYXZlU291cmNlTWFwKXtpZihmbGFncyY2NCl7b3JpZy5zb3VyY2U9b3JpZy5zb3VyY2Uuc3Vic3RyaW5nKG9yaWcuc291cmNlLnJlcGxhY2UoL1xcL2csIi8iKS5sYXN0SW5kZXhPZigiLyIpKzEpfWNhbGxzdGFjays9IiAgICBhdCAiK3N5bWJvbE5hbWUrIiAoIitvcmlnLnNvdXJjZSsiOiIrb3JpZy5saW5lKyI6IitvcmlnLmNvbHVtbisiKVxuIn19aWYoZmxhZ3MmMTZ8fCFoYXZlU291cmNlTWFwKXtpZihmbGFncyY2NCl7ZmlsZT1maWxlLnN1YnN0cmluZyhmaWxlLnJlcGxhY2UoL1xcL2csIi8iKS5sYXN0SW5kZXhPZigiLyIpKzEpfWNhbGxzdGFjays9KGhhdmVTb3VyY2VNYXA/IiAgICAgPSAiK3N5bWJvbE5hbWU6IiAgICBhdCAiK3N5bWJvbE5hbWUpKyIgKCIrZmlsZSsiOiIrbGluZW5vKyI6Iitjb2x1bW4rIilcbiJ9aWYoZmxhZ3MmMTI4JiZzdGFja19hcmdzWzBdKXtpZihzdGFja19hcmdzWzFdPT1zeW1ib2xOYW1lJiZzdGFja19hcmdzWzJdLmxlbmd0aD4wKXtjYWxsc3RhY2s9Y2FsbHN0YWNrLnJlcGxhY2UoL1xzKyQvLCIiKTtjYWxsc3RhY2srPSIgd2l0aCB2YWx1ZXM6ICIrc3RhY2tfYXJnc1sxXStzdGFja19hcmdzWzJdKyJcbiJ9c3RhY2tfYXJncz10cmF2ZXJzZVN0YWNrKHN0YWNrX2FyZ3NbMF0pfX1jYWxsc3RhY2s9Y2FsbHN0YWNrLnJlcGxhY2UoL1xzKyQvLCIiKTtyZXR1cm4gY2FsbHN0YWNrfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2xvZ19qcyhmbGFncyxzdHIpe2lmKGZsYWdzJjI0KXtzdHI9c3RyLnJlcGxhY2UoL1xzKyQvLCIiKTtzdHIrPShzdHIubGVuZ3RoPjA/IlxuIjoiIikrX2Vtc2NyaXB0ZW5fZ2V0X2NhbGxzdGFja19qcyhmbGFncyl9aWYoZmxhZ3MmMSl7aWYoZmxhZ3MmNCl7Y29uc29sZS5lcnJvcihzdHIpfWVsc2UgaWYoZmxhZ3MmMil7Y29uc29sZS53YXJuKHN0cil9ZWxzZSBpZihmbGFncyY1MTIpe2NvbnNvbGUuaW5mbyhzdHIpfWVsc2UgaWYoZmxhZ3MmMjU2KXtjb25zb2xlLmRlYnVnKHN0cil9ZWxzZXtjb25zb2xlLmxvZyhzdHIpfX1lbHNlIGlmKGZsYWdzJjYpe2VycihzdHIpfWVsc2V7b3V0KHN0cil9fWZ1bmN0aW9uIF9lbXNjcmlwdGVuX2xvZyhmbGFncyxmb3JtYXQsdmFyYXJncyl7dmFyIHJlc3VsdD1mb3JtYXRTdHJpbmcoZm9ybWF0LHZhcmFyZ3MpO3ZhciBzdHI9VVRGOEFycmF5VG9TdHJpbmcocmVzdWx0LDApO19lbXNjcmlwdGVuX2xvZ19qcyhmbGFncyxzdHIpfWZ1bmN0aW9uIF9sb25nam1wKGVudix2YWx1ZSl7X3NldFRocmV3KGVudix2YWx1ZXx8MSk7dGhyb3cibG9uZ2ptcCJ9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbG9uZ2ptcChhMCxhMSl7cmV0dXJuIF9sb25nam1wKGEwLGExKX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnKGRlc3Qsc3JjLG51bSl7SEVBUFU4LmNvcHlXaXRoaW4oZGVzdCxzcmMsc3JjK251bSl9ZnVuY3Rpb24gZG9SZXF1ZXN0RnVsbHNjcmVlbih0YXJnZXQsc3RyYXRlZ3kpe2lmKCFKU0V2ZW50cy5mdWxsc2NyZWVuRW5hYmxlZCgpKXJldHVybi0xO3RhcmdldD1maW5kRXZlbnRUYXJnZXQodGFyZ2V0KTtpZighdGFyZ2V0KXJldHVybi00O2lmKCF0YXJnZXQucmVxdWVzdEZ1bGxzY3JlZW4mJiF0YXJnZXQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pe3JldHVybi0zfXZhciBjYW5QZXJmb3JtUmVxdWVzdHM9SlNFdmVudHMuY2FuUGVyZm9ybUV2ZW50SGFuZGxlclJlcXVlc3RzKCk7aWYoIWNhblBlcmZvcm1SZXF1ZXN0cyl7aWYoc3RyYXRlZ3kuZGVmZXJVbnRpbEluRXZlbnRIYW5kbGVyKXtKU0V2ZW50cy5kZWZlckNhbGwoX0pTRXZlbnRzX3JlcXVlc3RGdWxsc2NyZWVuLDEsW3RhcmdldCxzdHJhdGVneV0pO3JldHVybiAxfWVsc2V7cmV0dXJuLTJ9fXJldHVybiBfSlNFdmVudHNfcmVxdWVzdEZ1bGxzY3JlZW4odGFyZ2V0LHN0cmF0ZWd5KX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXF1ZXN0X2Z1bGxzY3JlZW4odGFyZ2V0LGRlZmVyVW50aWxJbkV2ZW50SGFuZGxlcil7dmFyIHN0cmF0ZWd5PXtzY2FsZU1vZGU6MCxjYW52YXNSZXNvbHV0aW9uU2NhbGVNb2RlOjAsZmlsdGVyaW5nTW9kZTowLGRlZmVyVW50aWxJbkV2ZW50SGFuZGxlcjpkZWZlclVudGlsSW5FdmVudEhhbmRsZXIsY2FudmFzUmVzaXplZENhbGxiYWNrVGFyZ2V0VGhyZWFkOjJ9O3JldHVybiBkb1JlcXVlc3RGdWxsc2NyZWVuKHRhcmdldCxzdHJhdGVneSl9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fcmVxdWVzdF9wb2ludGVybG9jayh0YXJnZXQsZGVmZXJVbnRpbEluRXZlbnRIYW5kbGVyKXt0YXJnZXQ9ZmluZEV2ZW50VGFyZ2V0KHRhcmdldCk7aWYoIXRhcmdldClyZXR1cm4tNDtpZighdGFyZ2V0LnJlcXVlc3RQb2ludGVyTG9jayYmIXRhcmdldC5tc1JlcXVlc3RQb2ludGVyTG9jayl7cmV0dXJuLTF9dmFyIGNhblBlcmZvcm1SZXF1ZXN0cz1KU0V2ZW50cy5jYW5QZXJmb3JtRXZlbnRIYW5kbGVyUmVxdWVzdHMoKTtpZighY2FuUGVyZm9ybVJlcXVlc3RzKXtpZihkZWZlclVudGlsSW5FdmVudEhhbmRsZXIpe0pTRXZlbnRzLmRlZmVyQ2FsbChyZXF1ZXN0UG9pbnRlckxvY2ssMixbdGFyZ2V0XSk7cmV0dXJuIDF9ZWxzZXtyZXR1cm4tMn19cmV0dXJuIHJlcXVlc3RQb2ludGVyTG9jayh0YXJnZXQpfWZ1bmN0aW9uIGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIoc2l6ZSl7dHJ5e3dhc21NZW1vcnkuZ3JvdyhzaXplLWJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpO3VwZGF0ZUdsb2JhbEJ1ZmZlckFuZFZpZXdzKHdhc21NZW1vcnkuYnVmZmVyKTtyZXR1cm4gMX1jYXRjaChlKXt9fWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwKHJlcXVlc3RlZFNpemUpe3ZhciBvbGRTaXplPUhFQVBVOC5sZW5ndGg7cmVxdWVzdGVkU2l6ZT1yZXF1ZXN0ZWRTaXplPj4+MDt2YXIgbWF4SGVhcFNpemU9MjE0NzQ4MzY0ODtpZihyZXF1ZXN0ZWRTaXplPm1heEhlYXBTaXplKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjdXREb3duPTE7Y3V0RG93bjw9NDtjdXREb3duKj0yKXt2YXIgb3Zlckdyb3duSGVhcFNpemU9b2xkU2l6ZSooMSsuMi9jdXREb3duKTtvdmVyR3Jvd25IZWFwU2l6ZT1NYXRoLm1pbihvdmVyR3Jvd25IZWFwU2l6ZSxyZXF1ZXN0ZWRTaXplKzEwMDY2MzI5Nik7dmFyIG5ld1NpemU9TWF0aC5taW4obWF4SGVhcFNpemUsYWxpZ25VcChNYXRoLm1heChyZXF1ZXN0ZWRTaXplLG92ZXJHcm93bkhlYXBTaXplKSw2NTUzNikpO3ZhciByZXBsYWNlbWVudD1lbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKG5ld1NpemUpO2lmKHJlcGxhY2VtZW50KXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NhbXBsZV9nYW1lcGFkX2RhdGEoKXt0cnl7aWYobmF2aWdhdG9yLmdldEdhbWVwYWRzKXJldHVybihKU0V2ZW50cy5sYXN0R2FtZXBhZFN0YXRlPW5hdmlnYXRvci5nZXRHYW1lcGFkcygpKT8wOi0xfWNhdGNoKGUpe25hdmlnYXRvci5nZXRHYW1lcGFkcz1udWxsfXJldHVybi0xfWZ1bmN0aW9uIHJlZ2lzdGVyRm9jdXNFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyxldmVudFR5cGVJZCxldmVudFR5cGVTdHJpbmcsdGFyZ2V0VGhyZWFkKXtpZighSlNFdmVudHMuZm9jdXNFdmVudClKU0V2ZW50cy5mb2N1c0V2ZW50PV9tYWxsb2MoMjU2KTt2YXIgZm9jdXNFdmVudEhhbmRsZXJGdW5jPWZ1bmN0aW9uKGV2KXt2YXIgZT1ldnx8ZXZlbnQ7dmFyIG5vZGVOYW1lPUpTRXZlbnRzLmdldE5vZGVOYW1lRm9yVGFyZ2V0KGUudGFyZ2V0KTt2YXIgaWQ9ZS50YXJnZXQuaWQ/ZS50YXJnZXQuaWQ6IiI7dmFyIGZvY3VzRXZlbnQ9SlNFdmVudHMuZm9jdXNFdmVudDtzdHJpbmdUb1VURjgobm9kZU5hbWUsZm9jdXNFdmVudCswLDEyOCk7c3RyaW5nVG9VVEY4KGlkLGZvY3VzRXZlbnQrMTI4LDEyOCk7aWYoZnVuY3Rpb24oYTEsYTIsYTMpe3JldHVybiBkeW5DYWxsX2lpaWkuYXBwbHkobnVsbCxbY2FsbGJhY2tmdW5jLGExLGEyLGEzXSl9KGV2ZW50VHlwZUlkLGZvY3VzRXZlbnQsdXNlckRhdGEpKWUucHJldmVudERlZmF1bHQoKX07dmFyIGV2ZW50SGFuZGxlcj17dGFyZ2V0OmZpbmRFdmVudFRhcmdldCh0YXJnZXQpLGV2ZW50VHlwZVN0cmluZzpldmVudFR5cGVTdHJpbmcsY2FsbGJhY2tmdW5jOmNhbGxiYWNrZnVuYyxoYW5kbGVyRnVuYzpmb2N1c0V2ZW50SGFuZGxlckZ1bmMsdXNlQ2FwdHVyZTp1c2VDYXB0dXJlfTtKU0V2ZW50cy5yZWdpc3Rlck9yUmVtb3ZlSGFuZGxlcihldmVudEhhbmRsZXIpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9ibHVyX2NhbGxiYWNrX29uX3RocmVhZCh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsdGFyZ2V0VGhyZWFkKXtyZWdpc3RlckZvY3VzRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsMTIsImJsdXIiLHRhcmdldFRocmVhZCk7cmV0dXJuIDB9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X2ZvY3VzX2NhbGxiYWNrX29uX3RocmVhZCh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsdGFyZ2V0VGhyZWFkKXtyZWdpc3RlckZvY3VzRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsMTMsImZvY3VzIix0YXJnZXRUaHJlYWQpO3JldHVybiAwfWZ1bmN0aW9uIHJlZ2lzdGVyRnVsbHNjcmVlbkNoYW5nZUV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLGV2ZW50VHlwZUlkLGV2ZW50VHlwZVN0cmluZyx0YXJnZXRUaHJlYWQpe2lmKCFKU0V2ZW50cy5mdWxsc2NyZWVuQ2hhbmdlRXZlbnQpSlNFdmVudHMuZnVsbHNjcmVlbkNoYW5nZUV2ZW50PV9tYWxsb2MoMjgwKTt2YXIgZnVsbHNjcmVlbkNoYW5nZUV2ZW50aGFuZGxlckZ1bmM9ZnVuY3Rpb24oZXYpe3ZhciBlPWV2fHxldmVudDt2YXIgZnVsbHNjcmVlbkNoYW5nZUV2ZW50PUpTRXZlbnRzLmZ1bGxzY3JlZW5DaGFuZ2VFdmVudDtmaWxsRnVsbHNjcmVlbkNoYW5nZUV2ZW50RGF0YShmdWxsc2NyZWVuQ2hhbmdlRXZlbnQpO2lmKGZ1bmN0aW9uKGExLGEyLGEzKXtyZXR1cm4gZHluQ2FsbF9paWlpLmFwcGx5KG51bGwsW2NhbGxiYWNrZnVuYyxhMSxhMixhM10pfShldmVudFR5cGVJZCxmdWxsc2NyZWVuQ2hhbmdlRXZlbnQsdXNlckRhdGEpKWUucHJldmVudERlZmF1bHQoKX07dmFyIGV2ZW50SGFuZGxlcj17dGFyZ2V0OnRhcmdldCxldmVudFR5cGVTdHJpbmc6ZXZlbnRUeXBlU3RyaW5nLGNhbGxiYWNrZnVuYzpjYWxsYmFja2Z1bmMsaGFuZGxlckZ1bmM6ZnVsbHNjcmVlbkNoYW5nZUV2ZW50aGFuZGxlckZ1bmMsdXNlQ2FwdHVyZTp1c2VDYXB0dXJlfTtKU0V2ZW50cy5yZWdpc3Rlck9yUmVtb3ZlSGFuZGxlcihldmVudEhhbmRsZXIpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9mdWxsc2NyZWVuY2hhbmdlX2NhbGxiYWNrX29uX3RocmVhZCh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsdGFyZ2V0VGhyZWFkKXtpZighSlNFdmVudHMuZnVsbHNjcmVlbkVuYWJsZWQoKSlyZXR1cm4tMTt0YXJnZXQ9ZmluZEV2ZW50VGFyZ2V0KHRhcmdldCk7aWYoIXRhcmdldClyZXR1cm4tNDtyZWdpc3RlckZ1bGxzY3JlZW5DaGFuZ2VFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywxOSwiZnVsbHNjcmVlbmNoYW5nZSIsdGFyZ2V0VGhyZWFkKTtyZWdpc3RlckZ1bGxzY3JlZW5DaGFuZ2VFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywxOSwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1mdW5jdGlvbiByZWdpc3RlckdhbWVwYWRFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyxldmVudFR5cGVJZCxldmVudFR5cGVTdHJpbmcsdGFyZ2V0VGhyZWFkKXtpZighSlNFdmVudHMuZ2FtZXBhZEV2ZW50KUpTRXZlbnRzLmdhbWVwYWRFdmVudD1fbWFsbG9jKDE0MzIpO3ZhciBnYW1lcGFkRXZlbnRIYW5kbGVyRnVuYz1mdW5jdGlvbihldil7dmFyIGU9ZXZ8fGV2ZW50O3ZhciBnYW1lcGFkRXZlbnQ9SlNFdmVudHMuZ2FtZXBhZEV2ZW50O2ZpbGxHYW1lcGFkRXZlbnREYXRhKGdhbWVwYWRFdmVudCxlWyJnYW1lcGFkIl0pO2lmKGZ1bmN0aW9uKGExLGEyLGEzKXtyZXR1cm4gZHluQ2FsbF9paWlpLmFwcGx5KG51bGwsW2NhbGxiYWNrZnVuYyxhMSxhMixhM10pfShldmVudFR5cGVJZCxnYW1lcGFkRXZlbnQsdXNlckRhdGEpKWUucHJldmVudERlZmF1bHQoKX07dmFyIGV2ZW50SGFuZGxlcj17dGFyZ2V0OmZpbmRFdmVudFRhcmdldCh0YXJnZXQpLGFsbG93c0RlZmVycmVkQ2FsbHM6dHJ1ZSxldmVudFR5cGVTdHJpbmc6ZXZlbnRUeXBlU3RyaW5nLGNhbGxiYWNrZnVuYzpjYWxsYmFja2Z1bmMsaGFuZGxlckZ1bmM6Z2FtZXBhZEV2ZW50SGFuZGxlckZ1bmMsdXNlQ2FwdHVyZTp1c2VDYXB0dXJlfTtKU0V2ZW50cy5yZWdpc3Rlck9yUmVtb3ZlSGFuZGxlcihldmVudEhhbmRsZXIpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9nYW1lcGFkY29ubmVjdGVkX2NhbGxiYWNrX29uX3RocmVhZCh1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyx0YXJnZXRUaHJlYWQpe2lmKF9lbXNjcmlwdGVuX3NhbXBsZV9nYW1lcGFkX2RhdGEoKSlyZXR1cm4tMTtyZXR1cm4gcmVnaXN0ZXJHYW1lcGFkRXZlbnRDYWxsYmFjaygyLHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLDI2LCJnYW1lcGFkY29ubmVjdGVkIix0YXJnZXRUaHJlYWQpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9nYW1lcGFkZGlzY29ubmVjdGVkX2NhbGxiYWNrX29uX3RocmVhZCh1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyx0YXJnZXRUaHJlYWQpe2lmKF9lbXNjcmlwdGVuX3NhbXBsZV9nYW1lcGFkX2RhdGEoKSlyZXR1cm4tMTtyZXR1cm4gcmVnaXN0ZXJHYW1lcGFkRXZlbnRDYWxsYmFjaygyLHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLDI3LCJnYW1lcGFkZGlzY29ubmVjdGVkIix0YXJnZXRUaHJlYWQpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9pbnRlcnZhbChjYixtc2Vjcyx1c2VyRGF0YSl7cmV0dXJuIHNldEludGVydmFsKGZ1bmN0aW9uKCl7KGZ1bmN0aW9uKGExKXtkeW5DYWxsX3ZpLmFwcGx5KG51bGwsW2NiLGExXSl9KSh1c2VyRGF0YSl9LG1zZWNzKX1mdW5jdGlvbiByZWdpc3RlcktleUV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLGV2ZW50VHlwZUlkLGV2ZW50VHlwZVN0cmluZyx0YXJnZXRUaHJlYWQpe2lmKCFKU0V2ZW50cy5rZXlFdmVudClKU0V2ZW50cy5rZXlFdmVudD1fbWFsbG9jKDE2NCk7dmFyIGtleUV2ZW50SGFuZGxlckZ1bmM9ZnVuY3Rpb24oZSl7dmFyIGtleUV2ZW50RGF0YT1KU0V2ZW50cy5rZXlFdmVudDt2YXIgaWR4PWtleUV2ZW50RGF0YT4+MjtIRUFQMzJbaWR4KzBdPWUubG9jYXRpb247SEVBUDMyW2lkeCsxXT1lLmN0cmxLZXk7SEVBUDMyW2lkeCsyXT1lLnNoaWZ0S2V5O0hFQVAzMltpZHgrM109ZS5hbHRLZXk7SEVBUDMyW2lkeCs0XT1lLm1ldGFLZXk7SEVBUDMyW2lkeCs1XT1lLnJlcGVhdDtIRUFQMzJbaWR4KzZdPWUuY2hhckNvZGU7SEVBUDMyW2lkeCs3XT1lLmtleUNvZGU7SEVBUDMyW2lkeCs4XT1lLndoaWNoO3N0cmluZ1RvVVRGOChlLmtleXx8IiIsa2V5RXZlbnREYXRhKzM2LDMyKTtzdHJpbmdUb1VURjgoZS5jb2RlfHwiIixrZXlFdmVudERhdGErNjgsMzIpO3N0cmluZ1RvVVRGOChlLmNoYXJ8fCIiLGtleUV2ZW50RGF0YSsxMDAsMzIpO3N0cmluZ1RvVVRGOChlLmxvY2FsZXx8IiIsa2V5RXZlbnREYXRhKzEzMiwzMik7aWYoZnVuY3Rpb24oYTEsYTIsYTMpe3JldHVybiBkeW5DYWxsX2lpaWkuYXBwbHkobnVsbCxbY2FsbGJhY2tmdW5jLGExLGEyLGEzXSl9KGV2ZW50VHlwZUlkLGtleUV2ZW50RGF0YSx1c2VyRGF0YSkpZS5wcmV2ZW50RGVmYXVsdCgpfTt2YXIgZXZlbnRIYW5kbGVyPXt0YXJnZXQ6ZmluZEV2ZW50VGFyZ2V0KHRhcmdldCksYWxsb3dzRGVmZXJyZWRDYWxsczp0cnVlLGV2ZW50VHlwZVN0cmluZzpldmVudFR5cGVTdHJpbmcsY2FsbGJhY2tmdW5jOmNhbGxiYWNrZnVuYyxoYW5kbGVyRnVuYzprZXlFdmVudEhhbmRsZXJGdW5jLHVzZUNhcHR1cmU6dXNlQ2FwdHVyZX07SlNFdmVudHMucmVnaXN0ZXJPclJlbW92ZUhhbmRsZXIoZXZlbnRIYW5kbGVyKX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfa2V5ZG93bl9jYWxsYmFja19vbl90aHJlYWQodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLHRhcmdldFRocmVhZCl7cmVnaXN0ZXJLZXlFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywyLCJrZXlkb3duIix0YXJnZXRUaHJlYWQpO3JldHVybiAwfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9rZXlwcmVzc19jYWxsYmFja19vbl90aHJlYWQodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLHRhcmdldFRocmVhZCl7cmVnaXN0ZXJLZXlFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywxLCJrZXlwcmVzcyIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1mdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfa2V5dXBfY2FsbGJhY2tfb25fdGhyZWFkKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyx0YXJnZXRUaHJlYWQpe3JlZ2lzdGVyS2V5RXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsMywia2V5dXAiLHRhcmdldFRocmVhZCk7cmV0dXJuIDB9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X21haW5fbG9vcChmdW5jLGZwcyxzaW11bGF0ZUluZmluaXRlTG9vcCl7dmFyIGJyb3dzZXJJdGVyYXRpb25GdW5jPWZ1bmN0aW9uKCl7ZHluQ2FsbF92LmNhbGwobnVsbCxmdW5jKX07c2V0TWFpbkxvb3AoYnJvd3Nlckl0ZXJhdGlvbkZ1bmMsZnBzLHNpbXVsYXRlSW5maW5pdGVMb29wKX1mdW5jdGlvbiBmaWxsTW91c2VFdmVudERhdGEoZXZlbnRTdHJ1Y3QsZSx0YXJnZXQpe3ZhciBpZHg9ZXZlbnRTdHJ1Y3Q+PjI7SEVBUDMyW2lkeCswXT1lLnNjcmVlblg7SEVBUDMyW2lkeCsxXT1lLnNjcmVlblk7SEVBUDMyW2lkeCsyXT1lLmNsaWVudFg7SEVBUDMyW2lkeCszXT1lLmNsaWVudFk7SEVBUDMyW2lkeCs0XT1lLmN0cmxLZXk7SEVBUDMyW2lkeCs1XT1lLnNoaWZ0S2V5O0hFQVAzMltpZHgrNl09ZS5hbHRLZXk7SEVBUDMyW2lkeCs3XT1lLm1ldGFLZXk7SEVBUDE2W2lkeCoyKzE2XT1lLmJ1dHRvbjtIRUFQMTZbaWR4KjIrMTddPWUuYnV0dG9ucztIRUFQMzJbaWR4KzldPWVbIm1vdmVtZW50WCJdO0hFQVAzMltpZHgrMTBdPWVbIm1vdmVtZW50WSJdO3ZhciByZWN0PWdldEJvdW5kaW5nQ2xpZW50UmVjdCh0YXJnZXQpO0hFQVAzMltpZHgrMTFdPWUuY2xpZW50WC1yZWN0LmxlZnQ7SEVBUDMyW2lkeCsxMl09ZS5jbGllbnRZLXJlY3QudG9wfWZ1bmN0aW9uIHJlZ2lzdGVyTW91c2VFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyxldmVudFR5cGVJZCxldmVudFR5cGVTdHJpbmcsdGFyZ2V0VGhyZWFkKXtpZighSlNFdmVudHMubW91c2VFdmVudClKU0V2ZW50cy5tb3VzZUV2ZW50PV9tYWxsb2MoNjQpO3RhcmdldD1maW5kRXZlbnRUYXJnZXQodGFyZ2V0KTt2YXIgbW91c2VFdmVudEhhbmRsZXJGdW5jPWZ1bmN0aW9uKGV2KXt2YXIgZT1ldnx8ZXZlbnQ7ZmlsbE1vdXNlRXZlbnREYXRhKEpTRXZlbnRzLm1vdXNlRXZlbnQsZSx0YXJnZXQpO2lmKGZ1bmN0aW9uKGExLGEyLGEzKXtyZXR1cm4gZHluQ2FsbF9paWlpLmFwcGx5KG51bGwsW2NhbGxiYWNrZnVuYyxhMSxhMixhM10pfShldmVudFR5cGVJZCxKU0V2ZW50cy5tb3VzZUV2ZW50LHVzZXJEYXRhKSllLnByZXZlbnREZWZhdWx0KCl9O3ZhciBldmVudEhhbmRsZXI9e3RhcmdldDp0YXJnZXQsYWxsb3dzRGVmZXJyZWRDYWxsczpldmVudFR5cGVTdHJpbmchPSJtb3VzZW1vdmUiJiZldmVudFR5cGVTdHJpbmchPSJtb3VzZWVudGVyIiYmZXZlbnRUeXBlU3RyaW5nIT0ibW91c2VsZWF2ZSIsZXZlbnRUeXBlU3RyaW5nOmV2ZW50VHlwZVN0cmluZyxjYWxsYmFja2Z1bmM6Y2FsbGJhY2tmdW5jLGhhbmRsZXJGdW5jOm1vdXNlRXZlbnRIYW5kbGVyRnVuYyx1c2VDYXB0dXJlOnVzZUNhcHR1cmV9O0pTRXZlbnRzLnJlZ2lzdGVyT3JSZW1vdmVIYW5kbGVyKGV2ZW50SGFuZGxlcil9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X21vdXNlZG93bl9jYWxsYmFja19vbl90aHJlYWQodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLHRhcmdldFRocmVhZCl7cmVnaXN0ZXJNb3VzZUV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLDUsIm1vdXNlZG93biIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1mdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfbW91c2Vtb3ZlX2NhbGxiYWNrX29uX3RocmVhZCh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsdGFyZ2V0VGhyZWFkKXtyZWdpc3Rlck1vdXNlRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsOCwibW91c2Vtb3ZlIix0YXJnZXRUaHJlYWQpO3JldHVybiAwfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF9tb3VzZXVwX2NhbGxiYWNrX29uX3RocmVhZCh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsdGFyZ2V0VGhyZWFkKXtyZWdpc3Rlck1vdXNlRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsNiwibW91c2V1cCIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1mdW5jdGlvbiBmaWxsUG9pbnRlcmxvY2tDaGFuZ2VFdmVudERhdGEoZXZlbnRTdHJ1Y3Qpe3ZhciBwb2ludGVyTG9ja0VsZW1lbnQ9ZG9jdW1lbnQucG9pbnRlckxvY2tFbGVtZW50fHxkb2N1bWVudC5tb3pQb2ludGVyTG9ja0VsZW1lbnR8fGRvY3VtZW50LndlYmtpdFBvaW50ZXJMb2NrRWxlbWVudHx8ZG9jdW1lbnQubXNQb2ludGVyTG9ja0VsZW1lbnQ7dmFyIGlzUG9pbnRlcmxvY2tlZD0hIXBvaW50ZXJMb2NrRWxlbWVudDtIRUFQMzJbZXZlbnRTdHJ1Y3Q+PjJdPWlzUG9pbnRlcmxvY2tlZDt2YXIgbm9kZU5hbWU9SlNFdmVudHMuZ2V0Tm9kZU5hbWVGb3JUYXJnZXQocG9pbnRlckxvY2tFbGVtZW50KTt2YXIgaWQ9cG9pbnRlckxvY2tFbGVtZW50JiZwb2ludGVyTG9ja0VsZW1lbnQuaWQ/cG9pbnRlckxvY2tFbGVtZW50LmlkOiIiO3N0cmluZ1RvVVRGOChub2RlTmFtZSxldmVudFN0cnVjdCs0LDEyOCk7c3RyaW5nVG9VVEY4KGlkLGV2ZW50U3RydWN0KzEzMiwxMjgpfWZ1bmN0aW9uIHJlZ2lzdGVyUG9pbnRlcmxvY2tDaGFuZ2VFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyxldmVudFR5cGVJZCxldmVudFR5cGVTdHJpbmcsdGFyZ2V0VGhyZWFkKXtpZighSlNFdmVudHMucG9pbnRlcmxvY2tDaGFuZ2VFdmVudClKU0V2ZW50cy5wb2ludGVybG9ja0NoYW5nZUV2ZW50PV9tYWxsb2MoMjYwKTt2YXIgcG9pbnRlcmxvY2tDaGFuZ2VFdmVudEhhbmRsZXJGdW5jPWZ1bmN0aW9uKGV2KXt2YXIgZT1ldnx8ZXZlbnQ7dmFyIHBvaW50ZXJsb2NrQ2hhbmdlRXZlbnQ9SlNFdmVudHMucG9pbnRlcmxvY2tDaGFuZ2VFdmVudDtmaWxsUG9pbnRlcmxvY2tDaGFuZ2VFdmVudERhdGEocG9pbnRlcmxvY2tDaGFuZ2VFdmVudCk7aWYoZnVuY3Rpb24oYTEsYTIsYTMpe3JldHVybiBkeW5DYWxsX2lpaWkuYXBwbHkobnVsbCxbY2FsbGJhY2tmdW5jLGExLGEyLGEzXSl9KGV2ZW50VHlwZUlkLHBvaW50ZXJsb2NrQ2hhbmdlRXZlbnQsdXNlckRhdGEpKWUucHJldmVudERlZmF1bHQoKX07dmFyIGV2ZW50SGFuZGxlcj17dGFyZ2V0OnRhcmdldCxldmVudFR5cGVTdHJpbmc6ZXZlbnRUeXBlU3RyaW5nLGNhbGxiYWNrZnVuYzpjYWxsYmFja2Z1bmMsaGFuZGxlckZ1bmM6cG9pbnRlcmxvY2tDaGFuZ2VFdmVudEhhbmRsZXJGdW5jLHVzZUNhcHR1cmU6dXNlQ2FwdHVyZX07SlNFdmVudHMucmVnaXN0ZXJPclJlbW92ZUhhbmRsZXIoZXZlbnRIYW5kbGVyKX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfcG9pbnRlcmxvY2tjaGFuZ2VfY2FsbGJhY2tfb25fdGhyZWFkKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyx0YXJnZXRUaHJlYWQpe2lmKCFkb2N1bWVudHx8IWRvY3VtZW50LmJvZHl8fCFkb2N1bWVudC5ib2R5LnJlcXVlc3RQb2ludGVyTG9jayYmIWRvY3VtZW50LmJvZHkubW96UmVxdWVzdFBvaW50ZXJMb2NrJiYhZG9jdW1lbnQuYm9keS53ZWJraXRSZXF1ZXN0UG9pbnRlckxvY2smJiFkb2N1bWVudC5ib2R5Lm1zUmVxdWVzdFBvaW50ZXJMb2NrKXtyZXR1cm4tMX10YXJnZXQ9ZmluZEV2ZW50VGFyZ2V0KHRhcmdldCk7aWYoIXRhcmdldClyZXR1cm4tNDtyZWdpc3RlclBvaW50ZXJsb2NrQ2hhbmdlRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsMjAsInBvaW50ZXJsb2NrY2hhbmdlIix0YXJnZXRUaHJlYWQpO3JlZ2lzdGVyUG9pbnRlcmxvY2tDaGFuZ2VFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywyMCwibW96cG9pbnRlcmxvY2tjaGFuZ2UiLHRhcmdldFRocmVhZCk7cmVnaXN0ZXJQb2ludGVybG9ja0NoYW5nZUV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLDIwLCJ3ZWJraXRwb2ludGVybG9ja2NoYW5nZSIsdGFyZ2V0VGhyZWFkKTtyZWdpc3RlclBvaW50ZXJsb2NrQ2hhbmdlRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsMjAsIm1zcG9pbnRlcmxvY2tjaGFuZ2UiLHRhcmdldFRocmVhZCk7cmV0dXJuIDB9ZnVuY3Rpb24gcmVnaXN0ZXJUb3VjaEV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLGV2ZW50VHlwZUlkLGV2ZW50VHlwZVN0cmluZyx0YXJnZXRUaHJlYWQpe2lmKCFKU0V2ZW50cy50b3VjaEV2ZW50KUpTRXZlbnRzLnRvdWNoRXZlbnQ9X21hbGxvYygxNjg0KTt0YXJnZXQ9ZmluZEV2ZW50VGFyZ2V0KHRhcmdldCk7dmFyIHRvdWNoRXZlbnRIYW5kbGVyRnVuYz1mdW5jdGlvbihlKXt2YXIgdCx0b3VjaGVzPXt9LGV0PWUudG91Y2hlcztmb3IodmFyIGk9MDtpPGV0Lmxlbmd0aDsrK2kpe3Q9ZXRbaV07dC5pc0NoYW5nZWQ9dC5vblRhcmdldD0wO3RvdWNoZXNbdC5pZGVudGlmaWVyXT10fWZvcih2YXIgaT0wO2k8ZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7KytpKXt0PWUuY2hhbmdlZFRvdWNoZXNbaV07dC5pc0NoYW5nZWQ9MTt0b3VjaGVzW3QuaWRlbnRpZmllcl09dH1mb3IodmFyIGk9MDtpPGUudGFyZ2V0VG91Y2hlcy5sZW5ndGg7KytpKXt0b3VjaGVzW2UudGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXS5vblRhcmdldD0xfXZhciB0b3VjaEV2ZW50PUpTRXZlbnRzLnRvdWNoRXZlbnQ7dmFyIGlkeD10b3VjaEV2ZW50Pj4yO0hFQVAzMltpZHgrMV09ZS5jdHJsS2V5O0hFQVAzMltpZHgrMl09ZS5zaGlmdEtleTtIRUFQMzJbaWR4KzNdPWUuYWx0S2V5O0hFQVAzMltpZHgrNF09ZS5tZXRhS2V5O2lkeCs9NTt2YXIgdGFyZ2V0UmVjdD1nZXRCb3VuZGluZ0NsaWVudFJlY3QodGFyZ2V0KTt2YXIgbnVtVG91Y2hlcz0wO2Zvcih2YXIgaSBpbiB0b3VjaGVzKXt2YXIgdD10b3VjaGVzW2ldO0hFQVAzMltpZHgrMF09dC5pZGVudGlmaWVyO0hFQVAzMltpZHgrMV09dC5zY3JlZW5YO0hFQVAzMltpZHgrMl09dC5zY3JlZW5ZO0hFQVAzMltpZHgrM109dC5jbGllbnRYO0hFQVAzMltpZHgrNF09dC5jbGllbnRZO0hFQVAzMltpZHgrNV09dC5wYWdlWDtIRUFQMzJbaWR4KzZdPXQucGFnZVk7SEVBUDMyW2lkeCs3XT10LmlzQ2hhbmdlZDtIRUFQMzJbaWR4KzhdPXQub25UYXJnZXQ7SEVBUDMyW2lkeCs5XT10LmNsaWVudFgtdGFyZ2V0UmVjdC5sZWZ0O0hFQVAzMltpZHgrMTBdPXQuY2xpZW50WS10YXJnZXRSZWN0LnRvcDtpZHgrPTEzO2lmKCsrbnVtVG91Y2hlcz4zMSl7YnJlYWt9fUhFQVAzMlt0b3VjaEV2ZW50Pj4yXT1udW1Ub3VjaGVzO2lmKGZ1bmN0aW9uKGExLGEyLGEzKXtyZXR1cm4gZHluQ2FsbF9paWlpLmFwcGx5KG51bGwsW2NhbGxiYWNrZnVuYyxhMSxhMixhM10pfShldmVudFR5cGVJZCx0b3VjaEV2ZW50LHVzZXJEYXRhKSllLnByZXZlbnREZWZhdWx0KCl9O3ZhciBldmVudEhhbmRsZXI9e3RhcmdldDp0YXJnZXQsYWxsb3dzRGVmZXJyZWRDYWxsczpldmVudFR5cGVTdHJpbmc9PSJ0b3VjaHN0YXJ0Inx8ZXZlbnRUeXBlU3RyaW5nPT0idG91Y2hlbmQiLGV2ZW50VHlwZVN0cmluZzpldmVudFR5cGVTdHJpbmcsY2FsbGJhY2tmdW5jOmNhbGxiYWNrZnVuYyxoYW5kbGVyRnVuYzp0b3VjaEV2ZW50SGFuZGxlckZ1bmMsdXNlQ2FwdHVyZTp1c2VDYXB0dXJlfTtKU0V2ZW50cy5yZWdpc3Rlck9yUmVtb3ZlSGFuZGxlcihldmVudEhhbmRsZXIpfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3NldF90b3VjaGNhbmNlbF9jYWxsYmFja19vbl90aHJlYWQodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLHRhcmdldFRocmVhZCl7cmVnaXN0ZXJUb3VjaEV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLDI1LCJ0b3VjaGNhbmNlbCIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1mdW5jdGlvbiBfZW1zY3JpcHRlbl9zZXRfdG91Y2hlbmRfY2FsbGJhY2tfb25fdGhyZWFkKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyx0YXJnZXRUaHJlYWQpe3JlZ2lzdGVyVG91Y2hFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywyMywidG91Y2hlbmQiLHRhcmdldFRocmVhZCk7cmV0dXJuIDB9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X3RvdWNobW92ZV9jYWxsYmFja19vbl90aHJlYWQodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLHRhcmdldFRocmVhZCl7cmVnaXN0ZXJUb3VjaEV2ZW50Q2FsbGJhY2sodGFyZ2V0LHVzZXJEYXRhLHVzZUNhcHR1cmUsY2FsbGJhY2tmdW5jLDI0LCJ0b3VjaG1vdmUiLHRhcmdldFRocmVhZCk7cmV0dXJuIDB9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X3RvdWNoc3RhcnRfY2FsbGJhY2tfb25fdGhyZWFkKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyx0YXJnZXRUaHJlYWQpe3JlZ2lzdGVyVG91Y2hFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYywyMiwidG91Y2hzdGFydCIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1mdW5jdGlvbiByZWdpc3RlcldoZWVsRXZlbnRDYWxsYmFjayh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsZXZlbnRUeXBlSWQsZXZlbnRUeXBlU3RyaW5nLHRhcmdldFRocmVhZCl7aWYoIUpTRXZlbnRzLndoZWVsRXZlbnQpSlNFdmVudHMud2hlZWxFdmVudD1fbWFsbG9jKDk2KTt2YXIgd2hlZWxIYW5kbGVyRnVuYz1mdW5jdGlvbihldil7dmFyIGU9ZXZ8fGV2ZW50O3ZhciB3aGVlbEV2ZW50PUpTRXZlbnRzLndoZWVsRXZlbnQ7ZmlsbE1vdXNlRXZlbnREYXRhKHdoZWVsRXZlbnQsZSx0YXJnZXQpO0hFQVBGNjRbd2hlZWxFdmVudCs2ND4+M109ZVsiZGVsdGFYIl07SEVBUEY2NFt3aGVlbEV2ZW50KzcyPj4zXT1lWyJkZWx0YVkiXTtIRUFQRjY0W3doZWVsRXZlbnQrODA+PjNdPWVbImRlbHRhWiJdO0hFQVAzMlt3aGVlbEV2ZW50Kzg4Pj4yXT1lWyJkZWx0YU1vZGUiXTtpZihmdW5jdGlvbihhMSxhMixhMyl7cmV0dXJuIGR5bkNhbGxfaWlpaS5hcHBseShudWxsLFtjYWxsYmFja2Z1bmMsYTEsYTIsYTNdKX0oZXZlbnRUeXBlSWQsd2hlZWxFdmVudCx1c2VyRGF0YSkpZS5wcmV2ZW50RGVmYXVsdCgpfTt2YXIgZXZlbnRIYW5kbGVyPXt0YXJnZXQ6dGFyZ2V0LGFsbG93c0RlZmVycmVkQ2FsbHM6dHJ1ZSxldmVudFR5cGVTdHJpbmc6ZXZlbnRUeXBlU3RyaW5nLGNhbGxiYWNrZnVuYzpjYWxsYmFja2Z1bmMsaGFuZGxlckZ1bmM6d2hlZWxIYW5kbGVyRnVuYyx1c2VDYXB0dXJlOnVzZUNhcHR1cmV9O0pTRXZlbnRzLnJlZ2lzdGVyT3JSZW1vdmVIYW5kbGVyKGV2ZW50SGFuZGxlcil9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fc2V0X3doZWVsX2NhbGxiYWNrX29uX3RocmVhZCh0YXJnZXQsdXNlckRhdGEsdXNlQ2FwdHVyZSxjYWxsYmFja2Z1bmMsdGFyZ2V0VGhyZWFkKXt0YXJnZXQ9ZmluZEV2ZW50VGFyZ2V0KHRhcmdldCk7aWYodHlwZW9mIHRhcmdldC5vbndoZWVsIT09InVuZGVmaW5lZCIpe3JlZ2lzdGVyV2hlZWxFdmVudENhbGxiYWNrKHRhcmdldCx1c2VyRGF0YSx1c2VDYXB0dXJlLGNhbGxiYWNrZnVuYyw5LCJ3aGVlbCIsdGFyZ2V0VGhyZWFkKTtyZXR1cm4gMH1lbHNle3JldHVybi0xfX1mdW5jdGlvbiBfZW1zY3JpcHRlbl90aHJlYWRfc2xlZXAobXNlY3Mpe3ZhciBzdGFydD1fZW1zY3JpcHRlbl9nZXRfbm93KCk7d2hpbGUoX2Vtc2NyaXB0ZW5fZ2V0X25vdygpLXN0YXJ0PG1zZWNzKXt9fWZ1bmN0aW9uIF9fd2ViZ2xfZW5hYmxlX0FOR0xFX2luc3RhbmNlZF9hcnJheXMoY3R4KXt2YXIgZXh0PWN0eC5nZXRFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTtpZihleHQpe2N0eFsidmVydGV4QXR0cmliRGl2aXNvciJdPWZ1bmN0aW9uKGluZGV4LGRpdmlzb3Ipe2V4dFsidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oaW5kZXgsZGl2aXNvcil9O2N0eFsiZHJhd0FycmF5c0luc3RhbmNlZCJdPWZ1bmN0aW9uKG1vZGUsZmlyc3QsY291bnQscHJpbWNvdW50KXtleHRbImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSJdKG1vZGUsZmlyc3QsY291bnQscHJpbWNvdW50KX07Y3R4WyJkcmF3RWxlbWVudHNJbnN0YW5jZWQiXT1mdW5jdGlvbihtb2RlLGNvdW50LHR5cGUsaW5kaWNlcyxwcmltY291bnQpe2V4dFsiZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiXShtb2RlLGNvdW50LHR5cGUsaW5kaWNlcyxwcmltY291bnQpfTtyZXR1cm4gMX19ZnVuY3Rpb24gX193ZWJnbF9lbmFibGVfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QoY3R4KXt2YXIgZXh0PWN0eC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7aWYoZXh0KXtjdHhbImNyZWF0ZVZlcnRleEFycmF5Il09ZnVuY3Rpb24oKXtyZXR1cm4gZXh0WyJjcmVhdGVWZXJ0ZXhBcnJheU9FUyJdKCl9O2N0eFsiZGVsZXRlVmVydGV4QXJyYXkiXT1mdW5jdGlvbih2YW8pe2V4dFsiZGVsZXRlVmVydGV4QXJyYXlPRVMiXSh2YW8pfTtjdHhbImJpbmRWZXJ0ZXhBcnJheSJdPWZ1bmN0aW9uKHZhbyl7ZXh0WyJiaW5kVmVydGV4QXJyYXlPRVMiXSh2YW8pfTtjdHhbImlzVmVydGV4QXJyYXkiXT1mdW5jdGlvbih2YW8pe3JldHVybiBleHRbImlzVmVydGV4QXJyYXlPRVMiXSh2YW8pfTtyZXR1cm4gMX19ZnVuY3Rpb24gX193ZWJnbF9lbmFibGVfV0VCR0xfZHJhd19idWZmZXJzKGN0eCl7dmFyIGV4dD1jdHguZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTtpZihleHQpe2N0eFsiZHJhd0J1ZmZlcnMiXT1mdW5jdGlvbihuLGJ1ZnMpe2V4dFsiZHJhd0J1ZmZlcnNXRUJHTCJdKG4sYnVmcyl9O3JldHVybiAxfX1mdW5jdGlvbiBfX3dlYmdsX2VuYWJsZV9XRUJHTF9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlKGN0eCl7cmV0dXJuISEoY3R4LmRpYnZiaT1jdHguZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlIikpfWZ1bmN0aW9uIF9fd2ViZ2xfZW5hYmxlX1dFQkdMX211bHRpX2RyYXdfaW5zdGFuY2VkX2Jhc2VfdmVydGV4X2Jhc2VfaW5zdGFuY2UoY3R4KXtyZXR1cm4hIShjdHgubWRpYnZiaT1jdHguZ2V0RXh0ZW5zaW9uKCJXRUJHTF9tdWx0aV9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlIikpfWZ1bmN0aW9uIF9fd2ViZ2xfZW5hYmxlX1dFQkdMX211bHRpX2RyYXcoY3R4KXtyZXR1cm4hIShjdHgubXVsdGlEcmF3V2ViZ2w9Y3R4LmdldEV4dGVuc2lvbigiV0VCR0xfbXVsdGlfZHJhdyIpKX12YXIgR0w9e2NvdW50ZXI6MSxidWZmZXJzOltdLG1hcHBlZEJ1ZmZlcnM6e30scHJvZ3JhbXM6W10sZnJhbWVidWZmZXJzOltdLHJlbmRlcmJ1ZmZlcnM6W10sdGV4dHVyZXM6W10sc2hhZGVyczpbXSx2YW9zOltdLGNvbnRleHRzOltdLG9mZnNjcmVlbkNhbnZhc2VzOnt9LHF1ZXJpZXM6W10sc2FtcGxlcnM6W10sdHJhbnNmb3JtRmVlZGJhY2tzOltdLHN5bmNzOltdLGJ5dGVTaXplQnlUeXBlUm9vdDo1MTIwLGJ5dGVTaXplQnlUeXBlOlsxLDEsMiwyLDQsNCw0LDIsMyw0LDhdLHN0cmluZ0NhY2hlOnt9LHN0cmluZ2lDYWNoZTp7fSx1bnBhY2tBbGlnbm1lbnQ6NCxyZWNvcmRFcnJvcjpmdW5jdGlvbiByZWNvcmRFcnJvcihlcnJvckNvZGUpe2lmKCFHTC5sYXN0RXJyb3Ipe0dMLmxhc3RFcnJvcj1lcnJvckNvZGV9fSxnZXROZXdJZDpmdW5jdGlvbih0YWJsZSl7dmFyIHJldD1HTC5jb3VudGVyKys7Zm9yKHZhciBpPXRhYmxlLmxlbmd0aDtpPHJldDtpKyspe3RhYmxlW2ldPW51bGx9cmV0dXJuIHJldH0sTUFYX1RFTVBfQlVGRkVSX1NJWkU6MjA5NzE1MixudW1UZW1wVmVydGV4QnVmZmVyc1BlclNpemU6NjQsbG9nMmNlaWxMb29rdXA6ZnVuY3Rpb24oaSl7cmV0dXJuIDMyLU1hdGguY2x6MzIoaT09PTA/MDppLTEpfSxnZW5lcmF0ZVRlbXBCdWZmZXJzOmZ1bmN0aW9uKHF1YWRzLGNvbnRleHQpe3ZhciBsYXJnZXN0SW5kZXg9R0wubG9nMmNlaWxMb29rdXAoR0wuTUFYX1RFTVBfQlVGRkVSX1NJWkUpO2NvbnRleHQudGVtcFZlcnRleEJ1ZmZlckNvdW50ZXJzMT1bXTtjb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJDb3VudGVyczI9W107Y29udGV4dC50ZW1wVmVydGV4QnVmZmVyQ291bnRlcnMxLmxlbmd0aD1jb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJDb3VudGVyczIubGVuZ3RoPWxhcmdlc3RJbmRleCsxO2NvbnRleHQudGVtcFZlcnRleEJ1ZmZlcnMxPVtdO2NvbnRleHQudGVtcFZlcnRleEJ1ZmZlcnMyPVtdO2NvbnRleHQudGVtcFZlcnRleEJ1ZmZlcnMxLmxlbmd0aD1jb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJzMi5sZW5ndGg9bGFyZ2VzdEluZGV4KzE7Y29udGV4dC50ZW1wSW5kZXhCdWZmZXJzPVtdO2NvbnRleHQudGVtcEluZGV4QnVmZmVycy5sZW5ndGg9bGFyZ2VzdEluZGV4KzE7Zm9yKHZhciBpPTA7aTw9bGFyZ2VzdEluZGV4OysraSl7Y29udGV4dC50ZW1wSW5kZXhCdWZmZXJzW2ldPW51bGw7Y29udGV4dC50ZW1wVmVydGV4QnVmZmVyQ291bnRlcnMxW2ldPWNvbnRleHQudGVtcFZlcnRleEJ1ZmZlckNvdW50ZXJzMltpXT0wO3ZhciByaW5nYnVmZmVyTGVuZ3RoPUdMLm51bVRlbXBWZXJ0ZXhCdWZmZXJzUGVyU2l6ZTtjb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJzMVtpXT1bXTtjb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJzMltpXT1bXTt2YXIgcmluZ2J1ZmZlcjE9Y29udGV4dC50ZW1wVmVydGV4QnVmZmVyczFbaV07dmFyIHJpbmdidWZmZXIyPWNvbnRleHQudGVtcFZlcnRleEJ1ZmZlcnMyW2ldO3JpbmdidWZmZXIxLmxlbmd0aD1yaW5nYnVmZmVyMi5sZW5ndGg9cmluZ2J1ZmZlckxlbmd0aDtmb3IodmFyIGo9MDtqPHJpbmdidWZmZXJMZW5ndGg7KytqKXtyaW5nYnVmZmVyMVtqXT1yaW5nYnVmZmVyMltqXT1udWxsfX1pZihxdWFkcyl7Y29udGV4dC50ZW1wUXVhZEluZGV4QnVmZmVyPUdMY3R4LmNyZWF0ZUJ1ZmZlcigpO2NvbnRleHQuR0xjdHguYmluZEJ1ZmZlcigzNDk2Myxjb250ZXh0LnRlbXBRdWFkSW5kZXhCdWZmZXIpO3ZhciBudW1JbmRleGVzPUdMLk1BWF9URU1QX0JVRkZFUl9TSVpFPj4xO3ZhciBxdWFkSW5kZXhlcz1uZXcgVWludDE2QXJyYXkobnVtSW5kZXhlcyk7dmFyIGk9MCx2PTA7d2hpbGUoMSl7cXVhZEluZGV4ZXNbaSsrXT12O2lmKGk+PW51bUluZGV4ZXMpYnJlYWs7cXVhZEluZGV4ZXNbaSsrXT12KzE7aWYoaT49bnVtSW5kZXhlcylicmVhaztxdWFkSW5kZXhlc1tpKytdPXYrMjtpZihpPj1udW1JbmRleGVzKWJyZWFrO3F1YWRJbmRleGVzW2krK109djtpZihpPj1udW1JbmRleGVzKWJyZWFrO3F1YWRJbmRleGVzW2krK109disyO2lmKGk+PW51bUluZGV4ZXMpYnJlYWs7cXVhZEluZGV4ZXNbaSsrXT12KzM7aWYoaT49bnVtSW5kZXhlcylicmVhazt2Kz00fWNvbnRleHQuR0xjdHguYnVmZmVyRGF0YSgzNDk2MyxxdWFkSW5kZXhlcywzNTA0NCk7Y29udGV4dC5HTGN0eC5iaW5kQnVmZmVyKDM0OTYzLG51bGwpfX0sZ2V0VGVtcFZlcnRleEJ1ZmZlcjpmdW5jdGlvbiBnZXRUZW1wVmVydGV4QnVmZmVyKHNpemVCeXRlcyl7dmFyIGlkeD1HTC5sb2cyY2VpbExvb2t1cChzaXplQnl0ZXMpO3ZhciByaW5nYnVmZmVyPUdMLmN1cnJlbnRDb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJzMVtpZHhdO3ZhciBuZXh0RnJlZUJ1ZmZlckluZGV4PUdMLmN1cnJlbnRDb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJDb3VudGVyczFbaWR4XTtHTC5jdXJyZW50Q29udGV4dC50ZW1wVmVydGV4QnVmZmVyQ291bnRlcnMxW2lkeF09R0wuY3VycmVudENvbnRleHQudGVtcFZlcnRleEJ1ZmZlckNvdW50ZXJzMVtpZHhdKzEmR0wubnVtVGVtcFZlcnRleEJ1ZmZlcnNQZXJTaXplLTE7dmFyIHZibz1yaW5nYnVmZmVyW25leHRGcmVlQnVmZmVySW5kZXhdO2lmKHZibyl7cmV0dXJuIHZib312YXIgcHJldlZCTz1HTGN0eC5nZXRQYXJhbWV0ZXIoMzQ5NjQpO3JpbmdidWZmZXJbbmV4dEZyZWVCdWZmZXJJbmRleF09R0xjdHguY3JlYXRlQnVmZmVyKCk7R0xjdHguYmluZEJ1ZmZlcigzNDk2MixyaW5nYnVmZmVyW25leHRGcmVlQnVmZmVySW5kZXhdKTtHTGN0eC5idWZmZXJEYXRhKDM0OTYyLDE8PGlkeCwzNTA0OCk7R0xjdHguYmluZEJ1ZmZlcigzNDk2MixwcmV2VkJPKTtyZXR1cm4gcmluZ2J1ZmZlcltuZXh0RnJlZUJ1ZmZlckluZGV4XX0sZ2V0VGVtcEluZGV4QnVmZmVyOmZ1bmN0aW9uIGdldFRlbXBJbmRleEJ1ZmZlcihzaXplQnl0ZXMpe3ZhciBpZHg9R0wubG9nMmNlaWxMb29rdXAoc2l6ZUJ5dGVzKTt2YXIgaWJvPUdMLmN1cnJlbnRDb250ZXh0LnRlbXBJbmRleEJ1ZmZlcnNbaWR4XTtpZihpYm8pe3JldHVybiBpYm99dmFyIHByZXZJQk89R0xjdHguZ2V0UGFyYW1ldGVyKDM0OTY1KTtHTC5jdXJyZW50Q29udGV4dC50ZW1wSW5kZXhCdWZmZXJzW2lkeF09R0xjdHguY3JlYXRlQnVmZmVyKCk7R0xjdHguYmluZEJ1ZmZlcigzNDk2MyxHTC5jdXJyZW50Q29udGV4dC50ZW1wSW5kZXhCdWZmZXJzW2lkeF0pO0dMY3R4LmJ1ZmZlckRhdGEoMzQ5NjMsMTw8aWR4LDM1MDQ4KTtHTGN0eC5iaW5kQnVmZmVyKDM0OTYzLHByZXZJQk8pO3JldHVybiBHTC5jdXJyZW50Q29udGV4dC50ZW1wSW5kZXhCdWZmZXJzW2lkeF19LG5ld1JlbmRlcmluZ0ZyYW1lU3RhcnRlZDpmdW5jdGlvbiBuZXdSZW5kZXJpbmdGcmFtZVN0YXJ0ZWQoKXtpZighR0wuY3VycmVudENvbnRleHQpe3JldHVybn12YXIgdmI9R0wuY3VycmVudENvbnRleHQudGVtcFZlcnRleEJ1ZmZlcnMxO0dMLmN1cnJlbnRDb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJzMT1HTC5jdXJyZW50Q29udGV4dC50ZW1wVmVydGV4QnVmZmVyczI7R0wuY3VycmVudENvbnRleHQudGVtcFZlcnRleEJ1ZmZlcnMyPXZiO3ZiPUdMLmN1cnJlbnRDb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJDb3VudGVyczE7R0wuY3VycmVudENvbnRleHQudGVtcFZlcnRleEJ1ZmZlckNvdW50ZXJzMT1HTC5jdXJyZW50Q29udGV4dC50ZW1wVmVydGV4QnVmZmVyQ291bnRlcnMyO0dMLmN1cnJlbnRDb250ZXh0LnRlbXBWZXJ0ZXhCdWZmZXJDb3VudGVyczI9dmI7dmFyIGxhcmdlc3RJbmRleD1HTC5sb2cyY2VpbExvb2t1cChHTC5NQVhfVEVNUF9CVUZGRVJfU0laRSk7Zm9yKHZhciBpPTA7aTw9bGFyZ2VzdEluZGV4OysraSl7R0wuY3VycmVudENvbnRleHQudGVtcFZlcnRleEJ1ZmZlckNvdW50ZXJzMVtpXT0wfX0sZ2V0U291cmNlOmZ1bmN0aW9uKHNoYWRlcixjb3VudCxzdHJpbmcsbGVuZ3RoKXt2YXIgc291cmNlPSIiO2Zvcih2YXIgaT0wO2k8Y291bnQ7KytpKXt2YXIgbGVuPWxlbmd0aD9IRUFQMzJbbGVuZ3RoK2kqND4+Ml06LTE7c291cmNlKz1VVEY4VG9TdHJpbmcoSEVBUDMyW3N0cmluZytpKjQ+PjJdLGxlbjwwP3VuZGVmaW5lZDpsZW4pfXJldHVybiBzb3VyY2V9LGNhbGNCdWZMZW5ndGg6ZnVuY3Rpb24gY2FsY0J1Zkxlbmd0aChzaXplLHR5cGUsc3RyaWRlLGNvdW50KXtpZihzdHJpZGU+MCl7cmV0dXJuIGNvdW50KnN0cmlkZX12YXIgdHlwZVNpemU9R0wuYnl0ZVNpemVCeVR5cGVbdHlwZS1HTC5ieXRlU2l6ZUJ5VHlwZVJvb3RdO3JldHVybiBzaXplKnR5cGVTaXplKmNvdW50fSx1c2VkVGVtcEJ1ZmZlcnM6W10scHJlRHJhd0hhbmRsZUNsaWVudFZlcnRleEF0dHJpYkJpbmRpbmdzOmZ1bmN0aW9uIHByZURyYXdIYW5kbGVDbGllbnRWZXJ0ZXhBdHRyaWJCaW5kaW5ncyhjb3VudCl7R0wucmVzZXRCdWZmZXJCaW5kaW5nPWZhbHNlO2Zvcih2YXIgaT0wO2k8R0wuY3VycmVudENvbnRleHQubWF4VmVydGV4QXR0cmliczsrK2kpe3ZhciBjYj1HTC5jdXJyZW50Q29udGV4dC5jbGllbnRCdWZmZXJzW2ldO2lmKCFjYi5jbGllbnRzaWRlfHwhY2IuZW5hYmxlZCljb250aW51ZTtHTC5yZXNldEJ1ZmZlckJpbmRpbmc9dHJ1ZTt2YXIgc2l6ZT1HTC5jYWxjQnVmTGVuZ3RoKGNiLnNpemUsY2IudHlwZSxjYi5zdHJpZGUsY291bnQpO3ZhciBidWY9R0wuZ2V0VGVtcFZlcnRleEJ1ZmZlcihzaXplKTtHTGN0eC5iaW5kQnVmZmVyKDM0OTYyLGJ1Zik7R0xjdHguYnVmZmVyU3ViRGF0YSgzNDk2MiwwLEhFQVBVOC5zdWJhcnJheShjYi5wdHIsY2IucHRyK3NpemUpKTtjYi52ZXJ0ZXhBdHRyaWJQb2ludGVyQWRhcHRvci5jYWxsKEdMY3R4LGksY2Iuc2l6ZSxjYi50eXBlLGNiLm5vcm1hbGl6ZWQsY2Iuc3RyaWRlLDApfX0scG9zdERyYXdIYW5kbGVDbGllbnRWZXJ0ZXhBdHRyaWJCaW5kaW5nczpmdW5jdGlvbiBwb3N0RHJhd0hhbmRsZUNsaWVudFZlcnRleEF0dHJpYkJpbmRpbmdzKCl7aWYoR0wucmVzZXRCdWZmZXJCaW5kaW5nKXtHTGN0eC5iaW5kQnVmZmVyKDM0OTYyLEdMLmJ1ZmZlcnNbR0xjdHguY3VycmVudEFycmF5QnVmZmVyQmluZGluZ10pfX0sY3JlYXRlQ29udGV4dDpmdW5jdGlvbihjYW52YXMsd2ViR0xDb250ZXh0QXR0cmlidXRlcyl7aWYoIWNhbnZhcy5nZXRDb250ZXh0U2FmYXJpV2ViR0wyRml4ZWQpe2NhbnZhcy5nZXRDb250ZXh0U2FmYXJpV2ViR0wyRml4ZWQ9Y2FudmFzLmdldENvbnRleHQ7Y2FudmFzLmdldENvbnRleHQ9ZnVuY3Rpb24odmVyLGF0dHJzKXt2YXIgZ2w9Y2FudmFzLmdldENvbnRleHRTYWZhcmlXZWJHTDJGaXhlZCh2ZXIsYXR0cnMpO3JldHVybiB2ZXI9PSJ3ZWJnbCI9PWdsIGluc3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0P2dsOm51bGx9fXZhciBjdHg9d2ViR0xDb250ZXh0QXR0cmlidXRlcy5tYWpvclZlcnNpb24+MT9jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIix3ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTpjYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO2lmKCFjdHgpcmV0dXJuIDA7dmFyIGhhbmRsZT1HTC5yZWdpc3RlckNvbnRleHQoY3R4LHdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBoYW5kbGV9LHJlZ2lzdGVyQ29udGV4dDpmdW5jdGlvbihjdHgsd2ViR0xDb250ZXh0QXR0cmlidXRlcyl7dmFyIGhhbmRsZT1HTC5nZXROZXdJZChHTC5jb250ZXh0cyk7dmFyIGNvbnRleHQ9e2hhbmRsZTpoYW5kbGUsYXR0cmlidXRlczp3ZWJHTENvbnRleHRBdHRyaWJ1dGVzLHZlcnNpb246d2ViR0xDb250ZXh0QXR0cmlidXRlcy5tYWpvclZlcnNpb24sR0xjdHg6Y3R4fTtpZihjdHguY2FudmFzKWN0eC5jYW52YXMuR0xjdHhPYmplY3Q9Y29udGV4dDtHTC5jb250ZXh0c1toYW5kbGVdPWNvbnRleHQ7aWYodHlwZW9mIHdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuZW5hYmxlRXh0ZW5zaW9uc0J5RGVmYXVsdD09PSJ1bmRlZmluZWQifHx3ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmVuYWJsZUV4dGVuc2lvbnNCeURlZmF1bHQpe0dMLmluaXRFeHRlbnNpb25zKGNvbnRleHQpfWNvbnRleHQubWF4VmVydGV4QXR0cmlicz1jb250ZXh0LkdMY3R4LmdldFBhcmFtZXRlcigzNDkyMSk7Y29udGV4dC5jbGllbnRCdWZmZXJzPVtdO2Zvcih2YXIgaT0wO2k8Y29udGV4dC5tYXhWZXJ0ZXhBdHRyaWJzO2krKyl7Y29udGV4dC5jbGllbnRCdWZmZXJzW2ldPXtlbmFibGVkOmZhbHNlLGNsaWVudHNpZGU6ZmFsc2Usc2l6ZTowLHR5cGU6MCxub3JtYWxpemVkOjAsc3RyaWRlOjAscHRyOjAsdmVydGV4QXR0cmliUG9pbnRlckFkYXB0b3I6bnVsbH19R0wuZ2VuZXJhdGVUZW1wQnVmZmVycyhmYWxzZSxjb250ZXh0KTtyZXR1cm4gaGFuZGxlfSxtYWtlQ29udGV4dEN1cnJlbnQ6ZnVuY3Rpb24oY29udGV4dEhhbmRsZSl7R0wuY3VycmVudENvbnRleHQ9R0wuY29udGV4dHNbY29udGV4dEhhbmRsZV07TW9kdWxlLmN0eD1HTGN0eD1HTC5jdXJyZW50Q29udGV4dCYmR0wuY3VycmVudENvbnRleHQuR0xjdHg7cmV0dXJuIShjb250ZXh0SGFuZGxlJiYhR0xjdHgpfSxnZXRDb250ZXh0OmZ1bmN0aW9uKGNvbnRleHRIYW5kbGUpe3JldHVybiBHTC5jb250ZXh0c1tjb250ZXh0SGFuZGxlXX0sZGVsZXRlQ29udGV4dDpmdW5jdGlvbihjb250ZXh0SGFuZGxlKXtpZihHTC5jdXJyZW50Q29udGV4dD09PUdMLmNvbnRleHRzW2NvbnRleHRIYW5kbGVdKUdMLmN1cnJlbnRDb250ZXh0PW51bGw7aWYodHlwZW9mIEpTRXZlbnRzPT09Im9iamVjdCIpSlNFdmVudHMucmVtb3ZlQWxsSGFuZGxlcnNPblRhcmdldChHTC5jb250ZXh0c1tjb250ZXh0SGFuZGxlXS5HTGN0eC5jYW52YXMpO2lmKEdMLmNvbnRleHRzW2NvbnRleHRIYW5kbGVdJiZHTC5jb250ZXh0c1tjb250ZXh0SGFuZGxlXS5HTGN0eC5jYW52YXMpR0wuY29udGV4dHNbY29udGV4dEhhbmRsZV0uR0xjdHguY2FudmFzLkdMY3R4T2JqZWN0PXVuZGVmaW5lZDtHTC5jb250ZXh0c1tjb250ZXh0SGFuZGxlXT1udWxsfSxpbml0RXh0ZW5zaW9uczpmdW5jdGlvbihjb250ZXh0KXtpZighY29udGV4dCljb250ZXh0PUdMLmN1cnJlbnRDb250ZXh0O2lmKGNvbnRleHQuaW5pdEV4dGVuc2lvbnNEb25lKXJldHVybjtjb250ZXh0LmluaXRFeHRlbnNpb25zRG9uZT10cnVlO3ZhciBHTGN0eD1jb250ZXh0LkdMY3R4O19fd2ViZ2xfZW5hYmxlX0FOR0xFX2luc3RhbmNlZF9hcnJheXMoR0xjdHgpO19fd2ViZ2xfZW5hYmxlX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0KEdMY3R4KTtfX3dlYmdsX2VuYWJsZV9XRUJHTF9kcmF3X2J1ZmZlcnMoR0xjdHgpO19fd2ViZ2xfZW5hYmxlX1dFQkdMX2RyYXdfaW5zdGFuY2VkX2Jhc2VfdmVydGV4X2Jhc2VfaW5zdGFuY2UoR0xjdHgpO19fd2ViZ2xfZW5hYmxlX1dFQkdMX211bHRpX2RyYXdfaW5zdGFuY2VkX2Jhc2VfdmVydGV4X2Jhc2VfaW5zdGFuY2UoR0xjdHgpO2lmKGNvbnRleHQudmVyc2lvbj49Mil7R0xjdHguZGlzam9pbnRUaW1lclF1ZXJ5RXh0PUdMY3R4LmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfWlmKGNvbnRleHQudmVyc2lvbjwyfHwhR0xjdHguZGlzam9pbnRUaW1lclF1ZXJ5RXh0KXtHTGN0eC5kaXNqb2ludFRpbWVyUXVlcnlFeHQ9R0xjdHguZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnkiKX1fX3dlYmdsX2VuYWJsZV9XRUJHTF9tdWx0aV9kcmF3KEdMY3R4KTt2YXIgZXh0cz1HTGN0eC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCl8fFtdO2V4dHMuZm9yRWFjaChmdW5jdGlvbihleHQpe2lmKCFleHQuaW5jbHVkZXMoImxvc2VfY29udGV4dCIpJiYhZXh0LmluY2x1ZGVzKCJkZWJ1ZyIpKXtHTGN0eC5nZXRFeHRlbnNpb24oZXh0KX19KX19O3ZhciBfX2Vtc2NyaXB0ZW5fd2ViZ2xfcG93ZXJfcHJlZmVyZW5jZXM9WyJkZWZhdWx0IiwibG93LXBvd2VyIiwiaGlnaC1wZXJmb3JtYW5jZSJdO2Z1bmN0aW9uIF9lbXNjcmlwdGVuX3dlYmdsX2RvX2NyZWF0ZV9jb250ZXh0KHRhcmdldCxhdHRyaWJ1dGVzKXt2YXIgYT1hdHRyaWJ1dGVzPj4yO3ZhciBwb3dlclByZWZlcmVuY2U9SEVBUDMyW2ErKDI0Pj4yKV07dmFyIGNvbnRleHRBdHRyaWJ1dGVzPXsiYWxwaGEiOiEhSEVBUDMyW2ErKDA+PjIpXSwiZGVwdGgiOiEhSEVBUDMyW2ErKDQ+PjIpXSwic3RlbmNpbCI6ISFIRUFQMzJbYSsoOD4+MildLCJhbnRpYWxpYXMiOiEhSEVBUDMyW2ErKDEyPj4yKV0sInByZW11bHRpcGxpZWRBbHBoYSI6ISFIRUFQMzJbYSsoMTY+PjIpXSwicHJlc2VydmVEcmF3aW5nQnVmZmVyIjohIUhFQVAzMlthKygyMD4+MildLCJwb3dlclByZWZlcmVuY2UiOl9fZW1zY3JpcHRlbl93ZWJnbF9wb3dlcl9wcmVmZXJlbmNlc1twb3dlclByZWZlcmVuY2VdLCJmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IjohIUhFQVAzMlthKygyOD4+MildLG1ham9yVmVyc2lvbjpIRUFQMzJbYSsoMzI+PjIpXSxtaW5vclZlcnNpb246SEVBUDMyW2ErKDM2Pj4yKV0sZW5hYmxlRXh0ZW5zaW9uc0J5RGVmYXVsdDpIRUFQMzJbYSsoNDA+PjIpXSxleHBsaWNpdFN3YXBDb250cm9sOkhFQVAzMlthKyg0ND4+MildLHByb3h5Q29udGV4dFRvTWFpblRocmVhZDpIRUFQMzJbYSsoNDg+PjIpXSxyZW5kZXJWaWFPZmZzY3JlZW5CYWNrQnVmZmVyOkhFQVAzMlthKyg1Mj4+MildfTt2YXIgY2FudmFzPWZpbmRDYW52YXNFdmVudFRhcmdldCh0YXJnZXQpO2lmKCFjYW52YXMpe3JldHVybiAwfWlmKGNvbnRleHRBdHRyaWJ1dGVzLmV4cGxpY2l0U3dhcENvbnRyb2wpe3JldHVybiAwfXZhciBjb250ZXh0SGFuZGxlPUdMLmNyZWF0ZUNvbnRleHQoY2FudmFzLGNvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gY29udGV4dEhhbmRsZX1mdW5jdGlvbiBfZW1zY3JpcHRlbl93ZWJnbF9jcmVhdGVfY29udGV4dChhMCxhMSl7cmV0dXJuIF9lbXNjcmlwdGVuX3dlYmdsX2RvX2NyZWF0ZV9jb250ZXh0KGEwLGExKX1mdW5jdGlvbiBfZW1zY3JpcHRlbl93ZWJnbF9kb19nZXRfY3VycmVudF9jb250ZXh0KCl7cmV0dXJuIEdMLmN1cnJlbnRDb250ZXh0P0dMLmN1cnJlbnRDb250ZXh0LmhhbmRsZTowfWZ1bmN0aW9uIF9lbXNjcmlwdGVuX3dlYmdsX2dldF9jdXJyZW50X2NvbnRleHQoKXtyZXR1cm4gX2Vtc2NyaXB0ZW5fd2ViZ2xfZG9fZ2V0X2N1cnJlbnRfY29udGV4dCgpfU1vZHVsZVsiX2Vtc2NyaXB0ZW5fd2ViZ2xfZ2V0X2N1cnJlbnRfY29udGV4dCJdPV9lbXNjcmlwdGVuX3dlYmdsX2dldF9jdXJyZW50X2NvbnRleHQ7ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fd2ViZ2xfbWFrZV9jb250ZXh0X2N1cnJlbnQoY29udGV4dEhhbmRsZSl7dmFyIHN1Y2Nlc3M9R0wubWFrZUNvbnRleHRDdXJyZW50KGNvbnRleHRIYW5kbGUpO3JldHVybiBzdWNjZXNzPzA6LTV9TW9kdWxlWyJfZW1zY3JpcHRlbl93ZWJnbF9tYWtlX2NvbnRleHRfY3VycmVudCJdPV9lbXNjcmlwdGVuX3dlYmdsX21ha2VfY29udGV4dF9jdXJyZW50O2Z1bmN0aW9uIF9lbXNjcmlwdGVuX3dlYmdsX2Rlc3Ryb3lfY29udGV4dChjb250ZXh0SGFuZGxlKXtpZihHTC5jdXJyZW50Q29udGV4dD09Y29udGV4dEhhbmRsZSlHTC5jdXJyZW50Q29udGV4dD0wO0dMLmRlbGV0ZUNvbnRleHQoY29udGV4dEhhbmRsZSl9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fd2ViZ2xfZW5hYmxlX2V4dGVuc2lvbihjb250ZXh0SGFuZGxlLGV4dGVuc2lvbil7dmFyIGNvbnRleHQ9R0wuZ2V0Q29udGV4dChjb250ZXh0SGFuZGxlKTt2YXIgZXh0U3RyaW5nPVVURjhUb1N0cmluZyhleHRlbnNpb24pO2lmKGV4dFN0cmluZy5zdGFydHNXaXRoKCJHTF8iKSlleHRTdHJpbmc9ZXh0U3RyaW5nLnN1YnN0cigzKTtpZihleHRTdHJpbmc9PSJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIilfX3dlYmdsX2VuYWJsZV9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzKEdMY3R4KTtpZihleHRTdHJpbmc9PSJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpX193ZWJnbF9lbmFibGVfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QoR0xjdHgpO2lmKGV4dFN0cmluZz09IldFQkdMX2RyYXdfYnVmZmVycyIpX193ZWJnbF9lbmFibGVfV0VCR0xfZHJhd19idWZmZXJzKEdMY3R4KTtpZihleHRTdHJpbmc9PSJXRUJHTF9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlIilfX3dlYmdsX2VuYWJsZV9XRUJHTF9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlKEdMY3R4KTtpZihleHRTdHJpbmc9PSJXRUJHTF9tdWx0aV9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlIilfX3dlYmdsX2VuYWJsZV9XRUJHTF9tdWx0aV9kcmF3X2luc3RhbmNlZF9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlKEdMY3R4KTtpZihleHRTdHJpbmc9PSJXRUJHTF9tdWx0aV9kcmF3IilfX3dlYmdsX2VuYWJsZV9XRUJHTF9tdWx0aV9kcmF3KEdMY3R4KTt2YXIgZXh0PWNvbnRleHQuR0xjdHguZ2V0RXh0ZW5zaW9uKGV4dFN0cmluZyk7cmV0dXJuISFleHR9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fd2ViZ2xfaW5pdF9jb250ZXh0X2F0dHJpYnV0ZXMoYXR0cmlidXRlcyl7dmFyIGE9YXR0cmlidXRlcz4+Mjtmb3IodmFyIGk9MDtpPDU2Pj4yOysraSl7SEVBUDMyW2EraV09MH1IRUFQMzJbYSsoMD4+MildPUhFQVAzMlthKyg0Pj4yKV09SEVBUDMyW2ErKDEyPj4yKV09SEVBUDMyW2ErKDE2Pj4yKV09SEVBUDMyW2ErKDMyPj4yKV09SEVBUDMyW2ErKDQwPj4yKV09MX12YXIgRU5WPXt9O2Z1bmN0aW9uIGdldEV4ZWN1dGFibGVOYW1lKCl7cmV0dXJuIHRoaXNQcm9ncmFtfHwiLi90aGlzLnByb2dyYW0ifWZ1bmN0aW9uIGdldEVudlN0cmluZ3MoKXtpZighZ2V0RW52U3RyaW5ncy5zdHJpbmdzKXt2YXIgbGFuZz0odHlwZW9mIG5hdmlnYXRvcj09PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCI7dmFyIGVudj17IlVTRVIiOiJ3ZWJfdXNlciIsIkxPR05BTUUiOiJ3ZWJfdXNlciIsIlBBVEgiOiIvIiwiUFdEIjoiLyIsIkhPTUUiOiIvaG9tZS93ZWJfdXNlciIsIkxBTkciOmxhbmcsIl8iOmdldEV4ZWN1dGFibGVOYW1lKCl9O2Zvcih2YXIgeCBpbiBFTlYpe2Vudlt4XT1FTlZbeF19dmFyIHN0cmluZ3M9W107Zm9yKHZhciB4IGluIGVudil7c3RyaW5ncy5wdXNoKHgrIj0iK2Vudlt4XSl9Z2V0RW52U3RyaW5ncy5zdHJpbmdzPXN0cmluZ3N9cmV0dXJuIGdldEVudlN0cmluZ3Muc3RyaW5nc31mdW5jdGlvbiBfZW52aXJvbl9nZXQoX19lbnZpcm9uLGVudmlyb25fYnVmKXt0cnl7dmFyIGJ1ZlNpemU9MDtnZXRFbnZTdHJpbmdzKCkuZm9yRWFjaChmdW5jdGlvbihzdHJpbmcsaSl7dmFyIHB0cj1lbnZpcm9uX2J1ZitidWZTaXplO0hFQVAzMltfX2Vudmlyb24raSo0Pj4yXT1wdHI7d3JpdGVBc2NpaVRvTWVtb3J5KHN0cmluZyxwdHIpO2J1ZlNpemUrPXN0cmluZy5sZW5ndGgrMX0pO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4gZS5lcnJub319ZnVuY3Rpb24gX2Vudmlyb25fc2l6ZXNfZ2V0KHBlbnZpcm9uX2NvdW50LHBlbnZpcm9uX2J1Zl9zaXplKXt0cnl7dmFyIHN0cmluZ3M9Z2V0RW52U3RyaW5ncygpO0hFQVAzMltwZW52aXJvbl9jb3VudD4+Ml09c3RyaW5ncy5sZW5ndGg7dmFyIGJ1ZlNpemU9MDtzdHJpbmdzLmZvckVhY2goZnVuY3Rpb24oc3RyaW5nKXtidWZTaXplKz1zdHJpbmcubGVuZ3RoKzF9KTtIRUFQMzJbcGVudmlyb25fYnVmX3NpemU+PjJdPWJ1ZlNpemU7cmV0dXJuIDB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybiBlLmVycm5vfX1mdW5jdGlvbiBfZmRfY2xvc2UoZmQpe3RyeXt2YXIgc3RyZWFtPVNZU0NBTExTLmdldFN0cmVhbUZyb21GRChmZCk7RlMuY2xvc2Uoc3RyZWFtKTtyZXR1cm4gMH1jYXRjaChlKXtpZih0eXBlb2YgRlM9PT0idW5kZWZpbmVkInx8IShlIGluc3RhbmNlb2YgRlMuRXJybm9FcnJvcikpYWJvcnQoZSk7cmV0dXJuIGUuZXJybm99fWZ1bmN0aW9uIF9mZF9mZHN0YXRfZ2V0KGZkLHBidWYpe3RyeXt2YXIgc3RyZWFtPVNZU0NBTExTLmdldFN0cmVhbUZyb21GRChmZCk7dmFyIHR5cGU9c3RyZWFtLnR0eT8yOkZTLmlzRGlyKHN0cmVhbS5tb2RlKT8zOkZTLmlzTGluayhzdHJlYW0ubW9kZSk/Nzo0O0hFQVA4W3BidWY+PjBdPXR5cGU7cmV0dXJuIDB9Y2F0Y2goZSl7aWYodHlwZW9mIEZTPT09InVuZGVmaW5lZCJ8fCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKWFib3J0KGUpO3JldHVybiBlLmVycm5vfX1mdW5jdGlvbiBfZmRfcmVhZChmZCxpb3YsaW92Y250LHBudW0pe3RyeXt2YXIgc3RyZWFtPVNZU0NBTExTLmdldFN0cmVhbUZyb21GRChmZCk7dmFyIG51bT1TWVNDQUxMUy5kb1JlYWR2KHN0cmVhbSxpb3YsaW92Y250KTtIRUFQMzJbcG51bT4+Ml09bnVtO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4gZS5lcnJub319ZnVuY3Rpb24gX2ZkX3NlZWsoZmQsb2Zmc2V0X2xvdyxvZmZzZXRfaGlnaCx3aGVuY2UsbmV3T2Zmc2V0KXt0cnl7dmFyIHN0cmVhbT1TWVNDQUxMUy5nZXRTdHJlYW1Gcm9tRkQoZmQpO3ZhciBISUdIX09GRlNFVD00Mjk0OTY3Mjk2O3ZhciBvZmZzZXQ9b2Zmc2V0X2hpZ2gqSElHSF9PRkZTRVQrKG9mZnNldF9sb3c+Pj4wKTt2YXIgRE9VQkxFX0xJTUlUPTkwMDcxOTkyNTQ3NDA5OTI7aWYob2Zmc2V0PD0tRE9VQkxFX0xJTUlUfHxvZmZzZXQ+PURPVUJMRV9MSU1JVCl7cmV0dXJuLTYxfUZTLmxsc2VlayhzdHJlYW0sb2Zmc2V0LHdoZW5jZSk7dGVtcEk2ND1bc3RyZWFtLnBvc2l0aW9uPj4+MCwodGVtcERvdWJsZT1zdHJlYW0ucG9zaXRpb24sK01hdGguYWJzKHRlbXBEb3VibGUpPj0xP3RlbXBEb3VibGU+MD8oTWF0aC5taW4oK01hdGguZmxvb3IodGVtcERvdWJsZS80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KXwwKT4+PjA6fn4rTWF0aC5jZWlsKCh0ZW1wRG91YmxlLSsofn50ZW1wRG91YmxlPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sSEVBUDMyW25ld09mZnNldD4+Ml09dGVtcEk2NFswXSxIRUFQMzJbbmV3T2Zmc2V0KzQ+PjJdPXRlbXBJNjRbMV07aWYoc3RyZWFtLmdldGRlbnRzJiZvZmZzZXQ9PT0wJiZ3aGVuY2U9PT0wKXN0cmVhbS5nZXRkZW50cz1udWxsO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4gZS5lcnJub319ZnVuY3Rpb24gX2ZkX3dyaXRlKGZkLGlvdixpb3ZjbnQscG51bSl7dHJ5e3ZhciBzdHJlYW09U1lTQ0FMTFMuZ2V0U3RyZWFtRnJvbUZEKGZkKTt2YXIgbnVtPVNZU0NBTExTLmRvV3JpdGV2KHN0cmVhbSxpb3YsaW92Y250KTtIRUFQMzJbcG51bT4+Ml09bnVtO3JldHVybiAwfWNhdGNoKGUpe2lmKHR5cGVvZiBGUz09PSJ1bmRlZmluZWQifHwhKGUgaW5zdGFuY2VvZiBGUy5FcnJub0Vycm9yKSlhYm9ydChlKTtyZXR1cm4gZS5lcnJub319ZnVuY3Rpb24gX2Zsb2NrKGZkLG9wZXJhdGlvbil7cmV0dXJuIDB9ZnVuY3Rpb24gX2dldFRlbXBSZXQwKCl7cmV0dXJuIGdldFRlbXBSZXQwKCl9ZnVuY3Rpb24gX2dldGFkZHJpbmZvKG5vZGUsc2VydmljZSxoaW50LG91dCl7dmFyIGFkZHI9MDt2YXIgcG9ydD0wO3ZhciBmbGFncz0wO3ZhciBmYW1pbHk9MDt2YXIgdHlwZT0wO3ZhciBwcm90bz0wO3ZhciBhaTtmdW5jdGlvbiBhbGxvY2FkZHJpbmZvKGZhbWlseSx0eXBlLHByb3RvLGNhbm9uLGFkZHIscG9ydCl7dmFyIHNhLHNhbGVuLGFpO3ZhciBlcnJubztzYWxlbj1mYW1pbHk9PT0xMD8yODoxNjthZGRyPWZhbWlseT09PTEwP2luZXROdG9wNihhZGRyKTppbmV0TnRvcDQoYWRkcik7c2E9X21hbGxvYyhzYWxlbik7ZXJybm89d3JpdGVTb2NrYWRkcihzYSxmYW1pbHksYWRkcixwb3J0KTthc3NlcnQoIWVycm5vKTthaT1fbWFsbG9jKDMyKTtIRUFQMzJbYWkrND4+Ml09ZmFtaWx5O0hFQVAzMlthaSs4Pj4yXT10eXBlO0hFQVAzMlthaSsxMj4+Ml09cHJvdG87SEVBUDMyW2FpKzI0Pj4yXT1jYW5vbjtIRUFQMzJbYWkrMjA+PjJdPXNhO2lmKGZhbWlseT09PTEwKXtIRUFQMzJbYWkrMTY+PjJdPTI4fWVsc2V7SEVBUDMyW2FpKzE2Pj4yXT0xNn1IRUFQMzJbYWkrMjg+PjJdPTA7cmV0dXJuIGFpfWlmKGhpbnQpe2ZsYWdzPUhFQVAzMltoaW50Pj4yXTtmYW1pbHk9SEVBUDMyW2hpbnQrND4+Ml07dHlwZT1IRUFQMzJbaGludCs4Pj4yXTtwcm90bz1IRUFQMzJbaGludCsxMj4+Ml19aWYodHlwZSYmIXByb3RvKXtwcm90bz10eXBlPT09Mj8xNzo2fWlmKCF0eXBlJiZwcm90byl7dHlwZT1wcm90bz09PTE3PzI6MX1pZihwcm90bz09PTApe3Byb3RvPTZ9aWYodHlwZT09PTApe3R5cGU9MX1pZighbm9kZSYmIXNlcnZpY2Upe3JldHVybi0yfWlmKGZsYWdzJn4oMXwyfDR8MTAyNHw4fDE2fDMyKSl7cmV0dXJuLTF9aWYoaGludCE9PTAmJkhFQVAzMltoaW50Pj4yXSYyJiYhbm9kZSl7cmV0dXJuLTF9aWYoZmxhZ3MmMzIpe3JldHVybi0yfWlmKHR5cGUhPT0wJiZ0eXBlIT09MSYmdHlwZSE9PTIpe3JldHVybi03fWlmKGZhbWlseSE9PTAmJmZhbWlseSE9PTImJmZhbWlseSE9PTEwKXtyZXR1cm4tNn1pZihzZXJ2aWNlKXtzZXJ2aWNlPVVURjhUb1N0cmluZyhzZXJ2aWNlKTtwb3J0PXBhcnNlSW50KHNlcnZpY2UsMTApO2lmKGlzTmFOKHBvcnQpKXtpZihmbGFncyYxMDI0KXtyZXR1cm4tMn1yZXR1cm4tOH19aWYoIW5vZGUpe2lmKGZhbWlseT09PTApe2ZhbWlseT0yfWlmKChmbGFncyYxKT09PTApe2lmKGZhbWlseT09PTIpe2FkZHI9X2h0b25sKDIxMzA3MDY0MzMpfWVsc2V7YWRkcj1bMCwwLDAsMV19fWFpPWFsbG9jYWRkcmluZm8oZmFtaWx5LHR5cGUscHJvdG8sbnVsbCxhZGRyLHBvcnQpO0hFQVAzMltvdXQ+PjJdPWFpO3JldHVybiAwfW5vZGU9VVRGOFRvU3RyaW5nKG5vZGUpO2FkZHI9aW5ldFB0b240KG5vZGUpO2lmKGFkZHIhPT1udWxsKXtpZihmYW1pbHk9PT0wfHxmYW1pbHk9PT0yKXtmYW1pbHk9Mn1lbHNlIGlmKGZhbWlseT09PTEwJiZmbGFncyY4KXthZGRyPVswLDAsX2h0b25sKDY1NTM1KSxhZGRyXTtmYW1pbHk9MTB9ZWxzZXtyZXR1cm4tMn19ZWxzZXthZGRyPWluZXRQdG9uNihub2RlKTtpZihhZGRyIT09bnVsbCl7aWYoZmFtaWx5PT09MHx8ZmFtaWx5PT09MTApe2ZhbWlseT0xMH1lbHNle3JldHVybi0yfX19aWYoYWRkciE9bnVsbCl7YWk9YWxsb2NhZGRyaW5mbyhmYW1pbHksdHlwZSxwcm90byxub2RlLGFkZHIscG9ydCk7SEVBUDMyW291dD4+Ml09YWk7cmV0dXJuIDB9aWYoZmxhZ3MmNCl7cmV0dXJuLTJ9bm9kZT1ETlMubG9va3VwX25hbWUobm9kZSk7YWRkcj1pbmV0UHRvbjQobm9kZSk7aWYoZmFtaWx5PT09MCl7ZmFtaWx5PTJ9ZWxzZSBpZihmYW1pbHk9PT0xMCl7YWRkcj1bMCwwLF9odG9ubCg2NTUzNSksYWRkcl19YWk9YWxsb2NhZGRyaW5mbyhmYW1pbHksdHlwZSxwcm90byxudWxsLGFkZHIscG9ydCk7SEVBUDMyW291dD4+Ml09YWk7cmV0dXJuIDB9ZnVuY3Rpb24gZ2V0SG9zdEJ5TmFtZShuYW1lKXt2YXIgcmV0PV9tYWxsb2MoMjApO3ZhciBuYW1lQnVmPV9tYWxsb2MobmFtZS5sZW5ndGgrMSk7c3RyaW5nVG9VVEY4KG5hbWUsbmFtZUJ1ZixuYW1lLmxlbmd0aCsxKTtIRUFQMzJbcmV0Pj4yXT1uYW1lQnVmO3ZhciBhbGlhc2VzQnVmPV9tYWxsb2MoNCk7SEVBUDMyW2FsaWFzZXNCdWY+PjJdPTA7SEVBUDMyW3JldCs0Pj4yXT1hbGlhc2VzQnVmO3ZhciBhZmluZXQ9MjtIRUFQMzJbcmV0Kzg+PjJdPWFmaW5ldDtIRUFQMzJbcmV0KzEyPj4yXT00O3ZhciBhZGRyTGlzdEJ1Zj1fbWFsbG9jKDEyKTtIRUFQMzJbYWRkckxpc3RCdWY+PjJdPWFkZHJMaXN0QnVmKzg7SEVBUDMyW2FkZHJMaXN0QnVmKzQ+PjJdPTA7SEVBUDMyW2FkZHJMaXN0QnVmKzg+PjJdPWluZXRQdG9uNChETlMubG9va3VwX25hbWUobmFtZSkpO0hFQVAzMltyZXQrMTY+PjJdPWFkZHJMaXN0QnVmO3JldHVybiByZXR9ZnVuY3Rpb24gX2dldGhvc3RieWFkZHIoYWRkcixhZGRybGVuLHR5cGUpe2lmKHR5cGUhPT0yKXtzZXRFcnJObyg1KTtyZXR1cm4gbnVsbH1hZGRyPUhFQVAzMlthZGRyPj4yXTt2YXIgaG9zdD1pbmV0TnRvcDQoYWRkcik7dmFyIGxvb2t1cD1ETlMubG9va3VwX2FkZHIoaG9zdCk7aWYobG9va3VwKXtob3N0PWxvb2t1cH1yZXR1cm4gZ2V0SG9zdEJ5TmFtZShob3N0KX1mdW5jdGlvbiBfZ2V0aG9zdGJ5bmFtZShuYW1lKXtyZXR1cm4gZ2V0SG9zdEJ5TmFtZShVVEY4VG9TdHJpbmcobmFtZSkpfWZ1bmN0aW9uIF9nZXRuYW1laW5mbyhzYSxzYWxlbixub2RlLG5vZGVsZW4sc2VydixzZXJ2bGVuLGZsYWdzKXt2YXIgaW5mbz1yZWFkU29ja2FkZHIoc2Esc2FsZW4pO2lmKGluZm8uZXJybm8pe3JldHVybi02fXZhciBwb3J0PWluZm8ucG9ydDt2YXIgYWRkcj1pbmZvLmFkZHI7dmFyIG92ZXJmbG93ZWQ9ZmFsc2U7aWYobm9kZSYmbm9kZWxlbil7dmFyIGxvb2t1cDtpZihmbGFncyYxfHwhKGxvb2t1cD1ETlMubG9va3VwX2FkZHIoYWRkcikpKXtpZihmbGFncyY4KXtyZXR1cm4tMn19ZWxzZXthZGRyPWxvb2t1cH12YXIgbnVtQnl0ZXNXcml0dGVuRXhjbE51bGw9c3RyaW5nVG9VVEY4KGFkZHIsbm9kZSxub2RlbGVuKTtpZihudW1CeXRlc1dyaXR0ZW5FeGNsTnVsbCsxPj1ub2RlbGVuKXtvdmVyZmxvd2VkPXRydWV9fWlmKHNlcnYmJnNlcnZsZW4pe3BvcnQ9IiIrcG9ydDt2YXIgbnVtQnl0ZXNXcml0dGVuRXhjbE51bGw9c3RyaW5nVG9VVEY4KHBvcnQsc2VydixzZXJ2bGVuKTtpZihudW1CeXRlc1dyaXR0ZW5FeGNsTnVsbCsxPj1zZXJ2bGVuKXtvdmVyZmxvd2VkPXRydWV9fWlmKG92ZXJmbG93ZWQpe3JldHVybi0xMn1yZXR1cm4gMH1mdW5jdGlvbiBfZ2V0cHd1aWQoKXt0aHJvdyJnZXRwd3VpZDogVE9ETyJ9ZnVuY3Rpb24gX2dldHRpbWVvZmRheShwdHIpe3ZhciBub3c9RGF0ZS5ub3coKTtIRUFQMzJbcHRyPj4yXT1ub3cvMWUzfDA7SEVBUDMyW3B0cis0Pj4yXT1ub3clMWUzKjFlM3wwO3JldHVybiAwfWZ1bmN0aW9uIF9nbEFjdGl2ZVRleHR1cmUoeDApe0dMY3R4WyJhY3RpdmVUZXh0dXJlIl0oeDApfWZ1bmN0aW9uIF9nbEF0dGFjaFNoYWRlcihwcm9ncmFtLHNoYWRlcil7cHJvZ3JhbT1HTC5wcm9ncmFtc1twcm9ncmFtXTtzaGFkZXI9R0wuc2hhZGVyc1tzaGFkZXJdO3Byb2dyYW1bc2hhZGVyLnNoYWRlclR5cGVdPXNoYWRlcjtHTGN0eC5hdHRhY2hTaGFkZXIocHJvZ3JhbSxzaGFkZXIpfWZ1bmN0aW9uIF9nbEJlZ2luUXVlcnkodGFyZ2V0LGlkKXtHTGN0eFsiYmVnaW5RdWVyeSJdKHRhcmdldCxHTC5xdWVyaWVzW2lkXSl9ZnVuY3Rpb24gX2dsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayh4MCl7R0xjdHhbImJlZ2luVHJhbnNmb3JtRmVlZGJhY2siXSh4MCl9ZnVuY3Rpb24gX2dsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0saW5kZXgsbmFtZSl7R0xjdHguYmluZEF0dHJpYkxvY2F0aW9uKEdMLnByb2dyYW1zW3Byb2dyYW1dLGluZGV4LFVURjhUb1N0cmluZyhuYW1lKSl9ZnVuY3Rpb24gX2dsQmluZEJ1ZmZlcih0YXJnZXQsYnVmZmVyKXtpZih0YXJnZXQ9PTM0OTYyKXtHTGN0eC5jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nPWJ1ZmZlcn1lbHNlIGlmKHRhcmdldD09MzQ5NjMpe0dMY3R4LmN1cnJlbnRFbGVtZW50QXJyYXlCdWZmZXJCaW5kaW5nPWJ1ZmZlcn1pZih0YXJnZXQ9PTM1MDUxKXtHTGN0eC5jdXJyZW50UGl4ZWxQYWNrQnVmZmVyQmluZGluZz1idWZmZXJ9ZWxzZSBpZih0YXJnZXQ9PTM1MDUyKXtHTGN0eC5jdXJyZW50UGl4ZWxVbnBhY2tCdWZmZXJCaW5kaW5nPWJ1ZmZlcn1HTGN0eC5iaW5kQnVmZmVyKHRhcmdldCxHTC5idWZmZXJzW2J1ZmZlcl0pfWZ1bmN0aW9uIF9nbEJpbmRCdWZmZXJCYXNlKHRhcmdldCxpbmRleCxidWZmZXIpe0dMY3R4WyJiaW5kQnVmZmVyQmFzZSJdKHRhcmdldCxpbmRleCxHTC5idWZmZXJzW2J1ZmZlcl0pfWZ1bmN0aW9uIF9nbEJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsaW5kZXgsYnVmZmVyLG9mZnNldCxwdHJzaXplKXtHTGN0eFsiYmluZEJ1ZmZlclJhbmdlIl0odGFyZ2V0LGluZGV4LEdMLmJ1ZmZlcnNbYnVmZmVyXSxvZmZzZXQscHRyc2l6ZSl9ZnVuY3Rpb24gX2dsQmluZEZyYW1lYnVmZmVyKHRhcmdldCxmcmFtZWJ1ZmZlcil7R0xjdHguYmluZEZyYW1lYnVmZmVyKHRhcmdldCxHTC5mcmFtZWJ1ZmZlcnNbZnJhbWVidWZmZXJdKX1mdW5jdGlvbiBfZ2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCxyZW5kZXJidWZmZXIpe0dMY3R4LmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LEdMLnJlbmRlcmJ1ZmZlcnNbcmVuZGVyYnVmZmVyXSl9ZnVuY3Rpb24gX2dsQmluZFNhbXBsZXIodW5pdCxzYW1wbGVyKXtHTGN0eFsiYmluZFNhbXBsZXIiXSh1bml0LEdMLnNhbXBsZXJzW3NhbXBsZXJdKX1mdW5jdGlvbiBfZ2xCaW5kVGV4dHVyZSh0YXJnZXQsdGV4dHVyZSl7R0xjdHguYmluZFRleHR1cmUodGFyZ2V0LEdMLnRleHR1cmVzW3RleHR1cmVdKX1mdW5jdGlvbiBfZ2xCaW5kVHJhbnNmb3JtRmVlZGJhY2sodGFyZ2V0LGlkKXtHTGN0eFsiYmluZFRyYW5zZm9ybUZlZWRiYWNrIl0odGFyZ2V0LEdMLnRyYW5zZm9ybUZlZWRiYWNrc1tpZF0pfWZ1bmN0aW9uIF9nbEJpbmRWZXJ0ZXhBcnJheSh2YW8pe0dMY3R4WyJiaW5kVmVydGV4QXJyYXkiXShHTC52YW9zW3Zhb10pO3ZhciBpYm89R0xjdHguZ2V0UGFyYW1ldGVyKDM0OTY1KTtHTGN0eC5jdXJyZW50RWxlbWVudEFycmF5QnVmZmVyQmluZGluZz1pYm8/aWJvLm5hbWV8MDowfWZ1bmN0aW9uIF9nbEJsZW5kRXF1YXRpb24oeDApe0dMY3R4WyJibGVuZEVxdWF0aW9uIl0oeDApfWZ1bmN0aW9uIF9nbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSh4MCx4MSl7R0xjdHhbImJsZW5kRXF1YXRpb25TZXBhcmF0ZSJdKHgwLHgxKX1mdW5jdGlvbiBfZ2xCbGVuZEZ1bmNTZXBhcmF0ZSh4MCx4MSx4Mix4Myl7R0xjdHhbImJsZW5kRnVuY1NlcGFyYXRlIl0oeDAseDEseDIseDMpfWZ1bmN0aW9uIF9nbEJsaXRGcmFtZWJ1ZmZlcih4MCx4MSx4Mix4Myx4NCx4NSx4Nix4Nyx4OCx4OSl7R0xjdHhbImJsaXRGcmFtZWJ1ZmZlciJdKHgwLHgxLHgyLHgzLHg0LHg1LHg2LHg3LHg4LHg5KX1mdW5jdGlvbiBfZ2xCdWZmZXJEYXRhKHRhcmdldCxzaXplLGRhdGEsdXNhZ2Upe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe2lmKGRhdGEpe0dMY3R4LmJ1ZmZlckRhdGEodGFyZ2V0LEhFQVBVOCx1c2FnZSxkYXRhLHNpemUpfWVsc2V7R0xjdHguYnVmZmVyRGF0YSh0YXJnZXQsc2l6ZSx1c2FnZSl9fWVsc2V7R0xjdHguYnVmZmVyRGF0YSh0YXJnZXQsZGF0YT9IRUFQVTguc3ViYXJyYXkoZGF0YSxkYXRhK3NpemUpOnNpemUsdXNhZ2UpfX1mdW5jdGlvbiBfZ2xCdWZmZXJTdWJEYXRhKHRhcmdldCxvZmZzZXQsc2l6ZSxkYXRhKXtpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtHTGN0eC5idWZmZXJTdWJEYXRhKHRhcmdldCxvZmZzZXQsSEVBUFU4LGRhdGEsc2l6ZSk7cmV0dXJufUdMY3R4LmJ1ZmZlclN1YkRhdGEodGFyZ2V0LG9mZnNldCxIRUFQVTguc3ViYXJyYXkoZGF0YSxkYXRhK3NpemUpKX1mdW5jdGlvbiBfZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHgwKXtyZXR1cm4gR0xjdHhbImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiXSh4MCl9ZnVuY3Rpb24gX2dsQ2xlYXIoeDApe0dMY3R4WyJjbGVhciJdKHgwKX1mdW5jdGlvbiBfZ2xDbGVhckJ1ZmZlcmZpKHgwLHgxLHgyLHgzKXtHTGN0eFsiY2xlYXJCdWZmZXJmaSJdKHgwLHgxLHgyLHgzKX1mdW5jdGlvbiBfZ2xDbGVhckJ1ZmZlcmZ2KGJ1ZmZlcixkcmF3YnVmZmVyLHZhbHVlKXtHTGN0eFsiY2xlYXJCdWZmZXJmdiJdKGJ1ZmZlcixkcmF3YnVmZmVyLEhFQVBGMzIsdmFsdWU+PjIpfWZ1bmN0aW9uIF9nbENsZWFyQnVmZmVydWl2KGJ1ZmZlcixkcmF3YnVmZmVyLHZhbHVlKXtHTGN0eFsiY2xlYXJCdWZmZXJ1aXYiXShidWZmZXIsZHJhd2J1ZmZlcixIRUFQVTMyLHZhbHVlPj4yKX1mdW5jdGlvbiBfZ2xDbGVhckNvbG9yKHgwLHgxLHgyLHgzKXtHTGN0eFsiY2xlYXJDb2xvciJdKHgwLHgxLHgyLHgzKX1mdW5jdGlvbiBfZ2xDbGVhckRlcHRoZih4MCl7R0xjdHhbImNsZWFyRGVwdGgiXSh4MCl9ZnVuY3Rpb24gX2dsQ2xlYXJTdGVuY2lsKHgwKXtHTGN0eFsiY2xlYXJTdGVuY2lsIl0oeDApfWZ1bmN0aW9uIF9nbENsaWVudFdhaXRTeW5jKHN5bmMsZmxhZ3MsdGltZW91dExvLHRpbWVvdXRIaSl7cmV0dXJuIEdMY3R4LmNsaWVudFdhaXRTeW5jKEdMLnN5bmNzW3N5bmNdLGZsYWdzLGNvbnZlcnRJMzJQYWlyVG9JNTModGltZW91dExvLHRpbWVvdXRIaSkpfWZ1bmN0aW9uIF9nbENvbG9yTWFzayhyZWQsZ3JlZW4sYmx1ZSxhbHBoYSl7R0xjdHguY29sb3JNYXNrKCEhcmVkLCEhZ3JlZW4sISFibHVlLCEhYWxwaGEpfWZ1bmN0aW9uIF9nbENvbXBpbGVTaGFkZXIoc2hhZGVyKXtHTGN0eC5jb21waWxlU2hhZGVyKEdMLnNoYWRlcnNbc2hhZGVyXSl9ZnVuY3Rpb24gX2dsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LGxldmVsLGludGVybmFsRm9ybWF0LHdpZHRoLGhlaWdodCxib3JkZXIsaW1hZ2VTaXplLGRhdGEpe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe2lmKEdMY3R4LmN1cnJlbnRQaXhlbFVucGFja0J1ZmZlckJpbmRpbmcpe0dMY3R4WyJjb21wcmVzc2VkVGV4SW1hZ2UyRCJdKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsYm9yZGVyLGltYWdlU2l6ZSxkYXRhKX1lbHNle0dMY3R4WyJjb21wcmVzc2VkVGV4SW1hZ2UyRCJdKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsYm9yZGVyLEhFQVBVOCxkYXRhLGltYWdlU2l6ZSl9cmV0dXJufUdMY3R4WyJjb21wcmVzc2VkVGV4SW1hZ2UyRCJdKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsYm9yZGVyLGRhdGE/SEVBUFU4LnN1YmFycmF5KGRhdGEsZGF0YStpbWFnZVNpemUpOm51bGwpfWZ1bmN0aW9uIF9nbENvbXByZXNzZWRUZXhJbWFnZTNEKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsZGVwdGgsYm9yZGVyLGltYWdlU2l6ZSxkYXRhKXtpZihHTGN0eC5jdXJyZW50UGl4ZWxVbnBhY2tCdWZmZXJCaW5kaW5nKXtHTGN0eFsiY29tcHJlc3NlZFRleEltYWdlM0QiXSh0YXJnZXQsbGV2ZWwsaW50ZXJuYWxGb3JtYXQsd2lkdGgsaGVpZ2h0LGRlcHRoLGJvcmRlcixpbWFnZVNpemUsZGF0YSl9ZWxzZXtHTGN0eFsiY29tcHJlc3NlZFRleEltYWdlM0QiXSh0YXJnZXQsbGV2ZWwsaW50ZXJuYWxGb3JtYXQsd2lkdGgsaGVpZ2h0LGRlcHRoLGJvcmRlcixIRUFQVTgsZGF0YSxpbWFnZVNpemUpfX1mdW5jdGlvbiBfZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCxmb3JtYXQsaW1hZ2VTaXplLGRhdGEpe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe2lmKEdMY3R4LmN1cnJlbnRQaXhlbFVucGFja0J1ZmZlckJpbmRpbmcpe0dMY3R4WyJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCJdKHRhcmdldCxsZXZlbCx4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0LGZvcm1hdCxpbWFnZVNpemUsZGF0YSl9ZWxzZXtHTGN0eFsiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiXSh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCxmb3JtYXQsSEVBUFU4LGRhdGEsaW1hZ2VTaXplKX1yZXR1cm59R0xjdHhbImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIl0odGFyZ2V0LGxldmVsLHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQsZm9ybWF0LGRhdGE/SEVBUFU4LnN1YmFycmF5KGRhdGEsZGF0YStpbWFnZVNpemUpOm51bGwpfWZ1bmN0aW9uIF9nbENvbXByZXNzZWRUZXhTdWJJbWFnZTNEKHRhcmdldCxsZXZlbCx4b2Zmc2V0LHlvZmZzZXQsem9mZnNldCx3aWR0aCxoZWlnaHQsZGVwdGgsZm9ybWF0LGltYWdlU2l6ZSxkYXRhKXtpZihHTGN0eC5jdXJyZW50UGl4ZWxVbnBhY2tCdWZmZXJCaW5kaW5nKXtHTGN0eFsiY29tcHJlc3NlZFRleFN1YkltYWdlM0QiXSh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHpvZmZzZXQsd2lkdGgsaGVpZ2h0LGRlcHRoLGZvcm1hdCxpbWFnZVNpemUsZGF0YSl9ZWxzZXtHTGN0eFsiY29tcHJlc3NlZFRleFN1YkltYWdlM0QiXSh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHpvZmZzZXQsd2lkdGgsaGVpZ2h0LGRlcHRoLGZvcm1hdCxIRUFQVTgsZGF0YSxpbWFnZVNpemUpfX1mdW5jdGlvbiBfZ2xDb3B5QnVmZmVyU3ViRGF0YSh4MCx4MSx4Mix4Myx4NCl7R0xjdHhbImNvcHlCdWZmZXJTdWJEYXRhIl0oeDAseDEseDIseDMseDQpfWZ1bmN0aW9uIF9nbENvcHlUZXhJbWFnZTJEKHgwLHgxLHgyLHgzLHg0LHg1LHg2LHg3KXtHTGN0eFsiY29weVRleEltYWdlMkQiXSh4MCx4MSx4Mix4Myx4NCx4NSx4Nix4Nyl9ZnVuY3Rpb24gX2dsQ29weVRleFN1YkltYWdlMkQoeDAseDEseDIseDMseDQseDUseDYseDcpe0dMY3R4WyJjb3B5VGV4U3ViSW1hZ2UyRCJdKHgwLHgxLHgyLHgzLHg0LHg1LHg2LHg3KX1mdW5jdGlvbiBfZ2xDcmVhdGVQcm9ncmFtKCl7dmFyIGlkPUdMLmdldE5ld0lkKEdMLnByb2dyYW1zKTt2YXIgcHJvZ3JhbT1HTGN0eC5jcmVhdGVQcm9ncmFtKCk7cHJvZ3JhbS5uYW1lPWlkO3Byb2dyYW0ubWF4VW5pZm9ybUxlbmd0aD1wcm9ncmFtLm1heEF0dHJpYnV0ZUxlbmd0aD1wcm9ncmFtLm1heFVuaWZvcm1CbG9ja05hbWVMZW5ndGg9MDtwcm9ncmFtLnVuaWZvcm1JZENvdW50ZXI9MTtHTC5wcm9ncmFtc1tpZF09cHJvZ3JhbTtyZXR1cm4gaWR9ZnVuY3Rpb24gX2dsQ3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpe3ZhciBpZD1HTC5nZXROZXdJZChHTC5zaGFkZXJzKTtHTC5zaGFkZXJzW2lkXT1HTGN0eC5jcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7R0wuc2hhZGVyc1tpZF0uc2hhZGVyVHlwZT1zaGFkZXJUeXBlJjE/InZzIjoiZnMiO3JldHVybiBpZH1mdW5jdGlvbiBfZ2xDdWxsRmFjZSh4MCl7R0xjdHhbImN1bGxGYWNlIl0oeDApfWZ1bmN0aW9uIF9nbERlbGV0ZUJ1ZmZlcnMobixidWZmZXJzKXtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgaWQ9SEVBUDMyW2J1ZmZlcnMraSo0Pj4yXTt2YXIgYnVmZmVyPUdMLmJ1ZmZlcnNbaWRdO2lmKCFidWZmZXIpY29udGludWU7R0xjdHguZGVsZXRlQnVmZmVyKGJ1ZmZlcik7YnVmZmVyLm5hbWU9MDtHTC5idWZmZXJzW2lkXT1udWxsO2lmKGlkPT1HTGN0eC5jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nKUdMY3R4LmN1cnJlbnRBcnJheUJ1ZmZlckJpbmRpbmc9MDtpZihpZD09R0xjdHguY3VycmVudEVsZW1lbnRBcnJheUJ1ZmZlckJpbmRpbmcpR0xjdHguY3VycmVudEVsZW1lbnRBcnJheUJ1ZmZlckJpbmRpbmc9MDtpZihpZD09R0xjdHguY3VycmVudFBpeGVsUGFja0J1ZmZlckJpbmRpbmcpR0xjdHguY3VycmVudFBpeGVsUGFja0J1ZmZlckJpbmRpbmc9MDtpZihpZD09R0xjdHguY3VycmVudFBpeGVsVW5wYWNrQnVmZmVyQmluZGluZylHTGN0eC5jdXJyZW50UGl4ZWxVbnBhY2tCdWZmZXJCaW5kaW5nPTB9fWZ1bmN0aW9uIF9nbERlbGV0ZUZyYW1lYnVmZmVycyhuLGZyYW1lYnVmZmVycyl7Zm9yKHZhciBpPTA7aTxuOysraSl7dmFyIGlkPUhFQVAzMltmcmFtZWJ1ZmZlcnMraSo0Pj4yXTt2YXIgZnJhbWVidWZmZXI9R0wuZnJhbWVidWZmZXJzW2lkXTtpZighZnJhbWVidWZmZXIpY29udGludWU7R0xjdHguZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpO2ZyYW1lYnVmZmVyLm5hbWU9MDtHTC5mcmFtZWJ1ZmZlcnNbaWRdPW51bGx9fWZ1bmN0aW9uIF9nbERlbGV0ZVByb2dyYW0oaWQpe2lmKCFpZClyZXR1cm47dmFyIHByb2dyYW09R0wucHJvZ3JhbXNbaWRdO2lmKCFwcm9ncmFtKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59R0xjdHguZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtwcm9ncmFtLm5hbWU9MDtHTC5wcm9ncmFtc1tpZF09bnVsbH1mdW5jdGlvbiBfZ2xEZWxldGVRdWVyaWVzKG4saWRzKXtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgaWQ9SEVBUDMyW2lkcytpKjQ+PjJdO3ZhciBxdWVyeT1HTC5xdWVyaWVzW2lkXTtpZighcXVlcnkpY29udGludWU7R0xjdHhbImRlbGV0ZVF1ZXJ5Il0ocXVlcnkpO0dMLnF1ZXJpZXNbaWRdPW51bGx9fWZ1bmN0aW9uIF9nbERlbGV0ZVJlbmRlcmJ1ZmZlcnMobixyZW5kZXJidWZmZXJzKXtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgaWQ9SEVBUDMyW3JlbmRlcmJ1ZmZlcnMraSo0Pj4yXTt2YXIgcmVuZGVyYnVmZmVyPUdMLnJlbmRlcmJ1ZmZlcnNbaWRdO2lmKCFyZW5kZXJidWZmZXIpY29udGludWU7R0xjdHguZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7cmVuZGVyYnVmZmVyLm5hbWU9MDtHTC5yZW5kZXJidWZmZXJzW2lkXT1udWxsfX1mdW5jdGlvbiBfZ2xEZWxldGVTYW1wbGVycyhuLHNhbXBsZXJzKXtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgaWQ9SEVBUDMyW3NhbXBsZXJzK2kqND4+Ml07dmFyIHNhbXBsZXI9R0wuc2FtcGxlcnNbaWRdO2lmKCFzYW1wbGVyKWNvbnRpbnVlO0dMY3R4WyJkZWxldGVTYW1wbGVyIl0oc2FtcGxlcik7c2FtcGxlci5uYW1lPTA7R0wuc2FtcGxlcnNbaWRdPW51bGx9fWZ1bmN0aW9uIF9nbERlbGV0ZVNoYWRlcihpZCl7aWYoIWlkKXJldHVybjt2YXIgc2hhZGVyPUdMLnNoYWRlcnNbaWRdO2lmKCFzaGFkZXIpe0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn1HTGN0eC5kZWxldGVTaGFkZXIoc2hhZGVyKTtHTC5zaGFkZXJzW2lkXT1udWxsfWZ1bmN0aW9uIF9nbERlbGV0ZVN5bmMoaWQpe2lmKCFpZClyZXR1cm47dmFyIHN5bmM9R0wuc3luY3NbaWRdO2lmKCFzeW5jKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59R0xjdHguZGVsZXRlU3luYyhzeW5jKTtzeW5jLm5hbWU9MDtHTC5zeW5jc1tpZF09bnVsbH1mdW5jdGlvbiBfZ2xEZWxldGVUZXh0dXJlcyhuLHRleHR1cmVzKXtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgaWQ9SEVBUDMyW3RleHR1cmVzK2kqND4+Ml07dmFyIHRleHR1cmU9R0wudGV4dHVyZXNbaWRdO2lmKCF0ZXh0dXJlKWNvbnRpbnVlO0dMY3R4LmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7dGV4dHVyZS5uYW1lPTA7R0wudGV4dHVyZXNbaWRdPW51bGx9fWZ1bmN0aW9uIF9nbERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcyhuLGlkcyl7Zm9yKHZhciBpPTA7aTxuO2krKyl7dmFyIGlkPUhFQVAzMltpZHMraSo0Pj4yXTt2YXIgdHJhbnNmb3JtRmVlZGJhY2s9R0wudHJhbnNmb3JtRmVlZGJhY2tzW2lkXTtpZighdHJhbnNmb3JtRmVlZGJhY2spY29udGludWU7R0xjdHhbImRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrIl0odHJhbnNmb3JtRmVlZGJhY2spO3RyYW5zZm9ybUZlZWRiYWNrLm5hbWU9MDtHTC50cmFuc2Zvcm1GZWVkYmFja3NbaWRdPW51bGx9fWZ1bmN0aW9uIF9nbERlbGV0ZVZlcnRleEFycmF5cyhuLHZhb3Mpe2Zvcih2YXIgaT0wO2k8bjtpKyspe3ZhciBpZD1IRUFQMzJbdmFvcytpKjQ+PjJdO0dMY3R4WyJkZWxldGVWZXJ0ZXhBcnJheSJdKEdMLnZhb3NbaWRdKTtHTC52YW9zW2lkXT1udWxsfX1mdW5jdGlvbiBfZ2xEZXB0aEZ1bmMoeDApe0dMY3R4WyJkZXB0aEZ1bmMiXSh4MCl9ZnVuY3Rpb24gX2dsRGVwdGhNYXNrKGZsYWcpe0dMY3R4LmRlcHRoTWFzayghIWZsYWcpfWZ1bmN0aW9uIF9nbERldGFjaFNoYWRlcihwcm9ncmFtLHNoYWRlcil7R0xjdHguZGV0YWNoU2hhZGVyKEdMLnByb2dyYW1zW3Byb2dyYW1dLEdMLnNoYWRlcnNbc2hhZGVyXSl9ZnVuY3Rpb24gX2dsRGlzYWJsZSh4MCl7R0xjdHhbImRpc2FibGUiXSh4MCl9ZnVuY3Rpb24gX2dsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KXt2YXIgY2I9R0wuY3VycmVudENvbnRleHQuY2xpZW50QnVmZmVyc1tpbmRleF07Y2IuZW5hYmxlZD1mYWxzZTtHTGN0eC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpfWZ1bmN0aW9uIF9nbERyYXdBcnJheXMobW9kZSxmaXJzdCxjb3VudCl7R0wucHJlRHJhd0hhbmRsZUNsaWVudFZlcnRleEF0dHJpYkJpbmRpbmdzKGZpcnN0K2NvdW50KTtHTGN0eC5kcmF3QXJyYXlzKG1vZGUsZmlyc3QsY291bnQpO0dMLnBvc3REcmF3SGFuZGxlQ2xpZW50VmVydGV4QXR0cmliQmluZGluZ3MoKX1mdW5jdGlvbiBfZ2xEcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsZmlyc3QsY291bnQscHJpbWNvdW50KXtHTGN0eFsiZHJhd0FycmF5c0luc3RhbmNlZCJdKG1vZGUsZmlyc3QsY291bnQscHJpbWNvdW50KX12YXIgdGVtcEZpeGVkTGVuZ3RoQXJyYXk9W107ZnVuY3Rpb24gX2dsRHJhd0J1ZmZlcnMobixidWZzKXt2YXIgYnVmQXJyYXk9dGVtcEZpeGVkTGVuZ3RoQXJyYXlbbl07Zm9yKHZhciBpPTA7aTxuO2krKyl7YnVmQXJyYXlbaV09SEVBUDMyW2J1ZnMraSo0Pj4yXX1HTGN0eFsiZHJhd0J1ZmZlcnMiXShidWZBcnJheSl9ZnVuY3Rpb24gX2dsRHJhd0VsZW1lbnRzKG1vZGUsY291bnQsdHlwZSxpbmRpY2VzKXt2YXIgYnVmO2lmKCFHTGN0eC5jdXJyZW50RWxlbWVudEFycmF5QnVmZmVyQmluZGluZyl7dmFyIHNpemU9R0wuY2FsY0J1Zkxlbmd0aCgxLHR5cGUsMCxjb3VudCk7YnVmPUdMLmdldFRlbXBJbmRleEJ1ZmZlcihzaXplKTtHTGN0eC5iaW5kQnVmZmVyKDM0OTYzLGJ1Zik7R0xjdHguYnVmZmVyU3ViRGF0YSgzNDk2MywwLEhFQVBVOC5zdWJhcnJheShpbmRpY2VzLGluZGljZXMrc2l6ZSkpO2luZGljZXM9MH1HTC5wcmVEcmF3SGFuZGxlQ2xpZW50VmVydGV4QXR0cmliQmluZGluZ3MoY291bnQpO0dMY3R4LmRyYXdFbGVtZW50cyhtb2RlLGNvdW50LHR5cGUsaW5kaWNlcyk7R0wucG9zdERyYXdIYW5kbGVDbGllbnRWZXJ0ZXhBdHRyaWJCaW5kaW5ncyhjb3VudCk7aWYoIUdMY3R4LmN1cnJlbnRFbGVtZW50QXJyYXlCdWZmZXJCaW5kaW5nKXtHTGN0eC5iaW5kQnVmZmVyKDM0OTYzLG51bGwpfX1mdW5jdGlvbiBfZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSxjb3VudCx0eXBlLGluZGljZXMscHJpbWNvdW50KXtHTGN0eFsiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIl0obW9kZSxjb3VudCx0eXBlLGluZGljZXMscHJpbWNvdW50KX1mdW5jdGlvbiBfZ2xFbmFibGUoeDApe0dMY3R4WyJlbmFibGUiXSh4MCl9ZnVuY3Rpb24gX2dsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpe3ZhciBjYj1HTC5jdXJyZW50Q29udGV4dC5jbGllbnRCdWZmZXJzW2luZGV4XTtjYi5lbmFibGVkPXRydWU7R0xjdHguZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpfWZ1bmN0aW9uIF9nbEVuZFF1ZXJ5KHgwKXtHTGN0eFsiZW5kUXVlcnkiXSh4MCl9ZnVuY3Rpb24gX2dsRW5kVHJhbnNmb3JtRmVlZGJhY2soKXtHTGN0eFsiZW5kVHJhbnNmb3JtRmVlZGJhY2siXSgpfWZ1bmN0aW9uIF9nbEZlbmNlU3luYyhjb25kaXRpb24sZmxhZ3Mpe3ZhciBzeW5jPUdMY3R4LmZlbmNlU3luYyhjb25kaXRpb24sZmxhZ3MpO2lmKHN5bmMpe3ZhciBpZD1HTC5nZXROZXdJZChHTC5zeW5jcyk7c3luYy5uYW1lPWlkO0dMLnN5bmNzW2lkXT1zeW5jO3JldHVybiBpZH1lbHNle3JldHVybiAwfX1mdW5jdGlvbiBfZ2xGaW5pc2goKXtHTGN0eFsiZmluaXNoIl0oKX1mdW5jdGlvbiBfZ2xGbHVzaCgpe0dMY3R4WyJmbHVzaCJdKCl9ZnVuY3Rpb24gZW1zY3JpcHRlbldlYkdMR2V0QnVmZmVyQmluZGluZyh0YXJnZXQpe3N3aXRjaCh0YXJnZXQpe2Nhc2UgMzQ5NjI6dGFyZ2V0PTM0OTY0O2JyZWFrO2Nhc2UgMzQ5NjM6dGFyZ2V0PTM0OTY1O2JyZWFrO2Nhc2UgMzUwNTE6dGFyZ2V0PTM1MDUzO2JyZWFrO2Nhc2UgMzUwNTI6dGFyZ2V0PTM1MDU1O2JyZWFrO2Nhc2UgMzU5ODI6dGFyZ2V0PTM1OTgzO2JyZWFrO2Nhc2UgMzY2NjI6dGFyZ2V0PTM2NjYyO2JyZWFrO2Nhc2UgMzY2NjM6dGFyZ2V0PTM2NjYzO2JyZWFrO2Nhc2UgMzUzNDU6dGFyZ2V0PTM1MzY4O2JyZWFrfXZhciBidWZmZXI9R0xjdHguZ2V0UGFyYW1ldGVyKHRhcmdldCk7aWYoYnVmZmVyKXJldHVybiBidWZmZXIubmFtZXwwO2Vsc2UgcmV0dXJuIDB9ZnVuY3Rpb24gZW1zY3JpcHRlbldlYkdMVmFsaWRhdGVNYXBCdWZmZXJUYXJnZXQodGFyZ2V0KXtzd2l0Y2godGFyZ2V0KXtjYXNlIDM0OTYyOmNhc2UgMzQ5NjM6Y2FzZSAzNjY2MjpjYXNlIDM2NjYzOmNhc2UgMzUwNTE6Y2FzZSAzNTA1MjpjYXNlIDM1ODgyOmNhc2UgMzU5ODI6Y2FzZSAzNTM0NTpyZXR1cm4gdHJ1ZTtkZWZhdWx0OnJldHVybiBmYWxzZX19ZnVuY3Rpb24gX2dsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSh0YXJnZXQsb2Zmc2V0LGxlbmd0aCl7aWYoIWVtc2NyaXB0ZW5XZWJHTFZhbGlkYXRlTWFwQnVmZmVyVGFyZ2V0KHRhcmdldCkpe0dMLnJlY29yZEVycm9yKDEyODApO2VycigiR0xfSU5WQUxJRF9FTlVNIGluIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSIpO3JldHVybn12YXIgbWFwcGluZz1HTC5tYXBwZWRCdWZmZXJzW2Vtc2NyaXB0ZW5XZWJHTEdldEJ1ZmZlckJpbmRpbmcodGFyZ2V0KV07aWYoIW1hcHBpbmcpe0dMLnJlY29yZEVycm9yKDEyODIpO2VycigiYnVmZmVyIHdhcyBuZXZlciBtYXBwZWQgaW4gZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlIik7cmV0dXJufWlmKCEobWFwcGluZy5hY2Nlc3MmMTYpKXtHTC5yZWNvcmRFcnJvcigxMjgyKTtlcnIoImJ1ZmZlciB3YXMgbm90IG1hcHBlZCB3aXRoIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVQgaW4gZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlIik7cmV0dXJufWlmKG9mZnNldDwwfHxsZW5ndGg8MHx8b2Zmc2V0K2xlbmd0aD5tYXBwaW5nLmxlbmd0aCl7R0wucmVjb3JkRXJyb3IoMTI4MSk7ZXJyKCJpbnZhbGlkIHJhbmdlIGluIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSIpO3JldHVybn1HTGN0eC5idWZmZXJTdWJEYXRhKHRhcmdldCxtYXBwaW5nLm9mZnNldCxIRUFQVTguc3ViYXJyYXkobWFwcGluZy5tZW0rb2Zmc2V0LG1hcHBpbmcubWVtK29mZnNldCtsZW5ndGgpKX1mdW5jdGlvbiBfZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsYXR0YWNobWVudCxyZW5kZXJidWZmZXJ0YXJnZXQscmVuZGVyYnVmZmVyKXtHTGN0eC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsYXR0YWNobWVudCxyZW5kZXJidWZmZXJ0YXJnZXQsR0wucmVuZGVyYnVmZmVyc1tyZW5kZXJidWZmZXJdKX1mdW5jdGlvbiBfZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsYXR0YWNobWVudCx0ZXh0YXJnZXQsdGV4dHVyZSxsZXZlbCl7R0xjdHguZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LGF0dGFjaG1lbnQsdGV4dGFyZ2V0LEdMLnRleHR1cmVzW3RleHR1cmVdLGxldmVsKX1mdW5jdGlvbiBfZ2xGcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJnZXQsYXR0YWNobWVudCx0ZXh0dXJlLGxldmVsLGxheWVyKXtHTGN0eC5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcih0YXJnZXQsYXR0YWNobWVudCxHTC50ZXh0dXJlc1t0ZXh0dXJlXSxsZXZlbCxsYXllcil9ZnVuY3Rpb24gX2dsRnJvbnRGYWNlKHgwKXtHTGN0eFsiZnJvbnRGYWNlIl0oeDApfWZ1bmN0aW9uIF9fZ2xHZW5PYmplY3QobixidWZmZXJzLGNyZWF0ZUZ1bmN0aW9uLG9iamVjdFRhYmxlKXtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgYnVmZmVyPUdMY3R4W2NyZWF0ZUZ1bmN0aW9uXSgpO3ZhciBpZD1idWZmZXImJkdMLmdldE5ld0lkKG9iamVjdFRhYmxlKTtpZihidWZmZXIpe2J1ZmZlci5uYW1lPWlkO29iamVjdFRhYmxlW2lkXT1idWZmZXJ9ZWxzZXtHTC5yZWNvcmRFcnJvcigxMjgyKX1IRUFQMzJbYnVmZmVycytpKjQ+PjJdPWlkfX1mdW5jdGlvbiBfZ2xHZW5CdWZmZXJzKG4sYnVmZmVycyl7X19nbEdlbk9iamVjdChuLGJ1ZmZlcnMsImNyZWF0ZUJ1ZmZlciIsR0wuYnVmZmVycyl9ZnVuY3Rpb24gX2dsR2VuRnJhbWVidWZmZXJzKG4saWRzKXtfX2dsR2VuT2JqZWN0KG4saWRzLCJjcmVhdGVGcmFtZWJ1ZmZlciIsR0wuZnJhbWVidWZmZXJzKX1mdW5jdGlvbiBfZ2xHZW5RdWVyaWVzKG4saWRzKXtfX2dsR2VuT2JqZWN0KG4saWRzLCJjcmVhdGVRdWVyeSIsR0wucXVlcmllcyl9ZnVuY3Rpb24gX2dsR2VuUmVuZGVyYnVmZmVycyhuLHJlbmRlcmJ1ZmZlcnMpe19fZ2xHZW5PYmplY3QobixyZW5kZXJidWZmZXJzLCJjcmVhdGVSZW5kZXJidWZmZXIiLEdMLnJlbmRlcmJ1ZmZlcnMpfWZ1bmN0aW9uIF9nbEdlblNhbXBsZXJzKG4sc2FtcGxlcnMpe19fZ2xHZW5PYmplY3QobixzYW1wbGVycywiY3JlYXRlU2FtcGxlciIsR0wuc2FtcGxlcnMpfWZ1bmN0aW9uIF9nbEdlblRleHR1cmVzKG4sdGV4dHVyZXMpe19fZ2xHZW5PYmplY3Qobix0ZXh0dXJlcywiY3JlYXRlVGV4dHVyZSIsR0wudGV4dHVyZXMpfWZ1bmN0aW9uIF9nbEdlblRyYW5zZm9ybUZlZWRiYWNrcyhuLGlkcyl7X19nbEdlbk9iamVjdChuLGlkcywiY3JlYXRlVHJhbnNmb3JtRmVlZGJhY2siLEdMLnRyYW5zZm9ybUZlZWRiYWNrcyl9ZnVuY3Rpb24gX2dsR2VuVmVydGV4QXJyYXlzKG4sYXJyYXlzKXtfX2dsR2VuT2JqZWN0KG4sYXJyYXlzLCJjcmVhdGVWZXJ0ZXhBcnJheSIsR0wudmFvcyl9ZnVuY3Rpb24gX2dsR2VuZXJhdGVNaXBtYXAoeDApe0dMY3R4WyJnZW5lcmF0ZU1pcG1hcCJdKHgwKX1mdW5jdGlvbiBfX2dsR2V0QWN0aXZlQXR0cmliT3JVbmlmb3JtKGZ1bmNOYW1lLHByb2dyYW0saW5kZXgsYnVmU2l6ZSxsZW5ndGgsc2l6ZSx0eXBlLG5hbWUpe3Byb2dyYW09R0wucHJvZ3JhbXNbcHJvZ3JhbV07dmFyIGluZm89R0xjdHhbZnVuY05hbWVdKHByb2dyYW0saW5kZXgpO2lmKGluZm8pe3ZhciBudW1CeXRlc1dyaXR0ZW5FeGNsTnVsbD1uYW1lJiZzdHJpbmdUb1VURjgoaW5mby5uYW1lLG5hbWUsYnVmU2l6ZSk7aWYobGVuZ3RoKUhFQVAzMltsZW5ndGg+PjJdPW51bUJ5dGVzV3JpdHRlbkV4Y2xOdWxsO2lmKHNpemUpSEVBUDMyW3NpemU+PjJdPWluZm8uc2l6ZTtpZih0eXBlKUhFQVAzMlt0eXBlPj4yXT1pbmZvLnR5cGV9fWZ1bmN0aW9uIF9nbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLGluZGV4LGJ1ZlNpemUsbGVuZ3RoLHNpemUsdHlwZSxuYW1lKXtfX2dsR2V0QWN0aXZlQXR0cmliT3JVbmlmb3JtKCJnZXRBY3RpdmVBdHRyaWIiLHByb2dyYW0saW5kZXgsYnVmU2l6ZSxsZW5ndGgsc2l6ZSx0eXBlLG5hbWUpfWZ1bmN0aW9uIF9nbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSxpbmRleCxidWZTaXplLGxlbmd0aCxzaXplLHR5cGUsbmFtZSl7X19nbEdldEFjdGl2ZUF0dHJpYk9yVW5pZm9ybSgiZ2V0QWN0aXZlVW5pZm9ybSIscHJvZ3JhbSxpbmRleCxidWZTaXplLGxlbmd0aCxzaXplLHR5cGUsbmFtZSl9ZnVuY3Rpb24gX2dsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShwcm9ncmFtLHVuaWZvcm1CbG9ja0luZGV4LGJ1ZlNpemUsbGVuZ3RoLHVuaWZvcm1CbG9ja05hbWUpe3Byb2dyYW09R0wucHJvZ3JhbXNbcHJvZ3JhbV07dmFyIHJlc3VsdD1HTGN0eFsiZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSJdKHByb2dyYW0sdW5pZm9ybUJsb2NrSW5kZXgpO2lmKCFyZXN1bHQpcmV0dXJuO2lmKHVuaWZvcm1CbG9ja05hbWUmJmJ1ZlNpemU+MCl7dmFyIG51bUJ5dGVzV3JpdHRlbkV4Y2xOdWxsPXN0cmluZ1RvVVRGOChyZXN1bHQsdW5pZm9ybUJsb2NrTmFtZSxidWZTaXplKTtpZihsZW5ndGgpSEVBUDMyW2xlbmd0aD4+Ml09bnVtQnl0ZXNXcml0dGVuRXhjbE51bGx9ZWxzZXtpZihsZW5ndGgpSEVBUDMyW2xlbmd0aD4+Ml09MH19ZnVuY3Rpb24gX2dsR2V0QWN0aXZlVW5pZm9ybUJsb2NraXYocHJvZ3JhbSx1bmlmb3JtQmxvY2tJbmRleCxwbmFtZSxwYXJhbXMpe2lmKCFwYXJhbXMpe0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn1wcm9ncmFtPUdMLnByb2dyYW1zW3Byb2dyYW1dO2lmKHBuYW1lPT0zNTM5Myl7dmFyIG5hbWU9R0xjdHhbImdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUiXShwcm9ncmFtLHVuaWZvcm1CbG9ja0luZGV4KTtIRUFQMzJbcGFyYW1zPj4yXT1uYW1lLmxlbmd0aCsxO3JldHVybn12YXIgcmVzdWx0PUdMY3R4WyJnZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIiXShwcm9ncmFtLHVuaWZvcm1CbG9ja0luZGV4LHBuYW1lKTtpZihyZXN1bHQ9PT1udWxsKXJldHVybjtpZihwbmFtZT09MzUzOTUpe2Zvcih2YXIgaT0wO2k8cmVzdWx0Lmxlbmd0aDtpKyspe0hFQVAzMltwYXJhbXMraSo0Pj4yXT1yZXN1bHRbaV19fWVsc2V7SEVBUDMyW3BhcmFtcz4+Ml09cmVzdWx0fX1mdW5jdGlvbiBfZ2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sdW5pZm9ybUNvdW50LHVuaWZvcm1JbmRpY2VzLHBuYW1lLHBhcmFtcyl7aWYoIXBhcmFtcyl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufWlmKHVuaWZvcm1Db3VudD4wJiZ1bmlmb3JtSW5kaWNlcz09MCl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufXByb2dyYW09R0wucHJvZ3JhbXNbcHJvZ3JhbV07dmFyIGlkcz1bXTtmb3IodmFyIGk9MDtpPHVuaWZvcm1Db3VudDtpKyspe2lkcy5wdXNoKEhFQVAzMlt1bmlmb3JtSW5kaWNlcytpKjQ+PjJdKX12YXIgcmVzdWx0PUdMY3R4WyJnZXRBY3RpdmVVbmlmb3JtcyJdKHByb2dyYW0saWRzLHBuYW1lKTtpZighcmVzdWx0KXJldHVybjt2YXIgbGVuPXJlc3VsdC5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtIRUFQMzJbcGFyYW1zK2kqND4+Ml09cmVzdWx0W2ldfX1mdW5jdGlvbiBfZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLG5hbWUpe3JldHVybiBHTGN0eC5nZXRBdHRyaWJMb2NhdGlvbihHTC5wcm9ncmFtc1twcm9ncmFtXSxVVEY4VG9TdHJpbmcobmFtZSkpfWZ1bmN0aW9uIF9nbEdldEJ1ZmZlclN1YkRhdGEodGFyZ2V0LG9mZnNldCxzaXplLGRhdGEpe2lmKCFkYXRhKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59R0xjdHhbImdldEJ1ZmZlclN1YkRhdGEiXSh0YXJnZXQsb2Zmc2V0LEhFQVBVOCxkYXRhLHNpemUpfWZ1bmN0aW9uIF9nbEdldEVycm9yKCl7dmFyIGVycm9yPUdMY3R4LmdldEVycm9yKCl8fEdMLmxhc3RFcnJvcjtHTC5sYXN0RXJyb3I9MDtyZXR1cm4gZXJyb3J9ZnVuY3Rpb24gX2dsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LGF0dGFjaG1lbnQscG5hbWUscGFyYW1zKXt2YXIgcmVzdWx0PUdMY3R4LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsYXR0YWNobWVudCxwbmFtZSk7aWYocmVzdWx0IGluc3RhbmNlb2YgV2ViR0xSZW5kZXJidWZmZXJ8fHJlc3VsdCBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZSl7cmVzdWx0PXJlc3VsdC5uYW1lfDB9SEVBUDMyW3BhcmFtcz4+Ml09cmVzdWx0fWZ1bmN0aW9uIHdyaXRlSTUzVG9JNjQocHRyLG51bSl7SEVBUFUzMltwdHI+PjJdPW51bTtIRUFQVTMyW3B0cis0Pj4yXT0obnVtLUhFQVBVMzJbcHRyPj4yXSkvNDI5NDk2NzI5Nn1mdW5jdGlvbiBlbXNjcmlwdGVuV2ViR0xHZXRJbmRleGVkKHRhcmdldCxpbmRleCxkYXRhLHR5cGUpe2lmKCFkYXRhKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59dmFyIHJlc3VsdD1HTGN0eFsiZ2V0SW5kZXhlZFBhcmFtZXRlciJdKHRhcmdldCxpbmRleCk7dmFyIHJldDtzd2l0Y2godHlwZW9mIHJlc3VsdCl7Y2FzZSJib29sZWFuIjpyZXQ9cmVzdWx0PzE6MDticmVhaztjYXNlIm51bWJlciI6cmV0PXJlc3VsdDticmVhaztjYXNlIm9iamVjdCI6aWYocmVzdWx0PT09bnVsbCl7c3dpdGNoKHRhcmdldCl7Y2FzZSAzNTk4MzpjYXNlIDM1MzY4OnJldD0wO2JyZWFrO2RlZmF1bHQ6e0dMLnJlY29yZEVycm9yKDEyODApO3JldHVybn19fWVsc2UgaWYocmVzdWx0IGluc3RhbmNlb2YgV2ViR0xCdWZmZXIpe3JldD1yZXN1bHQubmFtZXwwfWVsc2V7R0wucmVjb3JkRXJyb3IoMTI4MCk7cmV0dXJufWJyZWFrO2RlZmF1bHQ6R0wucmVjb3JkRXJyb3IoMTI4MCk7cmV0dXJufXN3aXRjaCh0eXBlKXtjYXNlIDE6d3JpdGVJNTNUb0k2NChkYXRhLHJldCk7YnJlYWs7Y2FzZSAwOkhFQVAzMltkYXRhPj4yXT1yZXQ7YnJlYWs7Y2FzZSAyOkhFQVBGMzJbZGF0YT4+Ml09cmV0O2JyZWFrO2Nhc2UgNDpIRUFQOFtkYXRhPj4wXT1yZXQ/MTowO2JyZWFrO2RlZmF1bHQ6dGhyb3ciaW50ZXJuYWwgZW1zY3JpcHRlbldlYkdMR2V0SW5kZXhlZCgpIGVycm9yLCBiYWQgdHlwZTogIit0eXBlfX1mdW5jdGlvbiBfZ2xHZXRJbnRlZ2VyaV92KHRhcmdldCxpbmRleCxkYXRhKXtlbXNjcmlwdGVuV2ViR0xHZXRJbmRleGVkKHRhcmdldCxpbmRleCxkYXRhLDApfWZ1bmN0aW9uIGVtc2NyaXB0ZW5XZWJHTEdldChuYW1lXyxwLHR5cGUpe2lmKCFwKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59dmFyIHJldD11bmRlZmluZWQ7c3dpdGNoKG5hbWVfKXtjYXNlIDM2MzQ2OnJldD0xO2JyZWFrO2Nhc2UgMzYzNDQ6aWYodHlwZSE9MCYmdHlwZSE9MSl7R0wucmVjb3JkRXJyb3IoMTI4MCl9cmV0dXJuO2Nhc2UgMzQ4MTQ6Y2FzZSAzNjM0NTpyZXQ9MDticmVhaztjYXNlIDM0NDY2OnZhciBmb3JtYXRzPUdMY3R4LmdldFBhcmFtZXRlcigzNDQ2Nyk7cmV0PWZvcm1hdHM/Zm9ybWF0cy5sZW5ndGg6MDticmVhaztjYXNlIDMzMzkwOnJldD0xMDQ4NTc2O2JyZWFrO2Nhc2UgMzMzMDk6aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbjwyKXtHTC5yZWNvcmRFcnJvcigxMjgyKTtyZXR1cm59dmFyIGV4dHM9R0xjdHguZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpfHxbXTtyZXQ9MipleHRzLmxlbmd0aDticmVhaztjYXNlIDMzMzA3OmNhc2UgMzMzMDg6aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbjwyKXtHTC5yZWNvcmRFcnJvcigxMjgwKTtyZXR1cm59cmV0PW5hbWVfPT0zMzMwNz8zOjA7YnJlYWt9aWYocmV0PT09dW5kZWZpbmVkKXt2YXIgcmVzdWx0PUdMY3R4LmdldFBhcmFtZXRlcihuYW1lXyk7c3dpdGNoKHR5cGVvZiByZXN1bHQpe2Nhc2UibnVtYmVyIjpyZXQ9cmVzdWx0O2JyZWFrO2Nhc2UiYm9vbGVhbiI6cmV0PXJlc3VsdD8xOjA7YnJlYWs7Y2FzZSJzdHJpbmciOkdMLnJlY29yZEVycm9yKDEyODApO3JldHVybjtjYXNlIm9iamVjdCI6aWYocmVzdWx0PT09bnVsbCl7c3dpdGNoKG5hbWVfKXtjYXNlIDM0OTY0OmNhc2UgMzU3MjU6Y2FzZSAzNDk2NTpjYXNlIDM2MDA2OmNhc2UgMzYwMDc6Y2FzZSAzMjg3MzpjYXNlIDM0MjI5OmNhc2UgMzY2NjI6Y2FzZSAzNjY2MzpjYXNlIDM1MDUzOmNhc2UgMzUwNTU6Y2FzZSAzNjAxMDpjYXNlIDM1MDk3OmNhc2UgMzU4Njk6Y2FzZSAzMjg3NDpjYXNlIDM2Mzg5OmNhc2UgMzU5ODM6Y2FzZSAzNTM2ODpjYXNlIDM0MDY4OntyZXQ9MDticmVha31kZWZhdWx0OntHTC5yZWNvcmRFcnJvcigxMjgwKTtyZXR1cm59fX1lbHNlIGlmKHJlc3VsdCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8cmVzdWx0IGluc3RhbmNlb2YgVWludDMyQXJyYXl8fHJlc3VsdCBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KXtmb3IodmFyIGk9MDtpPHJlc3VsdC5sZW5ndGg7KytpKXtzd2l0Y2godHlwZSl7Y2FzZSAwOkhFQVAzMltwK2kqND4+Ml09cmVzdWx0W2ldO2JyZWFrO2Nhc2UgMjpIRUFQRjMyW3AraSo0Pj4yXT1yZXN1bHRbaV07YnJlYWs7Y2FzZSA0OkhFQVA4W3AraT4+MF09cmVzdWx0W2ldPzE6MDticmVha319cmV0dXJufWVsc2V7dHJ5e3JldD1yZXN1bHQubmFtZXwwfWNhdGNoKGUpe0dMLnJlY29yZEVycm9yKDEyODApO2VycigiR0xfSU5WQUxJRF9FTlVNIGluIGdsR2V0Iit0eXBlKyJ2OiBVbmtub3duIG9iamVjdCByZXR1cm5lZCBmcm9tIFdlYkdMIGdldFBhcmFtZXRlcigiK25hbWVfKyIpISAoZXJyb3I6ICIrZSsiKSIpO3JldHVybn19YnJlYWs7ZGVmYXVsdDpHTC5yZWNvcmRFcnJvcigxMjgwKTtlcnIoIkdMX0lOVkFMSURfRU5VTSBpbiBnbEdldCIrdHlwZSsidjogTmF0aXZlIGNvZGUgY2FsbGluZyBnbEdldCIrdHlwZSsidigiK25hbWVfKyIpIGFuZCBpdCByZXR1cm5zICIrcmVzdWx0KyIgb2YgdHlwZSAiK3R5cGVvZiByZXN1bHQrIiEiKTtyZXR1cm59fXN3aXRjaCh0eXBlKXtjYXNlIDE6d3JpdGVJNTNUb0k2NChwLHJldCk7YnJlYWs7Y2FzZSAwOkhFQVAzMltwPj4yXT1yZXQ7YnJlYWs7Y2FzZSAyOkhFQVBGMzJbcD4+Ml09cmV0O2JyZWFrO2Nhc2UgNDpIRUFQOFtwPj4wXT1yZXQ/MTowO2JyZWFrfX1mdW5jdGlvbiBfZ2xHZXRJbnRlZ2VydihuYW1lXyxwKXtlbXNjcmlwdGVuV2ViR0xHZXQobmFtZV8scCwwKX1mdW5jdGlvbiBfZ2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCxpbnRlcm5hbGZvcm1hdCxwbmFtZSxidWZTaXplLHBhcmFtcyl7aWYoYnVmU2l6ZTwwKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59aWYoIXBhcmFtcyl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufXZhciByZXQ9R0xjdHhbImdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyIl0odGFyZ2V0LGludGVybmFsZm9ybWF0LHBuYW1lKTtpZihyZXQ9PT1udWxsKXJldHVybjtmb3IodmFyIGk9MDtpPHJldC5sZW5ndGgmJmk8YnVmU2l6ZTsrK2kpe0hFQVAzMltwYXJhbXMraSo0Pj4yXT1yZXRbaV19fWZ1bmN0aW9uIF9nbEdldFByb2dyYW1CaW5hcnkocHJvZ3JhbSxidWZTaXplLGxlbmd0aCxiaW5hcnlGb3JtYXQsYmluYXJ5KXtHTC5yZWNvcmRFcnJvcigxMjgyKX1mdW5jdGlvbiBfZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLG1heExlbmd0aCxsZW5ndGgsaW5mb0xvZyl7dmFyIGxvZz1HTGN0eC5nZXRQcm9ncmFtSW5mb0xvZyhHTC5wcm9ncmFtc1twcm9ncmFtXSk7aWYobG9nPT09bnVsbClsb2c9Iih1bmtub3duIGVycm9yKSI7dmFyIG51bUJ5dGVzV3JpdHRlbkV4Y2xOdWxsPW1heExlbmd0aD4wJiZpbmZvTG9nP3N0cmluZ1RvVVRGOChsb2csaW5mb0xvZyxtYXhMZW5ndGgpOjA7aWYobGVuZ3RoKUhFQVAzMltsZW5ndGg+PjJdPW51bUJ5dGVzV3JpdHRlbkV4Y2xOdWxsfWZ1bmN0aW9uIF9nbEdldFByb2dyYW1pdihwcm9ncmFtLHBuYW1lLHApe2lmKCFwKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59aWYocHJvZ3JhbT49R0wuY291bnRlcil7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufXByb2dyYW09R0wucHJvZ3JhbXNbcHJvZ3JhbV07aWYocG5hbWU9PTM1NzE2KXt2YXIgbG9nPUdMY3R4LmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO2lmKGxvZz09PW51bGwpbG9nPSIodW5rbm93biBlcnJvcikiO0hFQVAzMltwPj4yXT1sb2cubGVuZ3RoKzF9ZWxzZSBpZihwbmFtZT09MzU3MTkpe2lmKCFwcm9ncmFtLm1heFVuaWZvcm1MZW5ndGgpe2Zvcih2YXIgaT0wO2k8R0xjdHguZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLDM1NzE4KTsrK2kpe3Byb2dyYW0ubWF4VW5pZm9ybUxlbmd0aD1NYXRoLm1heChwcm9ncmFtLm1heFVuaWZvcm1MZW5ndGgsR0xjdHguZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLGkpLm5hbWUubGVuZ3RoKzEpfX1IRUFQMzJbcD4+Ml09cHJvZ3JhbS5tYXhVbmlmb3JtTGVuZ3RofWVsc2UgaWYocG5hbWU9PTM1NzIyKXtpZighcHJvZ3JhbS5tYXhBdHRyaWJ1dGVMZW5ndGgpe2Zvcih2YXIgaT0wO2k8R0xjdHguZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLDM1NzIxKTsrK2kpe3Byb2dyYW0ubWF4QXR0cmlidXRlTGVuZ3RoPU1hdGgubWF4KHByb2dyYW0ubWF4QXR0cmlidXRlTGVuZ3RoLEdMY3R4LmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLGkpLm5hbWUubGVuZ3RoKzEpfX1IRUFQMzJbcD4+Ml09cHJvZ3JhbS5tYXhBdHRyaWJ1dGVMZW5ndGh9ZWxzZSBpZihwbmFtZT09MzUzODEpe2lmKCFwcm9ncmFtLm1heFVuaWZvcm1CbG9ja05hbWVMZW5ndGgpe2Zvcih2YXIgaT0wO2k8R0xjdHguZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLDM1MzgyKTsrK2kpe3Byb2dyYW0ubWF4VW5pZm9ybUJsb2NrTmFtZUxlbmd0aD1NYXRoLm1heChwcm9ncmFtLm1heFVuaWZvcm1CbG9ja05hbWVMZW5ndGgsR0xjdHguZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShwcm9ncmFtLGkpLmxlbmd0aCsxKX19SEVBUDMyW3A+PjJdPXByb2dyYW0ubWF4VW5pZm9ybUJsb2NrTmFtZUxlbmd0aH1lbHNle0hFQVAzMltwPj4yXT1HTGN0eC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0scG5hbWUpfX1mdW5jdGlvbiBfZ2xHZXRRdWVyeU9iamVjdHVpdihpZCxwbmFtZSxwYXJhbXMpe2lmKCFwYXJhbXMpe0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn12YXIgcXVlcnk9R0wucXVlcmllc1tpZF07dmFyIHBhcmFtPUdMY3R4WyJnZXRRdWVyeVBhcmFtZXRlciJdKHF1ZXJ5LHBuYW1lKTt2YXIgcmV0O2lmKHR5cGVvZiBwYXJhbT09ImJvb2xlYW4iKXtyZXQ9cGFyYW0/MTowfWVsc2V7cmV0PXBhcmFtfUhFQVAzMltwYXJhbXM+PjJdPXJldH1mdW5jdGlvbiBfZ2xHZXRRdWVyeWl2KHRhcmdldCxwbmFtZSxwYXJhbXMpe2lmKCFwYXJhbXMpe0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn1IRUFQMzJbcGFyYW1zPj4yXT1HTGN0eFsiZ2V0UXVlcnkiXSh0YXJnZXQscG5hbWUpfWZ1bmN0aW9uIF9nbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCxwbmFtZSxwYXJhbXMpe2lmKCFwYXJhbXMpe0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn1IRUFQMzJbcGFyYW1zPj4yXT1HTGN0eC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodGFyZ2V0LHBuYW1lKX1mdW5jdGlvbiBfZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlcixtYXhMZW5ndGgsbGVuZ3RoLGluZm9Mb2cpe3ZhciBsb2c9R0xjdHguZ2V0U2hhZGVySW5mb0xvZyhHTC5zaGFkZXJzW3NoYWRlcl0pO2lmKGxvZz09PW51bGwpbG9nPSIodW5rbm93biBlcnJvcikiO3ZhciBudW1CeXRlc1dyaXR0ZW5FeGNsTnVsbD1tYXhMZW5ndGg+MCYmaW5mb0xvZz9zdHJpbmdUb1VURjgobG9nLGluZm9Mb2csbWF4TGVuZ3RoKTowO2lmKGxlbmd0aClIRUFQMzJbbGVuZ3RoPj4yXT1udW1CeXRlc1dyaXR0ZW5FeGNsTnVsbH1mdW5jdGlvbiBfZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSxwcmVjaXNpb25UeXBlLHJhbmdlLHByZWNpc2lvbil7dmFyIHJlc3VsdD1HTGN0eC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSxwcmVjaXNpb25UeXBlKTtIRUFQMzJbcmFuZ2U+PjJdPXJlc3VsdC5yYW5nZU1pbjtIRUFQMzJbcmFuZ2UrND4+Ml09cmVzdWx0LnJhbmdlTWF4O0hFQVAzMltwcmVjaXNpb24+PjJdPXJlc3VsdC5wcmVjaXNpb259ZnVuY3Rpb24gX2dsR2V0U2hhZGVyU291cmNlKHNoYWRlcixidWZTaXplLGxlbmd0aCxzb3VyY2Upe3ZhciByZXN1bHQ9R0xjdHguZ2V0U2hhZGVyU291cmNlKEdMLnNoYWRlcnNbc2hhZGVyXSk7aWYoIXJlc3VsdClyZXR1cm47dmFyIG51bUJ5dGVzV3JpdHRlbkV4Y2xOdWxsPWJ1ZlNpemU+MCYmc291cmNlP3N0cmluZ1RvVVRGOChyZXN1bHQsc291cmNlLGJ1ZlNpemUpOjA7aWYobGVuZ3RoKUhFQVAzMltsZW5ndGg+PjJdPW51bUJ5dGVzV3JpdHRlbkV4Y2xOdWxsfWZ1bmN0aW9uIF9nbEdldFNoYWRlcml2KHNoYWRlcixwbmFtZSxwKXtpZighcCl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufWlmKHBuYW1lPT0zNTcxNil7dmFyIGxvZz1HTGN0eC5nZXRTaGFkZXJJbmZvTG9nKEdMLnNoYWRlcnNbc2hhZGVyXSk7aWYobG9nPT09bnVsbClsb2c9Iih1bmtub3duIGVycm9yKSI7dmFyIGxvZ0xlbmd0aD1sb2c/bG9nLmxlbmd0aCsxOjA7SEVBUDMyW3A+PjJdPWxvZ0xlbmd0aH1lbHNlIGlmKHBuYW1lPT0zNTcyMCl7dmFyIHNvdXJjZT1HTGN0eC5nZXRTaGFkZXJTb3VyY2UoR0wuc2hhZGVyc1tzaGFkZXJdKTt2YXIgc291cmNlTGVuZ3RoPXNvdXJjZT9zb3VyY2UubGVuZ3RoKzE6MDtIRUFQMzJbcD4+Ml09c291cmNlTGVuZ3RofWVsc2V7SEVBUDMyW3A+PjJdPUdMY3R4LmdldFNoYWRlclBhcmFtZXRlcihHTC5zaGFkZXJzW3NoYWRlcl0scG5hbWUpfX1mdW5jdGlvbiBfZ2xHZXRTdHJpbmcobmFtZV8pe3ZhciByZXQ9R0wuc3RyaW5nQ2FjaGVbbmFtZV9dO2lmKCFyZXQpe3N3aXRjaChuYW1lXyl7Y2FzZSA3OTM5OnZhciBleHRzPUdMY3R4LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKXx8W107ZXh0cz1leHRzLmNvbmNhdChleHRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iR0xfIitlfSkpO3JldD1zdHJpbmdUb05ld1VURjgoZXh0cy5qb2luKCIgIikpO2JyZWFrO2Nhc2UgNzkzNjpjYXNlIDc5Mzc6Y2FzZSAzNzQ0NTpjYXNlIDM3NDQ2OnZhciBzPUdMY3R4LmdldFBhcmFtZXRlcihuYW1lXyk7aWYoIXMpe0dMLnJlY29yZEVycm9yKDEyODApfXJldD1zJiZzdHJpbmdUb05ld1VURjgocyk7YnJlYWs7Y2FzZSA3OTM4OnZhciBnbFZlcnNpb249R0xjdHguZ2V0UGFyYW1ldGVyKDc5MzgpO2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpZ2xWZXJzaW9uPSJPcGVuR0wgRVMgMy4wICgiK2dsVmVyc2lvbisiKSI7ZWxzZXtnbFZlcnNpb249Ik9wZW5HTCBFUyAyLjAgKCIrZ2xWZXJzaW9uKyIpIn1yZXQ9c3RyaW5nVG9OZXdVVEY4KGdsVmVyc2lvbik7YnJlYWs7Y2FzZSAzNTcyNDp2YXIgZ2xzbFZlcnNpb249R0xjdHguZ2V0UGFyYW1ldGVyKDM1NzI0KTt2YXIgdmVyX3JlPS9eV2ViR0wgR0xTTCBFUyAoWzAtOV1cLlswLTldWzAtOV0/KSg/OiR8IC4qKS87dmFyIHZlcl9udW09Z2xzbFZlcnNpb24ubWF0Y2godmVyX3JlKTtpZih2ZXJfbnVtIT09bnVsbCl7aWYodmVyX251bVsxXS5sZW5ndGg9PTMpdmVyX251bVsxXT12ZXJfbnVtWzFdKyIwIjtnbHNsVmVyc2lvbj0iT3BlbkdMIEVTIEdMU0wgRVMgIit2ZXJfbnVtWzFdKyIgKCIrZ2xzbFZlcnNpb24rIikifXJldD1zdHJpbmdUb05ld1VURjgoZ2xzbFZlcnNpb24pO2JyZWFrO2RlZmF1bHQ6R0wucmVjb3JkRXJyb3IoMTI4MCl9R0wuc3RyaW5nQ2FjaGVbbmFtZV9dPXJldH1yZXR1cm4gcmV0fWZ1bmN0aW9uIF9nbEdldFN0cmluZ2kobmFtZSxpbmRleCl7aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbjwyKXtHTC5yZWNvcmRFcnJvcigxMjgyKTtyZXR1cm4gMH12YXIgc3RyaW5naUNhY2hlPUdMLnN0cmluZ2lDYWNoZVtuYW1lXTtpZihzdHJpbmdpQ2FjaGUpe2lmKGluZGV4PDB8fGluZGV4Pj1zdHJpbmdpQ2FjaGUubGVuZ3RoKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm4gMH1yZXR1cm4gc3RyaW5naUNhY2hlW2luZGV4XX1zd2l0Y2gobmFtZSl7Y2FzZSA3OTM5OnZhciBleHRzPUdMY3R4LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKXx8W107ZXh0cz1leHRzLmNvbmNhdChleHRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iR0xfIitlfSkpO2V4dHM9ZXh0cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHN0cmluZ1RvTmV3VVRGOChlKX0pO3N0cmluZ2lDYWNoZT1HTC5zdHJpbmdpQ2FjaGVbbmFtZV09ZXh0cztpZihpbmRleDwwfHxpbmRleD49c3RyaW5naUNhY2hlLmxlbmd0aCl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJuIDB9cmV0dXJuIHN0cmluZ2lDYWNoZVtpbmRleF07ZGVmYXVsdDpHTC5yZWNvcmRFcnJvcigxMjgwKTtyZXR1cm4gMH19ZnVuY3Rpb24gX2dsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LHBuYW1lLHBhcmFtcyl7aWYoIXBhcmFtcyl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufUhFQVAzMltwYXJhbXM+PjJdPUdMY3R4LmdldFRleFBhcmFtZXRlcih0YXJnZXQscG5hbWUpfWZ1bmN0aW9uIF9nbEdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sdW5pZm9ybUJsb2NrTmFtZSl7cmV0dXJuIEdMY3R4WyJnZXRVbmlmb3JtQmxvY2tJbmRleCJdKEdMLnByb2dyYW1zW3Byb2dyYW1dLFVURjhUb1N0cmluZyh1bmlmb3JtQmxvY2tOYW1lKSl9ZnVuY3Rpb24gX2dsR2V0VW5pZm9ybUluZGljZXMocHJvZ3JhbSx1bmlmb3JtQ291bnQsdW5pZm9ybU5hbWVzLHVuaWZvcm1JbmRpY2VzKXtpZighdW5pZm9ybUluZGljZXMpe0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn1pZih1bmlmb3JtQ291bnQ+MCYmKHVuaWZvcm1OYW1lcz09MHx8dW5pZm9ybUluZGljZXM9PTApKXtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59cHJvZ3JhbT1HTC5wcm9ncmFtc1twcm9ncmFtXTt2YXIgbmFtZXM9W107Zm9yKHZhciBpPTA7aTx1bmlmb3JtQ291bnQ7aSsrKW5hbWVzLnB1c2goVVRGOFRvU3RyaW5nKEhFQVAzMlt1bmlmb3JtTmFtZXMraSo0Pj4yXSkpO3ZhciByZXN1bHQ9R0xjdHhbImdldFVuaWZvcm1JbmRpY2VzIl0ocHJvZ3JhbSxuYW1lcyk7aWYoIXJlc3VsdClyZXR1cm47dmFyIGxlbj1yZXN1bHQubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7SEVBUDMyW3VuaWZvcm1JbmRpY2VzK2kqND4+Ml09cmVzdWx0W2ldfX1mdW5jdGlvbiBfZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSxuYW1lKXtmdW5jdGlvbiBnZXRMZWZ0QnJhY2VQb3MobmFtZSl7cmV0dXJuIG5hbWUuc2xpY2UoLTEpPT0iXSImJm5hbWUubGFzdEluZGV4T2YoIlsiKX1uYW1lPVVURjhUb1N0cmluZyhuYW1lKTtpZihwcm9ncmFtPUdMLnByb2dyYW1zW3Byb2dyYW1dKXt2YXIgdW5pZm9ybUxvY3NCeUlkPXByb2dyYW0udW5pZm9ybUxvY3NCeUlkO3ZhciB1bmlmb3JtU2l6ZUFuZElkc0J5TmFtZT1wcm9ncmFtLnVuaWZvcm1TaXplQW5kSWRzQnlOYW1lO3ZhciBpLGo7dmFyIGFycmF5SW5kZXg9MDt2YXIgdW5pZm9ybUJhc2VOYW1lPW5hbWU7dmFyIGxlZnRCcmFjZT1nZXRMZWZ0QnJhY2VQb3MobmFtZSk7aWYoIXVuaWZvcm1Mb2NzQnlJZCl7cHJvZ3JhbS51bmlmb3JtTG9jc0J5SWQ9dW5pZm9ybUxvY3NCeUlkPXt9O3Byb2dyYW0udW5pZm9ybUFycmF5TmFtZXNCeUlkPXt9O2ZvcihpPTA7aTxHTGN0eC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sMzU3MTgpOysraSl7dmFyIHU9R0xjdHguZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLGkpO3ZhciBubT11Lm5hbWU7dmFyIHN6PXUuc2l6ZTt2YXIgbGI9Z2V0TGVmdEJyYWNlUG9zKG5tKTt2YXIgYXJyYXlOYW1lPWxiPjA/bm0uc2xpY2UoMCxsYik6bm07dmFyIGlkPXVuaWZvcm1TaXplQW5kSWRzQnlOYW1lW2FycmF5TmFtZV0/dW5pZm9ybVNpemVBbmRJZHNCeU5hbWVbYXJyYXlOYW1lXVsxXTpwcm9ncmFtLnVuaWZvcm1JZENvdW50ZXI7cHJvZ3JhbS51bmlmb3JtSWRDb3VudGVyPU1hdGgubWF4KGlkK3N6LHByb2dyYW0udW5pZm9ybUlkQ291bnRlcik7dW5pZm9ybVNpemVBbmRJZHNCeU5hbWVbYXJyYXlOYW1lXT1bc3osaWRdO2ZvcihqPTA7ajxzejsrK2ope3VuaWZvcm1Mb2NzQnlJZFtpZF09ajtwcm9ncmFtLnVuaWZvcm1BcnJheU5hbWVzQnlJZFtpZCsrXT1hcnJheU5hbWV9fX1pZihsZWZ0QnJhY2U+MCl7YXJyYXlJbmRleD1qc3RvaV9xKG5hbWUuc2xpY2UobGVmdEJyYWNlKzEpKT4+PjA7dW5pZm9ybUJhc2VOYW1lPW5hbWUuc2xpY2UoMCxsZWZ0QnJhY2UpfXZhciBzaXplQW5kSWQ9dW5pZm9ybVNpemVBbmRJZHNCeU5hbWVbdW5pZm9ybUJhc2VOYW1lXTtpZihzaXplQW5kSWQmJmFycmF5SW5kZXg8c2l6ZUFuZElkWzBdKXthcnJheUluZGV4Kz1zaXplQW5kSWRbMV07aWYodW5pZm9ybUxvY3NCeUlkW2FycmF5SW5kZXhdPXVuaWZvcm1Mb2NzQnlJZFthcnJheUluZGV4XXx8R0xjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sbmFtZSkpe3JldHVybiBhcnJheUluZGV4fX19ZWxzZXtHTC5yZWNvcmRFcnJvcigxMjgxKX1yZXR1cm4tMX1mdW5jdGlvbiB3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbil7dmFyIHA9R0xjdHguY3VycmVudFByb2dyYW07aWYocCl7dmFyIHdlYmdsTG9jPXAudW5pZm9ybUxvY3NCeUlkW2xvY2F0aW9uXTtpZih0eXBlb2Ygd2ViZ2xMb2M9PT0ibnVtYmVyIil7cC51bmlmb3JtTG9jc0J5SWRbbG9jYXRpb25dPXdlYmdsTG9jPUdMY3R4LmdldFVuaWZvcm1Mb2NhdGlvbihwLHAudW5pZm9ybUFycmF5TmFtZXNCeUlkW2xvY2F0aW9uXSsod2ViZ2xMb2M+MD8iWyIrd2ViZ2xMb2MrIl0iOiIiKSl9cmV0dXJuIHdlYmdsTG9jfWVsc2V7R0wucmVjb3JkRXJyb3IoMTI4Mil9fWZ1bmN0aW9uIGVtc2NyaXB0ZW5XZWJHTEdldFVuaWZvcm0ocHJvZ3JhbSxsb2NhdGlvbixwYXJhbXMsdHlwZSl7aWYoIXBhcmFtcyl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufXByb2dyYW09R0wucHJvZ3JhbXNbcHJvZ3JhbV07dmFyIGRhdGE9R0xjdHguZ2V0VW5pZm9ybShwcm9ncmFtLHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSk7aWYodHlwZW9mIGRhdGE9PSJudW1iZXIifHx0eXBlb2YgZGF0YT09ImJvb2xlYW4iKXtzd2l0Y2godHlwZSl7Y2FzZSAwOkhFQVAzMltwYXJhbXM+PjJdPWRhdGE7YnJlYWs7Y2FzZSAyOkhFQVBGMzJbcGFyYW1zPj4yXT1kYXRhO2JyZWFrfX1lbHNle2Zvcih2YXIgaT0wO2k8ZGF0YS5sZW5ndGg7aSsrKXtzd2l0Y2godHlwZSl7Y2FzZSAwOkhFQVAzMltwYXJhbXMraSo0Pj4yXT1kYXRhW2ldO2JyZWFrO2Nhc2UgMjpIRUFQRjMyW3BhcmFtcytpKjQ+PjJdPWRhdGFbaV07YnJlYWt9fX19ZnVuY3Rpb24gX2dsR2V0VW5pZm9ybWl2KHByb2dyYW0sbG9jYXRpb24scGFyYW1zKXtlbXNjcmlwdGVuV2ViR0xHZXRVbmlmb3JtKHByb2dyYW0sbG9jYXRpb24scGFyYW1zLDApfWZ1bmN0aW9uIGVtc2NyaXB0ZW5XZWJHTEdldFZlcnRleEF0dHJpYihpbmRleCxwbmFtZSxwYXJhbXMsdHlwZSl7aWYoIXBhcmFtcyl7R0wucmVjb3JkRXJyb3IoMTI4MSk7cmV0dXJufWlmKEdMLmN1cnJlbnRDb250ZXh0LmNsaWVudEJ1ZmZlcnNbaW5kZXhdLmVuYWJsZWQpe2VycigiZ2xHZXRWZXJ0ZXhBdHRyaWIqdiBvbiBjbGllbnQtc2lkZSBhcnJheTogbm90IHN1cHBvcnRlZCwgYmFkIGRhdGEgcmV0dXJuZWQiKX12YXIgZGF0YT1HTGN0eC5nZXRWZXJ0ZXhBdHRyaWIoaW5kZXgscG5hbWUpO2lmKHBuYW1lPT0zNDk3NSl7SEVBUDMyW3BhcmFtcz4+Ml09ZGF0YSYmZGF0YVsibmFtZSJdfWVsc2UgaWYodHlwZW9mIGRhdGE9PSJudW1iZXIifHx0eXBlb2YgZGF0YT09ImJvb2xlYW4iKXtzd2l0Y2godHlwZSl7Y2FzZSAwOkhFQVAzMltwYXJhbXM+PjJdPWRhdGE7YnJlYWs7Y2FzZSAyOkhFQVBGMzJbcGFyYW1zPj4yXT1kYXRhO2JyZWFrO2Nhc2UgNTpIRUFQMzJbcGFyYW1zPj4yXT1NYXRoLmZyb3VuZChkYXRhKTticmVha319ZWxzZXtmb3IodmFyIGk9MDtpPGRhdGEubGVuZ3RoO2krKyl7c3dpdGNoKHR5cGUpe2Nhc2UgMDpIRUFQMzJbcGFyYW1zK2kqND4+Ml09ZGF0YVtpXTticmVhaztjYXNlIDI6SEVBUEYzMltwYXJhbXMraSo0Pj4yXT1kYXRhW2ldO2JyZWFrO2Nhc2UgNTpIRUFQMzJbcGFyYW1zK2kqND4+Ml09TWF0aC5mcm91bmQoZGF0YVtpXSk7YnJlYWt9fX19ZnVuY3Rpb24gX2dsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgscG5hbWUscGFyYW1zKXtlbXNjcmlwdGVuV2ViR0xHZXRWZXJ0ZXhBdHRyaWIoaW5kZXgscG5hbWUscGFyYW1zLDUpfWZ1bmN0aW9uIF9nbEludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsbnVtQXR0YWNobWVudHMsYXR0YWNobWVudHMpe3ZhciBsaXN0PXRlbXBGaXhlZExlbmd0aEFycmF5W251bUF0dGFjaG1lbnRzXTtmb3IodmFyIGk9MDtpPG51bUF0dGFjaG1lbnRzO2krKyl7bGlzdFtpXT1IRUFQMzJbYXR0YWNobWVudHMraSo0Pj4yXX1HTGN0eFsiaW52YWxpZGF0ZUZyYW1lYnVmZmVyIl0odGFyZ2V0LGxpc3QpfWZ1bmN0aW9uIF9nbElzRW5hYmxlZCh4MCl7cmV0dXJuIEdMY3R4WyJpc0VuYWJsZWQiXSh4MCl9ZnVuY3Rpb24gX2dsSXNWZXJ0ZXhBcnJheShhcnJheSl7dmFyIHZhbz1HTC52YW9zW2FycmF5XTtpZighdmFvKXJldHVybiAwO3JldHVybiBHTGN0eFsiaXNWZXJ0ZXhBcnJheSJdKHZhbyl9ZnVuY3Rpb24gX2dsTGlua1Byb2dyYW0ocHJvZ3JhbSl7cHJvZ3JhbT1HTC5wcm9ncmFtc1twcm9ncmFtXTtHTGN0eC5saW5rUHJvZ3JhbShwcm9ncmFtKTtwcm9ncmFtLnVuaWZvcm1Mb2NzQnlJZD0wO3Byb2dyYW0udW5pZm9ybVNpemVBbmRJZHNCeU5hbWU9e307W3Byb2dyYW1bInZzIl0scHJvZ3JhbVsiZnMiXV0uZm9yRWFjaChmdW5jdGlvbihzKXtPYmplY3Qua2V5cyhzLmV4cGxpY2l0VW5pZm9ybUxvY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihzaGFkZXJMb2NhdGlvbil7dmFyIGxvYz1zLmV4cGxpY2l0VW5pZm9ybUxvY2F0aW9uc1tzaGFkZXJMb2NhdGlvbl07cHJvZ3JhbS51bmlmb3JtU2l6ZUFuZElkc0J5TmFtZVtzaGFkZXJMb2NhdGlvbl09WzEsbG9jXTtwcm9ncmFtLnVuaWZvcm1JZENvdW50ZXI9TWF0aC5tYXgocHJvZ3JhbS51bmlmb3JtSWRDb3VudGVyLGxvYysxKX0pfSk7ZnVuY3Rpb24gY29weUtleXMoZHN0LHNyYyl7T2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7ZHN0W2tleV09c3JjW2tleV19KX1wcm9ncmFtLmV4cGxpY2l0VW5pZm9ybUJpbmRpbmdzPXt9O3Byb2dyYW0uZXhwbGljaXRTYW1wbGVyQmluZGluZ3M9e307W3Byb2dyYW1bInZzIl0scHJvZ3JhbVsiZnMiXV0uZm9yRWFjaChmdW5jdGlvbihzKXtjb3B5S2V5cyhwcm9ncmFtLmV4cGxpY2l0VW5pZm9ybUJpbmRpbmdzLHMuZXhwbGljaXRVbmlmb3JtQmluZGluZ3MpO2NvcHlLZXlzKHByb2dyYW0uZXhwbGljaXRTYW1wbGVyQmluZGluZ3Mscy5leHBsaWNpdFNhbXBsZXJCaW5kaW5ncyl9KTtwcm9ncmFtLmV4cGxpY2l0UHJvZ3JhbUJpbmRpbmdzQXBwbGllZD0wfWZ1bmN0aW9uIF9nbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCxvZmZzZXQsbGVuZ3RoLGFjY2Vzcyl7aWYoYWNjZXNzIT0yNiYmYWNjZXNzIT0xMCl7ZXJyKCJnbE1hcEJ1ZmZlclJhbmdlIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gYWNjZXNzIGlzIE1BUF9XUklURXxJTlZBTElEQVRFX0JVRkZFUiIpO3JldHVybiAwfWlmKCFlbXNjcmlwdGVuV2ViR0xWYWxpZGF0ZU1hcEJ1ZmZlclRhcmdldCh0YXJnZXQpKXtHTC5yZWNvcmRFcnJvcigxMjgwKTtlcnIoIkdMX0lOVkFMSURfRU5VTSBpbiBnbE1hcEJ1ZmZlclJhbmdlIik7cmV0dXJuIDB9dmFyIG1lbT1fbWFsbG9jKGxlbmd0aCk7aWYoIW1lbSlyZXR1cm4gMDtHTC5tYXBwZWRCdWZmZXJzW2Vtc2NyaXB0ZW5XZWJHTEdldEJ1ZmZlckJpbmRpbmcodGFyZ2V0KV09e29mZnNldDpvZmZzZXQsbGVuZ3RoOmxlbmd0aCxtZW06bWVtLGFjY2VzczphY2Nlc3N9O3JldHVybiBtZW19ZnVuY3Rpb24gX2dsUGl4ZWxTdG9yZWkocG5hbWUscGFyYW0pe2lmKHBuYW1lPT0zMzE3KXtHTC51bnBhY2tBbGlnbm1lbnQ9cGFyYW19R0xjdHgucGl4ZWxTdG9yZWkocG5hbWUscGFyYW0pfWZ1bmN0aW9uIF9nbFBvbHlnb25PZmZzZXQoeDAseDEpe0dMY3R4WyJwb2x5Z29uT2Zmc2V0Il0oeDAseDEpfWZ1bmN0aW9uIF9nbFByb2dyYW1CaW5hcnkocHJvZ3JhbSxiaW5hcnlGb3JtYXQsYmluYXJ5LGxlbmd0aCl7R0wucmVjb3JkRXJyb3IoMTI4MCl9ZnVuY3Rpb24gX2dsUHJvZ3JhbVBhcmFtZXRlcmkocHJvZ3JhbSxwbmFtZSx2YWx1ZSl7R0wucmVjb3JkRXJyb3IoMTI4MCl9ZnVuY3Rpb24gX2dsUmVhZEJ1ZmZlcih4MCl7R0xjdHhbInJlYWRCdWZmZXIiXSh4MCl9ZnVuY3Rpb24gY29tcHV0ZVVucGFja0FsaWduZWRJbWFnZVNpemUod2lkdGgsaGVpZ2h0LHNpemVQZXJQaXhlbCxhbGlnbm1lbnQpe2Z1bmN0aW9uIHJvdW5kZWRUb05leHRNdWx0aXBsZU9mKHgseSl7cmV0dXJuIHgreS0xJi15fXZhciBwbGFpblJvd1NpemU9d2lkdGgqc2l6ZVBlclBpeGVsO3ZhciBhbGlnbmVkUm93U2l6ZT1yb3VuZGVkVG9OZXh0TXVsdGlwbGVPZihwbGFpblJvd1NpemUsYWxpZ25tZW50KTtyZXR1cm4gaGVpZ2h0KmFsaWduZWRSb3dTaXplfWZ1bmN0aW9uIF9fY29sb3JDaGFubmVsc0luR2xUZXh0dXJlRm9ybWF0KGZvcm1hdCl7dmFyIGNvbG9yQ2hhbm5lbHM9ezU6Myw2OjQsODoyLDI5NTAyOjMsMjk1MDQ6NCwyNjkxNzoyLDI2OTE4OjIsMjk4NDY6MywyOTg0Nzo0fTtyZXR1cm4gY29sb3JDaGFubmVsc1tmb3JtYXQtNjQwMl18fDF9ZnVuY3Rpb24gaGVhcE9iamVjdEZvcldlYkdMVHlwZSh0eXBlKXt0eXBlLT01MTIwO2lmKHR5cGU9PTApcmV0dXJuIEhFQVA4O2lmKHR5cGU9PTEpcmV0dXJuIEhFQVBVODtpZih0eXBlPT0yKXJldHVybiBIRUFQMTY7aWYodHlwZT09NClyZXR1cm4gSEVBUDMyO2lmKHR5cGU9PTYpcmV0dXJuIEhFQVBGMzI7aWYodHlwZT09NXx8dHlwZT09Mjg5MjJ8fHR5cGU9PTI4NTIwfHx0eXBlPT0zMDc3OXx8dHlwZT09MzA3ODIpcmV0dXJuIEhFQVBVMzI7cmV0dXJuIEhFQVBVMTZ9ZnVuY3Rpb24gaGVhcEFjY2Vzc1NoaWZ0Rm9yV2ViR0xIZWFwKGhlYXApe3JldHVybiAzMS1NYXRoLmNsejMyKGhlYXAuQllURVNfUEVSX0VMRU1FTlQpfWZ1bmN0aW9uIGVtc2NyaXB0ZW5XZWJHTEdldFRleFBpeGVsRGF0YSh0eXBlLGZvcm1hdCx3aWR0aCxoZWlnaHQscGl4ZWxzLGludGVybmFsRm9ybWF0KXt2YXIgaGVhcD1oZWFwT2JqZWN0Rm9yV2ViR0xUeXBlKHR5cGUpO3ZhciBzaGlmdD1oZWFwQWNjZXNzU2hpZnRGb3JXZWJHTEhlYXAoaGVhcCk7dmFyIGJ5dGVTaXplPTE8PHNoaWZ0O3ZhciBzaXplUGVyUGl4ZWw9X19jb2xvckNoYW5uZWxzSW5HbFRleHR1cmVGb3JtYXQoZm9ybWF0KSpieXRlU2l6ZTt2YXIgYnl0ZXM9Y29tcHV0ZVVucGFja0FsaWduZWRJbWFnZVNpemUod2lkdGgsaGVpZ2h0LHNpemVQZXJQaXhlbCxHTC51bnBhY2tBbGlnbm1lbnQpO3JldHVybiBoZWFwLnN1YmFycmF5KHBpeGVscz4+c2hpZnQscGl4ZWxzK2J5dGVzPj5zaGlmdCl9ZnVuY3Rpb24gX2dsUmVhZFBpeGVscyh4LHksd2lkdGgsaGVpZ2h0LGZvcm1hdCx0eXBlLHBpeGVscyl7aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbj49Mil7aWYoR0xjdHguY3VycmVudFBpeGVsUGFja0J1ZmZlckJpbmRpbmcpe0dMY3R4LnJlYWRQaXhlbHMoeCx5LHdpZHRoLGhlaWdodCxmb3JtYXQsdHlwZSxwaXhlbHMpfWVsc2V7dmFyIGhlYXA9aGVhcE9iamVjdEZvcldlYkdMVHlwZSh0eXBlKTtHTGN0eC5yZWFkUGl4ZWxzKHgseSx3aWR0aCxoZWlnaHQsZm9ybWF0LHR5cGUsaGVhcCxwaXhlbHM+PmhlYXBBY2Nlc3NTaGlmdEZvcldlYkdMSGVhcChoZWFwKSl9cmV0dXJufXZhciBwaXhlbERhdGE9ZW1zY3JpcHRlbldlYkdMR2V0VGV4UGl4ZWxEYXRhKHR5cGUsZm9ybWF0LHdpZHRoLGhlaWdodCxwaXhlbHMsZm9ybWF0KTtpZighcGl4ZWxEYXRhKXtHTC5yZWNvcmRFcnJvcigxMjgwKTtyZXR1cm59R0xjdHgucmVhZFBpeGVscyh4LHksd2lkdGgsaGVpZ2h0LGZvcm1hdCx0eXBlLHBpeGVsRGF0YSl9ZnVuY3Rpb24gX2dsUmVuZGVyYnVmZmVyU3RvcmFnZSh4MCx4MSx4Mix4Myl7R0xjdHhbInJlbmRlcmJ1ZmZlclN0b3JhZ2UiXSh4MCx4MSx4Mix4Myl9ZnVuY3Rpb24gX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHgwLHgxLHgyLHgzLHg0KXtHTGN0eFsicmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlIl0oeDAseDEseDIseDMseDQpfWZ1bmN0aW9uIF9nbFNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIscG5hbWUscGFyYW0pe0dMY3R4WyJzYW1wbGVyUGFyYW1ldGVyaSJdKEdMLnNhbXBsZXJzW3NhbXBsZXJdLHBuYW1lLHBhcmFtKX1mdW5jdGlvbiBfZ2xTY2lzc29yKHgwLHgxLHgyLHgzKXtHTGN0eFsic2Npc3NvciJdKHgwLHgxLHgyLHgzKX1mdW5jdGlvbiBmaW5kX2Nsb3NpbmdfcGFyZW5zX2luZGV4KGFycixpLG9wZW5pbmc9IigiLGNsb3Npbmc9IikiKXtmb3IodmFyIG5lc3Rpbmc9MDtpPGFyci5sZW5ndGg7KytpKXtpZihhcnJbaV09PW9wZW5pbmcpKytuZXN0aW5nO2lmKGFycltpXT09Y2xvc2luZyYmLS1uZXN0aW5nPT0wKXtyZXR1cm4gaX19fWZ1bmN0aW9uIHByZXByb2Nlc3NfY19jb2RlKGNvZGUpe3ZhciBpPTAsbGVuPWNvZGUubGVuZ3RoLG91dD0iIixzdGFjaz1bMV0sZGVmcz17ImRlZmluZWQiOmZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBkZWZzW2FyZ3NbMF1dPzE6MH0sIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIjpmdW5jdGlvbigpe3JldHVybiAxfX07ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKHN0cixpKXtyZXR1cm4hKHN0ci5jaGFyQ29kZUF0KGkpPjMyKX1mdW5jdGlvbiBuZXh0V2hpdGVzcGFjZShzdHIsaSl7d2hpbGUoIWlzV2hpdGVzcGFjZShzdHIsaSkpKytpO3JldHVybiBpfWZ1bmN0aW9uIGNsYXNzaWZ5Q2hhcihzdHIsaWR4KXt2YXIgY2M9c3RyLmNoYXJDb2RlQXQoaWR4KTtpZihjYz4zMil7aWYoY2M8NDgpcmV0dXJuIDE7aWYoY2M8NTgpcmV0dXJuIDI7aWYoY2M8NjUpcmV0dXJuIDE7aWYoY2M8OTF8fGNjPT05NSlyZXR1cm4gMztpZihjYzw5NylyZXR1cm4gMTtpZihjYzwxMjMpcmV0dXJuIDM7cmV0dXJuIDF9cmV0dXJuIGNjPDMzPzA6NH1mdW5jdGlvbiB0b2tlbml6ZShleHByU3RyaW5nLGtlZXBXaGl0ZXNwYWNlKXt2YXIgb3V0PVtdLGxlbj1leHByU3RyaW5nLmxlbmd0aDtmb3IodmFyIGk9MDtpPD1sZW47KytpKXt2YXIga2luZD1jbGFzc2lmeUNoYXIoZXhwclN0cmluZyxpKTtpZihraW5kPT0yfHxraW5kPT0zKXtmb3IodmFyIGo9aSsxO2o8PWxlbjsrK2ope3ZhciBraW5kMj1jbGFzc2lmeUNoYXIoZXhwclN0cmluZyxqKTtpZihraW5kMiE9a2luZCYmKGtpbmQyIT0yfHxraW5kIT0zKSl7b3V0LnB1c2goZXhwclN0cmluZy5zdWJzdHJpbmcoaSxqKSk7aT1qLTE7YnJlYWt9fX1lbHNlIGlmKGtpbmQ9PTEpe3ZhciBvcDI9ZXhwclN0cmluZy5zdWJzdHIoaSwyKTtpZihbIjw9IiwiPj0iLCI9PSIsIiE9IiwiJiYiLCJ8fCJdLmluY2x1ZGVzKG9wMikpe291dC5wdXNoKG9wMik7KytpfWVsc2V7b3V0LnB1c2goZXhwclN0cmluZ1tpXSl9fX1yZXR1cm4gb3V0fWZ1bmN0aW9uIGV4cGFuZE1hY3JvcyhzdHIsbGluZVN0YXJ0LGxpbmVFbmQpe2lmKGxpbmVFbmQ9PT11bmRlZmluZWQpbGluZUVuZD1zdHIubGVuZ3RoO3ZhciBsZW49c3RyLmxlbmd0aDt2YXIgb3V0PSIiO2Zvcih2YXIgaT1saW5lU3RhcnQ7aTxsaW5lRW5kOysraSl7dmFyIGtpbmQ9Y2xhc3NpZnlDaGFyKHN0cixpKTtpZihraW5kPT0zKXtmb3IodmFyIGo9aSsxO2o8PWxpbmVFbmQ7KytqKXt2YXIga2luZDI9Y2xhc3NpZnlDaGFyKHN0cixqKTtpZihraW5kMiE9MiYma2luZDIhPTMpe3ZhciBzeW1ib2w9c3RyLnN1YnN0cmluZyhpLGopO3ZhciBwcD1kZWZzW3N5bWJvbF07aWYocHApe3ZhciBleHBhbmRlZD1zdHIuc3Vic3RyaW5nKGxpbmVTdGFydCxpKTtpZihwcC5sZW5ndGgmJnN0cltqXT09IigiKXt2YXIgY2xvc2VQYXJlbnM9ZmluZF9jbG9zaW5nX3BhcmVuc19pbmRleChzdHIsaik7ZXhwYW5kZWQrPXBwKHN0ci5zdWJzdHJpbmcoaisxLGNsb3NlUGFyZW5zKS5zcGxpdCgiLCIpKStzdHIuc3Vic3RyaW5nKGNsb3NlUGFyZW5zKzEsbGluZUVuZCl9ZWxzZXtleHBhbmRlZCs9cHAoKStzdHIuc3Vic3RyaW5nKGosbGluZUVuZCl9cmV0dXJuIGV4cGFuZE1hY3JvcyhleHBhbmRlZCwwKX1lbHNle291dCs9c3ltYm9sO2k9ai0xO2JyZWFrfX19fWVsc2V7b3V0Kz1zdHJbaV19fXJldHVybiBvdXR9ZnVuY3Rpb24gYnVpbGRFeHByVHJlZSh0b2tlbnMpe3doaWxlKHRva2Vucy5sZW5ndGg+MXx8dHlwZW9mIHRva2Vuc1swXSE9ImZ1bmN0aW9uIil7dG9rZW5zPWZ1bmN0aW9uKHRva2Vucyl7dmFyIGksaixwLG9wZXJhdG9yQW5kUHJpb3JpdHk9LTI7Zm9yKGo9MDtqPHRva2Vucy5sZW5ndGg7KytqKXtpZigocD1bIioiLCIvIiwiKyIsIi0iLCIhIiwiPCIsIjw9IiwiPiIsIj49IiwiPT0iLCIhPSIsIiYmIiwifHwiLCIoIl0uaW5kZXhPZih0b2tlbnNbal0pKT5vcGVyYXRvckFuZFByaW9yaXR5KXtpPWo7b3BlcmF0b3JBbmRQcmlvcml0eT1wfX1pZihvcGVyYXRvckFuZFByaW9yaXR5PT0xMyl7dmFyIGo9ZmluZF9jbG9zaW5nX3BhcmVuc19pbmRleCh0b2tlbnMsaSk7aWYoail7dG9rZW5zLnNwbGljZShpLGorMS1pLGJ1aWxkRXhwclRyZWUodG9rZW5zLnNsaWNlKGkrMSxqKSkpO3JldHVybiB0b2tlbnN9fWlmKG9wZXJhdG9yQW5kUHJpb3JpdHk9PTQpe2k9dG9rZW5zLmxhc3RJbmRleE9mKCIhIik7dmFyIGlubmVyRXhwcj1idWlsZEV4cHJUcmVlKHRva2Vucy5zbGljZShpKzEsaSsyKSk7dG9rZW5zLnNwbGljZShpLDIsZnVuY3Rpb24oKXtyZXR1cm4haW5uZXJFeHByKCl9KTtyZXR1cm4gdG9rZW5zfWlmKG9wZXJhdG9yQW5kUHJpb3JpdHk+PTApe3ZhciBsZWZ0PWJ1aWxkRXhwclRyZWUodG9rZW5zLnNsaWNlKDAsaSkpO3ZhciByaWdodD1idWlsZEV4cHJUcmVlKHRva2Vucy5zbGljZShpKzEpKTtzd2l0Y2godG9rZW5zW2ldKXtjYXNlIiYmIjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpJiZyaWdodCgpfV07Y2FzZSJ8fCI6cmV0dXJuW2Z1bmN0aW9uKCl7cmV0dXJuIGxlZnQoKXx8cmlnaHQoKX1dO2Nhc2UiPT0iOnJldHVybltmdW5jdGlvbigpe3JldHVybiBsZWZ0KCk9PXJpZ2h0KCl9XTtjYXNlIiE9IjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpIT1yaWdodCgpfV07Y2FzZSI8IjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpPHJpZ2h0KCl9XTtjYXNlIjw9IjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpPD1yaWdodCgpfV07Y2FzZSI+IjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpPnJpZ2h0KCl9XTtjYXNlIj49IjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpPj1yaWdodCgpfV07Y2FzZSIrIjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gbGVmdCgpK3JpZ2h0KCl9XTtjYXNlIi0iOnJldHVybltmdW5jdGlvbigpe3JldHVybiBsZWZ0KCktcmlnaHQoKX1dO2Nhc2UiKiI6cmV0dXJuW2Z1bmN0aW9uKCl7cmV0dXJuIGxlZnQoKSpyaWdodCgpfV07Y2FzZSIvIjpyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcihsZWZ0KCkvcmlnaHQoKSl9XX19dmFyIG51bT1qc3RvaV9xKHRva2Vuc1tpXSk7cmV0dXJuW2Z1bmN0aW9uKCl7cmV0dXJuIG51bX1dfSh0b2tlbnMpfXJldHVybiB0b2tlbnNbMF19Zm9yKDtpPGxlbjsrK2kpe3ZhciBsaW5lU3RhcnQ9aTtpPWNvZGUuaW5kZXhPZigiXG4iLGkpO2lmKGk8MClpPWxlbjtmb3IodmFyIGo9bGluZVN0YXJ0O2o8aSYmaXNXaGl0ZXNwYWNlKGNvZGUsaik7KytqKTt2YXIgdGhpc0xpbmVJc0luQWN0aXZlUHJlcHJvY2Vzc2luZ0Jsb2NrPXN0YWNrW3N0YWNrLmxlbmd0aC0xXTtpZihjb2RlW2pdIT0iIyIpe2lmKHRoaXNMaW5lSXNJbkFjdGl2ZVByZXByb2Nlc3NpbmdCbG9jayl7b3V0Kz1leHBhbmRNYWNyb3MoY29kZSxsaW5lU3RhcnQsaSkrIlxuIn1jb250aW51ZX12YXIgc3BhY2U9bmV4dFdoaXRlc3BhY2UoY29kZSxqKTt2YXIgZGlyZWN0aXZlPWNvZGUuc3Vic3RyaW5nKGorMSxzcGFjZSk7dmFyIGV4cHJlc3Npb249Y29kZS5zdWJzdHJpbmcoc3BhY2UsaSkudHJpbSgpO3N3aXRjaChkaXJlY3RpdmUpe2Nhc2UiaWYiOnZhciB0b2tlbnM9dG9rZW5pemUoZXhwYW5kTWFjcm9zKGV4cHJlc3Npb24sMCkpO3ZhciBleHByVHJlZT1idWlsZEV4cHJUcmVlKHRva2Vucyk7dmFyIGV2YWx1YXRlZD1leHByVHJlZSgpO3N0YWNrLnB1c2goISFldmFsdWF0ZWQqc3RhY2tbc3RhY2subGVuZ3RoLTFdKTticmVhaztjYXNlImlmZGVmIjpzdGFjay5wdXNoKCEhZGVmc1tleHByZXNzaW9uXSpzdGFja1tzdGFjay5sZW5ndGgtMV0pO2JyZWFrO2Nhc2UiaWZuZGVmIjpzdGFjay5wdXNoKCFkZWZzW2V4cHJlc3Npb25dKnN0YWNrW3N0YWNrLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSJlbHNlIjpzdGFja1tzdGFjay5sZW5ndGgtMV09MS1zdGFja1tzdGFjay5sZW5ndGgtMV07YnJlYWs7Y2FzZSJlbmRpZiI6c3RhY2sucG9wKCk7YnJlYWs7Y2FzZSJkZWZpbmUiOmlmKHRoaXNMaW5lSXNJbkFjdGl2ZVByZXByb2Nlc3NpbmdCbG9jayl7dmFyIG1hY3JvU3RhcnQ9ZXhwcmVzc2lvbi5pbmRleE9mKCIoIik7dmFyIGZpcnN0V3M9bmV4dFdoaXRlc3BhY2UoZXhwcmVzc2lvbiwwKTtpZihmaXJzdFdzPG1hY3JvU3RhcnQpbWFjcm9TdGFydD0wO2lmKG1hY3JvU3RhcnQ+MCl7dmFyIG1hY3JvRW5kPWV4cHJlc3Npb24uaW5kZXhPZigiKSIsbWFjcm9TdGFydCk7bGV0IHBhcmFtcz1leHByZXNzaW9uLnN1YnN0cmluZyhtYWNyb1N0YXJ0KzEsbWFjcm9FbmQpLnNwbGl0KCIsIikubWFwKHg9PngudHJpbSgpKTtsZXQgdmFsdWU9dG9rZW5pemUoZXhwcmVzc2lvbi5zdWJzdHJpbmcobWFjcm9FbmQrMSkudHJpbSgpKTtkZWZzW2V4cHJlc3Npb24uc3Vic3RyaW5nKDAsbWFjcm9TdGFydCldPWZ1bmN0aW9uKGFyZ3Mpe3ZhciByZXQ9IiI7dmFsdWUuZm9yRWFjaCh4PT57dmFyIGFyZ0luZGV4PXBhcmFtcy5pbmRleE9mKHgpO3JldCs9YXJnSW5kZXg+PTA/YXJnc1thcmdJbmRleF06eH0pO3JldHVybiByZXR9fWVsc2V7bGV0IHZhbHVlPWV4cGFuZE1hY3JvcyhleHByZXNzaW9uLnN1YnN0cmluZyhmaXJzdFdzKzEpLnRyaW0oKSwwKTtkZWZzW2V4cHJlc3Npb24uc3Vic3RyaW5nKDAsZmlyc3RXcyldPWZ1bmN0aW9uKCl7cmV0dXJuIHZhbHVlfX19YnJlYWs7Y2FzZSJ1bmRlZiI6aWYodGhpc0xpbmVJc0luQWN0aXZlUHJlcHJvY2Vzc2luZ0Jsb2NrKWRlbGV0ZSBkZWZzW2V4cHJlc3Npb25dO2JyZWFrO2RlZmF1bHQ6aWYoZGlyZWN0aXZlIT0idmVyc2lvbiImJmRpcmVjdGl2ZSE9InByYWdtYSImJmRpcmVjdGl2ZSE9ImV4dGVuc2lvbiIpe31vdXQrPWV4cGFuZE1hY3Jvcyhjb2RlLGxpbmVTdGFydCxpKSsiXG4ifX1yZXR1cm4gb3V0fWZ1bmN0aW9uIHJlbW92ZV9jcHBfY29tbWVudHNfaW5fc2hhZGVycyhjb2RlKXt2YXIgaT0wLG91dD0iIixjaCxuZXh0LGxlbj1jb2RlLmxlbmd0aDtmb3IoO2k8bGVuOysraSl7Y2g9Y29kZVtpXTtpZihjaD09Ii8iKXtuZXh0PWNvZGVbaSsxXTtpZihuZXh0PT0iLyIpe3doaWxlKGk8bGVuJiZjb2RlW2krMV0hPSJcbiIpKytpfWVsc2UgaWYobmV4dD09IioiKXt3aGlsZShpPGxlbiYmKGNvZGVbaS0xXSE9IioifHxjb2RlW2ldIT0iLyIpKSsraX1lbHNle291dCs9Y2h9fWVsc2V7b3V0Kz1jaH19cmV0dXJuIG91dH1mdW5jdGlvbiBfZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLGNvdW50LHN0cmluZyxsZW5ndGgpe3ZhciBzb3VyY2U9R0wuZ2V0U291cmNlKHNoYWRlcixjb3VudCxzdHJpbmcsbGVuZ3RoKTtzb3VyY2U9cHJlcHJvY2Vzc19jX2NvZGUocmVtb3ZlX2NwcF9jb21tZW50c19pbl9zaGFkZXJzKHNvdXJjZSkpO3ZhciByZWdleD0vbGF5b3V0XHMqXChccypsb2NhdGlvblxzKj1ccyooLT9cZCspXHMqXClccyoodW5pZm9ybVxzKygobG93cHxtZWRpdW1wfGhpZ2hwKVxzKyk/XHcrXHMrKFx3KykpL2csZXhwbGljaXRVbmlmb3JtTG9jYXRpb25zPXt9LG1hdGNoO3doaWxlKG1hdGNoPXJlZ2V4LmV4ZWMoc291cmNlKSl7ZXhwbGljaXRVbmlmb3JtTG9jYXRpb25zW21hdGNoWzVdXT1qc3RvaV9xKG1hdGNoWzFdKTtpZighKGV4cGxpY2l0VW5pZm9ybUxvY2F0aW9uc1ttYXRjaFs1XV0+PTAmJmV4cGxpY2l0VW5pZm9ybUxvY2F0aW9uc1ttYXRjaFs1XV08MTA0ODU3Nikpe2NvbnNvbGUuZXJyb3IoJ1NwZWNpZmllZCBhbiBvdXQgb2YgcmFuZ2UgbGF5b3V0KGxvY2F0aW9uPXgpIGRpcmVjdGl2ZSAiJytleHBsaWNpdFVuaWZvcm1Mb2NhdGlvbnNbbWF0Y2hbNV1dKyciISAoJyttYXRjaFswXSsiKSIpO0dMLnJlY29yZEVycm9yKDEyODEpO3JldHVybn19c291cmNlPXNvdXJjZS5yZXBsYWNlKHJlZ2V4LCIkMiIpO0dMLnNoYWRlcnNbc2hhZGVyXS5leHBsaWNpdFVuaWZvcm1Mb2NhdGlvbnM9ZXhwbGljaXRVbmlmb3JtTG9jYXRpb25zO3ZhciBiaW5kaW5nUmVnZXg9L2xheW91dFxzKlwoLio/YmluZGluZ1xzKj1ccyooLT9cZCspLio/XClccyp1bmlmb3JtXHMrKFx3KylccysoXHcrKT8vZyxzYW1wbGVyQmluZGluZ3M9e30sdW5pZm9ybUJpbmRpbmdzPXt9LGJpbmRpbmdNYXRjaDt3aGlsZShiaW5kaW5nTWF0Y2g9YmluZGluZ1JlZ2V4LmV4ZWMoc291cmNlKSl7dmFyIGFycmF5TGVuZ3RoPTE7Zm9yKHZhciBpPWJpbmRpbmdNYXRjaC5pbmRleDtpPHNvdXJjZS5sZW5ndGgmJnNvdXJjZVtpXSE9IjsiOysraSl7aWYoc291cmNlW2ldPT0iWyIpe2FycmF5TGVuZ3RoPWpzdG9pX3Eoc291cmNlLnNsaWNlKGkrMSkpO2JyZWFrfWlmKHNvdXJjZVtpXT09InsiKWk9ZmluZF9jbG9zaW5nX3BhcmVuc19pbmRleChzb3VyY2UsaSwieyIsIn0iKS0xfXZhciBiaW5kaW5nPWpzdG9pX3EoYmluZGluZ01hdGNoWzFdKTt2YXIgYmluZGluZ3NUeXBlPTM0OTMwO2lmKGJpbmRpbmdNYXRjaFszXSYmYmluZGluZ01hdGNoWzJdLmluZGV4T2YoInNhbXBsZXIiKSE9LTEpe3NhbXBsZXJCaW5kaW5nc1tiaW5kaW5nTWF0Y2hbM11dPVtiaW5kaW5nLGFycmF5TGVuZ3RoXX1lbHNle2JpbmRpbmdzVHlwZT0zNTM3NDt1bmlmb3JtQmluZGluZ3NbYmluZGluZ01hdGNoWzJdXT1bYmluZGluZyxhcnJheUxlbmd0aF19dmFyIG51bUJpbmRpbmdQb2ludHM9R0xjdHguZ2V0UGFyYW1ldGVyKGJpbmRpbmdzVHlwZSk7aWYoIShiaW5kaW5nPj0wJiZiaW5kaW5nK2FycmF5TGVuZ3RoPD1udW1CaW5kaW5nUG9pbnRzKSl7Y29uc29sZS5lcnJvcignU3BlY2lmaWVkIGFuIG91dCBvZiByYW5nZSBsYXlvdXQoYmluZGluZz14KSBkaXJlY3RpdmUgIicrYmluZGluZysnIiEgKCcrYmluZGluZ01hdGNoWzBdKyIpLiBWYWxpZCByYW5nZSBpcyBbMCwgIitudW1CaW5kaW5nUG9pbnRzKyItMV0iKTtHTC5yZWNvcmRFcnJvcigxMjgxKTtyZXR1cm59fXNvdXJjZT1zb3VyY2UucmVwbGFjZSgvbGF5b3V0XHMqXCguKj9iaW5kaW5nXHMqPVxzKihbLVxkXSspLio/XCkvZywiIik7c291cmNlPXNvdXJjZS5yZXBsYWNlKC8obGF5b3V0XHMqXCgoLio/KSksXHMqYmluZGluZ1xzKj1ccyooWy1cZF0rKVwpL2csIiQxKSIpO3NvdXJjZT1zb3VyY2UucmVwbGFjZSgvbGF5b3V0XHMqXChccypiaW5kaW5nXHMqPVxzKihbLVxkXSspXHMqLCguKj8pXCkvZywibGF5b3V0KCQyKSIpO0dMLnNoYWRlcnNbc2hhZGVyXS5leHBsaWNpdFNhbXBsZXJCaW5kaW5ncz1zYW1wbGVyQmluZGluZ3M7R0wuc2hhZGVyc1tzaGFkZXJdLmV4cGxpY2l0VW5pZm9ybUJpbmRpbmdzPXVuaWZvcm1CaW5kaW5ncztHTGN0eC5zaGFkZXJTb3VyY2UoR0wuc2hhZGVyc1tzaGFkZXJdLHNvdXJjZSl9ZnVuY3Rpb24gX2dsU3RlbmNpbEZ1bmNTZXBhcmF0ZSh4MCx4MSx4Mix4Myl7R0xjdHhbInN0ZW5jaWxGdW5jU2VwYXJhdGUiXSh4MCx4MSx4Mix4Myl9ZnVuY3Rpb24gX2dsU3RlbmNpbE1hc2soeDApe0dMY3R4WyJzdGVuY2lsTWFzayJdKHgwKX1mdW5jdGlvbiBfZ2xTdGVuY2lsT3BTZXBhcmF0ZSh4MCx4MSx4Mix4Myl7R0xjdHhbInN0ZW5jaWxPcFNlcGFyYXRlIl0oeDAseDEseDIseDMpfWZ1bmN0aW9uIF9nbFRleEltYWdlMkQodGFyZ2V0LGxldmVsLGludGVybmFsRm9ybWF0LHdpZHRoLGhlaWdodCxib3JkZXIsZm9ybWF0LHR5cGUscGl4ZWxzKXtpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtpZihHTGN0eC5jdXJyZW50UGl4ZWxVbnBhY2tCdWZmZXJCaW5kaW5nKXtHTGN0eC50ZXhJbWFnZTJEKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsYm9yZGVyLGZvcm1hdCx0eXBlLHBpeGVscyl9ZWxzZSBpZihwaXhlbHMpe3ZhciBoZWFwPWhlYXBPYmplY3RGb3JXZWJHTFR5cGUodHlwZSk7R0xjdHgudGV4SW1hZ2UyRCh0YXJnZXQsbGV2ZWwsaW50ZXJuYWxGb3JtYXQsd2lkdGgsaGVpZ2h0LGJvcmRlcixmb3JtYXQsdHlwZSxoZWFwLHBpeGVscz4+aGVhcEFjY2Vzc1NoaWZ0Rm9yV2ViR0xIZWFwKGhlYXApKX1lbHNle0dMY3R4LnRleEltYWdlMkQodGFyZ2V0LGxldmVsLGludGVybmFsRm9ybWF0LHdpZHRoLGhlaWdodCxib3JkZXIsZm9ybWF0LHR5cGUsbnVsbCl9cmV0dXJufUdMY3R4LnRleEltYWdlMkQodGFyZ2V0LGxldmVsLGludGVybmFsRm9ybWF0LHdpZHRoLGhlaWdodCxib3JkZXIsZm9ybWF0LHR5cGUscGl4ZWxzP2Vtc2NyaXB0ZW5XZWJHTEdldFRleFBpeGVsRGF0YSh0eXBlLGZvcm1hdCx3aWR0aCxoZWlnaHQscGl4ZWxzLGludGVybmFsRm9ybWF0KTpudWxsKX1mdW5jdGlvbiBfZ2xUZXhJbWFnZTNEKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsZGVwdGgsYm9yZGVyLGZvcm1hdCx0eXBlLHBpeGVscyl7aWYoR0xjdHguY3VycmVudFBpeGVsVW5wYWNrQnVmZmVyQmluZGluZyl7R0xjdHhbInRleEltYWdlM0QiXSh0YXJnZXQsbGV2ZWwsaW50ZXJuYWxGb3JtYXQsd2lkdGgsaGVpZ2h0LGRlcHRoLGJvcmRlcixmb3JtYXQsdHlwZSxwaXhlbHMpfWVsc2UgaWYocGl4ZWxzKXt2YXIgaGVhcD1oZWFwT2JqZWN0Rm9yV2ViR0xUeXBlKHR5cGUpO0dMY3R4WyJ0ZXhJbWFnZTNEIl0odGFyZ2V0LGxldmVsLGludGVybmFsRm9ybWF0LHdpZHRoLGhlaWdodCxkZXB0aCxib3JkZXIsZm9ybWF0LHR5cGUsaGVhcCxwaXhlbHM+PmhlYXBBY2Nlc3NTaGlmdEZvcldlYkdMSGVhcChoZWFwKSl9ZWxzZXtHTGN0eFsidGV4SW1hZ2UzRCJdKHRhcmdldCxsZXZlbCxpbnRlcm5hbEZvcm1hdCx3aWR0aCxoZWlnaHQsZGVwdGgsYm9yZGVyLGZvcm1hdCx0eXBlLG51bGwpfX1mdW5jdGlvbiBfZ2xUZXhQYXJhbWV0ZXJmKHgwLHgxLHgyKXtHTGN0eFsidGV4UGFyYW1ldGVyZiJdKHgwLHgxLHgyKX1mdW5jdGlvbiBfZ2xUZXhQYXJhbWV0ZXJpKHgwLHgxLHgyKXtHTGN0eFsidGV4UGFyYW1ldGVyaSJdKHgwLHgxLHgyKX1mdW5jdGlvbiBfZ2xUZXhQYXJhbWV0ZXJpdih0YXJnZXQscG5hbWUscGFyYW1zKXt2YXIgcGFyYW09SEVBUDMyW3BhcmFtcz4+Ml07R0xjdHgudGV4UGFyYW1ldGVyaSh0YXJnZXQscG5hbWUscGFyYW0pfWZ1bmN0aW9uIF9nbFRleFN0b3JhZ2UyRCh4MCx4MSx4Mix4Myx4NCl7R0xjdHhbInRleFN0b3JhZ2UyRCJdKHgwLHgxLHgyLHgzLHg0KX1mdW5jdGlvbiBfZ2xUZXhTdG9yYWdlM0QoeDAseDEseDIseDMseDQseDUpe0dMY3R4WyJ0ZXhTdG9yYWdlM0QiXSh4MCx4MSx4Mix4Myx4NCx4NSl9ZnVuY3Rpb24gX2dsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCxmb3JtYXQsdHlwZSxwaXhlbHMpe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe2lmKEdMY3R4LmN1cnJlbnRQaXhlbFVucGFja0J1ZmZlckJpbmRpbmcpe0dMY3R4LnRleFN1YkltYWdlMkQodGFyZ2V0LGxldmVsLHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQsZm9ybWF0LHR5cGUscGl4ZWxzKX1lbHNlIGlmKHBpeGVscyl7dmFyIGhlYXA9aGVhcE9iamVjdEZvcldlYkdMVHlwZSh0eXBlKTtHTGN0eC50ZXhTdWJJbWFnZTJEKHRhcmdldCxsZXZlbCx4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0LGZvcm1hdCx0eXBlLGhlYXAscGl4ZWxzPj5oZWFwQWNjZXNzU2hpZnRGb3JXZWJHTEhlYXAoaGVhcCkpfWVsc2V7R0xjdHgudGV4U3ViSW1hZ2UyRCh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCxmb3JtYXQsdHlwZSxudWxsKX1yZXR1cm59dmFyIHBpeGVsRGF0YT1udWxsO2lmKHBpeGVscylwaXhlbERhdGE9ZW1zY3JpcHRlbldlYkdMR2V0VGV4UGl4ZWxEYXRhKHR5cGUsZm9ybWF0LHdpZHRoLGhlaWdodCxwaXhlbHMsMCk7R0xjdHgudGV4U3ViSW1hZ2UyRCh0YXJnZXQsbGV2ZWwseG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCxmb3JtYXQsdHlwZSxwaXhlbERhdGEpfWZ1bmN0aW9uIF9nbFRleFN1YkltYWdlM0QodGFyZ2V0LGxldmVsLHhvZmZzZXQseW9mZnNldCx6b2Zmc2V0LHdpZHRoLGhlaWdodCxkZXB0aCxmb3JtYXQsdHlwZSxwaXhlbHMpe2lmKEdMY3R4LmN1cnJlbnRQaXhlbFVucGFja0J1ZmZlckJpbmRpbmcpe0dMY3R4WyJ0ZXhTdWJJbWFnZTNEIl0odGFyZ2V0LGxldmVsLHhvZmZzZXQseW9mZnNldCx6b2Zmc2V0LHdpZHRoLGhlaWdodCxkZXB0aCxmb3JtYXQsdHlwZSxwaXhlbHMpfWVsc2UgaWYocGl4ZWxzKXt2YXIgaGVhcD1oZWFwT2JqZWN0Rm9yV2ViR0xUeXBlKHR5cGUpO0dMY3R4WyJ0ZXhTdWJJbWFnZTNEIl0odGFyZ2V0LGxldmVsLHhvZmZzZXQseW9mZnNldCx6b2Zmc2V0LHdpZHRoLGhlaWdodCxkZXB0aCxmb3JtYXQsdHlwZSxoZWFwLHBpeGVscz4+aGVhcEFjY2Vzc1NoaWZ0Rm9yV2ViR0xIZWFwKGhlYXApKX1lbHNle0dMY3R4WyJ0ZXhTdWJJbWFnZTNEIl0odGFyZ2V0LGxldmVsLHhvZmZzZXQseW9mZnNldCx6b2Zmc2V0LHdpZHRoLGhlaWdodCxkZXB0aCxmb3JtYXQsdHlwZSxudWxsKX19ZnVuY3Rpb24gX2dsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLGNvdW50LHZhcnlpbmdzLGJ1ZmZlck1vZGUpe3Byb2dyYW09R0wucHJvZ3JhbXNbcHJvZ3JhbV07dmFyIHZhcnM9W107Zm9yKHZhciBpPTA7aTxjb3VudDtpKyspdmFycy5wdXNoKFVURjhUb1N0cmluZyhIRUFQMzJbdmFyeWluZ3MraSo0Pj4yXSkpO0dMY3R4WyJ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzIl0ocHJvZ3JhbSx2YXJzLGJ1ZmZlck1vZGUpfXZhciBtaW5pVGVtcFdlYkdMRmxvYXRCdWZmZXJzPVtdO2Z1bmN0aW9uIF9nbFVuaWZvcm0xZnYobG9jYXRpb24sY291bnQsdmFsdWUpe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe0dMY3R4LnVuaWZvcm0xZnYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLEhFQVBGMzIsdmFsdWU+PjIsY291bnQpO3JldHVybn1pZihjb3VudDw9Mjg4KXt2YXIgdmlldz1taW5pVGVtcFdlYkdMRmxvYXRCdWZmZXJzW2NvdW50LTFdO2Zvcih2YXIgaT0wO2k8Y291bnQ7KytpKXt2aWV3W2ldPUhFQVBGMzJbdmFsdWUrNCppPj4yXX19ZWxzZXt2YXIgdmlldz1IRUFQRjMyLnN1YmFycmF5KHZhbHVlPj4yLHZhbHVlK2NvdW50KjQ+PjIpfUdMY3R4LnVuaWZvcm0xZnYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLHZpZXcpfWZ1bmN0aW9uIF9nbFVuaWZvcm0xaShsb2NhdGlvbix2MCl7R0xjdHgudW5pZm9ybTFpKHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSx2MCl9dmFyIF9fbWluaVRlbXBXZWJHTEludEJ1ZmZlcnM9W107ZnVuY3Rpb24gX2dsVW5pZm9ybTFpdihsb2NhdGlvbixjb3VudCx2YWx1ZSl7aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbj49Mil7R0xjdHgudW5pZm9ybTFpdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksSEVBUDMyLHZhbHVlPj4yLGNvdW50KTtyZXR1cm59aWYoY291bnQ8PTI4OCl7dmFyIHZpZXc9X19taW5pVGVtcFdlYkdMSW50QnVmZmVyc1tjb3VudC0xXTtmb3IodmFyIGk9MDtpPGNvdW50OysraSl7dmlld1tpXT1IRUFQMzJbdmFsdWUrNCppPj4yXX19ZWxzZXt2YXIgdmlldz1IRUFQMzIuc3ViYXJyYXkodmFsdWU+PjIsdmFsdWUrY291bnQqND4+Mil9R0xjdHgudW5pZm9ybTFpdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksdmlldyl9ZnVuY3Rpb24gX2dsVW5pZm9ybTF1aXYobG9jYXRpb24sY291bnQsdmFsdWUpe0dMY3R4LnVuaWZvcm0xdWl2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSxIRUFQVTMyLHZhbHVlPj4yLGNvdW50KX1mdW5jdGlvbiBfZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLGNvdW50LHZhbHVlKXtpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtHTGN0eC51bmlmb3JtMmZ2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSxIRUFQRjMyLHZhbHVlPj4yLGNvdW50KjIpO3JldHVybn1pZihjb3VudDw9MTQ0KXt2YXIgdmlldz1taW5pVGVtcFdlYkdMRmxvYXRCdWZmZXJzWzIqY291bnQtMV07Zm9yKHZhciBpPTA7aTwyKmNvdW50O2krPTIpe3ZpZXdbaV09SEVBUEYzMlt2YWx1ZSs0Kmk+PjJdO3ZpZXdbaSsxXT1IRUFQRjMyW3ZhbHVlKyg0KmkrNCk+PjJdfX1lbHNle3ZhciB2aWV3PUhFQVBGMzIuc3ViYXJyYXkodmFsdWU+PjIsdmFsdWUrY291bnQqOD4+Mil9R0xjdHgudW5pZm9ybTJmdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksdmlldyl9ZnVuY3Rpb24gX2dsVW5pZm9ybTJpdihsb2NhdGlvbixjb3VudCx2YWx1ZSl7aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbj49Mil7R0xjdHgudW5pZm9ybTJpdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksSEVBUDMyLHZhbHVlPj4yLGNvdW50KjIpO3JldHVybn1pZihjb3VudDw9MTQ0KXt2YXIgdmlldz1fX21pbmlUZW1wV2ViR0xJbnRCdWZmZXJzWzIqY291bnQtMV07Zm9yKHZhciBpPTA7aTwyKmNvdW50O2krPTIpe3ZpZXdbaV09SEVBUDMyW3ZhbHVlKzQqaT4+Ml07dmlld1tpKzFdPUhFQVAzMlt2YWx1ZSsoNCppKzQpPj4yXX19ZWxzZXt2YXIgdmlldz1IRUFQMzIuc3ViYXJyYXkodmFsdWU+PjIsdmFsdWUrY291bnQqOD4+Mil9R0xjdHgudW5pZm9ybTJpdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksdmlldyl9ZnVuY3Rpb24gX2dsVW5pZm9ybTJ1aXYobG9jYXRpb24sY291bnQsdmFsdWUpe0dMY3R4LnVuaWZvcm0ydWl2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSxIRUFQVTMyLHZhbHVlPj4yLGNvdW50KjIpfWZ1bmN0aW9uIF9nbFVuaWZvcm0zZnYobG9jYXRpb24sY291bnQsdmFsdWUpe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe0dMY3R4LnVuaWZvcm0zZnYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLEhFQVBGMzIsdmFsdWU+PjIsY291bnQqMyk7cmV0dXJufWlmKGNvdW50PD05Nil7dmFyIHZpZXc9bWluaVRlbXBXZWJHTEZsb2F0QnVmZmVyc1szKmNvdW50LTFdO2Zvcih2YXIgaT0wO2k8Mypjb3VudDtpKz0zKXt2aWV3W2ldPUhFQVBGMzJbdmFsdWUrNCppPj4yXTt2aWV3W2krMV09SEVBUEYzMlt2YWx1ZSsoNCppKzQpPj4yXTt2aWV3W2krMl09SEVBUEYzMlt2YWx1ZSsoNCppKzgpPj4yXX19ZWxzZXt2YXIgdmlldz1IRUFQRjMyLnN1YmFycmF5KHZhbHVlPj4yLHZhbHVlK2NvdW50KjEyPj4yKX1HTGN0eC51bmlmb3JtM2Z2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSx2aWV3KX1mdW5jdGlvbiBfZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLGNvdW50LHZhbHVlKXtpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtHTGN0eC51bmlmb3JtM2l2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSxIRUFQMzIsdmFsdWU+PjIsY291bnQqMyk7cmV0dXJufWlmKGNvdW50PD05Nil7dmFyIHZpZXc9X19taW5pVGVtcFdlYkdMSW50QnVmZmVyc1szKmNvdW50LTFdO2Zvcih2YXIgaT0wO2k8Mypjb3VudDtpKz0zKXt2aWV3W2ldPUhFQVAzMlt2YWx1ZSs0Kmk+PjJdO3ZpZXdbaSsxXT1IRUFQMzJbdmFsdWUrKDQqaSs0KT4+Ml07dmlld1tpKzJdPUhFQVAzMlt2YWx1ZSsoNCppKzgpPj4yXX19ZWxzZXt2YXIgdmlldz1IRUFQMzIuc3ViYXJyYXkodmFsdWU+PjIsdmFsdWUrY291bnQqMTI+PjIpfUdMY3R4LnVuaWZvcm0zaXYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLHZpZXcpfWZ1bmN0aW9uIF9nbFVuaWZvcm0zdWl2KGxvY2F0aW9uLGNvdW50LHZhbHVlKXtHTGN0eC51bmlmb3JtM3Vpdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksSEVBUFUzMix2YWx1ZT4+Mixjb3VudCozKX1mdW5jdGlvbiBfZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLGNvdW50LHZhbHVlKXtpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtHTGN0eC51bmlmb3JtNGZ2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSxIRUFQRjMyLHZhbHVlPj4yLGNvdW50KjQpO3JldHVybn1pZihjb3VudDw9NzIpe3ZhciB2aWV3PW1pbmlUZW1wV2ViR0xGbG9hdEJ1ZmZlcnNbNCpjb3VudC0xXTt2YXIgaGVhcD1IRUFQRjMyO3ZhbHVlPj49Mjtmb3IodmFyIGk9MDtpPDQqY291bnQ7aSs9NCl7dmFyIGRzdD12YWx1ZStpO3ZpZXdbaV09aGVhcFtkc3RdO3ZpZXdbaSsxXT1oZWFwW2RzdCsxXTt2aWV3W2krMl09aGVhcFtkc3QrMl07dmlld1tpKzNdPWhlYXBbZHN0KzNdfX1lbHNle3ZhciB2aWV3PUhFQVBGMzIuc3ViYXJyYXkodmFsdWU+PjIsdmFsdWUrY291bnQqMTY+PjIpfUdMY3R4LnVuaWZvcm00ZnYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLHZpZXcpfWZ1bmN0aW9uIF9nbFVuaWZvcm00aXYobG9jYXRpb24sY291bnQsdmFsdWUpe2lmKEdMLmN1cnJlbnRDb250ZXh0LnZlcnNpb24+PTIpe0dMY3R4LnVuaWZvcm00aXYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLEhFQVAzMix2YWx1ZT4+Mixjb3VudCo0KTtyZXR1cm59aWYoY291bnQ8PTcyKXt2YXIgdmlldz1fX21pbmlUZW1wV2ViR0xJbnRCdWZmZXJzWzQqY291bnQtMV07Zm9yKHZhciBpPTA7aTw0KmNvdW50O2krPTQpe3ZpZXdbaV09SEVBUDMyW3ZhbHVlKzQqaT4+Ml07dmlld1tpKzFdPUhFQVAzMlt2YWx1ZSsoNCppKzQpPj4yXTt2aWV3W2krMl09SEVBUDMyW3ZhbHVlKyg0KmkrOCk+PjJdO3ZpZXdbaSszXT1IRUFQMzJbdmFsdWUrKDQqaSsxMik+PjJdfX1lbHNle3ZhciB2aWV3PUhFQVAzMi5zdWJhcnJheSh2YWx1ZT4+Mix2YWx1ZStjb3VudCoxNj4+Mil9R0xjdHgudW5pZm9ybTRpdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksdmlldyl9ZnVuY3Rpb24gX2dsVW5pZm9ybTR1aXYobG9jYXRpb24sY291bnQsdmFsdWUpe0dMY3R4LnVuaWZvcm00dWl2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSxIRUFQVTMyLHZhbHVlPj4yLGNvdW50KjQpfWZ1bmN0aW9uIF9nbFVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3JhbSx1bmlmb3JtQmxvY2tJbmRleCx1bmlmb3JtQmxvY2tCaW5kaW5nKXtwcm9ncmFtPUdMLnByb2dyYW1zW3Byb2dyYW1dO0dMY3R4WyJ1bmlmb3JtQmxvY2tCaW5kaW5nIl0ocHJvZ3JhbSx1bmlmb3JtQmxvY2tJbmRleCx1bmlmb3JtQmxvY2tCaW5kaW5nKX1mdW5jdGlvbiBfZ2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLGNvdW50LHRyYW5zcG9zZSx2YWx1ZSl7aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbj49Mil7R0xjdHgudW5pZm9ybU1hdHJpeDNmdih3ZWJnbEdldFVuaWZvcm1Mb2NhdGlvbihsb2NhdGlvbiksISF0cmFuc3Bvc2UsSEVBUEYzMix2YWx1ZT4+Mixjb3VudCo5KTtyZXR1cm59aWYoY291bnQ8PTMyKXt2YXIgdmlldz1taW5pVGVtcFdlYkdMRmxvYXRCdWZmZXJzWzkqY291bnQtMV07Zm9yKHZhciBpPTA7aTw5KmNvdW50O2krPTkpe3ZpZXdbaV09SEVBUEYzMlt2YWx1ZSs0Kmk+PjJdO3ZpZXdbaSsxXT1IRUFQRjMyW3ZhbHVlKyg0KmkrNCk+PjJdO3ZpZXdbaSsyXT1IRUFQRjMyW3ZhbHVlKyg0KmkrOCk+PjJdO3ZpZXdbaSszXT1IRUFQRjMyW3ZhbHVlKyg0KmkrMTIpPj4yXTt2aWV3W2krNF09SEVBUEYzMlt2YWx1ZSsoNCppKzE2KT4+Ml07dmlld1tpKzVdPUhFQVBGMzJbdmFsdWUrKDQqaSsyMCk+PjJdO3ZpZXdbaSs2XT1IRUFQRjMyW3ZhbHVlKyg0KmkrMjQpPj4yXTt2aWV3W2krN109SEVBUEYzMlt2YWx1ZSsoNCppKzI4KT4+Ml07dmlld1tpKzhdPUhFQVBGMzJbdmFsdWUrKDQqaSszMik+PjJdfX1lbHNle3ZhciB2aWV3PUhFQVBGMzIuc3ViYXJyYXkodmFsdWU+PjIsdmFsdWUrY291bnQqMzY+PjIpfUdMY3R4LnVuaWZvcm1NYXRyaXgzZnYod2ViZ2xHZXRVbmlmb3JtTG9jYXRpb24obG9jYXRpb24pLCEhdHJhbnNwb3NlLHZpZXcpfWZ1bmN0aW9uIF9nbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sY291bnQsdHJhbnNwb3NlLHZhbHVlKXtpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtHTGN0eC51bmlmb3JtTWF0cml4NGZ2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSwhIXRyYW5zcG9zZSxIRUFQRjMyLHZhbHVlPj4yLGNvdW50KjE2KTtyZXR1cm59aWYoY291bnQ8PTE4KXt2YXIgdmlldz1taW5pVGVtcFdlYkdMRmxvYXRCdWZmZXJzWzE2KmNvdW50LTFdO3ZhciBoZWFwPUhFQVBGMzI7dmFsdWU+Pj0yO2Zvcih2YXIgaT0wO2k8MTYqY291bnQ7aSs9MTYpe3ZhciBkc3Q9dmFsdWUraTt2aWV3W2ldPWhlYXBbZHN0XTt2aWV3W2krMV09aGVhcFtkc3QrMV07dmlld1tpKzJdPWhlYXBbZHN0KzJdO3ZpZXdbaSszXT1oZWFwW2RzdCszXTt2aWV3W2krNF09aGVhcFtkc3QrNF07dmlld1tpKzVdPWhlYXBbZHN0KzVdO3ZpZXdbaSs2XT1oZWFwW2RzdCs2XTt2aWV3W2krN109aGVhcFtkc3QrN107dmlld1tpKzhdPWhlYXBbZHN0KzhdO3ZpZXdbaSs5XT1oZWFwW2RzdCs5XTt2aWV3W2krMTBdPWhlYXBbZHN0KzEwXTt2aWV3W2krMTFdPWhlYXBbZHN0KzExXTt2aWV3W2krMTJdPWhlYXBbZHN0KzEyXTt2aWV3W2krMTNdPWhlYXBbZHN0KzEzXTt2aWV3W2krMTRdPWhlYXBbZHN0KzE0XTt2aWV3W2krMTVdPWhlYXBbZHN0KzE1XX19ZWxzZXt2YXIgdmlldz1IRUFQRjMyLnN1YmFycmF5KHZhbHVlPj4yLHZhbHVlK2NvdW50KjY0Pj4yKX1HTGN0eC51bmlmb3JtTWF0cml4NGZ2KHdlYmdsR2V0VW5pZm9ybUxvY2F0aW9uKGxvY2F0aW9uKSwhIXRyYW5zcG9zZSx2aWV3KX1mdW5jdGlvbiBfZ2xVbm1hcEJ1ZmZlcih0YXJnZXQpe2lmKCFlbXNjcmlwdGVuV2ViR0xWYWxpZGF0ZU1hcEJ1ZmZlclRhcmdldCh0YXJnZXQpKXtHTC5yZWNvcmRFcnJvcigxMjgwKTtlcnIoIkdMX0lOVkFMSURfRU5VTSBpbiBnbFVubWFwQnVmZmVyIik7cmV0dXJuIDB9dmFyIGJ1ZmZlcj1lbXNjcmlwdGVuV2ViR0xHZXRCdWZmZXJCaW5kaW5nKHRhcmdldCk7dmFyIG1hcHBpbmc9R0wubWFwcGVkQnVmZmVyc1tidWZmZXJdO2lmKCFtYXBwaW5nKXtHTC5yZWNvcmRFcnJvcigxMjgyKTtlcnIoImJ1ZmZlciB3YXMgbmV2ZXIgbWFwcGVkIGluIGdsVW5tYXBCdWZmZXIiKTtyZXR1cm4gMH1HTC5tYXBwZWRCdWZmZXJzW2J1ZmZlcl09bnVsbDtpZighKG1hcHBpbmcuYWNjZXNzJjE2KSlpZihHTC5jdXJyZW50Q29udGV4dC52ZXJzaW9uPj0yKXtHTGN0eC5idWZmZXJTdWJEYXRhKHRhcmdldCxtYXBwaW5nLm9mZnNldCxIRUFQVTgsbWFwcGluZy5tZW0sbWFwcGluZy5sZW5ndGgpfWVsc2V7R0xjdHguYnVmZmVyU3ViRGF0YSh0YXJnZXQsbWFwcGluZy5vZmZzZXQsSEVBUFU4LnN1YmFycmF5KG1hcHBpbmcubWVtLG1hcHBpbmcubWVtK21hcHBpbmcubGVuZ3RoKSl9X2ZyZWUobWFwcGluZy5tZW0pO3JldHVybiAxfWZ1bmN0aW9uIHdlYmdsQXBwbHlFeHBsaWNpdFByb2dyYW1CaW5kaW5ncygpe3ZhciBwPUdMY3R4LmN1cnJlbnRQcm9ncmFtO2lmKCFwLmV4cGxpY2l0UHJvZ3JhbUJpbmRpbmdzQXBwbGllZCl7aWYoR0wuY3VycmVudENvbnRleHQudmVyc2lvbj49Mil7T2JqZWN0LmtleXMocC5leHBsaWNpdFVuaWZvcm1CaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbih1Ym8pe3ZhciBiaW5kaW5ncz1wLmV4cGxpY2l0VW5pZm9ybUJpbmRpbmdzW3Vib107Zm9yKHZhciBpPTA7aTxiaW5kaW5nc1sxXTsrK2kpe3ZhciBibG9ja0luZGV4PUdMY3R4LmdldFVuaWZvcm1CbG9ja0luZGV4KHAsdWJvKyhiaW5kaW5nc1sxXT4xPyJbIitpKyJdIjoiIikpO0dMY3R4LnVuaWZvcm1CbG9ja0JpbmRpbmcocCxibG9ja0luZGV4LGJpbmRpbmdzWzBdK2kpfX0pfU9iamVjdC5rZXlzKHAuZXhwbGljaXRTYW1wbGVyQmluZGluZ3MpLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlcil7dmFyIGJpbmRpbmdzPXAuZXhwbGljaXRTYW1wbGVyQmluZGluZ3Nbc2FtcGxlcl07Zm9yKHZhciBpPTA7aTxiaW5kaW5nc1sxXTsrK2kpe0dMY3R4LnVuaWZvcm0xaShHTGN0eC5nZXRVbmlmb3JtTG9jYXRpb24ocCxzYW1wbGVyKyhpPyJbIitpKyJdIjoiIikpLGJpbmRpbmdzWzBdK2kpfX0pO3AuZXhwbGljaXRQcm9ncmFtQmluZGluZ3NBcHBsaWVkPTF9fWZ1bmN0aW9uIF9nbFVzZVByb2dyYW0ocHJvZ3JhbSl7cHJvZ3JhbT1HTC5wcm9ncmFtc1twcm9ncmFtXTtHTGN0eC51c2VQcm9ncmFtKHByb2dyYW0pO2lmKEdMY3R4LmN1cnJlbnRQcm9ncmFtPXByb2dyYW0pe3dlYmdsQXBwbHlFeHBsaWNpdFByb2dyYW1CaW5kaW5ncygpfX1mdW5jdGlvbiBfZ2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSl7R0xjdHgudmFsaWRhdGVQcm9ncmFtKEdMLnByb2dyYW1zW3Byb2dyYW1dKX1mdW5jdGlvbiBfZ2xWZXJ0ZXhBdHRyaWI0Zih4MCx4MSx4Mix4Myx4NCl7R0xjdHhbInZlcnRleEF0dHJpYjRmIl0oeDAseDEseDIseDMseDQpfWZ1bmN0aW9uIF9nbFZlcnRleEF0dHJpYjRmdihpbmRleCx2KXtHTGN0eC52ZXJ0ZXhBdHRyaWI0ZihpbmRleCxIRUFQRjMyW3Y+PjJdLEhFQVBGMzJbdis0Pj4yXSxIRUFQRjMyW3YrOD4+Ml0sSEVBUEYzMlt2KzEyPj4yXSl9ZnVuY3Rpb24gX2dsVmVydGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsc2l6ZSx0eXBlLHN0cmlkZSxwdHIpe3ZhciBjYj1HTC5jdXJyZW50Q29udGV4dC5jbGllbnRCdWZmZXJzW2luZGV4XTtpZighR0xjdHguY3VycmVudEFycmF5QnVmZmVyQmluZGluZyl7Y2Iuc2l6ZT1zaXplO2NiLnR5cGU9dHlwZTtjYi5ub3JtYWxpemVkPWZhbHNlO2NiLnN0cmlkZT1zdHJpZGU7Y2IucHRyPXB0cjtjYi5jbGllbnRzaWRlPXRydWU7Y2IudmVydGV4QXR0cmliUG9pbnRlckFkYXB0b3I9ZnVuY3Rpb24oaW5kZXgsc2l6ZSx0eXBlLG5vcm1hbGl6ZWQsc3RyaWRlLHB0cil7dGhpcy52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCxzaXplLHR5cGUsc3RyaWRlLHB0cil9O3JldHVybn1jYi5jbGllbnRzaWRlPWZhbHNlO0dMY3R4WyJ2ZXJ0ZXhBdHRyaWJJUG9pbnRlciJdKGluZGV4LHNpemUsdHlwZSxzdHJpZGUscHRyKX1mdW5jdGlvbiBfZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LHNpemUsdHlwZSxub3JtYWxpemVkLHN0cmlkZSxwdHIpe3ZhciBjYj1HTC5jdXJyZW50Q29udGV4dC5jbGllbnRCdWZmZXJzW2luZGV4XTtpZighR0xjdHguY3VycmVudEFycmF5QnVmZmVyQmluZGluZyl7Y2Iuc2l6ZT1zaXplO2NiLnR5cGU9dHlwZTtjYi5ub3JtYWxpemVkPW5vcm1hbGl6ZWQ7Y2Iuc3RyaWRlPXN0cmlkZTtjYi5wdHI9cHRyO2NiLmNsaWVudHNpZGU9dHJ1ZTtjYi52ZXJ0ZXhBdHRyaWJQb2ludGVyQWRhcHRvcj1mdW5jdGlvbihpbmRleCxzaXplLHR5cGUsbm9ybWFsaXplZCxzdHJpZGUscHRyKXt0aGlzLnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsc2l6ZSx0eXBlLG5vcm1hbGl6ZWQsc3RyaWRlLHB0cil9O3JldHVybn1jYi5jbGllbnRzaWRlPWZhbHNlO0dMY3R4LnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsc2l6ZSx0eXBlLCEhbm9ybWFsaXplZCxzdHJpZGUscHRyKX1mdW5jdGlvbiBfZ2xWaWV3cG9ydCh4MCx4MSx4Mix4Myl7R0xjdHhbInZpZXdwb3J0Il0oeDAseDEseDIseDMpfWZ1bmN0aW9uIF9sbHZtX2VoX3R5cGVpZF9mb3IodHlwZSl7cmV0dXJuIHR5cGV9ZnVuY3Rpb24gX21rdGltZSh0bVB0cil7X3R6c2V0KCk7dmFyIGRhdGU9bmV3IERhdGUoSEVBUDMyW3RtUHRyKzIwPj4yXSsxOTAwLEhFQVAzMlt0bVB0cisxNj4+Ml0sSEVBUDMyW3RtUHRyKzEyPj4yXSxIRUFQMzJbdG1QdHIrOD4+Ml0sSEVBUDMyW3RtUHRyKzQ+PjJdLEhFQVAzMlt0bVB0cj4+Ml0sMCk7dmFyIGRzdD1IRUFQMzJbdG1QdHIrMzI+PjJdO3ZhciBndWVzc2VkT2Zmc2V0PWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgc3RhcnQ9bmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLDAsMSk7dmFyIHN1bW1lck9mZnNldD1uZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksNiwxKS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciB3aW50ZXJPZmZzZXQ9c3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgZHN0T2Zmc2V0PU1hdGgubWluKHdpbnRlck9mZnNldCxzdW1tZXJPZmZzZXQpO2lmKGRzdDwwKXtIRUFQMzJbdG1QdHIrMzI+PjJdPU51bWJlcihzdW1tZXJPZmZzZXQhPXdpbnRlck9mZnNldCYmZHN0T2Zmc2V0PT1ndWVzc2VkT2Zmc2V0KX1lbHNlIGlmKGRzdD4wIT0oZHN0T2Zmc2V0PT1ndWVzc2VkT2Zmc2V0KSl7dmFyIG5vbkRzdE9mZnNldD1NYXRoLm1heCh3aW50ZXJPZmZzZXQsc3VtbWVyT2Zmc2V0KTt2YXIgdHJ1ZU9mZnNldD1kc3Q+MD9kc3RPZmZzZXQ6bm9uRHN0T2Zmc2V0O2RhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSsodHJ1ZU9mZnNldC1ndWVzc2VkT2Zmc2V0KSo2ZTQpfUhFQVAzMlt0bVB0cisyND4+Ml09ZGF0ZS5nZXREYXkoKTt2YXIgeWRheT0oZGF0ZS5nZXRUaW1lKCktc3RhcnQuZ2V0VGltZSgpKS8oMWUzKjYwKjYwKjI0KXwwO0hFQVAzMlt0bVB0cisyOD4+Ml09eWRheTtIRUFQMzJbdG1QdHI+PjJdPWRhdGUuZ2V0U2Vjb25kcygpO0hFQVAzMlt0bVB0cis0Pj4yXT1kYXRlLmdldE1pbnV0ZXMoKTtIRUFQMzJbdG1QdHIrOD4+Ml09ZGF0ZS5nZXRIb3VycygpO0hFQVAzMlt0bVB0cisxMj4+Ml09ZGF0ZS5nZXREYXRlKCk7SEVBUDMyW3RtUHRyKzE2Pj4yXT1kYXRlLmdldE1vbnRoKCk7cmV0dXJuIGRhdGUuZ2V0VGltZSgpLzFlM3wwfWZ1bmN0aW9uIF9zZXRUZW1wUmV0MCh2YWwpe3NldFRlbXBSZXQwKHZhbCl9ZnVuY3Rpb24gX19pc0xlYXBZZWFyKHllYXIpe3JldHVybiB5ZWFyJTQ9PT0wJiYoeWVhciUxMDAhPT0wfHx5ZWFyJTQwMD09PTApfWZ1bmN0aW9uIF9fYXJyYXlTdW0oYXJyYXksaW5kZXgpe3ZhciBzdW09MDtmb3IodmFyIGk9MDtpPD1pbmRleDtzdW0rPWFycmF5W2krK10pe31yZXR1cm4gc3VtfXZhciBfX01PTlRIX0RBWVNfTEVBUD1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO3ZhciBfX01PTlRIX0RBWVNfUkVHVUxBUj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO2Z1bmN0aW9uIF9fYWRkRGF5cyhkYXRlLGRheXMpe3ZhciBuZXdEYXRlPW5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTt3aGlsZShkYXlzPjApe3ZhciBsZWFwPV9faXNMZWFwWWVhcihuZXdEYXRlLmdldEZ1bGxZZWFyKCkpO3ZhciBjdXJyZW50TW9udGg9bmV3RGF0ZS5nZXRNb250aCgpO3ZhciBkYXlzSW5DdXJyZW50TW9udGg9KGxlYXA/X19NT05USF9EQVlTX0xFQVA6X19NT05USF9EQVlTX1JFR1VMQVIpW2N1cnJlbnRNb250aF07aWYoZGF5cz5kYXlzSW5DdXJyZW50TW9udGgtbmV3RGF0ZS5nZXREYXRlKCkpe2RheXMtPWRheXNJbkN1cnJlbnRNb250aC1uZXdEYXRlLmdldERhdGUoKSsxO25ld0RhdGUuc2V0RGF0ZSgxKTtpZihjdXJyZW50TW9udGg8MTEpe25ld0RhdGUuc2V0TW9udGgoY3VycmVudE1vbnRoKzEpfWVsc2V7bmV3RGF0ZS5zZXRNb250aCgwKTtuZXdEYXRlLnNldEZ1bGxZZWFyKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSsxKX19ZWxzZXtuZXdEYXRlLnNldERhdGUobmV3RGF0ZS5nZXREYXRlKCkrZGF5cyk7cmV0dXJuIG5ld0RhdGV9fXJldHVybiBuZXdEYXRlfWZ1bmN0aW9uIF9zdHJmdGltZShzLG1heHNpemUsZm9ybWF0LHRtKXt2YXIgdG1fem9uZT1IRUFQMzJbdG0rNDA+PjJdO3ZhciBkYXRlPXt0bV9zZWM6SEVBUDMyW3RtPj4yXSx0bV9taW46SEVBUDMyW3RtKzQ+PjJdLHRtX2hvdXI6SEVBUDMyW3RtKzg+PjJdLHRtX21kYXk6SEVBUDMyW3RtKzEyPj4yXSx0bV9tb246SEVBUDMyW3RtKzE2Pj4yXSx0bV95ZWFyOkhFQVAzMlt0bSsyMD4+Ml0sdG1fd2RheTpIRUFQMzJbdG0rMjQ+PjJdLHRtX3lkYXk6SEVBUDMyW3RtKzI4Pj4yXSx0bV9pc2RzdDpIRUFQMzJbdG0rMzI+PjJdLHRtX2dtdG9mZjpIRUFQMzJbdG0rMzY+PjJdLHRtX3pvbmU6dG1fem9uZT9VVEY4VG9TdHJpbmcodG1fem9uZSk6IiJ9O3ZhciBwYXR0ZXJuPVVURjhUb1N0cmluZyhmb3JtYXQpO3ZhciBFWFBBTlNJT05fUlVMRVNfMT17IiVjIjoiJWEgJWIgJWQgJUg6JU06JVMgJVkiLCIlRCI6IiVtLyVkLyV5IiwiJUYiOiIlWS0lbS0lZCIsIiVoIjoiJWIiLCIlciI6IiVJOiVNOiVTICVwIiwiJVIiOiIlSDolTSIsIiVUIjoiJUg6JU06JVMiLCIleCI6IiVtLyVkLyV5IiwiJVgiOiIlSDolTTolUyIsIiVFYyI6IiVjIiwiJUVDIjoiJUMiLCIlRXgiOiIlbS8lZC8leSIsIiVFWCI6IiVIOiVNOiVTIiwiJUV5IjoiJXkiLCIlRVkiOiIlWSIsIiVPZCI6IiVkIiwiJU9lIjoiJWUiLCIlT0giOiIlSCIsIiVPSSI6IiVJIiwiJU9tIjoiJW0iLCIlT00iOiIlTSIsIiVPUyI6IiVTIiwiJU91IjoiJXUiLCIlT1UiOiIlVSIsIiVPViI6IiVWIiwiJU93IjoiJXciLCIlT1ciOiIlVyIsIiVPeSI6IiV5In07Zm9yKHZhciBydWxlIGluIEVYUEFOU0lPTl9SVUxFU18xKXtwYXR0ZXJuPXBhdHRlcm4ucmVwbGFjZShuZXcgUmVnRXhwKHJ1bGUsImciKSxFWFBBTlNJT05fUlVMRVNfMVtydWxlXSl9dmFyIFdFRUtEQVlTPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXTt2YXIgTU9OVEhTPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBsZWFkaW5nU29tZXRoaW5nKHZhbHVlLGRpZ2l0cyxjaGFyYWN0ZXIpe3ZhciBzdHI9dHlwZW9mIHZhbHVlPT09Im51bWJlciI/dmFsdWUudG9TdHJpbmcoKTp2YWx1ZXx8IiI7d2hpbGUoc3RyLmxlbmd0aDxkaWdpdHMpe3N0cj1jaGFyYWN0ZXJbMF0rc3RyfXJldHVybiBzdHJ9ZnVuY3Rpb24gbGVhZGluZ051bGxzKHZhbHVlLGRpZ2l0cyl7cmV0dXJuIGxlYWRpbmdTb21ldGhpbmcodmFsdWUsZGlnaXRzLCIwIil9ZnVuY3Rpb24gY29tcGFyZUJ5RGF5KGRhdGUxLGRhdGUyKXtmdW5jdGlvbiBzZ24odmFsdWUpe3JldHVybiB2YWx1ZTwwPy0xOnZhbHVlPjA/MTowfXZhciBjb21wYXJlO2lmKChjb21wYXJlPXNnbihkYXRlMS5nZXRGdWxsWWVhcigpLWRhdGUyLmdldEZ1bGxZZWFyKCkpKT09PTApe2lmKChjb21wYXJlPXNnbihkYXRlMS5nZXRNb250aCgpLWRhdGUyLmdldE1vbnRoKCkpKT09PTApe2NvbXBhcmU9c2duKGRhdGUxLmdldERhdGUoKS1kYXRlMi5nZXREYXRlKCkpfX1yZXR1cm4gY29tcGFyZX1mdW5jdGlvbiBnZXRGaXJzdFdlZWtTdGFydERhdGUoamFuRm91cnRoKXtzd2l0Y2goamFuRm91cnRoLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKGphbkZvdXJ0aC5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gamFuRm91cnRoO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoamFuRm91cnRoLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKGphbkZvdXJ0aC5nZXRGdWxsWWVhcigpLDAsMik7Y2FzZSA0OnJldHVybiBuZXcgRGF0ZShqYW5Gb3VydGguZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoamFuRm91cnRoLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShqYW5Gb3VydGguZ2V0RnVsbFllYXIoKS0xLDExLDMwKX19ZnVuY3Rpb24gZ2V0V2Vla0Jhc2VkWWVhcihkYXRlKXt2YXIgdGhpc0RhdGU9X19hZGREYXlzKG5ldyBEYXRlKGRhdGUudG1feWVhcisxOTAwLDAsMSksZGF0ZS50bV95ZGF5KTt2YXIgamFuRm91cnRoVGhpc1llYXI9bmV3IERhdGUodGhpc0RhdGUuZ2V0RnVsbFllYXIoKSwwLDQpO3ZhciBqYW5Gb3VydGhOZXh0WWVhcj1uZXcgRGF0ZSh0aGlzRGF0ZS5nZXRGdWxsWWVhcigpKzEsMCw0KTt2YXIgZmlyc3RXZWVrU3RhcnRUaGlzWWVhcj1nZXRGaXJzdFdlZWtTdGFydERhdGUoamFuRm91cnRoVGhpc1llYXIpO3ZhciBmaXJzdFdlZWtTdGFydE5leHRZZWFyPWdldEZpcnN0V2Vla1N0YXJ0RGF0ZShqYW5Gb3VydGhOZXh0WWVhcik7aWYoY29tcGFyZUJ5RGF5KGZpcnN0V2Vla1N0YXJ0VGhpc1llYXIsdGhpc0RhdGUpPD0wKXtpZihjb21wYXJlQnlEYXkoZmlyc3RXZWVrU3RhcnROZXh0WWVhcix0aGlzRGF0ZSk8PTApe3JldHVybiB0aGlzRGF0ZS5nZXRGdWxsWWVhcigpKzF9ZWxzZXtyZXR1cm4gdGhpc0RhdGUuZ2V0RnVsbFllYXIoKX19ZWxzZXtyZXR1cm4gdGhpc0RhdGUuZ2V0RnVsbFllYXIoKS0xfX12YXIgRVhQQU5TSU9OX1JVTEVTXzI9eyIlYSI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIFdFRUtEQVlTW2RhdGUudG1fd2RheV0uc3Vic3RyaW5nKDAsMyl9LCIlQSI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIFdFRUtEQVlTW2RhdGUudG1fd2RheV19LCIlYiI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIE1PTlRIU1tkYXRlLnRtX21vbl0uc3Vic3RyaW5nKDAsMyl9LCIlQiI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIE1PTlRIU1tkYXRlLnRtX21vbl19LCIlQyI6ZnVuY3Rpb24oZGF0ZSl7dmFyIHllYXI9ZGF0ZS50bV95ZWFyKzE5MDA7cmV0dXJuIGxlYWRpbmdOdWxscyh5ZWFyLzEwMHwwLDIpfSwiJWQiOmZ1bmN0aW9uKGRhdGUpe3JldHVybiBsZWFkaW5nTnVsbHMoZGF0ZS50bV9tZGF5LDIpfSwiJWUiOmZ1bmN0aW9uKGRhdGUpe3JldHVybiBsZWFkaW5nU29tZXRoaW5nKGRhdGUudG1fbWRheSwyLCIgIil9LCIlZyI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGdldFdlZWtCYXNlZFllYXIoZGF0ZSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlRyI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGdldFdlZWtCYXNlZFllYXIoZGF0ZSl9LCIlSCI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGxlYWRpbmdOdWxscyhkYXRlLnRtX2hvdXIsMil9LCIlSSI6ZnVuY3Rpb24oZGF0ZSl7dmFyIHR3ZWx2ZUhvdXI9ZGF0ZS50bV9ob3VyO2lmKHR3ZWx2ZUhvdXI9PTApdHdlbHZlSG91cj0xMjtlbHNlIGlmKHR3ZWx2ZUhvdXI+MTIpdHdlbHZlSG91ci09MTI7cmV0dXJuIGxlYWRpbmdOdWxscyh0d2VsdmVIb3VyLDIpfSwiJWoiOmZ1bmN0aW9uKGRhdGUpe3JldHVybiBsZWFkaW5nTnVsbHMoZGF0ZS50bV9tZGF5K19fYXJyYXlTdW0oX19pc0xlYXBZZWFyKGRhdGUudG1feWVhcisxOTAwKT9fX01PTlRIX0RBWVNfTEVBUDpfX01PTlRIX0RBWVNfUkVHVUxBUixkYXRlLnRtX21vbi0xKSwzKX0sIiVtIjpmdW5jdGlvbihkYXRlKXtyZXR1cm4gbGVhZGluZ051bGxzKGRhdGUudG1fbW9uKzEsMil9LCIlTSI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGxlYWRpbmdOdWxscyhkYXRlLnRtX21pbiwyKX0sIiVuIjpmdW5jdGlvbigpe3JldHVybiJcbiJ9LCIlcCI6ZnVuY3Rpb24oZGF0ZSl7aWYoZGF0ZS50bV9ob3VyPj0wJiZkYXRlLnRtX2hvdXI8MTIpe3JldHVybiJBTSJ9ZWxzZXtyZXR1cm4iUE0ifX0sIiVTIjpmdW5jdGlvbihkYXRlKXtyZXR1cm4gbGVhZGluZ051bGxzKGRhdGUudG1fc2VjLDIpfSwiJXQiOmZ1bmN0aW9uKCl7cmV0dXJuIlx0In0sIiV1IjpmdW5jdGlvbihkYXRlKXtyZXR1cm4gZGF0ZS50bV93ZGF5fHw3fSwiJVUiOmZ1bmN0aW9uKGRhdGUpe3ZhciBqYW5GaXJzdD1uZXcgRGF0ZShkYXRlLnRtX3llYXIrMTkwMCwwLDEpO3ZhciBmaXJzdFN1bmRheT1qYW5GaXJzdC5nZXREYXkoKT09PTA/amFuRmlyc3Q6X19hZGREYXlzKGphbkZpcnN0LDctamFuRmlyc3QuZ2V0RGF5KCkpO3ZhciBlbmREYXRlPW5ldyBEYXRlKGRhdGUudG1feWVhcisxOTAwLGRhdGUudG1fbW9uLGRhdGUudG1fbWRheSk7aWYoY29tcGFyZUJ5RGF5KGZpcnN0U3VuZGF5LGVuZERhdGUpPDApe3ZhciBmZWJydWFyeUZpcnN0VW50aWxFbmRNb250aD1fX2FycmF5U3VtKF9faXNMZWFwWWVhcihlbmREYXRlLmdldEZ1bGxZZWFyKCkpP19fTU9OVEhfREFZU19MRUFQOl9fTU9OVEhfREFZU19SRUdVTEFSLGVuZERhdGUuZ2V0TW9udGgoKS0xKS0zMTt2YXIgZmlyc3RTdW5kYXlVbnRpbEVuZEphbnVhcnk9MzEtZmlyc3RTdW5kYXkuZ2V0RGF0ZSgpO3ZhciBkYXlzPWZpcnN0U3VuZGF5VW50aWxFbmRKYW51YXJ5K2ZlYnJ1YXJ5Rmlyc3RVbnRpbEVuZE1vbnRoK2VuZERhdGUuZ2V0RGF0ZSgpO3JldHVybiBsZWFkaW5nTnVsbHMoTWF0aC5jZWlsKGRheXMvNyksMil9cmV0dXJuIGNvbXBhcmVCeURheShmaXJzdFN1bmRheSxqYW5GaXJzdCk9PT0wPyIwMSI6IjAwIn0sIiVWIjpmdW5jdGlvbihkYXRlKXt2YXIgamFuRm91cnRoVGhpc1llYXI9bmV3IERhdGUoZGF0ZS50bV95ZWFyKzE5MDAsMCw0KTt2YXIgamFuRm91cnRoTmV4dFllYXI9bmV3IERhdGUoZGF0ZS50bV95ZWFyKzE5MDEsMCw0KTt2YXIgZmlyc3RXZWVrU3RhcnRUaGlzWWVhcj1nZXRGaXJzdFdlZWtTdGFydERhdGUoamFuRm91cnRoVGhpc1llYXIpO3ZhciBmaXJzdFdlZWtTdGFydE5leHRZZWFyPWdldEZpcnN0V2Vla1N0YXJ0RGF0ZShqYW5Gb3VydGhOZXh0WWVhcik7dmFyIGVuZERhdGU9X19hZGREYXlzKG5ldyBEYXRlKGRhdGUudG1feWVhcisxOTAwLDAsMSksZGF0ZS50bV95ZGF5KTtpZihjb21wYXJlQnlEYXkoZW5kRGF0ZSxmaXJzdFdlZWtTdGFydFRoaXNZZWFyKTwwKXtyZXR1cm4iNTMifWlmKGNvbXBhcmVCeURheShmaXJzdFdlZWtTdGFydE5leHRZZWFyLGVuZERhdGUpPD0wKXtyZXR1cm4iMDEifXZhciBkYXlzRGlmZmVyZW5jZTtpZihmaXJzdFdlZWtTdGFydFRoaXNZZWFyLmdldEZ1bGxZZWFyKCk8ZGF0ZS50bV95ZWFyKzE5MDApe2RheXNEaWZmZXJlbmNlPWRhdGUudG1feWRheSszMi1maXJzdFdlZWtTdGFydFRoaXNZZWFyLmdldERhdGUoKX1lbHNle2RheXNEaWZmZXJlbmNlPWRhdGUudG1feWRheSsxLWZpcnN0V2Vla1N0YXJ0VGhpc1llYXIuZ2V0RGF0ZSgpfXJldHVybiBsZWFkaW5nTnVsbHMoTWF0aC5jZWlsKGRheXNEaWZmZXJlbmNlLzcpLDIpfSwiJXciOmZ1bmN0aW9uKGRhdGUpe3JldHVybiBkYXRlLnRtX3dkYXl9LCIlVyI6ZnVuY3Rpb24oZGF0ZSl7dmFyIGphbkZpcnN0PW5ldyBEYXRlKGRhdGUudG1feWVhciwwLDEpO3ZhciBmaXJzdE1vbmRheT1qYW5GaXJzdC5nZXREYXkoKT09PTE/amFuRmlyc3Q6X19hZGREYXlzKGphbkZpcnN0LGphbkZpcnN0LmdldERheSgpPT09MD8xOjctamFuRmlyc3QuZ2V0RGF5KCkrMSk7dmFyIGVuZERhdGU9bmV3IERhdGUoZGF0ZS50bV95ZWFyKzE5MDAsZGF0ZS50bV9tb24sZGF0ZS50bV9tZGF5KTtpZihjb21wYXJlQnlEYXkoZmlyc3RNb25kYXksZW5kRGF0ZSk8MCl7dmFyIGZlYnJ1YXJ5Rmlyc3RVbnRpbEVuZE1vbnRoPV9fYXJyYXlTdW0oX19pc0xlYXBZZWFyKGVuZERhdGUuZ2V0RnVsbFllYXIoKSk/X19NT05USF9EQVlTX0xFQVA6X19NT05USF9EQVlTX1JFR1VMQVIsZW5kRGF0ZS5nZXRNb250aCgpLTEpLTMxO3ZhciBmaXJzdE1vbmRheVVudGlsRW5kSmFudWFyeT0zMS1maXJzdE1vbmRheS5nZXREYXRlKCk7dmFyIGRheXM9Zmlyc3RNb25kYXlVbnRpbEVuZEphbnVhcnkrZmVicnVhcnlGaXJzdFVudGlsRW5kTW9udGgrZW5kRGF0ZS5nZXREYXRlKCk7cmV0dXJuIGxlYWRpbmdOdWxscyhNYXRoLmNlaWwoZGF5cy83KSwyKX1yZXR1cm4gY29tcGFyZUJ5RGF5KGZpcnN0TW9uZGF5LGphbkZpcnN0KT09PTA/IjAxIjoiMDAifSwiJXkiOmZ1bmN0aW9uKGRhdGUpe3JldHVybihkYXRlLnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlWSI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUudG1feWVhcisxOTAwfSwiJXoiOmZ1bmN0aW9uKGRhdGUpe3ZhciBvZmY9ZGF0ZS50bV9nbXRvZmY7dmFyIGFoZWFkPW9mZj49MDtvZmY9TWF0aC5hYnMob2ZmKS82MDtvZmY9b2ZmLzYwKjEwMCtvZmYlNjA7cmV0dXJuKGFoZWFkPyIrIjoiLSIpK1N0cmluZygiMDAwMCIrb2ZmKS5zbGljZSgtNCl9LCIlWiI6ZnVuY3Rpb24oZGF0ZSl7cmV0dXJuIGRhdGUudG1fem9uZX0sIiUlIjpmdW5jdGlvbigpe3JldHVybiIlIn19O2Zvcih2YXIgcnVsZSBpbiBFWFBBTlNJT05fUlVMRVNfMil7aWYocGF0dGVybi5pbmNsdWRlcyhydWxlKSl7cGF0dGVybj1wYXR0ZXJuLnJlcGxhY2UobmV3IFJlZ0V4cChydWxlLCJnIiksRVhQQU5TSU9OX1JVTEVTXzJbcnVsZV0oZGF0ZSkpfX12YXIgYnl0ZXM9aW50QXJyYXlGcm9tU3RyaW5nKHBhdHRlcm4sZmFsc2UpO2lmKGJ5dGVzLmxlbmd0aD5tYXhzaXplKXtyZXR1cm4gMH13cml0ZUFycmF5VG9NZW1vcnkoYnl0ZXMscyk7cmV0dXJuIGJ5dGVzLmxlbmd0aC0xfWZ1bmN0aW9uIF90aW1lKHB0cil7dmFyIHJldD1EYXRlLm5vdygpLzFlM3wwO2lmKHB0cil7SEVBUDMyW3B0cj4+Ml09cmV0fXJldHVybiByZXR9ZnVuY3Rpb24gc2V0RmlsZVRpbWUocGF0aCx0aW1lKXtwYXRoPVVURjhUb1N0cmluZyhwYXRoKTt0cnl7RlMudXRpbWUocGF0aCx0aW1lLHRpbWUpO3JldHVybiAwfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEZTLkVycm5vRXJyb3IpKXRocm93IGUrIiA6ICIrc3RhY2tUcmFjZSgpO3NldEVyck5vKGUuZXJybm8pO3JldHVybi0xfX1mdW5jdGlvbiBfdXRpbWUocGF0aCx0aW1lcyl7dmFyIHRpbWU7aWYodGltZXMpe3RpbWU9SEVBUDMyW3RpbWVzKzQ+PjJdKjFlM31lbHNle3RpbWU9RGF0ZS5ub3coKX1yZXR1cm4gc2V0RmlsZVRpbWUocGF0aCx0aW1lKX12YXIgRlNOb2RlPWZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUscmRldil7aWYoIXBhcmVudCl7cGFyZW50PXRoaXN9dGhpcy5wYXJlbnQ9cGFyZW50O3RoaXMubW91bnQ9cGFyZW50Lm1vdW50O3RoaXMubW91bnRlZD1udWxsO3RoaXMuaWQ9RlMubmV4dElub2RlKys7dGhpcy5uYW1lPW5hbWU7dGhpcy5tb2RlPW1vZGU7dGhpcy5ub2RlX29wcz17fTt0aGlzLnN0cmVhbV9vcHM9e307dGhpcy5yZGV2PXJkZXZ9O3ZhciByZWFkTW9kZT0yOTJ8NzM7dmFyIHdyaXRlTW9kZT0xNDY7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRlNOb2RlLnByb3RvdHlwZSx7cmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubW9kZSZyZWFkTW9kZSk9PT1yZWFkTW9kZX0sc2V0OmZ1bmN0aW9uKHZhbCl7dmFsP3RoaXMubW9kZXw9cmVhZE1vZGU6dGhpcy5tb2RlJj1+cmVhZE1vZGV9fSx3cml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubW9kZSZ3cml0ZU1vZGUpPT09d3JpdGVNb2RlfSxzZXQ6ZnVuY3Rpb24odmFsKXt2YWw/dGhpcy5tb2RlfD13cml0ZU1vZGU6dGhpcy5tb2RlJj1+d3JpdGVNb2RlfX0saXNGb2xkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBGUy5pc0Rpcih0aGlzLm1vZGUpfX0saXNEZXZpY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBGUy5pc0NocmRldih0aGlzLm1vZGUpfX19KTtGUy5GU05vZGU9RlNOb2RlO0ZTLnN0YXRpY0luaXQoKTtNb2R1bGVbIkZTX2NyZWF0ZVBhdGgiXT1GUy5jcmVhdGVQYXRoO01vZHVsZVsiRlNfY3JlYXRlRGF0YUZpbGUiXT1GUy5jcmVhdGVEYXRhRmlsZTtNb2R1bGVbInJlcXVlc3RGdWxsc2NyZWVuIl09ZnVuY3Rpb24gTW9kdWxlX3JlcXVlc3RGdWxsc2NyZWVuKGxvY2tQb2ludGVyLHJlc2l6ZUNhbnZhcyl7QnJvd3Nlci5yZXF1ZXN0RnVsbHNjcmVlbihsb2NrUG9pbnRlcixyZXNpemVDYW52YXMpfTtNb2R1bGVbInJlcXVlc3RBbmltYXRpb25GcmFtZSJdPWZ1bmN0aW9uIE1vZHVsZV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyl7QnJvd3Nlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyl9O01vZHVsZVsic2V0Q2FudmFzU2l6ZSJdPWZ1bmN0aW9uIE1vZHVsZV9zZXRDYW52YXNTaXplKHdpZHRoLGhlaWdodCxub1VwZGF0ZXMpe0Jyb3dzZXIuc2V0Q2FudmFzU2l6ZSh3aWR0aCxoZWlnaHQsbm9VcGRhdGVzKX07TW9kdWxlWyJwYXVzZU1haW5Mb29wIl09ZnVuY3Rpb24gTW9kdWxlX3BhdXNlTWFpbkxvb3AoKXtCcm93c2VyLm1haW5Mb29wLnBhdXNlKCl9O01vZHVsZVsicmVzdW1lTWFpbkxvb3AiXT1mdW5jdGlvbiBNb2R1bGVfcmVzdW1lTWFpbkxvb3AoKXtCcm93c2VyLm1haW5Mb29wLnJlc3VtZSgpfTtNb2R1bGVbImdldFVzZXJNZWRpYSJdPWZ1bmN0aW9uIE1vZHVsZV9nZXRVc2VyTWVkaWEoKXtCcm93c2VyLmdldFVzZXJNZWRpYSgpfTtNb2R1bGVbImNyZWF0ZUNvbnRleHQiXT1mdW5jdGlvbiBNb2R1bGVfY3JlYXRlQ29udGV4dChjYW52YXMsdXNlV2ViR0wsc2V0SW5Nb2R1bGUsd2ViR0xDb250ZXh0QXR0cmlidXRlcyl7cmV0dXJuIEJyb3dzZXIuY3JlYXRlQ29udGV4dChjYW52YXMsdXNlV2ViR0wsc2V0SW5Nb2R1bGUsd2ViR0xDb250ZXh0QXR0cmlidXRlcyl9O3ZhciBHTGN0eDtmb3IodmFyIGk9MDtpPDMyOysraSl0ZW1wRml4ZWRMZW5ndGhBcnJheS5wdXNoKG5ldyBBcnJheShpKSk7dmFyIG1pbmlUZW1wV2ViR0xGbG9hdEJ1ZmZlcnNTdG9yYWdlPW5ldyBGbG9hdDMyQXJyYXkoMjg4KTtmb3IodmFyIGk9MDtpPDI4ODsrK2kpe21pbmlUZW1wV2ViR0xGbG9hdEJ1ZmZlcnNbaV09bWluaVRlbXBXZWJHTEZsb2F0QnVmZmVyc1N0b3JhZ2Uuc3ViYXJyYXkoMCxpKzEpfXZhciBfX21pbmlUZW1wV2ViR0xJbnRCdWZmZXJzU3RvcmFnZT1uZXcgSW50MzJBcnJheSgyODgpO2Zvcih2YXIgaT0wO2k8Mjg4OysraSl7X19taW5pVGVtcFdlYkdMSW50QnVmZmVyc1tpXT1fX21pbmlUZW1wV2ViR0xJbnRCdWZmZXJzU3RvcmFnZS5zdWJhcnJheSgwLGkrMSl9ZnVuY3Rpb24gaW50QXJyYXlGcm9tU3RyaW5nKHN0cmluZ3ksZG9udEFkZE51bGwsbGVuZ3RoKXt2YXIgbGVuPWxlbmd0aD4wP2xlbmd0aDpsZW5ndGhCeXRlc1VURjgoc3RyaW5neSkrMTt2YXIgdThhcnJheT1uZXcgQXJyYXkobGVuKTt2YXIgbnVtQnl0ZXNXcml0dGVuPXN0cmluZ1RvVVRGOEFycmF5KHN0cmluZ3ksdThhcnJheSwwLHU4YXJyYXkubGVuZ3RoKTtpZihkb250QWRkTnVsbCl1OGFycmF5Lmxlbmd0aD1udW1CeXRlc1dyaXR0ZW47cmV0dXJuIHU4YXJyYXl9dmFyIGFzbUxpYnJhcnlBcmc9eyJCaSI6X0FkZERvY3VtZW50LCJ4aSI6X0FkZEVsZW1lbnRJbkFycmF5RmllbGQsIllpIjpfQ3JlYXRlVXNlcldpdGhFbWFpbEFuZFBhc3N3b3JkLCJ6aSI6X0RlbGV0ZURvY3VtZW50LCJ5aSI6X0RlbGV0ZUZpZWxkLCJQaSI6X0RlbGV0ZUpTT04sIm9pIjpfRG93bmxvYWRGaWxlLCJoYiI6X0ZldGNoQWQsImtpIjpfR0RfU0RLX0luaXQsImppIjpfR0RfU0RLX1ByZWxvYWRBZCwiaGkiOl9HRF9TREtfU2VuZEV2ZW50LCJpaSI6X0dEX1NES19TaG93QWQsIl9oIjpfR2FtZUV2ZW50LCJxaSI6X0dldEN1cnJlbnRQcm9qZWN0SWQsIkVpIjpfR2V0RG9jdW1lbnQsIkRpIjpfR2V0RG9jdW1lbnRzSW5Db2xsZWN0aW9uLCJUaSI6X0dldEpTT04sInZpIjpfSW5jcmVtZW50RmllbGRWYWx1ZSwiWGUiOl9KU19BY2NlbGVyb21ldGVyX0lzUnVubmluZywiR2IiOl9KU19BY2NlbGVyb21ldGVyX1N0YXJ0LCJGYiI6X0pTX0FjY2VsZXJvbWV0ZXJfU3RvcCwiYmYiOl9KU19DdXJzb3JfU2V0SW1hZ2UsIk9hIjpfSlNfQ3Vyc29yX1NldFNob3csIk5hIjpfSlNfRE9NX01hcFZpZXdwb3J0Q29vcmRpbmF0ZVRvRWxlbWVudExvY2FsQ29vcmRpbmF0ZSwiQWUiOl9KU19ET01fVW5pdHlDYW52YXNTZWxlY3RvciwiY2YiOl9KU19FdmFsX0V2YWxKUywiQ2UiOl9KU19FdmFsX09wZW5VUkwsInNlIjpfSlNfRmlsZVN5c3RlbV9Jbml0aWFsaXplLCJpYSI6X0pTX0ZpbGVTeXN0ZW1fU3luYywiVWUiOl9KU19HcmF2aXR5U2Vuc29yX0lzUnVubmluZywiQ2IiOl9KU19HcmF2aXR5U2Vuc29yX1N0YXJ0LCJCYiI6X0pTX0dyYXZpdHlTZW5zb3JfU3RvcCwiU2UiOl9KU19HdWFyZEFnYWluc3RKc0V4Y2VwdGlvbnMsIlRlIjpfSlNfR3lyb3Njb3BlX0lzUnVubmluZywiQWIiOl9KU19HeXJvc2NvcGVfU3RhcnQsInpiIjpfSlNfR3lyb3Njb3BlX1N0b3AsIk5jIjpfSlNfSW5pdF9Db250ZXh0TWVudUhhbmRsZXIsIldlIjpfSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX0lzUnVubmluZywiRWIiOl9KU19MaW5lYXJBY2NlbGVyYXRpb25TZW5zb3JfU3RhcnQsIkRiIjpfSlNfTGluZWFyQWNjZWxlcmF0aW9uU2Vuc29yX1N0b3AsIkJlIjpfSlNfTG9nX0R1bXAsIkVlIjpfSlNfTG9nX1N0YWNrVHJhY2UsIlllIjpfSlNfT3JpZW50YXRpb25TZW5zb3JfSXNSdW5uaW5nLCJJYiI6X0pTX09yaWVudGF0aW9uU2Vuc29yX1N0YXJ0LCJIYiI6X0pTX09yaWVudGF0aW9uU2Vuc29yX1N0b3AsIkpiIjpfSlNfUmVxdWVzdERldmljZVNlbnNvclBlcm1pc3Npb25zT25Ub3VjaCwid2UiOl9KU19SdW5RdWl0Q2FsbGJhY2tzLCJSZSI6X0pTX1NjcmVlbk9yaWVudGF0aW9uX0RlSW5pdCwiX2UiOl9KU19TY3JlZW5PcmllbnRhdGlvbl9Jbml0LCJlYSI6X0pTX1NjcmVlbk9yaWVudGF0aW9uX0xvY2ssIklmIjpfSlNfU291bmRfQ3JlYXRlX0NoYW5uZWwsImdhIjpfSlNfU291bmRfR2V0TGVuZ3RoLCJEZiI6X0pTX1NvdW5kX0dldExvYWRTdGF0ZSwiQWYiOl9KU19Tb3VuZF9Jbml0LCJXYiI6X0pTX1NvdW5kX0xvYWQsIkNmIjpfSlNfU291bmRfTG9hZF9QQ00sIlJhIjpfSlNfU291bmRfUGxheSwiU2EiOl9KU19Tb3VuZF9SZWxlYXNlSW5zdGFuY2UsIktiIjpfSlNfU291bmRfUmVzdW1lSWZOZWVkZWQsIkVmIjpfSlNfU291bmRfU2V0M0QsInlmIjpfSlNfU291bmRfU2V0TGlzdGVuZXJPcmllbnRhdGlvbiwiemYiOl9KU19Tb3VuZF9TZXRMaXN0ZW5lclBvc2l0aW9uLCJZYiI6X0pTX1NvdW5kX1NldExvb3AsIlhiIjpfSlNfU291bmRfU2V0TG9vcFBvaW50cywicmEiOl9KU19Tb3VuZF9TZXRQYXVzZWQsImZhIjpfSlNfU291bmRfU2V0UGl0Y2gsIkhmIjpfSlNfU291bmRfU2V0UG9zaXRpb24sIkZmIjpfSlNfU291bmRfU2V0Vm9sdW1lLCJzYSI6X0pTX1NvdW5kX1N0b3AsInRiIjpfSlNfU3lzdGVtSW5mb19HZXRCcm93c2VyTmFtZSwic2IiOl9KU19TeXN0ZW1JbmZvX0dldEJyb3dzZXJWZXJzaW9uU3RyaW5nLCJrYSI6X0pTX1N5c3RlbUluZm9fR2V0Q2FudmFzQ2xpZW50U2l6ZSwicWEiOl9KU19TeXN0ZW1JbmZvX0dldERvY3VtZW50VVJMLCJxYiI6X0pTX1N5c3RlbUluZm9fR2V0R1BVSW5mbywicmIiOl9KU19TeXN0ZW1JbmZvX0dldExhbmd1YWdlLCJ5YiI6X0pTX1N5c3RlbUluZm9fR2V0TWF0Y2hXZWJHTFRvQ2FudmFzU2l6ZSwiSWEiOl9KU19TeXN0ZW1JbmZvX0dldE1lbW9yeSwidWIiOl9KU19TeXN0ZW1JbmZvX0dldE9TLCJ3YiI6X0pTX1N5c3RlbUluZm9fR2V0UHJlZmVycmVkRGV2aWNlUGl4ZWxSYXRpbywiR2UiOl9KU19TeXN0ZW1JbmZvX0dldFNjcmVlblNpemUsIlZiIjpfSlNfU3lzdGVtSW5mb19HZXRTdHJlYW1pbmdBc3NldHNVUkwsImRmIjpfSlNfU3lzdGVtSW5mb19IYXNBc3RjSGRyLCJ2YiI6X0pTX1N5c3RlbUluZm9fSGFzQ3Vyc29yTG9jaywiUWUiOl9KU19TeXN0ZW1JbmZvX0hhc0Z1bGxzY3JlZW4sInZhIjpfSlNfU3lzdGVtSW5mb19IYXNXZWJHTCwiemUiOl9KU19Vbml0eUVuZ2luZVNob3VsZFF1aXQsInZmIjpfSlNfV2ViUmVxdWVzdF9BYm9ydCwic2YiOl9KU19XZWJSZXF1ZXN0X0NyZWF0ZSwidGYiOl9KU19XZWJSZXF1ZXN0X0dldFJlc3BvbnNlTWV0YURhdGEsInVmIjpfSlNfV2ViUmVxdWVzdF9HZXRSZXNwb25zZU1ldGFEYXRhTGVuZ3RocywiUWEiOl9KU19XZWJSZXF1ZXN0X1JlbGVhc2UsIm1mIjpfSlNfV2ViUmVxdWVzdF9TZW5kLCJvZiI6X0pTX1dlYlJlcXVlc3RfU2V0UmVkaXJlY3RMaW1pdCwibmYiOl9KU19XZWJSZXF1ZXN0X1NldFJlcXVlc3RIZWFkZXIsInBmIjpfSlNfV2ViUmVxdWVzdF9TZXRUaW1lb3V0LCJNaSI6X0xpc3RlbkZvckNoaWxkQWRkZWQsIktpIjpfTGlzdGVuRm9yQ2hpbGRDaGFuZ2VkLCJJaSI6X0xpc3RlbkZvckNoaWxkUmVtb3ZlZCwic2kiOl9MaXN0ZW5Gb3JDb2xsZWN0aW9uQ2hhbmdlLCJ1aSI6X0xpc3RlbkZvckRvY3VtZW50Q2hhbmdlLCJPaSI6X0xpc3RlbkZvclZhbHVlQ2hhbmdlZCwibWkiOl9Mb2dFdmVudCwibGkiOl9Mb2dFdmVudFBhcmFtZXRlciwiR2kiOl9Nb2RpZnlOdW1iZXJXaXRoVHJhbnNhY3Rpb24sIlVpIjpfT25BdXRoU3RhdGVDaGFuZ2VkLCJiaSI6X1BpbmcsIlNpIjpfUG9zdEpTT04sIlJpIjpfUHVzaEpTT04sImdqIjpfUmVkaXJlY3QsIlloIjpfUmVkaXJlY3REb21haW4sImViIjpfUmVmZXRjaFJld2FyZCwiYWkiOl9SZWdpc3RlckdhbWVDb250cm9scywiJGgiOl9SZWdpc3RlclJld2FyZENhbGxiYWNrcywid2kiOl9SZW1vdmVFbGVtZW50SW5BcnJheUZpZWxkLCJjaSI6X1NES19Gb2N1c0dhbWVDb250YWluZXIsImdpIjpfU0RLX0luaXQsIkRjIjpfU0RLX0luaXRQYXJhbSwiZmkiOl9TREtfUHJlbG9hZEFkLCJkaSI6X1NES19TZW5kRXZlbnQsImVpIjpfU0RLX1Nob3dBZCwiQ2kiOl9TZXREb2N1bWVudCwibmkiOl9TZXRVc2VyUHJvcGVydGllcywiZ2IiOl9TaG93UmV3YXJkQWRDYWxsYmFjaywiWmkiOl9TaWduSW5Bbm9ueW1vdXNseSwiWGkiOl9TaWduSW5XaXRoRW1haWxBbmRQYXNzd29yZCwiVmkiOl9TaWduSW5XaXRoRmFjZWJvb2ssIldpIjpfU2lnbkluV2l0aEdvb2dsZSwiTGkiOl9TdG9wTGlzdGVuaW5nRm9yQ2hpbGRBZGRlZCwiSmkiOl9TdG9wTGlzdGVuaW5nRm9yQ2hpbGRDaGFuZ2VkLCJIaSI6X1N0b3BMaXN0ZW5pbmdGb3JDaGlsZFJlbW92ZWQsInJpIjpfU3RvcExpc3RlbmluZ0ZvckNvbGxlY3Rpb25DaGFuZ2UsInRpIjpfU3RvcExpc3RlbmluZ0ZvckRvY3VtZW50Q2hhbmdlLCJOaSI6X1N0b3BMaXN0ZW5pbmdGb3JWYWx1ZUNoYW5nZWQsIkZpIjpfVG9nZ2xlQm9vbGVhbldpdGhUcmFuc2FjdGlvbiwiQWkiOl9VcGRhdGVEb2N1bWVudCwiUWkiOl9VcGRhdGVKU09OLCJwaSI6X1VwbG9hZEZpbGUsInAiOl9fX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24sImkiOl9fX2N4YV9iZWdpbl9jYXRjaCwibyI6X19fY3hhX2VuZF9jYXRjaCwiZiI6X19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2hfMiwiYSI6X19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2hfMywiTWMiOl9fX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzQsImZiIjpfX19jeGFfZnJlZV9leGNlcHRpb24sImJkIjpfX19jeGFfcmV0aHJvdywiZGEiOl9fX2N4YV90aHJvdywiUGMiOl9fX2dtdGltZV9yLCJRYyI6X19fbG9jYWx0aW1lX3IsImsiOl9fX3Jlc3VtZUV4Y2VwdGlvbiwiT2QiOl9fX3N5c19fbmV3c2VsZWN0LCJQZSI6X19fc3lzX2FjY2VwdDQsIlpkIjpfX19zeXNfYWNjZXNzLCJxZiI6X19fc3lzX2JpbmQsIl9jIjpfX19zeXNfY2htb2QsImFmIjpfX19zeXNfY29ubmVjdCwiZWQiOl9fX3N5c19kdXAyLCJTIjpfX19zeXNfZmNudGw2NCwibmciOl9fX3N5c19mc3RhdDY0LCJZZiI6X19fc3lzX2Z0cnVuY2F0ZTY0LCJYYyI6X19fc3lzX2dldGN3ZCwiVWMiOl9fX3N5c19nZXRkZW50czY0LCJ6YyI6X19fc3lzX2dldGVnaWQzMiwiQWMiOl9fX3N5c19nZXRldWlkMzIsImdkIjpfX19zeXNfZ2V0cGVlcm5hbWUsIlRjIjpfX19zeXNfZ2V0cnVzYWdlLCJaZSI6X19fc3lzX2dldHNvY2tuYW1lLCJqZiI6X19fc3lzX2dldHNvY2tvcHQsIk1mIjpfX19zeXNfZ2V0dWlkMzIsInBiIjpfX19zeXNfaW9jdGwsIlZlIjpfX19zeXNfbGlzdGVuLCIkYyI6X19fc3lzX2xzdGF0NjQsIldjIjpfX19zeXNfbWtkaXIsImplIjpfX19zeXNfbW1hcDIsImlkIjpfX19zeXNfbXVubWFwLCJYYSI6X19fc3lzX29wZW4sImFkIjpfX19zeXNfcGlwZSwiJGUiOl9fX3N5c19wb2xsLCJWaCI6X19fc3lzX3JlYWRsaW5rLCJ0ZSI6X19fc3lzX3JlY3Zmcm9tLCJjZCI6X19fc3lzX3JlY3Ztc2csIlljIjpfX19zeXNfcmVuYW1lLCJWYyI6X19fc3lzX3JtZGlyLCJkZCI6X19fc3lzX3NlbmRtc2csIkRlIjpfX19zeXNfc2VuZHRvLCJpZSI6X19fc3lzX3NldHNvY2tvcHQsImZkIjpfX19zeXNfc2h1dGRvd24sIm5iIjpfX19zeXNfc29ja2V0LCJjYyI6X19fc3lzX3N0YXQ2NCwiSmYiOl9fX3N5c19zdGF0ZnM2NCwiS2YiOl9fX3N5c190cnVuY2F0ZTY0LCJoZCI6X19fc3lzX3VuYW1lLCJaYyI6X19fc3lzX3VubGluaywieCI6X2Fib3J0LCJQIjpfY2xvY2ssIlNjIjpfY2xvY2tfZ2V0cmVzLCJrYiI6X2Nsb2NrX2dldHRpbWUsIkdhIjpfZGlmZnRpbWUsIkJmIjpfZGxjbG9zZSwidWEiOl9kbGVycm9yLCJiYyI6X2Rsb3BlbiwiR2YiOl9kbHN5bSwiUGEiOl9lbXNjcmlwdGVuX2FzbV9jb25zdF9pbnRfc3luY19vbl9tYWluX3RocmVhZCwieGUiOl9lbXNjcmlwdGVuX2NhbmNlbF9tYWluX2xvb3AsInZlIjpfZW1zY3JpcHRlbl9jbGVhcl9pbnRlcnZhbCwiTmUiOl9lbXNjcmlwdGVuX2V4aXRfZnVsbHNjcmVlbiwiSGUiOl9lbXNjcmlwdGVuX2V4aXRfcG9pbnRlcmxvY2ssIkZlIjpfZW1zY3JpcHRlbl9nZXRfY2FudmFzX2VsZW1lbnRfc2l6ZSwiTWUiOl9lbXNjcmlwdGVuX2dldF9mdWxsc2NyZWVuX3N0YXR1cywiS2EiOl9lbXNjcmlwdGVuX2dldF9nYW1lcGFkX3N0YXR1cywiUmMiOl9lbXNjcmlwdGVuX2dldF9oZWFwX21heCwiSiI6X2Vtc2NyaXB0ZW5fZ2V0X25vdywiTGEiOl9lbXNjcmlwdGVuX2dldF9udW1fZ2FtZXBhZHMsInllIjpfZW1zY3JpcHRlbl9odG1sNV9yZW1vdmVfYWxsX2V2ZW50X2xpc3RlbmVycywiZ2YiOl9lbXNjcmlwdGVuX2lzX3dlYmdsX2NvbnRleHRfbG9zdCwiQiI6X2Vtc2NyaXB0ZW5fbG9nLCJDIjpfZW1zY3JpcHRlbl9sb25nam1wLCJoaiI6X2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZywiT2UiOl9lbXNjcmlwdGVuX3JlcXVlc3RfZnVsbHNjcmVlbiwiSWUiOl9lbXNjcmlwdGVuX3JlcXVlc3RfcG9pbnRlcmxvY2ssImlqIjpfZW1zY3JpcHRlbl9yZXNpemVfaGVhcCwiTWEiOl9lbXNjcmlwdGVuX3NhbXBsZV9nYW1lcGFkX2RhdGEsInhiIjpfZW1zY3JpcHRlbl9zZXRfYmx1cl9jYWxsYmFja19vbl90aHJlYWQsIkphIjpfZW1zY3JpcHRlbl9zZXRfY2FudmFzX2VsZW1lbnRfc2l6ZSwiS2UiOl9lbXNjcmlwdGVuX3NldF9mb2N1c19jYWxsYmFja19vbl90aHJlYWQsIkxlIjpfZW1zY3JpcHRlbl9zZXRfZnVsbHNjcmVlbmNoYW5nZV9jYWxsYmFja19vbl90aHJlYWQsIk1iIjpfZW1zY3JpcHRlbl9zZXRfZ2FtZXBhZGNvbm5lY3RlZF9jYWxsYmFja19vbl90aHJlYWQsIkxiIjpfZW1zY3JpcHRlbl9zZXRfZ2FtZXBhZGRpc2Nvbm5lY3RlZF9jYWxsYmFja19vbl90aHJlYWQsInJlIjpfZW1zY3JpcHRlbl9zZXRfaW50ZXJ2YWwsIm5hIjpfZW1zY3JpcHRlbl9zZXRfa2V5ZG93bl9jYWxsYmFja19vbl90aHJlYWQsImxhIjpfZW1zY3JpcHRlbl9zZXRfa2V5cHJlc3NfY2FsbGJhY2tfb25fdGhyZWFkLCJtYSI6X2Vtc2NyaXB0ZW5fc2V0X2tleXVwX2NhbGxiYWNrX29uX3RocmVhZCwicWUiOl9lbXNjcmlwdGVuX3NldF9tYWluX2xvb3AsInVlIjpfZW1zY3JpcHRlbl9zZXRfbWFpbl9sb29wX3RpbWluZywiVGIiOl9lbXNjcmlwdGVuX3NldF9tb3VzZWRvd25fY2FsbGJhY2tfb25fdGhyZWFkLCJTYiI6X2Vtc2NyaXB0ZW5fc2V0X21vdXNlbW92ZV9jYWxsYmFja19vbl90aHJlYWQsIlViIjpfZW1zY3JpcHRlbl9zZXRfbW91c2V1cF9jYWxsYmFja19vbl90aHJlYWQsIkplIjpfZW1zY3JpcHRlbl9zZXRfcG9pbnRlcmxvY2tjaGFuZ2VfY2FsbGJhY2tfb25fdGhyZWFkLCJOYiI6X2Vtc2NyaXB0ZW5fc2V0X3RvdWNoY2FuY2VsX2NhbGxiYWNrX29uX3RocmVhZCwiUGIiOl9lbXNjcmlwdGVuX3NldF90b3VjaGVuZF9jYWxsYmFja19vbl90aHJlYWQsIk9iIjpfZW1zY3JpcHRlbl9zZXRfdG91Y2htb3ZlX2NhbGxiYWNrX29uX3RocmVhZCwiUWIiOl9lbXNjcmlwdGVuX3NldF90b3VjaHN0YXJ0X2NhbGxiYWNrX29uX3RocmVhZCwiUmIiOl9lbXNjcmlwdGVuX3NldF93aGVlbF9jYWxsYmFja19vbl90aHJlYWQsIk9jIjpfZW1zY3JpcHRlbl90aHJlYWRfc2xlZXAsImtmIjpfZW1zY3JpcHRlbl93ZWJnbF9jcmVhdGVfY29udGV4dCwiaGYiOl9lbXNjcmlwdGVuX3dlYmdsX2Rlc3Ryb3lfY29udGV4dCwib2EiOl9lbXNjcmlwdGVuX3dlYmdsX2VuYWJsZV9leHRlbnNpb24sImZmIjpfZW1zY3JpcHRlbl93ZWJnbF9nZXRfY3VycmVudF9jb250ZXh0LCJOZiI6X2Vtc2NyaXB0ZW5fd2ViZ2xfaW5pdF9jb250ZXh0X2F0dHJpYnV0ZXMsInBhIjpfZW1zY3JpcHRlbl93ZWJnbF9tYWtlX2NvbnRleHRfY3VycmVudCwia2QiOl9lbnZpcm9uX2dldCwidGQiOl9lbnZpcm9uX3NpemVzX2dldCwieiI6X2V4aXQsIlkiOl9mZF9jbG9zZSwicmYiOl9mZF9mZHN0YXRfZ2V0LCJtYiI6X2ZkX3JlYWQsInBlIjpfZmRfc2VlaywiJGEiOl9mZF93cml0ZSwidGEiOl9mbG9jaywiYiI6X2dldFRlbXBSZXQwLCJqZCI6X2dldGFkZHJpbmZvLCJ3ZiI6X2dldGhvc3RieWFkZHIsInhmIjpfZ2V0aG9zdGJ5bmFtZSwib2IiOl9nZXRuYW1laW5mbywiTGYiOl9nZXRwd3VpZCwiRWEiOl9nZXR0aW1lb2ZkYXksIk5oIjpfZ2xBY3RpdmVUZXh0dXJlLCJLaCI6X2dsQXR0YWNoU2hhZGVyLCJlYyI6X2dsQmVnaW5RdWVyeSwiQWciOl9nbEJlZ2luVHJhbnNmb3JtRmVlZGJhY2ssIkNhIjpfZ2xCaW5kQXR0cmliTG9jYXRpb24sIkpoIjpfZ2xCaW5kQnVmZmVyLCIkZiI6X2dsQmluZEJ1ZmZlckJhc2UsIl9mIjpfZ2xCaW5kQnVmZmVyUmFuZ2UsIkdoIjpfZ2xCaW5kRnJhbWVidWZmZXIsIkhoIjpfZ2xCaW5kUmVuZGVyYnVmZmVyLCJVZiI6X2dsQmluZFNhbXBsZXIsIkloIjpfZ2xCaW5kVGV4dHVyZSwidGciOl9nbEJpbmRUcmFuc2Zvcm1GZWVkYmFjaywid2ciOl9nbEJpbmRWZXJ0ZXhBcnJheSwid2MiOl9nbEJsZW5kRXF1YXRpb24sInhjIjpfZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUsInljIjpfZ2xCbGVuZEZ1bmNTZXBhcmF0ZSwia2ciOl9nbEJsaXRGcmFtZWJ1ZmZlciwiRWgiOl9nbEJ1ZmZlckRhdGEsIkZoIjpfZ2xCdWZmZXJTdWJEYXRhLCJEaCI6X2dsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cywiemgiOl9nbENsZWFyLCJRZiI6X2dsQ2xlYXJCdWZmZXJmaSwiUGYiOl9nbENsZWFyQnVmZmVyZnYsIk9mIjpfZ2xDbGVhckJ1ZmZlcnVpdiwiQWgiOl9nbENsZWFyQ29sb3IsIkJoIjpfZ2xDbGVhckRlcHRoZiwiQ2giOl9nbENsZWFyU3RlbmNpbCwibGQiOl9nbENsaWVudFdhaXRTeW5jLCJkYiI6X2dsQ29sb3JNYXNrLCJ5aCI6X2dsQ29tcGlsZVNoYWRlciwid2giOl9nbENvbXByZXNzZWRUZXhJbWFnZTJELCJtZyI6X2dsQ29tcHJlc3NlZFRleEltYWdlM0QsInhoIjpfZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCwicmciOl9nbENvbXByZXNzZWRUZXhTdWJJbWFnZTNELCJjZyI6X2dsQ29weUJ1ZmZlclN1YkRhdGEsInZoIjpfZ2xDb3B5VGV4SW1hZ2UyRCwidmMiOl9nbENvcHlUZXhTdWJJbWFnZTJELCJ1aCI6X2dsQ3JlYXRlUHJvZ3JhbSwidGgiOl9nbENyZWF0ZVNoYWRlciwic2giOl9nbEN1bGxGYWNlLCJyaCI6X2dsRGVsZXRlQnVmZmVycywicWgiOl9nbERlbGV0ZUZyYW1lYnVmZmVycywicGgiOl9nbERlbGV0ZVByb2dyYW0sIllhIjpfZ2xEZWxldGVRdWVyaWVzLCJvaCI6X2dsRGVsZXRlUmVuZGVyYnVmZmVycywiVGYiOl9nbERlbGV0ZVNhbXBsZXJzLCJuaCI6X2dsRGVsZXRlU2hhZGVyLCJfYiI6X2dsRGVsZXRlU3luYywibWgiOl9nbERlbGV0ZVRleHR1cmVzLCJ1ZyI6X2dsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzLCJ5ZyI6X2dsRGVsZXRlVmVydGV4QXJyYXlzLCJCYSI6X2dsRGVwdGhGdW5jLCJBYSI6X2dsRGVwdGhNYXNrLCJsaCI6X2dsRGV0YWNoU2hhZGVyLCJraCI6X2dsRGlzYWJsZSwiamgiOl9nbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwiZ2giOl9nbERyYXdBcnJheXMsImVnIjpfZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLCJiZyI6X2dsRHJhd0J1ZmZlcnMsImhoIjpfZ2xEcmF3RWxlbWVudHMsImRnIjpfZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQsImloIjpfZ2xFbmFibGUsImZoIjpfZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwiZmMiOl9nbEVuZFF1ZXJ5LCJCZyI6X2dsRW5kVHJhbnNmb3JtRmVlZGJhY2ssIlpiIjpfZ2xGZW5jZVN5bmMsImNoIjpfZ2xGaW5pc2gsImRoIjpfZ2xGbHVzaCwiaGciOl9nbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UsIlQiOl9nbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCJRIjpfZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCwid2EiOl9nbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyLCJ6YSI6X2dsRnJvbnRGYWNlLCJiaCI6X2dsR2VuQnVmZmVycywiWmciOl9nbEdlbkZyYW1lYnVmZmVycywiZGMiOl9nbEdlblF1ZXJpZXMsIl9nIjpfZ2xHZW5SZW5kZXJidWZmZXJzLCJTZiI6X2dsR2VuU2FtcGxlcnMsImFoIjpfZ2xHZW5UZXh0dXJlcywidmciOl9nbEdlblRyYW5zZm9ybUZlZWRiYWNrcywiemciOl9nbEdlblZlcnRleEFycmF5cywiJGciOl9nbEdlbmVyYXRlTWlwbWFwLCJUaCI6X2dsR2V0QWN0aXZlQXR0cmliLCJjYiI6X2dsR2V0QWN0aXZlVW5pZm9ybSwiVWEiOl9nbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUsImFhIjpfZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiwiJCI6X2dsR2V0QWN0aXZlVW5pZm9ybXNpdiwiU2giOl9nbEdldEF0dHJpYkxvY2F0aW9uLCJlZiI6X2dsR2V0QnVmZmVyU3ViRGF0YSwiWWciOl9nbEdldEVycm9yLCJYZyI6X2dsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYsIk1oIjpfZ2xHZXRJbnRlZ2VyaV92LCJEYSI6X2dsR2V0SW50ZWdlcnYsIldmIjpfZ2xHZXRJbnRlcm5hbGZvcm1hdGl2LCIkYiI6X2dsR2V0UHJvZ3JhbUJpbmFyeSwiUGgiOl9nbEdldFByb2dyYW1JbmZvTG9nLCJYIjpfZ2xHZXRQcm9ncmFtaXYsIkRnIjpfZ2xHZXRRdWVyeU9iamVjdHVpdiwiQ2ciOl9nbEdldFF1ZXJ5aXYsImVoIjpfZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwiVmciOl9nbEdldFNoYWRlckluZm9Mb2csInVjIjpfZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQsIldnIjpfZ2xHZXRTaGFkZXJTb3VyY2UsIk9oIjpfZ2xHZXRTaGFkZXJpdiwiVWciOl9nbEdldFN0cmluZywiaWciOl9nbEdldFN0cmluZ2ksIlRnIjpfZ2xHZXRUZXhQYXJhbWV0ZXJpdiwiWGYiOl9nbEdldFVuaWZvcm1CbG9ja0luZGV4LCJUYSI6X2dsR2V0VW5pZm9ybUluZGljZXMsImhhIjpfZ2xHZXRVbmlmb3JtTG9jYXRpb24sInRjIjpfZ2xHZXRVbmlmb3JtaXYsIlJoIjpfZ2xHZXRWZXJ0ZXhBdHRyaWJpdiwiV2EiOl9nbEludmFsaWRhdGVGcmFtZWJ1ZmZlciwiTGgiOl9nbElzRW5hYmxlZCwieGciOl9nbElzVmVydGV4QXJyYXksIlJnIjpfZ2xMaW5rUHJvZ3JhbSwiZmciOl9nbE1hcEJ1ZmZlclJhbmdlLCJTZyI6X2dsUGl4ZWxTdG9yZWksInNjIjpfZ2xQb2x5Z29uT2Zmc2V0LCJhYyI6X2dsUHJvZ3JhbUJpbmFyeSwiUmYiOl9nbFByb2dyYW1QYXJhbWV0ZXJpLCJhZyI6X2dsUmVhZEJ1ZmZlciwiY2EiOl9nbFJlYWRQaXhlbHMsIlFnIjpfZ2xSZW5kZXJidWZmZXJTdG9yYWdlLCJqZyI6X2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlLCJWZiI6X2dsU2FtcGxlclBhcmFtZXRlcmksImJiIjpfZ2xTY2lzc29yLCJPZyI6X2dsU2hhZGVyU291cmNlLCJQZyI6X2dsU3RlbmNpbEZ1bmNTZXBhcmF0ZSwiTWciOl9nbFN0ZW5jaWxNYXNrLCJOZyI6X2dsU3RlbmNpbE9wU2VwYXJhdGUsIktnIjpfZ2xUZXhJbWFnZTJELCJwZyI6X2dsVGV4SW1hZ2UzRCwiTGciOl9nbFRleFBhcmFtZXRlcmYsImFiIjpfZ2xUZXhQYXJhbWV0ZXJpLCJKZyI6X2dsVGV4UGFyYW1ldGVyaXYsImxnIjpfZ2xUZXhTdG9yYWdlMkQsIm9nIjpfZ2xUZXhTdG9yYWdlM0QsIklnIjpfZ2xUZXhTdWJJbWFnZTJELCJxZyI6X2dsVGV4U3ViSW1hZ2UzRCwic2ciOl9nbFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsImdjIjpfZ2xVbmlmb3JtMWZ2LCJ4YSI6X2dsVW5pZm9ybTFpLCJoYyI6X2dsVW5pZm9ybTFpdiwiaWMiOl9nbFVuaWZvcm0xdWl2LCJqYyI6X2dsVW5pZm9ybTJmdiwia2MiOl9nbFVuaWZvcm0yaXYsImxjIjpfZ2xVbmlmb3JtMnVpdiwiX2EiOl9nbFVuaWZvcm0zZnYsIm1jIjpfZ2xVbmlmb3JtM2l2LCJuYyI6X2dsVW5pZm9ybTN1aXYsImJhIjpfZ2xVbmlmb3JtNGZ2LCJvYyI6X2dsVW5pZm9ybTRpdiwicGMiOl9nbFVuaWZvcm00dWl2LCJWYSI6X2dsVW5pZm9ybUJsb2NrQmluZGluZywicWMiOl9nbFVuaWZvcm1NYXRyaXgzZnYsInlhIjpfZ2xVbmlmb3JtTWF0cml4NGZ2LCJnZyI6X2dsVW5tYXBCdWZmZXIsIkVnIjpfZ2xVc2VQcm9ncmFtLCJRaCI6X2dsVmFsaWRhdGVQcm9ncmFtLCJGZyI6X2dsVmVydGV4QXR0cmliNGYsIkdnIjpfZ2xWZXJ0ZXhBdHRyaWI0ZnYsIlpmIjpfZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlciwiSGciOl9nbFZlcnRleEF0dHJpYlBvaW50ZXIsIlphIjpfZ2xWaWV3cG9ydCwiS2MiOmludm9rZV9kZGRpLCJkaiI6aW52b2tlX2RkaWlpLCJIIjppbnZva2VfZGlpLCJOIjppbnZva2VfZGlpaSwiSmMiOmludm9rZV9kaWlpZCwiSyI6aW52b2tlX2RpaWlpLCJ6ZCI6aW52b2tlX2RqaSwiTGMiOmludm9rZV9mZmZpLCJIYyI6aW52b2tlX2ZpLCJXIjppbnZva2VfZmlpLCJFIjppbnZva2VfZmlpaSwiSWMiOmludm9rZV9maWlpZiwiTSI6aW52b2tlX2ZpaWlpLCJ3IjppbnZva2VfaSwiaWIiOmludm9rZV9pZGksIkZjIjppbnZva2VfaWZpLCJkIjppbnZva2VfaWksImZqIjppbnZva2VfaWlkaSwiZWoiOmludm9rZV9paWZpLCJjIjppbnZva2VfaWlpLCJqYiI6aW52b2tlX2lpaWRpLCJHYyI6aW52b2tlX2lpaWZpLCJoIjppbnZva2VfaWlpaSwiV2giOmludm9rZV9paWlpZGlpLCJVaCI6aW52b2tlX2lpaWlmaWksInEiOmludm9rZV9paWlpaSwicyI6aW52b2tlX2lpaWlpaSwidSI6aW52b2tlX2lpaWlpaWksIkEiOmludm9rZV9paWlpaWlpaSwiRyI6aW52b2tlX2lpaWlpaWlpaSwiUiI6aW52b2tlX2lpaWlpaWlpaWksIkJjIjppbnZva2VfaWlpaWlpaWlpaWksIlhoIjppbnZva2VfaWlpaWlpaWlpaWlpaSwiRWQiOmludm9rZV9paWlpaWlpaWlqaSwieGQiOmludm9rZV9paWlpaWosIkJkIjppbnZva2VfaWlpaWppaSwiWWQiOmludm9rZV9paWlpamppaSwibmUiOmludm9rZV9paWlqLCJKZCI6aW52b2tlX2lpaWppLCJrZSI6aW52b2tlX2lpaWppaWksImxlIjppbnZva2VfaWlqLCJTZCI6aW52b2tlX2lpamksImRlIjppbnZva2VfaWlqaWksIlZkIjppbnZva2VfaWlqaWlpLCJUZCI6aW52b2tlX2lpamlpaWlpaSwibmQiOmludm9rZV9paWpqaSwiVWQiOmludm9rZV9paWpqaWlpaWlpLCJ5ZCI6aW52b2tlX2lqaSwiX2QiOmludm9rZV9pamppLCJtZSI6aW52b2tlX2osInZkIjppbnZva2VfamRpLCJoZSI6aW52b2tlX2ppLCJnZSI6aW52b2tlX2ppaSwiZmUiOmludm9rZV9qaWlpLCJvZSI6aW52b2tlX2ppaWlpLCJtZCI6aW52b2tlX2ppaWlpaSwiJGQiOmludm9rZV9qaWlpaWlpaWlpaSwiS2QiOmludm9rZV9qaWlpaiwiQWQiOmludm9rZV9qaWlqaSwib2QiOmludm9rZV9qaWppLCJlZSI6aW52b2tlX2ppamlpaSwiRmQiOmludm9rZV9qaWpqLCJNZCI6aW52b2tlX2pqaSwiQ2QiOmludm9rZV9qamlpLCJMZCI6aW52b2tlX2pqamksImUiOmludm9rZV92LCJsIjppbnZva2VfdmksImxmIjppbnZva2VfdmlkZCwieSI6aW52b2tlX3ZpZGksIkYiOmludm9rZV92aWZpLCJtIjppbnZva2VfdmlpLCJqYSI6aW52b2tlX3ZpaWRpLCJyYyI6aW52b2tlX3ZpaWYsIlYiOmludm9rZV92aWlmZiwiYmoiOmludm9rZV92aWlmZmksIkwiOmludm9rZV92aWlmaSwiZyI6aW52b2tlX3ZpaWksIlpoIjppbnZva2VfdmlpaWRpaSwiY2oiOmludm9rZV92aWlpZmksIm4iOmludm9rZV92aWlpaSwiX2kiOmludm9rZV92aWlpaWZpLCJyIjppbnZva2VfdmlpaWlpLCJ0IjppbnZva2VfdmlpaWlpaSwiRCI6aW52b2tlX3ZpaWlpaWlpLCJhaiI6aW52b2tlX3ZpaWlpaWlpZmRkZmlpLCIkaSI6aW52b2tlX3ZpaWlpaWlpZmZmZmlpLCJPIjppbnZva2VfdmlpaWlpaWlmaWlmaWksIkhkIjppbnZva2VfdmlpaWlpaWlmampmaWksIkkiOmludm9rZV92aWlpaWlpaWksIlUiOmludm9rZV92aWlpaWlpaWlpLCJDYyI6aW52b2tlX3ZpaWlpaWlpaWlmaSwiRmEiOmludm9rZV92aWlpaWlpaWlpaSwiRWMiOmludm9rZV92aWlpaWlpaWlpaWlpLCJjZSI6aW52b2tlX3ZpaWlqLCJHZCI6aW52b2tlX3ZpaWlqaSwiSWQiOmludm9rZV92aWlqLCJiZSI6aW52b2tlX3ZpaWppLCJYZCI6aW52b2tlX3ZpaWppaSwicGQiOmludm9rZV92aWlqaWlpaWlpLCJ3ZCI6aW52b2tlX3ZpaWppaWlqaWlpaSwiUmQiOmludm9rZV92aWlqaWppaWksImFlIjppbnZva2VfdmlqaSwiV2QiOmludm9rZV92aWppaSwic2QiOmludm9rZV92aWppaWksIk5kIjppbnZva2VfdmlqaWlpaSwidWQiOmludm9rZV92aWpqamksIkRkIjppbnZva2VfdmppLCJRZCI6aW52b2tlX3ZqaWlpLCJxZCI6aW52b2tlX3ZqaWlpaWksIlBkIjppbnZva2VfdmppaWlpaWksInJkIjppbnZva2VfdmpqamlpaWksImoiOl9sbHZtX2VoX3R5cGVpZF9mb3IsIloiOl9ta3RpbWUsInYiOl9zZXRUZW1wUmV0MCwiSGEiOl9zdHJmdGltZSwiXyI6X3RpbWUsImxiIjpfdXRpbWV9O3ZhciBhc209Y3JlYXRlV2FzbSgpO3ZhciBfX193YXNtX2NhbGxfY3RvcnM9TW9kdWxlWyJfX193YXNtX2NhbGxfY3RvcnMiXT1mdW5jdGlvbigpe3JldHVybihfX193YXNtX2NhbGxfY3RvcnM9TW9kdWxlWyJfX193YXNtX2NhbGxfY3RvcnMiXT1Nb2R1bGVbImFzbSJdWyJraiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfUmVsZWFzZUtleXM9TW9kdWxlWyJfUmVsZWFzZUtleXMiXT1mdW5jdGlvbigpe3JldHVybihfUmVsZWFzZUtleXM9TW9kdWxlWyJfUmVsZWFzZUtleXMiXT1Nb2R1bGVbImFzbSJdWyJsaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfU2VuZE1lc3NhZ2VGbG9hdD1Nb2R1bGVbIl9TZW5kTWVzc2FnZUZsb2F0Il09ZnVuY3Rpb24oKXtyZXR1cm4oX1NlbmRNZXNzYWdlRmxvYXQ9TW9kdWxlWyJfU2VuZE1lc3NhZ2VGbG9hdCJdPU1vZHVsZVsiYXNtIl1bIm1qIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9TZW5kTWVzc2FnZVN0cmluZz1Nb2R1bGVbIl9TZW5kTWVzc2FnZVN0cmluZyJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9TZW5kTWVzc2FnZVN0cmluZz1Nb2R1bGVbIl9TZW5kTWVzc2FnZVN0cmluZyJdPU1vZHVsZVsiYXNtIl1bIm5qIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9TZW5kTWVzc2FnZT1Nb2R1bGVbIl9TZW5kTWVzc2FnZSJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9TZW5kTWVzc2FnZT1Nb2R1bGVbIl9TZW5kTWVzc2FnZSJdPU1vZHVsZVsiYXNtIl1bIm9qIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9TZXRGdWxsc2NyZWVuPU1vZHVsZVsiX1NldEZ1bGxzY3JlZW4iXT1mdW5jdGlvbigpe3JldHVybihfU2V0RnVsbHNjcmVlbj1Nb2R1bGVbIl9TZXRGdWxsc2NyZWVuIl09TW9kdWxlWyJhc20iXVsicGoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX21haW49TW9kdWxlWyJfbWFpbiJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9tYWluPU1vZHVsZVsiX21haW4iXT1Nb2R1bGVbImFzbSJdWyJxaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfX19lcnJub19sb2NhdGlvbj1Nb2R1bGVbIl9fX2Vycm5vX2xvY2F0aW9uIl09ZnVuY3Rpb24oKXtyZXR1cm4oX19fZXJybm9fbG9jYXRpb249TW9kdWxlWyJfX19lcnJub19sb2NhdGlvbiJdPU1vZHVsZVsiYXNtIl1bInJqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9odG9ubD1Nb2R1bGVbIl9odG9ubCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9odG9ubD1Nb2R1bGVbIl9odG9ubCJdPU1vZHVsZVsiYXNtIl1bInNqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9odG9ucz1Nb2R1bGVbIl9odG9ucyJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9odG9ucz1Nb2R1bGVbIl9odG9ucyJdPU1vZHVsZVsiYXNtIl1bInRqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9udG9ocz1Nb2R1bGVbIl9udG9ocyJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9udG9ocz1Nb2R1bGVbIl9udG9ocyJdPU1vZHVsZVsiYXNtIl1bInVqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9fZ2V0X3R6bmFtZT1Nb2R1bGVbIl9fZ2V0X3R6bmFtZSJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9fZ2V0X3R6bmFtZT1Nb2R1bGVbIl9fZ2V0X3R6bmFtZSJdPU1vZHVsZVsiYXNtIl1bInZqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9fZ2V0X2RheWxpZ2h0PU1vZHVsZVsiX19nZXRfZGF5bGlnaHQiXT1mdW5jdGlvbigpe3JldHVybihfX2dldF9kYXlsaWdodD1Nb2R1bGVbIl9fZ2V0X2RheWxpZ2h0Il09TW9kdWxlWyJhc20iXVsid2oiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX19nZXRfdGltZXpvbmU9TW9kdWxlWyJfX2dldF90aW1lem9uZSJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9fZ2V0X3RpbWV6b25lPU1vZHVsZVsiX19nZXRfdGltZXpvbmUiXT1Nb2R1bGVbImFzbSJdWyJ4aiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBzdGFja1NhdmU9TW9kdWxlWyJzdGFja1NhdmUiXT1mdW5jdGlvbigpe3JldHVybihzdGFja1NhdmU9TW9kdWxlWyJzdGFja1NhdmUiXT1Nb2R1bGVbImFzbSJdWyJ5aiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBzdGFja1Jlc3RvcmU9TW9kdWxlWyJzdGFja1Jlc3RvcmUiXT1mdW5jdGlvbigpe3JldHVybihzdGFja1Jlc3RvcmU9TW9kdWxlWyJzdGFja1Jlc3RvcmUiXT1Nb2R1bGVbImFzbSJdWyJ6aiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBzdGFja0FsbG9jPU1vZHVsZVsic3RhY2tBbGxvYyJdPWZ1bmN0aW9uKCl7cmV0dXJuKHN0YWNrQWxsb2M9TW9kdWxlWyJzdGFja0FsbG9jIl09TW9kdWxlWyJhc20iXVsiQWoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX3NldFRocmV3PU1vZHVsZVsiX3NldFRocmV3Il09ZnVuY3Rpb24oKXtyZXR1cm4oX3NldFRocmV3PU1vZHVsZVsiX3NldFRocmV3Il09TW9kdWxlWyJhc20iXVsiQmoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX19fY3hhX2Nhbl9jYXRjaD1Nb2R1bGVbIl9fX2N4YV9jYW5fY2F0Y2giXT1mdW5jdGlvbigpe3JldHVybihfX19jeGFfY2FuX2NhdGNoPU1vZHVsZVsiX19fY3hhX2Nhbl9jYXRjaCJdPU1vZHVsZVsiYXNtIl1bIkNqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGU9TW9kdWxlWyJfX19jeGFfaXNfcG9pbnRlcl90eXBlIl09ZnVuY3Rpb24oKXtyZXR1cm4oX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1Nb2R1bGVbIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiXT1Nb2R1bGVbImFzbSJdWyJEaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfbWFsbG9jPU1vZHVsZVsiX21hbGxvYyJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9tYWxsb2M9TW9kdWxlWyJfbWFsbG9jIl09TW9kdWxlWyJhc20iXVsiRWoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX2ZyZWU9TW9kdWxlWyJfZnJlZSJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9mcmVlPU1vZHVsZVsiX2ZyZWUiXT1Nb2R1bGVbImFzbSJdWyJGaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfbWVtYWxpZ249TW9kdWxlWyJfbWVtYWxpZ24iXT1mdW5jdGlvbigpe3JldHVybihfbWVtYWxpZ249TW9kdWxlWyJfbWVtYWxpZ24iXT1Nb2R1bGVbImFzbSJdWyJHaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfbWVtc2V0PU1vZHVsZVsiX21lbXNldCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9tZW1zZXQ9TW9kdWxlWyJfbWVtc2V0Il09TW9kdWxlWyJhc20iXVsiSGoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX3N0cmxlbj1Nb2R1bGVbIl9zdHJsZW4iXT1mdW5jdGlvbigpe3JldHVybihfc3RybGVuPU1vZHVsZVsiX3N0cmxlbiJdPU1vZHVsZVsiYXNtIl1bIklqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlkaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlkaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlkaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlkaWlpaSJdPU1vZHVsZVsiYXNtIl1bIktqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpPU1vZHVsZVsiZHluQ2FsbF92aWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpIl09TW9kdWxlWyJhc20iXVsiTGoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWk9TW9kdWxlWyJkeW5DYWxsX2lpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpPU1vZHVsZVsiZHluQ2FsbF9paWkiXT1Nb2R1bGVbImFzbSJdWyJNaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpPU1vZHVsZVsiZHluQ2FsbF9paSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWk9TW9kdWxlWyJkeW5DYWxsX2lpIl09TW9kdWxlWyJhc20iXVsiTmoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpIl09TW9kdWxlWyJhc20iXVsiT2oiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaWppPU1vZHVsZVsiZHluQ2FsbF9qaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qaWppPU1vZHVsZVsiZHluQ2FsbF9qaWppIl09TW9kdWxlWyJhc20iXVsiUGoiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aT1Nb2R1bGVbImR5bkNhbGxfdmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpPU1vZHVsZVsiZHluQ2FsbF92aSJdPU1vZHVsZVsiYXNtIl1bIlFqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJSaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWkiXT1Nb2R1bGVbImFzbSJdWyJTaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJUaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIlVqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJWaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIldqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaj1Nb2R1bGVbImR5bkNhbGxfaWlpaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaj1Nb2R1bGVbImR5bkNhbGxfaWlpaiJdPU1vZHVsZVsiYXNtIl1bIlhqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdj1Nb2R1bGVbImR5bkNhbGxfdiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdj1Nb2R1bGVbImR5bkNhbGxfdiJdPU1vZHVsZVsiYXNtIl1bIllqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaT1Nb2R1bGVbImR5bkNhbGxfaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaT1Nb2R1bGVbImR5bkNhbGxfaSJdPU1vZHVsZVsiYXNtIl1bIlpqIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJfaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWppaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWppaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWppaWkiXT1Nb2R1bGVbImFzbSJdWyIkaiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaj1Nb2R1bGVbImR5bkNhbGxfaWlqIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWo9TW9kdWxlWyJkeW5DYWxsX2lpaiJdPU1vZHVsZVsiYXNtIl1bImFrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImJrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlpPU1vZHVsZVsiZHluQ2FsbF9qaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppaT1Nb2R1bGVbImR5bkNhbGxfamlpIl09TW9kdWxlWyJhc20iXVsiY2siXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImRrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaSJdPU1vZHVsZVsiYXNtIl1bImVrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpZmZpPU1vZHVsZVsiZHluQ2FsbF9maWlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWZmaT1Nb2R1bGVbImR5bkNhbGxfZmlpZmZpIl09TW9kdWxlWyJhc20iXVsiZmsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpZmlmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmaWZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWZpZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmlmaWkiXT1Nb2R1bGVbImFzbSJdWyJnayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaT1Nb2R1bGVbImR5bkNhbGxfZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWk9TW9kdWxlWyJkeW5DYWxsX2ZpaSJdPU1vZHVsZVsiYXNtIl1bImhrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmkiXT1Nb2R1bGVbImFzbSJdWyJpayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmPU1vZHVsZVsiZHluQ2FsbF92aWlmZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmY9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmIl09TW9kdWxlWyJhc20iXVsiamsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9qaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImtrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWpqaT1Nb2R1bGVbImR5bkNhbGxfaWpqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWpqaT1Nb2R1bGVbImR5bkNhbGxfaWpqaSJdPU1vZHVsZVsiYXNtIl1bImxrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWppaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWkiXT1Nb2R1bGVbImFzbSJdWyJtayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ppaWlpPU1vZHVsZVsiZHluQ2FsbF9qaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamlpaWk9TW9kdWxlWyJkeW5DYWxsX2ppaWlpIl09TW9kdWxlWyJhc20iXVsibmsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlpaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWlpPU1vZHVsZVsiZHluQ2FsbF9maWlpaSJdPU1vZHVsZVsiYXNtIl1bIm9rIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGlpaWk9TW9kdWxlWyJkeW5DYWxsX2RpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9kaWlpaT1Nb2R1bGVbImR5bkNhbGxfZGlpaWkiXT1Nb2R1bGVbImFzbSJdWyJwayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2RpaWk9TW9kdWxlWyJkeW5DYWxsX2RpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RpaWk9TW9kdWxlWyJkeW5DYWxsX2RpaWkiXT1Nb2R1bGVbImFzbSJdWyJxayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaWk9TW9kdWxlWyJkeW5DYWxsX2ZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWk9TW9kdWxlWyJkeW5DYWxsX2ZpaWkiXT1Nb2R1bGVbImFzbSJdWyJyayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWRpPU1vZHVsZVsiZHluQ2FsbF92aWlkaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZGk9TW9kdWxlWyJkeW5DYWxsX3ZpaWRpIl09TW9kdWxlWyJhc20iXVsic2siXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlqaT1Nb2R1bGVbImR5bkNhbGxfdmlpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWppPU1vZHVsZVsiZHluQ2FsbF92aWlqaSJdPU1vZHVsZVsiYXNtIl1bInRrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlqaT1Nb2R1bGVbImR5bkNhbGxfaWlqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlqaT1Nb2R1bGVbImR5bkNhbGxfaWlqaSJdPU1vZHVsZVsiYXNtIl1bInVrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bInZrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsid2siXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWRpPU1vZHVsZVsiZHluQ2FsbF9paWRpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWRpPU1vZHVsZVsiZHluQ2FsbF9paWRpIl09TW9kdWxlWyJhc20iXVsieGsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaT1Nb2R1bGVbImR5bkNhbGxfamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppPU1vZHVsZVsiZHluQ2FsbF9qaSJdPU1vZHVsZVsiYXNtIl1bInlrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpamlqaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlqaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWppamlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpamlqaWlpIl09TW9kdWxlWyJhc20iXVsiemsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlkaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWRpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZGlpPU1vZHVsZVsiZHluQ2FsbF92aWlkaWkiXT1Nb2R1bGVbImFzbSJdWyJBayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWppaT1Nb2R1bGVbImR5bkNhbGxfdmlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppaSJdPU1vZHVsZVsiYXNtIl1bIkJrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmppaWk9TW9kdWxlWyJkeW5DYWxsX3ZqaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92amlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWkiXT1Nb2R1bGVbImFzbSJdWyJDayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpamlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpamlpaSJdPU1vZHVsZVsiYXNtIl1bIkRrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmppaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZqaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92amlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJFayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpamlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWppaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpamlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIkZrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpaSJdPU1vZHVsZVsiYXNtIl1bIkdrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmaT1Nb2R1bGVbImR5bkNhbGxfdmlmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmaT1Nb2R1bGVbImR5bkNhbGxfdmlmaSJdPU1vZHVsZVsiYXNtIl1bIkhrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqaT1Nb2R1bGVbImR5bkNhbGxfdmlqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqaT1Nb2R1bGVbImR5bkNhbGxfdmlqaSJdPU1vZHVsZVsiYXNtIl1bIklrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlkaT1Nb2R1bGVbImR5bkNhbGxfdmlkaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlkaT1Nb2R1bGVbImR5bkNhbGxfdmlkaSJdPU1vZHVsZVsiYXNtIl1bIkprIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGlpPU1vZHVsZVsiZHluQ2FsbF9kaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RpaT1Nb2R1bGVbImR5bkNhbGxfZGlpIl09TW9kdWxlWyJhc20iXVsiS2siXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9mZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZpIl09TW9kdWxlWyJhc20iXVsiTGsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qamk9TW9kdWxlWyJkeW5DYWxsX2pqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamppPU1vZHVsZVsiZHluQ2FsbF9qamkiXT1Nb2R1bGVbImFzbSJdWyJNayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2pqamk9TW9kdWxlWyJkeW5DYWxsX2pqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2pqamk9TW9kdWxlWyJkeW5DYWxsX2pqamkiXT1Nb2R1bGVbImFzbSJdWyJOayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmk9TW9kdWxlWyJkeW5DYWxsX2lpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmk9TW9kdWxlWyJkeW5DYWxsX2lpZmkiXT1Nb2R1bGVbImFzbSJdWyJPayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiUGsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9kZGRpPU1vZHVsZVsiZHluQ2FsbF9kZGRpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9kZGRpPU1vZHVsZVsiZHluQ2FsbF9kZGRpIl09TW9kdWxlWyJhc20iXVsiUWsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaj1Nb2R1bGVbImR5bkNhbGxfdmlpaWoiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlqPU1vZHVsZVsiZHluQ2FsbF92aWlpaiJdPU1vZHVsZVsiYXNtIl1bIlJrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmlmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmlmZmZmaSJdPU1vZHVsZVsiYXNtIl1bIlNrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGRpaWk9TW9kdWxlWyJkeW5DYWxsX2RkaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9kZGlpaT1Nb2R1bGVbImR5bkNhbGxfZGRpaWkiXT1Nb2R1bGVbImFzbSJdWyJUayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWpqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWpqaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWpqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWpqaWkiXT1Nb2R1bGVbImFzbSJdWyJVayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWppPU1vZHVsZVsiZHluQ2FsbF9paWlqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpamk9TW9kdWxlWyJkeW5DYWxsX2lpaWppIl09TW9kdWxlWyJhc20iXVsiVmsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlkaT1Nb2R1bGVbImR5bkNhbGxfaWlpZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWRpPU1vZHVsZVsiZHluQ2FsbF9paWlkaSJdPU1vZHVsZVsiYXNtIl1bIldrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaj1Nb2R1bGVbImR5bkNhbGxfdmlpaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaj1Nb2R1bGVbImR5bkNhbGxfdmlpaiJdPU1vZHVsZVsiYXNtIl1bIlhrIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpIl09TW9kdWxlWyJhc20iXVsiWWsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmlpIl09TW9kdWxlWyJhc20iXVsiWmsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlmaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlmaWkiXT1Nb2R1bGVbImFzbSJdWyJfayJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmlpIl09TW9kdWxlWyJhc20iXVsiJGsiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmkiXT1Nb2R1bGVbImFzbSJdWyJhbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2RpaWlkPU1vZHVsZVsiZHluQ2FsbF9kaWlpZCJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZGlpaWQ9TW9kdWxlWyJkeW5DYWxsX2RpaWlkIl09TW9kdWxlWyJhc20iXVsiYmwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaWlpaj1Nb2R1bGVbImR5bkNhbGxfamlpaWoiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppaWlqPU1vZHVsZVsiZHluQ2FsbF9qaWlpaiJdPU1vZHVsZVsiYXNtIl1bImNsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpaWY9TW9kdWxlWyJkeW5DYWxsX2ZpaWlmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlpZj1Nb2R1bGVbImR5bkNhbGxfZmlpaWYiXT1Nb2R1bGVbImFzbSJdWyJkbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpZmlpZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWZpaWZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlmaWlmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpZmlpZmlpIl09TW9kdWxlWyJhc20iXVsiZWwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaWZkZGZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlmZGRmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpZmRkZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWZkZGZpaSJdPU1vZHVsZVsiYXNtIl1bImZsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlmampmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpZmpqZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWZqamZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlmampmaWkiXT1Nb2R1bGVbImFzbSJdWyJnbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpZmZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWZmZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlmZmZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpZmZmZmlpIl09TW9kdWxlWyJhc20iXVsiaGwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maT1Nb2R1bGVbImR5bkNhbGxfZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpPU1vZHVsZVsiZHluQ2FsbF9maSJdPU1vZHVsZVsiYXNtIl1bImlsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmkiXT1Nb2R1bGVbImFzbSJdWyJqbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmkiXT1Nb2R1bGVbImFzbSJdWyJrbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lmaT1Nb2R1bGVbImR5bkNhbGxfaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pZmk9TW9kdWxlWyJkeW5DYWxsX2lmaSJdPU1vZHVsZVsiYXNtIl1bImxsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWRpPU1vZHVsZVsiZHluQ2FsbF9pZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lkaT1Nb2R1bGVbImR5bkNhbGxfaWRpIl09TW9kdWxlWyJhc20iXVsibWwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsibmwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpamk9TW9kdWxlWyJkeW5DYWxsX2lpaWlqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWppPU1vZHVsZVsiZHluQ2FsbF9paWlpamkiXT1Nb2R1bGVbImFzbSJdWyJvbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsicGwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJxbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWppaT1Nb2R1bGVbImR5bkNhbGxfaWlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlqaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWppaSJdPU1vZHVsZVsiYXNtIl1bInJsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlqaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlqaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlqaWlpaSJdPU1vZHVsZVsiYXNtIl1bInNsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlqaWlpPU1vZHVsZVsiZHluQ2FsbF9qaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppamlpaT1Nb2R1bGVbImR5bkNhbGxfamlqaWlpIl09TW9kdWxlWyJhc20iXVsidGwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWppaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpamlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlqaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWppaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ1bCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpamppaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpamppaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpamppaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpamppaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ2bCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlqamlpPU1vZHVsZVsiZHluQ2FsbF9paWlpamppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWpqaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlqamlpIl09TW9kdWxlWyJhc20iXVsid2wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWppaT1Nb2R1bGVbImR5bkNhbGxfaWlqaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpamlpPU1vZHVsZVsiZHluQ2FsbF9paWppaSJdPU1vZHVsZVsiYXNtIl1bInhsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsieWwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWppaWk9TW9kdWxlWyJkeW5DYWxsX2lpamlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlqaWlpPU1vZHVsZVsiZHluQ2FsbF9paWppaWkiXT1Nb2R1bGVbImFzbSJdWyJ6bCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2o9TW9kdWxlWyJkeW5DYWxsX2oiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2o9TW9kdWxlWyJkeW5DYWxsX2oiXT1Nb2R1bGVbImFzbSJdWyJBbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ppamo9TW9kdWxlWyJkeW5DYWxsX2ppamoiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppamo9TW9kdWxlWyJkeW5DYWxsX2ppamoiXT1Nb2R1bGVbImFzbSJdWyJCbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpaWlpaWppPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlpaWlpamk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWlpaWppIl09TW9kdWxlWyJhc20iXVsiQ2wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92amk9TW9kdWxlWyJkeW5DYWxsX3ZqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmppPU1vZHVsZVsiZHluQ2FsbF92amkiXT1Nb2R1bGVbImFzbSJdWyJEbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmaSJdPU1vZHVsZVsiYXNtIl1bIkVsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIkZsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamppaT1Nb2R1bGVbImR5bkNhbGxfamppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamppaT1Nb2R1bGVbImR5bkNhbGxfamppaSJdPU1vZHVsZVsiYXNtIl1bIkdsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWRpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWRpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWRpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWRpaSJdPU1vZHVsZVsiYXNtIl1bIkhsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlmaT1Nb2R1bGVbImR5bkNhbGxfZmlmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmlmaT1Nb2R1bGVbImR5bkNhbGxfZmlmaSJdPU1vZHVsZVsiYXNtIl1bIklsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlmZmk9TW9kdWxlWyJkeW5DYWxsX2ZpZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWZmaT1Nb2R1bGVbImR5bkNhbGxfZmlmZmkiXT1Nb2R1bGVbImFzbSJdWyJKbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmlmZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWZmZmk9TW9kdWxlWyJkeW5DYWxsX2ZpZmZmaSJdPU1vZHVsZVsiYXNtIl1bIktsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiTGwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiTWwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIk5sIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiT2wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiUGwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIlFsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiUmwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiU2wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWRkaT1Nb2R1bGVbImR5bkNhbGxfaWlkZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZGRpPU1vZHVsZVsiZHluQ2FsbF9paWRkaSJdPU1vZHVsZVsiYXNtIl1bIlRsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlpamk9TW9kdWxlWyJkeW5DYWxsX2ppaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qaWlqaT1Nb2R1bGVbImR5bkNhbGxfamlpamkiXT1Nb2R1bGVbImFzbSJdWyJVbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaWZpPU1vZHVsZVsiZHluQ2FsbF9maWlmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmlpZmk9TW9kdWxlWyJkeW5DYWxsX2ZpaWZpIl09TW9kdWxlWyJhc20iXVsiVmwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWZmaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZpPU1vZHVsZVsiZHluQ2FsbF9paWZmaSJdPU1vZHVsZVsiYXNtIl1bIldsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJYbCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWlpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlmaSJdPU1vZHVsZVsiYXNtIl1bIllsIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZpaT1Nb2R1bGVbImR5bkNhbGxfdmlmaWkiXT1Nb2R1bGVbImFzbSJdWyJabCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlqaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpamk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlqaSJdPU1vZHVsZVsiYXNtIl1bIl9sIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGppPU1vZHVsZVsiZHluQ2FsbF9kamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RqaT1Nb2R1bGVbImR5bkNhbGxfZGppIl09TW9kdWxlWyJhc20iXVsiJGwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pamk9TW9kdWxlWyJkeW5DYWxsX2lqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWppPU1vZHVsZVsiZHluQ2FsbF9pamkiXT1Nb2R1bGVbImFzbSJdWyJhbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpamppPU1vZHVsZVsiZHluQ2FsbF9paWpqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlqamk9TW9kdWxlWyJkeW5DYWxsX2lpamppIl09TW9kdWxlWyJhc20iXVsiYm0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmPU1vZHVsZVsiZHluQ2FsbF92aWlmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmPU1vZHVsZVsiZHluQ2FsbF92aWlmIl09TW9kdWxlWyJhc20iXVsiY20iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWo9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlqPU1vZHVsZVsiZHluQ2FsbF9paWlpaWoiXT1Nb2R1bGVbImFzbSJdWyJkbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWppaWlqaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpamlpaWppaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlqaWlpamlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppaWlqaWlpaSJdPU1vZHVsZVsiYXNtIl1bImVtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamRpPU1vZHVsZVsiZHluQ2FsbF9qZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2pkaT1Nb2R1bGVbImR5bkNhbGxfamRpIl09TW9kdWxlWyJhc20iXVsiZm0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWpqamk9TW9kdWxlWyJkeW5DYWxsX3ZpampqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqamppPU1vZHVsZVsiZHluQ2FsbF92aWpqamkiXT1Nb2R1bGVbImFzbSJdWyJnbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImhtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImltIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJqbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImttIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImxtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWRpPU1vZHVsZVsiZHluQ2FsbF92aWlpZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlkaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWRpIl09TW9kdWxlWyJhc20iXVsibW0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlqaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlqaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlqaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlqaWlpaWlpIl09TW9kdWxlWyJhc20iXVsibm0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ampqaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmpqamlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZqamppaWlpPU1vZHVsZVsiZHluQ2FsbF92ampqaWlpaSJdPU1vZHVsZVsiYXNtIl1bIm9tIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmppaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmppaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWlpaSJdPU1vZHVsZVsiYXNtIl1bInBtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlpaWlpPU1vZHVsZVsiZHluQ2FsbF9qaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppaWlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaWlpIl09TW9kdWxlWyJhc20iXVsicW0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWZmaSJdPU1vZHVsZVsiYXNtIl1bInJtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmZmaT1Nb2R1bGVbImR5bkNhbGxfdmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmZmaT1Nb2R1bGVbImR5bkNhbGxfdmZmaSJdPU1vZHVsZVsiYXNtIl1bInNtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJ0bSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlpaWlpIl09TW9kdWxlWyJhc20iXVsidW0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZmZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZpaWlpIl09TW9kdWxlWyJhc20iXVsidm0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92ZmlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92ZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92ZmlpaWlpIl09TW9kdWxlWyJhc20iXVsid20iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZmZmZmlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZmZmZmaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmZmZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF92ZmZmZmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ4bSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmkiXT1Nb2R1bGVbImFzbSJdWyJ5bSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlmZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlmZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmkiXT1Nb2R1bGVbImFzbSJdWyJ6bSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpZmZpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlmZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpZmZpIl09TW9kdWxlWyJhc20iXVsiQW0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmaSJdPU1vZHVsZVsiYXNtIl1bIkJtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZmZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmZmZmZmkiXT1Nb2R1bGVbImFzbSJdWyJDbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmZmZmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZmZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmZmZmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZmZmZmZmkiXT1Nb2R1bGVbImFzbSJdWyJEbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmZmkiXT1Nb2R1bGVbImFzbSJdWyJFbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmZpIl09TW9kdWxlWyJhc20iXVsiRm0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlmaSJdPU1vZHVsZVsiYXNtIl1bIkdtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpaSJdPU1vZHVsZVsiYXNtIl1bIkhtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZmaT1Nb2R1bGVbImR5bkNhbGxfZmZpIl09TW9kdWxlWyJhc20iXVsiSW0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmlpZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWZmZmZpPU1vZHVsZVsiZHluQ2FsbF9maWlmZmZmaSJdPU1vZHVsZVsiYXNtIl1bIkptIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmaSJdPU1vZHVsZVsiYXNtIl1bIkttIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZmZmZpIl09TW9kdWxlWyJhc20iXVsiTG0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZmZpaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZpaSJdPU1vZHVsZVsiYXNtIl1bIk1tIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZpaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmlpIl09TW9kdWxlWyJhc20iXVsiTm0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmlpIl09TW9kdWxlWyJhc20iXVsiT20iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWZpIl09TW9kdWxlWyJhc20iXVsiUG0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZmZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZmZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZmZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZmaWkiXT1Nb2R1bGVbImFzbSJdWyJRbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmaWZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZpZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaWZmaSJdPU1vZHVsZVsiYXNtIl1bIlJtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZpZmkiXT1Nb2R1bGVbImFzbSJdWyJTbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaWkiXT1Nb2R1bGVbImFzbSJdWyJUbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmlmZmkiXT1Nb2R1bGVbImFzbSJdWyJVbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmZmlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmZpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmlmaSJdPU1vZHVsZVsiYXNtIl1bIlZtIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmaWkiXT1Nb2R1bGVbImFzbSJdWyJXbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmZmZpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmZmZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZpZmZpIl09TW9kdWxlWyJhc20iXVsiWG0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmZmZmaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmZmaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmaWZpIl09TW9kdWxlWyJhc20iXVsiWW0iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmZmZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmaWkiXT1Nb2R1bGVbImFzbSJdWyJabSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmlmZmk9TW9kdWxlWyJkeW5DYWxsX2lpZmlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmlmZmk9TW9kdWxlWyJkeW5DYWxsX2lpZmlmZmkiXT1Nb2R1bGVbImFzbSJdWyJfbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpZmZpaWkiXT1Nb2R1bGVbImFzbSJdWyIkbSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlmZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWZmaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmlpIl09TW9kdWxlWyJhc20iXVsiYW4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJibiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmZpaWkiXT1Nb2R1bGVbImFzbSJdWyJjbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZmZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlmZmZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmZmaWlpIl09TW9kdWxlWyJhc20iXVsiZG4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92Zmk9TW9kdWxlWyJkeW5DYWxsX3ZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmZpPU1vZHVsZVsiZHluQ2FsbF92ZmkiXT1Nb2R1bGVbImFzbSJdWyJlbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZmZmk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZpIl09TW9kdWxlWyJhc20iXVsiZm4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9mZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmZpIl09TW9kdWxlWyJhc20iXVsiZ24iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZmZmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZmZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmZmZmkiXT1Nb2R1bGVbImFzbSJdWyJobiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaWZmZmk9TW9kdWxlWyJkeW5DYWxsX2ZpaWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWZmZmk9TW9kdWxlWyJkeW5DYWxsX2ZpaWZmZmkiXT1Nb2R1bGVbImFzbSJdWyJqbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZmZmlpPU1vZHVsZVsiZHluQ2FsbF9mZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZmaWk9TW9kdWxlWyJkeW5DYWxsX2ZmZmlpIl09TW9kdWxlWyJhc20iXVsia24iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmkiXT1Nb2R1bGVbImFzbSJdWyJsbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZpaWkiXT1Nb2R1bGVbImFzbSJdWyJtbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlmZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpZmZmaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmZpaSJdPU1vZHVsZVsiYXNtIl1bIm5uIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpaWlmZmZpPU1vZHVsZVsiZHluQ2FsbF9maWlpaWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWlpZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWlmZmZpIl09TW9kdWxlWyJhc20iXVsib24iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmZmkiXT1Nb2R1bGVbImFzbSJdWyJwbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpZmZpaT1Nb2R1bGVbImR5bkNhbGxfZmlmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWZmaWk9TW9kdWxlWyJkeW5DYWxsX2ZpZmZpaSJdPU1vZHVsZVsiYXNtIl1bInFuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlmZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZmaWlpIl09TW9kdWxlWyJhc20iXVsicm4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlpZmZpaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWlmZmlpPU1vZHVsZVsiZHluQ2FsbF9maWlpZmZpaSJdPU1vZHVsZVsiYXNtIl1bInNuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2ZpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ0biJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpamlqaWppaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWppamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWppamlqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpamlqaWppaSJdPU1vZHVsZVsiYXNtIl1bInVuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZGlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWRpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlkaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZGlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ2biJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppaWkiXT1Nb2R1bGVbImFzbSJdWyJ3biJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpamlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpamlpIl09TW9kdWxlWyJhc20iXVsieG4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpamlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlqaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpamlpaSJdPU1vZHVsZVsiYXNtIl1bInluIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlqaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpamlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWppaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlqaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ6biJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpamlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWppaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlqaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpamlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiQW4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWppaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlqaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpamlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWppaWlpaSJdPU1vZHVsZVsiYXNtIl1bIkJuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlkaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZGlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWRpaT1Nb2R1bGVbImR5bkNhbGxfdmlkaWkiXT1Nb2R1bGVbImFzbSJdWyJDbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlkaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlkaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlkaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlkaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJEbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJFbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWZmaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlmZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWZmaSJdPU1vZHVsZVsiYXNtIl1bIkZuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWZpaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWkiXT1Nb2R1bGVbImFzbSJdWyJHbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWZmaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmZpaSJdPU1vZHVsZVsiYXNtIl1bIkhuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlpaSJdPU1vZHVsZVsiYXNtIl1bIkluIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmlmaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlmaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlmaWkiXT1Nb2R1bGVbImFzbSJdWyJKbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlmaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIktuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmZmlmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZmaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmlmaWlpIl09TW9kdWxlWyJhc20iXVsiTG4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWZpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmlpZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlmaWlmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZpaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJNbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWZpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlmaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpaWlpIl09TW9kdWxlWyJhc20iXVsiTm4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWZpaSJdPU1vZHVsZVsiYXNtIl1bIk9uIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmaWlmZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWlmZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlmaWlmZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWlmZmZpaSJdPU1vZHVsZVsiYXNtIl1bIlBuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpZmlpPU1vZHVsZVsiZHluQ2FsbF9maWlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWZpaT1Nb2R1bGVbImR5bkNhbGxfZmlpZmlpIl09TW9kdWxlWyJhc20iXVsiUW4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpZmlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWZpaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlmaWlmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpZmlpZmlpaSJdPU1vZHVsZVsiYXNtIl1bIlJuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZmZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZmZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmZmaWlpIl09TW9kdWxlWyJhc20iXVsiU24iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlkZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWRmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZGZpPU1vZHVsZVsiZHluQ2FsbF9paWlkZmkiXT1Nb2R1bGVbImFzbSJdWyJUbiJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWpmaT1Nb2R1bGVbImR5bkNhbGxfaWlpamZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlqZmk9TW9kdWxlWyJkeW5DYWxsX2lpaWpmaSJdPU1vZHVsZVsiYXNtIl1bIlVuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmZpaSJdPU1vZHVsZVsiYXNtIl1bIlZuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmZmZpPU1vZHVsZVsiZHluQ2FsbF9paWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZmaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmZpIl09TW9kdWxlWyJhc20iXVsiV24iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZmlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlmaWZpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmlmaSJdPU1vZHVsZVsiYXNtIl1bIlhuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmZpZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmZpZmlpaSJdPU1vZHVsZVsiYXNtIl1bIlluIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmlpZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlmaWlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWZpaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlpZmlpIl09TW9kdWxlWyJhc20iXVsiWm4iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlmaWlmaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlpZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWZpaWZpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlmaWlmaWlpaSJdPU1vZHVsZVsiYXNtIl1bIl9uIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWZpaSJdPU1vZHVsZVsiYXNtIl1bIiRuIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWZmZmlpPU1vZHVsZVsiZHluQ2FsbF9pZmZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lmZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWZmZmlpIl09TW9kdWxlWyJhc20iXVsiYW8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZmZmaWk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZmZmlpPU1vZHVsZVsiZHluQ2FsbF9mZmZmaWkiXT1Nb2R1bGVbImFzbSJdWyJibyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZmZmZpZmk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZmZmZpZmk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZpZmkiXT1Nb2R1bGVbImFzbSJdWyJjbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZmZmZpZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZmZmlmZmk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZpZmZpIl09TW9kdWxlWyJhc20iXVsiZW8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lmaWlpPU1vZHVsZVsiZHluQ2FsbF9pZmlpaSJdPU1vZHVsZVsiYXNtIl1bImZvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiZ28iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImhvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWZmaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmlpaWlpIl09TW9kdWxlWyJhc20iXVsiaW8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWZmaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWlmZmlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZmZpZmlpPU1vZHVsZVsiZHluQ2FsbF9paWZmaWZpaSJdPU1vZHVsZVsiYXNtIl1bImpvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlmaWlmaWk9TW9kdWxlWyJkeW5DYWxsX2lpZmlpZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWZpaWZpaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWlmaWkiXT1Nb2R1bGVbImFzbSJdWyJrbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmlmaT1Nb2R1bGVbImR5bkNhbGxfaWlmaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWZpZmk9TW9kdWxlWyJkeW5DYWxsX2lpZmlmaSJdPU1vZHVsZVsiYXNtIl1bImxvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlmaSJdPU1vZHVsZVsiYXNtIl1bIm1vIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGlpZGk9TW9kdWxlWyJkeW5DYWxsX2RpaWRpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9kaWlkaT1Nb2R1bGVbImR5bkNhbGxfZGlpZGkiXT1Nb2R1bGVbImFzbSJdWyJubyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaWZkaT1Nb2R1bGVbImR5bkNhbGxfZmlpZmRpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlmZGk9TW9kdWxlWyJkeW5DYWxsX2ZpaWZkaSJdPU1vZHVsZVsiYXNtIl1bIm9vIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWZkZGZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlmZGRmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpZmRkZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWZkZGZpaWkiXT1Nb2R1bGVbImFzbSJdWyJwbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaWZqaT1Nb2R1bGVbImR5bkNhbGxfZmlpZmppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlmamk9TW9kdWxlWyJkeW5DYWxsX2ZpaWZqaSJdPU1vZHVsZVsiYXNtIl1bInFvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWZqamZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlmampmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpZmpqZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWZqamZpaWkiXT1Nb2R1bGVbImFzbSJdWyJybyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmlpaSJdPU1vZHVsZVsiYXNtIl1bInNvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlpIl09TW9kdWxlWyJhc20iXVsidG8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpZmZmZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWZmZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlmZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpZmZmZmlpaSJdPU1vZHVsZVsiYXNtIl1bInVvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ2byJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpZmlpaSJdPU1vZHVsZVsiYXNtIl1bIndvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmZmZmZpIl09TW9kdWxlWyJhc20iXVsieG8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZmZpZmZmaT1Nb2R1bGVbImR5bkNhbGxfZmZmaWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZmZmlmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZpZmZmaSJdPU1vZHVsZVsiYXNtIl1bInlvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWZpaWlpPU1vZHVsZVsiZHluQ2FsbF9pZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lmaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWZpaWlpIl09TW9kdWxlWyJhc20iXVsiem8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pZGlpaWlpPU1vZHVsZVsiZHluQ2FsbF9pZGlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pZGlpaWlpPU1vZHVsZVsiZHluQ2FsbF9pZGlpaWlpIl09TW9kdWxlWyJhc20iXVsiQW8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pZGlpaWk9TW9kdWxlWyJkeW5DYWxsX2lkaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWRpaWlpPU1vZHVsZVsiZHluQ2FsbF9pZGlpaWkiXT1Nb2R1bGVbImFzbSJdWyJCbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lkaWk9TW9kdWxlWyJkeW5DYWxsX2lkaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lkaWk9TW9kdWxlWyJkeW5DYWxsX2lkaWkiXT1Nb2R1bGVbImFzbSJdWyJDbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWppaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpamlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWppaWlpIl09TW9kdWxlWyJhc20iXVsiRG8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92amlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmppaWlpPU1vZHVsZVsiZHluQ2FsbF92amlpaWkiXT1Nb2R1bGVbImFzbSJdWyJFbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lkZGk9TW9kdWxlWyJkeW5DYWxsX2lkZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lkZGk9TW9kdWxlWyJkeW5DYWxsX2lkZGkiXT1Nb2R1bGVbImFzbSJdWyJGbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlmaWlmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmlpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpaWZpIl09TW9kdWxlWyJhc20iXVsiR28iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWZpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWZpaWZpIl09TW9kdWxlWyJhc20iXVsiSG8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJJbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJKbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZGRmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWRkZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlkZGZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpZGRmZmZpIl09TW9kdWxlWyJhc20iXVsiS28iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlkZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZGZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWRmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlkZmZmaSJdPU1vZHVsZVsiYXNtIl1bIkxvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlkaWZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpZGlmZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWRpZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlkaWZmZmkiXT1Nb2R1bGVbImFzbSJdWyJNbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmZmZpIl09TW9kdWxlWyJhc20iXVsiTm8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWRkaT1Nb2R1bGVbImR5bkNhbGxfdmlkZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZGRpPU1vZHVsZVsiZHluQ2FsbF92aWRkaSJdPU1vZHVsZVsiYXNtIl1bIk9vIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWZmaT1Nb2R1bGVbImR5bkNhbGxfaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWZmaT1Nb2R1bGVbImR5bkNhbGxfaWZmaSJdPU1vZHVsZVsiYXNtIl1bIlBvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmZpaT1Nb2R1bGVbImR5bkNhbGxfZmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZpaT1Nb2R1bGVbImR5bkNhbGxfZmZpaSJdPU1vZHVsZVsiYXNtIl1bIlFvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF9maWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWlpIl09TW9kdWxlWyJhc20iXVsiUm8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9kZGRkaT1Nb2R1bGVbImR5bkNhbGxfZGRkZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RkZGRpPU1vZHVsZVsiZHluQ2FsbF9kZGRkaSJdPU1vZHVsZVsiYXNtIl1bIlNvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGRpPU1vZHVsZVsiZHluQ2FsbF9kZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RkaT1Nb2R1bGVbImR5bkNhbGxfZGRpIl09TW9kdWxlWyJhc20iXVsiVG8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpamlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWppaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpamlpaWkiXT1Nb2R1bGVbImFzbSJdWyJVbyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ppamlpPU1vZHVsZVsiZHluQ2FsbF9qaWppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamlqaWk9TW9kdWxlWyJkeW5DYWxsX2ppamlpIl09TW9kdWxlWyJhc20iXVsiVm8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWppPU1vZHVsZVsiZHluQ2FsbF9paWlpaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWppPU1vZHVsZVsiZHluQ2FsbF9paWlpaWppIl09TW9kdWxlWyJhc20iXVsiV28iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpamlpPU1vZHVsZVsiZHluQ2FsbF92aWlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpamlpPU1vZHVsZVsiZHluQ2FsbF92aWlpamlpIl09TW9kdWxlWyJhc20iXVsiWG8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pamlpPU1vZHVsZVsiZHluQ2FsbF9pamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamlpPU1vZHVsZVsiZHluQ2FsbF9pamlpIl09TW9kdWxlWyJhc20iXVsiWW8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pamppaWlpPU1vZHVsZVsiZHluQ2FsbF9pamppaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamppaWlpPU1vZHVsZVsiZHluQ2FsbF9pamppaWlpIl09TW9kdWxlWyJhc20iXVsiWm8iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZGlpaWlpPU1vZHVsZVsiZHluQ2FsbF92ZGlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92ZGlpaWlpPU1vZHVsZVsiZHluQ2FsbF92ZGlpaWlpIl09TW9kdWxlWyJhc20iXVsiX28iXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9kaWlqaT1Nb2R1bGVbImR5bkNhbGxfZGlpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RpaWppPU1vZHVsZVsiZHluQ2FsbF9kaWlqaSJdPU1vZHVsZVsiYXNtIl1bIiRvIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmppaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmppaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImFwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmppaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92amlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZqaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmppaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiYnAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pamlpaWk9TW9kdWxlWyJkeW5DYWxsX2lqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWppaWlpPU1vZHVsZVsiZHluQ2FsbF9pamlpaWkiXT1Nb2R1bGVbImFzbSJdWyJjcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZGlpPU1vZHVsZVsiZHluQ2FsbF9paWRpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlkaWk9TW9kdWxlWyJkeW5DYWxsX2lpZGlpIl09TW9kdWxlWyJhc20iXVsiZHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWRpaWk9TW9kdWxlWyJkeW5DYWxsX2lpZGlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlkaWlpPU1vZHVsZVsiZHluQ2FsbF9paWRpaWkiXT1Nb2R1bGVbImFzbSJdWyJlcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ppZGk9TW9kdWxlWyJkeW5DYWxsX2ppZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppZGk9TW9kdWxlWyJkeW5DYWxsX2ppZGkiXT1Nb2R1bGVbImFzbSJdWyJmcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2Rpamk9TW9kdWxlWyJkeW5DYWxsX2RpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2Rpamk9TW9kdWxlWyJkeW5DYWxsX2RpamkiXT1Nb2R1bGVbImFzbSJdWyJncCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpZGk9TW9kdWxlWyJkeW5DYWxsX2ZpZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpZGk9TW9kdWxlWyJkeW5DYWxsX2ZpZGkiXT1Nb2R1bGVbImFzbSJdWyJocCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lqaWlpPU1vZHVsZVsiZHluQ2FsbF9pamlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWppaWk9TW9kdWxlWyJkeW5DYWxsX2lqaWlpIl09TW9kdWxlWyJhc20iXVsiaXAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZmZmZpPU1vZHVsZVsiZHluQ2FsbF92ZmZmaSJdPU1vZHVsZVsiYXNtIl1bImpwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmZmZmZpPU1vZHVsZVsiZHluQ2FsbF92ZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmZmZmZpIl09TW9kdWxlWyJhc20iXVsia3AiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpZmZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmZpaSJdPU1vZHVsZVsiYXNtIl1bImxwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmZmZpIl09TW9kdWxlWyJhc20iXVsibXAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZmaWlpPU1vZHVsZVsiZHluQ2FsbF92ZmlpaSJdPU1vZHVsZVsiYXNtIl1bIm5wIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmZpaT1Nb2R1bGVbImR5bkNhbGxfdmZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmZpaT1Nb2R1bGVbImR5bkNhbGxfdmZpaSJdPU1vZHVsZVsiYXNtIl1bIm9wIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZpaWlpaSJdPU1vZHVsZVsiYXNtIl1bInBwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWZpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlmaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZpaWlpIl09TW9kdWxlWyJhc20iXVsicXAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmlpaSJdPU1vZHVsZVsiYXNtIl1bInJwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqamlpPU1vZHVsZVsiZHluQ2FsbF92aWpqaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpamppaT1Nb2R1bGVbImR5bkNhbGxfdmlqamlpIl09TW9kdWxlWyJhc20iXVsic3AiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWZpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWZpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpZmZpIl09TW9kdWxlWyJhc20iXVsidHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWZpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWZpaWZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaWZpIl09TW9kdWxlWyJhc20iXVsidXAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWZpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWZpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaWlpIl09TW9kdWxlWyJhc20iXVsidnAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIndwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlmaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWZpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ4cCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWZmaWkiXT1Nb2R1bGVbImFzbSJdWyJ5cCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmZmZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZmZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZmZmlpaSJdPU1vZHVsZVsiYXNtIl1bInpwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpZmlmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpZmkiXT1Nb2R1bGVbImFzbSJdWyJBcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlmaWZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmaWZmaSJdPU1vZHVsZVsiYXNtIl1bIkJwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlmaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmaSJdPU1vZHVsZVsiYXNtIl1bIkNwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmaWZmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZpZmZpaT1Nb2R1bGVbImR5bkNhbGxfdmlmaWZmaWkiXT1Nb2R1bGVbImFzbSJdWyJEcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmlmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlmZmkiXT1Nb2R1bGVbImFzbSJdWyJFcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWZpZmlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWZpZmlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpZmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJGcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWZpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWZpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZpaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJHcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZmZmZpIl09TW9kdWxlWyJhc20iXVsiSHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZmaWlpaSJdPU1vZHVsZVsiYXNtIl1bIklwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlmZmZmaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmZmZmaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlmZmZmaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmZmZmaWlpaSJdPU1vZHVsZVsiYXNtIl1bIkpwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlmaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlpaWlpIl09TW9kdWxlWyJhc20iXVsiS3AiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWZmZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWZmZmZpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWZmZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWZmZmZpaWlpIl09TW9kdWxlWyJhc20iXVsiTHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlpZmZpaWlpaWlpaWlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWZmaWlpaWlpaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIk1wIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpamppPU1vZHVsZVsiZHluQ2FsbF92aWlqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWpqaT1Nb2R1bGVbImR5bkNhbGxfdmlpamppIl09TW9kdWxlWyJhc20iXVsiTnAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmaWZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZpZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlmaWZpaSJdPU1vZHVsZVsiYXNtIl1bIk9wIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmZmZpIl09TW9kdWxlWyJhc20iXVsiUHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlmZmlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWZmaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZmZpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlmZmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJRcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlmZmlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlmZmlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmlpaWkiXT1Nb2R1bGVbImFzbSJdWyJScCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZqaWk9TW9kdWxlWyJkeW5DYWxsX3ZqaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZqaWk9TW9kdWxlWyJkeW5DYWxsX3ZqaWkiXT1Nb2R1bGVbImFzbSJdWyJTcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZmZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmZmZmZmZmk9TW9kdWxlWyJkeW5DYWxsX2ZmZmZmZmZpIl09TW9kdWxlWyJhc20iXVsiVHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmaWZpPU1vZHVsZVsiZHluQ2FsbF92aWZmaWZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZmaWZpPU1vZHVsZVsiZHluQ2FsbF92aWZmaWZpIl09TW9kdWxlWyJhc20iXVsiVXAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pZmZmaT1Nb2R1bGVbImR5bkNhbGxfaWZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lmZmZpPU1vZHVsZVsiZHluQ2FsbF9pZmZmaSJdPU1vZHVsZVsiYXNtIl1bIlZwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpaWZmaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmlpaWZmaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWZmaSJdPU1vZHVsZVsiYXNtIl1bIldwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpZmlpaSJdPU1vZHVsZVsiYXNtIl1bIlhwIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZpaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmlpaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZpaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJZcCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWZmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlmZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWZmaWlpIl09TW9kdWxlWyJhc20iXVsiWnAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlmZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmlpaSJdPU1vZHVsZVsiYXNtIl1bIl9wIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmlpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiJHAiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZmZmZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmZmZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9mZmZmZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9mZmZmZmZmZmZpIl09TW9kdWxlWyJhc20iXVsiYXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJicSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlmaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiY3EiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpZmlmZmlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmaWZmaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWZpZmZpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmlmZmlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJkcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmaWlmaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZpaWZpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlmZmlpZmlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmaWlmaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImVxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImZxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWZpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWZpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJncSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWZpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImhxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmlmaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlmaWZpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmlmaWlpaWlpIl09TW9kdWxlWyJhc20iXVsiaXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpZmZpaWZpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmZpaWZpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpZmZpaWZpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmZpaWZpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsianEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWZpaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlmaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpZmlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bImtxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmaWZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmlmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfdmlmaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJscSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWppaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlqaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpaWlpamlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWppaWlpIl09TW9kdWxlWyJhc20iXVsibXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWZpaT1Nb2R1bGVbImR5bkNhbGxfZmlmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpZmlpPU1vZHVsZVsiZHluQ2FsbF9maWZpaSJdPU1vZHVsZVsiYXNtIl1bIm5xIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpZmZpIl09TW9kdWxlWyJhc20iXVsib3EiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWRpaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWlkaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpZGlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWRpaWlpaSJdPU1vZHVsZVsiYXNtIl1bInBxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmZmZmaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmZmZmaSJdPU1vZHVsZVsiYXNtIl1bInFxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZmZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmZmZmZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmZmZmZmZmaT1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmZmZmZmZpIl09TW9kdWxlWyJhc20iXVsicnEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWRpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZGlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlkaWlpPU1vZHVsZVsiZHluQ2FsbF92aWRpaWkiXT1Nb2R1bGVbImFzbSJdWyJzcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZmZmZmZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlmZmZmZmZmZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpZmZmZmZmZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZmZmZmZmZmaWlpIl09TW9kdWxlWyJhc20iXVsidHEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWZmZmZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmZmZmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpZmZmZmlpPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZmZmZpaSJdPU1vZHVsZVsiYXNtIl1bInVxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfZmlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bInZxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIndxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqaWlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpamlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWppaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ4cSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2pqaWlpaT1Nb2R1bGVbImR5bkNhbGxfamppaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qamlpaWk9TW9kdWxlWyJkeW5DYWxsX2pqaWlpaSJdPU1vZHVsZVsiYXNtIl1bInlxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamppaWlpaT1Nb2R1bGVbImR5bkNhbGxfamppaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamppaWlpaT1Nb2R1bGVbImR5bkNhbGxfamppaWlpaSJdPU1vZHVsZVsiYXNtIl1bInpxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlqamppPU1vZHVsZVsiZHluQ2FsbF9qaWpqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppampqaT1Nb2R1bGVbImR5bkNhbGxfamlqamppIl09TW9kdWxlWyJhc20iXVsiQXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaWpqamlpPU1vZHVsZVsiZHluQ2FsbF9qaWpqamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qaWpqamlpPU1vZHVsZVsiZHluQ2FsbF9qaWpqamlpIl09TW9kdWxlWyJhc20iXVsiQnEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qamlpaT1Nb2R1bGVbImR5bkNhbGxfamppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2pqaWlpPU1vZHVsZVsiZHluQ2FsbF9qamlpaSJdPU1vZHVsZVsiYXNtIl1bIkNxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWppamlpaWlpPU1vZHVsZVsiZHluQ2FsbF9pamlqaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lqaWppaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWppamlpaWlpIl09TW9kdWxlWyJhc20iXVsiRHEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pampqaWlpPU1vZHVsZVsiZHluQ2FsbF9pampqaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pampqaWlpPU1vZHVsZVsiZHluQ2FsbF9pampqaWlpIl09TW9kdWxlWyJhc20iXVsiRXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWpqamlpamlpPU1vZHVsZVsiZHluQ2FsbF92aWpqamlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWpqamlpamlpPU1vZHVsZVsiZHluQ2FsbF92aWpqamlpamlpIl09TW9kdWxlWyJhc20iXVsiRnEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pampqaWlqaWk9TW9kdWxlWyJkeW5DYWxsX2lqamppaWppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWpqamlpamlpPU1vZHVsZVsiZHluQ2FsbF9pampqaWlqaWkiXT1Nb2R1bGVbImFzbSJdWyJHcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2pmaT1Nb2R1bGVbImR5bkNhbGxfamZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qZmk9TW9kdWxlWyJkeW5DYWxsX2pmaSJdPU1vZHVsZVsiYXNtIl1bIkhxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmppPU1vZHVsZVsiZHluQ2FsbF9mamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZqaT1Nb2R1bGVbImR5bkNhbGxfZmppIl09TW9kdWxlWyJhc20iXVsiSXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZGk9TW9kdWxlWyJkeW5DYWxsX2ZkaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmRpPU1vZHVsZVsiZHluQ2FsbF9mZGkiXT1Nb2R1bGVbImFzbSJdWyJKcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2RmaT1Nb2R1bGVbImR5bkNhbGxfZGZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9kZmk9TW9kdWxlWyJkeW5DYWxsX2RmaSJdPU1vZHVsZVsiYXNtIl1bIktxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlkaWk9TW9kdWxlWyJkeW5DYWxsX2ppZGlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qaWRpaT1Nb2R1bGVbImR5bkNhbGxfamlkaWkiXT1Nb2R1bGVbImFzbSJdWyJMcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpamppPU1vZHVsZVsiZHluQ2FsbF92aWpqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqamk9TW9kdWxlWyJkeW5DYWxsX3ZpamppIl09TW9kdWxlWyJhc20iXVsiTXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaWppPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWppPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWppIl09TW9kdWxlWyJhc20iXVsiTnEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpaWlqaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpaWppPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlqaSJdPU1vZHVsZVsiYXNtIl1bIk9xIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpaWlpaWppPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpaWlpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpaWlqaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWppIl09TW9kdWxlWyJhc20iXVsiUHEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pamlpamlpPU1vZHVsZVsiZHluQ2FsbF9pamlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamlpamlpPU1vZHVsZVsiZHluQ2FsbF9pamlpamlpIl09TW9kdWxlWyJhc20iXVsiUXEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92amppaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmpqaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZqamlpaWlpPU1vZHVsZVsiZHluQ2FsbF92amppaWlpaSJdPU1vZHVsZVsiYXNtIl1bIlJxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmpqaWk9TW9kdWxlWyJkeW5DYWxsX3ZqamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92amppaT1Nb2R1bGVbImR5bkNhbGxfdmpqaWkiXT1Nb2R1bGVbImFzbSJdWyJTcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lqaWlqaT1Nb2R1bGVbImR5bkNhbGxfaWppaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamlpamk9TW9kdWxlWyJkeW5DYWxsX2lqaWlqaSJdPU1vZHVsZVsiYXNtIl1bIlRxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWppaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWppaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWppaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWppaWlpaSJdPU1vZHVsZVsiYXNtIl1bIlVxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWppaWlpamk9TW9kdWxlWyJkeW5DYWxsX2lqaWlpaWppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamlpaWlqaT1Nb2R1bGVbImR5bkNhbGxfaWppaWlpamkiXT1Nb2R1bGVbImFzbSJdWyJWcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lqamlpaT1Nb2R1bGVbImR5bkNhbGxfaWpqaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamppaWk9TW9kdWxlWyJkeW5DYWxsX2lqamlpaSJdPU1vZHVsZVsiYXNtIl1bIldxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaWlpaSJdPU1vZHVsZVsiYXNtIl1bIlhxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGRpaT1Nb2R1bGVbImR5bkNhbGxfZGRpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZGRpaT1Nb2R1bGVbImR5bkNhbGxfZGRpaSJdPU1vZHVsZVsiYXNtIl1bIllxIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWRpaWk9TW9kdWxlWyJkeW5DYWxsX2lkaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pZGlpaT1Nb2R1bGVbImR5bkNhbGxfaWRpaWkiXT1Nb2R1bGVbImFzbSJdWyJacSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lmaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lmaWlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lmaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lmaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJfcSJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2pqamlpPU1vZHVsZVsiZHluQ2FsbF9qamppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfampqaWk9TW9kdWxlWyJkeW5DYWxsX2pqamlpIl09TW9kdWxlWyJhc20iXVsiJHEiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZGlpaT1Nb2R1bGVbImR5bkNhbGxfdmRpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZkaWlpPU1vZHVsZVsiZHluQ2FsbF92ZGlpaSJdPU1vZHVsZVsiYXNtIl1bImFyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamRpaT1Nb2R1bGVbImR5bkNhbGxfamRpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfamRpaT1Nb2R1bGVbImR5bkNhbGxfamRpaSJdPU1vZHVsZVsiYXNtIl1bImJyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlqaWpqaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWpqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqaWpqaT1Nb2R1bGVbImR5bkNhbGxfdmlqaWpqaSJdPU1vZHVsZVsiYXNtIl1bImNyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlqamppPU1vZHVsZVsiZHluQ2FsbF9paWpqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpampqaT1Nb2R1bGVbImR5bkNhbGxfaWlqamppIl09TW9kdWxlWyJhc20iXVsiZHIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlqamppPU1vZHVsZVsiZHluQ2FsbF92aWlqamppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlqamppPU1vZHVsZVsiZHluQ2FsbF92aWlqamppIl09TW9kdWxlWyJhc20iXVsiZXIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZGlpPU1vZHVsZVsiZHluQ2FsbF92ZGlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92ZGlpPU1vZHVsZVsiZHluQ2FsbF92ZGlpIl09TW9kdWxlWyJhc20iXVsiZnIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpamlpPU1vZHVsZVsiZHluQ2FsbF9paWlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpamlpPU1vZHVsZVsiZHluQ2FsbF9paWlpamlpIl09TW9kdWxlWyJhc20iXVsiZ3IiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaWpqaT1Nb2R1bGVbImR5bkNhbGxfamlqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppamppPU1vZHVsZVsiZHluQ2FsbF9qaWpqaSJdPU1vZHVsZVsiYXNtIl1bImhyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZGlkZGk9TW9kdWxlWyJkeW5DYWxsX2RpZGRpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9kaWRkaT1Nb2R1bGVbImR5bkNhbGxfZGlkZGkiXT1Nb2R1bGVbImFzbSJdWyJpciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2RpZGk9TW9kdWxlWyJkeW5DYWxsX2RpZGkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2RpZGk9TW9kdWxlWyJkeW5DYWxsX2RpZGkiXT1Nb2R1bGVbImFzbSJdWyJqciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlqamk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlqamk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlqamkiXT1Nb2R1bGVbImFzbSJdWyJrciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpamppaT1Nb2R1bGVbImR5bkNhbGxfaWlqamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWpqaWk9TW9kdWxlWyJkeW5DYWxsX2lpamppaSJdPU1vZHVsZVsiYXNtIl1bImxyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfampqamk9TW9kdWxlWyJkeW5DYWxsX2pqamppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qampqaT1Nb2R1bGVbImR5bkNhbGxfampqamkiXT1Nb2R1bGVbImFzbSJdWyJtciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWppamlpPU1vZHVsZVsiZHluQ2FsbF92aWlqaWppaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpamlqaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppamlpIl09TW9kdWxlWyJhc20iXVsibnIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWppamk9TW9kdWxlWyJkeW5DYWxsX3ZpamlqaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlqaWppPU1vZHVsZVsiZHluQ2FsbF92aWppamkiXT1Nb2R1bGVbImFzbSJdWyJvciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWppaWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWppaWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWppaWppaWkiXT1Nb2R1bGVbImFzbSJdWyJwciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpamlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpamlpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpamlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpamlpaWkiXT1Nb2R1bGVbImFzbSJdWyJxciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2RpPU1vZHVsZVsiZHluQ2FsbF9kaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZGk9TW9kdWxlWyJkeW5DYWxsX2RpIl09TW9kdWxlWyJhc20iXVsicnIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9qaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9qaWlpaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qaWlpaWlpaWlpPU1vZHVsZVsiZHluQ2FsbF9qaWlpaWlpaWlpIl09TW9kdWxlWyJhc20iXVsic3IiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWppaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlqaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpamlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWppaSJdPU1vZHVsZVsiYXNtIl1bInRyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlkaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpZGlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpaWRpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWlkaWkiXT1Nb2R1bGVbImFzbSJdWyJ1ciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlkaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlkaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlkaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlkaWkiXT1Nb2R1bGVbImFzbSJdWyJ2ciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWRpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWRpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWRpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWRpaWkiXT1Nb2R1bGVbImFzbSJdWyJ3ciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZGZpaT1Nb2R1bGVbImR5bkNhbGxfaWlkZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWRmaWk9TW9kdWxlWyJkeW5DYWxsX2lpZGZpaSJdPU1vZHVsZVsiYXNtIl1bInhyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlkZmk9TW9kdWxlWyJkeW5DYWxsX2lpZGZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWRmaT1Nb2R1bGVbImR5bkNhbGxfaWlkZmkiXT1Nb2R1bGVbImFzbSJdWyJ5ciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZGRmaT1Nb2R1bGVbImR5bkNhbGxfaWlkZGZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWRkZmk9TW9kdWxlWyJkeW5DYWxsX2lpZGRmaSJdPU1vZHVsZVsiYXNtIl1bInpyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlqZmlpPU1vZHVsZVsiZHluQ2FsbF9paWpmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpamZpaT1Nb2R1bGVbImR5bkNhbGxfaWlqZmlpIl09TW9kdWxlWyJhc20iXVsiQXIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWpmaT1Nb2R1bGVbImR5bkNhbGxfaWlqZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpamZpPU1vZHVsZVsiZHluQ2FsbF9paWpmaSJdPU1vZHVsZVsiYXNtIl1bIkJyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlqamZpPU1vZHVsZVsiZHluQ2FsbF9paWpqZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpampmaT1Nb2R1bGVbImR5bkNhbGxfaWlqamZpIl09TW9kdWxlWyJhc20iXVsiQ3IiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZmZpaWlqaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZmaWlpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlmZmlpaWppPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZpaWlqaSJdPU1vZHVsZVsiYXNtIl1bIkRyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZGZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZGZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZGZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZGZpaSJdPU1vZHVsZVsiYXNtIl1bIkVyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpamZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpamZpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpamZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpamZpaSJdPU1vZHVsZVsiYXNtIl1bIkZyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfamlpaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2ppaWlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9qaWlpaWlpaT1Nb2R1bGVbImR5bkNhbGxfamlpaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJHciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlmZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZpaWlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWZmaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmlpaWlpIl09TW9kdWxlWyJhc20iXVsiSHIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZGZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWRmaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlkZmlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZGZpaSJdPU1vZHVsZVsiYXNtIl1bIklyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWpmaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlqZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpamZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWpmaWkiXT1Nb2R1bGVbImFzbSJdWyJKciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ppaWlpamk9TW9kdWxlWyJkeW5DYWxsX2ppaWlpamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ppaWlpamk9TW9kdWxlWyJkeW5DYWxsX2ppaWlpamkiXT1Nb2R1bGVbImFzbSJdWyJLciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2ZpaWlpZmk9TW9kdWxlWyJkeW5DYWxsX2ZpaWlpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpaWlpZmk9TW9kdWxlWyJkeW5DYWxsX2ZpaWlpZmkiXT1Nb2R1bGVbImFzbSJdWyJMciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWpqaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWpqaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWpqaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWpqaWkiXT1Nb2R1bGVbImFzbSJdWyJNciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3Zpaj1Nb2R1bGVbImR5bkNhbGxfdmlqIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWo9TW9kdWxlWyJkeW5DYWxsX3ZpaiJdPU1vZHVsZVsiYXNtIl1bIk5yIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWppaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlqaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpamlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWppaWkiXT1Nb2R1bGVbImFzbSJdWyJPciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlqPU1vZHVsZVsiZHluQ2FsbF9paWlpaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWo9TW9kdWxlWyJkeW5DYWxsX2lpaWlqIl09TW9kdWxlWyJhc20iXVsiUHIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9pamo9TW9kdWxlWyJkeW5DYWxsX2lqaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWpqPU1vZHVsZVsiZHluQ2FsbF9pamoiXT1Nb2R1bGVbImFzbSJdWyJRciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3Zqamk9TW9kdWxlWyJkeW5DYWxsX3ZqamkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3Zqamk9TW9kdWxlWyJkeW5DYWxsX3ZqamkiXT1Nb2R1bGVbImFzbSJdWyJSciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lqPU1vZHVsZVsiZHluQ2FsbF9paiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWo9TW9kdWxlWyJkeW5DYWxsX2lqIl09TW9kdWxlWyJhc20iXVsiU3IiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWY9TW9kdWxlWyJkeW5DYWxsX3ZpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmPU1vZHVsZVsiZHluQ2FsbF92aWYiXT1Nb2R1bGVbImFzbSJdWyJUciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZD1Nb2R1bGVbImR5bkNhbGxfdmlkIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWQ9TW9kdWxlWyJkeW5DYWxsX3ZpZCJdPU1vZHVsZVsiYXNtIl1bIlVyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlpZj1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlpZj1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpZiJdPU1vZHVsZVsiYXNtIl1bIlZyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpaWlmPU1vZHVsZVsiZHluQ2FsbF92aWlpaWYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpZj1Nb2R1bGVbImR5bkNhbGxfdmlpaWlmIl09TW9kdWxlWyJhc20iXVsiV3IiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWlpZj1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlmPU1vZHVsZVsiZHluQ2FsbF92aWlpaWlpZiJdPU1vZHVsZVsiYXNtIl1bIlhyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZj1Nb2R1bGVbImR5bkNhbGxfaWlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZj1Nb2R1bGVbImR5bkNhbGxfaWlpZiJdPU1vZHVsZVsiYXNtIl1bIllyIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmlmPU1vZHVsZVsiZHluQ2FsbF9maWYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZpZj1Nb2R1bGVbImR5bkNhbGxfZmlmIl09TW9kdWxlWyJhc20iXVsiWnIiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlmZmY9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZmZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlpZmZmPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlmZmYiXT1Nb2R1bGVbImFzbSJdWyJfciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpaWZpaWY9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZpaWYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWZpaWY9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZpaWYiXT1Nb2R1bGVbImFzbSJdWyIkciJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJhcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpaWlmaWlmPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlpZmlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlpaWZpaWY9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWlmaWlmIl09TW9kdWxlWyJhc20iXVsiYnMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWZmPU1vZHVsZVsiZHluQ2FsbF9maWZmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWZmPU1vZHVsZVsiZHluQ2FsbF9maWZmIl09TW9kdWxlWyJhc20iXVsiY3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlpaWlpZmlpZmlmPU1vZHVsZVsiZHluQ2FsbF9maWlpaWlpZmlpZmlmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlpaWlpZmlpZmlmPU1vZHVsZVsiZHluQ2FsbF9maWlpaWlpZmlpZmlmIl09TW9kdWxlWyJhc20iXVsiZHMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlpaWlpZmlpaWlmPU1vZHVsZVsiZHluQ2FsbF9maWlpaWlpZmlpaWlmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlpaWlpZmlpaWlmPU1vZHVsZVsiZHluQ2FsbF9maWlpaWlpZmlpaWlmIl09TW9kdWxlWyJhc20iXVsiZXMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWZpaWlpamlpPU1vZHVsZVsiZHluQ2FsbF9paWZpaWlpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWZpaWlpamlpPU1vZHVsZVsiZHluQ2FsbF9paWZpaWlpamlpIl09TW9kdWxlWyJhc20iXVsiZnMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZpamlpPU1vZHVsZVsiZHluQ2FsbF92aWZpamlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZpamlpPU1vZHVsZVsiZHluQ2FsbF92aWZpamlpIl09TW9kdWxlWyJhc20iXVsiZ3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZmaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZmaWlpIl09TW9kdWxlWyJhc20iXVsiaHMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZmZmZpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpZmZmZmZpPU1vZHVsZVsiZHluQ2FsbF9paWlpZmZmZmZpIl09TW9kdWxlWyJhc20iXVsiaXMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmaWlpaWY9TW9kdWxlWyJkeW5DYWxsX3ZpZmZpaWlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZmlpaWlmPU1vZHVsZVsiZHluQ2FsbF92aWZmaWlpaWYiXT1Nb2R1bGVbImFzbSJdWyJqcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmZpaWZmZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF92aWZmaWlmZmZmZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZmlpZmZmZmZpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZpaWZmZmZmaWlpIl09TW9kdWxlWyJhc20iXVsia3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZmZpaWZmZmlpaWlpZj1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmaWlmZmZpaWlpaWYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZmZmlpZmZmaWlpaWlmPU1vZHVsZVsiZHluQ2FsbF92aWZmZmZpaWZmZmlpaWlpZiJdPU1vZHVsZVsiYXNtIl1bImxzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWZmZmZmaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlmZmZmZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlpZmZmZmZpaT1Nb2R1bGVbImR5bkNhbGxfaWlpaWZmZmZmaWkiXT1Nb2R1bGVbImFzbSJdWyJtcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWlpaWZpaT1Nb2R1bGVbImR5bkNhbGxfdmlpaWlpaWlpaWlpZmlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpaWlpaWlpaWlmaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWlpaWZpaSJdPU1vZHVsZVsiYXNtIl1bIm5zIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmZj1Nb2R1bGVbImR5bkNhbGxfdmlmZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlmZj1Nb2R1bGVbImR5bkNhbGxfdmlmZiJdPU1vZHVsZVsiYXNtIl1bIm9zIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlmaWlpaWlmPU1vZHVsZVsiZHluQ2FsbF9paWlpaWZpaWlpaWYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpZmlpaWlpZj1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmaWlpaWlmIl09TW9kdWxlWyJhc20iXVsicHMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWlpZmlpaWlpPU1vZHVsZVsiZHluQ2FsbF92aWlpZmlpaWlpIl09TW9kdWxlWyJhc20iXVsicXMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWZpaWlpaWY9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpZmlpaWlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlmaWlpaWlmPU1vZHVsZVsiZHluQ2FsbF92aWlpaWZpaWlpaWYiXT1Nb2R1bGVbImFzbSJdWyJycyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpZmZmPU1vZHVsZVsiZHluQ2FsbF9paWZmZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlmZmY9TW9kdWxlWyJkeW5DYWxsX2lpZmZmIl09TW9kdWxlWyJhc20iXVsic3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWY9TW9kdWxlWyJkeW5DYWxsX2lpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlmPU1vZHVsZVsiZHluQ2FsbF9paWYiXT1Nb2R1bGVbImFzbSJdWyJ0cyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWppamo9TW9kdWxlWyJkeW5DYWxsX3ZpaWppamoiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWppamo9TW9kdWxlWyJkeW5DYWxsX3ZpaWppamoiXT1Nb2R1bGVbImFzbSJdWyJ1cyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWpqPU1vZHVsZVsiZHluQ2FsbF92aWlqaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpamo9TW9kdWxlWyJkeW5DYWxsX3ZpaWpqIl09TW9kdWxlWyJhc20iXVsidnMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWlpaWo9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWlqPU1vZHVsZVsiZHluQ2FsbF92aWlpaWoiXT1Nb2R1bGVbImFzbSJdWyJ3cyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWpqaT1Nb2R1bGVbImR5bkNhbGxfaWlpamppIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9paWlqamk9TW9kdWxlWyJkeW5DYWxsX2lpaWpqaSJdPU1vZHVsZVsiYXNtIl1bInhzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWpqaWlpaWk9TW9kdWxlWyJkeW5DYWxsX2lqamlpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9pamppaWlpaT1Nb2R1bGVbImR5bkNhbGxfaWpqaWlpaWkiXT1Nb2R1bGVbImFzbSJdWyJ5cyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZGQ9TW9kdWxlWyJkeW5DYWxsX3ZpZGQiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZGQ9TW9kdWxlWyJkeW5DYWxsX3ZpZGQiXT1Nb2R1bGVbImFzbSJdWyJ6cyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX2lpaWlpaWZmZmlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZmZmlpaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWlpaWZmZmlpaWZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZmZmlpaWZpaWkiXT1Nb2R1bGVbImFzbSJdWyJBcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWQ9TW9kdWxlWyJkeW5DYWxsX3ZpaWQiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWQ9TW9kdWxlWyJkeW5DYWxsX3ZpaWQiXT1Nb2R1bGVbImFzbSJdWyJCcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlmPU1vZHVsZVsiZHluQ2FsbF92aWlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfdmlpaWY9TW9kdWxlWyJkeW5DYWxsX3ZpaWlmIl09TW9kdWxlWyJhc20iXVsiQ3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlpaWY9TW9kdWxlWyJkeW5DYWxsX2ZpaWlpZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfZmlpaWlmPU1vZHVsZVsiZHluQ2FsbF9maWlpaWYiXT1Nb2R1bGVbImFzbSJdWyJEcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpZmZmZmZmZmZmZmZmaWlpaT1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmZmZmZmZmZmZpaWlpIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92aWZmZmZmZmZmZmZmZmlpaWk9TW9kdWxlWyJkeW5DYWxsX3ZpZmZmZmZmZmZmZmZmaWlpaSJdPU1vZHVsZVsiYXNtIl1bIkVzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpaWlmZj1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmZiJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlmZj1Nb2R1bGVbImR5bkNhbGxfaWlpaWlmZiJdPU1vZHVsZVsiYXNtIl1bIkZzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlmZmZmPU1vZHVsZVsiZHluQ2FsbF92aWZmZmYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZmZj1Nb2R1bGVbImR5bkNhbGxfdmlmZmZmIl09TW9kdWxlWyJhc20iXVsiR3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92aWZmZj1Nb2R1bGVbImR5bkNhbGxfdmlmZmYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpZmZmPU1vZHVsZVsiZHluQ2FsbF92aWZmZiJdPU1vZHVsZVsiYXNtIl1bIkhzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmlpZmZmPU1vZHVsZVsiZHluQ2FsbF92aWlmZmYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZmZj1Nb2R1bGVbImR5bkNhbGxfdmlpZmZmIl09TW9kdWxlWyJhc20iXVsiSXMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92Zj1Nb2R1bGVbImR5bkNhbGxfdmYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZmPU1vZHVsZVsiZHluQ2FsbF92ZiJdPU1vZHVsZVsiYXNtIl1bIkpzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfdmZmZmY9TW9kdWxlWyJkeW5DYWxsX3ZmZmZmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92ZmZmZj1Nb2R1bGVbImR5bkNhbGxfdmZmZmYiXT1Nb2R1bGVbImFzbSJdWyJLcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZmZj1Nb2R1bGVbImR5bkNhbGxfdmZmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92ZmY9TW9kdWxlWyJkeW5DYWxsX3ZmZiJdPU1vZHVsZVsiYXNtIl1bIkxzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfZmZmPU1vZHVsZVsiZHluQ2FsbF9mZmYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZmZj1Nb2R1bGVbImR5bkNhbGxfZmZmIl09TW9kdWxlWyJhc20iXVsiTXMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mPU1vZHVsZVsiZHluQ2FsbF9mIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9mPU1vZHVsZVsiZHluQ2FsbF9mIl09TW9kdWxlWyJhc20iXVsiTnMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF92ZmZmPU1vZHVsZVsiZHluQ2FsbF92ZmZmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF92ZmZmPU1vZHVsZVsiZHluQ2FsbF92ZmZmIl09TW9kdWxlWyJhc20iXVsiT3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9mZj1Nb2R1bGVbImR5bkNhbGxfZmYiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2ZmPU1vZHVsZVsiZHluQ2FsbF9mZiJdPU1vZHVsZVsiYXNtIl1bIlBzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZD1Nb2R1bGVbImR5bkNhbGxfaWlpZCJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpZD1Nb2R1bGVbImR5bkNhbGxfaWlpZCJdPU1vZHVsZVsiYXNtIl1bIlFzIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGR5bkNhbGxfaWlpZmlmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlmaWZpaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX2lpaWZpZmlpaT1Nb2R1bGVbImR5bkNhbGxfaWlpZmlmaWlpIl09TW9kdWxlWyJhc20iXVsiUnMiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9maWlmPU1vZHVsZVsiZHluQ2FsbF9maWlmIl09ZnVuY3Rpb24oKXtyZXR1cm4oZHluQ2FsbF9maWlmPU1vZHVsZVsiZHluQ2FsbF9maWlmIl09TW9kdWxlWyJhc20iXVsiU3MiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWZmZmZpaWk9TW9kdWxlWyJkeW5DYWxsX2lpaWlpaWZmaWlpaWlpaWlpZmZmZmlpaSJdPWZ1bmN0aW9uKCl7cmV0dXJuKGR5bkNhbGxfaWlpaWlpZmZpaWlpaWlpaWlmZmZmaWlpPU1vZHVsZVsiZHluQ2FsbF9paWlpaWlmZmlpaWlpaWlpaWZmZmZpaWkiXT1Nb2R1bGVbImFzbSJdWyJUcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWZpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpZmkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWZpZmk9TW9kdWxlWyJkeW5DYWxsX3ZpaWZpZmkiXT1Nb2R1bGVbImFzbSJdWyJVcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBkeW5DYWxsX3ZpaWlpaWlpaWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWppaWkiXT1mdW5jdGlvbigpe3JldHVybihkeW5DYWxsX3ZpaWlpaWlpaWppaWk9TW9kdWxlWyJkeW5DYWxsX3ZpaWlpaWlpaWppaWkiXT1Nb2R1bGVbImFzbSJdWyJWcyJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGludm9rZV9paShpbmRleCxhMSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paShpbmRleCxhMSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWkoaW5kZXgsYTEsYTIpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpKGluZGV4LGExLGEyKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWkoaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlpKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlpaShpbmRleCxhMSxhMixhMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWlpKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlpKGluZGV4LGExLGEyLGEzLGE0KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfZmlpaShpbmRleCxhMSxhMixhMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9maWlpKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2RpaWkoaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfZGlpaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlmKGluZGV4LGExLGEyLGEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpZihpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWkoaW5kZXgsYTEsYTIpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWkoaW5kZXgsYTEsYTIpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmkoaW5kZXgsYTEpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aShpbmRleCxhMSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92KGluZGV4KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdihpbmRleCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9pKGluZGV4KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2koaW5kZXgpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ZpaShpbmRleCxhMSxhMil7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9maWkoaW5kZXgsYTEsYTIpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpZmkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlmaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlmZihpbmRleCxhMSxhMixhMyxhNCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWZmKGluZGV4LGExLGEyLGEzLGE0KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWlpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfZmlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfZmlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfZGlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfZGlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpZGkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlkaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWRpKGluZGV4LGExLGEyLGEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlkaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWZpKGluZGV4LGExLGEyLGEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlmaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9kaWkoaW5kZXgsYTEsYTIpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfZGlpKGluZGV4LGExLGEyKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ZmZmkoaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfZmZmaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWRpKGluZGV4LGExLGEyLGEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpZGkoaW5kZXgsYTEsYTIsYTMpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlmaShpbmRleCxhMSxhMixhMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWZpKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2RkZGkoaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfZGRkaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9kaWlpZChpbmRleCxhMSxhMixhMyxhNCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9kaWlpZChpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9maWlpZihpbmRleCxhMSxhMixhMyxhNCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9maWlpZihpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9kZGlpaShpbmRleCxhMSxhMixhMyxhNCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9kZGlpaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlkaShpbmRleCxhMSxhMixhMyxhNCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWlkaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpZmkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlpZmkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpZmZpKGluZGV4LGExLGEyLGEzLGE0LGE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpZmZpKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlpaWlpZmlpZmlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEsYTEyLGExMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWlpaWlpZmlpZmlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEsYTEyLGExMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpaWlpaWZkZGZpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExLGExMixhMTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlpaWlpaWZkZGZpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExLGExMixhMTMpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpaWlpaWlmZmZmaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSxhMTIsYTEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWlpaWlmZmZmaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSxhMTIsYTEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ZpKGluZGV4LGExKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2ZpKGluZGV4LGExKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWZpKGluZGV4LGExLGEyLGEzLGE0KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWZpKGluZGV4LGExLGEyLGEzLGE0KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlpZmkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlpaWZpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lmaShpbmRleCxhMSxhMil7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9pZmkoaW5kZXgsYTEsYTIpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWRpKGluZGV4LGExLGEyKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lkaShpbmRleCxhMSxhMil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpaWlpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEsYTEyKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWlpaWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExLGExMil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTkpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpaWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpZGlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWRpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlpaWlpaWlpZmkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWlpaWlpaWlmaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWlpaWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSxhMTIpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpaWlpaWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExLGExMil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlpZGlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWlkaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlpaWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWlpaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlpZmlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWlmaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlkZChpbmRleCxhMSxhMixhMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpZGQoaW5kZXgsYTEsYTIsYTMpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfamlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlpaWkoaW5kZXgsYTEsYTIsYTMsYTQpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlpaihpbmRleCxhMSxhMixhMyxhNCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWlqKGluZGV4LGExLGEyLGEzLGE0KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ooaW5kZXgpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaihpbmRleCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWooaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlqKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWppaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlpamlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9qaShpbmRleCxhMSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9qaShpbmRleCxhMSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9qaWkoaW5kZXgsYTEsYTIpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlpKGluZGV4LGExLGEyKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ppaWkoaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlpaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9qaWppaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlqaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpamlpKGluZGV4LGExLGEyLGEzLGE0LGE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpamlpKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlqKGluZGV4LGExLGEyLGEzLGE0LGE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWooaW5kZXgsYTEsYTIsYTMsYTQsYTUpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpamkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlqaShpbmRleCxhMSxhMixhMyxhNCxhNSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWppKGluZGV4LGExLGEyLGEzLGE0KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlqaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9qaWlpaWlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTApe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlpaWlpaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lqamkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWpqaShpbmRleCxhMSxhMixhMyxhNCxhNSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlpamppaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWlpamppaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlqaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlqaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlqaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWppaShpbmRleCxhMSxhMixhMyxhNCxhNSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWppaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWlqaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpamppaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWpqaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfaWlqaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpamlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWppKGluZGV4LGExLGEyLGEzLGE0KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpamkoaW5kZXgsYTEsYTIsYTMsYTQpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpamlqaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWppamlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTApfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmppaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92amlpaShpbmRleCxhMSxhMixhMyxhNCxhNSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92amlpaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZqaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpamlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWppaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2pqaShpbmRleCxhMSxhMixhMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9qamkoaW5kZXgsYTEsYTIsYTMpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfampqaShpbmRleCxhMSxhMixhMyxhNCxhNSl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9qamppKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ppaWlqKGluZGV4LGExLGEyLGEzLGE0LGE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2ppaWlqKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWppKGluZGV4LGExLGEyLGEzLGE0LGE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWppKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWooaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWlqKGluZGV4LGExLGEyLGEzLGE0KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZpaWlpaWlpZmpqZmlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEsYTEyLGExMyxhMTQsYTE1KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWlpaWlmampmaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSxhMTIsYTEzLGExNCxhMTUpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpaWppKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlpaWppKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ppamooaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlqaihpbmRleCxhMSxhMixhMyxhNCxhNSl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlpaWlpaWlqaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWlpaWlpaWppKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmppKGluZGV4LGExLGEyLGEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmppKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2pqaWkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamppaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWlpamlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaWlqaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfamlpamkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlpamkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfZGppKGluZGV4LGExLGEyLGEzKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2RqaShpbmRleCxhMSxhMixhMyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9pamkoaW5kZXgsYTEsYTIsYTMpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfaWppKGluZGV4LGExLGEyLGEzKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2lpaWlpaihpbmRleCxhMSxhMixhMyxhNCxhNSxhNil7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWlpaWooaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlpamlpaWppaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCxhMTEsYTEyLGExMyl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWppaWlqaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyxhOCxhOSxhMTAsYTExLGExMixhMTMpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfamRpKGluZGV4LGExLGEyKXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e3JldHVybiBkeW5DYWxsX2pkaShpbmRleCxhMSxhMil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWpqamkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7ZHluQ2FsbF92aWpqamkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgpfWNhdGNoKGUpe3N0YWNrUmVzdG9yZShzcCk7aWYoZSE9PWUrMCYmZSE9PSJsb25nam1wIil0aHJvdyBlO19zZXRUaHJldygxLDApfX1mdW5jdGlvbiBpbnZva2VfdmlqaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmlqaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX3ZqamppaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZqamppaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92amlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3KXt2YXIgc3A9c3RhY2tTYXZlKCk7dHJ5e2R5bkNhbGxfdmppaWlpaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNixhNyl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV92aWlqaWlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4LGE5LGExMCl7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtkeW5DYWxsX3ZpaWppaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwKX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19ZnVuY3Rpb24gaW52b2tlX2ppamkoaW5kZXgsYTEsYTIsYTMsYTQpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlqaShpbmRleCxhMSxhMixhMyxhNCl9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9paWpqaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNil7dmFyIHNwPXN0YWNrU2F2ZSgpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWpqaShpbmRleCxhMSxhMixhMyxhNCxhNSxhNil9Y2F0Y2goZSl7c3RhY2tSZXN0b3JlKHNwKTtpZihlIT09ZSswJiZlIT09ImxvbmdqbXAiKXRocm93IGU7X3NldFRocmV3KDEsMCl9fWZ1bmN0aW9uIGludm9rZV9qaWlpaWkoaW5kZXgsYTEsYTIsYTMsYTQsYTUpe3ZhciBzcD1zdGFja1NhdmUoKTt0cnl7cmV0dXJuIGR5bkNhbGxfamlpaWlpKGluZGV4LGExLGEyLGEzLGE0LGE1KX1jYXRjaChlKXtzdGFja1Jlc3RvcmUoc3ApO2lmKGUhPT1lKzAmJmUhPT0ibG9uZ2ptcCIpdGhyb3cgZTtfc2V0VGhyZXcoMSwwKX19TW9kdWxlWyJjY2FsbCJdPWNjYWxsO01vZHVsZVsiY3dyYXAiXT1jd3JhcDtNb2R1bGVbInN0YWNrVHJhY2UiXT1zdGFja1RyYWNlO01vZHVsZVsiYWRkUnVuRGVwZW5kZW5jeSJdPWFkZFJ1bkRlcGVuZGVuY3k7TW9kdWxlWyJyZW1vdmVSdW5EZXBlbmRlbmN5Il09cmVtb3ZlUnVuRGVwZW5kZW5jeTtNb2R1bGVbIkZTX2NyZWF0ZVBhdGgiXT1GUy5jcmVhdGVQYXRoO01vZHVsZVsiRlNfY3JlYXRlRGF0YUZpbGUiXT1GUy5jcmVhdGVEYXRhRmlsZTtNb2R1bGVbInN0YWNrVHJhY2UiXT1zdGFja1RyYWNlO3ZhciBjYWxsZWRSdW47ZnVuY3Rpb24gRXhpdFN0YXR1cyhzdGF0dXMpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyI7dGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrc3RhdHVzKyIpIjt0aGlzLnN0YXR1cz1zdGF0dXN9dmFyIGNhbGxlZE1haW49ZmFsc2U7ZGVwZW5kZW5jaWVzRnVsZmlsbGVkPWZ1bmN0aW9uIHJ1bkNhbGxlcigpe2lmKCFjYWxsZWRSdW4pcnVuKCk7aWYoIWNhbGxlZFJ1bilkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9cnVuQ2FsbGVyfTtmdW5jdGlvbiBjYWxsTWFpbihhcmdzKXt2YXIgZW50cnlGdW5jdGlvbj1Nb2R1bGVbIl9tYWluIl07YXJncz1hcmdzfHxbXTt2YXIgYXJnYz1hcmdzLmxlbmd0aCsxO3ZhciBhcmd2PXN0YWNrQWxsb2MoKGFyZ2MrMSkqNCk7SEVBUDMyW2FyZ3Y+PjJdPWFsbG9jYXRlVVRGOE9uU3RhY2sodGhpc1Byb2dyYW0pO2Zvcih2YXIgaT0xO2k8YXJnYztpKyspe0hFQVAzMlsoYXJndj4+MikraV09YWxsb2NhdGVVVEY4T25TdGFjayhhcmdzW2ktMV0pfUhFQVAzMlsoYXJndj4+MikrYXJnY109MDt0cnl7dmFyIHJldD1lbnRyeUZ1bmN0aW9uKGFyZ2MsYXJndik7ZXhpdChyZXQsdHJ1ZSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXMpe3JldHVybn1lbHNlIGlmKGU9PSJ1bndpbmQiKXtyZXR1cm59ZWxzZXt2YXIgdG9Mb2c9ZTtpZihlJiZ0eXBlb2YgZT09PSJvYmplY3QiJiZlLnN0YWNrKXt0b0xvZz1bZSxlLnN0YWNrXX1lcnIoImV4Y2VwdGlvbiB0aHJvd246ICIrdG9Mb2cpO3F1aXRfKDEsZSl9fWZpbmFsbHl7Y2FsbGVkTWFpbj10cnVlfX1mdW5jdGlvbiBydW4oYXJncyl7YXJncz1hcmdzfHxhcmd1bWVudHNfO2lmKHJ1bkRlcGVuZGVuY2llcz4wKXtyZXR1cm59cHJlUnVuKCk7aWYocnVuRGVwZW5kZW5jaWVzPjApe3JldHVybn1mdW5jdGlvbiBkb1J1bigpe2lmKGNhbGxlZFJ1bilyZXR1cm47Y2FsbGVkUnVuPXRydWU7TW9kdWxlWyJjYWxsZWRSdW4iXT10cnVlO2lmKEFCT1JUKXJldHVybjtpbml0UnVudGltZSgpO3ByZU1haW4oKTtpZihNb2R1bGVbIm9uUnVudGltZUluaXRpYWxpemVkIl0pTW9kdWxlWyJvblJ1bnRpbWVJbml0aWFsaXplZCJdKCk7aWYoc2hvdWxkUnVuTm93KWNhbGxNYWluKGFyZ3MpO3Bvc3RSdW4oKX1pZihNb2R1bGVbInNldFN0YXR1cyJdKXtNb2R1bGVbInNldFN0YXR1cyJdKCJSdW5uaW5nLi4uIik7c2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtNb2R1bGVbInNldFN0YXR1cyJdKCIiKX0sMSk7ZG9SdW4oKX0sMSl9ZWxzZXtkb1J1bigpfX1Nb2R1bGVbInJ1biJdPXJ1bjtmdW5jdGlvbiBleGl0KHN0YXR1cyxpbXBsaWNpdCl7RVhJVFNUQVRVUz1zdGF0dXM7aWYoaW1wbGljaXQmJmtlZXBSdW50aW1lQWxpdmUoKSYmc3RhdHVzPT09MCl7cmV0dXJufWlmKGtlZXBSdW50aW1lQWxpdmUoKSl7fWVsc2V7ZXhpdFJ1bnRpbWUoKTtpZihNb2R1bGVbIm9uRXhpdCJdKU1vZHVsZVsib25FeGl0Il0oc3RhdHVzKTtBQk9SVD10cnVlfXF1aXRfKHN0YXR1cyxuZXcgRXhpdFN0YXR1cyhzdGF0dXMpKX1pZihNb2R1bGVbInByZUluaXQiXSl7aWYodHlwZW9mIE1vZHVsZVsicHJlSW5pdCJdPT0iZnVuY3Rpb24iKU1vZHVsZVsicHJlSW5pdCJdPVtNb2R1bGVbInByZUluaXQiXV07d2hpbGUoTW9kdWxlWyJwcmVJbml0Il0ubGVuZ3RoPjApe01vZHVsZVsicHJlSW5pdCJdLnBvcCgpKCl9fXZhciBzaG91bGRSdW5Ob3c9dHJ1ZTtpZihNb2R1bGVbIm5vSW5pdGlhbFJ1biJdKXNob3VsZFJ1bk5vdz1mYWxzZTtydW4oKTsKCn0K",
          codeUrl: buildUrl + "/wasm.unityweb",
          streamingAssetsUrl: "StreamingAssets",
          companyName: "1games.io",
          productName: "Escape Road",
          productVersion: "2.0",
        };
        if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
          container.className = "unity-mobile";
          config.devicePixelRatio = 1;
        }
    
        function delay(ms) {
          return new Promise((resolve, reject) => {
            setTimeout(() => {
              resolve();
            }, ms);
          });
        }
        async function load() {
          var az_logo = document.getElementById('azlogo');
          az_logo.style.opacity = 0;
          logo_loaded = true;
          /* var t = new Date().getTime();
    
           while (az_logo.style.opacity < 1) {
    
             var delta = new Date().getTime() - t;
    
             az_logo.style.opacity = delta / 1000;
    
             await delay(20);
    
           }
    
           await delay(1000);*/
          az_logo.style.display = 'none';
          logo_loaded = false;
          createUnityInstance(canvas, config, (progress) => {
            logo_loading_percent = progress;
            drawCanvas(progress);
          }).then((unityInstance) => {
            window.unityInstance = unityInstance;
            setTimeout(() => {
              loadingCover.style.display = "none";
              logo_loaded = true;
              window.focus();
            }, 2000);
          }).catch((message) => {
            alert(message);
          });
        }
        loadingCover.style.display = "";
        var script = document.createElement("script");
        script.src = loaderUrl;
        script.onload = () => {
          load();
        };
        // setTimeout(() => {
        //     var progress = 0.5;
        //     logo_loading_percent = progress;
        //     drawCanvas(progress);
        //   }, 1000);
        // var progress = 0;
        // setInterval(() => {
        //   logo_loading_percent = progress;
        //   drawCanvas(progress);
        //   progress += 0.01;
        // }, 30);
        var logo_loaded = false;
        var logo_loading_percent = 0;
        window.onresize = () => {
          // console.log('onresize');
          drawCanvas(logo_loading_percent);
        }
        window.onload = () => {
          // console.log('onload');
          drawCanvas(logo_loading_percent);
        }
        var logo_canvas = document.getElementById("logo-canvas");
    
        function drawCanvas(_percent = 0) {
          if (logo_loaded) {
            return;
          }
          resizeLogoCanvas();
          var ctx = logo_canvas.getContext("2d");
          var ld_bg = document.getElementById("ld_bg");
          var ld_car = document.getElementById("ld_car");
          var _sw = logo_canvas.width / 1920;
          var _sh = logo_canvas.height / 1080;
          if (_percent > 1) {
            _percent = 1;
          }
          //bgbar
          var bgbar_H = 86;
          var bgbar_W = 1383;
          //fillbar
          var fillbar_H = 55;
          var fillbar_W = 1345;
          //Mask
          var maskbar_H = 55;
          var maskbar_W = 1350;
          //bg_bar_mask
          var bgbar_mask_H = 86;
          var bgbar_mask_W = 1383;
          var posshowbar_Y = 200; //position loadingbar 
          var posbgbar_X = (1920 - bgbar_W) / 2; // center
          var posbgbar_Y = posshowbar_Y;
          var posfillbar_X = (1920 - fillbar_W) / 2;
          var posfillbar_Y = posshowbar_Y - 15;
          var posmaskbar_X = (1920 - maskbar_W) / 2;
          var posmaskbar_Y = posshowbar_Y - 15;
          var _fl = 0;
          var _fl1 = posmaskbar_X + _percent * maskbar_W;
          var _fw = maskbar_W - _percent * maskbar_W;
          // console.log(`${logo_canvas.width} ${logo_canvas.height}`);
          //background
          ctx.drawImage(ld_bg, 0, 0, logo_canvas.width, logo_canvas.height);
          //loading background
          ctx.fillStyle = "#977e21";
          var _lw = 700;
          var _lh = 50;
          ctx.fillRect((1920 - _lw) * 0.5 * _sw, (1080 - 150) * _sh, _lw * _sw, _lh * _sh);
          //loading progress
          ctx.fillStyle = "#fad234";
          var _pad = 5;
          var _pw = (_lw - _pad * 2);
          var _ph = _lh - _pad * 2;
          var _px = (1920 - _pw) * 0.5;
          ctx.fillRect(_px * _sw, (1080 - 150 + _pad) * _sh, _pw * _percent * _sw, _ph * _sh);
          //car
          var _car_x = _px + _pw * _percent - 100;
          if (_car_x < _px) {
            _car_x = _px;
          }
          // ctx.drawImage(ld_car,  _car_x * _sw, (1080 - 190) * _sh, 100 * _sw, 42 * _sh);
          ctx.font = "18px myFirstFont";
          const match = /(?<value>\d+\.?\d*)/;
          const setFontSize = (size) => ctx.font = ctx.font.replace(match, size);
          setFontSize(35 * _sh);
          ctx.textAlign = "center";
          ctx.fillStyle = "#fff";
          ctx.shadowColor = "black";
          ctx.shadowOffsetY = 2;
          var new_per = parseInt(_percent * 100);
          ctx.fillText("" + new_per + "%", logo_canvas.width / 2, logo_canvas.height / 2 + _sh * 425);
        }
    
        function resizeLogoCanvas() {
          var _w = window.innerWidth;
          var _h = window.innerHeight;
          var _nw = _h * 16 / 9;
          // console.log(`${_w} ${_h} ${_nw}`);
          if (_nw <= _w) {
            logo_canvas.width = _nw;
            logo_canvas.height = _h;
          } else {
            logo_canvas.width = _w;
            logo_canvas.height = _w * 9 / 16;
          }
        }
        document.body.appendChild(script);
      </script>
    
      <script src="https://www.gstatic.com/firebasejs/10.9.0/firebase-app-compat.js" type="text/javascript"></script>
    
      <script src="https://www.gstatic.com/firebasejs/10.9.0/firebase-firestore-compat.js" type="text/javascript"></script>
    
      <script src="https://www.gstatic.com/firebasejs/10.9.0/firebase-auth-compat.js" type="text/javascript"></script>
    
      <script src="https://www.gstatic.com/firebasejs/10.9.0/firebase-analytics-compat.js" type="text/javascript"></script>
    
      <script type="module">
        // Import the functions you need from the SDKs you need
        import {
          initializeApp
        } from "https://www.gstatic.com/firebasejs/10.9.0/firebase-app.js";
        import {
          getAnalytics
        } from "https://www.gstatic.com/firebasejs/10.9.0/firebase-analytics.js";
        import {
          getAuth
        } from "https://www.gstatic.com/firebasejs/10.9.0/firebase-auth.js";
        // TODO: Add SDKs for Firebase products that you want to use
        // https://firebase.google.com/docs/web/setup#available-libraries
        // Your web app's Firebase configuration
        // For Firebase JS SDK v7.20.0 and later, measurementId is optional
        const firebaseConfig = {
          apiKey: "AIzaSyC2RwMfh0GMuQMtQdijjUo-MEffB4N9xVY",
          authDomain: "escape-road-gm1.firebaseapp.com",
          projectId: "escape-road-gm1",
          storageBucket: "escape-road-gm1.appspot.com",
          messagingSenderId: "713881704715",
          appId: "1:713881704715:web:615cc93a73d9814b24ea0e",
          measurementId: "G-E8C3TNJE8S"
        };
        window.dataLayer = window.dataLayer || [];
        window.gtag = function() {
          dataLayer.push(arguments);
        }
        window.gtag("config", firebaseConfig.measurementId, {
          cookie_domain: location.hostname,
          cookie_flags: "SameSite=None;Secure",
        });
        // Initialize Firebase
        const app = firebase.initializeApp(firebaseConfig);
        const auth = getAuth(app);
      </script>
    
      <script src="data:@file/javascript;base64,ZnVuY3Rpb24gY3JlYXRlVW5pdHlJbnN0YW5jZSh0LG4sbCl7ZnVuY3Rpb24gZChlLHQpe2lmKCFkLmFib3J0ZWQmJm4uc2hvd0Jhbm5lcilyZXR1cm4iZXJyb3IiPT10JiYoZC5hYm9ydGVkPSEwKSxuLnNob3dCYW5uZXIoZSx0KTtzd2l0Y2godCl7Y2FzZSJlcnJvciI6Y29uc29sZS5lcnJvcihlKTticmVhaztjYXNlIndhcm5pbmciOmNvbnNvbGUud2FybihlKTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKGUpfX1mdW5jdGlvbiByKGUpe3ZhciB0PWUucmVhc29ufHxlLmVycm9yLG49dD90LnRvU3RyaW5nKCk6ZS5tZXNzYWdlfHxlLnJlYXNvbnx8IiIscj10JiZ0LnN0YWNrP3Quc3RhY2sudG9TdHJpbmcoKToiIjsobis9IlxuIisocj1yLnN0YXJ0c1dpdGgobik/ci5zdWJzdHJpbmcobi5sZW5ndGgpOnIpLnRyaW0oKSkmJmMuc3RhY2tUcmFjZVJlZ0V4cCYmYy5zdGFja1RyYWNlUmVnRXhwLnRlc3QobikmJmsobixlLmZpbGVuYW1lfHx0JiYodC5maWxlTmFtZXx8dC5zb3VyY2VVUkwpfHwiIixlLmxpbmVub3x8dCYmKHQubGluZU51bWJlcnx8dC5saW5lKXx8MCl9ZnVuY3Rpb24gZShlLHQsbil7dmFyIHI9ZVt0XTt2b2lkIDAhPT1yJiZyfHwoY29uc29sZS53YXJuKCdDb25maWcgb3B0aW9uICInK3QrJyIgaXMgbWlzc2luZyBvciBlbXB0eS4gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmFsdWU6ICInK24rJyIuIENvbnNpZGVyIHVwZGF0aW5nIHlvdXIgV2ViR0wgdGVtcGxhdGUgdG8gaW5jbHVkZSB0aGUgbWlzc2luZyBjb25maWcgb3B0aW9uLicpLGVbdF09bil9bD1sfHxmdW5jdGlvbigpe307dmFyIG8sYz17Y2FudmFzOnQsd2ViZ2xDb250ZXh0QXR0cmlidXRlczp7cHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHBvd2VyUHJlZmVyZW5jZToyfSxjYWNoZUNvbnRyb2w6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PWMuZGF0YVVybD8ibXVzdC1yZXZhbGlkYXRlIjoibm8tc3RvcmUifSxzdHJlYW1pbmdBc3NldHNVcmw6IlN0cmVhbWluZ0Fzc2V0cyIsZG93bmxvYWRQcm9ncmVzczp7fSxkZWluaXRpYWxpemVyczpbXSxpbnRlcnZhbHM6e30sc2V0SW50ZXJ2YWw6ZnVuY3Rpb24oZSx0KXtlPXdpbmRvdy5zZXRJbnRlcnZhbChlLHQpO3JldHVybiB0aGlzLmludGVydmFsc1tlXT0hMCxlfSxjbGVhckludGVydmFsOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmludGVydmFsc1tlXSx3aW5kb3cuY2xlYXJJbnRlcnZhbChlKX0scHJlUnVuOltdLHBvc3RSdW46W10scHJpbnQ6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LHByaW50RXJyOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSksInN0cmluZyI9PXR5cGVvZiBlJiYtMSE9ZS5pbmRleE9mKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZCIpJiYoLTEhPWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtaW1lIik/ZCgnSFRUUCBSZXNwb25zZSBIZWFkZXIgIkNvbnRlbnQtVHlwZSIgY29uZmlndXJlZCBpbmNvcnJlY3RseSBvbiB0aGUgc2VydmVyIGZvciBmaWxlICcrYy5jb2RlVXJsKycgLCBzaG91bGQgYmUgImFwcGxpY2F0aW9uL3dhc20iLiBTdGFydHVwIHRpbWUgcGVyZm9ybWFuY2Ugd2lsbCBzdWZmZXIuJywid2FybmluZyIpOmQoJ1dlYkFzc2VtYmx5IHN0cmVhbWluZyBjb21waWxhdGlvbiBmYWlsZWQhIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpZiAiQ29udGVudC1FbmNvZGluZyIgSFRUUCBoZWFkZXIgaXMgaW5jb3JyZWN0bHkgZW5hYmxlZCBvbiB0aGUgc2VydmVyIGZvciBmaWxlICcrYy5jb2RlVXJsKyIsIGJ1dCB0aGUgZmlsZSBpcyBub3QgcHJlLWNvbXByZXNzZWQgb24gZGlzayAob3IgdmljZSB2ZXJzYSkuIENoZWNrIHRoZSBOZXR3b3JrIHRhYiBpbiBicm93c2VyIERldnRvb2xzIHRvIGRlYnVnIHNlcnZlciBoZWFkZXIgY29uZmlndXJhdGlvbi4iLCJ3YXJuaW5nIikpfSxsb2NhdGVGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXNhYmxlZENhbnZhc0V2ZW50czpbImNvbnRleHRtZW51IiwiZHJhZ3N0YXJ0Il19O2ZvcihvIGluIGUobiwiY29tcGFueU5hbWUiLCJVbml0eSIpLGUobiwicHJvZHVjdE5hbWUiLCJXZWJHTCBQbGF5ZXIiKSxlKG4sInByb2R1Y3RWZXJzaW9uIiwiMS4wIiksbiljW29dPW5bb107Yy5zdHJlYW1pbmdBc3NldHNVcmw9bmV3IFVSTChjLnN0cmVhbWluZ0Fzc2V0c1VybCxkb2N1bWVudC5VUkwpLmhyZWY7dmFyIGE9Yy5kaXNhYmxlZENhbnZhc0V2ZW50cy5zbGljZSgpO2Z1bmN0aW9uIGkoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfWEuZm9yRWFjaChmdW5jdGlvbihlKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxpKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsciksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVuaGFuZGxlZHJlamVjdGlvbiIsciksYy5kZWluaXRpYWxpemVycy5wdXNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIGMuZGlzYWJsZUFjY2Vzc1RvTWVkaWFEZXZpY2VzKCksYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkpfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIixyKSxjLmludGVydmFscyl3aW5kb3cuY2xlYXJJbnRlcnZhbChlKTtjLmludGVydmFscz17fX0pLGMuUXVpdENsZWFudXA9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGMuZGVpbml0aWFsaXplcnMubGVuZ3RoO2UrKyljLmRlaW5pdGlhbGl6ZXJzW2VdKCk7Yy5kZWluaXRpYWxpemVycz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgYy5vblF1aXQmJmMub25RdWl0KCl9O3ZhciBzLHUsZixoLGIsbSxwLGcsdz0iIix2PSIiLHk9KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLGZ1bmN0aW9uKGUpe2RvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudD09PXQ/dC5zdHlsZS53aWR0aCYmKHc9dC5zdHlsZS53aWR0aCx2PXQuc3R5bGUuaGVpZ2h0LHQuc3R5bGUud2lkdGg9IjEwMCUiLHQuc3R5bGUuaGVpZ2h0PSIxMDAlIik6dyYmKHQuc3R5bGUud2lkdGg9dyx0LnN0eWxlLmhlaWdodD12LHY9dz0iIil9KSx7TW9kdWxlOmMsU2V0RnVsbHNjcmVlbjpmdW5jdGlvbigpe2lmKGMuU2V0RnVsbHNjcmVlbilyZXR1cm4gYy5TZXRGdWxsc2NyZWVuLmFwcGx5KGMsYXJndW1lbnRzKTtjLnByaW50KCJGYWlsZWQgdG8gc2V0IEZ1bGxzY3JlZW4gbW9kZTogUGxheWVyIG5vdCBsb2FkZWQgeWV0LiIpfSxTZW5kTWVzc2FnZTpmdW5jdGlvbigpe2lmKGMuU2VuZE1lc3NhZ2UpcmV0dXJuIGMuU2VuZE1lc3NhZ2UuYXBwbHkoYyxhcmd1bWVudHMpO2MucHJpbnQoIkZhaWxlZCB0byBleGVjdXRlIFNlbmRNZXNzYWdlOiBQbGF5ZXIgbm90IGxvYWRlZCB5ZXQuIil9LFF1aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtjLnNob3VsZFF1aXQ9ITAsYy5vblF1aXQ9ZX0pfX0pO2Z1bmN0aW9uIGsoZSx0LG4pey0xPT1lLmluZGV4T2YoImZ1bGxzY3JlZW4gZXJyb3IiKSYmKGMuc3RhcnR1cEVycm9ySGFuZGxlcj9jLnN0YXJ0dXBFcnJvckhhbmRsZXIoZSx0LG4pOmMuZXJyb3JIYW5kbGVyJiZjLmVycm9ySGFuZGxlcihlLHQsbil8fChjb25zb2xlLmxvZygiSW52b2tpbmcgZXJyb3IgaGFuZGxlciBkdWUgdG9cbiIrZSksImZ1bmN0aW9uIj09dHlwZW9mIGR1bXAmJmR1bXAoIkludm9raW5nIGVycm9yIGhhbmRsZXIgZHVlIHRvXG4iK2UpLGsuZGlkU2hvd0Vycm9yTWVzc2FnZXx8KC0xIT0oZT0iQW4gZXJyb3Igb2NjdXJyZWQgcnVubmluZyB0aGUgVW5pdHkgY29udGVudCBvbiB0aGlzIHBhZ2UuIFNlZSB5b3VyIGJyb3dzZXIgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBtb3JlIGluZm8uIFRoZSBlcnJvciB3YXM6XG4iK2UpLmluZGV4T2YoIkRJU0FCTEVfRVhDRVBUSU9OX0NBVENISU5HIik/ZT0iQW4gZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCwgYnV0IGV4Y2VwdGlvbiBoYW5kbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBpbiB0aGlzIGJ1aWxkLiBJZiB5b3UgYXJlIHRoZSBkZXZlbG9wZXIgb2YgdGhpcyBjb250ZW50LCBlbmFibGUgZXhjZXB0aW9ucyBpbiB5b3VyIHByb2plY3QgV2ViR0wgcGxheWVyIHNldHRpbmdzIHRvIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGV4Y2VwdGlvbiBvciBzZWUgdGhlIHN0YWNrIHRyYWNlLiI6LTEhPWUuaW5kZXhPZigiQ2Fubm90IGVubGFyZ2UgbWVtb3J5IGFycmF5cyIpP2U9Ik91dCBvZiBtZW1vcnkuIElmIHlvdSBhcmUgdGhlIGRldmVsb3BlciBvZiB0aGlzIGNvbnRlbnQsIHRyeSBhbGxvY2F0aW5nIG1vcmUgbWVtb3J5IHRvIHlvdXIgV2ViR0wgYnVpbGQgaW4gdGhlIFdlYkdMIHBsYXllciBzZXR0aW5ncy4iOi0xPT1lLmluZGV4T2YoIkludmFsaWQgYXJyYXkgYnVmZmVyIGxlbmd0aCIpJiYtMT09ZS5pbmRleE9mKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpJiYtMT09ZS5pbmRleE9mKCJvdXQgb2YgbWVtb3J5IikmJi0xPT1lLmluZGV4T2YoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkiKXx8KGU9IlRoZSBicm93c2VyIGNvdWxkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgV2ViR0wgY29udGVudC4gSWYgeW91IGFyZSB0aGUgZGV2ZWxvcGVyIG9mIHRoaXMgY29udGVudCwgdHJ5IGFsbG9jYXRpbmcgbGVzcyBtZW1vcnkgdG8geW91ciBXZWJHTCBidWlsZCBpbiB0aGUgV2ViR0wgcGxheWVyIHNldHRpbmdzLiIpLGFsZXJ0KGUpLGsuZGlkU2hvd0Vycm9yTWVzc2FnZT0hMCkpKX1mdW5jdGlvbiB4KGUsdCl7aWYoInN5bWJvbHNVcmwiIT1lKXt2YXIgbj1jLmRvd25sb2FkUHJvZ3Jlc3NbZV0scj0obj1ufHwoYy5kb3dubG9hZFByb2dyZXNzW2VdPXtzdGFydGVkOiExLGZpbmlzaGVkOiExLGxlbmd0aENvbXB1dGFibGU6ITEsdG90YWw6MCxsb2FkZWQ6MH0pLCJvYmplY3QiIT10eXBlb2YgdHx8InByb2dyZXNzIiE9dC50eXBlJiYibG9hZCIhPXQudHlwZXx8KG4uc3RhcnRlZHx8KG4uc3RhcnRlZD0hMCxuLmxlbmd0aENvbXB1dGFibGU9dC5sZW5ndGhDb21wdXRhYmxlKSxuLnRvdGFsPXQudG90YWwsbi5sb2FkZWQ9dC5sb2FkZWQsImxvYWQiPT10LnR5cGUmJihuLmZpbmlzaGVkPSEwKSksMCksbz0wLGE9MCxpPTAscz0wO2ZvcihlIGluIGMuZG93bmxvYWRQcm9ncmVzcyl7aWYoIShuPWMuZG93bmxvYWRQcm9ncmVzc1tlXSkuc3RhcnRlZClyZXR1cm47YSsrLG4ubGVuZ3RoQ29tcHV0YWJsZT8ocis9bi5sb2FkZWQsbys9bi50b3RhbCxpKyspOm4uZmluaXNoZWR8fHMrK31sKC45KihhPyhhLXMtKG8/aSooby1yKS9vOjApKS9hOjApKX19ZnVuY3Rpb24gXygpe3ZhciBvPXRoaXM7by5pc0Nvbm5lY3RlZD1uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe3RyeXtmdW5jdGlvbiByKCl7by5vcGVuREJUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KG8ub3BlbkRCVGltZW91dCksby5vcGVuREJUaW1lb3V0PW51bGwpfW8ub3BlbkRCVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dm9pZCAwPT09by5kYXRhYmFzZSYmbihuZXcgRXJyb3IoIkNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlOiBUaW1lb3V0LiIpKX0sMmUzKTt2YXIgZT1oLm9wZW4ocy5uYW1lLHMudmVyc2lvbik7ZS5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ7KGU9KGU9ZSkudGFyZ2V0LnJlc3VsdCkub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhmLm5hbWUpfHxlLmNyZWF0ZU9iamVjdFN0b3JlKGYubmFtZSksZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHUubmFtZSl8fCh0PWUuY3JlYXRlT2JqZWN0U3RvcmUodS5uYW1lLHtrZXlQYXRoOiJ1cmwifSksWyJ2ZXJzaW9uIiwiY29tcGFueSIsInByb2R1Y3QiLCJ1cGRhdGVkIiwicmV2YWxpZGF0ZWQiLCJhY2Nlc3NlZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dC5jcmVhdGVJbmRleChlLGUpfSkpfSxlLm9uc3VjY2Vzcz1mdW5jdGlvbihlKXtyKCksby5kYXRhYmFzZT1lLnRhcmdldC5yZXN1bHQsdCgpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oZSl7cigpLG8uZGF0YWJhc2U9bnVsbCxuKG5ldyBFcnJvcigiQ291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UuIikpfX1jYXRjaChlKXtyKCksby5kYXRhYmFzZT1udWxsLG4obmV3IEVycm9yKCJDb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZS4iKSl9fSl9ZnVuY3Rpb24gUyhlKXtjb25zb2xlLmxvZygiW1VuaXR5Q2FjaGVdICIrZSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gRS5saW5rPUUubGlua3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEUubGluay5ocmVmPWUsRS5saW5rLmhyZWZ9ZnVuY3Rpb24gQyh0KXt0PXR8fHt9LHRoaXMuaGVhZGVycz1uZXcgSGVhZGVycyxPYmplY3Qua2V5cyh0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVyc1tlXSl9LmJpbmQodGhpcykpLHRoaXMucmVkaXJlY3RlZD10LnJlZGlyZWN0ZWQsdGhpcy5zdGF0dXM9dC5zdGF0dXMsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dCx0aGlzLnR5cGU9dC50eXBlLHRoaXMudXJsPXQudXJsLHRoaXMucGFyc2VkQm9keT10LnBhcnNlZEJvZHksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm9rIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDIwMDw9dGhpcy5zdGF0dXMmJnRoaXMuc3RhdHVzPD0yOTl9LmJpbmQodGhpcyl9KX1mdW5jdGlvbiBCKGUsdCxuLHIsbyl7dmFyIGE9e3VybDplLHZlcnNpb246cC52ZXJzaW9uLGNvbXBhbnk6dCxwcm9kdWN0Om4sdXBkYXRlZDpyLHJldmFsaWRhdGVkOnIsYWNjZXNzZWQ6cixyZXNwb25zZTp7aGVhZGVyczp7fX19O3JldHVybiBvJiYoby5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oZSx0KXthLnJlc3BvbnNlLmhlYWRlcnNbdF09ZX0pLFsicmVkaXJlY3RlZCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJ0eXBlIiwidXJsIl0uZm9yRWFjaChmdW5jdGlvbihlKXthLnJlc3BvbnNlW2VdPW9bZV19KSxhLnJlc3BvbnNlLnBhcnNlZEJvZHk9by5wYXJzZWRCb2R5KSxhfWMuU3lzdGVtSW5mbz1mdW5jdGlvbigpe3ZhciBlLHQsbixyLG89bmF2aWdhdG9yLnVzZXJBZ2VudCsiICIsYT1bWyJGaXJlZm94IiwiRmlyZWZveCJdLFsiT1BSIiwiT3BlcmEiXSxbIkVkZyIsIkVkZ2UiXSxbIlNhbXN1bmdCcm93c2VyIiwiU2Ftc3VuZyBCcm93c2VyIl0sWyJUcmlkZW50IiwiSW50ZXJuZXQgRXhwbG9yZXIiXSxbIk1TSUUiLCJJbnRlcm5ldCBFeHBsb3JlciJdLFsiQ2hyb21lIiwiQ2hyb21lIl0sWyJDcmlPUyIsIkNocm9tZSBvbiBpT1MgU2FmYXJpIl0sWyJGeGlPUyIsIkZpcmVmb3ggb24gaU9TIFNhZmFyaSJdLFsiU2FmYXJpIiwiU2FmYXJpIl1dO2Z1bmN0aW9uIGkoZSx0LG4pe3JldHVybihlPVJlZ0V4cChlLCJpIikuZXhlYyh0KSkmJmVbbl19Zm9yKHZhciBzPTA7czxhLmxlbmd0aDsrK3MpaWYodD1pKGFbc11bMF0rIlsvIF0oLio/KVsgXFwpXSIsbywxKSl7ZT1hW3NdWzFdO2JyZWFrfSJTYWZhcmkiPT1lJiYodD1pKCJWZXJzaW9uLyguKj8pICIsbywxKSksIkludGVybmV0IEV4cGxvcmVyIj09ZSYmKHQ9aSgicnY6KC4qPylcXCk/ICIsbywxKXx8dCk7Zm9yKHZhciBsPVtbIldpbmRvd3MgKC4qPylbOyldIiwiV2luZG93cyJdLFsiQW5kcm9pZCAoWzAtOV8uXSspIiwiQW5kcm9pZCJdLFsiaVBob25lIE9TIChbMC05Xy5dKykiLCJpUGhvbmVPUyJdLFsiaVBhZC4qPyBPUyAoWzAtOV8uXSspIiwiaVBhZE9TIl0sWyJGcmVlQlNEKCApIiwiRnJlZUJTRCJdLFsiT3BlbkJTRCggKSIsIk9wZW5CU0QiXSxbIkxpbnV4fFgxMSgpIiwiTGludXgiXSxbIk1hYyBPUyBYIChbMC05X1xcLl0rKSIsIk1hY09TIl0sWyJib3R8Z29vZ2xlfGJhaWR1fGJpbmd8bXNufHRlb21hfHNsdXJwfHlhbmRleCIsIlNlYXJjaCBCb3QiXV0sZD0wO2Q8bC5sZW5ndGg7KytkKWlmKGM9aShsW2RdWzBdLG8sMSkpe249bFtkXVsxXSxjPWMucmVwbGFjZSgvXy9nLCIuIik7YnJlYWt9dmFyIHUsYz17Ik5UIDUuMCI6IjIwMDAiLCJOVCA1LjEiOiJYUCIsIk5UIDUuMiI6IlNlcnZlciAyMDAzIiwiTlQgNi4wIjoiVmlzdGEiLCJOVCA2LjEiOiI3IiwiTlQgNi4yIjoiOCIsIk5UIDYuMyI6IjguMSIsIk5UIDEwLjAiOiIxMCJ9W2NdfHxjLGY9KChmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSYmKHU9KGg9Zi5nZXRDb250ZXh0KCJ3ZWJnbDIiKSk/MjowLGh8fChoPWYmJmYuZ2V0Q29udGV4dCgid2ViZ2wiKSkmJih1PTEpLGgmJihyPWguZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikmJmguZ2V0UGFyYW1ldGVyKDM3NDQ2KXx8aC5nZXRQYXJhbWV0ZXIoNzkzNykpKSwidW5kZWZpbmVkIiE9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyKSxoPSJvYmplY3QiPT10eXBlb2YgV2ViQXNzZW1ibHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJBc3NlbWJseS5jb21waWxlO3JldHVybnt3aWR0aDpzY3JlZW4ud2lkdGgsaGVpZ2h0OnNjcmVlbi5oZWlnaHQsdXNlckFnZW50Om8udHJpbSgpLGJyb3dzZXI6ZXx8IlVua25vd24gYnJvd3NlciIsYnJvd3NlclZlcnNpb246dHx8IlVua25vd24gdmVyc2lvbiIsbW9iaWxlOi9Nb2JpbGV8QW5kcm9pZHxpUChhZHxob25lKS8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbiksb3M6bnx8IlVua25vd24gT1MiLG9zVmVyc2lvbjpjfHwiVW5rbm93biBPUyBWZXJzaW9uIixncHU6cnx8IlVua25vd24gR1BVIixsYW5ndWFnZTpuYXZpZ2F0b3IudXNlckxhbmd1YWdlfHxuYXZpZ2F0b3IubGFuZ3VhZ2UsaGFzV2ViR0w6dSxoYXNDdXJzb3JMb2NrOiEhZG9jdW1lbnQuYm9keS5yZXF1ZXN0UG9pbnRlckxvY2ssaGFzRnVsbHNjcmVlbjohIWRvY3VtZW50LmJvZHkucmVxdWVzdEZ1bGxzY3JlZW58fCEhZG9jdW1lbnQuYm9keS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbixoYXNUaHJlYWRzOmYsaGFzV2FzbTpoLGhhc1dhc21UaHJlYWRzOiExfX0oKSxjLmFib3J0SGFuZGxlcj1mdW5jdGlvbihlKXtyZXR1cm4gayhlLCIiLDApLCEwfSxFcnJvci5zdGFja1RyYWNlTGltaXQ9TWF0aC5tYXgoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0fHwwLDUwKSxjLnJlYWRCb2R5V2l0aFByb2dyZXNzPWZ1bmN0aW9uKGEsaSxzKXt2YXIgZT1hLmJvZHk/YS5ib2R5LmdldFJlYWRlcigpOnZvaWQgMCxsPXZvaWQgMCE9PWEuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiAwO3ZhciB0PWUuaGVhZGVycy5nZXQoIkNvbnRlbnQtRW5jb2RpbmciKSxuPXBhcnNlSW50KGUuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikpO3N3aXRjaCh0KXtjYXNlImJyIjpyZXR1cm4gTWF0aC5yb3VuZCg1Km4pO2Nhc2UiZ3ppcCI6cmV0dXJuIE1hdGgucm91bmQoNCpuKTtkZWZhdWx0OnJldHVybiBufX0oYSxsKSx1PW5ldyBVaW50OEFycmF5KGQpLGM9W10sZj0wLGg9MDtyZXR1cm4gbHx8Y29uc29sZS53YXJuKCJbVW5pdHlDYWNoZV0gUmVzcG9uc2UgaXMgc2VydmVkIHdpdGhvdXQgQ29udGVudC1MZW5ndGggaGVhZGVyLiBQbGVhc2UgcmVjb25maWd1cmUgc2VydmVyIHRvIGluY2x1ZGUgdmFsaWQgQ29udGVudC1MZW5ndGggZm9yIGJldHRlciBkb3dubG9hZCBwZXJmb3JtYW5jZS4iKSxmdW5jdGlvbiBvKCl7cmV0dXJuIHZvaWQgMD09PWU/YS5hcnJheUJ1ZmZlcigpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIGkoe3R5cGU6InByb2dyZXNzIixyZXNwb25zZTphLHRvdGFsOmUubGVuZ3RoLGxvYWRlZDowLGxlbmd0aENvbXB1dGFibGU6bCxjaHVuazpzP3Q6bnVsbH0pLHR9KTplLnJlYWQoKS50aGVuKGZ1bmN0aW9uKGUpe2lmKGUuZG9uZSl7aWYoZj09PWQpcmV0dXJuIHU7aWYoZjxkKXJldHVybiB1LnNsaWNlKDAsZik7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGYpLG49KHQuc2V0KHUsMCksaCkscj0wO3I8Yy5sZW5ndGg7KytyKXQuc2V0KGNbcl0sbiksbis9Y1tyXS5sZW5ndGg7cmV0dXJuIHR9cmV0dXJuIGYrZS52YWx1ZS5sZW5ndGg8PXUubGVuZ3RoPyh1LnNldChlLnZhbHVlLGYpLGg9ZitlLnZhbHVlLmxlbmd0aCk6Yy5wdXNoKGUudmFsdWUpLGYrPWUudmFsdWUubGVuZ3RoLGkoe3R5cGU6InByb2dyZXNzIixyZXNwb25zZTphLHRvdGFsOk1hdGgubWF4KGQsZiksbG9hZGVkOmYsbGVuZ3RoQ29tcHV0YWJsZTpsLGNodW5rOnM/ZS52YWx1ZTpudWxsfSksbygpfSl9KCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gaSh7dHlwZToibG9hZCIscmVzcG9uc2U6YSx0b3RhbDplLmxlbmd0aCxsb2FkZWQ6ZS5sZW5ndGgsbGVuZ3RoQ29tcHV0YWJsZTpsLGNodW5rOm51bGx9KSxhLnBhcnNlZEJvZHk9ZSxhfSl9LGMuZmV0Y2hXaXRoUHJvZ3Jlc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbigpe307cmV0dXJuIHQmJnQub25Qcm9ncmVzcyYmKG49dC5vblByb2dyZXNzKSxmZXRjaChlLHQpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGMucmVhZEJvZHlXaXRoUHJvZ3Jlc3MoZSxuLHQuZW5hYmxlU3RyZWFtaW5nRG93bmxvYWQpfSl9LGMuVW5pdHlDYWNoZT0ocz17bmFtZToiVW5pdHlDYWNoZSIsdmVyc2lvbjozfSx1PXtuYW1lOiJSZXF1ZXN0U3RvcmUiLHZlcnNpb246MX0sZj17bmFtZToiV2ViQXNzZW1ibHkiLHZlcnNpb246MX0saD13aW5kb3cuaW5kZXhlZERCfHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREIsXy5Vbml0eUNhY2hlRGF0YWJhc2U9cyxfLlJlcXVlc3RTdG9yZT11LF8uV2ViQXNzZW1ibHlTdG9yZT1mLGI9bnVsbCxfLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGI9Ynx8bmV3IF99LF8uZGVzdHJveUluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGI/Yi5jbG9zZSgpLnRoZW4oZnVuY3Rpb24oKXtiPW51bGx9KTpQcm9taXNlLnJlc29sdmUoKX0sXy5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZGVzdHJveUluc3RhbmNlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciBuPWguZGVsZXRlRGF0YWJhc2Uocy5uYW1lKTtuLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2UoKX0sbi5vbmVycm9yPWZ1bmN0aW9uKCl7dChuZXcgRXJyb3IoIkNvdWxkIG5vdCBkZWxldGUgZGF0YWJhc2UuIikpfSxuLm9uYmxvY2tlZD1mdW5jdGlvbigpe3QobmV3IEVycm9yKCJEYXRhYmFzZSBibG9ja2VkLiIpKX19KX0pfSxfLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGEsaSxzKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7dHJ5e3ZhciBlLHIsbztudWxsPT09dGhpcy5kYXRhYmFzZT9uKG5ldyBFcnJvcigiaW5kZXhlZERCIGFjY2VzcyBkZW5pZWQiKSk6KGU9LTEhPVsicHV0IiwiZGVsZXRlIiwiY2xlYXIiXS5pbmRleE9mKGkpPyJyZWFkd3JpdGUiOiJyZWFkb25seSIscj10aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKFthXSxlKS5vYmplY3RTdG9yZShhKSwib3BlbktleUN1cnNvciI9PWkmJihyPXIuaW5kZXgoc1swXSkscz1zLnNsaWNlKDEpKSwobz1yW2ldLmFwcGx5KHIscykpLm9uc3VjY2Vzcz1mdW5jdGlvbihlKXt0KGUudGFyZ2V0LnJlc3VsdCl9LG8ub25lcnJvcj1mdW5jdGlvbihlKXtuKGUpfSl9Y2F0Y2goZSl7bihlKX19LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKX0sXy5wcm90b3R5cGUubG9hZFJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhlY3V0ZSh1Lm5hbWUsImdldCIsW2VdKX0sXy5wcm90b3R5cGUuc3RvcmVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4ZWN1dGUodS5uYW1lLCJwdXQiLFtlXSl9LF8ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQudGhlbihmdW5jdGlvbigpe3RoaXMuZGF0YWJhc2UmJih0aGlzLmRhdGFiYXNlLmNsb3NlKCksdGhpcy5kYXRhYmFzZT1udWxsKX0uYmluZCh0aGlzKSl9LF8pLGMuY2FjaGVkRmV0Y2g9KG09Yy5Vbml0eUNhY2hlLHA9bS5SZXF1ZXN0U3RvcmUsZz1jLmZldGNoV2l0aFByb2dyZXNzLEMucHJvdG90eXBlLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnBhcnNlZEJvZHkuYnVmZmVyKX0sQy5wcm90b3R5cGUuYmxvYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFycmF5QnVmZmVyKCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJsb2IoW2VdKX0pfSxDLnByb3RvdHlwZS5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04ucGFyc2UoZSl9KX0sQy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbigpe3ZhciBlPW5ldyBUZXh0RGVjb2RlcjtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUuZGVjb2RlKHRoaXMucGFyc2VkQm9keSkpfSxmdW5jdGlvbihyLG8pe3ZhciBlLHQsYT1tLmdldEluc3RhbmNlKCksbj1FKCJzdHJpbmciPT10eXBlb2Ygcj9yOnIudXJsKSxpPXtlbmFibGVkOihlPW4sKCEodD1vKXx8IXQubWV0aG9kfHwiR0VUIj09PXQubWV0aG9kKSYmKCghdHx8LTEhPVsibXVzdC1yZXZhbGlkYXRlIiwiaW1tdXRhYmxlIl0uaW5kZXhPZih0LmNvbnRyb2wpKSYmISFlLm1hdGNoKCJeaHR0cHM/Oi8vIikpKX07ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBnKGUsdCkudGhlbihmdW5jdGlvbihlKXtpZihpLmVuYWJsZWQmJiFpLnJldmFsaWRhdGVkKXtpZigzMDQ9PT1lLnN0YXR1cylyZXR1cm4gaS5yZXN1bHQucmV2YWxpZGF0ZWQ9aS5yZXN1bHQuYWNjZXNzZWQsaS5yZXZhbGlkYXRlZD0hMCxhLnN0b3JlUmVxdWVzdChpLnJlc3VsdCkudGhlbihmdW5jdGlvbigpe1MoIiciK2kucmVzdWx0LnVybCsiJyBzdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQgYW5kIHNlcnZlZCBmcm9tIHRoZSBpbmRleGVkREIgY2FjaGUiKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe1MoIiciK2kucmVzdWx0LnVybCsiJyBzdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQgYnV0IG5vdCBzdG9yZWQgaW4gdGhlIGluZGV4ZWREQiBjYWNoZSBkdWUgdG8gdGhlIGVycm9yOiAiK2UpfSksbmV3IEMoaS5yZXN1bHQucmVzcG9uc2UpOzIwMD09ZS5zdGF0dXM/KGkucmVzdWx0PUIoZS51cmwsaS5jb21wYW55LGkucHJvZHVjdCxpLmFjY2Vzc2VkLGUpLGkucmV2YWxpZGF0ZWQ9ITAsYS5zdG9yZVJlcXVlc3QoaS5yZXN1bHQpLnRoZW4oZnVuY3Rpb24oKXtTKCInIitpLnJlc3VsdC51cmwrIicgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYW5kIHN0b3JlZCBpbiB0aGUgaW5kZXhlZERCIGNhY2hlIil9KS5jYXRjaChmdW5jdGlvbihlKXtTKCInIitpLnJlc3VsdC51cmwrIicgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYnV0IG5vdCBzdG9yZWQgaW4gdGhlIGluZGV4ZWREQiBjYWNoZSBkdWUgdG8gdGhlIGVycm9yOiAiK2UpfSkpOlMoIiciK2kucmVzdWx0LnVybCsiJyByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogIitlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KX1yZXR1cm4gZX0pfWZ1bmN0aW9uIGwoZSl7byYmby5vblByb2dyZXNzJiYoby5vblByb2dyZXNzKHt0eXBlOiJwcm9ncmVzcyIsdG90YWw6ZS5wYXJzZWRCb2R5Lmxlbmd0aCxsb2FkZWQ6ZS5wYXJzZWRCb2R5Lmxlbmd0aCxsZW5ndGhDb21wdXRhYmxlOiEwfSksby5vblByb2dyZXNzKHt0eXBlOiJsb2FkIix0b3RhbDplLnBhcnNlZEJvZHkubGVuZ3RoLGxvYWRlZDplLnBhcnNlZEJvZHkubGVuZ3RoLGxlbmd0aENvbXB1dGFibGU6ITB9KSl9cmV0dXJuIG8mJihpLmNvbnRyb2w9by5jb250cm9sLGkuY29tcGFueT1vLmNvbXBhbnksaS5wcm9kdWN0PW8ucHJvZHVjdCksaS5yZXN1bHQ9QihuLGkuY29tcGFueSxpLnByb2R1Y3QsRGF0ZS5ub3coKSksaS5yZXZhbGlkYXRlZD0hMSxpLmVuYWJsZWQ/YS5sb2FkUmVxdWVzdChpLnJlc3VsdC51cmwpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWV8fGUudmVyc2lvbiE9PXAudmVyc2lvbilyZXR1cm4gcyhyLG8pO2kucmVzdWx0PWUsaS5yZXN1bHQuYWNjZXNzZWQ9RGF0ZS5ub3coKTt2YXIgdCxuPW5ldyBDKGkucmVzdWx0LnJlc3BvbnNlKTtyZXR1cm4iaW1tdXRhYmxlIj09aS5jb250cm9sPyhpLnJldmFsaWRhdGVkPSEwLGEuc3RvcmVSZXF1ZXN0KGkucmVzdWx0KSxTKCInIitpLnJlc3VsdC51cmwrIicgc2VydmVkIGZyb20gdGhlIGluZGV4ZWREQiBjYWNoZSB3aXRob3V0IHJldmFsaWRhdGlvbiIpLGwobiksbik6KGU9aS5yZXN1bHQudXJsLCh0PXdpbmRvdy5sb2NhdGlvbi5ocmVmLm1hdGNoKC9eW2Etel0rOlwvXC9bXlwvXSsvKSkmJiFlLmxhc3RJbmRleE9mKHRbMF0sMCl8fCFuLmhlYWRlcnMuZ2V0KCJMYXN0LU1vZGlmaWVkIikmJiFuLmhlYWRlcnMuZ2V0KCJFVGFnIik/KGU9KG89b3x8e30pLmhlYWRlcnN8fHt9LG8uaGVhZGVycz1lLG4uaGVhZGVycy5nZXQoIkxhc3QtTW9kaWZpZWQiKT8oZVsiSWYtTW9kaWZpZWQtU2luY2UiXT1uLmhlYWRlcnMuZ2V0KCJMYXN0LU1vZGlmaWVkIiksZVsiQ2FjaGUtQ29udHJvbCJdPSJuby1jYWNoZSIpOm4uaGVhZGVycy5nZXQoIkVUYWciKSYmKGVbIklmLU5vbmUtTWF0Y2giXT1uLmhlYWRlcnMuZ2V0KCJFVGFnIiksZVsiQ2FjaGUtQ29udHJvbCJdPSJuby1jYWNoZSIpLHMocixvKSk6ZmV0Y2goaS5yZXN1bHQudXJsLHttZXRob2Q6IkhFQUQifSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gaS5yZXZhbGlkYXRlZD1bIkxhc3QtTW9kaWZpZWQiLCJFVGFnIl0uZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIW4uaGVhZGVycy5nZXQoZSl8fG4uaGVhZGVycy5nZXQoZSk9PXQuaGVhZGVycy5nZXQoZSl9KSxpLnJldmFsaWRhdGVkPyhpLnJlc3VsdC5yZXZhbGlkYXRlZD1pLnJlc3VsdC5hY2Nlc3NlZCxhLnN0b3JlUmVxdWVzdChpLnJlc3VsdCksUygiJyIraS5yZXN1bHQudXJsKyInIHN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgc2VydmVkIGZyb20gdGhlIGluZGV4ZWREQiBjYWNoZSIpLGwobiksbik6cyhyLG8pfSkpfSkuY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIFMoIkZhaWxlZCB0byBsb2FkICciK2kucmVzdWx0LnVybCsiJyBmcm9tIGluZGV4ZWREQiBjYWNoZSBkdWUgdG8gdGhlIGVycm9yOiAiK2UpLGcocixvKX0pOmcocixvKX0pO3ZhciBVPXtnemlwOntyZXF1aXJlOmZ1bmN0aW9uKGUpe3ZhciB0LG49eyJpbmZsYXRlLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBjPWUoIi4vemxpYi9pbmZsYXRlIiksZj1lKCIuL3V0aWxzL2NvbW1vbiIpLGg9ZSgiLi91dGlscy9zdHJpbmdzIiksYj1lKCIuL3psaWIvY29uc3RhbnRzIikscj1lKCIuL3psaWIvbWVzc2FnZXMiKSxvPWUoIi4vemxpYi96c3RyZWFtIiksYT1lKCIuL3psaWIvZ3poZWFkZXIiKSxtPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7dGhpcy5vcHRpb25zPWYuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO2lmKHQucmF3JiYwPD10LndpbmRvd0JpdHMmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cz0tdC53aW5kb3dCaXRzLDA9PT10LndpbmRvd0JpdHMmJih0LndpbmRvd0JpdHM9LTE1KSksISgwPD10LndpbmRvd0JpdHMmJnQud2luZG93Qml0czwxNil8fGUmJmUud2luZG93Qml0c3x8KHQud2luZG93Qml0cys9MzIpLDE1PHQud2luZG93Qml0cyYmdC53aW5kb3dCaXRzPDQ4JiYwPT0oMTUmdC53aW5kb3dCaXRzKSYmKHQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IG8sdGhpcy5zdHJtLmF2YWlsX291dD0wLChlPWMuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0LndpbmRvd0JpdHMpKSE9PWIuWl9PSyl0aHJvdyBuZXcgRXJyb3IocltlXSk7dGhpcy5oZWFkZXI9bmV3IGEsYy5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9ZnVuY3Rpb24gcyhlLHQpe2lmKCh0PW5ldyBpKHQpKS5wdXNoKGUsITApLHQuZXJyKXRocm93IHQubXNnfHxyW3QuZXJyXTtyZXR1cm4gdC5yZXN1bHR9aS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhLGkscz10aGlzLnN0cm0sbD10aGlzLm9wdGlvbnMuY2h1bmtTaXplLGQ9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksdT0hMTtpZih0aGlzLmVuZGVkKXJldHVybiExO3I9dD09PX5+dD90OiEwPT09dD9iLlpfRklOSVNIOmIuWl9OT19GTFVTSCwic3RyaW5nIj09dHlwZW9mIGU/cy5pbnB1dD1oLmJpbnN0cmluZzJidWYoZSk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PW0uY2FsbChlKT9zLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOnMuaW5wdXQ9ZSxzLm5leHRfaW49MCxzLmF2YWlsX2luPXMuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1zLmF2YWlsX291dCYmKHMub3V0cHV0PW5ldyBmLkJ1ZjgobCkscy5uZXh0X291dD0wLHMuYXZhaWxfb3V0PWwpLChuPWMuaW5mbGF0ZShzLGIuWl9OT19GTFVTSCkpPT09Yi5aX05FRURfRElDVCYmZCYmKGk9InN0cmluZyI9PXR5cGVvZiBkP2guc3RyaW5nMmJ1ZihkKToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09bS5jYWxsKGQpP25ldyBVaW50OEFycmF5KGQpOmQsbj1jLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxpKSksbj09PWIuWl9CVUZfRVJST1ImJiEwPT09dSYmKG49Yi5aX09LLHU9ITEpLG4hPT1iLlpfU1RSRUFNX0VORCYmbiE9PWIuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChuKSwhKHRoaXMuZW5kZWQ9ITApfXdoaWxlKCFzLm5leHRfb3V0fHwwIT09cy5hdmFpbF9vdXQmJm4hPT1iLlpfU1RSRUFNX0VORCYmKDAhPT1zLmF2YWlsX2lufHxyIT09Yi5aX0ZJTklTSCYmciE9PWIuWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhpPWgudXRmOGJvcmRlcihzLm91dHB1dCxzLm5leHRfb3V0KSxvPXMubmV4dF9vdXQtaSxhPWguYnVmMnN0cmluZyhzLm91dHB1dCxpKSxzLm5leHRfb3V0PW8scy5hdmFpbF9vdXQ9bC1vLG8mJmYuYXJyYXlTZXQocy5vdXRwdXQscy5vdXRwdXQsaSxvLDApLHRoaXMub25EYXRhKGEpKTp0aGlzLm9uRGF0YShmLnNocmlua0J1ZihzLm91dHB1dCxzLm5leHRfb3V0KSkpLDA9PT1zLmF2YWlsX2luJiYwPT09cy5hdmFpbF9vdXQmJih1PSEwKSwoMDxzLmF2YWlsX2lufHwwPT09cy5hdmFpbF9vdXQpJiZuIT09Yi5aX1NUUkVBTV9FTkQpO3JldHVybihyPW49PT1iLlpfU1RSRUFNX0VORD9iLlpfRklOSVNIOnIpPT09Yi5aX0ZJTklTSD8obj1jLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsbj09PWIuWl9PSyk6ciE9PWIuWl9TWU5DX0ZMVVNIfHwodGhpcy5vbkVuZChiLlpfT0spLCEocy5hdmFpbF9vdXQ9MCkpfSxpLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0saS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PWIuWl9PSyYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PWYuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sbi5JbmZsYXRlPWksbi5pbmZsYXRlPXMsbi5pbmZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxzKGUsdCl9LG4udW5nemlwPXN9LCJ1dGlscy9jb21tb24uanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQxNkFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIEludDMyQXJyYXksbz0obi5hc3NpZ249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt0Lmxlbmd0aDspe3ZhciBuPXQuc2hpZnQoKTtpZihuKXtpZigib2JqZWN0IiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihuKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIHIgaW4gbiluLmhhc093blByb3BlcnR5KHIpJiYoZVtyXT1uW3JdKX19cmV0dXJuIGV9LG4uc2hyaW5rQnVmPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGghPT10KXtpZihlLnN1YmFycmF5KXJldHVybiBlLnN1YmFycmF5KDAsdCk7ZS5sZW5ndGg9dH1yZXR1cm4gZX0se2FycmF5U2V0OmZ1bmN0aW9uKGUsdCxuLHIsbyl7aWYodC5zdWJhcnJheSYmZS5zdWJhcnJheSllLnNldCh0LnN1YmFycmF5KG4sbityKSxvKTtlbHNlIGZvcih2YXIgYT0wO2E8cjthKyspZVtvK2FdPXRbbithXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLG89MCxhPTAsaT1lLmxlbmd0aDthPGk7YSsrKW8rPWVbYV0ubGVuZ3RoO2ZvcihyPW5ldyBVaW50OEFycmF5KG8pLGE9dD0wLGk9ZS5sZW5ndGg7YTxpO2ErKyluPWVbYV0sci5zZXQobix0KSx0Kz1uLmxlbmd0aDtyZXR1cm4gcn19KSxhPXthcnJheVNldDpmdW5jdGlvbihlLHQsbixyLG8pe2Zvcih2YXIgYT0wO2E8cjthKyspZVtvK2FdPXRbbithXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZSl9fTtuLnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KG4uQnVmOD1VaW50OEFycmF5LG4uQnVmMTY9VWludDE2QXJyYXksbi5CdWYzMj1JbnQzMkFycmF5LG4uYXNzaWduKG4sbykpOihuLkJ1Zjg9QXJyYXksbi5CdWYxNj1BcnJheSxuLkJ1ZjMyPUFycmF5LG4uYXNzaWduKG4sYSkpfSxuLnNldFR5cGVkKHIpfSwidXRpbHMvc3RyaW5ncy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgbD1lKCIuL2NvbW1vbiIpLG89ITAsYT0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2goZSl7bz0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaChlKXthPSExfWZvcih2YXIgZD1uZXcgbC5CdWY4KDI1Nikscj0wO3I8MjU2O3IrKylkW3JdPTI1Mjw9cj82OjI0ODw9cj81OjI0MDw9cj80OjIyNDw9cj8zOjE5Mjw9cj8yOjE7ZnVuY3Rpb24gdShlLHQpe2lmKHQ8NjU1MzcmJihlLnN1YmFycmF5JiZhfHwhZS5zdWJhcnJheSYmbykpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxsLnNocmlua0J1ZihlLHQpKTtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbn1kWzI1NF09ZFsyNTRdPTEsbi5zdHJpbmcyYnVmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsbyxhPWUubGVuZ3RoLGk9MCxzPTA7czxhO3MrKyk1NTI5Nj09KDY0NTEyJihuPWUuY2hhckNvZGVBdChzKSkpJiZzKzE8YSYmNTYzMjA9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQocysxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxzKyspLGkrPW48MTI4PzE6bjwyMDQ4PzI6bjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IGwuQnVmOChpKSxzPW89MDtvPGk7cysrKTU1Mjk2PT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KHMpKSkmJnMrMTxhJiY1NjMyMD09KDY0NTEyJihyPWUuY2hhckNvZGVBdChzKzEpKSkmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLHMrKyksbjwxMjg/dFtvKytdPW46KG48MjA0OD90W28rK109MTkyfG4+Pj42OihuPDY1NTM2P3RbbysrXT0yMjR8bj4+PjEyOih0W28rK109MjQwfG4+Pj4xOCx0W28rK109MTI4fG4+Pj4xMiY2MyksdFtvKytdPTEyOHxuPj4+NiY2MyksdFtvKytdPTEyOHw2MyZuKTtyZXR1cm4gdH0sbi5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsZS5sZW5ndGgpfSxuLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBsLkJ1ZjgoZS5sZW5ndGgpLG49MCxyPXQubGVuZ3RoO248cjtuKyspdFtuXT1lLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9LG4uYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLG89dHx8ZS5sZW5ndGgsYT1uZXcgQXJyYXkoMipvKSxpPTAscz0wO3M8bzspaWYoKG49ZVtzKytdKTwxMjgpYVtpKytdPW47ZWxzZSBpZig0PChyPWRbbl0pKWFbaSsrXT02NTUzMyxzKz1yLTE7ZWxzZXtmb3IobiY9Mj09PXI/MzE6Mz09PXI/MTU6NzsxPHImJnM8bzspbj1uPDw2fDYzJmVbcysrXSxyLS07MTxyP2FbaSsrXT02NTUzMzpuPDY1NTM2P2FbaSsrXT1uOihuLT02NTUzNixhW2krK109NTUyOTZ8bj4+MTAmMTAyMyxhW2krK109NTYzMjB8MTAyMyZuKX1yZXR1cm4gdShhLGkpfSxuLnV0Zjhib3JkZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49KHQ9KHQ9dHx8ZS5sZW5ndGgpPmUubGVuZ3RoP2UubGVuZ3RoOnQpLTE7MDw9biYmMTI4PT0oMTkyJmVbbl0pOyluLS07cmV0dXJuIShuPDApJiYwIT09biYmbitkW2Vbbl1dPnQ/bjp0fX0sInpsaWIvaW5mbGF0ZS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgTD1lKCIuLi91dGlscy9jb21tb24iKSxPPWUoIi4vYWRsZXIzMiIpLEk9ZSgiLi9jcmMzMiIpLEE9ZSgiLi9pbmZmYXN0IiksUD1lKCIuL2luZnRyZWVzIiksRD0wLE49LTIsej0xLHI9ODUyLG89NTkyO2Z1bmN0aW9uIEYoZSl7cmV0dXJuKGU+Pj4yNCYyNTUpKyhlPj4+OCY2NTI4MCkrKCg2NTI4MCZlKTw8OCkrKCgyNTUmZSk8PDI0KX1mdW5jdGlvbiBhKCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBMLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBMLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIGkoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KHQ9ZS5zdGF0ZSxlLnRvdGFsX2luPWUudG90YWxfb3V0PXQudG90YWw9MCxlLm1zZz0iIix0LndyYXAmJihlLmFkbGVyPTEmdC53cmFwKSx0Lm1vZGU9eix0Lmxhc3Q9MCx0LmhhdmVkaWN0PTAsdC5kbWF4PTMyNzY4LHQuaGVhZD1udWxsLHQuaG9sZD0wLHQuYml0cz0wLHQubGVuY29kZT10LmxlbmR5bj1uZXcgTC5CdWYzMihyKSx0LmRpc3Rjb2RlPXQuZGlzdGR5bj1uZXcgTC5CdWYzMihvKSx0LnNhbmU9MSx0LmJhY2s9LTEsRCk6Tn1mdW5jdGlvbiBzKGUpe3ZhciB0O3JldHVybiBlJiZlLnN0YXRlPygodD1lLnN0YXRlKS53c2l6ZT0wLHQud2hhdmU9MCx0LnduZXh0PTAsaShlKSk6Tn1mdW5jdGlvbiBsKGUsdCl7dmFyIG4scjtyZXR1cm4hZXx8IWUuc3RhdGV8fChyPWUuc3RhdGUsdDwwPyhuPTAsdD0tdCk6KG49MSsodD4+NCksdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8MTU8dCkpP046KG51bGwhPT1yLndpbmRvdyYmci53Yml0cyE9PXQmJihyLndpbmRvdz1udWxsKSxyLndyYXA9bixyLndiaXRzPXQscyhlKSl9ZnVuY3Rpb24gZChlLHQpe3ZhciBuO3JldHVybiBlPyhuPW5ldyBhLChlLnN0YXRlPW4pLndpbmRvdz1udWxsLChuPWwoZSx0KSkhPT1EJiYoZS5zdGF0ZT1udWxsKSxuKTpOfXZhciBaLGosSD0hMDtmdW5jdGlvbiBNKGUsdCxuLHIpe3ZhciBvO3JldHVybiBudWxsPT09KGU9ZS5zdGF0ZSkud2luZG93JiYoZS53c2l6ZT0xPDxlLndiaXRzLGUud25leHQ9MCxlLndoYXZlPTAsZS53aW5kb3c9bmV3IEwuQnVmOChlLndzaXplKSkscj49ZS53c2l6ZT8oTC5hcnJheVNldChlLndpbmRvdyx0LG4tZS53c2l6ZSxlLndzaXplLDApLGUud25leHQ9MCxlLndoYXZlPWUud3NpemUpOihyPChvPWUud3NpemUtZS53bmV4dCkmJihvPXIpLEwuYXJyYXlTZXQoZS53aW5kb3csdCxuLXIsbyxlLnduZXh0KSwoci09byk/KEwuYXJyYXlTZXQoZS53aW5kb3csdCxuLXIsciwwKSxlLnduZXh0PXIsZS53aGF2ZT1lLndzaXplKTooZS53bmV4dCs9byxlLnduZXh0PT09ZS53c2l6ZSYmKGUud25leHQ9MCksZS53aGF2ZTxlLndzaXplJiYoZS53aGF2ZSs9bykpKSwwfW4uaW5mbGF0ZVJlc2V0PXMsbi5pbmZsYXRlUmVzZXQyPWwsbi5pbmZsYXRlUmVzZXRLZWVwPWksbi5pbmZsYXRlSW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gZChlLDE1KX0sbi5pbmZsYXRlSW5pdDI9ZCxuLmluZmxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8sYSxpLHMsbCxkLHUsYyxmLGgsYixtLHAsZyx3LHYseSxrLHgsXyxTLEUsQz0wLEI9bmV3IEwuQnVmOCg0KSxVPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighZXx8IWUuc3RhdGV8fCFlLm91dHB1dHx8IWUuaW5wdXQmJjAhPT1lLmF2YWlsX2luKXJldHVybiBOOzEyPT09KG49ZS5zdGF0ZSkubW9kZSYmKG4ubW9kZT0xMyksaT1lLm5leHRfb3V0LG89ZS5vdXRwdXQsbD1lLmF2YWlsX291dCxhPWUubmV4dF9pbixyPWUuaW5wdXQscz1lLmF2YWlsX2luLGQ9bi5ob2xkLHU9bi5iaXRzLGM9cyxmPWwsXz1EO2U6Zm9yKDs7KXN3aXRjaChuLm1vZGUpe2Nhc2UgejppZigwPT09bi53cmFwKW4ubW9kZT0xMztlbHNle2Zvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKDImbi53cmFwJiYzNTYxNT09PWQpQltuLmNoZWNrPTBdPTI1NSZkLEJbMV09ZD4+PjgmMjU1LG4uY2hlY2s9SShuLmNoZWNrLEIsMiwwKSx1PWQ9MCxuLm1vZGU9MjtlbHNlIGlmKG4uZmxhZ3M9MCxuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksISgxJm4ud3JhcCl8fCgoKDI1NSZkKTw8OCkrKGQ+PjgpKSUzMSllLm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPTMwO2Vsc2UgaWYoOCE9KDE1JmQpKWUubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPTMwO2Vsc2V7aWYodS09NCx4PTgrKDE1JihkPj4+PTQpKSwwPT09bi53Yml0cyluLndiaXRzPXg7ZWxzZSBpZih4Pm4ud2JpdHMpe2UubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9MzA7YnJlYWt9bi5kbWF4PTE8PHgsZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPTUxMiZkPzEwOjEyLHU9ZD0wfX1icmVhaztjYXNlIDI6Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9aWYobi5mbGFncz1kLDghPSgyNTUmbi5mbGFncykpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0Jm4uZmxhZ3Mpe2UubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT0zMDticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1kPj44JjEpLDUxMiZuLmZsYWdzJiYoQlswXT0yNTUmZCxCWzFdPWQ+Pj44JjI1NSxuLmNoZWNrPUkobi5jaGVjayxCLDIsMCkpLHU9ZD0wLG4ubW9kZT0zO2Nhc2UgMzpmb3IoO3U8MzI7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1kKSw1MTImbi5mbGFncyYmKEJbMF09MjU1JmQsQlsxXT1kPj4+OCYyNTUsQlsyXT1kPj4+MTYmMjU1LEJbM109ZD4+PjI0JjI1NSxuLmNoZWNrPUkobi5jaGVjayxCLDQsMCkpLHU9ZD0wLG4ubW9kZT00O2Nhc2UgNDpmb3IoO3U8MTY7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPTI1NSZkLG4uaGVhZC5vcz1kPj44KSw1MTImbi5mbGFncyYmKEJbMF09MjU1JmQsQlsxXT1kPj4+OCYyNTUsbi5jaGVjaz1JKG4uY2hlY2ssQiwyLDApKSx1PWQ9MCxuLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZuLmZsYWdzKXtmb3IoO3U8MTY7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1uLmxlbmd0aD1kLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49ZCksNTEyJm4uZmxhZ3MmJihCWzBdPTI1NSZkLEJbMV09ZD4+PjgmMjU1LG4uY2hlY2s9SShuLmNoZWNrLEIsMiwwKSksdT1kPTB9ZWxzZSBuLmhlYWQmJihuLmhlYWQuZXh0cmE9bnVsbCk7bi5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmbi5mbGFncyYmKChoPXM8KGg9bi5sZW5ndGgpP3M6aCkmJihuLmhlYWQmJih4PW4uaGVhZC5leHRyYV9sZW4tbi5sZW5ndGgsbi5oZWFkLmV4dHJhfHwobi5oZWFkLmV4dHJhPW5ldyBBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksTC5hcnJheVNldChuLmhlYWQuZXh0cmEscixhLGgseCkpLDUxMiZuLmZsYWdzJiYobi5jaGVjaz1JKG4uY2hlY2sscixoLGEpKSxzLT1oLGErPWgsbi5sZW5ndGgtPWgpLG4ubGVuZ3RoKSlicmVhayBlO24ubGVuZ3RoPTAsbi5tb2RlPTc7Y2FzZSA3OmlmKDIwNDgmbi5mbGFncyl7aWYoMD09PXMpYnJlYWsgZTtmb3IoaD0wO3g9clthK2grK10sbi5oZWFkJiZ4JiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpKSx4JiZoPHM7KTtpZig1MTImbi5mbGFncyYmKG4uY2hlY2s9SShuLmNoZWNrLHIsaCxhKSkscy09aCxhKz1oLHgpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmbi5mbGFncyl7aWYoMD09PXMpYnJlYWsgZTtmb3IoaD0wO3g9clthK2grK10sbi5oZWFkJiZ4JiZuLmxlbmd0aDw2NTUzNiYmKG4uaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpKSx4JiZoPHM7KTtpZig1MTImbi5mbGFncyYmKG4uY2hlY2s9SShuLmNoZWNrLHIsaCxhKSkscy09aCxhKz1oLHgpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT05O2Nhc2UgOTppZig1MTImbi5mbGFncyl7Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9aWYoZCE9PSg2NTUzNSZuLmNoZWNrKSl7ZS5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLG4ubW9kZT0zMDticmVha311PWQ9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7dTwzMjspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWUuYWRsZXI9bi5jaGVjaz1GKGQpLHU9ZD0wLG4ubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1uLmhhdmVkaWN0KXJldHVybiBlLm5leHRfb3V0PWksZS5hdmFpbF9vdXQ9bCxlLm5leHRfaW49YSxlLmF2YWlsX2luPXMsbi5ob2xkPWQsbi5iaXRzPXUsMjtlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9MTI7Y2FzZSAxMjppZig1PT09dHx8Nj09PXQpYnJlYWsgZTtjYXNlIDEzOmlmKG4ubGFzdClkPj4+PTcmdSx1LT03JnUsbi5tb2RlPTI3O2Vsc2V7Zm9yKDt1PDM7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1zd2l0Y2gobi5sYXN0PTEmZCwtLXUsMyYoZD4+Pj0xKSl7Y2FzZSAwOm4ubW9kZT0xNDticmVhaztjYXNlIDE6dmFyIFQsVD1SPXZvaWQgMCxSPW47aWYoSCl7Zm9yKFo9bmV3IEwuQnVmMzIoNTEyKSxqPW5ldyBMLkJ1ZjMyKDMyKSxUPTA7VDwxNDQ7KVIubGVuc1tUKytdPTg7Zm9yKDtUPDI1NjspUi5sZW5zW1QrK109OTtmb3IoO1Q8MjgwOylSLmxlbnNbVCsrXT03O2Zvcig7VDwyODg7KVIubGVuc1tUKytdPTg7Zm9yKFAoMSxSLmxlbnMsMCwyODgsWiwwLFIud29yayx7Yml0czo5fSksVD0wO1Q8MzI7KVIubGVuc1tUKytdPTU7UCgyLFIubGVucywwLDMyLGosMCxSLndvcmsse2JpdHM6NX0pLEg9ITF9aWYoUi5sZW5jb2RlPVosUi5sZW5iaXRzPTksUi5kaXN0Y29kZT1qLFIuZGlzdGJpdHM9NSxuLm1vZGU9MjAsNiE9PXQpYnJlYWs7ZD4+Pj0yLHUtPTI7YnJlYWsgZTtjYXNlIDI6bi5tb2RlPTE3O2JyZWFrO2Nhc2UgMzplLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9MzB9ZD4+Pj0yLHUtPTJ9YnJlYWs7Y2FzZSAxNDpmb3IoZD4+Pj03JnUsdS09NyZ1O3U8MzI7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1pZigoNjU1MzUmZCkhPShkPj4+MTZeNjU1MzUpKXtlLm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsbi5tb2RlPTMwO2JyZWFrfWlmKG4ubGVuZ3RoPTY1NTM1JmQsdT1kPTAsbi5tb2RlPTE1LDY9PT10KWJyZWFrIGU7Y2FzZSAxNTpuLm1vZGU9MTY7Y2FzZSAxNjppZihoPW4ubGVuZ3RoKXtpZigwPT09KGg9bDwoaD1zPGg/czpoKT9sOmgpKWJyZWFrIGU7TC5hcnJheVNldChvLHIsYSxoLGkpLHMtPWgsYSs9aCxsLT1oLGkrPWgsbi5sZW5ndGgtPWh9ZWxzZSBuLm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO3U8MTQ7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1pZihuLm5sZW49MjU3KygzMSZkKSxkPj4+PTUsdS09NSxuLm5kaXN0PTErKDMxJmQpLGQ+Pj49NSx1LT01LG4ubmNvZGU9NCsoMTUmZCksZD4+Pj00LHUtPTQsMjg2PG4ubmxlbnx8MzA8bi5uZGlzdCl7ZS5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9MzA7YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7dTwzOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9bi5sZW5zW1Vbbi5oYXZlKytdXT03JmQsZD4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tVW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsUz17Yml0czpuLmxlbmJpdHN9LF89UCgwLG4ubGVucywwLDE5LG4ubGVuY29kZSwwLG4ud29yayxTKSxuLmxlbmJpdHM9Uy5iaXRzLF8pe2UubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLG4ubW9kZT0zMDticmVha31uLmhhdmU9MCxuLm1vZGU9MTk7Y2FzZSAxOTpmb3IoO24uaGF2ZTxuLm5sZW4rbi5uZGlzdDspe2Zvcig7Zz0oQz1uLmxlbmNvZGVbZCYoMTw8bi5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdz02NTUzNSZDLCEoKHA9Qz4+PjI0KTw9dSk7KXtpZigwPT09cylicmVhayBlO3MtLSxkKz1yW2ErK108PHUsdSs9OH1pZih3PDE2KWQ+Pj49cCx1LT1wLG4ubGVuc1tuLmhhdmUrK109dztlbHNle2lmKDE2PT09dyl7Zm9yKEU9cCsyO3U8RTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKGQ+Pj49cCx1LT1wLDA9PT1uLmhhdmUpe2UubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9MzA7YnJlYWt9eD1uLmxlbnNbbi5oYXZlLTFdLGg9MysoMyZkKSxkPj4+PTIsdS09Mn1lbHNlIGlmKDE3PT09dyl7Zm9yKEU9cCszO3U8RTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fXg9MCxoPTMrKDcmKGQ+Pj49cCkpLGQ+Pj49Myx1PXUtcC0zfWVsc2V7Zm9yKEU9cCs3O3U8RTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fXg9MCxoPTExKygxMjcmKGQ+Pj49cCkpLGQ+Pj49Nyx1PXUtcC03fWlmKG4uaGF2ZStoPm4ubmxlbituLm5kaXN0KXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPTMwO2JyZWFrfWZvcig7aC0tOyluLmxlbnNbbi5oYXZlKytdPXh9fWlmKDMwPT09bi5tb2RlKWJyZWFrO2lmKDA9PT1uLmxlbnNbMjU2XSl7ZS5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPTMwO2JyZWFrfWlmKG4ubGVuYml0cz05LFM9e2JpdHM6bi5sZW5iaXRzfSxfPVAoMSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLFMpLG4ubGVuYml0cz1TLmJpdHMsXyl7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPTMwO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixTPXtiaXRzOm4uZGlzdGJpdHN9LF89UCgyLG4ubGVucyxuLm5sZW4sbi5uZGlzdCxuLmRpc3Rjb2RlLDAsbi53b3JrLFMpLG4uZGlzdGJpdHM9Uy5iaXRzLF8pe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLG4ubW9kZT0zMDticmVha31pZihuLm1vZGU9MjAsNj09PXQpYnJlYWsgZTtjYXNlIDIwOm4ubW9kZT0yMTtjYXNlIDIxOmlmKDY8PXMmJjI1ODw9bCl7ZS5uZXh0X291dD1pLGUuYXZhaWxfb3V0PWwsZS5uZXh0X2luPWEsZS5hdmFpbF9pbj1zLG4uaG9sZD1kLG4uYml0cz11LEEoZSxmKSxpPWUubmV4dF9vdXQsbz1lLm91dHB1dCxsPWUuYXZhaWxfb3V0LGE9ZS5uZXh0X2luLHI9ZS5pbnB1dCxzPWUuYXZhaWxfaW4sZD1uLmhvbGQsdT1uLmJpdHMsMTI9PT1uLm1vZGUmJihuLmJhY2s9LTEpO2JyZWFrfWZvcihuLmJhY2s9MDtnPShDPW4ubGVuY29kZVtkJigxPDxuLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx3PTY1NTM1JkMsISgocD1DPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKGcmJjA9PSgyNDAmZykpe2Zvcih2PXAseT1nLGs9dztnPShDPW4ubGVuY29kZVtrKygoZCYoMTw8dit5KS0xKT4+dildKT4+PjE2JjI1NSx3PTY1NTM1JkMsISh2KyhwPUM+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9ZD4+Pj12LHUtPXYsbi5iYWNrKz12fWlmKGQ+Pj49cCx1LT1wLG4uYmFjays9cCxuLmxlbmd0aD13LDA9PT1nKXtuLm1vZGU9MjY7YnJlYWt9aWYoMzImZyl7bi5iYWNrPS0xLG4ubW9kZT0xMjticmVha31pZig2NCZnKXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9MzA7YnJlYWt9bi5leHRyYT0xNSZnLG4ubW9kZT0yMjtjYXNlIDIyOmlmKG4uZXh0cmEpe2ZvcihFPW4uZXh0cmE7dTxFOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9bi5sZW5ndGgrPWQmKDE8PG4uZXh0cmEpLTEsZD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT0yMztjYXNlIDIzOmZvcig7Zz0oQz1uLmRpc3Rjb2RlW2QmKDE8PG4uZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx3PTY1NTM1JkMsISgocD1DPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWlmKDA9PSgyNDAmZykpe2Zvcih2PXAseT1nLGs9dztnPShDPW4uZGlzdGNvZGVbaysoKGQmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsdz02NTUzNSZDLCEodisocD1DPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIGU7cy0tLGQrPXJbYSsrXTw8dSx1Kz04fWQ+Pj49dix1LT12LG4uYmFjays9dn1pZihkPj4+PXAsdS09cCxuLmJhY2srPXAsNjQmZyl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsbi5tb2RlPTMwO2JyZWFrfW4ub2Zmc2V0PXcsbi5leHRyYT0xNSZnLG4ubW9kZT0yNDtjYXNlIDI0OmlmKG4uZXh0cmEpe2ZvcihFPW4uZXh0cmE7dTxFOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9bi5vZmZzZXQrPWQmKDE8PG4uZXh0cmEpLTEsZD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfWlmKG4ub2Zmc2V0Pm4uZG1heCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9MzA7YnJlYWt9bi5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PWwpYnJlYWsgZTtpZihuLm9mZnNldD4oaD1mLWwpKXtpZigoaD1uLm9mZnNldC1oKT5uLndoYXZlJiZuLnNhbmUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPTMwO2JyZWFrfWI9aD5uLnduZXh0PyhoLT1uLnduZXh0LG4ud3NpemUtaCk6bi53bmV4dC1oLGg+bi5sZW5ndGgmJihoPW4ubGVuZ3RoKSxtPW4ud2luZG93fWVsc2UgbT1vLGI9aS1uLm9mZnNldCxoPW4ubGVuZ3RoO2ZvcihsLT1oPWw8aD9sOmgsbi5sZW5ndGgtPWg7b1tpKytdPW1bYisrXSwtLWg7KTswPT09bi5sZW5ndGgmJihuLm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWwpYnJlYWsgZTtvW2krK109bi5sZW5ndGgsbC0tLG4ubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKG4ud3JhcCl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZHw9clthKytdPDx1LHUrPTh9aWYoZi09bCxlLnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLGYmJihlLmFkbGVyPW4uY2hlY2s9KG4uZmxhZ3M/STpPKShuLmNoZWNrLG8sZixpLWYpKSxmPWwsKG4uZmxhZ3M/ZDpGKGQpKSE9PW4uY2hlY2spe2UubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsbi5tb2RlPTMwO2JyZWFrfXU9ZD0wfW4ubW9kZT0yODtjYXNlIDI4OmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgZTtzLS0sZCs9clthKytdPDx1LHUrPTh9aWYoZCE9PSg0Mjk0OTY3Mjk1Jm4udG90YWwpKXtlLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPTMwO2JyZWFrfXU9ZD0wfW4ubW9kZT0yOTtjYXNlIDI5Ol89MTticmVhayBlO2Nhc2UgMzA6Xz0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gTn1yZXR1cm4gZS5uZXh0X291dD1pLGUuYXZhaWxfb3V0PWwsZS5uZXh0X2luPWEsZS5hdmFpbF9pbj1zLG4uaG9sZD1kLG4uYml0cz11LChuLndzaXplfHxmIT09ZS5hdmFpbF9vdXQmJm4ubW9kZTwzMCYmKG4ubW9kZTwyN3x8NCE9PXQpKSYmTShlLGUub3V0cHV0LGUubmV4dF9vdXQsZi1lLmF2YWlsX291dCk/KG4ubW9kZT0zMSwtNCk6KGMtPWUuYXZhaWxfaW4sZi09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9YyxlLnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLG4ud3JhcCYmZiYmKGUuYWRsZXI9bi5jaGVjaz0obi5mbGFncz9JOk8pKG4uY2hlY2ssbyxmLGUubmV4dF9vdXQtZikpLGUuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKygxMj09PW4ubW9kZT8xMjg6MCkrKDIwPT09bi5tb2RlfHwxNT09PW4ubW9kZT8yNTY6MCksKDA9PWMmJjA9PT1mfHw0PT09dCkmJl89PT1EPy01Ol8pfSxuLmluZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KCh0PWUuc3RhdGUpLndpbmRvdyYmKHQud2luZG93PW51bGwpLGUuc3RhdGU9bnVsbCxEKTpOfSxuLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5zdGF0ZSYmMCE9KDImKGU9ZS5zdGF0ZSkud3JhcCk/KChlLmhlYWQ9dCkuZG9uZT0hMSxEKTpOfSxuLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10Lmxlbmd0aDtyZXR1cm4hZXx8IWUuc3RhdGV8fDAhPT0obj1lLnN0YXRlKS53cmFwJiYxMSE9PW4ubW9kZT9OOjExPT09bi5tb2RlJiZPKDEsdCxyLDApIT09bi5jaGVjaz8tMzpNKGUsdCxyLHIpPyhuLm1vZGU9MzEsLTQpOihuLmhhdmVkaWN0PTEsRCl9LG4uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSwiemxpYi9jb25zdGFudHMuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSwiemxpYi9tZXNzYWdlcy5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0sInpsaWIvenN0cmVhbS5qcyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0sInpsaWIvZ3poZWFkZXIuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSwiemxpYi9hZGxlcjMyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG89NjU1MzUmZXwwLGE9ZT4+PjE2JjY1NTM1fDAsaT0wOzAhPT1uOyl7Zm9yKG4tPWk9MmUzPG4/MmUzOm47YT1hKyhvPW8rdFtyKytdfDApfDAsLS1pOyk7byU9NjU1MjEsYSU9NjU1MjF9cmV0dXJuIG98YTw8MTZ8MH19LCJ6bGliL2NyYzMyLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PDI1Njt0Kyspe2Zvcih2YXIgbj10LHI9MDtyPDg7cisrKW49MSZuPzM5ODgyOTIzODRebj4+PjE6bj4+PjE7ZVt0XT1ufXJldHVybiBlfSgpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1zLGE9cituO2VePS0xO2Zvcih2YXIgaT1yO2k8YTtpKyspZT1lPj4+OF5vWzI1NSYoZV50W2ldKV07cmV0dXJuLTFeZX19LCJ6bGliL2luZmZhc3QuanMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGEsaSxzLGw9ZS5zdGF0ZSxkPWUubmV4dF9pbix1PWUuaW5wdXQsYz1kKyhlLmF2YWlsX2luLTUpLGY9ZS5uZXh0X291dCxoPWUub3V0cHV0LGI9Zi0odC1lLmF2YWlsX291dCksbT1mKyhlLmF2YWlsX291dC0yNTcpLHA9bC5kbWF4LGc9bC53c2l6ZSx3PWwud2hhdmUsdj1sLnduZXh0LHk9bC53aW5kb3csaz1sLmhvbGQseD1sLmJpdHMsXz1sLmxlbmNvZGUsUz1sLmRpc3Rjb2RlLEU9KDE8PGwubGVuYml0cyktMSxDPSgxPDxsLmRpc3RiaXRzKS0xO2U6ZG97Zm9yKHg8MTUmJihrKz11W2QrK108PHgseCs9OCxrKz11W2QrK108PHgseCs9OCksbj1fW2smRV07Oyl7aWYoaz4+Pj1yPW4+Pj4yNCx4LT1yLDA9PShyPW4+Pj4xNiYyNTUpKWhbZisrXT02NTUzNSZuO2Vsc2V7aWYoISgxNiZyKSl7aWYoMD09KDY0JnIpKXtuPV9bKDY1NTM1Jm4pKyhrJigxPDxyKS0xKV07Y29udGludWV9aWYoMzImcil7bC5tb2RlPTEyO2JyZWFrIGV9ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsbC5tb2RlPTMwO2JyZWFrIGV9Zm9yKG89NjU1MzUmbiwociY9MTUpJiYoeDxyJiYoays9dVtkKytdPDx4LHgrPTgpLG8rPWsmKDE8PHIpLTEsaz4+Pj1yLHgtPXIpLHg8MTUmJihrKz11W2QrK108PHgseCs9OCxrKz11W2QrK108PHgseCs9OCksbj1TW2smQ107Oyl7aWYoaz4+Pj1yPW4+Pj4yNCx4LT1yLCEoMTYmKHI9bj4+PjE2JjI1NSkpKXtpZigwPT0oNjQmcikpe249U1soNjU1MzUmbikrKGsmKDE8PHIpLTEpXTtjb250aW51ZX1lLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixsLm1vZGU9MzA7YnJlYWsgZX1pZihhPTY1NTM1Jm4seDwociY9MTUpJiYoays9dVtkKytdPDx4LCh4Kz04KTxyJiYoays9dVtkKytdPDx4LHgrPTgpKSxwPChhKz1rJigxPDxyKS0xKSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixsLm1vZGU9MzA7YnJlYWsgZX1pZihrPj4+PXIseC09ciwocj1mLWIpPGEpe2lmKHc8KHI9YS1yKSYmbC5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGwubW9kZT0zMDticmVhayBlfWlmKHM9eSwoaT0wKT09PXYpe2lmKGkrPWctcixyPG8pe2ZvcihvLT1yO2hbZisrXT15W2krK10sLS1yOyk7aT1mLWEscz1ofX1lbHNlIGlmKHY8cil7aWYoaSs9Zyt2LXIsKHItPXYpPG8pe2ZvcihvLT1yO2hbZisrXT15W2krK10sLS1yOyk7aWYoaT0wLHY8byl7Zm9yKG8tPXI9djtoW2YrK109eVtpKytdLC0tcjspO2k9Zi1hLHM9aH19fWVsc2UgaWYoaSs9di1yLHI8byl7Zm9yKG8tPXI7aFtmKytdPXlbaSsrXSwtLXI7KTtpPWYtYSxzPWh9Zm9yKDsyPG87KWhbZisrXT1zW2krK10saFtmKytdPXNbaSsrXSxoW2YrK109c1tpKytdLG8tPTM7byYmKGhbZisrXT1zW2krK10sMTxvJiYoaFtmKytdPXNbaSsrXSkpfWVsc2V7Zm9yKGk9Zi1hO2hbZisrXT1oW2krK10saFtmKytdPWhbaSsrXSxoW2YrK109aFtpKytdLDI8KG8tPTMpOyk7byYmKGhbZisrXT1oW2krK10sMTxvJiYoaFtmKytdPWhbaSsrXSkpfWJyZWFrfX1icmVha319d2hpbGUoZDxjJiZmPG0pO2smPSgxPDwoeC09KG89eD4+Myk8PDMpKS0xLGUubmV4dF9pbj1kLT1vLGUubmV4dF9vdXQ9ZixlLmF2YWlsX2luPWQ8Yz9jLWQrNTo1LShkLWMpLGUuYXZhaWxfb3V0PWY8bT9tLWYrMjU3OjI1Ny0oZi1tKSxsLmhvbGQ9ayxsLmJpdHM9eH19LCJ6bGliL2luZnRyZWVzLmpzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBBPWUoIi4uL3V0aWxzL2NvbW1vbiIpLFA9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxEPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sTj1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sej1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyLG8sYSxpLHMpe2Zvcih2YXIgbCxkLHUsYyxmLGgsYixtLHAsZz1zLmJpdHMsdz0wLHY9MCx5PTAsaz0wLHg9MCxfPTAsUz0wLEU9MCxDPTAsQj0wLFU9bnVsbCxUPTAsUj1uZXcgQS5CdWYxNigxNiksTD1uZXcgQS5CdWYxNigxNiksTz1udWxsLEk9MCx3PTA7dzw9MTU7dysrKVJbd109MDtmb3Iodj0wO3Y8cjt2KyspUlt0W24rdl1dKys7Zm9yKHg9ZyxrPTE1OzE8PWsmJjA9PT1SW2tdO2stLSk7aWYoazx4JiYoeD1rKSwwPT09aylvW2ErK109MjA5NzE1MjAsb1thKytdPTIwOTcxNTIwLHMuYml0cz0xO2Vsc2V7Zm9yKHk9MTt5PGsmJjA9PT1SW3ldO3krKyk7Zm9yKHg8eSYmKHg9eSksdz1FPTE7dzw9MTU7dysrKWlmKChFPShFPDw9MSktUlt3XSk8MClyZXR1cm4tMTtpZigwPEUmJigwPT09ZXx8MSE9PWspKXJldHVybi0xO2ZvcihMWzFdPTAsdz0xO3c8MTU7dysrKUxbdysxXT1MW3ddK1Jbd107Zm9yKHY9MDt2PHI7disrKTAhPT10W24rdl0mJihpW0xbdFtuK3ZdXSsrXT12KTtpZihoPTA9PT1lPyhVPU89aSwxOSk6MT09PWU/KFU9UCxULT0yNTcsTz1ELEktPTI1NywyNTYpOihVPU4sTz16LC0xKSx3PXksZj1hLFM9dj1CPTAsdT0tMSxjPShDPTE8PChfPXgpKS0xLDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2Zvcig7Oyl7Zm9yKHA9aVt2XTxoPyhtPTAsaVt2XSk6aVt2XT5oPyhtPU9bSStpW3ZdXSxVW1QraVt2XV0pOihtPTk2LDApLGw9MTw8KGI9dy1TKSx5PWQ9MTw8XztvW2YrKEI+PlMpKyhkLT1sKV09Yjw8MjR8bTw8MTZ8cHwwLDAhPT1kOyk7Zm9yKGw9MTw8dy0xO0ImbDspbD4+PTE7aWYoQj0wIT09bD8oQiZsLTEpK2w6MCx2KyssMD09LS1SW3ddKXtpZih3PT09aylicmVhazt3PXRbbitpW3ZdXX1pZih4PHcmJihCJmMpIT09dSl7Zm9yKGYrPXksRT0xPDwoXz13LShTPTA9PT1TP3g6UykpO18rUzxrJiYhKChFLT1SW18rU10pPD0wKTspXysrLEU8PD0xO2lmKEMrPTE8PF8sMT09PWUmJjg1MjxDfHwyPT09ZSYmNTkyPEMpcmV0dXJuIDE7b1t1PUImY109eDw8MjR8Xzw8MTZ8Zi1hfDB9fTAhPT1CJiYob1tmK0JdPXctUzw8MjR8NjQ8PDE2fDApLHMuYml0cz14fXJldHVybiAwfX19O2Zvcih0IGluIG4pblt0XS5mb2xkZXI9dC5zdWJzdHJpbmcoMCx0Lmxhc3RJbmRleE9mKCIvIikrMSk7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXQubWF0Y2goL15cLy8pP251bGw6ZT90Lm1hdGNoKC9eXC5cLj9cLy8pP28oZS5mb2xkZXIrdCk6YShlLHQpOm8odCk7aWYobilyZXR1cm4gbi5leHBvcnRzfHwobi5wYXJlbnQ9ZSxuKHIuYmluZChudWxsLG4pLG4sbi5leHBvcnRzPXt9KSksbi5leHBvcnRzO3Rocm93Im1vZHVsZSBub3QgZm91bmQ6ICIrdH12YXIgbz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4oZT1lLnNwbGl0KCIvIikuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIi4uIj09ZT90LnBvcCgpOiIuIj09ZXx8IiI9PWV8fHQucHVzaChlKX0pP3Quam9pbigiLyIpOm51bGwpP25bZV18fG5bZSsiLmpzIl18fG5bZSsiL2luZGV4LmpzIl06bnVsbH0sYT1mdW5jdGlvbihlLHQpe3JldHVybiBlP28oZS5mb2xkZXIrIm5vZGVfbW9kdWxlcy8iK3QpfHxhKGUucGFyZW50LHQpOm51bGx9O3JldHVybiByKG51bGwsZSl9LGRlY29tcHJlc3M6ZnVuY3Rpb24oZSl7dGhpcy5leHBvcnRzfHwodGhpcy5leHBvcnRzPXRoaXMucmVxdWlyZSgiaW5mbGF0ZS5qcyIpKTt0cnl7cmV0dXJuIHRoaXMuZXhwb3J0cy5pbmZsYXRlKGUpfWNhdGNoKGUpe319LGhhc1VuaXR5TWFya2VyOmZ1bmN0aW9uKGUpe3ZhciB0PTEwLG49IlVuaXR5V2ViIENvbXByZXNzZWQgQ29udGVudCAoZ3ppcCkiO2lmKHQ+ZS5sZW5ndGh8fDMxIT1lWzBdfHwxMzkhPWVbMV0pcmV0dXJuITE7dmFyIHI9ZVszXTtpZig0JnIpe2lmKHQrMj5lLmxlbmd0aClyZXR1cm4hMTtpZigodCs9MitlW3RdKyhlW3QrMV08PDgpKT5lLmxlbmd0aClyZXR1cm4hMX1pZig4JnIpe2Zvcig7dDxlLmxlbmd0aCYmZVt0XTspdCsrO2lmKHQrMT5lLmxlbmd0aClyZXR1cm4hMTt0Kyt9cmV0dXJuIDE2JnImJlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KHQsdCtuLmxlbmd0aCsxKSk9PW4rIlwwIn19fTtmdW5jdGlvbiBUKG4pe3gobik7dmFyIGU9Yy5jYWNoZUNvbnRyb2woY1tuXSksdD1jLmNvbXBhbnlOYW1lJiZjLnByb2R1Y3ROYW1lP2MuY2FjaGVkRmV0Y2g6Yy5mZXRjaFdpdGhQcm9ncmVzcyxyPWNbbl0scj0vZmlsZTpcL1wvLy5leGVjKHIpPyJzYW1lLW9yaWdpbiI6dm9pZCAwO3JldHVybiB0KGNbbl0se21ldGhvZDoiR0VUIixjb21wYW55TmFtZTpjLmNvbXBhbnlOYW1lLHByb2R1Y3ROYW1lOmMucHJvZHVjdE5hbWUsY29udHJvbDplLG1vZGU6cixvblByb2dyZXNzOmZ1bmN0aW9uKGUpe3gobixlKX19KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBpPWUucGFyc2VkQm9keSxzPWNbbl0sbmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXt0cnl7Zm9yKHZhciBuIGluIFUpe3ZhciByLG8sYTtpZihVW25dLmhhc1VuaXR5TWFya2VyKGkpKXJldHVybiBzJiZjb25zb2xlLmxvZygnWW91IGNhbiByZWR1Y2Ugc3RhcnR1cCB0aW1lIGlmIHlvdSBjb25maWd1cmUgeW91ciB3ZWIgc2VydmVyIHRvIGFkZCAiQ29udGVudC1FbmNvZGluZzogJytuKyciIHJlc3BvbnNlIGhlYWRlciB3aGVuIHNlcnZpbmcgIicrcysnIiBmaWxlLicpLChyPVVbbl0pLndvcmtlcnx8KG89VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbInRoaXMucmVxdWlyZSA9ICIsci5yZXF1aXJlLnRvU3RyaW5nKCksIjsgdGhpcy5kZWNvbXByZXNzID0gIixyLmRlY29tcHJlc3MudG9TdHJpbmcoKSwiOyB0aGlzLm9ubWVzc2FnZSA9ICIsZnVuY3Rpb24oZSl7ZT17aWQ6ZS5kYXRhLmlkLGRlY29tcHJlc3NlZDp0aGlzLmRlY29tcHJlc3MoZS5kYXRhLmNvbXByZXNzZWQpfTtwb3N0TWVzc2FnZShlLGUuZGVjb21wcmVzc2VkP1tlLmRlY29tcHJlc3NlZC5idWZmZXJdOltdKX0udG9TdHJpbmcoKSwiOyBwb3N0TWVzc2FnZSh7IHJlYWR5OiB0cnVlIH0pOyJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0pKSxyLndvcmtlcj1uZXcgV29ya2VyKG8pLHIud29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtlLmRhdGEucmVhZHk/VVJMLnJldm9rZU9iamVjdFVSTChvKToodGhpcy5jYWxsYmFja3NbZS5kYXRhLmlkXShlLmRhdGEuZGVjb21wcmVzc2VkKSxkZWxldGUgdGhpcy5jYWxsYmFja3NbZS5kYXRhLmlkXSl9LHIud29ya2VyLmNhbGxiYWNrcz17fSxyLndvcmtlci5uZXh0Q2FsbGJhY2tJZD0wKSxhPXIud29ya2VyLm5leHRDYWxsYmFja0lkKyssci53b3JrZXIuY2FsbGJhY2tzW2FdPWUsdm9pZCByLndvcmtlci5wb3N0TWVzc2FnZSh7aWQ6YSxjb21wcmVzc2VkOml9LFtpLmJ1ZmZlcl0pfWUoaSl9Y2F0Y2goZSl7dChlKX19KTt2YXIgaSxzfSkuY2F0Y2goZnVuY3Rpb24oZSl7dmFyIHQ9IkZhaWxlZCB0byBkb3dubG9hZCBmaWxlICIrY1tuXTsiZmlsZToiPT1sb2NhdGlvbi5wcm90b2NvbD9kKHQrIi4gTG9hZGluZyB3ZWIgcGFnZXMgdmlhIGEgZmlsZTovLyBVUkwgd2l0aG91dCBhIHdlYiBzZXJ2ZXIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuIFBsZWFzZSB1c2UgYSBsb2NhbCBkZXZlbG9wbWVudCB3ZWIgc2VydmVyIHRvIGhvc3QgVW5pdHkgY29udGVudCwgb3IgdXNlIHRoZSBVbml0eSBCdWlsZCBhbmQgUnVuIG9wdGlvbi4iLCJlcnJvciIpOmNvbnNvbGUuZXJyb3IodCl9KX1mdW5jdGlvbiBSKCl7UHJvbWlzZS5hbGwoW1QoImZyYW1ld29ya1VybCIpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZV0se3R5cGU6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSkpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLGUpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2kuc3JjPXMsaS5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHVuaXR5RnJhbWV3b3JrfHwhdW5pdHlGcmFtZXdvcmspe3ZhciBlLHQ9W1siYnIiLCJiciJdLFsiZ3oiLCJnemlwIl1dO2ZvcihlIGluIHQpe3ZhciBuLHI9dFtlXTtpZihjLmZyYW1ld29ya1VybC5lbmRzV2l0aCgiLiIrclswXSkpcmV0dXJuIG49IlVuYWJsZSB0byBwYXJzZSAiK2MuZnJhbWV3b3JrVXJsKyIhIiwiZmlsZToiPT1sb2NhdGlvbi5wcm90b2NvbD92b2lkIGQobisiIExvYWRpbmcgcHJlLWNvbXByZXNzZWQgKGJyb3RsaSBvciBnemlwKSBjb250ZW50IHZpYSBhIGZpbGU6Ly8gVVJMIHdpdGhvdXQgYSB3ZWIgc2VydmVyIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiBQbGVhc2UgdXNlIGEgbG9jYWwgZGV2ZWxvcG1lbnQgd2ViIHNlcnZlciB0byBob3N0IGNvbXByZXNzZWQgVW5pdHkgY29udGVudCwgb3IgdXNlIHRoZSBVbml0eSBCdWlsZCBhbmQgUnVuIG9wdGlvbi4iLCJlcnJvciIpOihuKz0nIFRoaXMgY2FuIGhhcHBlbiBpZiBidWlsZCBjb21wcmVzc2lvbiB3YXMgZW5hYmxlZCBidXQgd2ViIHNlcnZlciBob3N0aW5nIHRoZSBjb250ZW50IHdhcyBtaXNjb25maWd1cmVkIHRvIG5vdCBzZXJ2ZSB0aGUgZmlsZSB3aXRoIEhUVFAgUmVzcG9uc2UgSGVhZGVyICJDb250ZW50LUVuY29kaW5nOiAnK3JbMV0rJyIgcHJlc2VudC4gQ2hlY2sgYnJvd3NlciBDb25zb2xlIGFuZCBEZXZ0b29scyBOZXR3b3JrIHRhYiB0byBkZWJ1Zy4nLCJiciI9PXJbMF0mJiJodHRwOiI9PWxvY2F0aW9uLnByb3RvY29sJiYocj0tMSE9WyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKGxvY2F0aW9uLmhvc3RuYW1lKT8iIjoiTWlncmF0ZSB5b3VyIHNlcnZlciB0byB1c2UgSFRUUFMuIixuPS9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPyJVbmFibGUgdG8gcGFyc2UgIitjLmZyYW1ld29ya1VybCsnITxicj5JZiB1c2luZyBjdXN0b20gd2ViIHNlcnZlciwgdmVyaWZ5IHRoYXQgd2ViIHNlcnZlciBpcyBzZW5kaW5nIC5iciBmaWxlcyB3aXRoIEhUVFAgUmVzcG9uc2UgSGVhZGVyICJDb250ZW50LUVuY29kaW5nOiBiciIuIEJyb3RsaSBjb21wcmVzc2lvbiBtYXkgbm90IGJlIHN1cHBvcnRlZCBpbiBGaXJlZm94IG92ZXIgSFRUUCBjb25uZWN0aW9ucy4gJytyKycgU2VlIDxhIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA2NzUiPmh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA2NzU8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLic6IlVuYWJsZSB0byBwYXJzZSAiK2MuZnJhbWV3b3JrVXJsKychPGJyPklmIHVzaW5nIGN1c3RvbSB3ZWIgc2VydmVyLCB2ZXJpZnkgdGhhdCB3ZWIgc2VydmVyIGlzIHNlbmRpbmcgLmJyIGZpbGVzIHdpdGggSFRUUCBSZXNwb25zZSBIZWFkZXIgIkNvbnRlbnQtRW5jb2Rpbmc6IGJyIi4gQnJvdGxpIGNvbXByZXNzaW9uIG1heSBub3QgYmUgc3VwcG9ydGVkIG92ZXIgSFRUUCBjb25uZWN0aW9ucy4gTWlncmF0ZSB5b3VyIHNlcnZlciB0byB1c2UgSFRUUFMuJyksdm9pZCBkKG4sImVycm9yIikpfWQoIlVuYWJsZSB0byBwYXJzZSAiK2MuZnJhbWV3b3JrVXJsKyIhIFRoZSBmaWxlIGlzIGNvcnJ1cHQsIG9yIGNvbXByZXNzaW9uIHdhcyBtaXNjb25maWd1cmVkPyAoY2hlY2sgQ29udGVudC1FbmNvZGluZyBIVFRQIFJlc3BvbnNlIEhlYWRlciBvbiB3ZWIgc2VydmVyKSIsImVycm9yIil9dmFyIG89dW5pdHlGcmFtZXdvcms7dW5pdHlGcmFtZXdvcms9bnVsbCxpLm9ubG9hZD1udWxsLFVSTC5yZXZva2VPYmplY3RVUkwocyksYShvKX0saS5vbmVycm9yPWZ1bmN0aW9uKGUpe2QoIlVuYWJsZSB0byBsb2FkIGZpbGUgIitjLmZyYW1ld29ya1VybCsiISBDaGVjayB0aGF0IHRoZSBmaWxlIGV4aXN0cyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gKGFsc28gY2hlY2sgYnJvd3NlciBDb25zb2xlIGFuZCBEZXZ0b29scyBOZXR3b3JrIHRhYiB0byBkZWJ1ZykiLCJlcnJvciIpfSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGMuZGVpbml0aWFsaXplcnMucHVzaChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaSl9KX0pfSksVCgiY29kZVVybCIpXSkudGhlbihmdW5jdGlvbihlKXtjLndhc21CaW5hcnk9ZVsxXSxlWzBdKGMpfSk7dmFyIGU9VCgiZGF0YVVybCIpO2MucHJlUnVuLnB1c2goZnVuY3Rpb24oKXtjLmFkZFJ1bkRlcGVuZGVuY3koImRhdGFVcmwiKSxlLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLG49MCxyPSJVbml0eVdlYkRhdGExLjBcMCI7aWYoIVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KG4sbityLmxlbmd0aCkpPT1yKXRocm93InVua25vd24gZGF0YSBmb3JtYXQiO3ZhciBvPXQuZ2V0VWludDMyKG4rPXIubGVuZ3RoLCEwKTtmb3Iobis9NDtuPG87KXt2YXIgYT10LmdldFVpbnQzMihuLCEwKSxpPShuKz00LHQuZ2V0VWludDMyKG4sITApKSxzPShuKz00LHQuZ2V0VWludDMyKG4sITApKSxsPShuKz00LFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KG4sbitzKSkpO24rPXM7Zm9yKHZhciBkPTAsdT1sLmluZGV4T2YoIi8iLGQpKzE7MDx1O2Q9dSx1PWwuaW5kZXhPZigiLyIsZCkrMSljLkZTX2NyZWF0ZVBhdGgobC5zdWJzdHJpbmcoMCxkKSxsLnN1YnN0cmluZyhkLHUtMSksITAsITApO2MuRlNfY3JlYXRlRGF0YUZpbGUobCxudWxsLGUuc3ViYXJyYXkoYSxhK2kpLCEwLCEwLCEwKX1jLnJlbW92ZVJ1bkRlcGVuZGVuY3koImRhdGFVcmwiKX0pfSl9cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7Yy5TeXN0ZW1JbmZvLmhhc1dlYkdMP2MuU3lzdGVtSW5mby5oYXNXYXNtPygxPT1jLlN5c3RlbUluZm8uaGFzV2ViR0wmJmMucHJpbnQoJ1dhcm5pbmc6IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0ICJXZWJHTCAyIiBHcmFwaGljcyBBUEksIHN3aXRjaGluZyB0byAiV2ViR0wgMSInKSxjLnN0YXJ0dXBFcnJvckhhbmRsZXI9dCxsKDApLGMucG9zdFJ1bi5wdXNoKGZ1bmN0aW9uKCl7bCgxKSxkZWxldGUgYy5zdGFydHVwRXJyb3JIYW5kbGVyLGUoeSl9KSxSKCkpOnQoIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkFzc2VtYmx5LiIpOnQoIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkdMLiIpfSl9"></script>
      <script src="blob:https://n-hrdgeeo3ufnnzsfmokee2p453y4rzmsm5mbunqa-0lu-script.googleusercontent.com/993d64ae-63eb-4d3f-a646-2673b2ddbef0"></script>
    
      <script async src="https://public.codepenassets.com/embed/index.js"></script>
    
    </body>
    </html>

    JavaScript:

    This code creates a simple 2D endless runner game using the HTML canvas. The Player can jump to avoid Obstacles and collect PowerUps that give temporary effects like shield, high jump, slow motion, or score multiplier. The Game class manages everything — physics (gravity/jump), obstacle and power-up generation, collision detection, scoring, background animation, and difficulty progression. When the player hits an obstacle without a shield, the game ends, showing “Game Over,” and the score is compared with the saved high score. Pressing Space makes the player jump or restarts the game after losing.

    // --- Game Setup ---
    const canvas = document.getElementById("gameCanvas");
    const ctx = canvas.getContext("2d");
    canvas.width = 800;
    canvas.height = 400;
    
    // --- Game Classes ---
    
    class Player {
      constructor(game) {
        this.game = game;
        this.width = 30;
        this.height = 30;
        this.x = 50;
        this.y = this.game.groundLevel - this.height;
        this.color = "#4db8ff";
        this.velocityY = 0;
        this.isJumping = false;
        this.isGrounded = true;
      }
    
      draw() {
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
        // Shield visual effect
        if (this.game.shieldActive) {
          ctx.strokeStyle = "rgba(255, 255, 255, 0.7)";
          ctx.lineWidth = 4;
          ctx.beginPath();
          ctx.arc(
            this.x + this.width / 2,
            this.y + this.height / 2,
            this.width,
            0,
            2 * Math.PI
          );
          ctx.stroke();
        }
      }
    
      update() {
        // Apply gravity if not on the ground
        if (!this.isGrounded) {
          this.velocityY += this.game.physics.gravity;
        }
        this.y += this.velocityY;
    
        // Check for ground collision
        if (this.y >= this.game.groundLevel - this.height) {
          this.y = this.game.groundLevel - this.height;
          this.velocityY = 0;
          this.isGrounded = true;
          this.isJumping = false;
        }
      }
    
      jump() {
        if (this.isGrounded) {
          this.isGrounded = false;
          this.isJumping = true;
          this.velocityY = this.game.physics.jumpForce;
        }
      }
    }
    
    class Obstacle {
      constructor(game) {
        this.game = game;
        this.width = 30;
        this.height = 30;
        this.x = canvas.width;
        this.y = this.game.groundLevel - this.height;
        this.color = "#ff4d4d";
      }
    
      draw() {
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
      }
    
      update() {
        if (!this.game.timeSlowed) {
          this.x -= this.game.obstacleSpeed;
        } else {
          this.x -= this.game.obstacleSpeed / 2;
        }
      }
    }
    
    class PowerUp {
      constructor(game) {
        this.game = game;
        this.width = 20;
        this.height = 20;
        this.x = canvas.width;
        this.y = this.game.groundLevel - this.height - Math.random() * 80 - 40; // Random height
        this.duration = 5000; // 5 seconds for all power-ups
        this.type = this.getRandomType();
        this.color = this.getColorForType();
      }
    
      getRandomType() {
        const types = ["scoreMultiplier", "shield", "highJump", "slowTime"];
        return types[Math.floor(Math.random() * types.length)];
      }
    
      getColorForType() {
        switch (this.type) {
          case "scoreMultiplier":
            return "#ffd700"; // Gold
          case "shield":
            return "#00bfff"; // Deep Sky Blue
          case "highJump":
            return "#32cd32"; // Lime Green
          case "slowTime":
            return "#8a2be2"; // Blue Violet
          default:
            return "#cccccc";
        }
      }
    
      draw() {
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
      }
    
      update() {
        if (!this.game.timeSlowed) {
          this.x -= this.game.obstacleSpeed;
        } else {
          this.x -= this.game.obstacleSpeed / 2;
        }
      }
    }
    
    class Game {
      constructor() {
        this.player = new Player(this);
        this.physics = {
          gravity: 0.5,
          jumpForce: -12
        };
        this.obstacles = [];
        this.powerUps = [];
        this.obstacleSpeed = 5;
        this.obstacleInterval = 1200;
        this.powerUpInterval = 5000;
        this.lastObstacleTime = Date.now();
        this.lastPowerUpTime = Date.now();
        this.gameOver = false;
        this.score = 0;
        this.highScore = localStorage.getItem("highScore") || 0;
        this.scoreMultiplier = 1;
        this.groundLevel = canvas.height - 30;
        this.lastUpdateTime = 0;
        this.parallaxBackground = { x: 0, y: 0, speed: 1 };
        this.shieldActive = false;
        this.timeSlowed = false;
      }
    
      drawParallaxBackground() {
        ctx.fillStyle = "#6b5e54";
        ctx.fillRect(
          0,
          this.groundLevel,
          canvas.width,
          canvas.height - this.groundLevel
        );
        ctx.fillStyle = "#87ceeb";
        ctx.fillRect(0, 0, canvas.width, this.groundLevel);
    
        ctx.fillStyle = "#cccccc";
        for (let i = 0; i < 50; i++) {
          const starX = (i * 50 + this.parallaxBackground.x) % canvas.width;
          ctx.beginPath();
          ctx.arc(starX, (i * 20) % this.groundLevel, 1, 0, 2 * Math.PI);
          ctx.fill();
        }
        this.parallaxBackground.x -= this.parallaxBackground.speed;
      }
    
      drawUI() {
        ctx.fillStyle = "white";
        ctx.font = "20px Arial";
        ctx.textAlign = "left";
        ctx.fillText(`Score: ${this.score}`, 10, 25);
        ctx.textAlign = "right";
        ctx.fillText(`High Score: ${this.highScore}`, canvas.width - 10, 25);
    
        ctx.textAlign = "center";
        if (this.scoreMultiplier > 1) {
          ctx.fillStyle = "#ffd700";
          ctx.fillText(
            `Multiplier: x${this.scoreMultiplier}`,
            canvas.width / 2,
            25
          );
        }
        if (this.shieldActive) {
          ctx.fillStyle = "#00bfff";
          ctx.fillText("Shield Active!", canvas.width / 2, 50);
        }
        if (this.timeSlowed) {
          ctx.fillStyle = "#8a2be2";
          ctx.fillText("Time Slowed!", canvas.width / 2, 75);
        }
      }
    
      generateObstacle() {
        const currentTime = Date.now();
        const interval = this.timeSlowed
          ? this.obstacleInterval * 2
          : this.obstacleInterval;
        if (currentTime - this.lastObstacleTime > interval) {
          this.obstacles.push(new Obstacle(this));
          this.lastObstacleTime = currentTime;
        }
      }
    
      generatePowerUp() {
        const currentTime = Date.now();
        const interval = this.timeSlowed
          ? this.powerUpInterval * 2
          : this.powerUpInterval;
        if (currentTime - this.lastPowerUpTime > interval) {
          this.powerUps.push(new PowerUp(this));
          this.lastPowerUpTime = currentTime;
        }
      }
    
      checkCollision() {
        // Obstacle collision
        this.obstacles.forEach((obstacle, index) => {
          if (
            this.player.x < obstacle.x + obstacle.width &&
            this.player.x + this.player.width > obstacle.x &&
            this.player.y < obstacle.y + obstacle.height &&
            this.player.y + this.player.height > obstacle.y
          ) {
            if (this.shieldActive) {
              this.shieldActive = false;
              this.obstacles.splice(index, 1);
            } else {
              this.endGame();
            }
          }
        });
    
        // Power-up collision
        this.powerUps.forEach((powerUp, index) => {
          if (
            this.player.x < powerUp.x + powerUp.width &&
            this.player.x + this.player.width > powerUp.x &&
            this.player.y < powerUp.y + powerUp.height &&
            this.player.y + this.player.height > powerUp.y
          ) {
            this.powerUps.splice(index, 1);
            this.activatePowerUp(powerUp);
          }
        });
      }
    
      activatePowerUp(powerUp) {
        switch (powerUp.type) {
          case "scoreMultiplier":
            this.scoreMultiplier = 2;
            setTimeout(() => {
              this.scoreMultiplier = 1;
            }, powerUp.duration);
            break;
          case "shield":
            this.shieldActive = true;
            setTimeout(() => {
              this.shieldActive = false;
            }, powerUp.duration);
            break;
          case "highJump":
            const originalJumpForce = this.physics.jumpForce;
            this.physics.jumpForce = -18; // Increased jump
            setTimeout(() => {
              this.physics.jumpForce = originalJumpForce;
            }, powerUp.duration);
            break;
          case "slowTime":
            this.timeSlowed = true;
            setTimeout(() => {
              this.timeSlowed = false;
            }, powerUp.duration);
            break;
        }
      }
    
      updateDifficulty() {
        const speedMultiplier = this.timeSlowed ? 0.5 : 1;
        this.obstacleSpeed += 0.001 * speedMultiplier;
        if (this.obstacleInterval > 500) {
          this.obstacleInterval -= 0.1 * speedMultiplier;
        }
      }
    
      endGame() {
        this.gameOver = true;
        this.updateHighScore();
        ctx.fillStyle = "white";
        ctx.font = "40px Arial";
        ctx.textAlign = "center";
        ctx.fillText("Game Over", canvas.width / 2, canvas.height / 2 - 40);
        ctx.font = "24px Arial";
        ctx.fillText(
          `Your score: ${this.score}`,
          canvas.width / 2,
          canvas.height / 2
        );
        ctx.fillText(
          "Press SPACE to restart",
          canvas.width / 2,
          canvas.height / 2 + 40
        );
      }
    
      updateHighScore() {
        if (this.score > this.highScore) {
          this.highScore = this.score;
          localStorage.setItem("highScore", this.highScore);
        }
      }
    
      restart() {
        this.player = new Player(this);
        this.obstacles = [];
        this.powerUps = [];
        this.obstacleSpeed = 5;
        this.obstacleInterval = 1200;
        this.score = 0;
        this.scoreMultiplier = 1;
        this.gameOver = false;
        this.lastObstacleTime = Date.now();
        this.lastPowerUpTime = Date.now();
        this.shieldActive = false;
        this.timeSlowed = false;
        this.gameLoop(0); // Restart the loop
      }
    
      gameLoop(timestamp) {
        if (this.gameOver) {
          return;
        }
    
        const deltaTime = timestamp - this.lastUpdateTime;
        this.lastUpdateTime = timestamp;
    
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        this.drawParallaxBackground();
    
        this.player.update();
        this.obstacles.forEach((obstacle) => obstacle.update());
        this.powerUps.forEach((powerUp) => powerUp.update());
    
        this.generateObstacle();
        this.generatePowerUp();
        this.checkCollision();
        this.updateDifficulty();
        this.score += this.scoreMultiplier;
    
        this.obstacles = this.obstacles.filter(
          (obstacle) => obstacle.x + obstacle.width > 0
        );
        this.powerUps = this.powerUps.filter(
          (powerUp) => powerUp.x + powerUp.width > 0
        );
    
        this.player.draw();
        this.obstacles.forEach((obstacle) => obstacle.draw());
        this.powerUps.forEach((powerUp) => powerUp.draw());
        this.drawUI();
    
        requestAnimationFrame(this.gameLoop.bind(this));
      }
    }
    
    // --- Event Listeners ---
    document.addEventListener("keydown", (event) => {
      if (event.code === "Space") {
        if (myGame.gameOver) {
          myGame.restart();
        } else {
          myGame.player.jump();
        }
      }
    });
    
    // --- Start the game ---
    const myGame = new Game();
    myGame.gameLoop(0);

    In conclusion, building the Escape Road Game using HTML, CSS, and JavaScript is an entertaining and educational way to strengthen your coding skills. By combining structure, style, and logic, we’ve created a fun and responsive game that challenges users while showing off the power of web technologies🕹️🔥

    If your project has problems, don’t worry. Just click to download the source code and face your coding challenges with excitement. Have fun coding!

    Animation JavaScript Web Development
    Share. Copy Link Twitter Facebook LinkedIn Email WhatsApp
    Previous ArticleHow to create Galaxy Animation using HTML CSS and JS
    Next Article How to create Animated Firework Diwali using HTML CSS and JS
    Coding Stella
    • Website

    Related Posts

    JavaScript

    How to make Deadline Animation in HTML CSS & JS

    25 November 2025
    JavaScript

    How to make Animated Download Button in HTML CSS & JS

    21 November 2025
    JavaScript

    How to make Password Input Light in HTML CSS & JavaScript

    18 November 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Trending Post

    Master Frontend in 100 Days Ebook

    2 March 202431K Views

    How to make Modern Login Form using HTML & CSS | Glassmorphism

    11 January 202428K Views

    How to make I love you Animation in HTML CSS & JavaScript

    14 February 202422K Views

    How to make Valentine’s Day Card using HTML & CSS

    13 February 202414K Views
    Follow Us
    • Instagram
    • Facebook
    • YouTube
    • Twitter
    ads
    Featured Post

    How to make Movie Poster Cards using HTML & CSS

    11 March 2024

    How to make Heart Beat Animation using HTML and CSS

    29 October 2025

    How to create Galaxy Animation using HTML CSS and JS

    11 October 2025

    How to create Animated Tesla Landing Page using HTML CSS and JS

    29 August 2025
    Latest Post

    How to make Deadline Animation in HTML CSS & JS

    25 November 2025

    How to make Animated Download Button in HTML CSS & JS

    21 November 2025

    How to make Password Input Light in HTML CSS & JavaScript

    18 November 2025

    How to make I love you heart card Animation in HTML CSS & JavaScript

    14 November 2025
    Facebook X (Twitter) Instagram YouTube
    • About Us
    • Privacy Policy
    • Return and Refund Policy
    • Terms and Conditions
    • Contact Us
    • Buy me a coffee
    © 2025 Coding Stella. Made with 💙 by @coding.stella

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker Enabled!
    Ad Blocker Enabled!
    Looks like you're using an ad blocker. We rely on advertising to help fund our site.
    Okay! I understood