@zsviczian/excalidraw 0.9.0-obsidian-image-support-5 → 0.9.0-obsidian-12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/CHANGELOG.md +2 -3
  2. package/dist/excalidraw-assets-dev/{i18n-ar-SA-json-8617476a4caf18fc0371.js → i18n-ar-SA-json-f5bc447c49caabb08777.js} +1 -1
  3. package/dist/excalidraw-assets-dev/{i18n-bg-BG-json-709d1cdbcdd08cb4196e.js → i18n-bg-BG-json-268fa8b357a040664ce8.js} +1 -1
  4. package/dist/excalidraw-assets-dev/{i18n-ca-ES-json-00e9a306a6883ffbbe57.js → i18n-ca-ES-json-d97ba352ad60f0797523.js} +1 -1
  5. package/dist/excalidraw-assets-dev/{i18n-cs-CZ-json-bc9a303ff98ced90903d.js → i18n-cs-CZ-json-8461703358025fc2b6dc.js} +1 -1
  6. package/dist/excalidraw-assets-dev/{i18n-da-DK-json-43287c62e4e654a62e4b.js → i18n-da-DK-json-90c6fdbbb074b61c5a20.js} +1 -1
  7. package/dist/excalidraw-assets-dev/i18n-de-DE-json-0a324fb716f965b0dddf.js +22 -0
  8. package/dist/excalidraw-assets-dev/{i18n-el-GR-json-f03c81650fc237c5cf4a.js → i18n-el-GR-json-60644f69d25140bb113b.js} +1 -1
  9. package/dist/excalidraw-assets-dev/i18n-es-ES-json-f22bc8917f34334b9413.js +22 -0
  10. package/dist/excalidraw-assets-dev/{i18n-fa-IR-json-c234b5e54cd2a1672898.js → i18n-fa-IR-json-ad9af56c2e607428ff9e.js} +1 -1
  11. package/dist/excalidraw-assets-dev/{i18n-fi-FI-json-29106b8736c3568b0e7a.js → i18n-fi-FI-json-dbe77c440c89e6e51a98.js} +1 -1
  12. package/dist/excalidraw-assets-dev/{i18n-fr-FR-json-b4382269051ef449f22a.js → i18n-fr-FR-json-26b2114ab3c173967573.js} +1 -1
  13. package/dist/excalidraw-assets-dev/i18n-he-IL-json-6a3f5d88fc0995f20b58.js +22 -0
  14. package/dist/excalidraw-assets-dev/{i18n-hi-IN-json-dfd30ffcd688b76d247b.js → i18n-hi-IN-json-b9e68c32a5f7aba92b0c.js} +1 -1
  15. package/dist/excalidraw-assets-dev/{i18n-hu-HU-json-385ed66ee674f14883ce.js → i18n-hu-HU-json-e52b849fa7808ab1642d.js} +1 -1
  16. package/dist/excalidraw-assets-dev/{i18n-id-ID-json-8606e52f65cda64f84de.js → i18n-id-ID-json-084ef650c8942e0a678d.js} +1 -1
  17. package/dist/excalidraw-assets-dev/{i18n-it-IT-json-47d0eb1c1ca8ffcc6a8c.js → i18n-it-IT-json-fc098faed9756ac81bfc.js} +1 -1
  18. package/dist/excalidraw-assets-dev/{i18n-ja-JP-json-041d339b6d1c6c40a696.js → i18n-ja-JP-json-458325d0df58c790218d.js} +1 -1
  19. package/dist/excalidraw-assets-dev/{i18n-kab-KAB-json-bc3faead75b6f428fa0e.js → i18n-kab-KAB-json-cd5639624894a6578d48.js} +1 -1
  20. package/dist/excalidraw-assets-dev/i18n-kk-KZ-json-d9ef83d6f8accb6161ac.js +22 -0
  21. package/dist/excalidraw-assets-dev/{i18n-ko-KR-json-e3fba288c9957c8010cf.js → i18n-ko-KR-json-7003d57ae007abce987e.js} +1 -1
  22. package/dist/excalidraw-assets-dev/{i18n-lv-LV-json-08034ebe84bb974c35c3.js → i18n-lv-LV-json-c7f3087fbe25fd91d28f.js} +1 -1
  23. package/dist/excalidraw-assets-dev/{i18n-my-MM-json-cc0225c53edbf917e21f.js → i18n-my-MM-json-1e9b67199208e7f3d6e4.js} +1 -1
  24. package/dist/excalidraw-assets-dev/{i18n-nb-NO-json-34f0bfcf72c71d33376d.js → i18n-nb-NO-json-d1bd037aa6fa2661a5a5.js} +1 -1
  25. package/dist/excalidraw-assets-dev/{i18n-nl-NL-json-62820376fea0b9d31fc3.js → i18n-nl-NL-json-068663e2c9fdfa8b1088.js} +1 -1
  26. package/dist/excalidraw-assets-dev/{i18n-nn-NO-json-a3f47aba453d847cc65a.js → i18n-nn-NO-json-34ee131c5792da566465.js} +1 -1
  27. package/dist/excalidraw-assets-dev/{i18n-oc-FR-json-d731d0c7c25481aef3c8.js → i18n-oc-FR-json-dce5cf2df80149878122.js} +1 -1
  28. package/dist/excalidraw-assets-dev/{i18n-pa-IN-json-1ccfa9e432207fa34d73.js → i18n-pa-IN-json-8a107b529dc05d8452e0.js} +1 -1
  29. package/dist/excalidraw-assets-dev/{i18n-pl-PL-json-2c3192cda97bcdfaed27.js → i18n-pl-PL-json-7633a9ac5a0b4b5ff7aa.js} +1 -1
  30. package/dist/excalidraw-assets-dev/{i18n-pt-BR-json-8b1f19303a882e28bcb8.js → i18n-pt-BR-json-be80ffd0cddb3c1e247a.js} +1 -1
  31. package/dist/excalidraw-assets-dev/{i18n-pt-PT-json-8c9d24df4db900d7eed1.js → i18n-pt-PT-json-010c0841415e6f5c853f.js} +1 -1
  32. package/dist/excalidraw-assets-dev/{i18n-ro-RO-json-8ad16b7ee2c00730a103.js → i18n-ro-RO-json-81924c28265a0b32d1d8.js} +1 -1
  33. package/dist/excalidraw-assets-dev/{i18n-ru-RU-json-d0767891cb65e644f458.js → i18n-ru-RU-json-d4f396d603c2d30806a5.js} +1 -1
  34. package/dist/excalidraw-assets-dev/{i18n-sk-SK-json-e786dadba6fac2b1625b.js → i18n-sk-SK-json-8d26227b4ce6d0d9894d.js} +1 -1
  35. package/dist/excalidraw-assets-dev/{i18n-sv-SE-json-35b10171080a427d71a5.js → i18n-sv-SE-json-bf6597f23dc8825ed382.js} +1 -1
  36. package/dist/excalidraw-assets-dev/{i18n-tr-TR-json-a15ed70331602c0a16f7.js → i18n-tr-TR-json-5a4dc201a6382783d8ee.js} +1 -1
  37. package/dist/excalidraw-assets-dev/{i18n-uk-UA-json-df1cdfae3f8aa58d22bb.js → i18n-uk-UA-json-cf7be568bf38b167c01e.js} +1 -1
  38. package/dist/excalidraw-assets-dev/{i18n-zh-CN-json-342311fa1d0fa30c6828.js → i18n-zh-CN-json-04ce279401fdeb64c96c.js} +1 -1
  39. package/dist/excalidraw-assets-dev/{i18n-zh-TW-json-819e494f1f38cb9ef099.js → i18n-zh-TW-json-2cf881330938bf6bbb93.js} +1 -1
  40. package/dist/excalidraw-assets-dev/{image-65e6a712958ab4666bf5.js → image-bd6a627ff1bbdbae8366.js} +1 -1
  41. package/dist/excalidraw-assets-dev/{vendor-0f2d4444f453c4f793d1.js → vendor-ac67d7e09cdab8faffe3.js} +3 -14
  42. package/dist/excalidraw.development.js +54 -108
  43. package/dist/excalidraw.production.min.js +1 -1
  44. package/package.json +1 -1
  45. package/types/actions/actionCanvas.d.ts +1 -3
  46. package/types/actions/manager.d.ts +11 -3
  47. package/types/actions/types.d.ts +8 -2
  48. package/types/appState.d.ts +4 -59
  49. package/types/components/Actions.d.ts +2 -5
  50. package/types/components/App.d.ts +5 -20
  51. package/types/components/LayerUI.d.ts +1 -4
  52. package/types/components/LibraryUnit.d.ts +2 -3
  53. package/types/components/MobileMenu.d.ts +1 -4
  54. package/types/components/ToolButton.d.ts +2 -5
  55. package/types/constants.d.ts +3 -3
  56. package/types/data/blob.d.ts +3 -6
  57. package/types/data/encode.d.ts +1 -2
  58. package/types/data/encryption.d.ts +9 -0
  59. package/types/data/filesystem.d.ts +18 -0
  60. package/types/data/index.d.ts +1 -1
  61. package/types/data/json.d.ts +1 -1
  62. package/types/element/collision.d.ts +2 -2
  63. package/types/element/dragElements.d.ts +1 -1
  64. package/types/element/index.d.ts +1 -2
  65. package/types/element/mutateElement.d.ts +1 -1
  66. package/types/element/newElement.d.ts +1 -4
  67. package/types/element/resizeElements.d.ts +3 -3
  68. package/types/element/typeChecks.d.ts +1 -2
  69. package/types/element/types.d.ts +2 -14
  70. package/types/excalidraw-app/data/FileSync.d.ts +0 -1
  71. package/types/excalidraw-app/data/firebase.d.ts +2 -2
  72. package/types/excalidraw-app/data/index.d.ts +5 -7
  73. package/types/excalidraw-app/data/localStorage.d.ts +1 -1
  74. package/types/keys.d.ts +3 -4
  75. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-ar-SA-json-f5bc447c49caabb08777.d.ts +2 -0
  76. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-bg-BG-json-268fa8b357a040664ce8.d.ts +2 -0
  77. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-ca-ES-json-d97ba352ad60f0797523.d.ts +2 -0
  78. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-cs-CZ-json-8461703358025fc2b6dc.d.ts +2 -0
  79. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-da-DK-json-90c6fdbbb074b61c5a20.d.ts +2 -0
  80. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-de-DE-json-0a324fb716f965b0dddf.d.ts +2 -0
  81. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-el-GR-json-60644f69d25140bb113b.d.ts +2 -0
  82. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-es-ES-json-f22bc8917f34334b9413.d.ts +2 -0
  83. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-fa-IR-json-ad9af56c2e607428ff9e.d.ts +2 -0
  84. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-fi-FI-json-dbe77c440c89e6e51a98.d.ts +2 -0
  85. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-fr-FR-json-26b2114ab3c173967573.d.ts +2 -0
  86. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-he-IL-json-6a3f5d88fc0995f20b58.d.ts +2 -0
  87. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-hi-IN-json-b9e68c32a5f7aba92b0c.d.ts +2 -0
  88. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-hu-HU-json-e52b849fa7808ab1642d.d.ts +2 -0
  89. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-id-ID-json-084ef650c8942e0a678d.d.ts +2 -0
  90. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-it-IT-json-fc098faed9756ac81bfc.d.ts +2 -0
  91. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-ja-JP-json-458325d0df58c790218d.d.ts +2 -0
  92. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-kab-KAB-json-cd5639624894a6578d48.d.ts +2 -0
  93. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-kk-KZ-json-d9ef83d6f8accb6161ac.d.ts +2 -0
  94. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-ko-KR-json-7003d57ae007abce987e.d.ts +2 -0
  95. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-lv-LV-json-c7f3087fbe25fd91d28f.d.ts +2 -0
  96. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-my-MM-json-1e9b67199208e7f3d6e4.d.ts +2 -0
  97. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-nb-NO-json-d1bd037aa6fa2661a5a5.d.ts +2 -0
  98. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-nl-NL-json-068663e2c9fdfa8b1088.d.ts +2 -0
  99. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-nn-NO-json-34ee131c5792da566465.d.ts +2 -0
  100. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-oc-FR-json-dce5cf2df80149878122.d.ts +2 -0
  101. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-pa-IN-json-8a107b529dc05d8452e0.d.ts +2 -0
  102. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-pl-PL-json-7633a9ac5a0b4b5ff7aa.d.ts +2 -0
  103. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-pt-BR-json-be80ffd0cddb3c1e247a.d.ts +2 -0
  104. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-pt-PT-json-010c0841415e6f5c853f.d.ts +2 -0
  105. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-ro-RO-json-81924c28265a0b32d1d8.d.ts +2 -0
  106. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-ru-RU-json-d4f396d603c2d30806a5.d.ts +2 -0
  107. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-sk-SK-json-8d26227b4ce6d0d9894d.d.ts +2 -0
  108. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-sv-SE-json-bf6597f23dc8825ed382.d.ts +2 -0
  109. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-tr-TR-json-5a4dc201a6382783d8ee.d.ts +2 -0
  110. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-uk-UA-json-cf7be568bf38b167c01e.d.ts +2 -0
  111. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-zh-CN-json-04ce279401fdeb64c96c.d.ts +2 -0
  112. package/types/packages/excalidraw/dist/excalidraw-assets-dev/i18n-zh-TW-json-2cf881330938bf6bbb93.d.ts +2 -0
  113. package/types/packages/excalidraw/dist/excalidraw-assets-dev/image-5ccf8800f7bd347d72ef.d.ts +0 -0
  114. package/types/packages/excalidraw/dist/excalidraw-assets-dev/image-bd6a627ff1bbdbae8366.d.ts +0 -0
  115. package/types/packages/excalidraw/dist/excalidraw-assets-dev/image-cfb39fdd62f69e9e3a6e.d.ts +0 -0
  116. package/types/packages/excalidraw/dist/excalidraw-assets-dev/vendor-73ece7f2b1768ce96827.d.ts +0 -0
  117. package/types/packages/excalidraw/dist/excalidraw-assets-dev/vendor-ac67d7e09cdab8faffe3.d.ts +0 -0
  118. package/types/packages/excalidraw/dist/excalidraw-assets-dev/vendor-b50c1ad3339b726756c2.d.ts +0 -0
  119. package/types/packages/utils.d.ts +1 -1
  120. package/types/renderer/renderElement.d.ts +2 -3
  121. package/types/renderer/renderScene.d.ts +2 -3
  122. package/types/scene/export.d.ts +1 -2
  123. package/types/scene/types.d.ts +3 -4
  124. package/types/shapes.d.ts +1 -5
  125. package/types/types.d.ts +3 -24
  126. package/types/zindex.d.ts +2 -2
  127. package/dist/excalidraw-assets-dev/i18n-de-DE-json-32a0c6840217959c613d.js +0 -22
  128. package/dist/excalidraw-assets-dev/i18n-es-ES-json-e9fa5e81b395ea04cf35.js +0 -22
  129. package/dist/excalidraw-assets-dev/i18n-he-IL-json-9f9592408d2171d94d28.js +0 -22
  130. package/dist/excalidraw-assets-dev/i18n-kk-KZ-json-a7087f74220ab6202b31.js +0 -22
@@ -294,7 +294,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
294
294
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
295
295
 
296
296
  "use strict";
297
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @license © 2020 Google LLC. Licensed under the Apache License, Version 2.0.\n/**\n * Opens a directory from disk using the legacy\n * `<input type=\"file\" webkitdirectory>` method.\n * @type { typeof import(\"../../index\").directoryOpen }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async(e=[{}])=>(Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise(((t,r)=>{const i=document.createElement(\"input\");\n// ToDo: Remove this workaround once\n// https://github.com/whatwg/html/issues/6376 is specified and supported.\nlet c;i.type=\"file\",i.webkitdirectory=!0;const l=()=>c(r);e[0].legacySetup&&(c=e[0].legacySetup(t,l,i)),i.addEventListener(\"change\",(()=>{\"function\"==typeof c&&c();let r=Array.from(i.files);e[0].recursive||(r=r.filter((e=>2===e.webkitRelativePath.split(\"/\").length))),t(r)})),i.click()}))));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZGlyZWN0b3J5LW9wZW4ubWpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLGlFQUFlLFdBQVcsc0ZBQXNGO0FBQ2hIO0FBQ0E7QUFDQSxNQUFNLG1DQUFtQyxpQkFBaUIsZ0ZBQWdGLDBCQUEwQiwwQkFBMEIsbUZBQW1GLGFBQWEsR0FBRyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGR3ZWxsZS9icm93c2VyLWZzLWFjY2Vzcy9kaXN0L2xlZ2FjeS9kaXJlY3Rvcnktb3Blbi5tanM/MTg2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIEBsaWNlbnNlIMKpIDIwMjAgR29vZ2xlIExMQy4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC5cbi8qKlxuICogT3BlbnMgYSBkaXJlY3RvcnkgZnJvbSBkaXNrIHVzaW5nIHRoZSBsZWdhY3lcbiAqIGA8aW5wdXQgdHlwZT1cImZpbGVcIiB3ZWJraXRkaXJlY3Rvcnk+YCBtZXRob2QuXG4gKiBAdHlwZSB7IHR5cGVvZiBpbXBvcnQoXCIuLi8uLi9pbmRleFwiKS5kaXJlY3RvcnlPcGVuIH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMoZT1be31dKT0+KEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksZVswXS5yZWN1cnNpdmU9ZVswXS5yZWN1cnNpdmV8fCExLG5ldyBQcm9taXNlKCgodCxyKT0+e2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuLy8gVG9EbzogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBvbmNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzYzNzYgaXMgc3BlY2lmaWVkIGFuZCBzdXBwb3J0ZWQuXG5sZXQgYztpLnR5cGU9XCJmaWxlXCIsaS53ZWJraXRkaXJlY3Rvcnk9ITA7Y29uc3QgbD0oKT0+YyhyKTtlWzBdLmxlZ2FjeVNldHVwJiYoYz1lWzBdLmxlZ2FjeVNldHVwKHQsbCxpKSksaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsKCgpPT57XCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYygpO2xldCByPUFycmF5LmZyb20oaS5maWxlcyk7ZVswXS5yZWN1cnNpdmV8fChyPXIuZmlsdGVyKChlPT4yPT09ZS53ZWJraXRSZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCkpKSx0KHIpfSkpLGkuY2xpY2soKX0pKSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/browser-fs-access/dist/legacy/directory-open.mjs\n");
297
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @license © 2020 Google LLC. Licensed under the Apache License, Version 2.0.\n/**\n * Opens a directory from disk using the legacy\n * `<input type=\"file\" webkitdirectory>` method.\n * @type { typeof import(\"../../index\").directoryOpen }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async(e=[{}])=>(Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise(((t,r)=>{const i=document.createElement(\"input\");i.type=\"file\",i.webkitdirectory=!0;const c=e=>{\"function\"==typeof l&&l(),t(e)},l=e[0].legacySetup&&e[0].legacySetup(c,(()=>l(r)),i);i.addEventListener(\"change\",(()=>{c(i.multiple?Array.from(i.files):i.files[0])})),i.addEventListener(\"change\",(()=>{let t=Array.from(i.files);e[0].recursive||(t=t.filter((e=>2===e.webkitRelativePath.split(\"/\").length))),c(t)})),i.click()}))));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZGlyZWN0b3J5LW9wZW4ubWpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLGlFQUFlLFdBQVcsc0ZBQXNGLHdDQUF3QyxtQ0FBbUMsWUFBWSwrQkFBK0Isc0RBQXNELGtDQUFrQyw2Q0FBNkMscUNBQXFDLDBCQUEwQixtRkFBbUYsYUFBYSxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZHdlbGxlL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvbGVnYWN5L2RpcmVjdG9yeS1vcGVuLm1qcz8xODY1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gQGxpY2Vuc2UgwqkgMjAyMCBHb29nbGUgTExDLiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLlxuLyoqXG4gKiBPcGVucyBhIGRpcmVjdG9yeSBmcm9tIGRpc2sgdXNpbmcgdGhlIGxlZ2FjeVxuICogYDxpbnB1dCB0eXBlPVwiZmlsZVwiIHdlYmtpdGRpcmVjdG9yeT5gIG1ldGhvZC5cbiAqIEB0eXBlIHsgdHlwZW9mIGltcG9ydChcIi4uLy4uL2luZGV4XCIpLmRpcmVjdG9yeU9wZW4gfVxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyhlPVt7fV0pPT4oQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxlWzBdLnJlY3Vyc2l2ZT1lWzBdLnJlY3Vyc2l2ZXx8ITEsbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7aS50eXBlPVwiZmlsZVwiLGkud2Via2l0ZGlyZWN0b3J5PSEwO2NvbnN0IGM9ZT0+e1wiZnVuY3Rpb25cIj09dHlwZW9mIGwmJmwoKSx0KGUpfSxsPWVbMF0ubGVnYWN5U2V0dXAmJmVbMF0ubGVnYWN5U2V0dXAoYywoKCk9PmwocikpLGkpO2kuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCgoKT0+e2MoaS5tdWx0aXBsZT9BcnJheS5mcm9tKGkuZmlsZXMpOmkuZmlsZXNbMF0pfSkpLGkuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCgoKT0+e2xldCB0PUFycmF5LmZyb20oaS5maWxlcyk7ZVswXS5yZWN1cnNpdmV8fCh0PXQuZmlsdGVyKChlPT4yPT09ZS53ZWJraXRSZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCkpKSxjKHQpfSkpLGkuY2xpY2soKX0pKSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/browser-fs-access/dist/legacy/directory-open.mjs\n");
298
298
 
299
299
  /***/ }),
300
300
 
@@ -305,7 +305,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
305
305
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
306
306
 
307
307
  "use strict";
308
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @license © 2020 Google LLC. Licensed under the Apache License, Version 2.0.\n/**\n * Opens a file from disk using the legacy `<input type=\"file\">` method.\n * @type { typeof import(\"../../index\").fileOpen }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async(e=[{}])=>(Array.isArray(e)||(e=[e]),new Promise(((t,n)=>{const i=document.createElement(\"input\");i.type=\"file\";const l=[...e.map((e=>e.mimeTypes||[])).join(),e.map((e=>e.extensions||[])).join()].join();\n// ToDo: Remove this workaround once\n// https://github.com/whatwg/html/issues/6376 is specified and supported.\nlet c;i.multiple=e[0].multiple||!1,\n// Empty string allows everything.\ni.accept=l||\"\";const a=()=>c(n);e[0].legacySetup&&(c=e[0].legacySetup(t,a,i)),i.addEventListener(\"change\",(()=>{\"function\"==typeof c&&c(),t(i.multiple?Array.from(i.files):i.files[0])})),i.click()}))));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZmlsZS1vcGVuLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsaUVBQWUsV0FBVyxvREFBb0Qsd0NBQXdDLGNBQWM7QUFDcEk7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLGVBQWUsaUJBQWlCLGdGQUFnRix1RUFBdUUsYUFBYSxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZHdlbGxlL2Jyb3dzZXItZnMtYWNjZXNzL2Rpc3QvbGVnYWN5L2ZpbGUtb3Blbi5tanM/MGI3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIEBsaWNlbnNlIMKpIDIwMjAgR29vZ2xlIExMQy4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC5cbi8qKlxuICogT3BlbnMgYSBmaWxlIGZyb20gZGlzayB1c2luZyB0aGUgbGVnYWN5IGA8aW5wdXQgdHlwZT1cImZpbGVcIj5gIG1ldGhvZC5cbiAqIEB0eXBlIHsgdHlwZW9mIGltcG9ydChcIi4uLy4uL2luZGV4XCIpLmZpbGVPcGVuIH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMoZT1be31dKT0+KEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksbmV3IFByb21pc2UoKCh0LG4pPT57Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7aS50eXBlPVwiZmlsZVwiO2NvbnN0IGw9Wy4uLmUubWFwKChlPT5lLm1pbWVUeXBlc3x8W10pKS5qb2luKCksZS5tYXAoKGU9PmUuZXh0ZW5zaW9uc3x8W10pKS5qb2luKCldLmpvaW4oKTtcbi8vIFRvRG86IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgb25jZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy82Mzc2IGlzIHNwZWNpZmllZCBhbmQgc3VwcG9ydGVkLlxubGV0IGM7aS5tdWx0aXBsZT1lWzBdLm11bHRpcGxlfHwhMSxcbi8vIEVtcHR5IHN0cmluZyBhbGxvd3MgZXZlcnl0aGluZy5cbmkuYWNjZXB0PWx8fFwiXCI7Y29uc3QgYT0oKT0+YyhuKTtlWzBdLmxlZ2FjeVNldHVwJiYoYz1lWzBdLmxlZ2FjeVNldHVwKHQsYSxpKSksaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsKCgpPT57XCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYygpLHQoaS5tdWx0aXBsZT9BcnJheS5mcm9tKGkuZmlsZXMpOmkuZmlsZXNbMF0pfSkpLGkuY2xpY2soKX0pKSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/browser-fs-access/dist/legacy/file-open.mjs\n");
308
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @license © 2020 Google LLC. Licensed under the Apache License, Version 2.0.\n/**\n * Opens a file from disk using the legacy `<input type=\"file\">` method.\n * @type { typeof import(\"../../index\").fileOpen }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async(e=[{}])=>(Array.isArray(e)||(e=[e]),new Promise(((t,n)=>{const i=document.createElement(\"input\");i.type=\"file\";const c=[...e.map((e=>e.mimeTypes||[])).join(),e.map((e=>e.extensions||[])).join()].join();i.multiple=e[0].multiple||!1,\n// Empty string allows everything.\ni.accept=c||\"\";const l=e=>{\"function\"==typeof a&&a(),t(e)},a=e[0].legacySetup&&e[0].legacySetup(l,(()=>a(n)),i);i.addEventListener(\"change\",(()=>{l(i.multiple?Array.from(i.files):i.files[0])})),i.click()}))));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZmlsZS1vcGVuLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsaUVBQWUsV0FBVyxvREFBb0Qsd0NBQXdDLGNBQWMsMkZBQTJGO0FBQy9OO0FBQ0EsZUFBZSxZQUFZLCtCQUErQixzREFBc0Qsa0NBQWtDLDZDQUE2QyxhQUFhLEdBQUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZmlsZS1vcGVuLm1qcz8wYjcwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gQGxpY2Vuc2UgwqkgMjAyMCBHb29nbGUgTExDLiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLlxuLyoqXG4gKiBPcGVucyBhIGZpbGUgZnJvbSBkaXNrIHVzaW5nIHRoZSBsZWdhY3kgYDxpbnB1dCB0eXBlPVwiZmlsZVwiPmAgbWV0aG9kLlxuICogQHR5cGUgeyB0eXBlb2YgaW1wb3J0KFwiLi4vLi4vaW5kZXhcIikuZmlsZU9wZW4gfVxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyhlPVt7fV0pPT4oQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuZXcgUHJvbWlzZSgoKHQsbik9Pntjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtpLnR5cGU9XCJmaWxlXCI7Y29uc3QgYz1bLi4uZS5tYXAoKGU9PmUubWltZVR5cGVzfHxbXSkpLmpvaW4oKSxlLm1hcCgoZT0+ZS5leHRlbnNpb25zfHxbXSkpLmpvaW4oKV0uam9pbigpO2kubXVsdGlwbGU9ZVswXS5tdWx0aXBsZXx8ITEsXG4vLyBFbXB0eSBzdHJpbmcgYWxsb3dzIGV2ZXJ5dGhpbmcuXG5pLmFjY2VwdD1jfHxcIlwiO2NvbnN0IGw9ZT0+e1wiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEoKSx0KGUpfSxhPWVbMF0ubGVnYWN5U2V0dXAmJmVbMF0ubGVnYWN5U2V0dXAobCwoKCk9PmEobikpLGkpO2kuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCgoKT0+e2woaS5tdWx0aXBsZT9BcnJheS5mcm9tKGkuZmlsZXMpOmkuZmlsZXNbMF0pfSkpLGkuY2xpY2soKX0pKSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/browser-fs-access/dist/legacy/file-open.mjs\n");
309
309
 
310
310
  /***/ }),
311
311
 
@@ -316,18 +316,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
316
316
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
317
317
 
318
318
  "use strict";
319
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @license © 2020 Google LLC. Licensed under the Apache License, Version 2.0.\n/**\n * Saves a file to disk using the legacy `<a download>` method.\n * @type { typeof import(\"../../index\").fileSave }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async(e,t={})=>{Array.isArray(t)&&(t=t[0]);const c=document.createElement(\"a\");\n// ToDo: Remove this workaround once\n// https://github.com/whatwg/html/issues/6376 is specified and supported.\nlet r;c.download=t.fileName||\"Untitled\",c.href=URL.createObjectURL(e);const l=()=>r(reject);return t.legacySetup&&(r=t[0].legacySetup(resolve,l,c)),c.addEventListener(\"click\",(()=>{\"function\"==typeof r&&r(),\n// `setTimeout()` due to\n// https://github.com/LLK/scratch-gui/issues/1783#issuecomment-426286393\nsetTimeout((()=>URL.revokeObjectURL(c.href)),3e4)})),c.click(),null});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZmlsZS1zYXZlLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsaUVBQWUsWUFBWSxJQUFJLDJCQUEyQjtBQUMxRDtBQUNBO0FBQ0EsTUFBTSxnRUFBZ0Usc0JBQXNCLHlGQUF5RjtBQUNyTDtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGR3ZWxsZS9icm93c2VyLWZzLWFjY2Vzcy9kaXN0L2xlZ2FjeS9maWxlLXNhdmUubWpzPzE2Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBAbGljZW5zZSDCqSAyMDIwIEdvb2dsZSBMTEMuIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4vKipcbiAqIFNhdmVzIGEgZmlsZSB0byBkaXNrIHVzaW5nIHRoZSBsZWdhY3kgYDxhIGRvd25sb2FkPmAgbWV0aG9kLlxuICogQHR5cGUgeyB0eXBlb2YgaW1wb3J0KFwiLi4vLi4vaW5kZXhcIikuZmlsZVNhdmUgfVxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyhlLHQ9e30pPT57QXJyYXkuaXNBcnJheSh0KSYmKHQ9dFswXSk7Y29uc3QgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbi8vIFRvRG86IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgb25jZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy82Mzc2IGlzIHNwZWNpZmllZCBhbmQgc3VwcG9ydGVkLlxubGV0IHI7Yy5kb3dubG9hZD10LmZpbGVOYW1lfHxcIlVudGl0bGVkXCIsYy5ocmVmPVVSTC5jcmVhdGVPYmplY3RVUkwoZSk7Y29uc3QgbD0oKT0+cihyZWplY3QpO3JldHVybiB0LmxlZ2FjeVNldHVwJiYocj10WzBdLmxlZ2FjeVNldHVwKHJlc29sdmUsbCxjKSksYy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoKCk9PntcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZyKCksXG4vLyBgc2V0VGltZW91dCgpYCBkdWUgdG9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9MTEsvc2NyYXRjaC1ndWkvaXNzdWVzLzE3ODMjaXNzdWVjb21tZW50LTQyNjI4NjM5M1xuc2V0VGltZW91dCgoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwoYy5ocmVmKSksM2U0KX0pKSxjLmNsaWNrKCksbnVsbH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/browser-fs-access/dist/legacy/file-save.mjs\n");
320
-
321
- /***/ }),
322
-
323
- /***/ "../../../node_modules/browser-image-compression/dist/browser-image-compression.mjs":
324
- /*!******************************************************************************************!*\
325
- !*** ../../../node_modules/browser-image-compression/dist/browser-image-compression.mjs ***!
326
- \******************************************************************************************/
327
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
328
-
329
- "use strict";
330
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ imageCompression)\n/* harmony export */ });\n/**\n * Browser Image Compression\n * v1.0.16\n * by Donald <donaldcwl@gmail.com>\n * https://github.com/Donaldcwl/browser-image-compression\n */\n\nfunction _mergeNamespaces(e,r){return r.forEach((function(r){Object.keys(r).forEach((function(t){if(\"default\"!==t&&!(t in e)){var a=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:function(){return r[t]}})}}))})),Object.freeze(e)}function ownKeys$1(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function _objectSpread2(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys$1(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys$1(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _slicedToArray(e,r){return _arrayWithHoles(e)||_iterableToArrayLimit(e,r)||_unsupportedIterableToArray(e,r)||_nonIterableRest()}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _iterableToArrayLimit(e,r){var t=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=t){var a,i,s=[],c=!0,l=!1;try{for(t=t.call(e);!(c=(a=t.next()).done)&&(s.push(a.value),!r||s.length!==r);c=!0);}catch(e){l=!0,i=e}finally{try{c||null==t.return||t.return()}finally{if(l)throw i}}return s}}function _unsupportedIterableToArray(e,r){if(e){if(\"string\"==typeof e)return _arrayLikeToArray(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(e):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,r):void 0}}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,a=new Array(r);t<r;t++)a[t]=e[t];return a}function _nonIterableRest(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var commonjsGlobal=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function createCommonjsModule(e){var r={exports:{}};return e(r,r.exports),r.exports}var check=function(e){return e&&e.Math==Math&&e},global$1=check(\"object\"==typeof globalThis&&globalThis)||check(\"object\"==typeof window&&window)||check(\"object\"==typeof self&&self)||check(\"object\"==typeof commonjsGlobal&&commonjsGlobal)||function(){return this}()||Function(\"return this\")(),isPure=!1,setGlobal=function(e,r){try{Object.defineProperty(global$1,e,{value:r,configurable:!0,writable:!0})}catch(t){global$1[e]=r}return r},SHARED=\"__core-js_shared__\",store$1=global$1[SHARED]||setGlobal(SHARED,{}),sharedStore=store$1,shared=createCommonjsModule((function(e){(e.exports=function(e,r){return sharedStore[e]||(sharedStore[e]=void 0!==r?r:{})})(\"versions\",[]).push({version:\"3.18.0\",mode:\"global\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),requireObjectCoercible=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e},toObject=function(e){return Object(requireObjectCoercible(e))},hasOwnProperty={}.hasOwnProperty,has$1=Object.hasOwn||function hasOwn(e,r){return hasOwnProperty.call(toObject(e),r)},id=0,postfix=Math.random(),uid=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++id+postfix).toString(36)},isCallable=function(e){return\"function\"==typeof e},aFunction=function(e){return isCallable(e)?e:void 0},getBuiltIn=function(e,r){return arguments.length<2?aFunction(global$1[e]):global$1[e]&&global$1[e][r]},engineUserAgent=getBuiltIn(\"navigator\",\"userAgent\")||\"\",process$3=global$1.process,Deno=global$1.Deno,versions=process$3&&process$3.versions||Deno&&Deno.version,v8=versions&&versions.v8,match,version;v8?(match=v8.split(\".\"),version=match[0]<4?1:match[0]+match[1]):engineUserAgent&&(match=engineUserAgent.match(/Edge\\/(\\d+)/),(!match||match[1]>=74)&&(match=engineUserAgent.match(/Chrome\\/(\\d+)/),match&&(version=match[1])));var engineV8Version=version&&+version,fails=function(e){try{return!!e()}catch(e){return!0}},nativeSymbol=!!Object.getOwnPropertySymbols&&!fails((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&engineV8Version&&engineV8Version<41})),useSymbolAsUid=nativeSymbol&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,WellKnownSymbolsStore=shared(\"wks\"),Symbol$1=global$1.Symbol,createWellKnownSymbol=useSymbolAsUid?Symbol$1:Symbol$1&&Symbol$1.withoutSetter||uid,wellKnownSymbol=function(e){return has$1(WellKnownSymbolsStore,e)&&(nativeSymbol||\"string\"==typeof WellKnownSymbolsStore[e])||(nativeSymbol&&has$1(Symbol$1,e)?WellKnownSymbolsStore[e]=Symbol$1[e]:WellKnownSymbolsStore[e]=createWellKnownSymbol(\"Symbol.\"+e)),WellKnownSymbolsStore[e]},TO_STRING_TAG$4=wellKnownSymbol(\"toStringTag\"),test$1={};test$1[TO_STRING_TAG$4]=\"z\";var toStringTagSupport=\"[object z]\"===String(test$1),descriptors=!fails((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),isObject=function(e){return\"object\"==typeof e?null!==e:isCallable(e)},document$3=global$1.document,EXISTS$1=isObject(document$3)&&isObject(document$3.createElement),documentCreateElement=function(e){return EXISTS$1?document$3.createElement(e):{}},ie8DomDefine=!descriptors&&!fails((function(){return 7!=Object.defineProperty(documentCreateElement(\"div\"),\"a\",{get:function(){return 7}}).a})),anObject=function(e){if(isObject(e))return e;throw TypeError(String(e)+\" is not an object\")},isSymbol=useSymbolAsUid?function(e){return\"symbol\"==typeof e}:function(e){var r=getBuiltIn(\"Symbol\");return isCallable(r)&&Object(e)instanceof r},tryToString=function(e){try{return String(e)}catch(e){return\"Object\"}},aCallable=function(e){if(isCallable(e))return e;throw TypeError(tryToString(e)+\" is not a function\")},getMethod=function(e,r){var t=e[r];return null==t?void 0:aCallable(t)},ordinaryToPrimitive=function(e,r){var t,a;if(\"string\"===r&&isCallable(t=e.toString)&&!isObject(a=t.call(e)))return a;if(isCallable(t=e.valueOf)&&!isObject(a=t.call(e)))return a;if(\"string\"!==r&&isCallable(t=e.toString)&&!isObject(a=t.call(e)))return a;throw TypeError(\"Can't convert object to primitive value\")},TO_PRIMITIVE=wellKnownSymbol(\"toPrimitive\"),toPrimitive=function(e,r){if(!isObject(e)||isSymbol(e))return e;var t,a=getMethod(e,TO_PRIMITIVE);if(a){if(void 0===r&&(r=\"default\"),t=a.call(e,r),!isObject(t)||isSymbol(t))return t;throw TypeError(\"Can't convert object to primitive value\")}return void 0===r&&(r=\"number\"),ordinaryToPrimitive(e,r)},toPropertyKey=function(e){var r=toPrimitive(e,\"string\");return isSymbol(r)?r:String(r)},$defineProperty=Object.defineProperty,f$5=descriptors?$defineProperty:function defineProperty(e,r,t){if(anObject(e),r=toPropertyKey(r),anObject(t),ie8DomDefine)try{return $defineProperty(e,r,t)}catch(e){}if(\"get\"in t||\"set\"in t)throw TypeError(\"Accessors not supported\");return\"value\"in t&&(e[r]=t.value),e},objectDefineProperty={f:f$5},createPropertyDescriptor=function(e,r){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:r}},createNonEnumerableProperty=descriptors?function(e,r,t){return objectDefineProperty.f(e,r,createPropertyDescriptor(1,t))}:function(e,r,t){return e[r]=t,e},functionToString=Function.toString;isCallable(sharedStore.inspectSource)||(sharedStore.inspectSource=function(e){return functionToString.call(e)});var inspectSource=sharedStore.inspectSource,WeakMap$1=global$1.WeakMap,nativeWeakMap=isCallable(WeakMap$1)&&/native code/.test(inspectSource(WeakMap$1)),keys$2=shared(\"keys\"),sharedKey=function(e){return keys$2[e]||(keys$2[e]=uid(e))},hiddenKeys$1={},OBJECT_ALREADY_INITIALIZED=\"Object already initialized\",WeakMap=global$1.WeakMap,set$2,get$1,has,enforce=function(e){return has(e)?get$1(e):set$2(e,{})},getterFor=function(e){return function(r){var t;if(!isObject(r)||(t=get$1(r)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return t}};if(nativeWeakMap||sharedStore.state){var store=sharedStore.state||(sharedStore.state=new WeakMap),wmget=store.get,wmhas=store.has,wmset=store.set;set$2=function(e,r){if(wmhas.call(store,e))throw new TypeError(OBJECT_ALREADY_INITIALIZED);return r.facade=e,wmset.call(store,e,r),r},get$1=function(e){return wmget.call(store,e)||{}},has=function(e){return wmhas.call(store,e)}}else{var STATE=sharedKey(\"state\");hiddenKeys$1[STATE]=!0,set$2=function(e,r){if(has$1(e,STATE))throw new TypeError(OBJECT_ALREADY_INITIALIZED);return r.facade=e,createNonEnumerableProperty(e,STATE,r),r},get$1=function(e){return has$1(e,STATE)?e[STATE]:{}},has=function(e){return has$1(e,STATE)}}var internalState={set:set$2,get:get$1,has:has,enforce:enforce,getterFor:getterFor},FunctionPrototype$1=Function.prototype,getDescriptor=descriptors&&Object.getOwnPropertyDescriptor,EXISTS=has$1(FunctionPrototype$1,\"name\"),PROPER=EXISTS&&\"something\"===function something(){}.name,CONFIGURABLE=EXISTS&&(!descriptors||descriptors&&getDescriptor(FunctionPrototype$1,\"name\").configurable),functionName={EXISTS:EXISTS,PROPER:PROPER,CONFIGURABLE:CONFIGURABLE},redefine=createCommonjsModule((function(e){var r=functionName.CONFIGURABLE,t=internalState.get,a=internalState.enforce,i=String(String).split(\"String\");(e.exports=function(e,t,s,c){var l,u=!!c&&!!c.unsafe,p=!!c&&!!c.enumerable,d=!!c&&!!c.noTargetGet,h=c&&void 0!==c.name?c.name:t;isCallable(s)&&(\"Symbol(\"===String(h).slice(0,7)&&(h=\"[\"+String(h).replace(/^Symbol\\(([^)]*)\\)/,\"$1\")+\"]\"),(!has$1(s,\"name\")||r&&s.name!==h)&&createNonEnumerableProperty(s,\"name\",h),(l=a(s)).source||(l.source=i.join(\"string\"==typeof h?h:\"\"))),e!==global$1?(u?!d&&e[t]&&(p=!0):delete e[t],p?e[t]=s:createNonEnumerableProperty(e,t,s)):p?e[t]=s:setGlobal(t,s)})(Function.prototype,\"toString\",(function toString(){return isCallable(this)&&t(this).source||inspectSource(this)}))})),toString$1={}.toString,classofRaw=function(e){return toString$1.call(e).slice(8,-1)},TO_STRING_TAG$3=wellKnownSymbol(\"toStringTag\"),CORRECT_ARGUMENTS=\"Arguments\"==classofRaw(function(){return arguments}()),tryGet=function(e,r){try{return e[r]}catch(e){}},classof=toStringTagSupport?classofRaw:function(e){var r,t,a;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(t=tryGet(r=Object(e),TO_STRING_TAG$3))?t:CORRECT_ARGUMENTS?classofRaw(r):\"Object\"==(a=classofRaw(r))&&isCallable(r.callee)?\"Arguments\":a},objectToString=toStringTagSupport?{}.toString:function toString(){return\"[object \"+classof(this)+\"]\"};toStringTagSupport||redefine(Object.prototype,\"toString\",objectToString,{unsafe:!0});var $propertyIsEnumerable={}.propertyIsEnumerable,getOwnPropertyDescriptor$4=Object.getOwnPropertyDescriptor,NASHORN_BUG=getOwnPropertyDescriptor$4&&!$propertyIsEnumerable.call({1:2},1),f$4=NASHORN_BUG?function propertyIsEnumerable(e){var r=getOwnPropertyDescriptor$4(this,e);return!!r&&r.enumerable}:$propertyIsEnumerable,objectPropertyIsEnumerable={f:f$4},split=\"\".split,indexedObject=fails((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==classofRaw(e)?split.call(e,\"\"):Object(e)}:Object,toIndexedObject=function(e){return indexedObject(requireObjectCoercible(e))},$getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor,f$3=descriptors?$getOwnPropertyDescriptor:function getOwnPropertyDescriptor(e,r){if(e=toIndexedObject(e),r=toPropertyKey(r),ie8DomDefine)try{return $getOwnPropertyDescriptor(e,r)}catch(e){}if(has$1(e,r))return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(e,r),e[r])},objectGetOwnPropertyDescriptor={f:f$3},ceil=Math.ceil,floor$7=Math.floor,toInteger=function(e){return isNaN(e=+e)?0:(e>0?floor$7:ceil)(e)},min$6=Math.min,toLength=function(e){return e>0?min$6(toInteger(e),9007199254740991):0},max$2=Math.max,min$5=Math.min,toAbsoluteIndex=function(e,r){var t=toInteger(e);return t<0?max$2(t+r,0):min$5(t,r)},createMethod$5=function(e){return function(r,t,a){var i,s=toIndexedObject(r),c=toLength(s.length),l=toAbsoluteIndex(a,c);if(e&&t!=t){for(;c>l;)if((i=s[l++])!=i)return!0}else for(;c>l;l++)if((e||l in s)&&s[l]===t)return e||l||0;return!e&&-1}},arrayIncludes={includes:createMethod$5(!0),indexOf:createMethod$5(!1)},indexOf=arrayIncludes.indexOf,objectKeysInternal=function(e,r){var t,a=toIndexedObject(e),i=0,s=[];for(t in a)!has$1(hiddenKeys$1,t)&&has$1(a,t)&&s.push(t);for(;r.length>i;)has$1(a,t=r[i++])&&(~indexOf(s,t)||s.push(t));return s},enumBugKeys=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],hiddenKeys=enumBugKeys.concat(\"length\",\"prototype\"),f$2=Object.getOwnPropertyNames||function getOwnPropertyNames(e){return objectKeysInternal(e,hiddenKeys)},objectGetOwnPropertyNames={f:f$2},f$1=Object.getOwnPropertySymbols,objectGetOwnPropertySymbols={f:f$1},ownKeys=getBuiltIn(\"Reflect\",\"ownKeys\")||function ownKeys(e){var r=objectGetOwnPropertyNames.f(anObject(e)),t=objectGetOwnPropertySymbols.f;return t?r.concat(t(e)):r},copyConstructorProperties=function(e,r){for(var t=ownKeys(r),a=objectDefineProperty.f,i=objectGetOwnPropertyDescriptor.f,s=0;s<t.length;s++){var c=t[s];has$1(e,c)||a(e,c,i(r,c))}},replacement=/#|\\.prototype\\./,isForced=function(e,r){var t=data[normalize(e)];return t==POLYFILL||t!=NATIVE&&(isCallable(r)?fails(r):!!r)},normalize=isForced.normalize=function(e){return String(e).replace(replacement,\".\").toLowerCase()},data=isForced.data={},NATIVE=isForced.NATIVE=\"N\",POLYFILL=isForced.POLYFILL=\"P\",isForced_1=isForced,getOwnPropertyDescriptor$3=objectGetOwnPropertyDescriptor.f,_export=function(e,r){var t,a,i,s,c,l=e.target,u=e.global,p=e.stat;if(t=u?global$1:p?global$1[l]||setGlobal(l,{}):(global$1[l]||{}).prototype)for(a in r){if(s=r[a],i=e.noTargetGet?(c=getOwnPropertyDescriptor$3(t,a))&&c.value:t[a],!isForced_1(u?a:l+(p?\".\":\"#\")+a,e.forced)&&void 0!==i){if(typeof s==typeof i)continue;copyConstructorProperties(s,i)}(e.sham||i&&i.sham)&&createNonEnumerableProperty(s,\"sham\",!0),redefine(t,a,s,e)}},nativePromiseConstructor=global$1.Promise,redefineAll=function(e,r,t){for(var a in r)redefine(e,a,r[a],t);return e},aPossiblePrototype=function(e){if(\"object\"==typeof e||isCallable(e))return e;throw TypeError(\"Can't set \"+String(e)+\" as a prototype\")},objectSetPrototypeOf=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,r=!1,t={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(t,[]),r=t instanceof Array}catch(e){}return function setPrototypeOf(t,a){return anObject(t),aPossiblePrototype(a),r?e.call(t,a):t.__proto__=a,t}}():void 0),defineProperty$5=objectDefineProperty.f,TO_STRING_TAG$2=wellKnownSymbol(\"toStringTag\"),setToStringTag=function(e,r,t){e&&!has$1(e=t?e:e.prototype,TO_STRING_TAG$2)&&defineProperty$5(e,TO_STRING_TAG$2,{configurable:!0,value:r})},SPECIES$6=wellKnownSymbol(\"species\"),setSpecies=function(e){var r=getBuiltIn(e),t=objectDefineProperty.f;descriptors&&r&&!r[SPECIES$6]&&t(r,SPECIES$6,{configurable:!0,get:function(){return this}})},anInstance=function(e,r,t){if(e instanceof r)return e;throw TypeError(\"Incorrect \"+(t?t+\" \":\"\")+\"invocation\")},iterators={},ITERATOR$8=wellKnownSymbol(\"iterator\"),ArrayPrototype$1=Array.prototype,isArrayIteratorMethod=function(e){return void 0!==e&&(iterators.Array===e||ArrayPrototype$1[ITERATOR$8]===e)},functionBindContext=function(e,r,t){if(aCallable(e),void 0===r)return e;switch(t){case 0:return function(){return e.call(r)};case 1:return function(t){return e.call(r,t)};case 2:return function(t,a){return e.call(r,t,a)};case 3:return function(t,a,i){return e.call(r,t,a,i)}}return function(){return e.apply(r,arguments)}},ITERATOR$7=wellKnownSymbol(\"iterator\"),getIteratorMethod=function(e){if(null!=e)return getMethod(e,ITERATOR$7)||getMethod(e,\"@@iterator\")||iterators[classof(e)]},getIterator=function(e,r){var t=arguments.length<2?getIteratorMethod(e):r;if(aCallable(t))return anObject(t.call(e));throw TypeError(String(e)+\" is not iterable\")},iteratorClose=function(e,r,t){var a,i;anObject(e);try{if(!(a=getMethod(e,\"return\"))){if(\"throw\"===r)throw t;return t}a=a.call(e)}catch(e){i=!0,a=e}if(\"throw\"===r)throw t;if(i)throw a;return anObject(a),t},Result=function(e,r){this.stopped=e,this.result=r},iterate=function(e,r,t){var a,i,s,c,l,u,p,d=t&&t.that,h=!(!t||!t.AS_ENTRIES),y=!(!t||!t.IS_ITERATOR),A=!(!t||!t.INTERRUPTED),g=functionBindContext(r,d,1+h+A),stop=function(e){return a&&iteratorClose(a,\"normal\",e),new Result(!0,e)},callFn=function(e){return h?(anObject(e),A?g(e[0],e[1],stop):g(e[0],e[1])):A?g(e,stop):g(e)};if(y)a=e;else{if(!(i=getIteratorMethod(e)))throw TypeError(String(e)+\" is not iterable\");if(isArrayIteratorMethod(i)){for(s=0,c=toLength(e.length);c>s;s++)if((l=callFn(e[s]))&&l instanceof Result)return l;return new Result(!1)}a=getIterator(e,i)}for(u=a.next;!(p=u.call(a)).done;){try{l=callFn(p.value)}catch(e){iteratorClose(a,\"throw\",e)}if(\"object\"==typeof l&&l&&l instanceof Result)return l}return new Result(!1)},ITERATOR$6=wellKnownSymbol(\"iterator\"),SAFE_CLOSING=!1;try{var called=0,iteratorWithReturn={next:function(){return{done:!!called++}},return:function(){SAFE_CLOSING=!0}};iteratorWithReturn[ITERATOR$6]=function(){return this},Array.from(iteratorWithReturn,(function(){throw 2}))}catch(e){}var checkCorrectnessOfIteration=function(e,r){if(!r&&!SAFE_CLOSING)return!1;var t=!1;try{var a={};a[ITERATOR$6]=function(){return{next:function(){return{done:t=!0}}}},e(a)}catch(e){}return t},empty=[],construct=getBuiltIn(\"Reflect\",\"construct\"),constructorRegExp=/^\\s*(?:class|function)\\b/,exec=constructorRegExp.exec,INCORRECT_TO_STRING=!constructorRegExp.exec((function(){})),isConstructorModern=function(e){if(!isCallable(e))return!1;try{return construct(Object,empty,e),!0}catch(e){return!1}},isConstructorLegacy=function(e){if(!isCallable(e))return!1;switch(classof(e)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}return INCORRECT_TO_STRING||!!exec.call(constructorRegExp,inspectSource(e))},isConstructor=!construct||fails((function(){var e;return isConstructorModern(isConstructorModern.call)||!isConstructorModern(Object)||!isConstructorModern((function(){e=!0}))||e}))?isConstructorLegacy:isConstructorModern,aConstructor=function(e){if(isConstructor(e))return e;throw TypeError(tryToString(e)+\" is not a constructor\")},SPECIES$5=wellKnownSymbol(\"species\"),speciesConstructor=function(e,r){var t,a=anObject(e).constructor;return void 0===a||null==(t=anObject(a)[SPECIES$5])?r:aConstructor(t)},html=getBuiltIn(\"document\",\"documentElement\"),engineIsIos=/(?:ipad|iphone|ipod).*applewebkit/i.test(engineUserAgent),engineIsNode=\"process\"==classofRaw(global$1.process),set$1=global$1.setImmediate,clear=global$1.clearImmediate,process$2=global$1.process,MessageChannel=global$1.MessageChannel,Dispatch=global$1.Dispatch,counter=0,queue={},ONREADYSTATECHANGE=\"onreadystatechange\",location,defer,channel,port;try{location=global$1.location}catch(e){}var run=function(e){if(queue.hasOwnProperty(e)){var r=queue[e];delete queue[e],r()}},runner=function(e){return function(){run(e)}},listener=function(e){run(e.data)},post=function(e){global$1.postMessage(String(e),location.protocol+\"//\"+location.host)};set$1&&clear||(set$1=function setImmediate(e){for(var r=[],t=arguments.length,a=1;t>a;)r.push(arguments[a++]);return queue[++counter]=function(){(isCallable(e)?e:Function(e)).apply(void 0,r)},defer(counter),counter},clear=function clearImmediate(e){delete queue[e]},engineIsNode?defer=function(e){process$2.nextTick(runner(e))}:Dispatch&&Dispatch.now?defer=function(e){Dispatch.now(runner(e))}:MessageChannel&&!engineIsIos?(channel=new MessageChannel,port=channel.port2,channel.port1.onmessage=listener,defer=functionBindContext(port.postMessage,port,1)):global$1.addEventListener&&isCallable(global$1.postMessage)&&!global$1.importScripts&&location&&\"file:\"!==location.protocol&&!fails(post)?(defer=post,global$1.addEventListener(\"message\",listener,!1)):defer=ONREADYSTATECHANGE in documentCreateElement(\"script\")?function(e){html.appendChild(documentCreateElement(\"script\"))[ONREADYSTATECHANGE]=function(){html.removeChild(this),run(e)}}:function(e){setTimeout(runner(e),0)});var task$1={set:set$1,clear:clear},engineIsIosPebble=/ipad|iphone|ipod/i.test(engineUserAgent)&&void 0!==global$1.Pebble,engineIsWebosWebkit=/web0s(?!.*chrome)/i.test(engineUserAgent),getOwnPropertyDescriptor$2=objectGetOwnPropertyDescriptor.f,macrotask=task$1.set,MutationObserver=global$1.MutationObserver||global$1.WebKitMutationObserver,document$2=global$1.document,process$1=global$1.process,Promise$1=global$1.Promise,queueMicrotaskDescriptor=getOwnPropertyDescriptor$2(global$1,\"queueMicrotask\"),queueMicrotask=queueMicrotaskDescriptor&&queueMicrotaskDescriptor.value,flush,head,last,notify$1,toggle,node,promise,then;queueMicrotask||(flush=function(){var e,r;for(engineIsNode&&(e=process$1.domain)&&e.exit();head;){r=head.fn,head=head.next;try{r()}catch(e){throw head?notify$1():last=void 0,e}}last=void 0,e&&e.enter()},engineIsIos||engineIsNode||engineIsWebosWebkit||!MutationObserver||!document$2?!engineIsIosPebble&&Promise$1&&Promise$1.resolve?(promise=Promise$1.resolve(void 0),promise.constructor=Promise$1,then=promise.then,notify$1=function(){then.call(promise,flush)}):notify$1=engineIsNode?function(){process$1.nextTick(flush)}:function(){macrotask.call(global$1,flush)}:(toggle=!0,node=document$2.createTextNode(\"\"),new MutationObserver(flush).observe(node,{characterData:!0}),notify$1=function(){node.data=toggle=!toggle}));var microtask=queueMicrotask||function(e){var r={fn:e,next:void 0};last&&(last.next=r),head||(head=r,notify$1()),last=r},PromiseCapability=function(e){var r,t;this.promise=new e((function(e,a){if(void 0!==r||void 0!==t)throw TypeError(\"Bad Promise constructor\");r=e,t=a})),this.resolve=aCallable(r),this.reject=aCallable(t)},f=function(e){return new PromiseCapability(e)},newPromiseCapability$1={f:f},promiseResolve=function(e,r){if(anObject(e),isObject(r)&&r.constructor===e)return r;var t=newPromiseCapability$1.f(e);return(0,t.resolve)(r),t.promise},hostReportErrors=function(e,r){var t=global$1.console;t&&t.error&&(1===arguments.length?t.error(e):t.error(e,r))},perform=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},engineIsBrowser=\"object\"==typeof window,task=task$1.set,SPECIES$4=wellKnownSymbol(\"species\"),PROMISE=\"Promise\",getInternalState$4=internalState.get,setInternalState$5=internalState.set,getInternalPromiseState=internalState.getterFor(PROMISE),NativePromisePrototype=nativePromiseConstructor&&nativePromiseConstructor.prototype,PromiseConstructor=nativePromiseConstructor,PromiseConstructorPrototype=NativePromisePrototype,TypeError$1=global$1.TypeError,document$1=global$1.document,process=global$1.process,newPromiseCapability=newPromiseCapability$1.f,newGenericPromiseCapability=newPromiseCapability,DISPATCH_EVENT=!!(document$1&&document$1.createEvent&&global$1.dispatchEvent),NATIVE_REJECTION_EVENT=isCallable(global$1.PromiseRejectionEvent),UNHANDLED_REJECTION=\"unhandledrejection\",REJECTION_HANDLED=\"rejectionhandled\",PENDING=0,FULFILLED=1,REJECTED=2,HANDLED=1,UNHANDLED=2,SUBCLASSING=!1,Internal,OwnPromiseCapability,PromiseWrapper,nativeThen,FORCED$6=isForced_1(PROMISE,(function(){var e=inspectSource(PromiseConstructor),r=e!==String(PromiseConstructor);if(!r&&66===engineV8Version)return!0;if(engineV8Version>=51&&/native code/.test(e))return!1;var t=new PromiseConstructor((function(e){e(1)})),FakePromise=function(e){e((function(){}),(function(){}))};return(t.constructor={})[SPECIES$4]=FakePromise,!(SUBCLASSING=t.then((function(){}))instanceof FakePromise)||!r&&engineIsBrowser&&!NATIVE_REJECTION_EVENT})),INCORRECT_ITERATION=FORCED$6||!checkCorrectnessOfIteration((function(e){PromiseConstructor.all(e).catch((function(){}))})),isThenable=function(e){var r;return!(!isObject(e)||!isCallable(r=e.then))&&r},notify=function(e,r){if(!e.notified){e.notified=!0;var t=e.reactions;microtask((function(){for(var a=e.value,i=e.state==FULFILLED,s=0;t.length>s;){var c,l,u,p=t[s++],d=i?p.ok:p.fail,h=p.resolve,y=p.reject,A=p.domain;try{d?(i||(e.rejection===UNHANDLED&&onHandleUnhandled(e),e.rejection=HANDLED),!0===d?c=a:(A&&A.enter(),c=d(a),A&&(A.exit(),u=!0)),c===p.promise?y(TypeError$1(\"Promise-chain cycle\")):(l=isThenable(c))?l.call(c,h,y):h(c)):y(a)}catch(e){A&&!u&&A.exit(),y(e)}}e.reactions=[],e.notified=!1,r&&!e.rejection&&onUnhandled(e)}))}},dispatchEvent=function(e,r,t){var a,i;DISPATCH_EVENT?((a=document$1.createEvent(\"Event\")).promise=r,a.reason=t,a.initEvent(e,!1,!0),global$1.dispatchEvent(a)):a={promise:r,reason:t},!NATIVE_REJECTION_EVENT&&(i=global$1[\"on\"+e])?i(a):e===UNHANDLED_REJECTION&&hostReportErrors(\"Unhandled promise rejection\",t)},onUnhandled=function(e){task.call(global$1,(function(){var r,t=e.facade,a=e.value;if(isUnhandled(e)&&(r=perform((function(){engineIsNode?process.emit(\"unhandledRejection\",a,t):dispatchEvent(UNHANDLED_REJECTION,t,a)})),e.rejection=engineIsNode||isUnhandled(e)?UNHANDLED:HANDLED,r.error))throw r.value}))},isUnhandled=function(e){return e.rejection!==HANDLED&&!e.parent},onHandleUnhandled=function(e){task.call(global$1,(function(){var r=e.facade;engineIsNode?process.emit(\"rejectionHandled\",r):dispatchEvent(REJECTION_HANDLED,r,e.value)}))},bind=function(e,r,t){return function(a){e(r,a,t)}},internalReject=function(e,r,t){e.done||(e.done=!0,t&&(e=t),e.value=r,e.state=REJECTED,notify(e,!0))},internalResolve=function(e,r,t){if(!e.done){e.done=!0,t&&(e=t);try{if(e.facade===r)throw TypeError$1(\"Promise can't be resolved itself\");var a=isThenable(r);a?microtask((function(){var t={done:!1};try{a.call(r,bind(internalResolve,t,e),bind(internalReject,t,e))}catch(r){internalReject(t,r,e)}})):(e.value=r,e.state=FULFILLED,notify(e,!1))}catch(r){internalReject({done:!1},r,e)}}};if(FORCED$6&&(PromiseConstructor=function Promise(e){anInstance(this,PromiseConstructor,PROMISE),aCallable(e),Internal.call(this);var r=getInternalState$4(this);try{e(bind(internalResolve,r),bind(internalReject,r))}catch(e){internalReject(r,e)}},PromiseConstructorPrototype=PromiseConstructor.prototype,Internal=function Promise(e){setInternalState$5(this,{type:PROMISE,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:PENDING,value:void 0})},Internal.prototype=redefineAll(PromiseConstructorPrototype,{then:function then(e,r){var t=getInternalPromiseState(this),a=newPromiseCapability(speciesConstructor(this,PromiseConstructor));return a.ok=!isCallable(e)||e,a.fail=isCallable(r)&&r,a.domain=engineIsNode?process.domain:void 0,t.parent=!0,t.reactions.push(a),t.state!=PENDING&&notify(t,!1),a.promise},catch:function(e){return this.then(void 0,e)}}),OwnPromiseCapability=function(){var e=new Internal,r=getInternalState$4(e);this.promise=e,this.resolve=bind(internalResolve,r),this.reject=bind(internalReject,r)},newPromiseCapability$1.f=newPromiseCapability=function(e){return e===PromiseConstructor||e===PromiseWrapper?new OwnPromiseCapability(e):newGenericPromiseCapability(e)},isCallable(nativePromiseConstructor)&&NativePromisePrototype!==Object.prototype)){nativeThen=NativePromisePrototype.then,SUBCLASSING||(redefine(NativePromisePrototype,\"then\",(function then(e,r){var t=this;return new PromiseConstructor((function(e,r){nativeThen.call(t,e,r)})).then(e,r)}),{unsafe:!0}),redefine(NativePromisePrototype,\"catch\",PromiseConstructorPrototype.catch,{unsafe:!0}));try{delete NativePromisePrototype.constructor}catch(e){}objectSetPrototypeOf&&objectSetPrototypeOf(NativePromisePrototype,PromiseConstructorPrototype)}_export({global:!0,wrap:!0,forced:FORCED$6},{Promise:PromiseConstructor}),setToStringTag(PromiseConstructor,PROMISE,!1),setSpecies(PROMISE),PromiseWrapper=getBuiltIn(PROMISE),_export({target:PROMISE,stat:!0,forced:FORCED$6},{reject:function reject(e){var r=newPromiseCapability(this);return r.reject.call(void 0,e),r.promise}}),_export({target:PROMISE,stat:!0,forced:FORCED$6},{resolve:function resolve(e){return promiseResolve(this,e)}}),_export({target:PROMISE,stat:!0,forced:INCORRECT_ITERATION},{all:function all(e){var r=this,t=newPromiseCapability(r),a=t.resolve,i=t.reject,s=perform((function(){var t=aCallable(r.resolve),s=[],c=0,l=1;iterate(e,(function(e){var u=c++,p=!1;s.push(void 0),l++,t.call(r,e).then((function(e){p||(p=!0,s[u]=e,--l||a(s))}),i)})),--l||a(s)}));return s.error&&i(s.value),t.promise},race:function race(e){var r=this,t=newPromiseCapability(r),a=t.reject,i=perform((function(){var i=aCallable(r.resolve);iterate(e,(function(e){i.call(r,e).then(t.resolve,a)}))}));return i.error&&a(i.value),t.promise}});var inheritIfRequired=function(e,r,t){var a,i;return objectSetPrototypeOf&&isCallable(a=r.constructor)&&a!==t&&isObject(i=a.prototype)&&i!==t.prototype&&objectSetPrototypeOf(e,i),e},objectKeys=Object.keys||function keys(e){return objectKeysInternal(e,enumBugKeys)},objectDefineProperties=descriptors?Object.defineProperties:function defineProperties(e,r){anObject(e);for(var t,a=objectKeys(r),i=a.length,s=0;i>s;)objectDefineProperty.f(e,t=a[s++],r[t]);return e},GT=\">\",LT=\"<\",PROTOTYPE$1=\"prototype\",SCRIPT=\"script\",IE_PROTO$1=sharedKey(\"IE_PROTO\"),EmptyConstructor=function(){},scriptTag=function(e){return LT+SCRIPT+GT+e+LT+\"/\"+SCRIPT+GT},NullProtoObjectViaActiveX=function(e){e.write(scriptTag(\"\")),e.close();var r=e.parentWindow.Object;return e=null,r},NullProtoObjectViaIFrame=function(){var e,r=documentCreateElement(\"iframe\"),t=\"java\"+SCRIPT+\":\";return r.style.display=\"none\",html.appendChild(r),r.src=String(t),(e=r.contentWindow.document).open(),e.write(scriptTag(\"document.F=Object\")),e.close(),e.F},activeXDocument,NullProtoObject=function(){try{activeXDocument=new ActiveXObject(\"htmlfile\")}catch(e){}NullProtoObject=\"undefined\"!=typeof document?document.domain&&activeXDocument?NullProtoObjectViaActiveX(activeXDocument):NullProtoObjectViaIFrame():NullProtoObjectViaActiveX(activeXDocument);for(var e=enumBugKeys.length;e--;)delete NullProtoObject[PROTOTYPE$1][enumBugKeys[e]];return NullProtoObject()};hiddenKeys$1[IE_PROTO$1]=!0;var objectCreate=Object.create||function create(e,r){var t;return null!==e?(EmptyConstructor[PROTOTYPE$1]=anObject(e),t=new EmptyConstructor,EmptyConstructor[PROTOTYPE$1]=null,t[IE_PROTO$1]=e):t=NullProtoObject(),void 0===r?t:objectDefineProperties(t,r)},toString=function(e){if(\"Symbol\"===classof(e))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(e)},whitespaces=\"\\t\\n\\v\\f\\r                 \\u2028\\u2029\\ufeff\",whitespace=\"[\"+whitespaces+\"]\",ltrim=RegExp(\"^\"+whitespace+whitespace+\"*\"),rtrim=RegExp(whitespace+whitespace+\"*$\"),createMethod$4=function(e){return function(r){var t=toString(requireObjectCoercible(r));return 1&e&&(t=t.replace(ltrim,\"\")),2&e&&(t=t.replace(rtrim,\"\")),t}},stringTrim={start:createMethod$4(1),end:createMethod$4(2),trim:createMethod$4(3)},getOwnPropertyNames$1=objectGetOwnPropertyNames.f,getOwnPropertyDescriptor$1=objectGetOwnPropertyDescriptor.f,defineProperty$4=objectDefineProperty.f,trim=stringTrim.trim,NUMBER=\"Number\",NativeNumber=global$1[NUMBER],NumberPrototype=NativeNumber.prototype,BROKEN_CLASSOF=classofRaw(objectCreate(NumberPrototype))==NUMBER,toNumber=function(e){if(isSymbol(e))throw TypeError(\"Cannot convert a Symbol value to a number\");var r,t,a,i,s,c,l,u,p=toPrimitive(e,\"number\");if(\"string\"==typeof p&&p.length>2)if(43===(r=(p=trim(p)).charCodeAt(0))||45===r){if(88===(t=p.charCodeAt(2))||120===t)return NaN}else if(48===r){switch(p.charCodeAt(1)){case 66:case 98:a=2,i=49;break;case 79:case 111:a=8,i=55;break;default:return+p}for(c=(s=p.slice(2)).length,l=0;l<c;l++)if((u=s.charCodeAt(l))<48||u>i)return NaN;return parseInt(s,a)}return+p};if(isForced_1(NUMBER,!NativeNumber(\" 0o1\")||!NativeNumber(\"0b1\")||NativeNumber(\"+0x1\"))){for(var NumberWrapper=function Number(e){var r=arguments.length<1?0:e,t=this;return t instanceof NumberWrapper&&(BROKEN_CLASSOF?fails((function(){NumberPrototype.valueOf.call(t)})):classofRaw(t)!=NUMBER)?inheritIfRequired(new NativeNumber(toNumber(r)),t,NumberWrapper):toNumber(r)},keys$1=descriptors?getOwnPropertyNames$1(NativeNumber):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range\".split(\",\"),j$1=0,key$1;keys$1.length>j$1;j$1++)has$1(NativeNumber,key$1=keys$1[j$1])&&!has$1(NumberWrapper,key$1)&&defineProperty$4(NumberWrapper,key$1,getOwnPropertyDescriptor$1(NativeNumber,key$1));NumberWrapper.prototype=NumberPrototype,NumberPrototype.constructor=NumberWrapper,redefine(global$1,NUMBER,NumberWrapper)}var FUNCTION_NAME_EXISTS=functionName.EXISTS,defineProperty$3=objectDefineProperty.f,FunctionPrototype=Function.prototype,FunctionPrototypeToString=FunctionPrototype.toString,nameRE=/^\\s*function ([^ (]*)/,NAME$1=\"name\";descriptors&&!FUNCTION_NAME_EXISTS&&defineProperty$3(FunctionPrototype,NAME$1,{configurable:!0,get:function(){try{return FunctionPrototypeToString.call(this).match(nameRE)[1]}catch(e){return\"\"}}}),_export({global:!0},{globalThis:global$1});var $assign=Object.assign,defineProperty$2=Object.defineProperty,objectAssign=!$assign||fails((function(){if(descriptors&&1!==$assign({b:1},$assign(defineProperty$2({},\"a\",{enumerable:!0,get:function(){defineProperty$2(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},r={},t=Symbol();return e[t]=7,\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){r[e]=e})),7!=$assign({},e)[t]||\"abcdefghijklmnopqrst\"!=objectKeys($assign({},r)).join(\"\")}))?function assign(e,r){for(var t=toObject(e),a=arguments.length,i=1,s=objectGetOwnPropertySymbols.f,c=objectPropertyIsEnumerable.f;a>i;)for(var l,u=indexedObject(arguments[i++]),p=s?objectKeys(u).concat(s(u)):objectKeys(u),d=p.length,h=0;d>h;)l=p[h++],descriptors&&!c.call(u,l)||(t[l]=u[l]);return t}:$assign;_export({target:\"Object\",stat:!0,forced:Object.assign!==objectAssign},{assign:objectAssign});var path=global$1;path.Object.assign;var regexpFlags=function(){var e=anObject(this),r=\"\";return e.global&&(r+=\"g\"),e.ignoreCase&&(r+=\"i\"),e.multiline&&(r+=\"m\"),e.dotAll&&(r+=\"s\"),e.unicode&&(r+=\"u\"),e.sticky&&(r+=\"y\"),r},$RegExp$2=global$1.RegExp,UNSUPPORTED_Y$2=fails((function(){var e=$RegExp$2(\"a\",\"y\");return e.lastIndex=2,null!=e.exec(\"abcd\")})),BROKEN_CARET=fails((function(){var e=$RegExp$2(\"^r\",\"gy\");return e.lastIndex=2,null!=e.exec(\"str\")})),regexpStickyHelpers={UNSUPPORTED_Y:UNSUPPORTED_Y$2,BROKEN_CARET:BROKEN_CARET},$RegExp$1=global$1.RegExp,regexpUnsupportedDotAll=fails((function(){var e=$RegExp$1(\".\",\"s\");return!(e.dotAll&&e.exec(\"\\n\")&&\"s\"===e.flags)})),$RegExp=global$1.RegExp,regexpUnsupportedNcg=fails((function(){var e=$RegExp(\"(?<a>b)\",\"g\");return\"b\"!==e.exec(\"b\").groups.a||\"bc\"!==\"b\".replace(e,\"$<a>c\")})),getInternalState$3=internalState.get,nativeExec=RegExp.prototype.exec,nativeReplace=shared(\"native-string-replace\",String.prototype.replace),patchedExec=nativeExec,UPDATES_LAST_INDEX_WRONG=(re1=/a/,re2=/b*/g,nativeExec.call(re1,\"a\"),nativeExec.call(re2,\"a\"),0!==re1.lastIndex||0!==re2.lastIndex),re1,re2,UNSUPPORTED_Y$1=regexpStickyHelpers.UNSUPPORTED_Y||regexpStickyHelpers.BROKEN_CARET,NPCG_INCLUDED=void 0!==/()??/.exec(\"\")[1],PATCH=UPDATES_LAST_INDEX_WRONG||NPCG_INCLUDED||UNSUPPORTED_Y$1||regexpUnsupportedDotAll||regexpUnsupportedNcg;PATCH&&(patchedExec=function exec(e){var r,t,a,i,s,c,l,u=this,p=getInternalState$3(u),d=toString(e),h=p.raw;if(h)return h.lastIndex=u.lastIndex,r=patchedExec.call(h,d),u.lastIndex=h.lastIndex,r;var y=p.groups,A=UNSUPPORTED_Y$1&&u.sticky,g=regexpFlags.call(u),v=u.source,E=0,m=d;if(A&&(-1===(g=g.replace(\"y\",\"\")).indexOf(\"g\")&&(g+=\"g\"),m=d.slice(u.lastIndex),u.lastIndex>0&&(!u.multiline||u.multiline&&\"\\n\"!==d.charAt(u.lastIndex-1))&&(v=\"(?: \"+v+\")\",m=\" \"+m,E++),t=new RegExp(\"^(?:\"+v+\")\",g)),NPCG_INCLUDED&&(t=new RegExp(\"^\"+v+\"$(?!\\\\s)\",g)),UPDATES_LAST_INDEX_WRONG&&(a=u.lastIndex),i=nativeExec.call(A?t:u,m),A?i?(i.input=i.input.slice(E),i[0]=i[0].slice(E),i.index=u.lastIndex,u.lastIndex+=i[0].length):u.lastIndex=0:UPDATES_LAST_INDEX_WRONG&&i&&(u.lastIndex=u.global?i.index+i[0].length:a),NPCG_INCLUDED&&i&&i.length>1&&nativeReplace.call(i[0],t,(function(){for(s=1;s<arguments.length-2;s++)void 0===arguments[s]&&(i[s]=void 0)})),i&&y)for(i.groups=c=objectCreate(null),s=0;s<y.length;s++)c[(l=y[s])[0]]=i[l[1]];return i});var regexpExec=patchedExec;_export({target:\"RegExp\",proto:!0,forced:/./.exec!==regexpExec},{exec:regexpExec});var SPECIES$3=wellKnownSymbol(\"species\"),RegExpPrototype$1=RegExp.prototype,fixRegexpWellKnownSymbolLogic=function(e,r,t,a){var i=wellKnownSymbol(e),s=!fails((function(){var r={};return r[i]=function(){return 7},7!=\"\"[e](r)})),c=s&&!fails((function(){var r=!1,t=/a/;return\"split\"===e&&((t={}).constructor={},t.constructor[SPECIES$3]=function(){return t},t.flags=\"\",t[i]=/./[i]),t.exec=function(){return r=!0,null},t[i](\"\"),!r}));if(!s||!c||t){var l=/./[i],u=r(i,\"\"[e],(function(e,r,t,a,i){var c=r.exec;return c===regexpExec||c===RegExpPrototype$1.exec?s&&!i?{done:!0,value:l.call(r,t,a)}:{done:!0,value:e.call(t,r,a)}:{done:!1}}));redefine(String.prototype,e,u[0]),redefine(RegExpPrototype$1,i,u[1])}a&&createNonEnumerableProperty(RegExpPrototype$1[i],\"sham\",!0)},MATCH$1=wellKnownSymbol(\"match\"),isRegexp=function(e){var r;return isObject(e)&&(void 0!==(r=e[MATCH$1])?!!r:\"RegExp\"==classofRaw(e))},createMethod$3=function(e){return function(r,t){var a,i,s=toString(requireObjectCoercible(r)),c=toInteger(t),l=s.length;return c<0||c>=l?e?\"\":void 0:(a=s.charCodeAt(c))<55296||a>56319||c+1===l||(i=s.charCodeAt(c+1))<56320||i>57343?e?s.charAt(c):a:e?s.slice(c,c+2):i-56320+(a-55296<<10)+65536}},stringMultibyte={codeAt:createMethod$3(!1),charAt:createMethod$3(!0)},charAt$1=stringMultibyte.charAt,advanceStringIndex=function(e,r,t){return r+(t?charAt$1(e,r).length:1)},regexpExecAbstract=function(e,r){var t=e.exec;if(isCallable(t)){var a=t.call(e,r);return null!==a&&anObject(a),a}if(\"RegExp\"===classofRaw(e))return regexpExec.call(e,r);throw TypeError(\"RegExp#exec called on incompatible receiver\")},UNSUPPORTED_Y=regexpStickyHelpers.UNSUPPORTED_Y,arrayPush=[].push,min$4=Math.min,MAX_UINT32=4294967295,SPLIT_WORKS_WITH_OVERWRITTEN_EXEC=!fails((function(){var e=/(?:)/,r=e.exec;e.exec=function(){return r.apply(this,arguments)};var t=\"ab\".split(e);return 2!==t.length||\"a\"!==t[0]||\"b\"!==t[1]}));fixRegexpWellKnownSymbolLogic(\"split\",(function(e,r,t){var a;return a=\"c\"==\"abbc\".split(/(b)*/)[1]||4!=\"test\".split(/(?:)/,-1).length||2!=\"ab\".split(/(?:ab)*/).length||4!=\".\".split(/(.?)(.?)/).length||\".\".split(/()()/).length>1||\"\".split(/.?/).length?function(e,t){var a=toString(requireObjectCoercible(this)),i=void 0===t?MAX_UINT32:t>>>0;if(0===i)return[];if(void 0===e)return[a];if(!isRegexp(e))return r.call(a,e,i);for(var s,c,l,u=[],p=(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.unicode?\"u\":\"\")+(e.sticky?\"y\":\"\"),d=0,h=new RegExp(e.source,p+\"g\");(s=regexpExec.call(h,a))&&!((c=h.lastIndex)>d&&(u.push(a.slice(d,s.index)),s.length>1&&s.index<a.length&&arrayPush.apply(u,s.slice(1)),l=s[0].length,d=c,u.length>=i));)h.lastIndex===s.index&&h.lastIndex++;return d===a.length?!l&&h.test(\"\")||u.push(\"\"):u.push(a.slice(d)),u.length>i?u.slice(0,i):u}:\"0\".split(void 0,0).length?function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)}:r,[function split(r,t){var i=requireObjectCoercible(this),s=null==r?void 0:getMethod(r,e);return s?s.call(r,i,t):a.call(toString(i),r,t)},function(e,i){var s=anObject(this),c=toString(e),l=t(a,s,c,i,a!==r);if(l.done)return l.value;var u=speciesConstructor(s,RegExp),p=s.unicode,d=(s.ignoreCase?\"i\":\"\")+(s.multiline?\"m\":\"\")+(s.unicode?\"u\":\"\")+(UNSUPPORTED_Y?\"g\":\"y\"),h=new u(UNSUPPORTED_Y?\"^(?:\"+s.source+\")\":s,d),y=void 0===i?MAX_UINT32:i>>>0;if(0===y)return[];if(0===c.length)return null===regexpExecAbstract(h,c)?[c]:[];for(var A=0,g=0,v=[];g<c.length;){h.lastIndex=UNSUPPORTED_Y?0:g;var E,m=regexpExecAbstract(h,UNSUPPORTED_Y?c.slice(g):c);if(null===m||(E=min$4(toLength(h.lastIndex+(UNSUPPORTED_Y?g:0)),c.length))===A)g=advanceStringIndex(c,g,p);else{if(v.push(c.slice(A,g)),v.length===y)return v;for(var I=1;I<=m.length-1;I++)if(v.push(m[I]),v.length===y)return v;g=A=E}}return v.push(c.slice(A)),v}]}),!SPLIT_WORKS_WITH_OVERWRITTEN_EXEC,UNSUPPORTED_Y),fixRegexpWellKnownSymbolLogic(\"match\",(function(e,r,t){return[function match(r){var t=requireObjectCoercible(this),a=null==r?void 0:getMethod(r,e);return a?a.call(r,t):new RegExp(r)[e](toString(t))},function(e){var a=anObject(this),i=toString(e),s=t(r,a,i);if(s.done)return s.value;if(!a.global)return regexpExecAbstract(a,i);var c=a.unicode;a.lastIndex=0;for(var l,u=[],p=0;null!==(l=regexpExecAbstract(a,i));){var d=toString(l[0]);u[p]=d,\"\"===d&&(a.lastIndex=advanceStringIndex(i,toLength(a.lastIndex),c)),p++}return 0===p?null:u}]}));var UNSCOPABLES=wellKnownSymbol(\"unscopables\"),ArrayPrototype=Array.prototype;null==ArrayPrototype[UNSCOPABLES]&&objectDefineProperty.f(ArrayPrototype,UNSCOPABLES,{configurable:!0,value:objectCreate(null)});var addToUnscopables=function(e){ArrayPrototype[UNSCOPABLES][e]=!0},correctPrototypeGetter=!fails((function(){function F(){}return F.prototype.constructor=null,Object.getPrototypeOf(new F)!==F.prototype})),IE_PROTO=sharedKey(\"IE_PROTO\"),ObjectPrototype$2=Object.prototype,objectGetPrototypeOf=correctPrototypeGetter?Object.getPrototypeOf:function(e){var r=toObject(e);if(has$1(r,IE_PROTO))return r[IE_PROTO];var t=r.constructor;return isCallable(t)&&r instanceof t?t.prototype:r instanceof Object?ObjectPrototype$2:null},ITERATOR$5=wellKnownSymbol(\"iterator\"),BUGGY_SAFARI_ITERATORS$1=!1,IteratorPrototype$2,PrototypeOfArrayIteratorPrototype,arrayIterator;[].keys&&(arrayIterator=[].keys(),\"next\"in arrayIterator?(PrototypeOfArrayIteratorPrototype=objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator)),PrototypeOfArrayIteratorPrototype!==Object.prototype&&(IteratorPrototype$2=PrototypeOfArrayIteratorPrototype)):BUGGY_SAFARI_ITERATORS$1=!0);var NEW_ITERATOR_PROTOTYPE=null==IteratorPrototype$2||fails((function(){var e={};return IteratorPrototype$2[ITERATOR$5].call(e)!==e}));NEW_ITERATOR_PROTOTYPE&&(IteratorPrototype$2={}),isCallable(IteratorPrototype$2[ITERATOR$5])||redefine(IteratorPrototype$2,ITERATOR$5,(function(){return this}));var iteratorsCore={IteratorPrototype:IteratorPrototype$2,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS$1},IteratorPrototype$1=iteratorsCore.IteratorPrototype,returnThis$1=function(){return this},createIteratorConstructor=function(e,r,t){var a=r+\" Iterator\";return e.prototype=objectCreate(IteratorPrototype$1,{next:createPropertyDescriptor(1,t)}),setToStringTag(e,a,!1),iterators[a]=returnThis$1,e},PROPER_FUNCTION_NAME$3=functionName.PROPER,CONFIGURABLE_FUNCTION_NAME$1=functionName.CONFIGURABLE,IteratorPrototype=iteratorsCore.IteratorPrototype,BUGGY_SAFARI_ITERATORS=iteratorsCore.BUGGY_SAFARI_ITERATORS,ITERATOR$4=wellKnownSymbol(\"iterator\"),KEYS=\"keys\",VALUES=\"values\",ENTRIES=\"entries\",returnThis=function(){return this},defineIterator=function(e,r,t,a,i,s,c){createIteratorConstructor(t,r,a);var l,u,p,getIterationMethod=function(e){if(e===i&&g)return g;if(!BUGGY_SAFARI_ITERATORS&&e in y)return y[e];switch(e){case KEYS:return function keys(){return new t(this,e)};case VALUES:return function values(){return new t(this,e)};case ENTRIES:return function entries(){return new t(this,e)}}return function(){return new t(this)}},d=r+\" Iterator\",h=!1,y=e.prototype,A=y[ITERATOR$4]||y[\"@@iterator\"]||i&&y[i],g=!BUGGY_SAFARI_ITERATORS&&A||getIterationMethod(i),v=\"Array\"==r&&y.entries||A;if(v&&(l=objectGetPrototypeOf(v.call(new e)))!==Object.prototype&&l.next&&(objectGetPrototypeOf(l)!==IteratorPrototype&&(objectSetPrototypeOf?objectSetPrototypeOf(l,IteratorPrototype):isCallable(l[ITERATOR$4])||redefine(l,ITERATOR$4,returnThis)),setToStringTag(l,d,!0)),PROPER_FUNCTION_NAME$3&&i==VALUES&&A&&A.name!==VALUES&&(CONFIGURABLE_FUNCTION_NAME$1?createNonEnumerableProperty(y,\"name\",VALUES):(h=!0,g=function values(){return A.call(this)})),i)if(u={values:getIterationMethod(VALUES),keys:s?g:getIterationMethod(KEYS),entries:getIterationMethod(ENTRIES)},c)for(p in u)(BUGGY_SAFARI_ITERATORS||h||!(p in y))&&redefine(y,p,u[p]);else _export({target:r,proto:!0,forced:BUGGY_SAFARI_ITERATORS||h},u);return y[ITERATOR$4]!==g&&redefine(y,ITERATOR$4,g,{name:i}),iterators[r]=g,u},ARRAY_ITERATOR=\"Array Iterator\",setInternalState$4=internalState.set,getInternalState$2=internalState.getterFor(ARRAY_ITERATOR),es_array_iterator=defineIterator(Array,\"Array\",(function(e,r){setInternalState$4(this,{type:ARRAY_ITERATOR,target:toIndexedObject(e),index:0,kind:r})}),(function(){var e=getInternalState$2(this),r=e.target,t=e.kind,a=e.index++;return!r||a>=r.length?(e.target=void 0,{value:void 0,done:!0}):\"keys\"==t?{value:a,done:!1}:\"values\"==t?{value:r[a],done:!1}:{value:[a,r[a]],done:!1}}),\"values\");iterators.Arguments=iterators.Array,addToUnscopables(\"keys\"),addToUnscopables(\"values\"),addToUnscopables(\"entries\");var arrayBufferNative=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof DataView,defineProperty$1=objectDefineProperty.f,Int8Array$3=global$1.Int8Array,Int8ArrayPrototype=Int8Array$3&&Int8Array$3.prototype,Uint8ClampedArray=global$1.Uint8ClampedArray,Uint8ClampedArrayPrototype=Uint8ClampedArray&&Uint8ClampedArray.prototype,TypedArray=Int8Array$3&&objectGetPrototypeOf(Int8Array$3),TypedArrayPrototype=Int8ArrayPrototype&&objectGetPrototypeOf(Int8ArrayPrototype),ObjectPrototype$1=Object.prototype,isPrototypeOf=ObjectPrototype$1.isPrototypeOf,TO_STRING_TAG$1=wellKnownSymbol(\"toStringTag\"),TYPED_ARRAY_TAG=uid(\"TYPED_ARRAY_TAG\"),TYPED_ARRAY_CONSTRUCTOR$1=uid(\"TYPED_ARRAY_CONSTRUCTOR\"),NATIVE_ARRAY_BUFFER_VIEWS$1=arrayBufferNative&&!!objectSetPrototypeOf&&\"Opera\"!==classof(global$1.opera),TYPED_ARRAY_TAG_REQIRED=!1,NAME,Constructor,Prototype,TypedArrayConstructorsList={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},BigIntArrayConstructorsList={BigInt64Array:8,BigUint64Array:8},isView=function isView(e){if(!isObject(e))return!1;var r=classof(e);return\"DataView\"===r||has$1(TypedArrayConstructorsList,r)||has$1(BigIntArrayConstructorsList,r)},isTypedArray=function(e){if(!isObject(e))return!1;var r=classof(e);return has$1(TypedArrayConstructorsList,r)||has$1(BigIntArrayConstructorsList,r)},aTypedArray$m=function(e){if(isTypedArray(e))return e;throw TypeError(\"Target is not a typed array\")},aTypedArrayConstructor$2=function(e){if(isCallable(e)&&(!objectSetPrototypeOf||isPrototypeOf.call(TypedArray,e)))return e;throw TypeError(tryToString(e)+\" is not a typed array constructor\")},exportTypedArrayMethod$n=function(e,r,t){if(descriptors){if(t)for(var a in TypedArrayConstructorsList){var i=global$1[a];if(i&&has$1(i.prototype,e))try{delete i.prototype[e]}catch(e){}}TypedArrayPrototype[e]&&!t||redefine(TypedArrayPrototype,e,t?r:NATIVE_ARRAY_BUFFER_VIEWS$1&&Int8ArrayPrototype[e]||r)}},exportTypedArrayStaticMethod=function(e,r,t){var a,i;if(descriptors){if(objectSetPrototypeOf){if(t)for(a in TypedArrayConstructorsList)if((i=global$1[a])&&has$1(i,e))try{delete i[e]}catch(e){}if(TypedArray[e]&&!t)return;try{return redefine(TypedArray,e,t?r:NATIVE_ARRAY_BUFFER_VIEWS$1&&TypedArray[e]||r)}catch(e){}}for(a in TypedArrayConstructorsList)!(i=global$1[a])||i[e]&&!t||redefine(i,e,r)}};for(NAME in TypedArrayConstructorsList)Constructor=global$1[NAME],Prototype=Constructor&&Constructor.prototype,Prototype?createNonEnumerableProperty(Prototype,TYPED_ARRAY_CONSTRUCTOR$1,Constructor):NATIVE_ARRAY_BUFFER_VIEWS$1=!1;for(NAME in BigIntArrayConstructorsList)Constructor=global$1[NAME],Prototype=Constructor&&Constructor.prototype,Prototype&&createNonEnumerableProperty(Prototype,TYPED_ARRAY_CONSTRUCTOR$1,Constructor);if((!NATIVE_ARRAY_BUFFER_VIEWS$1||!isCallable(TypedArray)||TypedArray===Function.prototype)&&(TypedArray=function TypedArray(){throw TypeError(\"Incorrect invocation\")},NATIVE_ARRAY_BUFFER_VIEWS$1))for(NAME in TypedArrayConstructorsList)global$1[NAME]&&objectSetPrototypeOf(global$1[NAME],TypedArray);if((!NATIVE_ARRAY_BUFFER_VIEWS$1||!TypedArrayPrototype||TypedArrayPrototype===ObjectPrototype$1)&&(TypedArrayPrototype=TypedArray.prototype,NATIVE_ARRAY_BUFFER_VIEWS$1))for(NAME in TypedArrayConstructorsList)global$1[NAME]&&objectSetPrototypeOf(global$1[NAME].prototype,TypedArrayPrototype);if(NATIVE_ARRAY_BUFFER_VIEWS$1&&objectGetPrototypeOf(Uint8ClampedArrayPrototype)!==TypedArrayPrototype&&objectSetPrototypeOf(Uint8ClampedArrayPrototype,TypedArrayPrototype),descriptors&&!has$1(TypedArrayPrototype,TO_STRING_TAG$1))for(NAME in TYPED_ARRAY_TAG_REQIRED=!0,defineProperty$1(TypedArrayPrototype,TO_STRING_TAG$1,{get:function(){return isObject(this)?this[TYPED_ARRAY_TAG]:void 0}}),TypedArrayConstructorsList)global$1[NAME]&&createNonEnumerableProperty(global$1[NAME],TYPED_ARRAY_TAG,NAME);var arrayBufferViewCore={NATIVE_ARRAY_BUFFER_VIEWS:NATIVE_ARRAY_BUFFER_VIEWS$1,TYPED_ARRAY_CONSTRUCTOR:TYPED_ARRAY_CONSTRUCTOR$1,TYPED_ARRAY_TAG:TYPED_ARRAY_TAG_REQIRED&&TYPED_ARRAY_TAG,aTypedArray:aTypedArray$m,aTypedArrayConstructor:aTypedArrayConstructor$2,exportTypedArrayMethod:exportTypedArrayMethod$n,exportTypedArrayStaticMethod:exportTypedArrayStaticMethod,isView:isView,isTypedArray:isTypedArray,TypedArray:TypedArray,TypedArrayPrototype:TypedArrayPrototype},NATIVE_ARRAY_BUFFER_VIEWS=arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS,ArrayBuffer$1=global$1.ArrayBuffer,Int8Array$2=global$1.Int8Array,typedArrayConstructorsRequireWrappers=!NATIVE_ARRAY_BUFFER_VIEWS||!fails((function(){Int8Array$2(1)}))||!fails((function(){new Int8Array$2(-1)}))||!checkCorrectnessOfIteration((function(e){new Int8Array$2,new Int8Array$2(null),new Int8Array$2(1.5),new Int8Array$2(e)}),!0)||fails((function(){return 1!==new Int8Array$2(new ArrayBuffer$1(2),1,void 0).length})),toIndex=function(e){if(void 0===e)return 0;var r=toInteger(e),t=toLength(r);if(r!==t)throw RangeError(\"Wrong length or index\");return t},abs=Math.abs,pow$1=Math.pow,floor$6=Math.floor,log=Math.log,LN2=Math.LN2,pack=function(e,r,t){var a,i,s,c=new Array(t),l=8*t-r-1,u=(1<<l)-1,p=u>>1,d=23===r?pow$1(2,-24)-pow$1(2,-77):0,h=e<0||0===e&&1/e<0?1:0,y=0;for((e=abs(e))!=e||e===1/0?(i=e!=e?1:0,a=u):(a=floor$6(log(e)/LN2),e*(s=pow$1(2,-a))<1&&(a--,s*=2),(e+=a+p>=1?d/s:d*pow$1(2,1-p))*s>=2&&(a++,s/=2),a+p>=u?(i=0,a=u):a+p>=1?(i=(e*s-1)*pow$1(2,r),a+=p):(i=e*pow$1(2,p-1)*pow$1(2,r),a=0));r>=8;c[y++]=255&i,i/=256,r-=8);for(a=a<<r|i,l+=r;l>0;c[y++]=255&a,a/=256,l-=8);return c[--y]|=128*h,c},unpack=function(e,r){var t,a=e.length,i=8*a-r-1,s=(1<<i)-1,c=s>>1,l=i-7,u=a-1,p=e[u--],d=127&p;for(p>>=7;l>0;d=256*d+e[u],u--,l-=8);for(t=d&(1<<-l)-1,d>>=-l,l+=r;l>0;t=256*t+e[u],u--,l-=8);if(0===d)d=1-c;else{if(d===s)return t?NaN:p?-1/0:1/0;t+=pow$1(2,r),d-=c}return(p?-1:1)*t*pow$1(2,d-r)},ieee754={pack:pack,unpack:unpack},arrayFill=function fill(e){for(var r=toObject(this),t=toLength(r.length),a=arguments.length,i=toAbsoluteIndex(a>1?arguments[1]:void 0,t),s=a>2?arguments[2]:void 0,c=void 0===s?t:toAbsoluteIndex(s,t);c>i;)r[i++]=e;return r},getOwnPropertyNames=objectGetOwnPropertyNames.f,defineProperty=objectDefineProperty.f,PROPER_FUNCTION_NAME$2=functionName.PROPER,CONFIGURABLE_FUNCTION_NAME=functionName.CONFIGURABLE,getInternalState$1=internalState.get,setInternalState$3=internalState.set,ARRAY_BUFFER=\"ArrayBuffer\",DATA_VIEW=\"DataView\",PROTOTYPE=\"prototype\",WRONG_LENGTH=\"Wrong length\",WRONG_INDEX=\"Wrong index\",NativeArrayBuffer=global$1[ARRAY_BUFFER],$ArrayBuffer=NativeArrayBuffer,$DataView=global$1[DATA_VIEW],$DataViewPrototype=$DataView&&$DataView[PROTOTYPE],ObjectPrototype=Object.prototype,RangeError$1=global$1.RangeError,packIEEE754=ieee754.pack,unpackIEEE754=ieee754.unpack,packInt8=function(e){return[255&e]},packInt16=function(e){return[255&e,e>>8&255]},packInt32=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},unpackInt32=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},packFloat32=function(e){return packIEEE754(e,23,4)},packFloat64=function(e){return packIEEE754(e,52,8)},addGetter=function(e,r){defineProperty(e[PROTOTYPE],r,{get:function(){return getInternalState$1(this)[r]}})},get=function(e,r,t,a){var i=toIndex(t),s=getInternalState$1(e);if(i+r>s.byteLength)throw RangeError$1(WRONG_INDEX);var c=getInternalState$1(s.buffer).bytes,l=i+s.byteOffset,u=c.slice(l,l+r);return a?u:u.reverse()},set=function(e,r,t,a,i,s){var c=toIndex(t),l=getInternalState$1(e);if(c+r>l.byteLength)throw RangeError$1(WRONG_INDEX);for(var u=getInternalState$1(l.buffer).bytes,p=c+l.byteOffset,d=a(+i),h=0;h<r;h++)u[p+h]=d[s?h:r-h-1]};if(arrayBufferNative){var INCORRECT_ARRAY_BUFFER_NAME=PROPER_FUNCTION_NAME$2&&NativeArrayBuffer.name!==ARRAY_BUFFER;if(fails((function(){NativeArrayBuffer(1)}))&&fails((function(){new NativeArrayBuffer(-1)}))&&!fails((function(){return new NativeArrayBuffer,new NativeArrayBuffer(1.5),new NativeArrayBuffer(NaN),INCORRECT_ARRAY_BUFFER_NAME&&!CONFIGURABLE_FUNCTION_NAME})))INCORRECT_ARRAY_BUFFER_NAME&&CONFIGURABLE_FUNCTION_NAME&&createNonEnumerableProperty(NativeArrayBuffer,\"name\",ARRAY_BUFFER);else{$ArrayBuffer=function ArrayBuffer(e){return anInstance(this,$ArrayBuffer),new NativeArrayBuffer(toIndex(e))};for(var ArrayBufferPrototype=$ArrayBuffer[PROTOTYPE]=NativeArrayBuffer[PROTOTYPE],keys=getOwnPropertyNames(NativeArrayBuffer),j=0,key;keys.length>j;)(key=keys[j++])in $ArrayBuffer||createNonEnumerableProperty($ArrayBuffer,key,NativeArrayBuffer[key]);ArrayBufferPrototype.constructor=$ArrayBuffer}objectSetPrototypeOf&&objectGetPrototypeOf($DataViewPrototype)!==ObjectPrototype&&objectSetPrototypeOf($DataViewPrototype,ObjectPrototype);var testView=new $DataView(new $ArrayBuffer(2)),$setInt8=$DataViewPrototype.setInt8;testView.setInt8(0,2147483648),testView.setInt8(1,2147483649),!testView.getInt8(0)&&testView.getInt8(1)||redefineAll($DataViewPrototype,{setInt8:function setInt8(e,r){$setInt8.call(this,e,r<<24>>24)},setUint8:function setUint8(e,r){$setInt8.call(this,e,r<<24>>24)}},{unsafe:!0})}else $ArrayBuffer=function ArrayBuffer(e){anInstance(this,$ArrayBuffer,ARRAY_BUFFER);var r=toIndex(e);setInternalState$3(this,{bytes:arrayFill.call(new Array(r),0),byteLength:r}),descriptors||(this.byteLength=r)},$DataView=function DataView(e,r,t){anInstance(this,$DataView,DATA_VIEW),anInstance(e,$ArrayBuffer,DATA_VIEW);var a=getInternalState$1(e).byteLength,i=toInteger(r);if(i<0||i>a)throw RangeError$1(\"Wrong offset\");if(i+(t=void 0===t?a-i:toLength(t))>a)throw RangeError$1(WRONG_LENGTH);setInternalState$3(this,{buffer:e,byteLength:t,byteOffset:i}),descriptors||(this.buffer=e,this.byteLength=t,this.byteOffset=i)},descriptors&&(addGetter($ArrayBuffer,\"byteLength\"),addGetter($DataView,\"buffer\"),addGetter($DataView,\"byteLength\"),addGetter($DataView,\"byteOffset\")),redefineAll($DataView[PROTOTYPE],{getInt8:function getInt8(e){return get(this,1,e)[0]<<24>>24},getUint8:function getUint8(e){return get(this,1,e)[0]},getInt16:function getInt16(e){var r=get(this,2,e,arguments.length>1?arguments[1]:void 0);return(r[1]<<8|r[0])<<16>>16},getUint16:function getUint16(e){var r=get(this,2,e,arguments.length>1?arguments[1]:void 0);return r[1]<<8|r[0]},getInt32:function getInt32(e){return unpackInt32(get(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function getUint32(e){return unpackInt32(get(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function getFloat32(e){return unpackIEEE754(get(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function getFloat64(e){return unpackIEEE754(get(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function setInt8(e,r){set(this,1,e,packInt8,r)},setUint8:function setUint8(e,r){set(this,1,e,packInt8,r)},setInt16:function setInt16(e,r){set(this,2,e,packInt16,r,arguments.length>2?arguments[2]:void 0)},setUint16:function setUint16(e,r){set(this,2,e,packInt16,r,arguments.length>2?arguments[2]:void 0)},setInt32:function setInt32(e,r){set(this,4,e,packInt32,r,arguments.length>2?arguments[2]:void 0)},setUint32:function setUint32(e,r){set(this,4,e,packInt32,r,arguments.length>2?arguments[2]:void 0)},setFloat32:function setFloat32(e,r){set(this,4,e,packFloat32,r,arguments.length>2?arguments[2]:void 0)},setFloat64:function setFloat64(e,r){set(this,8,e,packFloat64,r,arguments.length>2?arguments[2]:void 0)}});setToStringTag($ArrayBuffer,ARRAY_BUFFER),setToStringTag($DataView,DATA_VIEW);var arrayBuffer={ArrayBuffer:$ArrayBuffer,DataView:$DataView},floor$5=Math.floor,isInteger=function isInteger(e){return!isObject(e)&&isFinite(e)&&floor$5(e)===e},toPositiveInteger=function(e){var r=toInteger(e);if(r<0)throw RangeError(\"The argument can't be less than 0\");return r},toOffset=function(e,r){var t=toPositiveInteger(e);if(t%r)throw RangeError(\"Wrong offset\");return t},aTypedArrayConstructor$1=arrayBufferViewCore.aTypedArrayConstructor,typedArrayFrom=function from(e){var r,t,a,i,s,c,l=aConstructor(this),u=toObject(e),p=arguments.length,d=p>1?arguments[1]:void 0,h=void 0!==d,y=getIteratorMethod(u);if(y&&!isArrayIteratorMethod(y))for(c=(s=getIterator(u,y)).next,u=[];!(i=c.call(s)).done;)u.push(i.value);for(h&&p>2&&(d=functionBindContext(d,arguments[2],2)),t=toLength(u.length),a=new(aTypedArrayConstructor$1(l))(t),r=0;t>r;r++)a[r]=h?d(u[r],r):u[r];return a},isArray=Array.isArray||function isArray(e){return\"Array\"==classofRaw(e)},SPECIES$2=wellKnownSymbol(\"species\"),arraySpeciesConstructor=function(e){var r;return isArray(e)&&(r=e.constructor,(isConstructor(r)&&(r===Array||isArray(r.prototype))||isObject(r)&&null===(r=r[SPECIES$2]))&&(r=void 0)),void 0===r?Array:r},arraySpeciesCreate=function(e,r){return new(arraySpeciesConstructor(e))(0===r?0:r)},push=[].push,createMethod$2=function(e){var r=1==e,t=2==e,a=3==e,i=4==e,s=6==e,c=7==e,l=5==e||s;return function(u,p,d,h){for(var y,A,g=toObject(u),v=indexedObject(g),E=functionBindContext(p,d,3),m=toLength(v.length),I=0,P=h||arraySpeciesCreate,b=r?P(u,m):t||c?P(u,0):void 0;m>I;I++)if((l||I in v)&&(A=E(y=v[I],I,g),e))if(r)b[I]=A;else if(A)switch(e){case 3:return!0;case 5:return y;case 6:return I;case 2:push.call(b,y)}else switch(e){case 4:return!1;case 7:push.call(b,y)}return s?-1:a||i?i:b}},arrayIteration={forEach:createMethod$2(0),map:createMethod$2(1),filter:createMethod$2(2),some:createMethod$2(3),every:createMethod$2(4),find:createMethod$2(5),findIndex:createMethod$2(6),filterReject:createMethod$2(7)},typedArrayConstructor=createCommonjsModule((function(e){var r=objectGetOwnPropertyNames.f,t=arrayIteration.forEach,a=internalState.get,i=internalState.set,s=objectDefineProperty.f,c=objectGetOwnPropertyDescriptor.f,l=Math.round,u=global$1.RangeError,p=arrayBuffer.ArrayBuffer,d=arrayBuffer.DataView,h=arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS,y=arrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR,A=arrayBufferViewCore.TYPED_ARRAY_TAG,g=arrayBufferViewCore.TypedArray,v=arrayBufferViewCore.TypedArrayPrototype,E=arrayBufferViewCore.aTypedArrayConstructor,m=arrayBufferViewCore.isTypedArray,fromList=function(e,r){for(var t=0,a=r.length,i=new(E(e))(a);a>t;)i[t]=r[t++];return i},addGetter=function(e,r){s(e,r,{get:function(){return a(this)[r]}})},isArrayBuffer=function(e){var r;return e instanceof p||\"ArrayBuffer\"==(r=classof(e))||\"SharedArrayBuffer\"==r},isTypedArrayIndex=function(e,r){return m(e)&&!isSymbol(r)&&r in e&&isInteger(+r)&&r>=0},I=function getOwnPropertyDescriptor(e,r){return r=toPropertyKey(r),isTypedArrayIndex(e,r)?createPropertyDescriptor(2,e[r]):c(e,r)},P=function defineProperty(e,r,t){return r=toPropertyKey(r),!(isTypedArrayIndex(e,r)&&isObject(t)&&has$1(t,\"value\"))||has$1(t,\"get\")||has$1(t,\"set\")||t.configurable||has$1(t,\"writable\")&&!t.writable||has$1(t,\"enumerable\")&&!t.enumerable?s(e,r,t):(e[r]=t.value,e)};descriptors?(h||(objectGetOwnPropertyDescriptor.f=I,objectDefineProperty.f=P,addGetter(v,\"buffer\"),addGetter(v,\"byteOffset\"),addGetter(v,\"byteLength\"),addGetter(v,\"length\")),_export({target:\"Object\",stat:!0,forced:!h},{getOwnPropertyDescriptor:I,defineProperty:P}),e.exports=function(e,c,E){var I=e.match(/\\d+$/)[0]/8,P=e+(E?\"Clamped\":\"\")+\"Array\",b=\"get\"+e,T=\"set\"+e,S=global$1[P],R=S,_=R&&R.prototype,U={},addElement=function(e,r){s(e,r,{get:function(){return function(e,r){var t=a(e);return t.view[b](r*I+t.byteOffset,!0)}(this,r)},set:function(e){return function(e,r,t){var i=a(e);E&&(t=(t=l(t))<0?0:t>255?255:255&t),i.view[T](r*I+i.byteOffset,t,!0)}(this,r,e)},enumerable:!0})};h?typedArrayConstructorsRequireWrappers&&(R=c((function(e,r,t,a){return anInstance(e,R,P),inheritIfRequired(isObject(r)?isArrayBuffer(r)?void 0!==a?new S(r,toOffset(t,I),a):void 0!==t?new S(r,toOffset(t,I)):new S(r):m(r)?fromList(R,r):typedArrayFrom.call(R,r):new S(toIndex(r)),e,R)})),objectSetPrototypeOf&&objectSetPrototypeOf(R,g),t(r(S),(function(e){e in R||createNonEnumerableProperty(R,e,S[e])})),R.prototype=_):(R=c((function(e,r,t,a){anInstance(e,R,P);var s,c,l,h=0,y=0;if(isObject(r)){if(!isArrayBuffer(r))return m(r)?fromList(R,r):typedArrayFrom.call(R,r);s=r,y=toOffset(t,I);var A=r.byteLength;if(void 0===a){if(A%I)throw u(\"Wrong length\");if((c=A-y)<0)throw u(\"Wrong length\")}else if((c=toLength(a)*I)+y>A)throw u(\"Wrong length\");l=c/I}else l=toIndex(r),s=new p(c=l*I);for(i(e,{buffer:s,byteOffset:y,byteLength:c,length:l,view:new d(s)});h<l;)addElement(e,h++)})),objectSetPrototypeOf&&objectSetPrototypeOf(R,g),_=R.prototype=objectCreate(v)),_.constructor!==R&&createNonEnumerableProperty(_,\"constructor\",R),createNonEnumerableProperty(_,y,R),A&&createNonEnumerableProperty(_,A,P),U[P]=R,_export({global:!0,forced:R!=S,sham:!h},U),\"BYTES_PER_ELEMENT\"in R||createNonEnumerableProperty(R,\"BYTES_PER_ELEMENT\",I),\"BYTES_PER_ELEMENT\"in _||createNonEnumerableProperty(_,\"BYTES_PER_ELEMENT\",I),setSpecies(P)}):e.exports=function(){}}));typedArrayConstructor(\"Uint8\",(function(e){return function Uint8Array(r,t,a){return e(this,r,t,a)}}));var min$3=Math.min,arrayCopyWithin=[].copyWithin||function copyWithin(e,r){var t=toObject(this),a=toLength(t.length),i=toAbsoluteIndex(e,a),s=toAbsoluteIndex(r,a),c=arguments.length>2?arguments[2]:void 0,l=min$3((void 0===c?a:toAbsoluteIndex(c,a))-s,a-i),u=1;for(s<i&&i<s+l&&(u=-1,s+=l-1,i+=l-1);l-- >0;)s in t?t[i]=t[s]:delete t[i],i+=u,s+=u;return t},aTypedArray$l=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$m=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$m(\"copyWithin\",(function copyWithin(e,r){return arrayCopyWithin.call(aTypedArray$l(this),e,r,arguments.length>2?arguments[2]:void 0)}));var $every=arrayIteration.every,aTypedArray$k=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$l=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$l(\"every\",(function every(e){return $every(aTypedArray$k(this),e,arguments.length>1?arguments[1]:void 0)}));var aTypedArray$j=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$k=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$k(\"fill\",(function fill(e){return arrayFill.apply(aTypedArray$j(this),arguments)}));var arrayFromConstructorAndList=function(e,r){for(var t=0,a=r.length,i=new e(a);a>t;)i[t]=r[t++];return i},TYPED_ARRAY_CONSTRUCTOR=arrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR,aTypedArrayConstructor=arrayBufferViewCore.aTypedArrayConstructor,typedArraySpeciesConstructor=function(e){return aTypedArrayConstructor(speciesConstructor(e,e[TYPED_ARRAY_CONSTRUCTOR]))},typedArrayFromSpeciesAndList=function(e,r){return arrayFromConstructorAndList(typedArraySpeciesConstructor(e),r)},$filter$1=arrayIteration.filter,aTypedArray$i=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$j=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$j(\"filter\",(function filter(e){var r=$filter$1(aTypedArray$i(this),e,arguments.length>1?arguments[1]:void 0);return typedArrayFromSpeciesAndList(this,r)}));var $find=arrayIteration.find,aTypedArray$h=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$i=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$i(\"find\",(function find(e){return $find(aTypedArray$h(this),e,arguments.length>1?arguments[1]:void 0)}));var $findIndex=arrayIteration.findIndex,aTypedArray$g=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$h=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$h(\"findIndex\",(function findIndex(e){return $findIndex(aTypedArray$g(this),e,arguments.length>1?arguments[1]:void 0)}));var $forEach$1=arrayIteration.forEach,aTypedArray$f=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$g=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$g(\"forEach\",(function forEach(e){$forEach$1(aTypedArray$f(this),e,arguments.length>1?arguments[1]:void 0)}));var $includes$1=arrayIncludes.includes,aTypedArray$e=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$f=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$f(\"includes\",(function includes(e){return $includes$1(aTypedArray$e(this),e,arguments.length>1?arguments[1]:void 0)}));var $indexOf=arrayIncludes.indexOf,aTypedArray$d=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$e=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$e(\"indexOf\",(function indexOf(e){return $indexOf(aTypedArray$d(this),e,arguments.length>1?arguments[1]:void 0)}));var PROPER_FUNCTION_NAME$1=functionName.PROPER,ITERATOR$3=wellKnownSymbol(\"iterator\"),Uint8Array$2=global$1.Uint8Array,arrayValues=es_array_iterator.values,arrayKeys=es_array_iterator.keys,arrayEntries=es_array_iterator.entries,aTypedArray$c=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$d=arrayBufferViewCore.exportTypedArrayMethod,nativeTypedArrayIterator=Uint8Array$2&&Uint8Array$2.prototype[ITERATOR$3],PROPER_ARRAY_VALUES_NAME=!!nativeTypedArrayIterator&&\"values\"===nativeTypedArrayIterator.name,typedArrayValues=function values(){return arrayValues.call(aTypedArray$c(this))};exportTypedArrayMethod$d(\"entries\",(function entries(){return arrayEntries.call(aTypedArray$c(this))})),exportTypedArrayMethod$d(\"keys\",(function keys(){return arrayKeys.call(aTypedArray$c(this))})),exportTypedArrayMethod$d(\"values\",typedArrayValues,PROPER_FUNCTION_NAME$1&&!PROPER_ARRAY_VALUES_NAME),exportTypedArrayMethod$d(ITERATOR$3,typedArrayValues,PROPER_FUNCTION_NAME$1&&!PROPER_ARRAY_VALUES_NAME);var aTypedArray$b=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$c=arrayBufferViewCore.exportTypedArrayMethod,$join=[].join;exportTypedArrayMethod$c(\"join\",(function join(e){return $join.apply(aTypedArray$b(this),arguments)}));var arrayMethodIsStrict=function(e,r){var t=[][e];return!!t&&fails((function(){t.call(null,r||function(){throw 1},1)}))},min$2=Math.min,$lastIndexOf=[].lastIndexOf,NEGATIVE_ZERO=!!$lastIndexOf&&1/[1].lastIndexOf(1,-0)<0,STRICT_METHOD$2=arrayMethodIsStrict(\"lastIndexOf\"),FORCED$5=NEGATIVE_ZERO||!STRICT_METHOD$2,arrayLastIndexOf=FORCED$5?function lastIndexOf(e){if(NEGATIVE_ZERO)return $lastIndexOf.apply(this,arguments)||0;var r=toIndexedObject(this),t=toLength(r.length),a=t-1;for(arguments.length>1&&(a=min$2(a,toInteger(arguments[1]))),a<0&&(a=t+a);a>=0;a--)if(a in r&&r[a]===e)return a||0;return-1}:$lastIndexOf,aTypedArray$a=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$b=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$b(\"lastIndexOf\",(function lastIndexOf(e){return arrayLastIndexOf.apply(aTypedArray$a(this),arguments)}));var $map=arrayIteration.map,aTypedArray$9=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$a=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$a(\"map\",(function map(e){return $map(aTypedArray$9(this),e,arguments.length>1?arguments[1]:void 0,(function(e,r){return new(typedArraySpeciesConstructor(e))(r)}))}));var createMethod$1=function(e){return function(r,t,a,i){aCallable(t);var s=toObject(r),c=indexedObject(s),l=toLength(s.length),u=e?l-1:0,p=e?-1:1;if(a<2)for(;;){if(u in c){i=c[u],u+=p;break}if(u+=p,e?u<0:l<=u)throw TypeError(\"Reduce of empty array with no initial value\")}for(;e?u>=0:l>u;u+=p)u in c&&(i=t(i,c[u],u,s));return i}},arrayReduce={left:createMethod$1(!1),right:createMethod$1(!0)},$reduce=arrayReduce.left,aTypedArray$8=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$9=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$9(\"reduce\",(function reduce(e){return $reduce(aTypedArray$8(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}));var $reduceRight=arrayReduce.right,aTypedArray$7=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$8=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$8(\"reduceRight\",(function reduceRight(e){return $reduceRight(aTypedArray$7(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}));var aTypedArray$6=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$7=arrayBufferViewCore.exportTypedArrayMethod,floor$4=Math.floor;exportTypedArrayMethod$7(\"reverse\",(function reverse(){for(var e,r=aTypedArray$6(this).length,t=floor$4(r/2),a=0;a<t;)e=this[a],this[a++]=this[--r],this[r]=e;return this}));var aTypedArray$5=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$6=arrayBufferViewCore.exportTypedArrayMethod,FORCED$4=fails((function(){new Int8Array(1).set({})}));exportTypedArrayMethod$6(\"set\",(function set(e){aTypedArray$5(this);var r=toOffset(arguments.length>1?arguments[1]:void 0,1),t=this.length,a=toObject(e),i=toLength(a.length),s=0;if(i+r>t)throw RangeError(\"Wrong length\");for(;s<i;)this[r+s]=a[s++]}),FORCED$4);var aTypedArray$4=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$5=arrayBufferViewCore.exportTypedArrayMethod,$slice$1=[].slice,FORCED$3=fails((function(){new Int8Array(1).slice()}));exportTypedArrayMethod$5(\"slice\",(function slice(e,r){for(var t=$slice$1.call(aTypedArray$4(this),e,r),a=typedArraySpeciesConstructor(this),i=0,s=t.length,c=new a(s);s>i;)c[i]=t[i++];return c}),FORCED$3);var $some=arrayIteration.some,aTypedArray$3=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$4=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$4(\"some\",(function some(e){return $some(aTypedArray$3(this),e,arguments.length>1?arguments[1]:void 0)}));var floor$3=Math.floor,mergeSort=function(e,r){var t=e.length,a=floor$3(t/2);return t<8?insertionSort(e,r):merge(mergeSort(e.slice(0,a),r),mergeSort(e.slice(a),r),r)},insertionSort=function(e,r){for(var t,a,i=e.length,s=1;s<i;){for(a=s,t=e[s];a&&r(e[a-1],t)>0;)e[a]=e[--a];a!==s++&&(e[a]=t)}return e},merge=function(e,r,t){for(var a=e.length,i=r.length,s=0,c=0,l=[];s<a||c<i;)s<a&&c<i?l.push(t(e[s],r[c])<=0?e[s++]:r[c++]):l.push(s<a?e[s++]:r[c++]);return l},arraySort=mergeSort,firefox=engineUserAgent.match(/firefox\\/(\\d+)/i),engineFfVersion=!!firefox&&+firefox[1],engineIsIeOrEdge=/MSIE|Trident/.test(engineUserAgent),webkit=engineUserAgent.match(/AppleWebKit\\/(\\d+)\\./),engineWebkitVersion=!!webkit&&+webkit[1],aTypedArray$2=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$3=arrayBufferViewCore.exportTypedArrayMethod,Uint16Array$1=global$1.Uint16Array,nativeSort$1=Uint16Array$1&&Uint16Array$1.prototype.sort,ACCEPT_INCORRECT_ARGUMENTS=!!nativeSort$1&&!fails((function(){var e=new Uint16Array$1(2);e.sort(null),e.sort({})})),STABLE_SORT$1=!!nativeSort$1&&!fails((function(){if(engineV8Version)return engineV8Version<74;if(engineFfVersion)return engineFfVersion<67;if(engineIsIeOrEdge)return!0;if(engineWebkitVersion)return engineWebkitVersion<602;var e,r,t=new Uint16Array$1(516),a=Array(516);for(e=0;e<516;e++)r=e%4,t[e]=515-e,a[e]=e-2*r+3;for(t.sort((function(e,r){return(e/4|0)-(r/4|0)})),e=0;e<516;e++)if(t[e]!==a[e])return!0})),getSortCompare$1=function(e){return function(r,t){return void 0!==e?+e(r,t)||0:t!=t?-1:r!=r?1:0===r&&0===t?1/r>0&&1/t<0?1:-1:r>t}};exportTypedArrayMethod$3(\"sort\",(function sort(e){if(void 0!==e&&aCallable(e),STABLE_SORT$1)return nativeSort$1.call(this,e);aTypedArray$2(this);var r,t=toLength(this.length),a=Array(t);for(r=0;r<t;r++)a[r]=this[r];for(a=arraySort(this,getSortCompare$1(e)),r=0;r<t;r++)this[r]=a[r];return this}),!STABLE_SORT$1||ACCEPT_INCORRECT_ARGUMENTS);var aTypedArray$1=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$2=arrayBufferViewCore.exportTypedArrayMethod;exportTypedArrayMethod$2(\"subarray\",(function subarray(e,r){var t=aTypedArray$1(this),a=t.length,i=toAbsoluteIndex(e,a);return new(typedArraySpeciesConstructor(t))(t.buffer,t.byteOffset+i*t.BYTES_PER_ELEMENT,toLength((void 0===r?a:toAbsoluteIndex(r,a))-i))}));var Int8Array$1=global$1.Int8Array,aTypedArray=arrayBufferViewCore.aTypedArray,exportTypedArrayMethod$1=arrayBufferViewCore.exportTypedArrayMethod,$toLocaleString=[].toLocaleString,$slice=[].slice,TO_LOCALE_STRING_BUG=!!Int8Array$1&&fails((function(){$toLocaleString.call(new Int8Array$1(1))})),FORCED$2=fails((function(){return[1,2].toLocaleString()!=new Int8Array$1([1,2]).toLocaleString()}))||!fails((function(){Int8Array$1.prototype.toLocaleString.call([1,2])}));exportTypedArrayMethod$1(\"toLocaleString\",(function toLocaleString(){return $toLocaleString.apply(TO_LOCALE_STRING_BUG?$slice.call(aTypedArray(this)):aTypedArray(this),arguments)}),FORCED$2);var exportTypedArrayMethod=arrayBufferViewCore.exportTypedArrayMethod,Uint8Array$1=global$1.Uint8Array,Uint8ArrayPrototype=Uint8Array$1&&Uint8Array$1.prototype||{},arrayToString=[].toString,arrayJoin=[].join;fails((function(){arrayToString.call({})}))&&(arrayToString=function toString(){return arrayJoin.call(this)});var IS_NOT_ARRAY_METHOD=Uint8ArrayPrototype.toString!=arrayToString;exportTypedArrayMethod(\"toString\",arrayToString,IS_NOT_ARRAY_METHOD);var $includes=arrayIncludes.includes;_export({target:\"Array\",proto:!0},{includes:function includes(e){return $includes(this,e,arguments.length>1?arguments[1]:void 0)}}),addToUnscopables(\"includes\");var notARegexp=function(e){if(isRegexp(e))throw TypeError(\"The method doesn't accept regular expressions\");return e},MATCH=wellKnownSymbol(\"match\"),correctIsRegexpLogic=function(e){var r=/./;try{\"/./\"[e](r)}catch(t){try{return r[MATCH]=!1,\"/./\"[e](r)}catch(e){}}return!1};_export({target:\"String\",proto:!0,forced:!correctIsRegexpLogic(\"includes\")},{includes:function includes(e){return!!~toString(requireObjectCoercible(this)).indexOf(toString(notARegexp(e)),arguments.length>1?arguments[1]:void 0)}});var createProperty=function(e,r,t){var a=toPropertyKey(r);a in e?objectDefineProperty.f(e,a,createPropertyDescriptor(0,t)):e[a]=t},SPECIES$1=wellKnownSymbol(\"species\"),arrayMethodHasSpeciesSupport=function(e){return engineV8Version>=51||!fails((function(){var r=[];return(r.constructor={})[SPECIES$1]=function(){return{foo:1}},1!==r[e](Boolean).foo}))},HAS_SPECIES_SUPPORT$1=arrayMethodHasSpeciesSupport(\"slice\"),SPECIES=wellKnownSymbol(\"species\"),nativeSlice=[].slice,max$1=Math.max;_export({target:\"Array\",proto:!0,forced:!HAS_SPECIES_SUPPORT$1},{slice:function slice(e,r){var t,a,i,s=toIndexedObject(this),c=toLength(s.length),l=toAbsoluteIndex(e,c),u=toAbsoluteIndex(void 0===r?c:r,c);if(isArray(s)&&(t=s.constructor,(isConstructor(t)&&(t===Array||isArray(t.prototype))||isObject(t)&&null===(t=t[SPECIES]))&&(t=void 0),t===Array||void 0===t))return nativeSlice.call(s,l,u);for(a=new(void 0===t?Array:t)(max$1(u-l,0)),i=0;l<u;l++,i++)l in s&&createProperty(a,i,s[l]);return a.length=i,a}}),typedArrayConstructor(\"Uint32\",(function(e){return function Uint32Array(r,t,a){return e(this,r,t,a)}})),typedArrayConstructor(\"Uint16\",(function(e){return function Uint16Array(r,t,a){return e(this,r,t,a)}}));var $filter=arrayIteration.filter,HAS_SPECIES_SUPPORT=arrayMethodHasSpeciesSupport(\"filter\");_export({target:\"Array\",proto:!0,forced:!HAS_SPECIES_SUPPORT},{filter:function filter(e){return $filter(this,e,arguments.length>1?arguments[1]:void 0)}});var PROPER_FUNCTION_NAME=functionName.PROPER,TO_STRING=\"toString\",RegExpPrototype=RegExp.prototype,nativeToString=RegExpPrototype[TO_STRING],NOT_GENERIC=fails((function(){return\"/a/b\"!=nativeToString.call({source:\"a\",flags:\"b\"})})),INCORRECT_NAME=PROPER_FUNCTION_NAME&&nativeToString.name!=TO_STRING;(NOT_GENERIC||INCORRECT_NAME)&&redefine(RegExp.prototype,TO_STRING,(function toString$1(){var e=anObject(this),r=toString(e.source),t=e.flags;return\"/\"+r+\"/\"+toString(void 0===t&&e instanceof RegExp&&!(\"flags\"in RegExpPrototype)?regexpFlags.call(e):t)}),{unsafe:!0});var test=[],nativeSort=test.sort,FAILS_ON_UNDEFINED=fails((function(){test.sort(void 0)})),FAILS_ON_NULL=fails((function(){test.sort(null)})),STRICT_METHOD$1=arrayMethodIsStrict(\"sort\"),STABLE_SORT=!fails((function(){if(engineV8Version)return engineV8Version<70;if(!(engineFfVersion&&engineFfVersion>3)){if(engineIsIeOrEdge)return!0;if(engineWebkitVersion)return engineWebkitVersion<603;var e,r,t,a,i=\"\";for(e=65;e<76;e++){switch(r=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:t=3;break;case 68:case 71:t=4;break;default:t=2}for(a=0;a<47;a++)test.push({k:r+a,v:t})}for(test.sort((function(e,r){return r.v-e.v})),a=0;a<test.length;a++)r=test[a].k.charAt(0),i.charAt(i.length-1)!==r&&(i+=r);return\"DGBEFHACIJK\"!==i}})),FORCED$1=FAILS_ON_UNDEFINED||!FAILS_ON_NULL||!STRICT_METHOD$1||!STABLE_SORT,getSortCompare=function(e){return function(r,t){return void 0===t?-1:void 0===r?1:void 0!==e?+e(r,t)||0:toString(r)>toString(t)?1:-1}};_export({target:\"Array\",proto:!0,forced:FORCED$1},{sort:function sort(e){void 0!==e&&aCallable(e);var r=toObject(this);if(STABLE_SORT)return void 0===e?nativeSort.call(r):nativeSort.call(r,e);var t,a,i=[],s=toLength(r.length);for(a=0;a<s;a++)a in r&&i.push(r[a]);for(t=(i=arraySort(i,getSortCompare(e))).length,a=0;a<t;)r[a]=i[a++];for(;a<s;)delete r[a++];return r}});var UZIP_1=createCommonjsModule((function(e){var r,t,UZIP={};e.exports=UZIP,UZIP.parse=function(e,r){for(var t=UZIP.bin.readUshort,a=UZIP.bin.readUint,i=0,s={},c=new Uint8Array(e),l=c.length-4;101010256!=a(c,l);)l--;i=l;i+=4;var u=t(c,i+=4);t(c,i+=2);var p=a(c,i+=2),d=a(c,i+=4);i+=4,i=d;for(var h=0;h<u;h++){a(c,i),i+=4,i+=4,i+=4,a(c,i+=4);p=a(c,i+=4);var y=a(c,i+=4),A=t(c,i+=4),g=t(c,i+2),v=t(c,i+4);i+=6;var E=a(c,i+=8);i+=4,i+=A+g+v,UZIP._readLocal(c,E,s,p,y,r)}return s},UZIP._readLocal=function(e,r,t,a,i,s){var c=UZIP.bin.readUshort,l=UZIP.bin.readUint;l(e,r),c(e,r+=4),c(e,r+=2);var u=c(e,r+=2);l(e,r+=2),l(e,r+=4),r+=4;var p=c(e,r+=8),d=c(e,r+=2);r+=2;var h=UZIP.bin.readUTF8(e,r,p);if(r+=p,r+=d,s)t[h]={size:i,csize:a};else{var y=new Uint8Array(e.buffer,r);if(0==u)t[h]=new Uint8Array(y.buffer.slice(r,r+a));else{if(8!=u)throw\"unknown compression method: \"+u;var A=new Uint8Array(i);UZIP.inflateRaw(y,A),t[h]=A}}},UZIP.inflateRaw=function(e,r){return UZIP.F.inflate(e,r)},UZIP.inflate=function(e,r){return e[0],e[1],UZIP.inflateRaw(new Uint8Array(e.buffer,e.byteOffset+2,e.length-6),r)},UZIP.deflate=function(e,r){null==r&&(r={level:6});var t=0,a=new Uint8Array(50+Math.floor(1.1*e.length));a[t]=120,a[t+1]=156,t+=2,t=UZIP.F.deflateRaw(e,a,t,r.level);var i=UZIP.adler(e,0,e.length);return a[t+0]=i>>>24&255,a[t+1]=i>>>16&255,a[t+2]=i>>>8&255,a[t+3]=i>>>0&255,new Uint8Array(a.buffer,0,t+4)},UZIP.deflateRaw=function(e,r){null==r&&(r={level:6});var t=new Uint8Array(50+Math.floor(1.1*e.length)),a=UZIP.F.deflateRaw(e,t,a,r.level);return new Uint8Array(t.buffer,0,a)},UZIP.encode=function(e,r){null==r&&(r=!1);var t=0,a=UZIP.bin.writeUint,i=UZIP.bin.writeUshort,s={};for(var c in e){var l=!UZIP._noNeed(c)&&!r,u=e[c],p=UZIP.crc.crc(u,0,u.length);s[c]={cpr:l,usize:u.length,crc:p,file:l?UZIP.deflateRaw(u):u}}for(var c in s)t+=s[c].file.length+30+46+2*UZIP.bin.sizeUTF8(c);t+=22;var d=new Uint8Array(t),h=0,y=[];for(var c in s){var A=s[c];y.push(h),h=UZIP._writeHeader(d,h,c,A,0)}var g=0,v=h;for(var c in s){A=s[c];y.push(h),h=UZIP._writeHeader(d,h,c,A,1,y[g++])}var E=h-v;return a(d,h,101010256),h+=4,i(d,h+=4,g),i(d,h+=2,g),a(d,h+=2,E),a(d,h+=4,v),h+=4,h+=2,d.buffer},UZIP._noNeed=function(e){var r=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(r)},UZIP._writeHeader=function(e,r,t,a,i,s){var c=UZIP.bin.writeUint,l=UZIP.bin.writeUshort,u=a.file;return c(e,r,0==i?67324752:33639248),r+=4,1==i&&(r+=2),l(e,r,20),l(e,r+=2,0),l(e,r+=2,a.cpr?8:0),c(e,r+=2,0),c(e,r+=4,a.crc),c(e,r+=4,u.length),c(e,r+=4,a.usize),l(e,r+=4,UZIP.bin.sizeUTF8(t)),l(e,r+=2,0),r+=2,1==i&&(r+=2,r+=2,c(e,r+=6,s),r+=4),r+=UZIP.bin.writeUTF8(e,r,t),0==i&&(e.set(u,r),r+=u.length),r},UZIP.crc={table:function(){for(var e=new Uint32Array(256),r=0;r<256;r++){for(var t=r,a=0;a<8;a++)1&t?t=3988292384^t>>>1:t>>>=1;e[r]=t}return e}(),update:function(e,r,t,a){for(var i=0;i<a;i++)e=UZIP.crc.table[255&(e^r[t+i])]^e>>>8;return e},crc:function(e,r,t){return 4294967295^UZIP.crc.update(4294967295,e,r,t)}},UZIP.adler=function(e,r,t){for(var a=1,i=0,s=r,c=r+t;s<c;){for(var l=Math.min(s+5552,c);s<l;)i+=a+=e[s++];a%=65521,i%=65521}return i<<16|a},UZIP.bin={readUshort:function(e,r){return e[r]|e[r+1]<<8},writeUshort:function(e,r,t){e[r]=255&t,e[r+1]=t>>8&255},readUint:function(e,r){return 16777216*e[r+3]+(e[r+2]<<16|e[r+1]<<8|e[r])},writeUint:function(e,r,t){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},readASCII:function(e,r,t){for(var a=\"\",i=0;i<t;i++)a+=String.fromCharCode(e[r+i]);return a},writeASCII:function(e,r,t){for(var a=0;a<t.length;a++)e[r+a]=t.charCodeAt(a)},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(e,r,t){for(var a,i=\"\",s=0;s<t;s++)i+=\"%\"+UZIP.bin.pad(e[r+s].toString(16));try{a=decodeURIComponent(i)}catch(a){return UZIP.bin.readASCII(e,r,t)}return a},writeUTF8:function(e,r,t){for(var a=t.length,i=0,s=0;s<a;s++){var c=t.charCodeAt(s);if(0==(4294967168&c))e[r+i]=c,i++;else if(0==(4294965248&c))e[r+i]=192|c>>6,e[r+i+1]=128|c>>0&63,i+=2;else if(0==(4294901760&c))e[r+i]=224|c>>12,e[r+i+1]=128|c>>6&63,e[r+i+2]=128|c>>0&63,i+=3;else{if(0!=(4292870144&c))throw\"e\";e[r+i]=240|c>>18,e[r+i+1]=128|c>>12&63,e[r+i+2]=128|c>>6&63,e[r+i+3]=128|c>>0&63,i+=4}}return i},sizeUTF8:function(e){for(var r=e.length,t=0,a=0;a<r;a++){var i=e.charCodeAt(a);if(0==(4294967168&i))t++;else if(0==(4294965248&i))t+=2;else if(0==(4294901760&i))t+=3;else{if(0!=(4292870144&i))throw\"e\";t+=4}}return t}},UZIP.F={},UZIP.F.deflateRaw=function(e,r,t,a){var i=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][a],s=UZIP.F.U,c=UZIP.F._goodIndex;UZIP.F._hash;var l=UZIP.F._putsE,u=0,p=t<<3,d=0,h=e.length;if(0==a){for(;u<h;){l(r,p,u+(R=Math.min(65535,h-u))==h?1:0),p=UZIP.F._copyExact(e,u,R,r,p+8),u+=R}return p>>>3}var y=s.lits,A=s.strt,g=s.prev,v=0,E=0,m=0,I=0,P=0,b=0;for(h>2&&(A[b=UZIP.F._hash(e,0)]=0),u=0;u<h;u++){if(P=b,u+1<h-2){b=UZIP.F._hash(e,u+1);var T=u+1&32767;g[T]=A[b],A[b]=T}if(d<=u){(v>14e3||E>26697)&&h-u>100&&(d<u&&(y[v]=u-d,v+=2,d=u),p=UZIP.F._writeBlock(u==h-1||d==h?1:0,y,v,I,e,m,u-m,r,p),v=E=I=0,m=u);var S=0;u<h-2&&(S=UZIP.F._bestMatch(e,u,g,P,Math.min(i[2],h-u),i[3]));var R=S>>>16,_=65535&S;if(0!=S){_=65535&S;var U=c(R=S>>>16,s.of0);s.lhst[257+U]++;var w=c(_,s.df0);s.dhst[w]++,I+=s.exb[U]+s.dxb[w],y[v]=R<<23|u-d,y[v+1]=_<<16|U<<8|w,v+=2,d=u+R}else s.lhst[e[u]]++;E++}}for(m==u&&0!=e.length||(d<u&&(y[v]=u-d,v+=2,d=u),p=UZIP.F._writeBlock(1,y,v,I,e,m,u-m,r,p),v=0,E=0,v=E=I=0,m=u);0!=(7&p);)p++;return p>>>3},UZIP.F._bestMatch=function(e,r,t,a,i,s){var c=32767&r,l=t[c],u=c-l+32768&32767;if(l==c||a!=UZIP.F._hash(e,r-u))return 0;for(var p=0,d=0,h=Math.min(32767,r);u<=h&&0!=--s&&l!=c;){if(0==p||e[r+p]==e[r+p-u]){var y=UZIP.F._howLong(e,r,u);if(y>p){if(d=u,(p=y)>=i)break;u+2<y&&(y=u+2);for(var A=0,g=0;g<y-2;g++){var v=r-u+g+32768&32767,E=v-t[v]+32768&32767;E>A&&(A=E,l=v)}}}u+=(c=l)-(l=t[c])+32768&32767}return p<<16|d},UZIP.F._howLong=function(e,r,t){if(e[r]!=e[r-t]||e[r+1]!=e[r+1-t]||e[r+2]!=e[r+2-t])return 0;var a=r,i=Math.min(e.length,r+258);for(r+=3;r<i&&e[r]==e[r-t];)r++;return r-a},UZIP.F._hash=function(e,r){return(e[r]<<8|e[r+1])+(e[r+2]<<4)&65535},UZIP.saved=0,UZIP.F._writeBlock=function(e,r,t,a,i,s,c,l,u){var p,d,h,y,A,g,v,E,m,I=UZIP.F.U,P=UZIP.F._putsF,b=UZIP.F._putsE;I.lhst[256]++,d=(p=UZIP.F.getTrees())[0],h=p[1],y=p[2],A=p[3],g=p[4],v=p[5],E=p[6],m=p[7];var T=32+(0==(u+3&7)?0:8-(u+3&7))+(c<<3),S=a+UZIP.F.contSize(I.fltree,I.lhst)+UZIP.F.contSize(I.fdtree,I.dhst),R=a+UZIP.F.contSize(I.ltree,I.lhst)+UZIP.F.contSize(I.dtree,I.dhst);R+=14+3*v+UZIP.F.contSize(I.itree,I.ihst)+(2*I.ihst[16]+3*I.ihst[17]+7*I.ihst[18]);for(var _=0;_<286;_++)I.lhst[_]=0;for(_=0;_<30;_++)I.dhst[_]=0;for(_=0;_<19;_++)I.ihst[_]=0;var U=T<S&&T<R?0:S<R?1:2;if(P(l,u,e),P(l,u+1,U),u+=3,0==U){for(;0!=(7&u);)u++;u=UZIP.F._copyExact(i,s,c,l,u)}else{var w,O;if(1==U&&(w=I.fltree,O=I.fdtree),2==U){UZIP.F.makeCodes(I.ltree,d),UZIP.F.revCodes(I.ltree,d),UZIP.F.makeCodes(I.dtree,h),UZIP.F.revCodes(I.dtree,h),UZIP.F.makeCodes(I.itree,y),UZIP.F.revCodes(I.itree,y),w=I.ltree,O=I.dtree,b(l,u,A-257),b(l,u+=5,g-1),b(l,u+=5,v-4),u+=4;for(var C=0;C<v;C++)b(l,u+3*C,I.itree[1+(I.ordr[C]<<1)]);u+=3*v,u=UZIP.F._codeTiny(E,I.itree,l,u),u=UZIP.F._codeTiny(m,I.itree,l,u)}for(var $=s,L=0;L<t;L+=2){for(var x=r[L],M=x>>>23,B=$+(8388607&x);$<B;)u=UZIP.F._writeLit(i[$++],w,l,u);if(0!=M){var D=r[L+1],G=D>>16,V=D>>8&255,k=255&D;b(l,u=UZIP.F._writeLit(257+V,w,l,u),M-I.of0[V]),u+=I.exb[V],P(l,u=UZIP.F._writeLit(k,O,l,u),G-I.df0[k]),u+=I.dxb[k],$+=M}}u=UZIP.F._writeLit(256,w,l,u)}return u},UZIP.F._copyExact=function(e,r,t,a,i){var s=i>>>3;return a[s]=t,a[s+1]=t>>>8,a[s+2]=255-a[s],a[s+3]=255-a[s+1],s+=4,a.set(new Uint8Array(e.buffer,r,t),s),i+(t+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,r=UZIP.F._hufTree(e.lhst,e.ltree,15),t=UZIP.F._hufTree(e.dhst,e.dtree,15),a=[],i=UZIP.F._lenCodes(e.ltree,a),s=[],c=UZIP.F._lenCodes(e.dtree,s),l=0;l<a.length;l+=2)e.ihst[a[l]]++;for(l=0;l<s.length;l+=2)e.ihst[s[l]]++;for(var u=UZIP.F._hufTree(e.ihst,e.itree,7),p=19;p>4&&0==e.itree[1+(e.ordr[p-1]<<1)];)p--;return[r,t,u,i,c,p,a,s]},UZIP.F.getSecond=function(e){for(var r=[],t=0;t<e.length;t+=2)r.push(e[t+1]);return r},UZIP.F.nonZero=function(e){for(var r=\"\",t=0;t<e.length;t+=2)0!=e[t+1]&&(r+=(t>>1)+\",\");return r},UZIP.F.contSize=function(e,r){for(var t=0,a=0;a<r.length;a++)t+=r[a]*e[1+(a<<1)];return t},UZIP.F._codeTiny=function(e,r,t,a){for(var i=0;i<e.length;i+=2){var s=e[i],c=e[i+1];a=UZIP.F._writeLit(s,r,t,a);var l=16==s?2:17==s?3:7;s>15&&(UZIP.F._putsE(t,a,c,l),a+=l)}return a},UZIP.F._lenCodes=function(e,r){for(var t=e.length;2!=t&&0==e[t-1];)t-=2;for(var a=0;a<t;a+=2){var i=e[a+1],s=a+3<t?e[a+3]:-1,c=a+5<t?e[a+5]:-1,l=0==a?-1:e[a-1];if(0==i&&s==i&&c==i){for(var u=a+5;u+2<t&&e[u+2]==i;)u+=2;(p=Math.min(u+1-a>>>1,138))<11?r.push(17,p-3):r.push(18,p-11),a+=2*p-2}else if(i==l&&s==i&&c==i){for(u=a+5;u+2<t&&e[u+2]==i;)u+=2;var p=Math.min(u+1-a>>>1,6);r.push(16,p-3),a+=2*p-2}else r.push(i,0)}return t>>>1},UZIP.F._hufTree=function(e,r,t){var a=[],i=e.length,s=r.length,c=0;for(c=0;c<s;c+=2)r[c]=0,r[c+1]=0;for(c=0;c<i;c++)0!=e[c]&&a.push({lit:c,f:e[c]});var l=a.length,u=a.slice(0);if(0==l)return 0;if(1==l){var p=a[0].lit;u=0==p?1:0;return r[1+(p<<1)]=1,r[1+(u<<1)]=1,1}a.sort((function(e,r){return e.f-r.f}));var d=a[0],h=a[1],y=0,A=1,g=2;for(a[0]={lit:-1,f:d.f+h.f,l:d,r:h,d:0};A!=l-1;)d=y!=A&&(g==l||a[y].f<a[g].f)?a[y++]:a[g++],h=y!=A&&(g==l||a[y].f<a[g].f)?a[y++]:a[g++],a[A++]={lit:-1,f:d.f+h.f,l:d,r:h};var v=UZIP.F.setDepth(a[A-1],0);for(v>t&&(UZIP.F.restrictDepth(u,t,v),v=t),c=0;c<l;c++)r[1+(u[c].lit<<1)]=u[c].d;return v},UZIP.F.setDepth=function(e,r){return-1!=e.lit?(e.d=r,r):Math.max(UZIP.F.setDepth(e.l,r+1),UZIP.F.setDepth(e.r,r+1))},UZIP.F.restrictDepth=function(e,r,t){var a=0,i=1<<t-r,s=0;for(e.sort((function(e,r){return r.d==e.d?e.f-r.f:r.d-e.d})),a=0;a<e.length&&e[a].d>r;a++){var c=e[a].d;e[a].d=r,s+=i-(1<<t-c)}for(s>>>=t-r;s>0;){(c=e[a].d)<r?(e[a].d++,s-=1<<r-c-1):a++}for(;a>=0;a--)e[a].d==r&&s<0&&(e[a].d--,s++);0!=s&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,r){var t=0;return r[16|t]<=e&&(t|=16),r[8|t]<=e&&(t|=8),r[4|t]<=e&&(t|=4),r[2|t]<=e&&(t|=2),r[1|t]<=e&&(t|=1),t},UZIP.F._writeLit=function(e,r,t,a){return UZIP.F._putsF(t,a,r[e<<1]),a+r[1+(e<<1)]},UZIP.F.inflate=function(e,r){var t=Uint8Array;if(3==e[0]&&0==e[1])return r||new t(0);var a=UZIP.F,i=a._bitsF,s=a._bitsE,c=a._decodeTiny,l=a.makeCodes,u=a.codes2map,p=a._get17,d=a.U,h=null==r;h&&(r=new t(e.length>>>2<<3));for(var y,A,g=0,v=0,E=0,m=0,I=0,P=0,b=0,T=0,S=0;0==g;)if(g=i(e,S,1),v=i(e,S+1,2),S+=3,0!=v){if(h&&(r=UZIP.F._check(r,T+(1<<17))),1==v&&(y=d.flmap,A=d.fdmap,P=511,b=31),2==v){E=s(e,S,5)+257,m=s(e,S+5,5)+1,I=s(e,S+10,4)+4,S+=14;for(var R=0;R<38;R+=2)d.itree[R]=0,d.itree[R+1]=0;var _=1;for(R=0;R<I;R++){var U=s(e,S+3*R,3);d.itree[1+(d.ordr[R]<<1)]=U,U>_&&(_=U)}S+=3*I,l(d.itree,_),u(d.itree,_,d.imap),y=d.lmap,A=d.dmap,S=c(d.imap,(1<<_)-1,E+m,e,S,d.ttree);var w=a._copyOut(d.ttree,0,E,d.ltree);P=(1<<w)-1;var O=a._copyOut(d.ttree,E,m,d.dtree);b=(1<<O)-1,l(d.ltree,w),u(d.ltree,w,y),l(d.dtree,O),u(d.dtree,O,A)}for(;;){var C=y[p(e,S)&P];S+=15&C;var $=C>>>4;if($>>>8==0)r[T++]=$;else{if(256==$)break;var L=T+$-254;if($>264){var x=d.ldef[$-257];L=T+(x>>>3)+s(e,S,7&x),S+=7&x}var M=A[p(e,S)&b];S+=15&M;var B=M>>>4,D=d.ddef[B],G=(D>>>4)+i(e,S,15&D);for(S+=15&D,h&&(r=UZIP.F._check(r,T+(1<<17)));T<L;)r[T]=r[T++-G],r[T]=r[T++-G],r[T]=r[T++-G],r[T]=r[T++-G];T=L}}}else{0!=(7&S)&&(S+=8-(7&S));var V=4+(S>>>3),k=e[V-4]|e[V-3]<<8;h&&(r=UZIP.F._check(r,T+k)),r.set(new t(e.buffer,e.byteOffset+V,k),T),S=V+k<<3,T+=k}return r.length==T?r:r.slice(0,T)},UZIP.F._check=function(e,r){var t=e.length;if(r<=t)return e;var a=new Uint8Array(Math.max(t<<1,r));return a.set(e,0),a},UZIP.F._decodeTiny=function(e,r,t,a,i,s){for(var c=UZIP.F._bitsE,l=UZIP.F._get17,u=0;u<t;){var p=e[l(a,i)&r];i+=15&p;var d=p>>>4;if(d<=15)s[u]=d,u++;else{var h=0,y=0;16==d?(y=3+c(a,i,2),i+=2,h=s[u-1]):17==d?(y=3+c(a,i,3),i+=3):18==d&&(y=11+c(a,i,7),i+=7);for(var A=u+y;u<A;)s[u]=h,u++}}return i},UZIP.F._copyOut=function(e,r,t,a){for(var i=0,s=0,c=a.length>>>1;s<t;){var l=e[s+r];a[s<<1]=0,a[1+(s<<1)]=l,l>i&&(i=l),s++}for(;s<c;)a[s<<1]=0,a[1+(s<<1)]=0,s++;return i},UZIP.F.makeCodes=function(e,r){for(var t,a,i,s,c=UZIP.F.U,l=e.length,u=c.bl_count,p=0;p<=r;p++)u[p]=0;for(p=1;p<l;p+=2)u[e[p]]++;var d=c.next_code;for(t=0,u[0]=0,a=1;a<=r;a++)t=t+u[a-1]<<1,d[a]=t;for(i=0;i<l;i+=2)0!=(s=e[i+1])&&(e[i]=d[s],d[s]++)},UZIP.F.codes2map=function(e,r,t){for(var a=e.length,i=UZIP.F.U.rev15,s=0;s<a;s+=2)if(0!=e[s+1])for(var c=s>>1,l=e[s+1],u=c<<4|l,p=r-l,d=e[s]<<p,h=d+(1<<p);d!=h;){t[i[d]>>>15-r]=u,d++}},UZIP.F.revCodes=function(e,r){for(var t=UZIP.F.U.rev15,a=15-r,i=0;i<e.length;i+=2){var s=e[i]<<r-e[i+1];e[i]=t[s]>>>a}},UZIP.F._putsE=function(e,r,t){t<<=7&r;var a=r>>>3;e[a]|=t,e[a+1]|=t>>>8},UZIP.F._putsF=function(e,r,t){t<<=7&r;var a=r>>>3;e[a]|=t,e[a+1]|=t>>>8,e[a+2]|=t>>>16},UZIP.F._bitsE=function(e,r,t){return(e[r>>>3]|e[1+(r>>>3)]<<8)>>>(7&r)&(1<<t)-1},UZIP.F._bitsF=function(e,r,t){return(e[r>>>3]|e[1+(r>>>3)]<<8|e[2+(r>>>3)]<<16)>>>(7&r)&(1<<t)-1},UZIP.F._get17=function(e,r){return(e[r>>>3]|e[1+(r>>>3)]<<8|e[2+(r>>>3)]<<16)>>>(7&r)},UZIP.F._get25=function(e,r){return(e[r>>>3]|e[1+(r>>>3)]<<8|e[2+(r>>>3)]<<16|e[3+(r>>>3)]<<24)>>>(7&r)},UZIP.F.U=(r=Uint16Array,t=Uint32Array,{next_code:new r(16),bl_count:new r(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new r(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new t(32),flmap:new r(512),fltree:[],fdmap:new r(32),fdtree:[],lmap:new r(32768),ltree:[],ttree:[],dmap:new r(32768),dtree:[],imap:new r(512),itree:[],rev15:new r(32768),lhst:new t(286),dhst:new t(30),ihst:new t(19),lits:new t(15e3),strt:new r(65536),prev:new r(32768)}),function(){for(var e=UZIP.F.U,r=0;r<32768;r++){var t=r;t=(4278255360&(t=(4042322160&(t=(3435973836&(t=(2863311530&t)>>>1|(1431655765&t)<<1))>>>2|(858993459&t)<<2))>>>4|(252645135&t)<<4))>>>8|(16711935&t)<<8,e.rev15[r]=(t>>>16|t<<16)>>>17}function pushV(e,r,t){for(;0!=r--;)e.push(0,t)}for(r=0;r<32;r++)e.ldef[r]=e.of0[r]<<3|e.exb[r],e.ddef[r]=e.df0[r]<<4|e.dxb[r];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()})),UZIP=Object.freeze(_mergeNamespaces({__proto__:null,default:UZIP_1},[UZIP_1])),UPNG={},N,W,H;UPNG.toRGBA8=function(e){var r=e.width,t=e.height;if(null==e.tabs.acTL)return[UPNG.toRGBA8.decodeImage(e.data,r,t,e).buffer];var a=[];null==e.frames[0].data&&(e.frames[0].data=e.data);for(var i=r*t*4,s=new Uint8Array(i),c=new Uint8Array(i),l=new Uint8Array(i),u=0;u<e.frames.length;u++){var p=e.frames[u],d=p.rect.x,h=p.rect.y,y=p.rect.width,A=p.rect.height,g=UPNG.toRGBA8.decodeImage(p.data,y,A,e);if(0!=u)for(var v=0;v<i;v++)l[v]=s[v];if(0==p.blend?UPNG._copyTile(g,y,A,s,r,t,d,h,0):1==p.blend&&UPNG._copyTile(g,y,A,s,r,t,d,h,1),a.push(s.buffer.slice(0)),0==p.dispose);else if(1==p.dispose)UPNG._copyTile(c,y,A,s,r,t,d,h,0);else if(2==p.dispose)for(v=0;v<i;v++)s[v]=l[v]}return a},UPNG.toRGBA8.decodeImage=function(e,r,t,a){var i=r*t,s=UPNG.decode._getBPP(a),c=Math.ceil(r*s/8),l=new Uint8Array(4*i),u=new Uint32Array(l.buffer),p=a.ctype,d=a.depth,h=UPNG._bin.readUshort;if(6==p){var y=i<<2;if(8==d)for(var A=0;A<y;A+=4)l[A]=e[A],l[A+1]=e[A+1],l[A+2]=e[A+2],l[A+3]=e[A+3];if(16==d)for(A=0;A<y;A++)l[A]=e[A<<1]}else if(2==p){var g=a.tabs.tRNS;if(null==g){if(8==d)for(A=0;A<i;A++){var v=3*A;u[A]=255<<24|e[v+2]<<16|e[v+1]<<8|e[v]}if(16==d)for(A=0;A<i;A++){v=6*A;u[A]=255<<24|e[v+4]<<16|e[v+2]<<8|e[v]}}else{var E=g[0],m=g[1],I=g[2];if(8==d)for(A=0;A<i;A++){var P=A<<2;v=3*A;u[A]=255<<24|e[v+2]<<16|e[v+1]<<8|e[v],e[v]==E&&e[v+1]==m&&e[v+2]==I&&(l[P+3]=0)}if(16==d)for(A=0;A<i;A++){P=A<<2,v=6*A;u[A]=255<<24|e[v+4]<<16|e[v+2]<<8|e[v],h(e,v)==E&&h(e,v+2)==m&&h(e,v+4)==I&&(l[P+3]=0)}}}else if(3==p){var b=a.tabs.PLTE,T=a.tabs.tRNS,S=T?T.length:0;if(1==d)for(var R=0;R<t;R++){var _=R*c,U=R*r;for(A=0;A<r;A++){P=U+A<<2;var w=3*(O=e[_+(A>>3)]>>7-((7&A)<<0)&1);l[P]=b[w],l[P+1]=b[w+1],l[P+2]=b[w+2],l[P+3]=O<S?T[O]:255}}if(2==d)for(R=0;R<t;R++)for(_=R*c,U=R*r,A=0;A<r;A++){P=U+A<<2,w=3*(O=e[_+(A>>2)]>>6-((3&A)<<1)&3);l[P]=b[w],l[P+1]=b[w+1],l[P+2]=b[w+2],l[P+3]=O<S?T[O]:255}if(4==d)for(R=0;R<t;R++)for(_=R*c,U=R*r,A=0;A<r;A++){P=U+A<<2,w=3*(O=e[_+(A>>1)]>>4-((1&A)<<2)&15);l[P]=b[w],l[P+1]=b[w+1],l[P+2]=b[w+2],l[P+3]=O<S?T[O]:255}if(8==d)for(A=0;A<i;A++){var O;P=A<<2,w=3*(O=e[A]);l[P]=b[w],l[P+1]=b[w+1],l[P+2]=b[w+2],l[P+3]=O<S?T[O]:255}}else if(4==p){if(8==d)for(A=0;A<i;A++){P=A<<2;var C=e[$=A<<1];l[P]=C,l[P+1]=C,l[P+2]=C,l[P+3]=e[$+1]}if(16==d)for(A=0;A<i;A++){var $;P=A<<2,C=e[$=A<<2];l[P]=C,l[P+1]=C,l[P+2]=C,l[P+3]=e[$+2]}}else if(0==p)for(E=a.tabs.tRNS?a.tabs.tRNS:-1,R=0;R<t;R++){var L=R*c,x=R*r;if(1==d)for(var M=0;M<r;M++){var B=(C=255*(e[L+(M>>>3)]>>>7-(7&M)&1))==255*E?0:255;u[x+M]=B<<24|C<<16|C<<8|C}else if(2==d)for(M=0;M<r;M++){B=(C=85*(e[L+(M>>>2)]>>>6-((3&M)<<1)&3))==85*E?0:255;u[x+M]=B<<24|C<<16|C<<8|C}else if(4==d)for(M=0;M<r;M++){B=(C=17*(e[L+(M>>>1)]>>>4-((1&M)<<2)&15))==17*E?0:255;u[x+M]=B<<24|C<<16|C<<8|C}else if(8==d)for(M=0;M<r;M++){B=(C=e[L+M])==E?0:255;u[x+M]=B<<24|C<<16|C<<8|C}else if(16==d)for(M=0;M<r;M++){C=e[L+(M<<1)],B=h(e,L+(M<<A))==E?0:255;u[x+M]=B<<24|C<<16|C<<8|C}}return l},UPNG.decode=function(e){for(var r,t=new Uint8Array(e),a=8,i=UPNG._bin,s=i.readUshort,c=i.readUint,l={tabs:{},frames:[]},u=new Uint8Array(t.length),p=0,d=0,h=[137,80,78,71,13,10,26,10],y=0;y<8;y++)if(t[y]!=h[y])throw\"The input is not a PNG file!\";for(;a<t.length;){var A=i.readUint(t,a);a+=4;var g=i.readASCII(t,a,4);if(a+=4,\"IHDR\"==g)UPNG.decode._IHDR(t,a,l);else if(\"CgBI\"==g)l.tabs[g]=t.slice(a,a+4);else if(\"IDAT\"==g){for(y=0;y<A;y++)u[p+y]=t[a+y];p+=A}else if(\"acTL\"==g)l.tabs[g]={num_frames:c(t,a),num_plays:c(t,a+4)},r=new Uint8Array(t.length);else if(\"fcTL\"==g){var v;if(0!=d)(v=l.frames[l.frames.length-1]).data=UPNG.decode._decompress(l,r.slice(0,d),v.rect.width,v.rect.height),d=0;var E={x:c(t,a+12),y:c(t,a+16),width:c(t,a+4),height:c(t,a+8)},m=s(t,a+22);m=s(t,a+20)/(0==m?100:m);var I={rect:E,delay:Math.round(1e3*m),dispose:t[a+24],blend:t[a+25]};l.frames.push(I)}else if(\"fdAT\"==g){for(y=0;y<A-4;y++)r[d+y]=t[a+y+4];d+=A-4}else if(\"pHYs\"==g)l.tabs[g]=[i.readUint(t,a),i.readUint(t,a+4),t[a+8]];else if(\"cHRM\"==g){l.tabs[g]=[];for(y=0;y<8;y++)l.tabs[g].push(i.readUint(t,a+4*y))}else if(\"tEXt\"==g||\"zTXt\"==g){null==l.tabs[g]&&(l.tabs[g]={});var P=i.nextZero(t,a),b=i.readASCII(t,a,P-a),T=a+A-P-1;if(\"tEXt\"==g)_=i.readASCII(t,P+1,T);else{var S=UPNG.decode._inflate(t.slice(P+2,P+2+T));_=i.readUTF8(S,0,S.length)}l.tabs[g][b]=_}else if(\"iTXt\"==g){null==l.tabs[g]&&(l.tabs[g]={});P=0;var R=a;P=i.nextZero(t,R);b=i.readASCII(t,R,P-R);var _,U=t[R=P+1];t[R+1],R+=2,P=i.nextZero(t,R),i.readASCII(t,R,P-R),R=P+1,P=i.nextZero(t,R),i.readUTF8(t,R,P-R);T=A-((R=P+1)-a);if(0==U)_=i.readUTF8(t,R,T);else{S=UPNG.decode._inflate(t.slice(R,R+T));_=i.readUTF8(S,0,S.length)}l.tabs[g][b]=_}else if(\"PLTE\"==g)l.tabs[g]=i.readBytes(t,a,A);else if(\"hIST\"==g){var w=l.tabs.PLTE.length/3;l.tabs[g]=[];for(y=0;y<w;y++)l.tabs[g].push(s(t,a+2*y))}else if(\"tRNS\"==g)3==l.ctype?l.tabs[g]=i.readBytes(t,a,A):0==l.ctype?l.tabs[g]=s(t,a):2==l.ctype&&(l.tabs[g]=[s(t,a),s(t,a+2),s(t,a+4)]);else if(\"gAMA\"==g)l.tabs[g]=i.readUint(t,a)/1e5;else if(\"sRGB\"==g)l.tabs[g]=t[a];else if(\"bKGD\"==g)0==l.ctype||4==l.ctype?l.tabs[g]=[s(t,a)]:2==l.ctype||6==l.ctype?l.tabs[g]=[s(t,a),s(t,a+2),s(t,a+4)]:3==l.ctype&&(l.tabs[g]=t[a]);else if(\"IEND\"==g)break;a+=A,i.readUint(t,a),a+=4}0!=d&&((v=l.frames[l.frames.length-1]).data=UPNG.decode._decompress(l,r.slice(0,d),v.rect.width,v.rect.height),d=0);return l.data=UPNG.decode._decompress(l,u,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},UPNG.decode._decompress=function(e,r,t,a){var i=UPNG.decode._getBPP(e),s=Math.ceil(t*i/8),c=new Uint8Array((s+1+e.interlace)*a);return r=e.tabs.CgBI?UPNG.inflateRaw(r,c):UPNG.decode._inflate(r,c),0==e.interlace?r=UPNG.decode._filterZero(r,e,0,t,a):1==e.interlace&&(r=UPNG.decode._readInterlace(r,e)),r},UPNG.decode._inflate=function(e,r){return UPNG.inflateRaw(new Uint8Array(e.buffer,2,e.length-6),r)},UPNG.inflateRaw=(H={},H.H={},H.H.N=function(e,r){var t,a,i=Uint8Array,s=0,c=0,l=0,u=0,p=0,d=0,h=0,y=0,A=0;if(3==e[0]&&0==e[1])return r||new i(0);var g=H.H,v=g.b,E=g.e,m=g.R,I=g.n,P=g.A,b=g.Z,T=g.m,S=null==r;for(S&&(r=new i(e.length>>>2<<5));0==s;)if(s=v(e,A,1),c=v(e,A+1,2),A+=3,0!=c){if(S&&(r=H.H.W(r,y+(1<<17))),1==c&&(t=T.J,a=T.h,d=511,h=31),2==c){l=E(e,A,5)+257,u=E(e,A+5,5)+1,p=E(e,A+10,4)+4,A+=14;for(var R=1,_=0;_<38;_+=2)T.Q[_]=0,T.Q[_+1]=0;for(_=0;_<p;_++){var U=E(e,A+3*_,3);T.Q[1+(T.X[_]<<1)]=U,U>R&&(R=U)}A+=3*p,I(T.Q,R),P(T.Q,R,T.u),t=T.w,a=T.d,A=m(T.u,(1<<R)-1,l+u,e,A,T.v);var w=g.V(T.v,0,l,T.C);d=(1<<w)-1;var O=g.V(T.v,l,u,T.D);h=(1<<O)-1,I(T.C,w),P(T.C,w,t),I(T.D,O),P(T.D,O,a)}for(;;){var C=t[b(e,A)&d];A+=15&C;var $=C>>>4;if($>>>8==0)r[y++]=$;else{if(256==$)break;var L=y+$-254;if($>264){var x=T.q[$-257];L=y+(x>>>3)+E(e,A,7&x),A+=7&x}var M=a[b(e,A)&h];A+=15&M;var B=M>>>4,D=T.c[B],G=(D>>>4)+v(e,A,15&D);for(A+=15&D;y<L;)r[y]=r[y++-G],r[y]=r[y++-G],r[y]=r[y++-G],r[y]=r[y++-G];y=L}}}else{0!=(7&A)&&(A+=8-(7&A));var V=4+(A>>>3),k=e[V-4]|e[V-3]<<8;S&&(r=H.H.W(r,y+k)),r.set(new i(e.buffer,e.byteOffset+V,k),y),A=V+k<<3,y+=k}return r.length==y?r:r.slice(0,y)},H.H.W=function(e,r){var t=e.length;if(r<=t)return e;var a=new Uint8Array(t<<1);return a.set(e,0),a},H.H.R=function(e,r,t,a,i,s){for(var c=H.H.e,l=H.H.Z,u=0;u<t;){var p=e[l(a,i)&r];i+=15&p;var d=p>>>4;if(d<=15)s[u]=d,u++;else{var h=0,y=0;16==d?(y=3+c(a,i,2),i+=2,h=s[u-1]):17==d?(y=3+c(a,i,3),i+=3):18==d&&(y=11+c(a,i,7),i+=7);for(var A=u+y;u<A;)s[u]=h,u++}}return i},H.H.V=function(e,r,t,a){for(var i=0,s=0,c=a.length>>>1;s<t;){var l=e[s+r];a[s<<1]=0,a[1+(s<<1)]=l,l>i&&(i=l),s++}for(;s<c;)a[s<<1]=0,a[1+(s<<1)]=0,s++;return i},H.H.n=function(e,r){for(var t,a,i,s,c=H.H.m,l=e.length,u=c.j,p=0;p<=r;p++)u[p]=0;for(p=1;p<l;p+=2)u[e[p]]++;var d=c.K;for(t=0,u[0]=0,a=1;a<=r;a++)t=t+u[a-1]<<1,d[a]=t;for(i=0;i<l;i+=2)0!=(s=e[i+1])&&(e[i]=d[s],d[s]++)},H.H.A=function(e,r,t){for(var a=e.length,i=H.H.m.r,s=0;s<a;s+=2)if(0!=e[s+1])for(var c=s>>1,l=e[s+1],u=c<<4|l,p=r-l,d=e[s]<<p,h=d+(1<<p);d!=h;)t[i[d]>>>15-r]=u,d++},H.H.l=function(e,r){for(var t=H.H.m.r,a=15-r,i=0;i<e.length;i+=2){var s=e[i]<<r-e[i+1];e[i]=t[s]>>>a}},H.H.M=function(e,r,t){t<<=7&r;var a=r>>>3;e[a]|=t,e[a+1]|=t>>>8},H.H.I=function(e,r,t){t<<=7&r;var a=r>>>3;e[a]|=t,e[a+1]|=t>>>8,e[a+2]|=t>>>16},H.H.e=function(e,r,t){return(e[r>>>3]|e[1+(r>>>3)]<<8)>>>(7&r)&(1<<t)-1},H.H.b=function(e,r,t){return(e[r>>>3]|e[1+(r>>>3)]<<8|e[2+(r>>>3)]<<16)>>>(7&r)&(1<<t)-1},H.H.Z=function(e,r){return(e[r>>>3]|e[1+(r>>>3)]<<8|e[2+(r>>>3)]<<16)>>>(7&r)},H.H.i=function(e,r){return(e[r>>>3]|e[1+(r>>>3)]<<8|e[2+(r>>>3)]<<16|e[3+(r>>>3)]<<24)>>>(7&r)},H.H.m=(N=Uint16Array,W=Uint32Array,{K:new N(16),j:new N(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new N(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new W(32),J:new N(512),_:[],h:new N(32),$:[],w:new N(32768),C:[],v:[],d:new N(32768),D:[],u:new N(512),Q:[],r:new N(32768),s:new W(286),Y:new W(30),a:new W(19),t:new W(15e3),k:new N(65536),g:new N(32768)}),function(){for(var e=H.H.m,r=0;r<32768;r++){var t=r;t=(4278255360&(t=(4042322160&(t=(3435973836&(t=(2863311530&t)>>>1|(1431655765&t)<<1))>>>2|(858993459&t)<<2))>>>4|(252645135&t)<<4))>>>8|(16711935&t)<<8,e.r[r]=(t>>>16|t<<16)>>>17}function n(e,r,t){for(;0!=r--;)e.push(0,t)}for(r=0;r<32;r++)e.q[r]=e.S[r]<<3|e.T[r],e.c[r]=e.p[r]<<4|e.z[r];n(e._,144,8),n(e._,112,9),n(e._,24,7),n(e._,8,8),H.H.n(e._,9),H.H.A(e._,9,e.J),H.H.l(e._,9),n(e.$,32,5),H.H.n(e.$,5),H.H.A(e.$,5,e.h),H.H.l(e.$,5),n(e.Q,19,0),n(e.C,286,0),n(e.D,30,0),n(e.v,320,0)}(),H.H.N),UPNG.decode._readInterlace=function(e,r){for(var t=r.width,a=r.height,i=UPNG.decode._getBPP(r),s=i>>3,c=Math.ceil(t*i/8),l=new Uint8Array(a*c),u=0,p=[0,0,4,0,2,0,1],d=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],y=[8,8,4,4,2,2,1],A=0;A<7;){for(var g=h[A],v=y[A],E=0,m=0,I=p[A];I<a;)I+=g,m++;for(var P=d[A];P<t;)P+=v,E++;var b=Math.ceil(E*i/8);UPNG.decode._filterZero(e,r,u,E,m);for(var T=0,S=p[A];S<a;){for(var R=d[A],_=u+T*b<<3;R<t;){var U;if(1==i)U=(U=e[_>>3])>>7-(7&_)&1,l[S*c+(R>>3)]|=U<<7-((7&R)<<0);if(2==i)U=(U=e[_>>3])>>6-(7&_)&3,l[S*c+(R>>2)]|=U<<6-((3&R)<<1);if(4==i)U=(U=e[_>>3])>>4-(7&_)&15,l[S*c+(R>>1)]|=U<<4-((1&R)<<2);if(i>=8)for(var w=S*c+R*s,O=0;O<s;O++)l[w+O]=e[(_>>3)+O];_+=i,R+=v}T++,S+=g}E*m!=0&&(u+=m*(1+b)),A+=1}return l},UPNG.decode._getBPP=function(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth},UPNG.decode._filterZero=function(e,r,t,a,i){var s=UPNG.decode._getBPP(r),c=Math.ceil(a*s/8),l=UPNG.decode._paeth;s=Math.ceil(s/8);var u=0,p=1,d=e[t],h=0;if(d>1&&(e[t]=[0,0,1][d-2]),3==d)for(h=s;h<c;h++)e[h+1]=e[h+1]+(e[h+1-s]>>>1)&255;for(var y=0;y<i;y++)if(h=0,0==(d=e[(p=(u=t+y*c)+y+1)-1]))for(;h<c;h++)e[u+h]=e[p+h];else if(1==d){for(;h<s;h++)e[u+h]=e[p+h];for(;h<c;h++)e[u+h]=e[p+h]+e[u+h-s]}else if(2==d)for(;h<c;h++)e[u+h]=e[p+h]+e[u+h-c];else if(3==d){for(;h<s;h++)e[u+h]=e[p+h]+(e[u+h-c]>>>1);for(;h<c;h++)e[u+h]=e[p+h]+(e[u+h-c]+e[u+h-s]>>>1)}else{for(;h<s;h++)e[u+h]=e[p+h]+l(0,e[u+h-c],0);for(;h<c;h++)e[u+h]=e[p+h]+l(e[u+h-s],e[u+h-c],e[u+h-s-c])}return e},UPNG.decode._paeth=function(e,r,t){var a=e+r-t,i=a-e,s=a-r,c=a-t;return i*i<=s*s&&i*i<=c*c?e:s*s<=c*c?r:t},UPNG.decode._IHDR=function(e,r,t){var a=UPNG._bin;t.width=a.readUint(e,r),r+=4,t.height=a.readUint(e,r),r+=4,t.depth=e[r],r++,t.ctype=e[r],r++,t.compress=e[r],r++,t.filter=e[r],r++,t.interlace=e[r],r++},UPNG._bin={nextZero:function nextZero(e,r){for(;0!=e[r];)r++;return r},readUshort:function readUshort(e,r){return e[r]<<8|e[r+1]},writeUshort:function writeUshort(e,r,t){e[r]=t>>8&255,e[r+1]=255&t},readUint:function readUint(e,r){return 16777216*e[r]+(e[r+1]<<16|e[r+2]<<8|e[r+3])},writeUint:function writeUint(e,r,t){e[r]=t>>24&255,e[r+1]=t>>16&255,e[r+2]=t>>8&255,e[r+3]=255&t},readASCII:function readASCII(e,r,t){for(var a=\"\",i=0;i<t;i++)a+=String.fromCharCode(e[r+i]);return a},writeASCII:function writeASCII(e,r,t){for(var a=0;a<t.length;a++)e[r+a]=t.charCodeAt(a)},readBytes:function readBytes(e,r,t){for(var a=[],i=0;i<t;i++)a.push(e[r+i]);return a},pad:function pad(e){return e.length<2?\"0\".concat(e):e},readUTF8:function readUTF8(e,r,t){for(var a,i=\"\",s=0;s<t;s++)i+=\"%\".concat(UPNG._bin.pad(e[r+s].toString(16)));try{a=decodeURIComponent(i)}catch(a){return UPNG._bin.readASCII(e,r,t)}return a}},UPNG._copyTile=function(e,r,t,a,i,s,c,l,u){for(var p=Math.min(r,i),d=Math.min(t,s),h=0,y=0,A=0;A<d;A++)for(var g=0;g<p;g++)if(c>=0&&l>=0?(h=A*r+g<<2,y=(l+A)*i+c+g<<2):(h=(-l+A)*r-c+g<<2,y=A*i+g<<2),0==u)a[y]=e[h],a[y+1]=e[h+1],a[y+2]=e[h+2],a[y+3]=e[h+3];else if(1==u){var v=e[h+3]*(1/255),E=e[h]*v,m=e[h+1]*v,I=e[h+2]*v,P=a[y+3]*(1/255),b=a[y]*P,T=a[y+1]*P,S=a[y+2]*P,R=1-v,_=v+P*R,U=0==_?0:1/_;a[y+3]=255*_,a[y+0]=(E+b*R)*U,a[y+1]=(m+T*R)*U,a[y+2]=(I+S*R)*U}else if(2==u){v=e[h+3],E=e[h],m=e[h+1],I=e[h+2],P=a[y+3],b=a[y],T=a[y+1],S=a[y+2];v==P&&E==b&&m==T&&I==S?(a[y]=0,a[y+1]=0,a[y+2]=0,a[y+3]=0):(a[y]=E,a[y+1]=m,a[y+2]=I,a[y+3]=v)}else if(3==u){v=e[h+3],E=e[h],m=e[h+1],I=e[h+2],P=a[y+3],b=a[y],T=a[y+1],S=a[y+2];if(v==P&&E==b&&m==T&&I==S)continue;if(v<220&&P>20)return!1}return!0},UPNG.encode=function(e,r,t,a,i,s,c){null==a&&(a=0),null==c&&(c=!1);var l=UPNG.encode.compress(e,r,t,a,[!1,!1,!1,0,c]);return UPNG.encode.compressPNG(l,-1),UPNG.encode._main(l,r,t,i,s)},UPNG.encodeLL=function(e,r,t,a,i,s,c,l){for(var u={ctype:0+(1==a?0:2)+(0==i?0:4),depth:s,frames:[]},p=(a+i)*s,d=p*r,h=0;h<e.length;h++)u.frames.push({rect:{x:0,y:0,width:r,height:t},img:new Uint8Array(e[h]),blend:0,dispose:1,bpp:Math.ceil(p/8),bpl:Math.ceil(d/8)});return UPNG.encode.compressPNG(u,0,!0),UPNG.encode._main(u,r,t,c,l)},UPNG.encode._main=function(e,r,t,a,i){null==i&&(i={});var s=UPNG.crc.crc,c=UPNG._bin.writeUint,l=UPNG._bin.writeUshort,u=UPNG._bin.writeASCII,p=8,d=e.frames.length>1,h=!1,y=33+(d?20:0);if(null!=i.sRGB&&(y+=13),null!=i.pHYs&&(y+=21),3==e.ctype){for(var A=e.plte.length,g=0;g<A;g++)e.plte[g]>>>24!=255&&(h=!0);y+=8+3*A+4+(h?8+1*A+4:0)}for(var v=0;v<e.frames.length;v++){d&&(y+=38),y+=(_=e.frames[v]).cimg.length+12,0!=v&&(y+=4)}y+=12;var E=new Uint8Array(y),m=[137,80,78,71,13,10,26,10];for(g=0;g<8;g++)E[g]=m[g];if(c(E,p,13),u(E,p+=4,\"IHDR\"),c(E,p+=4,r),c(E,p+=4,t),E[p+=4]=e.depth,E[++p]=e.ctype,E[++p]=0,E[++p]=0,E[++p]=0,c(E,++p,s(E,p-17,17)),p+=4,null!=i.sRGB&&(c(E,p,1),u(E,p+=4,\"sRGB\"),E[p+=4]=i.sRGB,c(E,++p,s(E,p-5,5)),p+=4),null!=i.pHYs&&(c(E,p,9),u(E,p+=4,\"pHYs\"),c(E,p+=4,i.pHYs[0]),c(E,p+=4,i.pHYs[1]),E[p+=4]=i.pHYs[2],c(E,++p,s(E,p-13,13)),p+=4),d&&(c(E,p,8),u(E,p+=4,\"acTL\"),c(E,p+=4,e.frames.length),c(E,p+=4,null!=i.loop?i.loop:0),c(E,p+=4,s(E,p-12,12)),p+=4),3==e.ctype){c(E,p,3*(A=e.plte.length)),u(E,p+=4,\"PLTE\"),p+=4;for(g=0;g<A;g++){var I=3*g,P=e.plte[g],b=255&P,T=P>>>8&255,S=P>>>16&255;E[p+I+0]=b,E[p+I+1]=T,E[p+I+2]=S}if(c(E,p+=3*A,s(E,p-3*A-4,3*A+4)),p+=4,h){c(E,p,A),u(E,p+=4,\"tRNS\"),p+=4;for(g=0;g<A;g++)E[p+g]=e.plte[g]>>>24&255;c(E,p+=A,s(E,p-A-4,A+4)),p+=4}}var R=0;for(v=0;v<e.frames.length;v++){var _=e.frames[v];d&&(c(E,p,26),u(E,p+=4,\"fcTL\"),c(E,p+=4,R++),c(E,p+=4,_.rect.width),c(E,p+=4,_.rect.height),c(E,p+=4,_.rect.x),c(E,p+=4,_.rect.y),l(E,p+=4,a[v]),l(E,p+=2,1e3),E[p+=2]=_.dispose,E[++p]=_.blend,c(E,++p,s(E,p-30,30)),p+=4);var U=_.cimg;c(E,p,(A=U.length)+(0==v?0:4));var w=p+=4;u(E,p,0==v?\"IDAT\":\"fdAT\"),p+=4,0!=v&&(c(E,p,R++),p+=4),E.set(U,p),c(E,p+=A,s(E,w,p-w)),p+=4}return c(E,p,0),u(E,p+=4,\"IEND\"),c(E,p+=4,s(E,p-4,4)),p+=4,E.buffer},UPNG.encode.compressPNG=function(e,r,t){for(var a=0;a<e.frames.length;a++){var i=e.frames[a];i.rect.width;var s=i.rect.height,c=new Uint8Array(s*i.bpl+s);i.cimg=UPNG.encode._filterZero(i.img,s,i.bpp,i.bpl,c,r,t)}},UPNG.encode.compress=function(e,r,t,a,i){for(var s=i[0],c=i[1],l=i[2],u=i[3],p=i[4],d=6,h=8,y=255,A=0;A<e.length;A++)for(var g=new Uint8Array(e[A]),v=g.length,E=0;E<v;E+=4)y&=g[E+3];var m=255!=y,I=UPNG.encode.framize(e,r,t,s,c,l),P={},b=[],T=[];if(0!=a){var S=[];for(E=0;E<I.length;E++)S.push(I[E].img.buffer);var R=UPNG.encode.concatRGBA(S),_=UPNG.quantize(R,a),U=0,w=new Uint8Array(_.abuf);for(E=0;E<I.length;E++){var O=(J=I[E].img).length;T.push(new Uint8Array(_.inds.buffer,U>>2,O>>2));for(A=0;A<O;A+=4)J[A]=w[U+A],J[A+1]=w[U+A+1],J[A+2]=w[U+A+2],J[A+3]=w[U+A+3];U+=O}for(E=0;E<_.plte.length;E++)b.push(_.plte[E].est.rgba)}else for(A=0;A<I.length;A++){var C=I[A],$=new Uint32Array(C.img.buffer),L=C.rect.width,x=(v=$.length,new Uint8Array(v));T.push(x);for(E=0;E<v;E++){var M=$[E];if(0!=E&&M==$[E-1])x[E]=x[E-1];else if(E>L&&M==$[E-L])x[E]=x[E-L];else{var B=P[M];if(null==B&&(P[M]=B=b.length,b.push(M),b.length>=300))break;x[E]=B}}}var D=b.length;D<=256&&0==p&&(h=D<=2?1:D<=4?2:D<=16?4:8,h=Math.max(h,u));for(A=0;A<I.length;A++){(C=I[A]).rect.x,C.rect.y;L=C.rect.width;var G=C.rect.height,V=C.img;new Uint32Array(V.buffer);var k=4*L,Y=4;if(D<=256&&0==p){k=Math.ceil(h*L/8);for(var q=new Uint8Array(k*G),Z=T[A],Q=0;Q<G;Q++){E=Q*k;var z=Q*L;if(8==h)for(var K=0;K<L;K++)q[E+K]=Z[z+K];else if(4==h)for(K=0;K<L;K++)q[E+(K>>1)]|=Z[z+K]<<4-4*(1&K);else if(2==h)for(K=0;K<L;K++)q[E+(K>>2)]|=Z[z+K]<<6-2*(3&K);else if(1==h)for(K=0;K<L;K++)q[E+(K>>3)]|=Z[z+K]<<7-1*(7&K)}V=q,d=3,Y=1}else if(0==m&&1==I.length){q=new Uint8Array(L*G*3);var X=L*G;for(E=0;E<X;E++){var J,ee=4*E;q[J=3*E]=V[ee],q[J+1]=V[ee+1],q[J+2]=V[ee+2]}V=q,d=2,Y=3,k=3*L}C.img=V,C.bpl=k,C.bpp=Y}return{ctype:d,depth:h,plte:b,frames:I}},UPNG.encode.framize=function(e,r,t,a,i,s){for(var c=[],l=0;l<e.length;l++){var u,p=new Uint8Array(e[l]),d=new Uint32Array(p.buffer),h=0,y=0,A=r,g=t,v=a?1:0;if(0!=l){for(var E=s||a||1==l||0!=c[l-2].dispose?1:2,m=0,I=1e9,P=0;P<E;P++){for(var b=new Uint8Array(e[l-1-P]),T=new Uint32Array(e[l-1-P]),S=r,R=t,_=-1,U=-1,w=0;w<t;w++)for(var O=0;O<r;O++){d[D=w*r+O]!=T[D]&&(O<S&&(S=O),O>_&&(_=O),w<R&&(R=w),w>U&&(U=w))}-1==_&&(S=R=_=U=0),i&&(1==(1&S)&&S--,1==(1&R)&&R--);var C=(_-S+1)*(U-R+1);C<I&&(I=C,m=P,h=S,y=R,A=_-S+1,g=U-R+1)}b=new Uint8Array(e[l-1-m]);1==m&&(c[l-1].dispose=2),u=new Uint8Array(A*g*4),UPNG._copyTile(b,r,t,u,A,g,-h,-y,0),1==(v=UPNG._copyTile(p,r,t,u,A,g,-h,-y,3)?1:0)?UPNG.encode._prepareDiff(p,r,t,u,{x:h,y:y,width:A,height:g}):UPNG._copyTile(p,r,t,u,A,g,-h,-y,0)}else u=p.slice(0);c.push({rect:{x:h,y:y,width:A,height:g},img:u,blend:v,dispose:0})}if(a)for(l=0;l<c.length;l++){if(1!=(G=c[l]).blend){var $=G.rect,L=c[l-1].rect,x=Math.min($.x,L.x),M=Math.min($.y,L.y),B={x:x,y:M,width:Math.max($.x+$.width,L.x+L.width)-x,height:Math.max($.y+$.height,L.y+L.height)-M};c[l-1].dispose=1,l-1!=0&&UPNG.encode._updateFrame(e,r,t,c,l-1,B,i),UPNG.encode._updateFrame(e,r,t,c,l,B,i)}}if(1!=e.length)for(var D=0;D<c.length;D++){var G;(G=c[D]).rect.width*G.rect.height}return c},UPNG.encode._updateFrame=function(e,r,t,a,i,s,c){for(var l=Uint8Array,u=Uint32Array,p=new l(e[i-1]),d=new u(e[i-1]),h=i+1<e.length?new l(e[i+1]):null,y=new l(e[i]),A=new u(y.buffer),g=r,v=t,E=-1,m=-1,I=0;I<s.height;I++)for(var P=0;P<s.width;P++){var b=s.x+P,T=s.y+I,S=T*r+b,R=A[S];0==R||0==a[i-1].dispose&&d[S]==R&&(null==h||0!=h[4*S+3])||(b<g&&(g=b),b>E&&(E=b),T<v&&(v=T),T>m&&(m=T))}-1==E&&(g=v=E=m=0),c&&(1==(1&g)&&g--,1==(1&v)&&v--),s={x:g,y:v,width:E-g+1,height:m-v+1};var _=a[i];_.rect=s,_.blend=1,_.img=new Uint8Array(s.width*s.height*4),0==a[i-1].dispose?(UPNG._copyTile(p,r,t,_.img,s.width,s.height,-s.x,-s.y,0),UPNG.encode._prepareDiff(y,r,t,_.img,s)):UPNG._copyTile(y,r,t,_.img,s.width,s.height,-s.x,-s.y,0)},UPNG.encode._prepareDiff=function(e,r,t,a,i){UPNG._copyTile(e,r,t,a,i.width,i.height,-i.x,-i.y,2)},UPNG.encode._filterZero=function(e,r,t,a,i,s,c){var l,u=[],p=[0,1,2,3,4];-1!=s?p=[s]:(r*a>5e5||1==t)&&(p=[0]),c&&(l={level:0});for(var d,h=UZIP,y=0;y<p.length;y++){for(var A=0;A<r;A++)UPNG.encode._filterLine(i,e,A,a,t,p[y]);u.push(h.deflate(i,l))}var g=1e9;for(y=0;y<u.length;y++)u[y].length<g&&(d=y,g=u[y].length);return u[d]},UPNG.encode._filterLine=function(e,r,t,a,i,s){var c=t*a,l=c+t,u=UPNG.decode._paeth;if(e[l]=s,l++,0==s)if(a<500)for(var p=0;p<a;p++)e[l+p]=r[c+p];else e.set(new Uint8Array(r.buffer,c,a),l);else if(1==s){for(p=0;p<i;p++)e[l+p]=r[c+p];for(p=i;p<a;p++)e[l+p]=r[c+p]-r[c+p-i]+256&255}else if(0==t){for(p=0;p<i;p++)e[l+p]=r[c+p];if(2==s)for(p=i;p<a;p++)e[l+p]=r[c+p];if(3==s)for(p=i;p<a;p++)e[l+p]=r[c+p]-(r[c+p-i]>>1)+256&255;if(4==s)for(p=i;p<a;p++)e[l+p]=r[c+p]-u(r[c+p-i],0,0)+256&255}else{if(2==s)for(p=0;p<a;p++)e[l+p]=r[c+p]+256-r[c+p-a]&255;if(3==s){for(p=0;p<i;p++)e[l+p]=r[c+p]+256-(r[c+p-a]>>1)&255;for(p=i;p<a;p++)e[l+p]=r[c+p]+256-(r[c+p-a]+r[c+p-i]>>1)&255}if(4==s){for(p=0;p<i;p++)e[l+p]=r[c+p]+256-u(0,r[c+p-a],0)&255;for(p=i;p<a;p++)e[l+p]=r[c+p]+256-u(r[c+p-i],r[c+p-a],r[c+p-i-a])&255}}},UPNG.crc={table:function(){for(var e=new Uint32Array(256),r=0;r<256;r++){for(var t=r,a=0;a<8;a++)1&t?t=3988292384^t>>>1:t>>>=1;e[r]=t}return e}(),update:function update(e,r,t,a){for(var i=0;i<a;i++)e=UPNG.crc.table[255&(e^r[t+i])]^e>>>8;return e},crc:function crc(e,r,t){return 4294967295^UPNG.crc.update(4294967295,e,r,t)}},UPNG.quantize=function(e,r){var t,a=new Uint8Array(e),i=a.slice(0),s=new Uint32Array(i.buffer),c=UPNG.quantize.getKDtree(i,r),l=c[0],u=c[1],p=UPNG.quantize.planeDst,d=a,h=s,y=d.length,A=new Uint8Array(a.length>>2);if(a.length<2e7)for(var g=0;g<y;g+=4){var v=d[g]*(1/255),E=d[g+1]*(1/255),m=d[g+2]*(1/255),I=d[g+3]*(1/255);t=UPNG.quantize.getNearest(l,v,E,m,I),A[g>>2]=t.ind,h[g>>2]=t.est.rgba}else for(g=0;g<y;g+=4){v=d[g]*(1/255),E=d[g+1]*(1/255),m=d[g+2]*(1/255),I=d[g+3]*(1/255);for(t=l;t.left;)t=p(t.est,v,E,m,I)<=0?t.left:t.right;A[g>>2]=t.ind,h[g>>2]=t.est.rgba}return{abuf:i.buffer,inds:A,plte:u}},UPNG.quantize.getKDtree=function(e,r,t){null==t&&(t=1e-4);var a=new Uint32Array(e.buffer),i={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};i.bst=UPNG.quantize.stats(e,i.i0,i.i1),i.est=UPNG.quantize.estats(i.bst);for(var s=[i];s.length<r;){for(var c=0,l=0,u=0;u<s.length;u++)s[u].est.L>c&&(c=s[u].est.L,l=u);if(c<t)break;var p=s[l],d=UPNG.quantize.splitPixels(e,a,p.i0,p.i1,p.est.e,p.est.eMq255);if(p.i0>=d||p.i1<=d)p.est.L=0;else{var h={i0:p.i0,i1:d,bst:null,est:null,tdst:0,left:null,right:null};h.bst=UPNG.quantize.stats(e,h.i0,h.i1),h.est=UPNG.quantize.estats(h.bst);var y={i0:d,i1:p.i1,bst:null,est:null,tdst:0,left:null,right:null};y.bst={R:[],m:[],N:p.bst.N-h.bst.N};for(u=0;u<16;u++)y.bst.R[u]=p.bst.R[u]-h.bst.R[u];for(u=0;u<4;u++)y.bst.m[u]=p.bst.m[u]-h.bst.m[u];y.est=UPNG.quantize.estats(y.bst),p.left=h,p.right=y,s[l]=h,s.push(y)}}s.sort((function(e,r){return r.bst.N-e.bst.N}));for(u=0;u<s.length;u++)s[u].ind=u;return[i,s]},UPNG.quantize.getNearest=function(e,r,t,a,i){if(null==e.left)return e.tdst=UPNG.quantize.dist(e.est.q,r,t,a,i),e;var s=UPNG.quantize.planeDst(e.est,r,t,a,i),c=e.left,l=e.right;s>0&&(c=e.right,l=e.left);var u=UPNG.quantize.getNearest(c,r,t,a,i);if(u.tdst<=s*s)return u;var p=UPNG.quantize.getNearest(l,r,t,a,i);return p.tdst<u.tdst?p:u},UPNG.quantize.planeDst=function(e,r,t,a,i){var s=e.e;return s[0]*r+s[1]*t+s[2]*a+s[3]*i-e.eMq},UPNG.quantize.dist=function(e,r,t,a,i){var s=r-e[0],c=t-e[1],l=a-e[2],u=i-e[3];return s*s+c*c+l*l+u*u},UPNG.quantize.splitPixels=function(e,r,t,a,i,s){var c=UPNG.quantize.vecDot;for(a-=4;t<a;){for(;c(e,t,i)<=s;)t+=4;for(;c(e,a,i)>s;)a-=4;if(t>=a)break;var l=r[t>>2];r[t>>2]=r[a>>2],r[a>>2]=l,t+=4,a-=4}for(;c(e,t,i)>s;)t-=4;return t+4},UPNG.quantize.vecDot=function(e,r,t){return e[r]*t[0]+e[r+1]*t[1]+e[r+2]*t[2]+e[r+3]*t[3]},UPNG.quantize.stats=function(e,r,t){for(var a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i=[0,0,0,0],s=t-r>>2,c=r;c<t;c+=4){var l=e[c]*(1/255),u=e[c+1]*(1/255),p=e[c+2]*(1/255),d=e[c+3]*(1/255);i[0]+=l,i[1]+=u,i[2]+=p,i[3]+=d,a[0]+=l*l,a[1]+=l*u,a[2]+=l*p,a[3]+=l*d,a[5]+=u*u,a[6]+=u*p,a[7]+=u*d,a[10]+=p*p,a[11]+=p*d,a[15]+=d*d}return a[4]=a[1],a[8]=a[2],a[9]=a[6],a[12]=a[3],a[13]=a[7],a[14]=a[11],{R:a,m:i,N:s}},UPNG.quantize.estats=function(e){var r=e.R,t=e.m,a=e.N,i=t[0],s=t[1],c=t[2],l=t[3],u=0==a?0:1/a,p=[r[0]-i*i*u,r[1]-i*s*u,r[2]-i*c*u,r[3]-i*l*u,r[4]-s*i*u,r[5]-s*s*u,r[6]-s*c*u,r[7]-s*l*u,r[8]-c*i*u,r[9]-c*s*u,r[10]-c*c*u,r[11]-c*l*u,r[12]-l*i*u,r[13]-l*s*u,r[14]-l*c*u,r[15]-l*l*u],d=p,h=UPNG.M4,y=[Math.random(),Math.random(),Math.random(),Math.random()],A=0,g=0;if(0!=a)for(var v=0;v<16&&(y=h.multVec(d,y),g=Math.sqrt(h.dot(y,y)),y=h.sml(1/g,y),!(0!=v&&Math.abs(g-A)<1e-9));v++)A=g;var E=[i*u,s*u,c*u,l*u];return{Cov:p,q:E,e:y,L:A,eMq255:h.dot(h.sml(255,E),y),eMq:h.dot(y,E),rgba:(Math.round(255*E[3])<<24|Math.round(255*E[2])<<16|Math.round(255*E[1])<<8|Math.round(255*E[0])<<0)>>>0}},UPNG.M4={multVec:function multVec(e,r){return[e[0]*r[0]+e[1]*r[1]+e[2]*r[2]+e[3]*r[3],e[4]*r[0]+e[5]*r[1]+e[6]*r[2]+e[7]*r[3],e[8]*r[0]+e[9]*r[1]+e[10]*r[2]+e[11]*r[3],e[12]*r[0]+e[13]*r[1]+e[14]*r[2]+e[15]*r[3]]},dot:function dot(e,r){return e[0]*r[0]+e[1]*r[1]+e[2]*r[2]+e[3]*r[3]},sml:function sml(e,r){return[e*r[0],e*r[1],e*r[2],e*r[3]]}},UPNG.encode.concatRGBA=function(e){for(var r=0,t=0;t<e.length;t++)r+=e[t].byteLength;var a=new Uint8Array(r),i=0;for(t=0;t<e.length;t++){for(var s=new Uint8Array(e[t]),c=s.length,l=0;l<c;l+=4){var u=s[l],p=s[l+1],d=s[l+2],h=s[l+3];0==h&&(u=p=d=0),a[i+l]=u,a[i+l+1]=p,a[i+l+2]=d,a[i+l+3]=h}i+=c}return a.buffer};var MaxCanvasSize={chrome:16384,firefox:11180,\"desktop safari\":16384,\"internet explorer\":8192,\"mobile safari\":4096,etc:8192},isBrowser=\"undefined\"!=typeof window,moduleMapper=isBrowser&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=isBrowser&&(moduleMapper&&moduleMapper.getOriginalSymbol(window,\"File\")||void 0!==window.File&&File),CustomFileReader=isBrowser&&(moduleMapper&&moduleMapper.getOriginalSymbol(window,\"FileReader\")||void 0!==window.FileReader&&FileReader);function getFilefromDataUrl(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return new Promise((function(a){for(var i=e.split(\",\"),s=i[0].match(/:(.*?);/)[1],c=globalThis.atob(i[1]),l=c.length,u=new Uint8Array(l);l--;)u[l]=c.charCodeAt(l);var p=new Blob([u],{type:s});p.name=r,p.lastModified=t,a(p)}))}function getDataUrlFromFile(e){return new Promise((function(r,t){var a=new CustomFileReader;a.onload=function(){return r(a.result)},a.onerror=function(e){return t(e)},a.readAsDataURL(e)}))}function loadImage(e){return new Promise((function(r,t){var a=new Image;a.onload=function(){return r(a)},a.onerror=function(e){return t(e)},a.src=e}))}function getBrowserName(){var e=\"etc\",r=navigator.userAgent;return/Chrom(e|ium)/i.test(r)?e=\"chrome\":/iP(ad|od|hone)/i.test(r)&&/WebKit/i.test(r)&&!/(CriOS|FxiOS|OPiOS|mercury)/i.test(r)?e=\"mobile safari\":/Safari/i.test(r)?e=\"desktop safari\":/Firefox/i.test(r)?e=\"firefox\":(/MSIE/i.test(r)||!0==!!document.documentMode)&&(e=\"internet explorer\"),e}function approximateBelowMaximumCanvasSizeOfBrowser(e,r){for(var t=getBrowserName(),a=MaxCanvasSize[t],i=e,s=r,c=i*s,l=i>s?s/i:i/s;c>a*a;){var u=(a+i)/2,p=(a+s)/2;u<p?(s=p,i=p*l):(s=u*l,i=u),c=i*s}return{width:i,height:s}}function getNewCanvasAndCtx(e,r){var t,a;try{if(null===(a=(t=new OffscreenCanvas(e,r)).getContext(\"2d\")))throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(e){a=(t=document.createElement(\"canvas\")).getContext(\"2d\")}return t.width=e,t.height=r,[t,a]}function drawImageInCanvas(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,t=approximateBelowMaximumCanvasSizeOfBrowser(e.width,e.height),a=t.width,i=t.height,s=getNewCanvasAndCtx(a,i),c=_slicedToArray(s,2),l=c[0],u=c[1];return r&&/jpe?g/.test(r)&&(u.fillStyle=\"white\",u.fillRect(0,0,l.width,l.height)),u.drawImage(e,0,0,l.width,l.height),l}function isIOS(){return void 0!==isIOS.cachedResult||(isIOS.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"ontouchend\"in document),isIOS.cachedResult}function drawFileInCanvas(e){return new Promise((function(r,t){var a,i,s=function $Try_2_Post(){try{return i=drawImageInCanvas(a,e.type),r([a,i])}catch(e){return t(e)}},c=function $Try_2_Catch(r){try{0;var i=function $Try_3_Catch(e){try{throw e}catch(e){return t(e)}};try{return getDataUrlFromFile(e).then((function(e){try{return loadImage(e).then((function(e){try{return a=e,function $Try_3_Post(){try{return s()}catch(e){return t(e)}}()}catch(e){return i(e)}}),i)}catch(e){return i(e)}}),i)}catch(e){i(e)}}catch(e){return t(e)}};try{if(isIOS())throw new Error(\"Skip createImageBitmap on IOS device\");return createImageBitmap(e).then((function(e){try{return a=e,s()}catch(e){return c()}}),c)}catch(e){c()}}))}function canvasToFile(e,r,t,a){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1;return new Promise((function(s,c){var l,u,p;if(\"image/png\"===r)return u=e.getContext(\"2d\").getImageData(0,0,e.width,e.height).data,p=UPNG.encode([u],e.width,e.height,256*i),(l=new Blob([p],{type:r})).name=t,l.lastModified=a,$If_4.call(this);{return\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e.convertToBlob({type:r,quality:i}).then(function(e){try{return(l=e).name=t,l.lastModified=a,$If_5.call(this)}catch(e){return c(e)}}.bind(this),c):getFilefromDataUrl(e.toDataURL(r,i),t,a).then(function(e){try{return l=e,$If_5.call(this)}catch(e){return c(e)}}.bind(this),c);function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}}))}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise((function(e,r){var t,a,i,s;return void 0!==isAutoOrientationInBrowser.result?e(isAutoOrientationInBrowser.result):(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then((function(c){try{return drawFileInCanvas(t=c).then((function(c){try{return canvasToFile(a=c[1],t.type,t.name,t.lastModified).then((function(t){try{return i=t,cleanupCanvasMemory(a),drawFileInCanvas(i).then((function(t){try{return s=t[0],isAutoOrientationInBrowser.result=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.result)}catch(e){return r(e)}}),r)}catch(e){return r(e)}}),r)}catch(e){return r(e)}}),r)}catch(e){return r(e)}}),r))}))}function getExifOrientation(e){return new Promise((function(r,t){var a=new CustomFileReader;a.onload=function(e){var t=new DataView(e.target.result);if(65496!=t.getUint16(0,!1))return r(-2);for(var a=t.byteLength,i=2;i<a;){if(t.getUint16(i+2,!1)<=8)return r(-1);var s=t.getUint16(i,!1);if(i+=2,65505==s){if(1165519206!=t.getUint32(i+=2,!1))return r(-1);var c=18761==t.getUint16(i+=6,!1);i+=t.getUint32(i+4,c);var l=t.getUint16(i,c);i+=2;for(var u=0;u<l;u++)if(274==t.getUint16(i+12*u,c))return r(t.getUint16(i+12*u+8,c))}else{if(65280!=(65280&s))break;i+=t.getUint16(i,!1)}}return r(-1)},a.onerror=function(e){return t(e)},a.readAsArrayBuffer(e)}))}function handleMaxWidthOrHeight(e,r){var t,a=e.width,i=e.height,s=r.maxWidthOrHeight,c=e;if(isFinite(s)&&(a>s||i>s)){var l=_slicedToArray(getNewCanvasAndCtx(a,i),2);c=l[0],t=l[1],a>i?(c.width=s,c.height=i/a*s):(c.width=a/i*s,c.height=s),t.drawImage(e,0,0,c.width,c.height),cleanupCanvasMemory(e)}return c}function followExifOrientation(e,r){var t=e.width,a=e.height,i=_slicedToArray(getNewCanvasAndCtx(t,a),2),s=i[0],c=i[1];switch(r>4&&r<9?(s.width=a,s.height=t):(s.width=t,s.height=a),r){case 2:c.transform(-1,0,0,1,t,0);break;case 3:c.transform(-1,0,0,-1,t,a);break;case 4:c.transform(1,0,0,-1,0,a);break;case 5:c.transform(0,1,1,0,0,0);break;case 6:c.transform(0,1,-1,0,a,0);break;case 7:c.transform(0,-1,-1,0,a,t);break;case 8:c.transform(0,-1,1,0,0,t)}return c.drawImage(e,0,0,t,a),cleanupCanvasMemory(e),s}function compress(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return new Promise((function(a,i){var s,c,l,u,p,d,h,y,A,g,v,E,m,I,P,b,T,S;function incProgress(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5;s+=e,r.onProgress(Math.min(s,100))}function setProgress(e){s=Math.min(Math.max(e,s),100),r.onProgress(s)}return s=t,c=r.maxIteration||10,l=1024*r.maxSizeMB*1024,incProgress(),drawFileInCanvas(e).then(function(t){try{var s=_slicedToArray(t,2);return u=s[1],incProgress(),p=handleMaxWidthOrHeight(u,r),incProgress(),new Promise((function(t,a){var i;if(!(i=r.exifOrientation))return getExifOrientation(e).then(function(e){try{return i=e,$If_2.call(this)}catch(e){return a(e)}}.bind(this),a);function $If_2(){return t(i)}return $If_2.call(this)})).then(function(t){try{return d=t,incProgress(),isAutoOrientationInBrowser().then(function(t){try{return h=t?p:followExifOrientation(p,d),incProgress(),y=r.initialQuality||1,A=r.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,y).then(function(r){try{{if(g=r,incProgress(),v=g.size>l,E=g.size>e.size,!v&&!E)return setProgress(100),a(g);var t;function $Loop_3(){if(c--&&(P>l||P>m)){var r,t,a=_slicedToArray(getNewCanvasAndCtx(r=v?.95*S.width:S.width,t=v?.95*S.height:S.height),2);return T=a[0],a[1].drawImage(S,0,0,r,t),y*=.95,canvasToFile(T,A,e.name,e.lastModified,y).then((function(e){try{return b=e,cleanupCanvasMemory(S),S=T,P=b.size,setProgress(Math.min(99,Math.floor((I-P)/(I-l)*100))),$Loop_3}catch(e){return i(e)}}),i)}return[1]}return m=e.size,I=g.size,P=I,S=h,(t=function(e){for(;e;){if(e.then)return void e.then(t,i);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return i(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(S),cleanupCanvasMemory(T),cleanupCanvasMemory(p),cleanupCanvasMemory(h),cleanupCanvasMemory(u),setProgress(100),a(b)}}}catch(e){return i(e)}}.bind(this),i)}catch(e){return i(e)}}.bind(this),i)}catch(e){return i(e)}}.bind(this),i)}catch(e){return i(e)}}.bind(this),i)}))}var charAt=stringMultibyte.charAt,STRING_ITERATOR=\"String Iterator\",setInternalState$2=internalState.set,getInternalState=internalState.getterFor(STRING_ITERATOR);defineIterator(String,\"String\",(function(e){setInternalState$2(this,{type:STRING_ITERATOR,string:toString(e),index:0})}),(function next(){var e,r=getInternalState(this),t=r.string,a=r.index;return a>=t.length?{value:void 0,done:!0}:(e=charAt(t,a),r.index+=e.length,{value:e,done:!1})}));var domIterables={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},classList=documentCreateElement(\"span\").classList,DOMTokenListPrototype=classList&&classList.constructor&&classList.constructor.prototype,domTokenListPrototype=DOMTokenListPrototype===Object.prototype?void 0:DOMTokenListPrototype,ITERATOR$2=wellKnownSymbol(\"iterator\"),TO_STRING_TAG=wellKnownSymbol(\"toStringTag\"),ArrayValues=es_array_iterator.values,handlePrototype$1=function(e,r){if(e){if(e[ITERATOR$2]!==ArrayValues)try{createNonEnumerableProperty(e,ITERATOR$2,ArrayValues)}catch(r){e[ITERATOR$2]=ArrayValues}if(e[TO_STRING_TAG]||createNonEnumerableProperty(e,TO_STRING_TAG,r),domIterables[r])for(var t in es_array_iterator)if(e[t]!==es_array_iterator[t])try{createNonEnumerableProperty(e,t,es_array_iterator[t])}catch(r){e[t]=es_array_iterator[t]}}};for(var COLLECTION_NAME$1 in domIterables)handlePrototype$1(global$1[COLLECTION_NAME$1]&&global$1[COLLECTION_NAME$1].prototype,COLLECTION_NAME$1);handlePrototype$1(domTokenListPrototype,\"DOMTokenList\");var ITERATOR$1=wellKnownSymbol(\"iterator\"),nativeUrl=!fails((function(){var e=new URL(\"b?a=1&b=2&c=3\",\"http://a\"),r=e.searchParams,t=\"\";return e.pathname=\"c%20d\",r.forEach((function(e,a){r.delete(\"b\"),t+=a+e})),isPure&&!e.toJSON||!r.sort||\"http://a/c%20d?a=1&c=3\"!==e.href||\"3\"!==r.get(\"c\")||\"a=1\"!==String(new URLSearchParams(\"?a=1\"))||!r[ITERATOR$1]||\"a\"!==new URL(\"https://a@b\").username||\"b\"!==new URLSearchParams(new URLSearchParams(\"a=b\")).get(\"a\")||\"xn--e1aybc\"!==new URL(\"http://тест\").host||\"#%D0%B1\"!==new URL(\"http://a#б\").hash||\"a1c3\"!==t||\"x\"!==new URL(\"http://x\",void 0).host})),callWithSafeIterationClosing=function(e,r,t,a){try{return a?r(anObject(t)[0],t[1]):r(t)}catch(r){iteratorClose(e,\"throw\",r)}},arrayFrom=function from(e){var r=toObject(e),t=isConstructor(this),a=arguments.length,i=a>1?arguments[1]:void 0,s=void 0!==i;s&&(i=functionBindContext(i,a>2?arguments[2]:void 0,2));var c,l,u,p,d,h,y=getIteratorMethod(r),A=0;if(!y||this==Array&&isArrayIteratorMethod(y))for(c=toLength(r.length),l=t?new this(c):Array(c);c>A;A++)h=s?i(r[A],A):r[A],createProperty(l,A,h);else for(d=(p=getIterator(r,y)).next,l=t?new this:[];!(u=d.call(p)).done;A++)h=s?callWithSafeIterationClosing(p,i,[u.value,A],!0):u.value,createProperty(l,A,h);return l.length=A,l},maxInt=2147483647,base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,delimiter=\"-\",regexNonASCII=/[^\\0-\\u007E]/,regexSeparators=/[.\\u3002\\uFF0E\\uFF61]/g,OVERFLOW_ERROR=\"Overflow: input needs wider integers to process\",baseMinusTMin=base-tMin,floor$2=Math.floor,stringFromCharCode=String.fromCharCode,ucs2decode=function(e){for(var r=[],t=0,a=e.length;t<a;){var i=e.charCodeAt(t++);if(i>=55296&&i<=56319&&t<a){var s=e.charCodeAt(t++);56320==(64512&s)?r.push(((1023&i)<<10)+(1023&s)+65536):(r.push(i),t--)}else r.push(i)}return r},digitToBasic=function(e){return e+22+75*(e<26)},adapt=function(e,r,t){var a=0;for(e=t?floor$2(e/damp):e>>1,e+=floor$2(e/r);e>baseMinusTMin*tMax>>1;a+=base)e=floor$2(e/baseMinusTMin);return floor$2(a+(baseMinusTMin+1)*e/(e+skew))},encode=function(e){var r,t,a=[],i=(e=ucs2decode(e)).length,s=initialN,c=0,l=initialBias;for(r=0;r<e.length;r++)(t=e[r])<128&&a.push(stringFromCharCode(t));var u=a.length,p=u;for(u&&a.push(delimiter);p<i;){var d=maxInt;for(r=0;r<e.length;r++)(t=e[r])>=s&&t<d&&(d=t);var h=p+1;if(d-s>floor$2((maxInt-c)/h))throw RangeError(OVERFLOW_ERROR);for(c+=(d-s)*h,s=d,r=0;r<e.length;r++){if((t=e[r])<s&&++c>maxInt)throw RangeError(OVERFLOW_ERROR);if(t==s){for(var y=c,A=base;;A+=base){var g=A<=l?tMin:A>=l+tMax?tMax:A-l;if(y<g)break;var v=y-g,E=base-g;a.push(stringFromCharCode(digitToBasic(g+v%E))),y=floor$2(v/E)}a.push(stringFromCharCode(digitToBasic(y))),l=adapt(c,h,p==u),c=0,++p}}++c,++s}return a.join(\"\")},stringPunycodeToAscii=function(e){var r,t,a=[],i=e.toLowerCase().replace(regexSeparators,\".\").split(\".\");for(r=0;r<i.length;r++)t=i[r],a.push(regexNonASCII.test(t)?\"xn--\"+encode(t):t);return a.join(\".\")},nativeFetch=getBuiltIn(\"fetch\"),NativeRequest=getBuiltIn(\"Request\"),RequestPrototype=NativeRequest&&NativeRequest.prototype,Headers=getBuiltIn(\"Headers\"),ITERATOR=wellKnownSymbol(\"iterator\"),URL_SEARCH_PARAMS=\"URLSearchParams\",URL_SEARCH_PARAMS_ITERATOR=URL_SEARCH_PARAMS+\"Iterator\",setInternalState$1=internalState.set,getInternalParamsState=internalState.getterFor(URL_SEARCH_PARAMS),getInternalIteratorState=internalState.getterFor(URL_SEARCH_PARAMS_ITERATOR),plus=/\\+/g,sequences=Array(4),percentSequence=function(e){return sequences[e-1]||(sequences[e-1]=RegExp(\"((?:%[\\\\da-f]{2}){\"+e+\"})\",\"gi\"))},percentDecode=function(e){try{return decodeURIComponent(e)}catch(r){return e}},deserialize=function(e){var r=e.replace(plus,\" \"),t=4;try{return decodeURIComponent(r)}catch(e){for(;t;)r=r.replace(percentSequence(t--),percentDecode);return r}},find=/[!'()~]|%20/g,replace$1={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\"},replacer=function(e){return replace$1[e]},serialize=function(e){return encodeURIComponent(e).replace(find,replacer)},parseSearchParams=function(e,r){if(r)for(var t,a,i=r.split(\"&\"),s=0;s<i.length;)(t=i[s++]).length&&(a=t.split(\"=\"),e.push({key:deserialize(a.shift()),value:deserialize(a.join(\"=\"))}))},updateSearchParams=function(e){this.entries.length=0,parseSearchParams(this.entries,e)},validateArgumentsLength=function(e,r){if(e<r)throw TypeError(\"Not enough arguments\")},URLSearchParamsIterator=createIteratorConstructor((function Iterator(e,r){setInternalState$1(this,{type:URL_SEARCH_PARAMS_ITERATOR,iterator:getIterator(getInternalParamsState(e).entries),kind:r})}),\"Iterator\",(function next(){var e=getInternalIteratorState(this),r=e.kind,t=e.iterator.next(),a=t.value;return t.done||(t.value=\"keys\"===r?a.key:\"values\"===r?a.value:[a.key,a.value]),t})),URLSearchParamsConstructor=function URLSearchParams(){anInstance(this,URLSearchParamsConstructor,URL_SEARCH_PARAMS);var e,r,t,a,i,s,c,l,u,p=arguments.length>0?arguments[0]:void 0,d=this,h=[];if(setInternalState$1(d,{type:URL_SEARCH_PARAMS,entries:h,updateURL:function(){},updateSearchParams:updateSearchParams}),void 0!==p)if(isObject(p))if(e=getIteratorMethod(p))for(t=(r=getIterator(p,e)).next;!(a=t.call(r)).done;){if((c=(s=(i=getIterator(anObject(a.value))).next).call(i)).done||(l=s.call(i)).done||!s.call(i).done)throw TypeError(\"Expected sequence with length 2\");h.push({key:toString(c.value),value:toString(l.value)})}else for(u in p)has$1(p,u)&&h.push({key:u,value:toString(p[u])});else parseSearchParams(h,\"string\"==typeof p?\"?\"===p.charAt(0)?p.slice(1):p:toString(p))},URLSearchParamsPrototype=URLSearchParamsConstructor.prototype;if(redefineAll(URLSearchParamsPrototype,{append:function append(e,r){validateArgumentsLength(arguments.length,2);var t=getInternalParamsState(this);t.entries.push({key:toString(e),value:toString(r)}),t.updateURL()},delete:function(e){validateArgumentsLength(arguments.length,1);for(var r=getInternalParamsState(this),t=r.entries,a=toString(e),i=0;i<t.length;)t[i].key===a?t.splice(i,1):i++;r.updateURL()},get:function get(e){validateArgumentsLength(arguments.length,1);for(var r=getInternalParamsState(this).entries,t=toString(e),a=0;a<r.length;a++)if(r[a].key===t)return r[a].value;return null},getAll:function getAll(e){validateArgumentsLength(arguments.length,1);for(var r=getInternalParamsState(this).entries,t=toString(e),a=[],i=0;i<r.length;i++)r[i].key===t&&a.push(r[i].value);return a},has:function has(e){validateArgumentsLength(arguments.length,1);for(var r=getInternalParamsState(this).entries,t=toString(e),a=0;a<r.length;)if(r[a++].key===t)return!0;return!1},set:function set(e,r){validateArgumentsLength(arguments.length,1);for(var t,a=getInternalParamsState(this),i=a.entries,s=!1,c=toString(e),l=toString(r),u=0;u<i.length;u++)(t=i[u]).key===c&&(s?i.splice(u--,1):(s=!0,t.value=l));s||i.push({key:c,value:l}),a.updateURL()},sort:function sort(){var e,r,t,a=getInternalParamsState(this),i=a.entries,s=i.slice();for(i.length=0,t=0;t<s.length;t++){for(e=s[t],r=0;r<t;r++)if(i[r].key>e.key){i.splice(r,0,e);break}r===t&&i.push(e)}a.updateURL()},forEach:function forEach(e){for(var r,t=getInternalParamsState(this).entries,a=functionBindContext(e,arguments.length>1?arguments[1]:void 0,3),i=0;i<t.length;)a((r=t[i++]).value,r.key,this)},keys:function keys(){return new URLSearchParamsIterator(this,\"keys\")},values:function values(){return new URLSearchParamsIterator(this,\"values\")},entries:function entries(){return new URLSearchParamsIterator(this,\"entries\")}},{enumerable:!0}),redefine(URLSearchParamsPrototype,ITERATOR,URLSearchParamsPrototype.entries,{name:\"entries\"}),redefine(URLSearchParamsPrototype,\"toString\",(function toString(){for(var e,r=getInternalParamsState(this).entries,t=[],a=0;a<r.length;)e=r[a++],t.push(serialize(e.key)+\"=\"+serialize(e.value));return t.join(\"&\")}),{enumerable:!0}),setToStringTag(URLSearchParamsConstructor,URL_SEARCH_PARAMS),_export({global:!0,forced:!nativeUrl},{URLSearchParams:URLSearchParamsConstructor}),!nativeUrl&&isCallable(Headers)){var wrapRequestOptions=function(e){if(isObject(e)){var r,t=e.body;if(classof(t)===URL_SEARCH_PARAMS)return(r=e.headers?new Headers(e.headers):new Headers).has(\"content-type\")||r.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"),objectCreate(e,{body:createPropertyDescriptor(0,String(t)),headers:createPropertyDescriptor(0,r)})}return e};if(isCallable(nativeFetch)&&_export({global:!0,enumerable:!0,forced:!0},{fetch:function fetch(e){return nativeFetch(e,arguments.length>1?wrapRequestOptions(arguments[1]):{})}}),isCallable(NativeRequest)){var RequestConstructor=function Request(e){return anInstance(this,RequestConstructor,\"Request\"),new NativeRequest(e,arguments.length>1?wrapRequestOptions(arguments[1]):{})};RequestPrototype.constructor=RequestConstructor,RequestConstructor.prototype=RequestPrototype,_export({global:!0,forced:!0},{Request:RequestConstructor})}}var web_urlSearchParams={URLSearchParams:URLSearchParamsConstructor,getState:getInternalParamsState},codeAt=stringMultibyte.codeAt,NativeURL=global$1.URL,URLSearchParams$1=web_urlSearchParams.URLSearchParams,getInternalSearchParamsState=web_urlSearchParams.getState,setInternalState=internalState.set,getInternalURLState=internalState.getterFor(\"URL\"),floor$1=Math.floor,pow=Math.pow,INVALID_AUTHORITY=\"Invalid authority\",INVALID_SCHEME=\"Invalid scheme\",INVALID_HOST=\"Invalid host\",INVALID_PORT=\"Invalid port\",ALPHA=/[A-Za-z]/,ALPHANUMERIC=/[\\d+-.A-Za-z]/,DIGIT=/\\d/,HEX_START=/^0x/i,OCT=/^[0-7]+$/,DEC=/^\\d+$/,HEX=/^[\\dA-Fa-f]+$/,FORBIDDEN_HOST_CODE_POINT=/[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/,FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT=/[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/,LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE=/^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g,TAB_AND_NEW_LINE=/[\\t\\n\\r]/g,EOF,parseHost=function(e,r){var t,a,i;if(\"[\"==r.charAt(0)){if(\"]\"!=r.charAt(r.length-1))return INVALID_HOST;if(!(t=parseIPv6(r.slice(1,-1))))return INVALID_HOST;e.host=t}else if(isSpecial(e)){if(r=stringPunycodeToAscii(r),FORBIDDEN_HOST_CODE_POINT.test(r))return INVALID_HOST;if(null===(t=parseIPv4(r)))return INVALID_HOST;e.host=t}else{if(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(r))return INVALID_HOST;for(t=\"\",a=arrayFrom(r),i=0;i<a.length;i++)t+=percentEncode(a[i],C0ControlPercentEncodeSet);e.host=t}},parseIPv4=function(e){var r,t,a,i,s,c,l,u=e.split(\".\");if(u.length&&\"\"==u[u.length-1]&&u.pop(),(r=u.length)>4)return e;for(t=[],a=0;a<r;a++){if(\"\"==(i=u[a]))return e;if(s=10,i.length>1&&\"0\"==i.charAt(0)&&(s=HEX_START.test(i)?16:8,i=i.slice(8==s?1:2)),\"\"===i)c=0;else{if(!(10==s?DEC:8==s?OCT:HEX).test(i))return e;c=parseInt(i,s)}t.push(c)}for(a=0;a<r;a++)if(c=t[a],a==r-1){if(c>=pow(256,5-r))return null}else if(c>255)return null;for(l=t.pop(),a=0;a<t.length;a++)l+=t[a]*pow(256,3-a);return l},parseIPv6=function(e){var r,t,a,i,s,c,l,u=[0,0,0,0,0,0,0,0],p=0,d=null,h=0,chr=function(){return e.charAt(h)};if(\":\"==chr()){if(\":\"!=e.charAt(1))return;h+=2,d=++p}for(;chr();){if(8==p)return;if(\":\"!=chr()){for(r=t=0;t<4&&HEX.test(chr());)r=16*r+parseInt(chr(),16),h++,t++;if(\".\"==chr()){if(0==t)return;if(h-=t,p>6)return;for(a=0;chr();){if(i=null,a>0){if(!(\".\"==chr()&&a<4))return;h++}if(!DIGIT.test(chr()))return;for(;DIGIT.test(chr());){if(s=parseInt(chr(),10),null===i)i=s;else{if(0==i)return;i=10*i+s}if(i>255)return;h++}u[p]=256*u[p]+i,2!=++a&&4!=a||p++}if(4!=a)return;break}if(\":\"==chr()){if(h++,!chr())return}else if(chr())return;u[p++]=r}else{if(null!==d)return;h++,d=++p}}if(null!==d)for(c=p-d,p=7;0!=p&&c>0;)l=u[p],u[p--]=u[d+c-1],u[d+--c]=l;else if(8!=p)return;return u},findLongestZeroSequence=function(e){for(var r=null,t=1,a=null,i=0,s=0;s<8;s++)0!==e[s]?(i>t&&(r=a,t=i),a=null,i=0):(null===a&&(a=s),++i);return i>t&&(r=a,t=i),r},serializeHost=function(e){var r,t,a,i;if(\"number\"==typeof e){for(r=[],t=0;t<4;t++)r.unshift(e%256),e=floor$1(e/256);return r.join(\".\")}if(\"object\"==typeof e){for(r=\"\",a=findLongestZeroSequence(e),t=0;t<8;t++)i&&0===e[t]||(i&&(i=!1),a===t?(r+=t?\":\":\"::\",i=!0):(r+=e[t].toString(16),t<7&&(r+=\":\")));return\"[\"+r+\"]\"}return e},C0ControlPercentEncodeSet={},fragmentPercentEncodeSet=objectAssign({},C0ControlPercentEncodeSet,{\" \":1,'\"':1,\"<\":1,\">\":1,\"`\":1}),pathPercentEncodeSet=objectAssign({},fragmentPercentEncodeSet,{\"#\":1,\"?\":1,\"{\":1,\"}\":1}),userinfoPercentEncodeSet=objectAssign({},pathPercentEncodeSet,{\"/\":1,\":\":1,\";\":1,\"=\":1,\"@\":1,\"[\":1,\"\\\\\":1,\"]\":1,\"^\":1,\"|\":1}),percentEncode=function(e,r){var t=codeAt(e,0);return t>32&&t<127&&!has$1(r,e)?e:encodeURIComponent(e)},specialSchemes={ftp:21,file:null,http:80,https:443,ws:80,wss:443},isSpecial=function(e){return has$1(specialSchemes,e.scheme)},includesCredentials=function(e){return\"\"!=e.username||\"\"!=e.password},cannotHaveUsernamePasswordPort=function(e){return!e.host||e.cannotBeABaseURL||\"file\"==e.scheme},isWindowsDriveLetter=function(e,r){var t;return 2==e.length&&ALPHA.test(e.charAt(0))&&(\":\"==(t=e.charAt(1))||!r&&\"|\"==t)},startsWithWindowsDriveLetter=function(e){var r;return e.length>1&&isWindowsDriveLetter(e.slice(0,2))&&(2==e.length||\"/\"===(r=e.charAt(2))||\"\\\\\"===r||\"?\"===r||\"#\"===r)},shortenURLsPath=function(e){var r=e.path,t=r.length;!t||\"file\"==e.scheme&&1==t&&isWindowsDriveLetter(r[0],!0)||r.pop()},isSingleDot=function(e){return\".\"===e||\"%2e\"===e.toLowerCase()},isDoubleDot=function(e){return\"..\"===(e=e.toLowerCase())||\"%2e.\"===e||\".%2e\"===e||\"%2e%2e\"===e},SCHEME_START={},SCHEME={},NO_SCHEME={},SPECIAL_RELATIVE_OR_AUTHORITY={},PATH_OR_AUTHORITY={},RELATIVE={},RELATIVE_SLASH={},SPECIAL_AUTHORITY_SLASHES={},SPECIAL_AUTHORITY_IGNORE_SLASHES={},AUTHORITY={},HOST={},HOSTNAME={},PORT={},FILE={},FILE_SLASH={},FILE_HOST={},PATH_START={},PATH={},CANNOT_BE_A_BASE_URL_PATH={},QUERY={},FRAGMENT={},parseURL=function(e,r,t,a){var i,s,c,l,u=t||SCHEME_START,p=0,d=\"\",h=!1,y=!1,A=!1;for(t||(e.scheme=\"\",e.username=\"\",e.password=\"\",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,r=r.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE,\"\")),r=r.replace(TAB_AND_NEW_LINE,\"\"),i=arrayFrom(r);p<=i.length;){switch(s=i[p],u){case SCHEME_START:if(!s||!ALPHA.test(s)){if(t)return INVALID_SCHEME;u=NO_SCHEME;continue}d+=s.toLowerCase(),u=SCHEME;break;case SCHEME:if(s&&(ALPHANUMERIC.test(s)||\"+\"==s||\"-\"==s||\".\"==s))d+=s.toLowerCase();else{if(\":\"!=s){if(t)return INVALID_SCHEME;d=\"\",u=NO_SCHEME,p=0;continue}if(t&&(isSpecial(e)!=has$1(specialSchemes,d)||\"file\"==d&&(includesCredentials(e)||null!==e.port)||\"file\"==e.scheme&&!e.host))return;if(e.scheme=d,t)return void(isSpecial(e)&&specialSchemes[e.scheme]==e.port&&(e.port=null));d=\"\",\"file\"==e.scheme?u=FILE:isSpecial(e)&&a&&a.scheme==e.scheme?u=SPECIAL_RELATIVE_OR_AUTHORITY:isSpecial(e)?u=SPECIAL_AUTHORITY_SLASHES:\"/\"==i[p+1]?(u=PATH_OR_AUTHORITY,p++):(e.cannotBeABaseURL=!0,e.path.push(\"\"),u=CANNOT_BE_A_BASE_URL_PATH)}break;case NO_SCHEME:if(!a||a.cannotBeABaseURL&&\"#\"!=s)return INVALID_SCHEME;if(a.cannotBeABaseURL&&\"#\"==s){e.scheme=a.scheme,e.path=a.path.slice(),e.query=a.query,e.fragment=\"\",e.cannotBeABaseURL=!0,u=FRAGMENT;break}u=\"file\"==a.scheme?FILE:RELATIVE;continue;case SPECIAL_RELATIVE_OR_AUTHORITY:if(\"/\"!=s||\"/\"!=i[p+1]){u=RELATIVE;continue}u=SPECIAL_AUTHORITY_IGNORE_SLASHES,p++;break;case PATH_OR_AUTHORITY:if(\"/\"==s){u=AUTHORITY;break}u=PATH;continue;case RELATIVE:if(e.scheme=a.scheme,s==EOF)e.username=a.username,e.password=a.password,e.host=a.host,e.port=a.port,e.path=a.path.slice(),e.query=a.query;else if(\"/\"==s||\"\\\\\"==s&&isSpecial(e))u=RELATIVE_SLASH;else if(\"?\"==s)e.username=a.username,e.password=a.password,e.host=a.host,e.port=a.port,e.path=a.path.slice(),e.query=\"\",u=QUERY;else{if(\"#\"!=s){e.username=a.username,e.password=a.password,e.host=a.host,e.port=a.port,e.path=a.path.slice(),e.path.pop(),u=PATH;continue}e.username=a.username,e.password=a.password,e.host=a.host,e.port=a.port,e.path=a.path.slice(),e.query=a.query,e.fragment=\"\",u=FRAGMENT}break;case RELATIVE_SLASH:if(!isSpecial(e)||\"/\"!=s&&\"\\\\\"!=s){if(\"/\"!=s){e.username=a.username,e.password=a.password,e.host=a.host,e.port=a.port,u=PATH;continue}u=AUTHORITY}else u=SPECIAL_AUTHORITY_IGNORE_SLASHES;break;case SPECIAL_AUTHORITY_SLASHES:if(u=SPECIAL_AUTHORITY_IGNORE_SLASHES,\"/\"!=s||\"/\"!=d.charAt(p+1))continue;p++;break;case SPECIAL_AUTHORITY_IGNORE_SLASHES:if(\"/\"!=s&&\"\\\\\"!=s){u=AUTHORITY;continue}break;case AUTHORITY:if(\"@\"==s){h&&(d=\"%40\"+d),h=!0,c=arrayFrom(d);for(var g=0;g<c.length;g++){var v=c[g];if(\":\"!=v||A){var E=percentEncode(v,userinfoPercentEncodeSet);A?e.password+=E:e.username+=E}else A=!0}d=\"\"}else if(s==EOF||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&isSpecial(e)){if(h&&\"\"==d)return INVALID_AUTHORITY;p-=arrayFrom(d).length+1,d=\"\",u=HOST}else d+=s;break;case HOST:case HOSTNAME:if(t&&\"file\"==e.scheme){u=FILE_HOST;continue}if(\":\"!=s||y){if(s==EOF||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&isSpecial(e)){if(isSpecial(e)&&\"\"==d)return INVALID_HOST;if(t&&\"\"==d&&(includesCredentials(e)||null!==e.port))return;if(l=parseHost(e,d))return l;if(d=\"\",u=PATH_START,t)return;continue}\"[\"==s?y=!0:\"]\"==s&&(y=!1),d+=s}else{if(\"\"==d)return INVALID_HOST;if(l=parseHost(e,d))return l;if(d=\"\",u=PORT,t==HOSTNAME)return}break;case PORT:if(!DIGIT.test(s)){if(s==EOF||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&isSpecial(e)||t){if(\"\"!=d){var m=parseInt(d,10);if(m>65535)return INVALID_PORT;e.port=isSpecial(e)&&m===specialSchemes[e.scheme]?null:m,d=\"\"}if(t)return;u=PATH_START;continue}return INVALID_PORT}d+=s;break;case FILE:if(e.scheme=\"file\",\"/\"==s||\"\\\\\"==s)u=FILE_SLASH;else{if(!a||\"file\"!=a.scheme){u=PATH;continue}if(s==EOF)e.host=a.host,e.path=a.path.slice(),e.query=a.query;else if(\"?\"==s)e.host=a.host,e.path=a.path.slice(),e.query=\"\",u=QUERY;else{if(\"#\"!=s){startsWithWindowsDriveLetter(i.slice(p).join(\"\"))||(e.host=a.host,e.path=a.path.slice(),shortenURLsPath(e)),u=PATH;continue}e.host=a.host,e.path=a.path.slice(),e.query=a.query,e.fragment=\"\",u=FRAGMENT}}break;case FILE_SLASH:if(\"/\"==s||\"\\\\\"==s){u=FILE_HOST;break}a&&\"file\"==a.scheme&&!startsWithWindowsDriveLetter(i.slice(p).join(\"\"))&&(isWindowsDriveLetter(a.path[0],!0)?e.path.push(a.path[0]):e.host=a.host),u=PATH;continue;case FILE_HOST:if(s==EOF||\"/\"==s||\"\\\\\"==s||\"?\"==s||\"#\"==s){if(!t&&isWindowsDriveLetter(d))u=PATH;else if(\"\"==d){if(e.host=\"\",t)return;u=PATH_START}else{if(l=parseHost(e,d))return l;if(\"localhost\"==e.host&&(e.host=\"\"),t)return;d=\"\",u=PATH_START}continue}d+=s;break;case PATH_START:if(isSpecial(e)){if(u=PATH,\"/\"!=s&&\"\\\\\"!=s)continue}else if(t||\"?\"!=s)if(t||\"#\"!=s){if(s!=EOF&&(u=PATH,\"/\"!=s))continue}else e.fragment=\"\",u=FRAGMENT;else e.query=\"\",u=QUERY;break;case PATH:if(s==EOF||\"/\"==s||\"\\\\\"==s&&isSpecial(e)||!t&&(\"?\"==s||\"#\"==s)){if(isDoubleDot(d)?(shortenURLsPath(e),\"/\"==s||\"\\\\\"==s&&isSpecial(e)||e.path.push(\"\")):isSingleDot(d)?\"/\"==s||\"\\\\\"==s&&isSpecial(e)||e.path.push(\"\"):(\"file\"==e.scheme&&!e.path.length&&isWindowsDriveLetter(d)&&(e.host&&(e.host=\"\"),d=d.charAt(0)+\":\"),e.path.push(d)),d=\"\",\"file\"==e.scheme&&(s==EOF||\"?\"==s||\"#\"==s))for(;e.path.length>1&&\"\"===e.path[0];)e.path.shift();\"?\"==s?(e.query=\"\",u=QUERY):\"#\"==s&&(e.fragment=\"\",u=FRAGMENT)}else d+=percentEncode(s,pathPercentEncodeSet);break;case CANNOT_BE_A_BASE_URL_PATH:\"?\"==s?(e.query=\"\",u=QUERY):\"#\"==s?(e.fragment=\"\",u=FRAGMENT):s!=EOF&&(e.path[0]+=percentEncode(s,C0ControlPercentEncodeSet));break;case QUERY:t||\"#\"!=s?s!=EOF&&(\"'\"==s&&isSpecial(e)?e.query+=\"%27\":e.query+=\"#\"==s?\"%23\":percentEncode(s,C0ControlPercentEncodeSet)):(e.fragment=\"\",u=FRAGMENT);break;case FRAGMENT:s!=EOF&&(e.fragment+=percentEncode(s,fragmentPercentEncodeSet))}p++}},URLConstructor=function URL(e){var r,t,a=anInstance(this,URLConstructor,\"URL\"),i=arguments.length>1?arguments[1]:void 0,s=toString(e),c=setInternalState(a,{type:\"URL\"});if(void 0!==i)if(i instanceof URLConstructor)r=getInternalURLState(i);else if(t=parseURL(r={},toString(i)))throw TypeError(t);if(t=parseURL(c,s,null,r))throw TypeError(t);var l=c.searchParams=new URLSearchParams$1,u=getInternalSearchParamsState(l);u.updateSearchParams(c.query),u.updateURL=function(){c.query=String(l)||null},descriptors||(a.href=serializeURL.call(a),a.origin=getOrigin.call(a),a.protocol=getProtocol.call(a),a.username=getUsername.call(a),a.password=getPassword.call(a),a.host=getHost.call(a),a.hostname=getHostname.call(a),a.port=getPort.call(a),a.pathname=getPathname.call(a),a.search=getSearch.call(a),a.searchParams=getSearchParams.call(a),a.hash=getHash.call(a))},URLPrototype=URLConstructor.prototype,serializeURL=function(){var e=getInternalURLState(this),r=e.scheme,t=e.username,a=e.password,i=e.host,s=e.port,c=e.path,l=e.query,u=e.fragment,p=r+\":\";return null!==i?(p+=\"//\",includesCredentials(e)&&(p+=t+(a?\":\"+a:\"\")+\"@\"),p+=serializeHost(i),null!==s&&(p+=\":\"+s)):\"file\"==r&&(p+=\"//\"),p+=e.cannotBeABaseURL?c[0]:c.length?\"/\"+c.join(\"/\"):\"\",null!==l&&(p+=\"?\"+l),null!==u&&(p+=\"#\"+u),p},getOrigin=function(){var e=getInternalURLState(this),r=e.scheme,t=e.port;if(\"blob\"==r)try{return new URLConstructor(r.path[0]).origin}catch(e){return\"null\"}return\"file\"!=r&&isSpecial(e)?r+\"://\"+serializeHost(e.host)+(null!==t?\":\"+t:\"\"):\"null\"},getProtocol=function(){return getInternalURLState(this).scheme+\":\"},getUsername=function(){return getInternalURLState(this).username},getPassword=function(){return getInternalURLState(this).password},getHost=function(){var e=getInternalURLState(this),r=e.host,t=e.port;return null===r?\"\":null===t?serializeHost(r):serializeHost(r)+\":\"+t},getHostname=function(){var e=getInternalURLState(this).host;return null===e?\"\":serializeHost(e)},getPort=function(){var e=getInternalURLState(this).port;return null===e?\"\":String(e)},getPathname=function(){var e=getInternalURLState(this),r=e.path;return e.cannotBeABaseURL?r[0]:r.length?\"/\"+r.join(\"/\"):\"\"},getSearch=function(){var e=getInternalURLState(this).query;return e?\"?\"+e:\"\"},getSearchParams=function(){return getInternalURLState(this).searchParams},getHash=function(){var e=getInternalURLState(this).fragment;return e?\"#\"+e:\"\"},accessorDescriptor=function(e,r){return{get:e,set:r,configurable:!0,enumerable:!0}};if(descriptors&&objectDefineProperties(URLPrototype,{href:accessorDescriptor(serializeURL,(function(e){var r=getInternalURLState(this),t=toString(e),a=parseURL(r,t);if(a)throw TypeError(a);getInternalSearchParamsState(r.searchParams).updateSearchParams(r.query)})),origin:accessorDescriptor(getOrigin),protocol:accessorDescriptor(getProtocol,(function(e){var r=getInternalURLState(this);parseURL(r,toString(e)+\":\",SCHEME_START)})),username:accessorDescriptor(getUsername,(function(e){var r=getInternalURLState(this),t=arrayFrom(toString(e));if(!cannotHaveUsernamePasswordPort(r)){r.username=\"\";for(var a=0;a<t.length;a++)r.username+=percentEncode(t[a],userinfoPercentEncodeSet)}})),password:accessorDescriptor(getPassword,(function(e){var r=getInternalURLState(this),t=arrayFrom(toString(e));if(!cannotHaveUsernamePasswordPort(r)){r.password=\"\";for(var a=0;a<t.length;a++)r.password+=percentEncode(t[a],userinfoPercentEncodeSet)}})),host:accessorDescriptor(getHost,(function(e){var r=getInternalURLState(this);r.cannotBeABaseURL||parseURL(r,toString(e),HOST)})),hostname:accessorDescriptor(getHostname,(function(e){var r=getInternalURLState(this);r.cannotBeABaseURL||parseURL(r,toString(e),HOSTNAME)})),port:accessorDescriptor(getPort,(function(e){var r=getInternalURLState(this);cannotHaveUsernamePasswordPort(r)||(\"\"==(e=toString(e))?r.port=null:parseURL(r,e,PORT))})),pathname:accessorDescriptor(getPathname,(function(e){var r=getInternalURLState(this);r.cannotBeABaseURL||(r.path=[],parseURL(r,toString(e),PATH_START))})),search:accessorDescriptor(getSearch,(function(e){var r=getInternalURLState(this);\"\"==(e=toString(e))?r.query=null:(\"?\"==e.charAt(0)&&(e=e.slice(1)),r.query=\"\",parseURL(r,e,QUERY)),getInternalSearchParamsState(r.searchParams).updateSearchParams(r.query)})),searchParams:accessorDescriptor(getSearchParams),hash:accessorDescriptor(getHash,(function(e){var r=getInternalURLState(this);\"\"!=(e=toString(e))?(\"#\"==e.charAt(0)&&(e=e.slice(1)),r.fragment=\"\",parseURL(r,e,FRAGMENT)):r.fragment=null}))}),redefine(URLPrototype,\"toJSON\",(function toJSON(){return serializeURL.call(this)}),{enumerable:!0}),redefine(URLPrototype,\"toString\",(function toString(){return serializeURL.call(this)}),{enumerable:!0}),NativeURL){var nativeCreateObjectURL=NativeURL.createObjectURL,nativeRevokeObjectURL=NativeURL.revokeObjectURL;nativeCreateObjectURL&&redefine(URLConstructor,\"createObjectURL\",(function createObjectURL(e){return nativeCreateObjectURL.apply(NativeURL,arguments)})),nativeRevokeObjectURL&&redefine(URLConstructor,\"revokeObjectURL\",(function revokeObjectURL(e){return nativeRevokeObjectURL.apply(NativeURL,arguments)}))}setToStringTag(URLConstructor,\"URL\"),_export({global:!0,forced:!nativeUrl,sham:!descriptors},{URL:URLConstructor});var $forEach=arrayIteration.forEach,STRICT_METHOD=arrayMethodIsStrict(\"forEach\"),arrayForEach=STRICT_METHOD?[].forEach:function forEach(e){return $forEach(this,e,arguments.length>1?arguments[1]:void 0)},handlePrototype=function(e){if(e&&e.forEach!==arrayForEach)try{createNonEnumerableProperty(e,\"forEach\",arrayForEach)}catch(r){e.forEach=arrayForEach}};for(var COLLECTION_NAME in domIterables)handlePrototype(global$1[COLLECTION_NAME]&&global$1[COLLECTION_NAME].prototype);handlePrototype(domTokenListPrototype);var propertyIsEnumerable=objectPropertyIsEnumerable.f,createMethod=function(e){return function(r){for(var t,a=toIndexedObject(r),i=objectKeys(a),s=i.length,c=0,l=[];s>c;)t=i[c++],descriptors&&!propertyIsEnumerable.call(a,t)||l.push(e?[t,a[t]]:a[t]);return l}},objectToArray={entries:createMethod(!0),values:createMethod(!1)},$entries=objectToArray.entries;_export({target:\"Object\",stat:!0},{entries:function entries(e){return $entries(e)}});var getOwnPropertyDescriptor=objectGetOwnPropertyDescriptor.f,$startsWith=\"\".startsWith,min$1=Math.min,CORRECT_IS_REGEXP_LOGIC=correctIsRegexpLogic(\"startsWith\"),MDN_POLYFILL_BUG=!(CORRECT_IS_REGEXP_LOGIC||(descriptor=getOwnPropertyDescriptor(String.prototype,\"startsWith\"),!descriptor||descriptor.writable)),descriptor;_export({target:\"String\",proto:!0,forced:!MDN_POLYFILL_BUG&&!CORRECT_IS_REGEXP_LOGIC},{startsWith:function startsWith(e){var r=toString(requireObjectCoercible(this));notARegexp(e);var t=toLength(min$1(arguments.length>1?arguments[1]:void 0,r.length)),a=toString(e);return $startsWith?$startsWith.call(r,a,t):r.slice(t,t+a.length)===a}});var floor=Math.floor,replace=\"\".replace,SUBSTITUTION_SYMBOLS=/\\$([$&'`]|\\d{1,2}|<[^>]*>)/g,SUBSTITUTION_SYMBOLS_NO_NAMED=/\\$([$&'`]|\\d{1,2})/g,getSubstitution=function(e,r,t,a,i,s){var c=t+e.length,l=a.length,u=SUBSTITUTION_SYMBOLS_NO_NAMED;return void 0!==i&&(i=toObject(i),u=SUBSTITUTION_SYMBOLS),replace.call(s,u,(function(s,u){var p;switch(u.charAt(0)){case\"$\":return\"$\";case\"&\":return e;case\"`\":return r.slice(0,t);case\"'\":return r.slice(c);case\"<\":p=i[u.slice(1,-1)];break;default:var d=+u;if(0===d)return s;if(d>l){var h=floor(d/10);return 0===h?s:h<=l?void 0===a[h-1]?u.charAt(1):a[h-1]+u.charAt(1):s}p=a[d-1]}return void 0===p?\"\":p}))},REPLACE=wellKnownSymbol(\"replace\"),max=Math.max,min=Math.min,maybeToString=function(e){return void 0===e?e:String(e)},REPLACE_KEEPS_$0=\"$0\"===\"a\".replace(/./,\"$0\"),REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE=!!/./[REPLACE]&&\"\"===/./[REPLACE](\"a\",\"$0\"),REPLACE_SUPPORTS_NAMED_GROUPS=!fails((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:\"7\"},e},\"7\"!==\"\".replace(e,\"$<a>\")}));fixRegexpWellKnownSymbolLogic(\"replace\",(function(e,r,t){var a=REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE?\"$\":\"$0\";return[function replace(e,t){var a=requireObjectCoercible(this),i=null==e?void 0:getMethod(e,REPLACE);return i?i.call(e,a,t):r.call(toString(a),e,t)},function(e,i){var s=anObject(this),c=toString(e);if(\"string\"==typeof i&&-1===i.indexOf(a)&&-1===i.indexOf(\"$<\")){var l=t(r,s,c,i);if(l.done)return l.value}var u=isCallable(i);u||(i=toString(i));var p=s.global;if(p){var d=s.unicode;s.lastIndex=0}for(var h=[];;){var y=regexpExecAbstract(s,c);if(null===y)break;if(h.push(y),!p)break;\"\"===toString(y[0])&&(s.lastIndex=advanceStringIndex(c,toLength(s.lastIndex),d))}for(var A=\"\",g=0,v=0;v<h.length;v++){y=h[v];for(var E=toString(y[0]),m=max(min(toInteger(y.index),c.length),0),I=[],P=1;P<y.length;P++)I.push(maybeToString(y[P]));var b=y.groups;if(u){var T=[E].concat(I,m,c);void 0!==b&&T.push(b);var S=toString(i.apply(void 0,T))}else S=getSubstitution(E,c,m,I,b,i);m>=g&&(A+=c.slice(g,m)+S,g=m+E.length)}return A+c.slice(g)}]}),!REPLACE_SUPPORTS_NAMED_GROUPS||!REPLACE_KEEPS_$0||REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);var IS_CONCAT_SPREADABLE=wellKnownSymbol(\"isConcatSpreadable\"),MAX_SAFE_INTEGER=9007199254740991,MAXIMUM_ALLOWED_INDEX_EXCEEDED=\"Maximum allowed index exceeded\",IS_CONCAT_SPREADABLE_SUPPORT=engineV8Version>=51||!fails((function(){var e=[];return e[IS_CONCAT_SPREADABLE]=!1,e.concat()[0]!==e})),SPECIES_SUPPORT=arrayMethodHasSpeciesSupport(\"concat\"),isConcatSpreadable=function(e){if(!isObject(e))return!1;var r=e[IS_CONCAT_SPREADABLE];return void 0!==r?!!r:isArray(e)},FORCED=!IS_CONCAT_SPREADABLE_SUPPORT||!SPECIES_SUPPORT;_export({target:\"Array\",proto:!0,forced:FORCED},{concat:function concat(e){var r,t,a,i,s,c=toObject(this),l=arraySpeciesCreate(c,0),u=0;for(r=-1,a=arguments.length;r<a;r++)if(isConcatSpreadable(s=-1===r?c:arguments[r])){if(u+(i=toLength(s.length))>MAX_SAFE_INTEGER)throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);for(t=0;t<i;t++,u++)t in s&&createProperty(l,u,s[t])}else{if(u>=MAX_SAFE_INTEGER)throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);createProperty(l,u++,s)}return l.length=u,l}});var cnt=0,imageCompressionLibUrl,worker;function createWorker(e){var r=[];return\"function\"==typeof e?r.push(\"(\".concat(e,\")()\")):r.push(e),new Worker(URL.createObjectURL(new Blob(r)))}function createSourceObject(e){return URL.createObjectURL(new Blob([e],{type:\"application/javascript\"}))}function stringify(e){return JSON.stringify(e,(function(e,r){return\"function\"==typeof r?\"BIC_FN:::(function () { return \".concat(r.toString(),\" })()\"):r}))}function parse(o){if(\"string\"==typeof o)return o;var result={};return Object.entries(o).forEach((function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(\"string\"==typeof value&&value.startsWith(\"BIC_FN:::\"))try{result[key]=eval(value.replace(/^BIC_FN:::/,\"\"))}catch(e){throw e}else result[key]=parse(value)})),result}function generateLib(){return createSourceObject(\"\\n // reconstruct library\\n function imageCompression (){return (\".concat(imageCompression,\").apply(null, arguments)}\\n\\n imageCompression.getDataUrlFromFile = \").concat(imageCompression.getDataUrlFromFile,\"\\n imageCompression.getFilefromDataUrl = \").concat(imageCompression.getFilefromDataUrl,\"\\n imageCompression.loadImage = \").concat(imageCompression.loadImage,\"\\n imageCompression.drawImageInCanvas = \").concat(imageCompression.drawImageInCanvas,\"\\n imageCompression.drawFileInCanvas = \").concat(imageCompression.drawFileInCanvas,\"\\n imageCompression.canvasToFile = \").concat(imageCompression.canvasToFile,\"\\n imageCompression.getExifOrientation = \").concat(imageCompression.getExifOrientation,\"\\n imageCompression.handleMaxWidthOrHeight = \").concat(imageCompression.handleMaxWidthOrHeight,\"\\n imageCompression.followExifOrientation = \").concat(imageCompression.followExifOrientation,\"\\n imageCompression.cleanupCanvasMemory = \").concat(imageCompression.cleanupCanvasMemory,\"\\n imageCompression.isAutoOrientationInBrowser = \").concat(imageCompression.isAutoOrientationInBrowser,\"\\n imageCompression.approximateBelowMaximumCanvasSizeOfBrowser = \").concat(imageCompression.approximateBelowMaximumCanvasSizeOfBrowser,\"\\n imageCompression.getBrowserName = \").concat(imageCompression.getBrowserName,\"\\n\\n // functions / objects\\n getDataUrlFromFile = imageCompression.getDataUrlFromFile\\n getFilefromDataUrl = imageCompression.getFilefromDataUrl\\n loadImage = imageCompression.loadImage\\n drawImageInCanvas = imageCompression.drawImageInCanvas\\n drawFileInCanvas = imageCompression.drawFileInCanvas\\n canvasToFile = imageCompression.canvasToFile\\n getExifOrientation = imageCompression.getExifOrientation\\n handleMaxWidthOrHeight = imageCompression.handleMaxWidthOrHeight\\n followExifOrientation = imageCompression.followExifOrientation\\n cleanupCanvasMemory = imageCompression.cleanupCanvasMemory\\n isAutoOrientationInBrowser = imageCompression.isAutoOrientationInBrowser\\n approximateBelowMaximumCanvasSizeOfBrowser = imageCompression.approximateBelowMaximumCanvasSizeOfBrowser\\n getBrowserName = imageCompression.getBrowserName\\n isIOS = \").concat(isIOS,\"\\n \\n getNewCanvasAndCtx = \").concat(getNewCanvasAndCtx,\"\\n CustomFileReader = FileReader\\n CustomFile = File\\n MaxCanvasSize = \").concat(JSON.stringify(MaxCanvasSize),\"\\n function compress (){return (\").concat(compress,\").apply(null, arguments)}\\n\\n // core-js\\n function _slicedToArray(arr, n) { return arr }\\n function _typeof(a) { return typeof a }\\n function _objectSpread2(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? arguments[i] : {};\\n \\n Object.assign(target, source)\\n }\\n \\n return target;\\n }\\n\\n // Libraries\\n const parse = \").concat(parse,\"\\n const UPNG = {}\\n UPNG.toRGBA8 = \").concat(UPNG.toRGBA8,\"\\n UPNG.toRGBA8.decodeImage = \").concat(UPNG.toRGBA8.decodeImage,\"\\n UPNG.decode = \").concat(UPNG.decode,\"\\n UPNG.decode._decompress = \").concat(UPNG.decode._decompress,\"\\n UPNG.decode._inflate = \").concat(UPNG.decode._inflate,\"\\n UPNG.decode._readInterlace = \").concat(UPNG.decode._readInterlace,\"\\n UPNG.decode._getBPP = \").concat(UPNG.decode._getBPP,\" \\n UPNG.decode._filterZero = \").concat(UPNG.decode._filterZero,\"\\n UPNG.decode._paeth = \").concat(UPNG.decode._paeth,\"\\n UPNG.decode._IHDR = \").concat(UPNG.decode._IHDR,\"\\n UPNG._bin = parse(\").concat(stringify(UPNG._bin),\")\\n UPNG._copyTile = \").concat(UPNG._copyTile,\"\\n UPNG.encode = \").concat(UPNG.encode,\"\\n UPNG.encodeLL = \").concat(UPNG.encodeLL,\" \\n UPNG.encode._main = \").concat(UPNG.encode._main,\"\\n UPNG.encode.compressPNG = \").concat(UPNG.encode.compressPNG,\" \\n UPNG.encode.compress = \").concat(UPNG.encode.compress,\"\\n UPNG.encode.framize = \").concat(UPNG.encode.framize,\" \\n UPNG.encode._updateFrame = \").concat(UPNG.encode._updateFrame,\" \\n UPNG.encode._prepareDiff = \").concat(UPNG.encode._prepareDiff,\" \\n UPNG.encode._filterZero = \").concat(UPNG.encode._filterZero,\" \\n UPNG.encode._filterLine = \").concat(UPNG.encode._filterLine,\"\\n UPNG.encode.concatRGBA = \").concat(UPNG.encode.concatRGBA,\"\\n UPNG.crc = parse(\").concat(stringify(UPNG.crc),\")\\n UPNG.crc.table = ( function() {\\n var tab = new Uint32Array(256);\\n for (var n=0; n<256; n++) {\\n var c = n;\\n for (var k=0; k<8; k++) {\\n if (c & 1) c = 0xedb88320 ^ (c >>> 1);\\n else c = c >>> 1;\\n }\\n tab[n] = c; }\\n return tab; })()\\n UPNG.quantize = \").concat(UPNG.quantize,\" \\n UPNG.quantize.getKDtree = \").concat(UPNG.quantize.getKDtree,\" \\n UPNG.quantize.getNearest = \").concat(UPNG.quantize.getNearest,\" \\n UPNG.quantize.planeDst = \").concat(UPNG.quantize.planeDst,\" \\n UPNG.quantize.dist = \").concat(UPNG.quantize.dist,\" \\n UPNG.quantize.splitPixels = \").concat(UPNG.quantize.splitPixels,\" \\n UPNG.quantize.vecDot = \").concat(UPNG.quantize.vecDot,\" \\n UPNG.quantize.stats = \").concat(UPNG.quantize.stats,\" \\n UPNG.quantize.estats = \").concat(UPNG.quantize.estats,\"\\n UPNG.M4 = parse(\").concat(stringify(UPNG.M4),\")\\n UPNG.encode.concatRGBA = \").concat(UPNG.encode.concatRGBA,'\\n UPNG.inflateRaw=function(){\\n var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;\\n if(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;\\n if(Z)W=new R(N.length>>>2<<5);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);\\n var D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;\\n w+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1}if(m==2){J=A(N,d,5)+257;\\n h=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var E=d,j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0}for(var c=0;\\n c<Q;c++){var K=A(N,d+c*3,3);b.Q[(b.X[c]<<1)+1]=K;if(K>j)j=K}d+=3*Q;M(b.Q,j);I(b.Q,j,b.u);v=b.w;C=b.d;\\n d=l(b.u,(1<<j)-1,J+h,N,d,b.v);var r=V.V(b.v,0,J,b.C);X=(1<<r)-1;var S=V.V(b.v,J,h,b.D);u=(1<<S)-1;M(b.C,r);\\n I(b.C,r,v);M(b.D,S);I(b.D,S,C)}while(!0){var T=v[e(N,d)&X];d+=T&15;var p=T>>>4;if(p>>>8==0){W[w++]=p}else if(p==256){break}else{var z=w+p-254;\\n if(p>264){var _=b.q[p-257];z=w+(_>>>3)+A(N,d,_&7);d+=_&7}var $=C[e(N,d)&u];d+=$&15;var s=$>>>4,Y=b.c[s],a=(Y>>>4)+n(N,d,Y&15);\\n d+=Y&15;while(w<z){W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a]}w=z}}}return W.length==w?W:W.slice(0,w)};\\n H.H.W=function(N,W){var R=N.length;if(W<=R)return N;var V=new Uint8Array(R<<1);V.set(N,0);return V};\\n H.H.R=function(N,W,R,V,n,A){var l=H.H.e,M=H.H.Z,I=0;while(I<R){var e=N[M(V,n)&W];n+=e&15;var b=e>>>4;\\n if(b<=15){A[I]=b;I++}else{var Z=0,m=0;if(b==16){m=3+l(V,n,2);n+=2;Z=A[I-1]}else if(b==17){m=3+l(V,n,3);\\n n+=3}else if(b==18){m=11+l(V,n,7);n+=7}var J=I+m;while(I<J){A[I]=Z;I++}}}return n};H.H.V=function(N,W,R,V){var n=0,A=0,l=V.length>>>1;\\n while(A<R){var M=N[A+W];V[A<<1]=0;V[(A<<1)+1]=M;if(M>n)n=M;A++}while(A<l){V[A<<1]=0;V[(A<<1)+1]=0;A++}return n};\\n H.H.n=function(N,W){var R=H.H.m,V=N.length,n,A,l,M,I,e=R.j;for(var M=0;M<=W;M++)e[M]=0;for(M=1;M<V;M+=2)e[N[M]]++;\\n var b=R.K;n=0;e[0]=0;for(A=1;A<=W;A++){n=n+e[A-1]<<1;b[A]=n}for(l=0;l<V;l+=2){I=N[l+1];if(I!=0){N[l]=b[I];\\n b[I]++}}};H.H.A=function(N,W,R){var V=N.length,n=H.H.m,A=n.r;for(var l=0;l<V;l+=2)if(N[l+1]!=0){var M=l>>1,I=N[l+1],e=M<<4|I,b=W-I,Z=N[l]<<b,m=Z+(1<<b);\\n while(Z!=m){var J=A[Z]>>>15-W;R[J]=e;Z++}}};H.H.l=function(N,W){var R=H.H.m.r,V=15-W;for(var n=0;n<N.length;\\n n+=2){var A=N[n]<<W-N[n+1];N[n]=R[A]>>>V}};H.H.M=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8};\\n H.H.I=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8;N[V+2]|=R>>>16};H.H.e=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8)>>>(W&7)&(1<<R)-1};\\n H.H.b=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)&(1<<R)-1};H.H.Z=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)};\\n H.H.i=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16|N[(W>>>3)+3]<<24)>>>(W&7)};H.H.m=function(){var N=Uint16Array,W=Uint32Array;\\n return{K:new N(16),j:new N(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new N(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new W(32),J:new N(512),_:[],h:new N(32),$:[],w:new N(32768),C:[],v:[],d:new N(32768),D:[],u:new N(512),Q:[],r:new N(1<<15),s:new W(286),Y:new W(30),a:new W(19),t:new W(15e3),k:new N(1<<16),g:new N(1<<15)}}();\\n (function(){var N=H.H.m,W=1<<15;for(var R=0;R<W;R++){var V=R;V=(V&2863311530)>>>1|(V&1431655765)<<1;\\n V=(V&3435973836)>>>2|(V&858993459)<<2;V=(V&4042322160)>>>4|(V&252645135)<<4;V=(V&4278255360)>>>8|(V&16711935)<<8;\\n N.r[R]=(V>>>16|V<<16)>>>17}function n(A,l,M){while(l--!=0)A.push(0,M)}for(var R=0;R<32;R++){N.q[R]=N.S[R]<<3|N.T[R];\\n N.c[R]=N.p[R]<<4|N.z[R]}n(N._,144,8);n(N._,255-143,9);n(N._,279-255,7);n(N._,287-279,8);H.H.n(N._,9);\\n H.H.A(N._,9,N.J);H.H.l(N._,9);n(N.$,32,5);H.H.n(N.$,5);H.H.A(N.$,5,N.h);H.H.l(N.$,5);n(N.Q,19,0);n(N.C,286,0);\\n n(N.D,30,0);n(N.v,320,0)}());return H.H.N}()\\n \\n const UZIP = {}\\n UZIP[\"parse\"] = ').concat(UZIP_1.parse,\"\\n UZIP._readLocal = \").concat(UZIP_1._readLocal,\"\\n UZIP.inflateRaw = \").concat(UZIP_1.inflateRaw,\"\\n UZIP.inflate = \").concat(UZIP_1.inflate,\"\\n UZIP.deflate = \").concat(UZIP_1.deflate,\"\\n UZIP.deflateRaw = \").concat(UZIP_1.deflateRaw,\"\\n UZIP.encode = \").concat(UZIP_1.encode,\"\\n UZIP._noNeed = \").concat(UZIP_1._noNeed,\"\\n UZIP._writeHeader = \").concat(UZIP_1._writeHeader,\"\\n UZIP.crc = parse(\").concat(stringify(UZIP_1.crc),\")\\n UZIP.crc.table = ( function() {\\n var tab = new Uint32Array(256);\\n for (var n=0; n<256; n++) {\\n var c = n;\\n for (var k=0; k<8; k++) {\\n if (c & 1) c = 0xedb88320 ^ (c >>> 1);\\n else c = c >>> 1;\\n }\\n tab[n] = c; }\\n return tab; })()\\n \\n UZIP.adler = \").concat(UZIP_1.adler,\"\\n UZIP.bin = parse(\").concat(stringify(UZIP_1.bin),\")\\n UZIP.F = {}\\n UZIP.F.deflateRaw = \").concat(UZIP_1.F.deflateRaw,\"\\n UZIP.F._bestMatch = \").concat(UZIP_1.F._bestMatch,\"\\n UZIP.F._howLong = \").concat(UZIP_1.F._howLong,\"\\n UZIP.F._hash = \").concat(UZIP_1.F._hash,\"\\n UZIP.saved = \").concat(UZIP_1.saved,\"\\n UZIP.F._writeBlock = \").concat(UZIP_1.F._writeBlock,\"\\n UZIP.F._copyExact = \").concat(UZIP_1.F._copyExact,\"\\n UZIP.F.getTrees = \").concat(UZIP_1.F.getTrees,\"\\n UZIP.F.getSecond = \").concat(UZIP_1.F.getSecond,\"\\n UZIP.F.nonZero = \").concat(UZIP_1.F.nonZero,\"\\n UZIP.F.contSize = \").concat(UZIP_1.F.contSize,\"\\n UZIP.F._codeTiny = \").concat(UZIP_1.F._codeTiny,\" \\n UZIP.F._lenCodes = \").concat(UZIP_1.F._lenCodes,\" \\n UZIP.F._hufTree = \").concat(UZIP_1.F._hufTree,\" \\n UZIP.F.setDepth = \").concat(UZIP_1.F.setDepth,\" \\n UZIP.F.restrictDepth = \").concat(UZIP_1.F.restrictDepth,\"\\n UZIP.F._goodIndex = \").concat(UZIP_1.F._goodIndex,\" \\n UZIP.F._writeLit = \").concat(UZIP_1.F._writeLit,\" \\n UZIP.F.inflate = \").concat(UZIP_1.F.inflate,\" \\n UZIP.F._check = \").concat(UZIP_1.F._check,\" \\n UZIP.F._decodeTiny = \").concat(UZIP_1.F._decodeTiny,\" \\n UZIP.F._copyOut = \").concat(UZIP_1.F._copyOut,\" \\n UZIP.F.makeCodes = \").concat(UZIP_1.F.makeCodes,\" \\n UZIP.F.codes2map = \").concat(UZIP_1.F.codes2map,\" \\n UZIP.F.revCodes = \").concat(UZIP_1.F.revCodes,\" \\n\\n // used only in deflate\\n UZIP.F._putsE = \").concat(UZIP_1.F._putsE,\"\\n UZIP.F._putsF = \").concat(UZIP_1.F._putsF,\"\\n \\n UZIP.F._bitsE = \").concat(UZIP_1.F._bitsE,\"\\n UZIP.F._bitsF = \").concat(UZIP_1.F._bitsF,\"\\n\\n UZIP.F._get17 = \").concat(UZIP_1.F._get17,\"\\n UZIP.F._get25 = \").concat(UZIP_1.F._get25,\"\\n UZIP.F.U = function(){\\n var u16=Uint16Array, u32=Uint32Array;\\n return {\\n next_code : new u16(16),\\n bl_count : new u16(16),\\n ordr : [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ],\\n of0 : [3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],\\n exb : [0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\\n ldef : new u16(32),\\n df0 : [1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 65535, 65535],\\n dxb : [0,0,0,0,1,1,2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\\n ddef : new u32(32),\\n flmap: new u16( 512), fltree: [],\\n fdmap: new u16( 32), fdtree: [],\\n lmap : new u16(32768), ltree : [], ttree:[],\\n dmap : new u16(32768), dtree : [],\\n imap : new u16( 512), itree : [],\\n //rev9 : new u16( 512)\\n rev15: new u16(1<<15),\\n lhst : new u32(286), dhst : new u32( 30), ihst : new u32(19),\\n lits : new u32(15000),\\n strt : new u16(1<<16),\\n prev : new u16(1<<15)\\n };\\n } ();\\n\\n (function(){\\n var U = UZIP.F.U;\\n var len = 1<<15;\\n for(var i=0; i<len; i++) {\\n var x = i;\\n x = (((x & 0xaaaaaaaa) >>> 1) | ((x & 0x55555555) << 1));\\n x = (((x & 0xcccccccc) >>> 2) | ((x & 0x33333333) << 2));\\n x = (((x & 0xf0f0f0f0) >>> 4) | ((x & 0x0f0f0f0f) << 4));\\n x = (((x & 0xff00ff00) >>> 8) | ((x & 0x00ff00ff) << 8));\\n U.rev15[i] = (((x >>> 16) | (x << 16)))>>>17;\\n }\\n \\n function pushV(tgt, n, sv) { while(n--!=0) tgt.push(0,sv); }\\n \\n for(var i=0; i<32; i++) { U.ldef[i]=(U.of0[i]<<3)|U.exb[i]; U.ddef[i]=(U.df0[i]<<4)|U.dxb[i]; }\\n \\n pushV(U.fltree, 144, 8); pushV(U.fltree, 255-143, 9); pushV(U.fltree, 279-255, 7); pushV(U.fltree,287-279,8);\\n /*\\n var i = 0;\\n for(; i<=143; i++) U.fltree.push(0,8);\\n for(; i<=255; i++) U.fltree.push(0,9);\\n for(; i<=279; i++) U.fltree.push(0,7);\\n for(; i<=287; i++) U.fltree.push(0,8);\\n */\\n UZIP.F.makeCodes(U.fltree, 9);\\n UZIP.F.codes2map(U.fltree, 9, U.flmap);\\n UZIP.F.revCodes (U.fltree, 9)\\n \\n pushV(U.fdtree,32,5);\\n //for(i=0;i<32; i++) U.fdtree.push(0,5);\\n UZIP.F.makeCodes(U.fdtree, 5);\\n UZIP.F.codes2map(U.fdtree, 5, U.fdmap);\\n UZIP.F.revCodes (U.fdtree, 5)\\n \\n pushV(U.itree,19,0); pushV(U.ltree,286,0); pushV(U.dtree,30,0); pushV(U.ttree,320,0);\\n /*\\n for(var i=0; i< 19; i++) U.itree.push(0,0);\\n for(var i=0; i<286; i++) U.ltree.push(0,0);\\n for(var i=0; i< 30; i++) U.dtree.push(0,0);\\n for(var i=0; i<320; i++) U.ttree.push(0,0);\\n */\\n })()\\n \"))}function generateWorkerScript(){return createWorker(\"\\n let scriptImported = false\\n self.addEventListener('message', async (e) => {\\n const { file, id, imageCompressionLibUrl, options } = e.data\\n options.onProgress = (progress) => self.postMessage({ progress, id })\\n try {\\n if (!scriptImported) {\\n // console.log('[worker] importScripts', imageCompressionLibUrl)\\n self.importScripts(imageCompressionLibUrl)\\n scriptImported = true\\n }\\n // console.log('[worker] self', self)\\n const compressedFile = await imageCompression(file, options)\\n self.postMessage({ file: compressedFile, id })\\n } catch (e) {\\n // console.error('[worker] error', e)\\n self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n }\\n })\\n \")}function compressOnWebWorker(e,r){return new Promise((function(t,a){var i=cnt+=1;imageCompressionLibUrl||(imageCompressionLibUrl=generateLib()),worker||(worker=generateWorkerScript()),worker.addEventListener(\"message\",(function handler(e){if(e.data.id===i){if(void 0!==e.data.progress)return void r.onProgress(e.data.progress);worker.removeEventListener(\"message\",handler),e.data.error&&a(new Error(e.data.error)),t(e.data.file)}})),worker.addEventListener(\"error\",a),worker.postMessage({file:e,id:i,imageCompressionLibUrl:imageCompressionLibUrl,options:_objectSpread2(_objectSpread2({},r),{},{onProgress:void 0})})}))}function imageCompression(e,r){return new Promise((function(t,a){var i,s,c,l,u,p;if(i=_objectSpread2({},r),c=0,l=i.onProgress,i.maxSizeMB=i.maxSizeMB||Number.POSITIVE_INFINITY,u=\"boolean\"!=typeof i.useWebWorker||i.useWebWorker,delete i.useWebWorker,i.onProgress=function(e){c=e,\"function\"==typeof l&&l(c)},!(e instanceof Blob||e instanceof CustomFile))return a(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return a(new Error(\"The file given is not an image\"));if(p=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!u||\"function\"!=typeof Worker||p)return compress(e,i).then(function(e){try{return s=e,$If_3.call(this)}catch(e){return a(e)}}.bind(this),a);var d=function(){try{return $If_3.call(this)}catch(e){return a(e)}}.bind(this),h=function $Try_1_Catch(r){try{return compress(e,i).then((function(e){try{return s=e,d()}catch(e){return a(e)}}),a)}catch(e){return a(e)}};try{return compressOnWebWorker(e,i).then((function(e){try{return s=e,d()}catch(e){return h()}}),h)}catch(e){h()}function $If_3(){try{s.name=e.name,s.lastModified=e.lastModified}catch(e){}return t(s)}}))}imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"1.0.16\";\n//# sourceMappingURL=browser-image-compression.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItaW1hZ2UtY29tcHJlc3Npb24vZGlzdC9icm93c2VyLWltYWdlLWNvbXByZXNzaW9uLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQiw4QkFBOEIsb0NBQW9DLDZCQUE2QiwyQ0FBMkMsbUNBQW1DLDZCQUE2QixhQUFhLEdBQUcsR0FBRyxvQkFBb0Isd0JBQXdCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLDRCQUE0Qix1REFBdUQsc0JBQXNCLFNBQVMsMkJBQTJCLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLGlEQUFpRCwwQkFBMEIsNklBQTZJLGdFQUFnRSxHQUFHLFNBQVMsZ0NBQWdDLHlDQUF5QyxrREFBa0QsV0FBVyw2QkFBNkIsNEdBQTRHLDRCQUE0Qiw2QkFBNkIsb0NBQW9DLG1GQUFtRixZQUFZLHVCQUF1QixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSwwQ0FBMEMsTUFBTSxvREFBb0Qsb0RBQW9ELGdNQUFnTSxnQ0FBZ0Msb0NBQW9DLDJCQUEyQixJQUFJLGNBQWMsU0FBUyw0QkFBNEIsaUtBQWlLLGtLQUFrSyxpQ0FBaUMsT0FBTyxZQUFZLGdDQUFnQyxzQkFBc0IsMEJBQTBCLHlNQUF5TSxZQUFZLGdFQUFnRSxJQUFJLGtDQUFrQyxvQ0FBb0MsRUFBRSxTQUFTLGNBQWMsU0FBUywwRUFBMEUsK0RBQStELHlCQUF5QixzREFBc0QsRUFBRSx1QkFBdUIsZ0ZBQWdGLEVBQUUsc0NBQXNDLHNEQUFzRCxTQUFTLHNCQUFzQix5Q0FBeUMsa0JBQWtCLDBEQUEwRCwwQ0FBMEMsNENBQTRDLHlFQUF5RSx3QkFBd0IsMkJBQTJCLHVCQUF1Qiw4QkFBOEIsMEJBQTBCLDZFQUE2RSx5TUFBeU0sK05BQStOLHdEQUF3RCxJQUFJLFlBQVksU0FBUyxVQUFVLGlFQUFpRSxlQUFl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QXVCLG1CQUFtQixhQUFhLGdDQUFnQywwR0FBMEcsZ0JBQWdCLDRDQUE0QyxzRUFBc0UsY0FBYyxjQUFjLGdDQUFnQyw4S0FBOEssa0pBQWtKLDBCQUEwQixXQUFXLFdBQVcsNEVBQTRFLHdDQUF3QyxVQUFVLE9BQU8sUUFBUSxrQ0FBa0Msa0NBQWtDLGFBQWEsOEpBQThKLGtCQUFrQixzRUFBc0UsdUdBQXVHLDBEQUEwRCxrR0FBa0csTUFBTSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsR0FBRywrQkFBK0Isa0NBQWtDLGdCQUFnQixzQkFBc0IsMktBQTJLLCtCQUErQix3SEFBd0gsZ0ZBQWdGLHFKQUFxSixJQUFJLDRCQUE0QixTQUFTLGFBQWEsZUFBZSxpQkFBaUIsSUFBSSx3QkFBd0IsU0FBUyxhQUFhLHVDQUF1QyxJQUFJLHVDQUF1QyxJQUFJLGVBQWUsU0FBUyxhQUFhLEtBQUssU0FBUyxjQUFjLElBQUksa0RBQWtELElBQUksZUFBZSxTQUFTLFlBQVksS0FBSyxTQUFTLElBQUksaUJBQWlCLElBQUksNENBQTRDLFVBQVUsYUFBYSxHQUFHLGl4QkFBcXpCO0FBQzErN0siLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jyb3dzZXItaW1hZ2UtY29tcHJlc3Npb24vZGlzdC9icm93c2VyLWltYWdlLWNvbXByZXNzaW9uLm1qcz9jYzE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3NlciBJbWFnZSBDb21wcmVzc2lvblxuICogdjEuMC4xNlxuICogYnkgRG9uYWxkIDxkb25hbGRjd2xAZ21haWwuY29tPlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RvbmFsZGN3bC9icm93c2VyLWltYWdlLWNvbXByZXNzaW9uXG4gKi9cblxuZnVuY3Rpb24gX21lcmdlTmFtZXNwYWNlcyhlLHIpe3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHIpe09iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKFwiZGVmYXVsdFwiIT09dCYmISh0IGluIGUpKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxhLmdldD9hOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByW3RdfX0pfX0pKX0pKSxPYmplY3QuZnJlZXplKGUpfWZ1bmN0aW9uIG93bktleXMkMShlLHIpe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7ciYmKGE9YS5maWx0ZXIoKGZ1bmN0aW9uKHIpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscikuZW51bWVyYWJsZX0pKSksdC5wdXNoLmFwcGx5KHQsYSl9cmV0dXJuIHR9ZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW3JdP2FyZ3VtZW50c1tyXTp7fTtyJTI/b3duS2V5cyQxKE9iamVjdCh0KSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7X2RlZmluZVByb3BlcnR5KGUscix0W3JdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTpvd25LZXlzJDEoT2JqZWN0KHQpKS5mb3JFYWNoKChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUscix0KXtyZXR1cm4gciBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3JdPXQsZX1mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShlLHIpe3JldHVybiBfYXJyYXlXaXRoSG9sZXMoZSl8fF9pdGVyYWJsZVRvQXJyYXlMaW1pdChlLHIpfHxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoZSxyKXx8X25vbkl0ZXJhYmxlUmVzdCgpfWZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChlLHIpe3ZhciB0PW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPXQpe3ZhciBhLGkscz1bXSxjPSEwLGw9ITE7dHJ5e2Zvcih0PXQuY2FsbChlKTshKGM9KGE9dC5uZXh0KCkpLmRvbmUpJiYocy5wdXNoKGEudmFsdWUpLCFyfHxzLmxlbmd0aCE9PXIpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtjfHxudWxsPT10LnJldHVybnx8dC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaX19cmV0dXJuIHN9fWZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShlLHIpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheShlLHIpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQ/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCk/X2FycmF5TGlrZVRvQXJyYXkoZSxyKTp2b2lkIDB9fWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGUscil7KG51bGw9PXJ8fHI+ZS5sZW5ndGgpJiYocj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAsYT1uZXcgQXJyYXkocik7dDxyO3QrKylhW3RdPWVbdF07cmV0dXJuIGF9ZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9dmFyIGNvbW1vbmpzR2xvYmFsPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBjcmVhdGVDb21tb25qc01vZHVsZShlKXt2YXIgcj17ZXhwb3J0czp7fX07cmV0dXJuIGUocixyLmV4cG9ydHMpLHIuZXhwb3J0c312YXIgY2hlY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0sZ2xvYmFsJDE9Y2hlY2soXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxjaGVjayhcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxjaGVjayhcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGNoZWNrKFwib2JqZWN0XCI9PXR5cGVvZiBjb21tb25qc0dsb2JhbCYmY29tbW9uanNHbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksaXNQdXJlPSExLHNldEdsb2JhbD1mdW5jdGlvbihlLHIpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsJDEsZSx7dmFsdWU6cixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaCh0KXtnbG9iYWwkMVtlXT1yfXJldHVybiByfSxTSEFSRUQ9XCJfX2NvcmUtanNfc2hhcmVkX19cIixzdG9yZSQxPWdsb2JhbCQxW1NIQVJFRF18fHNldEdsb2JhbChTSEFSRUQse30pLHNoYXJlZFN0b3JlPXN0b3JlJDEsc2hhcmVkPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKChmdW5jdGlvbihlKXsoZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7cmV0dXJuIHNoYXJlZFN0b3JlW2VdfHwoc2hhcmVkU3RvcmVbZV09dm9pZCAwIT09cj9yOnt9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjpcIjMuMTguMFwiLG1vZGU6XCJnbG9iYWxcIixjb3B5cmlnaHQ6XCLCqSAyMDIxIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpXCJ9KX0pKSxyZXF1aXJlT2JqZWN0Q29lcmNpYmxlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9LHRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShlKSl9LGhhc093blByb3BlcnR5PXt9Lmhhc093blByb3BlcnR5LGhhcyQxPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uIGhhc093bihlLHIpe3JldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHRvT2JqZWN0KGUpLHIpfSxpZD0wLHBvc3RmaXg9TWF0aC5yYW5kb20oKSx1aWQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJTeW1ib2woXCIrU3RyaW5nKHZvaWQgMD09PWU/XCJcIjplKStcIilfXCIrKCsraWQrcG9zdGZpeCkudG9TdHJpbmcoMzYpfSxpc0NhbGxhYmxlPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LGFGdW5jdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gaXNDYWxsYWJsZShlKT9lOnZvaWQgMH0sZ2V0QnVpbHRJbj1mdW5jdGlvbihlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/YUZ1bmN0aW9uKGdsb2JhbCQxW2VdKTpnbG9iYWwkMVtlXSYmZ2xvYmFsJDFbZV1bcl19LGVuZ2luZVVzZXJBZ2VudD1nZXRCdWlsdEluKFwibmF2aWdhdG9yXCIsXCJ1c2VyQWdlbnRcIil8fFwiXCIscHJvY2VzcyQzPWdsb2JhbCQxLnByb2Nlc3MsRGVubz1nbG9iYWwkMS5EZW5vLHZlcnNpb25zPXByb2Nlc3MkMyYmcHJvY2VzcyQzLnZlcnNpb25zfHxEZW5vJiZEZW5vLnZlcnNpb24sdjg9dmVyc2lvbnMmJnZlcnNpb25zLnY4LG1hdGNoLHZlcnNpb247djg/KG1hdGNoPXY4LnNwbGl0KFwiLlwiKSx2ZXJzaW9uPW1hdGNoWzBdPDQ/MTptYXRjaFswXSttYXRjaFsxXSk6ZW5naW5lVXNlckFnZW50JiYobWF0Y2g9ZW5naW5lVXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyksKCFtYXRjaHx8bWF0Y2hbMV0+PTc0KSYmKG1hdGNoPWVuZ2luZVVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyksbWF0Y2gmJih2ZXJzaW9uPW1hdGNoWzFdKSkpO3ZhciBlbmdpbmVWOFZlcnNpb249dmVyc2lvbiYmK3ZlcnNpb24sZmFpbHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0sbmF0aXZlU3ltYm9sPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJmVuZ2luZVY4VmVyc2lvbiYmZW5naW5lVjhWZXJzaW9uPDQxfSkpLHVzZVN5bWJvbEFzVWlkPW5hdGl2ZVN5bWJvbCYmIVN5bWJvbC5zaGFtJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yLFdlbGxLbm93blN5bWJvbHNTdG9yZT1zaGFyZWQoXCJ3a3NcIiksU3ltYm9sJDE9Z2xvYmFsJDEuU3ltYm9sLGNyZWF0ZVdlbGxLbm93blN5bWJvbD11c2VTeW1ib2xBc1VpZD9TeW1ib2wkMTpTeW1ib2wkMSYmU3ltYm9sJDEud2l0aG91dFNldHRlcnx8dWlkLHdlbGxLbm93blN5bWJvbD1mdW5jdGlvbihlKXtyZXR1cm4gaGFzJDEoV2VsbEtub3duU3ltYm9sc1N0b3JlLGUpJiYobmF0aXZlU3ltYm9sfHxcInN0cmluZ1wiPT10eXBlb2YgV2VsbEtub3duU3ltYm9sc1N0b3JlW2VdKXx8KG5hdGl2ZVN5bWJvbCYmaGFzJDEoU3ltYm9sJDEsZSk/V2VsbEtub3duU3ltYm9sc1N0b3JlW2VdPVN5bWJvbCQxW2VdOldlbGxLbm93blN5bWJvbHNTdG9yZVtlXT1jcmVhdGVXZWxsS25vd25TeW1ib2woXCJTeW1ib2wuXCIrZSkpLFdlbGxLbm93blN5bWJvbHNTdG9yZVtlXX0sVE9fU1RSSU5HX1RBRyQ0PXdlbGxLbm93blN5bWJvbChcInRvU3RyaW5nVGFnXCIpLHRlc3QkMT17fTt0ZXN0JDFbVE9fU1RSSU5HX1RBRyQ0XT1cInpcIjt2YXIgdG9TdHJpbmdUYWdTdXBwb3J0PVwiW29iamVjdCB6XVwiPT09U3RyaW5nKHRlc3QkMSksZGVzY3JpcHRvcnM9IWZhaWxzKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksaXNPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/bnVsbCE9PWU6aXNDYWxsYWJsZShlKX0sZG9jdW1lbnQkMz1nbG9iYWwkMS5kb2N1bWVudCxFWElTVFMkMT1pc09iamVjdChkb2N1bWVudCQzKSYmaXNPYmplY3QoZG9jdW1lbnQkMy5jcmVhdGVFbGVtZW50KSxkb2N1bWVudENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEVYSVNUUyQxP2RvY3VtZW50JDMuY3JlYXRlRWxlbWVudChlKTp7fX0saWU4RG9tRGVmaW5lPSFkZXNjcmlwdG9ycyYmIWZhaWxzKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnRDcmVhdGVFbGVtZW50KFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLGFuT2JqZWN0PWZ1bmN0aW9uKGUpe2lmKGlzT2JqZWN0KGUpKXJldHVybiBlO3Rocm93IFR5cGVFcnJvcihTdHJpbmcoZSkrXCIgaXMgbm90IGFuIG9iamVjdFwiKX0saXNTeW1ib2w9dXNlU3ltYm9sQXNVaWQ/ZnVuY3Rpb24oZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3ZhciByPWdldEJ1aWx0SW4oXCJTeW1ib2xcIik7cmV0dXJuIGlzQ2FsbGFibGUocikmJk9iamVjdChlKWluc3RhbmNlb2Ygcn0sdHJ5VG9TdHJpbmc9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBTdHJpbmcoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LGFDYWxsYWJsZT1mdW5jdGlvbihlKXtpZihpc0NhbGxhYmxlKGUpKXJldHVybiBlO3Rocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sZ2V0TWV0aG9kPWZ1bmN0aW9uKGUscil7dmFyIHQ9ZVtyXTtyZXR1cm4gbnVsbD09dD92b2lkIDA6YUNhbGxhYmxlKHQpfSxvcmRpbmFyeVRvUHJpbWl0aXZlPWZ1bmN0aW9uKGUscil7dmFyIHQsYTtpZihcInN0cmluZ1wiPT09ciYmaXNDYWxsYWJsZSh0PWUudG9TdHJpbmcpJiYhaXNPYmplY3QoYT10LmNhbGwoZSkpKXJldHVybiBhO2lmKGlzQ2FsbGFibGUodD1lLnZhbHVlT2YpJiYhaXNPYmplY3QoYT10LmNhbGwoZSkpKXJldHVybiBhO2lmKFwic3RyaW5nXCIhPT1yJiZpc0NhbGxhYmxlKHQ9ZS50b1N0cmluZykmJiFpc09iamVjdChhPXQuY2FsbChlKSkpcmV0dXJuIGE7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfSxUT19QUklNSVRJVkU9d2VsbEtub3duU3ltYm9sKFwidG9QcmltaXRpdmVcIiksdG9QcmltaXRpdmU9ZnVuY3Rpb24oZSxyKXtpZighaXNPYmplY3QoZSl8fGlzU3ltYm9sKGUpKXJldHVybiBlO3ZhciB0LGE9Z2V0TWV0aG9kKGUsVE9fUFJJTUlUSVZFKTtpZihhKXtpZih2b2lkIDA9PT1yJiYocj1cImRlZmF1bHRcIiksdD1hLmNhbGwoZSxyKSwhaXNPYmplY3QodCl8fGlzU3ltYm9sKHQpKXJldHVybiB0O3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9XCJudW1iZXJcIiksb3JkaW5hcnlUb1ByaW1pdGl2ZShlLHIpfSx0b1Byb3BlcnR5S2V5PWZ1bmN0aW9uKGUpe3ZhciByPXRvUHJpbWl0aXZlKGUsXCJzdHJpbmdcIik7cmV0dXJuIGlzU3ltYm9sKHIpP3I6U3RyaW5nKHIpfSwkZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGYkNT1kZXNjcmlwdG9ycz8kZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoZSxyLHQpe2lmKGFuT2JqZWN0KGUpLHI9dG9Qcm9wZXJ0eUtleShyKSxhbk9iamVjdCh0KSxpZThEb21EZWZpbmUpdHJ5e3JldHVybiAkZGVmaW5lUHJvcGVydHkoZSxyLHQpfWNhdGNoKGUpe31pZihcImdldFwiaW4gdHx8XCJzZXRcImluIHQpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gdCYmKGVbcl09dC52YWx1ZSksZX0sb2JqZWN0RGVmaW5lUHJvcGVydHk9e2Y6ZiQ1fSxjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oZSxyKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6cn19LGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eT1kZXNjcmlwdG9ycz9mdW5jdGlvbihlLHIsdCl7cmV0dXJuIG9iamVjdERlZmluZVByb3BlcnR5LmYoZSxyLGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLHQpKX06ZnVuY3Rpb24oZSxyLHQpe3JldHVybiBlW3JdPXQsZX0sZnVuY3Rpb25Ub1N0cmluZz1GdW5jdGlvbi50b1N0cmluZztpc0NhbGxhYmxlKHNoYXJlZFN0b3JlLmluc3BlY3RTb3VyY2UpfHwoc2hhcmVkU3RvcmUuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGUpfSk7dmFyIGluc3BlY3RTb3VyY2U9c2hhcmVkU3RvcmUuaW5zcGVjdFNvdXJjZSxXZWFrTWFwJDE9Z2xvYmFsJDEuV2Vha01hcCxuYXRpdmVXZWFrTWFwPWlzQ2FsbGFibGUoV2Vha01hcCQxKSYmL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCQxKSksa2V5cyQyPXNoYXJlZChcImtleXNcIiksc2hhcmVkS2V5PWZ1bmN0aW9uKGUpe3JldHVybiBrZXlzJDJbZV18fChrZXlzJDJbZV09dWlkKGUpKX0saGlkZGVuS2V5cyQxPXt9LE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEPVwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIixXZWFrTWFwPWdsb2JhbCQxLldlYWtNYXAsc2V0JDIsZ2V0JDEsaGFzLGVuZm9yY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhcyhlKT9nZXQkMShlKTpzZXQkMihlLHt9KX0sZ2V0dGVyRm9yPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgdDtpZighaXNPYmplY3Qocil8fCh0PWdldCQxKHIpKS50eXBlIT09ZSl0aHJvdyBUeXBlRXJyb3IoXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIHR9fTtpZihuYXRpdmVXZWFrTWFwfHxzaGFyZWRTdG9yZS5zdGF0ZSl7dmFyIHN0b3JlPXNoYXJlZFN0b3JlLnN0YXRlfHwoc2hhcmVkU3RvcmUuc3RhdGU9bmV3IFdlYWtNYXApLHdtZ2V0PXN0b3JlLmdldCx3bWhhcz1zdG9yZS5oYXMsd21zZXQ9c3RvcmUuc2V0O3NldCQyPWZ1bmN0aW9uKGUscil7aWYod21oYXMuY2FsbChzdG9yZSxlKSl0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtyZXR1cm4gci5mYWNhZGU9ZSx3bXNldC5jYWxsKHN0b3JlLGUscikscn0sZ2V0JDE9ZnVuY3Rpb24oZSl7cmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsZSl8fHt9fSxoYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsZSl9fWVsc2V7dmFyIFNUQVRFPXNoYXJlZEtleShcInN0YXRlXCIpO2hpZGRlbktleXMkMVtTVEFURV09ITAsc2V0JDI9ZnVuY3Rpb24oZSxyKXtpZihoYXMkMShlLFNUQVRFKSl0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtyZXR1cm4gci5mYWNhZGU9ZSxjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZSxTVEFURSxyKSxyfSxnZXQkMT1mdW5jdGlvbihlKXtyZXR1cm4gaGFzJDEoZSxTVEFURSk/ZVtTVEFURV06e319LGhhcz1mdW5jdGlvbihlKXtyZXR1cm4gaGFzJDEoZSxTVEFURSl9fXZhciBpbnRlcm5hbFN0YXRlPXtzZXQ6c2V0JDIsZ2V0OmdldCQxLGhhczpoYXMsZW5mb3JjZTplbmZvcmNlLGdldHRlckZvcjpnZXR0ZXJGb3J9LEZ1bmN0aW9uUHJvdG90eXBlJDE9RnVuY3Rpb24ucHJvdG90eXBlLGdldERlc2NyaXB0b3I9ZGVzY3JpcHRvcnMmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsRVhJU1RTPWhhcyQxKEZ1bmN0aW9uUHJvdG90eXBlJDEsXCJuYW1lXCIpLFBST1BFUj1FWElTVFMmJlwic29tZXRoaW5nXCI9PT1mdW5jdGlvbiBzb21ldGhpbmcoKXt9Lm5hbWUsQ09ORklHVVJBQkxFPUVYSVNUUyYmKCFkZXNjcmlwdG9yc3x8ZGVzY3JpcHRvcnMmJmdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUkMSxcIm5hbWVcIikuY29uZmlndXJhYmxlKSxmdW5jdGlvbk5hbWU9e0VYSVNUUzpFWElTVFMsUFJPUEVSOlBST1BFUixDT05GSUdVUkFCTEU6Q09ORklHVVJBQkxFfSxyZWRlZmluZT1jcmVhdGVDb21tb25qc01vZHVsZSgoZnVuY3Rpb24oZSl7dmFyIHI9ZnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRSx0PWludGVybmFsU3RhdGUuZ2V0LGE9aW50ZXJuYWxTdGF0ZS5lbmZvcmNlLGk9U3RyaW5nKFN0cmluZykuc3BsaXQoXCJTdHJpbmdcIik7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQscyxjKXt2YXIgbCx1PSEhYyYmISFjLnVuc2FmZSxwPSEhYyYmISFjLmVudW1lcmFibGUsZD0hIWMmJiEhYy5ub1RhcmdldEdldCxoPWMmJnZvaWQgMCE9PWMubmFtZT9jLm5hbWU6dDtpc0NhbGxhYmxlKHMpJiYoXCJTeW1ib2woXCI9PT1TdHJpbmcoaCkuc2xpY2UoMCw3KSYmKGg9XCJbXCIrU3RyaW5nKGgpLnJlcGxhY2UoL15TeW1ib2xcXCgoW14pXSopXFwpLyxcIiQxXCIpK1wiXVwiKSwoIWhhcyQxKHMsXCJuYW1lXCIpfHxyJiZzLm5hbWUhPT1oKSYmY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHMsXCJuYW1lXCIsaCksKGw9YShzKSkuc291cmNlfHwobC5zb3VyY2U9aS5qb2luKFwic3RyaW5nXCI9PXR5cGVvZiBoP2g6XCJcIikpKSxlIT09Z2xvYmFsJDE/KHU/IWQmJmVbdF0mJihwPSEwKTpkZWxldGUgZVt0XSxwP2VbdF09czpjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZSx0LHMpKTpwP2VbdF09czpzZXRHbG9iYWwodCxzKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uIHRvU3RyaW5nKCl7cmV0dXJuIGlzQ2FsbGFibGUodGhpcykmJnQodGhpcykuc291cmNlfHxpbnNwZWN0U291cmNlKHRoaXMpfSkpfSkpLHRvU3RyaW5nJDE9e30udG9TdHJpbmcsY2xhc3NvZlJhdz1mdW5jdGlvbihlKXtyZXR1cm4gdG9TdHJpbmckMS5jYWxsKGUpLnNsaWNlKDgsLTEpfSxUT19TVFJJTkdfVEFHJDM9d2VsbEtub3duU3ltYm9sKFwidG9TdHJpbmdUYWdcIiksQ09SUkVDVF9BUkdVTUVOVFM9XCJBcmd1bWVudHNcIj09Y2xhc3NvZlJhdyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLHRyeUdldD1mdW5jdGlvbihlLHIpe3RyeXtyZXR1cm4gZVtyXX1jYXRjaChlKXt9fSxjbGFzc29mPXRvU3RyaW5nVGFnU3VwcG9ydD9jbGFzc29mUmF3OmZ1bmN0aW9uKGUpe3ZhciByLHQsYTtyZXR1cm4gdm9pZCAwPT09ZT9cIlVuZGVmaW5lZFwiOm51bGw9PT1lP1wiTnVsbFwiOlwic3RyaW5nXCI9PXR5cGVvZih0PXRyeUdldChyPU9iamVjdChlKSxUT19TVFJJTkdfVEFHJDMpKT90OkNPUlJFQ1RfQVJHVU1FTlRTP2NsYXNzb2ZSYXcocik6XCJPYmplY3RcIj09KGE9Y2xhc3NvZlJhdyhyKSkmJmlzQ2FsbGFibGUoci5jYWxsZWUpP1wiQXJndW1lbnRzXCI6YX0sb2JqZWN0VG9TdHJpbmc9dG9TdHJpbmdUYWdTdXBwb3J0P3t9LnRvU3RyaW5nOmZ1bmN0aW9uIHRvU3RyaW5nKCl7cmV0dXJuXCJbb2JqZWN0IFwiK2NsYXNzb2YodGhpcykrXCJdXCJ9O3RvU3RyaW5nVGFnU3VwcG9ydHx8cmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIsb2JqZWN0VG9TdHJpbmcse3Vuc2FmZTohMH0pO3ZhciAkcHJvcGVydHlJc0VudW1lcmFibGU9e30ucHJvcGVydHlJc0VudW1lcmFibGUsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJDQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixOQVNIT1JOX0JVRz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IkNCYmISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsxOjJ9LDEpLGYkND1OQVNIT1JOX0JVRz9mdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShlKXt2YXIgcj1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IkNCh0aGlzLGUpO3JldHVybiEhciYmci5lbnVtZXJhYmxlfTokcHJvcGVydHlJc0VudW1lcmFibGUsb2JqZWN0UHJvcGVydHlJc0VudW1lcmFibGU9e2Y6ZiQ0fSxzcGxpdD1cIlwiLnNwbGl0LGluZGV4ZWRPYmplY3Q9ZmFpbHMoKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuXCJTdHJpbmdcIj09Y2xhc3NvZlJhdyhlKT9zcGxpdC5jYWxsKGUsXCJcIik6T2JqZWN0KGUpfTpPYmplY3QsdG9JbmRleGVkT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBpbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoZSkpfSwkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZiQzPWRlc2NyaXB0b3JzPyRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscil7aWYoZT10b0luZGV4ZWRPYmplY3QoZSkscj10b1Byb3BlcnR5S2V5KHIpLGllOERvbURlZmluZSl0cnl7cmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKX1jYXRjaChlKXt9aWYoaGFzJDEoZSxyKSlyZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFvYmplY3RQcm9wZXJ0eUlzRW51bWVyYWJsZS5mLmNhbGwoZSxyKSxlW3JdKX0sb2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPXtmOmYkM30sY2VpbD1NYXRoLmNlaWwsZmxvb3IkNz1NYXRoLmZsb29yLHRvSW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP2Zsb29yJDc6Y2VpbCkoZSl9LG1pbiQ2PU1hdGgubWluLHRvTGVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/bWluJDYodG9JbnRlZ2VyKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LG1heCQyPU1hdGgubWF4LG1pbiQ1PU1hdGgubWluLHRvQWJzb2x1dGVJbmRleD1mdW5jdGlvbihlLHIpe3ZhciB0PXRvSW50ZWdlcihlKTtyZXR1cm4gdDwwP21heCQyKHQrciwwKTptaW4kNSh0LHIpfSxjcmVhdGVNZXRob2QkNT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocix0LGEpe3ZhciBpLHM9dG9JbmRleGVkT2JqZWN0KHIpLGM9dG9MZW5ndGgocy5sZW5ndGgpLGw9dG9BYnNvbHV0ZUluZGV4KGEsYyk7aWYoZSYmdCE9dCl7Zm9yKDtjPmw7KWlmKChpPXNbbCsrXSkhPWkpcmV0dXJuITB9ZWxzZSBmb3IoO2M+bDtsKyspaWYoKGV8fGwgaW4gcykmJnNbbF09PT10KXJldHVybiBlfHxsfHwwO3JldHVybiFlJiYtMX19LGFycmF5SW5jbHVkZXM9e2luY2x1ZGVzOmNyZWF0ZU1ldGhvZCQ1KCEwKSxpbmRleE9mOmNyZWF0ZU1ldGhvZCQ1KCExKX0saW5kZXhPZj1hcnJheUluY2x1ZGVzLmluZGV4T2Ysb2JqZWN0S2V5c0ludGVybmFsPWZ1bmN0aW9uKGUscil7dmFyIHQsYT10b0luZGV4ZWRPYmplY3QoZSksaT0wLHM9W107Zm9yKHQgaW4gYSkhaGFzJDEoaGlkZGVuS2V5cyQxLHQpJiZoYXMkMShhLHQpJiZzLnB1c2godCk7Zm9yKDtyLmxlbmd0aD5pOyloYXMkMShhLHQ9cltpKytdKSYmKH5pbmRleE9mKHMsdCl8fHMucHVzaCh0KSk7cmV0dXJuIHN9LGVudW1CdWdLZXlzPVtcImNvbnN0cnVjdG9yXCIsXCJoYXNPd25Qcm9wZXJ0eVwiLFwiaXNQcm90b3R5cGVPZlwiLFwicHJvcGVydHlJc0VudW1lcmFibGVcIixcInRvTG9jYWxlU3RyaW5nXCIsXCJ0b1N0cmluZ1wiLFwidmFsdWVPZlwiXSxoaWRkZW5LZXlzPWVudW1CdWdLZXlzLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpLGYkMj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhlKXtyZXR1cm4gb2JqZWN0S2V5c0ludGVybmFsKGUsaGlkZGVuS2V5cyl9LG9iamVjdEdldE93blByb3BlcnR5TmFtZXM9e2Y6ZiQyfSxmJDE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxvYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHM9e2Y6ZiQxfSxvd25LZXlzPWdldEJ1aWx0SW4oXCJSZWZsZWN0XCIsXCJvd25LZXlzXCIpfHxmdW5jdGlvbiBvd25LZXlzKGUpe3ZhciByPW9iamVjdEdldE93blByb3BlcnR5TmFtZXMuZihhbk9iamVjdChlKSksdD1vYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHMuZjtyZXR1cm4gdD9yLmNvbmNhdCh0KGUpKTpyfSxjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUscil7Zm9yKHZhciB0PW93bktleXMociksYT1vYmplY3REZWZpbmVQcm9wZXJ0eS5mLGk9b2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLmYscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgYz10W3NdO2hhcyQxKGUsYyl8fGEoZSxjLGkocixjKSl9fSxyZXBsYWNlbWVudD0vI3xcXC5wcm90b3R5cGVcXC4vLGlzRm9yY2VkPWZ1bmN0aW9uKGUscil7dmFyIHQ9ZGF0YVtub3JtYWxpemUoZSldO3JldHVybiB0PT1QT0xZRklMTHx8dCE9TkFUSVZFJiYoaXNDYWxsYWJsZShyKT9mYWlscyhyKTohIXIpfSxub3JtYWxpemU9aXNGb3JjZWQubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShyZXBsYWNlbWVudCxcIi5cIikudG9Mb3dlckNhc2UoKX0sZGF0YT1pc0ZvcmNlZC5kYXRhPXt9LE5BVElWRT1pc0ZvcmNlZC5OQVRJVkU9XCJOXCIsUE9MWUZJTEw9aXNGb3JjZWQuUE9MWUZJTEw9XCJQXCIsaXNGb3JjZWRfMT1pc0ZvcmNlZCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IkMz1vYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZixfZXhwb3J0PWZ1bmN0aW9uKGUscil7dmFyIHQsYSxpLHMsYyxsPWUudGFyZ2V0LHU9ZS5nbG9iYWwscD1lLnN0YXQ7aWYodD11P2dsb2JhbCQxOnA/Z2xvYmFsJDFbbF18fHNldEdsb2JhbChsLHt9KTooZ2xvYmFsJDFbbF18fHt9KS5wcm90b3R5cGUpZm9yKGEgaW4gcil7aWYocz1yW2FdLGk9ZS5ub1RhcmdldEdldD8oYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IkMyh0LGEpKSYmYy52YWx1ZTp0W2FdLCFpc0ZvcmNlZF8xKHU/YTpsKyhwP1wiLlwiOlwiI1wiKSthLGUuZm9yY2VkKSYmdm9pZCAwIT09aSl7aWYodHlwZW9mIHM9PXR5cGVvZiBpKWNvbnRpbnVlO2NvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMocyxpKX0oZS5zaGFtfHxpJiZpLnNoYW0pJiZjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocyxcInNoYW1cIiwhMCkscmVkZWZpbmUodCxhLHMsZSl9fSxuYXRpdmVQcm9taXNlQ29uc3RydWN0b3I9Z2xvYmFsJDEuUHJvbWlzZSxyZWRlZmluZUFsbD1mdW5jdGlvbihlLHIsdCl7Zm9yKHZhciBhIGluIHIpcmVkZWZpbmUoZSxhLHJbYV0sdCk7cmV0dXJuIGV9LGFQb3NzaWJsZVByb3RvdHlwZT1mdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXx8aXNDYWxsYWJsZShlKSlyZXR1cm4gZTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIrU3RyaW5nKGUpK1wiIGFzIGEgcHJvdG90eXBlXCIpfSxvYmplY3RTZXRQcm90b3R5cGVPZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fChcIl9fcHJvdG9fX1wiaW57fT9mdW5jdGlvbigpe3ZhciBlLHI9ITEsdD17fTt0cnl7KGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCkuY2FsbCh0LFtdKSxyPXQgaW5zdGFuY2VvZiBBcnJheX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHQsYSl7cmV0dXJuIGFuT2JqZWN0KHQpLGFQb3NzaWJsZVByb3RvdHlwZShhKSxyP2UuY2FsbCh0LGEpOnQuX19wcm90b19fPWEsdH19KCk6dm9pZCAwKSxkZWZpbmVQcm9wZXJ0eSQ1PW9iamVjdERlZmluZVByb3BlcnR5LmYsVE9fU1RSSU5HX1RBRyQyPXdlbGxLbm93blN5bWJvbChcInRvU3RyaW5nVGFnXCIpLHNldFRvU3RyaW5nVGFnPWZ1bmN0aW9uKGUscix0KXtlJiYhaGFzJDEoZT10P2U6ZS5wcm90b3R5cGUsVE9fU1RSSU5HX1RBRyQyKSYmZGVmaW5lUHJvcGVydHkkNShlLFRPX1NUUklOR19UQUckMix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnJ9KX0sU1BFQ0lFUyQ2PXdlbGxLbm93blN5bWJvbChcInNwZWNpZXNcIiksc2V0U3BlY2llcz1mdW5jdGlvbihlKXt2YXIgcj1nZXRCdWlsdEluKGUpLHQ9b2JqZWN0RGVmaW5lUHJvcGVydHkuZjtkZXNjcmlwdG9ycyYmciYmIXJbU1BFQ0lFUyQ2XSYmdChyLFNQRUNJRVMkNix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfSxhbkluc3RhbmNlPWZ1bmN0aW9uKGUscix0KXtpZihlIGluc3RhbmNlb2YgcilyZXR1cm4gZTt0aHJvdyBUeXBlRXJyb3IoXCJJbmNvcnJlY3QgXCIrKHQ/dCtcIiBcIjpcIlwiKStcImludm9jYXRpb25cIil9LGl0ZXJhdG9ycz17fSxJVEVSQVRPUiQ4PXdlbGxLbm93blN5bWJvbChcIml0ZXJhdG9yXCIpLEFycmF5UHJvdG90eXBlJDE9QXJyYXkucHJvdG90eXBlLGlzQXJyYXlJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKGl0ZXJhdG9ycy5BcnJheT09PWV8fEFycmF5UHJvdG90eXBlJDFbSVRFUkFUT1IkOF09PT1lKX0sZnVuY3Rpb25CaW5kQ29udGV4dD1mdW5jdGlvbihlLHIsdCl7aWYoYUNhbGxhYmxlKGUpLHZvaWQgMD09PXIpcmV0dXJuIGU7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHIpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwocix0KX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGEpe3JldHVybiBlLmNhbGwocix0LGEpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHQsYSxpKXtyZXR1cm4gZS5jYWxsKHIsdCxhLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShyLGFyZ3VtZW50cyl9fSxJVEVSQVRPUiQ3PXdlbGxLbm93blN5bWJvbChcIml0ZXJhdG9yXCIpLGdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGdldE1ldGhvZChlLElURVJBVE9SJDcpfHxnZXRNZXRob2QoZSxcIkBAaXRlcmF0b3JcIil8fGl0ZXJhdG9yc1tjbGFzc29mKGUpXX0sZ2V0SXRlcmF0b3I9ZnVuY3Rpb24oZSxyKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPDI/Z2V0SXRlcmF0b3JNZXRob2QoZSk6cjtpZihhQ2FsbGFibGUodCkpcmV0dXJuIGFuT2JqZWN0KHQuY2FsbChlKSk7dGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKStcIiBpcyBub3QgaXRlcmFibGVcIil9LGl0ZXJhdG9yQ2xvc2U9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhLGk7YW5PYmplY3QoZSk7dHJ5e2lmKCEoYT1nZXRNZXRob2QoZSxcInJldHVyblwiKSkpe2lmKFwidGhyb3dcIj09PXIpdGhyb3cgdDtyZXR1cm4gdH1hPWEuY2FsbChlKX1jYXRjaChlKXtpPSEwLGE9ZX1pZihcInRocm93XCI9PT1yKXRocm93IHQ7aWYoaSl0aHJvdyBhO3JldHVybiBhbk9iamVjdChhKSx0fSxSZXN1bHQ9ZnVuY3Rpb24oZSxyKXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD1yfSxpdGVyYXRlPWZ1bmN0aW9uKGUscix0KXt2YXIgYSxpLHMsYyxsLHUscCxkPXQmJnQudGhhdCxoPSEoIXR8fCF0LkFTX0VOVFJJRVMpLHk9ISghdHx8IXQuSVNfSVRFUkFUT1IpLEE9ISghdHx8IXQuSU5URVJSVVBURUQpLGc9ZnVuY3Rpb25CaW5kQ29udGV4dChyLGQsMStoK0EpLHN0b3A9ZnVuY3Rpb24oZSl7cmV0dXJuIGEmJml0ZXJhdG9yQ2xvc2UoYSxcIm5vcm1hbFwiLGUpLG5ldyBSZXN1bHQoITAsZSl9LGNhbGxGbj1mdW5jdGlvbihlKXtyZXR1cm4gaD8oYW5PYmplY3QoZSksQT9nKGVbMF0sZVsxXSxzdG9wKTpnKGVbMF0sZVsxXSkpOkE/ZyhlLHN0b3ApOmcoZSl9O2lmKHkpYT1lO2Vsc2V7aWYoIShpPWdldEl0ZXJhdG9yTWV0aG9kKGUpKSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGUpK1wiIGlzIG5vdCBpdGVyYWJsZVwiKTtpZihpc0FycmF5SXRlcmF0b3JNZXRob2QoaSkpe2ZvcihzPTAsYz10b0xlbmd0aChlLmxlbmd0aCk7Yz5zO3MrKylpZigobD1jYWxsRm4oZVtzXSkpJiZsIGluc3RhbmNlb2YgUmVzdWx0KXJldHVybiBsO3JldHVybiBuZXcgUmVzdWx0KCExKX1hPWdldEl0ZXJhdG9yKGUsaSl9Zm9yKHU9YS5uZXh0OyEocD11LmNhbGwoYSkpLmRvbmU7KXt0cnl7bD1jYWxsRm4ocC52YWx1ZSl9Y2F0Y2goZSl7aXRlcmF0b3JDbG9zZShhLFwidGhyb3dcIixlKX1pZihcIm9iamVjdFwiPT10eXBlb2YgbCYmbCYmbCBpbnN0YW5jZW9mIFJlc3VsdClyZXR1cm4gbH1yZXR1cm4gbmV3IFJlc3VsdCghMSl9LElURVJBVE9SJDY9d2VsbEtub3duU3ltYm9sKFwiaXRlcmF0b3JcIiksU0FGRV9DTE9TSU5HPSExO3RyeXt2YXIgY2FsbGVkPTAsaXRlcmF0b3JXaXRoUmV0dXJuPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFjYWxsZWQrK319LHJldHVybjpmdW5jdGlvbigpe1NBRkVfQ0xPU0lORz0hMH19O2l0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUiQ2XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKGUpe312YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uPWZ1bmN0aW9uKGUscil7aWYoIXImJiFTQUZFX0NMT1NJTkcpcmV0dXJuITE7dmFyIHQ9ITE7dHJ5e3ZhciBhPXt9O2FbSVRFUkFUT1IkNl09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOnQ9ITB9fX19LGUoYSl9Y2F0Y2goZSl7fXJldHVybiB0fSxlbXB0eT1bXSxjb25zdHJ1Y3Q9Z2V0QnVpbHRJbihcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSxjb25zdHJ1Y3RvclJlZ0V4cD0vXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvLGV4ZWM9Y29uc3RydWN0b3JSZWdFeHAuZXhlYyxJTkNPUlJFQ1RfVE9fU1RSSU5HPSFjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKChmdW5jdGlvbigpe30pKSxpc0NvbnN0cnVjdG9yTW9kZXJuPWZ1bmN0aW9uKGUpe2lmKCFpc0NhbGxhYmxlKGUpKXJldHVybiExO3RyeXtyZXR1cm4gY29uc3RydWN0KE9iamVjdCxlbXB0eSxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LGlzQ29uc3RydWN0b3JMZWdhY3k9ZnVuY3Rpb24oZSl7aWYoIWlzQ2FsbGFibGUoZSkpcmV0dXJuITE7c3dpdGNoKGNsYXNzb2YoZSkpe2Nhc2VcIkFzeW5jRnVuY3Rpb25cIjpjYXNlXCJHZW5lcmF0b3JGdW5jdGlvblwiOmNhc2VcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIjpyZXR1cm4hMX1yZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklOR3x8ISFleGVjLmNhbGwoY29uc3RydWN0b3JSZWdFeHAsaW5zcGVjdFNvdXJjZShlKSl9LGlzQ29uc3RydWN0b3I9IWNvbnN0cnVjdHx8ZmFpbHMoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKXx8IWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KXx8IWlzQ29uc3RydWN0b3JNb2Rlcm4oKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT9pc0NvbnN0cnVjdG9yTGVnYWN5OmlzQ29uc3RydWN0b3JNb2Rlcm4sYUNvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe2lmKGlzQ29uc3RydWN0b3IoZSkpcmV0dXJuIGU7dGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGUpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpfSxTUEVDSUVTJDU9d2VsbEtub3duU3ltYm9sKFwic3BlY2llc1wiKSxzcGVjaWVzQ29uc3RydWN0b3I9ZnVuY3Rpb24oZSxyKXt2YXIgdCxhPWFuT2JqZWN0KGUpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHxudWxsPT0odD1hbk9iamVjdChhKVtTUEVDSUVTJDVdKT9yOmFDb25zdHJ1Y3Rvcih0KX0saHRtbD1nZXRCdWlsdEluKFwiZG9jdW1lbnRcIixcImRvY3VtZW50RWxlbWVudFwiKSxlbmdpbmVJc0lvcz0vKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdChlbmdpbmVVc2VyQWdlbnQpLGVuZ2luZUlzTm9kZT1cInByb2Nlc3NcIj09Y2xhc3NvZlJhdyhnbG9iYWwkMS5wcm9jZXNzKSxzZXQkMT1nbG9iYWwkMS5zZXRJbW1lZGlhdGUsY2xlYXI9Z2xvYmFsJDEuY2xlYXJJbW1lZGlhdGUscHJvY2VzcyQyPWdsb2JhbCQxLnByb2Nlc3MsTWVzc2FnZUNoYW5uZWw9Z2xvYmFsJDEuTWVzc2FnZUNoYW5uZWwsRGlzcGF0Y2g9Z2xvYmFsJDEuRGlzcGF0Y2gsY291bnRlcj0wLHF1ZXVlPXt9LE9OUkVBRFlTVEFURUNIQU5HRT1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLGxvY2F0aW9uLGRlZmVyLGNoYW5uZWwscG9ydDt0cnl7bG9jYXRpb249Z2xvYmFsJDEubG9jYXRpb259Y2F0Y2goZSl7fXZhciBydW49ZnVuY3Rpb24oZSl7aWYocXVldWUuaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPXF1ZXVlW2VdO2RlbGV0ZSBxdWV1ZVtlXSxyKCl9fSxydW5uZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cnVuKGUpfX0sbGlzdGVuZXI9ZnVuY3Rpb24oZSl7cnVuKGUuZGF0YSl9LHBvc3Q9ZnVuY3Rpb24oZSl7Z2xvYmFsJDEucG9zdE1lc3NhZ2UoU3RyaW5nKGUpLGxvY2F0aW9uLnByb3RvY29sK1wiLy9cIitsb2NhdGlvbi5ob3N0KX07c2V0JDEmJmNsZWFyfHwoc2V0JDE9ZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGUpe2Zvcih2YXIgcj1bXSx0PWFyZ3VtZW50cy5sZW5ndGgsYT0xO3Q+YTspci5wdXNoKGFyZ3VtZW50c1thKytdKTtyZXR1cm4gcXVldWVbKytjb3VudGVyXT1mdW5jdGlvbigpeyhpc0NhbGxhYmxlKGUpP2U6RnVuY3Rpb24oZSkpLmFwcGx5KHZvaWQgMCxyKX0sZGVmZXIoY291bnRlciksY291bnRlcn0sY2xlYXI9ZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoZSl7ZGVsZXRlIHF1ZXVlW2VdfSxlbmdpbmVJc05vZGU/ZGVmZXI9ZnVuY3Rpb24oZSl7cHJvY2VzcyQyLm5leHRUaWNrKHJ1bm5lcihlKSl9OkRpc3BhdGNoJiZEaXNwYXRjaC5ub3c/ZGVmZXI9ZnVuY3Rpb24oZSl7RGlzcGF0Y2gubm93KHJ1bm5lcihlKSl9Ok1lc3NhZ2VDaGFubmVsJiYhZW5naW5lSXNJb3M/KGNoYW5uZWw9bmV3IE1lc3NhZ2VDaGFubmVsLHBvcnQ9Y2hhbm5lbC5wb3J0MixjaGFubmVsLnBvcnQxLm9ubWVzc2FnZT1saXN0ZW5lcixkZWZlcj1mdW5jdGlvbkJpbmRDb250ZXh0KHBvcnQucG9zdE1lc3NhZ2UscG9ydCwxKSk6Z2xvYmFsJDEuYWRkRXZlbnRMaXN0ZW5lciYmaXNDYWxsYWJsZShnbG9iYWwkMS5wb3N0TWVzc2FnZSkmJiFnbG9iYWwkMS5pbXBvcnRTY3JpcHRzJiZsb2NhdGlvbiYmXCJmaWxlOlwiIT09bG9jYXRpb24ucHJvdG9jb2wmJiFmYWlscyhwb3N0KT8oZGVmZXI9cG9zdCxnbG9iYWwkMS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGxpc3RlbmVyLCExKSk6ZGVmZXI9T05SRUFEWVNUQVRFQ0hBTkdFIGluIGRvY3VtZW50Q3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT9mdW5jdGlvbihlKXtodG1sLmFwcGVuZENoaWxkKGRvY3VtZW50Q3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSlbT05SRUFEWVNUQVRFQ0hBTkdFXT1mdW5jdGlvbigpe2h0bWwucmVtb3ZlQ2hpbGQodGhpcykscnVuKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChydW5uZXIoZSksMCl9KTt2YXIgdGFzayQxPXtzZXQ6c2V0JDEsY2xlYXI6Y2xlYXJ9LGVuZ2luZUlzSW9zUGViYmxlPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChlbmdpbmVVc2VyQWdlbnQpJiZ2b2lkIDAhPT1nbG9iYWwkMS5QZWJibGUsZW5naW5lSXNXZWJvc1dlYmtpdD0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KGVuZ2luZVVzZXJBZ2VudCksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJDI9b2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLmYsbWFjcm90YXNrPXRhc2skMS5zZXQsTXV0YXRpb25PYnNlcnZlcj1nbG9iYWwkMS5NdXRhdGlvbk9ic2VydmVyfHxnbG9iYWwkMS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGRvY3VtZW50JDI9Z2xvYmFsJDEuZG9jdW1lbnQscHJvY2VzcyQxPWdsb2JhbCQxLnByb2Nlc3MsUHJvbWlzZSQxPWdsb2JhbCQxLlByb21pc2UscXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yPWdldE93blByb3BlcnR5RGVzY3JpcHRvciQyKGdsb2JhbCQxLFwicXVldWVNaWNyb3Rhc2tcIikscXVldWVNaWNyb3Rhc2s9cXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yJiZxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWUsZmx1c2gsaGVhZCxsYXN0LG5vdGlmeSQxLHRvZ2dsZSxub2RlLHByb21pc2UsdGhlbjtxdWV1ZU1pY3JvdGFza3x8KGZsdXNoPWZ1bmN0aW9uKCl7dmFyIGUscjtmb3IoZW5naW5lSXNOb2RlJiYoZT1wcm9jZXNzJDEuZG9tYWluKSYmZS5leGl0KCk7aGVhZDspe3I9aGVhZC5mbixoZWFkPWhlYWQubmV4dDt0cnl7cigpfWNhdGNoKGUpe3Rocm93IGhlYWQ/bm90aWZ5JDEoKTpsYXN0PXZvaWQgMCxlfX1sYXN0PXZvaWQgMCxlJiZlLmVudGVyKCl9LGVuZ2luZUlzSW9zfHxlbmdpbmVJc05vZGV8fGVuZ2luZUlzV2Vib3NXZWJraXR8fCFNdXRhdGlvbk9ic2VydmVyfHwhZG9jdW1lbnQkMj8hZW5naW5lSXNJb3NQZWJibGUmJlByb21pc2UkMSYmUHJvbWlzZSQxLnJlc29sdmU/KHByb21pc2U9UHJvbWlzZSQxLnJlc29sdmUodm9pZCAwKSxwcm9taXNlLmNvbnN0cnVjdG9yPVByb21pc2UkMSx0aGVuPXByb21pc2UudGhlbixub3RpZnkkMT1mdW5jdGlvbigpe3RoZW4uY2FsbChwcm9taXNlLGZsdXNoKX0pOm5vdGlmeSQxPWVuZ2luZUlzTm9kZT9mdW5jdGlvbigpe3Byb2Nlc3MkMS5uZXh0VGljayhmbHVzaCl9OmZ1bmN0aW9uKCl7bWFjcm90YXNrLmNhbGwoZ2xvYmFsJDEsZmx1c2gpfToodG9nZ2xlPSEwLG5vZGU9ZG9jdW1lbnQkMi5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLHtjaGFyYWN0ZXJEYXRhOiEwfSksbm90aWZ5JDE9ZnVuY3Rpb24oKXtub2RlLmRhdGE9dG9nZ2xlPSF0b2dnbGV9KSk7dmFyIG1pY3JvdGFzaz1xdWV1ZU1pY3JvdGFza3x8ZnVuY3Rpb24oZSl7dmFyIHI9e2ZuOmUsbmV4dDp2b2lkIDB9O2xhc3QmJihsYXN0Lm5leHQ9ciksaGVhZHx8KGhlYWQ9cixub3RpZnkkMSgpKSxsYXN0PXJ9LFByb21pc2VDYXBhYmlsaXR5PWZ1bmN0aW9uKGUpe3ZhciByLHQ7dGhpcy5wcm9taXNlPW5ldyBlKChmdW5jdGlvbihlLGEpe2lmKHZvaWQgMCE9PXJ8fHZvaWQgMCE9PXQpdGhyb3cgVHlwZUVycm9yKFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7cj1lLHQ9YX0pKSx0aGlzLnJlc29sdmU9YUNhbGxhYmxlKHIpLHRoaXMucmVqZWN0PWFDYWxsYWJsZSh0KX0sZj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KGUpfSxuZXdQcm9taXNlQ2FwYWJpbGl0eSQxPXtmOmZ9LHByb21pc2VSZXNvbHZlPWZ1bmN0aW9uKGUscil7aWYoYW5PYmplY3QoZSksaXNPYmplY3QocikmJnIuY29uc3RydWN0b3I9PT1lKXJldHVybiByO3ZhciB0PW5ld1Byb21pc2VDYXBhYmlsaXR5JDEuZihlKTtyZXR1cm4oMCx0LnJlc29sdmUpKHIpLHQucHJvbWlzZX0saG9zdFJlcG9ydEVycm9ycz1mdW5jdGlvbihlLHIpe3ZhciB0PWdsb2JhbCQxLmNvbnNvbGU7dCYmdC5lcnJvciYmKDE9PT1hcmd1bWVudHMubGVuZ3RoP3QuZXJyb3IoZSk6dC5lcnJvcihlLHIpKX0scGVyZm9ybT1mdW5jdGlvbihlKXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOmUoKX19Y2F0Y2goZSl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmV9fX0sZW5naW5lSXNCcm93c2VyPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3csdGFzaz10YXNrJDEuc2V0LFNQRUNJRVMkND13ZWxsS25vd25TeW1ib2woXCJzcGVjaWVzXCIpLFBST01JU0U9XCJQcm9taXNlXCIsZ2V0SW50ZXJuYWxTdGF0ZSQ0PWludGVybmFsU3RhdGUuZ2V0LHNldEludGVybmFsU3RhdGUkNT1pbnRlcm5hbFN0YXRlLnNldCxnZXRJbnRlcm5hbFByb21pc2VTdGF0ZT1pbnRlcm5hbFN0YXRlLmdldHRlckZvcihQUk9NSVNFKSxOYXRpdmVQcm9taXNlUHJvdG90eXBlPW5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciYmbmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSxQcm9taXNlQ29uc3RydWN0b3I9bmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLFByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZT1OYXRpdmVQcm9taXNlUHJvdG90eXBlLFR5cGVFcnJvciQxPWdsb2JhbCQxLlR5cGVFcnJvcixkb2N1bWVudCQxPWdsb2JhbCQxLmRvY3VtZW50LHByb2Nlc3M9Z2xvYmFsJDEucHJvY2VzcyxuZXdQcm9taXNlQ2FwYWJpbGl0eT1uZXdQcm9taXNlQ2FwYWJpbGl0eSQxLmYsbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5PW5ld1Byb21pc2VDYXBhYmlsaXR5LERJU1BBVENIX0VWRU5UPSEhKGRvY3VtZW50JDEmJmRvY3VtZW50JDEuY3JlYXRlRXZlbnQmJmdsb2JhbCQxLmRpc3BhdGNoRXZlbnQpLE5BVElWRV9SRUpFQ1RJT05fRVZFTlQ9aXNDYWxsYWJsZShnbG9iYWwkMS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpLFVOSEFORExFRF9SRUpFQ1RJT049XCJ1bmhhbmRsZWRyZWplY3Rpb25cIixSRUpFQ1RJT05fSEFORExFRD1cInJlamVjdGlvbmhhbmRsZWRcIixQRU5ESU5HPTAsRlVMRklMTEVEPTEsUkVKRUNURUQ9MixIQU5ETEVEPTEsVU5IQU5ETEVEPTIsU1VCQ0xBU1NJTkc9ITEsSW50ZXJuYWwsT3duUHJvbWlzZUNhcGFiaWxpdHksUHJvbWlzZVdyYXBwZXIsbmF0aXZlVGhlbixGT1JDRUQkNj1pc0ZvcmNlZF8xKFBST01JU0UsKGZ1bmN0aW9uKCl7dmFyIGU9aW5zcGVjdFNvdXJjZShQcm9taXNlQ29uc3RydWN0b3IpLHI9ZSE9PVN0cmluZyhQcm9taXNlQ29uc3RydWN0b3IpO2lmKCFyJiY2Nj09PWVuZ2luZVY4VmVyc2lvbilyZXR1cm4hMDtpZihlbmdpbmVWOFZlcnNpb24+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoZSkpcmV0dXJuITE7dmFyIHQ9bmV3IFByb21pc2VDb25zdHJ1Y3RvcigoZnVuY3Rpb24oZSl7ZSgxKX0pKSxGYWtlUHJvbWlzZT1mdW5jdGlvbihlKXtlKChmdW5jdGlvbigpe30pLChmdW5jdGlvbigpe30pKX07cmV0dXJuKHQuY29uc3RydWN0b3I9e30pW1NQRUNJRVMkNF09RmFrZVByb21pc2UsIShTVUJDTEFTU0lORz10LnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSl8fCFyJiZlbmdpbmVJc0Jyb3dzZXImJiFOQVRJVkVfUkVKRUNUSU9OX0VWRU5UfSkpLElOQ09SUkVDVF9JVEVSQVRJT049Rk9SQ0VEJDZ8fCFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oKGZ1bmN0aW9uKGUpe1Byb21pc2VDb25zdHJ1Y3Rvci5hbGwoZSkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfSkpLGlzVGhlbmFibGU9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuISghaXNPYmplY3QoZSl8fCFpc0NhbGxhYmxlKHI9ZS50aGVuKSkmJnJ9LG5vdGlmeT1mdW5jdGlvbihlLHIpe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciB0PWUucmVhY3Rpb25zO21pY3JvdGFzaygoZnVuY3Rpb24oKXtmb3IodmFyIGE9ZS52YWx1ZSxpPWUuc3RhdGU9PUZVTEZJTExFRCxzPTA7dC5sZW5ndGg+czspe3ZhciBjLGwsdSxwPXRbcysrXSxkPWk/cC5vazpwLmZhaWwsaD1wLnJlc29sdmUseT1wLnJlamVjdCxBPXAuZG9tYWluO3RyeXtkPyhpfHwoZS5yZWplY3Rpb249PT1VTkhBTkRMRUQmJm9uSGFuZGxlVW5oYW5kbGVkKGUpLGUucmVqZWN0aW9uPUhBTkRMRUQpLCEwPT09ZD9jPWE6KEEmJkEuZW50ZXIoKSxjPWQoYSksQSYmKEEuZXhpdCgpLHU9ITApKSxjPT09cC5wcm9taXNlP3koVHlwZUVycm9yJDEoXCJQcm9taXNlLWNoYWluIGN5Y2xlXCIpKToobD1pc1RoZW5hYmxlKGMpKT9sLmNhbGwoYyxoLHkpOmgoYykpOnkoYSl9Y2F0Y2goZSl7QSYmIXUmJkEuZXhpdCgpLHkoZSl9fWUucmVhY3Rpb25zPVtdLGUubm90aWZpZWQ9ITEsciYmIWUucmVqZWN0aW9uJiZvblVuaGFuZGxlZChlKX0pKX19LGRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhLGk7RElTUEFUQ0hfRVZFTlQ/KChhPWRvY3VtZW50JDEuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSkucHJvbWlzZT1yLGEucmVhc29uPXQsYS5pbml0RXZlbnQoZSwhMSwhMCksZ2xvYmFsJDEuZGlzcGF0Y2hFdmVudChhKSk6YT17cHJvbWlzZTpyLHJlYXNvbjp0fSwhTkFUSVZFX1JFSkVDVElPTl9FVkVOVCYmKGk9Z2xvYmFsJDFbXCJvblwiK2VdKT9pKGEpOmU9PT1VTkhBTkRMRURfUkVKRUNUSU9OJiZob3N0UmVwb3J0RXJyb3JzKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsdCl9LG9uVW5oYW5kbGVkPWZ1bmN0aW9uKGUpe3Rhc2suY2FsbChnbG9iYWwkMSwoZnVuY3Rpb24oKXt2YXIgcix0PWUuZmFjYWRlLGE9ZS52YWx1ZTtpZihpc1VuaGFuZGxlZChlKSYmKHI9cGVyZm9ybSgoZnVuY3Rpb24oKXtlbmdpbmVJc05vZGU/cHJvY2Vzcy5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsYSx0KTpkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sdCxhKX0pKSxlLnJlamVjdGlvbj1lbmdpbmVJc05vZGV8fGlzVW5oYW5kbGVkKGUpP1VOSEFORExFRDpIQU5ETEVELHIuZXJyb3IpKXRocm93IHIudmFsdWV9KSl9LGlzVW5oYW5kbGVkPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlamVjdGlvbiE9PUhBTkRMRUQmJiFlLnBhcmVudH0sb25IYW5kbGVVbmhhbmRsZWQ9ZnVuY3Rpb24oZSl7dGFzay5jYWxsKGdsb2JhbCQxLChmdW5jdGlvbigpe3ZhciByPWUuZmFjYWRlO2VuZ2luZUlzTm9kZT9wcm9jZXNzLmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIscik6ZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCxyLGUudmFsdWUpfSkpfSxiaW5kPWZ1bmN0aW9uKGUscix0KXtyZXR1cm4gZnVuY3Rpb24oYSl7ZShyLGEsdCl9fSxpbnRlcm5hbFJlamVjdD1mdW5jdGlvbihlLHIsdCl7ZS5kb25lfHwoZS5kb25lPSEwLHQmJihlPXQpLGUudmFsdWU9cixlLnN0YXRlPVJFSkVDVEVELG5vdGlmeShlLCEwKSl9LGludGVybmFsUmVzb2x2ZT1mdW5jdGlvbihlLHIsdCl7aWYoIWUuZG9uZSl7ZS5kb25lPSEwLHQmJihlPXQpO3RyeXtpZihlLmZhY2FkZT09PXIpdGhyb3cgVHlwZUVycm9yJDEoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTt2YXIgYT1pc1RoZW5hYmxlKHIpO2E/bWljcm90YXNrKChmdW5jdGlvbigpe3ZhciB0PXtkb25lOiExfTt0cnl7YS5jYWxsKHIsYmluZChpbnRlcm5hbFJlc29sdmUsdCxlKSxiaW5kKGludGVybmFsUmVqZWN0LHQsZSkpfWNhdGNoKHIpe2ludGVybmFsUmVqZWN0KHQscixlKX19KSk6KGUudmFsdWU9cixlLnN0YXRlPUZVTEZJTExFRCxub3RpZnkoZSwhMSkpfWNhdGNoKHIpe2ludGVybmFsUmVqZWN0KHtkb25lOiExfSxyLGUpfX19O2lmKEZPUkNFRCQ2JiYoUHJvbWlzZUNvbnN0cnVjdG9yPWZ1bmN0aW9uIFByb21pc2UoZSl7YW5JbnN0YW5jZSh0aGlzLFByb21pc2VDb25zdHJ1Y3RvcixQUk9NSVNFKSxhQ2FsbGFibGUoZSksSW50ZXJuYWwuY2FsbCh0aGlzKTt2YXIgcj1nZXRJbnRlcm5hbFN0YXRlJDQodGhpcyk7dHJ5e2UoYmluZChpbnRlcm5hbFJlc29sdmUsciksYmluZChpbnRlcm5hbFJlamVjdCxyKSl9Y2F0Y2goZSl7aW50ZXJuYWxSZWplY3QocixlKX19LFByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZT1Qcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlLEludGVybmFsPWZ1bmN0aW9uIFByb21pc2UoZSl7c2V0SW50ZXJuYWxTdGF0ZSQ1KHRoaXMse3R5cGU6UFJPTUlTRSxkb25lOiExLG5vdGlmaWVkOiExLHBhcmVudDohMSxyZWFjdGlvbnM6W10scmVqZWN0aW9uOiExLHN0YXRlOlBFTkRJTkcsdmFsdWU6dm9pZCAwfSl9LEludGVybmFsLnByb3RvdHlwZT1yZWRlZmluZUFsbChQcm9taXNlQ29uc3RydWN0b3JQcm90b3R5cGUse3RoZW46ZnVuY3Rpb24gdGhlbihlLHIpe3ZhciB0PWdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpLGE9bmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsUHJvbWlzZUNvbnN0cnVjdG9yKSk7cmV0dXJuIGEub2s9IWlzQ2FsbGFibGUoZSl8fGUsYS5mYWlsPWlzQ2FsbGFibGUocikmJnIsYS5kb21haW49ZW5naW5lSXNOb2RlP3Byb2Nlc3MuZG9tYWluOnZvaWQgMCx0LnBhcmVudD0hMCx0LnJlYWN0aW9ucy5wdXNoKGEpLHQuc3RhdGUhPVBFTkRJTkcmJm5vdGlmeSh0LCExKSxhLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfX0pLE93blByb21pc2VDYXBhYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IEludGVybmFsLHI9Z2V0SW50ZXJuYWxTdGF0ZSQ0KGUpO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1iaW5kKGludGVybmFsUmVzb2x2ZSxyKSx0aGlzLnJlamVjdD1iaW5kKGludGVybmFsUmVqZWN0LHIpfSxuZXdQcm9taXNlQ2FwYWJpbGl0eSQxLmY9bmV3UHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1Qcm9taXNlQ29uc3RydWN0b3J8fGU9PT1Qcm9taXNlV3JhcHBlcj9uZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoZSk6bmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KGUpfSxpc0NhbGxhYmxlKG5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikmJk5hdGl2ZVByb21pc2VQcm90b3R5cGUhPT1PYmplY3QucHJvdG90eXBlKSl7bmF0aXZlVGhlbj1OYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW4sU1VCQ0xBU1NJTkd8fChyZWRlZmluZShOYXRpdmVQcm9taXNlUHJvdG90eXBlLFwidGhlblwiLChmdW5jdGlvbiB0aGVuKGUscil7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcigoZnVuY3Rpb24oZSxyKXtuYXRpdmVUaGVuLmNhbGwodCxlLHIpfSkpLnRoZW4oZSxyKX0pLHt1bnNhZmU6ITB9KSxyZWRlZmluZShOYXRpdmVQcm9taXNlUHJvdG90eXBlLFwiY2F0Y2hcIixQcm9taXNlQ29uc3RydWN0b3JQcm90b3R5cGUuY2F0Y2gse3Vuc2FmZTohMH0pKTt0cnl7ZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3J9Y2F0Y2goZSl7fW9iamVjdFNldFByb3RvdHlwZU9mJiZvYmplY3RTZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLFByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZSl9X2V4cG9ydCh7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOkZPUkNFRCQ2fSx7UHJvbWlzZTpQcm9taXNlQ29uc3RydWN0b3J9KSxzZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsUFJPTUlTRSwhMSksc2V0U3BlY2llcyhQUk9NSVNFKSxQcm9taXNlV3JhcHBlcj1nZXRCdWlsdEluKFBST01JU0UpLF9leHBvcnQoe3RhcmdldDpQUk9NSVNFLHN0YXQ6ITAsZm9yY2VkOkZPUkNFRCQ2fSx7cmVqZWN0OmZ1bmN0aW9uIHJlamVjdChlKXt2YXIgcj1uZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtyZXR1cm4gci5yZWplY3QuY2FsbCh2b2lkIDAsZSksci5wcm9taXNlfX0pLF9leHBvcnQoe3RhcmdldDpQUk9NSVNFLHN0YXQ6ITAsZm9yY2VkOkZPUkNFRCQ2fSx7cmVzb2x2ZTpmdW5jdGlvbiByZXNvbHZlKGUpe3JldHVybiBwcm9taXNlUmVzb2x2ZSh0aGlzLGUpfX0pLF9leHBvcnQoe3RhcmdldDpQUk9NSVNFLHN0YXQ6ITAsZm9yY2VkOklOQ09SUkVDVF9JVEVSQVRJT059LHthbGw6ZnVuY3Rpb24gYWxsKGUpe3ZhciByPXRoaXMsdD1uZXdQcm9taXNlQ2FwYWJpbGl0eShyKSxhPXQucmVzb2x2ZSxpPXQucmVqZWN0LHM9cGVyZm9ybSgoZnVuY3Rpb24oKXt2YXIgdD1hQ2FsbGFibGUoci5yZXNvbHZlKSxzPVtdLGM9MCxsPTE7aXRlcmF0ZShlLChmdW5jdGlvbihlKXt2YXIgdT1jKysscD0hMTtzLnB1c2godm9pZCAwKSxsKyssdC5jYWxsKHIsZSkudGhlbigoZnVuY3Rpb24oZSl7cHx8KHA9ITAsc1t1XT1lLC0tbHx8YShzKSl9KSxpKX0pKSwtLWx8fGEocyl9KSk7cmV0dXJuIHMuZXJyb3ImJmkocy52YWx1ZSksdC5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uIHJhY2UoZSl7dmFyIHI9dGhpcyx0PW5ld1Byb21pc2VDYXBhYmlsaXR5KHIpLGE9dC5yZWplY3QsaT1wZXJmb3JtKChmdW5jdGlvbigpe3ZhciBpPWFDYWxsYWJsZShyLnJlc29sdmUpO2l0ZXJhdGUoZSwoZnVuY3Rpb24oZSl7aS5jYWxsKHIsZSkudGhlbih0LnJlc29sdmUsYSl9KSl9KSk7cmV0dXJuIGkuZXJyb3ImJmEoaS52YWx1ZSksdC5wcm9taXNlfX0pO3ZhciBpbmhlcml0SWZSZXF1aXJlZD1mdW5jdGlvbihlLHIsdCl7dmFyIGEsaTtyZXR1cm4gb2JqZWN0U2V0UHJvdG90eXBlT2YmJmlzQ2FsbGFibGUoYT1yLmNvbnN0cnVjdG9yKSYmYSE9PXQmJmlzT2JqZWN0KGk9YS5wcm90b3R5cGUpJiZpIT09dC5wcm90b3R5cGUmJm9iamVjdFNldFByb3RvdHlwZU9mKGUsaSksZX0sb2JqZWN0S2V5cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24ga2V5cyhlKXtyZXR1cm4gb2JqZWN0S2V5c0ludGVybmFsKGUsZW51bUJ1Z0tleXMpfSxvYmplY3REZWZpbmVQcm9wZXJ0aWVzPWRlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoZSxyKXthbk9iamVjdChlKTtmb3IodmFyIHQsYT1vYmplY3RLZXlzKHIpLGk9YS5sZW5ndGgscz0wO2k+czspb2JqZWN0RGVmaW5lUHJvcGVydHkuZihlLHQ9YVtzKytdLHJbdF0pO3JldHVybiBlfSxHVD1cIj5cIixMVD1cIjxcIixQUk9UT1RZUEUkMT1cInByb3RvdHlwZVwiLFNDUklQVD1cInNjcmlwdFwiLElFX1BST1RPJDE9c2hhcmVkS2V5KFwiSUVfUFJPVE9cIiksRW1wdHlDb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe30sc2NyaXB0VGFnPWZ1bmN0aW9uKGUpe3JldHVybiBMVCtTQ1JJUFQrR1QrZStMVCtcIi9cIitTQ1JJUFQrR1R9LE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVg9ZnVuY3Rpb24oZSl7ZS53cml0ZShzY3JpcHRUYWcoXCJcIikpLGUuY2xvc2UoKTt2YXIgcj1lLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIGU9bnVsbCxyfSxOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZSxyPWRvY3VtZW50Q3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSx0PVwiamF2YVwiK1NDUklQVCtcIjpcIjtyZXR1cm4gci5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGh0bWwuYXBwZW5kQ2hpbGQociksci5zcmM9U3RyaW5nKHQpLChlPXIuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoc2NyaXB0VGFnKFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkZ9LGFjdGl2ZVhEb2N1bWVudCxOdWxsUHJvdG9PYmplY3Q9ZnVuY3Rpb24oKXt0cnl7YWN0aXZlWERvY3VtZW50PW5ldyBBY3RpdmVYT2JqZWN0KFwiaHRtbGZpbGVcIil9Y2F0Y2goZSl7fU51bGxQcm90b09iamVjdD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZhY3RpdmVYRG9jdW1lbnQ/TnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOk51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpOk51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTtmb3IodmFyIGU9ZW51bUJ1Z0tleXMubGVuZ3RoO2UtLTspZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEUkMV1bZW51bUJ1Z0tleXNbZV1dO3JldHVybiBOdWxsUHJvdG9PYmplY3QoKX07aGlkZGVuS2V5cyQxW0lFX1BST1RPJDFdPSEwO3ZhciBvYmplY3RDcmVhdGU9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24gY3JlYXRlKGUscil7dmFyIHQ7cmV0dXJuIG51bGwhPT1lPyhFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRSQxXT1hbk9iamVjdChlKSx0PW5ldyBFbXB0eUNvbnN0cnVjdG9yLEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFJDFdPW51bGwsdFtJRV9QUk9UTyQxXT1lKTp0PU51bGxQcm90b09iamVjdCgpLHZvaWQgMD09PXI/dDpvYmplY3REZWZpbmVQcm9wZXJ0aWVzKHQscil9LHRvU3RyaW5nPWZ1bmN0aW9uKGUpe2lmKFwiU3ltYm9sXCI9PT1jbGFzc29mKGUpKXRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nXCIpO3JldHVybiBTdHJpbmcoZSl9LHdoaXRlc3BhY2VzPVwiXFx0XFxuXFx2XFxmXFxyIMKg4ZqA4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXFx1MjAyOFxcdTIwMjlcXHVmZWZmXCIsd2hpdGVzcGFjZT1cIltcIit3aGl0ZXNwYWNlcytcIl1cIixsdHJpbT1SZWdFeHAoXCJeXCIrd2hpdGVzcGFjZSt3aGl0ZXNwYWNlK1wiKlwiKSxydHJpbT1SZWdFeHAod2hpdGVzcGFjZSt3aGl0ZXNwYWNlK1wiKiRcIiksY3JlYXRlTWV0aG9kJDQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciB0PXRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUocikpO3JldHVybiAxJmUmJih0PXQucmVwbGFjZShsdHJpbSxcIlwiKSksMiZlJiYodD10LnJlcGxhY2UocnRyaW0sXCJcIikpLHR9fSxzdHJpbmdUcmltPXtzdGFydDpjcmVhdGVNZXRob2QkNCgxKSxlbmQ6Y3JlYXRlTWV0aG9kJDQoMiksdHJpbTpjcmVhdGVNZXRob2QkNCgzKX0sZ2V0T3duUHJvcGVydHlOYW1lcyQxPW9iamVjdEdldE93blByb3BlcnR5TmFtZXMuZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IkMT1vYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZixkZWZpbmVQcm9wZXJ0eSQ0PW9iamVjdERlZmluZVByb3BlcnR5LmYsdHJpbT1zdHJpbmdUcmltLnRyaW0sTlVNQkVSPVwiTnVtYmVyXCIsTmF0aXZlTnVtYmVyPWdsb2JhbCQxW05VTUJFUl0sTnVtYmVyUHJvdG90eXBlPU5hdGl2ZU51bWJlci5wcm90b3R5cGUsQlJPS0VOX0NMQVNTT0Y9Y2xhc3NvZlJhdyhvYmplY3RDcmVhdGUoTnVtYmVyUHJvdG90eXBlKSk9PU5VTUJFUix0b051bWJlcj1mdW5jdGlvbihlKXtpZihpc1N5bWJvbChlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlclwiKTt2YXIgcix0LGEsaSxzLGMsbCx1LHA9dG9QcmltaXRpdmUoZSxcIm51bWJlclwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgcCYmcC5sZW5ndGg+MilpZig0Mz09PShyPShwPXRyaW0ocCkpLmNoYXJDb2RlQXQoMCkpfHw0NT09PXIpe2lmKDg4PT09KHQ9cC5jaGFyQ29kZUF0KDIpKXx8MTIwPT09dClyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1yKXtzd2l0Y2gocC5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6YT0yLGk9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTphPTgsaT01NTticmVhaztkZWZhdWx0OnJldHVybitwfWZvcihjPShzPXAuc2xpY2UoMikpLmxlbmd0aCxsPTA7bDxjO2wrKylpZigodT1zLmNoYXJDb2RlQXQobCkpPDQ4fHx1PmkpcmV0dXJuIE5hTjtyZXR1cm4gcGFyc2VJbnQocyxhKX1yZXR1cm4rcH07aWYoaXNGb3JjZWRfMShOVU1CRVIsIU5hdGl2ZU51bWJlcihcIiAwbzFcIil8fCFOYXRpdmVOdW1iZXIoXCIwYjFcIil8fE5hdGl2ZU51bWJlcihcIisweDFcIikpKXtmb3IodmFyIE51bWJlcldyYXBwZXI9ZnVuY3Rpb24gTnVtYmVyKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8MT8wOmUsdD10aGlzO3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyV3JhcHBlciYmKEJST0tFTl9DTEFTU09GP2ZhaWxzKChmdW5jdGlvbigpe051bWJlclByb3RvdHlwZS52YWx1ZU9mLmNhbGwodCl9KSk6Y2xhc3NvZlJhdyh0KSE9TlVNQkVSKT9pbmhlcml0SWZSZXF1aXJlZChuZXcgTmF0aXZlTnVtYmVyKHRvTnVtYmVyKHIpKSx0LE51bWJlcldyYXBwZXIpOnRvTnVtYmVyKHIpfSxrZXlzJDE9ZGVzY3JpcHRvcnM/Z2V0T3duUHJvcGVydHlOYW1lcyQxKE5hdGl2ZU51bWJlcik6XCJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcixmcm9tU3RyaW5nLHJhbmdlXCIuc3BsaXQoXCIsXCIpLGokMT0wLGtleSQxO2tleXMkMS5sZW5ndGg+aiQxO2okMSsrKWhhcyQxKE5hdGl2ZU51bWJlcixrZXkkMT1rZXlzJDFbaiQxXSkmJiFoYXMkMShOdW1iZXJXcmFwcGVyLGtleSQxKSYmZGVmaW5lUHJvcGVydHkkNChOdW1iZXJXcmFwcGVyLGtleSQxLGdldE93blByb3BlcnR5RGVzY3JpcHRvciQxKE5hdGl2ZU51bWJlcixrZXkkMSkpO051bWJlcldyYXBwZXIucHJvdG90eXBlPU51bWJlclByb3RvdHlwZSxOdW1iZXJQcm90b3R5cGUuY29uc3RydWN0b3I9TnVtYmVyV3JhcHBlcixyZWRlZmluZShnbG9iYWwkMSxOVU1CRVIsTnVtYmVyV3JhcHBlcil9dmFyIEZVTkNUSU9OX05BTUVfRVhJU1RTPWZ1bmN0aW9uTmFtZS5FWElTVFMsZGVmaW5lUHJvcGVydHkkMz1vYmplY3REZWZpbmVQcm9wZXJ0eS5mLEZ1bmN0aW9uUHJvdG90eXBlPUZ1bmN0aW9uLnByb3RvdHlwZSxGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nPUZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nLG5hbWVSRT0vXlxccypmdW5jdGlvbiAoW14gKF0qKS8sTkFNRSQxPVwibmFtZVwiO2Rlc2NyaXB0b3JzJiYhRlVOQ1RJT05fTkFNRV9FWElTVFMmJmRlZmluZVByb3BlcnR5JDMoRnVuY3Rpb25Qcm90b3R5cGUsTkFNRSQxLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nLmNhbGwodGhpcykubWF0Y2gobmFtZVJFKVsxXX1jYXRjaChlKXtyZXR1cm5cIlwifX19KSxfZXhwb3J0KHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOmdsb2JhbCQxfSk7dmFyICRhc3NpZ249T2JqZWN0LmFzc2lnbixkZWZpbmVQcm9wZXJ0eSQyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvYmplY3RBc3NpZ249ISRhc3NpZ258fGZhaWxzKChmdW5jdGlvbigpe2lmKGRlc2NyaXB0b3JzJiYxIT09JGFzc2lnbih7YjoxfSwkYXNzaWduKGRlZmluZVByb3BlcnR5JDIoe30sXCJhXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7ZGVmaW5lUHJvcGVydHkkMih0aGlzLFwiYlwiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIGU9e30scj17fSx0PVN5bWJvbCgpO3JldHVybiBlW3RdPTcsXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbZV09ZX0pKSw3IT0kYXNzaWduKHt9LGUpW3RdfHxcImFiY2RlZmdoaWprbG1ub3BxcnN0XCIhPW9iamVjdEtleXMoJGFzc2lnbih7fSxyKSkuam9pbihcIlwiKX0pKT9mdW5jdGlvbiBhc3NpZ24oZSxyKXtmb3IodmFyIHQ9dG9PYmplY3QoZSksYT1hcmd1bWVudHMubGVuZ3RoLGk9MSxzPW9iamVjdEdldE93blByb3BlcnR5U3ltYm9scy5mLGM9b2JqZWN0UHJvcGVydHlJc0VudW1lcmFibGUuZjthPmk7KWZvcih2YXIgbCx1PWluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2krK10pLHA9cz9vYmplY3RLZXlzKHUpLmNvbmNhdChzKHUpKTpvYmplY3RLZXlzKHUpLGQ9cC5sZW5ndGgsaD0wO2Q+aDspbD1wW2grK10sZGVzY3JpcHRvcnMmJiFjLmNhbGwodSxsKXx8KHRbbF09dVtsXSk7cmV0dXJuIHR9OiRhc3NpZ247X2V4cG9ydCh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PW9iamVjdEFzc2lnbn0se2Fzc2lnbjpvYmplY3RBc3NpZ259KTt2YXIgcGF0aD1nbG9iYWwkMTtwYXRoLk9iamVjdC5hc3NpZ247dmFyIHJlZ2V4cEZsYWdzPWZ1bmN0aW9uKCl7dmFyIGU9YW5PYmplY3QodGhpcykscj1cIlwiO3JldHVybiBlLmdsb2JhbCYmKHIrPVwiZ1wiKSxlLmlnbm9yZUNhc2UmJihyKz1cImlcIiksZS5tdWx0aWxpbmUmJihyKz1cIm1cIiksZS5kb3RBbGwmJihyKz1cInNcIiksZS51bmljb2RlJiYocis9XCJ1XCIpLGUuc3RpY2t5JiYocis9XCJ5XCIpLHJ9LCRSZWdFeHAkMj1nbG9iYWwkMS5SZWdFeHAsVU5TVVBQT1JURURfWSQyPWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPSRSZWdFeHAkMihcImFcIixcInlcIik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKFwiYWJjZFwiKX0pKSxCUk9LRU5fQ0FSRVQ9ZmFpbHMoKGZ1bmN0aW9uKCl7dmFyIGU9JFJlZ0V4cCQyKFwiXnJcIixcImd5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcInN0clwiKX0pKSxyZWdleHBTdGlja3lIZWxwZXJzPXtVTlNVUFBPUlRFRF9ZOlVOU1VQUE9SVEVEX1kkMixCUk9LRU5fQ0FSRVQ6QlJPS0VOX0NBUkVUfSwkUmVnRXhwJDE9Z2xvYmFsJDEuUmVnRXhwLHJlZ2V4cFVuc3VwcG9ydGVkRG90QWxsPWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPSRSZWdFeHAkMShcIi5cIixcInNcIik7cmV0dXJuIShlLmRvdEFsbCYmZS5leGVjKFwiXFxuXCIpJiZcInNcIj09PWUuZmxhZ3MpfSkpLCRSZWdFeHA9Z2xvYmFsJDEuUmVnRXhwLHJlZ2V4cFVuc3VwcG9ydGVkTmNnPWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPSRSZWdFeHAoXCIoPzxhPmIpXCIsXCJnXCIpO3JldHVyblwiYlwiIT09ZS5leGVjKFwiYlwiKS5ncm91cHMuYXx8XCJiY1wiIT09XCJiXCIucmVwbGFjZShlLFwiJDxhPmNcIil9KSksZ2V0SW50ZXJuYWxTdGF0ZSQzPWludGVybmFsU3RhdGUuZ2V0LG5hdGl2ZUV4ZWM9UmVnRXhwLnByb3RvdHlwZS5leGVjLG5hdGl2ZVJlcGxhY2U9c2hhcmVkKFwibmF0aXZlLXN0cmluZy1yZXBsYWNlXCIsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxwYXRjaGVkRXhlYz1uYXRpdmVFeGVjLFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORz0ocmUxPS9hLyxyZTI9L2IqL2csbmF0aXZlRXhlYy5jYWxsKHJlMSxcImFcIiksbmF0aXZlRXhlYy5jYWxsKHJlMixcImFcIiksMCE9PXJlMS5sYXN0SW5kZXh8fDAhPT1yZTIubGFzdEluZGV4KSxyZTEscmUyLFVOU1VQUE9SVEVEX1kkMT1yZWdleHBTdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1l8fHJlZ2V4cFN0aWNreUhlbHBlcnMuQlJPS0VOX0NBUkVULE5QQ0dfSU5DTFVERUQ9dm9pZCAwIT09LygpPz8vLmV4ZWMoXCJcIilbMV0sUEFUQ0g9VVBEQVRFU19MQVNUX0lOREVYX1dST05HfHxOUENHX0lOQ0xVREVEfHxVTlNVUFBPUlRFRF9ZJDF8fHJlZ2V4cFVuc3VwcG9ydGVkRG90QWxsfHxyZWdleHBVbnN1cHBvcnRlZE5jZztQQVRDSCYmKHBhdGNoZWRFeGVjPWZ1bmN0aW9uIGV4ZWMoZSl7dmFyIHIsdCxhLGkscyxjLGwsdT10aGlzLHA9Z2V0SW50ZXJuYWxTdGF0ZSQzKHUpLGQ9dG9TdHJpbmcoZSksaD1wLnJhdztpZihoKXJldHVybiBoLmxhc3RJbmRleD11Lmxhc3RJbmRleCxyPXBhdGNoZWRFeGVjLmNhbGwoaCxkKSx1Lmxhc3RJbmRleD1oLmxhc3RJbmRleCxyO3ZhciB5PXAuZ3JvdXBzLEE9VU5TVVBQT1JURURfWSQxJiZ1LnN0aWNreSxnPXJlZ2V4cEZsYWdzLmNhbGwodSksdj11LnNvdXJjZSxFPTAsbT1kO2lmKEEmJigtMT09PShnPWcucmVwbGFjZShcInlcIixcIlwiKSkuaW5kZXhPZihcImdcIikmJihnKz1cImdcIiksbT1kLnNsaWNlKHUubGFzdEluZGV4KSx1Lmxhc3RJbmRleD4wJiYoIXUubXVsdGlsaW5lfHx1Lm11bHRpbGluZSYmXCJcXG5cIiE9PWQuY2hhckF0KHUubGFzdEluZGV4LTEpKSYmKHY9XCIoPzogXCIrditcIilcIixtPVwiIFwiK20sRSsrKSx0PW5ldyBSZWdFeHAoXCJeKD86XCIrditcIilcIixnKSksTlBDR19JTkNMVURFRCYmKHQ9bmV3IFJlZ0V4cChcIl5cIit2K1wiJCg/IVxcXFxzKVwiLGcpKSxVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcmJihhPXUubGFzdEluZGV4KSxpPW5hdGl2ZUV4ZWMuY2FsbChBP3Q6dSxtKSxBP2k/KGkuaW5wdXQ9aS5pbnB1dC5zbGljZShFKSxpWzBdPWlbMF0uc2xpY2UoRSksaS5pbmRleD11Lmxhc3RJbmRleCx1Lmxhc3RJbmRleCs9aVswXS5sZW5ndGgpOnUubGFzdEluZGV4PTA6VVBEQVRFU19MQVNUX0lOREVYX1dST05HJiZpJiYodS5sYXN0SW5kZXg9dS5nbG9iYWw/aS5pbmRleCtpWzBdLmxlbmd0aDphKSxOUENHX0lOQ0xVREVEJiZpJiZpLmxlbmd0aD4xJiZuYXRpdmVSZXBsYWNlLmNhbGwoaVswXSx0LChmdW5jdGlvbigpe2ZvcihzPTE7czxhcmd1bWVudHMubGVuZ3RoLTI7cysrKXZvaWQgMD09PWFyZ3VtZW50c1tzXSYmKGlbc109dm9pZCAwKX0pKSxpJiZ5KWZvcihpLmdyb3Vwcz1jPW9iamVjdENyZWF0ZShudWxsKSxzPTA7czx5Lmxlbmd0aDtzKyspY1sobD15W3NdKVswXV09aVtsWzFdXTtyZXR1cm4gaX0pO3ZhciByZWdleHBFeGVjPXBhdGNoZWRFeGVjO19leHBvcnQoe3RhcmdldDpcIlJlZ0V4cFwiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PXJlZ2V4cEV4ZWN9LHtleGVjOnJlZ2V4cEV4ZWN9KTt2YXIgU1BFQ0lFUyQzPXdlbGxLbm93blN5bWJvbChcInNwZWNpZXNcIiksUmVnRXhwUHJvdG90eXBlJDE9UmVnRXhwLnByb3RvdHlwZSxmaXhSZWdleHBXZWxsS25vd25TeW1ib2xMb2dpYz1mdW5jdGlvbihlLHIsdCxhKXt2YXIgaT13ZWxsS25vd25TeW1ib2woZSkscz0hZmFpbHMoKGZ1bmN0aW9uKCl7dmFyIHI9e307cmV0dXJuIHJbaV09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9XCJcIltlXShyKX0pKSxjPXMmJiFmYWlscygoZnVuY3Rpb24oKXt2YXIgcj0hMSx0PS9hLztyZXR1cm5cInNwbGl0XCI9PT1lJiYoKHQ9e30pLmNvbnN0cnVjdG9yPXt9LHQuY29uc3RydWN0b3JbU1BFQ0lFUyQzXT1mdW5jdGlvbigpe3JldHVybiB0fSx0LmZsYWdzPVwiXCIsdFtpXT0vLi9baV0pLHQuZXhlYz1mdW5jdGlvbigpe3JldHVybiByPSEwLG51bGx9LHRbaV0oXCJcIiksIXJ9KSk7aWYoIXN8fCFjfHx0KXt2YXIgbD0vLi9baV0sdT1yKGksXCJcIltlXSwoZnVuY3Rpb24oZSxyLHQsYSxpKXt2YXIgYz1yLmV4ZWM7cmV0dXJuIGM9PT1yZWdleHBFeGVjfHxjPT09UmVnRXhwUHJvdG90eXBlJDEuZXhlYz9zJiYhaT97ZG9uZTohMCx2YWx1ZTpsLmNhbGwocix0LGEpfTp7ZG9uZTohMCx2YWx1ZTplLmNhbGwodCxyLGEpfTp7ZG9uZTohMX19KSk7cmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSxlLHVbMF0pLHJlZGVmaW5lKFJlZ0V4cFByb3RvdHlwZSQxLGksdVsxXSl9YSYmY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZSQxW2ldLFwic2hhbVwiLCEwKX0sTUFUQ0gkMT13ZWxsS25vd25TeW1ib2woXCJtYXRjaFwiKSxpc1JlZ2V4cD1mdW5jdGlvbihlKXt2YXIgcjtyZXR1cm4gaXNPYmplY3QoZSkmJih2b2lkIDAhPT0ocj1lW01BVENIJDFdKT8hIXI6XCJSZWdFeHBcIj09Y2xhc3NvZlJhdyhlKSl9LGNyZWF0ZU1ldGhvZCQzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyLHQpe3ZhciBhLGkscz10b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHIpKSxjPXRvSW50ZWdlcih0KSxsPXMubGVuZ3RoO3JldHVybiBjPDB8fGM+PWw/ZT9cIlwiOnZvaWQgMDooYT1zLmNoYXJDb2RlQXQoYykpPDU1Mjk2fHxhPjU2MzE5fHxjKzE9PT1sfHwoaT1zLmNoYXJDb2RlQXQoYysxKSk8NTYzMjB8fGk+NTczNDM/ZT9zLmNoYXJBdChjKTphOmU/cy5zbGljZShjLGMrMik6aS01NjMyMCsoYS01NTI5Njw8MTApKzY1NTM2fX0sc3RyaW5nTXVsdGlieXRlPXtjb2RlQXQ6Y3JlYXRlTWV0aG9kJDMoITEpLGNoYXJBdDpjcmVhdGVNZXRob2QkMyghMCl9LGNoYXJBdCQxPXN0cmluZ011bHRpYnl0ZS5jaGFyQXQsYWR2YW5jZVN0cmluZ0luZGV4PWZ1bmN0aW9uKGUscix0KXtyZXR1cm4gcisodD9jaGFyQXQkMShlLHIpLmxlbmd0aDoxKX0scmVnZXhwRXhlY0Fic3RyYWN0PWZ1bmN0aW9uKGUscil7dmFyIHQ9ZS5leGVjO2lmKGlzQ2FsbGFibGUodCkpe3ZhciBhPXQuY2FsbChlLHIpO3JldHVybiBudWxsIT09YSYmYW5PYmplY3QoYSksYX1pZihcIlJlZ0V4cFwiPT09Y2xhc3NvZlJhdyhlKSlyZXR1cm4gcmVnZXhwRXhlYy5jYWxsKGUscik7dGhyb3cgVHlwZUVycm9yKFwiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlclwiKX0sVU5TVVBQT1JURURfWT1yZWdleHBTdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1ksYXJyYXlQdXNoPVtdLnB1c2gsbWluJDQ9TWF0aC5taW4sTUFYX1VJTlQzMj00Mjk0OTY3Mjk1LFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQz0hZmFpbHMoKGZ1bmN0aW9uKCl7dmFyIGU9Lyg/OikvLHI9ZS5leGVjO2UuZXhlYz1mdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIHQ9XCJhYlwiLnNwbGl0KGUpO3JldHVybiAyIT09dC5sZW5ndGh8fFwiYVwiIT09dFswXXx8XCJiXCIhPT10WzFdfSkpO2ZpeFJlZ2V4cFdlbGxLbm93blN5bWJvbExvZ2ljKFwic3BsaXRcIiwoZnVuY3Rpb24oZSxyLHQpe3ZhciBhO3JldHVybiBhPVwiY1wiPT1cImFiYmNcIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT1cInRlc3RcIi5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9XCJhYlwiLnNwbGl0KC8oPzphYikqLykubGVuZ3RofHw0IT1cIi5cIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fFwiLlwiLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fFwiXCIuc3BsaXQoLy4/LykubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7dmFyIGE9dG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksaT12b2lkIDA9PT10P01BWF9VSU5UMzI6dD4+PjA7aWYoMD09PWkpcmV0dXJuW107aWYodm9pZCAwPT09ZSlyZXR1cm5bYV07aWYoIWlzUmVnZXhwKGUpKXJldHVybiByLmNhbGwoYSxlLGkpO2Zvcih2YXIgcyxjLGwsdT1bXSxwPShlLmlnbm9yZUNhc2U/XCJpXCI6XCJcIikrKGUubXVsdGlsaW5lP1wibVwiOlwiXCIpKyhlLnVuaWNvZGU/XCJ1XCI6XCJcIikrKGUuc3RpY2t5P1wieVwiOlwiXCIpLGQ9MCxoPW5ldyBSZWdFeHAoZS5zb3VyY2UscCtcImdcIik7KHM9cmVnZXhwRXhlYy5jYWxsKGgsYSkpJiYhKChjPWgubGFzdEluZGV4KT5kJiYodS5wdXNoKGEuc2xpY2UoZCxzLmluZGV4KSkscy5sZW5ndGg+MSYmcy5pbmRleDxhLmxlbmd0aCYmYXJyYXlQdXNoLmFwcGx5KHUscy5zbGljZSgxKSksbD1zWzBdLmxlbmd0aCxkPWMsdS5sZW5ndGg+PWkpKTspaC5sYXN0SW5kZXg9PT1zLmluZGV4JiZoLmxhc3RJbmRleCsrO3JldHVybiBkPT09YS5sZW5ndGg/IWwmJmgudGVzdChcIlwiKXx8dS5wdXNoKFwiXCIpOnUucHVzaChhLnNsaWNlKGQpKSx1Lmxlbmd0aD5pP3Uuc2xpY2UoMCxpKTp1fTpcIjBcIi5zcGxpdCh2b2lkIDAsMCkubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWUmJjA9PT10P1tdOnIuY2FsbCh0aGlzLGUsdCl9OnIsW2Z1bmN0aW9uIHNwbGl0KHIsdCl7dmFyIGk9cmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSxzPW51bGw9PXI/dm9pZCAwOmdldE1ldGhvZChyLGUpO3JldHVybiBzP3MuY2FsbChyLGksdCk6YS5jYWxsKHRvU3RyaW5nKGkpLHIsdCl9LGZ1bmN0aW9uKGUsaSl7dmFyIHM9YW5PYmplY3QodGhpcyksYz10b1N0cmluZyhlKSxsPXQoYSxzLGMsaSxhIT09cik7aWYobC5kb25lKXJldHVybiBsLnZhbHVlO3ZhciB1PXNwZWNpZXNDb25zdHJ1Y3RvcihzLFJlZ0V4cCkscD1zLnVuaWNvZGUsZD0ocy5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpKyhzLm11bHRpbGluZT9cIm1cIjpcIlwiKSsocy51bmljb2RlP1widVwiOlwiXCIpKyhVTlNVUFBPUlRFRF9ZP1wiZ1wiOlwieVwiKSxoPW5ldyB1KFVOU1VQUE9SVEVEX1k/XCJeKD86XCIrcy5zb3VyY2UrXCIpXCI6cyxkKSx5PXZvaWQgMD09PWk/TUFYX1VJTlQzMjppPj4+MDtpZigwPT09eSlyZXR1cm5bXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIG51bGw9PT1yZWdleHBFeGVjQWJzdHJhY3QoaCxjKT9bY106W107Zm9yKHZhciBBPTAsZz0wLHY9W107ZzxjLmxlbmd0aDspe2gubGFzdEluZGV4PVVOU1VQUE9SVEVEX1k/MDpnO3ZhciBFLG09cmVnZXhwRXhlY0Fic3RyYWN0KGgsVU5TVVBQT1JURURfWT9jLnNsaWNlKGcpOmMpO2lmKG51bGw9PT1tfHwoRT1taW4kNCh0b0xlbmd0aChoLmxhc3RJbmRleCsoVU5TVVBQT1JURURfWT9nOjApKSxjLmxlbmd0aCkpPT09QSlnPWFkdmFuY2VTdHJpbmdJbmRleChjLGcscCk7ZWxzZXtpZih2LnB1c2goYy5zbGljZShBLGcpKSx2Lmxlbmd0aD09PXkpcmV0dXJuIHY7Zm9yKHZhciBJPTE7STw9bS5sZW5ndGgtMTtJKyspaWYodi5wdXNoKG1bSV0pLHYubGVuZ3RoPT09eSlyZXR1cm4gdjtnPUE9RX19cmV0dXJuIHYucHVzaChjLnNsaWNlKEEpKSx2fV19KSwhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDLFVOU1VQUE9SVEVEX1kpLGZpeFJlZ2V4cFdlbGxLbm93blN5bWJvbExvZ2ljKFwibWF0Y2hcIiwoZnVuY3Rpb24oZSxyLHQpe3JldHVybltmdW5jdGlvbiBtYXRjaChyKXt2YXIgdD1yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpLGE9bnVsbD09cj92b2lkIDA6Z2V0TWV0aG9kKHIsZSk7cmV0dXJuIGE/YS5jYWxsKHIsdCk6bmV3IFJlZ0V4cChyKVtlXSh0b1N0cmluZyh0KSl9LGZ1bmN0aW9uKGUpe3ZhciBhPWFuT2JqZWN0KHRoaXMpLGk9dG9TdHJpbmcoZSkscz10KHIsYSxpKTtpZihzLmRvbmUpcmV0dXJuIHMudmFsdWU7aWYoIWEuZ2xvYmFsKXJldHVybiByZWdleHBFeGVjQWJzdHJhY3QoYSxpKTt2YXIgYz1hLnVuaWNvZGU7YS5sYXN0SW5kZXg9MDtmb3IodmFyIGwsdT1bXSxwPTA7bnVsbCE9PShsPXJlZ2V4cEV4ZWNBYnN0cmFjdChhLGkpKTspe3ZhciBkPXRvU3RyaW5nKGxbMF0pO3VbcF09ZCxcIlwiPT09ZCYmKGEubGFzdEluZGV4PWFkdmFuY2VTdHJpbmdJbmRleChpLHRvTGVuZ3RoKGEubGFzdEluZGV4KSxjKSkscCsrfXJldHVybiAwPT09cD9udWxsOnV9XX0pKTt2YXIgVU5TQ09QQUJMRVM9d2VsbEtub3duU3ltYm9sKFwidW5zY29wYWJsZXNcIiksQXJyYXlQcm90b3R5cGU9QXJyYXkucHJvdG90eXBlO251bGw9PUFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSYmb2JqZWN0RGVmaW5lUHJvcGVydHkuZihBcnJheVByb3RvdHlwZSxVTlNDT1BBQkxFUyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm9iamVjdENyZWF0ZShudWxsKX0pO3ZhciBhZGRUb1Vuc2NvcGFibGVzPWZ1bmN0aW9uKGUpe0FycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtlXT0hMH0sY29ycmVjdFByb3RvdHlwZUdldHRlcj0hZmFpbHMoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRigpe31yZXR1cm4gRi5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYpIT09Ri5wcm90b3R5cGV9KSksSUVfUFJPVE89c2hhcmVkS2V5KFwiSUVfUFJPVE9cIiksT2JqZWN0UHJvdG90eXBlJDI9T2JqZWN0LnByb3RvdHlwZSxvYmplY3RHZXRQcm90b3R5cGVPZj1jb3JyZWN0UHJvdG90eXBlR2V0dGVyP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXt2YXIgcj10b09iamVjdChlKTtpZihoYXMkMShyLElFX1BST1RPKSlyZXR1cm4gcltJRV9QUk9UT107dmFyIHQ9ci5jb25zdHJ1Y3RvcjtyZXR1cm4gaXNDYWxsYWJsZSh0KSYmciBpbnN0YW5jZW9mIHQ/dC5wcm90b3R5cGU6ciBpbnN0YW5jZW9mIE9iamVjdD9PYmplY3RQcm90b3R5cGUkMjpudWxsfSxJVEVSQVRPUiQ1PXdlbGxLbm93blN5bWJvbChcIml0ZXJhdG9yXCIpLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMkMT0hMSxJdGVyYXRvclByb3RvdHlwZSQyLFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSxhcnJheUl0ZXJhdG9yO1tdLmtleXMmJihhcnJheUl0ZXJhdG9yPVtdLmtleXMoKSxcIm5leHRcImluIGFycmF5SXRlcmF0b3I/KFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZT1vYmplY3RHZXRQcm90b3R5cGVPZihvYmplY3RHZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSksUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlIT09T2JqZWN0LnByb3RvdHlwZSYmKEl0ZXJhdG9yUHJvdG90eXBlJDI9UHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlKSk6QlVHR1lfU0FGQVJJX0lURVJBVE9SUyQxPSEwKTt2YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRT1udWxsPT1JdGVyYXRvclByb3RvdHlwZSQyfHxmYWlscygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gSXRlcmF0b3JQcm90b3R5cGUkMltJVEVSQVRPUiQ1XS5jYWxsKGUpIT09ZX0pKTtORVdfSVRFUkFUT1JfUFJPVE9UWVBFJiYoSXRlcmF0b3JQcm90b3R5cGUkMj17fSksaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZSQyW0lURVJBVE9SJDVdKXx8cmVkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUkMixJVEVSQVRPUiQ1LChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBpdGVyYXRvcnNDb3JlPXtJdGVyYXRvclByb3RvdHlwZTpJdGVyYXRvclByb3RvdHlwZSQyLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6QlVHR1lfU0FGQVJJX0lURVJBVE9SUyQxfSxJdGVyYXRvclByb3RvdHlwZSQxPWl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGUscmV0dXJuVGhpcyQxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3I9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhPXIrXCIgSXRlcmF0b3JcIjtyZXR1cm4gZS5wcm90b3R5cGU9b2JqZWN0Q3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlJDEse25leHQ6Y3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsdCl9KSxzZXRUb1N0cmluZ1RhZyhlLGEsITEpLGl0ZXJhdG9yc1thXT1yZXR1cm5UaGlzJDEsZX0sUFJPUEVSX0ZVTkNUSU9OX05BTUUkMz1mdW5jdGlvbk5hbWUuUFJPUEVSLENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FJDE9ZnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRSxJdGVyYXRvclByb3RvdHlwZT1pdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM9aXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLElURVJBVE9SJDQ9d2VsbEtub3duU3ltYm9sKFwiaXRlcmF0b3JcIiksS0VZUz1cImtleXNcIixWQUxVRVM9XCJ2YWx1ZXNcIixFTlRSSUVTPVwiZW50cmllc1wiLHJldHVyblRoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGVmaW5lSXRlcmF0b3I9ZnVuY3Rpb24oZSxyLHQsYSxpLHMsYyl7Y3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3Rvcih0LHIsYSk7dmFyIGwsdSxwLGdldEl0ZXJhdGlvbk1ldGhvZD1mdW5jdGlvbihlKXtpZihlPT09aSYmZylyZXR1cm4gZztpZighQlVHR1lfU0FGQVJJX0lURVJBVE9SUyYmZSBpbiB5KXJldHVybiB5W2VdO3N3aXRjaChlKXtjYXNlIEtFWVM6cmV0dXJuIGZ1bmN0aW9uIGtleXMoKXtyZXR1cm4gbmV3IHQodGhpcyxlKX07Y2FzZSBWQUxVRVM6cmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpe3JldHVybiBuZXcgdCh0aGlzLGUpfTtjYXNlIEVOVFJJRVM6cmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXtyZXR1cm4gbmV3IHQodGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMpfX0sZD1yK1wiIEl0ZXJhdG9yXCIsaD0hMSx5PWUucHJvdG90eXBlLEE9eVtJVEVSQVRPUiQ0XXx8eVtcIkBAaXRlcmF0b3JcIl18fGkmJnlbaV0sZz0hQlVHR1lfU0FGQVJJX0lURVJBVE9SUyYmQXx8Z2V0SXRlcmF0aW9uTWV0aG9kKGkpLHY9XCJBcnJheVwiPT1yJiZ5LmVudHJpZXN8fEE7aWYodiYmKGw9b2JqZWN0R2V0UHJvdG90eXBlT2Yodi5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmbC5uZXh0JiYob2JqZWN0R2V0UHJvdG90eXBlT2YobCkhPT1JdGVyYXRvclByb3RvdHlwZSYmKG9iamVjdFNldFByb3RvdHlwZU9mP29iamVjdFNldFByb3RvdHlwZU9mKGwsSXRlcmF0b3JQcm90b3R5cGUpOmlzQ2FsbGFibGUobFtJVEVSQVRPUiQ0XSl8fHJlZGVmaW5lKGwsSVRFUkFUT1IkNCxyZXR1cm5UaGlzKSksc2V0VG9TdHJpbmdUYWcobCxkLCEwKSksUFJPUEVSX0ZVTkNUSU9OX05BTUUkMyYmaT09VkFMVUVTJiZBJiZBLm5hbWUhPT1WQUxVRVMmJihDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSQxP2NyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh5LFwibmFtZVwiLFZBTFVFUyk6KGg9ITAsZz1mdW5jdGlvbiB2YWx1ZXMoKXtyZXR1cm4gQS5jYWxsKHRoaXMpfSkpLGkpaWYodT17dmFsdWVzOmdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLGtleXM6cz9nOmdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxlbnRyaWVzOmdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKX0sYylmb3IocCBpbiB1KShCVUdHWV9TQUZBUklfSVRFUkFUT1JTfHxofHwhKHAgaW4geSkpJiZyZWRlZmluZSh5LHAsdVtwXSk7ZWxzZSBfZXhwb3J0KHt0YXJnZXQ6cixwcm90bzohMCxmb3JjZWQ6QlVHR1lfU0FGQVJJX0lURVJBVE9SU3x8aH0sdSk7cmV0dXJuIHlbSVRFUkFUT1IkNF0hPT1nJiZyZWRlZmluZSh5LElURVJBVE9SJDQsZyx7bmFtZTppfSksaXRlcmF0b3JzW3JdPWcsdX0sQVJSQVlfSVRFUkFUT1I9XCJBcnJheSBJdGVyYXRvclwiLHNldEludGVybmFsU3RhdGUkND1pbnRlcm5hbFN0YXRlLnNldCxnZXRJbnRlcm5hbFN0YXRlJDI9aW50ZXJuYWxTdGF0ZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpLGVzX2FycmF5X2l0ZXJhdG9yPWRlZmluZUl0ZXJhdG9yKEFycmF5LFwiQXJyYXlcIiwoZnVuY3Rpb24oZSxyKXtzZXRJbnRlcm5hbFN0YXRlJDQodGhpcyx7dHlwZTpBUlJBWV9JVEVSQVRPUix0YXJnZXQ6dG9JbmRleGVkT2JqZWN0KGUpLGluZGV4OjAsa2luZDpyfSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1nZXRJbnRlcm5hbFN0YXRlJDIodGhpcykscj1lLnRhcmdldCx0PWUua2luZCxhPWUuaW5kZXgrKztyZXR1cm4hcnx8YT49ci5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTpcImtleXNcIj09dD97dmFsdWU6YSxkb25lOiExfTpcInZhbHVlc1wiPT10P3t2YWx1ZTpyW2FdLGRvbmU6ITF9Ont2YWx1ZTpbYSxyW2FdXSxkb25lOiExfX0pLFwidmFsdWVzXCIpO2l0ZXJhdG9ycy5Bcmd1bWVudHM9aXRlcmF0b3JzLkFycmF5LGFkZFRvVW5zY29wYWJsZXMoXCJrZXlzXCIpLGFkZFRvVW5zY29wYWJsZXMoXCJ2YWx1ZXNcIiksYWRkVG9VbnNjb3BhYmxlcyhcImVudHJpZXNcIik7dmFyIGFycmF5QnVmZmVyTmF0aXZlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIERhdGFWaWV3LGRlZmluZVByb3BlcnR5JDE9b2JqZWN0RGVmaW5lUHJvcGVydHkuZixJbnQ4QXJyYXkkMz1nbG9iYWwkMS5JbnQ4QXJyYXksSW50OEFycmF5UHJvdG90eXBlPUludDhBcnJheSQzJiZJbnQ4QXJyYXkkMy5wcm90b3R5cGUsVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsJDEuVWludDhDbGFtcGVkQXJyYXksVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU9VWludDhDbGFtcGVkQXJyYXkmJlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxUeXBlZEFycmF5PUludDhBcnJheSQzJiZvYmplY3RHZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkkMyksVHlwZWRBcnJheVByb3RvdHlwZT1JbnQ4QXJyYXlQcm90b3R5cGUmJm9iamVjdEdldFByb3RvdHlwZU9mKEludDhBcnJheVByb3RvdHlwZSksT2JqZWN0UHJvdG90eXBlJDE9T2JqZWN0LnByb3RvdHlwZSxpc1Byb3RvdHlwZU9mPU9iamVjdFByb3RvdHlwZSQxLmlzUHJvdG90eXBlT2YsVE9fU1RSSU5HX1RBRyQxPXdlbGxLbm93blN5bWJvbChcInRvU3RyaW5nVGFnXCIpLFRZUEVEX0FSUkFZX1RBRz11aWQoXCJUWVBFRF9BUlJBWV9UQUdcIiksVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IkMT11aWQoXCJUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUlwiKSxOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTJDE9YXJyYXlCdWZmZXJOYXRpdmUmJiEhb2JqZWN0U2V0UHJvdG90eXBlT2YmJlwiT3BlcmFcIiE9PWNsYXNzb2YoZ2xvYmFsJDEub3BlcmEpLFRZUEVEX0FSUkFZX1RBR19SRVFJUkVEPSExLE5BTUUsQ29uc3RydWN0b3IsUHJvdG90eXBlLFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0PXtJbnQ4QXJyYXk6MSxVaW50OEFycmF5OjEsVWludDhDbGFtcGVkQXJyYXk6MSxJbnQxNkFycmF5OjIsVWludDE2QXJyYXk6MixJbnQzMkFycmF5OjQsVWludDMyQXJyYXk6NCxGbG9hdDMyQXJyYXk6NCxGbG9hdDY0QXJyYXk6OH0sQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0PXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0saXNWaWV3PWZ1bmN0aW9uIGlzVmlldyhlKXtpZighaXNPYmplY3QoZSkpcmV0dXJuITE7dmFyIHI9Y2xhc3NvZihlKTtyZXR1cm5cIkRhdGFWaWV3XCI9PT1yfHxoYXMkMShUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCxyKXx8aGFzJDEoQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0LHIpfSxpc1R5cGVkQXJyYXk9ZnVuY3Rpb24oZSl7aWYoIWlzT2JqZWN0KGUpKXJldHVybiExO3ZhciByPWNsYXNzb2YoZSk7cmV0dXJuIGhhcyQxKFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0LHIpfHxoYXMkMShCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3Qscil9LGFUeXBlZEFycmF5JG09ZnVuY3Rpb24oZSl7aWYoaXNUeXBlZEFycmF5KGUpKXJldHVybiBlO3Rocm93IFR5cGVFcnJvcihcIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheVwiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciQyPWZ1bmN0aW9uKGUpe2lmKGlzQ2FsbGFibGUoZSkmJighb2JqZWN0U2V0UHJvdG90eXBlT2Z8fGlzUHJvdG90eXBlT2YuY2FsbChUeXBlZEFycmF5LGUpKSlyZXR1cm4gZTt0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoZSkrXCIgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3JcIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Qkbj1mdW5jdGlvbihlLHIsdCl7aWYoZGVzY3JpcHRvcnMpe2lmKHQpZm9yKHZhciBhIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KXt2YXIgaT1nbG9iYWwkMVthXTtpZihpJiZoYXMkMShpLnByb3RvdHlwZSxlKSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW2VdfWNhdGNoKGUpe319VHlwZWRBcnJheVByb3RvdHlwZVtlXSYmIXR8fHJlZGVmaW5lKFR5cGVkQXJyYXlQcm90b3R5cGUsZSx0P3I6TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyQxJiZJbnQ4QXJyYXlQcm90b3R5cGVbZV18fHIpfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZD1mdW5jdGlvbihlLHIsdCl7dmFyIGEsaTtpZihkZXNjcmlwdG9ycyl7aWYob2JqZWN0U2V0UHJvdG90eXBlT2Ype2lmKHQpZm9yKGEgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpaWYoKGk9Z2xvYmFsJDFbYV0pJiZoYXMkMShpLGUpKXRyeXtkZWxldGUgaVtlXX1jYXRjaChlKXt9aWYoVHlwZWRBcnJheVtlXSYmIXQpcmV0dXJuO3RyeXtyZXR1cm4gcmVkZWZpbmUoVHlwZWRBcnJheSxlLHQ/cjpOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTJDEmJlR5cGVkQXJyYXlbZV18fHIpfWNhdGNoKGUpe319Zm9yKGEgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIShpPWdsb2JhbCQxW2FdKXx8aVtlXSYmIXR8fHJlZGVmaW5lKGksZSxyKX19O2ZvcihOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KUNvbnN0cnVjdG9yPWdsb2JhbCQxW05BTUVdLFByb3RvdHlwZT1Db25zdHJ1Y3RvciYmQ29uc3RydWN0b3IucHJvdG90eXBlLFByb3RvdHlwZT9jcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SJDEsQ29uc3RydWN0b3IpOk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MkMT0hMTtmb3IoTkFNRSBpbiBCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QpQ29uc3RydWN0b3I9Z2xvYmFsJDFbTkFNRV0sUHJvdG90eXBlPUNvbnN0cnVjdG9yJiZDb25zdHJ1Y3Rvci5wcm90b3R5cGUsUHJvdG90eXBlJiZjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SJDEsQ29uc3RydWN0b3IpO2lmKCghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyQxfHwhaXNDYWxsYWJsZShUeXBlZEFycmF5KXx8VHlwZWRBcnJheT09PUZ1bmN0aW9uLnByb3RvdHlwZSkmJihUeXBlZEFycmF5PWZ1bmN0aW9uIFR5cGVkQXJyYXkoKXt0aHJvdyBUeXBlRXJyb3IoXCJJbmNvcnJlY3QgaW52b2NhdGlvblwiKX0sTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyQxKSlmb3IoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdClnbG9iYWwkMVtOQU1FXSYmb2JqZWN0U2V0UHJvdG90eXBlT2YoZ2xvYmFsJDFbTkFNRV0sVHlwZWRBcnJheSk7aWYoKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTJDF8fCFUeXBlZEFycmF5UHJvdG90eXBlfHxUeXBlZEFycmF5UHJvdG90eXBlPT09T2JqZWN0UHJvdG90eXBlJDEpJiYoVHlwZWRBcnJheVByb3RvdHlwZT1UeXBlZEFycmF5LnByb3RvdHlwZSxOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTJDEpKWZvcihOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KWdsb2JhbCQxW05BTUVdJiZvYmplY3RTZXRQcm90b3R5cGVPZihnbG9iYWwkMVtOQU1FXS5wcm90b3R5cGUsVHlwZWRBcnJheVByb3RvdHlwZSk7aWYoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyQxJiZvYmplY3RHZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSkhPT1UeXBlZEFycmF5UHJvdG90eXBlJiZvYmplY3RTZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSxUeXBlZEFycmF5UHJvdG90eXBlKSxkZXNjcmlwdG9ycyYmIWhhcyQxKFR5cGVkQXJyYXlQcm90b3R5cGUsVE9fU1RSSU5HX1RBRyQxKSlmb3IoTkFNRSBpbiBUWVBFRF9BUlJBWV9UQUdfUkVRSVJFRD0hMCxkZWZpbmVQcm9wZXJ0eSQxKFR5cGVkQXJyYXlQcm90b3R5cGUsVE9fU1RSSU5HX1RBRyQxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaXNPYmplY3QodGhpcyk/dGhpc1tUWVBFRF9BUlJBWV9UQUddOnZvaWQgMH19KSxUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdClnbG9iYWwkMVtOQU1FXSYmY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbCQxW05BTUVdLFRZUEVEX0FSUkFZX1RBRyxOQU1FKTt2YXIgYXJyYXlCdWZmZXJWaWV3Q29yZT17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTJDEsVFlQRURfQVJSQVlfQ09OU1RSVUNUT1I6VFlQRURfQVJSQVlfQ09OU1RSVUNUT1IkMSxUWVBFRF9BUlJBWV9UQUc6VFlQRURfQVJSQVlfVEFHX1JFUUlSRUQmJlRZUEVEX0FSUkFZX1RBRyxhVHlwZWRBcnJheTphVHlwZWRBcnJheSRtLGFUeXBlZEFycmF5Q29uc3RydWN0b3I6YVR5cGVkQXJyYXlDb25zdHJ1Y3RvciQyLGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRuLGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCxpc1ZpZXc6aXNWaWV3LGlzVHlwZWRBcnJheTppc1R5cGVkQXJyYXksVHlwZWRBcnJheTpUeXBlZEFycmF5LFR5cGVkQXJyYXlQcm90b3R5cGU6VHlwZWRBcnJheVByb3RvdHlwZX0sTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUz1hcnJheUJ1ZmZlclZpZXdDb3JlLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsQXJyYXlCdWZmZXIkMT1nbG9iYWwkMS5BcnJheUJ1ZmZlcixJbnQ4QXJyYXkkMj1nbG9iYWwkMS5JbnQ4QXJyYXksdHlwZWRBcnJheUNvbnN0cnVjdG9yc1JlcXVpcmVXcmFwcGVycz0hTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXU3x8IWZhaWxzKChmdW5jdGlvbigpe0ludDhBcnJheSQyKDEpfSkpfHwhZmFpbHMoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSQyKC0xKX0pKXx8IWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbigoZnVuY3Rpb24oZSl7bmV3IEludDhBcnJheSQyLG5ldyBJbnQ4QXJyYXkkMihudWxsKSxuZXcgSW50OEFycmF5JDIoMS41KSxuZXcgSW50OEFycmF5JDIoZSl9KSwhMCl8fGZhaWxzKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IEludDhBcnJheSQyKG5ldyBBcnJheUJ1ZmZlciQxKDIpLDEsdm9pZCAwKS5sZW5ndGh9KSksdG9JbmRleD1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiAwO3ZhciByPXRvSW50ZWdlcihlKSx0PXRvTGVuZ3RoKHIpO2lmKHIhPT10KXRocm93IFJhbmdlRXJyb3IoXCJXcm9uZyBsZW5ndGggb3IgaW5kZXhcIik7cmV0dXJuIHR9LGFicz1NYXRoLmFicyxwb3ckMT1NYXRoLnBvdyxmbG9vciQ2PU1hdGguZmxvb3IsbG9nPU1hdGgubG9nLExOMj1NYXRoLkxOMixwYWNrPWZ1bmN0aW9uKGUscix0KXt2YXIgYSxpLHMsYz1uZXcgQXJyYXkodCksbD04KnQtci0xLHU9KDE8PGwpLTEscD11Pj4xLGQ9MjM9PT1yP3BvdyQxKDIsLTI0KS1wb3ckMSgyLC03Nyk6MCxoPWU8MHx8MD09PWUmJjEvZTwwPzE6MCx5PTA7Zm9yKChlPWFicyhlKSkhPWV8fGU9PT0xLzA/KGk9ZSE9ZT8xOjAsYT11KTooYT1mbG9vciQ2KGxvZyhlKS9MTjIpLGUqKHM9cG93JDEoMiwtYSkpPDEmJihhLS0scyo9MiksKGUrPWErcD49MT9kL3M6ZCpwb3ckMSgyLDEtcCkpKnM+PTImJihhKysscy89MiksYStwPj11PyhpPTAsYT11KTphK3A+PTE/KGk9KGUqcy0xKSpwb3ckMSgyLHIpLGErPXApOihpPWUqcG93JDEoMixwLTEpKnBvdyQxKDIsciksYT0wKSk7cj49ODtjW3krK109MjU1JmksaS89MjU2LHItPTgpO2ZvcihhPWE8PHJ8aSxsKz1yO2w+MDtjW3krK109MjU1JmEsYS89MjU2LGwtPTgpO3JldHVybiBjWy0teV18PTEyOCpoLGN9LHVucGFjaz1mdW5jdGlvbihlLHIpe3ZhciB0LGE9ZS5sZW5ndGgsaT04KmEtci0xLHM9KDE8PGkpLTEsYz1zPj4xLGw9aS03LHU9YS0xLHA9ZVt1LS1dLGQ9MTI3JnA7Zm9yKHA+Pj03O2w+MDtkPTI1NipkK2VbdV0sdS0tLGwtPTgpO2Zvcih0PWQmKDE8PC1sKS0xLGQ+Pj0tbCxsKz1yO2w+MDt0PTI1Nip0K2VbdV0sdS0tLGwtPTgpO2lmKDA9PT1kKWQ9MS1jO2Vsc2V7aWYoZD09PXMpcmV0dXJuIHQ/TmFOOnA/LTEvMDoxLzA7dCs9cG93JDEoMixyKSxkLT1jfXJldHVybihwPy0xOjEpKnQqcG93JDEoMixkLXIpfSxpZWVlNzU0PXtwYWNrOnBhY2ssdW5wYWNrOnVucGFja30sYXJyYXlGaWxsPWZ1bmN0aW9uIGZpbGwoZSl7Zm9yKHZhciByPXRvT2JqZWN0KHRoaXMpLHQ9dG9MZW5ndGgoci5sZW5ndGgpLGE9YXJndW1lbnRzLmxlbmd0aCxpPXRvQWJzb2x1dGVJbmRleChhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0KSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGM9dm9pZCAwPT09cz90OnRvQWJzb2x1dGVJbmRleChzLHQpO2M+aTspcltpKytdPWU7cmV0dXJuIHJ9LGdldE93blByb3BlcnR5TmFtZXM9b2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcy5mLGRlZmluZVByb3BlcnR5PW9iamVjdERlZmluZVByb3BlcnR5LmYsUFJPUEVSX0ZVTkNUSU9OX05BTUUkMj1mdW5jdGlvbk5hbWUuUFJPUEVSLENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FPWZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEUsZ2V0SW50ZXJuYWxTdGF0ZSQxPWludGVybmFsU3RhdGUuZ2V0LHNldEludGVybmFsU3RhdGUkMz1pbnRlcm5hbFN0YXRlLnNldCxBUlJBWV9CVUZGRVI9XCJBcnJheUJ1ZmZlclwiLERBVEFfVklFVz1cIkRhdGFWaWV3XCIsUFJPVE9UWVBFPVwicHJvdG90eXBlXCIsV1JPTkdfTEVOR1RIPVwiV3JvbmcgbGVuZ3RoXCIsV1JPTkdfSU5ERVg9XCJXcm9uZyBpbmRleFwiLE5hdGl2ZUFycmF5QnVmZmVyPWdsb2JhbCQxW0FSUkFZX0JVRkZFUl0sJEFycmF5QnVmZmVyPU5hdGl2ZUFycmF5QnVmZmVyLCREYXRhVmlldz1nbG9iYWwkMVtEQVRBX1ZJRVddLCREYXRhVmlld1Byb3RvdHlwZT0kRGF0YVZpZXcmJiREYXRhVmlld1tQUk9UT1RZUEVdLE9iamVjdFByb3RvdHlwZT1PYmplY3QucHJvdG90eXBlLFJhbmdlRXJyb3IkMT1nbG9iYWwkMS5SYW5nZUVycm9yLHBhY2tJRUVFNzU0PWllZWU3NTQucGFjayx1bnBhY2tJRUVFNzU0PWllZWU3NTQudW5wYWNrLHBhY2tJbnQ4PWZ1bmN0aW9uKGUpe3JldHVyblsyNTUmZV19LHBhY2tJbnQxNj1mdW5jdGlvbihlKXtyZXR1cm5bMjU1JmUsZT4+OCYyNTVdfSxwYWNrSW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuWzI1NSZlLGU+PjgmMjU1LGU+PjE2JjI1NSxlPj4yNCYyNTVdfSx1bnBhY2tJbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gZVszXTw8MjR8ZVsyXTw8MTZ8ZVsxXTw8OHxlWzBdfSxwYWNrRmxvYXQzMj1mdW5jdGlvbihlKXtyZXR1cm4gcGFja0lFRUU3NTQoZSwyMyw0KX0scGFja0Zsb2F0NjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHBhY2tJRUVFNzU0KGUsNTIsOCl9LGFkZEdldHRlcj1mdW5jdGlvbihlLHIpe2RlZmluZVByb3BlcnR5KGVbUFJPVE9UWVBFXSxyLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSQxKHRoaXMpW3JdfX0pfSxnZXQ9ZnVuY3Rpb24oZSxyLHQsYSl7dmFyIGk9dG9JbmRleCh0KSxzPWdldEludGVybmFsU3RhdGUkMShlKTtpZihpK3I+cy5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IkMShXUk9OR19JTkRFWCk7dmFyIGM9Z2V0SW50ZXJuYWxTdGF0ZSQxKHMuYnVmZmVyKS5ieXRlcyxsPWkrcy5ieXRlT2Zmc2V0LHU9Yy5zbGljZShsLGwrcik7cmV0dXJuIGE/dTp1LnJldmVyc2UoKX0sc2V0PWZ1bmN0aW9uKGUscix0LGEsaSxzKXt2YXIgYz10b0luZGV4KHQpLGw9Z2V0SW50ZXJuYWxTdGF0ZSQxKGUpO2lmKGMrcj5sLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvciQxKFdST05HX0lOREVYKTtmb3IodmFyIHU9Z2V0SW50ZXJuYWxTdGF0ZSQxKGwuYnVmZmVyKS5ieXRlcyxwPWMrbC5ieXRlT2Zmc2V0LGQ9YSgraSksaD0wO2g8cjtoKyspdVtwK2hdPWRbcz9oOnItaC0xXX07aWYoYXJyYXlCdWZmZXJOYXRpdmUpe3ZhciBJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUU9UFJPUEVSX0ZVTkNUSU9OX05BTUUkMiYmTmF0aXZlQXJyYXlCdWZmZXIubmFtZSE9PUFSUkFZX0JVRkZFUjtpZihmYWlscygoZnVuY3Rpb24oKXtOYXRpdmVBcnJheUJ1ZmZlcigxKX0pKSYmZmFpbHMoKGZ1bmN0aW9uKCl7bmV3IE5hdGl2ZUFycmF5QnVmZmVyKC0xKX0pKSYmIWZhaWxzKChmdW5jdGlvbigpe3JldHVybiBuZXcgTmF0aXZlQXJyYXlCdWZmZXIsbmV3IE5hdGl2ZUFycmF5QnVmZmVyKDEuNSksbmV3IE5hdGl2ZUFycmF5QnVmZmVyKE5hTiksSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FJiYhQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUV9KSkpSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FJiZDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSYmY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE5hdGl2ZUFycmF5QnVmZmVyLFwibmFtZVwiLEFSUkFZX0JVRkZFUik7ZWxzZXskQXJyYXlCdWZmZXI9ZnVuY3Rpb24gQXJyYXlCdWZmZXIoZSl7cmV0dXJuIGFuSW5zdGFuY2UodGhpcywkQXJyYXlCdWZmZXIpLG5ldyBOYXRpdmVBcnJheUJ1ZmZlcih0b0luZGV4KGUpKX07Zm9yKHZhciBBcnJheUJ1ZmZlclByb3RvdHlwZT0kQXJyYXlCdWZmZXJbUFJPVE9UWVBFXT1OYXRpdmVBcnJheUJ1ZmZlcltQUk9UT1RZUEVdLGtleXM9Z2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVBcnJheUJ1ZmZlciksaj0wLGtleTtrZXlzLmxlbmd0aD5qOykoa2V5PWtleXNbaisrXSlpbiAkQXJyYXlCdWZmZXJ8fGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSgkQXJyYXlCdWZmZXIsa2V5LE5hdGl2ZUFycmF5QnVmZmVyW2tleV0pO0FycmF5QnVmZmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yPSRBcnJheUJ1ZmZlcn1vYmplY3RTZXRQcm90b3R5cGVPZiYmb2JqZWN0R2V0UHJvdG90eXBlT2YoJERhdGFWaWV3UHJvdG90eXBlKSE9PU9iamVjdFByb3RvdHlwZSYmb2JqZWN0U2V0UHJvdG90eXBlT2YoJERhdGFWaWV3UHJvdG90eXBlLE9iamVjdFByb3RvdHlwZSk7dmFyIHRlc3RWaWV3PW5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSksJHNldEludDg9JERhdGFWaWV3UHJvdG90eXBlLnNldEludDg7dGVzdFZpZXcuc2V0SW50OCgwLDIxNDc0ODM2NDgpLHRlc3RWaWV3LnNldEludDgoMSwyMTQ3NDgzNjQ5KSwhdGVzdFZpZXcuZ2V0SW50OCgwKSYmdGVzdFZpZXcuZ2V0SW50OCgxKXx8cmVkZWZpbmVBbGwoJERhdGFWaWV3UHJvdG90eXBlLHtzZXRJbnQ4OmZ1bmN0aW9uIHNldEludDgoZSxyKXskc2V0SW50OC5jYWxsKHRoaXMsZSxyPDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbiBzZXRVaW50OChlLHIpeyRzZXRJbnQ4LmNhbGwodGhpcyxlLHI8PDI0Pj4yNCl9fSx7dW5zYWZlOiEwfSl9ZWxzZSAkQXJyYXlCdWZmZXI9ZnVuY3Rpb24gQXJyYXlCdWZmZXIoZSl7YW5JbnN0YW5jZSh0aGlzLCRBcnJheUJ1ZmZlcixBUlJBWV9CVUZGRVIpO3ZhciByPXRvSW5kZXgoZSk7c2V0SW50ZXJuYWxTdGF0ZSQzKHRoaXMse2J5dGVzOmFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShyKSwwKSxieXRlTGVuZ3RoOnJ9KSxkZXNjcmlwdG9yc3x8KHRoaXMuYnl0ZUxlbmd0aD1yKX0sJERhdGFWaWV3PWZ1bmN0aW9uIERhdGFWaWV3KGUscix0KXthbkluc3RhbmNlKHRoaXMsJERhdGFWaWV3LERBVEFfVklFVyksYW5JbnN0YW5jZShlLCRBcnJheUJ1ZmZlcixEQVRBX1ZJRVcpO3ZhciBhPWdldEludGVybmFsU3RhdGUkMShlKS5ieXRlTGVuZ3RoLGk9dG9JbnRlZ2VyKHIpO2lmKGk8MHx8aT5hKXRocm93IFJhbmdlRXJyb3IkMShcIldyb25nIG9mZnNldFwiKTtpZihpKyh0PXZvaWQgMD09PXQ/YS1pOnRvTGVuZ3RoKHQpKT5hKXRocm93IFJhbmdlRXJyb3IkMShXUk9OR19MRU5HVEgpO3NldEludGVybmFsU3RhdGUkMyh0aGlzLHtidWZmZXI6ZSxieXRlTGVuZ3RoOnQsYnl0ZU9mZnNldDppfSksZGVzY3JpcHRvcnN8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnl0ZUxlbmd0aD10LHRoaXMuYnl0ZU9mZnNldD1pKX0sZGVzY3JpcHRvcnMmJihhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLFwiYnl0ZUxlbmd0aFwiKSxhZGRHZXR0ZXIoJERhdGFWaWV3LFwiYnVmZmVyXCIpLGFkZEdldHRlcigkRGF0YVZpZXcsXCJieXRlTGVuZ3RoXCIpLGFkZEdldHRlcigkRGF0YVZpZXcsXCJieXRlT2Zmc2V0XCIpKSxyZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSx7Z2V0SW50ODpmdW5jdGlvbiBnZXRJbnQ4KGUpe3JldHVybiBnZXQodGhpcywxLGUpWzBdPDwyND4+MjR9LGdldFVpbnQ4OmZ1bmN0aW9uIGdldFVpbnQ4KGUpe3JldHVybiBnZXQodGhpcywxLGUpWzBdfSxnZXRJbnQxNjpmdW5jdGlvbiBnZXRJbnQxNihlKXt2YXIgcj1nZXQodGhpcywyLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybihyWzFdPDw4fHJbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbiBnZXRVaW50MTYoZSl7dmFyIHI9Z2V0KHRoaXMsMixlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gclsxXTw8OHxyWzBdfSxnZXRJbnQzMjpmdW5jdGlvbiBnZXRJbnQzMihlKXtyZXR1cm4gdW5wYWNrSW50MzIoZ2V0KHRoaXMsNCxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbiBnZXRVaW50MzIoZSl7cmV0dXJuIHVucGFja0ludDMyKGdldCh0aGlzLDQsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbiBnZXRGbG9hdDMyKGUpe3JldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLDQsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksMjMpfSxnZXRGbG9hdDY0OmZ1bmN0aW9uIGdldEZsb2F0NjQoZSl7cmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsOCxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24gc2V0SW50OChlLHIpe3NldCh0aGlzLDEsZSxwYWNrSW50OCxyKX0sc2V0VWludDg6ZnVuY3Rpb24gc2V0VWludDgoZSxyKXtzZXQodGhpcywxLGUscGFja0ludDgscil9LHNldEludDE2OmZ1bmN0aW9uIHNldEludDE2KGUscil7c2V0KHRoaXMsMixlLHBhY2tJbnQxNixyLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uIHNldFVpbnQxNihlLHIpe3NldCh0aGlzLDIsZSxwYWNrSW50MTYscixhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uIHNldEludDMyKGUscil7c2V0KHRoaXMsNCxlLHBhY2tJbnQzMixyLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDMyOmZ1bmN0aW9uIHNldFVpbnQzMihlLHIpe3NldCh0aGlzLDQsZSxwYWNrSW50MzIscixhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0MzI6ZnVuY3Rpb24gc2V0RmxvYXQzMihlLHIpe3NldCh0aGlzLDQsZSxwYWNrRmxvYXQzMixyLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQ2NDpmdW5jdGlvbiBzZXRGbG9hdDY0KGUscil7c2V0KHRoaXMsOCxlLHBhY2tGbG9hdDY0LHIsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfX0pO3NldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlcixBUlJBWV9CVUZGRVIpLHNldFRvU3RyaW5nVGFnKCREYXRhVmlldyxEQVRBX1ZJRVcpO3ZhciBhcnJheUJ1ZmZlcj17QXJyYXlCdWZmZXI6JEFycmF5QnVmZmVyLERhdGFWaWV3OiREYXRhVmlld30sZmxvb3IkNT1NYXRoLmZsb29yLGlzSW50ZWdlcj1mdW5jdGlvbiBpc0ludGVnZXIoZSl7cmV0dXJuIWlzT2JqZWN0KGUpJiZpc0Zpbml0ZShlKSYmZmxvb3IkNShlKT09PWV9LHRvUG9zaXRpdmVJbnRlZ2VyPWZ1bmN0aW9uKGUpe3ZhciByPXRvSW50ZWdlcihlKTtpZihyPDApdGhyb3cgUmFuZ2VFcnJvcihcIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMFwiKTtyZXR1cm4gcn0sdG9PZmZzZXQ9ZnVuY3Rpb24oZSxyKXt2YXIgdD10b1Bvc2l0aXZlSW50ZWdlcihlKTtpZih0JXIpdGhyb3cgUmFuZ2VFcnJvcihcIldyb25nIG9mZnNldFwiKTtyZXR1cm4gdH0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciQxPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcix0eXBlZEFycmF5RnJvbT1mdW5jdGlvbiBmcm9tKGUpe3ZhciByLHQsYSxpLHMsYyxsPWFDb25zdHJ1Y3Rvcih0aGlzKSx1PXRvT2JqZWN0KGUpLHA9YXJndW1lbnRzLmxlbmd0aCxkPXA+MT9hcmd1bWVudHNbMV06dm9pZCAwLGg9dm9pZCAwIT09ZCx5PWdldEl0ZXJhdG9yTWV0aG9kKHUpO2lmKHkmJiFpc0FycmF5SXRlcmF0b3JNZXRob2QoeSkpZm9yKGM9KHM9Z2V0SXRlcmF0b3IodSx5KSkubmV4dCx1PVtdOyEoaT1jLmNhbGwocykpLmRvbmU7KXUucHVzaChpLnZhbHVlKTtmb3IoaCYmcD4yJiYoZD1mdW5jdGlvbkJpbmRDb250ZXh0KGQsYXJndW1lbnRzWzJdLDIpKSx0PXRvTGVuZ3RoKHUubGVuZ3RoKSxhPW5ldyhhVHlwZWRBcnJheUNvbnN0cnVjdG9yJDEobCkpKHQpLHI9MDt0PnI7cisrKWFbcl09aD9kKHVbcl0scik6dVtyXTtyZXR1cm4gYX0saXNBcnJheT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbiBpc0FycmF5KGUpe3JldHVyblwiQXJyYXlcIj09Y2xhc3NvZlJhdyhlKX0sU1BFQ0lFUyQyPXdlbGxLbm93blN5bWJvbChcInNwZWNpZXNcIiksYXJyYXlTcGVjaWVzQ29uc3RydWN0b3I9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIGlzQXJyYXkoZSkmJihyPWUuY29uc3RydWN0b3IsKGlzQ29uc3RydWN0b3IocikmJihyPT09QXJyYXl8fGlzQXJyYXkoci5wcm90b3R5cGUpKXx8aXNPYmplY3QocikmJm51bGw9PT0ocj1yW1NQRUNJRVMkMl0pKSYmKHI9dm9pZCAwKSksdm9pZCAwPT09cj9BcnJheTpyfSxhcnJheVNwZWNpZXNDcmVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3KGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKGUpKSgwPT09cj8wOnIpfSxwdXNoPVtdLnB1c2gsY3JlYXRlTWV0aG9kJDI9ZnVuY3Rpb24oZSl7dmFyIHI9MT09ZSx0PTI9PWUsYT0zPT1lLGk9ND09ZSxzPTY9PWUsYz03PT1lLGw9NT09ZXx8cztyZXR1cm4gZnVuY3Rpb24odSxwLGQsaCl7Zm9yKHZhciB5LEEsZz10b09iamVjdCh1KSx2PWluZGV4ZWRPYmplY3QoZyksRT1mdW5jdGlvbkJpbmRDb250ZXh0KHAsZCwzKSxtPXRvTGVuZ3RoKHYubGVuZ3RoKSxJPTAsUD1ofHxhcnJheVNwZWNpZXNDcmVhdGUsYj1yP1AodSxtKTp0fHxjP1AodSwwKTp2b2lkIDA7bT5JO0krKylpZigobHx8SSBpbiB2KSYmKEE9RSh5PXZbSV0sSSxnKSxlKSlpZihyKWJbSV09QTtlbHNlIGlmKEEpc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIHk7Y2FzZSA2OnJldHVybiBJO2Nhc2UgMjpwdXNoLmNhbGwoYix5KX1lbHNlIHN3aXRjaChlKXtjYXNlIDQ6cmV0dXJuITE7Y2FzZSA3OnB1c2guY2FsbChiLHkpfXJldHVybiBzPy0xOmF8fGk/aTpifX0sYXJyYXlJdGVyYXRpb249e2ZvckVhY2g6Y3JlYXRlTWV0aG9kJDIoMCksbWFwOmNyZWF0ZU1ldGhvZCQyKDEpLGZpbHRlcjpjcmVhdGVNZXRob2QkMigyKSxzb21lOmNyZWF0ZU1ldGhvZCQyKDMpLGV2ZXJ5OmNyZWF0ZU1ldGhvZCQyKDQpLGZpbmQ6Y3JlYXRlTWV0aG9kJDIoNSksZmluZEluZGV4OmNyZWF0ZU1ldGhvZCQyKDYpLGZpbHRlclJlamVjdDpjcmVhdGVNZXRob2QkMig3KX0sdHlwZWRBcnJheUNvbnN0cnVjdG9yPWNyZWF0ZUNvbW1vbmpzTW9kdWxlKChmdW5jdGlvbihlKXt2YXIgcj1vYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzLmYsdD1hcnJheUl0ZXJhdGlvbi5mb3JFYWNoLGE9aW50ZXJuYWxTdGF0ZS5nZXQsaT1pbnRlcm5hbFN0YXRlLnNldCxzPW9iamVjdERlZmluZVByb3BlcnR5LmYsYz1vYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZixsPU1hdGgucm91bmQsdT1nbG9iYWwkMS5SYW5nZUVycm9yLHA9YXJyYXlCdWZmZXIuQXJyYXlCdWZmZXIsZD1hcnJheUJ1ZmZlci5EYXRhVmlldyxoPWFycmF5QnVmZmVyVmlld0NvcmUuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyx5PWFycmF5QnVmZmVyVmlld0NvcmUuVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsQT1hcnJheUJ1ZmZlclZpZXdDb3JlLlRZUEVEX0FSUkFZX1RBRyxnPWFycmF5QnVmZmVyVmlld0NvcmUuVHlwZWRBcnJheSx2PWFycmF5QnVmZmVyVmlld0NvcmUuVHlwZWRBcnJheVByb3RvdHlwZSxFPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixtPWFycmF5QnVmZmVyVmlld0NvcmUuaXNUeXBlZEFycmF5LGZyb21MaXN0PWZ1bmN0aW9uKGUscil7Zm9yKHZhciB0PTAsYT1yLmxlbmd0aCxpPW5ldyhFKGUpKShhKTthPnQ7KWlbdF09clt0KytdO3JldHVybiBpfSxhZGRHZXR0ZXI9ZnVuY3Rpb24oZSxyKXtzKGUscix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcylbcl19fSl9LGlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBwfHxcIkFycmF5QnVmZmVyXCI9PShyPWNsYXNzb2YoZSkpfHxcIlNoYXJlZEFycmF5QnVmZmVyXCI9PXJ9LGlzVHlwZWRBcnJheUluZGV4PWZ1bmN0aW9uKGUscil7cmV0dXJuIG0oZSkmJiFpc1N5bWJvbChyKSYmciBpbiBlJiZpc0ludGVnZXIoK3IpJiZyPj0wfSxJPWZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpe3JldHVybiByPXRvUHJvcGVydHlLZXkociksaXNUeXBlZEFycmF5SW5kZXgoZSxyKT9jcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMixlW3JdKTpjKGUscil9LFA9ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoZSxyLHQpe3JldHVybiByPXRvUHJvcGVydHlLZXkociksIShpc1R5cGVkQXJyYXlJbmRleChlLHIpJiZpc09iamVjdCh0KSYmaGFzJDEodCxcInZhbHVlXCIpKXx8aGFzJDEodCxcImdldFwiKXx8aGFzJDEodCxcInNldFwiKXx8dC5jb25maWd1cmFibGV8fGhhcyQxKHQsXCJ3cml0YWJsZVwiKSYmIXQud3JpdGFibGV8fGhhcyQxKHQsXCJlbnVtZXJhYmxlXCIpJiYhdC5lbnVtZXJhYmxlP3MoZSxyLHQpOihlW3JdPXQudmFsdWUsZSl9O2Rlc2NyaXB0b3JzPyhofHwob2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLmY9SSxvYmplY3REZWZpbmVQcm9wZXJ0eS5mPVAsYWRkR2V0dGVyKHYsXCJidWZmZXJcIiksYWRkR2V0dGVyKHYsXCJieXRlT2Zmc2V0XCIpLGFkZEdldHRlcih2LFwiYnl0ZUxlbmd0aFwiKSxhZGRHZXR0ZXIodixcImxlbmd0aFwiKSksX2V4cG9ydCh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6IWh9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6SSxkZWZpbmVQcm9wZXJ0eTpQfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsYyxFKXt2YXIgST1lLm1hdGNoKC9cXGQrJC8pWzBdLzgsUD1lKyhFP1wiQ2xhbXBlZFwiOlwiXCIpK1wiQXJyYXlcIixiPVwiZ2V0XCIrZSxUPVwic2V0XCIrZSxTPWdsb2JhbCQxW1BdLFI9UyxfPVImJlIucHJvdG90eXBlLFU9e30sYWRkRWxlbWVudD1mdW5jdGlvbihlLHIpe3MoZSxyLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgdD1hKGUpO3JldHVybiB0LnZpZXdbYl0ocipJK3QuYnl0ZU9mZnNldCwhMCl9KHRoaXMscil9LHNldDpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSxyLHQpe3ZhciBpPWEoZSk7RSYmKHQ9KHQ9bCh0KSk8MD8wOnQ+MjU1PzI1NToyNTUmdCksaS52aWV3W1RdKHIqSStpLmJ5dGVPZmZzZXQsdCwhMCl9KHRoaXMscixlKX0sZW51bWVyYWJsZTohMH0pfTtoP3R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNSZXF1aXJlV3JhcHBlcnMmJihSPWMoKGZ1bmN0aW9uKGUscix0LGEpe3JldHVybiBhbkluc3RhbmNlKGUsUixQKSxpbmhlcml0SWZSZXF1aXJlZChpc09iamVjdChyKT9pc0FycmF5QnVmZmVyKHIpP3ZvaWQgMCE9PWE/bmV3IFMocix0b09mZnNldCh0LEkpLGEpOnZvaWQgMCE9PXQ/bmV3IFMocix0b09mZnNldCh0LEkpKTpuZXcgUyhyKTptKHIpP2Zyb21MaXN0KFIscik6dHlwZWRBcnJheUZyb20uY2FsbChSLHIpOm5ldyBTKHRvSW5kZXgocikpLGUsUil9KSksb2JqZWN0U2V0UHJvdG90eXBlT2YmJm9iamVjdFNldFByb3RvdHlwZU9mKFIsZyksdChyKFMpLChmdW5jdGlvbihlKXtlIGluIFJ8fGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSLGUsU1tlXSl9KSksUi5wcm90b3R5cGU9Xyk6KFI9YygoZnVuY3Rpb24oZSxyLHQsYSl7YW5JbnN0YW5jZShlLFIsUCk7dmFyIHMsYyxsLGg9MCx5PTA7aWYoaXNPYmplY3Qocikpe2lmKCFpc0FycmF5QnVmZmVyKHIpKXJldHVybiBtKHIpP2Zyb21MaXN0KFIscik6dHlwZWRBcnJheUZyb20uY2FsbChSLHIpO3M9cix5PXRvT2Zmc2V0KHQsSSk7dmFyIEE9ci5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PWEpe2lmKEElSSl0aHJvdyB1KFwiV3JvbmcgbGVuZ3RoXCIpO2lmKChjPUEteSk8MCl0aHJvdyB1KFwiV3JvbmcgbGVuZ3RoXCIpfWVsc2UgaWYoKGM9dG9MZW5ndGgoYSkqSSkreT5BKXRocm93IHUoXCJXcm9uZyBsZW5ndGhcIik7bD1jL0l9ZWxzZSBsPXRvSW5kZXgocikscz1uZXcgcChjPWwqSSk7Zm9yKGkoZSx7YnVmZmVyOnMsYnl0ZU9mZnNldDp5LGJ5dGVMZW5ndGg6YyxsZW5ndGg6bCx2aWV3Om5ldyBkKHMpfSk7aDxsOylhZGRFbGVtZW50KGUsaCsrKX0pKSxvYmplY3RTZXRQcm90b3R5cGVPZiYmb2JqZWN0U2V0UHJvdG90eXBlT2YoUixnKSxfPVIucHJvdG90eXBlPW9iamVjdENyZWF0ZSh2KSksXy5jb25zdHJ1Y3RvciE9PVImJmNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShfLFwiY29uc3RydWN0b3JcIixSKSxjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoXyx5LFIpLEEmJmNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShfLEEsUCksVVtQXT1SLF9leHBvcnQoe2dsb2JhbDohMCxmb3JjZWQ6UiE9UyxzaGFtOiFofSxVKSxcIkJZVEVTX1BFUl9FTEVNRU5UXCJpbiBSfHxjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUixcIkJZVEVTX1BFUl9FTEVNRU5UXCIsSSksXCJCWVRFU19QRVJfRUxFTUVOVFwiaW4gX3x8Y3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KF8sXCJCWVRFU19QRVJfRUxFTUVOVFwiLEkpLHNldFNwZWNpZXMoUCl9KTplLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSkpO3R5cGVkQXJyYXlDb25zdHJ1Y3RvcihcIlVpbnQ4XCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KHIsdCxhKXtyZXR1cm4gZSh0aGlzLHIsdCxhKX19KSk7dmFyIG1pbiQzPU1hdGgubWluLGFycmF5Q29weVdpdGhpbj1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbiBjb3B5V2l0aGluKGUscil7dmFyIHQ9dG9PYmplY3QodGhpcyksYT10b0xlbmd0aCh0Lmxlbmd0aCksaT10b0Fic29sdXRlSW5kZXgoZSxhKSxzPXRvQWJzb2x1dGVJbmRleChyLGEpLGM9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsbD1taW4kMygodm9pZCAwPT09Yz9hOnRvQWJzb2x1dGVJbmRleChjLGEpKS1zLGEtaSksdT0xO2ZvcihzPGkmJmk8cytsJiYodT0tMSxzKz1sLTEsaSs9bC0xKTtsLS0gPjA7KXMgaW4gdD90W2ldPXRbc106ZGVsZXRlIHRbaV0saSs9dSxzKz11O3JldHVybiB0fSxhVHlwZWRBcnJheSRsPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRtPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJG0oXCJjb3B5V2l0aGluXCIsKGZ1bmN0aW9uIGNvcHlXaXRoaW4oZSxyKXtyZXR1cm4gYXJyYXlDb3B5V2l0aGluLmNhbGwoYVR5cGVkQXJyYXkkbCh0aGlzKSxlLHIsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkpO3ZhciAkZXZlcnk9YXJyYXlJdGVyYXRpb24uZXZlcnksYVR5cGVkQXJyYXkkaz1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkbD1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRsKFwiZXZlcnlcIiwoZnVuY3Rpb24gZXZlcnkoZSl7cmV0dXJuICRldmVyeShhVHlwZWRBcnJheSRrKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBhVHlwZWRBcnJheSRqPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRrPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGsoXCJmaWxsXCIsKGZ1bmN0aW9uIGZpbGwoZSl7cmV0dXJuIGFycmF5RmlsbC5hcHBseShhVHlwZWRBcnJheSRqKHRoaXMpLGFyZ3VtZW50cyl9KSk7dmFyIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgdD0wLGE9ci5sZW5ndGgsaT1uZXcgZShhKTthPnQ7KWlbdF09clt0KytdO3JldHVybiBpfSxUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUj1hcnJheUJ1ZmZlclZpZXdDb3JlLlRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SLGFUeXBlZEFycmF5Q29uc3RydWN0b3I9YXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFUeXBlZEFycmF5Q29uc3RydWN0b3Ioc3BlY2llc0NvbnN0cnVjdG9yKGUsZVtUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUl0pKX0sdHlwZWRBcnJheUZyb21TcGVjaWVzQW5kTGlzdD1mdW5jdGlvbihlLHIpe3JldHVybiBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QodHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihlKSxyKX0sJGZpbHRlciQxPWFycmF5SXRlcmF0aW9uLmZpbHRlcixhVHlwZWRBcnJheSRpPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRqPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGooXCJmaWx0ZXJcIiwoZnVuY3Rpb24gZmlsdGVyKGUpe3ZhciByPSRmaWx0ZXIkMShhVHlwZWRBcnJheSRpKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybiB0eXBlZEFycmF5RnJvbVNwZWNpZXNBbmRMaXN0KHRoaXMscil9KSk7dmFyICRmaW5kPWFycmF5SXRlcmF0aW9uLmZpbmQsYVR5cGVkQXJyYXkkaD1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkaT1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRpKFwiZmluZFwiLChmdW5jdGlvbiBmaW5kKGUpe3JldHVybiAkZmluZChhVHlwZWRBcnJheSRoKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciAkZmluZEluZGV4PWFycmF5SXRlcmF0aW9uLmZpbmRJbmRleCxhVHlwZWRBcnJheSRnPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRoPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGgoXCJmaW5kSW5kZXhcIiwoZnVuY3Rpb24gZmluZEluZGV4KGUpe3JldHVybiAkZmluZEluZGV4KGFUeXBlZEFycmF5JGcodGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyICRmb3JFYWNoJDE9YXJyYXlJdGVyYXRpb24uZm9yRWFjaCxhVHlwZWRBcnJheSRmPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRnPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGcoXCJmb3JFYWNoXCIsKGZ1bmN0aW9uIGZvckVhY2goZSl7JGZvckVhY2gkMShhVHlwZWRBcnJheSRmKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciAkaW5jbHVkZXMkMT1hcnJheUluY2x1ZGVzLmluY2x1ZGVzLGFUeXBlZEFycmF5JGU9YXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheSxleHBvcnRUeXBlZEFycmF5TWV0aG9kJGY9YXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO2V4cG9ydFR5cGVkQXJyYXlNZXRob2QkZihcImluY2x1ZGVzXCIsKGZ1bmN0aW9uIGluY2x1ZGVzKGUpe3JldHVybiAkaW5jbHVkZXMkMShhVHlwZWRBcnJheSRlKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciAkaW5kZXhPZj1hcnJheUluY2x1ZGVzLmluZGV4T2YsYVR5cGVkQXJyYXkkZD1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkZT1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRlKFwiaW5kZXhPZlwiLChmdW5jdGlvbiBpbmRleE9mKGUpe3JldHVybiAkaW5kZXhPZihhVHlwZWRBcnJheSRkKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSQxPWZ1bmN0aW9uTmFtZS5QUk9QRVIsSVRFUkFUT1IkMz13ZWxsS25vd25TeW1ib2woXCJpdGVyYXRvclwiKSxVaW50OEFycmF5JDI9Z2xvYmFsJDEuVWludDhBcnJheSxhcnJheVZhbHVlcz1lc19hcnJheV9pdGVyYXRvci52YWx1ZXMsYXJyYXlLZXlzPWVzX2FycmF5X2l0ZXJhdG9yLmtleXMsYXJyYXlFbnRyaWVzPWVzX2FycmF5X2l0ZXJhdG9yLmVudHJpZXMsYVR5cGVkQXJyYXkkYz1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkZD1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsbmF0aXZlVHlwZWRBcnJheUl0ZXJhdG9yPVVpbnQ4QXJyYXkkMiYmVWludDhBcnJheSQyLnByb3RvdHlwZVtJVEVSQVRPUiQzXSxQUk9QRVJfQVJSQVlfVkFMVUVTX05BTUU9ISFuYXRpdmVUeXBlZEFycmF5SXRlcmF0b3ImJlwidmFsdWVzXCI9PT1uYXRpdmVUeXBlZEFycmF5SXRlcmF0b3IubmFtZSx0eXBlZEFycmF5VmFsdWVzPWZ1bmN0aW9uIHZhbHVlcygpe3JldHVybiBhcnJheVZhbHVlcy5jYWxsKGFUeXBlZEFycmF5JGModGhpcykpfTtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGQoXCJlbnRyaWVzXCIsKGZ1bmN0aW9uIGVudHJpZXMoKXtyZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwoYVR5cGVkQXJyYXkkYyh0aGlzKSl9KSksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRkKFwia2V5c1wiLChmdW5jdGlvbiBrZXlzKCl7cmV0dXJuIGFycmF5S2V5cy5jYWxsKGFUeXBlZEFycmF5JGModGhpcykpfSkpLGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkZChcInZhbHVlc1wiLHR5cGVkQXJyYXlWYWx1ZXMsUFJPUEVSX0ZVTkNUSU9OX05BTUUkMSYmIVBST1BFUl9BUlJBWV9WQUxVRVNfTkFNRSksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRkKElURVJBVE9SJDMsdHlwZWRBcnJheVZhbHVlcyxQUk9QRVJfRlVOQ1RJT05fTkFNRSQxJiYhUFJPUEVSX0FSUkFZX1ZBTFVFU19OQU1FKTt2YXIgYVR5cGVkQXJyYXkkYj1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkYz1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsJGpvaW49W10uam9pbjtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGMoXCJqb2luXCIsKGZ1bmN0aW9uIGpvaW4oZSl7cmV0dXJuICRqb2luLmFwcGx5KGFUeXBlZEFycmF5JGIodGhpcyksYXJndW1lbnRzKX0pKTt2YXIgYXJyYXlNZXRob2RJc1N0cmljdD1mdW5jdGlvbihlLHIpe3ZhciB0PVtdW2VdO3JldHVybiEhdCYmZmFpbHMoKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscnx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pKX0sbWluJDI9TWF0aC5taW4sJGxhc3RJbmRleE9mPVtdLmxhc3RJbmRleE9mLE5FR0FUSVZFX1pFUk89ISEkbGFzdEluZGV4T2YmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDAsU1RSSUNUX01FVEhPRCQyPWFycmF5TWV0aG9kSXNTdHJpY3QoXCJsYXN0SW5kZXhPZlwiKSxGT1JDRUQkNT1ORUdBVElWRV9aRVJPfHwhU1RSSUNUX01FVEhPRCQyLGFycmF5TGFzdEluZGV4T2Y9Rk9SQ0VEJDU/ZnVuY3Rpb24gbGFzdEluZGV4T2YoZSl7aWYoTkVHQVRJVkVfWkVSTylyZXR1cm4gJGxhc3RJbmRleE9mLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgcj10b0luZGV4ZWRPYmplY3QodGhpcyksdD10b0xlbmd0aChyLmxlbmd0aCksYT10LTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGE9bWluJDIoYSx0b0ludGVnZXIoYXJndW1lbnRzWzFdKSkpLGE8MCYmKGE9dCthKTthPj0wO2EtLSlpZihhIGluIHImJnJbYV09PT1lKXJldHVybiBhfHwwO3JldHVybi0xfTokbGFzdEluZGV4T2YsYVR5cGVkQXJyYXkkYT1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkYj1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRiKFwibGFzdEluZGV4T2ZcIiwoZnVuY3Rpb24gbGFzdEluZGV4T2YoZSl7cmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkoYVR5cGVkQXJyYXkkYSh0aGlzKSxhcmd1bWVudHMpfSkpO3ZhciAkbWFwPWFycmF5SXRlcmF0aW9uLm1hcCxhVHlwZWRBcnJheSQ5PWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCRhPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJGEoXCJtYXBcIiwoZnVuY3Rpb24gbWFwKGUpe3JldHVybiAkbWFwKGFUeXBlZEFycmF5JDkodGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3KHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IoZSkpKHIpfSkpfSkpO3ZhciBjcmVhdGVNZXRob2QkMT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocix0LGEsaSl7YUNhbGxhYmxlKHQpO3ZhciBzPXRvT2JqZWN0KHIpLGM9aW5kZXhlZE9iamVjdChzKSxsPXRvTGVuZ3RoKHMubGVuZ3RoKSx1PWU/bC0xOjAscD1lPy0xOjE7aWYoYTwyKWZvcig7Oyl7aWYodSBpbiBjKXtpPWNbdV0sdSs9cDticmVha31pZih1Kz1wLGU/dTwwOmw8PXUpdGhyb3cgVHlwZUVycm9yKFwiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKX1mb3IoO2U/dT49MDpsPnU7dSs9cCl1IGluIGMmJihpPXQoaSxjW3VdLHUscykpO3JldHVybiBpfX0sYXJyYXlSZWR1Y2U9e2xlZnQ6Y3JlYXRlTWV0aG9kJDEoITEpLHJpZ2h0OmNyZWF0ZU1ldGhvZCQxKCEwKX0sJHJlZHVjZT1hcnJheVJlZHVjZS5sZWZ0LGFUeXBlZEFycmF5JDg9YXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheSxleHBvcnRUeXBlZEFycmF5TWV0aG9kJDk9YXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO2V4cG9ydFR5cGVkQXJyYXlNZXRob2QkOShcInJlZHVjZVwiLChmdW5jdGlvbiByZWR1Y2UoZSl7cmV0dXJuICRyZWR1Y2UoYVR5cGVkQXJyYXkkOCh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciAkcmVkdWNlUmlnaHQ9YXJyYXlSZWR1Y2UucmlnaHQsYVR5cGVkQXJyYXkkNz1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkOD1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCQ4KFwicmVkdWNlUmlnaHRcIiwoZnVuY3Rpb24gcmVkdWNlUmlnaHQoZSl7cmV0dXJuICRyZWR1Y2VSaWdodChhVHlwZWRBcnJheSQ3KHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIGFUeXBlZEFycmF5JDY9YXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheSxleHBvcnRUeXBlZEFycmF5TWV0aG9kJDc9YXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGZsb29yJDQ9TWF0aC5mbG9vcjtleHBvcnRUeXBlZEFycmF5TWV0aG9kJDcoXCJyZXZlcnNlXCIsKGZ1bmN0aW9uIHJldmVyc2UoKXtmb3IodmFyIGUscj1hVHlwZWRBcnJheSQ2KHRoaXMpLmxlbmd0aCx0PWZsb29yJDQoci8yKSxhPTA7YTx0OyllPXRoaXNbYV0sdGhpc1thKytdPXRoaXNbLS1yXSx0aGlzW3JdPWU7cmV0dXJuIHRoaXN9KSk7dmFyIGFUeXBlZEFycmF5JDU9YXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheSxleHBvcnRUeXBlZEFycmF5TWV0aG9kJDY9YXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLEZPUkNFRCQ0PWZhaWxzKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2V0KHt9KX0pKTtleHBvcnRUeXBlZEFycmF5TWV0aG9kJDYoXCJzZXRcIiwoZnVuY3Rpb24gc2V0KGUpe2FUeXBlZEFycmF5JDUodGhpcyk7dmFyIHI9dG9PZmZzZXQoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMSksdD10aGlzLmxlbmd0aCxhPXRvT2JqZWN0KGUpLGk9dG9MZW5ndGgoYS5sZW5ndGgpLHM9MDtpZihpK3I+dCl0aHJvdyBSYW5nZUVycm9yKFwiV3JvbmcgbGVuZ3RoXCIpO2Zvcig7czxpOyl0aGlzW3Irc109YVtzKytdfSksRk9SQ0VEJDQpO3ZhciBhVHlwZWRBcnJheSQ0PWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCQ1PWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCwkc2xpY2UkMT1bXS5zbGljZSxGT1JDRUQkMz1mYWlscygoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSk7ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCQ1KFwic2xpY2VcIiwoZnVuY3Rpb24gc2xpY2UoZSxyKXtmb3IodmFyIHQ9JHNsaWNlJDEuY2FsbChhVHlwZWRBcnJheSQ0KHRoaXMpLGUsciksYT10eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKHRoaXMpLGk9MCxzPXQubGVuZ3RoLGM9bmV3IGEocyk7cz5pOyljW2ldPXRbaSsrXTtyZXR1cm4gY30pLEZPUkNFRCQzKTt2YXIgJHNvbWU9YXJyYXlJdGVyYXRpb24uc29tZSxhVHlwZWRBcnJheSQzPWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCQ0PWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtleHBvcnRUeXBlZEFycmF5TWV0aG9kJDQoXCJzb21lXCIsKGZ1bmN0aW9uIHNvbWUoZSl7cmV0dXJuICRzb21lKGFUeXBlZEFycmF5JDModGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIGZsb29yJDM9TWF0aC5mbG9vcixtZXJnZVNvcnQ9ZnVuY3Rpb24oZSxyKXt2YXIgdD1lLmxlbmd0aCxhPWZsb29yJDModC8yKTtyZXR1cm4gdDw4P2luc2VydGlvblNvcnQoZSxyKTptZXJnZShtZXJnZVNvcnQoZS5zbGljZSgwLGEpLHIpLG1lcmdlU29ydChlLnNsaWNlKGEpLHIpLHIpfSxpbnNlcnRpb25Tb3J0PWZ1bmN0aW9uKGUscil7Zm9yKHZhciB0LGEsaT1lLmxlbmd0aCxzPTE7czxpOyl7Zm9yKGE9cyx0PWVbc107YSYmcihlW2EtMV0sdCk+MDspZVthXT1lWy0tYV07YSE9PXMrKyYmKGVbYV09dCl9cmV0dXJuIGV9LG1lcmdlPWZ1bmN0aW9uKGUscix0KXtmb3IodmFyIGE9ZS5sZW5ndGgsaT1yLmxlbmd0aCxzPTAsYz0wLGw9W107czxhfHxjPGk7KXM8YSYmYzxpP2wucHVzaCh0KGVbc10scltjXSk8PTA/ZVtzKytdOnJbYysrXSk6bC5wdXNoKHM8YT9lW3MrK106cltjKytdKTtyZXR1cm4gbH0sYXJyYXlTb3J0PW1lcmdlU29ydCxmaXJlZm94PWVuZ2luZVVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKSxlbmdpbmVGZlZlcnNpb249ISFmaXJlZm94JiYrZmlyZWZveFsxXSxlbmdpbmVJc0llT3JFZGdlPS9NU0lFfFRyaWRlbnQvLnRlc3QoZW5naW5lVXNlckFnZW50KSx3ZWJraXQ9ZW5naW5lVXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pLGVuZ2luZVdlYmtpdFZlcnNpb249ISF3ZWJraXQmJit3ZWJraXRbMV0sYVR5cGVkQXJyYXkkMj1hcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5LGV4cG9ydFR5cGVkQXJyYXlNZXRob2QkMz1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsVWludDE2QXJyYXkkMT1nbG9iYWwkMS5VaW50MTZBcnJheSxuYXRpdmVTb3J0JDE9VWludDE2QXJyYXkkMSYmVWludDE2QXJyYXkkMS5wcm90b3R5cGUuc29ydCxBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUz0hIW5hdGl2ZVNvcnQkMSYmIWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50MTZBcnJheSQxKDIpO2Uuc29ydChudWxsKSxlLnNvcnQoe30pfSkpLFNUQUJMRV9TT1JUJDE9ISFuYXRpdmVTb3J0JDEmJiFmYWlscygoZnVuY3Rpb24oKXtpZihlbmdpbmVWOFZlcnNpb24pcmV0dXJuIGVuZ2luZVY4VmVyc2lvbjw3NDtpZihlbmdpbmVGZlZlcnNpb24pcmV0dXJuIGVuZ2luZUZmVmVyc2lvbjw2NztpZihlbmdpbmVJc0llT3JFZGdlKXJldHVybiEwO2lmKGVuZ2luZVdlYmtpdFZlcnNpb24pcmV0dXJuIGVuZ2luZVdlYmtpdFZlcnNpb248NjAyO3ZhciBlLHIsdD1uZXcgVWludDE2QXJyYXkkMSg1MTYpLGE9QXJyYXkoNTE2KTtmb3IoZT0wO2U8NTE2O2UrKylyPWUlNCx0W2VdPTUxNS1lLGFbZV09ZS0yKnIrMztmb3IodC5zb3J0KChmdW5jdGlvbihlLHIpe3JldHVybihlLzR8MCktKHIvNHwwKX0pKSxlPTA7ZTw1MTY7ZSsrKWlmKHRbZV0hPT1hW2VdKXJldHVybiEwfSkpLGdldFNvcnRDb21wYXJlJDE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIHZvaWQgMCE9PWU/K2Uocix0KXx8MDp0IT10Py0xOnIhPXI/MTowPT09ciYmMD09PXQ/MS9yPjAmJjEvdDwwPzE6LTE6cj50fX07ZXhwb3J0VHlwZWRBcnJheU1ldGhvZCQzKFwic29ydFwiLChmdW5jdGlvbiBzb3J0KGUpe2lmKHZvaWQgMCE9PWUmJmFDYWxsYWJsZShlKSxTVEFCTEVfU09SVCQxKXJldHVybiBuYXRpdmVTb3J0JDEuY2FsbCh0aGlzLGUpO2FUeXBlZEFycmF5JDIodGhpcyk7dmFyIHIsdD10b0xlbmd0aCh0aGlzLmxlbmd0aCksYT1BcnJheSh0KTtmb3Iocj0wO3I8dDtyKyspYVtyXT10aGlzW3JdO2ZvcihhPWFycmF5U29ydCh0aGlzLGdldFNvcnRDb21wYXJlJDEoZSkpLHI9MDtyPHQ7cisrKXRoaXNbcl09YVtyXTtyZXR1cm4gdGhpc30pLCFTVEFCTEVfU09SVCQxfHxBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyk7dmFyIGFUeXBlZEFycmF5JDE9YXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheSxleHBvcnRUeXBlZEFycmF5TWV0aG9kJDI9YXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO2V4cG9ydFR5cGVkQXJyYXlNZXRob2QkMihcInN1YmFycmF5XCIsKGZ1bmN0aW9uIHN1YmFycmF5KGUscil7dmFyIHQ9YVR5cGVkQXJyYXkkMSh0aGlzKSxhPXQubGVuZ3RoLGk9dG9BYnNvbHV0ZUluZGV4KGUsYSk7cmV0dXJuIG5ldyh0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKHQpKSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQraSp0LkJZVEVTX1BFUl9FTEVNRU5ULHRvTGVuZ3RoKCh2b2lkIDA9PT1yP2E6dG9BYnNvbHV0ZUluZGV4KHIsYSkpLWkpKX0pKTt2YXIgSW50OEFycmF5JDE9Z2xvYmFsJDEuSW50OEFycmF5LGFUeXBlZEFycmF5PWFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXksZXhwb3J0VHlwZWRBcnJheU1ldGhvZCQxPWFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCwkdG9Mb2NhbGVTdHJpbmc9W10udG9Mb2NhbGVTdHJpbmcsJHNsaWNlPVtdLnNsaWNlLFRPX0xPQ0FMRV9TVFJJTkdfQlVHPSEhSW50OEFycmF5JDEmJmZhaWxzKChmdW5jdGlvbigpeyR0b0xvY2FsZVN0cmluZy5jYWxsKG5ldyBJbnQ4QXJyYXkkMSgxKSl9KSksRk9SQ0VEJDI9ZmFpbHMoKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IEludDhBcnJheSQxKFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSkpfHwhZmFpbHMoKGZ1bmN0aW9uKCl7SW50OEFycmF5JDEucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpO2V4cG9ydFR5cGVkQXJyYXlNZXRob2QkMShcInRvTG9jYWxlU3RyaW5nXCIsKGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCl7cmV0dXJuICR0b0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfU1RSSU5HX0JVRz8kc2xpY2UuY2FsbChhVHlwZWRBcnJheSh0aGlzKSk6YVR5cGVkQXJyYXkodGhpcyksYXJndW1lbnRzKX0pLEZPUkNFRCQyKTt2YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZD1hcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsVWludDhBcnJheSQxPWdsb2JhbCQxLlVpbnQ4QXJyYXksVWludDhBcnJheVByb3RvdHlwZT1VaW50OEFycmF5JDEmJlVpbnQ4QXJyYXkkMS5wcm90b3R5cGV8fHt9LGFycmF5VG9TdHJpbmc9W10udG9TdHJpbmcsYXJyYXlKb2luPVtdLmpvaW47ZmFpbHMoKGZ1bmN0aW9uKCl7YXJyYXlUb1N0cmluZy5jYWxsKHt9KX0pKSYmKGFycmF5VG9TdHJpbmc9ZnVuY3Rpb24gdG9TdHJpbmcoKXtyZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyl9KTt2YXIgSVNfTk9UX0FSUkFZX01FVEhPRD1VaW50OEFycmF5UHJvdG90eXBlLnRvU3RyaW5nIT1hcnJheVRvU3RyaW5nO2V4cG9ydFR5cGVkQXJyYXlNZXRob2QoXCJ0b1N0cmluZ1wiLGFycmF5VG9TdHJpbmcsSVNfTk9UX0FSUkFZX01FVEhPRCk7dmFyICRpbmNsdWRlcz1hcnJheUluY2x1ZGVzLmluY2x1ZGVzO19leHBvcnQoe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITB9LHtpbmNsdWRlczpmdW5jdGlvbiBpbmNsdWRlcyhlKXtyZXR1cm4gJGluY2x1ZGVzKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksYWRkVG9VbnNjb3BhYmxlcyhcImluY2x1ZGVzXCIpO3ZhciBub3RBUmVnZXhwPWZ1bmN0aW9uKGUpe2lmKGlzUmVnZXhwKGUpKXRocm93IFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtyZXR1cm4gZX0sTUFUQ0g9d2VsbEtub3duU3ltYm9sKFwibWF0Y2hcIiksY29ycmVjdElzUmVnZXhwTG9naWM9ZnVuY3Rpb24oZSl7dmFyIHI9Ly4vO3RyeXtcIi8uL1wiW2VdKHIpfWNhdGNoKHQpe3RyeXtyZXR1cm4gcltNQVRDSF09ITEsXCIvLi9cIltlXShyKX1jYXRjaChlKXt9fXJldHVybiExfTtfZXhwb3J0KHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6IWNvcnJlY3RJc1JlZ2V4cExvZ2ljKFwiaW5jbHVkZXNcIil9LHtpbmNsdWRlczpmdW5jdGlvbiBpbmNsdWRlcyhlKXtyZXR1cm4hIX50b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKS5pbmRleE9mKHRvU3RyaW5nKG5vdEFSZWdleHAoZSkpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgY3JlYXRlUHJvcGVydHk9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhPXRvUHJvcGVydHlLZXkocik7YSBpbiBlP29iamVjdERlZmluZVByb3BlcnR5LmYoZSxhLGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLHQpKTplW2FdPXR9LFNQRUNJRVMkMT13ZWxsS25vd25TeW1ib2woXCJzcGVjaWVzXCIpLGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuZ2luZVY4VmVyc2lvbj49NTF8fCFmYWlscygoZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4oci5jb25zdHJ1Y3Rvcj17fSlbU1BFQ0lFUyQxXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1yW2VdKEJvb2xlYW4pLmZvb30pKX0sSEFTX1NQRUNJRVNfU1VQUE9SVCQxPWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoXCJzbGljZVwiKSxTUEVDSUVTPXdlbGxLbm93blN5bWJvbChcInNwZWNpZXNcIiksbmF0aXZlU2xpY2U9W10uc2xpY2UsbWF4JDE9TWF0aC5tYXg7X2V4cG9ydCh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6IUhBU19TUEVDSUVTX1NVUFBPUlQkMX0se3NsaWNlOmZ1bmN0aW9uIHNsaWNlKGUscil7dmFyIHQsYSxpLHM9dG9JbmRleGVkT2JqZWN0KHRoaXMpLGM9dG9MZW5ndGgocy5sZW5ndGgpLGw9dG9BYnNvbHV0ZUluZGV4KGUsYyksdT10b0Fic29sdXRlSW5kZXgodm9pZCAwPT09cj9jOnIsYyk7aWYoaXNBcnJheShzKSYmKHQ9cy5jb25zdHJ1Y3RvciwoaXNDb25zdHJ1Y3Rvcih0KSYmKHQ9PT1BcnJheXx8aXNBcnJheSh0LnByb3RvdHlwZSkpfHxpc09iamVjdCh0KSYmbnVsbD09PSh0PXRbU1BFQ0lFU10pKSYmKHQ9dm9pZCAwKSx0PT09QXJyYXl8fHZvaWQgMD09PXQpKXJldHVybiBuYXRpdmVTbGljZS5jYWxsKHMsbCx1KTtmb3IoYT1uZXcodm9pZCAwPT09dD9BcnJheTp0KShtYXgkMSh1LWwsMCkpLGk9MDtsPHU7bCsrLGkrKylsIGluIHMmJmNyZWF0ZVByb3BlcnR5KGEsaSxzW2xdKTtyZXR1cm4gYS5sZW5ndGg9aSxhfX0pLHR5cGVkQXJyYXlDb25zdHJ1Y3RvcihcIlVpbnQzMlwiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkocix0LGEpe3JldHVybiBlKHRoaXMscix0LGEpfX0pKSx0eXBlZEFycmF5Q29uc3RydWN0b3IoXCJVaW50MTZcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KHIsdCxhKXtyZXR1cm4gZSh0aGlzLHIsdCxhKX19KSk7dmFyICRmaWx0ZXI9YXJyYXlJdGVyYXRpb24uZmlsdGVyLEhBU19TUEVDSUVTX1NVUFBPUlQ9YXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydChcImZpbHRlclwiKTtfZXhwb3J0KHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohSEFTX1NQRUNJRVNfU1VQUE9SVH0se2ZpbHRlcjpmdW5jdGlvbiBmaWx0ZXIoZSl7cmV0dXJuICRmaWx0ZXIodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUU9ZnVuY3Rpb25OYW1lLlBST1BFUixUT19TVFJJTkc9XCJ0b1N0cmluZ1wiLFJlZ0V4cFByb3RvdHlwZT1SZWdFeHAucHJvdG90eXBlLG5hdGl2ZVRvU3RyaW5nPVJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddLE5PVF9HRU5FUklDPWZhaWxzKChmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT1uYXRpdmVUb1N0cmluZy5jYWxsKHtzb3VyY2U6XCJhXCIsZmxhZ3M6XCJiXCJ9KX0pKSxJTkNPUlJFQ1RfTkFNRT1QUk9QRVJfRlVOQ1RJT05fTkFNRSYmbmF0aXZlVG9TdHJpbmcubmFtZSE9VE9fU1RSSU5HOyhOT1RfR0VORVJJQ3x8SU5DT1JSRUNUX05BTUUpJiZyZWRlZmluZShSZWdFeHAucHJvdG90eXBlLFRPX1NUUklORywoZnVuY3Rpb24gdG9TdHJpbmckMSgpe3ZhciBlPWFuT2JqZWN0KHRoaXMpLHI9dG9TdHJpbmcoZS5zb3VyY2UpLHQ9ZS5mbGFncztyZXR1cm5cIi9cIityK1wiL1wiK3RvU3RyaW5nKHZvaWQgMD09PXQmJmUgaW5zdGFuY2VvZiBSZWdFeHAmJiEoXCJmbGFnc1wiaW4gUmVnRXhwUHJvdG90eXBlKT9yZWdleHBGbGFncy5jYWxsKGUpOnQpfSkse3Vuc2FmZTohMH0pO3ZhciB0ZXN0PVtdLG5hdGl2ZVNvcnQ9dGVzdC5zb3J0LEZBSUxTX09OX1VOREVGSU5FRD1mYWlscygoZnVuY3Rpb24oKXt0ZXN0LnNvcnQodm9pZCAwKX0pKSxGQUlMU19PTl9OVUxMPWZhaWxzKChmdW5jdGlvbigpe3Rlc3Quc29ydChudWxsKX0pKSxTVFJJQ1RfTUVUSE9EJDE9YXJyYXlNZXRob2RJc1N0cmljdChcInNvcnRcIiksU1RBQkxFX1NPUlQ9IWZhaWxzKChmdW5jdGlvbigpe2lmKGVuZ2luZVY4VmVyc2lvbilyZXR1cm4gZW5naW5lVjhWZXJzaW9uPDcwO2lmKCEoZW5naW5lRmZWZXJzaW9uJiZlbmdpbmVGZlZlcnNpb24+Mykpe2lmKGVuZ2luZUlzSWVPckVkZ2UpcmV0dXJuITA7aWYoZW5naW5lV2Via2l0VmVyc2lvbilyZXR1cm4gZW5naW5lV2Via2l0VmVyc2lvbjw2MDM7dmFyIGUscix0LGEsaT1cIlwiO2ZvcihlPTY1O2U8NzY7ZSsrKXtzd2l0Y2gocj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLGUpe2Nhc2UgNjY6Y2FzZSA2OTpjYXNlIDcwOmNhc2UgNzI6dD0zO2JyZWFrO2Nhc2UgNjg6Y2FzZSA3MTp0PTQ7YnJlYWs7ZGVmYXVsdDp0PTJ9Zm9yKGE9MDthPDQ3O2ErKyl0ZXN0LnB1c2goe2s6cithLHY6dH0pfWZvcih0ZXN0LnNvcnQoKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIudi1lLnZ9KSksYT0wO2E8dGVzdC5sZW5ndGg7YSsrKXI9dGVzdFthXS5rLmNoYXJBdCgwKSxpLmNoYXJBdChpLmxlbmd0aC0xKSE9PXImJihpKz1yKTtyZXR1cm5cIkRHQkVGSEFDSUpLXCIhPT1pfX0pKSxGT1JDRUQkMT1GQUlMU19PTl9VTkRFRklORUR8fCFGQUlMU19PTl9OVUxMfHwhU1RSSUNUX01FVEhPRCQxfHwhU1RBQkxFX1NPUlQsZ2V0U29ydENvbXBhcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIHZvaWQgMD09PXQ/LTE6dm9pZCAwPT09cj8xOnZvaWQgMCE9PWU/K2Uocix0KXx8MDp0b1N0cmluZyhyKT50b1N0cmluZyh0KT8xOi0xfX07X2V4cG9ydCh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6Rk9SQ0VEJDF9LHtzb3J0OmZ1bmN0aW9uIHNvcnQoZSl7dm9pZCAwIT09ZSYmYUNhbGxhYmxlKGUpO3ZhciByPXRvT2JqZWN0KHRoaXMpO2lmKFNUQUJMRV9TT1JUKXJldHVybiB2b2lkIDA9PT1lP25hdGl2ZVNvcnQuY2FsbChyKTpuYXRpdmVTb3J0LmNhbGwocixlKTt2YXIgdCxhLGk9W10scz10b0xlbmd0aChyLmxlbmd0aCk7Zm9yKGE9MDthPHM7YSsrKWEgaW4gciYmaS5wdXNoKHJbYV0pO2Zvcih0PShpPWFycmF5U29ydChpLGdldFNvcnRDb21wYXJlKGUpKSkubGVuZ3RoLGE9MDthPHQ7KXJbYV09aVthKytdO2Zvcig7YTxzOylkZWxldGUgclthKytdO3JldHVybiByfX0pO3ZhciBVWklQXzE9Y3JlYXRlQ29tbW9uanNNb2R1bGUoKGZ1bmN0aW9uKGUpe3ZhciByLHQsVVpJUD17fTtlLmV4cG9ydHM9VVpJUCxVWklQLnBhcnNlPWZ1bmN0aW9uKGUscil7Zm9yKHZhciB0PVVaSVAuYmluLnJlYWRVc2hvcnQsYT1VWklQLmJpbi5yZWFkVWludCxpPTAscz17fSxjPW5ldyBVaW50OEFycmF5KGUpLGw9Yy5sZW5ndGgtNDsxMDEwMTAyNTYhPWEoYyxsKTspbC0tO2k9bDtpKz00O3ZhciB1PXQoYyxpKz00KTt0KGMsaSs9Mik7dmFyIHA9YShjLGkrPTIpLGQ9YShjLGkrPTQpO2krPTQsaT1kO2Zvcih2YXIgaD0wO2g8dTtoKyspe2EoYyxpKSxpKz00LGkrPTQsaSs9NCxhKGMsaSs9NCk7cD1hKGMsaSs9NCk7dmFyIHk9YShjLGkrPTQpLEE9dChjLGkrPTQpLGc9dChjLGkrMiksdj10KGMsaSs0KTtpKz02O3ZhciBFPWEoYyxpKz04KTtpKz00LGkrPUErZyt2LFVaSVAuX3JlYWRMb2NhbChjLEUscyxwLHkscil9cmV0dXJuIHN9LFVaSVAuX3JlYWRMb2NhbD1mdW5jdGlvbihlLHIsdCxhLGkscyl7dmFyIGM9VVpJUC5iaW4ucmVhZFVzaG9ydCxsPVVaSVAuYmluLnJlYWRVaW50O2woZSxyKSxjKGUscis9NCksYyhlLHIrPTIpO3ZhciB1PWMoZSxyKz0yKTtsKGUscis9MiksbChlLHIrPTQpLHIrPTQ7dmFyIHA9YyhlLHIrPTgpLGQ9YyhlLHIrPTIpO3IrPTI7dmFyIGg9VVpJUC5iaW4ucmVhZFVURjgoZSxyLHApO2lmKHIrPXAscis9ZCxzKXRbaF09e3NpemU6aSxjc2l6ZTphfTtlbHNle3ZhciB5PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLHIpO2lmKDA9PXUpdFtoXT1uZXcgVWludDhBcnJheSh5LmJ1ZmZlci5zbGljZShyLHIrYSkpO2Vsc2V7aWYoOCE9dSl0aHJvd1widW5rbm93biBjb21wcmVzc2lvbiBtZXRob2Q6IFwiK3U7dmFyIEE9bmV3IFVpbnQ4QXJyYXkoaSk7VVpJUC5pbmZsYXRlUmF3KHksQSksdFtoXT1BfX19LFVaSVAuaW5mbGF0ZVJhdz1mdW5jdGlvbihlLHIpe3JldHVybiBVWklQLkYuaW5mbGF0ZShlLHIpfSxVWklQLmluZmxhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVswXSxlWzFdLFVaSVAuaW5mbGF0ZVJhdyhuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrMixlLmxlbmd0aC02KSxyKX0sVVpJUC5kZWZsYXRlPWZ1bmN0aW9uKGUscil7bnVsbD09ciYmKHI9e2xldmVsOjZ9KTt2YXIgdD0wLGE9bmV3IFVpbnQ4QXJyYXkoNTArTWF0aC5mbG9vcigxLjEqZS5sZW5ndGgpKTthW3RdPTEyMCxhW3QrMV09MTU2LHQrPTIsdD1VWklQLkYuZGVmbGF0ZVJhdyhlLGEsdCxyLmxldmVsKTt2YXIgaT1VWklQLmFkbGVyKGUsMCxlLmxlbmd0aCk7cmV0dXJuIGFbdCswXT1pPj4+MjQmMjU1LGFbdCsxXT1pPj4+MTYmMjU1LGFbdCsyXT1pPj4+OCYyNTUsYVt0KzNdPWk+Pj4wJjI1NSxuZXcgVWludDhBcnJheShhLmJ1ZmZlciwwLHQrNCl9LFVaSVAuZGVmbGF0ZVJhdz1mdW5jdGlvbihlLHIpe251bGw9PXImJihyPXtsZXZlbDo2fSk7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoNTArTWF0aC5mbG9vcigxLjEqZS5sZW5ndGgpKSxhPVVaSVAuRi5kZWZsYXRlUmF3KGUsdCxhLHIubGV2ZWwpO3JldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLGEpfSxVWklQLmVuY29kZT1mdW5jdGlvbihlLHIpe251bGw9PXImJihyPSExKTt2YXIgdD0wLGE9VVpJUC5iaW4ud3JpdGVVaW50LGk9VVpJUC5iaW4ud3JpdGVVc2hvcnQscz17fTtmb3IodmFyIGMgaW4gZSl7dmFyIGw9IVVaSVAuX25vTmVlZChjKSYmIXIsdT1lW2NdLHA9VVpJUC5jcmMuY3JjKHUsMCx1Lmxlbmd0aCk7c1tjXT17Y3ByOmwsdXNpemU6dS5sZW5ndGgsY3JjOnAsZmlsZTpsP1VaSVAuZGVmbGF0ZVJhdyh1KTp1fX1mb3IodmFyIGMgaW4gcyl0Kz1zW2NdLmZpbGUubGVuZ3RoKzMwKzQ2KzIqVVpJUC5iaW4uc2l6ZVVURjgoYyk7dCs9MjI7dmFyIGQ9bmV3IFVpbnQ4QXJyYXkodCksaD0wLHk9W107Zm9yKHZhciBjIGluIHMpe3ZhciBBPXNbY107eS5wdXNoKGgpLGg9VVpJUC5fd3JpdGVIZWFkZXIoZCxoLGMsQSwwKX12YXIgZz0wLHY9aDtmb3IodmFyIGMgaW4gcyl7QT1zW2NdO3kucHVzaChoKSxoPVVaSVAuX3dyaXRlSGVhZGVyKGQsaCxjLEEsMSx5W2crK10pfXZhciBFPWgtdjtyZXR1cm4gYShkLGgsMTAxMDEwMjU2KSxoKz00LGkoZCxoKz00LGcpLGkoZCxoKz0yLGcpLGEoZCxoKz0yLEUpLGEoZCxoKz00LHYpLGgrPTQsaCs9MixkLmJ1ZmZlcn0sVVpJUC5fbm9OZWVkPWZ1bmN0aW9uKGUpe3ZhciByPWUuc3BsaXQoXCIuXCIpLnBvcCgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuLTEhPVwicG5nLGpwZyxqcGVnLHppcFwiLmluZGV4T2Yocil9LFVaSVAuX3dyaXRlSGVhZGVyPWZ1bmN0aW9uKGUscix0LGEsaSxzKXt2YXIgYz1VWklQLmJpbi53cml0ZVVpbnQsbD1VWklQLmJpbi53cml0ZVVzaG9ydCx1PWEuZmlsZTtyZXR1cm4gYyhlLHIsMD09aT82NzMyNDc1MjozMzYzOTI0OCkscis9NCwxPT1pJiYocis9MiksbChlLHIsMjApLGwoZSxyKz0yLDApLGwoZSxyKz0yLGEuY3ByPzg6MCksYyhlLHIrPTIsMCksYyhlLHIrPTQsYS5jcmMpLGMoZSxyKz00LHUubGVuZ3RoKSxjKGUscis9NCxhLnVzaXplKSxsKGUscis9NCxVWklQLmJpbi5zaXplVVRGOCh0KSksbChlLHIrPTIsMCkscis9MiwxPT1pJiYocis9MixyKz0yLGMoZSxyKz02LHMpLHIrPTQpLHIrPVVaSVAuYmluLndyaXRlVVRGOChlLHIsdCksMD09aSYmKGUuc2V0KHUscikscis9dS5sZW5ndGgpLHJ9LFVaSVAuY3JjPXt0YWJsZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgVWludDMyQXJyYXkoMjU2KSxyPTA7cjwyNTY7cisrKXtmb3IodmFyIHQ9cixhPTA7YTw4O2ErKykxJnQ/dD0zOTg4MjkyMzg0XnQ+Pj4xOnQ+Pj49MTtlW3JdPXR9cmV0dXJuIGV9KCksdXBkYXRlOmZ1bmN0aW9uKGUscix0LGEpe2Zvcih2YXIgaT0wO2k8YTtpKyspZT1VWklQLmNyYy50YWJsZVsyNTUmKGVeclt0K2ldKV1eZT4+Pjg7cmV0dXJuIGV9LGNyYzpmdW5jdGlvbihlLHIsdCl7cmV0dXJuIDQyOTQ5NjcyOTVeVVpJUC5jcmMudXBkYXRlKDQyOTQ5NjcyOTUsZSxyLHQpfX0sVVpJUC5hZGxlcj1mdW5jdGlvbihlLHIsdCl7Zm9yKHZhciBhPTEsaT0wLHM9cixjPXIrdDtzPGM7KXtmb3IodmFyIGw9TWF0aC5taW4ocys1NTUyLGMpO3M8bDspaSs9YSs9ZVtzKytdO2ElPTY1NTIxLGklPTY1NTIxfXJldHVybiBpPDwxNnxhfSxVWklQLmJpbj17cmVhZFVzaG9ydDpmdW5jdGlvbihlLHIpe3JldHVybiBlW3JdfGVbcisxXTw8OH0sd3JpdGVVc2hvcnQ6ZnVuY3Rpb24oZSxyLHQpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+PjgmMjU1fSxyZWFkVWludDpmdW5jdGlvbihlLHIpe3JldHVybiAxNjc3NzIxNiplW3IrM10rKGVbcisyXTw8MTZ8ZVtyKzFdPDw4fGVbcl0pfSx3cml0ZVVpbnQ6ZnVuY3Rpb24oZSxyLHQpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+PjgmMjU1LGVbcisyXT10Pj4xNiYyNTUsZVtyKzNdPXQ+PjI0JjI1NX0scmVhZEFTQ0lJOmZ1bmN0aW9uKGUscix0KXtmb3IodmFyIGE9XCJcIixpPTA7aTx0O2krKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcitpXSk7cmV0dXJuIGF9LHdyaXRlQVNDSUk6ZnVuY3Rpb24oZSxyLHQpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWVbcithXT10LmNoYXJDb2RlQXQoYSl9LHBhZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg8Mj9cIjBcIitlOmV9LHJlYWRVVEY4OmZ1bmN0aW9uKGUscix0KXtmb3IodmFyIGEsaT1cIlwiLHM9MDtzPHQ7cysrKWkrPVwiJVwiK1VaSVAuYmluLnBhZChlW3Irc10udG9TdHJpbmcoMTYpKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2goYSl7cmV0dXJuIFVaSVAuYmluLnJlYWRBU0NJSShlLHIsdCl9cmV0dXJuIGF9LHdyaXRlVVRGODpmdW5jdGlvbihlLHIsdCl7Zm9yKHZhciBhPXQubGVuZ3RoLGk9MCxzPTA7czxhO3MrKyl7dmFyIGM9dC5jaGFyQ29kZUF0KHMpO2lmKDA9PSg0Mjk0OTY3MTY4JmMpKWVbcitpXT1jLGkrKztlbHNlIGlmKDA9PSg0Mjk0OTY1MjQ4JmMpKWVbcitpXT0xOTJ8Yz4+NixlW3IraSsxXT0xMjh8Yz4+MCY2MyxpKz0yO2Vsc2UgaWYoMD09KDQyOTQ5MDE3NjAmYykpZVtyK2ldPTIyNHxjPj4xMixlW3IraSsxXT0xMjh8Yz4+NiY2MyxlW3IraSsyXT0xMjh8Yz4+MCY2MyxpKz0zO2Vsc2V7aWYoMCE9KDQyOTI4NzAxNDQmYykpdGhyb3dcImVcIjtlW3IraV09MjQwfGM+PjE4LGVbcitpKzFdPTEyOHxjPj4xMiY2MyxlW3IraSsyXT0xMjh8Yz4+NiY2MyxlW3IraSszXT0xMjh8Yz4+MCY2MyxpKz00fX1yZXR1cm4gaX0sc2l6ZVVURjg6ZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUubGVuZ3RoLHQ9MCxhPTA7YTxyO2ErKyl7dmFyIGk9ZS5jaGFyQ29kZUF0KGEpO2lmKDA9PSg0Mjk0OTY3MTY4JmkpKXQrKztlbHNlIGlmKDA9PSg0Mjk0OTY1MjQ4JmkpKXQrPTI7ZWxzZSBpZigwPT0oNDI5NDkwMTc2MCZpKSl0Kz0zO2Vsc2V7aWYoMCE9KDQyOTI4NzAxNDQmaSkpdGhyb3dcImVcIjt0Kz00fX1yZXR1cm4gdH19LFVaSVAuRj17fSxVWklQLkYuZGVmbGF0ZVJhdz1mdW5jdGlvbihlLHIsdCxhKXt2YXIgaT1bWzAsMCwwLDAsMF0sWzQsNCw4LDQsMF0sWzQsNSwxNiw4LDBdLFs0LDYsMTYsMTYsMF0sWzQsMTAsMTYsMzIsMF0sWzgsMTYsMzIsMzIsMF0sWzgsMTYsMTI4LDEyOCwwXSxbOCwzMiwxMjgsMjU2LDBdLFszMiwxMjgsMjU4LDEwMjQsMV0sWzMyLDI1OCwyNTgsNDA5NiwxXV1bYV0scz1VWklQLkYuVSxjPVVaSVAuRi5fZ29vZEluZGV4O1VaSVAuRi5faGFzaDt2YXIgbD1VWklQLkYuX3B1dHNFLHU9MCxwPXQ8PDMsZD0wLGg9ZS5sZW5ndGg7aWYoMD09YSl7Zm9yKDt1PGg7KXtsKHIscCx1KyhSPU1hdGgubWluKDY1NTM1LGgtdSkpPT1oPzE6MCkscD1VWklQLkYuX2NvcHlFeGFjdChlLHUsUixyLHArOCksdSs9Un1yZXR1cm4gcD4+PjN9dmFyIHk9cy5saXRzLEE9cy5zdHJ0LGc9cy5wcmV2LHY9MCxFPTAsbT0wLEk9MCxQPTAsYj0wO2ZvcihoPjImJihBW2I9VVpJUC5GLl9oYXNoKGUsMCldPTApLHU9MDt1PGg7dSsrKXtpZihQPWIsdSsxPGgtMil7Yj1VWklQLkYuX2hhc2goZSx1KzEpO3ZhciBUPXUrMSYzMjc2NztnW1RdPUFbYl0sQVtiXT1UfWlmKGQ8PXUpeyh2PjE0ZTN8fEU+MjY2OTcpJiZoLXU+MTAwJiYoZDx1JiYoeVt2XT11LWQsdis9MixkPXUpLHA9VVpJUC5GLl93cml0ZUJsb2NrKHU9PWgtMXx8ZD09aD8xOjAseSx2LEksZSxtLHUtbSxyLHApLHY9RT1JPTAsbT11KTt2YXIgUz0wO3U8aC0yJiYoUz1VWklQLkYuX2Jlc3RNYXRjaChlLHUsZyxQLE1hdGgubWluKGlbMl0saC11KSxpWzNdKSk7dmFyIFI9Uz4+PjE2LF89NjU1MzUmUztpZigwIT1TKXtfPTY1NTM1JlM7dmFyIFU9YyhSPVM+Pj4xNixzLm9mMCk7cy5saHN0WzI1NytVXSsrO3ZhciB3PWMoXyxzLmRmMCk7cy5kaHN0W3ddKyssSSs9cy5leGJbVV0rcy5keGJbd10seVt2XT1SPDwyM3x1LWQseVt2KzFdPV88PDE2fFU8PDh8dyx2Kz0yLGQ9dStSfWVsc2Ugcy5saHN0W2VbdV1dKys7RSsrfX1mb3IobT09dSYmMCE9ZS5sZW5ndGh8fChkPHUmJih5W3ZdPXUtZCx2Kz0yLGQ9dSkscD1VWklQLkYuX3dyaXRlQmxvY2soMSx5LHYsSSxlLG0sdS1tLHIscCksdj0wLEU9MCx2PUU9ST0wLG09dSk7MCE9KDcmcCk7KXArKztyZXR1cm4gcD4+PjN9LFVaSVAuRi5fYmVzdE1hdGNoPWZ1bmN0aW9uKGUscix0LGEsaSxzKXt2YXIgYz0zMjc2NyZyLGw9dFtjXSx1PWMtbCszMjc2OCYzMjc2NztpZihsPT1jfHxhIT1VWklQLkYuX2hhc2goZSxyLXUpKXJldHVybiAwO2Zvcih2YXIgcD0wLGQ9MCxoPU1hdGgubWluKDMyNzY3LHIpO3U8PWgmJjAhPS0tcyYmbCE9Yzspe2lmKDA9PXB8fGVbcitwXT09ZVtyK3AtdV0pe3ZhciB5PVVaSVAuRi5faG93TG9uZyhlLHIsdSk7aWYoeT5wKXtpZihkPXUsKHA9eSk+PWkpYnJlYWs7dSsyPHkmJih5PXUrMik7Zm9yKHZhciBBPTAsZz0wO2c8eS0yO2crKyl7dmFyIHY9ci11K2crMzI3NjgmMzI3NjcsRT12LXRbdl0rMzI3NjgmMzI3Njc7RT5BJiYoQT1FLGw9dil9fX11Kz0oYz1sKS0obD10W2NdKSszMjc2OCYzMjc2N31yZXR1cm4gcDw8MTZ8ZH0sVVpJUC5GLl9ob3dMb25nPWZ1bmN0aW9uKGUscix0KXtpZihlW3JdIT1lW3ItdF18fGVbcisxXSE9ZVtyKzEtdF18fGVbcisyXSE9ZVtyKzItdF0pcmV0dXJuIDA7dmFyIGE9cixpPU1hdGgubWluKGUubGVuZ3RoLHIrMjU4KTtmb3Iocis9MztyPGkmJmVbcl09PWVbci10XTspcisrO3JldHVybiByLWF9LFVaSVAuRi5faGFzaD1mdW5jdGlvbihlLHIpe3JldHVybihlW3JdPDw4fGVbcisxXSkrKGVbcisyXTw8NCkmNjU1MzV9LFVaSVAuc2F2ZWQ9MCxVWklQLkYuX3dyaXRlQmxvY2s9ZnVuY3Rpb24oZSxyLHQsYSxpLHMsYyxsLHUpe3ZhciBwLGQsaCx5LEEsZyx2LEUsbSxJPVVaSVAuRi5VLFA9VVpJUC5GLl9wdXRzRixiPVVaSVAuRi5fcHV0c0U7SS5saHN0WzI1Nl0rKyxkPShwPVVaSVAuRi5nZXRUcmVlcygpKVswXSxoPXBbMV0seT1wWzJdLEE9cFszXSxnPXBbNF0sdj1wWzVdLEU9cFs2XSxtPXBbN107dmFyIFQ9MzIrKDA9PSh1KzMmNyk/MDo4LSh1KzMmNykpKyhjPDwzKSxTPWErVVpJUC5GLmNvbnRTaXplKEkuZmx0cmVlLEkubGhzdCkrVVpJUC5GLmNvbnRTaXplKEkuZmR0cmVlLEkuZGhzdCksUj1hK1VaSVAuRi5jb250U2l6ZShJLmx0cmVlLEkubGhzdCkrVVpJUC5GLmNvbnRTaXplKEkuZHRyZWUsSS5kaHN0KTtSKz0xNCszKnYrVVpJUC5GLmNvbnRTaXplKEkuaXRyZWUsSS5paHN0KSsoMipJLmloc3RbMTZdKzMqSS5paHN0WzE3XSs3KkkuaWhzdFsxOF0pO2Zvcih2YXIgXz0wO188Mjg2O18rKylJLmxoc3RbX109MDtmb3IoXz0wO188MzA7XysrKUkuZGhzdFtfXT0wO2ZvcihfPTA7XzwxOTtfKyspSS5paHN0W19dPTA7dmFyIFU9VDxTJiZUPFI/MDpTPFI/MToyO2lmKFAobCx1LGUpLFAobCx1KzEsVSksdSs9MywwPT1VKXtmb3IoOzAhPSg3JnUpOyl1Kys7dT1VWklQLkYuX2NvcHlFeGFjdChpLHMsYyxsLHUpfWVsc2V7dmFyIHcsTztpZigxPT1VJiYodz1JLmZsdHJlZSxPPUkuZmR0cmVlKSwyPT1VKXtVWklQLkYubWFrZUNvZGVzKEkubHRyZWUsZCksVVpJUC5GLnJldkNvZGVzKEkubHRyZWUsZCksVVpJUC5GLm1ha2VDb2RlcyhJLmR0cmVlLGgpLFVaSVAuRi5yZXZDb2RlcyhJLmR0cmVlLGgpLFVaSVAuRi5tYWtlQ29kZXMoSS5pdHJlZSx5KSxVWklQLkYucmV2Q29kZXMoSS5pdHJlZSx5KSx3PUkubHRyZWUsTz1JLmR0cmVlLGIobCx1LEEtMjU3KSxiKGwsdSs9NSxnLTEpLGIobCx1Kz01LHYtNCksdSs9NDtmb3IodmFyIEM9MDtDPHY7QysrKWIobCx1KzMqQyxJLml0cmVlWzErKEkub3JkcltDXTw8MSldKTt1Kz0zKnYsdT1VWklQLkYuX2NvZGVUaW55KEUsSS5pdHJlZSxsLHUpLHU9VVpJUC5GLl9jb2RlVGlueShtLEkuaXRyZWUsbCx1KX1mb3IodmFyICQ9cyxMPTA7TDx0O0wrPTIpe2Zvcih2YXIgeD1yW0xdLE09eD4+PjIzLEI9JCsoODM4ODYwNyZ4KTskPEI7KXU9VVpJUC5GLl93cml0ZUxpdChpWyQrK10sdyxsLHUpO2lmKDAhPU0pe3ZhciBEPXJbTCsxXSxHPUQ+PjE2LFY9RD4+OCYyNTUsaz0yNTUmRDtiKGwsdT1VWklQLkYuX3dyaXRlTGl0KDI1NytWLHcsbCx1KSxNLUkub2YwW1ZdKSx1Kz1JLmV4YltWXSxQKGwsdT1VWklQLkYuX3dyaXRlTGl0KGssTyxsLHUpLEctSS5kZjBba10pLHUrPUkuZHhiW2tdLCQrPU19fXU9VVpJUC5GLl93cml0ZUxpdCgyNTYsdyxsLHUpfXJldHVybiB1fSxVWklQLkYuX2NvcHlFeGFjdD1mdW5jdGlvbihlLHIsdCxhLGkpe3ZhciBzPWk+Pj4zO3JldHVybiBhW3NdPXQsYVtzKzFdPXQ+Pj44LGFbcysyXT0yNTUtYVtzXSxhW3MrM109MjU1LWFbcysxXSxzKz00LGEuc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLHIsdCkscyksaSsodCs0PDwzKX0sVVpJUC5GLmdldFRyZWVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVVaSVAuRi5VLHI9VVpJUC5GLl9odWZUcmVlKGUubGhzdCxlLmx0cmVlLDE1KSx0PVVaSVAuRi5faHVmVHJlZShlLmRoc3QsZS5kdHJlZSwxNSksYT1bXSxpPVVaSVAuRi5fbGVuQ29kZXMoZS5sdHJlZSxhKSxzPVtdLGM9VVpJUC5GLl9sZW5Db2RlcyhlLmR0cmVlLHMpLGw9MDtsPGEubGVuZ3RoO2wrPTIpZS5paHN0W2FbbF1dKys7Zm9yKGw9MDtsPHMubGVuZ3RoO2wrPTIpZS5paHN0W3NbbF1dKys7Zm9yKHZhciB1PVVaSVAuRi5faHVmVHJlZShlLmloc3QsZS5pdHJlZSw3KSxwPTE5O3A+NCYmMD09ZS5pdHJlZVsxKyhlLm9yZHJbcC0xXTw8MSldOylwLS07cmV0dXJuW3IsdCx1LGksYyxwLGEsc119LFVaSVAuRi5nZXRTZWNvbmQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtdLHQ9MDt0PGUubGVuZ3RoO3QrPTIpci5wdXNoKGVbdCsxXSk7cmV0dXJuIHJ9LFVaSVAuRi5ub25aZXJvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1cIlwiLHQ9MDt0PGUubGVuZ3RoO3QrPTIpMCE9ZVt0KzFdJiYocis9KHQ+PjEpK1wiLFwiKTtyZXR1cm4gcn0sVVpJUC5GLmNvbnRTaXplPWZ1bmN0aW9uKGUscil7Zm9yKHZhciB0PTAsYT0wO2E8ci5sZW5ndGg7YSsrKXQrPXJbYV0qZVsxKyhhPDwxKV07cmV0dXJuIHR9LFVaSVAuRi5fY29kZVRpbnk9ZnVuY3Rpb24oZSxyLHQsYSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKz0yKXt2YXIgcz1lW2ldLGM9ZVtpKzFdO2E9VVpJUC5GLl93cml0ZUxpdChzLHIsdCxhKTt2YXIgbD0xNj09cz8yOjE3PT1zPzM6NztzPjE1JiYoVVpJUC5GLl9wdXRzRSh0LGEsYyxsKSxhKz1sKX1yZXR1cm4gYX0sVVpJUC5GLl9sZW5Db2Rlcz1mdW5jdGlvbihlLHIpe2Zvcih2YXIgdD1lLmxlbmd0aDsyIT10JiYwPT1lW3QtMV07KXQtPTI7Zm9yKHZhciBhPTA7YTx0O2ErPTIpe3ZhciBpPWVbYSsxXSxzPWErMzx0P2VbYSszXTotMSxjPWErNTx0P2VbYSs1XTotMSxsPTA9PWE/LTE6ZVthLTFdO2lmKDA9PWkmJnM9PWkmJmM9PWkpe2Zvcih2YXIgdT1hKzU7dSsyPHQmJmVbdSsyXT09aTspdSs9MjsocD1NYXRoLm1pbih1KzEtYT4+PjEsMTM4KSk8MTE/ci5wdXNoKDE3LHAtMyk6ci5wdXNoKDE4LHAtMTEpLGErPTIqcC0yfWVsc2UgaWYoaT09bCYmcz09aSYmYz09aSl7Zm9yKHU9YSs1O3UrMjx0JiZlW3UrMl09PWk7KXUrPTI7dmFyIHA9TWF0aC5taW4odSsxLWE+Pj4xLDYpO3IucHVzaCgxNixwLTMpLGErPTIqcC0yfWVsc2Ugci5wdXNoKGksMCl9cmV0dXJuIHQ+Pj4xfSxVWklQLkYuX2h1ZlRyZWU9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhPVtdLGk9ZS5sZW5ndGgscz1yLmxlbmd0aCxjPTA7Zm9yKGM9MDtjPHM7Yys9MilyW2NdPTAscltjKzFdPTA7Zm9yKGM9MDtjPGk7YysrKTAhPWVbY10mJmEucHVzaCh7bGl0OmMsZjplW2NdfSk7dmFyIGw9YS5sZW5ndGgsdT1hLnNsaWNlKDApO2lmKDA9PWwpcmV0dXJuIDA7aWYoMT09bCl7dmFyIHA9YVswXS5saXQ7dT0wPT1wPzE6MDtyZXR1cm4gclsxKyhwPDwxKV09MSxyWzErKHU8PDEpXT0xLDF9YS5zb3J0KChmdW5jdGlvbihlLHIpe3JldHVybiBlLmYtci5mfSkpO3ZhciBkPWFbMF0saD1hWzFdLHk9MCxBPTEsZz0yO2ZvcihhWzBdPXtsaXQ6LTEsZjpkLmYraC5mLGw6ZCxyOmgsZDowfTtBIT1sLTE7KWQ9eSE9QSYmKGc9PWx8fGFbeV0uZjxhW2ddLmYpP2FbeSsrXTphW2crK10saD15IT1BJiYoZz09bHx8YVt5XS5mPGFbZ10uZik/YVt5KytdOmFbZysrXSxhW0ErK109e2xpdDotMSxmOmQuZitoLmYsbDpkLHI6aH07dmFyIHY9VVpJUC5GLnNldERlcHRoKGFbQS0xXSwwKTtmb3Iodj50JiYoVVpJUC5GLnJlc3RyaWN0RGVwdGgodSx0LHYpLHY9dCksYz0wO2M8bDtjKyspclsxKyh1W2NdLmxpdDw8MSldPXVbY10uZDtyZXR1cm4gdn0sVVpJUC5GLnNldERlcHRoPWZ1bmN0aW9uKGUscil7cmV0dXJuLTEhPWUubGl0PyhlLmQ9cixyKTpNYXRoLm1heChVWklQLkYuc2V0RGVwdGgoZS5sLHIrMSksVVpJUC5GLnNldERlcHRoKGUucixyKzEpKX0sVVpJUC5GLnJlc3RyaWN0RGVwdGg9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhPTAsaT0xPDx0LXIscz0wO2ZvcihlLnNvcnQoKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuZD09ZS5kP2UuZi1yLmY6ci5kLWUuZH0pKSxhPTA7YTxlLmxlbmd0aCYmZVthXS5kPnI7YSsrKXt2YXIgYz1lW2FdLmQ7ZVthXS5kPXIscys9aS0oMTw8dC1jKX1mb3Iocz4+Pj10LXI7cz4wOyl7KGM9ZVthXS5kKTxyPyhlW2FdLmQrKyxzLT0xPDxyLWMtMSk6YSsrfWZvcig7YT49MDthLS0pZVthXS5kPT1yJiZzPDAmJihlW2FdLmQtLSxzKyspOzAhPXMmJmNvbnNvbGUubG9nKFwiZGVidCBsZWZ0XCIpfSxVWklQLkYuX2dvb2RJbmRleD1mdW5jdGlvbihlLHIpe3ZhciB0PTA7cmV0dXJuIHJbMTZ8dF08PWUmJih0fD0xNikscls4fHRdPD1lJiYodHw9OCkscls0fHRdPD1lJiYodHw9NCksclsyfHRdPD1lJiYodHw9MiksclsxfHRdPD1lJiYodHw9MSksdH0sVVpJUC5GLl93cml0ZUxpdD1mdW5jdGlvbihlLHIsdCxhKXtyZXR1cm4gVVpJUC5GLl9wdXRzRih0LGEscltlPDwxXSksYStyWzErKGU8PDEpXX0sVVpJUC5GLmluZmxhdGU9ZnVuY3Rpb24oZSxyKXt2YXIgdD1VaW50OEFycmF5O2lmKDM9PWVbMF0mJjA9PWVbMV0pcmV0dXJuIHJ8fG5ldyB0KDApO3ZhciBhPVVaSVAuRixpPWEuX2JpdHNGLHM9YS5fYml0c0UsYz1hLl9kZWNvZGVUaW55LGw9YS5tYWtlQ29kZXMsdT1hLmNvZGVzMm1hcCxwPWEuX2dldDE3LGQ9YS5VLGg9bnVsbD09cjtoJiYocj1uZXcgdChlLmxlbmd0aD4+PjI8PDMpKTtmb3IodmFyIHksQSxnPTAsdj0wLEU9MCxtPTAsST0wLFA9MCxiPTAsVD0wLFM9MDswPT1nOylpZihnPWkoZSxTLDEpLHY9aShlLFMrMSwyKSxTKz0zLDAhPXYpe2lmKGgmJihyPVVaSVAuRi5fY2hlY2socixUKygxPDwxNykpKSwxPT12JiYoeT1kLmZsbWFwLEE9ZC5mZG1hcCxQPTUxMSxiPTMxKSwyPT12KXtFPXMoZSxTLDUpKzI1NyxtPXMoZSxTKzUsNSkrMSxJPXMoZSxTKzEwLDQpKzQsUys9MTQ7Zm9yKHZhciBSPTA7UjwzODtSKz0yKWQuaXRyZWVbUl09MCxkLml0cmVlW1IrMV09MDt2YXIgXz0xO2ZvcihSPTA7UjxJO1IrKyl7dmFyIFU9cyhlLFMrMypSLDMpO2QuaXRyZWVbMSsoZC5vcmRyW1JdPDwxKV09VSxVPl8mJihfPVUpfVMrPTMqSSxsKGQuaXRyZWUsXyksdShkLml0cmVlLF8sZC5pbWFwKSx5PWQubG1hcCxBPWQuZG1hcCxTPWMoZC5pbWFwLCgxPDxfKS0xLEUrbSxlLFMsZC50dHJlZSk7dmFyIHc9YS5fY29weU91dChkLnR0cmVlLDAsRSxkLmx0cmVlKTtQPSgxPDx3KS0xO3ZhciBPPWEuX2NvcHlPdXQoZC50dHJlZSxFLG0sZC5kdHJlZSk7Yj0oMTw8TyktMSxsKGQubHRyZWUsdyksdShkLmx0cmVlLHcseSksbChkLmR0cmVlLE8pLHUoZC5kdHJlZSxPLEEpfWZvcig7Oyl7dmFyIEM9eVtwKGUsUykmUF07Uys9MTUmQzt2YXIgJD1DPj4+NDtpZigkPj4+OD09MClyW1QrK109JDtlbHNle2lmKDI1Nj09JClicmVhazt2YXIgTD1UKyQtMjU0O2lmKCQ+MjY0KXt2YXIgeD1kLmxkZWZbJC0yNTddO0w9VCsoeD4+PjMpK3MoZSxTLDcmeCksUys9NyZ4fXZhciBNPUFbcChlLFMpJmJdO1MrPTE1Jk07dmFyIEI9TT4+PjQsRD1kLmRkZWZbQl0sRz0oRD4+PjQpK2koZSxTLDE1JkQpO2ZvcihTKz0xNSZELGgmJihyPVVaSVAuRi5fY2hlY2socixUKygxPDwxNykpKTtUPEw7KXJbVF09cltUKystR10scltUXT1yW1QrKy1HXSxyW1RdPXJbVCsrLUddLHJbVF09cltUKystR107VD1MfX19ZWxzZXswIT0oNyZTKSYmKFMrPTgtKDcmUykpO3ZhciBWPTQrKFM+Pj4zKSxrPWVbVi00XXxlW1YtM108PDg7aCYmKHI9VVpJUC5GLl9jaGVjayhyLFQraykpLHIuc2V0KG5ldyB0KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtWLGspLFQpLFM9VitrPDwzLFQrPWt9cmV0dXJuIHIubGVuZ3RoPT1UP3I6ci5zbGljZSgwLFQpfSxVWklQLkYuX2NoZWNrPWZ1bmN0aW9uKGUscil7dmFyIHQ9ZS5sZW5ndGg7aWYocjw9dClyZXR1cm4gZTt2YXIgYT1uZXcgVWludDhBcnJheShNYXRoLm1heCh0PDwxLHIpKTtyZXR1cm4gYS5zZXQoZSwwKSxhfSxVWklQLkYuX2RlY29kZVRpbnk9ZnVuY3Rpb24oZSxyLHQsYSxpLHMpe2Zvcih2YXIgYz1VWklQLkYuX2JpdHNFLGw9VVpJUC5GLl9nZXQxNyx1PTA7dTx0Oyl7dmFyIHA9ZVtsKGEsaSkmcl07aSs9MTUmcDt2YXIgZD1wPj4+NDtpZihkPD0xNSlzW3VdPWQsdSsrO2Vsc2V7dmFyIGg9MCx5PTA7MTY9PWQ/KHk9MytjKGEsaSwyKSxpKz0yLGg9c1t1LTFdKToxNz09ZD8oeT0zK2MoYSxpLDMpLGkrPTMpOjE4PT1kJiYoeT0xMStjKGEsaSw3KSxpKz03KTtmb3IodmFyIEE9dSt5O3U8QTspc1t1XT1oLHUrK319cmV0dXJuIGl9LFVaSVAuRi5fY29weU91dD1mdW5jdGlvbihlLHIsdCxhKXtmb3IodmFyIGk9MCxzPTAsYz1hLmxlbmd0aD4+PjE7czx0Oyl7dmFyIGw9ZVtzK3JdO2Fbczw8MV09MCxhWzErKHM8PDEpXT1sLGw+aSYmKGk9bCkscysrfWZvcig7czxjOylhW3M8PDFdPTAsYVsxKyhzPDwxKV09MCxzKys7cmV0dXJuIGl9LFVaSVAuRi5tYWtlQ29kZXM9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIHQsYSxpLHMsYz1VWklQLkYuVSxsPWUubGVuZ3RoLHU9Yy5ibF9jb3VudCxwPTA7cDw9cjtwKyspdVtwXT0wO2ZvcihwPTE7cDxsO3ArPTIpdVtlW3BdXSsrO3ZhciBkPWMubmV4dF9jb2RlO2Zvcih0PTAsdVswXT0wLGE9MTthPD1yO2ErKyl0PXQrdVthLTFdPDwxLGRbYV09dDtmb3IoaT0wO2k8bDtpKz0yKTAhPShzPWVbaSsxXSkmJihlW2ldPWRbc10sZFtzXSsrKX0sVVpJUC5GLmNvZGVzMm1hcD1mdW5jdGlvbihlLHIsdCl7Zm9yKHZhciBhPWUubGVuZ3RoLGk9VVpJUC5GLlUucmV2MTUscz0wO3M8YTtzKz0yKWlmKDAhPWVbcysxXSlmb3IodmFyIGM9cz4+MSxsPWVbcysxXSx1PWM8PDR8bCxwPXItbCxkPWVbc108PHAsaD1kKygxPDxwKTtkIT1oOyl7dFtpW2RdPj4+MTUtcl09dSxkKyt9fSxVWklQLkYucmV2Q29kZXM9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIHQ9VVpJUC5GLlUucmV2MTUsYT0xNS1yLGk9MDtpPGUubGVuZ3RoO2krPTIpe3ZhciBzPWVbaV08PHItZVtpKzFdO2VbaV09dFtzXT4+PmF9fSxVWklQLkYuX3B1dHNFPWZ1bmN0aW9uKGUscix0KXt0PDw9NyZyO3ZhciBhPXI+Pj4zO2VbYV18PXQsZVthKzFdfD10Pj4+OH0sVVpJUC5GLl9wdXRzRj1mdW5jdGlvbihlLHIsdCl7dDw8PTcmcjt2YXIgYT1yPj4+MztlW2FdfD10LGVbYSsxXXw9dD4+PjgsZVthKzJdfD10Pj4+MTZ9LFVaSVAuRi5fYml0c0U9ZnVuY3Rpb24oZSxyLHQpe3JldHVybihlW3I+Pj4zXXxlWzErKHI+Pj4zKV08PDgpPj4+KDcmcikmKDE8PHQpLTF9LFVaSVAuRi5fYml0c0Y9ZnVuY3Rpb24oZSxyLHQpe3JldHVybihlW3I+Pj4zXXxlWzErKHI+Pj4zKV08PDh8ZVsyKyhyPj4+MyldPDwxNik+Pj4oNyZyKSYoMTw8dCktMX0sVVpJUC5GLl9nZXQxNz1mdW5jdGlvbihlLHIpe3JldHVybihlW3I+Pj4zXXxlWzErKHI+Pj4zKV08PDh8ZVsyKyhyPj4+MyldPDwxNik+Pj4oNyZyKX0sVVpJUC5GLl9nZXQyNT1mdW5jdGlvbihlLHIpe3JldHVybihlW3I+Pj4zXXxlWzErKHI+Pj4zKV08PDh8ZVsyKyhyPj4+MyldPDwxNnxlWzMrKHI+Pj4zKV08PDI0KT4+Pig3JnIpfSxVWklQLkYuVT0ocj1VaW50MTZBcnJheSx0PVVpbnQzMkFycmF5LHtuZXh0X2NvZGU6bmV3IHIoMTYpLGJsX2NvdW50Om5ldyByKDE2KSxvcmRyOlsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxvZjA6WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsOTk5LDk5OSw5OTldLGV4YjpbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwLDAsMCwwXSxsZGVmOm5ldyByKDMyKSxkZjA6WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3Nyw2NTUzNSw2NTUzNV0sZHhiOlswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzLDAsMF0sZGRlZjpuZXcgdCgzMiksZmxtYXA6bmV3IHIoNTEyKSxmbHRyZWU6W10sZmRtYXA6bmV3IHIoMzIpLGZkdHJlZTpbXSxsbWFwOm5ldyByKDMyNzY4KSxsdHJlZTpbXSx0dHJlZTpbXSxkbWFwOm5ldyByKDMyNzY4KSxkdHJlZTpbXSxpbWFwOm5ldyByKDUxMiksaXRyZWU6W10scmV2MTU6bmV3IHIoMzI3NjgpLGxoc3Q6bmV3IHQoMjg2KSxkaHN0Om5ldyB0KDMwKSxpaHN0Om5ldyB0KDE5KSxsaXRzOm5ldyB0KDE1ZTMpLHN0cnQ6bmV3IHIoNjU1MzYpLHByZXY6bmV3IHIoMzI3NjgpfSksZnVuY3Rpb24oKXtmb3IodmFyIGU9VVpJUC5GLlUscj0wO3I8MzI3Njg7cisrKXt2YXIgdD1yO3Q9KDQyNzgyNTUzNjAmKHQ9KDQwNDIzMjIxNjAmKHQ9KDM0MzU5NzM4MzYmKHQ9KDI4NjMzMTE1MzAmdCk+Pj4xfCgxNDMxNjU1NzY1JnQpPDwxKSk+Pj4yfCg4NTg5OTM0NTkmdCk8PDIpKT4+PjR8KDI1MjY0NTEzNSZ0KTw8NCkpPj4+OHwoMTY3MTE5MzUmdCk8PDgsZS5yZXYxNVtyXT0odD4+PjE2fHQ8PDE2KT4+PjE3fWZ1bmN0aW9uIHB1c2hWKGUscix0KXtmb3IoOzAhPXItLTspZS5wdXNoKDAsdCl9Zm9yKHI9MDtyPDMyO3IrKyllLmxkZWZbcl09ZS5vZjBbcl08PDN8ZS5leGJbcl0sZS5kZGVmW3JdPWUuZGYwW3JdPDw0fGUuZHhiW3JdO3B1c2hWKGUuZmx0cmVlLDE0NCw4KSxwdXNoVihlLmZsdHJlZSwxMTIsOSkscHVzaFYoZS5mbHRyZWUsMjQsNykscHVzaFYoZS5mbHRyZWUsOCw4KSxVWklQLkYubWFrZUNvZGVzKGUuZmx0cmVlLDkpLFVaSVAuRi5jb2RlczJtYXAoZS5mbHRyZWUsOSxlLmZsbWFwKSxVWklQLkYucmV2Q29kZXMoZS5mbHRyZWUsOSkscHVzaFYoZS5mZHRyZWUsMzIsNSksVVpJUC5GLm1ha2VDb2RlcyhlLmZkdHJlZSw1KSxVWklQLkYuY29kZXMybWFwKGUuZmR0cmVlLDUsZS5mZG1hcCksVVpJUC5GLnJldkNvZGVzKGUuZmR0cmVlLDUpLHB1c2hWKGUuaXRyZWUsMTksMCkscHVzaFYoZS5sdHJlZSwyODYsMCkscHVzaFYoZS5kdHJlZSwzMCwwKSxwdXNoVihlLnR0cmVlLDMyMCwwKX0oKX0pKSxVWklQPU9iamVjdC5mcmVlemUoX21lcmdlTmFtZXNwYWNlcyh7X19wcm90b19fOm51bGwsZGVmYXVsdDpVWklQXzF9LFtVWklQXzFdKSksVVBORz17fSxOLFcsSDtVUE5HLnRvUkdCQTg9ZnVuY3Rpb24oZSl7dmFyIHI9ZS53aWR0aCx0PWUuaGVpZ2h0O2lmKG51bGw9PWUudGFicy5hY1RMKXJldHVybltVUE5HLnRvUkdCQTguZGVjb2RlSW1hZ2UoZS5kYXRhLHIsdCxlKS5idWZmZXJdO3ZhciBhPVtdO251bGw9PWUuZnJhbWVzWzBdLmRhdGEmJihlLmZyYW1lc1swXS5kYXRhPWUuZGF0YSk7Zm9yKHZhciBpPXIqdCo0LHM9bmV3IFVpbnQ4QXJyYXkoaSksYz1uZXcgVWludDhBcnJheShpKSxsPW5ldyBVaW50OEFycmF5KGkpLHU9MDt1PGUuZnJhbWVzLmxlbmd0aDt1Kyspe3ZhciBwPWUuZnJhbWVzW3VdLGQ9cC5yZWN0LngsaD1wLnJlY3QueSx5PXAucmVjdC53aWR0aCxBPXAucmVjdC5oZWlnaHQsZz1VUE5HLnRvUkdCQTguZGVjb2RlSW1hZ2UocC5kYXRhLHksQSxlKTtpZigwIT11KWZvcih2YXIgdj0wO3Y8aTt2KyspbFt2XT1zW3ZdO2lmKDA9PXAuYmxlbmQ/VVBORy5fY29weVRpbGUoZyx5LEEscyxyLHQsZCxoLDApOjE9PXAuYmxlbmQmJlVQTkcuX2NvcHlUaWxlKGcseSxBLHMscix0LGQsaCwxKSxhLnB1c2gocy5idWZmZXIuc2xpY2UoMCkpLDA9PXAuZGlzcG9zZSk7ZWxzZSBpZigxPT1wLmRpc3Bvc2UpVVBORy5fY29weVRpbGUoYyx5LEEscyxyLHQsZCxoLDApO2Vsc2UgaWYoMj09cC5kaXNwb3NlKWZvcih2PTA7djxpO3YrKylzW3ZdPWxbdl19cmV0dXJuIGF9LFVQTkcudG9SR0JBOC5kZWNvZGVJbWFnZT1mdW5jdGlvbihlLHIsdCxhKXt2YXIgaT1yKnQscz1VUE5HLmRlY29kZS5fZ2V0QlBQKGEpLGM9TWF0aC5jZWlsKHIqcy84KSxsPW5ldyBVaW50OEFycmF5KDQqaSksdT1uZXcgVWludDMyQXJyYXkobC5idWZmZXIpLHA9YS5jdHlwZSxkPWEuZGVwdGgsaD1VUE5HLl9iaW4ucmVhZFVzaG9ydDtpZig2PT1wKXt2YXIgeT1pPDwyO2lmKDg9PWQpZm9yKHZhciBBPTA7QTx5O0ErPTQpbFtBXT1lW0FdLGxbQSsxXT1lW0ErMV0sbFtBKzJdPWVbQSsyXSxsW0ErM109ZVtBKzNdO2lmKDE2PT1kKWZvcihBPTA7QTx5O0ErKylsW0FdPWVbQTw8MV19ZWxzZSBpZigyPT1wKXt2YXIgZz1hLnRhYnMudFJOUztpZihudWxsPT1nKXtpZig4PT1kKWZvcihBPTA7QTxpO0ErKyl7dmFyIHY9MypBO3VbQV09MjU1PDwyNHxlW3YrMl08PDE2fGVbdisxXTw8OHxlW3ZdfWlmKDE2PT1kKWZvcihBPTA7QTxpO0ErKyl7dj02KkE7dVtBXT0yNTU8PDI0fGVbdis0XTw8MTZ8ZVt2KzJdPDw4fGVbdl19fWVsc2V7dmFyIEU9Z1swXSxtPWdbMV0sST1nWzJdO2lmKDg9PWQpZm9yKEE9MDtBPGk7QSsrKXt2YXIgUD1BPDwyO3Y9MypBO3VbQV09MjU1PDwyNHxlW3YrMl08PDE2fGVbdisxXTw8OHxlW3ZdLGVbdl09PUUmJmVbdisxXT09bSYmZVt2KzJdPT1JJiYobFtQKzNdPTApfWlmKDE2PT1kKWZvcihBPTA7QTxpO0ErKyl7UD1BPDwyLHY9NipBO3VbQV09MjU1PDwyNHxlW3YrNF08PDE2fGVbdisyXTw8OHxlW3ZdLGgoZSx2KT09RSYmaChlLHYrMik9PW0mJmgoZSx2KzQpPT1JJiYobFtQKzNdPTApfX19ZWxzZSBpZigzPT1wKXt2YXIgYj1hLnRhYnMuUExURSxUPWEudGFicy50Uk5TLFM9VD9ULmxlbmd0aDowO2lmKDE9PWQpZm9yKHZhciBSPTA7Ujx0O1IrKyl7dmFyIF89UipjLFU9UipyO2ZvcihBPTA7QTxyO0ErKyl7UD1VK0E8PDI7dmFyIHc9MyooTz1lW18rKEE+PjMpXT4+Ny0oKDcmQSk8PDApJjEpO2xbUF09Ylt3XSxsW1ArMV09Ylt3KzFdLGxbUCsyXT1iW3crMl0sbFtQKzNdPU88Uz9UW09dOjI1NX19aWYoMj09ZClmb3IoUj0wO1I8dDtSKyspZm9yKF89UipjLFU9UipyLEE9MDtBPHI7QSsrKXtQPVUrQTw8Mix3PTMqKE89ZVtfKyhBPj4yKV0+PjYtKCgzJkEpPDwxKSYzKTtsW1BdPWJbd10sbFtQKzFdPWJbdysxXSxsW1ArMl09Ylt3KzJdLGxbUCszXT1PPFM/VFtPXToyNTV9aWYoND09ZClmb3IoUj0wO1I8dDtSKyspZm9yKF89UipjLFU9UipyLEE9MDtBPHI7QSsrKXtQPVUrQTw8Mix3PTMqKE89ZVtfKyhBPj4xKV0+PjQtKCgxJkEpPDwyKSYxNSk7bFtQXT1iW3ddLGxbUCsxXT1iW3crMV0sbFtQKzJdPWJbdysyXSxsW1ArM109TzxTP1RbT106MjU1fWlmKDg9PWQpZm9yKEE9MDtBPGk7QSsrKXt2YXIgTztQPUE8PDIsdz0zKihPPWVbQV0pO2xbUF09Ylt3XSxsW1ArMV09Ylt3KzFdLGxbUCsyXT1iW3crMl0sbFtQKzNdPU88Uz9UW09dOjI1NX19ZWxzZSBpZig0PT1wKXtpZig4PT1kKWZvcihBPTA7QTxpO0ErKyl7UD1BPDwyO3ZhciBDPWVbJD1BPDwxXTtsW1BdPUMsbFtQKzFdPUMsbFtQKzJdPUMsbFtQKzNdPWVbJCsxXX1pZigxNj09ZClmb3IoQT0wO0E8aTtBKyspe3ZhciAkO1A9QTw8MixDPWVbJD1BPDwyXTtsW1BdPUMsbFtQKzFdPUMsbFtQKzJdPUMsbFtQKzNdPWVbJCsyXX19ZWxzZSBpZigwPT1wKWZvcihFPWEudGFicy50Uk5TP2EudGFicy50Uk5TOi0xLFI9MDtSPHQ7UisrKXt2YXIgTD1SKmMseD1SKnI7aWYoMT09ZClmb3IodmFyIE09MDtNPHI7TSsrKXt2YXIgQj0oQz0yNTUqKGVbTCsoTT4+PjMpXT4+PjctKDcmTSkmMSkpPT0yNTUqRT8wOjI1NTt1W3grTV09Qjw8MjR8Qzw8MTZ8Qzw8OHxDfWVsc2UgaWYoMj09ZClmb3IoTT0wO008cjtNKyspe0I9KEM9ODUqKGVbTCsoTT4+PjIpXT4+PjYtKCgzJk0pPDwxKSYzKSk9PTg1KkU/MDoyNTU7dVt4K01dPUI8PDI0fEM8PDE2fEM8PDh8Q31lbHNlIGlmKDQ9PWQpZm9yKE09MDtNPHI7TSsrKXtCPShDPTE3KihlW0wrKE0+Pj4xKV0+Pj40LSgoMSZNKTw8MikmMTUpKT09MTcqRT8wOjI1NTt1W3grTV09Qjw8MjR8Qzw8MTZ8Qzw8OHxDfWVsc2UgaWYoOD09ZClmb3IoTT0wO008cjtNKyspe0I9KEM9ZVtMK01dKT09RT8wOjI1NTt1W3grTV09Qjw8MjR8Qzw8MTZ8Qzw8OHxDfWVsc2UgaWYoMTY9PWQpZm9yKE09MDtNPHI7TSsrKXtDPWVbTCsoTTw8MSldLEI9aChlLEwrKE08PEEpKT09RT8wOjI1NTt1W3grTV09Qjw8MjR8Qzw8MTZ8Qzw8OHxDfX1yZXR1cm4gbH0sVVBORy5kZWNvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciByLHQ9bmV3IFVpbnQ4QXJyYXkoZSksYT04LGk9VVBORy5fYmluLHM9aS5yZWFkVXNob3J0LGM9aS5yZWFkVWludCxsPXt0YWJzOnt9LGZyYW1lczpbXX0sdT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCkscD0wLGQ9MCxoPVsxMzcsODAsNzgsNzEsMTMsMTAsMjYsMTBdLHk9MDt5PDg7eSsrKWlmKHRbeV0hPWhbeV0pdGhyb3dcIlRoZSBpbnB1dCBpcyBub3QgYSBQTkcgZmlsZSFcIjtmb3IoO2E8dC5sZW5ndGg7KXt2YXIgQT1pLnJlYWRVaW50KHQsYSk7YSs9NDt2YXIgZz1pLnJlYWRBU0NJSSh0LGEsNCk7aWYoYSs9NCxcIklIRFJcIj09ZylVUE5HLmRlY29kZS5fSUhEUih0LGEsbCk7ZWxzZSBpZihcIkNnQklcIj09ZylsLnRhYnNbZ109dC5zbGljZShhLGErNCk7ZWxzZSBpZihcIklEQVRcIj09Zyl7Zm9yKHk9MDt5PEE7eSsrKXVbcCt5XT10W2EreV07cCs9QX1lbHNlIGlmKFwiYWNUTFwiPT1nKWwudGFic1tnXT17bnVtX2ZyYW1lczpjKHQsYSksbnVtX3BsYXlzOmModCxhKzQpfSxyPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtlbHNlIGlmKFwiZmNUTFwiPT1nKXt2YXIgdjtpZigwIT1kKSh2PWwuZnJhbWVzW2wuZnJhbWVzLmxlbmd0aC0xXSkuZGF0YT1VUE5HLmRlY29kZS5fZGVjb21wcmVzcyhsLHIuc2xpY2UoMCxkKSx2LnJlY3Qud2lkdGgsdi5yZWN0LmhlaWdodCksZD0wO3ZhciBFPXt4OmModCxhKzEyKSx5OmModCxhKzE2KSx3aWR0aDpjKHQsYSs0KSxoZWlnaHQ6Yyh0LGErOCl9LG09cyh0LGErMjIpO209cyh0LGErMjApLygwPT1tPzEwMDptKTt2YXIgST17cmVjdDpFLGRlbGF5Ok1hdGgucm91bmQoMWUzKm0pLGRpc3Bvc2U6dFthKzI0XSxibGVuZDp0W2ErMjVdfTtsLmZyYW1lcy5wdXNoKEkpfWVsc2UgaWYoXCJmZEFUXCI9PWcpe2Zvcih5PTA7eTxBLTQ7eSsrKXJbZCt5XT10W2EreSs0XTtkKz1BLTR9ZWxzZSBpZihcInBIWXNcIj09ZylsLnRhYnNbZ109W2kucmVhZFVpbnQodCxhKSxpLnJlYWRVaW50KHQsYSs0KSx0W2ErOF1dO2Vsc2UgaWYoXCJjSFJNXCI9PWcpe2wudGFic1tnXT1bXTtmb3IoeT0wO3k8ODt5KyspbC50YWJzW2ddLnB1c2goaS5yZWFkVWludCh0LGErNCp5KSl9ZWxzZSBpZihcInRFWHRcIj09Z3x8XCJ6VFh0XCI9PWcpe251bGw9PWwudGFic1tnXSYmKGwudGFic1tnXT17fSk7dmFyIFA9aS5uZXh0WmVybyh0LGEpLGI9aS5yZWFkQVNDSUkodCxhLFAtYSksVD1hK0EtUC0xO2lmKFwidEVYdFwiPT1nKV89aS5yZWFkQVNDSUkodCxQKzEsVCk7ZWxzZXt2YXIgUz1VUE5HLmRlY29kZS5faW5mbGF0ZSh0LnNsaWNlKFArMixQKzIrVCkpO189aS5yZWFkVVRGOChTLDAsUy5sZW5ndGgpfWwudGFic1tnXVtiXT1ffWVsc2UgaWYoXCJpVFh0XCI9PWcpe251bGw9PWwudGFic1tnXSYmKGwudGFic1tnXT17fSk7UD0wO3ZhciBSPWE7UD1pLm5leHRaZXJvKHQsUik7Yj1pLnJlYWRBU0NJSSh0LFIsUC1SKTt2YXIgXyxVPXRbUj1QKzFdO3RbUisxXSxSKz0yLFA9aS5uZXh0WmVybyh0LFIpLGkucmVhZEFTQ0lJKHQsUixQLVIpLFI9UCsxLFA9aS5uZXh0WmVybyh0LFIpLGkucmVhZFVURjgodCxSLFAtUik7VD1BLSgoUj1QKzEpLWEpO2lmKDA9PVUpXz1pLnJlYWRVVEY4KHQsUixUKTtlbHNle1M9VVBORy5kZWNvZGUuX2luZmxhdGUodC5zbGljZShSLFIrVCkpO189aS5yZWFkVVRGOChTLDAsUy5sZW5ndGgpfWwudGFic1tnXVtiXT1ffWVsc2UgaWYoXCJQTFRFXCI9PWcpbC50YWJzW2ddPWkucmVhZEJ5dGVzKHQsYSxBKTtlbHNlIGlmKFwiaElTVFwiPT1nKXt2YXIgdz1sLnRhYnMuUExURS5sZW5ndGgvMztsLnRhYnNbZ109W107Zm9yKHk9MDt5PHc7eSsrKWwudGFic1tnXS5wdXNoKHModCxhKzIqeSkpfWVsc2UgaWYoXCJ0Uk5TXCI9PWcpMz09bC5jdHlwZT9sLnRhYnNbZ109aS5yZWFkQnl0ZXModCxhLEEpOjA9PWwuY3R5cGU/bC50YWJzW2ddPXModCxhKToyPT1sLmN0eXBlJiYobC50YWJzW2ddPVtzKHQsYSkscyh0LGErMikscyh0LGErNCldKTtlbHNlIGlmKFwiZ0FNQVwiPT1nKWwudGFic1tnXT1pLnJlYWRVaW50KHQsYSkvMWU1O2Vsc2UgaWYoXCJzUkdCXCI9PWcpbC50YWJzW2ddPXRbYV07ZWxzZSBpZihcImJLR0RcIj09ZykwPT1sLmN0eXBlfHw0PT1sLmN0eXBlP2wudGFic1tnXT1bcyh0LGEpXToyPT1sLmN0eXBlfHw2PT1sLmN0eXBlP2wudGFic1tnXT1bcyh0LGEpLHModCxhKzIpLHModCxhKzQpXTozPT1sLmN0eXBlJiYobC50YWJzW2ddPXRbYV0pO2Vsc2UgaWYoXCJJRU5EXCI9PWcpYnJlYWs7YSs9QSxpLnJlYWRVaW50KHQsYSksYSs9NH0wIT1kJiYoKHY9bC5mcmFtZXNbbC5mcmFtZXMubGVuZ3RoLTFdKS5kYXRhPVVQTkcuZGVjb2RlLl9kZWNvbXByZXNzKGwsci5zbGljZSgwLGQpLHYucmVjdC53aWR0aCx2LnJlY3QuaGVpZ2h0KSxkPTApO3JldHVybiBsLmRhdGE9VVBORy5kZWNvZGUuX2RlY29tcHJlc3MobCx1LGwud2lkdGgsbC5oZWlnaHQpLGRlbGV0ZSBsLmNvbXByZXNzLGRlbGV0ZSBsLmludGVybGFjZSxkZWxldGUgbC5maWx0ZXIsbH0sVVBORy5kZWNvZGUuX2RlY29tcHJlc3M9ZnVuY3Rpb24oZSxyLHQsYSl7dmFyIGk9VVBORy5kZWNvZGUuX2dldEJQUChlKSxzPU1hdGguY2VpbCh0KmkvOCksYz1uZXcgVWludDhBcnJheSgocysxK2UuaW50ZXJsYWNlKSphKTtyZXR1cm4gcj1lLnRhYnMuQ2dCST9VUE5HLmluZmxhdGVSYXcocixjKTpVUE5HLmRlY29kZS5faW5mbGF0ZShyLGMpLDA9PWUuaW50ZXJsYWNlP3I9VVBORy5kZWNvZGUuX2ZpbHRlclplcm8ocixlLDAsdCxhKToxPT1lLmludGVybGFjZSYmKHI9VVBORy5kZWNvZGUuX3JlYWRJbnRlcmxhY2UocixlKSkscn0sVVBORy5kZWNvZGUuX2luZmxhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gVVBORy5pbmZsYXRlUmF3KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLDIsZS5sZW5ndGgtNikscil9LFVQTkcuaW5mbGF0ZVJhdz0oSD17fSxILkg9e30sSC5ILk49ZnVuY3Rpb24oZSxyKXt2YXIgdCxhLGk9VWludDhBcnJheSxzPTAsYz0wLGw9MCx1PTAscD0wLGQ9MCxoPTAseT0wLEE9MDtpZigzPT1lWzBdJiYwPT1lWzFdKXJldHVybiByfHxuZXcgaSgwKTt2YXIgZz1ILkgsdj1nLmIsRT1nLmUsbT1nLlIsST1nLm4sUD1nLkEsYj1nLlosVD1nLm0sUz1udWxsPT1yO2ZvcihTJiYocj1uZXcgaShlLmxlbmd0aD4+PjI8PDUpKTswPT1zOylpZihzPXYoZSxBLDEpLGM9dihlLEErMSwyKSxBKz0zLDAhPWMpe2lmKFMmJihyPUguSC5XKHIseSsoMTw8MTcpKSksMT09YyYmKHQ9VC5KLGE9VC5oLGQ9NTExLGg9MzEpLDI9PWMpe2w9RShlLEEsNSkrMjU3LHU9RShlLEErNSw1KSsxLHA9RShlLEErMTAsNCkrNCxBKz0xNDtmb3IodmFyIFI9MSxfPTA7XzwzODtfKz0yKVQuUVtfXT0wLFQuUVtfKzFdPTA7Zm9yKF89MDtfPHA7XysrKXt2YXIgVT1FKGUsQSszKl8sMyk7VC5RWzErKFQuWFtfXTw8MSldPVUsVT5SJiYoUj1VKX1BKz0zKnAsSShULlEsUiksUChULlEsUixULnUpLHQ9VC53LGE9VC5kLEE9bShULnUsKDE8PFIpLTEsbCt1LGUsQSxULnYpO3ZhciB3PWcuVihULnYsMCxsLFQuQyk7ZD0oMTw8dyktMTt2YXIgTz1nLlYoVC52LGwsdSxULkQpO2g9KDE8PE8pLTEsSShULkMsdyksUChULkMsdyx0KSxJKFQuRCxPKSxQKFQuRCxPLGEpfWZvcig7Oyl7dmFyIEM9dFtiKGUsQSkmZF07QSs9MTUmQzt2YXIgJD1DPj4+NDtpZigkPj4+OD09MClyW3krK109JDtlbHNle2lmKDI1Nj09JClicmVhazt2YXIgTD15KyQtMjU0O2lmKCQ+MjY0KXt2YXIgeD1ULnFbJC0yNTddO0w9eSsoeD4+PjMpK0UoZSxBLDcmeCksQSs9NyZ4fXZhciBNPWFbYihlLEEpJmhdO0ErPTE1Jk07dmFyIEI9TT4+PjQsRD1ULmNbQl0sRz0oRD4+PjQpK3YoZSxBLDE1JkQpO2ZvcihBKz0xNSZEO3k8TDspclt5XT1yW3krKy1HXSxyW3ldPXJbeSsrLUddLHJbeV09clt5KystR10sclt5XT1yW3krKy1HXTt5PUx9fX1lbHNlezAhPSg3JkEpJiYoQSs9OC0oNyZBKSk7dmFyIFY9NCsoQT4+PjMpLGs9ZVtWLTRdfGVbVi0zXTw8ODtTJiYocj1ILkguVyhyLHkraykpLHIuc2V0KG5ldyBpKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtWLGspLHkpLEE9VitrPDwzLHkrPWt9cmV0dXJuIHIubGVuZ3RoPT15P3I6ci5zbGljZSgwLHkpfSxILkguVz1mdW5jdGlvbihlLHIpe3ZhciB0PWUubGVuZ3RoO2lmKHI8PXQpcmV0dXJuIGU7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodDw8MSk7cmV0dXJuIGEuc2V0KGUsMCksYX0sSC5ILlI9ZnVuY3Rpb24oZSxyLHQsYSxpLHMpe2Zvcih2YXIgYz1ILkguZSxsPUguSC5aLHU9MDt1PHQ7KXt2YXIgcD1lW2woYSxpKSZyXTtpKz0xNSZwO3ZhciBkPXA+Pj40O2lmKGQ8PTE1KXNbdV09ZCx1Kys7ZWxzZXt2YXIgaD0wLHk9MDsxNj09ZD8oeT0zK2MoYSxpLDIpLGkrPTIsaD1zW3UtMV0pOjE3PT1kPyh5PTMrYyhhLGksMyksaSs9Myk6MTg9PWQmJih5PTExK2MoYSxpLDcpLGkrPTcpO2Zvcih2YXIgQT11K3k7dTxBOylzW3VdPWgsdSsrfX1yZXR1cm4gaX0sSC5ILlY9ZnVuY3Rpb24oZSxyLHQsYSl7Zm9yKHZhciBpPTAscz0wLGM9YS5sZW5ndGg+Pj4xO3M8dDspe3ZhciBsPWVbcytyXTthW3M8PDFdPTAsYVsxKyhzPDwxKV09bCxsPmkmJihpPWwpLHMrK31mb3IoO3M8YzspYVtzPDwxXT0wLGFbMSsoczw8MSldPTAscysrO3JldHVybiBpfSxILkgubj1mdW5jdGlvbihlLHIpe2Zvcih2YXIgdCxhLGkscyxjPUguSC5tLGw9ZS5sZW5ndGgsdT1jLmoscD0wO3A8PXI7cCsrKXVbcF09MDtmb3IocD0xO3A8bDtwKz0yKXVbZVtwXV0rKzt2YXIgZD1jLks7Zm9yKHQ9MCx1WzBdPTAsYT0xO2E8PXI7YSsrKXQ9dCt1W2EtMV08PDEsZFthXT10O2ZvcihpPTA7aTxsO2krPTIpMCE9KHM9ZVtpKzFdKSYmKGVbaV09ZFtzXSxkW3NdKyspfSxILkguQT1mdW5jdGlvbihlLHIsdCl7Zm9yKHZhciBhPWUubGVuZ3RoLGk9SC5ILm0ucixzPTA7czxhO3MrPTIpaWYoMCE9ZVtzKzFdKWZvcih2YXIgYz1zPj4xLGw9ZVtzKzFdLHU9Yzw8NHxsLHA9ci1sLGQ9ZVtzXTw8cCxoPWQrKDE8PHApO2QhPWg7KXRbaVtkXT4+PjE1LXJdPXUsZCsrfSxILkgubD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgdD1ILkgubS5yLGE9MTUtcixpPTA7aTxlLmxlbmd0aDtpKz0yKXt2YXIgcz1lW2ldPDxyLWVbaSsxXTtlW2ldPXRbc10+Pj5hfX0sSC5ILk09ZnVuY3Rpb24oZSxyLHQpe3Q8PD03JnI7dmFyIGE9cj4+PjM7ZVthXXw9dCxlW2ErMV18PXQ+Pj44fSxILkguST1mdW5jdGlvbihlLHIsdCl7dDw8PTcmcjt2YXIgYT1yPj4+MztlW2FdfD10LGVbYSsxXXw9dD4+PjgsZVthKzJdfD10Pj4+MTZ9LEguSC5lPWZ1bmN0aW9uKGUscix0KXtyZXR1cm4oZVtyPj4+M118ZVsxKyhyPj4+MyldPDw4KT4+Pig3JnIpJigxPDx0KS0xfSxILkguYj1mdW5jdGlvbihlLHIsdCl7cmV0dXJuKGVbcj4+PjNdfGVbMSsocj4+PjMpXTw8OHxlWzIrKHI+Pj4zKV08PDE2KT4+Pig3JnIpJigxPDx0KS0xfSxILkguWj1mdW5jdGlvbihlLHIpe3JldHVybihlW3I+Pj4zXXxlWzErKHI+Pj4zKV08PDh8ZVsyKyhyPj4+MyldPDwxNik+Pj4oNyZyKX0sSC5ILmk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZVtyPj4+M118ZVsxKyhyPj4+MyldPDw4fGVbMisocj4+PjMpXTw8MTZ8ZVszKyhyPj4+MyldPDwyNCk+Pj4oNyZyKX0sSC5ILm09KE49VWludDE2QXJyYXksVz1VaW50MzJBcnJheSx7SzpuZXcgTigxNiksajpuZXcgTigxNiksWDpbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sUzpbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCw5OTksOTk5LDk5OV0sVDpbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwLDAsMCwwXSxxOm5ldyBOKDMyKSxwOlsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsNjU1MzUsNjU1MzVdLHo6WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSxjOm5ldyBXKDMyKSxKOm5ldyBOKDUxMiksXzpbXSxoOm5ldyBOKDMyKSwkOltdLHc6bmV3IE4oMzI3NjgpLEM6W10sdjpbXSxkOm5ldyBOKDMyNzY4KSxEOltdLHU6bmV3IE4oNTEyKSxROltdLHI6bmV3IE4oMzI3NjgpLHM6bmV3IFcoMjg2KSxZOm5ldyBXKDMwKSxhOm5ldyBXKDE5KSx0Om5ldyBXKDE1ZTMpLGs6bmV3IE4oNjU1MzYpLGc6bmV3IE4oMzI3NjgpfSksZnVuY3Rpb24oKXtmb3IodmFyIGU9SC5ILm0scj0wO3I8MzI3Njg7cisrKXt2YXIgdD1yO3Q9KDQyNzgyNTUzNjAmKHQ9KDQwNDIzMjIxNjAmKHQ9KDM0MzU5NzM4MzYmKHQ9KDI4NjMzMTE1MzAmdCk+Pj4xfCgxNDMxNjU1NzY1JnQpPDwxKSk+Pj4yfCg4NTg5OTM0NTkmdCk8PDIpKT4+PjR8KDI1MjY0NTEzNSZ0KTw8NCkpPj4+OHwoMTY3MTE5MzUmdCk8PDgsZS5yW3JdPSh0Pj4+MTZ8dDw8MTYpPj4+MTd9ZnVuY3Rpb24gbihlLHIsdCl7Zm9yKDswIT1yLS07KWUucHVzaCgwLHQpfWZvcihyPTA7cjwzMjtyKyspZS5xW3JdPWUuU1tyXTw8M3xlLlRbcl0sZS5jW3JdPWUucFtyXTw8NHxlLnpbcl07bihlLl8sMTQ0LDgpLG4oZS5fLDExMiw5KSxuKGUuXywyNCw3KSxuKGUuXyw4LDgpLEguSC5uKGUuXyw5KSxILkguQShlLl8sOSxlLkopLEguSC5sKGUuXyw5KSxuKGUuJCwzMiw1KSxILkgubihlLiQsNSksSC5ILkEoZS4kLDUsZS5oKSxILkgubChlLiQsNSksbihlLlEsMTksMCksbihlLkMsMjg2LDApLG4oZS5ELDMwLDApLG4oZS52LDMyMCwwKX0oKSxILkguTiksVVBORy5kZWNvZGUuX3JlYWRJbnRlcmxhY2U9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIHQ9ci53aWR0aCxhPXIuaGVpZ2h0LGk9VVBORy5kZWNvZGUuX2dldEJQUChyKSxzPWk+PjMsYz1NYXRoLmNlaWwodCppLzgpLGw9bmV3IFVpbnQ4QXJyYXkoYSpjKSx1PTAscD1bMCwwLDQsMCwyLDAsMV0sZD1bMCw0LDAsMiwwLDEsMF0saD1bOCw4LDgsNCw0LDIsMl0seT1bOCw4LDQsNCwyLDIsMV0sQT0wO0E8Nzspe2Zvcih2YXIgZz1oW0FdLHY9eVtBXSxFPTAsbT0wLEk9cFtBXTtJPGE7KUkrPWcsbSsrO2Zvcih2YXIgUD1kW0FdO1A8dDspUCs9dixFKys7dmFyIGI9TWF0aC5jZWlsKEUqaS84KTtVUE5HLmRlY29kZS5fZmlsdGVyWmVybyhlLHIsdSxFLG0pO2Zvcih2YXIgVD0wLFM9cFtBXTtTPGE7KXtmb3IodmFyIFI9ZFtBXSxfPXUrVCpiPDwzO1I8dDspe3ZhciBVO2lmKDE9PWkpVT0oVT1lW18+PjNdKT4+Ny0oNyZfKSYxLGxbUypjKyhSPj4zKV18PVU8PDctKCg3JlIpPDwwKTtpZigyPT1pKVU9KFU9ZVtfPj4zXSk+PjYtKDcmXykmMyxsW1MqYysoUj4+MildfD1VPDw2LSgoMyZSKTw8MSk7aWYoND09aSlVPShVPWVbXz4+M10pPj40LSg3Jl8pJjE1LGxbUypjKyhSPj4xKV18PVU8PDQtKCgxJlIpPDwyKTtpZihpPj04KWZvcih2YXIgdz1TKmMrUipzLE89MDtPPHM7TysrKWxbdytPXT1lWyhfPj4zKStPXTtfKz1pLFIrPXZ9VCsrLFMrPWd9RSptIT0wJiYodSs9bSooMStiKSksQSs9MX1yZXR1cm4gbH0sVVBORy5kZWNvZGUuX2dldEJQUD1mdW5jdGlvbihlKXtyZXR1cm5bMSxudWxsLDMsMSwyLG51bGwsNF1bZS5jdHlwZV0qZS5kZXB0aH0sVVBORy5kZWNvZGUuX2ZpbHRlclplcm89ZnVuY3Rpb24oZSxyLHQsYSxpKXt2YXIgcz1VUE5HLmRlY29kZS5fZ2V0QlBQKHIpLGM9TWF0aC5jZWlsKGEqcy84KSxsPVVQTkcuZGVjb2RlLl9wYWV0aDtzPU1hdGguY2VpbChzLzgpO3ZhciB1PTAscD0xLGQ9ZVt0XSxoPTA7aWYoZD4xJiYoZVt0XT1bMCwwLDFdW2QtMl0pLDM9PWQpZm9yKGg9cztoPGM7aCsrKWVbaCsxXT1lW2grMV0rKGVbaCsxLXNdPj4+MSkmMjU1O2Zvcih2YXIgeT0wO3k8aTt5KyspaWYoaD0wLDA9PShkPWVbKHA9KHU9dCt5KmMpK3krMSktMV0pKWZvcig7aDxjO2grKyllW3UraF09ZVtwK2hdO2Vsc2UgaWYoMT09ZCl7Zm9yKDtoPHM7aCsrKWVbdStoXT1lW3AraF07Zm9yKDtoPGM7aCsrKWVbdStoXT1lW3AraF0rZVt1K2gtc119ZWxzZSBpZigyPT1kKWZvcig7aDxjO2grKyllW3UraF09ZVtwK2hdK2VbdStoLWNdO2Vsc2UgaWYoMz09ZCl7Zm9yKDtoPHM7aCsrKWVbdStoXT1lW3AraF0rKGVbdStoLWNdPj4+MSk7Zm9yKDtoPGM7aCsrKWVbdStoXT1lW3AraF0rKGVbdStoLWNdK2VbdStoLXNdPj4+MSl9ZWxzZXtmb3IoO2g8cztoKyspZVt1K2hdPWVbcCtoXStsKDAsZVt1K2gtY10sMCk7Zm9yKDtoPGM7aCsrKWVbdStoXT1lW3AraF0rbChlW3UraC1zXSxlW3UraC1jXSxlW3UraC1zLWNdKX1yZXR1cm4gZX0sVVBORy5kZWNvZGUuX3BhZXRoPWZ1bmN0aW9uKGUscix0KXt2YXIgYT1lK3ItdCxpPWEtZSxzPWEtcixjPWEtdDtyZXR1cm4gaSppPD1zKnMmJmkqaTw9YypjP2U6cypzPD1jKmM/cjp0fSxVUE5HLmRlY29kZS5fSUhEUj1mdW5jdGlvbihlLHIsdCl7dmFyIGE9VVBORy5fYmluO3Qud2lkdGg9YS5yZWFkVWludChlLHIpLHIrPTQsdC5oZWlnaHQ9YS5yZWFkVWludChlLHIpLHIrPTQsdC5kZXB0aD1lW3JdLHIrKyx0LmN0eXBlPWVbcl0scisrLHQuY29tcHJlc3M9ZVtyXSxyKyssdC5maWx0ZXI9ZVtyXSxyKyssdC5pbnRlcmxhY2U9ZVtyXSxyKyt9LFVQTkcuX2Jpbj17bmV4dFplcm86ZnVuY3Rpb24gbmV4dFplcm8oZSxyKXtmb3IoOzAhPWVbcl07KXIrKztyZXR1cm4gcn0scmVhZFVzaG9ydDpmdW5jdGlvbiByZWFkVXNob3J0KGUscil7cmV0dXJuIGVbcl08PDh8ZVtyKzFdfSx3cml0ZVVzaG9ydDpmdW5jdGlvbiB3cml0ZVVzaG9ydChlLHIsdCl7ZVtyXT10Pj44JjI1NSxlW3IrMV09MjU1JnR9LHJlYWRVaW50OmZ1bmN0aW9uIHJlYWRVaW50KGUscil7cmV0dXJuIDE2Nzc3MjE2KmVbcl0rKGVbcisxXTw8MTZ8ZVtyKzJdPDw4fGVbciszXSl9LHdyaXRlVWludDpmdW5jdGlvbiB3cml0ZVVpbnQoZSxyLHQpe2Vbcl09dD4+MjQmMjU1LGVbcisxXT10Pj4xNiYyNTUsZVtyKzJdPXQ+PjgmMjU1LGVbciszXT0yNTUmdH0scmVhZEFTQ0lJOmZ1bmN0aW9uIHJlYWRBU0NJSShlLHIsdCl7Zm9yKHZhciBhPVwiXCIsaT0wO2k8dDtpKyspYSs9U3RyaW5nLmZyb21DaGFyQ29kZShlW3IraV0pO3JldHVybiBhfSx3cml0ZUFTQ0lJOmZ1bmN0aW9uIHdyaXRlQVNDSUkoZSxyLHQpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWVbcithXT10LmNoYXJDb2RlQXQoYSl9LHJlYWRCeXRlczpmdW5jdGlvbiByZWFkQnl0ZXMoZSxyLHQpe2Zvcih2YXIgYT1bXSxpPTA7aTx0O2krKylhLnB1c2goZVtyK2ldKTtyZXR1cm4gYX0scGFkOmZ1bmN0aW9uIHBhZChlKXtyZXR1cm4gZS5sZW5ndGg8Mj9cIjBcIi5jb25jYXQoZSk6ZX0scmVhZFVURjg6ZnVuY3Rpb24gcmVhZFVURjgoZSxyLHQpe2Zvcih2YXIgYSxpPVwiXCIscz0wO3M8dDtzKyspaSs9XCIlXCIuY29uY2F0KFVQTkcuX2Jpbi5wYWQoZVtyK3NdLnRvU3RyaW5nKDE2KSkpO3RyeXthPWRlY29kZVVSSUNvbXBvbmVudChpKX1jYXRjaChhKXtyZXR1cm4gVVBORy5fYmluLnJlYWRBU0NJSShlLHIsdCl9cmV0dXJuIGF9fSxVUE5HLl9jb3B5VGlsZT1mdW5jdGlvbihlLHIsdCxhLGkscyxjLGwsdSl7Zm9yKHZhciBwPU1hdGgubWluKHIsaSksZD1NYXRoLm1pbih0LHMpLGg9MCx5PTAsQT0wO0E8ZDtBKyspZm9yKHZhciBnPTA7ZzxwO2crKylpZihjPj0wJiZsPj0wPyhoPUEqcitnPDwyLHk9KGwrQSkqaStjK2c8PDIpOihoPSgtbCtBKSpyLWMrZzw8Mix5PUEqaStnPDwyKSwwPT11KWFbeV09ZVtoXSxhW3krMV09ZVtoKzFdLGFbeSsyXT1lW2grMl0sYVt5KzNdPWVbaCszXTtlbHNlIGlmKDE9PXUpe3ZhciB2PWVbaCszXSooMS8yNTUpLEU9ZVtoXSp2LG09ZVtoKzFdKnYsST1lW2grMl0qdixQPWFbeSszXSooMS8yNTUpLGI9YVt5XSpQLFQ9YVt5KzFdKlAsUz1hW3krMl0qUCxSPTEtdixfPXYrUCpSLFU9MD09Xz8wOjEvXzthW3krM109MjU1Kl8sYVt5KzBdPShFK2IqUikqVSxhW3krMV09KG0rVCpSKSpVLGFbeSsyXT0oSStTKlIpKlV9ZWxzZSBpZigyPT11KXt2PWVbaCszXSxFPWVbaF0sbT1lW2grMV0sST1lW2grMl0sUD1hW3krM10sYj1hW3ldLFQ9YVt5KzFdLFM9YVt5KzJdO3Y9PVAmJkU9PWImJm09PVQmJkk9PVM/KGFbeV09MCxhW3krMV09MCxhW3krMl09MCxhW3krM109MCk6KGFbeV09RSxhW3krMV09bSxhW3krMl09SSxhW3krM109dil9ZWxzZSBpZigzPT11KXt2PWVbaCszXSxFPWVbaF0sbT1lW2grMV0sST1lW2grMl0sUD1hW3krM10sYj1hW3ldLFQ9YVt5KzFdLFM9YVt5KzJdO2lmKHY9PVAmJkU9PWImJm09PVQmJkk9PVMpY29udGludWU7aWYodjwyMjAmJlA+MjApcmV0dXJuITF9cmV0dXJuITB9LFVQTkcuZW5jb2RlPWZ1bmN0aW9uKGUscix0LGEsaSxzLGMpe251bGw9PWEmJihhPTApLG51bGw9PWMmJihjPSExKTt2YXIgbD1VUE5HLmVuY29kZS5jb21wcmVzcyhlLHIsdCxhLFshMSwhMSwhMSwwLGNdKTtyZXR1cm4gVVBORy5lbmNvZGUuY29tcHJlc3NQTkcobCwtMSksVVBORy5lbmNvZGUuX21haW4obCxyLHQsaSxzKX0sVVBORy5lbmNvZGVMTD1mdW5jdGlvbihlLHIsdCxhLGkscyxjLGwpe2Zvcih2YXIgdT17Y3R5cGU6MCsoMT09YT8wOjIpKygwPT1pPzA6NCksZGVwdGg6cyxmcmFtZXM6W119LHA9KGEraSkqcyxkPXAqcixoPTA7aDxlLmxlbmd0aDtoKyspdS5mcmFtZXMucHVzaCh7cmVjdDp7eDowLHk6MCx3aWR0aDpyLGhlaWdodDp0fSxpbWc6bmV3IFVpbnQ4QXJyYXkoZVtoXSksYmxlbmQ6MCxkaXNwb3NlOjEsYnBwOk1hdGguY2VpbChwLzgpLGJwbDpNYXRoLmNlaWwoZC84KX0pO3JldHVybiBVUE5HLmVuY29kZS5jb21wcmVzc1BORyh1LDAsITApLFVQTkcuZW5jb2RlLl9tYWluKHUscix0LGMsbCl9LFVQTkcuZW5jb2RlLl9tYWluPWZ1bmN0aW9uKGUscix0LGEsaSl7bnVsbD09aSYmKGk9e30pO3ZhciBzPVVQTkcuY3JjLmNyYyxjPVVQTkcuX2Jpbi53cml0ZVVpbnQsbD1VUE5HLl9iaW4ud3JpdGVVc2hvcnQsdT1VUE5HLl9iaW4ud3JpdGVBU0NJSSxwPTgsZD1lLmZyYW1lcy5sZW5ndGg+MSxoPSExLHk9MzMrKGQ/MjA6MCk7aWYobnVsbCE9aS5zUkdCJiYoeSs9MTMpLG51bGwhPWkucEhZcyYmKHkrPTIxKSwzPT1lLmN0eXBlKXtmb3IodmFyIEE9ZS5wbHRlLmxlbmd0aCxnPTA7ZzxBO2crKyllLnBsdGVbZ10+Pj4yNCE9MjU1JiYoaD0hMCk7eSs9OCszKkErNCsoaD84KzEqQSs0OjApfWZvcih2YXIgdj0wO3Y8ZS5mcmFtZXMubGVuZ3RoO3YrKyl7ZCYmKHkrPTM4KSx5Kz0oXz1lLmZyYW1lc1t2XSkuY2ltZy5sZW5ndGgrMTIsMCE9diYmKHkrPTQpfXkrPTEyO3ZhciBFPW5ldyBVaW50OEFycmF5KHkpLG09WzEzNyw4MCw3OCw3MSwxMywxMCwyNiwxMF07Zm9yKGc9MDtnPDg7ZysrKUVbZ109bVtnXTtpZihjKEUscCwxMyksdShFLHArPTQsXCJJSERSXCIpLGMoRSxwKz00LHIpLGMoRSxwKz00LHQpLEVbcCs9NF09ZS5kZXB0aCxFWysrcF09ZS5jdHlwZSxFWysrcF09MCxFWysrcF09MCxFWysrcF09MCxjKEUsKytwLHMoRSxwLTE3LDE3KSkscCs9NCxudWxsIT1pLnNSR0ImJihjKEUscCwxKSx1KEUscCs9NCxcInNSR0JcIiksRVtwKz00XT1pLnNSR0IsYyhFLCsrcCxzKEUscC01LDUpKSxwKz00KSxudWxsIT1pLnBIWXMmJihjKEUscCw5KSx1KEUscCs9NCxcInBIWXNcIiksYyhFLHArPTQsaS5wSFlzWzBdKSxjKEUscCs9NCxpLnBIWXNbMV0pLEVbcCs9NF09aS5wSFlzWzJdLGMoRSwrK3AscyhFLHAtMTMsMTMpKSxwKz00KSxkJiYoYyhFLHAsOCksdShFLHArPTQsXCJhY1RMXCIpLGMoRSxwKz00LGUuZnJhbWVzLmxlbmd0aCksYyhFLHArPTQsbnVsbCE9aS5sb29wP2kubG9vcDowKSxjKEUscCs9NCxzKEUscC0xMiwxMikpLHArPTQpLDM9PWUuY3R5cGUpe2MoRSxwLDMqKEE9ZS5wbHRlLmxlbmd0aCkpLHUoRSxwKz00LFwiUExURVwiKSxwKz00O2ZvcihnPTA7ZzxBO2crKyl7dmFyIEk9MypnLFA9ZS5wbHRlW2ddLGI9MjU1JlAsVD1QPj4+OCYyNTUsUz1QPj4+MTYmMjU1O0VbcCtJKzBdPWIsRVtwK0krMV09VCxFW3ArSSsyXT1TfWlmKGMoRSxwKz0zKkEscyhFLHAtMypBLTQsMypBKzQpKSxwKz00LGgpe2MoRSxwLEEpLHUoRSxwKz00LFwidFJOU1wiKSxwKz00O2ZvcihnPTA7ZzxBO2crKylFW3ArZ109ZS5wbHRlW2ddPj4+MjQmMjU1O2MoRSxwKz1BLHMoRSxwLUEtNCxBKzQpKSxwKz00fX12YXIgUj0wO2Zvcih2PTA7djxlLmZyYW1lcy5sZW5ndGg7disrKXt2YXIgXz1lLmZyYW1lc1t2XTtkJiYoYyhFLHAsMjYpLHUoRSxwKz00LFwiZmNUTFwiKSxjKEUscCs9NCxSKyspLGMoRSxwKz00LF8ucmVjdC53aWR0aCksYyhFLHArPTQsXy5yZWN0LmhlaWdodCksYyhFLHArPTQsXy5yZWN0LngpLGMoRSxwKz00LF8ucmVjdC55KSxsKEUscCs9NCxhW3ZdKSxsKEUscCs9MiwxZTMpLEVbcCs9Ml09Xy5kaXNwb3NlLEVbKytwXT1fLmJsZW5kLGMoRSwrK3AscyhFLHAtMzAsMzApKSxwKz00KTt2YXIgVT1fLmNpbWc7YyhFLHAsKEE9VS5sZW5ndGgpKygwPT12PzA6NCkpO3ZhciB3PXArPTQ7dShFLHAsMD09dj9cIklEQVRcIjpcImZkQVRcIikscCs9NCwwIT12JiYoYyhFLHAsUisrKSxwKz00KSxFLnNldChVLHApLGMoRSxwKz1BLHMoRSx3LHAtdykpLHArPTR9cmV0dXJuIGMoRSxwLDApLHUoRSxwKz00LFwiSUVORFwiKSxjKEUscCs9NCxzKEUscC00LDQpKSxwKz00LEUuYnVmZmVyfSxVUE5HLmVuY29kZS5jb21wcmVzc1BORz1mdW5jdGlvbihlLHIsdCl7Zm9yKHZhciBhPTA7YTxlLmZyYW1lcy5sZW5ndGg7YSsrKXt2YXIgaT1lLmZyYW1lc1thXTtpLnJlY3Qud2lkdGg7dmFyIHM9aS5yZWN0LmhlaWdodCxjPW5ldyBVaW50OEFycmF5KHMqaS5icGwrcyk7aS5jaW1nPVVQTkcuZW5jb2RlLl9maWx0ZXJaZXJvKGkuaW1nLHMsaS5icHAsaS5icGwsYyxyLHQpfX0sVVBORy5lbmNvZGUuY29tcHJlc3M9ZnVuY3Rpb24oZSxyLHQsYSxpKXtmb3IodmFyIHM9aVswXSxjPWlbMV0sbD1pWzJdLHU9aVszXSxwPWlbNF0sZD02LGg9OCx5PTI1NSxBPTA7QTxlLmxlbmd0aDtBKyspZm9yKHZhciBnPW5ldyBVaW50OEFycmF5KGVbQV0pLHY9Zy5sZW5ndGgsRT0wO0U8djtFKz00KXkmPWdbRSszXTt2YXIgbT0yNTUhPXksST1VUE5HLmVuY29kZS5mcmFtaXplKGUscix0LHMsYyxsKSxQPXt9LGI9W10sVD1bXTtpZigwIT1hKXt2YXIgUz1bXTtmb3IoRT0wO0U8SS5sZW5ndGg7RSsrKVMucHVzaChJW0VdLmltZy5idWZmZXIpO3ZhciBSPVVQTkcuZW5jb2RlLmNvbmNhdFJHQkEoUyksXz1VUE5HLnF1YW50aXplKFIsYSksVT0wLHc9bmV3IFVpbnQ4QXJyYXkoXy5hYnVmKTtmb3IoRT0wO0U8SS5sZW5ndGg7RSsrKXt2YXIgTz0oSj1JW0VdLmltZykubGVuZ3RoO1QucHVzaChuZXcgVWludDhBcnJheShfLmluZHMuYnVmZmVyLFU+PjIsTz4+MikpO2ZvcihBPTA7QTxPO0ErPTQpSltBXT13W1UrQV0sSltBKzFdPXdbVStBKzFdLEpbQSsyXT13W1UrQSsyXSxKW0ErM109d1tVK0ErM107VSs9T31mb3IoRT0wO0U8Xy5wbHRlLmxlbmd0aDtFKyspYi5wdXNoKF8ucGx0ZVtFXS5lc3QucmdiYSl9ZWxzZSBmb3IoQT0wO0E8SS5sZW5ndGg7QSsrKXt2YXIgQz1JW0FdLCQ9bmV3IFVpbnQzMkFycmF5KEMuaW1nLmJ1ZmZlciksTD1DLnJlY3Qud2lkdGgseD0odj0kLmxlbmd0aCxuZXcgVWludDhBcnJheSh2KSk7VC5wdXNoKHgpO2ZvcihFPTA7RTx2O0UrKyl7dmFyIE09JFtFXTtpZigwIT1FJiZNPT0kW0UtMV0peFtFXT14W0UtMV07ZWxzZSBpZihFPkwmJk09PSRbRS1MXSl4W0VdPXhbRS1MXTtlbHNle3ZhciBCPVBbTV07aWYobnVsbD09QiYmKFBbTV09Qj1iLmxlbmd0aCxiLnB1c2goTSksYi5sZW5ndGg+PTMwMCkpYnJlYWs7eFtFXT1CfX19dmFyIEQ9Yi5sZW5ndGg7RDw9MjU2JiYwPT1wJiYoaD1EPD0yPzE6RDw9ND8yOkQ8PTE2PzQ6OCxoPU1hdGgubWF4KGgsdSkpO2ZvcihBPTA7QTxJLmxlbmd0aDtBKyspeyhDPUlbQV0pLnJlY3QueCxDLnJlY3QueTtMPUMucmVjdC53aWR0aDt2YXIgRz1DLnJlY3QuaGVpZ2h0LFY9Qy5pbWc7bmV3IFVpbnQzMkFycmF5KFYuYnVmZmVyKTt2YXIgaz00KkwsWT00O2lmKEQ8PTI1NiYmMD09cCl7az1NYXRoLmNlaWwoaCpMLzgpO2Zvcih2YXIgcT1uZXcgVWludDhBcnJheShrKkcpLFo9VFtBXSxRPTA7UTxHO1ErKyl7RT1RKms7dmFyIHo9USpMO2lmKDg9PWgpZm9yKHZhciBLPTA7SzxMO0srKylxW0UrS109Wlt6K0tdO2Vsc2UgaWYoND09aClmb3IoSz0wO0s8TDtLKyspcVtFKyhLPj4xKV18PVpbeitLXTw8NC00KigxJkspO2Vsc2UgaWYoMj09aClmb3IoSz0wO0s8TDtLKyspcVtFKyhLPj4yKV18PVpbeitLXTw8Ni0yKigzJkspO2Vsc2UgaWYoMT09aClmb3IoSz0wO0s8TDtLKyspcVtFKyhLPj4zKV18PVpbeitLXTw8Ny0xKig3JkspfVY9cSxkPTMsWT0xfWVsc2UgaWYoMD09bSYmMT09SS5sZW5ndGgpe3E9bmV3IFVpbnQ4QXJyYXkoTCpHKjMpO3ZhciBYPUwqRztmb3IoRT0wO0U8WDtFKyspe3ZhciBKLGVlPTQqRTtxW0o9MypFXT1WW2VlXSxxW0orMV09VltlZSsxXSxxW0orMl09VltlZSsyXX1WPXEsZD0yLFk9MyxrPTMqTH1DLmltZz1WLEMuYnBsPWssQy5icHA9WX1yZXR1cm57Y3R5cGU6ZCxkZXB0aDpoLHBsdGU6YixmcmFtZXM6SX19LFVQTkcuZW5jb2RlLmZyYW1pemU9ZnVuY3Rpb24oZSxyLHQsYSxpLHMpe2Zvcih2YXIgYz1bXSxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciB1LHA9bmV3IFVpbnQ4QXJyYXkoZVtsXSksZD1uZXcgVWludDMyQXJyYXkocC5idWZmZXIpLGg9MCx5PTAsQT1yLGc9dCx2PWE/MTowO2lmKDAhPWwpe2Zvcih2YXIgRT1zfHxhfHwxPT1sfHwwIT1jW2wtMl0uZGlzcG9zZT8xOjIsbT0wLEk9MWU5LFA9MDtQPEU7UCsrKXtmb3IodmFyIGI9bmV3IFVpbnQ4QXJyYXkoZVtsLTEtUF0pLFQ9bmV3IFVpbnQzMkFycmF5KGVbbC0xLVBdKSxTPXIsUj10LF89LTEsVT0tMSx3PTA7dzx0O3crKylmb3IodmFyIE89MDtPPHI7TysrKXtkW0Q9dypyK09dIT1UW0RdJiYoTzxTJiYoUz1PKSxPPl8mJihfPU8pLHc8UiYmKFI9dyksdz5VJiYoVT13KSl9LTE9PV8mJihTPVI9Xz1VPTApLGkmJigxPT0oMSZTKSYmUy0tLDE9PSgxJlIpJiZSLS0pO3ZhciBDPShfLVMrMSkqKFUtUisxKTtDPEkmJihJPUMsbT1QLGg9Uyx5PVIsQT1fLVMrMSxnPVUtUisxKX1iPW5ldyBVaW50OEFycmF5KGVbbC0xLW1dKTsxPT1tJiYoY1tsLTFdLmRpc3Bvc2U9MiksdT1uZXcgVWludDhBcnJheShBKmcqNCksVVBORy5fY29weVRpbGUoYixyLHQsdSxBLGcsLWgsLXksMCksMT09KHY9VVBORy5fY29weVRpbGUocCxyLHQsdSxBLGcsLWgsLXksMyk/MTowKT9VUE5HLmVuY29kZS5fcHJlcGFyZURpZmYocCxyLHQsdSx7eDpoLHk6eSx3aWR0aDpBLGhlaWdodDpnfSk6VVBORy5fY29weVRpbGUocCxyLHQsdSxBLGcsLWgsLXksMCl9ZWxzZSB1PXAuc2xpY2UoMCk7Yy5wdXNoKHtyZWN0Ont4OmgseTp5LHdpZHRoOkEsaGVpZ2h0Omd9LGltZzp1LGJsZW5kOnYsZGlzcG9zZTowfSl9aWYoYSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKXtpZigxIT0oRz1jW2xdKS5ibGVuZCl7dmFyICQ9Ry5yZWN0LEw9Y1tsLTFdLnJlY3QseD1NYXRoLm1pbigkLngsTC54KSxNPU1hdGgubWluKCQueSxMLnkpLEI9e3g6eCx5Ok0sd2lkdGg6TWF0aC5tYXgoJC54KyQud2lkdGgsTC54K0wud2lkdGgpLXgsaGVpZ2h0Ok1hdGgubWF4KCQueSskLmhlaWdodCxMLnkrTC5oZWlnaHQpLU19O2NbbC0xXS5kaXNwb3NlPTEsbC0xIT0wJiZVUE5HLmVuY29kZS5fdXBkYXRlRnJhbWUoZSxyLHQsYyxsLTEsQixpKSxVUE5HLmVuY29kZS5fdXBkYXRlRnJhbWUoZSxyLHQsYyxsLEIsaSl9fWlmKDEhPWUubGVuZ3RoKWZvcih2YXIgRD0wO0Q8Yy5sZW5ndGg7RCsrKXt2YXIgRzsoRz1jW0RdKS5yZWN0LndpZHRoKkcucmVjdC5oZWlnaHR9cmV0dXJuIGN9LFVQTkcuZW5jb2RlLl91cGRhdGVGcmFtZT1mdW5jdGlvbihlLHIsdCxhLGkscyxjKXtmb3IodmFyIGw9VWludDhBcnJheSx1PVVpbnQzMkFycmF5LHA9bmV3IGwoZVtpLTFdKSxkPW5ldyB1KGVbaS0xXSksaD1pKzE8ZS5sZW5ndGg/bmV3IGwoZVtpKzFdKTpudWxsLHk9bmV3IGwoZVtpXSksQT1uZXcgdSh5LmJ1ZmZlciksZz1yLHY9dCxFPS0xLG09LTEsST0wO0k8cy5oZWlnaHQ7SSsrKWZvcih2YXIgUD0wO1A8cy53aWR0aDtQKyspe3ZhciBiPXMueCtQLFQ9cy55K0ksUz1UKnIrYixSPUFbU107MD09Unx8MD09YVtpLTFdLmRpc3Bvc2UmJmRbU109PVImJihudWxsPT1ofHwwIT1oWzQqUyszXSl8fChiPGcmJihnPWIpLGI+RSYmKEU9YiksVDx2JiYodj1UKSxUPm0mJihtPVQpKX0tMT09RSYmKGc9dj1FPW09MCksYyYmKDE9PSgxJmcpJiZnLS0sMT09KDEmdikmJnYtLSkscz17eDpnLHk6dix3aWR0aDpFLWcrMSxoZWlnaHQ6bS12KzF9O3ZhciBfPWFbaV07Xy5yZWN0PXMsXy5ibGVuZD0xLF8uaW1nPW5ldyBVaW50OEFycmF5KHMud2lkdGgqcy5oZWlnaHQqNCksMD09YVtpLTFdLmRpc3Bvc2U/KFVQTkcuX2NvcHlUaWxlKHAscix0LF8uaW1nLHMud2lkdGgscy5oZWlnaHQsLXMueCwtcy55LDApLFVQTkcuZW5jb2RlLl9wcmVwYXJlRGlmZih5LHIsdCxfLmltZyxzKSk6VVBORy5fY29weVRpbGUoeSxyLHQsXy5pbWcscy53aWR0aCxzLmhlaWdodCwtcy54LC1zLnksMCl9LFVQTkcuZW5jb2RlLl9wcmVwYXJlRGlmZj1mdW5jdGlvbihlLHIsdCxhLGkpe1VQTkcuX2NvcHlUaWxlKGUscix0LGEsaS53aWR0aCxpLmhlaWdodCwtaS54LC1pLnksMil9LFVQTkcuZW5jb2RlLl9maWx0ZXJaZXJvPWZ1bmN0aW9uKGUscix0LGEsaSxzLGMpe3ZhciBsLHU9W10scD1bMCwxLDIsMyw0XTstMSE9cz9wPVtzXToociphPjVlNXx8MT09dCkmJihwPVswXSksYyYmKGw9e2xldmVsOjB9KTtmb3IodmFyIGQsaD1VWklQLHk9MDt5PHAubGVuZ3RoO3krKyl7Zm9yKHZhciBBPTA7QTxyO0ErKylVUE5HLmVuY29kZS5fZmlsdGVyTGluZShpLGUsQSxhLHQscFt5XSk7dS5wdXNoKGguZGVmbGF0ZShpLGwpKX12YXIgZz0xZTk7Zm9yKHk9MDt5PHUubGVuZ3RoO3krKyl1W3ldLmxlbmd0aDxnJiYoZD15LGc9dVt5XS5sZW5ndGgpO3JldHVybiB1W2RdfSxVUE5HLmVuY29kZS5fZmlsdGVyTGluZT1mdW5jdGlvbihlLHIsdCxhLGkscyl7dmFyIGM9dCphLGw9Yyt0LHU9VVBORy5kZWNvZGUuX3BhZXRoO2lmKGVbbF09cyxsKyssMD09cylpZihhPDUwMClmb3IodmFyIHA9MDtwPGE7cCsrKWVbbCtwXT1yW2MrcF07ZWxzZSBlLnNldChuZXcgVWludDhBcnJheShyLmJ1ZmZlcixjLGEpLGwpO2Vsc2UgaWYoMT09cyl7Zm9yKHA9MDtwPGk7cCsrKWVbbCtwXT1yW2MrcF07Zm9yKHA9aTtwPGE7cCsrKWVbbCtwXT1yW2MrcF0tcltjK3AtaV0rMjU2JjI1NX1lbHNlIGlmKDA9PXQpe2ZvcihwPTA7cDxpO3ArKyllW2wrcF09cltjK3BdO2lmKDI9PXMpZm9yKHA9aTtwPGE7cCsrKWVbbCtwXT1yW2MrcF07aWYoMz09cylmb3IocD1pO3A8YTtwKyspZVtsK3BdPXJbYytwXS0ocltjK3AtaV0+PjEpKzI1NiYyNTU7aWYoND09cylmb3IocD1pO3A8YTtwKyspZVtsK3BdPXJbYytwXS11KHJbYytwLWldLDAsMCkrMjU2JjI1NX1lbHNle2lmKDI9PXMpZm9yKHA9MDtwPGE7cCsrKWVbbCtwXT1yW2MrcF0rMjU2LXJbYytwLWFdJjI1NTtpZigzPT1zKXtmb3IocD0wO3A8aTtwKyspZVtsK3BdPXJbYytwXSsyNTYtKHJbYytwLWFdPj4xKSYyNTU7Zm9yKHA9aTtwPGE7cCsrKWVbbCtwXT1yW2MrcF0rMjU2LShyW2MrcC1hXStyW2MrcC1pXT4+MSkmMjU1fWlmKDQ9PXMpe2ZvcihwPTA7cDxpO3ArKyllW2wrcF09cltjK3BdKzI1Ni11KDAscltjK3AtYV0sMCkmMjU1O2ZvcihwPWk7cDxhO3ArKyllW2wrcF09cltjK3BdKzI1Ni11KHJbYytwLWldLHJbYytwLWFdLHJbYytwLWktYV0pJjI1NX19fSxVUE5HLmNyYz17dGFibGU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IFVpbnQzMkFycmF5KDI1Nikscj0wO3I8MjU2O3IrKyl7Zm9yKHZhciB0PXIsYT0wO2E8ODthKyspMSZ0P3Q9Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+PTE7ZVtyXT10fXJldHVybiBlfSgpLHVwZGF0ZTpmdW5jdGlvbiB1cGRhdGUoZSxyLHQsYSl7Zm9yKHZhciBpPTA7aTxhO2krKyllPVVQTkcuY3JjLnRhYmxlWzI1NSYoZV5yW3QraV0pXV5lPj4+ODtyZXR1cm4gZX0sY3JjOmZ1bmN0aW9uIGNyYyhlLHIsdCl7cmV0dXJuIDQyOTQ5NjcyOTVeVVBORy5jcmMudXBkYXRlKDQyOTQ5NjcyOTUsZSxyLHQpfX0sVVBORy5xdWFudGl6ZT1mdW5jdGlvbihlLHIpe3ZhciB0LGE9bmV3IFVpbnQ4QXJyYXkoZSksaT1hLnNsaWNlKDApLHM9bmV3IFVpbnQzMkFycmF5KGkuYnVmZmVyKSxjPVVQTkcucXVhbnRpemUuZ2V0S0R0cmVlKGksciksbD1jWzBdLHU9Y1sxXSxwPVVQTkcucXVhbnRpemUucGxhbmVEc3QsZD1hLGg9cyx5PWQubGVuZ3RoLEE9bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGg+PjIpO2lmKGEubGVuZ3RoPDJlNylmb3IodmFyIGc9MDtnPHk7Zys9NCl7dmFyIHY9ZFtnXSooMS8yNTUpLEU9ZFtnKzFdKigxLzI1NSksbT1kW2crMl0qKDEvMjU1KSxJPWRbZyszXSooMS8yNTUpO3Q9VVBORy5xdWFudGl6ZS5nZXROZWFyZXN0KGwsdixFLG0sSSksQVtnPj4yXT10LmluZCxoW2c+PjJdPXQuZXN0LnJnYmF9ZWxzZSBmb3IoZz0wO2c8eTtnKz00KXt2PWRbZ10qKDEvMjU1KSxFPWRbZysxXSooMS8yNTUpLG09ZFtnKzJdKigxLzI1NSksST1kW2crM10qKDEvMjU1KTtmb3IodD1sO3QubGVmdDspdD1wKHQuZXN0LHYsRSxtLEkpPD0wP3QubGVmdDp0LnJpZ2h0O0FbZz4+Ml09dC5pbmQsaFtnPj4yXT10LmVzdC5yZ2JhfXJldHVybnthYnVmOmkuYnVmZmVyLGluZHM6QSxwbHRlOnV9fSxVUE5HLnF1YW50aXplLmdldEtEdHJlZT1mdW5jdGlvbihlLHIsdCl7bnVsbD09dCYmKHQ9MWUtNCk7dmFyIGE9bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyKSxpPXtpMDowLGkxOmUubGVuZ3RoLGJzdDpudWxsLGVzdDpudWxsLHRkc3Q6MCxsZWZ0Om51bGwscmlnaHQ6bnVsbH07aS5ic3Q9VVBORy5xdWFudGl6ZS5zdGF0cyhlLGkuaTAsaS5pMSksaS5lc3Q9VVBORy5xdWFudGl6ZS5lc3RhdHMoaS5ic3QpO2Zvcih2YXIgcz1baV07cy5sZW5ndGg8cjspe2Zvcih2YXIgYz0wLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS5lc3QuTD5jJiYoYz1zW3VdLmVzdC5MLGw9dSk7aWYoYzx0KWJyZWFrO3ZhciBwPXNbbF0sZD1VUE5HLnF1YW50aXplLnNwbGl0UGl4ZWxzKGUsYSxwLmkwLHAuaTEscC5lc3QuZSxwLmVzdC5lTXEyNTUpO2lmKHAuaTA+PWR8fHAuaTE8PWQpcC5lc3QuTD0wO2Vsc2V7dmFyIGg9e2kwOnAuaTAsaTE6ZCxic3Q6bnVsbCxlc3Q6bnVsbCx0ZHN0OjAsbGVmdDpudWxsLHJpZ2h0Om51bGx9O2guYnN0PVVQTkcucXVhbnRpemUuc3RhdHMoZSxoLmkwLGguaTEpLGguZXN0PVVQTkcucXVhbnRpemUuZXN0YXRzKGguYnN0KTt2YXIgeT17aTA6ZCxpMTpwLmkxLGJzdDpudWxsLGVzdDpudWxsLHRkc3Q6MCxsZWZ0Om51bGwscmlnaHQ6bnVsbH07eS5ic3Q9e1I6W10sbTpbXSxOOnAuYnN0Lk4taC5ic3QuTn07Zm9yKHU9MDt1PDE2O3UrKyl5LmJzdC5SW3VdPXAuYnN0LlJbdV0taC5ic3QuUlt1XTtmb3IodT0wO3U8NDt1KyspeS5ic3QubVt1XT1wLmJzdC5tW3VdLWguYnN0Lm1bdV07eS5lc3Q9VVBORy5xdWFudGl6ZS5lc3RhdHMoeS5ic3QpLHAubGVmdD1oLHAucmlnaHQ9eSxzW2xdPWgscy5wdXNoKHkpfX1zLnNvcnQoKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuYnN0Lk4tZS5ic3QuTn0pKTtmb3IodT0wO3U8cy5sZW5ndGg7dSsrKXNbdV0uaW5kPXU7cmV0dXJuW2ksc119LFVQTkcucXVhbnRpemUuZ2V0TmVhcmVzdD1mdW5jdGlvbihlLHIsdCxhLGkpe2lmKG51bGw9PWUubGVmdClyZXR1cm4gZS50ZHN0PVVQTkcucXVhbnRpemUuZGlzdChlLmVzdC5xLHIsdCxhLGkpLGU7dmFyIHM9VVBORy5xdWFudGl6ZS5wbGFuZURzdChlLmVzdCxyLHQsYSxpKSxjPWUubGVmdCxsPWUucmlnaHQ7cz4wJiYoYz1lLnJpZ2h0LGw9ZS5sZWZ0KTt2YXIgdT1VUE5HLnF1YW50aXplLmdldE5lYXJlc3QoYyxyLHQsYSxpKTtpZih1LnRkc3Q8PXMqcylyZXR1cm4gdTt2YXIgcD1VUE5HLnF1YW50aXplLmdldE5lYXJlc3QobCxyLHQsYSxpKTtyZXR1cm4gcC50ZHN0PHUudGRzdD9wOnV9LFVQTkcucXVhbnRpemUucGxhbmVEc3Q9ZnVuY3Rpb24oZSxyLHQsYSxpKXt2YXIgcz1lLmU7cmV0dXJuIHNbMF0qcitzWzFdKnQrc1syXSphK3NbM10qaS1lLmVNcX0sVVBORy5xdWFudGl6ZS5kaXN0PWZ1bmN0aW9uKGUscix0LGEsaSl7dmFyIHM9ci1lWzBdLGM9dC1lWzFdLGw9YS1lWzJdLHU9aS1lWzNdO3JldHVybiBzKnMrYypjK2wqbCt1KnV9LFVQTkcucXVhbnRpemUuc3BsaXRQaXhlbHM9ZnVuY3Rpb24oZSxyLHQsYSxpLHMpe3ZhciBjPVVQTkcucXVhbnRpemUudmVjRG90O2ZvcihhLT00O3Q8YTspe2Zvcig7YyhlLHQsaSk8PXM7KXQrPTQ7Zm9yKDtjKGUsYSxpKT5zOylhLT00O2lmKHQ+PWEpYnJlYWs7dmFyIGw9clt0Pj4yXTtyW3Q+PjJdPXJbYT4+Ml0sclthPj4yXT1sLHQrPTQsYS09NH1mb3IoO2MoZSx0LGkpPnM7KXQtPTQ7cmV0dXJuIHQrNH0sVVBORy5xdWFudGl6ZS52ZWNEb3Q9ZnVuY3Rpb24oZSxyLHQpe3JldHVybiBlW3JdKnRbMF0rZVtyKzFdKnRbMV0rZVtyKzJdKnRbMl0rZVtyKzNdKnRbM119LFVQTkcucXVhbnRpemUuc3RhdHM9ZnVuY3Rpb24oZSxyLHQpe2Zvcih2YXIgYT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0saT1bMCwwLDAsMF0scz10LXI+PjIsYz1yO2M8dDtjKz00KXt2YXIgbD1lW2NdKigxLzI1NSksdT1lW2MrMV0qKDEvMjU1KSxwPWVbYysyXSooMS8yNTUpLGQ9ZVtjKzNdKigxLzI1NSk7aVswXSs9bCxpWzFdKz11LGlbMl0rPXAsaVszXSs9ZCxhWzBdKz1sKmwsYVsxXSs9bCp1LGFbMl0rPWwqcCxhWzNdKz1sKmQsYVs1XSs9dSp1LGFbNl0rPXUqcCxhWzddKz11KmQsYVsxMF0rPXAqcCxhWzExXSs9cCpkLGFbMTVdKz1kKmR9cmV0dXJuIGFbNF09YVsxXSxhWzhdPWFbMl0sYVs5XT1hWzZdLGFbMTJdPWFbM10sYVsxM109YVs3XSxhWzE0XT1hWzExXSx7UjphLG06aSxOOnN9fSxVUE5HLnF1YW50aXplLmVzdGF0cz1mdW5jdGlvbihlKXt2YXIgcj1lLlIsdD1lLm0sYT1lLk4saT10WzBdLHM9dFsxXSxjPXRbMl0sbD10WzNdLHU9MD09YT8wOjEvYSxwPVtyWzBdLWkqaSp1LHJbMV0taSpzKnUsclsyXS1pKmMqdSxyWzNdLWkqbCp1LHJbNF0tcyppKnUscls1XS1zKnMqdSxyWzZdLXMqYyp1LHJbN10tcypsKnUscls4XS1jKmkqdSxyWzldLWMqcyp1LHJbMTBdLWMqYyp1LHJbMTFdLWMqbCp1LHJbMTJdLWwqaSp1LHJbMTNdLWwqcyp1LHJbMTRdLWwqYyp1LHJbMTVdLWwqbCp1XSxkPXAsaD1VUE5HLk00LHk9W01hdGgucmFuZG9tKCksTWF0aC5yYW5kb20oKSxNYXRoLnJhbmRvbSgpLE1hdGgucmFuZG9tKCldLEE9MCxnPTA7aWYoMCE9YSlmb3IodmFyIHY9MDt2PDE2JiYoeT1oLm11bHRWZWMoZCx5KSxnPU1hdGguc3FydChoLmRvdCh5LHkpKSx5PWguc21sKDEvZyx5KSwhKDAhPXYmJk1hdGguYWJzKGctQSk8MWUtOSkpO3YrKylBPWc7dmFyIEU9W2kqdSxzKnUsYyp1LGwqdV07cmV0dXJue0NvdjpwLHE6RSxlOnksTDpBLGVNcTI1NTpoLmRvdChoLnNtbCgyNTUsRSkseSksZU1xOmguZG90KHksRSkscmdiYTooTWF0aC5yb3VuZCgyNTUqRVszXSk8PDI0fE1hdGgucm91bmQoMjU1KkVbMl0pPDwxNnxNYXRoLnJvdW5kKDI1NSpFWzFdKTw8OHxNYXRoLnJvdW5kKDI1NSpFWzBdKTw8MCk+Pj4wfX0sVVBORy5NND17bXVsdFZlYzpmdW5jdGlvbiBtdWx0VmVjKGUscil7cmV0dXJuW2VbMF0qclswXStlWzFdKnJbMV0rZVsyXSpyWzJdK2VbM10qclszXSxlWzRdKnJbMF0rZVs1XSpyWzFdK2VbNl0qclsyXStlWzddKnJbM10sZVs4XSpyWzBdK2VbOV0qclsxXStlWzEwXSpyWzJdK2VbMTFdKnJbM10sZVsxMl0qclswXStlWzEzXSpyWzFdK2VbMTRdKnJbMl0rZVsxNV0qclszXV19LGRvdDpmdW5jdGlvbiBkb3QoZSxyKXtyZXR1cm4gZVswXSpyWzBdK2VbMV0qclsxXStlWzJdKnJbMl0rZVszXSpyWzNdfSxzbWw6ZnVuY3Rpb24gc21sKGUscil7cmV0dXJuW2UqclswXSxlKnJbMV0sZSpyWzJdLGUqclszXV19fSxVUE5HLmVuY29kZS5jb25jYXRSR0JBPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoO3QrKylyKz1lW3RdLmJ5dGVMZW5ndGg7dmFyIGE9bmV3IFVpbnQ4QXJyYXkociksaT0wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheShlW3RdKSxjPXMubGVuZ3RoLGw9MDtsPGM7bCs9NCl7dmFyIHU9c1tsXSxwPXNbbCsxXSxkPXNbbCsyXSxoPXNbbCszXTswPT1oJiYodT1wPWQ9MCksYVtpK2xdPXUsYVtpK2wrMV09cCxhW2krbCsyXT1kLGFbaStsKzNdPWh9aSs9Y31yZXR1cm4gYS5idWZmZXJ9O3ZhciBNYXhDYW52YXNTaXplPXtjaHJvbWU6MTYzODQsZmlyZWZveDoxMTE4MCxcImRlc2t0b3Agc2FmYXJpXCI6MTYzODQsXCJpbnRlcm5ldCBleHBsb3JlclwiOjgxOTIsXCJtb2JpbGUgc2FmYXJpXCI6NDA5NixldGM6ODE5Mn0saXNCcm93c2VyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csbW9kdWxlTWFwcGVyPWlzQnJvd3NlciYmd2luZG93LmNvcmRvdmEmJndpbmRvdy5jb3Jkb3ZhLnJlcXVpcmUmJndpbmRvdy5jb3Jkb3ZhLnJlcXVpcmUoXCJjb3Jkb3ZhL21vZHVsZW1hcHBlclwiKSxDdXN0b21GaWxlPWlzQnJvd3NlciYmKG1vZHVsZU1hcHBlciYmbW9kdWxlTWFwcGVyLmdldE9yaWdpbmFsU3ltYm9sKHdpbmRvdyxcIkZpbGVcIil8fHZvaWQgMCE9PXdpbmRvdy5GaWxlJiZGaWxlKSxDdXN0b21GaWxlUmVhZGVyPWlzQnJvd3NlciYmKG1vZHVsZU1hcHBlciYmbW9kdWxlTWFwcGVyLmdldE9yaWdpbmFsU3ltYm9sKHdpbmRvdyxcIkZpbGVSZWFkZXJcIil8fHZvaWQgMCE9PXdpbmRvdy5GaWxlUmVhZGVyJiZGaWxlUmVhZGVyKTtmdW5jdGlvbiBnZXRGaWxlZnJvbURhdGFVcmwoZSxyKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06RGF0ZS5ub3coKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEpe2Zvcih2YXIgaT1lLnNwbGl0KFwiLFwiKSxzPWlbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxjPWdsb2JhbFRoaXMuYXRvYihpWzFdKSxsPWMubGVuZ3RoLHU9bmV3IFVpbnQ4QXJyYXkobCk7bC0tOyl1W2xdPWMuY2hhckNvZGVBdChsKTt2YXIgcD1uZXcgQmxvYihbdV0se3R5cGU6c30pO3AubmFtZT1yLHAubGFzdE1vZGlmaWVkPXQsYShwKX0pKX1mdW5jdGlvbiBnZXREYXRhVXJsRnJvbUZpbGUoZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHQpe3ZhciBhPW5ldyBDdXN0b21GaWxlUmVhZGVyO2Eub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHIoYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9LGEucmVhZEFzRGF0YVVSTChlKX0pKX1mdW5jdGlvbiBsb2FkSW1hZ2UoZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHQpe3ZhciBhPW5ldyBJbWFnZTthLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiByKGEpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9LGEuc3JjPWV9KSl9ZnVuY3Rpb24gZ2V0QnJvd3Nlck5hbWUoKXt2YXIgZT1cImV0Y1wiLHI9bmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4vQ2hyb20oZXxpdW0pL2kudGVzdChyKT9lPVwiY2hyb21lXCI6L2lQKGFkfG9kfGhvbmUpL2kudGVzdChyKSYmL1dlYktpdC9pLnRlc3QocikmJiEvKENyaU9TfEZ4aU9TfE9QaU9TfG1lcmN1cnkpL2kudGVzdChyKT9lPVwibW9iaWxlIHNhZmFyaVwiOi9TYWZhcmkvaS50ZXN0KHIpP2U9XCJkZXNrdG9wIHNhZmFyaVwiOi9GaXJlZm94L2kudGVzdChyKT9lPVwiZmlyZWZveFwiOigvTVNJRS9pLnRlc3Qocil8fCEwPT0hIWRvY3VtZW50LmRvY3VtZW50TW9kZSkmJihlPVwiaW50ZXJuZXQgZXhwbG9yZXJcIiksZX1mdW5jdGlvbiBhcHByb3hpbWF0ZUJlbG93TWF4aW11bUNhbnZhc1NpemVPZkJyb3dzZXIoZSxyKXtmb3IodmFyIHQ9Z2V0QnJvd3Nlck5hbWUoKSxhPU1heENhbnZhc1NpemVbdF0saT1lLHM9cixjPWkqcyxsPWk+cz9zL2k6aS9zO2M+YSphOyl7dmFyIHU9KGEraSkvMixwPShhK3MpLzI7dTxwPyhzPXAsaT1wKmwpOihzPXUqbCxpPXUpLGM9aSpzfXJldHVybnt3aWR0aDppLGhlaWdodDpzfX1mdW5jdGlvbiBnZXROZXdDYW52YXNBbmRDdHgoZSxyKXt2YXIgdCxhO3RyeXtpZihudWxsPT09KGE9KHQ9bmV3IE9mZnNjcmVlbkNhbnZhcyhlLHIpKS5nZXRDb250ZXh0KFwiMmRcIikpKXRocm93IG5ldyBFcnJvcihcImdldENvbnRleHQgb2YgT2Zmc2NyZWVuQ2FudmFzIHJldHVybnMgbnVsbFwiKX1jYXRjaChlKXthPSh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikpLmdldENvbnRleHQoXCIyZFwiKX1yZXR1cm4gdC53aWR0aD1lLHQuaGVpZ2h0PXIsW3QsYV19ZnVuY3Rpb24gZHJhd0ltYWdlSW5DYW52YXMoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZvaWQgMCx0PWFwcHJveGltYXRlQmVsb3dNYXhpbXVtQ2FudmFzU2l6ZU9mQnJvd3NlcihlLndpZHRoLGUuaGVpZ2h0KSxhPXQud2lkdGgsaT10LmhlaWdodCxzPWdldE5ld0NhbnZhc0FuZEN0eChhLGkpLGM9X3NsaWNlZFRvQXJyYXkocywyKSxsPWNbMF0sdT1jWzFdO3JldHVybiByJiYvanBlP2cvLnRlc3QocikmJih1LmZpbGxTdHlsZT1cIndoaXRlXCIsdS5maWxsUmVjdCgwLDAsbC53aWR0aCxsLmhlaWdodCkpLHUuZHJhd0ltYWdlKGUsMCwwLGwud2lkdGgsbC5oZWlnaHQpLGx9ZnVuY3Rpb24gaXNJT1MoKXtyZXR1cm4gdm9pZCAwIT09aXNJT1MuY2FjaGVkUmVzdWx0fHwoaXNJT1MuY2FjaGVkUmVzdWx0PVtcImlQYWQgU2ltdWxhdG9yXCIsXCJpUGhvbmUgU2ltdWxhdG9yXCIsXCJpUG9kIFNpbXVsYXRvclwiLFwiaVBhZFwiLFwiaVBob25lXCIsXCJpUG9kXCJdLmluY2x1ZGVzKG5hdmlnYXRvci5wbGF0Zm9ybSl8fG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJNYWNcIikmJlwib250b3VjaGVuZFwiaW4gZG9jdW1lbnQpLGlzSU9TLmNhY2hlZFJlc3VsdH1mdW5jdGlvbiBkcmF3RmlsZUluQ2FudmFzKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocix0KXt2YXIgYSxpLHM9ZnVuY3Rpb24gJFRyeV8yX1Bvc3QoKXt0cnl7cmV0dXJuIGk9ZHJhd0ltYWdlSW5DYW52YXMoYSxlLnR5cGUpLHIoW2EsaV0pfWNhdGNoKGUpe3JldHVybiB0KGUpfX0sYz1mdW5jdGlvbiAkVHJ5XzJfQ2F0Y2gocil7dHJ5ezA7dmFyIGk9ZnVuY3Rpb24gJFRyeV8zX0NhdGNoKGUpe3RyeXt0aHJvdyBlfWNhdGNoKGUpe3JldHVybiB0KGUpfX07dHJ5e3JldHVybiBnZXREYXRhVXJsRnJvbUZpbGUoZSkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBsb2FkSW1hZ2UoZSkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBhPWUsZnVuY3Rpb24gJFRyeV8zX1Bvc3QoKXt0cnl7cmV0dXJuIHMoKX1jYXRjaChlKXtyZXR1cm4gdChlKX19KCl9Y2F0Y2goZSl7cmV0dXJuIGkoZSl9fSksaSl9Y2F0Y2goZSl7cmV0dXJuIGkoZSl9fSksaSl9Y2F0Y2goZSl7aShlKX19Y2F0Y2goZSl7cmV0dXJuIHQoZSl9fTt0cnl7aWYoaXNJT1MoKSl0aHJvdyBuZXcgRXJyb3IoXCJTa2lwIGNyZWF0ZUltYWdlQml0bWFwIG9uIElPUyBkZXZpY2VcIik7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gYT1lLHMoKX1jYXRjaChlKXtyZXR1cm4gYygpfX0pLGMpfWNhdGNoKGUpe2MoKX19KSl9ZnVuY3Rpb24gY2FudmFzVG9GaWxlKGUscix0LGEpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XToxO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxjKXt2YXIgbCx1LHA7aWYoXCJpbWFnZS9wbmdcIj09PXIpcmV0dXJuIHU9ZS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxlLndpZHRoLGUuaGVpZ2h0KS5kYXRhLHA9VVBORy5lbmNvZGUoW3VdLGUud2lkdGgsZS5oZWlnaHQsMjU2KmkpLChsPW5ldyBCbG9iKFtwXSx7dHlwZTpyfSkpLm5hbWU9dCxsLmxhc3RNb2RpZmllZD1hLCRJZl80LmNhbGwodGhpcyk7e3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyYmZSBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcz9lLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6cixxdWFsaXR5Oml9KS50aGVuKGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4obD1lKS5uYW1lPXQsbC5sYXN0TW9kaWZpZWQ9YSwkSWZfNS5jYWxsKHRoaXMpfWNhdGNoKGUpe3JldHVybiBjKGUpfX0uYmluZCh0aGlzKSxjKTpnZXRGaWxlZnJvbURhdGFVcmwoZS50b0RhdGFVUkwocixpKSx0LGEpLnRoZW4oZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBsPWUsJElmXzUuY2FsbCh0aGlzKX1jYXRjaChlKXtyZXR1cm4gYyhlKX19LmJpbmQodGhpcyksYyk7ZnVuY3Rpb24gJElmXzUoKXtyZXR1cm4gJElmXzQuY2FsbCh0aGlzKX19ZnVuY3Rpb24gJElmXzQoKXtyZXR1cm4gcyhsKX19KSl9ZnVuY3Rpb24gY2xlYW51cENhbnZhc01lbW9yeShlKXtlLndpZHRoPTAsZS5oZWlnaHQ9MH1mdW5jdGlvbiBpc0F1dG9PcmllbnRhdGlvbkluQnJvd3Nlcigpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXt2YXIgdCxhLGkscztyZXR1cm4gdm9pZCAwIT09aXNBdXRvT3JpZW50YXRpb25JbkJyb3dzZXIucmVzdWx0P2UoaXNBdXRvT3JpZW50YXRpb25JbkJyb3dzZXIucmVzdWx0KTooXCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80UUFpUlhocFpnQUFUVTBBS2dBQUFBZ0FBUUVTQUFNQUFBQUJBQVlBQUFBQUFBRC8yd0NFQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFmL0FBQkVJQUFFQUFnTUJFUUFDRVFFREVRSC94QUJLQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFMRUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBRVFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBLzlvQURBTUJBQUlSQXhFQVB3QS84SC8vMlE9PVwiLGdldEZpbGVmcm9tRGF0YVVybChcImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRRQWlSWGhwWmdBQVRVMEFLZ0FBQUFnQUFRRVNBQU1BQUFBQkFBWUFBQUFBQUFELzJ3Q0VBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQWYvQUFCRUlBQUVBQWdNQkVRQUNFUUVERVFIL3hBQktBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUxFQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFFUUVBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOW9BREFNQkFBSVJBeEVBUHdBLzhILy8yUT09XCIsXCJ0ZXN0LmpwZ1wiLERhdGUubm93KCkpLnRoZW4oKGZ1bmN0aW9uKGMpe3RyeXtyZXR1cm4gZHJhd0ZpbGVJbkNhbnZhcyh0PWMpLnRoZW4oKGZ1bmN0aW9uKGMpe3RyeXtyZXR1cm4gY2FudmFzVG9GaWxlKGE9Y1sxXSx0LnR5cGUsdC5uYW1lLHQubGFzdE1vZGlmaWVkKS50aGVuKChmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGk9dCxjbGVhbnVwQ2FudmFzTWVtb3J5KGEpLGRyYXdGaWxlSW5DYW52YXMoaSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e3JldHVybiBzPXRbMF0saXNBdXRvT3JpZW50YXRpb25JbkJyb3dzZXIucmVzdWx0PTE9PT1zLndpZHRoJiYyPT09cy5oZWlnaHQsZShpc0F1dG9PcmllbnRhdGlvbkluQnJvd3Nlci5yZXN1bHQpfWNhdGNoKGUpe3JldHVybiByKGUpfX0pLHIpfWNhdGNoKGUpe3JldHVybiByKGUpfX0pLHIpfWNhdGNoKGUpe3JldHVybiByKGUpfX0pLHIpfWNhdGNoKGUpe3JldHVybiByKGUpfX0pLHIpKX0pKX1mdW5jdGlvbiBnZXRFeGlmT3JpZW50YXRpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHQpe3ZhciBhPW5ldyBDdXN0b21GaWxlUmVhZGVyO2Eub25sb2FkPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRhVmlldyhlLnRhcmdldC5yZXN1bHQpO2lmKDY1NDk2IT10LmdldFVpbnQxNigwLCExKSlyZXR1cm4gcigtMik7Zm9yKHZhciBhPXQuYnl0ZUxlbmd0aCxpPTI7aTxhOyl7aWYodC5nZXRVaW50MTYoaSsyLCExKTw9OClyZXR1cm4gcigtMSk7dmFyIHM9dC5nZXRVaW50MTYoaSwhMSk7aWYoaSs9Miw2NTUwNT09cyl7aWYoMTE2NTUxOTIwNiE9dC5nZXRVaW50MzIoaSs9MiwhMSkpcmV0dXJuIHIoLTEpO3ZhciBjPTE4NzYxPT10LmdldFVpbnQxNihpKz02LCExKTtpKz10LmdldFVpbnQzMihpKzQsYyk7dmFyIGw9dC5nZXRVaW50MTYoaSxjKTtpKz0yO2Zvcih2YXIgdT0wO3U8bDt1KyspaWYoMjc0PT10LmdldFVpbnQxNihpKzEyKnUsYykpcmV0dXJuIHIodC5nZXRVaW50MTYoaSsxMip1KzgsYykpfWVsc2V7aWYoNjUyODAhPSg2NTI4MCZzKSlicmVhaztpKz10LmdldFVpbnQxNihpLCExKX19cmV0dXJuIHIoLTEpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9LGEucmVhZEFzQXJyYXlCdWZmZXIoZSl9KSl9ZnVuY3Rpb24gaGFuZGxlTWF4V2lkdGhPckhlaWdodChlLHIpe3ZhciB0LGE9ZS53aWR0aCxpPWUuaGVpZ2h0LHM9ci5tYXhXaWR0aE9ySGVpZ2h0LGM9ZTtpZihpc0Zpbml0ZShzKSYmKGE+c3x8aT5zKSl7dmFyIGw9X3NsaWNlZFRvQXJyYXkoZ2V0TmV3Q2FudmFzQW5kQ3R4KGEsaSksMik7Yz1sWzBdLHQ9bFsxXSxhPmk/KGMud2lkdGg9cyxjLmhlaWdodD1pL2Eqcyk6KGMud2lkdGg9YS9pKnMsYy5oZWlnaHQ9cyksdC5kcmF3SW1hZ2UoZSwwLDAsYy53aWR0aCxjLmhlaWdodCksY2xlYW51cENhbnZhc01lbW9yeShlKX1yZXR1cm4gY31mdW5jdGlvbiBmb2xsb3dFeGlmT3JpZW50YXRpb24oZSxyKXt2YXIgdD1lLndpZHRoLGE9ZS5oZWlnaHQsaT1fc2xpY2VkVG9BcnJheShnZXROZXdDYW52YXNBbmRDdHgodCxhKSwyKSxzPWlbMF0sYz1pWzFdO3N3aXRjaChyPjQmJnI8OT8ocy53aWR0aD1hLHMuaGVpZ2h0PXQpOihzLndpZHRoPXQscy5oZWlnaHQ9YSkscil7Y2FzZSAyOmMudHJhbnNmb3JtKC0xLDAsMCwxLHQsMCk7YnJlYWs7Y2FzZSAzOmMudHJhbnNmb3JtKC0xLDAsMCwtMSx0LGEpO2JyZWFrO2Nhc2UgNDpjLnRyYW5zZm9ybSgxLDAsMCwtMSwwLGEpO2JyZWFrO2Nhc2UgNTpjLnRyYW5zZm9ybSgwLDEsMSwwLDAsMCk7YnJlYWs7Y2FzZSA2OmMudHJhbnNmb3JtKDAsMSwtMSwwLGEsMCk7YnJlYWs7Y2FzZSA3OmMudHJhbnNmb3JtKDAsLTEsLTEsMCxhLHQpO2JyZWFrO2Nhc2UgODpjLnRyYW5zZm9ybSgwLC0xLDEsMCwwLHQpfXJldHVybiBjLmRyYXdJbWFnZShlLDAsMCx0LGEpLGNsZWFudXBDYW52YXNNZW1vcnkoZSksc31mdW5jdGlvbiBjb21wcmVzcyhlLHIpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxpKXt2YXIgcyxjLGwsdSxwLGQsaCx5LEEsZyx2LEUsbSxJLFAsYixULFM7ZnVuY3Rpb24gaW5jUHJvZ3Jlc3MoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06NTtzKz1lLHIub25Qcm9ncmVzcyhNYXRoLm1pbihzLDEwMCkpfWZ1bmN0aW9uIHNldFByb2dyZXNzKGUpe3M9TWF0aC5taW4oTWF0aC5tYXgoZSxzKSwxMDApLHIub25Qcm9ncmVzcyhzKX1yZXR1cm4gcz10LGM9ci5tYXhJdGVyYXRpb258fDEwLGw9MTAyNCpyLm1heFNpemVNQioxMDI0LGluY1Byb2dyZXNzKCksZHJhd0ZpbGVJbkNhbnZhcyhlKS50aGVuKGZ1bmN0aW9uKHQpe3RyeXt2YXIgcz1fc2xpY2VkVG9BcnJheSh0LDIpO3JldHVybiB1PXNbMV0saW5jUHJvZ3Jlc3MoKSxwPWhhbmRsZU1heFdpZHRoT3JIZWlnaHQodSxyKSxpbmNQcm9ncmVzcygpLG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGEpe3ZhciBpO2lmKCEoaT1yLmV4aWZPcmllbnRhdGlvbikpcmV0dXJuIGdldEV4aWZPcmllbnRhdGlvbihlKS50aGVuKGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gaT1lLCRJZl8yLmNhbGwodGhpcyl9Y2F0Y2goZSl7cmV0dXJuIGEoZSl9fS5iaW5kKHRoaXMpLGEpO2Z1bmN0aW9uICRJZl8yKCl7cmV0dXJuIHQoaSl9cmV0dXJuICRJZl8yLmNhbGwodGhpcyl9KSkudGhlbihmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGQ9dCxpbmNQcm9ncmVzcygpLGlzQXV0b09yaWVudGF0aW9uSW5Ccm93c2VyKCkudGhlbihmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGg9dD9wOmZvbGxvd0V4aWZPcmllbnRhdGlvbihwLGQpLGluY1Byb2dyZXNzKCkseT1yLmluaXRpYWxRdWFsaXR5fHwxLEE9ci5maWxlVHlwZXx8ZS50eXBlLGNhbnZhc1RvRmlsZShoLEEsZS5uYW1lLGUubGFzdE1vZGlmaWVkLHkpLnRoZW4oZnVuY3Rpb24ocil7dHJ5e3tpZihnPXIsaW5jUHJvZ3Jlc3MoKSx2PWcuc2l6ZT5sLEU9Zy5zaXplPmUuc2l6ZSwhdiYmIUUpcmV0dXJuIHNldFByb2dyZXNzKDEwMCksYShnKTt2YXIgdDtmdW5jdGlvbiAkTG9vcF8zKCl7aWYoYy0tJiYoUD5sfHxQPm0pKXt2YXIgcix0LGE9X3NsaWNlZFRvQXJyYXkoZ2V0TmV3Q2FudmFzQW5kQ3R4KHI9dj8uOTUqUy53aWR0aDpTLndpZHRoLHQ9dj8uOTUqUy5oZWlnaHQ6Uy5oZWlnaHQpLDIpO3JldHVybiBUPWFbMF0sYVsxXS5kcmF3SW1hZ2UoUywwLDAscix0KSx5Kj0uOTUsY2FudmFzVG9GaWxlKFQsQSxlLm5hbWUsZS5sYXN0TW9kaWZpZWQseSkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBiPWUsY2xlYW51cENhbnZhc01lbW9yeShTKSxTPVQsUD1iLnNpemUsc2V0UHJvZ3Jlc3MoTWF0aC5taW4oOTksTWF0aC5mbG9vcigoSS1QKS8oSS1sKSoxMDApKSksJExvb3BfM31jYXRjaChlKXtyZXR1cm4gaShlKX19KSxpKX1yZXR1cm5bMV19cmV0dXJuIG09ZS5zaXplLEk9Zy5zaXplLFA9SSxTPWgsKHQ9ZnVuY3Rpb24oZSl7Zm9yKDtlOyl7aWYoZS50aGVuKXJldHVybiB2b2lkIGUudGhlbih0LGkpO3RyeXtpZihlLnBvcCl7aWYoZS5sZW5ndGgpcmV0dXJuIGUucG9wKCk/JExvb3BfM19leGl0LmNhbGwodGhpcyk6ZTtlPSRMb29wXzN9ZWxzZSBlPWUuY2FsbCh0aGlzKX1jYXRjaChlKXtyZXR1cm4gaShlKX19fS5iaW5kKHRoaXMpKSgkTG9vcF8zKTtmdW5jdGlvbiAkTG9vcF8zX2V4aXQoKXtyZXR1cm4gY2xlYW51cENhbnZhc01lbW9yeShTKSxjbGVhbnVwQ2FudmFzTWVtb3J5KFQpLGNsZWFudXBDYW52YXNNZW1vcnkocCksY2xlYW51cENhbnZhc01lbW9yeShoKSxjbGVhbnVwQ2FudmFzTWVtb3J5KHUpLHNldFByb2dyZXNzKDEwMCksYShiKX19fWNhdGNoKGUpe3JldHVybiBpKGUpfX0uYmluZCh0aGlzKSxpKX1jYXRjaChlKXtyZXR1cm4gaShlKX19LmJpbmQodGhpcyksaSl9Y2F0Y2goZSl7cmV0dXJuIGkoZSl9fS5iaW5kKHRoaXMpLGkpfWNhdGNoKGUpe3JldHVybiBpKGUpfX0uYmluZCh0aGlzKSxpKX0pKX12YXIgY2hhckF0PXN0cmluZ011bHRpYnl0ZS5jaGFyQXQsU1RSSU5HX0lURVJBVE9SPVwiU3RyaW5nIEl0ZXJhdG9yXCIsc2V0SW50ZXJuYWxTdGF0ZSQyPWludGVybmFsU3RhdGUuc2V0LGdldEludGVybmFsU3RhdGU9aW50ZXJuYWxTdGF0ZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtkZWZpbmVJdGVyYXRvcihTdHJpbmcsXCJTdHJpbmdcIiwoZnVuY3Rpb24oZSl7c2V0SW50ZXJuYWxTdGF0ZSQyKHRoaXMse3R5cGU6U1RSSU5HX0lURVJBVE9SLHN0cmluZzp0b1N0cmluZyhlKSxpbmRleDowfSl9KSwoZnVuY3Rpb24gbmV4dCgpe3ZhciBlLHI9Z2V0SW50ZXJuYWxTdGF0ZSh0aGlzKSx0PXIuc3RyaW5nLGE9ci5pbmRleDtyZXR1cm4gYT49dC5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT1jaGFyQXQodCxhKSxyLmluZGV4Kz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KSk7dmFyIGRvbUl0ZXJhYmxlcz17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH0sY2xhc3NMaXN0PWRvY3VtZW50Q3JlYXRlRWxlbWVudChcInNwYW5cIikuY2xhc3NMaXN0LERPTVRva2VuTGlzdFByb3RvdHlwZT1jbGFzc0xpc3QmJmNsYXNzTGlzdC5jb25zdHJ1Y3RvciYmY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxkb21Ub2tlbkxpc3RQcm90b3R5cGU9RE9NVG9rZW5MaXN0UHJvdG90eXBlPT09T2JqZWN0LnByb3RvdHlwZT92b2lkIDA6RE9NVG9rZW5MaXN0UHJvdG90eXBlLElURVJBVE9SJDI9d2VsbEtub3duU3ltYm9sKFwiaXRlcmF0b3JcIiksVE9fU1RSSU5HX1RBRz13ZWxsS25vd25TeW1ib2woXCJ0b1N0cmluZ1RhZ1wiKSxBcnJheVZhbHVlcz1lc19hcnJheV9pdGVyYXRvci52YWx1ZXMsaGFuZGxlUHJvdG90eXBlJDE9ZnVuY3Rpb24oZSxyKXtpZihlKXtpZihlW0lURVJBVE9SJDJdIT09QXJyYXlWYWx1ZXMpdHJ5e2NyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlLElURVJBVE9SJDIsQXJyYXlWYWx1ZXMpfWNhdGNoKHIpe2VbSVRFUkFUT1IkMl09QXJyYXlWYWx1ZXN9aWYoZVtUT19TVFJJTkdfVEFHXXx8Y3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGUsVE9fU1RSSU5HX1RBRyxyKSxkb21JdGVyYWJsZXNbcl0pZm9yKHZhciB0IGluIGVzX2FycmF5X2l0ZXJhdG9yKWlmKGVbdF0hPT1lc19hcnJheV9pdGVyYXRvclt0XSl0cnl7Y3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGUsdCxlc19hcnJheV9pdGVyYXRvclt0XSl9Y2F0Y2gocil7ZVt0XT1lc19hcnJheV9pdGVyYXRvclt0XX19fTtmb3IodmFyIENPTExFQ1RJT05fTkFNRSQxIGluIGRvbUl0ZXJhYmxlcyloYW5kbGVQcm90b3R5cGUkMShnbG9iYWwkMVtDT0xMRUNUSU9OX05BTUUkMV0mJmdsb2JhbCQxW0NPTExFQ1RJT05fTkFNRSQxXS5wcm90b3R5cGUsQ09MTEVDVElPTl9OQU1FJDEpO2hhbmRsZVByb3RvdHlwZSQxKGRvbVRva2VuTGlzdFByb3RvdHlwZSxcIkRPTVRva2VuTGlzdFwiKTt2YXIgSVRFUkFUT1IkMT13ZWxsS25vd25TeW1ib2woXCJpdGVyYXRvclwiKSxuYXRpdmVVcmw9IWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPW5ldyBVUkwoXCJiP2E9MSZiPTImYz0zXCIsXCJodHRwOi8vYVwiKSxyPWUuc2VhcmNoUGFyYW1zLHQ9XCJcIjtyZXR1cm4gZS5wYXRobmFtZT1cImMlMjBkXCIsci5mb3JFYWNoKChmdW5jdGlvbihlLGEpe3IuZGVsZXRlKFwiYlwiKSx0Kz1hK2V9KSksaXNQdXJlJiYhZS50b0pTT058fCFyLnNvcnR8fFwiaHR0cDovL2EvYyUyMGQ/YT0xJmM9M1wiIT09ZS5ocmVmfHxcIjNcIiE9PXIuZ2V0KFwiY1wiKXx8XCJhPTFcIiE9PVN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKFwiP2E9MVwiKSl8fCFyW0lURVJBVE9SJDFdfHxcImFcIiE9PW5ldyBVUkwoXCJodHRwczovL2FAYlwiKS51c2VybmFtZXx8XCJiXCIhPT1uZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoXCJhPWJcIikpLmdldChcImFcIil8fFwieG4tLWUxYXliY1wiIT09bmV3IFVSTChcImh0dHA6Ly/RgtC10YHRglwiKS5ob3N0fHxcIiMlRDAlQjFcIiE9PW5ldyBVUkwoXCJodHRwOi8vYSPQsVwiKS5oYXNofHxcImExYzNcIiE9PXR8fFwieFwiIT09bmV3IFVSTChcImh0dHA6Ly94XCIsdm9pZCAwKS5ob3N0fSkpLGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3Npbmc9ZnVuY3Rpb24oZSxyLHQsYSl7dHJ5e3JldHVybiBhP3IoYW5PYmplY3QodClbMF0sdFsxXSk6cih0KX1jYXRjaChyKXtpdGVyYXRvckNsb3NlKGUsXCJ0aHJvd1wiLHIpfX0sYXJyYXlGcm9tPWZ1bmN0aW9uIGZyb20oZSl7dmFyIHI9dG9PYmplY3QoZSksdD1pc0NvbnN0cnVjdG9yKHRoaXMpLGE9YXJndW1lbnRzLmxlbmd0aCxpPWE+MT9hcmd1bWVudHNbMV06dm9pZCAwLHM9dm9pZCAwIT09aTtzJiYoaT1mdW5jdGlvbkJpbmRDb250ZXh0KGksYT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpO3ZhciBjLGwsdSxwLGQsaCx5PWdldEl0ZXJhdG9yTWV0aG9kKHIpLEE9MDtpZigheXx8dGhpcz09QXJyYXkmJmlzQXJyYXlJdGVyYXRvck1ldGhvZCh5KSlmb3IoYz10b0xlbmd0aChyLmxlbmd0aCksbD10P25ldyB0aGlzKGMpOkFycmF5KGMpO2M+QTtBKyspaD1zP2kocltBXSxBKTpyW0FdLGNyZWF0ZVByb3BlcnR5KGwsQSxoKTtlbHNlIGZvcihkPShwPWdldEl0ZXJhdG9yKHIseSkpLm5leHQsbD10P25ldyB0aGlzOltdOyEodT1kLmNhbGwocCkpLmRvbmU7QSsrKWg9cz9jYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKHAsaSxbdS52YWx1ZSxBXSwhMCk6dS52YWx1ZSxjcmVhdGVQcm9wZXJ0eShsLEEsaCk7cmV0dXJuIGwubGVuZ3RoPUEsbH0sbWF4SW50PTIxNDc0ODM2NDcsYmFzZT0zNix0TWluPTEsdE1heD0yNixza2V3PTM4LGRhbXA9NzAwLGluaXRpYWxCaWFzPTcyLGluaXRpYWxOPTEyOCxkZWxpbWl0ZXI9XCItXCIscmVnZXhOb25BU0NJST0vW15cXDAtXFx1MDA3RV0vLHJlZ2V4U2VwYXJhdG9ycz0vWy5cXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csT1ZFUkZMT1dfRVJST1I9XCJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzc1wiLGJhc2VNaW51c1RNaW49YmFzZS10TWluLGZsb29yJDI9TWF0aC5mbG9vcixzdHJpbmdGcm9tQ2hhckNvZGU9U3RyaW5nLmZyb21DaGFyQ29kZSx1Y3MyZGVjb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSx0PTAsYT1lLmxlbmd0aDt0PGE7KXt2YXIgaT1lLmNoYXJDb2RlQXQodCsrKTtpZihpPj01NTI5NiYmaTw9NTYzMTkmJnQ8YSl7dmFyIHM9ZS5jaGFyQ29kZUF0KHQrKyk7NTYzMjA9PSg2NDUxMiZzKT9yLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmcykrNjU1MzYpOihyLnB1c2goaSksdC0tKX1lbHNlIHIucHVzaChpKX1yZXR1cm4gcn0sZGlnaXRUb0Jhc2ljPWZ1bmN0aW9uKGUpe3JldHVybiBlKzIyKzc1KihlPDI2KX0sYWRhcHQ9ZnVuY3Rpb24oZSxyLHQpe3ZhciBhPTA7Zm9yKGU9dD9mbG9vciQyKGUvZGFtcCk6ZT4+MSxlKz1mbG9vciQyKGUvcik7ZT5iYXNlTWludXNUTWluKnRNYXg+PjE7YSs9YmFzZSllPWZsb29yJDIoZS9iYXNlTWludXNUTWluKTtyZXR1cm4gZmxvb3IkMihhKyhiYXNlTWludXNUTWluKzEpKmUvKGUrc2tldykpfSxlbmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHIsdCxhPVtdLGk9KGU9dWNzMmRlY29kZShlKSkubGVuZ3RoLHM9aW5pdGlhbE4sYz0wLGw9aW5pdGlhbEJpYXM7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKykodD1lW3JdKTwxMjgmJmEucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUodCkpO3ZhciB1PWEubGVuZ3RoLHA9dTtmb3IodSYmYS5wdXNoKGRlbGltaXRlcik7cDxpOyl7dmFyIGQ9bWF4SW50O2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspKHQ9ZVtyXSk+PXMmJnQ8ZCYmKGQ9dCk7dmFyIGg9cCsxO2lmKGQtcz5mbG9vciQyKChtYXhJbnQtYykvaCkpdGhyb3cgUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7Zm9yKGMrPShkLXMpKmgscz1kLHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoKHQ9ZVtyXSk8cyYmKytjPm1heEludCl0aHJvdyBSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtpZih0PT1zKXtmb3IodmFyIHk9YyxBPWJhc2U7O0ErPWJhc2Upe3ZhciBnPUE8PWw/dE1pbjpBPj1sK3RNYXg/dE1heDpBLWw7aWYoeTxnKWJyZWFrO3ZhciB2PXktZyxFPWJhc2UtZzthLnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhnK3YlRSkpKSx5PWZsb29yJDIodi9FKX1hLnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh5KSkpLGw9YWRhcHQoYyxoLHA9PXUpLGM9MCwrK3B9fSsrYywrK3N9cmV0dXJuIGEuam9pbihcIlwiKX0sc3RyaW5nUHVueWNvZGVUb0FzY2lpPWZ1bmN0aW9uKGUpe3ZhciByLHQsYT1bXSxpPWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycyxcIi5cIikuc3BsaXQoXCIuXCIpO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspdD1pW3JdLGEucHVzaChyZWdleE5vbkFTQ0lJLnRlc3QodCk/XCJ4bi0tXCIrZW5jb2RlKHQpOnQpO3JldHVybiBhLmpvaW4oXCIuXCIpfSxuYXRpdmVGZXRjaD1nZXRCdWlsdEluKFwiZmV0Y2hcIiksTmF0aXZlUmVxdWVzdD1nZXRCdWlsdEluKFwiUmVxdWVzdFwiKSxSZXF1ZXN0UHJvdG90eXBlPU5hdGl2ZVJlcXVlc3QmJk5hdGl2ZVJlcXVlc3QucHJvdG90eXBlLEhlYWRlcnM9Z2V0QnVpbHRJbihcIkhlYWRlcnNcIiksSVRFUkFUT1I9d2VsbEtub3duU3ltYm9sKFwiaXRlcmF0b3JcIiksVVJMX1NFQVJDSF9QQVJBTVM9XCJVUkxTZWFyY2hQYXJhbXNcIixVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUj1VUkxfU0VBUkNIX1BBUkFNUytcIkl0ZXJhdG9yXCIsc2V0SW50ZXJuYWxTdGF0ZSQxPWludGVybmFsU3RhdGUuc2V0LGdldEludGVybmFsUGFyYW1zU3RhdGU9aW50ZXJuYWxTdGF0ZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVMpLGdldEludGVybmFsSXRlcmF0b3JTdGF0ZT1pbnRlcm5hbFN0YXRlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUikscGx1cz0vXFwrL2csc2VxdWVuY2VzPUFycmF5KDQpLHBlcmNlbnRTZXF1ZW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gc2VxdWVuY2VzW2UtMV18fChzZXF1ZW5jZXNbZS0xXT1SZWdFeHAoXCIoKD86JVtcXFxcZGEtZl17Mn0pe1wiK2UrXCJ9KVwiLFwiZ2lcIikpfSxwZXJjZW50RGVjb2RlPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHIpe3JldHVybiBlfX0sZGVzZXJpYWxpemU9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5yZXBsYWNlKHBsdXMsXCIgXCIpLHQ9NDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaChlKXtmb3IoO3Q7KXI9ci5yZXBsYWNlKHBlcmNlbnRTZXF1ZW5jZSh0LS0pLHBlcmNlbnREZWNvZGUpO3JldHVybiByfX0sZmluZD0vWyEnKCl+XXwlMjAvZyxyZXBsYWNlJDE9e1wiIVwiOlwiJTIxXCIsXCInXCI6XCIlMjdcIixcIihcIjpcIiUyOFwiLFwiKVwiOlwiJTI5XCIsXCJ+XCI6XCIlN0VcIixcIiUyMFwiOlwiK1wifSxyZXBsYWNlcj1mdW5jdGlvbihlKXtyZXR1cm4gcmVwbGFjZSQxW2VdfSxzZXJpYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKGZpbmQscmVwbGFjZXIpfSxwYXJzZVNlYXJjaFBhcmFtcz1mdW5jdGlvbihlLHIpe2lmKHIpZm9yKHZhciB0LGEsaT1yLnNwbGl0KFwiJlwiKSxzPTA7czxpLmxlbmd0aDspKHQ9aVtzKytdKS5sZW5ndGgmJihhPXQuc3BsaXQoXCI9XCIpLGUucHVzaCh7a2V5OmRlc2VyaWFsaXplKGEuc2hpZnQoKSksdmFsdWU6ZGVzZXJpYWxpemUoYS5qb2luKFwiPVwiKSl9KSl9LHVwZGF0ZVNlYXJjaFBhcmFtcz1mdW5jdGlvbihlKXt0aGlzLmVudHJpZXMubGVuZ3RoPTAscGFyc2VTZWFyY2hQYXJhbXModGhpcy5lbnRyaWVzLGUpfSx2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aD1mdW5jdGlvbihlLHIpe2lmKGU8cil0aHJvdyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKX0sVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3I9Y3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcigoZnVuY3Rpb24gSXRlcmF0b3IoZSxyKXtzZXRJbnRlcm5hbFN0YXRlJDEodGhpcyx7dHlwZTpVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUixpdGVyYXRvcjpnZXRJdGVyYXRvcihnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKGUpLmVudHJpZXMpLGtpbmQ6cn0pfSksXCJJdGVyYXRvclwiLChmdW5jdGlvbiBuZXh0KCl7dmFyIGU9Z2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpLHI9ZS5raW5kLHQ9ZS5pdGVyYXRvci5uZXh0KCksYT10LnZhbHVlO3JldHVybiB0LmRvbmV8fCh0LnZhbHVlPVwia2V5c1wiPT09cj9hLmtleTpcInZhbHVlc1wiPT09cj9hLnZhbHVlOlthLmtleSxhLnZhbHVlXSksdH0pKSxVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3Rvcj1mdW5jdGlvbiBVUkxTZWFyY2hQYXJhbXMoKXthbkluc3RhbmNlKHRoaXMsVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsVVJMX1NFQVJDSF9QQVJBTVMpO3ZhciBlLHIsdCxhLGkscyxjLGwsdSxwPWFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwLGQ9dGhpcyxoPVtdO2lmKHNldEludGVybmFsU3RhdGUkMShkLHt0eXBlOlVSTF9TRUFSQ0hfUEFSQU1TLGVudHJpZXM6aCx1cGRhdGVVUkw6ZnVuY3Rpb24oKXt9LHVwZGF0ZVNlYXJjaFBhcmFtczp1cGRhdGVTZWFyY2hQYXJhbXN9KSx2b2lkIDAhPT1wKWlmKGlzT2JqZWN0KHApKWlmKGU9Z2V0SXRlcmF0b3JNZXRob2QocCkpZm9yKHQ9KHI9Z2V0SXRlcmF0b3IocCxlKSkubmV4dDshKGE9dC5jYWxsKHIpKS5kb25lOyl7aWYoKGM9KHM9KGk9Z2V0SXRlcmF0b3IoYW5PYmplY3QoYS52YWx1ZSkpKS5uZXh0KS5jYWxsKGkpKS5kb25lfHwobD1zLmNhbGwoaSkpLmRvbmV8fCFzLmNhbGwoaSkuZG9uZSl0aHJvdyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyXCIpO2gucHVzaCh7a2V5OnRvU3RyaW5nKGMudmFsdWUpLHZhbHVlOnRvU3RyaW5nKGwudmFsdWUpfSl9ZWxzZSBmb3IodSBpbiBwKWhhcyQxKHAsdSkmJmgucHVzaCh7a2V5OnUsdmFsdWU6dG9TdHJpbmcocFt1XSl9KTtlbHNlIHBhcnNlU2VhcmNoUGFyYW1zKGgsXCJzdHJpbmdcIj09dHlwZW9mIHA/XCI/XCI9PT1wLmNoYXJBdCgwKT9wLnNsaWNlKDEpOnA6dG9TdHJpbmcocCkpfSxVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGU9VVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IucHJvdG90eXBlO2lmKHJlZGVmaW5lQWxsKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSx7YXBwZW5kOmZ1bmN0aW9uIGFwcGVuZChlLHIpe3ZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsMik7dmFyIHQ9Z2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTt0LmVudHJpZXMucHVzaCh7a2V5OnRvU3RyaW5nKGUpLHZhbHVlOnRvU3RyaW5nKHIpfSksdC51cGRhdGVVUkwoKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciByPWdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyksdD1yLmVudHJpZXMsYT10b1N0cmluZyhlKSxpPTA7aTx0Lmxlbmd0aDspdFtpXS5rZXk9PT1hP3Quc3BsaWNlKGksMSk6aSsrO3IudXBkYXRlVVJMKCl9LGdldDpmdW5jdGlvbiBnZXQoZSl7dmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIHI9Z2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzLHQ9dG9TdHJpbmcoZSksYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHJbYV0ua2V5PT09dClyZXR1cm4gclthXS52YWx1ZTtyZXR1cm4gbnVsbH0sZ2V0QWxsOmZ1bmN0aW9uIGdldEFsbChlKXt2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgcj1nZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXMsdD10b1N0cmluZyhlKSxhPVtdLGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmtleT09PXQmJmEucHVzaChyW2ldLnZhbHVlKTtyZXR1cm4gYX0saGFzOmZ1bmN0aW9uIGhhcyhlKXt2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgcj1nZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXMsdD10b1N0cmluZyhlKSxhPTA7YTxyLmxlbmd0aDspaWYoclthKytdLmtleT09PXQpcmV0dXJuITA7cmV0dXJuITF9LHNldDpmdW5jdGlvbiBzZXQoZSxyKXt2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgdCxhPWdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyksaT1hLmVudHJpZXMscz0hMSxjPXRvU3RyaW5nKGUpLGw9dG9TdHJpbmcociksdT0wO3U8aS5sZW5ndGg7dSsrKSh0PWlbdV0pLmtleT09PWMmJihzP2kuc3BsaWNlKHUtLSwxKToocz0hMCx0LnZhbHVlPWwpKTtzfHxpLnB1c2goe2tleTpjLHZhbHVlOmx9KSxhLnVwZGF0ZVVSTCgpfSxzb3J0OmZ1bmN0aW9uIHNvcnQoKXt2YXIgZSxyLHQsYT1nZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLGk9YS5lbnRyaWVzLHM9aS5zbGljZSgpO2ZvcihpLmxlbmd0aD0wLHQ9MDt0PHMubGVuZ3RoO3QrKyl7Zm9yKGU9c1t0XSxyPTA7cjx0O3IrKylpZihpW3JdLmtleT5lLmtleSl7aS5zcGxpY2UociwwLGUpO2JyZWFrfXI9PT10JiZpLnB1c2goZSl9YS51cGRhdGVVUkwoKX0sZm9yRWFjaDpmdW5jdGlvbiBmb3JFYWNoKGUpe2Zvcih2YXIgcix0PWdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcyxhPWZ1bmN0aW9uQmluZENvbnRleHQoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxpPTA7aTx0Lmxlbmd0aDspYSgocj10W2krK10pLnZhbHVlLHIua2V5LHRoaXMpfSxrZXlzOmZ1bmN0aW9uIGtleXMoKXtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsXCJrZXlzXCIpfSx2YWx1ZXM6ZnVuY3Rpb24gdmFsdWVzKCl7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLFwidmFsdWVzXCIpfSxlbnRyaWVzOmZ1bmN0aW9uIGVudHJpZXMoKXtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsXCJlbnRyaWVzXCIpfX0se2VudW1lcmFibGU6ITB9KSxyZWRlZmluZShVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsSVRFUkFUT1IsVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmVudHJpZXMse25hbWU6XCJlbnRyaWVzXCJ9KSxyZWRlZmluZShVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsXCJ0b1N0cmluZ1wiLChmdW5jdGlvbiB0b1N0cmluZygpe2Zvcih2YXIgZSxyPWdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcyx0PVtdLGE9MDthPHIubGVuZ3RoOyllPXJbYSsrXSx0LnB1c2goc2VyaWFsaXplKGUua2V5KStcIj1cIitzZXJpYWxpemUoZS52YWx1ZSkpO3JldHVybiB0LmpvaW4oXCImXCIpfSkse2VudW1lcmFibGU6ITB9KSxzZXRUb1N0cmluZ1RhZyhVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvcixVUkxfU0VBUkNIX1BBUkFNUyksX2V4cG9ydCh7Z2xvYmFsOiEwLGZvcmNlZDohbmF0aXZlVXJsfSx7VVJMU2VhcmNoUGFyYW1zOlVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yfSksIW5hdGl2ZVVybCYmaXNDYWxsYWJsZShIZWFkZXJzKSl7dmFyIHdyYXBSZXF1ZXN0T3B0aW9ucz1mdW5jdGlvbihlKXtpZihpc09iamVjdChlKSl7dmFyIHIsdD1lLmJvZHk7aWYoY2xhc3NvZih0KT09PVVSTF9TRUFSQ0hfUEFSQU1TKXJldHVybihyPWUuaGVhZGVycz9uZXcgSGVhZGVycyhlLmhlYWRlcnMpOm5ldyBIZWFkZXJzKS5oYXMoXCJjb250ZW50LXR5cGVcIil8fHIuc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOFwiKSxvYmplY3RDcmVhdGUoZSx7Ym9keTpjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCxTdHJpbmcodCkpLGhlYWRlcnM6Y3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAscil9KX1yZXR1cm4gZX07aWYoaXNDYWxsYWJsZShuYXRpdmVGZXRjaCkmJl9leHBvcnQoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uIGZldGNoKGUpe3JldHVybiBuYXRpdmVGZXRjaChlLGFyZ3VtZW50cy5sZW5ndGg+MT93cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKTp7fSl9fSksaXNDYWxsYWJsZShOYXRpdmVSZXF1ZXN0KSl7dmFyIFJlcXVlc3RDb25zdHJ1Y3Rvcj1mdW5jdGlvbiBSZXF1ZXN0KGUpe3JldHVybiBhbkluc3RhbmNlKHRoaXMsUmVxdWVzdENvbnN0cnVjdG9yLFwiUmVxdWVzdFwiKSxuZXcgTmF0aXZlUmVxdWVzdChlLGFyZ3VtZW50cy5sZW5ndGg+MT93cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKTp7fSl9O1JlcXVlc3RQcm90b3R5cGUuY29uc3RydWN0b3I9UmVxdWVzdENvbnN0cnVjdG9yLFJlcXVlc3RDb25zdHJ1Y3Rvci5wcm90b3R5cGU9UmVxdWVzdFByb3RvdHlwZSxfZXhwb3J0KHtnbG9iYWw6ITAsZm9yY2VkOiEwfSx7UmVxdWVzdDpSZXF1ZXN0Q29uc3RydWN0b3J9KX19dmFyIHdlYl91cmxTZWFyY2hQYXJhbXM9e1VSTFNlYXJjaFBhcmFtczpVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvcixnZXRTdGF0ZTpnZXRJbnRlcm5hbFBhcmFtc1N0YXRlfSxjb2RlQXQ9c3RyaW5nTXVsdGlieXRlLmNvZGVBdCxOYXRpdmVVUkw9Z2xvYmFsJDEuVVJMLFVSTFNlYXJjaFBhcmFtcyQxPXdlYl91cmxTZWFyY2hQYXJhbXMuVVJMU2VhcmNoUGFyYW1zLGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGU9d2ViX3VybFNlYXJjaFBhcmFtcy5nZXRTdGF0ZSxzZXRJbnRlcm5hbFN0YXRlPWludGVybmFsU3RhdGUuc2V0LGdldEludGVybmFsVVJMU3RhdGU9aW50ZXJuYWxTdGF0ZS5nZXR0ZXJGb3IoXCJVUkxcIiksZmxvb3IkMT1NYXRoLmZsb29yLHBvdz1NYXRoLnBvdyxJTlZBTElEX0FVVEhPUklUWT1cIkludmFsaWQgYXV0aG9yaXR5XCIsSU5WQUxJRF9TQ0hFTUU9XCJJbnZhbGlkIHNjaGVtZVwiLElOVkFMSURfSE9TVD1cIkludmFsaWQgaG9zdFwiLElOVkFMSURfUE9SVD1cIkludmFsaWQgcG9ydFwiLEFMUEhBPS9bQS1aYS16XS8sQUxQSEFOVU1FUklDPS9bXFxkKy0uQS1aYS16XS8sRElHSVQ9L1xcZC8sSEVYX1NUQVJUPS9eMHgvaSxPQ1Q9L15bMC03XSskLyxERUM9L15cXGQrJC8sSEVYPS9eW1xcZEEtRmEtZl0rJC8sRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVD0vW1xcMFxcdFxcblxcciAjJS86PD4/QFtcXFxcXFxdXnxdLyxGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5UPS9bXFwwXFx0XFxuXFxyICMvOjw+P0BbXFxcXFxcXV58XS8sTEVBRElOR19BTkRfVFJBSUxJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRT0vXltcXHUwMDAwLVxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDIwXSskL2csVEFCX0FORF9ORVdfTElORT0vW1xcdFxcblxccl0vZyxFT0YscGFyc2VIb3N0PWZ1bmN0aW9uKGUscil7dmFyIHQsYSxpO2lmKFwiW1wiPT1yLmNoYXJBdCgwKSl7aWYoXCJdXCIhPXIuY2hhckF0KHIubGVuZ3RoLTEpKXJldHVybiBJTlZBTElEX0hPU1Q7aWYoISh0PXBhcnNlSVB2NihyLnNsaWNlKDEsLTEpKSkpcmV0dXJuIElOVkFMSURfSE9TVDtlLmhvc3Q9dH1lbHNlIGlmKGlzU3BlY2lhbChlKSl7aWYocj1zdHJpbmdQdW55Y29kZVRvQXNjaWkociksRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVC50ZXN0KHIpKXJldHVybiBJTlZBTElEX0hPU1Q7aWYobnVsbD09PSh0PXBhcnNlSVB2NChyKSkpcmV0dXJuIElOVkFMSURfSE9TVDtlLmhvc3Q9dH1lbHNle2lmKEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQudGVzdChyKSlyZXR1cm4gSU5WQUxJRF9IT1NUO2Zvcih0PVwiXCIsYT1hcnJheUZyb20ociksaT0wO2k8YS5sZW5ndGg7aSsrKXQrPXBlcmNlbnRFbmNvZGUoYVtpXSxDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtlLmhvc3Q9dH19LHBhcnNlSVB2ND1mdW5jdGlvbihlKXt2YXIgcix0LGEsaSxzLGMsbCx1PWUuc3BsaXQoXCIuXCIpO2lmKHUubGVuZ3RoJiZcIlwiPT11W3UubGVuZ3RoLTFdJiZ1LnBvcCgpLChyPXUubGVuZ3RoKT40KXJldHVybiBlO2Zvcih0PVtdLGE9MDthPHI7YSsrKXtpZihcIlwiPT0oaT11W2FdKSlyZXR1cm4gZTtpZihzPTEwLGkubGVuZ3RoPjEmJlwiMFwiPT1pLmNoYXJBdCgwKSYmKHM9SEVYX1NUQVJULnRlc3QoaSk/MTY6OCxpPWkuc2xpY2UoOD09cz8xOjIpKSxcIlwiPT09aSljPTA7ZWxzZXtpZighKDEwPT1zP0RFQzo4PT1zP09DVDpIRVgpLnRlc3QoaSkpcmV0dXJuIGU7Yz1wYXJzZUludChpLHMpfXQucHVzaChjKX1mb3IoYT0wO2E8cjthKyspaWYoYz10W2FdLGE9PXItMSl7aWYoYz49cG93KDI1Niw1LXIpKXJldHVybiBudWxsfWVsc2UgaWYoYz4yNTUpcmV0dXJuIG51bGw7Zm9yKGw9dC5wb3AoKSxhPTA7YTx0Lmxlbmd0aDthKyspbCs9dFthXSpwb3coMjU2LDMtYSk7cmV0dXJuIGx9LHBhcnNlSVB2Nj1mdW5jdGlvbihlKXt2YXIgcix0LGEsaSxzLGMsbCx1PVswLDAsMCwwLDAsMCwwLDBdLHA9MCxkPW51bGwsaD0wLGNocj1mdW5jdGlvbigpe3JldHVybiBlLmNoYXJBdChoKX07aWYoXCI6XCI9PWNocigpKXtpZihcIjpcIiE9ZS5jaGFyQXQoMSkpcmV0dXJuO2grPTIsZD0rK3B9Zm9yKDtjaHIoKTspe2lmKDg9PXApcmV0dXJuO2lmKFwiOlwiIT1jaHIoKSl7Zm9yKHI9dD0wO3Q8NCYmSEVYLnRlc3QoY2hyKCkpOylyPTE2KnIrcGFyc2VJbnQoY2hyKCksMTYpLGgrKyx0Kys7aWYoXCIuXCI9PWNocigpKXtpZigwPT10KXJldHVybjtpZihoLT10LHA+NilyZXR1cm47Zm9yKGE9MDtjaHIoKTspe2lmKGk9bnVsbCxhPjApe2lmKCEoXCIuXCI9PWNocigpJiZhPDQpKXJldHVybjtoKyt9aWYoIURJR0lULnRlc3QoY2hyKCkpKXJldHVybjtmb3IoO0RJR0lULnRlc3QoY2hyKCkpOyl7aWYocz1wYXJzZUludChjaHIoKSwxMCksbnVsbD09PWkpaT1zO2Vsc2V7aWYoMD09aSlyZXR1cm47aT0xMCppK3N9aWYoaT4yNTUpcmV0dXJuO2grK311W3BdPTI1Nip1W3BdK2ksMiE9KythJiY0IT1hfHxwKyt9aWYoNCE9YSlyZXR1cm47YnJlYWt9aWYoXCI6XCI9PWNocigpKXtpZihoKyssIWNocigpKXJldHVybn1lbHNlIGlmKGNocigpKXJldHVybjt1W3ArK109cn1lbHNle2lmKG51bGwhPT1kKXJldHVybjtoKyssZD0rK3B9fWlmKG51bGwhPT1kKWZvcihjPXAtZCxwPTc7MCE9cCYmYz4wOylsPXVbcF0sdVtwLS1dPXVbZCtjLTFdLHVbZCstLWNdPWw7ZWxzZSBpZig4IT1wKXJldHVybjtyZXR1cm4gdX0sZmluZExvbmdlc3RaZXJvU2VxdWVuY2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPW51bGwsdD0xLGE9bnVsbCxpPTAscz0wO3M8ODtzKyspMCE9PWVbc10/KGk+dCYmKHI9YSx0PWkpLGE9bnVsbCxpPTApOihudWxsPT09YSYmKGE9cyksKytpKTtyZXR1cm4gaT50JiYocj1hLHQ9aSkscn0sc2VyaWFsaXplSG9zdD1mdW5jdGlvbihlKXt2YXIgcix0LGEsaTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7Zm9yKHI9W10sdD0wO3Q8NDt0Kyspci51bnNoaWZ0KGUlMjU2KSxlPWZsb29yJDEoZS8yNTYpO3JldHVybiByLmpvaW4oXCIuXCIpfWlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXtmb3Iocj1cIlwiLGE9ZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoZSksdD0wO3Q8ODt0KyspaSYmMD09PWVbdF18fChpJiYoaT0hMSksYT09PXQ/KHIrPXQ/XCI6XCI6XCI6OlwiLGk9ITApOihyKz1lW3RdLnRvU3RyaW5nKDE2KSx0PDcmJihyKz1cIjpcIikpKTtyZXR1cm5cIltcIityK1wiXVwifXJldHVybiBlfSxDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0PXt9LGZyYWdtZW50UGVyY2VudEVuY29kZVNldD1vYmplY3RBc3NpZ24oe30sQzBDb250cm9sUGVyY2VudEVuY29kZVNldCx7XCIgXCI6MSwnXCInOjEsXCI8XCI6MSxcIj5cIjoxLFwiYFwiOjF9KSxwYXRoUGVyY2VudEVuY29kZVNldD1vYmplY3RBc3NpZ24oe30sZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0LHtcIiNcIjoxLFwiP1wiOjEsXCJ7XCI6MSxcIn1cIjoxfSksdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0PW9iamVjdEFzc2lnbih7fSxwYXRoUGVyY2VudEVuY29kZVNldCx7XCIvXCI6MSxcIjpcIjoxLFwiO1wiOjEsXCI9XCI6MSxcIkBcIjoxLFwiW1wiOjEsXCJcXFxcXCI6MSxcIl1cIjoxLFwiXlwiOjEsXCJ8XCI6MX0pLHBlcmNlbnRFbmNvZGU9ZnVuY3Rpb24oZSxyKXt2YXIgdD1jb2RlQXQoZSwwKTtyZXR1cm4gdD4zMiYmdDwxMjcmJiFoYXMkMShyLGUpP2U6ZW5jb2RlVVJJQ29tcG9uZW50KGUpfSxzcGVjaWFsU2NoZW1lcz17ZnRwOjIxLGZpbGU6bnVsbCxodHRwOjgwLGh0dHBzOjQ0Myx3czo4MCx3c3M6NDQzfSxpc1NwZWNpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhcyQxKHNwZWNpYWxTY2hlbWVzLGUuc2NoZW1lKX0saW5jbHVkZXNDcmVkZW50aWFscz1mdW5jdGlvbihlKXtyZXR1cm5cIlwiIT1lLnVzZXJuYW1lfHxcIlwiIT1lLnBhc3N3b3JkfSxjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIWUuaG9zdHx8ZS5jYW5ub3RCZUFCYXNlVVJMfHxcImZpbGVcIj09ZS5zY2hlbWV9LGlzV2luZG93c0RyaXZlTGV0dGVyPWZ1bmN0aW9uKGUscil7dmFyIHQ7cmV0dXJuIDI9PWUubGVuZ3RoJiZBTFBIQS50ZXN0KGUuY2hhckF0KDApKSYmKFwiOlwiPT0odD1lLmNoYXJBdCgxKSl8fCFyJiZcInxcIj09dCl9LHN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXI9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIGUubGVuZ3RoPjEmJmlzV2luZG93c0RyaXZlTGV0dGVyKGUuc2xpY2UoMCwyKSkmJigyPT1lLmxlbmd0aHx8XCIvXCI9PT0ocj1lLmNoYXJBdCgyKSl8fFwiXFxcXFwiPT09cnx8XCI/XCI9PT1yfHxcIiNcIj09PXIpfSxzaG9ydGVuVVJMc1BhdGg9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXRoLHQ9ci5sZW5ndGg7IXR8fFwiZmlsZVwiPT1lLnNjaGVtZSYmMT09dCYmaXNXaW5kb3dzRHJpdmVMZXR0ZXIoclswXSwhMCl8fHIucG9wKCl9LGlzU2luZ2xlRG90PWZ1bmN0aW9uKGUpe3JldHVyblwiLlwiPT09ZXx8XCIlMmVcIj09PWUudG9Mb3dlckNhc2UoKX0saXNEb3VibGVEb3Q9ZnVuY3Rpb24oZSl7cmV0dXJuXCIuLlwiPT09KGU9ZS50b0xvd2VyQ2FzZSgpKXx8XCIlMmUuXCI9PT1lfHxcIi4lMmVcIj09PWV8fFwiJTJlJTJlXCI9PT1lfSxTQ0hFTUVfU1RBUlQ9e30sU0NIRU1FPXt9LE5PX1NDSEVNRT17fSxTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWT17fSxQQVRIX09SX0FVVEhPUklUWT17fSxSRUxBVElWRT17fSxSRUxBVElWRV9TTEFTSD17fSxTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTPXt9LFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTPXt9LEFVVEhPUklUWT17fSxIT1NUPXt9LEhPU1ROQU1FPXt9LFBPUlQ9e30sRklMRT17fSxGSUxFX1NMQVNIPXt9LEZJTEVfSE9TVD17fSxQQVRIX1NUQVJUPXt9LFBBVEg9e30sQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSD17fSxRVUVSWT17fSxGUkFHTUVOVD17fSxwYXJzZVVSTD1mdW5jdGlvbihlLHIsdCxhKXt2YXIgaSxzLGMsbCx1PXR8fFNDSEVNRV9TVEFSVCxwPTAsZD1cIlwiLGg9ITEseT0hMSxBPSExO2Zvcih0fHwoZS5zY2hlbWU9XCJcIixlLnVzZXJuYW1lPVwiXCIsZS5wYXNzd29yZD1cIlwiLGUuaG9zdD1udWxsLGUucG9ydD1udWxsLGUucGF0aD1bXSxlLnF1ZXJ5PW51bGwsZS5mcmFnbWVudD1udWxsLGUuY2Fubm90QmVBQmFzZVVSTD0hMSxyPXIucmVwbGFjZShMRUFESU5HX0FORF9UUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFLFwiXCIpKSxyPXIucmVwbGFjZShUQUJfQU5EX05FV19MSU5FLFwiXCIpLGk9YXJyYXlGcm9tKHIpO3A8PWkubGVuZ3RoOyl7c3dpdGNoKHM9aVtwXSx1KXtjYXNlIFNDSEVNRV9TVEFSVDppZighc3x8IUFMUEhBLnRlc3Qocykpe2lmKHQpcmV0dXJuIElOVkFMSURfU0NIRU1FO3U9Tk9fU0NIRU1FO2NvbnRpbnVlfWQrPXMudG9Mb3dlckNhc2UoKSx1PVNDSEVNRTticmVhaztjYXNlIFNDSEVNRTppZihzJiYoQUxQSEFOVU1FUklDLnRlc3Qocyl8fFwiK1wiPT1zfHxcIi1cIj09c3x8XCIuXCI9PXMpKWQrPXMudG9Mb3dlckNhc2UoKTtlbHNle2lmKFwiOlwiIT1zKXtpZih0KXJldHVybiBJTlZBTElEX1NDSEVNRTtkPVwiXCIsdT1OT19TQ0hFTUUscD0wO2NvbnRpbnVlfWlmKHQmJihpc1NwZWNpYWwoZSkhPWhhcyQxKHNwZWNpYWxTY2hlbWVzLGQpfHxcImZpbGVcIj09ZCYmKGluY2x1ZGVzQ3JlZGVudGlhbHMoZSl8fG51bGwhPT1lLnBvcnQpfHxcImZpbGVcIj09ZS5zY2hlbWUmJiFlLmhvc3QpKXJldHVybjtpZihlLnNjaGVtZT1kLHQpcmV0dXJuIHZvaWQoaXNTcGVjaWFsKGUpJiZzcGVjaWFsU2NoZW1lc1tlLnNjaGVtZV09PWUucG9ydCYmKGUucG9ydD1udWxsKSk7ZD1cIlwiLFwiZmlsZVwiPT1lLnNjaGVtZT91PUZJTEU6aXNTcGVjaWFsKGUpJiZhJiZhLnNjaGVtZT09ZS5zY2hlbWU/dT1TUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTppc1NwZWNpYWwoZSk/dT1TUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTOlwiL1wiPT1pW3ArMV0/KHU9UEFUSF9PUl9BVVRIT1JJVFkscCsrKTooZS5jYW5ub3RCZUFCYXNlVVJMPSEwLGUucGF0aC5wdXNoKFwiXCIpLHU9Q0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSCl9YnJlYWs7Y2FzZSBOT19TQ0hFTUU6aWYoIWF8fGEuY2Fubm90QmVBQmFzZVVSTCYmXCIjXCIhPXMpcmV0dXJuIElOVkFMSURfU0NIRU1FO2lmKGEuY2Fubm90QmVBQmFzZVVSTCYmXCIjXCI9PXMpe2Uuc2NoZW1lPWEuc2NoZW1lLGUucGF0aD1hLnBhdGguc2xpY2UoKSxlLnF1ZXJ5PWEucXVlcnksZS5mcmFnbWVudD1cIlwiLGUuY2Fubm90QmVBQmFzZVVSTD0hMCx1PUZSQUdNRU5UO2JyZWFrfXU9XCJmaWxlXCI9PWEuc2NoZW1lP0ZJTEU6UkVMQVRJVkU7Y29udGludWU7Y2FzZSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTppZihcIi9cIiE9c3x8XCIvXCIhPWlbcCsxXSl7dT1SRUxBVElWRTtjb250aW51ZX11PVNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTLHArKzticmVhaztjYXNlIFBBVEhfT1JfQVVUSE9SSVRZOmlmKFwiL1wiPT1zKXt1PUFVVEhPUklUWTticmVha311PVBBVEg7Y29udGludWU7Y2FzZSBSRUxBVElWRTppZihlLnNjaGVtZT1hLnNjaGVtZSxzPT1FT0YpZS51c2VybmFtZT1hLnVzZXJuYW1lLGUucGFzc3dvcmQ9YS5wYXNzd29yZCxlLmhvc3Q9YS5ob3N0LGUucG9ydD1hLnBvcnQsZS5wYXRoPWEucGF0aC5zbGljZSgpLGUucXVlcnk9YS5xdWVyeTtlbHNlIGlmKFwiL1wiPT1zfHxcIlxcXFxcIj09cyYmaXNTcGVjaWFsKGUpKXU9UkVMQVRJVkVfU0xBU0g7ZWxzZSBpZihcIj9cIj09cyllLnVzZXJuYW1lPWEudXNlcm5hbWUsZS5wYXNzd29yZD1hLnBhc3N3b3JkLGUuaG9zdD1hLmhvc3QsZS5wb3J0PWEucG9ydCxlLnBhdGg9YS5wYXRoLnNsaWNlKCksZS5xdWVyeT1cIlwiLHU9UVVFUlk7ZWxzZXtpZihcIiNcIiE9cyl7ZS51c2VybmFtZT1hLnVzZXJuYW1lLGUucGFzc3dvcmQ9YS5wYXNzd29yZCxlLmhvc3Q9YS5ob3N0LGUucG9ydD1hLnBvcnQsZS5wYXRoPWEucGF0aC5zbGljZSgpLGUucGF0aC5wb3AoKSx1PVBBVEg7Y29udGludWV9ZS51c2VybmFtZT1hLnVzZXJuYW1lLGUucGFzc3dvcmQ9YS5wYXNzd29yZCxlLmhvc3Q9YS5ob3N0LGUucG9ydD1hLnBvcnQsZS5wYXRoPWEucGF0aC5zbGljZSgpLGUucXVlcnk9YS5xdWVyeSxlLmZyYWdtZW50PVwiXCIsdT1GUkFHTUVOVH1icmVhaztjYXNlIFJFTEFUSVZFX1NMQVNIOmlmKCFpc1NwZWNpYWwoZSl8fFwiL1wiIT1zJiZcIlxcXFxcIiE9cyl7aWYoXCIvXCIhPXMpe2UudXNlcm5hbWU9YS51c2VybmFtZSxlLnBhc3N3b3JkPWEucGFzc3dvcmQsZS5ob3N0PWEuaG9zdCxlLnBvcnQ9YS5wb3J0LHU9UEFUSDtjb250aW51ZX11PUFVVEhPUklUWX1lbHNlIHU9U1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7YnJlYWs7Y2FzZSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTOmlmKHU9U1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVMsXCIvXCIhPXN8fFwiL1wiIT1kLmNoYXJBdChwKzEpKWNvbnRpbnVlO3ArKzticmVhaztjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTOmlmKFwiL1wiIT1zJiZcIlxcXFxcIiE9cyl7dT1BVVRIT1JJVFk7Y29udGludWV9YnJlYWs7Y2FzZSBBVVRIT1JJVFk6aWYoXCJAXCI9PXMpe2gmJihkPVwiJTQwXCIrZCksaD0hMCxjPWFycmF5RnJvbShkKTtmb3IodmFyIGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHY9Y1tnXTtpZihcIjpcIiE9dnx8QSl7dmFyIEU9cGVyY2VudEVuY29kZSh2LHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7QT9lLnBhc3N3b3JkKz1FOmUudXNlcm5hbWUrPUV9ZWxzZSBBPSEwfWQ9XCJcIn1lbHNlIGlmKHM9PUVPRnx8XCIvXCI9PXN8fFwiP1wiPT1zfHxcIiNcIj09c3x8XCJcXFxcXCI9PXMmJmlzU3BlY2lhbChlKSl7aWYoaCYmXCJcIj09ZClyZXR1cm4gSU5WQUxJRF9BVVRIT1JJVFk7cC09YXJyYXlGcm9tKGQpLmxlbmd0aCsxLGQ9XCJcIix1PUhPU1R9ZWxzZSBkKz1zO2JyZWFrO2Nhc2UgSE9TVDpjYXNlIEhPU1ROQU1FOmlmKHQmJlwiZmlsZVwiPT1lLnNjaGVtZSl7dT1GSUxFX0hPU1Q7Y29udGludWV9aWYoXCI6XCIhPXN8fHkpe2lmKHM9PUVPRnx8XCIvXCI9PXN8fFwiP1wiPT1zfHxcIiNcIj09c3x8XCJcXFxcXCI9PXMmJmlzU3BlY2lhbChlKSl7aWYoaXNTcGVjaWFsKGUpJiZcIlwiPT1kKXJldHVybiBJTlZBTElEX0hPU1Q7aWYodCYmXCJcIj09ZCYmKGluY2x1ZGVzQ3JlZGVudGlhbHMoZSl8fG51bGwhPT1lLnBvcnQpKXJldHVybjtpZihsPXBhcnNlSG9zdChlLGQpKXJldHVybiBsO2lmKGQ9XCJcIix1PVBBVEhfU1RBUlQsdClyZXR1cm47Y29udGludWV9XCJbXCI9PXM/eT0hMDpcIl1cIj09cyYmKHk9ITEpLGQrPXN9ZWxzZXtpZihcIlwiPT1kKXJldHVybiBJTlZBTElEX0hPU1Q7aWYobD1wYXJzZUhvc3QoZSxkKSlyZXR1cm4gbDtpZihkPVwiXCIsdT1QT1JULHQ9PUhPU1ROQU1FKXJldHVybn1icmVhaztjYXNlIFBPUlQ6aWYoIURJR0lULnRlc3Qocykpe2lmKHM9PUVPRnx8XCIvXCI9PXN8fFwiP1wiPT1zfHxcIiNcIj09c3x8XCJcXFxcXCI9PXMmJmlzU3BlY2lhbChlKXx8dCl7aWYoXCJcIiE9ZCl7dmFyIG09cGFyc2VJbnQoZCwxMCk7aWYobT42NTUzNSlyZXR1cm4gSU5WQUxJRF9QT1JUO2UucG9ydD1pc1NwZWNpYWwoZSkmJm09PT1zcGVjaWFsU2NoZW1lc1tlLnNjaGVtZV0/bnVsbDptLGQ9XCJcIn1pZih0KXJldHVybjt1PVBBVEhfU1RBUlQ7Y29udGludWV9cmV0dXJuIElOVkFMSURfUE9SVH1kKz1zO2JyZWFrO2Nhc2UgRklMRTppZihlLnNjaGVtZT1cImZpbGVcIixcIi9cIj09c3x8XCJcXFxcXCI9PXMpdT1GSUxFX1NMQVNIO2Vsc2V7aWYoIWF8fFwiZmlsZVwiIT1hLnNjaGVtZSl7dT1QQVRIO2NvbnRpbnVlfWlmKHM9PUVPRillLmhvc3Q9YS5ob3N0LGUucGF0aD1hLnBhdGguc2xpY2UoKSxlLnF1ZXJ5PWEucXVlcnk7ZWxzZSBpZihcIj9cIj09cyllLmhvc3Q9YS5ob3N0LGUucGF0aD1hLnBhdGguc2xpY2UoKSxlLnF1ZXJ5PVwiXCIsdT1RVUVSWTtlbHNle2lmKFwiI1wiIT1zKXtzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGkuc2xpY2UocCkuam9pbihcIlwiKSl8fChlLmhvc3Q9YS5ob3N0LGUucGF0aD1hLnBhdGguc2xpY2UoKSxzaG9ydGVuVVJMc1BhdGgoZSkpLHU9UEFUSDtjb250aW51ZX1lLmhvc3Q9YS5ob3N0LGUucGF0aD1hLnBhdGguc2xpY2UoKSxlLnF1ZXJ5PWEucXVlcnksZS5mcmFnbWVudD1cIlwiLHU9RlJBR01FTlR9fWJyZWFrO2Nhc2UgRklMRV9TTEFTSDppZihcIi9cIj09c3x8XCJcXFxcXCI9PXMpe3U9RklMRV9IT1NUO2JyZWFrfWEmJlwiZmlsZVwiPT1hLnNjaGVtZSYmIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoaS5zbGljZShwKS5qb2luKFwiXCIpKSYmKGlzV2luZG93c0RyaXZlTGV0dGVyKGEucGF0aFswXSwhMCk/ZS5wYXRoLnB1c2goYS5wYXRoWzBdKTplLmhvc3Q9YS5ob3N0KSx1PVBBVEg7Y29udGludWU7Y2FzZSBGSUxFX0hPU1Q6aWYocz09RU9GfHxcIi9cIj09c3x8XCJcXFxcXCI9PXN8fFwiP1wiPT1zfHxcIiNcIj09cyl7aWYoIXQmJmlzV2luZG93c0RyaXZlTGV0dGVyKGQpKXU9UEFUSDtlbHNlIGlmKFwiXCI9PWQpe2lmKGUuaG9zdD1cIlwiLHQpcmV0dXJuO3U9UEFUSF9TVEFSVH1lbHNle2lmKGw9cGFyc2VIb3N0KGUsZCkpcmV0dXJuIGw7aWYoXCJsb2NhbGhvc3RcIj09ZS5ob3N0JiYoZS5ob3N0PVwiXCIpLHQpcmV0dXJuO2Q9XCJcIix1PVBBVEhfU1RBUlR9Y29udGludWV9ZCs9czticmVhaztjYXNlIFBBVEhfU1RBUlQ6aWYoaXNTcGVjaWFsKGUpKXtpZih1PVBBVEgsXCIvXCIhPXMmJlwiXFxcXFwiIT1zKWNvbnRpbnVlfWVsc2UgaWYodHx8XCI/XCIhPXMpaWYodHx8XCIjXCIhPXMpe2lmKHMhPUVPRiYmKHU9UEFUSCxcIi9cIiE9cykpY29udGludWV9ZWxzZSBlLmZyYWdtZW50PVwiXCIsdT1GUkFHTUVOVDtlbHNlIGUucXVlcnk9XCJcIix1PVFVRVJZO2JyZWFrO2Nhc2UgUEFUSDppZihzPT1FT0Z8fFwiL1wiPT1zfHxcIlxcXFxcIj09cyYmaXNTcGVjaWFsKGUpfHwhdCYmKFwiP1wiPT1zfHxcIiNcIj09cykpe2lmKGlzRG91YmxlRG90KGQpPyhzaG9ydGVuVVJMc1BhdGgoZSksXCIvXCI9PXN8fFwiXFxcXFwiPT1zJiZpc1NwZWNpYWwoZSl8fGUucGF0aC5wdXNoKFwiXCIpKTppc1NpbmdsZURvdChkKT9cIi9cIj09c3x8XCJcXFxcXCI9PXMmJmlzU3BlY2lhbChlKXx8ZS5wYXRoLnB1c2goXCJcIik6KFwiZmlsZVwiPT1lLnNjaGVtZSYmIWUucGF0aC5sZW5ndGgmJmlzV2luZG93c0RyaXZlTGV0dGVyKGQpJiYoZS5ob3N0JiYoZS5ob3N0PVwiXCIpLGQ9ZC5jaGFyQXQoMCkrXCI6XCIpLGUucGF0aC5wdXNoKGQpKSxkPVwiXCIsXCJmaWxlXCI9PWUuc2NoZW1lJiYocz09RU9GfHxcIj9cIj09c3x8XCIjXCI9PXMpKWZvcig7ZS5wYXRoLmxlbmd0aD4xJiZcIlwiPT09ZS5wYXRoWzBdOyllLnBhdGguc2hpZnQoKTtcIj9cIj09cz8oZS5xdWVyeT1cIlwiLHU9UVVFUlkpOlwiI1wiPT1zJiYoZS5mcmFnbWVudD1cIlwiLHU9RlJBR01FTlQpfWVsc2UgZCs9cGVyY2VudEVuY29kZShzLHBhdGhQZXJjZW50RW5jb2RlU2V0KTticmVhaztjYXNlIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg6XCI/XCI9PXM/KGUucXVlcnk9XCJcIix1PVFVRVJZKTpcIiNcIj09cz8oZS5mcmFnbWVudD1cIlwiLHU9RlJBR01FTlQpOnMhPUVPRiYmKGUucGF0aFswXSs9cGVyY2VudEVuY29kZShzLEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpKTticmVhaztjYXNlIFFVRVJZOnR8fFwiI1wiIT1zP3MhPUVPRiYmKFwiJ1wiPT1zJiZpc1NwZWNpYWwoZSk/ZS5xdWVyeSs9XCIlMjdcIjplLnF1ZXJ5Kz1cIiNcIj09cz9cIiUyM1wiOnBlcmNlbnRFbmNvZGUocyxDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KSk6KGUuZnJhZ21lbnQ9XCJcIix1PUZSQUdNRU5UKTticmVhaztjYXNlIEZSQUdNRU5UOnMhPUVPRiYmKGUuZnJhZ21lbnQrPXBlcmNlbnRFbmNvZGUocyxmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQpKX1wKyt9fSxVUkxDb25zdHJ1Y3Rvcj1mdW5jdGlvbiBVUkwoZSl7dmFyIHIsdCxhPWFuSW5zdGFuY2UodGhpcyxVUkxDb25zdHJ1Y3RvcixcIlVSTFwiKSxpPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHM9dG9TdHJpbmcoZSksYz1zZXRJbnRlcm5hbFN0YXRlKGEse3R5cGU6XCJVUkxcIn0pO2lmKHZvaWQgMCE9PWkpaWYoaSBpbnN0YW5jZW9mIFVSTENvbnN0cnVjdG9yKXI9Z2V0SW50ZXJuYWxVUkxTdGF0ZShpKTtlbHNlIGlmKHQ9cGFyc2VVUkwocj17fSx0b1N0cmluZyhpKSkpdGhyb3cgVHlwZUVycm9yKHQpO2lmKHQ9cGFyc2VVUkwoYyxzLG51bGwscikpdGhyb3cgVHlwZUVycm9yKHQpO3ZhciBsPWMuc2VhcmNoUGFyYW1zPW5ldyBVUkxTZWFyY2hQYXJhbXMkMSx1PWdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUobCk7dS51cGRhdGVTZWFyY2hQYXJhbXMoYy5xdWVyeSksdS51cGRhdGVVUkw9ZnVuY3Rpb24oKXtjLnF1ZXJ5PVN0cmluZyhsKXx8bnVsbH0sZGVzY3JpcHRvcnN8fChhLmhyZWY9c2VyaWFsaXplVVJMLmNhbGwoYSksYS5vcmlnaW49Z2V0T3JpZ2luLmNhbGwoYSksYS5wcm90b2NvbD1nZXRQcm90b2NvbC5jYWxsKGEpLGEudXNlcm5hbWU9Z2V0VXNlcm5hbWUuY2FsbChhKSxhLnBhc3N3b3JkPWdldFBhc3N3b3JkLmNhbGwoYSksYS5ob3N0PWdldEhvc3QuY2FsbChhKSxhLmhvc3RuYW1lPWdldEhvc3RuYW1lLmNhbGwoYSksYS5wb3J0PWdldFBvcnQuY2FsbChhKSxhLnBhdGhuYW1lPWdldFBhdGhuYW1lLmNhbGwoYSksYS5zZWFyY2g9Z2V0U2VhcmNoLmNhbGwoYSksYS5zZWFyY2hQYXJhbXM9Z2V0U2VhcmNoUGFyYW1zLmNhbGwoYSksYS5oYXNoPWdldEhhc2guY2FsbChhKSl9LFVSTFByb3RvdHlwZT1VUkxDb25zdHJ1Y3Rvci5wcm90b3R5cGUsc2VyaWFsaXplVVJMPWZ1bmN0aW9uKCl7dmFyIGU9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKSxyPWUuc2NoZW1lLHQ9ZS51c2VybmFtZSxhPWUucGFzc3dvcmQsaT1lLmhvc3Qscz1lLnBvcnQsYz1lLnBhdGgsbD1lLnF1ZXJ5LHU9ZS5mcmFnbWVudCxwPXIrXCI6XCI7cmV0dXJuIG51bGwhPT1pPyhwKz1cIi8vXCIsaW5jbHVkZXNDcmVkZW50aWFscyhlKSYmKHArPXQrKGE/XCI6XCIrYTpcIlwiKStcIkBcIikscCs9c2VyaWFsaXplSG9zdChpKSxudWxsIT09cyYmKHArPVwiOlwiK3MpKTpcImZpbGVcIj09ciYmKHArPVwiLy9cIikscCs9ZS5jYW5ub3RCZUFCYXNlVVJMP2NbMF06Yy5sZW5ndGg/XCIvXCIrYy5qb2luKFwiL1wiKTpcIlwiLG51bGwhPT1sJiYocCs9XCI/XCIrbCksbnVsbCE9PXUmJihwKz1cIiNcIit1KSxwfSxnZXRPcmlnaW49ZnVuY3Rpb24oKXt2YXIgZT1nZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLHI9ZS5zY2hlbWUsdD1lLnBvcnQ7aWYoXCJibG9iXCI9PXIpdHJ5e3JldHVybiBuZXcgVVJMQ29uc3RydWN0b3Ioci5wYXRoWzBdKS5vcmlnaW59Y2F0Y2goZSl7cmV0dXJuXCJudWxsXCJ9cmV0dXJuXCJmaWxlXCIhPXImJmlzU3BlY2lhbChlKT9yK1wiOi8vXCIrc2VyaWFsaXplSG9zdChlLmhvc3QpKyhudWxsIT09dD9cIjpcIit0OlwiXCIpOlwibnVsbFwifSxnZXRQcm90b2NvbD1mdW5jdGlvbigpe3JldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNjaGVtZStcIjpcIn0sZ2V0VXNlcm5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS51c2VybmFtZX0sZ2V0UGFzc3dvcmQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5wYXNzd29yZH0sZ2V0SG9zdD1mdW5jdGlvbigpe3ZhciBlPWdldEludGVybmFsVVJMU3RhdGUodGhpcykscj1lLmhvc3QsdD1lLnBvcnQ7cmV0dXJuIG51bGw9PT1yP1wiXCI6bnVsbD09PXQ/c2VyaWFsaXplSG9zdChyKTpzZXJpYWxpemVIb3N0KHIpK1wiOlwiK3R9LGdldEhvc3RuYW1lPWZ1bmN0aW9uKCl7dmFyIGU9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5ob3N0O3JldHVybiBudWxsPT09ZT9cIlwiOnNlcmlhbGl6ZUhvc3QoZSl9LGdldFBvcnQ9ZnVuY3Rpb24oKXt2YXIgZT1nZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnBvcnQ7cmV0dXJuIG51bGw9PT1lP1wiXCI6U3RyaW5nKGUpfSxnZXRQYXRobmFtZT1mdW5jdGlvbigpe3ZhciBlPWdldEludGVybmFsVVJMU3RhdGUodGhpcykscj1lLnBhdGg7cmV0dXJuIGUuY2Fubm90QmVBQmFzZVVSTD9yWzBdOnIubGVuZ3RoP1wiL1wiK3Iuam9pbihcIi9cIik6XCJcIn0sZ2V0U2VhcmNoPWZ1bmN0aW9uKCl7dmFyIGU9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5xdWVyeTtyZXR1cm4gZT9cIj9cIitlOlwiXCJ9LGdldFNlYXJjaFBhcmFtcz1mdW5jdGlvbigpe3JldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlYXJjaFBhcmFtc30sZ2V0SGFzaD1mdW5jdGlvbigpe3ZhciBlPWdldEludGVybmFsVVJMU3RhdGUodGhpcykuZnJhZ21lbnQ7cmV0dXJuIGU/XCIjXCIrZTpcIlwifSxhY2Nlc3NvckRlc2NyaXB0b3I9ZnVuY3Rpb24oZSxyKXtyZXR1cm57Z2V0OmUsc2V0OnIsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fTtpZihkZXNjcmlwdG9ycyYmb2JqZWN0RGVmaW5lUHJvcGVydGllcyhVUkxQcm90b3R5cGUse2hyZWY6YWNjZXNzb3JEZXNjcmlwdG9yKHNlcmlhbGl6ZVVSTCwoZnVuY3Rpb24oZSl7dmFyIHI9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKSx0PXRvU3RyaW5nKGUpLGE9cGFyc2VVUkwocix0KTtpZihhKXRocm93IFR5cGVFcnJvcihhKTtnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlKHIuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoci5xdWVyeSl9KSksb3JpZ2luOmFjY2Vzc29yRGVzY3JpcHRvcihnZXRPcmlnaW4pLHByb3RvY29sOmFjY2Vzc29yRGVzY3JpcHRvcihnZXRQcm90b2NvbCwoZnVuY3Rpb24oZSl7dmFyIHI9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtwYXJzZVVSTChyLHRvU3RyaW5nKGUpK1wiOlwiLFNDSEVNRV9TVEFSVCl9KSksdXNlcm5hbWU6YWNjZXNzb3JEZXNjcmlwdG9yKGdldFVzZXJuYW1lLChmdW5jdGlvbihlKXt2YXIgcj1nZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLHQ9YXJyYXlGcm9tKHRvU3RyaW5nKGUpKTtpZighY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KHIpKXtyLnVzZXJuYW1lPVwiXCI7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspci51c2VybmFtZSs9cGVyY2VudEVuY29kZSh0W2FdLHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCl9fSkpLHBhc3N3b3JkOmFjY2Vzc29yRGVzY3JpcHRvcihnZXRQYXNzd29yZCwoZnVuY3Rpb24oZSl7dmFyIHI9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKSx0PWFycmF5RnJvbSh0b1N0cmluZyhlKSk7aWYoIWNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydChyKSl7ci5wYXNzd29yZD1cIlwiO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXIucGFzc3dvcmQrPXBlcmNlbnRFbmNvZGUodFthXSx1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpfX0pKSxob3N0OmFjY2Vzc29yRGVzY3JpcHRvcihnZXRIb3N0LChmdW5jdGlvbihlKXt2YXIgcj1nZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO3IuY2Fubm90QmVBQmFzZVVSTHx8cGFyc2VVUkwocix0b1N0cmluZyhlKSxIT1NUKX0pKSxob3N0bmFtZTphY2Nlc3NvckRlc2NyaXB0b3IoZ2V0SG9zdG5hbWUsKGZ1bmN0aW9uKGUpe3ZhciByPWdldEludGVybmFsVVJMU3RhdGUodGhpcyk7ci5jYW5ub3RCZUFCYXNlVVJMfHxwYXJzZVVSTChyLHRvU3RyaW5nKGUpLEhPU1ROQU1FKX0pKSxwb3J0OmFjY2Vzc29yRGVzY3JpcHRvcihnZXRQb3J0LChmdW5jdGlvbihlKXt2YXIgcj1nZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO2Nhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydChyKXx8KFwiXCI9PShlPXRvU3RyaW5nKGUpKT9yLnBvcnQ9bnVsbDpwYXJzZVVSTChyLGUsUE9SVCkpfSkpLHBhdGhuYW1lOmFjY2Vzc29yRGVzY3JpcHRvcihnZXRQYXRobmFtZSwoZnVuY3Rpb24oZSl7dmFyIHI9Z2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtyLmNhbm5vdEJlQUJhc2VVUkx8fChyLnBhdGg9W10scGFyc2VVUkwocix0b1N0cmluZyhlKSxQQVRIX1NUQVJUKSl9KSksc2VhcmNoOmFjY2Vzc29yRGVzY3JpcHRvcihnZXRTZWFyY2gsKGZ1bmN0aW9uKGUpe3ZhciByPWdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XCJcIj09KGU9dG9TdHJpbmcoZSkpP3IucXVlcnk9bnVsbDooXCI/XCI9PWUuY2hhckF0KDApJiYoZT1lLnNsaWNlKDEpKSxyLnF1ZXJ5PVwiXCIscGFyc2VVUkwocixlLFFVRVJZKSksZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZShyLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKHIucXVlcnkpfSkpLHNlYXJjaFBhcmFtczphY2Nlc3NvckRlc2NyaXB0b3IoZ2V0U2VhcmNoUGFyYW1zKSxoYXNoOmFjY2Vzc29yRGVzY3JpcHRvcihnZXRIYXNoLChmdW5jdGlvbihlKXt2YXIgcj1nZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1wiXCIhPShlPXRvU3RyaW5nKGUpKT8oXCIjXCI9PWUuY2hhckF0KDApJiYoZT1lLnNsaWNlKDEpKSxyLmZyYWdtZW50PVwiXCIscGFyc2VVUkwocixlLEZSQUdNRU5UKSk6ci5mcmFnbWVudD1udWxsfSkpfSkscmVkZWZpbmUoVVJMUHJvdG90eXBlLFwidG9KU09OXCIsKGZ1bmN0aW9uIHRvSlNPTigpe3JldHVybiBzZXJpYWxpemVVUkwuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSkscmVkZWZpbmUoVVJMUHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24gdG9TdHJpbmcoKXtyZXR1cm4gc2VyaWFsaXplVVJMLmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLE5hdGl2ZVVSTCl7dmFyIG5hdGl2ZUNyZWF0ZU9iamVjdFVSTD1OYXRpdmVVUkwuY3JlYXRlT2JqZWN0VVJMLG5hdGl2ZVJldm9rZU9iamVjdFVSTD1OYXRpdmVVUkwucmV2b2tlT2JqZWN0VVJMO25hdGl2ZUNyZWF0ZU9iamVjdFVSTCYmcmVkZWZpbmUoVVJMQ29uc3RydWN0b3IsXCJjcmVhdGVPYmplY3RVUkxcIiwoZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGUpe3JldHVybiBuYXRpdmVDcmVhdGVPYmplY3RVUkwuYXBwbHkoTmF0aXZlVVJMLGFyZ3VtZW50cyl9KSksbmF0aXZlUmV2b2tlT2JqZWN0VVJMJiZyZWRlZmluZShVUkxDb25zdHJ1Y3RvcixcInJldm9rZU9iamVjdFVSTFwiLChmdW5jdGlvbiByZXZva2VPYmplY3RVUkwoZSl7cmV0dXJuIG5hdGl2ZVJldm9rZU9iamVjdFVSTC5hcHBseShOYXRpdmVVUkwsYXJndW1lbnRzKX0pKX1zZXRUb1N0cmluZ1RhZyhVUkxDb25zdHJ1Y3RvcixcIlVSTFwiKSxfZXhwb3J0KHtnbG9iYWw6ITAsZm9yY2VkOiFuYXRpdmVVcmwsc2hhbTohZGVzY3JpcHRvcnN9LHtVUkw6VVJMQ29uc3RydWN0b3J9KTt2YXIgJGZvckVhY2g9YXJyYXlJdGVyYXRpb24uZm9yRWFjaCxTVFJJQ1RfTUVUSE9EPWFycmF5TWV0aG9kSXNTdHJpY3QoXCJmb3JFYWNoXCIpLGFycmF5Rm9yRWFjaD1TVFJJQ1RfTUVUSE9EP1tdLmZvckVhY2g6ZnVuY3Rpb24gZm9yRWFjaChlKXtyZXR1cm4gJGZvckVhY2godGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0saGFuZGxlUHJvdG90eXBlPWZ1bmN0aW9uKGUpe2lmKGUmJmUuZm9yRWFjaCE9PWFycmF5Rm9yRWFjaCl0cnl7Y3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGUsXCJmb3JFYWNoXCIsYXJyYXlGb3JFYWNoKX1jYXRjaChyKXtlLmZvckVhY2g9YXJyYXlGb3JFYWNofX07Zm9yKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gZG9tSXRlcmFibGVzKWhhbmRsZVByb3RvdHlwZShnbG9iYWwkMVtDT0xMRUNUSU9OX05BTUVdJiZnbG9iYWwkMVtDT0xMRUNUSU9OX05BTUVdLnByb3RvdHlwZSk7aGFuZGxlUHJvdG90eXBlKGRvbVRva2VuTGlzdFByb3RvdHlwZSk7dmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlPW9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlLmYsY3JlYXRlTWV0aG9kPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIHQsYT10b0luZGV4ZWRPYmplY3QociksaT1vYmplY3RLZXlzKGEpLHM9aS5sZW5ndGgsYz0wLGw9W107cz5jOyl0PWlbYysrXSxkZXNjcmlwdG9ycyYmIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYSx0KXx8bC5wdXNoKGU/W3QsYVt0XV06YVt0XSk7cmV0dXJuIGx9fSxvYmplY3RUb0FycmF5PXtlbnRyaWVzOmNyZWF0ZU1ldGhvZCghMCksdmFsdWVzOmNyZWF0ZU1ldGhvZCghMSl9LCRlbnRyaWVzPW9iamVjdFRvQXJyYXkuZW50cmllcztfZXhwb3J0KHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwfSx7ZW50cmllczpmdW5jdGlvbiBlbnRyaWVzKGUpe3JldHVybiAkZW50cmllcyhlKX19KTt2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPW9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvci5mLCRzdGFydHNXaXRoPVwiXCIuc3RhcnRzV2l0aCxtaW4kMT1NYXRoLm1pbixDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQz1jb3JyZWN0SXNSZWdleHBMb2dpYyhcInN0YXJ0c1dpdGhcIiksTUROX1BPTFlGSUxMX0JVRz0hKENPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDfHwoZGVzY3JpcHRvcj1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU3RyaW5nLnByb3RvdHlwZSxcInN0YXJ0c1dpdGhcIiksIWRlc2NyaXB0b3J8fGRlc2NyaXB0b3Iud3JpdGFibGUpKSxkZXNjcmlwdG9yO19leHBvcnQoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDohTUROX1BPTFlGSUxMX0JVRyYmIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDfSx7c3RhcnRzV2l0aDpmdW5jdGlvbiBzdGFydHNXaXRoKGUpe3ZhciByPXRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO25vdEFSZWdleHAoZSk7dmFyIHQ9dG9MZW5ndGgobWluJDEoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsci5sZW5ndGgpKSxhPXRvU3RyaW5nKGUpO3JldHVybiAkc3RhcnRzV2l0aD8kc3RhcnRzV2l0aC5jYWxsKHIsYSx0KTpyLnNsaWNlKHQsdCthLmxlbmd0aCk9PT1hfX0pO3ZhciBmbG9vcj1NYXRoLmZsb29yLHJlcGxhY2U9XCJcIi5yZXBsYWNlLFNVQlNUSVRVVElPTl9TWU1CT0xTPS9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2csU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ9L1xcJChbJCYnYF18XFxkezEsMn0pL2csZ2V0U3Vic3RpdHV0aW9uPWZ1bmN0aW9uKGUscix0LGEsaSxzKXt2YXIgYz10K2UubGVuZ3RoLGw9YS5sZW5ndGgsdT1TVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtyZXR1cm4gdm9pZCAwIT09aSYmKGk9dG9PYmplY3QoaSksdT1TVUJTVElUVVRJT05fU1lNQk9MUykscmVwbGFjZS5jYWxsKHMsdSwoZnVuY3Rpb24ocyx1KXt2YXIgcDtzd2l0Y2godS5jaGFyQXQoMCkpe2Nhc2VcIiRcIjpyZXR1cm5cIiRcIjtjYXNlXCImXCI6cmV0dXJuIGU7Y2FzZVwiYFwiOnJldHVybiByLnNsaWNlKDAsdCk7Y2FzZVwiJ1wiOnJldHVybiByLnNsaWNlKGMpO2Nhc2VcIjxcIjpwPWlbdS5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgZD0rdTtpZigwPT09ZClyZXR1cm4gcztpZihkPmwpe3ZhciBoPWZsb29yKGQvMTApO3JldHVybiAwPT09aD9zOmg8PWw/dm9pZCAwPT09YVtoLTFdP3UuY2hhckF0KDEpOmFbaC0xXSt1LmNoYXJBdCgxKTpzfXA9YVtkLTFdfXJldHVybiB2b2lkIDA9PT1wP1wiXCI6cH0pKX0sUkVQTEFDRT13ZWxsS25vd25TeW1ib2woXCJyZXBsYWNlXCIpLG1heD1NYXRoLm1heCxtaW49TWF0aC5taW4sbWF5YmVUb1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9lOlN0cmluZyhlKX0sUkVQTEFDRV9LRUVQU18kMD1cIiQwXCI9PT1cImFcIi5yZXBsYWNlKC8uLyxcIiQwXCIpLFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFPSEhLy4vW1JFUExBQ0VdJiZcIlwiPT09Ly4vW1JFUExBQ0VdKFwiYVwiLFwiJDBcIiksUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFM9IWZhaWxzKChmdW5jdGlvbigpe3ZhciBlPS8uLztyZXR1cm4gZS5leGVjPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGUuZ3JvdXBzPXthOlwiN1wifSxlfSxcIjdcIiE9PVwiXCIucmVwbGFjZShlLFwiJDxhPlwiKX0pKTtmaXhSZWdleHBXZWxsS25vd25TeW1ib2xMb2dpYyhcInJlcGxhY2VcIiwoZnVuY3Rpb24oZSxyLHQpe3ZhciBhPVJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFP1wiJFwiOlwiJDBcIjtyZXR1cm5bZnVuY3Rpb24gcmVwbGFjZShlLHQpe3ZhciBhPXJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyksaT1udWxsPT1lP3ZvaWQgMDpnZXRNZXRob2QoZSxSRVBMQUNFKTtyZXR1cm4gaT9pLmNhbGwoZSxhLHQpOnIuY2FsbCh0b1N0cmluZyhhKSxlLHQpfSxmdW5jdGlvbihlLGkpe3ZhciBzPWFuT2JqZWN0KHRoaXMpLGM9dG9TdHJpbmcoZSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJi0xPT09aS5pbmRleE9mKGEpJiYtMT09PWkuaW5kZXhPZihcIiQ8XCIpKXt2YXIgbD10KHIscyxjLGkpO2lmKGwuZG9uZSlyZXR1cm4gbC52YWx1ZX12YXIgdT1pc0NhbGxhYmxlKGkpO3V8fChpPXRvU3RyaW5nKGkpKTt2YXIgcD1zLmdsb2JhbDtpZihwKXt2YXIgZD1zLnVuaWNvZGU7cy5sYXN0SW5kZXg9MH1mb3IodmFyIGg9W107Oyl7dmFyIHk9cmVnZXhwRXhlY0Fic3RyYWN0KHMsYyk7aWYobnVsbD09PXkpYnJlYWs7aWYoaC5wdXNoKHkpLCFwKWJyZWFrO1wiXCI9PT10b1N0cmluZyh5WzBdKSYmKHMubGFzdEluZGV4PWFkdmFuY2VTdHJpbmdJbmRleChjLHRvTGVuZ3RoKHMubGFzdEluZGV4KSxkKSl9Zm9yKHZhciBBPVwiXCIsZz0wLHY9MDt2PGgubGVuZ3RoO3YrKyl7eT1oW3ZdO2Zvcih2YXIgRT10b1N0cmluZyh5WzBdKSxtPW1heChtaW4odG9JbnRlZ2VyKHkuaW5kZXgpLGMubGVuZ3RoKSwwKSxJPVtdLFA9MTtQPHkubGVuZ3RoO1ArKylJLnB1c2gobWF5YmVUb1N0cmluZyh5W1BdKSk7dmFyIGI9eS5ncm91cHM7aWYodSl7dmFyIFQ9W0VdLmNvbmNhdChJLG0sYyk7dm9pZCAwIT09YiYmVC5wdXNoKGIpO3ZhciBTPXRvU3RyaW5nKGkuYXBwbHkodm9pZCAwLFQpKX1lbHNlIFM9Z2V0U3Vic3RpdHV0aW9uKEUsYyxtLEksYixpKTttPj1nJiYoQSs9Yy5zbGljZShnLG0pK1MsZz1tK0UubGVuZ3RoKX1yZXR1cm4gQStjLnNsaWNlKGcpfV19KSwhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFN8fCFSRVBMQUNFX0tFRVBTXyQwfHxSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7dmFyIElTX0NPTkNBVF9TUFJFQURBQkxFPXdlbGxLbm93blN5bWJvbChcImlzQ29uY2F0U3ByZWFkYWJsZVwiKSxNQVhfU0FGRV9JTlRFR0VSPTkwMDcxOTkyNTQ3NDA5OTEsTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEPVwiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkXCIsSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVD1lbmdpbmVWOFZlcnNpb24+PTUxfHwhZmFpbHMoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGVbSVNfQ09OQ0FUX1NQUkVBREFCTEVdPSExLGUuY29uY2F0KClbMF0hPT1lfSkpLFNQRUNJRVNfU1VQUE9SVD1hcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KFwiY29uY2F0XCIpLGlzQ29uY2F0U3ByZWFkYWJsZT1mdW5jdGlvbihlKXtpZighaXNPYmplY3QoZSkpcmV0dXJuITE7dmFyIHI9ZVtJU19DT05DQVRfU1BSRUFEQUJMRV07cmV0dXJuIHZvaWQgMCE9PXI/ISFyOmlzQXJyYXkoZSl9LEZPUkNFRD0hSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVHx8IVNQRUNJRVNfU1VQUE9SVDtfZXhwb3J0KHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDpGT1JDRUR9LHtjb25jYXQ6ZnVuY3Rpb24gY29uY2F0KGUpe3ZhciByLHQsYSxpLHMsYz10b09iamVjdCh0aGlzKSxsPWFycmF5U3BlY2llc0NyZWF0ZShjLDApLHU9MDtmb3Iocj0tMSxhPWFyZ3VtZW50cy5sZW5ndGg7cjxhO3IrKylpZihpc0NvbmNhdFNwcmVhZGFibGUocz0tMT09PXI/Yzphcmd1bWVudHNbcl0pKXtpZih1KyhpPXRvTGVuZ3RoKHMubGVuZ3RoKSk+TUFYX1NBRkVfSU5URUdFUil0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtmb3IodD0wO3Q8aTt0KyssdSsrKXQgaW4gcyYmY3JlYXRlUHJvcGVydHkobCx1LHNbdF0pfWVsc2V7aWYodT49TUFYX1NBRkVfSU5URUdFUil0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtjcmVhdGVQcm9wZXJ0eShsLHUrKyxzKX1yZXR1cm4gbC5sZW5ndGg9dSxsfX0pO3ZhciBjbnQ9MCxpbWFnZUNvbXByZXNzaW9uTGliVXJsLHdvcmtlcjtmdW5jdGlvbiBjcmVhdGVXb3JrZXIoZSl7dmFyIHI9W107cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9yLnB1c2goXCIoXCIuY29uY2F0KGUsXCIpKClcIikpOnIucHVzaChlKSxuZXcgV29ya2VyKFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IocikpKX1mdW5jdGlvbiBjcmVhdGVTb3VyY2VPYmplY3QoZSl7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2VdLHt0eXBlOlwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwifSkpfWZ1bmN0aW9uIHN0cmluZ2lmeShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSwoZnVuY3Rpb24oZSxyKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiByP1wiQklDX0ZOOjo6KGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiLmNvbmNhdChyLnRvU3RyaW5nKCksXCIgfSkoKVwiKTpyfSkpfWZ1bmN0aW9uIHBhcnNlKG8pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBvKXJldHVybiBvO3ZhciByZXN1bHQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKG8pLmZvckVhY2goKGZ1bmN0aW9uKF9yZWYpe3ZhciBfcmVmMj1fc2xpY2VkVG9BcnJheShfcmVmLDIpLGtleT1fcmVmMlswXSx2YWx1ZT1fcmVmMlsxXTtpZihcInN0cmluZ1wiPT10eXBlb2YgdmFsdWUmJnZhbHVlLnN0YXJ0c1dpdGgoXCJCSUNfRk46OjpcIikpdHJ5e3Jlc3VsdFtrZXldPWV2YWwodmFsdWUucmVwbGFjZSgvXkJJQ19GTjo6Oi8sXCJcIikpfWNhdGNoKGUpe3Rocm93IGV9ZWxzZSByZXN1bHRba2V5XT1wYXJzZSh2YWx1ZSl9KSkscmVzdWx0fWZ1bmN0aW9uIGdlbmVyYXRlTGliKCl7cmV0dXJuIGNyZWF0ZVNvdXJjZU9iamVjdChcIlxcbiAgICAvLyByZWNvbnN0cnVjdCBsaWJyYXJ5XFxuICAgIGZ1bmN0aW9uIGltYWdlQ29tcHJlc3Npb24gKCl7cmV0dXJuIChcIi5jb25jYXQoaW1hZ2VDb21wcmVzc2lvbixcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKX1cXG5cXG4gICAgaW1hZ2VDb21wcmVzc2lvbi5nZXREYXRhVXJsRnJvbUZpbGUgPSBcIikuY29uY2F0KGltYWdlQ29tcHJlc3Npb24uZ2V0RGF0YVVybEZyb21GaWxlLFwiXFxuICAgIGltYWdlQ29tcHJlc3Npb24uZ2V0RmlsZWZyb21EYXRhVXJsID0gXCIpLmNvbmNhdChpbWFnZUNvbXByZXNzaW9uLmdldEZpbGVmcm9tRGF0YVVybCxcIlxcbiAgICBpbWFnZUNvbXByZXNzaW9uLmxvYWRJbWFnZSA9IFwiKS5jb25jYXQoaW1hZ2VDb21wcmVzc2lvbi5sb2FkSW1hZ2UsXCJcXG4gICAgaW1hZ2VDb21wcmVzc2lvbi5kcmF3SW1hZ2VJbkNhbnZhcyA9IFwiKS5jb25jYXQoaW1hZ2VDb21wcmVzc2lvbi5kcmF3SW1hZ2VJbkNhbnZhcyxcIlxcbiAgICBpbWFnZUNvbXByZXNzaW9uLmRyYXdGaWxlSW5DYW52YXMgPSBcIikuY29uY2F0KGltYWdlQ29tcHJlc3Npb24uZHJhd0ZpbGVJbkNhbnZhcyxcIlxcbiAgICBpbWFnZUNvbXByZXNzaW9uLmNhbnZhc1RvRmlsZSA9IFwiKS5jb25jYXQoaW1hZ2VDb21wcmVzc2lvbi5jYW52YXNUb0ZpbGUsXCJcXG4gICAgaW1hZ2VDb21wcmVzc2lvbi5nZXRFeGlmT3JpZW50YXRpb24gPSBcIikuY29uY2F0KGltYWdlQ29tcHJlc3Npb24uZ2V0RXhpZk9yaWVudGF0aW9uLFwiXFxuICAgIGltYWdlQ29tcHJlc3Npb24uaGFuZGxlTWF4V2lkdGhPckhlaWdodCA9IFwiKS5jb25jYXQoaW1hZ2VDb21wcmVzc2lvbi5oYW5kbGVNYXhXaWR0aE9ySGVpZ2h0LFwiXFxuICAgIGltYWdlQ29tcHJlc3Npb24uZm9sbG93RXhpZk9yaWVudGF0aW9uID0gXCIpLmNvbmNhdChpbWFnZUNvbXByZXNzaW9uLmZvbGxvd0V4aWZPcmllbnRhdGlvbixcIlxcbiAgICBpbWFnZUNvbXByZXNzaW9uLmNsZWFudXBDYW52YXNNZW1vcnkgPSBcIikuY29uY2F0KGltYWdlQ29tcHJlc3Npb24uY2xlYW51cENhbnZhc01lbW9yeSxcIlxcbiAgICBpbWFnZUNvbXByZXNzaW9uLmlzQXV0b09yaWVudGF0aW9uSW5Ccm93c2VyID0gXCIpLmNvbmNhdChpbWFnZUNvbXByZXNzaW9uLmlzQXV0b09yaWVudGF0aW9uSW5Ccm93c2VyLFwiXFxuICAgIGltYWdlQ29tcHJlc3Npb24uYXBwcm94aW1hdGVCZWxvd01heGltdW1DYW52YXNTaXplT2ZCcm93c2VyID0gXCIpLmNvbmNhdChpbWFnZUNvbXByZXNzaW9uLmFwcHJveGltYXRlQmVsb3dNYXhpbXVtQ2FudmFzU2l6ZU9mQnJvd3NlcixcIlxcbiAgICBpbWFnZUNvbXByZXNzaW9uLmdldEJyb3dzZXJOYW1lID0gXCIpLmNvbmNhdChpbWFnZUNvbXByZXNzaW9uLmdldEJyb3dzZXJOYW1lLFwiXFxuXFxuICAgIC8vIGZ1bmN0aW9ucyAvIG9iamVjdHNcXG4gICAgZ2V0RGF0YVVybEZyb21GaWxlID0gaW1hZ2VDb21wcmVzc2lvbi5nZXREYXRhVXJsRnJvbUZpbGVcXG4gICAgZ2V0RmlsZWZyb21EYXRhVXJsID0gaW1hZ2VDb21wcmVzc2lvbi5nZXRGaWxlZnJvbURhdGFVcmxcXG4gICAgbG9hZEltYWdlID0gaW1hZ2VDb21wcmVzc2lvbi5sb2FkSW1hZ2VcXG4gICAgZHJhd0ltYWdlSW5DYW52YXMgPSBpbWFnZUNvbXByZXNzaW9uLmRyYXdJbWFnZUluQ2FudmFzXFxuICAgIGRyYXdGaWxlSW5DYW52YXMgPSBpbWFnZUNvbXByZXNzaW9uLmRyYXdGaWxlSW5DYW52YXNcXG4gICAgY2FudmFzVG9GaWxlID0gaW1hZ2VDb21wcmVzc2lvbi5jYW52YXNUb0ZpbGVcXG4gICAgZ2V0RXhpZk9yaWVudGF0aW9uID0gaW1hZ2VDb21wcmVzc2lvbi5nZXRFeGlmT3JpZW50YXRpb25cXG4gICAgaGFuZGxlTWF4V2lkdGhPckhlaWdodCA9IGltYWdlQ29tcHJlc3Npb24uaGFuZGxlTWF4V2lkdGhPckhlaWdodFxcbiAgICBmb2xsb3dFeGlmT3JpZW50YXRpb24gPSBpbWFnZUNvbXByZXNzaW9uLmZvbGxvd0V4aWZPcmllbnRhdGlvblxcbiAgICBjbGVhbnVwQ2FudmFzTWVtb3J5ID0gaW1hZ2VDb21wcmVzc2lvbi5jbGVhbnVwQ2FudmFzTWVtb3J5XFxuICAgIGlzQXV0b09yaWVudGF0aW9uSW5Ccm93c2VyID0gaW1hZ2VDb21wcmVzc2lvbi5pc0F1dG9PcmllbnRhdGlvbkluQnJvd3NlclxcbiAgICBhcHByb3hpbWF0ZUJlbG93TWF4aW11bUNhbnZhc1NpemVPZkJyb3dzZXIgPSBpbWFnZUNvbXByZXNzaW9uLmFwcHJveGltYXRlQmVsb3dNYXhpbXVtQ2FudmFzU2l6ZU9mQnJvd3NlclxcbiAgICBnZXRCcm93c2VyTmFtZSA9IGltYWdlQ29tcHJlc3Npb24uZ2V0QnJvd3Nlck5hbWVcXG4gICAgaXNJT1MgPSBcIikuY29uY2F0KGlzSU9TLFwiXFxuICAgIFxcbiAgICBnZXROZXdDYW52YXNBbmRDdHggPSBcIikuY29uY2F0KGdldE5ld0NhbnZhc0FuZEN0eCxcIlxcbiAgICBDdXN0b21GaWxlUmVhZGVyID0gRmlsZVJlYWRlclxcbiAgICBDdXN0b21GaWxlID0gRmlsZVxcbiAgICBNYXhDYW52YXNTaXplID0gXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShNYXhDYW52YXNTaXplKSxcIlxcbiAgICBmdW5jdGlvbiBjb21wcmVzcyAoKXtyZXR1cm4gKFwiKS5jb25jYXQoY29tcHJlc3MsXCIpLmFwcGx5KG51bGwsIGFyZ3VtZW50cyl9XFxuXFxuICAgIC8vIGNvcmUtanNcXG4gICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBuKSB7IHJldHVybiBhcnIgfVxcbiAgICBmdW5jdGlvbiBfdHlwZW9mKGEpIHsgcmV0dXJuIHR5cGVvZiBhIH1cXG4gICAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xcbiAgXFxuICAgICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxcbiAgICAgIH1cXG4gIFxcbiAgICAgIHJldHVybiB0YXJnZXQ7XFxuICAgIH1cXG5cXG4gICAgLy8gTGlicmFyaWVzXFxuICAgIGNvbnN0IHBhcnNlID0gXCIpLmNvbmNhdChwYXJzZSxcIlxcbiAgICBjb25zdCBVUE5HID0ge31cXG4gICAgVVBORy50b1JHQkE4ID0gXCIpLmNvbmNhdChVUE5HLnRvUkdCQTgsXCJcXG4gICAgVVBORy50b1JHQkE4LmRlY29kZUltYWdlID0gXCIpLmNvbmNhdChVUE5HLnRvUkdCQTguZGVjb2RlSW1hZ2UsXCJcXG4gICAgVVBORy5kZWNvZGUgPSBcIikuY29uY2F0KFVQTkcuZGVjb2RlLFwiXFxuICAgIFVQTkcuZGVjb2RlLl9kZWNvbXByZXNzID0gXCIpLmNvbmNhdChVUE5HLmRlY29kZS5fZGVjb21wcmVzcyxcIlxcbiAgICBVUE5HLmRlY29kZS5faW5mbGF0ZSA9IFwiKS5jb25jYXQoVVBORy5kZWNvZGUuX2luZmxhdGUsXCJcXG4gICAgVVBORy5kZWNvZGUuX3JlYWRJbnRlcmxhY2UgPSBcIikuY29uY2F0KFVQTkcuZGVjb2RlLl9yZWFkSW50ZXJsYWNlLFwiXFxuICAgIFVQTkcuZGVjb2RlLl9nZXRCUFAgPSBcIikuY29uY2F0KFVQTkcuZGVjb2RlLl9nZXRCUFAsXCIgXFxuICAgIFVQTkcuZGVjb2RlLl9maWx0ZXJaZXJvID0gXCIpLmNvbmNhdChVUE5HLmRlY29kZS5fZmlsdGVyWmVybyxcIlxcbiAgICBVUE5HLmRlY29kZS5fcGFldGggPSBcIikuY29uY2F0KFVQTkcuZGVjb2RlLl9wYWV0aCxcIlxcbiAgICBVUE5HLmRlY29kZS5fSUhEUiA9IFwiKS5jb25jYXQoVVBORy5kZWNvZGUuX0lIRFIsXCJcXG4gICAgVVBORy5fYmluID0gcGFyc2UoXCIpLmNvbmNhdChzdHJpbmdpZnkoVVBORy5fYmluKSxcIilcXG4gICAgVVBORy5fY29weVRpbGUgPSBcIikuY29uY2F0KFVQTkcuX2NvcHlUaWxlLFwiXFxuICAgIFVQTkcuZW5jb2RlID0gXCIpLmNvbmNhdChVUE5HLmVuY29kZSxcIlxcbiAgICBVUE5HLmVuY29kZUxMID0gXCIpLmNvbmNhdChVUE5HLmVuY29kZUxMLFwiIFxcbiAgICBVUE5HLmVuY29kZS5fbWFpbiA9IFwiKS5jb25jYXQoVVBORy5lbmNvZGUuX21haW4sXCJcXG4gICAgVVBORy5lbmNvZGUuY29tcHJlc3NQTkcgPSBcIikuY29uY2F0KFVQTkcuZW5jb2RlLmNvbXByZXNzUE5HLFwiIFxcbiAgICBVUE5HLmVuY29kZS5jb21wcmVzcyA9IFwiKS5jb25jYXQoVVBORy5lbmNvZGUuY29tcHJlc3MsXCJcXG4gICAgVVBORy5lbmNvZGUuZnJhbWl6ZSA9IFwiKS5jb25jYXQoVVBORy5lbmNvZGUuZnJhbWl6ZSxcIiBcXG4gICAgVVBORy5lbmNvZGUuX3VwZGF0ZUZyYW1lID0gXCIpLmNvbmNhdChVUE5HLmVuY29kZS5fdXBkYXRlRnJhbWUsXCIgXFxuICAgIFVQTkcuZW5jb2RlLl9wcmVwYXJlRGlmZiA9IFwiKS5jb25jYXQoVVBORy5lbmNvZGUuX3ByZXBhcmVEaWZmLFwiIFxcbiAgICBVUE5HLmVuY29kZS5fZmlsdGVyWmVybyA9IFwiKS5jb25jYXQoVVBORy5lbmNvZGUuX2ZpbHRlclplcm8sXCIgXFxuICAgIFVQTkcuZW5jb2RlLl9maWx0ZXJMaW5lID0gXCIpLmNvbmNhdChVUE5HLmVuY29kZS5fZmlsdGVyTGluZSxcIlxcbiAgICBVUE5HLmVuY29kZS5jb25jYXRSR0JBID0gXCIpLmNvbmNhdChVUE5HLmVuY29kZS5jb25jYXRSR0JBLFwiXFxuICAgIFVQTkcuY3JjID0gcGFyc2UoXCIpLmNvbmNhdChzdHJpbmdpZnkoVVBORy5jcmMpLFwiKVxcbiAgICBVUE5HLmNyYy50YWJsZSA9ICggZnVuY3Rpb24oKSB7XFxuICAgIHZhciB0YWIgPSBuZXcgVWludDMyQXJyYXkoMjU2KTtcXG4gICAgZm9yICh2YXIgbj0wOyBuPDI1NjsgbisrKSB7XFxuICAgICAgdmFyIGMgPSBuO1xcbiAgICAgIGZvciAodmFyIGs9MDsgazw4OyBrKyspIHtcXG4gICAgICAgIGlmIChjICYgMSkgIGMgPSAweGVkYjg4MzIwIF4gKGMgPj4+IDEpO1xcbiAgICAgICAgZWxzZSAgICAgICAgYyA9IGMgPj4+IDE7XFxuICAgICAgfVxcbiAgICAgIHRhYltuXSA9IGM7ICB9XFxuICAgIHJldHVybiB0YWI7ICB9KSgpXFxuICAgIFVQTkcucXVhbnRpemUgPSBcIikuY29uY2F0KFVQTkcucXVhbnRpemUsXCIgXFxuICAgIFVQTkcucXVhbnRpemUuZ2V0S0R0cmVlID0gXCIpLmNvbmNhdChVUE5HLnF1YW50aXplLmdldEtEdHJlZSxcIiBcXG4gICAgVVBORy5xdWFudGl6ZS5nZXROZWFyZXN0ID0gXCIpLmNvbmNhdChVUE5HLnF1YW50aXplLmdldE5lYXJlc3QsXCIgXFxuICAgIFVQTkcucXVhbnRpemUucGxhbmVEc3QgPSBcIikuY29uY2F0KFVQTkcucXVhbnRpemUucGxhbmVEc3QsXCIgXFxuICAgIFVQTkcucXVhbnRpemUuZGlzdCA9IFwiKS5jb25jYXQoVVBORy5xdWFudGl6ZS5kaXN0LFwiICAgICBcXG4gICAgVVBORy5xdWFudGl6ZS5zcGxpdFBpeGVscyA9IFwiKS5jb25jYXQoVVBORy5xdWFudGl6ZS5zcGxpdFBpeGVscyxcIiBcXG4gICAgVVBORy5xdWFudGl6ZS52ZWNEb3QgPSBcIikuY29uY2F0KFVQTkcucXVhbnRpemUudmVjRG90LFwiIFxcbiAgICBVUE5HLnF1YW50aXplLnN0YXRzID0gXCIpLmNvbmNhdChVUE5HLnF1YW50aXplLnN0YXRzLFwiIFxcbiAgICBVUE5HLnF1YW50aXplLmVzdGF0cyA9IFwiKS5jb25jYXQoVVBORy5xdWFudGl6ZS5lc3RhdHMsXCJcXG4gICAgVVBORy5NNCA9IHBhcnNlKFwiKS5jb25jYXQoc3RyaW5naWZ5KFVQTkcuTTQpLFwiKVxcbiAgICBVUE5HLmVuY29kZS5jb25jYXRSR0JBID0gXCIpLmNvbmNhdChVUE5HLmVuY29kZS5jb25jYXRSR0JBLCdcXG4gICAgVVBORy5pbmZsYXRlUmF3PWZ1bmN0aW9uKCl7XFxuICAgIHZhciBIPXt9O0guSD17fTtILkguTj1mdW5jdGlvbihOLFcpe3ZhciBSPVVpbnQ4QXJyYXksaT0wLG09MCxKPTAsaD0wLFE9MCxYPTAsdT0wLHc9MCxkPTAsdixDO1xcbiAgICAgIGlmKE5bMF09PTMmJk5bMV09PTApcmV0dXJuIFc/VzpuZXcgUigwKTt2YXIgVj1ILkgsbj1WLmIsQT1WLmUsbD1WLlIsTT1WLm4sST1WLkEsZT1WLlosYj1WLm0sWj1XPT1udWxsO1xcbiAgICAgIGlmKFopVz1uZXcgUihOLmxlbmd0aD4+PjI8PDUpO3doaWxlKGk9PTApe2k9bihOLGQsMSk7bT1uKE4sZCsxLDIpO2QrPTM7aWYobT09MCl7aWYoKGQmNykhPTApZCs9OC0oZCY3KTtcXG4gICAgICAgIHZhciBEPShkPj4+MykrNCxxPU5bRC00XXxOW0QtM108PDg7aWYoWilXPUguSC5XKFcsdytxKTtXLnNldChuZXcgUihOLmJ1ZmZlcixOLmJ5dGVPZmZzZXQrRCxxKSx3KTtkPUQrcTw8MztcXG4gICAgICAgIHcrPXE7Y29udGludWV9aWYoWilXPUguSC5XKFcsdysoMTw8MTcpKTtpZihtPT0xKXt2PWIuSjtDPWIuaDtYPSgxPDw5KS0xO3U9KDE8PDUpLTF9aWYobT09Mil7Sj1BKE4sZCw1KSsyNTc7XFxuICAgICAgICBoPUEoTixkKzUsNSkrMTtRPUEoTixkKzEwLDQpKzQ7ZCs9MTQ7dmFyIEU9ZCxqPTE7Zm9yKHZhciBjPTA7YzwzODtjKz0yKXtiLlFbY109MDtiLlFbYysxXT0wfWZvcih2YXIgYz0wO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzxRO2MrKyl7dmFyIEs9QShOLGQrYyozLDMpO2IuUVsoYi5YW2NdPDwxKSsxXT1LO2lmKEs+ailqPUt9ZCs9MypRO00oYi5RLGopO0koYi5RLGosYi51KTt2PWIudztDPWIuZDtcXG4gICAgICAgIGQ9bChiLnUsKDE8PGopLTEsSitoLE4sZCxiLnYpO3ZhciByPVYuVihiLnYsMCxKLGIuQyk7WD0oMTw8ciktMTt2YXIgUz1WLlYoYi52LEosaCxiLkQpO3U9KDE8PFMpLTE7TShiLkMscik7XFxuICAgICAgICBJKGIuQyxyLHYpO00oYi5ELFMpO0koYi5ELFMsQyl9d2hpbGUoITApe3ZhciBUPXZbZShOLGQpJlhdO2QrPVQmMTU7dmFyIHA9VD4+PjQ7aWYocD4+Pjg9PTApe1dbdysrXT1wfWVsc2UgaWYocD09MjU2KXticmVha31lbHNle3ZhciB6PXcrcC0yNTQ7XFxuICAgICAgICBpZihwPjI2NCl7dmFyIF89Yi5xW3AtMjU3XTt6PXcrKF8+Pj4zKStBKE4sZCxfJjcpO2QrPV8mN312YXIgJD1DW2UoTixkKSZ1XTtkKz0kJjE1O3ZhciBzPSQ+Pj40LFk9Yi5jW3NdLGE9KFk+Pj40KStuKE4sZCxZJjE1KTtcXG4gICAgICAgIGQrPVkmMTU7d2hpbGUodzx6KXtXW3ddPVdbdysrLWFdO1dbd109V1t3KystYV07V1t3XT1XW3crKy1hXTtXW3ddPVdbdysrLWFdfXc9en19fXJldHVybiBXLmxlbmd0aD09dz9XOlcuc2xpY2UoMCx3KX07XFxuICAgICAgSC5ILlc9ZnVuY3Rpb24oTixXKXt2YXIgUj1OLmxlbmd0aDtpZihXPD1SKXJldHVybiBOO3ZhciBWPW5ldyBVaW50OEFycmF5KFI8PDEpO1Yuc2V0KE4sMCk7cmV0dXJuIFZ9O1xcbiAgICAgIEguSC5SPWZ1bmN0aW9uKE4sVyxSLFYsbixBKXt2YXIgbD1ILkguZSxNPUguSC5aLEk9MDt3aGlsZShJPFIpe3ZhciBlPU5bTShWLG4pJlddO24rPWUmMTU7dmFyIGI9ZT4+PjQ7XFxuICAgICAgICBpZihiPD0xNSl7QVtJXT1iO0krK31lbHNle3ZhciBaPTAsbT0wO2lmKGI9PTE2KXttPTMrbChWLG4sMik7bis9MjtaPUFbSS0xXX1lbHNlIGlmKGI9PTE3KXttPTMrbChWLG4sMyk7XFxuICAgICAgICAgIG4rPTN9ZWxzZSBpZihiPT0xOCl7bT0xMStsKFYsbiw3KTtuKz03fXZhciBKPUkrbTt3aGlsZShJPEope0FbSV09WjtJKyt9fX1yZXR1cm4gbn07SC5ILlY9ZnVuY3Rpb24oTixXLFIsVil7dmFyIG49MCxBPTAsbD1WLmxlbmd0aD4+PjE7XFxuICAgICAgICB3aGlsZShBPFIpe3ZhciBNPU5bQStXXTtWW0E8PDFdPTA7VlsoQTw8MSkrMV09TTtpZihNPm4pbj1NO0ErK313aGlsZShBPGwpe1ZbQTw8MV09MDtWWyhBPDwxKSsxXT0wO0ErK31yZXR1cm4gbn07XFxuICAgICAgSC5ILm49ZnVuY3Rpb24oTixXKXt2YXIgUj1ILkgubSxWPU4ubGVuZ3RoLG4sQSxsLE0sSSxlPVIuajtmb3IodmFyIE09MDtNPD1XO00rKyllW01dPTA7Zm9yKE09MTtNPFY7TSs9MillW05bTV1dKys7XFxuICAgICAgICB2YXIgYj1SLks7bj0wO2VbMF09MDtmb3IoQT0xO0E8PVc7QSsrKXtuPW4rZVtBLTFdPDwxO2JbQV09bn1mb3IobD0wO2w8VjtsKz0yKXtJPU5bbCsxXTtpZihJIT0wKXtOW2xdPWJbSV07XFxuICAgICAgICAgIGJbSV0rK319fTtILkguQT1mdW5jdGlvbihOLFcsUil7dmFyIFY9Ti5sZW5ndGgsbj1ILkgubSxBPW4ucjtmb3IodmFyIGw9MDtsPFY7bCs9MilpZihOW2wrMV0hPTApe3ZhciBNPWw+PjEsST1OW2wrMV0sZT1NPDw0fEksYj1XLUksWj1OW2xdPDxiLG09WisoMTw8Yik7XFxuICAgICAgICB3aGlsZShaIT1tKXt2YXIgSj1BW1pdPj4+MTUtVztSW0pdPWU7WisrfX19O0guSC5sPWZ1bmN0aW9uKE4sVyl7dmFyIFI9SC5ILm0ucixWPTE1LVc7Zm9yKHZhciBuPTA7bjxOLmxlbmd0aDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbis9Mil7dmFyIEE9TltuXTw8Vy1OW24rMV07TltuXT1SW0FdPj4+Vn19O0guSC5NPWZ1bmN0aW9uKE4sVyxSKXtSPVI8PChXJjcpO3ZhciBWPVc+Pj4zO05bVl18PVI7TltWKzFdfD1SPj4+OH07XFxuICAgICAgSC5ILkk9ZnVuY3Rpb24oTixXLFIpe1I9Ujw8KFcmNyk7dmFyIFY9Vz4+PjM7TltWXXw9UjtOW1YrMV18PVI+Pj44O05bVisyXXw9Uj4+PjE2fTtILkguZT1mdW5jdGlvbihOLFcsUil7cmV0dXJuKE5bVz4+PjNdfE5bKFc+Pj4zKSsxXTw8OCk+Pj4oVyY3KSYoMTw8UiktMX07XFxuICAgICAgSC5ILmI9ZnVuY3Rpb24oTixXLFIpe3JldHVybihOW1c+Pj4zXXxOWyhXPj4+MykrMV08PDh8TlsoVz4+PjMpKzJdPDwxNik+Pj4oVyY3KSYoMTw8UiktMX07SC5ILlo9ZnVuY3Rpb24oTixXKXtyZXR1cm4oTltXPj4+M118TlsoVz4+PjMpKzFdPDw4fE5bKFc+Pj4zKSsyXTw8MTYpPj4+KFcmNyl9O1xcbiAgICAgIEguSC5pPWZ1bmN0aW9uKE4sVyl7cmV0dXJuKE5bVz4+PjNdfE5bKFc+Pj4zKSsxXTw8OHxOWyhXPj4+MykrMl08PDE2fE5bKFc+Pj4zKSszXTw8MjQpPj4+KFcmNyl9O0guSC5tPWZ1bmN0aW9uKCl7dmFyIE49VWludDE2QXJyYXksVz1VaW50MzJBcnJheTtcXG4gICAgICAgIHJldHVybntLOm5ldyBOKDE2KSxqOm5ldyBOKDE2KSxYOlsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxTOlszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDk5OSw5OTksOTk5XSxUOlswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDAsMCwwLDBdLHE6bmV3IE4oMzIpLHA6WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3Nyw2NTUzNSw2NTUzNV0sejpbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxMywwLDBdLGM6bmV3IFcoMzIpLEo6bmV3IE4oNTEyKSxfOltdLGg6bmV3IE4oMzIpLCQ6W10sdzpuZXcgTigzMjc2OCksQzpbXSx2OltdLGQ6bmV3IE4oMzI3NjgpLEQ6W10sdTpuZXcgTig1MTIpLFE6W10scjpuZXcgTigxPDwxNSksczpuZXcgVygyODYpLFk6bmV3IFcoMzApLGE6bmV3IFcoMTkpLHQ6bmV3IFcoMTVlMyksazpuZXcgTigxPDwxNiksZzpuZXcgTigxPDwxNSl9fSgpO1xcbiAgICAgIChmdW5jdGlvbigpe3ZhciBOPUguSC5tLFc9MTw8MTU7Zm9yKHZhciBSPTA7UjxXO1IrKyl7dmFyIFY9UjtWPShWJjI4NjMzMTE1MzApPj4+MXwoViYxNDMxNjU1NzY1KTw8MTtcXG4gICAgICAgIFY9KFYmMzQzNTk3MzgzNik+Pj4yfChWJjg1ODk5MzQ1OSk8PDI7Vj0oViY0MDQyMzIyMTYwKT4+PjR8KFYmMjUyNjQ1MTM1KTw8NDtWPShWJjQyNzgyNTUzNjApPj4+OHwoViYxNjcxMTkzNSk8PDg7XFxuICAgICAgICBOLnJbUl09KFY+Pj4xNnxWPDwxNik+Pj4xN31mdW5jdGlvbiBuKEEsbCxNKXt3aGlsZShsLS0hPTApQS5wdXNoKDAsTSl9Zm9yKHZhciBSPTA7UjwzMjtSKyspe04ucVtSXT1OLlNbUl08PDN8Ti5UW1JdO1xcbiAgICAgICAgTi5jW1JdPU4ucFtSXTw8NHxOLnpbUl19bihOLl8sMTQ0LDgpO24oTi5fLDI1NS0xNDMsOSk7bihOLl8sMjc5LTI1NSw3KTtuKE4uXywyODctMjc5LDgpO0guSC5uKE4uXyw5KTtcXG4gICAgICAgIEguSC5BKE4uXyw5LE4uSik7SC5ILmwoTi5fLDkpO24oTi4kLDMyLDUpO0guSC5uKE4uJCw1KTtILkguQShOLiQsNSxOLmgpO0guSC5sKE4uJCw1KTtuKE4uUSwxOSwwKTtuKE4uQywyODYsMCk7XFxuICAgICAgICBuKE4uRCwzMCwwKTtuKE4udiwzMjAsMCl9KCkpO3JldHVybiBILkguTn0oKVxcbiAgICBcXG4gICAgY29uc3QgVVpJUCA9IHt9XFxuICAgIFVaSVBbXCJwYXJzZVwiXSA9ICcpLmNvbmNhdChVWklQXzEucGFyc2UsXCJcXG4gICAgVVpJUC5fcmVhZExvY2FsID0gXCIpLmNvbmNhdChVWklQXzEuX3JlYWRMb2NhbCxcIlxcbiAgICBVWklQLmluZmxhdGVSYXcgPSBcIikuY29uY2F0KFVaSVBfMS5pbmZsYXRlUmF3LFwiXFxuICAgIFVaSVAuaW5mbGF0ZSA9IFwiKS5jb25jYXQoVVpJUF8xLmluZmxhdGUsXCJcXG4gICAgVVpJUC5kZWZsYXRlID0gXCIpLmNvbmNhdChVWklQXzEuZGVmbGF0ZSxcIlxcbiAgICBVWklQLmRlZmxhdGVSYXcgPSBcIikuY29uY2F0KFVaSVBfMS5kZWZsYXRlUmF3LFwiXFxuICAgIFVaSVAuZW5jb2RlID0gXCIpLmNvbmNhdChVWklQXzEuZW5jb2RlLFwiXFxuICAgIFVaSVAuX25vTmVlZCA9IFwiKS5jb25jYXQoVVpJUF8xLl9ub05lZWQsXCJcXG4gICAgVVpJUC5fd3JpdGVIZWFkZXIgPSBcIikuY29uY2F0KFVaSVBfMS5fd3JpdGVIZWFkZXIsXCJcXG4gICAgVVpJUC5jcmMgPSBwYXJzZShcIikuY29uY2F0KHN0cmluZ2lmeShVWklQXzEuY3JjKSxcIilcXG4gICAgVVpJUC5jcmMudGFibGUgPSAoIGZ1bmN0aW9uKCkge1xcbiAgICAgIHZhciB0YWIgPSBuZXcgVWludDMyQXJyYXkoMjU2KTtcXG4gICAgICBmb3IgKHZhciBuPTA7IG48MjU2OyBuKyspIHtcXG4gICAgICAgIHZhciBjID0gbjtcXG4gICAgICAgIGZvciAodmFyIGs9MDsgazw4OyBrKyspIHtcXG4gICAgICAgICAgaWYgKGMgJiAxKSAgYyA9IDB4ZWRiODgzMjAgXiAoYyA+Pj4gMSk7XFxuICAgICAgICAgIGVsc2UgICAgICAgIGMgPSBjID4+PiAxO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGFiW25dID0gYzsgIH1cXG4gICAgICByZXR1cm4gdGFiOyAgfSkoKVxcbiAgICBcXG4gICAgVVpJUC5hZGxlciA9IFwiKS5jb25jYXQoVVpJUF8xLmFkbGVyLFwiXFxuICAgIFVaSVAuYmluID0gcGFyc2UoXCIpLmNvbmNhdChzdHJpbmdpZnkoVVpJUF8xLmJpbiksXCIpXFxuICAgIFVaSVAuRiA9IHt9XFxuICAgIFVaSVAuRi5kZWZsYXRlUmF3ID0gXCIpLmNvbmNhdChVWklQXzEuRi5kZWZsYXRlUmF3LFwiXFxuICAgIFVaSVAuRi5fYmVzdE1hdGNoID0gXCIpLmNvbmNhdChVWklQXzEuRi5fYmVzdE1hdGNoLFwiXFxuICAgIFVaSVAuRi5faG93TG9uZyA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX2hvd0xvbmcsXCJcXG4gICAgVVpJUC5GLl9oYXNoID0gXCIpLmNvbmNhdChVWklQXzEuRi5faGFzaCxcIlxcbiAgICBVWklQLnNhdmVkID0gXCIpLmNvbmNhdChVWklQXzEuc2F2ZWQsXCJcXG4gICAgVVpJUC5GLl93cml0ZUJsb2NrID0gXCIpLmNvbmNhdChVWklQXzEuRi5fd3JpdGVCbG9jayxcIlxcbiAgICBVWklQLkYuX2NvcHlFeGFjdCA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX2NvcHlFeGFjdCxcIlxcbiAgICBVWklQLkYuZ2V0VHJlZXMgPSBcIikuY29uY2F0KFVaSVBfMS5GLmdldFRyZWVzLFwiXFxuICAgIFVaSVAuRi5nZXRTZWNvbmQgPSBcIikuY29uY2F0KFVaSVBfMS5GLmdldFNlY29uZCxcIlxcbiAgICBVWklQLkYubm9uWmVybyA9IFwiKS5jb25jYXQoVVpJUF8xLkYubm9uWmVybyxcIlxcbiAgICBVWklQLkYuY29udFNpemUgPSBcIikuY29uY2F0KFVaSVBfMS5GLmNvbnRTaXplLFwiXFxuICAgIFVaSVAuRi5fY29kZVRpbnkgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9jb2RlVGlueSxcIiBcXG4gICAgVVpJUC5GLl9sZW5Db2RlcyA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX2xlbkNvZGVzLFwiIFxcbiAgICBVWklQLkYuX2h1ZlRyZWUgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9odWZUcmVlLFwiIFxcbiAgICBVWklQLkYuc2V0RGVwdGggPSBcIikuY29uY2F0KFVaSVBfMS5GLnNldERlcHRoLFwiIFxcbiAgICBVWklQLkYucmVzdHJpY3REZXB0aCA9IFwiKS5jb25jYXQoVVpJUF8xLkYucmVzdHJpY3REZXB0aCxcIlxcbiAgICBVWklQLkYuX2dvb2RJbmRleCA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX2dvb2RJbmRleCxcIiBcXG4gICAgVVpJUC5GLl93cml0ZUxpdCA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX3dyaXRlTGl0LFwiIFxcbiAgICBVWklQLkYuaW5mbGF0ZSA9IFwiKS5jb25jYXQoVVpJUF8xLkYuaW5mbGF0ZSxcIiBcXG4gICAgVVpJUC5GLl9jaGVjayA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX2NoZWNrLFwiIFxcbiAgICBVWklQLkYuX2RlY29kZVRpbnkgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9kZWNvZGVUaW55LFwiIFxcbiAgICBVWklQLkYuX2NvcHlPdXQgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9jb3B5T3V0LFwiIFxcbiAgICBVWklQLkYubWFrZUNvZGVzID0gXCIpLmNvbmNhdChVWklQXzEuRi5tYWtlQ29kZXMsXCIgXFxuICAgIFVaSVAuRi5jb2RlczJtYXAgPSBcIikuY29uY2F0KFVaSVBfMS5GLmNvZGVzMm1hcCxcIiBcXG4gICAgVVpJUC5GLnJldkNvZGVzID0gXCIpLmNvbmNhdChVWklQXzEuRi5yZXZDb2RlcyxcIiBcXG5cXG4gICAgLy8gdXNlZCBvbmx5IGluIGRlZmxhdGVcXG4gICAgVVpJUC5GLl9wdXRzRSA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX3B1dHNFLFwiXFxuICAgIFVaSVAuRi5fcHV0c0YgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9wdXRzRixcIlxcbiAgXFxuICAgIFVaSVAuRi5fYml0c0UgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9iaXRzRSxcIlxcbiAgICBVWklQLkYuX2JpdHNGID0gXCIpLmNvbmNhdChVWklQXzEuRi5fYml0c0YsXCJcXG5cXG4gICAgVVpJUC5GLl9nZXQxNyA9IFwiKS5jb25jYXQoVVpJUF8xLkYuX2dldDE3LFwiXFxuICAgIFVaSVAuRi5fZ2V0MjUgPSBcIikuY29uY2F0KFVaSVBfMS5GLl9nZXQyNSxcIlxcbiAgICBVWklQLkYuVSA9IGZ1bmN0aW9uKCl7XFxuICAgICAgdmFyIHUxNj1VaW50MTZBcnJheSwgdTMyPVVpbnQzMkFycmF5O1xcbiAgICAgIHJldHVybiB7XFxuICAgICAgICBuZXh0X2NvZGUgOiBuZXcgdTE2KDE2KSxcXG4gICAgICAgIGJsX2NvdW50ICA6IG5ldyB1MTYoMTYpLFxcbiAgICAgICAgb3JkciA6IFsgMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNSBdLFxcbiAgICAgICAgb2YwICA6IFszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDk5OSw5OTksOTk5XSxcXG4gICAgICAgIGV4YiAgOiBbMCwwLDAsMCwwLDAsMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgIDQsICA1LCAgNSwgIDUsICA1LCAgMCwgIDAsICAwLCAgMF0sXFxuICAgICAgICBsZGVmIDogbmV3IHUxNigzMiksXFxuICAgICAgICBkZjAgIDogWzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywgNjU1MzUsIDY1NTM1XSxcXG4gICAgICAgIGR4YiAgOiBbMCwwLDAsMCwxLDEsMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgIDYsICA2LCAgNywgIDcsICA4LCAgOCwgICA5LCAgIDksICAxMCwgIDEwLCAgMTEsICAxMSwgIDEyLCAgIDEyLCAgIDEzLCAgIDEzLCAgICAgMCwgICAgIDBdLFxcbiAgICAgICAgZGRlZiA6IG5ldyB1MzIoMzIpLFxcbiAgICAgICAgZmxtYXA6IG5ldyB1MTYoICA1MTIpLCAgZmx0cmVlOiBbXSxcXG4gICAgICAgIGZkbWFwOiBuZXcgdTE2KCAgIDMyKSwgIGZkdHJlZTogW10sXFxuICAgICAgICBsbWFwIDogbmV3IHUxNigzMjc2OCksICBsdHJlZSA6IFtdLCAgdHRyZWU6W10sXFxuICAgICAgICBkbWFwIDogbmV3IHUxNigzMjc2OCksICBkdHJlZSA6IFtdLFxcbiAgICAgICAgaW1hcCA6IG5ldyB1MTYoICA1MTIpLCAgaXRyZWUgOiBbXSxcXG4gICAgICAgIC8vcmV2OSA6IG5ldyB1MTYoICA1MTIpXFxuICAgICAgICByZXYxNTogbmV3IHUxNigxPDwxNSksXFxuICAgICAgICBsaHN0IDogbmV3IHUzMigyODYpLCBkaHN0IDogbmV3IHUzMiggMzApLCBpaHN0IDogbmV3IHUzMigxOSksXFxuICAgICAgICBsaXRzIDogbmV3IHUzMigxNTAwMCksXFxuICAgICAgICBzdHJ0IDogbmV3IHUxNigxPDwxNiksXFxuICAgICAgICBwcmV2IDogbmV3IHUxNigxPDwxNSlcXG4gICAgICB9O1xcbiAgICB9ICgpO1xcblxcbiAgICAoZnVuY3Rpb24oKXtcXG4gICAgICB2YXIgVSA9IFVaSVAuRi5VO1xcbiAgICAgIHZhciBsZW4gPSAxPDwxNTtcXG4gICAgICBmb3IodmFyIGk9MDsgaTxsZW47IGkrKykge1xcbiAgICAgICAgdmFyIHggPSBpO1xcbiAgICAgICAgeCA9ICgoKHggJiAweGFhYWFhYWFhKSA+Pj4gMSkgfCAoKHggJiAweDU1NTU1NTU1KSA8PCAxKSk7XFxuICAgICAgICB4ID0gKCgoeCAmIDB4Y2NjY2NjY2MpID4+PiAyKSB8ICgoeCAmIDB4MzMzMzMzMzMpIDw8IDIpKTtcXG4gICAgICAgIHggPSAoKCh4ICYgMHhmMGYwZjBmMCkgPj4+IDQpIHwgKCh4ICYgMHgwZjBmMGYwZikgPDwgNCkpO1xcbiAgICAgICAgeCA9ICgoKHggJiAweGZmMDBmZjAwKSA+Pj4gOCkgfCAoKHggJiAweDAwZmYwMGZmKSA8PCA4KSk7XFxuICAgICAgICBVLnJldjE1W2ldID0gKCgoeCA+Pj4gMTYpIHwgKHggPDwgMTYpKSk+Pj4xNztcXG4gICAgICB9XFxuICBcXG4gICAgICBmdW5jdGlvbiBwdXNoVih0Z3QsIG4sIHN2KSB7ICB3aGlsZShuLS0hPTApIHRndC5wdXNoKDAsc3YpOyAgfVxcbiAgXFxuICAgICAgZm9yKHZhciBpPTA7IGk8MzI7IGkrKykgeyAgVS5sZGVmW2ldPShVLm9mMFtpXTw8Myl8VS5leGJbaV07ICBVLmRkZWZbaV09KFUuZGYwW2ldPDw0KXxVLmR4YltpXTsgIH1cXG4gIFxcbiAgICAgIHB1c2hWKFUuZmx0cmVlLCAxNDQsIDgpOyAgcHVzaFYoVS5mbHRyZWUsIDI1NS0xNDMsIDkpOyAgcHVzaFYoVS5mbHRyZWUsIDI3OS0yNTUsIDcpOyAgcHVzaFYoVS5mbHRyZWUsMjg3LTI3OSw4KTtcXG4gICAgICAvKlxcbiAgICAgICAgdmFyIGkgPSAwO1xcbiAgICAgICAgZm9yKDsgaTw9MTQzOyBpKyspIFUuZmx0cmVlLnB1c2goMCw4KTtcXG4gICAgICAgIGZvcig7IGk8PTI1NTsgaSsrKSBVLmZsdHJlZS5wdXNoKDAsOSk7XFxuICAgICAgICBmb3IoOyBpPD0yNzk7IGkrKykgVS5mbHRyZWUucHVzaCgwLDcpO1xcbiAgICAgICAgZm9yKDsgaTw9Mjg3OyBpKyspIFUuZmx0cmVlLnB1c2goMCw4KTtcXG4gICAgICAgICovXFxuICAgICAgVVpJUC5GLm1ha2VDb2RlcyhVLmZsdHJlZSwgOSk7XFxuICAgICAgVVpJUC5GLmNvZGVzMm1hcChVLmZsdHJlZSwgOSwgVS5mbG1hcCk7XFxuICAgICAgVVpJUC5GLnJldkNvZGVzIChVLmZsdHJlZSwgOSlcXG4gIFxcbiAgICAgIHB1c2hWKFUuZmR0cmVlLDMyLDUpO1xcbiAgICAgIC8vZm9yKGk9MDtpPDMyOyBpKyspIFUuZmR0cmVlLnB1c2goMCw1KTtcXG4gICAgICBVWklQLkYubWFrZUNvZGVzKFUuZmR0cmVlLCA1KTtcXG4gICAgICBVWklQLkYuY29kZXMybWFwKFUuZmR0cmVlLCA1LCBVLmZkbWFwKTtcXG4gICAgICBVWklQLkYucmV2Q29kZXMgKFUuZmR0cmVlLCA1KVxcbiAgXFxuICAgICAgcHVzaFYoVS5pdHJlZSwxOSwwKTsgIHB1c2hWKFUubHRyZWUsMjg2LDApOyAgcHVzaFYoVS5kdHJlZSwzMCwwKTsgIHB1c2hWKFUudHRyZWUsMzIwLDApO1xcbiAgICAgIC8qXFxuICAgICAgICBmb3IodmFyIGk9MDsgaTwgMTk7IGkrKykgVS5pdHJlZS5wdXNoKDAsMCk7XFxuICAgICAgICBmb3IodmFyIGk9MDsgaTwyODY7IGkrKykgVS5sdHJlZS5wdXNoKDAsMCk7XFxuICAgICAgICBmb3IodmFyIGk9MDsgaTwgMzA7IGkrKykgVS5kdHJlZS5wdXNoKDAsMCk7XFxuICAgICAgICBmb3IodmFyIGk9MDsgaTwzMjA7IGkrKykgVS50dHJlZS5wdXNoKDAsMCk7XFxuICAgICAgICAqL1xcbiAgICB9KSgpXFxuICAgIFwiKSl9ZnVuY3Rpb24gZ2VuZXJhdGVXb3JrZXJTY3JpcHQoKXtyZXR1cm4gY3JlYXRlV29ya2VyKFwiXFxuICAgIGxldCBzY3JpcHRJbXBvcnRlZCA9IGZhbHNlXFxuICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGFzeW5jIChlKSA9PiB7XFxuICAgICAgY29uc3QgeyBmaWxlLCBpZCwgaW1hZ2VDb21wcmVzc2lvbkxpYlVybCwgb3B0aW9ucyB9ID0gZS5kYXRhXFxuICAgICAgb3B0aW9ucy5vblByb2dyZXNzID0gKHByb2dyZXNzKSA9PiBzZWxmLnBvc3RNZXNzYWdlKHsgcHJvZ3Jlc3MsIGlkIH0pXFxuICAgICAgdHJ5IHtcXG4gICAgICAgIGlmICghc2NyaXB0SW1wb3J0ZWQpIHtcXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ1t3b3JrZXJdIGltcG9ydFNjcmlwdHMnLCBpbWFnZUNvbXByZXNzaW9uTGliVXJsKVxcbiAgICAgICAgICBzZWxmLmltcG9ydFNjcmlwdHMoaW1hZ2VDb21wcmVzc2lvbkxpYlVybClcXG4gICAgICAgICAgc2NyaXB0SW1wb3J0ZWQgPSB0cnVlXFxuICAgICAgICB9XFxuICAgICAgICAvLyBjb25zb2xlLmxvZygnW3dvcmtlcl0gc2VsZicsIHNlbGYpXFxuICAgICAgICBjb25zdCBjb21wcmVzc2VkRmlsZSA9IGF3YWl0IGltYWdlQ29tcHJlc3Npb24oZmlsZSwgb3B0aW9ucylcXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBmaWxlOiBjb21wcmVzc2VkRmlsZSwgaWQgfSlcXG4gICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdbd29ya2VyXSBlcnJvcicsIGUpXFxuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXJyb3I6IGUubWVzc2FnZSArICdcXFxcbicgKyBlLnN0YWNrLCBpZCB9KVxcbiAgICAgIH1cXG4gICAgfSlcXG4gIFwiKX1mdW5jdGlvbiBjb21wcmVzc09uV2ViV29ya2VyKGUscil7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGEpe3ZhciBpPWNudCs9MTtpbWFnZUNvbXByZXNzaW9uTGliVXJsfHwoaW1hZ2VDb21wcmVzc2lvbkxpYlVybD1nZW5lcmF0ZUxpYigpKSx3b3JrZXJ8fCh3b3JrZXI9Z2VuZXJhdGVXb3JrZXJTY3JpcHQoKSksd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsKGZ1bmN0aW9uIGhhbmRsZXIoZSl7aWYoZS5kYXRhLmlkPT09aSl7aWYodm9pZCAwIT09ZS5kYXRhLnByb2dyZXNzKXJldHVybiB2b2lkIHIub25Qcm9ncmVzcyhlLmRhdGEucHJvZ3Jlc3MpO3dvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGhhbmRsZXIpLGUuZGF0YS5lcnJvciYmYShuZXcgRXJyb3IoZS5kYXRhLmVycm9yKSksdChlLmRhdGEuZmlsZSl9fSkpLHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixhKSx3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZpbGU6ZSxpZDppLGltYWdlQ29tcHJlc3Npb25MaWJVcmw6aW1hZ2VDb21wcmVzc2lvbkxpYlVybCxvcHRpb25zOl9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LHIpLHt9LHtvblByb2dyZXNzOnZvaWQgMH0pfSl9KSl9ZnVuY3Rpb24gaW1hZ2VDb21wcmVzc2lvbihlLHIpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxhKXt2YXIgaSxzLGMsbCx1LHA7aWYoaT1fb2JqZWN0U3ByZWFkMih7fSxyKSxjPTAsbD1pLm9uUHJvZ3Jlc3MsaS5tYXhTaXplTUI9aS5tYXhTaXplTUJ8fE51bWJlci5QT1NJVElWRV9JTkZJTklUWSx1PVwiYm9vbGVhblwiIT10eXBlb2YgaS51c2VXZWJXb3JrZXJ8fGkudXNlV2ViV29ya2VyLGRlbGV0ZSBpLnVzZVdlYldvcmtlcixpLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7Yz1lLFwiZnVuY3Rpb25cIj09dHlwZW9mIGwmJmwoYyl9LCEoZSBpbnN0YW5jZW9mIEJsb2J8fGUgaW5zdGFuY2VvZiBDdXN0b21GaWxlKSlyZXR1cm4gYShuZXcgRXJyb3IoXCJUaGUgZmlsZSBnaXZlbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQmxvYiBvciBGaWxlXCIpKTtpZighL15pbWFnZS8udGVzdChlLnR5cGUpKXJldHVybiBhKG5ldyBFcnJvcihcIlRoZSBmaWxlIGdpdmVuIGlzIG5vdCBhbiBpbWFnZVwiKSk7aWYocD1cInVuZGVmaW5lZFwiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSwhdXx8XCJmdW5jdGlvblwiIT10eXBlb2YgV29ya2VyfHxwKXJldHVybiBjb21wcmVzcyhlLGkpLnRoZW4oZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBzPWUsJElmXzMuY2FsbCh0aGlzKX1jYXRjaChlKXtyZXR1cm4gYShlKX19LmJpbmQodGhpcyksYSk7dmFyIGQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuICRJZl8zLmNhbGwodGhpcyl9Y2F0Y2goZSl7cmV0dXJuIGEoZSl9fS5iaW5kKHRoaXMpLGg9ZnVuY3Rpb24gJFRyeV8xX0NhdGNoKHIpe3RyeXtyZXR1cm4gY29tcHJlc3MoZSxpKS50aGVuKChmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHM9ZSxkKCl9Y2F0Y2goZSl7cmV0dXJuIGEoZSl9fSksYSl9Y2F0Y2goZSl7cmV0dXJuIGEoZSl9fTt0cnl7cmV0dXJuIGNvbXByZXNzT25XZWJXb3JrZXIoZSxpKS50aGVuKChmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHM9ZSxkKCl9Y2F0Y2goZSl7cmV0dXJuIGgoKX19KSxoKX1jYXRjaChlKXtoKCl9ZnVuY3Rpb24gJElmXzMoKXt0cnl7cy5uYW1lPWUubmFtZSxzLmxhc3RNb2RpZmllZD1lLmxhc3RNb2RpZmllZH1jYXRjaChlKXt9cmV0dXJuIHQocyl9fSkpfWltYWdlQ29tcHJlc3Npb24uZ2V0RGF0YVVybEZyb21GaWxlPWdldERhdGFVcmxGcm9tRmlsZSxpbWFnZUNvbXByZXNzaW9uLmdldEZpbGVmcm9tRGF0YVVybD1nZXRGaWxlZnJvbURhdGFVcmwsaW1hZ2VDb21wcmVzc2lvbi5sb2FkSW1hZ2U9bG9hZEltYWdlLGltYWdlQ29tcHJlc3Npb24uZHJhd0ltYWdlSW5DYW52YXM9ZHJhd0ltYWdlSW5DYW52YXMsaW1hZ2VDb21wcmVzc2lvbi5kcmF3RmlsZUluQ2FudmFzPWRyYXdGaWxlSW5DYW52YXMsaW1hZ2VDb21wcmVzc2lvbi5jYW52YXNUb0ZpbGU9Y2FudmFzVG9GaWxlLGltYWdlQ29tcHJlc3Npb24uZ2V0RXhpZk9yaWVudGF0aW9uPWdldEV4aWZPcmllbnRhdGlvbixpbWFnZUNvbXByZXNzaW9uLmhhbmRsZU1heFdpZHRoT3JIZWlnaHQ9aGFuZGxlTWF4V2lkdGhPckhlaWdodCxpbWFnZUNvbXByZXNzaW9uLmZvbGxvd0V4aWZPcmllbnRhdGlvbj1mb2xsb3dFeGlmT3JpZW50YXRpb24saW1hZ2VDb21wcmVzc2lvbi5jbGVhbnVwQ2FudmFzTWVtb3J5PWNsZWFudXBDYW52YXNNZW1vcnksaW1hZ2VDb21wcmVzc2lvbi5pc0F1dG9PcmllbnRhdGlvbkluQnJvd3Nlcj1pc0F1dG9PcmllbnRhdGlvbkluQnJvd3NlcixpbWFnZUNvbXByZXNzaW9uLmFwcHJveGltYXRlQmVsb3dNYXhpbXVtQ2FudmFzU2l6ZU9mQnJvd3Nlcj1hcHByb3hpbWF0ZUJlbG93TWF4aW11bUNhbnZhc1NpemVPZkJyb3dzZXIsaW1hZ2VDb21wcmVzc2lvbi5nZXRCcm93c2VyTmFtZT1nZXRCcm93c2VyTmFtZSxpbWFnZUNvbXByZXNzaW9uLnZlcnNpb249XCIxLjAuMTZcIjtleHBvcnR7aW1hZ2VDb21wcmVzc2lvbiBhcyBkZWZhdWx0fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXItaW1hZ2UtY29tcHJlc3Npb24ubWpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/browser-image-compression/dist/browser-image-compression.mjs\n");
319
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @license © 2020 Google LLC. Licensed under the Apache License, Version 2.0.\n/**\n * Saves a file to disk using the legacy `<a download>` method.\n * @type { typeof import(\"../../index\").fileSave }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async(e,t={})=>{Array.isArray(t)&&(t=t[0]);const c=document.createElement(\"a\");c.download=t.fileName||\"Untitled\",c.href=URL.createObjectURL(e);const r=e=>{\"function\"==typeof l&&l(),resolve(e)},l=t.legacySetup&&t.legacySetup(r,(()=>l(reject)),c);return c.addEventListener(\"click\",(()=>{\n// `setTimeout()` due to\n// https://github.com/LLK/scratch-gui/issues/1783#issuecomment-426286393\nsetTimeout((()=>URL.revokeObjectURL(c.href)),3e4),r(null)})),c.click(),null});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Bkd2VsbGUvYnJvd3Nlci1mcy1hY2Nlc3MvZGlzdC9sZWdhY3kvZmlsZS1zYXZlLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsaUVBQWUsWUFBWSxJQUFJLDJCQUEyQixvQ0FBb0MsZ0VBQWdFLFlBQVkscUNBQXFDLHFEQUFxRDtBQUNwUTtBQUNBO0FBQ0EsMERBQTBELGtCQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGR3ZWxsZS9icm93c2VyLWZzLWFjY2Vzcy9kaXN0L2xlZ2FjeS9maWxlLXNhdmUubWpzPzE2Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBAbGljZW5zZSDCqSAyMDIwIEdvb2dsZSBMTEMuIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4vKipcbiAqIFNhdmVzIGEgZmlsZSB0byBkaXNrIHVzaW5nIHRoZSBsZWdhY3kgYDxhIGRvd25sb2FkPmAgbWV0aG9kLlxuICogQHR5cGUgeyB0eXBlb2YgaW1wb3J0KFwiLi4vLi4vaW5kZXhcIikuZmlsZVNhdmUgfVxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyhlLHQ9e30pPT57QXJyYXkuaXNBcnJheSh0KSYmKHQ9dFswXSk7Y29uc3QgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtjLmRvd25sb2FkPXQuZmlsZU5hbWV8fFwiVW50aXRsZWRcIixjLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChlKTtjb25zdCByPWU9PntcImZ1bmN0aW9uXCI9PXR5cGVvZiBsJiZsKCkscmVzb2x2ZShlKX0sbD10LmxlZ2FjeVNldHVwJiZ0LmxlZ2FjeVNldHVwKHIsKCgpPT5sKHJlamVjdCkpLGMpO3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCgoKT0+e1xuLy8gYHNldFRpbWVvdXQoKWAgZHVlIHRvXG4vLyBodHRwczovL2dpdGh1Yi5jb20vTExLL3NjcmF0Y2gtZ3VpL2lzc3Vlcy8xNzgzI2lzc3VlY29tbWVudC00MjYyODYzOTNcbnNldFRpbWVvdXQoKCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKGMuaHJlZikpLDNlNCkscihudWxsKX0pKSxjLmNsaWNrKCksbnVsbH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@dwelle/browser-fs-access/dist/legacy/file-save.mjs\n");
331
320
 
332
321
  /***/ })
333
322