rubyfox-server 2.13.5.1 → 2.16.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (572) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rubyfox/server/data/config/UploadsLock.txt +3 -0
  3. data/lib/rubyfox/server/data/config/admin/admintool.xml +2 -0
  4. data/lib/rubyfox/server/data/config/admin/descriptors/config_room.txt +97 -43
  5. data/lib/rubyfox/server/data/config/admin/descriptors/config_server.txt +307 -93
  6. data/lib/rubyfox/server/data/config/admin/descriptors/config_zone.txt +311 -95
  7. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_game.txt +5 -5
  8. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_mmo.txt +6 -6
  9. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_room.txt +69 -44
  10. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_user.txt +55 -43
  11. data/lib/rubyfox/server/data/config/admin/descriptors/runtime_zone.txt +81 -36
  12. data/lib/rubyfox/server/data/config/admin/gmc/gmc.py +55 -18
  13. data/lib/rubyfox/server/data/config/admin/icons/Analytics.png +0 -0
  14. data/lib/rubyfox/server/data/config/admin/icons/Analytics.svg +1 -0
  15. data/lib/rubyfox/server/data/config/admin/icons/BanManager.png +0 -0
  16. data/lib/rubyfox/server/data/config/admin/icons/BanManager.svg +1 -0
  17. data/lib/rubyfox/server/data/config/admin/icons/BlueBoxMonitor.png +0 -0
  18. data/lib/rubyfox/server/data/config/admin/icons/BlueBoxMonitor.svg +1 -0
  19. data/lib/rubyfox/server/data/config/admin/icons/Console.png +0 -0
  20. data/lib/rubyfox/server/data/config/admin/icons/Console.svg +9 -0
  21. data/lib/rubyfox/server/data/config/admin/icons/Dashboard.png +0 -0
  22. data/lib/rubyfox/server/data/config/admin/icons/Dashboard.svg +1 -0
  23. data/lib/rubyfox/server/data/config/admin/icons/ExtensionManager.png +0 -0
  24. data/lib/rubyfox/server/data/config/admin/icons/ExtensionManager.svg +1 -0
  25. data/lib/rubyfox/server/data/config/admin/icons/LicenseManager.png +0 -0
  26. data/lib/rubyfox/server/data/config/admin/icons/LicenseManager.svg +1 -0
  27. data/lib/rubyfox/server/data/config/admin/icons/LogViewer.png +0 -0
  28. data/lib/rubyfox/server/data/config/admin/icons/LogViewer.svg +1 -0
  29. data/lib/rubyfox/server/data/config/admin/icons/ServerConfigurator.png +0 -0
  30. data/lib/rubyfox/server/data/config/admin/icons/ServerConfigurator.svg +1 -0
  31. data/lib/rubyfox/server/data/config/admin/icons/ServletManager.png +0 -0
  32. data/lib/rubyfox/server/data/config/admin/icons/ServletManager.svg +1 -0
  33. data/lib/rubyfox/server/data/config/admin/icons/ZoneConfigurator.png +0 -0
  34. data/lib/rubyfox/server/data/config/admin/icons/ZoneConfigurator.svg +1 -0
  35. data/lib/rubyfox/server/data/config/admin/icons/ZoneMonitor.png +0 -0
  36. data/lib/rubyfox/server/data/config/admin/icons/ZoneMonitor.svg +1 -0
  37. data/lib/rubyfox/server/data/config/core.xml +2 -2
  38. data/lib/rubyfox/server/data/config/log4j.properties +7 -7
  39. data/lib/rubyfox/server/data/config/server.xml +9 -10
  40. data/lib/rubyfox/server/data/config/wordsFile.txt +0 -2
  41. data/lib/rubyfox/server/data/data/GeoLite2-Country.mmdb +0 -0
  42. data/lib/rubyfox/server/data/{config → data/buddylists/BasicExamples}/.keep +0 -0
  43. data/lib/rubyfox/server/data/data/{buddylists → uploads}/.keep +0 -0
  44. data/lib/rubyfox/server/data/lib/BlueBox.war +0 -0
  45. data/lib/rubyfox/server/data/lib/apache-tomcat/LICENSE +1061 -0
  46. data/lib/rubyfox/server/data/lib/apache-tomcat/NOTICE +68 -0
  47. data/lib/rubyfox/server/data/lib/apache-tomcat/README.md +79 -0
  48. data/lib/rubyfox/server/data/lib/apache-tomcat/RELEASE-NOTES +174 -0
  49. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/bootstrap.jar +0 -0
  50. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/catalina-tasks.xml +39 -0
  51. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/catalina.bat +386 -0
  52. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/catalina.sh +689 -0
  53. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/ciphers.bat +58 -0
  54. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/ciphers.sh +60 -0
  55. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/commons-daemon-native.tar.gz +0 -0
  56. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/commons-daemon.jar +0 -0
  57. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/configtest.bat +58 -0
  58. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/configtest.sh +60 -0
  59. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/daemon.sh +293 -0
  60. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/digest.bat +58 -0
  61. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/digest.sh +60 -0
  62. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/makebase.bat +114 -0
  63. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/makebase.sh +115 -0
  64. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/setclasspath.bat +94 -0
  65. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/setclasspath.sh +98 -0
  66. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/shutdown.bat +58 -0
  67. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/shutdown.sh +60 -0
  68. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/startup.bat +58 -0
  69. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/startup.sh +60 -0
  70. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tomcat-juli.jar +0 -0
  71. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tomcat-native.tar.gz +0 -0
  72. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tool-wrapper.bat +110 -0
  73. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/tool-wrapper.sh +153 -0
  74. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/version.bat +58 -0
  75. data/lib/rubyfox/server/data/lib/apache-tomcat/bin/version.sh +60 -0
  76. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/Catalina/localhost/rewrite.config +1 -0
  77. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/catalina.policy +260 -0
  78. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/catalina.properties +206 -0
  79. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/context.xml +31 -0
  80. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/jaspic-providers.xml +23 -0
  81. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/jaspic-providers.xsd +53 -0
  82. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/keystore.jks +0 -0
  83. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/logging.properties +79 -0
  84. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/server.xml +161 -0
  85. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/tomcat-users.xml +41 -0
  86. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/tomcat-users.xsd +59 -0
  87. data/lib/rubyfox/server/data/lib/apache-tomcat/conf/web.xml +4733 -0
  88. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/annotations-api.jar +0 -0
  89. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-ant.jar +0 -0
  90. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-ha.jar +0 -0
  91. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-ssi.jar +0 -0
  92. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-storeconfig.jar +0 -0
  93. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina-tribes.jar +0 -0
  94. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/catalina.jar +0 -0
  95. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/ecj-4.15.jar +0 -0
  96. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/el-api.jar +0 -0
  97. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jasper-el.jar +0 -0
  98. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jasper.jar +0 -0
  99. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jaspic-api.jar +0 -0
  100. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/jsp-api.jar +0 -0
  101. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/servlet-api.jar +0 -0
  102. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/sfs2x-ws-helper.jar +0 -0
  103. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-api.jar +0 -0
  104. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-coyote.jar +0 -0
  105. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-dbcp.jar +0 -0
  106. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-cs.jar +0 -0
  107. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-de.jar +0 -0
  108. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-es.jar +0 -0
  109. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-fr.jar +0 -0
  110. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-ja.jar +0 -0
  111. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-ko.jar +0 -0
  112. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-pt-BR.jar +0 -0
  113. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-ru.jar +0 -0
  114. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-i18n-zh-CN.jar +0 -0
  115. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-jdbc.jar +0 -0
  116. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-jni.jar +0 -0
  117. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-util-scan.jar +0 -0
  118. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-util.jar +0 -0
  119. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/tomcat-websocket.jar +0 -0
  120. data/lib/rubyfox/server/data/lib/apache-tomcat/lib/websocket-api.jar +0 -0
  121. data/lib/rubyfox/server/data/{extensions → lib/apache-tomcat/logs}/.keep +0 -0
  122. data/lib/rubyfox/server/data/lib/{jetty/lib/ext/.donotdelete → apache-tomcat/temp/safeToDelete.tmp} +0 -0
  123. data/lib/rubyfox/server/data/lib/{jetty/resources → apache-tomcat/work}/.keep +0 -0
  124. data/lib/rubyfox/server/data/lib/commons-collections-3.2.2.jar +0 -0
  125. data/lib/rubyfox/server/data/lib/commons-compress-1.19.jar +0 -0
  126. data/lib/rubyfox/server/data/lib/js/LibApi.js +48 -181
  127. data/lib/rubyfox/server/data/lib/sfs2x-admin.jar +0 -0
  128. data/lib/rubyfox/server/data/lib/sfs2x-core.jar +0 -0
  129. data/lib/rubyfox/server/data/lib/sfs2x-lib.jar +0 -0
  130. data/lib/rubyfox/server/data/lib/sfs2x-util.jar +0 -0
  131. data/lib/rubyfox/server/data/lib/sfs2x.jar +0 -0
  132. data/lib/rubyfox/server/data/sfs2x-service +6 -6
  133. data/lib/rubyfox/server/data/sfs2x-service.vmoptions +1 -1
  134. data/lib/rubyfox/server/data/sfs2x.sh +1 -1
  135. data/lib/rubyfox/server/data/www/BlueBox.war +0 -0
  136. data/lib/rubyfox/server/data/www/HelloServlet/index.jsp +1 -1
  137. data/lib/rubyfox/server/data/www/{root → ROOT}/_css_/default.css +0 -0
  138. data/lib/rubyfox/server/data/www/{root → ROOT}/_css_/reset.css +0 -0
  139. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/background_gradient.png +0 -0
  140. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/background_logo.png +0 -0
  141. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/favicon.png +0 -0
  142. data/lib/rubyfox/server/data/www/{root → ROOT}/_images_/logo_smartfoxserver.png +0 -0
  143. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/_changes-to-default-themes_.txt +15 -0
  144. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/bootstrap.min.css +7 -0
  145. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/custom-bootstrap.min.css +1 -0
  146. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/css/all.min.css +5 -0
  147. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.eot +0 -0
  148. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.svg +3459 -0
  149. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  150. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.woff +0 -0
  151. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  152. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.eot +0 -0
  153. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.svg +803 -0
  154. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  155. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.woff +0 -0
  156. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  157. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.eot +0 -0
  158. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.svg +4527 -0
  159. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  160. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.woff +0 -0
  161. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  162. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/fonts.css +175 -0
  163. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/jquery.scrolling-tabs.min.css +8 -0
  164. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/kendo.custom-bootstrap-v4.css +15280 -0
  165. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/reset.css +54 -0
  166. data/lib/rubyfox/server/data/www/ROOT/admin/assets/css/style.css +1428 -0
  167. data/lib/rubyfox/server/data/www/ROOT/admin/assets/data/countries.geo.json +178 -0
  168. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.otf +0 -0
  169. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.ttf +0 -0
  170. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.woff +0 -0
  171. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/FreeMono.woff2 +0 -0
  172. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300.ttf +0 -0
  173. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300.woff +0 -0
  174. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300.woff2 +0 -0
  175. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300italic.ttf +0 -0
  176. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300italic.woff +0 -0
  177. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-300italic.woff2 +0 -0
  178. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600.ttf +0 -0
  179. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600.woff +0 -0
  180. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600.woff2 +0 -0
  181. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600italic.ttf +0 -0
  182. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600italic.woff +0 -0
  183. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-600italic.woff2 +0 -0
  184. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700.ttf +0 -0
  185. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700.woff +0 -0
  186. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700.woff2 +0 -0
  187. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700italic.ttf +0 -0
  188. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700italic.woff +0 -0
  189. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-700italic.woff2 +0 -0
  190. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800.ttf +0 -0
  191. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800.woff +0 -0
  192. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800.woff2 +0 -0
  193. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800italic.ttf +0 -0
  194. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800italic.woff +0 -0
  195. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-800italic.woff2 +0 -0
  196. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-italic.ttf +0 -0
  197. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-italic.woff +0 -0
  198. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-italic.woff2 +0 -0
  199. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-regular.ttf +0 -0
  200. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-regular.woff +0 -0
  201. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/open-sans-v15-cyrillic_greek_cyrillic-ext_vietnamese_latin_latin-ext_greek-ext-regular.woff2 +0 -0
  202. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-300.ttf +0 -0
  203. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-300.woff +0 -0
  204. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-300.woff2 +0 -0
  205. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-700.ttf +0 -0
  206. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-700.woff +0 -0
  207. data/lib/rubyfox/server/data/www/ROOT/admin/assets/fonts/roboto-condensed-v16-latin-700.woff2 +0 -0
  208. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/compare.png +0 -0
  209. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsChart.png +0 -0
  210. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsCompare.png +0 -0
  211. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsFilter.png +0 -0
  212. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsMap.png +0 -0
  213. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/demographicsTable.png +0 -0
  214. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyChart.png +0 -0
  215. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyCompare.png +0 -0
  216. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyFilter.png +0 -0
  217. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/analytics-adv/technologyTable.png +0 -0
  218. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/apple-touch-icon-180x180.png +0 -0
  219. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/favicon-16x16.png +0 -0
  220. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/favicon-32x32.png +0 -0
  221. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/favicon-64x64.png +0 -0
  222. data/lib/rubyfox/server/data/www/ROOT/admin/assets/images/logo.png +0 -0
  223. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/application.bundle.js +2208 -0
  224. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-0.bundle.js +7662 -0
  225. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-1.bundle.js +929 -0
  226. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-10.bundle.js +766 -0
  227. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-11.bundle.js +71 -0
  228. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-12.bundle.js +1184 -0
  229. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-12~module-13~module-9.bundle.js +2618 -0
  230. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-13.bundle.js +3315 -0
  231. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-3.bundle.js +280 -0
  232. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-4.bundle.js +1122 -0
  233. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-5.bundle.js +2624 -0
  234. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-6.bundle.js +801 -0
  235. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-7.bundle.js +607 -0
  236. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-8.bundle.js +1221 -0
  237. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/module-9.bundle.js +847 -0
  238. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/vendors~module-0.bundle.js +3240 -0
  239. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/vendors~module-0~module-1~module-13~module-4~module-5~module-7~module-8.bundle.js +17357 -0
  240. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/core/modules/vendors~module-9.bundle.js +807 -0
  241. data/lib/rubyfox/server/data/{lib/jetty/webapps → www/ROOT/admin/assets/js/custom-modules}/.keep +0 -0
  242. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/bootstrap.min.js +7 -0
  243. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/jquery-3.3.1.min.js +2 -0
  244. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/jquery.scrolling-tabs.min.js +8 -0
  245. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/js.cookie.min.js +8 -0
  246. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/kendo.all.min.js +136 -0
  247. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/popper.min.js +5 -0
  248. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/sfs2x-api-1.7.15.js +8 -0
  249. data/lib/rubyfox/server/data/www/ROOT/admin/assets/js/libs/versions-readme.txt +16 -0
  250. data/lib/rubyfox/server/data/www/ROOT/admin/index.html +244 -0
  251. data/lib/rubyfox/server/data/www/ROOT/admin/manifest.json +25 -0
  252. data/lib/rubyfox/server/data/www/ROOT/admin/modules/analytics.html +328 -0
  253. data/lib/rubyfox/server/data/www/ROOT/admin/modules/ban-manager.html +160 -0
  254. data/lib/rubyfox/server/data/www/ROOT/admin/modules/blue-box-monitor.html +37 -0
  255. data/lib/rubyfox/server/data/www/ROOT/admin/modules/console.html +135 -0
  256. data/lib/rubyfox/server/data/www/ROOT/admin/modules/dashboard.html +368 -0
  257. data/lib/rubyfox/server/data/www/ROOT/admin/modules/extension-manager.html +98 -0
  258. data/lib/rubyfox/server/data/www/ROOT/admin/modules/license-manager.html +117 -0
  259. data/lib/rubyfox/server/data/www/ROOT/admin/modules/log-viewer.html +194 -0
  260. data/lib/rubyfox/server/data/www/ROOT/admin/modules/server-configurator.html +55 -0
  261. data/lib/rubyfox/server/data/www/ROOT/admin/modules/servlet-manager.html +98 -0
  262. data/lib/rubyfox/server/data/www/ROOT/admin/modules/zone-configurator.html +62 -0
  263. data/lib/rubyfox/server/data/www/ROOT/admin/modules/zone-monitor.html +346 -0
  264. data/lib/rubyfox/server/data/www/{root → ROOT}/crossdomain.xml +0 -0
  265. data/lib/rubyfox/server/data/www/{root → ROOT}/examples/index.html +0 -0
  266. data/lib/rubyfox/server/data/www/{root → ROOT}/favicon.ico +0 -0
  267. data/lib/rubyfox/server/data/www/{root → ROOT}/favicon.png +0 -0
  268. data/lib/rubyfox/server/data/www/{root → ROOT}/index.html +0 -0
  269. data/lib/rubyfox/server/data/www/host-manager/META-INF/context.xml +24 -0
  270. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/jsp/401.jsp +71 -0
  271. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/jsp/403.jsp +90 -0
  272. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/jsp/404.jsp +62 -0
  273. data/lib/rubyfox/server/data/www/host-manager/WEB-INF/web.xml +131 -0
  274. data/lib/rubyfox/server/data/www/host-manager/images/asf-logo.svg +226 -0
  275. data/lib/rubyfox/server/data/www/host-manager/images/tomcat.gif +0 -0
  276. data/lib/rubyfox/server/data/www/host-manager/index.jsp +18 -0
  277. data/lib/rubyfox/server/data/www/host-manager/manager.xml +26 -0
  278. data/lib/rubyfox/server/data/{logs → www/logsBackup}/.keep +0 -0
  279. data/lib/rubyfox/server/data/www/manager/META-INF/context.xml +24 -0
  280. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/401.jsp +80 -0
  281. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/403.jsp +100 -0
  282. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/404.jsp +63 -0
  283. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/connectorCerts.jsp +92 -0
  284. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/connectorCiphers.jsp +92 -0
  285. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/connectorTrustedCerts.jsp +92 -0
  286. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/sessionDetail.jsp +197 -0
  287. data/lib/rubyfox/server/data/www/manager/WEB-INF/jsp/sessionsList.jsp +170 -0
  288. data/lib/rubyfox/server/data/www/manager/WEB-INF/web.xml +195 -0
  289. data/lib/rubyfox/server/data/www/manager/images/asf-logo.svg +226 -0
  290. data/lib/rubyfox/server/data/www/manager/images/tomcat.gif +0 -0
  291. data/lib/rubyfox/server/data/www/manager/index.jsp +18 -0
  292. data/lib/rubyfox/server/data/www/manager/status.xsd +84 -0
  293. data/lib/rubyfox/server/data/www/manager/xform.xsl +125 -0
  294. data/lib/rubyfox/server/version.rb +1 -1
  295. metadata +258 -298
  296. data/lib/rubyfox/server/data/config/ExtensionManagerLock.txt +0 -2
  297. data/lib/rubyfox/server/data/lib/Lib/reindex$py.class +0 -0
  298. data/lib/rubyfox/server/data/lib/jetty/VERSION.txt +0 -9320
  299. data/lib/rubyfox/server/data/lib/jetty/etc/README.spnego +0 -62
  300. data/lib/rubyfox/server/data/lib/jetty/etc/jamon.xml +0 -32
  301. data/lib/rubyfox/server/data/lib/jetty/etc/jdbcRealm.properties +0 -72
  302. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-alpn.xml +0 -32
  303. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-annotations.xml +0 -20
  304. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-cdi.xml +0 -19
  305. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-debug.xml +0 -36
  306. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-debuglog.xml +0 -25
  307. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-deploy.xml +0 -76
  308. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gcloud-memcached-sessions.xml +0 -27
  309. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gcloud-session-idmgr.xml +0 -19
  310. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gcloud-sessions.xml +0 -27
  311. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-gzip.xml +0 -67
  312. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http-forwarded.xml +0 -17
  313. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http.xml +0 -47
  314. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http2.xml +0 -26
  315. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-http2c.xml +0 -18
  316. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-https.xml +0 -29
  317. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-infinispan.xml +0 -39
  318. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-ipaccess.xml +0 -28
  319. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jaas.xml +0 -16
  320. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jdbc-sessions.xml +0 -34
  321. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jmx-remote.xml +0 -40
  322. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-jmx.xml +0 -32
  323. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-logging.xml +0 -36
  324. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-lowresources.xml +0 -22
  325. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-monitor.xml +0 -30
  326. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-nosql.xml +0 -19
  327. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-plus.xml +0 -26
  328. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-proxy-protocol-ssl.xml +0 -10
  329. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-proxy-protocol.xml +0 -10
  330. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-proxy.xml +0 -35
  331. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-requestlog.xml +0 -30
  332. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-rewrite-customizer.xml +0 -17
  333. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-rewrite.xml +0 -31
  334. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-setuid.xml +0 -30
  335. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-spring.xml +0 -61
  336. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-ssl-context.xml +0 -29
  337. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-ssl.xml +0 -58
  338. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-started.xml +0 -15
  339. data/lib/rubyfox/server/data/lib/jetty/etc/jetty-stats.xml +0 -18
  340. data/lib/rubyfox/server/data/lib/jetty/etc/jetty.conf +0 -12
  341. data/lib/rubyfox/server/data/lib/jetty/etc/jetty.xml +0 -195
  342. data/lib/rubyfox/server/data/lib/jetty/etc/jminix.xml +0 -12
  343. data/lib/rubyfox/server/data/lib/jetty/etc/jolokia.xml +0 -16
  344. data/lib/rubyfox/server/data/lib/jetty/etc/keystore +0 -0
  345. data/lib/rubyfox/server/data/lib/jetty/etc/krb5.ini +0 -23
  346. data/lib/rubyfox/server/data/lib/jetty/etc/rewrite-compactpath.xml +0 -10
  347. data/lib/rubyfox/server/data/lib/jetty/etc/spnego.conf +0 -19
  348. data/lib/rubyfox/server/data/lib/jetty/etc/spnego.properties +0 -1
  349. data/lib/rubyfox/server/data/lib/jetty/etc/webdefault.xml +0 -539
  350. data/lib/rubyfox/server/data/lib/jetty/lib/asm-5.0.1.jar +0 -0
  351. data/lib/rubyfox/server/data/lib/jetty/lib/asm-commons-5.0.1.jar +0 -0
  352. data/lib/rubyfox/server/data/lib/jetty/lib/fcgi/fcgi-client-9.3.11.v20160721.jar +0 -0
  353. data/lib/rubyfox/server/data/lib/jetty/lib/fcgi/fcgi-server-9.3.11.v20160721.jar +0 -0
  354. data/lib/rubyfox/server/data/lib/jetty/lib/http2-common-9.3.11.v20160721.jar +0 -0
  355. data/lib/rubyfox/server/data/lib/jetty/lib/http2-hpack-9.3.11.v20160721.jar +0 -0
  356. data/lib/rubyfox/server/data/lib/jetty/lib/http2-server-9.3.11.v20160721.jar +0 -0
  357. data/lib/rubyfox/server/data/lib/jetty/lib/jaspi/javax.security.auth.message-1.0.0.v201108011116.jar +0 -0
  358. data/lib/rubyfox/server/data/lib/jetty/lib/javax-websocket-client-impl-9.3.11.v20160721.jar +0 -0
  359. data/lib/rubyfox/server/data/lib/jetty/lib/javax-websocket-server-impl-9.3.11.v20160721.jar +0 -0
  360. data/lib/rubyfox/server/data/lib/jetty/lib/javax.annotation-api-1.2.jar +0 -0
  361. data/lib/rubyfox/server/data/lib/jetty/lib/javax.websocket-api-1.0.jar +0 -0
  362. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-alpn-server-9.3.11.v20160721.jar +0 -0
  363. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-annotations-9.3.11.v20160721.jar +0 -0
  364. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-client-9.3.11.v20160721.jar +0 -0
  365. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-continuation-9.3.11.v20160721.jar +0 -0
  366. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-deploy-9.3.11.v20160721.jar +0 -0
  367. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-gcloud-memcached-session-manager-9.3.11.v20160721.jar +0 -0
  368. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-gcloud-session-manager-9.3.11.v20160721.jar +0 -0
  369. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-http-9.3.11.v20160721.jar +0 -0
  370. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-infinispan-9.3.11.v20160721.jar +0 -0
  371. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-io-9.3.11.v20160721.jar +0 -0
  372. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jaas-9.3.11.v20160721.jar +0 -0
  373. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jaspi-9.3.11.v20160721.jar +0 -0
  374. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jmx-9.3.11.v20160721.jar +0 -0
  375. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-jndi-9.3.11.v20160721.jar +0 -0
  376. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-nosql-9.3.11.v20160721.jar +0 -0
  377. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-plus-9.3.11.v20160721.jar +0 -0
  378. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-proxy-9.3.11.v20160721.jar +0 -0
  379. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-quickstart-9.3.11.v20160721.jar +0 -0
  380. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-rewrite-9.3.11.v20160721.jar +0 -0
  381. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-schemas-3.1.jar +0 -0
  382. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-security-9.3.11.v20160721.jar +0 -0
  383. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-server-9.3.11.v20160721.jar +0 -0
  384. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-servlet-9.3.11.v20160721.jar +0 -0
  385. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-servlets-9.3.11.v20160721.jar +0 -0
  386. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-util-9.3.11.v20160721.jar +0 -0
  387. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-webapp-9.3.11.v20160721.jar +0 -0
  388. data/lib/rubyfox/server/data/lib/jetty/lib/jetty-xml-9.3.11.v20160721.jar +0 -0
  389. data/lib/rubyfox/server/data/lib/jetty/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar +0 -0
  390. data/lib/rubyfox/server/data/lib/jetty/lib/jndi/javax.transaction-api-1.2.jar +0 -0
  391. data/lib/rubyfox/server/data/lib/jetty/lib/monitor/jetty-monitor-9.3.11.v20160721.jar +0 -0
  392. data/lib/rubyfox/server/data/lib/jetty/lib/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar +0 -0
  393. data/lib/rubyfox/server/data/lib/jetty/lib/org.apache.taglibs.taglibs-standard-spec-1.2.5.jar +0 -0
  394. data/lib/rubyfox/server/data/lib/jetty/lib/org.eclipse.jdt.core.compiler.ecj-4.4.2.jar +0 -0
  395. data/lib/rubyfox/server/data/lib/jetty/lib/org.eclipse.jetty.apache-jsp-9.3.11.v20160721.jar +0 -0
  396. data/lib/rubyfox/server/data/lib/jetty/lib/org.mortbay.jasper.apache-el-8.0.33.jar +0 -0
  397. data/lib/rubyfox/server/data/lib/jetty/lib/org.mortbay.jasper.apache-jsp-8.0.33.jar +0 -0
  398. data/lib/rubyfox/server/data/lib/jetty/lib/servlet-api-3.1.jar +0 -0
  399. data/lib/rubyfox/server/data/lib/jetty/lib/setuid/jetty-setuid-java-1.0.3.jar +0 -0
  400. data/lib/rubyfox/server/data/lib/jetty/lib/setuid/libsetuid-linux.so +0 -0
  401. data/lib/rubyfox/server/data/lib/jetty/lib/setuid/libsetuid-osx.so +0 -0
  402. data/lib/rubyfox/server/data/lib/jetty/lib/spring/jetty-spring-9.3.11.v20160721.jar +0 -0
  403. data/lib/rubyfox/server/data/lib/jetty/lib/start.jar +0 -0
  404. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-api-9.3.11.v20160721.jar +0 -0
  405. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-client-9.3.11.v20160721.jar +0 -0
  406. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-common-9.3.11h.v20160721.jar +0 -0
  407. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-server-9.3.11.v20160721.jar +0 -0
  408. data/lib/rubyfox/server/data/lib/jetty/lib/websocket-servlet-9.3.11.v20160721.jar +0 -0
  409. data/lib/rubyfox/server/data/lib/jetty/license-eplv10-aslv20.html +0 -576
  410. data/lib/rubyfox/server/data/lib/jetty/modules/.donotdelete +0 -0
  411. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0.mod +0 -8
  412. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_05.mod +0 -8
  413. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_101.mod +0 -8
  414. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_102.mod +0 -8
  415. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_11.mod +0 -8
  416. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_20.mod +0 -8
  417. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_25.mod +0 -8
  418. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_31.mod +0 -8
  419. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_40.mod +0 -8
  420. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_45.mod +0 -8
  421. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_51.mod +0 -8
  422. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_60.mod +0 -8
  423. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_65.mod +0 -8
  424. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_66.mod +0 -8
  425. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_71.mod +0 -8
  426. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_72.mod +0 -8
  427. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_73.mod +0 -8
  428. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_74.mod +0 -8
  429. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_77.mod +0 -8
  430. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_91.mod +0 -8
  431. data/lib/rubyfox/server/data/lib/jetty/modules/alpn-impl/alpn-1.8.0_92.mod +0 -8
  432. data/lib/rubyfox/server/data/lib/jetty/modules/alpn.mod +0 -53
  433. data/lib/rubyfox/server/data/lib/jetty/modules/annotations.mod +0 -17
  434. data/lib/rubyfox/server/data/lib/jetty/modules/apache-jsp.mod +0 -10
  435. data/lib/rubyfox/server/data/lib/jetty/modules/apache-jstl.mod +0 -9
  436. data/lib/rubyfox/server/data/lib/jetty/modules/cdi.mod +0 -39
  437. data/lib/rubyfox/server/data/lib/jetty/modules/client.mod +0 -6
  438. data/lib/rubyfox/server/data/lib/jetty/modules/continuation.mod +0 -6
  439. data/lib/rubyfox/server/data/lib/jetty/modules/debug.mod +0 -29
  440. data/lib/rubyfox/server/data/lib/jetty/modules/debuglog.mod +0 -25
  441. data/lib/rubyfox/server/data/lib/jetty/modules/deploy.mod +0 -31
  442. data/lib/rubyfox/server/data/lib/jetty/modules/ext.mod +0 -11
  443. data/lib/rubyfox/server/data/lib/jetty/modules/fcgi.mod +0 -15
  444. data/lib/rubyfox/server/data/lib/jetty/modules/gcloud-memcached-sessions.mod +0 -26
  445. data/lib/rubyfox/server/data/lib/jetty/modules/gcloud-session-idmgr.mod +0 -63
  446. data/lib/rubyfox/server/data/lib/jetty/modules/gcloud-sessions.mod +0 -11
  447. data/lib/rubyfox/server/data/lib/jetty/modules/gzip.mod +0 -23
  448. data/lib/rubyfox/server/data/lib/jetty/modules/hawtio.mod +0 -28
  449. data/lib/rubyfox/server/data/lib/jetty/modules/home-base-warning.mod +0 -7
  450. data/lib/rubyfox/server/data/lib/jetty/modules/http-forwarded.mod +0 -20
  451. data/lib/rubyfox/server/data/lib/jetty/modules/http.mod +0 -39
  452. data/lib/rubyfox/server/data/lib/jetty/modules/http2.mod +0 -20
  453. data/lib/rubyfox/server/data/lib/jetty/modules/http2c.mod +0 -22
  454. data/lib/rubyfox/server/data/lib/jetty/modules/https.mod +0 -14
  455. data/lib/rubyfox/server/data/lib/jetty/modules/infinispan.mod +0 -33
  456. data/lib/rubyfox/server/data/lib/jetty/modules/ipaccess.mod +0 -9
  457. data/lib/rubyfox/server/data/lib/jetty/modules/jaas.mod +0 -17
  458. data/lib/rubyfox/server/data/lib/jetty/modules/jamon.mod +0 -31
  459. data/lib/rubyfox/server/data/lib/jetty/modules/jaspi.mod +0 -10
  460. data/lib/rubyfox/server/data/lib/jetty/modules/jdbc-sessions.mod +0 -27
  461. data/lib/rubyfox/server/data/lib/jetty/modules/jminix.mod +0 -41
  462. data/lib/rubyfox/server/data/lib/jetty/modules/jmx-remote.mod +0 -16
  463. data/lib/rubyfox/server/data/lib/jetty/modules/jmx.mod +0 -13
  464. data/lib/rubyfox/server/data/lib/jetty/modules/jndi.mod +0 -11
  465. data/lib/rubyfox/server/data/lib/jetty/modules/jolokia.mod +0 -19
  466. data/lib/rubyfox/server/data/lib/jetty/modules/jsp.mod +0 -9
  467. data/lib/rubyfox/server/data/lib/jetty/modules/jstl.mod +0 -8
  468. data/lib/rubyfox/server/data/lib/jetty/modules/jvm.mod +0 -22
  469. data/lib/rubyfox/server/data/lib/jetty/modules/logging.mod +0 -36
  470. data/lib/rubyfox/server/data/lib/jetty/modules/lowresources.mod +0 -28
  471. data/lib/rubyfox/server/data/lib/jetty/modules/monitor.mod +0 -13
  472. data/lib/rubyfox/server/data/lib/jetty/modules/nosql.mod +0 -31
  473. data/lib/rubyfox/server/data/lib/jetty/modules/plus.mod +0 -15
  474. data/lib/rubyfox/server/data/lib/jetty/modules/proxy-protocol-ssl.mod +0 -9
  475. data/lib/rubyfox/server/data/lib/jetty/modules/proxy-protocol.mod +0 -9
  476. data/lib/rubyfox/server/data/lib/jetty/modules/proxy.mod +0 -22
  477. data/lib/rubyfox/server/data/lib/jetty/modules/quickstart.mod +0 -11
  478. data/lib/rubyfox/server/data/lib/jetty/modules/requestlog.mod +0 -40
  479. data/lib/rubyfox/server/data/lib/jetty/modules/resources.mod +0 -10
  480. data/lib/rubyfox/server/data/lib/jetty/modules/rewrite-compactpath.mod +0 -10
  481. data/lib/rubyfox/server/data/lib/jetty/modules/rewrite-customizer.mod +0 -24
  482. data/lib/rubyfox/server/data/lib/jetty/modules/rewrite.mod +0 -23
  483. data/lib/rubyfox/server/data/lib/jetty/modules/security.mod +0 -9
  484. data/lib/rubyfox/server/data/lib/jetty/modules/server.mod +0 -79
  485. data/lib/rubyfox/server/data/lib/jetty/modules/servlet.mod +0 -9
  486. data/lib/rubyfox/server/data/lib/jetty/modules/servlets.mod +0 -11
  487. data/lib/rubyfox/server/data/lib/jetty/modules/setuid.mod +0 -19
  488. data/lib/rubyfox/server/data/lib/jetty/modules/spring.mod +0 -17
  489. data/lib/rubyfox/server/data/lib/jetty/modules/ssl.mod +0 -97
  490. data/lib/rubyfox/server/data/lib/jetty/modules/stats.mod +0 -9
  491. data/lib/rubyfox/server/data/lib/jetty/modules/webapp.mod +0 -10
  492. data/lib/rubyfox/server/data/lib/jetty/modules/websocket.mod +0 -12
  493. data/lib/rubyfox/server/data/lib/jetty/notice.html +0 -111
  494. data/lib/rubyfox/server/data/lib/jetty/start.d/README.TXT +0 -24
  495. data/lib/rubyfox/server/data/lib/jetty/start.d/http.ini +0 -7
  496. data/lib/rubyfox/server/data/lib/jetty/start.d/https.ini +0 -10
  497. data/lib/rubyfox/server/data/lib/jetty/start.d/ssl.ini +0 -19
  498. data/lib/rubyfox/server/data/lib/jetty/start.ini +0 -83
  499. data/lib/rubyfox/server/data/www/.keep +0 -0
  500. data/lib/rubyfox/server/data/www/HelloServlet/META-INF/context.xml +0 -2
  501. data/lib/rubyfox/server/data/www/PyServletExample/MyModule$py.class +0 -0
  502. data/lib/rubyfox/server/data/www/PyServletExample/MyModule.py +0 -5
  503. data/lib/rubyfox/server/data/www/PyServletExample/WEB-INF/web.xml +0 -37
  504. data/lib/rubyfox/server/data/www/PyServletExample/errors/404.htm +0 -20
  505. data/lib/rubyfox/server/data/www/PyServletExample/index.py +0 -42
  506. data/lib/rubyfox/server/data/www/root/admin/.keep +0 -0
  507. data/lib/rubyfox/server/data/www/root/admin/AdminTool.swf +0 -0
  508. data/lib/rubyfox/server/data/www/root/admin/ReleaseNotes.txt +0 -192
  509. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/adobeFlashPlayer.png +0 -0
  510. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/advanced.png +0 -0
  511. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/analytics.png +0 -0
  512. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/banManager.png +0 -0
  513. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bannedIPs.png +0 -0
  514. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bannedUsernames.png +0 -0
  515. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bookmarks.png +0 -0
  516. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/bootLog.png +0 -0
  517. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/buddyList.png +0 -0
  518. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/buddyProperties.png +0 -0
  519. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/connection.png +0 -0
  520. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/databaseManager.png +0 -0
  521. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/floodFilter.png +0 -0
  522. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/gameSettings.png +0 -0
  523. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/general.png +0 -0
  524. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/globalServerStatus.png +0 -0
  525. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/hTML5WebSockets.png +0 -0
  526. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/iPDiscovery.png +0 -0
  527. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/iPFilter.png +0 -0
  528. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/jVMSettings.png +0 -0
  529. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/logsDownload.png +0 -0
  530. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/mMOSettings.png +0 -0
  531. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/mailer.png +0 -0
  532. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/permissionsAndEvents.png +0 -0
  533. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/privilegeManager.png +0 -0
  534. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/remoteAdmin.png +0 -0
  535. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomExtension.png +0 -0
  536. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomVariables.png +0 -0
  537. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/roomsAndGroups.png +0 -0
  538. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeLog.png +0 -0
  539. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeRoomSettings.png +0 -0
  540. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeUserSettings.png +0 -0
  541. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/runtimeZoneSettings.png +0 -0
  542. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsApplication.png +0 -0
  543. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsDemographics.png +0 -0
  544. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsExceptions.png +0 -0
  545. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsOverview.png +0 -0
  546. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/statsTechnology.png +0 -0
  547. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/systemQueueStatus.png +0 -0
  548. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/threadPools.png +0 -0
  549. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/userManagement.png +0 -0
  550. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/userVariables.png +0 -0
  551. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/webServer.png +0 -0
  552. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/wordsFilter.png +0 -0
  553. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/zoneExtension.png +0 -0
  554. data/lib/rubyfox/server/data/www/root/admin/assets/icons/tabs/zoneTraffic.png +0 -0
  555. data/lib/rubyfox/server/data/www/root/admin/expressInstall.swf +0 -0
  556. data/lib/rubyfox/server/data/www/root/admin/index.html +0 -124
  557. data/lib/rubyfox/server/data/www/root/admin/modules/Analytics.swf +0 -0
  558. data/lib/rubyfox/server/data/www/root/admin/modules/BanManager.swf +0 -0
  559. data/lib/rubyfox/server/data/www/root/admin/modules/BlueBoxMonitor.swf +0 -0
  560. data/lib/rubyfox/server/data/www/root/admin/modules/Console.swf +0 -0
  561. data/lib/rubyfox/server/data/www/root/admin/modules/Dashboard.swf +0 -0
  562. data/lib/rubyfox/server/data/www/root/admin/modules/ExtensionManager.swf +0 -0
  563. data/lib/rubyfox/server/data/www/root/admin/modules/LicenseManager.swf +0 -0
  564. data/lib/rubyfox/server/data/www/root/admin/modules/LogViewer.swf +0 -0
  565. data/lib/rubyfox/server/data/www/root/admin/modules/ServerConfigurator.swf +0 -0
  566. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneConfigurator.swf +0 -0
  567. data/lib/rubyfox/server/data/www/root/admin/modules/ZoneMonitor.swf +0 -0
  568. data/lib/rubyfox/server/data/www/root/admin/swfobject.js +0 -4
  569. data/lib/rubyfox/server/data/www/root/examples/.keep +0 -0
  570. data/lib/rubyfox/server/data/www/sfs2x-ws.war +0 -0
  571. data/lib/rubyfox/server/data/www/sfs2x-ws.xml +0 -30
  572. data/lib/rubyfox/server/data/zones/BasicExamples.zone.xml +0 -147
@@ -0,0 +1,280 @@
1
+ /*! (c) gotoAndPlay | All rights reserved */
2
+ (window["webpackJsonpapplication"] = window["webpackJsonpapplication"] || []).push([["module-3"],{
3
+
4
+ /***/ "./src/modules/blue-box-monitor.js":
5
+ /*!*****************************************!*\
6
+ !*** ./src/modules/blue-box-monitor.js ***!
7
+ \*****************************************/
8
+ /*! exports provided: default */
9
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
10
+
11
+ "use strict";
12
+ __webpack_require__.r(__webpack_exports__);
13
+ /* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BlueBoxMonitor; });
14
+ /* harmony import */ var _base_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base-module */ "./src/modules/base-module.js");
15
+
16
+
17
+ class BlueBoxMonitor extends _base_module__WEBPACK_IMPORTED_MODULE_0__["BaseModule"]
18
+ {
19
+ constructor()
20
+ {
21
+ super('bBoxMonitor');
22
+
23
+ // Outgoing requests
24
+ this.REQ_GET_DATA = 'getData';
25
+
26
+ // Incoming responses
27
+ this.RESP_DATA = 'data';
28
+ }
29
+
30
+ //------------------------------------
31
+ // COMMON MODULE INTERFACE METHODS
32
+ // This members are used by the main controller
33
+ // to communicate with the module's controller.
34
+ //------------------------------------
35
+
36
+ initialize(idData, shellController)
37
+ {
38
+ // Call super method
39
+ super.initialize(idData, shellController);
40
+
41
+ // Initialize refresh button
42
+ $('#bbm-refreshBt').on('click', $.proxy(this._onUpdateIntervalChange, this));
43
+
44
+ // Initialize zone filter dropdown
45
+ this._zonesFilterDD = $('#bbm-zonesDD').kendoDropDownList({
46
+ change: $.proxy(this._onFilterChange, this)
47
+ }).data('kendoDropDownList');
48
+
49
+ // Initialize username filter input
50
+ $('#bbm-usernameIn').on('input', $.proxy(this._onFilterChange, this));
51
+
52
+ // Initialize clear button
53
+ $('#bbm-clearBt').on('click', $.proxy(this._onClearFilterClick, this));
54
+
55
+ // Initialize interval dropdown
56
+ this._intervalDropDown = $('#bbm-intervalDD').kendoDropDownList({
57
+ valueTemplate: '<span class="text-muted pr-1">Interval:</span><span>#:data.text#</span>',
58
+ change: $.proxy(this._onUpdateIntervalChange, this)
59
+ }).data('kendoDropDownList');
60
+
61
+ // Initialize grid
62
+ this._grid = $('#bbm-grid').kendoGrid({
63
+ scrollable: true,
64
+ sortable: true,
65
+ //resizable: true,
66
+ selectable: false,
67
+ columns:
68
+ [
69
+ {
70
+ field: 'zone',
71
+ width: 150,
72
+ title: 'Zone',
73
+ },
74
+ {
75
+ field: 'userId',
76
+ width: 100,
77
+ title: 'User ID',
78
+ },
79
+ {
80
+ field: 'userName',
81
+ width: 250,
82
+ title: 'Username',
83
+ },
84
+ {
85
+ field: 'sessionId',
86
+ width: 150,
87
+ title: 'BlueBox Session Id',
88
+ },
89
+ {
90
+ field: 'lastReq',
91
+ width: 100,
92
+ title: 'Last Request',
93
+ },
94
+ {
95
+ field: 'lastPoll',
96
+ width: 100,
97
+ title: 'Last Polling',
98
+ },
99
+ {
100
+ field: 'queueSize',
101
+ width: 100,
102
+ title: 'Queued Messages',
103
+ },
104
+ ],
105
+ noRecords: {
106
+ template: 'No BlueBox sessions.'
107
+ },
108
+ dataSource: []
109
+ }).data('kendoGrid');
110
+
111
+ // Request data to server
112
+ this._requestData();
113
+ }
114
+
115
+ destroy()
116
+ {
117
+ // Call super method
118
+ super.destroy();
119
+
120
+ $('#bbm-refreshBt').off('click');
121
+ $('#bbm-usernameIn').off('input');
122
+ $('#bbm-clearBt').off('click');
123
+
124
+ // Clear request scheduling
125
+ clearTimeout(this._requestTimer);
126
+ }
127
+
128
+ onExtensionCommand(command, data)
129
+ {
130
+ // BlueBox-ed connections data received
131
+ if (command == this.RESP_DATA)
132
+ {
133
+ let clients = data.getSFSArray('clients');
134
+ let clientsArr = [];
135
+
136
+ let zones = [];
137
+
138
+ for (let i = 0; i < clients.size(); i++)
139
+ {
140
+ let clientIn = clients.getSFSArray(i);
141
+
142
+ let client = {
143
+ zone: clientIn.getUtfString(0),
144
+ userId: clientIn.getInt(1),
145
+ userName: clientIn.getUtfString(2),
146
+ sessionId: clientIn.getUtfString(3),
147
+ lastReq: clientIn.getLong(4) + 's ago',
148
+ lastPoll: clientIn.getLong(5) + 's ago',
149
+ queueSize: clientIn.getInt(6)
150
+ }
151
+
152
+ clientsArr.push(client);
153
+
154
+ if (zones.indexOf(client.zone) < 0)
155
+ zones.push(client.zone);
156
+ }
157
+
158
+ // Sort zones list
159
+ zones.sort(function (a, b) {
160
+ return a.localeCompare(b);
161
+ });
162
+
163
+ // Add "any" zone
164
+ zones.unshift('[any]');
165
+
166
+ // Set selected zone
167
+ let selectedZone = this._zonesFilterDD.value();
168
+ let selectedIndex = zones.indexOf(selectedZone);
169
+ if (selectedIndex < 0)
170
+ selectedIndex = 0;
171
+
172
+ this._zonesFilterDD.setDataSource(zones);
173
+ this._zonesFilterDD.select(selectedIndex);
174
+
175
+ // Read current horizontal scroll value
176
+ const scrollLeft = $('.k-grid-content', this._grid.wrapper).scrollLeft();
177
+
178
+ // Substitute grid's data source, retaining current sorting
179
+ let currSort = this._grid.dataSource.sort();
180
+
181
+ let ds = new kendo.data.DataSource({
182
+ sort: currSort,
183
+ data: clientsArr
184
+ });
185
+
186
+ // Set filters
187
+ this._setFilters(ds);
188
+
189
+ // Assign data source to grid
190
+ this._grid.setDataSource(ds);
191
+
192
+ // Set horizontal scroll
193
+ $('.k-grid-content', this._grid.wrapper).scrollLeft(scrollLeft);
194
+
195
+ // Update counter
196
+ $('#bbm-totalSessions').text(clientsArr.length);
197
+ }
198
+ }
199
+
200
+ //---------------------------------
201
+ // UI EVENT LISTENERS
202
+ //---------------------------------
203
+
204
+ _onUpdateIntervalChange()
205
+ {
206
+ // Request data to server
207
+ this._requestData();
208
+ }
209
+
210
+ _onFilterChange()
211
+ {
212
+ // Set filters
213
+ this._setFilters(this._grid.dataSource);
214
+ }
215
+
216
+ _onClearFilterClick()
217
+ {
218
+ this._zonesFilterDD.select(0);
219
+ $('#bbm-usernameIn').val('');
220
+ }
221
+
222
+ //------------------------------------
223
+ // PRIVATE METHODS
224
+ //------------------------------------
225
+
226
+ /**
227
+ * Build the polling request to be sent to the server.
228
+ */
229
+ _requestData()
230
+ {
231
+ // Clear previous request scheduling
232
+ clearTimeout(this._requestTimer);
233
+
234
+ // Check if connection is still available
235
+ if (this.smartFox.isConnected)
236
+ {
237
+ // Send request to extension
238
+ this.sendExtensionRequest(this.REQ_GET_DATA);
239
+
240
+ // Schedule next request
241
+ this._requestTimer = setTimeout($.proxy(this._requestData, this), Number(this._intervalDropDown.value()) * 1000);
242
+ }
243
+ }
244
+
245
+ _setFilters(dataStore)
246
+ {
247
+ let filters = [];
248
+
249
+ // Zone filtering
250
+ if (this._zonesFilterDD.select() > 0)
251
+ filters.push({
252
+ field: 'zone', operator: 'eq', value: this._zonesFilterDD.value()
253
+ });
254
+
255
+ // Username filtering
256
+ if ($('#bbm-usernameIn').val() != '')
257
+ filters.push({
258
+ field: 'userName', operator: 'contains', value: $('#bbm-usernameIn').val()
259
+ });
260
+
261
+ // Set filters
262
+ dataStore.filter(filters);
263
+
264
+ // Update counter
265
+ $('#bbm-displayedSessions').text(dataStore.total());
266
+ }
267
+
268
+ //---------------------------------
269
+ // PRIVATE GETTERS
270
+ //---------------------------------
271
+
272
+
273
+ }
274
+
275
+ /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery")))
276
+
277
+ /***/ })
278
+
279
+ }]);
280
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2pzL2NvcmUvbW9kdWxlcy9tb2R1bGUtMy5idW5kbGUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHBsaWNhdGlvbi8uL3NyYy9tb2R1bGVzL2JsdWUtYm94LW1vbml0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlTW9kdWxlfSBmcm9tICcuL2Jhc2UtbW9kdWxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmx1ZUJveE1vbml0b3IgZXh0ZW5kcyBCYXNlTW9kdWxlXG57XG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHQgICAgc3VwZXIoJ2JCb3hNb25pdG9yJyk7XG5cblx0XHQvLyBPdXRnb2luZyByZXF1ZXN0c1xuXHRcdHRoaXMuUkVRX0dFVF9EQVRBID0gJ2dldERhdGEnO1xuXG5cdFx0Ly8gSW5jb21pbmcgcmVzcG9uc2VzXG5cdFx0dGhpcy5SRVNQX0RBVEEgPSAnZGF0YSc7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBDT01NT04gTU9EVUxFIElOVEVSRkFDRSBNRVRIT0RTXG5cdC8vIFRoaXMgbWVtYmVycyBhcmUgdXNlZCBieSB0aGUgbWFpbiBjb250cm9sbGVyXG5cdC8vIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIG1vZHVsZSdzIGNvbnRyb2xsZXIuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0aW5pdGlhbGl6ZShpZERhdGEsIHNoZWxsQ29udHJvbGxlcilcblx0e1xuXHRcdC8vIENhbGwgc3VwZXIgbWV0aG9kXG5cdFx0c3VwZXIuaW5pdGlhbGl6ZShpZERhdGEsIHNoZWxsQ29udHJvbGxlcik7XG5cblx0XHQvLyBJbml0aWFsaXplIHJlZnJlc2ggYnV0dG9uXG5cdFx0JCgnI2JibS1yZWZyZXNoQnQnKS5vbignY2xpY2snLCAkLnByb3h5KHRoaXMuX29uVXBkYXRlSW50ZXJ2YWxDaGFuZ2UsIHRoaXMpKTtcblxuXHRcdC8vIEluaXRpYWxpemUgem9uZSBmaWx0ZXIgZHJvcGRvd25cblx0XHR0aGlzLl96b25lc0ZpbHRlckREID0gJCgnI2JibS16b25lc0REJykua2VuZG9Ecm9wRG93bkxpc3Qoe1xuXHRcdFx0Y2hhbmdlOiAkLnByb3h5KHRoaXMuX29uRmlsdGVyQ2hhbmdlLCB0aGlzKVxuXHRcdH0pLmRhdGEoJ2tlbmRvRHJvcERvd25MaXN0Jyk7XG5cblx0XHQvLyBJbml0aWFsaXplIHVzZXJuYW1lIGZpbHRlciBpbnB1dFxuXHRcdCQoJyNiYm0tdXNlcm5hbWVJbicpLm9uKCdpbnB1dCcsICQucHJveHkodGhpcy5fb25GaWx0ZXJDaGFuZ2UsIHRoaXMpKTtcblxuXHRcdC8vIEluaXRpYWxpemUgY2xlYXIgYnV0dG9uXG5cdFx0JCgnI2JibS1jbGVhckJ0Jykub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLl9vbkNsZWFyRmlsdGVyQ2xpY2ssIHRoaXMpKTtcblxuXHRcdC8vIEluaXRpYWxpemUgaW50ZXJ2YWwgZHJvcGRvd25cblx0XHR0aGlzLl9pbnRlcnZhbERyb3BEb3duID0gJCgnI2JibS1pbnRlcnZhbEREJykua2VuZG9Ecm9wRG93bkxpc3Qoe1xuXHRcdFx0dmFsdWVUZW1wbGF0ZTogJzxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBwci0xXCI+SW50ZXJ2YWw6PC9zcGFuPjxzcGFuPiM6ZGF0YS50ZXh0Izwvc3Bhbj4nLFxuXHRcdFx0Y2hhbmdlOiAkLnByb3h5KHRoaXMuX29uVXBkYXRlSW50ZXJ2YWxDaGFuZ2UsIHRoaXMpXG5cdFx0fSkuZGF0YSgna2VuZG9Ecm9wRG93bkxpc3QnKTtcblxuXHRcdC8vIEluaXRpYWxpemUgZ3JpZFxuXHRcdHRoaXMuX2dyaWQgPSAkKCcjYmJtLWdyaWQnKS5rZW5kb0dyaWQoe1xuXHRcdFx0c2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0Ly9yZXNpemFibGU6IHRydWUsXG5cdFx0XHRzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbHVtbnM6XG4gICAgICAgICAgICBbXG5cdFx0XHRcdHtcblx0ICAgICAgICAgICAgICAgIGZpZWxkOiAnem9uZScsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTUwLFxuXHRcdFx0XHRcdHRpdGxlOiAnWm9uZScsXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICAgIGZpZWxkOiAndXNlcklkJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG5cdCAgICAgICAgICAgICAgICB0aXRsZTogJ1VzZXIgSUQnLFxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgICBmaWVsZDogJ3VzZXJOYW1lJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAyNTAsXG5cdCAgICAgICAgICAgICAgICB0aXRsZTogJ1VzZXJuYW1lJyxcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICdzZXNzaW9uSWQnLFxuXHQgICAgICAgICAgICAgICAgd2lkdGg6IDE1MCxcblx0ICAgICAgICAgICAgICAgIHRpdGxlOiAnQmx1ZUJveCBTZXNzaW9uIElkJyxcblx0ICAgICAgICAgICAgfSxcblx0XHRcdFx0e1xuXHQgICAgICAgICAgICAgICAgZmllbGQ6ICdsYXN0UmVxJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG5cdFx0XHRcdFx0dGl0bGU6ICdMYXN0IFJlcXVlc3QnLFxuXHQgICAgICAgICAgICB9LFxuXHRcdFx0XHR7XG5cdCAgICAgICAgICAgICAgICBmaWVsZDogJ2xhc3RQb2xsJyxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG5cdFx0XHRcdFx0dGl0bGU6ICdMYXN0IFBvbGxpbmcnLFxuXHQgICAgICAgICAgICB9LFxuXHRcdFx0XHR7XG5cdCAgICAgICAgICAgICAgICBmaWVsZDogJ3F1ZXVlU2l6ZScsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuXHRcdFx0XHRcdHRpdGxlOiAnUXVldWVkIE1lc3NhZ2VzJyxcblx0ICAgICAgICAgICAgfSxcblx0XHRcdF0sXG5cdFx0XHRub1JlY29yZHM6IHtcblx0XHRcdFx0dGVtcGxhdGU6ICdObyBCbHVlQm94IHNlc3Npb25zLidcblx0XHRcdH0sXG5cdFx0XHRkYXRhU291cmNlOiBbXVxuICAgICAgICB9KS5kYXRhKCdrZW5kb0dyaWQnKTtcblxuXHRcdC8vIFJlcXVlc3QgZGF0YSB0byBzZXJ2ZXJcblx0XHR0aGlzLl9yZXF1ZXN0RGF0YSgpO1xuXHR9XG5cblx0ZGVzdHJveSgpXG5cdHtcblx0XHQvLyBDYWxsIHN1cGVyIG1ldGhvZFxuXHRcdHN1cGVyLmRlc3Ryb3koKTtcblxuXHRcdCQoJyNiYm0tcmVmcmVzaEJ0Jykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNiYm0tdXNlcm5hbWVJbicpLm9mZignaW5wdXQnKTtcblx0XHQkKCcjYmJtLWNsZWFyQnQnKS5vZmYoJ2NsaWNrJyk7XG5cblx0XHQvLyBDbGVhciByZXF1ZXN0IHNjaGVkdWxpbmdcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fcmVxdWVzdFRpbWVyKTtcblx0fVxuXG5cdG9uRXh0ZW5zaW9uQ29tbWFuZChjb21tYW5kLCBkYXRhKVxuXHR7XG5cdFx0Ly8gQmx1ZUJveC1lZCBjb25uZWN0aW9ucyBkYXRhIHJlY2VpdmVkXG5cdFx0aWYgKGNvbW1hbmQgPT0gdGhpcy5SRVNQX0RBVEEpXG5cdFx0e1xuXHRcdFx0bGV0IGNsaWVudHMgPSBkYXRhLmdldFNGU0FycmF5KCdjbGllbnRzJyk7XG5cdFx0XHRsZXQgY2xpZW50c0FyciA9IFtdO1xuXG5cdFx0XHRsZXQgem9uZXMgPSBbXTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGllbnRzLnNpemUoKTsgaSsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgY2xpZW50SW4gPSBjbGllbnRzLmdldFNGU0FycmF5KGkpO1xuXG5cdFx0XHRcdGxldCBjbGllbnQgPSB7XG5cdFx0XHRcdFx0em9uZTogY2xpZW50SW4uZ2V0VXRmU3RyaW5nKDApLFxuXHRcdFx0XHRcdHVzZXJJZDogY2xpZW50SW4uZ2V0SW50KDEpLFxuXHRcdFx0XHRcdHVzZXJOYW1lOiBjbGllbnRJbi5nZXRVdGZTdHJpbmcoMiksXG5cdFx0XHRcdFx0c2Vzc2lvbklkOiBjbGllbnRJbi5nZXRVdGZTdHJpbmcoMyksXG5cdFx0XHRcdFx0bGFzdFJlcTogY2xpZW50SW4uZ2V0TG9uZyg0KSArICdzIGFnbycsXG5cdFx0XHRcdFx0bGFzdFBvbGw6IGNsaWVudEluLmdldExvbmcoNSkgKyAncyBhZ28nLFxuXHRcdFx0XHRcdHF1ZXVlU2l6ZTogY2xpZW50SW4uZ2V0SW50KDYpXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjbGllbnRzQXJyLnB1c2goY2xpZW50KTtcblxuXHRcdFx0XHRpZiAoem9uZXMuaW5kZXhPZihjbGllbnQuem9uZSkgPCAwKVxuXHRcdFx0XHRcdHpvbmVzLnB1c2goY2xpZW50LnpvbmUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTb3J0IHpvbmVzIGxpc3Rcblx0XHRcdHpvbmVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdFx0cmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBZGQgXCJhbnlcIiB6b25lXG5cdFx0XHR6b25lcy51bnNoaWZ0KCdbYW55XScpO1xuXG5cdFx0XHQvLyBTZXQgc2VsZWN0ZWQgem9uZVxuXHRcdFx0bGV0IHNlbGVjdGVkWm9uZSA9IHRoaXMuX3pvbmVzRmlsdGVyREQudmFsdWUoKTtcblx0XHRcdGxldCBzZWxlY3RlZEluZGV4ID0gem9uZXMuaW5kZXhPZihzZWxlY3RlZFpvbmUpO1xuXHRcdFx0aWYgKHNlbGVjdGVkSW5kZXggPCAwKVxuXHRcdFx0XHRzZWxlY3RlZEluZGV4ID0gMDtcblxuXHRcdFx0dGhpcy5fem9uZXNGaWx0ZXJERC5zZXREYXRhU291cmNlKHpvbmVzKTtcblx0XHRcdHRoaXMuX3pvbmVzRmlsdGVyREQuc2VsZWN0KHNlbGVjdGVkSW5kZXgpO1xuXG5cdFx0XHQvLyBSZWFkIGN1cnJlbnQgaG9yaXpvbnRhbCBzY3JvbGwgdmFsdWVcblx0XHRcdGNvbnN0IHNjcm9sbExlZnQgPSAkKCcuay1ncmlkLWNvbnRlbnQnLCB0aGlzLl9ncmlkLndyYXBwZXIpLnNjcm9sbExlZnQoKTtcblxuXHRcdFx0Ly8gU3Vic3RpdHV0ZSBncmlkJ3MgZGF0YSBzb3VyY2UsIHJldGFpbmluZyBjdXJyZW50IHNvcnRpbmdcblx0XHRcdGxldCBjdXJyU29ydCA9IHRoaXMuX2dyaWQuZGF0YVNvdXJjZS5zb3J0KCk7XG5cblx0XHRcdGxldCBkcyA9IG5ldyBrZW5kby5kYXRhLkRhdGFTb3VyY2Uoe1xuXHRcdFx0XHRzb3J0OiBjdXJyU29ydCxcblx0XHRcdFx0ZGF0YTogY2xpZW50c0FyclxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFNldCBmaWx0ZXJzXG5cdFx0XHR0aGlzLl9zZXRGaWx0ZXJzKGRzKTtcblxuXHRcdFx0Ly8gQXNzaWduIGRhdGEgc291cmNlIHRvIGdyaWRcblx0XHRcdHRoaXMuX2dyaWQuc2V0RGF0YVNvdXJjZShkcyk7XG5cblx0XHRcdC8vIFNldCBob3Jpem9udGFsIHNjcm9sbFxuXHRcdFx0JCgnLmstZ3JpZC1jb250ZW50JywgdGhpcy5fZ3JpZC53cmFwcGVyKS5zY3JvbGxMZWZ0KHNjcm9sbExlZnQpO1xuXG5cdFx0XHQvLyBVcGRhdGUgY291bnRlclxuXHRcdFx0JCgnI2JibS10b3RhbFNlc3Npb25zJykudGV4dChjbGllbnRzQXJyLmxlbmd0aCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gVUkgRVZFTlQgTElTVEVORVJTXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0X29uVXBkYXRlSW50ZXJ2YWxDaGFuZ2UoKVxuXHR7XG5cdFx0Ly8gUmVxdWVzdCBkYXRhIHRvIHNlcnZlclxuXHRcdHRoaXMuX3JlcXVlc3REYXRhKCk7XG5cdH1cblxuXHRfb25GaWx0ZXJDaGFuZ2UoKVxuXHR7XG5cdFx0Ly8gU2V0IGZpbHRlcnNcblx0XHR0aGlzLl9zZXRGaWx0ZXJzKHRoaXMuX2dyaWQuZGF0YVNvdXJjZSk7XG5cdH1cblxuXHRfb25DbGVhckZpbHRlckNsaWNrKClcblx0e1xuXHRcdHRoaXMuX3pvbmVzRmlsdGVyREQuc2VsZWN0KDApO1xuXHRcdCQoJyNiYm0tdXNlcm5hbWVJbicpLnZhbCgnJyk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBQUklWQVRFIE1FVEhPRFNcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHQvKipcblx0ICogQnVpbGQgdGhlIHBvbGxpbmcgcmVxdWVzdCB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRfcmVxdWVzdERhdGEoKVxuXHR7XG5cdFx0Ly8gQ2xlYXIgcHJldmlvdXMgcmVxdWVzdCBzY2hlZHVsaW5nXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3JlcXVlc3RUaW1lcik7XG5cblx0XHQvLyBDaGVjayBpZiBjb25uZWN0aW9uIGlzIHN0aWxsIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLnNtYXJ0Rm94LmlzQ29ubmVjdGVkKVxuXHRcdHtcblx0XHRcdC8vIFNlbmQgcmVxdWVzdCB0byBleHRlbnNpb25cblx0XHRcdHRoaXMuc2VuZEV4dGVuc2lvblJlcXVlc3QodGhpcy5SRVFfR0VUX0RBVEEpO1xuXG5cdFx0XHQvLyBTY2hlZHVsZSBuZXh0IHJlcXVlc3Rcblx0XHRcdHRoaXMuX3JlcXVlc3RUaW1lciA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLl9yZXF1ZXN0RGF0YSwgdGhpcyksIE51bWJlcih0aGlzLl9pbnRlcnZhbERyb3BEb3duLnZhbHVlKCkpICogMTAwMCk7XG5cdFx0fVxuXHR9XG5cblx0X3NldEZpbHRlcnMoZGF0YVN0b3JlKVxuXHR7XG5cdFx0bGV0IGZpbHRlcnMgPSBbXTtcblxuXHRcdC8vIFpvbmUgZmlsdGVyaW5nXG5cdFx0aWYgKHRoaXMuX3pvbmVzRmlsdGVyREQuc2VsZWN0KCkgPiAwKVxuXHRcdFx0ZmlsdGVycy5wdXNoKHtcblx0XHRcdFx0ZmllbGQ6ICd6b25lJywgb3BlcmF0b3I6ICdlcScsIHZhbHVlOiB0aGlzLl96b25lc0ZpbHRlckRELnZhbHVlKClcblx0XHRcdH0pO1xuXG5cdFx0Ly8gVXNlcm5hbWUgZmlsdGVyaW5nXG5cdFx0aWYgKCQoJyNiYm0tdXNlcm5hbWVJbicpLnZhbCgpICE9ICcnKVxuXHRcdFx0ZmlsdGVycy5wdXNoKHtcblx0XHRcdFx0ZmllbGQ6ICd1c2VyTmFtZScsIG9wZXJhdG9yOiAnY29udGFpbnMnLCB2YWx1ZTogJCgnI2JibS11c2VybmFtZUluJykudmFsKClcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2V0IGZpbHRlcnNcblx0XHRkYXRhU3RvcmUuZmlsdGVyKGZpbHRlcnMpO1xuXG5cdFx0Ly8gVXBkYXRlIGNvdW50ZXJcblx0XHQkKCcjYmJtLWRpc3BsYXllZFNlc3Npb25zJykudGV4dChkYXRhU3RvcmUudG90YWwoKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBQUklWQVRFIEdFVFRFUlNcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBIiwic291cmNlUm9vdCI6IiJ9
@@ -0,0 +1,1122 @@
1
+ /*! (c) gotoAndPlay | All rights reserved */
2
+ (window["webpackJsonpapplication"] = window["webpackJsonpapplication"] || []).push([["module-4"],{
3
+
4
+ /***/ "./node_modules/file-saver/dist/FileSaver.min.js":
5
+ /*!*******************************************************!*\
6
+ !*** ./node_modules/file-saver/dist/FileSaver.min.js ***!
7
+ \*******************************************************/
8
+ /*! no static exports found */
9
+ /***/ (function(module, exports, __webpack_require__) {
10
+
11
+ /* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b),
12
+ __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
13
+ (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
14
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(b,c,d){var e=new XMLHttpRequest;e.open("GET",b),e.responseType="blob",e.onload=function(){a(e.response,c,d)},e.onerror=function(){console.error("could not download file")},e.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(a,b,d,e){if(e=e||open("","_blank"),e&&(e.document.title=e.document.body.innerText="downloading..."),"string"==typeof a)return c(a,b,d);var g="application/octet-stream"===a.type,h=/constructor/i.test(f.HTMLElement)||f.safari,i=/CriOS\/[\d]+/.test(navigator.userAgent);if((i||g&&h)&&"object"==typeof FileReader){var j=new FileReader;j.onloadend=function(){var a=j.result;a=i?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),e?e.location.href=a:location=a,e=null},j.readAsDataURL(a)}else{var k=f.URL||f.webkitURL,l=k.createObjectURL(a);e?e.location=l:location.href=l,e=null,setTimeout(function(){k.revokeObjectURL(l)},4E4)}});f.saveAs=a.saveAs=a, true&&(module.exports=a)});
15
+
16
+ //# sourceMappingURL=FileSaver.min.js.map
17
+ /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
18
+
19
+ /***/ }),
20
+
21
+ /***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
22
+ /*!**************************************************!*\
23
+ !*** ./node_modules/moment/locale sync ^\.\/.*$ ***!
24
+ \**************************************************/
25
+ /*! no static exports found */
26
+ /***/ (function(module, exports, __webpack_require__) {
27
+
28
+ var map = {
29
+ "./af": "./node_modules/moment/locale/af.js",
30
+ "./af.js": "./node_modules/moment/locale/af.js",
31
+ "./ar": "./node_modules/moment/locale/ar.js",
32
+ "./ar-dz": "./node_modules/moment/locale/ar-dz.js",
33
+ "./ar-dz.js": "./node_modules/moment/locale/ar-dz.js",
34
+ "./ar-kw": "./node_modules/moment/locale/ar-kw.js",
35
+ "./ar-kw.js": "./node_modules/moment/locale/ar-kw.js",
36
+ "./ar-ly": "./node_modules/moment/locale/ar-ly.js",
37
+ "./ar-ly.js": "./node_modules/moment/locale/ar-ly.js",
38
+ "./ar-ma": "./node_modules/moment/locale/ar-ma.js",
39
+ "./ar-ma.js": "./node_modules/moment/locale/ar-ma.js",
40
+ "./ar-sa": "./node_modules/moment/locale/ar-sa.js",
41
+ "./ar-sa.js": "./node_modules/moment/locale/ar-sa.js",
42
+ "./ar-tn": "./node_modules/moment/locale/ar-tn.js",
43
+ "./ar-tn.js": "./node_modules/moment/locale/ar-tn.js",
44
+ "./ar.js": "./node_modules/moment/locale/ar.js",
45
+ "./az": "./node_modules/moment/locale/az.js",
46
+ "./az.js": "./node_modules/moment/locale/az.js",
47
+ "./be": "./node_modules/moment/locale/be.js",
48
+ "./be.js": "./node_modules/moment/locale/be.js",
49
+ "./bg": "./node_modules/moment/locale/bg.js",
50
+ "./bg.js": "./node_modules/moment/locale/bg.js",
51
+ "./bm": "./node_modules/moment/locale/bm.js",
52
+ "./bm.js": "./node_modules/moment/locale/bm.js",
53
+ "./bn": "./node_modules/moment/locale/bn.js",
54
+ "./bn.js": "./node_modules/moment/locale/bn.js",
55
+ "./bo": "./node_modules/moment/locale/bo.js",
56
+ "./bo.js": "./node_modules/moment/locale/bo.js",
57
+ "./br": "./node_modules/moment/locale/br.js",
58
+ "./br.js": "./node_modules/moment/locale/br.js",
59
+ "./bs": "./node_modules/moment/locale/bs.js",
60
+ "./bs.js": "./node_modules/moment/locale/bs.js",
61
+ "./ca": "./node_modules/moment/locale/ca.js",
62
+ "./ca.js": "./node_modules/moment/locale/ca.js",
63
+ "./cs": "./node_modules/moment/locale/cs.js",
64
+ "./cs.js": "./node_modules/moment/locale/cs.js",
65
+ "./cv": "./node_modules/moment/locale/cv.js",
66
+ "./cv.js": "./node_modules/moment/locale/cv.js",
67
+ "./cy": "./node_modules/moment/locale/cy.js",
68
+ "./cy.js": "./node_modules/moment/locale/cy.js",
69
+ "./da": "./node_modules/moment/locale/da.js",
70
+ "./da.js": "./node_modules/moment/locale/da.js",
71
+ "./de": "./node_modules/moment/locale/de.js",
72
+ "./de-at": "./node_modules/moment/locale/de-at.js",
73
+ "./de-at.js": "./node_modules/moment/locale/de-at.js",
74
+ "./de-ch": "./node_modules/moment/locale/de-ch.js",
75
+ "./de-ch.js": "./node_modules/moment/locale/de-ch.js",
76
+ "./de.js": "./node_modules/moment/locale/de.js",
77
+ "./dv": "./node_modules/moment/locale/dv.js",
78
+ "./dv.js": "./node_modules/moment/locale/dv.js",
79
+ "./el": "./node_modules/moment/locale/el.js",
80
+ "./el.js": "./node_modules/moment/locale/el.js",
81
+ "./en-SG": "./node_modules/moment/locale/en-SG.js",
82
+ "./en-SG.js": "./node_modules/moment/locale/en-SG.js",
83
+ "./en-au": "./node_modules/moment/locale/en-au.js",
84
+ "./en-au.js": "./node_modules/moment/locale/en-au.js",
85
+ "./en-ca": "./node_modules/moment/locale/en-ca.js",
86
+ "./en-ca.js": "./node_modules/moment/locale/en-ca.js",
87
+ "./en-gb": "./node_modules/moment/locale/en-gb.js",
88
+ "./en-gb.js": "./node_modules/moment/locale/en-gb.js",
89
+ "./en-ie": "./node_modules/moment/locale/en-ie.js",
90
+ "./en-ie.js": "./node_modules/moment/locale/en-ie.js",
91
+ "./en-il": "./node_modules/moment/locale/en-il.js",
92
+ "./en-il.js": "./node_modules/moment/locale/en-il.js",
93
+ "./en-nz": "./node_modules/moment/locale/en-nz.js",
94
+ "./en-nz.js": "./node_modules/moment/locale/en-nz.js",
95
+ "./eo": "./node_modules/moment/locale/eo.js",
96
+ "./eo.js": "./node_modules/moment/locale/eo.js",
97
+ "./es": "./node_modules/moment/locale/es.js",
98
+ "./es-do": "./node_modules/moment/locale/es-do.js",
99
+ "./es-do.js": "./node_modules/moment/locale/es-do.js",
100
+ "./es-us": "./node_modules/moment/locale/es-us.js",
101
+ "./es-us.js": "./node_modules/moment/locale/es-us.js",
102
+ "./es.js": "./node_modules/moment/locale/es.js",
103
+ "./et": "./node_modules/moment/locale/et.js",
104
+ "./et.js": "./node_modules/moment/locale/et.js",
105
+ "./eu": "./node_modules/moment/locale/eu.js",
106
+ "./eu.js": "./node_modules/moment/locale/eu.js",
107
+ "./fa": "./node_modules/moment/locale/fa.js",
108
+ "./fa.js": "./node_modules/moment/locale/fa.js",
109
+ "./fi": "./node_modules/moment/locale/fi.js",
110
+ "./fi.js": "./node_modules/moment/locale/fi.js",
111
+ "./fo": "./node_modules/moment/locale/fo.js",
112
+ "./fo.js": "./node_modules/moment/locale/fo.js",
113
+ "./fr": "./node_modules/moment/locale/fr.js",
114
+ "./fr-ca": "./node_modules/moment/locale/fr-ca.js",
115
+ "./fr-ca.js": "./node_modules/moment/locale/fr-ca.js",
116
+ "./fr-ch": "./node_modules/moment/locale/fr-ch.js",
117
+ "./fr-ch.js": "./node_modules/moment/locale/fr-ch.js",
118
+ "./fr.js": "./node_modules/moment/locale/fr.js",
119
+ "./fy": "./node_modules/moment/locale/fy.js",
120
+ "./fy.js": "./node_modules/moment/locale/fy.js",
121
+ "./ga": "./node_modules/moment/locale/ga.js",
122
+ "./ga.js": "./node_modules/moment/locale/ga.js",
123
+ "./gd": "./node_modules/moment/locale/gd.js",
124
+ "./gd.js": "./node_modules/moment/locale/gd.js",
125
+ "./gl": "./node_modules/moment/locale/gl.js",
126
+ "./gl.js": "./node_modules/moment/locale/gl.js",
127
+ "./gom-latn": "./node_modules/moment/locale/gom-latn.js",
128
+ "./gom-latn.js": "./node_modules/moment/locale/gom-latn.js",
129
+ "./gu": "./node_modules/moment/locale/gu.js",
130
+ "./gu.js": "./node_modules/moment/locale/gu.js",
131
+ "./he": "./node_modules/moment/locale/he.js",
132
+ "./he.js": "./node_modules/moment/locale/he.js",
133
+ "./hi": "./node_modules/moment/locale/hi.js",
134
+ "./hi.js": "./node_modules/moment/locale/hi.js",
135
+ "./hr": "./node_modules/moment/locale/hr.js",
136
+ "./hr.js": "./node_modules/moment/locale/hr.js",
137
+ "./hu": "./node_modules/moment/locale/hu.js",
138
+ "./hu.js": "./node_modules/moment/locale/hu.js",
139
+ "./hy-am": "./node_modules/moment/locale/hy-am.js",
140
+ "./hy-am.js": "./node_modules/moment/locale/hy-am.js",
141
+ "./id": "./node_modules/moment/locale/id.js",
142
+ "./id.js": "./node_modules/moment/locale/id.js",
143
+ "./is": "./node_modules/moment/locale/is.js",
144
+ "./is.js": "./node_modules/moment/locale/is.js",
145
+ "./it": "./node_modules/moment/locale/it.js",
146
+ "./it-ch": "./node_modules/moment/locale/it-ch.js",
147
+ "./it-ch.js": "./node_modules/moment/locale/it-ch.js",
148
+ "./it.js": "./node_modules/moment/locale/it.js",
149
+ "./ja": "./node_modules/moment/locale/ja.js",
150
+ "./ja.js": "./node_modules/moment/locale/ja.js",
151
+ "./jv": "./node_modules/moment/locale/jv.js",
152
+ "./jv.js": "./node_modules/moment/locale/jv.js",
153
+ "./ka": "./node_modules/moment/locale/ka.js",
154
+ "./ka.js": "./node_modules/moment/locale/ka.js",
155
+ "./kk": "./node_modules/moment/locale/kk.js",
156
+ "./kk.js": "./node_modules/moment/locale/kk.js",
157
+ "./km": "./node_modules/moment/locale/km.js",
158
+ "./km.js": "./node_modules/moment/locale/km.js",
159
+ "./kn": "./node_modules/moment/locale/kn.js",
160
+ "./kn.js": "./node_modules/moment/locale/kn.js",
161
+ "./ko": "./node_modules/moment/locale/ko.js",
162
+ "./ko.js": "./node_modules/moment/locale/ko.js",
163
+ "./ku": "./node_modules/moment/locale/ku.js",
164
+ "./ku.js": "./node_modules/moment/locale/ku.js",
165
+ "./ky": "./node_modules/moment/locale/ky.js",
166
+ "./ky.js": "./node_modules/moment/locale/ky.js",
167
+ "./lb": "./node_modules/moment/locale/lb.js",
168
+ "./lb.js": "./node_modules/moment/locale/lb.js",
169
+ "./lo": "./node_modules/moment/locale/lo.js",
170
+ "./lo.js": "./node_modules/moment/locale/lo.js",
171
+ "./lt": "./node_modules/moment/locale/lt.js",
172
+ "./lt.js": "./node_modules/moment/locale/lt.js",
173
+ "./lv": "./node_modules/moment/locale/lv.js",
174
+ "./lv.js": "./node_modules/moment/locale/lv.js",
175
+ "./me": "./node_modules/moment/locale/me.js",
176
+ "./me.js": "./node_modules/moment/locale/me.js",
177
+ "./mi": "./node_modules/moment/locale/mi.js",
178
+ "./mi.js": "./node_modules/moment/locale/mi.js",
179
+ "./mk": "./node_modules/moment/locale/mk.js",
180
+ "./mk.js": "./node_modules/moment/locale/mk.js",
181
+ "./ml": "./node_modules/moment/locale/ml.js",
182
+ "./ml.js": "./node_modules/moment/locale/ml.js",
183
+ "./mn": "./node_modules/moment/locale/mn.js",
184
+ "./mn.js": "./node_modules/moment/locale/mn.js",
185
+ "./mr": "./node_modules/moment/locale/mr.js",
186
+ "./mr.js": "./node_modules/moment/locale/mr.js",
187
+ "./ms": "./node_modules/moment/locale/ms.js",
188
+ "./ms-my": "./node_modules/moment/locale/ms-my.js",
189
+ "./ms-my.js": "./node_modules/moment/locale/ms-my.js",
190
+ "./ms.js": "./node_modules/moment/locale/ms.js",
191
+ "./mt": "./node_modules/moment/locale/mt.js",
192
+ "./mt.js": "./node_modules/moment/locale/mt.js",
193
+ "./my": "./node_modules/moment/locale/my.js",
194
+ "./my.js": "./node_modules/moment/locale/my.js",
195
+ "./nb": "./node_modules/moment/locale/nb.js",
196
+ "./nb.js": "./node_modules/moment/locale/nb.js",
197
+ "./ne": "./node_modules/moment/locale/ne.js",
198
+ "./ne.js": "./node_modules/moment/locale/ne.js",
199
+ "./nl": "./node_modules/moment/locale/nl.js",
200
+ "./nl-be": "./node_modules/moment/locale/nl-be.js",
201
+ "./nl-be.js": "./node_modules/moment/locale/nl-be.js",
202
+ "./nl.js": "./node_modules/moment/locale/nl.js",
203
+ "./nn": "./node_modules/moment/locale/nn.js",
204
+ "./nn.js": "./node_modules/moment/locale/nn.js",
205
+ "./pa-in": "./node_modules/moment/locale/pa-in.js",
206
+ "./pa-in.js": "./node_modules/moment/locale/pa-in.js",
207
+ "./pl": "./node_modules/moment/locale/pl.js",
208
+ "./pl.js": "./node_modules/moment/locale/pl.js",
209
+ "./pt": "./node_modules/moment/locale/pt.js",
210
+ "./pt-br": "./node_modules/moment/locale/pt-br.js",
211
+ "./pt-br.js": "./node_modules/moment/locale/pt-br.js",
212
+ "./pt.js": "./node_modules/moment/locale/pt.js",
213
+ "./ro": "./node_modules/moment/locale/ro.js",
214
+ "./ro.js": "./node_modules/moment/locale/ro.js",
215
+ "./ru": "./node_modules/moment/locale/ru.js",
216
+ "./ru.js": "./node_modules/moment/locale/ru.js",
217
+ "./sd": "./node_modules/moment/locale/sd.js",
218
+ "./sd.js": "./node_modules/moment/locale/sd.js",
219
+ "./se": "./node_modules/moment/locale/se.js",
220
+ "./se.js": "./node_modules/moment/locale/se.js",
221
+ "./si": "./node_modules/moment/locale/si.js",
222
+ "./si.js": "./node_modules/moment/locale/si.js",
223
+ "./sk": "./node_modules/moment/locale/sk.js",
224
+ "./sk.js": "./node_modules/moment/locale/sk.js",
225
+ "./sl": "./node_modules/moment/locale/sl.js",
226
+ "./sl.js": "./node_modules/moment/locale/sl.js",
227
+ "./sq": "./node_modules/moment/locale/sq.js",
228
+ "./sq.js": "./node_modules/moment/locale/sq.js",
229
+ "./sr": "./node_modules/moment/locale/sr.js",
230
+ "./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js",
231
+ "./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js",
232
+ "./sr.js": "./node_modules/moment/locale/sr.js",
233
+ "./ss": "./node_modules/moment/locale/ss.js",
234
+ "./ss.js": "./node_modules/moment/locale/ss.js",
235
+ "./sv": "./node_modules/moment/locale/sv.js",
236
+ "./sv.js": "./node_modules/moment/locale/sv.js",
237
+ "./sw": "./node_modules/moment/locale/sw.js",
238
+ "./sw.js": "./node_modules/moment/locale/sw.js",
239
+ "./ta": "./node_modules/moment/locale/ta.js",
240
+ "./ta.js": "./node_modules/moment/locale/ta.js",
241
+ "./te": "./node_modules/moment/locale/te.js",
242
+ "./te.js": "./node_modules/moment/locale/te.js",
243
+ "./tet": "./node_modules/moment/locale/tet.js",
244
+ "./tet.js": "./node_modules/moment/locale/tet.js",
245
+ "./tg": "./node_modules/moment/locale/tg.js",
246
+ "./tg.js": "./node_modules/moment/locale/tg.js",
247
+ "./th": "./node_modules/moment/locale/th.js",
248
+ "./th.js": "./node_modules/moment/locale/th.js",
249
+ "./tl-ph": "./node_modules/moment/locale/tl-ph.js",
250
+ "./tl-ph.js": "./node_modules/moment/locale/tl-ph.js",
251
+ "./tlh": "./node_modules/moment/locale/tlh.js",
252
+ "./tlh.js": "./node_modules/moment/locale/tlh.js",
253
+ "./tr": "./node_modules/moment/locale/tr.js",
254
+ "./tr.js": "./node_modules/moment/locale/tr.js",
255
+ "./tzl": "./node_modules/moment/locale/tzl.js",
256
+ "./tzl.js": "./node_modules/moment/locale/tzl.js",
257
+ "./tzm": "./node_modules/moment/locale/tzm.js",
258
+ "./tzm-latn": "./node_modules/moment/locale/tzm-latn.js",
259
+ "./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js",
260
+ "./tzm.js": "./node_modules/moment/locale/tzm.js",
261
+ "./ug-cn": "./node_modules/moment/locale/ug-cn.js",
262
+ "./ug-cn.js": "./node_modules/moment/locale/ug-cn.js",
263
+ "./uk": "./node_modules/moment/locale/uk.js",
264
+ "./uk.js": "./node_modules/moment/locale/uk.js",
265
+ "./ur": "./node_modules/moment/locale/ur.js",
266
+ "./ur.js": "./node_modules/moment/locale/ur.js",
267
+ "./uz": "./node_modules/moment/locale/uz.js",
268
+ "./uz-latn": "./node_modules/moment/locale/uz-latn.js",
269
+ "./uz-latn.js": "./node_modules/moment/locale/uz-latn.js",
270
+ "./uz.js": "./node_modules/moment/locale/uz.js",
271
+ "./vi": "./node_modules/moment/locale/vi.js",
272
+ "./vi.js": "./node_modules/moment/locale/vi.js",
273
+ "./x-pseudo": "./node_modules/moment/locale/x-pseudo.js",
274
+ "./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js",
275
+ "./yo": "./node_modules/moment/locale/yo.js",
276
+ "./yo.js": "./node_modules/moment/locale/yo.js",
277
+ "./zh-cn": "./node_modules/moment/locale/zh-cn.js",
278
+ "./zh-cn.js": "./node_modules/moment/locale/zh-cn.js",
279
+ "./zh-hk": "./node_modules/moment/locale/zh-hk.js",
280
+ "./zh-hk.js": "./node_modules/moment/locale/zh-hk.js",
281
+ "./zh-tw": "./node_modules/moment/locale/zh-tw.js",
282
+ "./zh-tw.js": "./node_modules/moment/locale/zh-tw.js"
283
+ };
284
+
285
+
286
+ function webpackContext(req) {
287
+ var id = webpackContextResolve(req);
288
+ return __webpack_require__(id);
289
+ }
290
+ function webpackContextResolve(req) {
291
+ if(!__webpack_require__.o(map, req)) {
292
+ var e = new Error("Cannot find module '" + req + "'");
293
+ e.code = 'MODULE_NOT_FOUND';
294
+ throw e;
295
+ }
296
+ return map[req];
297
+ }
298
+ webpackContext.keys = function webpackContextKeys() {
299
+ return Object.keys(map);
300
+ };
301
+ webpackContext.resolve = webpackContextResolve;
302
+ module.exports = webpackContext;
303
+ webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$";
304
+
305
+ /***/ }),
306
+
307
+ /***/ "./node_modules/webpack/buildin/global.js":
308
+ /*!***********************************!*\
309
+ !*** (webpack)/buildin/global.js ***!
310
+ \***********************************/
311
+ /*! no static exports found */
312
+ /***/ (function(module, exports) {
313
+
314
+ var g;
315
+
316
+ // This works in non-strict mode
317
+ g = (function() {
318
+ return this;
319
+ })();
320
+
321
+ try {
322
+ // This works if eval is allowed (see CSP)
323
+ g = g || new Function("return this")();
324
+ } catch (e) {
325
+ // This works if the window reference is available
326
+ if (typeof window === "object") g = window;
327
+ }
328
+
329
+ // g can still be undefined, but nothing to do about it...
330
+ // We return undefined, instead of nothing here, so it's
331
+ // easier to handle this case. if(!global) { ...}
332
+
333
+ module.exports = g;
334
+
335
+
336
+ /***/ }),
337
+
338
+ /***/ "./src/data/command-history.js":
339
+ /*!*************************************!*\
340
+ !*** ./src/data/command-history.js ***!
341
+ \*************************************/
342
+ /*! exports provided: CommandHistory */
343
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
344
+
345
+ "use strict";
346
+ __webpack_require__.r(__webpack_exports__);
347
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CommandHistory", function() { return CommandHistory; });
348
+ class CommandHistory
349
+ {
350
+ constructor(size = 100)
351
+ {
352
+ this._size = size;
353
+
354
+ this.clear();
355
+ this._loadState();
356
+ }
357
+
358
+ addCommand(cmd)
359
+ {
360
+ if (this._history.length >= this._size)
361
+ this._history.splice(0, 1);
362
+
363
+ this._history.push(cmd);
364
+ this._pos = this._history.length;
365
+ this._tempCmd = '';
366
+
367
+ this._saveState();
368
+ }
369
+
370
+ addTempCommand(cmd)
371
+ {
372
+ this._tempCmd = cmd;
373
+ this._pos = this._history.length;
374
+ }
375
+
376
+ rewind()
377
+ {
378
+ if (this._pos > 0)
379
+ this._pos--;
380
+
381
+ return this._history[this._pos];
382
+ }
383
+
384
+ forward()
385
+ {
386
+ if (this._pos < this._history.length)
387
+ this._pos++;
388
+
389
+ if (this._pos <= this._history.length - 1)
390
+ return this._history[this._pos];
391
+ else
392
+ return this._tempCmd;
393
+ }
394
+
395
+ getList()
396
+ {
397
+ return this._history;
398
+ }
399
+
400
+ getSize()
401
+ {
402
+ return this._history.length
403
+ }
404
+
405
+ clear()
406
+ {
407
+ this._history = [];
408
+ this._pos = 0;
409
+ this._tempCmd = '';
410
+ }
411
+
412
+ _saveState()
413
+ {
414
+ Cookies.set('console-history', {
415
+ history: this._history
416
+ }, {expires: 36000});
417
+ }
418
+
419
+ _loadState()
420
+ {
421
+ let data = Cookies.getJSON('console-history')
422
+
423
+ if (data)
424
+ {
425
+ this._history = data.history;
426
+ this._pos = this._history.length;
427
+ }
428
+ }
429
+ }
430
+
431
+
432
+ /***/ }),
433
+
434
+ /***/ "./src/modules/console.js":
435
+ /*!********************************!*\
436
+ !*** ./src/modules/console.js ***!
437
+ \********************************/
438
+ /*! exports provided: default */
439
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
440
+
441
+ "use strict";
442
+ __webpack_require__.r(__webpack_exports__);
443
+ /* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Console; });
444
+ /* harmony import */ var _base_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base-module */ "./src/modules/base-module.js");
445
+ /* harmony import */ var _data_command_history__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../data/command-history */ "./src/data/command-history.js");
446
+ /* harmony import */ var file_saver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! file-saver */ "./node_modules/file-saver/dist/FileSaver.min.js");
447
+ /* harmony import */ var file_saver__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(file_saver__WEBPACK_IMPORTED_MODULE_2__);
448
+ /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js");
449
+ /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__);
450
+ /* harmony import */ var _utils_utilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/utilities */ "./src/utils/utilities.js");
451
+
452
+
453
+
454
+
455
+
456
+
457
+ class Console extends _base_module__WEBPACK_IMPORTED_MODULE_0__["BaseModule"]
458
+ {
459
+ constructor()
460
+ {
461
+ super('console');
462
+
463
+ // Outgoing requests
464
+ this.REQ_CMD = 'cmd';
465
+ this.REQ_HINT = 'hint';
466
+ this.REQ_SCRIPT = 'script';
467
+
468
+ // Incoming responses
469
+ this.RES_CMD = 'cmd';
470
+ this.RES_HINT = 'hint';
471
+ this.RES_SCRIPT = 'script';
472
+ this.RES_ERROR_LOCKED = 'locked';
473
+
474
+ this.VERSION = '3.0.0';
475
+ this.TOKENS = ['=', 'from ', 'import '];
476
+
477
+ this.TRANSCRIPT_TEMPLATE = `
478
+ <html>
479
+ <head>
480
+ <title>SFS2X ADMIN CONSOLE Session Transcript</title>
481
+ <style type='text/css' media='screen'>
482
+ body, pre {
483
+ background-color: #333;
484
+ font-size: .8rem;
485
+ font-family: Monaco,'Courier New', monospace;
486
+ }
487
+
488
+ h3 {
489
+ color: #f8f9fa;
490
+ }
491
+
492
+ pre {
493
+ white-space: pre-wrap;
494
+ -moz-tab-size: 5;
495
+ tab-size: 5;
496
+ }
497
+
498
+ .text-console {
499
+ color: #28F32D;
500
+ }
501
+
502
+ .text-error {
503
+ color: #dc3545;
504
+ }
505
+
506
+ .text-highlight {
507
+ color: #ffc107;
508
+ }
509
+
510
+ .text-command {
511
+ color: #f8f9fa;
512
+ }
513
+ </style>
514
+ </head>
515
+ <body>
516
+ <h3><!--HEADER--></h3>
517
+ <pre><!--TRANSCRIPT--></pre>
518
+ </body>
519
+ </html>
520
+ `;
521
+
522
+ this._cmdHistory = new _data_command_history__WEBPACK_IMPORTED_MODULE_1__["CommandHistory"]();
523
+ }
524
+
525
+ //------------------------------------
526
+ // COMMON MODULE INTERFACE METHODS
527
+ // This members are used by the main controller
528
+ // to communicate with the module's controller.
529
+ //------------------------------------
530
+
531
+ initialize(idData, shellController)
532
+ {
533
+ // Call super method
534
+ super.initialize(idData, shellController);
535
+
536
+ $('#cns-input').on('keyup', $.proxy(this.onInputKeyUp, this));
537
+ $('#cns-input').on('keydown', $.proxy(this.onInputKeyDown, this));
538
+
539
+ // Show welcome message
540
+ this._showWelcomeMessage();
541
+
542
+ // Focus on prompt input
543
+ $('#cns-input').focus();
544
+
545
+ // Add global click listener to close hint panel
546
+ $(this).on('click', $.proxy(this._onGenericClick, this));
547
+
548
+ // Add global window resize listener to close hint panel
549
+ $(window).on('resize', $.proxy(this._onGenericClick, this));
550
+
551
+ // Add buttons click listeners
552
+ $('#cns-clearButton').on('click', $.proxy(this._onClearConsoleClick, this));
553
+ $('#cns-runButton').on('click', $.proxy(this._onRunScriptClick, this));
554
+ $('#cns-exportButton').on('click', $.proxy(this._onExportSessionClick, this));
555
+
556
+ // Initialize "upload script" modal
557
+ this._uploadScriptModal = $('#cns-uploadModal');
558
+ this._uploadScriptModal.modal({
559
+ backdrop: 'static',
560
+ keyboard: false,
561
+ show: false
562
+ });
563
+
564
+ // Initialize kendo uploader
565
+ this._uploader = $('#cns-uploader').kendoUpload({
566
+ allowedExtensions: ['.py'],
567
+ multiple: false,
568
+ template: function(dataItem) {
569
+ dataItem.bytesToSize = _utils_utilities__WEBPACK_IMPORTED_MODULE_4__["bytesToSize"]; // Pass bytesToSize utility function to template
570
+ return kendo.template(`
571
+ <span class='k-progress w-100'></span>
572
+ <span class="">
573
+ <span class="k-file-name" title="#=name#">#=name#</span>
574
+ <span class="k-file-size">Size: #=bytesToSize(size, 1, 'Bytes')#</span>
575
+ </span>
576
+ `)(dataItem);
577
+ },
578
+ localization: {
579
+ select: 'Select file...'
580
+ }
581
+ }).data('kendoUpload');
582
+
583
+ // Add listener to modal hide event
584
+ this._uploadScriptModal.on('hidden.bs.modal', $.proxy(this._onUploadScriptrModalHidden, this));
585
+
586
+ // Add listener to modal button
587
+ $('#cns-uploadScriptButton').on('click', $.proxy(this._onUploadScriptrButtonCLick, this));
588
+ }
589
+
590
+ destroy()
591
+ {
592
+ // Call super method
593
+ super.destroy();
594
+
595
+ $('#cns-clearButton').off('click');
596
+ $('#cns-runButton').off('click');
597
+ $('#cns-exportButton').off('click');
598
+ $('#cns-uploadScriptButton').off('click');
599
+
600
+ $(this).off('click');
601
+ $(window).off('resize');
602
+
603
+ this._uploadScriptModal.off('hidden.bs.modal');
604
+ this._uploadScriptModal.modal('dispose');
605
+ }
606
+
607
+ onExtensionCommand(command, data)
608
+ {
609
+ if (command == this.RES_CMD || command == this.RES_SCRIPT)
610
+ {
611
+ const result = data.getUtfString('r');
612
+ const error = data.getUtfString('e');
613
+
614
+ if (result != null)
615
+ this._writeConsole(result);
616
+ else if (error != null)
617
+ this._writeConsole(`<span class="text-error">ERROR</span> ${this._parseHtml(error)}`);
618
+ }
619
+
620
+ else if (command == this.RES_HINT)
621
+ {
622
+ this._lastHints = data.getUtfStringArray('h');
623
+
624
+ this._showHintPanel();
625
+ }
626
+
627
+ else if (command == this.RES_ERROR_LOCKED)
628
+ {
629
+ this._writeConsole(`<span class="text-error">ERROR</span> <span class="text-highlight">Console module is locked from server side. Please follow the instructions you were given to unlock it.</span>`);
630
+ }
631
+ }
632
+
633
+ //---------------------------------
634
+ // UI EVENT LISTENERS
635
+ //---------------------------------
636
+
637
+ onInputKeyDown(e)
638
+ {
639
+ // Save previous input value
640
+ this._prevInput = $('#cns-input').val();
641
+
642
+ const keyName = e.key;
643
+
644
+ if (keyName == 'ArrowUp' || keyName == 'ArrowDown' || keyName == 'Tab')
645
+ {
646
+ e.preventDefault();
647
+ }
648
+ }
649
+
650
+ onInputKeyUp(e)
651
+ {
652
+ const keyName = e.key;
653
+ const input = $('#cns-input').val();
654
+
655
+ // Copy input to dummy
656
+ $('#cns-input-dummy').html(input);
657
+
658
+ //--- DOT (CODE HINTING) -----------------------------------------------
659
+ if (keyName == '.')
660
+ {
661
+ // Close hint panel if open
662
+ if (this._isHintPanelOpen)
663
+ this._closeHintPanel();
664
+
665
+ // Request code hints
666
+ this._requestHints(input);
667
+ }
668
+
669
+ //--- ENTER ------------------------------------------------------------
670
+ else if (keyName == 'Enter' && input.length > 0)
671
+ {
672
+ // Get selected hint
673
+ if (this._isHintPanelOpen)
674
+ {
675
+ this._setInputOnHintSelected();
676
+ }
677
+ else
678
+ {
679
+ // Send command to server
680
+ let sfso = new SFS2X.SFSObject();
681
+ sfso.putUtfString('c', input);
682
+ this.sendExtensionRequest(this.REQ_CMD, sfso);
683
+
684
+ // Write command to console
685
+ this._writeConsole(input, true);
686
+
687
+ // Clear hints
688
+ this._lastHints = null;
689
+
690
+ // Clear input
691
+ this._clearInput();
692
+
693
+ // Add command to history
694
+ this._cmdHistory.addCommand(input);
695
+ }
696
+ }
697
+
698
+ //--- ENTER ------------------------------------------------------------
699
+ else if (keyName == 'Tab')
700
+ {
701
+ // Get selected hint
702
+ if (this._isHintPanelOpen)
703
+ {
704
+ if (this._hintPanel.find('.hint-item.selected').length > 0)
705
+ this._setInputOnHintSelected();
706
+ }
707
+ }
708
+
709
+ //--- CTRL+BACKSPACE (CLEAR CONSOLE) -----------------------------------
710
+ else if (e.ctrlKey && keyName == 'Backspace')
711
+ {
712
+ this._onClearConsoleClick();
713
+ }
714
+
715
+ //--- BACKSPACE ------------------------------------------------------
716
+ else if (keyName == 'Backspace')
717
+ {
718
+ // Check the deleted char
719
+ if (this._prevInput.substring(this._prevInput.length - 1) == '.')
720
+ {
721
+ // Reset hinting
722
+ this._resetHinting(input);
723
+ }
724
+
725
+ // Update hint panel if open
726
+ if (this._isHintPanelOpen)
727
+ this._updateHintPanel();
728
+ }
729
+
730
+ //--- ESC (CLEAR) ------------------------------------------------------
731
+ else if (keyName == 'Escape')
732
+ {
733
+ // Close hint panel if open
734
+ if (this._isHintPanelOpen)
735
+ this._closeHintPanel();
736
+
737
+ else
738
+ {
739
+ // Clear hints
740
+ this._lastHints = null;
741
+
742
+ // Clear input
743
+ this._clearInput();
744
+ }
745
+ }
746
+
747
+ //--- ARROW UP ---------------------------------------------------------
748
+ else if (keyName == 'ArrowUp')
749
+ {
750
+ // If hint panel is open, set selection
751
+ if (this._isHintPanelOpen)
752
+ {
753
+ this._currHintFocus--;
754
+
755
+ this._setHintItemSelected();
756
+ }
757
+
758
+ // Browse history
759
+ else
760
+ {
761
+ this._setInputOnHistorySelected(this._cmdHistory.rewind());
762
+ }
763
+ }
764
+
765
+ //--- ARROW DOWN -------------------------------------------------------
766
+ else if (keyName == 'ArrowDown')
767
+ {
768
+ // If hint panel is open, set selection
769
+ if (this._isHintPanelOpen)
770
+ {
771
+ this._currHintFocus++;
772
+
773
+ this._setHintItemSelected();
774
+ }
775
+
776
+ // Browse history
777
+ else
778
+ {
779
+ this._setInputOnHistorySelected(this._cmdHistory.forward());
780
+ }
781
+ }
782
+
783
+ //--- ARROW LEFT & RIGHT -----------------------------------------------
784
+ else if (keyName == 'ArrowLeft' || keyName == 'ArrowRight')
785
+ {
786
+ // Close hint panel if open
787
+ if (this._isHintPanelOpen)
788
+ this._closeHintPanel();
789
+ }
790
+
791
+ //--- ANY OTHER KEY ----------------------------------------------------
792
+ else
793
+ {
794
+ // Update temp in command history
795
+ this._cmdHistory.addTempCommand(input);
796
+
797
+ if (input.length == $('#cns-input')[0].selectionEnd)
798
+ {
799
+ // Update hint panel if open
800
+ if (this._isHintPanelOpen)
801
+ this._updateHintPanel();
802
+
803
+ // Show hint panel
804
+ else
805
+ this._showHintPanel();
806
+ }
807
+ else
808
+ {
809
+ // Reset hinting
810
+ this._resetHinting(input);
811
+ }
812
+ }
813
+ }
814
+
815
+ _onClearConsoleClick()
816
+ {
817
+ $('#cns-console').empty();
818
+ }
819
+
820
+ _onHintItemClick(e)
821
+ {
822
+ e.preventDefault();
823
+
824
+ // Set clicked item as selected
825
+ e.currentTarget.classList.add('selected');
826
+
827
+ // Set input value
828
+ this._setInputOnHintSelected();
829
+
830
+ // Focus on prompt input
831
+ $('#cns-input').focus();
832
+ }
833
+
834
+ _onGenericClick()
835
+ {
836
+ // Close hint panel if open
837
+ if (this._isHintPanelOpen)
838
+ this._closeHintPanel();
839
+ }
840
+
841
+ _onExportSessionClick()
842
+ {
843
+ let date = moment__WEBPACK_IMPORTED_MODULE_3__();
844
+
845
+ let transcript = this.TRANSCRIPT_TEMPLATE.replace('<!--HEADER-->', `Saved on ${date.format('dddd, MMMM Do YYYY, HH:mm:ss')}`);
846
+ transcript = transcript.replace('<!--TRANSCRIPT-->', $('#cns-console').html());
847
+
848
+ let blob = new Blob([transcript], {type: 'text/html;charset=utf-8'});
849
+
850
+ file_saver__WEBPACK_IMPORTED_MODULE_2__["saveAs"](blob, `ConsoleSession_${date.format('YYYYMMDD_HHmmss')}.html`);
851
+ }
852
+
853
+ _onRunScriptClick()
854
+ {
855
+ // Open modal
856
+ this._uploadScriptModal.modal('show');
857
+ }
858
+
859
+ _onUploadScriptrModalHidden()
860
+ {
861
+ // Clear uploader
862
+ this._uploader.clearAllFiles();
863
+ }
864
+
865
+ _onUploadScriptrButtonCLick()
866
+ {
867
+ if (this._uploader.getFiles().length > 0)
868
+ {
869
+ let file = this._uploader.getFiles()[0].rawFile;
870
+
871
+ file.arrayBuffer().then(buffer => {
872
+ this._writeConsole(`EXEC: ${file.name}`, true);
873
+
874
+ let sfso = new SFS2X.SFSObject();
875
+ sfso.putByteArray('script', new Uint8Array(buffer));
876
+
877
+ this.sendExtensionRequest(this.REQ_SCRIPT, sfso);
878
+ });
879
+
880
+ // Close modal
881
+ this._uploadScriptModal.modal('hide');
882
+ }
883
+ }
884
+
885
+ //------------------------------------
886
+ // PRIVATE METHODS
887
+ //------------------------------------
888
+
889
+ _showWelcomeMessage()
890
+ {
891
+ this._writeConsole(`--------------------------------------\nADMIN_CONSOLE, version ${this.VERSION}\n--------------------------------------\nType help() for assistance.\n`, false, false);
892
+ }
893
+
894
+ _clearInput()
895
+ {
896
+ $('#cns-input').val('');
897
+ $('#cns-input-dummy').html('');
898
+ }
899
+
900
+ _setInputOnHintSelected()
901
+ {
902
+ if (this._hintPanel)
903
+ {
904
+ const input = $('#cns-input').val();
905
+ const selectedVal = this._hintPanel.find('.hint-item.selected input').val();
906
+ const newInput = input.substring(0, input.lastIndexOf('.')) + '.' + selectedVal;
907
+
908
+ $('#cns-input').val(newInput);
909
+ $('#cns-input-dummy').html(newInput);
910
+
911
+ this._closeHintPanel();
912
+ }
913
+ }
914
+
915
+ _setInputOnHistorySelected(command)
916
+ {
917
+ $('#cns-input').val(command);
918
+ $('#cns-input-dummy').html(command);
919
+ }
920
+
921
+ _writeConsole(txt, isInput = false, linebreak = true)
922
+ {
923
+ let msg;
924
+
925
+ if (isInput)
926
+ msg = `<span class="text-command">&gt; ${txt}</span>`;
927
+ else
928
+ msg = `<span class="text-console">${txt}</span>`;
929
+
930
+ if (linebreak)
931
+ msg = `\n${msg}`;
932
+
933
+ // Append text to console
934
+ $('#cns-console').append(msg);
935
+
936
+ // scroll console to bottom
937
+ $('#cns-console').scrollTop(function() { return this.scrollHeight; });
938
+ }
939
+
940
+ _parseHtml(ss)
941
+ {
942
+ ss = ss.replace('<', '&lt;');
943
+ ss = ss.replace('>', '&gt;');
944
+
945
+ return ss;
946
+ }
947
+
948
+ _showHintPanel()
949
+ {
950
+ if (this._lastHints != null && this._lastHints.length > 0)
951
+ {
952
+ this._currHintFocus = -1;
953
+
954
+ // Create panel
955
+ this._hintPanel = $('<div>', {'class': 'hint-panel'});
956
+ $(this).append(this._hintPanel);
957
+
958
+ // Show hints
959
+ this._updateHintPanel();
960
+ }
961
+ }
962
+
963
+ _closeHintPanel()
964
+ {
965
+ this._hintPanel.remove();
966
+ this._hintPanel = null;
967
+ }
968
+
969
+ _updateHintPanel()
970
+ {
971
+ if (this._lastHints != null && this._lastHints.length > 0)
972
+ {
973
+ // Clear hints panel
974
+ this._hintPanel.empty();
975
+
976
+ const dotIndex = $('#cns-input').val().lastIndexOf('.');
977
+ let lastWord = '';
978
+
979
+ if (dotIndex > -1)
980
+ lastWord = $('#cns-input').val().substr(dotIndex + 1, $('#cns-input').val().length);
981
+
982
+ let isEmpty = true;
983
+
984
+ for (let word of this._lastHints)
985
+ {
986
+ // Check if the item starts with the same letters as the input's last word
987
+ if (lastWord == '' || word.substr(0, lastWord.length).toUpperCase() == lastWord.toUpperCase())
988
+ {
989
+ // Create div
990
+ let item = $('<div>', {'class': 'hint-item'});
991
+
992
+ // Show value, and make the matching letters bold
993
+ item.append(`<strong>${word.substr(0, lastWord.length)}</strong>${word.substr(lastWord.length)}`);
994
+
995
+ // Insert an input field that will hold the current item's value
996
+ item.append(`<input type="hidden" value="${word}">`);
997
+
998
+ // Add click listener
999
+ item.on('click', $.proxy(this._onHintItemClick, this));
1000
+
1001
+ this._hintPanel.append(item);
1002
+
1003
+ isEmpty = false;
1004
+ }
1005
+ }
1006
+
1007
+ // If panel is empty, rmove it
1008
+ if (isEmpty)
1009
+ this._closeHintPanel();
1010
+
1011
+ // Else set panel position
1012
+ else
1013
+ {
1014
+ const extContPos = $('#cns-input-container-2').position();
1015
+ const intContPos = $('#cns-input-container-1').position();
1016
+
1017
+ let left = extContPos.left + intContPos.left + $('#cns-input-dummy').outerWidth();
1018
+ let top = extContPos.top + intContPos.top - this._hintPanel.outerHeight();
1019
+
1020
+ if (left > window.innerWidth - this._hintPanel.outerWidth())
1021
+ left = window.innerWidth - this._hintPanel.outerWidth();
1022
+
1023
+ this._hintPanel.css({top: top, left: left, position: 'absolute'});
1024
+ }
1025
+ }
1026
+ }
1027
+
1028
+ _requestHints(input)
1029
+ {
1030
+ // Clear previous hints
1031
+ this._lastHints = null;
1032
+
1033
+ // Parse input
1034
+ let hintParent = this._extractHintParent(input);
1035
+
1036
+ // Request code hint
1037
+ let params = new SFS2X.SFSObject();
1038
+ params.putUtfString('c', hintParent);
1039
+
1040
+ this.sendExtensionRequest(this.REQ_HINT, params);
1041
+ }
1042
+
1043
+ _extractHintParent(inVal)
1044
+ {
1045
+ let outVal = null;
1046
+
1047
+ for (let tok of this.TOKENS)
1048
+ {
1049
+ const p = inVal.indexOf(tok);
1050
+
1051
+ if (p > -1)
1052
+ {
1053
+ outVal = inVal.substring(p + tok.length, inVal.length).trim();
1054
+ break;
1055
+ }
1056
+ }
1057
+
1058
+ if (outVal == null)
1059
+ outVal = inVal;
1060
+
1061
+ // Remove dot at the end if needed
1062
+ if (outVal.endsWith('.'))
1063
+ outVal = outVal.substr(0, outVal.length - 1);
1064
+
1065
+ return outVal;
1066
+ }
1067
+
1068
+ _setHintItemSelected()
1069
+ {
1070
+ let items = this._hintPanel.find('.hint-item');
1071
+ items.removeClass('selected');
1072
+
1073
+ if (this._currHintFocus >= items.length)
1074
+ this._currHintFocus = 0;
1075
+
1076
+ if (this._currHintFocus < 0)
1077
+ this._currHintFocus = items.length - 1;
1078
+
1079
+ let item = items.eq(this._currHintFocus);
1080
+ item.addClass('selected');
1081
+
1082
+ // Scroll to item
1083
+ this._hintPanel.scrollTop(this._hintPanel.scrollTop() + item.position().top);
1084
+ }
1085
+
1086
+ _resetHinting(input)
1087
+ {
1088
+ // Close hint panel
1089
+ if (this._isHintPanelOpen)
1090
+ this._closeHintPanel();
1091
+
1092
+ // Clear hints
1093
+ this._lastHints = null;
1094
+
1095
+ // Get previous word
1096
+ const dotIndex = input.lastIndexOf('.');
1097
+
1098
+ if (dotIndex > -1)
1099
+ {
1100
+ let value = input.substring(0, dotIndex);
1101
+
1102
+ // Request code hints
1103
+ this._requestHints(value);
1104
+ }
1105
+ }
1106
+
1107
+ //---------------------------------
1108
+ // PRIVATE GETTERS
1109
+ //---------------------------------
1110
+
1111
+ get _isHintPanelOpen()
1112
+ {
1113
+ return this._hintPanel != null;
1114
+ }
1115
+ }
1116
+
1117
+ /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery")))
1118
+
1119
+ /***/ })
1120
+
1121
+ }]);
1122
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2pzL2NvcmUvbW9kdWxlcy9tb2R1bGUtNC5idW5kbGUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHBsaWNhdGlvbi8uL25vZGVfbW9kdWxlcy9maWxlLXNhdmVyL2Rpc3QvRmlsZVNhdmVyLm1pbi5qcyIsIndlYnBhY2s6Ly9hcHBsaWNhdGlvbi8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vYXBwbGljYXRpb24vLi9zcmMvZGF0YS9jb21tYW5kLWhpc3RvcnkuanMiLCJ3ZWJwYWNrOi8vYXBwbGljYXRpb24vLi9zcmMvbW9kdWxlcy9jb25zb2xlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbihhLGIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyliKCk7ZWxzZXtiKCksYS5GaWxlU2F2ZXI9e2V4cG9ydHM6e319LmV4cG9ydHN9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhiLGMsZCl7dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O2Uub3BlbihcIkdFVFwiLGIpLGUucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGUub25sb2FkPWZ1bmN0aW9uKCl7YShlLnJlc3BvbnNlLGMsZCl9LGUub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZS5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWw/Z2xvYmFsOnZvaWQgMCxhPWYuc2F2ZUFzfHwoXCJvYmplY3RcIiE9dHlwZW9mIHdpbmRvd3x8d2luZG93IT09Zj9mdW5jdGlvbigpe306XCJkb3dubG9hZFwiaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlP2Z1bmN0aW9uKGIsZyxoKXt2YXIgaT1mLlVSTHx8Zi53ZWJraXRVUkwsaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtnPWd8fGIubmFtZXx8XCJkb3dubG9hZFwiLGouZG93bmxvYWQ9ZyxqLnJlbD1cIm5vb3BlbmVyXCIsXCJzdHJpbmdcIj09dHlwZW9mIGI/KGouaHJlZj1iLGoub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP2Uoaik6ZChqLmhyZWYpP2MoYixnLGgpOmUoaixqLnRhcmdldD1cIl9ibGFua1wiKSk6KGouaHJlZj1pLmNyZWF0ZU9iamVjdFVSTChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5yZXZva2VPYmplY3RVUkwoai5ocmVmKX0sNEU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShqKX0sMCkpfTpcIm1zU2F2ZU9yT3BlbkJsb2JcImluIG5hdmlnYXRvcj9mdW5jdGlvbihmLGcsaCl7aWYoZz1nfHxmLm5hbWV8fFwiZG93bmxvYWRcIixcInN0cmluZ1wiIT10eXBlb2YgZiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiKGYsaCksZyk7ZWxzZSBpZihkKGYpKWMoZixnLGgpO2Vsc2V7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aS5ocmVmPWYsaS50YXJnZXQ9XCJfYmxhbmtcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpKX0pfX06ZnVuY3Rpb24oYSxiLGQsZSl7aWYoZT1lfHxvcGVuKFwiXCIsXCJfYmxhbmtcIiksZSYmKGUuZG9jdW1lbnQudGl0bGU9ZS5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1cImRvd25sb2FkaW5nLi4uXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBhKXJldHVybiBjKGEsYixkKTt2YXIgZz1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiPT09YS50eXBlLGg9L2NvbnN0cnVjdG9yL2kudGVzdChmLkhUTUxFbGVtZW50KXx8Zi5zYWZhcmksaT0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoKGl8fGcmJmgpJiZcIm9iamVjdFwiPT10eXBlb2YgRmlsZVJlYWRlcil7dmFyIGo9bmV3IEZpbGVSZWFkZXI7ai5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYT1qLnJlc3VsdDthPWk/YTphLnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksZT9lLmxvY2F0aW9uLmhyZWY9YTpsb2NhdGlvbj1hLGU9bnVsbH0sai5yZWFkQXNEYXRhVVJMKGEpfWVsc2V7dmFyIGs9Zi5VUkx8fGYud2Via2l0VVJMLGw9ay5jcmVhdGVPYmplY3RVUkwoYSk7ZT9lLmxvY2F0aW9uPWw6bG9jYXRpb24uaHJlZj1sLGU9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ay5yZXZva2VPYmplY3RVUkwobCl9LDRFNCl9fSk7Zi5zYXZlQXM9YS5zYXZlQXM9YSxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9YSl9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZVNhdmVyLm1pbi5qcy5tYXAiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJleHBvcnQgY2xhc3MgQ29tbWFuZEhpc3Rvcnlcbntcblx0Y29uc3RydWN0b3Ioc2l6ZSA9IDEwMClcblx0e1xuXHRcdHRoaXMuX3NpemUgPSBzaXplO1xuXG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdHRoaXMuX2xvYWRTdGF0ZSgpO1xuXHR9XG5cblx0YWRkQ29tbWFuZChjbWQpXG5cdHtcblx0XHRpZiAodGhpcy5faGlzdG9yeS5sZW5ndGggPj0gdGhpcy5fc2l6ZSlcblx0XHRcdHRoaXMuX2hpc3Rvcnkuc3BsaWNlKDAsIDEpO1xuXG5cdFx0dGhpcy5faGlzdG9yeS5wdXNoKGNtZCk7XG5cdFx0dGhpcy5fcG9zID0gdGhpcy5faGlzdG9yeS5sZW5ndGg7XG5cdFx0dGhpcy5fdGVtcENtZCA9ICcnO1xuXG5cdFx0dGhpcy5fc2F2ZVN0YXRlKCk7XG5cdH1cblxuXHRhZGRUZW1wQ29tbWFuZChjbWQpXG5cdHtcblx0XHR0aGlzLl90ZW1wQ21kID0gY21kO1xuXHRcdHRoaXMuX3BvcyA9IHRoaXMuX2hpc3RvcnkubGVuZ3RoO1xuXHR9XG5cblx0cmV3aW5kKClcblx0e1xuXHRcdGlmICh0aGlzLl9wb3MgPiAwKVxuXHRcdFx0dGhpcy5fcG9zLS07XG5cblx0XHRyZXR1cm4gdGhpcy5faGlzdG9yeVt0aGlzLl9wb3NdO1xuXHR9XG5cblx0Zm9yd2FyZCgpXG5cdHtcblx0XHRpZiAodGhpcy5fcG9zIDwgdGhpcy5faGlzdG9yeS5sZW5ndGgpXG5cdFx0XHR0aGlzLl9wb3MrKztcblxuXHRcdGlmICh0aGlzLl9wb3MgPD0gdGhpcy5faGlzdG9yeS5sZW5ndGggLSAxKVxuXHRcdFx0cmV0dXJuIHRoaXMuX2hpc3RvcnlbdGhpcy5fcG9zXTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcENtZDtcblx0fVxuXG5cdGdldExpc3QoKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2hpc3Rvcnk7XG5cdH1cblxuXHRnZXRTaXplKClcblx0e1xuXHRcdHJldHVybiB0aGlzLl9oaXN0b3J5Lmxlbmd0aFxuXHR9XG5cblx0Y2xlYXIoKVxuXHR7XG5cdFx0dGhpcy5faGlzdG9yeSA9IFtdO1xuXHRcdHRoaXMuX3BvcyA9IDA7XG5cdFx0dGhpcy5fdGVtcENtZCA9ICcnO1xuXHR9XG5cblx0X3NhdmVTdGF0ZSgpXG5cdHtcblx0XHRDb29raWVzLnNldCgnY29uc29sZS1oaXN0b3J5Jywge1xuXHRcdFx0aGlzdG9yeTogdGhpcy5faGlzdG9yeVxuXHRcdH0sIHtleHBpcmVzOiAzNjAwMH0pO1xuXHR9XG5cblx0X2xvYWRTdGF0ZSgpXG5cdHtcblx0XHRsZXQgZGF0YSA9IENvb2tpZXMuZ2V0SlNPTignY29uc29sZS1oaXN0b3J5JylcblxuXHRcdGlmIChkYXRhKVxuXHRcdHtcblx0XHRcdHRoaXMuX2hpc3RvcnkgPSBkYXRhLmhpc3Rvcnk7XG5cdFx0XHR0aGlzLl9wb3MgPSB0aGlzLl9oaXN0b3J5Lmxlbmd0aDtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7QmFzZU1vZHVsZX0gZnJvbSAnLi9iYXNlLW1vZHVsZSc7XG5pbXBvcnQge0NvbW1hbmRIaXN0b3J5fSBmcm9tICcuLi9kYXRhL2NvbW1hbmQtaGlzdG9yeSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7Ynl0ZXNUb1NpemV9IGZyb20gJy4uL3V0aWxzL3V0aWxpdGllcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGUgZXh0ZW5kcyBCYXNlTW9kdWxlXG57XG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHQgICAgc3VwZXIoJ2NvbnNvbGUnKTtcblxuXHRcdC8vIE91dGdvaW5nIHJlcXVlc3RzXG5cdFx0dGhpcy5SRVFfQ01EID0gJ2NtZCc7XG5cdFx0dGhpcy5SRVFfSElOVCA9ICdoaW50Jztcblx0XHR0aGlzLlJFUV9TQ1JJUFQgPSAnc2NyaXB0JztcblxuXHRcdC8vIEluY29taW5nIHJlc3BvbnNlc1xuXHRcdHRoaXMuUkVTX0NNRCA9ICdjbWQnO1xuXHRcdHRoaXMuUkVTX0hJTlQgPSAnaGludCc7XG5cdFx0dGhpcy5SRVNfU0NSSVBUID0gJ3NjcmlwdCc7XG5cdFx0dGhpcy5SRVNfRVJST1JfTE9DS0VEID0gJ2xvY2tlZCc7XG5cblx0XHR0aGlzLlZFUlNJT04gPSAnMy4wLjAnO1xuXHRcdHRoaXMuVE9LRU5TID0gWyc9JywgJ2Zyb20gJywgJ2ltcG9ydCAnXTtcblxuXHRcdHRoaXMuVFJBTlNDUklQVF9URU1QTEFURSA9IGBcblx0XHQ8aHRtbD5cblx0XHQ8aGVhZD5cblx0XHRcdDx0aXRsZT5TRlMyWCBBRE1JTiBDT05TT0xFIFNlc3Npb24gVHJhbnNjcmlwdDwvdGl0bGU+XG5cdFx0XHQ8c3R5bGUgdHlwZT0ndGV4dC9jc3MnIG1lZGlhPSdzY3JlZW4nPlxuXHRcdFx0XHRib2R5LCBwcmUge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAuOHJlbTtcblx0XHRcdFx0XHRmb250LWZhbWlseTogTW9uYWNvLCdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGgzIHtcblx0XHRcdFx0XHRjb2xvcjogI2Y4ZjlmYTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByZSB7XG5cdFx0XHRcdFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xuXHRcdFx0XHRcdC1tb3otdGFiLXNpemU6IDU7XG5cdFx0XHRcdFx0dGFiLXNpemU6IDU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQudGV4dC1jb25zb2xlIHtcblx0XHRcdFx0XHRjb2xvcjogIzI4RjMyRDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC50ZXh0LWVycm9yIHtcblx0XHRcdFx0XHRjb2xvcjogI2RjMzU0NTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC50ZXh0LWhpZ2hsaWdodCB7XG5cdFx0XHRcdFx0Y29sb3I6ICNmZmMxMDc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQudGV4dC1jb21tYW5kIHtcblx0XHRcdFx0XHRjb2xvcjogI2Y4ZjlmYTtcblx0XHRcdFx0fVxuXHRcdFx0PC9zdHlsZT5cblx0XHQ8L2hlYWQ+XG5cdFx0PGJvZHk+XG5cdFx0XHQ8aDM+PCEtLUhFQURFUi0tPjwvaDM+XG5cdFx0XHQ8cHJlPjwhLS1UUkFOU0NSSVBULS0+PC9wcmU+XG5cdFx0PC9ib2R5PlxuXHRcdDwvaHRtbD5cblx0XHRgO1xuXG5cdFx0dGhpcy5fY21kSGlzdG9yeSA9IG5ldyBDb21tYW5kSGlzdG9yeSgpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gQ09NTU9OIE1PRFVMRSBJTlRFUkZBQ0UgTUVUSE9EU1xuXHQvLyBUaGlzIG1lbWJlcnMgYXJlIHVzZWQgYnkgdGhlIG1haW4gY29udHJvbGxlclxuXHQvLyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtb2R1bGUncyBjb250cm9sbGVyLlxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdGluaXRpYWxpemUoaWREYXRhLCBzaGVsbENvbnRyb2xsZXIpXG5cdHtcblx0XHQvLyBDYWxsIHN1cGVyIG1ldGhvZFxuXHRcdHN1cGVyLmluaXRpYWxpemUoaWREYXRhLCBzaGVsbENvbnRyb2xsZXIpO1xuXG5cdFx0JCgnI2Nucy1pbnB1dCcpLm9uKCdrZXl1cCcsICQucHJveHkodGhpcy5vbklucHV0S2V5VXAsIHRoaXMpKTtcblx0XHQkKCcjY25zLWlucHV0Jykub24oJ2tleWRvd24nLCAkLnByb3h5KHRoaXMub25JbnB1dEtleURvd24sIHRoaXMpKTtcblxuXHRcdC8vIFNob3cgd2VsY29tZSBtZXNzYWdlXG5cdFx0dGhpcy5fc2hvd1dlbGNvbWVNZXNzYWdlKCk7XG5cblx0XHQvLyBGb2N1cyBvbiBwcm9tcHQgaW5wdXRcblx0XHQkKCcjY25zLWlucHV0JykuZm9jdXMoKTtcblxuXHRcdC8vIEFkZCBnbG9iYWwgY2xpY2sgbGlzdGVuZXIgdG8gY2xvc2UgaGludCBwYW5lbFxuXHRcdCQodGhpcykub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLl9vbkdlbmVyaWNDbGljaywgdGhpcykpO1xuXG5cdFx0Ly8gQWRkIGdsb2JhbCB3aW5kb3cgcmVzaXplIGxpc3RlbmVyIHRvIGNsb3NlIGhpbnQgcGFuZWxcblx0XHQkKHdpbmRvdykub24oJ3Jlc2l6ZScsICQucHJveHkodGhpcy5fb25HZW5lcmljQ2xpY2ssIHRoaXMpKTtcblxuXHRcdC8vIEFkZCBidXR0b25zIGNsaWNrIGxpc3RlbmVyc1xuXHRcdCQoJyNjbnMtY2xlYXJCdXR0b24nKS5vbignY2xpY2snLCAkLnByb3h5KHRoaXMuX29uQ2xlYXJDb25zb2xlQ2xpY2ssIHRoaXMpKTtcblx0XHQkKCcjY25zLXJ1bkJ1dHRvbicpLm9uKCdjbGljaycsICQucHJveHkodGhpcy5fb25SdW5TY3JpcHRDbGljaywgdGhpcykpO1xuXHRcdCQoJyNjbnMtZXhwb3J0QnV0dG9uJykub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLl9vbkV4cG9ydFNlc3Npb25DbGljaywgdGhpcykpO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBcInVwbG9hZCBzY3JpcHRcIiBtb2RhbFxuXHRcdHRoaXMuX3VwbG9hZFNjcmlwdE1vZGFsID0gJCgnI2Nucy11cGxvYWRNb2RhbCcpO1xuXHRcdHRoaXMuX3VwbG9hZFNjcmlwdE1vZGFsLm1vZGFsKHtcblx0XHRcdGJhY2tkcm9wOiAnc3RhdGljJyxcblx0XHRcdGtleWJvYXJkOiBmYWxzZSxcblx0XHRcdHNob3c6IGZhbHNlXG5cdFx0fSk7XG5cblx0XHQvLyBJbml0aWFsaXplIGtlbmRvIHVwbG9hZGVyXG5cdFx0dGhpcy5fdXBsb2FkZXIgPSAkKCcjY25zLXVwbG9hZGVyJykua2VuZG9VcGxvYWQoe1xuXHRcdFx0YWxsb3dlZEV4dGVuc2lvbnM6IFsnLnB5J10sXG5cdFx0XHRtdWx0aXBsZTogZmFsc2UsXG5cdFx0XHR0ZW1wbGF0ZTogZnVuY3Rpb24oZGF0YUl0ZW0pIHtcblx0XHRcdFx0ZGF0YUl0ZW0uYnl0ZXNUb1NpemUgPSBieXRlc1RvU2l6ZTsgLy8gUGFzcyBieXRlc1RvU2l6ZSB1dGlsaXR5IGZ1bmN0aW9uIHRvIHRlbXBsYXRlXG5cdFx0XHRcdHJldHVybiBrZW5kby50ZW1wbGF0ZShgXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9J2stcHJvZ3Jlc3Mgdy0xMDAnPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIlwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJrLWZpbGUtbmFtZVwiIHRpdGxlPVwiIz1uYW1lI1wiPiM9bmFtZSM8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImstZmlsZS1zaXplXCI+U2l6ZTogIz1ieXRlc1RvU2l6ZShzaXplLCAxLCAnQnl0ZXMnKSM8L3NwYW4+XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRgKShkYXRhSXRlbSk7XG5cdFx0XHR9LFxuXHQgICAgICAgIGxvY2FsaXphdGlvbjoge1xuXHQgICAgICAgICAgICBzZWxlY3Q6ICdTZWxlY3QgZmlsZS4uLidcblx0ICAgICAgICB9XG5cdFx0fSkuZGF0YSgna2VuZG9VcGxvYWQnKTtcblxuXHRcdC8vIEFkZCBsaXN0ZW5lciB0byBtb2RhbCBoaWRlIGV2ZW50XG5cdFx0dGhpcy5fdXBsb2FkU2NyaXB0TW9kYWwub24oJ2hpZGRlbi5icy5tb2RhbCcsICQucHJveHkodGhpcy5fb25VcGxvYWRTY3JpcHRyTW9kYWxIaWRkZW4sIHRoaXMpKTtcblxuXHRcdC8vIEFkZCBsaXN0ZW5lciB0byBtb2RhbCBidXR0b25cblx0XHQkKCcjY25zLXVwbG9hZFNjcmlwdEJ1dHRvbicpLm9uKCdjbGljaycsICQucHJveHkodGhpcy5fb25VcGxvYWRTY3JpcHRyQnV0dG9uQ0xpY2ssIHRoaXMpKTtcblx0fVxuXG5cdGRlc3Ryb3koKVxuXHR7XG5cdFx0Ly8gQ2FsbCBzdXBlciBtZXRob2Rcblx0XHRzdXBlci5kZXN0cm95KCk7XG5cblx0XHQkKCcjY25zLWNsZWFyQnV0dG9uJykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNjbnMtcnVuQnV0dG9uJykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNjbnMtZXhwb3J0QnV0dG9uJykub2ZmKCdjbGljaycpO1xuXHRcdCQoJyNjbnMtdXBsb2FkU2NyaXB0QnV0dG9uJykub2ZmKCdjbGljaycpO1xuXG5cdFx0JCh0aGlzKS5vZmYoJ2NsaWNrJyk7XG5cdFx0JCh3aW5kb3cpLm9mZigncmVzaXplJyk7XG5cblx0XHR0aGlzLl91cGxvYWRTY3JpcHRNb2RhbC5vZmYoJ2hpZGRlbi5icy5tb2RhbCcpO1xuXHRcdHRoaXMuX3VwbG9hZFNjcmlwdE1vZGFsLm1vZGFsKCdkaXNwb3NlJyk7XG5cdH1cblxuXHRvbkV4dGVuc2lvbkNvbW1hbmQoY29tbWFuZCwgZGF0YSlcblx0e1xuXHRcdGlmIChjb21tYW5kID09IHRoaXMuUkVTX0NNRCB8fCBjb21tYW5kID09IHRoaXMuUkVTX1NDUklQVClcblx0XHR7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkYXRhLmdldFV0ZlN0cmluZygncicpO1xuXHRcdFx0Y29uc3QgZXJyb3IgPSBkYXRhLmdldFV0ZlN0cmluZygnZScpO1xuXG5cdFx0XHRpZiAocmVzdWx0ICE9IG51bGwpXG5cdFx0XHRcdHRoaXMuX3dyaXRlQ29uc29sZShyZXN1bHQpO1xuXHRcdFx0ZWxzZSBpZiAoZXJyb3IgIT0gbnVsbClcblx0XHRcdFx0dGhpcy5fd3JpdGVDb25zb2xlKGA8c3BhbiBjbGFzcz1cInRleHQtZXJyb3JcIj5FUlJPUjwvc3Bhbj4gJHt0aGlzLl9wYXJzZUh0bWwoZXJyb3IpfWApO1xuXHRcdH1cblxuXHRcdGVsc2UgaWYgKGNvbW1hbmQgPT0gdGhpcy5SRVNfSElOVClcblx0XHR7XG5cdFx0XHR0aGlzLl9sYXN0SGludHMgPSBkYXRhLmdldFV0ZlN0cmluZ0FycmF5KCdoJyk7XG5cblx0XHRcdHRoaXMuX3Nob3dIaW50UGFuZWwoKTtcblx0XHR9XG5cblx0XHRlbHNlIGlmIChjb21tYW5kID09IHRoaXMuUkVTX0VSUk9SX0xPQ0tFRClcblx0XHR7XG5cdFx0XHR0aGlzLl93cml0ZUNvbnNvbGUoYDxzcGFuIGNsYXNzPVwidGV4dC1lcnJvclwiPkVSUk9SPC9zcGFuPiA8c3BhbiBjbGFzcz1cInRleHQtaGlnaGxpZ2h0XCI+Q29uc29sZSBtb2R1bGUgaXMgbG9ja2VkIGZyb20gc2VydmVyIHNpZGUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyB5b3Ugd2VyZSBnaXZlbiB0byB1bmxvY2sgaXQuPC9zcGFuPmApO1xuXHRcdH1cblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIFVJIEVWRU5UIExJU1RFTkVSU1xuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdG9uSW5wdXRLZXlEb3duKGUpXG5cdHtcblx0XHQvLyBTYXZlIHByZXZpb3VzIGlucHV0IHZhbHVlXG5cdFx0dGhpcy5fcHJldklucHV0ID0gJCgnI2Nucy1pbnB1dCcpLnZhbCgpO1xuXG5cdFx0Y29uc3Qga2V5TmFtZSA9IGUua2V5O1xuXG5cdFx0aWYgKGtleU5hbWUgPT0gJ0Fycm93VXAnIHx8IGtleU5hbWUgPT0gJ0Fycm93RG93bicgfHwga2V5TmFtZSA9PSAnVGFiJylcblx0XHR7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0b25JbnB1dEtleVVwKGUpXG5cdHtcblx0XHRjb25zdCBrZXlOYW1lID0gZS5rZXk7XG5cdFx0Y29uc3QgaW5wdXQgPSAkKCcjY25zLWlucHV0JykudmFsKCk7XG5cblx0XHQvLyBDb3B5IGlucHV0IHRvIGR1bW15XG5cdFx0JCgnI2Nucy1pbnB1dC1kdW1teScpLmh0bWwoaW5wdXQpO1xuXG5cdFx0Ly8tLS0gRE9UIChDT0RFIEhJTlRJTkcpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0aWYgKGtleU5hbWUgPT0gJy4nKVxuXHRcdHtcblx0XHRcdC8vIENsb3NlIGhpbnQgcGFuZWwgaWYgb3BlblxuXHRcdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdFx0dGhpcy5fY2xvc2VIaW50UGFuZWwoKTtcblxuXHRcdFx0Ly8gUmVxdWVzdCBjb2RlIGhpbnRzXG5cdFx0XHR0aGlzLl9yZXF1ZXN0SGludHMoaW5wdXQpO1xuXHRcdH1cblxuXHRcdC8vLS0tIEVOVEVSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdGVsc2UgaWZcdChrZXlOYW1lID09ICdFbnRlcicgJiYgaW5wdXQubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHQvLyBHZXQgc2VsZWN0ZWQgaGludFxuXHRcdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5fc2V0SW5wdXRPbkhpbnRTZWxlY3RlZCgpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQvLyBTZW5kIGNvbW1hbmQgdG8gc2VydmVyXG5cdFx0XHRcdGxldCBzZnNvID0gbmV3IFNGUzJYLlNGU09iamVjdCgpO1xuXHRcdFx0XHRzZnNvLnB1dFV0ZlN0cmluZygnYycsIGlucHV0KTtcblx0XHRcdFx0dGhpcy5zZW5kRXh0ZW5zaW9uUmVxdWVzdCh0aGlzLlJFUV9DTUQsIHNmc28pO1xuXG5cdFx0XHRcdC8vIFdyaXRlIGNvbW1hbmQgdG8gY29uc29sZVxuXHRcdFx0XHR0aGlzLl93cml0ZUNvbnNvbGUoaW5wdXQsIHRydWUpO1xuXG5cdFx0XHRcdC8vIENsZWFyIGhpbnRzXG5cdFx0XHRcdHRoaXMuX2xhc3RIaW50cyA9IG51bGw7XG5cblx0XHRcdFx0Ly8gQ2xlYXIgaW5wdXRcblx0XHRcdFx0dGhpcy5fY2xlYXJJbnB1dCgpO1xuXG5cdFx0XHRcdC8vIEFkZCBjb21tYW5kIHRvIGhpc3Rvcnlcblx0XHRcdFx0dGhpcy5fY21kSGlzdG9yeS5hZGRDb21tYW5kKGlucHV0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLy0tLSBFTlRFUiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRlbHNlIGlmXHQoa2V5TmFtZSA9PSAnVGFiJylcblx0XHR7XG5cdFx0XHQvLyBHZXQgc2VsZWN0ZWQgaGludFxuXHRcdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdHtcblx0XHRcdFx0aWYgKHRoaXMuX2hpbnRQYW5lbC5maW5kKCcuaGludC1pdGVtLnNlbGVjdGVkJykubGVuZ3RoID4gMClcblx0XHRcdFx0XHR0aGlzLl9zZXRJbnB1dE9uSGludFNlbGVjdGVkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8tLS0gQ1RSTCtCQUNLU1BBQ0UgKENMRUFSIENPTlNPTEUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0ZWxzZSBpZiAoZS5jdHJsS2V5ICYmIGtleU5hbWUgPT0gJ0JhY2tzcGFjZScpXG5cdFx0e1xuXHRcdFx0dGhpcy5fb25DbGVhckNvbnNvbGVDbGljaygpO1xuXHRcdH1cblxuXHRcdC8vLS0tIEJBQ0tTUEFDRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRlbHNlIGlmIChrZXlOYW1lID09ICdCYWNrc3BhY2UnKVxuXHRcdHtcblx0XHRcdC8vIENoZWNrIHRoZSBkZWxldGVkIGNoYXJcblx0XHRcdGlmICh0aGlzLl9wcmV2SW5wdXQuc3Vic3RyaW5nKHRoaXMuX3ByZXZJbnB1dC5sZW5ndGggLSAxKSA9PSAnLicpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFJlc2V0IGhpbnRpbmdcblx0XHRcdFx0dGhpcy5fcmVzZXRIaW50aW5nKGlucHV0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXBkYXRlIGhpbnQgcGFuZWwgaWYgb3BlblxuXHRcdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdFx0dGhpcy5fdXBkYXRlSGludFBhbmVsKCk7XG5cdFx0fVxuXG5cdFx0Ly8tLS0gRVNDIChDTEVBUikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0ZWxzZSBpZiAoa2V5TmFtZSA9PSAnRXNjYXBlJylcblx0XHR7XG5cdFx0XHQvLyBDbG9zZSBoaW50IHBhbmVsIGlmIG9wZW5cblx0XHRcdGlmICh0aGlzLl9pc0hpbnRQYW5lbE9wZW4pXG5cdFx0XHRcdHRoaXMuX2Nsb3NlSGludFBhbmVsKCk7XG5cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0Ly8gQ2xlYXIgaGludHNcblx0XHRcdFx0dGhpcy5fbGFzdEhpbnRzID0gbnVsbDtcblxuXHRcdFx0XHQvLyBDbGVhciBpbnB1dFxuXHRcdFx0XHR0aGlzLl9jbGVhcklucHV0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8tLS0gQVJST1cgVVAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdFx0ZWxzZSBpZiAoa2V5TmFtZSA9PSAnQXJyb3dVcCcpXG5cdFx0e1xuXHRcdFx0Ly8gSWYgaGludCBwYW5lbCBpcyBvcGVuLCBzZXQgc2VsZWN0aW9uXG5cdFx0XHRpZiAodGhpcy5faXNIaW50UGFuZWxPcGVuKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9jdXJySGludEZvY3VzLS07XG5cblx0XHRcdFx0dGhpcy5fc2V0SGludEl0ZW1TZWxlY3RlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCcm93c2UgaGlzdG9yeVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9zZXRJbnB1dE9uSGlzdG9yeVNlbGVjdGVkKHRoaXMuX2NtZEhpc3RvcnkucmV3aW5kKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vLS0tIEFSUk9XIERPV04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRcdGVsc2UgaWYgKGtleU5hbWUgPT0gJ0Fycm93RG93bicpXG5cdFx0e1xuXHRcdFx0Ly8gSWYgaGludCBwYW5lbCBpcyBvcGVuLCBzZXQgc2VsZWN0aW9uXG5cdFx0XHRpZiAodGhpcy5faXNIaW50UGFuZWxPcGVuKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9jdXJySGludEZvY3VzKys7XG5cblx0XHRcdFx0dGhpcy5fc2V0SGludEl0ZW1TZWxlY3RlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCcm93c2UgaGlzdG9yeVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9zZXRJbnB1dE9uSGlzdG9yeVNlbGVjdGVkKHRoaXMuX2NtZEhpc3RvcnkuZm9yd2FyZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLy0tLSBBUlJPVyBMRUZUICYgUklHSFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRlbHNlIGlmIChrZXlOYW1lID09ICdBcnJvd0xlZnQnIHx8IGtleU5hbWUgPT0gJ0Fycm93UmlnaHQnKVxuXHRcdHtcblx0XHRcdC8vIENsb3NlIGhpbnQgcGFuZWwgaWYgb3BlblxuXHRcdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdFx0dGhpcy5fY2xvc2VIaW50UGFuZWwoKTtcblx0XHR9XG5cblx0XHQvLy0tLSBBTlkgT1RIRVIgS0VZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gVXBkYXRlIHRlbXAgaW4gY29tbWFuZCBoaXN0b3J5XG5cdFx0XHR0aGlzLl9jbWRIaXN0b3J5LmFkZFRlbXBDb21tYW5kKGlucHV0KTtcblxuXHRcdFx0aWYgKGlucHV0Lmxlbmd0aCA9PSAkKCcjY25zLWlucHV0JylbMF0uc2VsZWN0aW9uRW5kKVxuXHRcdFx0e1xuXHRcdFx0XHQvLyBVcGRhdGUgaGludCBwYW5lbCBpZiBvcGVuXG5cdFx0XHRcdGlmICh0aGlzLl9pc0hpbnRQYW5lbE9wZW4pXG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlSGludFBhbmVsKCk7XG5cblx0XHRcdFx0Ly8gU2hvdyBoaW50IHBhbmVsXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0aGlzLl9zaG93SGludFBhbmVsKCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFJlc2V0IGhpbnRpbmdcblx0XHRcdFx0dGhpcy5fcmVzZXRIaW50aW5nKGlucHV0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfb25DbGVhckNvbnNvbGVDbGljaygpXG5cdHtcblx0XHQkKCcjY25zLWNvbnNvbGUnKS5lbXB0eSgpO1xuXHR9XG5cblx0X29uSGludEl0ZW1DbGljayhlKVxuXHR7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Ly8gU2V0IGNsaWNrZWQgaXRlbSBhcyBzZWxlY3RlZFxuXHRcdGUuY3VycmVudFRhcmdldC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuXG5cdFx0Ly8gU2V0IGlucHV0IHZhbHVlXG5cdFx0dGhpcy5fc2V0SW5wdXRPbkhpbnRTZWxlY3RlZCgpO1xuXG5cdFx0Ly8gRm9jdXMgb24gcHJvbXB0IGlucHV0XG5cdFx0JCgnI2Nucy1pbnB1dCcpLmZvY3VzKCk7XG5cdH1cblxuXHRfb25HZW5lcmljQ2xpY2soKVxuXHR7XG5cdFx0Ly8gQ2xvc2UgaGludCBwYW5lbCBpZiBvcGVuXG5cdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdHRoaXMuX2Nsb3NlSGludFBhbmVsKCk7XG5cdH1cblxuXHRfb25FeHBvcnRTZXNzaW9uQ2xpY2soKVxuXHR7XG5cdFx0bGV0IGRhdGUgPSBtb21lbnQoKTtcblxuXHRcdGxldCB0cmFuc2NyaXB0ID0gdGhpcy5UUkFOU0NSSVBUX1RFTVBMQVRFLnJlcGxhY2UoJzwhLS1IRUFERVItLT4nLCBgU2F2ZWQgb24gJHtkYXRlLmZvcm1hdCgnZGRkZCwgTU1NTSBEbyBZWVlZLCBISDptbTpzcycpfWApO1xuXHRcdHRyYW5zY3JpcHQgPSB0cmFuc2NyaXB0LnJlcGxhY2UoJzwhLS1UUkFOU0NSSVBULS0+JywgJCgnI2Nucy1jb25zb2xlJykuaHRtbCgpKTtcblxuXHRcdGxldCBibG9iID0gbmV3IEJsb2IoW3RyYW5zY3JpcHRdLCB7dHlwZTogJ3RleHQvaHRtbDtjaGFyc2V0PXV0Zi04J30pO1xuXG5cdFx0RmlsZVNhdmVyLnNhdmVBcyhibG9iLCBgQ29uc29sZVNlc3Npb25fJHtkYXRlLmZvcm1hdCgnWVlZWU1NRERfSEhtbXNzJyl9Lmh0bWxgKTtcblx0fVxuXG5cdF9vblJ1blNjcmlwdENsaWNrKClcblx0e1xuXHRcdC8vIE9wZW4gbW9kYWxcblx0XHR0aGlzLl91cGxvYWRTY3JpcHRNb2RhbC5tb2RhbCgnc2hvdycpO1xuXHR9XG5cblx0X29uVXBsb2FkU2NyaXB0ck1vZGFsSGlkZGVuKClcblx0e1xuXHRcdC8vIENsZWFyIHVwbG9hZGVyXG5cdFx0dGhpcy5fdXBsb2FkZXIuY2xlYXJBbGxGaWxlcygpO1xuXHR9XG5cblx0X29uVXBsb2FkU2NyaXB0ckJ1dHRvbkNMaWNrKClcblx0e1xuXHRcdGlmICh0aGlzLl91cGxvYWRlci5nZXRGaWxlcygpLmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0bGV0IGZpbGUgPSB0aGlzLl91cGxvYWRlci5nZXRGaWxlcygpWzBdLnJhd0ZpbGU7XG5cblx0XHRcdGZpbGUuYXJyYXlCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XG5cdFx0XHRcdHRoaXMuX3dyaXRlQ29uc29sZShgRVhFQzogJHtmaWxlLm5hbWV9YCwgdHJ1ZSk7XG5cblx0XHRcdFx0bGV0IHNmc28gPSBuZXcgU0ZTMlguU0ZTT2JqZWN0KCk7XG5cdFx0XHRcdHNmc28ucHV0Qnl0ZUFycmF5KCdzY3JpcHQnLCBuZXcgVWludDhBcnJheShidWZmZXIpKTtcblxuXHRcdFx0XHR0aGlzLnNlbmRFeHRlbnNpb25SZXF1ZXN0KHRoaXMuUkVRX1NDUklQVCwgc2Zzbyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ2xvc2UgbW9kYWxcblx0XHRcdHRoaXMuX3VwbG9hZFNjcmlwdE1vZGFsLm1vZGFsKCdoaWRlJyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gUFJJVkFURSBNRVRIT0RTXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0X3Nob3dXZWxjb21lTWVzc2FnZSgpXG5cdHtcblx0XHR0aGlzLl93cml0ZUNvbnNvbGUoYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQURNSU5fQ09OU09MRSwgdmVyc2lvbiAke3RoaXMuVkVSU0lPTn1cXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblR5cGUgaGVscCgpIGZvciBhc3Npc3RhbmNlLlxcbmAsIGZhbHNlLCBmYWxzZSk7XG5cdH1cblxuXHRfY2xlYXJJbnB1dCgpXG5cdHtcblx0XHQkKCcjY25zLWlucHV0JykudmFsKCcnKTtcblx0XHQkKCcjY25zLWlucHV0LWR1bW15JykuaHRtbCgnJyk7XG5cdH1cblxuXHRfc2V0SW5wdXRPbkhpbnRTZWxlY3RlZCgpXG5cdHtcblx0XHRpZiAodGhpcy5faGludFBhbmVsKVxuXHRcdHtcblx0XHRcdGNvbnN0IGlucHV0ID0gJCgnI2Nucy1pbnB1dCcpLnZhbCgpO1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRWYWwgPSB0aGlzLl9oaW50UGFuZWwuZmluZCgnLmhpbnQtaXRlbS5zZWxlY3RlZCBpbnB1dCcpLnZhbCgpO1xuXHRcdFx0Y29uc3QgbmV3SW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQubGFzdEluZGV4T2YoJy4nKSkgKyAnLicgKyBzZWxlY3RlZFZhbDtcblxuXHRcdFx0JCgnI2Nucy1pbnB1dCcpLnZhbChuZXdJbnB1dCk7XG5cdFx0XHQkKCcjY25zLWlucHV0LWR1bW15JykuaHRtbChuZXdJbnB1dCk7XG5cblx0XHRcdHRoaXMuX2Nsb3NlSGludFBhbmVsKCk7XG5cdFx0fVxuXHR9XG5cblx0X3NldElucHV0T25IaXN0b3J5U2VsZWN0ZWQoY29tbWFuZClcblx0e1xuXHRcdCQoJyNjbnMtaW5wdXQnKS52YWwoY29tbWFuZCk7XG5cdFx0JCgnI2Nucy1pbnB1dC1kdW1teScpLmh0bWwoY29tbWFuZCk7XG5cdH1cblxuXHRfd3JpdGVDb25zb2xlKHR4dCwgaXNJbnB1dCA9IGZhbHNlLCBsaW5lYnJlYWsgPSB0cnVlKVxuXHR7XG5cdFx0bGV0IG1zZztcblxuXHRcdGlmIChpc0lucHV0KVxuXHRcdFx0bXNnID0gYDxzcGFuIGNsYXNzPVwidGV4dC1jb21tYW5kXCI+Jmd0OyAke3R4dH08L3NwYW4+YDtcblx0XHRlbHNlXG5cdFx0XHRtc2cgPSBgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNvbnNvbGVcIj4ke3R4dH08L3NwYW4+YDtcblxuXHRcdGlmIChsaW5lYnJlYWspXG5cdFx0XHRtc2cgPSBgXFxuJHttc2d9YDtcblxuXHRcdC8vIEFwcGVuZCB0ZXh0IHRvIGNvbnNvbGVcblx0XHQkKCcjY25zLWNvbnNvbGUnKS5hcHBlbmQobXNnKTtcblxuXHRcdC8vIHNjcm9sbCBjb25zb2xlIHRvIGJvdHRvbVxuXHRcdCQoJyNjbnMtY29uc29sZScpLnNjcm9sbFRvcChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2Nyb2xsSGVpZ2h0OyB9KTtcblx0fVxuXG5cdF9wYXJzZUh0bWwoc3MpXG5cdHtcblx0XHRzcyA9IHNzLnJlcGxhY2UoJzwnLCAnJmx0OycpO1xuXHRcdHNzID0gc3MucmVwbGFjZSgnPicsICcmZ3Q7Jyk7XG5cblx0XHRyZXR1cm4gc3M7XG5cdH1cblxuXHRfc2hvd0hpbnRQYW5lbCgpXG5cdHtcblx0XHRpZiAodGhpcy5fbGFzdEhpbnRzICE9IG51bGwgJiYgdGhpcy5fbGFzdEhpbnRzLmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0dGhpcy5fY3VyckhpbnRGb2N1cyA9IC0xO1xuXG5cdFx0XHQvLyBDcmVhdGUgcGFuZWxcblx0XHRcdHRoaXMuX2hpbnRQYW5lbCA9ICQoJzxkaXY+JywgeydjbGFzcyc6ICdoaW50LXBhbmVsJ30pO1xuXHRcdFx0JCh0aGlzKS5hcHBlbmQodGhpcy5faGludFBhbmVsKTtcblxuXHRcdFx0Ly8gU2hvdyBoaW50c1xuXHRcdFx0dGhpcy5fdXBkYXRlSGludFBhbmVsKCk7XG5cdFx0fVxuXHR9XG5cblx0X2Nsb3NlSGludFBhbmVsKClcblx0e1xuXHRcdHRoaXMuX2hpbnRQYW5lbC5yZW1vdmUoKTtcblx0XHR0aGlzLl9oaW50UGFuZWwgPSBudWxsO1xuXHR9XG5cblx0X3VwZGF0ZUhpbnRQYW5lbCgpXG5cdHtcblx0XHRpZiAodGhpcy5fbGFzdEhpbnRzICE9IG51bGwgJiYgdGhpcy5fbGFzdEhpbnRzLmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0Ly8gQ2xlYXIgaGludHMgcGFuZWxcblx0XHRcdHRoaXMuX2hpbnRQYW5lbC5lbXB0eSgpO1xuXG5cdFx0XHRjb25zdCBkb3RJbmRleCA9ICQoJyNjbnMtaW5wdXQnKS52YWwoKS5sYXN0SW5kZXhPZignLicpO1xuXHRcdFx0bGV0IGxhc3RXb3JkID0gJyc7XG5cblx0XHRcdGlmIChkb3RJbmRleCA+IC0xKVxuXHRcdFx0XHRsYXN0V29yZCA9ICQoJyNjbnMtaW5wdXQnKS52YWwoKS5zdWJzdHIoZG90SW5kZXggKyAxLCAkKCcjY25zLWlucHV0JykudmFsKCkubGVuZ3RoKTtcblxuXHRcdFx0bGV0IGlzRW1wdHkgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGxldCB3b3JkIG9mIHRoaXMuX2xhc3RIaW50cylcblx0XHRcdHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGl0ZW0gc3RhcnRzIHdpdGggdGhlIHNhbWUgbGV0dGVycyBhcyB0aGUgaW5wdXQncyBsYXN0IHdvcmRcblx0XHRcdFx0aWYgKGxhc3RXb3JkID09ICcnIHx8IHdvcmQuc3Vic3RyKDAsIGxhc3RXb3JkLmxlbmd0aCkudG9VcHBlckNhc2UoKSA9PSBsYXN0V29yZC50b1VwcGVyQ2FzZSgpKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGRpdlxuXHRcdFx0XHRcdGxldCBpdGVtID0gJCgnPGRpdj4nLCB7J2NsYXNzJzogJ2hpbnQtaXRlbSd9KTtcblxuXHRcdFx0XHRcdC8vIFNob3cgdmFsdWUsIGFuZCBtYWtlIHRoZSBtYXRjaGluZyBsZXR0ZXJzIGJvbGRcblx0XHRcdFx0XHRpdGVtLmFwcGVuZChgPHN0cm9uZz4ke3dvcmQuc3Vic3RyKDAsIGxhc3RXb3JkLmxlbmd0aCl9PC9zdHJvbmc+JHt3b3JkLnN1YnN0cihsYXN0V29yZC5sZW5ndGgpfWApO1xuXG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IGFuIGlucHV0IGZpZWxkIHRoYXQgd2lsbCBob2xkIHRoZSBjdXJyZW50IGl0ZW0ncyB2YWx1ZVxuXHRcdFx0XHRcdGl0ZW0uYXBwZW5kKGA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHZhbHVlPVwiJHt3b3JkfVwiPmApO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIGNsaWNrIGxpc3RlbmVyXG5cdFx0XHRcdFx0aXRlbS5vbignY2xpY2snLCAkLnByb3h5KHRoaXMuX29uSGludEl0ZW1DbGljaywgdGhpcykpO1xuXG5cdFx0XHRcdFx0dGhpcy5faGludFBhbmVsLmFwcGVuZChpdGVtKTtcblxuXHRcdFx0XHRcdGlzRW1wdHkgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBwYW5lbCBpcyBlbXB0eSwgcm1vdmUgaXRcblx0XHRcdGlmIChpc0VtcHR5KVxuXHRcdFx0XHR0aGlzLl9jbG9zZUhpbnRQYW5lbCgpO1xuXG5cdFx0XHQvLyBFbHNlIHNldCBwYW5lbCBwb3NpdGlvblxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRjb25zdCBleHRDb250UG9zID0gJCgnI2Nucy1pbnB1dC1jb250YWluZXItMicpLnBvc2l0aW9uKCk7XG5cdFx0XHRcdGNvbnN0IGludENvbnRQb3MgPSAkKCcjY25zLWlucHV0LWNvbnRhaW5lci0xJykucG9zaXRpb24oKTtcblxuXHRcdFx0XHRsZXQgbGVmdCA9IGV4dENvbnRQb3MubGVmdCArIGludENvbnRQb3MubGVmdCArICQoJyNjbnMtaW5wdXQtZHVtbXknKS5vdXRlcldpZHRoKCk7XG5cdFx0XHRcdGxldCB0b3AgPSBleHRDb250UG9zLnRvcCArIGludENvbnRQb3MudG9wIC0gdGhpcy5faGludFBhbmVsLm91dGVySGVpZ2h0KCk7XG5cblx0XHRcdFx0aWYgKGxlZnQgPiB3aW5kb3cuaW5uZXJXaWR0aCAtIHRoaXMuX2hpbnRQYW5lbC5vdXRlcldpZHRoKCkpXG5cdFx0XHRcdFx0bGVmdCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdGhpcy5faGludFBhbmVsLm91dGVyV2lkdGgoKTtcblxuXHRcdFx0XHR0aGlzLl9oaW50UGFuZWwuY3NzKHt0b3A6IHRvcCwgbGVmdDogbGVmdCwgcG9zaXRpb246ICdhYnNvbHV0ZSd9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfcmVxdWVzdEhpbnRzKGlucHV0KVxuXHR7XG5cdFx0Ly8gQ2xlYXIgcHJldmlvdXMgaGludHNcblx0XHR0aGlzLl9sYXN0SGludHMgPSBudWxsO1xuXG5cdFx0Ly8gUGFyc2UgaW5wdXRcblx0XHRsZXQgaGludFBhcmVudCA9IHRoaXMuX2V4dHJhY3RIaW50UGFyZW50KGlucHV0KTtcblx0XHRcblx0XHQvLyBSZXF1ZXN0IGNvZGUgaGludFxuXHRcdGxldCBwYXJhbXMgPSBuZXcgU0ZTMlguU0ZTT2JqZWN0KCk7XG5cdFx0cGFyYW1zLnB1dFV0ZlN0cmluZygnYycsIGhpbnRQYXJlbnQpO1xuXG5cdFx0dGhpcy5zZW5kRXh0ZW5zaW9uUmVxdWVzdCh0aGlzLlJFUV9ISU5ULCBwYXJhbXMpO1xuXHR9XG5cblx0X2V4dHJhY3RIaW50UGFyZW50KGluVmFsKVxuXHR7XG5cdFx0bGV0IG91dFZhbCA9IG51bGw7XG5cblx0XHRmb3IgKGxldCB0b2sgb2YgdGhpcy5UT0tFTlMpXG5cdFx0e1xuXHRcdFx0Y29uc3QgcCA9IGluVmFsLmluZGV4T2YodG9rKTtcblxuXHRcdFx0aWYgKHAgPiAtMSlcblx0XHRcdHtcblx0XHRcdFx0b3V0VmFsID0gaW5WYWwuc3Vic3RyaW5nKHAgKyB0b2subGVuZ3RoLCBpblZhbC5sZW5ndGgpLnRyaW0oKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG91dFZhbCA9PSBudWxsKVxuXHRcdFx0b3V0VmFsID0gaW5WYWw7XG5cblx0XHQvLyBSZW1vdmUgZG90IGF0IHRoZSBlbmQgaWYgbmVlZGVkXG5cdFx0aWYgKG91dFZhbC5lbmRzV2l0aCgnLicpKVxuXHRcdFx0b3V0VmFsID0gb3V0VmFsLnN1YnN0cigwLCBvdXRWYWwubGVuZ3RoIC0gMSk7XG5cblx0XHRyZXR1cm4gb3V0VmFsO1xuXHR9XG5cblx0X3NldEhpbnRJdGVtU2VsZWN0ZWQoKVxuXHR7XG5cdFx0bGV0IGl0ZW1zID0gdGhpcy5faGludFBhbmVsLmZpbmQoJy5oaW50LWl0ZW0nKTtcblx0XHRpdGVtcy5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblxuXHRcdGlmICh0aGlzLl9jdXJySGludEZvY3VzID49IGl0ZW1zLmxlbmd0aClcblx0XHRcdHRoaXMuX2N1cnJIaW50Rm9jdXMgPSAwO1xuXG4gICAgXHRpZiAodGhpcy5fY3VyckhpbnRGb2N1cyA8IDApXG5cdFx0XHR0aGlzLl9jdXJySGludEZvY3VzID0gaXRlbXMubGVuZ3RoIC0gMTtcblxuXHRcdGxldCBpdGVtID0gaXRlbXMuZXEodGhpcy5fY3VyckhpbnRGb2N1cyk7XG5cdFx0aXRlbS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcblxuXHRcdC8vIFNjcm9sbCB0byBpdGVtXG5cdFx0dGhpcy5faGludFBhbmVsLnNjcm9sbFRvcCh0aGlzLl9oaW50UGFuZWwuc2Nyb2xsVG9wKCkgKyBpdGVtLnBvc2l0aW9uKCkudG9wKTtcblx0fVxuXG5cdF9yZXNldEhpbnRpbmcoaW5wdXQpXG5cdHtcblx0XHQvLyBDbG9zZSBoaW50IHBhbmVsXG5cdFx0aWYgKHRoaXMuX2lzSGludFBhbmVsT3Blbilcblx0XHRcdHRoaXMuX2Nsb3NlSGludFBhbmVsKCk7XG5cblx0XHQvLyBDbGVhciBoaW50c1xuXHRcdHRoaXMuX2xhc3RIaW50cyA9IG51bGw7XG5cblx0XHQvLyBHZXQgcHJldmlvdXMgd29yZFxuXHRcdGNvbnN0IGRvdEluZGV4ID0gaW5wdXQubGFzdEluZGV4T2YoJy4nKTtcblxuXHRcdGlmIChkb3RJbmRleCA+IC0xKVxuXHRcdHtcblx0XHRcdGxldCB2YWx1ZSA9IGlucHV0LnN1YnN0cmluZygwLCBkb3RJbmRleCk7XG5cblx0XHRcdC8vIFJlcXVlc3QgY29kZSBoaW50c1xuXHRcdFx0dGhpcy5fcmVxdWVzdEhpbnRzKHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBQUklWQVRFIEdFVFRFUlNcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRnZXQgX2lzSGludFBhbmVsT3BlbigpXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faGludFBhbmVsICE9IG51bGw7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDakZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBIiwic291cmNlUm9vdCI6IiJ9