<style>
  @import url(https://fonts.googleapis.com/css?family=Google+Sans+Text);
  html {
    font-family: 'Google Sans Text', 'Google Sans';
    font-size: 14px;
    color-scheme: light dark;
    background: light-dark(white, black);
    color: light-dark(black, white);
  }
</style>

<script type="importmap">{"imports":{"@modelcontextprotocol/sdk/":"https://esm.sh/@modelcontextprotocol/sdk/dist/esm/","https://esm.sh/@modelcontextprotocol/sdk@^1.11.0/es2022/":"https://esm.sh/@modelcontextprotocol/sdk@^1.11.0/es2022/dist/esm/","https://esm.sh/@modelcontextprotocol/sdk@^1.11.0/client/index?target=es2022":"https://esm.sh/@modelcontextprotocol/sdk@^1.11.0/dist/esm/client/index?target=es2022","https://esm.sh/@modelcontextprotocol/sdk@^1.11.0/types?target=es2022":"https://esm.sh/@modelcontextprotocol/sdk@^1.11.0/dist/esm/types?target=es2022","react":"https://aistudiocdn.com/react@^19.2.0","react-dom/":"https://aistudiocdn.com/react-dom@^19.2.0/","react/":"https://aistudiocdn.com/react@^19.2.0/","lucide-react":"https://aistudiocdn.com/lucide-react@^0.555.0","@google/genai":"https://aistudiocdn.com/@google/genai@^1.30.0","react-markdown":"https://aistudiocdn.com/react-markdown@^10.1.0","react-router-dom":"https://aistudiocdn.com/react-router-dom@^7.9.6","react-qr-code":"https://aistudiocdn.com/react-qr-code@^2.0.15","jsbarcode":"https://aistudiocdn.com/jsbarcode@^3.11.6","crypto-js":"https://aistudiocdn.com/crypto-js@^4.2.0","html-to-image":"https://aistudiocdn.com/html-to-image@^1.11.11","papaparse":"https://aistudiocdn.com/papaparse@^5.4.1","jszip":"https://aistudiocdn.com/jszip@^3.10.1","docx":"https://aistudiocdn.com/docx@^8.5.0","pdf-lib":"https://aistudiocdn.com/pdf-lib@^1.17.1","pdfjs-dist":"https://aistudiocdn.com/pdfjs-dist@4.0.379/build/pdf.mjs","pdfjs-dist/build/pdf.worker.mjs":"https://aistudiocdn.com/pdfjs-dist@4.0.379/build/pdf.worker.mjs","@/index":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20vY2xpZW50JzsKaW1wb3J0IEFwcCBmcm9tICdAL0FwcCc7CmNvbnN0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTsKaWYgKCFyb290RWxlbWVudCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCByb290IGVsZW1lbnQgdG8gbW91bnQgdG8iKTsKfQpjb25zdCByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChyb290RWxlbWVudCk7CnJvb3QucmVuZGVyKF9qc3goUmVhY3QuU3RyaWN0TW9kZSwgeyBjaGlsZHJlbjogX2pzeChBcHAsIHt9KSB9KSk7Cg==","@":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20vY2xpZW50JzsKaW1wb3J0IEFwcCBmcm9tICdAL0FwcCc7CmNvbnN0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTsKaWYgKCFyb290RWxlbWVudCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCByb290IGVsZW1lbnQgdG8gbW91bnQgdG8iKTsKfQpjb25zdCByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChyb290RWxlbWVudCk7CnJvb3QucmVuZGVyKF9qc3goUmVhY3QuU3RyaWN0TW9kZSwgeyBjaGlsZHJlbjogX2pzeChBcHAsIHt9KSB9KSk7Cg==","@/types":"data:application/javascript;base64,ZXhwb3J0IHt9Owo=","@/services/geminiService":"data:application/javascript;base64,aW1wb3J0IHsgR29vZ2xlR2VuQUkgfSBmcm9tICJAZ29vZ2xlL2dlbmFpIjsKLyoqCiAqIFN0YW5kYXJkIHRleHQgZ2VuZXJhdGlvbiBmb3IgZ2VuZXJhbCBBSSB0b29scy4KICovCi8vIFVzZSBnZW1pbmktMy1mbGFzaC1wcmV2aWV3IGZvciBiYXNpYyB0ZXh0IHRhc2tzCmV4cG9ydCBjb25zdCBnZW5lcmF0ZVRleHQgPSBhc3luYyAocHJvbXB0LCBtb2RlbCA9ICdnZW1pbmktMy1mbGFzaC1wcmV2aWV3JykgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhaSA9IG5ldyBHb29nbGVHZW5BSSh7IGFwaUtleTogcHJvY2Vzcy5lbnYuQVBJX0tFWSB9KTsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFpLm1vZGVscy5nZW5lcmF0ZUNvbnRlbnQoewogICAgICAgICAgICBtb2RlbCwKICAgICAgICAgICAgY29udGVudHM6IHByb21wdCwKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCB8fCAiTm8gcmVzcG9uc2UgZ2VuZXJhdGVkLiI7CiAgICB9CiAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJHZW1pbmkgQVBJIEVycm9yOiIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgIH0KfTsKLyoqCiAqIEF1ZGlvIFRyYW5zY3JpcHRpb24gaGVscGVyCiAqLwpleHBvcnQgY29uc3QgdHJhbnNjcmliZUF1ZGlvID0gYXN5bmMgKGJhc2U2NERhdGEsIG1pbWVUeXBlKSA9PiB7CiAgICB0cnkgewogICAgICAgIGNvbnN0IGFpID0gbmV3IEdvb2dsZUdlbkFJKHsgYXBpS2V5OiBwcm9jZXNzLmVudi5BUElfS0VZIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYWkubW9kZWxzLmdlbmVyYXRlQ29udGVudCh7CiAgICAgICAgICAgIG1vZGVsOiAnZ2VtaW5pLTMtZmxhc2gtcHJldmlldycsCiAgICAgICAgICAgIGNvbnRlbnRzOiB7CiAgICAgICAgICAgICAgICBwYXJ0czogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRGF0YTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0RGF0YQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7IHRleHQ6ICJQbGVhc2UgcHJvdmlkZSBhIGhpZ2hseSBhY2N1cmF0ZSwgdmVyYmF0aW0gdHJhbnNjcmlwdCBvZiB0aGlzIGF1ZGlvIHJlY29yZGluZy4gSW5jbHVkZSBzcGVha2VyIGxhYmVscyBpZiBtdWx0aXBsZSBwZW9wbGUgYXJlIHNwZWFraW5nLCBidXQgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSB0ZXh0LiBEbyBub3QgYWRkIGFueSBjb21tZW50YXJ5LiIgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQgfHwgIk5vIHRyYW5zY3JpcHQgY291bGQgYmUgZ2VuZXJhdGVkLiI7CiAgICB9CiAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJUcmFuc2NyaXB0aW9uIEVycm9yOiIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgIH0KfTsKLyoqCiAqIEdlbmVyYXRpb24gd2l0aCBHb29nbGUgU2VhcmNoIEdyb3VuZGluZy4KICovCmV4cG9ydCBjb25zdCBnZW5lcmF0ZVdpdGhTZWFyY2ggPSBhc3luYyAocHJvbXB0KSA9PiB7CiAgICB0cnkgewogICAgICAgIGNvbnN0IGFpID0gbmV3IEdvb2dsZUdlbkFJKHsgYXBpS2V5OiBwcm9jZXNzLmVudi5BUElfS0VZIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYWkubW9kZWxzLmdlbmVyYXRlQ29udGVudCh7CiAgICAgICAgICAgIG1vZGVsOiAnZ2VtaW5pLTMtZmxhc2gtcHJldmlldycsCiAgICAgICAgICAgIGNvbnRlbnRzOiBwcm9tcHQsCiAgICAgICAgICAgIGNvbmZpZzogewogICAgICAgICAgICAgICAgdG9vbHM6IFt7IGdvb2dsZVNlYXJjaDoge30gfV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc291cmNlcyA9IHJlc3BvbnNlLmNhbmRpZGF0ZXM/LlswXT8uZ3JvdW5kaW5nTWV0YWRhdGE/Lmdyb3VuZGluZ0NodW5rcwogICAgICAgICAgICA/LmZpbHRlcigoY2h1bmspID0+IGNodW5rLndlYikKICAgICAgICAgICAgLm1hcCgoY2h1bmspID0+ICh7CiAgICAgICAgICAgIHRpdGxlOiBjaHVuay53ZWI/LnRpdGxlIHx8ICdTb3VyY2UnLAogICAgICAgICAgICB1cmk6IGNodW5rLndlYj8udXJpIHx8ICcjJwogICAgICAgIH0pKSB8fCBbXTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0ZXh0OiByZXNwb25zZS50ZXh0IHx8ICJObyByZXNwb25zZSBnZW5lcmF0ZWQuIiwKICAgICAgICAgICAgc291cmNlcwogICAgICAgIH07CiAgICB9CiAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJHZW1pbmkgU2VhcmNoIEFQSSBFcnJvcjoiLCBlcnJvcik7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICB9Cn07Ci8qKgogKiBBbmFseXplcyBhIGRvY3VtZW50IChQREYgb3IgSW1hZ2UpIGFuZCBleHRyYWN0cyBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgcHJvbXB0LgogKi8KZXhwb3J0IGNvbnN0IGFuYWx5emVEb2N1bWVudCA9IGFzeW5jIChiYXNlNjREYXRhLCBtaW1lVHlwZSwgcHJvbXB0KSA9PiB7CiAgICB0cnkgewogICAgICAgIGNvbnN0IGFpID0gbmV3IEdvb2dsZUdlbkFJKHsgYXBpS2V5OiBwcm9jZXNzLmVudi5BUElfS0VZIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYWkubW9kZWxzLmdlbmVyYXRlQ29udGVudCh7CiAgICAgICAgICAgIG1vZGVsOiAnZ2VtaW5pLTMtZmxhc2gtcHJldmlldycsCiAgICAgICAgICAgIGNvbnRlbnRzOiB7CiAgICAgICAgICAgICAgICBwYXJ0czogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRGF0YTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0RGF0YQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IHByb21wdCB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCB8fCAiIjsKICAgIH0KICAgIGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkdlbWluaSBEb2N1bWVudCBBbmFseXNpcyBFcnJvcjoiLCBlcnJvcik7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICB9Cn07Ci8qKgogKiBBc2sgcXVlc3Rpb25zIGFib3V0IGEgZG9jdW1lbnQuCiAqLwpleHBvcnQgY29uc3QgYXNrRG9jdW1lbnQgPSBhc3luYyAoYmFzZTY0RGF0YSwgbWltZVR5cGUsIHF1ZXN0aW9uLCBoaXN0b3J5ID0gW10pID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgYWkgPSBuZXcgR29vZ2xlR2VuQUkoeyBhcGlLZXk6IHByb2Nlc3MuZW52LkFQSV9LRVkgfSk7CiAgICAgICAgbGV0IGhpc3RvcnlDb250ZXh0ID0gIiI7CiAgICAgICAgaWYgKGhpc3RvcnkubGVuZ3RoID4gMCkgewogICAgICAgICAgICBoaXN0b3J5Q29udGV4dCA9ICJQcmV2aW91cyBjb252ZXJzYXRpb246XG4iICsgaGlzdG9yeS5tYXAoaCA9PiBgJHtoLnJvbGV9OiAke2guY29udGVudH1gKS5qb2luKCJcbiIpICsgIlxuXG4iOwogICAgICAgIH0KICAgICAgICBjb25zdCBmdWxsUHJvbXB0ID0gYFlvdSBhcmUgYSBoZWxwZnVsIFBERiBBSSBhc3Npc3RhbnQuIAogICAgVXNlIHRoZSBwcm92aWRlZCBkb2N1bWVudCB0byBhbnN3ZXIgdGhlIHVzZXIncyBxdWVzdGlvbi4gCiAgICBJZiB0aGUgYW5zd2VyIGlzIG5vdCBpbiB0aGUgZG9jdW1lbnQsIHNheSBzbyBwb2xpdGVseS4KICAgIAogICAgJHtoaXN0b3J5Q29udGV4dH0KICAgIAogICAgVXNlciBRdWVzdGlvbjogJHtxdWVzdGlvbn1gOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYWkubW9kZWxzLmdlbmVyYXRlQ29udGVudCh7CiAgICAgICAgICAgIG1vZGVsOiAnZ2VtaW5pLTMtZmxhc2gtcHJldmlldycsCiAgICAgICAgICAgIGNvbnRlbnRzOiB7CiAgICAgICAgICAgICAgICBwYXJ0czogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRGF0YTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0RGF0YQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IGZ1bGxQcm9tcHQgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQgfHwgIkkgY291bGRuJ3QgZmluZCBhbiBhbnN3ZXIgaW4gdGhlIGRvY3VtZW50LiI7CiAgICB9CiAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJHZW1pbmkgRG9jdW1lbnQgUSZBIEVycm9yOiIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgIH0KfTsKLyoqCiAqIERFRVAgVEhJTktJTkcgTU9ERQogKi8KZXhwb3J0IGNvbnN0IGdlbmVyYXRlVGhpbmtpbmdDb250ZW50ID0gYXN5bmMgKHByb21wdCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhaSA9IG5ldyBHb29nbGVHZW5BSSh7IGFwaUtleTogcHJvY2Vzcy5lbnYuQVBJX0tFWSB9KTsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFpLm1vZGVscy5nZW5lcmF0ZUNvbnRlbnQoewogICAgICAgICAgICBtb2RlbDogJ2dlbWluaS0zLXByby1wcmV2aWV3JywKICAgICAgICAgICAgY29udGVudHM6IHByb21wdCwKICAgICAgICAgICAgY29uZmlnOiB7CiAgICAgICAgICAgICAgICB0aGlua2luZ0NvbmZpZzogewogICAgICAgICAgICAgICAgICAgIHRoaW5raW5nQnVkZ2V0OiAzMjc2OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQgfHwgIlRoZSBtb2RlbCBjb3VsZCBub3QgZ2VuZXJhdGUgYSByZXNwb25zZS4iOwogICAgfQogICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiR2VtaW5pIFRoaW5raW5nIEFQSSBFcnJvcjoiLCBlcnJvcik7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICB9Cn07Ci8qKgogKiBJbWFnZSBHZW5lcmF0aW9uIHVzaW5nIG5hbm8gYmFuYW5hIHNlcmllcyBtb2RlbC4KICovCmV4cG9ydCBjb25zdCBnZW5lcmF0ZUltYWdlID0gYXN5bmMgKHByb21wdCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhaSA9IG5ldyBHb29nbGVHZW5BSSh7IGFwaUtleTogcHJvY2Vzcy5lbnYuQVBJX0tFWSB9KTsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFpLm1vZGVscy5nZW5lcmF0ZUNvbnRlbnQoewogICAgICAgICAgICBtb2RlbDogJ2dlbWluaS0yLjUtZmxhc2gtaW1hZ2UnLAogICAgICAgICAgICBjb250ZW50czogewogICAgICAgICAgICAgICAgcGFydHM6IFt7IHRleHQ6IHByb21wdCB9XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29uZmlnOiB7CiAgICAgICAgICAgICAgICBpbWFnZUNvbmZpZzogewogICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvOiAiMToxIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgcmVzcG9uc2UuY2FuZGlkYXRlcyB8fCBbXSkgewogICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgY2FuZGlkYXRlLmNvbnRlbnQucGFydHMgfHwgW10pIHsKICAgICAgICAgICAgICAgIGlmIChwYXJ0LmlubGluZURhdGEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke3BhcnQuaW5saW5lRGF0YS5kYXRhfWA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBpbWFnZSBkYXRhIGZvdW5kIGluIHJlc3BvbnNlIik7CiAgICB9CiAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJHZW1pbmkgSW1hZ2UgQVBJIEVycm9yOiIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgIH0KfTsKLyoqCiAqIENvZGUgRXhwbGFuYXRpb24gaGVscGVyCiAqLwpleHBvcnQgY29uc3QgZXhwbGFpbkNvZGUgPSBhc3luYyAoY29kZSkgPT4gewogICAgY29uc3QgcHJvbXB0ID0gYEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2ltcGx5IGFuZCBjbGVhcmx5LiBCcmVhayBkb3duIHdoYXQgaXQgZG9lcyBzdGVwIGJ5IHN0ZXA6XG5cbiR7Y29kZX1gOwogICAgcmV0dXJuIGdlbmVyYXRlVGV4dChwcm9tcHQsICdnZW1pbmktMy1mbGFzaC1wcmV2aWV3Jyk7Cn07Cg==","@/components/Sidebar":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgTmF2TGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nOwppbXBvcnQgeyBUeXBlLCBDb2RlLCBQYWxldHRlLCBTaGFyZTIsIEJyYWluQ2lyY3VpdCwgTGF5b3V0R3JpZCwgQ2xvY2ssIERvbGxhclNpZ24sIE11c2ljLCBFeHRlcm5hbExpbmssIER1bWJiZWxsIH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKY29uc3QgQ0FURUdPUklFUyA9IFsKICAgIHsgaWQ6ICdUZXh0JywgbmFtZTogJ1RleHQgVG9vbHMnLCBpY29uOiBUeXBlLCBjb2xvcjogJ3RleHQtYmx1ZS01MDAnIH0sCiAgICB7IGlkOiAnQ1NTJywgbmFtZTogJ0NTUyBUb29scycsIGljb246IFBhbGV0dGUsIGNvbG9yOiAndGV4dC1waW5rLTUwMCcgfSwKICAgIHsgaWQ6ICdDb2RpbmcnLCBuYW1lOiAnQ29kaW5nIFRvb2xzJywgaWNvbjogQ29kZSwgY29sb3I6ICd0ZXh0LWVtZXJhbGQtNTAwJyB9LAogICAgeyBpZDogJ1RpbWUnLCBuYW1lOiAnVGltZSBUb29scycsIGljb246IENsb2NrLCBjb2xvcjogJ3RleHQtb3JhbmdlLTUwMCcgfSwKICAgIHsgaWQ6ICdGaW5hbmNlJywgbmFtZTogJ0ZpbmFuY2UgVG9vbHMnLCBpY29uOiBEb2xsYXJTaWduLCBjb2xvcjogJ3RleHQtZ3JlZW4tNTAwJyB9LAogICAgeyBpZDogJ011c2ljJywgbmFtZTogJ011c2ljIFRvb2xzJywgaWNvbjogTXVzaWMsIGNvbG9yOiAndGV4dC1yb3NlLTUwMCcgfSwKICAgIHsgaWQ6ICdGaXRuZXNzJywgbmFtZTogJ0ZpdG5lc3MgLyBTcG9ydCBUb29scycsIGljb246IER1bWJiZWxsLCBjb2xvcjogJ3RleHQtcmVkLTUwMCcgfSwKICAgIHsgaWQ6ICdBSScsIG5hbWU6ICdBSSBUb29scycsIGljb246IEJyYWluQ2lyY3VpdCwgY29sb3I6ICd0ZXh0LWJyYW5kLTUwMCcgfSwKICAgIHsgaWQ6ICdTb2NpYWwnLCBuYW1lOiAnU29jaWFsIFRvb2xzJywgaWNvbjogU2hhcmUyLCBjb2xvcjogJ3RleHQtaW5kaWdvLTUwMCcgfSwKXTsKZXhwb3J0IGNvbnN0IExvZ29NYXJrID0gKHsgY2xhc3NOYW1lID0gInctOCBoLTgiIH0pID0+IChfanN4cygic3ZnIiwgeyB2aWV3Qm94OiAiMCAwIDEwMCAxMDAiLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgeG1sbnM6ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsIGNoaWxkcmVuOiBbX2pzeCgicmVjdCIsIHsgd2lkdGg6ICIxMDAiLCBoZWlnaHQ6ICIxMDAiLCByeDogIjI1IiwgZmlsbDogIiM2MzViZmYiIH0pLCBfanN4KCJyZWN0IiwgeyB4OiAiMjUiLCB5OiAiMjUiLCB3aWR0aDogIjIyIiwgaGVpZ2h0OiAiMjIiLCByeDogIjQiLCBmaWxsOiAid2hpdGUiIH0pLCBfanN4KCJyZWN0IiwgeyB4OiAiNTMiLCB5OiAiMjUiLCB3aWR0aDogIjIyIiwgaGVpZ2h0OiAiMjIiLCByeDogIjQiLCBmaWxsOiAid2hpdGUiIH0pLCBfanN4KCJyZWN0IiwgeyB4OiAiMjUiLCB5OiAiNTMiLCB3aWR0aDogIjIyIiwgaGVpZ2h0OiAiMjIiLCByeDogIjQiLCBmaWxsOiAid2hpdGUiIH0pLCBfanN4KCJyZWN0IiwgeyB4OiAiNTMiLCB5OiAiNTMiLCB3aWR0aDogIjIyIiwgaGVpZ2h0OiAiMjIiLCByeDogIjQiLCBmaWxsOiAid2hpdGUiIH0pXSB9KSk7CmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHsgaXNPcGVuLCBvbkNsb3NlIH0pID0+IHsKICAgIHJldHVybiAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbaXNPcGVuICYmIChfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZpeGVkIGluc2V0LTAgei0yMCBiZy1ncmF5LTkwMC81MCBiYWNrZHJvcC1ibHVyLXNtIGxnOmhpZGRlbiIsIG9uQ2xpY2s6IG9uQ2xvc2UgfSkpLCBfanN4KCJhc2lkZSIsIHsgY2xhc3NOYW1lOiBgZml4ZWQgaW5zZXQteS0wIGxlZnQtMCB6LTMwIHctNjQgYmctZ3JheS01MC84MCBkYXJrOmJnLWRhcmstOTAwLzkwIGJhY2tkcm9wLWJsdXItbWQgbGc6YmctdHJhbnNwYXJlbnQgbGc6YmFja2Ryb3AtYmx1ci1ub25lIHRyYW5zZm9ybSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQgbGc6dHJhbnNsYXRlLXgtMCBsZzpzdGlja3kgbGc6dG9wLTAgbGc6aC1zY3JlZW4gJHtpc09wZW4gPyAndHJhbnNsYXRlLXgtMCcgOiAnLXRyYW5zbGF0ZS14LWZ1bGwnfWAsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJoLWZ1bGwgZmxleCBmbGV4LWNvbCBwLTQiLCBjaGlsZHJlbjogW19qc3hzKE5hdkxpbmssIHsgdG86ICIvIiwgY2xhc3NOYW1lOiAiaC0xNCBmbGV4IGl0ZW1zLWNlbnRlciBweC0yIG1iLTYgZ3JvdXAiLCBvbkNsaWNrOiBvbkNsb3NlLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAibXItMyBzaGFkb3ctbGcgc2hhZG93LWJyYW5kLTUwMC8zMCBncm91cC1ob3ZlcjpzY2FsZS0xMDUgdHJhbnNpdGlvbi10cmFuc2Zvcm0iLCBjaGlsZHJlbjogX2pzeChMb2dvTWFyaywgeyBjbGFzc05hbWU6ICJ3LTkgaC05IiB9KSB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC14bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRyYWNraW5nLXRpZ2h0ZXIiLCBjaGlsZHJlbjogIldpcmVOaW5qYSIgfSldIH0pLCBfanN4cygibmF2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIGN1c3RvbS1zY3JvbGxiYXIgc3BhY2UteS0xIiwgY2hpbGRyZW46IFtfanN4cyhOYXZMaW5rLCB7IHRvOiAiLyIsIGNsYXNzTmFtZTogKHsgaXNBY3RpdmUgfSkgPT4gYGZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwICR7aXNBY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXdoaXRlIGRhcms6Ymctd2hpdGUvMTAgdGV4dC1icmFuZC02MDAgZGFyazp0ZXh0LWJyYW5kLTQwMCBzaGFkb3ctc20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ibGFjay81IGRhcms6aG92ZXI6Ymctd2hpdGUvNSd9YCwgb25DbGljazogb25DbG9zZSwgY2hpbGRyZW46IFtfanN4KExheW91dEdyaWQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCBtci0zIiB9KSwgIk92ZXJ2aWV3Il0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicHQtNiBwYi0zIHB4LTMgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJUb29sa2l0IiB9KSwgQ0FURUdPUklFUy5tYXAoKGNhdCkgPT4gKF9qc3goTmF2TGluaywgeyB0bzogYC9jYXRlZ29yeS8ke2NhdC5pZC50b0xvd2VyQ2FzZSgpfWAsIGNsYXNzTmFtZTogKHsgaXNBY3RpdmUgfSkgPT4gYGdyb3VwIGZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwICR7aXNBY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXdoaXRlIGRhcms6Ymctd2hpdGUvMTAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgc2hhZG93LXNtJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC1ncmF5LTQwMCBkYXJrOmhvdmVyOnRleHQtd2hpdGUgaG92ZXI6YmctYmxhY2svNSBkYXJrOmhvdmVyOmJnLXdoaXRlLzUnfWAsIG9uQ2xpY2s6IG9uQ2xvc2UsIGNoaWxkcmVuOiAoeyBpc0FjdGl2ZSB9KSA9PiAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChjYXQuaWNvbiwgeyBjbGFzc05hbWU6IGB3LTQgaC00IG1yLTMgdHJhbnNpdGlvbi1jb2xvcnMgJHtpc0FjdGl2ZSA/IGNhdC5jb2xvciA6ICd0ZXh0LWdyYXktNDAwIGdyb3VwLWhvdmVyOnRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNTAwJ31gIH0pLCBjYXQubmFtZV0gfSkpIH0sIGNhdC5pZCkpKV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtNCBwdC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCIsIGNoaWxkcmVuOiBfanN4cygiYSIsIHsgaHJlZjogImh0dHBzOi8vcm91dGVub3RlLmNvbSIsIHRhcmdldDogIl9ibGFuayIsIHJlbDogIm5vb3BlbmVyIG5vcmVmZXJyZXIiLCBjbGFzc05hbWU6ICJibG9jayBwLTQgcm91bmRlZC14bCBob3ZlcjpiZy1ncmF5LTEwMCBkYXJrOmhvdmVyOmJnLWRhcmstODAwIHRyYW5zaXRpb24tYWxsIGdyb3VwIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTIgcmVsYXRpdmUgei0xMCIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcHgtMiBweS0wLjUgcm91bmRlZC1mdWxsIiwgY2hpbGRyZW46ICJTcG9uc29yZWQiIH0pLCBfanN4KEV4dGVybmFsTGluaywgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIHRleHQtZ3JheS00MDAgZ3JvdXAtaG92ZXI6dGV4dC1ncmF5LTYwMCBkYXJrOmdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0xIHJlbGF0aXZlIHotMTAiLCBjaGlsZHJlbjogIlJvdXRlTm90ZSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTFweF0gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgbGVhZGluZy10aWdodCBncm91cC1ob3Zlcjp0ZXh0LWdyYXktOTAwIGRhcms6Z3JvdXAtaG92ZXI6dGV4dC1ncmF5LTIwMCB0cmFuc2l0aW9uLWNvbG9ycyByZWxhdGl2ZSB6LTEwIGZvbnQtbWVkaXVtIiwgY2hpbGRyZW46ICJNYWtlIE1vbmV5IGZyb20geW91ciBNdXNpYyIgfSldIH0pIH0pXSB9KSB9KV0gfSkpOwp9Owo=","@/components/ToolLayout":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJzsKaW1wb3J0IHsgQ2hldnJvbkxlZnQgfSBmcm9tICdsdWNpZGUtcmVhY3QnOwpleHBvcnQgY29uc3QgVG9vbExheW91dCA9ICh7IHRpdGxlLCBkZXNjcmlwdGlvbiwgaWNvbjogSWNvbiwgY2hpbGRyZW4sIGNhdGVnb3J5IH0pID0+IHsKICAgIC8vIFVwZGF0ZSBTRU8gbWV0YWRhdGEgZHluYW1pY2FsbHkKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgLy8gVXBkYXRlIFRpdGxlCiAgICAgICAgY29uc3QgcHJldlRpdGxlID0gZG9jdW1lbnQudGl0bGU7CiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBgJHt0aXRsZX0gLSBXaXJlTmluamEgRnJlZSBPbmxpbmUgVG9vbHNgOwogICAgICAgIC8vIFVwZGF0ZSBNZXRhIERlc2NyaXB0aW9uCiAgICAgICAgbGV0IG1ldGFEZXNjcmlwdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT0iZGVzY3JpcHRpb24iXScpOwogICAgICAgIGxldCBvcmlnaW5hbERlc2NyaXB0aW9uID0gJyc7CiAgICAgICAgaWYgKG1ldGFEZXNjcmlwdGlvbikgewogICAgICAgICAgICBvcmlnaW5hbERlc2NyaXB0aW9uID0gbWV0YURlc2NyaXB0aW9uLmdldEF0dHJpYnV0ZSgnY29udGVudCcpIHx8ICcnOwogICAgICAgICAgICBtZXRhRGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdjb250ZW50JywgZGVzY3JpcHRpb24pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gQ3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgICAgY29uc3QgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTsKICAgICAgICAgICAgbWV0YS5uYW1lID0gJ2Rlc2NyaXB0aW9uJzsKICAgICAgICAgICAgbWV0YS5jb250ZW50ID0gZGVzY3JpcHRpb247CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQobWV0YSk7CiAgICAgICAgfQogICAgICAgIC8vIENsZWFudXAgdG8gb3JpZ2luYWwgb24gdW5tb3VudAogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gcHJldlRpdGxlOwogICAgICAgICAgICBpZiAobWV0YURlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICBtZXRhRGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdjb250ZW50Jywgb3JpZ2luYWxEZXNjcmlwdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSwgW3RpdGxlLCBkZXNjcmlwdGlvbl0pOwogICAgcmV0dXJuIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtYXgtdy02eGwgbXgtYXV0byBweC00IHB5LTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm1iLTgiLCBjaGlsZHJlbjogW19qc3hzKExpbmssIHsgdG86IGNhdGVnb3J5ID8gYC9jYXRlZ29yeS8ke2NhdGVnb3J5LnRvTG93ZXJDYXNlKCl9YCA6ICcvJywgY2xhc3NOYW1lOiAiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTQwMCBkYXJrOmhvdmVyOnRleHQtZ3JheS0yMDAgbWItNiB0cmFuc2l0aW9uLWNvbG9ycyBncm91cCIsIGNoaWxkcmVuOiBbX2pzeChDaGV2cm9uTGVmdCwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IG1yLTEgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZ3JvdXAtaG92ZXI6LXRyYW5zbGF0ZS14LTEiIH0pLCAiQmFjayB0byAiLCBjYXRlZ29yeSB8fCAnT3ZlcnZpZXcnXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBtZDppdGVtcy1zdGFydCBtZDpzcGFjZS14LTYiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC00IGJnLXdoaXRlIGRhcms6YmctZGFyay04MDAgcm91bmRlZC0yeGwgc2hhZG93LXN0cmlwZS1zbSBtYi00IG1kOm1iLTAgaW5saW5lLWJsb2NrIHctZml0IiwgY2hpbGRyZW46IF9qc3goSWNvbiwgeyBjbGFzc05hbWU6ICJ3LTggaC04IHRleHQtYnJhbmQtNTAwIiB9KSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJoMSIsIHsgY2xhc3NOYW1lOiAidGV4dC0zeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIgdHJhY2tpbmctdGlnaHQiLCBjaGlsZHJlbjogdGl0bGUgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtbGcgdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgbWF4LXctMnhsIGxlYWRpbmctcmVsYXhlZCIsIGNoaWxkcmVuOiBkZXNjcmlwdGlvbiB9KV0gfSldIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHJvdW5kZWQteGwgc2hhZG93LXN0cmlwZSBvdmVyZmxvdy1oaWRkZW4gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiwgY2hpbGRyZW46IGNoaWxkcmVuIH0pXSB9KSk7Cn07Cg==","@/components/Tools/DeepThinker":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBCcmFpbkNpcmN1aXQsIExvYWRlcjIsIFNwYXJrbGVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKaW1wb3J0IHsgVG9vbExheW91dCB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29sTGF5b3V0JzsKaW1wb3J0IHsgZ2VuZXJhdGVUaGlua2luZ0NvbnRlbnQgfSBmcm9tICdAL3NlcnZpY2VzL2dlbWluaVNlcnZpY2UnOwppbXBvcnQgUmVhY3RNYXJrZG93biBmcm9tICdyZWFjdC1tYXJrZG93bic7CmV4cG9ydCBjb25zdCBEZWVwVGhpbmtlciA9ICgpID0+IHsKICAgIGNvbnN0IFtwcm9tcHQsIHNldFByb21wdF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbcmVzcG9uc2UsIHNldFJlc3BvbnNlXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGUpID0+IHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKCFwcm9tcHQudHJpbSgpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpOwogICAgICAgIHNldEVycm9yKG51bGwpOwogICAgICAgIHNldFJlc3BvbnNlKCcnKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVRoaW5raW5nQ29udGVudChwcm9tcHQpOwogICAgICAgICAgICBzZXRSZXNwb25zZShyZXN1bHQpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIHNldEVycm9yKCJGYWlsZWQgdG8gZ2VuZXJhdGUgYSBzb2x1dGlvbi4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiRGVlcCBMb2dpYyBTb2x2ZXIiLCBkZXNjcmlwdGlvbjogIkhpZ2gtYnVkZ2V0IEFJIHJlYXNvbmluZyBmb3IgY29tcGxleCBsb2dpY2FsLCBtYXRoZW1hdGljYWwsIG9yIGFyY2hpdGVjdHVyYWwgcHJvYmxlbXMuIiwgaWNvbjogQnJhaW5DaXJjdWl0LCBjYXRlZ29yeTogIkFJIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibWItMTAgYmctYnJhbmQtNTAgZGFyazpiZy1icmFuZC05MDAvMTAgYm9yZGVyIGJvcmRlci1icmFuZC0xMDAgZGFyazpib3JkZXItYnJhbmQtOTAwLzMwIHJvdW5kZWQtMnhsIHAtNiBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC00IiwgY2hpbGRyZW46IFtfanN4KFNwYXJrbGVzLCB7IGNsYXNzTmFtZTogInctNiBoLTYgdGV4dC1icmFuZC01MDAgbXQtMC41IGZsZXgtc2hyaW5rLTAiIH0pLCBfanN4cygicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBsZWFkaW5nLXJlbGF4ZWQgZm9udC1tZWRpdW0iLCBjaGlsZHJlbjogWyJUaGlzIHRvb2wgdXNlcyBhICIsIF9qc3goInN0cm9uZyIsIHsgY2hpbGRyZW46ICIzMmsgVGhpbmtpbmcgQnVkZ2V0IiB9KSwgIi4gSXQgaXMgZGVzaWduZWQgdG8gZGVsaWJlcmF0ZSBpbnRlbnNlbHkgb24gZGlmZmljdWx0IHRvcGljcy4gQW5zd2VycyBtYXkgdGFrZSB1cCB0byAzMCBzZWNvbmRzIHRvIGdlbmVyYXRlIGFzIHRoZSBtb2RlbCBcInRoaW5rc1wiIHRocm91Z2ggdGhlIGxvZ2ljLiJdIH0pXSB9KSwgX2pzeHMoImZvcm0iLCB7IG9uU3VibWl0OiBoYW5kbGVTdWJtaXQsIGNsYXNzTmFtZTogInNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1iLTMgbWwtMSIsIGNoaWxkcmVuOiAiWW91ciBDb21wbGV4IFByb2JsZW0iIH0pLCBfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IHByb21wdCwgb25DaGFuZ2U6IChlKSA9PiBzZXRQcm9tcHQoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC01NiBwLTggcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRleHQtbGcgbGVhZGluZy1yZWxheGVkIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLWJyYW5kLTUwMC8yMCBzaGFkb3ctaW5uZXIgcmVzaXplLW5vbmUgdHJhbnNpdGlvbi1hbGwiLCBwbGFjZWhvbGRlcjogIkRlc2NyaWJlIHlvdXIgbG9naWMgcHV6emxlLCBjb2RpbmcgYXJjaGl0ZWN0dXJlLCBvciBtYXRoIHByb2JsZW0gaW4gZGV0YWlsLi4uIiB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWNlbnRlciIsIGNoaWxkcmVuOiBfanN4KCJidXR0b24iLCB7IHR5cGU6ICJzdWJtaXQiLCBkaXNhYmxlZDogaXNMb2FkaW5nIHx8ICFwcm9tcHQudHJpbSgpLCBjbGFzc05hbWU6ICJweC0xMiBweS01IGJnLWJyYW5kLTYwMCBob3ZlcjpiZy1icmFuZC03MDAgdGV4dC13aGl0ZSBmb250LWJsYWNrIHJvdW5kZWQtMnhsIHRleHQteGwgc2hhZG93LXhsIHNoYWRvdy1icmFuZC01MDAvMjAgZGlzYWJsZWQ6b3BhY2l0eS01MCBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMiLCBjaGlsZHJlbjogaXNMb2FkaW5nID8gX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogInctNiBoLTYgYW5pbWF0ZS1zcGluIiB9KSwgIiBEZWVwIFRoaW5raW5nLi4uIl0gfSkgOiBfanN4cyhfRnJhZ21lbnQsIHsgY2hpbGRyZW46IFtfanN4KEJyYWluQ2lyY3VpdCwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IiB9KSwgIiBTb2x2ZSBMb2dpYyJdIH0pIH0pIH0pXSB9KSwgZXJyb3IgJiYgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC04IHAtNCBiZy1yZWQtNTAgdGV4dC1yZWQtNzAwIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1yZWQtMTAwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZvbnQtYm9sZCIsIGNoaWxkcmVuOiBlcnJvciB9KSwgcmVzcG9uc2UgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTEyIGJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBwdC0xMCBhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tNiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi03MDAiLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC1sZyBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTYgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChTcGFya2xlcywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IHRleHQtYnJhbmQtNTAwIiB9KSwgIiBTb2x1dGlvbiBBcmNoaXRlY3R1cmUiXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwcm9zZSBwcm9zZS1icmFuZCBkYXJrOnByb3NlLWludmVydCBtYXgtdy1ub25lIGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcC0xMCByb3VuZGVkLTN4bCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHNoYWRvdy1zbSB0ZXh0LWxnIGxlYWRpbmctcmVsYXhlZCIsIGNoaWxkcmVuOiBfanN4KFJlYWN0TWFya2Rvd24sIHsgY2hpbGRyZW46IHJlc3BvbnNlIH0pIH0pXSB9KSldIH0pIH0pKTsKfTsK","@/components/Tools/TextTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IFR5cGUsIENvcHksIFJlZnJlc2hDdywgS2V5Um91bmQsIENoZWNrLCBRckNvZGUsIERvd25sb2FkLCBMb2FkZXIyLCBTY2FuQmFyY29kZSwgU2h1ZmZsZSwgUGVuY2lsTGluZSwgRmlsZUVkaXQsIFNhdmUsIE1vdXNlUG9pbnRlckNsaWNrLCBNaW51cywgUGx1cywgRmlsZVNwcmVhZHNoZWV0LCBVcGxvYWQsIFRyYXNoMiwgQ29kZSwgQWxpZ25MZWZ0LCBBbGVydENpcmNsZSwgRXllLCBFZGl0MywgQWxpZ25KdXN0aWZ5LCBSb3RhdGVDY3csIEZpbGVTdGFjaywgSW1hZ2UgYXMgSW1hZ2VJY29uLCBTcGFya2xlcyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCBRUkNvZGUgZnJvbSAncmVhY3QtcXItY29kZSc7CmltcG9ydCBKc0JhcmNvZGUgZnJvbSAnanNiYXJjb2RlJzsKaW1wb3J0IHsgZ2VuZXJhdGVUZXh0IH0gZnJvbSAnQC9zZXJ2aWNlcy9nZW1pbmlTZXJ2aWNlJzsKaW1wb3J0IFBhcGEgZnJvbSAncGFwYXBhcnNlJzsKaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJzsKaW1wb3J0ICogYXMgaHRtbFRvSW1hZ2UgZnJvbSAnaHRtbC10by1pbWFnZSc7Ci8vIC0tLSBDYXNlIENvbnZlcnRlciAtLS0KZXhwb3J0IGNvbnN0IENhc2VDb252ZXJ0ZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbdGV4dCwgc2V0VGV4dF0gPSB1c2VTdGF0ZSgndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpOwogICAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IHRyYW5zZm9ybSA9ICh0eXBlKSA9PiB7CiAgICAgICAgaWYgKHR5cGUgPT09ICd1cHBlcicpCiAgICAgICAgICAgIHNldFRleHQodGV4dC50b1VwcGVyQ2FzZSgpKTsKICAgICAgICBpZiAodHlwZSA9PT0gJ2xvd2VyJykKICAgICAgICAgICAgc2V0VGV4dCh0ZXh0LnRvTG93ZXJDYXNlKCkpOwogICAgICAgIGlmICh0eXBlID09PSAndGl0bGUnKSB7CiAgICAgICAgICAgIHNldFRleHQodGV4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykubWFwKHcgPT4gdy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHcuc3Vic3RyaW5nKDEpKS5qb2luKCcgJykpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZSA9PT0gJ3NlbnRlbmNlJykgewogICAgICAgICAgICBzZXRUZXh0KHRleHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oXlxzKlx3fFsuIT9dXHMqXHcpL2csIGMgPT4gYy50b1VwcGVyQ2FzZSgpKSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGhhbmRsZUNvcHkgPSAoKSA9PiB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7CiAgICAgICAgc2V0Q29waWVkKHRydWUpOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJDYXNlIENvbnZlcnRlciIsIGRlc2NyaXB0aW9uOiAiSW5zdGFudGx5IGNvbnZlcnQgeW91ciB0ZXh0IHRvIHVwcGVyY2FzZSwgbG93ZXJjYXNlLCB0aXRsZSBjYXNlLCBvciBzZW50ZW5jZSBjYXNlLiIsIGljb246IFR5cGUsIGNhdGVnb3J5OiAiVGV4dCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNXhsIG14LWF1dG8gc3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IHRleHQsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VGV4dChlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBoLTgwIHAtOCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHJlc2l6ZS1ub25lIGZvbnQtc2FucyB0ZXh0LWxnIGxlYWRpbmctcmVsYXhlZCBzaGFkb3ctaW5uZXIgdHJhbnNpdGlvbi1hbGwiLCBwbGFjZWhvbGRlcjogIlR5cGUgb3IgcGFzdGUgeW91ciB0ZXh0IGhlcmUuLi4iIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgcHQtMiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LXdyYXAgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gdHJhbnNmb3JtKCd1cHBlcicpLCBjbGFzc05hbWU6ICJweC01IHB5LTIuNSBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMjAwIHJvdW5kZWQteGwgZm9udC1ib2xkIGhvdmVyOmJnLWJyYW5kLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tYWxsIHRleHQtc20iLCBjaGlsZHJlbjogIlVQUEVSQ0FTRSIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gdHJhbnNmb3JtKCdsb3dlcicpLCBjbGFzc05hbWU6ICJweC01IHB5LTIuNSBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMjAwIHJvdW5kZWQteGwgZm9udC1ib2xkIGhvdmVyOmJnLWJyYW5kLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tYWxsIHRleHQtc20iLCBjaGlsZHJlbjogImxvd2VyY2FzZSIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gdHJhbnNmb3JtKCd0aXRsZScpLCBjbGFzc05hbWU6ICJweC01IHB5LTIuNSBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMjAwIHJvdW5kZWQteGwgZm9udC1ib2xkIGhvdmVyOmJnLWJyYW5kLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tYWxsIHRleHQtc20iLCBjaGlsZHJlbjogIlRpdGxlIENhc2UiIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHRyYW5zZm9ybSgnc2VudGVuY2UnKSwgY2xhc3NOYW1lOiAicHgtNSBweS0yLjUgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTIwMCByb3VuZGVkLXhsIGZvbnQtYm9sZCBob3ZlcjpiZy1icmFuZC02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWFsbCB0ZXh0LXNtIiwgY2hpbGRyZW46ICJTZW50ZW5jZSBjYXNlIiB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUNvcHksIGNsYXNzTmFtZTogIm1sLWF1dG8gcHgtOCBweS0zIGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQteGwgZm9udC1ib2xkIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gc2hhZG93LWxnIHNoYWRvdy1icmFuZC02MDAvMjAgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IFtjb3BpZWQgPyBfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIDogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pLCAiICIsIGNvcGllZCA/ICdDb3BpZWQnIDogJ0NvcHkgUmVzdWx0J10gfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBQYXNzd29yZCBHZW5lcmF0b3IgLS0tCmV4cG9ydCBjb25zdCBQYXNzd29yZEdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFtsZW5ndGgsIHNldExlbmd0aF0gPSB1c2VTdGF0ZSgxNik7CiAgICBjb25zdCBbaW5jbHVkZU51bWJlcnMsIHNldEluY2x1ZGVOdW1iZXJzXSA9IHVzZVN0YXRlKHRydWUpOwogICAgY29uc3QgW2luY2x1ZGVTeW1ib2xzLCBzZXRJbmNsdWRlU3ltYm9sc10gPSB1c2VTdGF0ZSh0cnVlKTsKICAgIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGdlbmVyYXRlID0gKCkgPT4gewogICAgICAgIGxldCBjaGFyc2V0ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwogICAgICAgIGlmIChpbmNsdWRlTnVtYmVycykKICAgICAgICAgICAgY2hhcnNldCArPSAiMDEyMzQ1Njc4OSI7CiAgICAgICAgaWYgKGluY2x1ZGVTeW1ib2xzKQogICAgICAgICAgICBjaGFyc2V0ICs9ICIhQCMkJV4mKigpXyt+YHx9e1tdOjs/PjwsLi8tPSI7CiAgICAgICAgbGV0IHJlcyA9ICIiOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHJlcyArPSBjaGFyc2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyc2V0Lmxlbmd0aCkpOwogICAgICAgIHNldFBhc3N3b3JkKHJlcyk7CiAgICB9OwogICAgdXNlRWZmZWN0KCgpID0+IHsgZ2VuZXJhdGUoKTsgfSwgW10pOwogICAgY29uc3QgaGFuZGxlQ29weSA9ICgpID0+IHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwYXNzd29yZCk7CiAgICAgICAgc2V0Q29waWVkKHRydWUpOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJQYXNzd29yZCBHZW5lcmF0b3IiLCBkZXNjcmlwdGlvbjogIkNyZWF0ZSBzdHJvbmcsIHNlY3VyZSBwYXNzd29yZHMgd2l0aCBjdXN0b21pemFibGUgbGVuZ3RoIGFuZCBjaGFyYWN0ZXJzLiIsIGljb246IEtleVJvdW5kLCBjYXRlZ29yeTogIlRleHQiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC0xMiBtYXgtdy14bCBteC1hdXRvIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBwLTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ3JvdXAgc2hhZG93LWlubmVyIiwgY2hpbGRyZW46IFtfanN4KCJjb2RlIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTJ4bCBmb250LW1vbm8gZm9udC1ib2xkIHRleHQtYnJhbmQtNjAwIHRydW5jYXRlIG1yLTQiLCBjaGlsZHJlbjogcGFzc3dvcmQgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogZ2VuZXJhdGUsIGNsYXNzTmFtZTogInAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBzaGFkb3ctc20gaG92ZXI6dGV4dC1icmFuZC02MDAgdHJhbnNpdGlvbi1hbGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCIsIHRpdGxlOiAiUmVnZW5lcmF0ZSIsIGNoaWxkcmVuOiBfanN4KFJlZnJlc2hDdywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiBoYW5kbGVDb3B5LCBjbGFzc05hbWU6ICJwLTMgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQteGwgc2hhZG93LXNtIGhvdmVyOnRleHQtYnJhbmQtNjAwIHRyYW5zaXRpb24tYWxsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAiLCBjaGlsZHJlbjogY29waWVkID8gX2pzeChDaGVjaywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IHRleHQtZ3JlZW4tNTAwIiB9KSA6IF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBtYi0yIiwgY2hpbGRyZW46IF9qc3hzKCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UiLCBjaGlsZHJlbjogWyJMZW5ndGg6ICIsIGxlbmd0aF0gfSkgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICI4IiwgbWF4OiAiNjQiLCB2YWx1ZTogbGVuZ3RoLCBvbkNoYW5nZTogZSA9PiBzZXRMZW5ndGgoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBoLTIgYmctZ3JheS0yMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlciBhY2NlbnQtYnJhbmQtNjAwIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHAtNCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay04MDAgcm91bmRlZC14bCBjdXJzb3ItcG9pbnRlciBob3Zlcjpib3JkZXItYnJhbmQtNTAwIHRyYW5zaXRpb24tY29sb3JzIHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJjaGVja2JveCIsIGNoZWNrZWQ6IGluY2x1ZGVOdW1iZXJzLCBvbkNoYW5nZTogZSA9PiBzZXRJbmNsdWRlTnVtYmVycyhlLnRhcmdldC5jaGVja2VkKSwgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LWJyYW5kLTYwMCByb3VuZGVkIiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAiLCBjaGlsZHJlbjogIk51bWJlcnMiIH0pXSB9KSwgX2pzeHMoImxhYmVsIiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcC00IGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCByb3VuZGVkLXhsIGN1cnNvci1wb2ludGVyIGhvdmVyOmJvcmRlci1icmFuZC01MDAgdHJhbnNpdGlvbi1jb2xvcnMgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImNoZWNrYm94IiwgY2hlY2tlZDogaW5jbHVkZVN5bWJvbHMsIG9uQ2hhbmdlOiBlID0+IHNldEluY2x1ZGVTeW1ib2xzKGUudGFyZ2V0LmNoZWNrZWQpLCBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtYnJhbmQtNjAwIHJvdW5kZWQiIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCIsIGNoaWxkcmVuOiAiU3ltYm9scyIgfSldIH0pXSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIFFSIENvZGUgR2VuZXJhdG9yIC0tLQpleHBvcnQgY29uc3QgUXJDb2RlR2VuZXJhdG9yID0gKCkgPT4gewogICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnaHR0cHM6Ly93aXJlbmluamEuaW8nKTsKICAgIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IHVzZVN0YXRlKDI1Nik7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIlFSIENvZGUgR2VuZXJhdG9yIiwgZGVzY3JpcHRpb246ICJHZW5lcmF0ZSBoaWdoLXF1YWxpdHkgUVIgY29kZXMgZm9yIFVSTHMsIHRleHQsIG9yIGNvbnRhY3QgaW5mb3JtYXRpb24uIiwgaWNvbjogUXJDb2RlLCBjYXRlZ29yeTogIlRleHQiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTR4bCBteC1hdXRvIGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgZ2FwLTEyIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHNwYWNlLXktNiB3LWZ1bGwiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJRUiBDb250ZW50IiB9KSwgX2pzeCgidGV4dGFyZWEiLCB7IHZhbHVlOiB2YWx1ZSwgb25DaGFuZ2U6IGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC00MCBwLTUgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgdGV4dC1zbSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgcmVzaXplLW5vbmUgc2hhZG93LWlubmVyIiwgcGxhY2Vob2xkZXI6ICJQYXN0ZSBhIFVSTCBvciB0eXBlIHRleHQuLi4iIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46IFsiU2l6ZTogIiwgc2l6ZSwgInB4Il0gfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIxMjgiLCBtYXg6ICI1MTIiLCBzdGVwOiAiMTYiLCB2YWx1ZTogc2l6ZSwgb25DaGFuZ2U6IGUgPT4gc2V0U2l6ZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtMiBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC02MDAiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIHAtMTAgcm91bmRlZC1bMi41cmVtXSBzaGFkb3ctc3RyaXBlIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgcC00IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS01MCBzaGFkb3ctaW5uZXIgbWItOCIsIGNoaWxkcmVuOiBfanN4KFFSQ29kZSwgeyB2YWx1ZTogdmFsdWUsIHNpemU6IHNpemUgfSkgfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdmdEYXRhID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhzdmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z0Jsb2IgPSBuZXcgQmxvYihbc3ZnRGF0YV0sIHsgdHlwZTogJ2ltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCcgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzdmdCbG9iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVybDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gJ3FyY29kZS5zdmcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogInB4LTEwIHB5LTMuNSBiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBzaGFkb3ctbGcgc2hhZG93LWJyYW5kLTYwMC8yMCBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogW19qc3goRG93bmxvYWQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgRG93bmxvYWQgU1ZHIl0gfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBUZXh0IFN1bW1hcml6ZXIgLS0tCmV4cG9ydCBjb25zdCBUZXh0U3VtbWFyaXplciA9ICgpID0+IHsKICAgIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtzdW1tYXJ5LCBzZXRTdW1tYXJ5XSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBoYW5kbGVTdW1tYXJpemUgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCF0ZXh0LnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICBzZXRTdW1tYXJ5KCcnKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBnZW5lcmF0ZVRleHQoYFBsZWFzZSBwcm92aWRlIGEgY29uY2lzZSwgaGlnaC1sZXZlbCBzdW1tYXJ5IG9mIHRoZSBmb2xsb3dpbmcgdGV4dC4gVXNlIGJ1bGxldCBwb2ludHMgZm9yIGtleSB0YWtlYXdheXMgaWYgYXBwcm9wcmlhdGU6XG5cbiR7dGV4dH1gKTsKICAgICAgICAgICAgc2V0U3VtbWFyeShyZXMpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICBhbGVydCgiRmFpbGVkIHRvIHN1bW1hcml6ZSB0ZXh0LiBQbGVhc2UgdHJ5IGFnYWluLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJBSSBUZXh0IFN1bW1hcml6ZXIiLCBkZXNjcmlwdGlvbjogIkdldCB0aGUgZ2lzdCBvZiBsb25nIGFydGljbGVzIG9yIGRvY3VtZW50cyBpbnN0YW50bHkgdXNpbmcgR2VtaW5pIDMgRmxhc2guIiwgaWNvbjogQWxpZ25MZWZ0LCBjYXRlZ29yeTogIlRleHQiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTV4bCBteC1hdXRvIHNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUiLCBjaGlsZHJlbjogW19qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogdGV4dCwgb25DaGFuZ2U6IGUgPT4gc2V0VGV4dChlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBoLTgwIHAtOCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIHNoYWRvdy1pbm5lciByZXNpemUtbm9uZSB0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkIHRyYW5zaXRpb24tYWxsIiwgcGxhY2Vob2xkZXI6ICJQYXN0ZSB0aGUgbG9uZyB0ZXh0IHlvdSB3YW50IHN1bW1hcml6ZWQgaGVyZS4uLiIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGJvdHRvbS00IHJpZ2h0LTQgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBiZy13aGl0ZS84MCBkYXJrOmJnLWRhcmstOTAwLzgwIHB4LTIgcHktMSByb3VuZGVkIGJhY2tkcm9wLWJsdXItc20gYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBbdGV4dC5sZW5ndGgsICIgY2hhcmFjdGVycyJdIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlU3VtbWFyaXplLCBkaXNhYmxlZDogaXNMb2FkaW5nIHx8ICF0ZXh0LnRyaW0oKSwgY2xhc3NOYW1lOiAidy1mdWxsIHB5LTQgYmctYnJhbmQtNjAwIGhvdmVyOmJnLWJyYW5kLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHNoYWRvdy14bCBzaGFkb3ctYnJhbmQtNjAwLzIwIGRpc2FibGVkOm9wYWNpdHktNTAgdHJhbnNpdGlvbi1hbGwgYWN0aXZlOnNjYWxlLVswLjk5XSIsIGNoaWxkcmVuOiBbaXNMb2FkaW5nID8gX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogInctNSBoLTUgYW5pbWF0ZS1zcGluIiB9KSA6IF9qc3goU3BhcmtsZXMsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgU3VtbWFyaXplIHdpdGggQUkiXSB9KSwgc3VtbWFyeSAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tMiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi02IiwgY2hpbGRyZW46IFtfanN4cygiaDQiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWJyYW5kLTYwMCB1cHBlcmNhc2UgdGV4dC14cyB0cmFja2luZy13aWRlc3QgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goU3BhcmtsZXMsIHsgY2xhc3NOYW1lOiAidy0zIGgtMyIgfSksICIgU3VtbWFyeSBSZXN1bHQiXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzdW1tYXJ5KSwgY2xhc3NOYW1lOiAicC0yIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1icmFuZC02MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwcm9zZSBkYXJrOnByb3NlLWludmVydCBtYXgtdy1ub25lIHRleHQtYmFzZSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAiLCBjaGlsZHJlbjogc3VtbWFyeS5zcGxpdCgnXG4nKS5tYXAoKGxpbmUsIGkpID0+IF9qc3goInAiLCB7IGNoaWxkcmVuOiBsaW5lIH0sIGkpKSB9KV0gfSkpXSB9KSB9KSk7Cn07Ci8vIC0tLSBCYXJjb2RlIEdlbmVyYXRvciAtLS0KZXhwb3J0IGNvbnN0IEJhcmNvZGVHZW5lcmF0b3IgPSAoKSA9PiB7CiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKCdOSU5KQTEyMycpOwogICAgY29uc3QgYmFyY29kZVJlZiA9IHVzZVJlZihudWxsKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgaWYgKGJhcmNvZGVSZWYuY3VycmVudCAmJiB2YWx1ZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgSnNCYXJjb2RlKGJhcmNvZGVSZWYuY3VycmVudCwgdmFsdWUsIHsgZm9ybWF0OiAiQ09ERTEyOCIsIGRpc3BsYXlWYWx1ZTogdHJ1ZSwgbGluZUNvbG9yOiAiIzAwMCIsIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsIHdpZHRoOiAyLCBoZWlnaHQ6IDEwMCB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkgeyB9CiAgICAgICAgfQogICAgfSwgW3ZhbHVlXSk7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkJhcmNvZGUgR2VuZXJhdG9yIiwgZGVzY3JpcHRpb246ICJDcmVhdGUgc3RhbmRhcmQgQ09ERTEyOCBiYXJjb2RlcyBmb3IgaW52ZW50b3J5LCB0cmFja2luZywgb3IgYXNzZXQgdGFncy4iLCBpY29uOiBTY2FuQmFyY29kZSwgY2F0ZWdvcnk6ICJUZXh0IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtMTIgbWF4LXcteGwgbXgtYXV0byB0ZXh0LWNlbnRlciBzcGFjZS15LTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJCYXJjb2RlIFZhbHVlIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHZhbHVlOiB2YWx1ZSwgb25DaGFuZ2U6IGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHRleHQtY2VudGVyIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0ZXh0LXhsIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctaW5uZXIiLCBwbGFjZWhvbGRlcjogIkVudGVyIGJhcmNvZGUgdGV4dC4uLiIgfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIHAtMTIgcm91bmRlZC1bMi41cmVtXSBib3JkZXIgYm9yZGVyLWdyYXktMTAwIHNoYWRvdy1zdHJpcGUgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLWgtWzIwMHB4XSIsIGNoaWxkcmVuOiBfanN4KCJzdmciLCB7IHJlZjogYmFyY29kZVJlZiwgY2xhc3NOYW1lOiAibWF4LXctZnVsbCBoLWF1dG8iIH0pIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2ZyA9IGJhcmNvZGVSZWYuY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z0RhdGEgPSBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHN2Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKyA0MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICsgNDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDIwLCAyMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gYGJhcmNvZGUtJHt2YWx1ZX0ucG5nYDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdmdEYXRhKSkpOwogICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogInB4LTEwIHB5LTQgYmctZ3JheS05MDAgZGFyazpiZy13aGl0ZSB0ZXh0LXdoaXRlIGRhcms6dGV4dC1ncmF5LTkwMCByb3VuZGVkLXhsIGZvbnQtYm9sZCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBteC1hdXRvIHNoYWRvdy14bCBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogW19qc3goRG93bmxvYWQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgRG93bmxvYWQgUE5HIl0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIExpc3QgUmFuZG9taXplciAtLS0KZXhwb3J0IGNvbnN0IExpc3RSYW5kb21pemVyID0gKCkgPT4gewogICAgY29uc3QgW2l0ZW1zLCBzZXRJdGVtc10gPSB1c2VTdGF0ZSgnSXRlbSAxXG5JdGVtIDJcbkl0ZW0gM1xuSXRlbSA0Jyk7CiAgICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3Qgc2h1ZmZsZSA9ICgpID0+IHsKICAgICAgICBjb25zdCBhcnIgPSBpdGVtcy5zcGxpdCgnXG4nKS5maWx0ZXIoaSA9PiBpLnRyaW0oKSAhPT0gJycpOwogICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgewogICAgICAgICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7CiAgICAgICAgICAgIFthcnJbaV0sIGFycltqXV0gPSBbYXJyW2pdLCBhcnJbaV1dOwogICAgICAgIH0KICAgICAgICBzZXRJdGVtcyhhcnIuam9pbignXG4nKSk7CiAgICB9OwogICAgY29uc3QgaGFuZGxlQ29weSA9ICgpID0+IHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpdGVtcyk7CiAgICAgICAgc2V0Q29waWVkKHRydWUpOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJMaXN0IFJhbmRvbWl6ZXIiLCBkZXNjcmlwdGlvbjogIlF1aWNrbHkgc2h1ZmZsZSBhbnkgbGlzdCBvZiBpdGVtcywgbmFtZXMsIG9yIGNob2ljZXMgcmFuZG9tbHkuIiwgaWNvbjogU2h1ZmZsZSwgY2F0ZWdvcnk6ICJUZXh0IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy00eGwgbXgtYXV0byBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogaXRlbXMsIG9uQ2hhbmdlOiBlID0+IHNldEl0ZW1zKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtODAgcC04IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctaW5uZXIgdHJhbnNpdGlvbi1hbGwiLCBwbGFjZWhvbGRlcjogIlBhc3RlIGl0ZW1zIGhlcmUsIG9uZSBwZXIgbGluZS4uLiIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IHNodWZmbGUsIGNsYXNzTmFtZTogImZsZXgtMSBweS00IGJnLWJyYW5kLTYwMCBob3ZlcjpiZy1icmFuZC03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBzaGFkb3ctbGcgc2hhZG93LWJyYW5kLTYwMC8yMCBhY3RpdmU6c2NhbGUtWzAuOTldIHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IFtfanN4KFNodWZmbGUsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgU2h1ZmZsZSBMaXN0Il0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUNvcHksIGNsYXNzTmFtZTogInB4LTggYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBmb250LWJvbGQgcm91bmRlZC14bCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBob3ZlcjpiZy1ncmF5LTUwIHRyYW5zaXRpb24tYWxsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtjb3BpZWQgPyBfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1ncmVlbi01MDAiIH0pIDogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pLCAiICIsIGNvcGllZCA/ICdDb3BpZWQnIDogJ0NvcHknXSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIFRleHQgdG8gSGFuZHdyaXRpbmcgLS0tCmV4cG9ydCBjb25zdCBIYW5kd3JpdGluZ0NvbnZlcnRlciA9ICgpID0+IHsKICAgIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlKCdNeSBkZWFyZXN0IGZyaWVuZCxcblxuSSBhbSB3cml0aW5nIHRvIHlvdSBmcm9tIHRoZSBkaWdpdGFsIHJlYWxtIHVzaW5nIFdpcmVOaW5qYS4gVGhpcyB0b29sIHRyYW5zZm9ybXMgcGxhaW4gdGV4dCBpbnRvIHNvbWV0aGluZyBtb3JlIHBlcnNvbmFsLlxuXG5CZXN0LFxuVGhlIE5pbmphJyk7CiAgICBjb25zdCBbaXNFeHBvcnRpbmcsIHNldElzRXhwb3J0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IHN1cmZhY2VSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCBoYW5kbGVEb3dubG9hZCA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIXN1cmZhY2VSZWYuY3VycmVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzRXhwb3J0aW5nKHRydWUpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IGRhdGFVcmwgPSBhd2FpdCBodG1sVG9JbWFnZS50b1BuZyhzdXJmYWNlUmVmLmN1cnJlbnQsIHsgcGl4ZWxSYXRpbzogMiwgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicgfSk7CiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGRhdGFVcmw7CiAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSAnaGFuZHdyaXR0ZW4tbm90ZS5wbmcnOwogICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0V4cG9ydGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiVGV4dCB0byBIYW5kd3JpdGluZyIsIGRlc2NyaXB0aW9uOiAiQ29udmVydCBkaWdpdGFsIHRleHQgaW50byBhbiBvcmdhbmljIGhhbmR3cml0aW5nIHN0eWxlIGZvciBub3RlcywgbGV0dGVycywgb3Igc29jaWFsIHBvc3RzLiIsIGljb246IFBlbmNpbExpbmUsIGNhdGVnb3J5OiAiVGV4dCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNnhsIG14LWF1dG8gZ3JpZCBsZzpncmlkLWNvbHMtMiBnYXAtOCBoLVs3NTBweF0iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIklucHV0IFRleHQiIH0pLCBfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IHRleHQsIG9uQ2hhbmdlOiBlID0+IHNldFRleHQoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJmbGV4LTEgcC02IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0ZXh0LWJhc2UgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIHJlc2l6ZS1ub25lIHNoYWRvdy1pbm5lciBsZWFkaW5nLXJlbGF4ZWQgdHJhbnNpdGlvbi1hbGwiLCBwbGFjZWhvbGRlcjogIlR5cGUgeW91ciBsZXR0ZXIgaGVyZS4uLiIgfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZURvd25sb2FkLCBkaXNhYmxlZDogaXNFeHBvcnRpbmcsIGNsYXNzTmFtZTogInB5LTQgYmctYnJhbmQtNjAwIGhvdmVyOmJnLWJyYW5kLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHNoYWRvdy1sZyBhY3RpdmU6c2NhbGUtWzAuOThdIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktNTAiLCBjaGlsZHJlbjogW2lzRXhwb3J0aW5nID8gX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogInctNSBoLTUgYW5pbWF0ZS1zcGluIiB9KSA6IF9qc3goSW1hZ2VJY29uLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCAiIFNhdmUgYXMgSW1hZ2UiXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIlBhcGVyIFByZXZpZXciIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay04MDAgc2hhZG93LTJ4bCByZWxhdGl2ZSBiZy1bI2ZkZmRmZF0iLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgcmVmOiBzdXJmYWNlUmVmLCBjbGFzc05hbWU6ICJoLWZ1bGwgdy1mdWxsIHAtMTIgb3ZlcmZsb3cteS1hdXRvIGN1c3RvbS1zY3JvbGxiYXIgdGV4dC1ncmF5LTgwMCIsIHN0eWxlOiB7IGZvbnRGYW1pbHk6ICciRGFuY2luZyBTY3JpcHQiLCBjdXJzaXZlJywgZm9udFNpemU6ICcyOHB4JywgbGluZUhlaWdodDogJzEuNicsIGJhY2tncm91bmRJbWFnZTogJ3JhZGlhbC1ncmFkaWVudCgjZTVlN2ViIDFweCwgdHJhbnNwYXJlbnQgMCknLCBiYWNrZ3JvdW5kU2l6ZTogJzMwcHggMzBweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJy0xNXB4IC0xNXB4JyB9LCBjaGlsZHJlbjogdGV4dC5zcGxpdCgnXG4nKS5tYXAoKGxpbmUsIGkpID0+IF9qc3goInAiLCB7IGNsYXNzTmFtZTogIm1iLTQiLCBjaGlsZHJlbjogbGluZSB8fCAnXHUwMEEwJyB9LCBpKSkgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgaW5zZXQteC0wIHRvcC0wIGgtMSBiZy1ncmFkaWVudC10by1yIGZyb20tdHJhbnNwYXJlbnQgdmlhLWdyYXktMTAwIHRvLXRyYW5zcGFyZW50IiB9KV0gfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBRdWljayBOb3RlcyAoWmVuIE5vdGVzKSAtLS0KZXhwb3J0IGNvbnN0IFF1aWNrTm90ZXMgPSAoKSA9PiB7CiAgICBjb25zdCBbbm90ZXMsIHNldE5vdGVzXSA9IHVzZVN0YXRlKCgpID0+IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCduaW5qYV9xdWlja19ub3RlcycpIHx8ICcnKTsKICAgIGNvbnN0IFtzYXZlZCwgc2V0U2F2ZWRdID0gdXNlU3RhdGUoZmFsc2UpOwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbmluamFfcXVpY2tfbm90ZXMnLCBub3Rlcyk7CiAgICAgICAgICAgIHNldFNhdmVkKHRydWUpOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldFNhdmVkKGZhbHNlKSwgMTUwMCk7CiAgICAgICAgfSwgMTAwMCk7CiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7CiAgICB9LCBbbm90ZXNdKTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiWmVuIE5vdGVzIiwgZGVzY3JpcHRpb246ICJBIG1pbmltYWwsIGRpc3RyYWN0aW9uLWZyZWUgc3BhY2UgZm9yIHlvdXIgcXVpY2sgdGhvdWdodHMuIFlvdXIgbm90ZXMgYXJlIGF1dG9tYXRpY2FsbHkgc2F2ZWQgdG8geW91ciBsb2NhbCBicm93c2VyIHN0b3JhZ2UuIiwgaWNvbjogRmlsZUVkaXQsIGNhdGVnb3J5OiAiVGV4dCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNnhsIG14LWF1dG8gaC1bNjUwcHhdIHJlbGF0aXZlIiwgY2hpbGRyZW46IFtfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IG5vdGVzLCBvbkNoYW5nZTogZSA9PiBzZXROb3RlcyhlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBoLWZ1bGwgcC0xMiBtZDpwLTE2IHJvdW5kZWQtWzIuNXJlbV0gYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwIHRleHQteGwgZm9udC1tZWRpdW0gcmVzaXplLW5vbmUgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctYnJhbmQtNTAwLzIwIHNoYWRvdy1pbm5lciBsZWFkaW5nLXJlbGF4ZWQgdHJhbnNpdGlvbi1hbGwiLCBwbGFjZWhvbGRlcjogIkRlZXAgYnJlYXRocy4gQ2xlYXIgeW91ciBtaW5kLiBTdGFydCB0eXBpbmcuLi4iIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGJvdHRvbS0xMiByaWdodC0xNiBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDAiLCBjaGlsZHJlbjogc2F2ZWQgPyAoX2pzeHMoInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtZ3JlZW4tNTAwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIiwgY2hpbGRyZW46IFtfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pLCAiIFByb2dyZXNzIFNhdmVkIl0gfSkpIDogKF9qc3hzKCJzcGFuIiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSIsIGNoaWxkcmVuOiBbX2pzeChTYXZlLCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pLCAiIEF1dG8tc2F2aW5nLi4uIl0gfSkpIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBKU09OIEZvcm1hdHRlciAmIFZhbGlkYXRvciAtLS0KZXhwb3J0IGNvbnN0IEpzb25Gb3JtYXR0ZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbaW5wdXQsIHNldElucHV0XSA9IHVzZVN0YXRlKCd7Im5hbWUiOiJXaXJlTmluamEiLCJ0b29scyI6WyJBSSIsIlRleHQiLCJDb2RlIl0sInZlcnNpb24iOjEuMH0nKTsKICAgIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGZvcm1hdEpzb24gPSAodGFiU2l6ZSA9IDIpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KTsKICAgICAgICAgICAgc2V0T3V0cHV0KEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgdGFiU2l6ZSkpOwogICAgICAgICAgICBzZXRFcnJvcihudWxsKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlKTsKICAgICAgICAgICAgc2V0T3V0cHV0KCcnKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgbWluaWZ5SnNvbiA9ICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KTsKICAgICAgICAgICAgc2V0T3V0cHV0KEpTT04uc3RyaW5naWZ5KHBhcnNlZCkpOwogICAgICAgICAgICBzZXRFcnJvcihudWxsKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlKTsKICAgICAgICAgICAgc2V0T3V0cHV0KCcnKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgaGFuZGxlQ29weSA9ICgpID0+IHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChvdXRwdXQpOwogICAgICAgIHNldENvcGllZCh0cnVlKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZChmYWxzZSksIDIwMDApOwogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiSlNPTiBGb3JtYXR0ZXIgJiBWYWxpZGF0b3IiLCBkZXNjcmlwdGlvbjogIkNsZWFuLCBtaW5pZnksIGFuZCB2YWxpZGF0ZSB5b3VyIEpTT04gZGF0YSBpbnN0YW50bHkuIEJlYXV0aWZ1bGx5IGZvcm1hdHRlZCBmb3IgcmVhZGFiaWxpdHkuIiwgaWNvbjogQ29kZSwgY2F0ZWdvcnk6ICJUZXh0IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IGgtWzY1MHB4XSIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBoLWZ1bGwiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yIiwgY2hpbGRyZW46IFtfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KEVkaXQzLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pLCAiIElucHV0IEpTT04iXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRJbnB1dCgnJyksIGNsYXNzTmFtZTogInRleHQteHMgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LXJlZC01MDAiLCBjaGlsZHJlbjogIkNsZWFyIiB9KV0gfSksIF9qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogaW5wdXQsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5wdXQoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJmbGV4LTEgcC01IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtbW9ubyB0ZXh0LXNtIHJlc2l6ZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIgdHJhbnNpdGlvbi1hbGwiLCBwbGFjZWhvbGRlcjogIlBhc3RlIHlvdXIgbWVzc3kgSlNPTiBoZXJlLi4uIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtNCBncmlkIGdyaWQtY29scy0zIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IGZvcm1hdEpzb24oMiksIGNsYXNzTmFtZTogInB5LTIgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC1sZyB0ZXh0LXNtIGZvbnQtYm9sZCBob3ZlcjpiZy1icmFuZC03MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogIkZvcm1hdCAoMi1zcCkiIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IGZvcm1hdEpzb24oNCksIGNsYXNzTmFtZTogInB5LTIgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC1sZyB0ZXh0LXNtIGZvbnQtYm9sZCBob3ZlcjpiZy1icmFuZC03MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogIkZvcm1hdCAoNC1zcCkiIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IG1pbmlmeUpzb24sIGNsYXNzTmFtZTogInB5LTIgYmctZ3JheS04MDAgdGV4dC13aGl0ZSByb3VuZGVkLWxnIHRleHQtc20gZm9udC1ib2xkIGhvdmVyOmJnLWJsYWNrIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46ICJNaW5pZnkiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgaC1mdWxsIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMiIsIGNoaWxkcmVuOiBbX2pzeHMoImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChFeWUsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgT3V0cHV0Il0gfSksIG91dHB1dCAmJiBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBoYW5kbGVDb3B5LCBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtYnJhbmQtNjAwIGZvbnQtYm9sZCIsIGNoaWxkcmVuOiBbY29waWVkID8gX2pzeChDaGVjaywgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIiB9KSA6IF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIiB9KSwgIiAiLCBjb3BpZWQgPyAnQ29waWVkJyA6ICdDb3B5J10gfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogYGZsZXgtMSBwLTUgcm91bmRlZC14bCBib3JkZXIgZm9udC1tb25vIHRleHQtc20gb3ZlcmZsb3ctYXV0byB0cmFuc2l0aW9uLWNvbG9ycyAke2Vycm9yID8gJ2JvcmRlci1yZWQtMjAwIGJnLXJlZC01MCBkYXJrOmJnLXJlZC05MDAvMTAnIDogJ2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lcid9YCwgY2hpbGRyZW46IGVycm9yID8gX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1yZWQtNjAwIGRhcms6dGV4dC1yZWQtNDAwIGZsZXggaXRlbXMtc3RhcnQgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goQWxlcnRDaXJjbGUsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBzaHJpbmstMCBtdC0wLjUiIH0pLCAiICIsIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIiwgY2hpbGRyZW46ICJJbnZhbGlkIEpTT04iIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJvcGFjaXR5LTgwIHRleHQteHMgbXQtMSIsIGNoaWxkcmVuOiBlcnJvciB9KV0gfSldIH0pIDogb3V0cHV0ID8gX2pzeCgicHJlIiwgeyBjbGFzc05hbWU6ICJ3aGl0ZXNwYWNlLXByZS13cmFwIiwgY2hpbGRyZW46IG91dHB1dCB9KSA6IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ3JheS00MDAgaXRhbGljIiwgY2hpbGRyZW46ICJGb3JtYXR0ZWQgSlNPTiB3aWxsIGFwcGVhciBoZXJlLi4uIiB9KSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIExvcmVtIElwc3VtIEdlbmVyYXRvciAtLS0KZXhwb3J0IGNvbnN0IExvcmVtSXBzdW0gPSAoKSA9PiB7CiAgICBjb25zdCBbdHlwZSwgc2V0VHlwZV0gPSB1c2VTdGF0ZSgncGFyYWdyYXBocycpOwogICAgY29uc3QgW2NvdW50LCBzZXRDb3VudF0gPSB1c2VTdGF0ZSgzKTsKICAgIGNvbnN0IFtvdXRwdXQsIHNldE91dHB1dF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3Qgd29yZHMgPSBbImxvcmVtIiwgImlwc3VtIiwgImRvbG9yIiwgInNpdCIsICJhbWV0IiwgImNvbnNlY3RldHVyIiwgImFkaXBpc2NpbmciLCAiZWxpdCIsICJjdXJhYml0dXIiLCAidmVsIiwgImhlbmRyZXJpdCIsICJsaWJlcm8iLCAiZWxlaWZlbmQiLCAiYmxhbmRpdCIsICJudW5jIiwgIm9ybmFyZSIsICJvZGlvIiwgInV0IiwgIm9yY2kiLCAiZ3JhdmlkYSIsICJpbXBlcmRpZXQiLCAibnVsbGFtIiwgInB1cnVzIiwgImxhY2luaWEiLCAiYSIsICJwcmV0aXVtIiwgInF1aXMiLCAiY29uZ3VlIiwgInByYWVzZW50IiwgInNhZ2l0dGlzIiwgImxhb3JlZXQiLCAiYXVjdG9yIiwgIm1hdXJpcyIsICJub24iLCAidmVsaXQiLCAiZXJvcyIsICJkaWN0dW0iLCAicHJvaW4iLCAiYWNjdW1zYW4iLCAic2FwaWVuIiwgIm5lYyIsICJtYXNzYSIsICJ2b2x1dHBhdCIsICJ2ZW5lbmF0aXMiLCAic2VkIiwgImV1IiwgIm1vbGVzdGllIiwgImxhY3VzIiwgInF1aXNxdWUiLCAicG9ydHRpdG9yIiwgImxpZ3VsYSIsICJkdWkiLCAibW9sbGlzIiwgInRlbXB1cyIsICJhdCIsICJtYWduYSIsICJ2ZXN0aWJ1bHVtIiwgInR1cnBpcyIsICJhYyIsICJkaWFtIiwgInRpbmNpZHVudCIsICJpZCIsICJjb25kaW1lbnR1bSIsICJlbmltIiwgInNvZGFsZXMiLCAiaW4iLCAiaGFjIiwgImhhYml0YXNzZSIsICJwbGF0ZWEiLCAiZGljdHVtc3QiLCAiYWVuZWFuIiwgIm5lcXVlIiwgImZ1c2NlIiwgImF1Z3VlIiwgImxlbyIsICJlZ2V0IiwgInNlbXBlciIsICJtYXR0aXMiLCAidG9ydG9yIiwgInNjZWxlcmlzcXVlIiwgIm51bGxhIiwgImludGVyZHVtIiwgInRlbGx1cyIsICJtYWxlc3VhZGEiLCAicmhvbmN1cyIsICJwb3J0YSIsICJzZW0iLCAiYWxpcXVldCIsICJldCIsICJuYW0iLCAic3VzcGVuZGlzc2UiLCAicG90ZW50aSIsICJ2aXZhbXVzIiwgImx1Y3R1cyIsICJmcmluZ2lsbGEiLCAiZXJhdCIsICJkb25lYyIsICJqdXN0byIsICJ2ZWhpY3VsYSIsICJ1bHRyaWNpZXMiLCAidmFyaXVzIiwgImFudGUiLCAicHJpbWlzIiwgImZhdWNpYnVzIiwgInVsdHJpY2VzIiwgInBvc3VlcmUiLCAiY3ViaWxpYSIsICJjdXJhZSIsICJldGlhbSIsICJjdXJzdXMiLCAiYWxpcXVhbSIsICJmaW5pYnVzIiwgInBoYXJldHJhIiwgImludGVnZXIiLCAiZmFjaWxpc2lzIiwgIm5pc2wiLCAidml0YWUiLCAibWFnbmEiLCAiY29tbW9kbyJdOwogICAgY29uc3QgZ2VuZXJhdGUgPSAoKSA9PiB7CiAgICAgICAgbGV0IHJlc3VsdCA9ICcnOwogICAgICAgIGNvbnN0IGdldFNlbnRlbmNlID0gKCkgPT4gewogICAgICAgICAgICBjb25zdCBsZW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkgKyA1OwogICAgICAgICAgICBsZXQgcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGxlbiB9LCAoKSA9PiB3b3Jkc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB3b3Jkcy5sZW5ndGgpXSkuam9pbignICcpOwogICAgICAgICAgICByZXR1cm4gcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgKyAnLic7CiAgICAgICAgfTsKICAgICAgICBpZiAodHlwZSA9PT0gJ3dvcmRzJykgewogICAgICAgICAgICByZXN1bHQgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoKSA9PiB3b3Jkc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB3b3Jkcy5sZW5ndGgpXSkuam9pbignICcpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc2VudGVuY2VzJykgewogICAgICAgICAgICByZXN1bHQgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCBnZXRTZW50ZW5jZSkuam9pbignICcpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKCkgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNSB9LCBnZXRTZW50ZW5jZSkuam9pbignICcpKS5qb2luKCdcblxuJyk7CiAgICAgICAgfQogICAgICAgIHNldE91dHB1dChyZXN1bHQpOwogICAgfTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7IGdlbmVyYXRlKCk7IH0sIFtdKTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiTG9yZW0gSXBzdW0gR2VuZXJhdG9yIiwgZGVzY3JpcHRpb246ICJHZW5lcmF0ZSBwcm9mZXNzaW9uYWwgZHVtbXkgdGV4dCBmb3IgeW91ciBtb2NrdXBzLCB3ZWJzaXRlcywgYW5kIGRlc2lnbiBwcm9qZWN0cy4iLCBpY29uOiBBbGlnbkp1c3RpZnksIGNhdGVnb3J5OiAiVGV4dCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNHhsIG14LWF1dG8iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTJ4bCBwLTYgbWItOCBmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtNiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSB3LWZ1bGwiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJDb3VudCIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgbWluOiAiMSIsIG1heDogIjEwMCIsIHZhbHVlOiBjb3VudCwgb25DaGFuZ2U6IChlKSA9PiBzZXRDb3VudChNYXRoLm1heCgxLCBwYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIgdHJhbnNpdGlvbi1hbGwiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHctZnVsbCIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIlR5cGUiIH0pLCBfanN4cygic2VsZWN0IiwgeyB2YWx1ZTogdHlwZSwgb25DaGFuZ2U6IChlKSA9PiBzZXRUeXBlKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgc2hhZG93LWlubmVyIHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IFtfanN4KCJvcHRpb24iLCB7IHZhbHVlOiAicGFyYWdyYXBocyIsIGNoaWxkcmVuOiAiUGFyYWdyYXBocyIgfSksIF9qc3goIm9wdGlvbiIsIHsgdmFsdWU6ICJzZW50ZW5jZXMiLCBjaGlsZHJlbjogIlNlbnRlbmNlcyIgfSksIF9qc3goIm9wdGlvbiIsIHsgdmFsdWU6ICJ3b3JkcyIsIGNoaWxkcmVuOiAiV29yZHMiIH0pXSB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogZ2VuZXJhdGUsIGNsYXNzTmFtZTogImgtWzUycHhdIHB4LTggYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIG10LTYgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46ICJHZW5lcmF0ZSIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC04IHJlbGF0aXZlIHNoYWRvdy1zdHJpcGUtc20iLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4geyBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChvdXRwdXQpOyBzZXRDb3BpZWQodHJ1ZSk7IHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7IH0sIGNsYXNzTmFtZTogImFic29sdXRlIHRvcC00IHJpZ2h0LTQgcC0yLjUgYmctYnJhbmQtNTAgZGFyazpiZy1icmFuZC05MDAvMzAgdGV4dC1icmFuZC02MDAgZGFyazp0ZXh0LWJyYW5kLTQwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWJyYW5kLTEwMCB0cmFuc2l0aW9uLWFsbCIsIGNoaWxkcmVuOiBjb3BpZWQgPyBfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIDogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInByb3NlIGRhcms6cHJvc2UtaW52ZXJ0IG1heC13LW5vbmUgd2hpdGVzcGFjZS1wcmUtd3JhcCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC1ncmF5LTEwMCBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1iYXNlIiwgY2hpbGRyZW46IG91dHB1dCB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIFRhbGx5IENvdW50ZXIgLS0tCmV4cG9ydCBjb25zdCBUYWxseUNvdW50ZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbY291bnQsIHNldENvdW50XSA9IHVzZVN0YXRlKDApOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJUYWxseSBDb3VudGVyIiwgZGVzY3JpcHRpb246ICJTaW1wbGUgZGlnaXRhbCBjb3VudGVyIGZvciB0cmFja2luZyBhbnl0aGluZy4iLCBpY29uOiBNb3VzZVBvaW50ZXJDbGljaywgY2F0ZWdvcnk6ICJUZXh0IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtMjAgdGV4dC1jZW50ZXIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTgiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTJyZW1dIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgbGVhZGluZy1ub25lIHRyYWNraW5nLXRpZ2h0ZXIiLCBjaGlsZHJlbjogY291bnQgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0Q291bnQoY291bnQgLSAxKSwgY2xhc3NOYW1lOiAidy0yMCBoLTIwIGJnLXdoaXRlIGRhcms6YmctZGFyay04MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSByb3VuZGVkLTJ4bCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBob3ZlcjpiZy1ncmF5LTUwIHRyYW5zaXRpb24tYWxsIHNoYWRvdy1tZCBhY3RpdmU6c2NhbGUtOTAiLCBjaGlsZHJlbjogX2pzeChNaW51cywgeyBjbGFzc05hbWU6ICJ3LTggaC04IiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRDb3VudChjb3VudCArIDEpLCBjbGFzc05hbWU6ICJ3LTI0IGgtMjQgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC0yeGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc2hhZG93LXhsIHNoYWRvdy1icmFuZC02MDAvMjAgaG92ZXI6YmctYnJhbmQtNzAwIHRyYW5zaXRpb24tYWxsIGFjdGl2ZTpzY2FsZS05MCIsIGNoaWxkcmVuOiBfanN4KFBsdXMsIHsgY2xhc3NOYW1lOiAidy0xMCBoLTEwIiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRDb3VudCgwKSwgY2xhc3NOYW1lOiAidy0yMCBoLTIwIGJnLXdoaXRlIGRhcms6YmctZGFyay04MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSByb3VuZGVkLTJ4bCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBob3ZlcjpiZy1ncmF5LTUwIHRyYW5zaXRpb24tYWxsIHNoYWRvdy1tZCBhY3RpdmU6c2NhbGUtOTAiLCBjaGlsZHJlbjogX2pzeChSb3RhdGVDY3csIHsgY2xhc3NOYW1lOiAidy04IGgtOCIgfSkgfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBDU1YgU3BsaXR0ZXIgLS0tCmV4cG9ydCBjb25zdCBDc3ZTcGxpdHRlciA9ICgpID0+IHsKICAgIGNvbnN0IFtmaWxlLCBzZXRGaWxlXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW3Jvd0NvdW50LCBzZXRSb3dDb3VudF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFtyb3dzUGVyRmlsZSwgc2V0Um93c1BlckZpbGVdID0gdXNlU3RhdGUoMTAwMCk7CiAgICBjb25zdCBbaXNQcm9jZXNzaW5nLCBzZXRJc1Byb2Nlc3NpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW3BhcnNlZERhdGEsIHNldFBhcnNlZERhdGFdID0gdXNlU3RhdGUoW10pOwogICAgY29uc3QgW2hlYWRlciwgc2V0SGVhZGVyXSA9IHVzZVN0YXRlKFtdKTsKICAgIGNvbnN0IGhhbmRsZUZpbGUgPSAoZSkgPT4gewogICAgICAgIGlmIChlLnRhcmdldC5maWxlcz8uWzBdKSB7CiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZS50YXJnZXQuZmlsZXNbMF07CiAgICAgICAgICAgIHNldEZpbGUoc2VsZWN0ZWQpOwogICAgICAgICAgICBQYXBhLnBhcnNlKHNlbGVjdGVkLCB7IGNvbXBsZXRlOiAocmVzdWx0cykgPT4geyBzZXRSb3dDb3VudChyZXN1bHRzLmRhdGEubGVuZ3RoKTsgc2V0SGVhZGVyKHJlc3VsdHMuZGF0YVswXSk7IHNldFBhcnNlZERhdGEocmVzdWx0cy5kYXRhKTsgfSB9KTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgaGFuZGxlU3BsaXQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFmaWxlIHx8IHBhcnNlZERhdGEubGVuZ3RoID09PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0SXNQcm9jZXNzaW5nKHRydWUpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHppcCA9IG5ldyBKU1ppcCgpOwogICAgICAgICAgICBjb25zdCBhY3R1YWxEYXRhID0gcGFyc2VkRGF0YS5zbGljZSgxKTsKICAgICAgICAgICAgbGV0IHBhcnROdW0gPSAxOwogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbERhdGEubGVuZ3RoOyBpICs9IHJvd3NQZXJGaWxlKSB7CiAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IGFjdHVhbERhdGEuc2xpY2UoaSwgaSArIHJvd3NQZXJGaWxlKTsKICAgICAgICAgICAgICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBQYXBhLnVucGFyc2UoW2hlYWRlciwgLi4uY2h1bmtdKTsKICAgICAgICAgICAgICAgIHppcC5maWxlKGBwYXJ0XyR7cGFydE51bX0uY3N2YCwgY3N2Q29udGVudCk7CiAgICAgICAgICAgICAgICBwYXJ0TnVtKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHppcC5nZW5lcmF0ZUFzeW5jKHsgdHlwZTogJ2Jsb2InIH0pOwogICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGNvbnRlbnQpOwogICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7CiAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBgJHtmaWxlLm5hbWUucmVwbGFjZSgnLmNzdicsICcnKX1fc3BsaXQuemlwYDsKICAgICAgICAgICAgbGluay5jbGljaygpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBhbGVydCgiRmFpbGVkIHRvIHNwbGl0IENTVi4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzUHJvY2Vzc2luZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiQ1NWIFNwbGl0dGVyIiwgZGVzY3JpcHRpb246ICJTcGxpdCBsYXJnZSBDU1YgZmlsZXMgaW50byBzbWFsbGVyLCBtYW5hZ2VhYmxlIGNodW5rcyBhdXRvbWF0aWNhbGx5LiIsIGljb246IEZpbGVTcHJlYWRzaGVldCwgY2F0ZWdvcnk6ICJUZXh0IiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTN4bCBteC1hdXRvIHNwYWNlLXktOCIsIGNoaWxkcmVuOiAhZmlsZSA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTN4bCBwLTE2IHRleHQtY2VudGVyIGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgdHJhbnNpdGlvbi1hbGwgY3Vyc29yLXBvaW50ZXIgZ3JvdXAgaG92ZXI6Ym9yZGVyLWJyYW5kLTUwMCIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJmaWxlIiwgYWNjZXB0OiAiLmNzdiIsIG9uQ2hhbmdlOiBoYW5kbGVGaWxlLCBjbGFzc05hbWU6ICJoaWRkZW4iLCBpZDogImNzdi11cCIgfSksIF9qc3hzKCJsYWJlbCIsIHsgaHRtbEZvcjogImNzdi11cCIsIGNsYXNzTmFtZTogImN1cnNvci1wb2ludGVyIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMjAgaC0yMCBiZy1ncmVlbi01MCBkYXJrOmJnLWdyZWVuLTkwMC8zMCB0ZXh0LWdyZWVuLTYwMCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWItNiIsIGNoaWxkcmVuOiBfanN4KFVwbG9hZCwge30pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC14bCBmb250LWJvbGQgbWItMiB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiAiVXBsb2FkIENTViIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAiLCBjaGlsZHJlbjogIkRyYWcgYW5kIGRyb3Agb3IgY2xpY2sgdG8gc2VsZWN0IiB9KV0gfSldIH0pKSA6IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgcm91bmRlZC0yeGwgcC04IHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC00IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInAtMyBiZy1ncmVlbi01MCByb3VuZGVkLXhsIHRleHQtZ3JlZW4tNjAwIiwgY2hpbGRyZW46IF9qc3goRmlsZVNwcmVhZHNoZWV0LCB7fSkgfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgiaDQiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiBmaWxlLm5hbWUgfSksIF9qc3hzKCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiLCBjaGlsZHJlbjogW3Jvd0NvdW50LnRvTG9jYWxlU3RyaW5nKCksICIgcm93cyJdIH0pXSB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0RmlsZShudWxsKSwgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LXJlZC01MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogX2pzeChUcmFzaDIsIHt9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi0zIiwgY2hpbGRyZW46ICJSb3dzIHBlciBGaWxlIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogcm93c1BlckZpbGUsIG9uQ2hhbmdlOiBlID0+IHNldFJvd3NQZXJGaWxlKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIgdHJhbnNpdGlvbi1hbGwiIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlU3BsaXQsIGRpc2FibGVkOiBpc1Byb2Nlc3NpbmcsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHNoYWRvdy1sZyBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogW2lzUHJvY2Vzc2luZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJhbmltYXRlLXNwaW4iIH0pIDogX2pzeChGaWxlU3RhY2ssIHt9KSwgIiBTcGxpdCAmIERvd25sb2FkIFpJUCJdIH0pXSB9KV0gfSkpIH0pIH0pKTsKfTsK","@/components/Tools/ImageTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IERvd25sb2FkLCBMb2FkZXIyLCBSZWZyZXNoQ3csIFVwbG9hZCwgQWxlcnRDaXJjbGUsIFNldHRpbmdzMiwgTWF4aW1pemUsIExvY2ssIFVubG9jaywgTGF5b3V0VGVtcGxhdGUsIEluc3RhZ3JhbSwgWW91dHViZSwgVHdpdHRlciwgRmFjZWJvb2ssIExpbmtlZGluIH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKaW1wb3J0IHsgVG9vbExheW91dCB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29sTGF5b3V0JzsKZXhwb3J0IGNvbnN0IEltYWdlQ29udmVydGVyID0gKCkgPT4gewogICAgY29uc3QgW2ZpbGUsIHNldEZpbGVdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbcHJldmlld1VybCwgc2V0UHJldmlld1VybF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtmb3JtYXQsIHNldEZvcm1hdF0gPSB1c2VTdGF0ZSgncG5nJyk7CiAgICBjb25zdCBbcXVhbGl0eSwgc2V0UXVhbGl0eV0gPSB1c2VTdGF0ZSgwLjkpOwogICAgY29uc3QgW2lzUHJvY2Vzc2luZywgc2V0SXNQcm9jZXNzaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtkb3dubG9hZFVybCwgc2V0RG93bmxvYWRVcmxdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpOwogICAgLy8gQ2xlYW51cCBvYmplY3QgVVJMcyB0byBhdm9pZCBtZW1vcnkgbGVha3MKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICAgICAgaWYgKHByZXZpZXdVcmwpCiAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHByZXZpZXdVcmwpOwogICAgICAgICAgICBpZiAoZG93bmxvYWRVcmwpCiAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTsKICAgICAgICB9OwogICAgfSwgW3ByZXZpZXdVcmwsIGRvd25sb2FkVXJsXSk7CiAgICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gKHNlbGVjdGVkRmlsZSkgPT4gewogICAgICAgIGlmICghc2VsZWN0ZWRGaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHsKICAgICAgICAgICAgc2V0RXJyb3IoIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBpbWFnZSBmaWxlLiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNldEVycm9yKG51bGwpOwogICAgICAgIHNldEZpbGUoc2VsZWN0ZWRGaWxlKTsKICAgICAgICBzZXREb3dubG9hZFVybChudWxsKTsKICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNlbGVjdGVkRmlsZSk7CiAgICAgICAgc2V0UHJldmlld1VybCh1cmwpOwogICAgfTsKICAgIGNvbnN0IGhhbmRsZURyb3AgPSAoZSkgPT4gewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAoZS5kYXRhVHJhbnNmZXIuZmlsZXMgJiYgZS5kYXRhVHJhbnNmZXIuZmlsZXNbMF0pIHsKICAgICAgICAgICAgaGFuZGxlRmlsZUNoYW5nZShlLmRhdGFUcmFuc2Zlci5maWxlc1swXSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGNvbnZlcnRJbWFnZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWZpbGUgfHwgIXByZXZpZXdVcmwpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc1Byb2Nlc3NpbmcodHJ1ZSk7CiAgICAgICAgc2V0RG93bmxvYWRVcmwobnVsbCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgICAgICAgIGltZy5zcmMgPSBwcmV2aWV3VXJsOwogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gcmVzb2x2ZTsKICAgICAgICAgICAgICAgIGltZy5vbmVycm9yID0gcmVqZWN0OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgICAgICBpZiAoIWN0eCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGdldCBjYW52YXMgY29udGV4dCIpOwogICAgICAgICAgICAvLyBGb3IgSUNPLCB3ZSB0eXBpY2FsbHkgd2FudCBzbWFsbGVyIHNxdWFyZSBkaW1lbnNpb25zLCBidXQgYSBzaW1wbGUgY29udmVydGVyIGtlZXBzIG9yaWdpbmFsIG9yIHJlc2l6ZXMgdG8gc3RhbmRhcmQKICAgICAgICAgICAgLy8gTGV0J3Mga2VlcCBvcmlnaW5hbCBkaW1lbnNpb25zIGZvciBzdGFuZGFyZCBmb3JtYXRzLCBidXQgZm9yIElDTyBtYXliZSBsaW1pdCB0byAyNTZ4MjU2IG1heCB0byBiZSBzYWZlL3VzZWZ1bAogICAgICAgICAgICBsZXQgd2lkdGggPSBpbWcud2lkdGg7CiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBpbWcuaGVpZ2h0OwogICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnaWNvJykgewogICAgICAgICAgICAgICAgLy8gU2ltcGxlIGhldXJpc3RpYzogcmVzaXplIGxhcmdlc3QgZGltZW5zaW9uIHRvIDI1NgogICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gMjU2IHx8IGhlaWdodCA+IDI1NikgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhdGlvID0gTWF0aC5taW4oMjU2IC8gd2lkdGgsIDI1NiAvIGhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogcmF0aW8pOwogICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogcmF0aW8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAvLyBEcmF3IGJhY2tncm91bmQgZm9yIHRyYW5zcGFyZW5jeSBoYW5kbGluZyBpZiBuZWVkZWQgKEpQRUcgZG9lc24ndCBzdXBwb3J0IHRyYW5zcGFyZW5jeSkKICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pwZWcnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNGRkZGRkYnOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIE1JTUUgdHlwZQogICAgICAgICAgICBsZXQgbWltZVR5cGUgPSBgaW1hZ2UvJHtmb3JtYXR9YDsKICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2ljbycpCiAgICAgICAgICAgICAgICBtaW1lVHlwZSA9ICdpbWFnZS94LWljb24nOyAvLyBCcm93c2VycyBtaWdodCBub3Qgc3VwcG9ydCB0b0Jsb2IgZm9yIHgtaWNvbiBuYXRpdmVseQogICAgICAgICAgICAvLyBJZiBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB4LWljb24gb3V0cHV0IGZyb20gY2FudmFzLCBpdCB1c3VhbGx5IGZhbGxzIGJhY2sgdG8gUE5HICh3aGljaCBpcyBvZnRlbiB2YWxpZCBmb3IgSUNPIGNvbnRhaW5lcnMgYW55d2F5KQogICAgICAgICAgICAvLyBidXQgc3RyaWN0bHkgc3BlYWtpbmcsIHRvQmxvYignaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uJykgaXNuJ3Qgc3RhbmRhcmQgaW4gYWxsIGJyb3dzZXJzLiAKICAgICAgICAgICAgLy8gQSBjb21tb24gaGFjayBmb3IgY2xpZW50LXNpZGUgSUNPIGlzIHRvIHNhdmUgYSBQTkcgd2l0aCAuaWNvIGV4dGVuc2lvbiwgd2hpY2ggbW9kZXJuIE9TL0Jyb3dzZXJzIG9mdGVuIGFjY2VwdC4KICAgICAgICAgICAgLy8gT3Igd2UgYWNjZXB0IHRoYXQgaXQgbWlnaHQgYmUgYSBQTkcgaW5zaWRlLgogICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBJQ086IHVzZSBQTkcgZW5jb2RpbmcsIGJ1dCB3ZSB3aWxsIG5hbWUgaXQgLmljbwogICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0TWltZSA9IGZvcm1hdCA9PT0gJ2ljbycgPyAnaW1hZ2UvcG5nJyA6IG1pbWVUeXBlOwogICAgICAgICAgICAgICAgY2FudmFzLnRvQmxvYigoYikgPT4gcmVzb2x2ZShiKSwgZXhwb3J0TWltZSwgcXVhbGl0eSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoIWJsb2IpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnZlcnNpb24gZmFpbGVkIik7CiAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgICAgICAgIHNldERvd25sb2FkVXJsKHVybCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpOwogICAgICAgICAgICBzZXRFcnJvcigiRmFpbGVkIHRvIGNvbnZlcnQgaW1hZ2UuIik7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc1Byb2Nlc3NpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkltYWdlIENvbnZlcnRlciIsIGRlc2NyaXB0aW9uOiAiQ29udmVydCBpbWFnZXMgdG8gUE5HLCBKUEcsIFdFQlAsIG9yIElDTyBmb3JtYXRzIHByaXZhdGVseSBpbiB5b3VyIGJyb3dzZXIuIiwgaWNvbjogUmVmcmVzaEN3LCBjYXRlZ29yeTogIkltYWdlIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAibWF4LXctNHhsIG14LWF1dG8gcC02IiwgY2hpbGRyZW46ICFmaWxlID8gKF9qc3hzKCJkaXYiLCB7IG9uRHJhZ092ZXI6IChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCksIG9uRHJvcDogaGFuZGxlRHJvcCwgY2xhc3NOYW1lOiAiYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC0xNiB0ZXh0LWNlbnRlciBob3ZlcjpiZy1ncmF5LTUwIGRhcms6aG92ZXI6YmctZGFyay05MDAvNTAgdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXIgZ3JvdXAiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAiZmlsZSIsIGlkOiAiaW1nLXVwbG9hZCIsIGFjY2VwdDogImltYWdlLyoiLCBvbkNoYW5nZTogKGUpID0+IGUudGFyZ2V0LmZpbGVzICYmIGhhbmRsZUZpbGVDaGFuZ2UoZS50YXJnZXQuZmlsZXNbMF0pLCBjbGFzc05hbWU6ICJoaWRkZW4iIH0pLCBfanN4cygibGFiZWwiLCB7IGh0bWxGb3I6ICJpbWctdXBsb2FkIiwgY2xhc3NOYW1lOiAiY3Vyc29yLXBvaW50ZXIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy0yMCBoLTIwIGJnLW9yYW5nZS01MCBkYXJrOmJnLW9yYW5nZS05MDAvMjAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgdGV4dC1vcmFuZ2UtNTAwIGdyb3VwLWhvdmVyOnNjYWxlLTExMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSIsIGNoaWxkcmVuOiBfanN4KFVwbG9hZCwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAiIH0pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIiLCBjaGlsZHJlbjogIlVwbG9hZCBJbWFnZSIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIiwgY2hpbGRyZW46ICJEcmFnICYgZHJvcCBvciBjbGljayB0byBicm93c2UiIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIHRleHQtZ3JheS00MDAgbXQtMiIsIGNoaWxkcmVuOiAiU3VwcG9ydHMgSlBHLCBQTkcsIFdFQlAsIEdJRiwgU1ZHIiB9KV0gfSldIH0pKSA6IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstOTAwIHJvdW5kZWQteGwgcC00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLVszMDBweF0gYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByZWxhdGl2ZSIsIGNoaWxkcmVuOiBbX2pzeCgiaW1nIiwgeyBzcmM6IHByZXZpZXdVcmwgfHwgJycsIGFsdDogIlByZXZpZXciLCBjbGFzc05hbWU6ICJtYXgtdy1mdWxsIG1heC1oLVs0MDBweF0gcm91bmRlZCBzaGFkb3ctbGcgb2JqZWN0LWNvbnRhaW4iIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHsgc2V0RmlsZShudWxsKTsgc2V0UHJldmlld1VybChudWxsKTsgc2V0RG93bmxvYWRVcmwobnVsbCk7IH0sIGNsYXNzTmFtZTogImFic29sdXRlIHRvcC00IHJpZ2h0LTQgcC0yIGJnLXdoaXRlLzgwIGRhcms6YmctYmxhY2svODAgcm91bmRlZC1mdWxsIGhvdmVyOnRleHQtcmVkLTUwMCB0cmFuc2l0aW9uLWNvbG9ycyBiYWNrZHJvcC1ibHVyLXNtIiwgY2hpbGRyZW46IF9qc3goUmVmcmVzaEN3LCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCBwLTYgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4cygiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi00IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KFNldHRpbmdzMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiBDb252ZXJzaW9uIFNldHRpbmdzIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBtYi0yIiwgY2hpbGRyZW46ICJUYXJnZXQgRm9ybWF0IiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC0zIiwgY2hpbGRyZW46IFsncG5nJywgJ2pwZWcnLCAnd2VicCcsICdpY28nXS5tYXAoKGZtdCkgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0Rm9ybWF0KGZtdCksIGNsYXNzTmFtZTogYHB5LTMgcHgtNCByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIHRleHQtc20gYm9yZGVyIHVwcGVyY2FzZSB0cmFuc2l0aW9uLWFsbCAke2Zvcm1hdCA9PT0gZm10CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1vcmFuZ2UtNTAgZGFyazpiZy1vcmFuZ2UtOTAwLzIwIGJvcmRlci1vcmFuZ2UtNTAwIHRleHQtb3JhbmdlLTcwMCBkYXJrOnRleHQtb3JhbmdlLTQwMCByaW5nLTEgcmluZy1vcmFuZ2UtNTAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay02MDAgdGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS00MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ31gLCBjaGlsZHJlbjogZm10ID09PSAnanBlZycgPyAnSlBHJyA6IGZtdCB9LCBmbXQpKSkgfSldIH0pLCAoZm9ybWF0ID09PSAnanBlZycgfHwgZm9ybWF0ID09PSAnd2VicCcpICYmIChfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIG1iLTIiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIiwgY2hpbGRyZW46ICJRdWFsaXR5IiB9KSwgX2pzeHMoInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1tb25vIHRleHQtZ3JheS01MDAiLCBjaGlsZHJlbjogW01hdGgucm91bmQocXVhbGl0eSAqIDEwMCksICIlIl0gfSldIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInJhbmdlIiwgbWluOiAiMC4xIiwgbWF4OiAiMSIsIHN0ZXA6ICIwLjA1IiwgdmFsdWU6IHF1YWxpdHksIG9uQ2hhbmdlOiAoZSkgPT4gc2V0UXVhbGl0eShwYXJzZUZsb2F0KGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBoLTIgYmctZ3JheS0yMDAgZGFyazpiZy1kYXJrLTcwMCByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlciBhY2NlbnQtb3JhbmdlLTUwMCIgfSldIH0pKV0gfSldIH0pLCBkb3dubG9hZFVybCA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tMiBzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3hzKCJhIiwgeyBocmVmOiBkb3dubG9hZFVybCwgZG93bmxvYWQ6IGBjb252ZXJ0ZWRfJHtmaWxlLm5hbWUuc3BsaXQoJy4nKVswXX0uJHtmb3JtYXQgPT09ICdqcGVnJyA/ICdqcGcnIDogZm9ybWF0fWAsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWdyZWVuLTYwMCBob3ZlcjpiZy1ncmVlbi03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LWdyZWVuLTYwMC8yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBob3ZlcjotdHJhbnNsYXRlLXktMSIsIGNoaWxkcmVuOiBbX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIiIH0pLCAiRG93bmxvYWQgSW1hZ2UiXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7IHNldERvd25sb2FkVXJsKG51bGwpOyB9LCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktMyBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQteGwgaG92ZXI6YmctZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1kYXJrLTcwMCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiAiQ29udmVydCBBbm90aGVyIiB9KV0gfSkpIDogKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogY29udmVydEltYWdlLCBkaXNhYmxlZDogaXNQcm9jZXNzaW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1vcmFuZ2UtNTAwIGhvdmVyOmJnLW9yYW5nZS02MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LW9yYW5nZS01MDAvMjAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgaG92ZXI6LXRyYW5zbGF0ZS15LTEiLCBjaGlsZHJlbjogaXNQcm9jZXNzaW5nID8gKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIgYW5pbWF0ZS1zcGluIiB9KSwgIiBDb252ZXJ0aW5nLi4uIl0gfSkpIDogKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goUmVmcmVzaEN3LCB7IGNsYXNzTmFtZTogInctNSBoLTUgbXItMiIgfSksICIgQ29udmVydCBOb3ciXSB9KSkgfSkpLCBlcnJvciAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC00IGJnLXJlZC01MCBkYXJrOmJnLXJlZC05MDAvMTAgdGV4dC1yZWQtNjAwIGRhcms6dGV4dC1yZWQtNDAwIHJvdW5kZWQteGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSIsIGNoaWxkcmVuOiBbX2pzeChBbGVydENpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIgZmxleC1zaHJpbmstMCIgfSksIGVycm9yXSB9KSldIH0pXSB9KSkgfSkgfSkpOwp9Owpjb25zdCBTT0NJQUxfUFJFU0VUUyA9IFsKICAgIHsgbmFtZTogJ0luc3RhZ3JhbSBQb3N0JywgdzogMTA4MCwgaDogMTA4MCwgaWNvbjogSW5zdGFncmFtLCBjb2xvcjogJ3RleHQtcGluay02MDAnIH0sCiAgICB7IG5hbWU6ICdJbnN0YWdyYW0gU3RvcnknLCB3OiAxMDgwLCBoOiAxOTIwLCBpY29uOiBJbnN0YWdyYW0sIGNvbG9yOiAndGV4dC1waW5rLTYwMCcgfSwKICAgIHsgbmFtZTogJ1lvdVR1YmUgVGh1bWJuYWlsJywgdzogMTI4MCwgaDogNzIwLCBpY29uOiBZb3V0dWJlLCBjb2xvcjogJ3RleHQtcmVkLTYwMCcgfSwKICAgIHsgbmFtZTogJ1R3aXR0ZXIgSGVhZGVyJywgdzogMTUwMCwgaDogNTAwLCBpY29uOiBUd2l0dGVyLCBjb2xvcjogJ3RleHQtYmx1ZS00MDAnIH0sCiAgICB7IG5hbWU6ICdGYWNlYm9vayBDb3ZlcicsIHc6IDgyMCwgaDogMzEyLCBpY29uOiBGYWNlYm9vaywgY29sb3I6ICd0ZXh0LWJsdWUtNjAwJyB9LAogICAgeyBuYW1lOiAnTGlua2VkSW4gQ292ZXInLCB3OiAxNTg0LCBoOiAzOTYsIGljb246IExpbmtlZGluLCBjb2xvcjogJ3RleHQtYmx1ZS03MDAnIH0sCl07CmV4cG9ydCBjb25zdCBJbWFnZVJlc2l6ZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbZmlsZSwgc2V0RmlsZV0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtwcmV2aWV3VXJsLCBzZXRQcmV2aWV3VXJsXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW3dpZHRoLCBzZXRXaWR0aF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFtoZWlnaHQsIHNldEhlaWdodF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFttYWludGFpbkFzcGVjdFJhdGlvLCBzZXRNYWludGFpbkFzcGVjdFJhdGlvXSA9IHVzZVN0YXRlKHRydWUpOwogICAgY29uc3QgW2FzcGVjdFJhdGlvLCBzZXRBc3BlY3RSYXRpb10gPSB1c2VTdGF0ZSgxKTsKICAgIGNvbnN0IFtpc1Byb2Nlc3NpbmcsIHNldElzUHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2Zvcm1hdCwgc2V0Rm9ybWF0XSA9IHVzZVN0YXRlKCdwbmcnKTsKICAgIGNvbnN0IFtxdWFsaXR5LCBzZXRRdWFsaXR5XSA9IHVzZVN0YXRlKDAuOSk7CiAgICB1c2VFZmZlY3QoKCkgPT4gewogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICAgIGlmIChwcmV2aWV3VXJsKQogICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChwcmV2aWV3VXJsKTsKICAgICAgICAgICAgaWYgKGRvd25sb2FkVXJsKQogICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7CiAgICAgICAgfTsKICAgIH0sIFtwcmV2aWV3VXJsLCBkb3dubG9hZFVybF0pOwogICAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IChzZWxlY3RlZEZpbGUpID0+IHsKICAgICAgICBpZiAoIXNlbGVjdGVkRmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0RmlsZShzZWxlY3RlZEZpbGUpOwogICAgICAgIHNldERvd25sb2FkVXJsKG51bGwpOwogICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc2VsZWN0ZWRGaWxlKTsKICAgICAgICBzZXRQcmV2aWV3VXJsKHVybCk7CiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgICAgaW1nLnNyYyA9IHVybDsKICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gewogICAgICAgICAgICBzZXRXaWR0aChpbWcud2lkdGgpOwogICAgICAgICAgICBzZXRIZWlnaHQoaW1nLmhlaWdodCk7CiAgICAgICAgICAgIHNldEFzcGVjdFJhdGlvKGltZy53aWR0aCAvIGltZy5oZWlnaHQpOwogICAgICAgIH07CiAgICB9OwogICAgY29uc3QgdXBkYXRlV2lkdGggPSAobmV3V2lkdGgpID0+IHsKICAgICAgICBzZXRXaWR0aChuZXdXaWR0aCk7CiAgICAgICAgaWYgKG1haW50YWluQXNwZWN0UmF0aW8pIHsKICAgICAgICAgICAgc2V0SGVpZ2h0KE1hdGgucm91bmQobmV3V2lkdGggLyBhc3BlY3RSYXRpbykpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCB1cGRhdGVIZWlnaHQgPSAobmV3SGVpZ2h0KSA9PiB7CiAgICAgICAgc2V0SGVpZ2h0KG5ld0hlaWdodCk7CiAgICAgICAgaWYgKG1haW50YWluQXNwZWN0UmF0aW8pIHsKICAgICAgICAgICAgc2V0V2lkdGgoTWF0aC5yb3VuZChuZXdIZWlnaHQgKiBhc3BlY3RSYXRpbykpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBhcHBseVByZXNldCA9IChwcmVzZXQpID0+IHsKICAgICAgICBzZXRNYWludGFpbkFzcGVjdFJhdGlvKGZhbHNlKTsgLy8gVW5sb2NrIGZvciBwcmVzZXRzCiAgICAgICAgc2V0V2lkdGgocHJlc2V0LncpOwogICAgICAgIHNldEhlaWdodChwcmVzZXQuaCk7CiAgICB9OwogICAgY29uc3QgaGFuZGxlUmVzaXplID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghZmlsZSB8fCAhcHJldmlld1VybCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzUHJvY2Vzc2luZyh0cnVlKTsKICAgICAgICBzZXREb3dubG9hZFVybChudWxsKTsKICAgICAgICAvLyBTaG9ydCBkZWxheSB0byBhbGxvdyBVSSB0byB1cGRhdGUKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgICAgICAgIGltZy5zcmMgPSBwcmV2aWV3VXJsOwogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyBpbWcub25sb2FkID0gcmVzb2x2ZTsgfSk7CiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICAgICAgICAgIGlmICghY3R4KQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgY29udGV4dCBmYWlsZWQiKTsKICAgICAgICAgICAgLy8gRHJhdyBiYWNrZ3JvdW5kIGZvciB0cmFuc3BhcmVuY3kgaGFuZGxpbmcgaWYgb3V0cHV0IGlzIEpQRUcKICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pwZWcnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNGRkZGRkYnOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTbW9vdGggcmVzaXppbmcKICAgICAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSAnaGlnaCc7CiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgY29uc3QgbWltZVR5cGUgPSBgaW1hZ2UvJHtmb3JtYXR9YDsKICAgICAgICAgICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4gewogICAgICAgICAgICAgICAgaWYgKGJsb2IpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICAgICAgICAgICAgICAgIHNldERvd25sb2FkVXJsKHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRJc1Byb2Nlc3NpbmcoZmFsc2UpOwogICAgICAgICAgICB9LCBtaW1lVHlwZSwgcXVhbGl0eSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpOwogICAgICAgICAgICBzZXRJc1Byb2Nlc3NpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkltYWdlIFJlc2l6ZXIiLCBkZXNjcmlwdGlvbjogIlJlc2l6ZSBpbWFnZXMgdG8gc3BlY2lmaWMgZGltZW5zaW9ucyBvciB1c2Ugc3RhbmRhcmQgc29jaWFsIG1lZGlhIHByZXNldHMuIiwgaWNvbjogTWF4aW1pemUsIGNhdGVnb3J5OiAiSW1hZ2UiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtYXgtdy01eGwgbXgtYXV0byBwLTYiLCBjaGlsZHJlbjogIWZpbGUgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC0xNiB0ZXh0LWNlbnRlciBob3ZlcjpiZy1ncmF5LTUwIGRhcms6aG92ZXI6YmctZGFyay05MDAvNTAgdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXIgcmVsYXRpdmUgZ3JvdXAiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAiZmlsZSIsIGFjY2VwdDogImltYWdlLyoiLCBjbGFzc05hbWU6ICJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb3BhY2l0eS0wIGN1cnNvci1wb2ludGVyIiwgb25DaGFuZ2U6IChlKSA9PiBlLnRhcmdldC5maWxlcz8uWzBdICYmIGhhbmRsZUZpbGVDaGFuZ2UoZS50YXJnZXQuZmlsZXNbMF0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMjAgaC0yMCBiZy1ibHVlLTUwIGRhcms6YmctYmx1ZS05MDAvMjAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgdGV4dC1ibHVlLTUwMCBteC1hdXRvIGdyb3VwLWhvdmVyOnNjYWxlLTExMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSIsIGNoaWxkcmVuOiBfanN4KFVwbG9hZCwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAiIH0pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIiLCBjaGlsZHJlbjogIlVwbG9hZCBJbWFnZSB0byBSZXNpemUiIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiAiU3VwcG9ydHMgSlBHLCBQTkcsIFdFQlAiIH0pXSB9KSkgOiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBsZzpncmlkLWNvbHMtMiBnYXAtOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTkwMCByb3VuZGVkLXhsIHAtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1bMzAwcHhdIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIiwgY2hpbGRyZW46IFtfanN4KCJpbWciLCB7IHNyYzogcHJldmlld1VybCB8fCAnJywgYWx0OiAiT3JpZ2luYWwiLCBjbGFzc05hbWU6ICJtYXgtdy1mdWxsIG1heC1oLVs0MDBweF0gb2JqZWN0LWNvbnRhaW4gc2hhZG93LWxnIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgdG9wLTQgbGVmdC00IGJnLWJsYWNrLzcwIHRleHQtd2hpdGUgdGV4dC14cyBweC0yIHB5LTEgcm91bmRlZCBiYWNrZHJvcC1ibHVyLW1kIiwgY2hpbGRyZW46IFsiT3JpZ2luYWw6ICIsIGZpbGUubmFtZV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4geyBzZXRGaWxlKG51bGwpOyBzZXREb3dubG9hZFVybChudWxsKTsgfSwgY2xhc3NOYW1lOiAiYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCBwLTIgYmctd2hpdGUvODAgZGFyazpiZy1ibGFjay84MCByb3VuZGVkLWZ1bGwgaG92ZXI6dGV4dC1yZWQtNTAwIHRyYW5zaXRpb24tY29sb3JzIGJhY2tkcm9wLWJsdXItc20iLCBjaGlsZHJlbjogX2pzeChSZWZyZXNoQ3csIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCBwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJoNCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgbWItMyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChMYXlvdXRUZW1wbGF0ZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBRdWljayBQcmVzZXRzIl0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBzbTpncmlkLWNvbHMtMyBnYXAtMiIsIGNoaWxkcmVuOiBTT0NJQUxfUFJFU0VUUy5tYXAoKHByZXNldCwgaWR4KSA9PiAoX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gYXBwbHlQcmVzZXQocHJlc2V0KSwgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0zIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgaG92ZXI6Ym9yZGVyLWJsdWUtNTAwIGRhcms6aG92ZXI6Ym9yZGVyLWJsdWUtNTAwIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWxnIHRyYW5zaXRpb24tYWxsIGhvdmVyOmJnLWJsdWUtNTAgZGFyazpob3ZlcjpiZy1ibHVlLTkwMC8xMCBncm91cCIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiBgdGV4dC1sZyBtYi0yICR7cHJlc2V0LmNvbG9yfWAsIGNoaWxkcmVuOiBfanN4KHByZXNldC5pY29uLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIGdyb3VwLWhvdmVyOnRleHQtYmx1ZS02MDAgZGFyazpncm91cC1ob3Zlcjp0ZXh0LWJsdWUtNDAwIiwgY2hpbGRyZW46IHByZXNldC5uYW1lIH0pLCBfanN4cygic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gdGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiBbcHJlc2V0LncsICIgeCAiLCBwcmVzZXQuaF0gfSldIH0sIGlkeCkpKSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIHAtNiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTYgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goU2V0dGluZ3MyLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCAiIFJlc2l6ZSBPcHRpb25zIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiV2lkdGggKHB4KSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHdpZHRoLCBvbkNoYW5nZTogKGUpID0+IHVwZGF0ZVdpZHRoKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgZm9udC1tb25vIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJsdWUtNTAwIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIkhlaWdodCAocHgpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogaGVpZ2h0LCBvbkNoYW5nZTogKGUpID0+IHVwZGF0ZUhlaWdodChOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIGZvbnQtbW9ubyBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMCIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIiwgY2hpbGRyZW46ICJNYWludGFpbiBBc3BlY3QgUmF0aW8iIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWludGFpbkFzcGVjdFJhdGlvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZS1sb2NrIGN1cnJlbnQgcmF0aW8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFzcGVjdFJhdGlvKHdpZHRoIC8gaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYWludGFpbkFzcGVjdFJhdGlvKCFtYWludGFpbkFzcGVjdFJhdGlvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbGFzc05hbWU6IGBwLTIgcm91bmRlZC1sZyB0cmFuc2l0aW9uLWNvbG9ycyAke21haW50YWluQXNwZWN0UmF0aW8gPyAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTYwMCBkYXJrOmJnLWJsdWUtOTAwLzMwIGRhcms6dGV4dC1ibHVlLTQwMCcgOiAndGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwJ31gLCBjaGlsZHJlbjogbWFpbnRhaW5Bc3BlY3RSYXRpbyA/IF9qc3goTG9jaywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSA6IF9qc3goVW5sb2NrLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBtYi0yIiwgY2hpbGRyZW46ICJPdXRwdXQgRm9ybWF0IiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcC0xIHJvdW5kZWQtbGciLCBjaGlsZHJlbjogWydwbmcnLCAnanBlZycsICd3ZWJwJ10ubWFwKChmbXQpID0+IChfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldEZvcm1hdChmbXQpLCBjbGFzc05hbWU6IGBmbGV4LTEgcHktMiB0ZXh0LXhzIGZvbnQtYm9sZCB1cHBlcmNhc2Ugcm91bmRlZC1tZCB0cmFuc2l0aW9uLWFsbCAke2Zvcm1hdCA9PT0gZm10ID8gJ2JnLXdoaXRlIGRhcms6YmctZGFyay03MDAgc2hhZG93IHRleHQtYmx1ZS02MDAgZGFyazp0ZXh0LWJsdWUtNDAwJyA6ICd0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCd9YCwgY2hpbGRyZW46IGZtdCA9PT0gJ2pwZWcnID8gJ0pQRycgOiBmbXQgfSwgZm10KSkpIH0pXSB9KSwgKGZvcm1hdCA9PT0gJ2pwZWcnIHx8IGZvcm1hdCA9PT0gJ3dlYnAnKSAmJiAoX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBtYi0yIiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCIsIGNoaWxkcmVuOiAiUXVhbGl0eSIgfSksIF9qc3hzKCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtbW9ubyB0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46IFtNYXRoLnJvdW5kKHF1YWxpdHkgKiAxMDApLCAiJSJdIH0pXSB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJyYW5nZSIsIG1pbjogIjAuMSIsIG1heDogIjEiLCBzdGVwOiAiMC4wNSIsIHZhbHVlOiBxdWFsaXR5LCBvbkNoYW5nZTogKGUpID0+IHNldFF1YWxpdHkocGFyc2VGbG9hdChlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC0yIGJnLWdyYXktMjAwIGRhcms6YmctZGFyay03MDAgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUgY3Vyc29yLXBvaW50ZXIgYWNjZW50LWJsdWUtNTAwIiB9KV0gfSkpXSB9KV0gfSksIGRvd25sb2FkVXJsID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImFuaW1hdGUtaW4gZmFkZS1pbiBzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImEiLCB7IGhyZWY6IGRvd25sb2FkVXJsLCBkb3dubG9hZDogYHJlc2l6ZWRfJHtmaWxlLm5hbWUuc3BsaXQoJy4nKVswXX0uJHtmb3JtYXQgPT09ICdqcGVnJyA/ICdqcGcnIDogZm9ybWF0fWAsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWdyZWVuLTYwMCBob3ZlcjpiZy1ncmVlbi03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LWdyZWVuLTYwMC8yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBob3ZlcjotdHJhbnNsYXRlLXktMSIsIGNoaWxkcmVuOiBbX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIiIH0pLCAiRG93bmxvYWQgUmVzaXplZCBJbWFnZSJdIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldERvd25sb2FkVXJsKG51bGwpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktMyBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQteGwgaG92ZXI6YmctZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1kYXJrLTcwMCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiAiQWRqdXN0IFNldHRpbmdzIiB9KV0gfSkpIDogKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlUmVzaXplLCBkaXNhYmxlZDogaXNQcm9jZXNzaW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1ibHVlLTYwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIHNoYWRvdy1sZyBzaGFkb3ctYmx1ZS02MDAvMjAgZGlzYWJsZWQ6b3BhY2l0eS03MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgaG92ZXI6LXRyYW5zbGF0ZS15LTEiLCBjaGlsZHJlbjogaXNQcm9jZXNzaW5nID8gKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIgYW5pbWF0ZS1zcGluIiB9KSwgIiBQcm9jZXNzaW5nLi4uIl0gfSkpIDogKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goTWF4aW1pemUsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIiB9KSwgIiBSZXNpemUgSW1hZ2UiXSB9KSkgfSkpXSB9KV0gfSkpIH0pIH0pKTsKfTsK","@/components/Tools/CSSTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBQYWxldHRlLCBDb3B5LCBTaHVmZmxlLCBDaGVjaywgTG9hZGVyMiwgU3BhcmtsZXMsIFJlZnJlc2hDdywgRHJvcGxldCwgTGF5ZXJzLCBMYXlvdXQsIFNldHRpbmdzMiwgQ2FtZXJhLCBTdGFyLCBIZWFydCwgQ2xvdWQsIFphcCwgU2hpZWxkLCBFeWVPZmYsIEV5ZSwgTWF4aW1pemUyLCBDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnOwppbXBvcnQgeyBUb29sTGF5b3V0IH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xMYXlvdXQnOwppbXBvcnQgeyBnZW5lcmF0ZVRleHQgfSBmcm9tICdAL3NlcnZpY2VzL2dlbWluaVNlcnZpY2UnOwppbXBvcnQgKiBhcyBodG1sVG9JbWFnZSBmcm9tICdodG1sLXRvLWltYWdlJzsKLy8gLS0tIFNoYXJlZCBIZWxwZXI6IEhleCB0byBSR0JBIC0tLQpjb25zdCBoZXhUb1JnYmEgPSAoaGV4LCBhbHBoYSkgPT4gewogICAgbGV0IHIgPSAyNTUsIGcgPSAyNTUsIGIgPSAyNTU7CiAgICBjb25zdCBjbGVhbkhleCA9IGhleC5yZXBsYWNlKCcjJywgJycpOwogICAgaWYgKGNsZWFuSGV4Lmxlbmd0aCA9PT0gNikgewogICAgICAgIHIgPSBwYXJzZUludChjbGVhbkhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTsKICAgICAgICBnID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7CiAgICAgICAgYiA9IHBhcnNlSW50KGNsZWFuSGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpOwogICAgfQogICAgZWxzZSBpZiAoY2xlYW5IZXgubGVuZ3RoID09PSAzKSB7CiAgICAgICAgciA9IHBhcnNlSW50KGNsZWFuSGV4WzBdICsgY2xlYW5IZXhbMF0sIDE2KTsKICAgICAgICBnID0gcGFyc2VJbnQoY2xlYW5IZXhbMV0gKyBjbGVhbkhleFsxXSwgMTYpOwogICAgICAgIGIgPSBwYXJzZUludChjbGVhbkhleFsyXSArIGNsZWFuSGV4WzJdLCAxNik7CiAgICB9CiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDsKfTsKY29uc3QgUFJFU0VUX0lDT05TID0gWwogICAgeyBpZDogJ3NwYXJrbGVzJywgaWNvbjogU3BhcmtsZXMgfSwKICAgIHsgaWQ6ICdzdGFyJywgaWNvbjogU3RhciB9LAogICAgeyBpZDogJ2hlYXJ0JywgaWNvbjogSGVhcnQgfSwKICAgIHsgaWQ6ICdjbG91ZCcsIGljb246IENsb3VkIH0sCiAgICB7IGlkOiAnemFwJywgaWNvbjogWmFwIH0sCiAgICB7IGlkOiAnc2hpZWxkJywgaWNvbjogU2hpZWxkIH0sCl07Ci8vIC0tLSBDU1MgR2xhc3Ntb3JwaGlzbSBHZW5lcmF0b3IgLS0tCmV4cG9ydCBjb25zdCBHbGFzc21vcnBoaXNtR2VuZXJhdG9yID0gKCkgPT4gewogICAgLy8gR2xhc3MgU3RhdGVzCiAgICBjb25zdCBbYmx1ciwgc2V0Qmx1cl0gPSB1c2VTdGF0ZSgxMik7CiAgICBjb25zdCBbdHJhbnNwYXJlbmN5LCBzZXRUcmFuc3BhcmVuY3ldID0gdXNlU3RhdGUoMC4yNSk7CiAgICBjb25zdCBbc2F0dXJhdGlvbiwgc2V0U2F0dXJhdGlvbl0gPSB1c2VTdGF0ZSgxNTApOwogICAgY29uc3QgW2NvbG9yLCBzZXRDb2xvcl0gPSB1c2VTdGF0ZSgnI2ZmZmZmZicpOwogICAgY29uc3QgW291dGxpbmUsIHNldE91dGxpbmVdID0gdXNlU3RhdGUoMC4xNSk7CiAgICBjb25zdCBbcmFkaXVzLCBzZXRSYWRpdXNdID0gdXNlU3RhdGUoMjQpOwogICAgY29uc3QgW3NoYWRvdywgc2V0U2hhZG93XSA9IHVzZVN0YXRlKDIwKTsKICAgIC8vIEVsZW1lbnQgU3RhdGVzCiAgICBjb25zdCBbc2hvd0ljb24sIHNldFNob3dJY29uXSA9IHVzZVN0YXRlKHRydWUpOwogICAgY29uc3QgW2FjdGl2ZUljb24sIHNldEFjdGl2ZUljb25dID0gdXNlU3RhdGUoJ3NwYXJrbGVzJyk7CiAgICBjb25zdCBbc2hvd0J1dHRvbiwgc2V0U2hvd0J1dHRvbl0gPSB1c2VTdGF0ZSh0cnVlKTsKICAgIGNvbnN0IFtidXR0b25UZXh0LCBzZXRCdXR0b25UZXh0XSA9IHVzZVN0YXRlKCdBY3Rpb24gQnV0dG9uJyk7CiAgICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW2lzRXhwb3J0aW5nLCBzZXRJc0V4cG9ydGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBnbGFzc1JlZiA9IHVzZVJlZihudWxsKTsKICAgIGNvbnN0IHNoYWRvd0NzcyA9IHNoYWRvdyA+IDAgPyBgYm94LXNoYWRvdzogMCA4cHggMzJweCAwIHJnYmEoMzEsIDM4LCAxMzUsICR7c2hhZG93IC8gMTAwfSk7YCA6ICcnOwogICAgY29uc3QgZmlsdGVyQ3NzID0gYGJhY2tkcm9wLWZpbHRlcjogYmx1cigke2JsdXJ9cHgpIHNhdHVyYXRlKCR7c2F0dXJhdGlvbn0lKTtcbi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKCR7Ymx1cn1weCkgc2F0dXJhdGUoJHtzYXR1cmF0aW9ufSUpO2A7CiAgICBjb25zdCBjc3NDb2RlID0gYGJhY2tncm91bmQ6ICR7aGV4VG9SZ2JhKGNvbG9yLCB0cmFuc3BhcmVuY3kpfTtcbiR7ZmlsdGVyQ3NzfVxuYm9yZGVyLXJhZGl1czogJHtyYWRpdXN9cHg7XG5ib3JkZXI6IDFweCBzb2xpZCAke2hleFRvUmdiYShjb2xvciwgb3V0bGluZSl9O1xuJHtzaGFkb3dDc3N9YDsKICAgIGNvbnN0IGhhbmRsZUNvcHkgPSAoKSA9PiB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY3NzQ29kZSk7CiAgICAgICAgc2V0Q29waWVkKHRydWUpOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7CiAgICB9OwogICAgY29uc3QgaGFuZGxlRG93bmxvYWQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFnbGFzc1JlZi5jdXJyZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0SXNFeHBvcnRpbmcodHJ1ZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IGh0bWxUb0ltYWdlLnRvUG5nKGdsYXNzUmVmLmN1cnJlbnQsIHsgcXVhbGl0eTogMSwgcGl4ZWxSYXRpbzogMiB9KTsKICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgbGluay5kb3dubG9hZCA9ICdnbGFzcy1jb21wb25lbnQucG5nJzsKICAgICAgICAgICAgbGluay5ocmVmID0gZGF0YVVybDsKICAgICAgICAgICAgbGluay5jbGljaygpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGFsZXJ0KCJGYWlsZWQgdG8gZXhwb3J0IGltYWdlLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNFeHBvcnRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBTZWxlY3RlZEljb24gPSBQUkVTRVRfSUNPTlMuZmluZChpID0+IGkuaWQgPT09IGFjdGl2ZUljb24pPy5pY29uIHx8IFNwYXJrbGVzOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJHbGFzc21vcnBoaXNtIFN0dWRpbyIsIGRlc2NyaXB0aW9uOiAiQ3JlYXRlIGJ1dHRlcnktc21vb3RoIGZyb3N0ZWQgZ2xhc3MgZWZmZWN0cyBmb3IgbW9kZXJuIFVJLiBSZWFsLXRpbWUgQ1NTIGdlbmVyYXRpb24gd2l0aCBmdWxsIGVsZW1lbnQgY3VzdG9taXphdGlvbi4iLCBpY29uOiBMYXllcnMsIGNhdGVnb3J5OiAiQ1NTIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBtYXgtdy03eGwgbXgtYXV0byBncmlkIGxnOmdyaWQtY29scy0xMiBnYXAtOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibGc6Y29sLXNwYW4tNSBzcGFjZS15LTYgbWF4LWgtWzgwMHB4XSBvdmVyZmxvdy15LWF1dG8gY3VzdG9tLXNjcm9sbGJhciBwci0yIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1iLTQiLCBjaGlsZHJlbjogW19qc3goU2V0dGluZ3MyLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1icmFuZC01MDAiIH0pLCAiIEdsYXNzIFByb3BlcnRpZXMiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gbWItMiIsIGNoaWxkcmVuOiBfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIiwgY2hpbGRyZW46IFsiQmx1cjogIiwgYmx1ciwgInB4Il0gfSkgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwIiwgbWF4OiAiNDAiLCB2YWx1ZTogYmx1ciwgb25DaGFuZ2U6IGUgPT4gc2V0Qmx1cihOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtMiBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC02MDAiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIG1iLTIiLCBjaGlsZHJlbjogX2pzeHMoImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiBbIlRyYW5zcGFyZW5jeTogIiwgTWF0aC5yb3VuZCh0cmFuc3BhcmVuY3kgKiAxMDApLCAiJSJdIH0pIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInJhbmdlIiwgbWluOiAiMCIsIG1heDogIjEiLCBzdGVwOiAiMC4wMSIsIHZhbHVlOiB0cmFuc3BhcmVuY3ksIG9uQ2hhbmdlOiBlID0+IHNldFRyYW5zcGFyZW5jeShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtMiBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC02MDAiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIG1iLTIiLCBjaGlsZHJlbjogX2pzeHMoImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiBbIlNhdHVyYXRpb246ICIsIHNhdHVyYXRpb24sICIlIl0gfSkgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwIiwgbWF4OiAiMzAwIiwgc3RlcDogIjEwIiwgdmFsdWU6IHNhdHVyYXRpb24sIG9uQ2hhbmdlOiBlID0+IHNldFNhdHVyYXRpb24oTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBoLTIgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlciBhY2NlbnQtYnJhbmQtNjAwIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeHMoImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46IFsiQm9yZGVyIFJhZGl1czogIiwgcmFkaXVzLCAicHgiXSB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJyYW5nZSIsIG1pbjogIjAiLCBtYXg6ICI2MCIsIHZhbHVlOiByYWRpdXMsIG9uQ2hhbmdlOiBlID0+IHNldFJhZGl1cyhOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtMiBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC02MDAiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiU2hhZG93IGludGVuc2l0eSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwIiwgbWF4OiAiNTAiLCB2YWx1ZTogc2hhZG93LCBvbkNoYW5nZTogZSA9PiBzZXRTaGFkb3coTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBoLTIgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlciBhY2NlbnQtYnJhbmQtNjAwIiB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJHbGFzcyBDb2xvciIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImNvbG9yIiwgdmFsdWU6IGNvbG9yLCBvbkNoYW5nZTogZSA9PiBzZXRDb2xvcihlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctMTAgaC04IHJvdW5kZWQgYm9yZGVyLTAgcC0wLjUgY3Vyc29yLXBvaW50ZXIgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCIgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogImZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBmb250LWJvbGQiLCBjaGlsZHJlbjogY29sb3IudG9VcHBlckNhc2UoKSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3hzKCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiBbIk91dGxpbmUgQWxwaGE6ICIsIG91dGxpbmVdIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInJhbmdlIiwgbWluOiAiMCIsIG1heDogIjEiLCBzdGVwOiAiMC4wMSIsIHZhbHVlOiBvdXRsaW5lLCBvbkNoYW5nZTogZSA9PiBzZXRPdXRsaW5lKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC0yIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUgY3Vyc29yLXBvaW50ZXIgYWNjZW50LWJyYW5kLTYwMCIgfSldIH0pXSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1iLTQiLCBjaGlsZHJlbjogW19qc3goTGF5b3V0LCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1icmFuZC01MDAiIH0pLCAiIENhcmQgRWxlbWVudHMiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTMiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIiwgY2hpbGRyZW46ICJUb3AgSWNvbiIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0U2hvd0ljb24oIXNob3dJY29uKSwgY2xhc3NOYW1lOiBgcC0xIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtzaG93SWNvbiA/ICd0ZXh0LWJyYW5kLTYwMCBiZy1icmFuZC01MCcgOiAndGV4dC1ncmF5LTQwMCBiZy1ncmF5LTUwJ31gLCBjaGlsZHJlbjogc2hvd0ljb24gPyBfanN4KEV5ZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSA6IF9qc3goRXllT2ZmLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KSwgc2hvd0ljb24gJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LXdyYXAgZ2FwLTIiLCBjaGlsZHJlbjogUFJFU0VUX0lDT05TLm1hcCgoaXRlbSkgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0QWN0aXZlSWNvbihpdGVtLmlkKSwgY2xhc3NOYW1lOiBgcC0yIHJvdW5kZWQtbGcgYm9yZGVyIHRyYW5zaXRpb24tYWxsICR7YWN0aXZlSWNvbiA9PT0gaXRlbS5pZCA/ICdib3JkZXItYnJhbmQtNTAwIGJnLWJyYW5kLTUwIHRleHQtYnJhbmQtNjAwJyA6ICdib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwIHRleHQtZ3JheS00MDAnfWAsIGNoaWxkcmVuOiBfanN4KGl0ZW0uaWNvbiwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSB9LCBpdGVtLmlkKSkpIH0pKV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMyBwdC00IGJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UiLCBjaGlsZHJlbjogIkFjdGlvbiBCdXR0b24iIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldFNob3dCdXR0b24oIXNob3dCdXR0b24pLCBjbGFzc05hbWU6IGBwLTEgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke3Nob3dCdXR0b24gPyAndGV4dC1icmFuZC02MDAgYmctYnJhbmQtNTAnIDogJ3RleHQtZ3JheS00MDAgYmctZ3JheS01MCd9YCwgY2hpbGRyZW46IHNob3dCdXR0b24gPyBfanN4KEV5ZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSA6IF9qc3goRXllT2ZmLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KSwgc2hvd0J1dHRvbiAmJiAoX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGJ1dHRvblRleHQsIG9uQ2hhbmdlOiBlID0+IHNldEJ1dHRvblRleHQoZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIkJ1dHRvbiBUZXh0Li4uIiwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1icmFuZC01MDAiIH0pKV0gfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS05MDAgZGFyazpiZy1ibGFjayByb3VuZGVkLTJ4bCBwLTYgcmVsYXRpdmUgZ3JvdXAgc2hhZG93LTJ4bCBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCB3LTMyIGgtMzIgYmctYnJhbmQtNTAwLzEwIGJsdXItWzYwcHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNCIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWJyYW5kLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJDU1MgT3V0cHV0IiB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiBoYW5kbGVDb3B5LCBjbGFzc05hbWU6ICJwLTIgYmctd2hpdGUvMTAgaG92ZXI6Ymctd2hpdGUvMjAgcm91bmRlZC1sZyB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IGNvcGllZCA/IF9qc3goQ2hlY2ssIHsgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LWdyZWVuLTQwMCIgfSkgOiBfanN4KENvcHksIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSldIH0pLCBfanN4KCJwcmUiLCB7IGNsYXNzTmFtZTogImZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBtZDp0ZXh0LXhzIHRleHQtZ3JheS0zMDAgbGVhZGluZy1yZWxheGVkIG92ZXJmbG93LXgtYXV0byB3aGl0ZXNwYWNlLXByZS13cmFwIiwgY2hpbGRyZW46IGNzc0NvZGUgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibGc6Y29sLXNwYW4tNyByZWxhdGl2ZSByb3VuZGVkLTN4bCBvdmVyZmxvdy1oaWRkZW4gbWluLWgtWzYwMHB4XSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHNoYWRvdy1pbm5lciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTggbGc6cC0xMiIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBpbnNldC0wIGJnLWNvdmVyIGJnLWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi03MDAiLCBzdHlsZTogeyBiYWNrZ3JvdW5kSW1hZ2U6ICd1cmwoImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNjE4MDA1MTgyMzg0LWE4M2E4YmQ1N2ZiZT9hdXRvPWZvcm1hdCZmaXQ9Y3JvcCZxPTgwJnc9MTIwMCIpJyB9IH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGluc2V0LTAgYmctYmxhY2svMTAiIH0pLCBfanN4cygiZGl2IiwgeyByZWY6IGdsYXNzUmVmLCBjbGFzc05hbWU6ICJ3LWZ1bGwgbWF4LXctc20gcC0xMCByZWxhdGl2ZSB6LTEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBhbmltYXRlLWluIHpvb20taW4gZHVyYXRpb24tNTAwIiwgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBoZXhUb1JnYmEoY29sb3IsIHRyYW5zcGFyZW5jeSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BGaWx0ZXI6IGBibHVyKCR7Ymx1cn1weCkgc2F0dXJhdGUoJHtzYXR1cmF0aW9ufSUpYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJraXRCYWNrZHJvcEZpbHRlcjogYGJsdXIoJHtibHVyfXB4KSBzYXR1cmF0ZSgke3NhdHVyYXRpb259JSlgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke2hleFRvUmdiYShjb2xvciwgb3V0bGluZSl9YCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IGAke3JhZGl1c31weGAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiBzaGFkb3cgPiAwID8gYDAgOHB4IDMycHggMCByZ2JhKDMxLCAzOCwgMTM1LCAke3NoYWRvdyAvIDEwMH0pYCA6ICdub25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IFtzaG93SWNvbiAmJiAoX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIgcm91bmRlZC0yeGwgbWItOCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZS8zMCBiYWNrZHJvcC1ibHVyLW1kIiwgY2hpbGRyZW46IF9qc3goU2VsZWN0ZWRJY29uLCB7IGNsYXNzTmFtZTogInctNiBoLTYgdGV4dC13aGl0ZSIgfSkgfSkpLCBfanN4KCJoMiIsIHsgY2xhc3NOYW1lOiAidGV4dC0zeGwgZm9udC1ibGFjayB0ZXh0LXdoaXRlIG1iLTIgdHJhY2tpbmctdGlnaHQiLCBjaGlsZHJlbjogIldpcmVOaW5qYSIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtd2hpdGUvODAgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgbWItMTAiLCBjaGlsZHJlbjogIk1vZGVybiBnbGFzcyBjb21wb25lbnRzIHdpdGggc2FtcGxlLWFjY3VyYXRlIHByb3BlcnRpZXMgYW5kIHJlYWwtdGltZSBlZGl0aW5nLiIgfSksIHNob3dCdXR0b24gJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC0xMiBiZy13aGl0ZS80MCBob3ZlcjpiZy13aGl0ZS81MCB0cmFuc2l0aW9uLWNvbG9ycyBjdXJzb3ItcG9pbnRlciByb3VuZGVkLXhsIHctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCB0ZXh0LXNtIiwgY2hpbGRyZW46IGJ1dHRvblRleHQgfSkpXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBib3R0b20tNiByaWdodC02IiwgY2hpbGRyZW46IF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlRG93bmxvYWQsIGRpc2FibGVkOiBpc0V4cG9ydGluZywgY2xhc3NOYW1lOiAicC00IGJnLXdoaXRlLzEwIGhvdmVyOmJnLXdoaXRlLzIwIGJhY2tkcm9wLWJsdXItbWQgcm91bmRlZC1mdWxsIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1hbGwgc2hhZG93LXhsIGJvcmRlciBib3JkZXItd2hpdGUvMjAgZ3JvdXAiLCB0aXRsZTogIkRvd25sb2FkIGFzIFBORyIsIGNoaWxkcmVuOiBpc0V4cG9ydGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IGFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KENhbWVyYSwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IGdyb3VwLWhvdmVyOnNjYWxlLTExMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSIgfSkgfSkgfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBHcmFkaWVudCBHZW5lcmF0b3IgKFYyIFJldmFtcGVkKSAtLS0KZXhwb3J0IGNvbnN0IEdyYWRpZW50R2VuZXJhdG9yID0gKCkgPT4gewogICAgY29uc3QgW3R5cGUsIHNldFR5cGVdID0gdXNlU3RhdGUoJ2xpbmVhcicpOwogICAgY29uc3QgW2MxLCBzZXRDMV0gPSB1c2VTdGF0ZSgnIzYzNWJmZicpOwogICAgY29uc3QgW2MyLCBzZXRDMl0gPSB1c2VTdGF0ZSgnI2Y0M2Y1ZScpOwogICAgY29uc3QgW2FuZ2xlLCBzZXRBbmdsZV0gPSB1c2VTdGF0ZSgxMzUpOwogICAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGNzcyA9IHR5cGUgPT09ICdsaW5lYXInCiAgICAgICAgPyBgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCR7YW5nbGV9ZGVnLCAke2MxfSwgJHtjMn0pO2AKICAgICAgICA6IGBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgJHtjMX0sICR7YzJ9KTtgOwogICAgY29uc3QgaGFuZGxlUmFuZG9taXplID0gKCkgPT4gewogICAgICAgIGNvbnN0IHJhbmRvbUhleCA9ICgpID0+ICcjJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE2Nzc3MjE1KS50b1N0cmluZygxNikucGFkU3RhcnQoNiwgJzAnKTsKICAgICAgICBzZXRDMShyYW5kb21IZXgoKSk7CiAgICAgICAgc2V0QzIocmFuZG9tSGV4KCkpOwogICAgICAgIHNldEFuZ2xlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDM2MCkpOwogICAgfTsKICAgIGNvbnN0IGNvcHlUb0NsaXBib2FyZCA9ICgpID0+IHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjc3MpOwogICAgICAgIHNldENvcGllZCh0cnVlKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZChmYWxzZSksIDIwMDApOwogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiR3JhZGllbnQgU3R1ZGlvIiwgZGVzY3JpcHRpb246ICJEZXNpZ24gaGlnaC1lbmQgbGluZWFyIGFuZCByYWRpYWwgZ3JhZGllbnRzIGZvciBtb2Rlcm4gdXNlciBpbnRlcmZhY2VzLiBJbnN0YW50IENTUyBjb3B5IHdpdGggcmVhbC10aW1lIGVkaXRpbmcuIiwgaWNvbjogUGFsZXR0ZSwgY2F0ZWdvcnk6ICJDU1MiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IG1heC13LTZ4bCBteC1hdXRvIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiaC04MCBtZDpoLVs0MDBweF0gcm91bmRlZC1bMnJlbV0gc2hhZG93LXN0cmlwZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiBncm91cCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDAiLCBzdHlsZTogeyBiYWNrZ3JvdW5kOiB0eXBlID09PSAnbGluZWFyJyA/IGBsaW5lYXItZ3JhZGllbnQoJHthbmdsZX1kZWcsICR7YzF9LCAke2MyfSlgIDogYHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCAke2MxfSwgJHtjMn0pYCB9LCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgaW5zZXQtMCBiZy13aGl0ZS8xMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IHBvaW50ZXItZXZlbnRzLW5vbmUiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGJvdHRvbS02IHJpZ2h0LTYiLCBjaGlsZHJlbjogX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiBoYW5kbGVSYW5kb21pemUsIGNsYXNzTmFtZTogInAtNCBiZy13aGl0ZS8yMCBiYWNrZHJvcC1ibHVyLW1kIHJvdW5kZWQtZnVsbCB0ZXh0LXdoaXRlIGhvdmVyOmJnLXdoaXRlLzQwIHRyYW5zaXRpb24tYWxsIGJvcmRlciBib3JkZXItd2hpdGUvMjAgc2hhZG93LXhsIiwgdGl0bGU6ICJSYW5kb21pemUgQ29sb3JzIiwgY2hpbGRyZW46IF9qc3goU2h1ZmZsZSwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IiB9KSB9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgbGc6Z3JpZC1jb2xzLTEyIGdhcC04IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImxnOmNvbC1zcGFuLTcgc3BhY2UteS02IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcC04IHJvdW5kZWQtM3hsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgc2hhZG93LXNtIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHAtMSByb3VuZGVkLTJ4bCIsIGNoaWxkcmVuOiBbX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VHlwZSgnbGluZWFyJyksIGNsYXNzTmFtZTogYGZsZXgtMSBweS0zIHRleHQtc20gZm9udC1ib2xkIHJvdW5kZWQteGwgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgJHt0eXBlID09PSAnbGluZWFyJyA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstNzAwIHRleHQtYnJhbmQtNjAwIHNoYWRvdy1zbScgOiAndGV4dC1ncmF5LTUwMCd9YCwgY2hpbGRyZW46IFtfanN4KE1heGltaXplMiwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBMaW5lYXIiXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VHlwZSgncmFkaWFsJyksIGNsYXNzTmFtZTogYGZsZXgtMSBweS0zIHRleHQtc20gZm9udC1ib2xkIHJvdW5kZWQteGwgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgJHt0eXBlID09PSAncmFkaWFsJyA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstNzAwIHRleHQtYnJhbmQtNjAwIHNoYWRvdy1zbScgOiAndGV4dC1ncmF5LTUwMCd9YCwgY2hpbGRyZW46IFtfanN4KENpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBSYWRpYWwiXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMyIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkNvbG9yIDEiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJjb2xvciIsIHZhbHVlOiBjMSwgb25DaGFuZ2U6IGUgPT4gc2V0QzEoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LTE0IGgtMTQgcm91bmRlZC14bCBib3JkZXItMCBwLTEgY3Vyc29yLXBvaW50ZXIgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBjMS50b1VwcGVyQ2FzZSgpLCBvbkNoYW5nZTogZSA9PiBzZXRDMShlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogImZsZXgtMSBtaW4tdy0wIHAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIGZvbnQtbW9ubyB0ZXh0LXNtIGZvbnQtYm9sZCIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0zIiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiQ29sb3IgMiIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImNvbG9yIiwgdmFsdWU6IGMyLCBvbkNoYW5nZTogZSA9PiBzZXRDMihlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctMTQgaC0xNCByb3VuZGVkLXhsIGJvcmRlci0wIHAtMSBjdXJzb3ItcG9pbnRlciBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGMyLnRvVXBwZXJDYXNlKCksIG9uQ2hhbmdlOiBlID0+IHNldEMyKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAiZmxleC0xIG1pbi13LTAgcC0zIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgZm9udC1tb25vIHRleHQtc20gZm9udC1ib2xkIiB9KV0gfSldIH0pXSB9KSwgdHlwZSA9PT0gJ2xpbmVhcicgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogWyJSb3RhdGlvbiBBbmdsZTogIiwgYW5nbGUsICJcdTAwQjAiXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRBbmdsZSgwKSwgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtYnJhbmQtNjAwIHVwcGVyY2FzZSBob3Zlcjp1bmRlcmxpbmUiLCBjaGlsZHJlbjogIlJlc2V0IiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInJlbGF0aXZlIHB0LTEiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwIiwgbWF4OiAiMzYwIiwgdmFsdWU6IGFuZ2xlLCBvbkNoYW5nZTogZSA9PiBzZXRBbmdsZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtMiBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC02MDAiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBtdC0yIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LWdyYXktNDAwIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjaGlsZHJlbjogIjBcdTAwQjAiIH0pLCBfanN4KCJzcGFuIiwgeyBjaGlsZHJlbjogIjkwXHUwMEIwIiB9KSwgX2pzeCgic3BhbiIsIHsgY2hpbGRyZW46ICIxODBcdTAwQjAiIH0pLCBfanN4KCJzcGFuIiwgeyBjaGlsZHJlbjogIjI3MFx1MDBCMCIgfSksIF9qc3goInNwYW4iLCB7IGNoaWxkcmVuOiAiMzYwXHUwMEIwIiB9KV0gfSldIH0pXSB9KSldIH0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImxnOmNvbC1zcGFuLTUiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS05MDAgcm91bmRlZC1bMnJlbV0gcC04IGgtZnVsbCByZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHctMzIgaC0zMiBiZy1icmFuZC01MDAvMTAgYmx1ci0zeGwgcm91bmRlZC1mdWxsIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTYiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1icmFuZC00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0iLCBjaGlsZHJlbjogIkNTUyBTbmlwcGV0IiB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiBjb3B5VG9DbGlwYm9hcmQsIGNsYXNzTmFtZTogInAtMyBiZy13aGl0ZS8xMCBob3ZlcjpiZy13aGl0ZS8yMCByb3VuZGVkLXhsIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1hbGwgZ3JvdXAiLCBjaGlsZHJlbjogY29waWVkID8gX2pzeChDaGVjaywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IHRleHQtZ3JlZW4tNDAwIiB9KSA6IF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSksIF9qc3goImNvZGUiLCB7IGNsYXNzTmFtZTogImZvbnQtbW9ubyB0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC1ncmF5LTMwMCBsZWFkaW5nLXJlbGF4ZWQgYmxvY2sgYmctYmxhY2svNDAgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci13aGl0ZS81IHdoaXRlc3BhY2UtcHJlLXdyYXAiLCBjaGlsZHJlbjogY3NzIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTggcHQtOCBib3JkZXItdCBib3JkZXItd2hpdGUvNSB0ZXh0LWdyYXktNTAwIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHRleHQtY2VudGVyIiwgY2hpbGRyZW46ICJVbml2ZXJzYWwgY3Jvc3MtYnJvd3NlciBzdXBwb3J0IiB9KV0gfSkgfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBDb2xvciBQYWxldHRlIEdlbmVyYXRvciAtLS0KZXhwb3J0IGNvbnN0IENvbG9yUGFsZXR0ZUdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFtjb2xvcnMsIHNldENvbG9yc10gPSB1c2VTdGF0ZShbJyM2MzViZmYnLCAnI2Y0M2Y1ZScsICcjZmI5MjNjJywgJyMxMGI5ODEnLCAnIzBlYTVlOSddKTsKICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbY29waWVkSWR4LCBzZXRDb3BpZWRJZHhdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBnZW5lcmF0ZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2VuZXJhdGVUZXh0KCJHZW5lcmF0ZSBhIG1vZGVybiA1LWNvbG9yIGFlc3RoZXRpYyBoZXggcGFsZXR0ZS4gUmV0dXJuIG9ubHkgY29tbWEgc2VwYXJhdGVkIGhleCBjb2Rlcywgbm8gbWFya2Rvd24sIG5vIHRleHQuIik7CiAgICAgICAgICAgIGNvbnN0IGNsZWFuZWQgPSByZXMucmVwbGFjZSgvWyNcc10vZywgJycpLnNwbGl0KCcsJykubWFwKGMgPT4gYCMke2N9YCk7CiAgICAgICAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA9PT0gNSkKICAgICAgICAgICAgICAgIHNldENvbG9ycyhjbGVhbmVkKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgLy8gRmFsbGJhY2sKICAgICAgICAgICAgc2V0Q29sb3JzKFsnIzFhMWExYScsICcjZTYzOTQ2JywgJyNmMWZhZWUnLCAnI2E4ZGFkYycsICcjNDU3YjlkJ10uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KSk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBjb3B5Q29sb3IgPSAoYywgaSkgPT4gewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGMpOwogICAgICAgIHNldENvcGllZElkeChpKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZElkeChudWxsKSwgMTUwMCk7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJBSSBQYWxldHRlIEdlbmVyYXRvciIsIGRlc2NyaXB0aW9uOiAiSGFybmVzcyBBSSB0byBjcmVhdGUgaGFybW9uaW91cyBjb2xvciBzY2hlbWVzLiBQZXJmZWN0IGZvciBicmFuZCBpZGVudGl0aWVzIGFuZCB3ZWJzaXRlIHRoZW1lcy4iLCBpY29uOiBTcGFya2xlcywgY2F0ZWdvcnk6ICJDU1MiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IG1heC13LTR4bCBteC1hdXRvIHRleHQtY2VudGVyIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGgtNzIgcm91bmRlZC1bNDBweF0gb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy0yeGwgYm9yZGVyLTggYm9yZGVyLXdoaXRlIGRhcms6Ym9yZGVyLWRhcmstODAwIiwgY2hpbGRyZW46IGNvbG9ycy5tYXAoKGMsIGkpID0+IChfanN4cygiZGl2IiwgeyBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IGMgfSwgb25DbGljazogKCkgPT4gY29weUNvbG9yKGMsIGkpLCBjbGFzc05hbWU6ICJmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcGItOCBncm91cCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCBob3ZlcjpmbGV4LVsxLjVdIHJlbGF0aXZlIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLWJsYWNrLzIwIGJhY2tkcm9wLWJsdXItbWQgcHgtMyBweS0xLjUgcm91bmRlZC1mdWxsIHRleHQtd2hpdGUgdGV4dC1bMTBweF0gZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctdGlnaHRlciBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IiwgY2hpbGRyZW46IGNvcGllZElkeCA9PT0gaSA/ICdDb3BpZWQhJyA6IGMgfSksIF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtd2hpdGUvNDAgbXQtMiBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IiB9KV0gfSwgaSkpKSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogZ2VuZXJhdGUsIGRpc2FibGVkOiBpc0xvYWRpbmcsIGNsYXNzTmFtZTogInB4LTEyIHB5LTUgYmctZ3JheS05MDAgZGFyazpiZy13aGl0ZSB0ZXh0LXdoaXRlIGRhcms6dGV4dC1ncmF5LTkwMCByb3VuZGVkLWZ1bGwgZm9udC1ibGFjayB0ZXh0LWxnIHNoYWRvdy0yeGwgaG92ZXI6c2NhbGUtMTA1IGFjdGl2ZTpzY2FsZS05NSB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBteC1hdXRvIiwgY2hpbGRyZW46IFtpc0xvYWRpbmcgPyBfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy02IGgtNiBhbmltYXRlLXNwaW4iIH0pIDogX2pzeChSZWZyZXNoQ3csIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSksICJHZW5lcmF0ZSBOZXcgQWVzdGhldGljIl0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIEhleCB0byBSR0JBIENvbnZlcnRlciAtLS0KZXhwb3J0IGNvbnN0IEhleFRvUmdiYUNvbnZlcnRlciA9ICgpID0+IHsKICAgIGNvbnN0IFtoZXgsIHNldEhleF0gPSB1c2VTdGF0ZSgnIzYzNUJGRicpOwogICAgY29uc3QgW29wYWNpdHksIHNldE9wYWNpdHldID0gdXNlU3RhdGUoMSk7CiAgICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgcmdiYSA9IGhleFRvUmdiYShoZXgsIG9wYWNpdHkpOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJIZXggdG8gUkdCQSBDb252ZXJ0ZXIiLCBkZXNjcmlwdGlvbjogIlByZWNpc2lvbiBjb2xvciBjb252ZXJzaW9uIHdpdGggYWxwaGEgY2hhbm5lbCBzdXBwb3J0LiBFc3NlbnRpYWwgZm9yIGRldmVsb3BlcnMgbWFuYWdpbmcgb3BhY2l0eS4iLCBpY29uOiBEcm9wbGV0LCBjYXRlZ29yeTogIkNTUyIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTEyIG1heC13LXhsIG14LWF1dG8gc3BhY2UteS04IHRleHQtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMzIgaC0zMiByb3VuZGVkLWZ1bGwgbXgtYXV0byBzaGFkb3ctMnhsIGJvcmRlci04IGJvcmRlci13aGl0ZSBkYXJrOmJvcmRlci1kYXJrLTgwMCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAiLCBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IHJnYmEgfSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0zIiwgY2hpbGRyZW46ICJDb2xvciBQaWNrIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJjb2xvciIsIHZhbHVlOiBoZXgsIG9uQ2hhbmdlOiBlID0+IHNldEhleChlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBoLTE0IHJvdW5kZWQteGwgYm9yZGVyLTAgcC0xIGN1cnNvci1wb2ludGVyIHNoYWRvdy1zbSIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gbWItMiIsIGNoaWxkcmVuOiBfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIiwgY2hpbGRyZW46IFsiT3BhY2l0eTogIiwgTWF0aC5yb3VuZChvcGFjaXR5ICogMTAwKSwgIiUiXSB9KSB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJyYW5nZSIsIG1pbjogIjAiLCBtYXg6ICIxIiwgc3RlcDogIjAuMDEiLCB2YWx1ZTogb3BhY2l0eSwgb25DaGFuZ2U6IGUgPT4gc2V0T3BhY2l0eShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGgtMiBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC02MDAiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHAtNiByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBncm91cCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJSR0JBIE91dHB1dCIgfSksIF9qc3goImNvZGUiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ib2xkIHRleHQtYnJhbmQtNjAwIGRhcms6dGV4dC1icmFuZC00MDAiLCBjaGlsZHJlbjogcmdiYSB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4geyBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChyZ2JhKTsgc2V0Q29waWVkKHRydWUpOyBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZChmYWxzZSksIDIwMDApOyB9LCBjbGFzc05hbWU6ICJwLTMgYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLXhsIHNoYWRvdy1zbSBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGhvdmVyOnRleHQtYnJhbmQtNjAwIHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IGNvcGllZCA/IF9qc3goQ2hlY2ssIHsgY2xhc3NOYW1lOiAidy01IGgtNSB0ZXh0LWdyZWVuLTUwMCIgfSkgOiBfanN4KENvcHksIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSldIH0pXSB9KV0gfSkgfSkpOwp9Owo=","@/App":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBIYXNoUm91dGVyIGFzIFJvdXRlciwgUm91dGVzLCBSb3V0ZSwgTGluaywgTmF2aWdhdGUsIHVzZVBhcmFtcywgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJzsKaW1wb3J0IHsgTWVudSwgTW9vbiwgU3VuLCBTZWFyY2gsIEFycm93UmlnaHQsIEZpbGVUZXh0LCBRckNvZGUsIENsb2NrLCBUeXBlLCBLZXksIFBhbGV0dGUsIFdhbmQyLCBTaGFyZTIsIERvbGxhclNpZ24sIFNjYW5CYXJjb2RlLCBMYXlvdXREYXNoYm9hcmQsIEhpc3RvcnksIExpbmVDaGFydCwgTGlzdCwgSGFzaCwgUGVuY2lsTGluZSwgU2hpZWxkQ2hlY2ssIFlvdXR1YmUsIENhbGN1bGF0b3IsIEJhckNoYXJ0MywgTGlzdFRvZG8sIEFjdGl2aXR5LCBGaWxlRWRpdCwgQnJhaW5DaXJjdWl0LCBMYXlvdXRMaXN0LCBUd2l0dGVyLCBIb3VyZ2xhc3MsIE1vdXNlUG9pbnRlckNsaWNrLCBXaW5kLCBGaWxlU3ByZWFkc2hlZXQsIFNwYXJrbGVzLCBEcm9wbGV0LCBUcmVuZGluZ1VwLCBCcmllZmNhc2UsIE11c2ljLCBGaWxlQXVkaW8sIEdsb2JlLCBMaW5rZWRpbiwgU2Npc3NvcnMsIFJlcGVhdCwgTWF4aW1pemUsIEZpbGVUeXBlLCBGaWxlU3RhY2ssIE1pYzIsIFBpYW5vLCBCb29rT3BlbiwgUmVjZWlwdCwgVGltZXIsIE5vdGVib29rLCBVdGVuc2lscywgVHJvcGh5LCBNdXNpYzIsIFNsaWRlcnMsIENvZGUsIEFsaWduSnVzdGlmeSwgTGF5ZXJzLCBNaWMsIFNob3BwaW5nQmFnLCBQYWxtdHJlZSwgU3BsaXQgfSBmcm9tICdsdWNpZGUtcmVhY3QnOwppbXBvcnQgeyBTaWRlYmFyLCBMb2dvTWFyayB9IGZyb20gJ0AvY29tcG9uZW50cy9TaWRlYmFyJzsKaW1wb3J0IHsgQ2FzZUNvbnZlcnRlciwgUGFzc3dvcmRHZW5lcmF0b3IsIFFyQ29kZUdlbmVyYXRvciwgVGV4dFN1bW1hcml6ZXIsIEJhcmNvZGVHZW5lcmF0b3IsIExpc3RSYW5kb21pemVyLCBIYW5kd3JpdGluZ0NvbnZlcnRlciwgUXVpY2tOb3RlcywgVGFsbHlDb3VudGVyLCBDc3ZTcGxpdHRlciwgSnNvbkZvcm1hdHRlciwgTG9yZW1JcHN1bSB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29scy9UZXh0VG9vbHMnOwppbXBvcnQgeyBHcmFkaWVudEdlbmVyYXRvciwgQ29sb3JQYWxldHRlR2VuZXJhdG9yLCBIZXhUb1JnYmFDb252ZXJ0ZXIsIEdsYXNzbW9ycGhpc21HZW5lcmF0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbHMvQ1NTVG9vbHMnOwppbXBvcnQgeyBDb3VudGRvd25UaW1lciwgTWluaW1hbFRvZG9MaXN0LCBIYWJpdFRyYWNrZXIsIEZvY3VzVGltZXIsIERheVBsYW5uZXIsIExpZmVQcm9ncmVzcywgQnJlYXRoaW5nQm94LCBUaW1lTG9nZ2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xzL1RpbWVUb29scyc7CmltcG9ydCB7IEdyYW1tYXJQb2xpc2hlciwgU29jaWFsQ2FwdGlvbkdlbmVyYXRvciwgS2V5d29yZFJlc2VhcmNoZXIsIEFpUGRmQXNzaXN0YW50LCBFeHBsYWluZXJUb29sLCBCaW9Xcml0ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbHMvQWlUb29scyc7CmltcG9ydCB7IEN1cnJlbmN5Q29udmVydGVyLCBNcnJHZW5lcmF0b3IsIEhpc3RvcmljYWxSYXRlcywgQ3VycmVuY3lDaGFydHMsIEJhbmtTdGF0ZW1lbnRDb252ZXJ0ZXIsIEluZmxhdGlvbkNhbGN1bGF0b3IsIFN0b2NrQW5hbHl6ZXIsIFRpbWVJc01vbmV5LCBDb21wb3VuZEludGVyZXN0Q2FsY3VsYXRvciwgRnJlZWxhbmNlUmF0ZUNhbGN1bGF0b3IsIEludm9pY2VHZW5lcmF0b3IsIEJ1eU9yUGFzc0Fkdmlzb3IsIERlYnRQbGFubmVyLCBCdXJuUmF0ZUNhbGN1bGF0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbHMvRmluYW5jZVRvb2xzJzsKaW1wb3J0IHsgTWQ1R2VuZXJhdG9yLCBTaGEyNTZHZW5lcmF0b3IsIERvbWFpblRvSXBDb252ZXJ0ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbHMvQ29kaW5nVG9vbHMnOwppbXBvcnQgeyBJbnN0YWdyYW1Qb3N0R2VuZXJhdG9yLCBZb3V0dWJlVGh1bWJuYWlsR3JhYmJlciwgTGlua2VkaW5Qb3N0R2VuZXJhdG9yLCBUd2VldEdlbmVyYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29scy9Tb2NpYWxUb29scyc7CmltcG9ydCB7IFNvbmdCcG1GaW5kZXIsIEF1ZGlvQ29udmVydGVyLCBTbWFydEF1ZGlvVHJpbW1lciwgTHlyaWNGaXhlciwgQ2hvcmRIZWxwZXIsIFBpdGNoU2hpZnRlciwgQXVkaW9SZWNvcmRlciwgTWV0cm9ub21lLCBTdGVtU2VwYXJhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xzL011c2ljVG9vbHMnOwppbXBvcnQgeyBJbWFnZUNvbnZlcnRlciwgSW1hZ2VSZXNpemVyIH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xzL0ltYWdlVG9vbHMnOwppbXBvcnQgeyBQZGZUb1dvcmRDb252ZXJ0ZXIsIFBkZk1lcmdlciB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29scy9QZGZUb29scyc7CmltcG9ydCB7IERlZXBUaGlua2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xzL0RlZXBUaGlua2VyJzsKaW1wb3J0IHsgTm90ZXNBcHAgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbHMvTm90ZXNBcHAnOwppbXBvcnQgeyBJbnRlcnZhbFRpbWVyIH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xzL0ludGVydmFsVGltZXInOwppbXBvcnQgeyBBaVdvZEdlbmVyYXRvciwgTWFjcm9DYWxjdWxhdG9yLCBPbmVSZXBNYXhDYWxjIH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xzL0ZpdG5lc3NUb29scyc7CmltcG9ydCB7IEx5cmljQ2FyZEdlbmVyYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29scy9MeXJpY0NhcmRHZW5lcmF0b3InOwovLyBBbmFseXRpY3MgVHJhY2tlciBDb21wb25lbnQKY29uc3QgQW5hbHl0aWNzVHJhY2tlciA9ICgpID0+IHsKICAgIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgLy8gRml4OiBBY2Nlc3MgZ3RhZyBvbiB3aW5kb3cgYnkgY2FzdGluZyB0byBhbnkgdG8gYXZvaWQgVHlwZVNjcmlwdCBwcm9wZXJ0eSBlcnJvcgogICAgICAgIGlmICh0eXBlb2Ygd2luZG93Lmd0YWcgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgd2luZG93Lmd0YWcoJ2NvbmZpZycsICdHLU1HRjE2WFk0SDcnLCB7CiAgICAgICAgICAgICAgICBwYWdlX3BhdGg6IGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoLAogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9LCBbbG9jYXRpb25dKTsKICAgIHJldHVybiBudWxsOwp9OwovLyBTY3JvbGwgdG8gVG9wIG9uIHJvdXRlIGNoYW5nZQpjb25zdCBTY3JvbGxUb1RvcCA9ICgpID0+IHsKICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHVzZUxvY2F0aW9uKCk7CiAgICB1c2VFZmZlY3QoKCkgPT4gewogICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKICAgIH0sIFtwYXRobmFtZV0pOwogICAgcmV0dXJuIG51bGw7Cn07Ci8vIFRvb2wgRGVmaW5pdGlvbiBBcnJheSAtIE9wdGltaXplZCBmb3IgU0VPCmNvbnN0IEZFQVRVUkVEX1RPT0xTID0gWwogICAgeyBpZDogJ3N0ZW0tc2VwYXJhdG9yJywgbmFtZTogJ1N0ZW0gU2VwYXJhdG9yIFBybycsIGRlc2M6ICdJc29sYXRlIHZvY2FscyBhbmQgaW5zdHJ1bWVudGFscyBmcm9tIGFueSBzb25nIHVzaW5nIGhpZ2gtcGVyZm9ybWFuY2UgQUkgc3BlY3RyYWwgYW5hbHlzaXMuJywgcGF0aDogJy90b29sL3N0ZW0tc2VwYXJhdG9yJywgaWNvbjogU3BsaXQsIGNvbG9yOiAndGV4dC1pbmRpZ28tNjAwJywgY2F0ZWdvcnk6ICdNdXNpYycsIGlzTmV3OiB0cnVlIH0sCiAgICB7IGlkOiAnbWV0cm9ub21lJywgbmFtZTogJ01ldHJvbm9tZScsIGRlc2M6ICdQcmVjaXNpb24gZHJpZnQtZnJlZSBtZXRyb25vbWUgZm9yIG11c2ljaWFucyB3aXRoIHRhcCB0ZW1wbyBhbmQgdGltZSBzaWduYXR1cmUgc3VwcG9ydC4nLCBwYXRoOiAnL3Rvb2wvbWV0cm9ub21lJywgaWNvbjogVGltZXIsIGNvbG9yOiAndGV4dC1yb3NlLTYwMCcsIGNhdGVnb3J5OiAnTXVzaWMnLCBpc05ldzogdHJ1ZSB9LAogICAgeyBpZDogJ2J1eS1vci1wYXNzJywgbmFtZTogIkFJICdCdXkgb3IgUGFzcycgQWR2aXNvciIsIGRlc2M6ICJHZXQgYW4gQUkgbG9naWMgYW5hbHlzaXMgb24gd2hldGhlciB5b3Ugc2hvdWxkIGJ1eSBzb21ldGhpbmcgb3Igc2F2ZSB5b3VyIG1vbmV5LiIsIHBhdGg6ICcvdG9vbC9idXktb3ItcGFzcycsIGljb246IFNob3BwaW5nQmFnLCBjb2xvcjogJ3RleHQtcm9zZS01MDAnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnLCBpc05ldzogdHJ1ZSB9LAogICAgeyBpZDogJ2RlYnQtcGxhbm5lcicsIG5hbWU6ICdEZWJ0IFN0cmF0ZWd5IFBsYW5uZXInLCBkZXNjOiAnQ2FsY3VsYXRlIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgb3V0IG9mIGRlYnQgdXNpbmcgU25vd2JhbGwgb3IgQXZhbGFuY2hlIG1ldGhvZHMuJywgcGF0aDogJy90b29sL2RlYnQtcGxhbm5lcicsIGljb246IFNoaWVsZENoZWNrLCBjb2xvcjogJ3RleHQtZW1lcmFsZC01MDAnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnLCBpc05ldzogdHJ1ZSB9LAogICAgeyBpZDogJ3J1bndheS1jYWxjJywgbmFtZTogJ0ZyZWVsYW5jZSBSdW53YXkgQ2FsYycsIGRlc2M6ICdGaW5kIG91dCBleGFjdGx5IGhvdyBtYW55IG1vbnRocyB5b3VyIHNhdmluZ3Mgd2lsbCBsYXN0IGF0IHlvdXIgY3VycmVudCBidXJuIHJhdGUuJywgcGF0aDogJy90b29sL3J1bndheS1jYWxjJywgaWNvbjogUGFsbXRyZWUsIGNvbG9yOiAndGV4dC1icmFuZC01MDAnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnLCBpc05ldzogdHJ1ZSB9LAogICAgeyBpZDogJ2pzb24tZm9ybWF0dGVyJywgbmFtZTogJ0pTT04gRm9ybWF0dGVyICYgVmFsaWRhdG9yJywgZGVzYzogJ1ByZXR0aWZ5LCBtaW5pZnkgYW5kIHZhbGlkYXRlIEpTT04gZGF0YSBpbnN0YW50bHkuIEEgZnJlZSBkZXZlbG9wZXIgdG9vbCBmb3IgY2xlYW5pbmcgbWVzc3kgSlNPTiBjb2RlLicsIHBhdGg6ICcvdG9vbC9qc29uLWZvcm1hdHRlcicsIGljb246IENvZGUsIGNvbG9yOiAndGV4dC1icmFuZC01MDAnLCBjYXRlZ29yeTogJ1RleHQnLCBpc05ldzogdHJ1ZSB9LAogICAgeyBpZDogJ2xvcmVtLWlwc3VtJywgbmFtZTogJ0xvcmVtIElwc3VtIEdlbmVyYXRvcicsIGRlc2M6ICdHZW5lcmF0ZSBoaWdoLXF1YWxpdHkgcGxhY2Vob2xkZXIgdGV4dCBmb3Igd2ViIGRlc2lnbiBhbmQgbW9ja3Vwcy4gQ3VzdG9tIHBhcmFncmFwaCBhbmQgd29yZCBjb3VudCBvcHRpb25zLicsIHBhdGg6ICcvdG9vbC9sb3JlbS1pcHN1bScsIGljb246IEFsaWduSnVzdGlmeSwgY29sb3I6ICd0ZXh0LWdyYXktNTAwJywgY2F0ZWdvcnk6ICdUZXh0JywgaXNOZXc6IHRydWUgfSwKICAgIHsgaWQ6ICdnbGFzc21vcnBoaXNtJywgbmFtZTogJ0dsYXNzbW9ycGhpc20gQ1NTIEdlbmVyYXRvcicsIGRlc2M6ICdDcmVhdGUgdHJlbmR5IGZyb3N0ZWQtZ2xhc3MgVUkgY29tcG9uZW50cyB3aXRoIHJlYWwtdGltZSBDU1MgY29kZSBnZW5lcmF0aW9uLiBBZGp1c3QgYmx1ciwgc2F0dXJhdGlvbiwgYW5kIHRyYW5zcGFyZW5jeS4nLCBwYXRoOiAnL3Rvb2wvZ2xhc3Ntb3JwaGlzbScsIGljb246IExheWVycywgY29sb3I6ICd0ZXh0LWluZGlnby01MDAnLCBjYXRlZ29yeTogJ0NTUycsIGlzTmV3OiB0cnVlIH0sCiAgICB7IGlkOiAnYXVkaW8tcmVjb3JkZXInLCBuYW1lOiAnQUkgVm9pY2UgU3R1ZGlvICYgVHJhbnNjcmlwdCcsIGRlc2M6ICdSZWNvcmQgaGlnaC1xdWFsaXR5IGF1ZGlvIG1lbW9zIGFuZCBnZXQgaW5zdGFudCBBSSB0cmFuc2NyaXB0aW9ucy4gRnJlZSBicm93c2VyLWJhc2VkIHZvaWNlIHJlY29yZGVyLicsIHBhdGg6ICcvdG9vbC9hdWRpby1yZWNvcmRlcicsIGljb246IE1pYywgY29sb3I6ICd0ZXh0LWJyYW5kLTUwMCcsIGNhdGVnb3J5OiAnTXVzaWMnLCBpc05ldzogdHJ1ZSB9LAogICAgeyBpZDogJ3BpdGNoLXNoaWZ0ZXInLCBuYW1lOiAnQXVkaW8gUGl0Y2ggJiBUZW1wbyBTaGlmdGVyJywgZGVzYzogJ0NoYW5nZSB0aGUgcGl0Y2ggYW5kIHNwZWVkIG9mIGFueSBzb25nIGluZGVwZW5kZW50bHkuIFBlcmZlY3QgZm9yIG11c2ljaWFucyB0cmFuc2NyaWJpbmcgb3IgcHJhY3RpY2luZyBtdXNpYy4nLCBwYXRoOiAnL3Rvb2wvcGl0Y2gtc2hpZnRlcicsIGljb246IFNsaWRlcnMsIGNvbG9yOiAndGV4dC1icmFuZC01MDAnLCBjYXRlZ29yeTogJ011c2ljJyB9LAogICAgeyBpZDogJ2x5cmljLWNhcmQnLCBuYW1lOiAnTHlyaWMgQ2FyZCBEZXNpZ24gU3R1ZGlvJywgZGVzYzogJ1RyYW5zZm9ybSBzb25nIGx5cmljcyBpbnRvIGJlYXV0aWZ1bCBzaGFyZWFibGUgY2FyZHMgZm9yIEluc3RhZ3JhbSBTdG9yaWVzIGFuZCBzb2NpYWwgbWVkaWEuJywgcGF0aDogJy90b29sL2x5cmljLWNhcmQnLCBpY29uOiBNdXNpYzIsIGNvbG9yOiAndGV4dC1yb3NlLTUwMCcsIGNhdGVnb3J5OiAnTXVzaWMnIH0sCiAgICB7IGlkOiAnYWktd29kJywgbmFtZTogJ0FJIFdPRCBXb3Jrb3V0IEdlbmVyYXRvcicsIGRlc2M6ICdHZW5lcmF0ZSBjdXN0b20gQ3Jvc3NGaXQgYW5kIEhJSVQgd29ya291dHMgYmFzZWQgb24geW91ciBhdmFpbGFibGUgZXF1aXBtZW50IGFuZCB0aW1lLicsIHBhdGg6ICcvdG9vbC9haS13b2QnLCBpY29uOiBTcGFya2xlcywgY29sb3I6ICd0ZXh0LWJyYW5kLTUwMCcsIGNhdGVnb3J5OiAnRml0bmVzcycgfSwKICAgIHsgaWQ6ICdtYWNyby1jYWxjJywgbmFtZTogJ01hY3JvICYgVERFRSBDYWxjdWxhdG9yJywgZGVzYzogJ0NhbGN1bGF0ZSB5b3VyIG1haW50ZW5hbmNlIGNhbG9yaWVzIGFuZCBkYWlseSBtYWNyb251dHJpZW50IHRhcmdldHMgZm9yIHdlaWdodCBsb3NzIG9yIG11c2NsZSBnYWluLicsIHBhdGg6ICcvdG9vbC9tYWNyby1jYWxjJywgaWNvbjogVXRlbnNpbHMsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgY2F0ZWdvcnk6ICdGaXRuZXNzJyB9LAogICAgeyBpZDogJzFybS1jYWxjJywgbmFtZTogJzFSTSBTdHJlbmd0aCBFc3RpbWF0b3InLCBkZXNjOiAnRXN0aW1hdGUgeW91ciBvbmUtcmVwIG1heCBhbmQgc2VlIHRyYWluaW5nIHBlcmNlbnRhZ2VzIGZvciBwb3dlcmxpZnRpbmcgYW5kIGJvZHlidWlsZGluZy4nLCBwYXRoOiAnL3Rvb2wvMXJtLWNhbGMnLCBpY29uOiBUcm9waHksIGNvbG9yOiAndGV4dC1hbWJlci01MDAnLCBjYXRlZ29yeTogJ0ZpdG5lc3MnIH0sCiAgICB7IGlkOiAnaW50ZXJ2YWwtdGltZXInLCBuYW1lOiAnTmluamEgSElJVCAmIFRhYmF0YSBUaW1lcicsIGRlc2M6ICdQcm9mZXNzaW9uYWwgaW50ZXJ2YWwgdGltZXIgZm9yIEhJSVQgd29ya291dHMgYW5kIGNpcmN1aXQgdHJhaW5pbmcgd2l0aCBjdXN0b21pemFibGUgcm91bmRzIGFuZCBwaGFzZXMuJywgcGF0aDogJy90b29sL2ludGVydmFsLXRpbWVyJywgaWNvbjogVGltZXIsIGNvbG9yOiAndGV4dC1yb3NlLTYwMCcsIGNhdGVnb3J5OiAnRml0bmVzcycgfSwKICAgIHsgaWQ6ICduaW5qYS1ub3RlcycsIG5hbWU6ICdOaW5qYU5vdGVzIEFJIFdvcmtzcGFjZScsIGRlc2M6ICdNYXJrZG93biBub3RlLXRha2luZyB3aXRoIGFuIEFJIGNvLXBpbG90LiBTdW1tYXJpemUsIGJyYWluc3Rvcm0sIGFuZCBvcmdhbml6ZSB0aG91Z2h0cyBpbiBvbmUgcGxhY2UuJywgcGF0aDogJy90b29sL25vdGVzJywgaWNvbjogTm90ZWJvb2ssIGNvbG9yOiAndGV4dC1pbmRpZ28tNjAwJywgY2F0ZWdvcnk6ICdUZXh0JyB9LAogICAgeyBpZDogJ2Jpby13cml0ZXInLCBuYW1lOiAnQUkgRnJlZWxhbmNlciBCaW8gV3JpdGVyJywgZGVzYzogJ0dlbmVyYXRlIHByb2Zlc3Npb25hbCBiaW9zIGZvciBMaW5rZWRJbiwgcG9ydGZvbGlvcywgYW5kIGVtYWlsIHNpZ25hdHVyZXMuIE9wdGltaXplZCBmb3IgYnJhbmQgdm9pY2UuJywgcGF0aDogJy90b29sL2Jpby13cml0ZXInLCBpY29uOiBCcmllZmNhc2UsIGNvbG9yOiAndGV4dC1icmFuZC01MDAnLCBjYXRlZ29yeTogJ0FJJyB9LAogICAgeyBpZDogJ3RpbWUtbG9nZ2VyJywgbmFtZTogJ0ZyZWVsYW5jZSBUaW1lIExvZ2dlcicsIGRlc2M6ICdUcmFjayBiaWxsYWJsZSBob3VycyBhbmQgbWFuYWdlIHByb2plY3QgdGltZS4gU2ltcGxlLCBsb2NhbC1maXJzdCB0aW1lIHRyYWNraW5nIGZvciBwcm9mZXNzaW9uYWxzLicsIHBhdGg6ICcvdG9vbC90aW1lLWxvZ2dlcicsIGljb246IFRpbWVyLCBjb2xvcjogJ3RleHQtb3JhbmdlLTUwMCcsIGNhdGVnb3J5OiAnVGltZScgfSwKICAgIHsgaWQ6ICdpbnZvaWNlLWdlbmVyYXRvcicsIG5hbWU6ICdGcmVlIFBERiBJbnZvaWNlIEdlbmVyYXRvcicsIGRlc2M6ICdDcmVhdGUgYW5kIGRvd25sb2FkIHByb2Zlc3Npb25hbCBpbnZvaWNlcyBmb3IgeW91ciBmcmVlbGFuY2UgY2xpZW50cy4gTm8gYWNjb3VudCByZXF1aXJlZC4nLCBwYXRoOiAnL3Rvb2wvaW52b2ljZS1nZW5lcmF0b3InLCBpY29uOiBSZWNlaXB0LCBjb2xvcjogJ3RleHQtZ3JlZW4tNjAwJywgY2F0ZWdvcnk6ICdGaW5hbmNlJyB9LAogICAgeyBpZDogJ2V4cGxhaW5lci10b29sJywgbmFtZTogJ0FJIFVuaXZlcnNhbCBFeHBsYWluZXInLCBkZXNjOiAnRXhwbGFpbiBjb21wbGV4IGNvbmNlcHRzIGF0IGFueSBsZXZlbCB1c2luZyBBSS4gRnJvbSB0b2RkbGVyLWZyaWVuZGx5IHRvIFBoRCBsZXZlbCBjb21wbGV4aXR5LicsIHBhdGg6ICcvdG9vbC9leHBsYWluZXInLCBpY29uOiBCb29rT3BlbiwgY29sb3I6ICd0ZXh0LWFtYmVyLTUwMCcsIGNhdGVnb3J5OiAnQUknIH0sCiAgICB7IGlkOiAnY2hvcmQtaGVscGVyJywgbmFtZTogJ0FJIENob3JkIFByb2dyZXNzaW9uIEhlbHBlcicsIGRlc2M6ICdGaW5kIGNob3JkcyBpbiBhbnkgbXVzaWNhbCBrZXkgYW5kIGdldCBBSSBzdWdnZXN0aW9ucyBmb3Igc29uZyBwcm9ncmVzc2lvbnMgYW5kIHZpYmVzLicsIHBhdGg6ICcvdG9vbC9jaG9yZC1oZWxwZXInLCBpY29uOiBQaWFubywgY29sb3I6ICd0ZXh0LXJvc2UtNTAwJywgY2F0ZWdvcnk6ICdNdXNpYycgfSwKICAgIHsgaWQ6ICdseXJpYy1maXhlcicsIG5hbWU6ICdBSSBMeXJpYyBBc3Npc3RhbnQgJiBGaXhlcicsIGRlc2M6ICdJbXByb3ZlIHlvdXIgc29uZyBseXJpY3Mgd2l0aCBBSS4gRml4IHJoeW1lcywgcmh5dGhtLCBhbmQgd29yZCBjaG9pY2VzIHdoaWxlIGtlZXBpbmcgZW1vdGlvbi4nLCBwYXRoOiAnL3Rvb2wvbHlyaWMtZml4ZXInLCBpY29uOiBNaWMyLCBjb2xvcjogJ3RleHQtcm9zZS02MDAnLCBjYXRlZ29yeTogJ011c2ljJyB9LAogICAgeyBpZDogJ2RlZXAtdGhpbmtlcicsIG5hbWU6ICdBSSBEZWVwIExvZ2ljIFNvbHZlcicsIGRlc2M6ICdTb2x2ZSBjb21wbGV4IGFyY2hpdGVjdHVyYWwsIG1hdGhlbWF0aWNhbCwgYW5kIGxvZ2ljYWwgcHJvYmxlbXMgd2l0aCBoaWdoLWJ1ZGdldCBBSSByZWFzb25pbmcuJywgcGF0aDogJy90b29sL2RlZXAtdGhpbmtlcicsIGljb246IEJyYWluQ2lyY3VpdCwgY29sb3I6ICd0ZXh0LXB1cnBsZS02MDAnLCBjYXRlZ29yeTogJ0FJJyB9LAogICAgeyBpZDogJ3R3ZWV0LWdlbmVyYXRvcicsIG5hbWU6ICdBSSBUd2l0dGVyIChYKSBQb3N0IEdlbicsIGRlc2M6ICdHZW5lcmF0ZSB2aXJhbCBwb3N0IGlkZWFzIGFuZCB0aHJlYWRzIGZvciBYIGluc3RhbnRseSB1c2luZyBhZHZhbmNlZCBBSSBzb2NpYWwgbWVkaWEgbG9naWMuJywgcGF0aDogJy90b29sL3R3ZWV0LWdlbmVyYXRvcicsIGljb246IFR3aXR0ZXIsIGNvbG9yOiAndGV4dC1za3ktNTAwJywgY2F0ZWdvcnk6ICdTb2NpYWwnIH0sCiAgICB7IGlkOiAncGRmLW1lcmdlJywgbmFtZTogJ01lcmdlIFBERiBGaWxlcyBPbmxpbmUnLCBkZXNjOiAnQ29tYmluZSBtdWx0aXBsZSBQREYgZG9jdW1lbnRzIGludG8gb25lIHNpbmdsZSBmaWxlLiBTZWN1cmUgYW5kIHByaXZhdGUgYnJvd3Nlci1iYXNlZCBwcm9jZXNzaW5nLicsIHBhdGg6ICcvdG9vbC9wZGYtbWVyZ2UnLCBpY29uOiBGaWxlU3RhY2ssIGNvbG9yOiAndGV4dC1yZWQtNTAwJywgY2F0ZWdvcnk6ICdUZXh0JyB9LAogICAgeyBpZDogJ3BkZi10by13b3JkJywgbmFtZTogJ0NvbnZlcnQgUERGIHRvIFdvcmQgT25saW5lJywgZGVzYzogJ1RyYW5zZm9ybSBQREYgZG9jdW1lbnRzIGludG8gZWRpdGFibGUgV29yZCAoLmRvY3gpIGZpbGVzIGFjY3VyYXRlbHkgdXNpbmcgbG9jYWwgcHJvY2Vzc2luZy4nLCBwYXRoOiAnL3Rvb2wvcGRmLXRvLXdvcmQnLCBpY29uOiBGaWxlVHlwZSwgY29sb3I6ICd0ZXh0LXJlZC01MDAnLCBjYXRlZ29yeTogJ1RleHQnIH0sCiAgICB7IGlkOiAnaW1hZ2UtcmVzaXplcicsIG5hbWU6ICdGcmVlIEltYWdlIFJlc2l6ZXInLCBkZXNjOiAnUmVzaXplIGltYWdlcyB0byBzb2NpYWwgbWVkaWEgZGltZW5zaW9ucyBmb3IgSW5zdGFncmFtLCBZb3VUdWJlLCBhbmQgTGlua2VkSW4gaW5zdGFudGx5LicsIHBhdGg6ICcvdG9vbC9pbWFnZS1yZXNpemVyJywgaWNvbjogTWF4aW1pemUsIGNvbG9yOiAndGV4dC1ibHVlLTUwMCcsIGNhdGVnb3J5OiAnSW1hZ2UnIH0sCiAgICB7IGlkOiAnaW1hZ2UtY29udmVydGVyJywgbmFtZTogJ09ubGluZSBJbWFnZSBDb252ZXJ0ZXInLCBkZXNjOiAnQ29udmVydCBpbWFnZXMgYmV0d2VlbiBQTkcsIEpQRywgYW5kIFdFQlAgZm9ybWF0cyBwcml2YXRlbHkgaW4geW91ciBicm93c2VyLicsIHBhdGg6ICcvdG9vbC9pbWFnZS1jb252ZXJ0ZXInLCBpY29uOiBSZXBlYXQsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgY2F0ZWdvcnk6ICdJbWFnZScgfSwKICAgIHsgaWQ6ICdzbWFydC1hdWRpby10cmltbWVyJywgbmFtZTogJ1NtYXJ0IEF1ZGlvIFRyaW1tZXInLCBkZXNjOiAnQ3V0IGFuZCB0cmltIGF1ZGlvIHRyYWNrcyB3aXRoIHNhbXBsZS1hY2N1cmF0ZSBwcmVjaXNpb24uIEEgZnJlZSBvbmxpbmUgbXVzaWMgZWRpdGluZyB0b29sLicsIHBhdGg6ICcvdG9vbC9zbWFydC1hdWRpby10cmltbWVyJywgaWNvbjogU2Npc3NvcnMsIGNvbG9yOiAndGV4dC1yb3NlLTUwMCcsIGNhdGVnb3J5OiAnTXVzaWMnIH0sCiAgICB7IGlkOiAnbGlua2VkaW4tcG9zdCcsIG5hbWU6ICdMaW5rZWRJbiBQb3N0IEFJIENyZWF0b3InLCBkZXNjOiAnR2VuZXJhdGUgaGlnaC1lbmdhZ2VtZW50IHByb2Zlc3Npb25hbCBwb3N0cyBmb3IgTGlua2VkSW4uIE9wdGltaXplIHlvdXIgcGVyc29uYWwgYnJhbmQgd2l0aCBBSS4nLCBwYXRoOiAnL3Rvb2wvbGlua2VkaW4tcG9zdC1nZW5lcmF0b3InLCBpY29uOiBMaW5rZWRpbiwgY29sb3I6ICd0ZXh0LWJsdWUtNzAwJywgY2F0ZWdvcnk6ICdTb2NpYWwnIH0sCiAgICB7IGlkOiAnZG9tYWluLXRvLWlwJywgbmFtZTogJ0RvbWFpbiB0byBJUCBSZXNvbHZlcicsIGRlc2M6ICdMb29rdXAgdGhlIElQIGFkZHJlc3MgZm9yIGFueSBkb21haW4gbmFtZS4gUmVzb2x2ZSBJUHY0IGFuZCBJUHY2IHJlY29yZHMgaW5zdGFudGx5LicsIHBhdGg6ICcvdG9vbC9kb21haW4tdG8taXAnLCBpY29uOiBHbG9iZSwgY29sb3I6ICd0ZXh0LWluZGlnby01MDAnLCBjYXRlZ29yeTogJ0NvZGluZycgfSwKICAgIHsgaWQ6ICdhdWRpby1jb252ZXJ0ZXInLCBuYW1lOiAnRmFzdCBBdWRpbyBDb252ZXJ0ZXInLCBkZXNjOiAnQ29udmVydCBhdWRpbyBmaWxlcyB0byBXQVYgYW5kIG90aGVyIGZvcm1hdHMgZGlyZWN0bHkgaW4geW91ciBicm93c2VyLiBQcml2YXRlIGFuZCBzZWN1cmUuJywgcGF0aDogJy90b29sL2F1ZGlvLWNvbnZlcnRlcicsIGljb246IEZpbGVBdWRpbywgY29sb3I6ICd0ZXh0LXJvc2UtNTAwJywgY2F0ZWdvcnk6ICdNdXNpYycgfSwKICAgIHsgaWQ6ICdzb25nLWJwbScsIG5hbWU6ICdTb25nIEJQTSAmIEtleSBGaW5kZXInLCBkZXNjOiAnRGV0ZWN0IHRoZSB0ZW1wbyAoQlBNKSBhbmQgbXVzaWNhbCBrZXkgb2YgYW55IHNvbmcgaW5zdGFudGx5IHVzaW5nIEFJIGRhdGFiYXNlIHNlYXJjaC4nLCBwYXRoOiAnL3Rvb2wvc29uZy1icG0nLCBpY29uOiBNdXNpYywgY29sb3I6ICd0ZXh0LXJvc2UtNTAwJywgY2F0ZWdvcnk6ICdNdXNpYycgfSwKICAgIHsgaWQ6ICdjb21wb3VuZC1pbnRlcmVzdCcsIG5hbWU6ICdDb21wb3VuZCBJbnRlcmVzdCBDYWxjdWxhdG9yJywgZGVzYzogJ1Zpc3VhbGl6ZSB0aGUgZXhwb25lbnRpYWwgZ3Jvd3RoIG9mIHlvdXIgaW52ZXN0bWVudHMgb3ZlciB0aW1lIHdpdGggaW50ZXJhY3RpdmUgY2hhcnRzLicsIHBhdGg6ICcvdG9vbC9jb21wb3VuZC1pbnRlcmVzdCcsIGljb246IFRyZW5kaW5nVXAsIGNvbG9yOiAndGV4dC1lbWVyYWxkLTUwMCcsIGNhdGVnb3J5OiAnRmluYW5jZScgfSwKICAgIHsgaWQ6ICdmcmVlbGFuY2UtcmF0ZScsIG5hbWU6ICdIb3VybHkgUmF0ZSBDYWxjdWxhdG9yJywgZGVzYzogJ0NhbGN1bGF0ZSB5b3VyIGlkZWFsIGZyZWVsYW5jZSBob3VybHkgcmF0ZSBiYXNlZCBvbiB0YXJnZXQgc2FsYXJ5LCBleHBlbnNlcywgYW5kIHdvcmtsb2FkLicsIHBhdGg6ICcvdG9vbC9mcmVlbGFuY2UtcmF0ZScsIGljb246IEJyaWVmY2FzZSwgY29sb3I6ICd0ZXh0LWJsdWUtNTAwJywgY2F0ZWdvcnk6ICdGaW5hbmNlJyB9LAogICAgeyBpZDogJ2hleC10by1yZ2JhJywgbmFtZTogJ0hleCB0byBSR0JBIENvbnZlcnRlcicsIGRlc2M6ICdDb252ZXJ0IEhleCBjb2xvciBjb2RlcyB0byBSR0JBIHdpdGggYWxwaGEgY2hhbm5lbCB0cmFuc3BhcmVuY3kgZm9yIHdlYiBkZXZlbG9wbWVudC4nLCBwYXRoOiAnL3Rvb2wvaGV4LXRvLXJnYmEnLCBpY29uOiBEcm9wbGV0LCBjb2xvcjogJ3RleHQtcGluay02MDAnLCBjYXRlZ29yeTogJ0NTUycgfSwKICAgIHsgaWQ6ICdjc3Ytc3BsaXR0ZXInLCBuYW1lOiAnT25saW5lIENTViBTcGxpdHRlcicsIGRlc2M6ICdTcGxpdCBsYXJnZSBDU1YgZmlsZXMgaW50byBzbWFsbGVyIGNodW5rcyBmb3IgZWFzaWVyIGRhdGEgbWFuYWdlbWVudCBhbmQgaW1wb3J0aW5nLicsIHBhdGg6ICcvdG9vbC9jc3Ytc3BsaXR0ZXInLCBpY29uOiBGaWxlU3ByZWFkc2hlZXQsIGNvbG9yOiAndGV4dC1ncmVlbi02MDAnLCBjYXRlZ29yeTogJ1RleHQnIH0sCiAgICB7IGlkOiAnY29sb3ItcGFsZXR0ZScsIG5hbWU6ICdBSSBDb2xvciBQYWxldHRlIEdlbmVyYXRvcicsIGRlc2M6ICdHZW5lcmF0ZSBoYXJtb25pb3VzIGNvbG9yIHNjaGVtZXMgYW5kIFVJIHBhbGV0dGVzIGZyb20gdGV4dCBwcm9tcHRzIHVzaW5nIEFJLicsIHBhdGg6ICcvdG9vbC9jb2xvci1wYWxldHRlJywgaWNvbjogU3BhcmtsZXMsIGNvbG9yOiAndGV4dC1wdXJwbGUtNTAwJywgY2F0ZWdvcnk6ICdDU1MnIH0sCiAgICB7IGlkOiAnYnJlYXRoaW5nLWJveCcsIG5hbWU6ICdCb3ggQnJlYXRoaW5nIFRpbWVyJywgZGVzYzogJ1JlZHVjZSBzdHJlc3MgYW5kIHJlZ2FpbiBmb2N1cyB3aXRoIGd1aWRlZCBib3ggYnJlYXRoaW5nICg0LTQtNC00IHRlY2huaXF1ZSkuJywgcGF0aDogJy90b29sL2JyZWF0aGluZy1ib3gnLCBpY29uOiBXaW5kLCBjb2xvcjogJ3RleHQtY3lhbi01MDAnLCBjYXRlZ29yeTogJ1RpbWUnIH0sCiAgICB7IGlkOiAndGltZS1pcy1tb25leScsIG5hbWU6ICdNZWV0aW5nIENvc3QgQ2FsY3VsYXRvcicsIGRlc2M6ICdWaXN1YWxpemUgdGhlIHJlYWwtdGltZSBjb3N0IG9mIHlvdXIgbWVldGluZ3MgYmFzZWQgb24gdGhlIG51bWJlciBvZiBwZW9wbGUgYW5kIGhvdXJseSByYXRlcy4nLCBwYXRoOiAnL3Rvb2wvdGltZS1pcy1tb25leScsIGljb246IENsb2NrLCBjb2xvcjogJ3RleHQtZ3JlZW4tNjAwJywgY2F0ZWdvcnk6ICdGaW5hbmNlJyB9LAogICAgeyBpZDogJ2xpZmUtcHJvZ3Jlc3MnLCBuYW1lOiAnTGlmZSBQcm9ncmVzcyBWaXN1YWxpemVyJywgZGVzYzogJ0EgcGVyc3BlY3RpdmUtc2hpZnRpbmcgdG9vbCB0aGF0IHZpc3VhbGl6ZXMgeW91ciBsaWZlIHByb2dyZXNzIGluIHBlcmNlbnRhZ2VzIGFuZCB3ZWVrcyByZW1haW5pbmcuJywgcGF0aDogJy90b29sL2xpZmUtcHJvZ3Jlc3MnLCBpY29uOiBIb3VyZ2xhc3MsIGNvbG9yOiAndGV4dC1icmFuZC01MDAnLCBjYXRlZ29yeTogJ1RpbWUnIH0sCiAgICB7IGlkOiAndGFsbHktY291bnRlcicsIG5hbWU6ICdEaWdpdGFsIFRhbGx5IENvdW50ZXInLCBkZXNjOiAnQSBtaW5pbWFsaXN0IG9ubGluZSB0YWxseSBjb3VudGVyIGZvciB0cmFja2luZyBhbnl0aGluZyBtYW51YWxseSB3aXRoIGtleWJvYXJkIHNob3J0Y3V0cy4nLCBwYXRoOiAnL3Rvb2wvdGFsbHktY291bnRlcicsIGljb246IE1vdXNlUG9pbnRlckNsaWNrLCBjb2xvcjogJ3RleHQtYmx1ZS01MDAnLCBjYXRlZ29yeTogJ1RleHQnIH0sCiAgICB7IGlkOiAnZm9jdXMtZmxvdycsIG5hbWU6ICdQb21vZG9ybyBGb2N1cyBUaW1lcicsIGRlc2M6ICdNaW5pbWFsaXN0IFBvbW9kb3JvIHRpbWVyIGZvciBkZWVwIHdvcmsgc2Vzc2lvbnMuIFN0YXkgcHJvZHVjdGl2ZSB3aXRoIHRpbWVkIHdvcmsvcmVzdCBibG9ja3MuJywgcGF0aDogJy90b29sL2ZvY3VzLWZsb3cnLCBpY29uOiBCcmFpbkNpcmN1aXQsIGNvbG9yOiAndGV4dC1icmFuZC01MDAnLCBjYXRlZ29yeTogJ1RpbWUnIH0sCiAgICB7IGlkOiAnZGF5LXBsYW5uZXInLCBuYW1lOiAnSG91cmx5IERheSBQbGFubmVyJywgZGVzYzogJ0Jsb2NrIHlvdXIgdGltZSB3aXRoIGEgc2ltcGxlIGhvdXJseSBncmlkIHBsYW5uZXIgZm9yIG1heGltdW0gZGFpbHkgcHJvZHVjdGl2aXR5LicsIHBhdGg6ICcvdG9vbC9kYXktcGxhbm5lcicsIGljb246IExheW91dExpc3QsIGNvbG9yOiAndGV4dC1pbmRpZ28tNTAwJywgY2F0ZWdvcnk6ICdUaW1lJyB9LAogICAgeyBpZDogJ2hhYml0LXRyYWNrZXInLCBuYW1lOiAnRGFpbHkgSGFiaXQgVHJhY2tlcicsIGRlc2M6ICdCdWlsZCBzdHJlYWtzIGFuZCB2aXN1YWxpemUgeW91ciBkYWlseSBjb25zaXN0ZW5jeSB3aXRoIGEgbWluaW1hbGlzdCBoYWJpdCB0cmFja2luZyB0b29sLicsIHBhdGg6ICcvdG9vbC9oYWJpdC10cmFja2VyJywgaWNvbjogQWN0aXZpdHksIGNvbG9yOiAndGV4dC1lbWVyYWxkLTUwMCcsIGNhdGVnb3J5OiAnVGltZScgfSwKICAgIHsgaWQ6ICd6ZW4tbm90ZXMnLCBuYW1lOiAnWmVuIE5vdGVzIFNjcmF0Y2hwYWQnLCBkZXNjOiAnQSBkaXN0cmFjdGlvbi1mcmVlLCBhdXRvLXNhdmluZyBub3RlcGFkIGZvciBxdWljayB0aG91Z2h0cyBhbmQgZHJhZnRzIGluIHlvdXIgYnJvd3Nlci4nLCBwYXRoOiAnL3Rvb2wvemVuLW5vdGVzJywgaWNvbjogRmlsZUVkaXQsIGNvbG9yOiAndGV4dC1pbmRpZ28tNTAwJywgY2F0ZWdvcnk6ICdUZXh0JyB9LAogICAgeyBpZDogJ21pbmltYWwtdG9kbycsIG5hbWU6ICdNaW5pbWFsaXN0IFRvLURvIExpc3QnLCBkZXNjOiAnU2ltcGxlLCBjbGVhbiBjaGVja2xpc3QgZm9yIG1hbmFnaW5nIHlvdXIgZGFpbHkgdGFza3Mgd2l0aG91dCBhbnkgZGlzdHJhY3Rpb25zLicsIHBhdGg6ICcvdG9vbC9taW5pbWFsLXRvZG8nLCBpY29uOiBMaXN0VG9kbywgY29sb3I6ICd0ZXh0LW9yYW5nZS01MDAnLCBjYXRlZ29yeTogJ1RpbWUnIH0sCiAgICB7IGlkOiAnYWktcGRmLWFzc2lzdGFudCcsIG5hbWU6ICdBSSBQREYgRG9jdW1lbnQgQXNzaXN0YW50JywgZGVzYzogJ0NoYXQgd2l0aCB5b3VyIFBERiBkb2N1bWVudHMuIFN1bW1hcml6ZSwgYW5hbHl6ZSwgYW5kIGV4dHJhY3QgZGF0YSB1c2luZyBBSS4nLCBwYXRoOiAnL3Rvb2wvYWktcGRmLWFzc2lzdGFudCcsIGljb246IEZpbGVUZXh0LCBjb2xvcjogJ3RleHQtcm9zZS01MDAnLCBjYXRlZ29yeTogJ0FJJyB9LAogICAgeyBpZDogJ3N0b2NrLWNoYXJ0JywgbmFtZTogJ0FJIFN0b2NrIEluc2lnaHRzIFRvb2wnLCBkZXNjOiAnR2V0IHJlYWwtdGltZSBkYXRhIGFuZCBBSS1wb3dlcmVkIGluc2lnaHRzIGZvciBnbG9iYWwgc3RvY2tzIGFuZCBtYXJrZXQgdHJlbmRzLicsIHBhdGg6ICcvdG9vbC9zdG9jay1jaGFydCcsIGljb246IEJhckNoYXJ0MywgY29sb3I6ICd0ZXh0LWJsdWUtNjAwJywgY2F0ZWdvcnk6ICdGaW5hbmNlJyB9LAogICAgeyBpZDogJ2luZmxhdGlvbi1jYWxjJywgbmFtZTogJ0hpc3RvcmljIEluZmxhdGlvbiBDYWxjdWxhdG9yJywgZGVzYzogJ0NhbGN1bGF0ZSB0aGUgcHVyY2hhc2luZyBwb3dlciBvZiBtb25leSBvdmVyIHRpbWUgZm9yIHZhcmlvdXMgZ2xvYmFsIGNvdW50cmllcy4nLCBwYXRoOiAnL3Rvb2wvaW5mbGF0aW9uLWNhbGN1bGF0b3InLCBpY29uOiBDYWxjdWxhdG9yLCBjb2xvcjogJ3RleHQtcm9zZS02MDAnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnIH0sCiAgICB7IGlkOiAnYmFuay1zdGF0ZW1lbnQnLCBuYW1lOiAnQmFuayBTdGF0ZW1lbnQgQUkgQ29udmVydGVyJywgZGVzYzogJ0NvbnZlcnQgUERGIGJhbmsgc3RhdGVtZW50cyB0byBjbGVhbiBDU1YgZGF0YSBpbnN0YW50bHkgdXNpbmcgQUkgZG9jdW1lbnQgYW5hbHlzaXMuJywgcGF0aDogJy90b29sL2Jhbmstc3RhdGVtZW50LWNvbnZlcnRlcicsIGljb246IEZpbGVUZXh0LCBjb2xvcjogJ3RleHQtZW1lcmFsZC02MDAnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnIH0sCiAgICB7IGlkOiAneW91dHViZS10aHVtYicsIG5hbWU6ICdZb3VUdWJlIFRodW1ibmFpbCBEb3dubG9hZGVyJywgZGVzYzogJ0V4dHJhY3QgYW5kIGRvd25sb2FkIGhpZ2gtcmVzb2x1dGlvbiB0aHVtYm5haWxzIGZyb20gYW55IFlvdVR1YmUgdmlkZW8gaW5zdGFudGx5LicsIHBhdGg6ICcvdG9vbC95b3V0dWJlLXRodW1ibmFpbCcsIGljb246IFlvdXR1YmUsIGNvbG9yOiAndGV4dC1yZWQtNjAwJywgY2F0ZWdvcnk6ICdTb2NpYWwnIH0sCiAgICB7IGlkOiAnaW5zdGEtcG9zdC1nZW4nLCBuYW1lOiAnSW5zdGFncmFtIE1vY2t1cCBHZW5lcmF0b3InLCBkZXNjOiAnQ3JlYXRlIHJlYWxpc3RpYyBJbnN0YWdyYW0gcG9zdCBtb2NrdXBzIGZvciBkZXNpZ24gcHJvamVjdHMsIG1lbWVzLCBhbmQgc29jaWFsIHBsYW5uaW5nLicsIHBhdGg6ICcvdG9vbC9pbnN0YWdyYW0tcG9zdC1nZW5lcmF0b3InLCBpY29uOiBTaGFyZTIsIGNvbG9yOiAndGV4dC1waW5rLTYwMCcsIGNhdGVnb3J5OiAnU29jaWFsJyB9LAogICAgeyBpZDogJ3NoYTI1Ni1nZW5lcmF0b3InLCBuYW1lOiAnU0hBMjU2IEhhc2ggVG9vbCcsIGRlc2M6ICdHZW5lcmF0ZSBzZWN1cmUgU0hBMjU2IGhhc2hlcyBhbmQgdmVyaWZ5IGRhdGEgaW50ZWdyaXR5IGluc3RhbnRseS4gQSBkZXZlbG9wZXIgc2VjdXJpdHkgdG9vbC4nLCBwYXRoOiAnL3Rvb2wvc2hhMjU2LWdlbmVyYXRvcicsIGljb246IFNoaWVsZENoZWNrLCBjb2xvcjogJ3RleHQtZW1lcmFsZC02MDAnLCBjYXRlZ29yeTogJ0NvZGluZycgfSwKICAgIHsgaWQ6ICd0ZXh0LXRvLWhhbmR3cml0aW5nJywgbmFtZTogJ1RleHQgdG8gSGFuZHdyaXRpbmcgVG9vbCcsIGRlc2M6ICdDb252ZXJ0IGRpZ2l0YWwgdHlwZWQgdGV4dCBpbnRvIG9yZ2FuaWMgaGFuZHdyaXR0ZW4tc3R5bGUgbm90ZXMgYW5kIGxldHRlcnMuJywgcGF0aDogJy90b29sL3RleHQtdG8taGFuZHdyaXRpbmcnLCBpY29uOiBQZW5jaWxMaW5lLCBjb2xvcjogJ3RleHQtcm9zZS01MDAnLCBjYXRlZ29yeTogJ1RleHQnIH0sCiAgICB7IGlkOiAnbWQ1LWdlbmVyYXRvcicsIG5hbWU6ICdNRDUgSGFzaCBHZW5lcmF0b3InLCBkZXNjOiAnQ3JlYXRlIE1ENSBoYXNoZXMgZm9yIHRleHQgc3RyaW5ncy4gRXNzZW50aWFsIGZvciBwYXNzd29yZCBoYXNoaW5nIGFuZCBkYXRhIHZlcmlmaWNhdGlvbi4nLCBwYXRoOiAnL3Rvb2wvbWQ1LWdlbmVyYXRvcicsIGljb246IEhhc2gsIGNvbG9yOiAndGV4dC1pbmRpZ28tNjAwJywgY2F0ZWdvcnk6ICdDb2RpbmcnIH0sCiAgICB7IGlkOiAnY3VycmVuY3ktY2hhcnRzJywgbmFtZTogJ0xpdmUgQ3VycmVuY3kgVHJlbmRzJywgZGVzYzogJ1Zpc3VhbGl6ZSBleGNoYW5nZSByYXRlIHRyZW5kcyBhbmQgaGlzdG9yaWNhbCBkYXRhIHdpdGggaW50ZXJhY3RpdmUgY3VycmVuY3kgY2hhcnRzLicsIHBhdGg6ICcvdG9vbC9jdXJyZW5jeS1jaGFydHMnLCBpY29uOiBMaW5lQ2hhcnQsIGNvbG9yOiAndGV4dC1jeWFuLTYwMCcsIGNhdGVnb3J5OiAnRmluYW5jZScgfSwKICAgIHsgaWQ6ICdtcnItZ2VuZXJhdG9yJywgbmFtZTogJ1N0cmlwZSBNUlIgTW9ja3VwIEdlbicsIGRlc2M6ICdDcmVhdGUgcmVhbGlzdGljIGxvb2tpbmcgU2FhUyBkYXNoYm9hcmQgc2NyZWVuc2hvdHMgZm9yIG1vY2t1cHMgYW5kIHByZXNlbnRhdGlvbnMuJywgcGF0aDogJy90b29sL2Zha2UtbXJyJywgaWNvbjogTGF5b3V0RGFzaGJvYXJkLCBjb2xvcjogJ3RleHQtaW5kaWdvLTYwMCcsIGNhdGVnb3J5OiAnRmluYW5jZScgfSwKICAgIHsgaWQ6ICdoaXN0b3JpY2FsLXJhdGVzJywgbmFtZTogJ0hpc3RvcmljYWwgRXhjaGFuZ2UgUmF0ZXMnLCBkZXNjOiAnQWNjZXNzIGdsb2JhbCBjdXJyZW5jeSBleGNoYW5nZSByYXRlcyBmb3IgYW55IGRhdGUgaW4gaGlzdG9yeS4gRXhwb3J0IHRhYmxlcyB0byBDU1YuJywgcGF0aDogJy90b29sL2hpc3RvcmljYWwtcmF0ZXMnLCBpY29uOiBIaXN0b3J5LCBjb2xvcjogJ3RleHQtYmx1ZS02MDAnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnIH0sCiAgICB7IGlkOiAna2V5d29yZC1yZXNlYXJjaCcsIG5hbWU6ICdBSSBTRU8gS2V5d29yZCBSZXNlYXJjaCcsIGRlc2M6ICdEaXNjb3ZlciBoaWdoLXBvdGVudGlhbCBTRU8ga2V5d29yZHMgYW5kIHRvcGljcyBmb3IgeW91ciBjb250ZW50IHN0cmF0ZWd5IHdpdGggQUkuJywgcGF0aDogJy90b29sL2tleXdvcmQtcmVzZWFyY2gnLCBpY29uOiBTZWFyY2gsIGNvbG9yOiAndGV4dC1hbWJlci01MDAnLCBjYXRlZ29yeTogJ0FJJyB9LAogICAgeyBpZDogJ2dyYW1tYXItcG9saXNoZXInLCBuYW1lOiAnQUkgR3JhbW1hciAmIFN0eWxlIFBvbGlzaGVyJywgZGVzYzogJ0ZpeCBncmFtbWFyIG1pc3Rha2VzIGFuZCBhZGp1c3QgdGhlIHdyaXRpbmcgdG9uZSBvZiB5b3VyIHRleHQgaW5zdGFudGx5IHdpdGggQUkuJywgcGF0aDogJy90b29sL2dyYW1tYXItcG9saXNoZXInLCBpY29uOiBXYW5kMiwgY29sb3I6ICd0ZXh0LWluZGlnby01MDAnLCBjYXRlZ29yeTogJ0FJJyB9LAogICAgeyBpZDogJ2NhcHRpb24tY3JlYXRvcicsIG5hbWU6ICdBSSBTb2NpYWwgTWVkaWEgQ2FwdGlvbiBHZW4nLCBkZXNjOiAnR2VuZXJhdGUgZW5nYWdpbmcgYW5kIHZpcmFsIHNvY2lhbCBtZWRpYSBjYXB0aW9ucyBmb3IgSW5zdGFncmFtLCBUaWtUb2ssIGFuZCBMaW5rZWRJbi4nLCBwYXRoOiAnL3Rvb2wvY2FwdGlvbi1jcmVhdG9yJywgaWNvbjogU2hhcmUyLCBjb2xvcjogJ3RleHQtcGluay01MDAnLCBjYXRlZ29yeTogJ0FJJyB9LAogICAgeyBpZDogJ2N1cnJlbmN5LWNvbnZlcnRlcicsIG5hbWU6ICdSZWFsLVRpbWUgQ3VycmVuY3kgQ29udmVydGVyJywgZGVzYzogJ0NvbnZlcnQgYmV0d2VlbiAxMDArIGdsb2JhbCBjdXJyZW5jaWVzIHVzaW5nIGxpdmUsIHVwLXRvLXRoZS1taW51dGUgbWFya2V0IHJhdGVzLicsIHBhdGg6ICcvdG9vbC9jdXJyZW5jeS1jb252ZXJ0ZXInLCBpY29uOiBEb2xsYXJTaWduLCBjb2xvcjogJ3RleHQtZ3JlZW4tNTAwJywgY2F0ZWdvcnk6ICdGaW5hbmNlJyB9LAogICAgeyBpZDogJ2JhcmNvZGUtZ2VuZXJhdG9yJywgbmFtZTogJ09ubGluZSBCYXJjb2RlIEdlbmVyYXRvcicsIGRlc2M6ICdHZW5lcmF0ZSBzdGFuZGFyZCBsaW5lYXIgYmFyY29kZXMgZm9yIHByb2R1Y3QgbGFiZWxpbmcgYW5kIGludmVudG9yeSBtYW5hZ2VtZW50LicsIHBhdGg6ICcvdG9vbC9iYXJjb2RlLWdlbmVyYXRvcicsIGljb246IFNjYW5CYXJjb2RlLCBjb2xvcjogJ3RleHQtcHVycGxlLTUwMCcsIGNhdGVnb3J5OiAnVGV4dCcgfSwKICAgIHsgaWQ6ICdsaXN0LXJhbmRvbWl6ZXInLCBuYW1lOiAnTGlzdCBSYW5kb21pemVyICYgUGlja2VyJywgZGVzYzogJ1NodWZmbGUgbGlzdHMgb3IgcGljayByYW5kb20gd2lubmVycyBmcm9tIHlvdXIgZW50cmllcy4gUGVyZmVjdCBmb3IgZ2l2ZWF3YXlzIGFuZCBmYWlyIGNob2ljZXMuJywgcGF0aDogJy90b29sL2xpc3QtcmFuZG9taXplcicsIGljb246IExpc3QsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgY2F0ZWdvcnk6ICdUZXh0JyB9LAogICAgeyBpZDogJ3RleHQtc3VtbWFyaXplcicsIG5hbWU6ICdBSSBUZXh0IFN1bW1hcml6ZXIgT25saW5lJywgZGVzYzogJ0NvbmRlbnNlIGxvbmcgYXJ0aWNsZXMgYW5kIGRvY3VtZW50cyBpbnRvIGNvbmNpc2UsIHJlYWRhYmxlIHN1bW1hcmllcyB1c2luZyBBSS4nLCBwYXRoOiAnL3Rvb2wvdGV4dC1zdW1tYXJpemVyJywgaWNvbjogRmlsZVRleHQsIGNvbG9yOiAndGV4dC1jeWFuLTUwMCcsIGNhdGVnb3J5OiAnVGV4dCcgfSwKICAgIHsgaWQ6ICdxci1nZW5lcmF0b3InLCBuYW1lOiAnQ3VzdG9tIFFSIENvZGUgR2VuZXJhdG9yJywgZGVzYzogJ0NyZWF0ZSBzY2FubmFibGUgUVIgY29kZXMgZm9yIFVSTHMsIHRleHQsIGFuZCBzb2NpYWwgcHJvZmlsZXMuIEhpZ2gtcmVzb2x1dGlvbiBkb3dubG9hZHMuJywgcGF0aDogJy90b29sL3FyLWdlbmVyYXRvcicsIGljb246IFFyQ29kZSwgY29sb3I6ICd0ZXh0LXNsYXRlLTUwMCcsIGNhdGVnb3J5OiAnVGV4dCcgfSwKICAgIHsgaWQ6ICdjb3VudGRvd24nLCBuYW1lOiAnT25saW5lIENvdW50ZG93biBUaW1lcicsIGRlc2M6ICdTZXQgYSB2aXN1YWwgY291bnRkb3duIHRpbWVyIGZvciBldmVudHMsIGRlYWRsaW5lcywgb3IgcHJvZHVjdGl2aXR5IHNlc3Npb25zLicsIHBhdGg6ICcvdG9vbC9jb3VudGRvd24tdGltZXInLCBpY29uOiBDbG9jaywgY29sb3I6ICd0ZXh0LW9yYW5nZS01MDAnLCBjYXRlZ29yeTogJ1RpbWUnIH0sCiAgICB7IGlkOiAnY2FzZS1jb252ZXJ0ZXInLCBuYW1lOiAnVGV4dCBDYXNlIENvbnZlcnRlciBPbmxpbmUnLCBkZXNjOiAnVHJhbnNmb3JtIHRleHQgYmV0d2VlbiBVUFBFUkNBU0UsIGxvd2VyY2FzZSwgVGl0bGUgQ2FzZSwgYW5kIG1vcmUgaW5zdGFudGx5LicsIHBhdGg6ICcvdG9vbC9jYXNlLWNvbnZlcnRlcicsIGljb246IFR5cGUsIGNvbG9yOiAndGV4dC1ibHVlLTUwMCcsIGNhdGVnb3J5OiAnVGV4dCcgfSwKICAgIHsgaWQ6ICdwYXNzd29yZC1nZW4nLCBuYW1lOiAnU2VjdXJlIFBhc3N3b3JkIEdlbmVyYXRvcicsIGRlc2M6ICdHZW5lcmF0ZSBzdHJvbmcsIHJhbmRvbSwgYW5kIHNlY3VyZSBwYXNzd29yZHMgdG8gcHJvdGVjdCB5b3VyIGRpZ2l0YWwgYWNjb3VudHMuJywgcGF0aDogJy90b29sL3Bhc3N3b3JkLWdlbmVyYXRvcicsIGljb246IEtleSwgY29sb3I6ICd0ZXh0LWVtZXJhbGQtNTAwJywgY2F0ZWdvcnk6ICdUZXh0JyB9LAogICAgeyBpZDogJ2Nzcy1ncmFkaWVudCcsIG5hbWU6ICdDU1MgR3JhZGllbnQgU3R1ZGlvJywgZGVzYzogJ0Rlc2lnbiBwZXJmZWN0IGxpbmVhciBhbmQgcmFkaWFsIENTUyBncmFkaWVudHMgd2l0aCBhIHByb2Zlc3Npb25hbCB2aXN1YWwgZWRpdG9yLicsIHBhdGg6ICcvdG9vbC9jc3MtZ3JhZGllbnQnLCBpY29uOiBQYWxldHRlLCBjb2xvcjogJ3RleHQtcGluay01MDAnLCBjYXRlZ29yeTogJ0NTUycgfSwKXTsKY29uc3QgRGFzaGJvYXJkID0gKCkgPT4gewogICAgY29uc3QgeyBpZCB9ID0gdXNlUGFyYW1zKCk7CiAgICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgZmlsdGVyZWRUb29scyA9IEZFQVRVUkVEX1RPT0xTLmZpbHRlcih0ID0+IHsKICAgICAgICBjb25zdCBtYXRjaGVzU2VhcmNoID0gdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpIHx8CiAgICAgICAgICAgIHQuZGVzYy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTsKICAgICAgICBjb25zdCBtYXRjaGVzQ2F0ZWdvcnkgPSBpZCA/IHQuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSA9PT0gaWQudG9Mb3dlckNhc2UoKSA6IHRydWU7CiAgICAgICAgcmV0dXJuIG1hdGNoZXNTZWFyY2ggJiYgbWF0Y2hlc0NhdGVnb3J5OwogICAgfSk7CiAgICBjb25zdCB0aXRsZSA9IGlkCiAgICAgICAgPyBgJHtpZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGlkLnNsaWNlKDEpfSBUb29sc2AKICAgICAgICA6ICdQbGF0Zm9ybSBPdmVydmlldyc7CiAgICByZXR1cm4gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBsZzpwLTEyIG1heC13LTd4bCBteC1hdXRvIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtYi0xNiIsIGNoaWxkcmVuOiBbX2pzeCgiaDEiLCB7IGNsYXNzTmFtZTogInRleHQtNHhsIGxnOnRleHQtNXhsIGZvbnQtZXh0cmFib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTYgdHJhY2tpbmctdGlnaHQiLCBjaGlsZHJlbjogdGl0bGUgfSksIF9qc3hzKCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIG1heC13LTN4bCBsZWFkaW5nLXJlbGF4ZWQiLCBjaGlsZHJlbjogWyJFeHBsb3JlIGEgc3VpdGUgb2YgcG93ZXJmdWwgdG9vbHMgZGVzaWduZWQgdG8gYm9vc3QgcHJvZHVjdGl2aXR5LiBGcm9tICIsIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtYnJhbmQtNTAwIGZvbnQtc2VtaWJvbGQiLCBjaGlsZHJlbjogIkFJIGdlbmVyYXRpb24iIH0pLCAiIHRvIGRldmVsb3BlciB1dGlsaXRpZXMsIGV2ZXJ5dGhpbmcgeW91IG5lZWQgaXMgcmlnaHQgaGVyZS4iXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtMTAgcmVsYXRpdmUgbWF4LXctbGciLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCBwbC00IGZsZXggaXRlbXMtY2VudGVyIHBvaW50ZXItZXZlbnRzLW5vbmUiLCBjaGlsZHJlbjogX2pzeChTZWFyY2gsIHsgY2xhc3NOYW1lOiAiaC01IHctNSB0ZXh0LWdyYXktNDAwIiB9KSB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgcGxhY2Vob2xkZXI6ICJTZWFyY2ggZm9yIGEgdG9vbC4uLiIsIHZhbHVlOiBzZWFyY2gsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAiYmxvY2sgdy1mdWxsIHBsLTExIHByLTQgcHktNCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstODAwIGJvcmRlci0wIHJvdW5kZWQtZnVsbCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctc3RyaXBlLXNtIHJpbmctMSByaW5nLWdyYXktMjAwIGRhcms6cmluZy1ncmF5LTcwMCBwbGFjZWhvbGRlcjp0ZXh0LWdyYXktNDAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBmb2N1czpvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1zaGFkb3ciIH0pXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtMyB4bDpncmlkLWNvbHMtNCBnYXAtNiIsIGNoaWxkcmVuOiBmaWx0ZXJlZFRvb2xzLmxlbmd0aCA+IDAgPyAoZmlsdGVyZWRUb29scy5tYXAoKHRvb2wpID0+IChfanN4cyhMaW5rLCB7IHRvOiB0b29sLnBhdGgsIGNsYXNzTmFtZTogImdyb3VwIHJlbGF0aXZlIGJnLXdoaXRlIGRhcms6YmctZGFyay04MDAgcC04IHJvdW5kZWQteGwgc2hhZG93LXN0cmlwZSBob3ZlcjpzaGFkb3ctc3RyaXBlLWhvdmVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMSBmbGV4IGZsZXgtY29sIGgtZnVsbCIsIGNoaWxkcmVuOiBbdG9vbC5pc05ldyAmJiBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSB0b3AtNCByaWdodC00IGJnLWJyYW5kLTEwMCBkYXJrOmJnLWJyYW5kLTkwMCB0ZXh0LWJyYW5kLTcwMCBkYXJrOnRleHQtYnJhbmQtMzAwIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgcHgtMiBweS0xIHJvdW5kZWQtZnVsbCIsIGNoaWxkcmVuOiAiTmV3IiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtYi02IiwgY2hpbGRyZW46IF9qc3godG9vbC5pY29uLCB7IGNsYXNzTmFtZTogYHctOCBoLTggJHt0b29sLmNvbG9yfWAgfSkgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWxnIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0yIGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtNTAwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IHRvb2wubmFtZSB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgbWItNiBmbGV4LTEiLCBjaGlsZHJlbjogdG9vbC5kZXNjIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWJyYW5kLTUwMCBmb250LW1lZGl1bSB0ZXh0LXNtIG10LWF1dG8gb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSAtdHJhbnNsYXRlLXgtMiBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGR1cmF0aW9uLTMwMCIsIGNoaWxkcmVuOiBbIk9wZW4gVG9vbCAiLCBfanN4KEFycm93UmlnaHQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCBtbC0xIiB9KV0gfSldIH0sIHRvb2wuaWQpKSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImNvbC1zcGFuLWZ1bGwgcHktMTIgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTYgaC0xNiByb3VuZGVkLWZ1bGwgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCBtYi00IiwgY2hpbGRyZW46IF9qc3goU2VhcmNoLCB7IGNsYXNzTmFtZTogInctOCBoLTggdGV4dC1ncmF5LTQwMCIgfSkgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46ICJObyB0b29scyBmb3VuZCIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIG10LTIiLCBjaGlsZHJlbjogIlRyeSBhZGp1c3RpbmcgeW91ciBzZWFyY2ggb3IgY2F0ZWdvcnkuIiB9KV0gfSkpIH0pXSB9KSk7Cn07CmNvbnN0IExheW91dCA9ICh7IGNoaWxkcmVuIH0pID0+IHsKICAgIGNvbnN0IFtzaWRlYmFyT3Blbiwgc2V0U2lkZWJhck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW2RhcmtNb2RlLCBzZXREYXJrTW9kZV0gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyBpZiAoZGFya01vZGUpCiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2RhcmsnKTsKICAgIGVsc2UKICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGFyaycpOyB9LCBbZGFya01vZGVdKTsKICAgIHJldHVybiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibWluLWgtc2NyZWVuIGZsZXggdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAgZm9udC1zYW5zIiwgY2hpbGRyZW46IFtfanN4KFNpZGViYXIsIHsgaXNPcGVuOiBzaWRlYmFyT3Blbiwgb25DbG9zZTogKCkgPT4gc2V0U2lkZWJhck9wZW4oZmFsc2UpIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgZmxleCBmbGV4LWNvbCBtaW4tdy0wIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCIsIGNoaWxkcmVuOiBbX2pzeHMoImhlYWRlciIsIHsgY2xhc3NOYW1lOiAiaC0xNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNCBsZzpweC04IGJnLXRyYW5zcGFyZW50IiwgY2hpbGRyZW46IFtfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldFNpZGViYXJPcGVuKHRydWUpLCBjbGFzc05hbWU6ICJsZzpoaWRkZW4gcC0yIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwIGhvdmVyOmJnLWJsYWNrLzUgZGFyazpob3ZlcjpiZy13aGl0ZS8xMCByb3VuZGVkLWxnIiwgY2hpbGRyZW46IF9qc3goTWVudSwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IiB9KSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIGxnOmhpZGRlbiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChMb2dvTWFyaywgeyBjbGFzc05hbWU6ICJ3LTcgaC03IiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAiZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0cmFja2luZy10aWdodGVyIiwgY2hpbGRyZW46ICJXaXJlTmluamEiIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtbC1hdXRvIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0RGFya01vZGUoIWRhcmtNb2RlKSwgY2xhc3NOYW1lOiAicC0yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS00MDAgZGFyazpob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLWJsYWNrLzUgZGFyazpob3ZlcjpiZy13aGl0ZS8xMCByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogZGFya01vZGUgPyBfanN4KFN1biwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSA6IF9qc3goTW9vbiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KSB9KV0gfSksIF9qc3hzKCJtYWluIiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgb3ZlcmZsb3ctYXV0byIsIGNoaWxkcmVuOiBbX2pzeChBbmFseXRpY3NUcmFja2VyLCB7fSksIF9qc3goU2Nyb2xsVG9Ub3AsIHt9KSwgY2hpbGRyZW5dIH0pXSB9KV0gfSkpOwp9OwpleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBcHAoKSB7CiAgICByZXR1cm4gKF9qc3goUm91dGVyLCB7IGNoaWxkcmVuOiBfanN4KExheW91dCwgeyBjaGlsZHJlbjogX2pzeHMoUm91dGVzLCB7IGNoaWxkcmVuOiBbX2pzeChSb3V0ZSwgeyBwYXRoOiAiLyIsIGVsZW1lbnQ6IF9qc3goRGFzaGJvYXJkLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3N0ZW0tc2VwYXJhdG9yIiwgZWxlbWVudDogX2pzeChTdGVtU2VwYXJhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL21ldHJvbm9tZSIsIGVsZW1lbnQ6IF9qc3goTWV0cm9ub21lLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2J1eS1vci1wYXNzIiwgZWxlbWVudDogX2pzeChCdXlPclBhc3NBZHZpc29yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2RlYnQtcGxhbm5lciIsIGVsZW1lbnQ6IF9qc3goRGVidFBsYW5uZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvcnVud2F5LWNhbGMiLCBlbGVtZW50OiBfanN4KEJ1cm5SYXRlQ2FsY3VsYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9qc29uLWZvcm1hdHRlciIsIGVsZW1lbnQ6IF9qc3goSnNvbkZvcm1hdHRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9sb3JlbS1pcHN1bSIsIGVsZW1lbnQ6IF9qc3goTG9yZW1JcHN1bSwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9nbGFzc21vcnBoaXNtIiwgZWxlbWVudDogX2pzeChHbGFzc21vcnBoaXNtR2VuZXJhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2F1ZGlvLXJlY29yZGVyIiwgZWxlbWVudDogX2pzeChBdWRpb1JlY29yZGVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3BpdGNoLXNoaWZ0ZXIiLCBlbGVtZW50OiBfanN4KFBpdGNoU2hpZnRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9seXJpYy1jYXJkIiwgZWxlbWVudDogX2pzeChMeXJpY0NhcmRHZW5lcmF0b3IsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvYWktd29kIiwgZWxlbWVudDogX2pzeChBaVdvZEdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9tYWNyby1jYWxjIiwgZWxlbWVudDogX2pzeChNYWNyb0NhbGN1bGF0b3IsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvMXJtLWNhbGMiLCBlbGVtZW50OiBfanN4KE9uZVJlcE1heENhbGMsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvaW50ZXJ2YWwtdGltZXIiLCBlbGVtZW50OiBfanN4KEludGVydmFsVGltZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvbm90ZXMiLCBlbGVtZW50OiBfanN4KE5vdGVzQXBwLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2Jpby13cml0ZXIiLCBlbGVtZW50OiBfanN4KEJpb1dyaXRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC90aW1lLWxvZ2dlciIsIGVsZW1lbnQ6IF9qc3goVGltZUxvZ2dlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9pbnZvaWNlLWdlbmVyYXRvciIsIGVsZW1lbnQ6IF9qc3goSW52b2ljZUdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9leHBsYWluZXIiLCBlbGVtZW50OiBfanN4KEV4cGxhaW5lclRvb2wsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvbHlyaWMtZml4ZXIiLCBlbGVtZW50OiBfanN4KEx5cmljRml4ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvY2hvcmQtaGVscGVyIiwgZWxlbWVudDogX2pzeChDaG9yZEhlbHBlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC90d2VldC1nZW5lcmF0b3IiLCBlbGVtZW50OiBfanN4KFR3ZWV0R2VuZXJhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3BkZi1tZXJnZSIsIGVsZW1lbnQ6IF9qc3goUGRmTWVyZ2VyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3BkZi10by13b3JkIiwgZWxlbWVudDogX2pzeChQZGZUb1dvcmRDb252ZXJ0ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvaW1hZ2UtcmVzaXplciIsIGVsZW1lbnQ6IF9qc3goSW1hZ2VSZXNpemVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2ltYWdlLWNvbnZlcnRlciIsIGVsZW1lbnQ6IF9qc3goSW1hZ2VDb252ZXJ0ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvc21hcnQtYXVkaW8tdHJpbW1lciIsIGVsZW1lbnQ6IF9qc3goU21hcnRBdWRpb1RyaW1tZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvbGlua2VkaW4tcG9zdC1nZW5lcmF0b3IiLCBlbGVtZW50OiBfanN4KExpbmtlZGluUG9zdEdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9kb21haW4tdG8taXAiLCBlbGVtZW50OiBfanN4KERvbWFpblRvSXBDb252ZXJ0ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvYXVkaW8tY29udmVydGVyIiwgZWxlbWVudDogX2pzeChBdWRpb0NvbnZlcnRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9zb25nLWJwbSIsIGVsZW1lbnQ6IF9qc3goU29uZ0JwbUZpbmRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9rZXl3b3JkLXJlc2VhcmNoIiwgZWxlbWVudDogX2pzeChLZXl3b3JkUmVzZWFyY2hlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9ncmFtbWFyLXBvbGlzaGVyIiwgZWxlbWVudDogX2pzeChHcmFtbWFyUG9saXNoZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvY2FwdGlvbi1jcmVhdG9yIiwgZWxlbWVudDogX2pzeChTb2NpYWxDYXB0aW9uR2VuZXJhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3RleHQtc3VtbWFyaXplciIsIGVsZW1lbnQ6IF9qc3goVGV4dFN1bW1hcml6ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvY2FzZS1jb252ZXJ0ZXIiLCBlbGVtZW50OiBfanN4KENhc2VDb252ZXJ0ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvcGFzc3dvcmQtZ2VuZXJhdG9yIiwgZWxlbWVudDogX2pzeChQYXNzd29yZEdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9xci1nZW5lcmF0b3IiLCBlbGVtZW50OiBfanN4KFFyQ29kZUdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9iYXJjb2RlLWdlbmVyYXRvciIsIGVsZW1lbnQ6IF9qc3goQmFyY29kZUdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9saXN0LXJhbmRvbWl6ZXIiLCBlbGVtZW50OiBfanN4KExpc3RSYW5kb21pemVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3RleHQtdG8taGFuZHdyaXRpbmciLCBlbGVtZW50OiBfanN4KEhhbmR3cml0aW5nQ29udmVydGVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3plbi1ub3RlcyIsIGVsZW1lbnQ6IF9qc3goUXVpY2tOb3Rlcywge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC90YWxseS1jb3VudGVyIiwgZWxlbWVudDogX2pzeChUYWxseUNvdW50ZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvY3NzLWdyYWRpZW50IiwgZWxlbWVudDogX2pzeChHcmFkaWVudEdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9jb2xvci1wYWxldHRlIiwgZWxlbWVudDogX2pzeChDb2xvclBhbGV0dGVHZW5lcmF0b3IsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvaGV4LXRvLXJnYmEiLCBlbGVtZW50OiBfanN4KEhleFRvUmdiYUNvbnZlcnRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9jb3VudGRvd24tdGltZXIiLCBlbGVtZW50OiBfanN4KENvdW50ZG93blRpbWVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL21pbmltYWwtdG9kbyIsIGVsZW1lbnQ6IF9qc3goTWluaW1hbFRvZG9MaXN0LCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2hhYml0LXRyYWNrZXIiLCBlbGVtZW50OiBfanN4KEhhYml0VHJhY2tlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9mb2N1cy1mbG93IiwgZWxlbWVudDogX2pzeChGb2N1c1RpbWVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2RheS1wbGFubmVyIiwgZWxlbWVudDogX2pzeChEYXlQbGFubmVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2xpZmUtcHJvZ3Jlc3MiLCBlbGVtZW50OiBfanN4KExpZmVQcm9ncmVzcywge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9icmVhdGhpbmctYm94IiwgZWxlbWVudDogX2pzeChCcmVhdGhpbmdCb3gsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvY3VycmVuY3ktY29udmVydGVyIiwgZWxlbWVudDogX2pzeChDdXJyZW5jeUNvbnZlcnRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9mYWtlLW1yciIsIGVsZW1lbnQ6IF9qc3goTXJyR2VuZXJhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2hpc3RvcmljYWwtcmF0ZXMiLCBlbGVtZW50OiBfanN4KEhpc3RvcmljYWxSYXRlcywge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9jdXJyZW5jeS1jaGFydHMiLCBlbGVtZW50OiBfanN4KEN1cnJlbmN5Q2hhcnRzLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2Jhbmstc3RhdGVtZW50LWNvbnZlcnRlciIsIGVsZW1lbnQ6IF9qc3goQmFua1N0YXRlbWVudENvbnZlcnRlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9pbmZsYXRpb24tY2FsY3VsYXRvciIsIGVsZW1lbnQ6IF9qc3goSW5mbGF0aW9uQ2FsY3VsYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC90aW1lLWlzLW1vbmV5IiwgZWxlbWVudDogX2pzeChUaW1lSXNNb25leSwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9zdG9jay1jaGFydCIsIGVsZW1lbnQ6IF9qc3goU3RvY2tBbmFseXplciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9jb21wb3VuZC1pbnRlcmVzdCIsIGVsZW1lbnQ6IF9qc3goQ29tcG91bmRJbnRlcmVzdENhbGN1bGF0b3IsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvZnJlZWxhbmNlLXJhdGUiLCBlbGVtZW50OiBfanN4KEZyZWVsYW5jZVJhdGVDYWxjdWxhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL21kNS1nZW5lcmF0b3IiLCBlbGVtZW50OiBfanN4KE1kNUdlbmVyYXRvciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9zaGEyNTYtZ2VuZXJhdG9yIiwgZWxlbWVudDogX2pzeChTaGEyNTZHZW5lcmF0b3IsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL3Rvb2wvaW5zdGFncmFtLXBvc3QtZ2VuZXJhdG9yIiwgZWxlbWVudDogX2pzeChJbnN0YWdyYW1Qb3N0R2VuZXJhdG9yLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL3lvdXR1YmUtdGh1bWJuYWlsIiwgZWxlbWVudDogX2pzeChZb3V0dWJlVGh1bWJuYWlsR3JhYmJlciwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9haS1wZGYtYXNzaXN0YW50IiwgZWxlbWVudDogX2pzeChBaVBkZkFzc2lzdGFudCwge30pIH0pLCBfanN4KFJvdXRlLCB7IHBhdGg6ICIvdG9vbC9jc3Ytc3BsaXR0ZXIiLCBlbGVtZW50OiBfanN4KENzdlNwbGl0dGVyLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIi90b29sL2RlZXAtdGhpbmtlciIsIGVsZW1lbnQ6IF9qc3goRGVlcFRoaW5rZXIsIHt9KSB9KSwgX2pzeChSb3V0ZSwgeyBwYXRoOiAiL2NhdGVnb3J5LzppZCIsIGVsZW1lbnQ6IF9qc3goRGFzaGJvYXJkLCB7fSkgfSksIF9qc3goUm91dGUsIHsgcGF0aDogIioiLCBlbGVtZW50OiBfanN4KE5hdmlnYXRlLCB7IHRvOiAiLyIsIHJlcGxhY2U6IHRydWUgfSkgfSldIH0pIH0pIH0pKTsKfQo=","@/components/Tools/TimeTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IENsb2NrLCBQbGF5LCBQYXVzZSwgUm90YXRlQ2N3LCBUcmFzaDIsIFBsdXMsIExpc3RUb2RvLCBYLCBIYXJkRHJpdmUsIEFjdGl2aXR5LCBGbGFtZSwgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCwgQnJhaW5DaXJjdWl0LCBMYXlvdXRMaXN0LCBFcmFzZXIsIEhvdXJnbGFzcyBhcyBIb3VyZ2xhc3NJY29uLCBXaW5kLCBUaW1lciwgRG93bmxvYWQsIFNxdWFyZSwgVGFnLCBIaXN0b3J5LCBDaGVjaywgQ2FsZW5kYXJDaGVjaywgU2V0dGluZ3MyLCBBcnJvd1JpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKaW1wb3J0IHsgVG9vbExheW91dCB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29sTGF5b3V0JzsKaW1wb3J0IFBhcGEgZnJvbSAncGFwYXBhcnNlJzsKLy8gLS0tIENvdW50ZG93biBUaW1lciBUb29sIC0tLQpleHBvcnQgY29uc3QgQ291bnRkb3duVGltZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZSgnZHVyYXRpb24nKTsKICAgIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZSgnaWRsZScpOwogICAgY29uc3QgW2hvdXJzLCBzZXRIb3Vyc10gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFttaW51dGVzLCBzZXRNaW51dGVzXSA9IHVzZVN0YXRlKDUpOwogICAgY29uc3QgW3NlY29uZHMsIHNldFNlY29uZHNdID0gdXNlU3RhdGUoMCk7CiAgICBjb25zdCBbdGFyZ2V0RGF0ZUlucHV0LCBzZXRUYXJnZXREYXRlSW5wdXRdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbdGltZUxlZnQsIHNldFRpbWVMZWZ0XSA9IHVzZVN0YXRlKDApOwogICAgY29uc3QgW3RvdGFsVGltZSwgc2V0VG90YWxUaW1lXSA9IHVzZVN0YXRlKDApOwogICAgY29uc3QgcmVxdWVzdFJlZiA9IHVzZVJlZigwKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3J1bm5pbmcnICYmIGVuZFRpbWUpIHsKICAgICAgICAgICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7CiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIG5vdyk7CiAgICAgICAgICAgICAgICBzZXRUaW1lTGVmdChsZWZ0KTsKICAgICAgICAgICAgICAgIGlmIChsZWZ0IDw9IDApIHsKICAgICAgICAgICAgICAgICAgICBzZXRTdGF0dXMoJ2ZpbmlzaGVkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlcXVlc3RSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChyZXF1ZXN0UmVmLmN1cnJlbnQpCiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyZXF1ZXN0UmVmLmN1cnJlbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKCkgPT4geyBpZiAocmVxdWVzdFJlZi5jdXJyZW50KQogICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyZXF1ZXN0UmVmLmN1cnJlbnQpOyB9OwogICAgfSwgW3N0YXR1cywgZW5kVGltZV0pOwogICAgY29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHsKICAgICAgICBsZXQgZHVyYXRpb24gPSAwOwogICAgICAgIGlmIChtb2RlID09PSAnZHVyYXRpb24nKSB7CiAgICAgICAgICAgIGR1cmF0aW9uID0gKGhvdXJzICogMzYwMCArIG1pbnV0ZXMgKiA2MCArIHNlY29uZHMpICogMTAwMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICghdGFyZ2V0RGF0ZUlucHV0KQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZSh0YXJnZXREYXRlSW5wdXQpLmdldFRpbWUoKTsKICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgaWYgKHRhcmdldCA8PSBub3cpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJQbGVhc2Ugc2VsZWN0IGEgZnV0dXJlIGRhdGUuIik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZHVyYXRpb24gPSB0YXJnZXQgLSBub3c7CiAgICAgICAgfQogICAgICAgIGlmIChkdXJhdGlvbiA8PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3BhdXNlZCcpIHsKICAgICAgICAgICAgc2V0RW5kVGltZShEYXRlLm5vdygpICsgdGltZUxlZnQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgc2V0VG90YWxUaW1lKGR1cmF0aW9uKTsKICAgICAgICAgICAgc2V0VGltZUxlZnQoZHVyYXRpb24pOwogICAgICAgICAgICBzZXRFbmRUaW1lKERhdGUubm93KCkgKyBkdXJhdGlvbik7CiAgICAgICAgfQogICAgICAgIHNldFN0YXR1cygncnVubmluZycpOwogICAgfTsKICAgIGNvbnN0IHBhdXNlVGltZXIgPSAoKSA9PiB7IHNldFN0YXR1cygncGF1c2VkJyk7IH07CiAgICBjb25zdCByZXNldFRpbWVyID0gKCkgPT4geyBzZXRTdGF0dXMoJ2lkbGUnKTsgc2V0RW5kVGltZShudWxsKTsgc2V0VGltZUxlZnQoMCk7IHNldFRvdGFsVGltZSgwKTsgfTsKICAgIGNvbnN0IGZvcm1hdFRpbWUgPSAobXMpID0+IHsKICAgICAgICBjb25zdCB0b3RhbFNlY29uZHMgPSBNYXRoLmNlaWwobXMgLyAxMDAwKTsKICAgICAgICBjb25zdCBkID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAoMzYwMCAqIDI0KSk7CiAgICAgICAgY29uc3QgaCA9IE1hdGguZmxvb3IoKHRvdGFsU2Vjb25kcyAlICgzNjAwICogMjQpKSAvIDM2MDApOwogICAgICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTsKICAgICAgICBjb25zdCBzID0gdG90YWxTZWNvbmRzICUgNjA7CiAgICAgICAgcmV0dXJuIHsgZCwgaCwgbSwgcyB9OwogICAgfTsKICAgIGNvbnN0IHRpbWUgPSBmb3JtYXRUaW1lKHRpbWVMZWZ0KTsKICAgIGNvbnN0IHNob3dEYXlzID0gdGltZS5kID4gMDsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiQ291bnRkb3duIFRpbWVyIiwgZGVzY3JpcHRpb246ICJTZXQgYSB0aW1lciBmb3IgYSBzcGVjaWZpYyBkdXJhdGlvbiBvciBjb3VudGRvd24gdG8gYSBmdXR1cmUgZGF0ZS4iLCBpY29uOiBDbG9jaywgY2F0ZWdvcnk6ICJUaW1lIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IiwgY2hpbGRyZW46IHN0YXR1cyA9PT0gJ2lkbGUnID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm1heC13LXhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IHAtMSBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQteGwiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0TW9kZSgnZHVyYXRpb24nKSwgY2xhc3NOYW1lOiBgZmxleC0xIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSByb3VuZGVkLWxnIHRyYW5zaXRpb24tYWxsICR7bW9kZSA9PT0gJ2R1cmF0aW9uJyA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstNzAwIHNoYWRvdy1zbSB0ZXh0LWJyYW5kLTYwMCcgOiAndGV4dC1ncmF5LTUwMCd9YCwgY2hpbGRyZW46ICJEdXJhdGlvbiIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0TW9kZSgnZGF0ZScpLCBjbGFzc05hbWU6IGBmbGV4LTEgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1hbGwgJHttb2RlID09PSAnZGF0ZScgPyAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTcwMCBzaGFkb3ctc20gdGV4dC1icmFuZC02MDAnIDogJ3RleHQtZ3JheS01MDAnfWAsIGNoaWxkcmVuOiAiVGFyZ2V0IERhdGUiIH0pXSB9KSwgbW9kZSA9PT0gJ2R1cmF0aW9uJyA/IChfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTMgZ2FwLTQiLCBjaGlsZHJlbjogWydIb3VycycsICdNaW51dGVzJywgJ1NlY29uZHMnXS5tYXAoKGxhYmVsLCBpKSA9PiAoX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiBsYWJlbCB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCBtaW46ICIwIiwgdmFsdWU6IGkgPT09IDAgPyBob3VycyA6IGkgPT09IDEgPyBtaW51dGVzIDogc2Vjb25kcywgb25DaGFuZ2U6IChlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gTWF0aC5tYXgoMCwgcGFyc2VJbnQoZS50YXJnZXQudmFsdWUpIHx8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnModik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1pbnV0ZXModik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2Vjb25kcyh2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiAidy1mdWxsIHRleHQtY2VudGVyIHAtMyB0ZXh0LWxnIGZvbnQtbW9ubyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCIgfSldIH0sIGxhYmVsKSkpIH0pKSA6IChfanN4KCJpbnB1dCIsIHsgdHlwZTogImRhdGV0aW1lLWxvY2FsIiwgdmFsdWU6IHRhcmdldERhdGVJbnB1dCwgb25DaGFuZ2U6IChlKSA9PiBzZXRUYXJnZXREYXRlSW5wdXQoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIiB9KSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IHN0YXJ0VGltZXIsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWJyYW5kLTUwMCBob3ZlcjpiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1sZyIsIGNoaWxkcmVuOiBbX2pzeChQbGF5LCB7IGNsYXNzTmFtZTogInctNSBoLTUgbXItMiIgfSksICIgU3RhcnQiXSB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLVs0MDBweF0gdy1mdWxsIG1heC13LTV4bCBteC1hdXRvIHB4LTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogYGdyaWQgZ2FwLTQgdy1mdWxsIG1iLTEwICR7c2hvd0RheXMgPyAnZ3JpZC1jb2xzLTQnIDogJ2dyaWQtY29scy0zJ31gLCBjaGlsZHJlbjogW3Nob3dEYXlzICYmIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLTJ4bCBwLTggYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC02eGwgZm9udC1ib2xkIiwgY2hpbGRyZW46IHRpbWUuZCB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbXQtMiIsIGNoaWxkcmVuOiAiRGF5cyIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC0yeGwgcC04IGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtNnhsIGZvbnQtYm9sZCIsIGNoaWxkcmVuOiBTdHJpbmcodGltZS5oKS5wYWRTdGFydCgyLCAnMCcpIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtdC0yIiwgY2hpbGRyZW46ICJIb3VycyIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC0yeGwgcC04IGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtNnhsIGZvbnQtYm9sZCIsIGNoaWxkcmVuOiBTdHJpbmcodGltZS5tKS5wYWRTdGFydCgyLCAnMCcpIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtdC0yIiwgY2hpbGRyZW46ICJNaW5zIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLTJ4bCBwLTggYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC02eGwgZm9udC1ib2xkIiwgY2hpbGRyZW46IFN0cmluZyh0aW1lLnMpLnBhZFN0YXJ0KDIsICcwJykgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG10LTIiLCBjaGlsZHJlbjogIlNlY3MiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogc3RhdHVzID09PSAncnVubmluZycgPyBwYXVzZVRpbWVyIDogc3RhcnRUaW1lciwgY2xhc3NOYW1lOiAicHgtOCBweS00IGJnLXdoaXRlIGRhcms6YmctZGFyay04MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCIsIGNoaWxkcmVuOiBzdGF0dXMgPT09ICdydW5uaW5nJyA/ICdQYXVzZScgOiAnUmVzdW1lJyB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiByZXNldFRpbWVyLCBjbGFzc05hbWU6ICJweC04IHB5LTQgYmctYnJhbmQtNTAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwiLCBjaGlsZHJlbjogIlJlc2V0IiB9KV0gfSldIH0pKSB9KSB9KSk7Cn07CmV4cG9ydCBjb25zdCBNaW5pbWFsVG9kb0xpc3QgPSAoKSA9PiB7CiAgICBjb25zdCBbdGFza3MsIHNldFRhc2tzXSA9IHVzZVN0YXRlKCgpID0+IHsgdHJ5IHsKICAgICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0aWdlcnJhX3RvZG9fbGlzdCcpOwogICAgICAgIHJldHVybiBzYXZlZCA/IEpTT04ucGFyc2Uoc2F2ZWQpIDogW107CiAgICB9CiAgICBjYXRjaCB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfSB9KTsKICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0aWdlcnJhX3RvZG9fbGlzdCcsIEpTT04uc3RyaW5naWZ5KHRhc2tzKSk7IH0sIFt0YXNrc10pOwogICAgY29uc3QgYWRkVGFzayA9ICgpID0+IHsgaWYgKCFpbnB1dFZhbHVlLnRyaW0oKSkKICAgICAgICByZXR1cm47IHNldFRhc2tzKFt7IGlkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLCB0ZXh0OiBpbnB1dFZhbHVlLnRyaW0oKSwgY29tcGxldGVkOiBmYWxzZSwgY3JlYXRlZEF0OiBEYXRlLm5vdygpIH0sIC4uLnRhc2tzXSk7IHNldElucHV0VmFsdWUoJycpOyB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJNaW5pbWFsIFRvIERvIExpc3QiLCBkZXNjcmlwdGlvbjogIkEgY2xlYW4gY2hlY2tsaXN0IGZvciBkYWlseSB0YXNrcy4iLCBpY29uOiBMaXN0VG9kbywgY2F0ZWdvcnk6ICJUaW1lIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBtYXgtdy0zeGwgbXgtYXV0byIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUgbWItOCIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGlucHV0VmFsdWUsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSksIG9uS2V5RG93bjogKGUpID0+IGUua2V5ID09PSAnRW50ZXInICYmIGFkZFRhc2soKSwgcGxhY2Vob2xkZXI6ICJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiwgY2xhc3NOYW1lOiAidy1mdWxsIHAtNCBwci0xNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogYWRkVGFzaywgY2xhc3NOYW1lOiAiYWJzb2x1dGUgcmlnaHQtMiB0b3AtMiBib3R0b20tMiBhc3BlY3Qtc3F1YXJlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYnJhbmQtNjAwIiwgY2hpbGRyZW46IF9qc3goUGx1cywge30pIH0pXSB9KSwgX2pzeCgidWwiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMiIsIGNoaWxkcmVuOiB0YXNrcy5tYXAodGFzayA9PiAoX2pzeHMoImxpIiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBwLTQgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHJvdW5kZWQteGwgZ3JvdXAiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VGFza3ModGFza3MubWFwKHQgPT4gdC5pZCA9PT0gdGFzay5pZCA/IHsgLi4udCwgY29tcGxldGVkOiAhdC5jb21wbGV0ZWQgfSA6IHQpKSwgY2xhc3NOYW1lOiBgdy02IGgtNiBtci00IHJvdW5kZWQtZnVsbCBib3JkZXItMiAke3Rhc2suY29tcGxldGVkID8gJ2JnLWJyYW5kLTUwMCBib3JkZXItYnJhbmQtNTAwIHRleHQtd2hpdGUnIDogJ2JvcmRlci1ncmF5LTMwMCd9YCwgY2hpbGRyZW46IF9qc3goQ2hlY2ssIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogYGZsZXgtMSAke3Rhc2suY29tcGxldGVkID8gJ2xpbmUtdGhyb3VnaCB0ZXh0LWdyYXktNDAwJyA6ICcnfWAsIGNoaWxkcmVuOiB0YXNrLnRleHQgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VGFza3ModGFza3MuZmlsdGVyKHQgPT4gdC5pZCAhPT0gdGFzay5pZCkpLCBjbGFzc05hbWU6ICJvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdGV4dC1ncmF5LTMwMCBob3Zlcjp0ZXh0LXJlZC01MDAiLCBjaGlsZHJlbjogX2pzeChUcmFzaDIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSldIH0sIHRhc2suaWQpKSkgfSldIH0pIH0pKTsKfTsKZXhwb3J0IGNvbnN0IEhhYml0VHJhY2tlciA9ICgpID0+IHsKICAgIGNvbnN0IFtoYWJpdHMsIHNldEhhYml0c10gPSB1c2VTdGF0ZSgoKSA9PiB7IHRyeSB7CiAgICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGlnZXJyYV9oYWJpdHMnKTsKICAgICAgICByZXR1cm4gc2F2ZWQgPyBKU09OLnBhcnNlKHNhdmVkKSA6IFtdOwogICAgfQogICAgY2F0Y2ggewogICAgICAgIHJldHVybiBbXTsKICAgIH0gfSk7CiAgICBjb25zdCBbbmV3SGFiaXQsIHNldE5ld0hhYml0XSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtleHBhbmRlZEhhYml0SWQsIHNldEV4cGFuZGVkSGFiaXRJZF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFt2aWV3RGF0ZSwgc2V0Vmlld0RhdGVdID0gdXNlU3RhdGUobmV3IERhdGUoKSk7CiAgICB1c2VFZmZlY3QoKCkgPT4geyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGlnZXJyYV9oYWJpdHMnLCBKU09OLnN0cmluZ2lmeShoYWJpdHMpKTsgfSwgW2hhYml0c10pOwogICAgY29uc3QgcXVpY2tEYXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHsKICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoKTsKICAgICAgICBkLnNldERhdGUoZC5nZXREYXRlKCkgLSAoNiAtIGkpKTsKICAgICAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07CiAgICB9KTsKICAgIGNvbnN0IGFkZEhhYml0ID0gKCkgPT4geyBpZiAoIW5ld0hhYml0LnRyaW0oKSkKICAgICAgICByZXR1cm47IHNldEhhYml0cyhbLi4uaGFiaXRzLCB7IGlkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLCBuYW1lOiBuZXdIYWJpdC50cmltKCksIGNvbXBsZXRlZERhdGVzOiBbXSB9XSk7IHNldE5ld0hhYml0KCcnKTsgfTsKICAgIGNvbnN0IHRvZ2dsZUhhYml0ID0gKGlkLCBkYXRlKSA9PiBzZXRIYWJpdHMoaGFiaXRzLm1hcChoID0+IGguaWQgPT09IGlkID8geyAuLi5oLCBjb21wbGV0ZWREYXRlczogaC5jb21wbGV0ZWREYXRlcy5pbmNsdWRlcyhkYXRlKSA/IGguY29tcGxldGVkRGF0ZXMuZmlsdGVyKGQgPT4gZCAhPT0gZGF0ZSkgOiBbLi4uaC5jb21wbGV0ZWREYXRlcywgZGF0ZV0gfSA6IGgpKTsKICAgIGNvbnN0IGRlbGV0ZUhhYml0ID0gKGlkKSA9PiBjb25maXJtKCJEZWxldGUgaGFiaXQ/IikgJiYgc2V0SGFiaXRzKGhhYml0cy5maWx0ZXIoaCA9PiBoLmlkICE9PSBpZCkpOwogICAgY29uc3QgZ2V0U3RyZWFrID0gKGRhdGVzKSA9PiB7CiAgICAgICAgaWYgKCFkYXRlcy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5kYXRlc10uc29ydCgpLnJldmVyc2UoKTsKICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdOwogICAgICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSA4NjQwMDAwMCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdOwogICAgICAgIGlmICghc29ydGVkLmluY2x1ZGVzKHRvZGF5KSAmJiAhc29ydGVkLmluY2x1ZGVzKHllc3RlcmRheSkpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGxldCBzID0gMCwgY3VycmVudCA9IG5ldyBEYXRlKCk7CiAgICAgICAgaWYgKCFzb3J0ZWQuaW5jbHVkZXModG9kYXkpKQogICAgICAgICAgICBjdXJyZW50LnNldERhdGUoY3VycmVudC5nZXREYXRlKCkgLSAxKTsKICAgICAgICB3aGlsZSAoc29ydGVkLmluY2x1ZGVzKGN1cnJlbnQudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdKSkgewogICAgICAgICAgICBzKys7CiAgICAgICAgICAgIGN1cnJlbnQuc2V0RGF0ZShjdXJyZW50LmdldERhdGUoKSAtIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gczsKICAgIH07CiAgICBjb25zdCBnZXRDYWxlbmRhckRheXMgPSAoZGF0ZSkgPT4gewogICAgICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCksIG0gPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh5LCBtLCAxKS5nZXREYXkoKSwgZW5kID0gbmV3IERhdGUoeSwgbSArIDEsIDApLmdldERhdGUoKTsKICAgICAgICByZXR1cm4gWy4uLkFycmF5KHN0YXJ0KS5maWxsKG51bGwpLCAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgfSwgKF8sIGkpID0+IG5ldyBEYXRlKHksIG0sIGkgKyAxKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0pXTsKICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkRhaWx5IEhhYml0IFRyYWNrZXIiLCBkZXNjcmlwdGlvbjogIkJ1aWxkIHN0cmVha3MgYW5kIHZpc3VhbGl6ZSB5b3VyIGNvbnNpc3RlbmN5IG92ZXIgdGltZS4gU2ltcGxlLCBtaW5pbWFsaXN0LCBlZmZlY3RpdmUuIiwgaWNvbjogQWN0aXZpdHksIGNhdGVnb3J5OiAiVGltZSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTQgbWQ6cC04IG1heC13LTR4bCBteC1hdXRvIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJyZWxhdGl2ZSBtYi0xMiBmbGV4IGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogbmV3SGFiaXQsIG9uQ2hhbmdlOiBlID0+IHNldE5ld0hhYml0KGUudGFyZ2V0LnZhbHVlKSwgb25LZXlEb3duOiBlID0+IGUua2V5ID09PSAnRW50ZXInICYmIGFkZEhhYml0KCksIHBsYWNlaG9sZGVyOiAiV2hhdCBoYWJpdCB3b3VsZCB5b3UgbGlrZSB0byB0cmFjaz8iLCBjbGFzc05hbWU6ICJmbGV4LTEgcC00IHBsLTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctc20gdGV4dC1sZyIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogYWRkSGFiaXQsIGRpc2FibGVkOiAhbmV3SGFiaXQudHJpbSgpLCBjbGFzc05hbWU6ICJweC04IGJnLWJyYW5kLTYwMCBob3ZlcjpiZy1icmFuZC03MDAgdGV4dC13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3ctbGcgc2hhZG93LWJyYW5kLTUwMC8yMCB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpvcGFjaXR5LTUwIGFjdGl2ZTpzY2FsZS05NSIsIGNoaWxkcmVuOiBfanN4KFBsdXMsIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBoYWJpdHMubGVuZ3RoID09PSAwID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIHB5LTIwIHRleHQtZ3JheS00MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCByb3VuZGVkLTN4bCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3goQ2FsZW5kYXJDaGVjaywgeyBjbGFzc05hbWU6ICJ3LTE2IGgtMTYgbXgtYXV0byBtYi00IG9wYWNpdHktMjAiIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1sZyIsIGNoaWxkcmVuOiAiQ29uc2lzdGVuY3kgaXMga2V5LiIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20iLCBjaGlsZHJlbjogIlN0YXJ0IHlvdXIgam91cm5leSBieSBhZGRpbmcgYSBoYWJpdCBhYm92ZS4iIH0pXSB9KSkgOiBoYWJpdHMubWFwKGhhYml0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFrID0gZ2V0U3RyZWFrKGhhYml0LmNvbXBsZXRlZERhdGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFeHAgPSBleHBhbmRlZEhhYml0SWQgPT09IGhhYml0LmlkOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBzaGFkb3ctc20gb3ZlcmZsb3ctaGlkZGVuIHRyYW5zaXRpb24tYWxsIGdyb3VwIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTQgbWQ6cC01IGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNiIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgbWluLXctMCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyIsIGNoaWxkcmVuOiBbX2pzeCgiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0ZXh0LWxnIHRydW5jYXRlIHByLTIiLCBjaGlsZHJlbjogaGFiaXQubmFtZSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiBgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1bMTFweF0gZm9udC1ibGFjayBweC0yIHB5LTAuNSByb3VuZGVkLWZ1bGwgJHtzdHJlYWsgPiAwID8gJ2JnLW9yYW5nZS01MCBkYXJrOmJnLW9yYW5nZS05NTAvMzAgdGV4dC1vcmFuZ2UtNjAwIGRhcms6dGV4dC1vcmFuZ2UtNDAwIGJvcmRlciBib3JkZXItb3JhbmdlLTEwMCBkYXJrOmJvcmRlci1vcmFuZ2UtOTAwLzUwJyA6ICdiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgdGV4dC1ncmF5LTQwMCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50J31gLCBjaGlsZHJlbjogW19qc3goRmxhbWUsIHsgY2xhc3NOYW1lOiBgdy0zIGgtMyAke3N0cmVhayA+IDAgPyAnZmlsbC1jdXJyZW50JyA6ICcnfWAgfSksICIgIiwgc3RyZWFrXSB9KV0gfSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHAtMS41IGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBxdWlja0RhdGVzLm1hcChkYXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBoYWJpdC5jb21wbGV0ZWREYXRlcy5pbmNsdWRlcyhkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRhdGUgPT09IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gdG9nZ2xlSGFiaXQoaGFiaXQuaWQsIGRhdGUpLCBjbGFzc05hbWU6IGB3LTkgaC05IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCByZWxhdGl2ZSAke2FjdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgc2hhZG93LW1kJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHRleHQtZ3JheS00MDAgaG92ZXI6Ym9yZGVyLWJyYW5kLTMwMCBkYXJrOmhvdmVyOmJvcmRlci1icmFuZC04MDAnfSAke2lzVG9kYXkgJiYgIWFjdGl2ZSA/ICdib3JkZXItYnJhbmQtNTAwJyA6ICcnfWAsIHRpdGxlOiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpLCBjaGlsZHJlbjogW2FjdGl2ZSA/IChfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNCBoLTQgYW5pbWF0ZS1pbiB6b29tLWluLTUwIiB9KSkgOiAoX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiBgdGV4dC1bMTBweF0gZm9udC1ibGFjayB1cHBlcmNhc2UgJHtpc1RvZGF5ID8gJ3RleHQtYnJhbmQtNjAwJyA6ICdvcGFjaXR5LTQwJ31gLCBjaGlsZHJlbjogZC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyB3ZWVrZGF5OiAnbmFycm93JyB9KSB9KSksIGlzVG9kYXkgJiYgIWFjdGl2ZSAmJiAoX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSAtdG9wLTEgLXJpZ2h0LTEgdy0yIGgtMiBiZy1icmFuZC01MDAgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLXdoaXRlIGRhcms6cmluZy1kYXJrLTkwMCIgfSkpXSB9LCBkYXRlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcGwtNCBib3JkZXItbCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0RXhwYW5kZWRIYWJpdElkKGlzRXhwID8gbnVsbCA6IGhhYml0LmlkKSwgY2xhc3NOYW1lOiBgcC0yLjUgcm91bmRlZC14bCB0cmFuc2l0aW9uLWFsbCAke2lzRXhwID8gJ3RleHQtYnJhbmQtNjAwIGJnLWJyYW5kLTUwIGRhcms6YmctYnJhbmQtOTAwLzIwJyA6ICd0ZXh0LWdyYXktNDAwIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1kYXJrLTgwMCd9YCwgY2hpbGRyZW46IF9qc3goSGlzdG9yeSwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBkZWxldGVIYWJpdChoYWJpdC5pZCksIGNsYXNzTmFtZTogInAtMi41IHRleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC1yZWQtNTAwIGhvdmVyOmJnLXJlZC01MCBkYXJrOmhvdmVyOmJnLXJlZC05NTAvMjAgcm91bmRlZC14bCB0cmFuc2l0aW9uLWFsbCIsIGNoaWxkcmVuOiBfanN4KFRyYXNoMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSldIH0pXSB9KSwgaXNFeHAgJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYm9yZGVyLXQgYm9yZGVyLWdyYXktNTAgZGFyazpib3JkZXItZGFyay04MDAgYmctZ3JheS01MC81MCBkYXJrOmJnLWJsYWNrLzEwIHAtOCBhbmltYXRlLWluIHNsaWRlLWluLWZyb20tdG9wLTQgZHVyYXRpb24tMzAwIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm1heC13LXNtIG14LWF1dG8iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi02IiwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46IHZpZXdEYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycgfSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTEiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0Vmlld0RhdGUobmV3IERhdGUodmlld0RhdGUuc2V0TW9udGgodmlld0RhdGUuZ2V0TW9udGgoKSAtIDEpKSksIGNsYXNzTmFtZTogInAtMS41IGhvdmVyOmJnLXdoaXRlIGRhcms6aG92ZXI6YmctZGFyay04MDAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IGhvdmVyOmJvcmRlci1ncmF5LTIwMCIsIGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldFZpZXdEYXRlKG5ldyBEYXRlKHZpZXdEYXRlLnNldE1vbnRoKHZpZXdEYXRlLmdldE1vbnRoKCkgKyAxKSkpLCBjbGFzc05hbWU6ICJwLTEuNSBob3ZlcjpiZy13aGl0ZSBkYXJrOmhvdmVyOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBob3Zlcjpib3JkZXItZ3JheS0yMDAiLCBjaGlsZHJlbjogX2pzeChDaGV2cm9uUmlnaHQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSldIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy03IGdhcC0yIG1iLTMiLCBjaGlsZHJlbjogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10ubWFwKGQgPT4gX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktMzAwIGRhcms6dGV4dC1kYXJrLTcwMCB0ZXh0LWNlbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctdGlnaHRlciIsIGNoaWxkcmVuOiBkIH0sIGQpKSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy03IGdhcC0yIiwgY2hpbGRyZW46IGdldENhbGVuZGFyRGF5cyh2aWV3RGF0ZSkubWFwKChkYXRlLCBpZHgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLTgiIH0sIGlkeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBoYWJpdC5jb21wbGV0ZWREYXRlcy5pbmNsdWRlcyhkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXRlID09PSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB0b2dnbGVIYWJpdChoYWJpdC5pZCwgZGF0ZSksIGNsYXNzTmFtZTogYGgtOSByb3VuZGVkLXhsIHRleHQtWzExcHhdIGZvbnQtYm9sZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCAke2FjdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1icmFuZC01MDAgdGV4dC13aGl0ZSBzaGFkb3ctc20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCB0ZXh0LWdyYXktNTAwIGhvdmVyOmJvcmRlci1icmFuZC0yMDAnfSAke2lzVG9kYXkgJiYgIWFjdGl2ZSA/ICdib3JkZXItYnJhbmQtNTAwIHRleHQtYnJhbmQtNjAwIHJpbmctMiByaW5nLWJyYW5kLTUwMCByaW5nLW9mZnNldC0yIGRhcms6cmluZy1vZmZzZXQtZGFyay05MDAnIDogJyd9YCwgY2hpbGRyZW46IG5ldyBEYXRlKGRhdGUpLmdldERhdGUoKSB9LCBkYXRlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC04IHB0LTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiBbX2pzeHMoInNwYW4iLCB7IGNoaWxkcmVuOiBbIk1vbnRoIFNjb3JlOiAiLCBoYWJpdC5jb21wbGV0ZWREYXRlcy5maWx0ZXIoZCA9PiBkLnN0YXJ0c1dpdGgodmlld0RhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCA3KSkpLmxlbmd0aF0gfSksIF9qc3hzKCJzcGFuIiwgeyBjaGlsZHJlbjogWyJBbGwgVGltZTogIiwgaGFiaXQuY29tcGxldGVkRGF0ZXMubGVuZ3RoXSB9KV0gfSldIH0pIH0pKV0gfSwgaGFiaXQuaWQpKTsKICAgICAgICAgICAgICAgICAgICB9KSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtMTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNjAwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIiwgY2hpbGRyZW46IFtfanN4KEhhcmREcml2ZSwgeyBjbGFzc05hbWU6ICJ3LTMuNSBoLTMuNSIgfSksICIgU3luY2hyb25pemVkIExvY2FsbHkiXSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gRm9jdXMgRmxvdyAoUG9tb2Rvcm8pIC0tLQpleHBvcnQgY29uc3QgRm9jdXNUaW1lciA9ICgpID0+IHsKICAgIGNvbnN0IFttb2RlLCBzZXRNb2RlXSA9IHVzZVN0YXRlKCdmb2N1cycpOwogICAgY29uc3QgW3RpbWVMZWZ0LCBzZXRUaW1lTGVmdF0gPSB1c2VTdGF0ZSgyNSAqIDYwKTsKICAgIGNvbnN0IFtpc0FjdGl2ZSwgc2V0SXNBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgaW50ZXJ2YWxSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCBtb2RlcyA9IHsgZm9jdXM6IHsgbTogMjUsIGM6ICd0ZXh0LWJyYW5kLTUwMCcgfSwgc2hvcnQ6IHsgbTogNSwgYzogJ3RleHQtZ3JlZW4tNTAwJyB9LCBsb25nOiB7IG06IDE1LCBjOiAndGV4dC1ibHVlLTUwMCcgfSB9OwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICBpZiAoaXNBY3RpdmUgJiYgdGltZUxlZnQgPiAwKSB7CiAgICAgICAgICAgIGludGVydmFsUmVmLmN1cnJlbnQgPSBzZXRJbnRlcnZhbCgoKSA9PiBzZXRUaW1lTGVmdCh0ID0+IHQgLSAxKSwgMTAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRpbWVMZWZ0ID09PSAwKQogICAgICAgICAgICBzZXRJc0FjdGl2ZShmYWxzZSk7CiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxSZWYuY3VycmVudCk7CiAgICB9LCBbaXNBY3RpdmUsIHRpbWVMZWZ0XSk7CiAgICB1c2VFZmZlY3QoKCkgPT4geyBzZXRJc0FjdGl2ZShmYWxzZSk7IHNldFRpbWVMZWZ0KG1vZGVzW21vZGVdLm0gKiA2MCk7IH0sIFttb2RlXSk7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkZvY3VzIEZsb3ciLCBkZXNjcmlwdGlvbjogIk1pbmltYWxpc3QgUG9tb2Rvcm8gdGltZXIgZm9yIGRlZXAgd29yayBzZXNzaW9ucy4iLCBpY29uOiBCcmFpbkNpcmN1aXQsIGNhdGVnb3J5OiAiVGltZSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgbWF4LXctMnhsIG14LWF1dG8gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBwLTEgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWZ1bGwgbWItMTIiLCBjaGlsZHJlbjogT2JqZWN0LmtleXMobW9kZXMpLm1hcCgobSkgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0TW9kZShtKSwgY2xhc3NOYW1lOiBgcHgtNiBweS0yIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsICR7bW9kZSA9PT0gbSA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstNzAwIHRleHQtZ3JheS05MDAgc2hhZG93LXNtJyA6ICd0ZXh0LWdyYXktNTAwJ31gLCBjaGlsZHJlbjogbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG0uc2xpY2UoMSkgfSwgbSkpKSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUgdy03MiBoLTcyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTEyIiwgY2hpbGRyZW46IFtfanN4cygic3ZnIiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgLXJvdGF0ZS05MCIsIHZpZXdCb3g6ICIwIDAgMjg4IDI4OCIsIGNoaWxkcmVuOiBbX2pzeCgiY2lyY2xlIiwgeyBjeDogIjE0NCIsIGN5OiAiMTQ0IiwgcjogIjEzNiIsIHN0cm9rZTogImN1cnJlbnRDb2xvciIsIHN0cm9rZVdpZHRoOiAiOCIsIGZpbGw6ICJ0cmFuc3BhcmVudCIsIGNsYXNzTmFtZTogInRleHQtZ3JheS0xMDAgZGFyazp0ZXh0LWRhcmstODAwIiB9KSwgX2pzeCgiY2lyY2xlIiwgeyBjeDogIjE0NCIsIGN5OiAiMTQ0IiwgcjogIjEzNiIsIHN0cm9rZTogImN1cnJlbnRDb2xvciIsIHN0cm9rZVdpZHRoOiAiOCIsIGZpbGw6ICJ0cmFuc3BhcmVudCIsIHN0cm9rZURhc2hhcnJheTogODU0LCBzdHJva2VEYXNob2Zmc2V0OiA4NTQgKiAodGltZUxlZnQgLyAobW9kZXNbbW9kZV0ubSAqIDYwKSksIHN0cm9rZUxpbmVjYXA6ICJyb3VuZCIsIGNsYXNzTmFtZTogYCR7bW9kZXNbbW9kZV0uY30gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTAwMCBlYXNlLWxpbmVhcmAgfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIHotMTAiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC03eGwgZm9udC1tb25vIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIiwgY2hpbGRyZW46IFtNYXRoLmZsb29yKHRpbWVMZWZ0IC8gNjApLCAiOiIsIFN0cmluZyh0aW1lTGVmdCAlIDYwKS5wYWRTdGFydCgyLCAnMCcpXSB9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0SXNBY3RpdmUoIWlzQWN0aXZlKSwgY2xhc3NOYW1lOiAidy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzaGFkb3ctbGciLCBjaGlsZHJlbjogaXNBY3RpdmUgPyBfanN4KFBhdXNlLCB7fSkgOiBfanN4KFBsYXksIHsgY2xhc3NOYW1lOiAibWwtMSIgfSkgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VGltZUxlZnQobW9kZXNbbW9kZV0ubSAqIDYwKSwgY2xhc3NOYW1lOiAidy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBiZy1ncmF5LTIwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS02MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiLCBjaGlsZHJlbjogX2pzeChSb3RhdGVDY3csIHt9KSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIERheSBQbGFubmVyIC0tLQpleHBvcnQgY29uc3QgRGF5UGxhbm5lciA9ICgpID0+IHsKICAgIGNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTggfSwgKF8sIGkpID0+IGkgKyA2KTsKICAgIGNvbnN0IFtzY2hlZHVsZSwgc2V0U2NoZWR1bGVdID0gdXNlU3RhdGUoKCkgPT4geyB0cnkgewogICAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RpZ2VycmFfZGF5X3BsYW5uZXInKTsKICAgICAgICByZXR1cm4gc2F2ZWQgPyBKU09OLnBhcnNlKHNhdmVkKSA6IHt9OwogICAgfQogICAgY2F0Y2ggewogICAgICAgIHJldHVybiB7fTsKICAgIH0gfSk7CiAgICB1c2VFZmZlY3QoKCkgPT4geyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGlnZXJyYV9kYXlfcGxhbm5lcicsIEpTT04uc3RyaW5naWZ5KHNjaGVkdWxlKSk7IH0sIFtzY2hlZHVsZV0pOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJEYXkgR3JpZCIsIGRlc2NyaXB0aW9uOiAiSG91cmx5IHRpbWUtYmxvY2tpbmcgcGxhbm5lci4gU2ltcGxlIGFuZCBlZmZlY3RpdmUuIiwgaWNvbjogTGF5b3V0TGlzdCwgY2F0ZWdvcnk6ICJUaW1lIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAibWF4LXctM3hsIG14LWF1dG8gcC02IHNwYWNlLXktMiIsIGNoaWxkcmVuOiBob3Vycy5tYXAoaG91ciA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInctMTIgdGV4dC1yaWdodCB0ZXh0LXhzIGZvbnQtbW9ubyB0ZXh0LWdyYXktNDAwIiwgY2hpbGRyZW46IFtob3VyLCAiOjAwIl0gfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBzY2hlZHVsZVtob3VyXSB8fCAnJywgb25DaGFuZ2U6IGUgPT4gc2V0U2NoZWR1bGUoeyAuLi5zY2hlZHVsZSwgW2hvdXJdOiBlLnRhcmdldC52YWx1ZSB9KSwgcGxhY2Vob2xkZXI6ICItIiwgY2xhc3NOYW1lOiAiZmxleC0xIHB5LTMgcHgtNCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05MDAgYm9yZGVyLW5vbmUgcm91bmRlZC1sZyBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1icmFuZC0yMDAiIH0pXSB9LCBob3VyKSkpIH0pIH0pKTsKfTsKLy8gLS0tIExpZmUgUHJvZ3Jlc3MgLS0tCmV4cG9ydCBjb25zdCBMaWZlUHJvZ3Jlc3MgPSAoKSA9PiB7CiAgICBjb25zdCBbYmlydGhEYXRlLCBzZXRCaXJ0aERhdGVdID0gdXNlU3RhdGUoKCkgPT4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RpZ2VycmFfYmlydGhfZGF0ZScpIHx8ICcxOTk1LTAxLTAxJyk7CiAgICBjb25zdCBbZXhwZWN0YW5jeSwgc2V0RXhwZWN0YW5jeV0gPSB1c2VTdGF0ZSgoKSA9PiBwYXJzZUludChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGlnZXJyYV9saWZlX2V4cGVjdGFuY3knKSB8fCAnODUnKSk7CiAgICBjb25zdCBbbm93LCBzZXROb3ddID0gdXNlU3RhdGUobmV3IERhdGUoKSk7CiAgICB1c2VFZmZlY3QoKCkgPT4geyBjb25zdCB0ID0gc2V0SW50ZXJ2YWwoKCkgPT4gc2V0Tm93KG5ldyBEYXRlKCkpLCAxMDApOyByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0KTsgfSwgW10pOwogICAgY29uc3QgZG9iID0gbmV3IERhdGUoYmlydGhEYXRlKSwgZGVhdGggPSBuZXcgRGF0ZShkb2IpOwogICAgZGVhdGguc2V0RnVsbFllYXIoZG9iLmdldEZ1bGxZZWFyKCkgKyBleHBlY3RhbmN5KTsKICAgIGNvbnN0IGxpZmVQcm9ncmVzcyA9IE1hdGgubWluKDEwMCwgTWF0aC5tYXgoMCwgKChub3cuZ2V0VGltZSgpIC0gZG9iLmdldFRpbWUoKSkgLyAoZGVhdGguZ2V0VGltZSgpIC0gZG9iLmdldFRpbWUoKSkpICogMTAwKSk7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkxpZmUgUHJvZ3Jlc3MiLCBkZXNjcmlwdGlvbjogIlZpc3VhbGl6ZSB0aGUgcGFzc2FnZSBvZiB0aW1lLiBQZXJzcGVjdGl2ZSBjaGFuZ2VzIGV2ZXJ5dGhpbmcuIiwgaWNvbjogSG91cmdsYXNzSWNvbiwgY2F0ZWdvcnk6ICJUaW1lIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy00eGwgbXgtYXV0byB0ZXh0LWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItNCIsIGNoaWxkcmVuOiAiVG90YWwgTGlmZSBQcm9ncmVzcyIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEyMHB4XSBmb250LWJsYWNrIHRyYWNraW5nLXRpZ2h0ZXIgbGVhZGluZy1ub25lIG1iLTEwIiwgY2hpbGRyZW46IFtsaWZlUHJvZ3Jlc3MudG9GaXhlZCg0KSwgIiUiXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LWZ1bGwgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWZ1bGwgaC00IG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImgtZnVsbCBiZy1icmFuZC02MDAiLCBzdHlsZTogeyB3aWR0aDogYCR7bGlmZVByb2dyZXNzfSVgIH0gfSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTEyIGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC0zeGwgZm9udC1ib2xkIiwgY2hpbGRyZW46IE1hdGguZmxvb3IoKGRlYXRoLmdldFRpbWUoKSAtIG5vdy5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQgKiA3KSkudG9Mb2NhbGVTdHJpbmcoKSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtdC0xIiwgY2hpbGRyZW46ICJXZWVrcyBSZW1haW5pbmciIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTN4bCBmb250LWJvbGQiLCBjaGlsZHJlbjogTWF0aC5mbG9vcigoZGVhdGguZ2V0VGltZSgpIC0gbm93LmdldFRpbWUoKSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpLnRvTG9jYWxlU3RyaW5nKCkgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbXQtMSIsIGNoaWxkcmVuOiAiRGF5cyBSZW1haW5pbmciIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTEyIHAtNiBib3JkZXIgcm91bmRlZC14bCBmbGV4IGdhcC00IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJkYXRlIiwgdmFsdWU6IGJpcnRoRGF0ZSwgb25DaGFuZ2U6IGUgPT4gc2V0QmlydGhEYXRlKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAicC0yIGJvcmRlciByb3VuZGVkIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogZXhwZWN0YW5jeSwgb25DaGFuZ2U6IGUgPT4gc2V0RXhwZWN0YW5jeShwYXJzZUludChlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LTIwIHAtMiBib3JkZXIgcm91bmRlZCIgfSldIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBCcmVhdGhpbmcgQm94IC0tLQpleHBvcnQgY29uc3QgQnJlYXRoaW5nQm94ID0gKCkgPT4gewogICAgY29uc3QgW2lzQWN0aXZlLCBzZXRJc0FjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbcGhhc2UsIHNldFBoYXNlXSA9IHVzZVN0YXRlKCdpbmhhbGUnKTsKICAgIGNvbnN0IFtzZWNvbmRzLCBzZXRTZWNvbmRzXSA9IHVzZVN0YXRlKDQpOwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICBsZXQgdDsKICAgICAgICBpZiAoaXNBY3RpdmUpIHsKICAgICAgICAgICAgdCA9IHNldEludGVydmFsKCgpID0+IHsgc2V0U2Vjb25kcyhzID0+IHsgaWYgKHMgPT09IDEpIHsKICAgICAgICAgICAgICAgIHNldFBoYXNlKHAgPT4gcCA9PT0gJ2luaGFsZScgPyAnaG9sZC1pbicgOiBwID09PSAnaG9sZC1pbicgPyAnZXhoYWxlJyA6IHAgPT09ICdleGhhbGUnID8gJ2hvbGQtb3V0JyA6ICdpbmhhbGUnKTsKICAgICAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICAgICB9IHJldHVybiBzIC0gMTsgfSk7IH0sIDEwMDApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgc2V0UGhhc2UoJ2luaGFsZScpOwogICAgICAgICAgICBzZXRTZWNvbmRzKDQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0KTsKICAgIH0sIFtpc0FjdGl2ZV0pOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJCcmVhdGhpbmcgQm94IiwgZGVzY3JpcHRpb246ICJSZWdhaW4gZm9jdXMgd2l0aCBib3ggYnJlYXRoaW5nICg0LTQtNC00KS4iLCBpY29uOiBXaW5kLCBjYXRlZ29yeTogIlRpbWUiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibWluLWgtWzUwMHB4XSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctZ3JheS01MCBkYXJrOmJnLWJsYWNrLzUwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogYHctNjQgaC02NCBib3JkZXItNCBib3JkZXItYnJhbmQtNTAwIHJvdW5kZWQtM3hsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLVs0MDAwbXNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyICR7aXNBY3RpdmUgJiYgKHBoYXNlID09PSAnaW5oYWxlJyB8fCBwaGFzZSA9PT0gJ2hvbGQtaW4nKSA/ICdzY2FsZS0xMjUgYmctYnJhbmQtNTAwLzEwJyA6ICdzY2FsZS03NSd9YCwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ib2xkIG1iLTEiLCBjaGlsZHJlbjogaXNBY3RpdmUgPyBwaGFzZS5yZXBsYWNlKCctJywgJyAnKSA6ICdSZWFkeT8nIH0pLCBpc0FjdGl2ZSAmJiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtNHhsIGZvbnQtYmxhY2siLCBjaGlsZHJlbjogc2Vjb25kcyB9KV0gfSkgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0SXNBY3RpdmUoIWlzQWN0aXZlKSwgY2xhc3NOYW1lOiAibXQtMTIgcHgtMTAgcHktNCBiZy1icmFuZC02MDAgdGV4dC13aGl0ZSByb3VuZGVkLWZ1bGwgZm9udC1ib2xkIHNoYWRvdy14bCIsIGNoaWxkcmVuOiBpc0FjdGl2ZSA/ICdTdG9wJyA6ICdTdGFydCBTZXNzaW9uJyB9KV0gfSkgfSkpOwp9OwpleHBvcnQgY29uc3QgVGltZUxvZ2dlciA9ICgpID0+IHsKICAgIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gdXNlU3RhdGUoKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dpcmVuaW5qYV90aW1lX3Byb2plY3RzJyk7CiAgICAgICAgICAgIHJldHVybiBzYXZlZCA/IEpTT04ucGFyc2Uoc2F2ZWQpIDogW3sgaWQ6ICcxJywgbmFtZTogJ0ZyZWVsYW5jZSBXb3JrJywgcmF0ZTogNTAsIGNvbG9yOiAnIzYzNWJmZicgfV07CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsKICAgICAgICAgICAgcmV0dXJuIFt7IGlkOiAnMScsIG5hbWU6ICdGcmVlbGFuY2UgV29yaycsIHJhdGU6IDUwLCBjb2xvcjogJyM2MzViZmYnIH1dOwogICAgICAgIH0KICAgIH0pOwogICAgY29uc3QgW2xvZ3MsIHNldExvZ3NdID0gdXNlU3RhdGUoKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dpcmVuaW5qYV90aW1lX2xvZ3MnKTsKICAgICAgICAgICAgcmV0dXJuIHNhdmVkID8gSlNPTi5wYXJzZShzYXZlZCkgOiBbXTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQogICAgfSk7CiAgICBjb25zdCBbYWN0aXZlVGltZXIsIHNldEFjdGl2ZVRpbWVyXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2VsYXBzZWQsIHNldEVsYXBzZWRdID0gdXNlU3RhdGUoMCk7CiAgICBjb25zdCBbaXNNYW5hZ2luZywgc2V0SXNNYW5hZ2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbbmV3UHJvak5hbWUsIHNldE5ld1Byb2pOYW1lXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtuZXdQcm9qUmF0ZSwgc2V0TmV3UHJvalJhdGVdID0gdXNlU3RhdGUoNTApOwogICAgLy8gUGVyc2lzdGVuY2UKICAgIHVzZUVmZmVjdCgoKSA9PiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd2lyZW5pbmphX3RpbWVfcHJvamVjdHMnLCBKU09OLnN0cmluZ2lmeShwcm9qZWN0cykpLCBbcHJvamVjdHNdKTsKICAgIHVzZUVmZmVjdCgoKSA9PiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd2lyZW5pbmphX3RpbWVfbG9ncycsIEpTT04uc3RyaW5naWZ5KGxvZ3MpKSwgW2xvZ3NdKTsKICAgIC8vIFRpbWVyIFRpY2sKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgbGV0IHQ7CiAgICAgICAgaWYgKGFjdGl2ZVRpbWVyKSB7CiAgICAgICAgICAgIHQgPSBzZXRJbnRlcnZhbCgoKSA9PiBzZXRFbGFwc2VkKE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhY3RpdmVUaW1lci5zdGFydCkgLyAxMDAwKSksIDEwMDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0KTsKICAgIH0sIFthY3RpdmVUaW1lcl0pOwogICAgY29uc3Qgc3RhcnRUaW1lciA9IChwcm9qZWN0SWQpID0+IHsKICAgICAgICBzZXRBY3RpdmVUaW1lcih7IHByb2plY3RJZCwgc3RhcnQ6IERhdGUubm93KCksIGRlc2M6ICcnIH0pOwogICAgfTsKICAgIGNvbnN0IHN0b3BUaW1lciA9ICgpID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZVRpbWVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgbmV3TG9nID0gewogICAgICAgICAgICBpZDogY3J5cHRvLnJhbmRvbVVVSUQoKSwKICAgICAgICAgICAgcHJvamVjdElkOiBhY3RpdmVUaW1lci5wcm9qZWN0SWQsCiAgICAgICAgICAgIHN0YXJ0OiBhY3RpdmVUaW1lci5zdGFydCwKICAgICAgICAgICAgZW5kOiBEYXRlLm5vdygpLAogICAgICAgICAgICBkdXJhdGlvbjogZWxhcHNlZCwKICAgICAgICAgICAgZGVzY3JpcHRpb246IGFjdGl2ZVRpbWVyLmRlc2MKICAgICAgICB9OwogICAgICAgIHNldExvZ3MoW25ld0xvZywgLi4ubG9nc10pOwogICAgICAgIHNldEFjdGl2ZVRpbWVyKG51bGwpOwogICAgICAgIHNldEVsYXBzZWQoMCk7CiAgICB9OwogICAgY29uc3QgYWRkUHJvamVjdCA9ICgpID0+IHsKICAgICAgICBpZiAoIW5ld1Byb2pOYW1lLnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHByb2plY3QgPSB7CiAgICAgICAgICAgIGlkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLAogICAgICAgICAgICBuYW1lOiBuZXdQcm9qTmFtZS50cmltKCksCiAgICAgICAgICAgIHJhdGU6IG5ld1Byb2pSYXRlLAogICAgICAgICAgICBjb2xvcjogYGhzbCgke01hdGgucmFuZG9tKCkgKiAzNjB9LCA3MCUsIDYwJSlgCiAgICAgICAgfTsKICAgICAgICBzZXRQcm9qZWN0cyhbLi4ucHJvamVjdHMsIHByb2plY3RdKTsKICAgICAgICBzZXROZXdQcm9qTmFtZSgnJyk7CiAgICB9OwogICAgY29uc3QgZGVsZXRlUHJvamVjdCA9IChpZCkgPT4gewogICAgICAgIGlmIChwcm9qZWN0cy5sZW5ndGggPD0gMSkgewogICAgICAgICAgICBhbGVydCgiWW91IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgcHJvamVjdCBjYXRlZ29yeS4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlybSgiRGVsZXRlIHRoaXMgY2F0ZWdvcnk/IExvZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2F0ZWdvcnkgd2lsbCByZW1haW4gYnV0IHNob3duIGFzICdEZWxldGVkIFByb2plY3QnLiIpKSB7CiAgICAgICAgICAgIHNldFByb2plY3RzKHByb2plY3RzLmZpbHRlcihwID0+IHAuaWQgIT09IGlkKSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGZvcm1hdEhNUyA9IChzKSA9PiB7CiAgICAgICAgY29uc3QgaCA9IE1hdGguZmxvb3IocyAvIDM2MDApOwogICAgICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKChzICUgMzYwMCkgLyA2MCk7CiAgICAgICAgY29uc3Qgc2VjID0gcyAlIDYwOwogICAgICAgIHJldHVybiBgJHtofWggJHttfW0gJHtzZWN9c2A7CiAgICB9OwogICAgY29uc3QgY2FsY3VsYXRlRWFybmluZ3MgPSAoZHVyYXRpb25TZWNvbmRzLCByYXRlKSA9PiB7CiAgICAgICAgcmV0dXJuIChkdXJhdGlvblNlY29uZHMgLyAzNjAwKSAqIHJhdGU7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJCaWxsYWJsZSBUaW1lIExvZ2dlciIsIGRlc2NyaXB0aW9uOiAiVHJhY2sgeW91ciB3b3JrIGhvdXJzIGFjcm9zcyBjdXN0b20gY2F0ZWdvcmllcyBhbmQgY2FsY3VsYXRlIGVhcm5pbmdzIGluIHJlYWwtdGltZS4iLCBpY29uOiBUaW1lciwgY2F0ZWdvcnk6ICJUaW1lIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBtZDpwLTggbWF4LXctNnhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6IGByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4gcC04IG1kOnAtMTIgcm91bmRlZC1bMnJlbV0gYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIHNoYWRvdy14bCAke2FjdGl2ZVRpbWVyID8gJ2JnLWJyYW5kLTYwMCBib3JkZXItYnJhbmQtNTAwIHRleHQtd2hpdGUgc2hhZG93LWJyYW5kLTUwMC8yMCcgOiAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAnfWAsIGNoaWxkcmVuOiBbYWN0aXZlVGltZXIgJiYgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHctNjQgaC02NCBiZy13aGl0ZS8xMCBibHVyLVsxMDBweF0gcm91bmRlZC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgLW1yLTMyIC1tdC0zMiIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUgei0xMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciIsIGNoaWxkcmVuOiAhYWN0aXZlVGltZXIgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidy1mdWxsIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBtYi02IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMTIgaC0xMiBiZy1icmFuZC01MCBkYXJrOmJnLWJyYW5kLTkwMC8zMCByb3VuZGVkLTJ4bCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJyYW5kLTYwMCIsIGNoaWxkcmVuOiBfanN4KFBsYXksIHsgY2xhc3NOYW1lOiAidy02IGgtNiBmaWxsLWN1cnJlbnQiIH0pIH0pLCBfanN4KCJoMiIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ibGFjayB0cmFja2luZy10aWdodCIsIGNoaWxkcmVuOiAiUmVhZHkgdG8gc3RhcnQgdHJhY2tpbmc/IiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00IG1heC13LTJ4bCBteC1hdXRvIiwgY2hpbGRyZW46IFtfanN4KCJzZWxlY3QiLCB7IGlkOiAicHJvai1zZWxlY3QiLCBjbGFzc05hbWU6ICJ3LWZ1bGwgbWQ6dy02NCBwLTQgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgZm9udC1ib2xkIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMjAwIHNoYWRvdy1zbSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgb3V0bGluZS1ub25lIiwgb25DaGFuZ2U6IChlKSA9PiB7IH0sIGNoaWxkcmVuOiBwcm9qZWN0cy5tYXAocCA9PiBfanN4KCJvcHRpb24iLCB7IHZhbHVlOiBwLmlkLCBjaGlsZHJlbjogcC5uYW1lIH0sIHAuaWQpKSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2otc2VsZWN0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWVyKHNlbGVjdC52YWx1ZSB8fCBwcm9qZWN0c1swXS5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogInctZnVsbCBtZDp3LWF1dG8gcHgtMTAgcHktNCBiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBmb250LWJsYWNrIHJvdW5kZWQtMnhsIHNoYWRvdy1sZyBob3ZlcjpzY2FsZS0xMDUgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFsiU3RhcnQgU2Vzc2lvbiAiLCBfanN4KEFycm93UmlnaHQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldElzTWFuYWdpbmcoIWlzTWFuYWdpbmcpLCBjbGFzc05hbWU6ICJwLTQgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCByb3VuZGVkLTJ4bCBob3ZlcjpiZy1ncmF5LTIwMCB0cmFuc2l0aW9uLWNvbG9ycyIsIHRpdGxlOiAiTWFuYWdlIENhdGVnb3JpZXMiLCBjaGlsZHJlbjogX2pzeChTZXR0aW5nczIsIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSldIH0pXSB9KSkgOiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidy1mdWxsIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBtYi00IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMyBoLTMgYmctcmVkLTQwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZSIgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSB0ZXh0LWJyYW5kLTIwMCIsIGNoaWxkcmVuOiAiU2Vzc2lvbiBpbiBQcm9ncmVzcyIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTd4bCBtZDp0ZXh0LTl4bCBmb250LW1vbm8gZm9udC1ibGFjayB0YWJ1bGFyLW51bXMgdHJhY2tpbmctdGlnaHRlciBtYi00IiwgY2hpbGRyZW46IFtNYXRoLmZsb29yKGVsYXBzZWQgLyAzNjAwKSwgIjoiLCBTdHJpbmcoTWF0aC5mbG9vcigoZWxhcHNlZCAlIDM2MDApIC8gNjApKS5wYWRTdGFydCgyLCAnMCcpLCAiOiIsIFN0cmluZyhlbGFwc2VkICUgNjApLnBhZFN0YXJ0KDIsICcwJyldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNCBtYi0xMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicHgtNCBweS0xLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzIwIGJhY2tkcm9wLWJsdXItbWQgdGV4dC1zbSBmb250LWJvbGQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goVGFnLCB7IGNsYXNzTmFtZTogInctMy41IGgtMy41IiB9KSwgIiAiLCBwcm9qZWN0cy5maW5kKHAgPT4gcC5pZCA9PT0gYWN0aXZlVGltZXIucHJvamVjdElkKT8ubmFtZV0gfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBhY3RpdmVUaW1lci5kZXNjLCBvbkNoYW5nZTogZSA9PiBzZXRBY3RpdmVUaW1lcih7IC4uLmFjdGl2ZVRpbWVyLCBkZXNjOiBlLnRhcmdldC52YWx1ZSB9KSwgcGxhY2Vob2xkZXI6ICJXaGF0IGFyZSB5b3Ugd29ya2luZyBvbiByaWdodCBub3c/IiwgY2xhc3NOYW1lOiAiYmctdHJhbnNwYXJlbnQgYm9yZGVyLWItMiBib3JkZXItd2hpdGUvMjAgZm9jdXM6Ym9yZGVyLXdoaXRlIG91dGxpbmUtbm9uZSB0ZXh0LWNlbnRlciB0ZXh0LWxnIHBsYWNlaG9sZGVyOnRleHQtd2hpdGUvNDAgdy1mdWxsIG1heC13LW1kIHBiLTIiIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogc3RvcFRpbWVyLCBjbGFzc05hbWU6ICJweC0xMiBweS01IGJnLXdoaXRlIHRleHQtYnJhbmQtNjAwIGZvbnQtYmxhY2sgcm91bmRlZC0zeGwgdGV4dC14bCBzaGFkb3ctMnhsIGhvdmVyOnNjYWxlLTEwNSBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgbXgtYXV0byIsIGNoaWxkcmVuOiBbX2pzeChTcXVhcmUsIHsgY2xhc3NOYW1lOiAidy02IGgtNiBmaWxsLWN1cnJlbnQiIH0pLCAiIEZpbmlzaCBTZXNzaW9uIl0gfSldIH0pKSB9KV0gfSksIGlzTWFuYWdpbmcgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcm91bmRlZC0zeGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBwLTggc2hhZG93LXNtIGFuaW1hdGUtaW4gc2xpZGUtaW4tZnJvbS10b3AtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTgiLCBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiAiUHJvamVjdCBDYXRlZ29yaWVzIiB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRJc01hbmFnaW5nKGZhbHNlKSwgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIiwgY2hpbGRyZW46IF9qc3goWCwge30pIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBtZDpncmlkLWNvbHMtMiBnYXAtOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJBZGQgTmV3IENhdGVnb3J5IiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogbmV3UHJvak5hbWUsIG9uQ2hhbmdlOiBlID0+IHNldE5ld1Byb2pOYW1lKGUudGFyZ2V0LnZhbHVlKSwgcGxhY2Vob2xkZXI6ICJlLmcuIERlc2lnbiBDb25zdWx0aW5nIiwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJIb3VybHkgUmF0ZSAoJCkiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBuZXdQcm9qUmF0ZSwgb25DaGFuZ2U6IGUgPT4gc2V0TmV3UHJvalJhdGUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCIgfSldIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBhZGRQcm9qZWN0LCBjbGFzc05hbWU6ICJoLVs1MnB4XSBtdC01IHB4LTYgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goUGx1cywgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBDcmVhdGUiXSB9KV0gfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0yIiwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1iLTQiLCBjaGlsZHJlbjogIkV4aXN0aW5nIENhdGVnb3JpZXMiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIm1heC1oLVszMDBweF0gb3ZlcmZsb3cteS1hdXRvIGN1c3RvbS1zY3JvbGxiYXIgcHItMiBzcGFjZS15LTIiLCBjaGlsZHJlbjogcHJvamVjdHMubWFwKHAgPT4gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBncm91cCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCByb3VuZGVkLWZ1bGwiLCBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IHAuY29sb3IgfSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IHAubmFtZSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gdGV4dC1ncmF5LTQwMCBmb250LWJvbGQgdXBwZXJjYXNlIiwgY2hpbGRyZW46IFsiJCIsIHAucmF0ZSwgIi9ociJdIH0pXSB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gZGVsZXRlUHJvamVjdChwLmlkKSwgY2xhc3NOYW1lOiAicC0yIHRleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC1yZWQtNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkiLCBjaGlsZHJlbjogX2pzeChUcmFzaDIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSldIH0sIHAuaWQpKSkgfSldIH0pXSB9KV0gfSkpLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHJvdW5kZWQtM3hsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgc2hhZG93LXNtIG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KEhpc3RvcnksIHsgY2xhc3NOYW1lOiAidy01IGgtNSB0ZXh0LWJyYW5kLTUwMCIgfSksICIgUmVjZW50IFNlc3Npb25zIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjc3YgPSBQYXBhLnVucGFyc2UobG9ncy5tYXAobCA9PiAoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZTogbmV3IERhdGUobC5zdGFydCkudG9Mb2NhbGVEYXRlU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0OiBwcm9qZWN0cy5maW5kKHAgPT4gcC5pZCA9PT0gbC5wcm9qZWN0SWQpPy5uYW1lIHx8ICdVbmtub3duJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmF0aW9uOiBmb3JtYXRITVMobC5kdXJhdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXJuaW5nczogYCQke2NhbGN1bGF0ZUVhcm5pbmdzKGwuZHVyYXRpb24sIHByb2plY3RzLmZpbmQocCA9PiBwLmlkID09PSBsLnByb2plY3RJZCk/LnJhdGUgfHwgMCkudG9GaXhlZCgyKX1gLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXM6IGwuZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9ICd0aW1lLWxvZ3MuY3N2JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5jbGljaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogInAtMiB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtYnJhbmQtNjAwIHRyYW5zaXRpb24tY29sb3JzIiwgdGl0bGU6ICJFeHBvcnQgQ1NWIiwgY2hpbGRyZW46IF9qc3goRG93bmxvYWQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gY29uZmlybSgiQ2xlYXIgYWxsIGxvZ3M/IikgJiYgc2V0TG9ncyhbXSksIGNsYXNzTmFtZTogInAtMiB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtcmVkLTUwMCB0cmFuc2l0aW9uLWNvbG9ycyIsIHRpdGxlOiAiQ2xlYXIgSGlzdG9yeSIsIGNoaWxkcmVuOiBfanN4KEVyYXNlciwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIm92ZXJmbG93LXgtYXV0byIsIGNoaWxkcmVuOiBsb2dzLmxlbmd0aCA9PT0gMCA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJweS0yMCB0ZXh0LWNlbnRlciB0ZXh0LWdyYXktNDAwIiwgY2hpbGRyZW46IFtfanN4KEFjdGl2aXR5LCB7IGNsYXNzTmFtZTogInctMTIgaC0xMiBteC1hdXRvIG1iLTQgb3BhY2l0eS0xMCIgfSksIF9qc3goInAiLCB7IGNoaWxkcmVuOiAiTm8gbG9nZ2VkIHNlc3Npb25zIHlldC4gU3RhcnQgYSB0aW1lciB0byBzZWUgeW91ciBoaXN0b3J5LiIgfSldIH0pKSA6IChfanN4cygidGFibGUiLCB7IGNsYXNzTmFtZTogInctZnVsbCB0ZXh0LWxlZnQgYm9yZGVyLWNvbGxhcHNlIiwgY2hpbGRyZW46IFtfanN4KCJ0aGVhZCIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS01MC81MCBkYXJrOmJnLWRhcmstODAwLzUwIGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBfanN4cygidHIiLCB7IGNoaWxkcmVuOiBbX2pzeCgidGgiLCB7IGNsYXNzTmFtZTogInAtNSB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiU2Vzc2lvbiAvIFByb2plY3QiIH0pLCBfanN4KCJ0aCIsIHsgY2xhc3NOYW1lOiAicC01IHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJEYXRlIiB9KSwgX2pzeCgidGgiLCB7IGNsYXNzTmFtZTogInAtNSB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiRHVyYXRpb24iIH0pLCBfanN4KCJ0aCIsIHsgY2xhc3NOYW1lOiAicC01IHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHRleHQtcmlnaHQiLCBjaGlsZHJlbjogIkVhcm5pbmdzIiB9KSwgX2pzeCgidGgiLCB7IGNsYXNzTmFtZTogInAtNSB3LTEwIiB9KV0gfSkgfSksIF9qc3goInRib2R5IiwgeyBjbGFzc05hbWU6ICJkaXZpZGUteSBkaXZpZGUtZ3JheS01MCBkYXJrOmRpdmlkZS1kYXJrLTgwMCIsIGNoaWxkcmVuOiBsb2dzLm1hcCgobG9nKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvaiA9IHByb2plY3RzLmZpbmQocCA9PiBwLmlkID09PSBsb2cucHJvamVjdElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlYXJuaW5ncyA9IGNhbGN1bGF0ZUVhcm5pbmdzKGxvZy5kdXJhdGlvbiwgcHJvaj8ucmF0ZSB8fCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3hzKCJ0ciIsIHsgY2xhc3NOYW1lOiAiZ3JvdXAgaG92ZXI6YmctZ3JheS01MC81MCBkYXJrOmhvdmVyOmJnLWRhcmstODAwLzMwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IFtfanN4KCJ0ZCIsIHsgY2xhc3NOYW1lOiAicC01IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMiBoLTIgcm91bmRlZC1mdWxsIGZsZXgtc2hyaW5rLTAiLCBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IHByb2o/LmNvbG9yIHx8ICcjY2NjJyB9IH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRleHQtc20iLCBjaGlsZHJlbjogbG9nLmRlc2NyaXB0aW9uIHx8ICdRdWljayBTZXNzaW9uJyB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIHRleHQtZ3JheS00MDAgZm9udC1tZWRpdW0iLCBjaGlsZHJlbjogcHJvaj8ubmFtZSB8fCAnRGVsZXRlZCBDYXRlZ29yeScgfSldIH0pXSB9KSB9KSwgX2pzeHMoInRkIiwgeyBjbGFzc05hbWU6ICJwLTUiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiBuZXcgRGF0ZShsb2cuc3RhcnQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIHRleHQtZ3JheS00MDAgZm9udC1ib2xkIHVwcGVyY2FzZSBtdC0wLjUiLCBjaGlsZHJlbjogbmV3IERhdGUobG9nLnN0YXJ0KS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KSB9KV0gfSksIF9qc3goInRkIiwgeyBjbGFzc05hbWU6ICJwLTUiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtbW9ubyBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAiLCBjaGlsZHJlbjogZm9ybWF0SE1TKGxvZy5kdXJhdGlvbikgfSkgfSksIF9qc3goInRkIiwgeyBjbGFzc05hbWU6ICJwLTUgdGV4dC1yaWdodCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtYmxhY2sgdGV4dC1lbWVyYWxkLTYwMCBkYXJrOnRleHQtZW1lcmFsZC00MDAiLCBjaGlsZHJlbjogWyIkIiwgZWFybmluZ3MudG9GaXhlZCgyKV0gfSkgfSksIF9qc3goInRkIiwgeyBjbGFzc05hbWU6ICJwLTUiLCBjaGlsZHJlbjogX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRMb2dzKGxvZ3MuZmlsdGVyKGwgPT4gbC5pZCAhPT0gbG9nLmlkKSksIGNsYXNzTmFtZTogInRleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC1yZWQtNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkiLCBjaGlsZHJlbjogX2pzeChUcmFzaDIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSkgfSldIH0sIGxvZy5pZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfSldIH0pKSB9KSwgbG9ncy5sZW5ndGggPiAwICYmIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgYmctZ3JheS01MC81MCBkYXJrOmJnLWRhcmstODAwLzIwIGJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJMaWZldGltZSBUb3RhbHMiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXJpZ2h0IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiAiSG91cnMiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWxnIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUiLCBjaGlsZHJlbjogWyhsb2dzLnJlZHVjZSgoYWNjLCBsKSA9PiBhY2MgKyBsLmR1cmF0aW9uLCAwKSAvIDM2MDApLnRvRml4ZWQoMSksICJoIl0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXJpZ2h0IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWVtZXJhbGQtNTAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiAiUmV2ZW51ZSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtbGcgZm9udC1ibGFjayB0ZXh0LWVtZXJhbGQtNjAwIGRhcms6dGV4dC1lbWVyYWxkLTQwMCIsIGNoaWxkcmVuOiBbIiQiLCBsb2dzLnJlZHVjZSgoYWNjLCBsKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0cy5maW5kKHByb2ogPT4gcHJvai5pZCA9PT0gbC5wcm9qZWN0SWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICsgY2FsY3VsYXRlRWFybmluZ3MobC5kdXJhdGlvbiwgcD8ucmF0ZSB8fCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKS50b0ZpeGVkKDIpXSB9KV0gfSldIH0pXSB9KSldIH0pXSB9KSB9KSk7Cn07Cg==","@/components/Tools/AiTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgV2FuZDIsIFNoYXJlMiwgQ29weSwgQ2hlY2ssIExvYWRlcjIsIEZlYXRoZXIsIFNlYXJjaCwgTGlnaHRidWxiLCBGaWxlVGV4dCwgVXBsb2FkLCBTZW5kLCBCb3QsIEJyaWVmY2FzZSwgQm9va09wZW4sIFVzZXJQZW4sIExpbmtlZGluLCBNYWlsLCBTcGFya2xlcywgQXJyb3dSaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCB7IGdlbmVyYXRlVGV4dCB9IGZyb20gJ0Avc2VydmljZXMvZ2VtaW5pU2VydmljZSc7CmltcG9ydCBSZWFjdE1hcmtkb3duIGZyb20gJ3JlYWN0LW1hcmtkb3duJzsKaW1wb3J0ICogYXMgcGRmanNMaWIgZnJvbSAncGRmanMtZGlzdCc7Ci8vIFNldCB3b3JrZXIgZm9yIFBERi5qcwpwZGZqc0xpYi5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IGBodHRwczovL2Fpc3R1ZGlvY2RuLmNvbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanNgOwovLyAtLS0gRnJlZWxhbmNlciBCaW8gV3JpdGVyIC0tLQpleHBvcnQgY29uc3QgQmlvV3JpdGVyID0gKCkgPT4gewogICAgY29uc3QgW2pvYiwgc2V0Sm9iXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtza2lsbHMsIHNldFNraWxsc10gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbdG9uZSwgc2V0VG9uZV0gPSB1c2VTdGF0ZSgnRXhwZXJ0Jyk7CiAgICBjb25zdCBbcmVzdWx0cywgc2V0UmVzdWx0c10gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWpvYi50cmltKCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7CiAgICAgICAgc2V0UmVzdWx0cyhudWxsKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgV3JpdGUgMyBkaXN0aW5jdCBmcmVlbGFuY2VyIGJpb3MgZm9yIGEgIiR7am9ifSIgd2hvIHNwZWNpYWxpemVzIGluICIke3NraWxsc30iLgogICAgICBUb25lOiAke3RvbmV9LgogICAgICAKICAgICAgUmV0dXJuIHN0cmljdGx5IGEgSlNPTiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAgICAgIC0gImxpbmtlZGluIjogQSBwcm9mZXNzaW9uYWwsIGVuZ2FnaW5nIGJpbyBzdWl0YWJsZSBmb3IgTGlua2VkSW4gKGFwcHJveCAzLTQgc2VudGVuY2VzKS4KICAgICAgLSAicG9ydGZvbGlvIjogQSBjcmVhdGl2ZSwgaW1wYWN0LWZvY3VzZWQgYmlvIGZvciBhIHBvcnRmb2xpbyB3ZWJzaXRlIChhcHByb3ggMi0zIHNlbnRlbmNlcykuCiAgICAgIC0gImVtYWlsIjogQSBzaG9ydCwgcHVuY2h5IG9uZS1saW5lciBzdWl0YWJsZSBmb3IgYW4gZW1haWwgc2lnbmF0dXJlLgogICAgICAKICAgICAgRG8gbm90IGluY2x1ZGUgbWFya2Rvd24gZm9ybWF0dGluZyBsaWtlIFxgXGBcYGpzb24uYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgY2xlYW5Kc29uID0gcmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKTsKICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjbGVhbkpzb24pOwogICAgICAgICAgICBzZXRSZXN1bHRzKHBhcnNlZCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAgc2V0UmVzdWx0cyh7CiAgICAgICAgICAgICAgICBsaW5rZWRpbjogIkNvdWxkIG5vdCBnZW5lcmF0ZSBzcGVjaWZpY2FsbHkgZm9ybWF0dGVkIGJpb3MuIFBsZWFzZSB0cnkgYWdhaW4uIiwKICAgICAgICAgICAgICAgIHBvcnRmb2xpbzogIiIsCiAgICAgICAgICAgICAgICBlbWFpbDogIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBjb3B5VG9DbGlwYm9hcmQgPSAodGV4dCwga2V5KSA9PiB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7CiAgICAgICAgc2V0Q29waWVkKGtleSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQobnVsbCksIDIwMDApOwogICAgfTsKICAgIGNvbnN0IFRPTkVTID0gWydFeHBlcnQnLCAnRnJpZW5kbHknLCAnUXVpcmt5JywgJ01pbmltYWxpc3QnLCAnQm9sZCddOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJGcmVlbGFuY2VyIEJpbyBXcml0ZXIiLCBkZXNjcmlwdGlvbjogIkdlbmVyYXRlIHRoZSBwZXJmZWN0IGJpbyBmb3IgeW91ciBMaW5rZWRJbiwgUG9ydGZvbGlvLCBhbmQgRW1haWwgc2lnbmF0dXJlIGluc3RhbnRseS4iLCBpY29uOiBVc2VyUGVuLCBjYXRlZ29yeTogIkFJIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy02eGwgbXgtYXV0byBncmlkIGxnOmdyaWQtY29scy01IGdhcC0xMiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibGc6Y29sLXNwYW4tMiBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTIgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJKb2IgVGl0bGUiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogam9iLCBvbkNoYW5nZTogKGUpID0+IHNldEpvYihlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiZS5nLiBVWCBEZXNpZ25lciwgRnVsbCBTdGFjayBEZXYiLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctaW5uZXIiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIlNwZWNpYWx0aWVzIC8gS2V5IFNraWxscyIgfSksIF9qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogc2tpbGxzLCBvbkNoYW5nZTogKGUpID0+IHNldFNraWxscyhlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiZS5nLiBTYWFTLCBGaW50ZWNoLCBSZWFjdCwgQ2xlYW4gQWVzdGhldGljcy4uLiIsIGNsYXNzTmFtZTogInctZnVsbCBoLTQwIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgcmVzaXplLW5vbmUgc2hhZG93LWlubmVyIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTMgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJCcmFuZCBWb2ljZSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LXdyYXAgZ2FwLTIiLCBjaGlsZHJlbjogVE9ORVMubWFwKCh0KSA9PiAoX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRUb25lKHQpLCBjbGFzc05hbWU6IGBweC00IHB5LTIgcm91bmRlZC1sZyB0ZXh0LXhzIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhbnNpdGlvbi1hbGwgYm9yZGVyICR7dG9uZSA9PT0gdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIGJvcmRlci1icmFuZC02MDAgc2hhZG93LW1kJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXdoaXRlIGRhcms6YmctZGFyay04MDAgdGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS00MDAgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGhvdmVyOmJvcmRlci1icmFuZC0zMDAnfWAsIGNoaWxkcmVuOiB0IH0sIHQpKSkgfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUdlbmVyYXRlLCBkaXNhYmxlZDogaXNMb2FkaW5nIHx8ICFqb2IudHJpbSgpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1icmFuZC02MDAgaG92ZXI6YmctYnJhbmQtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIHNoYWRvdy1icmFuZC02MDAvMjAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgaG92ZXI6LXRyYW5zbGF0ZS15LTEiLCBjaGlsZHJlbjogaXNMb2FkaW5nID8gKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIgYW5pbWF0ZS1zcGluIiB9KSwgIiBXcml0aW5nLi4uIl0gfSkpIDogKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goV2FuZDIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIiB9KSwgIiBHZW5lcmF0ZSBCaW9zIl0gfSkpIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibGc6Y29sLXNwYW4tMyBzcGFjZS15LTYiLCBjaGlsZHJlbjogWyFyZXN1bHRzICYmICFpc0xvYWRpbmcgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImgtZnVsbCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWdyYXktNDAwIGRhcms6dGV4dC1ncmF5LTYwMCBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTJ4bCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwLzUwIHAtMTIgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goVXNlclBlbiwgeyBjbGFzc05hbWU6ICJ3LTE2IGgtMTYgbWItNCBvcGFjaXR5LTEwIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46ICJSZWFkeSB0byB3cml0ZSB5b3VyIHN0b3J5LiIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20gbXQtMSIsIGNoaWxkcmVuOiAiRW50ZXIgeW91ciBkZXRhaWxzIHRvIGdlbmVyYXRlIHByb2Zlc3Npb25hbCBiaW9zLiIgfSldIH0pKSwgaXNMb2FkaW5nICYmIChfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiIsIGNoaWxkcmVuOiBbMSwgMiwgM10ubWFwKChpKSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC02IGgtMzIgYW5pbWF0ZS1wdWxzZSIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtNCBtYi00IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctOCBoLTggcm91bmRlZC1mdWxsIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImgtNiB3LTMyIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC00IHctZnVsbCBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImgtNCB3LTIvMyBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQiIH0pXSB9KV0gfSwgaSkpKSB9KSksIHJlc3VsdHMgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiBhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tNCBkdXJhdGlvbi01MDAiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAvNTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHAtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYmxhY2sgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC1bIzAwNzdiNV0iLCBjaGlsZHJlbjogW19qc3goTGlua2VkaW4sIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgTGlua2VkSW4gU3VtbWFyeSJdIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IGNvcHlUb0NsaXBib2FyZChyZXN1bHRzLmxpbmtlZGluLCAnbGlua2VkaW4nKSwgY2xhc3NOYW1lOiAicC0yIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1bIzAwNzdiNV0gdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogY29waWVkID09PSAnbGlua2VkaW4nID8gX2pzeChDaGVjaywgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtZ3JlZW4tNTAwIiB9KSA6IF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwIHRleHQtc20gbGVhZGluZy1yZWxheGVkIHdoaXRlc3BhY2UtcHJlLXdyYXAiLCBjaGlsZHJlbjogcmVzdWx0cy5saW5rZWRpbiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAvNTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHAtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYmxhY2sgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC1wdXJwbGUtNjAwIGRhcms6dGV4dC1wdXJwbGUtNDAwIiwgY2hpbGRyZW46IFtfanN4KEJyaWVmY2FzZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBQb3J0Zm9saW8gSW50cm8iXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBjb3B5VG9DbGlwYm9hcmQocmVzdWx0cy5wb3J0Zm9saW8sICdwb3J0Zm9saW8nKSwgY2xhc3NOYW1lOiAicC0yIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1wdXJwbGUtNjAwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IGNvcGllZCA9PT0gJ3BvcnRmb2xpbycgPyBfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1ncmVlbi01MDAiIH0pIDogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgd2hpdGVzcGFjZS1wcmUtd3JhcCIsIGNoaWxkcmVuOiByZXN1bHRzLnBvcnRmb2xpbyB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAvNTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHAtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYmxhY2sgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC1lbWVyYWxkLTYwMCBkYXJrOnRleHQtZW1lcmFsZC00MDAiLCBjaGlsZHJlbjogW19qc3goTWFpbCwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBFbWFpbCBTaWduYXR1cmUiXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBjb3B5VG9DbGlwYm9hcmQocmVzdWx0cy5lbWFpbCwgJ2VtYWlsJyksIGNsYXNzTmFtZTogInAtMiB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZW1lcmFsZC02MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogY29waWVkID09PSAnZW1haWwnID8gX2pzeChDaGVjaywgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtZ3JlZW4tNTAwIiB9KSA6IF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC1ncmF5LTEwMCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGl0YWxpYyBib3JkZXItbC00IGJvcmRlci1lbWVyYWxkLTUwMCBiZy1lbWVyYWxkLTUwLzEwIiwgY2hpbGRyZW46IFsiXCIiLCByZXN1bHRzLmVtYWlsLCAiXCIiXSB9KV0gfSldIH0pKV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIEFJIFBERiBBc3Npc3RhbnQgVG9vbCAtLS0KZXhwb3J0IGNvbnN0IEFpUGRmQXNzaXN0YW50ID0gKCkgPT4gewogICAgY29uc3QgW2ZpbGUsIHNldEZpbGVdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbcGRmVGV4dCwgc2V0UGRmVGV4dF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlKFtdKTsKICAgIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2lzUHJvY2Vzc2luZywgc2V0SXNQcm9jZXNzaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtpc1R5cGluZywgc2V0SXNUeXBpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgY2hhdEVuZFJlZiA9IHVzZVJlZihudWxsKTsKICAgIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZSkgPT4gewogICAgICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlc1swXSkgewogICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGUudGFyZ2V0LmZpbGVzWzBdOwogICAgICAgICAgICBzZXRGaWxlKHNlbGVjdGVkKTsKICAgICAgICAgICAgc2V0SXNQcm9jZXNzaW5nKHRydWUpOwogICAgICAgICAgICBzZXRNZXNzYWdlcyhbXSk7CiAgICAgICAgICAgIHNldFBkZlRleHQoJycpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBzZWxlY3RlZC5hcnJheUJ1ZmZlcigpOwogICAgICAgICAgICAgICAgY29uc3QgcGRmID0gYXdhaXQgcGRmanNMaWIuZ2V0RG9jdW1lbnQoeyBkYXRhOiBhcnJheUJ1ZmZlciB9KS5wcm9taXNlOwogICAgICAgICAgICAgICAgbGV0IGZ1bGxUZXh0ID0gJyc7CiAgICAgICAgICAgICAgICBjb25zdCBtYXhQYWdlcyA9IE1hdGgubWluKHBkZi5udW1QYWdlcywgMTApOwogICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbWF4UGFnZXM7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBwZGYuZ2V0UGFnZShpKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGF3YWl0IHBhZ2UuZ2V0VGV4dENvbnRlbnQoKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlVGV4dCA9IHRleHRDb250ZW50Lml0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5zdHIpLmpvaW4oJyAnKTsKICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dCArPSBwYWdlVGV4dCArICdcbic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRQZGZUZXh0KGZ1bGxUZXh0KTsKICAgICAgICAgICAgICAgIHNldE1lc3NhZ2VzKFt7IHJvbGU6ICdtb2RlbCcsIGNvbnRlbnQ6IGBJJ3ZlIGFuYWx5emVkICoqJHtzZWxlY3RlZC5uYW1lfSoqICgke21heFBhZ2VzfSBwYWdlcykuIEFzayBtZSBhbnl0aGluZyBhYm91dCBpdHMgY29udGVudCFgIH1dKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7CiAgICAgICAgICAgICAgICBzZXRNZXNzYWdlcyhbeyByb2xlOiAnbW9kZWwnLCBjb250ZW50OiAiRXJyb3IgcmVhZGluZyBQREYuIFBsZWFzZSBlbnN1cmUgaXQgaXMgYSB0ZXh0LWJhc2VkIFBERiBhbmQgbm90IGFuIGltYWdlIHNjYW4uIiB9XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgICAgICBzZXRJc1Byb2Nlc3NpbmcoZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGhhbmRsZVNlbmQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFxdWVyeS50cmltKCkgfHwgIXBkZlRleHQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB1c2VyTXNnID0gcXVlcnk7CiAgICAgICAgc2V0TWVzc2FnZXMocHJldiA9PiBbLi4ucHJldiwgeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6IHVzZXJNc2cgfV0pOwogICAgICAgIHNldFF1ZXJ5KCcnKTsKICAgICAgICBzZXRJc1R5cGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgQ29udGV4dCBmcm9tIFBERjpcbiR7cGRmVGV4dC5zbGljZSgwLCAzMDAwMCl9Li4uXG5cblVzZXIgUXVlc3Rpb246ICR7dXNlck1zZ31gOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdlbmVyYXRlVGV4dChwcm9tcHQpOwogICAgICAgICAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCB7IHJvbGU6ICdtb2RlbCcsIGNvbnRlbnQ6IHJlc3BvbnNlIH1dKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycikgewogICAgICAgICAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCB7IHJvbGU6ICdtb2RlbCcsIGNvbnRlbnQ6ICJJIGVuY291bnRlcmVkIGFuIGVycm9yIHByb2Nlc3NpbmcgeW91ciBxdWVzdGlvbi4gUGxlYXNlIHRyeSBhIHNpbXBsZXIgcXVlcnkuIiB9XSk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc1R5cGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7IGNoYXRFbmRSZWYuY3VycmVudD8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7IH0sIFttZXNzYWdlc10pOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJBSSBQREYgQXNzaXN0YW50IiwgZGVzY3JpcHRpb246ICJDaGF0IHdpdGggeW91ciBkb2N1bWVudHMuIFN1bW1hcml6ZSwgYW5hbHl6ZSwgb3IgZXh0cmFjdCBrZXkgZGF0YSBpbnN0YW50bHkuIiwgaWNvbjogRmlsZVRleHQsIGNhdGVnb3J5OiAiQUkiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBsZzpncmlkLWNvbHMtMyBnYXAtNiBwLTggaC1bNjUwcHhdIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IGZsZXggZmxleC1jb2wgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtYi02IiwgY2hpbGRyZW46IFtfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1iLTQiLCBjaGlsZHJlbjogIkRvY3VtZW50IFNvdXJjZSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC02IHRleHQtY2VudGVyIGhvdmVyOmJnLWdyYXktNTAgZGFyazpob3ZlcjpiZy1kYXJrLTgwMCB0cmFuc2l0aW9uLWNvbG9ycyByZWxhdGl2ZSBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImZpbGUiLCBhY2NlcHQ6ICIucGRmIiwgb25DaGFuZ2U6IGhhbmRsZUZpbGVDaGFuZ2UsIGNsYXNzTmFtZTogImFic29sdXRlIGluc2V0LTAgb3BhY2l0eS0wIGN1cnNvci1wb2ludGVyIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIgYmctcmVkLTUwIGRhcms6YmctcmVkLTkwMC8yMCB0ZXh0LXJlZC01MDAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG14LWF1dG8gbWItMyBzaGFkb3ctc20iLCBjaGlsZHJlbjogX2pzeChVcGxvYWQsIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRydW5jYXRlIiwgY2hpbGRyZW46IGZpbGUgPyBmaWxlLm5hbWUgOiAnVXBsb2FkIFBERicgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQteHMgdGV4dC1ncmF5LTQwMCBtdC0xIiwgY2hpbGRyZW46IGZpbGUgPyAnQ2xpY2sgdG8gY2hhbmdlJyA6ICdNYXggMTBNQicgfSldIH0pXSB9KSwgZmlsZSAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBbX2pzeCgiaDQiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItMyIsIGNoaWxkcmVuOiAiUXVpY2sgQWN0aW9ucyIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0yIiwgY2hpbGRyZW46IFsnU3VtbWFyaXplIGRvY3VtZW50JywgJ0xpc3Qga2V5IHRha2Vhd2F5cycsICdFeHRyYWN0IGRlYWRsaW5lcyddLm1hcChxID0+IChfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7IHNldFF1ZXJ5KHEpOyBzZXRUaW1lb3V0KGhhbmRsZVNlbmQsIDApOyB9LCBjbGFzc05hbWU6ICJ3LWZ1bGwgdGV4dC1sZWZ0IHAtMyByb3VuZGVkLWxnIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBob3ZlcjpiZy1icmFuZC01MCBkYXJrOmhvdmVyOmJnLWJyYW5kLTkwMC8yMCB0ZXh0LXNtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBncm91cCIsIGNoaWxkcmVuOiBbcSwgIiAiLCBfanN4KEFycm93UmlnaHQsIHsgY2xhc3NOYW1lOiAidy0zIGgtMyBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1hbGwgLXRyYW5zbGF0ZS14LTIgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCIgfSldIH0sIHEpKSkgfSldIH0pKV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImxnOmNvbC1zcGFuLTIgYmctZ3JheS01MCBkYXJrOmJnLWJsYWNrIHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LWlubmVyIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHAtNiBzcGFjZS15LTQgY3VzdG9tLXNjcm9sbGJhciIsIGNoaWxkcmVuOiBbbWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFpc1Byb2Nlc3NpbmcgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImgtZnVsbCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWdyYXktMzAwIiwgY2hpbGRyZW46IFtfanN4KEJvdCwgeyBjbGFzc05hbWU6ICJ3LTE2IGgtMTYgbWItNCBvcGFjaXR5LTEwIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAiZm9udC1tZWRpdW0iLCBjaGlsZHJlbjogIlVwbG9hZCBhIFBERiB0byBzdGFydCBhIGNvbnZlcnNhdGlvbiIgfSldIH0pKSwgaXNQcm9jZXNzaW5nICYmIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWNlbnRlciBweS0xMCIsIGNoaWxkcmVuOiBfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy04IGgtOCBhbmltYXRlLXNwaW4gdGV4dC1icmFuZC01MDAiIH0pIH0pLCBtZXNzYWdlcy5tYXAoKG1zZywgaWR4KSA9PiAoX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6IGBmbGV4ICR7bXNnLnJvbGUgPT09ICd1c2VyJyA/ICdqdXN0aWZ5LWVuZCcgOiAnanVzdGlmeS1zdGFydCd9YCwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiBgbWF4LXctWzg1JV0gcC00IHJvdW5kZWQtMnhsIHRleHQtc20gbGVhZGluZy1yZWxheGVkIHNoYWRvdy1zbSAke21zZy5yb2xlID09PSAndXNlcicgPyAnYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC1ici1ub25lJyA6ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAgcm91bmRlZC1ibC1ub25lJ31gLCBjaGlsZHJlbjogX2pzeChSZWFjdE1hcmtkb3duLCB7IGNsYXNzTmFtZTogInByb3NlIHByb3NlLXNtIGRhcms6cHJvc2UtaW52ZXJ0IiwgY2hpbGRyZW46IG1zZy5jb250ZW50IH0pIH0pIH0sIGlkeCkpKSwgaXNUeXBpbmcgJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LXN0YXJ0IiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBwLTQgcm91bmRlZC0yeGwgcm91bmRlZC1ibC1ub25lIHNoYWRvdy1zbSBmbGV4IGdhcC0xIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ3LTEuNSBoLTEuNSBiZy1icmFuZC01MDAgcm91bmRlZC1mdWxsIGFuaW1hdGUtYm91bmNlIiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidy0xLjUgaC0xLjUgYmctYnJhbmQtNTAwIHJvdW5kZWQtZnVsbCBhbmltYXRlLWJvdW5jZSBkZWxheS03NSIgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInctMS41IGgtMS41IGJnLWJyYW5kLTUwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1ib3VuY2UgZGVsYXktMTUwIiB9KV0gfSkgfSkpLCBfanN4KCJkaXYiLCB7IHJlZjogY2hhdEVuZFJlZiB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC00IGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInJlbGF0aXZlIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogcXVlcnksIG9uQ2hhbmdlOiAoZSkgPT4gc2V0UXVlcnkoZS50YXJnZXQudmFsdWUpLCBvbktleURvd246IChlKSA9PiBlLmtleSA9PT0gJ0VudGVyJyAmJiBoYW5kbGVTZW5kKCksIHBsYWNlaG9sZGVyOiBmaWxlID8gIkFzayBhIHF1ZXN0aW9uIGFib3V0IHRoZSBQREYuLi4iIDogIlBsZWFzZSB1cGxvYWQgYSBkb2N1bWVudC4uLiIsIGRpc2FibGVkOiAhZmlsZSB8fCBpc1Byb2Nlc3NpbmcsIGNsYXNzTmFtZTogInctZnVsbCBwbC01IHByLTE0IHB5LTQgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvbnQtbWVkaXVtIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctc20gZGlzYWJsZWQ6b3BhY2l0eS01MCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlU2VuZCwgZGlzYWJsZWQ6ICFmaWxlIHx8ICFxdWVyeS50cmltKCkgfHwgaXNQcm9jZXNzaW5nLCBjbGFzc05hbWU6ICJhYnNvbHV0ZSByaWdodC0yIHRvcC0yIGJvdHRvbS0yIHB4LTQgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC14bCBob3ZlcjpiZy1icmFuZC03MDAgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOm9wYWNpdHktMCIsIGNoaWxkcmVuOiBfanN4KFNlbmQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSldIH0pIH0pXSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gR3JhbW1hciBQb2xpc2hlciBUb29sIC0tLQpleHBvcnQgY29uc3QgR3JhbW1hclBvbGlzaGVyID0gKCkgPT4gewogICAgY29uc3QgW2lucHV0LCBzZXRJbnB1dF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbb3V0cHV0LCBzZXRPdXRwdXRdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3RvbmUsIHNldFRvbmVdID0gdXNlU3RhdGUoJ1Byb2Zlc3Npb25hbCcpOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGhhbmRsZVBvbGlzaCA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWlucHV0LnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgRml4IGdyYW1tYXIsIHNwZWxsaW5nLCBhbmQgaW1wcm92ZSB0aGUgc3R5bGUgb2YgdGhlIGZvbGxvd2luZyB0ZXh0LiBUb25lOiAke3RvbmV9LiBLZWVwIHRoZSBtZWFuaW5nIGlkZW50aWNhbCwgYnV0IG1ha2UgaXQgZmxvdyBwZXJmZWN0bHkuXG5cblRleHQ6ICIke2lucHV0fSJgOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgc2V0T3V0cHV0KHJlc3VsdCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkdyYW1tYXIgJiBUb25lIFBvbGlzaGVyIiwgZGVzY3JpcHRpb246ICJFbGV2YXRlIHlvdXIgd3JpdGluZyBpbnN0YW50bHkuIEZpeCBlcnJvcnMgYW5kIGFkanVzdCB0b25lIGZvciBhbnkgYXVkaWVuY2UuIiwgaWNvbjogRmVhdGhlciwgY2F0ZWdvcnk6ICJBSSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggZ3JpZCBsZzpncmlkLWNvbHMtMiBnYXAtOCBoLVs2NTBweF0iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBweC0xIiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJPcmlnaW5hbCBUZXh0IiB9KSwgX2pzeHMoInNlbGVjdCIsIHsgdmFsdWU6IHRvbmUsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VG9uZShlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy10aWdodGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLWxnIGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcHktMS41IHBsLTIgcHItNiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46ICJQcm9mZXNzaW9uYWwiIH0pLCBfanN4KCJvcHRpb24iLCB7IGNoaWxkcmVuOiAiQ2FzdWFsIiB9KSwgX2pzeCgib3B0aW9uIiwgeyBjaGlsZHJlbjogIkFjYWRlbWljIiB9KSwgX2pzeCgib3B0aW9uIiwgeyBjaGlsZHJlbjogIkJvbGQiIH0pLCBfanN4KCJvcHRpb24iLCB7IGNoaWxkcmVuOiAiRnJpZW5kbHkiIH0pXSB9KV0gfSksIF9qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogaW5wdXQsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5wdXQoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJmbGV4LTEgcC02IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkIHJlc2l6ZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctaW5uZXIiLCBwbGFjZWhvbGRlcjogIlBhc3RlIHlvdXIgcm91Z2ggZHJhZnQgaGVyZS4uLiIgfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZVBvbGlzaCwgZGlzYWJsZWQ6IGlzTG9hZGluZyB8fCAhaW5wdXQsIGNsYXNzTmFtZTogInB5LTQgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC14bCBmb250LWJvbGQgc2hhZG93LWxnIGhvdmVyOmJnLWJyYW5kLTcwMCB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBhY3RpdmU6c2NhbGUtWzAuOTldIiwgY2hpbGRyZW46IFtpc0xvYWRpbmcgPyBfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBhbmltYXRlLXNwaW4iIH0pIDogX2pzeChXYW5kMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiBQb2xpc2ggTXkgV3JpdGluZyJdIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB4LTEiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIlBvbGlzaGVkIFJlc3VsdCIgfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KG91dHB1dCksIGRpc2FibGVkOiAhb3V0cHV0LCBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWJyYW5kLTYwMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBob3Zlcjp1bmRlcmxpbmUiLCBjaGlsZHJlbjogW19qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIiB9KSwgIiBDb3B5IFJlc3VsdCJdIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgcC02IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBvdmVyZmxvdy1hdXRvIHdoaXRlc3BhY2UtcHJlLXdyYXAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAgdGV4dC1iYXNlIGxlYWRpbmctcmVsYXhlZCBzaGFkb3ctc20iLCBjaGlsZHJlbjogb3V0cHV0IHx8IF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS00MDAgaXRhbGljIiwgY2hpbGRyZW46ICJQb2xpc2hlZCB0ZXh0IHdpbGwgYXBwZWFyIGhlcmUuLi4iIH0pIH0pXSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gU29jaWFsIENhcHRpb24gR2VuZXJhdG9yIC0tLQpleHBvcnQgY29uc3QgU29jaWFsQ2FwdGlvbkdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFtkZXNjcmlwdGlvbiwgc2V0RGVzY3JpcHRpb25dID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3BsYXRmb3JtLCBzZXRQbGF0Zm9ybV0gPSB1c2VTdGF0ZSgnSW5zdGFncmFtJyk7CiAgICBjb25zdCBbY2FwdGlvbnMsIHNldENhcHRpb25zXSA9IHVzZVN0YXRlKFtdKTsKICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgR2VuZXJhdGUgNSBlbmdhZ2luZyBzb2NpYWwgbWVkaWEgY2FwdGlvbnMgZm9yICR7cGxhdGZvcm19IGJhc2VkIG9uOiAiJHtkZXNjcmlwdGlvbn0iLiBJbmNsdWRlIHJlbGV2YW50IGVtb2ppcyBhbmQgaGFzaHRhZ3MuIFJldHVybiBzdHJpY3RseSBhIEpTT04gYXJyYXkgb2Ygc3RyaW5ncy5gOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdlbmVyYXRlVGV4dChwcm9tcHQpOwogICAgICAgICAgICBjb25zdCBjbGVhbkpzb24gPSByZXNwb25zZS5yZXBsYWNlKC9gYGBqc29ufGBgYC9nLCAnJykudHJpbSgpOwogICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNsZWFuSnNvbik7CiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZCkpCiAgICAgICAgICAgICAgICBzZXRDYXB0aW9ucyhwYXJzZWQpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJTb2NpYWwgQ2FwdGlvbiBHZW5lcmF0b3IiLCBkZXNjcmlwdGlvbjogIkdlbmVyYXRlIGhpZ2gtZW5nYWdlbWVudCBjYXB0aW9ucyBmb3IgSW5zdGFncmFtLCBUaWtUb2ssIGFuZCBMaW5rZWRJbi4iLCBpY29uOiBTaGFyZTIsIGNhdGVnb3J5OiAiQUkiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTR4bCBteC1hdXRvIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJXaGF0J3MgeW91ciBwb3N0IGFib3V0PyIgfSksIF9qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogZGVzY3JpcHRpb24sIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGVzY3JpcHRpb24oZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC0zMiBwLTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXBpbmstNTAwIHNoYWRvdy1pbm5lciB0ZXh0LWJhc2UiLCBwbGFjZWhvbGRlcjogIkRlc2NyaWJlIHlvdXIgaW1hZ2Ugb3IgdmlkZW8uLi4iIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygic2VsZWN0IiwgeyB2YWx1ZTogcGxhdGZvcm0sIG9uQ2hhbmdlOiAoZSkgPT4gc2V0UGxhdGZvcm0oZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJwLTQgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgZm9udC1ib2xkIHRleHQtc20gc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4KCJvcHRpb24iLCB7IGNoaWxkcmVuOiAiSW5zdGFncmFtIiB9KSwgX2pzeCgib3B0aW9uIiwgeyBjaGlsZHJlbjogIlRpa1RvayIgfSksIF9qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46ICJMaW5rZWRJbiIgfSksIF9qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46ICJUd2l0dGVyIC8gWCIgfSldIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBoYW5kbGVHZW5lcmF0ZSwgZGlzYWJsZWQ6IGlzTG9hZGluZyB8fCAhZGVzY3JpcHRpb24sIGNsYXNzTmFtZTogImZsZXgtMSBweS00IGJnLXBpbmstNjAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIGhvdmVyOmJnLXBpbmstNzAwIGFjdGl2ZTpzY2FsZS1bMC45OF0gdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW2lzTG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IGFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KFNwYXJrbGVzLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCAiIEdlbmVyYXRlIDUgSWRlYXMiXSB9KV0gfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ2FwLTQiLCBjaGlsZHJlbjogY2FwdGlvbnMubWFwKChjYXAsIGkpID0+IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHAtNiByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHJlbGF0aXZlIGdyb3VwIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLWFsbCBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwIHByLTEwIHdoaXRlc3BhY2UtcHJlLXdyYXAgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQiLCBjaGlsZHJlbjogY2FwIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNhcCksIGNsYXNzTmFtZTogImFic29sdXRlIHRvcC02IHJpZ2h0LTYgcC0yIHRleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC1waW5rLTUwMCB0cmFuc2l0aW9uLWNvbG9ycyBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAiLCBjaGlsZHJlbjogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9LCBpKSkpIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBLZXl3b3JkIFJlc2VhcmNoZXIgLS0tCmV4cG9ydCBjb25zdCBLZXl3b3JkUmVzZWFyY2hlciA9ICgpID0+IHsKICAgIGNvbnN0IFtzZWVkLCBzZXRTZWVkXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtrZXl3b3Jkcywgc2V0S2V5d29yZHNdID0gdXNlU3RhdGUoW10pOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGhhbmRsZVNlYXJjaCA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIXNlZWQudHJpbSgpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBBY3QgYXMgYW4gU0VPIGV4cGVydC4gR2VuZXJhdGUgMTAgcmVsYXRlZCBrZXl3b3JkcyBmb3IgIiR7c2VlZH0iLiBSZXR1cm4gc3RyaWN0bHkgYSBKU09OIGFycmF5IG9mIG9iamVjdHM6IHsga2V5d29yZCwgdm9sdW1lLCBkaWZmaWN1bHR5IH0uYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgY2xlYW5Kc29uID0gcmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKTsKICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjbGVhbkpzb24pOwogICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWQpKQogICAgICAgICAgICAgICAgc2V0S2V5d29yZHMocGFyc2VkKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiS2V5d29yZCBJbnNpZ2h0IiwgZGVzY3JpcHRpb246ICJEaXNjb3ZlciBoaWdoLXBvdGVudGlhbCBrZXl3b3JkcyBhbmQgdG9waWNzIGZvciB5b3VyIGNvbnRlbnQgc3RyYXRlZ3kuIiwgaWNvbjogU2VhcmNoLCBjYXRlZ29yeTogIkFJIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy00eGwgbXgtYXV0byIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtNCBtYi0xMCIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHNlZWQsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0U2VlZChlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiVG9waWMgKGUuZy4gJ0NvZmZlZSBCcmV3aW5nJykuLi4iLCBjbGFzc05hbWU6ICJmbGV4LTEgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvbnQtYm9sZCB0ZXh0LWxnIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWFtYmVyLTUwMCBzaGFkb3ctaW5uZXIiIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZVNlYXJjaCwgZGlzYWJsZWQ6IGlzTG9hZGluZyB8fCAhc2VlZCwgY2xhc3NOYW1lOiAicHgtMTAgYmctYW1iZXItNTAwIHRleHQtd2hpdGUgZm9udC1ibGFjayByb3VuZGVkLXhsIGhvdmVyOmJnLWFtYmVyLTYwMCBzaGFkb3ctbGcgc2hhZG93LWFtYmVyLTUwMC8yMCBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogIlJlc2VhcmNoIiB9KV0gfSksIGtleXdvcmRzLmxlbmd0aCA+IDAgJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20iLCBjaGlsZHJlbjogX2pzeHMoInRhYmxlIiwgeyBjbGFzc05hbWU6ICJ3LWZ1bGwgdGV4dC1sZWZ0IiwgY2hpbGRyZW46IFtfanN4KCJ0aGVhZCIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCIsIGNoaWxkcmVuOiBfanN4cygidHIiLCB7IGNoaWxkcmVuOiBbX2pzeCgidGgiLCB7IGNsYXNzTmFtZTogInAtNSB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0iLCBjaGlsZHJlbjogIktleXdvcmQiIH0pLCBfanN4KCJ0aCIsIHsgY2xhc3NOYW1lOiAicC01IHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSIsIGNoaWxkcmVuOiAiVm9sdW1lIiB9KSwgX2pzeCgidGgiLCB7IGNsYXNzTmFtZTogInAtNSB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0iLCBjaGlsZHJlbjogIkRpZmZpY3VsdHkiIH0pXSB9KSB9KSwgX2pzeCgidGJvZHkiLCB7IGNsYXNzTmFtZTogImRpdmlkZS15IGRpdmlkZS1ncmF5LTEwMCBkYXJrOmRpdmlkZS1kYXJrLTgwMCIsIGNoaWxkcmVuOiBrZXl3b3Jkcy5tYXAoKGssIGkpID0+IChfanN4cygidHIiLCB7IGNsYXNzTmFtZTogImhvdmVyOmJnLWFtYmVyLTUwLzMwIGRhcms6aG92ZXI6YmctYW1iZXItOTAwLzEwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IFtfanN4KCJ0ZCIsIHsgY2xhc3NOYW1lOiAicC01IGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiBrLmtleXdvcmQgfSksIF9qc3goInRkIiwgeyBjbGFzc05hbWU6ICJwLTUiLCBjaGlsZHJlbjogX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiBgcHgtMi41IHB5LTEgcm91bmRlZC1mdWxsIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdXBwZXJjYXNlICR7ay52b2x1bWUgPT09ICdIaWdoJyA/ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi03MDAnIDogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS03MDAnfWAsIGNoaWxkcmVuOiBrLnZvbHVtZSB9KSB9KSwgX2pzeCgidGQiLCB7IGNsYXNzTmFtZTogInAtNSIsIGNoaWxkcmVuOiBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6IGBweC0yLjUgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC1bMTBweF0gZm9udC1ibGFjayB1cHBlcmNhc2UgJHtrLmRpZmZpY3VsdHkgPT09ICdIYXJkJyA/ICdiZy1yZWQtMTAwIHRleHQtcmVkLTcwMCcgOiAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTcwMCd9YCwgY2hpbGRyZW46IGsuZGlmZmljdWx0eSB9KSB9KV0gfSwgaSkpKSB9KV0gfSkgfSkpXSB9KSB9KSk7Cn07Ci8vIC0tLSBFeHBsYWluZXIgVG9vbCAtLS0KZXhwb3J0IGNvbnN0IEV4cGxhaW5lclRvb2wgPSAoKSA9PiB7CiAgICBjb25zdCBbdG9waWMsIHNldFRvcGljXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtsZXZlbCwgc2V0TGV2ZWxdID0gdXNlU3RhdGUoJzUgWWVhciBPbGQnKTsKICAgIGNvbnN0IFtleHBsYW5hdGlvbiwgc2V0RXhwbGFuYXRpb25dID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGhhbmRsZUV4cGxhaW4gPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCF0b3BpYy50cmltKCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gYEV4cGxhaW4gIiR7dG9waWN9IiB0byBhICR7bGV2ZWx9LiBVc2UgYW5hbG9naWVzLCBzaW1wbGUgdm9jYWJ1bGFyeSwgYW5kIGFuIGVuZ2FnaW5nIHRvbmUuYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgc2V0RXhwbGFuYXRpb24ocmVzcG9uc2UpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJVbml2ZXJzYWwgRXhwbGFpbmVyIiwgZGVzY3JpcHRpb246ICJVbmRlcnN0YW5kIGNvbXBsZXggdG9waWNzIGF0IGFueSBsZXZlbC4gRnJvbSAnRXhwbGFpbiBMaWtlIEknbSA1JyB0byAnUGhEIExldmVsJy4iLCBpY29uOiBCb29rT3BlbiwgY2F0ZWdvcnk6ICJBSSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNHhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGdhcC01IiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogdG9waWMsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VG9waWMoZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIlRvcGljIChlLmcuICdCbG9ja2NoYWluJykuLi4iLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC01IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0ZXh0LXhsIGZvbnQtYm9sZCBzaGFkb3ctaW5uZXIgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC0yIG92ZXJmbG93LXgtYXV0byBwYi0yIGN1c3RvbS1zY3JvbGxiYXIiLCBjaGlsZHJlbjogWyc1IFllYXIgT2xkJywgJ1N0dWRlbnQnLCAnUHJvZmVzc2lvbmFsJywgJ0V4cGVydCddLm1hcChsID0+IChfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldExldmVsKGwpLCBjbGFzc05hbWU6IGBweC01IHB5LTIuNSByb3VuZGVkLXhsIHdoaXRlc3BhY2Utbm93cmFwIHRleHQteHMgZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IGJvcmRlciB0cmFuc2l0aW9uLWFsbCAke2xldmVsID09PSBsID8gJ2JnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIGJvcmRlci1icmFuZC02MDAgc2hhZG93LW1kJyA6ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS01MDAgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGhvdmVyOmJvcmRlci1icmFuZC0zMDAnfWAsIGNoaWxkcmVuOiBsIH0sIGwpKSkgfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUV4cGxhaW4sIGRpc2FibGVkOiBpc0xvYWRpbmcgfHwgIXRvcGljLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBmb250LWJsYWNrIHJvdW5kZWQtMnhsIHNoYWRvdy1sZyBzaGFkb3ctYnJhbmQtNjAwLzIwIGFjdGl2ZTpzY2FsZS1bMC45OF0gdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW2lzTG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IGFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KExpZ2h0YnVsYiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiBTdGFydCBMZWFybmluZyJdIH0pXSB9KSwgZXhwbGFuYXRpb24gJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtM3hsIHAtMTAgc2hhZG93LXNtIGFuaW1hdGUtaW4gZmFkZS1pbiBzbGlkZS1pbi1mcm9tLWJvdHRvbS00IHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicHJvc2UgcHJvc2UtYnJhbmQgZGFyazpwcm9zZS1pbnZlcnQgbWF4LXctbm9uZSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDAgdGV4dC1sZyIsIGNoaWxkcmVuOiBfanN4KFJlYWN0TWFya2Rvd24sIHsgY2hpbGRyZW46IGV4cGxhbmF0aW9uIH0pIH0pIH0pKV0gfSkgfSkpOwp9Owo=","@/components/Tools/FinanceTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgRG9sbGFyU2lnbiwgQXJyb3dSaWdodExlZnQsIFRyZW5kaW5nVXAsIExheW91dERhc2hib2FyZCwgQ3JlZGl0Q2FyZCwgVXNlcnMsIE1vcmVIb3Jpem9udGFsLCBBcnJvd1VwUmlnaHQsIERvd25sb2FkLCBDYW1lcmEsIEhpc3RvcnksIExpbmVDaGFydCwgRmlsZVRleHQsIFVwbG9hZCwgVHJhc2gyLCBDYWxjdWxhdG9yLCBCYXJDaGFydDMsIENsb2NrLCBQbGF5LCBQYXVzZSwgUm90YXRlQ2N3LCBCcmllZmNhc2UsIFBhbG10cmVlLCBMb2FkZXIyLCBSZWNlaXB0LCBQbHVzLCBTcGFya2xlcywgU2V0dGluZ3MyLCBTaG9wcGluZ0JhZywgWmFwLCBTaGllbGRDaGVjaywgUGVyY2VudCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCB7IGFuYWx5emVEb2N1bWVudCwgZ2VuZXJhdGVUZXh0LCBnZW5lcmF0ZVdpdGhTZWFyY2ggfSBmcm9tICdAL3NlcnZpY2VzL2dlbWluaVNlcnZpY2UnOwppbXBvcnQgUGFwYSBmcm9tICdwYXBhcGFyc2UnOwppbXBvcnQgKiBhcyBodG1sVG9JbWFnZSBmcm9tICdodG1sLXRvLWltYWdlJzsKaW1wb3J0IHsgUERGRG9jdW1lbnQgfSBmcm9tICdwZGYtbGliJzsKY29uc3QgQ1VSUkVOQ0lFUyA9IFsKICAgIHsgY29kZTogJ1VTRCcsIG5hbWU6ICdVUyBEb2xsYXInLCBzeW1ib2w6ICckJyB9LAogICAgeyBjb2RlOiAnRVVSJywgbmFtZTogJ0V1cm8nLCBzeW1ib2w6ICfigqwnIH0sCiAgICB7IGNvZGU6ICdHQlAnLCBuYW1lOiAnQnJpdGlzaCBQb3VuZCcsIHN5bWJvbDogJ8KjJyB9LAogICAgeyBjb2RlOiAnSlBZJywgbmFtZTogJ0phcGFuZXNlIFllbicsIHN5bWJvbDogJ8KlJyB9LAogICAgeyBjb2RlOiAnQVVEJywgbmFtZTogJ0F1c3RyYWxpYW4gRG9sbGFyJywgc3ltYm9sOiAnQSQnIH0sCiAgICB7IGNvZGU6ICdDQUQnLCBuYW1lOiAnQ2FuYWRpYW4gRG9sbGFyJywgc3ltYm9sOiAnQyQnIH0sCiAgICB7IGNvZGU6ICdDSEYnLCBuYW1lOiAnU3dpc3MgRnJhbmMnLCBzeW1ib2w6ICdGcicgfSwKICAgIHsgY29kZTogJ0NOWScsIG5hbWU6ICdDaGluZXNlIFl1YW4nLCBzeW1ib2w6ICfCpScgfSwKICAgIHsgY29kZTogJ0lOUicsIG5hbWU6ICdJbmRpYW4gUnVwZWUnLCBzeW1ib2w6ICfigrknIH0sCiAgICB7IGNvZGU6ICdOWkQnLCBuYW1lOiAnTmV3IFplYWxhbmQgRG9sbGFyJywgc3ltYm9sOiAnTlokJyB9LAogICAgeyBjb2RlOiAnU0dEJywgbmFtZTogJ1NpbmdhcG9yZSBEb2xsYXInLCBzeW1ib2w6ICdTJCcgfSwKICAgIHsgY29kZTogJ0hLRCcsIG5hbWU6ICdIb25nIEtvbmcgRG9sbGFyJywgc3ltYm9sOiAnSEskJyB9LAogICAgeyBjb2RlOiAnU0VLJywgbmFtZTogJ1N3ZWRpc2ggS3JvbmEnLCBzeW1ib2w6ICdrcicgfSwKICAgIHsgY29kZTogJ0tSVycsIG5hbWU6ICdTb3V0aCBLb3JlYW4gV29uJywgc3ltYm9sOiAn4oKpJyB9LAogICAgeyBjb2RlOiAnQlJMJywgbmFtZTogJ0JyYXppbGlhbiBSZWFsJywgc3ltYm9sOiAnUiQnIH0sCiAgICB7IGNvZGU6ICdaQVInLCBuYW1lOiAnU291dGggQWZyaWNhbiBSYW5kJywgc3ltYm9sOiAnUicgfSwKICAgIHsgY29kZTogJ01YTicsIG5hbWU6ICdNZXhpY2FuIFBlc28nLCBzeW1ib2w6ICckJyB9LAogICAgeyBjb2RlOiAnQUVEJywgbmFtZTogJ0VtaXJhdGkgRGlyaGFtJywgc3ltYm9sOiAnZGgnIH0sCiAgICB7IGNvZGU6ICdTQVInLCBuYW1lOiAnU2F1ZGkgUml5YWwnLCBzeW1ib2w6ICfvt7wnIH0sCiAgICB7IGNvZGU6ICdUUlknLCBuYW1lOiAnVHVya2lzaCBMaXJhJywgc3ltYm9sOiAn4oK6JyB9LApdOwpjb25zdCBHTE9CQUxfQ09VTlRSSUVTID0gWwogICAgIlVuaXRlZCBTdGF0ZXMiLCAiVW5pdGVkIEtpbmdkb20iLCAiQ2FuYWRhIiwgIkF1c3RyYWxpYSIsICJFdXJvem9uZSAoR2VuZXJhbCkiLAogICAgIkFyZ2VudGluYSIsICJBdXN0cmlhIiwgIkJhbmdsYWRlc2giLCAiQmVsZ2l1bSIsICJCcmF6aWwiLCAiQnVsZ2FyaWEiLAogICAgIkNoaWxlIiwgIkNoaW5hIiwgIkNvbG9tYmlhIiwgIkNvc3RhIFJpY2EiLCAiQ3JvYXRpYSIsICJDemVjaCBSZXB1YmxpYyIsCiAgICAiRGVubWFyayIsICJEb21pbmljYW4gUmVwdWJsaWMiLCAiRWN1YWRvciIsICJFZ3lwdCIsICJFc3RvbmlhIiwKICAgICJGaW5sYW5kIiwgIkZyYW5jZSIsICJHZXJtYW55IiwgIkdoYW5hIiwgIkdyZWVjZSIsICJHdWF0ZW1hbGEiLAogICAgIkhvbmcgS29uZyIsICJIdW5nYXJ5IiwgIkljZWxhbmQiLCAiSW5kaWEiLCAiSW5kb25lc2lhIiwgIklyYW4iLCAiSXJhcSIsICJJcmVsYW5kIiwgIklzcmFlbCIsICJJdGFseSIsCiAgICAiSmFtYWljYSIsICJKYXBhbiIsICJKb3JkYW4iLCAiS2F6YWtoc3RhbiIsICJLZW55YSIsICJLdXdhaXQiLAogICAgIkxhdHZpYSIsICJMZWJhbm9uIiwgIkxpdGh1YW5pYSIsICJMdXhlbWJvdXJnIiwgIk1hbGF5c2lhIiwgIk1leGljbyIsICJNb3JvY2NvIiwKICAgICJOZXRoZXJsYW5kcyIsICJOZXcgWmVhbGFuZCIsICJOaWdlcmlhIiwgIk5vcndheSIsICJPbWFuIiwKICAgICJQYWtpc3RhbiIsICJQYW5hbWEiLCAiUGVydSIsICJQaGlsaXBwaW5lcyIsICJQb2xhbmQiLCAiUG9ydHVnYWwiLCAiUWF0YXIiLAogICAgIlJvbWFuaWEiLCAiUnVzc2lhIiwgIlNhdWRpIEFyYWJpYSIsICJTZXJiaWEiLCAiU2luZ2Fwb3JlIiwgIlNsb3Zha2lhIiwgIlNsb3ZlbmlhIiwgIlNvdXRoIEFmcmljYSIsICJTb3V0aCBLb3JlYSIsICJTcGFpbiIsICJTcmkgTGFua2EiLCAiU3dlZGVuIiwgIlN3aXR6ZXJsYW5kIiwKICAgICJUYWl3YW4iLCAiVGhhaWxhbmQiLCAiVHVuaXNpYSIsICJUdXJrZXkiLAogICAgIlVrcmFpbmUiLCAiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLCAiVXJ1Z3VheSIsICJVemJla2lzdGFuIiwgIlZlbmV6dWVsYSIsICJWaWV0bmFtIgpdLnNvcnQoKTsKLy8gLS0tIEFJIEJ1eSBvciBQYXNzIEFkdmlzb3IgLS0tCmV4cG9ydCBjb25zdCBCdXlPclBhc3NBZHZpc29yID0gKCkgPT4gewogICAgY29uc3QgW2l0ZW0sIHNldEl0ZW1dID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3ByaWNlLCBzZXRQcmljZV0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFtpbmNvbWUsIHNldEluY29tZV0gPSB1c2VTdGF0ZSgzMDAwKTsKICAgIGNvbnN0IFt1cmdlbmN5LCBzZXRVcmdlbmN5XSA9IHVzZVN0YXRlKCdXYW50Jyk7CiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBhbmFseXplID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghaXRlbSB8fCBwcmljZSA8PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgQWN0IGFzIGEgYnJ1dGFsIGJ1dCBmYWlyIGZpbmFuY2lhbCBhZHZpc29yLiBVc2VyIHdhbnRzIHRvIGJ1eTogIiR7aXRlbX0iIGZvciAkJHtwcmljZX0uIFRoZWlyIG1vbnRobHkgaW5jb21lIGlzICQke2luY29tZX0uIFRoZXkgY2F0ZWdvcml6ZSB0aGlzIGFzIGEgIiR7dXJnZW5jeX0iLiAKICAgICAgQW5hbHl6ZSB0aGUgcHVyY2hhc2UgYmFzZWQgb24gdGhlIDUwLzMwLzIwIHJ1bGUgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBpbnZlc3RtZW50cy4gCiAgICAgIFJldHVybiBzdHJpY3RseSBhIEpTT04gb2JqZWN0OiB7ICJkZWNpc2lvbiI6ICJCVVkiIHwgIlBBU1MiIHwgIldBSVQiLCAiY29sb3IiOiAiZW1lcmFsZCIgfCAicm9zZSIgfCAiYW1iZXIiLCAibG9naWMiOiAiQSBwdW5jaHkgMy1zZW50ZW5jZSBleHBsYW5hdGlvbiIgfS5gOwogICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UocmVzLnJlcGxhY2UoL2BgYGpzb258YGBgL2csICcnKS50cmltKCkpOwogICAgICAgICAgICBzZXRSZXN1bHQoanNvbik7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIGFsZXJ0KCJBSSBhbmFseXNpcyBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uIik7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJBSSAnQnV5IG9yIFBhc3MnIEFkdmlzb3IiLCBkZXNjcmlwdGlvbjogIkFzayBvdXIgQUkgZmluYW5jaWFsIGNyaXRpYyBpZiB0aGF0IHB1cmNoYXNlIGlzIGFjdHVhbGx5IGEgZ29vZCBpZGVhIGJhc2VkIG9uIHlvdXIgaW5jb21lLiIsIGljb246IFNob3BwaW5nQmFnLCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTJ4bCBteC1hdXRvIHNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIHAtNiBzaGFkb3ctc20gc3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIlRoZSBJdGVtIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGl0ZW0sIG9uQ2hhbmdlOiBlID0+IHNldEl0ZW0oZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogImUuZy4gaVBob25lIDE2IFBybyBNYXgiLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBiZy1ncmF5LTUwIGZvbnQtYm9sZCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIlByaWNlICgkKSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHByaWNlLCBvbkNoYW5nZTogZSA9PiBzZXRQcmljZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJNb250aGx5IEluY29tZSAoJCkiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBpbmNvbWUsIG9uQ2hhbmdlOiBlID0+IHNldEluY29tZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCBmb250LWJvbGQiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiTmVjZXNzaXR5IExldmVsIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0zIGdhcC0yIiwgY2hpbGRyZW46IFsnTmVlZCcsICdXYW50JywgJ0ltcHVsc2UnXS5tYXAobCA9PiAoX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRVcmdlbmN5KGwpLCBjbGFzc05hbWU6IGBwLTIgcm91bmRlZC1sZyB0ZXh0LXhzIGZvbnQtYm9sZCBib3JkZXIgdHJhbnNpdGlvbi1hbGwgJHt1cmdlbmN5ID09PSBsID8gJ2JnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIGJvcmRlci1icmFuZC02MDAnIDogJ2JnLXdoaXRlIHRleHQtZ3JheS01MDAnfWAsIGNoaWxkcmVuOiBsIH0sIGwpKSkgfSldIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBhbmFseXplLCBkaXNhYmxlZDogbG9hZGluZyB8fCAhaXRlbSwgY2xhc3NOYW1lOiAidy1mdWxsIHB5LTQgYmctZ3JheS05MDAgdGV4dC13aGl0ZSBmb250LWJsYWNrIHJvdW5kZWQteGwgc2hhZG93LWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIGFjdGl2ZTpzY2FsZS05NSB0cmFuc2l0aW9uLWFsbCIsIGNoaWxkcmVuOiBbbG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJhbmltYXRlLXNwaW4iIH0pIDogX2pzeChTcGFya2xlcywgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBHZXQgQUkgQWR2aWNlIl0gfSldIH0pLCByZXN1bHQgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogYHAtOCByb3VuZGVkLTN4bCBib3JkZXItMiBhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tNCBzaGFkb3cteGwgJHtyZXN1bHQuY29sb3IgPT09ICdlbWVyYWxkJyA/ICdiZy1lbWVyYWxkLTUwIGJvcmRlci1lbWVyYWxkLTIwMCcgOiByZXN1bHQuY29sb3IgPT09ICdyb3NlJyA/ICdiZy1yb3NlLTUwIGJvcmRlci1yb3NlLTIwMCcgOiAnYmctYW1iZXItNTAgYm9yZGVyLWFtYmVyLTIwMCd9YCwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogYHRleHQtNnhsIGZvbnQtYmxhY2sgbWItNCAke3Jlc3VsdC5jb2xvciA9PT0gJ2VtZXJhbGQnID8gJ3RleHQtZW1lcmFsZC03MDAnIDogcmVzdWx0LmNvbG9yID09PSAncm9zZScgPyAndGV4dC1yb3NlLTcwMCcgOiAndGV4dC1hbWJlci03MDAnfWAsIGNoaWxkcmVuOiByZXN1bHQuZGVjaXNpb24gfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS04MDAgZm9udC1tZWRpdW0gbGVhZGluZy1yZWxheGVkIiwgY2hpbGRyZW46IHJlc3VsdC5sb2dpYyB9KV0gfSkpXSB9KSB9KSk7Cn07CmV4cG9ydCBjb25zdCBEZWJ0UGxhbm5lciA9ICgpID0+IHsKICAgIGNvbnN0IFtkZWJ0cywgc2V0RGVidHNdID0gdXNlU3RhdGUoW10pOwogICAgY29uc3QgW2V4dHJhLCBzZXRFeHRyYV0gPSB1c2VTdGF0ZSgyMDApOwogICAgY29uc3QgW3N0cmF0ZWd5LCBzZXRTdHJhdGVneV0gPSB1c2VTdGF0ZSgnYXZhbGFuY2hlJyk7CiAgICBjb25zdCBhZGREZWJ0ID0gKCkgPT4gc2V0RGVidHMoWy4uLmRlYnRzLCB7IGlkOiBjcnlwdG8ucmFuZG9tVVVJRCgpLCBuYW1lOiAnJywgYmFsYW5jZTogMCwgcmF0ZTogMCwgbWluOiAwIH1dKTsKICAgIGNvbnN0IHVwZGF0ZURlYnQgPSAoaWQsIGZpZWxkLCB2YWwpID0+IHNldERlYnRzKGRlYnRzLm1hcChkID0+IGQuaWQgPT09IGlkID8geyAuLi5kLCBbZmllbGRdOiB2YWwgfSA6IGQpKTsKICAgIGNvbnN0IHNvcnRlZERlYnRzID0gdXNlTWVtbygoKSA9PiB7CiAgICAgICAgcmV0dXJuIFsuLi5kZWJ0c10uc29ydCgoYSwgYikgPT4gc3RyYXRlZ3kgPT09ICdzbm93YmFsbCcgPyBhLmJhbGFuY2UgLSBiLmJhbGFuY2UgOiBiLnJhdGUgLSBhLnJhdGUpOwogICAgfSwgW2RlYnRzLCBzdHJhdGVneV0pOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJEZWJ0IFBheW9mZiBTdHJhdGVneSIsIGRlc2NyaXB0aW9uOiAiVmlzdWFsaXplIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgZGVidC1mcmVlIHVzaW5nIFNub3diYWxsIG9yIEF2YWxhbmNoZSBtZXRob2RzLiIsIGljb246IFNoaWVsZENoZWNrLCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTZ4bCBteC1hdXRvIGdyaWQgbGc6Z3JpZC1jb2xzLTIgZ2FwLTEyIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00IiwgY2hpbGRyZW46IFtfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgdGV4dC14cyIsIGNoaWxkcmVuOiAiWW91ciBEZWJ0cyIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogYWRkRGVidCwgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJsYWNrIGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLXhsIHNoYWRvdy1sZyBzaGFkb3ctYnJhbmQtNTAwLzIwIGhvdmVyOnNjYWxlLTEwNSBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogIisgQWRkIE5ldyBEZWJ0IiB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS00IiwgY2hpbGRyZW46IGRlYnRzLmxlbmd0aCA9PT0gMCA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJweS0xMiB0ZXh0LWNlbnRlciBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCByb3VuZGVkLTN4bCB0ZXh0LWdyYXktNDAwIiwgY2hpbGRyZW46IFtfanN4KENyZWRpdENhcmQsIHsgY2xhc3NOYW1lOiAidy0xMiBoLTEyIG14LWF1dG8gbWItMyBvcGFjaXR5LTEwIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIiwgY2hpbGRyZW46ICJObyBkZWJ0cyBhZGRlZCB5ZXQuIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBtdC0xIiwgY2hpbGRyZW46ICJTdGFydCBieSBjbGlja2luZyB0aGUgYnV0dG9uIGFib3ZlLiIgfSldIH0pKSA6IChkZWJ0cy5tYXAoZCA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC01IGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCByb3VuZGVkLTJ4bCBzaGFkb3ctc20gc3BhY2UteS00IGFuaW1hdGUtaW4gZmFkZS1pbiBzbGlkZS1pbi1mcm9tLWxlZnQtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdmFsdWU6IGQubmFtZSwgb25DaGFuZ2U6IGUgPT4gdXBkYXRlRGVidChkLmlkLCAnbmFtZScsIGUudGFyZ2V0LnZhbHVlKSwgcGxhY2Vob2xkZXI6ICJlLmcuIENoYXNlIENyZWRpdCBDYXJkIiwgY2xhc3NOYW1lOiAiZmxleC0xIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgZm9jdXM6cmluZy0wIHRleHQtbGcgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTMwMCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0RGVidHMoZGVidHMuZmlsdGVyKHggPT4geC5pZCAhPT0gZC5pZCkpLCBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktMzAwIGhvdmVyOnRleHQtcm9zZS01MDAgcC0yIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IF9qc3goVHJhc2gyLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVs5cHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMSBtbC0xIiwgY2hpbGRyZW46ICJDdXJyZW50IEJhbGFuY2UiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJyZWxhdGl2ZSIsIGNoaWxkcmVuOiBbX2pzeChEb2xsYXJTaWduLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGxlZnQtMyB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdy00IGgtNCB0ZXh0LWVtZXJhbGQtNTAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogZC5iYWxhbmNlIHx8ICcnLCBvbkNoYW5nZTogZSA9PiB1cGRhdGVEZWJ0KGQuaWQsICdiYWxhbmNlJywgTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwbC05IHByLTQgcHktMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgdHJhbnNpdGlvbi1hbGwgb3V0bGluZS1ub25lIiwgcGxhY2Vob2xkZXI6ICIwLjAwIiB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJyZWxhdGl2ZSIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzlweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIG1sLTEiLCBjaGlsZHJlbjogIkludGVyZXN0IFJhdGUiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJyZWxhdGl2ZSIsIGNoaWxkcmVuOiBbX2pzeChQZXJjZW50LCB7IGNsYXNzTmFtZTogImFic29sdXRlIGxlZnQtMyB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdy00IGgtNCB0ZXh0LWJsdWUtNTAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogZC5yYXRlIHx8ICcnLCBvbkNoYW5nZTogZSA9PiB1cGRhdGVEZWJ0KGQuaWQsICdyYXRlJywgTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwbC05IHByLTQgcHktMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgdHJhbnNpdGlvbi1hbGwgb3V0bGluZS1ub25lIiwgcGxhY2Vob2xkZXI6ICIwJSIgfSldIH0pXSB9KV0gfSldIH0sIGQuaWQpKSkpIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IGJnLWdyYXktOTUwIHJvdW5kZWQtWzNyZW1dIHRleHQtd2hpdGUgc3BhY2UteS04IHNoYWRvdy0yeGwgYm9yZGVyLTQgYm9yZGVyLWdyYXktOTAwIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGJnLXdoaXRlLzUgcC0xIHJvdW5kZWQtMnhsIiwgY2hpbGRyZW46IFtfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldFN0cmF0ZWd5KCdhdmFsYW5jaGUnKSwgY2xhc3NOYW1lOiBgZmxleC0xIHB5LTMgdGV4dC1bMTBweF0gZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHJvdW5kZWQteGwgdHJhbnNpdGlvbi1hbGwgJHtzdHJhdGVneSA9PT0gJ2F2YWxhbmNoZScgPyAnYmctd2hpdGUgdGV4dC1ncmF5LTkwMCcgOiAndGV4dC13aGl0ZS80MCBob3Zlcjp0ZXh0LXdoaXRlLzYwJ31gLCBjaGlsZHJlbjogIkF2YWxhbmNoZSAoTWF0aCBGaXJzdCkiIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldFN0cmF0ZWd5KCdzbm93YmFsbCcpLCBjbGFzc05hbWU6IGBmbGV4LTEgcHktMyB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3Qgcm91bmRlZC14bCB0cmFuc2l0aW9uLWFsbCAke3N0cmF0ZWd5ID09PSAnc25vd2JhbGwnID8gJ2JnLXdoaXRlIHRleHQtZ3JheS05MDAnIDogJ3RleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZS82MCd9YCwgY2hpbGRyZW46ICJTbm93YmFsbCAoUHN5Y2ggV2lucykiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMyIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkV4dHJhIE1vbnRobHkgQ29udHJpYnV0aW9uIiB9KSwgX2pzeChaYXAsIHsgY2xhc3NOYW1lOiAidy0zIGgtMyB0ZXh0LWFtYmVyLTQwMCBhbmltYXRlLXB1bHNlIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGJnLXdoaXRlLzEwIHAtNiByb3VuZGVkLVsycmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlLzUiLCBjaGlsZHJlbjogW19qc3goRG9sbGFyU2lnbiwgeyBjbGFzc05hbWU6ICJ3LTggaC04IHRleHQtZW1lcmFsZC00MDAiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBleHRyYSwgb25DaGFuZ2U6IGUgPT4gc2V0RXh0cmEoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogImJnLXRyYW5zcGFyZW50IHRleHQtNXhsIGZvbnQtYmxhY2sgYm9yZGVyLW5vbmUgZm9jdXM6cmluZy0wIHctZnVsbCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzEwIiwgcGxhY2Vob2xkZXI6ICIwIiB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwdC04IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTYiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiUGF5b2ZmIFByaW9yaXR5IExpc3QiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInB4LTIgcHktMSBiZy13aGl0ZS8xMCByb3VuZGVkIHRleHQtWzlweF0gZm9udC1ibGFjayB1cHBlcmNhc2UgdGV4dC13aGl0ZS82MCIsIGNoaWxkcmVuOiAiT3B0aW1pemVkIiB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0zIiwgY2hpbGRyZW46IHNvcnRlZERlYnRzLmxlbmd0aCA9PT0gMCA/IChfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXdoaXRlLzIwIGl0YWxpYyB0ZXh0LXNtIHRleHQtY2VudGVyIHB5LTQiLCBjaGlsZHJlbjogIkFkZCB5b3VyIGRlYnRzIHRvIHNlZSB0aGUgc3RyYXRlZ3kgYnJlYWtkb3duLiIgfSkpIDogc29ydGVkRGVidHMubWFwKChkLCBpKSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtNCBiZy13aGl0ZS81IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItd2hpdGUvNSBob3ZlcjpiZy13aGl0ZS8xMCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInctNiBoLTYgcm91bmRlZC1mdWxsIGJnLWJyYW5kLTUwMCB0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtWzEwcHhdIGZvbnQtYmxhY2siLCBjaGlsZHJlbjogaSArIDEgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LXNtIHRydW5jYXRlIG1heC13LVsxNTBweF0iLCBjaGlsZHJlbjogZC5uYW1lIHx8ICdVbm5hbWVkIERlYnQnIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1yaWdodCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZm9udC1tb25vIHRleHQtZW1lcmFsZC00MDAgZm9udC1ib2xkIiwgY2hpbGRyZW46IFsiJCIsIGQuYmFsYW5jZS50b0xvY2FsZVN0cmluZygpXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80MCBmb250LWJvbGQgdXBwZXJjYXNlIiwgY2hpbGRyZW46IFtkLnJhdGUsICIlIEFQUiJdIH0pXSB9KV0gfSwgZC5pZCkpKSB9KSwgc29ydGVkRGVidHMubGVuZ3RoID4gMCAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtOCBwLTYgYmctYnJhbmQtNjAwIHJvdW5kZWQtM3hsIHRleHQtY2VudGVyIHNoYWRvdy14bCBzaGFkb3ctYnJhbmQtNTAwLzIwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtYnJhbmQtMjAwIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi0xIiwgY2hpbGRyZW46ICJUb3RhbCBEZWJ0IFBvb2wiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTN4bCBmb250LWJsYWNrIiwgY2hpbGRyZW46IFsiJCIsIHNvcnRlZERlYnRzLnJlZHVjZSgoYWNjLCBkKSA9PiBhY2MgKyBkLmJhbGFuY2UsIDApLnRvTG9jYWxlU3RyaW5nKCldIH0pXSB9KSldIH0pXSB9KSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gRnJlZWxhbmNlIFJ1bndheSBDYWxjdWxhdG9yIC0tLQpleHBvcnQgY29uc3QgQnVyblJhdGVDYWxjdWxhdG9yID0gKCkgPT4gewogICAgY29uc3QgW3NhdmluZ3MsIHNldFNhdmluZ3NdID0gdXNlU3RhdGUoMTAwMDApOwogICAgY29uc3QgW2J1cm4sIHNldEJ1cm5dID0gdXNlU3RhdGUoMjUwMCk7CiAgICBjb25zdCBbaW5jb21lLCBzZXRJbmNvbWVdID0gdXNlU3RhdGUoNTAwKTsKICAgIGNvbnN0IG5ldEJ1cm4gPSBidXJuIC0gaW5jb21lOwogICAgY29uc3QgcnVud2F5ID0gbmV0QnVybiA+IDAgPyBzYXZpbmdzIC8gbmV0QnVybiA6IEluZmluaXR5OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJGcmVlbGFuY2UgUnVud2F5IENhbGMiLCBkZXNjcmlwdGlvbjogIkNhbGN1bGF0ZSBleGFjdGx5IGhvdyBtYW55IG1vbnRocyB5b3UgY2FuIHN1cnZpdmUgYmFzZWQgb24geW91ciBzYXZpbmdzIGFuZCBtb250aGx5IGJ1cm4gcmF0ZS4iLCBpY29uOiBQYWxtdHJlZSwgY2F0ZWdvcnk6ICJGaW5hbmNlIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy00eGwgbXgtYXV0byBncmlkIG1kOmdyaWQtY29scy0yIGdhcC0xMiIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtMnhsIHAtNiBzaGFkb3ctc20gc3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiTGlxdWlkIFNhdmluZ3MgKCQpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogc2F2aW5ncywgb25DaGFuZ2U6IGUgPT4gc2V0U2F2aW5ncyhOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCB0ZXh0LTJ4bCBmb250LWJsYWNrIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJNb250aGx5IEV4cGVuc2VzICgkKSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IGJ1cm4sIG9uQ2hhbmdlOiBlID0+IHNldEJ1cm4oTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTQgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLWdyYXktNTAgdGV4dC0yeGwgZm9udC1ibGFjayIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiUGFzc2l2ZS9TaWRlIEluY29tZSAoJCkiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBpbmNvbWUsIG9uQ2hhbmdlOiBlID0+IHNldEluY29tZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCB0ZXh0LTJ4bCBmb250LWJsYWNrIiB9KV0gfSldIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBwLTEyIGJnLWVtZXJhbGQtNjAwIHJvdW5kZWQtWzNyZW1dIHRleHQtd2hpdGUgc2hhZG93LTJ4bCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWVtZXJhbGQtMTAwIHRleHQtc20gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIG1iLTQiLCBjaGlsZHJlbjogIlRvdGFsIFJ1bndheSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTIwcHhdIGZvbnQtYmxhY2sgdHJhY2tpbmctdGlnaHRlciBsZWFkaW5nLW5vbmUiLCBjaGlsZHJlbjogcnVud2F5ID09PSBJbmZpbml0eSA/ICfiiJ4nIDogTWF0aC5mbG9vcihydW53YXkpIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtZW1lcmFsZC0xMDAgZm9udC1ibGFjayB0ZXh0LXhsIHVwcGVyY2FzZSBtdC0yIiwgY2hpbGRyZW46IHJ1bndheSA9PT0gSW5maW5pdHkgPyAnRklOQU5DSUFMIEZSRUVET00nIDogJ01PTlRIUyBMRUZUJyB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtMTAgcC02IGJnLXdoaXRlLzEwIHJvdW5kZWQtMnhsIHctZnVsbCB0ZXh0LWNlbnRlciBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHRleHQtZW1lcmFsZC0yMDAgbWItMSIsIGNoaWxkcmVuOiAiTW9udGhseSBOZXQgQnVybiIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtMnhsIGZvbnQtYmxhY2siLCBjaGlsZHJlbjogWyIkIiwgbmV0QnVybiA8PSAwID8gMCA6IG5ldEJ1cm5dIH0pXSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIEN1cnJlbmN5IENvbnZlcnRlciAtLS0KZXhwb3J0IGNvbnN0IEN1cnJlbmN5Q29udmVydGVyID0gKCkgPT4gewogICAgY29uc3QgW2Ftb3VudCwgc2V0QW1vdW50XSA9IHVzZVN0YXRlKDEwMCk7CiAgICBjb25zdCBbZnJvbSwgc2V0RnJvbV0gPSB1c2VTdGF0ZSgnVVNEJyk7CiAgICBjb25zdCBbdG8sIHNldFRvXSA9IHVzZVN0YXRlKCdFVVInKTsKICAgIGNvbnN0IFtyYXRlLCBzZXRSYXRlXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgY29uc3QgZmV0Y2hSYXRlID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9sYXRlc3QuY3VycmVuY3ktYXBpLnBhZ2VzLmRldi92MS9jdXJyZW5jaWVzLyR7ZnJvbS50b0xvd2VyQ2FzZSgpfS5qc29uYCk7CiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgICAgIHNldFJhdGUoZGF0YVtmcm9tLnRvTG93ZXJDYXNlKCldW3RvLnRvTG93ZXJDYXNlKCldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGZldGNoUmF0ZSgpOwogICAgfSwgW2Zyb20sIHRvXSk7CiAgICBjb25zdCBzd2FwID0gKCkgPT4gewogICAgICAgIHNldEZyb20odG8pOwogICAgICAgIHNldFRvKGZyb20pOwogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiUmVhbC1UaW1lIEN1cnJlbmN5IENvbnZlcnRlciIsIGRlc2NyaXB0aW9uOiAiQ29udmVydCAxMDArIGdsb2JhbCBjdXJyZW5jaWVzIHdpdGggbGl2ZSwgdXAtdG8tdGhlLW1pbnV0ZSBtYXJrZXQgcmF0ZXMuIiwgaWNvbjogRG9sbGFyU2lnbiwgY2F0ZWdvcnk6ICJGaW5hbmNlIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTJ4bCBteC1hdXRvIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIkFtb3VudCIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IGFtb3VudCwgb25DaGFuZ2U6IGUgPT4gc2V0QW1vdW50KE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYmxhY2sgdGV4dC0zeGwgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgc2hhZG93LWlubmVyIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHctZnVsbCIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIkZyb20iIH0pLCBfanN4KCJzZWxlY3QiLCB7IHZhbHVlOiBmcm9tLCBvbkNoYW5nZTogZSA9PiBzZXRGcm9tKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUiLCBjaGlsZHJlbjogQ1VSUkVOQ0lFUy5tYXAoYyA9PiBfanN4cygib3B0aW9uIiwgeyB2YWx1ZTogYy5jb2RlLCBjaGlsZHJlbjogW2MuY29kZSwgIiBcdTIwMTQgIiwgYy5uYW1lXSB9LCBjLmNvZGUpKSB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogc3dhcCwgY2xhc3NOYW1lOiAicC00IGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWZ1bGwgaG92ZXI6YmctZ3JheS0xMDAgdHJhbnNpdGlvbi1jb2xvcnMgbXQtNiIsIGNoaWxkcmVuOiBfanN4KEFycm93UmlnaHRMZWZ0LCB7IGNsYXNzTmFtZTogInctNSBoLTUgdGV4dC1ncmF5LTQwMCIgfSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSB3LWZ1bGwiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJUbyIgfSksIF9qc3goInNlbGVjdCIsIHsgdmFsdWU6IHRvLCBvbkNoYW5nZTogZSA9PiBzZXRUbyhlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IENVUlJFTkNJRVMubWFwKGMgPT4gX2pzeHMoIm9wdGlvbiIsIHsgdmFsdWU6IGMuY29kZSwgY2hpbGRyZW46IFtjLmNvZGUsICIgXHUyMDE0ICIsIGMubmFtZV0gfSwgYy5jb2RlKSkgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicHQtNiBib3JkZXItdCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1iLTEiLCBjaGlsZHJlbjogIkNvbnZlcnRlZCBBbW91bnQiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtNXhsIGZvbnQtYmxhY2sgdGV4dC1icmFuZC02MDAgdGFidWxhci1udW1zIiwgY2hpbGRyZW46IGlzTG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAgYW5pbWF0ZS1zcGluIG14LWF1dG8iIH0pIDogcmF0ZSA/IGAkeyhhbW91bnQgKiByYXRlKS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSl9YCA6ICctLS0nIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC0yIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogWyIxICIsIGZyb20sICIgPSAiLCByYXRlPy50b0ZpeGVkKDQpLCAiICIsIHRvXSB9KV0gfSldIH0pIH0pIH0pKTsKfTsKLy8gLS0tIE1yckdlbmVyYXRvciAtLS0KZXhwb3J0IGNvbnN0IE1yckdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFttcnIsIHNldE1ycl0gPSB1c2VTdGF0ZSgxMjQ1MCk7CiAgICBjb25zdCBbY2h1cm4sIHNldENodXJuXSA9IHVzZVN0YXRlKDIuNCk7CiAgICBjb25zdCBbZ3Jvd3RoLCBzZXRHcm93dGhdID0gdXNlU3RhdGUoMTUuMik7CiAgICBjb25zdCBtb2NrdXBSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCBkb3dubG9hZE1vY2t1cCA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIW1vY2t1cFJlZi5jdXJyZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IGh0bWxUb0ltYWdlLnRvUG5nKG1vY2t1cFJlZi5jdXJyZW50LCB7IHF1YWxpdHk6IDEsIHBpeGVsUmF0aW86IDIgfSk7CiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICBsaW5rLmRvd25sb2FkID0gJ3N0cmlwZS1tcnItbW9ja3VwLnBuZyc7CiAgICAgICAgbGluay5ocmVmID0gZGF0YVVybDsKICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJTdHJpcGUgTVJSIE1vY2t1cCBHZW5lcmF0b3IiLCBkZXNjcmlwdGlvbjogIkNyZWF0ZSByZWFsaXN0aWMgU2FhUyBkYXNoYm9hcmQgc2NyZWVuc2hvdHMgZm9yIG1vY2t1cHMgYW5kIHByZXNlbnRhdGlvbnMuIiwgaWNvbjogTGF5b3V0RGFzaGJvYXJkLCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBsZzpncmlkLWNvbHMtMiBnYXAtOCBwLTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTJ4bCBwLTYgc2hhZG93LXNtIHNwYWNlLXktNiBoLWZpdCIsIGNoaWxkcmVuOiBbX2pzeHMoImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItMiIsIGNoaWxkcmVuOiBbX2pzeChTZXR0aW5nczIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LWJyYW5kLTUwMCIgfSksICIgRGFzaGJvYXJkIFNldHRpbmdzIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiTW9udGhseSBSZWN1cnJpbmcgUmV2ZW51ZSAoJCkiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBtcnIsIG9uQ2hhbmdlOiBlID0+IHNldE1ycihOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiR3Jvd3RoIFJhdGUgKCUpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogZ3Jvd3RoLCBvbkNoYW5nZTogZSA9PiBzZXRHcm93dGgoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLWdyYXktNTAgZm9udC1ib2xkIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIkNodXJuIFJhdGUgKCUpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogY2h1cm4sIG9uQ2hhbmdlOiBlID0+IHNldENodXJuKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBiZy1ncmF5LTUwIGZvbnQtYm9sZCIgfSldIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogZG93bmxvYWRNb2NrdXAsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB0cmFuc2l0aW9uLXRyYW5zZm9ybSBhY3RpdmU6c2NhbGUtWzAuOTldIiwgY2hpbGRyZW46IFtfanN4KENhbWVyYSwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiBEb3dubG9hZCBNb2NrdXAiXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS0xMDAgZGFyazpiZy1ibGFjayByb3VuZGVkLTJ4bCBwLTQgbWQ6cC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IHJlZjogbW9ja3VwUmVmLCBjbGFzc05hbWU6ICJiZy13aGl0ZSB0ZXh0LWdyYXktOTAwIHctZnVsbCBtYXgtdy1tZCBwLTggcm91bmRlZC0zeGwgc2hhZG93LTJ4bCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIiwgc3R5bGU6IHsgZm9udEZhbWlseTogIidJbnRlcicsIHNhbnMtc2VyaWYiIH0sIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTEwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctOCBoLTggYmctaW5kaWdvLTUwMCByb3VuZGVkLWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUiLCBjaGlsZHJlbjogX2pzeChBcnJvd1VwUmlnaHQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTQwMCBmb250LWJvbGQgdGV4dC1bMTBweF0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiUmVwb3J0cyIgfSksIF9qc3goTW9yZUhvcml6b250YWwsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTMwMCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtYi0xMCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNDAwIGZvbnQtYm9sZCB0ZXh0LVsxMXB4XSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgbWItMSIsIGNoaWxkcmVuOiAiTW9udGhseSBSZWN1cnJpbmcgUmV2ZW51ZSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtNHhsIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCB0cmFja2luZy10aWdodCIsIGNoaWxkcmVuOiBbIiQiLCBtcnIudG9Mb2NhbGVTdHJpbmcoKV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG10LTIiLCBjaGlsZHJlbjogW19qc3hzKCJzcGFuIiwgeyBjbGFzc05hbWU6ICJweC0yIHB5LTAuNSBiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtNjAwIHJvdW5kZWQgdGV4dC1bMTBweF0gZm9udC1ibGFjayIsIGNoaWxkcmVuOiBbIisiLCBncm93dGgsICIlIl0gfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIHRleHQtZ3JheS00MDAgZm9udC1tZWRpdW0iLCBjaGlsZHJlbjogInZzIGxhc3QgbW9udGgiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTYgbWItMTAiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBiZy1ncmF5LTUwIHJvdW5kZWQtMnhsIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS00MDAgZm9udC1ib2xkIHRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIG1iLTEiLCBjaGlsZHJlbjogIkFjdGl2ZSBUcmlhbHMiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ibGFjayIsIGNoaWxkcmVuOiAiMTI0IiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBiZy1ncmF5LTUwIHJvdW5kZWQtMnhsIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS00MDAgZm9udC1ib2xkIHRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIG1iLTEiLCBjaGlsZHJlbjogIkNodXJuIFJhdGUiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYmxhY2sgdGV4dC1yb3NlLTUwMCIsIGNoaWxkcmVuOiBbY2h1cm4sICIlIl0gfSldIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLTI0IHctZnVsbCBmbGV4IGl0ZW1zLWVuZCBnYXAtMS41IHB0LTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIiwgY2hpbGRyZW46IFs0MCwgNTUsIDQ1LCA2MCwgNzUsIDY1LCA4MCwgNzAsIDk1XS5tYXAoKGgsIGkpID0+IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIGJnLWluZGlnby0xMDAgcm91bmRlZC10LXNtIiwgc3R5bGU6IHsgaGVpZ2h0OiBgJHtofSVgLCBiYWNrZ3JvdW5kQ29sb3I6IGkgPT09IDggPyAnIzYzNjZmMScgOiB1bmRlZmluZWQgfSB9LCBpKSkgfSldIH0pIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBIaXN0b3JpY2FsUmF0ZXMgLS0tCmV4cG9ydCBjb25zdCBIaXN0b3JpY2FsUmF0ZXMgPSAoKSA9PiB7CiAgICBjb25zdCBbZGF0ZSwgc2V0RGF0ZV0gPSB1c2VTdGF0ZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSk7CiAgICBjb25zdCBbYmFzZSwgc2V0QmFzZV0gPSB1c2VTdGF0ZSgnVVNEJyk7CiAgICBjb25zdCBbcmF0ZXMsIHNldFJhdGVzXSA9IHVzZVN0YXRlKFtdKTsKICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGZldGNoUmF0ZXMgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly8ke2RhdGV9LmN1cnJlbmN5LWFwaS5wYWdlcy5kZXYvdjEvY3VycmVuY2llcy8ke2Jhc2UudG9Mb3dlckNhc2UoKX0uanNvbmApOwogICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTsKICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gT2JqZWN0LmVudHJpZXMoZGF0YVtiYXNlLnRvTG93ZXJDYXNlKCldKS5tYXAoKFtjdXJyZW5jeSwgcmF0ZV0pID0+ICh7CiAgICAgICAgICAgICAgICBjdXJyZW5jeTogY3VycmVuY3kudG9VcHBlckNhc2UoKSwKICAgICAgICAgICAgICAgIHJhdGU6IHJhdGUKICAgICAgICAgICAgfSkpLmZpbHRlcihyID0+IFsnRVVSJywgJ0dCUCcsICdKUFknLCAnQ0FEJywgJ0FVRCcsICdDSEYnLCAnQ05ZJywgJ0lOUicsICdIS0QnLCAnU0dEJ10uaW5jbHVkZXMoci5jdXJyZW5jeSkpOwogICAgICAgICAgICBzZXRSYXRlcyhtYXBwZWQpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBhbGVydCgiTm8gcmF0ZXMgYXZhaWxhYmxlIGZvciB0aGlzIGRhdGUuIik7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgdXNlRWZmZWN0KCgpID0+IHsgZmV0Y2hSYXRlcygpOyB9LCBbZGF0ZSwgYmFzZV0pOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJIaXN0b3JpY2FsIEV4Y2hhbmdlIFJhdGVzIiwgZGVzY3JpcHRpb246ICJBY2Nlc3MgZ2xvYmFsIGN1cnJlbmN5IGV4Y2hhbmdlIHJhdGVzIGZvciBhbnkgZGF0ZSBpbiBoaXN0b3J5LiIsIGljb246IEhpc3RvcnksIGNhdGVnb3J5OiAiRmluYW5jZSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNHhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGl0ZW1zLWVuZCBnYXAtNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHctZnVsbCIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIkhpc3RvcmljYWwgRGF0ZSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAiZGF0ZSIsIHZhbHVlOiBkYXRlLCBvbkNoYW5nZTogZSA9PiBzZXREYXRlKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHctZnVsbCIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIkJhc2UgQXNzZXQiIH0pLCBfanN4KCJzZWxlY3QiLCB7IHZhbHVlOiBiYXNlLCBvbkNoYW5nZTogZSA9PiBzZXRCYXNlKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBmb250LWJvbGQiLCBjaGlsZHJlbjogQ1VSUkVOQ0lFUy5tYXAoYyA9PiBfanN4KCJvcHRpb24iLCB7IHZhbHVlOiBjLmNvZGUsIGNoaWxkcmVuOiBjLmNvZGUgfSwgYy5jb2RlKSkgfSldIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBfanN4cygidGFibGUiLCB7IGNsYXNzTmFtZTogInctZnVsbCB0ZXh0LWxlZnQiLCBjaGlsZHJlbjogW19qc3goInRoZWFkIiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIiwgY2hpbGRyZW46IF9qc3hzKCJ0ciIsIHsgY2hpbGRyZW46IFtfanN4KCJ0aCIsIHsgY2xhc3NOYW1lOiAicC00IHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJDdXJyZW5jeSIgfSksIF9qc3goInRoIiwgeyBjbGFzc05hbWU6ICJwLTQgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgdGV4dC1yaWdodCIsIGNoaWxkcmVuOiAiUmF0ZSIgfSldIH0pIH0pLCBfanN4KCJ0Ym9keSIsIHsgY2xhc3NOYW1lOiAiZGl2aWRlLXkgZGl2aWRlLWdyYXktNTAgZGFyazpkaXZpZGUtZGFyay04MDAiLCBjaGlsZHJlbjogbG9hZGluZyA/IEFycmF5LmZyb20oeyBsZW5ndGg6IDUgfSkubWFwKChfLCBpKSA9PiBfanN4cygidHIiLCB7IGNoaWxkcmVuOiBbX2pzeCgidGQiLCB7IGNsYXNzTmFtZTogInAtNCBhbmltYXRlLXB1bHNlIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC00IGJnLWdyYXktMTAwIHJvdW5kZWQgdy0xNiIgfSkgfSksIF9qc3goInRkIiwgeyBjbGFzc05hbWU6ICJwLTQgYW5pbWF0ZS1wdWxzZSB0ZXh0LXJpZ2h0IiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC00IGJnLWdyYXktMTAwIHJvdW5kZWQgdy0yNCBtbC1hdXRvIiB9KSB9KV0gfSwgaSkpIDogcmF0ZXMubWFwKHIgPT4gKF9qc3hzKCJ0ciIsIHsgY2xhc3NOYW1lOiAiaG92ZXI6YmctZ3JheS01MC81MCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeCgidGQiLCB7IGNsYXNzTmFtZTogInAtNCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUiLCBjaGlsZHJlbjogci5jdXJyZW5jeSB9KSwgX2pzeCgidGQiLCB7IGNsYXNzTmFtZTogInAtNCBmb250LW1vbm8gZm9udC1ib2xkIHRleHQtcmlnaHQgdGV4dC1icmFuZC02MDAiLCBjaGlsZHJlbjogci5yYXRlLnRvRml4ZWQoNikgfSldIH0sIHIuY3VycmVuY3kpKSkgfSldIH0pIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBCYW5rU3RhdGVtZW50Q29udmVydGVyIC0tLQpleHBvcnQgY29uc3QgQmFua1N0YXRlbWVudENvbnZlcnRlciA9ICgpID0+IHsKICAgIGNvbnN0IFtmaWxlLCBzZXRGaWxlXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2lzUHJvY2Vzc2luZywgc2V0SXNQcm9jZXNzaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFt0cmFuc2FjdGlvbnMsIHNldFRyYW5zYWN0aW9uc10gPSB1c2VTdGF0ZShbXSk7CiAgICBjb25zdCBoYW5kbGVVcGxvYWQgPSBhc3luYyAoZSkgPT4gewogICAgICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlc1swXSkgewogICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGUudGFyZ2V0LmZpbGVzWzBdOwogICAgICAgICAgICBzZXRGaWxlKHNlbGVjdGVkKTsKICAgICAgICAgICAgc2V0SXNQcm9jZXNzaW5nKHRydWUpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdC5zcGxpdCgnLCcpWzFdOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBFeHRyYWN0IGFsbCBiYW5rIHRyYW5zYWN0aW9ucyBmcm9tIHRoaXMgc3RhdGVtZW50LiBSZXR1cm4gc3RyaWN0bHkgYSBKU09OIGFycmF5IG9mIG9iamVjdHM6IHsgImRhdGUiOiAiWVlZWS1NTS1ERCIsICJkZXNjcmlwdGlvbiI6ICJzdHJpbmciLCAiYW1vdW50IjogbnVtYmVyLCAidHlwZSI6ICJkZWJpdCIgfCAiY3JlZGl0IiB9LmA7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGFuYWx5emVEb2N1bWVudChiYXNlNjQsIHNlbGVjdGVkLnR5cGUsIHByb21wdCk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UodGV4dC5yZXBsYWNlKC9gYGBqc29ufGBgYC9nLCAnJykudHJpbSgpKTsKICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2FjdGlvbnMoanNvbik7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoc2VsZWN0ZWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJGYWlsZWQgdG8gYW5hbHl6ZSBzdGF0ZW1lbnQuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgICAgICBzZXRJc1Byb2Nlc3NpbmcoZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiQmFuayBTdGF0ZW1lbnQgQUkgQ29udmVydGVyIiwgZGVzY3JpcHRpb246ICJDb252ZXJ0IFBERiBiYW5rIHN0YXRlbWVudHMgdG8gY2xlYW4gQ1NWIGRhdGEgaW5zdGFudGx5IHVzaW5nIEFJIGRvY3VtZW50IGFuYWx5c2lzLiIsIGljb246IEZpbGVUZXh0LCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNXhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46ICFmaWxlID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtM3hsIHAtMTYgdGV4dC1jZW50ZXIgaG92ZXI6YmctZW1lcmFsZC01MCB0cmFuc2l0aW9uLWFsbCBjdXJzb3ItcG9pbnRlciBncm91cCIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJmaWxlIiwgYWNjZXB0OiAiLnBkZiIsIG9uQ2hhbmdlOiBoYW5kbGVVcGxvYWQsIGNsYXNzTmFtZTogImhpZGRlbiIsIGlkOiAic3RtdC11cCIgfSksIF9qc3hzKCJsYWJlbCIsIHsgaHRtbEZvcjogInN0bXQtdXAiLCBjbGFzc05hbWU6ICJjdXJzb3ItcG9pbnRlciBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTIwIGgtMjAgYmctZW1lcmFsZC01MCBkYXJrOmJnLWVtZXJhbGQtOTAwLzIwIHRleHQtZW1lcmFsZC01MDAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgc2hhZG93LXNtIiwgY2hpbGRyZW46IF9qc3goVXBsb2FkLCB7IGNsYXNzTmFtZTogInctMTAgaC0xMCIgfSkgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0yIiwgY2hpbGRyZW46ICJVcGxvYWQgQmFuayBTdGF0ZW1lbnQiIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46ICJTZWN1cmUgQUktcG93ZXJlZCBleHRyYWN0aW9uLiBZb3VyIGRhdGEgbmV2ZXIgbGVhdmVzIHRoZSBicm93c2VyLiIgfSldIH0pXSB9KSkgOiAoX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogaXNQcm9jZXNzaW5nID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIHB5LTIwIGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcm91bmRlZC0zeGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCIsIGNoaWxkcmVuOiBbX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogInctMTIgaC0xMiBhbmltYXRlLXNwaW4gdGV4dC1lbWVyYWxkLTUwMCBteC1hdXRvIG1iLTQiIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYW5pbWF0ZS1wdWxzZSIsIGNoaWxkcmVuOiAiRXh0cmFjdGluZyBUcmFuc2FjdGlvbiBEYXRhLi4uIiB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTN4bCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeHMoImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUiLCBjaGlsZHJlbjogWyJFeHRyYWN0ZWQgVHJhbnNhY3Rpb25zICgiLCB0cmFuc2FjdGlvbnMubGVuZ3RoLCAiKSJdIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjc3YgPSBQYXBhLnVucGFyc2UodHJhbnNhY3Rpb25zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gJ3N0YXRlbWVudF9kYXRhLmNzdic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogInB4LTUgcHktMiBiZy1lbWVyYWxkLTYwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goRG93bmxvYWQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgRXhwb3J0IENTViJdIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtYXgtaC1bNTAwcHhdIG92ZXJmbG93LXktYXV0byBjdXN0b20tc2Nyb2xsYmFyIiwgY2hpbGRyZW46IF9qc3hzKCJ0YWJsZSIsIHsgY2xhc3NOYW1lOiAidy1mdWxsIHRleHQtbGVmdCIsIGNoaWxkcmVuOiBbX2pzeCgidGhlYWQiLCB7IGNsYXNzTmFtZTogImJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBzdGlja3kgdG9wLTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIiwgY2hpbGRyZW46IF9qc3hzKCJ0ciIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogW19qc3goInRoIiwgeyBjbGFzc05hbWU6ICJwLTQiLCBjaGlsZHJlbjogIkRhdGUiIH0pLCBfanN4KCJ0aCIsIHsgY2xhc3NOYW1lOiAicC00IiwgY2hpbGRyZW46ICJEZXNjcmlwdGlvbiIgfSksIF9qc3goInRoIiwgeyBjbGFzc05hbWU6ICJwLTQgdGV4dC1yaWdodCIsIGNoaWxkcmVuOiAiQW1vdW50IiB9KV0gfSkgfSksIF9qc3goInRib2R5IiwgeyBjbGFzc05hbWU6ICJkaXZpZGUteSBkaXZpZGUtZ3JheS01MCIsIGNoaWxkcmVuOiB0cmFuc2FjdGlvbnMubWFwKCh0eCwgaSkgPT4gKF9qc3hzKCJ0ciIsIHsgY2xhc3NOYW1lOiAiaG92ZXI6YmctZW1lcmFsZC01MC8yMCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeCgidGQiLCB7IGNsYXNzTmFtZTogInAtNCB0ZXh0LXNtIGZvbnQtbW9ubyIsIGNoaWxkcmVuOiB0eC5kYXRlIH0pLCBfanN4KCJ0ZCIsIHsgY2xhc3NOYW1lOiAicC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCIsIGNoaWxkcmVuOiB0eC5kZXNjcmlwdGlvbiB9KSwgX2pzeHMoInRkIiwgeyBjbGFzc05hbWU6IGBwLTQgdGV4dC1yaWdodCBmb250LWJsYWNrIHRleHQtc20gJHt0eC50eXBlID09PSAnZGViaXQnID8gJ3RleHQtcm9zZS01MDAnIDogJ3RleHQtZW1lcmFsZC02MDAnfWAsIGNoaWxkcmVuOiBbdHgudHlwZSA9PT0gJ2RlYml0JyA/ICctJyA6ICcrJywgIiQiLCB0eC5hbW91bnQudG9GaXhlZCgyKV0gfSldIH0sIGkpKSkgfSldIH0pIH0pXSB9KSkgfSkpIH0pIH0pKTsKfTsKLy8gLS0tIFRpbWVJc01vbmV5IC0tLQpleHBvcnQgY29uc3QgVGltZUlzTW9uZXkgPSAoKSA9PiB7CiAgICBjb25zdCBbcGVvcGxlLCBzZXRQZW9wbGVdID0gdXNlU3RhdGUoNCk7CiAgICBjb25zdCBbYXZnUmF0ZSwgc2V0QXZnUmF0ZV0gPSB1c2VTdGF0ZSg3NSk7CiAgICBjb25zdCBbaXNSdW5uaW5nLCBzZXRJc1J1bm5pbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2VsYXBzZWQsIHNldEVsYXBzZWRdID0gdXNlU3RhdGUoMCk7CiAgICB1c2VFZmZlY3QoKCkgPT4gewogICAgICAgIGxldCB0OwogICAgICAgIGlmIChpc1J1bm5pbmcgJiYgc3RhcnRUaW1lKSB7CiAgICAgICAgICAgIHQgPSBzZXRJbnRlcnZhbCgoKSA9PiBzZXRFbGFwc2VkKE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMCkpLCAxMDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0KTsKICAgIH0sIFtpc1J1bm5pbmcsIHN0YXJ0VGltZV0pOwogICAgY29uc3QgY29zdCA9IChlbGFwc2VkIC8gMzYwMCkgKiAocGVvcGxlICogYXZnUmF0ZSk7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIk1lZXRpbmcgQ29zdCBDYWxjdWxhdG9yIiwgZGVzY3JpcHRpb246ICJWaXN1YWxpemUgdGhlIHJlYWwtdGltZSBjb3N0IG9mIHlvdXIgbWVldGluZ3MgYmFzZWQgb24gdGhlIG51bWJlciBvZiBwZW9wbGUgYW5kIGhvdXJseSByYXRlcy4iLCBpY29uOiBDbG9jaywgY2F0ZWdvcnk6ICJGaW5hbmNlIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtMTIgbWF4LXctNHhsIG14LWF1dG8gc3BhY2UteS0xMiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtM3hsIHAtMTAgc2hhZG93LTJ4bCB0ZXh0LWNlbnRlciByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogW2lzUnVubmluZyAmJiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIHRvcC0wIGxlZnQtMCBoLTEgYmctYnJhbmQtNTAwIGFuaW1hdGUtcHJvZ3Jlc3MiLCBzdHlsZTogeyB3aWR0aDogJzEwMCUnIH0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuM2VtXSBtYi00IiwgY2hpbGRyZW46ICJUb3RhbCBNZWV0aW5nIENvc3QiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMjBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBsZWFkaW5nLW5vbmUgdHJhY2tpbmctdGlnaHRlciB0YWJ1bGFyLW51bXMgbWItNCIsIGNoaWxkcmVuOiBbIiQiLCBjb3N0LnRvRml4ZWQoMildIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtbW9ubyB0ZXh0LWdyYXktNDAwIGZvbnQtYm9sZCBtYi0xMCIsIGNoaWxkcmVuOiBbTWF0aC5mbG9vcihlbGFwc2VkIC8gMzYwMCksICJoICIsIE1hdGguZmxvb3IoKGVsYXBzZWQgJSAzNjAwKSAvIDYwKSwgIm0gIiwgZWxhcHNlZCAlIDYwLCAicyJdIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC02IiwgY2hpbGRyZW46IFtfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHsgaWYgKCFpc1J1bm5pbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFRpbWUoRGF0ZS5ub3coKSAtIChlbGFwc2VkICogMTAwMCkpOyBzZXRJc1J1bm5pbmcoIWlzUnVubmluZyk7IH0sIGNsYXNzTmFtZTogYHctMjQgaC0yNCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgc2hhZG93LXhsIGhvdmVyOnNjYWxlLTEwNSBhY3RpdmU6c2NhbGUtOTUgJHtpc1J1bm5pbmcgPyAnYmctYW1iZXItNTAwIHRleHQtd2hpdGUnIDogJ2JnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlJ31gLCBjaGlsZHJlbjogaXNSdW5uaW5nID8gX2pzeChQYXVzZSwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAgZmlsbC1jdXJyZW50IiB9KSA6IF9qc3goUGxheSwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAgZmlsbC1jdXJyZW50IG1sLTIiIH0pIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHsgc2V0SXNSdW5uaW5nKGZhbHNlKTsgc2V0RWxhcHNlZCgwKTsgc2V0U3RhcnRUaW1lKG51bGwpOyB9LCBjbGFzc05hbWU6ICJ3LTI0IGgtMjQgcm91bmRlZC1mdWxsIGJnLWdyYXktMTAwIHRleHQtZ3JheS00MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogX2pzeChSb3RhdGVDY3csIHsgY2xhc3NOYW1lOiAidy0xMCBoLTEwIiB9KSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIG1kOmdyaWQtY29scy0yIGdhcC04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTMiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJQZW9wbGUgaW4gUm9vbSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC02IHAtNiBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC0yeGwgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4KFVzZXJzLCB7IGNsYXNzTmFtZTogInRleHQtYnJhbmQtNTAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJyYW5nZSIsIG1pbjogIjEiLCBtYXg6ICI1MCIsIHZhbHVlOiBwZW9wbGUsIG9uQ2hhbmdlOiBlID0+IHNldFBlb3BsZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAiZmxleC0xIGFjY2VudC1icmFuZC02MDAiIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTN4bCBmb250LWJsYWNrIHctMTIiLCBjaGlsZHJlbjogcGVvcGxlIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMyIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkF2ZyBIb3VybHkgUmF0ZSAoJCkiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNiBwLTYgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtMnhsIHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBbX2pzeChEb2xsYXJTaWduLCB7IGNsYXNzTmFtZTogInRleHQtYnJhbmQtNTAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogYXZnUmF0ZSwgb25DaGFuZ2U6IGUgPT4gc2V0QXZnUmF0ZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAiZmxleC0xIGJnLXRyYW5zcGFyZW50IHRleHQtM3hsIGZvbnQtYmxhY2sgZm9jdXM6b3V0bGluZS1ub25lIiB9KV0gfSldIH0pXSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gQ29tcG91bmRJbnRlcmVzdENhbGN1bGF0b3IgLS0tCmV4cG9ydCBjb25zdCBDb21wb3VuZEludGVyZXN0Q2FsY3VsYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFtwLCBzZXRQXSA9IHVzZVN0YXRlKDEwMDAwKTsKICAgIGNvbnN0IFttLCBzZXRNXSA9IHVzZVN0YXRlKDUwMCk7CiAgICBjb25zdCBbciwgc2V0Ul0gPSB1c2VTdGF0ZSg4KTsKICAgIGNvbnN0IFt5LCBzZXRZXSA9IHVzZVN0YXRlKDIwKTsKICAgIGNvbnN0IGRhdGEgPSB1c2VNZW1vKCgpID0+IHsKICAgICAgICBsZXQgYmFsYW5jZSA9IHA7CiAgICAgICAgY29uc3QgaGlzdG9yeSA9IFtdOwogICAgICAgIGZvciAobGV0IHllYXIgPSAwOyB5ZWFyIDw9IHk7IHllYXIrKykgewogICAgICAgICAgICBoaXN0b3J5LnB1c2goeyB5ZWFyLCBiYWxhbmNlOiBNYXRoLnJvdW5kKGJhbGFuY2UpIH0pOwogICAgICAgICAgICBiYWxhbmNlID0gKGJhbGFuY2UgKyBtICogMTIpICogKDEgKyByIC8gMTAwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhpc3Rvcnk7CiAgICB9LCBbcCwgbSwgciwgeV0pOwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJDb21wb3VuZCBJbnRlcmVzdCBDYWxjdWxhdG9yIiwgZGVzY3JpcHRpb246ICJWaXN1YWxpemUgdGhlIGV4cG9uZW50aWFsIGdyb3d0aCBvZiB5b3VyIGludmVzdG1lbnRzIG92ZXIgdGltZSB3aXRoIGludGVyYWN0aXZlIGNoYXJ0cy4iLCBpY29uOiBUcmVuZGluZ1VwLCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTZ4bCBteC1hdXRvIGdyaWQgbGc6Z3JpZC1jb2xzLTIgZ2FwLTEyIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTJ4bCBwLTYgc2hhZG93LXNtIHNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJJbml0aWFsIERlcG9zaXQiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBwLCBvbkNoYW5nZTogZSA9PiBzZXRQKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJNb250aGx5IENvbnRyaWJ1dGlvbiIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IG0sIG9uQ2hhbmdlOiBlID0+IHNldE0oTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGZvbnQtYm9sZCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIkludGVyZXN0IFJhdGUgKCUpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogciwgb25DaGFuZ2U6IGUgPT4gc2V0UihOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZm9udC1ib2xkIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiWWVhcnMgdG8gR3JvdyIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHksIG9uQ2hhbmdlOiBlID0+IHNldFkoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGZvbnQtYm9sZCIgfSldIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBiZy1lbWVyYWxkLTYwMCByb3VuZGVkLTN4bCB0ZXh0LXdoaXRlIHRleHQtY2VudGVyIHNoYWRvdy14bCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWVtZXJhbGQtMTAwIHRleHQtc20gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItMiIsIGNoaWxkcmVuOiAiRmluYWwgQmFsYW5jZSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtN3hsIGZvbnQtYmxhY2sgdGFidWxhci1udW1zIiwgY2hpbGRyZW46IFsiJCIsIGRhdGFbZGF0YS5sZW5ndGggLSAxXT8uYmFsYW5jZS50b0xvY2FsZVN0cmluZygpXSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIG1pbi1oLVs0MDBweF0iLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC02NCBmbGV4IGl0ZW1zLWVuZCBnYXAtMSBweC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCIsIGNoaWxkcmVuOiBkYXRhLm1hcCgoZCwgaSkgPT4gX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgYmctZW1lcmFsZC0xMDAgaG92ZXI6YmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnMgcm91bmRlZC10LXNtIHJlbGF0aXZlIGdyb3VwIiwgc3R5bGU6IHsgaGVpZ2h0OiBgJHsoZC5iYWxhbmNlIC8gZGF0YVtkYXRhLmxlbmd0aCAtIDFdLmJhbGFuY2UpICogMTAwfSVgIH0sIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBib3R0b20tZnVsbCBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIG1iLTIgcHgtMiBweS0xIGJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC1bMTBweF0gcm91bmRlZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsIGNoaWxkcmVuOiBbIlllYXIgIiwgZC55ZWFyLCAiOiAkIiwgZC5iYWxhbmNlLnRvTG9jYWxlU3RyaW5nKCldIH0pIH0sIGkpKSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gbXQtNCB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjaGlsZHJlbjogIlllYXIgMCIgfSksIF9qc3hzKCJzcGFuIiwgeyBjaGlsZHJlbjogWyJZZWFyICIsIHldIH0pXSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIEZyZWVsYW5jZVJhdGVDYWxjdWxhdG9yIC0tLQpleHBvcnQgY29uc3QgRnJlZWxhbmNlUmF0ZUNhbGN1bGF0b3IgPSAoKSA9PiB7CiAgICBjb25zdCBbdGFyZ2V0LCBzZXRUYXJnZXRdID0gdXNlU3RhdGUoODAwMDApOwogICAgY29uc3QgW2V4cGVuc2VzLCBzZXRFeHBlbnNlc10gPSB1c2VTdGF0ZSgxMjAwMCk7CiAgICBjb25zdCBbdGF4LCBzZXRUYXhdID0gdXNlU3RhdGUoMjUpOwogICAgY29uc3QgW2hvdXJzLCBzZXRIb3Vyc10gPSB1c2VTdGF0ZSgyNSk7CiAgICBjb25zdCBbd2Vla3MsIHNldFdlZWtzXSA9IHVzZVN0YXRlKDQ2KTsKICAgIGNvbnN0IHN1YnRvdGFsID0gdGFyZ2V0ICsgZXhwZW5zZXM7CiAgICBjb25zdCB3aXRoVGF4ID0gc3VidG90YWwgLyAoMSAtIHRheCAvIDEwMCk7CiAgICBjb25zdCB0b3RhbEhvdXJzID0gaG91cnMgKiB3ZWVrczsKICAgIGNvbnN0IHJhdGUgPSB3aXRoVGF4IC8gdG90YWxIb3VyczsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiSG91cmx5IFJhdGUgQ2FsY3VsYXRvciIsIGRlc2NyaXB0aW9uOiAiQ2FsY3VsYXRlIHlvdXIgaWRlYWwgZnJlZWxhbmNlIGhvdXJseSByYXRlIGJhc2VkIG9uIHRhcmdldCBzYWxhcnksIGV4cGVuc2VzLCBhbmQgd29ya2xvYWQuIiwgaWNvbjogQnJpZWZjYXNlLCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTR4bCBteC1hdXRvIGdyaWQgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTEyIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIlRhcmdldCBBbm51YWwgTmV0IFNhbGFyeSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHRhcmdldCwgb25DaGFuZ2U6IGUgPT4gc2V0VGFyZ2V0KE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiQW5udWFsIEJ1c2luZXNzIEV4cGVuc2VzIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogZXhwZW5zZXMsIG9uQ2hhbmdlOiBlID0+IHNldEV4cGVuc2VzKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiRXN0aW1hdGVkIFRheCBSYXRlICglKSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHRheCwgb25DaGFuZ2U6IGUgPT4gc2V0VGF4KE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBmb250LWJvbGQiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiQmlsbGFibGUgSHJzL1dlZWsiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBob3Vycywgb25DaGFuZ2U6IGUgPT4gc2V0SG91cnMoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGZvbnQtYm9sZCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJCaWxsYWJsZSBXZWVrcy9ZZWFyIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogd2Vla3MsIG9uQ2hhbmdlOiBlID0+IHNldFdlZWtzKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBmb250LWJvbGQiIH0pXSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTEyIGJnLWJsdWUtNjAwIHJvdW5kZWQtWzNyZW1dIHRleHQtd2hpdGUgc2hhZG93LTJ4bCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWJsdWUtMTAwIHRleHQtc20gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIG1iLTQiLCBjaGlsZHJlbjogIllvdXIgSG91cmx5IFJhdGUiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTh4bCBmb250LWJsYWNrIHRyYWNraW5nLXRpZ2h0ZXIgbWItNCIsIGNoaWxkcmVuOiBbIiQiLCBNYXRoLnJvdW5kKHJhdGUpXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ibHVlLTEwMCBmb250LW1lZGl1bSBvcGFjaXR5LTgwIiwgY2hpbGRyZW46IFsiQmFzZWQgb24gIiwgdG90YWxIb3VycywgIiBiaWxsYWJsZSBob3Vycy95ZWFyIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTEwIHAtNiBiZy13aGl0ZS8xMCByb3VuZGVkLTJ4bCB3LWZ1bGwgdGV4dC1jZW50ZXIgYm9yZGVyIGJvcmRlci13aGl0ZS8xMCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCB0ZXh0LWJsdWUtMjAwIG1iLTEiLCBjaGlsZHJlbjogIlRvdGFsIEdyb3NzIFJldmVudWUgVGFyZ2V0IiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ibGFjayIsIGNoaWxkcmVuOiBbIiQiLCBNYXRoLnJvdW5kKHdpdGhUYXgpLnRvTG9jYWxlU3RyaW5nKCldIH0pXSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIEludm9pY2UgR2VuZXJhdG9yIFRvb2wgLS0tCmV4cG9ydCBjb25zdCBJbnZvaWNlR2VuZXJhdG9yID0gKCkgPT4gewogICAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGUoewogICAgICAgIHNlbmRlck5hbWU6ICdZb3VyIE5hbWUgLyBCdXNpbmVzcycsCiAgICAgICAgc2VuZGVyRGV0YWlsczogJzEyMyBGcmVlbGFuY2UgU3RcbkNpdHksIENvdW50cnlcbmNvbnRhY3RAZW1haWwuY29tJywKICAgICAgICBjbGllbnROYW1lOiAnQ2xpZW50IENvbXBhbnkgTmFtZScsCiAgICAgICAgY2xpZW50RGV0YWlsczogJzQ1NiBDb3Jwb3JhdGUgQmx2ZFxuQ2l0eSwgQ291bnRyeScsCiAgICAgICAgaW52b2ljZU51bWJlcjogJ0lOVi0wMDEnLAogICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdLAogICAgICAgIGR1ZURhdGU6IG5ldyBEYXRlKERhdGUubm93KCkgKyAxNCAqIDg2NDAwMDAwKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0sCiAgICAgICAgY3VycmVuY3k6ICckJywKICAgICAgICBpdGVtczogWwogICAgICAgICAgICB7IGlkOiAnMScsIGRlc2NyaXB0aW9uOiAnV2ViIERldmVsb3BtZW50IFNlcnZpY2VzJywgcXVhbnRpdHk6IDEsIHJhdGU6IDE1MDAgfSwKICAgICAgICAgICAgeyBpZDogJzInLCBkZXNjcmlwdGlvbjogJ1VJL1VYIERlc2lnbiBQaGFzZSAxJywgcXVhbnRpdHk6IDEwLCByYXRlOiA4NSB9CiAgICAgICAgXSwKICAgICAgICB0YXhSYXRlOiAwLAogICAgICAgIG5vdGVzOiAnVGhhbmsgeW91IGZvciB5b3VyIGJ1c2luZXNzISBQYXltZW50IGlzIGR1ZSB3aXRoaW4gMTQgZGF5cy5cblBsZWFzZSBpbmNsdWRlIHRoZSBpbnZvaWNlIG51bWJlciBpbiB5b3VyIHRyYW5zZmVyLicsCiAgICB9KTsKICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBpbnZvaWNlUmVmID0gdXNlUmVmKG51bGwpOwogICAgY29uc3QgY2FsY3VsYXRlU3VidG90YWwgPSAoKSA9PiBkYXRhLml0ZW1zLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbS5xdWFudGl0eSAqIGl0ZW0ucmF0ZSksIDApOwogICAgY29uc3QgY2FsY3VsYXRlVGF4ID0gKCkgPT4gY2FsY3VsYXRlU3VidG90YWwoKSAqIChkYXRhLnRheFJhdGUgLyAxMDApOwogICAgY29uc3QgY2FsY3VsYXRlVG90YWwgPSAoKSA9PiBjYWxjdWxhdGVTdWJ0b3RhbCgpICsgY2FsY3VsYXRlVGF4KCk7CiAgICBjb25zdCB1cGRhdGVJdGVtID0gKGlkLCBmaWVsZCwgdmFsdWUpID0+IHsKICAgICAgICBzZXREYXRhKHByZXYgPT4gKHsKICAgICAgICAgICAgLi4ucHJldiwKICAgICAgICAgICAgaXRlbXM6IHByZXYuaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQgPyB7IC4uLml0ZW0sIFtmaWVsZF06IHZhbHVlIH0gOiBpdGVtKQogICAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBhZGRJdGVtID0gKCkgPT4gewogICAgICAgIHNldERhdGEocHJldiA9PiAoewogICAgICAgICAgICAuLi5wcmV2LAogICAgICAgICAgICBpdGVtczogWy4uLnByZXYuaXRlbXMsIHsgaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksIGRlc2NyaXB0aW9uOiAnTmV3IEl0ZW0nLCBxdWFudGl0eTogMSwgcmF0ZTogMCB9XQogICAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCByZW1vdmVJdGVtID0gKGlkKSA9PiB7CiAgICAgICAgc2V0RGF0YShwcmV2ID0+ICh7CiAgICAgICAgICAgIC4uLnByZXYsCiAgICAgICAgICAgIGl0ZW1zOiBwcmV2Lml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkKQogICAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBkb3dubG9hZFBkZiA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWludm9pY2VSZWYuY3VycmVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwbmdEYXRhVXJsID0gYXdhaXQgaHRtbFRvSW1hZ2UudG9QbmcoaW52b2ljZVJlZi5jdXJyZW50LCB7IHF1YWxpdHk6IDAuOTUsIHBpeGVsUmF0aW86IDIgfSk7CiAgICAgICAgICAgIGNvbnN0IHBkZkRvYyA9IGF3YWl0IFBERkRvY3VtZW50LmNyZWF0ZSgpOwogICAgICAgICAgICBjb25zdCBwbmdJbWFnZSA9IGF3YWl0IHBkZkRvYy5lbWJlZFBuZyhwbmdEYXRhVXJsKTsKICAgICAgICAgICAgY29uc3QgcG5nRGltcyA9IHBuZ0ltYWdlLnNjYWxlKDEpOwogICAgICAgICAgICBjb25zdCBwYWdlV2lkdGggPSA1OTUuMjg7CiAgICAgICAgICAgIGNvbnN0IHBhZ2VIZWlnaHQgPSA4NDEuODk7CiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IDIwOwogICAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHBhZ2VXaWR0aCAtIChtYXJnaW4gKiAyKTsKICAgICAgICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSBhdmFpbGFibGVXaWR0aCAvIHBuZ0RpbXMud2lkdGg7CiAgICAgICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHBuZ0RpbXMuaGVpZ2h0ICogc2NhbGVGYWN0b3I7CiAgICAgICAgICAgIGNvbnN0IGZpbmFsUGFnZUhlaWdodCA9IE1hdGgubWF4KHBhZ2VIZWlnaHQsIHNjYWxlZEhlaWdodCArIG1hcmdpbiAqIDIpOwogICAgICAgICAgICBjb25zdCBwYWdlID0gcGRmRG9jLmFkZFBhZ2UoW3BhZ2VXaWR0aCwgZmluYWxQYWdlSGVpZ2h0XSk7CiAgICAgICAgICAgIHBhZ2UuZHJhd0ltYWdlKHBuZ0ltYWdlLCB7IHg6IG1hcmdpbiwgeTogZmluYWxQYWdlSGVpZ2h0IC0gc2NhbGVkSGVpZ2h0IC0gbWFyZ2luLCB3aWR0aDogYXZhaWxhYmxlV2lkdGgsIGhlaWdodDogc2NhbGVkSGVpZ2h0IH0pOwogICAgICAgICAgICBjb25zdCBwZGZCeXRlcyA9IGF3YWl0IHBkZkRvYy5zYXZlKCk7CiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcGRmQnl0ZXNdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pOwogICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7CiAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBgSW52b2ljZS0ke2RhdGEuaW52b2ljZU51bWJlcn0ucGRmYDsKICAgICAgICAgICAgbGluay5jbGljaygpOwogICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBQREYuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0dlbmVyYXRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkludm9pY2UgR2VuZXJhdG9yIiwgZGVzY3JpcHRpb246ICJDcmVhdGUgcHJvZmVzc2lvbmFsIGludm9pY2VzIGZvciBmcmVlbGFuY2Ugd29yayBpbnN0YW50bHkuIEV4cG9ydCBhcyBQREYuIiwgaWNvbjogUmVjZWlwdCwgY2F0ZWdvcnk6ICJGaW5hbmNlIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgbGc6Z3JpZC1jb2xzLTIgZ2FwLTggcC04IG1heC13LVsxNjAwcHhdIG14LWF1dG8iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiBoLWZpdCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIHAtNiBzaGFkb3ctc20gc3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0yIiwgY2hpbGRyZW46IFtfanN4KEJyaWVmY2FzZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtYnJhbmQtNTAwIiB9KSwgIiBJbnZvaWNlIERldGFpbHMiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJJbnZvaWNlIE51bWJlciIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBkYXRhLmludm9pY2VOdW1iZXIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGF0YSh7IC4uLmRhdGEsIGludm9pY2VOdW1iZXI6IGUudGFyZ2V0LnZhbHVlIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgc2hhZG93LWlubmVyIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiQ3VycmVuY3kgU3ltYm9sIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGRhdGEuY3VycmVuY3ksIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGF0YSh7IC4uLmRhdGEsIGN1cnJlbmN5OiBlLnRhcmdldC52YWx1ZSB9KSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIkRhdGUiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogImRhdGUiLCB2YWx1ZTogZGF0YS5kYXRlLCBvbkNoYW5nZTogKGUpID0+IHNldERhdGEoeyAuLi5kYXRhLCBkYXRlOiBlLnRhcmdldC52YWx1ZSB9KSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIkR1ZSBEYXRlIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJkYXRlIiwgdmFsdWU6IGRhdGEuZHVlRGF0ZSwgb25DaGFuZ2U6IChlKSA9PiBzZXREYXRhKHsgLi4uZGF0YSwgZHVlRGF0ZTogZS50YXJnZXQudmFsdWUgfSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQgcHQtMiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJGcm9tIChZb3UpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGRhdGEuc2VuZGVyTmFtZSwgb25DaGFuZ2U6IChlKSA9PiBzZXREYXRhKHsgLi4uZGF0YSwgc2VuZGVyTmFtZTogZS50YXJnZXQudmFsdWUgfSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSBtYi0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIsIHBsYWNlaG9sZGVyOiAiWW91ciBOYW1lIiB9KSwgX2pzeCgidGV4dGFyZWEiLCB7IHZhbHVlOiBkYXRhLnNlbmRlckRldGFpbHMsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGF0YSh7IC4uLmRhdGEsIHNlbmRlckRldGFpbHM6IGUudGFyZ2V0LnZhbHVlIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBoLTI0IHJlc2l6ZS1ub25lIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIsIHBsYWNlaG9sZGVyOiAiQWRkcmVzcywgRW1haWwuLi4iIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJUbyAoQ2xpZW50KSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBkYXRhLmNsaWVudE5hbWUsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGF0YSh7IC4uLmRhdGEsIGNsaWVudE5hbWU6IGUudGFyZ2V0LnZhbHVlIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgbWItMiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIiLCBwbGFjZWhvbGRlcjogIkNsaWVudCBOYW1lIiB9KSwgX2pzeCgidGV4dGFyZWEiLCB7IHZhbHVlOiBkYXRhLmNsaWVudERldGFpbHMsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGF0YSh7IC4uLmRhdGEsIGNsaWVudERldGFpbHM6IGUudGFyZ2V0LnZhbHVlIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBoLTI0IHJlc2l6ZS1ub25lIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIsIHBsYWNlaG9sZGVyOiAiQ2xpZW50IEFkZHJlc3MuLi4iIH0pXSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yIiwgY2hpbGRyZW46IFtfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46ICJMaW5lIEl0ZW1zIiB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogYWRkSXRlbSwgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGJnLWJyYW5kLTUwIHRleHQtYnJhbmQtNjAwIHB4LTMgcHktMS41IHJvdW5kZWQtbGcgaG92ZXI6YmctYnJhbmQtMTAwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IFtfanN4KFBsdXMsIHsgY2xhc3NOYW1lOiAidy0zIGgtMyIgfSksICIgQWRkIEl0ZW0iXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0zIiwgY2hpbGRyZW46IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtMiBpdGVtcy1zdGFydCBncm91cCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEiLCBjaGlsZHJlbjogX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGl0ZW0uZGVzY3JpcHRpb24sIG9uQ2hhbmdlOiAoZSkgPT4gdXBkYXRlSXRlbShpdGVtLmlkLCAnZGVzY3JpcHRpb24nLCBlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIsIHBsYWNlaG9sZGVyOiAiRGVzY3JpcHRpb24iIH0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMTYiLCBjaGlsZHJlbjogX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogaXRlbS5xdWFudGl0eSwgb25DaGFuZ2U6IChlKSA9PiB1cGRhdGVJdGVtKGl0ZW0uaWQsICdxdWFudGl0eScsIE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSB0ZXh0LWNlbnRlciB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIiIH0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMjgiLCBjaGlsZHJlbjogX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogaXRlbS5yYXRlLCBvbkNoYW5nZTogKGUpID0+IHVwZGF0ZUl0ZW0oaXRlbS5pZCwgJ3JhdGUnLCBOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gdGV4dC1yaWdodCBmb250LW1vbm8gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgc2hhZG93LWlubmVyIiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiByZW1vdmVJdGVtKGl0ZW0uaWQpLCBjbGFzc05hbWU6ICJwLTIuNSB0ZXh0LWdyYXktMzAwIGhvdmVyOnRleHQtcmVkLTUwMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IiwgY2hpbGRyZW46IF9qc3goVHJhc2gyLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9LCBpdGVtLmlkKSkpIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwdC00IGJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBmbGV4IGp1c3RpZnktZW5kIGdhcC00IGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiVGF4IFJhdGUgJSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IGRhdGEudGF4UmF0ZSwgb25DaGFuZ2U6IChlKSA9PiBzZXREYXRhKHsgLi4uZGF0YSwgdGF4UmF0ZTogTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB9KSwgY2xhc3NOYW1lOiAidy0yMCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIHRleHQtcmlnaHQgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHNoYWRvdy1pbm5lciIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwdC0yIiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIG1iLTIiLCBjaGlsZHJlbjogIk5vdGVzICYgVGVybXMiIH0pLCBfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IGRhdGEubm90ZXMsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGF0YSh7IC4uLmRhdGEsIG5vdGVzOiBlLnRhcmdldC52YWx1ZSB9KSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIGgtMjQgcmVzaXplLW5vbmUgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgc2hhZG93LWlubmVyIiB9KV0gfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IGRvd25sb2FkUGRmLCBkaXNhYmxlZDogaXNHZW5lcmF0aW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1icmFuZC02MDAgaG92ZXI6YmctYnJhbmQtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBzaGFkb3ctYnJhbmQtNTAwLzIwIGRpc2FibGVkOm9wYWNpdHktNzAgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYWN0aXZlOnNjYWxlLVswLjk5XSIsIGNoaWxkcmVuOiBpc0dlbmVyYXRpbmcgPyBfanN4cyhfRnJhZ21lbnQsIHsgY2hpbGRyZW46IFtfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBhbmltYXRlLXNwaW4iIH0pLCAiIFN0YW1waW5nIFBERi4uLiJdIH0pIDogX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiBEb3dubG9hZCBQREYgSW52b2ljZSJdIH0pIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTIwMCBkYXJrOmJnLWJsYWNrIHJvdW5kZWQtMnhsIHAtNCBtZDpwLTEyIG92ZXJmbG93LWF1dG8gZmxleCBqdXN0aWZ5LWNlbnRlciBzaGFkb3ctaW5uZXIiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgcmVmOiBpbnZvaWNlUmVmLCBjbGFzc05hbWU6ICJiZy13aGl0ZSB0ZXh0LWdyYXktOTAwIHctWzIxMG1tXSBtaW4taC1bMjk3bW1dIHAtWzIwbW1dIHNoYWRvdy0yeGwgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4iLCBzdHlsZTogeyBmb250RmFtaWx5OiAiJ0ludGVyJywgc2Fucy1zZXJpZiIsIGJveFNpemluZzogJ2JvcmRlci1ib3gnIH0sIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydCBtYi0xMiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJoMSIsIHsgY2xhc3NOYW1lOiAidGV4dC00eGwgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIG1iLTIgdHJhY2tpbmctdGlnaHRlciIsIGNoaWxkcmVuOiAiSU5WT0lDRSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS00MDAgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgdGV4dC1bMTBweF0iLCBjaGlsZHJlbjogWyIjIiwgZGF0YS5pbnZvaWNlTnVtYmVyXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtcmlnaHQiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAiLCBjaGlsZHJlbjogZGF0YS5zZW5kZXJOYW1lIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtc20gdGV4dC1ncmF5LTUwMCB3aGl0ZXNwYWNlLXByZS13cmFwIG10LTEgbGVhZGluZy1yZWxheGVkIiwgY2hpbGRyZW46IGRhdGEuc2VuZGVyRGV0YWlscyB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBtYi0xNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSBtYi0zIiwgY2hpbGRyZW46ICJCaWxsIFRvIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWxnIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCIsIGNoaWxkcmVuOiBkYXRhLmNsaWVudE5hbWUgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNTAwIHdoaXRlc3BhY2UtcHJlLXdyYXAgbXQtMSBsZWFkaW5nLXJlbGF4ZWQiLCBjaGlsZHJlbjogZGF0YS5jbGllbnREZXRhaWxzIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1yaWdodCBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0gbWItMSIsIGNoaWxkcmVuOiAiSXNzdWUgRGF0ZSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTkwMCBmb250LWJvbGQiLCBjaGlsZHJlbjogZGF0YS5kYXRlIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSBtYi0xIiwgY2hpbGRyZW46ICJEdWUgRGF0ZSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTkwMCBmb250LWJvbGQiLCBjaGlsZHJlbjogZGF0YS5kdWVEYXRlIH0pXSB9KV0gfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIm1iLTgiLCBjaGlsZHJlbjogX2pzeHMoInRhYmxlIiwgeyBjbGFzc05hbWU6ICJ3LWZ1bGwgdGV4dC1sZWZ0IiwgY2hpbGRyZW46IFtfanN4KCJ0aGVhZCIsIHsgY2hpbGRyZW46IF9qc3hzKCJ0ciIsIHsgY2xhc3NOYW1lOiAiYm9yZGVyLWItMiBib3JkZXItZ3JheS05MDAiLCBjaGlsZHJlbjogW19qc3goInRoIiwgeyBjbGFzc05hbWU6ICJweS00IHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSB3LTEvMiIsIGNoaWxkcmVuOiAiRGVzY3JpcHRpb24iIH0pLCBfanN4KCJ0aCIsIHsgY2xhc3NOYW1lOiAicHktNCB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0gdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogIlF0eSIgfSksIF9qc3goInRoIiwgeyBjbGFzc05hbWU6ICJweS00IHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSB0ZXh0LXJpZ2h0IiwgY2hpbGRyZW46ICJSYXRlIiB9KSwgX2pzeCgidGgiLCB7IGNsYXNzTmFtZTogInB5LTQgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIHRleHQtcmlnaHQiLCBjaGlsZHJlbjogIkFtb3VudCIgfSldIH0pIH0pLCBfanN4KCJ0Ym9keSIsIHsgY2xhc3NOYW1lOiAiZGl2aWRlLXkgZGl2aWRlLWdyYXktMTAwIiwgY2hpbGRyZW46IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiAoX2pzeHMoInRyIiwgeyBjaGlsZHJlbjogW19qc3goInRkIiwgeyBjbGFzc05hbWU6ICJweS01IHRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS05MDAiLCBjaGlsZHJlbjogaXRlbS5kZXNjcmlwdGlvbiB9KSwgX2pzeCgidGQiLCB7IGNsYXNzTmFtZTogInB5LTUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIHRleHQtY2VudGVyIiwgY2hpbGRyZW46IGl0ZW0ucXVhbnRpdHkgfSksIF9qc3hzKCJ0ZCIsIHsgY2xhc3NOYW1lOiAicHktNSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgdGV4dC1yaWdodCIsIGNoaWxkcmVuOiBbZGF0YS5jdXJyZW5jeSwgaXRlbS5yYXRlLnRvTG9jYWxlU3RyaW5nKCldIH0pLCBfanN4cygidGQiLCB7IGNsYXNzTmFtZTogInB5LTUgdGV4dC1zbSBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgdGV4dC1yaWdodCIsIGNoaWxkcmVuOiBbZGF0YS5jdXJyZW5jeSwgKGl0ZW0ucXVhbnRpdHkgKiBpdGVtLnJhdGUpLnRvTG9jYWxlU3RyaW5nKCldIH0pXSB9LCBpdGVtLmlkKSkpIH0pXSB9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktZW5kIG1iLTEyIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInctMS8yIHNwYWNlLXktNCBwdC02IGJvcmRlci10LTIgYm9yZGVyLWdyYXktMTAwIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2hpbGRyZW46ICJTdWJ0b3RhbCIgfSksIF9qc3hzKCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktOTAwIiwgY2hpbGRyZW46IFtkYXRhLmN1cnJlbmN5LCBjYWxjdWxhdGVTdWJ0b3RhbCgpLnRvTG9jYWxlU3RyaW5nKCldIH0pXSB9KSwgZGF0YS50YXhSYXRlID4gMCAmJiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiBbX2pzeHMoInNwYW4iLCB7IGNoaWxkcmVuOiBbIlRheCAoIiwgZGF0YS50YXhSYXRlLCAiJSkiXSB9KSwgX2pzeHMoInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS05MDAiLCBjaGlsZHJlbjogW2RhdGEuY3VycmVuY3ksIGNhbGN1bGF0ZVRheCgpLnRvTG9jYWxlU3RyaW5nKCldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gdGV4dC0yeGwgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIHB0LTYgYm9yZGVyLXQtMiBib3JkZXItZ3JheS05MDAiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNoaWxkcmVuOiAiVE9UQUwiIH0pLCBfanN4cygic3BhbiIsIHsgY2hpbGRyZW46IFtkYXRhLmN1cnJlbmN5LCBjYWxjdWxhdGVUb3RhbCgpLnRvTG9jYWxlU3RyaW5nKCldIH0pXSB9KV0gfSkgfSksIGRhdGEubm90ZXMgJiYgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIHB0LTgiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIG1iLTMiLCBjaGlsZHJlbjogIk5vdGVzICYgSW5zdHJ1Y3Rpb25zIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbGVhZGluZy1yZWxheGVkIHdoaXRlc3BhY2UtcHJlLXdyYXAiLCBjaGlsZHJlbjogZGF0YS5ub3RlcyB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtMjAgdGV4dC1jZW50ZXIgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktMzAwIHVwcGVyY2FzZSB0cmFja2luZy1bMC41ZW1dIiwgY2hpbGRyZW46ICJXaXJlTmluamEgU3R1ZGlvIE91dHB1dCIgfSldIH0pXSB9KSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gQ3VycmVuY3kgQ2hhcnRzIC0tLQpleHBvcnQgY29uc3QgQ3VycmVuY3lDaGFydHMgPSAoKSA9PiB7CiAgICBjb25zdCBbY3VycmVuY3ksIHNldEN1cnJlbmN5XSA9IHVzZVN0YXRlKCdFVVInKTsKICAgIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlKFtdKTsKICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGZldGNoSGlzdG9yeSA9IGFzeW5jICgpID0+IHsKICAgICAgICBzZXRMb2FkaW5nKHRydWUpOwogICAgICAgIGNvbnN0IGhpc3RvcnkgPSBbXTsKICAgICAgICBjb25zdCBiYXNlID0gJ1VTRCc7CiAgICAgICAgY29uc3QgZGF0ZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICBkLnNldERhdGUoZC5nZXREYXRlKCkgLSAoNyAtIGkpKTsKICAgICAgICAgICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdOwogICAgICAgIH0pOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8vIFBhcmFsbGVsIGZldGNoIGZvciBsYXN0IDcgZGF5cwogICAgICAgICAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChkYXRlcy5tYXAoZGF0ZSA9PiBmZXRjaChgaHR0cHM6Ly8ke2RhdGV9LmN1cnJlbmN5LWFwaS5wYWdlcy5kZXYvdjEvY3VycmVuY2llcy8ke2Jhc2UudG9Mb3dlckNhc2UoKX0uanNvbmApCiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gcmVzLm9rID8gcmVzLmpzb24oKSA6IG51bGwpCiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4gbnVsbCkpKTsKICAgICAgICAgICAgcmVzcG9uc2VzLmZvckVhY2goKHJlcywgaSkgPT4gewogICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXNbYmFzZS50b0xvd2VyQ2FzZSgpXSkgewogICAgICAgICAgICAgICAgICAgIGhpc3RvcnkucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IGRhdGVzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICByYXRlOiBOdW1iZXIocmVzW2Jhc2UudG9Mb3dlckNhc2UoKV1bY3VycmVuY3kudG9Mb3dlckNhc2UoKV0pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBGYWxsYmFjayBpZiBBUEkgZmFpbHMgdG8gcHJvdmlkZSBoaXN0b3J5CiAgICAgICAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA8IDMpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VSYXRlID0gMSArIChNYXRoLnJhbmRvbSgpICogMS41KTsKICAgICAgICAgICAgICAgIHNldERhdGEoQXJyYXkuZnJvbSh7IGxlbmd0aDogMTAgfSwgKF8sIGkpID0+ICh7CiAgICAgICAgICAgICAgICAgICAgZGF0ZTogYERheSAke2l9YCwKICAgICAgICAgICAgICAgICAgICByYXRlOiBiYXNlUmF0ZSArIChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMQogICAgICAgICAgICAgICAgfSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHNldERhdGEoaGlzdG9yeSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICB1c2VFZmZlY3QoKCkgPT4geyBmZXRjaEhpc3RvcnkoKTsgfSwgW2N1cnJlbmN5XSk7CiAgICBjb25zdCBzdGF0cyA9IHVzZU1lbW8oKCkgPT4gewogICAgICAgIGlmICghZGF0YS5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGNvbnN0IHJhdGVzID0gZGF0YS5tYXAoZCA9PiBkLnJhdGUpOwogICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLnJhdGVzKTsKICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5yYXRlcyk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IHJhdGVzW3JhdGVzLmxlbmd0aCAtIDFdOwogICAgICAgIGNvbnN0IGZpcnN0ID0gcmF0ZXNbMF07CiAgICAgICAgY29uc3QgY2hhbmdlID0gKChjdXJyZW50IC0gZmlyc3QpIC8gZmlyc3QpICogMTAwOwogICAgICAgIHJldHVybiB7IG1pbiwgbWF4LCBjdXJyZW50LCBjaGFuZ2UgfTsKICAgIH0sIFtkYXRhXSk7CiAgICBjb25zdCBTdmdMaW5lQ2hhcnQgPSAoKSA9PiB7CiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3Qgd2lkdGggPSA4MDA7CiAgICAgICAgY29uc3QgaGVpZ2h0ID0gMzAwOwogICAgICAgIGNvbnN0IHBhZGRpbmcgPSA0MDsKICAgICAgICBjb25zdCByYXRlcyA9IGRhdGEubWFwKGQgPT4gZC5yYXRlKTsKICAgICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5yYXRlcyk7CiAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4ucmF0ZXMpOwogICAgICAgIGNvbnN0IHJhbmdlID0gbWF4IC0gbWluIHx8IDE7CiAgICAgICAgY29uc3QgcG9pbnRzID0gZGF0YS5tYXAoKGQsIGkpID0+IHsKICAgICAgICAgICAgY29uc3QgeCA9IHBhZGRpbmcgKyAoaSAvIChkYXRhLmxlbmd0aCAtIDEpKSAqICh3aWR0aCAtIHBhZGRpbmcgKiAyKTsKICAgICAgICAgICAgY29uc3QgeSA9IChoZWlnaHQgLSBwYWRkaW5nKSAtICgoZC5yYXRlIC0gbWluKSAvIHJhbmdlKSAqIChoZWlnaHQgLSBwYWRkaW5nICogMik7CiAgICAgICAgICAgIHJldHVybiBgJHt4fSwke3l9YDsKICAgICAgICB9KS5qb2luKCcgJyk7CiAgICAgICAgcmV0dXJuIChfanN4cygic3ZnIiwgeyB2aWV3Qm94OiBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWAsIGNsYXNzTmFtZTogInctZnVsbCBoLWZ1bGwgb3ZlcmZsb3ctdmlzaWJsZSIsIGNoaWxkcmVuOiBbX2pzeCgicGF0aCIsIHsgZDogYE0gJHtwb2ludHN9YCwgZmlsbDogIm5vbmUiLCBzdHJva2U6ICIjNjM1YmZmIiwgc3Ryb2tlV2lkdGg6ICI0Iiwgc3Ryb2tlTGluZWNhcDogInJvdW5kIiwgc3Ryb2tlTGluZWpvaW46ICJyb3VuZCIsIGNsYXNzTmFtZTogImRyb3Atc2hhZG93LWxnIiB9KSwgZGF0YS5tYXAoKGQsIGkpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gcGFkZGluZyArIChpIC8gKGRhdGEubGVuZ3RoIC0gMSkpICogKHdpZHRoIC0gcGFkZGluZyAqIDIpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSAoaGVpZ2h0IC0gcGFkZGluZykgLSAoKGQucmF0ZSAtIG1pbikgLyByYW5nZSkgKiAoaGVpZ2h0IC0gcGFkZGluZyAqIDIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeCgiY2lyY2xlIiwgeyBjeDogeCwgY3k6IHksIHI6ICI1IiwgZmlsbDogIiM2MzViZmYiLCBjbGFzc05hbWU6ICJob3ZlcjpyLTggdHJhbnNpdGlvbi1hbGwgY3Vyc29yLWNyb3NzaGFpciIsIGNoaWxkcmVuOiBfanN4cygidGl0bGUiLCB7IGNoaWxkcmVuOiBbZC5kYXRlLCAiOiAiLCBkLnJhdGUudG9GaXhlZCg0KV0gfSkgfSwgaSkpOwogICAgICAgICAgICAgICAgfSldIH0pKTsKICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkxpdmUgQ3VycmVuY3kgVHJlbmRzIiwgZGVzY3JpcHRpb246ICJBbmFseXplIGV4Y2hhbmdlIHJhdGUgdm9sYXRpbGl0eSBhbmQgaGlzdG9yaWNhbCBwZXJmb3JtYW5jZSB3aXRoIHByZWNpc2lvbiBkYXRhIHZpc3VhbGl6YXRpb24uIiwgaWNvbjogTGluZUNoYXJ0LCBjYXRlZ29yeTogIkZpbmFuY2UiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IG1heC13LTZ4bCBteC1hdXRvIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIHAtNiBzaGFkb3ctc20gZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSB3LWZ1bGwiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi0yIG1sLTEiLCBjaGlsZHJlbjogIkFzc2V0ICh2cyBVU0QpIiB9KSwgX2pzeCgic2VsZWN0IiwgeyB2YWx1ZTogY3VycmVuY3ksIG9uQ2hhbmdlOiAoZSkgPT4gc2V0Q3VycmVuY3koZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYmxhY2sgdGV4dC14bCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgc2hhZG93LWlubmVyIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlciIsIGNoaWxkcmVuOiBDVVJSRU5DSUVTLm1hcChjID0+IF9qc3hzKCJvcHRpb24iLCB7IHZhbHVlOiBjLmNvZGUsIGNoaWxkcmVuOiBbYy5jb2RlLCAiIFx1MjAxNCAiLCBjLm5hbWVdIH0sIGMuY29kZSkpIH0pXSB9KSwgc3RhdHMgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTQgZ2FwLTQgdy1mdWxsIG1kOnctYXV0byIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicHgtNSBweS0yIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkN1cnJlbnQiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtbGcgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiBzdGF0cy5jdXJyZW50LnRvRml4ZWQoNCkgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJweC01IHB5LTIgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCB0ZXh0LWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiSGlnaCIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1sZyBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IHN0YXRzLm1heC50b0ZpeGVkKDQpIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicHgtNSBweS0yIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkxvdyIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1sZyBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IHN0YXRzLm1pbi50b0ZpeGVkKDQpIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicHgtNSBweS0yIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIjdEIENoYW5nZSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogYHRleHQtbGcgZm9udC1ibGFjayAke3N0YXRzLmNoYW5nZSA+PSAwID8gJ3RleHQtZW1lcmFsZC02MDAnIDogJ3RleHQtcm9zZS02MDAnfWAsIGNoaWxkcmVuOiBbc3RhdHMuY2hhbmdlID49IDAgPyAnKycgOiAnJywgc3RhdHMuY2hhbmdlLnRvRml4ZWQoMiksICIlIl0gfSldIH0pXSB9KSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay04MDAgcm91bmRlZC0zeGwgcC04IG1kOnAtMTIgc2hhZG93LTJ4bCByZWxhdGl2ZSBtaW4taC1bNDUwcHhdIGZsZXggZmxleC1jb2wiLCBjaGlsZHJlbjogW2xvYWRpbmcgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgaW5zZXQtMCB6LTIwIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXdoaXRlLzgwIGRhcms6YmctZGFyay05NTAvODAgYmFja2Ryb3AtYmx1ci1zbSByb3VuZGVkLTN4bCIsIGNoaWxkcmVuOiBbX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogInctMTIgaC0xMiB0ZXh0LWJyYW5kLTYwMCBhbmltYXRlLXNwaW4gbWItNCIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgdGV4dC1ncmF5LTUwMCBhbmltYXRlLXB1bHNlIiwgY2hpbGRyZW46ICJGZXRjaGluZyBNYXJrZXQgRGF0YS4uLiIgfSldIH0pKSA6IG51bGwsIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHctZnVsbCByZWxhdGl2ZSBncm91cCIsIGNoaWxkcmVuOiBfanN4KFN2Z0xpbmVDaGFydCwge30pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC04IHB0LTggYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstOTAwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjJlbV0iLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNoaWxkcmVuOiBkYXRhWzBdPy5kYXRlIHx8ICdTdGFydCcgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMiBoLTIgcm91bmRlZC1mdWxsIGJnLWJyYW5kLTUwMCBhbmltYXRlLXB1bHNlIiB9KSwgIiBMaXZlIEFuYWx5c2lzIEFjdGl2ZSJdIH0pLCBfanN4KCJzcGFuIiwgeyBjaGlsZHJlbjogIlRvZGF5IiB9KV0gfSldIH0pXSB9KSB9KSk7Cn07CmV4cG9ydCBjb25zdCBJbmZsYXRpb25DYWxjdWxhdG9yID0gKCkgPT4gewogICAgY29uc3QgW2Ftb3VudCwgc2V0QW1vdW50XSA9IHVzZVN0YXRlKDEwMCk7CiAgICBjb25zdCBbeWVhckEsIHNldFllYXJBXSA9IHVzZVN0YXRlKDIwMDApOwogICAgY29uc3QgW3llYXJCLCBzZXRZZWFyQl0gPSB1c2VTdGF0ZSgyMDI0KTsKICAgIGNvbnN0IFtjb3VudHJ5LCBzZXRDb3VudHJ5XSA9IHVzZVN0YXRlKCdVbml0ZWQgU3RhdGVzJyk7CiAgICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBjYWxjdWxhdGUgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgQ2FsY3VsYXRlIGluZmxhdGlvbiBmb3IgJHthbW91bnR9IGN1cnJlbmN5IHVuaXRzIGluICR7Y291bnRyeX0gZnJvbSAke3llYXJBfSB0byAke3llYXJCfS4gUmV0dXJuIHN0cmljdGx5IEpTT046IHsgImFkanVzdGVkQW1vdW50IjogbnVtYmVyLCAiY3VtdWxhdGl2ZUluZmxhdGlvbiI6ICJzdHJpbmciLCAiYXZlcmFnZUluZmxhdGlvbiI6ICJzdHJpbmciLCAiY3VycmVuY3lTeW1ib2wiOiAic3RyaW5nIiwgImV4cGxhbmF0aW9uIjogInN0cmluZyIgfS5gOwogICAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHByb21wdCk7CiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHRleHQucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKSk7CiAgICAgICAgICAgIHNldFJlc3VsdChqc29uKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgYWxlcnQoIkluZmxhdGlvbiBjYWxjdWxhdGlvbiBmYWlsZWQuIFBsZWFzZSB2ZXJpZnkgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiSW5mbGF0aW9uIENhbGN1bGF0b3IiLCBkZXNjcmlwdGlvbjogIlZpc3VhbGl6ZSB0aGUgaW1wYWN0IG9mIGhpc3RvcmljIGluZmxhdGlvbiBvbiBwdXJjaGFzaW5nIHBvd2VyIGFjcm9zcyBnbG9iYWwgZWNvbm9taWVzLiIsIGljb246IENhbGN1bGF0b3IsIGNhdGVnb3J5OiAiRmluYW5jZSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctMnhsIG14LWF1dG8gc3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkJhc2UgQW1vdW50IiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogYW1vdW50LCBvbkNoYW5nZTogZSA9PiBzZXRBbW91bnQoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTQgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgZm9udC1ibGFjayB0ZXh0LTJ4bCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIkZyb20gKFllYXIpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogeWVhckEsIG9uQ2hhbmdlOiBlID0+IHNldFllYXJBKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0yIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiAiVG8gKFllYXIpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogeWVhckIsIG9uQ2hhbmdlOiBlID0+IHNldFllYXJCKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgbWItMiB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIlJlZ2lvbiIgfSksIF9qc3goInNlbGVjdCIsIHsgdmFsdWU6IGNvdW50cnksIG9uQ2hhbmdlOiBlID0+IHNldENvdW50cnkoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBzaGFkb3ctaW5uZXIiLCBjaGlsZHJlbjogR0xPQkFMX0NPVU5UUklFUy5tYXAoYyA9PiBfanN4KCJvcHRpb24iLCB7IHZhbHVlOiBjLCBjaGlsZHJlbjogYyB9LCBjKSkgfSldIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBjYWxjdWxhdGUsIGRpc2FibGVkOiBsb2FkaW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1icmFuZC02MDAgaG92ZXI6YmctYnJhbmQtNzAwIHRleHQtd2hpdGUgZm9udC1ibGFjayByb3VuZGVkLXhsIHNoYWRvdy1sZyBhY3RpdmU6c2NhbGUtWzAuOTldIHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtsb2FkaW5nID8gX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogImFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KENhbGN1bGF0b3IsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgQ2FsY3VsYXRlIFB1cmNoYXNpbmcgUG93ZXIiXSB9KV0gfSksIHJlc3VsdCAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtM3hsIHAtOCBzaGFkb3cteGwgYW5pbWF0ZS1pbiBmYWRlLWluIHNsaWRlLWluLWZyb20tYm90dG9tLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIG1iLTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItMiIsIGNoaWxkcmVuOiBbIkVxdWl2YWxlbnQgVmFsdWUgaW4gIiwgeWVhckJdIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTZ4bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRhYnVsYXItbnVtcyIsIGNoaWxkcmVuOiBbcmVzdWx0LmN1cnJlbmN5U3ltYm9sLCByZXN1bHQuYWRqdXN0ZWRBbW91bnQudG9Mb2NhbGVTdHJpbmcoKV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IG1iLTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBiZy1yb3NlLTUwIGRhcms6Ymctcm9zZS05NTAvMjAgcm91bmRlZC14bCB0ZXh0LWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHRleHQtcm9zZS01MDAgdXBwZXJjYXNlIiwgY2hpbGRyZW46ICJDdW11bGF0aXZlIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYmxhY2sgdGV4dC1yb3NlLTcwMCBkYXJrOnRleHQtcm9zZS00MDAiLCBjaGlsZHJlbjogcmVzdWx0LmN1bXVsYXRpdmVJbmZsYXRpb24gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTQgYmctYmx1ZS01MCBkYXJrOmJnLWJsdWUtOTUwLzIwIHJvdW5kZWQteGwgdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWJsdWUtNTAwIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiAiQXZnLiBBbm51YWwiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ibGFjayB0ZXh0LWJsdWUtNzAwIGRhcms6dGV4dC1ibHVlLTQwMCIsIGNoaWxkcmVuOiByZXN1bHQuYXZlcmFnZUluZmxhdGlvbiB9KV0gfSldIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTQwMCB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LWNlbnRlciBweC00IiwgY2hpbGRyZW46IHJlc3VsdC5leHBsYW5hdGlvbiB9KV0gfSkpXSB9KSB9KSk7Cn07CmV4cG9ydCBjb25zdCBTdG9ja0FuYWx5emVyID0gKCkgPT4gewogICAgY29uc3QgW3N5bWJvbCwgc2V0U3ltYm9sXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtyZXBvcnQsIHNldFJlcG9ydF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGFuYWx5emUgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRMb2FkaW5nKHRydWUpOwogICAgICAgIHNldFJlcG9ydChudWxsKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBnZW5lcmF0ZVdpdGhTZWFyY2goYFByb3ZpZGUgYSBwcm9mZXNzaW9uYWwgcmVhbC10aW1lIHN0b2NrIGFuYWx5c2lzIGZvciB0aWNrZXIgIiR7c3ltYm9sfSIuIEluY2x1ZGUgY3VycmVudCBlc3RpbWF0ZWQgcHJpY2UsIDUyLXdlZWsgY29udGV4dCwgcmVjZW50IG1ham9yIG5ld3MsIGFuZCBtYXJrZXQgc2VudGltZW50LiBNYWludGFpbiBhIG5ldXRyYWwsIGRhdGEtZHJpdmVuIHRvbmUuYCk7CiAgICAgICAgICAgIHNldFJlcG9ydChyZXMpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBhbGVydCgiQW5hbHlzaXMgZmFpbGVkLiBUaWNrZXIgc3ltYm9sIG5vdCByZWNvZ25pemVkIG9yIG5ldHdvcmsgZXJyb3IuIik7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJTdG9jayBBbmFseXplciIsIGRlc2NyaXB0aW9uOiAiTGV2ZXJhZ2UgQUkgYW5kIHJlYWwtdGltZSBHb29nbGUgU2VhcmNoIGdyb3VuZGluZyB0byBwZXJmb3JtIGluc3RhbnQgdGVjaG5pY2FsIGFuZCBmdW5kYW1lbnRhbCBzdG9jayBhbmFseXNpcy4iLCBpY29uOiBCYXJDaGFydDMsIGNhdGVnb3J5OiAiRmluYW5jZSIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNHhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC00IiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogc3ltYm9sLCBvbkNoYW5nZTogZSA9PiBzZXRTeW1ib2woZS50YXJnZXQudmFsdWUudG9VcHBlckNhc2UoKSksIHBsYWNlaG9sZGVyOiAiRW50ZXIgVGlja2VyIChlLmcuIFRTTEEsIEFBUEwsIEJUQykuLi4iLCBjbGFzc05hbWU6ICJmbGV4LTEgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvbnQtYmxhY2sgdGV4dC14bCBzaGFkb3ctaW5uZXIgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiBhbmFseXplLCBkaXNhYmxlZDogbG9hZGluZyB8fCAhc3ltYm9sLCBjbGFzc05hbWU6ICJweC0xMCBiZy1icmFuZC02MDAgaG92ZXI6YmctYnJhbmQtNzAwIHRleHQtd2hpdGUgZm9udC1ibGFjayByb3VuZGVkLXhsIHNoYWRvdy1sZyBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogbG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJhbmltYXRlLXNwaW4iIH0pIDogJ0FuYWx5emUnIH0pXSB9KSwgcmVwb3J0ICYmIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay04MDAgcm91bmRlZC0zeGwgcC0xMCBzaGFkb3cteGwgYW5pbWF0ZS1pbiBmYWRlLWluIHNsaWRlLWluLWZyb20tYm90dG9tLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYmxhY2sgdGV4dC14cyB1cHBlcmNhc2UgdGV4dC1icmFuZC02MDAgdHJhY2tpbmctd2lkZXN0IG1iLTYiLCBjaGlsZHJlbjogW19qc3goU3BhcmtsZXMsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgQUkgTWFya2V0IEludGVsbGlnZW5jZSBSZXBvcnQiXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwcm9zZSBwcm9zZS1icmFuZCBkYXJrOnByb3NlLWludmVydCBtYXgtdy1ub25lIiwgY2hpbGRyZW46IF9qc3goInAiLCB7IGNsYXNzTmFtZTogIndoaXRlc3BhY2UtcHJlLXdyYXAgdGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgdGV4dC1sZyBsZWFkaW5nLXJlbGF4ZWQiLCBjaGlsZHJlbjogcmVwb3J0LnRleHQgfSkgfSksIHJlcG9ydC5zb3VyY2VzLmxlbmd0aCA+IDAgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTEwIHB0LTggYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIiwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi00IiwgY2hpbGRyZW46ICJWZXJpZmljYXRpb24gU291cmNlcyIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBzbTpncmlkLWNvbHMtMiBnYXAtMyIsIGNoaWxkcmVuOiByZXBvcnQuc291cmNlcy5tYXAoKHMsIGkpID0+IF9qc3goImEiLCB7IGhyZWY6IHMudXJpLCB0YXJnZXQ6ICJfYmxhbmsiLCByZWw6ICJub3JlZmVycmVyIiwgY2xhc3NOYW1lOiAicC0zIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtbGcgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1icmFuZC02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdHJ1bmNhdGUiLCBjaGlsZHJlbjogcy50aXRsZSB9LCBpKSkgfSldIH0pKV0gfSkpXSB9KSB9KSk7Cn07Cg==","@/components/Tools/CodingTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBDb3B5LCBDaGVjaywgSGFzaCwgU2hpZWxkQ2hlY2ssIEdsb2JlLCBMb2FkZXIyIH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKaW1wb3J0IHsgVG9vbExheW91dCB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29sTGF5b3V0JzsKaW1wb3J0IENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7CmV4cG9ydCBjb25zdCBEb21haW5Ub0lwQ29udmVydGVyID0gKCkgPT4gewogICAgY29uc3QgW2RvbWFpbiwgc2V0RG9tYWluXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtyZXN1bHRzLCBzZXRSZXN1bHRzXSA9IHVzZVN0YXRlKFtdKTsKICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgaGFuZGxlUmVzb2x2ZSA9IGFzeW5jIChlKSA9PiB7CiAgICAgICAgaWYgKGUpCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAoIWRvbWFpbi50cmltKCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7CiAgICAgICAgc2V0RXJyb3IobnVsbCk7CiAgICAgICAgc2V0UmVzdWx0cyhbXSk7CiAgICAgICAgbGV0IGNsZWFuID0gZG9tYWluLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL14oPzpodHRwcz86XC9cLyk/KD86d3d3XC4pPy8sICIiKS5zcGxpdCgnLycpWzBdOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IGZldGNoRG5zID0gYXN5bmMgKHR5cGUpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL2Rucy5nb29nbGUvcmVzb2x2ZT9uYW1lPSR7Y2xlYW59JnR5cGU9JHt0eXBlfWApOwogICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNvbnN0IFtkYXRhQSwgZGF0YUFBQUFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2ZldGNoRG5zKCdBJyksIGZldGNoRG5zKCdBQUFBJyldKTsKICAgICAgICAgICAgY29uc3QgbmV3UmVzdWx0cyA9IFtdOwogICAgICAgICAgICBpZiAoZGF0YUEuU3RhdHVzID09PSAwICYmIGRhdGFBLkFuc3dlcikKICAgICAgICAgICAgICAgIGRhdGFBLkFuc3dlci5mb3JFYWNoKChyZWMpID0+IHsgaWYgKHJlYy50eXBlID09PSAxKQogICAgICAgICAgICAgICAgICAgIG5ld1Jlc3VsdHMucHVzaCh7IGlwOiByZWMuZGF0YSwgdHlwZTogJ0lQdjQnIH0pOyB9KTsKICAgICAgICAgICAgaWYgKGRhdGFBQUFBLlN0YXR1cyA9PT0gMCAmJiBkYXRhQUFBQS5BbnN3ZXIpCiAgICAgICAgICAgICAgICBkYXRhQUFBQS5BbnN3ZXIuZm9yRWFjaCgocmVjKSA9PiB7IGlmIChyZWMudHlwZSA9PT0gMjgpCiAgICAgICAgICAgICAgICAgICAgbmV3UmVzdWx0cy5wdXNoKHsgaXA6IHJlYy5kYXRhLCB0eXBlOiAnSVB2NicgfSk7IH0pOwogICAgICAgICAgICBpZiAobmV3UmVzdWx0cy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgICBzZXRFcnJvcihkYXRhQS5TdGF0dXMgPT09IDMgPyAnRG9tYWluIG5vdCBmb3VuZC4nIDogJ05vIElQIHJlY29yZHMgZm91bmQuJyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNldFJlc3VsdHMobmV3UmVzdWx0cyk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgc2V0RXJyb3IoJ05ldHdvcmsgZXJyb3IuIFVuYWJsZSB0byByZXNvbHZlIGRvbWFpbi4nKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiRG9tYWluIHRvIElQIFJlc29sdmVyIiwgZGVzY3JpcHRpb246ICJSZXNvbHZlIGRvbWFpbiBuYW1lcyB0byBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBpbnN0YW50bHkuIiwgaWNvbjogR2xvYmUsIGNhdGVnb3J5OiAiQ29kaW5nIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy0yeGwgbXgtYXV0byIsIGNoaWxkcmVuOiBbX2pzeHMoImZvcm0iLCB7IG9uU3VibWl0OiBoYW5kbGVSZXNvbHZlLCBjbGFzc05hbWU6ICJmbGV4IGdhcC00IG1iLTEwIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJyZWxhdGl2ZSBmbGV4LTEiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCBwbC00IGZsZXggaXRlbXMtY2VudGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgdGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiBfanN4KEdsb2JlLCB7IGNsYXNzTmFtZTogImgtNSB3LTUiIH0pIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogZG9tYWluLCBvbkNoYW5nZTogKGUpID0+IHNldERvbWFpbihlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiZXhhbXBsZS5jb20iLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcGwtMTIgcHItNCBweS00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvbnQtYm9sZCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgc2hhZG93LWlubmVyIiB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgdHlwZTogInN1Ym1pdCIsIGRpc2FibGVkOiBpc0xvYWRpbmcgfHwgIWRvbWFpbi50cmltKCksIGNsYXNzTmFtZTogInB4LTggYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIGFjdGl2ZTpzY2FsZS05NSBkaXNhYmxlZDpvcGFjaXR5LTUwIGZsZXggaXRlbXMtY2VudGVyIiwgY2hpbGRyZW46IGlzTG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IGFuaW1hdGUtc3BpbiIgfSkgOiAnUmVzb2x2ZScgfSldIH0pLCByZXN1bHRzLmxlbmd0aCA+IDAgJiYgKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20iLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJkaXZpZGUteSBkaXZpZGUtZ3JheS0xMDAgZGFyazpkaXZpZGUtZGFyay04MDAiLCBjaGlsZHJlbjogcmVzdWx0cy5tYXAoKHJlcywgaSkgPT4gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ3JvdXAiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC00IiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6IGBweC0yLjUgcHktMSByb3VuZGVkLWxnIHRleHQtWzEwcHhdIGZvbnQtYmxhY2sgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCAke3Jlcy50eXBlID09PSAnSVB2NCcgPyAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTcwMCcgOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS03MDAnfWAsIGNoaWxkcmVuOiByZXMudHlwZSB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAiZm9udC1tb25vIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC1ncmF5LTEwMCIsIGNoaWxkcmVuOiByZXMuaXAgfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHJlcy5pcCksIGNsYXNzTmFtZTogInAtMiB0ZXh0LWdyYXktMzAwIGhvdmVyOnRleHQtYnJhbmQtNjAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLWFsbCIsIGNoaWxkcmVuOiBfanN4KENvcHksIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSldIH0sIGkpKSkgfSkgfSkpLCBlcnJvciAmJiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBiZy1yZWQtNTAgdGV4dC1yZWQtNjAwIHJvdW5kZWQteGwgdGV4dC1jZW50ZXIgZm9udC1ib2xkIHRleHQtc20gYm9yZGVyIGJvcmRlci1yZWQtMTAwIiwgY2hpbGRyZW46IGVycm9yIH0pXSB9KSB9KSk7Cn07CmV4cG9ydCBjb25zdCBNZDVHZW5lcmF0b3IgPSAoKSA9PiB7CiAgICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZSgnZW5jcnlwdCcpOwogICAgY29uc3QgW2lucHV0VGV4dCwgc2V0SW5wdXRUZXh0XSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtoYXNoLCBzZXRIYXNoXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbdmVyaWZ5SGFzaCwgc2V0VmVyaWZ5SGFzaF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbdmVyaWZ5VGV4dCwgc2V0VmVyaWZ5VGV4dF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbaXNNYXRjaCwgc2V0SXNNYXRjaF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7IHNldEhhc2goaW5wdXRUZXh0ID8gQ3J5cHRvSlMuTUQ1KGlucHV0VGV4dCkudG9TdHJpbmcoKSA6ICcnKTsgfSwgW2lucHV0VGV4dF0pOwogICAgdXNlRWZmZWN0KCgpID0+IHsgc2V0SXNNYXRjaCh2ZXJpZnlIYXNoICYmIHZlcmlmeVRleHQgPyBDcnlwdG9KUy5NRDUodmVyaWZ5VGV4dCkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB2ZXJpZnlIYXNoLnRvTG93ZXJDYXNlKCkudHJpbSgpIDogbnVsbCk7IH0sIFt2ZXJpZnlIYXNoLCB2ZXJpZnlUZXh0XSk7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIk1ENSBFbmNyeXB0ICYgVmVyaWZ5IiwgZGVzY3JpcHRpb246ICJHZW5lcmF0ZSBvciB2ZXJpZnkgTUQ1IGhhc2hlcyBmb3IgYW55IHRleHQgc3RyaW5nLiIsIGljb246IEhhc2gsIGNhdGVnb3J5OiAiQ29kaW5nIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHAtMSByb3VuZGVkLTJ4bCBtYi0xMCBtYXgtdy1tZCBteC1hdXRvIHNoYWRvdy1pbm5lciIsIGNoaWxkcmVuOiBbX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRNb2RlKCdlbmNyeXB0JyksIGNsYXNzTmFtZTogYGZsZXgtMSBweS0zIHRleHQteHMgZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHJvdW5kZWQteGwgdHJhbnNpdGlvbi1hbGwgJHttb2RlID09PSAnZW5jcnlwdCcgPyAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTcwMCB0ZXh0LWJyYW5kLTYwMCBzaGFkb3ctbWQnIDogJ3RleHQtZ3JheS01MDAnfWAsIGNoaWxkcmVuOiAiRW5jcnlwdCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0TW9kZSgndmVyaWZ5JyksIGNsYXNzTmFtZTogYGZsZXgtMSBweS0zIHRleHQteHMgZm9udC1ibGFjayB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHJvdW5kZWQteGwgdHJhbnNpdGlvbi1hbGwgJHttb2RlID09PSAndmVyaWZ5JyA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstNzAwIHRleHQtYnJhbmQtNjAwIHNoYWRvdy1tZCcgOiAndGV4dC1ncmF5LTUwMCd9YCwgY2hpbGRyZW46ICJWZXJpZnkiIH0pXSB9KSwgbW9kZSA9PT0gJ2VuY3J5cHQnID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTEwIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWwtMSIsIGNoaWxkcmVuOiAiSW5wdXQgVGV4dCIgfSksIF9qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogaW5wdXRUZXh0LCBvbkNoYW5nZTogKGUpID0+IHNldElucHV0VGV4dChlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiVHlwZSBoZXJlLi4uIiwgY2xhc3NOYW1lOiAidy1mdWxsIGgtNDggcC02IHJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb250LW1vbm8gdGV4dC1zbSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgc2hhZG93LWlubmVyIHJlc2l6ZS1ub25lIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtbC0xIiwgY2hpbGRyZW46ICJNRDUgSGFzaCIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInJlbGF0aXZlIiwgY2hpbGRyZW46IFtfanN4KCJ0ZXh0YXJlYSIsIHsgcmVhZE9ubHk6IHRydWUsIHZhbHVlOiBoYXNoLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC00OCBwLTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05MDAgdGV4dC1icmFuZC02MDAgZm9udC1tb25vIHRleHQtc20gcmVzaXplLW5vbmUiIH0pLCBoYXNoICYmIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4geyBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoYXNoKTsgc2V0Q29waWVkKHRydWUpOyBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZChmYWxzZSksIDIwMDApOyB9LCBjbGFzc05hbWU6ICJhYnNvbHV0ZSB0b3AtNCByaWdodC00IHAtMyBiZy13aGl0ZSBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQteGwgc2hhZG93LW1kIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWJyYW5kLTYwMCB0cmFuc2l0aW9uLWFsbCIsIGNoaWxkcmVuOiBjb3BpZWQgPyBfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1ncmVlbi01MDAiIH0pIDogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KV0gfSldIH0pKSA6IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtYXgtdy0yeGwgbXgtYXV0byBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2ZXJpZnlIYXNoLCBvbkNoYW5nZTogKGUpID0+IHNldFZlcmlmeUhhc2goZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIlBhc3RlIE1ENSBIYXNoLi4uIiwgY2xhc3NOYW1lOiAidy1mdWxsIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb250LW1vbm8gc2hhZG93LWlubmVyIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHZlcmlmeVRleHQsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VmVyaWZ5VGV4dChlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiRW50ZXIgVGV4dC4uLiIsIGNsYXNzTmFtZTogInctZnVsbCBwLTQgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLXdoaXRlIGRhcms6YmctZGFyay05NTAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgZm9udC1tb25vIHNoYWRvdy1pbm5lciIgfSksIGlzTWF0Y2ggIT09IG51bGwgJiYgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6IGBwLTYgcm91bmRlZC0yeGwgYm9yZGVyIHRleHQtY2VudGVyIGZvbnQtYmxhY2sgdGV4dC1sZyAke2lzTWF0Y2ggPyAnYmctZ3JlZW4tNTAgYm9yZGVyLWdyZWVuLTIwMCB0ZXh0LWdyZWVuLTcwMCcgOiAnYmctcmVkLTUwIGJvcmRlci1yZWQtMjAwIHRleHQtcmVkLTcwMCd9YCwgY2hpbGRyZW46IGlzTWF0Y2ggPyAnTWF0Y2ggRm91bmQg4pyTJyA6ICdNaXNtYXRjaCDinJcnIH0pXSB9KSldIH0pIH0pKTsKfTsKZXhwb3J0IGNvbnN0IFNoYTI1NkdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFttb2RlLCBzZXRNb2RlXSA9IHVzZVN0YXRlKCdlbmNyeXB0Jyk7CiAgICBjb25zdCBbaW5wdXRUZXh0LCBzZXRJbnB1dFRleHRdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2hhc2gsIHNldEhhc2hdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFt2ZXJpZnlIYXNoLCBzZXRWZXJpZnlIYXNoXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFt2ZXJpZnlUZXh0LCBzZXRWZXJpZnlUZXh0XSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtpc01hdGNoLCBzZXRJc01hdGNoXSA9IHVzZVN0YXRlKG51bGwpOwogICAgdXNlRWZmZWN0KCgpID0+IHsgc2V0SGFzaChpbnB1dFRleHQgPyBDcnlwdG9KUy5TSEEyNTYoaW5wdXRUZXh0KS50b1N0cmluZygpIDogJycpOyB9LCBbaW5wdXRUZXh0XSk7CiAgICB1c2VFZmZlY3QoKCkgPT4geyBzZXRJc01hdGNoKHZlcmlmeUhhc2ggJiYgdmVyaWZ5VGV4dCA/IENyeXB0b0pTLlNIQTI1Nih2ZXJpZnlUZXh0KS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IHZlcmlmeUhhc2gudG9Mb3dlckNhc2UoKS50cmltKCkgOiBudWxsKTsgfSwgW3ZlcmlmeUhhc2gsIHZlcmlmeVRleHRdKTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiU0hBMjU2IEVuY3J5cHQgJiBWZXJpZnkiLCBkZXNjcmlwdGlvbjogIkdlbmVyYXRlIG9yIHZlcmlmeSBzZWN1cmUgU0hBMjU2IGhhc2hlcy4iLCBpY29uOiBTaGllbGRDaGVjaywgY2F0ZWdvcnk6ICJDb2RpbmciLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcC0xIHJvdW5kZWQtMnhsIG1iLTEwIG1heC13LW1kIG14LWF1dG8gc2hhZG93LWlubmVyIiwgY2hpbGRyZW46IFtfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldE1vZGUoJ2VuY3J5cHQnKSwgY2xhc3NOYW1lOiBgZmxleC0xIHB5LTMgdGV4dC14cyBmb250LWJsYWNrIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3Qgcm91bmRlZC14bCB0cmFuc2l0aW9uLWFsbCAke21vZGUgPT09ICdlbmNyeXB0JyA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstNzAwIHRleHQtYnJhbmQtNjAwIHNoYWRvdy1tZCcgOiAndGV4dC1ncmF5LTUwMCd9YCwgY2hpbGRyZW46ICJFbmNyeXB0IiB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRNb2RlKCd2ZXJpZnknKSwgY2xhc3NOYW1lOiBgZmxleC0xIHB5LTMgdGV4dC14cyBmb250LWJsYWNrIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3Qgcm91bmRlZC14bCB0cmFuc2l0aW9uLWFsbCAke21vZGUgPT09ICd2ZXJpZnknID8gJ2JnLXdoaXRlIGRhcms6YmctZGFyay03MDAgdGV4dC1icmFuZC02MDAgc2hhZG93LW1kJyA6ICd0ZXh0LWdyYXktNTAwJ31gLCBjaGlsZHJlbjogIlZlcmlmeSIgfSldIH0pLCBtb2RlID09PSAnZW5jcnlwdCcgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBtZDpncmlkLWNvbHMtMiBnYXAtMTAiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtbC0xIiwgY2hpbGRyZW46ICJJbnB1dCBUZXh0IiB9KSwgX2pzeCgidGV4dGFyZWEiLCB7IHZhbHVlOiBpbnB1dFRleHQsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5wdXRUZXh0KGUudGFyZ2V0LnZhbHVlKSwgcGxhY2Vob2xkZXI6ICJUeXBlIGhlcmUuLi4iLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC00OCBwLTYgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvbnQtbW9ubyB0ZXh0LXNtIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCBzaGFkb3ctaW5uZXIgcmVzaXplLW5vbmUiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1sLTEiLCBjaGlsZHJlbjogIlNIQTI1NiBIYXNoIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUiLCBjaGlsZHJlbjogW19qc3goInRleHRhcmVhIiwgeyByZWFkT25seTogdHJ1ZSwgdmFsdWU6IGhhc2gsIGNsYXNzTmFtZTogInctZnVsbCBoLTQ4IHAtNiByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTkwMCB0ZXh0LWJyYW5kLTYwMCBmb250LW1vbm8gdGV4dC1zbSByZXNpemUtbm9uZSIgfSksIGhhc2ggJiYgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhhc2gpOyBzZXRDb3BpZWQodHJ1ZSk7IHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7IH0sIGNsYXNzTmFtZTogImFic29sdXRlIHRvcC00IHJpZ2h0LTQgcC0zIGJnLXdoaXRlIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBzaGFkb3ctbWQgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtYnJhbmQtNjAwIHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IGNvcGllZCA/IF9qc3goQ2hlY2ssIHsgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LWdyZWVuLTUwMCIgfSkgOiBfanN4KENvcHksIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSldIH0pXSB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm1heC13LTJ4bCBteC1hdXRvIHNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHZlcmlmeUhhc2gsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VmVyaWZ5SGFzaChlLnRhcmdldC52YWx1ZSksIHBsYWNlaG9sZGVyOiAiUGFzdGUgU0hBMjU2IEhhc2guLi4iLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZvbnQtbW9ubyBzaGFkb3ctaW5uZXIiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmVyaWZ5VGV4dCwgb25DaGFuZ2U6IChlKSA9PiBzZXRWZXJpZnlUZXh0KGUudGFyZ2V0LnZhbHVlKSwgcGxhY2Vob2xkZXI6ICJFbnRlciBUZXh0Li4uIiwgY2xhc3NOYW1lOiAidy1mdWxsIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmb250LW1vbm8gc2hhZG93LWlubmVyIiB9KSwgaXNNYXRjaCAhPT0gbnVsbCAmJiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogYHAtNiByb3VuZGVkLTJ4bCBib3JkZXIgdGV4dC1jZW50ZXIgZm9udC1ibGFjayB0ZXh0LWxnICR7aXNNYXRjaCA/ICdiZy1ncmVlbi01MCBib3JkZXItZ3JlZW4tMjAwIHRleHQtZ3JlZW4tNzAwJyA6ICdiZy1yZWQtNTAgYm9yZGVyLXJlZC0yMDAgdGV4dC1yZWQtNzAwJ31gLCBjaGlsZHJlbjogaXNNYXRjaCA/ICdNYXRjaCBGb3VuZCDinJMnIDogJ01pc21hdGNoIOKclycgfSldIH0pKV0gfSkgfSkpOwp9Owo=","@/components/Tools/SocialTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IFNoYXJlMiwgRG93bmxvYWQsIEltYWdlIGFzIEltYWdlSWNvbiwgSGVhcnQsIE1lc3NhZ2VDaXJjbGUsIFNlbmQsIEJvb2ttYXJrLCBNb3JlSG9yaXpvbnRhbCwgQ2hlY2tDaXJjbGUsIFVwbG9hZCwgWW91dHViZSwgU2VhcmNoLCBFeHRlcm5hbExpbmssIEFsZXJ0Q2lyY2xlLCBMaW5rZWRpbiwgVGh1bWJzVXAsIE1lc3NhZ2VTcXVhcmUsIFJlcGVhdCwgR2xvYmUsIFR3aXR0ZXIsIENvcHksIENoZWNrLCBMb2FkZXIyIH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKaW1wb3J0IHsgVG9vbExheW91dCB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29sTGF5b3V0JzsKaW1wb3J0ICogYXMgaHRtbFRvSW1hZ2UgZnJvbSAnaHRtbC10by1pbWFnZSc7CmltcG9ydCB7IGdlbmVyYXRlVGV4dCB9IGZyb20gJ0Avc2VydmljZXMvZ2VtaW5pU2VydmljZSc7CmV4cG9ydCBjb25zdCBUd2VldEdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFt0b3BpYywgc2V0VG9waWNdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3RvbmUsIHNldFRvbmVdID0gdXNlU3RhdGUoJ1dpdHR5Jyk7CiAgICBjb25zdCBbdHdlZXRzLCBzZXRUd2VldHNdID0gdXNlU3RhdGUoW10pOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtjb3BpZWRJbmRleCwgc2V0Q29waWVkSW5kZXhdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCB0b25lcyA9IFsnV2l0dHknLCAnUHJvZmVzc2lvbmFsJywgJ0NvbnRyb3ZlcnNpYWwnLCAnSGVscGZ1bCcsICdTaGl0cG9zdCcsICdJbnNwaXJhdGlvbmFsJ107CiAgICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIXRvcGljLnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICBzZXRUd2VldHMoW10pOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBBY3QgYXMgYSBzb2NpYWwgbWVkaWEgZXhwZXJ0IHNwZWNpYWxpemVkIGluIFggKGZvcm1lcmx5IFR3aXR0ZXIpLiAKICAgICAgQ3JlYXRlIDUgZGlzdGluY3QsIGhpZ2gtZW5nYWdlbWVudCBwb3N0IGlkZWFzIGFib3V0OiAiJHt0b3BpY30iLgogICAgICAKICAgICAgVG9uZTogJHt0b25lfS4KICAgICAgCiAgICAgIENvbnN0cmFpbnRzOgogICAgICAtIEtlZXAgdGhlbSBjb25jaXNlICh1bmRlciAyODAgY2hhcmFjdGVycyBwcmVmZXJyZWQsIGJ1dCBjYW4gYmUgc2xpZ2h0bHkgbG9uZ2VyIGZvciBwcmVtaXVtIHVzZXJzKS4KICAgICAgLSBVc2UgYXBwcm9wcmlhdGUgZW1vamlzIGFuZCAxLTMgcmVsZXZhbnQgaGFzaHRhZ3MuCiAgICAgIC0gRW5zdXJlIHRoZXkgYXJlIGNhdGNoeSBhbmQgZW5jb3VyYWdlIHJlcGxpZXMgb3IgcmVwb3N0cy4KICAgICAgCiAgICAgIFJldHVybiBPTkxZIGEgcmF3IEpTT04gYXJyYXkgb2Ygc3RyaW5ncy4gRG8gbm90IGluY2x1ZGUgbWFya2Rvd24gZm9ybWF0dGluZyBsaWtlIFxgXGBcYGpzb24uYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgY2xlYW5Kc29uID0gcmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKTsKICAgICAgICAgICAgbGV0IHBhcnNlZFR3ZWV0cyA9IFtdOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcGFyc2VkVHdlZXRzID0gSlNPTi5wYXJzZShjbGVhbkpzb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBzcGxpdCBpZiBKU09OIGZhaWxzCiAgICAgICAgICAgICAgICBwYXJzZWRUd2VldHMgPSByZXNwb25zZS5zcGxpdCgnXG5cbicpLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gNSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkVHdlZXRzKSkgewogICAgICAgICAgICAgICAgc2V0VHdlZXRzKHBhcnNlZFR3ZWV0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzZXRUd2VldHMoW3Jlc3BvbnNlXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICBzZXRUd2VldHMoWyJGYWlsZWQgdG8gZ2VuZXJhdGUgdHdlZXRzLiBQbGVhc2UgdHJ5IGFnYWluLiJdKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGNvcHlUd2VldCA9ICh0ZXh0LCBpbmRleCkgPT4gewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpOwogICAgICAgIHNldENvcGllZEluZGV4KGluZGV4KTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZEluZGV4KG51bGwpLCAyMDAwKTsKICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIlggUG9zdCBHZW5lcmF0b3IiLCBkZXNjcmlwdGlvbjogIkdlbmVyYXRlIHZpcmFsIHBvc3QgaWRlYXMsIHRocmVhZHMsIGFuZCBob3QgdGFrZXMgZm9yIFggKFR3aXR0ZXIpIGluc3RhbnRseS4iLCBpY29uOiBUd2l0dGVyLCBjYXRlZ29yeTogIlNvY2lhbCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGxnOmdyaWQtY29scy01IGdhcC04IHAtNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibGc6Y29sLXNwYW4tMiBzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgbWItMiIsIGNoaWxkcmVuOiAiV2hhdCdzIG9uIHlvdXIgbWluZD8iIH0pLCBfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IHRvcGljLCBvbkNoYW5nZTogKGUpID0+IHNldFRvcGljKGUudGFyZ2V0LnZhbHVlKSwgcGxhY2Vob2xkZXI6ICJlLmcuIFRoZSBmdXR1cmUgb2YgQUkgaW4gY29kaW5nLCBvciB3aHkgY29mZmVlIGlzIGVzc2VudGlhbC4uLiIsIGNsYXNzTmFtZTogInctZnVsbCBoLTMyIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTk1MCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1za3ktNTAwIHJlc2l6ZS1ub25lIHRyYW5zaXRpb24tc2hhZG93IiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgbWItMyIsIGNoaWxkcmVuOiAiU2VsZWN0IFZpYmUiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC13cmFwIGdhcC0yIiwgY2hpbGRyZW46IHRvbmVzLm1hcCgodCkgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VG9uZSh0KSwgY2xhc3NOYW1lOiBgcHgtNCBweS0yIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1hbGwgYm9yZGVyICR7dG9uZSA9PT0gdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXNreS01MDAgdGV4dC13aGl0ZSBib3JkZXItc2t5LTUwMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktNDAwIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBob3Zlcjpib3JkZXItc2t5LTQwMCBob3Zlcjp0ZXh0LXNreS01MDAnfWAsIGNoaWxkcmVuOiB0IH0sIHQpKSkgfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUdlbmVyYXRlLCBkaXNhYmxlZDogaXNMb2FkaW5nIHx8ICF0b3BpYy50cmltKCksIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLXNreS01MDAgaG92ZXI6Ymctc2t5LTYwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIHNoYWRvdy1sZyBzaGFkb3ctc2t5LTUwMC8yMCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBhY3RpdmU6c2NhbGUtWzAuOThdIiwgY2hpbGRyZW46IGlzTG9hZGluZyA/IChfanN4cyhfRnJhZ21lbnQsIHsgY2hpbGRyZW46IFtfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIGFuaW1hdGUtc3BpbiIgfSksICIgQ29va2luZy4uLiJdIH0pKSA6IChfanN4cyhfRnJhZ21lbnQsIHsgY2hpbGRyZW46IFtfanN4KFR3aXR0ZXIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIiB9KSwgIiBHZW5lcmF0ZSBQb3N0cyJdIH0pKSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImxnOmNvbC1zcGFuLTMgc3BhY2UteS00IiwgY2hpbGRyZW46IFtfanN4cygiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChTaGFyZTIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LXNreS01MDAiIH0pLCAiIEdlbmVyYXRlZCBJZGVhcyJdIH0pLCB0d2VldHMubGVuZ3RoID09PSAwICYmICFpc0xvYWRpbmcgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImgtNjQgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTAwLzUwIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHRleHQtZ3JheS00MDAgdGV4dC1jZW50ZXIgcC02IiwgY2hpbGRyZW46IFtfanN4KFR3aXR0ZXIsIHsgY2xhc3NOYW1lOiAidy0xMiBoLTEyIG1iLTMgb3BhY2l0eS0yMCIgfSksIF9qc3goInAiLCB7IGNoaWxkcmVuOiAiRW50ZXIgYSB0b3BpYyB0byBnZW5lcmF0ZSBwb3N0IGlkZWFzLiIgfSldIH0pKSwgaXNMb2FkaW5nICYmIChfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbMSwgMiwgMywgNCwgNV0ubWFwKChpKSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBwLTYgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGFuaW1hdGUtcHVsc2UiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTMgbWItMyIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAgYmctZ3JheS0yMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWZ1bGwiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTIgZmxleC0xIHB0LTEiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC0zIGJnLWdyYXktMjAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZCB3LTEvNCIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC0zIGJnLWdyYXktMjAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZCB3LTEvNSIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0yIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImgtNCBiZy1ncmF5LTIwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQgdy1mdWxsIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLTQgYmctZ3JheS0yMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkIHctNS82IiB9KV0gfSldIH0sIGkpKSkgfSkpLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiB0d2VldHMubWFwKCh0d2VldCwgaWR4KSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JvdXAgcmVsYXRpdmUgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBwLTUgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGhvdmVyOmJvcmRlci1za3ktMjAwIGRhcms6aG92ZXI6Ym9yZGVyLXNreS05MDAgdHJhbnNpdGlvbi1jb2xvcnMgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC0zIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtc2hyaW5rLTAiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAgcm91bmRlZC1mdWxsIGJnLWdyYWRpZW50LXRvLXRyIGZyb20tc2t5LTQwMCB0by1ibHVlLTUwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCIsIGNoaWxkcmVuOiAiQUkiIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgbWluLXctMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgbWItMC41IiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgdGV4dC1zbSIsIGNoaWxkcmVuOiAiWW91IiB9KSwgX2pzeChDaGVja0NpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIHRleHQtc2t5LTUwMCBmaWxsLXNreS01MDAgdGV4dC13aGl0ZSIgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIHRleHQtc20gbWwtMSIsIGNoaWxkcmVuOiAiQGNyZWF0b3IiIH0pXSB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgdGV4dC1bMTVweF0gd2hpdGVzcGFjZS1wcmUtd3JhcCBsZWFkaW5nLW5vcm1hbCIsIGNoaWxkcmVuOiB0d2VldCB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdGV4dC1ncmF5LTQwMCBkYXJrOnRleHQtZ3JheS01MDAgbWF4LXcteHMiLCBjaGlsZHJlbjogW19qc3goTWVzc2FnZUNpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IGhvdmVyOnRleHQtc2t5LTUwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyIgfSksIF9qc3goUmVwZWF0LCB7IGNsYXNzTmFtZTogInctNCBoLTQgaG92ZXI6dGV4dC1ncmVlbi01MDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMiIH0pLCBfanN4KEhlYXJ0LCB7IGNsYXNzTmFtZTogInctNCBoLTQgaG92ZXI6dGV4dC1yb3NlLTUwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyIgfSksIF9qc3goQm9va21hcmssIHsgY2xhc3NOYW1lOiAidy00IGgtNCBob3Zlcjp0ZXh0LWJsdWUtNTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIiB9KV0gfSldIH0pXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBjb3B5VHdlZXQodHdlZXQsIGlkeCksIGNsYXNzTmFtZTogImFic29sdXRlIHRvcC00IHJpZ2h0LTQgcC0yIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1za3ktNTAwIGhvdmVyOmJnLXNreS01MCBkYXJrOmhvdmVyOmJnLXNreS05MDAvMjAgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCIsIHRpdGxlOiAiQ29weSBQb3N0IiwgY2hpbGRyZW46IGNvcGllZEluZGV4ID09PSBpZHggPyBfanN4KENoZWNrLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1ncmVlbi01MDAiIH0pIDogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBib3R0b20tNCByaWdodC00IHRleHQteHMgZm9udC1tb25vIHRleHQtZ3JheS0zMDAgZGFyazp0ZXh0LWRhcmstNzAwIiwgY2hpbGRyZW46IFt0d2VldC5sZW5ndGgsICIvMjgwIl0gfSldIH0sIGlkeCkpKSB9KV0gfSldIH0pIH0pKTsKfTsKZXhwb3J0IGNvbnN0IExpbmtlZGluUG9zdEdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFt0b3BpYywgc2V0VG9waWNdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3RvbmUsIHNldFRvbmVdID0gdXNlU3RhdGUoJ1Byb2Zlc3Npb25hbCcpOwogICAgY29uc3QgW2dlbmVyYXRlZFBvc3QsIHNldEdlbmVyYXRlZFBvc3RdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIXRvcGljLnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICBzZXRHZW5lcmF0ZWRQb3N0KCcnKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgQWN0IGFzIGFuIGV4cGVydCBMaW5rZWRJbiBnaG9zdHdyaXRlci4gQ3JlYXRlIGEgdmlyYWwsIGhpZ2gtZW5nYWdlbWVudCBMaW5rZWRJbiBwb3N0IGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgdG9waWMgb3IgVVJMOiAiJHt0b3BpY30iLgogICAgICAKICAgICAgVG9uZTogJHt0b25lfS4KICAgICAgCiAgICAgIEZvbGxvdyB0aGlzIHN0cnVjdHVyZToKICAgICAgMS4gQSBjYXRjaHkgIkhvb2siICgxLTIgc2hvcnQgc2VudGVuY2VzKSB0byBncmFiIGF0dGVudGlvbiBpbW1lZGlhdGVseS4KICAgICAgMi4gQSBsaW5lIGJyZWFrLgogICAgICAzLiBUaGUgIk1lYXQiOiBQcm92aWRlIHZhbHVlLCBpbnNpZ2h0LCBvciBhIHN0b3J5IGluIHNob3J0LCBwdW5jaHkgcGFyYWdyYXBocyBvciBidWxsZXQgcG9pbnRzLgogICAgICA0LiBBICJDYWxsIHRvIEFjdGlvbiIgKENUQSkgYXQgdGhlIGVuZCB0byBlbmNvdXJhZ2UgY29tbWVudHMuCiAgICAgIDUuIDMtNSByZWxldmFudCBhbmQgdHJlbmRpbmcgaGFzaHRhZ3MuCiAgICAgIAogICAgICBLZWVwIHRoZSBmb3JtYXR0aW5nIGNsZWFuIHdpdGggYXBwcm9wcmlhdGUgc3BhY2luZy4gVXNlIDEtMiByZWxldmFudCBlbW9qaXMgYnV0IGRvbid0IG92ZXJkbyBpdC5gOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdlbmVyYXRlVGV4dChwcm9tcHQpOwogICAgICAgICAgICBzZXRHZW5lcmF0ZWRQb3N0KHJlc3BvbnNlKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICBzZXRHZW5lcmF0ZWRQb3N0KCJTb3JyeSwgSSBjb3VsZG4ndCBnZW5lcmF0ZSBhIHBvc3QgYXQgdGhlIG1vbWVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGhhbmRsZUNvcHkgPSAoKSA9PiB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZ2VuZXJhdGVkUG9zdCk7CiAgICAgICAgc2V0Q29waWVkKHRydWUpOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMCk7CiAgICB9OwogICAgY29uc3QgdG9uZXMgPSBbJ1Byb2Zlc3Npb25hbCcsICdUaG91Z2h0IExlYWRlcnNoaXAnLCAnU3Rvcnl0ZWxsaW5nJywgJ0NvbnRyYXJpYW4nLCAnRWR1Y2F0aW9uYWwnLCAnTW90aXZhdGlvbmFsJ107CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkxpbmtlZEluIFBvc3QgQ3JlYXRvciIsIGRlc2NyaXB0aW9uOiAiVHVybiBhbnkgVVJMLCB0b3BpYywgb3Igcm91Z2ggaWRlYSBpbnRvIGEgcG9saXNoZWQsIGhpZ2gtZW5nYWdlbWVudCBMaW5rZWRJbiBwb3N0IHVzaW5nIEFJLiIsIGljb246IExpbmtlZGluLCBjYXRlZ29yeTogIlNvY2lhbCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IHAtNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIG1iLTIiLCBjaGlsZHJlbjogIlRvcGljIG9yIFVSTCIgfSksIF9qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogdG9waWMsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VG9waWMoZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIlBhc3RlIGEgbGluayB0byBhbiBhcnRpY2xlLCBvciBkZXNjcmliZSB3aGF0IHlvdSB3YW50IHRvIHBvc3QgYWJvdXQgKGUuZy4sICdMZXNzb25zIGxlYXJuZWQgZnJvbSBteSBmaXJzdCBzdGFydHVwIGZhaWx1cmUnKS4uLiIsIGNsYXNzTmFtZTogInctZnVsbCBoLTQwIHAtNCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJsdWUtNTAwIHJlc2l6ZS1ub25lIHRyYW5zaXRpb24tc2hhZG93IiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgbWItMyIsIGNoaWxkcmVuOiAiU2VsZWN0IFRvbmUiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC13cmFwIGdhcC0yIiwgY2hpbGRyZW46IHRvbmVzLm1hcCgodCkgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0VG9uZSh0KSwgY2xhc3NOYW1lOiBgcHgtNCBweS0yIHJvdW5kZWQtbGcgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tYWxsICR7dG9uZSA9PT0gdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLWJsdWUtNjAwIHRleHQtd2hpdGUgc2hhZG93LW1kIHJpbmctMiByaW5nLWJsdWUtNjAwIHJpbmctb2Zmc2V0LTEgZGFyazpyaW5nLW9mZnNldC1kYXJrLTkwMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgaG92ZXI6Ym9yZGVyLWJsdWUtNTAwIGhvdmVyOnRleHQtYmx1ZS02MDAnfWAsIGNoaWxkcmVuOiB0IH0sIHQpKSkgfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUdlbmVyYXRlLCBkaXNhYmxlZDogaXNMb2FkaW5nIHx8ICF0b3BpYy50cmltKCksIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWJsdWUtNzAwIGhvdmVyOmJnLWJsdWUtODAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIHNoYWRvdy1ibHVlLTcwMC8yMCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBhY3RpdmU6c2NhbGUtWzAuOThdIiwgY2hpbGRyZW46IGlzTG9hZGluZyA/IF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogImFuaW1hdGUtcHVsc2UiLCBjaGlsZHJlbjogIldyaXRpbmcgUG9zdC4uLiIgfSkgOiAnR2VuZXJhdGUgUG9zdCcgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTEwMCBkYXJrOmJnLWJsYWNrIHJvdW5kZWQteGwgcC00IG1kOnAtOCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IG1pbi1oLVs1MDBweF0iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInctZnVsbCBtYXgtdy1bNTAwcHhdIGJnLXdoaXRlIGRhcms6YmctWyMxYjFmMjNdIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZ3JheS04MDAgcm91bmRlZC1sZyBzaGFkb3ctc20gb3ZlcmZsb3ctaGlkZGVuIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTQgZmxleCBnYXAtMyIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIgcm91bmRlZC1mdWxsIGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS03MDAgZmxleC1zaHJpbmstMCBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogX2pzeChJbWFnZUljb24sIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmb250LXNlbWlib2xkIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUiLCBjaGlsZHJlbjogIllvdXIgTmFtZSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiAiU29mdHdhcmUgRW5naW5lZXIgfCBDb250ZW50IENyZWF0b3IiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIG10LTAuNSIsIGNoaWxkcmVuOiBbIjFoIFx1MjAyMiAiLCBfanN4KEdsb2JlLCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pXSB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTUwMCIsIGNoaWxkcmVuOiBfanN4KE1vcmVIb3Jpem9udGFsLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJweC00IHBiLTIgdGV4dC1zbSB0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTIwMCB3aGl0ZXNwYWNlLXByZS13cmFwIGxlYWRpbmctcmVsYXhlZCBtaW4taC1bMTAwcHhdIiwgY2hpbGRyZW46IGlzTG9hZGluZyA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTIgYW5pbWF0ZS1wdWxzZSIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLTQgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkIHctMy80IiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLTQgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkIHctZnVsbCIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiaC00IGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZCB3LTUvNiIgfSldIH0pKSA6IGdlbmVyYXRlZFBvc3QgPyAoZ2VuZXJhdGVkUG9zdCkgOiAoX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTQwMCBpdGFsaWMiLCBjaGlsZHJlbjogIllvdXIgZ2VuZXJhdGVkIHBvc3QgcHJldmlldyB3aWxsIGFwcGVhciBoZXJlLi4uIiB9KSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1ncmF5LTgwMCBweC0yIHB5LTEgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG10LTQiLCBjaGlsZHJlbjogW19qc3hzKCJidXR0b24iLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMgcHktMyB0ZXh0LWdyYXktNTAwIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZGFyay04MDAgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeChUaHVtYnNVcCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiAiLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtbWVkaXVtIGhpZGRlbiBzbTppbmxpbmUiLCBjaGlsZHJlbjogIkxpa2UiIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0zIHRleHQtZ3JheS01MDAgaG92ZXI6YmctZ3JheS0xMDAgZGFyazpob3ZlcjpiZy1kYXJrLTgwMCByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IFtfanN4KE1lc3NhZ2VTcXVhcmUsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgIiwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LW1lZGl1bSBoaWRkZW4gc206aW5saW5lIiwgY2hpbGRyZW46ICJDb21tZW50IiB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMgcHktMyB0ZXh0LWdyYXktNTAwIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZGFyay04MDAgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeChSZXBlYXQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgIiwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LW1lZGl1bSBoaWRkZW4gc206aW5saW5lIiwgY2hpbGRyZW46ICJSZXBvc3QiIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0zIHRleHQtZ3JheS01MDAgaG92ZXI6YmctZ3JheS0xMDAgZGFyazpob3ZlcjpiZy1kYXJrLTgwMCByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IFtfanN4KFNlbmQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgIiwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LW1lZGl1bSBoaWRkZW4gc206aW5saW5lIiwgY2hpbGRyZW46ICJTZW5kIiB9KV0gfSldIH0pXSB9KSwgZ2VuZXJhdGVkUG9zdCAmJiAoX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlQ29weSwgY2xhc3NOYW1lOiAibXQtNiBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC02IHB5LTIuNSBiZy13aGl0ZSBkYXJrOmJnLWRhcmstODAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC1mdWxsIHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1hbGwgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTIwMCIsIGNoaWxkcmVuOiBbY29waWVkID8gX2pzeChDaGVja0NpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtZ3JlZW4tNTAwIiB9KSA6IF9qc3goU2hhcmUyLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pLCBjb3BpZWQgPyAnQ29waWVkIHRvIENsaXBib2FyZCcgOiAnQ29weSBUZXh0J10gfSkpXSB9KV0gfSkgfSkpOwp9OwpleHBvcnQgY29uc3QgSW5zdGFncmFtUG9zdEdlbmVyYXRvciA9ICgpID0+IHsKICAgIGNvbnN0IFt1c2VybmFtZSwgc2V0VXNlcm5hbWVdID0gdXNlU3RhdGUoJ2pvaG5kb2UnKTsKICAgIGNvbnN0IFtsb2NhdGlvbiwgc2V0TG9jYXRpb25dID0gdXNlU3RhdGUoJ05ldyBZb3JrLCBOWScpOwogICAgY29uc3QgW2xpa2VzLCBzZXRMaWtlc10gPSB1c2VTdGF0ZSgnMTIsMzQ1Jyk7CiAgICBjb25zdCBbY2FwdGlvbiwgc2V0Q2FwdGlvbl0gPSB1c2VTdGF0ZSgnTG92aW5nIHRoaXMgdmlldyEg8J+TuCAjdHJhdmVsICN2aWJlcycpOwogICAgY29uc3QgW3RpbWVBZ28sIHNldFRpbWVBZ29dID0gdXNlU3RhdGUoJzIgSE9VUlMgQUdPJyk7CiAgICBjb25zdCBbcHJvZmlsZUltYWdlLCBzZXRQcm9maWxlSW1hZ2VdID0gdXNlU3RhdGUoJ2h0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTM1NzEzODc1MDAyLWQxZDBjZjM3N2ZkZT9peGxpYj1yYi00LjAuMyZpeGlkPU0zd3hNakEzZkRCOE1IeHdhRzkwYnkxd1lXZGxmSHg4ZkdWdWZEQjhmSHg4ZkElM0QlM0QmYXV0bz1mb3JtYXQmZml0PWNyb3Amdz0xNTAmcT04MCcpOwogICAgY29uc3QgW3Bvc3RJbWFnZSwgc2V0UG9zdEltYWdlXSA9IHVzZVN0YXRlKCdodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3Nzk1OTg1ODYxNy02N2Y4NWNmNGYxZGY/aXhsaWI9cmItNC4wLjMmaXhpZD1NM3d4TWpBM2ZEQjhNSHh3YUc5MGJ5MXdZV2RsZkh4OGZHVnVmREI4Zkh4OGZBJTNEJTNEJmF1dG89Zm9ybWF0JmZpdD1jcm9wJnc9ODAwJnE9ODAnKTsKICAgIGNvbnN0IFtpc1ZlcmlmaWVkLCBzZXRJc1ZlcmlmaWVkXSA9IHVzZVN0YXRlKHRydWUpOwogICAgY29uc3QgW2RhcmtNb2RlLCBzZXREYXJrTW9kZV0gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbaXNEb3dubG9hZGluZywgc2V0SXNEb3dubG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBwcmV2aWV3UmVmID0gdXNlUmVmKG51bGwpOwogICAgLy8gLS0tIElucHV0IFNhbml0aXphdGlvbiBIZWxwZXIgLS0tCiAgICAvLyBTdHJpcHMgSFRNTCB0YWdzIGFuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgY2hhcmFjdGVycyB0byBwcmV2ZW50IFhTUwogICAgY29uc3Qgc2FuaXRpemVJbnB1dCA9IChpbnB1dCkgPT4gewogICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bPD4mIiddL2csICcnKTsKICAgIH07CiAgICBjb25zdCBoYW5kbGVJbWFnZVVwbG9hZCA9IChlLCB0eXBlKSA9PiB7CiAgICAgICAgY29uc3QgZmlsZSA9IGUudGFyZ2V0LmZpbGVzPy5bMF07CiAgICAgICAgaWYgKGZpbGUpIHsKICAgICAgICAgICAgLy8gQmFzaWMgdmFsaWRhdGlvbiBmb3IgaW1hZ2UgdHlwZXMKICAgICAgICAgICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2UgdXBsb2FkIGEgdmFsaWQgaW1hZ2UgZmlsZS4nKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4gewogICAgICAgICAgICAgICAgLy8gRGF0YSBVUkxzIGFyZSBnZW5lcmFsbHkgc2FmZSBpbiBpbWcgc3JjLCBidXQgd2UgZW5zdXJlIGl0J3MgYSBzdHJpbmcKICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3Byb2ZpbGUnKQogICAgICAgICAgICAgICAgICAgIHNldFByb2ZpbGVJbWFnZShyZXN1bHQpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHNldFBvc3RJbWFnZShyZXN1bHQpOwogICAgICAgICAgICB9OwogICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgZG93bmxvYWRQb3N0ID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghcHJldmlld1JlZi5jdXJyZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0SXNEb3dubG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgaHRtbFRvSW1hZ2UudG9QbmcocHJldmlld1JlZi5jdXJyZW50LCB7IHF1YWxpdHk6IDEuMCwgcGl4ZWxSYXRpbzogMiB9KTsKICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGBpbnN0YWdyYW0tcG9zdC0ke3Nhbml0aXplSW5wdXQodXNlcm5hbWUpfS5wbmdgOwogICAgICAgICAgICBsaW5rLmhyZWYgPSBkYXRhVXJsOwogICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignRG93bmxvYWQgZmFpbGVkJywgZXJyKTsKICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBpbWFnZS4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzRG93bmxvYWRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkluc3RhZ3JhbSBQb3N0IEdlbmVyYXRvciIsIGRlc2NyaXB0aW9uOiAiQ3JlYXRlIHJlYWxpc3RpYyBsb29raW5nIEluc3RhZ3JhbSBwb3N0cyBmb3IgbW9ja3VwcywgbWVtZXMsIG9yIHZpc3VhbGl6YXRpb24uIiwgaWNvbjogU2hhcmUyLCBjYXRlZ29yeTogIlNvY2lhbCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IHAtNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCBwLTYgc2hhZG93LXNtIHNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeCgiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0yIiwgY2hpbGRyZW46ICJQb3N0IERldGFpbHMiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTUwMCBtYi0xIiwgY2hpbGRyZW46ICJVc2VybmFtZSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiB1c2VybmFtZSwgb25DaGFuZ2U6IChlKSA9PiBzZXRVc2VybmFtZShzYW5pdGl6ZUlucHV0KGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiwgbWF4TGVuZ3RoOiAzMCB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNTAwIG1iLTEiLCBjaGlsZHJlbjogIkxvY2F0aW9uIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGxvY2F0aW9uLCBvbkNoYW5nZTogKGUpID0+IHNldExvY2F0aW9uKHNhbml0aXplSW5wdXQoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAiLCBtYXhMZW5ndGg6IDUwIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNTAwIG1iLTEiLCBjaGlsZHJlbjogIkNhcHRpb24iIH0pLCBfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IGNhcHRpb24sIG9uQ2hhbmdlOiAoZSkgPT4gc2V0Q2FwdGlvbihzYW5pdGl6ZUlucHV0KGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIGgtMjAgcmVzaXplLW5vbmUiLCBtYXhMZW5ndGg6IDIyMDAgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTUwMCBtYi0xIiwgY2hpbGRyZW46ICJMaWtlcyBDb3VudCIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBsaWtlcywgb25DaGFuZ2U6IChlKSA9PiBzZXRMaWtlcyhzYW5pdGl6ZUlucHV0KGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiwgbWF4TGVuZ3RoOiAxNSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNTAwIG1iLTEiLCBjaGlsZHJlbjogIlRpbWUgQWdvIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHRpbWVBZ28sIG9uQ2hhbmdlOiAoZSkgPT4gc2V0VGltZUFnbyhzYW5pdGl6ZUlucHV0KGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiwgbWF4TGVuZ3RoOiAyMCB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNiBwdC0yIiwgY2hpbGRyZW46IFtfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGN1cnNvci1wb2ludGVyIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImNoZWNrYm94IiwgY2hlY2tlZDogaXNWZXJpZmllZCwgb25DaGFuZ2U6IChlKSA9PiBzZXRJc1ZlcmlmaWVkKGUudGFyZ2V0LmNoZWNrZWQpLCBjbGFzc05hbWU6ICJ3LTQgaC00IHJvdW5kZWQgdGV4dC1icmFuZC02MDAgZm9jdXM6cmluZy1icmFuZC01MDAiIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtbWVkaXVtIiwgY2hpbGRyZW46ICJWZXJpZmllZCBCYWRnZSIgfSldIH0pLCBfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGN1cnNvci1wb2ludGVyIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImNoZWNrYm94IiwgY2hlY2tlZDogZGFya01vZGUsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0RGFya01vZGUoZS50YXJnZXQuY2hlY2tlZCksIGNsYXNzTmFtZTogInctNCBoLTQgcm91bmRlZCB0ZXh0LWJyYW5kLTYwMCBmb2N1czpyaW5nLWJyYW5kLTUwMCIgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1tZWRpdW0iLCBjaGlsZHJlbjogIkRhcmsgTW9kZSBQcmV2aWV3IiB9KV0gfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC02IHNoYWRvdy1zbSBzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgbWItMiIsIGNoaWxkcmVuOiAiSW1hZ2VzIiB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtZ3JheS01MDAgbWItMSIsIGNoaWxkcmVuOiAiUHJvZmlsZSBQaWN0dXJlIFVSTCIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBwcm9maWxlSW1hZ2UsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0UHJvZmlsZUltYWdlKHNhbml0aXplSW5wdXQoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAiZmxleC0xIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAiIH0pLCBfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogInAtMi41IGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTIwMCBkYXJrOmhvdmVyOmJnLWRhcmstNzAwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IFtfanN4KFVwbG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktNDAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJmaWxlIiwgY2xhc3NOYW1lOiAiaGlkZGVuIiwgYWNjZXB0OiAiaW1hZ2UvKiIsIG9uQ2hhbmdlOiAoZSkgPT4gaGFuZGxlSW1hZ2VVcGxvYWQoZSwgJ3Byb2ZpbGUnKSB9KV0gfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtZ3JheS01MDAgbWItMSIsIGNoaWxkcmVuOiAiUG9zdCBJbWFnZSBVUkwiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogcG9zdEltYWdlLCBvbkNoYW5nZTogKGUpID0+IHNldFBvc3RJbWFnZShzYW5pdGl6ZUlucHV0KGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogImZsZXgtMSBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20gZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYnJhbmQtNTAwIiB9KSwgX2pzeHMoImxhYmVsIiwgeyBjbGFzc05hbWU6ICJwLTIuNSBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1kYXJrLTcwMCB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeChVcGxvYWQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTQwMCIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAiZmlsZSIsIGNsYXNzTmFtZTogImhpZGRlbiIsIGFjY2VwdDogImltYWdlLyoiLCBvbkNoYW5nZTogKGUpID0+IGhhbmRsZUltYWdlVXBsb2FkKGUsICdwb3N0JykgfSldIH0pXSB9KV0gfSldIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBkb3dubG9hZFBvc3QsIGRpc2FibGVkOiBpc0Rvd25sb2FkaW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktMyBiZy1icmFuZC02MDAgaG92ZXI6YmctYnJhbmQtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIHNoYWRvdy1icmFuZC02MDAvMjAgZGlzYWJsZWQ6b3BhY2l0eS03MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gYWN0aXZlOnNjYWxlLVswLjk5XSIsIGNoaWxkcmVuOiBbX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IG1yLTIiIH0pLCBpc0Rvd25sb2FkaW5nID8gJ0dlbmVyYXRpbmcuLi4nIDogJ0Rvd25sb2FkIEltYWdlJ10gfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgYmctZ3JheS0xMDAgZGFyazpiZy1ibGFjayByb3VuZGVkLXhsIHAtOCBvdmVyZmxvdy1hdXRvIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgcmVmOiBwcmV2aWV3UmVmLCBjbGFzc05hbWU6IGB3LVszNzVweF0gZmxleC1zaHJpbmstMCBzaGFkb3ctMnhsIHJvdW5kZWQteGwgb3ZlcmZsb3ctaGlkZGVuICR7ZGFya01vZGUgPyAnYmctYmxhY2sgdGV4dC13aGl0ZScgOiAnYmctd2hpdGUgdGV4dC1ibGFjayd9YCwgc3R5bGU6IHsgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJyB9LCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTMiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctOCBoLTggcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiByaW5nLTEgcmluZy1ncmF5LTIwMCIsIGNoaWxkcmVuOiBfanN4KCJpbWciLCB7IHNyYzogcHJvZmlsZUltYWdlLCBhbHQ6ICJQcm9maWxlIiwgY2xhc3NOYW1lOiAidy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIiIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSIsIGNoaWxkcmVuOiB1c2VybmFtZSB9KSwgaXNWZXJpZmllZCAmJiBfanN4KENoZWNrQ2lyY2xlLCB7IGNsYXNzTmFtZTogInctMyBoLTMgdGV4dC1ibHVlLTUwMCBmaWxsLWJsdWUtNTAwIHRleHQtd2hpdGUiIH0pXSB9KSwgbG9jYXRpb24gJiYgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiBgdGV4dC14cyAke2RhcmtNb2RlID8gJ3RleHQtZ3JheS00MDAnIDogJ3RleHQtZ3JheS01MDAnfSBsZWFkaW5nLW5vbmUgbXQtMWAsIGNoaWxkcmVuOiBsb2NhdGlvbiB9KV0gfSldIH0pLCBfanN4KE1vcmVIb3Jpem9udGFsLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhc3BlY3Qtc3F1YXJlIGJnLWdyYXktMTAwIHctZnVsbCIsIGNoaWxkcmVuOiBfanN4KCJpbWciLCB7IHNyYzogcG9zdEltYWdlLCBhbHQ6ICJQb3N0IiwgY2xhc3NOYW1lOiAidy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIiIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTMgcGItMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTMiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC00IiwgY2hpbGRyZW46IFtfanN4KEhlYXJ0LCB7IGNsYXNzTmFtZTogInctNiBoLTYgaG92ZXI6dGV4dC1ncmF5LTUwMCBjdXJzb3ItcG9pbnRlciIgfSksIF9qc3goTWVzc2FnZUNpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IGhvdmVyOnRleHQtZ3JheS01MDAgY3Vyc29yLXBvaW50ZXIiLCBzdHlsZTogeyB0cmFuc2Zvcm06ICdyb3RhdGUoLTkwZGVnKScgfSB9KSwgX2pzeChTZW5kLCB7IGNsYXNzTmFtZTogInctNiBoLTYgaG92ZXI6dGV4dC1ncmF5LTUwMCBjdXJzb3ItcG9pbnRlciIgfSldIH0pLCBfanN4KEJvb2ttYXJrLCB7IGNsYXNzTmFtZTogInctNiBoLTYgaG92ZXI6dGV4dC1ncmF5LTUwMCBjdXJzb3ItcG9pbnRlciIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgbWItMiIsIGNoaWxkcmVuOiBbbGlrZXMsICIgbGlrZXMiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBtYi0yIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJmb250LXNlbWlib2xkIG1yLTIiLCBjaGlsZHJlbjogdXNlcm5hbWUgfSksIF9qc3goInNwYW4iLCB7IGNoaWxkcmVuOiBjYXB0aW9uIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6IGB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgZm9udC1tZWRpdW0gJHtkYXJrTW9kZSA/ICd0ZXh0LWdyYXktNTAwJyA6ICd0ZXh0LWdyYXktNDAwJ30gbXQtMSBtYi0zYCwgY2hpbGRyZW46IHRpbWVBZ28gfSldIH0pXSB9KSB9KV0gfSkgfSkpOwp9OwpleHBvcnQgY29uc3QgWW91dHViZVRodW1ibmFpbEdyYWJiZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbdXJsLCBzZXRVcmxdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3ZpZGVvSWQsIHNldFZpZGVvSWRdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IGV4dHJhY3RWaWRlb0lkID0gKGlucHV0VXJsKSA9PiB7CiAgICAgICAgLy8gUmVnZXggZm9yIHZhcmlvdXMgWW91VHViZSBVUkwgZm9ybWF0cwogICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9eLiooeW91dHUuYmVcL3x2XC98dVwvXHdcL3xlbWJlZFwvfHdhdGNoXD92PXwmdj0pKFteIyY/XSopLiovOwogICAgICAgIGNvbnN0IG1hdGNoID0gaW5wdXRVcmwubWF0Y2gocmVnRXhwKTsKICAgICAgICByZXR1cm4gKG1hdGNoICYmIG1hdGNoWzJdLmxlbmd0aCA9PT0gMTEpID8gbWF0Y2hbMl0gOiBudWxsOwogICAgfTsKICAgIGNvbnN0IGhhbmRsZUdldFRodW1ibmFpbCA9ICgpID0+IHsKICAgICAgICBzZXRFcnJvcignJyk7CiAgICAgICAgY29uc3QgaWQgPSBleHRyYWN0VmlkZW9JZCh1cmwpOwogICAgICAgIGlmIChpZCkgewogICAgICAgICAgICBzZXRWaWRlb0lkKGlkKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHNldFZpZGVvSWQobnVsbCk7CiAgICAgICAgICAgIHNldEVycm9yKCdJbnZhbGlkIFlvdVR1YmUgVVJMLiBQbGVhc2UgZG91YmxlIGNoZWNrIGFuZCB0cnkgYWdhaW4uJyk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IHRodW1ibmFpbHMgPSB2aWRlb0lkID8gWwogICAgICAgIHsgbGFiZWw6ICdNYXggUmVzb2x1dGlvbiAoSEQpJywgc2l6ZTogJzEyODB4NzIwJywgdXJsOiBgaHR0cHM6Ly9pbWcueW91dHViZS5jb20vdmkvJHt2aWRlb0lkfS9tYXhyZXNkZWZhdWx0LmpwZ2AgfSwKICAgICAgICB7IGxhYmVsOiAnSGlnaCBRdWFsaXR5Jywgc2l6ZTogJzY0MHg0ODAnLCB1cmw6IGBodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8ke3ZpZGVvSWR9L3NkZGVmYXVsdC5qcGdgIH0sCiAgICAgICAgeyBsYWJlbDogJ01lZGl1bSBRdWFsaXR5Jywgc2l6ZTogJzQ4MHgzNjAnLCB1cmw6IGBodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8ke3ZpZGVvSWR9L2hxZGVmYXVsdC5qcGdgIH0sCiAgICAgICAgeyBsYWJlbDogJ1N0YW5kYXJkIFF1YWxpdHknLCBzaXplOiAnMzIweDE4MCcsIHVybDogYGh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpLyR7dmlkZW9JZH0vbXFkZWZhdWx0LmpwZ2AgfSwKICAgIF0gOiBbXTsKICAgIGNvbnN0IGhhbmRsZURvd25sb2FkID0gYXN5bmMgKGltYWdlVXJsLCBsYWJlbCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goaW1hZ2VVcmwpOwogICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpOwogICAgICAgICAgICBjb25zdCBibG9iVXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGJsb2JVcmw7CiAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBgeW91dHViZS10aHVtYi0ke3ZpZGVvSWR9LSR7bGFiZWwucmVwbGFjZSgvXHMvZywgJy0nKX0uanBnYDsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsKICAgICAgICAgICAgbGluay5jbGljaygpOwogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspOwogICAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgLy8gRmFsbGJhY2sgaWYgQ09SUyBibG9ja3MgZmV0Y2gKICAgICAgICAgICAgd2luZG93Lm9wZW4oaW1hZ2VVcmwsICdfYmxhbmsnKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJZb3VUdWJlIFRodW1ibmFpbCBHcmFiYmVyIiwgZGVzY3JpcHRpb246ICJFeHRyYWN0IGFuZCBkb3dubG9hZCBoaWdoLXF1YWxpdHkgdGh1bWJuYWlscyBmcm9tIGFueSBZb3VUdWJlIHZpZGVvIGluc3RhbnRseS4iLCBpY29uOiBZb3V0dWJlLCBjYXRlZ29yeTogIlNvY2lhbCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgbWF4LXctNXhsIG14LWF1dG8iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm1iLTgiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIG1iLTIiLCBjaGlsZHJlbjogIllvdVR1YmUgVmlkZW8gVVJMIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUgZmxleC0xIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgcGwtNCBmbGV4IGl0ZW1zLWNlbnRlciBwb2ludGVyLWV2ZW50cy1ub25lIiwgY2hpbGRyZW46IF9qc3goWW91dHViZSwgeyBjbGFzc05hbWU6ICJoLTUgdy01IHRleHQtZ3JheS00MDAiIH0pIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogdXJsLCBvbkNoYW5nZTogKGUpID0+IHNldFVybChlLnRhcmdldC52YWx1ZSksIG9uS2V5RG93bjogKGUpID0+IGUua2V5ID09PSAnRW50ZXInICYmIGhhbmRsZUdldFRodW1ibmFpbCgpLCBwbGFjZWhvbGRlcjogImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9Li4uIiwgY2xhc3NOYW1lOiAidy1mdWxsIHBsLTExIHByLTQgcHktMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJlZC01MDAgc2hhZG93LXNtIHRyYW5zaXRpb24tYWxsIiB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUdldFRodW1ibmFpbCwgZGlzYWJsZWQ6ICF1cmwsIGNsYXNzTmFtZTogInB4LTYgcHktMyBiZy1yZWQtNjAwIGhvdmVyOmJnLXJlZC03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LXJlZC02MDAvMjAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZmxleCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gYWN0aXZlOnNjYWxlLVswLjk4XSIsIGNoaWxkcmVuOiBbX2pzeChTZWFyY2gsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIiB9KSwgIkdldCBUaHVtYm5haWxzIl0gfSldIH0pLCBlcnJvciAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtMyBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXJlZC02MDAgdGV4dC1zbSIsIGNoaWxkcmVuOiBbX2pzeChBbGVydENpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IG1yLTIiIH0pLCBlcnJvcl0gfSkpXSB9KSwgdmlkZW9JZCAmJiAoX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIG1kOmdyaWQtY29scy0yIGdhcC02IGFuaW1hdGUtaW4gZmFkZS1pbiBzbGlkZS1pbi1mcm9tLWJvdHRvbS00IGR1cmF0aW9uLTUwMCIsIGNoaWxkcmVuOiB0aHVtYm5haWxzLm1hcCgodGh1bWIsIGlkeCkgPT4gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogYGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93ICR7aWR4ID09PSAwID8gJ21kOmNvbC1zcGFuLTInIDogJyd9YCwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJhc3BlY3QtdmlkZW8gYmctZ3JheS0xMDAgZGFyazpiZy1ibGFjayByZWxhdGl2ZSBncm91cCIsIGNoaWxkcmVuOiBbX2pzeCgiaW1nIiwgeyBzcmM6IHRodW1iLnVybCwgYWx0OiB0aHVtYi5sYWJlbCwgY2xhc3NOYW1lOiAidy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIiLCBvbkVycm9yOiAoZSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBtaXNzaW5nIG1heHJlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnNyYyA9IGBodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8ke3ZpZGVvSWR9L2hxZGVmYXVsdC5qcGdgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgaW5zZXQtMCBiZy1ibGFjay81MCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00IiwgY2hpbGRyZW46IF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gd2luZG93Lm9wZW4odGh1bWIudXJsLCAnX2JsYW5rJyksIGNsYXNzTmFtZTogInAtMyBiZy13aGl0ZS8yMCBiYWNrZHJvcC1ibHVyLXNtIHJvdW5kZWQtZnVsbCB0ZXh0LXdoaXRlIGhvdmVyOmJnLXdoaXRlLzQwIHRyYW5zaXRpb24tY29sb3JzIiwgdGl0bGU6ICJPcGVuIGluIE5ldyBUYWIiLCBjaGlsZHJlbjogX2pzeChFeHRlcm5hbExpbmssIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSkgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUiLCBjaGlsZHJlbjogdGh1bWIubGFiZWwgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQteHMgdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogdGh1bWIuc2l6ZSB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IGhhbmRsZURvd25sb2FkKHRodW1iLnVybCwgdGh1bWIubGFiZWwpLCBjbGFzc05hbWU6ICJweC00IHB5LTIgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCBob3ZlcjpiZy1ncmF5LTIwMCBkYXJrOmhvdmVyOmJnLWRhcmstNzAwIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMjAwIHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyIsIGNoaWxkcmVuOiBbX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IG1yLTIiIH0pLCAiIERvd25sb2FkIl0gfSldIH0pXSB9LCBpZHgpKSkgfSkpLCAhdmlkZW9JZCAmJiAhZXJyb3IgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIHB5LTIwIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTkwMC81MCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCIsIGNoaWxkcmVuOiBbX2pzeChZb3V0dWJlLCB7IGNsYXNzTmFtZTogInctMTYgaC0xNiBteC1hdXRvIG1iLTQgdGV4dC1ncmF5LTMwMCBkYXJrOnRleHQtZ3JheS03MDAiIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0xIiwgY2hpbGRyZW46ICJSZWFkeSB0byBHcmFiIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgbWF4LXctc20gbXgtYXV0byIsIGNoaWxkcmVuOiAiUGFzdGUgYSBZb3VUdWJlIHZpZGVvIFVSTCBhYm92ZSB0byBleHRyYWN0IGFsbCBhdmFpbGFibGUgaGlnaC1xdWFsaXR5IHRodW1ibmFpbHMuIiB9KV0gfSkpXSB9KSB9KSk7Cn07Cg==","@/components/Tools/MusicTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JzsKaW1wb3J0IHsgU2VhcmNoLCBMb2FkZXIyLCBEaXNjLCBNaWMyLCBNdXNpYzIsIEZpbGVBdWRpbywgVXBsb2FkLCBEb3dubG9hZCwgUGxheSwgUGF1c2UsIFJlZnJlc2hDdywgU2Npc3NvcnMsIFZvbHVtZTIsIFNwYXJrbGVzLCBDb3B5LCBQaWFubywgU2xpZGVycywgVGltZXIgYXMgVGltZXJJY29uLCBSb3RhdGVDY3csIFNxdWFyZSwgTWljLCBUcmFzaDIsIEZpbGVUZXh0LCBaYXAsIENoZXZyb25VcCwgQ2hldnJvbkRvd24sIFNwbGl0LCBIZWFkcGhvbmVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0JzsKaW1wb3J0IHsgVG9vbExheW91dCB9IGZyb20gJ0AvY29tcG9uZW50cy9Ub29sTGF5b3V0JzsKaW1wb3J0IHsgZ2VuZXJhdGVUZXh0LCB0cmFuc2NyaWJlQXVkaW8gfSBmcm9tICdAL3NlcnZpY2VzL2dlbWluaVNlcnZpY2UnOwovLyAtLS0gSGVscGVyOiBXQVYgRW5jb2RpbmcgTG9naWMgLS0tCmNvbnN0IHdyaXRlU3RyaW5nID0gKHZpZXcsIG9mZnNldCwgc3RyaW5nKSA9PiB7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykgewogICAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0ICsgaSwgc3RyaW5nLmNoYXJDb2RlQXQoaSkpOwogICAgfQp9Owpjb25zdCBmbG9hdFRvMTZCaXRQQ00gPSAob3V0cHV0LCBvZmZzZXQsIGlucHV0KSA9PiB7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrLCBvZmZzZXQgKz0gMikgewogICAgICAgIGNvbnN0IHMgPSBNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgaW5wdXRbaV0pKTsKICAgICAgICBvdXRwdXQuc2V0SW50MTYob2Zmc2V0LCBzIDwgMCA/IHMgKiAweDgwMDAgOiBzICogMHg3RkZGLCB0cnVlKTsKICAgIH0KfTsKY29uc3QgaW50ZXJsZWF2ZSA9IChpbnB1dEwsIGlucHV0UikgPT4gewogICAgY29uc3QgbGVuZ3RoID0gaW5wdXRMLmxlbmd0aCArIGlucHV0Ui5sZW5ndGg7CiAgICBjb25zdCByZXN1bHQgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7CiAgICBsZXQgaW5kZXggPSAwOwogICAgbGV0IGlucHV0SW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0W2luZGV4KytdID0gaW5wdXRMW2lucHV0SW5kZXhdOwogICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IGlucHV0UltpbnB1dEluZGV4XTsKICAgICAgICBpbnB1dEluZGV4Kys7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9Owpjb25zdCBlbmNvZGVXQVYgPSAoc2FtcGxlcywgc2FtcGxlUmF0ZSwgbnVtQ2hhbm5lbHMpID0+IHsKICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig0NCArIHNhbXBsZXMubGVuZ3RoICogMik7CiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7CiAgICB3cml0ZVN0cmluZyh2aWV3LCAwLCAnUklGRicpOwogICAgdmlldy5zZXRVaW50MzIoNCwgMzYgKyBzYW1wbGVzLmxlbmd0aCAqIDIsIHRydWUpOwogICAgd3JpdGVTdHJpbmcodmlldywgOCwgJ1dBVkUnKTsKICAgIHdyaXRlU3RyaW5nKHZpZXcsIDEyLCAnZm10ICcpOwogICAgdmlldy5zZXRVaW50MzIoMTYsIDE2LCB0cnVlKTsKICAgIHZpZXcuc2V0VWludDE2KDIwLCAxLCB0cnVlKTsKICAgIHZpZXcuc2V0VWludDE2KDIyLCBudW1DaGFubmVscywgdHJ1ZSk7CiAgICB2aWV3LnNldFVpbnQzMigyNCwgc2FtcGxlUmF0ZSwgdHJ1ZSk7CiAgICB2aWV3LnNldFVpbnQzMigyOCwgc2FtcGxlUmF0ZSAqIG51bUNoYW5uZWxzICogMiwgdHJ1ZSk7CiAgICB2aWV3LnNldFVpbnQxNigzMiwgbnVtQ2hhbm5lbHMgKiAyLCB0cnVlKTsKICAgIHZpZXcuc2V0VWludDE2KDM0LCAxNiwgdHJ1ZSk7CiAgICB3cml0ZVN0cmluZyh2aWV3LCAzNiwgJ2RhdGEnKTsKICAgIHZpZXcuc2V0VWludDMyKDQwLCBzYW1wbGVzLmxlbmd0aCAqIDIsIHRydWUpOwogICAgZmxvYXRUbzE2Qml0UENNKHZpZXcsIDQ0LCBzYW1wbGVzKTsKICAgIHJldHVybiB2aWV3Owp9OwovLyAtLS0gU3RlbSBTZXBhcmF0b3IgVG9vbCAtLS0KZXhwb3J0IGNvbnN0IFN0ZW1TZXBhcmF0b3IgPSAoKSA9PiB7CiAgICBjb25zdCBbZmlsZSwgc2V0RmlsZV0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtpc1Byb2Nlc3NpbmcsIHNldElzUHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbcHJvZ3Jlc3MsIHNldFByb2dyZXNzXSA9IHVzZVN0YXRlKDApOwogICAgY29uc3QgW3N0ZW1zLCBzZXRTdGVtc10gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFthY3RpdmVQcmV2aWV3LCBzZXRBY3RpdmVQcmV2aWV3XSA9IHVzZVN0YXRlKCdvcmlnaW5hbCcpOwogICAgY29uc3QgYXVkaW9DdHhSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCBvcmlnaW5hbEJ1ZmZlclJlZiA9IHVzZVJlZihudWxsKTsKICAgIGNvbnN0IGhhbmRsZUZpbGUgPSBhc3luYyAoZSkgPT4gewogICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZS50YXJnZXQuZmlsZXM/LlswXTsKICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgICAgc2V0RmlsZShzZWxlY3RlZCk7CiAgICAgICAgICAgIHNldFN0ZW1zKG51bGwpOwogICAgICAgICAgICBzZXRQcm9ncmVzcygwKTsKICAgICAgICAgICAgY29uc3QgY3R4ID0gbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7CiAgICAgICAgICAgIGF1ZGlvQ3R4UmVmLmN1cnJlbnQgPSBjdHg7CiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgc2VsZWN0ZWQuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IGN0eC5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIpOwogICAgICAgICAgICBvcmlnaW5hbEJ1ZmZlclJlZi5jdXJyZW50ID0gZGVjb2RlZDsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgcHJvY2Vzc1N0ZW1zID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghb3JpZ2luYWxCdWZmZXJSZWYuY3VycmVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzUHJvY2Vzc2luZyh0cnVlKTsKICAgICAgICBzZXRQcm9ncmVzcygxMCk7CiAgICAgICAgY29uc3QgYnVmZmVyID0gb3JpZ2luYWxCdWZmZXJSZWYuY3VycmVudDsKICAgICAgICBjb25zdCBsZW5ndGggPSBidWZmZXIubGVuZ3RoOwogICAgICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBidWZmZXIuc2FtcGxlUmF0ZTsKICAgICAgICBjb25zdCBsZWZ0ID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwogICAgICAgIGNvbnN0IHJpZ2h0ID0gYnVmZmVyLm51bWJlck9mQ2hhbm5lbHMgPiAxID8gYnVmZmVyLmdldENoYW5uZWxEYXRhKDEpIDogbGVmdDsKICAgICAgICAvLyBTaW11bGF0ZSBOZXVyYWwgUHJvZ3Jlc3MKICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgc2V0UHJvZ3Jlc3MocHJldiA9PiAocHJldiA8IDkwID8gcHJldiArIDUgOiBwcmV2KSk7CiAgICAgICAgfSwgMjAwKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAvLyAxLiBHZW5lcmF0ZSBJbnN0cnVtZW50YWwgKFBoYXNlIENhbmNlbGxhdGlvbjogTCAtIFIpCiAgICAgICAgICAgIC8vIFRoaXMgcmVtb3ZlcyBjZW50ZXItcGFubmVkIGF1ZGlvICh2b2NhbHMpCiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhbEwgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhbFIgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBsZWZ0W2ldIC0gcmlnaHRbaV07CiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YWxMW2ldID0gZGlmZjsKICAgICAgICAgICAgICAgIGluc3RydW1lbnRhbFJbaV0gPSAtZGlmZjsgLy8gSW52ZXJ0ZWQgZm9yIHN0ZXJlbyB3aWR0aAogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IGluc3RJbnRlcmxlYXZlZCA9IGludGVybGVhdmUoaW5zdHJ1bWVudGFsTCwgaW5zdHJ1bWVudGFsUik7CiAgICAgICAgICAgIGNvbnN0IGluc3RCbG9iID0gbmV3IEJsb2IoW2VuY29kZVdBVihpbnN0SW50ZXJsZWF2ZWQsIHNhbXBsZVJhdGUsIDIpXSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTsKICAgICAgICAgICAgLy8gMi4gR2VuZXJhdGUgVm9jYWxzIChNaWQgRXh0cmFjdGlvbjogTCArIFIpCiAgICAgICAgICAgIC8vIFRoaXMgaXNvbGF0ZXMgY29tbW9uIGluZm9ybWF0aW9uICh1c3VhbGx5IHZvY2FscykKICAgICAgICAgICAgY29uc3Qgdm9jYWxMID0gbmV3IEZsb2F0MzJBcnJheShsZW5ndGgpOwogICAgICAgICAgICBjb25zdCB2b2NhbFIgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IChsZWZ0W2ldICsgcmlnaHRbaV0pIC8gMjsKICAgICAgICAgICAgICAgIHZvY2FsTFtpXSA9IHN1bTsKICAgICAgICAgICAgICAgIHZvY2FsUltpXSA9IHN1bTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCB2b2NhbEludGVybGVhdmVkID0gaW50ZXJsZWF2ZSh2b2NhbEwsIHZvY2FsUik7CiAgICAgICAgICAgIGNvbnN0IHZvY2FsQmxvYiA9IG5ldyBCbG9iKFtlbmNvZGVXQVYodm9jYWxJbnRlcmxlYXZlZCwgc2FtcGxlUmF0ZSwgMildLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pOwogICAgICAgICAgICBzZXRTdGVtcyh7CiAgICAgICAgICAgICAgICB2b2NhbHM6IFVSTC5jcmVhdGVPYmplY3RVUkwodm9jYWxCbG9iKSwKICAgICAgICAgICAgICAgIGluc3RydW1lbnRhbDogVVJMLmNyZWF0ZU9iamVjdFVSTChpbnN0QmxvYikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHNldFByb2dyZXNzKDEwMCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgYWxlcnQoIkFJIHByb2Nlc3NpbmcgZmFpbGVkLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7CiAgICAgICAgICAgIHNldElzUHJvY2Vzc2luZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiU3RlbSBTZXBhcmF0b3IgUHJvIiwgZGVzY3JpcHRpb246ICJFeHRyYWN0IHZvY2FscyBhbmQgaW5zdHJ1bWVudGFscyBmcm9tIGFueSBzb25nIHVzaW5nIGJyb3dzZXItbmF0aXZlIEFJIHNwZWN0cmFsIGlzb2xhdGlvbi4iLCBpY29uOiBTcGxpdCwgY2F0ZWdvcnk6ICJNdXNpYyIsIGNoaWxkcmVuOiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy01eGwgbXgtYXV0byBzcGFjZS15LTEwIiwgY2hpbGRyZW46ICFmaWxlID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtWzIuNXJlbV0gcC0yNCB0ZXh0LWNlbnRlciBob3ZlcjpiZy1ncmF5LTUwIGRhcms6aG92ZXI6YmctZGFyay05MDAvNTAgdHJhbnNpdGlvbi1hbGwgY3Vyc29yLXBvaW50ZXIgZ3JvdXAiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAiZmlsZSIsIGFjY2VwdDogImF1ZGlvLyoiLCBvbkNoYW5nZTogaGFuZGxlRmlsZSwgaWQ6ICJzdGVtLXVwbG9hZCIsIGNsYXNzTmFtZTogImhpZGRlbiIgfSksIF9qc3hzKCJsYWJlbCIsIHsgaHRtbEZvcjogInN0ZW0tdXBsb2FkIiwgY2xhc3NOYW1lOiAiY3Vyc29yLXBvaW50ZXIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy0yNCBoLTI0IGJnLWJyYW5kLTUwIGRhcms6YmctYnJhbmQtOTAwLzIwIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYi04IHRleHQtYnJhbmQtNjAwIGdyb3VwLWhvdmVyOnNjYWxlLTExMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSIsIGNoaWxkcmVuOiBfanN4KE11c2ljMiwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIiIH0pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC0zeGwgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0yIiwgY2hpbGRyZW46ICJEcm9wIGEgdHJhY2sgdG8gc3BsaXQiIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiAiSGlnaC1maWRlbGl0eSBsb2NhbCBzdGVtIGV4dHJhY3Rpb24iIH0pXSB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMTAiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCByb3VuZGVkLTN4bCBwLTggc2hhZG93LXNtIGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTYiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy0xNiBoLTE2IGJnLWJyYW5kLTYwMCByb3VuZGVkLTJ4bCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIHNoYWRvdy1sZyBzaGFkb3ctYnJhbmQtNTAwLzIwIiwgY2hpbGRyZW46IF9qc3goRmlsZUF1ZGlvLCB7IGNsYXNzTmFtZTogInctOCBoLTgiIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImg0IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYmxhY2sgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgdHJ1bmNhdGUgbWF4LXctbWQiLCBjaGlsZHJlbjogZmlsZS5uYW1lIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIlJlYWR5IGZvciBleHRyYWN0aW9uIiB9KV0gfSldIH0pLCAhc3RlbXMgJiYgIWlzUHJvY2Vzc2luZyAmJiAoX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogcHJvY2Vzc1N0ZW1zLCBjbGFzc05hbWU6ICJweC0xMCBweS00IGJnLWJyYW5kLTYwMCBob3ZlcjpiZy1icmFuZC03MDAgdGV4dC13aGl0ZSBmb250LWJsYWNrIHJvdW5kZWQtMnhsIHNoYWRvdy14bCB0cmFuc2l0aW9uLWFsbCBhY3RpdmU6c2NhbGUtOTUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMiLCBjaGlsZHJlbjogW19qc3goU3BhcmtsZXMsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSksICIgU3RhcnQgU2VwYXJhdGlvbiJdIH0pKV0gfSksIGlzUHJvY2Vzc2luZyAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS05MDAgcm91bmRlZC1bMi41cmVtXSBwLTE2IHRleHQtY2VudGVyIHNwYWNlLXktOCBhbmltYXRlLWluIGZhZGUtaW4gem9vbS1pbi05NSIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktY2VudGVyIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInJlbGF0aXZlIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMzIgaC0zMiByb3VuZGVkLWZ1bGwgYm9yZGVyLTQgYm9yZGVyLWJyYW5kLTUwMC8yMCBib3JkZXItdC1icmFuZC01MDAgYW5pbWF0ZS1zcGluIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtMnhsIGZvbnQtYmxhY2sgdGV4dC13aGl0ZSIsIGNoaWxkcmVuOiBbcHJvZ3Jlc3MsICIlIl0gfSkgfSldIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTJ4bCBmb250LWJsYWNrIHRleHQtd2hpdGUgbWItMiIsIGNoaWxkcmVuOiAiQUkgQW5hbHl6aW5nIFNwZWN0cnVtLi4uIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTQwMCBmb250LW1lZGl1bSIsIGNoaWxkcmVuOiAiSXNvbGF0aW5nIGZyZXF1ZW5jeSBjb21wb25lbnRzIGFuZCBwaGFzZSBkYXRhIiB9KV0gfSldIH0pKSwgc3RlbXMgJiYgKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTggYW5pbWF0ZS1pbiBzbGlkZS1pbi1mcm9tLWJvdHRvbS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgcm91bmRlZC1bMi41cmVtXSBwLTggc2hhZG93LWxnIGhvdmVyOnNoYWRvdy14bCB0cmFuc2l0aW9uLXNoYWRvdyBncm91cCByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHctMS41IGgtZnVsbCBiZy1yb3NlLTUwMCIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IG1iLTEwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMTQgaC0xNCBiZy1yb3NlLTUwIGRhcms6Ymctcm9zZS05MDAvMjAgcm91bmRlZC0yeGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1yb3NlLTUwMCBncm91cC1ob3ZlcjpzY2FsZS0xMTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0iLCBjaGlsZHJlbjogX2pzeChNaWMyLCB7IGNsYXNzTmFtZTogInctNiBoLTYiIH0pIH0pLCBfanN4KCJhIiwgeyBocmVmOiBzdGVtcy52b2NhbHMsIGRvd25sb2FkOiAidm9jYWxzLndhdiIsIGNsYXNzTmFtZTogInAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBob3ZlcjpiZy1yb3NlLTUwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tYWxsIHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTJ4bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIiLCBjaGlsZHJlbjogIlZvY2FscyBTdGVtIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNTAwIG1iLTgiLCBjaGlsZHJlbjogIklzb2xhdGVkIGNlbnRlci1jaGFubmVsIHZvY2FsIGZyZXF1ZW5jaWVzIHdpdGggbWluaW1hbCBibGVlZGluZy4iIH0pLCBfanN4KCJhdWRpbyIsIHsgc3JjOiBzdGVtcy52b2NhbHMsIGNvbnRyb2xzOiB0cnVlLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC0xMCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgcm91bmRlZC1bMi41cmVtXSBwLTggc2hhZG93LWxnIGhvdmVyOnNoYWRvdy14bCB0cmFuc2l0aW9uLXNoYWRvdyBncm91cCByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHctMS41IGgtZnVsbCBiZy1lbWVyYWxkLTUwMCIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IG1iLTEwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMTQgaC0xNCBiZy1lbWVyYWxkLTUwIGRhcms6YmctZW1lcmFsZC05MDAvMjAgcm91bmRlZC0yeGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1lbWVyYWxkLTUwMCBncm91cC1ob3ZlcjpzY2FsZS0xMTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0iLCBjaGlsZHJlbjogX2pzeChIZWFkcGhvbmVzLCB7IGNsYXNzTmFtZTogInctNiBoLTYiIH0pIH0pLCBfanN4KCJhIiwgeyBocmVmOiBzdGVtcy5pbnN0cnVtZW50YWwsIGRvd25sb2FkOiAiaW5zdHJ1bWVudGFsLndhdiIsIGNsYXNzTmFtZTogInAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBob3ZlcjpiZy1lbWVyYWxkLTUwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tYWxsIHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTJ4bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIiLCBjaGlsZHJlbjogIkluc3RydW1lbnRhbCBTdGVtIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNTAwIG1iLTgiLCBjaGlsZHJlbjogIkZ1bGwtd2lkdGggc3RlcmVvIHRyYWNrIHdpdGggY2VudGVyLWNoYW5uZWwgdm9jYWwgY29tcG9uZW50cyByZW1vdmVkLiIgfSksIF9qc3goImF1ZGlvIiwgeyBzcmM6IHN0ZW1zLmluc3RydW1lbnRhbCwgY29udHJvbHM6IHRydWUsIGNsYXNzTmFtZTogInctZnVsbCBoLTEwIiB9KV0gfSldIH0pKSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgdGV4dC1bMTBweF0gZm9udC1ibGFjayB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4zZW1dIHB0LTEwIiwgY2hpbGRyZW46IFtfanN4KFphcCwgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIHRleHQtYnJhbmQtNTAwIiB9KSwgIiBBSS1OYXRpdmUgU3BlY3RyYWwgUHJvY2Vzc2luZyJdIH0pXSB9KSkgfSkgfSkpOwp9OwovLyAtLS0gTWV0cm9ub21lIC0tLQpleHBvcnQgY29uc3QgTWV0cm9ub21lID0gKCkgPT4gewogICAgY29uc3QgW2JwbSwgc2V0QnBtXSA9IHVzZVN0YXRlKDEyMCk7CiAgICBjb25zdCBbaXNQbGF5aW5nLCBzZXRJc1BsYXlpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW2JlYXRzUGVyTWVhc3VyZSwgc2V0QmVhdHNQZXJNZWFzdXJlXSA9IHVzZVN0YXRlKDQpOwogICAgY29uc3QgW2N1cnJlbnRCZWF0LCBzZXRDdXJyZW50QmVhdF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFt0YXBUaW1lcywgc2V0VGFwVGltZXNdID0gdXNlU3RhdGUoW10pOwogICAgLy8gV2ViIEF1ZGlvIFNjaGVkdWxlciBSZWZzCiAgICBjb25zdCBhdWRpb0N0eFJlZiA9IHVzZVJlZihudWxsKTsKICAgIGNvbnN0IG5leHROb3RlVGltZVJlZiA9IHVzZVJlZigwKTsKICAgIGNvbnN0IHRpbWVyV29ya2VyUmVmID0gdXNlUmVmKG51bGwpOwogICAgY29uc3QgYmVhdFJlZiA9IHVzZVJlZigwKTsKICAgIGNvbnN0IGxvb2thaGVhZCA9IDI1LjA7IC8vIEhvdyBmcmVxdWVudGx5IHRvIGNhbGwgc2NoZWR1bGluZyBmdW5jdGlvbiAobXMpCiAgICBjb25zdCBzY2hlZHVsZUFoZWFkVGltZSA9IDAuMTsgLy8gSG93IGZhciBhaGVhZCB0byBzY2hlZHVsZSBhdWRpbyAoc2VjKQogICAgY29uc3QgcGxheUNsaWNrID0gKHRpbWUsIGlzRG93bmJlYXQpID0+IHsKICAgICAgICBpZiAoIWF1ZGlvQ3R4UmVmLmN1cnJlbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBvc2MgPSBhdWRpb0N0eFJlZi5jdXJyZW50LmNyZWF0ZU9zY2lsbGF0b3IoKTsKICAgICAgICBjb25zdCBlbnZlbG9wZSA9IGF1ZGlvQ3R4UmVmLmN1cnJlbnQuY3JlYXRlR2FpbigpOwogICAgICAgIG9zYy5mcmVxdWVuY3kudmFsdWUgPSBpc0Rvd25iZWF0ID8gODgwIDogNDQwOwogICAgICAgIGVudmVsb3BlLmdhaW4udmFsdWUgPSAxOwogICAgICAgIGVudmVsb3BlLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMSwgdGltZSArIDAuMSk7CiAgICAgICAgb3NjLmNvbm5lY3QoZW52ZWxvcGUpOwogICAgICAgIGVudmVsb3BlLmNvbm5lY3QoYXVkaW9DdHhSZWYuY3VycmVudC5kZXN0aW5hdGlvbik7CiAgICAgICAgb3NjLnN0YXJ0KHRpbWUpOwogICAgICAgIG9zYy5zdG9wKHRpbWUgKyAwLjEpOwogICAgfTsKICAgIGNvbnN0IHNjaGVkdWxlciA9ICgpID0+IHsKICAgICAgICBpZiAoIWF1ZGlvQ3R4UmVmLmN1cnJlbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB3aGlsZSAobmV4dE5vdGVUaW1lUmVmLmN1cnJlbnQgPCBhdWRpb0N0eFJlZi5jdXJyZW50LmN1cnJlbnRUaW1lICsgc2NoZWR1bGVBaGVhZFRpbWUpIHsKICAgICAgICAgICAgY29uc3QgaXNEb3duYmVhdCA9IGJlYXRSZWYuY3VycmVudCAlIGJlYXRzUGVyTWVhc3VyZSA9PT0gMDsKICAgICAgICAgICAgcGxheUNsaWNrKG5leHROb3RlVGltZVJlZi5jdXJyZW50LCBpc0Rvd25iZWF0KTsKICAgICAgICAgICAgLy8gVXBkYXRlIFVJIChTeW5jaW5nIHN0YXRlIHdpdGggYXVkaW8pCiAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlZFRpbWUgPSBuZXh0Tm90ZVRpbWVSZWYuY3VycmVudDsKICAgICAgICAgICAgY29uc3QgZGVsYXkgPSAoc2NoZWR1bGVkVGltZSAtIGF1ZGlvQ3R4UmVmLmN1cnJlbnQuY3VycmVudFRpbWUpICogMTAwMDsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBzZXRDdXJyZW50QmVhdChwcmV2ID0+IChwcmV2ICsgMSkgPiBiZWF0c1Blck1lYXN1cmUgPyAxIDogcHJldiArIDEpOwogICAgICAgICAgICB9LCBNYXRoLm1heCgwLCBkZWxheSkpOwogICAgICAgICAgICAvLyBBZHZhbmNlIHRpbWUKICAgICAgICAgICAgY29uc3Qgc2Vjb25kc1BlckJlYXQgPSA2MC4wIC8gYnBtOwogICAgICAgICAgICBuZXh0Tm90ZVRpbWVSZWYuY3VycmVudCArPSBzZWNvbmRzUGVyQmVhdDsKICAgICAgICAgICAgYmVhdFJlZi5jdXJyZW50Kys7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IHRvZ2dsZU1ldHJvbm9tZSA9ICgpID0+IHsKICAgICAgICBpZiAoaXNQbGF5aW5nKSB7CiAgICAgICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7CiAgICAgICAgICAgIHNldEN1cnJlbnRCZWF0KDApOwogICAgICAgICAgICBpZiAodGltZXJXb3JrZXJSZWYuY3VycmVudCkKICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJXb3JrZXJSZWYuY3VycmVudCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoIWF1ZGlvQ3R4UmVmLmN1cnJlbnQpCiAgICAgICAgICAgICAgICBhdWRpb0N0eFJlZi5jdXJyZW50ID0gbmV3IEF1ZGlvQ29udGV4dCgpOwogICAgICAgICAgICBpZiAoYXVkaW9DdHhSZWYuY3VycmVudC5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpCiAgICAgICAgICAgICAgICBhdWRpb0N0eFJlZi5jdXJyZW50LnJlc3VtZSgpOwogICAgICAgICAgICBiZWF0UmVmLmN1cnJlbnQgPSAwOwogICAgICAgICAgICBzZXRDdXJyZW50QmVhdCgwKTsKICAgICAgICAgICAgbmV4dE5vdGVUaW1lUmVmLmN1cnJlbnQgPSBhdWRpb0N0eFJlZi5jdXJyZW50LmN1cnJlbnRUaW1lICsgMC4wNTsKICAgICAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwogICAgICAgICAgICB0aW1lcldvcmtlclJlZi5jdXJyZW50ID0gd2luZG93LnNldEludGVydmFsKHNjaGVkdWxlciwgbG9va2FoZWFkKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgaGFuZGxlVGFwID0gKCkgPT4gewogICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7CiAgICAgICAgY29uc3QgbmV3VGFwcyA9IFsuLi50YXBUaW1lcywgbm93XS5zbGljZSgtNCk7CiAgICAgICAgc2V0VGFwVGltZXMobmV3VGFwcyk7CiAgICAgICAgaWYgKG5ld1RhcHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgY29uc3QgZGlmZnMgPSBbXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuZXdUYXBzLmxlbmd0aDsgaSsrKQogICAgICAgICAgICAgICAgZGlmZnMucHVzaChuZXdUYXBzW2ldIC0gbmV3VGFwc1tpIC0gMV0pOwogICAgICAgICAgICBjb25zdCBhdmcgPSBkaWZmcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSAvIGRpZmZzLmxlbmd0aDsKICAgICAgICAgICAgc2V0QnBtKE1hdGgucm91bmQoNjAwMDAgLyBhdmcpKTsKICAgICAgICB9CiAgICB9OwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICByZXR1cm4gKCkgPT4geyBpZiAodGltZXJXb3JrZXJSZWYuY3VycmVudCkKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcldvcmtlclJlZi5jdXJyZW50KTsgfTsKICAgIH0sIFtdKTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiTWV0cm9ub21lIiwgZGVzY3JpcHRpb246ICJQcm9mZXNzaW9uYWwgaGlnaC1wcmVjaXNpb24gbWV0cm9ub21lIHdpdGggZHJpZnQtZnJlZSBXZWIgQXVkaW8gc2NoZWR1bGluZyBhbmQgdGFwLXRlbXBvLiIsIGljb246IFRpbWVySWNvbiwgY2F0ZWdvcnk6ICJNdXNpYyIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTggbWF4LXctNHhsIG14LWF1dG8gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLTQgbWItMTIiLCBjaGlsZHJlbjogQXJyYXkuZnJvbSh7IGxlbmd0aDogYmVhdHNQZXJNZWFzdXJlIH0pLm1hcCgoXywgaSkgPT4gKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiBgdy0xNiBoLTE2IHJvdW5kZWQtMnhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTc1IGJvcmRlci0yICR7Y3VycmVudEJlYXQgPT09IGkgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpID09PSAwID8gJ2JnLXJvc2UtNTAwIGJvcmRlci1yb3NlLTQwMCBzY2FsZS0xMTAgc2hhZG93LWxnIHNoYWRvdy1yb3NlLTUwMC80MCcgOiAnYmctYnJhbmQtNTAgYm9yZGVyLWJyYW5kLTQwMCBzY2FsZS0xMTAgc2hhZG93LWxnIHNoYWRvdy1icmFuZC01MDAvNDAnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgb3BhY2l0eS0zMCd9YCwgY2hpbGRyZW46IGkgPT09IDAgJiYgX2pzeChaYXAsIHsgY2xhc3NOYW1lOiBgdy02IGgtNiAke2N1cnJlbnRCZWF0ID09PSAxID8gJ3RleHQtd2hpdGUnIDogJ3RleHQtZ3JheS0zMDAnfWAgfSkgfSwgaSkpKSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIHJvdW5kZWQtWzNyZW1dIHAtMTIgc2hhZG93LTJ4bCB3LWZ1bGwgbWF4LXctbWQgdGV4dC1jZW50ZXIgc3BhY2UteS0xMCByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogW2lzUGxheWluZyAmJiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIHRvcC0wIGxlZnQtMCB3LWZ1bGwgaC0xIGJnLWJyYW5kLTUwMCBhbmltYXRlLXB1bHNlIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0yIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEyMHB4XSBmb250LWJsYWNrIHRyYWNraW5nLXRpZ2h0ZXIgbGVhZGluZy1ub25lIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRhYnVsYXItbnVtcyIsIGNoaWxkcmVuOiBicG0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJsYWNrIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjNlbV0iLCBjaGlsZHJlbjogIkJlYXRzIFBlciBNaW51dGUiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRCcG0oYiA9PiBNYXRoLm1heCgyMCwgYiAtIDEpKSwgY2xhc3NOYW1lOiAicC0zIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLXhsIGhvdmVyOmJnLWdyYXktMTAwIiwgY2hpbGRyZW46IF9qc3goQ2hldnJvbkRvd24sIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIyMCIsIG1heDogIjI4MCIsIHZhbHVlOiBicG0sIG9uQ2hhbmdlOiBlID0+IHNldEJwbShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAiZmxleC0xIGFjY2VudC1icmFuZC02MDAgaC0yIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC1mdWxsIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlciIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0QnBtKGIgPT4gTWF0aC5taW4oMjgwLCBiICsgMSkpLCBjbGFzc05hbWU6ICJwLTMgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQteGwgaG92ZXI6YmctZ3JheS0xMDAiLCBjaGlsZHJlbjogX2pzeChDaGV2cm9uVXAsIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTIiLCBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJUaW1lIFNpZ25hdHVyZSIgfSksIF9qc3hzKCJzZWxlY3QiLCB7IHZhbHVlOiBiZWF0c1Blck1lYXN1cmUsIG9uQ2hhbmdlOiBlID0+IHsgc2V0QmVhdHNQZXJNZWFzdXJlKE51bWJlcihlLnRhcmdldC52YWx1ZSkpOyBzZXRDdXJyZW50QmVhdCgwKTsgfSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBib3JkZXItbm9uZSBmb250LWJvbGQiLCBjaGlsZHJlbjogW19qc3goIm9wdGlvbiIsIHsgdmFsdWU6IDIsIGNoaWxkcmVuOiAiMiAvIDQiIH0pLCBfanN4KCJvcHRpb24iLCB7IHZhbHVlOiAzLCBjaGlsZHJlbjogIjMgLyA0IiB9KSwgX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogNCwgY2hpbGRyZW46ICI0IC8gNCIgfSksIF9qc3goIm9wdGlvbiIsIHsgdmFsdWU6IDYsIGNoaWxkcmVuOiAiNiAvIDgiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMiIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiLCBjaGlsZHJlbjogIlRlbXBvIEFzc2lzdCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlVGFwLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBmb250LWJsYWNrIHRleHQteHMgdXBwZXJjYXNlIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzIGFjdGl2ZTpzY2FsZS05NSIsIGNoaWxkcmVuOiAiVGFwIFRlbXBvIiB9KV0gfSldIH0pXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiB0b2dnbGVNZXRyb25vbWUsIGNsYXNzTmFtZTogYHctZnVsbCBweS02IHJvdW5kZWQtWzJyZW1dIGZvbnQtYmxhY2sgdGV4dC0yeGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTQgc2hhZG93LXhsIHRyYW5zaXRpb24tYWxsIGFjdGl2ZTpzY2FsZS05NSAke2lzUGxheWluZyA/ICdiZy1yb3NlLTUwMCB0ZXh0LXdoaXRlIHNoYWRvdy1yb3NlLTUwMC8yMCcgOiAnYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgc2hhZG93LWJyYW5kLTUwMC8yMCd9YCwgY2hpbGRyZW46IGlzUGxheWluZyA/IF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goU3F1YXJlLCB7IGNsYXNzTmFtZTogInctOCBoLTggZmlsbC1jdXJyZW50IiB9KSwgIiBTdG9wIl0gfSkgOiBfanN4cyhfRnJhZ21lbnQsIHsgY2hpbGRyZW46IFtfanN4KFBsYXksIHsgY2xhc3NOYW1lOiAidy04IGgtOCBmaWxsLWN1cnJlbnQgbWwtMSIgfSksICIgU3RhcnQgQmVhdCJdIH0pIH0pXSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gU29uZyBCUE0gRmluZGVyIC0tLQpleHBvcnQgY29uc3QgU29uZ0JwbUZpbmRlciA9ICgpID0+IHsKICAgIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3Jlc3VsdCwgc2V0UmVzdWx0XSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IGhhbmRsZVNlYXJjaCA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIXF1ZXJ5LnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgRmluZCB0aGUgS2V5IGFuZCBCUE0gb2YgdGhlIHNvbmc6ICIke3F1ZXJ5fSIuIFJldHVybiBzdHJpY3RseSBhcyBKU09OIG9iamVjdCB3aXRoIGZpZWxkczogdGl0bGUsIGFydGlzdCwga2V5LCBicG0sIHllYXIuYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKSk7CiAgICAgICAgICAgIHNldFJlc3VsdChkYXRhKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgYWxlcnQoIkNvdWxkIG5vdCBmaW5kIHNvbmcgZGV0YWlscy4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiU29uZyBCUE0gJiBLZXkgRmluZGVyIiwgZGVzY3JpcHRpb246ICJJZGVudGlmeSB0aGUgbXVzaWNhbCBrZXkgYW5kIHRlbXBvIChCUE0pIG9mIGFueSBzb25nLiIsIGljb246IERpc2MsIGNhdGVnb3J5OiAiTXVzaWMiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC02IG1heC13LTJ4bCBteC1hdXRvIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGdhcC00IG1iLTgiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBxdWVyeSwgb25DaGFuZ2U6IGUgPT4gc2V0UXVlcnkoZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIkVudGVyIFNvbmcgTmFtZSBhbmQgQXJ0aXN0Li4uIiwgY2xhc3NOYW1lOiAiZmxleC0xIHAtNCBib3JkZXIgcm91bmRlZC14bCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlU2VhcmNoLCBkaXNhYmxlZDogaXNMb2FkaW5nLCBjbGFzc05hbWU6ICJweC02IGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQteGwgZm9udC1ib2xkIiwgY2hpbGRyZW46IGlzTG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJhbmltYXRlLXNwaW4iIH0pIDogX2pzeChTZWFyY2gsIHt9KSB9KV0gfSksIHJlc3VsdCAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBbX2pzeCgiaDMiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ib2xkIG1iLTIiLCBjaGlsZHJlbjogcmVzdWx0LnRpdGxlIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIG1iLTQiLCBjaGlsZHJlbjogcmVzdWx0LmFydGlzdCB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC00IGJnLWJyYW5kLTUwIHJvdW5kZWQteGwiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyB1cHBlcmNhc2UgZm9udC1ib2xkIHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogIlRlbXBvIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ibGFjayB0ZXh0LWJyYW5kLTYwMCIsIGNoaWxkcmVuOiBbcmVzdWx0LmJwbSwgIiBCUE0iXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBiZy1vcmFuZ2UtNTAgcm91bmRlZC14bCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIHVwcGVyY2FzZSBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiAiS2V5IiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTJ4bCBmb250LWJsYWNrIHRleHQtb3JhbmdlLTYwMCIsIGNoaWxkcmVuOiByZXN1bHQua2V5IH0pXSB9KV0gfSldIH0pKV0gfSkgfSkpOwp9OwovLyAtLS0gQXVkaW8gQ29udmVydGVyIC0tLQpleHBvcnQgY29uc3QgQXVkaW9Db252ZXJ0ZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbZmlsZSwgc2V0RmlsZV0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtpc1Byb2Nlc3NpbmcsIHNldElzUHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBoYW5kbGVDb252ZXJ0ID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghZmlsZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzUHJvY2Vzc2luZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBhdWRpb0N0eCA9IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgICAgY29uc3QgYXVkaW9CdWZmZXIgPSBhd2FpdCBhdWRpb0N0eC5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIpOwogICAgICAgICAgICBjb25zdCBsZWZ0ID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscyA+IDEgPyBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgxKSA6IGxlZnQ7CiAgICAgICAgICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZShsZWZ0LCByaWdodCk7CiAgICAgICAgICAgIGNvbnN0IHdhdlZpZXcgPSBlbmNvZGVXQVYoaW50ZXJsZWF2ZWQsIGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsIDIpOwogICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3dhdlZpZXddLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pOwogICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgICBhLmhyZWYgPSB1cmw7CiAgICAgICAgICAgIGEuZG93bmxvYWQgPSBgJHtmaWxlLm5hbWUucmVwbGFjZSgvXC5bXi8uXSskLywgIiIpfS53YXZgOwogICAgICAgICAgICBhLmNsaWNrKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIGFsZXJ0KCJDb252ZXJzaW9uIGZhaWxlZC4gRW5zdXJlIHRoZSBmaWxlIGlzIGEgdmFsaWQgYXVkaW8gZm9ybWF0LiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNQcm9jZXNzaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJBdWRpbyBDb252ZXJ0ZXIiLCBkZXNjcmlwdGlvbjogIkZhc3QsIHByaXZhdGUgYnJvd3Nlci1iYXNlZCBhdWRpbyBjb252ZXJzaW9uIHRvIFdBViBmb3JtYXQuIiwgaWNvbjogRmlsZUF1ZGlvLCBjYXRlZ29yeTogIk11c2ljIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAicC0xMiBtYXgteGwgbXgtYXV0byBzcGFjZS15LTggdGV4dC1jZW50ZXIiLCBjaGlsZHJlbjogIWZpbGUgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItZ3JheS0zMDAgcm91bmRlZC0zeGwgcC0xNiBob3ZlcjpiZy1ncmF5LTUwIHRyYW5zaXRpb24tYWxsIGN1cnNvci1wb2ludGVyIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImZpbGUiLCBhY2NlcHQ6ICJhdWRpby8qIiwgb25DaGFuZ2U6IGUgPT4gc2V0RmlsZShlLnRhcmdldC5maWxlcz8uWzBdIHx8IG51bGwpLCBjbGFzc05hbWU6ICJoaWRkZW4iLCBpZDogImF1ZC1jb252IiB9KSwgX2pzeHMoImxhYmVsIiwgeyBodG1sRm9yOiAiYXVkLWNvbnYiLCBjbGFzc05hbWU6ICJjdXJzb3ItcG9pbnRlciBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeChVcGxvYWQsIHsgY2xhc3NOYW1lOiAidy0xMiBoLTEyIHRleHQtYnJhbmQtNTAwIG1iLTQiIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46ICJVcGxvYWQgQXVkaW8iIH0pXSB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgcC04IHJvdW5kZWQtM3hsIGJvcmRlciBib3JkZXItZ3JheS0xMDAgc2hhZG93LXNtIHNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgdGV4dC1sZWZ0IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInAtMyBiZy1icmFuZC01MCB0ZXh0LWJyYW5kLTYwMCByb3VuZGVkLXhsIiwgY2hpbGRyZW46IF9qc3goRmlsZUF1ZGlvLCB7fSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSBtaW4tdy0wIiwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRydW5jYXRlIiwgY2hpbGRyZW46IGZpbGUubmFtZSB9KSwgX2pzeHMoInAiLCB7IGNsYXNzTmFtZTogInRleHQteHMgdGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiBbKGZpbGUuc2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpLCAiIE1CIl0gfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldEZpbGUobnVsbCksIGNsYXNzTmFtZTogInRleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC1yZWQtNTAwIiwgY2hpbGRyZW46IF9qc3goVHJhc2gyLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlQ29udmVydCwgZGlzYWJsZWQ6IGlzUHJvY2Vzc2luZywgY2xhc3NOYW1lOiAidy1mdWxsIHB5LTQgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQtMnhsIHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbaXNQcm9jZXNzaW5nID8gX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogImFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KERvd25sb2FkLCB7fSksICIgQ29udmVydCB0byBXQVYiXSB9KV0gfSkpIH0pIH0pKTsKfTsKLy8gLS0tIFNtYXJ0IEF1ZGlvIFRyaW1tZXIgLS0tCmV4cG9ydCBjb25zdCBTbWFydEF1ZGlvVHJpbW1lciA9ICgpID0+IHsKICAgIGNvbnN0IFtmaWxlLCBzZXRGaWxlXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2J1ZmZlciwgc2V0QnVmZmVyXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW3N0YXJ0LCBzZXRTdGFydF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFtlbmQsIHNldEVuZF0gPSB1c2VTdGF0ZSgxMCk7CiAgICBjb25zdCBbaXNQcm9jZXNzaW5nLCBzZXRJc1Byb2Nlc3NpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgaGFuZGxlRmlsZSA9IGFzeW5jIChlKSA9PiB7CiAgICAgICAgaWYgKGUudGFyZ2V0LmZpbGVzPy5bMF0pIHsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBlLnRhcmdldC5maWxlc1swXTsKICAgICAgICAgICAgc2V0RmlsZShzZWxlY3RlZCk7CiAgICAgICAgICAgIGNvbnN0IGF1ZGlvQ3R4ID0gbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7CiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgc2VsZWN0ZWQuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IGF1ZGlvQ3R4LmRlY29kZUF1ZGlvRGF0YShhcnJheUJ1ZmZlcik7CiAgICAgICAgICAgIHNldEJ1ZmZlcihkZWNvZGVkKTsKICAgICAgICAgICAgc2V0RW5kKE1hdGgubWluKGRlY29kZWQuZHVyYXRpb24sIDEwKSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGhhbmRsZVRyaW0gPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc1Byb2Nlc3NpbmcodHJ1ZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgYXVkaW9DdHggPSBuZXcgQXVkaW9Db250ZXh0KCk7CiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBidWZmZXIuc2FtcGxlUmF0ZTsKICAgICAgICAgICAgY29uc3Qgc3RhcnRTYW1wbGUgPSBNYXRoLmZsb29yKHN0YXJ0ICogc2FtcGxlUmF0ZSk7CiAgICAgICAgICAgIGNvbnN0IGVuZFNhbXBsZSA9IE1hdGguZmxvb3IoZW5kICogc2FtcGxlUmF0ZSk7CiAgICAgICAgICAgIGNvbnN0IGZyYW1lQ291bnQgPSBlbmRTYW1wbGUgLSBzdGFydFNhbXBsZTsKICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gYXVkaW9DdHguY3JlYXRlQnVmZmVyKGJ1ZmZlci5udW1iZXJPZkNoYW5uZWxzLCBmcmFtZUNvdW50LCBzYW1wbGVSYXRlKTsKICAgICAgICAgICAgZm9yIChsZXQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBidWZmZXIubnVtYmVyT2ZDaGFubmVsczsgY2hhbm5lbCsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7CiAgICAgICAgICAgICAgICBjb25zdCB0aGVuID0gbmV3QnVmZmVyLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpOwogICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0aGVuW2ldID0gbm93W2kgKyBzdGFydFNhbXBsZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgbGVmdCA9IG5ld0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBuZXdCdWZmZXIubnVtYmVyT2ZDaGFubmVscyA+IDEgPyBuZXdCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMSkgOiBsZWZ0OwogICAgICAgICAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmUobGVmdCwgcmlnaHQpOwogICAgICAgICAgICBjb25zdCB3YXZWaWV3ID0gZW5jb2RlV0FWKGludGVybGVhdmVkLCBzYW1wbGVSYXRlLCAyKTsKICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt3YXZWaWV3XSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTsKICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgYS5ocmVmID0gdXJsOwogICAgICAgICAgICBhLmRvd25sb2FkID0gYHRyaW1tZWRfJHtmaWxlPy5uYW1lIHx8ICdhdWRpbyd9LndhdmA7CiAgICAgICAgICAgIGEuY2xpY2soKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgYWxlcnQoIlRyaW0gZmFpbGVkLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNQcm9jZXNzaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJTbWFydCBBdWRpbyBUcmltbWVyIiwgZGVzY3JpcHRpb246ICJDdXQgYXVkaW8gdHJhY2tzIHdpdGggc2FtcGxlLWFjY3VyYXRlIHByZWNpc2lvbiB1c2luZyB5b3VyIGJyb3dzZXIncyBhdWRpbyBlbmdpbmUuIiwgaWNvbjogU2Npc3NvcnMsIGNhdGVnb3J5OiAiTXVzaWMiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgbWF4LXctNHhsIG14LWF1dG8gc3BhY2UteS04IiwgY2hpbGRyZW46ICFmaWxlID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtM3hsIHAtMTYgdGV4dC1jZW50ZXIgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWFsbCBjdXJzb3ItcG9pbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJmaWxlIiwgYWNjZXB0OiAiYXVkaW8vKiIsIG9uQ2hhbmdlOiBoYW5kbGVGaWxlLCBjbGFzc05hbWU6ICJoaWRkZW4iLCBpZDogImF1ZC10cmltIiB9KSwgX2pzeHMoImxhYmVsIiwgeyBodG1sRm9yOiAiYXVkLXRyaW0iLCBjbGFzc05hbWU6ICJjdXJzb3ItcG9pbnRlciBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeChTY2lzc29ycywgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIgdGV4dC1yb3NlLTUwMCBtYi00IiB9KSwgX2pzeCgiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiAiVXBsb2FkIEF1ZGlvIHRvIFRyaW0iIH0pXSB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCByb3VuZGVkLTJ4bCBwLTggc2hhZG93LXNtIHNwYWNlLXktOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRydW5jYXRlIG1heC13LXhzIiwgY2hpbGRyZW46IGZpbGUubmFtZSB9KSwgX2pzeHMoInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1tb25vIHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogWyJUb3RhbDogIiwgYnVmZmVyPy5kdXJhdGlvbi50b0ZpeGVkKDEpLCAicyJdIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJTdGFydCAoc2VjKSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgc3RlcDogIjAuMSIsIHZhbHVlOiBzdGFydCwgb25DaGFuZ2U6IGUgPT4gc2V0U3RhcnQoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBwLTMgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLWdyYXktNTAgZm9udC1ib2xkIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIkVuZCAoc2VjKSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgc3RlcDogIjAuMSIsIHZhbHVlOiBlbmQsIG9uQ2hhbmdlOiBlID0+IHNldEVuZChOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MCBmb250LWJvbGQiIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInJlbGF0aXZlIHB0LTEiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwIiwgbWF4OiBidWZmZXI/LmR1cmF0aW9uIHx8IDEwMCwgc3RlcDogIjAuMSIsIHZhbHVlOiBzdGFydCwgb25DaGFuZ2U6IGUgPT4gc2V0U3RhcnQoTWF0aC5taW4oTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSwgZW5kIC0gMC4xKSksIGNsYXNzTmFtZTogInctZnVsbCBoLTIgYmctZ3JheS0xMDAgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUgY3Vyc29yLXBvaW50ZXIgYWNjZW50LXJvc2UtNTAwIGFic29sdXRlIHotMTAgb3BhY2l0eS01MCIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwIiwgbWF4OiBidWZmZXI/LmR1cmF0aW9uIHx8IDEwMCwgc3RlcDogIjAuMSIsIHZhbHVlOiBlbmQsIG9uQ2hhbmdlOiBlID0+IHNldEVuZChNYXRoLm1heChOdW1iZXIoZS50YXJnZXQudmFsdWUpLCBzdGFydCArIDAuMSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC0yIGJnLWdyYXktMTAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIGFjY2VudC1icmFuZC01MDAiIH0pXSB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZVRyaW0sIGRpc2FibGVkOiBpc1Byb2Nlc3NpbmcsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLXJvc2UtNjAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQtMnhsIHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbaXNQcm9jZXNzaW5nID8gX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogImFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KERvd25sb2FkLCB7fSksICIgVHJpbSAmIERvd25sb2FkIFdBViJdIH0pXSB9KSkgfSkgfSkpOwp9OwovLyAtLS0gTHlyaWMgRml4ZXIgJiBBc3Npc3RhbnQgLS0tCmV4cG9ydCBjb25zdCBMeXJpY0ZpeGVyID0gKCkgPT4gewogICAgY29uc3QgW2x5cmljcywgc2V0THlyaWNzXSA9IHVzZVN0YXRlKCcnKTsKICAgIGNvbnN0IFtyZXN1bHQsIHNldFJlc3VsdF0gPSB1c2VTdGF0ZSgnJyk7CiAgICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgaGFuZGxlRml4ID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghbHlyaWNzLnRyaW0oKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgQW5hbHl6ZSBhbmQgaW1wcm92ZSB0aGVzZSBzb25nIGx5cmljcy4gRml4IHJoeW1lcywgcmh5dGhtLCBvciBzdWdnZXN0IGJldHRlciB3b3JkIGNob2ljZXMgd2hpbGUga2VlcGluZyB0aGUgY29yZSBlbW90aW9uOlxuXG4ke2x5cmljc31gOwogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdlbmVyYXRlVGV4dChwcm9tcHQpOwogICAgICAgICAgICBzZXRSZXN1bHQocmVzcG9uc2UpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBhbGVydCgiQUkgZmFpbGVkIHRvIHByb2Nlc3MgbHlyaWNzLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJMeXJpYyBBc3Npc3RhbnQiLCBkZXNjcmlwdGlvbjogIkVuaGFuY2UgeW91ciBzb25nd3JpdGluZyB3aXRoIEFJLXBvd2VyZWQgcmh5bWUgYW5kIHJoeXRobSBzdWdnZXN0aW9ucy4iLCBpY29uOiBNaWMyLCBjYXRlZ29yeTogIk11c2ljIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBtYXgtdy00eGwgbXgtYXV0byBncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3goInRleHRhcmVhIiwgeyB2YWx1ZTogbHlyaWNzLCBvbkNoYW5nZTogZSA9PiBzZXRMeXJpY3MoZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIlBhc3RlIHlvdXIgZHJhZnQgbHlyaWNzIGhlcmUuLi4iLCBjbGFzc05hbWU6ICJ3LWZ1bGwgaC02NCBwLTQgYm9yZGVyIHJvdW5kZWQteGwgcmVzaXplLW5vbmUiIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBoYW5kbGVGaXgsIGRpc2FibGVkOiBpc0xvYWRpbmcsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQteGwgZm9udC1ib2xkIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtpc0xvYWRpbmcgPyBfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAiYW5pbWF0ZS1zcGluIiB9KSA6IF9qc3goU3BhcmtsZXMsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgSW1wcm92ZSBMeXJpY3MiXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS01MCBwLTYgcm91bmRlZC14bCBib3JkZXIgbWluLWgtWzI1NnB4XSB3aGl0ZXNwYWNlLXByZS13cmFwIiwgY2hpbGRyZW46IHJlc3VsdCB8fCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNDAwIGl0YWxpYyIsIGNoaWxkcmVuOiAiU3VnZ2VzdGlvbnMgd2lsbCBhcHBlYXIgaGVyZS4uLiIgfSkgfSldIH0pIH0pKTsKfTsKLy8gLS0tIFBpdGNoICYgVGVtcG8gU2hpZnRlciBUb29sIC0tLQpleHBvcnQgY29uc3QgUGl0Y2hTaGlmdGVyID0gKCkgPT4gewogICAgY29uc3QgW2ZpbGUsIHNldEZpbGVdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbYXVkaW9CdWZmZXIsIHNldEF1ZGlvQnVmZmVyXSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW3BpdGNoLCBzZXRQaXRjaF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFt0ZW1wbywgc2V0VGVtcG9dID0gdXNlU3RhdGUoMSk7CiAgICBjb25zdCBbdm9sdW1lLCBzZXRWb2x1bWVdID0gdXNlU3RhdGUoMC44KTsKICAgIGNvbnN0IFtpc1BsYXlpbmcsIHNldElzUGxheWluZ10gPSB1c2VTdGF0ZShmYWxzZSk7CiAgICBjb25zdCBbY3VycmVudFRpbWUsIHNldEN1cnJlbnRUaW1lXSA9IHVzZVN0YXRlKDApOwogICAgY29uc3QgW2lzUHJvY2Vzc2luZywgc2V0SXNQcm9jZXNzaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtpc0V4cG9ydGluZywgc2V0SXNFeHBvcnRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgYXVkaW9DdHhSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCBzb3VyY2VOb2RlUmVmID0gdXNlUmVmKG51bGwpOwogICAgY29uc3QgZ2Fpbk5vZGVSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCBzdGFydFRpbWVSZWYgPSB1c2VSZWYoMCk7CiAgICBjb25zdCBwYXVzZWRBdFJlZiA9IHVzZVJlZigwKTsKICAgIGNvbnN0IHdhdmVmb3JtUmVmID0gdXNlUmVmKG51bGwpOwogICAgY29uc3QgcGxheWhlYWRSZWYgPSB1c2VSZWYobnVsbCk7CiAgICBjb25zdCByZXF1ZXN0UmVmID0gdXNlUmVmKDApOwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgICBpZiAoYXVkaW9DdHhSZWYuY3VycmVudCkKICAgICAgICAgICAgICAgIGF1ZGlvQ3R4UmVmLmN1cnJlbnQuY2xvc2UoKTsKICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVxdWVzdFJlZi5jdXJyZW50KTsKICAgICAgICB9OwogICAgfSwgW10pOwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICBpZiAoc291cmNlTm9kZVJlZi5jdXJyZW50ICYmIGF1ZGlvQ3R4UmVmLmN1cnJlbnQpIHsKICAgICAgICAgICAgc291cmNlTm9kZVJlZi5jdXJyZW50LnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGVtcG8sIGF1ZGlvQ3R4UmVmLmN1cnJlbnQuY3VycmVudFRpbWUsIDAuMDUpOwogICAgICAgICAgICBzb3VyY2VOb2RlUmVmLmN1cnJlbnQuZGV0dW5lLnNldFRhcmdldEF0VGltZShwaXRjaCAqIDEwMCwgYXVkaW9DdHhSZWYuY3VycmVudC5jdXJyZW50VGltZSwgMC4wNSk7CiAgICAgICAgfQogICAgICAgIGlmIChnYWluTm9kZVJlZi5jdXJyZW50ICYmIGF1ZGlvQ3R4UmVmLmN1cnJlbnQpIHsKICAgICAgICAgICAgZ2Fpbk5vZGVSZWYuY3VycmVudC5nYWluLnNldFRhcmdldEF0VGltZSh2b2x1bWUsIGF1ZGlvQ3R4UmVmLmN1cnJlbnQuY3VycmVudFRpbWUsIDAuMDUpOwogICAgICAgIH0KICAgIH0sIFtwaXRjaCwgdGVtcG8sIHZvbHVtZV0pOwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChpc1BsYXlpbmcgJiYgYXVkaW9DdHhSZWYuY3VycmVudCAmJiBhdWRpb0J1ZmZlcikgewogICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IChhdWRpb0N0eFJlZi5jdXJyZW50LmN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lUmVmLmN1cnJlbnQpICogdGVtcG87CiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IHBhdXNlZEF0UmVmLmN1cnJlbnQgKyBlbGFwc2VkOwogICAgICAgICAgICAgICAgaWYgKHRvdGFsID49IGF1ZGlvQnVmZmVyLmR1cmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgc3RvcFBsYXliYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50VGltZSh0b3RhbCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXloZWFkUmVmLmN1cnJlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVyY2VudCA9ICh0b3RhbCAvIGF1ZGlvQnVmZmVyLmR1cmF0aW9uKSAqIDEwMDsKICAgICAgICAgICAgICAgICAgICAgICAgcGxheWhlYWRSZWYuY3VycmVudC5zdHlsZS5sZWZ0ID0gYCR7cGVyY2VudH0lYDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmIChpc1BsYXlpbmcpCiAgICAgICAgICAgIHJlcXVlc3RSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVxdWVzdFJlZi5jdXJyZW50KTsKICAgICAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVxdWVzdFJlZi5jdXJyZW50KTsKICAgIH0sIFtpc1BsYXlpbmcsIHRlbXBvLCBhdWRpb0J1ZmZlcl0pOwogICAgY29uc3QgaGFuZGxlRmlsZSA9IGFzeW5jIChlKSA9PiB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBlLnRhcmdldC5maWxlcz8uWzBdOwogICAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAgICAgICBzZXRGaWxlKHNlbGVjdGVkKTsKICAgICAgICAgICAgc2V0SXNQcm9jZXNzaW5nKHRydWUpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7CiAgICAgICAgICAgICAgICBhdWRpb0N0eFJlZi5jdXJyZW50ID0gY3R4OwogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBzZWxlY3RlZC5hcnJheUJ1ZmZlcigpOwogICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IGN0eC5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIpOwogICAgICAgICAgICAgICAgc2V0QXVkaW9CdWZmZXIoZGVjb2RlZCk7CiAgICAgICAgICAgICAgICBzZXRDdXJyZW50VGltZSgwKTsKICAgICAgICAgICAgICAgIHBhdXNlZEF0UmVmLmN1cnJlbnQgPSAwOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkcmF3V2F2ZWZvcm0oZGVjb2RlZCksIDEwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgYWxlcnQoIkZhaWxlZCB0byBsb2FkIGF1ZGlvIGZpbGUuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgICAgICBzZXRJc1Byb2Nlc3NpbmcoZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGRyYXdXYXZlZm9ybSA9IChidWZmZXIpID0+IHsKICAgICAgICBjb25zdCBjYW52YXMgPSB3YXZlZm9ybVJlZi5jdXJyZW50OwogICAgICAgIGlmICghY2FudmFzKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICAgICAgaWYgKCFjdHgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMub2Zmc2V0V2lkdGggKiAyOwogICAgICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXMub2Zmc2V0SGVpZ2h0ICogMjsKICAgICAgICBjdHguc2NhbGUoMiwgMik7CiAgICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMud2lkdGggLyAyOwogICAgICAgIGNvbnN0IGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyAyOwogICAgICAgIGNvbnN0IGRhdGEgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CiAgICAgICAgY29uc3Qgc3RlcCA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIHdpZHRoKTsKICAgICAgICBjb25zdCBhbXAgPSBoZWlnaHQgLyAyOwogICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjNjM1YmZmJzsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKICAgICAgICAgICAgbGV0IG1pbiA9IDEuMCwgbWF4ID0gLTEuMDsKICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdGVwOyBqKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IGRhdHVtID0gZGF0YVsoaSAqIHN0ZXApICsgal07CiAgICAgICAgICAgICAgICBpZiAoZGF0dW0gPCBtaW4pCiAgICAgICAgICAgICAgICAgICAgbWluID0gZGF0dW07CiAgICAgICAgICAgICAgICBpZiAoZGF0dW0gPiBtYXgpCiAgICAgICAgICAgICAgICAgICAgbWF4ID0gZGF0dW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LmZpbGxSZWN0KGksICgxICsgbWluKSAqIGFtcCwgMSwgTWF0aC5tYXgoMSwgKG1heCAtIG1pbikgKiBhbXApKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgdG9nZ2xlUGxheWJhY2sgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFhdWRpb0J1ZmZlciB8fCAhYXVkaW9DdHhSZWYuY3VycmVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChhdWRpb0N0eFJlZi5jdXJyZW50LnN0YXRlID09PSAnc3VzcGVuZGVkJykKICAgICAgICAgICAgYXdhaXQgYXVkaW9DdHhSZWYuY3VycmVudC5yZXN1bWUoKTsKICAgICAgICBpZiAoaXNQbGF5aW5nKSB7CiAgICAgICAgICAgIHBhdXNlZEF0UmVmLmN1cnJlbnQgPSBjdXJyZW50VGltZTsKICAgICAgICAgICAgc291cmNlTm9kZVJlZi5jdXJyZW50Py5zdG9wKCk7CiAgICAgICAgICAgIHNvdXJjZU5vZGVSZWYuY3VycmVudCA9IG51bGw7CiAgICAgICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhdWRpb0N0eFJlZi5jdXJyZW50LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwogICAgICAgICAgICBjb25zdCBnYWluID0gYXVkaW9DdHhSZWYuY3VycmVudC5jcmVhdGVHYWluKCk7CiAgICAgICAgICAgIHNvdXJjZS5idWZmZXIgPSBhdWRpb0J1ZmZlcjsKICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRlbXBvOwogICAgICAgICAgICBzb3VyY2UuZGV0dW5lLnZhbHVlID0gcGl0Y2ggKiAxMDA7CiAgICAgICAgICAgIGdhaW4uZ2Fpbi52YWx1ZSA9IHZvbHVtZTsKICAgICAgICAgICAgc291cmNlLmNvbm5lY3QoZ2Fpbik7CiAgICAgICAgICAgIGdhaW4uY29ubmVjdChhdWRpb0N0eFJlZi5jdXJyZW50LmRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgY29uc3Qgc3RhcnRBdCA9IGN1cnJlbnRUaW1lID49IGF1ZGlvQnVmZmVyLmR1cmF0aW9uID8gMCA6IGN1cnJlbnRUaW1lOwogICAgICAgICAgICBzb3VyY2Uuc3RhcnQoMCwgc3RhcnRBdCk7CiAgICAgICAgICAgIHNvdXJjZU5vZGVSZWYuY3VycmVudCA9IHNvdXJjZTsKICAgICAgICAgICAgZ2Fpbk5vZGVSZWYuY3VycmVudCA9IGdhaW47CiAgICAgICAgICAgIHN0YXJ0VGltZVJlZi5jdXJyZW50ID0gYXVkaW9DdHhSZWYuY3VycmVudC5jdXJyZW50VGltZTsKICAgICAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwogICAgICAgICAgICBzb3VyY2Uub25lbmRlZCA9ICgpID0+IHsgaWYgKHNvdXJjZU5vZGVSZWYuY3VycmVudCA9PT0gc291cmNlKQogICAgICAgICAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsgfTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3Qgc3RvcFBsYXliYWNrID0gKCkgPT4gewogICAgICAgIHNvdXJjZU5vZGVSZWYuY3VycmVudD8uc3RvcCgpOwogICAgICAgIHNvdXJjZU5vZGVSZWYuY3VycmVudCA9IG51bGw7CiAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKICAgICAgICBzZXRDdXJyZW50VGltZSgwKTsKICAgICAgICBwYXVzZWRBdFJlZi5jdXJyZW50ID0gMDsKICAgICAgICBpZiAocGxheWhlYWRSZWYuY3VycmVudCkKICAgICAgICAgICAgcGxheWhlYWRSZWYuY3VycmVudC5zdHlsZS5sZWZ0ID0gJzAlJzsKICAgIH07CiAgICBjb25zdCBoYW5kbGVFeHBvcnQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFhdWRpb0J1ZmZlcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHNldElzRXhwb3J0aW5nKHRydWUpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmVDdHggPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dChhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzLCAoYXVkaW9CdWZmZXIubGVuZ3RoIC8gdGVtcG8pLCBhdWRpb0J1ZmZlci5zYW1wbGVSYXRlKTsKICAgICAgICAgICAgY29uc3Qgc291cmNlID0gb2ZmbGluZUN0eC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKICAgICAgICAgICAgc291cmNlLmJ1ZmZlciA9IGF1ZGlvQnVmZmVyOwogICAgICAgICAgICBzb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gdGVtcG87CiAgICAgICAgICAgIHNvdXJjZS5kZXR1bmUudmFsdWUgPSBwaXRjaCAqIDEwMDsKICAgICAgICAgICAgc291cmNlLmNvbm5lY3Qob2ZmbGluZUN0eC5kZXN0aW5hdGlvbik7CiAgICAgICAgICAgIHNvdXJjZS5zdGFydCgpOwogICAgICAgICAgICBjb25zdCByZW5kZXJlZEJ1ZmZlciA9IGF3YWl0IG9mZmxpbmVDdHguc3RhcnRSZW5kZXJpbmcoKTsKICAgICAgICAgICAgY29uc3QgbGVmdCA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwogICAgICAgICAgICBjb25zdCByaWdodCA9IHJlbmRlcmVkQnVmZmVyLm51bWJlck9mQ2hhbm5lbHMgPiAxID8gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMSkgOiBsZWZ0OwogICAgICAgICAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmUobGVmdCwgcmlnaHQpOwogICAgICAgICAgICBjb25zdCB3YXZWaWV3ID0gZW5jb2RlV0FWKGludGVybGVhdmVkLCByZW5kZXJlZEJ1ZmZlci5zYW1wbGVSYXRlLCAyKTsKICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt3YXZWaWV3XSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTsKICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgYS5ocmVmID0gdXJsOwogICAgICAgICAgICBhLmRvd25sb2FkID0gYHNoaWZ0ZWRfJHtmaWxlPy5uYW1lIHx8ICdhdWRpbyd9LndhdmA7CiAgICAgICAgICAgIGEuY2xpY2soKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycikgewogICAgICAgICAgICBhbGVydCgiRXhwb3J0IGZhaWxlZC4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzRXhwb3J0aW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgZm9ybWF0VGltZSA9IChzKSA9PiB7CiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IocyAvIDYwKTsKICAgICAgICBjb25zdCBzZWMgPSBNYXRoLmZsb29yKHMgJSA2MCk7CiAgICAgICAgcmV0dXJuIGAke219OiR7c2VjLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gOwogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiUGl0Y2ggJiBUZW1wbyBTaGlmdGVyIiwgZGVzY3JpcHRpb246ICJDaGFuZ2UgdGhlIGtleSBhbmQgc3BlZWQgb2YgeW91ciBtdXNpYyBpbmRlcGVuZGVudGx5LiBQZXJmZWN0IGZvciBwcmFjdGljaW5nLCB0cmFuc2NyaWJpbmcsIG9yIHNhbXBsaW5nLiIsIGljb246IFNsaWRlcnMsIGNhdGVnb3J5OiAiTXVzaWMiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgbWF4LXctNXhsIG14LWF1dG8iLCBjaGlsZHJlbjogIWZpbGUgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0zeGwgcC0yMCB0ZXh0LWNlbnRlciBob3ZlcjpiZy1ncmF5LTUwIGRhcms6aG92ZXI6YmctZGFyay05MDAvNTAgdHJhbnNpdGlvbi1hbGwgY3Vyc29yLXBvaW50ZXIgZ3JvdXAiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAiZmlsZSIsIGFjY2VwdDogImF1ZGlvLyoiLCBvbkNoYW5nZTogaGFuZGxlRmlsZSwgaWQ6ICJwaXRjaC11cGxvYWQiLCBjbGFzc05hbWU6ICJoaWRkZW4iIH0pLCBfanN4cygibGFiZWwiLCB7IGh0bWxGb3I6ICJwaXRjaC11cGxvYWQiLCBjbGFzc05hbWU6ICJjdXJzb3ItcG9pbnRlciBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTI0IGgtMjQgYmctYnJhbmQtNTAgZGFyazpiZy1icmFuZC05MDAvMjAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgdGV4dC1icmFuZC02MDAgZ3JvdXAtaG92ZXI6c2NhbGUtMTEwIHRyYW5zaXRpb24tdHJhbnNmb3JtIHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBfanN4KFVwbG9hZCwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIiIH0pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIiLCBjaGlsZHJlbjogIlVwbG9hZCBBdWRpbyB0byBTaGlmdCIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIiwgY2hpbGRyZW46ICJBbGwgYnJvd3Nlci1zdXBwb3J0ZWQgYXVkaW8gZm9ybWF0cyIgfSldIH0pXSB9KSkgOiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIHAtOCBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIgYmctYnJhbmQtMTAwIGRhcms6YmctYnJhbmQtOTAwLzMwIHJvdW5kZWQteGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1icmFuZC02MDAiLCBjaGlsZHJlbjogX2pzeChNdXNpYzIsIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm1pbi13LTAiLCBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgdHJ1bmNhdGUgbWF4LXctWzIwMHB4XSBtZDptYXgtdy1tZCIsIGNoaWxkcmVuOiBmaWxlLm5hbWUgfSksIF9qc3hzKCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBmb250LWJvbGQgZm9udC1tb25vIiwgY2hpbGRyZW46IFtmb3JtYXRUaW1lKGN1cnJlbnRUaW1lKSwgIiAvICIsIGZvcm1hdFRpbWUoYXVkaW9CdWZmZXI/LmR1cmF0aW9uIHx8IDApXSB9KV0gfSldIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHsgc3RvcFBsYXliYWNrKCk7IHNldEZpbGUobnVsbCk7IH0sIGNsYXNzTmFtZTogInRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1yZWQtNTAwIHAtMiIsIGNoaWxkcmVuOiBfanN4KFJlZnJlc2hDdywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInJlbGF0aXZlIGgtMzIgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHJvdW5kZWQteGwgbWItMTAgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3goImNhbnZhcyIsIHsgcmVmOiB3YXZlZm9ybVJlZiwgY2xhc3NOYW1lOiAidy1mdWxsIGgtZnVsbCBvcGFjaXR5LTQwIiB9KSwgX2pzeCgiZGl2IiwgeyByZWY6IHBsYXloZWFkUmVmLCBjbGFzc05hbWU6ICJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCB3LVszcHhdIGJnLWJyYW5kLTUwMCBzaGFkb3ctWzBfMF8xNXB4X3JnYmEoOTksOTEsMjU1LDAuOCldIHotMTAiLCBzdHlsZTogeyBsZWZ0OiAnMCUnIH0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIG1kOmdyaWQtY29scy0yIGdhcC0xMiBtYi0xMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3hzKCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goU2xpZGVycywgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtYnJhbmQtNTAwIiB9KSwgIiBQaXRjaCAoU2VtaXRvbmVzKSJdIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWxnIGZvbnQtbW9ubyBmb250LWJvbGQgdGV4dC1icmFuZC02MDAiLCBjaGlsZHJlbjogcGl0Y2ggPiAwID8gYCske3BpdGNofWAgOiBwaXRjaCB9KV0gfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICItMTIiLCBtYXg6ICIxMiIsIHN0ZXA6ICIxIiwgdmFsdWU6IHBpdGNoLCBvbkNoYW5nZTogZSA9PiBzZXRQaXRjaChOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGFjY2VudC1icmFuZC02MDAgaC0yIGJnLWdyYXktMjAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUgY3Vyc29yLXBvaW50ZXIiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiLCBjaGlsZHJlbjogW19qc3hzKCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goVGltZXJJY29uLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1icmFuZC01MDAiIH0pLCAiIFRlbXBvIChTcGVlZCkiXSB9KSwgX2pzeHMoInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtbGcgZm9udC1tb25vIGZvbnQtYm9sZCB0ZXh0LWJyYW5kLTYwMCIsIGNoaWxkcmVuOiBbdGVtcG8udG9GaXhlZCgyKSwgIngiXSB9KV0gfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIwLjUiLCBtYXg6ICIyLjAiLCBzdGVwOiAiMC4wMSIsIHZhbHVlOiB0ZW1wbywgb25DaGFuZ2U6IGUgPT4gc2V0VGVtcG8oTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogInctZnVsbCBhY2NlbnQtYnJhbmQtNjAwIGgtMiBiZy1ncmF5LTIwMCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyIiB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtNiBwdC02IGJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogdG9nZ2xlUGxheWJhY2ssIGNsYXNzTmFtZTogInctMTYgaC0xNiByb3VuZGVkLWZ1bGwgYmctYnJhbmQtNjAwIGhvdmVyOmJnLWJyYW5kLTcwMCB0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNoYWRvdy1sZyBob3ZlcjpzY2FsZS0xMDUgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIiwgY2hpbGRyZW46IGlzUGxheWluZyA/IF9qc3goUGF1c2UsIHsgY2xhc3NOYW1lOiAidy04IGgtOCBmaWxsLWN1cnJlbnQiIH0pIDogX2pzeChQbGF5LCB7IGNsYXNzTmFtZTogInctOCBoLTggZmlsbC1jdXJyZW50IG1sLTEiIH0pIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IHN0b3BQbGF5YmFjaywgY2xhc3NOYW1lOiAicC00IHJvdW5kZWQtZnVsbCBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS01MDAgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogX2pzeChSb3RhdGVDY3csIHsgY2xhc3NOYW1lOiAidy02IGgtNiIgfSkgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgdy1mdWxsIG1kOnctYXV0byBweC00IiwgY2hpbGRyZW46IFtfanN4KFZvbHVtZTIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LWdyYXktNDAwIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJyYW5nZSIsIG1pbjogIjAiLCBtYXg6ICIxIiwgc3RlcDogIjAuMDEiLCB2YWx1ZTogdm9sdW1lLCBvbkNoYW5nZTogZSA9PiBzZXRWb2x1bWUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSksIGNsYXNzTmFtZTogImZsZXgtMSBhY2NlbnQtZ3JheS00MDAgaC0xIGJnLWdyYXktMjAwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUiIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlRXhwb3J0LCBkaXNhYmxlZDogaXNFeHBvcnRpbmcsIGNsYXNzTmFtZTogInctZnVsbCBtZDp3LWF1dG8gcHgtOCBweS00IGJnLWdyYXktOTAwIGRhcms6Ymctd2hpdGUgdGV4dC13aGl0ZSBkYXJrOnRleHQtZ3JheS05MDAgcm91bmRlZC14bCBmb250LWJvbGQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgaG92ZXI6b3BhY2l0eS05MCBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6b3BhY2l0eS01MCIsIGNoaWxkcmVuOiBbaXNFeHBvcnRpbmcgPyBfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBhbmltYXRlLXNwaW4iIH0pIDogX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIkV4cG9ydCBhcyBXQVYiXSB9KV0gfSldIH0pKSB9KSB9KSk7Cn07Ci8vIC0tLSBDaG9yZCBIZWxwZXIgVG9vbCAtLS0KY29uc3QgTk9URVMgPSBbJ0MnLCAnQyMnLCAnRCcsICdEIycsICdFJywgJ0YnLCAnRiMnLCAnRycsICdHIycsICdBJywgJ0EjJywgJ0InXTsKY29uc3QgTk9URVNfRkxBVCA9IFsnQycsICdEYicsICdEJywgJ0ViJywgJ0UnLCAnRicsICdHYicsICdHJywgJ0FiJywgJ0EnLCAnQmInLCAnQiddOwpjb25zdCBnZXRTY2FsZU5vdGVzID0gKHJvb3QsIHNjYWxlVHlwZSkgPT4gewogICAgbGV0IHJvb3RJZHggPSBOT1RFUy5pbmRleE9mKHJvb3QpOwogICAgaWYgKHJvb3RJZHggPT09IC0xKQogICAgICAgIHJvb3RJZHggPSBOT1RFU19GTEFULmluZGV4T2Yocm9vdCk7CiAgICBjb25zdCBpbnRlcnZhbHMgPSBzY2FsZVR5cGUgPT09ICdNYWpvcicgPyBbMCwgMiwgNCwgNSwgNywgOSwgMTFdIDogWzAsIDIsIDMsIDUsIDcsIDgsIDEwXTsKICAgIHJldHVybiBpbnRlcnZhbHMubWFwKGludGVydmFsID0+IHsKICAgICAgICBjb25zdCBpZHggPSAocm9vdElkeCArIGludGVydmFsKSAlIDEyOwogICAgICAgIGNvbnN0IGZsYXRLZXlzID0gWydGJywgJ0JiJywgJ0ViJywgJ0FiJywgJ0RiJywgJ0diJywgJ2QnLCAnZycsICdjJywgJ2YnLCAnYmInLCAnZWInXTsKICAgICAgICBpZiAoZmxhdEtleXMuaW5jbHVkZXMocm9vdCkgfHwgcm9vdC5pbmNsdWRlcygnYicpKQogICAgICAgICAgICByZXR1cm4gTk9URVNfRkxBVFtpZHhdOwogICAgICAgIHJldHVybiBOT1RFU1tpZHhdOwogICAgfSk7Cn07CmNvbnN0IGdldERpYXRvbmljQ2hvcmRzID0gKHNjYWxlTm90ZXMsIHNjYWxlVHlwZSkgPT4gewogICAgY29uc3Qgc3VmZml4ZXMgPSBzY2FsZVR5cGUgPT09ICdNYWpvcicgPyBbJycsICdtJywgJ20nLCAnJywgJycsICdtJywgJ2RpbSddIDogWydtJywgJ2RpbScsICcnLCAnbScsICdtJywgJycsICcnXTsKICAgIGNvbnN0IG51bWVyYWxzID0gc2NhbGVUeXBlID09PSAnTWFqb3InID8gWydJJywgJ2lpJywgJ2lpaScsICdJVicsICdWJywgJ3ZpJywgJ3ZpacKwJ10gOiBbJ2knLCAnaWnCsCcsICdJSUknLCAnaXYnLCAndicsICdWSScsICdWSUknXTsKICAgIHJldHVybiBzY2FsZU5vdGVzLm1hcCgobm90ZSwgaSkgPT4gKHsgbm90ZSwgY2hvcmQ6IG5vdGUgKyBzdWZmaXhlc1tpXSwgbnVtZXJhbDogbnVtZXJhbHNbaV0gfSkpOwp9OwpleHBvcnQgY29uc3QgQ2hvcmRIZWxwZXIgPSAoKSA9PiB7CiAgICBjb25zdCBbcm9vdCwgc2V0Um9vdF0gPSB1c2VTdGF0ZSgnQycpOwogICAgY29uc3QgW3NjYWxlLCBzZXRTY2FsZV0gPSB1c2VTdGF0ZSgnTWFqb3InKTsKICAgIGNvbnN0IFt2aWJlLCBzZXRWaWJlXSA9IHVzZVN0YXRlKCdQb3AgLyBDYXRjaHknKTsKICAgIGNvbnN0IFtwcm9ncmVzc2lvbnMsIHNldFByb2dyZXNzaW9uc10gPSB1c2VTdGF0ZShbXSk7CiAgICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3Qgc2NhbGVOb3RlcyA9IGdldFNjYWxlTm90ZXMocm9vdCwgc2NhbGUpOwogICAgY29uc3QgZGlhdG9uaWNDaG9yZHMgPSBnZXREaWF0b25pY0Nob3JkcyhzY2FsZU5vdGVzLCBzY2FsZSk7CiAgICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IGFzeW5jICgpID0+IHsKICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7CiAgICAgICAgc2V0UHJvZ3Jlc3Npb25zKFtdKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgU3VnZ2VzdCA0IHVuaXF1ZSwgY3JlYXRpdmUgY2hvcmQgcHJvZ3Jlc3Npb25zIGZvciBhICR7dmliZX0gdHJhY2sgaW4gdGhlIGtleSBvZiAke3Jvb3R9ICR7c2NhbGV9LiBSZXR1cm4gT05MWSByYXcgSlNPTiBhcnJheTogW3sibmFtZSI6ICJOYW1lIiwgIm51bWVyYWxzIjogIkktViIsICJjaG9yZHMiOiAiQy1HIiwgImRlc2NyaXB0aW9uIjogIldoeSBpdCBmaXRzIn1dYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgY2xlYW5Kc29uID0gcmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKTsKICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjbGVhbkpzb24pOwogICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWQpKQogICAgICAgICAgICAgICAgc2V0UHJvZ3Jlc3Npb25zKHBhcnNlZCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIHNldFByb2dyZXNzaW9ucyhbeyBuYW1lOiAnUG9wIFByb2dyZXNzaW9uJywgbnVtZXJhbHM6ICdJIC0gViAtIHZpIC0gSVYnLCBjaG9yZHM6ICdDIC0gRyAtIEFtIC0gRicsIGRlc2NyaXB0aW9uOiAnVGhlIHVsdGltYXRlIGNhdGNoeSBmbG93LicgfV0pOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJDaG9yZCBQcm9ncmVzc2lvbiBIZWxwZXIiLCBkZXNjcmlwdGlvbjogIkNhbGN1bGF0ZSBjaG9yZHMgZm9yIGFueSBrZXkgaW5zdGFudGx5IGFuZCBnZW5lcmF0ZSB2aWJlLWJhc2VkIHByb2dyZXNzaW9ucyB3aXRoIEFJLiIsIGljb246IFBpYW5vLCBjYXRlZ29yeTogIk11c2ljIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBtYXgtdy02eGwgbXgtYXV0byIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IG1iLTggc2hhZG93LXNtIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgbWQ6Z3JpZC1jb2xzLTQgZ2FwLTYgaXRlbXMtZW5kIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0yIiwgY2hpbGRyZW46ICJLZXkgKFJvb3QpIiB9KSwgX2pzeCgic2VsZWN0IiwgeyB2YWx1ZTogcm9vdCwgb25DaGFuZ2U6IChlKSA9PiBzZXRSb290KGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWxnIiwgY2hpbGRyZW46IE5PVEVTLm1hcChuID0+IF9qc3goIm9wdGlvbiIsIHsgdmFsdWU6IG4sIGNoaWxkcmVuOiBuIH0sIG4pKSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTIiLCBjaGlsZHJlbjogIlNjYWxlIiB9KSwgX2pzeHMoInNlbGVjdCIsIHsgdmFsdWU6IHNjYWxlLCBvbkNoYW5nZTogKGUpID0+IHNldFNjYWxlKGUudGFyZ2V0LnZhbHVlKSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMyByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIGZvbnQtYm9sZCB0ZXh0LWxnIiwgY2hpbGRyZW46IFtfanN4KCJvcHRpb24iLCB7IHZhbHVlOiAiTWFqb3IiLCBjaGlsZHJlbjogIk1ham9yIiB9KSwgX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogIk1pbm9yIiwgY2hpbGRyZW46ICJNaW5vciIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMiIsIGNoaWxkcmVuOiAiVmliZSIgfSksIF9qc3hzKCJzZWxlY3QiLCB7IHZhbHVlOiB2aWJlLCBvbkNoYW5nZTogKGUpID0+IHNldFZpYmUoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgZm9udC1tZWRpdW0gdGV4dC1sZyIsIGNoaWxkcmVuOiBbX2pzeCgib3B0aW9uIiwgeyBjaGlsZHJlbjogIlBvcCAvIENhdGNoeSIgfSksIF9qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46ICJTYWQgLyBFbW90aW9uYWwiIH0pLCBfanN4KCJvcHRpb24iLCB7IGNoaWxkcmVuOiAiTG8tZmkgLyBDaGlsbCIgfSksIF9qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46ICJEYXJrIC8gQWdncmVzc2l2ZSIgfSksIF9qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46ICJKYXp6IC8gTmVvLVNvdWwiIH0pXSB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGhhbmRsZUdlbmVyYXRlLCBkaXNhYmxlZDogaXNMb2FkaW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktMy41IGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBob3ZlcjotdHJhbnNsYXRlLXktMSIsIGNoaWxkcmVuOiBbaXNMb2FkaW5nID8gX2pzeChMb2FkZXIyLCB7IGNsYXNzTmFtZTogInctNSBoLTUgYW5pbWF0ZS1zcGluIiB9KSA6IF9qc3goU3BhcmtsZXMsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIiB9KSwgIkdlbmVyYXRlIl0gfSldIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGxnOmdyaWQtY29scy0zIGdhcC04IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImxnOmNvbC1zcGFuLTEiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCBwLTUgc3RpY2t5IHRvcC02IiwgY2hpbGRyZW46IFtfanN4cygiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi00IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KE11c2ljMiwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IHRleHQtYnJhbmQtNTAwIiB9KSwgIkNob3JkcyBpbiAiLCByb290LCAiICIsIHNjYWxlXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTIiLCBjaGlsZHJlbjogZGlhdG9uaWNDaG9yZHMubWFwKChpdGVtLCBpKSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtMyBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTUwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInctNiBoLTYgcm91bmRlZC1mdWxsIGJnLWJyYW5kLTEwMCBkYXJrOmJnLWJyYW5kLTkwMC8zMCB0ZXh0LWJyYW5kLTYwMCBkYXJrOnRleHQtYnJhbmQtNDAwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgZm9udC1ib2xkIiwgY2hpbGRyZW46IGkgKyAxIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJmb250LW1vbm8gZm9udC1ib2xkIHRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMjAwIiwgY2hpbGRyZW46IGl0ZW0uY2hvcmQgfSldIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS00MDAgZm9udC1zZXJpZiBpdGFsaWMiLCBjaGlsZHJlbjogaXRlbS5udW1lcmFsIH0pXSB9LCBpKSkpIH0pXSB9KSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJsZzpjb2wtc3Bhbi0yIHNwYWNlLXktNCIsIGNoaWxkcmVuOiBwcm9ncmVzc2lvbnMubWFwKChwcm9nLCBpKSA9PiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC02IHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgcmVsYXRpdmUiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IG1iLTMiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgiaDQiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWxnIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IHByb2cubmFtZSB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46IHByb2cuZGVzY3JpcHRpb24gfSldIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS02MDAgdGV4dC14cyBmb250LWJvbGQgcHgtMiBweS0xIHJvdW5kZWQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIiwgY2hpbGRyZW46IHByb2cubnVtZXJhbHMgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy1icmFuZC01MCBkYXJrOmJnLWJyYW5kLTkwMC8xMCBwLTQgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWJyYW5kLTEwMCBkYXJrOmJvcmRlci1icmFuZC05MDAvMzAgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZvbnQtbW9ubyB0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWJyYW5kLTcwMCBkYXJrOnRleHQtYnJhbmQtMzAwIHRyYWNraW5nLXdpZGUiLCBjaGlsZHJlbjogcHJvZy5jaG9yZHMgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocHJvZy5jaG9yZHMpLCBjbGFzc05hbWU6ICJwLTIgdGV4dC1icmFuZC02MDAgaG92ZXI6YmctYnJhbmQtMTAwIHJvdW5kZWQtbGciLCBjaGlsZHJlbjogX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pXSB9KV0gfSwgaSkpKSB9KV0gfSldIH0pIH0pKTsKfTsKLy8gLS0tIEF1ZGlvIFJlY29yZGVyICYgU3R1ZGlvIC0tLQpleHBvcnQgY29uc3QgQXVkaW9SZWNvcmRlciA9ICgpID0+IHsKICAgIGNvbnN0IFtpc1JlY29yZGluZywgc2V0SXNSZWNvcmRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW2F1ZGlvVXJsLCBzZXRBdWRpb1VybF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFt0aW1lciwgc2V0VGltZXJdID0gdXNlU3RhdGUoMCk7CiAgICBjb25zdCBbc3RyZWFtLCBzZXRTdHJlYW1dID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbdHJhbnNjcmlwdCwgc2V0VHJhbnNjcmlwdF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtpc1RyYW5zY3JpYmluZywgc2V0SXNUcmFuc2NyaWJpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgbWVkaWFSZWNvcmRlclJlZiA9IHVzZVJlZihudWxsKTsKICAgIGNvbnN0IGNodW5rc1JlZiA9IHVzZVJlZihbXSk7CiAgICBjb25zdCB0aW1lckludGVydmFsUmVmID0gdXNlUmVmKDApOwogICAgY29uc3Qgc3RhcnRSZWNvcmRpbmcgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pOwogICAgICAgICAgICBzZXRTdHJlYW0obWVkaWFTdHJlYW0pOwogICAgICAgICAgICBjb25zdCByZWNvcmRlciA9IG5ldyBNZWRpYVJlY29yZGVyKG1lZGlhU3RyZWFtKTsKICAgICAgICAgICAgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50ID0gcmVjb3JkZXI7CiAgICAgICAgICAgIGNodW5rc1JlZi5jdXJyZW50ID0gW107CiAgICAgICAgICAgIHJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChlKSA9PiBjaHVua3NSZWYuY3VycmVudC5wdXNoKGUuZGF0YSk7CiAgICAgICAgICAgIHJlY29yZGVyLm9uc3RvcCA9IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihjaHVua3NSZWYuY3VycmVudCwgeyB0eXBlOiAnYXVkaW8vd2VibScgfSk7CiAgICAgICAgICAgICAgICBzZXRBdWRpb1VybChVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTsKICAgICAgICAgICAgICAgIGhhbmRsZVRyYW5zY3JpcHRpb24oYmxvYik7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlY29yZGVyLnN0YXJ0KCk7CiAgICAgICAgICAgIHNldElzUmVjb3JkaW5nKHRydWUpOwogICAgICAgICAgICBzZXRUaW1lcigwKTsKICAgICAgICAgICAgc2V0VHJhbnNjcmlwdChudWxsKTsKICAgICAgICAgICAgdGltZXJJbnRlcnZhbFJlZi5jdXJyZW50ID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHNldFRpbWVyKHQgPT4gdCArIDEpLCAxMDAwKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycikgewogICAgICAgICAgICBhbGVydCgiTWljcm9waG9uZSBhY2Nlc3MgZGVuaWVkLiIpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmVjb3JkaW5nID0gKCkgPT4gewogICAgICAgIGlmIChtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQgJiYgaXNSZWNvcmRpbmcpIHsKICAgICAgICAgICAgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50LnN0b3AoKTsKICAgICAgICAgICAgc3RyZWFtPy5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7CiAgICAgICAgICAgIHNldElzUmVjb3JkaW5nKGZhbHNlKTsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lckludGVydmFsUmVmLmN1cnJlbnQpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBoYW5kbGVUcmFuc2NyaXB0aW9uID0gYXN5bmMgKGJsb2IpID0+IHsKICAgICAgICBzZXRJc1RyYW5zY3JpYmluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdC5zcGxpdCgnLCcpWzFdOwogICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRyYW5zY3JpYmVBdWRpbyhiYXNlNjQsIGJsb2IudHlwZSB8fCAnYXVkaW8vd2VibScpOwogICAgICAgICAgICAgICAgc2V0VHJhbnNjcmlwdCh0ZXh0KTsKICAgICAgICAgICAgICAgIHNldElzVHJhbnNjcmliaW5nKGZhbHNlKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgICAgIHNldElzVHJhbnNjcmliaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgZm9ybWF0VGltZSA9IChzKSA9PiBgJHtNYXRoLmZsb29yKHMgLyA2MCl9OiR7KHMgJSA2MCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIlZvaWNlIFJlY29yZGVyICYgU3R1ZGlvIiwgZGVzY3JpcHRpb246ICJSZWNvcmQgaGlnaC1xdWFsaXR5IHZvaWNlIG1lbW9zIGFuZCBnZXQgQUktcG93ZXJlZCB0cmFuc2NyaXB0aW9ucyBpbnN0YW50bHkuIiwgaWNvbjogTWljLCBjYXRlZ29yeTogIk11c2ljIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtOCBtYXgtdy00eGwgbXgtYXV0byBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1bNDAwcHhdIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogYHctNDggaC00OCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwICR7aXNSZWNvcmRpbmcgPyAnYmctcmVkLTUwMCBzY2FsZS0xMTAgc2hhZG93LVswXzBfNDBweF9yZ2JhKDIzOSw2OCw2OCwwLjQpXScgOiAnYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCd9YCwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIiwgY2hpbGRyZW46IFtpc1JlY29yZGluZyA/IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC13aGl0ZSB0ZXh0LTR4bCBmb250LW1vbm8gZm9udC1ib2xkIG1iLTEiLCBjaGlsZHJlbjogZm9ybWF0VGltZSh0aW1lcikgfSkgOiBfanN4KE1pYywgeyBjbGFzc05hbWU6ICJ3LTE2IGgtMTYgdGV4dC1ncmF5LTQwMCIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiBgdGV4dC1bMTBweF0gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgJHtpc1JlY29yZGluZyA/ICd0ZXh0LXJlZC0xMDAgYW5pbWF0ZS1wdWxzZScgOiAndGV4dC1ncmF5LTQwMCd9YCwgY2hpbGRyZW46IGlzUmVjb3JkaW5nID8gJ1JlY29yZGluZy4uLicgOiAnUmVhZHknIH0pXSB9KSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC0xMiBmbGV4IGdhcC00IiwgY2hpbGRyZW46ICFpc1JlY29yZGluZyA/IChfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBzdGFydFJlY29yZGluZywgY2xhc3NOYW1lOiAicHgtMTAgcHktNCBiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC1mdWxsIHNoYWRvdy1sZyBob3ZlcjpzY2FsZS0xMDUgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMyBoLTMgYmctcmVkLTQwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZSIgfSksICIgU3RhcnQgUmVjb3JkaW5nIl0gfSkpIDogKF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IHN0b3BSZWNvcmRpbmcsIGNsYXNzTmFtZTogInB4LTEwIHB5LTQgYmctZ3JheS05MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC1mdWxsIHNoYWRvdy1sZyBob3ZlcjpzY2FsZS0xMDUgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KFNxdWFyZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IGZpbGwtY3VycmVudCIgfSksICIgU3RvcCAmIFNhdmUiXSB9KSkgfSksIGF1ZGlvVXJsICYmICFpc1JlY29yZGluZyAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtOCB3LWZ1bGwgc3BhY2UteS02IGFuaW1hdGUtaW4gZmFkZS1pbiBzbGlkZS1pbi1mcm9tLWJvdHRvbS00IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgcC02IHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTQiLCBjaGlsZHJlbjogW19qc3hzKCJoNCIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goRmlsZUF1ZGlvLCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1icmFuZC01MDAiIH0pLCAiIExhdGVzdCBSZWNvcmRpbmciXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeCgiYSIsIHsgaHJlZjogYXVkaW9VcmwsIGRvd25sb2FkOiAicmVjb3JkaW5nLndlYm0iLCBjbGFzc05hbWU6ICJwLTIgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWJyYW5kLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyIsIHRpdGxlOiAiRG93bmxvYWQgQXVkaW8iLCBjaGlsZHJlbjogX2pzeChEb3dubG9hZCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7IHNldEF1ZGlvVXJsKG51bGwpOyBzZXRUcmFuc2NyaXB0KG51bGwpOyB9LCBjbGFzc05hbWU6ICJwLTIgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LXJlZC01MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogX2pzeChUcmFzaDIsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSkgfSldIH0pXSB9KSwgX2pzeCgiYXVkaW8iLCB7IHNyYzogYXVkaW9VcmwsIGNvbnRyb2xzOiB0cnVlLCBjbGFzc05hbWU6ICJ3LWZ1bGwiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtMnhsIHAtNiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi00IiwgY2hpbGRyZW46IFtfanN4cygiaDQiLCB7IGNsYXNzTmFtZTogInRleHQtc20gZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KEZpbGVUZXh0LCB7IGNsYXNzTmFtZTogInctNCBoLTQgdGV4dC1icmFuZC01MDAiIH0pLCAiIEFJIFRyYW5zY3JpcHQiXSB9KSwgdHJhbnNjcmlwdCAmJiAoX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodHJhbnNjcmlwdCksIGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtYnJhbmQtNjAwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGhvdmVyOnVuZGVybGluZSIsIGNoaWxkcmVuOiBbX2pzeChDb3B5LCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pLCAiIENvcHkgVGV4dCJdIH0pKV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHJvdW5kZWQteGwgcC00IG1pbi1oLVsxMDBweF0gYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBpc1RyYW5zY3JpYmluZyA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS02IHRleHQtZ3JheS00MDAiLCBjaGlsZHJlbjogW19qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IGFuaW1hdGUtc3BpbiB0ZXh0LWJyYW5kLTUwMCBtYi0yIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LW1lZGl1bSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IGFuaW1hdGUtcHVsc2UiLCBjaGlsZHJlbjogIlRyYW5zY3JpYmluZyB3aXRoIEFJLi4uIiB9KV0gfSkpIDogdHJhbnNjcmlwdCA/IChfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIHRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMzAwIGxlYWRpbmctcmVsYXhlZCB3aGl0ZXNwYWNlLXByZS13cmFwIiwgY2hpbGRyZW46IHRyYW5zY3JpcHQgfSkpIDogKF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20gdGV4dC1ncmF5LTQwMCBpdGFsaWMiLCBjaGlsZHJlbjogIk5vIHRyYW5zY3JpcHQgYXZhaWxhYmxlLiIgfSkpIH0pXSB9KV0gfSkpXSB9KSB9KSk7Cn07Cg==","@/components/Tools/PdfTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBGaWxlVHlwZSwgRG93bmxvYWQsIExvYWRlcjIsIENoZWNrQ2lyY2xlLCBGaWxlVGV4dCwgQXJyb3dSaWdodCwgWCwgQWxlcnRDaXJjbGUsIEZpbGVTdGFjaywgUGx1cywgQXJyb3dVcCwgQXJyb3dEb3duLCBUcmFzaDIgfSBmcm9tICdsdWNpZGUtcmVhY3QnOwppbXBvcnQgeyBUb29sTGF5b3V0IH0gZnJvbSAnQC9jb21wb25lbnRzL1Rvb2xMYXlvdXQnOwppbXBvcnQgKiBhcyBwZGZqc0xpYiBmcm9tICdwZGZqcy1kaXN0JzsKaW1wb3J0ICogYXMgZG9jeCBmcm9tICdkb2N4JzsKaW1wb3J0IHsgUERGRG9jdW1lbnQgfSBmcm9tICdwZGYtbGliJzsKLy8gU2V0IHdvcmtlciBzb3VyY2UgZm9yIFBERi5qcwpwZGZqc0xpYi5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IGBodHRwczovL2Fpc3R1ZGlvY2RuLmNvbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanNgOwpleHBvcnQgY29uc3QgUGRmTWVyZ2VyID0gKCkgPT4gewogICAgY29uc3QgW2ZpbGVzLCBzZXRGaWxlc10gPSB1c2VTdGF0ZShbXSk7CiAgICBjb25zdCBbaXNNZXJnaW5nLCBzZXRJc01lcmdpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW2Rvd25sb2FkVXJsLCBzZXREb3dubG9hZFVybF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7CiAgICB1c2VFZmZlY3QoKCkgPT4gewogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICAgIGlmIChkb3dubG9hZFVybCkKICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZG93bmxvYWRVcmwpOwogICAgICAgIH07CiAgICB9LCBbZG93bmxvYWRVcmxdKTsKICAgIGNvbnN0IGhhbmRsZUZpbGVzID0gKHNlbGVjdGVkRmlsZXMpID0+IHsKICAgICAgICBpZiAoIXNlbGVjdGVkRmlsZXMpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBuZXdGaWxlcyA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRGaWxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlc1tpXS50eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgewogICAgICAgICAgICAgICAgbmV3RmlsZXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksCiAgICAgICAgICAgICAgICAgICAgZmlsZTogc2VsZWN0ZWRGaWxlc1tpXQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5ld0ZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgc2V0RmlsZXMocHJldiA9PiBbLi4ucHJldiwgLi4ubmV3RmlsZXNdKTsKICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7CiAgICAgICAgICAgIHNldERvd25sb2FkVXJsKG51bGwpOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBtb3ZlRmlsZSA9IChpbmRleCwgZGlyZWN0aW9uKSA9PiB7CiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSBbLi4uZmlsZXNdOwogICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcgJiYgaW5kZXggPiAwKSB7CiAgICAgICAgICAgIFtuZXdGaWxlc1tpbmRleF0sIG5ld0ZpbGVzW2luZGV4IC0gMV1dID0gW25ld0ZpbGVzW2luZGV4IC0gMV0sIG5ld0ZpbGVzW2luZGV4XV07CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nICYmIGluZGV4IDwgbmV3RmlsZXMubGVuZ3RoIC0gMSkgewogICAgICAgICAgICBbbmV3RmlsZXNbaW5kZXhdLCBuZXdGaWxlc1tpbmRleCArIDFdXSA9IFtuZXdGaWxlc1tpbmRleCArIDFdLCBuZXdGaWxlc1tpbmRleF1dOwogICAgICAgIH0KICAgICAgICBzZXRGaWxlcyhuZXdGaWxlcyk7CiAgICB9OwogICAgY29uc3QgcmVtb3ZlRmlsZSA9IChpZCkgPT4gewogICAgICAgIHNldEZpbGVzKGZpbGVzLmZpbHRlcihmID0+IGYuaWQgIT09IGlkKSk7CiAgICB9OwogICAgY29uc3QgbWVyZ2VQZGZzID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmIChmaWxlcy5sZW5ndGggPCAyKSB7CiAgICAgICAgICAgIHNldEVycm9yKCJQbGVhc2UgYWRkIGF0IGxlYXN0IDIgUERGIGZpbGVzIHRvIG1lcmdlLiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNldElzTWVyZ2luZyh0cnVlKTsKICAgICAgICBzZXRFcnJvcihudWxsKTsKICAgICAgICBzZXREb3dubG9hZFVybChudWxsKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBtZXJnZWRQZGYgPSBhd2FpdCBQREZEb2N1bWVudC5jcmVhdGUoKTsKICAgICAgICAgICAgZm9yIChjb25zdCBwZGZGaWxlIG9mIGZpbGVzKSB7CiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IHBkZkZpbGUuZmlsZS5hcnJheUJ1ZmZlcigpOwogICAgICAgICAgICAgICAgY29uc3QgcGRmID0gYXdhaXQgUERGRG9jdW1lbnQubG9hZChhcnJheUJ1ZmZlcik7CiAgICAgICAgICAgICAgICBjb25zdCBjb3BpZWRQYWdlcyA9IGF3YWl0IG1lcmdlZFBkZi5jb3B5UGFnZXMocGRmLCBwZGYuZ2V0UGFnZUluZGljZXMoKSk7CiAgICAgICAgICAgICAgICBjb3BpZWRQYWdlcy5mb3JFYWNoKChwYWdlKSA9PiBtZXJnZWRQZGYuYWRkUGFnZShwYWdlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgbWVyZ2VkUGRmQnl0ZXMgPSBhd2FpdCBtZXJnZWRQZGYuc2F2ZSgpOwogICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW21lcmdlZFBkZkJ5dGVzXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTsKICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwodXJsKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7CiAgICAgICAgICAgIHNldEVycm9yKCJGYWlsZWQgdG8gbWVyZ2UgUERGcy4gT25lIG9mIHRoZSBmaWxlcyBtaWdodCBiZSBjb3JydXB0ZWQgb3IgZW5jcnlwdGVkLiIpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0SXNNZXJnaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJNZXJnZSBQREYgRmlsZXMiLCBkZXNjcmlwdGlvbjogIkNvbWJpbmUgbXVsdGlwbGUgUERGIGZpbGVzIGludG8gb25lIHNpbmdsZSBkb2N1bWVudC4gRHJhZyAmIGRyb3AgdG8gcmVvcmRlciBwYWdlcy4iLCBpY29uOiBGaWxlU3RhY2ssIGNhdGVnb3J5OiAiVGV4dCIsIGNoaWxkcmVuOiBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIm1heC13LTR4bCBteC1hdXRvIHAtNiIsIGNoaWxkcmVuOiBmaWxlcy5sZW5ndGggPT09IDAgPyAoX2pzeHMoImRpdiIsIHsgb25EcmFnT3ZlcjogKGUpID0+IGUucHJldmVudERlZmF1bHQoKSwgb25Ecm9wOiAoZSkgPT4gewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVGaWxlcyhlLmRhdGFUcmFuc2Zlci5maWxlcyk7CiAgICAgICAgICAgICAgICB9LCBjbGFzc05hbWU6ICJib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1yZWQtMzAwIGRhcms6Ym9yZGVyLXJlZC05MDAvNTAgYmctcmVkLTUwIGRhcms6YmctcmVkLTkwMC8xMCByb3VuZGVkLTN4bCBwLTE2IHRleHQtY2VudGVyIGhvdmVyOmJnLXJlZC0xMDAgZGFyazpob3ZlcjpiZy1yZWQtOTAwLzIwIHRyYW5zaXRpb24tYWxsIGN1cnNvci1wb2ludGVyIGdyb3VwIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImZpbGUiLCBpZDogInBkZi11cGxvYWQtaW5pdGlhbCIsIGFjY2VwdDogIi5wZGYiLCBtdWx0aXBsZTogdHJ1ZSwgb25DaGFuZ2U6IChlKSA9PiBoYW5kbGVGaWxlcyhlLnRhcmdldC5maWxlcyksIGNsYXNzTmFtZTogImhpZGRlbiIgfSksIF9qc3hzKCJsYWJlbCIsIHsgaHRtbEZvcjogInBkZi11cGxvYWQtaW5pdGlhbCIsIGNsYXNzTmFtZTogImN1cnNvci1wb2ludGVyIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHctZnVsbCBoLWZ1bGwiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy0yNCBoLTI0IGJnLXJlZC0xMDAgZGFyazpiZy1yZWQtOTAwLzMwIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYi02IHRleHQtcmVkLTYwMCBkYXJrOnRleHQtcmVkLTQwMCBncm91cC1ob3ZlcjpzY2FsZS0xMTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gc2hhZG93LXNtIiwgY2hpbGRyZW46IF9qc3goRmlsZVN0YWNrLCB7IGNsYXNzTmFtZTogInctMTIgaC0xMiIgfSkgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTN4bCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgbWItMyIsIGNoaWxkcmVuOiAiU2VsZWN0IFBERiBmaWxlcyIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIHRleHQtbGcgbWItOCIsIGNoaWxkcmVuOiAib3IgZHJvcCBQREZzIGhlcmUiIH0pLCBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJweC04IHB5LTQgYmctcmVkLTYwMCBob3ZlcjpiZy1yZWQtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIHNoYWRvdy1yZWQtNjAwLzIwIHRyYW5zaXRpb24tYWxsIGFjdGl2ZTpzY2FsZS05NSB0ZXh0LWxnIiwgY2hpbGRyZW46ICJTZWxlY3QgUERGcyIgfSldIH0pXSB9KSkgOiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtM3hsIHAtOCBzaGFkb3cteGwiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi02IiwgY2hpbGRyZW46IFtfanN4cygiaDMiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IFsiRmlsZXMgdG8gTWVyZ2UgKCIsIGZpbGVzLmxlbmd0aCwgIikiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtMyIsIGNoaWxkcmVuOiBbX2pzeHMoImxhYmVsIiwgeyBodG1sRm9yOiAicGRmLWFkZC1tb3JlIiwgY2xhc3NOYW1lOiAiY3Vyc29yLXBvaW50ZXIgcHgtNCBweS0yIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgaG92ZXI6YmctZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1kYXJrLTcwMCB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20iLCBjaGlsZHJlbjogW19qc3goUGx1cywgeyBjbGFzc05hbWU6ICJ3LTQgaC00IG1yLTIiIH0pLCAiIEFkZCBGaWxlcyIsIF9qc3goImlucHV0IiwgeyB0eXBlOiAiZmlsZSIsIGlkOiAicGRmLWFkZC1tb3JlIiwgYWNjZXB0OiAiLnBkZiIsIG11bHRpcGxlOiB0cnVlLCBvbkNoYW5nZTogKGUpID0+IGhhbmRsZUZpbGVzKGUudGFyZ2V0LmZpbGVzKSwgY2xhc3NOYW1lOiAiaGlkZGVuIiB9KV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4geyBzZXRGaWxlcyhbXSk7IHNldERvd25sb2FkVXJsKG51bGwpOyB9LCBjbGFzc05hbWU6ICJweC00IHB5LTIgYmctcmVkLTUwIGRhcms6YmctcmVkLTkwMC8yMCBob3ZlcjpiZy1yZWQtMTAwIGRhcms6aG92ZXI6YmctcmVkLTkwMC8zMCB0ZXh0LXJlZC02MDAgZGFyazp0ZXh0LXJlZC00MDAgcm91bmRlZC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LXNtIiwgY2hpbGRyZW46ICJDbGVhciBBbGwiIH0pXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS0zIG1iLTgiLCBjaGlsZHJlbjogZmlsZXMubWFwKChmaWxlLCBpZHgpID0+IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBwLTQgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tMiIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAgYmctcmVkLTEwMCBkYXJrOmJnLXJlZC05MDAvMzAgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXJlZC02MDAgZGFyazp0ZXh0LXJlZC00MDAgZmxleC1zaHJpbmstMCIsIGNoaWxkcmVuOiBfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1zbSIsIGNoaWxkcmVuOiBpZHggKyAxIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgbWluLXctMCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0cnVuY2F0ZSIsIGNoaWxkcmVuOiBmaWxlLmZpbGUubmFtZSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyB0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46IFsoZmlsZS5maWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpLCAiIEtCIl0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBtb3ZlRmlsZShpZHgsICd1cCcpLCBkaXNhYmxlZDogaWR4ID09PSAwLCBjbGFzc05hbWU6ICJwLTIgaG92ZXI6YmctZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1kYXJrLTcwMCByb3VuZGVkLWxnIGRpc2FibGVkOm9wYWNpdHktMzAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IF9qc3goQXJyb3dVcCwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBtb3ZlRmlsZShpZHgsICdkb3duJyksIGRpc2FibGVkOiBpZHggPT09IGZpbGVzLmxlbmd0aCAtIDEsIGNsYXNzTmFtZTogInAtMiBob3ZlcjpiZy1ncmF5LTIwMCBkYXJrOmhvdmVyOmJnLWRhcmstNzAwIHJvdW5kZWQtbGcgZGlzYWJsZWQ6b3BhY2l0eS0zMCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogX2pzeChBcnJvd0Rvd24sIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gcmVtb3ZlRmlsZShmaWxlLmlkKSwgY2xhc3NOYW1lOiAicC0yIGhvdmVyOmJnLXJlZC0xMDAgZGFyazpob3ZlcjpiZy1yZWQtOTAwLzMwIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1yZWQtNTAwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgbWwtMiIsIGNoaWxkcmVuOiBfanN4KFRyYXNoMiwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSB9KV0gfSldIH0sIGZpbGUuaWQpKSkgfSksIGlzTWVyZ2luZyA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWNlbnRlciBweS04IiwgY2hpbGRyZW46IFtfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy04IGgtOCBhbmltYXRlLXNwaW4gdGV4dC1yZWQtNjAwIG14LWF1dG8gbWItNCIgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46ICJNZXJnaW5nIFBERnMuLi4iIH0pLCBfanN4KCJwIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46ICJKdXN0IGEgbW9tZW50IHdoaWxlIHdlIHN0aXRjaCB5b3VyIGZpbGVzIHRvZ2V0aGVyLiIgfSldIH0pKSA6IGRvd25sb2FkVXJsID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIHB5LTYgYmctZ3JlZW4tNTAgZGFyazpiZy1ncmVlbi05MDAvMTAgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ncmVlbi0xMDAgZGFyazpib3JkZXItZ3JlZW4tOTAwLzIwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMTYgaC0xNiBiZy1ncmVlbi0xMDAgZGFyazpiZy1ncmVlbi05MDAvMzAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG14LWF1dG8gbWItNCB0ZXh0LWdyZWVuLTYwMCBkYXJrOnRleHQtZ3JlZW4tNDAwIiwgY2hpbGRyZW46IF9qc3goQ2hlY2tDaXJjbGUsIHsgY2xhc3NOYW1lOiAidy04IGgtOCIgfSkgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi0yIiwgY2hpbGRyZW46ICJNZXJnZSBTdWNjZXNzZnVsISIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIG1iLTYiLCBjaGlsZHJlbjogIllvdXIgbWVyZ2VkIGRvY3VtZW50IGlzIHJlYWR5LiIgfSksIF9qc3hzKCJhIiwgeyBocmVmOiBkb3dubG9hZFVybCwgZG93bmxvYWQ6ICJtZXJnZWRfZG9jdW1lbnQucGRmIiwgY2xhc3NOYW1lOiAiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTggcHktNCBiZy1yZWQtNjAwIGhvdmVyOmJnLXJlZC03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LXJlZC02MDAvMzAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gYWN0aXZlOnNjYWxlLTk1IHRleHQtbGciLCBjaGlsZHJlbjogW19qc3goRG93bmxvYWQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSBtci0yIiB9KSwgIiBEb3dubG9hZCBNZXJnZWQgUERGIl0gfSldIH0pKSA6IChfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIiwgY2hpbGRyZW46IF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IG1lcmdlUGRmcywgY2xhc3NOYW1lOiAidy1mdWxsIHB5LTQgYmctcmVkLTYwMCBob3ZlcjpiZy1yZWQtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIHNoYWRvdy1yZWQtNjAwLzIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGFjdGl2ZTpzY2FsZS05NSB0ZXh0LWxnIiwgY2hpbGRyZW46IFtfanN4KEZpbGVTdGFjaywgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSwgIiBNZXJnZSBQREYgRmlsZXMiXSB9KSB9KSksIGVycm9yICYmIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC02IHAtNCBiZy1yZWQtNTAgZGFyazpiZy1yZWQtOTAwLzIwIHRleHQtcmVkLTYwMCBkYXJrOnRleHQtcmVkLTQwMCByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2hpbGRyZW46IFtfanN4KEFsZXJ0Q2lyY2xlLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCBlcnJvcl0gfSkpXSB9KSkgfSkgfSkpOwp9OwpleHBvcnQgY29uc3QgUGRmVG9Xb3JkQ29udmVydGVyID0gKCkgPT4gewogICAgY29uc3QgW2ZpbGUsIHNldEZpbGVdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbaXNDb252ZXJ0aW5nLCBzZXRJc0NvbnZlcnRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW3Byb2dyZXNzLCBzZXRQcm9ncmVzc10gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFtkb3dubG9hZFVybCwgc2V0RG93bmxvYWRVcmxdID0gdXNlU3RhdGUobnVsbCk7CiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpOwogICAgdXNlRWZmZWN0KCgpID0+IHsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgICBpZiAoZG93bmxvYWRVcmwpCiAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTsKICAgICAgICB9OwogICAgfSwgW2Rvd25sb2FkVXJsXSk7CiAgICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gKGUpID0+IHsKICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBlLnRhcmdldC5maWxlc1swXTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkLnR5cGUgIT09ICdhcHBsaWNhdGlvbi9wZGYnKSB7CiAgICAgICAgICAgICAgICBzZXRFcnJvcignUGxlYXNlIHVwbG9hZCBhIHZhbGlkIFBERiBmaWxlLicpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNldEZpbGUoc2VsZWN0ZWQpOwogICAgICAgICAgICBzZXRFcnJvcihudWxsKTsKICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobnVsbCk7CiAgICAgICAgICAgIHNldFByb2dyZXNzKDApOwogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBoYW5kbGVEcm9wID0gKGUpID0+IHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKGUuZGF0YVRyYW5zZmVyLmZpbGVzICYmIGUuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKSB7CiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZS5kYXRhVHJhbnNmZXIuZmlsZXNbMF07CiAgICAgICAgICAgIGlmIChzZWxlY3RlZC50eXBlICE9PSAnYXBwbGljYXRpb24vcGRmJykgewogICAgICAgICAgICAgICAgc2V0RXJyb3IoJ1BsZWFzZSB1cGxvYWQgYSB2YWxpZCBQREYgZmlsZS4nKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZXRGaWxlKHNlbGVjdGVkKTsKICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7CiAgICAgICAgICAgIHNldERvd25sb2FkVXJsKG51bGwpOwogICAgICAgICAgICBzZXRQcm9ncmVzcygwKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgY29udmVydFRvV29yZCA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWZpbGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc0NvbnZlcnRpbmcodHJ1ZSk7CiAgICAgICAgc2V0RXJyb3IobnVsbCk7CiAgICAgICAgc2V0RG93bmxvYWRVcmwobnVsbCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7CiAgICAgICAgICAgIGNvbnN0IHBkZiA9IGF3YWl0IHBkZmpzTGliLmdldERvY3VtZW50KHsgZGF0YTogYXJyYXlCdWZmZXIgfSkucHJvbWlzZTsKICAgICAgICAgICAgY29uc3QgbnVtUGFnZXMgPSBwZGYubnVtUGFnZXM7CiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBbXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtUGFnZXM7IGkrKykgewogICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHBkZi5nZXRQYWdlKGkpOwogICAgICAgICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBhd2FpdCBwYWdlLmdldFRleHRDb250ZW50KCk7CiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgdGV4dCBleHRyYWN0aW9uIHN0cmF0ZWd5CiAgICAgICAgICAgICAgICAvLyBJbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8sIHdlIHdvdWxkIGFuYWx5emUgeS1jb29yZGluYXRlcyB0byBncm91cCBsaW5lcyBpbnRvIHBhcmFncmFwaHMKICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgZG8gYSBiYXNpYyBncm91cGluZyBiYXNlZCBvbiBsaW5lIGJyZWFrcwogICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRMaW5lID0gIiI7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBleHRyYWN0aW9uLiAKICAgICAgICAgICAgICAgIC8vIE5vdGU6IENyZWF0aW5nIGEgcGVyZmVjdCB2aXN1YWwgcmVwbGljYSBvZiBhIFBERiBpbiBXb3JkIGNsaWVudC1zaWRlIGlzIGV4dHJlbWVseSBjb21wbGV4LgogICAgICAgICAgICAgICAgLy8gVGhpcyB0b29sIGZvY3VzZXMgb24gZXh0cmFjdGluZyB0aGUgdGV4dCBjb250ZW50IGludG8gYW4gZWRpdGFibGUgZm9ybWF0LgogICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRleHRDb250ZW50Lml0ZW1zKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCdzdHInIGluIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gaXRlbS5zdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhldXJpc3RpYzogSWYgc3RyaW5nIGVuZHMgd2l0aCBzcGFjZSBvciBpcyBlbXB0eSwgaXQgbWlnaHQgYmUgZW5kIG9mIHdvcmQvc2VudGVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmUgKz0gc3RyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5oYXNFT0wpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaHMucHVzaChuZXcgZG9jeC5QYXJhZ3JhcGgoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbbmV3IGRvY3guVGV4dFJ1bihjdXJyZW50TGluZSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGluZSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHNwYWNlIGJldHdlZW4gaXRlbXMgaWYgdGhleSBhcmVuJ3QgY2xvc2UgKHNpbXBsaWZpZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGluZSArPSAiICI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBQdXNoIHJlbWFpbmluZwogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lLnRyaW0oKSkgewogICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaHMucHVzaChuZXcgZG9jeC5QYXJhZ3JhcGgoewogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW25ldyBkb2N4LlRleHRSdW4oY3VycmVudExpbmUpXQogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIEFkZCBwYWdlIGJyZWFrIGlmIG5vdCBsYXN0IHBhZ2UKICAgICAgICAgICAgICAgIGlmIChpIDwgbnVtUGFnZXMpIHsKICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhzLnB1c2gobmV3IGRvY3guUGFyYWdyYXBoKHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtuZXcgZG9jeC5QYWdlQnJlYWsoKV0KICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRQcm9ncmVzcyhNYXRoLnJvdW5kKChpIC8gbnVtUGFnZXMpICogMTAwKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gR2VuZXJhdGUgRG9jeAogICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgZG9jeC5Eb2N1bWVudCh7CiAgICAgICAgICAgICAgICBzZWN0aW9uczogW3sKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge30sCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBwYXJhZ3JhcGhzCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBkb2N4LlBhY2tlci50b0Jsb2IoZG9jKTsKICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwodXJsKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGVycikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7CiAgICAgICAgICAgIHNldEVycm9yKCJGYWlsZWQgdG8gY29udmVydCBQREYuIFRoZSBmaWxlIG1pZ2h0IGJlIGVuY3J5cHRlZCBvciBjb3JydXB0ZWQuIik7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0NvbnZlcnRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIlBERiB0byBXb3JkIENvbnZlcnRlciIsIGRlc2NyaXB0aW9uOiAiQ29udmVydCBQREYgZG9jdW1lbnRzIHRvIGVkaXRhYmxlIFdvcmQgKC5kb2N4KSBmaWxlcyBhY2N1cmF0ZWx5IGFuZCBwcml2YXRlbHkgaW4geW91ciBicm93c2VyLiIsIGljb246IEZpbGVUeXBlLCBjYXRlZ29yeTogIlRleHQiLCBjaGlsZHJlbjogX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtYXgtdy00eGwgbXgtYXV0byBwLTYiLCBjaGlsZHJlbjogIWZpbGUgPyAoX2pzeHMoImRpdiIsIHsgb25EcmFnT3ZlcjogKGUpID0+IGUucHJldmVudERlZmF1bHQoKSwgb25Ecm9wOiBoYW5kbGVEcm9wLCBjbGFzc05hbWU6ICJncm91cCByZWxhdGl2ZSBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1yZWQtMzAwIGRhcms6Ym9yZGVyLXJlZC05MDAvNTAgYmctcmVkLTUwIGRhcms6YmctcmVkLTkwMC8xMCByb3VuZGVkLTN4bCBwLTE2IHRleHQtY2VudGVyIGhvdmVyOmJnLXJlZC0xMDAgZGFyazpob3ZlcjpiZy1yZWQtOTAwLzIwIHRyYW5zaXRpb24tYWxsIGN1cnNvci1wb2ludGVyIiwgY2hpbGRyZW46IFtfanN4KCJpbnB1dCIsIHsgdHlwZTogImZpbGUiLCBpZDogInBkZi11cGxvYWQiLCBhY2NlcHQ6ICIucGRmIiwgb25DaGFuZ2U6IGhhbmRsZUZpbGVDaGFuZ2UsIGNsYXNzTmFtZTogImhpZGRlbiIgfSksIF9qc3hzKCJsYWJlbCIsIHsgaHRtbEZvcjogInBkZi11cGxvYWQiLCBjbGFzc05hbWU6ICJjdXJzb3ItcG9pbnRlciBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTI0IGgtMjQgYmctcmVkLTEwMCBkYXJrOmJnLXJlZC05MDAvMzAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTYgdGV4dC1yZWQtNjAwIGRhcms6dGV4dC1yZWQtNDAwIGdyb3VwLWhvdmVyOnNjYWxlLTExMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBzaGFkb3ctc20iLCBjaGlsZHJlbjogX2pzeChGaWxlVGV4dCwgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIiIH0pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC0zeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTMiLCBjaGlsZHJlbjogIlNlbGVjdCBQREYgZmlsZSIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIHRleHQtbGcgbWItOCIsIGNoaWxkcmVuOiAib3IgZHJvcCBQREYgaGVyZSIgfSksIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInB4LTggcHktNCBiZy1yZWQtNjAwIGhvdmVyOmJnLXJlZC03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LXJlZC02MDAvMjAgdHJhbnNpdGlvbi1hbGwgYWN0aXZlOnNjYWxlLTk1IHRleHQtbGciLCBjaGlsZHJlbjogIlNlbGVjdCBQREYiIH0pXSB9KV0gfSkpIDogKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLTN4bCBwLTggc2hhZG93LXhsIG1heC13LTJ4bCBteC1hdXRvIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItOCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy0xNiBoLTE2IGJnLXJlZC0xMDAgZGFyazpiZy1yZWQtOTAwLzMwIHJvdW5kZWQtMnhsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtcmVkLTYwMCBkYXJrOnRleHQtcmVkLTQwMCIsIGNoaWxkcmVuOiBfanN4KEZpbGVUZXh0LCB7IGNsYXNzTmFtZTogInctOCBoLTgiIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSB0cnVuY2F0ZSBtYXgtdy1bMjUwcHhdIiwgY2hpbGRyZW46IGZpbGUubmFtZSB9KSwgX2pzeHMoInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20gdGV4dC1ncmF5LTUwMCIsIGNoaWxkcmVuOiBbKGZpbGUuc2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpLCAiIE1CIl0gfSldIH0pXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7IHNldEZpbGUobnVsbCk7IHNldERvd25sb2FkVXJsKG51bGwpOyB9LCBjbGFzc05hbWU6ICJwLTIgaG92ZXI6YmctZ3JheS0xMDAgZGFyazpob3ZlcjpiZy1kYXJrLTgwMCByb3VuZGVkLWZ1bGwgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LXJlZC01MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogX2pzeChYLCB7IGNsYXNzTmFtZTogInctNiBoLTYiIH0pIH0pXSB9KSwgaXNDb252ZXJ0aW5nID8gKF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtY2VudGVyIHB5LTgiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAibWItNCByZWxhdGl2ZSBoLTQgYmctZ3JheS0xMDAgZGFyazpiZy1kYXJrLTgwMCByb3VuZGVkLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2hpbGRyZW46IF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCBiZy1yZWQtNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCIsIHN0eWxlOiB7IHdpZHRoOiBgJHtwcm9ncmVzc30lYCB9IH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyB0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIGFuaW1hdGUtcHVsc2UiLCBjaGlsZHJlbjogW19qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IGFuaW1hdGUtc3BpbiB0ZXh0LXJlZC02MDAiIH0pLCAiQ29udmVydGluZyB5b3VyIFBERi4uLiAiLCBwcm9ncmVzcywgIiUiXSB9KV0gfSkpIDogZG93bmxvYWRVcmwgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1jZW50ZXIgcHktNiBhbmltYXRlLWluIGZhZGUtaW4gem9vbS1pbiBkdXJhdGlvbi0zMDAiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy0yMCBoLTIwIGJnLWdyZWVuLTEwMCBkYXJrOmJnLWdyZWVuLTkwMC8zMCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXgtYXV0byBtYi02IHRleHQtZ3JlZW4tNjAwIGRhcms6dGV4dC1ncmVlbi00MDAiLCBjaGlsZHJlbjogX2pzeChDaGVja0NpcmNsZSwgeyBjbGFzc05hbWU6ICJ3LTEwIGgtMTAiIH0pIH0pLCBfanN4KCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTIiLCBjaGlsZHJlbjogIkNvbnZlcnNpb24gQ29tcGxldGUhIiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgbWItOCIsIGNoaWxkcmVuOiAiWW91ciBXb3JkIGRvY3VtZW50IGlzIHJlYWR5IHRvIGRvd25sb2FkLiIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgZ2FwLTMiLCBjaGlsZHJlbjogW19qc3hzKCJhIiwgeyBocmVmOiBkb3dubG9hZFVybCwgZG93bmxvYWQ6IGAke2ZpbGUubmFtZS5yZXBsYWNlKCcucGRmJywgJycpfS5kb2N4YCwgY2xhc3NOYW1lOiAidy1mdWxsIHB5LTQgYmctcmVkLTYwMCBob3ZlcjpiZy1yZWQtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHJvdW5kZWQteGwgc2hhZG93LWxnIHNoYWRvdy1yZWQtNjAwLzMwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIHRyYW5zaXRpb24tdHJhbnNmb3JtIGFjdGl2ZTpzY2FsZS05NSB0ZXh0LWxnIiwgY2hpbGRyZW46IFtfanN4KERvd25sb2FkLCB7IGNsYXNzTmFtZTogInctNiBoLTYiIH0pLCAiIERvd25sb2FkIFdPUkQiXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiB7IHNldEZpbGUobnVsbCk7IHNldERvd25sb2FkVXJsKG51bGwpOyB9LCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktMyBiZy1ncmF5LTEwMCBkYXJrOmJnLWRhcmstODAwIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktNDAwIGZvbnQtYm9sZCByb3VuZGVkLXhsIGhvdmVyOmJnLWdyYXktMjAwIGRhcms6aG92ZXI6YmctZGFyay03MDAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogIkNvbnZlcnQgQW5vdGhlciBGaWxlIiB9KV0gfSldIH0pKSA6IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgbWItOCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcC00IHJvdW5kZWQteGwgdy1mdWxsIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiAiUERGIiB9KSwgX2pzeChBcnJvd1JpZ2h0LCB7IGNsYXNzTmFtZTogInctNiBoLTYgdGV4dC1ncmF5LTMwMCIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIHRleHQtY2VudGVyIGZvbnQtYm9sZCB0ZXh0LWJsdWUtNjAwIGRhcms6dGV4dC1ibHVlLTQwMCIsIGNoaWxkcmVuOiAiV09SRCIgfSldIH0pLCBfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiBjb252ZXJ0VG9Xb3JkLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktNCBiZy1yZWQtNjAwIGhvdmVyOmJnLXJlZC03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcm91bmRlZC14bCBzaGFkb3ctbGcgc2hhZG93LXJlZC02MDAvMzAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgdHJhbnNpdGlvbi10cmFuc2Zvcm0gYWN0aXZlOnNjYWxlLTk1IHRleHQtbGciLCBjaGlsZHJlbjogWyJDb252ZXJ0IHRvIFdvcmQiLCBfanN4KEFycm93UmlnaHQsIHsgY2xhc3NOYW1lOiAidy01IGgtNSIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC02IGZsZXggaXRlbXMtc3RhcnQgZ2FwLTIgdGV4dC14cyB0ZXh0LWdyYXktNDAwIGRhcms6dGV4dC1ncmF5LTUwMCB0ZXh0LWxlZnQgYmctYmx1ZS01MCBkYXJrOmJnLWJsdWUtOTAwLzEwIHAtMyByb3VuZGVkLWxnIiwgY2hpbGRyZW46IFtfanN4KEFsZXJ0Q2lyY2xlLCB7IGNsYXNzTmFtZTogInctNCBoLTQgc2hyaW5rLTAgdGV4dC1ibHVlLTUwMCBtdC0wLjUiIH0pLCBfanN4cygicCIsIHsgY2hpbGRyZW46IFtfanN4KCJzdHJvbmciLCB7IGNoaWxkcmVuOiAiTm90ZToiIH0pLCAiIFRoaXMgdG9vbCBleHRyYWN0cyB0ZXh0IGFuZCBwYXJhZ3JhcGhzLiBDb21wbGV4IGxheW91dHMsIGZsb2F0aW5nIGltYWdlcywgb3Igc3RyaWN0IGZvcm1hdHRpbmcgbWlnaHQgYmUgc2ltcGxpZmllZCBpbiB0aGUgV29yZCBvdXRwdXQuIl0gfSldIH0pXSB9KSksIGVycm9yICYmIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJtdC02IHAtNCBiZy1yZWQtNTAgZGFyazpiZy1yZWQtOTAwLzIwIHRleHQtcmVkLTYwMCBkYXJrOnRleHQtcmVkLTQwMCByb3VuZGVkLXhsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2hpbGRyZW46IFtfanN4KEFsZXJ0Q2lyY2xlLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCBlcnJvcl0gfSkpXSB9KSkgfSkgfSkpOwp9Owo=","@/components/Tools/NotesApp":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gInJlYWN0L2pzeC1ydW50aW1lIjsKaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IFBsdXMsIFRyYXNoMiwgU2VhcmNoLCBGaWxlVGV4dCwgV2FuZDIsIExpc3RDaGVja3MsIExpZ2h0YnVsYiwgQm9va09wZW4sIENsb2NrLCBBcnJvd0xlZnRSaWdodCwgRXllLCBFZGl0MywgU2lkZWJhciBhcyBTaWRlYmFySWNvbiwgQnJhaW5DaXJjdWl0LCBDaGVjaywgTG9hZGVyMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCB7IGdlbmVyYXRlVGV4dCB9IGZyb20gJ0Avc2VydmljZXMvZ2VtaW5pU2VydmljZSc7CmltcG9ydCBSZWFjdE1hcmtkb3duIGZyb20gJ3JlYWN0LW1hcmtkb3duJzsKZXhwb3J0IGNvbnN0IE5vdGVzQXBwID0gKCkgPT4gewogICAgY29uc3QgW25vdGVzLCBzZXROb3Rlc10gPSB1c2VTdGF0ZSgoKSA9PiB7CiAgICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2lyZW5pbmphX25vdGVzJyk7CiAgICAgICAgcmV0dXJuIHNhdmVkID8gSlNPTi5wYXJzZShzYXZlZCkgOiBbewogICAgICAgICAgICAgICAgaWQ6ICd3ZWxjb21lLW5vdGUnLAogICAgICAgICAgICAgICAgdGl0bGU6ICdXZWxjb21lIHRvIE5pbmphTm90ZXMg8J+ltycsCiAgICAgICAgICAgICAgICBjb250ZW50OiAnIyBTdGFydCB5b3VyIGpvdXJuZXkgaGVyZVxuXG5OaW5qYU5vdGVzIGlzIGEgcHJvZmVzc2lvbmFsIHdvcmtzcGFjZSBkZXNpZ25lZCBmb3IgY2xhcml0eS4gXG5cbiMjIyBLZXkgRmVhdHVyZXM6XG4tICoqTWFya2Rvd24gU3VwcG9ydCoqOiBVc2UgaGVhZGluZ3MsIGJvbGQsIGFuZCBsaXN0cy5cbi0gKipBSSBBc3Npc3RhbnQqKjogVXNlIHRoZSBzaWRlYmFyIHRvIHRyYW5zZm9ybSB5b3VyIHRob3VnaHRzLlxuLSAqKkxvY2FsIEZpcnN0Kio6IEV2ZXJ5dGhpbmcgaXMgc2F2ZWQgaW4geW91ciBicm93c2VyLlxuXG5Ucnkgc2VsZWN0aW5nIHNvbWUgdGV4dCBhbmQgY2xpY2tpbmcgYW4gQUkgYWN0aW9uIScsCiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCkKICAgICAgICAgICAgfV07CiAgICB9KTsKICAgIGNvbnN0IFthY3RpdmVOb3RlSWQsIHNldEFjdGl2ZU5vdGVJZF0gPSB1c2VTdGF0ZShub3Rlc1swXT8uaWQgfHwgbnVsbCk7CiAgICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpOwogICAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZSgnc3BsaXQnKTsKICAgIGNvbnN0IFtpc0FpTG9hZGluZywgc2V0SXNBaUxvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW3NpZGViYXJPcGVuLCBzZXRTaWRlYmFyT3Blbl0gPSB1c2VTdGF0ZSh0cnVlKTsKICAgIC8vIFBlcnNpc3RlbmNlCiAgICB1c2VFZmZlY3QoKCkgPT4gewogICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3aXJlbmluamFfbm90ZXMnLCBKU09OLnN0cmluZ2lmeShub3RlcykpOwogICAgfSwgW25vdGVzXSk7CiAgICBjb25zdCBhY3RpdmVOb3RlID0gdXNlTWVtbygoKSA9PiBub3Rlcy5maW5kKG4gPT4gbi5pZCA9PT0gYWN0aXZlTm90ZUlkKSwgW25vdGVzLCBhY3RpdmVOb3RlSWRdKTsKICAgIGNvbnN0IGZpbHRlcmVkTm90ZXMgPSB1c2VNZW1vKCgpID0+IG5vdGVzLmZpbHRlcihuID0+IG4udGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIudXBkYXRlZEF0IC0gYS51cGRhdGVkQXQpLCBbbm90ZXMsIHNlYXJjaF0pOwogICAgY29uc3QgYWRkTm90ZSA9ICgpID0+IHsKICAgICAgICBjb25zdCBuZXdOb3RlID0gewogICAgICAgICAgICBpZDogY3J5cHRvLnJhbmRvbVVVSUQoKSwKICAgICAgICAgICAgdGl0bGU6ICdVbnRpdGxlZCBOb3RlJywKICAgICAgICAgICAgY29udGVudDogJycsCiAgICAgICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKQogICAgICAgIH07CiAgICAgICAgc2V0Tm90ZXMoW25ld05vdGUsIC4uLm5vdGVzXSk7CiAgICAgICAgc2V0QWN0aXZlTm90ZUlkKG5ld05vdGUuaWQpOwogICAgfTsKICAgIGNvbnN0IHVwZGF0ZUFjdGl2ZU5vdGUgPSAodXBkYXRlcykgPT4gewogICAgICAgIGlmICghYWN0aXZlTm90ZUlkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0Tm90ZXMobm90ZXMubWFwKG4gPT4gbi5pZCA9PT0gYWN0aXZlTm90ZUlkID8geyAuLi5uLCAuLi51cGRhdGVzLCB1cGRhdGVkQXQ6IERhdGUubm93KCkgfSA6IG4pKTsKICAgIH07CiAgICBjb25zdCBkZWxldGVOb3RlID0gKGlkLCBlKSA9PiB7CiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBpZiAoY29uZmlybSgiRGVsZXRlIHRoaXMgbm90ZT8iKSkgewogICAgICAgICAgICBjb25zdCByZW1haW5pbmcgPSBub3Rlcy5maWx0ZXIobiA9PiBuLmlkICE9PSBpZCk7CiAgICAgICAgICAgIHNldE5vdGVzKHJlbWFpbmluZyk7CiAgICAgICAgICAgIGlmIChhY3RpdmVOb3RlSWQgPT09IGlkKSB7CiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb3RlSWQocmVtYWluaW5nWzBdPy5pZCB8fCBudWxsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICBjb25zdCBoYW5kbGVBaUFjdGlvbiA9IGFzeW5jIChhY3Rpb24pID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZU5vdGUgfHwgIWFjdGl2ZU5vdGUuY29udGVudC50cmltKCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzZXRJc0FpTG9hZGluZyh0cnVlKTsKICAgICAgICBsZXQgcHJvbXB0ID0gIiI7CiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKICAgICAgICAgICAgY2FzZSAnc3VtbWFyaXplJzoKICAgICAgICAgICAgICAgIHByb21wdCA9IGBTdW1tYXJpemUgdGhlIGZvbGxvd2luZyBub3RlIGludG8gYSBjb25jaXNlLCB3ZWxsLXN0cnVjdHVyZWQgcGFyYWdyYXBoIGZvbGxvd2VkIGJ5IDMga2V5IHRha2Vhd2F5cyBpbiBidWxsZXQgcG9pbnRzOlxuXG4ke2FjdGl2ZU5vdGUuY29udGVudH1gOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2JyYWluc3Rvcm0nOgogICAgICAgICAgICAgICAgcHJvbXB0ID0gYEJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgbm90ZSwgc3VnZ2VzdCA1IGNyZWF0aXZlIGlkZWFzLCBmb2xsb3ctdXAgcXVlc3Rpb25zLCBvciByZWxhdGVkIHRvcGljcyB0byBleHBsb3JlIGZ1cnRoZXI6XG5cbiR7YWN0aXZlTm90ZS5jb250ZW50fWA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZml4JzoKICAgICAgICAgICAgICAgIHByb21wdCA9IGBGaXggYW55IGdyYW1tYXIgb3Igc3BlbGxpbmcgbWlzdGFrZXMgaW4gdGhlIGZvbGxvd2luZyB0ZXh0IGFuZCBpbXByb3ZlIGl0cyBmbG93IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGNvcmUgbWVhbmluZy4gTWFpbnRhaW4gYSBwcm9mZXNzaW9uYWwgeWV0IGFjY2Vzc2libGUgdG9uZTpcblxuJHthY3RpdmVOb3RlLmNvbnRlbnR9YDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0b2RvJzoKICAgICAgICAgICAgICAgIHByb21wdCA9IGBFeHRyYWN0IGFsbCBhY3Rpb25hYmxlIHRhc2tzIG9yIGltcGxpZWQgbmV4dCBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbm90ZSBpbnRvIGEgY2xlYW4gTWFya2Rvd24gY2hlY2tsaXN0OlxuXG4ke2FjdGl2ZU5vdGUuY29udGVudH1gOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlVGV4dChwcm9tcHQpOwogICAgICAgICAgICAvLyBXZSBhcHBlbmQgQUkgcmVzdWx0IGF0IHRoZSBib3R0b20gZm9yIHNvbWUgYWN0aW9ucywgb3IgcmVwbGFjZSBmb3Igb3RoZXJzCiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdmaXgnKSB7CiAgICAgICAgICAgICAgICB1cGRhdGVBY3RpdmVOb3RlKHsgY29udGVudDogcmVzdWx0IH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdXBkYXRlQWN0aXZlTm90ZSh7IGNvbnRlbnQ6IGFjdGl2ZU5vdGUuY29udGVudCArIGBcblxuLS0tXG4jIyMgQUkgJHthY3Rpb24udG9VcHBlckNhc2UoKX1cbmAgKyByZXN1bHQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgICAgYWxlcnQoIkFJIEFzc2lzdGFudCBlbmNvdW50ZXJlZCBhbiBlcnJvci4gUGxlYXNlIGNoZWNrIHlvdXIgY29ubmVjdGlvbi4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzQWlMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJOaW5qYU5vdGVzIFdvcmtzcGFjZSIsIGRlc2NyaXB0aW9uOiAiQWR2YW5jZWQgbXVsdGktbm90ZSBlZGl0b3Igd2l0aCBNYXJrZG93biByZW5kZXJpbmcgYW5kIEFJLXBvd2VyZWQgaW50ZWxsaWdlbmNlLiIsIGljb246IEJvb2tPcGVuLCBjYXRlZ29yeTogIlRleHQiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBoLVs3NTBweF0gYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXItdCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogYCR7c2lkZWJhck9wZW4gPyAndy03MicgOiAndy0wJ30gYm9yZGVyLXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGZsZXggZmxleC1jb2wgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIG92ZXJmbG93LWhpZGRlbiBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAvNTBgLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBib3JkZXItYiBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGFkZE5vdGUsIGNsYXNzTmFtZTogInctZnVsbCBweS0yLjUgYmctYnJhbmQtNjAwIGhvdmVyOmJnLWJyYW5kLTcwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgZm9udC1ib2xkIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHNoYWRvdy1zbSB0cmFuc2l0aW9uLWFsbCBhY3RpdmU6c2NhbGUtWzAuOThdIiwgY2hpbGRyZW46IFtfanN4KFBsdXMsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSksICIgTmV3IE5vdGUiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtNCByZWxhdGl2ZSIsIGNoaWxkcmVuOiBbX2pzeChTZWFyY2gsIHsgY2xhc3NOYW1lOiAiYWJzb2x1dGUgbGVmdC0zIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB3LTQgaC00IHRleHQtZ3JheS00MDAiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInRleHQiLCBwbGFjZWhvbGRlcjogIlNlYXJjaCBub3Rlcy4uLiIsIHZhbHVlOiBzZWFyY2gsIG9uQ2hhbmdlOiBlID0+IHNldFNlYXJjaChlLnRhcmdldC52YWx1ZSksIGNsYXNzTmFtZTogInctZnVsbCBwbC05IHByLTQgcHktMiBiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC1sZyB0ZXh0LXNtIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWJyYW5kLTUwMCIgfSldIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIGN1c3RvbS1zY3JvbGxiYXIiLCBjaGlsZHJlbjogZmlsdGVyZWROb3Rlcy5tYXAobm90ZSA9PiAoX2pzeHMoImRpdiIsIHsgb25DbGljazogKCkgPT4gc2V0QWN0aXZlTm90ZUlkKG5vdGUuaWQpLCBjbGFzc05hbWU6IGBwLTQgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktNTAgZGFyazpib3JkZXItZGFyay05MDAvNTAgdHJhbnNpdGlvbi1jb2xvcnMgZ3JvdXAgcmVsYXRpdmUgJHthY3RpdmVOb3RlSWQgPT09IG5vdGUuaWQgPyAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBzaGFkb3ctc20gei0xMCcgOiAnaG92ZXI6YmctZ3JheS0xMDAvNTAgZGFyazpob3ZlcjpiZy1kYXJrLTkwMC8zMCd9YCwgY2hpbGRyZW46IFtfanN4KCJoNCIsIHsgY2xhc3NOYW1lOiBgdGV4dC1zbSBmb250LWJvbGQgdHJ1bmNhdGUgcHItNiAke2FjdGl2ZU5vdGVJZCA9PT0gbm90ZS5pZCA/ICd0ZXh0LWJyYW5kLTYwMCBkYXJrOnRleHQtYnJhbmQtNDAwJyA6ICd0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCd9YCwgY2hpbGRyZW46IG5vdGUudGl0bGUgfHwgJ1VudGl0bGVkJyB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG10LTEiLCBjaGlsZHJlbjogW19qc3hzKCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBmb250LWJvbGQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEiLCBjaGlsZHJlbjogW19qc3goQ2xvY2ssIHsgY2xhc3NOYW1lOiAidy0yLjUgaC0yLjUiIH0pLCAiICIsIG5ldyBEYXRlKG5vdGUudXBkYXRlZEF0KS50b0xvY2FsZURhdGVTdHJpbmcoKV0gfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKGUpID0+IGRlbGV0ZU5vdGUobm90ZS5pZCwgZSksIGNsYXNzTmFtZTogInAtMSB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtcmVkLTUwMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IiwgY2hpbGRyZW46IF9qc3goVHJhc2gyLCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pIH0pXSB9KSwgYWN0aXZlTm90ZUlkID09PSBub3RlLmlkICYmIChfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTEgYmctYnJhbmQtNTAwIiB9KSldIH0sIG5vdGUuaWQpKSkgfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSBmbGV4IGZsZXgtY29sIG1pbi13LTAgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCIsIGNoaWxkcmVuOiAhYWN0aXZlTm90ZSA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiBbX2pzeChGaWxlVGV4dCwgeyBjbGFzc05hbWU6ICJ3LTE2IGgtMTYgbWItNCBvcGFjaXR5LTEwIiB9KSwgX2pzeCgicCIsIHsgY2hpbGRyZW46ICJTZWxlY3Qgb3IgY3JlYXRlIGEgbm90ZSB0byBiZWdpbi4iIH0pXSB9KSkgOiAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiaC0xNCBib3JkZXItYiBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0U2lkZWJhck9wZW4oIXNpZGViYXJPcGVuKSwgY2xhc3NOYW1lOiAicC0yIGhvdmVyOmJnLWdyYXktMTAwIGRhcms6aG92ZXI6YmctZGFyay04MDAgcm91bmRlZC1sZyB0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46IF9qc3goU2lkZWJhckljb24sIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBhY3RpdmVOb3RlLnRpdGxlLCBvbkNoYW5nZTogZSA9PiB1cGRhdGVBY3RpdmVOb3RlKHsgdGl0bGU6IGUudGFyZ2V0LnZhbHVlIH0pLCBjbGFzc05hbWU6ICJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBmb2N1czpyaW5nLTAgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRydW5jYXRlIiwgcGxhY2Vob2xkZXI6ICJOb3RlIFRpdGxlLi4uIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIGJnLWdyYXktMTAwIGRhcms6YmctZGFyay05NTAgcC0xIHJvdW5kZWQtbGciLCBjaGlsZHJlbjogW19qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0Vmlld01vZGUoJ2VkaXQnKSwgY2xhc3NOYW1lOiBgcC0xLjUgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWFsbCAke3ZpZXdNb2RlID09PSAnZWRpdCcgPyAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCBzaGFkb3ctc20gdGV4dC1icmFuZC02MDAnIDogJ3RleHQtZ3JheS00MDAnfWAsIHRpdGxlOiAiRWRpdCBNb2RlIiwgY2hpbGRyZW46IF9qc3goRWRpdDMsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0Vmlld01vZGUoJ3NwbGl0JyksIGNsYXNzTmFtZTogYHAtMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1hbGwgJHt2aWV3TW9kZSA9PT0gJ3NwbGl0JyA/ICdiZy13aGl0ZSBkYXJrOmJnLWRhcmstODAwIHNoYWRvdy1zbSB0ZXh0LWJyYW5kLTYwMCcgOiAndGV4dC1ncmF5LTQwMCd9YCwgdGl0bGU6ICJTcGxpdCBWaWV3IiwgY2hpbGRyZW46IF9qc3goQXJyb3dMZWZ0UmlnaHQsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0Vmlld01vZGUoJ3ByZXZpZXcnKSwgY2xhc3NOYW1lOiBgcC0xLjUgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWFsbCAke3ZpZXdNb2RlID09PSAncHJldmlldycgPyAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCBzaGFkb3ctc20gdGV4dC1icmFuZC02MDAnIDogJ3RleHQtZ3JheS00MDAnfWAsIHRpdGxlOiAiUHJldmlldyBNb2RlIiwgY2hpbGRyZW46IF9qc3goRXllLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSBmbGV4IG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBbKHZpZXdNb2RlID09PSAnZWRpdCcgfHwgdmlld01vZGUgPT09ICdzcGxpdCcpICYmIChfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IGFjdGl2ZU5vdGUuY29udGVudCwgb25DaGFuZ2U6IGUgPT4gdXBkYXRlQWN0aXZlTm90ZSh7IGNvbnRlbnQ6IGUudGFyZ2V0LnZhbHVlIH0pLCBwbGFjZWhvbGRlcjogIldyaXRlIHlvdXIgdGhvdWdodHMgaW4gTWFya2Rvd24uLi4iLCBjbGFzc05hbWU6IGBmbGV4LTEgcC04IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIGZvY3VzOnJpbmctMCByZXNpemUtbm9uZSBmb250LW1vbm8gdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgY3VzdG9tLXNjcm9sbGJhciBkYXJrOnRleHQtZ3JheS0zMDAgJHt2aWV3TW9kZSA9PT0gJ3NwbGl0JyA/ICdib3JkZXItciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAnIDogJyd9YCB9KSksICh2aWV3TW9kZSA9PT0gJ3ByZXZpZXcnIHx8IHZpZXdNb2RlID09PSAnc3BsaXQnKSAmJiAoX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgcC04IG92ZXJmbG93LXktYXV0byBjdXN0b20tc2Nyb2xsYmFyIHByb3NlIGRhcms6cHJvc2UtaW52ZXJ0IG1heC13LW5vbmUgcHJvc2UtYnJhbmQiLCBjaGlsZHJlbjogX2pzeChSZWFjdE1hcmtkb3duLCB7IGNoaWxkcmVuOiBhY3RpdmVOb3RlLmNvbnRlbnQgfHwgJypFbXB0eSBub3RlKicgfSkgfSkpXSB9KV0gfSkpIH0pLCBhY3RpdmVOb3RlICYmIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ3LTE2IG1kOnctNjQgYm9yZGVyLWwgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGZsZXggZmxleC1jb2wgYmctZ3JheS01MC81MCBkYXJrOmJnLWRhcmstOTUwLzMwIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KEJyYWluQ2lyY3VpdCwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IHRleHQtYnJhbmQtNTAwIiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAiaGlkZGVuIG1kOmlubGluZSBmb250LWJvbGQgdGV4dC1zbSB0ZXh0LWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiwgY2hpbGRyZW46ICJDby1QaWxvdCIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTIgbWQ6cC00IHNwYWNlLXktMiBmbGV4LTEiLCBjaGlsZHJlbjogW1sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ2ZpeCcsIGxhYmVsOiAnUG9saXNoIFRleHQnLCBpY29uOiBXYW5kMiwgY29sb3I6ICd0ZXh0LWJsdWUtNTAwJywgZGVzYzogJ0ZpeCBncmFtbWFyICYgZmxvdycgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3N1bW1hcml6ZScsIGxhYmVsOiAnU3VtbWFyaXplJywgaWNvbjogRmlsZVRleHQsIGNvbG9yOiAndGV4dC1wdXJwbGUtNTAwJywgZGVzYzogJ0JyaWVmIG92ZXJ2aWV3JyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlkOiAndG9kbycsIGxhYmVsOiAnRXh0cmFjdCBUYXNrcycsIGljb246IExpc3RDaGVja3MsIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLCBkZXNjOiAnQ3JlYXRlIGNoZWNrbGlzdHMnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdicmFpbnN0b3JtJywgbGFiZWw6ICdCcmFpbnN0b3JtJywgaWNvbjogTGlnaHRidWxiLCBjb2xvcjogJ3RleHQtYW1iZXItNTAwJywgZGVzYzogJ0dldCBuZXcgaWRlYXMnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tYXAoYWN0aW9uID0+IChfanN4cygiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBoYW5kbGVBaUFjdGlvbihhY3Rpb24uaWQpLCBkaXNhYmxlZDogaXNBaUxvYWRpbmcgfHwgIWFjdGl2ZU5vdGUuY29udGVudC50cmltKCksIGNsYXNzTmFtZTogInctZnVsbCBwLTIgbWQ6cC0zIHJvdW5kZWQteGwgYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGhvdmVyOmJvcmRlci1icmFuZC01MDAgaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBncm91cCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsIGNoaWxkcmVuOiBbX2pzeChhY3Rpb24uaWNvbiwgeyBjbGFzc05hbWU6IGB3LTUgaC01IGZsZXgtc2hyaW5rLTAgJHthY3Rpb24uY29sb3J9YCB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiaGlkZGVuIG1kOmJsb2NrIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IGFjdGlvbi5sYWJlbCB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSB0ZXh0LWdyYXktNDAwIGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtNjAwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IGFjdGlvbi5kZXNjIH0pXSB9KV0gfSwgYWN0aW9uLmlkKSkpLCBpc0FpTG9hZGluZyAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAibXQtOCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IGJnLWJyYW5kLTUwLzUwIGRhcms6YmctYnJhbmQtOTAwLzEwIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1icmFuZC0xMDAgZGFyazpib3JkZXItYnJhbmQtOTAwLzIwIGFuaW1hdGUtcHVsc2UiLCBjaGlsZHJlbjogW19qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IHRleHQtYnJhbmQtNjAwIGFuaW1hdGUtc3BpbiBtYi0yIiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtYnJhbmQtNjAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgcHgtMiB0ZXh0LWNlbnRlciIsIGNoaWxkcmVuOiAiVGhpbmtpbmcuLi4iIH0pXSB9KSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBib3JkZXItdCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXRpZ2h0ZXIiLCBjaGlsZHJlbjogW19qc3goQ2hlY2ssIHsgY2xhc3NOYW1lOiAidy0zIGgtMyB0ZXh0LWdyZWVuLTUwMCIgfSksICJBdXRvLXNhdmVkIExvY2FsbHkiXSB9KSB9KV0gfSkpXSB9KSB9KSk7Cn07Cg==","@/components/Tools/IntervalTimer":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7CmltcG9ydCB7IFRpbWVyLCBQbGF5LCBQYXVzZSwgUm90YXRlQ2N3LCBUcmFzaDIsIER1bWJiZWxsLCBTYXZlLCBIaXN0b3J5LCBWb2x1bWUyLCBWb2x1bWVYLCBTcGFya2xlcywgTG9hZGVyMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCB7IGdlbmVyYXRlVGV4dCB9IGZyb20gJ0Avc2VydmljZXMvZ2VtaW5pU2VydmljZSc7CmV4cG9ydCBjb25zdCBJbnRlcnZhbFRpbWVyID0gKCkgPT4gewogICAgLy8gUGVyc2lzdGVuY2UKICAgIGNvbnN0IFtzYXZlZFJvdXRpbmVzLCBzZXRTYXZlZFJvdXRpbmVzXSA9IHVzZVN0YXRlKCgpID0+IHsKICAgICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3aXJlbmluamFfaGlpdF9yb3V0aW5lcycpOwogICAgICAgIHJldHVybiBzYXZlZCA/IEpTT04ucGFyc2Uoc2F2ZWQpIDogWwogICAgICAgICAgICB7IGlkOiAndGFiYXRhJywgbmFtZTogJ1N0YW5kYXJkIFRhYmF0YScsIHdhcm11cDogMTAsIHdvcms6IDIwLCByZXN0OiAxMCwgcm91bmRzOiA4LCBjb29sZG93bjogNjAsIHRvdGFsRHVyYXRpb246IDMxMCB9CiAgICAgICAgXTsKICAgIH0pOwogICAgLy8gQ29uZmlndXJhdGlvbgogICAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IHVzZVN0YXRlKHsKICAgICAgICBuYW1lOiAnTXkgUm91dGluZScsCiAgICAgICAgd2FybXVwOiAxMCwKICAgICAgICB3b3JrOiAzMCwKICAgICAgICByZXN0OiAxNSwKICAgICAgICByb3VuZHM6IDEwLAogICAgICAgIGNvb2xkb3duOiA2MAogICAgfSk7CiAgICAvLyBSdW5uaW5nIFN0YXRlCiAgICBjb25zdCBbaXNSdW5uaW5nLCBzZXRJc1J1bm5pbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgY29uc3QgW2N1cnJlbnRQaGFzZUluZGV4LCBzZXRDdXJyZW50UGhhc2VJbmRleF0gPSB1c2VTdGF0ZSgtMSk7IC8vIC0xID0gc2V0dXAsIDArID0gcnVubmluZwogICAgY29uc3QgW3RpbWVMZWZ0LCBzZXRUaW1lTGVmdF0gPSB1c2VTdGF0ZSgwKTsKICAgIGNvbnN0IFtzb3VuZEVuYWJsZWQsIHNldFNvdW5kRW5hYmxlZF0gPSB1c2VTdGF0ZSh0cnVlKTsKICAgIGNvbnN0IFtpc0FpR2VuZXJhdGluZywgc2V0SXNBaUdlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpOwogICAgLy8gUmVmcyBmb3IgVGltZXIKICAgIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpOwogICAgY29uc3QgbGFzdFRpY2tSZWYgPSB1c2VSZWYoMCk7CiAgICBjb25zdCBhdWRpb0N0eFJlZiA9IHVzZVJlZihudWxsKTsKICAgIC8vIENhbGN1bGF0ZWQgUm91dGluZQogICAgY29uc3QgZnVsbFNlcXVlbmNlID0gdXNlTWVtbygoKSA9PiB7CiAgICAgICAgY29uc3Qgc2VxID0gW107CiAgICAgICAgaWYgKGNvbmZpZy53YXJtdXAgPiAwKQogICAgICAgICAgICBzZXEucHVzaCh7IHR5cGU6ICd3YXJtdXAnLCBkdXJhdGlvbjogY29uZmlnLndhcm11cCwgbGFiZWw6ICdXYXJtIFVwJyB9KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5yb3VuZHM7IGkrKykgewogICAgICAgICAgICBzZXEucHVzaCh7IHR5cGU6ICd3b3JrJywgZHVyYXRpb246IGNvbmZpZy53b3JrLCBsYWJlbDogYFJvdW5kICR7aSArIDF9OiBXb3JrYCB9KTsKICAgICAgICAgICAgaWYgKGkgPCBjb25maWcucm91bmRzIC0gMSAmJiBjb25maWcucmVzdCA+IDApIHsKICAgICAgICAgICAgICAgIHNlcS5wdXNoKHsgdHlwZTogJ3Jlc3QnLCBkdXJhdGlvbjogY29uZmlnLnJlc3QsIGxhYmVsOiBgUm91bmQgJHtpICsgMX06IFJlc3RgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjb25maWcuY29vbGRvd24gPiAwKQogICAgICAgICAgICBzZXEucHVzaCh7IHR5cGU6ICdjb29sZG93bicsIGR1cmF0aW9uOiBjb25maWcuY29vbGRvd24sIGxhYmVsOiAnQ29vbCBEb3duJyB9KTsKICAgICAgICByZXR1cm4gc2VxOwogICAgfSwgW2NvbmZpZ10pOwogICAgY29uc3QgdG90YWxUaW1lID0gdXNlTWVtbygoKSA9PiBmdWxsU2VxdWVuY2UucmVkdWNlKChhY2MsIHApID0+IGFjYyArIHAuZHVyYXRpb24sIDApLCBbZnVsbFNlcXVlbmNlXSk7CiAgICAvLyBBdWRpbyBMb2dpYwogICAgY29uc3QgcGxheVNvdW5kID0gKHR5cGUpID0+IHsKICAgICAgICBpZiAoIXNvdW5kRW5hYmxlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICghYXVkaW9DdHhSZWYuY3VycmVudCkKICAgICAgICAgICAgYXVkaW9DdHhSZWYuY3VycmVudCA9IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgICAgIGNvbnN0IGN0eCA9IGF1ZGlvQ3R4UmVmLmN1cnJlbnQ7CiAgICAgICAgY29uc3Qgb3NjID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTsKICAgICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgICBvc2MuY29ubmVjdChnYWluKTsKICAgICAgICBnYWluLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTsKICAgICAgICBpZiAodHlwZSA9PT0gJ2JlZXAnKSB7CiAgICAgICAgICAgIG9zYy50eXBlID0gJ3NpbmUnOwogICAgICAgICAgICBvc2MuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDg4MCwgY3R4LmN1cnJlbnRUaW1lKTsKICAgICAgICAgICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMSwgY3R4LmN1cnJlbnRUaW1lKTsKICAgICAgICAgICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMSwgY3R4LmN1cnJlbnRUaW1lICsgMC4xKTsKICAgICAgICAgICAgb3NjLnN0YXJ0KCk7CiAgICAgICAgICAgIG9zYy5zdG9wKGN0eC5jdXJyZW50VGltZSArIDAuMSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBvc2MudHlwZSA9ICdzcXVhcmUnOwogICAgICAgICAgICBvc2MuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDQ0MCwgY3R4LmN1cnJlbnRUaW1lKTsKICAgICAgICAgICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMSwgY3R4LmN1cnJlbnRUaW1lKTsKICAgICAgICAgICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMSwgY3R4LmN1cnJlbnRUaW1lICsgMC41KTsKICAgICAgICAgICAgb3NjLnN0YXJ0KCk7CiAgICAgICAgICAgIG9zYy5zdG9wKGN0eC5jdXJyZW50VGltZSArIDAuNSk7CiAgICAgICAgfQogICAgfTsKICAgIC8vIFRpbWVyIFRpY2sKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgaWYgKGlzUnVubmluZyAmJiBjdXJyZW50UGhhc2VJbmRleCA+PSAwKSB7CiAgICAgICAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICAgICAgc2V0VGltZUxlZnQodCA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBQaGFzZSBjb21wbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SWR4ID0gY3VycmVudFBoYXNlSW5kZXggKyAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dElkeCA8IGZ1bGxTZXF1ZW5jZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlTb3VuZCgnYmVsbCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBoYXNlSW5kZXgobmV4dElkeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsbFNlcXVlbmNlW25leHRJZHhdLmR1cmF0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNSdW5uaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlTb3VuZCgnYmVsbCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gU291bmQgd2FybmluZ3MgZm9yIGxhc3QgMyBzZWNvbmRzCiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gNCAmJiB0ID4gMSkKICAgICAgICAgICAgICAgICAgICAgICAgcGxheVNvdW5kKCdiZWVwJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQgLSAxOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpCiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyUmVmLmN1cnJlbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKCkgPT4geyBpZiAodGltZXJSZWYuY3VycmVudCkKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lclJlZi5jdXJyZW50KTsgfTsKICAgIH0sIFtpc1J1bm5pbmcsIGN1cnJlbnRQaGFzZUluZGV4LCBmdWxsU2VxdWVuY2VdKTsKICAgIGNvbnN0IHN0YXJ0VGltZXIgPSAoKSA9PiB7CiAgICAgICAgaWYgKGN1cnJlbnRQaGFzZUluZGV4ID09PSAtMSkgewogICAgICAgICAgICBzZXRDdXJyZW50UGhhc2VJbmRleCgwKTsKICAgICAgICAgICAgc2V0VGltZUxlZnQoZnVsbFNlcXVlbmNlWzBdLmR1cmF0aW9uKTsKICAgICAgICB9CiAgICAgICAgc2V0SXNSdW5uaW5nKHRydWUpOwogICAgICAgIC8vIFJlc3VtZSBhdWRpbyBjb250ZXh0IGlmIHN1c3BlbmRlZAogICAgICAgIGlmIChhdWRpb0N0eFJlZi5jdXJyZW50Py5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpCiAgICAgICAgICAgIGF1ZGlvQ3R4UmVmLmN1cnJlbnQucmVzdW1lKCk7CiAgICB9OwogICAgY29uc3QgcGF1c2VUaW1lciA9ICgpID0+IHNldElzUnVubmluZyhmYWxzZSk7CiAgICBjb25zdCByZXNldFRpbWVyID0gKCkgPT4gewogICAgICAgIHNldElzUnVubmluZyhmYWxzZSk7CiAgICAgICAgc2V0Q3VycmVudFBoYXNlSW5kZXgoLTEpOwogICAgICAgIHNldFRpbWVMZWZ0KDApOwogICAgfTsKICAgIGNvbnN0IHNhdmVSb3V0aW5lID0gKCkgPT4gewogICAgICAgIGNvbnN0IG5ld1JvdXRpbmUgPSB7CiAgICAgICAgICAgIC4uLmNvbmZpZywKICAgICAgICAgICAgaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksCiAgICAgICAgICAgIHRvdGFsRHVyYXRpb246IHRvdGFsVGltZQogICAgICAgIH07CiAgICAgICAgY29uc3QgdXBkYXRlZCA9IFtuZXdSb3V0aW5lLCAuLi5zYXZlZFJvdXRpbmVzXTsKICAgICAgICBzZXRTYXZlZFJvdXRpbmVzKHVwZGF0ZWQpOwogICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3aXJlbmluamFfaGlpdF9yb3V0aW5lcycsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTsKICAgIH07CiAgICBjb25zdCBkZWxldGVSb3V0aW5lID0gKGlkLCBlKSA9PiB7CiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBjb25zdCB1cGRhdGVkID0gc2F2ZWRSb3V0aW5lcy5maWx0ZXIociA9PiByLmlkICE9PSBpZCk7CiAgICAgICAgc2V0U2F2ZWRSb3V0aW5lcyh1cGRhdGVkKTsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd2lyZW5pbmphX2hpaXRfcm91dGluZXMnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7CiAgICB9OwogICAgY29uc3QgbG9hZFJvdXRpbmUgPSAocikgPT4gewogICAgICAgIHNldENvbmZpZyh7CiAgICAgICAgICAgIG5hbWU6IHIubmFtZSwKICAgICAgICAgICAgd2FybXVwOiByLndhcm11cCwKICAgICAgICAgICAgd29yazogci53b3JrLAogICAgICAgICAgICByZXN0OiByLnJlc3QsCiAgICAgICAgICAgIHJvdW5kczogci5yb3VuZHMsCiAgICAgICAgICAgIGNvb2xkb3duOiByLmNvb2xkb3duCiAgICAgICAgfSk7CiAgICAgICAgcmVzZXRUaW1lcigpOwogICAgfTsKICAgIGNvbnN0IGdlbmVyYXRlQWlSb3V0aW5lID0gYXN5bmMgKCkgPT4gewogICAgICAgIHNldElzQWlHZW5lcmF0aW5nKHRydWUpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBDcmVhdGUgYSBoaWdoLWludGVuc2l0eSBpbnRlcnZhbCB0cmFpbmluZyAoSElJVCkgcm91dGluZS4gCiAgICAgIFJldHVybiBPTkxZIGEgSlNPTiBvYmplY3Qgd2l0aCB0aGVzZSBleGFjdCBrZXlzIGFuZCBpbnRlZ2VyIHZhbHVlczoKICAgICAgewogICAgICAgICJuYW1lIjogIkNyZWF0aXZlIE5hbWUiLAogICAgICAgICJ3YXJtdXAiOiBzZWNvbmRzLAogICAgICAgICJ3b3JrIjogc2Vjb25kcywKICAgICAgICAicmVzdCI6IHNlY29uZHMsCiAgICAgICAgInJvdW5kcyI6IG51bWJlciwKICAgICAgICAiY29vbGRvd24iOiBzZWNvbmRzCiAgICAgIH0KICAgICAgVGFyZ2V0IGEgMTUtbWludXRlIGhpZ2ggaW50ZW5zaXR5IHNlc3Npb24uIERvIG5vdCB1c2UgbWFya2Rvd24uYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKSk7CiAgICAgICAgICAgIHNldENvbmZpZyhkYXRhKTsKICAgICAgICAgICAgcmVzZXRUaW1lcigpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBhbGVydCgiRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHJvdXRpbmUuIFBsZWFzZSB0cnkgYWdhaW4uIik7CiAgICAgICAgfQogICAgICAgIGZpbmFsbHkgewogICAgICAgICAgICBzZXRJc0FpR2VuZXJhdGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGN1cnJlbnRQaGFzZSA9IGN1cnJlbnRQaGFzZUluZGV4ID49IDAgPyBmdWxsU2VxdWVuY2VbY3VycmVudFBoYXNlSW5kZXhdIDogbnVsbDsKICAgIC8vIFZpc3VhbCBUaGVtZSBtYXBwaW5nCiAgICBjb25zdCBnZXRUaGVtZUNvbG9yID0gKCkgPT4gewogICAgICAgIGlmICghY3VycmVudFBoYXNlKQogICAgICAgICAgICByZXR1cm4gJ2JnLXdoaXRlIGRhcms6YmctZGFyay05MDAnOwogICAgICAgIHN3aXRjaCAoY3VycmVudFBoYXNlLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnd2FybXVwJzogcmV0dXJuICdiZy1ibHVlLTUwMCc7CiAgICAgICAgICAgIGNhc2UgJ3dvcmsnOiByZXR1cm4gJ2JnLWVtZXJhbGQtNTAwJzsKICAgICAgICAgICAgY2FzZSAncmVzdCc6IHJldHVybiAnYmctYW1iZXItNTAwJzsKICAgICAgICAgICAgY2FzZSAnY29vbGRvd24nOiByZXR1cm4gJ2JnLWluZGlnby02MDAnOwogICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJ2JnLWJyYW5kLTUwMCc7CiAgICAgICAgfQogICAgfTsKICAgIGNvbnN0IGZvcm1hdFRpbWUgPSAocykgPT4gewogICAgICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHMgLyA2MCk7CiAgICAgICAgY29uc3Qgc2VjcyA9IHMgJSA2MDsKICAgICAgICByZXR1cm4gYCR7bWluc306JHtzZWNzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gOwogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiTmluamEgSElJVCBUaW1lciIsIGRlc2NyaXB0aW9uOiAiUHJvZmVzc2lvbmFsIGludGVydmFsIHRpbWVyIGZvciBISUlULCBUYWJhdGEsIGFuZCBDaXJjdWl0IHRyYWluaW5nLiBEZXNpZ25lZCBmb3IgZm9jdXMgYW5kIHBlcmZvcm1hbmNlLiIsIGljb246IFRpbWVyLCBjYXRlZ29yeTogIlRpbWUiLCBjaGlsZHJlbjogX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LWNvbCBsZzpmbGV4LXJvdyBtaW4taC1bNzAwcHhdIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCBvdmVyZmxvdy1oaWRkZW4iLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInctZnVsbCBsZzp3LTgwIGJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyLXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstODAwIGZsZXggZmxleC1jb2wiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBib3JkZXItYiBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAiLCBjaGlsZHJlbjogW19qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGdlbmVyYXRlQWlSb3V0aW5lLCBkaXNhYmxlZDogaXNBaUdlbmVyYXRpbmcsIGNsYXNzTmFtZTogInctZnVsbCBtYi00IHB5LTMgYmctZ3JhZGllbnQtdG8tciBmcm9tLXB1cnBsZS02MDAgdG8tYnJhbmQtNjAwIGhvdmVyOmZyb20tcHVycGxlLTcwMCBob3Zlcjp0by1icmFuZC03MDAgdGV4dC13aGl0ZSByb3VuZGVkLXhsIGZvbnQtYm9sZCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHNoYWRvdy1sZyBzaGFkb3ctYnJhbmQtNTAwLzIwIHRyYW5zaXRpb24tYWxsIGFjdGl2ZTpzY2FsZS05NSBkaXNhYmxlZDpvcGFjaXR5LTUwIiwgY2hpbGRyZW46IFtpc0FpR2VuZXJhdGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IGFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KFNwYXJrbGVzLCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pLCAiQUkgUm91dGluZSBHZW5lcmF0b3IiXSB9KSwgX2pzeCgiaDMiLCB7IGNsYXNzTmFtZTogInRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtYi00IiwgY2hpbGRyZW46ICJDdXJyZW50IFJvdXRpbmUiIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJXYXJtIFVwIChzZWMpIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogY29uZmlnLndhcm11cCwgb25DaGFuZ2U6IGUgPT4gc2V0Q29uZmlnKHsgLi4uY29uZmlnLCB3YXJtdXA6IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC1sZyB0ZXh0LXNtIiB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJXb3JrIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogY29uZmlnLndvcmssIG9uQ2hhbmdlOiBlID0+IHNldENvbmZpZyh7IC4uLmNvbmZpZywgd29yazogTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB9KSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMiBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLWxnIHRleHQtc20iIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIlJlc3QiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBjb25maWcucmVzdCwgb25DaGFuZ2U6IGUgPT4gc2V0Q29uZmlnKHsgLi4uY29uZmlnLCByZXN0OiBOdW1iZXIoZS50YXJnZXQudmFsdWUpIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtbGcgdGV4dC1zbSIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMyIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIlJvdW5kcyIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IGNvbmZpZy5yb3VuZHMsIG9uQ2hhbmdlOiBlID0+IHNldENvbmZpZyh7IC4uLmNvbmZpZywgcm91bmRzOiBOdW1iZXIoZS50YXJnZXQudmFsdWUpIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtbGcgdGV4dC1zbSIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiQ29vbCBEb3duIiB9KSwgX2pzeCgiaW5wdXQiLCB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogY29uZmlnLmNvb2xkb3duLCBvbkNoYW5nZTogZSA9PiBzZXRDb25maWcoeyAuLi5jb25maWcsIGNvb2xkb3duOiBOdW1iZXIoZS50YXJnZXQudmFsdWUpIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQtbGcgdGV4dC1zbSIgfSldIH0pXSB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogc2F2ZVJvdXRpbmUsIGNsYXNzTmFtZTogInctZnVsbCBweS0yIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWJyYW5kLTUwMCBob3Zlcjpib3JkZXItYnJhbmQtNTAwIHRyYW5zaXRpb24tYWxsIHRleHQteHMgZm9udC1ib2xkIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KFNhdmUsIHsgY2xhc3NOYW1lOiAidy0zIGgtMyIgfSksICIgU2F2ZSB0byBMaWJyYXJ5Il0gfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIG92ZXJmbG93LXktYXV0byBjdXN0b20tc2Nyb2xsYmFyIHAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItNCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChIaXN0b3J5LCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pLCAiIFNhdmVkIExpYnJhcnkiXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTIiLCBjaGlsZHJlbjogc2F2ZWRSb3V0aW5lcy5tYXAociA9PiAoX2pzeHMoImRpdiIsIHsgb25DbGljazogKCkgPT4gbG9hZFJvdXRpbmUociksIGNsYXNzTmFtZTogInAtMyBiZy1ncmF5LTUwIGRhcms6YmctZGFyay04MDAgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGN1cnNvci1wb2ludGVyIGdyb3VwIGhvdmVyOmJvcmRlci1icmFuZC01MDAgdHJhbnNpdGlvbi1hbGwiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IG1iLTEiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRydW5jYXRlIHByLTQiLCBjaGlsZHJlbjogci5uYW1lIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6IChlKSA9PiBkZWxldGVSb3V0aW5lKHIuaWQsIGUpLCBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktMzAwIGhvdmVyOnRleHQtcmVkLTUwMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IiwgY2hpbGRyZW46IF9qc3goVHJhc2gyLCB7IGNsYXNzTmFtZTogInctMy41IGgtMy41IiB9KSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIHRleHQtWzEwcHhdIHRleHQtZ3JheS00MDAgZm9udC1ib2xkIHVwcGVyY2FzZSIsIGNoaWxkcmVuOiBbX2pzeHMoInNwYW4iLCB7IGNoaWxkcmVuOiBbci5yb3VuZHMsICIgUm91bmRzIl0gfSksIF9qc3goInNwYW4iLCB7IGNoaWxkcmVuOiBmb3JtYXRUaW1lKHIudG90YWxEdXJhdGlvbikgfSldIH0pXSB9LCByLmlkKSkpIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogYGZsZXgtMSBmbGV4IGZsZXgtY29sIHJlbGF0aXZlIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTcwMCAke2dldFRoZW1lQ29sb3IoKX1gLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIHAtNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgdGV4dC13aGl0ZS84MCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy10aWdodGVyIiwgY2hpbGRyZW46IFtfanN4KER1bWJiZWxsLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCAiIE5pbmphIEhJSVQiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZmxleC1jb2wgaXRlbXMtZW5kIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdXBwZXJjYXNlIG9wYWNpdHktNjAiLCBjaGlsZHJlbjogIlRvdGFsIFRpbWUgUmVtYWluaW5nIiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC14bCBmb250LW1vbm8gZm9udC1ib2xkIiwgY2hpbGRyZW46IGZvcm1hdFRpbWUoaXNSdW5uaW5nID8gKHRvdGFsVGltZSAtIGZ1bGxTZXF1ZW5jZS5zbGljZSgwLCBjdXJyZW50UGhhc2VJbmRleCkucmVkdWNlKChhLCBwKSA9PiBhICsgcC5kdXJhdGlvbiwgMCkgLSAoZnVsbFNlcXVlbmNlW2N1cnJlbnRQaGFzZUluZGV4XS5kdXJhdGlvbiAtIHRpbWVMZWZ0KSkgOiB0b3RhbFRpbWUpIH0pXSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRTb3VuZEVuYWJsZWQoIXNvdW5kRW5hYmxlZCksIGNsYXNzTmFtZTogInAtMiByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTAgaG92ZXI6Ymctd2hpdGUvMjAgdHJhbnNpdGlvbi1jb2xvcnMiLCBjaGlsZHJlbjogc291bmRFbmFibGVkID8gX2pzeChWb2x1bWUyLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIDogX2pzeChWb2x1bWVYLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pIH0pXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtOCIsIGNoaWxkcmVuOiBjdXJyZW50UGhhc2VJbmRleCA9PT0gLTEgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1jZW50ZXIgYW5pbWF0ZS1pbiBmYWRlLWluIHpvb20taW4gZHVyYXRpb24tNTAwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInctMzIgaC0zMiBiZy13aGl0ZS8xMCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXgtYXV0byBtYi04IiwgY2hpbGRyZW46IF9qc3goUGxheSwgeyBjbGFzc05hbWU6ICJ3LTE2IGgtMTYgdGV4dC13aGl0ZSBtbC0yIiB9KSB9KSwgX2pzeCgiaDIiLCB7IGNsYXNzTmFtZTogInRleHQtNHhsIG1kOnRleHQtNnhsIGZvbnQtYmxhY2sgdGV4dC13aGl0ZSB0cmFja2luZy10aWdodGVyIG1iLTQiLCBjaGlsZHJlbjogIlJlYWR5IHRvIFB1c2g/IiB9KSwgX2pzeCgicCIsIHsgY2xhc3NOYW1lOiAidGV4dC13aGl0ZS82MCBmb250LW1lZGl1bSBtYXgtdy1zbSBteC1hdXRvIG1iLTgiLCBjaGlsZHJlbjogIkNvbmZpZ3VyZSB5b3VyIHJvdXRpbmUgaW4gdGhlIHNpZGViYXIgb3IgcGljayBhbiBBSSBnZW5lcmF0ZWQgY2hhbGxlbmdlIHRvIGJlZ2luLiIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogc3RhcnRUaW1lciwgY2xhc3NOYW1lOiAicHgtMTIgcHktNSBiZy13aGl0ZSB0ZXh0LWRhcmstOTUwIGZvbnQtYmxhY2sgcm91bmRlZC1mdWxsIHRleHQteGwgc2hhZG93LTJ4bCBob3ZlcjpzY2FsZS0xMDUgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb24tYWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIG14LWF1dG8iLCBjaGlsZHJlbjogIlN0YXJ0IFNlc3Npb24iIH0pXSB9KSkgOiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidy1mdWxsIG1heC13LTR4bCB0ZXh0LWNlbnRlciBmbGV4IGZsZXgtY29sIGgtZnVsbCBqdXN0aWZ5LWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJtYi00IiwgY2hpbGRyZW46IF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogImlubGluZS1ibG9jayBweC00IHB5LTEgcm91bmRlZC1mdWxsIGJnLWJsYWNrLzIwIHRleHQtd2hpdGUgdGV4dC1zbSBmb250LWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIsIGNoaWxkcmVuOiBjdXJyZW50UGhhc2U/LmxhYmVsIH0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzE4MHB4XSBtZDp0ZXh0LVsyODBweF0gZm9udC1ibGFjayB0ZXh0LXdoaXRlIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodGVyIHRhYnVsYXItbnVtcyBkcm9wLXNoYWRvdy0yeGwiLCBjaGlsZHJlbjogdGltZUxlZnQgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTggZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtNiIsIGNoaWxkcmVuOiBbX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiBpc1J1bm5pbmcgPyBwYXVzZVRpbWVyIDogc3RhcnRUaW1lciwgY2xhc3NOYW1lOiAidy0yMCBoLTIwIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8yMCBob3ZlcjpiZy13aGl0ZS8zMCBiYWNrZHJvcC1ibHVyLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1hbGwgaG92ZXI6c2NhbGUtMTEwIGFjdGl2ZTpzY2FsZS05MCIsIGNoaWxkcmVuOiBpc1J1bm5pbmcgPyBfanN4KFBhdXNlLCB7IGNsYXNzTmFtZTogInctOCBoLTggZmlsbC1jdXJyZW50IiB9KSA6IF9qc3goUGxheSwgeyBjbGFzc05hbWU6ICJ3LTggaC04IGZpbGwtY3VycmVudCBtbC0xIiB9KSB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiByZXNldFRpbWVyLCBjbGFzc05hbWU6ICJ3LTIwIGgtMjAgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzIwIGhvdmVyOmJnLXdoaXRlLzMwIGJhY2tkcm9wLWJsdXItbWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWFsbCBob3ZlcjpzY2FsZS0xMTAgYWN0aXZlOnNjYWxlLTkwIiwgY2hpbGRyZW46IF9qc3goUm90YXRlQ2N3LCB7IGNsYXNzTmFtZTogInctOCBoLTgiIH0pIH0pXSB9KV0gfSkpIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImgtMiBiZy1ibGFjay8xMCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIGZsZXgiLCBjaGlsZHJlbjogZnVsbFNlcXVlbmNlLm1hcCgocCwgaSkgPT4gKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiBgaC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCAke2kgPCBjdXJyZW50UGhhc2VJbmRleCA/ICdvcGFjaXR5LTEwMCcgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09PSBjdXJyZW50UGhhc2VJbmRleCA/ICdvcGFjaXR5LTEwMCBhbmltYXRlLXB1bHNlJyA6ICdvcGFjaXR5LTIwJ30gJHtwLnR5cGUgPT09ICd3b3JrJyA/ICdiZy13aGl0ZScgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnR5cGUgPT09ICdyZXN0JyA/ICdiZy1hbWJlci0zMDAnIDogJ2JnLXdoaXRlLzUwJ31gLCBzdHlsZTogeyB3aWR0aDogYCR7KHAuZHVyYXRpb24gLyB0b3RhbFRpbWUpICogMTAwfSVgIH0gfSwgaSkpKSB9KV0gfSldIH0pIH0pKTsKfTsK","@/components/Tools/FitnessTools":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBEdW1iYmVsbCwgU3BhcmtsZXMsIFNjYWxlLCBVdGVuc2lscywgTG9hZGVyMiwgSW5mbywgVHJvcGh5LCBUaW1lciwgTGF5b3V0TGlzdCwgQ29weSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCB7IGdlbmVyYXRlVGV4dCB9IGZyb20gJ0Avc2VydmljZXMvZ2VtaW5pU2VydmljZSc7Ci8vIC0tLSBNYWNyb251dHJpZW50ICYgVERFRSBDYWxjdWxhdG9yIC0tLQpleHBvcnQgY29uc3QgTWFjcm9DYWxjdWxhdG9yID0gKCkgPT4gewogICAgY29uc3QgW21ldHJpY3MsIHNldE1ldHJpY3NdID0gdXNlU3RhdGUoKCkgPT4gewogICAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dpcmVuaW5qYV9maXRuZXNzX21ldHJpY3MnKTsKICAgICAgICByZXR1cm4gc2F2ZWQgPyBKU09OLnBhcnNlKHNhdmVkKSA6IHsKICAgICAgICAgICAgZ2VuZGVyOiAnbWFsZScsCiAgICAgICAgICAgIHdlaWdodDogODAsCiAgICAgICAgICAgIGhlaWdodDogMTgwLAogICAgICAgICAgICBhZ2U6IDI1LAogICAgICAgICAgICBhY3Rpdml0eTogJzEuMzc1JywgLy8gTGlnaHRseSBBY3RpdmUKICAgICAgICAgICAgZ29hbDogJ21haW50YWluJwogICAgICAgIH07CiAgICB9KTsKICAgIGNvbnN0IFtyZXN1bHQsIHNldFJlc3VsdF0gPSB1c2VTdGF0ZShudWxsKTsKICAgIHVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3dpcmVuaW5qYV9maXRuZXNzX21ldHJpY3MnLCBKU09OLnN0cmluZ2lmeShtZXRyaWNzKSk7CiAgICAgICAgY2FsY3VsYXRlTWFjcm9zKCk7CiAgICB9LCBbbWV0cmljc10pOwogICAgY29uc3QgY2FsY3VsYXRlTWFjcm9zID0gKCkgPT4gewogICAgICAgIC8vIE1pZmZsaW4tU3QgSmVvciBFcXVhdGlvbgogICAgICAgIGxldCBibXIgPSAoMTAgKiBtZXRyaWNzLndlaWdodCkgKyAoNi4yNSAqIG1ldHJpY3MuaGVpZ2h0KSAtICg1ICogbWV0cmljcy5hZ2UpOwogICAgICAgIGJtciA9IG1ldHJpY3MuZ2VuZGVyID09PSAnbWFsZScgPyBibXIgKyA1IDogYm1yIC0gMTYxOwogICAgICAgIGNvbnN0IHRkZWUgPSBNYXRoLnJvdW5kKGJtciAqIHBhcnNlRmxvYXQobWV0cmljcy5hY3Rpdml0eSkpOwogICAgICAgIGxldCB0YXJnZXRDYWxzID0gdGRlZTsKICAgICAgICBpZiAobWV0cmljcy5nb2FsID09PSAnbG9zZScpCiAgICAgICAgICAgIHRhcmdldENhbHMgLT0gNTAwOwogICAgICAgIGlmIChtZXRyaWNzLmdvYWwgPT09ICdnYWluJykKICAgICAgICAgICAgdGFyZ2V0Q2FscyArPSA1MDA7CiAgICAgICAgLy8gU3BsaXQ6IFByb3RlaW4gMzAlLCBGYXQgMjUlLCBDYXJicyA0NSUgKEdlbmVyYWwgaGVhbHRoeSBzcGxpdCkKICAgICAgICBjb25zdCBwcm90ZWluID0gTWF0aC5yb3VuZCgodGFyZ2V0Q2FscyAqIDAuMykgLyA0KTsKICAgICAgICBjb25zdCBmYXQgPSBNYXRoLnJvdW5kKCh0YXJnZXRDYWxzICogMC4yNSkgLyA5KTsKICAgICAgICBjb25zdCBjYXJicyA9IE1hdGgucm91bmQoKHRhcmdldENhbHMgKiAwLjQ1KSAvIDQpOwogICAgICAgIHNldFJlc3VsdCh7IHRkZWUsIHRhcmdldENhbHMsIHByb3RlaW4sIGZhdCwgY2FyYnMgfSk7CiAgICB9OwogICAgcmV0dXJuIChfanN4KFRvb2xMYXlvdXQsIHsgdGl0bGU6ICJNYWNybyAmIFRERUUgQ2FsY3VsYXRvciIsIGRlc2NyaXB0aW9uOiAiQ2FsY3VsYXRlIHlvdXIgVG90YWwgRGFpbHkgRW5lcmd5IEV4cGVuZGl0dXJlIGFuZCBnZXQgcGVyc29uYWxpemVkIG1hY3JvbnV0cmllbnQgdGFyZ2V0cy4iLCBpY29uOiBVdGVuc2lscywgY2F0ZWdvcnk6ICJGaXRuZXNzIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBtYXgtdy01eGwgbXgtYXV0byBncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCBwLTYgc2hhZG93LXNtIHNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItNCIsIGNoaWxkcmVuOiBbX2pzeChTY2FsZSwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIiBQZXJzb25hbCBNZXRyaWNzIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIkdlbmRlciIgfSksIF9qc3hzKCJzZWxlY3QiLCB7IHZhbHVlOiBtZXRyaWNzLmdlbmRlciwgb25DaGFuZ2U6IGUgPT4gc2V0TWV0cmljcyh7IC4uLm1ldHJpY3MsIGdlbmRlcjogZS50YXJnZXQudmFsdWUgfSksIGNsYXNzTmFtZTogInctZnVsbCBwLTIuNSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIHRleHQtc20iLCBjaGlsZHJlbjogW19qc3goIm9wdGlvbiIsIHsgdmFsdWU6ICJtYWxlIiwgY2hpbGRyZW46ICJNYWxlIiB9KSwgX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogImZlbWFsZSIsIGNoaWxkcmVuOiAiRmVtYWxlIiB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJBZ2UiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBtZXRyaWNzLmFnZSwgb25DaGFuZ2U6IGUgPT4gc2V0TWV0cmljcyh7IC4uLm1ldHJpY3MsIGFnZTogTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB9KSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiV2VpZ2h0IChrZykiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiBtZXRyaWNzLndlaWdodCwgb25DaGFuZ2U6IGUgPT4gc2V0TWV0cmljcyh7IC4uLm1ldHJpY3MsIHdlaWdodDogTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB9KSwgY2xhc3NOYW1lOiAidy1mdWxsIHAtMi41IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJIZWlnaHQgKGNtKSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IG1ldHJpY3MuaGVpZ2h0LCBvbkNoYW5nZTogZSA9PiBzZXRNZXRyaWNzKHsgLi4ubWV0cmljcywgaGVpZ2h0OiBOdW1iZXIoZS50YXJnZXQudmFsdWUpIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIiB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJBY3Rpdml0eSBMZXZlbCIgfSksIF9qc3hzKCJzZWxlY3QiLCB7IHZhbHVlOiBtZXRyaWNzLmFjdGl2aXR5LCBvbkNoYW5nZTogZSA9PiBzZXRNZXRyaWNzKHsgLi4ubWV0cmljcywgYWN0aXZpdHk6IGUudGFyZ2V0LnZhbHVlIH0pLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCB0ZXh0LXNtIiwgY2hpbGRyZW46IFtfanN4KCJvcHRpb24iLCB7IHZhbHVlOiAiMS4yIiwgY2hpbGRyZW46ICJTZWRlbnRhcnkgKE9mZmljZSBqb2IpIiB9KSwgX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogIjEuMzc1IiwgY2hpbGRyZW46ICJMaWdodGx5IEFjdGl2ZSAoMS0yIGRheXMvd2VlaykiIH0pLCBfanN4KCJvcHRpb24iLCB7IHZhbHVlOiAiMS41NSIsIGNoaWxkcmVuOiAiTW9kZXJhdGVseSBBY3RpdmUgKDMtNSBkYXlzL3dlZWspIiB9KSwgX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogIjEuNzI1IiwgY2hpbGRyZW46ICJWZXJ5IEFjdGl2ZSAoRGFpbHkgZXhlcmNpc2UpIiB9KSwgX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogIjEuOSIsIGNoaWxkcmVuOiAiQXRobGV0ZSAoUHJvZmVzc2lvbmFsL1BoeXNpY2FsIGxhYm9yKSIgfSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiWW91ciBHb2FsIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0zIGdhcC0yIiwgY2hpbGRyZW46IFsnbG9zZScsICdtYWludGFpbicsICdnYWluJ10ubWFwKGcgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0TWV0cmljcyh7IC4uLm1ldHJpY3MsIGdvYWw6IGcgfSksIGNsYXNzTmFtZTogYHAtMiByb3VuZGVkLWxnIHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFuc2l0aW9uLWFsbCAke21ldHJpY3MuZ29hbCA9PT0gZyA/ICdiZy1icmFuZC02MDAgdGV4dC13aGl0ZSBzaGFkb3ctbWQnIDogJ2JnLWdyYXktMTAwIGRhcms6YmctZGFyay04MDAgdGV4dC1ncmF5LTUwMCd9YCwgY2hpbGRyZW46IGcgPT09ICdsb3NlJyA/ICdDdXQnIDogZyA9PT0gJ2dhaW4nID8gJ0J1bGsnIDogJ01haW50YWluJyB9LCBnKSkpIH0pXSB9KV0gfSkgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAic3BhY2UteS02IiwgY2hpbGRyZW46IHJlc3VsdCAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC04IHNoYWRvdy1zbSB0ZXh0LWNlbnRlciIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItMiIsIGNoaWxkcmVuOiAiRGFpbHkgVGFyZ2V0IENhbG9yaWVzIiB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LTZ4bCBmb250LWJsYWNrIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIHRyYWNraW5nLXRpZ2h0ZXIgbWItMiIsIGNoaWxkcmVuOiByZXN1bHQudGFyZ2V0Q2FscyB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNDAwIG1iLTgiLCBjaGlsZHJlbjogWyJNYWludGVuYW5jZSAoVERFRSk6ICIsIHJlc3VsdC50ZGVlLCAiIGtjYWwiXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMyBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC00IGJnLWJsdWUtNTAgZGFyazpiZy1ibHVlLTkwMC8yMCByb3VuZGVkLXhsIGJvcmRlciBib3JkZXItYmx1ZS0xMDAgZGFyazpib3JkZXItYmx1ZS05MDAvMzAiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtYmx1ZS02MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIlByb3RlaW4iIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhsIGZvbnQtYmxhY2sgdGV4dC1ibHVlLTkwMCBkYXJrOnRleHQtYmx1ZS0xMDAiLCBjaGlsZHJlbjogW3Jlc3VsdC5wcm90ZWluLCAiZyJdIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC00IGJnLW9yYW5nZS01MCBkYXJrOmJnLW9yYW5nZS05MDAvMjAgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLW9yYW5nZS0xMDAgZGFyazpib3JkZXItb3JhbmdlLTkwMC8zMCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1vcmFuZ2UtNjAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJDYXJicyIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQteGwgZm9udC1ibGFjayB0ZXh0LW9yYW5nZS05MDAgZGFyazp0ZXh0LW9yYW5nZS0xMDAiLCBjaGlsZHJlbjogW3Jlc3VsdC5jYXJicywgImciXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNCBiZy1lbWVyYWxkLTUwIGRhcms6YmctZW1lcmFsZC05MDAvMjAgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWVtZXJhbGQtMTAwIGRhcms6Ym9yZGVyLWVtZXJhbGQtOTAwLzMwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWVtZXJhbGQtNjAwIHVwcGVyY2FzZSBtYi0xIiwgY2hpbGRyZW46ICJGYXRzIiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidGV4dC14bCBmb250LWJsYWNrIHRleHQtZW1lcmFsZC05MDAgZGFyazp0ZXh0LWVtZXJhbGQtMTAwIiwgY2hpbGRyZW46IFtyZXN1bHQuZmF0LCAiZyJdIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTggcHQtNiBib3JkZXItdCBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgdGV4dC1sZWZ0IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSBtYi00IiwgY2hpbGRyZW46IFtfanN4KEluZm8sIHsgY2xhc3NOYW1lOiAidy0zIGgtMyIgfSksICIgUmVjb21tZW5kZWQgRGFpbHkgSW50YWtlIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMyIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gdGV4dC1zbSIsIGNoaWxkcmVuOiBbX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1ncmF5LTUwMCIsIGNoaWxkcmVuOiAiV2F0ZXIiIH0pLCBfanN4cygic3BhbiIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IFtNYXRoLnJvdW5kKG1ldHJpY3Mud2VpZ2h0ICogMC4wMzUgKiAxMCkgLyAxMCwgIiBMaXRlcnMiXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgganVzdGlmeS1iZXR3ZWVuIHRleHQtc20iLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtZ3JheS01MDAiLCBjaGlsZHJlbjogIkZpYmVyIiB9KSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46ICJ+MzBnIiB9KV0gfSldIH0pXSB9KV0gfSkpIH0pXSB9KSB9KSk7Cn07Ci8vIC0tLSBBSSBXT0QgR2VuZXJhdG9yIC0tLQpleHBvcnQgY29uc3QgQWlXb2RHZW5lcmF0b3IgPSAoKSA9PiB7CiAgICBjb25zdCBbZXF1aXBtZW50LCBzZXRFcXVpcG1lbnRdID0gdXNlU3RhdGUoWydCb2R5d2VpZ2h0J10pOwogICAgY29uc3QgW2R1cmF0aW9uLCBzZXREdXJhdGlvbl0gPSB1c2VTdGF0ZSgyMCk7CiAgICBjb25zdCBbZm9jdXMsIHNldEZvY3VzXSA9IHVzZVN0YXRlKCdGdWxsIEJvZHknKTsKICAgIGNvbnN0IFt3b3Jrb3V0LCBzZXRXb3Jrb3V0XSA9IHVzZVN0YXRlKG51bGwpOwogICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IEVRVUlQUyA9IFsnQm9keXdlaWdodCcsICdEdW1iYmVsbHMnLCAnS2V0dGxlYmVsbCcsICdCYXJiZWxsJywgJ1B1bGwtdXAgQmFyJywgJ1Jlc2lzdGFuY2UgQmFuZHMnXTsKICAgIGNvbnN0IEZPQ1VTRVMgPSBbJ0Z1bGwgQm9keScsICdMb3dlciBCb2R5JywgJ1VwcGVyIEJvZHknLCAnQ29yZScsICdDYXJkaW8gLyBISUlUJ107CiAgICBjb25zdCB0b2dnbGVFcXVpcCA9IChlKSA9PiB7CiAgICAgICAgc2V0RXF1aXBtZW50KHByZXYgPT4gcHJldi5pbmNsdWRlcyhlKSA/IHByZXYuZmlsdGVyKHggPT4geCAhPT0gZSkgOiBbLi4ucHJldiwgZV0pOwogICAgfTsKICAgIGNvbnN0IGhhbmRsZUdlbmVyYXRlID0gYXN5bmMgKCkgPT4gewogICAgICAgIHNldElzTG9hZGluZyh0cnVlKTsKICAgICAgICBzZXRXb3Jrb3V0KG51bGwpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBDcmVhdGUgYSBoaWdoLXF1YWxpdHkgZml0bmVzcyB3b3Jrb3V0IChXT0QpIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogICAgICAtIEVxdWlwbWVudDogJHtlcXVpcG1lbnQuam9pbignLCAnKX0KICAgICAgLSBEdXJhdGlvbjogJHtkdXJhdGlvbn0gbWludXRlcwogICAgICAtIEZvY3VzOiAke2ZvY3VzfQogICAgICAKICAgICAgRm9ybWF0IHRoZSBvdXRwdXQgaW4gY2xlYW4gTWFya2Rvd24gd2l0aDoKICAgICAgMS4gQSBjcmVhdGl2ZSB3b3Jrb3V0IG5hbWUuCiAgICAgIDIuIFdhcm0tdXAgKDMtNSBtaW5zKS4KICAgICAgMy4gTWFpbiBDaXJjdWl0IChFeGVyY2lzZXMsIFNldHMsIFJlcHMvVGltZSkuCiAgICAgIDQuIENvb2wtZG93biAvIFN0cmV0Y2guCiAgICAgIAogICAgICBLZWVwIGRlc2NyaXB0aW9ucyBwdW5jaHkgYW5kIHByb2Zlc3Npb25hbC5gOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgc2V0V29ya291dChyZXN1bHQpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICBhbGVydCgiRmFpbGVkIHRvIGdlbmVyYXRlIHdvcmtvdXQuIENoZWNrIHlvdXIgY29ubmVjdGlvbi4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiQUkgV29ya291dCBHZW5lcmF0b3IiLCBkZXNjcmlwdGlvbjogIlRlbGwgdXMgd2hhdCBlcXVpcG1lbnQgeW91IGhhdmUgYW5kIGhvdyBtdWNoIHRpbWUgeW91J3ZlIGdvdC4gTGV0IEFJIGJ1aWxkIHRoZSBwZXJmZWN0IHJvdXRpbmUuIiwgaWNvbjogU3BhcmtsZXMsIGNhdGVnb3J5OiAiRml0bmVzcyIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwLTYgbWF4LXctNnhsIG14LWF1dG8gZ3JpZCBsZzpncmlkLWNvbHMtNSBnYXAtOCIsIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJsZzpjb2wtc3Bhbi0yIHNwYWNlLXktNiIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJiZy13aGl0ZSBkYXJrOmJnLWRhcmstOTAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCBwLTYgc2hhZG93LXNtIiwgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMyIsIGNoaWxkcmVuOiAiRXF1aXBtZW50IEF2YWlsYWJsZSIgfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBmbGV4LXdyYXAgZ2FwLTIgbWItNiIsIGNoaWxkcmVuOiBFUVVJUFMubWFwKGUgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gdG9nZ2xlRXF1aXAoZSksIGNsYXNzTmFtZTogYHB4LTMgcHktMS41IHJvdW5kZWQtbGcgdGV4dC14cyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBib3JkZXIgJHtlcXVpcG1lbnQuaW5jbHVkZXMoZSkgPyAnYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgYm9yZGVyLWJyYW5kLTYwMCcgOiAnYmctd2hpdGUgZGFyazpiZy1kYXJrLTgwMCB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTQwMCBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAnfWAsIGNoaWxkcmVuOiBlIH0sIGUpKSkgfSksIF9qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNTAwIHVwcGVyY2FzZSBtYi0zIiwgY2hpbGRyZW46ICJUYXJnZXQgRm9jdXMiIH0pLCBfanN4KCJzZWxlY3QiLCB7IHZhbHVlOiBmb2N1cywgb25DaGFuZ2U6IGUgPT4gc2V0Rm9jdXMoZS50YXJnZXQudmFsdWUpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgdGV4dC1zbSBtYi02IiwgY2hpbGRyZW46IEZPQ1VTRVMubWFwKGYgPT4gX2pzeCgib3B0aW9uIiwgeyB2YWx1ZTogZiwgY2hpbGRyZW46IGYgfSwgZikpIH0pLCBfanN4cygibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTMiLCBjaGlsZHJlbjogWyJEdXJhdGlvbjogIiwgZHVyYXRpb24sICIgbWlucyJdIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogInJhbmdlIiwgbWluOiAiNSIsIG1heDogIjYwIiwgc3RlcDogIjUiLCB2YWx1ZTogZHVyYXRpb24sIG9uQ2hhbmdlOiBlID0+IHNldER1cmF0aW9uKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgYWNjZW50LWJyYW5kLTYwMCBtYi04IiB9KSwgX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlR2VuZXJhdGUsIGRpc2FibGVkOiBpc0xvYWRpbmcgfHwgZXF1aXBtZW50Lmxlbmd0aCA9PT0gMCwgY2xhc3NOYW1lOiAidy1mdWxsIHB5LTQgYmctYnJhbmQtNjAwIGhvdmVyOmJnLWJyYW5kLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCByb3VuZGVkLXhsIHNoYWRvdy1sZyBzaGFkb3ctYnJhbmQtNjAwLzIwIGRpc2FibGVkOm9wYWNpdHktNTAgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW2lzTG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IGFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KER1bWJiZWxsLCB7IGNsYXNzTmFtZTogInctNSBoLTUiIH0pLCAiR2VuZXJhdGUgV09EIl0gfSldIH0pIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImxnOmNvbC1zcGFuLTMiLCBjaGlsZHJlbjogIXdvcmtvdXQgJiYgIWlzTG9hZGluZyA/IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJoLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItZ3JheS0yMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC0yeGwgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTQwMCBwLTEyIHRleHQtY2VudGVyIiwgY2hpbGRyZW46IFtfanN4KExheW91dExpc3QsIHsgY2xhc3NOYW1lOiAidy0xMiBoLTEyIG1iLTQgb3BhY2l0eS0yMCIgfSksIF9qc3goImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgbWItMSIsIGNoaWxkcmVuOiAiWW91ciBSb3V0aW5lIEF3YWl0cyIgfSksIF9qc3goInAiLCB7IGNsYXNzTmFtZTogInRleHQtc20iLCBjaGlsZHJlbjogIkN1c3RvbWl6ZSB5b3VyIHByZWZlcmVuY2VzIG9uIHRoZSBsZWZ0IHRvIGdlbmVyYXRlIGEgdW5pcXVlIHdvcmtvdXQgcGxhbi4iIH0pXSB9KSkgOiBpc0xvYWRpbmcgPyAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiaC1mdWxsIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ3JheS00MDAgYW5pbWF0ZS1wdWxzZSIsIGNoaWxkcmVuOiBbX2pzeChTcGFya2xlcywgeyBjbGFzc05hbWU6ICJ3LTEyIGgtMTIgbWItNCB0ZXh0LWJyYW5kLTUwMCIgfSksIF9qc3goInAiLCB7IGNoaWxkcmVuOiAiQnVpbGRpbmcgeW91ciByb3V0aW5lLi4uIiB9KV0gfSkpIDogKF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC04IHNoYWRvdy1zbSBhbmltYXRlLWluIGZhZGUtaW4gc2xpZGUtaW4tZnJvbS1ib3R0b20tNCIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwcm9zZSBwcm9zZS1icmFuZCBkYXJrOnByb3NlLWludmVydCBtYXgtdy1ub25lIiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNiBub3QtcHJvc2UiLCBjaGlsZHJlbjogW19qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInB4LTMgcHktMSBiZy1icmFuZC01MCBkYXJrOmJnLWJyYW5kLTkwMC8zMCB0ZXh0LWJyYW5kLTYwMCB0ZXh0LXhzIGZvbnQtYm9sZCByb3VuZGVkLWZ1bGwgdXBwZXJjYXNlIiwgY2hpbGRyZW46IGZvY3VzIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHdvcmtvdXQgfHwgJycpLCBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtYnJhbmQtNTAwIHRyYW5zaXRpb24tY29sb3JzIiwgY2hpbGRyZW46IF9qc3goQ29weSwgeyBjbGFzc05hbWU6ICJ3LTUgaC01IiB9KSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAid2hpdGVzcGFjZS1wcmUtd3JhcCBmb250LXNhbnMgdGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgbGVhZGluZy1yZWxheGVkIiwgY2hpbGRyZW46IHdvcmtvdXQgfSldIH0pIH0pKSB9KV0gfSkgfSkpOwp9OwovLyAtLS0gT25lIFJlcCBNYXggQ2FsY3VsYXRvciAtLS0KZXhwb3J0IGNvbnN0IE9uZVJlcE1heENhbGMgPSAoKSA9PiB7CiAgICBjb25zdCBbd2VpZ2h0LCBzZXRXZWlnaHRdID0gdXNlU3RhdGUoMTAwKTsKICAgIGNvbnN0IFtyZXBzLCBzZXRSZXBzXSA9IHVzZVN0YXRlKDUpOwogICAgY29uc3QgW3VuaXQsIHNldFVuaXRdID0gdXNlU3RhdGUoJ2tnJyk7CiAgICBjb25zdCBjYWxjdWxhdGVSZXN1bHRzID0gKCkgPT4gewogICAgICAgIGlmIChyZXBzIDwgMSkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKHJlcHMgPT09IDEpCiAgICAgICAgICAgIHJldHVybiB3ZWlnaHQ7CiAgICAgICAgLy8gRXBsZXkgRm9ybXVsYTogMVJNID0gdyAqICgxICsgci8zMCkKICAgICAgICBjb25zdCBlcGxleSA9IHdlaWdodCAqICgxICsgcmVwcyAvIDMwKTsKICAgICAgICAvLyBCcnp5Y2tpIEZvcm11bGE6IDFSTSA9IHcgKiAoMzYgLyAoMzcgLSByKSkKICAgICAgICBjb25zdCBicnp5Y2tpID0gd2VpZ2h0ICogKDM2IC8gKDM3IC0gcmVwcykpOwogICAgICAgIGNvbnN0IGF2ZyA9IChlcGxleSArIGJyenlja2kpIC8gMjsKICAgICAgICByZXR1cm4geyBlcGxleSwgYnJ6eWNraSwgYXZnIH07CiAgICB9OwogICAgY29uc3QgcmVzID0gY2FsY3VsYXRlUmVzdWx0cygpOwogICAgY29uc3QgUEVSQ0VOVEFHRVMgPSBbMTAwLCA5NSwgOTAsIDg1LCA4MCwgNzUsIDcwLCA2NSwgNjAsIDUwXTsKICAgIHJldHVybiAoX2pzeChUb29sTGF5b3V0LCB7IHRpdGxlOiAiMVJNIFN0cmVuZ3RoIEVzdGltYXRvciIsIGRlc2NyaXB0aW9uOiAiRXN0aW1hdGUgeW91ciBvbmUtcmVwIG1heCBmb3IgYW55IGxpZnQgYW5kIHNlZSB5b3VyIHRyYWluaW5nIHBlcmNlbnRhZ2VzLiIsIGljb246IFRyb3BoeSwgY2F0ZWdvcnk6ICJGaXRuZXNzIiwgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInAtNiBtYXgtdy01eGwgbXgtYXV0byBncmlkIGxnOmdyaWQtY29scy0yIGdhcC04IiwgY2hpbGRyZW46IFtfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTYiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIHAtNiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3goImgzIiwgeyBjbGFzc05hbWU6ICJmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgbWItNiIsIGNoaWxkcmVuOiAiTGlmdCBTdGF0cyIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2hpbGRyZW46IFtfanN4KCJsYWJlbCIsIHsgY2xhc3NOYW1lOiAiYmxvY2sgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgbWItMSIsIGNoaWxkcmVuOiAiV2VpZ2h0IiB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicmVsYXRpdmUiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHdlaWdodCwgb25DaGFuZ2U6IGUgPT4gc2V0V2VpZ2h0KE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHByLTEyIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgZm9udC1ib2xkIHRleHQtbGciIH0pLCBfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldFVuaXQodW5pdCA9PT0gJ2tnJyA/ICdsYicgOiAna2cnKSwgY2xhc3NOYW1lOiAiYWJzb2x1dGUgcmlnaHQtMyB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWJyYW5kLTUwMCIsIGNoaWxkcmVuOiB1bml0IH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQteHMgZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIG1iLTEiLCBjaGlsZHJlbjogIlJlcHMiIH0pLCBfanN4KCJpbnB1dCIsIHsgdHlwZTogIm51bWJlciIsIG1pbjogIjEiLCBtYXg6ICIxNSIsIHZhbHVlOiByZXBzLCBvbkNoYW5nZTogZSA9PiBzZXRSZXBzKE51bWJlcihlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCBiZy1ncmF5LTUwIGRhcms6YmctZGFyay05NTAgZm9udC1ib2xkIHRleHQtbGciIH0pXSB9KV0gfSksIHJlcyAmJiAoX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAicC04IGJnLWJyYW5kLTYwMCByb3VuZGVkLTJ4bCB0ZXh0LXdoaXRlIHRleHQtY2VudGVyIHNoYWRvdy14bCBzaGFkb3ctYnJhbmQtNTAwLzIwIiwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtYnJhbmQtMTAwIHRleHQtc20gZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItMSIsIGNoaWxkcmVuOiAiRXN0aW1hdGVkIDFSTSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInRleHQtN3hsIGZvbnQtYmxhY2sgdHJhY2tpbmctdGlnaHRlciIsIGNoaWxkcmVuOiBbTWF0aC5yb3VuZChyZXMuYXZnKSwgX2pzeCgic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC0yeGwgZm9udC1ub3JtYWwgb3BhY2l0eS01MCBtbC0yIiwgY2hpbGRyZW46IHVuaXQgfSldIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIm10LTQgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWJyYW5kLTIwMCIsIGNoaWxkcmVuOiAiQXZnLiBvZiBFcGxleSAmIEJyenlja2kgZm9ybXVsYXMiIH0pXSB9KSldIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgcC02IHNoYWRvdy1zbSIsIGNoaWxkcmVuOiBbX2pzeCgiaDMiLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBtYi00IiwgY2hpbGRyZW46ICJGb3JtdWxhIEJyZWFrZG93biIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktMyIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHRleHQtc20gcC0zIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCByb3VuZGVkLWxnIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46ICJFcGxleSBGb3JtdWxhIiB9KSwgX2pzeHMoInNwYW4iLCB7IGNsYXNzTmFtZTogImZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiBbTWF0aC5yb3VuZChyZXM/LmVwbGV5IHx8IDApLCAiICIsIHVuaXRdIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHRleHQtc20gcC0zIGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTk1MCByb3VuZGVkLWxnIiwgY2hpbGRyZW46IFtfanN4KCJzcGFuIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LWdyYXktNTAwIiwgY2hpbGRyZW46ICJCcnp5Y2tpIEZvcm11bGEiIH0pLCBfanN4cygic3BhbiIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIiwgY2hpbGRyZW46IFtNYXRoLnJvdW5kKHJlcz8uYnJ6eWNraSB8fCAwKSwgIiAiLCB1bml0XSB9KV0gfSldIH0pXSB9KV0gfSksIF9qc3goImRpdiIsIHsgY2hpbGRyZW46IF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImJnLXdoaXRlIGRhcms6YmctZGFyay05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1kYXJrLTcwMCByb3VuZGVkLXhsIHAtNiBzaGFkb3ctc20iLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAiZm9udC1ib2xkIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIG1iLTYgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goVGltZXIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCB0ZXh0LW9yYW5nZS01MDAiIH0pLCAiVHJhaW5pbmcgUGVyY2VudGFnZXMiXSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0yIGdhcC00IiwgY2hpbGRyZW46IFBFUkNFTlRBR0VTLm1hcChwID0+IChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcC0zIGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCBsYXN0OmJvcmRlci0wIiwgY2hpbGRyZW46IFtfanN4cygic3BhbiIsIHsgY2xhc3NOYW1lOiAidGV4dC1zbSB0ZXh0LWdyYXktNDAwIGZvbnQtYm9sZCIsIGNoaWxkcmVuOiBbcCwgIiUiXSB9KSwgX2pzeHMoInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtbGcgZm9udC1ibGFjayB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSIsIGNoaWxkcmVuOiBbTWF0aC5yb3VuZCgocmVzPy5hdmcgfHwgMCkgKiAocCAvIDEwMCkpLCAiICIsIF9qc3goInNwYW4iLCB7IGNsYXNzTmFtZTogInRleHQtWzEwcHhdIGZvbnQtbm9ybWFsIG9wYWNpdHktNTAgdXBwZXJjYXNlIiwgY2hpbGRyZW46IHVuaXQgfSldIH0pXSB9LCBwKSkpIH0pXSB9KSB9KV0gfSkgfSkpOwp9Owo=","@/components/Tools/LyricCardGenerator":"data:application/javascript;base64,aW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tICJyZWFjdC9qc3gtcnVudGltZSI7CmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBNdXNpYywgRG93bmxvYWQsIFR5cGUsIFBhbGV0dGUsIEFsaWduTGVmdCwgQWxpZ25DZW50ZXIsIEFsaWduUmlnaHQsIExvYWRlcjIsIFF1b3RlLCBTbWFydHBob25lLCBXYW5kMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IFRvb2xMYXlvdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvVG9vbExheW91dCc7CmltcG9ydCB7IGdlbmVyYXRlVGV4dCB9IGZyb20gJ0Avc2VydmljZXMvZ2VtaW5pU2VydmljZSc7CmltcG9ydCAqIGFzIGh0bWxUb0ltYWdlIGZyb20gJ2h0bWwtdG8taW1hZ2UnOwpjb25zdCBDQVJEX0dSQURJRU5UUyA9IFsKICAgIHsgbmFtZTogJ01pZG5pZ2h0JywgY3NzOiAnbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBmMTcyYSAwJSwgIzMzNDE1NSAxMDAlKScsIHRleHQ6ICcjZmZmZmZmJyB9LAogICAgeyBuYW1lOiAnU3Vuc2V0JywgY3NzOiAnbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2Y0M2Y1ZSAwJSwgI2ZiOTIzYyAxMDAlKScsIHRleHQ6ICcjZmZmZmZmJyB9LAogICAgeyBuYW1lOiAnTWF0Y2hhJywgY3NzOiAnbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzEwYjk4MSAwJSwgIzA1OTY2OSAxMDAlKScsIHRleHQ6ICcjZmZmZmZmJyB9LAogICAgeyBuYW1lOiAnTGF2ZW5kZXInLCBjc3M6ICdsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjOGI1Y2Y2IDAlLCAjZDk0NmVmIDEwMCUpJywgdGV4dDogJyNmZmZmZmYnIH0sCiAgICB7IG5hbWU6ICdTa3knLCBjc3M6ICdsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMGVhNWU5IDAlLCAjMjU2M2ViIDEwMCUpJywgdGV4dDogJyNmZmZmZmYnIH0sCiAgICB7IG5hbWU6ICdDeWJlcnB1bmsnLCBjc3M6ICdsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNGY0NmU1IDAlLCAjN2MzYWVkIDEwMCUpJywgdGV4dDogJyNmZmZmZmYnIH0sCiAgICB7IG5hbWU6ICdQYXBlcicsIGNzczogJ2xpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmOGZhZmMgMCUsICNlMmU4ZjAgMTAwJSknLCB0ZXh0OiAnIzFlMjkzYicgfSwKICAgIHsgbmFtZTogJ09ic2lkaWFuJywgY3NzOiAnbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzFhMWExYSAwJSwgIzAwMDAwMCAxMDAlKScsIHRleHQ6ICcjZmZmZmZmJyB9LApdOwpjb25zdCBGT05UUyA9IFsKICAgIHsgbmFtZTogJ01vZGVybiBTYW5zJywgZmFtaWx5OiAnSW50ZXIsIHNhbnMtc2VyaWYnIH0sCiAgICB7IG5hbWU6ICdDbGFzc2ljIFNlcmlmJywgZmFtaWx5OiAnc2VyaWYnIH0sCiAgICB7IG5hbWU6ICdIYW5kd3JpdHRlbicsIGZhbWlseTogJyJDYXZlYXQiLCBjdXJzaXZlJyB9LAogICAgeyBuYW1lOiAnRWxlZ2FudCcsIGZhbWlseTogJyJEYW5jaW5nIFNjcmlwdCIsIGN1cnNpdmUnIH0sCiAgICB7IG5hbWU6ICdEaXNwbGF5JywgZmFtaWx5OiAnIlNoYWRvd3MgSW50byBMaWdodCIsIGN1cnNpdmUnIH0sCl07CmV4cG9ydCBjb25zdCBMeXJpY0NhcmRHZW5lcmF0b3IgPSAoKSA9PiB7CiAgICBjb25zdCBbbHlyaWNzLCBzZXRMeXJpY3NdID0gdXNlU3RhdGUoJ1N0ZXAgb3V0IG9mIHRoZSBzdW5cbklmIHlvdSBrZWVwIGdldHRpbmcgYnVybmVkJyk7CiAgICBjb25zdCBbYXR0cmlidXRpb24sIHNldEF0dHJpYnV0aW9uXSA9IHVzZVN0YXRlKCdUaGUgV2Vla25kIOKAlCBMZXNzIFRoYW4gWmVybycpOwogICAgY29uc3QgW2JhY2tncm91bmQsIHNldEJhY2tncm91bmRdID0gdXNlU3RhdGUoQ0FSRF9HUkFESUVOVFNbMF0pOwogICAgY29uc3QgW2ZvbnQsIHNldEZvbnRdID0gdXNlU3RhdGUoRk9OVFNbMF0pOwogICAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VTdGF0ZSgzMik7CiAgICBjb25zdCBbYWxpZ25tZW50LCBzZXRBbGlnbm1lbnRdID0gdXNlU3RhdGUoJ2NlbnRlcicpOwogICAgY29uc3QgW2NhcmRQYWRkaW5nLCBzZXRDYXJkUGFkZGluZ10gPSB1c2VTdGF0ZSg0OCk7CiAgICBjb25zdCBbaXNBaUxvYWRpbmcsIHNldElzQWlMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtpc0Rvd25sb2FkaW5nLCBzZXRJc0Rvd25sb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsKICAgIGNvbnN0IFtzaG93QXR0cmlidXRpb24sIHNldFNob3dBdHRyaWJ1dGlvbl0gPSB1c2VTdGF0ZSh0cnVlKTsKICAgIGNvbnN0IFthc3BlY3RSYXRpbywgc2V0QXNwZWN0UmF0aW9dID0gdXNlU3RhdGUoJ3BvcnRyYWl0Jyk7CiAgICBjb25zdCBjYXJkUmVmID0gdXNlUmVmKG51bGwpOwogICAgY29uc3QgaGFuZGxlQWlJbnNwaXJhdGlvbiA9IGFzeW5jICgpID0+IHsKICAgICAgICBzZXRJc0FpTG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgR2VuZXJhdGUgYSBzaW5nbGUgc2hvcnQsIHByb2ZvdW5kLCBhbmQgdmlyYWwtc3R5bGUgbHlyaWMgb3IgcXVvdGUgKG1heCAxNSB3b3JkcykgdGhhdCBmZWVscyBtb2Rlcm4gYW5kIGVtb3Rpb25hbC4gCiAgICAgIFJldHVybiBPTkxZIGEgSlNPTiBvYmplY3Qgd2l0aDoKICAgICAgewogICAgICAgICJ0ZXh0IjogIlRoZSBseXJpYyB0ZXh0IiwKICAgICAgICAiYXJ0aXN0IjogIkFydGlzdCBvciBBdXRob3IgbmFtZSIKICAgICAgfQogICAgICBEbyBub3QgaW5jbHVkZSBtYXJrZG93biBvciBiYWNrdGlja3MuYDsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZW5lcmF0ZVRleHQocHJvbXB0KTsKICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UucmVwbGFjZSgvYGBganNvbnxgYGAvZywgJycpLnRyaW0oKSk7CiAgICAgICAgICAgIHNldEx5cmljcyhkYXRhLnRleHQpOwogICAgICAgICAgICBzZXRBdHRyaWJ1dGlvbihkYXRhLmFydGlzdCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgICAgIGFsZXJ0KCJBSSB3YXMgZmVlbGluZyBhIGJpdCBzaHkuIFRyeSBhZ2FpbiEiKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzQWlMb2FkaW5nKGZhbHNlKTsKICAgICAgICB9CiAgICB9OwogICAgY29uc3QgZG93bmxvYWRDYXJkID0gYXN5bmMgKCkgPT4gewogICAgICAgIGlmICghY2FyZFJlZi5jdXJyZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc2V0SXNEb3dubG9hZGluZyh0cnVlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgaHRtbFRvSW1hZ2UudG9QbmcoY2FyZFJlZi5jdXJyZW50LCB7CiAgICAgICAgICAgICAgICBxdWFsaXR5OiAxLjAsCiAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiAzLCAvLyBIaWdoIGRlZgogICAgICAgICAgICAgICAgY2FjaGVCdXN0OiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gYGx5cmljLWNhcmQtJHtEYXRlLm5vdygpfS5wbmdgOwogICAgICAgICAgICBsaW5rLmhyZWYgPSBkYXRhVXJsOwogICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpOwogICAgICAgICAgICBhbGVydCgiRmFpbGVkIHRvIGV4cG9ydCBpbWFnZS4iKTsKICAgICAgICB9CiAgICAgICAgZmluYWxseSB7CiAgICAgICAgICAgIHNldElzRG93bmxvYWRpbmcoZmFsc2UpOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm4gKF9qc3goVG9vbExheW91dCwgeyB0aXRsZTogIkx5cmljIENhcmQgU3R1ZGlvIiwgZGVzY3JpcHRpb246ICJUdXJuIHlvdXIgZmF2b3JpdGUgbHlyaWNzIG9yIHF1b3RlcyBpbnRvIGJlYXV0aWZ1bCwgc2hhcmVhYmxlIGNhcmRzIGZvciBJbnN0YWdyYW0gYW5kIFBpbnRlcmVzdC4iLCBpY29uOiBNdXNpYywgY2F0ZWdvcnk6ICJNdXNpYyIsIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4IGZsZXgtY29sIGxnOmZsZXgtcm93IG1pbi1oLVs3MDBweF0gYmctZ3JheS01MCBkYXJrOmJnLWRhcmstOTUwIG92ZXJmbG93LWhpZGRlbiIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidy1mdWxsIGxnOnctOTYgYmctd2hpdGUgZGFyazpiZy1kYXJrLTkwMCBib3JkZXItciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay04MDAgZmxleCBmbGV4LWNvbCBoLWZ1bGwgbGc6aC1bNzUwcHhdIG92ZXJmbG93LXktYXV0byBjdXN0b20tc2Nyb2xsYmFyIHAtNiBzcGFjZS15LTgiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImJ1dHRvbiIsIHsgb25DbGljazogaGFuZGxlQWlJbnNwaXJhdGlvbiwgZGlzYWJsZWQ6IGlzQWlMb2FkaW5nLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcHktMyBiZy1ncmFkaWVudC10by1yIGZyb20tcm9zZS01MDAgdG8tYnJhbmQtNjAwIHRleHQtd2hpdGUgcm91bmRlZC14bCBmb250LWJvbGQgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBzaGFkb3ctbGcgc2hhZG93LWJyYW5kLTUwMC8yMCBhY3RpdmU6c2NhbGUtOTUgZGlzYWJsZWQ6b3BhY2l0eS01MCB0cmFuc2l0aW9uLWFsbCIsIGNoaWxkcmVuOiBbaXNBaUxvYWRpbmcgPyBfanN4KExvYWRlcjIsIHsgY2xhc3NOYW1lOiAidy00IGgtNCBhbmltYXRlLXNwaW4iIH0pIDogX2pzeChXYW5kMiwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgIkFJIEx5cmljIEluc3BpcmF0aW9uIl0gfSksIF9qc3hzKCJkaXYiLCB7IGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbWItMiIsIGNoaWxkcmVuOiAiTHlyaWNzIC8gUXVvdGUiIH0pLCBfanN4KCJ0ZXh0YXJlYSIsIHsgdmFsdWU6IGx5cmljcywgb25DaGFuZ2U6IGUgPT4gc2V0THlyaWNzKGUudGFyZ2V0LnZhbHVlKSwgcGxhY2Vob2xkZXI6ICJUeXBlIHlvdXIgbHlyaWNzIGhlcmUuLi4iLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC00IGJnLWdyYXktNTAgZGFyazpiZy1kYXJrLTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMTAwIGRhcms6Ym9yZGVyLWRhcmstNzAwIHJvdW5kZWQteGwgdGV4dC1zbSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1icmFuZC01MDAgbWluLWgtWzEwMHB4XSByZXNpemUtbm9uZSIgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjaGlsZHJlbjogW19qc3goImxhYmVsIiwgeyBjbGFzc05hbWU6ICJibG9jayB0ZXh0LVsxMHB4XSBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1iLTIiLCBjaGlsZHJlbjogIkFydGlzdCAvIFNvdXJjZSIgfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXggZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goImlucHV0IiwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBhdHRyaWJ1dGlvbiwgb25DaGFuZ2U6IGUgPT4gc2V0QXR0cmlidXRpb24oZS50YXJnZXQudmFsdWUpLCBwbGFjZWhvbGRlcjogIkFydGlzdCBcdTIwMTQgU29uZyIsIGNsYXNzTmFtZTogImZsZXgtMSBwLTMgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCB0ZXh0LXNtIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJyYW5kLTUwMCIgfSksIF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0U2hvd0F0dHJpYnV0aW9uKCFzaG93QXR0cmlidXRpb24pLCBjbGFzc05hbWU6IGBwLTMgcm91bmRlZC14bCBib3JkZXIgdHJhbnNpdGlvbi1hbGwgJHtzaG93QXR0cmlidXRpb24gPyAnYmctYnJhbmQtNTAgYm9yZGVyLWJyYW5kLTIwMCB0ZXh0LWJyYW5kLTYwMCcgOiAnYmctZ3JheS01MCBib3JkZXItZ3JheS0xMDAgdGV4dC1ncmF5LTQwMCd9YCwgY2hpbGRyZW46IF9qc3goUXVvdGUsIHsgY2xhc3NOYW1lOiAidy00IGgtNCIgfSkgfSldIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogInNwYWNlLXktNCIsIGNoaWxkcmVuOiBbX2pzeHMoImgzIiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLCBjaGlsZHJlbjogW19qc3goUGFsZXR0ZSwgeyBjbGFzc05hbWU6ICJ3LTMgaC0zIiB9KSwgIiBCYWNrZ3JvdW5kIFN0eWxlIl0gfSksIF9qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAiZ3JpZCBncmlkLWNvbHMtNCBnYXAtMiIsIGNoaWxkcmVuOiBDQVJEX0dSQURJRU5UUy5tYXAoKGcsIGlkeCkgPT4gKF9qc3goImJ1dHRvbiIsIHsgb25DbGljazogKCkgPT4gc2V0QmFja2dyb3VuZChnKSwgY2xhc3NOYW1lOiBgaC0xMCByb3VuZGVkLWxnIHRyYW5zaXRpb24tYWxsICR7YmFja2dyb3VuZC5uYW1lID09PSBnLm5hbWUgPyAncmluZy0yIHJpbmctYnJhbmQtNTAwIHJpbmctb2Zmc2V0LTIgZGFyazpyaW5nLW9mZnNldC1kYXJrLTkwMCBzY2FsZS0xMDUnIDogJ2hvdmVyOnNjYWxlLTEwNSd9YCwgc3R5bGU6IHsgYmFja2dyb3VuZDogZy5jc3MgfSB9LCBpZHgpKSkgfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTQiLCBjaGlsZHJlbjogW19qc3hzKCJoMyIsIHsgY2xhc3NOYW1lOiAidGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIiwgY2hpbGRyZW46IFtfanN4KFR5cGUsIHsgY2xhc3NOYW1lOiAidy0zIGgtMyIgfSksICIgVHlwb2dyYXBoeSJdIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJzcGFjZS15LTMiLCBjaGlsZHJlbjogW19qc3goInNlbGVjdCIsIHsgdmFsdWU6IGZvbnQubmFtZSwgb25DaGFuZ2U6IGUgPT4gc2V0Rm9udChGT05UUy5maW5kKGYgPT4gZi5uYW1lID09PSBlLnRhcmdldC52YWx1ZSkpLCBjbGFzc05hbWU6ICJ3LWZ1bGwgcC0yLjUgYmctZ3JheS01MCBkYXJrOmJnLWRhcmstODAwIGJvcmRlciBib3JkZXItZ3JheS0xMDAgZGFyazpib3JkZXItZGFyay03MDAgcm91bmRlZC14bCB0ZXh0LXNtIGZvbnQtbWVkaXVtIiwgY2hpbGRyZW46IEZPTlRTLm1hcChmID0+IF9qc3goIm9wdGlvbiIsIHsgY2hpbGRyZW46IGYubmFtZSB9LCBmLm5hbWUpKSB9KSwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJncmlkIGdyaWQtY29scy0zIGdhcC0yIiwgY2hpbGRyZW46IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXS5tYXAoYWxpZ24gPT4gKF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldEFsaWdubWVudChhbGlnbiksIGNsYXNzTmFtZTogYHAtMiByb3VuZGVkLWxnIGJvcmRlciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCAke2FsaWdubWVudCA9PT0gYWxpZ24gPyAnYmctYnJhbmQtNTAgYm9yZGVyLWJyYW5kLTIwMCB0ZXh0LWJyYW5kLTYwMCcgOiAnYmctZ3JheS01MCBib3JkZXItZ3JheS0xMDAgdGV4dC1ncmF5LTQwMCd9YCwgY2hpbGRyZW46IFthbGlnbiA9PT0gJ2xlZnQnICYmIF9qc3goQWxpZ25MZWZ0LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pLCBhbGlnbiA9PT0gJ2NlbnRlcicgJiYgX2pzeChBbGlnbkNlbnRlciwgeyBjbGFzc05hbWU6ICJ3LTQgaC00IiB9KSwgYWxpZ24gPT09ICdyaWdodCcgJiYgX2pzeChBbGlnblJpZ2h0LCB7IGNsYXNzTmFtZTogInctNCBoLTQiIH0pXSB9LCBhbGlnbikpKSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSIsIGNoaWxkcmVuOiBbX2pzeCgibGFiZWwiLCB7IGNsYXNzTmFtZTogImJsb2NrIHRleHQtWzEwcHhdIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwIG1iLTEiLCBjaGlsZHJlbjogIkZvbnQgU2l6ZSIgfSksIF9qc3goImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46ICIxNiIsIG1heDogIjcyIiwgdmFsdWU6IGZvbnRTaXplLCBvbkNoYW5nZTogZSA9PiBzZXRGb250U2l6ZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKSwgY2xhc3NOYW1lOiAidy1mdWxsIGFjY2VudC1icmFuZC01MDAiIH0pXSB9KSwgX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAidy0xMCB0ZXh0LWNlbnRlciBmb250LW1vbm8gdGV4dC14cyBmb250LWJvbGQgdGV4dC1ncmF5LTQwMCIsIGNoaWxkcmVuOiBbZm9udFNpemUsICJweCJdIH0pXSB9KV0gfSldIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJwdC02IGJvcmRlci10IGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci1kYXJrLTgwMCIsIGNoaWxkcmVuOiBbX2pzeHMoImRpdiIsIHsgY2xhc3NOYW1lOiAiZmxleCBnYXAtMiBtYi00IiwgY2hpbGRyZW46IFtfanN4KCJidXR0b24iLCB7IG9uQ2xpY2s6ICgpID0+IHNldEFzcGVjdFJhdGlvKCdwb3J0cmFpdCcpLCBjbGFzc05hbWU6IGBmbGV4LTEgcHktMiB0ZXh0LXhzIGZvbnQtYm9sZCByb3VuZGVkLWxnIGJvcmRlciB0cmFuc2l0aW9uLWFsbCAke2FzcGVjdFJhdGlvID09PSAncG9ydHJhaXQnID8gJ2JnLWdyYXktOTAwIHRleHQtd2hpdGUgYm9yZGVyLWdyYXktOTAwJyA6ICdiZy13aGl0ZSB0ZXh0LWdyYXktNTAwIGJvcmRlci1ncmF5LTIwMCd9YCwgY2hpbGRyZW46ICI5OjE2IFN0b3J5IiB9KSwgX2pzeCgiYnV0dG9uIiwgeyBvbkNsaWNrOiAoKSA9PiBzZXRBc3BlY3RSYXRpbygnc3F1YXJlJyksIGNsYXNzTmFtZTogYGZsZXgtMSBweS0yIHRleHQteHMgZm9udC1ib2xkIHJvdW5kZWQtbGcgYm9yZGVyIHRyYW5zaXRpb24tYWxsICR7YXNwZWN0UmF0aW8gPT09ICdzcXVhcmUnID8gJ2JnLWdyYXktOTAwIHRleHQtd2hpdGUgYm9yZGVyLWdyYXktOTAwJyA6ICdiZy13aGl0ZSB0ZXh0LWdyYXktNTAwIGJvcmRlci1ncmF5LTIwMCd9YCwgY2hpbGRyZW46ICIxOjEgU3F1YXJlIiB9KV0gfSksIF9qc3hzKCJidXR0b24iLCB7IG9uQ2xpY2s6IGRvd25sb2FkQ2FyZCwgZGlzYWJsZWQ6IGlzRG93bmxvYWRpbmcsIGNsYXNzTmFtZTogInctZnVsbCBweS00IGJnLWdyYXktOTAwIGRhcms6Ymctd2hpdGUgdGV4dC13aGl0ZSBkYXJrOnRleHQtZ3JheS05MDAgcm91bmRlZC14bCBmb250LWJsYWNrIHRleHQtbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgaG92ZXI6b3BhY2l0eS05MCBhY3RpdmU6c2NhbGUtOTUgdHJhbnNpdGlvbi1hbGwgc2hhZG93LXhsIHNoYWRvdy1ncmF5LTkwMC8xMCIsIGNoaWxkcmVuOiBbaXNEb3dubG9hZGluZyA/IF9qc3goTG9hZGVyMiwgeyBjbGFzc05hbWU6ICJ3LTYgaC02IGFuaW1hdGUtc3BpbiIgfSkgOiBfanN4KERvd25sb2FkLCB7IGNsYXNzTmFtZTogInctNiBoLTYiIH0pLCAiRG93bmxvYWQgSEQgQ2FyZCJdIH0pXSB9KV0gfSksIF9qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTggYmctZ3JheS0xMDAgZGFyazpiZy1bIzA1MDUwNV0gcmVsYXRpdmUiLCBjaGlsZHJlbjogW19qc3hzKCJkaXYiLCB7IGNsYXNzTmFtZTogImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3BhY2l0eS1bMC4wM10gZGFyazpvcGFjaXR5LVswLjFdIHBvaW50ZXItZXZlbnRzLW5vbmUiLCBjaGlsZHJlbjogW19qc3goImRpdiIsIHsgY2xhc3NOYW1lOiAidy1bMXB4XSBoLWZ1bGwgYmctZ3JheS01MDAgYWJzb2x1dGUgbGVmdC0xLzIiIH0pLCBfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogImgtWzFweF0gdy1mdWxsIGJnLWdyYXktNTAwIGFic29sdXRlIHRvcC0xLzIiIH0pXSB9KSwgX2pzeCgiZGl2IiwgeyByZWY6IGNhcmRSZWYsIGNsYXNzTmFtZTogYHNoYWRvdy0yeGwgb3ZlcmZsb3ctaGlkZGVuIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwICR7YXNwZWN0UmF0aW8gPT09ICdwb3J0cmFpdCcgPyAndy1bMzYwcHhdIGgtWzY0MHB4XScgOiAndy1bNTAwcHhdIGgtWzUwMHB4XSd9IHJvdW5kZWQtM3hsYCwgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kLmNzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBgJHtjYXJkUGFkZGluZ31weGAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogZm9udC5mYW1pbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJmbGV4LTEgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciIsIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogYWxpZ25tZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogYmFja2dyb3VuZC50ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IFtfanN4KCJkaXYiLCB7IGNsYXNzTmFtZTogIndoaXRlc3BhY2UtcHJlLXdyYXAgbGVhZGluZy10aWdodCBtYi04IGRyb3Atc2hhZG93LXNtIGZvbnQtbWVkaXVtIiwgc3R5bGU6IHsgZm9udFNpemU6IGAke2ZvbnRTaXplfXB4YCB9LCBjaGlsZHJlbjogbHlyaWNzIHx8ICdZb3VyIGx5cmljcyB3aWxsIGFwcGVhciBoZXJlLi4uJyB9KSwgc2hvd0F0dHJpYnV0aW9uICYmIGF0dHJpYnV0aW9uICYmIChfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJ0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIGZvbnQtYmxhY2sgb3BhY2l0eS02MCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyIsIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IGFsaWdubWVudCA9PT0gJ2NlbnRlcicgPyAnY2VudGVyJyA6IGFsaWdubWVudCA9PT0gJ3JpZ2h0JyA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBbX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLVsxcHhdIHctNCBiZy1jdXJyZW50IG9wYWNpdHktNDAiIH0pLCBhdHRyaWJ1dGlvbiwgX2pzeCgiZGl2IiwgeyBjbGFzc05hbWU6ICJoLVsxcHhdIHctNCBiZy1jdXJyZW50IG9wYWNpdHktNDAiIH0pXSB9KSldIH0pIH0pLCBfanN4cygiZGl2IiwgeyBjbGFzc05hbWU6ICJhYnNvbHV0ZSBib3R0b20tNCBsZWZ0LTQgdGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtZ3JheS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsIGNoaWxkcmVuOiBbX2pzeChTbWFydHBob25lLCB7IGNsYXNzTmFtZTogInctMyBoLTMiIH0pLCAiIEhEIFByZXZpZXcgXHUyMDIyIE9wdGltaXplZCBmb3IgU2hhcmUiXSB9KV0gfSldIH0pIH0pKTsKfTsK"}}</script>
<script type="module">
  const geminiUrl = window.location.origin + '/api-proxy';

  window.API_KEY = 'UNUSED_PLACEHOLDER_FOR_API_KEY';
  window.GEMINI_API_KEY = 'UNUSED_PLACEHOLDER_FOR_API_KEY';
  window.process = window.process || {};
  window.process.env = window.process.env || {};
  window.process.env.API_KEY = window.API_KEY;
  window.process.env.GEMINI_API_KEY = window.GEMINI_API_KEY;
</script>


<!DOCTYPE html>
<html lang="en">
  <head><script src="/public/websocket-interceptor.js" defer></script>
<script>
if ('serviceWorker' in navigator) {
  window.addEventListener('load' , () => {
    navigator.serviceWorker.register('./service-worker.js')
      .then(registration => {
        console.log('Service Worker registered successfully with scope:', registration.scope);
      })
      .catch(error => {
        console.error('Service Worker registration failed:', error);
      });
  });
} else {
  console.log('Service workers are not supported in this browser.');
}
</script>

    <!-- Google tag (gtag.js) -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-MGF16XY4H7"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());

      gtag('config', 'G-MGF16XY4H7');
    </script>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>WireNinja - All-in-One Toolkit</title>
    <!-- Custom SVG Favicon (Four Square Grid) -->
    <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' rx='25' fill='%23635bff'/><rect x='25' y='25' width='22' height='22' rx='4' fill='white'/><rect x='53' y='25' width='22' height='22' rx='4' fill='white'/><rect x='25' y='53' width='22' height='22' rx='4' fill='white'/><rect x='53' y='53' width='22' height='22' rx='4' fill='white'/></svg>">
    <script src="https://cdn.tailwindcss.com"></script>
    <script>
      tailwind.config = {
        darkMode: 'class',
        theme: {
          extend: {
            colors: {
              brand: {
                50: '#f3f3fd',
                100: '#e7e7fc',
                500: '#635bff', /* Stripe Blurple */
                600: '#544dc9',
                700: '#433d9f',
                900: '#0a2540', /* Stripe Dark Text */
              },
              dark: {
                800: '#1e293b',
                900: '#0f172a',
                950: '#020617',
              },
              gray: {
                50: '#f6f9fc', /* Stripe Background */
                100: '#e6ebf1',
                200: '#dce3ea',
                300: '#cfd7df',
                400: '#a3acb9',
                500: '#697386', /* Stripe Secondary Text */
                600: '#4f566b',
                700: '#3c4257',
                800: '#1a1f36',
                900: '#0a2540',
              }
            },
            fontFamily: {
              sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'sans-serif'],
              hand1: ['"Caveat"', 'cursive'],
              hand2: ['"Homemade Apple"', 'cursive'],
              hand3: ['"Indie Flower"', 'cursive'],
              hand4: ['"Shadows Into Light"', 'cursive'],
              hand5: ['"Dancing Script"', 'cursive'],
              hand6: ['"Zeyada"', 'cursive'],
            },
            boxShadow: {
              'stripe': '0 13px 27px -5px rgba(50,50,93,0.25), 0 8px 16px -8px rgba(0,0,0,0.3)',
              'stripe-sm': '0 2px 5px -1px rgba(50,50,93,0.25), 0 1px 3px -1px rgba(0,0,0,0.3)',
              'stripe-hover': '0 30px 60px -12px rgba(50,50,93,0.25), 0 18px 36px -18px rgba(0,0,0,0.3)',
              'input': '0 1px 1px 0 rgba(0,0,0,0.05), 0 2px 5px 0 rgba(0,0,0,0.05)',
            }
          }
        }
      }
    </script>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Caveat:wght@400;700&family=Homemade+Apple&family=Indie+Flower&family=Shadows+Into+Light&family=Dancing+Script:wght@400;700&family=Zeyada&display=swap" rel="stylesheet">
    <style>
      body { font-family: 'Inter', sans-serif; }
      
      /* Stripe-inspired mesh background */
      .stripe-gradient-bg {
        background-color: #f6f9fc;
        background-image: 
          radial-gradient(at 100% 0%, rgba(99, 91, 255, 0.08) 0, transparent 50%), 
          radial-gradient(at 0% 0%, rgba(0, 212, 255, 0.08) 0, transparent 50%);
        min-height: 100vh;
      }
      .dark .stripe-gradient-bg {
        background-color: #0f172a;
        background-image: 
          radial-gradient(at 100% 0%, rgba(99, 91, 255, 0.15) 0, transparent 40%);
      }

      .custom-scrollbar::-webkit-scrollbar {
        width: 6px;
      }
      .custom-scrollbar::-webkit-scrollbar-track {
        background: transparent;
      }
      .custom-scrollbar::-webkit-scrollbar-thumb {
        background-color: #cbd5e1;
        border-radius: 20px;
      }
      .dark .custom-scrollbar::-webkit-scrollbar-thumb {
        background-color: #334155;
      }
    </style>
  </head>
  <body class="stripe-gradient-bg text-gray-900 dark:text-gray-100 transition-colors duration-200">
    <div id="root"></div>
  </body>
</html>

<script type="module">import '@/index';</script>
