buttplug 1.0.16 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1290) hide show
  1. package/.eslintrc +13 -0
  2. package/.github/FUNDING.yml +5 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +17 -0
  4. package/.jscsrc +3 -0
  5. package/.jshintrc +6 -0
  6. package/.yarn/cache/@ampproject-remapping-npm-2.2.0-114878fa50-d74d170d06.zip +0 -0
  7. package/.yarn/cache/@babel-code-frame-npm-7.18.6-25229a7e34-195e2be317.zip +0 -0
  8. package/.yarn/cache/@babel-compat-data-npm-7.20.10-b619ecdaef-6ed6c1bb6f.zip +0 -0
  9. package/.yarn/cache/@babel-core-npm-7.20.7-85252019f6-f2714f15db.zip +0 -0
  10. package/.yarn/cache/@babel-generator-npm-7.18.2-0f6d05ed9c-d0661e9553.zip +0 -0
  11. package/.yarn/cache/@babel-generator-npm-7.20.7-6446968b78-84b6983ffd.zip +0 -0
  12. package/.yarn/cache/@babel-helper-compilation-targets-npm-7.20.7-fbd2fdfc71-8c32c873ba.zip +0 -0
  13. package/.yarn/cache/@babel-helper-environment-visitor-npm-7.18.9-9f5b3635a1-b25101f616.zip +0 -0
  14. package/.yarn/cache/@babel-helper-function-name-npm-7.19.0-5bcf55236f-eac1f5db42.zip +0 -0
  15. package/.yarn/cache/@babel-helper-hoist-variables-npm-7.18.6-6eb061f405-fd9c35bb43.zip +0 -0
  16. package/.yarn/cache/@babel-helper-module-imports-npm-7.18.6-1031faa864-f393f8a3b3.zip +0 -0
  17. package/.yarn/cache/@babel-helper-module-transforms-npm-7.20.11-3e2102ac8a-29319ebafa.zip +0 -0
  18. package/.yarn/cache/@babel-helper-plugin-utils-npm-7.20.2-63f605bb73-f6cae53b7f.zip +0 -0
  19. package/.yarn/cache/@babel-helper-simple-access-npm-7.20.2-842ec98fbb-ad1e96ee2e.zip +0 -0
  20. package/.yarn/cache/@babel-helper-split-export-declaration-npm-7.18.6-53ebf8ad4c-c6d3dede53.zip +0 -0
  21. package/.yarn/cache/@babel-helper-string-parser-npm-7.19.4-0db110dc3a-b2f8a3920b.zip +0 -0
  22. package/.yarn/cache/@babel-helper-validator-identifier-npm-7.19.1-d84f19e1dc-0eca5e86a7.zip +0 -0
  23. package/.yarn/cache/@babel-helper-validator-option-npm-7.18.6-cc7d1a3315-f9cc6eb7cc.zip +0 -0
  24. package/.yarn/cache/@babel-helpers-npm-7.20.7-58121e4a26-3fb10df351.zip +0 -0
  25. package/.yarn/cache/@babel-highlight-npm-7.18.6-9d35ad2e27-92d8ee6154.zip +0 -0
  26. package/.yarn/cache/@babel-parser-npm-7.18.4-63fd355e07-e05b2dc720.zip +0 -0
  27. package/.yarn/cache/@babel-parser-npm-7.20.7-3710a9bc4f-25b5266e3b.zip +0 -0
  28. package/.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-7ed1c1d9b9.zip +0 -0
  29. package/.yarn/cache/@babel-plugin-syntax-bigint-npm-7.8.3-b05d971e6c-3a10849d83.zip +0 -0
  30. package/.yarn/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-24f34b196d.zip +0 -0
  31. package/.yarn/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-166ac1125d.zip +0 -0
  32. package/.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-bf5aea1f31.zip +0 -0
  33. package/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.18.6-3e378d5f11-6d37ea9729.zip +0 -0
  34. package/.yarn/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-aff3357703.zip +0 -0
  35. package/.yarn/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-87aca49189.zip +0 -0
  36. package/.yarn/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-01ec5547bd.zip +0 -0
  37. package/.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-fddcf581a5.zip +0 -0
  38. package/.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-910d90e72b.zip +0 -0
  39. package/.yarn/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-eef94d53a1.zip +0 -0
  40. package/.yarn/cache/@babel-plugin-syntax-top-level-await-npm-7.14.5-60a0a2e83b-bbd1a56b09.zip +0 -0
  41. package/.yarn/cache/@babel-plugin-syntax-typescript-npm-7.20.0-21fa6329fe-6189c0b5c3.zip +0 -0
  42. package/.yarn/cache/@babel-template-npm-7.20.7-c157fc5838-2eb1a0ab8d.zip +0 -0
  43. package/.yarn/cache/@babel-traverse-npm-7.20.10-13e8211fef-8e36dfc76b.zip +0 -0
  44. package/.yarn/cache/@babel-types-npm-7.18.4-758c2695f8-85df59beb9.zip +0 -0
  45. package/.yarn/cache/@babel-types-npm-7.20.7-8dc703d95e-b39af241f0.zip +0 -0
  46. package/.yarn/cache/@bcoe-v8-coverage-npm-0.2.3-9e27b3c57e-850f930553.zip +0 -0
  47. package/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-5718f26708.zip +0 -0
  48. package/.yarn/cache/@gar-promisify-npm-1.1.3-ac1a325862-4059f790e2.zip +0 -0
  49. package/.yarn/cache/@hapi-hoek-npm-9.3.0-447eb8d274-4771c7a776.zip +0 -0
  50. package/.yarn/cache/@hapi-topo-npm-5.1.0-5e0b776809-604dfd5dde.zip +0 -0
  51. package/.yarn/cache/@istanbuljs-load-nyc-config-npm-1.1.0-42d17c9cb1-d578da5e2e.zip +0 -0
  52. package/.yarn/cache/@istanbuljs-schema-npm-0.1.3-466bd3eaaa-5282759d96.zip +0 -0
  53. package/.yarn/cache/@jest-console-npm-29.3.1-8c9f654275-9eecbfb6df.zip +0 -0
  54. package/.yarn/cache/@jest-core-npm-29.3.1-11862a6fa6-e3ac9201e8.zip +0 -0
  55. package/.yarn/cache/@jest-environment-npm-27.5.1-375c740ca0-2a9e18c35a.zip +0 -0
  56. package/.yarn/cache/@jest-environment-npm-29.3.1-a92f501968-974102aba7.zip +0 -0
  57. package/.yarn/cache/@jest-expect-npm-29.3.1-0790624347-1d7b5cc735.zip +0 -0
  58. package/.yarn/cache/@jest-expect-utils-npm-29.3.1-97cd2f0a06-7f3b853eb1.zip +0 -0
  59. package/.yarn/cache/@jest-fake-timers-npm-27.5.1-d5ae31aa49-02a0561ed2.zip +0 -0
  60. package/.yarn/cache/@jest-fake-timers-npm-29.3.1-8489ff87cf-b1dafa8cdc.zip +0 -0
  61. package/.yarn/cache/@jest-globals-npm-29.3.1-8cd2f1156d-4d2b9458aa.zip +0 -0
  62. package/.yarn/cache/@jest-reporters-npm-29.3.1-08646fa246-273e0c6953.zip +0 -0
  63. package/.yarn/cache/@jest-schemas-npm-29.0.0-5d6c90262d-41355c78f0.zip +0 -0
  64. package/.yarn/cache/@jest-source-map-npm-29.2.0-cb038ff173-09f76ab63d.zip +0 -0
  65. package/.yarn/cache/@jest-test-result-npm-29.3.1-77136fcf4d-b24ac28332.zip +0 -0
  66. package/.yarn/cache/@jest-test-sequencer-npm-29.3.1-9e41fb7e41-a8325b1ea0.zip +0 -0
  67. package/.yarn/cache/@jest-transform-npm-29.3.1-45dc4bf517-673df5900f.zip +0 -0
  68. package/.yarn/cache/@jest-types-npm-27.5.1-c589ce1890-d1f43cc946.zip +0 -0
  69. package/.yarn/cache/@jest-types-npm-29.3.1-6b45218613-6f9faf2750.zip +0 -0
  70. package/.yarn/cache/@jridgewell-gen-mapping-npm-0.1.1-3bad172ac6-3bcc21fe78.zip +0 -0
  71. package/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.2-c64eeb4a4e-1832707a1c.zip +0 -0
  72. package/.yarn/cache/@jridgewell-resolve-uri-npm-3.1.0-6ff2351e61-b5ceaaf9a1.zip +0 -0
  73. package/.yarn/cache/@jridgewell-set-array-npm-1.1.2-45b82d7fb6-69a84d5980.zip +0 -0
  74. package/.yarn/cache/@jridgewell-source-map-npm-0.3.2-6fd1f37b22-1b83f0eb94.zip +0 -0
  75. package/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.14-f5f0630788-61100637b6.zip +0 -0
  76. package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.17-57578fd48c-9d703b859c.zip +0 -0
  77. package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-d89597752f.zip +0 -0
  78. package/.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-a970d595bd.zip +0 -0
  79. package/.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip +0 -0
  80. package/.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-190c643f15.zip +0 -0
  81. package/.yarn/cache/@npmcli-fs-npm-1.1.1-17f582e0b6-f5ad92f157.zip +0 -0
  82. package/.yarn/cache/@npmcli-fs-npm-2.1.2-08d434e77b-405074965e.zip +0 -0
  83. package/.yarn/cache/@npmcli-move-file-npm-1.1.2-4f6c7b3354-c96381d4a3.zip +0 -0
  84. package/.yarn/cache/@npmcli-move-file-npm-2.0.1-b593d8f741-52dc02259d.zip +0 -0
  85. package/.yarn/cache/@rollup-pluginutils-npm-4.2.1-0f52a5eba2-6bc41f22b1.zip +0 -0
  86. package/.yarn/cache/@sideway-address-npm-4.1.4-32f94bc9f5-b9fca2a93a.zip +0 -0
  87. package/.yarn/cache/@sideway-formula-npm-3.0.1-ee371b2ddf-e4beeebc9d.zip +0 -0
  88. package/.yarn/cache/@sideway-pinpoint-npm-2.0.0-66d94e687e-0f4491e589.zip +0 -0
  89. package/.yarn/cache/@sinclair-typebox-npm-0.24.51-cdde4a266f-fd0d855e74.zip +0 -0
  90. package/.yarn/cache/@sindresorhus-chunkify-npm-0.2.0-abd3dba6c5-a17d8a385f.zip +0 -0
  91. package/.yarn/cache/@sindresorhus-df-npm-1.0.1-0588918928-0cb43b4ed9.zip +0 -0
  92. package/.yarn/cache/@sindresorhus-df-npm-3.1.1-bdd4bd6cbf-6378a8c62a.zip +0 -0
  93. package/.yarn/cache/@sinonjs-commons-npm-1.8.6-e3593ed6d6-7d3f8c1e85.zip +0 -0
  94. package/.yarn/cache/@sinonjs-fake-timers-npm-8.1.0-95c51c96db-09b5a158ce.zip +0 -0
  95. package/.yarn/cache/@sinonjs-fake-timers-npm-9.1.2-3ff37ab7fb-7d3aef54e1.zip +0 -0
  96. package/.yarn/cache/@stroncium-procfs-npm-1.2.1-c5daf856f1-cb09a4a478.zip +0 -0
  97. package/.yarn/cache/@tootallnate-once-npm-2.0.0-e36cf4f140-ad87447820.zip +0 -0
  98. package/.yarn/cache/@trysound-sax-npm-0.2.0-9f763d0295-11226c39b5.zip +0 -0
  99. package/.yarn/cache/@tsconfig-node10-npm-1.0.9-f2e2d20feb-a33ae4dc2a.zip +0 -0
  100. package/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip +0 -0
  101. package/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip +0 -0
  102. package/.yarn/cache/@tsconfig-node16-npm-1.0.3-6a4a30eda2-3a8b657dd0.zip +0 -0
  103. package/.yarn/cache/@types-babel__core-npm-7.1.20-90b6a59ca7-a09c4f0456.zip +0 -0
  104. package/.yarn/cache/@types-babel__generator-npm-7.6.4-03e776f956-20effbbb5f.zip +0 -0
  105. package/.yarn/cache/@types-babel__template-npm-7.4.1-fe1db49e53-649fe8b42c.zip +0 -0
  106. package/.yarn/cache/@types-babel__traverse-npm-7.18.3-db279a0ed0-d20953338b.zip +0 -0
  107. package/.yarn/cache/@types-commander-npm-2.12.2-ac78919b62-8cfc1797b3.zip +0 -0
  108. package/.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip +0 -0
  109. package/.yarn/cache/@types-expect-puppeteer-npm-5.0.2-210782527c-38d761afd8.zip +0 -0
  110. package/.yarn/cache/@types-graceful-fs-npm-4.1.5-91d62e1050-d076bb61f4.zip +0 -0
  111. package/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.4-734954bb56-a25d7589ee.zip +0 -0
  112. package/.yarn/cache/@types-istanbul-lib-report-npm-3.0.0-50de3e6b3b-656398b62d.zip +0 -0
  113. package/.yarn/cache/@types-istanbul-reports-npm-3.0.1-770e825002-f1ad54bc68.zip +0 -0
  114. package/.yarn/cache/@types-jest-environment-puppeteer-npm-5.0.3-201e807bf0-eb865f9ea9.zip +0 -0
  115. package/.yarn/cache/@types-jest-npm-29.2.4-e07e4d9db4-9deb4756fe.zip +0 -0
  116. package/.yarn/cache/@types-json-schema-npm-7.0.11-79462ae5ca-527bddfe62.zip +0 -0
  117. package/.yarn/cache/@types-minimist-npm-1.2.2-a445de65da-b8da83c66e.zip +0 -0
  118. package/.yarn/cache/@types-node-npm-18.11.18-d61e8a4a20-03f17f9480.zip +0 -0
  119. package/.yarn/cache/@types-normalize-package-data-npm-2.4.1-c31c56ae6a-e87bccbf11.zip +0 -0
  120. package/.yarn/cache/@types-parse-json-npm-4.0.0-298522afa6-fd6bce2b67.zip +0 -0
  121. package/.yarn/cache/@types-prettier-npm-2.7.2-6b2e2f518f-b47d76a525.zip +0 -0
  122. package/.yarn/cache/@types-puppeteer-npm-5.4.7-b2729bae9f-491c0ca2d8.zip +0 -0
  123. package/.yarn/cache/@types-resolve-npm-0.0.8-191de904ac-f241bb773a.zip +0 -0
  124. package/.yarn/cache/@types-stack-utils-npm-2.0.1-867718ab70-205fdbe332.zip +0 -0
  125. package/.yarn/cache/@types-uuid-parse-npm-1.0.0-8ebcf425af-bd3b4f593c.zip +0 -0
  126. package/.yarn/cache/@types-ws-npm-8.5.3-ae52c483f1-0ce46f850d.zip +0 -0
  127. package/.yarn/cache/@types-yargs-npm-16.0.4-7aaef7d6c8-caa21d2c95.zip +0 -0
  128. package/.yarn/cache/@types-yargs-npm-17.0.17-c6b06c4acb-4f1b5149e7.zip +0 -0
  129. package/.yarn/cache/@types-yargs-parser-npm-21.0.0-c8a3b32c52-b2f4c8d12a.zip +0 -0
  130. package/.yarn/cache/@types-yauzl-npm-2.10.0-7b242343cb-55d27ae5d3.zip +0 -0
  131. package/.yarn/cache/@webassemblyjs-ast-npm-1.9.0-8e3ce7800f-8a9838dc7f.zip +0 -0
  132. package/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.9.0-0994d081ef-d3aeb19bc3.zip +0 -0
  133. package/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.9.0-ddb267a22d-9179d31486.zip +0 -0
  134. package/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.9.0-6bac0f07b8-dcb85f630f.zip +0 -0
  135. package/.yarn/cache/@webassemblyjs-helper-code-frame-npm-1.9.0-81d2d67e07-a28fa057f7.zip +0 -0
  136. package/.yarn/cache/@webassemblyjs-helper-fsm-npm-1.9.0-142437751c-374cc510c8.zip +0 -0
  137. package/.yarn/cache/@webassemblyjs-helper-module-context-npm-1.9.0-f61a345630-55e8f89c7e.zip +0 -0
  138. package/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.9.0-956a55196e-280da4df3c.zip +0 -0
  139. package/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.9.0-bfcf6c79b2-b8f7bb45d4.zip +0 -0
  140. package/.yarn/cache/@webassemblyjs-ieee754-npm-1.9.0-81eeb71bbf-7fe4a217ba.zip +0 -0
  141. package/.yarn/cache/@webassemblyjs-leb128-npm-1.9.0-4ae214ef2b-4ca7cbb869.zip +0 -0
  142. package/.yarn/cache/@webassemblyjs-utf8-npm-1.9.0-15e2572ae2-e328a30ac8.zip +0 -0
  143. package/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.9.0-d249ae2fdf-1997e0c2f4.zip +0 -0
  144. package/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.9.0-f4562ce247-2456e84e8e.zip +0 -0
  145. package/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.9.0-e4c3dd00c8-91242205bd.zip +0 -0
  146. package/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.9.0-a1515dd8ce-493f6cfc63.zip +0 -0
  147. package/.yarn/cache/@webassemblyjs-wast-parser-npm-1.9.0-482b548b88-705dd48fbb.zip +0 -0
  148. package/.yarn/cache/@webassemblyjs-wast-printer-npm-1.9.0-1fa1d3e613-3d1e1b2e84.zip +0 -0
  149. package/.yarn/cache/@xtuc-ieee754-npm-1.2.0-ec0ce4e025-ac56d4ca6e.zip +0 -0
  150. package/.yarn/cache/@xtuc-long-npm-4.2.2-37236e6d72-8ed0d477ce.zip +0 -0
  151. package/.yarn/cache/abbrev-npm-1.1.1-3659247eab-a4a97ec07d.zip +0 -0
  152. package/.yarn/cache/abstract-leveldown-npm-0.12.4-9799ae9b41-e300f04bb6.zip +0 -0
  153. package/.yarn/cache/accepts-npm-1.3.8-9a812371c9-50c43d32e7.zip +0 -0
  154. package/.yarn/cache/acorn-npm-5.7.4-98f51077be-f51392a4d2.zip +0 -0
  155. package/.yarn/cache/acorn-npm-6.4.2-94943eb66c-44b0705372.zip +0 -0
  156. package/.yarn/cache/acorn-npm-7.4.1-f450b4646c-1860f23c21.zip +0 -0
  157. package/.yarn/cache/acorn-npm-8.8.1-20e4aea981-4079b67283.zip +0 -0
  158. package/.yarn/cache/acorn-walk-npm-7.2.0-5f8b515308-9252158a79.zip +0 -0
  159. package/.yarn/cache/acorn-walk-npm-8.2.0-2f2cac3177-1715e76c01.zip +0 -0
  160. package/.yarn/cache/agent-base-npm-6.0.2-428f325a93-f52b6872cc.zip +0 -0
  161. package/.yarn/cache/agentkeepalive-npm-4.2.1-b86a9fb343-39cb49ed8c.zip +0 -0
  162. package/.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip +0 -0
  163. package/.yarn/cache/aggregate-error-npm-4.0.1-12d0501fb7-bb3ffdfd13.zip +0 -0
  164. package/.yarn/cache/ajv-errors-npm-1.0.1-32cd0b19f8-2c9fc02cf5.zip +0 -0
  165. package/.yarn/cache/ajv-keywords-npm-3.5.2-0e391b70e2-7dc5e59316.zip +0 -0
  166. package/.yarn/cache/ajv-npm-6.12.6-4b5105e2b2-874972efe5.zip +0 -0
  167. package/.yarn/cache/ansi-escapes-npm-4.3.2-3ad173702f-93111c4218.zip +0 -0
  168. package/.yarn/cache/ansi-regex-npm-2.1.1-ddd24d102b-190abd03e4.zip +0 -0
  169. package/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip +0 -0
  170. package/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip +0 -0
  171. package/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip +0 -0
  172. package/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip +0 -0
  173. package/.yarn/cache/ansi-styles-npm-5.2.0-72fc7003e3-d7f4e97ce0.zip +0 -0
  174. package/.yarn/cache/anymatch-npm-2.0.0-f2fcb92f28-f7bb192984.zip +0 -0
  175. package/.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip +0 -0
  176. package/.yarn/cache/aproba-npm-1.2.0-34129f0778-0fca141966.zip +0 -0
  177. package/.yarn/cache/aproba-npm-2.0.0-8716bcfde6-5615cadcfb.zip +0 -0
  178. package/.yarn/cache/are-we-there-yet-npm-1.1.7-db9f39924e-70d251719c.zip +0 -0
  179. package/.yarn/cache/are-we-there-yet-npm-3.0.1-3395b1512f-52590c2486.zip +0 -0
  180. package/.yarn/cache/arg-npm-4.1.3-1748b966a8-544af8dd3f.zip +0 -0
  181. package/.yarn/cache/argparse-npm-1.0.10-528934e59d-7ca6e45583.zip +0 -0
  182. package/.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip +0 -0
  183. package/.yarn/cache/arr-diff-npm-4.0.0-cec86ae312-ea7c883484.zip +0 -0
  184. package/.yarn/cache/arr-flatten-npm-1.1.0-0c12b693e4-963fe12564.zip +0 -0
  185. package/.yarn/cache/arr-union-npm-3.1.0-853ada9729-b5b0408c6e.zip +0 -0
  186. package/.yarn/cache/array-flatten-npm-1.1.1-9d94ad5f1d-a9925bf351.zip +0 -0
  187. package/.yarn/cache/array-union-npm-1.0.2-cc61ee268f-82cec6421b.zip +0 -0
  188. package/.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip +0 -0
  189. package/.yarn/cache/array-uniq-npm-1.0.3-e7f5d6f3a1-1625f06b09.zip +0 -0
  190. package/.yarn/cache/array-unique-npm-0.3.2-9f62c6ac93-da344b89cf.zip +0 -0
  191. package/.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip +0 -0
  192. package/.yarn/cache/asn1.js-npm-5.4.1-37c7edbcb0-3786a101ac.zip +0 -0
  193. package/.yarn/cache/assert-npm-1.5.0-3303b97e04-9be48435f7.zip +0 -0
  194. package/.yarn/cache/assign-symbols-npm-1.0.0-fd803ccdf1-c0eb895911.zip +0 -0
  195. package/.yarn/cache/async-each-npm-1.0.3-464af5d2f3-868651cfeb.zip +0 -0
  196. package/.yarn/cache/async-limiter-npm-1.0.1-7e6819bcdb-2b849695b4.zip +0 -0
  197. package/.yarn/cache/at-least-node-npm-1.0.0-2b36e661fa-463e2f8e43.zip +0 -0
  198. package/.yarn/cache/atob-npm-2.1.2-bcb583261e-dfeeeb7009.zip +0 -0
  199. package/.yarn/cache/axios-npm-0.25.0-a1c287d287-2a8a3787c0.zip +0 -0
  200. package/.yarn/cache/babel-jest-npm-29.3.1-871da66c2a-793848238a.zip +0 -0
  201. package/.yarn/cache/babel-plugin-istanbul-npm-6.1.1-df824055e4-cb4fd95738.zip +0 -0
  202. package/.yarn/cache/babel-plugin-jest-hoist-npm-29.2.0-bad358f3a4-368d271cea.zip +0 -0
  203. package/.yarn/cache/babel-preset-current-node-syntax-npm-1.0.1-849ec71e32-d118c27424.zip +0 -0
  204. package/.yarn/cache/babel-preset-jest-npm-29.2.0-d765a77392-1b09a2db96.zip +0 -0
  205. package/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip +0 -0
  206. package/.yarn/cache/base-npm-0.11.2-a9bde462d6-a4a146b912.zip +0 -0
  207. package/.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip +0 -0
  208. package/.yarn/cache/bfj-npm-6.1.2-1b2ce5df1c-569726dd6b.zip +0 -0
  209. package/.yarn/cache/big.js-npm-5.2.2-e147c30820-b89b6e8419.zip +0 -0
  210. package/.yarn/cache/binary-extensions-npm-1.13.1-fb81dec2b0-ad7747f33c.zip +0 -0
  211. package/.yarn/cache/binary-extensions-npm-2.2.0-180c33fec7-ccd267956c.zip +0 -0
  212. package/.yarn/cache/bindings-npm-1.5.0-77ce1d213c-65b6b48095.zip +0 -0
  213. package/.yarn/cache/bl-npm-0.8.2-1dc00458ec-18767c5c86.zip +0 -0
  214. package/.yarn/cache/bl-npm-4.1.0-7f94cdcf3f-9e8521fa7e.zip +0 -0
  215. package/.yarn/cache/bluebird-npm-3.7.2-6a54136ee3-869417503c.zip +0 -0
  216. package/.yarn/cache/bn.js-npm-4.12.0-3ec6c884f6-39afb4f15f.zip +0 -0
  217. package/.yarn/cache/bn.js-npm-5.2.1-dc952b1965-3dd8c8d380.zip +0 -0
  218. package/.yarn/cache/body-parser-npm-1.20.1-759fd14db9-f1050dbac3.zip +0 -0
  219. package/.yarn/cache/boolbase-npm-1.0.0-965fe9af6d-3e25c80ef6.zip +0 -0
  220. package/.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip +0 -0
  221. package/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip +0 -0
  222. package/.yarn/cache/braces-npm-2.3.2-19cadb3384-e30dcb6aaf.zip +0 -0
  223. package/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip +0 -0
  224. package/.yarn/cache/brorand-npm-1.1.0-ea86634c4b-8a05c9f3c4.zip +0 -0
  225. package/.yarn/cache/browserify-aes-npm-1.2.0-2ad4aeefbe-4a17c3eb55.zip +0 -0
  226. package/.yarn/cache/browserify-cipher-npm-1.0.1-e00d75c093-2d8500acf1.zip +0 -0
  227. package/.yarn/cache/browserify-des-npm-1.0.2-5d04e0cde2-b15a3e358a.zip +0 -0
  228. package/.yarn/cache/browserify-fs-npm-1.0.0-71b9ff4716-e0c35cf42c.zip +0 -0
  229. package/.yarn/cache/browserify-rsa-npm-4.1.0-2a224a51bc-155f0c1358.zip +0 -0
  230. package/.yarn/cache/browserify-sign-npm-4.2.1-9a8530ca87-0221f190e3.zip +0 -0
  231. package/.yarn/cache/browserify-zlib-npm-0.2.0-eab4087284-5cd9d6a665.zip +0 -0
  232. package/.yarn/cache/browserslist-npm-4.21.4-7d64a96afc-4af3793704.zip +0 -0
  233. package/.yarn/cache/bs-logger-npm-0.2.6-7670f88b66-d34bdaf68c.zip +0 -0
  234. package/.yarn/cache/bser-npm-2.1.1-cc902055ce-9ba4dc58ce.zip +0 -0
  235. package/.yarn/cache/buffer-crc32-npm-0.2.13-c4b6fceac1-06252347ae.zip +0 -0
  236. package/.yarn/cache/buffer-es6-npm-4.9.3-1b0a75b6d5-dfc8ebb3c5.zip +0 -0
  237. package/.yarn/cache/buffer-from-npm-1.1.2-03d2f20d7e-0448524a56.zip +0 -0
  238. package/.yarn/cache/buffer-npm-4.9.2-9e40b5e87a-8801bc1ba0.zip +0 -0
  239. package/.yarn/cache/buffer-npm-5.7.1-513ef8259e-e2cf8429e1.zip +0 -0
  240. package/.yarn/cache/buffer-xor-npm-1.0.3-56bb81b0dd-10c520df29.zip +0 -0
  241. package/.yarn/cache/builtin-modules-npm-1.1.1-209bbd4692-0fbf69ffe7.zip +0 -0
  242. package/.yarn/cache/builtin-modules-npm-3.3.0-db4f3d32de-db021755d7.zip +0 -0
  243. package/.yarn/cache/builtin-status-codes-npm-3.0.0-e376b0580b-1119429cf4.zip +0 -0
  244. package/.yarn/cache/builtins-npm-2.0.1-7dae9c1771-5b90d6df8b.zip +0 -0
  245. package/.yarn/cache/bytes-npm-3.1.2-28b8643004-e4bcd3948d.zip +0 -0
  246. package/.yarn/cache/cacache-npm-12.0.4-0a601d06b9-c88a72f369.zip +0 -0
  247. package/.yarn/cache/cacache-npm-15.3.0-a7e5239c6a-a07327c27a.zip +0 -0
  248. package/.yarn/cache/cacache-npm-16.1.3-4e2088ed0d-d91409e6e5.zip +0 -0
  249. package/.yarn/cache/cache-base-npm-1.0.1-1538417cb9-9114b8654f.zip +0 -0
  250. package/.yarn/cache/call-bind-npm-1.0.2-c957124861-f8e31de9d1.zip +0 -0
  251. package/.yarn/cache/callsites-npm-3.1.0-268f989910-072d17b6ab.zip +0 -0
  252. package/.yarn/cache/camel-case-npm-3.0.0-d87e5afe35-4190ed6ab8.zip +0 -0
  253. package/.yarn/cache/camelcase-keys-npm-7.0.2-36fbc5a8f7-b5821cc48d.zip +0 -0
  254. package/.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip +0 -0
  255. package/.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip +0 -0
  256. package/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip +0 -0
  257. package/.yarn/cache/caniuse-api-npm-3.0.0-1272c2981e-db2a229383.zip +0 -0
  258. package/.yarn/cache/caniuse-lite-npm-1.0.30001441-c0558ca2f0-0f5aa8f7ea.zip +0 -0
  259. package/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip +0 -0
  260. package/.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip +0 -0
  261. package/.yarn/cache/char-regex-npm-1.0.2-ecade5f97f-b563e4b603.zip +0 -0
  262. package/.yarn/cache/check-types-npm-8.0.3-935499d8f5-9cf92c909c.zip +0 -0
  263. package/.yarn/cache/chokidar-npm-2.1.8-32fdcd020e-0c43e89cbf.zip +0 -0
  264. package/.yarn/cache/chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip +0 -0
  265. package/.yarn/cache/chownr-npm-1.1.4-5bd400ab08-115648f8eb.zip +0 -0
  266. package/.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip +0 -0
  267. package/.yarn/cache/chrome-trace-event-npm-1.0.3-e0ae3dcd60-cb8b1fc7e8.zip +0 -0
  268. package/.yarn/cache/ci-info-npm-3.7.0-3df431b240-6e5df02503.zip +0 -0
  269. package/.yarn/cache/cipher-base-npm-1.0.4-2e98b97140-47d3568dbc.zip +0 -0
  270. package/.yarn/cache/cjs-module-lexer-npm-1.2.2-473ce063ea-977f3f042b.zip +0 -0
  271. package/.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-f191c8b4cc.zip +0 -0
  272. package/.yarn/cache/class-utils-npm-0.3.6-2c691ad006-be10890080.zip +0 -0
  273. package/.yarn/cache/clean-css-npm-4.2.4-5d1d0f2f9b-045ff6fcf4.zip +0 -0
  274. package/.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip +0 -0
  275. package/.yarn/cache/clean-stack-npm-4.2.0-bb0dff47b2-373f656a31.zip +0 -0
  276. package/.yarn/cache/cliui-npm-5.0.0-885b5f48ee-0bb8779efe.zip +0 -0
  277. package/.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip +0 -0
  278. package/.yarn/cache/cliui-npm-8.0.1-3b029092cf-79648b3b00.zip +0 -0
  279. package/.yarn/cache/clone-deep-npm-0.2.4-ba170bfeb4-bcf9752052.zip +0 -0
  280. package/.yarn/cache/clone-npm-0.1.19-01686c9db2-5e710e16da.zip +0 -0
  281. package/.yarn/cache/co-npm-4.6.0-03f2d1feb6-5210d92230.zip +0 -0
  282. package/.yarn/cache/code-point-at-npm-1.1.0-37de5fe566-17d5666611.zip +0 -0
  283. package/.yarn/cache/collect-v8-coverage-npm-1.0.1-39dec86bad-4efe0a1fcc.zip +0 -0
  284. package/.yarn/cache/collection-visit-npm-1.0.0-aba2d5defc-15d9658fe6.zip +0 -0
  285. package/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip +0 -0
  286. package/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip +0 -0
  287. package/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip +0 -0
  288. package/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip +0 -0
  289. package/.yarn/cache/color-support-npm-1.1.3-3be5c53455-9b73568176.zip +0 -0
  290. package/.yarn/cache/colord-npm-2.9.3-5c35c27898-95d909bfbc.zip +0 -0
  291. package/.yarn/cache/commander-npm-2.17.1-08eb1c40fa-22e7ed5b42.zip +0 -0
  292. package/.yarn/cache/commander-npm-2.19.0-49f415ac97-d52ffb0b31.zip +0 -0
  293. package/.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-ab8c07884e.zip +0 -0
  294. package/.yarn/cache/commander-npm-5.1.0-7e939e7832-0b7fec1712.zip +0 -0
  295. package/.yarn/cache/commander-npm-7.2.0-19178180f8-53501cbeee.zip +0 -0
  296. package/.yarn/cache/commander-npm-9.4.1-9deffb2749-bfb18e325a.zip +0 -0
  297. package/.yarn/cache/commondir-npm-1.0.1-291b790340-59715f2fc4.zip +0 -0
  298. package/.yarn/cache/component-emitter-npm-1.3.0-4b848565b9-b3c46de38f.zip +0 -0
  299. package/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip +0 -0
  300. package/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip +0 -0
  301. package/.yarn/cache/concat-with-sourcemaps-npm-1.1.0-0cc504d9ba-57faa6f4a6.zip +0 -0
  302. package/.yarn/cache/console-browserify-npm-1.2.0-5619eeb6ff-226591eeff.zip +0 -0
  303. package/.yarn/cache/console-control-strings-npm-1.1.0-e3160e5275-8755d76787.zip +0 -0
  304. package/.yarn/cache/constants-browserify-npm-1.0.0-b9a9bcfe4b-f7ac8c6d0b.zip +0 -0
  305. package/.yarn/cache/content-disposition-npm-0.5.4-2d93678616-afb9d545e2.zip +0 -0
  306. package/.yarn/cache/content-type-npm-1.0.4-3b1a5ca16b-3d93585fda.zip +0 -0
  307. package/.yarn/cache/convert-source-map-npm-1.9.0-e294555f4b-dc55a1f28d.zip +0 -0
  308. package/.yarn/cache/convert-source-map-npm-2.0.0-7ab664dc4e-63ae9933be.zip +0 -0
  309. package/.yarn/cache/cookie-npm-0.5.0-e2d58a161a-1f4bd2ca57.zip +0 -0
  310. package/.yarn/cache/cookie-signature-npm-1.0.6-93f325f7f0-f4e1b0a98a.zip +0 -0
  311. package/.yarn/cache/copy-concurrently-npm-1.0.5-a20f3c4b55-63c169f582.zip +0 -0
  312. package/.yarn/cache/copy-descriptor-npm-0.1.1-864db4ab66-d4b7b57b14.zip +0 -0
  313. package/.yarn/cache/copyfiles-npm-2.4.1-d8750b5d88-aea69873bb.zip +0 -0
  314. package/.yarn/cache/core-util-is-npm-1.0.3-ca74b76c90-9de8597363.zip +0 -0
  315. package/.yarn/cache/cosmiconfig-npm-7.1.0-13a5090bcd-c53bf7befc.zip +0 -0
  316. package/.yarn/cache/cosmiconfig-npm-8.0.0-1cab0f7583-ff4cdf89ac.zip +0 -0
  317. package/.yarn/cache/create-ecdh-npm-4.0.4-1048ce2035-0dd7fca971.zip +0 -0
  318. package/.yarn/cache/create-hash-npm-1.2.0-afd048e1ce-02a6ae3bb9.zip +0 -0
  319. package/.yarn/cache/create-hmac-npm-1.1.7-b4ef32668a-ba12bb2257.zip +0 -0
  320. package/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip +0 -0
  321. package/.yarn/cache/cross-env-npm-7.0.3-96d81820f4-26f2f3ea2a.zip +0 -0
  322. package/.yarn/cache/cross-fetch-npm-3.1.5-e414995db9-f6b8c6ee3e.zip +0 -0
  323. package/.yarn/cache/cross-spawn-npm-6.0.5-2deab6c280-f893bb0d96.zip +0 -0
  324. package/.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip +0 -0
  325. package/.yarn/cache/crypto-browserify-npm-3.12.0-bed454fef0-c1609af826.zip +0 -0
  326. package/.yarn/cache/css-declaration-sorter-npm-6.3.1-06bf8d7c1c-ff0d9989ee.zip +0 -0
  327. package/.yarn/cache/css-select-npm-4.3.0-72f53028ec-d620273683.zip +0 -0
  328. package/.yarn/cache/css-tree-npm-1.1.3-9c46f35513-79f9b81803.zip +0 -0
  329. package/.yarn/cache/css-what-npm-6.1.0-57f751efbb-b975e547e1.zip +0 -0
  330. package/.yarn/cache/cssesc-npm-3.0.0-15ec56f86f-f8c4ababff.zip +0 -0
  331. package/.yarn/cache/cssnano-npm-5.1.14-f2f8f81d41-73463c723c.zip +0 -0
  332. package/.yarn/cache/cssnano-preset-default-npm-5.2.13-521fa815ad-f773de44f6.zip +0 -0
  333. package/.yarn/cache/cssnano-utils-npm-3.1.0-b64fb193eb-975c84ce91.zip +0 -0
  334. package/.yarn/cache/csso-npm-4.2.0-b277db8d71-380ba9663d.zip +0 -0
  335. package/.yarn/cache/cwd-npm-0.10.0-ccb304998d-55ab180af8.zip +0 -0
  336. package/.yarn/cache/cyclist-npm-1.0.1-e4eaffe3c5-3cc2fdeb35.zip +0 -0
  337. package/.yarn/cache/debug-npm-2.6.9-7d4cb597dc-d2f51589ca.zip +0 -0
  338. package/.yarn/cache/debug-npm-4.3.4-4513954577-3dbad3f94e.zip +0 -0
  339. package/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-fc645fe20b.zip +0 -0
  340. package/.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip +0 -0
  341. package/.yarn/cache/decamelize-npm-5.0.1-2fde8c926c-7c3b1ed4b3.zip +0 -0
  342. package/.yarn/cache/decode-uri-component-npm-0.2.2-e22e2aa917-95476a7d28.zip +0 -0
  343. package/.yarn/cache/decompress-response-npm-4.2.1-abe5b4ebe4-4e783ca4df.zip +0 -0
  344. package/.yarn/cache/dedent-npm-0.7.0-2dbb45a4c5-87de191050.zip +0 -0
  345. package/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip +0 -0
  346. package/.yarn/cache/deepmerge-npm-4.2.2-112165ced2-a8c43a1ed8.zip +0 -0
  347. package/.yarn/cache/deferred-leveldown-npm-0.2.0-be94f83ca3-f7690ec5b1.zip +0 -0
  348. package/.yarn/cache/define-property-npm-0.2.5-44a0da3575-85af107072.zip +0 -0
  349. package/.yarn/cache/define-property-npm-1.0.0-e2fb9f44c6-5fbed11dac.zip +0 -0
  350. package/.yarn/cache/define-property-npm-2.0.2-4a2067c3ba-3217ed53fc.zip +0 -0
  351. package/.yarn/cache/delegates-npm-1.0.0-9b1942d75f-a51744d9b5.zip +0 -0
  352. package/.yarn/cache/depd-npm-1.1.2-b0c8414da7-6b406620d2.zip +0 -0
  353. package/.yarn/cache/depd-npm-2.0.0-b6c51a4b43-abbe19c768.zip +0 -0
  354. package/.yarn/cache/des.js-npm-1.0.1-9f155eddb6-1ec2eedd7e.zip +0 -0
  355. package/.yarn/cache/destroy-npm-1.2.0-6a511802e2-0acb300b74.zip +0 -0
  356. package/.yarn/cache/detect-file-npm-1.0.0-a22ca7c5b6-1861e41461.zip +0 -0
  357. package/.yarn/cache/detect-libc-npm-1.0.3-c30ac344d4-daaaed925f.zip +0 -0
  358. package/.yarn/cache/detect-newline-npm-3.1.0-6d33fa8d37-ae6cd429c4.zip +0 -0
  359. package/.yarn/cache/devtools-protocol-npm-0.0.1068969-c20050baee-53b9c8d661.zip +0 -0
  360. package/.yarn/cache/diff-npm-4.0.2-73133c7102-f2c09b0ce4.zip +0 -0
  361. package/.yarn/cache/diff-sequences-npm-29.3.1-817e98637b-8edab8c383.zip +0 -0
  362. package/.yarn/cache/diffie-hellman-npm-5.0.3-cbef8f3171-0e620f3221.zip +0 -0
  363. package/.yarn/cache/dir-glob-npm-2.2.2-932e08b501-3aa48714a9.zip +0 -0
  364. package/.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip +0 -0
  365. package/.yarn/cache/dom-serializer-npm-1.4.1-ebb24349c1-fbb0b01f87.zip +0 -0
  366. package/.yarn/cache/domain-browser-npm-1.2.0-d99f0de5ec-8f1235c7f4.zip +0 -0
  367. package/.yarn/cache/domelementtype-npm-2.3.0-02de7cbfba-ee837a318f.zip +0 -0
  368. package/.yarn/cache/domhandler-npm-4.3.1-493539c1ca-4c665ceed0.zip +0 -0
  369. package/.yarn/cache/domutils-npm-2.8.0-0325139e5c-abf7434315.zip +0 -0
  370. package/.yarn/cache/duplexer-npm-0.1.2-952c810235-62ba61a830.zip +0 -0
  371. package/.yarn/cache/duplexify-npm-3.7.1-8f4f1e821f-3c2ed2223d.zip +0 -0
  372. package/.yarn/cache/ee-first-npm-1.1.1-33f8535b39-1b4cac778d.zip +0 -0
  373. package/.yarn/cache/ejs-npm-2.7.4-879ed38a4e-a1d2bfc7d1.zip +0 -0
  374. package/.yarn/cache/electron-to-chromium-npm-1.4.284-2fb881a7ac-be496e9dca.zip +0 -0
  375. package/.yarn/cache/elliptic-npm-6.5.4-0ca8204a86-d56d21fd04.zip +0 -0
  376. package/.yarn/cache/emittery-npm-0.13.1-cb6cd1bb03-2b089ab630.zip +0 -0
  377. package/.yarn/cache/emoji-regex-npm-7.0.3-cfe9479bb3-9159b2228b.zip +0 -0
  378. package/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip +0 -0
  379. package/.yarn/cache/emojis-list-npm-3.0.0-7faa48e6fd-ddaaa02542.zip +0 -0
  380. package/.yarn/cache/encodeurl-npm-1.0.2-f8c8454c41-e50e3d508c.zip +0 -0
  381. package/.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip +0 -0
  382. package/.yarn/cache/end-of-stream-npm-1.4.4-497fc6dee1-530a5a5a1e.zip +0 -0
  383. package/.yarn/cache/enhanced-resolve-npm-4.5.0-1bcc7900d2-4d87488584.zip +0 -0
  384. package/.yarn/cache/entities-npm-2.2.0-0fc8d5b2f7-19010dacaf.zip +0 -0
  385. package/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip +0 -0
  386. package/.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip +0 -0
  387. package/.yarn/cache/errno-npm-0.1.8-10ebc185bf-1271f7b9fb.zip +0 -0
  388. package/.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-c1c2b8b65f.zip +0 -0
  389. package/.yarn/cache/escalade-npm-3.1.1-e02da076aa-a3e2a99f07.zip +0 -0
  390. package/.yarn/cache/escape-html-npm-1.0.3-376c22ee74-6213ca9ae0.zip +0 -0
  391. package/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip +0 -0
  392. package/.yarn/cache/escape-string-regexp-npm-2.0.0-aef69d2a25-9f8a2d5743.zip +0 -0
  393. package/.yarn/cache/escape-string-regexp-npm-5.0.0-a663e825ce-20daabe197.zip +0 -0
  394. package/.yarn/cache/eslint-scope-npm-4.0.3-1492c6d263-c5f835f681.zip +0 -0
  395. package/.yarn/cache/esprima-npm-4.0.1-1084e98778-b45bc805a6.zip +0 -0
  396. package/.yarn/cache/esrecurse-npm-4.3.0-10b86a887a-ebc17b1a33.zip +0 -0
  397. package/.yarn/cache/estraverse-npm-4.3.0-920a32f3c6-a6299491f9.zip +0 -0
  398. package/.yarn/cache/estraverse-npm-5.3.0-03284f8f63-072780882d.zip +0 -0
  399. package/.yarn/cache/estree-walker-npm-0.2.1-9936e19104-eea29a6ab0.zip +0 -0
  400. package/.yarn/cache/estree-walker-npm-0.5.2-7ff13f0566-c0beb0a6c0.zip +0 -0
  401. package/.yarn/cache/estree-walker-npm-0.6.1-fe92d0e1f6-9d6f82a492.zip +0 -0
  402. package/.yarn/cache/estree-walker-npm-2.0.2-dfab42f65c-6151e6f982.zip +0 -0
  403. package/.yarn/cache/etag-npm-1.8.1-54a3b989d9-571aeb3dbe.zip +0 -0
  404. package/.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-1875311c42.zip +0 -0
  405. package/.yarn/cache/events-npm-3.3.0-c280bc7e48-f6f487ad21.zip +0 -0
  406. package/.yarn/cache/evp_bytestokey-npm-1.0.3-4a2644aaea-ad4e1577f1.zip +0 -0
  407. package/.yarn/cache/execa-npm-2.1.0-9c7d62b9ab-93af9b816a.zip +0 -0
  408. package/.yarn/cache/execa-npm-5.1.1-191347acf5-fba9022c8c.zip +0 -0
  409. package/.yarn/cache/exit-npm-0.1.2-ef3761a67d-abc407f07a.zip +0 -0
  410. package/.yarn/cache/expand-brackets-npm-2.1.4-392c703c48-1781d422e7.zip +0 -0
  411. package/.yarn/cache/expand-template-npm-2.0.3-80de959306-588c198472.zip +0 -0
  412. package/.yarn/cache/expand-tilde-npm-1.2.2-9ff99585a9-18051cd104.zip +0 -0
  413. package/.yarn/cache/expand-tilde-npm-2.0.2-a4020a62f5-2efe6ed407.zip +0 -0
  414. package/.yarn/cache/expect-npm-29.3.1-2892df60b8-e9588c2a43.zip +0 -0
  415. package/.yarn/cache/expect-puppeteer-npm-6.1.1-fdfbeee2e9-c2e3064941.zip +0 -0
  416. package/.yarn/cache/express-npm-4.18.2-bb15ff679a-3c4b9b0768.zip +0 -0
  417. package/.yarn/cache/extend-shallow-npm-2.0.1-e6ef52b29c-8fb58d9d7a.zip +0 -0
  418. package/.yarn/cache/extend-shallow-npm-3.0.2-77bbe1bbf5-a920b0cd58.zip +0 -0
  419. package/.yarn/cache/extglob-npm-2.0.4-0f39bc9899-a41531b893.zip +0 -0
  420. package/.yarn/cache/extract-zip-npm-2.0.1-92a28e392b-8cbda9debd.zip +0 -0
  421. package/.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip +0 -0
  422. package/.yarn/cache/fast-glob-npm-3.2.12-162763bbae-0b1990f6ce.zip +0 -0
  423. package/.yarn/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-b191531e36.zip +0 -0
  424. package/.yarn/cache/fastq-npm-1.14.0-7344c77718-da2c05ec14.zip +0 -0
  425. package/.yarn/cache/fb-watchman-npm-2.0.2-bcb6f8f831-b15a124cef.zip +0 -0
  426. package/.yarn/cache/fd-slicer-npm-1.1.0-3cade0050a-c8585fd571.zip +0 -0
  427. package/.yarn/cache/figgy-pudding-npm-3.5.2-2f4e3e1305-4090bd6619.zip +0 -0
  428. package/.yarn/cache/file-uri-to-path-npm-1.0.0-1043ac6206-b648580bdd.zip +0 -0
  429. package/.yarn/cache/filesize-npm-3.6.1-3d20438f73-9ba47e9df9.zip +0 -0
  430. package/.yarn/cache/fill-range-npm-4.0.0-95a6e45784-dbb5102467.zip +0 -0
  431. package/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip +0 -0
  432. package/.yarn/cache/finalhandler-npm-1.2.0-593d001463-92effbfd32.zip +0 -0
  433. package/.yarn/cache/find-cache-dir-npm-2.1.0-772aa82638-60ad475a6d.zip +0 -0
  434. package/.yarn/cache/find-cache-dir-npm-3.3.2-836e68dd83-1e61c2e64f.zip +0 -0
  435. package/.yarn/cache/find-file-up-npm-0.1.3-69349c9744-95475fee7b.zip +0 -0
  436. package/.yarn/cache/find-pkg-npm-0.1.2-94afd4107b-cd797bfa7d.zip +0 -0
  437. package/.yarn/cache/find-process-npm-1.4.7-e91aca1924-1953e6a16a.zip +0 -0
  438. package/.yarn/cache/find-up-npm-3.0.0-a2d4b1b317-38eba3fe7a.zip +0 -0
  439. package/.yarn/cache/find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip +0 -0
  440. package/.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip +0 -0
  441. package/.yarn/cache/findup-sync-npm-3.0.0-aed78587f5-cafd706255.zip +0 -0
  442. package/.yarn/cache/flush-write-stream-npm-1.1.1-54f7360c04-42e07747f8.zip +0 -0
  443. package/.yarn/cache/follow-redirects-npm-1.15.2-1ec1dd82be-faa66059b6.zip +0 -0
  444. package/.yarn/cache/for-in-npm-0.1.8-6a0f87e438-f5bdad7811.zip +0 -0
  445. package/.yarn/cache/for-in-npm-1.0.2-37e3d7aae5-09f4ae93ce.zip +0 -0
  446. package/.yarn/cache/for-own-npm-0.1.5-cb55c5cc60-07eb0a2e98.zip +0 -0
  447. package/.yarn/cache/foreach-npm-2.0.6-32ea85c4a8-f7b6849454.zip +0 -0
  448. package/.yarn/cache/fork-ts-checker-webpack-plugin-npm-7.2.14-8308629f7a-bf4b44e606.zip +0 -0
  449. package/.yarn/cache/forwarded-npm-0.2.0-6473dabe35-fd27e2394d.zip +0 -0
  450. package/.yarn/cache/fragment-cache-npm-0.2.1-407fe74319-1cbbd0b011.zip +0 -0
  451. package/.yarn/cache/fresh-npm-0.5.2-ad2bb4c0a2-13ea8b08f9.zip +0 -0
  452. package/.yarn/cache/from2-npm-2.3.0-bd16dc410b-6080eba079.zip +0 -0
  453. package/.yarn/cache/fs-constants-npm-1.0.0-59576b2177-18f5b71837.zip +0 -0
  454. package/.yarn/cache/fs-exists-sync-npm-0.1.0-c8642ca841-850a0d6e4c.zip +0 -0
  455. package/.yarn/cache/fs-extra-npm-10.1.0-86573680ed-dc94ab3709.zip +0 -0
  456. package/.yarn/cache/fs-extra-npm-9.1.0-983c2ddb4c-ba71ba32e0.zip +0 -0
  457. package/.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip +0 -0
  458. package/.yarn/cache/fs-monkey-npm-1.0.3-c1ea1ab781-cf50804833.zip +0 -0
  459. package/.yarn/cache/fs-write-stream-atomic-npm-1.0.10-d6efbd9866-43c2d6817b.zip +0 -0
  460. package/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip +0 -0
  461. package/.yarn/cache/fsevents-npm-1.2.13-9e970219e7-ae855aa737.zip +0 -0
  462. package/.yarn/cache/fsevents-npm-2.3.2-a881d6ac9f-97ade64e75.zip +0 -0
  463. package/.yarn/cache/function-bind-npm-1.1.1-b56b322ae9-b32fbaebb3.zip +0 -0
  464. package/.yarn/cache/fwd-stream-npm-1.0.4-4cc8263a63-db4dcf68f2.zip +0 -0
  465. package/.yarn/cache/gauge-npm-2.7.4-2189a73529-a89b53cee6.zip +0 -0
  466. package/.yarn/cache/gauge-npm-4.0.4-8f878385e9-788b6bfe52.zip +0 -0
  467. package/.yarn/cache/generic-names-npm-4.0.0-c188ad8a22-8dabd25051.zip +0 -0
  468. package/.yarn/cache/gensync-npm-1.0.0-beta.2-224666d72f-a7437e58c6.zip +0 -0
  469. package/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip +0 -0
  470. package/.yarn/cache/get-intrinsic-npm-1.1.3-b6c7bd1010-152d79e872.zip +0 -0
  471. package/.yarn/cache/get-package-type-npm-0.1.0-6c70cdc8ab-bba0811116.zip +0 -0
  472. package/.yarn/cache/get-stream-npm-5.2.0-2cfd3b452b-8bc1a23174.zip +0 -0
  473. package/.yarn/cache/get-stream-npm-6.0.1-83e51a4642-e04ecece32.zip +0 -0
  474. package/.yarn/cache/get-value-npm-2.0.6-03cd422e0a-5c3b99cb53.zip +0 -0
  475. package/.yarn/cache/github-from-package-npm-0.0.0-519f80c9a1-14e448192a.zip +0 -0
  476. package/.yarn/cache/glob-npm-7.2.3-2d866d17a5-29452e97b3.zip +0 -0
  477. package/.yarn/cache/glob-npm-8.0.3-750f909025-50bcdea19d.zip +0 -0
  478. package/.yarn/cache/glob-parent-npm-3.1.0-31416ad085-653d559237.zip +0 -0
  479. package/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip +0 -0
  480. package/.yarn/cache/global-modules-npm-0.2.3-36612c55cb-3801788df5.zip +0 -0
  481. package/.yarn/cache/global-modules-npm-1.0.0-70c522e57a-10be68796c.zip +0 -0
  482. package/.yarn/cache/global-modules-npm-2.0.0-f71d340362-d6197f2585.zip +0 -0
  483. package/.yarn/cache/global-prefix-npm-0.1.5-1fd688e1ae-ea1b818a18.zip +0 -0
  484. package/.yarn/cache/global-prefix-npm-1.0.2-a96996834b-061b43470f.zip +0 -0
  485. package/.yarn/cache/global-prefix-npm-3.0.0-68cf01e67d-8a82fc1d6f.zip +0 -0
  486. package/.yarn/cache/globals-npm-11.12.0-1fa7f41a6c-67051a45ec.zip +0 -0
  487. package/.yarn/cache/globby-npm-11.1.0-bdcdf20c71-b4be8885e0.zip +0 -0
  488. package/.yarn/cache/globby-npm-7.1.1-6c96505a27-f0eba08a08.zip +0 -0
  489. package/.yarn/cache/graceful-fs-npm-4.2.10-79c70989ca-3f109d70ae.zip +0 -0
  490. package/.yarn/cache/gzip-size-npm-5.1.1-b757f76e19-6451ba2210.zip +0 -0
  491. package/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip +0 -0
  492. package/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip +0 -0
  493. package/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip +0 -0
  494. package/.yarn/cache/has-npm-1.0.3-b7f00631c1-b9ad53d53b.zip +0 -0
  495. package/.yarn/cache/has-symbols-npm-1.0.3-1986bff2c4-a054c40c63.zip +0 -0
  496. package/.yarn/cache/has-unicode-npm-2.0.1-893adb4747-1eab07a743.zip +0 -0
  497. package/.yarn/cache/has-value-npm-0.3.1-4a15b6c29f-29e2a1e657.zip +0 -0
  498. package/.yarn/cache/has-value-npm-1.0.0-19d82fd04b-b9421d354e.zip +0 -0
  499. package/.yarn/cache/has-values-npm-0.1.4-6b4397786d-ab1c4bcaf8.zip +0 -0
  500. package/.yarn/cache/has-values-npm-1.0.0-890c077bbd-77e6693f73.zip +0 -0
  501. package/.yarn/cache/hash-base-npm-3.1.0-26fc5711dd-26b7e97ac3.zip +0 -0
  502. package/.yarn/cache/hash.js-npm-1.1.7-f1ad187358-e350096e65.zip +0 -0
  503. package/.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip +0 -0
  504. package/.yarn/cache/hmac-drbg-npm-1.0.1-3499ad31cd-bd30b6a68d.zip +0 -0
  505. package/.yarn/cache/homedir-polyfill-npm-1.0.3-da1a29ce00-18dd4db870.zip +0 -0
  506. package/.yarn/cache/hoopy-npm-0.1.4-32e7a5b08e-cfa60c7684.zip +0 -0
  507. package/.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-c955394bda.zip +0 -0
  508. package/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-c3f87b3c2f.zip +0 -0
  509. package/.yarn/cache/html-escaper-npm-2.0.2-38e51ef294-d2df2da3ad.zip +0 -0
  510. package/.yarn/cache/html-minifier-npm-3.5.21-5367304f07-66a86841a8.zip +0 -0
  511. package/.yarn/cache/http-cache-semantics-npm-4.1.0-860520a31f-974de94a81.zip +0 -0
  512. package/.yarn/cache/http-errors-npm-2.0.0-3f1c503428-9b0a378266.zip +0 -0
  513. package/.yarn/cache/http-proxy-agent-npm-5.0.0-7f1f121b83-e2ee1ff165.zip +0 -0
  514. package/.yarn/cache/https-browserify-npm-1.0.0-7d6b10abbc-09b35353e4.zip +0 -0
  515. package/.yarn/cache/https-proxy-agent-npm-5.0.1-42d65f358e-571fccdf38.zip +0 -0
  516. package/.yarn/cache/human-signals-npm-2.1.0-f75815481d-b87fd89fce.zip +0 -0
  517. package/.yarn/cache/humanize-ms-npm-1.2.1-e942bd7329-9c7a74a282.zip +0 -0
  518. package/.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-bd9f120f5a.zip +0 -0
  519. package/.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip +0 -0
  520. package/.yarn/cache/icss-replace-symbols-npm-1.1.0-bc11c612de-24575b2c2f.zip +0 -0
  521. package/.yarn/cache/icss-utils-npm-5.1.0-8d8c062d07-5c324d2835.zip +0 -0
  522. package/.yarn/cache/idb-wrapper-npm-1.7.2-3d48559faf-a5fa3a7711.zip +0 -0
  523. package/.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-5144c0c981.zip +0 -0
  524. package/.yarn/cache/iferr-npm-0.1.5-c49f4a3fbc-a18d19b6ad.zip +0 -0
  525. package/.yarn/cache/ignore-npm-3.3.10-baaf3519b5-23e8cc776e.zip +0 -0
  526. package/.yarn/cache/ignore-npm-5.2.4-fbe6e989e5-3d4c309c60.zip +0 -0
  527. package/.yarn/cache/import-cwd-npm-3.0.0-2f801f964d-f2c4230e83.zip +0 -0
  528. package/.yarn/cache/import-fresh-npm-3.3.0-3e34265ca9-2cacfad06e.zip +0 -0
  529. package/.yarn/cache/import-from-npm-3.0.0-8656bfd330-5040a7400e.zip +0 -0
  530. package/.yarn/cache/import-local-npm-2.0.0-9cfca832bf-b846925248.zip +0 -0
  531. package/.yarn/cache/import-local-npm-3.1.0-8960af5e51-bfcdb63b5e.zip +0 -0
  532. package/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip +0 -0
  533. package/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip +0 -0
  534. package/.yarn/cache/indent-string-npm-5.0.0-35eaa3b052-e466c27b63.zip +0 -0
  535. package/.yarn/cache/indexof-npm-0.0.1-b35b810950-0fb04e8b14.zip +0 -0
  536. package/.yarn/cache/infer-owner-npm-1.0.4-685ac3d2af-181e732764.zip +0 -0
  537. package/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip +0 -0
  538. package/.yarn/cache/inherits-npm-2.0.1-0011554c03-6536b93772.zip +0 -0
  539. package/.yarn/cache/inherits-npm-2.0.3-401e64b080-78cb8d7d85.zip +0 -0
  540. package/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip +0 -0
  541. package/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-dfd98b0ca3.zip +0 -0
  542. package/.yarn/cache/interpret-npm-1.4.0-17b4b5b0a4-2e5f51268b.zip +0 -0
  543. package/.yarn/cache/into-stream-npm-6.0.0-663ab596b2-8df24c9ead.zip +0 -0
  544. package/.yarn/cache/ip-npm-2.0.0-204facb3cc-cfcfac6b87.zip +0 -0
  545. package/.yarn/cache/ipaddr.js-npm-1.9.1-19ae7878b4-f88d382598.zip +0 -0
  546. package/.yarn/cache/is-accessor-descriptor-npm-0.1.6-41c495d517-3d629a086a.zip +0 -0
  547. package/.yarn/cache/is-accessor-descriptor-npm-1.0.0-d8ce016e98-8e475968e9.zip +0 -0
  548. package/.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-eef4417e3c.zip +0 -0
  549. package/.yarn/cache/is-binary-path-npm-1.0.1-9af74a6099-a803c99e9d.zip +0 -0
  550. package/.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip +0 -0
  551. package/.yarn/cache/is-buffer-npm-1.1.6-08199d9ccc-4a186d995d.zip +0 -0
  552. package/.yarn/cache/is-core-module-npm-2.11.0-70061e141a-f96fd490c6.zip +0 -0
  553. package/.yarn/cache/is-core-module-npm-2.9.0-5ba77c35ae-b27034318b.zip +0 -0
  554. package/.yarn/cache/is-data-descriptor-npm-0.1.4-6f53f71c67-5c622e078b.zip +0 -0
  555. package/.yarn/cache/is-data-descriptor-npm-1.0.0-f7d2e852ca-e705e68162.zip +0 -0
  556. package/.yarn/cache/is-descriptor-npm-0.1.6-15c7346839-0f780c1b46.zip +0 -0
  557. package/.yarn/cache/is-descriptor-npm-1.0.2-5cfc02c444-2ed623560b.zip +0 -0
  558. package/.yarn/cache/is-extendable-npm-0.1.1-322b4649ec-3875571d20.zip +0 -0
  559. package/.yarn/cache/is-extendable-npm-1.0.1-7095ad8b16-db07bc1e9d.zip +0 -0
  560. package/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip +0 -0
  561. package/.yarn/cache/is-fullwidth-code-point-npm-1.0.0-0e436ba1ef-4d46a7465a.zip +0 -0
  562. package/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip +0 -0
  563. package/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip +0 -0
  564. package/.yarn/cache/is-generator-fn-npm-2.1.0-37895c2d2b-a6ad5492cf.zip +0 -0
  565. package/.yarn/cache/is-glob-npm-3.1.0-ea0bd3271e-9d483bca84.zip +0 -0
  566. package/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip +0 -0
  567. package/.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip +0 -0
  568. package/.yarn/cache/is-module-npm-1.0.0-79ba918283-8cd5390730.zip +0 -0
  569. package/.yarn/cache/is-npm-0.2.7-e257f9c913-45cea1e6de.zip +0 -0
  570. package/.yarn/cache/is-number-npm-3.0.0-9088035ade-0c62bf8e9d.zip +0 -0
  571. package/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip +0 -0
  572. package/.yarn/cache/is-object-npm-0.1.2-411cb089a2-7e500b15f4.zip +0 -0
  573. package/.yarn/cache/is-path-inside-npm-4.0.0-2af2bde69d-8810fa11c5.zip +0 -0
  574. package/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip +0 -0
  575. package/.yarn/cache/is-plain-object-npm-2.0.4-da3265d804-2a401140cf.zip +0 -0
  576. package/.yarn/cache/is-reference-npm-1.2.1-87ca1743c8-e7b48149f8.zip +0 -0
  577. package/.yarn/cache/is-stream-npm-2.0.1-c802db55e7-b8e05ccdf9.zip +0 -0
  578. package/.yarn/cache/is-windows-npm-0.2.0-32c20e83a7-3df25afda2.zip +0 -0
  579. package/.yarn/cache/is-windows-npm-1.0.2-898cd6f3d7-438b7e5265.zip +0 -0
  580. package/.yarn/cache/is-wsl-npm-1.1.0-136e2b7c74-ea157d2323.zip +0 -0
  581. package/.yarn/cache/isarray-npm-0.0.1-92e37e0a70-49191f1425.zip +0 -0
  582. package/.yarn/cache/isarray-npm-1.0.0-db4f547720-f032df8e02.zip +0 -0
  583. package/.yarn/cache/isbuffer-npm-0.0.0-611307c00b-9796296d3c.zip +0 -0
  584. package/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip +0 -0
  585. package/.yarn/cache/isobject-npm-2.1.0-2798cf0d94-811c6f5a86.zip +0 -0
  586. package/.yarn/cache/isobject-npm-3.0.1-8145901fd2-db85c4c970.zip +0 -0
  587. package/.yarn/cache/istanbul-lib-coverage-npm-3.2.0-93f84b2c8c-a2a545033b.zip +0 -0
  588. package/.yarn/cache/istanbul-lib-instrument-npm-5.2.1-1b3ad719a9-bf16f1803b.zip +0 -0
  589. package/.yarn/cache/istanbul-lib-report-npm-3.0.0-660f97340a-3f29eb3f53.zip +0 -0
  590. package/.yarn/cache/istanbul-lib-source-maps-npm-4.0.1-af0f859df7-21ad3df45d.zip +0 -0
  591. package/.yarn/cache/istanbul-reports-npm-3.1.5-fb11324e3e-7867228f83.zip +0 -0
  592. package/.yarn/cache/jest-changed-files-npm-29.2.0-e1a1846230-8ad8290324.zip +0 -0
  593. package/.yarn/cache/jest-circus-npm-29.3.1-2cf671dde0-125710debd.zip +0 -0
  594. package/.yarn/cache/jest-cli-npm-29.3.1-4b4c5a01f0-829895d330.zip +0 -0
  595. package/.yarn/cache/jest-config-npm-29.3.1-7298217c60-6e663f04ae.zip +0 -0
  596. package/.yarn/cache/jest-dev-server-npm-6.2.0-d1120cf9c7-44dc5be5a9.zip +0 -0
  597. package/.yarn/cache/jest-diff-npm-29.3.1-267b436f67-ac5c09745f.zip +0 -0
  598. package/.yarn/cache/jest-docblock-npm-29.2.0-61320ddd7c-b3f1227b7d.zip +0 -0
  599. package/.yarn/cache/jest-each-npm-29.3.1-9c43754770-16d51ef8f9.zip +0 -0
  600. package/.yarn/cache/jest-environment-node-npm-27.5.1-2ecb71f8f5-0f988330c4.zip +0 -0
  601. package/.yarn/cache/jest-environment-node-npm-29.3.1-3b3592d4d8-16d4854bd2.zip +0 -0
  602. package/.yarn/cache/jest-environment-puppeteer-npm-6.2.0-ba58f41a37-8b9922e994.zip +0 -0
  603. package/.yarn/cache/jest-get-type-npm-29.2.0-47b45861f7-e396fd880a.zip +0 -0
  604. package/.yarn/cache/jest-haste-map-npm-29.3.1-9ea0c83627-97ea26af0c.zip +0 -0
  605. package/.yarn/cache/jest-leak-detector-npm-29.3.1-4354742a8c-0dd8ed31ae.zip +0 -0
  606. package/.yarn/cache/jest-matcher-utils-npm-29.3.1-5d9d00434d-311e8d9f1e.zip +0 -0
  607. package/.yarn/cache/jest-message-util-npm-27.5.1-6150700d58-eb6d637d14.zip +0 -0
  608. package/.yarn/cache/jest-message-util-npm-29.3.1-66a108a242-15d0a2fca3.zip +0 -0
  609. package/.yarn/cache/jest-mock-npm-27.5.1-22d1da854d-f5b5904bb1.zip +0 -0
  610. package/.yarn/cache/jest-mock-npm-29.3.1-45d1cf0a4c-9098852cb2.zip +0 -0
  611. package/.yarn/cache/jest-npm-29.3.1-598e75a9dd-613f4ec657.zip +0 -0
  612. package/.yarn/cache/jest-pnp-resolver-npm-1.2.3-70e06bf27c-db1a8ab2cb.zip +0 -0
  613. package/.yarn/cache/jest-puppeteer-npm-6.2.0-997c22fac0-9e2c917b68.zip +0 -0
  614. package/.yarn/cache/jest-regex-util-npm-29.2.0-50cc574fb1-7c533e51c5.zip +0 -0
  615. package/.yarn/cache/jest-resolve-dependencies-npm-29.3.1-89ec333e4d-6ec4727a87.zip +0 -0
  616. package/.yarn/cache/jest-resolve-npm-29.3.1-dc2be51619-0dea22ed62.zip +0 -0
  617. package/.yarn/cache/jest-runner-npm-29.3.1-931ad62288-61ad445d8a.zip +0 -0
  618. package/.yarn/cache/jest-runtime-npm-29.3.1-4afadd3ad9-82f27b48f0.zip +0 -0
  619. package/.yarn/cache/jest-snapshot-npm-29.3.1-532d5ba12d-d7d0077935.zip +0 -0
  620. package/.yarn/cache/jest-util-npm-27.5.1-26e68baa39-ac8d122f6d.zip +0 -0
  621. package/.yarn/cache/jest-util-npm-29.3.1-0394c5b084-f67c60f062.zip +0 -0
  622. package/.yarn/cache/jest-validate-npm-29.3.1-b684da7f88-92584f0b8a.zip +0 -0
  623. package/.yarn/cache/jest-watcher-npm-29.3.1-2fe48684ea-60d1894734.zip +0 -0
  624. package/.yarn/cache/jest-worker-npm-24.9.0-bcd452e3a8-bd23b6c872.zip +0 -0
  625. package/.yarn/cache/jest-worker-npm-26.6.2-46cbcd449f-f9afa3b88e.zip +0 -0
  626. package/.yarn/cache/jest-worker-npm-29.3.1-359b9ac79e-38687fcbdc.zip +0 -0
  627. package/.yarn/cache/joi-npm-17.7.0-24cbaab83c-767a847936.zip +0 -0
  628. package/.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-8a95213a5a.zip +0 -0
  629. package/.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-bef146085f.zip +0 -0
  630. package/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip +0 -0
  631. package/.yarn/cache/jsesc-npm-2.5.2-c5acb78804-4dc1907711.zip +0 -0
  632. package/.yarn/cache/json-parse-better-errors-npm-1.0.2-7f37637d19-ff2b5ba2a7.zip +0 -0
  633. package/.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-798ed4cf33.zip +0 -0
  634. package/.yarn/cache/json-schema-traverse-npm-0.4.1-4759091693-7486074d3b.zip +0 -0
  635. package/.yarn/cache/json5-npm-1.0.1-647fc8794b-e76ea23dbb.zip +0 -0
  636. package/.yarn/cache/json5-npm-2.2.2-b047c53fcb-9a878d66b7.zip +0 -0
  637. package/.yarn/cache/jsonc-parser-npm-3.2.0-1896ece3b7-946dd9a5f3.zip +0 -0
  638. package/.yarn/cache/jsonfile-npm-6.1.0-20a4796cee-7af3b8e1ac.zip +0 -0
  639. package/.yarn/cache/kind-of-npm-2.0.1-edc403c4d6-043df2943e.zip +0 -0
  640. package/.yarn/cache/kind-of-npm-3.2.2-7deaffa5f9-e898df8ca2.zip +0 -0
  641. package/.yarn/cache/kind-of-npm-4.0.0-69fd153375-1b9e7624a8.zip +0 -0
  642. package/.yarn/cache/kind-of-npm-5.1.0-ce82f43eaa-f2a0102ae0.zip +0 -0
  643. package/.yarn/cache/kind-of-npm-6.0.3-ab15f36220-3ab01e7b1d.zip +0 -0
  644. package/.yarn/cache/kleur-npm-3.0.3-f6f53649a4-df82cd1e17.zip +0 -0
  645. package/.yarn/cache/lazy-cache-npm-0.2.7-8dd3e8d6b1-b4538aff20.zip +0 -0
  646. package/.yarn/cache/lazy-cache-npm-1.0.4-0e91150466-e6650c22e5.zip +0 -0
  647. package/.yarn/cache/level-blobs-npm-0.1.7-eeb917d47b-e3cf78ef0b.zip +0 -0
  648. package/.yarn/cache/level-filesystem-npm-1.2.0-a54f2f6452-a29e6a9d8c.zip +0 -0
  649. package/.yarn/cache/level-fix-range-npm-1.0.2-1e1634340f-6c9a3894ea.zip +0 -0
  650. package/.yarn/cache/level-fix-range-npm-2.0.0-889f549f2f-250cefa69e.zip +0 -0
  651. package/.yarn/cache/level-hooks-npm-4.5.0-cc6839001c-f198ad2e09.zip +0 -0
  652. package/.yarn/cache/level-js-npm-2.2.4-8f1f810dd6-4fed784fcf.zip +0 -0
  653. package/.yarn/cache/level-peek-npm-1.0.6-d49a783698-e07d5f8b80.zip +0 -0
  654. package/.yarn/cache/level-sublevel-npm-5.2.3-374ca50d6c-f0fdffc2f9.zip +0 -0
  655. package/.yarn/cache/levelup-npm-0.18.6-d181e19f2e-80e140dd83.zip +0 -0
  656. package/.yarn/cache/leven-npm-3.1.0-b7697736a3-638401d534.zip +0 -0
  657. package/.yarn/cache/lilconfig-npm-2.0.6-6231346eaf-40a3cd72f1.zip +0 -0
  658. package/.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip +0 -0
  659. package/.yarn/cache/load-json-file-npm-4.0.0-c9f09d85eb-8f5d6d93ba.zip +0 -0
  660. package/.yarn/cache/loader-runner-npm-2.4.0-c414104c2f-e27eebbca5.zip +0 -0
  661. package/.yarn/cache/loader-utils-npm-1.4.2-b4537b2f88-eb6fb622ef.zip +0 -0
  662. package/.yarn/cache/loader-utils-npm-2.0.4-ba3800585b-a5281f5fff.zip +0 -0
  663. package/.yarn/cache/loader-utils-npm-3.2.1-76ae2fd253-4e3ea054cd.zip +0 -0
  664. package/.yarn/cache/locate-path-npm-3.0.0-991671ae9f-53db399667.zip +0 -0
  665. package/.yarn/cache/locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip +0 -0
  666. package/.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip +0 -0
  667. package/.yarn/cache/lodash-npm-4.17.21-6382451519-eb835a2e51.zip +0 -0
  668. package/.yarn/cache/lodash.camelcase-npm-4.3.0-bf268e3bf0-cb9227612f.zip +0 -0
  669. package/.yarn/cache/lodash.memoize-npm-4.1.2-0e6250041f-9ff3942fee.zip +0 -0
  670. package/.yarn/cache/lodash.uniq-npm-4.5.0-7c270dca85-a4779b57a8.zip +0 -0
  671. package/.yarn/cache/lower-case-npm-1.1.4-9880e9dcb0-1ca9393b5e.zip +0 -0
  672. package/.yarn/cache/lru-cache-npm-5.1.1-f475882a51-c154ae1cbb.zip +0 -0
  673. package/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip +0 -0
  674. package/.yarn/cache/lru-cache-npm-7.14.1-d3ba9407b6-d72c6713c6.zip +0 -0
  675. package/.yarn/cache/ltgt-npm-2.2.1-443b5da86d-7e3874296f.zip +0 -0
  676. package/.yarn/cache/lunr-npm-2.3.9-fa3aa9c2d6-176719e24f.zip +0 -0
  677. package/.yarn/cache/magic-string-npm-0.22.5-e79d8a06eb-e4d8b2083e.zip +0 -0
  678. package/.yarn/cache/magic-string-npm-0.25.9-0b51c0ea50-9a0e55a15c.zip +0 -0
  679. package/.yarn/cache/make-dir-npm-2.1.0-1ddaf205e7-043548886b.zip +0 -0
  680. package/.yarn/cache/make-dir-npm-3.1.0-d1d7505142-484200020a.zip +0 -0
  681. package/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip +0 -0
  682. package/.yarn/cache/make-fetch-happen-npm-10.2.1-f1cc7cd2df-2332eb9a8e.zip +0 -0
  683. package/.yarn/cache/makeerror-npm-1.0.12-69abf085d7-b38a025a12.zip +0 -0
  684. package/.yarn/cache/map-cache-npm-0.2.2-1620199b05-3067cea542.zip +0 -0
  685. package/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-9949e7baec.zip +0 -0
  686. package/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip +0 -0
  687. package/.yarn/cache/map-visit-npm-1.0.0-33a7988a9d-c27045a502.zip +0 -0
  688. package/.yarn/cache/marked-npm-4.2.5-6c3ba1368a-dd7da20a39.zip +0 -0
  689. package/.yarn/cache/md5.js-npm-1.3.5-130901125a-098494d885.zip +0 -0
  690. package/.yarn/cache/mdn-data-npm-2.0.14-0acd669f0d-9d0128ed42.zip +0 -0
  691. package/.yarn/cache/media-typer-npm-0.3.0-8674f8f0f5-af1b38516c.zip +0 -0
  692. package/.yarn/cache/memfs-npm-3.4.12-22a464cc9b-dab8dec1ae.zip +0 -0
  693. package/.yarn/cache/memory-fs-npm-0.4.1-0a5f9b8954-6db6c8682e.zip +0 -0
  694. package/.yarn/cache/memory-fs-npm-0.5.0-8be5938449-a9f25b0a8e.zip +0 -0
  695. package/.yarn/cache/meow-npm-10.1.5-a1bab640d1-dd5f0caa4a.zip +0 -0
  696. package/.yarn/cache/merge-deep-npm-3.0.3-e96944214b-d2eb367b83.zip +0 -0
  697. package/.yarn/cache/merge-descriptors-npm-1.0.1-615287aaa8-5abc259d2a.zip +0 -0
  698. package/.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip +0 -0
  699. package/.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip +0 -0
  700. package/.yarn/cache/methods-npm-1.1.2-92f6fdb39b-0917ff4041.zip +0 -0
  701. package/.yarn/cache/micromatch-npm-3.1.10-016e80c79d-ad226cba4d.zip +0 -0
  702. package/.yarn/cache/micromatch-npm-4.0.5-cfab5d7669-02a17b671c.zip +0 -0
  703. package/.yarn/cache/miller-rabin-npm-4.0.1-3426ac0bf7-00cd1ab838.zip +0 -0
  704. package/.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-0d99a03585.zip +0 -0
  705. package/.yarn/cache/mime-npm-1.6.0-60ae95038a-fef25e3926.zip +0 -0
  706. package/.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89a5b7f1de.zip +0 -0
  707. package/.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip +0 -0
  708. package/.yarn/cache/mimic-response-npm-2.1.0-037463e454-014fad6ab9.zip +0 -0
  709. package/.yarn/cache/min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip +0 -0
  710. package/.yarn/cache/minimalistic-assert-npm-1.0.1-dc8bb23d29-cc7974a926.zip +0 -0
  711. package/.yarn/cache/minimalistic-crypto-utils-npm-1.0.1-e66b10822e-6e8a0422b3.zip +0 -0
  712. package/.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip +0 -0
  713. package/.yarn/cache/minimatch-npm-5.1.2-3778b46e0e-32ffda25b9.zip +0 -0
  714. package/.yarn/cache/minimist-npm-1.2.7-51d33b1371-7346574a10.zip +0 -0
  715. package/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip +0 -0
  716. package/.yarn/cache/minipass-collect-npm-1.0.2-3b4676eab5-14df761028.zip +0 -0
  717. package/.yarn/cache/minipass-fetch-npm-2.1.2-9b21a5c930-3f216be791.zip +0 -0
  718. package/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip +0 -0
  719. package/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip +0 -0
  720. package/.yarn/cache/minipass-npm-4.0.0-2520d5ae3c-7a609afbf3.zip +0 -0
  721. package/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip +0 -0
  722. package/.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip +0 -0
  723. package/.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip +0 -0
  724. package/.yarn/cache/mississippi-npm-3.0.0-02447e293b-84b3d98896.zip +0 -0
  725. package/.yarn/cache/mixin-deep-npm-1.3.2-29b528e571-820d5a51fc.zip +0 -0
  726. package/.yarn/cache/mixin-object-npm-2.0.1-adaa8c630a-7d0eb7c2f0.zip +0 -0
  727. package/.yarn/cache/mkdirp-classic-npm-0.5.3-3b5c991910-3f4e088208.zip +0 -0
  728. package/.yarn/cache/mkdirp-npm-0.5.6-dcd5a6b97b-0c91b721bb.zip +0 -0
  729. package/.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip +0 -0
  730. package/.yarn/cache/mock-socket-npm-9.1.5-740390bc29-a01586bc28.zip +0 -0
  731. package/.yarn/cache/mount-point-npm-3.0.0-4a214c8cd1-edb588e613.zip +0 -0
  732. package/.yarn/cache/move-concurrently-npm-1.0.1-e1e3c7e2cf-4ea3296c15.zip +0 -0
  733. package/.yarn/cache/move-file-npm-3.0.0-60fa241416-18b0a542b4.zip +0 -0
  734. package/.yarn/cache/ms-npm-2.0.0-9e1101a471-0e6a22b8b7.zip +0 -0
  735. package/.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip +0 -0
  736. package/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip +0 -0
  737. package/.yarn/cache/multistream-npm-4.1.0-0df2458b36-305c49a1aa.zip +0 -0
  738. package/.yarn/cache/nan-npm-2.17.0-bf36a21d6f-ec609aeaf7.zip +0 -0
  739. package/.yarn/cache/nanomatch-npm-1.2.13-bc9173dbe7-54d4166d6e.zip +0 -0
  740. package/.yarn/cache/napi-build-utils-npm-1.0.2-892e4bba56-06c14271ee.zip +0 -0
  741. package/.yarn/cache/natural-compare-npm-1.4.0-97b75b362d-23ad088b08.zip +0 -0
  742. package/.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip +0 -0
  743. package/.yarn/cache/neo-async-npm-2.6.2-75d6902586-deac9f8d00.zip +0 -0
  744. package/.yarn/cache/nice-try-npm-1.0.5-963856b16f-0b4af3b5bb.zip +0 -0
  745. package/.yarn/cache/no-case-npm-2.3.2-5403767f87-8564877319.zip +0 -0
  746. package/.yarn/cache/node-abi-npm-2.30.1-36a2c4e28a-3f4b0c912c.zip +0 -0
  747. package/.yarn/cache/node-abort-controller-npm-3.0.1-0ee00c2bea-2b3d75c652.zip +0 -0
  748. package/.yarn/cache/node-fetch-npm-2.6.7-777aa2a6df-8d816ffd1e.zip +0 -0
  749. package/.yarn/cache/node-forge-npm-1.3.1-f31fd566cc-08fb072d3d.zip +0 -0
  750. package/.yarn/cache/node-gyp-npm-9.3.1-43540bab9c-b860e9976f.zip +0 -0
  751. package/.yarn/cache/node-int64-npm-0.4.0-0dc04ec3b2-d0b30b1ee6.zip +0 -0
  752. package/.yarn/cache/node-libs-browser-npm-2.2.1-ffef534730-41fa792737.zip +0 -0
  753. package/.yarn/cache/node-releases-npm-2.0.8-1733e5f247-b1ab02c0d5.zip +0 -0
  754. package/.yarn/cache/noms-npm-0.0.0-86eacf416e-a05f056dab.zip +0 -0
  755. package/.yarn/cache/nopt-npm-6.0.0-5ea8050815-82149371f8.zip +0 -0
  756. package/.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-7999112efc.zip +0 -0
  757. package/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-bbcee00339.zip +0 -0
  758. package/.yarn/cache/normalize-path-npm-2.1.1-65c4766716-7e9cbdcf7f.zip +0 -0
  759. package/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip +0 -0
  760. package/.yarn/cache/normalize-url-npm-6.1.0-b95bc12ece-4a49446311.zip +0 -0
  761. package/.yarn/cache/npm-run-path-npm-3.1.0-dd7b0fa1be-141e0b8f0e.zip +0 -0
  762. package/.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip +0 -0
  763. package/.yarn/cache/npmlog-npm-4.1.2-cfb32957b5-edbda9f95e.zip +0 -0
  764. package/.yarn/cache/npmlog-npm-6.0.2-e0e69455c7-ae238cd264.zip +0 -0
  765. package/.yarn/cache/nth-check-npm-2.1.1-f97afc8169-5afc3dafcd.zip +0 -0
  766. package/.yarn/cache/number-is-nan-npm-1.0.1-845325a0fe-13656bc9aa.zip +0 -0
  767. package/.yarn/cache/object-assign-npm-4.1.1-1004ad6dec-fcc6e4ea8c.zip +0 -0
  768. package/.yarn/cache/object-copy-npm-0.1.0-e229d02f2b-a9e35f07e3.zip +0 -0
  769. package/.yarn/cache/object-inspect-npm-1.12.2-f125a822c0-a534fc1b85.zip +0 -0
  770. package/.yarn/cache/object-keys-npm-0.2.0-4e6a542952-4b96bab88f.zip +0 -0
  771. package/.yarn/cache/object-keys-npm-0.4.0-040f043796-1be3ebe9b4.zip +0 -0
  772. package/.yarn/cache/object-visit-npm-1.0.1-c5c9057c24-b0ee07f5bf.zip +0 -0
  773. package/.yarn/cache/object.pick-npm-1.3.0-dad8eae8fb-77fb6eed57.zip +0 -0
  774. package/.yarn/cache/octal-npm-1.0.0-db71d268f5-d648917f4f.zip +0 -0
  775. package/.yarn/cache/on-finished-npm-2.4.1-907af70f88-d20929a25e.zip +0 -0
  776. package/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip +0 -0
  777. package/.yarn/cache/onetime-npm-5.1.2-3ed148fa42-2478859ef8.zip +0 -0
  778. package/.yarn/cache/opener-npm-1.5.2-7a1aa69f14-33b620c0d5.zip +0 -0
  779. package/.yarn/cache/os-browserify-npm-0.3.0-cbc91c79a5-16e37ba3c0.zip +0 -0
  780. package/.yarn/cache/os-homedir-npm-1.0.2-01f82faa88-af609f5a7a.zip +0 -0
  781. package/.yarn/cache/p-finally-npm-1.0.0-35fbaa57c6-93a654c53d.zip +0 -0
  782. package/.yarn/cache/p-finally-npm-2.0.1-b59964aa17-6306a2851c.zip +0 -0
  783. package/.yarn/cache/p-is-promise-npm-3.0.0-a3c472793c-74e511225f.zip +0 -0
  784. package/.yarn/cache/p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip +0 -0
  785. package/.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip +0 -0
  786. package/.yarn/cache/p-locate-npm-3.0.0-74de74f952-83991734a9.zip +0 -0
  787. package/.yarn/cache/p-locate-npm-4.1.0-eec6872537-513bd14a45.zip +0 -0
  788. package/.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip +0 -0
  789. package/.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip +0 -0
  790. package/.yarn/cache/p-map-npm-5.5.0-9758eb14ee-065cb6fca6.zip +0 -0
  791. package/.yarn/cache/p-queue-npm-6.6.2-b173c5bfa8-832642fcc4.zip +0 -0
  792. package/.yarn/cache/p-timeout-npm-3.2.0-7fdb33f733-3dd0eaa048.zip +0 -0
  793. package/.yarn/cache/p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip +0 -0
  794. package/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip +0 -0
  795. package/.yarn/cache/parallel-transform-npm-1.2.0-4985a87bcf-ab6ddc1a66.zip +0 -0
  796. package/.yarn/cache/param-case-npm-2.1.1-e0aef3c289-3a63dcb8d8.zip +0 -0
  797. package/.yarn/cache/parent-module-npm-1.0.1-1fae11b095-6ba8b25514.zip +0 -0
  798. package/.yarn/cache/parse-asn1-npm-5.1.6-6cc3a6eeae-9243311d1f.zip +0 -0
  799. package/.yarn/cache/parse-json-npm-4.0.0-a6f7771010-0fe227d410.zip +0 -0
  800. package/.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip +0 -0
  801. package/.yarn/cache/parse-passwd-npm-1.0.0-ace6effa1d-4e55e0231d.zip +0 -0
  802. package/.yarn/cache/parseurl-npm-1.3.3-1542397e00-407cee8e0a.zip +0 -0
  803. package/.yarn/cache/pascalcase-npm-0.1.1-d04964fcda-f83681c3c8.zip +0 -0
  804. package/.yarn/cache/path-browserify-npm-0.0.1-bb8b2a97b1-ae8dcd45d0.zip +0 -0
  805. package/.yarn/cache/path-dirname-npm-1.0.2-d158cba006-0d2f6604ae.zip +0 -0
  806. package/.yarn/cache/path-exists-npm-3.0.0-e80371aa68-96e92643aa.zip +0 -0
  807. package/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip +0 -0
  808. package/.yarn/cache/path-exists-npm-5.0.0-0bf403c56c-8ca842868c.zip +0 -0
  809. package/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip +0 -0
  810. package/.yarn/cache/path-key-npm-2.0.1-b1a971833d-f7ab0ad42f.zip +0 -0
  811. package/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip +0 -0
  812. package/.yarn/cache/path-parse-npm-1.0.7-09564527b7-49abf3d811.zip +0 -0
  813. package/.yarn/cache/path-to-regexp-npm-0.1.7-2605347373-69a14ea24d.zip +0 -0
  814. package/.yarn/cache/path-type-npm-3.0.0-252361a0eb-735b35e256.zip +0 -0
  815. package/.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip +0 -0
  816. package/.yarn/cache/pbkdf2-npm-3.1.2-d67bbb584f-2c950a100b.zip +0 -0
  817. package/.yarn/cache/pend-npm-1.2.0-7a13d93266-6c72f52433.zip +0 -0
  818. package/.yarn/cache/picocolors-npm-1.0.0-d81e0b1927-a2e8092dd8.zip +0 -0
  819. package/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip +0 -0
  820. package/.yarn/cache/pify-npm-2.3.0-8b63310934-9503aaeaf4.zip +0 -0
  821. package/.yarn/cache/pify-npm-3.0.0-679ee405c8-6cdcbc3567.zip +0 -0
  822. package/.yarn/cache/pify-npm-4.0.1-062756097b-9c4e34278c.zip +0 -0
  823. package/.yarn/cache/pify-npm-5.0.0-f5abe8ab8d-443e3e198a.zip +0 -0
  824. package/.yarn/cache/pinkie-npm-2.0.4-cffce4fb09-b12b10afea.zip +0 -0
  825. package/.yarn/cache/pinkie-promise-npm-2.0.1-095439b8c5-b53a4a2e73.zip +0 -0
  826. package/.yarn/cache/pirates-npm-4.0.5-22f8e827ce-c9994e61b8.zip +0 -0
  827. package/.yarn/cache/pkg-dir-npm-3.0.0-16d8d93783-70c9476ffe.zip +0 -0
  828. package/.yarn/cache/pkg-dir-npm-4.2.0-2b5d0a8d32-9863e3f351.zip +0 -0
  829. package/.yarn/cache/pkg-fetch-npm-3.4.2-2669e3068c-e0f73cedf6.zip +0 -0
  830. package/.yarn/cache/pkg-npm-5.8.0-f9fed71dd1-eb85975275.zip +0 -0
  831. package/.yarn/cache/posix-character-classes-npm-0.1.1-3e228a6e15-dedb99913c.zip +0 -0
  832. package/.yarn/cache/postcss-calc-npm-8.2.4-9d59948567-314b4cebb0.zip +0 -0
  833. package/.yarn/cache/postcss-colormin-npm-5.3.0-a0a0e0e004-3d3e3cc250.zip +0 -0
  834. package/.yarn/cache/postcss-convert-values-npm-5.1.3-3ce12e6ef0-df48cdaffa.zip +0 -0
  835. package/.yarn/cache/postcss-discard-comments-npm-5.1.2-9f30a2d082-abfd064ebc.zip +0 -0
  836. package/.yarn/cache/postcss-discard-duplicates-npm-5.1.0-c9479e6afc-88d6964201.zip +0 -0
  837. package/.yarn/cache/postcss-discard-empty-npm-5.1.1-7a8ea765fa-970adb12fa.zip +0 -0
  838. package/.yarn/cache/postcss-discard-overridden-npm-5.1.0-0d3b10779a-d64d4a545a.zip +0 -0
  839. package/.yarn/cache/postcss-load-config-npm-3.1.4-1cb8a7e276-1c589504c2.zip +0 -0
  840. package/.yarn/cache/postcss-merge-longhand-npm-5.1.7-8fd86b0b8a-81c3fc809f.zip +0 -0
  841. package/.yarn/cache/postcss-merge-rules-npm-5.1.3-de0adc00f9-0ddaddff98.zip +0 -0
  842. package/.yarn/cache/postcss-minify-font-values-npm-5.1.0-8f34fc7a1f-35e858fa41.zip +0 -0
  843. package/.yarn/cache/postcss-minify-gradients-npm-5.1.1-ec88a4bfbc-27354072a0.zip +0 -0
  844. package/.yarn/cache/postcss-minify-params-npm-5.1.4-e2313887a4-bd63e2cc89.zip +0 -0
  845. package/.yarn/cache/postcss-minify-selectors-npm-5.2.1-33a6509bbc-6fdbc84f99.zip +0 -0
  846. package/.yarn/cache/postcss-modules-extract-imports-npm-3.0.0-619311282d-4b65f2f138.zip +0 -0
  847. package/.yarn/cache/postcss-modules-local-by-default-npm-4.0.0-794014f0a5-6cf570badc.zip +0 -0
  848. package/.yarn/cache/postcss-modules-npm-4.3.1-85d6d65d8e-fa592183bb.zip +0 -0
  849. package/.yarn/cache/postcss-modules-npm-6.0.0-449d3dd9dd-3bfcfabc06.zip +0 -0
  850. package/.yarn/cache/postcss-modules-scope-npm-3.0.0-0678040a26-330b9398db.zip +0 -0
  851. package/.yarn/cache/postcss-modules-values-npm-4.0.0-63d7ec543a-f7f2cdf14a.zip +0 -0
  852. package/.yarn/cache/postcss-normalize-charset-npm-5.1.0-13c3339544-e79d92971f.zip +0 -0
  853. package/.yarn/cache/postcss-normalize-display-values-npm-5.1.0-ae5985a0b0-b6eb7b9b02.zip +0 -0
  854. package/.yarn/cache/postcss-normalize-positions-npm-5.1.1-82275c9405-d9afc23372.zip +0 -0
  855. package/.yarn/cache/postcss-normalize-repeat-style-npm-5.1.1-dd2adac3b3-2c6ad2b0ae.zip +0 -0
  856. package/.yarn/cache/postcss-normalize-string-npm-5.1.0-bf32e478d0-6e549c6e5b.zip +0 -0
  857. package/.yarn/cache/postcss-normalize-timing-functions-npm-5.1.0-fa42b95b44-da550f50e9.zip +0 -0
  858. package/.yarn/cache/postcss-normalize-unicode-npm-5.1.1-1a2f9f5f45-4c24d26cc9.zip +0 -0
  859. package/.yarn/cache/postcss-normalize-url-npm-5.1.0-82c6c0bb7b-3bd4b3246d.zip +0 -0
  860. package/.yarn/cache/postcss-normalize-whitespace-npm-5.1.1-ff5cb53565-12d8fb6d1c.zip +0 -0
  861. package/.yarn/cache/postcss-ordered-values-npm-5.1.3-c12ebfb39c-6f3ca85b6c.zip +0 -0
  862. package/.yarn/cache/postcss-reduce-initial-npm-5.1.1-4d71e527ab-1b704aba8c.zip +0 -0
  863. package/.yarn/cache/postcss-reduce-transforms-npm-5.1.0-f02f02d8ba-0c6af2cba2.zip +0 -0
  864. package/.yarn/cache/postcss-selector-parser-npm-6.0.11-b2f8bf39d3-0b01aa9c2d.zip +0 -0
  865. package/.yarn/cache/postcss-svgo-npm-5.1.0-6165516934-d86eb5213d.zip +0 -0
  866. package/.yarn/cache/postcss-unique-selectors-npm-5.1.1-ed729740f2-637e7b786e.zip +0 -0
  867. package/.yarn/cache/postcss-value-parser-npm-4.2.0-3cef602a6a-819ffab0c9.zip +0 -0
  868. package/.yarn/cache/prebuild-install-npm-6.1.4-dba03730c6-de4313eda8.zip +0 -0
  869. package/.yarn/cache/pretty-format-npm-27.5.1-cd7d49696f-cf610cffcb.zip +0 -0
  870. package/.yarn/cache/pretty-format-npm-29.3.1-cf42cb4acb-9917a0bb85.zip +0 -0
  871. package/.yarn/cache/process-es6-npm-0.11.6-ec3251341b-8849ea1a79.zip +0 -0
  872. package/.yarn/cache/process-nextick-args-npm-2.0.1-b8d7971609-1d38588e52.zip +0 -0
  873. package/.yarn/cache/process-npm-0.11.10-aeb3b641ae-bfcce49814.zip +0 -0
  874. package/.yarn/cache/progress-npm-2.0.3-d1f87e2ac6-f67403fe7b.zip +0 -0
  875. package/.yarn/cache/promise-inflight-npm-1.0.1-5bb925afac-2274948309.zip +0 -0
  876. package/.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip +0 -0
  877. package/.yarn/cache/promise.series-npm-0.2.0-286288dd11-26b5956b54.zip +0 -0
  878. package/.yarn/cache/prompts-npm-2.4.2-f5d25d5eea-d8fd1fe638.zip +0 -0
  879. package/.yarn/cache/proxy-addr-npm-2.0.7-dae6552872-29c6990ce9.zip +0 -0
  880. package/.yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-ed7fcc2ba0.zip +0 -0
  881. package/.yarn/cache/prr-npm-0.0.0-ac77d4047b-6552d9d92d.zip +0 -0
  882. package/.yarn/cache/prr-npm-1.0.1-608d442761-3bca2db047.zip +0 -0
  883. package/.yarn/cache/public-encrypt-npm-4.0.3-b25e19fada-215d446e43.zip +0 -0
  884. package/.yarn/cache/pump-npm-2.0.1-05afac7fc4-e9f26a17be.zip +0 -0
  885. package/.yarn/cache/pump-npm-3.0.0-0080bf6a7a-e42e9229fb.zip +0 -0
  886. package/.yarn/cache/pumpify-npm-1.5.1-b928bd877f-26ca412ec8.zip +0 -0
  887. package/.yarn/cache/punycode-npm-1.3.2-3727a84cea-b8807fd594.zip +0 -0
  888. package/.yarn/cache/punycode-npm-1.4.1-be4c23e6d2-fa6e698cb5.zip +0 -0
  889. package/.yarn/cache/punycode-npm-2.1.1-26eb3e15cf-823bf443c6.zip +0 -0
  890. package/.yarn/cache/puppeteer-core-npm-19.4.1-16c7ada4a2-f4db1aa1d1.zip +0 -0
  891. package/.yarn/cache/puppeteer-npm-19.4.1-ac367b236c-14b6bd8d5f.zip +0 -0
  892. package/.yarn/cache/qs-npm-6.11.0-caf1bc9dea-6e1f29dd53.zip +0 -0
  893. package/.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip +0 -0
  894. package/.yarn/cache/querystring-npm-0.2.0-421b870c92-8258d6734f.zip +0 -0
  895. package/.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-b676f8c040.zip +0 -0
  896. package/.yarn/cache/quick-lru-npm-5.1.1-e38e0edce3-a516faa255.zip +0 -0
  897. package/.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip +0 -0
  898. package/.yarn/cache/randomfill-npm-1.0.4-a08651a679-33734bb578.zip +0 -0
  899. package/.yarn/cache/range-parser-npm-1.2.1-1a470fa390-0a268d4fea.zip +0 -0
  900. package/.yarn/cache/raw-body-npm-2.5.1-9dd1d9fff9-5362adff15.zip +0 -0
  901. package/.yarn/cache/rc-npm-1.2.8-d6768ac936-2e26e052f8.zip +0 -0
  902. package/.yarn/cache/react-is-npm-17.0.2-091bbb8db6-9d6d111d89.zip +0 -0
  903. package/.yarn/cache/react-is-npm-18.2.0-0cc5edb910-e72d0ba81b.zip +0 -0
  904. package/.yarn/cache/read-pkg-npm-3.0.0-41471436cb-398903ebae.zip +0 -0
  905. package/.yarn/cache/read-pkg-npm-6.0.0-d89ce14684-0cebdff381.zip +0 -0
  906. package/.yarn/cache/read-pkg-up-npm-8.0.0-6f39941cc9-fe4c804016.zip +0 -0
  907. package/.yarn/cache/readable-stream-npm-1.0.34-db63158f3f-85042c537e.zip +0 -0
  908. package/.yarn/cache/readable-stream-npm-1.1.14-41e61d1768-17dfeae3e9.zip +0 -0
  909. package/.yarn/cache/readable-stream-npm-2.3.7-77b22a9818-e4920cf754.zip +0 -0
  910. package/.yarn/cache/readable-stream-npm-3.6.0-23a4a5eb56-d4ea81502d.zip +0 -0
  911. package/.yarn/cache/readdirp-npm-2.2.1-33cb5df2b8-3879b20f1a.zip +0 -0
  912. package/.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip +0 -0
  913. package/.yarn/cache/redent-npm-4.0.0-67da39f156-6944e7b1d8.zip +0 -0
  914. package/.yarn/cache/reflect-metadata-npm-0.1.13-c525998e20-798d379a7b.zip +0 -0
  915. package/.yarn/cache/regex-not-npm-1.0.2-06a03c9206-3081403de7.zip +0 -0
  916. package/.yarn/cache/relateurl-npm-0.2.7-7687cc0a2a-5891e792ea.zip +0 -0
  917. package/.yarn/cache/remove-trailing-separator-npm-1.1.0-16d7231316-d3c20b5a2d.zip +0 -0
  918. package/.yarn/cache/repeat-element-npm-1.1.4-7e649ab5b1-1edd0301b7.zip +0 -0
  919. package/.yarn/cache/repeat-string-npm-1.6.1-bc8e388655-1b809fc6db.zip +0 -0
  920. package/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip +0 -0
  921. package/.yarn/cache/require-main-filename-npm-2.0.0-03eef65c84-e9e294695f.zip +0 -0
  922. package/.yarn/cache/reserved-words-npm-0.1.2-eed4b16ca9-72e80f71dc.zip +0 -0
  923. package/.yarn/cache/resolve-cwd-npm-2.0.0-cce7da6fd4-e7c16880c4.zip +0 -0
  924. package/.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-546e081601.zip +0 -0
  925. package/.yarn/cache/resolve-dir-npm-0.1.1-0debfbb554-cc3e188593.zip +0 -0
  926. package/.yarn/cache/resolve-dir-npm-1.0.1-0a95903c18-ef736b8ed6.zip +0 -0
  927. package/.yarn/cache/resolve-from-npm-3.0.0-0bff35697e-fff9819254.zip +0 -0
  928. package/.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-f4ba0b8494.zip +0 -0
  929. package/.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-4ceeb9113e.zip +0 -0
  930. package/.yarn/cache/resolve-npm-1.22.1-3980488690-07af5fc1e8.zip +0 -0
  931. package/.yarn/cache/resolve-patch-0c52e0e4f7-5656f4d0be.zip +0 -0
  932. package/.yarn/cache/resolve-url-npm-0.2.1-39edb8f908-7b7035b9ed.zip +0 -0
  933. package/.yarn/cache/resolve.exports-npm-1.1.0-81756e03ba-52865af8ed.zip +0 -0
  934. package/.yarn/cache/ret-npm-0.1.15-0d3c19de76-d76a9159eb.zip +0 -0
  935. package/.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip +0 -0
  936. package/.yarn/cache/reusify-npm-1.0.4-95ac4aec11-c3076ebcc2.zip +0 -0
  937. package/.yarn/cache/rimraf-npm-2.7.1-9a71f3cc37-cdc7f6eacb.zip +0 -0
  938. package/.yarn/cache/rimraf-npm-3.0.2-2cb7dac69a-87f4164e39.zip +0 -0
  939. package/.yarn/cache/ripemd160-npm-2.0.2-7b1fb8dc76-006accc405.zip +0 -0
  940. package/.yarn/cache/rollup-npm-3.8.1-f566d5b4ab-89ad4df4a5.zip +0 -0
  941. package/.yarn/cache/rollup-plugin-auto-external-npm-2.0.0-7bae10896b-316751e048.zip +0 -0
  942. package/.yarn/cache/rollup-plugin-commonjs-npm-10.1.0-6b5ee23ea9-396fc4d536.zip +0 -0
  943. package/.yarn/cache/rollup-plugin-html-npm-0.2.1-75ada6966a-8fdaae2cb9.zip +0 -0
  944. package/.yarn/cache/rollup-plugin-json-npm-4.0.0-e8ff255b44-7843545a8c.zip +0 -0
  945. package/.yarn/cache/rollup-plugin-node-builtins-npm-2.1.2-9434d1c582-184338123f.zip +0 -0
  946. package/.yarn/cache/rollup-plugin-node-globals-npm-1.4.0-24b67c24aa-da3cd85ad2.zip +0 -0
  947. package/.yarn/cache/rollup-plugin-node-resolve-npm-5.2.0-6af239ea59-29687721d2.zip +0 -0
  948. package/.yarn/cache/rollup-plugin-postcss-modules-npm-2.1.0-4736942b9b-98c406af35.zip +0 -0
  949. package/.yarn/cache/rollup-plugin-postcss-npm-4.0.2-6f4a722324-67875e024f.zip +0 -0
  950. package/.yarn/cache/rollup-plugin-terser-npm-5.3.1-825cbdcec7-50f9e8fa67.zip +0 -0
  951. package/.yarn/cache/rollup-plugin-typescript2-npm-0.34.1-6b67180d5c-107e66b9ab.zip +0 -0
  952. package/.yarn/cache/rollup-pluginutils-npm-1.5.2-ae09e53294-8c669c0b3d.zip +0 -0
  953. package/.yarn/cache/rollup-pluginutils-npm-2.8.2-f554dd6ac5-339fdf866d.zip +0 -0
  954. package/.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip +0 -0
  955. package/.yarn/cache/run-queue-npm-1.0.3-a704fcadc0-c4541e18b5.zip +0 -0
  956. package/.yarn/cache/rxjs-npm-7.8.0-722f1c7172-61b4d4fd32.zip +0 -0
  957. package/.yarn/cache/safe-buffer-npm-5.1.2-c27fedf6c4-f2f1f7943c.zip +0 -0
  958. package/.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip +0 -0
  959. package/.yarn/cache/safe-identifier-npm-0.4.2-57e7a2b138-67e28ed89a.zip +0 -0
  960. package/.yarn/cache/safe-regex-npm-1.1.0-a908e8515c-9a8bba57c8.zip +0 -0
  961. package/.yarn/cache/safe-resolve-npm-1.0.0-9f7af55f86-3a1ea6bc72.zip +0 -0
  962. package/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip +0 -0
  963. package/.yarn/cache/schema-utils-npm-1.0.0-2b49db17d1-e8273b4f6e.zip +0 -0
  964. package/.yarn/cache/schema-utils-npm-3.1.1-8704647575-fb73f3d759.zip +0 -0
  965. package/.yarn/cache/selfsigned-npm-2.1.1-311d9b0b6d-aa9ce2150a.zip +0 -0
  966. package/.yarn/cache/semver-npm-2.3.2-c256fd5557-e0649fb18a.zip +0 -0
  967. package/.yarn/cache/semver-npm-5.7.1-40bcea106b-57fd0acfd0.zip +0 -0
  968. package/.yarn/cache/semver-npm-6.3.0-b3eace8bfd-1b26ecf6db.zip +0 -0
  969. package/.yarn/cache/semver-npm-7.3.8-25a996cb4f-ba9c7cbbf2.zip +0 -0
  970. package/.yarn/cache/send-npm-0.18.0-faadf6353f-74fc07ebb5.zip +0 -0
  971. package/.yarn/cache/serialize-javascript-npm-4.0.0-b4aeff413b-3273b3394b.zip +0 -0
  972. package/.yarn/cache/serialize-javascript-npm-5.0.1-8ffc173f09-bb45a42769.zip +0 -0
  973. package/.yarn/cache/serve-static-npm-1.15.0-86c81879f5-af57fc13be.zip +0 -0
  974. package/.yarn/cache/set-blocking-npm-2.0.0-49e2cffa24-6e65a05f7c.zip +0 -0
  975. package/.yarn/cache/set-value-npm-2.0.1-35da5f8180-09a4bc72c9.zip +0 -0
  976. package/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip +0 -0
  977. package/.yarn/cache/setprototypeof-npm-1.2.0-0fedbdcd3a-be18cbbf70.zip +0 -0
  978. package/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip +0 -0
  979. package/.yarn/cache/shallow-clone-npm-0.1.2-a6ddd26af6-cc4c85c6e4.zip +0 -0
  980. package/.yarn/cache/shebang-command-npm-1.2.0-8990ba5d1d-9eed175030.zip +0 -0
  981. package/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip +0 -0
  982. package/.yarn/cache/shebang-regex-npm-1.0.0-c3612b74e9-404c5a752c.zip +0 -0
  983. package/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip +0 -0
  984. package/.yarn/cache/shiki-npm-0.11.1-b9c0a01cc1-2a4ebc3b46.zip +0 -0
  985. package/.yarn/cache/side-channel-npm-1.0.4-e1f38b9e06-351e41b947.zip +0 -0
  986. package/.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip +0 -0
  987. package/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4d211042cc.zip +0 -0
  988. package/.yarn/cache/simple-get-npm-3.1.1-dce5923dba-80195e70bf.zip +0 -0
  989. package/.yarn/cache/sisteransi-npm-1.0.5-af60cc0cfa-aba6438f46.zip +0 -0
  990. package/.yarn/cache/slash-npm-1.0.0-a244873c30-4b6e21b1fb.zip +0 -0
  991. package/.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip +0 -0
  992. package/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip +0 -0
  993. package/.yarn/cache/snapdragon-node-npm-2.1.1-78bc70e8e2-9bb57d759f.zip +0 -0
  994. package/.yarn/cache/snapdragon-npm-0.8.2-2bcc47d217-a197f242a8.zip +0 -0
  995. package/.yarn/cache/snapdragon-util-npm-3.0.1-36b5a7829d-684997dbe3.zip +0 -0
  996. package/.yarn/cache/socks-npm-2.7.1-17f2b53052-259d9e3e8e.zip +0 -0
  997. package/.yarn/cache/socks-proxy-agent-npm-7.0.0-7aacf32ea0-7205543701.zip +0 -0
  998. package/.yarn/cache/source-list-map-npm-2.0.1-625c551052-806efc6f75.zip +0 -0
  999. package/.yarn/cache/source-map-npm-0.5.7-7c3f035429-5dc2043b93.zip +0 -0
  1000. package/.yarn/cache/source-map-npm-0.6.1-1a3621db16-59ce8640cf.zip +0 -0
  1001. package/.yarn/cache/source-map-resolve-npm-0.5.3-6502ae65ba-c73fa44ac0.zip +0 -0
  1002. package/.yarn/cache/source-map-support-npm-0.5.13-377dfd7321-933550047b.zip +0 -0
  1003. package/.yarn/cache/source-map-support-npm-0.5.21-09ca99e250-43e98d700d.zip +0 -0
  1004. package/.yarn/cache/source-map-url-npm-0.4.1-747a1f6eba-64c5c2c77a.zip +0 -0
  1005. package/.yarn/cache/sourcemap-codec-npm-1.4.8-3a1a9e60b1-b57981c056.zip +0 -0
  1006. package/.yarn/cache/spawnd-npm-6.2.0-c77cffda01-527e4cc99e.zip +0 -0
  1007. package/.yarn/cache/spdx-correct-npm-3.1.1-47f574c27a-77ce438344.zip +0 -0
  1008. package/.yarn/cache/spdx-exceptions-npm-2.3.0-2b68dad75a-cb69a26fa3.zip +0 -0
  1009. package/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip +0 -0
  1010. package/.yarn/cache/spdx-license-ids-npm-3.0.12-750216a0df-92a4dddce6.zip +0 -0
  1011. package/.yarn/cache/split-string-npm-3.1.0-df5d83450e-ae5af5c91b.zip +0 -0
  1012. package/.yarn/cache/sprintf-js-npm-1.0.3-73f0a322fa-19d79aec21.zip +0 -0
  1013. package/.yarn/cache/ssri-npm-6.0.2-4b770f07fd-7c2e5d442f.zip +0 -0
  1014. package/.yarn/cache/ssri-npm-8.0.1-a369e72ce2-bc447f5af8.zip +0 -0
  1015. package/.yarn/cache/ssri-npm-9.0.1-33ce27f4f8-fb58f5e46b.zip +0 -0
  1016. package/.yarn/cache/stable-npm-0.1.8-feb4e06de8-2ff482bb10.zip +0 -0
  1017. package/.yarn/cache/stack-utils-npm-2.0.6-2be1099696-052bf4d25b.zip +0 -0
  1018. package/.yarn/cache/static-extend-npm-0.1.2-2720ee6882-8657485b83.zip +0 -0
  1019. package/.yarn/cache/statuses-npm-2.0.1-81d2b97fee-18c7623fdb.zip +0 -0
  1020. package/.yarn/cache/stream-browserify-npm-2.0.2-145ceec889-8de7bcab55.zip +0 -0
  1021. package/.yarn/cache/stream-each-npm-1.2.3-ff15985d6a-f243de78e9.zip +0 -0
  1022. package/.yarn/cache/stream-http-npm-2.8.3-7691e2a9d5-f57dfaa21a.zip +0 -0
  1023. package/.yarn/cache/stream-meter-npm-1.0.4-3d727492d5-a732f7ede9.zip +0 -0
  1024. package/.yarn/cache/stream-shift-npm-1.0.1-9526210fa7-59b82b44b2.zip +0 -0
  1025. package/.yarn/cache/string-hash-npm-1.1.3-3cb8892e7c-104b8667a5.zip +0 -0
  1026. package/.yarn/cache/string-length-npm-4.0.2-675173c7a2-ce85533ef5.zip +0 -0
  1027. package/.yarn/cache/string-range-npm-1.2.2-902aeb98ee-7118cc83a7.zip +0 -0
  1028. package/.yarn/cache/string-width-npm-1.0.2-01031f9add-5c79439e95.zip +0 -0
  1029. package/.yarn/cache/string-width-npm-3.1.0-e031bfa4e0-57f7ca73d2.zip +0 -0
  1030. package/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip +0 -0
  1031. package/.yarn/cache/string_decoder-npm-0.10.31-851f3f7302-fe00f8e303.zip +0 -0
  1032. package/.yarn/cache/string_decoder-npm-1.1.1-e46a6c1353-9ab7e56f9d.zip +0 -0
  1033. package/.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-8417646695.zip +0 -0
  1034. package/.yarn/cache/strip-ansi-npm-3.0.1-6aec1365b9-9b974de611.zip +0 -0
  1035. package/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip +0 -0
  1036. package/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip +0 -0
  1037. package/.yarn/cache/strip-bom-npm-3.0.0-71e8f81ff9-8d50ff27b7.zip +0 -0
  1038. package/.yarn/cache/strip-bom-npm-4.0.0-97d367a64d-9dbcfbaf50.zip +0 -0
  1039. package/.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip +0 -0
  1040. package/.yarn/cache/strip-indent-npm-4.0.0-12c489be86-06cbcd93da.zip +0 -0
  1041. package/.yarn/cache/strip-json-comments-npm-2.0.1-e7883b2d04-1074ccb632.zip +0 -0
  1042. package/.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip +0 -0
  1043. package/.yarn/cache/style-inject-npm-0.3.0-e2042d3aac-fa5f5f6730.zip +0 -0
  1044. package/.yarn/cache/style-loader-npm-3.3.1-4bbb6ec77f-470feef680.zip +0 -0
  1045. package/.yarn/cache/stylehacks-npm-5.1.1-1ee6c88174-11175366ef.zip +0 -0
  1046. package/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip +0 -0
  1047. package/.yarn/cache/supports-color-npm-6.1.0-7d19cd7f55-74358f9535.zip +0 -0
  1048. package/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip +0 -0
  1049. package/.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip +0 -0
  1050. package/.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-53b1e247e6.zip +0 -0
  1051. package/.yarn/cache/svgo-npm-2.8.0-43b4f3debe-b92f71a854.zip +0 -0
  1052. package/.yarn/cache/tapable-npm-1.1.3-f1c2843426-53ff4e7c39.zip +0 -0
  1053. package/.yarn/cache/tapable-npm-2.2.1-8cf5ff3039-3b7a1b4d86.zip +0 -0
  1054. package/.yarn/cache/tar-fs-npm-2.1.1-e374d3b7a2-f5b9a70059.zip +0 -0
  1055. package/.yarn/cache/tar-npm-6.1.13-3234e72781-8a278bed12.zip +0 -0
  1056. package/.yarn/cache/tar-stream-npm-2.2.0-884c79b510-699831a8b9.zip +0 -0
  1057. package/.yarn/cache/terser-npm-4.8.1-16347908cf-b342819bf7.zip +0 -0
  1058. package/.yarn/cache/terser-npm-5.16.1-d407c2c364-cb52412350.zip +0 -0
  1059. package/.yarn/cache/terser-webpack-plugin-npm-1.4.5-d14c27a9f3-02aada8092.zip +0 -0
  1060. package/.yarn/cache/terser-webpack-plugin-npm-4.2.3-3192d0fa12-ec1b3a85e2.zip +0 -0
  1061. package/.yarn/cache/test-exclude-npm-6.0.0-3fb03d69df-3b34a3d771.zip +0 -0
  1062. package/.yarn/cache/through-npm-2.3.8-df5f72a16e-a38c3e0598.zip +0 -0
  1063. package/.yarn/cache/through2-npm-2.0.5-77d90f13cd-beb0f338aa.zip +0 -0
  1064. package/.yarn/cache/timers-browserify-npm-2.0.12-ad02d37cc3-ec37ae2990.zip +0 -0
  1065. package/.yarn/cache/tmp-npm-0.2.1-a9c8d9c0ca-8b12146541.zip +0 -0
  1066. package/.yarn/cache/tmpl-npm-1.0.5-d399ba37e2-cd922d9b85.zip +0 -0
  1067. package/.yarn/cache/to-arraybuffer-npm-1.0.1-a57b097c21-31433c10b3.zip +0 -0
  1068. package/.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-be2de62fe5.zip +0 -0
  1069. package/.yarn/cache/to-object-path-npm-0.3.0-241b5ffa9c-9425effee5.zip +0 -0
  1070. package/.yarn/cache/to-regex-npm-3.0.2-3af893c972-4ed4a61905.zip +0 -0
  1071. package/.yarn/cache/to-regex-range-npm-2.1.1-60af4c593e-46093cc14b.zip +0 -0
  1072. package/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip +0 -0
  1073. package/.yarn/cache/toidentifier-npm-1.0.1-f759712599-952c29e2a8.zip +0 -0
  1074. package/.yarn/cache/tr46-npm-0.0.3-de53018915-726321c5ea.zip +0 -0
  1075. package/.yarn/cache/trash-cli-npm-5.0.0-172c9c6b9e-b987156abb.zip +0 -0
  1076. package/.yarn/cache/trash-npm-8.1.0-e8271d1f12-66abc35540.zip +0 -0
  1077. package/.yarn/cache/tree-kill-npm-1.2.2-3da0e5a759-49117f5f41.zip +0 -0
  1078. package/.yarn/cache/trim-newlines-npm-4.0.2-e01f9adaf9-1eef206eb7.zip +0 -0
  1079. package/.yarn/cache/tryer-npm-1.0.1-f48ab9ec32-1cf14d7f67.zip +0 -0
  1080. package/.yarn/cache/ts-jest-npm-29.0.3-c1e6bc8a8a-541e51776d.zip +0 -0
  1081. package/.yarn/cache/ts-loader-npm-8.4.0-8da6fd87a8-79da0f364c.zip +0 -0
  1082. package/.yarn/cache/ts-node-npm-10.9.1-6c268be7f4-090adff130.zip +0 -0
  1083. package/.yarn/cache/tslib-npm-1.14.1-102499115e-dbe628ef87.zip +0 -0
  1084. package/.yarn/cache/tslib-npm-2.4.1-36f0ed04db-19480d6e03.zip +0 -0
  1085. package/.yarn/cache/tslint-npm-6.1.3-d90825fcd4-7348b7abd6.zip +0 -0
  1086. package/.yarn/cache/tsutils-npm-2.29.0-a46b62a46d-5d681bab79.zip +0 -0
  1087. package/.yarn/cache/tty-browserify-npm-0.0.0-684371f6ca-a06f746acc.zip +0 -0
  1088. package/.yarn/cache/tunnel-agent-npm-0.6.0-64345ab7eb-05f6510358.zip +0 -0
  1089. package/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip +0 -0
  1090. package/.yarn/cache/type-fest-npm-0.21.3-5ff2a9c6fd-e6b32a3b38.zip +0 -0
  1091. package/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-b011c33886.zip +0 -0
  1092. package/.yarn/cache/type-is-npm-1.6.18-6dee4d4961-2c8e47675d.zip +0 -0
  1093. package/.yarn/cache/typedarray-npm-0.0.6-37638b2241-33b39f3d0e.zip +0 -0
  1094. package/.yarn/cache/typedarray-to-buffer-npm-1.0.4-7a9c9958df-ac6989c456.zip +0 -0
  1095. package/.yarn/cache/typedoc-npm-0.23.23-b8cec47ccf-2b64f9c9dc.zip +0 -0
  1096. package/.yarn/cache/typescript-npm-4.9.4-51bdca3293-e782fb9e00.zip +0 -0
  1097. package/.yarn/cache/typescript-patch-b74a6ef84c-37f6e2c3c5.zip +0 -0
  1098. package/.yarn/cache/uglify-js-npm-3.4.10-026479e767-dfc61c85b0.zip +0 -0
  1099. package/.yarn/cache/unbzip2-stream-npm-1.4.3-c5582d6a9f-0e67c4a91f.zip +0 -0
  1100. package/.yarn/cache/union-value-npm-1.0.1-76c6e8a88f-a3464097d3.zip +0 -0
  1101. package/.yarn/cache/unique-filename-npm-1.1.1-c885c5095b-cf4998c922.zip +0 -0
  1102. package/.yarn/cache/unique-filename-npm-2.0.1-183c6c7c2b-807acf3381.zip +0 -0
  1103. package/.yarn/cache/unique-slug-npm-2.0.2-f6ba1ddeb7-5b6876a645.zip +0 -0
  1104. package/.yarn/cache/unique-slug-npm-3.0.0-0b82e51577-49f8d915ba.zip +0 -0
  1105. package/.yarn/cache/universalify-npm-2.0.0-03b8b418a8-2406a4edf4.zip +0 -0
  1106. package/.yarn/cache/unpipe-npm-1.0.0-2ed2a3c2bf-4fa18d8d8d.zip +0 -0
  1107. package/.yarn/cache/unset-value-npm-1.0.0-2af803b920-5990ecf660.zip +0 -0
  1108. package/.yarn/cache/untildify-npm-4.0.0-4a8b569825-39ced9c418.zip +0 -0
  1109. package/.yarn/cache/upath-npm-1.2.0-ca00ec3398-4c05c09479.zip +0 -0
  1110. package/.yarn/cache/update-browserslist-db-npm-1.0.10-676baf0b9f-12db73b4f6.zip +0 -0
  1111. package/.yarn/cache/upper-case-npm-1.1.3-061d82781f-991c845de7.zip +0 -0
  1112. package/.yarn/cache/uri-js-npm-4.4.1-66d11cbcaf-7167432de6.zip +0 -0
  1113. package/.yarn/cache/urix-npm-0.1.0-bd5e55a13a-4c076ecfbf.zip +0 -0
  1114. package/.yarn/cache/url-loader-npm-4.1.1-568e22ebcb-c1122a992c.zip +0 -0
  1115. package/.yarn/cache/url-npm-0.11.0-32ce15acfb-50d100d3dd.zip +0 -0
  1116. package/.yarn/cache/use-npm-3.1.1-7ba643714c-08a130289f.zip +0 -0
  1117. package/.yarn/cache/user-home-npm-2.0.0-a7b3877168-a3329faa95.zip +0 -0
  1118. package/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip +0 -0
  1119. package/.yarn/cache/util-npm-0.10.3-f43de5ccbb-bd800f5d23.zip +0 -0
  1120. package/.yarn/cache/util-npm-0.11.1-d2633dea18-80bee6a2ed.zip +0 -0
  1121. package/.yarn/cache/utils-merge-npm-1.0.1-363bbdfbca-c810954932.zip +0 -0
  1122. package/.yarn/cache/uuid-npm-8.3.2-eca0baba53-5575a8a75c.zip +0 -0
  1123. package/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-78089ad549.zip +0 -0
  1124. package/.yarn/cache/v8-compile-cache-npm-2.3.0-961375f150-adb0a271ea.zip +0 -0
  1125. package/.yarn/cache/v8-to-istanbul-npm-9.0.1-58bbce7857-a49c34bf0a.zip +0 -0
  1126. package/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-35703ac889.zip +0 -0
  1127. package/.yarn/cache/vary-npm-1.1.2-b49f70ae63-ae0123222c.zip +0 -0
  1128. package/.yarn/cache/vlq-npm-0.2.3-292fe9aaa1-2231d8caeb.zip +0 -0
  1129. package/.yarn/cache/vm-browserify-npm-1.1.2-f96404b36f-10a1c50aab.zip +0 -0
  1130. package/.yarn/cache/vscode-oniguruma-npm-1.7.0-07cc55fbcc-53519d91d9.zip +0 -0
  1131. package/.yarn/cache/vscode-textmate-npm-6.0.0-7ba9c4bb0b-ff6f17a406.zip +0 -0
  1132. package/.yarn/cache/wait-on-npm-6.0.1-9e03b09170-e4d62aa414.zip +0 -0
  1133. package/.yarn/cache/walker-npm-1.0.8-b0a05b9478-ad7a257ea1.zip +0 -0
  1134. package/.yarn/cache/watchpack-chokidar2-npm-2.0.1-ebd158dbea-acf0f9ebca.zip +0 -0
  1135. package/.yarn/cache/watchpack-npm-1.7.5-8e26730caf-8b7cb8c8df.zip +0 -0
  1136. package/.yarn/cache/webidl-conversions-npm-3.0.1-60310f6a2b-c92a0a6ab9.zip +0 -0
  1137. package/.yarn/cache/webpack-bundle-analyzer-npm-3.9.0-49ea30ebb4-7fb83afb13.zip +0 -0
  1138. package/.yarn/cache/webpack-cli-npm-3.3.12-3f0b130bc7-3097084e7b.zip +0 -0
  1139. package/.yarn/cache/webpack-merge-npm-4.2.2-f98139a8eb-ce58bc8ab5.zip +0 -0
  1140. package/.yarn/cache/webpack-npm-4.46.0-a8158cfa7f-013fa24c00.zip +0 -0
  1141. package/.yarn/cache/webpack-sources-npm-1.4.3-2b3a9b1de0-37463dad8d.zip +0 -0
  1142. package/.yarn/cache/whatwg-url-npm-5.0.0-374fb45e60-b8daed4ad3.zip +0 -0
  1143. package/.yarn/cache/which-module-npm-2.0.0-daf3daa08d-809f7fd3df.zip +0 -0
  1144. package/.yarn/cache/which-npm-1.3.1-f0ebb8bdd8-f2e185c624.zip +0 -0
  1145. package/.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip +0 -0
  1146. package/.yarn/cache/wide-align-npm-1.1.5-889d77e592-d5fc37cd56.zip +0 -0
  1147. package/.yarn/cache/worker-farm-npm-1.7.0-cfc50c2626-eab917530e.zip +0 -0
  1148. package/.yarn/cache/wrap-ansi-npm-5.1.0-293b407c18-9b48c86222.zip +0 -0
  1149. package/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip +0 -0
  1150. package/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip +0 -0
  1151. package/.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-5da60bd4ee.zip +0 -0
  1152. package/.yarn/cache/ws-npm-6.2.2-ca62a10fa0-aec3154ec5.zip +0 -0
  1153. package/.yarn/cache/ws-npm-8.11.0-ab72116a01-316b33aba3.zip +0 -0
  1154. package/.yarn/cache/xdg-basedir-npm-4.0.0-ed08d380e2-0073d5b59a.zip +0 -0
  1155. package/.yarn/cache/xdg-trashdir-npm-3.1.0-4867489077-1b8ed9229a.zip +0 -0
  1156. package/.yarn/cache/xtend-npm-2.0.6-7825391135-414531e51c.zip +0 -0
  1157. package/.yarn/cache/xtend-npm-2.1.2-5342807e9c-a8b79f3150.zip +0 -0
  1158. package/.yarn/cache/xtend-npm-2.2.0-eb3dffa78b-9fcd1ddabe.zip +0 -0
  1159. package/.yarn/cache/xtend-npm-3.0.0-9cdbc29cc9-ecdc4dd74f.zip +0 -0
  1160. package/.yarn/cache/xtend-npm-4.0.2-7f2375736e-ac5dfa738b.zip +0 -0
  1161. package/.yarn/cache/y18n-npm-4.0.3-ced95acdbc-014dfcd9b5.zip +0 -0
  1162. package/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip +0 -0
  1163. package/.yarn/cache/yallist-npm-3.1.1-a568a556b4-48f7bb00dc.zip +0 -0
  1164. package/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip +0 -0
  1165. package/.yarn/cache/yaml-npm-1.10.2-0e780aebdf-ce4ada136e.zip +0 -0
  1166. package/.yarn/cache/yargs-npm-13.3.2-1588f5dd4c-75c13e837e.zip +0 -0
  1167. package/.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip +0 -0
  1168. package/.yarn/cache/yargs-npm-17.6.2-1dd8b38d1b-47da1b0d85.zip +0 -0
  1169. package/.yarn/cache/yargs-parser-npm-13.1.2-546b639909-c8bb6f44d3.zip +0 -0
  1170. package/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip +0 -0
  1171. package/.yarn/cache/yargs-parser-npm-21.1.1-8fdc003314-ed2d96a616.zip +0 -0
  1172. package/.yarn/cache/yarn-npm-1.22.19-6ba13b96dc-b43d2cc5fe.zip +0 -0
  1173. package/.yarn/cache/yauzl-npm-2.10.0-72e70ea021-7f21fe0bba.zip +0 -0
  1174. package/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip +0 -0
  1175. package/.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip +0 -0
  1176. package/.yarn/install-state.gz +0 -0
  1177. package/.yarnrc.yml +1 -0
  1178. package/CHANGELOG.md +380 -21
  1179. package/CODE_OF_CONDUCT.md +166 -0
  1180. package/CONTRIBUTING.md +169 -0
  1181. package/LICENSE +27 -0
  1182. package/README.md +23 -126
  1183. package/azure-pipelines.yml +19 -0
  1184. package/dist/main/src/client/ButtplugBrowserWebsocketClientConnector.d.ts +19 -0
  1185. package/dist/main/src/client/ButtplugBrowserWebsocketClientConnector.js +58 -0
  1186. package/dist/main/src/client/ButtplugBrowserWebsocketClientConnector.js.map +1 -0
  1187. package/dist/main/src/client/ButtplugClientConnectorException.d.ts +11 -0
  1188. package/dist/main/src/client/ButtplugClientConnectorException.js +42 -0
  1189. package/dist/main/src/client/ButtplugClientConnectorException.js.map +1 -0
  1190. package/dist/main/src/client/ButtplugClientDevice.d.ts +62 -0
  1191. package/dist/main/src/client/ButtplugClientDevice.js +299 -0
  1192. package/dist/main/src/client/ButtplugClientDevice.js.map +1 -0
  1193. package/dist/main/src/client/Client.d.ts +42 -0
  1194. package/dist/main/src/client/Client.js +237 -0
  1195. package/dist/main/src/client/Client.js.map +1 -0
  1196. package/dist/main/src/client/IButtplugClientConnector.d.ts +17 -0
  1197. package/dist/main/src/client/IButtplugClientConnector.js +10 -0
  1198. package/dist/main/src/client/IButtplugClientConnector.js.map +1 -0
  1199. package/dist/main/src/core/Exceptions.d.ts +36 -0
  1200. package/dist/main/src/core/Exceptions.js +107 -0
  1201. package/dist/main/src/core/Exceptions.js.map +1 -0
  1202. package/dist/main/src/core/Logging.d.ts +113 -0
  1203. package/dist/main/src/core/Logging.js +170 -0
  1204. package/dist/main/src/core/Logging.js.map +1 -0
  1205. package/dist/main/src/core/MessageUtils.d.ts +9 -0
  1206. package/dist/main/src/core/MessageUtils.js +52 -0
  1207. package/dist/main/src/core/MessageUtils.js.map +1 -0
  1208. package/dist/main/src/core/Messages.d.ts +260 -0
  1209. package/dist/main/src/core/Messages.js +412 -0
  1210. package/dist/main/src/core/Messages.js.map +1 -0
  1211. package/dist/main/src/index.d.ts +17 -0
  1212. package/dist/main/src/index.js +34 -0
  1213. package/dist/main/src/index.js.map +1 -0
  1214. package/dist/main/src/utils/ButtplugBrowserWebsocketConnector.d.ts +22 -0
  1215. package/dist/main/src/utils/ButtplugBrowserWebsocketConnector.js +92 -0
  1216. package/dist/main/src/utils/ButtplugBrowserWebsocketConnector.js.map +1 -0
  1217. package/dist/main/src/utils/ButtplugMessageSorter.d.ts +16 -0
  1218. package/dist/main/src/utils/ButtplugMessageSorter.js +79 -0
  1219. package/dist/main/src/utils/ButtplugMessageSorter.js.map +1 -0
  1220. package/dist/main/src/utils/Utils.d.ts +1 -0
  1221. package/dist/main/src/utils/Utils.js +8 -0
  1222. package/dist/main/src/utils/Utils.js.map +1 -0
  1223. package/dist/web/buttplug.js +6087 -16541
  1224. package/dist/web/buttplug.min.js +2 -45
  1225. package/dist/web/buttplug.min.js.LICENSE.txt +31 -0
  1226. package/dist/web/buttplug.min.js.map +1 -1
  1227. package/dist/web/index.html +10 -0
  1228. package/jest-puppeteer.config.js +5 -0
  1229. package/package.json +93 -44
  1230. package/rollup.config.js +55 -0
  1231. package/src/client/ButtplugBrowserWebsocketClientConnector.ts +56 -0
  1232. package/src/client/ButtplugClientConnectorException.ts +16 -0
  1233. package/src/client/ButtplugClientDevice.ts +255 -0
  1234. package/src/client/Client.ts +233 -0
  1235. package/src/client/IButtplugClientConnector.ts +18 -0
  1236. package/src/core/Exceptions.ts +98 -0
  1237. package/src/core/Logging.ts +194 -0
  1238. package/src/core/MessageUtils.ts +26 -0
  1239. package/src/core/Messages.ts +421 -0
  1240. package/src/core/index.d.ts +4 -0
  1241. package/src/index.ts +18 -0
  1242. package/src/utils/ButtplugBrowserWebsocketConnector.ts +90 -0
  1243. package/src/utils/ButtplugMessageSorter.ts +54 -0
  1244. package/src/utils/Utils.ts +3 -0
  1245. package/tsconfig.json +6 -5
  1246. package/tslint.json +27 -0
  1247. package/typedoc.js +9 -0
  1248. package/util/convert_device_config.js +6 -0
  1249. package/.netlify/state.json +0 -3
  1250. package/LICENSE.md +0 -29
  1251. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi.d.ts +0 -41
  1252. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi.js +0 -2
  1253. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi_bg.js +0 -6
  1254. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi_bg.wasm +0 -0
  1255. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi_bg.wasm.d.ts +0 -18
  1256. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi_bg_node.js +0 -786
  1257. package/dist/module/buttplug-rs-ffi/buttplug_rs_ffi_bg_web.js +0 -775
  1258. package/dist/module/buttplug_ffi.d.ts +0 -3898
  1259. package/dist/module/buttplug_ffi.js +0 -10541
  1260. package/dist/module/client.d.ts +0 -30
  1261. package/dist/module/client.js +0 -126
  1262. package/dist/module/client.js.map +0 -1
  1263. package/dist/module/connectors.d.ts +0 -13
  1264. package/dist/module/connectors.js +0 -26
  1265. package/dist/module/connectors.js.map +0 -1
  1266. package/dist/module/device.d.ts +0 -85
  1267. package/dist/module/device.js +0 -217
  1268. package/dist/module/device.js.map +0 -1
  1269. package/dist/module/errors.d.ts +0 -25
  1270. package/dist/module/errors.js +0 -60
  1271. package/dist/module/errors.js.map +0 -1
  1272. package/dist/module/ffi.d.ts +0 -25
  1273. package/dist/module/ffi.js +0 -243
  1274. package/dist/module/ffi.js.map +0 -1
  1275. package/dist/module/index.d.ts +0 -15
  1276. package/dist/module/index.js +0 -16
  1277. package/dist/module/index.js.map +0 -1
  1278. package/dist/module/sorter.d.ts +0 -15
  1279. package/dist/module/sorter.js +0 -43
  1280. package/dist/module/sorter.js.map +0 -1
  1281. package/dist/module/web_index.d.ts +0 -8
  1282. package/dist/module/web_index.js +0 -12
  1283. package/dist/module/web_index.js.map +0 -1
  1284. package/dist/web/0.buttplug.js +0 -1376
  1285. package/dist/web/1.buttplug.min.js +0 -2
  1286. package/dist/web/1.buttplug.min.js.map +0 -1
  1287. package/dist/web/166a428ed7ca7a309853.module.wasm +0 -0
  1288. package/dist/web/c729307841d2d311543e.module.wasm +0 -0
  1289. package/index.html +0 -25
  1290. package/webpack.base.cjs +0 -107
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://Buttplug/webpack/universalModuleDefinition","webpack://Buttplug/webpack/bootstrap","webpack://Buttplug/./src/buttplug_ffi.js","webpack://Buttplug/./node_modules/protobufjs/minimal.js","webpack://Buttplug/./src/ffi.ts","webpack://Buttplug/./node_modules/protobufjs/src/util/minimal.js","webpack://Buttplug/./node_modules/events/events.js","webpack://Buttplug/(webpack)/buildin/global.js","webpack://Buttplug/./node_modules/protobufjs/src/writer.js","webpack://Buttplug/./node_modules/protobufjs/src/reader.js","webpack://Buttplug/./node_modules/protobufjs/src/index-minimal.js","webpack://Buttplug/./node_modules/@protobufjs/aspromise/index.js","webpack://Buttplug/./node_modules/@protobufjs/base64/index.js","webpack://Buttplug/./node_modules/@protobufjs/eventemitter/index.js","webpack://Buttplug/./node_modules/@protobufjs/float/index.js","webpack://Buttplug/./node_modules/@protobufjs/inquire/index.js","webpack://Buttplug/./node_modules/@protobufjs/utf8/index.js","webpack://Buttplug/./node_modules/@protobufjs/pool/index.js","webpack://Buttplug/./node_modules/protobufjs/src/util/longbits.js","webpack://Buttplug/./node_modules/protobufjs/src/writer_buffer.js","webpack://Buttplug/./node_modules/protobufjs/src/reader_buffer.js","webpack://Buttplug/./node_modules/protobufjs/src/rpc.js","webpack://Buttplug/./node_modules/protobufjs/src/rpc/service.js","webpack://Buttplug/./node_modules/protobufjs/src/roots.js","webpack://Buttplug/./node_modules/buffer/index.js","webpack://Buttplug/./node_modules/base64-js/index.js","webpack://Buttplug/./node_modules/ieee754/index.js","webpack://Buttplug/./node_modules/isarray/index.js","webpack://Buttplug/./src/errors.ts","webpack://Buttplug/./src/connectors.ts","webpack://Buttplug/./src/sorter.ts","webpack://Buttplug/./src/device.ts","webpack://Buttplug/./src/client.ts","webpack://Buttplug/./src/index.ts","webpack://Buttplug/./src/web_index.ts"],"names":["root","factory","exports","module","define","amd","window","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","prefetchChunks","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","forEach","undefined","link","document","createElement","__webpack_require__","nc","setAttribute","rel","as","href","jsonpScriptSrc","head","appendChild","shift","installedModules","0","p","installedWasmModules","wasmImportObjects","30","p0i32","p1i32","p2i32","p3i32","p4i32","p5i32","p6i32","p7i32","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","charset","timeout","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","setTimeout","wasmModuleId","installedWasmModuleData","importObject","req","fetch","WebAssembly","compileStreaming","all","then","items","instantiate","instantiateStreaming","x","arrayBuffer","bytes","res","w","instance","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","oldJsonpFunction","slice","startupResult","s","$Reader","Reader","$Writer","Writer","$util","util","$root","roots","Buttplug","Endpoint","valuesById","values","ClientMessage","properties","keys","this","id","encode","writer","uint32","FFIMessage","fork","ldelim","encodeDelimited","decode","reader","end","len","pos","tag","skipType","decodeDelimited","verify","isInteger","fromObject","TypeError","toObject","options","defaults","toJSON","constructor","toJSONOptions","DeviceCommunicationManagerTypes","ConnectLocal","serverName","maxPingTime","allowRawMessages","deviceConfigurationJson","userDeviceConfigurationJson","commManagerTypes","string","bool","isString","String","Boolean","ConnectWebsocket","address","bypassCertVerification","StartScanning","StopScanning","StopAllDevices","Disconnect","Ping","$oneOfFields","connectLocal","connectWebsocket","startScanning","stopScanning","stopAllDevices","disconnect","ping","oneOfGetter","set","oneOfSetter","msg","oneofs","DeviceMessage","index","VibrateComponent","speed","double","Number","json","isFinite","VibrateCmd","speeds","emptyArray","Array","isArray","arrays","j","RotateComponent","clockwise","RotateCmd","rotations","LinearComponent","duration","position","LinearCmd","movements","StopDeviceCmd","RawReadCmd","endpoint","newBuffer","expectedLength","int32","base64","enums","RawWriteCmd","writeWithResponse","RawSubscribeCmd","RawUnsubscribeCmd","BatteryLevelCmd","RSSILevelCmd","vibrateCmd","rotateCmd","linearCmd","stopDeviceCmd","rawReadCmd","rawWriteCmd","rawSubscribeCmd","rawUnsubscribeCmd","batteryLevelCmd","rssiLevelCmd","ServerMessage","ok","scanningFinished","deviceAdded","deviceRemoved","Ok","ScanningFinished","DeviceAdded","DeviceRemoved","ButtplugErrorType","MessageAttributeType","MessageAttributes","stepCount","endpoints","maxDuration","messageType","featureCount","end2","backtrace","messageAttributes","DeviceEvent","batteryLevelReading","rssiLevelReading","rawReading","BatteryLevelReading","RSSILevelReading","RawReading","reading","ButtplugFFIServerMessage","serverMessage","deviceEvent","must_run_init_1","a","must_run_init_4","b","buttplug_create_protobuf_client","buttplug_free_client","buttplug_client_protobuf_message","buttplug_activate_env_logger","buttplug_free_device","buttplug_create_device","buttplug_device_protobuf_message","buttplug_has_init_run","async","buttplugInit","log","catch","sendClientMessage","sorter","clientPtr","callback","PrepareOutgoingMessage","buffer","Buffer","from","finish","connectEmbedded","ServerName","AllowRawMessages","DeviceConfigJSON","UserDeviceConfigJSON","MaxPingTime","Address","sendDeviceMessage","devicePtr","vibrate","rotate","linear","vectors","stopDevice","batteryLevel","rssiLevel","rawRead","rawWrite","rawSubscribe","rawUnsubscribe","createClientPtr","eventCallback","clientName","createDevicePtr","deviceIndex","freeClientPtr","freeDevicePtr","activateConsoleLogger","logLevel","merge","dst","ifNotSet","newError","CustomError","captureStackTrace","stack","toString","asPromise","EventEmitter","float","inquire","utf8","pool","LongBits","isNode","global","process","versions","node","self","freeze","emptyObject","Math","floor","isObject","isset","isSet","obj","prop","utf8Write","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","Uint8Array","Long","dcodeIO","key2Re","key32Re","key64Re","longToHash","toHash","zeroHash","longFromHash","hash","unsigned","bits","fromHash","fromBits","lo","hi","toNumber","lcFirst","str","charAt","toLowerCase","substring","ProtocolError","fieldNames","fieldMap","longs","_configure","encoding","allocUnsafe","size","ReflectOwnKeys","R","Reflect","ReflectApply","apply","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","isNaN","init","once","emitter","errorListener","removeListener","resolver","arguments","eventTargetAgnosticAddListener","handler","flags","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","newListener","emit","unshift","warned","count","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","list","originalListener","pop","spliceOne","off","removeAllListeners","rawListeners","eventNames","g","BufferWriter","Op","fn","val","next","noop","State","tail","states","writeByte","buf","VarintOp","writeVarint64","writeFixed32","alloc","subarray","_push","fromNumber","sint32","uint64","int64","sint64","zzEncode","fixed32","sfixed32","fixed64","sfixed64","writeFloatLE","writeDoubleLE","writeBytes","write","reset","BufferWriter_","BufferReader","indexOutOfRange","writeLength","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","_slice","readFloatLE","readDoubleLE","start","read","skip","wireType","BufferReader_","zzDecode","protobuf","configure","build","rpc","ctx","params","offset","pending","ceil","b64","s64","parts","fromCharCode","join","charCodeAt","test","evt","splice","Float32Array","f32","f8b","le","writeFloat_f32_cpy","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatBE","readFloatBE","writeFloat_ieee754","writeUint","sign","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleBE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","moduleName","mod","eval","replace","c1","c2","SIZE","MAX","slab","zero","parseInt","fromString","low","high","toLong","mask","part0","part1","part2","writeStringBuffer","writeBytesBuffer","byteLength","utf8Slice","min","Service","rpcImpl","requestDelimited","responseDelimited","rpcCall","method","requestCtor","responseCtor","response","endedByRPC","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","__proto__","encodingOrOffset","ArrayBuffer","array","byteOffset","fromArrayLike","fromArrayBuffer","isEncoding","actual","checked","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","substr","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","configurable","fill","allocUnsafeSlow","_isBuffer","compare","y","swap16","swap32","swap64","equals","inspect","max","match","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","out","toHex","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","targetStart","code","INVALID_BASE64_RE","leadSurrogate","toByteArray","trim","stringtrim","base64clean","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","num","output","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","abs","ButtplugError","aMessage","aId","aInner","super","innerError","messageId","ButtplugHandshakeError","ButtplugDeviceError","ButtplugMessageError","ButtplugPingError","ButtplugUnknownError","ButtplugClientConnectorError","convertPBufError","ButtplugConnectorError","ButtplugEmbeddedConnectorOptions","ButtplugWebsocketConnectorOptions","_counter","_waitingMsgs","Map","aMsg","rej","msgPromise","has","ButtplugDeviceMessageType","attributes","VibrationCmd","Index","Speed","RotationCmd","Clockwise","VectorCmd","Duration","Position","sorter_callback","allowedMsgsObj","_messageAttributes","_devicePtr","_sorter","_index","_name","_sorterCallback","messageName","msgSpeeds","checkAllowedMessageType","features","_","every","map","msgRotations","msgVectors","batteryMsg","rssiMsg","readingMsg","_devices","_clientPtr","_isScanning","_connected","connect","sorterCallback","ParseIncomingMessages","addedMsg","device","removedMsg","removedDevice","emitDisconnected","delete","_clientName","CheckConnector","devices","Connected","scripts","getElementsByTagName","lastScript"],"mappings":"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EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YA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CJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0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AAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,WACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SAAW,GACnB,MACJ,IAAK,YACL,KAAK,GACD1J,EAAQ0J,SA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","file":"buttplug.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"buttplug-commonjs\"] = factory();\n\telse\n\t\troot[\"Buttplug\"] = factory();\n})(window, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n \t\tvar prefetchChunks = data[3] || [];\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n \t\t// chunk prefetching for javascript\n \t\tprefetchChunks.forEach(function(chunkId) {\n \t\t\tif(installedChunks[chunkId] === undefined) {\n \t\t\t\tinstalledChunks[chunkId] = null;\n \t\t\t\tvar link = document.createElement('link');\n\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tlink.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tlink.rel = \"prefetch\";\n \t\t\t\tlink.as = \"script\";\n \t\t\t\tlink.href = jsonpScriptSrc(chunkId);\n \t\t\t\tdocument.head.appendChild(link);\n \t\t\t}\n \t\t});\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".buttplug.min.js\"\n \t}\n\n \t// object to store loaded and loading wasm modules\n \tvar installedWasmModules = {};\n\n \tfunction promiseResolve() { return Promise.resolve(); }\n\n \tvar wasmImportObjects = {\n \t\t30: function() {\n \t\t\treturn {\n \t\t\t\t\"./buttplug_rs_ffi_bg.js\": {\n \t\t\t\t\t\"__wbindgen_object_drop_ref\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Fb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_string_new\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Hb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_cb_drop\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"sb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_log_35a94a6f9ba22278\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"y\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_object_clone_ref\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Eb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_new_59cb74e423758ede\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"I\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_stack_558ba5917b466edd\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"ib\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_error_4bb6c2a97407129a\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"o\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_log_b7dcb3facc73166d\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"A\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_log_96295d68ab8338df\": function(p0i32,p1i32,p2i32,p3i32,p4i32,p5i32,p6i32,p7i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"z\"](p0i32,p1i32,p2i32,p3i32,p4i32,p5i32,p6i32,p7i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_mark_55c5ecfe509deb6a\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"B\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_measure_608563106d70d48a\": function(p0i32,p1i32,p2i32,p3i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"C\"](p0i32,p1i32,p2i32,p3i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_Window_f826a1dec163bacb\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"a\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_is_undefined\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Cb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_WorkerGlobalScope_967d186155183d38\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"b\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_instanceof_Window_fac4f1f8e3c61c1f\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"w\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_navigator_f92994fb618b3c03\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"G\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_clearTimeout_60252f615c569bcf\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"j\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setTimeout_56c7fbf887ce45de\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Z\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_data_7cd3f124c3b5a69f\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"n\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_value_03e8225239dbd7d8\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"ob\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setoncharacteristicvaluechanged_0cee0979d99dc9d1\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"db\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_readValue_69b87e4f58cc86cd\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"U\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_startNotifications_9fa99b41b7caa34e\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"jb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_writeValue_4aac2f49d8ed528b\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"rb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_connect_a404ec0ee0473b28\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"l\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_getPrimaryService_02f630a4fa89270e\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"r\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_target_8eac1b471e53114d\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"lb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_requestDevice_572ca20db5044981\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"V\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_id_6a48553deb512e33\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"v\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_name_de841b61e86e41a0\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"F\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_gatt_948cc2b96fe1151a\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"p\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setongattserverdisconnected_dfb9d4668d265698\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"fb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_clearTimeout_314f616ced084484\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"i\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setTimeout_7c4b174605b75e39\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"ab\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_bluetooth_6b5bab60cc8bb7c6\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"c\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setonopen_faba655bda608b5f\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"hb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setonerror_28e7c95e09d93ac7\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"eb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_setonmessage_f64e20ef3929f315\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"gb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_new_ef8bd7aae8c6ec3d\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"L\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_close_5571385f58cb11b4\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"k\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_send_d5d38801ffbb328e\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Y\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_getCharacteristic_9f5a50aa9515729d\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"q\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_getRandomValues_98117e9a7e993920\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"s\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_randomFillSync_64cc7d048f228ca8\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"T\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_process_2f24d6544ea7b200\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"R\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_is_object\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Ab\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_versions_6164651e75405d4a\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"pb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_node_4b517d861cbcb3bc\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Q\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_crypto_98fc271021c7d2ad\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"m\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_msCrypto_a2cdb043d2bfe57f\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"E\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_modulerequire_3440a4bcf44437db\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"D\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_new_ec75d0d5815be736\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"K\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_newnoargs_1a11e7e8c906996c\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"M\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_call_e91f71ddf1f45cff\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"h\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_new_4b48f9f8159fea77\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"H\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_push_0daae9343162dbe7\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"S\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_buffer_04a22f1b4377e8b6\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"d\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_byteLength_f539f83608347df8\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"f\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_call_e3c72355d091d5d4\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"g\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_resolve_7161ec6fd5b1cd29\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"W\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_then_6d5072fec3fdb237\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"nb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_then_4f3c7f6f3d36634a\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"mb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_self_b4546ea7b590539e\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"X\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_window_c279fea81f426a68\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"qb\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_globalThis_038a6ea0ff17789f\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"t\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_global_4f93ce884bcee597\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"u\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_buffer_79a3294266d4e783\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"e\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_newwithbyteoffsetandlength_22a36e6023ad3cd0\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"O\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_new_945397fb09fec0b8\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"J\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_set_223873223acf6d07\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"bb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_length_68e13e7bbd918464\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"x\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_newwithlength_b7722b5594f1dc21\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"P\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_newwithbyteoffset_5abaa6f77edbdcec\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"N\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_subarray_466613921b2fc6db\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"kb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbg_set_d29a397c9cc5d746\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"cb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_is_string\": function(p0i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Bb\"](p0i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_string_get\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Gb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_debug_string\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"zb\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_throw\": function(p0i32,p1i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Ib\"](p0i32,p1i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_memory\": function() {\n \t\t\t\t\t\treturn installedModules[28].exports[\"Db\"]();\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_closure_wrapper195\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"tb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_closure_wrapper197\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"ub\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_closure_wrapper199\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"vb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_closure_wrapper201\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"wb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_closure_wrapper2720\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"xb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t},\n \t\t\t\t\t\"__wbindgen_closure_wrapper4521\": function(p0i32,p1i32,p2i32) {\n \t\t\t\t\t\treturn installedModules[28].exports[\"yb\"](p0i32,p1i32,p2i32);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t};\n \t\t},\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n\n \t\t// Fetch + compile chunk loading for webassembly\n\n \t\tvar wasmModules = {\"1\":[30]}[chunkId] || [];\n\n \t\twasmModules.forEach(function(wasmModuleId) {\n \t\t\tvar installedWasmModuleData = installedWasmModules[wasmModuleId];\n\n \t\t\t// a Promise means \"currently loading\" or \"already loaded\".\n \t\t\tif(installedWasmModuleData)\n \t\t\t\tpromises.push(installedWasmModuleData);\n \t\t\telse {\n \t\t\t\tvar importObject = wasmImportObjects[wasmModuleId]();\n \t\t\t\tvar req = fetch(__webpack_require__.p + \"\" + {\"30\":\"166a428ed7ca7a309853\"}[wasmModuleId] + \".module.wasm\");\n \t\t\t\tvar promise;\n \t\t\t\tif(importObject instanceof Promise && typeof WebAssembly.compileStreaming === 'function') {\n \t\t\t\t\tpromise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {\n \t\t\t\t\t\treturn WebAssembly.instantiate(items[0], items[1]);\n \t\t\t\t\t});\n \t\t\t\t} else if(typeof WebAssembly.instantiateStreaming === 'function') {\n \t\t\t\t\tpromise = WebAssembly.instantiateStreaming(req, importObject);\n \t\t\t\t} else {\n \t\t\t\t\tvar bytesPromise = req.then(function(x) { return x.arrayBuffer(); });\n \t\t\t\t\tpromise = bytesPromise.then(function(bytes) {\n \t\t\t\t\t\treturn WebAssembly.instantiate(bytes, importObject);\n \t\t\t\t\t});\n \t\t\t\t}\n \t\t\t\tpromises.push(installedWasmModules[wasmModuleId] = promise.then(function(res) {\n \t\t\t\t\treturn __webpack_require__.w[wasmModuleId] = (res.instance || res).exports;\n \t\t\t\t}));\n \t\t\t}\n \t\t});\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// object with all WebAssembly.instance exports\n \t__webpack_require__.w = {};\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \tvar startupResult = (function() {\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 26);\n \t})();\n\n \twebpackJsonpCallback([[], {}, 0, [1]]);\n \treturn startupResult;\n","// BEGIN_MODULARIZE\r\n// This file was modified by scripts/modularize.js to create Node ESM-compatible bindings.\r\n// Do not modify this file directly as your changes will be overwritten.\r\n// END_MODULARIZE\r\n/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\r\nimport $protobuf from \"protobufjs/minimal.js\";\r\n\r\n// Common aliases\r\nconst $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\r\n\r\n// Exported root namespace\r\nconst $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\r\n\r\nexport const Buttplug = $root.Buttplug = (() => {\r\n\r\n /**\r\n * Namespace Buttplug.\r\n * @exports Buttplug\r\n * @namespace\r\n */\r\n const Buttplug = {};\r\n\r\n /**\r\n * Endpoint enum.\r\n * @name Buttplug.Endpoint\r\n * @enum {number}\r\n * @property {number} Command=0 Command value\r\n * @property {number} Firmware=1 Firmware value\r\n * @property {number} Rx=2 Rx value\r\n * @property {number} RxAccel=3 RxAccel value\r\n * @property {number} RxBLEBattery=4 RxBLEBattery value\r\n * @property {number} RxPressure=5 RxPressure value\r\n * @property {number} RxTouch=6 RxTouch value\r\n * @property {number} Tx=7 Tx value\r\n * @property {number} TxMode=8 TxMode value\r\n * @property {number} TxShock=9 TxShock value\r\n * @property {number} TxVibrate=10 TxVibrate value\r\n * @property {number} TxVendorControl=11 TxVendorControl value\r\n * @property {number} Whitelist=12 Whitelist value\r\n * @property {number} Generic0=13 Generic0 value\r\n * @property {number} Generic1=14 Generic1 value\r\n * @property {number} Generic2=15 Generic2 value\r\n * @property {number} Generic3=16 Generic3 value\r\n * @property {number} Generic4=17 Generic4 value\r\n * @property {number} Generic5=18 Generic5 value\r\n * @property {number} Generic6=19 Generic6 value\r\n * @property {number} Generic7=20 Generic7 value\r\n * @property {number} Generic8=21 Generic8 value\r\n * @property {number} Generic9=22 Generic9 value\r\n * @property {number} Generic10=23 Generic10 value\r\n * @property {number} Generic11=24 Generic11 value\r\n * @property {number} Generic12=25 Generic12 value\r\n * @property {number} Generic13=26 Generic13 value\r\n * @property {number} Generic14=27 Generic14 value\r\n * @property {number} Generic15=28 Generic15 value\r\n * @property {number} Generic16=29 Generic16 value\r\n * @property {number} Generic17=30 Generic17 value\r\n * @property {number} Generic18=31 Generic18 value\r\n * @property {number} Generic19=32 Generic19 value\r\n * @property {number} Generic20=33 Generic20 value\r\n * @property {number} Generic21=34 Generic21 value\r\n * @property {number} Generic22=35 Generic22 value\r\n * @property {number} Generic23=36 Generic23 value\r\n * @property {number} Generic24=37 Generic24 value\r\n * @property {number} Generic25=38 Generic25 value\r\n * @property {number} Generic26=39 Generic26 value\r\n * @property {number} Generic27=40 Generic27 value\r\n * @property {number} Generic28=41 Generic28 value\r\n * @property {number} Generic29=42 Generic29 value\r\n * @property {number} Generic30=43 Generic30 value\r\n * @property {number} Generic31=44 Generic31 value\r\n * @property {number} RxBLEModel=45 RxBLEModel value\r\n */\r\n Buttplug.Endpoint = (function() {\r\n const valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"Command\"] = 0;\r\n values[valuesById[1] = \"Firmware\"] = 1;\r\n values[valuesById[2] = \"Rx\"] = 2;\r\n values[valuesById[3] = \"RxAccel\"] = 3;\r\n values[valuesById[4] = \"RxBLEBattery\"] = 4;\r\n values[valuesById[5] = \"RxPressure\"] = 5;\r\n values[valuesById[6] = \"RxTouch\"] = 6;\r\n values[valuesById[7] = \"Tx\"] = 7;\r\n values[valuesById[8] = \"TxMode\"] = 8;\r\n values[valuesById[9] = \"TxShock\"] = 9;\r\n values[valuesById[10] = \"TxVibrate\"] = 10;\r\n values[valuesById[11] = \"TxVendorControl\"] = 11;\r\n values[valuesById[12] = \"Whitelist\"] = 12;\r\n values[valuesById[13] = \"Generic0\"] = 13;\r\n values[valuesById[14] = \"Generic1\"] = 14;\r\n values[valuesById[15] = \"Generic2\"] = 15;\r\n values[valuesById[16] = \"Generic3\"] = 16;\r\n values[valuesById[17] = \"Generic4\"] = 17;\r\n values[valuesById[18] = \"Generic5\"] = 18;\r\n values[valuesById[19] = \"Generic6\"] = 19;\r\n values[valuesById[20] = \"Generic7\"] = 20;\r\n values[valuesById[21] = \"Generic8\"] = 21;\r\n values[valuesById[22] = \"Generic9\"] = 22;\r\n values[valuesById[23] = \"Generic10\"] = 23;\r\n values[valuesById[24] = \"Generic11\"] = 24;\r\n values[valuesById[25] = \"Generic12\"] = 25;\r\n values[valuesById[26] = \"Generic13\"] = 26;\r\n values[valuesById[27] = \"Generic14\"] = 27;\r\n values[valuesById[28] = \"Generic15\"] = 28;\r\n values[valuesById[29] = \"Generic16\"] = 29;\r\n values[valuesById[30] = \"Generic17\"] = 30;\r\n values[valuesById[31] = \"Generic18\"] = 31;\r\n values[valuesById[32] = \"Generic19\"] = 32;\r\n values[valuesById[33] = \"Generic20\"] = 33;\r\n values[valuesById[34] = \"Generic21\"] = 34;\r\n values[valuesById[35] = \"Generic22\"] = 35;\r\n values[valuesById[36] = \"Generic23\"] = 36;\r\n values[valuesById[37] = \"Generic24\"] = 37;\r\n values[valuesById[38] = \"Generic25\"] = 38;\r\n values[valuesById[39] = \"Generic26\"] = 39;\r\n values[valuesById[40] = \"Generic27\"] = 40;\r\n values[valuesById[41] = \"Generic28\"] = 41;\r\n values[valuesById[42] = \"Generic29\"] = 42;\r\n values[valuesById[43] = \"Generic30\"] = 43;\r\n values[valuesById[44] = \"Generic31\"] = 44;\r\n values[valuesById[45] = \"RxBLEModel\"] = 45;\r\n return values;\r\n })();\r\n\r\n Buttplug.ClientMessage = (function() {\r\n\r\n /**\r\n * Properties of a ClientMessage.\r\n * @memberof Buttplug\r\n * @interface IClientMessage\r\n * @property {number|null} [id] ClientMessage id\r\n * @property {Buttplug.ClientMessage.IFFIMessage|null} [message] ClientMessage message\r\n */\r\n\r\n /**\r\n * Constructs a new ClientMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a ClientMessage.\r\n * @implements IClientMessage\r\n * @constructor\r\n * @param {Buttplug.IClientMessage=} [properties] Properties to set\r\n */\r\n function ClientMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * ClientMessage id.\r\n * @member {number} id\r\n * @memberof Buttplug.ClientMessage\r\n * @instance\r\n */\r\n ClientMessage.prototype.id = 0;\r\n\r\n /**\r\n * ClientMessage message.\r\n * @member {Buttplug.ClientMessage.IFFIMessage|null|undefined} message\r\n * @memberof Buttplug.ClientMessage\r\n * @instance\r\n */\r\n ClientMessage.prototype.message = null;\r\n\r\n /**\r\n * Creates a new ClientMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.IClientMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage} ClientMessage instance\r\n */\r\n ClientMessage.create = function create(properties) {\r\n return new ClientMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified ClientMessage message. Does not implicitly {@link Buttplug.ClientMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.IClientMessage} message ClientMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ClientMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.id != null && Object.hasOwnProperty.call(message, \"id\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.id);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n $root.Buttplug.ClientMessage.FFIMessage.encode(message.message, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified ClientMessage message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.IClientMessage} message ClientMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ClientMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a ClientMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage} ClientMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ClientMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.id = reader.uint32();\r\n break;\r\n case 2:\r\n message.message = $root.Buttplug.ClientMessage.FFIMessage.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a ClientMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage} ClientMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ClientMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a ClientMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ClientMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n if (!$util.isInteger(message.id))\r\n return \"id: integer expected\";\r\n if (message.message != null && message.hasOwnProperty(\"message\")) {\r\n let error = $root.Buttplug.ClientMessage.FFIMessage.verify(message.message);\r\n if (error)\r\n return \"message.\" + error;\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a ClientMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage} ClientMessage\r\n */\r\n ClientMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage)\r\n return object;\r\n let message = new $root.Buttplug.ClientMessage();\r\n if (object.id != null)\r\n message.id = object.id >>> 0;\r\n if (object.message != null) {\r\n if (typeof object.message !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.message: object expected\");\r\n message.message = $root.Buttplug.ClientMessage.FFIMessage.fromObject(object.message);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a ClientMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage} message ClientMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n ClientMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.id = 0;\r\n object.message = null;\r\n }\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n object.id = message.id;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = $root.Buttplug.ClientMessage.FFIMessage.toObject(message.message, options);\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this ClientMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n ClientMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n /**\r\n * DeviceCommunicationManagerTypes enum.\r\n * @name Buttplug.ClientMessage.DeviceCommunicationManagerTypes\r\n * @enum {number}\r\n * @property {number} All=0 All value\r\n * @property {number} Btleplug=1 Btleplug value\r\n * @property {number} XInput=2 XInput value\r\n * @property {number} SerialPort=4 SerialPort value\r\n * @property {number} LovenseHIDDongle=8 LovenseHIDDongle value\r\n * @property {number} LovenseSerialDongle=16 LovenseSerialDongle value\r\n */\r\n ClientMessage.DeviceCommunicationManagerTypes = (function() {\r\n const valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"All\"] = 0;\r\n values[valuesById[1] = \"Btleplug\"] = 1;\r\n values[valuesById[2] = \"XInput\"] = 2;\r\n values[valuesById[4] = \"SerialPort\"] = 4;\r\n values[valuesById[8] = \"LovenseHIDDongle\"] = 8;\r\n values[valuesById[16] = \"LovenseSerialDongle\"] = 16;\r\n return values;\r\n })();\r\n\r\n ClientMessage.ConnectLocal = (function() {\r\n\r\n /**\r\n * Properties of a ConnectLocal.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IConnectLocal\r\n * @property {string|null} [serverName] ConnectLocal serverName\r\n * @property {number|null} [maxPingTime] ConnectLocal maxPingTime\r\n * @property {boolean|null} [allowRawMessages] ConnectLocal allowRawMessages\r\n * @property {string|null} [deviceConfigurationJson] ConnectLocal deviceConfigurationJson\r\n * @property {string|null} [userDeviceConfigurationJson] ConnectLocal userDeviceConfigurationJson\r\n * @property {number|null} [commManagerTypes] ConnectLocal commManagerTypes\r\n */\r\n\r\n /**\r\n * Constructs a new ConnectLocal.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a ConnectLocal.\r\n * @implements IConnectLocal\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IConnectLocal=} [properties] Properties to set\r\n */\r\n function ConnectLocal(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * ConnectLocal serverName.\r\n * @member {string} serverName\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.serverName = \"\";\r\n\r\n /**\r\n * ConnectLocal maxPingTime.\r\n * @member {number} maxPingTime\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.maxPingTime = 0;\r\n\r\n /**\r\n * ConnectLocal allowRawMessages.\r\n * @member {boolean} allowRawMessages\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.allowRawMessages = false;\r\n\r\n /**\r\n * ConnectLocal deviceConfigurationJson.\r\n * @member {string} deviceConfigurationJson\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.deviceConfigurationJson = \"\";\r\n\r\n /**\r\n * ConnectLocal userDeviceConfigurationJson.\r\n * @member {string} userDeviceConfigurationJson\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.userDeviceConfigurationJson = \"\";\r\n\r\n /**\r\n * ConnectLocal commManagerTypes.\r\n * @member {number} commManagerTypes\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.commManagerTypes = 0;\r\n\r\n /**\r\n * Creates a new ConnectLocal instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectLocal=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal instance\r\n */\r\n ConnectLocal.create = function create(properties) {\r\n return new ConnectLocal(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified ConnectLocal message. Does not implicitly {@link Buttplug.ClientMessage.ConnectLocal.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectLocal} message ConnectLocal message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectLocal.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.serverName != null && Object.hasOwnProperty.call(message, \"serverName\"))\r\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.serverName);\r\n if (message.maxPingTime != null && Object.hasOwnProperty.call(message, \"maxPingTime\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.maxPingTime);\r\n if (message.allowRawMessages != null && Object.hasOwnProperty.call(message, \"allowRawMessages\"))\r\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.allowRawMessages);\r\n if (message.deviceConfigurationJson != null && Object.hasOwnProperty.call(message, \"deviceConfigurationJson\"))\r\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.deviceConfigurationJson);\r\n if (message.userDeviceConfigurationJson != null && Object.hasOwnProperty.call(message, \"userDeviceConfigurationJson\"))\r\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.userDeviceConfigurationJson);\r\n if (message.commManagerTypes != null && Object.hasOwnProperty.call(message, \"commManagerTypes\"))\r\n writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.commManagerTypes);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified ConnectLocal message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.ConnectLocal.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectLocal} message ConnectLocal message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectLocal.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a ConnectLocal message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectLocal.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.ConnectLocal();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.serverName = reader.string();\r\n break;\r\n case 2:\r\n message.maxPingTime = reader.uint32();\r\n break;\r\n case 3:\r\n message.allowRawMessages = reader.bool();\r\n break;\r\n case 4:\r\n message.deviceConfigurationJson = reader.string();\r\n break;\r\n case 5:\r\n message.userDeviceConfigurationJson = reader.string();\r\n break;\r\n case 6:\r\n message.commManagerTypes = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a ConnectLocal message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectLocal.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a ConnectLocal message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ConnectLocal.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.serverName != null && message.hasOwnProperty(\"serverName\"))\r\n if (!$util.isString(message.serverName))\r\n return \"serverName: string expected\";\r\n if (message.maxPingTime != null && message.hasOwnProperty(\"maxPingTime\"))\r\n if (!$util.isInteger(message.maxPingTime))\r\n return \"maxPingTime: integer expected\";\r\n if (message.allowRawMessages != null && message.hasOwnProperty(\"allowRawMessages\"))\r\n if (typeof message.allowRawMessages !== \"boolean\")\r\n return \"allowRawMessages: boolean expected\";\r\n if (message.deviceConfigurationJson != null && message.hasOwnProperty(\"deviceConfigurationJson\"))\r\n if (!$util.isString(message.deviceConfigurationJson))\r\n return \"deviceConfigurationJson: string expected\";\r\n if (message.userDeviceConfigurationJson != null && message.hasOwnProperty(\"userDeviceConfigurationJson\"))\r\n if (!$util.isString(message.userDeviceConfigurationJson))\r\n return \"userDeviceConfigurationJson: string expected\";\r\n if (message.commManagerTypes != null && message.hasOwnProperty(\"commManagerTypes\"))\r\n if (!$util.isInteger(message.commManagerTypes))\r\n return \"commManagerTypes: integer expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a ConnectLocal message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal\r\n */\r\n ConnectLocal.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.ConnectLocal)\r\n return object;\r\n let message = new $root.Buttplug.ClientMessage.ConnectLocal();\r\n if (object.serverName != null)\r\n message.serverName = String(object.serverName);\r\n if (object.maxPingTime != null)\r\n message.maxPingTime = object.maxPingTime >>> 0;\r\n if (object.allowRawMessages != null)\r\n message.allowRawMessages = Boolean(object.allowRawMessages);\r\n if (object.deviceConfigurationJson != null)\r\n message.deviceConfigurationJson = String(object.deviceConfigurationJson);\r\n if (object.userDeviceConfigurationJson != null)\r\n message.userDeviceConfigurationJson = String(object.userDeviceConfigurationJson);\r\n if (object.commManagerTypes != null)\r\n message.commManagerTypes = object.commManagerTypes >>> 0;\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a ConnectLocal message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.ConnectLocal} message ConnectLocal\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n ConnectLocal.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.serverName = \"\";\r\n object.maxPingTime = 0;\r\n object.allowRawMessages = false;\r\n object.deviceConfigurationJson = \"\";\r\n object.userDeviceConfigurationJson = \"\";\r\n object.commManagerTypes = 0;\r\n }\r\n if (message.serverName != null && message.hasOwnProperty(\"serverName\"))\r\n object.serverName = message.serverName;\r\n if (message.maxPingTime != null && message.hasOwnProperty(\"maxPingTime\"))\r\n object.maxPingTime = message.maxPingTime;\r\n if (message.allowRawMessages != null && message.hasOwnProperty(\"allowRawMessages\"))\r\n object.allowRawMessages = message.allowRawMessages;\r\n if (message.deviceConfigurationJson != null && message.hasOwnProperty(\"deviceConfigurationJson\"))\r\n object.deviceConfigurationJson = message.deviceConfigurationJson;\r\n if (message.userDeviceConfigurationJson != null && message.hasOwnProperty(\"userDeviceConfigurationJson\"))\r\n object.userDeviceConfigurationJson = message.userDeviceConfigurationJson;\r\n if (message.commManagerTypes != null && message.hasOwnProperty(\"commManagerTypes\"))\r\n object.commManagerTypes = message.commManagerTypes;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this ConnectLocal to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n ConnectLocal.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return ConnectLocal;\r\n })();\r\n\r\n ClientMessage.ConnectWebsocket = (function() {\r\n\r\n /**\r\n * Properties of a ConnectWebsocket.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IConnectWebsocket\r\n * @property {string|null} [address] ConnectWebsocket address\r\n * @property {boolean|null} [bypassCertVerification] ConnectWebsocket bypassCertVerification\r\n */\r\n\r\n /**\r\n * Constructs a new ConnectWebsocket.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a ConnectWebsocket.\r\n * @implements IConnectWebsocket\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket=} [properties] Properties to set\r\n */\r\n function ConnectWebsocket(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * ConnectWebsocket address.\r\n * @member {string} address\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @instance\r\n */\r\n ConnectWebsocket.prototype.address = \"\";\r\n\r\n /**\r\n * ConnectWebsocket bypassCertVerification.\r\n * @member {boolean} bypassCertVerification\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @instance\r\n */\r\n ConnectWebsocket.prototype.bypassCertVerification = false;\r\n\r\n /**\r\n * Creates a new ConnectWebsocket instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket instance\r\n */\r\n ConnectWebsocket.create = function create(properties) {\r\n return new ConnectWebsocket(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified ConnectWebsocket message. Does not implicitly {@link Buttplug.ClientMessage.ConnectWebsocket.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket} message ConnectWebsocket message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectWebsocket.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.address != null && Object.hasOwnProperty.call(message, \"address\"))\r\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.address);\r\n if (message.bypassCertVerification != null && Object.hasOwnProperty.call(message, \"bypassCertVerification\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).bool(message.bypassCertVerification);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified ConnectWebsocket message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.ConnectWebsocket.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket} message ConnectWebsocket message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectWebsocket.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a ConnectWebsocket message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectWebsocket.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.ConnectWebsocket();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.address = reader.string();\r\n break;\r\n case 2:\r\n message.bypassCertVerification = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a ConnectWebsocket message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectWebsocket.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a ConnectWebsocket message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ConnectWebsocket.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.address != null && message.hasOwnProperty(\"address\"))\r\n if (!$util.isString(message.address))\r\n return \"address: string expected\";\r\n if (message.bypassCertVerification != null && message.hasOwnProperty(\"bypassCertVerification\"))\r\n if (typeof message.bypassCertVerification !== \"boolean\")\r\n return \"bypassCertVerification: boolean expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a ConnectWebsocket message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket\r\n */\r\n ConnectWebsocket.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.ConnectWebsocket)\r\n return object;\r\n let message = new $root.Buttplug.ClientMessage.ConnectWebsocket();\r\n if (object.address != null)\r\n message.address = String(object.address);\r\n if (object.bypassCertVerification != null)\r\n message.bypassCertVerification = Boolean(object.bypassCertVerification);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a ConnectWebsocket message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.ConnectWebsocket} message ConnectWebsocket\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n ConnectWebsocket.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.address = \"\";\r\n object.bypassCertVerification = false;\r\n }\r\n if (message.address != null && message.hasOwnProperty(\"address\"))\r\n object.address = message.address;\r\n if (message.bypassCertVerification != null && message.hasOwnProperty(\"bypassCertVerification\"))\r\n object.bypassCertVerification = message.bypassCertVerification;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this ConnectWebsocket to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n ConnectWebsocket.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return ConnectWebsocket;\r\n })();\r\n\r\n ClientMessage.StartScanning = (function() {\r\n\r\n /**\r\n * Properties of a StartScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IStartScanning\r\n */\r\n\r\n /**\r\n * Constructs a new StartScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a StartScanning.\r\n * @implements IStartScanning\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IStartScanning=} [properties] Properties to set\r\n */\r\n function StartScanning(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new StartScanning instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStartScanning=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning instance\r\n */\r\n StartScanning.create = function create(properties) {\r\n return new StartScanning(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified StartScanning message. Does not implicitly {@link Buttplug.ClientMessage.StartScanning.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStartScanning} message StartScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StartScanning.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified StartScanning message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.StartScanning.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStartScanning} message StartScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StartScanning.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a StartScanning message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StartScanning.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.StartScanning();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a StartScanning message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StartScanning.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a StartScanning message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StartScanning.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a StartScanning message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning\r\n */\r\n StartScanning.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.StartScanning)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.StartScanning();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a StartScanning message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.StartScanning} message StartScanning\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n StartScanning.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this StartScanning to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n StartScanning.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return StartScanning;\r\n })();\r\n\r\n ClientMessage.StopScanning = (function() {\r\n\r\n /**\r\n * Properties of a StopScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IStopScanning\r\n */\r\n\r\n /**\r\n * Constructs a new StopScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a StopScanning.\r\n * @implements IStopScanning\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IStopScanning=} [properties] Properties to set\r\n */\r\n function StopScanning(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new StopScanning instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopScanning=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning instance\r\n */\r\n StopScanning.create = function create(properties) {\r\n return new StopScanning(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified StopScanning message. Does not implicitly {@link Buttplug.ClientMessage.StopScanning.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopScanning} message StopScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopScanning.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified StopScanning message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.StopScanning.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopScanning} message StopScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopScanning.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a StopScanning message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopScanning.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.StopScanning();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a StopScanning message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopScanning.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a StopScanning message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StopScanning.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a StopScanning message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning\r\n */\r\n StopScanning.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.StopScanning)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.StopScanning();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a StopScanning message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.StopScanning} message StopScanning\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n StopScanning.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this StopScanning to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n StopScanning.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return StopScanning;\r\n })();\r\n\r\n ClientMessage.StopAllDevices = (function() {\r\n\r\n /**\r\n * Properties of a StopAllDevices.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IStopAllDevices\r\n */\r\n\r\n /**\r\n * Constructs a new StopAllDevices.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a StopAllDevices.\r\n * @implements IStopAllDevices\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IStopAllDevices=} [properties] Properties to set\r\n */\r\n function StopAllDevices(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new StopAllDevices instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopAllDevices=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices instance\r\n */\r\n StopAllDevices.create = function create(properties) {\r\n return new StopAllDevices(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified StopAllDevices message. Does not implicitly {@link Buttplug.ClientMessage.StopAllDevices.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopAllDevices} message StopAllDevices message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopAllDevices.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified StopAllDevices message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.StopAllDevices.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopAllDevices} message StopAllDevices message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopAllDevices.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a StopAllDevices message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopAllDevices.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.StopAllDevices();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a StopAllDevices message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopAllDevices.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a StopAllDevices message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StopAllDevices.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a StopAllDevices message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices\r\n */\r\n StopAllDevices.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.StopAllDevices)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.StopAllDevices();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a StopAllDevices message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.StopAllDevices} message StopAllDevices\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n StopAllDevices.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this StopAllDevices to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n StopAllDevices.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return StopAllDevices;\r\n })();\r\n\r\n ClientMessage.Disconnect = (function() {\r\n\r\n /**\r\n * Properties of a Disconnect.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IDisconnect\r\n */\r\n\r\n /**\r\n * Constructs a new Disconnect.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a Disconnect.\r\n * @implements IDisconnect\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IDisconnect=} [properties] Properties to set\r\n */\r\n function Disconnect(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new Disconnect instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.IDisconnect=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect instance\r\n */\r\n Disconnect.create = function create(properties) {\r\n return new Disconnect(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified Disconnect message. Does not implicitly {@link Buttplug.ClientMessage.Disconnect.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified Disconnect message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.Disconnect.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.Disconnect();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a Disconnect message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Disconnect.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a Disconnect message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect\r\n */\r\n Disconnect.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.Disconnect)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.Disconnect();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a Disconnect message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.Disconnect} message Disconnect\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n Disconnect.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this Disconnect to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n Disconnect.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return Disconnect;\r\n })();\r\n\r\n ClientMessage.Ping = (function() {\r\n\r\n /**\r\n * Properties of a Ping.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IPing\r\n */\r\n\r\n /**\r\n * Constructs a new Ping.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a Ping.\r\n * @implements IPing\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IPing=} [properties] Properties to set\r\n */\r\n function Ping(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new Ping instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.IPing=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.Ping} Ping instance\r\n */\r\n Ping.create = function create(properties) {\r\n return new Ping(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified Ping message. Does not implicitly {@link Buttplug.ClientMessage.Ping.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.IPing} message Ping message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ping.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified Ping message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.Ping.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.IPing} message Ping message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ping.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a Ping message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.Ping} Ping\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ping.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.Ping();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a Ping message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.Ping} Ping\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ping.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a Ping message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Ping.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a Ping message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.Ping} Ping\r\n */\r\n Ping.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.Ping)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.Ping();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a Ping message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.Ping} message Ping\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n Ping.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this Ping to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n Ping.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return Ping;\r\n })();\r\n\r\n ClientMessage.FFIMessage = (function() {\r\n\r\n /**\r\n * Properties of a FFIMessage.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IFFIMessage\r\n * @property {Buttplug.ClientMessage.IConnectLocal|null} [connectLocal] FFIMessage connectLocal\r\n * @property {Buttplug.ClientMessage.IConnectWebsocket|null} [connectWebsocket] FFIMessage connectWebsocket\r\n * @property {Buttplug.ClientMessage.IStartScanning|null} [startScanning] FFIMessage startScanning\r\n * @property {Buttplug.ClientMessage.IStopScanning|null} [stopScanning] FFIMessage stopScanning\r\n * @property {Buttplug.ClientMessage.IStopAllDevices|null} [stopAllDevices] FFIMessage stopAllDevices\r\n * @property {Buttplug.ClientMessage.IDisconnect|null} [disconnect] FFIMessage disconnect\r\n * @property {Buttplug.ClientMessage.IPing|null} [ping] FFIMessage ping\r\n */\r\n\r\n /**\r\n * Constructs a new FFIMessage.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a FFIMessage.\r\n * @implements IFFIMessage\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IFFIMessage=} [properties] Properties to set\r\n */\r\n function FFIMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * FFIMessage connectLocal.\r\n * @member {Buttplug.ClientMessage.IConnectLocal|null|undefined} connectLocal\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.connectLocal = null;\r\n\r\n /**\r\n * FFIMessage connectWebsocket.\r\n * @member {Buttplug.ClientMessage.IConnectWebsocket|null|undefined} connectWebsocket\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.connectWebsocket = null;\r\n\r\n /**\r\n * FFIMessage startScanning.\r\n * @member {Buttplug.ClientMessage.IStartScanning|null|undefined} startScanning\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.startScanning = null;\r\n\r\n /**\r\n * FFIMessage stopScanning.\r\n * @member {Buttplug.ClientMessage.IStopScanning|null|undefined} stopScanning\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.stopScanning = null;\r\n\r\n /**\r\n * FFIMessage stopAllDevices.\r\n * @member {Buttplug.ClientMessage.IStopAllDevices|null|undefined} stopAllDevices\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.stopAllDevices = null;\r\n\r\n /**\r\n * FFIMessage disconnect.\r\n * @member {Buttplug.ClientMessage.IDisconnect|null|undefined} disconnect\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.disconnect = null;\r\n\r\n /**\r\n * FFIMessage ping.\r\n * @member {Buttplug.ClientMessage.IPing|null|undefined} ping\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.ping = null;\r\n\r\n // OneOf field names bound to virtual getters and setters\r\n let $oneOfFields;\r\n\r\n /**\r\n * FFIMessage msg.\r\n * @member {\"connectLocal\"|\"connectWebsocket\"|\"startScanning\"|\"stopScanning\"|\"stopAllDevices\"|\"disconnect\"|\"ping\"|undefined} msg\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n Object.defineProperty(FFIMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"connectLocal\", \"connectWebsocket\", \"startScanning\", \"stopScanning\", \"stopAllDevices\", \"disconnect\", \"ping\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n\r\n /**\r\n * Creates a new FFIMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.IFFIMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage instance\r\n */\r\n FFIMessage.create = function create(properties) {\r\n return new FFIMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified FFIMessage message. Does not implicitly {@link Buttplug.ClientMessage.FFIMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.connectLocal != null && Object.hasOwnProperty.call(message, \"connectLocal\"))\r\n $root.Buttplug.ClientMessage.ConnectLocal.encode(message.connectLocal, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n if (message.connectWebsocket != null && Object.hasOwnProperty.call(message, \"connectWebsocket\"))\r\n $root.Buttplug.ClientMessage.ConnectWebsocket.encode(message.connectWebsocket, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n if (message.startScanning != null && Object.hasOwnProperty.call(message, \"startScanning\"))\r\n $root.Buttplug.ClientMessage.StartScanning.encode(message.startScanning, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\r\n if (message.stopScanning != null && Object.hasOwnProperty.call(message, \"stopScanning\"))\r\n $root.Buttplug.ClientMessage.StopScanning.encode(message.stopScanning, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\r\n if (message.stopAllDevices != null && Object.hasOwnProperty.call(message, \"stopAllDevices\"))\r\n $root.Buttplug.ClientMessage.StopAllDevices.encode(message.stopAllDevices, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\r\n if (message.disconnect != null && Object.hasOwnProperty.call(message, \"disconnect\"))\r\n $root.Buttplug.ClientMessage.Disconnect.encode(message.disconnect, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\r\n if (message.ping != null && Object.hasOwnProperty.call(message, \"ping\"))\r\n $root.Buttplug.ClientMessage.Ping.encode(message.ping, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified FFIMessage message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.FFIMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.FFIMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.connectLocal = $root.Buttplug.ClientMessage.ConnectLocal.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.connectWebsocket = $root.Buttplug.ClientMessage.ConnectWebsocket.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.startScanning = $root.Buttplug.ClientMessage.StartScanning.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.stopScanning = $root.Buttplug.ClientMessage.StopScanning.decode(reader, reader.uint32());\r\n break;\r\n case 5:\r\n message.stopAllDevices = $root.Buttplug.ClientMessage.StopAllDevices.decode(reader, reader.uint32());\r\n break;\r\n case 6:\r\n message.disconnect = $root.Buttplug.ClientMessage.Disconnect.decode(reader, reader.uint32());\r\n break;\r\n case 7:\r\n message.ping = $root.Buttplug.ClientMessage.Ping.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a FFIMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n FFIMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n let properties = {};\r\n if (message.connectLocal != null && message.hasOwnProperty(\"connectLocal\")) {\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.ConnectLocal.verify(message.connectLocal);\r\n if (error)\r\n return \"connectLocal.\" + error;\r\n }\r\n }\r\n if (message.connectWebsocket != null && message.hasOwnProperty(\"connectWebsocket\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.ConnectWebsocket.verify(message.connectWebsocket);\r\n if (error)\r\n return \"connectWebsocket.\" + error;\r\n }\r\n }\r\n if (message.startScanning != null && message.hasOwnProperty(\"startScanning\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.StartScanning.verify(message.startScanning);\r\n if (error)\r\n return \"startScanning.\" + error;\r\n }\r\n }\r\n if (message.stopScanning != null && message.hasOwnProperty(\"stopScanning\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.StopScanning.verify(message.stopScanning);\r\n if (error)\r\n return \"stopScanning.\" + error;\r\n }\r\n }\r\n if (message.stopAllDevices != null && message.hasOwnProperty(\"stopAllDevices\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.StopAllDevices.verify(message.stopAllDevices);\r\n if (error)\r\n return \"stopAllDevices.\" + error;\r\n }\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.Disconnect.verify(message.disconnect);\r\n if (error)\r\n return \"disconnect.\" + error;\r\n }\r\n }\r\n if (message.ping != null && message.hasOwnProperty(\"ping\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ClientMessage.Ping.verify(message.ping);\r\n if (error)\r\n return \"ping.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a FFIMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage\r\n */\r\n FFIMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.FFIMessage)\r\n return object;\r\n let message = new $root.Buttplug.ClientMessage.FFIMessage();\r\n if (object.connectLocal != null) {\r\n if (typeof object.connectLocal !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.connectLocal: object expected\");\r\n message.connectLocal = $root.Buttplug.ClientMessage.ConnectLocal.fromObject(object.connectLocal);\r\n }\r\n if (object.connectWebsocket != null) {\r\n if (typeof object.connectWebsocket !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.connectWebsocket: object expected\");\r\n message.connectWebsocket = $root.Buttplug.ClientMessage.ConnectWebsocket.fromObject(object.connectWebsocket);\r\n }\r\n if (object.startScanning != null) {\r\n if (typeof object.startScanning !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.startScanning: object expected\");\r\n message.startScanning = $root.Buttplug.ClientMessage.StartScanning.fromObject(object.startScanning);\r\n }\r\n if (object.stopScanning != null) {\r\n if (typeof object.stopScanning !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.stopScanning: object expected\");\r\n message.stopScanning = $root.Buttplug.ClientMessage.StopScanning.fromObject(object.stopScanning);\r\n }\r\n if (object.stopAllDevices != null) {\r\n if (typeof object.stopAllDevices !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.stopAllDevices: object expected\");\r\n message.stopAllDevices = $root.Buttplug.ClientMessage.StopAllDevices.fromObject(object.stopAllDevices);\r\n }\r\n if (object.disconnect != null) {\r\n if (typeof object.disconnect !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.disconnect: object expected\");\r\n message.disconnect = $root.Buttplug.ClientMessage.Disconnect.fromObject(object.disconnect);\r\n }\r\n if (object.ping != null) {\r\n if (typeof object.ping !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.ping: object expected\");\r\n message.ping = $root.Buttplug.ClientMessage.Ping.fromObject(object.ping);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a FFIMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.FFIMessage} message FFIMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n FFIMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (message.connectLocal != null && message.hasOwnProperty(\"connectLocal\")) {\r\n object.connectLocal = $root.Buttplug.ClientMessage.ConnectLocal.toObject(message.connectLocal, options);\r\n if (options.oneofs)\r\n object.msg = \"connectLocal\";\r\n }\r\n if (message.connectWebsocket != null && message.hasOwnProperty(\"connectWebsocket\")) {\r\n object.connectWebsocket = $root.Buttplug.ClientMessage.ConnectWebsocket.toObject(message.connectWebsocket, options);\r\n if (options.oneofs)\r\n object.msg = \"connectWebsocket\";\r\n }\r\n if (message.startScanning != null && message.hasOwnProperty(\"startScanning\")) {\r\n object.startScanning = $root.Buttplug.ClientMessage.StartScanning.toObject(message.startScanning, options);\r\n if (options.oneofs)\r\n object.msg = \"startScanning\";\r\n }\r\n if (message.stopScanning != null && message.hasOwnProperty(\"stopScanning\")) {\r\n object.stopScanning = $root.Buttplug.ClientMessage.StopScanning.toObject(message.stopScanning, options);\r\n if (options.oneofs)\r\n object.msg = \"stopScanning\";\r\n }\r\n if (message.stopAllDevices != null && message.hasOwnProperty(\"stopAllDevices\")) {\r\n object.stopAllDevices = $root.Buttplug.ClientMessage.StopAllDevices.toObject(message.stopAllDevices, options);\r\n if (options.oneofs)\r\n object.msg = \"stopAllDevices\";\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n object.disconnect = $root.Buttplug.ClientMessage.Disconnect.toObject(message.disconnect, options);\r\n if (options.oneofs)\r\n object.msg = \"disconnect\";\r\n }\r\n if (message.ping != null && message.hasOwnProperty(\"ping\")) {\r\n object.ping = $root.Buttplug.ClientMessage.Ping.toObject(message.ping, options);\r\n if (options.oneofs)\r\n object.msg = \"ping\";\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this FFIMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n FFIMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return FFIMessage;\r\n })();\r\n\r\n return ClientMessage;\r\n })();\r\n\r\n Buttplug.DeviceMessage = (function() {\r\n\r\n /**\r\n * Properties of a DeviceMessage.\r\n * @memberof Buttplug\r\n * @interface IDeviceMessage\r\n * @property {number|null} [id] DeviceMessage id\r\n * @property {number|null} [index] DeviceMessage index\r\n * @property {Buttplug.DeviceMessage.IFFIMessage|null} [message] DeviceMessage message\r\n */\r\n\r\n /**\r\n * Constructs a new DeviceMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a DeviceMessage.\r\n * @implements IDeviceMessage\r\n * @constructor\r\n * @param {Buttplug.IDeviceMessage=} [properties] Properties to set\r\n */\r\n function DeviceMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * DeviceMessage id.\r\n * @member {number} id\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n */\r\n DeviceMessage.prototype.id = 0;\r\n\r\n /**\r\n * DeviceMessage index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n */\r\n DeviceMessage.prototype.index = 0;\r\n\r\n /**\r\n * DeviceMessage message.\r\n * @member {Buttplug.DeviceMessage.IFFIMessage|null|undefined} message\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n */\r\n DeviceMessage.prototype.message = null;\r\n\r\n /**\r\n * Creates a new DeviceMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.IDeviceMessage=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage instance\r\n */\r\n DeviceMessage.create = function create(properties) {\r\n return new DeviceMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceMessage message. Does not implicitly {@link Buttplug.DeviceMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.IDeviceMessage} message DeviceMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.id != null && Object.hasOwnProperty.call(message, \"id\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.id);\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.index);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n $root.Buttplug.DeviceMessage.FFIMessage.encode(message.message, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceMessage message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.IDeviceMessage} message DeviceMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a DeviceMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.id = reader.uint32();\r\n break;\r\n case 2:\r\n message.index = reader.uint32();\r\n break;\r\n case 3:\r\n message.message = $root.Buttplug.DeviceMessage.FFIMessage.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a DeviceMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a DeviceMessage message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n if (!$util.isInteger(message.id))\r\n return \"id: integer expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.message != null && message.hasOwnProperty(\"message\")) {\r\n let error = $root.Buttplug.DeviceMessage.FFIMessage.verify(message.message);\r\n if (error)\r\n return \"message.\" + error;\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a DeviceMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage\r\n */\r\n DeviceMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage();\r\n if (object.id != null)\r\n message.id = object.id >>> 0;\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.message != null) {\r\n if (typeof object.message !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.message: object expected\");\r\n message.message = $root.Buttplug.DeviceMessage.FFIMessage.fromObject(object.message);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a DeviceMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage} message DeviceMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n DeviceMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.id = 0;\r\n object.index = 0;\r\n object.message = null;\r\n }\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n object.id = message.id;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = $root.Buttplug.DeviceMessage.FFIMessage.toObject(message.message, options);\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this DeviceMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n DeviceMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n DeviceMessage.VibrateComponent = (function() {\r\n\r\n /**\r\n * Properties of a VibrateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IVibrateComponent\r\n * @property {number|null} [index] VibrateComponent index\r\n * @property {number|null} [speed] VibrateComponent speed\r\n */\r\n\r\n /**\r\n * Constructs a new VibrateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a VibrateComponent.\r\n * @implements IVibrateComponent\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent=} [properties] Properties to set\r\n */\r\n function VibrateComponent(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * VibrateComponent index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @instance\r\n */\r\n VibrateComponent.prototype.index = 0;\r\n\r\n /**\r\n * VibrateComponent speed.\r\n * @member {number} speed\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @instance\r\n */\r\n VibrateComponent.prototype.speed = 0;\r\n\r\n /**\r\n * Creates a new VibrateComponent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent instance\r\n */\r\n VibrateComponent.create = function create(properties) {\r\n return new VibrateComponent(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified VibrateComponent message. Does not implicitly {@link Buttplug.DeviceMessage.VibrateComponent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent} message VibrateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateComponent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n if (message.speed != null && Object.hasOwnProperty.call(message, \"speed\"))\r\n writer.uint32(/* id 2, wireType 1 =*/17).double(message.speed);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified VibrateComponent message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.VibrateComponent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent} message VibrateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateComponent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a VibrateComponent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateComponent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.VibrateComponent();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.speed = reader.double();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a VibrateComponent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateComponent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a VibrateComponent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n VibrateComponent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n if (typeof message.speed !== \"number\")\r\n return \"speed: number expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a VibrateComponent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent\r\n */\r\n VibrateComponent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.VibrateComponent)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.VibrateComponent();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.speed != null)\r\n message.speed = Number(object.speed);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a VibrateComponent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.VibrateComponent} message VibrateComponent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n VibrateComponent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.speed = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n object.speed = options.json && !isFinite(message.speed) ? String(message.speed) : message.speed;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this VibrateComponent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n VibrateComponent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return VibrateComponent;\r\n })();\r\n\r\n DeviceMessage.VibrateCmd = (function() {\r\n\r\n /**\r\n * Properties of a VibrateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IVibrateCmd\r\n * @property {Array.<Buttplug.DeviceMessage.IVibrateComponent>|null} [speeds] VibrateCmd speeds\r\n */\r\n\r\n /**\r\n * Constructs a new VibrateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a VibrateCmd.\r\n * @implements IVibrateCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd=} [properties] Properties to set\r\n */\r\n function VibrateCmd(properties) {\r\n this.speeds = [];\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * VibrateCmd speeds.\r\n * @member {Array.<Buttplug.DeviceMessage.IVibrateComponent>} speeds\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @instance\r\n */\r\n VibrateCmd.prototype.speeds = $util.emptyArray;\r\n\r\n /**\r\n * Creates a new VibrateCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd instance\r\n */\r\n VibrateCmd.create = function create(properties) {\r\n return new VibrateCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified VibrateCmd message. Does not implicitly {@link Buttplug.DeviceMessage.VibrateCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd} message VibrateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.speeds != null && message.speeds.length)\r\n for (let i = 0; i < message.speeds.length; ++i)\r\n $root.Buttplug.DeviceMessage.VibrateComponent.encode(message.speeds[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified VibrateCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.VibrateCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd} message VibrateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a VibrateCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.VibrateCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n if (!(message.speeds && message.speeds.length))\r\n message.speeds = [];\r\n message.speeds.push($root.Buttplug.DeviceMessage.VibrateComponent.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a VibrateCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a VibrateCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n VibrateCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.speeds != null && message.hasOwnProperty(\"speeds\")) {\r\n if (!Array.isArray(message.speeds))\r\n return \"speeds: array expected\";\r\n for (let i = 0; i < message.speeds.length; ++i) {\r\n let error = $root.Buttplug.DeviceMessage.VibrateComponent.verify(message.speeds[i]);\r\n if (error)\r\n return \"speeds.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a VibrateCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd\r\n */\r\n VibrateCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.VibrateCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.VibrateCmd();\r\n if (object.speeds) {\r\n if (!Array.isArray(object.speeds))\r\n throw TypeError(\".Buttplug.DeviceMessage.VibrateCmd.speeds: array expected\");\r\n message.speeds = [];\r\n for (let i = 0; i < object.speeds.length; ++i) {\r\n if (typeof object.speeds[i] !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.VibrateCmd.speeds: object expected\");\r\n message.speeds[i] = $root.Buttplug.DeviceMessage.VibrateComponent.fromObject(object.speeds[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a VibrateCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.VibrateCmd} message VibrateCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n VibrateCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.arrays || options.defaults)\r\n object.speeds = [];\r\n if (message.speeds && message.speeds.length) {\r\n object.speeds = [];\r\n for (let j = 0; j < message.speeds.length; ++j)\r\n object.speeds[j] = $root.Buttplug.DeviceMessage.VibrateComponent.toObject(message.speeds[j], options);\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this VibrateCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n VibrateCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return VibrateCmd;\r\n })();\r\n\r\n DeviceMessage.RotateComponent = (function() {\r\n\r\n /**\r\n * Properties of a RotateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRotateComponent\r\n * @property {number|null} [index] RotateComponent index\r\n * @property {number|null} [speed] RotateComponent speed\r\n * @property {boolean|null} [clockwise] RotateComponent clockwise\r\n */\r\n\r\n /**\r\n * Constructs a new RotateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RotateComponent.\r\n * @implements IRotateComponent\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRotateComponent=} [properties] Properties to set\r\n */\r\n function RotateComponent(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RotateComponent index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n */\r\n RotateComponent.prototype.index = 0;\r\n\r\n /**\r\n * RotateComponent speed.\r\n * @member {number} speed\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n */\r\n RotateComponent.prototype.speed = 0;\r\n\r\n /**\r\n * RotateComponent clockwise.\r\n * @member {boolean} clockwise\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n */\r\n RotateComponent.prototype.clockwise = false;\r\n\r\n /**\r\n * Creates a new RotateComponent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateComponent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent instance\r\n */\r\n RotateComponent.create = function create(properties) {\r\n return new RotateComponent(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RotateComponent message. Does not implicitly {@link Buttplug.DeviceMessage.RotateComponent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateComponent} message RotateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateComponent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n if (message.speed != null && Object.hasOwnProperty.call(message, \"speed\"))\r\n writer.uint32(/* id 2, wireType 1 =*/17).double(message.speed);\r\n if (message.clockwise != null && Object.hasOwnProperty.call(message, \"clockwise\"))\r\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.clockwise);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RotateComponent message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RotateComponent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateComponent} message RotateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateComponent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RotateComponent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateComponent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RotateComponent();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.speed = reader.double();\r\n break;\r\n case 3:\r\n message.clockwise = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RotateComponent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateComponent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RotateComponent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RotateComponent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n if (typeof message.speed !== \"number\")\r\n return \"speed: number expected\";\r\n if (message.clockwise != null && message.hasOwnProperty(\"clockwise\"))\r\n if (typeof message.clockwise !== \"boolean\")\r\n return \"clockwise: boolean expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RotateComponent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent\r\n */\r\n RotateComponent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RotateComponent)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.RotateComponent();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.speed != null)\r\n message.speed = Number(object.speed);\r\n if (object.clockwise != null)\r\n message.clockwise = Boolean(object.clockwise);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RotateComponent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RotateComponent} message RotateComponent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RotateComponent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.speed = 0;\r\n object.clockwise = false;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n object.speed = options.json && !isFinite(message.speed) ? String(message.speed) : message.speed;\r\n if (message.clockwise != null && message.hasOwnProperty(\"clockwise\"))\r\n object.clockwise = message.clockwise;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RotateComponent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RotateComponent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RotateComponent;\r\n })();\r\n\r\n DeviceMessage.RotateCmd = (function() {\r\n\r\n /**\r\n * Properties of a RotateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRotateCmd\r\n * @property {Array.<Buttplug.DeviceMessage.IRotateComponent>|null} [rotations] RotateCmd rotations\r\n */\r\n\r\n /**\r\n * Constructs a new RotateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RotateCmd.\r\n * @implements IRotateCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRotateCmd=} [properties] Properties to set\r\n */\r\n function RotateCmd(properties) {\r\n this.rotations = [];\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RotateCmd rotations.\r\n * @member {Array.<Buttplug.DeviceMessage.IRotateComponent>} rotations\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @instance\r\n */\r\n RotateCmd.prototype.rotations = $util.emptyArray;\r\n\r\n /**\r\n * Creates a new RotateCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd instance\r\n */\r\n RotateCmd.create = function create(properties) {\r\n return new RotateCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RotateCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RotateCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateCmd} message RotateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.rotations != null && message.rotations.length)\r\n for (let i = 0; i < message.rotations.length; ++i)\r\n $root.Buttplug.DeviceMessage.RotateComponent.encode(message.rotations[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RotateCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RotateCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateCmd} message RotateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RotateCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RotateCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n if (!(message.rotations && message.rotations.length))\r\n message.rotations = [];\r\n message.rotations.push($root.Buttplug.DeviceMessage.RotateComponent.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RotateCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RotateCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RotateCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.rotations != null && message.hasOwnProperty(\"rotations\")) {\r\n if (!Array.isArray(message.rotations))\r\n return \"rotations: array expected\";\r\n for (let i = 0; i < message.rotations.length; ++i) {\r\n let error = $root.Buttplug.DeviceMessage.RotateComponent.verify(message.rotations[i]);\r\n if (error)\r\n return \"rotations.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RotateCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd\r\n */\r\n RotateCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RotateCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.RotateCmd();\r\n if (object.rotations) {\r\n if (!Array.isArray(object.rotations))\r\n throw TypeError(\".Buttplug.DeviceMessage.RotateCmd.rotations: array expected\");\r\n message.rotations = [];\r\n for (let i = 0; i < object.rotations.length; ++i) {\r\n if (typeof object.rotations[i] !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.RotateCmd.rotations: object expected\");\r\n message.rotations[i] = $root.Buttplug.DeviceMessage.RotateComponent.fromObject(object.rotations[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RotateCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RotateCmd} message RotateCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RotateCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.arrays || options.defaults)\r\n object.rotations = [];\r\n if (message.rotations && message.rotations.length) {\r\n object.rotations = [];\r\n for (let j = 0; j < message.rotations.length; ++j)\r\n object.rotations[j] = $root.Buttplug.DeviceMessage.RotateComponent.toObject(message.rotations[j], options);\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RotateCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RotateCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RotateCmd;\r\n })();\r\n\r\n DeviceMessage.LinearComponent = (function() {\r\n\r\n /**\r\n * Properties of a LinearComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface ILinearComponent\r\n * @property {number|null} [index] LinearComponent index\r\n * @property {number|null} [duration] LinearComponent duration\r\n * @property {number|null} [position] LinearComponent position\r\n */\r\n\r\n /**\r\n * Constructs a new LinearComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a LinearComponent.\r\n * @implements ILinearComponent\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.ILinearComponent=} [properties] Properties to set\r\n */\r\n function LinearComponent(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * LinearComponent index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n */\r\n LinearComponent.prototype.index = 0;\r\n\r\n /**\r\n * LinearComponent duration.\r\n * @member {number} duration\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n */\r\n LinearComponent.prototype.duration = 0;\r\n\r\n /**\r\n * LinearComponent position.\r\n * @member {number} position\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n */\r\n LinearComponent.prototype.position = 0;\r\n\r\n /**\r\n * Creates a new LinearComponent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearComponent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent instance\r\n */\r\n LinearComponent.create = function create(properties) {\r\n return new LinearComponent(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified LinearComponent message. Does not implicitly {@link Buttplug.DeviceMessage.LinearComponent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearComponent} message LinearComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearComponent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n if (message.duration != null && Object.hasOwnProperty.call(message, \"duration\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.duration);\r\n if (message.position != null && Object.hasOwnProperty.call(message, \"position\"))\r\n writer.uint32(/* id 3, wireType 1 =*/25).double(message.position);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified LinearComponent message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.LinearComponent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearComponent} message LinearComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearComponent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a LinearComponent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearComponent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.LinearComponent();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.duration = reader.uint32();\r\n break;\r\n case 3:\r\n message.position = reader.double();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a LinearComponent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearComponent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a LinearComponent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n LinearComponent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.duration != null && message.hasOwnProperty(\"duration\"))\r\n if (!$util.isInteger(message.duration))\r\n return \"duration: integer expected\";\r\n if (message.position != null && message.hasOwnProperty(\"position\"))\r\n if (typeof message.position !== \"number\")\r\n return \"position: number expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a LinearComponent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent\r\n */\r\n LinearComponent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.LinearComponent)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.LinearComponent();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.duration != null)\r\n message.duration = object.duration >>> 0;\r\n if (object.position != null)\r\n message.position = Number(object.position);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a LinearComponent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.LinearComponent} message LinearComponent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n LinearComponent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.duration = 0;\r\n object.position = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.duration != null && message.hasOwnProperty(\"duration\"))\r\n object.duration = message.duration;\r\n if (message.position != null && message.hasOwnProperty(\"position\"))\r\n object.position = options.json && !isFinite(message.position) ? String(message.position) : message.position;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this LinearComponent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n LinearComponent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return LinearComponent;\r\n })();\r\n\r\n DeviceMessage.LinearCmd = (function() {\r\n\r\n /**\r\n * Properties of a LinearCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface ILinearCmd\r\n * @property {Array.<Buttplug.DeviceMessage.ILinearComponent>|null} [movements] LinearCmd movements\r\n */\r\n\r\n /**\r\n * Constructs a new LinearCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a LinearCmd.\r\n * @implements ILinearCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.ILinearCmd=} [properties] Properties to set\r\n */\r\n function LinearCmd(properties) {\r\n this.movements = [];\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * LinearCmd movements.\r\n * @member {Array.<Buttplug.DeviceMessage.ILinearComponent>} movements\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @instance\r\n */\r\n LinearCmd.prototype.movements = $util.emptyArray;\r\n\r\n /**\r\n * Creates a new LinearCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd instance\r\n */\r\n LinearCmd.create = function create(properties) {\r\n return new LinearCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified LinearCmd message. Does not implicitly {@link Buttplug.DeviceMessage.LinearCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearCmd} message LinearCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.movements != null && message.movements.length)\r\n for (let i = 0; i < message.movements.length; ++i)\r\n $root.Buttplug.DeviceMessage.LinearComponent.encode(message.movements[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified LinearCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.LinearCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearCmd} message LinearCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a LinearCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.LinearCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n if (!(message.movements && message.movements.length))\r\n message.movements = [];\r\n message.movements.push($root.Buttplug.DeviceMessage.LinearComponent.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a LinearCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a LinearCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n LinearCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.movements != null && message.hasOwnProperty(\"movements\")) {\r\n if (!Array.isArray(message.movements))\r\n return \"movements: array expected\";\r\n for (let i = 0; i < message.movements.length; ++i) {\r\n let error = $root.Buttplug.DeviceMessage.LinearComponent.verify(message.movements[i]);\r\n if (error)\r\n return \"movements.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a LinearCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd\r\n */\r\n LinearCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.LinearCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.LinearCmd();\r\n if (object.movements) {\r\n if (!Array.isArray(object.movements))\r\n throw TypeError(\".Buttplug.DeviceMessage.LinearCmd.movements: array expected\");\r\n message.movements = [];\r\n for (let i = 0; i < object.movements.length; ++i) {\r\n if (typeof object.movements[i] !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.LinearCmd.movements: object expected\");\r\n message.movements[i] = $root.Buttplug.DeviceMessage.LinearComponent.fromObject(object.movements[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a LinearCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.LinearCmd} message LinearCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n LinearCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.arrays || options.defaults)\r\n object.movements = [];\r\n if (message.movements && message.movements.length) {\r\n object.movements = [];\r\n for (let j = 0; j < message.movements.length; ++j)\r\n object.movements[j] = $root.Buttplug.DeviceMessage.LinearComponent.toObject(message.movements[j], options);\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this LinearCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n LinearCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return LinearCmd;\r\n })();\r\n\r\n DeviceMessage.StopDeviceCmd = (function() {\r\n\r\n /**\r\n * Properties of a StopDeviceCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IStopDeviceCmd\r\n */\r\n\r\n /**\r\n * Constructs a new StopDeviceCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a StopDeviceCmd.\r\n * @implements IStopDeviceCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd=} [properties] Properties to set\r\n */\r\n function StopDeviceCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new StopDeviceCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd instance\r\n */\r\n StopDeviceCmd.create = function create(properties) {\r\n return new StopDeviceCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified StopDeviceCmd message. Does not implicitly {@link Buttplug.DeviceMessage.StopDeviceCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd} message StopDeviceCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopDeviceCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified StopDeviceCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.StopDeviceCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd} message StopDeviceCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopDeviceCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a StopDeviceCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopDeviceCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.StopDeviceCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a StopDeviceCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopDeviceCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a StopDeviceCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StopDeviceCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a StopDeviceCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd\r\n */\r\n StopDeviceCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.StopDeviceCmd)\r\n return object;\r\n return new $root.Buttplug.DeviceMessage.StopDeviceCmd();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a StopDeviceCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.StopDeviceCmd} message StopDeviceCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n StopDeviceCmd.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this StopDeviceCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n StopDeviceCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return StopDeviceCmd;\r\n })();\r\n\r\n DeviceMessage.RawReadCmd = (function() {\r\n\r\n /**\r\n * Properties of a RawReadCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawReadCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawReadCmd endpoint\r\n * @property {Uint8Array|null} [data] RawReadCmd data\r\n * @property {number|null} [expectedLength] RawReadCmd expectedLength\r\n * @property {number|null} [timeout] RawReadCmd timeout\r\n */\r\n\r\n /**\r\n * Constructs a new RawReadCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawReadCmd.\r\n * @implements IRawReadCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd=} [properties] Properties to set\r\n */\r\n function RawReadCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RawReadCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.endpoint = 0;\r\n\r\n /**\r\n * RawReadCmd data.\r\n * @member {Uint8Array} data\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.data = $util.newBuffer([]);\r\n\r\n /**\r\n * RawReadCmd expectedLength.\r\n * @member {number} expectedLength\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.expectedLength = 0;\r\n\r\n /**\r\n * RawReadCmd timeout.\r\n * @member {number} timeout\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.timeout = 0;\r\n\r\n /**\r\n * Creates a new RawReadCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd instance\r\n */\r\n RawReadCmd.create = function create(properties) {\r\n return new RawReadCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RawReadCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawReadCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd} message RawReadCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReadCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.endpoint);\r\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\r\n writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.data);\r\n if (message.expectedLength != null && Object.hasOwnProperty.call(message, \"expectedLength\"))\r\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.expectedLength);\r\n if (message.timeout != null && Object.hasOwnProperty.call(message, \"timeout\"))\r\n writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.timeout);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RawReadCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawReadCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd} message RawReadCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReadCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RawReadCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReadCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawReadCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n case 2:\r\n message.data = reader.bytes();\r\n break;\r\n case 3:\r\n message.expectedLength = reader.uint32();\r\n break;\r\n case 4:\r\n message.timeout = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RawReadCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReadCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RawReadCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawReadCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n case 45:\r\n break;\r\n }\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\r\n return \"data: buffer expected\";\r\n if (message.expectedLength != null && message.hasOwnProperty(\"expectedLength\"))\r\n if (!$util.isInteger(message.expectedLength))\r\n return \"expectedLength: integer expected\";\r\n if (message.timeout != null && message.hasOwnProperty(\"timeout\"))\r\n if (!$util.isInteger(message.timeout))\r\n return \"timeout: integer expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RawReadCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd\r\n */\r\n RawReadCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawReadCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.RawReadCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n case \"RxBLEModel\":\r\n case 45:\r\n message.endpoint = 45;\r\n break;\r\n }\r\n if (object.data != null)\r\n if (typeof object.data === \"string\")\r\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\r\n else if (object.data.length)\r\n message.data = object.data;\r\n if (object.expectedLength != null)\r\n message.expectedLength = object.expectedLength >>> 0;\r\n if (object.timeout != null)\r\n message.timeout = object.timeout >>> 0;\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RawReadCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawReadCmd} message RawReadCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RawReadCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (options.bytes === String)\r\n object.data = \"\";\r\n else {\r\n object.data = [];\r\n if (options.bytes !== Array)\r\n object.data = $util.newBuffer(object.data);\r\n }\r\n object.expectedLength = 0;\r\n object.timeout = 0;\r\n }\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\r\n if (message.expectedLength != null && message.hasOwnProperty(\"expectedLength\"))\r\n object.expectedLength = message.expectedLength;\r\n if (message.timeout != null && message.hasOwnProperty(\"timeout\"))\r\n object.timeout = message.timeout;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RawReadCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RawReadCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RawReadCmd;\r\n })();\r\n\r\n DeviceMessage.RawWriteCmd = (function() {\r\n\r\n /**\r\n * Properties of a RawWriteCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawWriteCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawWriteCmd endpoint\r\n * @property {Uint8Array|null} [data] RawWriteCmd data\r\n * @property {boolean|null} [writeWithResponse] RawWriteCmd writeWithResponse\r\n */\r\n\r\n /**\r\n * Constructs a new RawWriteCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawWriteCmd.\r\n * @implements IRawWriteCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd=} [properties] Properties to set\r\n */\r\n function RawWriteCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RawWriteCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n */\r\n RawWriteCmd.prototype.endpoint = 0;\r\n\r\n /**\r\n * RawWriteCmd data.\r\n * @member {Uint8Array} data\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n */\r\n RawWriteCmd.prototype.data = $util.newBuffer([]);\r\n\r\n /**\r\n * RawWriteCmd writeWithResponse.\r\n * @member {boolean} writeWithResponse\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n */\r\n RawWriteCmd.prototype.writeWithResponse = false;\r\n\r\n /**\r\n * Creates a new RawWriteCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd instance\r\n */\r\n RawWriteCmd.create = function create(properties) {\r\n return new RawWriteCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RawWriteCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawWriteCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd} message RawWriteCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawWriteCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.endpoint);\r\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\r\n writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.data);\r\n if (message.writeWithResponse != null && Object.hasOwnProperty.call(message, \"writeWithResponse\"))\r\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.writeWithResponse);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RawWriteCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawWriteCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd} message RawWriteCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawWriteCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RawWriteCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawWriteCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawWriteCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n case 2:\r\n message.data = reader.bytes();\r\n break;\r\n case 3:\r\n message.writeWithResponse = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RawWriteCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawWriteCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RawWriteCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawWriteCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n case 45:\r\n break;\r\n }\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\r\n return \"data: buffer expected\";\r\n if (message.writeWithResponse != null && message.hasOwnProperty(\"writeWithResponse\"))\r\n if (typeof message.writeWithResponse !== \"boolean\")\r\n return \"writeWithResponse: boolean expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RawWriteCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd\r\n */\r\n RawWriteCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawWriteCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.RawWriteCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n case \"RxBLEModel\":\r\n case 45:\r\n message.endpoint = 45;\r\n break;\r\n }\r\n if (object.data != null)\r\n if (typeof object.data === \"string\")\r\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\r\n else if (object.data.length)\r\n message.data = object.data;\r\n if (object.writeWithResponse != null)\r\n message.writeWithResponse = Boolean(object.writeWithResponse);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RawWriteCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawWriteCmd} message RawWriteCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RawWriteCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (options.bytes === String)\r\n object.data = \"\";\r\n else {\r\n object.data = [];\r\n if (options.bytes !== Array)\r\n object.data = $util.newBuffer(object.data);\r\n }\r\n object.writeWithResponse = false;\r\n }\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\r\n if (message.writeWithResponse != null && message.hasOwnProperty(\"writeWithResponse\"))\r\n object.writeWithResponse = message.writeWithResponse;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RawWriteCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RawWriteCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RawWriteCmd;\r\n })();\r\n\r\n DeviceMessage.RawSubscribeCmd = (function() {\r\n\r\n /**\r\n * Properties of a RawSubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawSubscribeCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawSubscribeCmd endpoint\r\n */\r\n\r\n /**\r\n * Constructs a new RawSubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawSubscribeCmd.\r\n * @implements IRawSubscribeCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd=} [properties] Properties to set\r\n */\r\n function RawSubscribeCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RawSubscribeCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @instance\r\n */\r\n RawSubscribeCmd.prototype.endpoint = 0;\r\n\r\n /**\r\n * Creates a new RawSubscribeCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd instance\r\n */\r\n RawSubscribeCmd.create = function create(properties) {\r\n return new RawSubscribeCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RawSubscribeCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawSubscribeCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd} message RawSubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawSubscribeCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.endpoint);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RawSubscribeCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawSubscribeCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd} message RawSubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawSubscribeCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RawSubscribeCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawSubscribeCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawSubscribeCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RawSubscribeCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawSubscribeCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RawSubscribeCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawSubscribeCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n case 45:\r\n break;\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RawSubscribeCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd\r\n */\r\n RawSubscribeCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawSubscribeCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.RawSubscribeCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n case \"RxBLEModel\":\r\n case 45:\r\n message.endpoint = 45;\r\n break;\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RawSubscribeCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawSubscribeCmd} message RawSubscribeCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RawSubscribeCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults)\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RawSubscribeCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RawSubscribeCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RawSubscribeCmd;\r\n })();\r\n\r\n DeviceMessage.RawUnsubscribeCmd = (function() {\r\n\r\n /**\r\n * Properties of a RawUnsubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawUnsubscribeCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawUnsubscribeCmd endpoint\r\n */\r\n\r\n /**\r\n * Constructs a new RawUnsubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawUnsubscribeCmd.\r\n * @implements IRawUnsubscribeCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd=} [properties] Properties to set\r\n */\r\n function RawUnsubscribeCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RawUnsubscribeCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @instance\r\n */\r\n RawUnsubscribeCmd.prototype.endpoint = 0;\r\n\r\n /**\r\n * Creates a new RawUnsubscribeCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd instance\r\n */\r\n RawUnsubscribeCmd.create = function create(properties) {\r\n return new RawUnsubscribeCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RawUnsubscribeCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawUnsubscribeCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd} message RawUnsubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawUnsubscribeCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.endpoint);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RawUnsubscribeCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawUnsubscribeCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd} message RawUnsubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawUnsubscribeCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RawUnsubscribeCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawUnsubscribeCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawUnsubscribeCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RawUnsubscribeCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawUnsubscribeCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RawUnsubscribeCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawUnsubscribeCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n case 45:\r\n break;\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RawUnsubscribeCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd\r\n */\r\n RawUnsubscribeCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawUnsubscribeCmd)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.RawUnsubscribeCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n case \"RxBLEModel\":\r\n case 45:\r\n message.endpoint = 45;\r\n break;\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RawUnsubscribeCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawUnsubscribeCmd} message RawUnsubscribeCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RawUnsubscribeCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults)\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RawUnsubscribeCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RawUnsubscribeCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RawUnsubscribeCmd;\r\n })();\r\n\r\n DeviceMessage.BatteryLevelCmd = (function() {\r\n\r\n /**\r\n * Properties of a BatteryLevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IBatteryLevelCmd\r\n */\r\n\r\n /**\r\n * Constructs a new BatteryLevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a BatteryLevelCmd.\r\n * @implements IBatteryLevelCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd=} [properties] Properties to set\r\n */\r\n function BatteryLevelCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new BatteryLevelCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd instance\r\n */\r\n BatteryLevelCmd.create = function create(properties) {\r\n return new BatteryLevelCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified BatteryLevelCmd message. Does not implicitly {@link Buttplug.DeviceMessage.BatteryLevelCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd} message BatteryLevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified BatteryLevelCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.BatteryLevelCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd} message BatteryLevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a BatteryLevelCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.BatteryLevelCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a BatteryLevelCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a BatteryLevelCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n BatteryLevelCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a BatteryLevelCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd\r\n */\r\n BatteryLevelCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.BatteryLevelCmd)\r\n return object;\r\n return new $root.Buttplug.DeviceMessage.BatteryLevelCmd();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a BatteryLevelCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.BatteryLevelCmd} message BatteryLevelCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n BatteryLevelCmd.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this BatteryLevelCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n BatteryLevelCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return BatteryLevelCmd;\r\n })();\r\n\r\n DeviceMessage.RSSILevelCmd = (function() {\r\n\r\n /**\r\n * Properties of a RSSILevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRSSILevelCmd\r\n */\r\n\r\n /**\r\n * Constructs a new RSSILevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RSSILevelCmd.\r\n * @implements IRSSILevelCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd=} [properties] Properties to set\r\n */\r\n function RSSILevelCmd(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new RSSILevelCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd instance\r\n */\r\n RSSILevelCmd.create = function create(properties) {\r\n return new RSSILevelCmd(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RSSILevelCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RSSILevelCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd} message RSSILevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RSSILevelCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RSSILevelCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd} message RSSILevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RSSILevelCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RSSILevelCmd();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RSSILevelCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RSSILevelCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RSSILevelCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RSSILevelCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd\r\n */\r\n RSSILevelCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RSSILevelCmd)\r\n return object;\r\n return new $root.Buttplug.DeviceMessage.RSSILevelCmd();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RSSILevelCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RSSILevelCmd} message RSSILevelCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RSSILevelCmd.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this RSSILevelCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RSSILevelCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RSSILevelCmd;\r\n })();\r\n\r\n DeviceMessage.FFIMessage = (function() {\r\n\r\n /**\r\n * Properties of a FFIMessage.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IFFIMessage\r\n * @property {Buttplug.DeviceMessage.IVibrateCmd|null} [vibrateCmd] FFIMessage vibrateCmd\r\n * @property {Buttplug.DeviceMessage.IRotateCmd|null} [rotateCmd] FFIMessage rotateCmd\r\n * @property {Buttplug.DeviceMessage.ILinearCmd|null} [linearCmd] FFIMessage linearCmd\r\n * @property {Buttplug.DeviceMessage.IStopDeviceCmd|null} [stopDeviceCmd] FFIMessage stopDeviceCmd\r\n * @property {Buttplug.DeviceMessage.IRawReadCmd|null} [rawReadCmd] FFIMessage rawReadCmd\r\n * @property {Buttplug.DeviceMessage.IRawWriteCmd|null} [rawWriteCmd] FFIMessage rawWriteCmd\r\n * @property {Buttplug.DeviceMessage.IRawSubscribeCmd|null} [rawSubscribeCmd] FFIMessage rawSubscribeCmd\r\n * @property {Buttplug.DeviceMessage.IRawUnsubscribeCmd|null} [rawUnsubscribeCmd] FFIMessage rawUnsubscribeCmd\r\n * @property {Buttplug.DeviceMessage.IBatteryLevelCmd|null} [batteryLevelCmd] FFIMessage batteryLevelCmd\r\n * @property {Buttplug.DeviceMessage.IRSSILevelCmd|null} [rssiLevelCmd] FFIMessage rssiLevelCmd\r\n */\r\n\r\n /**\r\n * Constructs a new FFIMessage.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a FFIMessage.\r\n * @implements IFFIMessage\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IFFIMessage=} [properties] Properties to set\r\n */\r\n function FFIMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * FFIMessage vibrateCmd.\r\n * @member {Buttplug.DeviceMessage.IVibrateCmd|null|undefined} vibrateCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.vibrateCmd = null;\r\n\r\n /**\r\n * FFIMessage rotateCmd.\r\n * @member {Buttplug.DeviceMessage.IRotateCmd|null|undefined} rotateCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rotateCmd = null;\r\n\r\n /**\r\n * FFIMessage linearCmd.\r\n * @member {Buttplug.DeviceMessage.ILinearCmd|null|undefined} linearCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.linearCmd = null;\r\n\r\n /**\r\n * FFIMessage stopDeviceCmd.\r\n * @member {Buttplug.DeviceMessage.IStopDeviceCmd|null|undefined} stopDeviceCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.stopDeviceCmd = null;\r\n\r\n /**\r\n * FFIMessage rawReadCmd.\r\n * @member {Buttplug.DeviceMessage.IRawReadCmd|null|undefined} rawReadCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawReadCmd = null;\r\n\r\n /**\r\n * FFIMessage rawWriteCmd.\r\n * @member {Buttplug.DeviceMessage.IRawWriteCmd|null|undefined} rawWriteCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawWriteCmd = null;\r\n\r\n /**\r\n * FFIMessage rawSubscribeCmd.\r\n * @member {Buttplug.DeviceMessage.IRawSubscribeCmd|null|undefined} rawSubscribeCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawSubscribeCmd = null;\r\n\r\n /**\r\n * FFIMessage rawUnsubscribeCmd.\r\n * @member {Buttplug.DeviceMessage.IRawUnsubscribeCmd|null|undefined} rawUnsubscribeCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawUnsubscribeCmd = null;\r\n\r\n /**\r\n * FFIMessage batteryLevelCmd.\r\n * @member {Buttplug.DeviceMessage.IBatteryLevelCmd|null|undefined} batteryLevelCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.batteryLevelCmd = null;\r\n\r\n /**\r\n * FFIMessage rssiLevelCmd.\r\n * @member {Buttplug.DeviceMessage.IRSSILevelCmd|null|undefined} rssiLevelCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rssiLevelCmd = null;\r\n\r\n // OneOf field names bound to virtual getters and setters\r\n let $oneOfFields;\r\n\r\n /**\r\n * FFIMessage msg.\r\n * @member {\"vibrateCmd\"|\"rotateCmd\"|\"linearCmd\"|\"stopDeviceCmd\"|\"rawReadCmd\"|\"rawWriteCmd\"|\"rawSubscribeCmd\"|\"rawUnsubscribeCmd\"|\"batteryLevelCmd\"|\"rssiLevelCmd\"|undefined} msg\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n Object.defineProperty(FFIMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"vibrateCmd\", \"rotateCmd\", \"linearCmd\", \"stopDeviceCmd\", \"rawReadCmd\", \"rawWriteCmd\", \"rawSubscribeCmd\", \"rawUnsubscribeCmd\", \"batteryLevelCmd\", \"rssiLevelCmd\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n\r\n /**\r\n * Creates a new FFIMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IFFIMessage=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage instance\r\n */\r\n FFIMessage.create = function create(properties) {\r\n return new FFIMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified FFIMessage message. Does not implicitly {@link Buttplug.DeviceMessage.FFIMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.vibrateCmd != null && Object.hasOwnProperty.call(message, \"vibrateCmd\"))\r\n $root.Buttplug.DeviceMessage.VibrateCmd.encode(message.vibrateCmd, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n if (message.rotateCmd != null && Object.hasOwnProperty.call(message, \"rotateCmd\"))\r\n $root.Buttplug.DeviceMessage.RotateCmd.encode(message.rotateCmd, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n if (message.linearCmd != null && Object.hasOwnProperty.call(message, \"linearCmd\"))\r\n $root.Buttplug.DeviceMessage.LinearCmd.encode(message.linearCmd, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\r\n if (message.stopDeviceCmd != null && Object.hasOwnProperty.call(message, \"stopDeviceCmd\"))\r\n $root.Buttplug.DeviceMessage.StopDeviceCmd.encode(message.stopDeviceCmd, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\r\n if (message.rawReadCmd != null && Object.hasOwnProperty.call(message, \"rawReadCmd\"))\r\n $root.Buttplug.DeviceMessage.RawReadCmd.encode(message.rawReadCmd, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\r\n if (message.rawWriteCmd != null && Object.hasOwnProperty.call(message, \"rawWriteCmd\"))\r\n $root.Buttplug.DeviceMessage.RawWriteCmd.encode(message.rawWriteCmd, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\r\n if (message.rawSubscribeCmd != null && Object.hasOwnProperty.call(message, \"rawSubscribeCmd\"))\r\n $root.Buttplug.DeviceMessage.RawSubscribeCmd.encode(message.rawSubscribeCmd, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();\r\n if (message.rawUnsubscribeCmd != null && Object.hasOwnProperty.call(message, \"rawUnsubscribeCmd\"))\r\n $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.encode(message.rawUnsubscribeCmd, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();\r\n if (message.batteryLevelCmd != null && Object.hasOwnProperty.call(message, \"batteryLevelCmd\"))\r\n $root.Buttplug.DeviceMessage.BatteryLevelCmd.encode(message.batteryLevelCmd, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();\r\n if (message.rssiLevelCmd != null && Object.hasOwnProperty.call(message, \"rssiLevelCmd\"))\r\n $root.Buttplug.DeviceMessage.RSSILevelCmd.encode(message.rssiLevelCmd, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified FFIMessage message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.FFIMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.FFIMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.vibrateCmd = $root.Buttplug.DeviceMessage.VibrateCmd.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.rotateCmd = $root.Buttplug.DeviceMessage.RotateCmd.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.linearCmd = $root.Buttplug.DeviceMessage.LinearCmd.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.stopDeviceCmd = $root.Buttplug.DeviceMessage.StopDeviceCmd.decode(reader, reader.uint32());\r\n break;\r\n case 5:\r\n message.rawReadCmd = $root.Buttplug.DeviceMessage.RawReadCmd.decode(reader, reader.uint32());\r\n break;\r\n case 6:\r\n message.rawWriteCmd = $root.Buttplug.DeviceMessage.RawWriteCmd.decode(reader, reader.uint32());\r\n break;\r\n case 7:\r\n message.rawSubscribeCmd = $root.Buttplug.DeviceMessage.RawSubscribeCmd.decode(reader, reader.uint32());\r\n break;\r\n case 8:\r\n message.rawUnsubscribeCmd = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.decode(reader, reader.uint32());\r\n break;\r\n case 9:\r\n message.batteryLevelCmd = $root.Buttplug.DeviceMessage.BatteryLevelCmd.decode(reader, reader.uint32());\r\n break;\r\n case 10:\r\n message.rssiLevelCmd = $root.Buttplug.DeviceMessage.RSSILevelCmd.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a FFIMessage message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n FFIMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n let properties = {};\r\n if (message.vibrateCmd != null && message.hasOwnProperty(\"vibrateCmd\")) {\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.VibrateCmd.verify(message.vibrateCmd);\r\n if (error)\r\n return \"vibrateCmd.\" + error;\r\n }\r\n }\r\n if (message.rotateCmd != null && message.hasOwnProperty(\"rotateCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.RotateCmd.verify(message.rotateCmd);\r\n if (error)\r\n return \"rotateCmd.\" + error;\r\n }\r\n }\r\n if (message.linearCmd != null && message.hasOwnProperty(\"linearCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.LinearCmd.verify(message.linearCmd);\r\n if (error)\r\n return \"linearCmd.\" + error;\r\n }\r\n }\r\n if (message.stopDeviceCmd != null && message.hasOwnProperty(\"stopDeviceCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.StopDeviceCmd.verify(message.stopDeviceCmd);\r\n if (error)\r\n return \"stopDeviceCmd.\" + error;\r\n }\r\n }\r\n if (message.rawReadCmd != null && message.hasOwnProperty(\"rawReadCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.RawReadCmd.verify(message.rawReadCmd);\r\n if (error)\r\n return \"rawReadCmd.\" + error;\r\n }\r\n }\r\n if (message.rawWriteCmd != null && message.hasOwnProperty(\"rawWriteCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.RawWriteCmd.verify(message.rawWriteCmd);\r\n if (error)\r\n return \"rawWriteCmd.\" + error;\r\n }\r\n }\r\n if (message.rawSubscribeCmd != null && message.hasOwnProperty(\"rawSubscribeCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.RawSubscribeCmd.verify(message.rawSubscribeCmd);\r\n if (error)\r\n return \"rawSubscribeCmd.\" + error;\r\n }\r\n }\r\n if (message.rawUnsubscribeCmd != null && message.hasOwnProperty(\"rawUnsubscribeCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.verify(message.rawUnsubscribeCmd);\r\n if (error)\r\n return \"rawUnsubscribeCmd.\" + error;\r\n }\r\n }\r\n if (message.batteryLevelCmd != null && message.hasOwnProperty(\"batteryLevelCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.BatteryLevelCmd.verify(message.batteryLevelCmd);\r\n if (error)\r\n return \"batteryLevelCmd.\" + error;\r\n }\r\n }\r\n if (message.rssiLevelCmd != null && message.hasOwnProperty(\"rssiLevelCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceMessage.RSSILevelCmd.verify(message.rssiLevelCmd);\r\n if (error)\r\n return \"rssiLevelCmd.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a FFIMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage\r\n */\r\n FFIMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.FFIMessage)\r\n return object;\r\n let message = new $root.Buttplug.DeviceMessage.FFIMessage();\r\n if (object.vibrateCmd != null) {\r\n if (typeof object.vibrateCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.vibrateCmd: object expected\");\r\n message.vibrateCmd = $root.Buttplug.DeviceMessage.VibrateCmd.fromObject(object.vibrateCmd);\r\n }\r\n if (object.rotateCmd != null) {\r\n if (typeof object.rotateCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rotateCmd: object expected\");\r\n message.rotateCmd = $root.Buttplug.DeviceMessage.RotateCmd.fromObject(object.rotateCmd);\r\n }\r\n if (object.linearCmd != null) {\r\n if (typeof object.linearCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.linearCmd: object expected\");\r\n message.linearCmd = $root.Buttplug.DeviceMessage.LinearCmd.fromObject(object.linearCmd);\r\n }\r\n if (object.stopDeviceCmd != null) {\r\n if (typeof object.stopDeviceCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.stopDeviceCmd: object expected\");\r\n message.stopDeviceCmd = $root.Buttplug.DeviceMessage.StopDeviceCmd.fromObject(object.stopDeviceCmd);\r\n }\r\n if (object.rawReadCmd != null) {\r\n if (typeof object.rawReadCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawReadCmd: object expected\");\r\n message.rawReadCmd = $root.Buttplug.DeviceMessage.RawReadCmd.fromObject(object.rawReadCmd);\r\n }\r\n if (object.rawWriteCmd != null) {\r\n if (typeof object.rawWriteCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawWriteCmd: object expected\");\r\n message.rawWriteCmd = $root.Buttplug.DeviceMessage.RawWriteCmd.fromObject(object.rawWriteCmd);\r\n }\r\n if (object.rawSubscribeCmd != null) {\r\n if (typeof object.rawSubscribeCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawSubscribeCmd: object expected\");\r\n message.rawSubscribeCmd = $root.Buttplug.DeviceMessage.RawSubscribeCmd.fromObject(object.rawSubscribeCmd);\r\n }\r\n if (object.rawUnsubscribeCmd != null) {\r\n if (typeof object.rawUnsubscribeCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawUnsubscribeCmd: object expected\");\r\n message.rawUnsubscribeCmd = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.fromObject(object.rawUnsubscribeCmd);\r\n }\r\n if (object.batteryLevelCmd != null) {\r\n if (typeof object.batteryLevelCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.batteryLevelCmd: object expected\");\r\n message.batteryLevelCmd = $root.Buttplug.DeviceMessage.BatteryLevelCmd.fromObject(object.batteryLevelCmd);\r\n }\r\n if (object.rssiLevelCmd != null) {\r\n if (typeof object.rssiLevelCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rssiLevelCmd: object expected\");\r\n message.rssiLevelCmd = $root.Buttplug.DeviceMessage.RSSILevelCmd.fromObject(object.rssiLevelCmd);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a FFIMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.FFIMessage} message FFIMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n FFIMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (message.vibrateCmd != null && message.hasOwnProperty(\"vibrateCmd\")) {\r\n object.vibrateCmd = $root.Buttplug.DeviceMessage.VibrateCmd.toObject(message.vibrateCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"vibrateCmd\";\r\n }\r\n if (message.rotateCmd != null && message.hasOwnProperty(\"rotateCmd\")) {\r\n object.rotateCmd = $root.Buttplug.DeviceMessage.RotateCmd.toObject(message.rotateCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rotateCmd\";\r\n }\r\n if (message.linearCmd != null && message.hasOwnProperty(\"linearCmd\")) {\r\n object.linearCmd = $root.Buttplug.DeviceMessage.LinearCmd.toObject(message.linearCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"linearCmd\";\r\n }\r\n if (message.stopDeviceCmd != null && message.hasOwnProperty(\"stopDeviceCmd\")) {\r\n object.stopDeviceCmd = $root.Buttplug.DeviceMessage.StopDeviceCmd.toObject(message.stopDeviceCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"stopDeviceCmd\";\r\n }\r\n if (message.rawReadCmd != null && message.hasOwnProperty(\"rawReadCmd\")) {\r\n object.rawReadCmd = $root.Buttplug.DeviceMessage.RawReadCmd.toObject(message.rawReadCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawReadCmd\";\r\n }\r\n if (message.rawWriteCmd != null && message.hasOwnProperty(\"rawWriteCmd\")) {\r\n object.rawWriteCmd = $root.Buttplug.DeviceMessage.RawWriteCmd.toObject(message.rawWriteCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawWriteCmd\";\r\n }\r\n if (message.rawSubscribeCmd != null && message.hasOwnProperty(\"rawSubscribeCmd\")) {\r\n object.rawSubscribeCmd = $root.Buttplug.DeviceMessage.RawSubscribeCmd.toObject(message.rawSubscribeCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawSubscribeCmd\";\r\n }\r\n if (message.rawUnsubscribeCmd != null && message.hasOwnProperty(\"rawUnsubscribeCmd\")) {\r\n object.rawUnsubscribeCmd = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.toObject(message.rawUnsubscribeCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawUnsubscribeCmd\";\r\n }\r\n if (message.batteryLevelCmd != null && message.hasOwnProperty(\"batteryLevelCmd\")) {\r\n object.batteryLevelCmd = $root.Buttplug.DeviceMessage.BatteryLevelCmd.toObject(message.batteryLevelCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"batteryLevelCmd\";\r\n }\r\n if (message.rssiLevelCmd != null && message.hasOwnProperty(\"rssiLevelCmd\")) {\r\n object.rssiLevelCmd = $root.Buttplug.DeviceMessage.RSSILevelCmd.toObject(message.rssiLevelCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rssiLevelCmd\";\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this FFIMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n FFIMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return FFIMessage;\r\n })();\r\n\r\n return DeviceMessage;\r\n })();\r\n\r\n Buttplug.ServerMessage = (function() {\r\n\r\n /**\r\n * Properties of a ServerMessage.\r\n * @memberof Buttplug\r\n * @interface IServerMessage\r\n * @property {Buttplug.ServerMessage.IOk|null} [ok] ServerMessage ok\r\n * @property {Buttplug.ServerMessage.IError|null} [error] ServerMessage error\r\n * @property {Buttplug.ServerMessage.IScanningFinished|null} [scanningFinished] ServerMessage scanningFinished\r\n * @property {Buttplug.ServerMessage.IDeviceAdded|null} [deviceAdded] ServerMessage deviceAdded\r\n * @property {Buttplug.ServerMessage.IDeviceRemoved|null} [deviceRemoved] ServerMessage deviceRemoved\r\n * @property {Buttplug.ServerMessage.IDisconnect|null} [disconnect] ServerMessage disconnect\r\n */\r\n\r\n /**\r\n * Constructs a new ServerMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a ServerMessage.\r\n * @implements IServerMessage\r\n * @constructor\r\n * @param {Buttplug.IServerMessage=} [properties] Properties to set\r\n */\r\n function ServerMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * ServerMessage ok.\r\n * @member {Buttplug.ServerMessage.IOk|null|undefined} ok\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.ok = null;\r\n\r\n /**\r\n * ServerMessage error.\r\n * @member {Buttplug.ServerMessage.IError|null|undefined} error\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.error = null;\r\n\r\n /**\r\n * ServerMessage scanningFinished.\r\n * @member {Buttplug.ServerMessage.IScanningFinished|null|undefined} scanningFinished\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.scanningFinished = null;\r\n\r\n /**\r\n * ServerMessage deviceAdded.\r\n * @member {Buttplug.ServerMessage.IDeviceAdded|null|undefined} deviceAdded\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.deviceAdded = null;\r\n\r\n /**\r\n * ServerMessage deviceRemoved.\r\n * @member {Buttplug.ServerMessage.IDeviceRemoved|null|undefined} deviceRemoved\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.deviceRemoved = null;\r\n\r\n /**\r\n * ServerMessage disconnect.\r\n * @member {Buttplug.ServerMessage.IDisconnect|null|undefined} disconnect\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.disconnect = null;\r\n\r\n // OneOf field names bound to virtual getters and setters\r\n let $oneOfFields;\r\n\r\n /**\r\n * ServerMessage msg.\r\n * @member {\"ok\"|\"error\"|\"scanningFinished\"|\"deviceAdded\"|\"deviceRemoved\"|\"disconnect\"|undefined} msg\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n Object.defineProperty(ServerMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"ok\", \"error\", \"scanningFinished\", \"deviceAdded\", \"deviceRemoved\", \"disconnect\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n\r\n /**\r\n * Creates a new ServerMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.IServerMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage} ServerMessage instance\r\n */\r\n ServerMessage.create = function create(properties) {\r\n return new ServerMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified ServerMessage message. Does not implicitly {@link Buttplug.ServerMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.IServerMessage} message ServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ServerMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.ok != null && Object.hasOwnProperty.call(message, \"ok\"))\r\n $root.Buttplug.ServerMessage.Ok.encode(message.ok, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n if (message.error != null && Object.hasOwnProperty.call(message, \"error\"))\r\n $root.Buttplug.ServerMessage.Error.encode(message.error, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n if (message.scanningFinished != null && Object.hasOwnProperty.call(message, \"scanningFinished\"))\r\n $root.Buttplug.ServerMessage.ScanningFinished.encode(message.scanningFinished, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\r\n if (message.deviceAdded != null && Object.hasOwnProperty.call(message, \"deviceAdded\"))\r\n $root.Buttplug.ServerMessage.DeviceAdded.encode(message.deviceAdded, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\r\n if (message.deviceRemoved != null && Object.hasOwnProperty.call(message, \"deviceRemoved\"))\r\n $root.Buttplug.ServerMessage.DeviceRemoved.encode(message.deviceRemoved, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\r\n if (message.disconnect != null && Object.hasOwnProperty.call(message, \"disconnect\"))\r\n $root.Buttplug.ServerMessage.Disconnect.encode(message.disconnect, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified ServerMessage message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.IServerMessage} message ServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ServerMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a ServerMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage} ServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ServerMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.ok = $root.Buttplug.ServerMessage.Ok.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.error = $root.Buttplug.ServerMessage.Error.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.scanningFinished = $root.Buttplug.ServerMessage.ScanningFinished.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.deviceAdded = $root.Buttplug.ServerMessage.DeviceAdded.decode(reader, reader.uint32());\r\n break;\r\n case 5:\r\n message.deviceRemoved = $root.Buttplug.ServerMessage.DeviceRemoved.decode(reader, reader.uint32());\r\n break;\r\n case 6:\r\n message.disconnect = $root.Buttplug.ServerMessage.Disconnect.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a ServerMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage} ServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ServerMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a ServerMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ServerMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n let properties = {};\r\n if (message.ok != null && message.hasOwnProperty(\"ok\")) {\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.Ok.verify(message.ok);\r\n if (error)\r\n return \"ok.\" + error;\r\n }\r\n }\r\n if (message.error != null && message.hasOwnProperty(\"error\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.Error.verify(message.error);\r\n if (error)\r\n return \"error.\" + error;\r\n }\r\n }\r\n if (message.scanningFinished != null && message.hasOwnProperty(\"scanningFinished\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.ScanningFinished.verify(message.scanningFinished);\r\n if (error)\r\n return \"scanningFinished.\" + error;\r\n }\r\n }\r\n if (message.deviceAdded != null && message.hasOwnProperty(\"deviceAdded\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.DeviceAdded.verify(message.deviceAdded);\r\n if (error)\r\n return \"deviceAdded.\" + error;\r\n }\r\n }\r\n if (message.deviceRemoved != null && message.hasOwnProperty(\"deviceRemoved\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.DeviceRemoved.verify(message.deviceRemoved);\r\n if (error)\r\n return \"deviceRemoved.\" + error;\r\n }\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.Disconnect.verify(message.disconnect);\r\n if (error)\r\n return \"disconnect.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a ServerMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage} ServerMessage\r\n */\r\n ServerMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage)\r\n return object;\r\n let message = new $root.Buttplug.ServerMessage();\r\n if (object.ok != null) {\r\n if (typeof object.ok !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.ok: object expected\");\r\n message.ok = $root.Buttplug.ServerMessage.Ok.fromObject(object.ok);\r\n }\r\n if (object.error != null) {\r\n if (typeof object.error !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.error: object expected\");\r\n message.error = $root.Buttplug.ServerMessage.Error.fromObject(object.error);\r\n }\r\n if (object.scanningFinished != null) {\r\n if (typeof object.scanningFinished !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.scanningFinished: object expected\");\r\n message.scanningFinished = $root.Buttplug.ServerMessage.ScanningFinished.fromObject(object.scanningFinished);\r\n }\r\n if (object.deviceAdded != null) {\r\n if (typeof object.deviceAdded !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.deviceAdded: object expected\");\r\n message.deviceAdded = $root.Buttplug.ServerMessage.DeviceAdded.fromObject(object.deviceAdded);\r\n }\r\n if (object.deviceRemoved != null) {\r\n if (typeof object.deviceRemoved !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.deviceRemoved: object expected\");\r\n message.deviceRemoved = $root.Buttplug.ServerMessage.DeviceRemoved.fromObject(object.deviceRemoved);\r\n }\r\n if (object.disconnect != null) {\r\n if (typeof object.disconnect !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.disconnect: object expected\");\r\n message.disconnect = $root.Buttplug.ServerMessage.Disconnect.fromObject(object.disconnect);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a ServerMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.ServerMessage} message ServerMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n ServerMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (message.ok != null && message.hasOwnProperty(\"ok\")) {\r\n object.ok = $root.Buttplug.ServerMessage.Ok.toObject(message.ok, options);\r\n if (options.oneofs)\r\n object.msg = \"ok\";\r\n }\r\n if (message.error != null && message.hasOwnProperty(\"error\")) {\r\n object.error = $root.Buttplug.ServerMessage.Error.toObject(message.error, options);\r\n if (options.oneofs)\r\n object.msg = \"error\";\r\n }\r\n if (message.scanningFinished != null && message.hasOwnProperty(\"scanningFinished\")) {\r\n object.scanningFinished = $root.Buttplug.ServerMessage.ScanningFinished.toObject(message.scanningFinished, options);\r\n if (options.oneofs)\r\n object.msg = \"scanningFinished\";\r\n }\r\n if (message.deviceAdded != null && message.hasOwnProperty(\"deviceAdded\")) {\r\n object.deviceAdded = $root.Buttplug.ServerMessage.DeviceAdded.toObject(message.deviceAdded, options);\r\n if (options.oneofs)\r\n object.msg = \"deviceAdded\";\r\n }\r\n if (message.deviceRemoved != null && message.hasOwnProperty(\"deviceRemoved\")) {\r\n object.deviceRemoved = $root.Buttplug.ServerMessage.DeviceRemoved.toObject(message.deviceRemoved, options);\r\n if (options.oneofs)\r\n object.msg = \"deviceRemoved\";\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n object.disconnect = $root.Buttplug.ServerMessage.Disconnect.toObject(message.disconnect, options);\r\n if (options.oneofs)\r\n object.msg = \"disconnect\";\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this ServerMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n ServerMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n /**\r\n * ButtplugErrorType enum.\r\n * @name Buttplug.ServerMessage.ButtplugErrorType\r\n * @enum {number}\r\n * @property {number} ButtplugConnectorError=0 ButtplugConnectorError value\r\n * @property {number} ButtplugHandshakeError=1 ButtplugHandshakeError value\r\n * @property {number} ButtplugDeviceError=2 ButtplugDeviceError value\r\n * @property {number} ButtplugPingError=3 ButtplugPingError value\r\n * @property {number} ButtplugMessageError=4 ButtplugMessageError value\r\n * @property {number} ButtplugUnknownError=5 ButtplugUnknownError value\r\n */\r\n ServerMessage.ButtplugErrorType = (function() {\r\n const valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"ButtplugConnectorError\"] = 0;\r\n values[valuesById[1] = \"ButtplugHandshakeError\"] = 1;\r\n values[valuesById[2] = \"ButtplugDeviceError\"] = 2;\r\n values[valuesById[3] = \"ButtplugPingError\"] = 3;\r\n values[valuesById[4] = \"ButtplugMessageError\"] = 4;\r\n values[valuesById[5] = \"ButtplugUnknownError\"] = 5;\r\n return values;\r\n })();\r\n\r\n /**\r\n * MessageAttributeType enum.\r\n * @name Buttplug.ServerMessage.MessageAttributeType\r\n * @enum {number}\r\n * @property {number} VibrateCmd=0 VibrateCmd value\r\n * @property {number} RotateCmd=1 RotateCmd value\r\n * @property {number} LinearCmd=2 LinearCmd value\r\n * @property {number} StopDeviceCmd=3 StopDeviceCmd value\r\n * @property {number} RawReadCmd=4 RawReadCmd value\r\n * @property {number} RawWriteCmd=5 RawWriteCmd value\r\n * @property {number} RawSubscribeCmd=6 RawSubscribeCmd value\r\n * @property {number} RawUnsubscribeCmd=7 RawUnsubscribeCmd value\r\n * @property {number} BatteryLevelCmd=8 BatteryLevelCmd value\r\n * @property {number} RSSILevelCmd=9 RSSILevelCmd value\r\n */\r\n ServerMessage.MessageAttributeType = (function() {\r\n const valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"VibrateCmd\"] = 0;\r\n values[valuesById[1] = \"RotateCmd\"] = 1;\r\n values[valuesById[2] = \"LinearCmd\"] = 2;\r\n values[valuesById[3] = \"StopDeviceCmd\"] = 3;\r\n values[valuesById[4] = \"RawReadCmd\"] = 4;\r\n values[valuesById[5] = \"RawWriteCmd\"] = 5;\r\n values[valuesById[6] = \"RawSubscribeCmd\"] = 6;\r\n values[valuesById[7] = \"RawUnsubscribeCmd\"] = 7;\r\n values[valuesById[8] = \"BatteryLevelCmd\"] = 8;\r\n values[valuesById[9] = \"RSSILevelCmd\"] = 9;\r\n return values;\r\n })();\r\n\r\n ServerMessage.MessageAttributes = (function() {\r\n\r\n /**\r\n * Properties of a MessageAttributes.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IMessageAttributes\r\n * @property {Buttplug.ServerMessage.MessageAttributeType|null} [messageType] MessageAttributes messageType\r\n * @property {number|null} [featureCount] MessageAttributes featureCount\r\n * @property {Array.<number>|null} [stepCount] MessageAttributes stepCount\r\n * @property {Array.<Buttplug.Endpoint>|null} [endpoints] MessageAttributes endpoints\r\n * @property {Array.<number>|null} [maxDuration] MessageAttributes maxDuration\r\n */\r\n\r\n /**\r\n * Constructs a new MessageAttributes.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a MessageAttributes.\r\n * @implements IMessageAttributes\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IMessageAttributes=} [properties] Properties to set\r\n */\r\n function MessageAttributes(properties) {\r\n this.stepCount = [];\r\n this.endpoints = [];\r\n this.maxDuration = [];\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * MessageAttributes messageType.\r\n * @member {Buttplug.ServerMessage.MessageAttributeType} messageType\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.messageType = 0;\r\n\r\n /**\r\n * MessageAttributes featureCount.\r\n * @member {number} featureCount\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.featureCount = 0;\r\n\r\n /**\r\n * MessageAttributes stepCount.\r\n * @member {Array.<number>} stepCount\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.stepCount = $util.emptyArray;\r\n\r\n /**\r\n * MessageAttributes endpoints.\r\n * @member {Array.<Buttplug.Endpoint>} endpoints\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.endpoints = $util.emptyArray;\r\n\r\n /**\r\n * MessageAttributes maxDuration.\r\n * @member {Array.<number>} maxDuration\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.maxDuration = $util.emptyArray;\r\n\r\n /**\r\n * Creates a new MessageAttributes instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.IMessageAttributes=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes instance\r\n */\r\n MessageAttributes.create = function create(properties) {\r\n return new MessageAttributes(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified MessageAttributes message. Does not implicitly {@link Buttplug.ServerMessage.MessageAttributes.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.IMessageAttributes} message MessageAttributes message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n MessageAttributes.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.messageType != null && Object.hasOwnProperty.call(message, \"messageType\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.messageType);\r\n if (message.featureCount != null && Object.hasOwnProperty.call(message, \"featureCount\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.featureCount);\r\n if (message.stepCount != null && message.stepCount.length) {\r\n writer.uint32(/* id 3, wireType 2 =*/26).fork();\r\n for (let i = 0; i < message.stepCount.length; ++i)\r\n writer.uint32(message.stepCount[i]);\r\n writer.ldelim();\r\n }\r\n if (message.endpoints != null && message.endpoints.length) {\r\n writer.uint32(/* id 4, wireType 2 =*/34).fork();\r\n for (let i = 0; i < message.endpoints.length; ++i)\r\n writer.int32(message.endpoints[i]);\r\n writer.ldelim();\r\n }\r\n if (message.maxDuration != null && message.maxDuration.length) {\r\n writer.uint32(/* id 5, wireType 2 =*/42).fork();\r\n for (let i = 0; i < message.maxDuration.length; ++i)\r\n writer.uint32(message.maxDuration[i]);\r\n writer.ldelim();\r\n }\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified MessageAttributes message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.MessageAttributes.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.IMessageAttributes} message MessageAttributes message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n MessageAttributes.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a MessageAttributes message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n MessageAttributes.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.MessageAttributes();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.messageType = reader.int32();\r\n break;\r\n case 2:\r\n message.featureCount = reader.uint32();\r\n break;\r\n case 3:\r\n if (!(message.stepCount && message.stepCount.length))\r\n message.stepCount = [];\r\n if ((tag & 7) === 2) {\r\n let end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.stepCount.push(reader.uint32());\r\n } else\r\n message.stepCount.push(reader.uint32());\r\n break;\r\n case 4:\r\n if (!(message.endpoints && message.endpoints.length))\r\n message.endpoints = [];\r\n if ((tag & 7) === 2) {\r\n let end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.endpoints.push(reader.int32());\r\n } else\r\n message.endpoints.push(reader.int32());\r\n break;\r\n case 5:\r\n if (!(message.maxDuration && message.maxDuration.length))\r\n message.maxDuration = [];\r\n if ((tag & 7) === 2) {\r\n let end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.maxDuration.push(reader.uint32());\r\n } else\r\n message.maxDuration.push(reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a MessageAttributes message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n MessageAttributes.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a MessageAttributes message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n MessageAttributes.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.messageType != null && message.hasOwnProperty(\"messageType\"))\r\n switch (message.messageType) {\r\n default:\r\n return \"messageType: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n break;\r\n }\r\n if (message.featureCount != null && message.hasOwnProperty(\"featureCount\"))\r\n if (!$util.isInteger(message.featureCount))\r\n return \"featureCount: integer expected\";\r\n if (message.stepCount != null && message.hasOwnProperty(\"stepCount\")) {\r\n if (!Array.isArray(message.stepCount))\r\n return \"stepCount: array expected\";\r\n for (let i = 0; i < message.stepCount.length; ++i)\r\n if (!$util.isInteger(message.stepCount[i]))\r\n return \"stepCount: integer[] expected\";\r\n }\r\n if (message.endpoints != null && message.hasOwnProperty(\"endpoints\")) {\r\n if (!Array.isArray(message.endpoints))\r\n return \"endpoints: array expected\";\r\n for (let i = 0; i < message.endpoints.length; ++i)\r\n switch (message.endpoints[i]) {\r\n default:\r\n return \"endpoints: enum value[] expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n case 45:\r\n break;\r\n }\r\n }\r\n if (message.maxDuration != null && message.hasOwnProperty(\"maxDuration\")) {\r\n if (!Array.isArray(message.maxDuration))\r\n return \"maxDuration: array expected\";\r\n for (let i = 0; i < message.maxDuration.length; ++i)\r\n if (!$util.isInteger(message.maxDuration[i]))\r\n return \"maxDuration: integer[] expected\";\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a MessageAttributes message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes\r\n */\r\n MessageAttributes.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.MessageAttributes)\r\n return object;\r\n let message = new $root.Buttplug.ServerMessage.MessageAttributes();\r\n switch (object.messageType) {\r\n case \"VibrateCmd\":\r\n case 0:\r\n message.messageType = 0;\r\n break;\r\n case \"RotateCmd\":\r\n case 1:\r\n message.messageType = 1;\r\n break;\r\n case \"LinearCmd\":\r\n case 2:\r\n message.messageType = 2;\r\n break;\r\n case \"StopDeviceCmd\":\r\n case 3:\r\n message.messageType = 3;\r\n break;\r\n case \"RawReadCmd\":\r\n case 4:\r\n message.messageType = 4;\r\n break;\r\n case \"RawWriteCmd\":\r\n case 5:\r\n message.messageType = 5;\r\n break;\r\n case \"RawSubscribeCmd\":\r\n case 6:\r\n message.messageType = 6;\r\n break;\r\n case \"RawUnsubscribeCmd\":\r\n case 7:\r\n message.messageType = 7;\r\n break;\r\n case \"BatteryLevelCmd\":\r\n case 8:\r\n message.messageType = 8;\r\n break;\r\n case \"RSSILevelCmd\":\r\n case 9:\r\n message.messageType = 9;\r\n break;\r\n }\r\n if (object.featureCount != null)\r\n message.featureCount = object.featureCount >>> 0;\r\n if (object.stepCount) {\r\n if (!Array.isArray(object.stepCount))\r\n throw TypeError(\".Buttplug.ServerMessage.MessageAttributes.stepCount: array expected\");\r\n message.stepCount = [];\r\n for (let i = 0; i < object.stepCount.length; ++i)\r\n message.stepCount[i] = object.stepCount[i] >>> 0;\r\n }\r\n if (object.endpoints) {\r\n if (!Array.isArray(object.endpoints))\r\n throw TypeError(\".Buttplug.ServerMessage.MessageAttributes.endpoints: array expected\");\r\n message.endpoints = [];\r\n for (let i = 0; i < object.endpoints.length; ++i)\r\n switch (object.endpoints[i]) {\r\n default:\r\n case \"Command\":\r\n case 0:\r\n message.endpoints[i] = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoints[i] = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoints[i] = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoints[i] = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoints[i] = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoints[i] = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoints[i] = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoints[i] = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoints[i] = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoints[i] = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoints[i] = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoints[i] = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoints[i] = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoints[i] = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoints[i] = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoints[i] = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoints[i] = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoints[i] = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoints[i] = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoints[i] = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoints[i] = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoints[i] = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoints[i] = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoints[i] = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoints[i] = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoints[i] = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoints[i] = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoints[i] = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoints[i] = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoints[i] = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoints[i] = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoints[i] = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoints[i] = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoints[i] = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoints[i] = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoints[i] = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoints[i] = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoints[i] = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoints[i] = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoints[i] = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoints[i] = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoints[i] = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoints[i] = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoints[i] = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoints[i] = 44;\r\n break;\r\n case \"RxBLEModel\":\r\n case 45:\r\n message.endpoints[i] = 45;\r\n break;\r\n }\r\n }\r\n if (object.maxDuration) {\r\n if (!Array.isArray(object.maxDuration))\r\n throw TypeError(\".Buttplug.ServerMessage.MessageAttributes.maxDuration: array expected\");\r\n message.maxDuration = [];\r\n for (let i = 0; i < object.maxDuration.length; ++i)\r\n message.maxDuration[i] = object.maxDuration[i] >>> 0;\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a MessageAttributes message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.MessageAttributes} message MessageAttributes\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n MessageAttributes.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.arrays || options.defaults) {\r\n object.stepCount = [];\r\n object.endpoints = [];\r\n object.maxDuration = [];\r\n }\r\n if (options.defaults) {\r\n object.messageType = options.enums === String ? \"VibrateCmd\" : 0;\r\n object.featureCount = 0;\r\n }\r\n if (message.messageType != null && message.hasOwnProperty(\"messageType\"))\r\n object.messageType = options.enums === String ? $root.Buttplug.ServerMessage.MessageAttributeType[message.messageType] : message.messageType;\r\n if (message.featureCount != null && message.hasOwnProperty(\"featureCount\"))\r\n object.featureCount = message.featureCount;\r\n if (message.stepCount && message.stepCount.length) {\r\n object.stepCount = [];\r\n for (let j = 0; j < message.stepCount.length; ++j)\r\n object.stepCount[j] = message.stepCount[j];\r\n }\r\n if (message.endpoints && message.endpoints.length) {\r\n object.endpoints = [];\r\n for (let j = 0; j < message.endpoints.length; ++j)\r\n object.endpoints[j] = options.enums === String ? $root.Buttplug.Endpoint[message.endpoints[j]] : message.endpoints[j];\r\n }\r\n if (message.maxDuration && message.maxDuration.length) {\r\n object.maxDuration = [];\r\n for (let j = 0; j < message.maxDuration.length; ++j)\r\n object.maxDuration[j] = message.maxDuration[j];\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this MessageAttributes to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n MessageAttributes.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return MessageAttributes;\r\n })();\r\n\r\n ServerMessage.Ok = (function() {\r\n\r\n /**\r\n * Properties of an Ok.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IOk\r\n */\r\n\r\n /**\r\n * Constructs a new Ok.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents an Ok.\r\n * @implements IOk\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IOk=} [properties] Properties to set\r\n */\r\n function Ok(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new Ok instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.IOk=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.Ok} Ok instance\r\n */\r\n Ok.create = function create(properties) {\r\n return new Ok(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified Ok message. Does not implicitly {@link Buttplug.ServerMessage.Ok.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.IOk} message Ok message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ok.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified Ok message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.Ok.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.IOk} message Ok message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ok.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes an Ok message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.Ok} Ok\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ok.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.Ok();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes an Ok message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.Ok} Ok\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ok.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies an Ok message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Ok.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates an Ok message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.Ok} Ok\r\n */\r\n Ok.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.Ok)\r\n return object;\r\n return new $root.Buttplug.ServerMessage.Ok();\r\n };\r\n\r\n /**\r\n * Creates a plain object from an Ok message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.Ok} message Ok\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n Ok.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this Ok to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n Ok.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return Ok;\r\n })();\r\n\r\n ServerMessage.Error = (function() {\r\n\r\n /**\r\n * Properties of an Error.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IError\r\n * @property {Buttplug.ServerMessage.ButtplugErrorType|null} [errorType] Error errorType\r\n * @property {string|null} [message] Error message\r\n * @property {string|null} [backtrace] Error backtrace\r\n */\r\n\r\n /**\r\n * Constructs a new Error.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents an Error.\r\n * @implements IError\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IError=} [properties] Properties to set\r\n */\r\n function Error(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Error errorType.\r\n * @member {Buttplug.ServerMessage.ButtplugErrorType} errorType\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n */\r\n Error.prototype.errorType = 0;\r\n\r\n /**\r\n * Error message.\r\n * @member {string} message\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n */\r\n Error.prototype.message = \"\";\r\n\r\n /**\r\n * Error backtrace.\r\n * @member {string} backtrace\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n */\r\n Error.prototype.backtrace = \"\";\r\n\r\n /**\r\n * Creates a new Error instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.IError=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.Error} Error instance\r\n */\r\n Error.create = function create(properties) {\r\n return new Error(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified Error message. Does not implicitly {@link Buttplug.ServerMessage.Error.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.IError} message Error message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Error.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.errorType != null && Object.hasOwnProperty.call(message, \"errorType\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.errorType);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.message);\r\n if (message.backtrace != null && Object.hasOwnProperty.call(message, \"backtrace\"))\r\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.backtrace);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified Error message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.Error.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.IError} message Error message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Error.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes an Error message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.Error} Error\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Error.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.Error();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.errorType = reader.int32();\r\n break;\r\n case 2:\r\n message.message = reader.string();\r\n break;\r\n case 3:\r\n message.backtrace = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes an Error message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.Error} Error\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Error.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies an Error message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Error.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.errorType != null && message.hasOwnProperty(\"errorType\"))\r\n switch (message.errorType) {\r\n default:\r\n return \"errorType: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n break;\r\n }\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n if (!$util.isString(message.message))\r\n return \"message: string expected\";\r\n if (message.backtrace != null && message.hasOwnProperty(\"backtrace\"))\r\n if (!$util.isString(message.backtrace))\r\n return \"backtrace: string expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates an Error message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.Error} Error\r\n */\r\n Error.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.Error)\r\n return object;\r\n let message = new $root.Buttplug.ServerMessage.Error();\r\n switch (object.errorType) {\r\n case \"ButtplugConnectorError\":\r\n case 0:\r\n message.errorType = 0;\r\n break;\r\n case \"ButtplugHandshakeError\":\r\n case 1:\r\n message.errorType = 1;\r\n break;\r\n case \"ButtplugDeviceError\":\r\n case 2:\r\n message.errorType = 2;\r\n break;\r\n case \"ButtplugPingError\":\r\n case 3:\r\n message.errorType = 3;\r\n break;\r\n case \"ButtplugMessageError\":\r\n case 4:\r\n message.errorType = 4;\r\n break;\r\n case \"ButtplugUnknownError\":\r\n case 5:\r\n message.errorType = 5;\r\n break;\r\n }\r\n if (object.message != null)\r\n message.message = String(object.message);\r\n if (object.backtrace != null)\r\n message.backtrace = String(object.backtrace);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from an Error message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.Error} message Error\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n Error.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.errorType = options.enums === String ? \"ButtplugConnectorError\" : 0;\r\n object.message = \"\";\r\n object.backtrace = \"\";\r\n }\r\n if (message.errorType != null && message.hasOwnProperty(\"errorType\"))\r\n object.errorType = options.enums === String ? $root.Buttplug.ServerMessage.ButtplugErrorType[message.errorType] : message.errorType;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = message.message;\r\n if (message.backtrace != null && message.hasOwnProperty(\"backtrace\"))\r\n object.backtrace = message.backtrace;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this Error to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n Error.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return Error;\r\n })();\r\n\r\n ServerMessage.ScanningFinished = (function() {\r\n\r\n /**\r\n * Properties of a ScanningFinished.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IScanningFinished\r\n */\r\n\r\n /**\r\n * Constructs a new ScanningFinished.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a ScanningFinished.\r\n * @implements IScanningFinished\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IScanningFinished=} [properties] Properties to set\r\n */\r\n function ScanningFinished(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new ScanningFinished instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.IScanningFinished=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished instance\r\n */\r\n ScanningFinished.create = function create(properties) {\r\n return new ScanningFinished(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified ScanningFinished message. Does not implicitly {@link Buttplug.ServerMessage.ScanningFinished.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.IScanningFinished} message ScanningFinished message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ScanningFinished.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified ScanningFinished message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.ScanningFinished.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.IScanningFinished} message ScanningFinished message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ScanningFinished.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a ScanningFinished message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ScanningFinished.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.ScanningFinished();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a ScanningFinished message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ScanningFinished.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a ScanningFinished message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ScanningFinished.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a ScanningFinished message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished\r\n */\r\n ScanningFinished.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.ScanningFinished)\r\n return object;\r\n return new $root.Buttplug.ServerMessage.ScanningFinished();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a ScanningFinished message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.ScanningFinished} message ScanningFinished\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n ScanningFinished.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this ScanningFinished to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n ScanningFinished.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return ScanningFinished;\r\n })();\r\n\r\n ServerMessage.DeviceAdded = (function() {\r\n\r\n /**\r\n * Properties of a DeviceAdded.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IDeviceAdded\r\n * @property {string|null} [name] DeviceAdded name\r\n * @property {number|null} [index] DeviceAdded index\r\n * @property {Array.<Buttplug.ServerMessage.IMessageAttributes>|null} [messageAttributes] DeviceAdded messageAttributes\r\n */\r\n\r\n /**\r\n * Constructs a new DeviceAdded.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a DeviceAdded.\r\n * @implements IDeviceAdded\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IDeviceAdded=} [properties] Properties to set\r\n */\r\n function DeviceAdded(properties) {\r\n this.messageAttributes = [];\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * DeviceAdded name.\r\n * @member {string} name\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n */\r\n DeviceAdded.prototype.name = \"\";\r\n\r\n /**\r\n * DeviceAdded index.\r\n * @member {number} index\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n */\r\n DeviceAdded.prototype.index = 0;\r\n\r\n /**\r\n * DeviceAdded messageAttributes.\r\n * @member {Array.<Buttplug.ServerMessage.IMessageAttributes>} messageAttributes\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n */\r\n DeviceAdded.prototype.messageAttributes = $util.emptyArray;\r\n\r\n /**\r\n * Creates a new DeviceAdded instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceAdded=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded instance\r\n */\r\n DeviceAdded.create = function create(properties) {\r\n return new DeviceAdded(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceAdded message. Does not implicitly {@link Buttplug.ServerMessage.DeviceAdded.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceAdded} message DeviceAdded message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceAdded.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.name != null && Object.hasOwnProperty.call(message, \"name\"))\r\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.index);\r\n if (message.messageAttributes != null && message.messageAttributes.length)\r\n for (let i = 0; i < message.messageAttributes.length; ++i)\r\n $root.Buttplug.ServerMessage.MessageAttributes.encode(message.messageAttributes[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceAdded message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.DeviceAdded.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceAdded} message DeviceAdded message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceAdded.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a DeviceAdded message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceAdded.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.DeviceAdded();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.name = reader.string();\r\n break;\r\n case 2:\r\n message.index = reader.uint32();\r\n break;\r\n case 3:\r\n if (!(message.messageAttributes && message.messageAttributes.length))\r\n message.messageAttributes = [];\r\n message.messageAttributes.push($root.Buttplug.ServerMessage.MessageAttributes.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a DeviceAdded message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceAdded.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a DeviceAdded message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceAdded.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n if (!$util.isString(message.name))\r\n return \"name: string expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.messageAttributes != null && message.hasOwnProperty(\"messageAttributes\")) {\r\n if (!Array.isArray(message.messageAttributes))\r\n return \"messageAttributes: array expected\";\r\n for (let i = 0; i < message.messageAttributes.length; ++i) {\r\n let error = $root.Buttplug.ServerMessage.MessageAttributes.verify(message.messageAttributes[i]);\r\n if (error)\r\n return \"messageAttributes.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a DeviceAdded message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded\r\n */\r\n DeviceAdded.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.DeviceAdded)\r\n return object;\r\n let message = new $root.Buttplug.ServerMessage.DeviceAdded();\r\n if (object.name != null)\r\n message.name = String(object.name);\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.messageAttributes) {\r\n if (!Array.isArray(object.messageAttributes))\r\n throw TypeError(\".Buttplug.ServerMessage.DeviceAdded.messageAttributes: array expected\");\r\n message.messageAttributes = [];\r\n for (let i = 0; i < object.messageAttributes.length; ++i) {\r\n if (typeof object.messageAttributes[i] !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.DeviceAdded.messageAttributes: object expected\");\r\n message.messageAttributes[i] = $root.Buttplug.ServerMessage.MessageAttributes.fromObject(object.messageAttributes[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a DeviceAdded message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.DeviceAdded} message DeviceAdded\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n DeviceAdded.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.arrays || options.defaults)\r\n object.messageAttributes = [];\r\n if (options.defaults) {\r\n object.name = \"\";\r\n object.index = 0;\r\n }\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n object.name = message.name;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.messageAttributes && message.messageAttributes.length) {\r\n object.messageAttributes = [];\r\n for (let j = 0; j < message.messageAttributes.length; ++j)\r\n object.messageAttributes[j] = $root.Buttplug.ServerMessage.MessageAttributes.toObject(message.messageAttributes[j], options);\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this DeviceAdded to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n DeviceAdded.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return DeviceAdded;\r\n })();\r\n\r\n ServerMessage.DeviceRemoved = (function() {\r\n\r\n /**\r\n * Properties of a DeviceRemoved.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IDeviceRemoved\r\n * @property {number|null} [index] DeviceRemoved index\r\n */\r\n\r\n /**\r\n * Constructs a new DeviceRemoved.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a DeviceRemoved.\r\n * @implements IDeviceRemoved\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved=} [properties] Properties to set\r\n */\r\n function DeviceRemoved(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * DeviceRemoved index.\r\n * @member {number} index\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @instance\r\n */\r\n DeviceRemoved.prototype.index = 0;\r\n\r\n /**\r\n * Creates a new DeviceRemoved instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved instance\r\n */\r\n DeviceRemoved.create = function create(properties) {\r\n return new DeviceRemoved(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceRemoved message. Does not implicitly {@link Buttplug.ServerMessage.DeviceRemoved.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved} message DeviceRemoved message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceRemoved.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceRemoved message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.DeviceRemoved.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved} message DeviceRemoved message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceRemoved.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a DeviceRemoved message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceRemoved.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.DeviceRemoved();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a DeviceRemoved message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceRemoved.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a DeviceRemoved message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceRemoved.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a DeviceRemoved message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved\r\n */\r\n DeviceRemoved.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.DeviceRemoved)\r\n return object;\r\n let message = new $root.Buttplug.ServerMessage.DeviceRemoved();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a DeviceRemoved message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.DeviceRemoved} message DeviceRemoved\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n DeviceRemoved.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults)\r\n object.index = 0;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this DeviceRemoved to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n DeviceRemoved.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return DeviceRemoved;\r\n })();\r\n\r\n ServerMessage.Disconnect = (function() {\r\n\r\n /**\r\n * Properties of a Disconnect.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IDisconnect\r\n */\r\n\r\n /**\r\n * Constructs a new Disconnect.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a Disconnect.\r\n * @implements IDisconnect\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IDisconnect=} [properties] Properties to set\r\n */\r\n function Disconnect(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Creates a new Disconnect instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDisconnect=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect instance\r\n */\r\n Disconnect.create = function create(properties) {\r\n return new Disconnect(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified Disconnect message. Does not implicitly {@link Buttplug.ServerMessage.Disconnect.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified Disconnect message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.Disconnect.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.Disconnect();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a Disconnect message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Disconnect.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a Disconnect message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect\r\n */\r\n Disconnect.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.Disconnect)\r\n return object;\r\n return new $root.Buttplug.ServerMessage.Disconnect();\r\n };\r\n\r\n /**\r\n * Creates a plain object from a Disconnect message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.Disconnect} message Disconnect\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n Disconnect.toObject = function toObject() {\r\n return {};\r\n };\r\n\r\n /**\r\n * Converts this Disconnect to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n Disconnect.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return Disconnect;\r\n })();\r\n\r\n return ServerMessage;\r\n })();\r\n\r\n Buttplug.DeviceEvent = (function() {\r\n\r\n /**\r\n * Properties of a DeviceEvent.\r\n * @memberof Buttplug\r\n * @interface IDeviceEvent\r\n * @property {Buttplug.DeviceEvent.IDisconnect|null} [disconnect] DeviceEvent disconnect\r\n * @property {Buttplug.DeviceEvent.IBatteryLevelReading|null} [batteryLevelReading] DeviceEvent batteryLevelReading\r\n * @property {Buttplug.DeviceEvent.IRSSILevelReading|null} [rssiLevelReading] DeviceEvent rssiLevelReading\r\n * @property {Buttplug.DeviceEvent.IRawReading|null} [rawReading] DeviceEvent rawReading\r\n */\r\n\r\n /**\r\n * Constructs a new DeviceEvent.\r\n * @memberof Buttplug\r\n * @classdesc Represents a DeviceEvent.\r\n * @implements IDeviceEvent\r\n * @constructor\r\n * @param {Buttplug.IDeviceEvent=} [properties] Properties to set\r\n */\r\n function DeviceEvent(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * DeviceEvent disconnect.\r\n * @member {Buttplug.DeviceEvent.IDisconnect|null|undefined} disconnect\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.disconnect = null;\r\n\r\n /**\r\n * DeviceEvent batteryLevelReading.\r\n * @member {Buttplug.DeviceEvent.IBatteryLevelReading|null|undefined} batteryLevelReading\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.batteryLevelReading = null;\r\n\r\n /**\r\n * DeviceEvent rssiLevelReading.\r\n * @member {Buttplug.DeviceEvent.IRSSILevelReading|null|undefined} rssiLevelReading\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.rssiLevelReading = null;\r\n\r\n /**\r\n * DeviceEvent rawReading.\r\n * @member {Buttplug.DeviceEvent.IRawReading|null|undefined} rawReading\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.rawReading = null;\r\n\r\n // OneOf field names bound to virtual getters and setters\r\n let $oneOfFields;\r\n\r\n /**\r\n * DeviceEvent msg.\r\n * @member {\"disconnect\"|\"batteryLevelReading\"|\"rssiLevelReading\"|\"rawReading\"|undefined} msg\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n Object.defineProperty(DeviceEvent.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"disconnect\", \"batteryLevelReading\", \"rssiLevelReading\", \"rawReading\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n\r\n /**\r\n * Creates a new DeviceEvent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.IDeviceEvent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent instance\r\n */\r\n DeviceEvent.create = function create(properties) {\r\n return new DeviceEvent(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceEvent message. Does not implicitly {@link Buttplug.DeviceEvent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.IDeviceEvent} message DeviceEvent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceEvent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.disconnect != null && Object.hasOwnProperty.call(message, \"disconnect\"))\r\n $root.Buttplug.DeviceEvent.Disconnect.encode(message.disconnect, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n if (message.batteryLevelReading != null && Object.hasOwnProperty.call(message, \"batteryLevelReading\"))\r\n $root.Buttplug.DeviceEvent.BatteryLevelReading.encode(message.batteryLevelReading, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n if (message.rssiLevelReading != null && Object.hasOwnProperty.call(message, \"rssiLevelReading\"))\r\n $root.Buttplug.DeviceEvent.RSSILevelReading.encode(message.rssiLevelReading, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\r\n if (message.rawReading != null && Object.hasOwnProperty.call(message, \"rawReading\"))\r\n $root.Buttplug.DeviceEvent.RawReading.encode(message.rawReading, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified DeviceEvent message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.IDeviceEvent} message DeviceEvent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceEvent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a DeviceEvent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceEvent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.disconnect = $root.Buttplug.DeviceEvent.Disconnect.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.batteryLevelReading = $root.Buttplug.DeviceEvent.BatteryLevelReading.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.rssiLevelReading = $root.Buttplug.DeviceEvent.RSSILevelReading.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.rawReading = $root.Buttplug.DeviceEvent.RawReading.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a DeviceEvent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceEvent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a DeviceEvent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceEvent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n let properties = {};\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceEvent.Disconnect.verify(message.disconnect);\r\n if (error)\r\n return \"disconnect.\" + error;\r\n }\r\n }\r\n if (message.batteryLevelReading != null && message.hasOwnProperty(\"batteryLevelReading\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceEvent.BatteryLevelReading.verify(message.batteryLevelReading);\r\n if (error)\r\n return \"batteryLevelReading.\" + error;\r\n }\r\n }\r\n if (message.rssiLevelReading != null && message.hasOwnProperty(\"rssiLevelReading\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceEvent.RSSILevelReading.verify(message.rssiLevelReading);\r\n if (error)\r\n return \"rssiLevelReading.\" + error;\r\n }\r\n }\r\n if (message.rawReading != null && message.hasOwnProperty(\"rawReading\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceEvent.RawReading.verify(message.rawReading);\r\n if (error)\r\n return \"rawReading.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a DeviceEvent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent\r\n */\r\n DeviceEvent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent)\r\n return object;\r\n let message = new $root.Buttplug.DeviceEvent();\r\n if (object.disconnect != null) {\r\n if (typeof object.disconnect !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.disconnect: object expected\");\r\n message.disconnect = $root.Buttplug.DeviceEvent.Disconnect.fromObject(object.disconnect);\r\n }\r\n if (object.batteryLevelReading != null) {\r\n if (typeof object.batteryLevelReading !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.batteryLevelReading: object expected\");\r\n message.batteryLevelReading = $root.Buttplug.DeviceEvent.BatteryLevelReading.fromObject(object.batteryLevelReading);\r\n }\r\n if (object.rssiLevelReading != null) {\r\n if (typeof object.rssiLevelReading !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.rssiLevelReading: object expected\");\r\n message.rssiLevelReading = $root.Buttplug.DeviceEvent.RSSILevelReading.fromObject(object.rssiLevelReading);\r\n }\r\n if (object.rawReading != null) {\r\n if (typeof object.rawReading !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.rawReading: object expected\");\r\n message.rawReading = $root.Buttplug.DeviceEvent.RawReading.fromObject(object.rawReading);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a DeviceEvent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.DeviceEvent} message DeviceEvent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n DeviceEvent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n object.disconnect = $root.Buttplug.DeviceEvent.Disconnect.toObject(message.disconnect, options);\r\n if (options.oneofs)\r\n object.msg = \"disconnect\";\r\n }\r\n if (message.batteryLevelReading != null && message.hasOwnProperty(\"batteryLevelReading\")) {\r\n object.batteryLevelReading = $root.Buttplug.DeviceEvent.BatteryLevelReading.toObject(message.batteryLevelReading, options);\r\n if (options.oneofs)\r\n object.msg = \"batteryLevelReading\";\r\n }\r\n if (message.rssiLevelReading != null && message.hasOwnProperty(\"rssiLevelReading\")) {\r\n object.rssiLevelReading = $root.Buttplug.DeviceEvent.RSSILevelReading.toObject(message.rssiLevelReading, options);\r\n if (options.oneofs)\r\n object.msg = \"rssiLevelReading\";\r\n }\r\n if (message.rawReading != null && message.hasOwnProperty(\"rawReading\")) {\r\n object.rawReading = $root.Buttplug.DeviceEvent.RawReading.toObject(message.rawReading, options);\r\n if (options.oneofs)\r\n object.msg = \"rawReading\";\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this DeviceEvent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n DeviceEvent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n DeviceEvent.Disconnect = (function() {\r\n\r\n /**\r\n * Properties of a Disconnect.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IDisconnect\r\n * @property {number|null} [index] Disconnect index\r\n */\r\n\r\n /**\r\n * Constructs a new Disconnect.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a Disconnect.\r\n * @implements IDisconnect\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IDisconnect=} [properties] Properties to set\r\n */\r\n function Disconnect(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * Disconnect index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @instance\r\n */\r\n Disconnect.prototype.index = 0;\r\n\r\n /**\r\n * Creates a new Disconnect instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IDisconnect=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect instance\r\n */\r\n Disconnect.create = function create(properties) {\r\n return new Disconnect(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified Disconnect message. Does not implicitly {@link Buttplug.DeviceEvent.Disconnect.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified Disconnect message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.Disconnect.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.Disconnect();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a Disconnect message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Disconnect.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a Disconnect message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect\r\n */\r\n Disconnect.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.Disconnect)\r\n return object;\r\n let message = new $root.Buttplug.DeviceEvent.Disconnect();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a Disconnect message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.Disconnect} message Disconnect\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n Disconnect.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults)\r\n object.index = 0;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this Disconnect to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n Disconnect.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return Disconnect;\r\n })();\r\n\r\n DeviceEvent.RawReading = (function() {\r\n\r\n /**\r\n * Properties of a RawReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IRawReading\r\n * @property {number|null} [index] RawReading index\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawReading endpoint\r\n * @property {Uint8Array|null} [data] RawReading data\r\n */\r\n\r\n /**\r\n * Constructs a new RawReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a RawReading.\r\n * @implements IRawReading\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IRawReading=} [properties] Properties to set\r\n */\r\n function RawReading(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RawReading index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n */\r\n RawReading.prototype.index = 0;\r\n\r\n /**\r\n * RawReading endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n */\r\n RawReading.prototype.endpoint = 0;\r\n\r\n /**\r\n * RawReading data.\r\n * @member {Uint8Array} data\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n */\r\n RawReading.prototype.data = $util.newBuffer([]);\r\n\r\n /**\r\n * Creates a new RawReading instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRawReading=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading instance\r\n */\r\n RawReading.create = function create(properties) {\r\n return new RawReading(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RawReading message. Does not implicitly {@link Buttplug.DeviceEvent.RawReading.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRawReading} message RawReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReading.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.endpoint);\r\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\r\n writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.data);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RawReading message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.RawReading.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRawReading} message RawReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReading.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RawReading message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReading.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.RawReading();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.endpoint = reader.int32();\r\n break;\r\n case 3:\r\n message.data = reader.bytes();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RawReading message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReading.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RawReading message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawReading.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n case 45:\r\n break;\r\n }\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\r\n return \"data: buffer expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RawReading message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading\r\n */\r\n RawReading.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.RawReading)\r\n return object;\r\n let message = new $root.Buttplug.DeviceEvent.RawReading();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n case \"RxBLEModel\":\r\n case 45:\r\n message.endpoint = 45;\r\n break;\r\n }\r\n if (object.data != null)\r\n if (typeof object.data === \"string\")\r\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\r\n else if (object.data.length)\r\n message.data = object.data;\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RawReading message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.RawReading} message RawReading\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RawReading.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (options.bytes === String)\r\n object.data = \"\";\r\n else {\r\n object.data = [];\r\n if (options.bytes !== Array)\r\n object.data = $util.newBuffer(object.data);\r\n }\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RawReading to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RawReading.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RawReading;\r\n })();\r\n\r\n DeviceEvent.BatteryLevelReading = (function() {\r\n\r\n /**\r\n * Properties of a BatteryLevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IBatteryLevelReading\r\n * @property {number|null} [index] BatteryLevelReading index\r\n * @property {number|null} [reading] BatteryLevelReading reading\r\n */\r\n\r\n /**\r\n * Constructs a new BatteryLevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a BatteryLevelReading.\r\n * @implements IBatteryLevelReading\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading=} [properties] Properties to set\r\n */\r\n function BatteryLevelReading(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * BatteryLevelReading index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @instance\r\n */\r\n BatteryLevelReading.prototype.index = 0;\r\n\r\n /**\r\n * BatteryLevelReading reading.\r\n * @member {number} reading\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @instance\r\n */\r\n BatteryLevelReading.prototype.reading = 0;\r\n\r\n /**\r\n * Creates a new BatteryLevelReading instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading instance\r\n */\r\n BatteryLevelReading.create = function create(properties) {\r\n return new BatteryLevelReading(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified BatteryLevelReading message. Does not implicitly {@link Buttplug.DeviceEvent.BatteryLevelReading.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading} message BatteryLevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelReading.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n if (message.reading != null && Object.hasOwnProperty.call(message, \"reading\"))\r\n writer.uint32(/* id 2, wireType 1 =*/17).double(message.reading);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified BatteryLevelReading message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.BatteryLevelReading.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading} message BatteryLevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelReading.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a BatteryLevelReading message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelReading.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.BatteryLevelReading();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.reading = reader.double();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a BatteryLevelReading message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelReading.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a BatteryLevelReading message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n BatteryLevelReading.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n if (typeof message.reading !== \"number\")\r\n return \"reading: number expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a BatteryLevelReading message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading\r\n */\r\n BatteryLevelReading.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.BatteryLevelReading)\r\n return object;\r\n let message = new $root.Buttplug.DeviceEvent.BatteryLevelReading();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.reading != null)\r\n message.reading = Number(object.reading);\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a BatteryLevelReading message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.BatteryLevelReading} message BatteryLevelReading\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n BatteryLevelReading.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.reading = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n object.reading = options.json && !isFinite(message.reading) ? String(message.reading) : message.reading;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this BatteryLevelReading to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n BatteryLevelReading.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return BatteryLevelReading;\r\n })();\r\n\r\n DeviceEvent.RSSILevelReading = (function() {\r\n\r\n /**\r\n * Properties of a RSSILevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IRSSILevelReading\r\n * @property {number|null} [index] RSSILevelReading index\r\n * @property {number|null} [reading] RSSILevelReading reading\r\n */\r\n\r\n /**\r\n * Constructs a new RSSILevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a RSSILevelReading.\r\n * @implements IRSSILevelReading\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading=} [properties] Properties to set\r\n */\r\n function RSSILevelReading(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * RSSILevelReading index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @instance\r\n */\r\n RSSILevelReading.prototype.index = 0;\r\n\r\n /**\r\n * RSSILevelReading reading.\r\n * @member {number} reading\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @instance\r\n */\r\n RSSILevelReading.prototype.reading = 0;\r\n\r\n /**\r\n * Creates a new RSSILevelReading instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading instance\r\n */\r\n RSSILevelReading.create = function create(properties) {\r\n return new RSSILevelReading(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified RSSILevelReading message. Does not implicitly {@link Buttplug.DeviceEvent.RSSILevelReading.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading} message RSSILevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelReading.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.index);\r\n if (message.reading != null && Object.hasOwnProperty.call(message, \"reading\"))\r\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.reading);\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified RSSILevelReading message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.RSSILevelReading.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading} message RSSILevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelReading.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a RSSILevelReading message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelReading.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.RSSILevelReading();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.reading = reader.int32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a RSSILevelReading message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelReading.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a RSSILevelReading message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RSSILevelReading.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n if (!$util.isInteger(message.reading))\r\n return \"reading: integer expected\";\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a RSSILevelReading message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading\r\n */\r\n RSSILevelReading.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.RSSILevelReading)\r\n return object;\r\n let message = new $root.Buttplug.DeviceEvent.RSSILevelReading();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.reading != null)\r\n message.reading = object.reading | 0;\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a RSSILevelReading message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.RSSILevelReading} message RSSILevelReading\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n RSSILevelReading.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.reading = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n object.reading = message.reading;\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this RSSILevelReading to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n RSSILevelReading.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return RSSILevelReading;\r\n })();\r\n\r\n return DeviceEvent;\r\n })();\r\n\r\n Buttplug.ButtplugFFIServerMessage = (function() {\r\n\r\n /**\r\n * Properties of a ButtplugFFIServerMessage.\r\n * @memberof Buttplug\r\n * @interface IButtplugFFIServerMessage\r\n * @property {number|null} [id] ButtplugFFIServerMessage id\r\n * @property {Buttplug.ButtplugFFIServerMessage.IFFIMessage|null} [message] ButtplugFFIServerMessage message\r\n */\r\n\r\n /**\r\n * Constructs a new ButtplugFFIServerMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a ButtplugFFIServerMessage.\r\n * @implements IButtplugFFIServerMessage\r\n * @constructor\r\n * @param {Buttplug.IButtplugFFIServerMessage=} [properties] Properties to set\r\n */\r\n function ButtplugFFIServerMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * ButtplugFFIServerMessage id.\r\n * @member {number} id\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @instance\r\n */\r\n ButtplugFFIServerMessage.prototype.id = 0;\r\n\r\n /**\r\n * ButtplugFFIServerMessage message.\r\n * @member {Buttplug.ButtplugFFIServerMessage.IFFIMessage|null|undefined} message\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @instance\r\n */\r\n ButtplugFFIServerMessage.prototype.message = null;\r\n\r\n /**\r\n * Creates a new ButtplugFFIServerMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.IButtplugFFIServerMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage instance\r\n */\r\n ButtplugFFIServerMessage.create = function create(properties) {\r\n return new ButtplugFFIServerMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified ButtplugFFIServerMessage message. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.IButtplugFFIServerMessage} message ButtplugFFIServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ButtplugFFIServerMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.id != null && Object.hasOwnProperty.call(message, \"id\"))\r\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.id);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.encode(message.message, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified ButtplugFFIServerMessage message, length delimited. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.IButtplugFFIServerMessage} message ButtplugFFIServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ButtplugFFIServerMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a ButtplugFFIServerMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ButtplugFFIServerMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ButtplugFFIServerMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.id = reader.uint32();\r\n break;\r\n case 2:\r\n message.message = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a ButtplugFFIServerMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ButtplugFFIServerMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a ButtplugFFIServerMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ButtplugFFIServerMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n if (!$util.isInteger(message.id))\r\n return \"id: integer expected\";\r\n if (message.message != null && message.hasOwnProperty(\"message\")) {\r\n let error = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.verify(message.message);\r\n if (error)\r\n return \"message.\" + error;\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a ButtplugFFIServerMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage\r\n */\r\n ButtplugFFIServerMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ButtplugFFIServerMessage)\r\n return object;\r\n let message = new $root.Buttplug.ButtplugFFIServerMessage();\r\n if (object.id != null)\r\n message.id = object.id >>> 0;\r\n if (object.message != null) {\r\n if (typeof object.message !== \"object\")\r\n throw TypeError(\".Buttplug.ButtplugFFIServerMessage.message: object expected\");\r\n message.message = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.fromObject(object.message);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a ButtplugFFIServerMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage} message ButtplugFFIServerMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n ButtplugFFIServerMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (options.defaults) {\r\n object.id = 0;\r\n object.message = null;\r\n }\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n object.id = message.id;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.toObject(message.message, options);\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this ButtplugFFIServerMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n ButtplugFFIServerMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n ButtplugFFIServerMessage.FFIMessage = (function() {\r\n\r\n /**\r\n * Properties of a FFIMessage.\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @interface IFFIMessage\r\n * @property {Buttplug.IServerMessage|null} [serverMessage] FFIMessage serverMessage\r\n * @property {Buttplug.IDeviceEvent|null} [deviceEvent] FFIMessage deviceEvent\r\n */\r\n\r\n /**\r\n * Constructs a new FFIMessage.\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @classdesc Represents a FFIMessage.\r\n * @implements IFFIMessage\r\n * @constructor\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage=} [properties] Properties to set\r\n */\r\n function FFIMessage(properties) {\r\n if (properties)\r\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n\r\n /**\r\n * FFIMessage serverMessage.\r\n * @member {Buttplug.IServerMessage|null|undefined} serverMessage\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.serverMessage = null;\r\n\r\n /**\r\n * FFIMessage deviceEvent.\r\n * @member {Buttplug.IDeviceEvent|null|undefined} deviceEvent\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.deviceEvent = null;\r\n\r\n // OneOf field names bound to virtual getters and setters\r\n let $oneOfFields;\r\n\r\n /**\r\n * FFIMessage msg.\r\n * @member {\"serverMessage\"|\"deviceEvent\"|undefined} msg\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n */\r\n Object.defineProperty(FFIMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"serverMessage\", \"deviceEvent\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n\r\n /**\r\n * Creates a new FFIMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage instance\r\n */\r\n FFIMessage.create = function create(properties) {\r\n return new FFIMessage(properties);\r\n };\r\n\r\n /**\r\n * Encodes the specified FFIMessage message. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.FFIMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.serverMessage != null && Object.hasOwnProperty.call(message, \"serverMessage\"))\r\n $root.Buttplug.ServerMessage.encode(message.serverMessage, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\r\n if (message.deviceEvent != null && Object.hasOwnProperty.call(message, \"deviceEvent\"))\r\n $root.Buttplug.DeviceEvent.encode(message.deviceEvent, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\r\n return writer;\r\n };\r\n\r\n /**\r\n * Encodes the specified FFIMessage message, length delimited. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.FFIMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ButtplugFFIServerMessage.FFIMessage();\r\n while (reader.pos < end) {\r\n let tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.serverMessage = $root.Buttplug.ServerMessage.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.deviceEvent = $root.Buttplug.DeviceEvent.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n\r\n /**\r\n * Verifies a FFIMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Object.<string,*>} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n FFIMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n let properties = {};\r\n if (message.serverMessage != null && message.hasOwnProperty(\"serverMessage\")) {\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.ServerMessage.verify(message.serverMessage);\r\n if (error)\r\n return \"serverMessage.\" + error;\r\n }\r\n }\r\n if (message.deviceEvent != null && message.hasOwnProperty(\"deviceEvent\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n let error = $root.Buttplug.DeviceEvent.verify(message.deviceEvent);\r\n if (error)\r\n return \"deviceEvent.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Creates a FFIMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Object.<string,*>} object Plain object\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage\r\n */\r\n FFIMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ButtplugFFIServerMessage.FFIMessage)\r\n return object;\r\n let message = new $root.Buttplug.ButtplugFFIServerMessage.FFIMessage();\r\n if (object.serverMessage != null) {\r\n if (typeof object.serverMessage !== \"object\")\r\n throw TypeError(\".Buttplug.ButtplugFFIServerMessage.FFIMessage.serverMessage: object expected\");\r\n message.serverMessage = $root.Buttplug.ServerMessage.fromObject(object.serverMessage);\r\n }\r\n if (object.deviceEvent != null) {\r\n if (typeof object.deviceEvent !== \"object\")\r\n throw TypeError(\".Buttplug.ButtplugFFIServerMessage.FFIMessage.deviceEvent: object expected\");\r\n message.deviceEvent = $root.Buttplug.DeviceEvent.fromObject(object.deviceEvent);\r\n }\r\n return message;\r\n };\r\n\r\n /**\r\n * Creates a plain object from a FFIMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.FFIMessage} message FFIMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.<string,*>} Plain object\r\n */\r\n FFIMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n let object = {};\r\n if (message.serverMessage != null && message.hasOwnProperty(\"serverMessage\")) {\r\n object.serverMessage = $root.Buttplug.ServerMessage.toObject(message.serverMessage, options);\r\n if (options.oneofs)\r\n object.msg = \"serverMessage\";\r\n }\r\n if (message.deviceEvent != null && message.hasOwnProperty(\"deviceEvent\")) {\r\n object.deviceEvent = $root.Buttplug.DeviceEvent.toObject(message.deviceEvent, options);\r\n if (options.oneofs)\r\n object.msg = \"deviceEvent\";\r\n }\r\n return object;\r\n };\r\n\r\n /**\r\n * Converts this FFIMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n * @returns {Object.<string,*>} JSON object\r\n */\r\n FFIMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n\r\n return FFIMessage;\r\n })();\r\n\r\n return ButtplugFFIServerMessage;\r\n })();\r\n\r\n return Buttplug;\r\n})();\r\n\r\nexport { $root as default };\r\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","\r\nimport { ButtplugEmbeddedConnectorOptions, ButtplugWebsocketConnectorOptions } from \"./connectors.js\";\r\nimport { ButtplugMessageSorter } from \"./sorter.js\";\r\nimport { Buttplug } from \"./buttplug_ffi.js\";\r\n\r\nfunction must_run_init_1(a: any | undefined): any {\r\n throw new Error(\"Must run buttplugInit() async before calling any Buttplug methods!\");\r\n}\r\n\r\nfunction must_run_init_2(a: any | undefined, b: any | undefined): any {\r\n throw new Error(\"Must run buttplugInit() async before calling any Buttplug methods!\");\r\n}\r\n\r\nfunction must_run_init_3(a: any | undefined, b: any | undefined, c: any | undefined): any {\r\n throw new Error(\"Must run buttplugInit() async before calling any Buttplug methods!\");\r\n}\r\n\r\nfunction must_run_init_4(a: any | undefined, b: any | undefined, c: any | undefined, d: any | undefined): any {\r\n throw new Error(\"Must run buttplugInit() async before calling any Buttplug methods!\");\r\n}\r\n// import { buttplug_create_protobuf_client, buttplug_free_client, buttplug_client_protobuf_message, buttplug_activate_env_logger, buttplug_free_device, buttplug_create_device, buttplug_device_protobuf_message } from \"./buttplug-rs-ffi/buttplug_rs_ffi\";\r\n\r\nlet buttplug_create_protobuf_client = must_run_init_3;\r\nlet buttplug_free_client = must_run_init_1;\r\nlet buttplug_client_protobuf_message = must_run_init_4;\r\nlet buttplug_activate_env_logger = must_run_init_1;\r\nlet buttplug_free_device = must_run_init_1;\r\nlet buttplug_create_device = must_run_init_2;\r\nlet buttplug_device_protobuf_message = must_run_init_4;\r\nlet buttplug_has_init_run = false;\r\n\r\nexport async function buttplugInit() {\r\n if (buttplug_has_init_run) {\r\n console.log(\"buttplugInit function has already run successfully. This only needs to be run once, but doesn't affect anything (other than printing this message) if called again.\");\r\n return;\r\n }\r\n let index = await import(/* webpackPrefetch: 1 */ \"./buttplug-rs-ffi/buttplug_rs_ffi.js\").catch((e) => {\r\n console.log(e);\r\n return Promise.reject(e);\r\n });\r\n buttplug_create_protobuf_client = index.buttplug_create_protobuf_client;\r\n buttplug_free_client = index.buttplug_free_client;\r\n buttplug_client_protobuf_message = index.buttplug_client_protobuf_message;\r\n buttplug_activate_env_logger = index.buttplug_activate_env_logger;\r\n buttplug_free_device = index.buttplug_free_device;\r\n buttplug_create_device = index.buttplug_create_device;\r\n buttplug_device_protobuf_message = index.buttplug_device_protobuf_message;\r\n buttplug_has_init_run = true;\r\n}\r\n\r\nfunction sendClientMessage(sorter: ButtplugMessageSorter, clientPtr: number, message: Buttplug.ClientMessage, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let promise = sorter.PrepareOutgoingMessage(message);\r\n let buffer = Buffer.from(Buttplug.ClientMessage.encode(message).finish())\r\n buttplug_client_protobuf_message(clientPtr, buffer, callback, 0);\r\n return promise;\r\n}\r\n\r\nexport function connectEmbedded(sorter: ButtplugMessageSorter, clientPtr: number, options: ButtplugEmbeddedConnectorOptions, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n connectLocal: Buttplug.ClientMessage.ConnectLocal.create({\r\n serverName: options.ServerName,\r\n allowRawMessages: options.AllowRawMessages,\r\n deviceConfigurationJson: options.DeviceConfigJSON,\r\n userDeviceConfigurationJson: options.UserDeviceConfigJSON,\r\n commManagerTypes: options.DeviceCommunicationManagerTypes,\r\n maxPingTime: options.MaxPingTime\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg, callback);\r\n}\r\n\r\nexport function connectWebsocket(sorter: ButtplugMessageSorter, clientPtr: number, options: ButtplugWebsocketConnectorOptions, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n connectWebsocket: Buttplug.ClientMessage.ConnectWebsocket.create({\r\n address: options.Address\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg, callback);\r\n}\r\n\r\nexport function disconnect(sorter: ButtplugMessageSorter, clientPtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n disconnect: Buttplug.ClientMessage.Disconnect.create({})\r\n })\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg, callback);\r\n}\r\n\r\nexport function startScanning(sorter: ButtplugMessageSorter, clientPtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n startScanning: Buttplug.ClientMessage.StartScanning.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg, callback);\r\n}\r\n\r\nexport function stopScanning(sorter: ButtplugMessageSorter, clientPtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n stopScanning: Buttplug.ClientMessage.StopScanning.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg, callback);\r\n}\r\n\r\nexport function stopAllDevices(sorter: ButtplugMessageSorter, clientPtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n stopAllDevices: Buttplug.ClientMessage.StopAllDevices.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg, callback);\r\n}\r\n\r\nfunction sendDeviceMessage(sorter: ButtplugMessageSorter, devicePtr: number, message: Buttplug.DeviceMessage, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let promise = sorter.PrepareOutgoingMessage(message);\r\n let buffer = Buffer.from(Buttplug.DeviceMessage.encode(message).finish())\r\n buttplug_device_protobuf_message(devicePtr, buffer, callback, 0);\r\n return promise;\r\n}\r\n\r\nexport function vibrate(sorter: ButtplugMessageSorter, devicePtr: number, speeds: Buttplug.DeviceMessage.VibrateComponent[], callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n vibrateCmd: Buttplug.DeviceMessage.VibrateCmd.create({\r\n speeds: speeds\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function rotate(sorter: ButtplugMessageSorter, devicePtr: number, rotations: Buttplug.DeviceMessage.RotateComponent[], callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rotateCmd: Buttplug.DeviceMessage.RotateCmd.create({\r\n rotations: rotations\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function linear(sorter: ButtplugMessageSorter, devicePtr: number, vectors: Buttplug.DeviceMessage.LinearComponent[], callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n linearCmd: Buttplug.DeviceMessage.LinearCmd.create({\r\n movements: vectors\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function stopDevice(sorter: ButtplugMessageSorter, devicePtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n stopDeviceCmd: Buttplug.DeviceMessage.StopDeviceCmd.create({\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function batteryLevel(sorter: ButtplugMessageSorter, devicePtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n batteryLevelCmd: Buttplug.DeviceMessage.BatteryLevelCmd.create({\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function rssiLevel(sorter: ButtplugMessageSorter, devicePtr: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rssiLevelCmd: Buttplug.DeviceMessage.RSSILevelCmd.create({\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function rawRead(sorter: ButtplugMessageSorter, devicePtr: number, endpoint: Buttplug.Endpoint, expectedLength: number, timeout: number, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawReadCmd: Buttplug.DeviceMessage.RawReadCmd.create({\r\n endpoint: endpoint,\r\n expectedLength: expectedLength,\r\n timeout: timeout\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function rawWrite(sorter: ButtplugMessageSorter, devicePtr: number, endpoint: Buttplug.Endpoint, data: Uint8Array, writeWithResponse: boolean, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawWriteCmd: Buttplug.DeviceMessage.RawWriteCmd.create({\r\n endpoint: endpoint,\r\n data: data,\r\n writeWithResponse: writeWithResponse\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function rawSubscribe(sorter: ButtplugMessageSorter, devicePtr: number, endpoint: Buttplug.Endpoint, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawSubscribeCmd: Buttplug.DeviceMessage.RawSubscribeCmd.create({\r\n endpoint: endpoint\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function rawUnsubscribe(sorter: ButtplugMessageSorter, devicePtr: number, endpoint: Buttplug.Endpoint, callback: Function): Promise<Buttplug.ButtplugFFIServerMessage> {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawUnsubscribeCmd: Buttplug.DeviceMessage.RawUnsubscribeCmd.create({\r\n endpoint: endpoint\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg, callback);\r\n}\r\n\r\nexport function createClientPtr(eventCallback: Function, clientName: string): number {\r\n return buttplug_create_protobuf_client(clientName, eventCallback, 0);\r\n}\r\n\r\nexport function createDevicePtr(clientPtr: number, deviceIndex: number): number | null {\r\n return buttplug_create_device(clientPtr, deviceIndex);\r\n}\r\n\r\nexport function freeClientPtr(clientPtr: number) {\r\n buttplug_free_client(clientPtr);\r\n}\r\n\r\nexport function freeDevicePtr(devicePtr: number) {\r\n buttplug_free_device(devicePtr);\r\n}\r\n\r\nexport function activateConsoleLogger(logLevel: \"error\" | \"warn\" | \"info\" | \"debug\" | \"trace\") {\r\n buttplug_activate_env_logger(logLevel);\r\n}\r\n\r\n/*\r\nexport function addLogHandler(logCallback: Function, logLevel: \"error\" | \"warn\" | \"info\" | \"debug\" | \"trace\", useJSON: boolean) {\r\n buttplug_add_log_handler(logCallback, logLevel, useJSON);\r\n}\r\n*/","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","import { Buttplug } from \"./buttplug_ffi.js\";\r\n\r\nexport class ButtplugError extends Error {\r\n /*\r\n\r\n public get ErrorClass(): Messages.ErrorClass {\r\n return this.errorClass;\r\n }\r\n\r\n public get InnerError(): Error | undefined {\r\n return this.innerError;\r\n }\r\n\r\n public get Id(): number | undefined {\r\n return this.messageId;\r\n }\r\n\r\n public get ErrorMessage(): Messages.ButtplugMessage {\r\n return new Messages.Error(this.message, this.ErrorClass, this.Id);\r\n }\r\n\r\n public static FromError(aError: Messages.Error) {\r\n switch (aError.ErrorCode) {\r\n case Messages.ErrorClass.ERROR_DEVICE:\r\n return new ButtplugDeviceError(aError.ErrorMessage, aError.Id);\r\n case Messages.ErrorClass.ERROR_INIT:\r\n return new ButtplugInitError(aError.ErrorMessage, aError.Id);\r\n case Messages.ErrorClass.ERROR_UNKNOWN:\r\n return new ButtplugUnknownError(aError.ErrorMessage, aError.Id);\r\n case Messages.ErrorClass.ERROR_PING:\r\n return new ButtplugPingError(aError.ErrorMessage, aError.Id);\r\n case Messages.ErrorClass.ERROR_MSG:\r\n return new ButtplugMessageError(aError.ErrorMessage, aError.Id);\r\n default:\r\n throw new Error(`Message type ${aError.ErrorCode} not handled`);\r\n }\r\n }\r\n*/\r\n public innerError: Error | undefined;\r\n public messageId: number | undefined;\r\n\r\n protected constructor(aMessage: string,\r\n aId: number = 0,\r\n aInner?: Error) {\r\n super(aMessage);\r\n this.innerError = aInner;\r\n this.messageId = aId;\r\n }\r\n}\r\n\r\nexport class ButtplugHandshakeError extends ButtplugError {\r\n public constructor(aMessage: string, aId: number = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\n\r\nexport class ButtplugDeviceError extends ButtplugError {\r\n public constructor(aMessage: string, aId: number = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\n\r\nexport class ButtplugMessageError extends ButtplugError {\r\n public constructor(aMessage: string, aId: number = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\n\r\nexport class ButtplugPingError extends ButtplugError {\r\n public constructor(aMessage: string, aId: number = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\n\r\nexport class ButtplugUnknownError extends ButtplugError {\r\n public constructor(aMessage: string, aId: number = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\n\r\nexport class ButtplugClientConnectorError extends ButtplugError {\r\n public constructor(aMessage: string, aId: number = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\n\r\nexport function convertPBufError(err: Buttplug.ServerMessage.IError, id: number): ButtplugError {\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugConnectorError) {\r\n return new ButtplugClientConnectorError(err.message!, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugDeviceError) {\r\n return new ButtplugDeviceError(err.message!, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugHandshakeError) {\r\n return new ButtplugHandshakeError(err.message!, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugMessageError) {\r\n return new ButtplugMessageError(err.message!, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugPingError) {\r\n return new ButtplugPingError(err.message!, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugUnknownError) {\r\n return new ButtplugUnknownError(err.message!, id);\r\n }\r\n throw new ButtplugUnknownError(\"Cannot convert error: \" + err);\r\n}\r\n","export class ButtplugEmbeddedConnectorOptions {\r\n public constructor(\r\n public ServerName: string = \"Buttplug WASM Embedded Server\",\r\n // Empty string means ignore.\r\n public DeviceConfigJSON: string = \"\",\r\n // Empty string means ignore.\r\n public UserDeviceConfigJSON: string = \"\",\r\n // 0 here means all device.\r\n public DeviceCommunicationManagerTypes: number = 0,\r\n // Require opt-in on raw messages.\r\n public AllowRawMessages: boolean = false,\r\n public MaxPingTime: number = 0,\r\n ) {}\r\n}\r\n\r\nexport class ButtplugWebsocketConnectorOptions {\r\n public constructor(\r\n // Default to the insecure port.\r\n public Address: string = \"ws://127.0.0.1:12345\",\r\n ) {}\r\n}","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nimport { Buttplug } from \"./buttplug_ffi.js\";\r\nimport { convertPBufError } from \"./errors.js\";\r\n\r\nexport class ButtplugMessageSorter {\r\n protected _counter: number = 1;\r\n protected _waitingMsgs: Map<number, [(val: Buttplug.ServerMessage) => void, (err: Error) => void]> = new Map();\r\n\r\n public constructor() {\r\n }\r\n\r\n // One of the places we should actually return a promise, as we need to store\r\n // them while waiting for them to return across the line.\r\n // tslint:disable:promise-function-async\r\n public PrepareOutgoingMessage(aMsg: Buttplug.ClientMessage | Buttplug.DeviceMessage) : Promise<Buttplug.ButtplugFFIServerMessage> {\r\n aMsg.id = this._counter;\r\n // Always increment last, otherwise we might lose sync\r\n this._counter += 1;\r\n let res;\r\n let rej;\r\n const msgPromise = new Promise<Buttplug.ButtplugFFIServerMessage>((resolve, reject) => { res = resolve; rej = reject; });\r\n this._waitingMsgs.set(aMsg.id, [res, rej]);\r\n return msgPromise;\r\n }\r\n\r\n public ParseIncomingMessages(msg: Buttplug.ButtplugFFIServerMessage): Buttplug.ServerMessage | null {\r\n if (msg.id !== 0 && this._waitingMsgs.has(msg.id)) {\r\n const [res, rej] = this._waitingMsgs.get(msg.id)!;\r\n // If we've gotten back an error, reject the related promise using a\r\n // ButtplugException derived type.\r\n if (msg.message?.serverMessage?.error) {\r\n rej(convertPBufError(msg.message?.serverMessage?.error, msg.id));\r\n return null;\r\n }\r\n res(msg);\r\n return null;\r\n }\r\n return msg;\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\nimport { Buttplug } from \"./buttplug_ffi.js\";\r\nimport { ButtplugDeviceError } from \"./errors.js\";\r\nimport { EventEmitter } from \"events\";\r\nimport { vibrate, rotate, stopDevice, linear, batteryLevel,\r\n rssiLevel, rawRead, rawWrite, rawSubscribe, rawUnsubscribe } from \"./ffi.js\";\r\nimport { ButtplugMessageSorter } from \"./sorter.js\";\r\n\r\n// Re-export the protobuf enum, so we don't require users to have to know the\r\n// full resolution path.\r\nexport import ButtplugDeviceMessageType = Buttplug.ServerMessage.MessageAttributeType;\r\n\r\nexport class MessageAttributes {\r\n /** MessageAttributes featureCount */\r\n featureCount?: (number | null);\r\n\r\n /** MessageAttributes stepCount */\r\n stepCount?: (number[] | null);\r\n\r\n /** MessageAttributes endpoints */\r\n endpoints?: (Buttplug.Endpoint[] | null);\r\n\r\n /** MessageAttributes maxDuration */\r\n maxDuration?: (number[] | null);\r\n\r\n constructor(attributes: Buttplug.ServerMessage.IMessageAttributes) {\r\n this.featureCount = attributes.featureCount;\r\n this.stepCount = attributes.stepCount;\r\n this.maxDuration = attributes.maxDuration;\r\n this.endpoints = attributes.endpoints;\r\n }\r\n}\r\n\r\nexport class VibrationCmd {\r\n public readonly Index: number;\r\n public readonly Speed: number;\r\n\r\n constructor(index: number, speed: number) {\r\n this.Index = index;\r\n this.Speed = speed;\r\n }\r\n}\r\n\r\nexport class RotationCmd {\r\n public readonly Index: number;\r\n public readonly Speed: number;\r\n public readonly Clockwise: boolean;\r\n\r\n constructor(index: number, speed: number, clockwise: boolean) {\r\n this.Index = index;\r\n this.Speed = speed;\r\n this.Clockwise = clockwise;\r\n }\r\n}\r\n\r\nexport class VectorCmd {\r\n public readonly Index: number;\r\n public readonly Duration: number;\r\n public readonly Position: number;\r\n\r\n constructor(index: number, duration: number, position: number) {\r\n this.Index = index;\r\n this.Duration = duration;\r\n this.Position = position;\r\n }\r\n}\r\n\r\n/**\r\n * Represents an abstract device, capable of taking certain kinds of messages.\r\n */\r\nexport class ButtplugClientDevice extends EventEmitter {\r\n\r\n private _name: string;\r\n private _index: number;\r\n private _devicePtr: number;\r\n private _messageAttributes: Map<ButtplugDeviceMessageType, MessageAttributes> = new Map();\r\n private _sorter: ButtplugMessageSorter;\r\n private _sorterCallback: Function;\r\n\r\n /**\r\n * Return the name of the device.\r\n */\r\n public get Name(): string {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Return the index of the device.\r\n */\r\n public get Index(): number {\r\n return this._index;\r\n }\r\n\r\n /**\r\n * Return a list of message types the device accepts.\r\n */\r\n public get AllowedMessages(): ButtplugDeviceMessageType[] {\r\n return Array.from(this._messageAttributes.keys());\r\n }\r\n\r\n /**\r\n * @param _index Index of the device, as created by the device manager.\r\n * @param _name Name of the device.\r\n * @param allowedMsgs Buttplug messages the device can receive.\r\n */\r\n constructor(\r\n devicePtr: number,\r\n sorter: ButtplugMessageSorter,\r\n sorter_callback: Function,\r\n index: number,\r\n name: string,\r\n allowedMsgsObj: Buttplug.ServerMessage.IMessageAttributes[]) {\r\n super();\r\n this._devicePtr = devicePtr;\r\n this._sorter = sorter;\r\n this._index = index;\r\n this._name = name;\r\n this._sorterCallback = sorter_callback;\r\n for (let attributes of allowedMsgsObj) {\r\n this._messageAttributes.set(attributes.messageType!, new MessageAttributes(attributes));\r\n }\r\n }\r\n\r\n /**\r\n * Return the message attributes related to the given message\r\n */\r\n public messageAttributes(messageName: ButtplugDeviceMessageType): MessageAttributes | undefined {\r\n return this._messageAttributes.get(messageName);\r\n }\r\n\r\n protected checkAllowedMessageType(messageType: ButtplugDeviceMessageType) {\r\n if (!this._messageAttributes.has(messageType)) {\r\n throw new ButtplugDeviceError(`Message ${ButtplugDeviceMessageType[messageType]} does not exist on device ${this._name}`);\r\n }\r\n }\r\n\r\n public async vibrate(speeds: number | Array<VibrationCmd | number>): Promise<void> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.VibrateCmd);\r\n let msgSpeeds: Buttplug.DeviceMessage.VibrateComponent[];\r\n if (typeof (speeds) === \"number\") {\r\n // We can skip the check here since we're building the command array ourselves.\r\n const features = this._messageAttributes.get(ButtplugDeviceMessageType.VibrateCmd)!.featureCount!;\r\n msgSpeeds = Array.from({length: features}, (_, i) => Buttplug.DeviceMessage.VibrateComponent.create({\r\n index: i,\r\n speed: speeds,\r\n }));\r\n } else if (Array.isArray(speeds) && speeds.every(x => typeof(x) === \"number\")) {\r\n msgSpeeds = speeds.map((x, index) => Buttplug.DeviceMessage.VibrateComponent.create({\r\n index: index,\r\n speed: x as number\r\n }));\r\n } else if (Array.isArray(speeds) && speeds.every(x => x instanceof VibrationCmd)) {\r\n msgSpeeds = (speeds as VibrationCmd[]).map(x => Buttplug.DeviceMessage.VibrateComponent.create({\r\n index: x.Index,\r\n speed: x.Speed\r\n }));\r\n } else {\r\n throw new ButtplugDeviceError(\"vibrate can only take numbers or arrays of numbers or VibrationCmds.\");\r\n }\r\n await vibrate(this._sorter, this._devicePtr, msgSpeeds, this._sorterCallback);\r\n }\r\n\r\n public async rotate(speeds: number | RotationCmd[], clockwise: boolean | undefined): Promise<void> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RotateCmd);\r\n let msgRotations: Buttplug.DeviceMessage.RotateComponent[];\r\n if (typeof (speeds) === \"number\" && clockwise !== undefined) {\r\n // We can skip the check here since we're building the command array ourselves.\r\n const features = this._messageAttributes.get(ButtplugDeviceMessageType.RotateCmd)!.featureCount!;\r\n msgRotations = Array.from({length: features}, (_, i) => Buttplug.DeviceMessage.RotateComponent.create({\r\n index: i,\r\n speed: speeds,\r\n clockwise: clockwise\r\n }));\r\n } else if (Array.isArray(speeds) && speeds.every(x => x instanceof RotationCmd)) {\r\n msgRotations = (speeds as any).map(x => Buttplug.DeviceMessage.RotateComponent.create({\r\n index: x.Index,\r\n speed: x.Speed,\r\n clockwise: x.Clockwise\r\n }));\r\n } else {\r\n throw new ButtplugDeviceError(\"rotate can only take number/boolean or arrays of RotateCmds.\");\r\n }\r\n await rotate(this._sorter, this._devicePtr, msgRotations, this._sorterCallback);\r\n }\r\n\r\n public async linear(position: number | VectorCmd[], duration: number | undefined): Promise<void> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.LinearCmd);\r\n let msgVectors: Buttplug.DeviceMessage.LinearComponent[];\r\n if (typeof (position) === \"number\" && duration !== undefined) {\r\n // We can skip the check here since we're building the command array ourselves.\r\n const features = this._messageAttributes.get(ButtplugDeviceMessageType.LinearCmd)!.featureCount!;\r\n msgVectors = Array.from({length: features}, (_, i) => Buttplug.DeviceMessage.LinearComponent.create({\r\n index: i,\r\n position: position,\r\n duration: duration\r\n }));\r\n } else if (Array.isArray(position) && position.every(x => x instanceof VectorCmd)) {\r\n msgVectors = position.map(x => Buttplug.DeviceMessage.LinearComponent.create({\r\n index: x.Index,\r\n position: x.Position,\r\n duration: x.Duration\r\n }));\r\n } else {\r\n throw new ButtplugDeviceError(\"linear can only take number/number or arrays of VectorCmds.\");\r\n }\r\n await linear(this._sorter, this._devicePtr, msgVectors, this._sorterCallback);\r\n }\r\n\r\n public async batteryLevel(): Promise<number> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.BatteryLevelCmd);\r\n let batteryMsg = await batteryLevel(this._sorter, this._devicePtr, this._sorterCallback);\r\n if (batteryMsg.message?.deviceEvent?.batteryLevelReading) {\r\n let reading = batteryMsg.message?.deviceEvent?.batteryLevelReading;\r\n return reading.reading!;\r\n }\r\n throw new ButtplugDeviceError(\"Wrong reply message received for batteryLevel: \" + batteryMsg);\r\n }\r\n\r\n public async rssiLevel(): Promise<number> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RSSILevelCmd);\r\n let rssiMsg = await rssiLevel(this._sorter, this._devicePtr, this._sorterCallback);\r\n if (rssiMsg.message?.deviceEvent?.rssiLevelReading) {\r\n return rssiMsg.message?.deviceEvent?.rssiLevelReading.reading!;\r\n }\r\n throw new ButtplugDeviceError(\"Wrong reply message received for rssiLevel: \" + rssiMsg);\r\n }\r\n\r\n public async rawRead(endpoint: Buttplug.Endpoint, expectedLength: number, timeout: number): Promise<Uint8Array> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawReadCmd);\r\n let readingMsg = await rawRead(this._sorter, this._devicePtr, endpoint, expectedLength, timeout, this._sorterCallback);\r\n if (readingMsg.message?.deviceEvent?.rawReading) {\r\n return readingMsg.message.deviceEvent.rawReading.data!;\r\n }\r\n throw new ButtplugDeviceError(\"Wrong reply message received for rawRead: \" + readingMsg);\r\n }\r\n\r\n public async rawWrite(endpoint: Buttplug.Endpoint, data: Uint8Array, writeWithResponse: boolean): Promise<void> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawWriteCmd);\r\n await rawWrite(this._sorter, this._devicePtr, endpoint, data, writeWithResponse, this._sorterCallback);\r\n }\r\n\r\n public async rawSubscribe(endpoint: Buttplug.Endpoint): Promise<void> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawSubscribeCmd);\r\n await rawSubscribe(this._sorter, this._devicePtr, endpoint, this._sorterCallback);\r\n }\r\n\r\n public async rawUnsubscribe(endpoint: Buttplug.Endpoint): Promise<void> {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawUnsubscribeCmd);\r\n await rawUnsubscribe(this._sorter, this._devicePtr, endpoint, this._sorterCallback);\r\n }\r\n\r\n public async stop(): Promise<void> {\r\n await stopDevice(this._sorter, this._devicePtr, this._sorterCallback);\r\n }\r\n\r\n public emitDisconnected() {\r\n this.emit(\"deviceremoved\");\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport { Buttplug } from \"./buttplug_ffi.js\";\r\nimport { ButtplugClientConnectorError } from \"./errors.js\";\r\nimport { createClientPtr, createDevicePtr, connectEmbedded, connectWebsocket, startScanning, stopScanning, stopAllDevices, disconnect } from \"./ffi.js\";\r\nimport { ButtplugEmbeddedConnectorOptions, ButtplugWebsocketConnectorOptions } from \"./connectors.js\";\r\nimport { ButtplugMessageSorter } from \"./sorter.js\";\r\nimport { ButtplugClientDevice } from \"./device.js\";\r\nexport class ButtplugClient extends EventEmitter {\r\n protected _devices: Map<number, ButtplugClientDevice> = new Map();\r\n protected _clientName: string;\r\n // This will either be null, or our WASM heap pointer for our connected client object.\r\n private _clientPtr?: number = undefined;\r\n protected _isScanning = false;\r\n private _connected = false;\r\n private _sorter: ButtplugMessageSorter = new ButtplugMessageSorter();\r\n\r\n constructor(clientName: string = \"Generic Buttplug Client\") {\r\n super();\r\n this._clientName = clientName;\r\n this._clientPtr = createClientPtr(this.sorterCallback, clientName);\r\n }\r\n\r\n public get Connected(): boolean {\r\n return this._connected;\r\n }\r\n\r\n public get Devices(): ButtplugClientDevice[] {\r\n // While this function doesn't actually send a message, if we don't have a\r\n // connector, we shouldn't have devices.\r\n this.CheckConnector();\r\n const devices: ButtplugClientDevice[] = [];\r\n this._devices.forEach((d, i) => {\r\n devices.push(d);\r\n });\r\n return devices;\r\n }\r\n\r\n public get isScanning(): boolean {\r\n return this._isScanning;\r\n }\r\n\r\n public connect = async (options: ButtplugEmbeddedConnectorOptions | ButtplugWebsocketConnectorOptions): Promise<void> => {\r\n if (this._connected) {\r\n throw new ButtplugClientConnectorError(\"Client already connected.\");\r\n }\r\n if (options instanceof ButtplugEmbeddedConnectorOptions) {\r\n await connectEmbedded(this._sorter, this._clientPtr!, options, this.sorterCallback);\r\n } else if (options instanceof ButtplugWebsocketConnectorOptions) {\r\n await connectWebsocket(this._sorter, this._clientPtr!, options, this.sorterCallback);\r\n } else {\r\n throw new ButtplugClientConnectorError(\"Invalid connector type.\");\r\n }\r\n this._connected = true;\r\n }\r\n\r\n public disconnect = async () => {\r\n if (!this._clientPtr) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n await disconnect(this._sorter, this._clientPtr, this.sorterCallback);\r\n }\r\n\r\n public startScanning = async () => {\r\n if (!this._connected) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n this._isScanning = true;\r\n await startScanning(this._sorter, this._clientPtr!, this.sorterCallback);\r\n }\r\n\r\n public stopScanning = async () => {\r\n if (!this._connected) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n this._isScanning = false;\r\n await stopScanning(this._sorter, this._clientPtr!, this.sorterCallback);\r\n }\r\n\r\n public stopAllDevices = async () => {\r\n if (!this._connected) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n await stopAllDevices(this._sorter, this._clientPtr!, this.sorterCallback);\r\n }\r\n\r\n protected CheckConnector() {\r\n if (!this.Connected) {\r\n throw new ButtplugClientConnectorError(\"ButtplugClient not connected\");\r\n }\r\n }\r\n\r\n private sorterCallback = (buf: Uint8Array) => {\r\n const msg = Buttplug.ButtplugFFIServerMessage.decode(buf);\r\n if (msg.id > 0) {\r\n this._sorter.ParseIncomingMessages(msg);\r\n return;\r\n }\r\n if (msg.message?.serverMessage?.deviceAdded) {\r\n const addedMsg = msg.message?.serverMessage?.deviceAdded;\r\n const devicePtr = createDevicePtr(this._clientPtr!, addedMsg.index!);\r\n const device = new ButtplugClientDevice(devicePtr!, this._sorter, this.sorterCallback, addedMsg.index!, addedMsg.name!, addedMsg.messageAttributes!);\r\n this._devices.set(addedMsg.index!, device);\r\n this.emit(\"deviceadded\", device);\r\n return;\r\n }\r\n if (msg.message?.serverMessage?.deviceRemoved) {\r\n const removedMsg = msg.message?.serverMessage?.deviceRemoved;\r\n if (this._devices.has(removedMsg.index!)) {\r\n const removedDevice = this._devices.get(removedMsg.index!);\r\n removedDevice?.emitDisconnected();\r\n this._devices.delete(removedMsg.index!);\r\n this.emit(\"deviceremoved\", removedDevice);\r\n }\r\n return;\r\n }\r\n if (msg.message?.serverMessage?.scanningFinished) {\r\n this._isScanning = false;\r\n this.emit(\"scanningfinished\");\r\n return;\r\n }\r\n if (msg.message?.serverMessage?.disconnect) {\r\n this._connected = false;\r\n this.emit(\"serverdisconnect\");\r\n }\r\n }\r\n}\r\n","/*!\r\n * Buttplug WASM Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright 2020-2021 (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nexport * from \"./client.js\";\r\nexport * from \"./connectors.js\";\r\nexport * from \"./device.js\";\r\nexport * from \"./errors.js\";\r\nexport * from \"./ffi.js\";\r\nexport * from \"./sorter.js\";\r\nimport { Buttplug } from \"./buttplug_ffi.js\";\r\nexport import Endpoint = Buttplug.Endpoint;","/*!\r\n * Buttplug WASM Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright 2020-2021 (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n// Godawful hack for CDN support.\r\n//\r\n// Since users are used to being able to include the library off CDNs, I wanted\r\n// to keep supporting that with the new WASM package. Unfortunately WASM\r\n// requires webpack to chunk loading due to the async nature of WASM loads,\r\n// which means dynamic import() calls. In order to make sure the import always\r\n// includes itself on the correct domain, we have to:\r\n//\r\n// - Get the URL of the CDN we're on (via querying the currently processed\r\n// script. Hacky as hell.)\r\n// - Override Webpack's special __webpack_public_path__ variable with that path.\r\n// - Have the user call the buttplugInit() method to actually load the WASM\r\n// blob.\r\n//\r\n// Gross, but it does the job.\r\n\r\ndeclare var __webpack_public_path__: any;\r\n\r\nvar scripts = document.getElementsByTagName( \"script\" );\r\nvar lastScript = scripts[scripts.length - 1].src;\r\n__webpack_public_path__ = lastScript.substr(0, lastScript.lastIndexOf('/') + 1);\r\n\r\nexport * from \"./index.js\";"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://Buttplug/webpack/universalModuleDefinition","webpack://Buttplug/webpack/bootstrap","webpack://Buttplug/./node_modules/base64-js/index.js","webpack://Buttplug/./node_modules/class-transformer/esm5/ClassTransformer.js","webpack://Buttplug/./node_modules/class-transformer/esm5/MetadataStorage.js","webpack://Buttplug/./node_modules/class-transformer/esm5/TransformOperationExecutor.js","webpack://Buttplug/./node_modules/class-transformer/esm5/constants/default-options.constant.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/exclude.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/expose.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/index.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/transform-instance-to-instance.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/transform-instance-to-plain.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/transform-plain-to-instance.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/transform.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/decorators/type.decorator.js","webpack://Buttplug/./node_modules/class-transformer/esm5/enums/index.js","webpack://Buttplug/./node_modules/class-transformer/esm5/enums/transformation-type.enum.js","webpack://Buttplug/./node_modules/class-transformer/esm5/index.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/class-constructor.type.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/class-transformer-options.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/decorator-options/exclude-options.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/decorator-options/expose-options.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/decorator-options/transform-options.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/decorator-options/type-discriminator-descriptor.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/decorator-options/type-options.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/index.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/metadata/exclude-metadata.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/metadata/expose-metadata.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/metadata/transform-fn-params.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/metadata/transform-metadata.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/metadata/type-metadata.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/target-map.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/interfaces/type-help-options.interface.js","webpack://Buttplug/./node_modules/class-transformer/esm5/storage.js","webpack://Buttplug/./node_modules/class-transformer/esm5/utils/get-global.util.js","webpack://Buttplug/./node_modules/class-transformer/esm5/utils/index.js","webpack://Buttplug/./node_modules/class-transformer/esm5/utils/is-promise.util.js","webpack://Buttplug/./node_modules/events/events.js","webpack://Buttplug/./node_modules/ieee754/index.js","webpack://Buttplug/./node_modules/isarray/index.js","webpack://Buttplug/./node_modules/node-libs-browser/node_modules/buffer/index.js","webpack://Buttplug/./node_modules/process/browser.js","webpack://Buttplug/./node_modules/reflect-metadata/Reflect.js","webpack://Buttplug/(webpack)/buildin/global.js","webpack://Buttplug/./src/client/ButtplugBrowserWebsocketClientConnector.ts","webpack://Buttplug/./src/client/ButtplugClientConnectorException.ts","webpack://Buttplug/./src/client/ButtplugClientDevice.ts","webpack://Buttplug/./src/client/Client.ts","webpack://Buttplug/./src/core/Exceptions.ts","webpack://Buttplug/./src/core/Logging.ts","webpack://Buttplug/./src/core/MessageUtils.ts","webpack://Buttplug/./src/core/Messages.ts","webpack://Buttplug/./src/index.ts","webpack://Buttplug/./src/utils/ButtplugBrowserWebsocketConnector.ts","webpack://Buttplug/./src/utils/ButtplugMessageSorter.ts"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","__assign","assign","arguments","apply","this","ClassTransformer","instanceToPlain","options","CLASS_TO_PLAIN","transform","undefined","classToPlainFromExist","plainObject","plainToInstance","cls","plain","PLAIN_TO_CLASS","plainToClassFromExist","clsObject","instanceToInstance","CLASS_TO_CLASS","classToClassFromExist","fromObject","serialize","JSON","stringify","deserialize","json","jsonObject","parse","deserializeArray","MetadataStorage","_typeMetadatas","Map","_transformMetadatas","_exposeMetadatas","_excludeMetadatas","_ancestorsMap","addTypeMetadata","metadata","has","target","set","propertyName","addTransformMetadata","addExposeMetadata","addExcludeMetadata","findTransformMetadatas","transformationType","findMetadatas","filter","toClassOnly","toPlainOnly","findExcludeMetadata","findMetadata","findExposeMetadata","findExposeMetadataByCustomName","getExposedMetadatas","find","findTypeMetadata","getStrategy","excludeMap","exclude","exposeMap","expose","getMetadata","getExcludedMetadatas","getExposedProperties","map","getExcludedProperties","clear","metadatas","metadataFromTarget","metadataFromTargetMap","from","values","meta","metadataFromAncestors","_i","_a","getAncestors","ancestor","ancestorMetadataMap","metadataFromAncestor","concat","ancestorResult","metadataFromAncestorsTarget","slice","reverse","ancestors","baseClass","getPrototypeOf","constructor","__spreadArray","to","pack","ar","TransformOperationExecutor","recursionStack","Set","source","targetType","arrayType","isMap","level","_this","isArray","newValue_1","instantiateArrayType","array","forEach","subValue","index","subSource","enableCircularCheck","isCircular","add","realTargetType","discriminator","subTypes","subType","newObject","newType","typeFunction","keepDiscriminatorProperty","value_1","String","Number","Boolean","Date","valueOf","Buffer","Promise","resolve","reject","then","data","keys","getKeys","newValue","_loop_1","valueKey","newValueKey","this_1","ignoreDecorators","exposeMetadata","Function","type","isSubValueMap","metadata_1","reflectedType","targetMaps","properties","enableImplicitConversion","Reflect","arrayType_1","getReflectedType","descriptor","getOwnPropertyDescriptor","finalValue","applyCustomTransformations","exposeUnsetFields","transformKey","exposeDefaultValues","keys_1","delete","obj","version","checkVersion","since","until","groups","checkGroups","transformFn","strategy","excludeExtraneousValues","exposedProperties","excludedProperties","excludedProperties_1","includes","excludePrefixes","every","prefix","substr","self","decision","some","optionGroup","defaultOptions","Exclude","Expose","TransformInstanceToInstance","params","propertyKey","classTransformer","originalMethod","args","result","isPromise","TransformInstanceToPlain","TransformPlainToInstance","classType","Transform","Type","TransformationType","classToPlain","plainToClass","defaultMetadataStorage","getGlobal","globalThis","global","ReflectOwnKeys","R","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","once","emitter","errorListener","err","removeListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","handler","flags","on","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","events","existing","newListener","emit","unshift","warned","w","count","ProcessEmitWarning","warning","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","unwrapListeners","ret","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","RangeError","setMaxListeners","getMaxListeners","doError","error","er","message","context","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","spliceOne","pop","off","removeAllListeners","rawListeners","eventNames","read","buffer","offset","isLE","mLen","nBytes","e","eLen","eMax","eBias","nBits","NaN","Infinity","Math","pow","write","rt","abs","floor","log","LN2","toString","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","__proto__","encodingOrOffset","allocUnsafe","ArrayBuffer","fromArrayBuffer","byteOffset","fromArrayLike","fromString","string","encoding","isEncoding","actual","isBuffer","checked","isnan","val","assertSize","size","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","j","hexWrite","remaining","strLen","parsed","parseInt","utf8Write","blitBuffer","asciiWrite","asciiToBytes","str","byteArray","latin1Write","base64Write","ucs2Write","utf16leToBytes","units","hi","lo","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","SlowBuffer","alloc","INSPECT_MAX_BYTES","typedArraySupport","foo","subarray","poolSize","_augment","species","configurable","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","pos","swap16","swap32","swap64","equals","inspect","max","match","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","base64clean","stringtrim","trim","replace","src","dst","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","marker","Item","noop","nextTick","title","browser","env","argv","versions","binding","cwd","chdir","umask","exporter","makeExporter","previous","writable","hasOwn","supportsSymbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","supportsProto","downLevel","HashMap","MakeDictionary","functionPrototype","usePolyfill","_Map","entries","CreateMapPolyfill","_Set","CreateSetPolyfill","Metadata","WeakMap","CreateWeakMapPolyfill","decorate","decorators","attributes","IsUndefined","IsArray","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","metadataMap","GetOrCreateMetadataMap","targetMetadata","decorated","O","P","Create","MetadataKey","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","parentKeys","ownKeys_1","parentKeys_1","GetIterator","k","next","IteratorStep","nextValue","IteratorValue","IteratorClose","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","OrdinaryToPrimitive","toString_1","IsCallable","toString_2","argument","ToString","V","func","method","iterResult","done","f","proto","prototypeProto","cacheSentinel","arraySentinel","MapIterator","selector","_index","_keys","_values","_selector","throw","return","_cacheKey","_cacheIndex","_find","getKey","getValue","getEntry","insert","_","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","random","GenRandomBytes","crypto","getRandomValues","msCrypto","byte","__","g","ButtplugBrowserWebsocketClientConnector","ButtplugBrowserWebsocketConnector","_url","super","_sorter","ButtplugMessageSorter","Send","msg","Connected","PrepareOutgoingMessage","SendMessage","ParseIncomingMessage","event","msgs","FromJSON","emitMsgs","ParseIncomingMessages","Blob","reader","FileReader","ev","OnReaderLoad","readAsText","_ws","ButtplugClientConnectorException","ButtplugException","Messages","ErrorClass","ERROR_UNKNOWN","ButtplugClientDevice","Name","_deviceInfo","DeviceName","DisplayName","DeviceDisplayName","Index","DeviceIndex","MessageTimingGap","DeviceMessageTimingGap","AllowedMessages","DeviceMessages","static","sendClosure","_sendClosure","allowedMsgs","update","send","sendExpectOk","response","Ok","FromError","ButtplugMessageException","scalar","ScalarCmd","scalarCommandBuilder","speed","actuator","scalarAttrs","ActuatorType","ButtplugDeviceException","cmds","ScalarSubcommand","vibrate","Vibrate","oscillate","Oscillate","rotate","clockwise","rotateAttrs","RotateCmd","linear","duration","linearAttrs","LinearCmd","sensorRead","sensorIndex","sensorType","SensorReadCmd","SensorReading","Data","battery","batteryAttrs","SensorType","Battery","rssi","rssiAttrs","RSSI","rawRead","endpoint","expectedLength","RawReadCmd","Endpoints","RawReading","rawWrite","writeWithResponse","RawWriteCmd","rawSubscribe","RawSubscribeCmd","rawUnsubscribe","RawUnsubscribeCmd","stop","StopDeviceCmd","EmitDisconnected","ButtplugClient","clientName","_pingTimer","_connector","_devices","_logger","ButtplugLogger","Logger","_isScanning","connect","connector","Info","Connect","parseMessages","disconnectHandler","initializeConnection","disconnect","Debug","checkConnector","shutdownConnection","Disconnect","startScanning","sendMsgExpectOk","StartScanning","stopScanning","StopScanning","stopAllDevices","StopAllDevices","DeviceAdded","addedMsg","addedDevice","fromMsg","sendDeviceMessageClosure","DeviceRemoved","removedMsg","removedDevice","ScanningFinished","RequestServerInfo","_clientName","MESSAGE_SPEC_VERSION","ServerInfo","serverinfo","ServerName","MaxPingTime","MessageVersion","LogAndError","ButtplugInitException","requestDeviceList","ErrorMessage","RequestDeviceList","Devices","device","clearInterval","sendDeviceMessage","Connector","devices","IsScanning","deviceMsg","errorClass","InnerException","innerError","Id","messageId","logger","id","SYSTEM_MESSAGE_ID","ErrorCode","ERROR_DEVICE","ERROR_INIT","ButtplugUnknownException","ERROR_PING","ButtplugPingException","ERROR_MSG","inner","ButtplugLogLevel","LogMessage","logMessage","logLevel","hour","getHours","getMinutes","sec","getSeconds","timestamp","Message","LogLevel","Timestamp","FormattedMessage","sLogger","maximumConsoleLogLevel","Off","maximumEventLogLevel","MaximumConsoleLogLevel","buttplugLogLevel","MaximumEventLogLevel","AddLogMessage","Warn","Trace","logMsg","msgarray","DEFAULT_MESSAGE_ID","MAX_ID","MessageAttributes","SensorSubscribeCmd","GenericDeviceMessageAttributes","RawDeviceMessageAttributes","SensorDeviceMessageAttributes","ButtplugMessage","toProtocolFormat","jsonObj","ButtplugDeviceMessage","ButtplugSystemMessage","Ping","Schemversion","DeviceInfo","DeviceList","ClientName","GenericMessageSubcommand","Scalar","Scalars","RotateSubcommand","Speed","Clockwise","deviceIndex","commands","cmdList","Rotations","VectorSubcommand","Position","Duration","cmd","Vectors","SensorIndex","Endpoint","ExpectedLength","Timeout","WriteWithResponse","ws","WebSocket","rej","conErrorCallback","Initialize","close","_useCounter","_counter","_waitingMsgs","msgPromise","noMatch"],"mappings":";CAAA,SAAUA,iCAAiCC,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAQ,qBAAuBD,IAE/BD,EAAe,SAAIC,GACpB,CATD,CASGK,QAAQ,WACX,O,YCTE,IAAIC,EAAmB,CAAC,EAGxB,SAASC,oBAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,CAAC,GAUX,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,qBAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,OACf,CAyDA,OArDAM,oBAAoBM,EAAIF,EAGxBJ,oBAAoBO,EAAIR,EAGxBC,oBAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,oBAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,GAEhE,EAGAV,oBAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,GACvD,EAOAnB,oBAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,oBAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,oBAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,oBAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,EAAM,EAAEC,KAAK,KAAMD,IAC9I,OAAOF,CACR,EAGAvB,oBAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,SAASM,aAAe,OAAOjC,EAAgB,OAAG,EAClD,SAASkC,mBAAqB,OAAOlC,CAAQ,EAE9C,OADAK,oBAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,CACR,EAGAV,oBAAoBW,EAAI,SAASmB,EAAQC,GAAY,OAAOnB,OAAOoB,UAAUC,eAAe5B,KAAKyB,EAAQC,EAAW,EAGpH/B,oBAAoBkC,EAAI,GAIjBlC,oBAAoBA,oBAAoBmC,EAAI,iB,oEChFrDzC,EAAQ0C,WAuCR,SAASA,WAAYC,GACnB,IAAIC,EAAOC,QAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAC3B,OAAuC,GAA9BE,EAAWC,GAAuB,EAAKA,CAClD,EA3CA/C,EAAQgD,YAiDR,SAASA,YAAaL,GACpB,IAAIM,EAcAzC,EAbAoC,EAAOC,QAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAEvBM,EAAM,IAAIC,EAVhB,SAASC,YAAaT,EAAKG,EAAUC,GACnC,OAAuC,GAA9BD,EAAWC,GAAuB,EAAKA,CAClD,CAQoBK,CAAYT,EAAKG,EAAUC,IAEzCM,EAAU,EAGVC,EAAMP,EAAkB,EACxBD,EAAW,EACXA,EAGJ,IAAKtC,EAAI,EAAGA,EAAI8C,EAAK9C,GAAK,EACxByC,EACGM,EAAUZ,EAAIa,WAAWhD,KAAO,GAChC+C,EAAUZ,EAAIa,WAAWhD,EAAI,KAAO,GACpC+C,EAAUZ,EAAIa,WAAWhD,EAAI,KAAO,EACrC+C,EAAUZ,EAAIa,WAAWhD,EAAI,IAC/B0C,EAAIG,KAAcJ,GAAO,GAAM,IAC/BC,EAAIG,KAAcJ,GAAO,EAAK,IAC9BC,EAAIG,KAAmB,IAANJ,EAGK,IAApBF,IACFE,EACGM,EAAUZ,EAAIa,WAAWhD,KAAO,EAChC+C,EAAUZ,EAAIa,WAAWhD,EAAI,KAAO,EACvC0C,EAAIG,KAAmB,IAANJ,GAGK,IAApBF,IACFE,EACGM,EAAUZ,EAAIa,WAAWhD,KAAO,GAChC+C,EAAUZ,EAAIa,WAAWhD,EAAI,KAAO,EACpC+C,EAAUZ,EAAIa,WAAWhD,EAAI,KAAO,EACvC0C,EAAIG,KAAcJ,GAAO,EAAK,IAC9BC,EAAIG,KAAmB,IAANJ,GAGnB,OAAOC,CACT,EA5FAlD,EAAQyD,cAkHR,SAASA,cAAeC,GAQtB,IAPA,IAAIT,EACAK,EAAMI,EAAMC,OACZC,EAAaN,EAAM,EACnBO,EAAQ,GACRC,EAAiB,MAGZtD,EAAI,EAAGuD,EAAOT,EAAMM,EAAYpD,EAAIuD,EAAMvD,GAAKsD,EACtDD,EAAMG,KAAKC,YAAYP,EAAOlD,EAAIA,EAAIsD,EAAkBC,EAAOA,EAAQvD,EAAIsD,IAI1D,IAAfF,GACFX,EAAMS,EAAMJ,EAAM,GAClBO,EAAMG,KACJE,EAAOjB,GAAO,GACdiB,EAAQjB,GAAO,EAAK,IACpB,OAEsB,IAAfW,IACTX,GAAOS,EAAMJ,EAAM,IAAM,GAAKI,EAAMJ,EAAM,GAC1CO,EAAMG,KACJE,EAAOjB,GAAO,IACdiB,EAAQjB,GAAO,EAAK,IACpBiB,EAAQjB,GAAO,EAAK,IACpB,MAIJ,OAAOY,EAAMM,KAAK,GACpB,EA1IA,IALA,IAAID,EAAS,GACTX,EAAY,GACZJ,EAA4B,oBAAfiB,WAA6BA,WAAaC,MAEvDC,EAAO,mEACF9D,EAAI,EAAG8C,EAAMgB,EAAKX,OAAQnD,EAAI8C,IAAO9C,EAC5C0D,EAAO1D,GAAK8D,EAAK9D,GACjB+C,EAAUe,EAAKd,WAAWhD,IAAMA,EAQlC,SAASqC,QAASF,GAChB,IAAIW,EAAMX,EAAIgB,OAEd,GAAIL,EAAM,EAAI,EACZ,MAAM,IAAIiB,MAAM,kDAKlB,IAAIzB,EAAWH,EAAI6B,QAAQ,KAO3B,OANkB,IAAd1B,IAAiBA,EAAWQ,GAMzB,CAACR,EAJcA,IAAaQ,EAC/B,EACA,EAAKR,EAAW,EAGtB,CAmEA,SAASmB,YAAaP,EAAOe,EAAOC,GAGlC,IAFA,IAAIzB,EARoB0B,EASpBC,EAAS,GACJpE,EAAIiE,EAAOjE,EAAIkE,EAAKlE,GAAK,EAChCyC,GACIS,EAAMlD,IAAM,GAAM,WAClBkD,EAAMlD,EAAI,IAAM,EAAK,QACP,IAAfkD,EAAMlD,EAAI,IACboE,EAAOZ,KAdFE,GADiBS,EAeM1B,IAdT,GAAK,IACxBiB,EAAOS,GAAO,GAAK,IACnBT,EAAOS,GAAO,EAAI,IAClBT,EAAa,GAANS,IAaT,OAAOC,EAAOT,KAAK,GACrB,CAlGAZ,EAAU,IAAIC,WAAW,IAAM,GAC/BD,EAAU,IAAIC,WAAW,IAAM,E,2FCnB/B,sRAAIqB,SAAsC,WAStC,OARAA,SAAW3D,OAAO4D,QAAU,SAASpD,GACjC,IAAK,IAAIe,EAAGjC,EAAI,EAAGyB,EAAI8C,UAAUpB,OAAQnD,EAAIyB,EAAGzB,IAE5C,IAAK,IAAIgC,KADTC,EAAIsC,UAAUvE,GACOU,OAAOoB,UAAUC,eAAe5B,KAAK8B,EAAGD,KACzDd,EAAEc,GAAKC,EAAED,IAEjB,OAAOd,CACX,EACOmD,SAASG,MAAMC,KAAMF,UAChC,EAIIG,EAAkC,WAClC,SAASA,mBACT,CA0CA,OAzCAA,iBAAiB5C,UAAU6C,gBAAkB,SAAU/C,EAAQgD,GAE3D,OADe,IAAI,6BAA2B,qBAAmBC,eAAgBR,SAASA,SAAS,CAAC,EAAG,kBAAiBO,IACxGE,eAAUC,EAAWnD,OAAQmD,OAAWA,OAAWA,OAAWA,EAClF,EACAL,iBAAiB5C,UAAUkD,sBAAwB,SAAUpD,EAAQqD,EAAaL,GAE9E,OADe,IAAI,6BAA2B,qBAAmBC,eAAgBR,SAASA,SAAS,CAAC,EAAG,kBAAiBO,IACxGE,UAAUG,EAAarD,OAAQmD,OAAWA,OAAWA,OAAWA,EACpF,EACAL,iBAAiB5C,UAAUoD,gBAAkB,SAAUC,EAAKC,EAAOR,GAE/D,OADe,IAAI,6BAA2B,qBAAmBS,eAAgBhB,SAASA,SAAS,CAAC,EAAG,kBAAiBO,IACxGE,eAAUC,EAAWK,EAAOD,OAAKJ,OAAWA,OAAWA,EAC3E,EACAL,iBAAiB5C,UAAUwD,sBAAwB,SAAUC,EAAWH,EAAOR,GAE3E,OADe,IAAI,6BAA2B,qBAAmBS,eAAgBhB,SAASA,SAAS,CAAC,EAAG,kBAAiBO,IACxGE,UAAUS,EAAWH,OAAOL,OAAWA,OAAWA,OAAWA,EACjF,EACAL,iBAAiB5C,UAAU0D,mBAAqB,SAAU5D,EAAQgD,GAE9D,OADe,IAAI,6BAA2B,qBAAmBa,eAAgBpB,SAASA,SAAS,CAAC,EAAG,kBAAiBO,IACxGE,eAAUC,EAAWnD,OAAQmD,OAAWA,OAAWA,OAAWA,EAClF,EACAL,iBAAiB5C,UAAU4D,sBAAwB,SAAU9D,EAAQ+D,EAAYf,GAE7E,OADe,IAAI,6BAA2B,qBAAmBa,eAAgBpB,SAASA,SAAS,CAAC,EAAG,kBAAiBO,IACxGE,UAAUa,EAAY/D,OAAQmD,OAAWA,OAAWA,OAAWA,EACnF,EACAL,iBAAiB5C,UAAU8D,UAAY,SAAUhE,EAAQgD,GACrD,OAAOiB,KAAKC,UAAUrB,KAAKE,gBAAgB/C,EAAQgD,GACvD,EAIAF,iBAAiB5C,UAAUiE,YAAc,SAAUZ,EAAKa,EAAMpB,GAC1D,IAAIqB,EAAaJ,KAAKK,MAAMF,GAC5B,OAAOvB,KAAKS,gBAAgBC,EAAKc,EAAYrB,EACjD,EAIAF,iBAAiB5C,UAAUqE,iBAAmB,SAAUhB,EAAKa,EAAMpB,GAC/D,IAAIqB,EAAaJ,KAAKK,MAAMF,GAC5B,OAAOvB,KAAKS,gBAAgBC,EAAKc,EAAYrB,EACjD,EACOF,gBACX,CA7CqC,E,0FCdrC,uHAII0B,EAAiC,WACjC,SAASA,kBAIL3B,KAAK4B,eAAiB,IAAIC,IAC1B7B,KAAK8B,oBAAsB,IAAID,IAC/B7B,KAAK+B,iBAAmB,IAAIF,IAC5B7B,KAAKgC,kBAAoB,IAAIH,IAC7B7B,KAAKiC,cAAgB,IAAIJ,GAC7B,CAkMA,OA9LAF,gBAAgBtE,UAAU6E,gBAAkB,SAAUC,GAC7CnC,KAAK4B,eAAeQ,IAAID,EAASE,SAClCrC,KAAK4B,eAAeU,IAAIH,EAASE,OAAQ,IAAIR,KAEjD7B,KAAK4B,eAAexF,IAAI+F,EAASE,QAAQC,IAAIH,EAASI,aAAcJ,EACxE,EACAR,gBAAgBtE,UAAUmF,qBAAuB,SAAUL,GAClDnC,KAAK8B,oBAAoBM,IAAID,EAASE,SACvCrC,KAAK8B,oBAAoBQ,IAAIH,EAASE,OAAQ,IAAIR,KAEjD7B,KAAK8B,oBAAoB1F,IAAI+F,EAASE,QAAQD,IAAID,EAASI,eAC5DvC,KAAK8B,oBAAoB1F,IAAI+F,EAASE,QAAQC,IAAIH,EAASI,aAAc,IAE7EvC,KAAK8B,oBAAoB1F,IAAI+F,EAASE,QAAQjG,IAAI+F,EAASI,cAAcxD,KAAKoD,EAClF,EACAR,gBAAgBtE,UAAUoF,kBAAoB,SAAUN,GAC/CnC,KAAK+B,iBAAiBK,IAAID,EAASE,SACpCrC,KAAK+B,iBAAiBO,IAAIH,EAASE,OAAQ,IAAIR,KAEnD7B,KAAK+B,iBAAiB3F,IAAI+F,EAASE,QAAQC,IAAIH,EAASI,aAAcJ,EAC1E,EACAR,gBAAgBtE,UAAUqF,mBAAqB,SAAUP,GAChDnC,KAAKgC,kBAAkBI,IAAID,EAASE,SACrCrC,KAAKgC,kBAAkBM,IAAIH,EAASE,OAAQ,IAAIR,KAEpD7B,KAAKgC,kBAAkB5F,IAAI+F,EAASE,QAAQC,IAAIH,EAASI,aAAcJ,EAC3E,EAIAR,gBAAgBtE,UAAUsF,uBAAyB,SAAUN,EAAQE,EAAcK,GAC/E,OAAO5C,KAAK6C,cAAc7C,KAAK8B,oBAAqBO,EAAQE,GAAcO,QAAO,SAAUX,GACvF,OAAKA,EAAShC,WAEuB,IAAjCgC,EAAShC,QAAQ4C,cAAyD,IAAjCZ,EAAShC,QAAQ6C,eAEzB,IAAjCb,EAAShC,QAAQ4C,YACTH,IAAuB,qBAAmB5B,gBAC9C4B,IAAuB,qBAAmBhC,gBAEb,IAAjCuB,EAAShC,QAAQ6C,aACVJ,IAAuB,qBAAmBxC,gBAGzD,GACJ,EACAuB,gBAAgBtE,UAAU4F,oBAAsB,SAAUZ,EAAQE,GAC9D,OAAOvC,KAAKkD,aAAalD,KAAKgC,kBAAmBK,EAAQE,EAC7D,EACAZ,gBAAgBtE,UAAU8F,mBAAqB,SAAUd,EAAQE,GAC7D,OAAOvC,KAAKkD,aAAalD,KAAK+B,iBAAkBM,EAAQE,EAC5D,EACAZ,gBAAgBtE,UAAU+F,+BAAiC,SAAUf,EAAQvG,GACzE,OAAOkE,KAAKqD,oBAAoBhB,GAAQiB,MAAK,SAAUnB,GACnD,OAAOA,EAAShC,SAAWgC,EAAShC,QAAQrE,OAASA,CACzD,GACJ,EACA6F,gBAAgBtE,UAAUkG,iBAAmB,SAAUlB,EAAQE,GAC3D,OAAOvC,KAAKkD,aAAalD,KAAK4B,eAAgBS,EAAQE,EAC1D,EACAZ,gBAAgBtE,UAAUmG,YAAc,SAAUnB,GAC9C,IAAIoB,EAAazD,KAAKgC,kBAAkB5F,IAAIiG,GACxCqB,EAAUD,GAAcA,EAAWrH,SAAIkE,GACvCqD,EAAY3D,KAAK+B,iBAAiB3F,IAAIiG,GACtCuB,EAASD,GAAaA,EAAUvH,SAAIkE,GACxC,OAAKoD,GAAWE,IAAaF,IAAYE,EAC9B,OACJF,EAAU,aAAe,WACpC,EACA/B,gBAAgBtE,UAAUgG,oBAAsB,SAAUhB,GACtD,OAAOrC,KAAK6D,YAAY7D,KAAK+B,iBAAkBM,EACnD,EACAV,gBAAgBtE,UAAUyG,qBAAuB,SAAUzB,GACvD,OAAOrC,KAAK6D,YAAY7D,KAAKgC,kBAAmBK,EACpD,EACAV,gBAAgBtE,UAAU0G,qBAAuB,SAAU1B,EAAQO,GAC/D,OAAO5C,KAAKqD,oBAAoBhB,GAC3BS,QAAO,SAAUX,GAClB,OAAKA,EAAShC,WAEuB,IAAjCgC,EAAShC,QAAQ4C,cAAyD,IAAjCZ,EAAShC,QAAQ6C,eAEzB,IAAjCb,EAAShC,QAAQ4C,YACTH,IAAuB,qBAAmB5B,gBAC9C4B,IAAuB,qBAAmBhC,gBAEb,IAAjCuB,EAAShC,QAAQ6C,aACVJ,IAAuB,qBAAmBxC,gBAGzD,IACK4D,KAAI,SAAU7B,GAAY,OAAOA,EAASI,YAAc,GACjE,EACAZ,gBAAgBtE,UAAU4G,sBAAwB,SAAU5B,EAAQO,GAChE,OAAO5C,KAAK8D,qBAAqBzB,GAC5BS,QAAO,SAAUX,GAClB,OAAKA,EAAShC,WAEuB,IAAjCgC,EAAShC,QAAQ4C,cAAyD,IAAjCZ,EAAShC,QAAQ6C,eAEzB,IAAjCb,EAAShC,QAAQ4C,YACTH,IAAuB,qBAAmB5B,gBAC9C4B,IAAuB,qBAAmBhC,gBAEb,IAAjCuB,EAAShC,QAAQ6C,aACVJ,IAAuB,qBAAmBxC,gBAGzD,IACK4D,KAAI,SAAU7B,GAAY,OAAOA,EAASI,YAAc,GACjE,EACAZ,gBAAgBtE,UAAU6G,MAAQ,WAC9BlE,KAAK4B,eAAesC,QACpBlE,KAAK+B,iBAAiBmC,QACtBlE,KAAKgC,kBAAkBkC,QACvBlE,KAAKiC,cAAciC,OACvB,EAIAvC,gBAAgBtE,UAAUwG,YAAc,SAAUM,EAAW9B,GACzD,IACI+B,EADAC,EAAwBF,EAAU/H,IAAIiG,GAEtCgC,IACAD,EAAqBhF,MAAMkF,KAAKD,EAAsBE,UAAUzB,QAAO,SAAU0B,GAAQ,YAA6BlE,IAAtBkE,EAAKjC,YAA4B,KAGrI,IADA,IAAIkC,EAAwB,GACnBC,EAAK,EAAGC,EAAK3E,KAAK4E,aAAavC,GAASqC,EAAKC,EAAGjG,OAAQgG,IAAM,CACnE,IAAIG,EAAWF,EAAGD,GACdI,EAAsBX,EAAU/H,IAAIyI,GACxC,GAAIC,EAAqB,CACrB,IAAIC,EAAuB3F,MAAMkF,KAAKQ,EAAoBP,UAAUzB,QAAO,SAAU0B,GAAQ,YAA6BlE,IAAtBkE,EAAKjC,YAA4B,IACrIkC,EAAsB1F,KAAKgB,MAAM0E,EAAuBM,EAC5D,CACJ,CACA,OAAON,EAAsBO,OAAOZ,GAAsB,GAC9D,EACAzC,gBAAgBtE,UAAU6F,aAAe,SAAUiB,EAAW9B,EAAQE,GAClE,IAAI8B,EAAwBF,EAAU/H,IAAIiG,GAC1C,GAAIgC,EAAuB,CACvB,IAAID,EAAqBC,EAAsBjI,IAAImG,GACnD,GAAI6B,EACA,OAAOA,CAEf,CACA,IAAK,IAAIM,EAAK,EAAGC,EAAK3E,KAAK4E,aAAavC,GAASqC,EAAKC,EAAGjG,OAAQgG,IAAM,CACnE,IAAIG,EAAWF,EAAGD,GACdI,EAAsBX,EAAU/H,IAAIyI,GACxC,GAAIC,EAAqB,CACrB,IAAIG,EAAiBH,EAAoB1I,IAAImG,GAC7C,GAAI0C,EACA,OAAOA,CAEf,CACJ,CAEJ,EACAtD,gBAAgBtE,UAAUwF,cAAgB,SAAUsB,EAAW9B,EAAQE,GACnE,IACI6B,EADAC,EAAwBF,EAAU/H,IAAIiG,GAEtCgC,IACAD,EAAqBC,EAAsBjI,IAAImG,IAGnD,IADA,IAAI2C,EAA8B,GACzBR,EAAK,EAAGC,EAAK3E,KAAK4E,aAAavC,GAASqC,EAAKC,EAAGjG,OAAQgG,IAAM,CACnE,IAAIG,EAAWF,EAAGD,GACdI,EAAsBX,EAAU/H,IAAIyI,GACpCC,GACIA,EAAoB1C,IAAIG,IACxB2C,EAA4BnG,KAAKgB,MAAMmF,EAA6BJ,EAAoB1I,IAAImG,GAGxG,CACA,OAAO2C,EACFC,QACAC,UACAJ,QAAQZ,GAAsB,IAAIe,QAAQC,UACnD,EACAzD,gBAAgBtE,UAAUuH,aAAe,SAAUvC,GAC/C,IAAKA,EACD,MAAO,GACX,IAAKrC,KAAKiC,cAAcG,IAAIC,GAAS,CAEjC,IADA,IAAIgD,EAAY,GACPC,EAAYrJ,OAAOsJ,eAAelD,EAAOhF,UAAUmI,kBAA6C,IAAxBF,EAAUjI,UAA2BiI,EAAYrJ,OAAOsJ,eAAeD,EAAUjI,UAAUmI,aACxKH,EAAUtG,KAAKuG,GAEnBtF,KAAKiC,cAAcK,IAAID,EAAQgD,EACnC,CACA,OAAOrF,KAAKiC,cAAc7F,IAAIiG,EAClC,EACOV,eACX,CA7MoC,E,qGCJpC,kQAAI8D,cAAgD,SAAUC,EAAIpB,EAAMqB,GACpE,GAAIA,GAA6B,IAArB7F,UAAUpB,OAAc,IAAK,IAA4BkH,EAAxBrK,EAAI,EAAGC,EAAI8I,EAAK5F,OAAYnD,EAAIC,EAAGD,KACxEqK,GAAQrK,KAAK+I,IACRsB,IAAIA,EAAKxG,MAAM/B,UAAU8H,MAAMzJ,KAAK4I,EAAM,EAAG/I,IAClDqK,EAAGrK,GAAK+I,EAAK/I,IAGrB,OAAOmK,EAAGV,OAAOY,GAAMxG,MAAM/B,UAAU8H,MAAMzJ,KAAK4I,GACtD,EAWA,IAAIuB,EAA4C,WAI5C,SAASA,2BAA2BjD,EAAoBzC,GACpDH,KAAK4C,mBAAqBA,EAC1B5C,KAAKG,QAAUA,EAIfH,KAAK8F,eAAiB,IAAIC,GAC9B,CAidA,OA7cAF,2BAA2BxI,UAAUgD,UAAY,SAAU2F,EAAQxJ,EAAOyJ,EAAYC,EAAWC,EAAOC,GACpG,IAAIC,EAAQrG,KAEZ,QADc,IAAVoG,IAAoBA,EAAQ,GAC5BhH,MAAMkH,QAAQ9J,IAAUA,aAAiBuJ,IAAK,CAC9C,IAAIQ,EAAaL,GAAalG,KAAK4C,qBAAuB,qBAAmBhC,eA1BzF,SAAS4F,qBAAqBN,GAC1B,IAAIO,EAAQ,IAAIP,EAChB,OAAMO,aAAiBV,KAAU,SAAUU,EAGpCA,EAFI,EAGf,CAqBkBD,CAAqBN,GACrB,GAgDN,OA/CA1J,EAAMkK,SAAQ,SAAUC,EAAUC,GAC9B,IAAIC,EAAYb,EAASA,EAAOY,QAAStG,EACzC,GAAK+F,EAAMlG,QAAQ2G,qBAAwBT,EAAMU,WAAWJ,GAoCnDN,EAAMzD,qBAAuB,qBAAmB5B,iBACjDuF,aAAsBR,IACtBQ,EAAWS,IAAIL,GAGfJ,EAAWxH,KAAK4H,QAzC+C,CACnE,IAAIM,OAAiB,EACrB,GAA0B,mBAAfhB,GACPA,GACAA,EAAW9F,SACX8F,EAAW9F,QAAQ+G,eACnBjB,EAAW9F,QAAQ+G,cAAc9J,UACjC6I,EAAW9F,QAAQ+G,cAAcC,SAAU,CAC3C,GAAId,EAAMzD,qBAAuB,qBAAmBhC,eAAgB,CAChEqG,EAAiBhB,EAAW9F,QAAQ+G,cAAcC,SAAS7D,MAAK,SAAU8D,GACtE,OAAOA,EAAQtL,OAAS6K,EAASV,EAAW9F,QAAQ+G,cAAc9J,SACtE,IACA,IAAI+C,EAAU,CAAEkH,UAAWd,EAAYpJ,OAAQwJ,EAAUvJ,cAAUkD,GAC/DgH,EAAUrB,EAAWsB,aAAapH,GACN8G,OAAb3G,IAAnB2G,EAAiDK,EAA6BL,EAAezK,MACxFyJ,EAAW9F,QAAQqH,kCACbb,EAASV,EAAW9F,QAAQ+G,cAAc9J,SACzD,CACIiJ,EAAMzD,qBAAuB,qBAAmB5B,iBAChDiG,EAAiBN,EAASnB,aAE1Ba,EAAMzD,qBAAuB,qBAAmBxC,iBAChDuG,EAASV,EAAW9F,QAAQ+G,cAAc9J,UAAY6I,EAAW9F,QAAQ+G,cAAcC,SAAS7D,MAAK,SAAU8D,GAAW,OAAOA,EAAQ5K,QAAUmK,EAASnB,WAAa,IAAG1J,KAEpL,MAEImL,EAAiBhB,EAErB,IAAIwB,EAAUpB,EAAMhG,UAAUwG,EAAWF,EAAUM,OAAgB3G,EAAWqG,aAAoB9E,IAAKuE,EAAQ,GAC3GG,aAAsBR,IACtBQ,EAAWS,IAAIS,GAGflB,EAAWxH,KAAK0I,EAExB,CASJ,IACOlB,CACX,CACK,GAAIN,IAAeyB,QAAWvB,EAK9B,IAAIF,IAAe0B,QAAWxB,EAK9B,IAAIF,IAAe2B,SAAYzB,EAK/B,KAAKF,IAAe4B,MAAQrL,aAAiBqL,QAAU1B,EACxD,OAAI3J,aAAiBqL,KACV,IAAIA,KAAKrL,EAAMsL,WAEtBtL,QACOA,EACJ,IAAIqL,KAAKrL,GAEf,GAAM,sBAAYuL,SAAW9B,IAAe8B,GAAUvL,aAAiBuL,KAAY5B,EACpF,OAAI3J,QACOA,EACJuL,EAAOzD,KAAK9H,GAElB,GAAI,oBAAUA,KAAW2J,EAC1B,OAAO,IAAI6B,SAAQ,SAAUC,EAASC,GAClC1L,EAAM2L,MAAK,SAAUC,GAAQ,OAAOH,EAAQ5B,EAAMhG,eAAUC,EAAW8H,EAAMnC,OAAY3F,OAAWA,EAAW8F,EAAQ,GAAK,GAAG8B,EACnI,IAEC,GAAK/B,GAAmB,OAAV3J,GAAmC,iBAAVA,GAA4C,mBAAfA,EAAM2L,KAK1E,IAAqB,iBAAV3L,GAAgC,OAAVA,EAAgB,CAE7CyJ,GAAczJ,EAAMgJ,cAAgBvJ,SAChCmD,MAAMkH,QAAQ9J,IAAUA,EAAMgJ,cAAgBpG,SAQ/C6G,EAAazJ,EAAMgJ,cAEtBS,GAAcD,IACfC,EAAaD,EAAOR,aACpBxF,KAAKG,QAAQ2G,qBAEb9G,KAAK8F,eAAekB,IAAIxK,GAE5B,IAAI6L,EAAOrI,KAAKsI,QAAQrC,EAAYzJ,EAAO2J,GACvCoC,EAAWvC,GAAkB,CAAC,EAC7BA,GACAhG,KAAK4C,qBAAuB,qBAAmBhC,gBAC5CZ,KAAK4C,qBAAuB,qBAAmB5B,iBAE/CuH,EADApC,EACW,IAAItE,IAEVoE,EACM,IAAIA,EAGJ,CAAC,GA+KpB,IA5KA,IAAIuC,QAAU,SAAU1L,GACpB,GAAY,cAARA,GAA+B,gBAARA,EACvB,MAAO,WAEX,IAAI2L,EAAW3L,EACX4L,EAAc5L,EAAKyF,EAAezF,EACtC,IAAK6L,EAAOxI,QAAQyI,kBAAoB3C,EACpC,GAAI0C,EAAO/F,qBAAuB,qBAAmBhC,gBAC7CiI,EAAiB,yBAAuBzF,+BAA+B6C,EAAYnJ,MAEnFyF,EAAesG,EAAetG,aAC9BmG,EAAcG,EAAetG,mBAGhC,GAAIoG,EAAO/F,qBAAuB,qBAAmBxC,gBACtDuI,EAAO/F,qBAAuB,qBAAmB5B,eAAgB,CACjE,IAAI6H,KAAiB,yBAAuB1F,mBAAmB8C,EAAYnJ,KACrD+L,EAAe1I,SAAW0I,EAAe1I,QAAQrE,OACnE4M,EAAcG,EAAe1I,QAAQrE,KAE7C,CAGJ,IAAI6K,OAAWrG,EAQXqG,EAPAgC,EAAO/F,qBAAuB,qBAAmBhC,eAOtCpE,EAAMiM,GAGbjM,aAAiBqF,IACNrF,EAAMJ,IAAIqM,GAEhBjM,EAAMiM,aAAqBK,SACrBtM,EAAMiM,KAGNjM,EAAMiM,GAIzB,IAAIM,OAAOzI,EAAW0I,EAAgBrC,aAAoB9E,IAC1D,GAAIoE,GAAcE,EACd4C,EAAO9C,OAEN,GAAIA,EAAY,CACjB,IAAIgD,EAAa,yBAAuB1F,iBAAiB0C,EAAY1D,GACrE,GAAI0G,EAAY,CACZ,IAAI9I,EAAU,CAAEkH,UAAWkB,EAAUpL,OAAQX,EAAOY,SAAUmF,GAC1D+E,EAAU2B,EAAW1B,aAAe0B,EAAW1B,aAAapH,GAAW8I,EAAWC,cAClFD,EAAW9I,SACX8I,EAAW9I,QAAQ+G,eACnB+B,EAAW9I,QAAQ+G,cAAc9J,UACjC6L,EAAW9I,QAAQ+G,cAAcC,SAC3B3K,EAAMiM,aAAqBrJ,MAwB7B2J,EAAOE,GAvBHN,EAAO/F,qBAAuB,qBAAmBhC,iBAM3BmI,OAAbzI,KALTyI,EAAOE,EAAW9I,QAAQ+G,cAAcC,SAAS7D,MAAK,SAAU8D,GAC5D,GAAIT,GAAYA,aAAoB1K,QAAUgN,EAAW9I,QAAQ+G,cAAc9J,YAAYuJ,EACvF,OAAOS,EAAQtL,OAAS6K,EAASsC,EAAW9I,QAAQ+G,cAAc9J,SAE1E,KAC6BkK,EAAmByB,EAAKvM,MAChDyM,EAAW9I,QAAQqH,2BAChBb,GAAYA,aAAoB1K,QAAUgN,EAAW9I,QAAQ+G,cAAc9J,YAAYuJ,UAChFA,EAASsC,EAAW9I,QAAQ+G,cAAc9J,WAIzDuL,EAAO/F,qBAAuB,qBAAmB5B,iBACjD+H,EAAOpC,EAASnB,aAEhBmD,EAAO/F,qBAAuB,qBAAmBxC,gBAC7CuG,IACAA,EAASsC,EAAW9I,QAAQ+G,cAAc9J,UAAY6L,EAAW9I,QAAQ+G,cAAcC,SAAS7D,MAAK,SAAU8D,GAAW,OAAOA,EAAQ5K,QAAUmK,EAASnB,WAAa,IAAG1J,OASxLiN,EAAOzB,EAEX0B,EAAgBA,GAAiBC,EAAWC,gBAAkBrH,GAClE,MACK,GAAI8G,EAAOxI,QAAQgJ,WAEpBR,EAAOxI,QAAQgJ,WACVrG,QAAO,SAAUkB,GAAO,OAAOA,EAAI3B,SAAW4D,KAAgBjC,EAAIoF,WAAW7G,EAAe,IAC5FmE,SAAQ,SAAU1C,GAAO,OAAQ+E,EAAO/E,EAAIoF,WAAW7G,EAAgB,SAE3E,GAAIoG,EAAOxI,QAAQkJ,0BACpBV,EAAO/F,qBAAuB,qBAAmBhC,eAAgB,CAGjE,IAAIsI,EAAgBI,QAAQzF,YAAY,cAAeoC,EAAW5I,UAAWkF,GACzE2G,IACAH,EAAOG,EAEf,CACJ,CAEA,IAAIK,EAAcnK,MAAMkH,QAAQ9J,EAAMiM,IAChCE,EAAOa,iBAAiBvD,EAAY1D,QACpCjC,EAEFuG,EAAYb,EAASA,EAAOyC,QAAYnI,EAM5C,GAAIiI,EAAS/C,YAAYnI,UAAW,CAChC,IAAIoM,EAAaxN,OAAOyN,yBAAyBnB,EAAS/C,YAAYnI,UAAWqL,GACjF,IAAKC,EAAO/F,qBAAuB,qBAAmBhC,gBAClD+H,EAAO/F,qBAAuB,qBAAmB5B,kBAE/CyI,IAAeA,EAAWnH,KAAQiG,EAASG,aAAwBI,UACrE,MAAO,UACf,CACA,GAAKH,EAAOxI,QAAQ2G,qBAAwB6B,EAAO5B,WAAWJ,IAgCzD,GAAIgC,EAAO/F,qBAAuB,qBAAmB5B,eAAgB,CAClE2I,EAAahD,QAEErG,KADnBqJ,EAAahB,EAAOiB,2BAA2BD,EAAY1D,EAAYnJ,EAAKN,EAAOmM,EAAO/F,sBAC1D+F,EAAOxI,QAAQ0J,qBACvCtB,aAAoB1G,IACpB0G,EAASjG,IAAIoG,EAAaiB,GAG1BpB,EAASG,GAAeiB,EAGpC,MA3CyE,CACrE,IAAIG,EAAenB,EAAO/F,qBAAuB,qBAAmBhC,eAAiB8H,EAAc5L,EAC/F6M,OAAa,EACbhB,EAAO/F,qBAAuB,qBAAmBxC,gBAEjDuJ,EAAanN,EAAMsN,GAEnBH,EAAahB,EAAOiB,2BAA2BD,EAAY1D,EAAY6D,EAActN,EAAOmM,EAAO/F,oBAEnG+G,EAAanN,EAAMsN,KAAkBH,EAAahD,EAAWgD,EAE7DA,EAAahB,EAAOtI,UAAUwG,EAAW8C,EAAYZ,EAAMQ,EAAaP,EAAe5C,EAAQ,SAG9E9F,IAAbqG,GAA0BgC,EAAOxI,QAAQ4J,oBAEzCJ,EAAapB,EAASG,IAGtBiB,EAAahB,EAAOtI,UAAUwG,EAAWF,EAAUoC,EAAMQ,EAAaP,EAAe5C,EAAQ,GAC7FuD,EAAahB,EAAOiB,2BAA2BD,EAAY1D,EAAY6D,EAActN,EAAOmM,EAAO/F,2BAGxFtC,IAAfqJ,GAA4BhB,EAAOxI,QAAQ0J,qBACvCtB,aAAoB1G,IACpB0G,EAASjG,IAAIoG,EAAaiB,GAG1BpB,EAASG,GAAeiB,EAGpC,CAaJ,EACIhB,EAAS3I,KAEJ0E,EAAK,EAAGsF,EAAS3B,EAAM3D,EAAKsF,EAAOtL,OAAQgG,IAAM,CAEtD8D,QADUwB,EAAOtF,GAErB,CAIA,OAHI1E,KAAKG,QAAQ2G,qBACb9G,KAAK8F,eAAemE,OAAOzN,GAExB+L,CACX,CAEI,OAAO/L,CACX,CA3NI,OAAOA,CA2NX,CApPI,OAAIA,QACOA,EACJoL,QAAQpL,EAkPnB,CAzPI,OAAIA,QACOA,EACJmL,OAAOnL,EAuPlB,CA9PI,OAAIA,QACOA,EACJkL,OAAOlL,EA6PtB,EACAqJ,2BAA2BxI,UAAUuM,2BAA6B,SAAUpN,EAAO6F,EAAQvF,EAAKoN,EAAKtH,GACjG,IAAIyD,EAAQrG,KACRmE,EAAY,yBAAuBxB,uBAAuBN,EAAQvF,EAAKkD,KAAK4C,oBAyBhF,YAvB6BtC,IAAzBN,KAAKG,QAAQgK,UACbhG,EAAYA,EAAUrB,QAAO,SAAUX,GACnC,OAAKA,EAAShC,SAEPkG,EAAM+D,aAAajI,EAAShC,QAAQkK,MAAOlI,EAAShC,QAAQmK,MACvE,MAIAnG,EADAnE,KAAKG,QAAQoK,QAAUvK,KAAKG,QAAQoK,OAAO7L,OAC/ByF,EAAUrB,QAAO,SAAUX,GACnC,OAAKA,EAAShC,SAEPkG,EAAMmE,YAAYrI,EAAShC,QAAQoK,OAC9C,IAGYpG,EAAUrB,QAAO,SAAUX,GACnC,OAAQA,EAAShC,UAAYgC,EAAShC,QAAQoK,SAAWpI,EAAShC,QAAQoK,OAAO7L,MACrF,KAEMgI,SAAQ,SAAUvE,GACxB3F,EAAQ2F,EAASsI,YAAY,CAAEjO,MAAOA,EAAOM,IAAKA,EAAKoN,IAAKA,EAAKnB,KAAMnG,EAAoBzC,QAASkG,EAAMlG,SAC9G,IACO3D,CACX,EAEAqJ,2BAA2BxI,UAAU0J,WAAa,SAAU5J,GACxD,OAAO6C,KAAK8F,eAAe1D,IAAIjF,EACnC,EACA0I,2BAA2BxI,UAAUmM,iBAAmB,SAAUnH,EAAQE,GACtE,GAAKF,EAAL,CAEA,IAAImC,EAAO,yBAAuBjB,iBAAiBlB,EAAQE,GAC3D,OAAOiC,EAAOA,EAAK0E,mBAAgB5I,CAFf,CAGxB,EACAuF,2BAA2BxI,UAAUiL,QAAU,SAAUjG,EAAQlF,EAAQgJ,GACrE,IAAIE,EAAQrG,KAER0K,EAAW,yBAAuBlH,YAAYnB,GACjC,SAAbqI,IACAA,EAAW1K,KAAKG,QAAQuK,UAAY,aAExC,IAAIrC,EAAO,GASX,IARiB,cAAbqC,GAA4BvE,KAExBkC,EADAlL,aAAkB0E,IACXzC,MAAMkF,KAAKnH,EAAOkL,QAGlBpM,OAAOoM,KAAKlL,IAGvBgJ,EAEA,OAAOkC,EAMX,GAAIrI,KAAKG,QAAQyI,kBAAoB5I,KAAKG,QAAQwK,yBAA2BtI,EAAQ,CACjF,IAAIuI,EAAoB,yBAAuB7G,qBAAqB1B,EAAQrC,KAAK4C,oBAC7EiI,EAAqB,yBAAuB5G,sBAAsB5B,EAAQrC,KAAK4C,oBACnFyF,EAAO5C,cAAcA,cAAc,GAAImF,GAAmB,GAAOC,GAAoB,EACzF,CACA,IAAK7K,KAAKG,QAAQyI,kBAAoBvG,EAAQ,CAEtCuI,EAAoB,yBAAuB7G,qBAAqB1B,EAAQrC,KAAK4C,oBAC7E5C,KAAK4C,qBAAuB,qBAAmBhC,iBAC/CgK,EAAoBA,EAAkB5G,KAAI,SAAUlH,GAChD,IAAI+L,EAAiB,yBAAuB1F,mBAAmBd,EAAQvF,GACvE,OAAI+L,GAAkBA,EAAe1I,SAAW0I,EAAe1I,QAAQrE,KAC5D+M,EAAe1I,QAAQrE,KAE3BgB,CACX,KAGAuL,EADArI,KAAKG,QAAQwK,wBACNC,EAGAvC,EAAKrD,OAAO4F,GAGvB,IAAIE,EAAuB,yBAAuB7G,sBAAsB5B,EAAQrC,KAAK4C,oBACjFkI,EAAqBpM,OAAS,IAC9B2J,EAAOA,EAAKvF,QAAO,SAAUhG,GACzB,OAAQgO,EAAqBC,SAASjO,EAC1C,UAGyBwD,IAAzBN,KAAKG,QAAQgK,UACb9B,EAAOA,EAAKvF,QAAO,SAAUhG,GACzB,IAAI+L,EAAiB,yBAAuB1F,mBAAmBd,EAAQvF,GACvE,OAAK+L,IAAmBA,EAAe1I,SAEhCkG,EAAM+D,aAAavB,EAAe1I,QAAQkK,MAAOxB,EAAe1I,QAAQmK,MACnF,KAIAjC,EADArI,KAAKG,QAAQoK,QAAUvK,KAAKG,QAAQoK,OAAO7L,OACpC2J,EAAKvF,QAAO,SAAUhG,GACzB,IAAI+L,EAAiB,yBAAuB1F,mBAAmBd,EAAQvF,GACvE,OAAK+L,IAAmBA,EAAe1I,SAEhCkG,EAAMmE,YAAY3B,EAAe1I,QAAQoK,OACpD,IAGOlC,EAAKvF,QAAO,SAAUhG,GACzB,IAAI+L,EAAiB,yBAAuB1F,mBAAmBd,EAAQvF,GACvE,QAAS+L,GACJA,EAAe1I,SACf0I,EAAe1I,QAAQoK,QACvB1B,EAAe1I,QAAQoK,OAAO7L,OACvC,GAER,CAaA,OAXIsB,KAAKG,QAAQ6K,iBAAmBhL,KAAKG,QAAQ6K,gBAAgBtM,SAC7D2J,EAAOA,EAAKvF,QAAO,SAAUhG,GACzB,OAAOuJ,EAAMlG,QAAQ6K,gBAAgBC,OAAM,SAAUC,GACjD,OAAOpO,EAAIqO,OAAO,EAAGD,EAAOxM,UAAYwM,CAC5C,GACJ,KAGJ7C,EAAOA,EAAKvF,QAAO,SAAUhG,EAAK8J,EAAOwE,GACrC,OAAOA,EAAK7L,QAAQzC,KAAS8J,CACjC,GAEJ,EACAf,2BAA2BxI,UAAU+M,aAAe,SAAUC,EAAOC,GACjE,IAAIe,GAAW,EAKf,OAJIA,GAAYhB,IACZgB,EAAWrL,KAAKG,QAAQgK,SAAWE,GACnCgB,GAAYf,IACZe,EAAWrL,KAAKG,QAAQgK,QAAUG,GAC/Be,CACX,EACAxF,2BAA2BxI,UAAUmN,YAAc,SAAUD,GACzD,OAAKA,GAEEvK,KAAKG,QAAQoK,OAAOe,MAAK,SAAUC,GAAe,OAAOhB,EAAOQ,SAASQ,EAAc,GAClG,EACO1F,0BACX,CA7d+C,E,mMCnB/C,sDAGO,IAAI2F,EAAiB,CACxB1E,qBAAqB,EACrBuC,0BAA0B,EAC1BsB,yBAAyB,EACzBK,qBAAiB1K,EACjByJ,qBAAqB,EACrBF,mBAAmB,EACnBU,YAAQjK,EACRsI,kBAAkB,EAClB8B,cAAUpK,EACV6I,gBAAY7I,EACZ6J,aAAS7J,E,uGCdb,iHAQO,SAASmL,QAAQtL,GAQpB,YAPgB,IAAZA,IAAsBA,EAAU,CAAC,GAO9B,SAAUhD,EAAQoF,GACrB,yBAAuBG,mBAAmB,CACtCL,OAAQlF,aAAkB2L,SAAW3L,EAASA,EAAOqI,YACrDjD,aAAcA,EACdpC,QAASA,GAEjB,CACJ,C,sGCvBA,+GAQO,SAASuL,OAAOvL,GAQnB,YAPgB,IAAZA,IAAsBA,EAAU,CAAC,GAO9B,SAAUhD,EAAQoF,GACrB,yBAAuBE,kBAAkB,CACrCJ,OAAQlF,aAAkB2L,SAAW3L,EAASA,EAAOqI,YACrDjD,aAAcA,EACdpC,QAASA,GAEjB,CACJ,C,2FCvBA,kjC,8HCAA,kKAMO,SAASwL,4BAA4BC,GACxC,OAAO,SAAUvJ,EAAQwJ,EAAapC,GAClC,IAAIqC,EAAmB,IAAI,mBACvBC,EAAiBtC,EAAWjN,MAChCiN,EAAWjN,MAAQ,WAEf,IADA,IAAIwP,EAAO,GACFtH,EAAK,EAAGA,EAAK5E,UAAUpB,OAAQgG,IACpCsH,EAAKtH,GAAM5E,UAAU4E,GAEzB,IAAIuH,EAASF,EAAehM,MAAMC,KAAMgM,GACpCE,IAAcD,IAA6B,iBAAXA,GAAyC,mBAAXA,IAAiD,mBAAhBA,EAAO9D,KAC1G,OAAO+D,EACDD,EAAO9D,MAAK,SAAUC,GAAQ,OAAO0D,EAAiB/K,mBAAmBqH,EAAMwD,EAAS,IACxFE,EAAiB/K,mBAAmBkL,EAAQL,EACtD,CACJ,CACJ,C,2HCtBA,4JAMO,SAASO,yBAAyBP,GACrC,OAAO,SAAUvJ,EAAQwJ,EAAapC,GAClC,IAAIqC,EAAmB,IAAI,mBACvBC,EAAiBtC,EAAWjN,MAChCiN,EAAWjN,MAAQ,WAEf,IADA,IAAIwP,EAAO,GACFtH,EAAK,EAAGA,EAAK5E,UAAUpB,OAAQgG,IACpCsH,EAAKtH,GAAM5E,UAAU4E,GAEzB,IAAIuH,EAASF,EAAehM,MAAMC,KAAMgM,GACpCE,IAAcD,IAA6B,iBAAXA,GAAyC,mBAAXA,IAAiD,mBAAhBA,EAAO9D,KAC1G,OAAO+D,EACDD,EAAO9D,MAAK,SAAUC,GAAQ,OAAO0D,EAAiB5L,gBAAgBkI,EAAMwD,EAAS,IACrFE,EAAiB5L,gBAAgB+L,EAAQL,EACnD,CACJ,CACJ,C,2HCtBA,4JAMO,SAASQ,yBAAyBC,EAAWT,GAChD,OAAO,SAAUvJ,EAAQwJ,EAAapC,GAClC,IAAIqC,EAAmB,IAAI,mBACvBC,EAAiBtC,EAAWjN,MAChCiN,EAAWjN,MAAQ,WAEf,IADA,IAAIwP,EAAO,GACFtH,EAAK,EAAGA,EAAK5E,UAAUpB,OAAQgG,IACpCsH,EAAKtH,GAAM5E,UAAU4E,GAEzB,IAAIuH,EAASF,EAAehM,MAAMC,KAAMgM,GACpCE,IAAcD,IAA6B,iBAAXA,GAAyC,mBAAXA,IAAiD,mBAAhBA,EAAO9D,KAC1G,OAAO+D,EACDD,EAAO9D,MAAK,SAAUC,GAAQ,OAAO0D,EAAiBrL,gBAAgB4L,EAAWjE,EAAMwD,EAAS,IAChGE,EAAiBrL,gBAAgB4L,EAAWJ,EAAQL,EAC9D,CACJ,CACJ,C,yGCtBA,qHAMO,SAASU,UAAU7B,EAAatK,GAEnC,YADgB,IAAZA,IAAsBA,EAAU,CAAC,GAC9B,SAAUkC,EAAQE,GACrB,yBAAuBC,qBAAqB,CACxCH,OAAQA,EAAOmD,YACfjD,aAAcA,EACdkI,YAAaA,EACbtK,QAASA,GAEjB,CACJ,C,oGChBA,2GAOO,SAASoM,KAAKhF,EAAcpH,GAE/B,YADgB,IAAZA,IAAsBA,EAAU,CAAC,GAC9B,SAAUkC,EAAQE,GACrB,IAAI2G,EAAgBI,QAAQzF,YAAY,cAAexB,EAAQE,GAC/D,yBAAuBL,gBAAgB,CACnCG,OAAQA,EAAOmD,YACfjD,aAAcA,EACd2G,cAAeA,EACf3B,aAAcA,EACdpH,QAASA,GAEjB,CACJ,C,sFCnBA,+J,yGCAO,IAAIqM,EAAX,0DACA,SAAWA,GACPA,EAAmBA,EAAmC,eAAI,GAAK,iBAC/DA,EAAmBA,EAAmC,eAAI,GAAK,iBAC/DA,EAAmBA,EAAmC,eAAI,GAAK,gBAClE,CAJD,CAIGA,IAAuBA,EAAqB,CAAC,G,gFCLhD,sgDAKA,IAAIV,EAAmB,IAAI,mBACpB,SAASW,aAAatP,EAAQgD,GACjC,OAAO2L,EAAiB5L,gBAAgB/C,EAAQgD,EACpD,CACO,SAASD,gBAAgB/C,EAAQgD,GACpC,OAAO2L,EAAiB5L,gBAAgB/C,EAAQgD,EACpD,CACO,SAASI,sBAAsBpD,EAAQqD,EAAaL,GACvD,OAAO2L,EAAiBvL,sBAAsBpD,EAAQqD,EAAaL,EACvE,CACO,SAASuM,aAAahM,EAAKC,EAAOR,GACrC,OAAO2L,EAAiBrL,gBAAgBC,EAAKC,EAAOR,EACxD,CACO,SAASM,gBAAgBC,EAAKC,EAAOR,GACxC,OAAO2L,EAAiBrL,gBAAgBC,EAAKC,EAAOR,EACxD,CACO,SAASU,sBAAsBC,EAAWH,EAAOR,GACpD,OAAO2L,EAAiBjL,sBAAsBC,EAAWH,EAAOR,EACpE,CACO,SAASY,mBAAmB5D,EAAQgD,GACvC,OAAO2L,EAAiB/K,mBAAmB5D,EAAQgD,EACvD,CACO,SAASc,sBAAsB9D,EAAQ+D,EAAYf,GACtD,OAAO2L,EAAiB7K,sBAAsB9D,EAAQ+D,EAAYf,EACtE,CACO,SAASgB,UAAUhE,EAAQgD,GAC9B,OAAO2L,EAAiB3K,UAAUhE,EAAQgD,EAC9C,CASO,SAASmB,YAAYZ,EAAKa,EAAMpB,GACnC,OAAO2L,EAAiBxK,YAAYZ,EAAKa,EAAMpB,EACnD,CAUO,SAASuB,iBAAiBhB,EAAKa,EAAMpB,GACxC,OAAO2L,EAAiBpK,iBAAiBhB,EAAKa,EAAMpB,EACxD,C,4GCvDA,M,yHCAA,M,iICAA,M,gICAA,M,mICAA,M,+ICAA,M,8HCAA,M,2FCAA,6yC,yHCAA,M,wHCAA,M,4HCAA,M,2HCAA,M,sHCAA,M,0GCAA,M,iHCAA,M,kFCAA,kEAIWwM,EAAyB,IAJpC,8DAIwC,gB,gGCJxC,mBAMO,SAASC,YACZ,MAA0B,oBAAfC,WACAA,gBAEW,IAAXC,EACAA,EAIW,oBAAX3R,OAGAA,OAIS,oBAATiQ,KAGAA,UAHX,CAKJ,CA3BA,iD,gJCAA,kQ,gGCAO,SAASc,UAAU3O,GACtB,OAAa,OAANA,GAA2B,iBAANA,GAAoC,mBAAXA,EAAE4K,IAC3D,CAFA,wD,iECuBA,IAOI4E,EAPAC,EAAuB,iBAAZ1D,QAAuBA,QAAU,KAC5C2D,EAAeD,GAAwB,mBAAZA,EAAEjN,MAC7BiN,EAAEjN,MACF,SAASkN,aAAa5K,EAAQ6K,EAAUlB,GACxC,OAAOlD,SAASzL,UAAU0C,MAAMrE,KAAK2G,EAAQ6K,EAAUlB,EACzD,EAIAe,EADEC,GAA0B,mBAAdA,EAAEG,QACCH,EAAEG,QACVlR,OAAOmR,sBACC,SAASL,eAAe1K,GACvC,OAAOpG,OAAOoR,oBAAoBhL,GAC/B2C,OAAO/I,OAAOmR,sBAAsB/K,GACzC,EAEiB,SAAS0K,eAAe1K,GACvC,OAAOpG,OAAOoR,oBAAoBhL,EACpC,EAOF,IAAIiL,EAAc3F,OAAO4F,OAAS,SAASD,YAAY9Q,GACrD,OAAOA,GAAUA,CACnB,EAEA,SAASgR,eACPA,aAAaC,KAAK/R,KAAKsE,KACzB,CACAhF,EAAOD,QAAUyS,aACjBxS,EAAOD,QAAQ2S,KAwYf,SAASA,KAAKC,EAAS7R,GACrB,OAAO,IAAIkM,SAAQ,SAAUC,EAASC,GACpC,SAAS0F,cAAcC,GACrBF,EAAQG,eAAehS,EAAMiS,UAC7B7F,EAAO2F,EACT,CAEA,SAASE,WAC+B,mBAA3BJ,EAAQG,gBACjBH,EAAQG,eAAe,QAASF,eAElC3F,EAAQ,GAAG9C,MAAMzJ,KAAKoE,WACxB,CAEAkO,+BAA+BL,EAAS7R,EAAMiS,SAAU,CAAEL,MAAM,IACnD,UAAT5R,GAMR,SAASmS,8BAA8BN,EAASO,EAASC,GAC7B,mBAAfR,EAAQS,IACjBJ,+BAA+BL,EAAS,QAASO,EAASC,EAE9D,CATMF,CAA8BN,EAASC,cAAe,CAAEF,MAAM,GAElE,GACF,EAxZAF,aAAaA,aAAeA,aAE5BA,aAAanQ,UAAUgR,aAAU/N,EACjCkN,aAAanQ,UAAUiR,aAAe,EACtCd,aAAanQ,UAAUkR,mBAAgBjO,EAIvC,IAAIkO,EAAsB,GAE1B,SAASC,cAAcC,GACrB,GAAwB,mBAAbA,EACT,MAAM,IAAIC,UAAU,0EAA4ED,EAEpG,CAoCA,SAASE,iBAAiBC,GACxB,YAA2BvO,IAAvBuO,EAAKN,cACAf,aAAagB,oBACfK,EAAKN,aACd,CAkDA,SAASO,aAAazM,EAAQ0G,EAAM2F,EAAUK,GAC5C,IAAIpT,EACAqT,EACAC,EAsBJ,GApBAR,cAAcC,QAGCpO,KADf0O,EAAS3M,EAAOgM,UAEdW,EAAS3M,EAAOgM,QAAUpS,OAAOY,OAAO,MACxCwF,EAAOiM,aAAe,SAIKhO,IAAvB0O,EAAOE,cACT7M,EAAO8M,KAAK,cAAepG,EACf2F,EAASA,SAAWA,EAASA,SAAWA,GAIpDM,EAAS3M,EAAOgM,SAElBY,EAAWD,EAAOjG,SAGHzI,IAAb2O,EAEFA,EAAWD,EAAOjG,GAAQ2F,IACxBrM,EAAOiM,kBAeT,GAbwB,mBAAbW,EAETA,EAAWD,EAAOjG,GAChBgG,EAAU,CAACL,EAAUO,GAAY,CAACA,EAAUP,GAErCK,EACTE,EAASG,QAAQV,GAEjBO,EAASlQ,KAAK2P,IAIhB/S,EAAIiT,iBAAiBvM,IACb,GAAK4M,EAASvQ,OAAS/C,IAAMsT,EAASI,OAAQ,CACpDJ,EAASI,QAAS,EAGlB,IAAIC,EAAI,IAAIhQ,MAAM,+CACE2P,EAASvQ,OAAS,IAAMgJ,OAAOqB,GADjC,qEAIlBuG,EAAExT,KAAO,8BACTwT,EAAE3B,QAAUtL,EACZiN,EAAEvG,KAAOA,EACTuG,EAAEC,MAAQN,EAASvQ,OA7KzB,SAAS8Q,mBAAmBC,GACtBC,SAAWA,QAAQC,MAAMD,QAAQC,KAAKF,EAC5C,CA4KMD,CAAmBF,EACrB,CAGF,OAAOjN,CACT,CAaA,SAASuN,cACP,IAAK5P,KAAK6P,MAGR,OAFA7P,KAAKqC,OAAOyL,eAAe9N,KAAK+I,KAAM/I,KAAK8P,QAC3C9P,KAAK6P,OAAQ,EACY,IAArB/P,UAAUpB,OACLsB,KAAK0O,SAAShT,KAAKsE,KAAKqC,QAC1BrC,KAAK0O,SAAS3O,MAAMC,KAAKqC,OAAQvC,UAE5C,CAEA,SAASiQ,UAAU1N,EAAQ0G,EAAM2F,GAC/B,IAAIsB,EAAQ,CAAEH,OAAO,EAAOC,YAAQxP,EAAW+B,OAAQA,EAAQ0G,KAAMA,EAAM2F,SAAUA,GACjFuB,EAAUL,YAAY7S,KAAKiT,GAG/B,OAFAC,EAAQvB,SAAWA,EACnBsB,EAAMF,OAASG,EACRA,CACT,CAyHA,SAASC,WAAW7N,EAAQ0G,EAAMoH,GAChC,IAAInB,EAAS3M,EAAOgM,QAEpB,QAAe/N,IAAX0O,EACF,MAAO,GAET,IAAIoB,EAAapB,EAAOjG,GACxB,YAAmBzI,IAAf8P,EACK,GAEiB,mBAAfA,EACFD,EAAS,CAACC,EAAW1B,UAAY0B,GAAc,CAACA,GAElDD,EAsDT,SAASE,gBAAgBpS,GAEvB,IADA,IAAIqS,EAAM,IAAIlR,MAAMnB,EAAIS,QACfnD,EAAI,EAAGA,EAAI+U,EAAI5R,SAAUnD,EAChC+U,EAAI/U,GAAK0C,EAAI1C,GAAGmT,UAAYzQ,EAAI1C,GAElC,OAAO+U,CACT,CA3DID,CAAgBD,GAAcG,WAAWH,EAAYA,EAAW1R,OACpE,CAmBA,SAAS8R,cAAczH,GACrB,IAAIiG,EAAShP,KAAKqO,QAElB,QAAe/N,IAAX0O,EAAsB,CACxB,IAAIoB,EAAapB,EAAOjG,GAExB,GAA0B,mBAAfqH,EACT,OAAO,EACF,QAAmB9P,IAAf8P,EACT,OAAOA,EAAW1R,MAEtB,CAEA,OAAO,CACT,CAMA,SAAS6R,WAAWtS,EAAKjB,GAEvB,IADA,IAAIyT,EAAO,IAAIrR,MAAMpC,GACZzB,EAAI,EAAGA,EAAIyB,IAAKzB,EACvBkV,EAAKlV,GAAK0C,EAAI1C,GAChB,OAAOkV,CACT,CA2CA,SAASzC,+BAA+BL,EAAS7R,EAAM4S,EAAUP,GAC/D,GAA0B,mBAAfR,EAAQS,GACbD,EAAMT,KACRC,EAAQD,KAAK5R,EAAM4S,GAEnBf,EAAQS,GAAGtS,EAAM4S,OAEd,IAAwC,mBAA7Bf,EAAQ+C,iBAYxB,MAAM,IAAI/B,UAAU,6EAA+EhB,GATnGA,EAAQ+C,iBAAiB5U,GAAM,SAAS6U,aAAaC,GAG/CzC,EAAMT,MACRC,EAAQkD,oBAAoB/U,EAAM6U,cAEpCjC,EAASkC,EACX,GAGF,CACF,CAraA3U,OAAOC,eAAesR,aAAc,sBAAuB,CACzDrR,YAAY,EACZC,IAAK,WACH,OAAOoS,CACT,EACAlM,IAAK,SAASsO,GACZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAKtD,EAAYsD,GACpD,MAAM,IAAIE,WAAW,kGAAoGF,EAAM,KAEjIpC,EAAsBoC,CACxB,IAGFpD,aAAaC,KAAO,gBAEGnN,IAAjBN,KAAKqO,SACLrO,KAAKqO,UAAYpS,OAAOsJ,eAAevF,MAAMqO,UAC/CrO,KAAKqO,QAAUpS,OAAOY,OAAO,MAC7BmD,KAAKsO,aAAe,GAGtBtO,KAAKuO,cAAgBvO,KAAKuO,oBAAiBjO,CAC7C,EAIAkN,aAAanQ,UAAU0T,gBAAkB,SAASA,gBAAgB/T,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAKsQ,EAAYtQ,GAChD,MAAM,IAAI8T,WAAW,gFAAkF9T,EAAI,KAG7G,OADAgD,KAAKuO,cAAgBvR,EACdgD,IACT,EAQAwN,aAAanQ,UAAU2T,gBAAkB,SAASA,kBAChD,OAAOpC,iBAAiB5O,KAC1B,EAEAwN,aAAanQ,UAAU8R,KAAO,SAASA,KAAKpG,GAE1C,IADA,IAAIiD,EAAO,GACFzQ,EAAI,EAAGA,EAAIuE,UAAUpB,OAAQnD,IAAKyQ,EAAKjN,KAAKe,UAAUvE,IAC/D,IAAI0V,EAAoB,UAATlI,EAEXiG,EAAShP,KAAKqO,QAClB,QAAe/N,IAAX0O,EACFiC,EAAWA,QAA4B3Q,IAAjB0O,EAAOkC,WAC1B,IAAKD,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIE,EAGJ,GAFInF,EAAKtN,OAAS,IAChByS,EAAKnF,EAAK,IACRmF,aAAc7R,MAGhB,MAAM6R,EAGR,IAAItD,EAAM,IAAIvO,MAAM,oBAAsB6R,EAAK,KAAOA,EAAGC,QAAU,IAAM,KAEzE,MADAvD,EAAIwD,QAAUF,EACRtD,CACR,CAEA,IAAIK,EAAUc,EAAOjG,GAErB,QAAgBzI,IAAZ4N,EACF,OAAO,EAET,GAAuB,mBAAZA,EACTjB,EAAaiB,EAASlO,KAAMgM,OAE5B,KAAI3N,EAAM6P,EAAQxP,OACd4S,EAAYf,WAAWrC,EAAS7P,GACpC,IAAS9C,EAAI,EAAGA,EAAI8C,IAAO9C,EACzB0R,EAAaqE,EAAU/V,GAAIyE,KAAMgM,EAHX,CAM1B,OAAO,CACT,EAgEAwB,aAAanQ,UAAUkU,YAAc,SAASA,YAAYxI,EAAM2F,GAC9D,OAAOI,aAAa9O,KAAM+I,EAAM2F,GAAU,EAC5C,EAEAlB,aAAanQ,UAAU+Q,GAAKZ,aAAanQ,UAAUkU,YAEnD/D,aAAanQ,UAAUmU,gBACnB,SAASA,gBAAgBzI,EAAM2F,GAC7B,OAAOI,aAAa9O,KAAM+I,EAAM2F,GAAU,EAC5C,EAoBJlB,aAAanQ,UAAUqQ,KAAO,SAASA,KAAK3E,EAAM2F,GAGhD,OAFAD,cAAcC,GACd1O,KAAKoO,GAAGrF,EAAMgH,UAAU/P,KAAM+I,EAAM2F,IAC7B1O,IACT,EAEAwN,aAAanQ,UAAUoU,oBACnB,SAASA,oBAAoB1I,EAAM2F,GAGjC,OAFAD,cAAcC,GACd1O,KAAKwR,gBAAgBzI,EAAMgH,UAAU/P,KAAM+I,EAAM2F,IAC1C1O,IACT,EAGJwN,aAAanQ,UAAUyQ,eACnB,SAASA,eAAe/E,EAAM2F,GAC5B,IAAIgD,EAAM1C,EAAQ2C,EAAUpW,EAAGqW,EAK/B,GAHAnD,cAAcC,QAGCpO,KADf0O,EAAShP,KAAKqO,SAEZ,OAAOrO,KAGT,QAAaM,KADboR,EAAO1C,EAAOjG,IAEZ,OAAO/I,KAET,GAAI0R,IAAShD,GAAYgD,EAAKhD,WAAaA,EACb,KAAtB1O,KAAKsO,aACTtO,KAAKqO,QAAUpS,OAAOY,OAAO,cAEtBmS,EAAOjG,GACViG,EAAOlB,gBACT9N,KAAKmP,KAAK,iBAAkBpG,EAAM2I,EAAKhD,UAAYA,SAElD,GAAoB,mBAATgD,EAAqB,CAGrC,IAFAC,GAAY,EAEPpW,EAAImW,EAAKhT,OAAS,EAAGnD,GAAK,EAAGA,IAChC,GAAImW,EAAKnW,KAAOmT,GAAYgD,EAAKnW,GAAGmT,WAAaA,EAAU,CACzDkD,EAAmBF,EAAKnW,GAAGmT,SAC3BiD,EAAWpW,EACX,KACF,CAGF,GAAIoW,EAAW,EACb,OAAO3R,KAEQ,IAAb2R,EACFD,EAAKG,QAiIf,SAASC,UAAUJ,EAAM9K,GACvB,KAAOA,EAAQ,EAAI8K,EAAKhT,OAAQkI,IAC9B8K,EAAK9K,GAAS8K,EAAK9K,EAAQ,GAC7B8K,EAAKK,KACP,CAnIUD,CAAUJ,EAAMC,GAGE,IAAhBD,EAAKhT,SACPsQ,EAAOjG,GAAQ2I,EAAK,SAEQpR,IAA1B0O,EAAOlB,gBACT9N,KAAKmP,KAAK,iBAAkBpG,EAAM6I,GAAoBlD,EAC1D,CAEA,OAAO1O,IACT,EAEJwN,aAAanQ,UAAU2U,IAAMxE,aAAanQ,UAAUyQ,eAEpDN,aAAanQ,UAAU4U,mBACnB,SAASA,mBAAmBlJ,GAC1B,IAAIuI,EAAWtC,EAAQzT,EAGvB,QAAe+E,KADf0O,EAAShP,KAAKqO,SAEZ,OAAOrO,KAGT,QAA8BM,IAA1B0O,EAAOlB,eAUT,OATyB,IAArBhO,UAAUpB,QACZsB,KAAKqO,QAAUpS,OAAOY,OAAO,MAC7BmD,KAAKsO,aAAe,QACMhO,IAAjB0O,EAAOjG,KACY,KAAtB/I,KAAKsO,aACTtO,KAAKqO,QAAUpS,OAAOY,OAAO,aAEtBmS,EAAOjG,IAEX/I,KAIT,GAAyB,IAArBF,UAAUpB,OAAc,CAC1B,IACI5B,EADAuL,EAAOpM,OAAOoM,KAAK2G,GAEvB,IAAKzT,EAAI,EAAGA,EAAI8M,EAAK3J,SAAUnD,EAEjB,oBADZuB,EAAMuL,EAAK9M,KAEXyE,KAAKiS,mBAAmBnV,GAK1B,OAHAkD,KAAKiS,mBAAmB,kBACxBjS,KAAKqO,QAAUpS,OAAOY,OAAO,MAC7BmD,KAAKsO,aAAe,EACbtO,IACT,CAIA,GAAyB,mBAFzBsR,EAAYtC,EAAOjG,IAGjB/I,KAAK8N,eAAe/E,EAAMuI,QACrB,QAAkBhR,IAAdgR,EAET,IAAK/V,EAAI+V,EAAU5S,OAAS,EAAGnD,GAAK,EAAGA,IACrCyE,KAAK8N,eAAe/E,EAAMuI,EAAU/V,IAIxC,OAAOyE,IACT,EAmBJwN,aAAanQ,UAAUiU,UAAY,SAASA,UAAUvI,GACpD,OAAOmH,WAAWlQ,KAAM+I,GAAM,EAChC,EAEAyE,aAAanQ,UAAU6U,aAAe,SAASA,aAAanJ,GAC1D,OAAOmH,WAAWlQ,KAAM+I,GAAM,EAChC,EAEAyE,aAAagD,cAAgB,SAAS7C,EAAS5E,GAC7C,MAAqC,mBAA1B4E,EAAQ6C,cACV7C,EAAQ6C,cAAczH,GAEtByH,cAAc9U,KAAKiS,EAAS5E,EAEvC,EAEAyE,aAAanQ,UAAUmT,cAAgBA,cAiBvChD,aAAanQ,UAAU8U,WAAa,SAASA,aAC3C,OAAOnS,KAAKsO,aAAe,EAAIvB,EAAe/M,KAAKqO,SAAW,EAChE,C,kDCxaAtT,EAAQqX,KAAO,SAAUC,EAAQC,EAAQC,EAAMC,EAAMC,GACnD,IAAIC,EAAG/W,EACHgX,EAAiB,EAATF,EAAcD,EAAO,EAC7BI,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACTvX,EAAIgX,EAAQE,EAAS,EAAK,EAC1B5W,EAAI0W,GAAQ,EAAI,EAChB/U,EAAI6U,EAAOC,EAAS/W,GAOxB,IALAA,GAAKM,EAEL6W,EAAIlV,GAAM,IAAOsV,GAAU,EAC3BtV,KAAQsV,EACRA,GAASH,EACFG,EAAQ,EAAGJ,EAAS,IAAJA,EAAWL,EAAOC,EAAS/W,GAAIA,GAAKM,EAAGiX,GAAS,GAKvE,IAHAnX,EAAI+W,GAAM,IAAOI,GAAU,EAC3BJ,KAAQI,EACRA,GAASN,EACFM,EAAQ,EAAGnX,EAAS,IAAJA,EAAW0W,EAAOC,EAAS/W,GAAIA,GAAKM,EAAGiX,GAAS,GAEvE,GAAU,IAANJ,EACFA,EAAI,EAAIG,MACH,IAAIH,IAAME,EACf,OAAOjX,EAAIoX,IAAsBC,KAAdxV,GAAK,EAAI,GAE5B7B,GAAQsX,KAAKC,IAAI,EAAGV,GACpBE,GAAQG,CACV,CACA,OAAQrV,GAAK,EAAI,GAAK7B,EAAIsX,KAAKC,IAAI,EAAGR,EAAIF,EAC5C,EAEAzX,EAAQoY,MAAQ,SAAUd,EAAQ7V,EAAO8V,EAAQC,EAAMC,EAAMC,GAC3D,IAAIC,EAAG/W,EAAGC,EACN+W,EAAiB,EAATF,EAAcD,EAAO,EAC7BI,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBQ,EAAe,KAATZ,EAAcS,KAAKC,IAAI,GAAI,IAAMD,KAAKC,IAAI,GAAI,IAAM,EAC1D3X,EAAIgX,EAAO,EAAKE,EAAS,EACzB5W,EAAI0W,EAAO,GAAK,EAChB/U,EAAIhB,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQyW,KAAKI,IAAI7W,GAEb+Q,MAAM/Q,IAAUA,IAAUwW,KAC5BrX,EAAI4R,MAAM/Q,GAAS,EAAI,EACvBkW,EAAIE,IAEJF,EAAIO,KAAKK,MAAML,KAAKM,IAAI/W,GAASyW,KAAKO,KAClChX,GAASZ,EAAIqX,KAAKC,IAAI,GAAIR,IAAM,IAClCA,IACA9W,GAAK,IAGLY,GADEkW,EAAIG,GAAS,EACNO,EAAKxX,EAELwX,EAAKH,KAAKC,IAAI,EAAG,EAAIL,IAEpBjX,GAAK,IACf8W,IACA9W,GAAK,GAGH8W,EAAIG,GAASD,GACfjX,EAAI,EACJ+W,EAAIE,GACKF,EAAIG,GAAS,GACtBlX,GAAMa,EAAQZ,EAAK,GAAKqX,KAAKC,IAAI,EAAGV,GACpCE,GAAQG,IAERlX,EAAIa,EAAQyW,KAAKC,IAAI,EAAGL,EAAQ,GAAKI,KAAKC,IAAI,EAAGV,GACjDE,EAAI,IAIDF,GAAQ,EAAGH,EAAOC,EAAS/W,GAAS,IAAJI,EAAUJ,GAAKM,EAAGF,GAAK,IAAK6W,GAAQ,GAI3E,IAFAE,EAAKA,GAAKF,EAAQ7W,EAClBgX,GAAQH,EACDG,EAAO,EAAGN,EAAOC,EAAS/W,GAAS,IAAJmX,EAAUnX,GAAKM,EAAG6W,GAAK,IAAKC,GAAQ,GAE1EN,EAAOC,EAAS/W,EAAIM,IAAU,IAAJ2B,CAC5B,C,kDCpFA,IAAIiW,EAAW,CAAC,EAAEA,SAElBzY,EAAOD,QAAUqE,MAAMkH,SAAW,SAAUrI,GAC1C,MAA6B,kBAAtBwV,EAAS/X,KAAKuC,EACvB,C,gGCJA,YAUA,IAAIyV,EAAS,EAAQ,qCACjBC,EAAU,EAAQ,mCAClBrN,EAAU,EAAQ,mCAmDtB,SAASsN,aACP,OAAO7L,OAAO8L,oBACV,WACA,UACN,CAEA,SAASC,aAAcjF,EAAMnQ,GAC3B,GAAIkV,aAAelV,EACjB,MAAM,IAAIoS,WAAW,8BAcvB,OAZI/I,OAAO8L,qBAEThF,EAAO,IAAI1P,WAAWT,IACjBqV,UAAYhM,OAAO1K,WAGX,OAATwR,IACFA,EAAO,IAAI9G,OAAOrJ,IAEpBmQ,EAAKnQ,OAASA,GAGTmQ,CACT,CAYA,SAAS9G,OAAQ6I,EAAKoD,EAAkBtV,GACtC,KAAKqJ,OAAO8L,qBAAyB7T,gBAAgB+H,QACnD,OAAO,IAAIA,OAAO6I,EAAKoD,EAAkBtV,GAI3C,GAAmB,iBAARkS,EAAkB,CAC3B,GAAgC,iBAArBoD,EACT,MAAM,IAAI1U,MACR,qEAGJ,OAAO2U,YAAYjU,KAAM4Q,EAC3B,CACA,OAAOtM,KAAKtE,KAAM4Q,EAAKoD,EAAkBtV,EAC3C,CAUA,SAAS4F,KAAMuK,EAAMrS,EAAOwX,EAAkBtV,GAC5C,GAAqB,iBAAVlC,EACT,MAAM,IAAImS,UAAU,yCAGtB,MAA2B,oBAAhBuF,aAA+B1X,aAAiB0X,YA6H7D,SAASC,gBAAiBtF,EAAMpI,EAAO2N,EAAY1V,GAGjD,GAFA+H,EAAMhJ,WAEF2W,EAAa,GAAK3N,EAAMhJ,WAAa2W,EACvC,MAAM,IAAItD,WAAW,6BAGvB,GAAIrK,EAAMhJ,WAAa2W,GAAc1V,GAAU,GAC7C,MAAM,IAAIoS,WAAW,6BAIrBrK,OADiBnG,IAAf8T,QAAuC9T,IAAX5B,EACtB,IAAIS,WAAWsH,QACHnG,IAAX5B,EACD,IAAIS,WAAWsH,EAAO2N,GAEtB,IAAIjV,WAAWsH,EAAO2N,EAAY1V,GAGxCqJ,OAAO8L,qBAEThF,EAAOpI,GACFsN,UAAYhM,OAAO1K,UAGxBwR,EAAOwF,cAAcxF,EAAMpI,GAE7B,OAAOoI,CACT,CAxJWsF,CAAgBtF,EAAMrS,EAAOwX,EAAkBtV,GAGnC,iBAAVlC,EAwFb,SAAS8X,WAAYzF,EAAM0F,EAAQC,GACT,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAKzM,OAAO0M,WAAWD,GACrB,MAAM,IAAI7F,UAAU,8CAGtB,IAAIjQ,EAAwC,EAA/BjB,WAAW8W,EAAQC,GAChC3F,EAAOiF,aAAajF,EAAMnQ,GAE1B,IAAIgW,EAAS7F,EAAKsE,MAAMoB,EAAQC,GAE5BE,IAAWhW,IAIbmQ,EAAOA,EAAK1J,MAAM,EAAGuP,IAGvB,OAAO7F,CACT,CA7GWyF,CAAWzF,EAAMrS,EAAOwX,GAsJnC,SAAS9S,WAAY2N,EAAM3E,GACzB,GAAInC,OAAO4M,SAASzK,GAAM,CACxB,IAAI7L,EAA4B,EAAtBuW,QAAQ1K,EAAIxL,QAGtB,OAAoB,KAFpBmQ,EAAOiF,aAAajF,EAAMxQ,IAEjBK,QAITwL,EAAIuG,KAAK5B,EAAM,EAAG,EAAGxQ,GAHZwQ,CAKX,CAEA,GAAI3E,EAAK,CACP,GAA4B,oBAAhBgK,aACRhK,EAAImI,kBAAkB6B,aAAgB,WAAYhK,EACpD,MAA0B,iBAAfA,EAAIxL,QA+8CrB,SAASmW,MAAOC,GACd,OAAOA,GAAQA,CACjB,CAj9C4CD,CAAM3K,EAAIxL,QACvCoV,aAAajF,EAAM,GAErBwF,cAAcxF,EAAM3E,GAG7B,GAAiB,WAAbA,EAAInB,MAAqBzC,EAAQ4D,EAAI9B,MACvC,OAAOiM,cAAcxF,EAAM3E,EAAI9B,KAEnC,CAEA,MAAM,IAAIuG,UAAU,qFACtB,CA/KSzN,CAAW2N,EAAMrS,EAC1B,CA2BA,SAASuY,WAAYC,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAIrG,UAAU,oCACf,GAAIqG,EAAO,EAChB,MAAM,IAAIlE,WAAW,uCAEzB,CA0BA,SAASmD,YAAapF,EAAMmG,GAG1B,GAFAD,WAAWC,GACXnG,EAAOiF,aAAajF,EAAMmG,EAAO,EAAI,EAAoB,EAAhBJ,QAAQI,KAC5CjN,OAAO8L,oBACV,IAAK,IAAItY,EAAI,EAAGA,EAAIyZ,IAAQzZ,EAC1BsT,EAAKtT,GAAK,EAGd,OAAOsT,CACT,CAuCA,SAASwF,cAAexF,EAAMpI,GAC5B,IAAI/H,EAAS+H,EAAM/H,OAAS,EAAI,EAA4B,EAAxBkW,QAAQnO,EAAM/H,QAClDmQ,EAAOiF,aAAajF,EAAMnQ,GAC1B,IAAK,IAAInD,EAAI,EAAGA,EAAImD,EAAQnD,GAAK,EAC/BsT,EAAKtT,GAAgB,IAAXkL,EAAMlL,GAElB,OAAOsT,CACT,CA8DA,SAAS+F,QAASlW,GAGhB,GAAIA,GAAUkV,aACZ,MAAM,IAAI9C,WAAW,0DACa8C,aAAaH,SAAS,IAAM,UAEhE,OAAgB,EAAT/U,CACT,CAqFA,SAASjB,WAAY8W,EAAQC,GAC3B,GAAIzM,OAAO4M,SAASJ,GAClB,OAAOA,EAAO7V,OAEhB,GAA2B,oBAAhBwV,aAA6D,mBAAvBA,YAAYe,SACxDf,YAAYe,OAAOV,IAAWA,aAAkBL,aACnD,OAAOK,EAAO9W,WAEM,iBAAX8W,IACTA,EAAS,GAAKA,GAGhB,IAAIlW,EAAMkW,EAAO7V,OACjB,GAAY,IAARL,EAAW,OAAO,EAItB,IADA,IAAI6W,GAAc,IAEhB,OAAQV,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOnW,EACT,IAAK,OACL,IAAK,QACL,UAAKiC,EACH,OAAO6U,YAAYZ,GAAQ7V,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAANL,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAO+W,cAAcb,GAAQ7V,OAC/B,QACE,GAAIwW,EAAa,OAAOC,YAAYZ,GAAQ7V,OAC5C8V,GAAY,GAAKA,GAAUa,cAC3BH,GAAc,EAGtB,CAGA,SAASI,aAAcd,EAAUhV,EAAOC,GACtC,IAAIyV,GAAc,EAclB,SALc5U,IAAVd,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQQ,KAAKtB,OACf,MAAO,GAOT,SAJY4B,IAARb,GAAqBA,EAAMO,KAAKtB,UAClCe,EAAMO,KAAKtB,QAGTe,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTD,KAAW,GAGT,MAAO,GAKT,IAFKgV,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOe,SAASvV,KAAMR,EAAOC,GAE/B,IAAK,OACL,IAAK,QACH,OAAO+V,UAAUxV,KAAMR,EAAOC,GAEhC,IAAK,QACH,OAAOgW,WAAWzV,KAAMR,EAAOC,GAEjC,IAAK,SACL,IAAK,SACH,OAAOiW,YAAY1V,KAAMR,EAAOC,GAElC,IAAK,SACH,OAAOkW,YAAY3V,KAAMR,EAAOC,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOmW,aAAa5V,KAAMR,EAAOC,GAEnC,QACE,GAAIyV,EAAa,MAAM,IAAIvG,UAAU,qBAAuB6F,GAC5DA,GAAYA,EAAW,IAAIa,cAC3BH,GAAc,EAGtB,CAMA,SAASW,KAAMC,EAAG9Y,EAAGrB,GACnB,IAAIJ,EAAIua,EAAE9Y,GACV8Y,EAAE9Y,GAAK8Y,EAAEna,GACTma,EAAEna,GAAKJ,CACT,CAkIA,SAASwa,qBAAsB1D,EAAQyC,EAAKV,EAAYI,EAAUwB,GAEhE,GAAsB,IAAlB3D,EAAO3T,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAf0V,GACTI,EAAWJ,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAEhBA,GAAcA,EACV7G,MAAM6G,KAERA,EAAa4B,EAAM,EAAK3D,EAAO3T,OAAS,GAItC0V,EAAa,IAAGA,EAAa/B,EAAO3T,OAAS0V,GAC7CA,GAAc/B,EAAO3T,OAAQ,CAC/B,GAAIsX,EAAK,OAAQ,EACZ5B,EAAa/B,EAAO3T,OAAS,CACpC,MAAO,GAAI0V,EAAa,EAAG,CACzB,IAAI4B,EACC,OAAQ,EADJ5B,EAAa,CAExB,CAQA,GALmB,iBAARU,IACTA,EAAM/M,OAAOzD,KAAKwQ,EAAKN,IAIrBzM,OAAO4M,SAASG,GAElB,OAAmB,IAAfA,EAAIpW,QACE,EAEHuX,aAAa5D,EAAQyC,EAAKV,EAAYI,EAAUwB,GAClD,GAAmB,iBAARlB,EAEhB,OADAA,GAAY,IACR/M,OAAO8L,qBACiC,mBAAjC1U,WAAW9B,UAAUkC,QAC1ByW,EACK7W,WAAW9B,UAAUkC,QAAQ7D,KAAK2W,EAAQyC,EAAKV,GAE/CjV,WAAW9B,UAAU6Y,YAAYxa,KAAK2W,EAAQyC,EAAKV,GAGvD6B,aAAa5D,EAAQ,CAAEyC,GAAOV,EAAYI,EAAUwB,GAG7D,MAAM,IAAIrH,UAAU,uCACtB,CAEA,SAASsH,aAAchY,EAAK6W,EAAKV,EAAYI,EAAUwB,GACrD,IA0BIza,EA1BA4a,EAAY,EACZC,EAAYnY,EAAIS,OAChB2X,EAAYvB,EAAIpW,OAEpB,QAAiB4B,IAAbkU,IAEe,UADjBA,EAAW9M,OAAO8M,GAAUa,gBACY,UAAbb,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAIvW,EAAIS,OAAS,GAAKoW,EAAIpW,OAAS,EACjC,OAAQ,EAEVyX,EAAY,EACZC,GAAa,EACbC,GAAa,EACbjC,GAAc,CAChB,CAGF,SAAShC,KAAMkE,EAAK/a,GAClB,OAAkB,IAAd4a,EACKG,EAAI/a,GAEJ+a,EAAIC,aAAahb,EAAI4a,EAEhC,CAGA,GAAIH,EAAK,CACP,IAAIQ,GAAc,EAClB,IAAKjb,EAAI6Y,EAAY7Y,EAAI6a,EAAW7a,IAClC,GAAI6W,KAAKnU,EAAK1C,KAAO6W,KAAK0C,GAAqB,IAAhB0B,EAAoB,EAAIjb,EAAIib,IAEzD,IADoB,IAAhBA,IAAmBA,EAAajb,GAChCA,EAAIib,EAAa,IAAMH,EAAW,OAAOG,EAAaL,OAEtC,IAAhBK,IAAmBjb,GAAKA,EAAIib,GAChCA,GAAc,CAGpB,MAEE,IADIpC,EAAaiC,EAAYD,IAAWhC,EAAagC,EAAYC,GAC5D9a,EAAI6Y,EAAY7Y,GAAK,EAAGA,IAAK,CAEhC,IADA,IAAIkb,GAAQ,EACHC,EAAI,EAAGA,EAAIL,EAAWK,IAC7B,GAAItE,KAAKnU,EAAK1C,EAAImb,KAAOtE,KAAK0C,EAAK4B,GAAI,CACrCD,GAAQ,EACR,KACF,CAEF,GAAIA,EAAO,OAAOlb,CACpB,CAGF,OAAQ,CACV,CAcA,SAASob,SAAUL,EAAK/B,EAAQjC,EAAQ5T,GACtC4T,EAAS3K,OAAO2K,IAAW,EAC3B,IAAIsE,EAAYN,EAAI5X,OAAS4T,EACxB5T,GAGHA,EAASiJ,OAAOjJ,IACHkY,IACXlY,EAASkY,GAJXlY,EAASkY,EASX,IAAIC,EAAStC,EAAO7V,OACpB,GAAImY,EAAS,GAAM,EAAG,MAAM,IAAIlI,UAAU,sBAEtCjQ,EAASmY,EAAS,IACpBnY,EAASmY,EAAS,GAEpB,IAAK,IAAItb,EAAI,EAAGA,EAAImD,IAAUnD,EAAG,CAC/B,IAAIub,EAASC,SAASxC,EAAOpJ,OAAW,EAAJ5P,EAAO,GAAI,IAC/C,GAAIgS,MAAMuJ,GAAS,OAAOvb,EAC1B+a,EAAIhE,EAAS/W,GAAKub,CACpB,CACA,OAAOvb,CACT,CAEA,SAASyb,UAAWV,EAAK/B,EAAQjC,EAAQ5T,GACvC,OAAOuY,WAAW9B,YAAYZ,EAAQ+B,EAAI5X,OAAS4T,GAASgE,EAAKhE,EAAQ5T,EAC3E,CAEA,SAASwY,WAAYZ,EAAK/B,EAAQjC,EAAQ5T,GACxC,OAAOuY,WAq6BT,SAASE,aAAcC,GAErB,IADA,IAAIC,EAAY,GACP9b,EAAI,EAAGA,EAAI6b,EAAI1Y,SAAUnD,EAEhC8b,EAAUtY,KAAyB,IAApBqY,EAAI7Y,WAAWhD,IAEhC,OAAO8b,CACT,CA56BoBF,CAAa5C,GAAS+B,EAAKhE,EAAQ5T,EACvD,CAEA,SAAS4Y,YAAahB,EAAK/B,EAAQjC,EAAQ5T,GACzC,OAAOwY,WAAWZ,EAAK/B,EAAQjC,EAAQ5T,EACzC,CAEA,SAAS6Y,YAAajB,EAAK/B,EAAQjC,EAAQ5T,GACzC,OAAOuY,WAAW7B,cAAcb,GAAS+B,EAAKhE,EAAQ5T,EACxD,CAEA,SAAS8Y,UAAWlB,EAAK/B,EAAQjC,EAAQ5T,GACvC,OAAOuY,WAk6BT,SAASQ,eAAgBL,EAAKM,GAG5B,IAFA,IAAI9b,EAAG+b,EAAIC,EACPP,EAAY,GACP9b,EAAI,EAAGA,EAAI6b,EAAI1Y,WACjBgZ,GAAS,GAAK,KADanc,EAIhCoc,GADA/b,EAAIwb,EAAI7Y,WAAWhD,KACT,EACVqc,EAAKhc,EAAI,IACTyb,EAAUtY,KAAK6Y,GACfP,EAAUtY,KAAK4Y,GAGjB,OAAON,CACT,CAh7BoBI,CAAelD,EAAQ+B,EAAI5X,OAAS4T,GAASgE,EAAKhE,EAAQ5T,EAC9E,CAiFA,SAASiX,YAAaW,EAAK9W,EAAOC,GAChC,OAAc,IAAVD,GAAeC,IAAQ6W,EAAI5X,OACtBgV,EAAOlV,cAAc8X,GAErB5C,EAAOlV,cAAc8X,EAAInR,MAAM3F,EAAOC,GAEjD,CAEA,SAAS+V,UAAWc,EAAK9W,EAAOC,GAC9BA,EAAMwT,KAAK4E,IAAIvB,EAAI5X,OAAQe,GAI3B,IAHA,IAAIqY,EAAM,GAENvc,EAAIiE,EACDjE,EAAIkE,GAAK,CACd,IAQMsY,EAAYC,EAAWC,EAAYC,EARrCC,EAAY7B,EAAI/a,GAChB6c,EAAY,KACZC,EAAoBF,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EACpBA,EAAY,IAAQ,EACrB,EAEJ,GAAI5c,EAAI8c,GAAoB5Y,EAG1B,OAAQ4Y,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EAEyB,MAAV,KADlBJ,EAAazB,EAAI/a,EAAI,OAEnB2c,GAA6B,GAAZC,IAAqB,EAAoB,GAAbJ,GACzB,MAClBK,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAazB,EAAI/a,EAAI,GACrByc,EAAY1B,EAAI/a,EAAI,GACQ,MAAV,IAAbwc,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZC,IAAoB,IAAoB,GAAbJ,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEE,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAazB,EAAI/a,EAAI,GACrByc,EAAY1B,EAAI/a,EAAI,GACpB0c,EAAa3B,EAAI/a,EAAI,GACO,MAAV,IAAbwc,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZC,IAAoB,IAAqB,GAAbJ,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CE,EAAYF,GAMJ,OAAdE,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbN,EAAI/Y,KAAKqZ,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvBN,EAAI/Y,KAAKqZ,GACT7c,GAAK8c,CACP,CAEA,OAQF,SAASC,sBAAuBC,GAC9B,IAAIla,EAAMka,EAAW7Z,OACrB,GAAIL,GAAOma,EACT,OAAO9Q,OAAO+Q,aAAa1Y,MAAM2H,OAAQ6Q,GAI3C,IAAIT,EAAM,GACNvc,EAAI,EACR,KAAOA,EAAI8C,GACTyZ,GAAOpQ,OAAO+Q,aAAa1Y,MACzB2H,OACA6Q,EAAWpT,MAAM5J,EAAGA,GAAKid,IAG7B,OAAOV,CACT,CAxBSQ,CAAsBR,EAC/B,CA/8BA/c,EAAQgN,OAASA,OACjBhN,EAAQ2d,WAoTR,SAASA,WAAYha,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAOqJ,OAAO4Q,OAAOja,EACvB,EAxTA3D,EAAQ6d,kBAAoB,GA0B5B7Q,OAAO8L,yBAAqDvT,IAA/BwM,EAAO+G,oBAChC/G,EAAO+G,oBAQX,SAASgF,oBACP,IACE,IAAI5a,EAAM,IAAIkB,WAAW,GAEzB,OADAlB,EAAI8V,UAAY,CAACA,UAAW5U,WAAW9B,UAAWyb,IAAK,WAAc,OAAO,EAAG,GAC1D,KAAd7a,EAAI6a,OACiB,mBAAjB7a,EAAI8a,UACuB,IAAlC9a,EAAI8a,SAAS,EAAG,GAAGtb,UAGzB,CAFE,MAAOiV,GACP,OAAO,CACT,CACF,CAjBImG,GAKJ9d,EAAQ6Y,WAAaA,aAkErB7L,OAAOiR,SAAW,KAGlBjR,OAAOkR,SAAW,SAAUhb,GAE1B,OADAA,EAAI8V,UAAYhM,OAAO1K,UAChBY,CACT,EA0BA8J,OAAOzD,KAAO,SAAU9H,EAAOwX,EAAkBtV,GAC/C,OAAO4F,KAAK,KAAM9H,EAAOwX,EAAkBtV,EAC7C,EAEIqJ,OAAO8L,sBACT9L,OAAO1K,UAAU0W,UAAY5U,WAAW9B,UACxC0K,OAAOgM,UAAY5U,WACG,oBAAX7C,QAA0BA,OAAO4c,SACxCnR,OAAOzL,OAAO4c,WAAanR,QAE7B9L,OAAOC,eAAe6L,OAAQzL,OAAO4c,QAAS,CAC5C1c,MAAO,KACP2c,cAAc,KAiCpBpR,OAAO4Q,MAAQ,SAAU3D,EAAMoE,EAAM5E,GACnC,OArBF,SAASmE,MAAO9J,EAAMmG,EAAMoE,EAAM5E,GAEhC,OADAO,WAAWC,GACPA,GAAQ,EACHlB,aAAajF,EAAMmG,QAEf1U,IAAT8Y,EAIyB,iBAAb5E,EACVV,aAAajF,EAAMmG,GAAMoE,KAAKA,EAAM5E,GACpCV,aAAajF,EAAMmG,GAAMoE,KAAKA,GAE7BtF,aAAajF,EAAMmG,EAC5B,CAOS2D,CAAM,KAAM3D,EAAMoE,EAAM5E,EACjC,EAgBAzM,OAAOkM,YAAc,SAAUe,GAC7B,OAAOf,YAAY,KAAMe,EAC3B,EAIAjN,OAAOsR,gBAAkB,SAAUrE,GACjC,OAAOf,YAAY,KAAMe,EAC3B,EAgHAjN,OAAO4M,SAAW,SAASA,SAAUmB,GACnC,QAAe,MAALA,IAAaA,EAAEwD,UAC3B,EAEAvR,OAAOwR,QAAU,SAASA,QAASC,EAAG1D,GACpC,IAAK/N,OAAO4M,SAAS6E,KAAOzR,OAAO4M,SAASmB,GAC1C,MAAM,IAAInH,UAAU,6BAGtB,GAAI6K,IAAM1D,EAAG,OAAO,EAKpB,IAHA,IAAI2D,EAAID,EAAE9a,OACNgb,EAAI5D,EAAEpX,OAEDnD,EAAI,EAAG8C,EAAM4U,KAAK4E,IAAI4B,EAAGC,GAAIne,EAAI8C,IAAO9C,EAC/C,GAAIie,EAAEje,KAAOua,EAAEva,GAAI,CACjBke,EAAID,EAAEje,GACNme,EAAI5D,EAAEva,GACN,KACF,CAGF,OAAIke,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,CACT,EAEA1R,OAAO0M,WAAa,SAASA,WAAYD,GACvC,OAAQ9M,OAAO8M,GAAUa,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,EAEb,EAEAtN,OAAO/C,OAAS,SAASA,OAAQ0M,EAAMhT,GACrC,IAAK4H,EAAQoL,GACX,MAAM,IAAI/C,UAAU,+CAGtB,GAAoB,IAAhB+C,EAAKhT,OACP,OAAOqJ,OAAO4Q,MAAM,GAGtB,IAAIpd,EACJ,QAAe+E,IAAX5B,EAEF,IADAA,EAAS,EACJnD,EAAI,EAAGA,EAAImW,EAAKhT,SAAUnD,EAC7BmD,GAAUgT,EAAKnW,GAAGmD,OAItB,IAAI2T,EAAStK,OAAOkM,YAAYvV,GAC5Bib,EAAM,EACV,IAAKpe,EAAI,EAAGA,EAAImW,EAAKhT,SAAUnD,EAAG,CAChC,IAAI+a,EAAM5E,EAAKnW,GACf,IAAKwM,OAAO4M,SAAS2B,GACnB,MAAM,IAAI3H,UAAU,+CAEtB2H,EAAI7F,KAAK4B,EAAQsH,GACjBA,GAAOrD,EAAI5X,MACb,CACA,OAAO2T,CACT,EA6CAtK,OAAOtK,WAAaA,WA0EpBsK,OAAO1K,UAAUic,WAAY,EAQ7BvR,OAAO1K,UAAUuc,OAAS,SAASA,SACjC,IAAIvb,EAAM2B,KAAKtB,OACf,GAAIL,EAAM,GAAM,EACd,MAAM,IAAIyS,WAAW,6CAEvB,IAAK,IAAIvV,EAAI,EAAGA,EAAI8C,EAAK9C,GAAK,EAC5Bsa,KAAK7V,KAAMzE,EAAGA,EAAI,GAEpB,OAAOyE,IACT,EAEA+H,OAAO1K,UAAUwc,OAAS,SAASA,SACjC,IAAIxb,EAAM2B,KAAKtB,OACf,GAAIL,EAAM,GAAM,EACd,MAAM,IAAIyS,WAAW,6CAEvB,IAAK,IAAIvV,EAAI,EAAGA,EAAI8C,EAAK9C,GAAK,EAC5Bsa,KAAK7V,KAAMzE,EAAGA,EAAI,GAClBsa,KAAK7V,KAAMzE,EAAI,EAAGA,EAAI,GAExB,OAAOyE,IACT,EAEA+H,OAAO1K,UAAUyc,OAAS,SAASA,SACjC,IAAIzb,EAAM2B,KAAKtB,OACf,GAAIL,EAAM,GAAM,EACd,MAAM,IAAIyS,WAAW,6CAEvB,IAAK,IAAIvV,EAAI,EAAGA,EAAI8C,EAAK9C,GAAK,EAC5Bsa,KAAK7V,KAAMzE,EAAGA,EAAI,GAClBsa,KAAK7V,KAAMzE,EAAI,EAAGA,EAAI,GACtBsa,KAAK7V,KAAMzE,EAAI,EAAGA,EAAI,GACtBsa,KAAK7V,KAAMzE,EAAI,EAAGA,EAAI,GAExB,OAAOyE,IACT,EAEA+H,OAAO1K,UAAUoW,SAAW,SAASA,WACnC,IAAI/U,EAAuB,EAAdsB,KAAKtB,OAClB,OAAe,IAAXA,EAAqB,GACA,IAArBoB,UAAUpB,OAAqB8W,UAAUxV,KAAM,EAAGtB,GAC/C4W,aAAavV,MAAMC,KAAMF,UAClC,EAEAiI,OAAO1K,UAAU0c,OAAS,SAASA,OAAQjE,GACzC,IAAK/N,OAAO4M,SAASmB,GAAI,MAAM,IAAInH,UAAU,6BAC7C,OAAI3O,OAAS8V,GACsB,IAA5B/N,OAAOwR,QAAQvZ,KAAM8V,EAC9B,EAEA/N,OAAO1K,UAAU2c,QAAU,SAASA,UAClC,IAAI5C,EAAM,GACN6C,EAAMlf,EAAQ6d,kBAKlB,OAJI5Y,KAAKtB,OAAS,IAChB0Y,EAAMpX,KAAKyT,SAAS,MAAO,EAAGwG,GAAKC,MAAM,SAAShb,KAAK,KACnDc,KAAKtB,OAASub,IAAK7C,GAAO,UAEzB,WAAaA,EAAM,GAC5B,EAEArP,OAAO1K,UAAUkc,QAAU,SAASA,QAASlX,EAAQ7C,EAAOC,EAAK0a,EAAWC,GAC1E,IAAKrS,OAAO4M,SAAStS,GACnB,MAAM,IAAIsM,UAAU,6BAgBtB,QAbcrO,IAAVd,IACFA,EAAQ,QAEEc,IAARb,IACFA,EAAM4C,EAASA,EAAO3D,OAAS,QAEf4B,IAAd6Z,IACFA,EAAY,QAEE7Z,IAAZ8Z,IACFA,EAAUpa,KAAKtB,QAGbc,EAAQ,GAAKC,EAAM4C,EAAO3D,QAAUyb,EAAY,GAAKC,EAAUpa,KAAKtB,OACtE,MAAM,IAAIoS,WAAW,sBAGvB,GAAIqJ,GAAaC,GAAW5a,GAASC,EACnC,OAAO,EAET,GAAI0a,GAAaC,EACf,OAAQ,EAEV,GAAI5a,GAASC,EACX,OAAO,EAQT,GAAIO,OAASqC,EAAQ,OAAO,EAS5B,IAPA,IAAIoX,GAJJW,KAAa,IADbD,KAAe,GAMXT,GAPJja,KAAS,IADTD,KAAW,GASPnB,EAAM4U,KAAK4E,IAAI4B,EAAGC,GAElBW,EAAWra,KAAKmF,MAAMgV,EAAWC,GACjCE,EAAajY,EAAO8C,MAAM3F,EAAOC,GAE5BlE,EAAI,EAAGA,EAAI8C,IAAO9C,EACzB,GAAI8e,EAAS9e,KAAO+e,EAAW/e,GAAI,CACjCke,EAAIY,EAAS9e,GACbme,EAAIY,EAAW/e,GACf,KACF,CAGF,OAAIke,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,CACT,EA4HA1R,OAAO1K,UAAU0N,SAAW,SAASA,SAAU+J,EAAKV,EAAYI,GAC9D,OAAoD,IAA7CxU,KAAKT,QAAQuV,EAAKV,EAAYI,EACvC,EAEAzM,OAAO1K,UAAUkC,QAAU,SAASA,QAASuV,EAAKV,EAAYI,GAC5D,OAAOuB,qBAAqB/V,KAAM8U,EAAKV,EAAYI,GAAU,EAC/D,EAEAzM,OAAO1K,UAAU6Y,YAAc,SAASA,YAAapB,EAAKV,EAAYI,GACpE,OAAOuB,qBAAqB/V,KAAM8U,EAAKV,EAAYI,GAAU,EAC/D,EAiDAzM,OAAO1K,UAAU8V,MAAQ,SAASA,MAAOoB,EAAQjC,EAAQ5T,EAAQ8V,GAE/D,QAAelU,IAAXgS,EACFkC,EAAW,OACX9V,EAASsB,KAAKtB,OACd4T,EAAS,OAEJ,QAAehS,IAAX5B,GAA0C,iBAAX4T,EACxCkC,EAAWlC,EACX5T,EAASsB,KAAKtB,OACd4T,EAAS,MAEJ,KAAIiI,SAASjI,GAWlB,MAAM,IAAIhT,MACR,2EAXFgT,GAAkB,EACdiI,SAAS7b,IACXA,GAAkB,OACD4B,IAAbkU,IAAwBA,EAAW,UAEvCA,EAAW9V,EACXA,OAAS4B,EAOb,CAEA,IAAIsW,EAAY5W,KAAKtB,OAAS4T,EAG9B,SAFehS,IAAX5B,GAAwBA,EAASkY,KAAWlY,EAASkY,GAEpDrC,EAAO7V,OAAS,IAAMA,EAAS,GAAK4T,EAAS,IAAOA,EAAStS,KAAKtB,OACrE,MAAM,IAAIoS,WAAW,0CAGlB0D,IAAUA,EAAW,QAG1B,IADA,IAAIU,GAAc,IAEhB,OAAQV,GACN,IAAK,MACH,OAAOmC,SAAS3W,KAAMuU,EAAQjC,EAAQ5T,GAExC,IAAK,OACL,IAAK,QACH,OAAOsY,UAAUhX,KAAMuU,EAAQjC,EAAQ5T,GAEzC,IAAK,QACH,OAAOwY,WAAWlX,KAAMuU,EAAQjC,EAAQ5T,GAE1C,IAAK,SACL,IAAK,SACH,OAAO4Y,YAAYtX,KAAMuU,EAAQjC,EAAQ5T,GAE3C,IAAK,SAEH,OAAO6Y,YAAYvX,KAAMuU,EAAQjC,EAAQ5T,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO8Y,UAAUxX,KAAMuU,EAAQjC,EAAQ5T,GAEzC,QACE,GAAIwW,EAAa,MAAM,IAAIvG,UAAU,qBAAuB6F,GAC5DA,GAAY,GAAKA,GAAUa,cAC3BH,GAAc,EAGtB,EAEAnN,OAAO1K,UAAUmd,OAAS,SAASA,SACjC,MAAO,CACLzR,KAAM,SACNX,KAAMhJ,MAAM/B,UAAU8H,MAAMzJ,KAAKsE,KAAKya,MAAQza,KAAM,GAExD,EAsFA,IAAIwY,EAAuB,KAoB3B,SAAS/C,WAAYa,EAAK9W,EAAOC,GAC/B,IAAI6Q,EAAM,GACV7Q,EAAMwT,KAAK4E,IAAIvB,EAAI5X,OAAQe,GAE3B,IAAK,IAAIlE,EAAIiE,EAAOjE,EAAIkE,IAAOlE,EAC7B+U,GAAO5I,OAAO+Q,aAAsB,IAATnC,EAAI/a,IAEjC,OAAO+U,CACT,CAEA,SAASoF,YAAaY,EAAK9W,EAAOC,GAChC,IAAI6Q,EAAM,GACV7Q,EAAMwT,KAAK4E,IAAIvB,EAAI5X,OAAQe,GAE3B,IAAK,IAAIlE,EAAIiE,EAAOjE,EAAIkE,IAAOlE,EAC7B+U,GAAO5I,OAAO+Q,aAAanC,EAAI/a,IAEjC,OAAO+U,CACT,CAEA,SAASiF,SAAUe,EAAK9W,EAAOC,GAC7B,IAAIpB,EAAMiY,EAAI5X,SAETc,GAASA,EAAQ,KAAGA,EAAQ,KAC5BC,GAAOA,EAAM,GAAKA,EAAMpB,KAAKoB,EAAMpB,GAGxC,IADA,IAAIqc,EAAM,GACDnf,EAAIiE,EAAOjE,EAAIkE,IAAOlE,EAC7Bmf,GAAOC,MAAMrE,EAAI/a,IAEnB,OAAOmf,CACT,CAEA,SAAS9E,aAAcU,EAAK9W,EAAOC,GAGjC,IAFA,IAAImb,EAAQtE,EAAInR,MAAM3F,EAAOC,GACzBqY,EAAM,GACDvc,EAAI,EAAGA,EAAIqf,EAAMlc,OAAQnD,GAAK,EACrCuc,GAAOpQ,OAAO+Q,aAAamC,EAAMrf,GAAoB,IAAfqf,EAAMrf,EAAI,IAElD,OAAOuc,CACT,CAyCA,SAAS+C,YAAavI,EAAQwI,EAAKpc,GACjC,GAAK4T,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAIxB,WAAW,sBAC3D,GAAIwB,EAASwI,EAAMpc,EAAQ,MAAM,IAAIoS,WAAW,wCAClD,CA8JA,SAASiK,SAAUzE,EAAK9Z,EAAO8V,EAAQwI,EAAKb,EAAKpC,GAC/C,IAAK9P,OAAO4M,SAAS2B,GAAM,MAAM,IAAI3H,UAAU,+CAC/C,GAAInS,EAAQyd,GAAOzd,EAAQqb,EAAK,MAAM,IAAI/G,WAAW,qCACrD,GAAIwB,EAASwI,EAAMxE,EAAI5X,OAAQ,MAAM,IAAIoS,WAAW,qBACtD,CAiDA,SAASkK,kBAAmB1E,EAAK9Z,EAAO8V,EAAQ2I,GAC1Cze,EAAQ,IAAGA,EAAQ,MAASA,EAAQ,GACxC,IAAK,IAAIjB,EAAI,EAAGmb,EAAIzD,KAAK4E,IAAIvB,EAAI5X,OAAS4T,EAAQ,GAAI/W,EAAImb,IAAKnb,EAC7D+a,EAAIhE,EAAS/W,IAAMiB,EAAS,KAAS,GAAKye,EAAe1f,EAAI,EAAIA,MAClC,GAA5B0f,EAAe1f,EAAI,EAAIA,EAE9B,CA4BA,SAAS2f,kBAAmB5E,EAAK9Z,EAAO8V,EAAQ2I,GAC1Cze,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,IAAK,IAAIjB,EAAI,EAAGmb,EAAIzD,KAAK4E,IAAIvB,EAAI5X,OAAS4T,EAAQ,GAAI/W,EAAImb,IAAKnb,EAC7D+a,EAAIhE,EAAS/W,GAAMiB,IAAuC,GAA5Bye,EAAe1f,EAAI,EAAIA,GAAU,GAEnE,CAiJA,SAAS4f,aAAc7E,EAAK9Z,EAAO8V,EAAQwI,EAAKb,EAAKpC,GACnD,GAAIvF,EAASwI,EAAMxE,EAAI5X,OAAQ,MAAM,IAAIoS,WAAW,sBACpD,GAAIwB,EAAS,EAAG,MAAM,IAAIxB,WAAW,qBACvC,CAEA,SAASsK,WAAY9E,EAAK9Z,EAAO8V,EAAQ2I,EAAcI,GAKrD,OAJKA,GACHF,aAAa7E,EAAK9Z,EAAO8V,EAAQ,GAEnCqB,EAAQR,MAAMmD,EAAK9Z,EAAO8V,EAAQ2I,EAAc,GAAI,GAC7C3I,EAAS,CAClB,CAUA,SAASgJ,YAAahF,EAAK9Z,EAAO8V,EAAQ2I,EAAcI,GAKtD,OAJKA,GACHF,aAAa7E,EAAK9Z,EAAO8V,EAAQ,GAEnCqB,EAAQR,MAAMmD,EAAK9Z,EAAO8V,EAAQ2I,EAAc,GAAI,GAC7C3I,EAAS,CAClB,CAhdAvK,OAAO1K,UAAU8H,MAAQ,SAASA,MAAO3F,EAAOC,GAC9C,IAoBI8b,EApBAld,EAAM2B,KAAKtB,OAqBf,IApBAc,IAAUA,GAGE,GACVA,GAASnB,GACG,IAAGmB,EAAQ,GACdA,EAAQnB,IACjBmB,EAAQnB,IANVoB,OAAca,IAARb,EAAoBpB,IAAQoB,GASxB,GACRA,GAAOpB,GACG,IAAGoB,EAAM,GACVA,EAAMpB,IACfoB,EAAMpB,GAGJoB,EAAMD,IAAOC,EAAMD,GAGnBuI,OAAO8L,qBACT0H,EAASvb,KAAK+Y,SAASvZ,EAAOC,IACvBsU,UAAYhM,OAAO1K,cACrB,CACL,IAAIme,EAAW/b,EAAMD,EACrB+b,EAAS,IAAIxT,OAAOyT,OAAUlb,GAC9B,IAAK,IAAI/E,EAAI,EAAGA,EAAIigB,IAAYjgB,EAC9BggB,EAAOhgB,GAAKyE,KAAKzE,EAAIiE,EAEzB,CAEA,OAAO+b,CACT,EAUAxT,OAAO1K,UAAUoe,WAAa,SAASA,WAAYnJ,EAAQ7U,EAAY4d,GACrE/I,GAAkB,EAClB7U,GAA0B,EACrB4d,GAAUR,YAAYvI,EAAQ7U,EAAYuC,KAAKtB,QAKpD,IAHA,IAAIoW,EAAM9U,KAAKsS,GACXoJ,EAAM,EACNngB,EAAI,IACCA,EAAIkC,IAAeie,GAAO,MACjC5G,GAAO9U,KAAKsS,EAAS/W,GAAKmgB,EAG5B,OAAO5G,CACT,EAEA/M,OAAO1K,UAAUse,WAAa,SAASA,WAAYrJ,EAAQ7U,EAAY4d,GACrE/I,GAAkB,EAClB7U,GAA0B,EACrB4d,GACHR,YAAYvI,EAAQ7U,EAAYuC,KAAKtB,QAKvC,IAFA,IAAIoW,EAAM9U,KAAKsS,IAAW7U,GACtBie,EAAM,EACHje,EAAa,IAAMie,GAAO,MAC/B5G,GAAO9U,KAAKsS,IAAW7U,GAAcie,EAGvC,OAAO5G,CACT,EAEA/M,OAAO1K,UAAUue,UAAY,SAASA,UAAWtJ,EAAQ+I,GAEvD,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACpCsB,KAAKsS,EACd,EAEAvK,OAAO1K,UAAUwe,aAAe,SAASA,aAAcvJ,EAAQ+I,GAE7D,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACpCsB,KAAKsS,GAAWtS,KAAKsS,EAAS,IAAM,CAC7C,EAEAvK,OAAO1K,UAAUkZ,aAAe,SAASA,aAAcjE,EAAQ+I,GAE7D,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACnCsB,KAAKsS,IAAW,EAAKtS,KAAKsS,EAAS,EAC7C,EAEAvK,OAAO1K,UAAUye,aAAe,SAASA,aAAcxJ,EAAQ+I,GAG7D,OAFKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,SAElCsB,KAAKsS,GACTtS,KAAKsS,EAAS,IAAM,EACpBtS,KAAKsS,EAAS,IAAM,IACD,SAAnBtS,KAAKsS,EAAS,EACrB,EAEAvK,OAAO1K,UAAU0e,aAAe,SAASA,aAAczJ,EAAQ+I,GAG7D,OAFKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QAEpB,SAAfsB,KAAKsS,IACTtS,KAAKsS,EAAS,IAAM,GACrBtS,KAAKsS,EAAS,IAAM,EACrBtS,KAAKsS,EAAS,GAClB,EAEAvK,OAAO1K,UAAU2e,UAAY,SAASA,UAAW1J,EAAQ7U,EAAY4d,GACnE/I,GAAkB,EAClB7U,GAA0B,EACrB4d,GAAUR,YAAYvI,EAAQ7U,EAAYuC,KAAKtB,QAKpD,IAHA,IAAIoW,EAAM9U,KAAKsS,GACXoJ,EAAM,EACNngB,EAAI,IACCA,EAAIkC,IAAeie,GAAO,MACjC5G,GAAO9U,KAAKsS,EAAS/W,GAAKmgB,EAM5B,OAFI5G,IAFJ4G,GAAO,OAES5G,GAAO7B,KAAKC,IAAI,EAAG,EAAIzV,IAEhCqX,CACT,EAEA/M,OAAO1K,UAAU4e,UAAY,SAASA,UAAW3J,EAAQ7U,EAAY4d,GACnE/I,GAAkB,EAClB7U,GAA0B,EACrB4d,GAAUR,YAAYvI,EAAQ7U,EAAYuC,KAAKtB,QAKpD,IAHA,IAAInD,EAAIkC,EACJie,EAAM,EACN5G,EAAM9U,KAAKsS,IAAW/W,GACnBA,EAAI,IAAMmgB,GAAO,MACtB5G,GAAO9U,KAAKsS,IAAW/W,GAAKmgB,EAM9B,OAFI5G,IAFJ4G,GAAO,OAES5G,GAAO7B,KAAKC,IAAI,EAAG,EAAIzV,IAEhCqX,CACT,EAEA/M,OAAO1K,UAAU6e,SAAW,SAASA,SAAU5J,EAAQ+I,GAErD,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACtB,IAAfsB,KAAKsS,IAC0B,GAA5B,IAAOtS,KAAKsS,GAAU,GADKtS,KAAKsS,EAE3C,EAEAvK,OAAO1K,UAAU8e,YAAc,SAASA,YAAa7J,EAAQ+I,GACtDA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QAC3C,IAAIoW,EAAM9U,KAAKsS,GAAWtS,KAAKsS,EAAS,IAAM,EAC9C,OAAc,MAANwC,EAAsB,WAANA,EAAmBA,CAC7C,EAEA/M,OAAO1K,UAAU+e,YAAc,SAASA,YAAa9J,EAAQ+I,GACtDA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QAC3C,IAAIoW,EAAM9U,KAAKsS,EAAS,GAAMtS,KAAKsS,IAAW,EAC9C,OAAc,MAANwC,EAAsB,WAANA,EAAmBA,CAC7C,EAEA/M,OAAO1K,UAAUgf,YAAc,SAASA,YAAa/J,EAAQ+I,GAG3D,OAFKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QAEnCsB,KAAKsS,GACVtS,KAAKsS,EAAS,IAAM,EACpBtS,KAAKsS,EAAS,IAAM,GACpBtS,KAAKsS,EAAS,IAAM,EACzB,EAEAvK,OAAO1K,UAAUif,YAAc,SAASA,YAAahK,EAAQ+I,GAG3D,OAFKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QAEnCsB,KAAKsS,IAAW,GACrBtS,KAAKsS,EAAS,IAAM,GACpBtS,KAAKsS,EAAS,IAAM,EACpBtS,KAAKsS,EAAS,EACnB,EAEAvK,OAAO1K,UAAUkf,YAAc,SAASA,YAAajK,EAAQ+I,GAE3D,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACpCiV,EAAQvB,KAAKpS,KAAMsS,GAAQ,EAAM,GAAI,EAC9C,EAEAvK,OAAO1K,UAAUmf,YAAc,SAASA,YAAalK,EAAQ+I,GAE3D,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACpCiV,EAAQvB,KAAKpS,KAAMsS,GAAQ,EAAO,GAAI,EAC/C,EAEAvK,OAAO1K,UAAUof,aAAe,SAASA,aAAcnK,EAAQ+I,GAE7D,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACpCiV,EAAQvB,KAAKpS,KAAMsS,GAAQ,EAAM,GAAI,EAC9C,EAEAvK,OAAO1K,UAAUqf,aAAe,SAASA,aAAcpK,EAAQ+I,GAE7D,OADKA,GAAUR,YAAYvI,EAAQ,EAAGtS,KAAKtB,QACpCiV,EAAQvB,KAAKpS,KAAMsS,GAAQ,EAAO,GAAI,EAC/C,EAQAvK,OAAO1K,UAAUsf,YAAc,SAASA,YAAangB,EAAO8V,EAAQ7U,EAAY4d,IAC9E7e,GAASA,EACT8V,GAAkB,EAClB7U,GAA0B,EACrB4d,IAEHN,SAAS/a,KAAMxD,EAAO8V,EAAQ7U,EADfwV,KAAKC,IAAI,EAAG,EAAIzV,GAAc,EACO,GAGtD,IAAIie,EAAM,EACNngB,EAAI,EAER,IADAyE,KAAKsS,GAAkB,IAAR9V,IACNjB,EAAIkC,IAAeie,GAAO,MACjC1b,KAAKsS,EAAS/W,GAAMiB,EAAQkf,EAAO,IAGrC,OAAOpJ,EAAS7U,CAClB,EAEAsK,OAAO1K,UAAUuf,YAAc,SAASA,YAAapgB,EAAO8V,EAAQ7U,EAAY4d,IAC9E7e,GAASA,EACT8V,GAAkB,EAClB7U,GAA0B,EACrB4d,IAEHN,SAAS/a,KAAMxD,EAAO8V,EAAQ7U,EADfwV,KAAKC,IAAI,EAAG,EAAIzV,GAAc,EACO,GAGtD,IAAIlC,EAAIkC,EAAa,EACjBie,EAAM,EAEV,IADA1b,KAAKsS,EAAS/W,GAAa,IAARiB,IACVjB,GAAK,IAAMmgB,GAAO,MACzB1b,KAAKsS,EAAS/W,GAAMiB,EAAQkf,EAAO,IAGrC,OAAOpJ,EAAS7U,CAClB,EAEAsK,OAAO1K,UAAUwf,WAAa,SAASA,WAAYrgB,EAAO8V,EAAQ+I,GAMhE,OALA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,IAAM,GACjDvK,OAAO8L,sBAAqBrX,EAAQyW,KAAKK,MAAM9W,IACpDwD,KAAKsS,GAAmB,IAAR9V,EACT8V,EAAS,CAClB,EAUAvK,OAAO1K,UAAUyf,cAAgB,SAASA,cAAetgB,EAAO8V,EAAQ+I,GAUtE,OATA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,MAAQ,GACpDvK,OAAO8L,qBACT7T,KAAKsS,GAAmB,IAAR9V,EAChBwD,KAAKsS,EAAS,GAAM9V,IAAU,GAE9Bwe,kBAAkBhb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAEAvK,OAAO1K,UAAU0f,cAAgB,SAASA,cAAevgB,EAAO8V,EAAQ+I,GAUtE,OATA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,MAAQ,GACpDvK,OAAO8L,qBACT7T,KAAKsS,GAAW9V,IAAU,EAC1BwD,KAAKsS,EAAS,GAAc,IAAR9V,GAEpBwe,kBAAkBhb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EASAvK,OAAO1K,UAAU2f,cAAgB,SAASA,cAAexgB,EAAO8V,EAAQ+I,GAYtE,OAXA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,WAAY,GACxDvK,OAAO8L,qBACT7T,KAAKsS,EAAS,GAAM9V,IAAU,GAC9BwD,KAAKsS,EAAS,GAAM9V,IAAU,GAC9BwD,KAAKsS,EAAS,GAAM9V,IAAU,EAC9BwD,KAAKsS,GAAmB,IAAR9V,GAEhB0e,kBAAkBlb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAEAvK,OAAO1K,UAAU4f,cAAgB,SAASA,cAAezgB,EAAO8V,EAAQ+I,GAYtE,OAXA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,WAAY,GACxDvK,OAAO8L,qBACT7T,KAAKsS,GAAW9V,IAAU,GAC1BwD,KAAKsS,EAAS,GAAM9V,IAAU,GAC9BwD,KAAKsS,EAAS,GAAM9V,IAAU,EAC9BwD,KAAKsS,EAAS,GAAc,IAAR9V,GAEpB0e,kBAAkBlb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAEAvK,OAAO1K,UAAU6f,WAAa,SAASA,WAAY1gB,EAAO8V,EAAQ7U,EAAY4d,GAG5E,GAFA7e,GAASA,EACT8V,GAAkB,GACb+I,EAAU,CACb,IAAI8B,EAAQlK,KAAKC,IAAI,EAAG,EAAIzV,EAAa,GAEzCsd,SAAS/a,KAAMxD,EAAO8V,EAAQ7U,EAAY0f,EAAQ,GAAIA,EACxD,CAEA,IAAI5hB,EAAI,EACJmgB,EAAM,EACN0B,EAAM,EAEV,IADApd,KAAKsS,GAAkB,IAAR9V,IACNjB,EAAIkC,IAAeie,GAAO,MAC7Blf,EAAQ,GAAa,IAAR4gB,GAAsC,IAAzBpd,KAAKsS,EAAS/W,EAAI,KAC9C6hB,EAAM,GAERpd,KAAKsS,EAAS/W,IAAOiB,EAAQkf,GAAQ,GAAK0B,EAAM,IAGlD,OAAO9K,EAAS7U,CAClB,EAEAsK,OAAO1K,UAAUggB,WAAa,SAASA,WAAY7gB,EAAO8V,EAAQ7U,EAAY4d,GAG5E,GAFA7e,GAASA,EACT8V,GAAkB,GACb+I,EAAU,CACb,IAAI8B,EAAQlK,KAAKC,IAAI,EAAG,EAAIzV,EAAa,GAEzCsd,SAAS/a,KAAMxD,EAAO8V,EAAQ7U,EAAY0f,EAAQ,GAAIA,EACxD,CAEA,IAAI5hB,EAAIkC,EAAa,EACjBie,EAAM,EACN0B,EAAM,EAEV,IADApd,KAAKsS,EAAS/W,GAAa,IAARiB,IACVjB,GAAK,IAAMmgB,GAAO,MACrBlf,EAAQ,GAAa,IAAR4gB,GAAsC,IAAzBpd,KAAKsS,EAAS/W,EAAI,KAC9C6hB,EAAM,GAERpd,KAAKsS,EAAS/W,IAAOiB,EAAQkf,GAAQ,GAAK0B,EAAM,IAGlD,OAAO9K,EAAS7U,CAClB,EAEAsK,OAAO1K,UAAUigB,UAAY,SAASA,UAAW9gB,EAAO8V,EAAQ+I,GAO9D,OANA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,KAAO,KAClDvK,OAAO8L,sBAAqBrX,EAAQyW,KAAKK,MAAM9W,IAChDA,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtCwD,KAAKsS,GAAmB,IAAR9V,EACT8V,EAAS,CAClB,EAEAvK,OAAO1K,UAAUkgB,aAAe,SAASA,aAAc/gB,EAAO8V,EAAQ+I,GAUpE,OATA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,OAAS,OACrDvK,OAAO8L,qBACT7T,KAAKsS,GAAmB,IAAR9V,EAChBwD,KAAKsS,EAAS,GAAM9V,IAAU,GAE9Bwe,kBAAkBhb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAEAvK,OAAO1K,UAAUmgB,aAAe,SAASA,aAAchhB,EAAO8V,EAAQ+I,GAUpE,OATA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,OAAS,OACrDvK,OAAO8L,qBACT7T,KAAKsS,GAAW9V,IAAU,EAC1BwD,KAAKsS,EAAS,GAAc,IAAR9V,GAEpBwe,kBAAkBhb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAEAvK,OAAO1K,UAAUogB,aAAe,SAASA,aAAcjhB,EAAO8V,EAAQ+I,GAYpE,OAXA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,YAAa,YACzDvK,OAAO8L,qBACT7T,KAAKsS,GAAmB,IAAR9V,EAChBwD,KAAKsS,EAAS,GAAM9V,IAAU,EAC9BwD,KAAKsS,EAAS,GAAM9V,IAAU,GAC9BwD,KAAKsS,EAAS,GAAM9V,IAAU,IAE9B0e,kBAAkBlb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAEAvK,OAAO1K,UAAUqgB,aAAe,SAASA,aAAclhB,EAAO8V,EAAQ+I,GAapE,OAZA7e,GAASA,EACT8V,GAAkB,EACb+I,GAAUN,SAAS/a,KAAMxD,EAAO8V,EAAQ,EAAG,YAAa,YACzD9V,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GACxCuL,OAAO8L,qBACT7T,KAAKsS,GAAW9V,IAAU,GAC1BwD,KAAKsS,EAAS,GAAM9V,IAAU,GAC9BwD,KAAKsS,EAAS,GAAM9V,IAAU,EAC9BwD,KAAKsS,EAAS,GAAc,IAAR9V,GAEpB0e,kBAAkBlb,KAAMxD,EAAO8V,GAAQ,GAElCA,EAAS,CAClB,EAeAvK,OAAO1K,UAAUsgB,aAAe,SAASA,aAAcnhB,EAAO8V,EAAQ+I,GACpE,OAAOD,WAAWpb,KAAMxD,EAAO8V,GAAQ,EAAM+I,EAC/C,EAEAtT,OAAO1K,UAAUugB,aAAe,SAASA,aAAcphB,EAAO8V,EAAQ+I,GACpE,OAAOD,WAAWpb,KAAMxD,EAAO8V,GAAQ,EAAO+I,EAChD,EAUAtT,OAAO1K,UAAUwgB,cAAgB,SAASA,cAAerhB,EAAO8V,EAAQ+I,GACtE,OAAOC,YAAYtb,KAAMxD,EAAO8V,GAAQ,EAAM+I,EAChD,EAEAtT,OAAO1K,UAAUygB,cAAgB,SAASA,cAAethB,EAAO8V,EAAQ+I,GACtE,OAAOC,YAAYtb,KAAMxD,EAAO8V,GAAQ,EAAO+I,EACjD,EAGAtT,OAAO1K,UAAUoT,KAAO,SAASA,KAAMpO,EAAQ0b,EAAave,EAAOC,GAQjE,GAPKD,IAAOA,EAAQ,GACfC,GAAe,IAARA,IAAWA,EAAMO,KAAKtB,QAC9Bqf,GAAe1b,EAAO3D,SAAQqf,EAAc1b,EAAO3D,QAClDqf,IAAaA,EAAc,GAC5Bte,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,EAAO,OAAO,EAC1B,GAAsB,IAAlB6C,EAAO3D,QAAgC,IAAhBsB,KAAKtB,OAAc,OAAO,EAGrD,GAAIqf,EAAc,EAChB,MAAM,IAAIjN,WAAW,6BAEvB,GAAItR,EAAQ,GAAKA,GAASQ,KAAKtB,OAAQ,MAAM,IAAIoS,WAAW,6BAC5D,GAAIrR,EAAM,EAAG,MAAM,IAAIqR,WAAW,2BAG9BrR,EAAMO,KAAKtB,SAAQe,EAAMO,KAAKtB,QAC9B2D,EAAO3D,OAASqf,EAActe,EAAMD,IACtCC,EAAM4C,EAAO3D,OAASqf,EAAcve,GAGtC,IACIjE,EADA8C,EAAMoB,EAAMD,EAGhB,GAAIQ,OAASqC,GAAU7C,EAAQue,GAAeA,EAActe,EAE1D,IAAKlE,EAAI8C,EAAM,EAAG9C,GAAK,IAAKA,EAC1B8G,EAAO9G,EAAIwiB,GAAe/d,KAAKzE,EAAIiE,QAEhC,GAAInB,EAAM,MAAS0J,OAAO8L,oBAE/B,IAAKtY,EAAI,EAAGA,EAAI8C,IAAO9C,EACrB8G,EAAO9G,EAAIwiB,GAAe/d,KAAKzE,EAAIiE,QAGrCL,WAAW9B,UAAUiF,IAAI5G,KACvB2G,EACArC,KAAK+Y,SAASvZ,EAAOA,EAAQnB,GAC7B0f,GAIJ,OAAO1f,CACT,EAMA0J,OAAO1K,UAAU+b,KAAO,SAASA,KAAMtE,EAAKtV,EAAOC,EAAK+U,GAEtD,GAAmB,iBAARM,EAAkB,CAS3B,GARqB,iBAAVtV,GACTgV,EAAWhV,EACXA,EAAQ,EACRC,EAAMO,KAAKtB,QACa,iBAARe,IAChB+U,EAAW/U,EACXA,EAAMO,KAAKtB,QAEM,IAAfoW,EAAIpW,OAAc,CACpB,IAAIW,EAAOyV,EAAIvW,WAAW,GACtBc,EAAO,MACTyV,EAAMzV,EAEV,CACA,QAAiBiB,IAAbkU,GAA8C,iBAAbA,EACnC,MAAM,IAAI7F,UAAU,6BAEtB,GAAwB,iBAAb6F,IAA0BzM,OAAO0M,WAAWD,GACrD,MAAM,IAAI7F,UAAU,qBAAuB6F,EAE/C,KAA0B,iBAARM,IAChBA,GAAY,KAId,GAAItV,EAAQ,GAAKQ,KAAKtB,OAASc,GAASQ,KAAKtB,OAASe,EACpD,MAAM,IAAIqR,WAAW,sBAGvB,GAAIrR,GAAOD,EACT,OAAOQ,KAQT,IAAIzE,EACJ,GANAiE,KAAkB,EAClBC,OAAca,IAARb,EAAoBO,KAAKtB,OAASe,IAAQ,EAE3CqV,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAKvZ,EAAIiE,EAAOjE,EAAIkE,IAAOlE,EACzByE,KAAKzE,GAAKuZ,MAEP,CACL,IAAI8F,EAAQ7S,OAAO4M,SAASG,GACxBA,EACAK,YAAY,IAAIpN,OAAO+M,EAAKN,GAAUf,YACtCpV,EAAMuc,EAAMlc,OAChB,IAAKnD,EAAI,EAAGA,EAAIkE,EAAMD,IAASjE,EAC7ByE,KAAKzE,EAAIiE,GAASob,EAAMrf,EAAI8C,EAEhC,CAEA,OAAO2B,IACT,EAKA,IAAIge,EAAoB,qBAmBxB,SAASrD,MAAO3d,GACd,OAAIA,EAAI,GAAW,IAAMA,EAAEyW,SAAS,IAC7BzW,EAAEyW,SAAS,GACpB,CAEA,SAAS0B,YAAaZ,EAAQmD,GAE5B,IAAIU,EADJV,EAAQA,GAAS1E,IAMjB,IAJA,IAAItU,EAAS6V,EAAO7V,OAChBuf,EAAgB,KAChBrD,EAAQ,GAEHrf,EAAI,EAAGA,EAAImD,IAAUnD,EAAG,CAI/B,IAHA6c,EAAY7D,EAAOhW,WAAWhD,IAGd,OAAU6c,EAAY,MAAQ,CAE5C,IAAK6F,EAAe,CAElB,GAAI7F,EAAY,MAAQ,EAEjBV,GAAS,IAAM,GAAGkD,EAAM7b,KAAK,IAAM,IAAM,KAC9C,QACF,CAAO,GAAIxD,EAAI,IAAMmD,EAAQ,EAEtBgZ,GAAS,IAAM,GAAGkD,EAAM7b,KAAK,IAAM,IAAM,KAC9C,QACF,CAGAkf,EAAgB7F,EAEhB,QACF,CAGA,GAAIA,EAAY,MAAQ,EACjBV,GAAS,IAAM,GAAGkD,EAAM7b,KAAK,IAAM,IAAM,KAC9Ckf,EAAgB7F,EAChB,QACF,CAGAA,EAAkE,OAArD6F,EAAgB,OAAU,GAAK7F,EAAY,MAC1D,MAAW6F,IAEJvG,GAAS,IAAM,GAAGkD,EAAM7b,KAAK,IAAM,IAAM,KAMhD,GAHAkf,EAAgB,KAGZ7F,EAAY,IAAM,CACpB,IAAKV,GAAS,GAAK,EAAG,MACtBkD,EAAM7b,KAAKqZ,EACb,MAAO,GAAIA,EAAY,KAAO,CAC5B,IAAKV,GAAS,GAAK,EAAG,MACtBkD,EAAM7b,KACJqZ,GAAa,EAAM,IACP,GAAZA,EAAmB,IAEvB,MAAO,GAAIA,EAAY,MAAS,CAC9B,IAAKV,GAAS,GAAK,EAAG,MACtBkD,EAAM7b,KACJqZ,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,IAEvB,KAAO,MAAIA,EAAY,SASrB,MAAM,IAAI9Y,MAAM,sBARhB,IAAKoY,GAAS,GAAK,EAAG,MACtBkD,EAAM7b,KACJqZ,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,IAIvB,CACF,CAEA,OAAOwC,CACT,CA2BA,SAASxF,cAAegC,GACtB,OAAO1D,EAAO3V,YAhIhB,SAASmgB,YAAa9G,GAIpB,IAFAA,EAUF,SAAS+G,WAAY/G,GACnB,OAAIA,EAAIgH,KAAahH,EAAIgH,OAClBhH,EAAIiH,QAAQ,aAAc,GACnC,CAbQF,CAAW/G,GAAKiH,QAAQL,EAAmB,KAEzCtf,OAAS,EAAG,MAAO,GAE3B,KAAO0Y,EAAI1Y,OAAS,GAAM,GACxB0Y,GAAY,IAEd,OAAOA,CACT,CAsH4B8G,CAAY9G,GACxC,CAEA,SAASH,WAAYqH,EAAKC,EAAKjM,EAAQ5T,GACrC,IAAK,IAAInD,EAAI,EAAGA,EAAImD,KACbnD,EAAI+W,GAAUiM,EAAI7f,QAAYnD,GAAK+iB,EAAI5f,UADhBnD,EAE5BgjB,EAAIhjB,EAAI+W,GAAUgM,EAAI/iB,GAExB,OAAOA,CACT,C,+GCvvDA,IAOIijB,EACAC,EARAC,EAAU1jB,EAAOD,QAAU,CAAC,EAUhC,SAAS4jB,mBACL,MAAM,IAAIrf,MAAM,kCACpB,CACA,SAASsf,sBACL,MAAM,IAAItf,MAAM,oCACpB,CAqBA,SAASuf,WAAWC,GAChB,GAAIN,IAAqBO,WAErB,OAAOA,WAAWD,EAAK,GAG3B,IAAKN,IAAqBG,mBAAqBH,IAAqBO,WAEhE,OADAP,EAAmBO,WACZA,WAAWD,EAAK,GAE3B,IAEI,OAAON,EAAiBM,EAAK,EASjC,CARE,MAAMpM,GACJ,IAEI,OAAO8L,EAAiB9iB,KAAK,KAAMojB,EAAK,EAI5C,CAHE,MAAMpM,GAEJ,OAAO8L,EAAiB9iB,KAAKsE,KAAM8e,EAAK,EAC5C,CACJ,CAGJ,EA5CC,WACG,IAEQN,EADsB,mBAAfO,WACYA,WAEAJ,gBAI3B,CAFE,MAAOjM,GACL8L,EAAmBG,gBACvB,CACA,IAEQF,EADwB,mBAAjBO,aACcA,aAEAJ,mBAI7B,CAFE,MAAOlM,GACL+L,EAAqBG,mBACzB,CACJ,CAnBA,GAwEA,IAEIK,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,kBACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAavgB,OACbwgB,EAAQD,EAAaja,OAAOka,GAE5BE,GAAc,EAEdF,EAAMxgB,QACN4gB,aAER,CAEA,SAASA,aACL,IAAIH,EAAJ,CAGA,IAAII,EAAUV,WAAWQ,iBACzBF,GAAW,EAGX,IADA,IAAI9gB,EAAM6gB,EAAMxgB,OACVL,GAAK,CAGP,IAFA4gB,EAAeC,EACfA,EAAQ,KACCE,EAAa/gB,GACd4gB,GACAA,EAAaG,GAAYI,MAGjCJ,GAAc,EACd/gB,EAAM6gB,EAAMxgB,MAChB,CACAugB,EAAe,KACfE,GAAW,EAnEf,SAASM,gBAAgBC,GACrB,GAAIjB,IAAuBO,aAEvB,OAAOA,aAAaU,GAGxB,IAAKjB,IAAuBG,sBAAwBH,IAAuBO,aAEvE,OADAP,EAAqBO,aACdA,aAAaU,GAExB,IAEI,OAAOjB,EAAmBiB,EAU9B,CATE,MAAOhN,GACL,IAEI,OAAO+L,EAAmB/iB,KAAK,KAAMgkB,EAKzC,CAJE,MAAOhN,GAGL,OAAO+L,EAAmB/iB,KAAKsE,KAAM0f,EACzC,CACJ,CAIJ,CA0CID,CAAgBF,EAlBhB,CAmBJ,CAgBA,SAASI,KAAKb,EAAKrY,GACfzG,KAAK8e,IAAMA,EACX9e,KAAKyG,MAAQA,CACjB,CAWA,SAASmZ,OAAQ,CA5BjBlB,EAAQmB,SAAW,SAAUf,GACzB,IAAI9S,EAAO,IAAI5M,MAAMU,UAAUpB,OAAS,GACxC,GAAIoB,UAAUpB,OAAS,EACnB,IAAK,IAAInD,EAAI,EAAGA,EAAIuE,UAAUpB,OAAQnD,IAClCyQ,EAAKzQ,EAAI,GAAKuE,UAAUvE,GAGhC2jB,EAAMngB,KAAK,IAAI4gB,KAAKb,EAAK9S,IACJ,IAAjBkT,EAAMxgB,QAAiBygB,GACvBN,WAAWS,WAEnB,EAOAK,KAAKtiB,UAAUmiB,IAAM,WACjBxf,KAAK8e,IAAI/e,MAAM,KAAMC,KAAKyG,MAC9B,EACAiY,EAAQoB,MAAQ,UAChBpB,EAAQqB,SAAU,EAClBrB,EAAQsB,IAAM,CAAC,EACftB,EAAQuB,KAAO,GACfvB,EAAQvU,QAAU,GAClBuU,EAAQwB,SAAW,CAAC,EAIpBxB,EAAQtQ,GAAKwR,KACblB,EAAQnN,YAAcqO,KACtBlB,EAAQhR,KAAOkS,KACflB,EAAQ1M,IAAM4N,KACdlB,EAAQ5Q,eAAiB8R,KACzBlB,EAAQzM,mBAAqB2N,KAC7BlB,EAAQvP,KAAOyQ,KACflB,EAAQlN,gBAAkBoO,KAC1BlB,EAAQjN,oBAAsBmO,KAE9BlB,EAAQpN,UAAY,SAAUxV,GAAQ,MAAO,EAAG,EAEhD4iB,EAAQyB,QAAU,SAAUrkB,GACxB,MAAM,IAAIwD,MAAM,mCACpB,EAEAof,EAAQ0B,IAAM,WAAc,MAAO,GAAI,EACvC1B,EAAQ2B,MAAQ,SAAUrK,GACtB,MAAM,IAAI1W,MAAM,iCACpB,EACAof,EAAQ4B,MAAQ,WAAa,OAAO,CAAG,C,gECvLvC,cAcA,IAAIhX,GACJ,SAAWA,IAGP,SAAWxO,GACP,IAAID,EAAyB,iBAAXiS,EAAsBA,EACpB,iBAAT1B,KAAoBA,KACP,iBAATpL,KAAoBA,KACvB8I,SAAS,eAATA,GACRyX,EAAWC,aAAalX,GAQ5B,SAASkX,aAAane,EAAQoe,GAC1B,OAAO,SAAU3jB,EAAKN,GACS,mBAAhB6F,EAAOvF,IACdb,OAAOC,eAAemG,EAAQvF,EAAK,CAAEqc,cAAc,EAAMuH,UAAU,EAAMlkB,MAAOA,IAEhFikB,GACAA,EAAS3jB,EAAKN,EACtB,CACJ,MAf4B,IAAjB3B,EAAKyO,QACZzO,EAAKyO,QAAUA,EAGfiX,EAAWC,aAAa3lB,EAAKyO,QAASiX,GAY3C,SAAUA,GACT,IAAII,EAAS1kB,OAAOoB,UAAUC,eAE1BsjB,EAAmC,mBAAXtkB,OACxBukB,EAAoBD,QAAgD,IAAvBtkB,OAAOwkB,YAA8BxkB,OAAOwkB,YAAc,gBACvGC,EAAiBH,QAA6C,IAApBtkB,OAAO0kB,SAA2B1kB,OAAO0kB,SAAW,aAC9FC,EAA0C,mBAAlBhlB,OAAOY,OAC/BqkB,EAAgB,CAAEnN,UAAW,cAAgB3U,MAC7C+hB,GAAaF,IAAmBC,EAChCE,EAAU,CAEVvkB,OAAQokB,EACF,WAAc,OAAOI,eAAeplB,OAAOY,OAAO,MAAQ,EAC1DqkB,EACI,WAAc,OAAOG,eAAe,CAAEtN,UAAW,MAAS,EAC1D,WAAc,OAAOsN,eAAe,CAAC,EAAI,EACnDjf,IAAK+e,EACC,SAAUnd,EAAKlH,GAAO,OAAO6jB,EAAOjlB,KAAKsI,EAAKlH,EAAM,EACpD,SAAUkH,EAAKlH,GAAO,OAAOA,KAAOkH,CAAK,EAC/C5H,IAAK+kB,EACC,SAAUnd,EAAKlH,GAAO,OAAO6jB,EAAOjlB,KAAKsI,EAAKlH,GAAOkH,EAAIlH,QAAOwD,CAAW,EAC3E,SAAU0D,EAAKlH,GAAO,OAAOkH,EAAIlH,EAAM,GAG7CwkB,EAAoBrlB,OAAOsJ,eAAeuD,UAC1CyY,EAAiC,iBAAZ7C,GAAwBA,EAAQsB,KAA4D,SAArDtB,EAAQsB,IAAuC,kCAC3GwB,EAAQD,GAA8B,mBAAR1f,KAAuD,mBAA1BA,IAAIxE,UAAUokB,QAA+BC,oBAAN7f,IAClG8f,EAAQJ,GAA8B,mBAARxb,KAAuD,mBAA1BA,IAAI1I,UAAUokB,QAA+BG,oBAAN7b,IAIlG8b,EAAW,IAHCN,GAAkC,mBAAZO,QAAmCC,wBAAVD,SA2C/D,SAASE,SAASC,EAAY5f,EAAQwJ,EAAaqW,GAC/C,GAAKC,YAAYtW,GAYZ,CACD,IAAKuW,QAAQH,GACT,MAAM,IAAItT,UACd,IAAK0T,cAAchgB,GACf,MAAM,IAAIsM,UACd,OAAO2T,oBAAoBL,EAAY5f,EAC3C,CAjBI,IAAK+f,QAAQH,GACT,MAAM,IAAItT,UACd,IAAK4T,SAASlgB,GACV,MAAM,IAAIsM,UACd,IAAK4T,SAASL,KAAgBC,YAAYD,KAAgBM,OAAON,GAC7D,MAAM,IAAIvT,UAId,OAHI6T,OAAON,KACPA,OAAa5hB,GAEVmiB,iBAAiBR,EAAY5f,EADpCwJ,EAAc6W,cAAc7W,GAC6BqW,EASjE,CA4CA,SAAS/f,SAASwgB,EAAaC,GAC3B,SAASC,UAAUxgB,EAAQwJ,GACvB,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UACd,IAAKwT,YAAYtW,KAAiBiX,cAAcjX,GAC5C,MAAM,IAAI8C,UACdoU,0BAA0BJ,EAAaC,EAAevgB,EAAQwJ,EAClE,CACA,OAAOgX,SACX,CAyCA,SAASG,eAAeL,EAAaC,EAAevgB,EAAQwJ,GACxD,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzBkX,0BAA0BJ,EAAaC,EAAevgB,EAAQwJ,EACzE,CAoCA,SAASoX,YAAYN,EAAatgB,EAAQwJ,GACtC,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzBqX,oBAAoBP,EAAatgB,EAAQwJ,EACpD,CAoCA,SAASsX,eAAeR,EAAatgB,EAAQwJ,GACzC,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzBuX,uBAAuBT,EAAatgB,EAAQwJ,EACvD,CAoCA,SAAShI,YAAY8e,EAAatgB,EAAQwJ,GACtC,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzBwX,oBAAoBV,EAAatgB,EAAQwJ,EACpD,CAoCA,SAASyX,eAAeX,EAAatgB,EAAQwJ,GACzC,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzB0X,uBAAuBZ,EAAatgB,EAAQwJ,EACvD,CAmCA,SAAS2X,gBAAgBnhB,EAAQwJ,GAC7B,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzB4X,qBAAqBphB,EAAQwJ,EACxC,CAmCA,SAAS6X,mBAAmBrhB,EAAQwJ,GAChC,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UAGd,OAFKwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IACzB8X,wBAAwBthB,EAAQwJ,EAC3C,CAoCA,SAAS+X,eAAejB,EAAatgB,EAAQwJ,GACzC,IAAK0W,SAASlgB,GACV,MAAM,IAAIsM,UACTwT,YAAYtW,KACbA,EAAc6W,cAAc7W,IAChC,IAAIgY,EAAcC,uBAAuBzhB,EAAQwJ,GAAwB,GACzE,GAAIsW,YAAY0B,GACZ,OAAO,EACX,IAAKA,EAAY5Z,OAAO0Y,GACpB,OAAO,EACX,GAAIkB,EAAY7O,KAAO,EACnB,OAAO,EACX,IAAI+O,EAAiBlC,EAASzlB,IAAIiG,GAElC,OADA0hB,EAAe9Z,OAAO4B,GAClBkY,EAAe/O,KAAO,GAE1B6M,EAAS5X,OAAO5H,IADL,CAGf,CAEA,SAASigB,oBAAoBL,EAAY5f,GACrC,IAAK,IAAI9G,EAAI0mB,EAAWvjB,OAAS,EAAGnD,GAAK,IAAKA,EAAG,CAC7C,IACIyoB,GAAYnB,EADAZ,EAAW1mB,IACD8G,GAC1B,IAAK8f,YAAY6B,KAAexB,OAAOwB,GAAY,CAC/C,IAAK3B,cAAc2B,GACf,MAAM,IAAIrV,UACdtM,EAAS2hB,CACb,CACJ,CACA,OAAO3hB,CACX,CACA,SAASogB,iBAAiBR,EAAY5f,EAAQwJ,EAAapC,GACvD,IAAK,IAAIlO,EAAI0mB,EAAWvjB,OAAS,EAAGnD,GAAK,IAAKA,EAAG,CAC7C,IACIyoB,GAAYnB,EADAZ,EAAW1mB,IACD8G,EAAQwJ,EAAapC,GAC/C,IAAK0Y,YAAY6B,KAAexB,OAAOwB,GAAY,CAC/C,IAAKzB,SAASyB,GACV,MAAM,IAAIrV,UACdlF,EAAaua,CACjB,CACJ,CACA,OAAOva,CACX,CACA,SAASqa,uBAAuBG,EAAGC,EAAGC,GAClC,IAAIJ,EAAiBlC,EAASzlB,IAAI6nB,GAClC,GAAI9B,YAAY4B,GAAiB,CAC7B,IAAKI,EACD,OACJJ,EAAiB,IAAIvC,EACrBK,EAASvf,IAAI2hB,EAAGF,EACpB,CACA,IAAIF,EAAcE,EAAe3nB,IAAI8nB,GACrC,GAAI/B,YAAY0B,GAAc,CAC1B,IAAKM,EACD,OACJN,EAAc,IAAIrC,EAClBuC,EAAezhB,IAAI4hB,EAAGL,EAC1B,CACA,OAAOA,CACX,CAGA,SAASX,oBAAoBkB,EAAaH,EAAGC,GAEzC,GADad,uBAAuBgB,EAAaH,EAAGC,GAEhD,OAAO,EACX,IAAIG,EAASC,uBAAuBL,GACpC,OAAKzB,OAAO6B,IACDnB,oBAAoBkB,EAAaC,EAAQH,EAExD,CAGA,SAASd,uBAAuBgB,EAAaH,EAAGC,GAC5C,IAAIL,EAAcC,uBAAuBG,EAAGC,GAAc,GAC1D,OAAI/B,YAAY0B,IAETU,UAAUV,EAAYzhB,IAAIgiB,GACrC,CAGA,SAASf,oBAAoBe,EAAaH,EAAGC,GAEzC,GADad,uBAAuBgB,EAAaH,EAAGC,GAEhD,OAAOX,uBAAuBa,EAAaH,EAAGC,GAClD,IAAIG,EAASC,uBAAuBL,GACpC,OAAKzB,OAAO6B,QAAZ,EACWhB,oBAAoBe,EAAaC,EAAQH,EAExD,CAGA,SAASX,uBAAuBa,EAAaH,EAAGC,GAC5C,IAAIL,EAAcC,uBAAuBG,EAAGC,GAAc,GAC1D,IAAI/B,YAAY0B,GAEhB,OAAOA,EAAYznB,IAAIgoB,EAC3B,CAGA,SAASrB,0BAA0BqB,EAAaI,EAAeP,EAAGC,GAC5CJ,uBAAuBG,EAAGC,GAAc,GAC9C5hB,IAAI8hB,EAAaI,EACjC,CAGA,SAASf,qBAAqBQ,EAAGC,GAC7B,IAAI/W,EAAUwW,wBAAwBM,EAAGC,GACrCG,EAASC,uBAAuBL,GACpC,GAAe,OAAXI,EACA,OAAOlX,EACX,IAAIsX,EAAahB,qBAAqBY,EAAQH,GAC9C,GAAIO,EAAW/lB,QAAU,EACrB,OAAOyO,EACX,GAAIA,EAAQzO,QAAU,EAClB,OAAO+lB,EAGX,IAFA,IAAIniB,EAAM,IAAIqf,EACVtZ,EAAO,GACF3D,EAAK,EAAGggB,EAAYvX,EAASzI,EAAKggB,EAAUhmB,OAAQgG,IAAM,CAC/D,IAAI5H,EAAM4nB,EAAUhgB,GACPpC,EAAIF,IAAItF,KAEjBwF,EAAI0E,IAAIlK,GACRuL,EAAKtJ,KAAKjC,GAElB,CACA,IAAK,IAAI6H,EAAK,EAAGggB,EAAeF,EAAY9f,EAAKggB,EAAajmB,OAAQiG,IAAM,CACpE7H,EAAM6nB,EAAahgB,GACVrC,EAAIF,IAAItF,KAEjBwF,EAAI0E,IAAIlK,GACRuL,EAAKtJ,KAAKjC,GAElB,CACA,OAAOuL,CACX,CAGA,SAASsb,wBAAwBM,EAAGC,GAChC,IAAI7b,EAAO,GACPwb,EAAcC,uBAAuBG,EAAGC,GAAc,GAC1D,GAAI/B,YAAY0B,GACZ,OAAOxb,EAIX,IAHA,IACI2Y,EAAW4D,YADDf,EAAYxb,QAEtBwc,EAAI,IACK,CACT,IAAIC,EAAOC,aAAa/D,GACxB,IAAK8D,EAED,OADAzc,EAAK3J,OAASmmB,EACPxc,EAEX,IAAI2c,EAAYC,cAAcH,GAC9B,IACIzc,EAAKwc,GAAKG,CASd,CAPA,MAAOtS,GACH,IACIwS,cAAclE,EAIlB,CAFA,QACI,MAAMtO,CACV,CACJ,CACAmS,GACJ,CACJ,CAGA,SAAStY,KAAKkN,GACV,GAAU,OAANA,EACA,OAAO,EACX,cAAeA,GACX,IAAK,YAAa,OAAO,EACzB,IAAK,UAAW,OAAO,EACvB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAa,OAANA,EAAa,EAAe,EAClD,QAAS,OAAO,EAExB,CAGA,SAAS0I,YAAY1I,GACjB,YAAanZ,IAANmZ,CACX,CAGA,SAAS+I,OAAO/I,GACZ,OAAa,OAANA,CACX,CAGA,SAAS0L,SAAS1L,GACd,MAAoB,iBAANA,CAClB,CAGA,SAAS8I,SAAS9I,GACd,MAAoB,iBAANA,EAAuB,OAANA,EAA0B,mBAANA,CACvD,CAKA,SAAS2L,YAAYC,EAAOC,GACxB,OAAQ/Y,KAAK8Y,IACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EAAgB,OAAOA,EAEhC,IAAIE,EAAyB,IAAlBD,EAAmC,SAA6B,IAAlBA,EAAmC,SAAW,UACnGE,EAAeC,UAAUJ,EAAOxE,GACpC,QAAqBvgB,IAAjBklB,EAA4B,CAC5B,IAAIvZ,EAASuZ,EAAa9pB,KAAK2pB,EAAOE,GACtC,GAAIhD,SAAStW,GACT,MAAM,IAAI0C,UACd,OAAO1C,CACX,CACA,OAAOyZ,oBAAoBL,EAAgB,YAATE,EAAqB,SAAWA,EACtE,CAGA,SAASG,oBAAoBzB,EAAGsB,GAC5B,GAAa,WAATA,EAAmB,CACnB,IAAII,EAAa1B,EAAExQ,SACnB,GAAImS,WAAWD,GAEX,IAAKpD,SADDtW,EAAS0Z,EAAWjqB,KAAKuoB,IAEzB,OAAOhY,EAGf,GAAI2Z,WADA9d,EAAUmc,EAAEnc,SAGZ,IAAKya,SADDtW,EAASnE,EAAQpM,KAAKuoB,IAEtB,OAAOhY,CAEnB,KACK,CACD,IAAInE,EACJ,GAAI8d,WADA9d,EAAUmc,EAAEnc,SAGZ,IAAKya,SADDtW,EAASnE,EAAQpM,KAAKuoB,IAEtB,OAAOhY,EAEf,IAEQA,EAFJ4Z,EAAa5B,EAAExQ,SACnB,GAAImS,WAAWC,GAEX,IAAKtD,SADDtW,EAAS4Z,EAAWnqB,KAAKuoB,IAEzB,OAAOhY,CAEnB,CACA,MAAM,IAAI0C,SACd,CAGA,SAAS4V,UAAUuB,GACf,QAASA,CACb,CAGA,SAASC,SAASD,GACd,MAAO,GAAKA,CAChB,CAGA,SAASpD,cAAcoD,GACnB,IAAIhpB,EAAMsoB,YAAYU,EAAU,GAChC,OAAIX,SAASroB,GACFA,EACJipB,SAASjpB,EACpB,CAKA,SAASslB,QAAQ0D,GACb,OAAO1mB,MAAMkH,QACPlH,MAAMkH,QAAQwf,GACdA,aAAoB7pB,OAChB6pB,aAAoB1mB,MACyB,mBAA7CnD,OAAOoB,UAAUoW,SAAS/X,KAAKoqB,EAC7C,CAGA,SAASF,WAAWE,GAEhB,MAA2B,mBAAbA,CAClB,CAGA,SAASzD,cAAcyD,GAEnB,MAA2B,mBAAbA,CAClB,CAGA,SAAShD,cAAcgD,GACnB,OAAQvZ,KAAKuZ,IACT,KAAK,EACL,KAAK,EAAgB,OAAO,EAC5B,QAAS,OAAO,EAExB,CAKA,SAASL,UAAUO,EAAG9B,GAClB,IAAI+B,EAAOD,EAAE9B,GACb,GAAI+B,QAAJ,CAEA,IAAKL,WAAWK,GACZ,MAAM,IAAItX,UACd,OAAOsX,CAHa,CAIxB,CAGA,SAASrB,YAAY1a,GACjB,IAAIgc,EAAST,UAAUvb,EAAK6W,GAC5B,IAAK6E,WAAWM,GACZ,MAAM,IAAIvX,UACd,IAAIqS,EAAWkF,EAAOxqB,KAAKwO,GAC3B,IAAKqY,SAASvB,GACV,MAAM,IAAIrS,UACd,OAAOqS,CACX,CAGA,SAASiE,cAAckB,GACnB,OAAOA,EAAW3pB,KACtB,CAGA,SAASuoB,aAAa/D,GAClB,IAAI/U,EAAS+U,EAAS8D,OACtB,OAAO7Y,EAAOma,MAAena,CACjC,CAGA,SAASiZ,cAAclE,GACnB,IAAIqF,EAAIrF,EAAiB,OACrBqF,GACAA,EAAE3qB,KAAKslB,EACf,CAKA,SAASsD,uBAAuBL,GAC5B,IAAIqC,EAAQrqB,OAAOsJ,eAAe0e,GAClC,GAAiB,mBAANA,GAAoBA,IAAM3C,EACjC,OAAOgF,EAQX,GAAIA,IAAUhF,EACV,OAAOgF,EAEX,IAAIjpB,EAAY4mB,EAAE5mB,UACdkpB,EAAiBlpB,GAAapB,OAAOsJ,eAAelI,GACxD,GAAsB,MAAlBkpB,GAA0BA,IAAmBtqB,OAAOoB,UACpD,OAAOipB,EAEX,IAAI9gB,EAAc+gB,EAAe/gB,YACjC,MAA2B,mBAAhBA,GAGPA,IAAgBye,EAFTqC,EAKJ9gB,CACX,CAEA,SAASkc,oBACL,IAAI8E,EAAgB,CAAC,EACjBC,EAAgB,GAChBC,EAA6B,WAC7B,SAASA,YAAYre,EAAM9D,EAAQoiB,GAC/B3mB,KAAK4mB,OAAS,EACd5mB,KAAK6mB,MAAQxe,EACbrI,KAAK8mB,QAAUviB,EACfvE,KAAK+mB,UAAYJ,CACrB,CAmCA,OAlCAD,YAAYrpB,UAAU,cAAgB,WAAc,OAAO2C,IAAM,EACjE0mB,YAAYrpB,UAAU0jB,GAAkB,WAAc,OAAO/gB,IAAM,EACnE0mB,YAAYrpB,UAAUynB,KAAO,WACzB,IAAIle,EAAQ5G,KAAK4mB,OACjB,GAAIhgB,GAAS,GAAKA,EAAQ5G,KAAK6mB,MAAMnoB,OAAQ,CACzC,IAAIuN,EAASjM,KAAK+mB,UAAU/mB,KAAK6mB,MAAMjgB,GAAQ5G,KAAK8mB,QAAQlgB,IAS5D,OARIA,EAAQ,GAAK5G,KAAK6mB,MAAMnoB,QACxBsB,KAAK4mB,QAAU,EACf5mB,KAAK6mB,MAAQJ,EACbzmB,KAAK8mB,QAAUL,GAGfzmB,KAAK4mB,SAEF,CAAEpqB,MAAOyP,EAAQma,MAAM,EAClC,CACA,MAAO,CAAE5pB,WAAO8D,EAAW8lB,MAAM,EACrC,EACAM,YAAYrpB,UAAU2pB,MAAQ,SAAU9V,GAMpC,MALIlR,KAAK4mB,QAAU,IACf5mB,KAAK4mB,QAAU,EACf5mB,KAAK6mB,MAAQJ,EACbzmB,KAAK8mB,QAAUL,GAEbvV,CACV,EACAwV,YAAYrpB,UAAU4pB,OAAS,SAAUzqB,GAMrC,OALIwD,KAAK4mB,QAAU,IACf5mB,KAAK4mB,QAAU,EACf5mB,KAAK6mB,MAAQJ,EACbzmB,KAAK8mB,QAAUL,GAEZ,CAAEjqB,MAAOA,EAAO4pB,MAAM,EACjC,EACOM,WACX,CA1CgC,GA2ChC,OAAsB,WAClB,SAAS7kB,MACL7B,KAAK6mB,MAAQ,GACb7mB,KAAK8mB,QAAU,GACf9mB,KAAKknB,UAAYV,EACjBxmB,KAAKmnB,aAAe,CACxB,CAwDA,OAvDAlrB,OAAOC,eAAe2F,IAAIxE,UAAW,OAAQ,CACzCjB,IAAK,WAAc,OAAO4D,KAAK6mB,MAAMnoB,MAAQ,EAC7CvC,YAAY,EACZgd,cAAc,IAElBtX,IAAIxE,UAAU+E,IAAM,SAAUtF,GAAO,OAAOkD,KAAKonB,MAAMtqB,GAAgB,IAAU,CAAG,EACpF+E,IAAIxE,UAAUjB,IAAM,SAAUU,GAC1B,IAAI8J,EAAQ5G,KAAKonB,MAAMtqB,GAAgB,GACvC,OAAO8J,GAAS,EAAI5G,KAAK8mB,QAAQlgB,QAAStG,CAC9C,EACAuB,IAAIxE,UAAUiF,IAAM,SAAUxF,EAAKN,GAC/B,IAAIoK,EAAQ5G,KAAKonB,MAAMtqB,GAAgB,GAEvC,OADAkD,KAAK8mB,QAAQlgB,GAASpK,EACfwD,IACX,EACA6B,IAAIxE,UAAU4M,OAAS,SAAUnN,GAC7B,IAAI8J,EAAQ5G,KAAKonB,MAAMtqB,GAAgB,GACvC,GAAI8J,GAAS,EAAG,CAEZ,IADA,IAAIoO,EAAOhV,KAAK6mB,MAAMnoB,OACbnD,EAAIqL,EAAQ,EAAGrL,EAAIyZ,EAAMzZ,IAC9ByE,KAAK6mB,MAAMtrB,EAAI,GAAKyE,KAAK6mB,MAAMtrB,GAC/ByE,KAAK8mB,QAAQvrB,EAAI,GAAKyE,KAAK8mB,QAAQvrB,GAQvC,OANAyE,KAAK6mB,MAAMnoB,SACXsB,KAAK8mB,QAAQpoB,SACT5B,IAAQkD,KAAKknB,YACblnB,KAAKknB,UAAYV,EACjBxmB,KAAKmnB,aAAe,IAEjB,CACX,CACA,OAAO,CACX,EACAtlB,IAAIxE,UAAU6G,MAAQ,WAClBlE,KAAK6mB,MAAMnoB,OAAS,EACpBsB,KAAK8mB,QAAQpoB,OAAS,EACtBsB,KAAKknB,UAAYV,EACjBxmB,KAAKmnB,aAAe,CACxB,EACAtlB,IAAIxE,UAAUgL,KAAO,WAAc,OAAO,IAAIqe,EAAY1mB,KAAK6mB,MAAO7mB,KAAK8mB,QAASO,OAAS,EAC7FxlB,IAAIxE,UAAUkH,OAAS,WAAc,OAAO,IAAImiB,EAAY1mB,KAAK6mB,MAAO7mB,KAAK8mB,QAASQ,SAAW,EACjGzlB,IAAIxE,UAAUokB,QAAU,WAAc,OAAO,IAAIiF,EAAY1mB,KAAK6mB,MAAO7mB,KAAK8mB,QAASS,SAAW,EAClG1lB,IAAIxE,UAAU,cAAgB,WAAc,OAAO2C,KAAKyhB,SAAW,EACnE5f,IAAIxE,UAAU0jB,GAAkB,WAAc,OAAO/gB,KAAKyhB,SAAW,EACrE5f,IAAIxE,UAAU+pB,MAAQ,SAAUtqB,EAAK0qB,GASjC,OARIxnB,KAAKknB,YAAcpqB,IACnBkD,KAAKmnB,YAAcnnB,KAAK6mB,MAAMtnB,QAAQS,KAAKknB,UAAYpqB,IAEvDkD,KAAKmnB,YAAc,GAAKK,IACxBxnB,KAAKmnB,YAAcnnB,KAAK6mB,MAAMnoB,OAC9BsB,KAAK6mB,MAAM9nB,KAAKjC,GAChBkD,KAAK8mB,QAAQ/nB,UAAKuB,IAEfN,KAAKmnB,WAChB,EACOtlB,GACX,CA/DqB,GAgErB,SAASwlB,OAAOvqB,EAAK2qB,GACjB,OAAO3qB,CACX,CACA,SAASwqB,SAASG,EAAGjrB,GACjB,OAAOA,CACX,CACA,SAAS+qB,SAASzqB,EAAKN,GACnB,MAAO,CAACM,EAAKN,EACjB,CACJ,CAEA,SAASolB,oBACL,OAAsB,WAClB,SAAS7b,MACL/F,KAAK0nB,KAAO,IAAIlG,CACpB,CAeA,OAdAvlB,OAAOC,eAAe6J,IAAI1I,UAAW,OAAQ,CACzCjB,IAAK,WAAc,OAAO4D,KAAK0nB,KAAK1S,IAAM,EAC1C7Y,YAAY,EACZgd,cAAc,IAElBpT,IAAI1I,UAAU+E,IAAM,SAAU5F,GAAS,OAAOwD,KAAK0nB,KAAKtlB,IAAI5F,EAAQ,EACpEuJ,IAAI1I,UAAU2J,IAAM,SAAUxK,GAAS,OAAOwD,KAAK0nB,KAAKplB,IAAI9F,EAAOA,GAAQwD,IAAM,EACjF+F,IAAI1I,UAAU4M,OAAS,SAAUzN,GAAS,OAAOwD,KAAK0nB,KAAKzd,OAAOzN,EAAQ,EAC1EuJ,IAAI1I,UAAU6G,MAAQ,WAAclE,KAAK0nB,KAAKxjB,OAAS,EACvD6B,IAAI1I,UAAUgL,KAAO,WAAc,OAAOrI,KAAK0nB,KAAKrf,MAAQ,EAC5DtC,IAAI1I,UAAUkH,OAAS,WAAc,OAAOvE,KAAK0nB,KAAKnjB,QAAU,EAChEwB,IAAI1I,UAAUokB,QAAU,WAAc,OAAOzhB,KAAK0nB,KAAKjG,SAAW,EAClE1b,IAAI1I,UAAU,cAAgB,WAAc,OAAO2C,KAAKqI,MAAQ,EAChEtC,IAAI1I,UAAU0jB,GAAkB,WAAc,OAAO/gB,KAAKqI,MAAQ,EAC3DtC,GACX,CAnBqB,EAoBzB,CAEA,SAASgc,wBACL,IAAI4F,EAAY,GACZtf,EAAO+Y,EAAQvkB,SACf+qB,EAAUC,kBACd,OAAsB,WAClB,SAAS/F,UACL9hB,KAAK8nB,KAAOD,iBAChB,CAsBA,OArBA/F,QAAQzkB,UAAU+E,IAAM,SAAUC,GAC9B,IAAI0lB,EAAQC,wBAAwB3lB,GAAmB,GACvD,YAAiB/B,IAAVynB,GAAsB3G,EAAQhf,IAAI2lB,EAAO/nB,KAAK8nB,KACzD,EACAhG,QAAQzkB,UAAUjB,IAAM,SAAUiG,GAC9B,IAAI0lB,EAAQC,wBAAwB3lB,GAAmB,GACvD,YAAiB/B,IAAVynB,EAAsB3G,EAAQhlB,IAAI2rB,EAAO/nB,KAAK8nB,WAAQxnB,CACjE,EACAwhB,QAAQzkB,UAAUiF,IAAM,SAAUD,EAAQ7F,GAGtC,OAFYwrB,wBAAwB3lB,GAAmB,GACjDrC,KAAK8nB,MAAQtrB,EACZwD,IACX,EACA8hB,QAAQzkB,UAAU4M,OAAS,SAAU5H,GACjC,IAAI0lB,EAAQC,wBAAwB3lB,GAAmB,GACvD,YAAiB/B,IAAVynB,UAA6BA,EAAM/nB,KAAK8nB,KACnD,EACAhG,QAAQzkB,UAAU6G,MAAQ,WAEtBlE,KAAK8nB,KAAOD,iBAChB,EACO/F,OACX,CA1BqB,GA2BrB,SAAS+F,kBACL,IAAI/qB,EACJ,GACIA,EAAM,cAAgBmrB,mBACnB7G,EAAQhf,IAAIiG,EAAMvL,IAEzB,OADAuL,EAAKvL,IAAO,EACLA,CACX,CACA,SAASkrB,wBAAwB3lB,EAAQxF,GACrC,IAAK8jB,EAAOjlB,KAAK2G,EAAQulB,GAAU,CAC/B,IAAK/qB,EACD,OACJZ,OAAOC,eAAemG,EAAQulB,EAAS,CAAEprB,MAAO4kB,EAAQvkB,UAC5D,CACA,OAAOwF,EAAOulB,EAClB,CACA,SAASM,gBAAgB7V,EAAQ2C,GAC7B,IAAK,IAAIzZ,EAAI,EAAGA,EAAIyZ,IAAQzZ,EACxB8W,EAAO9W,GAAqB,IAAhB0X,KAAKkV,SAAkB,EACvC,OAAO9V,CACX,CACA,SAAS+V,eAAepT,GACpB,MAA0B,mBAAf7V,WACe,oBAAXkpB,OACAA,OAAOC,gBAAgB,IAAInpB,WAAW6V,IACzB,oBAAbuT,SACAA,SAASD,gBAAgB,IAAInpB,WAAW6V,IAC5CkT,gBAAgB,IAAI/oB,WAAW6V,GAAOA,GAE1CkT,gBAAgB,IAAI9oB,MAAM4V,GAAOA,EAC5C,CACA,SAASiT,aACL,IAAI7f,EAAOggB,eAAeT,GAE1Bvf,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,IAAVA,EAAK,GAAY,IAE3B,IADA,IAAI6D,EAAS,GACJqG,EAAS,EAAGA,EAASqV,IAAarV,EAAQ,CAC/C,IAAIkW,EAAOpgB,EAAKkK,GACD,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,IAChCrG,GAAU,KACVuc,EAAO,KACPvc,GAAU,KACdA,GAAUuc,EAAK/U,SAAS,IAAI4B,aAChC,CACA,OAAOpJ,CACX,CACJ,CAEA,SAASoV,eAAenX,GAGpB,OAFAA,EAAIue,QAAKnoB,SACF4J,EAAIue,GACJve,CACX,CAp+BAqW,EAAS,WAAYyB,UAqDrBzB,EAAS,WAAYpe,UA+CrBoe,EAAS,iBAAkByC,gBA0C3BzC,EAAS,cAAe0C,aA0CxB1C,EAAS,iBAAkB4C,gBA0C3B5C,EAAS,cAAe1c,aA0CxB0c,EAAS,iBAAkB+C,gBAyC3B/C,EAAS,kBAAmBiD,iBAyC5BjD,EAAS,qBAAsBmD,oBAsD/BnD,EAAS,iBAAkBqD,eAilB/B,CA3kCI9oB,CAAQylB,EAUX,CAtBD,EAwlCH,CA3lCD,CA2lCGjX,IAAYA,EAAU,CAAC,G,6JC1mC1B,IAAIof,EAGJA,EAAI,WACH,OAAO1oB,IACP,CAFG,GAIJ,IAEC0oB,EAAIA,GAAK,IAAI5f,SAAS,cAAb,EAIV,CAHE,MAAO4J,GAEc,iBAAXvX,SAAqButB,EAAIvtB,OACrC,CAMAH,EAAOD,QAAU2tB,C,sjBCPjB,wCACA,4CACA,wDAEA,MAAaC,gDAAgD,EAAAC,kCAK3D,YAAmBC,GACjBC,MAAMD,GAJA,KAAAE,QAAiC,IAAI,EAAAC,uBAAsB,GAW5D,KAAAC,KAAcC,GAAmD,EAAD,gCACrE,IAAKlpB,KAAKmpB,UACR,MAAM,IAAI7pB,MAAM,gCAElB,MAAM/B,EAAIyC,KAAK+oB,QAAQK,uBAAuBF,GAE9C,OADAlpB,KAAKqpB,YAAYH,SACJ3rB,CACf,IAEU,KAAA+rB,qBAAwBC,IAChC,GAA4B,iBAAhBA,EAAU,KAAgB,CACpC,MAAMC,GAAO,IAAAC,UAASF,EAAMnhB,MACtBshB,EAAW1pB,KAAK+oB,QAAQY,sBAAsBH,GACpDxpB,KAAKmP,KAAK,UAAWua,E,MAChB,GAAIH,EAAMnhB,gBAAgBwhB,KAAM,CACrC,MAAMC,EAAS,IAAIC,WACnBD,EAAOnZ,iBAAiB,QAASqZ,IAAS/pB,KAAKgqB,aAAaD,EAAG,IAC/DF,EAAOI,WAAWV,EAAMnhB,K,EAvB5B,CAEW+gB,gBACT,YAAoB7oB,IAAbN,KAAKkqB,GACd,CAuBUF,aAAaT,GACrB,MAAMC,GAAO,IAAAC,UAAUF,EAAMlnB,OAAsB4J,QAC7Cyd,EAAW1pB,KAAK+oB,QAAQY,sBAAsBH,GACpDxpB,KAAKmP,KAAK,UAAWua,EACvB,EAtCF,iF,qzBCRA,sCACA,iCAEA,MAAaS,yCAAyC,EAAAC,kBACpD,YAAmBhZ,GACjB0X,MAAM1X,EAASiZ,EAASC,WAAWC,cACrC,EAHF,mE,opCCFA,uCACA,gCACA,uCAKA,MAAaC,6BAA6B,EAAAhd,aAK7Bid,WACT,OAAOzqB,KAAK0qB,YAAYC,UAC1B,CAKaC,kBACT,OAAO5qB,KAAK0qB,YAAYG,iBAC1B,CAKSC,YACT,OAAO9qB,KAAK0qB,YAAYK,WAC1B,CAKWC,uBACT,OAAOhrB,KAAK0qB,YAAYO,sBAC1B,CAKWC,sBACT,OAAOlrB,KAAK0qB,YAAYS,cAC1B,CAEOC,eAAelC,EACAmC,GAEpB,OAAO,IAAIb,qBAAqBtB,EACAmC,EAClC,CAUA7lB,YAAoBklB,EACAY,GAElBxC,QAHkB,KAAA4B,cACA,KAAAY,eARZ,KAAAC,YAAuD,IAAI1pB,IAWjE6oB,EAAYS,eAAeK,QAC7B,CAEaC,KAAKvC,G,yCAGhB,aAAalpB,KAAKsrB,aAAatrB,KAAMkpB,EACvC,G,CAEawC,aAAaxC,G,yCACxB,MAAMyC,QAAiB3rB,KAAKyrB,KAAKvC,GACjC,OAAQyC,EAASnmB,aACf,KAAK6kB,EAASuB,GACZ,OACF,KAAKvB,EAAS/qB,MACZ,MAAM,EAAA8qB,kBAAkByB,UAAUF,GACpC,QACE,MAAM,IAAI,EAAAG,yBAAyB,gBAAgBH,EAASnmB,8CAElE,G,CAEaumB,OAAOA,G,yCACd3sB,MAAMkH,QAAQylB,SACV/rB,KAAK0rB,aAAa,IAAIrB,EAAS2B,UAAUD,EAAQ/rB,KAAK8qB,cAEtD9qB,KAAK0rB,aAAa,IAAIrB,EAAS2B,UAAU,CAACD,GAAS/rB,KAAK8qB,OAElE,G,CAEcmB,qBAAqBC,EAA0BC,G,+CAC3D,IAAIC,EAA4C,QAA9B,EAAApsB,KAAKkrB,gBAAgBc,iBAAS,eAAElpB,QAAQ2W,GAAMA,EAAE4S,cAAgBF,IAClF,IAAKC,GAAqC,GAAtBA,EAAY1tB,OAC9B,MAAM,IAAI,EAAA4tB,wBAAwB,UAAUtsB,KAAKyqB,eAAe0B,kBAElE,IAAII,EAAoC,GACxC,GAAsB,iBAAZ,EACRH,EAAY1lB,SAAS+S,GAAM8S,EAAKxtB,KAAK,IAAIsrB,EAASmC,iBAAiB/S,EAAEqR,MAAOoB,EAAOC,UAC9E,KAAI/sB,MAAMkH,QAAQ4lB,GAQvB,MAAM,IAAI,EAAAI,wBAAwB,GAAGH,iDAPrC,GAAID,EAAMxtB,OAAS0tB,EAAY1tB,OAC7B,MAAM,IAAI,EAAA4tB,wBAAwB,GAAGJ,EAAMxtB,yCAAyC0tB,EAAY1tB,oBAElG0tB,EAAY1lB,SAAQ,CAAC+S,EAAGle,KACtBgxB,EAAKxtB,KAAK,IAAIsrB,EAASmC,iBAAiB/S,EAAEqR,MAAOoB,EAAM3wB,GAAI4wB,GAAU,G,OAKnEnsB,KAAK+rB,OAAOQ,E,IAGPE,QAAQP,G,+CACblsB,KAAKisB,qBAAqBC,EAAO7B,EAASgC,aAAaK,QAC/D,G,CAEaC,UAAUT,G,+CACflsB,KAAKisB,qBAAqBC,EAAO7B,EAASgC,aAAaO,UAC/D,G,CAEaC,OAAOtoB,EAAsCuoB,G,yCACxD,IAII5D,EAJA6D,EAAc/sB,KAAKkrB,gBAAgB8B,UACvC,IAAKD,GAAqC,GAAtBA,EAAYruB,OAC9B,MAAM,IAAI,EAAA4tB,wBAAwB,UAAUtsB,KAAKyqB,mCAGnD,GAAuB,iBAAb,EACRvB,EAAMmB,EAAS2C,UAAU7I,OAAOnkB,KAAK8qB,MACL,IAAI1rB,MAAM2tB,EAAYruB,QAAQ0a,KAAK,CAAC7U,EAAQuoB,SACvE,KAAI1tB,MAAMkH,QAAQ/B,GAGvB,MAAM,IAAI,EAAA+nB,wBACR,0FAHFpD,EAAMmB,EAAS2C,UAAU7I,OAAOnkB,KAAK8qB,MAAOvmB,E,OAKxCvE,KAAK0rB,aAAaxC,EAC1B,G,CAEa+D,OAAO1oB,EAAqC2oB,G,yCACvD,IAIIhE,EAJAiE,EAAcntB,KAAKkrB,gBAAgBkC,UACvC,IAAKD,GAAqC,GAAtBA,EAAYzuB,OAC9B,MAAM,IAAI,EAAA4tB,wBAAwB,UAAUtsB,KAAKyqB,mCAGnD,GAAuB,iBAAb,EACRvB,EAAMmB,EAAS+C,UAAUjJ,OAAOnkB,KAAK8qB,MACL,IAAI1rB,MAAM+tB,EAAYzuB,QAAQ0a,KAAK,CAAC7U,EAAQ2oB,SACvE,KAAI9tB,MAAMkH,QAAQ/B,GAGvB,MAAM,IAAI,EAAA+nB,wBACR,wFAHFpD,EAAMmB,EAAS+C,UAAUjJ,OAAOnkB,KAAK8qB,MAAOvmB,E,OAKxCvE,KAAK0rB,aAAaxC,EAC1B,G,CAEamE,WAAWC,EAAqBC,G,yCAC3C,IAAI5B,QAAiB3rB,KAAKyrB,KAAK,IAAIpB,EAASmD,cAAcxtB,KAAK8qB,MAAOwC,EAAaC,IACnF,OAAQ5B,EAASnmB,aACf,KAAK6kB,EAASoD,cACZ,OAAQ9B,EAAoC+B,KAC9C,KAAKrD,EAAS/qB,MACZ,MAAM,EAAA8qB,kBAAkByB,UAAUF,GACpC,QACE,MAAM,IAAI,EAAAG,yBAAyB,gBAAgBH,EAASnmB,yCAElE,G,CAEamoB,U,+CACX,IAAIC,EAAiD,QAAlC,EAAA5tB,KAAKkrB,gBAAgBsC,qBAAa,eAAE1qB,QAAQ2W,GAAMA,EAAEoU,YAAcxD,EAASwD,WAAWC,UACzG,IAAKF,GAAuC,GAAvBA,EAAalvB,OAChC,MAAM,IAAI,EAAA4tB,wBAAwB,UAAUtsB,KAAKyqB,oCAInD,aADmBzqB,KAAKqtB,WAAWO,EAAa,GAAG9C,MAAOT,EAASwD,WAAWC,UAChE,GAAK,G,IAGRC,O,+CACX,IAAIC,EAA8C,QAAlC,EAAAhuB,KAAKkrB,gBAAgBsC,qBAAa,eAAE1qB,QAAQ2W,GAAMA,EAAEoU,YAAcxD,EAASwD,WAAWI,OACtG,IAAKD,GAAiC,GAApBA,EAAUtvB,OAC1B,MAAM,IAAI,EAAA4tB,wBAAwB,UAAUtsB,KAAKyqB,iCAInD,aADmBzqB,KAAKqtB,WAAWW,EAAU,GAAGlD,MAAOT,EAASwD,WAAWI,OAC7D,E,IAGHC,QAAQC,EAAkBC,EAAwB7O,G,yCAC7D,IAAKvf,KAAKkrB,gBAAgBmD,WACxB,MAAM,IAAI,EAAA/B,wBAAwB,UAAUtsB,KAAKyqB,qCAEnD,IAAoE,GAAhEzqB,KAAKkrB,gBAAgBmD,WAAWC,UAAU/uB,QAAQ4uB,GACpD,MAAM,IAAI,EAAA7B,wBAAwB,UAAUtsB,KAAKyqB,qCAAqC0D,KAExF,IAAIxC,QAAiB3rB,KAAKyrB,KAAK,IAAIpB,EAASgE,WAAWruB,KAAK8qB,MAAOqD,EAAUC,EAAgB7O,IAC7F,OAAQoM,EAASnmB,aACf,KAAK6kB,EAASkE,WACZ,OAAO,IAAIpvB,WAAYwsB,EAAiC+B,MAC1D,KAAKrD,EAAS/qB,MACZ,MAAM,EAAA8qB,kBAAkByB,UAAUF,GACpC,QACE,MAAM,IAAI,EAAAG,yBAAyB,gBAAgBH,EAASnmB,sCAElE,G,CAEagpB,SAASL,EAAkB/lB,EAAkBqmB,G,yCACxD,IAAKzuB,KAAKkrB,gBAAgBwD,YACxB,MAAM,IAAI,EAAApC,wBAAwB,UAAUtsB,KAAKyqB,sCAEnD,IAAqE,GAAjEzqB,KAAKkrB,gBAAgBwD,YAAYJ,UAAU/uB,QAAQ4uB,GACrD,MAAM,IAAI,EAAA7B,wBAAwB,UAAUtsB,KAAKyqB,qCAAqC0D,WAElFnuB,KAAK0rB,aAAa,IAAIrB,EAASqE,YAAY1uB,KAAK8qB,MAAOqD,EAAU/lB,EAAMqmB,GAC/E,G,CAEaE,aAAaR,G,yCACxB,IAAKnuB,KAAKkrB,gBAAgB0D,gBACxB,MAAM,IAAI,EAAAtC,wBAAwB,UAAUtsB,KAAKyqB,0CAEnD,IAAyE,GAArEzqB,KAAKkrB,gBAAgB0D,gBAAgBN,UAAU/uB,QAAQ4uB,GACzD,MAAM,IAAI,EAAA7B,wBAAwB,UAAUtsB,KAAKyqB,yCAAyC0D,WAEtFnuB,KAAK0rB,aAAa,IAAIrB,EAASuE,gBAAgB5uB,KAAK8qB,MAAOqD,GACnE,G,CAEaU,eAAeV,G,yCAE1B,IAAKnuB,KAAKkrB,gBAAgB0D,gBACxB,MAAM,IAAI,EAAAtC,wBAAwB,UAAUtsB,KAAKyqB,4CAEnD,IAAyE,GAArEzqB,KAAKkrB,gBAAgB0D,gBAAgBN,UAAU/uB,QAAQ4uB,GACzD,MAAM,IAAI,EAAA7B,wBAAwB,UAAUtsB,KAAKyqB,2CAA2C0D,WAExFnuB,KAAK0rB,aAAa,IAAIrB,EAASyE,kBAAkB9uB,KAAK8qB,MAAOqD,GACrE,G,CAEaY,O,+CACL/uB,KAAK0rB,aAAa,IAAIrB,EAAS2E,cAAchvB,KAAK8qB,OAC1D,G,CAEOmE,mBACLjvB,KAAKmP,KAAK,gBACZ,EA7OF,2C,goCCNA,mCACA,uCACA,4CAEA,iCACA,gCAEA,wDAEA,MAAa+f,uBAAuB,EAAA1hB,aAQlChI,YAAY2pB,EAAqB,2BAC/BrG,QARQ,KAAAsG,WAAoC,KACpC,KAAAC,WAA8C,KAC9C,KAAAC,SAA8C,IAAIztB,IAElD,KAAA0tB,QAAU,EAAAC,eAAeC,OACzB,KAAAC,aAAc,EA+BjB,KAAAC,QAAiBC,GAAwC,EAAD,gCAC7D5vB,KAAKuvB,QAAQM,KAAK,oCAAoCD,EAAUpqB,YAAY1J,cACtE8zB,EAAUE,UAChB9vB,KAAKqvB,WAAaO,EAClB5vB,KAAKqvB,WAAW9d,YAAY,UAAWvR,KAAK+vB,eAC5C/vB,KAAKqvB,WAAW9d,YAAY,aAAcvR,KAAKgwB,yBACzChwB,KAAKiwB,sBACb,IAEO,KAAAC,WAAa,IAAY,EAAD,gCAC7BlwB,KAAKuvB,QAAQY,MAAM,qCACnBnwB,KAAKowB,uBACCpwB,KAAKqwB,2BACLrwB,KAAKqvB,WAAYiB,YACzB,IAEO,KAAAC,cAAgB,IAAY,EAAD,gCAChCvwB,KAAKuvB,QAAQY,MAAM,wCACnBnwB,KAAK0vB,aAAc,QACb1vB,KAAKwwB,gBAAgB,IAAInG,EAASoG,cAC1C,IAEO,KAAAC,aAAe,IAAY,EAAD,gCAC/B1wB,KAAKuvB,QAAQY,MAAM,uCACnBnwB,KAAK0vB,aAAc,QACb1vB,KAAKwwB,gBAAgB,IAAInG,EAASsG,aAC1C,IAEO,KAAAC,eAAiB,IAAY,EAAD,gCACjC5wB,KAAKuvB,QAAQY,MAAM,wCACbnwB,KAAKwwB,gBAAgB,IAAInG,EAASwG,eAC1C,IAeU,KAAAb,kBAAoB,KAC5BhwB,KAAKuvB,QAAQM,KAAK,+CAClB7vB,KAAKmP,KAAK,aAAa,EAGf,KAAA4gB,cAAiBvG,IACzB,IAAK,MAAM/P,KAAK+P,EACd,OAAQ/P,EAAEjU,aACR,KAAK6kB,EAASyG,YACZ,MAAMC,EAAWtX,EACXuX,EAAc,EAAAxG,qBAAqByG,QAAQF,EAAU/wB,KAAKkxB,0BAChElxB,KAAKsvB,SAAShtB,IAAIyuB,EAAShG,YAAaiG,GACxChxB,KAAKmP,KAAK,cAAe6hB,GACzB,MACF,KAAK3G,EAAS8G,cACZ,MAAMC,EAAa3X,EACnB,GAAIzZ,KAAKsvB,SAASltB,IAAIgvB,EAAWrG,aAAc,CAC7C,MAAMsG,EAAgBrxB,KAAKsvB,SAASlzB,IAAIg1B,EAAWrG,aACnDsG,WAAepC,mBACfjvB,KAAKsvB,SAASrlB,OAAOmnB,EAAWrG,aAChC/qB,KAAKmP,KAAK,gBAAiBkiB,E,CAE7B,MACF,KAAKhH,EAASiH,iBACZtxB,KAAK0vB,aAAc,EACnB1vB,KAAKmP,KAAK,mBAAoBsK,G,EAM5B,KAAAwW,qBAAuB,IAA8B,EAAD,gCAC5DjwB,KAAKowB,iBACL,MAAMlH,QAAYlpB,KAAKqpB,YAAY,IAAIgB,EAASkH,kBAAkBvxB,KAAKwxB,YAAanH,EAASoH,uBAC7F,OAAQvI,EAAI1jB,aACV,KAAK6kB,EAASqH,WAAY,CACxB,MAAMC,EAAazI,EACnBlpB,KAAKuvB,QAAQM,KAAK,uCAAuC8B,EAAWC,cAEvDD,EAAWE,YACxB,GAAIF,EAAWG,eAAiBzH,EAASoH,qBAGvC,YADMzxB,KAAKqvB,WAAYiB,aACjB,EAAAlG,kBAAkB2H,YACtB,EAAAC,sBACAhyB,KAAKuvB,QACL,2BAA2BoC,EAAWG,wDAAwDzH,EAASoH,+CAe3G,aADMzxB,KAAKiyB,qBACJ,C,CAET,KAAK5H,EAAS/qB,MAAO,OAIbU,KAAKqvB,WAAYiB,aACvB,MAAMziB,EAAMqb,EACZ,MAAM,EAAAkB,kBAAkB2H,YAAY,EAAAC,sBACAhyB,KAAKuvB,QACL,6BAA6B1hB,EAAIqkB,e,EAGzE,OAAO,CACT,IAEU,KAAAD,kBAAoB,IAAY,EAAD,gCACvCjyB,KAAKowB,iBACLpwB,KAAKuvB,QAAQY,MAAM,mDACOnwB,KAAKqpB,YAAY,IAAIgB,EAAS8H,oBAC7CC,QAAQ1rB,SAAS7K,IAC1B,GAAKmE,KAAKsvB,SAASltB,IAAIvG,EAAEkvB,aAMvB/qB,KAAKuvB,QAAQY,MAAM,yCAAyCt0B,SANvB,CACrC,MAAMw2B,EAAS,EAAA7H,qBAAqByG,QAAQp1B,EAAGmE,KAAKkxB,0BACpDlxB,KAAKuvB,QAAQY,MAAM,kCAAkCkC,KACrDryB,KAAKsvB,SAAShtB,IAAIzG,EAAEkvB,YAAasH,GACjCryB,KAAKmP,KAAK,cAAekjB,E,IAK/B,IAEU,KAAAhC,mBAAqB,IAAY,EAAD,sCAClCrwB,KAAK4wB,iBACa,OAApB5wB,KAAKovB,aACPkD,cAActyB,KAAKovB,YACnBpvB,KAAKovB,WAAa,KAEtB,IAaU,KAAAoB,gBAAyBtH,GAAiD,EAAD,gCACjF,MAAMyC,QAAiB3rB,KAAKqpB,YAAYH,GACxC,OAAQyC,EAASnmB,aACf,KAAK6kB,EAASuB,GACZ,OACF,KAAKvB,EAAS/qB,MACZ,MAAM,EAAA8qB,kBAAkByB,UAAUF,GACpC,QACE,MAAM,EAAAvB,kBAAkB2H,YAAY,EAAAjG,yBACA9rB,KAAKuvB,QACL,gBAAgB5D,EAASnmB,8CAEnE,IAEU,KAAA0rB,yBAA2B,CAAOmB,EACAnJ,IAA2E,EAAD,gCACpH,aAAalpB,KAAKuyB,kBAAkBF,EAAQnJ,EAC9C,IA1MElpB,KAAKwxB,YAAcrC,EACnBnvB,KAAKuvB,QAAQY,MAAM,0BAA0BhB,aAC/C,CAEWqD,gBACT,OAAOxyB,KAAKqvB,UACd,CAEWlG,gBACT,OAA2B,OAApBnpB,KAAKqvB,YAAuBrvB,KAAKqvB,WAAWlG,SACrD,CAEWiJ,cAGTpyB,KAAKowB,iBACL,MAAMqC,EAAkC,GAIxC,OAHAzyB,KAAKsvB,SAAS5oB,SAAQ,CAAC7K,EAAGN,KACxBk3B,EAAQ1zB,KAAKlD,EAAE,IAEV42B,CACT,CAEWC,iBACT,OAAO1yB,KAAK0vB,WACd,CAmCc6C,kBAAkBF,EACDM,G,yCAC7B3yB,KAAKowB,iBAEL,QAAY9vB,IADAN,KAAKsvB,SAASlzB,IAAIi2B,EAAOvH,OAEnC,MAAM,EAAAV,kBAAkB2H,YAAY,EAAAzF,wBACAtsB,KAAKuvB,QACL,UAAU8C,EAAOvH,wBAGvD,OADA6H,EAAU5H,YAAcsH,EAAOvH,YAClB9qB,KAAKqpB,YAAYsJ,EAChC,G,CAuGgBtJ,YAAYH,G,yCAE1B,OADAlpB,KAAKowB,uBACQpwB,KAAKqvB,WAAYpG,KAAKC,EACrC,G,CAEUkH,iBACR,IAAKpwB,KAAKmpB,UACR,MAAM,IAAI,EAAAgB,iCAAiC,+BAE/C,EAjMF,+B,wgCCXA,uCAGA,MAAaC,0BAA0B9qB,MAE1BgrB,iBACT,OAAOtqB,KAAK4yB,UACd,CAEWC,qBACT,OAAO7yB,KAAK8yB,UACd,CAEWC,SACT,OAAO/yB,KAAKgzB,SACd,CAEWd,mBACT,OAAO,IAAI7H,EAAS/qB,MAAMU,KAAKoR,QAASpR,KAAKsqB,WAAYtqB,KAAK+yB,GAChE,CAEO3H,mBAAgD5lB,EACAytB,EACA7hB,EACA8hB,EAAa7I,EAAS8I,mBAE3E,OADAF,EAAO3zB,MAAM8R,GACN,IAAI5L,EAAY4L,EAAS8hB,EAClC,CAEO9H,iBAAiBla,GACtB,OAAQA,EAAMkiB,WACZ,KAAK/I,EAASC,WAAW+I,aACvB,OAAO,IAAI/G,wBAAwBpb,EAAMghB,aAAchhB,EAAM6hB,IAC/D,KAAK1I,EAASC,WAAWgJ,WACvB,OAAO,IAAItB,sBAAsB9gB,EAAMghB,aAAchhB,EAAM6hB,IAC7D,KAAK1I,EAASC,WAAWC,cACvB,OAAO,IAAIgJ,yBAAyBriB,EAAMghB,aAAchhB,EAAM6hB,IAChE,KAAK1I,EAASC,WAAWkJ,WACvB,OAAO,IAAIC,sBAAsBviB,EAAMghB,aAAchhB,EAAM6hB,IAC7D,KAAK1I,EAASC,WAAWoJ,UACvB,OAAO,IAAI5H,yBAAyB5a,EAAMghB,aAAchhB,EAAM6hB,IAChE,QACE,MAAM,IAAIzzB,MAAM,gBAAgB4R,EAAMkiB,yBAE5C,CAMA,YAAsBhiB,EACAwhB,EACAM,EAAa7I,EAAS8I,kBACtBQ,GACpB7K,MAAM1X,GARD,KAAAwhB,WAAkCvI,EAASC,WAAWC,cAS3DvqB,KAAK4yB,WAAaA,EAClB5yB,KAAK8yB,WAAaa,EAClB3zB,KAAKgzB,UAAYE,CACnB,EAvDF,sCA0DA,MAAalB,8BAA8B5H,kBACzC,YAAmBhZ,EAAiB8hB,EAAa7I,EAAS8I,mBACxDrK,MAAM1X,EAASiZ,EAASC,WAAWgJ,WAAYJ,EACjD,EAHF,8CAMA,MAAa5G,gCAAgClC,kBAC3C,YAAmBhZ,EAAiB8hB,EAAa7I,EAAS8I,mBACxDrK,MAAM1X,EAASiZ,EAASC,WAAW+I,aAAcH,EACnD,EAHF,kDAMA,MAAapH,iCAAiC1B,kBAC5C,YAAmBhZ,EAAiB8hB,EAAa7I,EAAS8I,mBACxDrK,MAAM1X,EAASiZ,EAASC,WAAWoJ,UAAWR,EAChD,EAHF,oDAMA,MAAaO,8BAA8BrJ,kBACzC,YAAmBhZ,EAAiB8hB,EAAa7I,EAAS8I,mBACxDrK,MAAM1X,EAASiZ,EAASC,WAAWkJ,WAAYN,EACjD,EAHF,8CAMA,MAAaK,iCAAiCnJ,kBAC5C,YAAmBhZ,EAAiB8hB,EAAa7I,EAAS8I,mBACxDrK,MAAM1X,EAASiZ,EAASC,WAAWC,cAAe2I,EACpD,EAHF,mD,gKCrFA,6CAGA,IAAYU,GAAZ,SAAYA,GACV,iBACA,qBACA,mBACA,mBACA,qBACA,oBACD,CAPD,CAAYA,EAAA,EAAAA,mBAAA,EAAAA,iBAAgB,KAY5B,MAAaC,WAcX,YAAmBC,EACAC,GACjB,MAAMva,EAAI,IAAI3R,KACRmsB,EAAOxa,EAAEya,WACTpc,EAAM2B,EAAE0a,aACRC,EAAM3a,EAAE4a,aACdp0B,KAAKq0B,UAAY,GAAGL,KAAQnc,KAAOsc,IACnCn0B,KAAK8zB,WAAaA,EAClB9zB,KAAK+zB,SAAWA,CAClB,CAKWO,cACT,OAAOt0B,KAAK8zB,UACd,CAKWS,eACT,OAAOv0B,KAAK+zB,QACd,CAKWS,gBACT,OAAOx0B,KAAKq0B,SACd,CAKWI,uBACT,MAAO,GAAGb,EAAiB5zB,KAAK+zB,eAAe/zB,KAAKq0B,eAAer0B,KAAK8zB,YAC1E,EAnDF,wBA2DA,MAAatE,uBAAuB,EAAAhiB,aAYhBiiB,oBAIhB,YAH+BnvB,IAA3BkvB,eAAekF,UACjBlF,eAAekF,QAAU,IAAIlF,gBAExBxvB,KAAK00B,OACd,CAMA,cACE5L,QApBQ,KAAA6L,uBAA2Cf,EAAiBgB,IAE5D,KAAAC,qBAAyCjB,EAAiBgB,GAmBpE,CAKWE,6BACT,OAAO90B,KAAK20B,sBACd,CAKWG,2BAAuBC,GAChC/0B,KAAK20B,uBAAyBI,CAChC,CAKWC,2BACT,OAAOh1B,KAAK60B,oBACd,CAKWG,yBAAqBjB,GAC9B/zB,KAAK60B,qBAAuBd,CAC9B,CAKOz0B,MAAM4pB,GACXlpB,KAAKi1B,cAAc/L,EAAK0K,EAAiBt0B,MAC3C,CAKO41B,KAAKhM,GACVlpB,KAAKi1B,cAAc/L,EAAK0K,EAAiBsB,KAC3C,CAKOrF,KAAK3G,GACVlpB,KAAKi1B,cAAc/L,EAAK0K,EAAiB/D,KAC3C,CAKOM,MAAMjH,GACXlpB,KAAKi1B,cAAc/L,EAAK0K,EAAiBzD,MAC3C,CAKOgF,MAAMjM,GACXlpB,KAAKi1B,cAAc/L,EAAK0K,EAAiBuB,MAC3C,CAMUF,cAAc/L,EAAa9iB,GAEnC,GAAIA,EAAQpG,KAAK60B,sBAAwBzuB,EAAQpG,KAAK20B,uBACpD,OAEF,MAAMS,EAAS,IAAIvB,WAAW3K,EAAK9iB,GAK/BA,GAASpG,KAAK20B,wBAChBjlB,QAAQ6D,IAAI6hB,EAAOX,kBAEjBruB,GAASpG,KAAK60B,sBAChB70B,KAAKmP,KAAK,MAAOimB,EAErB,EA9GF,gCAEmB,eAAAV,aAAsCp0B,C,uwBC3EzD,4DACA,iCAEA,oBAAgBmpB,SAASrS,GACvB1H,QAAQ6D,IAAI6D,GACZ,MAAMie,EAAqBj0B,KAAKK,MAAM2V,GAChCoS,EAAmC,GACzC,IAAK,MAAM/P,KAAKra,MAAMkF,KAAK+wB,GAAW,CACpC3lB,QAAQ6D,IAAIkG,GAIZ,MAAMyP,GAAW,IAAAzoB,iBAAgB4pB,EAASpuB,OAAOoR,oBAAoBoM,GAAG,IACvCA,EAAExd,OAAOoR,oBAAoBoM,GAAG,KAChEyP,EAAiCsC,SAClChC,EAAKzqB,KAAKmqB,E,CAEZ,OAAOM,CACT,C,uzCChBA,4DACA,gDAEa,EAAA2J,kBAAoB,EACpB,EAAAmC,mBAAqB,EACrB,EAAAC,OAAS,WACT,EAAA9D,qBAAuB,EAGpC,MAAa+D,kBAWXhwB,YAAY4C,GACVnM,OAAO4D,OAAOG,KAAMoI,EACtB,CAEOojB,S,cACS,QAAd,EAAAxrB,KAAKgsB,iBAAS,SAAEtlB,SAAQ,CAAC+S,EAAGle,IAAMke,EAAEqR,MAAQvvB,IAC9B,QAAd,EAAAyE,KAAKgtB,iBAAS,SAAEtmB,SAAQ,CAAC+S,EAAGle,IAAMke,EAAEqR,MAAQvvB,IAC9B,QAAd,EAAAyE,KAAKotB,iBAAS,SAAE1mB,SAAQ,CAAC+S,EAAGle,IAAMke,EAAEqR,MAAQvvB,IAC1B,QAAlB,EAAAyE,KAAKwtB,qBAAa,SAAE9mB,SAAQ,CAAC+S,EAAGle,IAAMke,EAAEqR,MAAQvvB,IACzB,QAAvB,EAAAyE,KAAKy1B,0BAAkB,SAAE/uB,SAAQ,CAAC+S,EAAGle,IAAMke,EAAEqR,MAAQvvB,GACvD,EAGF,IA0GY+uB,EAlIZ,sCAwBA,SAAY+B,GACV,oBACA,oBACA,kBACA,wBACA,wBACA,oBACA,qBACD,CARD,CAAY,EAAAA,eAAA,EAAAA,aAAY,KAUxB,SAAYwB,GACV,oBACA,oBACA,cACA,kBACA,qBAID,CATD,CAAY,EAAAA,aAAA,EAAAA,WAAU,KAWtB,uCAAa6H,+BAKXlwB,YAAY4C,GADL,KAAA0iB,MAAgB,EAErB7uB,OAAO4D,OAAOG,KAAMoI,EACtB,GAGF,mCAAautB,2BACTnwB,YACS8oB,GAAA,KAAAA,WAGT,GAGJ,sCAAasH,8BAKXpwB,YAAY4C,GADL,KAAA0iB,MAAgB,EAErB7uB,OAAO4D,OAAOG,KAAMoI,EACtB,GAGF,MAAsBytB,gBAEpBrwB,YAAmButB,GAAA,KAAAA,IACnB,CAYWxmB,WACT,OAAOvM,KAAKwF,WACd,CAEOgV,SACL,OAAOpZ,KAAKC,UAAUrB,KAAK81B,mBAC7B,CAEOA,mBACL,MAAMC,EAAU,CAAC,EAEjB,OADAA,EAAQ/1B,KAAKwF,YAAY1J,OAAQ,IAAAoE,iBAAgBF,MAC1C+1B,CACT,CAEOvK,SAAU,EA7BnB,kCAgCA,MAAsBwK,8BAA8BH,gBAClDrwB,YAAmBulB,EACAgI,GACjBjK,MAAMiK,GAFW,KAAAhI,cACA,KAAAgI,IAEnB,EAJF,8CAOA,MAAsBkD,8BAA8BJ,gBAClDrwB,YAAmButB,EAAa,EAAAI,mBAC9BrK,MAAMiK,GADW,KAAAA,IAEnB,EAHF,8CAMA,WAAanH,WAAWqK,sBACtBzwB,YAAmButB,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GADW,KAAAA,IAEnB,GAGF,aAAamD,aAAaL,gBACxBrwB,YAAmButB,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GADW,KAAAA,IAEnB,GAGF,SAAYzI,GACV,qCACA,+BACA,+BACA,6BACA,kCACD,CAND,CAAYA,EAAA,EAAAA,aAAA,EAAAA,WAAU,KAQtB,cAAahrB,cAAcu2B,gBAEzBrwB,YAAmB0sB,EACAkB,EAAwB9I,EAAWC,cACnCwI,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GAHW,KAAAb,eACA,KAAAkB,YACA,KAAAL,IAEnB,CAEIoD,mBAAiB,OAAO,CAAG,GAGjC,MAAaC,WAQX5wB,YAAY4C,GACVnM,OAAO4D,OAAOG,KAAMoI,EACtB,EAPA,IAAC,IAAAmE,OAAK,IAAMipB,oB,gBACWA,oB,8CAJzB,wBAaA,MAAaa,mBAAmBR,gBAK9BrwB,YAAYitB,EAAuBS,EAAa,EAAAoC,oBAC9CxM,MAAMoK,GACNlzB,KAAKoyB,QAAUK,EACfzyB,KAAK+yB,GAAKG,CACZ,CAEO1H,SACL,IAAI,IAAI6G,KAAUryB,KAAKoyB,QACrBC,EAAOlH,eAAeK,QAE1B,EAdA,IAAC,IAAAjf,OAAK,IAAM6pB,a,+DADd,wBAkBA,MAAatF,oBAAoBmF,sBAQ/BzwB,YAAY4C,GACV0gB,QACA7sB,OAAO4D,OAAOG,KAAMoI,EACtB,CAEOojB,SACLxrB,KAAKmrB,eAAeK,QACtB,EAZA,IAAC,IAAAjf,OAAK,IAAMipB,oB,gBACWA,oB,+CAJzB,0BAkBA,sBAAarE,sBAAsB8E,sBACjCzwB,YAAmBulB,GACjBjC,QADiB,KAAAiC,aAEnB,GAGF,0BAAaoH,0BAA0B0D,gBACrCrwB,YAAmButB,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GADW,KAAAA,IAEnB,GAGF,sBAAatC,sBAAsBoF,gBACjCrwB,YAAmButB,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GADW,KAAAA,IAEnB,GAGF,qBAAapC,qBAAqBkF,gBAChCrwB,YAAmButB,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GADW,KAAAA,IAEnB,GAGF,yBAAazB,yBAAyB2E,sBACpCzwB,cACEsjB,OACF,GAGF,0BAAayI,0BAA0BsE,gBACrCrwB,YAAmB8wB,EAA2BxE,EAAyB,EAAUiB,EAAa,EAAAuC,oBAC5FxM,MAAMiK,GADW,KAAAuD,aAA2B,KAAAxE,iBAAmC,KAAAiB,IAEjF,GAGF,mBAAarB,mBAAmBuE,sBAC9BzwB,YAAmBssB,EACAD,EACAD,EACAmB,EAAa,EAAAuC,oBAC9BxM,QAJiB,KAAAgJ,iBACA,KAAAD,cACA,KAAAD,aACA,KAAAmB,IAEnB,GAGF,sBAAa/D,sBAAsBgH,sBACjCxwB,YAAmBulB,GAAsB,EACtBgI,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GAFF,KAAAhI,cACA,KAAAgI,IAEnB,GAGF,uBAAalC,uBAAuBgF,gBAClCrwB,YAAmButB,EAAa,EAAAuC,oBAC9BxM,MAAMiK,GADW,KAAAA,IAEnB,GAGF,MAAawD,yBACX,YAA6BzL,GAAA,KAAAA,OAAgB,EAD/C,oDAIA,yBAAa0B,yBAAyB+J,yBACpC/wB,YAAYslB,EACO0L,EACAnK,GACjBvD,MAAMgC,GAFW,KAAA0L,SACA,KAAAnK,cAEnB,GAGF,kBAAaL,kBAAkBgK,sBAC7BxwB,YAAmBixB,EACA1L,GAAsB,EACtBgI,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GAHF,KAAA0D,UACA,KAAA1L,cACA,KAAAgI,IAEnB,GAGF,MAAa2D,yBAAyBH,yBACpC/wB,YAAYslB,EACO6L,EACAC,GACjB9N,MAAMgC,GAFW,KAAA6L,QACA,KAAAC,WAEnB,EALF,oCAQA,MAAa5J,kBAAkBgJ,sBAEtB5K,cAAcyL,EACAC,GACnB,MAAMC,EAA8B,IAAI33B,MAExC,IAAI7D,EAAI,EACR,IAAK,MAAO2wB,EAAOY,KAAcgK,EAC/BC,EAAQh4B,KAAK,IAAI23B,iBAAiBn7B,EAAG2wB,EAAOY,MAC1CvxB,EAGJ,OAAO,IAAIyxB,UAAU+J,EAASF,EAChC,CACArxB,YAAmBwxB,EACAjM,GAAsB,EACtBgI,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GAHF,KAAAiE,YACA,KAAAjM,cACA,KAAAgI,IAEnB,EAlBF,sBAqBA,MAAakE,yBAAyBV,yBACpC/wB,YAAYslB,EACOoM,EACAC,GACjBrO,MAAMgC,GAFW,KAAAoM,WACA,KAAAC,UAEnB,EALF,oCAQA,MAAa/J,kBAAkB4I,sBAEtB5K,cAAcyL,EACAC,GACnB,MAAMC,EAA8B,IAAI33B,MAExC,IAAI7D,EAAI,EACR,IAAK,MAAM67B,KAAON,EAChBC,EAAQh4B,KAAK,IAAIk4B,iBAAiB17B,EAAG67B,EAAI,GAAIA,EAAI,OAC/C77B,EAGJ,OAAO,IAAI6xB,UAAU2J,EAASF,EAChC,CACArxB,YAAmB6xB,EACAtM,GAAsB,EACtBgI,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GAHF,KAAAsE,UACA,KAAAtM,cACA,KAAAgI,IAEnB,EAlBF,sBAqBA,sBAAavF,sBAAsBwI,sBACjCxwB,YAAmBulB,EACAuM,EACAzJ,EACAkF,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GAJF,KAAAhI,cACA,KAAAuM,cACA,KAAAzJ,aACA,KAAAkF,IAEnB,GAGF,sBAAatF,sBAAsBuI,sBACjCxwB,YAAmBulB,EACAuM,EACAzJ,EACAH,EACAqF,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GALF,KAAAhI,cACA,KAAAuM,cACA,KAAAzJ,aACA,KAAAH,OACA,KAAAqF,IAEnB,GAGF,mBAAa1E,mBAAmB2H,sBAC9BxwB,YACSulB,EACAwM,EACAC,EACAC,EACA1E,EAAa,EAAAuC,oBAClBxM,MAAMiC,EAAagI,GALd,KAAAhI,cACA,KAAAwM,WACA,KAAAC,iBACA,KAAAC,UACA,KAAA1E,IAET,GAGF,oBAAarE,oBAAoBsH,sBAC/BxwB,YACSulB,EACAwM,EACA7J,EACAgK,EACA3E,EAAa,EAAAuC,oBAClBxM,MAAMiC,EAAagI,GALd,KAAAhI,cACA,KAAAwM,WACA,KAAA7J,OACA,KAAAgK,oBACA,KAAA3E,IAET,GAGF,wBAAanE,wBAAwBoH,sBACnCxwB,YACSulB,EACAwM,EACAxE,EAAa,EAAAuC,oBAClBxM,MAAMiC,EAAagI,GAHd,KAAAhI,cACA,KAAAwM,WACA,KAAAxE,IAET,GAGF,0BAAajE,0BAA0BkH,sBACrCxwB,YACSulB,EACAwM,EACAxE,EAAa,EAAAuC,oBAClBxM,MAAMiC,EAAagI,GAHd,KAAAhI,cACA,KAAAwM,WACA,KAAAxE,IAET,GAGF,mBAAaxE,mBAAmByH,sBAC9BxwB,YAAmBulB,EACAwM,EACA7J,EACAqF,EAAa,EAAAuC,oBAC9BxM,MAAMiC,EAAagI,GAJF,KAAAhI,cACA,KAAAwM,WACA,KAAA7J,OACA,KAAAqF,IAEnB,E,qhBC3ZF,iCACA,+CACA,kEACA,2DACA,+CACA,mDACA,iCACA,qCACA,gCACA,kC,yiBCPA,6CAEA,kCAEA,MAAanK,0CAA0C,EAAApb,aAIrD,YAA2Bqb,GACzBC,QADyB,KAAAD,OAQpB,KAAAiH,QAAU,IAA2B,EAAD,gCACzC,MAAM6H,EAAK,IAAIC,UAAU53B,KAAK6oB,MAC9B,IAAI/Q,EACA+f,EACJ,MAAMt6B,EAAI,IAAIyK,SAAc,CAACC,EAASC,KAAa4P,EAAM7P,EAAS4vB,EAAM3vB,CAAM,IAIxE4vB,iBAAoB/N,GAAO8N,IAgBjC,OAfAF,EAAGjnB,iBAAiB,QAAeqZ,GAAO,EAAD,gCACvC/pB,KAAKkqB,IAAMyN,EACX,UACQ33B,KAAK+3B,aACX/3B,KAAKkqB,IAAIxZ,iBAAiB,WAAYwY,IAAUlpB,KAAKspB,qBAAqBJ,EAAI,IAC9ElpB,KAAKkqB,IAAIrZ,oBAAoB,QAASinB,kBACtC93B,KAAKkqB,IAAIxZ,iBAAiB,QAAS1Q,KAAKswB,YAExCxY,G,CACA,MAAOpF,GACPhD,QAAQ6D,IAAIb,GACZmlB,G,CAEJ,MACAF,EAAGjnB,iBAAiB,QAASonB,kBACtBv6B,CACT,IAEO,KAAA+yB,WAAa,IAA2B,EAAD,gCACvCtwB,KAAKmpB,YAGVnpB,KAAKkqB,IAAK8N,QACVh4B,KAAKkqB,SAAM5pB,EACXN,KAAKmP,KAAK,cACZ,IASO,KAAA4oB,WAAa,IAA2B,EAAD,gCAC5C,OAAO/vB,QAAQC,SACjB,GAnDA,CAEWkhB,gBACT,YAAoB7oB,IAAbN,KAAKkqB,GACd,CAsCOb,YAAYH,GACjB,IAAKlpB,KAAKmpB,UACR,MAAM,IAAI7pB,MAAM,mDAElBU,KAAKkqB,IAAKuB,KAAK,IAAMvC,EAAI1O,SAAW,IACtC,CAMU8O,qBAAqBC,GAE7B,GADA7Z,QAAQ6D,IAAI,iCACgB,iBAAhBgW,EAAU,KAAgB,CACpC,MAAMC,GAAO,IAAAC,UAASF,EAAMnhB,MAC5BpI,KAAKmP,KAAK,UAAWqa,E,MAChB,GAAID,EAAMnhB,gBAAgBwhB,KAAM,CACrC,MAAMC,EAAS,IAAIC,WACnBD,EAAOnZ,iBAAiB,QAASqZ,IAAS/pB,KAAKgqB,aAAaD,EAAG,IAC/DF,EAAOI,WAAWV,EAAMnhB,K,CAE5B,CAEU4hB,aAAaT,GACrB,MAAMC,GAAO,IAAAC,UAAUF,EAAMlnB,OAAsB4J,QACnDjM,KAAKmP,KAAK,UAAWqa,EACvB,EA1EF,qE,8xBCNA,uCACA,gCAEA,8BAAaR,sBAIX,YAA2BiP,GAAA,KAAAA,cAHjB,KAAAC,SAAmB,EACnB,KAAAC,aAA6F,IAAIt2B,GAG3G,CAKOunB,uBAAuBF,GAM5B,IAAIpR,EACA+f,EANA73B,KAAKi4B,cACP/O,EAAI6J,GAAK/yB,KAAKk4B,SAEdl4B,KAAKk4B,UAAY,GAInB,MAAME,EAAa,IAAIpwB,SAAkC,CAACC,EAASC,KAAa4P,EAAM7P,EAAS4vB,EAAM3vB,CAAM,IAE3G,OADAlI,KAAKm4B,aAAa71B,IAAI4mB,EAAI6J,GAAI,CAACjb,EAAK+f,IAC7BO,CACT,CAEOzO,sBAAsBH,GAC3B,MAAM6O,EAAsC,GAC5C,IAAK,MAAM5e,KAAK+P,EACd,GAAI/P,EAAEsZ,KAAO1I,EAAS8I,mBAAqBnzB,KAAKm4B,aAAa/1B,IAAIqX,EAAEsZ,IAAnE,CACE,MAAOjb,EAAK+f,GAAO73B,KAAKm4B,aAAa/7B,IAAIqd,EAAEsZ,IAG3C,GAAItZ,EAAElN,OAAS8d,EAAS/qB,MAAO,CAC7Bu4B,EAAI,EAAAzN,kBAAkByB,UAAUpS,IAChC,Q,CAEF3B,EAAI2B,E,MAGJ4e,EAAQt5B,KAAK0a,GAGjB,OAAO4e,CACT,E","file":"buttplug.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"buttplug-commonjs\"] = factory();\n\telse\n\t\troot[\"Buttplug\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { TransformOperationExecutor } from './TransformOperationExecutor';\nimport { TransformationType } from './enums';\nimport { defaultOptions } from './constants/default-options.constant';\nvar ClassTransformer = /** @class */ (function () {\n function ClassTransformer() {\n }\n ClassTransformer.prototype.instanceToPlain = function (object, options) {\n var executor = new TransformOperationExecutor(TransformationType.CLASS_TO_PLAIN, __assign(__assign({}, defaultOptions), options));\n return executor.transform(undefined, object, undefined, undefined, undefined, undefined);\n };\n ClassTransformer.prototype.classToPlainFromExist = function (object, plainObject, options) {\n var executor = new TransformOperationExecutor(TransformationType.CLASS_TO_PLAIN, __assign(__assign({}, defaultOptions), options));\n return executor.transform(plainObject, object, undefined, undefined, undefined, undefined);\n };\n ClassTransformer.prototype.plainToInstance = function (cls, plain, options) {\n var executor = new TransformOperationExecutor(TransformationType.PLAIN_TO_CLASS, __assign(__assign({}, defaultOptions), options));\n return executor.transform(undefined, plain, cls, undefined, undefined, undefined);\n };\n ClassTransformer.prototype.plainToClassFromExist = function (clsObject, plain, options) {\n var executor = new TransformOperationExecutor(TransformationType.PLAIN_TO_CLASS, __assign(__assign({}, defaultOptions), options));\n return executor.transform(clsObject, plain, undefined, undefined, undefined, undefined);\n };\n ClassTransformer.prototype.instanceToInstance = function (object, options) {\n var executor = new TransformOperationExecutor(TransformationType.CLASS_TO_CLASS, __assign(__assign({}, defaultOptions), options));\n return executor.transform(undefined, object, undefined, undefined, undefined, undefined);\n };\n ClassTransformer.prototype.classToClassFromExist = function (object, fromObject, options) {\n var executor = new TransformOperationExecutor(TransformationType.CLASS_TO_CLASS, __assign(__assign({}, defaultOptions), options));\n return executor.transform(fromObject, object, undefined, undefined, undefined, undefined);\n };\n ClassTransformer.prototype.serialize = function (object, options) {\n return JSON.stringify(this.instanceToPlain(object, options));\n };\n /**\n * Deserializes given JSON string to a object of the given class.\n */\n ClassTransformer.prototype.deserialize = function (cls, json, options) {\n var jsonObject = JSON.parse(json);\n return this.plainToInstance(cls, jsonObject, options);\n };\n /**\n * Deserializes given JSON string to an array of objects of the given class.\n */\n ClassTransformer.prototype.deserializeArray = function (cls, json, options) {\n var jsonObject = JSON.parse(json);\n return this.plainToInstance(cls, jsonObject, options);\n };\n return ClassTransformer;\n}());\nexport { ClassTransformer };\n//# sourceMappingURL=ClassTransformer.js.map","import { TransformationType } from './enums';\n/**\n * Storage all library metadata.\n */\nvar MetadataStorage = /** @class */ (function () {\n function MetadataStorage() {\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n this._typeMetadatas = new Map();\n this._transformMetadatas = new Map();\n this._exposeMetadatas = new Map();\n this._excludeMetadatas = new Map();\n this._ancestorsMap = new Map();\n }\n // -------------------------------------------------------------------------\n // Adder Methods\n // -------------------------------------------------------------------------\n MetadataStorage.prototype.addTypeMetadata = function (metadata) {\n if (!this._typeMetadatas.has(metadata.target)) {\n this._typeMetadatas.set(metadata.target, new Map());\n }\n this._typeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);\n };\n MetadataStorage.prototype.addTransformMetadata = function (metadata) {\n if (!this._transformMetadatas.has(metadata.target)) {\n this._transformMetadatas.set(metadata.target, new Map());\n }\n if (!this._transformMetadatas.get(metadata.target).has(metadata.propertyName)) {\n this._transformMetadatas.get(metadata.target).set(metadata.propertyName, []);\n }\n this._transformMetadatas.get(metadata.target).get(metadata.propertyName).push(metadata);\n };\n MetadataStorage.prototype.addExposeMetadata = function (metadata) {\n if (!this._exposeMetadatas.has(metadata.target)) {\n this._exposeMetadatas.set(metadata.target, new Map());\n }\n this._exposeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);\n };\n MetadataStorage.prototype.addExcludeMetadata = function (metadata) {\n if (!this._excludeMetadatas.has(metadata.target)) {\n this._excludeMetadatas.set(metadata.target, new Map());\n }\n this._excludeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n MetadataStorage.prototype.findTransformMetadatas = function (target, propertyName, transformationType) {\n return this.findMetadatas(this._transformMetadatas, target, propertyName).filter(function (metadata) {\n if (!metadata.options)\n return true;\n if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)\n return true;\n if (metadata.options.toClassOnly === true) {\n return (transformationType === TransformationType.CLASS_TO_CLASS ||\n transformationType === TransformationType.PLAIN_TO_CLASS);\n }\n if (metadata.options.toPlainOnly === true) {\n return transformationType === TransformationType.CLASS_TO_PLAIN;\n }\n return true;\n });\n };\n MetadataStorage.prototype.findExcludeMetadata = function (target, propertyName) {\n return this.findMetadata(this._excludeMetadatas, target, propertyName);\n };\n MetadataStorage.prototype.findExposeMetadata = function (target, propertyName) {\n return this.findMetadata(this._exposeMetadatas, target, propertyName);\n };\n MetadataStorage.prototype.findExposeMetadataByCustomName = function (target, name) {\n return this.getExposedMetadatas(target).find(function (metadata) {\n return metadata.options && metadata.options.name === name;\n });\n };\n MetadataStorage.prototype.findTypeMetadata = function (target, propertyName) {\n return this.findMetadata(this._typeMetadatas, target, propertyName);\n };\n MetadataStorage.prototype.getStrategy = function (target) {\n var excludeMap = this._excludeMetadatas.get(target);\n var exclude = excludeMap && excludeMap.get(undefined);\n var exposeMap = this._exposeMetadatas.get(target);\n var expose = exposeMap && exposeMap.get(undefined);\n if ((exclude && expose) || (!exclude && !expose))\n return 'none';\n return exclude ? 'excludeAll' : 'exposeAll';\n };\n MetadataStorage.prototype.getExposedMetadatas = function (target) {\n return this.getMetadata(this._exposeMetadatas, target);\n };\n MetadataStorage.prototype.getExcludedMetadatas = function (target) {\n return this.getMetadata(this._excludeMetadatas, target);\n };\n MetadataStorage.prototype.getExposedProperties = function (target, transformationType) {\n return this.getExposedMetadatas(target)\n .filter(function (metadata) {\n if (!metadata.options)\n return true;\n if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)\n return true;\n if (metadata.options.toClassOnly === true) {\n return (transformationType === TransformationType.CLASS_TO_CLASS ||\n transformationType === TransformationType.PLAIN_TO_CLASS);\n }\n if (metadata.options.toPlainOnly === true) {\n return transformationType === TransformationType.CLASS_TO_PLAIN;\n }\n return true;\n })\n .map(function (metadata) { return metadata.propertyName; });\n };\n MetadataStorage.prototype.getExcludedProperties = function (target, transformationType) {\n return this.getExcludedMetadatas(target)\n .filter(function (metadata) {\n if (!metadata.options)\n return true;\n if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true)\n return true;\n if (metadata.options.toClassOnly === true) {\n return (transformationType === TransformationType.CLASS_TO_CLASS ||\n transformationType === TransformationType.PLAIN_TO_CLASS);\n }\n if (metadata.options.toPlainOnly === true) {\n return transformationType === TransformationType.CLASS_TO_PLAIN;\n }\n return true;\n })\n .map(function (metadata) { return metadata.propertyName; });\n };\n MetadataStorage.prototype.clear = function () {\n this._typeMetadatas.clear();\n this._exposeMetadatas.clear();\n this._excludeMetadatas.clear();\n this._ancestorsMap.clear();\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n MetadataStorage.prototype.getMetadata = function (metadatas, target) {\n var metadataFromTargetMap = metadatas.get(target);\n var metadataFromTarget;\n if (metadataFromTargetMap) {\n metadataFromTarget = Array.from(metadataFromTargetMap.values()).filter(function (meta) { return meta.propertyName !== undefined; });\n }\n var metadataFromAncestors = [];\n for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {\n var ancestor = _a[_i];\n var ancestorMetadataMap = metadatas.get(ancestor);\n if (ancestorMetadataMap) {\n var metadataFromAncestor = Array.from(ancestorMetadataMap.values()).filter(function (meta) { return meta.propertyName !== undefined; });\n metadataFromAncestors.push.apply(metadataFromAncestors, metadataFromAncestor);\n }\n }\n return metadataFromAncestors.concat(metadataFromTarget || []);\n };\n MetadataStorage.prototype.findMetadata = function (metadatas, target, propertyName) {\n var metadataFromTargetMap = metadatas.get(target);\n if (metadataFromTargetMap) {\n var metadataFromTarget = metadataFromTargetMap.get(propertyName);\n if (metadataFromTarget) {\n return metadataFromTarget;\n }\n }\n for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {\n var ancestor = _a[_i];\n var ancestorMetadataMap = metadatas.get(ancestor);\n if (ancestorMetadataMap) {\n var ancestorResult = ancestorMetadataMap.get(propertyName);\n if (ancestorResult) {\n return ancestorResult;\n }\n }\n }\n return undefined;\n };\n MetadataStorage.prototype.findMetadatas = function (metadatas, target, propertyName) {\n var metadataFromTargetMap = metadatas.get(target);\n var metadataFromTarget;\n if (metadataFromTargetMap) {\n metadataFromTarget = metadataFromTargetMap.get(propertyName);\n }\n var metadataFromAncestorsTarget = [];\n for (var _i = 0, _a = this.getAncestors(target); _i < _a.length; _i++) {\n var ancestor = _a[_i];\n var ancestorMetadataMap = metadatas.get(ancestor);\n if (ancestorMetadataMap) {\n if (ancestorMetadataMap.has(propertyName)) {\n metadataFromAncestorsTarget.push.apply(metadataFromAncestorsTarget, ancestorMetadataMap.get(propertyName));\n }\n }\n }\n return metadataFromAncestorsTarget\n .slice()\n .reverse()\n .concat((metadataFromTarget || []).slice().reverse());\n };\n MetadataStorage.prototype.getAncestors = function (target) {\n if (!target)\n return [];\n if (!this._ancestorsMap.has(target)) {\n var ancestors = [];\n for (var baseClass = Object.getPrototypeOf(target.prototype.constructor); typeof baseClass.prototype !== 'undefined'; baseClass = Object.getPrototypeOf(baseClass.prototype.constructor)) {\n ancestors.push(baseClass);\n }\n this._ancestorsMap.set(target, ancestors);\n }\n return this._ancestorsMap.get(target);\n };\n return MetadataStorage;\n}());\nexport { MetadataStorage };\n//# sourceMappingURL=MetadataStorage.js.map","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { defaultMetadataStorage } from './storage';\nimport { TransformationType } from './enums';\nimport { getGlobal, isPromise } from './utils';\nfunction instantiateArrayType(arrayType) {\n var array = new arrayType();\n if (!(array instanceof Set) && !('push' in array)) {\n return [];\n }\n return array;\n}\nvar TransformOperationExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TransformOperationExecutor(transformationType, options) {\n this.transformationType = transformationType;\n this.options = options;\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n this.recursionStack = new Set();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n TransformOperationExecutor.prototype.transform = function (source, value, targetType, arrayType, isMap, level) {\n var _this = this;\n if (level === void 0) { level = 0; }\n if (Array.isArray(value) || value instanceof Set) {\n var newValue_1 = arrayType && this.transformationType === TransformationType.PLAIN_TO_CLASS\n ? instantiateArrayType(arrayType)\n : [];\n value.forEach(function (subValue, index) {\n var subSource = source ? source[index] : undefined;\n if (!_this.options.enableCircularCheck || !_this.isCircular(subValue)) {\n var realTargetType = void 0;\n if (typeof targetType !== 'function' &&\n targetType &&\n targetType.options &&\n targetType.options.discriminator &&\n targetType.options.discriminator.property &&\n targetType.options.discriminator.subTypes) {\n if (_this.transformationType === TransformationType.PLAIN_TO_CLASS) {\n realTargetType = targetType.options.discriminator.subTypes.find(function (subType) {\n return subType.name === subValue[targetType.options.discriminator.property];\n });\n var options = { newObject: newValue_1, object: subValue, property: undefined };\n var newType = targetType.typeFunction(options);\n realTargetType === undefined ? (realTargetType = newType) : (realTargetType = realTargetType.value);\n if (!targetType.options.keepDiscriminatorProperty)\n delete subValue[targetType.options.discriminator.property];\n }\n if (_this.transformationType === TransformationType.CLASS_TO_CLASS) {\n realTargetType = subValue.constructor;\n }\n if (_this.transformationType === TransformationType.CLASS_TO_PLAIN) {\n subValue[targetType.options.discriminator.property] = targetType.options.discriminator.subTypes.find(function (subType) { return subType.value === subValue.constructor; }).name;\n }\n }\n else {\n realTargetType = targetType;\n }\n var value_1 = _this.transform(subSource, subValue, realTargetType, undefined, subValue instanceof Map, level + 1);\n if (newValue_1 instanceof Set) {\n newValue_1.add(value_1);\n }\n else {\n newValue_1.push(value_1);\n }\n }\n else if (_this.transformationType === TransformationType.CLASS_TO_CLASS) {\n if (newValue_1 instanceof Set) {\n newValue_1.add(subValue);\n }\n else {\n newValue_1.push(subValue);\n }\n }\n });\n return newValue_1;\n }\n else if (targetType === String && !isMap) {\n if (value === null || value === undefined)\n return value;\n return String(value);\n }\n else if (targetType === Number && !isMap) {\n if (value === null || value === undefined)\n return value;\n return Number(value);\n }\n else if (targetType === Boolean && !isMap) {\n if (value === null || value === undefined)\n return value;\n return Boolean(value);\n }\n else if ((targetType === Date || value instanceof Date) && !isMap) {\n if (value instanceof Date) {\n return new Date(value.valueOf());\n }\n if (value === null || value === undefined)\n return value;\n return new Date(value);\n }\n else if (!!getGlobal().Buffer && (targetType === Buffer || value instanceof Buffer) && !isMap) {\n if (value === null || value === undefined)\n return value;\n return Buffer.from(value);\n }\n else if (isPromise(value) && !isMap) {\n return new Promise(function (resolve, reject) {\n value.then(function (data) { return resolve(_this.transform(undefined, data, targetType, undefined, undefined, level + 1)); }, reject);\n });\n }\n else if (!isMap && value !== null && typeof value === 'object' && typeof value.then === 'function') {\n // Note: We should not enter this, as promise has been handled above\n // This option simply returns the Promise preventing a JS error from happening and should be an inaccessible path.\n return value; // skip promise transformation\n }\n else if (typeof value === 'object' && value !== null) {\n // try to guess the type\n if (!targetType && value.constructor !== Object /* && TransformationType === TransformationType.CLASS_TO_PLAIN*/)\n if (!Array.isArray(value) && value.constructor === Array) {\n // Somebody attempts to convert special Array like object to Array, eg:\n // const evilObject = { '100000000': '100000000', __proto__: [] };\n // This could be used to cause Denial-of-service attack so we don't allow it.\n // See prevent-array-bomb.spec.ts for more details.\n }\n else {\n // We are good we can use the built-in constructor\n targetType = value.constructor;\n }\n if (!targetType && source)\n targetType = source.constructor;\n if (this.options.enableCircularCheck) {\n // add transformed type to prevent circular references\n this.recursionStack.add(value);\n }\n var keys = this.getKeys(targetType, value, isMap);\n var newValue = source ? source : {};\n if (!source &&\n (this.transformationType === TransformationType.PLAIN_TO_CLASS ||\n this.transformationType === TransformationType.CLASS_TO_CLASS)) {\n if (isMap) {\n newValue = new Map();\n }\n else if (targetType) {\n newValue = new targetType();\n }\n else {\n newValue = {};\n }\n }\n var _loop_1 = function (key) {\n if (key === '__proto__' || key === 'constructor') {\n return \"continue\";\n }\n var valueKey = key;\n var newValueKey = key, propertyName = key;\n if (!this_1.options.ignoreDecorators && targetType) {\n if (this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {\n var exposeMetadata = defaultMetadataStorage.findExposeMetadataByCustomName(targetType, key);\n if (exposeMetadata) {\n propertyName = exposeMetadata.propertyName;\n newValueKey = exposeMetadata.propertyName;\n }\n }\n else if (this_1.transformationType === TransformationType.CLASS_TO_PLAIN ||\n this_1.transformationType === TransformationType.CLASS_TO_CLASS) {\n var exposeMetadata = defaultMetadataStorage.findExposeMetadata(targetType, key);\n if (exposeMetadata && exposeMetadata.options && exposeMetadata.options.name) {\n newValueKey = exposeMetadata.options.name;\n }\n }\n }\n // get a subvalue\n var subValue = undefined;\n if (this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {\n /**\n * This section is added for the following report:\n * https://github.com/typestack/class-transformer/issues/596\n *\n * We should not call functions or constructors when transforming to class.\n */\n subValue = value[valueKey];\n }\n else {\n if (value instanceof Map) {\n subValue = value.get(valueKey);\n }\n else if (value[valueKey] instanceof Function) {\n subValue = value[valueKey]();\n }\n else {\n subValue = value[valueKey];\n }\n }\n // determine a type\n var type = undefined, isSubValueMap = subValue instanceof Map;\n if (targetType && isMap) {\n type = targetType;\n }\n else if (targetType) {\n var metadata_1 = defaultMetadataStorage.findTypeMetadata(targetType, propertyName);\n if (metadata_1) {\n var options = { newObject: newValue, object: value, property: propertyName };\n var newType = metadata_1.typeFunction ? metadata_1.typeFunction(options) : metadata_1.reflectedType;\n if (metadata_1.options &&\n metadata_1.options.discriminator &&\n metadata_1.options.discriminator.property &&\n metadata_1.options.discriminator.subTypes) {\n if (!(value[valueKey] instanceof Array)) {\n if (this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {\n type = metadata_1.options.discriminator.subTypes.find(function (subType) {\n if (subValue && subValue instanceof Object && metadata_1.options.discriminator.property in subValue) {\n return subType.name === subValue[metadata_1.options.discriminator.property];\n }\n });\n type === undefined ? (type = newType) : (type = type.value);\n if (!metadata_1.options.keepDiscriminatorProperty) {\n if (subValue && subValue instanceof Object && metadata_1.options.discriminator.property in subValue) {\n delete subValue[metadata_1.options.discriminator.property];\n }\n }\n }\n if (this_1.transformationType === TransformationType.CLASS_TO_CLASS) {\n type = subValue.constructor;\n }\n if (this_1.transformationType === TransformationType.CLASS_TO_PLAIN) {\n if (subValue) {\n subValue[metadata_1.options.discriminator.property] = metadata_1.options.discriminator.subTypes.find(function (subType) { return subType.value === subValue.constructor; }).name;\n }\n }\n }\n else {\n type = metadata_1;\n }\n }\n else {\n type = newType;\n }\n isSubValueMap = isSubValueMap || metadata_1.reflectedType === Map;\n }\n else if (this_1.options.targetMaps) {\n // try to find a type in target maps\n this_1.options.targetMaps\n .filter(function (map) { return map.target === targetType && !!map.properties[propertyName]; })\n .forEach(function (map) { return (type = map.properties[propertyName]); });\n }\n else if (this_1.options.enableImplicitConversion &&\n this_1.transformationType === TransformationType.PLAIN_TO_CLASS) {\n // if we have no registererd type via the @Type() decorator then we check if we have any\n // type declarations in reflect-metadata (type declaration is emited only if some decorator is added to the property.)\n var reflectedType = Reflect.getMetadata('design:type', targetType.prototype, propertyName);\n if (reflectedType) {\n type = reflectedType;\n }\n }\n }\n // if value is an array try to get its custom array type\n var arrayType_1 = Array.isArray(value[valueKey])\n ? this_1.getReflectedType(targetType, propertyName)\n : undefined;\n // const subValueKey = TransformationType === TransformationType.PLAIN_TO_CLASS && newKeyName ? newKeyName : key;\n var subSource = source ? source[valueKey] : undefined;\n // if its deserialization then type if required\n // if we uncomment this types like string[] will not work\n // if (this.transformationType === TransformationType.PLAIN_TO_CLASS && !type && subValue instanceof Object && !(subValue instanceof Date))\n // throw new Error(`Cannot determine type for ${(targetType as any).name }.${propertyName}, did you forget to specify a @Type?`);\n // if newValue is a source object that has method that match newKeyName then skip it\n if (newValue.constructor.prototype) {\n var descriptor = Object.getOwnPropertyDescriptor(newValue.constructor.prototype, newValueKey);\n if ((this_1.transformationType === TransformationType.PLAIN_TO_CLASS ||\n this_1.transformationType === TransformationType.CLASS_TO_CLASS) &&\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ((descriptor && !descriptor.set) || newValue[newValueKey] instanceof Function))\n return \"continue\";\n }\n if (!this_1.options.enableCircularCheck || !this_1.isCircular(subValue)) {\n var transformKey = this_1.transformationType === TransformationType.PLAIN_TO_CLASS ? newValueKey : key;\n var finalValue = void 0;\n if (this_1.transformationType === TransformationType.CLASS_TO_PLAIN) {\n // Get original value\n finalValue = value[transformKey];\n // Apply custom transformation\n finalValue = this_1.applyCustomTransformations(finalValue, targetType, transformKey, value, this_1.transformationType);\n // If nothing change, it means no custom transformation was applied, so use the subValue.\n finalValue = value[transformKey] === finalValue ? subValue : finalValue;\n // Apply the default transformation\n finalValue = this_1.transform(subSource, finalValue, type, arrayType_1, isSubValueMap, level + 1);\n }\n else {\n if (subValue === undefined && this_1.options.exposeDefaultValues) {\n // Set default value if nothing provided\n finalValue = newValue[newValueKey];\n }\n else {\n finalValue = this_1.transform(subSource, subValue, type, arrayType_1, isSubValueMap, level + 1);\n finalValue = this_1.applyCustomTransformations(finalValue, targetType, transformKey, value, this_1.transformationType);\n }\n }\n if (finalValue !== undefined || this_1.options.exposeUnsetFields) {\n if (newValue instanceof Map) {\n newValue.set(newValueKey, finalValue);\n }\n else {\n newValue[newValueKey] = finalValue;\n }\n }\n }\n else if (this_1.transformationType === TransformationType.CLASS_TO_CLASS) {\n var finalValue = subValue;\n finalValue = this_1.applyCustomTransformations(finalValue, targetType, key, value, this_1.transformationType);\n if (finalValue !== undefined || this_1.options.exposeUnsetFields) {\n if (newValue instanceof Map) {\n newValue.set(newValueKey, finalValue);\n }\n else {\n newValue[newValueKey] = finalValue;\n }\n }\n }\n };\n var this_1 = this;\n // traverse over keys\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n _loop_1(key);\n }\n if (this.options.enableCircularCheck) {\n this.recursionStack.delete(value);\n }\n return newValue;\n }\n else {\n return value;\n }\n };\n TransformOperationExecutor.prototype.applyCustomTransformations = function (value, target, key, obj, transformationType) {\n var _this = this;\n var metadatas = defaultMetadataStorage.findTransformMetadatas(target, key, this.transformationType);\n // apply versioning options\n if (this.options.version !== undefined) {\n metadatas = metadatas.filter(function (metadata) {\n if (!metadata.options)\n return true;\n return _this.checkVersion(metadata.options.since, metadata.options.until);\n });\n }\n // apply grouping options\n if (this.options.groups && this.options.groups.length) {\n metadatas = metadatas.filter(function (metadata) {\n if (!metadata.options)\n return true;\n return _this.checkGroups(metadata.options.groups);\n });\n }\n else {\n metadatas = metadatas.filter(function (metadata) {\n return !metadata.options || !metadata.options.groups || !metadata.options.groups.length;\n });\n }\n metadatas.forEach(function (metadata) {\n value = metadata.transformFn({ value: value, key: key, obj: obj, type: transformationType, options: _this.options });\n });\n return value;\n };\n // preventing circular references\n TransformOperationExecutor.prototype.isCircular = function (object) {\n return this.recursionStack.has(object);\n };\n TransformOperationExecutor.prototype.getReflectedType = function (target, propertyName) {\n if (!target)\n return undefined;\n var meta = defaultMetadataStorage.findTypeMetadata(target, propertyName);\n return meta ? meta.reflectedType : undefined;\n };\n TransformOperationExecutor.prototype.getKeys = function (target, object, isMap) {\n var _this = this;\n // determine exclusion strategy\n var strategy = defaultMetadataStorage.getStrategy(target);\n if (strategy === 'none')\n strategy = this.options.strategy || 'exposeAll'; // exposeAll is default strategy\n // get all keys that need to expose\n var keys = [];\n if (strategy === 'exposeAll' || isMap) {\n if (object instanceof Map) {\n keys = Array.from(object.keys());\n }\n else {\n keys = Object.keys(object);\n }\n }\n if (isMap) {\n // expose & exclude do not apply for map keys only to fields\n return keys;\n }\n /**\n * If decorators are ignored but we don't want the extraneous values, then we use the\n * metadata to decide which property is needed, but doesn't apply the decorator effect.\n */\n if (this.options.ignoreDecorators && this.options.excludeExtraneousValues && target) {\n var exposedProperties = defaultMetadataStorage.getExposedProperties(target, this.transformationType);\n var excludedProperties = defaultMetadataStorage.getExcludedProperties(target, this.transformationType);\n keys = __spreadArray(__spreadArray([], exposedProperties, true), excludedProperties, true);\n }\n if (!this.options.ignoreDecorators && target) {\n // add all exposed to list of keys\n var exposedProperties = defaultMetadataStorage.getExposedProperties(target, this.transformationType);\n if (this.transformationType === TransformationType.PLAIN_TO_CLASS) {\n exposedProperties = exposedProperties.map(function (key) {\n var exposeMetadata = defaultMetadataStorage.findExposeMetadata(target, key);\n if (exposeMetadata && exposeMetadata.options && exposeMetadata.options.name) {\n return exposeMetadata.options.name;\n }\n return key;\n });\n }\n if (this.options.excludeExtraneousValues) {\n keys = exposedProperties;\n }\n else {\n keys = keys.concat(exposedProperties);\n }\n // exclude excluded properties\n var excludedProperties_1 = defaultMetadataStorage.getExcludedProperties(target, this.transformationType);\n if (excludedProperties_1.length > 0) {\n keys = keys.filter(function (key) {\n return !excludedProperties_1.includes(key);\n });\n }\n // apply versioning options\n if (this.options.version !== undefined) {\n keys = keys.filter(function (key) {\n var exposeMetadata = defaultMetadataStorage.findExposeMetadata(target, key);\n if (!exposeMetadata || !exposeMetadata.options)\n return true;\n return _this.checkVersion(exposeMetadata.options.since, exposeMetadata.options.until);\n });\n }\n // apply grouping options\n if (this.options.groups && this.options.groups.length) {\n keys = keys.filter(function (key) {\n var exposeMetadata = defaultMetadataStorage.findExposeMetadata(target, key);\n if (!exposeMetadata || !exposeMetadata.options)\n return true;\n return _this.checkGroups(exposeMetadata.options.groups);\n });\n }\n else {\n keys = keys.filter(function (key) {\n var exposeMetadata = defaultMetadataStorage.findExposeMetadata(target, key);\n return (!exposeMetadata ||\n !exposeMetadata.options ||\n !exposeMetadata.options.groups ||\n !exposeMetadata.options.groups.length);\n });\n }\n }\n // exclude prefixed properties\n if (this.options.excludePrefixes && this.options.excludePrefixes.length) {\n keys = keys.filter(function (key) {\n return _this.options.excludePrefixes.every(function (prefix) {\n return key.substr(0, prefix.length) !== prefix;\n });\n });\n }\n // make sure we have unique keys\n keys = keys.filter(function (key, index, self) {\n return self.indexOf(key) === index;\n });\n return keys;\n };\n TransformOperationExecutor.prototype.checkVersion = function (since, until) {\n var decision = true;\n if (decision && since)\n decision = this.options.version >= since;\n if (decision && until)\n decision = this.options.version < until;\n return decision;\n };\n TransformOperationExecutor.prototype.checkGroups = function (groups) {\n if (!groups)\n return true;\n return this.options.groups.some(function (optionGroup) { return groups.includes(optionGroup); });\n };\n return TransformOperationExecutor;\n}());\nexport { TransformOperationExecutor };\n//# sourceMappingURL=TransformOperationExecutor.js.map","/**\n * These are the default options used by any transformation operation.\n */\nexport var defaultOptions = {\n enableCircularCheck: false,\n enableImplicitConversion: false,\n excludeExtraneousValues: false,\n excludePrefixes: undefined,\n exposeDefaultValues: false,\n exposeUnsetFields: true,\n groups: undefined,\n ignoreDecorators: false,\n strategy: undefined,\n targetMaps: undefined,\n version: undefined,\n};\n//# sourceMappingURL=default-options.constant.js.map","import { defaultMetadataStorage } from '../storage';\n/**\n * Marks the given class or property as excluded. By default the property is excluded in both\n * constructorToPlain and plainToConstructor transformations. It can be limited to only one direction\n * via using the `toPlainOnly` or `toClassOnly` option.\n *\n * Can be applied to class definitions and properties.\n */\nexport function Exclude(options) {\n if (options === void 0) { options = {}; }\n /**\n * NOTE: The `propertyName` property must be marked as optional because\n * this decorator used both as a class and a property decorator and the\n * Typescript compiler will freak out if we make it mandatory as a class\n * decorator only receives one parameter.\n */\n return function (object, propertyName) {\n defaultMetadataStorage.addExcludeMetadata({\n target: object instanceof Function ? object : object.constructor,\n propertyName: propertyName,\n options: options,\n });\n };\n}\n//# sourceMappingURL=exclude.decorator.js.map","import { defaultMetadataStorage } from '../storage';\n/**\n * Marks the given class or property as included. By default the property is included in both\n * constructorToPlain and plainToConstructor transformations. It can be limited to only one direction\n * via using the `toPlainOnly` or `toClassOnly` option.\n *\n * Can be applied to class definitions and properties.\n */\nexport function Expose(options) {\n if (options === void 0) { options = {}; }\n /**\n * NOTE: The `propertyName` property must be marked as optional because\n * this decorator used both as a class and a property decorator and the\n * Typescript compiler will freak out if we make it mandatory as a class\n * decorator only receives one parameter.\n */\n return function (object, propertyName) {\n defaultMetadataStorage.addExposeMetadata({\n target: object instanceof Function ? object : object.constructor,\n propertyName: propertyName,\n options: options,\n });\n };\n}\n//# sourceMappingURL=expose.decorator.js.map","export * from './exclude.decorator';\nexport * from './expose.decorator';\nexport * from './transform-instance-to-instance.decorator';\nexport * from './transform-instance-to-plain.decorator';\nexport * from './transform-plain-to-instance.decorator';\nexport * from './transform.decorator';\nexport * from './type.decorator';\n//# sourceMappingURL=index.js.map","import { ClassTransformer } from '../ClassTransformer';\n/**\n * Return the class instance only with the exposed properties.\n *\n * Can be applied to functions and getters/setters only.\n */\nexport function TransformInstanceToInstance(params) {\n return function (target, propertyKey, descriptor) {\n var classTransformer = new ClassTransformer();\n var originalMethod = descriptor.value;\n descriptor.value = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = originalMethod.apply(this, args);\n var isPromise = !!result && (typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function';\n return isPromise\n ? result.then(function (data) { return classTransformer.instanceToInstance(data, params); })\n : classTransformer.instanceToInstance(result, params);\n };\n };\n}\n//# sourceMappingURL=transform-instance-to-instance.decorator.js.map","import { ClassTransformer } from '../ClassTransformer';\n/**\n * Transform the object from class to plain object and return only with the exposed properties.\n *\n * Can be applied to functions and getters/setters only.\n */\nexport function TransformInstanceToPlain(params) {\n return function (target, propertyKey, descriptor) {\n var classTransformer = new ClassTransformer();\n var originalMethod = descriptor.value;\n descriptor.value = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = originalMethod.apply(this, args);\n var isPromise = !!result && (typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function';\n return isPromise\n ? result.then(function (data) { return classTransformer.instanceToPlain(data, params); })\n : classTransformer.instanceToPlain(result, params);\n };\n };\n}\n//# sourceMappingURL=transform-instance-to-plain.decorator.js.map","import { ClassTransformer } from '../ClassTransformer';\n/**\n * Return the class instance only with the exposed properties.\n *\n * Can be applied to functions and getters/setters only.\n */\nexport function TransformPlainToInstance(classType, params) {\n return function (target, propertyKey, descriptor) {\n var classTransformer = new ClassTransformer();\n var originalMethod = descriptor.value;\n descriptor.value = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = originalMethod.apply(this, args);\n var isPromise = !!result && (typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function';\n return isPromise\n ? result.then(function (data) { return classTransformer.plainToInstance(classType, data, params); })\n : classTransformer.plainToInstance(classType, result, params);\n };\n };\n}\n//# sourceMappingURL=transform-plain-to-instance.decorator.js.map","import { defaultMetadataStorage } from '../storage';\n/**\n * Defines a custom logic for value transformation.\n *\n * Can be applied to properties only.\n */\nexport function Transform(transformFn, options) {\n if (options === void 0) { options = {}; }\n return function (target, propertyName) {\n defaultMetadataStorage.addTransformMetadata({\n target: target.constructor,\n propertyName: propertyName,\n transformFn: transformFn,\n options: options,\n });\n };\n}\n//# sourceMappingURL=transform.decorator.js.map","import { defaultMetadataStorage } from '../storage';\n/**\n * Specifies a type of the property.\n * The given TypeFunction can return a constructor. A discriminator can be given in the options.\n *\n * Can be applied to properties only.\n */\nexport function Type(typeFunction, options) {\n if (options === void 0) { options = {}; }\n return function (target, propertyName) {\n var reflectedType = Reflect.getMetadata('design:type', target, propertyName);\n defaultMetadataStorage.addTypeMetadata({\n target: target.constructor,\n propertyName: propertyName,\n reflectedType: reflectedType,\n typeFunction: typeFunction,\n options: options,\n });\n };\n}\n//# sourceMappingURL=type.decorator.js.map","export * from './transformation-type.enum';\n//# sourceMappingURL=index.js.map","export var TransformationType;\n(function (TransformationType) {\n TransformationType[TransformationType[\"PLAIN_TO_CLASS\"] = 0] = \"PLAIN_TO_CLASS\";\n TransformationType[TransformationType[\"CLASS_TO_PLAIN\"] = 1] = \"CLASS_TO_PLAIN\";\n TransformationType[TransformationType[\"CLASS_TO_CLASS\"] = 2] = \"CLASS_TO_CLASS\";\n})(TransformationType || (TransformationType = {}));\n//# sourceMappingURL=transformation-type.enum.js.map","import { ClassTransformer } from './ClassTransformer';\nexport { ClassTransformer } from './ClassTransformer';\nexport * from './decorators';\nexport * from './interfaces';\nexport * from './enums';\nvar classTransformer = new ClassTransformer();\nexport function classToPlain(object, options) {\n return classTransformer.instanceToPlain(object, options);\n}\nexport function instanceToPlain(object, options) {\n return classTransformer.instanceToPlain(object, options);\n}\nexport function classToPlainFromExist(object, plainObject, options) {\n return classTransformer.classToPlainFromExist(object, plainObject, options);\n}\nexport function plainToClass(cls, plain, options) {\n return classTransformer.plainToInstance(cls, plain, options);\n}\nexport function plainToInstance(cls, plain, options) {\n return classTransformer.plainToInstance(cls, plain, options);\n}\nexport function plainToClassFromExist(clsObject, plain, options) {\n return classTransformer.plainToClassFromExist(clsObject, plain, options);\n}\nexport function instanceToInstance(object, options) {\n return classTransformer.instanceToInstance(object, options);\n}\nexport function classToClassFromExist(object, fromObject, options) {\n return classTransformer.classToClassFromExist(object, fromObject, options);\n}\nexport function serialize(object, options) {\n return classTransformer.serialize(object, options);\n}\n/**\n * Deserializes given JSON string to a object of the given class.\n *\n * @deprecated This function is being removed. Please use the following instead:\n * ```\n * instanceToClass(cls, JSON.parse(json), options)\n * ```\n */\nexport function deserialize(cls, json, options) {\n return classTransformer.deserialize(cls, json, options);\n}\n/**\n * Deserializes given JSON string to an array of objects of the given class.\n *\n * @deprecated This function is being removed. Please use the following instead:\n * ```\n * JSON.parse(json).map(value => instanceToClass(cls, value, options))\n * ```\n *\n */\nexport function deserializeArray(cls, json, options) {\n return classTransformer.deserializeArray(cls, json, options);\n}\n//# sourceMappingURL=index.js.map","export {};\n//# sourceMappingURL=class-constructor.type.js.map","export {};\n//# sourceMappingURL=class-transformer-options.interface.js.map","export {};\n//# sourceMappingURL=exclude-options.interface.js.map","export {};\n//# sourceMappingURL=expose-options.interface.js.map","export {};\n//# sourceMappingURL=transform-options.interface.js.map","export {};\n//# sourceMappingURL=type-discriminator-descriptor.interface.js.map","export {};\n//# sourceMappingURL=type-options.interface.js.map","export * from './decorator-options/expose-options.interface';\nexport * from './decorator-options/exclude-options.interface';\nexport * from './decorator-options/transform-options.interface';\nexport * from './decorator-options/type-discriminator-descriptor.interface';\nexport * from './decorator-options/type-options.interface';\nexport * from './metadata/exclude-metadata.interface';\nexport * from './metadata/expose-metadata.interface';\nexport * from './metadata/transform-metadata.interface';\nexport * from './metadata/transform-fn-params.interface';\nexport * from './metadata/type-metadata.interface';\nexport * from './class-constructor.type';\nexport * from './class-transformer-options.interface';\nexport * from './target-map.interface';\nexport * from './type-help-options.interface';\n//# sourceMappingURL=index.js.map","export {};\n//# sourceMappingURL=exclude-metadata.interface.js.map","export {};\n//# sourceMappingURL=expose-metadata.interface.js.map","export {};\n//# sourceMappingURL=transform-fn-params.interface.js.map","export {};\n//# sourceMappingURL=transform-metadata.interface.js.map","export {};\n//# sourceMappingURL=type-metadata.interface.js.map","export {};\n//# sourceMappingURL=target-map.interface.js.map","export {};\n//# sourceMappingURL=type-help-options.interface.js.map","import { MetadataStorage } from './MetadataStorage';\n/**\n * Default metadata storage is used as singleton and can be used to storage all metadatas.\n */\nexport var defaultMetadataStorage = new MetadataStorage();\n//# sourceMappingURL=storage.js.map","/**\n * This function returns the global object across Node and browsers.\n *\n * Note: `globalThis` is the standardized approach however it has been added to\n * Node.js in version 12. We need to include this snippet until Node 12 EOL.\n */\nexport function getGlobal() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: Cannot find name 'window'.\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: Cannot find name 'window'.\n return window;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: Cannot find name 'self'.\n if (typeof self !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: Cannot find name 'self'.\n return self;\n }\n}\n//# sourceMappingURL=get-global.util.js.map","export * from './get-global.util';\nexport * from './is-promise.util';\n//# sourceMappingURL=index.js.map","export function isPromise(p) {\n return p !== null && typeof p === 'object' && typeof p.then === 'function';\n}\n//# sourceMappingURL=is-promise.util.js.map","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\n\r\nimport { IButtplugClientConnector } from \"./IButtplugClientConnector\";\r\nimport { ButtplugMessage } from \"../core/Messages\";\r\nimport { FromJSON } from \"../core/MessageUtils\";\r\nimport { ButtplugMessageSorter } from \"../utils/ButtplugMessageSorter\";\r\nimport { ButtplugBrowserWebsocketConnector } from \"../utils/ButtplugBrowserWebsocketConnector\";\r\n\r\nexport class ButtplugBrowserWebsocketClientConnector extends ButtplugBrowserWebsocketConnector implements IButtplugClientConnector {\r\n\r\n private _sorter: ButtplugMessageSorter = new ButtplugMessageSorter(true);\r\n protected _ws: WebSocket | undefined;\r\n\r\n public constructor(_url: string) {\r\n super(_url);\r\n }\r\n\r\n public get Connected(): boolean {\r\n return this._ws !== undefined;\r\n }\r\n\r\n public Send = async (msg: ButtplugMessage): Promise<ButtplugMessage> => {\r\n if (!this.Connected) {\r\n throw new Error(\"ButtplugClient not connected\");\r\n }\r\n const p = this._sorter.PrepareOutgoingMessage(msg);\r\n this.SendMessage(msg);\r\n return await p;\r\n }\r\n\r\n protected ParseIncomingMessage = (event: MessageEvent) => {\r\n if (typeof (event.data) === \"string\") {\r\n const msgs = FromJSON(event.data);\r\n const emitMsgs = this._sorter.ParseIncomingMessages(msgs);\r\n this.emit(\"message\", emitMsgs);\r\n } else if (event.data instanceof Blob) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", (ev) => { this.OnReaderLoad(ev); });\r\n reader.readAsText(event.data);\r\n }\r\n }\r\n\r\n protected OnReaderLoad(event: Event) {\r\n const msgs = FromJSON((event.target as FileReader).result);\r\n const emitMsgs = this._sorter.ParseIncomingMessages(msgs);\r\n this.emit(\"message\", emitMsgs);\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nimport { ButtplugException } from \"../core/Exceptions\";\r\nimport * as Messages from \"../core/Messages\";\r\n\r\nexport class ButtplugClientConnectorException extends ButtplugException {\r\n public constructor(message: string) {\r\n super(message, Messages.ErrorClass.ERROR_UNKNOWN);\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\nimport * as Messages from \"../core/Messages\";\r\nimport { ButtplugDeviceException, ButtplugException, ButtplugMessageException } from \"../core/Exceptions\";\r\nimport { EventEmitter } from \"events\";\r\n\r\n/**\r\n * Represents an abstract device, capable of taking certain kinds of messages.\r\n */\r\nexport class ButtplugClientDevice extends EventEmitter {\r\n\r\n /**\r\n * Return the name of the device.\r\n */\r\n public get Name(): string {\r\n return this._deviceInfo.DeviceName;\r\n }\r\n\r\n /**\r\n * Return the user set name of the device.\r\n */\r\n public get DisplayName(): string | undefined {\r\n return this._deviceInfo.DeviceDisplayName;\r\n }\r\n \r\n /**\r\n * Return the index of the device.\r\n */\r\n public get Index(): number {\r\n return this._deviceInfo.DeviceIndex;\r\n }\r\n\r\n /**\r\n * Return the index of the device.\r\n */\r\n public get MessageTimingGap(): number | undefined {\r\n return this._deviceInfo.DeviceMessageTimingGap;\r\n }\r\n\r\n /**\r\n * Return a list of message types the device accepts.\r\n */\r\n public get AllowedMessages(): Messages.MessageAttributes {\r\n return this._deviceInfo.DeviceMessages;\r\n }\r\n\r\n public static fromMsg(msg: Messages.DeviceInfo,\r\n sendClosure: (device: ButtplugClientDevice,\r\n msg: Messages.ButtplugDeviceMessage) => Promise<Messages.ButtplugMessage>): ButtplugClientDevice {\r\n return new ButtplugClientDevice(msg,\r\n sendClosure);\r\n }\r\n\r\n // Map of messages and their attributes (feature count, etc...)\r\n private allowedMsgs: Map<string, Messages.MessageAttributes> = new Map<string, Messages.MessageAttributes>();\r\n\r\n /**\r\n * @param _index Index of the device, as created by the device manager.\r\n * @param _name Name of the device.\r\n * @param allowedMsgs Buttplug messages the device can receive.\r\n */\r\n constructor(private _deviceInfo: Messages.DeviceInfo,\r\n private _sendClosure: (device: ButtplugClientDevice,\r\n msg: Messages.ButtplugDeviceMessage) => Promise<Messages.ButtplugMessage>) {\r\n super();\r\n _deviceInfo.DeviceMessages.update();\r\n }\r\n\r\n public async send(msg: Messages.ButtplugDeviceMessage): Promise<Messages.ButtplugMessage> {\r\n // Assume we're getting the closure from ButtplugClient, which does all of\r\n // the index/existence/connection/message checks for us.\r\n return await this._sendClosure(this, msg);\r\n }\r\n\r\n public async sendExpectOk(msg: Messages.ButtplugDeviceMessage): Promise<void> {\r\n const response = await this.send(msg);\r\n switch (response.constructor) {\r\n case Messages.Ok:\r\n return;\r\n case Messages.Error:\r\n throw ButtplugException.FromError(response as Messages.Error);\r\n default:\r\n throw new ButtplugMessageException(`Message type ${response.constructor} not handled by SendMsgExpectOk`); \r\n }\r\n }\r\n\r\n public async scalar(scalar: Messages.ScalarSubcommand | Messages.ScalarSubcommand[]): Promise<void> {\r\n if (Array.isArray(scalar)) {\r\n await this.sendExpectOk(new Messages.ScalarCmd(scalar, this.Index));\r\n } else {\r\n await this.sendExpectOk(new Messages.ScalarCmd([scalar], this.Index));\r\n }\r\n }\r\n\r\n private async scalarCommandBuilder(speed: number | number[], actuator: Messages.ActuatorType) {\r\n let scalarAttrs = this.AllowedMessages.ScalarCmd?.filter((x) => x.ActuatorType == actuator);\r\n if (!scalarAttrs || scalarAttrs.length == 0) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no ${actuator} capabilities`);\r\n }\r\n let cmds: Messages.ScalarSubcommand[] = [];\r\n if (typeof(speed) === \"number\") {\r\n scalarAttrs.forEach((x) => cmds.push(new Messages.ScalarSubcommand(x.Index, speed, actuator)));\r\n } else if (Array.isArray(speed)) {\r\n if (speed.length > scalarAttrs.length) {\r\n throw new ButtplugDeviceException(`${speed.length} commands send to a device with ${scalarAttrs.length} vibrators`);\r\n }\r\n scalarAttrs.forEach((x, i) => {\r\n cmds.push(new Messages.ScalarSubcommand(x.Index, speed[i], actuator))\r\n });\r\n } else {\r\n throw new ButtplugDeviceException(`${actuator} can only take numbers or arrays of numbers.`);\r\n }\r\n await this.scalar(cmds);\r\n }\r\n\r\n public async vibrate(speed: number | number[]): Promise<void> {\r\n await this.scalarCommandBuilder(speed, Messages.ActuatorType.Vibrate);\r\n }\r\n\r\n public async oscillate(speed: number | number[]): Promise<void> {\r\n await this.scalarCommandBuilder(speed, Messages.ActuatorType.Oscillate);\r\n }\r\n\r\n public async rotate(values: number | [number, boolean][], clockwise?: boolean): Promise<void> {\r\n let rotateAttrs = this.AllowedMessages.RotateCmd;\r\n if (!rotateAttrs || rotateAttrs.length == 0) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no Rotate capabilities`);\r\n }\r\n let msg: Messages.RotateCmd;\r\n if (typeof(values) === \"number\") {\r\n msg = Messages.RotateCmd.Create(this.Index,\r\n new Array(rotateAttrs.length).fill([values, clockwise]));\r\n } else if (Array.isArray(values)) {\r\n msg = Messages.RotateCmd.Create(this.Index, values);\r\n } else {\r\n throw new ButtplugDeviceException(\r\n \"SendRotateCmd can only take a number and boolean, or an array of number/boolean tuples\");\r\n }\r\n await this.sendExpectOk(msg);\r\n }\r\n\r\n public async linear(values: number | [number, number][], duration?: number): Promise<void> {\r\n let linearAttrs = this.AllowedMessages.LinearCmd;\r\n if (!linearAttrs || linearAttrs.length == 0) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no Linear capabilities`);\r\n }\r\n let msg: Messages.LinearCmd;\r\n if (typeof(values) === \"number\") {\r\n msg = Messages.LinearCmd.Create(this.Index,\r\n new Array(linearAttrs.length).fill([values, duration]));\r\n } else if (Array.isArray(values)) {\r\n msg = Messages.LinearCmd.Create(this.Index, values);\r\n } else {\r\n throw new ButtplugDeviceException(\r\n \"SendLinearCmd can only take a number and number, or an array of number/number tuples\");\r\n }\r\n await this.sendExpectOk(msg);\r\n }\r\n\r\n public async sensorRead(sensorIndex: number, sensorType: Messages.SensorType): Promise<number[]> {\r\n let response = await this.send(new Messages.SensorReadCmd(this.Index, sensorIndex, sensorType));\r\n switch (response.constructor) {\r\n case Messages.SensorReading:\r\n return (response as Messages.SensorReading).Data;\r\n case Messages.Error:\r\n throw ButtplugException.FromError(response as Messages.Error);\r\n default:\r\n throw new ButtplugMessageException(`Message type ${response.constructor} not handled by sensorRead`); \r\n }\r\n }\r\n\r\n public async battery(): Promise<number> {\r\n let batteryAttrs = this.AllowedMessages.SensorReadCmd?.filter((x) => x.SensorType == Messages.SensorType.Battery);\r\n if (!batteryAttrs || batteryAttrs.length == 0) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no Battery capabilities`);\r\n }\r\n // Find the battery sensor, we'll need its index.\r\n let result = await this.sensorRead(batteryAttrs[0].Index, Messages.SensorType.Battery);\r\n return result[0] / 100.0;\r\n }\r\n\r\n public async rssi(): Promise<number> {\r\n let rssiAttrs = this.AllowedMessages.SensorReadCmd?.filter((x) => x.SensorType == Messages.SensorType.RSSI);\r\n if (!rssiAttrs || rssiAttrs.length == 0) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no RSSI capabilities`);\r\n }\r\n // Find the battery sensor, we'll need its index.\r\n let result = await this.sensorRead(rssiAttrs[0].Index, Messages.SensorType.RSSI);\r\n return result[0];\r\n }\r\n\r\n public async rawRead(endpoint: string, expectedLength: number, timeout: number): Promise<Uint8Array> {\r\n if (!this.AllowedMessages.RawReadCmd) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw read capabilities`);\r\n }\r\n if (this.AllowedMessages.RawReadCmd.Endpoints.indexOf(endpoint) == -1) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw readable endpoint ${endpoint}`);\r\n }\r\n let response = await this.send(new Messages.RawReadCmd(this.Index, endpoint, expectedLength, timeout));\r\n switch (response.constructor) {\r\n case Messages.RawReading:\r\n return new Uint8Array((response as Messages.RawReading).Data);\r\n case Messages.Error:\r\n throw ButtplugException.FromError(response as Messages.Error);\r\n default:\r\n throw new ButtplugMessageException(`Message type ${response.constructor} not handled by rawRead`); \r\n }\r\n }\r\n\r\n public async rawWrite(endpoint: string, data: Uint8Array, writeWithResponse: boolean): Promise<void> {\r\n if (!this.AllowedMessages.RawWriteCmd) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw write capabilities`);\r\n }\r\n if (this.AllowedMessages.RawWriteCmd.Endpoints.indexOf(endpoint) == -1) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw writable endpoint ${endpoint}`);\r\n }\r\n await this.sendExpectOk(new Messages.RawWriteCmd(this.Index, endpoint, data, writeWithResponse));\r\n }\r\n\r\n public async rawSubscribe(endpoint: string): Promise<void> {\r\n if (!this.AllowedMessages.RawSubscribeCmd) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw subscribe capabilities`);\r\n }\r\n if (this.AllowedMessages.RawSubscribeCmd.Endpoints.indexOf(endpoint) == -1) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw subscribable endpoint ${endpoint}`);\r\n }\r\n await this.sendExpectOk(new Messages.RawSubscribeCmd(this.Index, endpoint)); \r\n }\r\n\r\n public async rawUnsubscribe(endpoint: string): Promise<void> {\r\n // This reuses raw subscribe's info.\r\n if (!this.AllowedMessages.RawSubscribeCmd) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw unsubscribe capabilities`);\r\n }\r\n if (this.AllowedMessages.RawSubscribeCmd.Endpoints.indexOf(endpoint) == -1) {\r\n throw new ButtplugDeviceException(`Device ${this.Name} has no raw unsubscribable endpoint ${endpoint}`);\r\n }\r\n await this.sendExpectOk(new Messages.RawUnsubscribeCmd(this.Index, endpoint)); \r\n }\r\n\r\n public async stop(): Promise<void> {\r\n await this.sendExpectOk(new Messages.StopDeviceCmd(this.Index));\r\n }\r\n\r\n public EmitDisconnected() {\r\n this.emit(\"deviceremoved\");\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\n\r\nimport { ButtplugLogger } from \"../core/Logging\";\r\nimport { EventEmitter } from \"events\";\r\nimport { ButtplugClientDevice } from \"./ButtplugClientDevice\";\r\nimport { IButtplugClientConnector } from \"./IButtplugClientConnector\";\r\nimport * as Messages from \"../core/Messages\";\r\nimport { ButtplugDeviceException, ButtplugException,\r\n ButtplugInitException, ButtplugMessageException } from \"../core/Exceptions\";\r\nimport { ButtplugClientConnectorException } from \"./ButtplugClientConnectorException\";\r\n\r\nexport class ButtplugClient extends EventEmitter {\r\n protected _pingTimer: NodeJS.Timeout | null = null;\r\n protected _connector: IButtplugClientConnector | null = null;\r\n protected _devices: Map<number, ButtplugClientDevice> = new Map();\r\n protected _clientName: string;\r\n protected _logger = ButtplugLogger.Logger;\r\n protected _isScanning = false;\r\n\r\n constructor(clientName: string = \"Generic Buttplug Client\") {\r\n super();\r\n this._clientName = clientName;\r\n this._logger.Debug(`ButtplugClient: Client ${clientName} created.`);\r\n }\r\n\r\n public get Connector(): IButtplugClientConnector | null {\r\n return this._connector;\r\n }\r\n\r\n public get Connected(): boolean {\r\n return this._connector !== null && this._connector.Connected;\r\n }\r\n\r\n public get Devices(): ButtplugClientDevice[] {\r\n // While this function doesn't actually send a message, if we don't have a\r\n // connector, we shouldn't have devices.\r\n this.checkConnector();\r\n const devices: ButtplugClientDevice[] = [];\r\n this._devices.forEach((d, i) => {\r\n devices.push(d);\r\n });\r\n return devices;\r\n }\r\n\r\n public get IsScanning(): boolean {\r\n return this._isScanning;\r\n }\r\n\r\n public connect = async (connector: IButtplugClientConnector) => {\r\n this._logger.Info(`ButtplugClient: Connecting using ${connector.constructor.name}`);\r\n await connector.Connect();\r\n this._connector = connector;\r\n this._connector.addListener(\"message\", this.parseMessages);\r\n this._connector.addListener(\"disconnect\", this.disconnectHandler);\r\n await this.initializeConnection();\r\n }\r\n\r\n public disconnect = async () => {\r\n this._logger.Debug(`ButtplugClient: Disconnect called`);\r\n this.checkConnector();\r\n await this.shutdownConnection();\r\n await this._connector!.Disconnect();\r\n }\r\n\r\n public startScanning = async () => {\r\n this._logger.Debug(`ButtplugClient: StartScanning called`);\r\n this._isScanning = true;\r\n await this.sendMsgExpectOk(new Messages.StartScanning());\r\n }\r\n\r\n public stopScanning = async () => {\r\n this._logger.Debug(`ButtplugClient: StopScanning called`);\r\n this._isScanning = false;\r\n await this.sendMsgExpectOk(new Messages.StopScanning());\r\n }\r\n\r\n public stopAllDevices = async () => {\r\n this._logger.Debug(`ButtplugClient: StopAllDevices`);\r\n await this.sendMsgExpectOk(new Messages.StopAllDevices());\r\n }\r\n\r\n private async sendDeviceMessage(device: ButtplugClientDevice,\r\n deviceMsg: Messages.ButtplugDeviceMessage): Promise<Messages.ButtplugMessage> {\r\n this.checkConnector();\r\n const dev = this._devices.get(device.Index);\r\n if (dev === undefined) {\r\n throw ButtplugException.LogAndError(ButtplugDeviceException,\r\n this._logger,\r\n `Device ${device.Index} not available.`);\r\n }\r\n deviceMsg.DeviceIndex = device.Index;\r\n return await this.SendMessage(deviceMsg);\r\n }\r\n\r\n protected disconnectHandler = () => {\r\n this._logger.Info(`ButtplugClient: Disconnect event receieved.`);\r\n this.emit(\"disconnect\");\r\n }\r\n\r\n protected parseMessages = (msgs: Messages.ButtplugMessage[]) => {\r\n for (const x of msgs) {\r\n switch (x.constructor) {\r\n case Messages.DeviceAdded:\r\n const addedMsg = x as Messages.DeviceAdded;\r\n const addedDevice = ButtplugClientDevice.fromMsg(addedMsg, this.sendDeviceMessageClosure);\r\n this._devices.set(addedMsg.DeviceIndex, addedDevice);\r\n this.emit(\"deviceadded\", addedDevice);\r\n break;\r\n case Messages.DeviceRemoved:\r\n const removedMsg = x as Messages.DeviceRemoved;\r\n if (this._devices.has(removedMsg.DeviceIndex)) {\r\n const removedDevice = this._devices.get(removedMsg.DeviceIndex);\r\n removedDevice?.EmitDisconnected();\r\n this._devices.delete(removedMsg.DeviceIndex);\r\n this.emit(\"deviceremoved\", removedDevice);\r\n }\r\n break;\r\n case Messages.ScanningFinished:\r\n this._isScanning = false;\r\n this.emit(\"scanningfinished\", x);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected initializeConnection = async (): Promise<boolean> => {\r\n this.checkConnector();\r\n const msg = await this.SendMessage(new Messages.RequestServerInfo(this._clientName, Messages.MESSAGE_SPEC_VERSION));\r\n switch (msg.constructor) {\r\n case Messages.ServerInfo: {\r\n const serverinfo = msg as Messages.ServerInfo;\r\n this._logger.Info(`ButtplugClient: Connected to Server ${serverinfo.ServerName}`);\r\n // TODO: maybe store server name, do something with message template version?\r\n const ping = serverinfo.MaxPingTime;\r\n if (serverinfo.MessageVersion < Messages.MESSAGE_SPEC_VERSION) {\r\n // Disconnect and throw an exception explaining the version mismatch problem.\r\n await this._connector!.Disconnect();\r\n throw ButtplugException.LogAndError(\r\n ButtplugInitException,\r\n this._logger,\r\n `Server protocol version ${serverinfo.MessageVersion} is older than client protocol version ${Messages.MESSAGE_SPEC_VERSION}. Please update server.`);\r\n }\r\n if (ping > 0) {\r\n /*\r\n this._pingTimer = setInterval(async () => {\r\n // If we've disconnected, stop trying to ping the server.\r\n if (!this.Connected) {\r\n await this.ShutdownConnection();\r\n return;\r\n }\r\n await this.SendMessage(new Messages.Ping());\r\n } , Math.round(ping / 2));\r\n */\r\n }\r\n await this.requestDeviceList();\r\n return true;\r\n }\r\n case Messages.Error: {\r\n // Disconnect and throw an exception with the error message we got back.\r\n // This will usually only error out if we have a version mismatch that the\r\n // server has detected.\r\n await this._connector!.Disconnect();\r\n const err = msg as Messages.Error;\r\n throw ButtplugException.LogAndError(ButtplugInitException,\r\n this._logger,\r\n `Cannot connect to server. ${err.ErrorMessage}`);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected requestDeviceList = async () => {\r\n this.checkConnector();\r\n this._logger.Debug(`ButtplugClient: ReceiveDeviceList called`);\r\n const deviceList = (await this.SendMessage(new Messages.RequestDeviceList())) as Messages.DeviceList;\r\n deviceList.Devices.forEach((d) => {\r\n if (!this._devices.has(d.DeviceIndex)) {\r\n const device = ButtplugClientDevice.fromMsg(d, this.sendDeviceMessageClosure);\r\n this._logger.Debug(`ButtplugClient: Adding Device: ${device}`);\r\n this._devices.set(d.DeviceIndex, device);\r\n this.emit(\"deviceadded\", device);\r\n } else {\r\n this._logger.Debug(`ButtplugClient: Device already added: ${d}`);\r\n }\r\n });\r\n }\r\n\r\n protected shutdownConnection = async () => {\r\n await this.stopAllDevices();\r\n if (this._pingTimer !== null) {\r\n clearInterval(this._pingTimer);\r\n this._pingTimer = null;\r\n }\r\n }\r\n\r\n protected async SendMessage(msg: Messages.ButtplugMessage): Promise<Messages.ButtplugMessage> {\r\n this.checkConnector();\r\n return await this._connector!.Send(msg);\r\n }\r\n\r\n protected checkConnector() {\r\n if (!this.Connected) {\r\n throw new ButtplugClientConnectorException(\"ButtplugClient not connected\");\r\n }\r\n }\r\n\r\n protected sendMsgExpectOk = async (msg: Messages.ButtplugMessage): Promise<void> => {\r\n const response = await this.SendMessage(msg);\r\n switch (response.constructor) {\r\n case Messages.Ok:\r\n return;\r\n case Messages.Error:\r\n throw ButtplugException.FromError(response as Messages.Error);\r\n default:\r\n throw ButtplugException.LogAndError(ButtplugMessageException,\r\n this._logger,\r\n `Message type ${response.constructor} not handled by SendMsgExpectOk`);\r\n }\r\n }\r\n\r\n protected sendDeviceMessageClosure = async (device: ButtplugClientDevice,\r\n msg: Messages.ButtplugDeviceMessage): Promise<Messages.ButtplugMessage> => {\r\n return await this.sendDeviceMessage(device, msg);\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nimport * as Messages from \"./Messages\";\r\nimport { ButtplugLogger } from \"./Logging\";\r\n\r\nexport class ButtplugException extends Error {\r\n\r\n public get ErrorClass(): Messages.ErrorClass {\r\n return this.errorClass;\r\n }\r\n\r\n public get InnerException(): Error | undefined {\r\n return this.innerError;\r\n }\r\n\r\n public get Id(): number | undefined {\r\n return this.messageId;\r\n }\r\n\r\n public get ErrorMessage(): Messages.ButtplugMessage {\r\n return new Messages.Error(this.message, this.ErrorClass, this.Id);\r\n }\r\n\r\n public static LogAndError<T extends ButtplugException>(constructor: new(str: string, num: number) => T,\r\n logger: ButtplugLogger,\r\n message: string,\r\n id: number = Messages.SYSTEM_MESSAGE_ID): T {\r\n logger.Error(message);\r\n return new constructor(message, id);\r\n }\r\n\r\n public static FromError(error: Messages.Error) {\r\n switch (error.ErrorCode) {\r\n case Messages.ErrorClass.ERROR_DEVICE:\r\n return new ButtplugDeviceException(error.ErrorMessage, error.Id);\r\n case Messages.ErrorClass.ERROR_INIT:\r\n return new ButtplugInitException(error.ErrorMessage, error.Id);\r\n case Messages.ErrorClass.ERROR_UNKNOWN:\r\n return new ButtplugUnknownException(error.ErrorMessage, error.Id);\r\n case Messages.ErrorClass.ERROR_PING:\r\n return new ButtplugPingException(error.ErrorMessage, error.Id);\r\n case Messages.ErrorClass.ERROR_MSG:\r\n return new ButtplugMessageException(error.ErrorMessage, error.Id);\r\n default:\r\n throw new Error(`Message type ${error.ErrorCode} not handled`);\r\n }\r\n }\r\n\r\n public errorClass: Messages.ErrorClass = Messages.ErrorClass.ERROR_UNKNOWN;\r\n public innerError: Error | undefined;\r\n public messageId: number | undefined;\r\n\r\n protected constructor(message: string,\r\n errorClass: Messages.ErrorClass,\r\n id: number = Messages.SYSTEM_MESSAGE_ID,\r\n inner?: Error) {\r\n super(message);\r\n this.errorClass = errorClass;\r\n this.innerError = inner;\r\n this.messageId = id;\r\n }\r\n}\r\n\r\nexport class ButtplugInitException extends ButtplugException {\r\n public constructor(message: string, id: number = Messages.SYSTEM_MESSAGE_ID) {\r\n super(message, Messages.ErrorClass.ERROR_INIT, id);\r\n }\r\n}\r\n\r\nexport class ButtplugDeviceException extends ButtplugException {\r\n public constructor(message: string, id: number = Messages.SYSTEM_MESSAGE_ID) {\r\n super(message, Messages.ErrorClass.ERROR_DEVICE, id);\r\n }\r\n}\r\n\r\nexport class ButtplugMessageException extends ButtplugException {\r\n public constructor(message: string, id: number = Messages.SYSTEM_MESSAGE_ID) {\r\n super(message, Messages.ErrorClass.ERROR_MSG, id);\r\n }\r\n}\r\n\r\nexport class ButtplugPingException extends ButtplugException {\r\n public constructor(message: string, id: number = Messages.SYSTEM_MESSAGE_ID) {\r\n super(message, Messages.ErrorClass.ERROR_PING, id);\r\n }\r\n}\r\n\r\nexport class ButtplugUnknownException extends ButtplugException {\r\n public constructor(message: string, id: number = Messages.SYSTEM_MESSAGE_ID) {\r\n super(message, Messages.ErrorClass.ERROR_UNKNOWN, id);\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport * as Messages from \"./Messages\";\r\n\r\nexport enum ButtplugLogLevel {\r\n Off,\r\n Error,\r\n Warn,\r\n Info,\r\n Debug,\r\n Trace,\r\n}\r\n\r\n/**\r\n * Representation of log messages for the internal logging utility.\r\n */\r\nexport class LogMessage {\r\n /** Timestamp for the log message */\r\n private timestamp: string;\r\n\r\n /** Log Message */\r\n private logMessage: string;\r\n\r\n /** Log Level */\r\n private logLevel: ButtplugLogLevel;\r\n\r\n /**\r\n * @param logMessage Log message.\r\n * @param logLevel: Log severity level.\r\n */\r\n public constructor(logMessage: string,\r\n logLevel: ButtplugLogLevel) {\r\n const a = new Date();\r\n const hour = a.getHours();\r\n const min = a.getMinutes();\r\n const sec = a.getSeconds();\r\n this.timestamp = `${hour}:${min}:${sec}`;\r\n this.logMessage = logMessage;\r\n this.logLevel = logLevel;\r\n }\r\n\r\n /**\r\n * Returns the log message.\r\n */\r\n public get Message() {\r\n return this.logMessage;\r\n }\r\n\r\n /**\r\n * Returns the log message level.\r\n */\r\n public get LogLevel() {\r\n return this.logLevel;\r\n }\r\n\r\n /**\r\n * Returns the log message timestamp.\r\n */\r\n public get Timestamp() {\r\n return this.timestamp;\r\n }\r\n\r\n /**\r\n * Returns a formatted string with timestamp, level, and message.\r\n */\r\n public get FormattedMessage() {\r\n return `${ButtplugLogLevel[this.logLevel]} : ${this.timestamp} : ${this.logMessage}`;\r\n }\r\n}\r\n\r\n/**\r\n * Simple, global logging utility for the Buttplug client and server. Keeps an\r\n * internal static reference to an instance of itself (singleton pattern,\r\n * basically), and allows message logging throughout the module.\r\n */\r\nexport class ButtplugLogger extends EventEmitter {\r\n /** Singleton instance for the logger */\r\n protected static sLogger: ButtplugLogger | undefined = undefined;\r\n /** Sets maximum log level to log to console */\r\n protected maximumConsoleLogLevel: ButtplugLogLevel = ButtplugLogLevel.Off;\r\n /** Sets maximum log level for all log messages */\r\n protected maximumEventLogLevel: ButtplugLogLevel = ButtplugLogLevel.Off;\r\n\r\n /**\r\n * Returns the stored static instance of the logger, creating one if it\r\n * doesn't currently exist.\r\n */\r\n public static get Logger(): ButtplugLogger {\r\n if (ButtplugLogger.sLogger === undefined) {\r\n ButtplugLogger.sLogger = new ButtplugLogger();\r\n }\r\n return this.sLogger!;\r\n }\r\n\r\n /**\r\n * Constructor. Can only be called internally since we regulate ButtplugLogger\r\n * ownership.\r\n */\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Set the maximum log level to output to console.\r\n */\r\n public get MaximumConsoleLogLevel() {\r\n return this.maximumConsoleLogLevel;\r\n }\r\n\r\n /**\r\n * Get the maximum log level to output to console.\r\n */\r\n public set MaximumConsoleLogLevel(buttplugLogLevel: ButtplugLogLevel) {\r\n this.maximumConsoleLogLevel = buttplugLogLevel;\r\n }\r\n\r\n /**\r\n * Set the global maximum log level\r\n */\r\n public get MaximumEventLogLevel() {\r\n return this.maximumEventLogLevel;\r\n }\r\n\r\n /**\r\n * Get the global maximum log level\r\n */\r\n public set MaximumEventLogLevel(logLevel: ButtplugLogLevel) {\r\n this.maximumEventLogLevel = logLevel;\r\n }\r\n\r\n /**\r\n * Log new message at Error level.\r\n */\r\n public Error(msg: string) {\r\n this.AddLogMessage(msg, ButtplugLogLevel.Error);\r\n }\r\n\r\n /**\r\n * Log new message at Warn level.\r\n */\r\n public Warn(msg: string) {\r\n this.AddLogMessage(msg, ButtplugLogLevel.Warn);\r\n }\r\n\r\n /**\r\n * Log new message at Info level.\r\n */\r\n public Info(msg: string) {\r\n this.AddLogMessage(msg, ButtplugLogLevel.Info);\r\n }\r\n\r\n /**\r\n * Log new message at Debug level.\r\n */\r\n public Debug(msg: string) {\r\n this.AddLogMessage(msg, ButtplugLogLevel.Debug);\r\n }\r\n\r\n /**\r\n * Log new message at Trace level.\r\n */\r\n public Trace(msg: string) {\r\n this.AddLogMessage(msg, ButtplugLogLevel.Trace);\r\n }\r\n\r\n /**\r\n * Checks to see if message should be logged, and if so, adds message to the\r\n * log buffer. May also print message and emit event.\r\n */\r\n protected AddLogMessage(msg: string, level: ButtplugLogLevel) {\r\n // If nothing wants the log message we have, ignore it.\r\n if (level > this.maximumEventLogLevel && level > this.maximumConsoleLogLevel) {\r\n return;\r\n }\r\n const logMsg = new LogMessage(msg, level);\r\n // Clients and console logging may have different needs. For instance, it\r\n // could be that the client requests trace level, while all we want in the\r\n // console is info level. This makes sure the client can't also spam the\r\n // console.\r\n if (level <= this.maximumConsoleLogLevel) {\r\n console.log(logMsg.FormattedMessage);\r\n }\r\n if (level <= this.maximumEventLogLevel) {\r\n this.emit(\"log\", logMsg);\r\n }\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\nimport {plainToInstance} from \"class-transformer\";\r\nimport * as Messages from \"./Messages\";\r\n\r\nexport function FromJSON(str): Messages.ButtplugMessage[] {\r\n console.log(str);\r\n const msgarray: object[] = JSON.parse(str);\r\n const msgs: Messages.ButtplugMessage[] = [];\r\n for (const x of Array.from(msgarray)) {\r\n console.log(x);\r\n // Can't get this to resolve nicely as a type, so just start from any and cast\r\n // after. Not sure how to resolve plainToClass to a type since this is\r\n // dynamic.\r\n const msg: any = plainToInstance(Messages[Object.getOwnPropertyNames(x)[0]],\r\n x[Object.getOwnPropertyNames(x)[0]]);\r\n (msg as Messages.ButtplugMessage).update();\r\n msgs.push(msg as Messages.ButtplugMessage);\r\n }\r\n return msgs;\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n// tslint:disable:max-classes-per-file\r\n\"use strict\";\r\n\r\nimport { instanceToPlain, Type } from \"class-transformer\";\r\nimport \"reflect-metadata\";\r\n\r\nexport const SYSTEM_MESSAGE_ID = 0;\r\nexport const DEFAULT_MESSAGE_ID = 1;\r\nexport const MAX_ID = 4294967295;\r\nexport const MESSAGE_SPEC_VERSION = 3;\r\n\r\n\r\nexport class MessageAttributes {\r\n public ScalarCmd?: Array<GenericDeviceMessageAttributes>;\r\n public RotateCmd?: Array<GenericDeviceMessageAttributes>;\r\n public LinearCmd?: Array<GenericDeviceMessageAttributes>;\r\n public RawReadCmd?: RawDeviceMessageAttributes;\r\n public RawWriteCmd?: RawDeviceMessageAttributes;\r\n public RawSubscribeCmd?: RawDeviceMessageAttributes;\r\n public SensorReadCmd?: Array<SensorDeviceMessageAttributes>;\r\n public SensorSubscribeCmd?: Array<SensorDeviceMessageAttributes>;\r\n public StopDeviceCmd: {};\r\n\r\n constructor(data: Partial<MessageAttributes>) {\r\n Object.assign(this, data);\r\n }\r\n\r\n public update() {\r\n this.ScalarCmd?.forEach((x, i) => x.Index = i);\r\n this.RotateCmd?.forEach((x, i) => x.Index = i);\r\n this.LinearCmd?.forEach((x, i) => x.Index = i);\r\n this.SensorReadCmd?.forEach((x, i) => x.Index = i);\r\n this.SensorSubscribeCmd?.forEach((x, i) => x.Index = i);\r\n }\r\n}\r\n\r\nexport enum ActuatorType {\r\n Unknown = \"Unknown\",\r\n Vibrate = \"Vibrate\",\r\n Rotate = \"Rotate\",\r\n Oscillate = \"Oscillate\",\r\n Constrict = \"Constrict\",\r\n Inflate = \"Inflate\",\r\n Position = \"Position\",\r\n}\r\n\r\nexport enum SensorType {\r\n Unknown = \"Unknown\",\r\n Battery = \"Battery\",\r\n RSSI = \"RSSI\",\r\n Button = \"Button\",\r\n Pressure = \"Pressure\",\r\n // Temperature,\r\n // Accelerometer,\r\n // Gyro,\r\n}\r\n\r\nexport class GenericDeviceMessageAttributes {\r\n public FeatureDescriptor: string;\r\n public ActuatorType: ActuatorType;\r\n public StepCount: number;\r\n public Index: number = 0;\r\n constructor(data: Partial<GenericDeviceMessageAttributes>) {\r\n Object.assign(this, data);\r\n }\r\n}\r\n\r\nexport class RawDeviceMessageAttributes {\r\n constructor(\r\n public Endpoints: Array<string>\r\n ) {\r\n\r\n }\r\n}\r\n\r\nexport class SensorDeviceMessageAttributes {\r\n public FeatureDescriptor: string;\r\n public SensorType: SensorType;\r\n public StepRange: Array<number>;\r\n public Index: number = 0;\r\n constructor(data: Partial<GenericDeviceMessageAttributes>) {\r\n Object.assign(this, data);\r\n }\r\n\r\n}\r\nexport abstract class ButtplugMessage {\r\n\r\n constructor(public Id: number) {\r\n }\r\n\r\n /***\r\n * Returns the message type name\r\n *\r\n * Usually, the message type name will be the same as the message class\r\n * constructor, so the constructor name is used by default. However, in\r\n * instances where a message has different versions (i.e. DeviceAddedVersion0\r\n * and DeviceAddedVersion1), we will need to override this to set the message\r\n * name.\r\n */\r\n // tslint:disable-next-line:ban-types\r\n public get Type(): Function {\r\n return this.constructor;\r\n }\r\n\r\n public toJSON(): string {\r\n return JSON.stringify(this.toProtocolFormat());\r\n }\r\n\r\n public toProtocolFormat(): object {\r\n const jsonObj = {};\r\n jsonObj[this.constructor.name] = instanceToPlain(this);\r\n return jsonObj;\r\n }\r\n\r\n public update() {}\r\n}\r\n\r\nexport abstract class ButtplugDeviceMessage extends ButtplugMessage {\r\n constructor(public DeviceIndex: number,\r\n public Id: number) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport abstract class ButtplugSystemMessage extends ButtplugMessage {\r\n constructor(public Id: number = SYSTEM_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class Ok extends ButtplugSystemMessage {\r\n constructor(public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class Ping extends ButtplugMessage {\r\n constructor(public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport enum ErrorClass {\r\n ERROR_UNKNOWN,\r\n ERROR_INIT,\r\n ERROR_PING,\r\n ERROR_MSG,\r\n ERROR_DEVICE,\r\n}\r\n\r\nexport class Error extends ButtplugMessage {\r\n\r\n constructor(public ErrorMessage: string,\r\n public ErrorCode: ErrorClass = ErrorClass.ERROR_UNKNOWN,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n\r\n get Schemversion() { return 0; }\r\n}\r\n\r\nexport class DeviceInfo {\r\n public DeviceIndex: number;\r\n public DeviceName: string;\r\n @Type(() => MessageAttributes)\r\n public DeviceMessages: MessageAttributes;\r\n public DeviceDisplayName?: string;\r\n public DeviceMessageTimingGap?: number;\r\n\r\n constructor(data: Partial<DeviceInfo>) {\r\n Object.assign(this, data);\r\n }\r\n}\r\n\r\nexport class DeviceList extends ButtplugMessage {\r\n @Type(() => DeviceInfo)\r\n public Devices: DeviceInfo[];\r\n public Id: number;\r\n \r\n constructor(devices: DeviceInfo[], id: number = DEFAULT_MESSAGE_ID) {\r\n super(id);\r\n this.Devices = devices;\r\n this.Id = id;\r\n }\r\n\r\n public update() {\r\n for(let device of this.Devices) {\r\n device.DeviceMessages.update();\r\n }\r\n }\r\n}\r\n\r\nexport class DeviceAdded extends ButtplugSystemMessage {\r\n public DeviceIndex: number;\r\n public DeviceName: string;\r\n @Type(() => MessageAttributes)\r\n public DeviceMessages: MessageAttributes;\r\n public DeviceDisplayName?: string;\r\n public DeviceMessageTimingGap?: number;\r\n\r\n constructor(data: Partial<DeviceAdded>) {\r\n super();\r\n Object.assign(this, data);\r\n }\r\n\r\n public update() {\r\n this.DeviceMessages.update();\r\n }\r\n}\r\n\r\nexport class DeviceRemoved extends ButtplugSystemMessage {\r\n constructor(public DeviceIndex: number) {\r\n super();\r\n }\r\n}\r\n\r\nexport class RequestDeviceList extends ButtplugMessage {\r\n constructor(public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class StartScanning extends ButtplugMessage {\r\n constructor(public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class StopScanning extends ButtplugMessage {\r\n constructor(public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class ScanningFinished extends ButtplugSystemMessage {\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\nexport class RequestServerInfo extends ButtplugMessage {\r\n constructor(public ClientName: string, public MessageVersion: number = 0, public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class ServerInfo extends ButtplugSystemMessage {\r\n constructor(public MessageVersion: number,\r\n public MaxPingTime: number,\r\n public ServerName: string,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super();\r\n }\r\n}\r\n\r\nexport class StopDeviceCmd extends ButtplugDeviceMessage {\r\n constructor(public DeviceIndex: number = -1,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class StopAllDevices extends ButtplugMessage {\r\n constructor(public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(Id);\r\n }\r\n}\r\n\r\nexport class GenericMessageSubcommand {\r\n protected constructor(public Index: number) {}\r\n}\r\n\r\nexport class ScalarSubcommand extends GenericMessageSubcommand {\r\n constructor(Index: number,\r\n public Scalar: number,\r\n public ActuatorType: ActuatorType) {\r\n super(Index);\r\n }\r\n}\r\n\r\nexport class ScalarCmd extends ButtplugDeviceMessage {\r\n constructor(public Scalars: ScalarSubcommand[],\r\n public DeviceIndex: number = -1,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class RotateSubcommand extends GenericMessageSubcommand {\r\n constructor(Index: number,\r\n public Speed: number,\r\n public Clockwise: boolean) {\r\n super(Index);\r\n }\r\n}\r\n\r\nexport class RotateCmd extends ButtplugDeviceMessage {\r\n\r\n public static Create(deviceIndex: number,\r\n commands: [number, boolean][]): RotateCmd {\r\n const cmdList: RotateSubcommand[] = new Array<RotateSubcommand>();\r\n\r\n let i = 0;\r\n for (const [speed, clockwise] of commands) {\r\n cmdList.push(new RotateSubcommand(i, speed, clockwise));\r\n ++i;\r\n }\r\n\r\n return new RotateCmd(cmdList, deviceIndex);\r\n }\r\n constructor(public Rotations: RotateSubcommand[],\r\n public DeviceIndex: number = -1,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class VectorSubcommand extends GenericMessageSubcommand {\r\n constructor(Index: number,\r\n public Position: number,\r\n public Duration: number) {\r\n super(Index);\r\n }\r\n}\r\n\r\nexport class LinearCmd extends ButtplugDeviceMessage {\r\n\r\n public static Create(deviceIndex: number,\r\n commands: [number, number][]): LinearCmd {\r\n const cmdList: VectorSubcommand[] = new Array<VectorSubcommand>();\r\n\r\n let i = 0;\r\n for (const cmd of commands) {\r\n cmdList.push(new VectorSubcommand(i, cmd[0], cmd[1]));\r\n ++i;\r\n }\r\n\r\n return new LinearCmd(cmdList, deviceIndex);\r\n }\r\n constructor(public Vectors: VectorSubcommand[],\r\n public DeviceIndex: number = -1,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class SensorReadCmd extends ButtplugDeviceMessage {\r\n constructor(public DeviceIndex: number,\r\n public SensorIndex: number,\r\n public SensorType: SensorType,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class SensorReading extends ButtplugDeviceMessage {\r\n constructor(public DeviceIndex: number,\r\n public SensorIndex: number,\r\n public SensorType: SensorType,\r\n public Data: number[],\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class RawReadCmd extends ButtplugDeviceMessage {\r\n constructor(\r\n public DeviceIndex: number,\r\n public Endpoint: string,\r\n public ExpectedLength: number,\r\n public Timeout: number,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class RawWriteCmd extends ButtplugDeviceMessage {\r\n constructor(\r\n public DeviceIndex: number,\r\n public Endpoint: string,\r\n public Data: Uint8Array,\r\n public WriteWithResponse: boolean,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class RawSubscribeCmd extends ButtplugDeviceMessage {\r\n constructor(\r\n public DeviceIndex: number,\r\n public Endpoint: string,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class RawUnsubscribeCmd extends ButtplugDeviceMessage {\r\n constructor(\r\n public DeviceIndex: number,\r\n public Endpoint: string,\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}\r\n\r\nexport class RawReading extends ButtplugDeviceMessage {\r\n constructor(public DeviceIndex: number,\r\n public Endpoint: string,\r\n public Data: number[],\r\n public Id: number = DEFAULT_MESSAGE_ID) {\r\n super(DeviceIndex, Id);\r\n }\r\n}","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nexport * from \"./client/Client\";\r\nexport * from \"./client/ButtplugClientDevice\";\r\nexport * from \"./client/ButtplugBrowserWebsocketClientConnector\";\r\nexport * from \"./client/ButtplugClientConnectorException\";\r\nexport * from \"./utils/ButtplugMessageSorter\";\r\nexport * from \"./client/IButtplugClientConnector\";\r\nexport * from \"./core/Messages\";\r\nexport * from \"./core/MessageUtils\";\r\nexport * from \"./core/Logging\";\r\nexport * from \"./core/Exceptions\";","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\n\"use strict\";\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport { ButtplugMessage } from \"../core/Messages\";\r\nimport { FromJSON } from \"../core/MessageUtils\";\r\n\r\nexport class ButtplugBrowserWebsocketConnector extends EventEmitter {\r\n\r\n protected _ws: WebSocket | undefined;\r\n\r\n public constructor(private _url: string) {\r\n super();\r\n }\r\n\r\n public get Connected(): boolean {\r\n return this._ws !== undefined;\r\n }\r\n\r\n public Connect = async (): Promise<void> => {\r\n const ws = new WebSocket(this._url);\r\n let res;\r\n let rej;\r\n const p = new Promise<void>((resolve, reject) => { res = resolve; rej = reject; });\r\n // In websockets, our error rarely tells us much, as for security reasons\r\n // browsers usually only throw Error Code 1006. It's up to those using this\r\n // library to state what the problem might be.\r\n const conErrorCallback = (ev) => rej();\r\n ws.addEventListener(\"open\", async (ev) => {\r\n this._ws = ws;\r\n try {\r\n await this.Initialize();\r\n this._ws.addEventListener(\"message\", (msg) => { this.ParseIncomingMessage(msg); });\r\n this._ws.removeEventListener(\"close\", conErrorCallback);\r\n this._ws.addEventListener(\"close\", this.Disconnect);\r\n // TODO This doesn't really communicate the chain why our initializer failed\r\n res();\r\n } catch (e) {\r\n console.log(e);\r\n rej();\r\n }\r\n });\r\n ws.addEventListener(\"close\", conErrorCallback);\r\n return p;\r\n }\r\n\r\n public Disconnect = async (): Promise<void> => {\r\n if (!this.Connected) {\r\n return;\r\n }\r\n this._ws!.close();\r\n this._ws = undefined;\r\n this.emit(\"disconnect\");\r\n }\r\n\r\n public SendMessage(msg: ButtplugMessage) {\r\n if (!this.Connected) {\r\n throw new Error(\"ButtplugBrowserWebsocketConnector not connected\");\r\n }\r\n this._ws!.send(\"[\" + msg.toJSON() + \"]\");\r\n }\r\n\r\n public Initialize = async (): Promise<void> => {\r\n return Promise.resolve();\r\n }\r\n\r\n protected ParseIncomingMessage(event: MessageEvent) {\r\n console.log(\"Calling parent parse incoming\");\r\n if (typeof (event.data) === \"string\") {\r\n const msgs = FromJSON(event.data);\r\n this.emit(\"message\", msgs);\r\n } else if (event.data instanceof Blob) {\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", (ev) => { this.OnReaderLoad(ev); });\r\n reader.readAsText(event.data);\r\n }\r\n }\r\n\r\n protected OnReaderLoad(event: Event) {\r\n const msgs = FromJSON((event.target as FileReader).result);\r\n this.emit(\"message\", msgs);\r\n }\r\n}\r\n","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\r\nimport * as Messages from \"../core/Messages\";\r\nimport { ButtplugException } from \"../core/Exceptions\";\r\n\r\nexport class ButtplugMessageSorter {\r\n protected _counter: number = 1;\r\n protected _waitingMsgs: Map<number, [(val: Messages.ButtplugMessage) => void, (err: Error) => void]> = new Map();\r\n\r\n public constructor(private _useCounter: boolean) {\r\n }\r\n\r\n // One of the places we should actually return a promise, as we need to store\r\n // them while waiting for them to return across the line.\r\n // tslint:disable:promise-function-async\r\n public PrepareOutgoingMessage(msg: Messages.ButtplugMessage): Promise<Messages.ButtplugMessage> {\r\n if (this._useCounter) {\r\n msg.Id = this._counter;\r\n // Always increment last, otherwise we might lose sync\r\n this._counter += 1;\r\n }\r\n let res;\r\n let rej;\r\n const msgPromise = new Promise<Messages.ButtplugMessage>((resolve, reject) => { res = resolve; rej = reject; });\r\n this._waitingMsgs.set(msg.Id, [res, rej]);\r\n return msgPromise;\r\n }\r\n\r\n public ParseIncomingMessages(msgs: Messages.ButtplugMessage[]): Messages.ButtplugMessage[] {\r\n const noMatch: Messages.ButtplugMessage[] = [];\r\n for (const x of msgs) {\r\n if (x.Id !== Messages.SYSTEM_MESSAGE_ID && this._waitingMsgs.has(x.Id)) {\r\n const [res, rej] = this._waitingMsgs.get(x.Id)!;\r\n // If we've gotten back an error, reject the related promise using a\r\n // ButtplugException derived type.\r\n if (x.Type === Messages.Error) {\r\n rej(ButtplugException.FromError(x as Messages.Error));\r\n continue;\r\n }\r\n res(x);\r\n continue;\r\n } else {\r\n noMatch.push(x);\r\n }\r\n }\r\n return noMatch;\r\n }\r\n}\r\n"],"sourceRoot":""}