@ivujs/i-utils 1.1.16 → 1.1.17

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 (213) hide show
  1. package/README.md +21 -19
  2. package/dist/cjs/index.cjs +5 -400
  3. package/dist/es/index.d.ts +1 -26
  4. package/dist/es/index.mjs +2 -55
  5. package/dist/index.d.ts +11 -2851
  6. package/dist/lib/index.full.umd.js +33 -14240
  7. package/dist/lib/index.full.umd.min.js +2 -64
  8. package/dist/lib/index.full.umd.min.js.map +1 -1
  9. package/dist/resolver/auto-imports.cjs +1 -337
  10. package/dist/resolver/auto-imports.mjs +1 -337
  11. package/dist/resolver/index.cjs +1 -1
  12. package/dist/resolver/index.d.ts +1 -1
  13. package/dist/resolver/index.mjs +1 -1
  14. package/package.json +5 -13
  15. package/dist/cjs/ID-card/index.cjs +0 -87
  16. package/dist/cjs/array/index.cjs +0 -470
  17. package/dist/cjs/clipboard/index.cjs +0 -128
  18. package/dist/cjs/color/index.cjs +0 -193
  19. package/dist/cjs/constants/date.cjs +0 -178
  20. package/dist/cjs/constants/id-card.cjs +0 -52
  21. package/dist/cjs/constants/keycode.cjs +0 -117
  22. package/dist/cjs/constants/lang.cjs +0 -13
  23. package/dist/cjs/constants/math.cjs +0 -13
  24. package/dist/cjs/constants/regexp.cjs +0 -53
  25. package/dist/cjs/constants/sort.cjs +0 -15
  26. package/dist/cjs/cookie/index.cjs +0 -70
  27. package/dist/cjs/crypto/aes/aes.cjs +0 -480
  28. package/dist/cjs/crypto/aes/index.cjs +0 -27
  29. package/dist/cjs/crypto/base32/base32.cjs +0 -357
  30. package/dist/cjs/crypto/base32/index.cjs +0 -41
  31. package/dist/cjs/crypto/base64/base64.cjs +0 -348
  32. package/dist/cjs/crypto/base64/index.cjs +0 -59
  33. package/dist/cjs/crypto/des/des.cjs +0 -257
  34. package/dist/cjs/crypto/des/index.cjs +0 -28
  35. package/dist/cjs/crypto/md5/index.cjs +0 -24
  36. package/dist/cjs/crypto/md5/md5.cjs +0 -897
  37. package/dist/cjs/crypto/sha/sha1/index.cjs +0 -24
  38. package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -529
  39. package/dist/cjs/crypto/sha/sha256/index.cjs +0 -43
  40. package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -595
  41. package/dist/cjs/crypto/sha/sha3/index.cjs +0 -41
  42. package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -624
  43. package/dist/cjs/crypto/sha/sha512/index.cjs +0 -81
  44. package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -950
  45. package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -149
  46. package/dist/cjs/crypto/sm/lib/ec.cjs +0 -315
  47. package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1608
  48. package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -158
  49. package/dist/cjs/crypto/sm/lib/utils.cjs +0 -170
  50. package/dist/cjs/crypto/sm/sm2/index.cjs +0 -112
  51. package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -231
  52. package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
  53. package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -93
  54. package/dist/cjs/crypto/sm/sm4/index.cjs +0 -27
  55. package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -327
  56. package/dist/cjs/crypto/tea/index.cjs +0 -25
  57. package/dist/cjs/crypto/tea/tea.cjs +0 -187
  58. package/dist/cjs/date/index.cjs +0 -1266
  59. package/dist/cjs/desensitized/index.cjs +0 -75
  60. package/dist/cjs/device/index.cjs +0 -151
  61. package/dist/cjs/dom/index.cjs +0 -129
  62. package/dist/cjs/file/index.cjs +0 -333
  63. package/dist/cjs/function/index.cjs +0 -69
  64. package/dist/cjs/keycode/index.cjs +0 -33
  65. package/dist/cjs/math/index.cjs +0 -278
  66. package/dist/cjs/number/index.cjs +0 -31
  67. package/dist/cjs/object/index.cjs +0 -272
  68. package/dist/cjs/pagination/index.cjs +0 -131
  69. package/dist/cjs/random/index.cjs +0 -24
  70. package/dist/cjs/regexp/index.cjs +0 -100
  71. package/dist/cjs/storage/index.cjs +0 -11
  72. package/dist/cjs/storage/localStorage.cjs +0 -37
  73. package/dist/cjs/storage/sessionStorage.cjs +0 -37
  74. package/dist/cjs/string/index.cjs +0 -358
  75. package/dist/cjs/url/index.cjs +0 -258
  76. package/dist/cjs/validate/index.cjs +0 -468
  77. package/dist/cjs/weapp/index.cjs +0 -142
  78. package/dist/es/ID-card/index.d.ts +0 -31
  79. package/dist/es/ID-card/index.mjs +0 -81
  80. package/dist/es/array/index.d.ts +0 -203
  81. package/dist/es/array/index.mjs +0 -441
  82. package/dist/es/clipboard/index.d.ts +0 -29
  83. package/dist/es/clipboard/index.mjs +0 -122
  84. package/dist/es/color/index.d.ts +0 -52
  85. package/dist/es/color/index.mjs +0 -183
  86. package/dist/es/constants/date.d.ts +0 -174
  87. package/dist/es/constants/date.mjs +0 -176
  88. package/dist/es/constants/id-card.d.ts +0 -43
  89. package/dist/es/constants/id-card.mjs +0 -50
  90. package/dist/es/constants/index.d.ts +0 -7
  91. package/dist/es/constants/keycode.d.ts +0 -103
  92. package/dist/es/constants/keycode.mjs +0 -115
  93. package/dist/es/constants/lang.d.ts +0 -4
  94. package/dist/es/constants/lang.mjs +0 -11
  95. package/dist/es/constants/math.d.ts +0 -4
  96. package/dist/es/constants/math.mjs +0 -11
  97. package/dist/es/constants/regexp.d.ts +0 -24
  98. package/dist/es/constants/regexp.mjs +0 -51
  99. package/dist/es/constants/sort.d.ts +0 -5
  100. package/dist/es/constants/sort.mjs +0 -13
  101. package/dist/es/cookie/index.d.ts +0 -29
  102. package/dist/es/cookie/index.mjs +0 -64
  103. package/dist/es/crypto/aes/aes.d.ts +0 -156
  104. package/dist/es/crypto/aes/aes.mjs +0 -478
  105. package/dist/es/crypto/aes/index.d.ts +0 -16
  106. package/dist/es/crypto/aes/index.mjs +0 -24
  107. package/dist/es/crypto/base32/base32.d.ts +0 -3
  108. package/dist/es/crypto/base32/base32.mjs +0 -353
  109. package/dist/es/crypto/base32/index.d.ts +0 -24
  110. package/dist/es/crypto/base32/index.mjs +0 -36
  111. package/dist/es/crypto/base64/base64.d.ts +0 -5
  112. package/dist/es/crypto/base64/base64.mjs +0 -342
  113. package/dist/es/crypto/base64/index.d.ts +0 -36
  114. package/dist/es/crypto/base64/index.mjs +0 -52
  115. package/dist/es/crypto/des/des.d.ts +0 -52
  116. package/dist/es/crypto/des/des.mjs +0 -255
  117. package/dist/es/crypto/des/index.d.ts +0 -14
  118. package/dist/es/crypto/des/index.mjs +0 -25
  119. package/dist/es/crypto/index.d.ts +0 -8
  120. package/dist/es/crypto/md5/index.d.ts +0 -13
  121. package/dist/es/crypto/md5/index.mjs +0 -21
  122. package/dist/es/crypto/md5/md5.d.ts +0 -144
  123. package/dist/es/crypto/md5/md5.mjs +0 -894
  124. package/dist/es/crypto/sha/index.d.ts +0 -4
  125. package/dist/es/crypto/sha/sha1/index.d.ts +0 -13
  126. package/dist/es/crypto/sha/sha1/index.mjs +0 -21
  127. package/dist/es/crypto/sha/sha1/sha1.d.ts +0 -2
  128. package/dist/es/crypto/sha/sha1/sha1.mjs +0 -526
  129. package/dist/es/crypto/sha/sha256/index.d.ts +0 -26
  130. package/dist/es/crypto/sha/sha256/index.mjs +0 -38
  131. package/dist/es/crypto/sha/sha256/sha256.d.ts +0 -4
  132. package/dist/es/crypto/sha/sha256/sha256.mjs +0 -590
  133. package/dist/es/crypto/sha/sha3/index.d.ts +0 -24
  134. package/dist/es/crypto/sha/sha3/index.mjs +0 -36
  135. package/dist/es/crypto/sha/sha3/sha3.d.ts +0 -4
  136. package/dist/es/crypto/sha/sha3/sha3.mjs +0 -619
  137. package/dist/es/crypto/sha/sha512/index.d.ts +0 -52
  138. package/dist/es/crypto/sha/sha512/index.mjs +0 -72
  139. package/dist/es/crypto/sha/sha512/sha512.d.ts +0 -8
  140. package/dist/es/crypto/sha/sha512/sha512.mjs +0 -941
  141. package/dist/es/crypto/sm/index.d.ts +0 -3
  142. package/dist/es/crypto/sm/lib/asn1.d.ts +0 -12
  143. package/dist/es/crypto/sm/lib/asn1.mjs +0 -146
  144. package/dist/es/crypto/sm/lib/ec.d.ts +0 -126
  145. package/dist/es/crypto/sm/lib/ec.mjs +0 -312
  146. package/dist/es/crypto/sm/lib/jsbn.d.ts +0 -198
  147. package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1605
  148. package/dist/es/crypto/sm/lib/sm3.d.ts +0 -5
  149. package/dist/es/crypto/sm/lib/sm3.mjs +0 -155
  150. package/dist/es/crypto/sm/lib/utils.d.ts +0 -53
  151. package/dist/es/crypto/sm/lib/utils.mjs +0 -158
  152. package/dist/es/crypto/sm/sm2/index.d.ts +0 -71
  153. package/dist/es/crypto/sm/sm2/index.mjs +0 -101
  154. package/dist/es/crypto/sm/sm2/sm2.d.ts +0 -34
  155. package/dist/es/crypto/sm/sm2/sm2.mjs +0 -220
  156. package/dist/es/crypto/sm/sm3/index.d.ts +0 -7
  157. package/dist/es/crypto/sm/sm3/index.mjs +0 -13
  158. package/dist/es/crypto/sm/sm3/sm3.d.ts +0 -1
  159. package/dist/es/crypto/sm/sm3/sm3.mjs +0 -91
  160. package/dist/es/crypto/sm/sm4/index.d.ts +0 -16
  161. package/dist/es/crypto/sm/sm4/index.mjs +0 -24
  162. package/dist/es/crypto/sm/sm4/sm4.d.ts +0 -2
  163. package/dist/es/crypto/sm/sm4/sm4.mjs +0 -324
  164. package/dist/es/crypto/tea/index.d.ts +0 -14
  165. package/dist/es/crypto/tea/index.mjs +0 -22
  166. package/dist/es/crypto/tea/tea.d.ts +0 -69
  167. package/dist/es/crypto/tea/tea.mjs +0 -185
  168. package/dist/es/date/index.d.ts +0 -547
  169. package/dist/es/date/index.mjs +0 -1179
  170. package/dist/es/desensitized/index.d.ts +0 -38
  171. package/dist/es/desensitized/index.mjs +0 -69
  172. package/dist/es/device/index.d.ts +0 -67
  173. package/dist/es/device/index.mjs +0 -137
  174. package/dist/es/dom/index.d.ts +0 -57
  175. package/dist/es/dom/index.mjs +0 -119
  176. package/dist/es/file/index.d.ts +0 -93
  177. package/dist/es/file/index.mjs +0 -317
  178. package/dist/es/function/index.d.ts +0 -23
  179. package/dist/es/function/index.mjs +0 -65
  180. package/dist/es/keycode/index.d.ts +0 -12
  181. package/dist/es/keycode/index.mjs +0 -30
  182. package/dist/es/math/index.d.ts +0 -66
  183. package/dist/es/math/index.mjs +0 -268
  184. package/dist/es/number/index.d.ts +0 -14
  185. package/dist/es/number/index.mjs +0 -28
  186. package/dist/es/object/index.d.ts +0 -83
  187. package/dist/es/object/index.mjs +0 -259
  188. package/dist/es/pagination/index.d.ts +0 -34
  189. package/dist/es/pagination/index.mjs +0 -125
  190. package/dist/es/random/index.d.ts +0 -15
  191. package/dist/es/random/index.mjs +0 -21
  192. package/dist/es/regexp/index.d.ts +0 -63
  193. package/dist/es/regexp/index.mjs +0 -89
  194. package/dist/es/storage/index.d.ts +0 -7
  195. package/dist/es/storage/index.mjs +0 -9
  196. package/dist/es/storage/localStorage.d.ts +0 -21
  197. package/dist/es/storage/localStorage.mjs +0 -32
  198. package/dist/es/storage/sessionStorage.d.ts +0 -21
  199. package/dist/es/storage/sessionStorage.mjs +0 -32
  200. package/dist/es/string/index.d.ts +0 -121
  201. package/dist/es/string/index.mjs +0 -339
  202. package/dist/es/url/index.d.ts +0 -118
  203. package/dist/es/url/index.mjs +0 -240
  204. package/dist/es/validate/index.d.ts +0 -228
  205. package/dist/es/validate/index.mjs +0 -431
  206. package/dist/es/weapp/index.d.ts +0 -57
  207. package/dist/es/weapp/index.mjs +0 -131
  208. package/dist/lib/index.full.cjs.js +0 -14264
  209. package/dist/lib/index.full.cjs.min.js +0 -69
  210. package/dist/lib/index.full.cjs.min.js.map +0 -1
  211. package/dist/lib/index.full.esm.js +0 -13910
  212. package/dist/lib/index.full.esm.min.js +0 -64
  213. package/dist/lib/index.full.esm.min.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.full.umd.min.js","sources":["../../src/constants/file:/D:/webWorks/i-utils/src/constants/sort.js","../../src/constants/file:/D:/webWorks/i-utils/src/constants/math.js","../../src/constants/file:/D:/webWorks/i-utils/src/constants/regexp.js","../../src/constants/file:/D:/webWorks/i-utils/src/constants/date.js","../../src/constants/file:/D:/webWorks/i-utils/src/constants/keycode.js","../../src/constants/file:/D:/webWorks/i-utils/src/constants/id-card.js","../../src/string/file:/D:/webWorks/i-utils/src/string/index.js","../../src/validate/file:/D:/webWorks/i-utils/src/validate/index.js","../../src/number/file:/D:/webWorks/i-utils/src/number/index.js","../../src/array/file:/D:/webWorks/i-utils/src/array/index.js","../../src/object/file:/D:/webWorks/i-utils/src/object/index.js","../../src/date/file:/D:/webWorks/i-utils/src/date/index.js","../../src/math/file:/D:/webWorks/i-utils/src/math/index.js","../../src/regexp/file:/D:/webWorks/i-utils/src/regexp/index.js","../../src/file/file:/D:/webWorks/i-utils/src/file/index.js","../../src/color/file:/D:/webWorks/i-utils/src/color/index.js","../../src/crypto/base64/file:/D:/webWorks/i-utils/src/crypto/base64/base64.js","../../src/crypto/base64/file:/D:/webWorks/i-utils/src/crypto/base64/index.js","../../src/crypto/base32/file:/D:/webWorks/i-utils/src/crypto/base32/base32.js","../../src/crypto/base32/file:/D:/webWorks/i-utils/src/crypto/base32/index.js","../../src/crypto/md5/file:/D:/webWorks/i-utils/src/crypto/md5/md5.js","../../src/crypto/sha/sha1/file:/D:/webWorks/i-utils/src/crypto/sha/sha1/sha1.js","../../src/crypto/sha/sha256/file:/D:/webWorks/i-utils/src/crypto/sha/sha256/sha256.js","../../src/crypto/sha/sha512/file:/D:/webWorks/i-utils/src/crypto/sha/sha512/sha512.js","../../src/crypto/sha/sha3/file:/D:/webWorks/i-utils/src/crypto/sha/sha3/sha3.js","../../src/crypto/sm/lib/file:/D:/webWorks/i-utils/src/crypto/sm/lib/jsbn.js","../../src/crypto/sm/lib/file:/D:/webWorks/i-utils/src/crypto/sm/lib/asn1.js","../../src/crypto/sm/lib/file:/D:/webWorks/i-utils/src/crypto/sm/lib/ec.js","../../src/crypto/sm/lib/file:/D:/webWorks/i-utils/src/crypto/sm/lib/utils.js","../../src/crypto/sm/lib/file:/D:/webWorks/i-utils/src/crypto/sm/lib/sm3.js","../../src/crypto/sm/sm2/file:/D:/webWorks/i-utils/src/crypto/sm/sm2/sm2.js","../../src/crypto/sm/sm2/file:/D:/webWorks/i-utils/src/crypto/sm/sm2/index.js","../../src/crypto/sm/sm3/file:/D:/webWorks/i-utils/src/crypto/sm/sm3/sm3.js","../../src/crypto/sm/sm3/file:/D:/webWorks/i-utils/src/crypto/sm/sm3/index.js","../../src/crypto/sm/sm4/file:/D:/webWorks/i-utils/src/crypto/sm/sm4/sm4.js","../../src/crypto/sm/sm4/file:/D:/webWorks/i-utils/src/crypto/sm/sm4/index.js","../../src/crypto/aes/file:/D:/webWorks/i-utils/src/crypto/aes/aes.js","../../src/crypto/aes/file:/D:/webWorks/i-utils/src/crypto/aes/index.js","../../src/crypto/des/file:/D:/webWorks/i-utils/src/crypto/des/des.js","../../src/crypto/des/file:/D:/webWorks/i-utils/src/crypto/des/index.js","../../src/crypto/tea/file:/D:/webWorks/i-utils/src/crypto/tea/tea.js","../../src/crypto/tea/file:/D:/webWorks/i-utils/src/crypto/tea/index.js","../../src/desensitized/file:/D:/webWorks/i-utils/src/desensitized/index.js","../../src/ID-card/file:/D:/webWorks/i-utils/src/ID-card/index.js","../../src/pagination/file:/D:/webWorks/i-utils/src/pagination/index.js","../../src/url/file:/D:/webWorks/i-utils/src/url/index.js","../../src/cookie/file:/D:/webWorks/i-utils/src/cookie/index.js","../../src/dom/file:/D:/webWorks/i-utils/src/dom/index.js","../../src/device/file:/D:/webWorks/i-utils/src/device/index.js","../../src/clipboard/file:/D:/webWorks/i-utils/src/clipboard/index.js","../../src/constants/file:/D:/webWorks/i-utils/src/constants/lang.js","../../src/storage/file:/D:/webWorks/i-utils/src/storage/localStorage.js","../../src/storage/file:/D:/webWorks/i-utils/src/storage/sessionStorage.js","../../src/weapp/file:/D:/webWorks/i-utils/src/weapp/index.js","../../src/function/file:/D:/webWorks/i-utils/src/function/index.js","../../src/id/file:/D:/webWorks/i-utils/src/id/index.ts","../../src/keycode/file:/D:/webWorks/i-utils/src/keycode/index.js","../../src/random/file:/D:/webWorks/i-utils/src/random/index.js","../../src/storage/file:/D:/webWorks/i-utils/src/storage/index.js","../../src/file:/D:/webWorks/i-utils/src/index.ts","../../src/crypto/md5/file:/D:/webWorks/i-utils/src/crypto/md5/index.js","../../src/crypto/sha/sha1/file:/D:/webWorks/i-utils/src/crypto/sha/sha1/index.js","../../src/crypto/sha/sha256/file:/D:/webWorks/i-utils/src/crypto/sha/sha256/index.js","../../src/crypto/sha/sha512/file:/D:/webWorks/i-utils/src/crypto/sha/sha512/index.js","../../src/crypto/sha/sha3/file:/D:/webWorks/i-utils/src/crypto/sha/sha3/index.js"],"sourcesContent":["/**\r\n * 排序\r\n */\r\nexport const SORT = {\r\n // 降序\r\n DESC: 0,\r\n // 升序\r\n ASC: 1,\r\n // 随机排序\r\n RANDOM: 2,\r\n};\r\n","/**\r\n * 数学\r\n */\r\nexport const MATH = {\r\n // 正常四舍五入,如:1.354保留两位是1.35;1.355保留两位是1.36;\r\n ROUND: 0,\r\n // 向下舍出,如:1.354保留两位是1.35;1.355保留两位是1.35;\r\n ROUND_FLOOR: 1,\r\n};\r\n","/**\r\n * 正则\r\n */\r\nexport const REGEXP = {\r\n // 中文汉字\r\n CH: /^[\\u4E00-\\u9FA5]+$/,\r\n // 英文字母\r\n EN: /^[a-zA-Z]$/,\r\n // 小写字母\r\n LOWER_CASE: /^[a-z]+$/,\r\n // 大写字母\r\n UPPER_CASE: /^[A-Z]+$/,\r\n // 中文姓名,2-16位\r\n CH_NAME: /^[\\u4e00-\\u9fa5·]{2,16}$/,\r\n // 英文姓名,0-20位\r\n EN_NAME: /(^[a-zA-Z][a-zA-Z\\s]{0,20}[a-zA-Z]$)/,\r\n // 数字,包含正数和负数\r\n NUMBER: /^([-+])?\\d+(\\.\\d+)?$/,\r\n // 整数,包含:0,正整数和负整数\r\n INTEGER: /^(0|[1-9][0-9]*|-[1-9][0-9]*)$/,\r\n // 小数,包含正小数和负小数\r\n DECIMAL: /^\\d+\\.\\d+$/,\r\n // 正整数或者保留两位小数\r\n INT_OR_FLOAT: /(^[1-9][0-9]*$)|(^[1-9][0-9]*\\.[0-9]{1,2}$)|(^0\\.[0-9]{1,2}$)|(^0$)/,\r\n // 手机号码,支持+86\r\n MOBILE: /^(?:(?:\\+|00)86)?1[1-9]\\d{9}$/,\r\n // 固定电话号码,比如:0755-1111111\r\n PHONE: /^(?:(?:\\d{3}-)?\\d{8}|^(?:\\d{4}-)?\\d{7,8})(?:-\\d+)?$/,\r\n // 邮箱\r\n EMAIL: /^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/,\r\n // 一代15位和二代18位身份证\r\n ID_CARD:\r\n /(^\\d{8}(0\\d|10|11|12)([0-2]\\d|30|31)\\d{3}$)|(^\\d{6}(18|19|20)\\d{2}(0[1-9]|10|11|12)([0-2]\\d|30|31)\\d{3}(\\d|X|x)$)/,\r\n // 仅校验一代15位身份证\r\n ID_CARD15: /(^\\d{8}(0\\d|10|11|12)([0-2]\\d|30|31)\\d{3}$)/,\r\n // 仅校验二代18位身份证\r\n ID_CARD18: /(^\\d{6}(18|19|20)\\d{2}(0[1-9]|10|11|12)([0-2]\\d|30|31)\\d{3}(\\d|X|x)$)/,\r\n // 银行卡号\r\n BANK_CARD: /^[1-9]\\d{9,29}$/,\r\n // 邮政编码\r\n POST_CODE: /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\\d{4}$/,\r\n // url地址,可以获取到主机地址、主机名、端口号、协议、查询参数、hash等信息c\r\n URL: /^(?:(ftp|https?|ftps):\\/\\/)?((?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+(?:[a-zA-Z]{2,6})?)?(?::(\\d+))?(?:\\/([^\\?#]*))?(?:\\?([^#]*))?(?:#(.*))?$/,\r\n // ip地址\r\n IP: /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\r\n // IPv6地址\r\n IP6: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,\r\n // 是外链,http,https,mail,tel电话\r\n EXTERNAL: /^(http?:|https?:|mailto:|tel:)/,\r\n};\r\n","/**\r\n * 日期\r\n */\r\nexport const DATE = {\r\n // 上午和下午\r\n AM_PM: {\r\n zh: {\r\n AM: \"上午\",\r\n PM: \"下午\",\r\n },\r\n en: {\r\n AM: \"AM\",\r\n PM: \"PM\",\r\n },\r\n },\r\n // 周\r\n WEEK: {\r\n zh: {\r\n FULL: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\r\n SHORT: [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"],\r\n MINI: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"],\r\n },\r\n en: {\r\n FULL: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n SHORT: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n MINI: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\r\n },\r\n },\r\n\r\n // 月\r\n MONTH: {\r\n zh: {\r\n FULL: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\r\n SHORT: [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\", \"十一\", \"十二\"],\r\n },\r\n en: {\r\n FULL: [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ],\r\n SHORT: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n },\r\n },\r\n // 季度\r\n QUARTER: {\r\n zh: {\r\n FULL: [\"第一季度\", \"第二季度\", \"第三季度\", \"第四季度\"],\r\n SHORT: [\"一季度\", \"二季度\", \"三季度\", \"四季度\"],\r\n MINI: [\"一\", \"二\", \"三\", \"四\"],\r\n },\r\n en: {\r\n FULL: [\"quarter 1st\", \"quarter 2nd\", \"quarter 3rd\", \"quarter 4th\"],\r\n SHORT: [\"Q1th\", \"Q2nd\", \"Q3rd\", \"Q4th\"],\r\n MINI: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\r\n },\r\n },\r\n\r\n // 已过日期类型\r\n OVER_TIME: {\r\n zh: {\r\n YEAR: \"年\",\r\n MONTH: \"月\",\r\n DATE: \"日\",\r\n HOUR: \"时\",\r\n MINUTE: \"分\",\r\n SECOND: \"秒\",\r\n MILLISECOND: \"毫秒\",\r\n DAY: \"天\",\r\n QUARTER: \"季度\",\r\n },\r\n en: {\r\n YEAR: \"year\",\r\n MONTH: \"month\",\r\n DATE: \"date\",\r\n HOUR: \"hour\",\r\n MINUTE: \"minute\",\r\n SECOND: \"second\",\r\n MILLISECOND: \"millisecond\",\r\n DAY: \"day\",\r\n QUARTER: \"quarter\",\r\n },\r\n },\r\n\r\n // 时间节点\r\n PASS_TIME: {\r\n zh: {\r\n YEAR: \"年前\",\r\n MONTH: \"个月前\",\r\n DAY: \"天前\",\r\n BEFORE_YESTERDAY: \"前天\",\r\n YESTERDAY: \"昨天\",\r\n TODAY: \"今天\",\r\n HOUR: \"小时前\",\r\n MINUTE: \"分钟前\",\r\n JUST: \"刚刚\",\r\n },\r\n en: {\r\n YEAR: \" year ago\",\r\n MONTH: \" month ago\",\r\n DAY: \" day ago\",\r\n BEFORE_YESTERDAY: \"before yesterday\",\r\n YESTERDAY: \" yesterday\",\r\n TODAY: \" today\",\r\n HOUR: \" hour ago\",\r\n MINUTE: \" minute ago\",\r\n JUST: \" just\",\r\n },\r\n },\r\n\r\n // 节假日\r\n HOLIDAY: {\r\n zh: [\"元旦\", \"春节\", \"清明节\", \"劳动节\", \"端午节\", \"中秋节\", \"国庆节\"],\r\n en: [\r\n \"New Year‘s Day\",\r\n \"Spring Festival\",\r\n \"Tomb Sweeping Day\",\r\n \"Labor Day\",\r\n \"Dragon Boat Festival\",\r\n \"Mid-Autumn Day\",\r\n \"National Day\",\r\n ],\r\n },\r\n\r\n // 星座\r\n\r\n ZODIAC: {\r\n zh: [\r\n \"摩羯座\",\r\n \"水瓶座\",\r\n \"双鱼座\",\r\n \"白羊座\",\r\n \"金牛座\",\r\n \"双子座\",\r\n \"巨蟹座\",\r\n \"狮子座\",\r\n \"处女座\",\r\n \"天秤座\",\r\n \"天蝎座\",\r\n \"射手座\",\r\n ],\r\n en: [\r\n \"Capricorn\",\r\n \"Aquarius\",\r\n \"Pisces\",\r\n \"Aries\",\r\n \"Taurus\",\r\n \"Gemini\",\r\n \"Cancer\",\r\n \"Leo\",\r\n \"Virgo\",\r\n \"Libra\",\r\n \"Scorpio\",\r\n \"Sagittarius\",\r\n ],\r\n },\r\n\r\n // 生肖\r\n CHINESE_ZODIAC: {\r\n zh: [\"鼠\", \"牛\", \"虎\", \"兔\", \"龙\", \"蛇\", \"马\", \"羊\", \"猴\", \"鸡\", \"狗\", \"猪\"],\r\n en: [\"Rat\", \"Ox\", \"Tiger\", \"Rabbit\", \"Dragon\", \"Snake\", \"Horse\", \"Goat\", \"Monkey\", \"Rooster\", \"Dog\", \"Pig\"],\r\n },\r\n\r\n // 天干地支\r\n HEAVENLY_STEMS: {\r\n zh: [\"甲\", \"乙\", \"丙\", \"丁\", \"戊\", \"己\", \"庚\", \"辛\", \"壬\", \"癸\"],\r\n en: [\"Jia\", \"Yi\", \"Bing\", \"Ding\", \"Wu\", \"Ji\", \"Geng\", \"Xin\", \"Ren\", \"Gui\"],\r\n },\r\n EARTHLY_BRANCHES: {\r\n zh: [\"子\", \"丑\", \"寅\", \"卯\", \"辰\", \"巳\", \"午\", \"未\", \"申\", \"酉\", \"戌\", \"亥\"],\r\n en: [\"Zi\", \"Chou\", \"Yin\", \"Mao\", \"Chen\", \"Si\", \"Wu\", \"Wei\", \"Shen\", \"You\", \"Xu\", \"Hai\"],\r\n },\r\n};\r\n","/*\r\n * 键盘码\r\n */\r\nexport const KEYCODE = {\r\n // 字符键\r\n 8: \"Backspace\",\r\n 9: \"Tab\",\r\n 13: \"Enter\",\r\n 16: \"Shift\",\r\n 17: \"Ctrl\",\r\n 18: \"Alt\",\r\n 19: \"Pause\",\r\n 20: \"Caps Lock\",\r\n 27: \"Escape\",\r\n 32: \"Space\",\r\n 33: \"Page Up\",\r\n 34: \"Page Down\",\r\n 35: \"End\",\r\n 36: \"Home\",\r\n 37: \"Left\",\r\n 38: \"Up\",\r\n 39: \"Right\",\r\n 40: \"Down\",\r\n 42: \"Print Screen\",\r\n 45: \"Insert\",\r\n 46: \"Delete\",\r\n // 数字键\r\n 48: \"0\",\r\n 49: \"1\",\r\n 50: \"2\",\r\n 51: \"3\",\r\n 52: \"4\",\r\n 53: \"5\",\r\n 54: \"6\",\r\n 55: \"7\",\r\n 56: \"8\",\r\n 57: \"9\",\r\n // 字母键\r\n 65: \"A\",\r\n 66: \"B\",\r\n 67: \"C\",\r\n 68: \"D\",\r\n 69: \"E\",\r\n 70: \"F\",\r\n 71: \"G\",\r\n 72: \"H\",\r\n 73: \"I\",\r\n 74: \"J\",\r\n 75: \"K\",\r\n 76: \"L\",\r\n 77: \"M\",\r\n 78: \"N\",\r\n 79: \"O\",\r\n 80: \"P\",\r\n 81: \"Q\",\r\n 82: \"R\",\r\n 83: \"S\",\r\n 84: \"T\",\r\n 85: \"U\",\r\n 86: \"V\",\r\n 87: \"W\",\r\n 88: \"X\",\r\n 89: \"Y\",\r\n 90: \"Z\",\r\n // window\r\n 91: \"Windows\",\r\n 93: \"Right Click\",\r\n // Numpad\r\n 96: \"Numpad 0\",\r\n 97: \"Numpad 1\",\r\n 98: \"Numpad 2\",\r\n 99: \"Numpad 3\",\r\n 100: \"Numpad 4\",\r\n 101: \"Numpad 5\",\r\n 102: \"Numpad 6\",\r\n 103: \"Numpad 7\",\r\n 104: \"Numpad 8\",\r\n 105: \"Numpad 9\",\r\n 106: \"Numpad *\",\r\n 107: \"Numpad +\",\r\n 109: \"Numpad -\",\r\n 110: \"Numpad .\",\r\n 111: \"Numpad /\",\r\n // F功能键\r\n 112: \"F1\",\r\n 113: \"F2\",\r\n 114: \"F3\",\r\n 115: \"F4\",\r\n 116: \"F5\",\r\n 117: \"F6\",\r\n 118: \"F7\",\r\n 119: \"F8\",\r\n 120: \"F9\",\r\n 121: \"F10\",\r\n 122: \"F11\",\r\n 123: \"F12\",\r\n // 特殊符号\r\n 144: \"Num Lock\",\r\n 145: \"Scroll Lock\",\r\n 182: \"My Computer\",\r\n 183: \"My Calculator\",\r\n 186: \";\",\r\n 187: \"=\",\r\n 188: \",\",\r\n 189: \"-\",\r\n 190: \".\",\r\n 191: \"/\",\r\n 192: \"`\",\r\n 219: \"[\",\r\n 220: \"\\\\\",\r\n 221: \"]\",\r\n 222: \"'\",\r\n};\r\n","/**\r\n * 身份证号\r\n */\r\nexport const ID_CARD = {\r\n // 身份证号对应的省\r\n PROVINCE: {\r\n 11: \"北京\",\r\n 12: \"天津\",\r\n 13: \"河北\",\r\n 14: \"山西\",\r\n 15: \"内蒙古\",\r\n 21: \"辽宁\",\r\n 22: \"吉林\",\r\n 23: \"黑龙江\",\r\n 31: \"上海\",\r\n 32: \"江苏\",\r\n 33: \"浙江\",\r\n 34: \"安徽\",\r\n 35: \"福建\",\r\n 36: \"江西\",\r\n 37: \"山东\",\r\n 41: \"河南\",\r\n 42: \"湖北\",\r\n 43: \"湖南\",\r\n 44: \"广东\",\r\n 45: \"广西\",\r\n 46: \"海南\",\r\n 50: \"重庆\",\r\n 51: \"四川\",\r\n 52: \"贵州\",\r\n 53: \"云南\",\r\n 54: \"西藏\",\r\n 61: \"陕西\",\r\n 62: \"甘肃\",\r\n 63: \"青海\",\r\n 64: \"宁夏\",\r\n 65: \"新疆\",\r\n 71: \"台湾\",\r\n 81: \"香港\",\r\n 82: \"澳门\",\r\n 91: \"国外\",\r\n },\r\n // 性别\r\n SEX: {\r\n MAN: \"男\",\r\n WOMAN: \"女\",\r\n },\r\n};\r\n","/* 字符串处理 */\r\n/**\r\n * 字符串中是否包含指定的元素\r\n * @param {String} value 包含的元素\r\n * @param {String} str 查找的字符串\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function inString(value, str) {\r\n return str.includes(value);\r\n}\r\n\r\n/**\r\n * 去除字符串前后位置空格\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function trim(value) {\r\n return value.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n}\r\n\r\n/**\r\n * 去除字符串开始位置的空格\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function trimStart(value) {\r\n return value.replace(/(^\\s*)/g, \"\");\r\n}\r\n\r\n/**\r\n * 去除字符串结束位置的空格\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function trimEnd(value) {\r\n return value.replace(/(\\s*$)/g, \"\");\r\n}\r\n\r\n/**\r\n * 去除字符串中全部的空格\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function trimAll(value) {\r\n return value.replace(/\\s+/g, \"\");\r\n}\r\n\r\n/**\r\n * 替换所有指定字符串为新的字符串\r\n * @param {String} value 参数\r\n * @param {String} oldSubstr 需要替换的字符串\r\n * @param {String} newSubstr 替换后的字符串\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function replaceAll(value, oldSubstr, newSubstr) {\r\n return value.replace(new RegExp(oldSubstr, \"gm\"), newSubstr);\r\n}\r\n\r\n/* 字符串转换 */\r\n/**\r\n * 字符串转大写\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function toUpperCase(value) {\r\n return String(value).toLocaleUpperCase();\r\n}\r\n\r\n/**\r\n * 字符串转小写\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function toLowerCase(value) {\r\n String(value).toLocaleLowerCase();\r\n}\r\n\r\n/**\r\n * 转为 snake_case 下划线命名\r\n * @description 支持 驼峰命名,短横命名,帕斯卡命名\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function toSnakeCase(value) {\r\n // 驼峰\r\n if (/^[a-z]$/.test(value.charAt(0)) && !(value.indexOf(\"-\") > 0 || value.indexOf(\"_\") > 0)) {\r\n return value.replace(/([A-Z])/g, \"_$1\").toLowerCase();\r\n }\r\n // 短横\r\n if (value.indexOf(\"-\") > 0) {\r\n return value.replace(/-/g, \"_\").toLowerCase();\r\n }\r\n // 帕斯卡\r\n if (/^[A-Z]$/.test(value.charAt(0)) && !(value.indexOf(\"-\") > 0 || value.indexOf(\"_\") > 0)) {\r\n value = value.charAt(0).toLowerCase() + value.slice(1);\r\n return value.replace(/([A-Z])/g, \"_$1\").toLowerCase();\r\n }\r\n}\r\n\r\n/**\r\n * 转为 kebab-case 短横命名\r\n * @description 支持 下划线,驼峰命名,帕斯卡命名\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function toKebabCase(value) {\r\n // 下划线\r\n if (value.indexOf(\"_\") > 0) {\r\n return value.replace(/_/g, \"-\").toLowerCase();\r\n }\r\n // 驼峰\r\n if (/^[a-z]$/.test(value.charAt(0)) && !(value.indexOf(\"-\") > 0 || value.indexOf(\"_\") > 0)) {\r\n return value.replace(/([A-Z])/g, \"-$1\").toLowerCase();\r\n }\r\n // 帕斯卡\r\n if (/^[A-Z]$/.test(value.charAt(0)) && !(value.indexOf(\"-\") > 0 || value.indexOf(\"_\") > 0)) {\r\n let newStr = value.charAt(0).toLowerCase() + value.slice(1);\r\n return newStr.replace(/([A-Z])/g, \"-$1\").toLowerCase();\r\n }\r\n}\r\n\r\n/**\r\n * 转为 camelCase 驼峰命名\r\n * @description 支持 下划线命名,短横命名,帕斯卡命名\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function toCamelCase(value) {\r\n // 下划线\r\n if (value.indexOf(\"_\") > 0) {\r\n return value.replace(/\\_(\\w)/g, function (all, letter) {\r\n return letter.toUpperCase();\r\n });\r\n }\r\n // 短横\r\n else if (value.indexOf(\"-\") > 0) {\r\n return value.replace(/\\-(\\w)/g, function (all, letter) {\r\n return letter.toUpperCase();\r\n });\r\n }\r\n // 帕斯卡\r\n else if (/^[A-Z]$/.test(value.charAt(0)) && !(value.indexOf(\"-\") > 0 || value.indexOf(\"_\") > 0)) {\r\n return value.charAt(0).toLowerCase() + value.slice(1);\r\n }\r\n // 返回自身\r\n else {\r\n return value;\r\n }\r\n}\r\n\r\n/**\r\n * 转为 PascalCase 帕斯卡命名\r\n * @description 支持 下划线命名,短横命名,驼峰命名\r\n * @param {String} value 参数\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nexport function toPascalCase(value) {\r\n // 下划线\r\n if (value.indexOf(\"_\") > 0) {\r\n let newStr = value.replace(/\\_(\\w)/g, function (all, letter) {\r\n return letter.toUpperCase();\r\n });\r\n return newStr.charAt(0).toUpperCase() + newStr.slice(1);\r\n }\r\n // 短横\r\n else if (value.indexOf(\"-\") > 0) {\r\n let newStr = value.replace(/\\-(\\w)/g, function (all, letter) {\r\n return letter.toUpperCase();\r\n });\r\n return newStr.charAt(0).toUpperCase() + newStr.slice(1);\r\n }\r\n // 驼峰\r\n else if (/^[a-z]$/.test(value.charAt(0)) && !(value.indexOf(\"-\") > 0 || value.indexOf(\"_\") > 0)) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n // 返回自身\r\n else {\r\n return value;\r\n }\r\n}\r\n\r\n/* 字符串格式化 */\r\n\r\n/**\r\n * 数字前补齐0达到指定位数\r\n * @description 相当于原生的 padStart(2,'0')\r\n * @param {Number|String} value 补零的数字\r\n * @param {Number} maxLength 补齐0后的最大长度,默认2位\r\n * @returns {String} 返回补0后指定位数的字符串\r\n */\r\nexport function zeroStart(value, maxLength = 2) {\r\n let len = value.toString().length;\r\n while (len < maxLength) {\r\n value = \"0\" + value;\r\n len++;\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * 数字后补齐0达到指定位数\r\n * @description 相当于原生的 padEnd(2,'0')\r\n * @param {Number|String} value 补零的数字\r\n * @param {Number} maxLength 补齐0后的最大长度,默认2位\r\n * @returns {String} 返回补0后指定位数的字符串\r\n */\r\nexport function zeroEnd(value, maxLength = 2) {\r\n let len = value.toString().length;\r\n while (len < maxLength) {\r\n value = value + \"0\";\r\n len++;\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * 格式化为标题样式\r\n * @param {String} value 字符串值\r\n * @returns {String} 返回格式化后的标题样式\r\n */\r\nexport function formatTitle(value) {\r\n if (!value) return \"\";\r\n return value\r\n .split(/(?=[A-Z])|[\\.\\-\\s_]/)\r\n .map((s) => s.trim())\r\n .filter((s) => !!s)\r\n .map((s) => toPascalCase(s.toLowerCase()))\r\n .join(\" \");\r\n}\r\n\r\n/**\r\n * 格式化字符串模版\r\n * @param {String} value 字符串值\r\n * @param {Object} data 模版数据\r\n * @returns {String} 返回格式化后的模版字符串\r\n */\r\nexport function formatTemplate(value, data) {\r\n if (!value) return \"\";\r\n return Array.from(value.matchAll(/\\{\\{(.+?)\\}\\}/g)).reduce((acc, match) => {\r\n return acc.replace(match[0], data[match[1]]);\r\n }, value);\r\n}\r\n\r\n/**\r\n * 格式化千分位数字\r\n * @description 支持任意数据传参,如果非数字则不会格式化,并返回原数据\r\n * @param {Number|String} num 数字\r\n * @returns {String} 返回格式化后的千分位数字\r\n */\r\nexport function formatThousand(num) {\r\n if (!parseFloat(num)) return num;\r\n num = String(num);\r\n let regex = num.indexOf(\".\") > -1 ? /(\\d)(?=(\\d{3})+\\.)/g : /(\\d)(?=(?:\\d{3})+$)/g;\r\n return num.replace(regex, \"$1,\");\r\n}\r\n\r\n/**\r\n * 格式化人民币金额大写\r\n * @param {Number|String} money 金额\r\n * @returns {String} 返回金额大写\r\n */\r\nexport function formatRmbChinese(money) {\r\n // 汉字的数字\r\n let cnNums = [\"零\", \"壹\", \"贰\", \"叁\", \"肆\", \"伍\", \"陆\", \"柒\", \"捌\", \"玖\"];\r\n // 基本单位\r\n let cnIntRadiance = [\"\", \"拾\", \"佰\", \"仟\"];\r\n // 对应整数部分扩展单位\r\n let cnIntUnits = [\"\", \"万\", \"亿\", \"兆\"];\r\n // 对应小数部分单位\r\n let cnDecUnits = [\"角\", \"分\", \"毫\", \"厘\"];\r\n // 整数金额时后面跟的字符\r\n let cnInteger = \"整\";\r\n // 整型完以后的单位\r\n let cnIntLast = \"元\";\r\n // 最大处理的数字\r\n let maxNum = Number(\"999999999999999.9999\");\r\n // 金额整数部分\r\n let integerNum;\r\n // 金额小数部分\r\n let decimalNum;\r\n // 输出的中文金额字符串\r\n let chineseStr = \"\";\r\n // 分离金额后用的数组,预定义\r\n let parts;\r\n if (money === \"\") {\r\n // 不能用==\r\n return \"\";\r\n }\r\n money = parseFloat(money);\r\n if (money >= maxNum) {\r\n // 超出最大处理数字,抛出异常\r\n throw new Error(\"Calculated number overflow!\");\r\n }\r\n if (money === 0) {\r\n chineseStr = cnNums[0] + cnIntLast + cnInteger;\r\n return chineseStr;\r\n }\r\n // 转换为字符串\r\n money = money.toString();\r\n if (money.indexOf(\".\") === -1) {\r\n integerNum = money;\r\n decimalNum = \"\";\r\n } else {\r\n parts = money.split(\".\");\r\n integerNum = parts[0];\r\n decimalNum = parts[1].substr(0, 4);\r\n }\r\n // 获取整型部分转换\r\n if (parseInt(integerNum, 10) > 0) {\r\n let zeroCount = 0;\r\n let IntLen = integerNum.length;\r\n for (let i = 0; i < IntLen; i++) {\r\n let n = integerNum.substr(i, 1);\r\n let p = IntLen - i - 1;\r\n let q = p / 4;\r\n let m = p % 4;\r\n if (n === \"0\") {\r\n zeroCount++;\r\n } else {\r\n if (zeroCount > 0) {\r\n chineseStr += cnNums[0];\r\n }\r\n // 归零\r\n zeroCount = 0;\r\n chineseStr += cnNums[parseInt(n)] + cnIntRadiance[m];\r\n }\r\n if (m === 0 && zeroCount < 4) {\r\n chineseStr += cnIntUnits[q];\r\n }\r\n }\r\n chineseStr += cnIntLast;\r\n }\r\n // 小数部分\r\n if (decimalNum !== \"\") {\r\n let decLen = decimalNum.length;\r\n for (let i = 0; i < decLen; i++) {\r\n let n = decimalNum.substr(i, 1);\r\n if (n !== \"0\") {\r\n chineseStr += cnNums[Number(n)] + cnDecUnits[i];\r\n }\r\n }\r\n }\r\n if (chineseStr === \"\") {\r\n chineseStr += cnNums[0] + cnIntLast + cnInteger;\r\n } else if (decimalNum === \"\") {\r\n chineseStr += cnInteger;\r\n }\r\n return chineseStr;\r\n}\r\n","import { REGEXP } from \"../constants/index.js\";\r\n\r\n/**\r\n * 判断是整数\r\n * @param {*} value 参数\r\n * @returns {Boolean} result 返回结果\r\n */\r\nexport function isInteger(value) {\r\n return Number.isInteger(value);\r\n}\r\n\r\n/**\r\n * 判断是小数\r\n * @param {*} value 参数\r\n * @returns {Boolean} result 返回结果\r\n */\r\nexport function isDecimal(value) {\r\n return /^\\d+\\.\\d+$/.test(value);\r\n}\r\n\r\n/**\r\n * 判断类型是数字 Number\r\n * @param {Number} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNumber(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Number\";\r\n}\r\n\r\n/**\r\n * 判断类型是字符串 String\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isString(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"String\";\r\n}\r\n\r\n/**\r\n * 判断类型是数组 Array\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isArray(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Array\";\r\n}\r\n\r\n/**\r\n * 判断类型是对象 Object\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isObject(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Object\";\r\n}\r\n\r\n/**\r\n * 判断类型是布尔 Boolean\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isBoolean(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Boolean\";\r\n}\r\n\r\n/**\r\n * 判断类型是日期 Date\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isDate(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Date\";\r\n}\r\n\r\n/**\r\n * 判断类型是函数 Function\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isFunction(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Function\";\r\n}\r\n\r\n/**\r\n * 判断类型是函数字符串 FunctionString\r\n * @description 支持普通函数,异步函数,箭头函数\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isFunctionString(value) {\r\n if (value) {\r\n try {\r\n let fn = new Function(`return ${value}`)();\r\n return typeof fn === \"function\";\r\n } catch (e) {\r\n // 如果发生错误,比如语法错误,那么这不是一个有效的函数\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * 判断类型是异步函数 AsyncFunction\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isAsyncFunction(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"AsyncFunction\";\r\n}\r\n\r\n/**\r\n * 判断类型是 Symbol\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSymbol(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Symbol\";\r\n}\r\n\r\n/**\r\n * 判断类型是正则 RegExp\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isRegExp(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"RegExp\";\r\n}\r\n\r\n/**\r\n * 判断类型是错误 Error\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isError(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Error\";\r\n}\r\n\r\n/**\r\n * 判断类型是 Promise\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isPromise(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Promise\";\r\n}\r\n\r\n/**\r\n *判断类型是 Map\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isMap(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Map\";\r\n}\r\n\r\n/**\r\n * 判断类型是 WeakMap\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isWeakMap(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"WeakMap\";\r\n}\r\n\r\n/**\r\n * 判断类型是 Set\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSet(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"Set\";\r\n}\r\n\r\n/**\r\n * 判断类型是 WeakSet\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isWeakSet(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"WeakSet\";\r\n}\r\n\r\n/**\r\n * 判断类型是 BigInt\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isBigInt(value) {\r\n return Object.prototype.toString.call(value).slice(8, -1) === \"BigInt\";\r\n}\r\n\r\n/**\r\n * 判断类型是 Json\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isJson(value) {\r\n try {\r\n JSON.parse(value);\r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\n/* 数据值校验 */\r\n/**\r\n * 判断值为真\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isTrue(value) {\r\n return !isFalse(value);\r\n}\r\n\r\n/**\r\n * 判断值为假\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isFalse(value) {\r\n return (\r\n value === undefined ||\r\n value === null ||\r\n value === \"undefined\" ||\r\n value === \"null\" ||\r\n value === 0 ||\r\n value === false ||\r\n isNaN(value)\r\n );\r\n}\r\n\r\n/**\r\n * 判断非数字\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNaN(value) {\r\n // window的isNaN函数是有缺陷的,空数组/数组有一个元素,null,空字符串 都会被认为是数字\r\n return window.isNaN(value) || isArray(value) || value == null || value === \"\";\r\n}\r\n\r\n/**\r\n * 判断是数字\r\n * @description 等同于isNumber()\r\n * @param {*} value 参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNotNaN(value) {\r\n return !isNaN(value);\r\n}\r\n\r\n/**\r\n * 判断对象为空\r\n * @description 判断值是否为空,如果对象初始化了值则不为空\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNull(value) {\r\n return value === undefined || value === null || value === \"\";\r\n}\r\n\r\n/**\r\n * 判断对象不为空\r\n * @description 判断值是否为空,如果对象初始化了值则不为空\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNotNull(value) {\r\n return !isNull(value);\r\n}\r\n\r\n/**\r\n * 判断值为空\r\n * @description 判断是否是有意义不为空的值,如果值是{},[]空的数据则为空\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isEmpty(value) {\r\n if (isNull(value)) return true;\r\n if (typeof value === \"string\" || Array.isArray(value)) {\r\n return value.length === 0;\r\n }\r\n if (typeof value === \"object\") {\r\n if (value instanceof Map || value instanceof Set) {\r\n return value.size === 0;\r\n }\r\n if (value instanceof Date || value instanceof RegExp || value instanceof Error) {\r\n return false;\r\n }\r\n return Object.keys(value).length === 0;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断值不为空\r\n * @description 判断是否是有意义不为空的值,如果值是{},[]空的数据则为空\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNotEmpty(value) {\r\n return !isEmpty(value);\r\n}\r\n\r\n/**\r\n * 判断值是空白的\r\n * @description 同时会校验空值,空对象,以及空白符号\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isBlank(value) {\r\n return isEmpty(value) || /^\\s*$/.test(value);\r\n}\r\n\r\n/**\r\n * 判断值不是空白的\r\n * @description 同时会校验空值,空对象,以及空白符号\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNotBlank(value) {\r\n return !isBlank(value);\r\n}\r\n\r\n/**\r\n * 判断值是undefined\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isUndefined(value) {\r\n return value === undefined;\r\n}\r\n\r\n/**\r\n * 判断值不是undefined\r\n * @param {*} value 校验的参数\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isNotUndefined(value) {\r\n return !isUndefined(value);\r\n}\r\n\r\n/* 数据比较 */\r\n/**\r\n * 判断两个值是否相等\r\n * @param {String|Number} value1 参数1\r\n * @param {String|Number} value2 参数2\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function equals(value1, value2) {\r\n return Object.is(value1, value2);\r\n}\r\n\r\n/**\r\n * 判断两个值是否相等(忽略大小写)\r\n * @param {String|Number} value1 参数1\r\n * @param {String|Number} value2 参数2\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function equalsIgnoreCase(value1, value2) {\r\n return Object.is(value1.toLowerCase(), value2.toLowerCase());\r\n}\r\n\r\n/**\r\n * 深度对比数据\r\n * @description 可以对比任意数据,对象,数组,日期等也可深度对比,对象不区分先后顺序\r\n * @param {*} x 数据1\r\n * @param {*} y 数据2\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function deepCompare(x, y) {\r\n let i, l, leftChain, rightChain;\r\n\r\n function compare2Objects(x, y) {\r\n let p;\r\n\r\n // remember that NaN === NaN returns false\r\n // and isNaN(undefined) returns true\r\n if (isNaN(x) && isNaN(y) && typeof x === \"number\" && typeof y === \"number\") {\r\n return true;\r\n }\r\n\r\n // Compare primitives and functions.\r\n // Check if both arguments link to the same object.\r\n // Especially useful on the step where we compare prototypes\r\n if (x === y) {\r\n return true;\r\n }\r\n\r\n // Works in case when functions are created in constructor.\r\n // Comparing dates is a common scenario. Another built-ins?\r\n // We can even handle functions passed across iframes\r\n if (\r\n (typeof x === \"function\" && typeof y === \"function\") ||\r\n (x instanceof Date && y instanceof Date) ||\r\n (x instanceof RegExp && y instanceof RegExp) ||\r\n (x instanceof String && y instanceof String) ||\r\n (x instanceof Number && y instanceof Number)\r\n ) {\r\n return x.toString() === y.toString();\r\n }\r\n\r\n // At last checking prototypes as good as we can\r\n if (!(x instanceof Object && y instanceof Object)) {\r\n return false;\r\n }\r\n\r\n if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {\r\n return false;\r\n }\r\n\r\n if (x.constructor !== y.constructor) {\r\n return false;\r\n }\r\n\r\n if (x.prototype !== y.prototype) {\r\n return false;\r\n }\r\n\r\n // Check for infinitive linking loops\r\n if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {\r\n return false;\r\n }\r\n\r\n // Quick checking of one object being a subset of another.\r\n for (p in y) {\r\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\r\n return false;\r\n } else if (typeof y[p] !== typeof x[p]) {\r\n return false;\r\n }\r\n }\r\n\r\n for (p in x) {\r\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\r\n return false;\r\n } else if (typeof y[p] !== typeof x[p]) {\r\n return false;\r\n }\r\n\r\n switch (typeof x[p]) {\r\n case \"object\":\r\n case \"function\":\r\n leftChain.push(x);\r\n rightChain.push(y);\r\n\r\n if (!compare2Objects(x[p], y[p])) {\r\n return false;\r\n }\r\n\r\n leftChain.pop();\r\n rightChain.pop();\r\n break;\r\n\r\n default:\r\n if (x[p] !== y[p]) {\r\n return false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n if (arguments.length < 1) {\r\n return true; // Die silently? Don't know how to handle such case, please help...\r\n // throw \"Need two or more arguments to compare\";\r\n }\r\n\r\n for (i = 1, l = arguments.length; i < l; i++) {\r\n leftChain = [];\r\n rightChain = [];\r\n\r\n if (!compare2Objects(arguments[0], arguments[i])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import { isNull } from \"../validate/index.js\";\r\n\r\n/**\r\n * 转为数字类型\r\n * @description 解决部分浏览器在转换 '08','09'等是0开头时被默认转8进制问题\r\n * @param {String,number} value 转换的值\r\n * @param {Number} radix 进制数,默认10进制\r\n * @returns {Number} 返回转换后的数字\r\n */\r\nexport function parseInt(value, radix = 10) {\r\n if (isNull(value)) {\r\n return 0;\r\n }\r\n return Number.parseInt(value, radix);\r\n}\r\n\r\n/**\r\n * 转为小数类型\r\n * @param {String,number} value 转换的值\r\n * @returns {Number} 返回转换后的数字\r\n */\r\nexport function parseFloat(value) {\r\n if (isNull(value)) {\r\n return 0.0;\r\n }\r\n return Number.parseFloat(value);\r\n}\r\n","import { SORT } from \"../constants/index.js\";\r\nimport { isArray, isEmpty, isNull, isObject } from \"../validate\";\r\n\r\n/* 数组计算 */\r\n/**\r\n * 数组最小值\r\n * @param {Array} array 数组\r\n * @returns {Number} 返回最小值\r\n */\r\nexport function arrayMin(array) {\r\n return Math.min.apply(null, array);\r\n}\r\n\r\n/**\r\n * 数组最大值\r\n * @param {Array} array 数组\r\n * @returns {Number} 返回最大值\r\n */\r\nexport function arrayMax(array) {\r\n return Math.max.apply(null, array);\r\n}\r\n\r\n/**\r\n * 数组求和\r\n * @param {Array} array 数组\r\n * @returns {Number} 返回和\r\n */\r\nexport function arraySum(array) {\r\n return array.reduce(function (pre, cur) {\r\n return pre + cur;\r\n });\r\n}\r\n\r\n/**\r\n * 数组求平均值\r\n * @param {Array} array 数组\r\n * @returns {Number} 返回平均数\r\n */\r\nexport function arrayAvg(array) {\r\n return arraySum(array) / array.length;\r\n}\r\n\r\n/* 数组比较 */\r\n/**\r\n * 数组中是否包含指定的元素\r\n * @param {String|Number} value 元素\r\n * @param {Array} array 查找的数组\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function inArray(value, array) {\r\n if (isNull(value)) return false;\r\n return array.includes(value);\r\n}\r\n\r\n/**\r\n * 比较两个数组是否相等\r\n * @param {Array} array1 数组1\r\n * @param {Array} array2 数组2\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function arrayEquals(array1, array2) {\r\n if (array1 === array2) return true;\r\n if (array1.length !== array2.length) return false;\r\n return array1.every((v, i) => v === array2[i]);\r\n}\r\n\r\n/* 数组操作 */\r\n/**\r\n * 生成指定长度的数组\r\n * @param {Number} length 长度,默认 0\r\n * @returns {Array} 返回数组\r\n */\r\nexport function arrayCreate(length = 0) {\r\n return [...Array(length).keys()];\r\n}\r\n\r\n/**\r\n * 数组指定位置添加元素\r\n * @description 如果数组为空,则在0位置添加元素\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @param {*} value 添加的元素\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayInsert(array = [], index = 0, value = undefined) {\r\n if (index < 0) return array;\r\n\r\n if (array.length === 0) {\r\n array.push(value);\r\n } else {\r\n if (index > array.length - 1) {\r\n return array;\r\n }\r\n array.splice(index, 0, value);\r\n }\r\n\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组指定位置前面添加元素\r\n * @description 如果数组为空,则在0位置添加元素\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @param {*} value 添加的元素\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayInsertBefore(array = [], index = 0, value = undefined) {\r\n if (index < 0) return array;\r\n\r\n if (array.length === 0) {\r\n array.push(value);\r\n } else {\r\n if (index > array.length - 1) {\r\n return array;\r\n }\r\n array.splice(index, 0, value);\r\n }\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组指定位置后面添加元素\r\n * @description 如果数组为空,则在0位置添加元素\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @param {*} value 添加的元素\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayInsertAfter(array = [], index = 0, value = undefined) {\r\n if (index < 0) return array;\r\n\r\n if (array.length === 0) {\r\n array.push(value);\r\n } else {\r\n if (index > array.length - 1) {\r\n return array;\r\n }\r\n array.splice(index, 0, array.splice(index, 1, value)[0]);\r\n }\r\n\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组指定位置删除元素\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayRemove(array = [], index = 0) {\r\n if (index < 0 || index > array.length - 1) return array;\r\n\r\n array.splice(index, 1);\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组指定位置前面删除元素\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayRemoveBefore(array = [], index = 0) {\r\n if (index <= 0 || index > array.length - 1) return array;\r\n\r\n array.splice(index - 1, 1);\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组指定位置后面删除元素\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayRemoveAfter(array = [], index = 0) {\r\n if (index < 0 || index > array.length - 1) return array;\r\n\r\n array.splice(index + 1, 1);\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组置顶\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayTop(array = [], index = 0) {\r\n if (index < 0 || index > array.length - 1) return array;\r\n\r\n array.unshift(array.splice(index, 1)[0]);\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组置尾\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayBottom(array = [], index = 0) {\r\n if (index < 0 || index > array.length - 1) return array;\r\n\r\n array.push(array.splice(index, 1)[0]);\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组向上移动\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayUp(array = [], index = 0) {\r\n if (index < 0 || index > array.length - 1) return array;\r\n\r\n if (index > 0) {\r\n array.splice(index - 1, 0, array.splice(index, 1)[0]);\r\n } else {\r\n array.push(array.splice(index, 1)[0]);\r\n }\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组向下移动\r\n * @param {Array} array 数组\r\n * @param {Number} index 下标位置,默认0\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayDown(array = [], index = 0) {\r\n if (index < 0 || index > array.length - 1) return array;\r\n\r\n if (index < array.length - 1) {\r\n array.splice(index + 1, 0, array.splice(index, 1)[0]);\r\n } else {\r\n array.unshift(array.splice(index, 1)[0]);\r\n }\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组交换元素\r\n * @param {Array} array 数组\r\n * @param {Number} sourceIndex 原索引\r\n * @param {Number} targetIndex 目标索引\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arraySwap(array, sourceIndex, targetIndex) {\r\n if (sourceIndex < 0 || targetIndex < 0 || sourceIndex > array.length - 1 || targetIndex > array.length - 1) {\r\n return array;\r\n }\r\n\r\n [array[targetIndex], array[sourceIndex]] = [array[sourceIndex], array[targetIndex]];\r\n return array;\r\n}\r\n\r\n/**\r\n * 数组排序\r\n * @param {Array} array 数组\r\n * @param {Number} mode 排序模式,参考常量集合中 数组常量,默认是升序\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arraySort(array, mode = SORT.ASC) {\r\n return array.sort((a, b) => {\r\n switch (mode) {\r\n // 升序\r\n case SORT.ASC:\r\n return a - b;\r\n // 降序\r\n case SORT.DESC:\r\n return b - a;\r\n // 随机\r\n case SORT.RANDOM:\r\n return Math.random() - 0.5;\r\n // 默认\r\n default:\r\n return array;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 数组属性混合排序\r\n * @description 排序默认为asc升序\r\n * @param {Array} array 数组\r\n * @param {Array} props 排序的属性\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arraySortBy(array, props) {\r\n return array.sort((a, b) => {\r\n for (let item of props) {\r\n // 排序配置\r\n let prop = \"\",\r\n order = \"asc\";\r\n if (isObject(item)) {\r\n prop = item.prop;\r\n order = item.order || \"asc\";\r\n } else {\r\n prop = item;\r\n order = \"asc\";\r\n }\r\n // 排序逻辑\r\n if (a[prop] < b[prop]) {\r\n return order === \"asc\" ? -1 : 1;\r\n }\r\n if (a[prop] > b[prop]) {\r\n return order === \"asc\" ? 1 : -1;\r\n }\r\n }\r\n return 0;\r\n });\r\n}\r\n\r\n/**\r\n * 数组元素去重\r\n * @param {Array} array 数组\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayUnique(array) {\r\n if (isEmpty(array)) return [];\r\n\r\n return Array.from(new Set(array));\r\n}\r\n\r\n/**\r\n * 数组打乱元素\r\n * @description 可以适用于一些抽奖人员列表打乱顺序\r\n * @param {Array} array 数组\r\n * @returns {Array} 返回操作后的数组\r\n */\r\nexport function arrayShuffle(array) {\r\n for (let i = 1; i < array.length; i++) {\r\n const random = Math.floor(Math.random() * (i + 1));\r\n [array[random], array[i]] = [array[i], array[random]];\r\n }\r\n return array;\r\n}\r\n\r\n/* 数组转换 */\r\n/**\r\n * 普通数组转树形结构\r\n * @description 包含id和pid属性关系的一维数组,转为children的树形结构\r\n * @param {Array} array 数组\r\n * @param {Object} setting 配置项\r\n * @returns {Array} 返回树形节点\r\n */\r\nexport function arrayToTree(array, setting = { key: \"id\", parentKey: \"pid\", childrenKey: \"children\" }) {\r\n let key = setting.key,\r\n parentKey = setting.parentKey,\r\n childrenKey = setting.childrenKey;\r\n\r\n // 数组或者key是否为空\r\n if (!array || array.length === 0 || !key || key === \"\") return [];\r\n\r\n // 获得子节点方法\r\n const nodeChildren = function (node, childrenKey, newChildren) {\r\n if (!node) {\r\n return null;\r\n }\r\n if (typeof newChildren !== \"undefined\") {\r\n node[childrenKey] = newChildren;\r\n }\r\n return node[childrenKey];\r\n };\r\n\r\n // 声明变量\r\n let result = [];\r\n let tempMap = {};\r\n for (let i = 0; i < array.length; i++) {\r\n // 如果源数据数组中有children,则需要删除掉,否则会导致和之前的children合并\r\n array[i][childrenKey] && delete array[i][childrenKey];\r\n tempMap[array[i][key]] = array[i];\r\n }\r\n for (let i = 0; i < array.length; i++) {\r\n let parent = tempMap[array[i][parentKey]];\r\n if (parent && array[i][key] !== array[i][parentKey]) {\r\n let children = nodeChildren(parent, childrenKey);\r\n\r\n if (!children) {\r\n children = nodeChildren(parent, childrenKey, []);\r\n }\r\n children.push(array[i]);\r\n } else {\r\n result.push(array[i]);\r\n }\r\n }\r\n\r\n // 返回结果\r\n return result;\r\n}\r\n\r\n/**\r\n * 树形结构转普通数组\r\n * @param {Array} nodes 树形节点\r\n * @param {Object} setting 配置项\r\n * @returns {Array} 返回普通数组\r\n */\r\nexport function treeToArray(nodes, setting = { childrenKey: \"children\" }) {\r\n let childrenKey = setting.childrenKey;\r\n let result = [];\r\n for (let node of nodes) {\r\n // 删除掉多余空的children\r\n if (node[childrenKey] && !node[childrenKey].length) {\r\n delete node[childrenKey];\r\n }\r\n result.push(node);\r\n // 继续执行\r\n if (node[childrenKey] && node[childrenKey].length) {\r\n let array = treeToArray(node[childrenKey], setting);\r\n array && result.push(...array);\r\n }\r\n }\r\n\r\n // 返回结果\r\n return result;\r\n}\r\n\r\n/* 数组求并集,交集,差集等 */\r\n/**\r\n * 数组求并集\r\n * @description 数组1 和 数组2 合并一起的元素集合\r\n * @param {Array} array1 数组1\r\n * @param {Array} array2 数组2\r\n * @returns {Array} 返回数组\r\n */\r\nexport function arrayUnion(array1, array2) {\r\n return [...new Set(array1.concat(array2))];\r\n}\r\n\r\n/**\r\n * 数组求交集\r\n * @description 数组1 和 数组2 相同的元素集合\r\n * @param {Array} array1 数组1\r\n * @param {Array} array2 数组2\r\n * @returns {Array} 返回数组\r\n */\r\nexport function arrayIntersect(array1, array2) {\r\n return [...new Set(array1)].filter((item) => array2.includes(item));\r\n}\r\n\r\n/**\r\n * 数组求差集\r\n * @description 数组1 中不包含 数组2 的元素集合\r\n * @param {Array} array1 数组1\r\n * @param {Array} array2 数组2\r\n * @returns {Array} 返回数组\r\n */\r\nexport function arrayDifference(array1, array2) {\r\n return [...new Set(array1)].filter((item) => !array2.includes(item));\r\n}\r\n\r\n/**\r\n * 数组求补集\r\n * @description 数组1 和 数组2 不相同的元素集合\r\n * @param {Array} array1 数组1\r\n * @param {Array} array2 数组2\r\n * @returns {Array} 返回数组\r\n */\r\nexport function arrayComplement(array1, array2) {\r\n return [\r\n ...[...new Set(array1)].filter((item) => !array2.includes(item)),\r\n ...[...new Set(array2)].filter((item) => !array1.includes(item)),\r\n ];\r\n}\r\n","import { isEmpty, isObject, isArray, isDate, isNumber, isNotNaN, isNaN } from \"../validate\";\r\n\r\n/* 对象转换 */\r\n/**\r\n * map转object\r\n * @param {Map} map 参数\r\n * @returns {Object} 返回Object\r\n */\r\nexport function mapToObject(map) {\r\n let obj = Object.create(null);\r\n for (let [k, v] of map) {\r\n obj[k] = v;\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * map转json字符串\r\n * @param {Map} map 参数\r\n * @returns {String} 返回Json字符串\r\n */\r\nexport function mapToJson(map) {\r\n return JSON.stringify(mapToObject(map));\r\n}\r\n\r\n/**\r\n * object转map\r\n * @param {Object} obj 参数\r\n * @returns {Map} 返回Map\r\n */\r\nexport function objectToMap(obj) {\r\n let map = new Map();\r\n for (let k of Object.keys(obj)) {\r\n map.set(k, obj[k]);\r\n }\r\n return map;\r\n}\r\n\r\n/**\r\n * json字符串转map\r\n * @param {String} json json字符串\r\n * @returns {Map} 返回Map\r\n */\r\nexport function jsonToMap(json) {\r\n return objectToMap(JSON.parse(json));\r\n}\r\n\r\n/**\r\n * json对象转json字符串\r\n * @param {Object} json json对象\r\n * @returns {String} 返回Json字符串\r\n */\r\nexport function stringifyJson(json) {\r\n return JSON.stringify(json);\r\n}\r\n\r\n/**\r\n * json字符串转json对象\r\n * @param {String} json json字符串\r\n * @returns {Object} 返回Json对象\r\n */\r\nexport function parseJson(json) {\r\n if (isEmpty(json)) return;\r\n return JSON.parse(json);\r\n}\r\n\r\n/* 数据拷贝,对比,合并等操作 */\r\n/**\r\n * 浅拷贝数据\r\n * @param {*} source 拷贝的数据\r\n * @returns {*} 返回浅拷贝的数据\r\n */\r\nexport function clone(source) {\r\n return Object.assign(source);\r\n}\r\n\r\n/**\r\n * 深拷贝数据\r\n * @param {*} source 拷贝的数据\r\n * @returns {*} 返回深拷贝的数据\r\n */\r\nexport function deepClone(source) {\r\n // Object\r\n if (isObject(source)) {\r\n let copy = {};\r\n for (let attr in source) {\r\n if (source.hasOwnProperty(attr)) copy[attr] = deepClone(source[attr]);\r\n }\r\n return copy;\r\n }\r\n\r\n // Array\r\n else if (isArray(source)) {\r\n let copy = [];\r\n for (let i = 0, len = source.length; i < len; i++) {\r\n copy[i] = deepClone(source[i]);\r\n }\r\n return copy;\r\n }\r\n\r\n // Date\r\n else if (isDate(source)) {\r\n let copy = new Date();\r\n copy.setTime(source.getTime());\r\n return copy;\r\n }\r\n\r\n // Other 返回原数据\r\n else {\r\n return source;\r\n }\r\n}\r\n\r\n/**\r\n * 比较两个对象是否相等\r\n * @description 方法只能对比简单的对象,不能包含function,另外对象的属性顺序不一致也是相等的\r\n * @param {Object} obj1 对象1\r\n * @param {Object} obj2 对象2\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function objectEquals(obj1, obj2) {\r\n // 比较值相等\r\n if (obj1 === obj2) {\r\n return true;\r\n }\r\n // 比较Date\r\n if (obj1 instanceof Date && obj2 instanceof Date) {\r\n return obj1.getTime() === obj2.getTime();\r\n }\r\n // 对象比较引用\r\n if (!obj1 || !obj2 || (typeof obj1 !== \"object\" && typeof obj2 !== \"object\")) {\r\n return obj1 === obj2;\r\n }\r\n // 比较原型\r\n if (obj1.prototype !== obj2.prototype) {\r\n return false;\r\n }\r\n // 比较对象的值\r\n const keys = Object.keys(obj1);\r\n if (keys.length !== Object.keys(obj2).length) {\r\n return false;\r\n } else {\r\n return keys.every((k) => objectEquals(obj1[k], obj2[k]));\r\n }\r\n}\r\n\r\n/**\r\n * 合并对象\r\n * @param {Object} target 目标对象\r\n * @param {Object[]} source 原对象列表\r\n * @returns {Object} 返回合并后的对象\r\n */\r\nexport function merge(target, ...source) {\r\n return Object.assign(target, ...source);\r\n}\r\n\r\n/* 根据字符串属性路径操作目标对象 */\r\n/**\r\n * 根据字符串属性路径获取目标对象的值\r\n * @example\r\n * let res = {code:200, data:{rows:[], pages:{current:1,pageSize:20}}}\r\n * this._getValueByPath(res, 'data.pages.pageSize'); // 这里会输出20\r\n * @param {Object} target 目标对象\r\n * @param {String} path 字符串属性路径\r\n * @returns {Object} 返回目标对象\r\n */\r\nexport function getValueByPath(target, path = \"data\") {\r\n const paths = (path || \"data\").split(\".\");\r\n let current = target;\r\n for (const index in paths) {\r\n let part = paths[index];\r\n // 判断属性是取的数组\r\n let { propName, propIndex, isArray } = _getTargetPathPart(paths[index]);\r\n if (isArray) {\r\n // 获取的数组下标超出实际的长度\r\n if (propIndex < 0 || propIndex >= current[propName].length) {\r\n return undefined;\r\n }\r\n // 逐层向下找到对应属性的值\r\n current = current[propName][propIndex];\r\n }\r\n // 判断属性是取的对象属性\r\n else {\r\n // 如果属性不存在,则返回空的\r\n if (!current || !current.hasOwnProperty(part) || typeof current !== \"object\") {\r\n return undefined;\r\n }\r\n // 逐层向下找到对应属性的值\r\n current = current[part];\r\n }\r\n }\r\n return current;\r\n}\r\n\r\n/**\r\n * 根据字符串属性路径设置目标对象的值\r\n * @example\r\n * let res = {code:200, data:{rows:[], pages:{current:1,pageSize:20}}}\r\n * this._setValueByPath(res, 'data.pages.pageSize', 30); // 打印res对象会发现pageSize的值改为了30\r\n * @param {Object} target 目标对象\r\n * @param {String} path 字符串属性路径\r\n * @param {*} value 值\r\n */\r\nexport function setValueByPath(target, path = \"data\", value) {\r\n const paths = (path || \"data\").split(\".\");\r\n let current = target;\r\n\r\n // 遍历到路径的倒数第二个属性\r\n for (let index = 0; index < paths.length - 1; index++) {\r\n let part = paths[index];\r\n let nextPart = paths[index + 1];\r\n // 判断属性是取的数组\r\n let { propName, propIndex, isArray } = _getTargetPathPart(part);\r\n\r\n if (isArray) {\r\n // 检查当前属性是否存在,若不存在或者不是数组,则创建一个数组\r\n if (!current || !current.hasOwnProperty(propName)) {\r\n current[propName] = [];\r\n }\r\n // 确保数组长度足够容纳指定索引\r\n while (current[propName].length <= propIndex) {\r\n current[propName].push({});\r\n }\r\n // 逐层向下找到对应属性的值\r\n current = current[propName][propIndex];\r\n } else {\r\n // 如果不是数组索引形式,处理普通对象属性,如果是.1.数组形式,则还是返回数组\r\n if (!current || !current.hasOwnProperty(part) || typeof current[part] !== \"object\") {\r\n current[part] = isNaN(nextPart) ? [] : {};\r\n }\r\n // 移动到对象的下一层属性\r\n current = current[part];\r\n }\r\n }\r\n\r\n // 处理最后一个路径部分\r\n let lastPath = paths[paths.length - 1];\r\n let { propName, propIndex, isArray } = _getTargetPathPart(lastPath);\r\n if (isArray) {\r\n // 检查当前属性是否存在,若不存在或者不是数组,则创建一个数组\r\n if (!current.hasOwnProperty(propName) || !Array.isArray(current[propName])) {\r\n current[propName] = [];\r\n }\r\n // 确保数组长度足够容纳指定索引\r\n while (current[propName].length <= propIndex) {\r\n current[propName].push({});\r\n }\r\n // 逐层向下找到对应属性的值\r\n current[propName][propIndex] = value;\r\n } else {\r\n current[lastPath] = value;\r\n }\r\n\r\n // 返回源对象\r\n return target;\r\n}\r\n\r\n/* 内部方法 */\r\n/**\r\n * 获得目标路径的片段\r\n * @param path\r\n * @returns {{propName: (*|undefined), propIndex: (*|number|undefined), isArray: boolean}}\r\n */\r\nfunction _getTargetPathPart(path) {\r\n let pathArrayMatch = path.match(/^(\\w+)\\[(\\d+)]$/);\r\n return {\r\n propName: (pathArrayMatch && pathArrayMatch[1]) || undefined, // 属性名\r\n propIndex: pathArrayMatch ? parseInt(pathArrayMatch[2], 10) : undefined, // 属性数组时候的下标\r\n isArray: !!pathArrayMatch, // 是否是数组\r\n };\r\n}\r\n","import { isNull, isInteger, isDate, isString } from \"../validate\";\r\nimport { parseInt } from \"../number\";\r\nimport { DATE } from \"../constants\";\r\n\r\n/* 快捷日期 */\r\n/**\r\n * 今天\r\n *@returns {String} 返回日期字符串\r\n */\r\nexport function today() {\r\n return getDate();\r\n}\r\n\r\n/**\r\n * 昨天\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function yesterday() {\r\n return formatDate(addDate(new Date(), -1));\r\n}\r\n\r\n/**\r\n * 明天\r\n *@returns {String} 返回日期字符串\r\n */\r\nexport function tomorrow() {\r\n return formatDate(addDate(new Date(), +1));\r\n}\r\n\r\n/**\r\n * 上周(7天前日期)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function lastWeek(date = new Date()) {\r\n return formatDate(addDate(date, -7));\r\n}\r\n\r\n/**\r\n * 下周(7天后日期)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function nextWeek(date = new Date()) {\r\n return formatDate(addDate(date, +7));\r\n}\r\n\r\n/**\r\n * 上个月(30天前日期)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function lastMonth(date = new Date()) {\r\n return formatDate(addDate(date, -30));\r\n}\r\n\r\n/**\r\n * 下个月(30天后日期)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function nextMonth(date = new Date()) {\r\n return formatDate(addDate(date, +30));\r\n}\r\n\r\n/**\r\n * 上一年(365天前日期)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function lastYear(date = new Date()) {\r\n return formatDate(addDate(date, -365));\r\n}\r\n\r\n/**\r\n * 下一年(365天后日期)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function nextYear(date = new Date()) {\r\n return formatDate(addDate(date, +365));\r\n}\r\n\r\n/* 判断当前日期 */\r\n/**\r\n * 是否为上午\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isAM(date = new Date()) {\r\n return date.getHours() < 12;\r\n}\r\n\r\n/**\r\n * 是否为下午\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isPM(date = new Date()) {\r\n return date.getHours() >= 12;\r\n}\r\n\r\n/**\r\n * 是否为今天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isToday(date = new Date()) {\r\n // 此刻日期\r\n let nowDate = new Date();\r\n // 判断日期\r\n return [\"getFullYear\", \"getMonth\", \"getDate\"].every((i) => nowDate[i]() === date[i]());\r\n}\r\n\r\n/**\r\n * 是否为昨天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isYesterday(date = new Date()) {\r\n // 计算时间差\r\n let startTime = date.getTime();\r\n let nowTime = Date.now();\r\n let diffTime = nowTime - startTime;\r\n let diffDay = parseInt(diffTime / (1000 * 60 * 60 * 24));\r\n return diffDay === 1;\r\n}\r\n\r\n/**\r\n * 是否为前天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isBeforeYesterday(date = new Date()) {\r\n // 计算时间差\r\n let startTime = date.getTime();\r\n let nowTime = Date.now();\r\n let diffTime = nowTime - startTime;\r\n let diffDay = parseInt(diffTime / (1000 * 60 * 60 * 24));\r\n return diffDay === 2;\r\n}\r\n\r\n/**\r\n * 是否为明天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isTomorrow(date = new Date()) {\r\n // 计算时间差\r\n let startTime = date.getTime();\r\n let nowTime = Date.now();\r\n let diffTime = startTime - nowTime;\r\n let diffDay = parseInt(diffTime / (1000 * 60 * 60 * 24));\r\n return diffDay === 1;\r\n}\r\n\r\n/**\r\n * 是否为后天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isAfterTomorrow(date = new Date()) {\r\n // 计算时间差\r\n let startTime = date.getTime();\r\n let nowTime = Date.now();\r\n let time = startTime - nowTime;\r\n let diffDay = parseInt(time / (1000 * 60 * 60 * 24));\r\n return diffDay === 2;\r\n}\r\n\r\n/**\r\n * 是否为工作日\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isWorkday(date = new Date()) {\r\n let dayOfWeek = getDayOfWeek(date);\r\n return dayOfWeek !== 6 && dayOfWeek !== 7;\r\n}\r\n\r\n/**\r\n * 是否为周末(周六和周日)\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isWeekend(date = new Date()) {\r\n let dayOfWeek = getDayOfWeek(date);\r\n return dayOfWeek === 6 || dayOfWeek === 7;\r\n}\r\n\r\n/**\r\n * 是否为本周第一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isFirstDayOfWeek(date = new Date()) {\r\n return getDayOfWeek(date) === 1;\r\n}\r\n\r\n/**\r\n * 是否为本周最后一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isLastDayOfWeek(date = new Date()) {\r\n return getDayOfWeek(date) === 7;\r\n}\r\n\r\n/**\r\n * 是否为本月第一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isFirstDayOfMonth(date = new Date()) {\r\n return getDayOfMonth(date) === 1;\r\n}\r\n\r\n/**\r\n * 是否为本月最后一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isLastDayOfMonth(date = new Date()) {\r\n return getDayOfMonth(date) === getDaysOfMonth(date);\r\n}\r\n\r\n/**\r\n * 是否为本年第一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isFirstDayOfYear(date = new Date()) {\r\n return getDayOfYear(date) === 1;\r\n}\r\n\r\n/**\r\n * 是否为本年最后一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isLastDayOfYear(date = new Date()) {\r\n return getDayOfYear(date) === getDaysOfYear(date);\r\n}\r\n\r\n/* 判断年 */\r\n/**\r\n * 是否为闰年\r\n * @description 闰年366天,平年365天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isLeapYear(date = new Date()) {\r\n let year = date.getFullYear();\r\n return (year % 100 !== 0 && year % 4 === 0) || year % 400 === 0;\r\n}\r\n\r\n/**\r\n * 是否为平年\r\n * @description 闰年366天,平年365天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isCommonYear(date = new Date()) {\r\n return !isLeapYear(date);\r\n}\r\n\r\n/* 比较日期区间 */\r\n/**\r\n * 是否在日期之前\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isBefore(startDate, endDate = new Date()) {\r\n // 计算时间差\r\n let startTime = startDate.getTime();\r\n let endTime = endDate.getTime();\r\n let diffTime = startTime - endTime;\r\n return diffTime < 0;\r\n}\r\n\r\n/**\r\n * 是否在日期之后\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期,默认当前日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isAfter(startDate, endDate = new Date()) {\r\n // 计算时间差\r\n let startTime = startDate.getTime();\r\n let endTime = endDate.getTime();\r\n let diffTime = startTime - endTime;\r\n return diffTime > 0;\r\n}\r\n\r\n/**\r\n * 是否在两个日期之间\r\n * @param {Date} date 要比较的日期\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isBetween(date, startDate, endDate) {\r\n let time = date.getTime();\r\n let startTime = startDate.getTime();\r\n let endTime = endDate.getTime();\r\n return time > startTime && time < endTime;\r\n}\r\n\r\n/* 日期是否相同 */\r\n/**\r\n * 两个日期是否为同一天\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSame(startDate, endDate) {\r\n return [\"getFullYear\", \"getMonth\", \"getDate\"].every((i) => startDate[i]() === endDate[i]());\r\n}\r\n\r\n/**\r\n * 两个日期是否为同一周\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSameWeek(startDate, endDate) {\r\n let diffDate1 = startDate.getTime() / (24 * 60 * 60 * 1000);\r\n let diffDate2 = endDate.getTime() / (24 * 60 * 60 * 1000);\r\n return parseInt((diffDate1 + 4) / 7) === parseInt((diffDate2 + 4) / 7);\r\n}\r\n\r\n/**\r\n * 两个日期是否为同一个月\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSameMonth(startDate, endDate) {\r\n return [\"getFullYear\", \"getMonth\"].every((i) => startDate[i]() === endDate[i]());\r\n}\r\n\r\n/**\r\n * 两个日期是否为同一年\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSameYear(startDate, endDate) {\r\n return [\"getFullYear\"].every((i) => startDate[i]() === endDate[i]());\r\n}\r\n\r\n/* 比较两个日期相同 或 之前/之后 */\r\n/**\r\n * 两个日期是否相同或之前\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSameOrBefore(startDate, endDate) {\r\n return isSame(startDate, endDate) || isBefore(startDate, endDate);\r\n}\r\n\r\n/**\r\n * 两个日期是否相同或之后\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function isSameOrAfter(startDate, endDate) {\r\n return isSame(startDate, endDate) || isAfter(startDate, endDate);\r\n}\r\n\r\n/* 获取 日期/时间戳/周/季度 */\r\n/**\r\n * 获得此刻的日期\r\n * @returns {Date} 返回日期\r\n */\r\nexport function getNow() {\r\n return new Date();\r\n}\r\n\r\n/**\r\n * 获得当前日期字符串\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {String} format 日期字符串格式\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function getDate(date = new Date(), format = \"yyyy-MM-dd\") {\r\n return formatDate(date, format);\r\n}\r\n\r\n/**\r\n * 获得当前日期时间字符串\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {String} format 日期时间字符串格式\r\n * @returns {String} 返回日期时间字符串\r\n */\r\nexport function getDateTime(date = new Date(), format = \"yyyy-MM-dd HH:mm:ss\") {\r\n return formatDate(date, format);\r\n}\r\n\r\n/**\r\n * 获取当前时间戳\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回时间戳\r\n */\r\nexport function getTimestamp(date = new Date()) {\r\n return date.getTime();\r\n}\r\n\r\n/**\r\n * 获取当前Unix时间戳\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回Unix时间戳\r\n */\r\nexport function getUnixTimestamp(date = new Date()) {\r\n return Math.round(date / 1000);\r\n}\r\n\r\n/**\r\n * 获得当前日期的对象形式\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Object} 返回日期的对象形式\r\n */\r\nexport function getDateObject(date = new Date()) {\r\n return {\r\n year: date.getFullYear(), // 年\r\n month: date.getMonth() + 1, // 月\r\n date: date.getDate(), // 日\r\n hours: date.getHours(), // 时\r\n minutes: date.getMinutes(), // 分\r\n seconds: date.getSeconds(), // 秒\r\n milliseconds: date.getMilliseconds(), // 毫秒\r\n };\r\n}\r\n\r\n/**\r\n * 获得当前日期的数组形式\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Object} 返回日期的数组形式\r\n */\r\nexport function getDateArray(date = new Date()) {\r\n return Object.entries(getDateObject(date)).map(([key, value]) => value);\r\n}\r\n\r\n/**\r\n * 获得当前日期是周几\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {String} format 周格式化结果:E:如“日”,EE:如“周日”, EEE:如“星期日”;默认为E,为空则返回数字\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {Number,String} 返回周几,会根据语言返回\r\n */\r\nexport function getWeek(date = new Date(), format = \"E\", lang = \"zh\") {\r\n // 根据格式化和语言返回对应的周\r\n if (format === \"E\") {\r\n return DATE.WEEK[lang].MINI[date.getDay()];\r\n } else if (format === \"EE\") {\r\n return DATE.WEEK[lang].SHORT[date.getDay()];\r\n } else if (format === \"EEE\") {\r\n return DATE.WEEK[lang].FULL[date.getDay()];\r\n } else {\r\n return getDayOfWeek(date);\r\n }\r\n}\r\n\r\n/**\r\n * 获得当前日期是第几季度\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {String} format 季度格式化结果:Q:如“一”, QQ:如“一季度”;QQQ:如“第一季度”;默认为Q,为空则返回数字\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {Number,String} 返回第几季度,会根据语言返回\r\n */\r\nexport function getQuarter(date = new Date(), format = \"Q\", lang = \"zh\") {\r\n // 根据格式化和语言返回对应的周\r\n let quarterNum = Number(Math.floor((date.getMonth() + 3) / 3));\r\n if (format === \"Q\") {\r\n return DATE.QUARTER[lang].MINI[quarterNum - 1];\r\n } else if (format === \"QQ\") {\r\n return DATE.QUARTER[lang].SHORT[quarterNum - 1];\r\n } else if (format === \"QQQ\") {\r\n return DATE.QUARTER[lang].FULL[quarterNum - 1];\r\n } else {\r\n return quarterNum;\r\n }\r\n}\r\n\r\n/* 当前日期是所在 周/月/年 的第几天 */\r\n/**\r\n * 获得当前日期是所在周的第几天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number|String} 返回天数\r\n */\r\nexport function getDayOfWeek(date = new Date()) {\r\n return [7, 1, 2, 3, 4, 5, 6][date.getDay()];\r\n}\r\n\r\n/**\r\n * 获得当前日期是所在月的第几天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回天数\r\n */\r\nexport function getDayOfMonth(date = new Date()) {\r\n return date.getDate();\r\n}\r\n\r\n/**\r\n * 获得当前日期是所在年的第几天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回天数\r\n */\r\nexport function getDayOfYear(date = new Date()) {\r\n return Math.ceil((date - new Date(date.getFullYear().toString())) / (24 * 60 * 60 * 1000)) + 1;\r\n}\r\n\r\n/* 当前日期的周是所在 月/年 的第几周 */\r\n/**\r\n * 获得当前日期是所在月的第几周\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回周数\r\n */\r\nexport function getWeekOfMonth(date = new Date()) {\r\n return Math.ceil((date.getDate() + 6 - getDayOfWeek(date)) / 7);\r\n}\r\n\r\n/**\r\n * 获得当前日期是所在年的第几周\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回周数\r\n */\r\nexport function getWeekOfYear(date = new Date()) {\r\n let startDate = new Date(date.getFullYear(), 0, 1);\r\n let startDay = getDayOfWeek(startDate);\r\n let diff = Math.round((date - startDate) / (24 * 60 * 60 * 1000));\r\n return Math.ceil((diff + startDay) / 7);\r\n}\r\n\r\n/* 当前日期所在 周/月/年 共几天 */\r\n/**\r\n * 获得当前日期所在的周共几天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回天数\r\n */\r\nexport function getDaysOfWeek(date = new Date()) {\r\n return 7;\r\n}\r\n\r\n/**\r\n * 获得当前日期所在的月共几天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回天数\r\n */\r\nexport function getDaysOfMonth(date = new Date()) {\r\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n}\r\n\r\n/**\r\n * 获得当前日期所在的年共几天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回天数\r\n */\r\nexport function getDaysOfYear(date = new Date()) {\r\n return isLeapYear(date) ? 366 : 365;\r\n}\r\n\r\n/* 当前周所在 月/年 共几周 */\r\n/**\r\n * 获得当前日期是所在月的第几周\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回周数\r\n */\r\nexport function getWeeksOfMonth(date = new Date()) {\r\n let startDate = new Date(date.getFullYear(), 0, 1);\r\n let startDay = getDayOfWeek(startDate);\r\n let fullDays = isLeapYear(date) ? 366 : 365;\r\n if (startDay === 1) {\r\n return Math.ceil(fullDays / 7);\r\n } else {\r\n return Math.ceil((fullDays - 7 + startDay) / 7);\r\n }\r\n}\r\n\r\n/**\r\n * 获得当前日期是所在年的第几周\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {Number} 返回周数\r\n */\r\nexport function getWeeksOfYear(date = new Date()) {\r\n let startDate = new Date(date.getFullYear(), 0, 1);\r\n let startDay = getDayOfWeek(startDate);\r\n let fullDays = isLeapYear(date) ? 366 : 365;\r\n if (startDay === 1) {\r\n return Math.ceil(fullDays / 7);\r\n } else {\r\n return Math.ceil((fullDays - 7 + startDay) / 7);\r\n }\r\n}\r\n\r\n/* 当前日期所在 周/月/年 的 第一天/最后一天/所有天数数组 */\r\n/**\r\n * 获得当前日期所在周的第一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function getFirstDateOfWeek(date = new Date()) {\r\n let weekDay = getDayOfWeek(date);\r\n date.setDate(date.getDate() - weekDay + 1);\r\n return formatDate(date);\r\n}\r\n\r\n/**\r\n * 获得当前日期所在周的最后一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function getLastDateOfWeek(date = new Date()) {\r\n let weekDay = getDayOfWeek(date);\r\n date.setDate(date.getDate() + (7 - weekDay));\r\n return formatDate(date);\r\n}\r\n\r\n/**\r\n * 获取当前日期所在周的所有日期\r\n */\r\nexport function getFullDateOfWeek(date = new Date()) {\r\n let array = [];\r\n // 获得当前日期是本周几\r\n let dayOfWeek = date.getDay();\r\n // 根据当前日期获取本周一\r\n let firstDateOfWeek = new Date();\r\n firstDateOfWeek.setDate(date.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1));\r\n\r\n // 遍历本周日期\r\n for (let i = 0; i < 7; i++) {\r\n let currentDate = new Date(firstDateOfWeek);\r\n currentDate.setDate(currentDate.getDate() + i);\r\n array.push(formatDate(currentDate));\r\n }\r\n\r\n return array;\r\n}\r\n\r\n/**\r\n * 获得当前日期所在月的第一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function getFirstDateOfMonth(date = new Date()) {\r\n date.setDate(1);\r\n return formatDate(date);\r\n}\r\n\r\n/**\r\n * 获得当前日期所在月的最后一天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @returns {String} 返回日期字符串\r\n */\r\nexport function getLastDateOfMonth(date = new Date()) {\r\n return formatDate(new Date(date.getFullYear(), date.getMonth() + 1, 0));\r\n}\r\n\r\n/**\r\n * 获取当前日期所在月的所有日期\r\n */\r\nexport function getFullDateOfMonth(date = new Date()) {\r\n let array = [];\r\n // 获得本月第一天\r\n let firstDateOfMonth = new Date(date.getFullYear(), date.getMonth(), 1);\r\n // 获得本月最后一天\r\n let lastDateOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n // 遍历本月日期\r\n for (let i = 0; i < lastDateOfMonth.getDate(); i++) {\r\n let currentDate = new Date(firstDateOfMonth);\r\n currentDate.setDate(firstDateOfMonth.getDate() + i);\r\n array.push(currentDate);\r\n }\r\n return array;\r\n}\r\n\r\n/**\r\n * 获取当前日期所在年的第一天\r\n */\r\nexport function getFirstDateOfYear(date = new Date()) {\r\n return new Date(date.getFullYear(), 0, 1);\r\n}\r\n\r\n/**\r\n * 获取当前日期所在年的最后一天\r\n */\r\nexport function getLastDateOfYear(date = new Date()) {\r\n return new Date(date.getFullYear(), 11, 31);\r\n}\r\n\r\n/**\r\n * 获取当前日期所在年的所有日期\r\n */\r\nexport function getFullDateOfYear(date = new Date()) {\r\n let array = [];\r\n // 获得本年第一天\r\n let firstDateOfYear = new Date(date.getFullYear(), 0, 1);\r\n // 获得本年一共多少天\r\n let daysOfYear = getDaysOfYear();\r\n // 遍历本年日期\r\n for (let i = 0; i < daysOfYear; i++) {\r\n let currentDate = new Date(firstDateOfYear);\r\n currentDate.setDate(firstDateOfYear.getDate() + i);\r\n array.push(currentDate.toLocaleDateString());\r\n }\r\n return array;\r\n}\r\n\r\n/* 计算两个日期相差 */\r\n/**\r\n * 计算两个日期相差的天数,不满一天为0\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Number} 返回两个日期相差的天数,结果为正数或者负数\r\n */\r\nexport function getDiffDay(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return 0;\r\n let diff = (endDate - startDate) / (24 * 60 * 60 * 1000);\r\n\r\n // 返回\r\n return diff >= 0 ? Math.abs(diff) : diff;\r\n}\r\n\r\n/**\r\n * 计算两个日期相差的周数,不满一周为0\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Number} 返回两个日期相差的周数,结果为正数或者负数\r\n */\r\nexport function getDiffWeek(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return 0;\r\n let diff = (endDate - startDate) / (7 * 24 * 60 * 60 * 1000);\r\n\r\n // 返回\r\n return diff >= 0 ? Math.abs(diff) : diff;\r\n}\r\n\r\n/**\r\n * 计算两个日期相差的月数,不满一月为0\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Number} 返回两个日期相差的月数,结果为正数或者负数\r\n */\r\nexport function getDiffMonth(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return 0;\r\n let diff = (startDate - endDate) / (30 * 24 * 60 * 60 * 1000);\r\n\r\n // 返回\r\n return diff >= 0 ? Math.abs(diff) : diff;\r\n}\r\n\r\n/**\r\n * 计算两个日期相差的年数,不满一年为0\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Number} 返回两个日期相差的年数,结果为正数或者负数\r\n */\r\nexport function getDiffYear(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return 0;\r\n let diff = (endDate - startDate) / (12 * 30 * 24 * 60 * 60 * 1000);\r\n\r\n // 返回\r\n return diff >= 0 ? Math.abs(diff) : diff;\r\n}\r\n\r\n/* 获得两个日期之间 年月日/年月/年 数组 */\r\n/**\r\n * 获得两个日期之间的年月日数组\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Array} 返回年月日数组\r\n */\r\nexport function getBetweenDates(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return [];\r\n\r\n // 计算\r\n let array = [];\r\n while (endDate - startDate >= 0) {\r\n let year = startDate.getFullYear(),\r\n month = _digit(startDate.getMonth() + 1),\r\n day = _digit(startDate.getDate());\r\n\r\n // 加入数组\r\n array.push(year + \"-\" + month + \"-\" + day);\r\n // 更新日期\r\n startDate.setDate(startDate.getDate() + 1);\r\n }\r\n return array;\r\n}\r\n\r\n/**\r\n * 获得两个日期之间的年月数组\r\n * @description 支持:日期字符串,日期对象,时间戳,Unix时间戳\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Array} 返回年月数组\r\n */\r\nexport function getBetweenMonths(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return [];\r\n\r\n // 计算\r\n let array = [];\r\n // 获取时间对象\r\n let min = new Date();\r\n let max = new Date();\r\n // 设置起始时间\r\n min.setFullYear(startDate.getFullYear(), startDate.getMonth() + 1);\r\n // 设置结束时间\r\n max.setFullYear(endDate.getFullYear(), endDate.getMonth() + 1);\r\n\r\n // 复制一份起始时间对象\r\n let curr = min;\r\n // 定义字符串\r\n let str = \"\";\r\n // 起始时间在结束时间之前\r\n while (curr <= max) {\r\n // 获取此时间的月份\r\n let month = curr.getMonth();\r\n // 如果月份为0,也就是代表12月份\r\n if (month === 0) {\r\n str = curr.getFullYear() - 1 + \"-\" + 12;\r\n } else {\r\n // 正常月份\r\n str = curr.getFullYear() + \"-\" + _digit(month);\r\n }\r\n // 将此年月加入数组\r\n array.push(str);\r\n // 更新此时间月份\r\n curr.setMonth(month + 1);\r\n }\r\n return array;\r\n}\r\n\r\n/**\r\n * 获得两个日期之间的年数组\r\n * @param {Date} startDate 开始日期\r\n * @param {Date} endDate 结束日期\r\n * @returns {Array} 返回年数组\r\n */\r\nexport function getBetweenYears(startDate, endDate) {\r\n if (isNull(startDate) || isNull(endDate)) return [];\r\n\r\n // 计算\r\n let array = [];\r\n while (endDate - startDate >= 0) {\r\n let year = startDate.getFullYear();\r\n\r\n // 加入数组\r\n array.push(year);\r\n // 更新日期\r\n startDate.setFullYear(startDate.getFullYear() + 1);\r\n }\r\n return array;\r\n}\r\n\r\n/* 过去时间和剩余时间的显示 */\r\n/**\r\n * 获得过去时间的字符串显示\r\n * @description 例如:刚刚,1分钟前,1小时前等\r\n * @param {Date} date 日期参数\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {String} 返回字符串\r\n */\r\nexport function getPastTime(date, lang = \"zh\") {\r\n if (isNull(date)) return \"--\";\r\n\r\n // 计算时间差\r\n let startTime = date.getTime();\r\n let currentTime = Date.now();\r\n let time = currentTime - startTime;\r\n // 年月日时分\r\n let year = parseInt(time / (1000 * 60 * 60 * 24 * 30 * 12));\r\n let month = parseInt(time / (1000 * 60 * 60 * 24 * 30));\r\n let day = parseInt(time / (1000 * 60 * 60 * 24));\r\n let hour = parseInt(time / (1000 * 60 * 60));\r\n let min = parseInt(time / (1000 * 60));\r\n\r\n // 返回结果\r\n if (year) {\r\n return year + DATE.PASS_TIME[lang].YEAR;\r\n } else if (month) {\r\n return month + DATE.PASS_TIME[lang].MONTH;\r\n } else if (day) {\r\n if (day === 1) {\r\n return DATE.PASS_TIME[lang].YESTERDAY;\r\n } else if (day === 2) {\r\n return DATE.PASS_TIME[lang].BEFORE_YESTERDAY;\r\n } else {\r\n return day + DATE.PASS_TIME[lang].DAY;\r\n }\r\n } else if (hour) {\r\n if (hour > 12) {\r\n return DATE.PASS_TIME[lang].TODAY;\r\n } else {\r\n return hour + DATE.PASS_TIME[lang].HOUR;\r\n }\r\n } else if (min) {\r\n return min + DATE.PASS_TIME[lang].MINUTE;\r\n } else {\r\n return DATE.PASS_TIME[lang].JUST;\r\n }\r\n}\r\n\r\n/**\r\n * 获得剩余时间的字符串显示\r\n * @description 例如:1天10小时20分钟30秒\r\n * @param {Date} date 日期参数\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {String} 返回字符串\r\n */\r\nexport function getOverTime(date, lang = \"zh\") {\r\n if (isNull(date)) return \"--\";\r\n\r\n // 计算\r\n let startDate = new Date(); // 开始时间\r\n let t = date.getTime() - startDate.getTime(); // 时间差\r\n let d = 0,\r\n h = 0,\r\n m = 0,\r\n s = 0;\r\n if (t >= 0) {\r\n d = Math.floor(t / 1000 / 3600 / 24);\r\n h = Math.floor((t / 1000 / 60 / 60) % 24);\r\n m = Math.floor((t / 1000 / 60) % 60);\r\n s = Math.floor((t / 1000) % 60);\r\n }\r\n return `${d}${DATE.OVER_TIME[lang].DAY} ${h}${DATE.OVER_TIME[lang].HOUR} ${m}${DATE.OVER_TIME[lang].MINUTE} ${s}${DATE.OVER_TIME[lang].SECOND}`;\r\n}\r\n\r\n/* 通过日期获得 年龄、星座和生肖 */\r\n\r\n/**\r\n * 通过日期获得年龄\r\n * @param {Date} date 日期参数\r\n * @returns {Number} 返回周岁年龄\r\n */\r\nexport function getAge(date) {\r\n let age = 0;\r\n // 传参日期\r\n let dateArray = formatDate(date).split(\"-\");\r\n let birthYear = Number(dateArray[0]);\r\n let birthMonth = Number(dateArray[1]);\r\n let birthDay = Number(dateArray[2]);\r\n // 当前的日期\r\n let nowDate = new Date();\r\n let nowYear = nowDate.getFullYear(),\r\n nowMonth = nowDate.getMonth() + 1,\r\n nowDay = nowDate.getDate();\r\n\r\n // 出生年份需要小于当年,否则是0岁\r\n let diffAge = nowYear - birthYear;\r\n if (diffAge > 0) {\r\n let diffMonth = nowMonth - birthMonth;\r\n let diffDay = nowDay - birthDay;\r\n if (diffMonth === 0) {\r\n if (diffDay < 0) {\r\n age = diffAge - 1;\r\n } else {\r\n age = diffAge;\r\n }\r\n } else {\r\n if (diffMonth < 0) {\r\n age = diffAge - 1;\r\n } else {\r\n age = diffAge;\r\n }\r\n }\r\n }\r\n\r\n // 返回周岁年龄\r\n return age;\r\n}\r\n\r\n/**\r\n * 通过日期获得星座\r\n * @param {Date} date 日期参数\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {String} 返回星座\r\n */\r\nexport function getZodiac(date, lang = \"zh\") {\r\n if (isNull(date)) return \"\";\r\n\r\n // 计算\r\n let days = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22];\r\n let month = date.getMonth() + 1;\r\n let day = date.getDate();\r\n return day < days[month - 1] ? DATE.ZODIAC[lang][month - 1] : DATE.ZODIAC[lang][month];\r\n}\r\n\r\n/**\r\n * 通过日期获得生肖\r\n * @param {Date} date 日期参数\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {String} 返回生肖\r\n */\r\nexport function getChineseZodiac(date, lang = \"zh\") {\r\n if (isNull(date)) return \"\";\r\n\r\n // 计算\r\n let year = date.getFullYear();\r\n if (year < 1900) {\r\n return \"未知\";\r\n }\r\n return DATE.CHINESE_ZODIAC[lang][(year - 1900) % DATE.CHINESE_ZODIAC[lang].length];\r\n}\r\n\r\n/* 计算日期加减 年,月,日,时,分,秒,周,季度 */\r\n/**\r\n * 日期加减年\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addYear(date = new Date(), num = +1) {\r\n date.setFullYear(date.getFullYear() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减月\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addMonth(date = new Date(), num = +1) {\r\n date.setMonth(date.getMonth() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减天\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addDate(date = new Date(), num = +1) {\r\n date.setDate(date.getDate() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减小时\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addHours(date = new Date(), num = +1) {\r\n date.setHours(date.getHours() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减分钟\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addMinutes(date = new Date(), num = +1) {\r\n date.setMinutes(date.getMinutes() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减秒\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addSeconds(date = new Date(), num = +1) {\r\n date.setSeconds(date.getSeconds() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减毫秒\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+100\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addMillisecond(date = new Date(), num = +100) {\r\n date.setMilliseconds(date.getMilliseconds() + num);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减周\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addWeek(date = new Date(), num = +1) {\r\n date.setDate(date.getDate() + num * 7);\r\n return date;\r\n}\r\n\r\n/**\r\n * 日期加减季度\r\n * @param {Date} date 日期参数,默认当前日期\r\n * @param {Number} num 加减数量,用正数和负数表示;默认+1\r\n * @returns {Date} 返回加减后的日期\r\n */\r\nexport function addQuarter(date = new Date(), num = +1) {\r\n date.setMonth(date.getMonth() + num * 4);\r\n return date;\r\n}\r\n\r\n/* 格式化和解析日期 */\r\n/**\r\n * 日期对象转为日期字符串\r\n * @description 支持日期字符串,日期对象,时间戳,unix时间戳\r\n * @param {String|Date|Number} date 日期参数\r\n * @param {String} format 转化格式\r\n * @param {String} lang 语言zh和en,默认zh\r\n * @returns {String} 返回日期字符串\r\n */\r\n// TODO:需要支持\"20260109\" 这种格式的日期的转换\r\nexport function formatDate(date, format = \"yyyy-MM-dd\", lang = \"zh\") {\r\n if (isNull(date)) return \"\";\r\n\r\n // 是日期字符串\r\n if (isString(date)) {\r\n date = parseDate(date);\r\n }\r\n // 是日期对象\r\n else if (isDate(date)) {\r\n // 无需赋值\r\n }\r\n // 是时间戳\r\n else if (isInteger(date) && String(date).length === 13) {\r\n date = new Date(date);\r\n }\r\n // 是unix时间戳\r\n else if (isInteger(date) && String(date).length === 10) {\r\n date = new Date(date * 1000);\r\n }\r\n // 不支持的日期格式\r\n else {\r\n console.error(\"Not supported date format!\");\r\n return date;\r\n }\r\n\r\n // 配置规则\r\n let rules = {\r\n \"M+\": date.getMonth() + 1, // 月份\r\n \"d+\": date.getDate(), // 日\r\n \"h+\": date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 12小时制\r\n \"H+\": date.getHours(), // 24小时制\r\n \"m+\": date.getMinutes(), // 分钟\r\n \"s+\": date.getSeconds(), // 秒\r\n \"S+\": date.getMilliseconds(), // 毫秒\r\n \"a+\": date.getHours() < 12 ? \"am\" : \"pm\", // 上午/下午,小写\r\n \"A+\": date.getHours() < 12 ? \"AM\" : \"PM\", // 上午/下午,大写\r\n \"E+\": date.getDay(), // 周\r\n \"Q+\": Math.floor((date.getMonth() + 3) / 3), // 季度\r\n S: date.getMilliseconds(), // 毫秒\r\n };\r\n\r\n // 年\r\n let yearReg = new RegExp(/(y+)/g);\r\n if (yearReg.test(format)) {\r\n format = format.replace(yearReg, function (match, $1) {\r\n return (date.getFullYear() + \"\").substring(4 - $1.length);\r\n });\r\n }\r\n // 上午/下午\r\n let amPmReg = new RegExp(/((b+)|(A+))/g);\r\n if (amPmReg.test(format)) {\r\n format = format.replace(amPmReg, function (match, $1) {\r\n // AA或者aa为中文\r\n if ($1.length > 1) {\r\n return date.getHours() < 12 ? DATE.AM_PM[lang].AM : DATE.AM_PM[lang].PM;\r\n }\r\n // 其他为英文\r\n else {\r\n return $1 === $1.toLowerCase()\r\n ? date.getHours() < 12\r\n ? DATE.AM_PM[\"en\"].AM.toLowerCase()\r\n : DATE.AM_PM[\"en\"].PM.toLowerCase()\r\n : date.getHours() < 12\r\n ? DATE.AM_PM[\"en\"].AM\r\n : DATE.AM_PM[\"en\"].PM;\r\n }\r\n });\r\n }\r\n // 周\r\n let weekReg = new RegExp(/(E+)/g);\r\n if (weekReg.test(format)) {\r\n format = format.replace(weekReg, function (match, $1) {\r\n return $1.length === 1\r\n ? DATE.WEEK[lang].MINI[date.getDay()]\r\n : $1.length === 2\r\n ? DATE.WEEK[lang].SHORT[date.getDay()]\r\n : DATE.WEEK[lang].FULL[date.getDay()];\r\n });\r\n }\r\n // 季度\r\n let quarterReg = new RegExp(/(Q+)/g);\r\n if (quarterReg.test(format)) {\r\n format = format.replace(quarterReg, function (match, $1) {\r\n return $1.length === 1\r\n ? DATE.QUARTER[lang].MINI[Math.floor((date.getMonth() + 3) / 3) - 1]\r\n : $1.length === 2\r\n ? DATE.QUARTER[lang].SHORT[Math.floor((date.getMonth() + 3) / 3) - 1]\r\n : DATE.QUARTER[lang].FULL[Math.floor((date.getMonth() + 3) / 3) - 1];\r\n });\r\n }\r\n // 经过上面的过滤,剩余的日期参数处理\r\n for (let k in rules) {\r\n let dateReg = new RegExp(\"(\" + k + \")\");\r\n if (dateReg.test(format)) {\r\n format = format.replace(dateReg, function (match, $1) {\r\n return $1.length === 1\r\n ? rules[k]\r\n : $1.length === 2\r\n ? (\"00\" + rules[k]).substring((\"\" + rules[k]).length)\r\n : (\"000\" + rules[k]).substring((\"\" + rules[k]).length);\r\n });\r\n }\r\n }\r\n return format;\r\n}\r\n\r\n/**\r\n * 日期字符串转为日期对象\r\n * @description 支持日期字符串,时间戳,Unix时间戳\r\n * @param {String|Number} value 日期参数\r\n * @returns {Date} 返回日期对象\r\n */\r\nexport function parseDate(value) {\r\n if (isNull(value)) return null;\r\n\r\n // 是日期字符串\r\n if (isString(value)) {\r\n return new Date(value.replace(/-/g, \"/\"));\r\n }\r\n // 是时间戳\r\n else if (isInteger(value) && String(value).length === 13) {\r\n return new Date(value);\r\n }\r\n // 是unix时间戳\r\n else if (isInteger(value) && String(value).length === 10) {\r\n return new Date(value * 1000);\r\n }\r\n // 不支持的日期格式\r\n else {\r\n console.error(\"Not supported date format!\");\r\n return value;\r\n }\r\n}\r\n\r\n/* 内部使用的函数 */\r\n/**\r\n * 单个数字前自动补齐零为两位\r\n * @param {String|Number} value 可以是数字和字符串\r\n * @returns {String} 返回处理后的字符串\r\n */\r\nfunction _digit(value) {\r\n value = value.toString();\r\n return value[1] ? value : \"0\" + value;\r\n}\r\n","import { isNaN } from \"../validate\";\r\nimport { MATH } from \"../constants\";\r\n\r\n/* 数字计算 */\r\n/**\r\n * 两个数字相加\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns {Number} 返回计算后的数字\r\n */\r\nexport function add(arg1, arg2) {\r\n let r1, r2, m;\r\n try {\r\n r1 = arg1.toString().split(\".\")[1].length;\r\n } catch (e) {\r\n r1 = 0;\r\n }\r\n try {\r\n r2 = arg2.toString().split(\".\")[1].length;\r\n } catch (e) {\r\n r2 = 0;\r\n }\r\n m = Math.pow(10, Math.max(r1, r2));\r\n return (arg1 * m + arg2 * m) / m;\r\n}\r\n\r\n/**\r\n * 两个数字相减\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns {Number} 返回计算后的数字\r\n */\r\nexport function subtract(arg1, arg2) {\r\n let r1, r2, m, n;\r\n try {\r\n r1 = arg1.toString().split(\".\")[1].length;\r\n } catch (e) {\r\n r1 = 0;\r\n }\r\n try {\r\n r2 = arg2.toString().split(\".\")[1].length;\r\n } catch (e) {\r\n r2 = 0;\r\n }\r\n m = Math.pow(10, Math.max(r1, r2));\r\n n = r1 >= r2 ? r1 : r2;\r\n return ((arg1 * m - arg2 * m) / m).toFixed(n);\r\n}\r\n\r\n/**\r\n * 两个数字相乘\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns 返回计算后的数字\r\n */\r\nexport function multiply(arg1, arg2) {\r\n let m = 0,\r\n s1 = arg1.toString(),\r\n s2 = arg2.toString();\r\n try {\r\n m += s1.split(\".\")[1].length;\r\n } catch (e) {}\r\n try {\r\n m += s2.split(\".\")[1].length;\r\n } catch (e) {}\r\n return (Number(s1.replace(\".\", \"\")) * Number(s2.replace(\".\", \"\"))) / Math.pow(10, m);\r\n}\r\n\r\n/**\r\n * 两个数字相除\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns {Number} 返回计算后的数字\r\n */\r\nexport function divide(arg1, arg2) {\r\n let t1 = 0,\r\n t2 = 0,\r\n r1,\r\n r2;\r\n try {\r\n t1 = arg1.toString().split(\".\")[1].length;\r\n } catch (e) {}\r\n try {\r\n t2 = arg2.toString().split(\".\")[1].length;\r\n } catch (e) {}\r\n r1 = Number(arg1.toString().replace(\".\", \"\"));\r\n r2 = Number(arg2.toString().replace(\".\", \"\"));\r\n return (r1 / r2) * Math.pow(10, t2 - t1);\r\n}\r\n\r\n/**\r\n * 两个数字取模\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns {Number} 返回计算后的数字\r\n */\r\nexport function modulo(arg1, arg2) {\r\n let t1 = 0,\r\n t2 = 0,\r\n d = 0;\r\n try {\r\n t1 = arg1.toString().split(\".\")[1].length;\r\n } catch (e) {}\r\n try {\r\n t2 = arg2.toString().split(\".\")[1].length;\r\n } catch (e) {}\r\n d = Math.pow(10, Math.max(t1, t2));\r\n return (Math.round(Number(arg1) * d) % Math.round(Number(arg2) * d)) / d;\r\n}\r\n\r\n/**\r\n * 最大公约数\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns {Number} 返回计算后的数字\r\n */\r\nexport function gcd(arg1, arg2) {\r\n return !arg2 ? arg1 : gcd(arg2, arg1 % arg2);\r\n}\r\n\r\n/**\r\n * 最小公倍数\r\n * @param {String|Number} arg1 第一个数字\r\n * @param {String|Number} arg2 第二个数字\r\n * @returns {Number} 返回计算后的数字\r\n */\r\nexport function scm(arg1, arg2) {\r\n return (arg1 * arg2) / gcd(arg1, arg2);\r\n}\r\n\r\n/* 数字精度 */\r\n/**\r\n * 强制保留小数位数\r\n * @description 默认保留两位小数,解决原生的toFixed()会五舍六入的问题\r\n * @param {String|Number} num 数字\r\n * @param {Number} decimals 保留小数的位数,默认2位\r\n * @param {Number} mode 保留小数模式\r\n * @returns {String} 返回保留后的数字字符串\r\n */\r\nexport function toFixed(num, decimals = 2, mode = MATH.ROUND) {\r\n // 四舍五入\r\n if (mode === MATH.ROUND) {\r\n return _toFixedRound(num, decimals);\r\n }\r\n // 向下舍出\r\n if (mode === MATH.ROUND_FLOOR) {\r\n return _toFixedFloor(num, decimals);\r\n }\r\n}\r\n\r\n/**\r\n * 尽可能保留小数位数\r\n * @param {String|Number} num 数字\r\n * @param {Number} decimals 保留小数的位数,默认2位\r\n * @param {Number} mode 保留小数模式\r\n * @returns {Number} 返回保留后的数字\r\n */\r\nexport function toDecimal(num, decimals = 2, mode = MATH.ROUND) {\r\n // 四舍五入\r\n if (mode === MATH.ROUND) {\r\n return _toDecimalRound(num, decimals);\r\n }\r\n // 向下舍出\r\n if (mode === MATH.ROUND_FLOOR) {\r\n return _toDecimalFloor(num, decimals);\r\n }\r\n}\r\n\r\n/* 内部函数 */\r\n/**\r\n * 四舍五入,强制保留小数位数\r\n * @description 默认保留两位小数,此方法解决原生的toFixed()会五舍六入的问题\r\n * @param {String|Number} num 数字\r\n * @param {Number} decimals 保留小数的位数,默认2位\r\n * @returns {String} 返回字符串的数字\r\n */\r\nfunction _toFixedRound(num, decimals = 2) {\r\n if (isNaN(num)) {\r\n return \"--\";\r\n }\r\n let s = String(num);\r\n if (!decimals) decimals = 0;\r\n if (s.indexOf(\".\") === -1) s += \".\";\r\n s += new Array(decimals + 1).join(\"0\");\r\n if (new RegExp(\"^(-|\\\\+)?(\\\\d+(\\\\.\\\\d{0,\" + (decimals + 1) + \"})?)\\\\d*$\").test(s)) {\r\n let s = \"0\" + RegExp.$2,\r\n pm = RegExp.$1,\r\n a = RegExp.$3.length,\r\n b = true;\r\n if (a === decimals + 2) {\r\n a = s.match(/\\d/g);\r\n if (parseInt(a[a.length - 1]) > 4) {\r\n for (let i = a.length - 2; i >= 0; i--) {\r\n a[i] = parseInt(a[i]) + 1;\r\n if (a[i] === 10) {\r\n a[i] = 0;\r\n b = i !== 1;\r\n } else break;\r\n }\r\n }\r\n s = a.join(\"\").replace(new RegExp(\"(\\\\d+)(\\\\d{\" + decimals + \"})\\\\d$\"), \"$1.$2\");\r\n }\r\n if (b) s = s.substr(1);\r\n return (pm + s).replace(/\\.$/, \"\");\r\n }\r\n return String(num);\r\n}\r\n\r\n/**\r\n * 向下舍出,强制保留小数位数\r\n * @description 默认保留两位小数,此方法相当于强制截取小数位数\r\n * @param {String|Number} num 数字\r\n * @param {Number} decimals 保留小数的位数,默认2位\r\n * @returns {Number} 返回字符串的数字\r\n */\r\nfunction _toFixedFloor(num, decimals = 2) {\r\n if (isNaN(num)) {\r\n return \"--\";\r\n }\r\n // 默认为保留的小数点后两位\r\n let dec = decimals;\r\n let tempNum = Number(num);\r\n let pointIndex = String(tempNum).indexOf(\".\") + 1; // 获取小数点的位置 + 1\r\n let pointCount = pointIndex ? String(tempNum).length - pointIndex : 0; // 获取小数点后的个数(需要保证有小数位)\r\n // 源数据为整数或者小数点后面小于decimals位的作补零处理\r\n if (pointIndex === 0 || pointCount <= dec) {\r\n let tempNumA = tempNum;\r\n if (pointIndex === 0) {\r\n tempNumA = `${tempNumA}.`;\r\n for (let index = 0; index < dec - pointCount; index++) {\r\n tempNumA = `${tempNumA}0`;\r\n }\r\n } else {\r\n for (let index = 0; index < dec - pointCount; index++) {\r\n tempNumA = `${tempNumA}0`;\r\n }\r\n }\r\n return tempNumA;\r\n }\r\n let realVal = \"\";\r\n // 截取当前数据到小数点后decimals位\r\n realVal = `${String(tempNum).split(\".\")[0]}.${String(tempNum).split(\".\")[1].substring(0, dec)}`;\r\n return String(realVal);\r\n}\r\n\r\n/**\r\n * 四舍五入,尽可能保留小数\r\n * @param {String|Number} num 数字\r\n * @param {Number} decimals 保留小数的位数,默认2位\r\n * @returns {Number} 返回保留后的数字\r\n */\r\nfunction _toDecimalRound(num, decimals = 2) {\r\n if (isNaN(num)) {\r\n return \"--\";\r\n }\r\n let n = Math.pow(10, decimals);\r\n return Math.round(num * n) / n;\r\n}\r\n\r\n/**\r\n * 向下舍入,尽可能保留小数\r\n * @param {String|Number} num 数字\r\n * @param {Number} decimals 保留小数的位数,默认2位\r\n * @returns {Number} 返回保留后的数字\r\n */\r\nfunction _toDecimalFloor(num, decimals = 2) {\r\n if (isNaN(num)) {\r\n return \"--\";\r\n }\r\n let n = Math.pow(10, decimals);\r\n return Math.floor(num * n) / n;\r\n}\r\n","import { REGEXP } from \"../constants\";\r\n\r\n/* 正则校验方法 */\r\n/**\r\n * 正则校验的方法\r\n * @description 类型为REGEXP对应的正则\r\n * @param {String|Number} value 校验的参数\r\n * @param {RegExp} regex 使用的REGEXP中的正则\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function regexpTest(value, regex) {\r\n return new RegExp(regex).test(value);\r\n}\r\n\r\n/* 常用校验 */\r\n/**\r\n * 是中文\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isChinese(value) {\r\n return regexpTest(value, REGEXP.CH);\r\n}\r\n\r\n/**\r\n * 是英文\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isEnglish(value) {\r\n return regexpTest(value, REGEXP.EN);\r\n}\r\n\r\n/**\r\n * 是外链\r\n * @description 支持http,https,mail,tel电话\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isExternal(value) {\r\n return regexpTest(value, REGEXP.EXTERNAL);\r\n}\r\n\r\n/**\r\n * 是小写字母\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isLowerCase(value) {\r\n return regexpTest(value, REGEXP.LOWER_CASE);\r\n}\r\n\r\n/**\r\n * 是大写字母\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isUpperCase(value) {\r\n return regexpTest(value, REGEXP.UPPER_CASE);\r\n}\r\n\r\n/**\r\n * 是11位手机号码\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isMobile(value) {\r\n return regexpTest(value, REGEXP.MOBILE);\r\n}\r\n\r\n/**\r\n * 是邮箱\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isEmail(value) {\r\n return regexpTest(value, REGEXP.EMAIL);\r\n}\r\n\r\n/**\r\n * 是身份证号码(15-18位)\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isIdCard(value) {\r\n return regexpTest(value, REGEXP.ID_CARD);\r\n}\r\n\r\n/**\r\n * 是url链接\r\n * @param {String} value 校验的参数\r\n * @returns {Boolean} 返回校验的结果\r\n */\r\nexport function isUrl(value) {\r\n return regexpTest(value, REGEXP.URL);\r\n}\r\n","import { isEmpty } from \"../validate\";\r\n\r\n/* 文件信息处理 */\r\n/**\r\n * 格式化文件大小自动转为 B,KB,MB,GB\r\n * @param {Number} size 文件的大小,单位byte字节\r\n * @returns {String} 返回格式化后的字符串\r\n */\r\nexport function formatFileSize(size) {\r\n if (isEmpty(size)) return \"0B\";\r\n if (size < 1024) {\r\n return size + \"B\";\r\n } else if (size < 1024 * 1024) {\r\n return (size / 1024).toFixed(2) + \"KB\";\r\n } else if (size < 1024 * 1024 * 1024) {\r\n return (size / (1024 * 1024)).toFixed(2) + \"MB\";\r\n } else {\r\n return (size / (1024 * 1024 * 1024)).toFixed(2) + \"GB\";\r\n }\r\n}\r\n\r\n/**\r\n * 获得文件名称\r\n * @param {String} fileName 文件的全名称,例如:测试图片.jpg\r\n * @returns {String} 返回文件的名称\r\n */\r\nexport function getFileName(fileName) {\r\n if (isEmpty(fileName)) return;\r\n return fileName.substring(0, fileName.lastIndexOf(\".\"));\r\n}\r\n\r\n/**\r\n * 获得文件后缀名\r\n * @param {String} value 文件地址路径或者文件全名称,例如:http://xxx.com/mytest.jpg,测试图片.jpg\r\n * @returns {String} 返回文件后缀名\r\n */\r\nexport function getFileSuffix(value) {\r\n if (isEmpty(value)) return;\r\n return value.substring(value.lastIndexOf(\".\") + 1).toLowerCase();\r\n}\r\n\r\n/* 文件转换 */\r\n/**\r\n * file转blob\r\n * @param {File} file file文件\r\n * @returns {Promise} 返回Promise的blob\r\n */\r\nexport function fileToBlob(file) {\r\n return new Promise((resolve, reject) => {\r\n // 读取解析文件\r\n let reader = new FileReader();\r\n reader.readAsArrayBuffer(file);\r\n\r\n // 加载成功\r\n reader.onload = (e) => {\r\n const blob = new Blob([e.target.result], { type: file.type });\r\n resolve(blob);\r\n };\r\n // 加载失败\r\n reader.onerror = function (err) {\r\n console.error(err);\r\n reject(err);\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * file转base64\r\n * @param {File} file file文件\r\n * @returns {Promise} 返回Promise的base64\r\n */\r\nexport function fileToBase64(file) {\r\n return new Promise((resolve, reject) => {\r\n // 读取解析文件\r\n let reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n\r\n // 加载成功\r\n reader.onload = function (e) {\r\n resolve(e.target.result);\r\n };\r\n // 加载失败\r\n reader.onerror = function (err) {\r\n console.error(err);\r\n reject(err);\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * file转url\r\n * @description 适用于本地上传图片并预览,需要注意 URL.revokeObjectURL(file) 内存释放\r\n * @param {File} file file文件\r\n * @returns {Promise} 返回Promise的url\r\n */\r\nexport function fileToUrl(file) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n resolve(URL.createObjectURL(file));\r\n } catch (err) {\r\n // 捕捉异常\r\n console.error(err);\r\n URL.revokeObjectURL(file);\r\n reject(err);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * url赚file\r\n * @param {String} url url地址\r\n * @returns {Promise} 返回Promise的file\r\n */\r\nexport function urlToFile(url) {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let res = await window.fetch(url);\r\n if (res.status === 200) {\r\n let blob = await res.blob();\r\n let file = await blobToFile(blob);\r\n resolve(file);\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n reject(err);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * blob转file\r\n * @param {Blob} blob blob数据\r\n * @param {String} fileName 文件名称,默认以时间戳命名\r\n * @returns {Promise} 返回Promise的file\r\n */\r\nexport function blobToFile(blob, fileName = Date.now()) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const mime = blob.type;\r\n const size = blob.size;\r\n const fileSuffix = mime.split(\"/\")[1];\r\n const file = new File([blob], `${Date.now()}.${fileSuffix}`, {\r\n type: mime,\r\n size: size,\r\n name: `${fileName}.${fileSuffix}`,\r\n lastModified: Date.now(),\r\n lastModifiedDate: new Date(),\r\n });\r\n resolve(file);\r\n } catch (err) {\r\n // 捕捉异常\r\n console.error(err);\r\n reject(err);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * blob转文本\r\n * @param {Blob} blob blob数据\r\n * @returns {Promise} 返回Promise的文本\r\n */\r\nexport function blobToText(blob) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = function (event) {\r\n resolve(event.target.result);\r\n };\r\n reader.onerror = function (error) {\r\n reject(error);\r\n };\r\n reader.readAsText(blob);\r\n });\r\n}\r\n\r\n/**\r\n * blob转base64\r\n * @param {Blob} blob blob数据\r\n * @returns {Promise} 返回Promise的base64\r\n */\r\nexport function blobToBase64(blob) {\r\n return new Promise((resolve, reject) => {\r\n // 读取解析文件\r\n let reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n\r\n // 加载成功\r\n reader.onload = function (e) {\r\n resolve(e.target.result);\r\n };\r\n // 加载失败\r\n reader.onerror = function (err) {\r\n console.error(err);\r\n reject(err);\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * base64转file\r\n * @param {String} base64 base64数据\r\n * @param {String} fileName 文件名称,默认以时间戳命名\r\n * @returns {Promise} 返回Promise的file\r\n */\r\nexport function base64ToFile(base64, fileName = Date.now()) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const arr = base64.split(\",\");\r\n const mime = arr[0].match(/:(.*?);/)[1];\r\n const fileSuffix = mime.split(\"/\")[1];\r\n const bstr = window.atob(arr[1]);\r\n let n = bstr.length;\r\n const u8arr = new Uint8Array(n);\r\n\r\n while (n--) {\r\n u8arr[n] = bstr.charCodeAt(n);\r\n }\r\n resolve(new File([u8arr], `${fileName}.${fileSuffix}`, { type: mime }));\r\n } catch (err) {\r\n // 捕捉异常\r\n console.error(err);\r\n reject(err);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * base64转成blob\r\n * @param {String} base64 base64数据\r\n * @returns {Promise} 返回Promise的blob\r\n */\r\nexport function base64ToBlob(base64) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const arr = base64.split(\",\");\r\n const mime = arr[0].match(/:(.*?);/)[1];\r\n const bstr = window.atob(arr[1]);\r\n let n = bstr.length;\r\n const u8arr = new Uint8Array(n);\r\n\r\n while (n--) {\r\n u8arr[n] = bstr.charCodeAt(n);\r\n }\r\n resolve(new Blob([u8arr], { type: mime }));\r\n } catch (err) {\r\n // 捕捉异常\r\n console.error(err);\r\n reject(err);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 图片url转base64\r\n * @param {String} imgUrl 图片url地址\r\n * @returns {Promise} 返回Promise的base64\r\n */\r\nexport function urlToBase64(imgUrl) {\r\n return new Promise((resolve, reject) => {\r\n // 设置图片\r\n const img = new Image();\r\n img.src = imgUrl;\r\n\r\n // 加载成功\r\n img.onload = function () {\r\n // 画图\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n context.drawImage(img, 0, 0, img.width, img.height);\r\n // 转为base64\r\n const base64 = canvas.toDataURL(\"image/png\");\r\n resolve(base64);\r\n };\r\n // 加载失败\r\n img.onerror = function (err) {\r\n console.error(err);\r\n reject(err);\r\n };\r\n });\r\n}\r\n\r\n/* 下载文件 */\r\n/**\r\n * 下载blob格式的文件\r\n * @param {Blob} blob blob数据\r\n * @param {String} fileName 下载的文件名,不写后缀名则默认为原文件类型\r\n */\r\nexport function downloadBlobFile(blob, fileName) {\r\n try {\r\n const objUrl = window.URL.createObjectURL(blob);\r\n const link = window.document.createElement(\"a\");\r\n link.download = fileName;\r\n link.href = objUrl;\r\n link.click();\r\n URL.revokeObjectURL(objUrl);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\n/**\r\n * 通过文件url地址下载\r\n * @param {String} fileUrl url文件地址\r\n * @param {String} fileName 下载的文件名,不写后缀名则默认为原文件类型\r\n */\r\nexport function downloadFileUrl(fileUrl, fileName) {\r\n try {\r\n const link = window.document.createElement(\"a\");\r\n link.download = fileName;\r\n link.href = fileUrl;\r\n link.target = \"_blank\";\r\n // 生成节点点击\r\n window.document.body.appendChild(link);\r\n link.click();\r\n // 点击后移除节点\r\n window.document.body.removeChild(link);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n","/**\r\n * rgb颜色转hex\r\n * @param {String} rgb rgb颜色字符串\r\n * @returns {String} 返回生成的hex颜色\r\n */\r\nexport function rgbToHex(rgb) {\r\n let arr = rgb.split(\",\");\r\n let r = parseInt(arr[0].split(\"(\")[1]);\r\n let g = parseInt(arr[1]);\r\n let b = parseInt(arr[2].split(\")\")[0]);\r\n return \"#\" + _hex(r) + _hex(g) + _hex(b);\r\n}\r\n\r\n/**\r\n * rgba颜色转hex\r\n * @param {String} rgba rgba颜色字符串\r\n * @returns {String} 返回生成的hex颜色\r\n */\r\nexport function rgbaToHex(rgba) {\r\n let arr = rgba.split(\",\");\r\n let r = parseInt(arr[0].split(\"(\")[1]);\r\n let g = parseInt(arr[1]);\r\n let b = parseInt(arr[2]);\r\n let a = parseFloat(arr[3].split(\")\")[0]);\r\n\r\n return `#${_hex(Math.round(a * 256 - 1))}${_hex(r)}${_hex(g)}${_hex(b)}`;\r\n}\r\n\r\n/**\r\n * rgba颜色转hsl\r\n * @param {String} rgba rgb颜色字符串\r\n * @returns {String} 返回生成的hsl颜色\r\n */\r\nexport function rgbaToHsl(rgba) {\r\n let arr = rgba.split(\",\");\r\n let r = parseInt(arr[0].split(\"(\")[1]) / 255;\r\n let g = parseInt(arr[1]) / 255;\r\n let b = parseInt(arr[2]) / 255;\r\n let a = parseFloat(arr[3] && arr[3].split(\")\")[0]);\r\n let max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h,\r\n s,\r\n l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0;\r\n } else {\r\n let d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n if (a) {\r\n return `hsla(${Math.round(h * 360)},${Math.round(s * 100)}%,${Math.round(l * 100)}%,${a})`;\r\n }\r\n return `hsl(${Math.round(h * 360)},${Math.round(s * 100)}%,${Math.round(l * 100)}%)`;\r\n}\r\n\r\n/**\r\n * hex颜色转rgb\r\n * @param {String} hex hex颜色字符串\r\n * @returns {String} 返回生成的rgb颜色\r\n */\r\nexport function hexToRgb(hex) {\r\n let color = {};\r\n let rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n let hexStr = hex.replace(rgx, function (m, r, g, b) {\r\n return r + r + g + g + b + b;\r\n });\r\n let rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexStr);\r\n color.r = parseInt(rgb[1], 16);\r\n color.g = parseInt(rgb[2], 16);\r\n color.b = parseInt(rgb[3], 16);\r\n return `rgb(${color.r},${color.g},${color.b})`;\r\n}\r\n\r\n/**\r\n * hex颜色转rgba\r\n * @param {String} hex hex颜色字符串\r\n * @param {Number} opacity 透明度\r\n * @returns {String} 返回生成的rgba颜色\r\n */\r\nexport function hexToRgba(hex, opacity = 1) {\r\n let color = {};\r\n let rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n let hexStr = hex.replace(rgx, function (m, r, g, b) {\r\n return r + r + g + g + b + b;\r\n });\r\n let rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexStr);\r\n color.r = parseInt(rgb[1], 16);\r\n color.g = parseInt(rgb[2], 16);\r\n color.b = parseInt(rgb[3], 16);\r\n color.o = opacity;\r\n return `rgba(${color.r},${color.g},${color.b},${color.o})`;\r\n}\r\n\r\n/**\r\n * hex颜色转hsl\r\n * @param {String} hex hex颜色字符串\r\n * @returns {String} 返回生成的hsl颜色\r\n */\r\nexport function hexToHsl(hex) {\r\n // 先解析为rgb\r\n let rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n let hexStr = hex.replace(rgx, function (m, r, g, b) {\r\n return r + r + g + g + b + b;\r\n });\r\n let rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexStr);\r\n\r\n // 再组装为hsl格式\r\n let r = parseInt(rgb[1], 16) / 255;\r\n let g = parseInt(rgb[2], 16) / 255;\r\n let b = parseInt(rgb[3], 16) / 255;\r\n let max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h,\r\n s,\r\n l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0;\r\n } else {\r\n let d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return `hsl(${Math.round(h * 360)},${Math.round(s * 100)}%,${Math.round(l * 100)}%)`;\r\n}\r\n\r\n/**\r\n * 随机生成hex颜色\r\n * @returns {String} 返回生成的十六进制颜色\r\n */\r\nexport function getDrawHex() {\r\n return (\r\n \"#\" +\r\n (function (h) {\r\n return new Array(7 - h.length).join(\"0\") + h;\r\n })(((Math.random() * 0x1000000) << 0).toString(16))\r\n );\r\n}\r\n\r\n/**\r\n * 随机生成rgb颜色\r\n * @returns {String} 返回生成的 rgb 颜色\r\n */\r\nexport function getDrawRgb() {\r\n let r = Math.floor(Math.random() * 256);\r\n let g = Math.floor(Math.random() * 256);\r\n let b = Math.floor(Math.random() * 256);\r\n return `rgb(${r},${g},${b})`;\r\n}\r\n\r\n/**\r\n * 随机生成rgba颜色\r\n * @returns {String} 返回生成的 rgba 颜色\r\n */\r\nexport function getDrawRgba() {\r\n let r = Math.floor(Math.random() * 256);\r\n let g = Math.floor(Math.random() * 256);\r\n let b = Math.floor(Math.random() * 256);\r\n let a = Number(Math.random()).toFixed(2);\r\n return `rgba(${r},${g},${b},${a})`;\r\n}\r\n\r\n// 内部函数\r\n/**\r\n * 颜色值转换\r\n * @param {Number} num 转换的值\r\n * @returns\r\n */\r\nfunction _hex(num) {\r\n if (num > 255) {\r\n throw \"'\" + num + \"'' is greater than 255(0xff);\";\r\n }\r\n let str = Number(num).toString(16);\r\n return (\"0\" + str).slice(-2);\r\n}\r\n","/*\r\n * [hi-base64]{@link https://github.com/emn178/hi-base64}\r\n *\r\n * @version 0.3.1\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2014-2023\r\n * @license MIT\r\n */\r\n/* jslint bitwise: true */\r\n\r\nvar ENCODING_ERROR = \"not a UTF-8 string\";\r\nvar WINDOW = typeof window === \"object\";\r\nvar root = WINDOW ? window : {};\r\nif (root.HI_BASE64_NO_WINDOW) {\r\n WINDOW = false;\r\n}\r\nvar WEB_WORKER = !WINDOW && typeof self === \"object\";\r\nvar NODE_JS = !root.HI_BASE64_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n} else if (WEB_WORKER) {\r\n root = self;\r\n}\r\nvar BASE64_ENCODE_CHAR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\r\nvar BASE64_DECODE_CHAR = {};\r\nfor (var i = 0; i < 64; ++i) {\r\n BASE64_DECODE_CHAR[BASE64_ENCODE_CHAR[i]] = i;\r\n}\r\nBASE64_DECODE_CHAR[\"-\"] = 62;\r\nBASE64_DECODE_CHAR[\"_\"] = 63;\r\n\r\nvar cleanBase64Str = function (base64Str) {\r\n return base64Str.split(\"=\")[0].replace(/[\\r\\n]/g, \"\");\r\n};\r\n\r\nvar utf8ToBytes = function (str) {\r\n var bytes = [];\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n if (c < 0x80) {\r\n bytes[bytes.length] = c;\r\n } else if (c < 0x800) {\r\n bytes[bytes.length] = 0xc0 | (c >> 6);\r\n bytes[bytes.length] = 0x80 | (c & 0x3f);\r\n } else if (c < 0xd800 || c >= 0xe000) {\r\n bytes[bytes.length] = 0xe0 | (c >> 12);\r\n bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f);\r\n bytes[bytes.length] = 0x80 | (c & 0x3f);\r\n } else {\r\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\r\n bytes[bytes.length] = 0xf0 | (c >> 18);\r\n bytes[bytes.length] = 0x80 | ((c >> 12) & 0x3f);\r\n bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f);\r\n bytes[bytes.length] = 0x80 | (c & 0x3f);\r\n }\r\n }\r\n return bytes;\r\n};\r\n\r\nvar decodeAsBytes = function (base64Str) {\r\n base64Str = cleanBase64Str(base64Str);\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n bytes = [],\r\n index = 0,\r\n length = base64Str.length;\r\n\r\n // 4 char to 3 bytes\r\n for (var i = 0, count = (length >> 2) << 2; i < count; ) {\r\n v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 2) | (v2 >>> 4)) & 255;\r\n bytes[index++] = ((v2 << 4) | (v3 >>> 2)) & 255;\r\n bytes[index++] = ((v3 << 6) | v4) & 255;\r\n }\r\n\r\n // remain bytes\r\n var remain = length - count;\r\n if (remain === 2) {\r\n v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 2) | (v2 >>> 4)) & 255;\r\n } else if (remain === 3) {\r\n v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 2) | (v2 >>> 4)) & 255;\r\n bytes[index++] = ((v2 << 4) | (v3 >>> 2)) & 255;\r\n }\r\n return bytes;\r\n};\r\n\r\nvar encodeFromBytes = function (bytes) {\r\n var v1,\r\n v2,\r\n v3,\r\n base64Str = [],\r\n length = bytes.length;\r\n for (var i = 0, count = parseInt(length / 3) * 3; i < count; ) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i++];\r\n v3 = bytes[i++];\r\n base64Str.push(\r\n BASE64_ENCODE_CHAR[v1 >>> 2],\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63],\r\n BASE64_ENCODE_CHAR[((v2 << 2) | (v3 >>> 6)) & 63],\r\n BASE64_ENCODE_CHAR[v3 & 63],\r\n );\r\n }\r\n\r\n // remain char\r\n var remain = length - count;\r\n if (remain === 1) {\r\n v1 = bytes[i];\r\n base64Str.push(BASE64_ENCODE_CHAR[v1 >>> 2], BASE64_ENCODE_CHAR[(v1 << 4) & 63], \"==\");\r\n } else if (remain === 2) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i];\r\n base64Str.push(\r\n BASE64_ENCODE_CHAR[v1 >>> 2],\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63],\r\n BASE64_ENCODE_CHAR[(v2 << 2) & 63],\r\n \"=\",\r\n );\r\n }\r\n return base64Str.join(\"\");\r\n};\r\n\r\nvar btoa = root.btoa,\r\n atob = root.atob,\r\n utf8Base64Encode,\r\n utf8Base64Decode;\r\nif (NODE_JS) {\r\n var Buffer = require(\"buffer\").Buffer;\r\n btoa = function (str) {\r\n return Buffer.from(str, \"ascii\").toString(\"base64\");\r\n };\r\n\r\n utf8Base64Encode = function (str) {\r\n return Buffer.from(str).toString(\"base64\");\r\n };\r\n\r\n encodeFromBytes = utf8Base64Encode;\r\n\r\n atob = function (base64Str) {\r\n return Buffer.from(base64Str, \"base64\").toString(\"ascii\");\r\n };\r\n\r\n utf8Base64Decode = function (base64Str) {\r\n return Buffer.from(base64Str, \"base64\").toString();\r\n };\r\n} else if (!btoa) {\r\n btoa = function (str) {\r\n var v1,\r\n v2,\r\n v3,\r\n base64Str = [],\r\n length = str.length;\r\n for (var i = 0, count = parseInt(length / 3) * 3; i < count; ) {\r\n v1 = str.charCodeAt(i++);\r\n v2 = str.charCodeAt(i++);\r\n v3 = str.charCodeAt(i++);\r\n base64Str.push(\r\n BASE64_ENCODE_CHAR[v1 >>> 2],\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63],\r\n BASE64_ENCODE_CHAR[((v2 << 2) | (v3 >>> 6)) & 63],\r\n BASE64_ENCODE_CHAR[v3 & 63],\r\n );\r\n }\r\n\r\n // remain char\r\n var remain = length - count;\r\n if (remain === 1) {\r\n v1 = str.charCodeAt(i);\r\n base64Str.push(BASE64_ENCODE_CHAR[v1 >>> 2], BASE64_ENCODE_CHAR[(v1 << 4) & 63], \"==\");\r\n } else if (remain === 2) {\r\n v1 = str.charCodeAt(i++);\r\n v2 = str.charCodeAt(i);\r\n base64Str.push(\r\n BASE64_ENCODE_CHAR[v1 >>> 2],\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63],\r\n BASE64_ENCODE_CHAR[(v2 << 2) & 63],\r\n \"=\",\r\n );\r\n }\r\n return base64Str.join(\"\");\r\n };\r\n\r\n utf8Base64Encode = function (str) {\r\n var v1,\r\n v2,\r\n v3,\r\n base64Str = [],\r\n bytes = utf8ToBytes(str),\r\n length = bytes.length;\r\n for (var i = 0, count = parseInt(length / 3) * 3; i < count; ) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i++];\r\n v3 = bytes[i++];\r\n base64Str.push(\r\n BASE64_ENCODE_CHAR[v1 >>> 2],\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63],\r\n BASE64_ENCODE_CHAR[((v2 << 2) | (v3 >>> 6)) & 63],\r\n BASE64_ENCODE_CHAR[v3 & 63],\r\n );\r\n }\r\n\r\n // remain char\r\n var remain = length - count;\r\n if (remain === 1) {\r\n v1 = bytes[i];\r\n base64Str.push(BASE64_ENCODE_CHAR[v1 >>> 2], BASE64_ENCODE_CHAR[(v1 << 4) & 63], \"==\");\r\n } else if (remain === 2) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i];\r\n base64Str.push(\r\n BASE64_ENCODE_CHAR[v1 >>> 2],\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63],\r\n BASE64_ENCODE_CHAR[(v2 << 2) & 63],\r\n \"=\",\r\n );\r\n }\r\n return base64Str.join(\"\");\r\n };\r\n\r\n atob = function (base64Str) {\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n str = [],\r\n length = base64Str.length;\r\n\r\n // 4 char to 3 bytes\r\n for (var i = 0, count = (length >> 2) << 2; i < count; ) {\r\n v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n str.push(\r\n String.fromCharCode(((v1 << 2) | (v2 >>> 4)) & 255),\r\n String.fromCharCode(((v2 << 4) | (v3 >>> 2)) & 255),\r\n String.fromCharCode(((v3 << 6) | v4) & 255),\r\n );\r\n }\r\n\r\n // remain bytes\r\n var remain = length - count;\r\n if (remain === 2) {\r\n v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n str.push(String.fromCharCode(((v1 << 2) | (v2 >>> 4)) & 255));\r\n } else if (remain === 3) {\r\n v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];\r\n str.push(\r\n String.fromCharCode(((v1 << 2) | (v2 >>> 4)) & 255),\r\n String.fromCharCode(((v2 << 4) | (v3 >>> 2)) & 255),\r\n );\r\n }\r\n return str.join(\"\");\r\n };\r\n\r\n utf8Base64Decode = function (base64Str) {\r\n var str = [],\r\n bytes = decodeAsBytes(base64Str),\r\n length = bytes.length;\r\n var i = 0,\r\n followingChars = 0,\r\n b,\r\n c;\r\n while (i < length) {\r\n b = bytes[i++];\r\n if (b <= 0x7f) {\r\n str.push(String.fromCharCode(b));\r\n continue;\r\n } else if (b > 0xbf && b <= 0xdf) {\r\n c = b & 0x1f;\r\n followingChars = 1;\r\n } else if (b <= 0xef) {\r\n c = b & 0x0f;\r\n followingChars = 2;\r\n } else if (b <= 0xf7) {\r\n c = b & 0x07;\r\n followingChars = 3;\r\n } else {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n\r\n for (var j = 0; j < followingChars; ++j) {\r\n b = bytes[i++];\r\n if (b < 0x80 || b > 0xbf) {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n c <<= 6;\r\n c += b & 0x3f;\r\n }\r\n if (c >= 0xd800 && c <= 0xdfff) {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n if (c > 0x10ffff) {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n\r\n if (c <= 0xffff) {\r\n str.push(String.fromCharCode(c));\r\n } else {\r\n c -= 0x10000;\r\n str.push(String.fromCharCode((c >> 10) + 0xd800), String.fromCharCode((c & 0x3ff) + 0xdc00));\r\n }\r\n }\r\n return str.join(\"\");\r\n };\r\n} else {\r\n utf8Base64Encode = function (str) {\r\n var result = [];\r\n for (var i = 0; i < str.length; i++) {\r\n var charcode = str.charCodeAt(i);\r\n if (charcode < 0x80) {\r\n result.push(String.fromCharCode(charcode));\r\n } else if (charcode < 0x800) {\r\n result.push(String.fromCharCode(0xc0 | (charcode >> 6)), String.fromCharCode(0x80 | (charcode & 0x3f)));\r\n } else if (charcode < 0xd800 || charcode >= 0xe000) {\r\n result.push(\r\n String.fromCharCode(0xe0 | (charcode >> 12)),\r\n String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)),\r\n String.fromCharCode(0x80 | (charcode & 0x3f)),\r\n );\r\n } else {\r\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\r\n result.push(\r\n String.fromCharCode(0xf0 | (charcode >> 18)),\r\n String.fromCharCode(0x80 | ((charcode >> 12) & 0x3f)),\r\n String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)),\r\n String.fromCharCode(0x80 | (charcode & 0x3f)),\r\n );\r\n }\r\n }\r\n return btoa(result.join(\"\"));\r\n };\r\n\r\n utf8Base64Decode = function (base64Str) {\r\n var tmpStr = atob(base64Str.replace(/-/g, \"+\").replace(/_/g, \"/\"));\r\n if (!/[^\\x00-\\x7F]/.test(tmpStr)) {\r\n return tmpStr;\r\n }\r\n var str = [],\r\n i = 0,\r\n length = tmpStr.length,\r\n followingChars = 0,\r\n b,\r\n c;\r\n while (i < length) {\r\n b = tmpStr.charCodeAt(i++);\r\n if (b <= 0x7f) {\r\n str.push(String.fromCharCode(b));\r\n continue;\r\n } else if (b > 0xbf && b <= 0xdf) {\r\n c = b & 0x1f;\r\n followingChars = 1;\r\n } else if (b <= 0xef) {\r\n c = b & 0x0f;\r\n followingChars = 2;\r\n } else if (b <= 0xf7) {\r\n c = b & 0x07;\r\n followingChars = 3;\r\n } else {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n\r\n for (var j = 0; j < followingChars; ++j) {\r\n b = tmpStr.charCodeAt(i++);\r\n if (b < 0x80 || b > 0xbf) {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n c <<= 6;\r\n c += b & 0x3f;\r\n }\r\n if (c >= 0xd800 && c <= 0xdfff) {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n if (c > 0x10ffff) {\r\n throw new Error(ENCODING_ERROR);\r\n }\r\n\r\n if (c <= 0xffff) {\r\n str.push(String.fromCharCode(c));\r\n } else {\r\n c -= 0x10000;\r\n str.push(String.fromCharCode((c >> 10) + 0xd800), String.fromCharCode((c & 0x3ff) + 0xdc00));\r\n }\r\n }\r\n return str.join(\"\");\r\n };\r\n}\r\n\r\nvar encode = function (str, asciiOnly) {\r\n var notString = typeof str != \"string\";\r\n if (notString && str.constructor === root.ArrayBuffer) {\r\n str = new Uint8Array(str);\r\n }\r\n if (notString) {\r\n return encodeFromBytes(str);\r\n } else {\r\n if (!asciiOnly && /[^\\x00-\\x7F]/.test(str)) {\r\n return utf8Base64Encode(str);\r\n } else {\r\n return btoa(str);\r\n }\r\n }\r\n};\r\n\r\nvar decode = function (base64Str, asciiOnly) {\r\n base64Str = cleanBase64Str(base64Str);\r\n return asciiOnly ? atob(base64Str) : utf8Base64Decode(base64Str);\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport const utf8Encode = utf8Base64Encode;\r\nexport const utf8Decode = utf8Base64Decode;\r\nexport { encode, decode, decodeAsBytes };\r\n","import * as Base64 from \"./base64.js\";\r\n\r\n/**\r\n * base64 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encode(str) {\r\n return Base64.encode(str);\r\n}\r\n\r\n/**\r\n * base64 解密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回解密后的字符串\r\n */\r\nexport function decode(str) {\r\n return Base64.decode(str);\r\n}\r\n\r\n/**\r\n * base64 utf8加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function utf8Encode(str) {\r\n return Base64.utf8Encode(str);\r\n}\r\n\r\n/**\r\n * base64 utf8解密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回解密后的字符串\r\n */\r\nexport function utf8Decode(str) {\r\n return Base64.utf8Decode(str);\r\n}\r\n\r\n/**\r\n * base64 加密字节数组\r\n * @param {Array} array 数组\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encodeAsBytes(array) {\r\n return Base64.encode(array);\r\n}\r\n\r\n/**\r\n * base64 解密字节数组\r\n * @param {String} str 字符串\r\n * @returns {Array} 返回解密后的字节数组\r\n */\r\nexport function decodeAsBytes(str) {\r\n return Base64.decodeAsBytes(str);\r\n}\r\n","/*\r\n * [hi-base32]{@link https://github.com/emn178/hi-base32}\r\n *\r\n * @version 0.5.0\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2015-2018\r\n * @license MIT\r\n */\r\n/* jslint bitwise: true */\r\n\r\nvar root = typeof window === \"object\" ? window : {};\r\nvar NODE_JS = !root.HI_BASE32_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n}\r\nvar BASE32_ENCODE_CHAR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\".split(\"\");\r\nvar BASE32_DECODE_CHAR = {\r\n A: 0,\r\n B: 1,\r\n C: 2,\r\n D: 3,\r\n E: 4,\r\n F: 5,\r\n G: 6,\r\n H: 7,\r\n I: 8,\r\n J: 9,\r\n K: 10,\r\n L: 11,\r\n M: 12,\r\n N: 13,\r\n O: 14,\r\n P: 15,\r\n Q: 16,\r\n R: 17,\r\n S: 18,\r\n T: 19,\r\n U: 20,\r\n V: 21,\r\n W: 22,\r\n X: 23,\r\n Y: 24,\r\n Z: 25,\r\n 2: 26,\r\n 3: 27,\r\n 4: 28,\r\n 5: 29,\r\n 6: 30,\r\n 7: 31,\r\n};\r\n\r\nvar blocks = [0, 0, 0, 0, 0, 0, 0, 0];\r\n\r\nvar throwInvalidUtf8 = function (position, partial) {\r\n if (partial.length > 10) {\r\n partial = \"...\" + partial.substr(-10);\r\n }\r\n var err = new Error(\r\n \"Decoded data is not valid UTF-8.\" +\r\n \" Maybe try base32.decode.asBytes()?\" +\r\n \" Partial data after reading \" +\r\n position +\r\n \" bytes: \" +\r\n partial +\r\n \" <-\",\r\n );\r\n err.position = position;\r\n throw err;\r\n};\r\n\r\nvar toUtf8String = function (bytes) {\r\n var str = \"\",\r\n length = bytes.length,\r\n i = 0,\r\n followingChars = 0,\r\n b,\r\n c;\r\n while (i < length) {\r\n b = bytes[i++];\r\n if (b <= 0x7f) {\r\n str += String.fromCharCode(b);\r\n continue;\r\n } else if (b > 0xbf && b <= 0xdf) {\r\n c = b & 0x1f;\r\n followingChars = 1;\r\n } else if (b <= 0xef) {\r\n c = b & 0x0f;\r\n followingChars = 2;\r\n } else if (b <= 0xf7) {\r\n c = b & 0x07;\r\n followingChars = 3;\r\n } else {\r\n throwInvalidUtf8(i, str);\r\n }\r\n\r\n for (var j = 0; j < followingChars; ++j) {\r\n b = bytes[i++];\r\n if (b < 0x80 || b > 0xbf) {\r\n throwInvalidUtf8(i, str);\r\n }\r\n c <<= 6;\r\n c += b & 0x3f;\r\n }\r\n if (c >= 0xd800 && c <= 0xdfff) {\r\n throwInvalidUtf8(i, str);\r\n }\r\n if (c > 0x10ffff) {\r\n throwInvalidUtf8(i, str);\r\n }\r\n\r\n if (c <= 0xffff) {\r\n str += String.fromCharCode(c);\r\n } else {\r\n c -= 0x10000;\r\n str += String.fromCharCode((c >> 10) + 0xd800);\r\n str += String.fromCharCode((c & 0x3ff) + 0xdc00);\r\n }\r\n }\r\n return str;\r\n};\r\n\r\nvar decodeAsBytes = function (base32Str) {\r\n if (base32Str === \"\") {\r\n return [];\r\n } else if (!/^[A-Z2-7=]+$/.test(base32Str)) {\r\n throw new Error(\"Invalid base32 characters\");\r\n }\r\n base32Str = base32Str.replace(/=/g, \"\");\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n v5,\r\n v6,\r\n v7,\r\n v8,\r\n bytes = [],\r\n index = 0,\r\n length = base32Str.length;\r\n\r\n // 4 char to 3 bytes\r\n for (var i = 0, count = (length >> 3) << 3; i < count; ) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v8 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255;\r\n bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255;\r\n bytes[index++] = ((v4 << 4) | (v5 >>> 1)) & 255;\r\n bytes[index++] = ((v5 << 7) | (v6 << 2) | (v7 >>> 3)) & 255;\r\n bytes[index++] = ((v7 << 5) | v8) & 255;\r\n }\r\n\r\n // remain bytes\r\n var remain = length - count;\r\n if (remain === 2) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255;\r\n } else if (remain === 4) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255;\r\n bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255;\r\n } else if (remain === 5) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255;\r\n bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255;\r\n bytes[index++] = ((v4 << 4) | (v5 >>> 1)) & 255;\r\n } else if (remain === 7) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255;\r\n bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255;\r\n bytes[index++] = ((v4 << 4) | (v5 >>> 1)) & 255;\r\n bytes[index++] = ((v5 << 7) | (v6 << 2) | (v7 >>> 3)) & 255;\r\n }\r\n return bytes;\r\n};\r\n\r\nvar encodeAscii = function (str) {\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n v5,\r\n base32Str = \"\",\r\n length = str.length;\r\n for (var i = 0, count = parseInt(length / 5) * 5; i < count; ) {\r\n v1 = str.charCodeAt(i++);\r\n v2 = str.charCodeAt(i++);\r\n v3 = str.charCodeAt(i++);\r\n v4 = str.charCodeAt(i++);\r\n v5 = str.charCodeAt(i++);\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\r\n BASE32_ENCODE_CHAR[((v4 << 3) | (v5 >>> 5)) & 31] +\r\n BASE32_ENCODE_CHAR[v5 & 31];\r\n }\r\n\r\n // remain char\r\n var remain = length - count;\r\n if (remain === 1) {\r\n v1 = str.charCodeAt(i);\r\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] + BASE32_ENCODE_CHAR[(v1 << 2) & 31] + \"======\";\r\n } else if (remain === 2) {\r\n v1 = str.charCodeAt(i++);\r\n v2 = str.charCodeAt(i);\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 << 4) & 31] +\r\n \"====\";\r\n } else if (remain === 3) {\r\n v1 = str.charCodeAt(i++);\r\n v2 = str.charCodeAt(i++);\r\n v3 = str.charCodeAt(i);\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[(v3 << 1) & 31] +\r\n \"===\";\r\n } else if (remain === 4) {\r\n v1 = str.charCodeAt(i++);\r\n v2 = str.charCodeAt(i++);\r\n v3 = str.charCodeAt(i++);\r\n v4 = str.charCodeAt(i);\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 << 3) & 31] +\r\n \"=\";\r\n }\r\n return base32Str;\r\n};\r\n\r\nvar encodeUtf8 = function (str) {\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n v5,\r\n code,\r\n end = false,\r\n base32Str = \"\",\r\n index = 0,\r\n i,\r\n start = 0,\r\n bytes = 0,\r\n length = str.length;\r\n if (str === \"\") {\r\n return base32Str;\r\n }\r\n do {\r\n blocks[0] = blocks[5];\r\n blocks[1] = blocks[6];\r\n blocks[2] = blocks[7];\r\n for (i = start; index < length && i < 5; ++index) {\r\n code = str.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i++] = code;\r\n } else if (code < 0x800) {\r\n blocks[i++] = 0xc0 | (code >> 6);\r\n blocks[i++] = 0x80 | (code & 0x3f);\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i++] = 0xe0 | (code >> 12);\r\n blocks[i++] = 0x80 | ((code >> 6) & 0x3f);\r\n blocks[i++] = 0x80 | (code & 0x3f);\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++index) & 0x3ff));\r\n blocks[i++] = 0xf0 | (code >> 18);\r\n blocks[i++] = 0x80 | ((code >> 12) & 0x3f);\r\n blocks[i++] = 0x80 | ((code >> 6) & 0x3f);\r\n blocks[i++] = 0x80 | (code & 0x3f);\r\n }\r\n }\r\n bytes += i - start;\r\n start = i - 5;\r\n if (index === length) {\r\n ++index;\r\n }\r\n if (index > length && i < 6) {\r\n end = true;\r\n }\r\n v1 = blocks[0];\r\n if (i > 4) {\r\n v2 = blocks[1];\r\n v3 = blocks[2];\r\n v4 = blocks[3];\r\n v5 = blocks[4];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\r\n BASE32_ENCODE_CHAR[((v4 << 3) | (v5 >>> 5)) & 31] +\r\n BASE32_ENCODE_CHAR[v5 & 31];\r\n } else if (i === 1) {\r\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] + BASE32_ENCODE_CHAR[(v1 << 2) & 31] + \"======\";\r\n } else if (i === 2) {\r\n v2 = blocks[1];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 << 4) & 31] +\r\n \"====\";\r\n } else if (i === 3) {\r\n v2 = blocks[1];\r\n v3 = blocks[2];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[(v3 << 1) & 31] +\r\n \"===\";\r\n } else {\r\n v2 = blocks[1];\r\n v3 = blocks[2];\r\n v4 = blocks[3];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 << 3) & 31] +\r\n \"=\";\r\n }\r\n } while (!end);\r\n return base32Str;\r\n};\r\n\r\nvar encodeBytes = function (bytes) {\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n v5,\r\n base32Str = \"\",\r\n length = bytes.length;\r\n for (var i = 0, count = parseInt(length / 5) * 5; i < count; ) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i++];\r\n v3 = bytes[i++];\r\n v4 = bytes[i++];\r\n v5 = bytes[i++];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\r\n BASE32_ENCODE_CHAR[((v4 << 3) | (v5 >>> 5)) & 31] +\r\n BASE32_ENCODE_CHAR[v5 & 31];\r\n }\r\n\r\n // remain char\r\n var remain = length - count;\r\n if (remain === 1) {\r\n v1 = bytes[i];\r\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] + BASE32_ENCODE_CHAR[(v1 << 2) & 31] + \"======\";\r\n } else if (remain === 2) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 << 4) & 31] +\r\n \"====\";\r\n } else if (remain === 3) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i++];\r\n v3 = bytes[i];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[(v3 << 1) & 31] +\r\n \"===\";\r\n } else if (remain === 4) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i++];\r\n v3 = bytes[i++];\r\n v4 = bytes[i];\r\n base32Str +=\r\n BASE32_ENCODE_CHAR[v1 >>> 3] +\r\n BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] +\r\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\r\n BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] +\r\n BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\r\n BASE32_ENCODE_CHAR[(v4 << 3) & 31] +\r\n \"=\";\r\n }\r\n return base32Str;\r\n};\r\n\r\nvar encode = function (input, asciiOnly) {\r\n var notString = typeof input !== \"string\";\r\n if (notString && input.constructor === ArrayBuffer) {\r\n input = new Uint8Array(input);\r\n }\r\n if (notString) {\r\n return encodeBytes(input);\r\n } else if (asciiOnly) {\r\n return encodeAscii(input);\r\n } else {\r\n return encodeUtf8(input);\r\n }\r\n};\r\n\r\nvar decode = function (base32Str, asciiOnly) {\r\n if (!asciiOnly) {\r\n return toUtf8String(decodeAsBytes(base32Str));\r\n }\r\n if (base32Str === \"\") {\r\n return \"\";\r\n } else if (!/^[A-Z2-7=]+$/.test(base32Str)) {\r\n throw new Error(\"Invalid base32 characters\");\r\n }\r\n var v1,\r\n v2,\r\n v3,\r\n v4,\r\n v5,\r\n v6,\r\n v7,\r\n v8,\r\n str = \"\",\r\n length = base32Str.indexOf(\"=\");\r\n if (length === -1) {\r\n length = base32Str.length;\r\n }\r\n\r\n // 8 char to 5 bytes\r\n for (var i = 0, count = (length >> 3) << 3; i < count; ) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v8 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n str +=\r\n String.fromCharCode(((v1 << 3) | (v2 >>> 2)) & 255) +\r\n String.fromCharCode(((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255) +\r\n String.fromCharCode(((v4 << 4) | (v5 >>> 1)) & 255) +\r\n String.fromCharCode(((v5 << 7) | (v6 << 2) | (v7 >>> 3)) & 255) +\r\n String.fromCharCode(((v7 << 5) | v8) & 255);\r\n }\r\n\r\n // remain bytes\r\n var remain = length - count;\r\n if (remain === 2) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n str += String.fromCharCode(((v1 << 3) | (v2 >>> 2)) & 255);\r\n } else if (remain === 4) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n str +=\r\n String.fromCharCode(((v1 << 3) | (v2 >>> 2)) & 255) +\r\n String.fromCharCode(((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255);\r\n } else if (remain === 5) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n str +=\r\n String.fromCharCode(((v1 << 3) | (v2 >>> 2)) & 255) +\r\n String.fromCharCode(((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255) +\r\n String.fromCharCode(((v4 << 4) | (v5 >>> 1)) & 255);\r\n } else if (remain === 7) {\r\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\r\n str +=\r\n String.fromCharCode(((v1 << 3) | (v2 >>> 2)) & 255) +\r\n String.fromCharCode(((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255) +\r\n String.fromCharCode(((v4 << 4) | (v5 >>> 1)) & 255) +\r\n String.fromCharCode(((v5 << 7) | (v6 << 2) | (v7 >>> 3)) & 255);\r\n }\r\n return str;\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport { encode, decode, decodeAsBytes };\r\n","import * as Base32 from \"./base32.js\";\r\n\r\n/**\r\n * base32 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encode(str) {\r\n return Base32.encode(str);\r\n}\r\n\r\n/**\r\n * base32 解密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回解密后的字符串\r\n */\r\nexport function decode(str) {\r\n return Base32.decode(str);\r\n}\r\n\r\n/**\r\n * base32 加密字节数组\r\n * @param {Array} array 数组\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encodeAsBytes(array) {\r\n return Base32.encode(array);\r\n}\r\n\r\n/**\r\n * base32 解密字节数组\r\n * @param {String} str 字符串\r\n * @returns {Array} 返回解密后的字节\r\n */\r\nexport function decodeAsBytes(str) {\r\n return Base32.decodeAsBytes(str);\r\n}\r\n","/**\r\n * [js-md5]{@link https://github.com/emn178/js-md5}\r\n *\r\n * @namespace md5\r\n * @version 0.8.3\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2014-2023\r\n * @license MIT\r\n */\r\n\r\nvar INPUT_ERROR = \"input is invalid type\";\r\nvar FINALIZE_ERROR = \"finalize already called\";\r\nvar WINDOW = typeof window === \"object\";\r\nvar root = WINDOW ? window : {};\r\nif (root.JS_MD5_NO_WINDOW) {\r\n WINDOW = false;\r\n}\r\nvar WEB_WORKER = !WINDOW && typeof self === \"object\";\r\nvar NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n} else if (WEB_WORKER) {\r\n root = self;\r\n}\r\nvar ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== \"undefined\";\r\nvar HEX_CHARS = \"0123456789abcdef\".split(\"\");\r\nvar EXTRA = [128, 32768, 8388608, -2147483648];\r\nvar SHIFT = [0, 8, 16, 24];\r\nvar OUTPUT_TYPES = [\"hex\", \"array\", \"digest\", \"buffer\", \"arrayBuffer\", \"base64\"];\r\nvar BASE64_ENCODE_CHAR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\r\n\r\nvar blocks = [],\r\n buffer8;\r\nif (ARRAY_BUFFER) {\r\n var buffer = new ArrayBuffer(68);\r\n buffer8 = new Uint8Array(buffer);\r\n blocks = new Uint32Array(buffer);\r\n}\r\n\r\nvar isArray = Array.isArray;\r\nif (root.JS_MD5_NO_NODE_JS || !isArray) {\r\n isArray = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n}\r\n\r\nvar isView = ArrayBuffer.isView;\r\nif (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {\r\n isView = function (obj) {\r\n return typeof obj === \"object\" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\r\n };\r\n}\r\n\r\n// [message: string, isString: bool]\r\nvar formatMessage = function (message) {\r\n var type = typeof message;\r\n if (type === \"string\") {\r\n return [message, true];\r\n }\r\n if (type !== \"object\" || message === null) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\r\n return [new Uint8Array(message), false];\r\n }\r\n if (!isArray(message) && !isView(message)) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n return [message, false];\r\n};\r\n\r\n/**\r\n * @method hex\r\n * @memberof md5\r\n * @description Output hash as hex string\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} Hex string\r\n * @example\r\n * md5.hex('The quick brown fox jumps over the lazy dog');\r\n * // equal to\r\n * md5('The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method digest\r\n * @memberof md5\r\n * @description Output hash as bytes array\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Array} Bytes array\r\n * @example\r\n * md5.digest('The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method array\r\n * @memberof md5\r\n * @description Output hash as bytes array\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Array} Bytes array\r\n * @example\r\n * md5.array('The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method arrayBuffer\r\n * @memberof md5\r\n * @description Output hash as ArrayBuffer\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @example\r\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method buffer\r\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\r\n * @memberof md5\r\n * @description Output hash as ArrayBuffer\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @example\r\n * md5.buffer('The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method base64\r\n * @memberof md5\r\n * @description Output hash as base64 string\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} base64 string\r\n * @example\r\n * md5.base64('The quick brown fox jumps over the lazy dog');\r\n */\r\nvar createOutputMethod = function (outputType) {\r\n return function (message) {\r\n return new Md5(true).update(message)[outputType]();\r\n };\r\n};\r\n\r\n/**\r\n * @method create\r\n * @memberof md5\r\n * @description Create Md5 object\r\n * @returns {Md5} Md5 object.\r\n * @example\r\n * var hash = md5.create();\r\n */\r\n/**\r\n * @method update\r\n * @memberof md5\r\n * @description Create and update Md5 object\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Md5} Md5 object.\r\n * @example\r\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\r\n * // equal to\r\n * var hash = md5.create();\r\n * hash.update('The quick brown fox jumps over the lazy dog');\r\n */\r\nvar createMethod = function () {\r\n var method = createOutputMethod(\"hex\");\r\n if (NODE_JS) {\r\n method = nodeWrap(method);\r\n }\r\n method.create = function () {\r\n return new Md5();\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(type);\r\n }\r\n return method;\r\n};\r\n\r\nvar nodeWrap = function (method) {\r\n var crypto = require(\"crypto\");\r\n var Buffer = require(\"buffer\").Buffer;\r\n var bufferFrom;\r\n if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {\r\n bufferFrom = Buffer.from;\r\n } else {\r\n bufferFrom = function (message) {\r\n return new Buffer(message);\r\n };\r\n }\r\n var nodeMethod = function (message) {\r\n if (typeof message === \"string\") {\r\n return crypto.createHash(\"md5\").update(message, \"utf8\").digest(\"hex\");\r\n } else {\r\n if (message === null || message === undefined) {\r\n throw new Error(INPUT_ERROR);\r\n } else if (message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n }\r\n }\r\n if (isArray(message) || isView(message) || message.constructor === Buffer) {\r\n return crypto.createHash(\"md5\").update(bufferFrom(message)).digest(\"hex\");\r\n } else {\r\n return method(message);\r\n }\r\n };\r\n return nodeMethod;\r\n};\r\n\r\n/**\r\n * @namespace md5.hmac\r\n */\r\n/**\r\n * @method hex\r\n * @memberof md5.hmac\r\n * @description Output hash as hex string\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} Hex string\r\n * @example\r\n * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');\r\n * // equal to\r\n * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');\r\n */\r\n\r\n/**\r\n * @method digest\r\n * @memberof md5.hmac\r\n * @description Output hash as bytes array\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Array} Bytes array\r\n * @example\r\n * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method array\r\n * @memberof md5.hmac\r\n * @description Output hash as bytes array\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Array} Bytes array\r\n * @example\r\n * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method arrayBuffer\r\n * @memberof md5.hmac\r\n * @description Output hash as ArrayBuffer\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @example\r\n * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method buffer\r\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\r\n * @memberof md5.hmac\r\n * @description Output hash as ArrayBuffer\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @example\r\n * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');\r\n */\r\n/**\r\n * @method base64\r\n * @memberof md5.hmac\r\n * @description Output hash as base64 string\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {String} base64 string\r\n * @example\r\n * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');\r\n */\r\nvar createHmacOutputMethod = function (outputType) {\r\n return function (key, message) {\r\n return new HmacMd5(key, true).update(message)[outputType]();\r\n };\r\n};\r\n\r\n/**\r\n * @method create\r\n * @memberof md5.hmac\r\n * @description Create HmacMd5 object\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @returns {HmacMd5} HmacMd5 object.\r\n * @example\r\n * var hash = md5.hmac.create('key');\r\n */\r\n/**\r\n * @method update\r\n * @memberof md5.hmac\r\n * @description Create and update HmacMd5 object\r\n * @param {String|Array|Uint8Array|ArrayBuffer} key key\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {HmacMd5} HmacMd5 object.\r\n * @example\r\n * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');\r\n * // equal to\r\n * var hash = md5.hmac.create('key');\r\n * hash.update('The quick brown fox jumps over the lazy dog');\r\n */\r\nvar createHmacMethod = function () {\r\n var method = createHmacOutputMethod(\"hex\");\r\n method.create = function (key) {\r\n return new HmacMd5(key);\r\n };\r\n method.update = function (key, message) {\r\n return method.create(key).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createHmacOutputMethod(type);\r\n }\r\n return method;\r\n};\r\n\r\n/**\r\n * Md5 class\r\n * @class Md5\r\n * @description This is internal class.\r\n * @see {@link md5.create}\r\n */\r\nfunction Md5(sharedMemory) {\r\n if (sharedMemory) {\r\n blocks[0] =\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n this.blocks = blocks;\r\n this.buffer8 = buffer8;\r\n } else {\r\n if (ARRAY_BUFFER) {\r\n var buffer = new ArrayBuffer(68);\r\n this.buffer8 = new Uint8Array(buffer);\r\n this.blocks = new Uint32Array(buffer);\r\n } else {\r\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n }\r\n }\r\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\r\n this.finalized = this.hashed = false;\r\n this.first = true;\r\n}\r\n\r\n/**\r\n * @method update\r\n * @memberof Md5\r\n * @instance\r\n * @description Update hash\r\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\r\n * @returns {Md5} Md5 object.\r\n * @see {@link md5.update}\r\n */\r\nMd5.prototype.update = function (message) {\r\n if (this.finalized) {\r\n throw new Error(FINALIZE_ERROR);\r\n }\r\n\r\n var result = formatMessage(message);\r\n message = result[0];\r\n var isString = result[1];\r\n var code,\r\n index = 0,\r\n i,\r\n length = message.length,\r\n blocks = this.blocks;\r\n var buffer8 = this.buffer8;\r\n\r\n while (index < length) {\r\n if (this.hashed) {\r\n this.hashed = false;\r\n blocks[0] = blocks[16];\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n }\r\n\r\n if (isString) {\r\n if (ARRAY_BUFFER) {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n buffer8[i++] = code;\r\n } else if (code < 0x800) {\r\n buffer8[i++] = 0xc0 | (code >>> 6);\r\n buffer8[i++] = 0x80 | (code & 0x3f);\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n buffer8[i++] = 0xe0 | (code >>> 12);\r\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\r\n buffer8[i++] = 0x80 | (code & 0x3f);\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n buffer8[i++] = 0xf0 | (code >>> 18);\r\n buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);\r\n buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\r\n buffer8[i++] = 0x80 | (code & 0x3f);\r\n }\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n }\r\n } else {\r\n if (ARRAY_BUFFER) {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n buffer8[i++] = message[index];\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n }\r\n }\r\n this.lastByteIndex = i;\r\n this.bytes += i - this.start;\r\n if (i >= 64) {\r\n this.start = i - 64;\r\n this.hash();\r\n this.hashed = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n if (this.bytes > 4294967295) {\r\n this.hBytes += (this.bytes / 4294967296) << 0;\r\n this.bytes = this.bytes % 4294967296;\r\n }\r\n return this;\r\n};\r\n\r\nMd5.prototype.finalize = function () {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n var blocks = this.blocks,\r\n i = this.lastByteIndex;\r\n blocks[i >>> 2] |= EXTRA[i & 3];\r\n if (i >= 56) {\r\n if (!this.hashed) {\r\n this.hash();\r\n }\r\n blocks[0] = blocks[16];\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n }\r\n blocks[14] = this.bytes << 3;\r\n blocks[15] = (this.hBytes << 3) | (this.bytes >>> 29);\r\n this.hash();\r\n};\r\n\r\nMd5.prototype.hash = function () {\r\n var a,\r\n b,\r\n c,\r\n d,\r\n bc,\r\n da,\r\n blocks = this.blocks;\r\n\r\n if (this.first) {\r\n a = blocks[0] - 680876937;\r\n a = (((a << 7) | (a >>> 25)) - 271733879) << 0;\r\n d = (-1732584194 ^ (a & 2004318071)) + blocks[1] - 117830708;\r\n d = (((d << 12) | (d >>> 20)) + a) << 0;\r\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\r\n c = (((c << 17) | (c >>> 15)) + d) << 0;\r\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\r\n b = (((b << 22) | (b >>> 10)) + c) << 0;\r\n } else {\r\n a = this.h0;\r\n b = this.h1;\r\n c = this.h2;\r\n d = this.h3;\r\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\r\n a = (((a << 7) | (a >>> 25)) + b) << 0;\r\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\r\n d = (((d << 12) | (d >>> 20)) + a) << 0;\r\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\r\n c = (((c << 17) | (c >>> 15)) + d) << 0;\r\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\r\n b = (((b << 22) | (b >>> 10)) + c) << 0;\r\n }\r\n\r\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\r\n a = (((a << 7) | (a >>> 25)) + b) << 0;\r\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\r\n d = (((d << 12) | (d >>> 20)) + a) << 0;\r\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\r\n c = (((c << 17) | (c >>> 15)) + d) << 0;\r\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\r\n b = (((b << 22) | (b >>> 10)) + c) << 0;\r\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\r\n a = (((a << 7) | (a >>> 25)) + b) << 0;\r\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\r\n d = (((d << 12) | (d >>> 20)) + a) << 0;\r\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\r\n c = (((c << 17) | (c >>> 15)) + d) << 0;\r\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\r\n b = (((b << 22) | (b >>> 10)) + c) << 0;\r\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\r\n a = (((a << 7) | (a >>> 25)) + b) << 0;\r\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\r\n d = (((d << 12) | (d >>> 20)) + a) << 0;\r\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\r\n c = (((c << 17) | (c >>> 15)) + d) << 0;\r\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\r\n b = (((b << 22) | (b >>> 10)) + c) << 0;\r\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\r\n a = (((a << 5) | (a >>> 27)) + b) << 0;\r\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\r\n d = (((d << 9) | (d >>> 23)) + a) << 0;\r\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\r\n c = (((c << 14) | (c >>> 18)) + d) << 0;\r\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\r\n b = (((b << 20) | (b >>> 12)) + c) << 0;\r\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\r\n a = (((a << 5) | (a >>> 27)) + b) << 0;\r\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\r\n d = (((d << 9) | (d >>> 23)) + a) << 0;\r\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\r\n c = (((c << 14) | (c >>> 18)) + d) << 0;\r\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\r\n b = (((b << 20) | (b >>> 12)) + c) << 0;\r\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\r\n a = (((a << 5) | (a >>> 27)) + b) << 0;\r\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\r\n d = (((d << 9) | (d >>> 23)) + a) << 0;\r\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\r\n c = (((c << 14) | (c >>> 18)) + d) << 0;\r\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\r\n b = (((b << 20) | (b >>> 12)) + c) << 0;\r\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\r\n a = (((a << 5) | (a >>> 27)) + b) << 0;\r\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\r\n d = (((d << 9) | (d >>> 23)) + a) << 0;\r\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\r\n c = (((c << 14) | (c >>> 18)) + d) << 0;\r\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\r\n b = (((b << 20) | (b >>> 12)) + c) << 0;\r\n bc = b ^ c;\r\n a += (bc ^ d) + blocks[5] - 378558;\r\n a = (((a << 4) | (a >>> 28)) + b) << 0;\r\n d += (bc ^ a) + blocks[8] - 2022574463;\r\n d = (((d << 11) | (d >>> 21)) + a) << 0;\r\n da = d ^ a;\r\n c += (da ^ b) + blocks[11] + 1839030562;\r\n c = (((c << 16) | (c >>> 16)) + d) << 0;\r\n b += (da ^ c) + blocks[14] - 35309556;\r\n b = (((b << 23) | (b >>> 9)) + c) << 0;\r\n bc = b ^ c;\r\n a += (bc ^ d) + blocks[1] - 1530992060;\r\n a = (((a << 4) | (a >>> 28)) + b) << 0;\r\n d += (bc ^ a) + blocks[4] + 1272893353;\r\n d = (((d << 11) | (d >>> 21)) + a) << 0;\r\n da = d ^ a;\r\n c += (da ^ b) + blocks[7] - 155497632;\r\n c = (((c << 16) | (c >>> 16)) + d) << 0;\r\n b += (da ^ c) + blocks[10] - 1094730640;\r\n b = (((b << 23) | (b >>> 9)) + c) << 0;\r\n bc = b ^ c;\r\n a += (bc ^ d) + blocks[13] + 681279174;\r\n a = (((a << 4) | (a >>> 28)) + b) << 0;\r\n d += (bc ^ a) + blocks[0] - 358537222;\r\n d = (((d << 11) | (d >>> 21)) + a) << 0;\r\n da = d ^ a;\r\n c += (da ^ b) + blocks[3] - 722521979;\r\n c = (((c << 16) | (c >>> 16)) + d) << 0;\r\n b += (da ^ c) + blocks[6] + 76029189;\r\n b = (((b << 23) | (b >>> 9)) + c) << 0;\r\n bc = b ^ c;\r\n a += (bc ^ d) + blocks[9] - 640364487;\r\n a = (((a << 4) | (a >>> 28)) + b) << 0;\r\n d += (bc ^ a) + blocks[12] - 421815835;\r\n d = (((d << 11) | (d >>> 21)) + a) << 0;\r\n da = d ^ a;\r\n c += (da ^ b) + blocks[15] + 530742520;\r\n c = (((c << 16) | (c >>> 16)) + d) << 0;\r\n b += (da ^ c) + blocks[2] - 995338651;\r\n b = (((b << 23) | (b >>> 9)) + c) << 0;\r\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\r\n a = (((a << 6) | (a >>> 26)) + b) << 0;\r\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\r\n d = (((d << 10) | (d >>> 22)) + a) << 0;\r\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\r\n c = (((c << 15) | (c >>> 17)) + d) << 0;\r\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\r\n b = (((b << 21) | (b >>> 11)) + c) << 0;\r\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\r\n a = (((a << 6) | (a >>> 26)) + b) << 0;\r\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\r\n d = (((d << 10) | (d >>> 22)) + a) << 0;\r\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\r\n c = (((c << 15) | (c >>> 17)) + d) << 0;\r\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\r\n b = (((b << 21) | (b >>> 11)) + c) << 0;\r\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\r\n a = (((a << 6) | (a >>> 26)) + b) << 0;\r\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\r\n d = (((d << 10) | (d >>> 22)) + a) << 0;\r\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\r\n c = (((c << 15) | (c >>> 17)) + d) << 0;\r\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\r\n b = (((b << 21) | (b >>> 11)) + c) << 0;\r\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\r\n a = (((a << 6) | (a >>> 26)) + b) << 0;\r\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\r\n d = (((d << 10) | (d >>> 22)) + a) << 0;\r\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\r\n c = (((c << 15) | (c >>> 17)) + d) << 0;\r\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\r\n b = (((b << 21) | (b >>> 11)) + c) << 0;\r\n\r\n if (this.first) {\r\n this.h0 = (a + 1732584193) << 0;\r\n this.h1 = (b - 271733879) << 0;\r\n this.h2 = (c - 1732584194) << 0;\r\n this.h3 = (d + 271733878) << 0;\r\n this.first = false;\r\n } else {\r\n this.h0 = (this.h0 + a) << 0;\r\n this.h1 = (this.h1 + b) << 0;\r\n this.h2 = (this.h2 + c) << 0;\r\n this.h3 = (this.h3 + d) << 0;\r\n }\r\n};\r\n\r\n/**\r\n * @method hex\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as hex string\r\n * @returns {String} Hex string\r\n * @see {@link md5.hex}\r\n * @example\r\n * hash.hex();\r\n */\r\nMd5.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var h0 = this.h0,\r\n h1 = this.h1,\r\n h2 = this.h2,\r\n h3 = this.h3;\r\n\r\n return (\r\n HEX_CHARS[(h0 >>> 4) & 0x0f] +\r\n HEX_CHARS[h0 & 0x0f] +\r\n HEX_CHARS[(h0 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 4) & 0x0f] +\r\n HEX_CHARS[h1 & 0x0f] +\r\n HEX_CHARS[(h1 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 4) & 0x0f] +\r\n HEX_CHARS[h2 & 0x0f] +\r\n HEX_CHARS[(h2 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 4) & 0x0f] +\r\n HEX_CHARS[h3 & 0x0f] +\r\n HEX_CHARS[(h3 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 24) & 0x0f]\r\n );\r\n};\r\n\r\n/**\r\n * @method toString\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as hex string\r\n * @returns {String} Hex string\r\n * @see {@link md5.hex}\r\n * @example\r\n * hash.toString();\r\n */\r\nMd5.prototype.toString = Md5.prototype.hex;\r\n\r\n/**\r\n * @method digest\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as bytes array\r\n * @returns {Array} Bytes array\r\n * @see {@link md5.digest}\r\n * @example\r\n * hash.digest();\r\n */\r\nMd5.prototype.digest = function () {\r\n this.finalize();\r\n\r\n var h0 = this.h0,\r\n h1 = this.h1,\r\n h2 = this.h2,\r\n h3 = this.h3;\r\n return [\r\n h0 & 0xff,\r\n (h0 >>> 8) & 0xff,\r\n (h0 >>> 16) & 0xff,\r\n (h0 >>> 24) & 0xff,\r\n h1 & 0xff,\r\n (h1 >>> 8) & 0xff,\r\n (h1 >>> 16) & 0xff,\r\n (h1 >>> 24) & 0xff,\r\n h2 & 0xff,\r\n (h2 >>> 8) & 0xff,\r\n (h2 >>> 16) & 0xff,\r\n (h2 >>> 24) & 0xff,\r\n h3 & 0xff,\r\n (h3 >>> 8) & 0xff,\r\n (h3 >>> 16) & 0xff,\r\n (h3 >>> 24) & 0xff,\r\n ];\r\n};\r\n\r\n/**\r\n * @method array\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as bytes array\r\n * @returns {Array} Bytes array\r\n * @see {@link md5.array}\r\n * @example\r\n * hash.array();\r\n */\r\nMd5.prototype.array = Md5.prototype.digest;\r\n\r\n/**\r\n * @method arrayBuffer\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as ArrayBuffer\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @see {@link md5.arrayBuffer}\r\n * @example\r\n * hash.arrayBuffer();\r\n */\r\nMd5.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var buffer = new ArrayBuffer(16);\r\n var blocks = new Uint32Array(buffer);\r\n blocks[0] = this.h0;\r\n blocks[1] = this.h1;\r\n blocks[2] = this.h2;\r\n blocks[3] = this.h3;\r\n return buffer;\r\n};\r\n\r\n/**\r\n * @method buffer\r\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as ArrayBuffer\r\n * @returns {ArrayBuffer} ArrayBuffer\r\n * @see {@link md5.buffer}\r\n * @example\r\n * hash.buffer();\r\n */\r\nMd5.prototype.buffer = Md5.prototype.arrayBuffer;\r\n\r\n/**\r\n * @method base64\r\n * @memberof Md5\r\n * @instance\r\n * @description Output hash as base64 string\r\n * @returns {String} base64 string\r\n * @see {@link md5.base64}\r\n * @example\r\n * hash.base64();\r\n */\r\nMd5.prototype.base64 = function () {\r\n var v1,\r\n v2,\r\n v3,\r\n base64Str = \"\",\r\n bytes = this.array();\r\n for (var i = 0; i < 15; ) {\r\n v1 = bytes[i++];\r\n v2 = bytes[i++];\r\n v3 = bytes[i++];\r\n base64Str +=\r\n BASE64_ENCODE_CHAR[v1 >>> 2] +\r\n BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63] +\r\n BASE64_ENCODE_CHAR[((v2 << 2) | (v3 >>> 6)) & 63] +\r\n BASE64_ENCODE_CHAR[v3 & 63];\r\n }\r\n v1 = bytes[i];\r\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4) & 63] + \"==\";\r\n return base64Str;\r\n};\r\n\r\n/**\r\n * HmacMd5 class\r\n * @class HmacMd5\r\n * @extends Md5\r\n * @description This is internal class.\r\n * @see {@link md5.hmac.create}\r\n */\r\nfunction HmacMd5(key, sharedMemory) {\r\n var i,\r\n result = formatMessage(key);\r\n key = result[0];\r\n if (result[1]) {\r\n var bytes = [],\r\n length = key.length,\r\n index = 0,\r\n code;\r\n for (i = 0; i < length; ++i) {\r\n code = key.charCodeAt(i);\r\n if (code < 0x80) {\r\n bytes[index++] = code;\r\n } else if (code < 0x800) {\r\n bytes[index++] = 0xc0 | (code >>> 6);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n bytes[index++] = 0xe0 | (code >>> 12);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\r\n bytes[index++] = 0xf0 | (code >>> 18);\r\n bytes[index++] = 0x80 | ((code >>> 12) & 0x3f);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n }\r\n }\r\n key = bytes;\r\n }\r\n\r\n if (key.length > 64) {\r\n key = new Md5(true).update(key).array();\r\n }\r\n\r\n var oKeyPad = [],\r\n iKeyPad = [];\r\n for (i = 0; i < 64; ++i) {\r\n var b = key[i] || 0;\r\n oKeyPad[i] = 0x5c ^ b;\r\n iKeyPad[i] = 0x36 ^ b;\r\n }\r\n\r\n Md5.call(this, sharedMemory);\r\n\r\n this.update(iKeyPad);\r\n this.oKeyPad = oKeyPad;\r\n this.inner = true;\r\n this.sharedMemory = sharedMemory;\r\n}\r\n\r\nHmacMd5.prototype = new Md5();\r\n\r\nHmacMd5.prototype.finalize = function () {\r\n Md5.prototype.finalize.call(this);\r\n if (this.inner) {\r\n this.inner = false;\r\n var innerHash = this.array();\r\n Md5.call(this, this.sharedMemory);\r\n this.update(this.oKeyPad);\r\n this.update(innerHash);\r\n Md5.prototype.finalize.call(this);\r\n }\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport const md5 = createMethod();\r\nexport const md5_hmac = createHmacMethod();\r\n","/*\r\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\r\n *\r\n * @version 0.7.0\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2014-2024\r\n * @license MIT\r\n */\r\n/* jslint bitwise: true */\r\n\r\nvar INPUT_ERROR = \"input is invalid type\";\r\nvar FINALIZE_ERROR = \"finalize already called\";\r\nvar WINDOW = typeof window === \"object\";\r\nvar root = WINDOW ? window : {};\r\nif (root.JS_SHA1_NO_WINDOW) {\r\n WINDOW = false;\r\n}\r\nvar WEB_WORKER = !WINDOW && typeof self === \"object\";\r\nvar NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n} else if (WEB_WORKER) {\r\n root = self;\r\n}\r\nvar ARRAY_BUFFER = !root.JS_SHA1_NO_ARRAY_BUFFER && typeof ArrayBuffer !== \"undefined\";\r\nvar HEX_CHARS = \"0123456789abcdef\".split(\"\");\r\nvar EXTRA = [-2147483648, 8388608, 32768, 128];\r\nvar SHIFT = [24, 16, 8, 0];\r\nvar OUTPUT_TYPES = [\"hex\", \"array\", \"digest\", \"arrayBuffer\"];\r\n\r\nvar blocks = [];\r\n\r\nvar isArray = Array.isArray;\r\nif (root.JS_SHA1_NO_NODE_JS || !isArray) {\r\n isArray = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n}\r\n\r\nvar isView = ArrayBuffer.isView;\r\nif (ARRAY_BUFFER && (root.JS_SHA1_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {\r\n isView = function (obj) {\r\n return typeof obj === \"object\" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\r\n };\r\n}\r\n\r\n// [message: string, isString: bool]\r\nvar formatMessage = function (message) {\r\n var type = typeof message;\r\n if (type === \"string\") {\r\n return [message, true];\r\n }\r\n if (type !== \"object\" || message === null) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\r\n return [new Uint8Array(message), false];\r\n }\r\n if (!isArray(message) && !isView(message)) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n return [message, false];\r\n};\r\n\r\nvar createOutputMethod = function (outputType) {\r\n return function (message) {\r\n return new Sha1(true).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createMethod = function () {\r\n var method = createOutputMethod(\"hex\");\r\n if (NODE_JS) {\r\n method = nodeWrap(method);\r\n }\r\n method.create = function () {\r\n return new Sha1();\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(type);\r\n }\r\n return method;\r\n};\r\n\r\nvar nodeWrap = function (method) {\r\n var crypto = require(\"crypto\");\r\n var Buffer = require(\"buffer\").Buffer;\r\n var bufferFrom;\r\n if (Buffer.from && !root.JS_SHA1_NO_BUFFER_FROM) {\r\n bufferFrom = Buffer.from;\r\n } else {\r\n bufferFrom = function (message) {\r\n return new Buffer(message);\r\n };\r\n }\r\n var nodeMethod = function (message) {\r\n if (typeof message === \"string\") {\r\n return crypto.createHash(\"sha1\").update(message, \"utf8\").digest(\"hex\");\r\n } else {\r\n if (message === null || message === undefined) {\r\n throw new Error(INPUT_ERROR);\r\n } else if (message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n }\r\n }\r\n if (isArray(message) || isView(message) || message.constructor === Buffer) {\r\n return crypto.createHash(\"sha1\").update(bufferFrom(message)).digest(\"hex\");\r\n } else {\r\n return method(message);\r\n }\r\n };\r\n return nodeMethod;\r\n};\r\n\r\nvar createHmacOutputMethod = function (outputType) {\r\n return function (key, message) {\r\n return new HmacSha1(key, true).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createHmacMethod = function () {\r\n var method = createHmacOutputMethod(\"hex\");\r\n method.create = function (key) {\r\n return new HmacSha1(key);\r\n };\r\n method.update = function (key, message) {\r\n return method.create(key).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createHmacOutputMethod(type);\r\n }\r\n return method;\r\n};\r\n\r\nfunction Sha1(sharedMemory) {\r\n if (sharedMemory) {\r\n blocks[0] =\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n this.blocks = blocks;\r\n } else {\r\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n }\r\n\r\n this.h0 = 0x67452301;\r\n this.h1 = 0xefcdab89;\r\n this.h2 = 0x98badcfe;\r\n this.h3 = 0x10325476;\r\n this.h4 = 0xc3d2e1f0;\r\n\r\n this.block = this.start = this.bytes = this.hBytes = 0;\r\n this.finalized = this.hashed = false;\r\n this.first = true;\r\n}\r\n\r\nSha1.prototype.update = function (message) {\r\n if (this.finalized) {\r\n throw new Error(FINALIZE_ERROR);\r\n }\r\n\r\n var result = formatMessage(message);\r\n message = result[0];\r\n var isString = result[1];\r\n var code,\r\n index = 0,\r\n i,\r\n length = message.length || 0,\r\n blocks = this.blocks;\r\n\r\n while (index < length) {\r\n if (this.hashed) {\r\n this.hashed = false;\r\n blocks[0] = this.block;\r\n this.block =\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n }\r\n\r\n if (isString) {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n }\r\n\r\n this.lastByteIndex = i;\r\n this.bytes += i - this.start;\r\n if (i >= 64) {\r\n this.block = blocks[16];\r\n this.start = i - 64;\r\n this.hash();\r\n this.hashed = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n if (this.bytes > 4294967295) {\r\n this.hBytes += (this.bytes / 4294967296) << 0;\r\n this.bytes = this.bytes % 4294967296;\r\n }\r\n return this;\r\n};\r\n\r\nSha1.prototype.finalize = function () {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n var blocks = this.blocks,\r\n i = this.lastByteIndex;\r\n blocks[16] = this.block;\r\n blocks[i >>> 2] |= EXTRA[i & 3];\r\n this.block = blocks[16];\r\n if (i >= 56) {\r\n if (!this.hashed) {\r\n this.hash();\r\n }\r\n blocks[0] = this.block;\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n }\r\n blocks[14] = (this.hBytes << 3) | (this.bytes >>> 29);\r\n blocks[15] = this.bytes << 3;\r\n this.hash();\r\n};\r\n\r\nSha1.prototype.hash = function () {\r\n var a = this.h0,\r\n b = this.h1,\r\n c = this.h2,\r\n d = this.h3,\r\n e = this.h4;\r\n var f,\r\n j,\r\n t,\r\n blocks = this.blocks;\r\n\r\n for (j = 16; j < 80; ++j) {\r\n t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\r\n blocks[j] = (t << 1) | (t >>> 31);\r\n }\r\n\r\n for (j = 0; j < 20; j += 5) {\r\n f = (b & c) | (~b & d);\r\n t = (a << 5) | (a >>> 27);\r\n e = (t + f + e + 1518500249 + blocks[j]) << 0;\r\n b = (b << 30) | (b >>> 2);\r\n\r\n f = (a & b) | (~a & c);\r\n t = (e << 5) | (e >>> 27);\r\n d = (t + f + d + 1518500249 + blocks[j + 1]) << 0;\r\n a = (a << 30) | (a >>> 2);\r\n\r\n f = (e & a) | (~e & b);\r\n t = (d << 5) | (d >>> 27);\r\n c = (t + f + c + 1518500249 + blocks[j + 2]) << 0;\r\n e = (e << 30) | (e >>> 2);\r\n\r\n f = (d & e) | (~d & a);\r\n t = (c << 5) | (c >>> 27);\r\n b = (t + f + b + 1518500249 + blocks[j + 3]) << 0;\r\n d = (d << 30) | (d >>> 2);\r\n\r\n f = (c & d) | (~c & e);\r\n t = (b << 5) | (b >>> 27);\r\n a = (t + f + a + 1518500249 + blocks[j + 4]) << 0;\r\n c = (c << 30) | (c >>> 2);\r\n }\r\n\r\n for (; j < 40; j += 5) {\r\n f = b ^ c ^ d;\r\n t = (a << 5) | (a >>> 27);\r\n e = (t + f + e + 1859775393 + blocks[j]) << 0;\r\n b = (b << 30) | (b >>> 2);\r\n\r\n f = a ^ b ^ c;\r\n t = (e << 5) | (e >>> 27);\r\n d = (t + f + d + 1859775393 + blocks[j + 1]) << 0;\r\n a = (a << 30) | (a >>> 2);\r\n\r\n f = e ^ a ^ b;\r\n t = (d << 5) | (d >>> 27);\r\n c = (t + f + c + 1859775393 + blocks[j + 2]) << 0;\r\n e = (e << 30) | (e >>> 2);\r\n\r\n f = d ^ e ^ a;\r\n t = (c << 5) | (c >>> 27);\r\n b = (t + f + b + 1859775393 + blocks[j + 3]) << 0;\r\n d = (d << 30) | (d >>> 2);\r\n\r\n f = c ^ d ^ e;\r\n t = (b << 5) | (b >>> 27);\r\n a = (t + f + a + 1859775393 + blocks[j + 4]) << 0;\r\n c = (c << 30) | (c >>> 2);\r\n }\r\n\r\n for (; j < 60; j += 5) {\r\n f = (b & c) | (b & d) | (c & d);\r\n t = (a << 5) | (a >>> 27);\r\n e = (t + f + e - 1894007588 + blocks[j]) << 0;\r\n b = (b << 30) | (b >>> 2);\r\n\r\n f = (a & b) | (a & c) | (b & c);\r\n t = (e << 5) | (e >>> 27);\r\n d = (t + f + d - 1894007588 + blocks[j + 1]) << 0;\r\n a = (a << 30) | (a >>> 2);\r\n\r\n f = (e & a) | (e & b) | (a & b);\r\n t = (d << 5) | (d >>> 27);\r\n c = (t + f + c - 1894007588 + blocks[j + 2]) << 0;\r\n e = (e << 30) | (e >>> 2);\r\n\r\n f = (d & e) | (d & a) | (e & a);\r\n t = (c << 5) | (c >>> 27);\r\n b = (t + f + b - 1894007588 + blocks[j + 3]) << 0;\r\n d = (d << 30) | (d >>> 2);\r\n\r\n f = (c & d) | (c & e) | (d & e);\r\n t = (b << 5) | (b >>> 27);\r\n a = (t + f + a - 1894007588 + blocks[j + 4]) << 0;\r\n c = (c << 30) | (c >>> 2);\r\n }\r\n\r\n for (; j < 80; j += 5) {\r\n f = b ^ c ^ d;\r\n t = (a << 5) | (a >>> 27);\r\n e = (t + f + e - 899497514 + blocks[j]) << 0;\r\n b = (b << 30) | (b >>> 2);\r\n\r\n f = a ^ b ^ c;\r\n t = (e << 5) | (e >>> 27);\r\n d = (t + f + d - 899497514 + blocks[j + 1]) << 0;\r\n a = (a << 30) | (a >>> 2);\r\n\r\n f = e ^ a ^ b;\r\n t = (d << 5) | (d >>> 27);\r\n c = (t + f + c - 899497514 + blocks[j + 2]) << 0;\r\n e = (e << 30) | (e >>> 2);\r\n\r\n f = d ^ e ^ a;\r\n t = (c << 5) | (c >>> 27);\r\n b = (t + f + b - 899497514 + blocks[j + 3]) << 0;\r\n d = (d << 30) | (d >>> 2);\r\n\r\n f = c ^ d ^ e;\r\n t = (b << 5) | (b >>> 27);\r\n a = (t + f + a - 899497514 + blocks[j + 4]) << 0;\r\n c = (c << 30) | (c >>> 2);\r\n }\r\n\r\n this.h0 = (this.h0 + a) << 0;\r\n this.h1 = (this.h1 + b) << 0;\r\n this.h2 = (this.h2 + c) << 0;\r\n this.h3 = (this.h3 + d) << 0;\r\n this.h4 = (this.h4 + e) << 0;\r\n};\r\n\r\nSha1.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var h0 = this.h0,\r\n h1 = this.h1,\r\n h2 = this.h2,\r\n h3 = this.h3,\r\n h4 = this.h4;\r\n\r\n return (\r\n HEX_CHARS[(h0 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 4) & 0x0f] +\r\n HEX_CHARS[h0 & 0x0f] +\r\n HEX_CHARS[(h1 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 4) & 0x0f] +\r\n HEX_CHARS[h1 & 0x0f] +\r\n HEX_CHARS[(h2 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 4) & 0x0f] +\r\n HEX_CHARS[h2 & 0x0f] +\r\n HEX_CHARS[(h3 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 4) & 0x0f] +\r\n HEX_CHARS[h3 & 0x0f] +\r\n HEX_CHARS[(h4 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 4) & 0x0f] +\r\n HEX_CHARS[h4 & 0x0f]\r\n );\r\n};\r\n\r\nSha1.prototype.toString = Sha1.prototype.hex;\r\n\r\nSha1.prototype.digest = function () {\r\n this.finalize();\r\n\r\n var h0 = this.h0,\r\n h1 = this.h1,\r\n h2 = this.h2,\r\n h3 = this.h3,\r\n h4 = this.h4;\r\n\r\n return [\r\n (h0 >>> 24) & 0xff,\r\n (h0 >>> 16) & 0xff,\r\n (h0 >>> 8) & 0xff,\r\n h0 & 0xff,\r\n (h1 >>> 24) & 0xff,\r\n (h1 >>> 16) & 0xff,\r\n (h1 >>> 8) & 0xff,\r\n h1 & 0xff,\r\n (h2 >>> 24) & 0xff,\r\n (h2 >>> 16) & 0xff,\r\n (h2 >>> 8) & 0xff,\r\n h2 & 0xff,\r\n (h3 >>> 24) & 0xff,\r\n (h3 >>> 16) & 0xff,\r\n (h3 >>> 8) & 0xff,\r\n h3 & 0xff,\r\n (h4 >>> 24) & 0xff,\r\n (h4 >>> 16) & 0xff,\r\n (h4 >>> 8) & 0xff,\r\n h4 & 0xff,\r\n ];\r\n};\r\n\r\nSha1.prototype.array = Sha1.prototype.digest;\r\n\r\nSha1.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var buffer = new ArrayBuffer(20);\r\n var dataView = new DataView(buffer);\r\n dataView.setUint32(0, this.h0);\r\n dataView.setUint32(4, this.h1);\r\n dataView.setUint32(8, this.h2);\r\n dataView.setUint32(12, this.h3);\r\n dataView.setUint32(16, this.h4);\r\n return buffer;\r\n};\r\n\r\nfunction HmacSha1(key, sharedMemory) {\r\n var i,\r\n result = formatMessage(key);\r\n key = result[0];\r\n if (result[1]) {\r\n var bytes = [],\r\n length = key.length,\r\n index = 0,\r\n code;\r\n for (i = 0; i < length; ++i) {\r\n code = key.charCodeAt(i);\r\n if (code < 0x80) {\r\n bytes[index++] = code;\r\n } else if (code < 0x800) {\r\n bytes[index++] = 0xc0 | (code >>> 6);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n bytes[index++] = 0xe0 | (code >>> 12);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\r\n bytes[index++] = 0xf0 | (code >>> 18);\r\n bytes[index++] = 0x80 | ((code >>> 12) & 0x3f);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n }\r\n }\r\n key = bytes;\r\n }\r\n\r\n if (key.length > 64) {\r\n key = new Sha1(true).update(key).array();\r\n }\r\n\r\n var oKeyPad = [],\r\n iKeyPad = [];\r\n for (i = 0; i < 64; ++i) {\r\n var b = key[i] || 0;\r\n oKeyPad[i] = 0x5c ^ b;\r\n iKeyPad[i] = 0x36 ^ b;\r\n }\r\n\r\n Sha1.call(this, sharedMemory);\r\n\r\n this.update(iKeyPad);\r\n this.oKeyPad = oKeyPad;\r\n this.inner = true;\r\n this.sharedMemory = sharedMemory;\r\n}\r\n\r\nHmacSha1.prototype = new Sha1();\r\n\r\nHmacSha1.prototype.finalize = function () {\r\n Sha1.prototype.finalize.call(this);\r\n if (this.inner) {\r\n this.inner = false;\r\n var innerHash = this.array();\r\n Sha1.call(this, this.sharedMemory);\r\n this.update(this.oKeyPad);\r\n this.update(innerHash);\r\n Sha1.prototype.finalize.call(this);\r\n }\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport const sha1 = createMethod();\r\nexport const sha1_hmac = createHmacMethod();\r\n","/**\r\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\r\n *\r\n * @version 0.11.0\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2014-2024\r\n * @license MIT\r\n */\r\n/* jslint bitwise: true */\r\n\r\nvar ERROR = \"input is invalid type\";\r\nvar WINDOW = typeof window === \"object\";\r\nvar root = WINDOW ? window : {};\r\nif (root.JS_SHA256_NO_WINDOW) {\r\n WINDOW = false;\r\n}\r\nvar WEB_WORKER = !WINDOW && typeof self === \"object\";\r\nvar NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n} else if (WEB_WORKER) {\r\n root = self;\r\n}\r\nvar ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== \"undefined\";\r\nvar HEX_CHARS = \"0123456789abcdef\".split(\"\");\r\nvar EXTRA = [-2147483648, 8388608, 32768, 128];\r\nvar SHIFT = [24, 16, 8, 0];\r\nvar K = [\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,\r\n 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\r\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,\r\n 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\r\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\r\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\r\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,\r\n 0xc67178f2,\r\n];\r\nvar OUTPUT_TYPES = [\"hex\", \"array\", \"digest\", \"arrayBuffer\"];\r\n\r\nvar blocks = [];\r\n\r\nif (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\r\n Array.isArray = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n}\r\n\r\nif (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\r\n ArrayBuffer.isView = function (obj) {\r\n return typeof obj === \"object\" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\r\n };\r\n}\r\n\r\nvar createOutputMethod = function (outputType, is224) {\r\n return function (message) {\r\n return new Sha256(is224, true).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createMethod = function (is224) {\r\n var method = createOutputMethod(\"hex\", is224);\r\n if (NODE_JS) {\r\n method = nodeWrap(method, is224);\r\n }\r\n method.create = function () {\r\n return new Sha256(is224);\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(type, is224);\r\n }\r\n return method;\r\n};\r\n\r\nvar nodeWrap = function (method, is224) {\r\n var crypto = require(\"crypto\");\r\n var Buffer = require(\"buffer\").Buffer;\r\n var algorithm = is224 ? \"sha224\" : \"sha256\";\r\n var bufferFrom;\r\n if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {\r\n bufferFrom = Buffer.from;\r\n } else {\r\n bufferFrom = function (message) {\r\n return new Buffer(message);\r\n };\r\n }\r\n var nodeMethod = function (message) {\r\n if (typeof message === \"string\") {\r\n return crypto.createHash(algorithm).update(message, \"utf8\").digest(\"hex\");\r\n } else {\r\n if (message === null || message === undefined) {\r\n throw new Error(ERROR);\r\n } else if (message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n }\r\n }\r\n if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) {\r\n return crypto.createHash(algorithm).update(bufferFrom(message)).digest(\"hex\");\r\n } else {\r\n return method(message);\r\n }\r\n };\r\n return nodeMethod;\r\n};\r\n\r\nvar createHmacOutputMethod = function (outputType, is224) {\r\n return function (key, message) {\r\n return new HmacSha256(key, is224, true).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createHmacMethod = function (is224) {\r\n var method = createHmacOutputMethod(\"hex\", is224);\r\n method.create = function (key) {\r\n return new HmacSha256(key, is224);\r\n };\r\n method.update = function (key, message) {\r\n return method.create(key).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createHmacOutputMethod(type, is224);\r\n }\r\n return method;\r\n};\r\n\r\nfunction Sha256(is224, sharedMemory) {\r\n if (sharedMemory) {\r\n blocks[0] =\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n this.blocks = blocks;\r\n } else {\r\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n }\r\n\r\n if (is224) {\r\n this.h0 = 0xc1059ed8;\r\n this.h1 = 0x367cd507;\r\n this.h2 = 0x3070dd17;\r\n this.h3 = 0xf70e5939;\r\n this.h4 = 0xffc00b31;\r\n this.h5 = 0x68581511;\r\n this.h6 = 0x64f98fa7;\r\n this.h7 = 0xbefa4fa4;\r\n } else {\r\n // 256\r\n this.h0 = 0x6a09e667;\r\n this.h1 = 0xbb67ae85;\r\n this.h2 = 0x3c6ef372;\r\n this.h3 = 0xa54ff53a;\r\n this.h4 = 0x510e527f;\r\n this.h5 = 0x9b05688c;\r\n this.h6 = 0x1f83d9ab;\r\n this.h7 = 0x5be0cd19;\r\n }\r\n\r\n this.block = this.start = this.bytes = this.hBytes = 0;\r\n this.finalized = this.hashed = false;\r\n this.first = true;\r\n this.is224 = is224;\r\n}\r\n\r\nSha256.prototype.update = function (message) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n var notString,\r\n type = typeof message;\r\n if (type !== \"string\") {\r\n if (type === \"object\") {\r\n if (message === null) {\r\n throw new Error(ERROR);\r\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n } else if (!Array.isArray(message)) {\r\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\r\n throw new Error(ERROR);\r\n }\r\n }\r\n } else {\r\n throw new Error(ERROR);\r\n }\r\n notString = true;\r\n }\r\n var code,\r\n index = 0,\r\n i,\r\n length = message.length,\r\n blocks = this.blocks;\r\n while (index < length) {\r\n if (this.hashed) {\r\n this.hashed = false;\r\n blocks[0] = this.block;\r\n this.block =\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n }\r\n\r\n if (notString) {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < 64; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n }\r\n\r\n this.lastByteIndex = i;\r\n this.bytes += i - this.start;\r\n if (i >= 64) {\r\n this.block = blocks[16];\r\n this.start = i - 64;\r\n this.hash();\r\n this.hashed = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n if (this.bytes > 4294967295) {\r\n this.hBytes += (this.bytes / 4294967296) << 0;\r\n this.bytes = this.bytes % 4294967296;\r\n }\r\n return this;\r\n};\r\n\r\nSha256.prototype.finalize = function () {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n var blocks = this.blocks,\r\n i = this.lastByteIndex;\r\n blocks[16] = this.block;\r\n blocks[i >>> 2] |= EXTRA[i & 3];\r\n this.block = blocks[16];\r\n if (i >= 56) {\r\n if (!this.hashed) {\r\n this.hash();\r\n }\r\n blocks[0] = this.block;\r\n blocks[16] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n 0;\r\n }\r\n blocks[14] = (this.hBytes << 3) | (this.bytes >>> 29);\r\n blocks[15] = this.bytes << 3;\r\n this.hash();\r\n};\r\n\r\nSha256.prototype.hash = function () {\r\n var a = this.h0,\r\n b = this.h1,\r\n c = this.h2,\r\n d = this.h3,\r\n e = this.h4,\r\n f = this.h5,\r\n g = this.h6,\r\n h = this.h7,\r\n blocks = this.blocks,\r\n j,\r\n s0,\r\n s1,\r\n maj,\r\n t1,\r\n t2,\r\n ch,\r\n ab,\r\n da,\r\n cd,\r\n bc;\r\n\r\n for (j = 16; j < 64; ++j) {\r\n // rightrotate\r\n t1 = blocks[j - 15];\r\n s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\r\n t1 = blocks[j - 2];\r\n s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\r\n blocks[j] = (blocks[j - 16] + s0 + blocks[j - 7] + s1) << 0;\r\n }\r\n\r\n bc = b & c;\r\n for (j = 0; j < 64; j += 4) {\r\n if (this.first) {\r\n if (this.is224) {\r\n ab = 300032;\r\n t1 = blocks[0] - 1413257819;\r\n h = (t1 - 150054599) << 0;\r\n d = (t1 + 24177077) << 0;\r\n } else {\r\n ab = 704751109;\r\n t1 = blocks[0] - 210244248;\r\n h = (t1 - 1521486534) << 0;\r\n d = (t1 + 143694565) << 0;\r\n }\r\n this.first = false;\r\n } else {\r\n s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\r\n s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\r\n ab = a & b;\r\n maj = ab ^ (a & c) ^ bc;\r\n ch = (e & f) ^ (~e & g);\r\n t1 = h + s1 + ch + K[j] + blocks[j];\r\n t2 = s0 + maj;\r\n h = (d + t1) << 0;\r\n d = (t1 + t2) << 0;\r\n }\r\n s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\r\n s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\r\n da = d & a;\r\n maj = da ^ (d & b) ^ ab;\r\n ch = (h & e) ^ (~h & f);\r\n t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\r\n t2 = s0 + maj;\r\n g = (c + t1) << 0;\r\n c = (t1 + t2) << 0;\r\n s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\r\n s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\r\n cd = c & d;\r\n maj = cd ^ (c & a) ^ da;\r\n ch = (g & h) ^ (~g & e);\r\n t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\r\n t2 = s0 + maj;\r\n f = (b + t1) << 0;\r\n b = (t1 + t2) << 0;\r\n s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\r\n s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\r\n bc = b & c;\r\n maj = bc ^ (b & d) ^ cd;\r\n ch = (f & g) ^ (~f & h);\r\n t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\r\n t2 = s0 + maj;\r\n e = (a + t1) << 0;\r\n a = (t1 + t2) << 0;\r\n this.chromeBugWorkAround = true;\r\n }\r\n\r\n this.h0 = (this.h0 + a) << 0;\r\n this.h1 = (this.h1 + b) << 0;\r\n this.h2 = (this.h2 + c) << 0;\r\n this.h3 = (this.h3 + d) << 0;\r\n this.h4 = (this.h4 + e) << 0;\r\n this.h5 = (this.h5 + f) << 0;\r\n this.h6 = (this.h6 + g) << 0;\r\n this.h7 = (this.h7 + h) << 0;\r\n};\r\n\r\nSha256.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var h0 = this.h0,\r\n h1 = this.h1,\r\n h2 = this.h2,\r\n h3 = this.h3,\r\n h4 = this.h4,\r\n h5 = this.h5,\r\n h6 = this.h6,\r\n h7 = this.h7;\r\n\r\n var hex =\r\n HEX_CHARS[(h0 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h0 >>> 4) & 0x0f] +\r\n HEX_CHARS[h0 & 0x0f] +\r\n HEX_CHARS[(h1 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h1 >>> 4) & 0x0f] +\r\n HEX_CHARS[h1 & 0x0f] +\r\n HEX_CHARS[(h2 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h2 >>> 4) & 0x0f] +\r\n HEX_CHARS[h2 & 0x0f] +\r\n HEX_CHARS[(h3 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h3 >>> 4) & 0x0f] +\r\n HEX_CHARS[h3 & 0x0f] +\r\n HEX_CHARS[(h4 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h4 >>> 4) & 0x0f] +\r\n HEX_CHARS[h4 & 0x0f] +\r\n HEX_CHARS[(h5 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h5 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h5 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h5 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h5 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h5 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h5 >>> 4) & 0x0f] +\r\n HEX_CHARS[h5 & 0x0f] +\r\n HEX_CHARS[(h6 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h6 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h6 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h6 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h6 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h6 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h6 >>> 4) & 0x0f] +\r\n HEX_CHARS[h6 & 0x0f];\r\n if (!this.is224) {\r\n hex +=\r\n HEX_CHARS[(h7 >>> 28) & 0x0f] +\r\n HEX_CHARS[(h7 >>> 24) & 0x0f] +\r\n HEX_CHARS[(h7 >>> 20) & 0x0f] +\r\n HEX_CHARS[(h7 >>> 16) & 0x0f] +\r\n HEX_CHARS[(h7 >>> 12) & 0x0f] +\r\n HEX_CHARS[(h7 >>> 8) & 0x0f] +\r\n HEX_CHARS[(h7 >>> 4) & 0x0f] +\r\n HEX_CHARS[h7 & 0x0f];\r\n }\r\n return hex;\r\n};\r\n\r\nSha256.prototype.toString = Sha256.prototype.hex;\r\n\r\nSha256.prototype.digest = function () {\r\n this.finalize();\r\n\r\n var h0 = this.h0,\r\n h1 = this.h1,\r\n h2 = this.h2,\r\n h3 = this.h3,\r\n h4 = this.h4,\r\n h5 = this.h5,\r\n h6 = this.h6,\r\n h7 = this.h7;\r\n\r\n var arr = [\r\n (h0 >>> 24) & 0xff,\r\n (h0 >>> 16) & 0xff,\r\n (h0 >>> 8) & 0xff,\r\n h0 & 0xff,\r\n (h1 >>> 24) & 0xff,\r\n (h1 >>> 16) & 0xff,\r\n (h1 >>> 8) & 0xff,\r\n h1 & 0xff,\r\n (h2 >>> 24) & 0xff,\r\n (h2 >>> 16) & 0xff,\r\n (h2 >>> 8) & 0xff,\r\n h2 & 0xff,\r\n (h3 >>> 24) & 0xff,\r\n (h3 >>> 16) & 0xff,\r\n (h3 >>> 8) & 0xff,\r\n h3 & 0xff,\r\n (h4 >>> 24) & 0xff,\r\n (h4 >>> 16) & 0xff,\r\n (h4 >>> 8) & 0xff,\r\n h4 & 0xff,\r\n (h5 >>> 24) & 0xff,\r\n (h5 >>> 16) & 0xff,\r\n (h5 >>> 8) & 0xff,\r\n h5 & 0xff,\r\n (h6 >>> 24) & 0xff,\r\n (h6 >>> 16) & 0xff,\r\n (h6 >>> 8) & 0xff,\r\n h6 & 0xff,\r\n ];\r\n if (!this.is224) {\r\n arr.push((h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, h7 & 0xff);\r\n }\r\n return arr;\r\n};\r\n\r\nSha256.prototype.array = Sha256.prototype.digest;\r\n\r\nSha256.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\r\n var dataView = new DataView(buffer);\r\n dataView.setUint32(0, this.h0);\r\n dataView.setUint32(4, this.h1);\r\n dataView.setUint32(8, this.h2);\r\n dataView.setUint32(12, this.h3);\r\n dataView.setUint32(16, this.h4);\r\n dataView.setUint32(20, this.h5);\r\n dataView.setUint32(24, this.h6);\r\n if (!this.is224) {\r\n dataView.setUint32(28, this.h7);\r\n }\r\n return buffer;\r\n};\r\n\r\nfunction HmacSha256(key, is224, sharedMemory) {\r\n var i,\r\n type = typeof key;\r\n if (type === \"string\") {\r\n var bytes = [],\r\n length = key.length,\r\n index = 0,\r\n code;\r\n for (i = 0; i < length; ++i) {\r\n code = key.charCodeAt(i);\r\n if (code < 0x80) {\r\n bytes[index++] = code;\r\n } else if (code < 0x800) {\r\n bytes[index++] = 0xc0 | (code >>> 6);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n bytes[index++] = 0xe0 | (code >>> 12);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\r\n bytes[index++] = 0xf0 | (code >>> 18);\r\n bytes[index++] = 0x80 | ((code >>> 12) & 0x3f);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n }\r\n }\r\n key = bytes;\r\n } else {\r\n if (type === \"object\") {\r\n if (key === null) {\r\n throw new Error(ERROR);\r\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\r\n key = new Uint8Array(key);\r\n } else if (!Array.isArray(key)) {\r\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\r\n throw new Error(ERROR);\r\n }\r\n }\r\n } else {\r\n throw new Error(ERROR);\r\n }\r\n }\r\n\r\n if (key.length > 64) {\r\n key = new Sha256(is224, true).update(key).array();\r\n }\r\n\r\n var oKeyPad = [],\r\n iKeyPad = [];\r\n for (i = 0; i < 64; ++i) {\r\n var b = key[i] || 0;\r\n oKeyPad[i] = 0x5c ^ b;\r\n iKeyPad[i] = 0x36 ^ b;\r\n }\r\n\r\n Sha256.call(this, is224, sharedMemory);\r\n\r\n this.update(iKeyPad);\r\n this.oKeyPad = oKeyPad;\r\n this.inner = true;\r\n this.sharedMemory = sharedMemory;\r\n}\r\n\r\nHmacSha256.prototype = new Sha256();\r\n\r\nHmacSha256.prototype.finalize = function () {\r\n Sha256.prototype.finalize.call(this);\r\n if (this.inner) {\r\n this.inner = false;\r\n var innerHash = this.array();\r\n Sha256.call(this, this.is224, this.sharedMemory);\r\n this.update(this.oKeyPad);\r\n this.update(innerHash);\r\n Sha256.prototype.finalize.call(this);\r\n }\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport const sha256 = createMethod();\r\nexport const sha224 = createMethod(true);\r\nexport const sha256_hmac = createHmacMethod();\r\nexport const sha224_hmac = createHmacMethod(true);\r\n","/*\r\n * [js-sha512]{@link https://github.com/emn178/js-sha512}\r\n *\r\n * @version 0.9.0\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2014-2024\r\n * @license MIT\r\n */\r\n/* jslint bitwise: true */\r\n\r\nvar INPUT_ERROR = \"input is invalid type\";\r\nvar FINALIZE_ERROR = \"finalize already called\";\r\nvar WINDOW = typeof window === \"object\";\r\nvar root = WINDOW ? window : {};\r\nif (root.JS_SHA512_NO_WINDOW) {\r\n WINDOW = false;\r\n}\r\nvar WEB_WORKER = !WINDOW && typeof self === \"object\";\r\nvar NODE_JS = !root.JS_SHA512_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n} else if (WEB_WORKER) {\r\n root = self;\r\n}\r\nvar ARRAY_BUFFER = !root.JS_SHA512_NO_ARRAY_BUFFER && typeof ArrayBuffer !== \"undefined\";\r\nvar HEX_CHARS = \"0123456789abcdef\".split(\"\");\r\nvar EXTRA = [-2147483648, 8388608, 32768, 128];\r\nvar SHIFT = [24, 16, 8, 0];\r\nvar K = [\r\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b,\r\n 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242,\r\n 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe,\r\n 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\r\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc,\r\n 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f,\r\n 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967,\r\n 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\r\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1,\r\n 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218,\r\n 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08,\r\n 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\r\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814,\r\n 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915,\r\n 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f,\r\n 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\r\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be,\r\n 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817,\r\n];\r\n\r\nvar OUTPUT_TYPES = [\"hex\", \"array\", \"digest\", \"arrayBuffer\"];\r\n\r\nvar blocks = [];\r\n\r\nvar isArray = Array.isArray;\r\nif (root.JS_SHA512_NO_NODE_JS || !isArray) {\r\n isArray = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n}\r\n\r\nvar isView = ArrayBuffer.isView;\r\nif (ARRAY_BUFFER && (root.JS_SHA512_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {\r\n isView = function (obj) {\r\n return typeof obj === \"object\" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\r\n };\r\n}\r\n\r\n// [message: string, isString: bool]\r\nvar formatMessage = function (message) {\r\n var type = typeof message;\r\n if (type === \"string\") {\r\n return [message, true];\r\n }\r\n if (type !== \"object\" || message === null) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\r\n return [new Uint8Array(message), false];\r\n }\r\n if (!isArray(message) && !isView(message)) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n return [message, false];\r\n};\r\n\r\nvar createOutputMethod = function (outputType, bits) {\r\n return function (message) {\r\n return new Sha512(bits, true).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createMethod = function (bits) {\r\n var method = createOutputMethod(\"hex\", bits);\r\n method.create = function () {\r\n return new Sha512(bits);\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(type, bits);\r\n }\r\n return method;\r\n};\r\n\r\nvar createHmacOutputMethod = function (outputType, bits) {\r\n return function (key, message) {\r\n return new HmacSha512(key, bits, true).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createHmacMethod = function (bits) {\r\n var method = createHmacOutputMethod(\"hex\", bits);\r\n method.create = function (key) {\r\n return new HmacSha512(key, bits);\r\n };\r\n method.update = function (key, message) {\r\n return method.create(key).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createHmacOutputMethod(type, bits);\r\n }\r\n return method;\r\n};\r\n\r\nfunction Sha512(bits, sharedMemory) {\r\n if (sharedMemory) {\r\n blocks[0] =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n blocks[16] =\r\n blocks[17] =\r\n blocks[18] =\r\n blocks[19] =\r\n blocks[20] =\r\n blocks[21] =\r\n blocks[22] =\r\n blocks[23] =\r\n blocks[24] =\r\n blocks[25] =\r\n blocks[26] =\r\n blocks[27] =\r\n blocks[28] =\r\n blocks[29] =\r\n blocks[30] =\r\n blocks[31] =\r\n blocks[32] =\r\n 0;\r\n this.blocks = blocks;\r\n } else {\r\n this.blocks = [\r\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n ];\r\n }\r\n\r\n if (bits == 384) {\r\n this.h0h = 0xcbbb9d5d;\r\n this.h0l = 0xc1059ed8;\r\n this.h1h = 0x629a292a;\r\n this.h1l = 0x367cd507;\r\n this.h2h = 0x9159015a;\r\n this.h2l = 0x3070dd17;\r\n this.h3h = 0x152fecd8;\r\n this.h3l = 0xf70e5939;\r\n this.h4h = 0x67332667;\r\n this.h4l = 0xffc00b31;\r\n this.h5h = 0x8eb44a87;\r\n this.h5l = 0x68581511;\r\n this.h6h = 0xdb0c2e0d;\r\n this.h6l = 0x64f98fa7;\r\n this.h7h = 0x47b5481d;\r\n this.h7l = 0xbefa4fa4;\r\n } else if (bits == 256) {\r\n this.h0h = 0x22312194;\r\n this.h0l = 0xfc2bf72c;\r\n this.h1h = 0x9f555fa3;\r\n this.h1l = 0xc84c64c2;\r\n this.h2h = 0x2393b86b;\r\n this.h2l = 0x6f53b151;\r\n this.h3h = 0x96387719;\r\n this.h3l = 0x5940eabd;\r\n this.h4h = 0x96283ee2;\r\n this.h4l = 0xa88effe3;\r\n this.h5h = 0xbe5e1e25;\r\n this.h5l = 0x53863992;\r\n this.h6h = 0x2b0199fc;\r\n this.h6l = 0x2c85b8aa;\r\n this.h7h = 0x0eb72ddc;\r\n this.h7l = 0x81c52ca2;\r\n } else if (bits == 224) {\r\n this.h0h = 0x8c3d37c8;\r\n this.h0l = 0x19544da2;\r\n this.h1h = 0x73e19966;\r\n this.h1l = 0x89dcd4d6;\r\n this.h2h = 0x1dfab7ae;\r\n this.h2l = 0x32ff9c82;\r\n this.h3h = 0x679dd514;\r\n this.h3l = 0x582f9fcf;\r\n this.h4h = 0x0f6d2b69;\r\n this.h4l = 0x7bd44da8;\r\n this.h5h = 0x77e36f73;\r\n this.h5l = 0x04c48942;\r\n this.h6h = 0x3f9d85a8;\r\n this.h6l = 0x6a1d36c8;\r\n this.h7h = 0x1112e6ad;\r\n this.h7l = 0x91d692a1;\r\n } else {\r\n // 512\r\n this.h0h = 0x6a09e667;\r\n this.h0l = 0xf3bcc908;\r\n this.h1h = 0xbb67ae85;\r\n this.h1l = 0x84caa73b;\r\n this.h2h = 0x3c6ef372;\r\n this.h2l = 0xfe94f82b;\r\n this.h3h = 0xa54ff53a;\r\n this.h3l = 0x5f1d36f1;\r\n this.h4h = 0x510e527f;\r\n this.h4l = 0xade682d1;\r\n this.h5h = 0x9b05688c;\r\n this.h5l = 0x2b3e6c1f;\r\n this.h6h = 0x1f83d9ab;\r\n this.h6l = 0xfb41bd6b;\r\n this.h7h = 0x5be0cd19;\r\n this.h7l = 0x137e2179;\r\n }\r\n this.bits = bits;\r\n\r\n this.block = this.start = this.bytes = this.hBytes = 0;\r\n this.finalized = this.hashed = false;\r\n}\r\n\r\nSha512.prototype.update = function (message) {\r\n if (this.finalized) {\r\n throw new Error(FINALIZE_ERROR);\r\n }\r\n var result = formatMessage(message);\r\n message = result[0];\r\n var isString = result[1];\r\n var code,\r\n index = 0,\r\n i,\r\n length = message.length,\r\n blocks = this.blocks;\r\n\r\n while (index < length) {\r\n if (this.hashed) {\r\n this.hashed = false;\r\n blocks[0] = this.block;\r\n this.block =\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n blocks[16] =\r\n blocks[17] =\r\n blocks[18] =\r\n blocks[19] =\r\n blocks[20] =\r\n blocks[21] =\r\n blocks[22] =\r\n blocks[23] =\r\n blocks[24] =\r\n blocks[25] =\r\n blocks[26] =\r\n blocks[27] =\r\n blocks[28] =\r\n blocks[29] =\r\n blocks[30] =\r\n blocks[31] =\r\n blocks[32] =\r\n 0;\r\n }\r\n\r\n if (isString) {\r\n for (i = this.start; index < length && i < 128; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < 128; ++index) {\r\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n }\r\n\r\n this.lastByteIndex = i;\r\n this.bytes += i - this.start;\r\n if (i >= 128) {\r\n this.block = blocks[32];\r\n this.start = i - 128;\r\n this.hash();\r\n this.hashed = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n if (this.bytes > 4294967295) {\r\n this.hBytes += (this.bytes / 4294967296) << 0;\r\n this.bytes = this.bytes % 4294967296;\r\n }\r\n return this;\r\n};\r\n\r\nSha512.prototype.finalize = function () {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n var blocks = this.blocks,\r\n i = this.lastByteIndex;\r\n blocks[32] = this.block;\r\n blocks[i >>> 2] |= EXTRA[i & 3];\r\n this.block = blocks[32];\r\n if (i >= 112) {\r\n if (!this.hashed) {\r\n this.hash();\r\n }\r\n blocks[0] = this.block;\r\n blocks[1] =\r\n blocks[2] =\r\n blocks[3] =\r\n blocks[4] =\r\n blocks[5] =\r\n blocks[6] =\r\n blocks[7] =\r\n blocks[8] =\r\n blocks[9] =\r\n blocks[10] =\r\n blocks[11] =\r\n blocks[12] =\r\n blocks[13] =\r\n blocks[14] =\r\n blocks[15] =\r\n blocks[16] =\r\n blocks[17] =\r\n blocks[18] =\r\n blocks[19] =\r\n blocks[20] =\r\n blocks[21] =\r\n blocks[22] =\r\n blocks[23] =\r\n blocks[24] =\r\n blocks[25] =\r\n blocks[26] =\r\n blocks[27] =\r\n blocks[28] =\r\n blocks[29] =\r\n blocks[30] =\r\n blocks[31] =\r\n blocks[32] =\r\n 0;\r\n }\r\n blocks[30] = (this.hBytes << 3) | (this.bytes >>> 29);\r\n blocks[31] = this.bytes << 3;\r\n this.hash();\r\n};\r\n\r\nSha512.prototype.hash = function () {\r\n var h0h = this.h0h,\r\n h0l = this.h0l,\r\n h1h = this.h1h,\r\n h1l = this.h1l,\r\n h2h = this.h2h,\r\n h2l = this.h2l,\r\n h3h = this.h3h,\r\n h3l = this.h3l,\r\n h4h = this.h4h,\r\n h4l = this.h4l,\r\n h5h = this.h5h,\r\n h5l = this.h5l,\r\n h6h = this.h6h,\r\n h6l = this.h6l,\r\n h7h = this.h7h,\r\n h7l = this.h7l,\r\n blocks = this.blocks,\r\n j,\r\n s0h,\r\n s0l,\r\n s1h,\r\n s1l,\r\n c1,\r\n c2,\r\n c3,\r\n c4,\r\n abh,\r\n abl,\r\n dah,\r\n dal,\r\n cdh,\r\n cdl,\r\n bch,\r\n bcl,\r\n majh,\r\n majl,\r\n t1h,\r\n t1l,\r\n t2h,\r\n t2l,\r\n chh,\r\n chl;\r\n\r\n for (j = 32; j < 160; j += 2) {\r\n t1h = blocks[j - 30];\r\n t1l = blocks[j - 29];\r\n s0h = ((t1h >>> 1) | (t1l << 31)) ^ ((t1h >>> 8) | (t1l << 24)) ^ (t1h >>> 7);\r\n s0l = ((t1l >>> 1) | (t1h << 31)) ^ ((t1l >>> 8) | (t1h << 24)) ^ ((t1l >>> 7) | (t1h << 25));\r\n\r\n t1h = blocks[j - 4];\r\n t1l = blocks[j - 3];\r\n s1h = ((t1h >>> 19) | (t1l << 13)) ^ ((t1l >>> 29) | (t1h << 3)) ^ (t1h >>> 6);\r\n s1l = ((t1l >>> 19) | (t1h << 13)) ^ ((t1h >>> 29) | (t1l << 3)) ^ ((t1l >>> 6) | (t1h << 26));\r\n\r\n t1h = blocks[j - 32];\r\n t1l = blocks[j - 31];\r\n t2h = blocks[j - 14];\r\n t2l = blocks[j - 13];\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff) + (s0l & 0xffff) + (s1l & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (s0l >>> 16) + (s1l >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (s0h & 0xffff) + (s1h & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (s0h >>> 16) + (s1h >>> 16) + (c3 >>> 16);\r\n\r\n blocks[j] = (c4 << 16) | (c3 & 0xffff);\r\n blocks[j + 1] = (c2 << 16) | (c1 & 0xffff);\r\n }\r\n\r\n var ah = h0h,\r\n al = h0l,\r\n bh = h1h,\r\n bl = h1l,\r\n ch = h2h,\r\n cl = h2l,\r\n dh = h3h,\r\n dl = h3l,\r\n eh = h4h,\r\n el = h4l,\r\n fh = h5h,\r\n fl = h5l,\r\n gh = h6h,\r\n gl = h6l,\r\n hh = h7h,\r\n hl = h7l;\r\n bch = bh & ch;\r\n bcl = bl & cl;\r\n for (j = 0; j < 160; j += 8) {\r\n s0h = ((ah >>> 28) | (al << 4)) ^ ((al >>> 2) | (ah << 30)) ^ ((al >>> 7) | (ah << 25));\r\n s0l = ((al >>> 28) | (ah << 4)) ^ ((ah >>> 2) | (al << 30)) ^ ((ah >>> 7) | (al << 25));\r\n\r\n s1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((el >>> 9) | (eh << 23));\r\n s1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((eh >>> 9) | (el << 23));\r\n\r\n abh = ah & bh;\r\n abl = al & bl;\r\n majh = abh ^ (ah & ch) ^ bch;\r\n majl = abl ^ (al & cl) ^ bcl;\r\n\r\n chh = (eh & fh) ^ (~eh & gh);\r\n chl = (el & fl) ^ (~el & gl);\r\n\r\n t1h = blocks[j];\r\n t1l = blocks[j + 1];\r\n t2h = K[j];\r\n t2l = K[j + 1];\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff) + (chl & 0xffff) + (s1l & 0xffff) + (hl & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (chl >>> 16) + (s1l >>> 16) + (hl >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (chh & 0xffff) + (s1h & 0xffff) + (hh & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (chh >>> 16) + (s1h >>> 16) + (hh >>> 16) + (c3 >>> 16);\r\n\r\n t1h = (c4 << 16) | (c3 & 0xffff);\r\n t1l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (majl & 0xffff) + (s0l & 0xffff);\r\n c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16);\r\n c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16);\r\n c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16);\r\n\r\n t2h = (c4 << 16) | (c3 & 0xffff);\r\n t2l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (dl & 0xffff) + (t1l & 0xffff);\r\n c2 = (dl >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (dh & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (dh >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n hh = (c4 << 16) | (c3 & 0xffff);\r\n hl = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n dh = (c4 << 16) | (c3 & 0xffff);\r\n dl = (c2 << 16) | (c1 & 0xffff);\r\n\r\n s0h = ((dh >>> 28) | (dl << 4)) ^ ((dl >>> 2) | (dh << 30)) ^ ((dl >>> 7) | (dh << 25));\r\n s0l = ((dl >>> 28) | (dh << 4)) ^ ((dh >>> 2) | (dl << 30)) ^ ((dh >>> 7) | (dl << 25));\r\n\r\n s1h = ((hh >>> 14) | (hl << 18)) ^ ((hh >>> 18) | (hl << 14)) ^ ((hl >>> 9) | (hh << 23));\r\n s1l = ((hl >>> 14) | (hh << 18)) ^ ((hl >>> 18) | (hh << 14)) ^ ((hh >>> 9) | (hl << 23));\r\n\r\n dah = dh & ah;\r\n dal = dl & al;\r\n majh = dah ^ (dh & bh) ^ abh;\r\n majl = dal ^ (dl & bl) ^ abl;\r\n\r\n chh = (hh & eh) ^ (~hh & fh);\r\n chl = (hl & el) ^ (~hl & fl);\r\n\r\n t1h = blocks[j + 2];\r\n t1l = blocks[j + 3];\r\n t2h = K[j + 2];\r\n t2l = K[j + 3];\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff) + (chl & 0xffff) + (s1l & 0xffff) + (gl & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (chl >>> 16) + (s1l >>> 16) + (gl >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (chh & 0xffff) + (s1h & 0xffff) + (gh & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (chh >>> 16) + (s1h >>> 16) + (gh >>> 16) + (c3 >>> 16);\r\n\r\n t1h = (c4 << 16) | (c3 & 0xffff);\r\n t1l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (majl & 0xffff) + (s0l & 0xffff);\r\n c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16);\r\n c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16);\r\n c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16);\r\n\r\n t2h = (c4 << 16) | (c3 & 0xffff);\r\n t2l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (cl & 0xffff) + (t1l & 0xffff);\r\n c2 = (cl >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (ch & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (ch >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n gh = (c4 << 16) | (c3 & 0xffff);\r\n gl = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n ch = (c4 << 16) | (c3 & 0xffff);\r\n cl = (c2 << 16) | (c1 & 0xffff);\r\n\r\n s0h = ((ch >>> 28) | (cl << 4)) ^ ((cl >>> 2) | (ch << 30)) ^ ((cl >>> 7) | (ch << 25));\r\n s0l = ((cl >>> 28) | (ch << 4)) ^ ((ch >>> 2) | (cl << 30)) ^ ((ch >>> 7) | (cl << 25));\r\n\r\n s1h = ((gh >>> 14) | (gl << 18)) ^ ((gh >>> 18) | (gl << 14)) ^ ((gl >>> 9) | (gh << 23));\r\n s1l = ((gl >>> 14) | (gh << 18)) ^ ((gl >>> 18) | (gh << 14)) ^ ((gh >>> 9) | (gl << 23));\r\n\r\n cdh = ch & dh;\r\n cdl = cl & dl;\r\n majh = cdh ^ (ch & ah) ^ dah;\r\n majl = cdl ^ (cl & al) ^ dal;\r\n\r\n chh = (gh & hh) ^ (~gh & eh);\r\n chl = (gl & hl) ^ (~gl & el);\r\n\r\n t1h = blocks[j + 4];\r\n t1l = blocks[j + 5];\r\n t2h = K[j + 4];\r\n t2l = K[j + 5];\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff) + (chl & 0xffff) + (s1l & 0xffff) + (fl & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (chl >>> 16) + (s1l >>> 16) + (fl >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (chh & 0xffff) + (s1h & 0xffff) + (fh & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (chh >>> 16) + (s1h >>> 16) + (fh >>> 16) + (c3 >>> 16);\r\n\r\n t1h = (c4 << 16) | (c3 & 0xffff);\r\n t1l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (majl & 0xffff) + (s0l & 0xffff);\r\n c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16);\r\n c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16);\r\n c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16);\r\n\r\n t2h = (c4 << 16) | (c3 & 0xffff);\r\n t2l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (bl & 0xffff) + (t1l & 0xffff);\r\n c2 = (bl >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (bh & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (bh >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n fh = (c4 << 16) | (c3 & 0xffff);\r\n fl = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n bh = (c4 << 16) | (c3 & 0xffff);\r\n bl = (c2 << 16) | (c1 & 0xffff);\r\n\r\n s0h = ((bh >>> 28) | (bl << 4)) ^ ((bl >>> 2) | (bh << 30)) ^ ((bl >>> 7) | (bh << 25));\r\n s0l = ((bl >>> 28) | (bh << 4)) ^ ((bh >>> 2) | (bl << 30)) ^ ((bh >>> 7) | (bl << 25));\r\n\r\n s1h = ((fh >>> 14) | (fl << 18)) ^ ((fh >>> 18) | (fl << 14)) ^ ((fl >>> 9) | (fh << 23));\r\n s1l = ((fl >>> 14) | (fh << 18)) ^ ((fl >>> 18) | (fh << 14)) ^ ((fh >>> 9) | (fl << 23));\r\n\r\n bch = bh & ch;\r\n bcl = bl & cl;\r\n majh = bch ^ (bh & dh) ^ cdh;\r\n majl = bcl ^ (bl & dl) ^ cdl;\r\n\r\n chh = (fh & gh) ^ (~fh & hh);\r\n chl = (fl & gl) ^ (~fl & hl);\r\n\r\n t1h = blocks[j + 6];\r\n t1l = blocks[j + 7];\r\n t2h = K[j + 6];\r\n t2l = K[j + 7];\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff) + (chl & 0xffff) + (s1l & 0xffff) + (el & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (chl >>> 16) + (s1l >>> 16) + (el >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (chh & 0xffff) + (s1h & 0xffff) + (eh & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (chh >>> 16) + (s1h >>> 16) + (eh >>> 16) + (c3 >>> 16);\r\n\r\n t1h = (c4 << 16) | (c3 & 0xffff);\r\n t1l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (majl & 0xffff) + (s0l & 0xffff);\r\n c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16);\r\n c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16);\r\n c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16);\r\n\r\n t2h = (c4 << 16) | (c3 & 0xffff);\r\n t2l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (al & 0xffff) + (t1l & 0xffff);\r\n c2 = (al >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (ah & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (ah >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n eh = (c4 << 16) | (c3 & 0xffff);\r\n el = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (t2l & 0xffff) + (t1l & 0xffff);\r\n c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16);\r\n c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16);\r\n c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16);\r\n\r\n ah = (c4 << 16) | (c3 & 0xffff);\r\n al = (c2 << 16) | (c1 & 0xffff);\r\n }\r\n\r\n c1 = (h0l & 0xffff) + (al & 0xffff);\r\n c2 = (h0l >>> 16) + (al >>> 16) + (c1 >>> 16);\r\n c3 = (h0h & 0xffff) + (ah & 0xffff) + (c2 >>> 16);\r\n c4 = (h0h >>> 16) + (ah >>> 16) + (c3 >>> 16);\r\n\r\n this.h0h = (c4 << 16) | (c3 & 0xffff);\r\n this.h0l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h1l & 0xffff) + (bl & 0xffff);\r\n c2 = (h1l >>> 16) + (bl >>> 16) + (c1 >>> 16);\r\n c3 = (h1h & 0xffff) + (bh & 0xffff) + (c2 >>> 16);\r\n c4 = (h1h >>> 16) + (bh >>> 16) + (c3 >>> 16);\r\n\r\n this.h1h = (c4 << 16) | (c3 & 0xffff);\r\n this.h1l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h2l & 0xffff) + (cl & 0xffff);\r\n c2 = (h2l >>> 16) + (cl >>> 16) + (c1 >>> 16);\r\n c3 = (h2h & 0xffff) + (ch & 0xffff) + (c2 >>> 16);\r\n c4 = (h2h >>> 16) + (ch >>> 16) + (c3 >>> 16);\r\n\r\n this.h2h = (c4 << 16) | (c3 & 0xffff);\r\n this.h2l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h3l & 0xffff) + (dl & 0xffff);\r\n c2 = (h3l >>> 16) + (dl >>> 16) + (c1 >>> 16);\r\n c3 = (h3h & 0xffff) + (dh & 0xffff) + (c2 >>> 16);\r\n c4 = (h3h >>> 16) + (dh >>> 16) + (c3 >>> 16);\r\n\r\n this.h3h = (c4 << 16) | (c3 & 0xffff);\r\n this.h3l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h4l & 0xffff) + (el & 0xffff);\r\n c2 = (h4l >>> 16) + (el >>> 16) + (c1 >>> 16);\r\n c3 = (h4h & 0xffff) + (eh & 0xffff) + (c2 >>> 16);\r\n c4 = (h4h >>> 16) + (eh >>> 16) + (c3 >>> 16);\r\n\r\n this.h4h = (c4 << 16) | (c3 & 0xffff);\r\n this.h4l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h5l & 0xffff) + (fl & 0xffff);\r\n c2 = (h5l >>> 16) + (fl >>> 16) + (c1 >>> 16);\r\n c3 = (h5h & 0xffff) + (fh & 0xffff) + (c2 >>> 16);\r\n c4 = (h5h >>> 16) + (fh >>> 16) + (c3 >>> 16);\r\n\r\n this.h5h = (c4 << 16) | (c3 & 0xffff);\r\n this.h5l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h6l & 0xffff) + (gl & 0xffff);\r\n c2 = (h6l >>> 16) + (gl >>> 16) + (c1 >>> 16);\r\n c3 = (h6h & 0xffff) + (gh & 0xffff) + (c2 >>> 16);\r\n c4 = (h6h >>> 16) + (gh >>> 16) + (c3 >>> 16);\r\n\r\n this.h6h = (c4 << 16) | (c3 & 0xffff);\r\n this.h6l = (c2 << 16) | (c1 & 0xffff);\r\n\r\n c1 = (h7l & 0xffff) + (hl & 0xffff);\r\n c2 = (h7l >>> 16) + (hl >>> 16) + (c1 >>> 16);\r\n c3 = (h7h & 0xffff) + (hh & 0xffff) + (c2 >>> 16);\r\n c4 = (h7h >>> 16) + (hh >>> 16) + (c3 >>> 16);\r\n\r\n this.h7h = (c4 << 16) | (c3 & 0xffff);\r\n this.h7l = (c2 << 16) | (c1 & 0xffff);\r\n};\r\n\r\nSha512.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var h0h = this.h0h,\r\n h0l = this.h0l,\r\n h1h = this.h1h,\r\n h1l = this.h1l,\r\n h2h = this.h2h,\r\n h2l = this.h2l,\r\n h3h = this.h3h,\r\n h3l = this.h3l,\r\n h4h = this.h4h,\r\n h4l = this.h4l,\r\n h5h = this.h5h,\r\n h5l = this.h5l,\r\n h6h = this.h6h,\r\n h6l = this.h6l,\r\n h7h = this.h7h,\r\n h7l = this.h7l,\r\n bits = this.bits;\r\n\r\n var hex =\r\n HEX_CHARS[(h0h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h0h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h0h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h0h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h0h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h0h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h0h >>> 4) & 0x0f] +\r\n HEX_CHARS[h0h & 0x0f] +\r\n HEX_CHARS[(h0l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h0l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h0l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h0l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h0l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h0l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h0l >>> 4) & 0x0f] +\r\n HEX_CHARS[h0l & 0x0f] +\r\n HEX_CHARS[(h1h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h1h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h1h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h1h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h1h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h1h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h1h >>> 4) & 0x0f] +\r\n HEX_CHARS[h1h & 0x0f] +\r\n HEX_CHARS[(h1l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h1l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h1l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h1l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h1l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h1l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h1l >>> 4) & 0x0f] +\r\n HEX_CHARS[h1l & 0x0f] +\r\n HEX_CHARS[(h2h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h2h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h2h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h2h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h2h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h2h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h2h >>> 4) & 0x0f] +\r\n HEX_CHARS[h2h & 0x0f] +\r\n HEX_CHARS[(h2l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h2l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h2l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h2l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h2l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h2l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h2l >>> 4) & 0x0f] +\r\n HEX_CHARS[h2l & 0x0f] +\r\n HEX_CHARS[(h3h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h3h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h3h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h3h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h3h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h3h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h3h >>> 4) & 0x0f] +\r\n HEX_CHARS[h3h & 0x0f];\r\n if (bits >= 256) {\r\n hex +=\r\n HEX_CHARS[(h3l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h3l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h3l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h3l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h3l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h3l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h3l >>> 4) & 0x0f] +\r\n HEX_CHARS[h3l & 0x0f];\r\n }\r\n if (bits >= 384) {\r\n hex +=\r\n HEX_CHARS[(h4h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h4h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h4h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h4h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h4h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h4h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h4h >>> 4) & 0x0f] +\r\n HEX_CHARS[h4h & 0x0f] +\r\n HEX_CHARS[(h4l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h4l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h4l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h4l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h4l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h4l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h4l >>> 4) & 0x0f] +\r\n HEX_CHARS[h4l & 0x0f] +\r\n HEX_CHARS[(h5h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h5h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h5h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h5h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h5h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h5h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h5h >>> 4) & 0x0f] +\r\n HEX_CHARS[h5h & 0x0f] +\r\n HEX_CHARS[(h5l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h5l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h5l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h5l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h5l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h5l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h5l >>> 4) & 0x0f] +\r\n HEX_CHARS[h5l & 0x0f];\r\n }\r\n if (bits == 512) {\r\n hex +=\r\n HEX_CHARS[(h6h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h6h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h6h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h6h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h6h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h6h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h6h >>> 4) & 0x0f] +\r\n HEX_CHARS[h6h & 0x0f] +\r\n HEX_CHARS[(h6l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h6l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h6l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h6l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h6l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h6l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h6l >>> 4) & 0x0f] +\r\n HEX_CHARS[h6l & 0x0f] +\r\n HEX_CHARS[(h7h >>> 28) & 0x0f] +\r\n HEX_CHARS[(h7h >>> 24) & 0x0f] +\r\n HEX_CHARS[(h7h >>> 20) & 0x0f] +\r\n HEX_CHARS[(h7h >>> 16) & 0x0f] +\r\n HEX_CHARS[(h7h >>> 12) & 0x0f] +\r\n HEX_CHARS[(h7h >>> 8) & 0x0f] +\r\n HEX_CHARS[(h7h >>> 4) & 0x0f] +\r\n HEX_CHARS[h7h & 0x0f] +\r\n HEX_CHARS[(h7l >>> 28) & 0x0f] +\r\n HEX_CHARS[(h7l >>> 24) & 0x0f] +\r\n HEX_CHARS[(h7l >>> 20) & 0x0f] +\r\n HEX_CHARS[(h7l >>> 16) & 0x0f] +\r\n HEX_CHARS[(h7l >>> 12) & 0x0f] +\r\n HEX_CHARS[(h7l >>> 8) & 0x0f] +\r\n HEX_CHARS[(h7l >>> 4) & 0x0f] +\r\n HEX_CHARS[h7l & 0x0f];\r\n }\r\n return hex;\r\n};\r\n\r\nSha512.prototype.toString = Sha512.prototype.hex;\r\n\r\nSha512.prototype.digest = function () {\r\n this.finalize();\r\n\r\n var h0h = this.h0h,\r\n h0l = this.h0l,\r\n h1h = this.h1h,\r\n h1l = this.h1l,\r\n h2h = this.h2h,\r\n h2l = this.h2l,\r\n h3h = this.h3h,\r\n h3l = this.h3l,\r\n h4h = this.h4h,\r\n h4l = this.h4l,\r\n h5h = this.h5h,\r\n h5l = this.h5l,\r\n h6h = this.h6h,\r\n h6l = this.h6l,\r\n h7h = this.h7h,\r\n h7l = this.h7l,\r\n bits = this.bits;\r\n\r\n var arr = [\r\n (h0h >>> 24) & 0xff,\r\n (h0h >>> 16) & 0xff,\r\n (h0h >>> 8) & 0xff,\r\n h0h & 0xff,\r\n (h0l >>> 24) & 0xff,\r\n (h0l >>> 16) & 0xff,\r\n (h0l >>> 8) & 0xff,\r\n h0l & 0xff,\r\n (h1h >>> 24) & 0xff,\r\n (h1h >>> 16) & 0xff,\r\n (h1h >>> 8) & 0xff,\r\n h1h & 0xff,\r\n (h1l >>> 24) & 0xff,\r\n (h1l >>> 16) & 0xff,\r\n (h1l >>> 8) & 0xff,\r\n h1l & 0xff,\r\n (h2h >>> 24) & 0xff,\r\n (h2h >>> 16) & 0xff,\r\n (h2h >>> 8) & 0xff,\r\n h2h & 0xff,\r\n (h2l >>> 24) & 0xff,\r\n (h2l >>> 16) & 0xff,\r\n (h2l >>> 8) & 0xff,\r\n h2l & 0xff,\r\n (h3h >>> 24) & 0xff,\r\n (h3h >>> 16) & 0xff,\r\n (h3h >>> 8) & 0xff,\r\n h3h & 0xff,\r\n ];\r\n\r\n if (bits >= 256) {\r\n arr.push((h3l >>> 24) & 0xff, (h3l >>> 16) & 0xff, (h3l >>> 8) & 0xff, h3l & 0xff);\r\n }\r\n if (bits >= 384) {\r\n arr.push(\r\n (h4h >>> 24) & 0xff,\r\n (h4h >>> 16) & 0xff,\r\n (h4h >>> 8) & 0xff,\r\n h4h & 0xff,\r\n (h4l >>> 24) & 0xff,\r\n (h4l >>> 16) & 0xff,\r\n (h4l >>> 8) & 0xff,\r\n h4l & 0xff,\r\n (h5h >>> 24) & 0xff,\r\n (h5h >>> 16) & 0xff,\r\n (h5h >>> 8) & 0xff,\r\n h5h & 0xff,\r\n (h5l >>> 24) & 0xff,\r\n (h5l >>> 16) & 0xff,\r\n (h5l >>> 8) & 0xff,\r\n h5l & 0xff,\r\n );\r\n }\r\n if (bits == 512) {\r\n arr.push(\r\n (h6h >>> 24) & 0xff,\r\n (h6h >>> 16) & 0xff,\r\n (h6h >>> 8) & 0xff,\r\n h6h & 0xff,\r\n (h6l >>> 24) & 0xff,\r\n (h6l >>> 16) & 0xff,\r\n (h6l >>> 8) & 0xff,\r\n h6l & 0xff,\r\n (h7h >>> 24) & 0xff,\r\n (h7h >>> 16) & 0xff,\r\n (h7h >>> 8) & 0xff,\r\n h7h & 0xff,\r\n (h7l >>> 24) & 0xff,\r\n (h7l >>> 16) & 0xff,\r\n (h7l >>> 8) & 0xff,\r\n h7l & 0xff,\r\n );\r\n }\r\n return arr;\r\n};\r\n\r\nSha512.prototype.array = Sha512.prototype.digest;\r\n\r\nSha512.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var bits = this.bits;\r\n var buffer = new ArrayBuffer(bits / 8);\r\n var dataView = new DataView(buffer);\r\n dataView.setUint32(0, this.h0h);\r\n dataView.setUint32(4, this.h0l);\r\n dataView.setUint32(8, this.h1h);\r\n dataView.setUint32(12, this.h1l);\r\n dataView.setUint32(16, this.h2h);\r\n dataView.setUint32(20, this.h2l);\r\n dataView.setUint32(24, this.h3h);\r\n\r\n if (bits >= 256) {\r\n dataView.setUint32(28, this.h3l);\r\n }\r\n if (bits >= 384) {\r\n dataView.setUint32(32, this.h4h);\r\n dataView.setUint32(36, this.h4l);\r\n dataView.setUint32(40, this.h5h);\r\n dataView.setUint32(44, this.h5l);\r\n }\r\n if (bits == 512) {\r\n dataView.setUint32(48, this.h6h);\r\n dataView.setUint32(52, this.h6l);\r\n dataView.setUint32(56, this.h7h);\r\n dataView.setUint32(60, this.h7l);\r\n }\r\n return buffer;\r\n};\r\n\r\nSha512.prototype.clone = function () {\r\n var hash = new Sha512(this.bits, false);\r\n this.copyTo(hash);\r\n return hash;\r\n};\r\n\r\nSha512.prototype.copyTo = function (hash) {\r\n var i = 0,\r\n attrs = [\r\n \"h0h\",\r\n \"h0l\",\r\n \"h1h\",\r\n \"h1l\",\r\n \"h2h\",\r\n \"h2l\",\r\n \"h3h\",\r\n \"h3l\",\r\n \"h4h\",\r\n \"h4l\",\r\n \"h5h\",\r\n \"h5l\",\r\n \"h6h\",\r\n \"h6l\",\r\n \"h7h\",\r\n \"h7l\",\r\n \"start\",\r\n \"bytes\",\r\n \"hBytes\",\r\n \"finalized\",\r\n \"hashed\",\r\n \"lastByteIndex\",\r\n ];\r\n for (i = 0; i < attrs.length; ++i) {\r\n hash[attrs[i]] = this[attrs[i]];\r\n }\r\n for (i = 0; i < this.blocks.length; ++i) {\r\n hash.blocks[i] = this.blocks[i];\r\n }\r\n};\r\n\r\nfunction HmacSha512(key, bits, sharedMemory) {\r\n var i,\r\n result = formatMessage(key);\r\n key = result[0];\r\n if (result[1]) {\r\n var bytes = [],\r\n length = key.length,\r\n index = 0,\r\n code;\r\n for (var i = 0; i < length; ++i) {\r\n code = key.charCodeAt(i);\r\n if (code < 0x80) {\r\n bytes[index++] = code;\r\n } else if (code < 0x800) {\r\n bytes[index++] = 0xc0 | (code >>> 6);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n bytes[index++] = 0xe0 | (code >>> 12);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\r\n bytes[index++] = 0xf0 | (code >>> 18);\r\n bytes[index++] = 0x80 | ((code >>> 12) & 0x3f);\r\n bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);\r\n bytes[index++] = 0x80 | (code & 0x3f);\r\n }\r\n }\r\n key = bytes;\r\n }\r\n\r\n if (key.length > 128) {\r\n key = new Sha512(bits, true).update(key).array();\r\n }\r\n\r\n var oKeyPad = [],\r\n iKeyPad = [];\r\n for (var i = 0; i < 128; ++i) {\r\n var b = key[i] || 0;\r\n oKeyPad[i] = 0x5c ^ b;\r\n iKeyPad[i] = 0x36 ^ b;\r\n }\r\n\r\n Sha512.call(this, bits, sharedMemory);\r\n\r\n this.update(iKeyPad);\r\n this.oKeyPad = oKeyPad;\r\n this.inner = true;\r\n this.sharedMemory = sharedMemory;\r\n}\r\n\r\nHmacSha512.prototype = new Sha512();\r\n\r\nHmacSha512.prototype.finalize = function () {\r\n Sha512.prototype.finalize.call(this);\r\n if (this.inner) {\r\n this.inner = false;\r\n var innerHash = this.array();\r\n Sha512.call(this, this.bits, this.sharedMemory);\r\n this.update(this.oKeyPad);\r\n this.update(innerHash);\r\n Sha512.prototype.finalize.call(this);\r\n }\r\n};\r\n\r\nHmacSha512.prototype.clone = function () {\r\n var hash = new HmacSha512([], this.bits, false);\r\n this.copyTo(hash);\r\n hash.inner = this.inner;\r\n for (var i = 0; i < this.oKeyPad.length; ++i) {\r\n hash.oKeyPad[i] = this.oKeyPad[i];\r\n }\r\n return hash;\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport const sha512 = createMethod(512);\r\nexport const sha384 = createMethod(384);\r\nexport const sha512_256 = createMethod(256);\r\nexport const sha512_224 = createMethod(224);\r\nexport const sha512_hmac = createHmacMethod(512);\r\nexport const sha384_hmac = createHmacMethod(384);\r\nexport const sha512_256_hmac = createHmacMethod(256);\r\nexport const sha512_224_hmac = createHmacMethod(224);\r\n","/**\r\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\r\n *\r\n * @version 0.9.3\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2015-2023\r\n * @license MIT\r\n */\r\n/* jslint bitwise: true */\r\n\r\nvar INPUT_ERROR = \"input is invalid type\";\r\nvar FINALIZE_ERROR = \"finalize already called\";\r\nvar WINDOW = typeof window === \"object\";\r\nvar root = WINDOW ? window : {};\r\nif (root.JS_SHA3_NO_WINDOW) {\r\n WINDOW = false;\r\n}\r\nvar WEB_WORKER = !WINDOW && typeof self === \"object\";\r\nvar NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === \"object\" && process.versions && process.versions.node;\r\nif (NODE_JS) {\r\n root = global;\r\n} else if (WEB_WORKER) {\r\n root = self;\r\n}\r\nvar ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== \"undefined\";\r\nvar HEX_CHARS = \"0123456789abcdef\".split(\"\");\r\nvar SHAKE_PADDING = [31, 7936, 2031616, 520093696];\r\nvar CSHAKE_PADDING = [4, 1024, 262144, 67108864];\r\nvar KECCAK_PADDING = [1, 256, 65536, 16777216];\r\nvar PADDING = [6, 1536, 393216, 100663296];\r\nvar SHIFT = [0, 8, 16, 24];\r\nvar RC = [\r\n 1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777,\r\n 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\r\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896,\r\n 2147483648, 2147483649, 0, 2147516424, 2147483648,\r\n];\r\nvar BITS = [224, 256, 384, 512];\r\nvar SHAKE_BITS = [128, 256];\r\nvar OUTPUT_TYPES = [\"hex\", \"buffer\", \"arrayBuffer\", \"array\", \"digest\"];\r\nvar CSHAKE_BYTEPAD = {\r\n 128: 168,\r\n 256: 136,\r\n};\r\n\r\nvar isArray =\r\n root.JS_SHA3_NO_NODE_JS || !Array.isArray\r\n ? function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n }\r\n : Array.isArray;\r\n\r\nvar isView =\r\n ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)\r\n ? function (obj) {\r\n return typeof obj === \"object\" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\r\n }\r\n : ArrayBuffer.isView;\r\n\r\n// [message: string, isString: bool]\r\nvar formatMessage = function (message) {\r\n var type = typeof message;\r\n if (type === \"string\") {\r\n return [message, true];\r\n }\r\n if (type !== \"object\" || message === null) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\r\n return [new Uint8Array(message), false];\r\n }\r\n if (!isArray(message) && !isView(message)) {\r\n throw new Error(INPUT_ERROR);\r\n }\r\n return [message, false];\r\n};\r\n\r\nvar empty = function (message) {\r\n return formatMessage(message)[0].length === 0;\r\n};\r\n\r\nvar cloneArray = function (array) {\r\n var newArray = [];\r\n for (var i = 0; i < array.length; ++i) {\r\n newArray[i] = array[i];\r\n }\r\n return newArray;\r\n};\r\n\r\nvar createOutputMethod = function (bits, padding, outputType) {\r\n return function (message) {\r\n return new Keccak(bits, padding, bits).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createShakeOutputMethod = function (bits, padding, outputType) {\r\n return function (message, outputBits) {\r\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\r\n };\r\n};\r\n\r\nvar createCshakeOutputMethod = function (bits, padding, outputType) {\r\n return function (message, outputBits, n, s) {\r\n return methods[\"cshake\" + bits].update(message, outputBits, n, s)[outputType]();\r\n };\r\n};\r\n\r\nvar createKmacOutputMethod = function (bits, padding, outputType) {\r\n return function (key, message, outputBits, s) {\r\n return methods[\"kmac\" + bits].update(key, message, outputBits, s)[outputType]();\r\n };\r\n};\r\n\r\nvar createOutputMethods = function (method, createMethod, bits, padding) {\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createMethod(bits, padding, type);\r\n }\r\n return method;\r\n};\r\n\r\nvar createMethod = function (bits, padding) {\r\n var method = createOutputMethod(bits, padding, \"hex\");\r\n method.create = function () {\r\n return new Keccak(bits, padding, bits);\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n return createOutputMethods(method, createOutputMethod, bits, padding);\r\n};\r\n\r\nvar createShakeMethod = function (bits, padding) {\r\n var method = createShakeOutputMethod(bits, padding, \"hex\");\r\n method.create = function (outputBits) {\r\n return new Keccak(bits, padding, outputBits);\r\n };\r\n method.update = function (message, outputBits) {\r\n return method.create(outputBits).update(message);\r\n };\r\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\r\n};\r\n\r\nvar createCshakeMethod = function (bits, padding) {\r\n var w = CSHAKE_BYTEPAD[bits];\r\n var method = createCshakeOutputMethod(bits, padding, \"hex\");\r\n method.create = function (outputBits, n, s) {\r\n if (empty(n) && empty(s)) {\r\n return methods[\"shake\" + bits].create(outputBits);\r\n } else {\r\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\r\n }\r\n };\r\n method.update = function (message, outputBits, n, s) {\r\n return method.create(outputBits, n, s).update(message);\r\n };\r\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\r\n};\r\n\r\nvar createKmacMethod = function (bits, padding) {\r\n var w = CSHAKE_BYTEPAD[bits];\r\n var method = createKmacOutputMethod(bits, padding, \"hex\");\r\n method.create = function (key, outputBits, s) {\r\n return new Kmac(bits, padding, outputBits).bytepad([\"KMAC\", s], w).bytepad([key], w);\r\n };\r\n method.update = function (key, message, outputBits, s) {\r\n return method.create(key, outputBits, s).update(message);\r\n };\r\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\r\n};\r\n\r\nvar algorithms = [\r\n { name: \"keccak\", padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\r\n { name: \"sha3\", padding: PADDING, bits: BITS, createMethod: createMethod },\r\n { name: \"shake\", padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\r\n { name: \"cshake\", padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\r\n { name: \"kmac\", padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod },\r\n];\r\n\r\nvar methods = {},\r\n methodNames = [];\r\n\r\nfor (var i = 0; i < algorithms.length; ++i) {\r\n var algorithm = algorithms[i];\r\n var bits = algorithm.bits;\r\n for (var j = 0; j < bits.length; ++j) {\r\n var methodName = algorithm.name + \"_\" + bits[j];\r\n methodNames.push(methodName);\r\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\r\n if (algorithm.name !== \"sha3\") {\r\n var newMethodName = algorithm.name + bits[j];\r\n methodNames.push(newMethodName);\r\n methods[newMethodName] = methods[methodName];\r\n }\r\n }\r\n}\r\n\r\nfunction Keccak(bits, padding, outputBits) {\r\n this.blocks = [];\r\n this.s = [];\r\n this.padding = padding;\r\n this.outputBits = outputBits;\r\n this.reset = true;\r\n this.finalized = false;\r\n this.block = 0;\r\n this.start = 0;\r\n this.blockCount = (1600 - (bits << 1)) >> 5;\r\n this.byteCount = this.blockCount << 2;\r\n this.outputBlocks = outputBits >> 5;\r\n this.extraBytes = (outputBits & 31) >> 3;\r\n\r\n for (var i = 0; i < 50; ++i) {\r\n this.s[i] = 0;\r\n }\r\n}\r\n\r\nKeccak.prototype.update = function (message) {\r\n if (this.finalized) {\r\n throw new Error(FINALIZE_ERROR);\r\n }\r\n var result = formatMessage(message);\r\n message = result[0];\r\n var isString = result[1];\r\n var blocks = this.blocks,\r\n byteCount = this.byteCount,\r\n length = message.length,\r\n blockCount = this.blockCount,\r\n index = 0,\r\n s = this.s,\r\n i,\r\n code;\r\n\r\n while (index < length) {\r\n if (this.reset) {\r\n this.reset = false;\r\n blocks[0] = this.block;\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n if (isString) {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n }\r\n this.lastByteIndex = i;\r\n if (i >= byteCount) {\r\n this.start = i - byteCount;\r\n this.block = blocks[blockCount];\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n this.reset = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nKeccak.prototype.encode = function (x, right) {\r\n var o = x & 255,\r\n n = 1;\r\n var bytes = [o];\r\n x = x >> 8;\r\n o = x & 255;\r\n while (o > 0) {\r\n bytes.unshift(o);\r\n x = x >> 8;\r\n o = x & 255;\r\n ++n;\r\n }\r\n if (right) {\r\n bytes.push(n);\r\n } else {\r\n bytes.unshift(n);\r\n }\r\n this.update(bytes);\r\n return bytes.length;\r\n};\r\n\r\nKeccak.prototype.encodeString = function (str) {\r\n var result = formatMessage(str);\r\n str = result[0];\r\n var isString = result[1];\r\n var bytes = 0,\r\n length = str.length;\r\n if (isString) {\r\n for (var i = 0; i < str.length; ++i) {\r\n var code = str.charCodeAt(i);\r\n if (code < 0x80) {\r\n bytes += 1;\r\n } else if (code < 0x800) {\r\n bytes += 2;\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n bytes += 3;\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\r\n bytes += 4;\r\n }\r\n }\r\n } else {\r\n bytes = length;\r\n }\r\n bytes += this.encode(bytes * 8);\r\n this.update(str);\r\n return bytes;\r\n};\r\n\r\nKeccak.prototype.bytepad = function (strs, w) {\r\n var bytes = this.encode(w);\r\n for (var i = 0; i < strs.length; ++i) {\r\n bytes += this.encodeString(strs[i]);\r\n }\r\n var paddingBytes = (w - (bytes % w)) % w;\r\n var zeros = [];\r\n zeros.length = paddingBytes;\r\n this.update(zeros);\r\n return this;\r\n};\r\n\r\nKeccak.prototype.finalize = function () {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n var blocks = this.blocks,\r\n i = this.lastByteIndex,\r\n blockCount = this.blockCount,\r\n s = this.s;\r\n blocks[i >> 2] |= this.padding[i & 3];\r\n if (this.lastByteIndex === this.byteCount) {\r\n blocks[0] = blocks[blockCount];\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n blocks[blockCount - 1] |= 0x80000000;\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n};\r\n\r\nKeccak.prototype.toString = Keccak.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount,\r\n s = this.s,\r\n outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes,\r\n i = 0,\r\n j = 0;\r\n var hex = \"\",\r\n block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n block = s[i];\r\n hex +=\r\n HEX_CHARS[(block >> 4) & 0x0f] +\r\n HEX_CHARS[block & 0x0f] +\r\n HEX_CHARS[(block >> 12) & 0x0f] +\r\n HEX_CHARS[(block >> 8) & 0x0f] +\r\n HEX_CHARS[(block >> 20) & 0x0f] +\r\n HEX_CHARS[(block >> 16) & 0x0f] +\r\n HEX_CHARS[(block >> 28) & 0x0f] +\r\n HEX_CHARS[(block >> 24) & 0x0f];\r\n }\r\n if (j % blockCount === 0) {\r\n s = cloneArray(s);\r\n f(s);\r\n i = 0;\r\n }\r\n }\r\n if (extraBytes) {\r\n block = s[i];\r\n hex += HEX_CHARS[(block >> 4) & 0x0f] + HEX_CHARS[block & 0x0f];\r\n if (extraBytes > 1) {\r\n hex += HEX_CHARS[(block >> 12) & 0x0f] + HEX_CHARS[(block >> 8) & 0x0f];\r\n }\r\n if (extraBytes > 2) {\r\n hex += HEX_CHARS[(block >> 20) & 0x0f] + HEX_CHARS[(block >> 16) & 0x0f];\r\n }\r\n }\r\n return hex;\r\n};\r\n\r\nKeccak.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount,\r\n s = this.s,\r\n outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes,\r\n i = 0,\r\n j = 0;\r\n var bytes = this.outputBits >> 3;\r\n var buffer;\r\n if (extraBytes) {\r\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\r\n } else {\r\n buffer = new ArrayBuffer(bytes);\r\n }\r\n var array = new Uint32Array(buffer);\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n array[j] = s[i];\r\n }\r\n if (j % blockCount === 0) {\r\n s = cloneArray(s);\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n array[j] = s[i];\r\n buffer = buffer.slice(0, bytes);\r\n }\r\n return buffer;\r\n};\r\n\r\nKeccak.prototype.buffer = Keccak.prototype.arrayBuffer;\r\n\r\nKeccak.prototype.digest = Keccak.prototype.array = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount,\r\n s = this.s,\r\n outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes,\r\n i = 0,\r\n j = 0;\r\n var array = [],\r\n offset,\r\n block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n offset = j << 2;\r\n block = s[i];\r\n array[offset] = block & 0xff;\r\n array[offset + 1] = (block >> 8) & 0xff;\r\n array[offset + 2] = (block >> 16) & 0xff;\r\n array[offset + 3] = (block >> 24) & 0xff;\r\n }\r\n if (j % blockCount === 0) {\r\n s = cloneArray(s);\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n offset = j << 2;\r\n block = s[i];\r\n array[offset] = block & 0xff;\r\n if (extraBytes > 1) {\r\n array[offset + 1] = (block >> 8) & 0xff;\r\n }\r\n if (extraBytes > 2) {\r\n array[offset + 2] = (block >> 16) & 0xff;\r\n }\r\n }\r\n return array;\r\n};\r\n\r\nfunction Kmac(bits, padding, outputBits) {\r\n Keccak.call(this, bits, padding, outputBits);\r\n}\r\n\r\nKmac.prototype = new Keccak();\r\n\r\nKmac.prototype.finalize = function () {\r\n this.encode(this.outputBits, true);\r\n return Keccak.prototype.finalize.call(this);\r\n};\r\n\r\nvar f = function (s) {\r\n var h,\r\n l,\r\n n,\r\n c0,\r\n c1,\r\n c2,\r\n c3,\r\n c4,\r\n c5,\r\n c6,\r\n c7,\r\n c8,\r\n c9,\r\n b0,\r\n b1,\r\n b2,\r\n b3,\r\n b4,\r\n b5,\r\n b6,\r\n b7,\r\n b8,\r\n b9,\r\n b10,\r\n b11,\r\n b12,\r\n b13,\r\n b14,\r\n b15,\r\n b16,\r\n b17,\r\n b18,\r\n b19,\r\n b20,\r\n b21,\r\n b22,\r\n b23,\r\n b24,\r\n b25,\r\n b26,\r\n b27,\r\n b28,\r\n b29,\r\n b30,\r\n b31,\r\n b32,\r\n b33,\r\n b34,\r\n b35,\r\n b36,\r\n b37,\r\n b38,\r\n b39,\r\n b40,\r\n b41,\r\n b42,\r\n b43,\r\n b44,\r\n b45,\r\n b46,\r\n b47,\r\n b48,\r\n b49;\r\n for (n = 0; n < 48; n += 2) {\r\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\r\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\r\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\r\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\r\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\r\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\r\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\r\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\r\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\r\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\r\n\r\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\r\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\r\n s[0] ^= h;\r\n s[1] ^= l;\r\n s[10] ^= h;\r\n s[11] ^= l;\r\n s[20] ^= h;\r\n s[21] ^= l;\r\n s[30] ^= h;\r\n s[31] ^= l;\r\n s[40] ^= h;\r\n s[41] ^= l;\r\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\r\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\r\n s[2] ^= h;\r\n s[3] ^= l;\r\n s[12] ^= h;\r\n s[13] ^= l;\r\n s[22] ^= h;\r\n s[23] ^= l;\r\n s[32] ^= h;\r\n s[33] ^= l;\r\n s[42] ^= h;\r\n s[43] ^= l;\r\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\r\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\r\n s[4] ^= h;\r\n s[5] ^= l;\r\n s[14] ^= h;\r\n s[15] ^= l;\r\n s[24] ^= h;\r\n s[25] ^= l;\r\n s[34] ^= h;\r\n s[35] ^= l;\r\n s[44] ^= h;\r\n s[45] ^= l;\r\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\r\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\r\n s[6] ^= h;\r\n s[7] ^= l;\r\n s[16] ^= h;\r\n s[17] ^= l;\r\n s[26] ^= h;\r\n s[27] ^= l;\r\n s[36] ^= h;\r\n s[37] ^= l;\r\n s[46] ^= h;\r\n s[47] ^= l;\r\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\r\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\r\n s[8] ^= h;\r\n s[9] ^= l;\r\n s[18] ^= h;\r\n s[19] ^= l;\r\n s[28] ^= h;\r\n s[29] ^= l;\r\n s[38] ^= h;\r\n s[39] ^= l;\r\n s[48] ^= h;\r\n s[49] ^= l;\r\n\r\n b0 = s[0];\r\n b1 = s[1];\r\n b32 = (s[11] << 4) | (s[10] >>> 28);\r\n b33 = (s[10] << 4) | (s[11] >>> 28);\r\n b14 = (s[20] << 3) | (s[21] >>> 29);\r\n b15 = (s[21] << 3) | (s[20] >>> 29);\r\n b46 = (s[31] << 9) | (s[30] >>> 23);\r\n b47 = (s[30] << 9) | (s[31] >>> 23);\r\n b28 = (s[40] << 18) | (s[41] >>> 14);\r\n b29 = (s[41] << 18) | (s[40] >>> 14);\r\n b20 = (s[2] << 1) | (s[3] >>> 31);\r\n b21 = (s[3] << 1) | (s[2] >>> 31);\r\n b2 = (s[13] << 12) | (s[12] >>> 20);\r\n b3 = (s[12] << 12) | (s[13] >>> 20);\r\n b34 = (s[22] << 10) | (s[23] >>> 22);\r\n b35 = (s[23] << 10) | (s[22] >>> 22);\r\n b16 = (s[33] << 13) | (s[32] >>> 19);\r\n b17 = (s[32] << 13) | (s[33] >>> 19);\r\n b48 = (s[42] << 2) | (s[43] >>> 30);\r\n b49 = (s[43] << 2) | (s[42] >>> 30);\r\n b40 = (s[5] << 30) | (s[4] >>> 2);\r\n b41 = (s[4] << 30) | (s[5] >>> 2);\r\n b22 = (s[14] << 6) | (s[15] >>> 26);\r\n b23 = (s[15] << 6) | (s[14] >>> 26);\r\n b4 = (s[25] << 11) | (s[24] >>> 21);\r\n b5 = (s[24] << 11) | (s[25] >>> 21);\r\n b36 = (s[34] << 15) | (s[35] >>> 17);\r\n b37 = (s[35] << 15) | (s[34] >>> 17);\r\n b18 = (s[45] << 29) | (s[44] >>> 3);\r\n b19 = (s[44] << 29) | (s[45] >>> 3);\r\n b10 = (s[6] << 28) | (s[7] >>> 4);\r\n b11 = (s[7] << 28) | (s[6] >>> 4);\r\n b42 = (s[17] << 23) | (s[16] >>> 9);\r\n b43 = (s[16] << 23) | (s[17] >>> 9);\r\n b24 = (s[26] << 25) | (s[27] >>> 7);\r\n b25 = (s[27] << 25) | (s[26] >>> 7);\r\n b6 = (s[36] << 21) | (s[37] >>> 11);\r\n b7 = (s[37] << 21) | (s[36] >>> 11);\r\n b38 = (s[47] << 24) | (s[46] >>> 8);\r\n b39 = (s[46] << 24) | (s[47] >>> 8);\r\n b30 = (s[8] << 27) | (s[9] >>> 5);\r\n b31 = (s[9] << 27) | (s[8] >>> 5);\r\n b12 = (s[18] << 20) | (s[19] >>> 12);\r\n b13 = (s[19] << 20) | (s[18] >>> 12);\r\n b44 = (s[29] << 7) | (s[28] >>> 25);\r\n b45 = (s[28] << 7) | (s[29] >>> 25);\r\n b26 = (s[38] << 8) | (s[39] >>> 24);\r\n b27 = (s[39] << 8) | (s[38] >>> 24);\r\n b8 = (s[48] << 14) | (s[49] >>> 18);\r\n b9 = (s[49] << 14) | (s[48] >>> 18);\r\n\r\n s[0] = b0 ^ (~b2 & b4);\r\n s[1] = b1 ^ (~b3 & b5);\r\n s[10] = b10 ^ (~b12 & b14);\r\n s[11] = b11 ^ (~b13 & b15);\r\n s[20] = b20 ^ (~b22 & b24);\r\n s[21] = b21 ^ (~b23 & b25);\r\n s[30] = b30 ^ (~b32 & b34);\r\n s[31] = b31 ^ (~b33 & b35);\r\n s[40] = b40 ^ (~b42 & b44);\r\n s[41] = b41 ^ (~b43 & b45);\r\n s[2] = b2 ^ (~b4 & b6);\r\n s[3] = b3 ^ (~b5 & b7);\r\n s[12] = b12 ^ (~b14 & b16);\r\n s[13] = b13 ^ (~b15 & b17);\r\n s[22] = b22 ^ (~b24 & b26);\r\n s[23] = b23 ^ (~b25 & b27);\r\n s[32] = b32 ^ (~b34 & b36);\r\n s[33] = b33 ^ (~b35 & b37);\r\n s[42] = b42 ^ (~b44 & b46);\r\n s[43] = b43 ^ (~b45 & b47);\r\n s[4] = b4 ^ (~b6 & b8);\r\n s[5] = b5 ^ (~b7 & b9);\r\n s[14] = b14 ^ (~b16 & b18);\r\n s[15] = b15 ^ (~b17 & b19);\r\n s[24] = b24 ^ (~b26 & b28);\r\n s[25] = b25 ^ (~b27 & b29);\r\n s[34] = b34 ^ (~b36 & b38);\r\n s[35] = b35 ^ (~b37 & b39);\r\n s[44] = b44 ^ (~b46 & b48);\r\n s[45] = b45 ^ (~b47 & b49);\r\n s[6] = b6 ^ (~b8 & b0);\r\n s[7] = b7 ^ (~b9 & b1);\r\n s[16] = b16 ^ (~b18 & b10);\r\n s[17] = b17 ^ (~b19 & b11);\r\n s[26] = b26 ^ (~b28 & b20);\r\n s[27] = b27 ^ (~b29 & b21);\r\n s[36] = b36 ^ (~b38 & b30);\r\n s[37] = b37 ^ (~b39 & b31);\r\n s[46] = b46 ^ (~b48 & b40);\r\n s[47] = b47 ^ (~b49 & b41);\r\n s[8] = b8 ^ (~b0 & b2);\r\n s[9] = b9 ^ (~b1 & b3);\r\n s[18] = b18 ^ (~b10 & b12);\r\n s[19] = b19 ^ (~b11 & b13);\r\n s[28] = b28 ^ (~b20 & b22);\r\n s[29] = b29 ^ (~b21 & b23);\r\n s[38] = b38 ^ (~b30 & b32);\r\n s[39] = b39 ^ (~b31 & b33);\r\n s[48] = b48 ^ (~b40 & b42);\r\n s[49] = b49 ^ (~b41 & b43);\r\n\r\n s[0] ^= RC[n];\r\n s[1] ^= RC[n + 1];\r\n }\r\n};\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport const sha3_512 = methods[\"sha3_512\"];\r\nexport const sha3_384 = methods[\"sha3_384\"];\r\nexport const sha3_256 = methods[\"sha3_256\"];\r\nexport const sha3_224 = methods[\"sha3_224\"];\r\n","// Copyright (c) 2005 Tom Wu\r\n// All Rights Reserved.\r\n// See \"LICENSE\" for details.\r\n\r\n// Basic JavaScript BN library - subset useful for RSA encryption.\r\n\r\n// Bits per digit\r\nvar dbits;\r\n\r\n// JavaScript engine analysis\r\nvar canary = 0xdeadbeefcafe;\r\nvar j_lm = (canary & 0xffffff) == 0xefcafe;\r\n\r\n// (public) Constructor\r\nfunction BigInteger(a, b, c) {\r\n if (a != null)\r\n if (\"number\" == typeof a) this.fromNumber(a, b, c);\r\n else if (b == null && \"string\" != typeof a) this.fromString(a, 256);\r\n else this.fromString(a, b);\r\n}\r\n\r\n// return new, unset BigInteger\r\nfunction nbi() {\r\n return new BigInteger(null);\r\n}\r\n\r\n// am: Compute w_j += (x*this_i), propagate carries,\r\n// c is initial carry, returns final carry.\r\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\r\n// We need to select the fastest one that works in this environment.\r\n\r\n// am1: use a single mult and divide to get the high bits,\r\n// max digit bits should be 26 because\r\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\r\nfunction am1(i, x, w, j, c, n) {\r\n while (--n >= 0) {\r\n var v = x * this[i++] + w[j] + c;\r\n c = Math.floor(v / 0x4000000);\r\n w[j++] = v & 0x3ffffff;\r\n }\r\n return c;\r\n}\r\n\r\n// am2 avoids a big mult-and-extract completely.\r\n// Max digit bits should be <= 30 because we do bitwise ops\r\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\r\nfunction am2(i, x, w, j, c, n) {\r\n var xl = x & 0x7fff,\r\n xh = x >> 15;\r\n while (--n >= 0) {\r\n var l = this[i] & 0x7fff;\r\n var h = this[i++] >> 15;\r\n var m = xh * l + h * xl;\r\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\r\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\r\n w[j++] = l & 0x3fffffff;\r\n }\r\n return c;\r\n}\r\n\r\n// Alternately, set max digit bits to 28 since some\r\n// browsers slow down when dealing with 32-bit numbers.\r\nfunction am3(i, x, w, j, c, n) {\r\n var xl = x & 0x3fff,\r\n xh = x >> 14;\r\n while (--n >= 0) {\r\n var l = this[i] & 0x3fff;\r\n var h = this[i++] >> 14;\r\n var m = xh * l + h * xl;\r\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\r\n c = (l >> 28) + (m >> 14) + xh * h;\r\n w[j++] = l & 0xfffffff;\r\n }\r\n return c;\r\n}\r\n\r\nvar inBrowser = typeof navigator !== \"undefined\";\r\nif (inBrowser && j_lm && navigator.appName == \"Microsoft Internet Explorer\") {\r\n BigInteger.prototype.am = am2;\r\n dbits = 30;\r\n} else if (inBrowser && j_lm && navigator.appName != \"Netscape\") {\r\n BigInteger.prototype.am = am1;\r\n dbits = 26;\r\n} else {\r\n // Mozilla/Netscape seems to prefer am3\r\n BigInteger.prototype.am = am3;\r\n dbits = 28;\r\n}\r\n\r\nBigInteger.prototype.DB = dbits;\r\nBigInteger.prototype.DM = (1 << dbits) - 1;\r\nBigInteger.prototype.DV = 1 << dbits;\r\n\r\nvar BI_FP = 52;\r\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\r\nBigInteger.prototype.F1 = BI_FP - dbits;\r\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\r\n\r\n// Digit conversions\r\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\nvar BI_RC = new Array();\r\nvar rr, vv;\r\nrr = \"0\".charCodeAt(0);\r\nfor (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\r\nrr = \"a\".charCodeAt(0);\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\r\nrr = \"A\".charCodeAt(0);\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\r\n\r\nfunction int2char(n) {\r\n return BI_RM.charAt(n);\r\n}\r\n\r\nfunction intAt(s, i) {\r\n var c = BI_RC[s.charCodeAt(i)];\r\n return c == null ? -1 : c;\r\n}\r\n\r\n// (protected) copy this to r\r\nfunction bnpCopyTo(r) {\r\n for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];\r\n r.t = this.t;\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) set from integer value x, -DV <= x < DV\r\nfunction bnpFromInt(x) {\r\n this.t = 1;\r\n this.s = x < 0 ? -1 : 0;\r\n if (x > 0) this[0] = x;\r\n else if (x < -1) this[0] = x + this.DV;\r\n else this.t = 0;\r\n}\r\n\r\n// return bigint initialized to value\r\nfunction nbv(i) {\r\n var r = nbi();\r\n r.fromInt(i);\r\n return r;\r\n}\r\n\r\n// (protected) set from string and radix\r\nfunction bnpFromString(s, b) {\r\n var k;\r\n if (b == 16) k = 4;\r\n else if (b == 8) k = 3;\r\n else if (b == 256)\r\n k = 8; // byte array\r\n else if (b == 2) k = 1;\r\n else if (b == 32) k = 5;\r\n else if (b == 4) k = 2;\r\n else {\r\n this.fromRadix(s, b);\r\n return;\r\n }\r\n this.t = 0;\r\n this.s = 0;\r\n var i = s.length,\r\n mi = false,\r\n sh = 0;\r\n while (--i >= 0) {\r\n var x = k == 8 ? s[i] & 0xff : intAt(s, i);\r\n if (x < 0) {\r\n if (s.charAt(i) == \"-\") mi = true;\r\n continue;\r\n }\r\n mi = false;\r\n if (sh == 0) this[this.t++] = x;\r\n else if (sh + k > this.DB) {\r\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\r\n this[this.t++] = x >> (this.DB - sh);\r\n } else this[this.t - 1] |= x << sh;\r\n sh += k;\r\n if (sh >= this.DB) sh -= this.DB;\r\n }\r\n if (k == 8 && (s[0] & 0x80) != 0) {\r\n this.s = -1;\r\n if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\r\n }\r\n this.clamp();\r\n if (mi) BigInteger.ZERO.subTo(this, this);\r\n}\r\n\r\n// (protected) clamp off excess high words\r\nfunction bnpClamp() {\r\n var c = this.s & this.DM;\r\n while (this.t > 0 && this[this.t - 1] == c) --this.t;\r\n}\r\n\r\n// (public) return string representation in given radix\r\nfunction bnToString(b) {\r\n if (this.s < 0) return \"-\" + this.negate().toString(b);\r\n var k;\r\n if (b == 16) k = 4;\r\n else if (b == 8) k = 3;\r\n else if (b == 2) k = 1;\r\n else if (b == 32) k = 5;\r\n else if (b == 4) k = 2;\r\n else return this.toRadix(b);\r\n var km = (1 << k) - 1,\r\n d,\r\n m = false,\r\n r = \"\",\r\n i = this.t;\r\n var p = this.DB - ((i * this.DB) % k);\r\n if (i-- > 0) {\r\n if (p < this.DB && (d = this[i] >> p) > 0) {\r\n m = true;\r\n r = int2char(d);\r\n }\r\n while (i >= 0) {\r\n if (p < k) {\r\n d = (this[i] & ((1 << p) - 1)) << (k - p);\r\n d |= this[--i] >> (p += this.DB - k);\r\n } else {\r\n d = (this[i] >> (p -= k)) & km;\r\n if (p <= 0) {\r\n p += this.DB;\r\n --i;\r\n }\r\n }\r\n if (d > 0) m = true;\r\n if (m) r += int2char(d);\r\n }\r\n }\r\n return m ? r : \"0\";\r\n}\r\n\r\n// (public) -this\r\nfunction bnNegate() {\r\n var r = nbi();\r\n BigInteger.ZERO.subTo(this, r);\r\n return r;\r\n}\r\n\r\n// (public) |this|\r\nfunction bnAbs() {\r\n return this.s < 0 ? this.negate() : this;\r\n}\r\n\r\n// (public) return + if this > a, - if this < a, 0 if equal\r\nfunction bnCompareTo(a) {\r\n var r = this.s - a.s;\r\n if (r != 0) return r;\r\n var i = this.t;\r\n r = i - a.t;\r\n if (r != 0) return this.s < 0 ? -r : r;\r\n while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;\r\n return 0;\r\n}\r\n\r\n// returns bit length of the integer x\r\nfunction nbits(x) {\r\n var r = 1,\r\n t;\r\n if ((t = x >>> 16) != 0) {\r\n x = t;\r\n r += 16;\r\n }\r\n if ((t = x >> 8) != 0) {\r\n x = t;\r\n r += 8;\r\n }\r\n if ((t = x >> 4) != 0) {\r\n x = t;\r\n r += 4;\r\n }\r\n if ((t = x >> 2) != 0) {\r\n x = t;\r\n r += 2;\r\n }\r\n if ((t = x >> 1) != 0) {\r\n x = t;\r\n r += 1;\r\n }\r\n return r;\r\n}\r\n\r\n// (public) return the number of bits in \"this\"\r\nfunction bnBitLength() {\r\n if (this.t <= 0) return 0;\r\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\r\n}\r\n\r\n// (protected) r = this << n*DB\r\nfunction bnpDLShiftTo(n, r) {\r\n var i;\r\n for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];\r\n for (i = n - 1; i >= 0; --i) r[i] = 0;\r\n r.t = this.t + n;\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) r = this >> n*DB\r\nfunction bnpDRShiftTo(n, r) {\r\n for (var i = n; i < this.t; ++i) r[i - n] = this[i];\r\n r.t = Math.max(this.t - n, 0);\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) r = this << n\r\nfunction bnpLShiftTo(n, r) {\r\n var bs = n % this.DB;\r\n var cbs = this.DB - bs;\r\n var bm = (1 << cbs) - 1;\r\n var ds = Math.floor(n / this.DB),\r\n c = (this.s << bs) & this.DM,\r\n i;\r\n for (i = this.t - 1; i >= 0; --i) {\r\n r[i + ds + 1] = (this[i] >> cbs) | c;\r\n c = (this[i] & bm) << bs;\r\n }\r\n for (i = ds - 1; i >= 0; --i) r[i] = 0;\r\n r[ds] = c;\r\n r.t = this.t + ds + 1;\r\n r.s = this.s;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this >> n\r\nfunction bnpRShiftTo(n, r) {\r\n r.s = this.s;\r\n var ds = Math.floor(n / this.DB);\r\n if (ds >= this.t) {\r\n r.t = 0;\r\n return;\r\n }\r\n var bs = n % this.DB;\r\n var cbs = this.DB - bs;\r\n var bm = (1 << bs) - 1;\r\n r[0] = this[ds] >> bs;\r\n for (var i = ds + 1; i < this.t; ++i) {\r\n r[i - ds - 1] |= (this[i] & bm) << cbs;\r\n r[i - ds] = this[i] >> bs;\r\n }\r\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\r\n r.t = this.t - ds;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this - a\r\nfunction bnpSubTo(a, r) {\r\n var i = 0,\r\n c = 0,\r\n m = Math.min(a.t, this.t);\r\n while (i < m) {\r\n c += this[i] - a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n if (a.t < this.t) {\r\n c -= a.s;\r\n while (i < this.t) {\r\n c += this[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += this.s;\r\n } else {\r\n c += this.s;\r\n while (i < a.t) {\r\n c -= a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c -= a.s;\r\n }\r\n r.s = c < 0 ? -1 : 0;\r\n if (c < -1) r[i++] = this.DV + c;\r\n else if (c > 0) r[i++] = c;\r\n r.t = i;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this * a, r != this,a (HAC 14.12)\r\n// \"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyTo(a, r) {\r\n var x = this.abs(),\r\n y = a.abs();\r\n var i = x.t;\r\n r.t = i + y.t;\r\n while (--i >= 0) r[i] = 0;\r\n for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\r\n r.s = 0;\r\n r.clamp();\r\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\r\n}\r\n\r\n// (protected) r = this^2, r != this (HAC 14.16)\r\nfunction bnpSquareTo(r) {\r\n var x = this.abs();\r\n var i = (r.t = 2 * x.t);\r\n while (--i >= 0) r[i] = 0;\r\n for (i = 0; i < x.t - 1; ++i) {\r\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\r\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\r\n r[i + x.t] -= x.DV;\r\n r[i + x.t + 1] = 1;\r\n }\r\n }\r\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\r\n r.s = 0;\r\n r.clamp();\r\n}\r\n\r\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\r\n// r != q, this != m. q or r may be null.\r\nfunction bnpDivRemTo(m, q, r) {\r\n var pm = m.abs();\r\n if (pm.t <= 0) return;\r\n var pt = this.abs();\r\n if (pt.t < pm.t) {\r\n if (q != null) q.fromInt(0);\r\n if (r != null) this.copyTo(r);\r\n return;\r\n }\r\n if (r == null) r = nbi();\r\n var y = nbi(),\r\n ts = this.s,\r\n ms = m.s;\r\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\r\n if (nsh > 0) {\r\n pm.lShiftTo(nsh, y);\r\n pt.lShiftTo(nsh, r);\r\n } else {\r\n pm.copyTo(y);\r\n pt.copyTo(r);\r\n }\r\n var ys = y.t;\r\n var y0 = y[ys - 1];\r\n if (y0 == 0) return;\r\n var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\r\n var d1 = this.FV / yt,\r\n d2 = (1 << this.F1) / yt,\r\n e = 1 << this.F2;\r\n var i = r.t,\r\n j = i - ys,\r\n t = q == null ? nbi() : q;\r\n y.dlShiftTo(j, t);\r\n if (r.compareTo(t) >= 0) {\r\n r[r.t++] = 1;\r\n r.subTo(t, r);\r\n }\r\n BigInteger.ONE.dlShiftTo(ys, t);\r\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\r\n while (y.t < ys) y[y.t++] = 0;\r\n while (--j >= 0) {\r\n // Estimate quotient digit\r\n var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\r\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\r\n // Try it out\r\n y.dlShiftTo(j, t);\r\n r.subTo(t, r);\r\n while (r[i] < --qd) r.subTo(t, r);\r\n }\r\n }\r\n if (q != null) {\r\n r.drShiftTo(ys, q);\r\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\r\n }\r\n r.t = ys;\r\n r.clamp();\r\n if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder\r\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\r\n}\r\n\r\n// (public) this mod a\r\nfunction bnMod(a) {\r\n var r = nbi();\r\n this.abs().divRemTo(a, null, r);\r\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\r\n return r;\r\n}\r\n\r\n// Modular reduction using \"classic\" algorithm\r\nfunction Classic(m) {\r\n this.m = m;\r\n}\r\n\r\nfunction cConvert(x) {\r\n if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\r\n else return x;\r\n}\r\n\r\nfunction cRevert(x) {\r\n return x;\r\n}\r\n\r\nfunction cReduce(x) {\r\n x.divRemTo(this.m, null, x);\r\n}\r\n\r\nfunction cMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nfunction cSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\nClassic.prototype.convert = cConvert;\r\nClassic.prototype.revert = cRevert;\r\nClassic.prototype.reduce = cReduce;\r\nClassic.prototype.mulTo = cMulTo;\r\nClassic.prototype.sqrTo = cSqrTo;\r\n\r\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\r\n// justification:\r\n// xy == 1 (mod m)\r\n// xy = 1+km\r\n// xy(2-xy) = (1+km)(1-km)\r\n// x[y(2-xy)] = 1-k^2m^2\r\n// x[y(2-xy)] == 1 (mod m^2)\r\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\r\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\r\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\r\nfunction bnpInvDigit() {\r\n if (this.t < 1) return 0;\r\n var x = this[0];\r\n if ((x & 1) == 0) return 0;\r\n var y = x & 3; // y == 1/x mod 2^2\r\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\r\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\r\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\r\n // last step - calculate inverse mod DV directly;\r\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\r\n y = (y * (2 - ((x * y) % this.DV))) % this.DV; // y == 1/x mod 2^dbits\r\n // we really want the negative inverse, and -DV < y < DV\r\n return y > 0 ? this.DV - y : -y;\r\n}\r\n\r\n// Montgomery reduction\r\nfunction Montgomery(m) {\r\n this.m = m;\r\n this.mp = m.invDigit();\r\n this.mpl = this.mp & 0x7fff;\r\n this.mph = this.mp >> 15;\r\n this.um = (1 << (m.DB - 15)) - 1;\r\n this.mt2 = 2 * m.t;\r\n}\r\n\r\n// xR mod m\r\nfunction montConvert(x) {\r\n var r = nbi();\r\n x.abs().dlShiftTo(this.m.t, r);\r\n r.divRemTo(this.m, null, r);\r\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\r\n return r;\r\n}\r\n\r\n// x/R mod m\r\nfunction montRevert(x) {\r\n var r = nbi();\r\n x.copyTo(r);\r\n this.reduce(r);\r\n return r;\r\n}\r\n\r\n// x = x/R mod m (HAC 14.32)\r\nfunction montReduce(x) {\r\n while (x.t <= this.mt2)\r\n // pad x so am has enough room later\r\n x[x.t++] = 0;\r\n for (var i = 0; i < this.m.t; ++i) {\r\n // faster way of calculating u0 = x[i]*mp mod DV\r\n var j = x[i] & 0x7fff;\r\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\r\n // use am to combine the multiply-shift-add into one call\r\n j = i + this.m.t;\r\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\r\n // propagate carry\r\n while (x[j] >= x.DV) {\r\n x[j] -= x.DV;\r\n x[++j]++;\r\n }\r\n }\r\n x.clamp();\r\n x.drShiftTo(this.m.t, x);\r\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\r\n}\r\n\r\n// r = \"x^2/R mod m\"; x != r\r\nfunction montSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\n// r = \"xy/R mod m\"; x,y != r\r\nfunction montMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nMontgomery.prototype.convert = montConvert;\r\nMontgomery.prototype.revert = montRevert;\r\nMontgomery.prototype.reduce = montReduce;\r\nMontgomery.prototype.mulTo = montMulTo;\r\nMontgomery.prototype.sqrTo = montSqrTo;\r\n\r\n// (protected) true iff this is even\r\nfunction bnpIsEven() {\r\n return (this.t > 0 ? this[0] & 1 : this.s) == 0;\r\n}\r\n\r\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\r\nfunction bnpExp(e, z) {\r\n if (e > 0xffffffff || e < 1) return BigInteger.ONE;\r\n var r = nbi(),\r\n r2 = nbi(),\r\n g = z.convert(this),\r\n i = nbits(e) - 1;\r\n g.copyTo(r);\r\n while (--i >= 0) {\r\n z.sqrTo(r, r2);\r\n if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);\r\n else {\r\n var t = r;\r\n r = r2;\r\n r2 = t;\r\n }\r\n }\r\n return z.revert(r);\r\n}\r\n\r\n// (public) this^e % m, 0 <= e < 2^32\r\nfunction bnModPowInt(e, m) {\r\n var z;\r\n if (e < 256 || m.isEven()) z = new Classic(m);\r\n else z = new Montgomery(m);\r\n return this.exp(e, z);\r\n}\r\n\r\n// protected\r\nBigInteger.prototype.copyTo = bnpCopyTo;\r\nBigInteger.prototype.fromInt = bnpFromInt;\r\nBigInteger.prototype.fromString = bnpFromString;\r\nBigInteger.prototype.clamp = bnpClamp;\r\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\r\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\r\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\r\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\r\nBigInteger.prototype.subTo = bnpSubTo;\r\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\r\nBigInteger.prototype.squareTo = bnpSquareTo;\r\nBigInteger.prototype.divRemTo = bnpDivRemTo;\r\nBigInteger.prototype.invDigit = bnpInvDigit;\r\nBigInteger.prototype.isEven = bnpIsEven;\r\nBigInteger.prototype.exp = bnpExp;\r\n\r\n// public\r\nBigInteger.prototype.toString = bnToString;\r\nBigInteger.prototype.negate = bnNegate;\r\nBigInteger.prototype.abs = bnAbs;\r\nBigInteger.prototype.compareTo = bnCompareTo;\r\nBigInteger.prototype.bitLength = bnBitLength;\r\nBigInteger.prototype.mod = bnMod;\r\nBigInteger.prototype.modPowInt = bnModPowInt;\r\n\r\n// \"constants\"\r\nBigInteger.ZERO = nbv(0);\r\nBigInteger.ONE = nbv(1);\r\n\r\n// Copyright (c) 2005-2009 Tom Wu\r\n// All Rights Reserved.\r\n// See \"LICENSE\" for details.\r\n\r\n// Extended JavaScript BN functions, required for RSA private ops.\r\n\r\n// Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\r\n// Version 1.2: square() API, isProbablePrime fix\r\n\r\n// (public)\r\nfunction bnClone() {\r\n var r = nbi();\r\n this.copyTo(r);\r\n return r;\r\n}\r\n\r\n// (public) return value as integer\r\nfunction bnIntValue() {\r\n if (this.s < 0) {\r\n if (this.t == 1) return this[0] - this.DV;\r\n else if (this.t == 0) return -1;\r\n } else if (this.t == 1) return this[0];\r\n else if (this.t == 0) return 0;\r\n // assumes 16 < DB < 32\r\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\r\n}\r\n\r\n// (public) return value as byte\r\nfunction bnByteValue() {\r\n return this.t == 0 ? this.s : (this[0] << 24) >> 24;\r\n}\r\n\r\n// (public) return value as short (assumes DB>=16)\r\nfunction bnShortValue() {\r\n return this.t == 0 ? this.s : (this[0] << 16) >> 16;\r\n}\r\n\r\n// (protected) return x s.t. r^x < DV\r\nfunction bnpChunkSize(r) {\r\n return Math.floor((Math.LN2 * this.DB) / Math.log(r));\r\n}\r\n\r\n// (public) 0 if this == 0, 1 if this > 0\r\nfunction bnSigNum() {\r\n if (this.s < 0) return -1;\r\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\r\n else return 1;\r\n}\r\n\r\n// (protected) convert to radix string\r\nfunction bnpToRadix(b) {\r\n if (b == null) b = 10;\r\n if (this.signum() == 0 || b < 2 || b > 36) return \"0\";\r\n var cs = this.chunkSize(b);\r\n var a = Math.pow(b, cs);\r\n var d = nbv(a),\r\n y = nbi(),\r\n z = nbi(),\r\n r = \"\";\r\n this.divRemTo(d, y, z);\r\n while (y.signum() > 0) {\r\n r = (a + z.intValue()).toString(b).substr(1) + r;\r\n y.divRemTo(d, y, z);\r\n }\r\n return z.intValue().toString(b) + r;\r\n}\r\n\r\n// (protected) convert from radix string\r\nfunction bnpFromRadix(s, b) {\r\n this.fromInt(0);\r\n if (b == null) b = 10;\r\n var cs = this.chunkSize(b);\r\n var d = Math.pow(b, cs),\r\n mi = false,\r\n j = 0,\r\n w = 0;\r\n for (var i = 0; i < s.length; ++i) {\r\n var x = intAt(s, i);\r\n if (x < 0) {\r\n if (s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\r\n continue;\r\n }\r\n w = b * w + x;\r\n if (++j >= cs) {\r\n this.dMultiply(d);\r\n this.dAddOffset(w, 0);\r\n j = 0;\r\n w = 0;\r\n }\r\n }\r\n if (j > 0) {\r\n this.dMultiply(Math.pow(b, j));\r\n this.dAddOffset(w, 0);\r\n }\r\n if (mi) BigInteger.ZERO.subTo(this, this);\r\n}\r\n\r\n// (protected) alternate constructor\r\nfunction bnpFromNumber(a, b, c) {\r\n if (\"number\" == typeof b) {\r\n // new BigInteger(int,int,RNG)\r\n if (a < 2) this.fromInt(1);\r\n else {\r\n this.fromNumber(a, c);\r\n if (!this.testBit(a - 1))\r\n // force MSB set\r\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\r\n if (this.isEven()) this.dAddOffset(1, 0); // force odd\r\n while (!this.isProbablePrime(b)) {\r\n this.dAddOffset(2, 0);\r\n if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\r\n }\r\n }\r\n } else {\r\n // new BigInteger(int,RNG)\r\n var x = new Array(),\r\n t = a & 7;\r\n x.length = (a >> 3) + 1;\r\n b.nextBytes(x);\r\n if (t > 0) x[0] &= (1 << t) - 1;\r\n else x[0] = 0;\r\n this.fromString(x, 256);\r\n }\r\n}\r\n\r\n// (public) convert to bigendian byte array\r\nfunction bnToByteArray() {\r\n var i = this.t,\r\n r = new Array();\r\n r[0] = this.s;\r\n var p = this.DB - ((i * this.DB) % 8),\r\n d,\r\n k = 0;\r\n if (i-- > 0) {\r\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) r[k++] = d | (this.s << (this.DB - p));\r\n while (i >= 0) {\r\n if (p < 8) {\r\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\r\n d |= this[--i] >> (p += this.DB - 8);\r\n } else {\r\n d = (this[i] >> (p -= 8)) & 0xff;\r\n if (p <= 0) {\r\n p += this.DB;\r\n --i;\r\n }\r\n }\r\n if ((d & 0x80) != 0) d |= -256;\r\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) ++k;\r\n if (k > 0 || d != this.s) r[k++] = d;\r\n }\r\n }\r\n return r;\r\n}\r\n\r\nfunction bnEquals(a) {\r\n return this.compareTo(a) == 0;\r\n}\r\n\r\nfunction bnMin(a) {\r\n return this.compareTo(a) < 0 ? this : a;\r\n}\r\n\r\nfunction bnMax(a) {\r\n return this.compareTo(a) > 0 ? this : a;\r\n}\r\n\r\n// (protected) r = this op a (bitwise)\r\nfunction bnpBitwiseTo(a, op, r) {\r\n var i,\r\n f,\r\n m = Math.min(a.t, this.t);\r\n for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]);\r\n if (a.t < this.t) {\r\n f = a.s & this.DM;\r\n for (i = m; i < this.t; ++i) r[i] = op(this[i], f);\r\n r.t = this.t;\r\n } else {\r\n f = this.s & this.DM;\r\n for (i = m; i < a.t; ++i) r[i] = op(f, a[i]);\r\n r.t = a.t;\r\n }\r\n r.s = op(this.s, a.s);\r\n r.clamp();\r\n}\r\n\r\n// (public) this & a\r\nfunction op_and(x, y) {\r\n return x & y;\r\n}\r\n\r\nfunction bnAnd(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_and, r);\r\n return r;\r\n}\r\n\r\n// (public) this | a\r\nfunction op_or(x, y) {\r\n return x | y;\r\n}\r\n\r\nfunction bnOr(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_or, r);\r\n return r;\r\n}\r\n\r\n// (public) this ^ a\r\nfunction op_xor(x, y) {\r\n return x ^ y;\r\n}\r\n\r\nfunction bnXor(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_xor, r);\r\n return r;\r\n}\r\n\r\n// (public) this & ~a\r\nfunction op_andnot(x, y) {\r\n return x & ~y;\r\n}\r\n\r\nfunction bnAndNot(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_andnot, r);\r\n return r;\r\n}\r\n\r\n// (public) ~this\r\nfunction bnNot() {\r\n var r = nbi();\r\n for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i];\r\n r.t = this.t;\r\n r.s = ~this.s;\r\n return r;\r\n}\r\n\r\n// (public) this << n\r\nfunction bnShiftLeft(n) {\r\n var r = nbi();\r\n if (n < 0) this.rShiftTo(-n, r);\r\n else this.lShiftTo(n, r);\r\n return r;\r\n}\r\n\r\n// (public) this >> n\r\nfunction bnShiftRight(n) {\r\n var r = nbi();\r\n if (n < 0) this.lShiftTo(-n, r);\r\n else this.rShiftTo(n, r);\r\n return r;\r\n}\r\n\r\n// return index of lowest 1-bit in x, x < 2^31\r\nfunction lbit(x) {\r\n if (x == 0) return -1;\r\n var r = 0;\r\n if ((x & 0xffff) == 0) {\r\n x >>= 16;\r\n r += 16;\r\n }\r\n if ((x & 0xff) == 0) {\r\n x >>= 8;\r\n r += 8;\r\n }\r\n if ((x & 0xf) == 0) {\r\n x >>= 4;\r\n r += 4;\r\n }\r\n if ((x & 3) == 0) {\r\n x >>= 2;\r\n r += 2;\r\n }\r\n if ((x & 1) == 0) ++r;\r\n return r;\r\n}\r\n\r\n// (public) returns index of lowest 1-bit (or -1 if none)\r\nfunction bnGetLowestSetBit() {\r\n for (var i = 0; i < this.t; ++i) if (this[i] != 0) return i * this.DB + lbit(this[i]);\r\n if (this.s < 0) return this.t * this.DB;\r\n return -1;\r\n}\r\n\r\n// return number of 1 bits in x\r\nfunction cbit(x) {\r\n var r = 0;\r\n while (x != 0) {\r\n x &= x - 1;\r\n ++r;\r\n }\r\n return r;\r\n}\r\n\r\n// (public) return number of set bits\r\nfunction bnBitCount() {\r\n var r = 0,\r\n x = this.s & this.DM;\r\n for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x);\r\n return r;\r\n}\r\n\r\n// (public) true iff nth bit is set\r\nfunction bnTestBit(n) {\r\n var j = Math.floor(n / this.DB);\r\n if (j >= this.t) return this.s != 0;\r\n return (this[j] & (1 << n % this.DB)) != 0;\r\n}\r\n\r\n// (protected) this op (1<<n)\r\nfunction bnpChangeBit(n, op) {\r\n var r = BigInteger.ONE.shiftLeft(n);\r\n this.bitwiseTo(r, op, r);\r\n return r;\r\n}\r\n\r\n// (public) this | (1<<n)\r\nfunction bnSetBit(n) {\r\n return this.changeBit(n, op_or);\r\n}\r\n\r\n// (public) this & ~(1<<n)\r\nfunction bnClearBit(n) {\r\n return this.changeBit(n, op_andnot);\r\n}\r\n\r\n// (public) this ^ (1<<n)\r\nfunction bnFlipBit(n) {\r\n return this.changeBit(n, op_xor);\r\n}\r\n\r\n// (protected) r = this + a\r\nfunction bnpAddTo(a, r) {\r\n var i = 0,\r\n c = 0,\r\n m = Math.min(a.t, this.t);\r\n while (i < m) {\r\n c += this[i] + a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n if (a.t < this.t) {\r\n c += a.s;\r\n while (i < this.t) {\r\n c += this[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += this.s;\r\n } else {\r\n c += this.s;\r\n while (i < a.t) {\r\n c += a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += a.s;\r\n }\r\n r.s = c < 0 ? -1 : 0;\r\n if (c > 0) r[i++] = c;\r\n else if (c < -1) r[i++] = this.DV + c;\r\n r.t = i;\r\n r.clamp();\r\n}\r\n\r\n// (public) this + a\r\nfunction bnAdd(a) {\r\n var r = nbi();\r\n this.addTo(a, r);\r\n return r;\r\n}\r\n\r\n// (public) this - a\r\nfunction bnSubtract(a) {\r\n var r = nbi();\r\n this.subTo(a, r);\r\n return r;\r\n}\r\n\r\n// (public) this * a\r\nfunction bnMultiply(a) {\r\n var r = nbi();\r\n this.multiplyTo(a, r);\r\n return r;\r\n}\r\n\r\n// (public) this^2\r\nfunction bnSquare() {\r\n var r = nbi();\r\n this.squareTo(r);\r\n return r;\r\n}\r\n\r\n// (public) this / a\r\nfunction bnDivide(a) {\r\n var r = nbi();\r\n this.divRemTo(a, r, null);\r\n return r;\r\n}\r\n\r\n// (public) this % a\r\nfunction bnRemainder(a) {\r\n var r = nbi();\r\n this.divRemTo(a, null, r);\r\n return r;\r\n}\r\n\r\n// (public) [this/a,this%a]\r\nfunction bnDivideAndRemainder(a) {\r\n var q = nbi(),\r\n r = nbi();\r\n this.divRemTo(a, q, r);\r\n return new Array(q, r);\r\n}\r\n\r\n// (protected) this *= n, this >= 0, 1 < n < DV\r\nfunction bnpDMultiply(n) {\r\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\r\n ++this.t;\r\n this.clamp();\r\n}\r\n\r\n// (protected) this += n << w words, this >= 0\r\nfunction bnpDAddOffset(n, w) {\r\n if (n == 0) return;\r\n while (this.t <= w) this[this.t++] = 0;\r\n this[w] += n;\r\n while (this[w] >= this.DV) {\r\n this[w] -= this.DV;\r\n if (++w >= this.t) this[this.t++] = 0;\r\n ++this[w];\r\n }\r\n}\r\n\r\n// A \"null\" reducer\r\nfunction NullExp() {}\r\n\r\nfunction nNop(x) {\r\n return x;\r\n}\r\n\r\nfunction nMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n}\r\n\r\nfunction nSqrTo(x, r) {\r\n x.squareTo(r);\r\n}\r\n\r\nNullExp.prototype.convert = nNop;\r\nNullExp.prototype.revert = nNop;\r\nNullExp.prototype.mulTo = nMulTo;\r\nNullExp.prototype.sqrTo = nSqrTo;\r\n\r\n// (public) this^e\r\nfunction bnPow(e) {\r\n return this.exp(e, new NullExp());\r\n}\r\n\r\n// (protected) r = lower n words of \"this * a\", a.t <= n\r\n// \"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyLowerTo(a, n, r) {\r\n var i = Math.min(this.t + a.t, n);\r\n r.s = 0; // assumes a,this >= 0\r\n r.t = i;\r\n while (i > 0) r[--i] = 0;\r\n var j;\r\n for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\r\n for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i);\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = \"this * a\" without lower n words, n > 0\r\n// \"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyUpperTo(a, n, r) {\r\n --n;\r\n var i = (r.t = this.t + a.t - n);\r\n r.s = 0; // assumes a,this >= 0\r\n while (--i >= 0) r[i] = 0;\r\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\r\n r.clamp();\r\n r.drShiftTo(1, r);\r\n}\r\n\r\n// Barrett modular reduction\r\nfunction Barrett(m) {\r\n // setup Barrett\r\n this.r2 = nbi();\r\n this.q3 = nbi();\r\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\r\n this.mu = this.r2.divide(m);\r\n this.m = m;\r\n}\r\n\r\nfunction barrettConvert(x) {\r\n if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m);\r\n else if (x.compareTo(this.m) < 0) return x;\r\n else {\r\n var r = nbi();\r\n x.copyTo(r);\r\n this.reduce(r);\r\n return r;\r\n }\r\n}\r\n\r\nfunction barrettRevert(x) {\r\n return x;\r\n}\r\n\r\n// x = x mod m (HAC 14.42)\r\nfunction barrettReduce(x) {\r\n x.drShiftTo(this.m.t - 1, this.r2);\r\n if (x.t > this.m.t + 1) {\r\n x.t = this.m.t + 1;\r\n x.clamp();\r\n }\r\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\r\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\r\n while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1);\r\n x.subTo(this.r2, x);\r\n while (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\r\n}\r\n\r\n// r = x^2 mod m; x != r\r\nfunction barrettSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\n// r = x*y mod m; x,y != r\r\nfunction barrettMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nBarrett.prototype.convert = barrettConvert;\r\nBarrett.prototype.revert = barrettRevert;\r\nBarrett.prototype.reduce = barrettReduce;\r\nBarrett.prototype.mulTo = barrettMulTo;\r\nBarrett.prototype.sqrTo = barrettSqrTo;\r\n\r\n// (public) this^e % m (HAC 14.85)\r\nfunction bnModPow(e, m) {\r\n var i = e.bitLength(),\r\n k,\r\n r = nbv(1),\r\n z;\r\n if (i <= 0) return r;\r\n else if (i < 18) k = 1;\r\n else if (i < 48) k = 3;\r\n else if (i < 144) k = 4;\r\n else if (i < 768) k = 5;\r\n else k = 6;\r\n if (i < 8) z = new Classic(m);\r\n else if (m.isEven()) z = new Barrett(m);\r\n else z = new Montgomery(m);\r\n\r\n // precomputation\r\n var g = new Array(),\r\n n = 3,\r\n k1 = k - 1,\r\n km = (1 << k) - 1;\r\n g[1] = z.convert(this);\r\n if (k > 1) {\r\n var g2 = nbi();\r\n z.sqrTo(g[1], g2);\r\n while (n <= km) {\r\n g[n] = nbi();\r\n z.mulTo(g2, g[n - 2], g[n]);\r\n n += 2;\r\n }\r\n }\r\n\r\n var j = e.t - 1,\r\n w,\r\n is1 = true,\r\n r2 = nbi(),\r\n t;\r\n i = nbits(e[j]) - 1;\r\n while (j >= 0) {\r\n if (i >= k1) w = (e[j] >> (i - k1)) & km;\r\n else {\r\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\r\n if (j > 0) w |= e[j - 1] >> (this.DB + i - k1);\r\n }\r\n\r\n n = k;\r\n while ((w & 1) == 0) {\r\n w >>= 1;\r\n --n;\r\n }\r\n if ((i -= n) < 0) {\r\n i += this.DB;\r\n --j;\r\n }\r\n if (is1) {\r\n // ret == 1, don't bother squaring or multiplying it\r\n g[w].copyTo(r);\r\n is1 = false;\r\n } else {\r\n while (n > 1) {\r\n z.sqrTo(r, r2);\r\n z.sqrTo(r2, r);\r\n n -= 2;\r\n }\r\n if (n > 0) z.sqrTo(r, r2);\r\n else {\r\n t = r;\r\n r = r2;\r\n r2 = t;\r\n }\r\n z.mulTo(r2, g[w], r);\r\n }\r\n\r\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\r\n z.sqrTo(r, r2);\r\n t = r;\r\n r = r2;\r\n r2 = t;\r\n if (--i < 0) {\r\n i = this.DB - 1;\r\n --j;\r\n }\r\n }\r\n }\r\n return z.revert(r);\r\n}\r\n\r\n// (public) gcd(this,a) (HAC 14.54)\r\nfunction bnGCD(a) {\r\n var x = this.s < 0 ? this.negate() : this.clone();\r\n var y = a.s < 0 ? a.negate() : a.clone();\r\n if (x.compareTo(y) < 0) {\r\n var t = x;\r\n x = y;\r\n y = t;\r\n }\r\n var i = x.getLowestSetBit(),\r\n g = y.getLowestSetBit();\r\n if (g < 0) return x;\r\n if (i < g) g = i;\r\n if (g > 0) {\r\n x.rShiftTo(g, x);\r\n y.rShiftTo(g, y);\r\n }\r\n while (x.signum() > 0) {\r\n if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x);\r\n if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y);\r\n if (x.compareTo(y) >= 0) {\r\n x.subTo(y, x);\r\n x.rShiftTo(1, x);\r\n } else {\r\n y.subTo(x, y);\r\n y.rShiftTo(1, y);\r\n }\r\n }\r\n if (g > 0) y.lShiftTo(g, y);\r\n return y;\r\n}\r\n\r\n// (protected) this % n, n < 2^26\r\nfunction bnpModInt(n) {\r\n if (n <= 0) return 0;\r\n var d = this.DV % n,\r\n r = this.s < 0 ? n - 1 : 0;\r\n if (this.t > 0)\r\n if (d == 0) r = this[0] % n;\r\n else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n;\r\n return r;\r\n}\r\n\r\n// (public) 1/this % m (HAC 14.61)\r\nfunction bnModInverse(m) {\r\n var ac = m.isEven();\r\n if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\r\n var u = m.clone(),\r\n v = this.clone();\r\n var a = nbv(1),\r\n b = nbv(0),\r\n c = nbv(0),\r\n d = nbv(1);\r\n while (u.signum() != 0) {\r\n while (u.isEven()) {\r\n u.rShiftTo(1, u);\r\n if (ac) {\r\n if (!a.isEven() || !b.isEven()) {\r\n a.addTo(this, a);\r\n b.subTo(m, b);\r\n }\r\n a.rShiftTo(1, a);\r\n } else if (!b.isEven()) b.subTo(m, b);\r\n b.rShiftTo(1, b);\r\n }\r\n while (v.isEven()) {\r\n v.rShiftTo(1, v);\r\n if (ac) {\r\n if (!c.isEven() || !d.isEven()) {\r\n c.addTo(this, c);\r\n d.subTo(m, d);\r\n }\r\n c.rShiftTo(1, c);\r\n } else if (!d.isEven()) d.subTo(m, d);\r\n d.rShiftTo(1, d);\r\n }\r\n if (u.compareTo(v) >= 0) {\r\n u.subTo(v, u);\r\n if (ac) a.subTo(c, a);\r\n b.subTo(d, b);\r\n } else {\r\n v.subTo(u, v);\r\n if (ac) c.subTo(a, c);\r\n d.subTo(b, d);\r\n }\r\n }\r\n if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\r\n if (d.compareTo(m) >= 0) return d.subtract(m);\r\n if (d.signum() < 0) d.addTo(m, d);\r\n else return d;\r\n if (d.signum() < 0) return d.add(m);\r\n else return d;\r\n}\r\n\r\nvar lowprimes = [\r\n 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109,\r\n 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239,\r\n 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379,\r\n 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,\r\n 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661,\r\n 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827,\r\n 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991,\r\n 997,\r\n];\r\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\r\n\r\n// (public) test primality with certainty >= 1-.5^t\r\nfunction bnIsProbablePrime(t) {\r\n var i,\r\n x = this.abs();\r\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\r\n for (i = 0; i < lowprimes.length; ++i) if (x[0] == lowprimes[i]) return true;\r\n return false;\r\n }\r\n if (x.isEven()) return false;\r\n i = 1;\r\n while (i < lowprimes.length) {\r\n var m = lowprimes[i],\r\n j = i + 1;\r\n while (j < lowprimes.length && m < lplim) m *= lowprimes[j++];\r\n m = x.modInt(m);\r\n while (i < j) if (m % lowprimes[i++] == 0) return false;\r\n }\r\n return x.millerRabin(t);\r\n}\r\n\r\n// (protected) true if probably prime (HAC 4.24, Miller-Rabin)\r\nfunction bnpMillerRabin(t) {\r\n var n1 = this.subtract(BigInteger.ONE);\r\n var k = n1.getLowestSetBit();\r\n if (k <= 0) return false;\r\n var r = n1.shiftRight(k);\r\n t = (t + 1) >> 1;\r\n if (t > lowprimes.length) t = lowprimes.length;\r\n var a = nbi();\r\n for (var i = 0; i < t; ++i) {\r\n // Pick bases at random, instead of starting at 2\r\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\r\n var y = a.modPow(r, this);\r\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\r\n var j = 1;\r\n while (j++ < k && y.compareTo(n1) != 0) {\r\n y = y.modPowInt(2, this);\r\n if (y.compareTo(BigInteger.ONE) == 0) return false;\r\n }\r\n if (y.compareTo(n1) != 0) return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// protected\r\nBigInteger.prototype.chunkSize = bnpChunkSize;\r\nBigInteger.prototype.toRadix = bnpToRadix;\r\nBigInteger.prototype.fromRadix = bnpFromRadix;\r\nBigInteger.prototype.fromNumber = bnpFromNumber;\r\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\r\nBigInteger.prototype.changeBit = bnpChangeBit;\r\nBigInteger.prototype.addTo = bnpAddTo;\r\nBigInteger.prototype.dMultiply = bnpDMultiply;\r\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\r\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\r\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\r\nBigInteger.prototype.modInt = bnpModInt;\r\nBigInteger.prototype.millerRabin = bnpMillerRabin;\r\n\r\n// public\r\nBigInteger.prototype.clone = bnClone;\r\nBigInteger.prototype.intValue = bnIntValue;\r\nBigInteger.prototype.byteValue = bnByteValue;\r\nBigInteger.prototype.shortValue = bnShortValue;\r\nBigInteger.prototype.signum = bnSigNum;\r\nBigInteger.prototype.toByteArray = bnToByteArray;\r\nBigInteger.prototype.equals = bnEquals;\r\nBigInteger.prototype.min = bnMin;\r\nBigInteger.prototype.max = bnMax;\r\nBigInteger.prototype.and = bnAnd;\r\nBigInteger.prototype.or = bnOr;\r\nBigInteger.prototype.xor = bnXor;\r\nBigInteger.prototype.andNot = bnAndNot;\r\nBigInteger.prototype.not = bnNot;\r\nBigInteger.prototype.shiftLeft = bnShiftLeft;\r\nBigInteger.prototype.shiftRight = bnShiftRight;\r\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\r\nBigInteger.prototype.bitCount = bnBitCount;\r\nBigInteger.prototype.testBit = bnTestBit;\r\nBigInteger.prototype.setBit = bnSetBit;\r\nBigInteger.prototype.clearBit = bnClearBit;\r\nBigInteger.prototype.flipBit = bnFlipBit;\r\nBigInteger.prototype.add = bnAdd;\r\nBigInteger.prototype.subtract = bnSubtract;\r\nBigInteger.prototype.multiply = bnMultiply;\r\nBigInteger.prototype.divide = bnDivide;\r\nBigInteger.prototype.remainder = bnRemainder;\r\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\r\nBigInteger.prototype.modPow = bnModPow;\r\nBigInteger.prototype.modInverse = bnModInverse;\r\nBigInteger.prototype.pow = bnPow;\r\nBigInteger.prototype.gcd = bnGCD;\r\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\r\n\r\n// JSBN-specific extension\r\nBigInteger.prototype.square = bnSquare;\r\n\r\n// Expose the Barrett function\r\nBigInteger.prototype.Barrett = Barrett;\r\n\r\n// BigInteger interfaces not implemented in jsbn:\r\n\r\n// BigInteger(int signum, byte[] magnitude)\r\n// double doubleValue()\r\n// float floatValue()\r\n// int hashCode()\r\n// long longValue()\r\n// static BigInteger valueOf(long val)\r\n\r\n// Random number generator - requires a PRNG backend, e.g. prng4.js\r\n\r\n// For best results, put code like\r\n// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>\r\n// in your main HTML document.\r\n\r\nvar rng_state;\r\nvar rng_pool;\r\nvar rng_pptr;\r\n\r\n// Mix in a 32-bit integer into the pool\r\nfunction rng_seed_int(x) {\r\n rng_pool[rng_pptr++] ^= x & 255;\r\n rng_pool[rng_pptr++] ^= (x >> 8) & 255;\r\n rng_pool[rng_pptr++] ^= (x >> 16) & 255;\r\n rng_pool[rng_pptr++] ^= (x >> 24) & 255;\r\n if (rng_pptr >= rng_psize) rng_pptr -= rng_psize;\r\n}\r\n\r\n// Mix in the current time (w/milliseconds) into the pool\r\nfunction rng_seed_time() {\r\n rng_seed_int(new Date().getTime());\r\n}\r\n\r\n// Initialize the pool with junk if needed.\r\nif (rng_pool == null) {\r\n rng_pool = new Array();\r\n rng_pptr = 0;\r\n var t;\r\n if (typeof window !== \"undefined\" && window.crypto) {\r\n if (window.crypto.getRandomValues) {\r\n // Use webcrypto if available\r\n var ua = new Uint8Array(32);\r\n window.crypto.getRandomValues(ua);\r\n for (t = 0; t < 32; ++t) rng_pool[rng_pptr++] = ua[t];\r\n } else if (navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\r\n // Extract entropy (256 bits) from NS4 RNG if available\r\n var z = window.crypto.random(32);\r\n for (t = 0; t < z.length; ++t) rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\r\n }\r\n }\r\n while (rng_pptr < rng_psize) {\r\n // extract some randomness from Math.random()\r\n t = Math.floor(65536 * Math.random());\r\n rng_pool[rng_pptr++] = t >>> 8;\r\n rng_pool[rng_pptr++] = t & 255;\r\n }\r\n rng_pptr = 0;\r\n rng_seed_time();\r\n // rng_seed_int(window.screenX);\r\n // rng_seed_int(window.screenY);\r\n}\r\n\r\nfunction rng_get_byte() {\r\n if (rng_state == null) {\r\n rng_seed_time();\r\n rng_state = prng_newstate();\r\n rng_state.init(rng_pool);\r\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) rng_pool[rng_pptr] = 0;\r\n rng_pptr = 0;\r\n // rng_pool = null;\r\n }\r\n // TODO: allow reseeding after first request\r\n return rng_state.next();\r\n}\r\n\r\nfunction rng_get_bytes(ba) {\r\n var i;\r\n for (i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\r\n}\r\n\r\nfunction SecureRandom() {}\r\n\r\nSecureRandom.prototype.nextBytes = rng_get_bytes;\r\n\r\n// prng4.js - uses Arcfour as a PRNG\r\n\r\nfunction Arcfour() {\r\n this.i = 0;\r\n this.j = 0;\r\n this.S = new Array();\r\n}\r\n\r\n// Initialize arcfour context from key, an array of ints, each from [0..255]\r\nfunction ARC4init(key) {\r\n var i, j, t;\r\n for (i = 0; i < 256; ++i) this.S[i] = i;\r\n j = 0;\r\n for (i = 0; i < 256; ++i) {\r\n j = (j + this.S[i] + key[i % key.length]) & 255;\r\n t = this.S[i];\r\n this.S[i] = this.S[j];\r\n this.S[j] = t;\r\n }\r\n this.i = 0;\r\n this.j = 0;\r\n}\r\n\r\nfunction ARC4next() {\r\n var t;\r\n this.i = (this.i + 1) & 255;\r\n this.j = (this.j + this.S[this.i]) & 255;\r\n t = this.S[this.i];\r\n this.S[this.i] = this.S[this.j];\r\n this.S[this.j] = t;\r\n return this.S[(t + this.S[this.i]) & 255];\r\n}\r\n\r\nArcfour.prototype.init = ARC4init;\r\nArcfour.prototype.next = ARC4next;\r\n\r\n// Plug in your RNG constructor here\r\nfunction prng_newstate() {\r\n return new Arcfour();\r\n}\r\n\r\n// Pool size must be a multiple of 4 and greater than 32.\r\n// An array of bytes the size of the pool will be passed to init()\r\nvar rng_psize = 256;\r\n\r\n// es6 export\r\nexport { BigInteger, SecureRandom };\r\n","import * as jsbn from \"./jsbn.js\";\r\n\r\nconst { BigInteger } = jsbn;\r\n\r\nfunction bigintToValue(bigint) {\r\n let h = bigint.toString(16);\r\n if (h[0] !== \"-\") {\r\n // 正数\r\n if (h.length % 2 === 1)\r\n h = \"0\" + h; // 补齐到整字节\r\n else if (!h.match(/^[0-7]/)) h = \"00\" + h; // 非0开头,则补一个全0字节\r\n } else {\r\n // 负数\r\n h = h.substr(1);\r\n\r\n let len = h.length;\r\n if (len % 2 === 1)\r\n len += 1; // 补齐到整字节\r\n else if (!h.match(/^[0-7]/)) len += 2; // 非0开头,则补一个全0字节\r\n\r\n let mask = \"\";\r\n for (let i = 0; i < len; i++) mask += \"f\";\r\n mask = new BigInteger(mask, 16);\r\n\r\n // 对绝对值取反,加1\r\n h = mask.xor(bigint).add(BigInteger.ONE);\r\n h = h.toString(16).replace(/^-/, \"\");\r\n }\r\n return h;\r\n}\r\n\r\nclass ASN1Object {\r\n constructor() {\r\n this.tlv = null;\r\n this.t = \"00\";\r\n this.l = \"00\";\r\n this.v = \"\";\r\n }\r\n\r\n /**\r\n * 获取 der 编码比特流16进制串\r\n */\r\n getEncodedHex() {\r\n if (!this.tlv) {\r\n this.v = this.getValue();\r\n this.l = this.getLength();\r\n this.tlv = this.t + this.l + this.v;\r\n }\r\n return this.tlv;\r\n }\r\n\r\n getLength() {\r\n const n = this.v.length / 2; // 字节数\r\n let nHex = n.toString(16);\r\n if (nHex.length % 2 === 1) nHex = \"0\" + nHex; // 补齐到整字节\r\n\r\n if (n < 128) {\r\n // 短格式,以 0 开头\r\n return nHex;\r\n } else {\r\n // 长格式,以 1 开头\r\n const head = 128 + nHex.length / 2; // 1(1位) + 真正的长度占用字节数(7位) + 真正的长度\r\n return head.toString(16) + nHex;\r\n }\r\n }\r\n\r\n getValue() {\r\n return \"\";\r\n }\r\n}\r\n\r\nclass DERInteger extends ASN1Object {\r\n constructor(bigint) {\r\n super();\r\n\r\n this.t = \"02\"; // 整型标签说明\r\n if (bigint) this.v = bigintToValue(bigint);\r\n }\r\n\r\n getValue() {\r\n return this.v;\r\n }\r\n}\r\n\r\nclass DERSequence extends ASN1Object {\r\n constructor(asn1Array) {\r\n super();\r\n\r\n this.t = \"30\"; // 序列标签说明\r\n this.asn1Array = asn1Array;\r\n }\r\n\r\n getValue() {\r\n this.v = this.asn1Array.map((asn1Object) => asn1Object.getEncodedHex()).join(\"\");\r\n return this.v;\r\n }\r\n}\r\n\r\n/**\r\n * 获取 l 占用字节数\r\n */\r\nfunction getLenOfL(str, start) {\r\n if (+str[start + 2] < 8) return 1; // l 以0开头,则表示短格式,只占一个字节\r\n return +str.substr(start + 2, 2) & (0x7f + 1); // 长格式,取第一个字节后7位作为长度真正占用字节数,再加上本身\r\n}\r\n\r\n/**\r\n * 获取 l\r\n */\r\nfunction getL(str, start) {\r\n // 获取 l\r\n const len = getLenOfL(str, start);\r\n const l = str.substr(start + 2, len * 2);\r\n\r\n if (!l) return -1;\r\n const bigint = +l[0] < 8 ? new BigInteger(l, 16) : new BigInteger(l.substr(2), 16);\r\n\r\n return bigint.intValue();\r\n}\r\n\r\n/**\r\n * 获取 v 的位置\r\n */\r\nfunction getStartOfV(str, start) {\r\n const len = getLenOfL(str, start);\r\n return start + (len + 1) * 2;\r\n}\r\n\r\n/**\r\n * ASN.1 der 编码,针对 sm2 签名\r\n */\r\nfunction encodeDer(r, s) {\r\n const derR = new DERInteger(r);\r\n const derS = new DERInteger(s);\r\n const derSeq = new DERSequence([derR, derS]);\r\n\r\n return derSeq.getEncodedHex();\r\n}\r\n\r\n/**\r\n * 解析 ASN.1 der,针对 sm2 验签\r\n */\r\nfunction decodeDer(input) {\r\n // 结构:\r\n // input = | tSeq | lSeq | vSeq |\r\n // vSeq = | tR | lR | vR | tS | lS | vS |\r\n const start = getStartOfV(input, 0);\r\n\r\n const vIndexR = getStartOfV(input, start);\r\n const lR = getL(input, start);\r\n const vR = input.substr(vIndexR, lR * 2);\r\n\r\n const nextStart = vIndexR + vR.length;\r\n const vIndexS = getStartOfV(input, nextStart);\r\n const lS = getL(input, nextStart);\r\n const vS = input.substr(vIndexS, lS * 2);\r\n\r\n const r = new BigInteger(vR, 16);\r\n const s = new BigInteger(vS, 16);\r\n\r\n return { r, s };\r\n}\r\n\r\nexport { encodeDer, decodeDer };\r\n","import * as jsbn from \"./jsbn.js\";\r\n\r\nconst { BigInteger } = jsbn;\r\n\r\n/**\r\n * thanks for Tom Wu : http://www-cs-students.stanford.edu/~tjw/jsbn/\r\n *\r\n * Basic Javascript Elliptic Curve implementation\r\n * Ported loosely from BouncyCastle's Java EC code\r\n * Only Fp curves implemented for now\r\n */\r\n\r\nconst TWO = new BigInteger(\"2\");\r\nconst THREE = new BigInteger(\"3\");\r\n\r\n/**\r\n * 椭圆曲线域元素\r\n */\r\nclass ECFieldElementFp {\r\n constructor(q, x) {\r\n this.x = x;\r\n this.q = q;\r\n // TODO if (x.compareTo(q) >= 0) error\r\n }\r\n\r\n /**\r\n * 判断相等\r\n */\r\n equals(other) {\r\n if (other === this) return true;\r\n return this.q.equals(other.q) && this.x.equals(other.x);\r\n }\r\n\r\n /**\r\n * 返回具体数值\r\n */\r\n toBigInteger() {\r\n return this.x;\r\n }\r\n\r\n /**\r\n * 取反\r\n */\r\n negate() {\r\n return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));\r\n }\r\n\r\n /**\r\n * 相加\r\n */\r\n add(b) {\r\n return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));\r\n }\r\n\r\n /**\r\n * 相减\r\n */\r\n subtract(b) {\r\n return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));\r\n }\r\n\r\n /**\r\n * 相乘\r\n */\r\n multiply(b) {\r\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));\r\n }\r\n\r\n /**\r\n * 相除\r\n */\r\n divide(b) {\r\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));\r\n }\r\n\r\n /**\r\n * 平方\r\n */\r\n square() {\r\n return new ECFieldElementFp(this.q, this.x.square().mod(this.q));\r\n }\r\n}\r\n\r\nclass ECPointFp {\r\n constructor(curve, x, y, z) {\r\n this.curve = curve;\r\n this.x = x;\r\n this.y = y;\r\n // 标准射影坐标系:zinv == null 或 z * zinv == 1\r\n this.z = z == null ? BigInteger.ONE : z;\r\n this.zinv = null;\r\n // TODO: compression flag\r\n }\r\n\r\n getX() {\r\n if (this.zinv === null) this.zinv = this.z.modInverse(this.curve.q);\r\n\r\n return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q));\r\n }\r\n\r\n getY() {\r\n if (this.zinv === null) this.zinv = this.z.modInverse(this.curve.q);\r\n\r\n return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q));\r\n }\r\n\r\n /**\r\n * 判断相等\r\n */\r\n equals(other) {\r\n if (other === this) return true;\r\n if (this.isInfinity()) return other.isInfinity();\r\n if (other.isInfinity()) return this.isInfinity();\r\n\r\n // u = y2 * z1 - y1 * z2\r\n const u = other.y\r\n .toBigInteger()\r\n .multiply(this.z)\r\n .subtract(this.y.toBigInteger().multiply(other.z))\r\n .mod(this.curve.q);\r\n if (!u.equals(BigInteger.ZERO)) return false;\r\n\r\n // v = x2 * z1 - x1 * z2\r\n const v = other.x\r\n .toBigInteger()\r\n .multiply(this.z)\r\n .subtract(this.x.toBigInteger().multiply(other.z))\r\n .mod(this.curve.q);\r\n return v.equals(BigInteger.ZERO);\r\n }\r\n\r\n /**\r\n * 是否是无穷远点\r\n */\r\n isInfinity() {\r\n if (this.x === null && this.y === null) return true;\r\n return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);\r\n }\r\n\r\n /**\r\n * 取反,x 轴对称点\r\n */\r\n negate() {\r\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\r\n }\r\n\r\n /**\r\n * 相加\r\n *\r\n * 标准射影坐标系:\r\n *\r\n * λ1 = x1 * z2\r\n * λ2 = x2 * z1\r\n * λ3 = λ1 − λ2\r\n * λ4 = y1 * z2\r\n * λ5 = y2 * z1\r\n * λ6 = λ4 − λ5\r\n * λ7 = λ1 + λ2\r\n * λ8 = z1 * z2\r\n * λ9 = λ3^2\r\n * λ10 = λ3 * λ9\r\n * λ11 = λ8 * λ6^2 − λ7 * λ9\r\n * x3 = λ3 * λ11\r\n * y3 = λ6 * (λ9 * λ1 − λ11) − λ4 * λ10\r\n * z3 = λ10 * λ8\r\n */\r\n add(b) {\r\n if (this.isInfinity()) return b;\r\n if (b.isInfinity()) return this;\r\n\r\n const x1 = this.x.toBigInteger();\r\n const y1 = this.y.toBigInteger();\r\n const z1 = this.z;\r\n const x2 = b.x.toBigInteger();\r\n const y2 = b.y.toBigInteger();\r\n const z2 = b.z;\r\n const q = this.curve.q;\r\n\r\n const w1 = x1.multiply(z2).mod(q);\r\n const w2 = x2.multiply(z1).mod(q);\r\n const w3 = w1.subtract(w2);\r\n const w4 = y1.multiply(z2).mod(q);\r\n const w5 = y2.multiply(z1).mod(q);\r\n const w6 = w4.subtract(w5);\r\n\r\n if (BigInteger.ZERO.equals(w3)) {\r\n if (BigInteger.ZERO.equals(w6)) {\r\n return this.twice(); // this == b,计算自加\r\n }\r\n return this.curve.infinity; // this == -b,则返回无穷远点\r\n }\r\n\r\n const w7 = w1.add(w2);\r\n const w8 = z1.multiply(z2).mod(q);\r\n const w9 = w3.square().mod(q);\r\n const w10 = w3.multiply(w9).mod(q);\r\n const w11 = w8.multiply(w6.square()).subtract(w7.multiply(w9)).mod(q);\r\n\r\n const x3 = w3.multiply(w11).mod(q);\r\n const y3 = w6.multiply(w9.multiply(w1).subtract(w11)).subtract(w4.multiply(w10)).mod(q);\r\n const z3 = w10.multiply(w8).mod(q);\r\n\r\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\r\n }\r\n\r\n /**\r\n * 自加\r\n *\r\n * 标准射影坐标系:\r\n *\r\n * λ1 = 3 * x1^2 + a * z1^2\r\n * λ2 = 2 * y1 * z1\r\n * λ3 = y1^2\r\n * λ4 = λ3 * x1 * z1\r\n * λ5 = λ2^2\r\n * λ6 = λ1^2 − 8 * λ4\r\n * x3 = λ2 * λ6\r\n * y3 = λ1 * (4 * λ4 − λ6) − 2 * λ5 * λ3\r\n * z3 = λ2 * λ5\r\n */\r\n twice() {\r\n if (this.isInfinity()) return this;\r\n if (!this.y.toBigInteger().signum()) return this.curve.infinity;\r\n\r\n const x1 = this.x.toBigInteger();\r\n const y1 = this.y.toBigInteger();\r\n const z1 = this.z;\r\n const q = this.curve.q;\r\n const a = this.curve.a.toBigInteger();\r\n\r\n const w1 = x1.square().multiply(THREE).add(a.multiply(z1.square())).mod(q);\r\n const w2 = y1.shiftLeft(1).multiply(z1).mod(q);\r\n const w3 = y1.square().mod(q);\r\n const w4 = w3.multiply(x1).multiply(z1).mod(q);\r\n const w5 = w2.square().mod(q);\r\n const w6 = w1.square().subtract(w4.shiftLeft(3)).mod(q);\r\n\r\n const x3 = w2.multiply(w6).mod(q);\r\n const y3 = w1.multiply(w4.shiftLeft(2).subtract(w6)).subtract(w5.shiftLeft(1).multiply(w3)).mod(q);\r\n const z3 = w2.multiply(w5).mod(q);\r\n\r\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\r\n }\r\n\r\n /**\r\n * 倍点计算\r\n */\r\n multiply(k) {\r\n if (this.isInfinity()) return this;\r\n if (!k.signum()) return this.curve.infinity;\r\n\r\n // 使用加减法\r\n const k3 = k.multiply(THREE);\r\n const neg = this.negate();\r\n let Q = this;\r\n\r\n for (let i = k3.bitLength() - 2; i > 0; i--) {\r\n Q = Q.twice();\r\n\r\n const k3Bit = k3.testBit(i);\r\n const kBit = k.testBit(i);\r\n\r\n if (k3Bit !== kBit) {\r\n Q = Q.add(k3Bit ? this : neg);\r\n }\r\n }\r\n\r\n return Q;\r\n }\r\n}\r\n\r\n/**\r\n * 椭圆曲线 y^2 = x^3 + ax + b\r\n */\r\nclass ECCurveFp {\r\n constructor(q, a, b) {\r\n this.q = q;\r\n this.a = this.fromBigInteger(a);\r\n this.b = this.fromBigInteger(b);\r\n this.infinity = new ECPointFp(this, null, null); // 无穷远点\r\n }\r\n\r\n /**\r\n * 判断两个椭圆曲线是否相等\r\n */\r\n equals(other) {\r\n if (other === this) return true;\r\n return this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b);\r\n }\r\n\r\n /**\r\n * 生成椭圆曲线域元素\r\n */\r\n fromBigInteger(x) {\r\n return new ECFieldElementFp(this.q, x);\r\n }\r\n\r\n /**\r\n * 解析 16 进制串为椭圆曲线点\r\n */\r\n decodePointHex(s) {\r\n switch (parseInt(s.substr(0, 2), 16)) {\r\n // 第一个字节\r\n case 0:\r\n return this.infinity;\r\n case 2:\r\n case 3:\r\n // 压缩\r\n const x = this.fromBigInteger(new BigInteger(s.substr(2), 16));\r\n // 对 p ≡ 3 (mod4),即存在正整数 u,使得 p = 4u + 3\r\n // 计算 y = (√ (x^3 + ax + b) % p)^(u + 1) modp\r\n let y = this.fromBigInteger(\r\n x\r\n .multiply(x.square())\r\n .add(x.multiply(this.a))\r\n .add(this.b)\r\n .toBigInteger()\r\n .modPow(this.q.divide(new BigInteger(\"4\")).add(BigInteger.ONE), this.q),\r\n );\r\n // 算出结果 2 进制最后 1 位不等于第 1 个字节减 2 则取反\r\n if (\r\n !y\r\n .toBigInteger()\r\n .mod(TWO)\r\n .equals(new BigInteger(s.substr(0, 2), 16).subtract(TWO))\r\n ) {\r\n y = y.negate();\r\n }\r\n return new ECPointFp(this, x, y);\r\n case 4:\r\n case 6:\r\n case 7:\r\n const len = (s.length - 2) / 2;\r\n const xHex = s.substr(2, len);\r\n const yHex = s.substr(len + 2, len);\r\n\r\n return new ECPointFp(\r\n this,\r\n this.fromBigInteger(new BigInteger(xHex, 16)),\r\n this.fromBigInteger(new BigInteger(yHex, 16)),\r\n );\r\n default:\r\n // 不支持\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport { ECPointFp, ECCurveFp };\r\n","import * as jsbn from \"./jsbn.js\";\r\nimport * as ec from \"./ec.js\";\r\n\r\nconst { BigInteger, SecureRandom } = jsbn;\r\nconst { ECCurveFp } = ec;\r\n\r\nconst rng = new SecureRandom();\r\nconst { curve, G, n } = generateEcparam();\r\n\r\n/**\r\n * 获取公共椭圆曲线\r\n */\r\nfunction getGlobalCurve() {\r\n return curve;\r\n}\r\n\r\n/**\r\n * 生成ecparam\r\n */\r\nfunction generateEcparam() {\r\n // 椭圆曲线\r\n const p = new BigInteger(\"FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF\", 16);\r\n const a = new BigInteger(\"FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC\", 16);\r\n const b = new BigInteger(\"28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93\", 16);\r\n const curve = new ECCurveFp(p, a, b);\r\n\r\n // 基点\r\n const gxHex = \"32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7\";\r\n const gyHex = \"BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0\";\r\n const G = curve.decodePointHex(\"04\" + gxHex + gyHex);\r\n\r\n const n = new BigInteger(\"FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123\", 16);\r\n\r\n return { curve, G, n };\r\n}\r\n\r\n/**\r\n * 生成密钥对:publicKey = privateKey * G\r\n */\r\nfunction generateKeyPairHex(a, b, c) {\r\n const random = a ? new BigInteger(a, b, c) : new BigInteger(n.bitLength(), rng);\r\n const d = random.mod(n.subtract(BigInteger.ONE)).add(BigInteger.ONE); // 随机数\r\n const privateKey = leftPad(d.toString(16), 64);\r\n\r\n const P = G.multiply(d); // P = dG,p 为公钥,d 为私钥\r\n const Px = leftPad(P.getX().toBigInteger().toString(16), 64);\r\n const Py = leftPad(P.getY().toBigInteger().toString(16), 64);\r\n const publicKey = \"04\" + Px + Py;\r\n\r\n return { privateKey, publicKey };\r\n}\r\n\r\n/**\r\n * 生成压缩公钥\r\n */\r\nfunction compressPublicKeyHex(s) {\r\n if (s.length !== 130) throw new Error(\"Invalid public key to compress\");\r\n\r\n const len = (s.length - 2) / 2;\r\n const xHex = s.substr(2, len);\r\n const y = new BigInteger(s.substr(len + 2, len), 16);\r\n\r\n let prefix = \"03\";\r\n if (y.mod(new BigInteger(\"2\")).equals(BigInteger.ZERO)) prefix = \"02\";\r\n\r\n return prefix + xHex;\r\n}\r\n\r\n/**\r\n * utf8串转16进制串\r\n */\r\nfunction utf8ToHex(input) {\r\n input = unescape(encodeURIComponent(input));\r\n\r\n const length = input.length;\r\n\r\n // 转换到字数组\r\n const words = [];\r\n for (let i = 0; i < length; i++) {\r\n words[i >>> 2] |= (input.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\r\n }\r\n\r\n // 转换到16进制\r\n const hexChars = [];\r\n for (let i = 0; i < length; i++) {\r\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n hexChars.push((bite >>> 4).toString(16));\r\n hexChars.push((bite & 0x0f).toString(16));\r\n }\r\n\r\n return hexChars.join(\"\");\r\n}\r\n\r\n/**\r\n * 补全16进制字符串\r\n */\r\nfunction leftPad(input, num) {\r\n if (input.length >= num) return input;\r\n\r\n return new Array(num - input.length + 1).join(\"0\") + input;\r\n}\r\n\r\n/**\r\n * 转成16进制串\r\n */\r\nfunction arrayToHex(arr) {\r\n return arr\r\n .map((item) => {\r\n item = item.toString(16);\r\n return item.length === 1 ? \"0\" + item : item;\r\n })\r\n .join(\"\");\r\n}\r\n\r\n/**\r\n * 转成utf8串\r\n */\r\nfunction arrayToUtf8(arr) {\r\n const words = [];\r\n let j = 0;\r\n for (let i = 0; i < arr.length * 2; i += 2) {\r\n words[i >>> 3] |= parseInt(arr[j], 10) << (24 - (i % 8) * 4);\r\n j++;\r\n }\r\n\r\n try {\r\n const latin1Chars = [];\r\n\r\n for (let i = 0; i < arr.length; i++) {\r\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n latin1Chars.push(String.fromCharCode(bite));\r\n }\r\n\r\n return decodeURIComponent(escape(latin1Chars.join(\"\")));\r\n } catch (e) {\r\n throw new Error(\"Malformed UTF-8 data\");\r\n }\r\n}\r\n\r\n/**\r\n * 转成字节数组\r\n */\r\nfunction hexToArray(hexStr) {\r\n const words = [];\r\n let hexStrLength = hexStr.length;\r\n\r\n if (hexStrLength % 2 !== 0) {\r\n hexStr = leftPad(hexStr, hexStrLength + 1);\r\n }\r\n\r\n hexStrLength = hexStr.length;\r\n\r\n for (let i = 0; i < hexStrLength; i += 2) {\r\n words.push(parseInt(hexStr.substr(i, 2), 16));\r\n }\r\n return words;\r\n}\r\n\r\n/**\r\n * 验证公钥是否为椭圆曲线上的点\r\n */\r\nfunction verifyPublicKey(publicKey) {\r\n const point = curve.decodePointHex(publicKey);\r\n if (!point) return false;\r\n\r\n const x = point.getX();\r\n const y = point.getY();\r\n\r\n // 验证 y^2 是否等于 x^3 + ax + b\r\n return y.square().equals(x.multiply(x.square()).add(x.multiply(curve.a)).add(curve.b));\r\n}\r\n\r\n/**\r\n * 验证公钥是否等价,等价返回true\r\n */\r\nfunction comparePublicKeyHex(publicKey1, publicKey2) {\r\n const point1 = curve.decodePointHex(publicKey1);\r\n if (!point1) return false;\r\n\r\n const point2 = curve.decodePointHex(publicKey2);\r\n if (!point2) return false;\r\n\r\n return point1.equals(point2);\r\n}\r\n\r\nexport {\r\n getGlobalCurve,\r\n generateEcparam,\r\n generateKeyPairHex,\r\n compressPublicKeyHex,\r\n utf8ToHex,\r\n leftPad,\r\n arrayToHex,\r\n arrayToUtf8,\r\n hexToArray,\r\n verifyPublicKey,\r\n comparePublicKeyHex,\r\n};\r\n","// 消息扩展\r\nconst W = new Uint32Array(68);\r\nconst M = new Uint32Array(64); // W'\r\n\r\n/**\r\n * 循环左移\r\n */\r\nfunction rotl(x, n) {\r\n const s = n & 31;\r\n return (x << s) | (x >>> (32 - s));\r\n}\r\n\r\n/**\r\n * 二进制异或运算\r\n */\r\nfunction xor(x, y) {\r\n const result = [];\r\n for (let i = x.length - 1; i >= 0; i--) result[i] = (x[i] ^ y[i]) & 0xff;\r\n return result;\r\n}\r\n\r\n/**\r\n * 压缩函数中的置换函数 P0(X) = X xor (X <<< 9) xor (X <<< 17)\r\n */\r\nfunction P0(X) {\r\n return X ^ rotl(X, 9) ^ rotl(X, 17);\r\n}\r\n\r\n/**\r\n * 消息扩展中的置换函数 P1(X) = X xor (X <<< 15) xor (X <<< 23)\r\n */\r\nfunction P1(X) {\r\n return X ^ rotl(X, 15) ^ rotl(X, 23);\r\n}\r\n\r\n/**\r\n * sm3 本体\r\n */\r\nfunction sm3(array) {\r\n let len = array.length * 8;\r\n\r\n // k 是满足 len + 1 + k = 448mod512 的最小的非负整数\r\n let k = len % 512;\r\n // 如果 448 <= (512 % len) < 512,需要多补充 (len % 448) 比特'0'以满足总比特长度为512的倍数\r\n k = k >= 448 ? 512 - (k % 448) - 1 : 448 - k - 1;\r\n\r\n // 填充\r\n const kArr = new Array((k - 7) / 8);\r\n const lenArr = new Array(8);\r\n for (let i = 0, len = kArr.length; i < len; i++) kArr[i] = 0;\r\n for (let i = 0, len = lenArr.length; i < len; i++) lenArr[i] = 0;\r\n len = len.toString(2);\r\n for (let i = 7; i >= 0; i--) {\r\n if (len.length > 8) {\r\n const start = len.length - 8;\r\n lenArr[i] = parseInt(len.substr(start), 2);\r\n len = len.substr(0, start);\r\n } else if (len.length > 0) {\r\n lenArr[i] = parseInt(len, 2);\r\n len = \"\";\r\n }\r\n }\r\n const m = new Uint8Array([...array, 0x80, ...kArr, ...lenArr]);\r\n const dataView = new DataView(m.buffer, 0);\r\n\r\n // 迭代压缩\r\n const n = m.length / 64;\r\n const V = new Uint32Array([\r\n 0x7380166f, 0x4914b2b9, 0x172442d7, 0xda8a0600, 0xa96f30bc, 0x163138aa, 0xe38dee4d, 0xb0fb0e4e,\r\n ]);\r\n for (let i = 0; i < n; i++) {\r\n W.fill(0);\r\n M.fill(0);\r\n\r\n // 将消息分组B划分为 16 个字 W0, W1,……,W15\r\n const start = 16 * i;\r\n for (let j = 0; j < 16; j++) {\r\n W[j] = dataView.getUint32((start + j) * 4, false);\r\n }\r\n\r\n // W16 ~ W67:W[j] <- P1(W[j−16] xor W[j−9] xor (W[j−3] <<< 15)) xor (W[j−13] <<< 7) xor W[j−6]\r\n for (let j = 16; j < 68; j++) {\r\n W[j] = P1(W[j - 16] ^ W[j - 9] ^ rotl(W[j - 3], 15)) ^ rotl(W[j - 13], 7) ^ W[j - 6];\r\n }\r\n\r\n // W′0 ~ W′63:W′[j] = W[j] xor W[j+4]\r\n for (let j = 0; j < 64; j++) {\r\n M[j] = W[j] ^ W[j + 4];\r\n }\r\n\r\n // 压缩\r\n const T1 = 0x79cc4519;\r\n const T2 = 0x7a879d8a;\r\n // 字寄存器\r\n let A = V[0];\r\n let B = V[1];\r\n let C = V[2];\r\n let D = V[3];\r\n let E = V[4];\r\n let F = V[5];\r\n let G = V[6];\r\n let H = V[7];\r\n // 中间变量\r\n let SS1;\r\n let SS2;\r\n let TT1;\r\n let TT2;\r\n let T;\r\n for (let j = 0; j < 64; j++) {\r\n T = j >= 0 && j <= 15 ? T1 : T2;\r\n SS1 = rotl(rotl(A, 12) + E + rotl(T, j), 7);\r\n SS2 = SS1 ^ rotl(A, 12);\r\n\r\n TT1 = (j >= 0 && j <= 15 ? A ^ B ^ C : (A & B) | (A & C) | (B & C)) + D + SS2 + M[j];\r\n TT2 = (j >= 0 && j <= 15 ? E ^ F ^ G : (E & F) | (~E & G)) + H + SS1 + W[j];\r\n\r\n D = C;\r\n C = rotl(B, 9);\r\n B = A;\r\n A = TT1;\r\n H = G;\r\n G = rotl(F, 19);\r\n F = E;\r\n E = P0(TT2);\r\n }\r\n\r\n V[0] ^= A;\r\n V[1] ^= B;\r\n V[2] ^= C;\r\n V[3] ^= D;\r\n V[4] ^= E;\r\n V[5] ^= F;\r\n V[6] ^= G;\r\n V[7] ^= H;\r\n }\r\n\r\n // 转回 uint8\r\n const result = [];\r\n for (let i = 0, len = V.length; i < len; i++) {\r\n const word = V[i];\r\n result.push((word & 0xff000000) >>> 24, (word & 0xff0000) >>> 16, (word & 0xff00) >>> 8, word & 0xff);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * hmac 实现\r\n */\r\nconst blockLen = 64;\r\nconst iPad = new Uint8Array(blockLen);\r\nconst oPad = new Uint8Array(blockLen);\r\nfor (let i = 0; i < blockLen; i++) {\r\n iPad[i] = 0x36;\r\n oPad[i] = 0x5c;\r\n}\r\n\r\nfunction hmac(input, key) {\r\n // 密钥填充\r\n if (key.length > blockLen) key = sm3(key);\r\n while (key.length < blockLen) key.push(0);\r\n\r\n const iPadKey = xor(key, iPad);\r\n const oPadKey = xor(key, oPad);\r\n\r\n const hash = sm3([...iPadKey, ...input]);\r\n return sm3([...oPadKey, ...hash]);\r\n}\r\n\r\nexport { sm3, hmac };\r\n","import * as jsbn from \"../lib/jsbn.js\";\r\nimport * as asn1 from \"../lib/asn1.js\";\r\nimport * as _ from \"../lib/utils.js\";\r\nimport { sm3 } from \"../lib/sm3.js\";\r\n\r\nconst { BigInteger } = jsbn;\r\nconst { decodeDer, encodeDer } = asn1;\r\n\r\nconst { G, curve, n } = _.generateEcparam();\r\nconst C1C2C3 = 0;\r\n\r\n/**\r\n * 加密\r\n */\r\nfunction doEncrypt(msg, publicKey, cipherMode = 1) {\r\n msg = typeof msg === \"string\" ? _.hexToArray(_.utf8ToHex(msg)) : Array.prototype.slice.call(msg);\r\n publicKey = _.getGlobalCurve().decodePointHex(publicKey); // 先将公钥转成点\r\n\r\n const keypair = _.generateKeyPairHex();\r\n const k = new BigInteger(keypair.privateKey, 16); // 随机数 k\r\n\r\n // c1 = k * G\r\n let c1 = keypair.publicKey;\r\n if (c1.length > 128) c1 = c1.substr(c1.length - 128);\r\n\r\n // (x2, y2) = k * publicKey\r\n const p = publicKey.multiply(k);\r\n const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64));\r\n const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64));\r\n\r\n // c3 = hash(x2 || msg || y2)\r\n const c3 = _.arrayToHex(sm3([].concat(x2, msg, y2)));\r\n\r\n let ct = 1;\r\n let offset = 0;\r\n let t = []; // 256 位\r\n const z = [].concat(x2, y2);\r\n const nextT = () => {\r\n // (1) Hai = hash(z || ct)\r\n // (2) ct++\r\n t = sm3([...z, (ct >> 24) & 0x00ff, (ct >> 16) & 0x00ff, (ct >> 8) & 0x00ff, ct & 0x00ff]);\r\n ct++;\r\n offset = 0;\r\n };\r\n nextT(); // 先生成 Ha1\r\n\r\n for (let i = 0, len = msg.length; i < len; i++) {\r\n // t = Ha1 || Ha2 || Ha3 || Ha4\r\n if (offset === t.length) nextT();\r\n\r\n // c2 = msg ^ t\r\n msg[i] ^= t[offset++] & 0xff;\r\n }\r\n const c2 = _.arrayToHex(msg);\r\n\r\n return cipherMode === C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2;\r\n}\r\n\r\n/**\r\n * 解密\r\n */\r\nfunction doDecrypt(encryptData, privateKey, cipherMode = 1, { output = \"string\" } = {}) {\r\n privateKey = new BigInteger(privateKey, 16);\r\n\r\n let c3 = encryptData.substr(128, 64);\r\n let c2 = encryptData.substr(128 + 64);\r\n\r\n if (cipherMode === C1C2C3) {\r\n c3 = encryptData.substr(encryptData.length - 64);\r\n c2 = encryptData.substr(128, encryptData.length - 128 - 64);\r\n }\r\n\r\n const msg = _.hexToArray(c2);\r\n const c1 = _.getGlobalCurve().decodePointHex(\"04\" + encryptData.substr(0, 128));\r\n\r\n const p = c1.multiply(privateKey);\r\n const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64));\r\n const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64));\r\n\r\n let ct = 1;\r\n let offset = 0;\r\n let t = []; // 256 位\r\n const z = [].concat(x2, y2);\r\n const nextT = () => {\r\n // (1) Hai = hash(z || ct)\r\n // (2) ct++\r\n t = sm3([...z, (ct >> 24) & 0x00ff, (ct >> 16) & 0x00ff, (ct >> 8) & 0x00ff, ct & 0x00ff]);\r\n ct++;\r\n offset = 0;\r\n };\r\n nextT(); // 先生成 Ha1\r\n\r\n for (let i = 0, len = msg.length; i < len; i++) {\r\n // t = Ha1 || Ha2 || Ha3 || Ha4\r\n if (offset === t.length) nextT();\r\n\r\n // c2 = msg ^ t\r\n msg[i] ^= t[offset++] & 0xff;\r\n }\r\n\r\n // c3 = hash(x2 || msg || y2)\r\n const checkC3 = _.arrayToHex(sm3([].concat(x2, msg, y2)));\r\n\r\n if (checkC3 === c3.toLowerCase()) {\r\n return output === \"array\" ? msg : _.arrayToUtf8(msg);\r\n } else {\r\n return output === \"array\" ? [] : \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 签名\r\n */\r\nfunction doSignature(msg, privateKey, { pointPool, der, hash, publicKey, userId } = {}) {\r\n let hashHex = typeof msg === \"string\" ? _.utf8ToHex(msg) : _.arrayToHex(msg);\r\n\r\n if (hash) {\r\n // sm3杂凑\r\n publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey);\r\n hashHex = getHash(hashHex, publicKey, userId);\r\n }\r\n\r\n const dA = new BigInteger(privateKey, 16);\r\n const e = new BigInteger(hashHex, 16);\r\n\r\n // k\r\n let k = null;\r\n let r = null;\r\n let s = null;\r\n\r\n do {\r\n do {\r\n let point;\r\n if (pointPool && pointPool.length) {\r\n point = pointPool.pop();\r\n } else {\r\n point = getPoint();\r\n }\r\n k = point.k;\r\n\r\n // r = (e + x1) mod n\r\n r = e.add(point.x1).mod(n);\r\n } while (r.equals(BigInteger.ZERO) || r.add(k).equals(n));\r\n\r\n // s = ((1 + dA)^-1 * (k - r * dA)) mod n\r\n s = dA\r\n .add(BigInteger.ONE)\r\n .modInverse(n)\r\n .multiply(k.subtract(r.multiply(dA)))\r\n .mod(n);\r\n } while (s.equals(BigInteger.ZERO));\r\n\r\n if (der) return encodeDer(r, s); // asn.1 der 编码\r\n\r\n return _.leftPad(r.toString(16), 64) + _.leftPad(s.toString(16), 64);\r\n}\r\n\r\n/**\r\n * 验签\r\n */\r\nfunction doVerifySignature(msg, signHex, publicKey, { der, hash, userId } = {}) {\r\n let hashHex = typeof msg === \"string\" ? _.utf8ToHex(msg) : _.arrayToHex(msg);\r\n\r\n if (hash) {\r\n // sm3杂凑\r\n hashHex = getHash(hashHex, publicKey, userId);\r\n }\r\n\r\n let r;\r\n let s;\r\n if (der) {\r\n const decodeDerObj = decodeDer(signHex); // asn.1 der 解码\r\n r = decodeDerObj.r;\r\n s = decodeDerObj.s;\r\n } else {\r\n r = new BigInteger(signHex.substring(0, 64), 16);\r\n s = new BigInteger(signHex.substring(64), 16);\r\n }\r\n\r\n const PA = curve.decodePointHex(publicKey);\r\n const e = new BigInteger(hashHex, 16);\r\n\r\n // t = (r + s) mod n\r\n const t = r.add(s).mod(n);\r\n\r\n if (t.equals(BigInteger.ZERO)) return false;\r\n\r\n // x1y1 = s * G + t * PA\r\n const x1y1 = G.multiply(s).add(PA.multiply(t));\r\n\r\n // R = (e + x1) mod n\r\n const R = e.add(x1y1.getX().toBigInteger()).mod(n);\r\n\r\n return r.equals(R);\r\n}\r\n\r\n/**\r\n * sm3杂凑算法\r\n */\r\nfunction getHash(hashHex, publicKey, userId = \"1234567812345678\") {\r\n // z = hash(entl || userId || a || b || gx || gy || px || py)\r\n userId = _.utf8ToHex(userId);\r\n const a = _.leftPad(G.curve.a.toBigInteger().toRadix(16), 64);\r\n const b = _.leftPad(G.curve.b.toBigInteger().toRadix(16), 64);\r\n const gx = _.leftPad(G.getX().toBigInteger().toRadix(16), 64);\r\n const gy = _.leftPad(G.getY().toBigInteger().toRadix(16), 64);\r\n let px;\r\n let py;\r\n if (publicKey.length === 128) {\r\n px = publicKey.substr(0, 64);\r\n py = publicKey.substr(64, 64);\r\n } else {\r\n const point = G.curve.decodePointHex(publicKey);\r\n px = _.leftPad(point.getX().toBigInteger().toRadix(16), 64);\r\n py = _.leftPad(point.getY().toBigInteger().toRadix(16), 64);\r\n }\r\n const data = _.hexToArray(userId + a + b + gx + gy + px + py);\r\n\r\n const entl = userId.length * 4;\r\n data.unshift(entl & 0x00ff);\r\n data.unshift((entl >> 8) & 0x00ff);\r\n\r\n const z = sm3(data);\r\n\r\n // e = hash(z || msg)\r\n return _.arrayToHex(sm3(z.concat(_.hexToArray(hashHex))));\r\n}\r\n\r\n/**\r\n * 计算公钥\r\n */\r\nfunction getPublicKeyFromPrivateKey(privateKey) {\r\n const PA = G.multiply(new BigInteger(privateKey, 16));\r\n const x = _.leftPad(PA.getX().toBigInteger().toString(16), 64);\r\n const y = _.leftPad(PA.getY().toBigInteger().toString(16), 64);\r\n return \"04\" + x + y;\r\n}\r\n\r\n/**\r\n * 获取椭圆曲线点\r\n */\r\nfunction getPoint() {\r\n const keypair = _.generateKeyPairHex();\r\n const PA = curve.decodePointHex(keypair.publicKey);\r\n\r\n keypair.k = new BigInteger(keypair.privateKey, 16);\r\n keypair.x1 = PA.getX().toBigInteger();\r\n\r\n return keypair;\r\n}\r\n\r\n// es6 export\r\nexport const generateKeyPairHex = _.generateKeyPairHex;\r\nexport const compressPublicKeyHex = _.compressPublicKeyHex;\r\nexport const comparePublicKeyHex = _.comparePublicKeyHex;\r\nexport const verifyPublicKey = _.verifyPublicKey;\r\nexport { doEncrypt, doDecrypt, doSignature, doVerifySignature, getPublicKeyFromPrivateKey, getPoint };\r\n","import * as SM2 from \"./sm2.js\";\r\n\r\n// 获取密钥对\r\n/**\r\n * sm2 生成公钥和私钥\r\n * @param {String} str 字符串\r\n * @param {Number} rnd 随机数\r\n * @returns {Object} 返回公钥和私钥\r\n */\r\nexport function generateKeyPairHex(str, rnd) {\r\n return SM2.generateKeyPairHex(str, rnd);\r\n}\r\n\r\n/**\r\n * sm2 压缩公钥\r\n * @param {String} publicKey 公钥\r\n * @returns {String} 返回公钥字符串\r\n */\r\nexport function compressPublicKeyHex(publicKey) {\r\n return SM2.compressPublicKeyHex(publicKey);\r\n}\r\n\r\n/**\r\n * sm2 对比公钥是否等价\r\n * @param {String} publicKey 公钥\r\n * @param {String} compressedPublicKey 压缩后的公钥\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function comparePublicKeyHex(publicKey, compressedPublicKey) {\r\n return SM2.comparePublicKeyHex(publicKey, compressedPublicKey);\r\n}\r\n\r\n// 验证密钥对\r\n/**\r\n * sm2 验证公钥\r\n * @param {String} publicKey 公钥,也可以传压缩后的公钥\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function verifyPublicKey(publicKey) {\r\n return SM2.verifyPublicKey(publicKey);\r\n}\r\n\r\n// 加密解密\r\n/**\r\n * sm2 加密\r\n * @param {String} str 字符串\r\n * @param {String} publicKey 公钥\r\n * @param {Number} cipherMode 加密模式,1(C1C3C2)和0(C1C2C3),默认1\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encrypt(str, publicKey, cipherMode = 1) {\r\n return SM2.doEncrypt(str, publicKey, cipherMode);\r\n}\r\n\r\n/**\r\n * sm2 解密\r\n * @param {String} str 字符串\r\n * @param {String} privateKey 私钥\r\n * @param {Number} cipherMode 解密模式,1(C1C3C2)和0(C1C2C3),默认1\r\n * @param {Object} outputConfig 输出结果配置,{output:'string/array'}\r\n * @returns {String,Array} 返回解密后的数据\r\n */\r\nexport function decrypt(str, privateKey, cipherMode = 1, outputConfig = { output: \"string\" }) {\r\n return SM2.doDecrypt(str, privateKey, cipherMode, outputConfig);\r\n}\r\n\r\n// 签名验签\r\n/**\r\n * sm2 生成签名\r\n * @param {String} str 字符串\r\n * @param {String} privateKey 私钥\r\n * @param {Object} signatureConfig 签名配置\r\n * @returns {String} 返回签名信息\r\n */\r\nexport function doSignature(str, privateKey, signatureConfig) {\r\n return SM2.doSignature(str, privateKey, signatureConfig);\r\n}\r\n\r\n/**\r\n * sm2 验证签名\r\n * @param {String} str 字符串\r\n * @param {String} signHex 生成签名的信息\r\n * @param {String} publicKey 公钥\r\n * @param {Object} verifyConfig 验证配置\r\n * @returns {String} 返回结果\r\n */\r\nexport function doVerifySignature(str, signHex, publicKey, verifyConfig) {\r\n return SM2.doVerifySignature(str, signHex, publicKey, verifyConfig);\r\n}\r\n\r\n// 获取椭圆曲线点\r\n/**\r\n * sm2 获取椭圆曲线点\r\n * @returns {Object} 返回椭圆曲线点,可在sm2签名时传入\r\n */\r\nexport function getPoint() {\r\n return SM2.getPoint();\r\n}\r\n\r\n// 根据私钥获取公钥\r\n\r\n/**\r\n * sm2 根据私钥获取公钥\r\n * @param {String} privateKey 私钥\r\n * @returns {String} 返回公钥\r\n */\r\nexport function getPublicKeyFromPrivateKey(privateKey) {\r\n return SM2.getPublicKeyFromPrivateKey(privateKey);\r\n}\r\n","import { sm3, hmac } from \"../lib/sm3.js\";\r\n\r\n/**\r\n * 补全16进制字符串\r\n */\r\nfunction leftPad(input, num) {\r\n if (input.length >= num) return input;\r\n\r\n return new Array(num - input.length + 1).join(\"0\") + input;\r\n}\r\n\r\n/**\r\n * 字节数组转 16 进制串\r\n */\r\nfunction ArrayToHex(arr) {\r\n return arr\r\n .map((item) => {\r\n item = item.toString(16);\r\n return item.length === 1 ? \"0\" + item : item;\r\n })\r\n .join(\"\");\r\n}\r\n\r\n/**\r\n * 转成字节数组\r\n */\r\nfunction hexToArray(hexStr) {\r\n const words = [];\r\n let hexStrLength = hexStr.length;\r\n\r\n if (hexStrLength % 2 !== 0) {\r\n hexStr = leftPad(hexStr, hexStrLength + 1);\r\n }\r\n\r\n hexStrLength = hexStr.length;\r\n\r\n for (let i = 0; i < hexStrLength; i += 2) {\r\n words.push(parseInt(hexStr.substr(i, 2), 16));\r\n }\r\n return words;\r\n}\r\n\r\n/**\r\n * utf8 串转字节数组\r\n */\r\nfunction utf8ToArray(str) {\r\n const arr = [];\r\n\r\n for (let i = 0, len = str.length; i < len; i++) {\r\n const point = str.codePointAt(i);\r\n\r\n if (point <= 0x007f) {\r\n // 单字节,标量值:00000000 00000000 0zzzzzzz\r\n arr.push(point);\r\n } else if (point <= 0x07ff) {\r\n // 双字节,标量值:00000000 00000yyy yyzzzzzz\r\n arr.push(0xc0 | (point >>> 6)); // 110yyyyy(0xc0-0xdf)\r\n arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)\r\n } else if (point <= 0xd7ff || (point >= 0xe000 && point <= 0xffff)) {\r\n // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz\r\n arr.push(0xe0 | (point >>> 12)); // 1110xxxx(0xe0-0xef)\r\n arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)\r\n arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)\r\n } else if (point >= 0x010000 && point <= 0x10ffff) {\r\n // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz\r\n i++;\r\n arr.push(0xf0 | ((point >>> 18) & 0x1c)); // 11110www(0xf0-0xf7)\r\n arr.push(0x80 | ((point >>> 12) & 0x3f)); // 10xxxxxx(0x80-0xbf)\r\n arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)\r\n arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)\r\n } else {\r\n // 五、六字节,暂时不支持\r\n arr.push(point);\r\n throw new Error(\"input is not supported\");\r\n }\r\n }\r\n\r\n return arr;\r\n}\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport default function (input, options) {\r\n input = typeof input === \"string\" ? utf8ToArray(input) : Array.prototype.slice.call(input);\r\n\r\n if (options) {\r\n const mode = options.mode || \"hmac\";\r\n if (mode !== \"hmac\") throw new Error(\"invalid mode\");\r\n\r\n let key = options.key;\r\n if (!key) throw new Error(\"invalid key\");\r\n\r\n key = typeof key === \"string\" ? hexToArray(key) : Array.prototype.slice.call(key);\r\n return ArrayToHex(hmac(input, key));\r\n }\r\n\r\n return ArrayToHex(sm3(input));\r\n}\r\n","import SM3 from \"./sm3.js\";\r\n\r\n/**\r\n * sm3 加密\r\n * @param {String} str 字符串\r\n * @param {Object} options 配置\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encrypt(str, options) {\r\n return SM3(str, options);\r\n}\r\n","const DECRYPT = 0;\r\nconst ROUND = 32;\r\nconst BLOCK = 16;\r\n\r\nconst Sbox = [\r\n 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, 0x2b, 0x67, 0x9a,\r\n 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef,\r\n 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62, 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80,\r\n 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6, 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19,\r\n 0xe6, 0x85, 0x4f, 0xa8, 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d,\r\n 0x35, 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87, 0xd4, 0x00,\r\n 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e, 0xea, 0xbf, 0x8a, 0xd2, 0x40,\r\n 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1, 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55,\r\n 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3, 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23,\r\n 0xab, 0x0d, 0x53, 0x4e, 0x6f, 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c,\r\n 0x5b, 0x51, 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8, 0x0a,\r\n 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0, 0x89, 0x69, 0x97, 0x4a,\r\n 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84, 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d,\r\n 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48,\r\n];\r\n\r\nconst CK = [\r\n 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, 0xe0e7eef5,\r\n 0xfc030a11, 0x181f262d, 0x343b4249, 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, 0xc0c7ced5, 0xdce3eaf1,\r\n 0xf8ff060d, 0x141b2229, 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed,\r\n 0xf4fb0209, 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279,\r\n];\r\n\r\n/**\r\n * 16 进制串转字节数组\r\n */\r\nfunction hexToArray(str) {\r\n const arr = [];\r\n for (let i = 0, len = str.length; i < len; i += 2) {\r\n arr.push(parseInt(str.substr(i, 2), 16));\r\n }\r\n return arr;\r\n}\r\n\r\n/**\r\n * 字节数组转 16 进制串\r\n */\r\nfunction ArrayToHex(arr) {\r\n return arr\r\n .map((item) => {\r\n item = item.toString(16);\r\n return item.length === 1 ? \"0\" + item : item;\r\n })\r\n .join(\"\");\r\n}\r\n\r\n/**\r\n * utf8 串转字节数组\r\n */\r\nfunction utf8ToArray(str) {\r\n const arr = [];\r\n\r\n for (let i = 0, len = str.length; i < len; i++) {\r\n const point = str.codePointAt(i);\r\n\r\n if (point <= 0x007f) {\r\n // 单字节,标量值:00000000 00000000 0zzzzzzz\r\n arr.push(point);\r\n } else if (point <= 0x07ff) {\r\n // 双字节,标量值:00000000 00000yyy yyzzzzzz\r\n arr.push(0xc0 | (point >>> 6)); // 110yyyyy(0xc0-0xdf)\r\n arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)\r\n } else if (point <= 0xd7ff || (point >= 0xe000 && point <= 0xffff)) {\r\n // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz\r\n arr.push(0xe0 | (point >>> 12)); // 1110xxxx(0xe0-0xef)\r\n arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)\r\n arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)\r\n } else if (point >= 0x010000 && point <= 0x10ffff) {\r\n // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz\r\n i++;\r\n arr.push(0xf0 | ((point >>> 18) & 0x1c)); // 11110www(0xf0-0xf7)\r\n arr.push(0x80 | ((point >>> 12) & 0x3f)); // 10xxxxxx(0x80-0xbf)\r\n arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)\r\n arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)\r\n } else {\r\n // 五、六字节,暂时不支持\r\n arr.push(point);\r\n throw new Error(\"input is not supported\");\r\n }\r\n }\r\n\r\n return arr;\r\n}\r\n\r\n/**\r\n * 字节数组转 utf8 串\r\n */\r\nfunction arrayToUtf8(arr) {\r\n const str = [];\r\n for (let i = 0, len = arr.length; i < len; i++) {\r\n if (arr[i] >= 0xf0 && arr[i] <= 0xf7) {\r\n // 四字节\r\n str.push(\r\n String.fromCodePoint(\r\n ((arr[i] & 0x07) << 18) + ((arr[i + 1] & 0x3f) << 12) + ((arr[i + 2] & 0x3f) << 6) + (arr[i + 3] & 0x3f),\r\n ),\r\n );\r\n i += 3;\r\n } else if (arr[i] >= 0xe0 && arr[i] <= 0xef) {\r\n // 三字节\r\n str.push(String.fromCodePoint(((arr[i] & 0x0f) << 12) + ((arr[i + 1] & 0x3f) << 6) + (arr[i + 2] & 0x3f)));\r\n i += 2;\r\n } else if (arr[i] >= 0xc0 && arr[i] <= 0xdf) {\r\n // 双字节\r\n str.push(String.fromCodePoint(((arr[i] & 0x1f) << 6) + (arr[i + 1] & 0x3f)));\r\n i++;\r\n } else {\r\n // 单字节\r\n str.push(String.fromCodePoint(arr[i]));\r\n }\r\n }\r\n\r\n return str.join(\"\");\r\n}\r\n\r\n/**\r\n * 32 比特循环左移\r\n */\r\nfunction rotl(x, n) {\r\n const s = n & 31;\r\n return (x << s) | (x >>> (32 - s));\r\n}\r\n\r\n/**\r\n * 非线性变换\r\n */\r\nfunction byteSub(a) {\r\n return (\r\n ((Sbox[(a >>> 24) & 0xff] & 0xff) << 24) |\r\n ((Sbox[(a >>> 16) & 0xff] & 0xff) << 16) |\r\n ((Sbox[(a >>> 8) & 0xff] & 0xff) << 8) |\r\n (Sbox[a & 0xff] & 0xff)\r\n );\r\n}\r\n\r\n/**\r\n * 线性变换,加密/解密用\r\n */\r\nfunction l1(b) {\r\n return b ^ rotl(b, 2) ^ rotl(b, 10) ^ rotl(b, 18) ^ rotl(b, 24);\r\n}\r\n\r\n/**\r\n * 线性变换,生成轮密钥用\r\n */\r\nfunction l2(b) {\r\n return b ^ rotl(b, 13) ^ rotl(b, 23);\r\n}\r\n\r\n/**\r\n * 以一组 128 比特进行加密/解密操作\r\n */\r\nfunction sms4Crypt(input, output, roundKey) {\r\n const x = new Array(4);\r\n\r\n // 字节数组转成字数组(此处 1 字 = 32 比特)\r\n const tmp = new Array(4);\r\n for (let i = 0; i < 4; i++) {\r\n tmp[0] = input[4 * i] & 0xff;\r\n tmp[1] = input[4 * i + 1] & 0xff;\r\n tmp[2] = input[4 * i + 2] & 0xff;\r\n tmp[3] = input[4 * i + 3] & 0xff;\r\n x[i] = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];\r\n }\r\n\r\n // x[i + 4] = x[i] ^ l1(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ roundKey[i]))\r\n for (let r = 0, mid; r < 32; r += 4) {\r\n mid = x[1] ^ x[2] ^ x[3] ^ roundKey[r + 0];\r\n x[0] ^= l1(byteSub(mid)); // x[4]\r\n\r\n mid = x[2] ^ x[3] ^ x[0] ^ roundKey[r + 1];\r\n x[1] ^= l1(byteSub(mid)); // x[5]\r\n\r\n mid = x[3] ^ x[0] ^ x[1] ^ roundKey[r + 2];\r\n x[2] ^= l1(byteSub(mid)); // x[6]\r\n\r\n mid = x[0] ^ x[1] ^ x[2] ^ roundKey[r + 3];\r\n x[3] ^= l1(byteSub(mid)); // x[7]\r\n }\r\n\r\n // 反序变换\r\n for (let j = 0; j < 16; j += 4) {\r\n output[j] = (x[3 - j / 4] >>> 24) & 0xff;\r\n output[j + 1] = (x[3 - j / 4] >>> 16) & 0xff;\r\n output[j + 2] = (x[3 - j / 4] >>> 8) & 0xff;\r\n output[j + 3] = x[3 - j / 4] & 0xff;\r\n }\r\n}\r\n\r\n/**\r\n * 密钥扩展算法\r\n */\r\nfunction sms4KeyExt(key, roundKey, cryptFlag) {\r\n const x = new Array(4);\r\n\r\n // 字节数组转成字数组(此处 1 字 = 32 比特)\r\n const tmp = new Array(4);\r\n for (let i = 0; i < 4; i++) {\r\n tmp[0] = key[0 + 4 * i] & 0xff;\r\n tmp[1] = key[1 + 4 * i] & 0xff;\r\n tmp[2] = key[2 + 4 * i] & 0xff;\r\n tmp[3] = key[3 + 4 * i] & 0xff;\r\n x[i] = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];\r\n }\r\n\r\n // 与系统参数做异或\r\n x[0] ^= 0xa3b1bac6;\r\n x[1] ^= 0x56aa3350;\r\n x[2] ^= 0x677d9197;\r\n x[3] ^= 0xb27022dc;\r\n\r\n // roundKey[i] = x[i + 4] = x[i] ^ l2(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ CK[i]))\r\n for (let r = 0, mid; r < 32; r += 4) {\r\n mid = x[1] ^ x[2] ^ x[3] ^ CK[r + 0];\r\n roundKey[r + 0] = x[0] ^= l2(byteSub(mid)); // x[4]\r\n\r\n mid = x[2] ^ x[3] ^ x[0] ^ CK[r + 1];\r\n roundKey[r + 1] = x[1] ^= l2(byteSub(mid)); // x[5]\r\n\r\n mid = x[3] ^ x[0] ^ x[1] ^ CK[r + 2];\r\n roundKey[r + 2] = x[2] ^= l2(byteSub(mid)); // x[6]\r\n\r\n mid = x[0] ^ x[1] ^ x[2] ^ CK[r + 3];\r\n roundKey[r + 3] = x[3] ^= l2(byteSub(mid)); // x[7]\r\n }\r\n\r\n // 解密时使用反序的轮密钥\r\n if (cryptFlag === DECRYPT) {\r\n for (let r = 0, mid; r < 16; r++) {\r\n mid = roundKey[r];\r\n roundKey[r] = roundKey[31 - r];\r\n roundKey[31 - r] = mid;\r\n }\r\n }\r\n}\r\n\r\nfunction sm4(inArray, key, cryptFlag, { padding = \"pkcs#7\", mode, iv = [], output = \"string\" } = {}) {\r\n if (mode === \"cbc\") {\r\n // CBC 模式,默认走 ECB 模式\r\n if (typeof iv === \"string\") iv = hexToArray(iv);\r\n if (iv.length !== 128 / 8) {\r\n // iv 不是 128 比特\r\n throw new Error(\"iv is invalid\");\r\n }\r\n }\r\n\r\n // 检查 key\r\n if (typeof key === \"string\") key = hexToArray(key);\r\n if (key.length !== 128 / 8) {\r\n // key 不是 128 比特\r\n throw new Error(\"key is invalid\");\r\n }\r\n\r\n // 检查输入\r\n if (typeof inArray === \"string\") {\r\n if (cryptFlag !== DECRYPT) {\r\n // 加密,输入为 utf8 串\r\n inArray = utf8ToArray(inArray);\r\n } else {\r\n // 解密,输入为 16 进制串\r\n inArray = hexToArray(inArray);\r\n }\r\n } else {\r\n inArray = [...inArray];\r\n }\r\n\r\n // 新增填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7\r\n if ((padding === \"pkcs#5\" || padding === \"pkcs#7\") && cryptFlag !== DECRYPT) {\r\n const paddingCount = BLOCK - (inArray.length % BLOCK);\r\n for (let i = 0; i < paddingCount; i++) inArray.push(paddingCount);\r\n }\r\n\r\n // 生成轮密钥\r\n const roundKey = new Array(ROUND);\r\n sms4KeyExt(key, roundKey, cryptFlag);\r\n\r\n const outArray = [];\r\n let lastVector = iv;\r\n let restLen = inArray.length;\r\n let point = 0;\r\n while (restLen >= BLOCK) {\r\n const input = inArray.slice(point, point + 16);\r\n const output = new Array(16);\r\n\r\n if (mode === \"cbc\") {\r\n for (let i = 0; i < BLOCK; i++) {\r\n if (cryptFlag !== DECRYPT) {\r\n // 加密过程在组加密前进行异或\r\n input[i] ^= lastVector[i];\r\n }\r\n }\r\n }\r\n\r\n sms4Crypt(input, output, roundKey);\r\n\r\n for (let i = 0; i < BLOCK; i++) {\r\n if (mode === \"cbc\") {\r\n if (cryptFlag === DECRYPT) {\r\n // 解密过程在组解密后进行异或\r\n output[i] ^= lastVector[i];\r\n }\r\n }\r\n\r\n outArray[point + i] = output[i];\r\n }\r\n\r\n if (mode === \"cbc\") {\r\n if (cryptFlag !== DECRYPT) {\r\n // 使用上一次输出作为加密向量\r\n lastVector = output;\r\n } else {\r\n // 使用上一次输入作为解密向量\r\n lastVector = input;\r\n }\r\n }\r\n\r\n restLen -= BLOCK;\r\n point += BLOCK;\r\n }\r\n\r\n // 去除填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7\r\n if ((padding === \"pkcs#5\" || padding === \"pkcs#7\") && cryptFlag === DECRYPT) {\r\n const len = outArray.length;\r\n const paddingCount = outArray[len - 1];\r\n for (let i = 1; i <= paddingCount; i++) {\r\n if (outArray[len - i] !== paddingCount) throw new Error(\"padding is invalid\");\r\n }\r\n outArray.splice(len - paddingCount, paddingCount);\r\n }\r\n\r\n // 调整输出\r\n if (output !== \"array\") {\r\n if (cryptFlag !== DECRYPT) {\r\n // 加密,输出转 16 进制串\r\n return ArrayToHex(outArray);\r\n } else {\r\n // 解密,输出转 utf8 串\r\n return arrayToUtf8(outArray);\r\n }\r\n } else {\r\n return outArray;\r\n }\r\n}\r\n\r\n/* 以下是内部实现需要的es模块化导出方法 */\r\nexport function encrypt(inArray, key, options) {\r\n return sm4(inArray, key, 1, options);\r\n}\r\n\r\nexport function decrypt(inArray, key, options) {\r\n return sm4(inArray, key, 0, options);\r\n}\r\n","import * as SM4 from \"./sm4.js\";\r\n\r\n/**\r\n * sm4 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @param {Object} options 配置\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encrypt(str, key, options) {\r\n return SM4.encrypt(str, key, options);\r\n}\r\n\r\n/**\r\n * sm4 解密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @param {Object} options 配置\r\n * @returns {String} 返回解密后的数据\r\n */\r\nexport function decrypt(str, key, options) {\r\n return SM4.decrypt(str, key, options);\r\n}\r\n","import * as base64 from \"../base64/index.js\";\r\n\r\nconst { encode, decode, utf8Decode, utf8Encode } = base64;\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n/* AES implementation in JavaScript (c) Chris Veness 2005-2019 */\r\n/* MIT Licence */\r\n/* www.movable-type.co.uk/scripts/aes.html */\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\n/**\r\n * AES (Rijndael cipher) encryption routines reference implementation,\r\n *\r\n * This is an annotated direct implementation of FIPS 197, without any optimisations. It is\r\n * intended to aid understanding of the algorithm rather than for production use.\r\n *\r\n * While it could be used where performance is not critical, I would recommend using the ‘Web\r\n * Cryptography API’ (developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt) for the browser,\r\n * or the ‘crypto’ library (nodejs.org/api/crypto.html#crypto_class_cipher) in Node.js.\r\n *\r\n * See csrc.nist.gov/publications/fips/fips197/fips-197.pdf\r\n */\r\nclass Aes {\r\n /**\r\n * AES Cipher function: encrypt 'input' state with Rijndael algorithm [§5.1];\r\n * applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage.\r\n *\r\n * @param {number[]} input - 16-byte (128-bit) input state array.\r\n * @param {number[][]} w - Key schedule as 2D byte-array (Nr+1 × Nb bytes).\r\n * @returns {number[]} Encrypted output state array.\r\n */\r\n static cipher(input, w) {\r\n const Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)\r\n const Nr = w.length / Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys\r\n\r\n let state = [[], [], [], []]; // initialise 4×Nb byte-array 'state' with input [§3.4]\r\n for (let i = 0; i < 4 * Nb; i++) state[i % 4][Math.floor(i / 4)] = input[i];\r\n\r\n state = Aes.addRoundKey(state, w, 0, Nb);\r\n\r\n for (let round = 1; round < Nr; round++) {\r\n state = Aes.subBytes(state, Nb);\r\n state = Aes.shiftRows(state, Nb);\r\n state = Aes.mixColumns(state, Nb);\r\n state = Aes.addRoundKey(state, w, round, Nb);\r\n }\r\n\r\n state = Aes.subBytes(state, Nb);\r\n state = Aes.shiftRows(state, Nb);\r\n state = Aes.addRoundKey(state, w, Nr, Nb);\r\n\r\n const output = new Array(4 * Nb); // convert state to 1-d array before returning [§3.4]\r\n for (let i = 0; i < 4 * Nb; i++) output[i] = state[i % 4][Math.floor(i / 4)];\r\n\r\n return output;\r\n }\r\n\r\n /**\r\n * Perform key expansion to generate a key schedule from a cipher key [§5.2].\r\n *\r\n * @param {number[]} key - Cipher key as 16/24/32-byte array.\r\n * @returns {number[][]} Expanded key schedule as 2D byte-array (Nr+1 × Nb bytes).\r\n */\r\n static keyExpansion(key) {\r\n const Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)\r\n const Nk = key.length / 4; // key length (in words): 4/6/8 for 128/192/256-bit keys\r\n const Nr = Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys\r\n\r\n const w = new Array(Nb * (Nr + 1));\r\n let temp = new Array(4);\r\n\r\n // initialise first Nk words of expanded key with cipher key\r\n for (let i = 0; i < Nk; i++) {\r\n const r = [key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]];\r\n w[i] = r;\r\n }\r\n\r\n // expand the key into the remainder of the schedule\r\n for (let i = Nk; i < Nb * (Nr + 1); i++) {\r\n w[i] = new Array(4);\r\n for (let t = 0; t < 4; t++) temp[t] = w[i - 1][t];\r\n // each Nk'th word has extra transformation\r\n if (i % Nk == 0) {\r\n temp = Aes.subWord(Aes.rotWord(temp));\r\n for (let t = 0; t < 4; t++) temp[t] ^= Aes.rCon[i / Nk][t];\r\n }\r\n // 256-bit key has subWord applied every 4th word\r\n else if (Nk > 6 && i % Nk == 4) {\r\n temp = Aes.subWord(temp);\r\n }\r\n // xor w[i] with w[i-1] and w[i-Nk]\r\n for (let t = 0; t < 4; t++) w[i][t] = w[i - Nk][t] ^ temp[t];\r\n }\r\n\r\n return w;\r\n }\r\n\r\n /**\r\n * Apply SBox to state S [§5.1.1].\r\n *\r\n * @private\r\n */\r\n static subBytes(s, Nb) {\r\n for (let r = 0; r < 4; r++) {\r\n for (let c = 0; c < Nb; c++) s[r][c] = Aes.sBox[s[r][c]];\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Shift row r of state S left by r bytes [§5.1.2].\r\n *\r\n * @private\r\n */\r\n static shiftRows(s, Nb) {\r\n const t = new Array(4);\r\n for (let r = 1; r < 4; r++) {\r\n for (let c = 0; c < 4; c++) t[c] = s[r][(c + r) % Nb]; // shift into temp copy\r\n for (let c = 0; c < 4; c++) s[r][c] = t[c]; // and copy back\r\n } // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):\r\n return s; // see asmaes.sourceforge.net/rijndael/rijndaelImplementation.pdf\r\n }\r\n\r\n /**\r\n * Combine bytes of each col of state S [§5.1.3].\r\n *\r\n * @private\r\n */\r\n static mixColumns(s, Nb) {\r\n for (let c = 0; c < Nb; c++) {\r\n const a = new Array(Nb); // 'a' is a copy of the current column from 's'\r\n const b = new Array(Nb); // 'b' is a•{02} in GF(2^8)\r\n for (let r = 0; r < 4; r++) {\r\n a[r] = s[r][c];\r\n b[r] = s[r][c] & 0x80 ? (s[r][c] << 1) ^ 0x011b : s[r][c] << 1;\r\n }\r\n // a[n] ^ b[n] is a•{03} in GF(2^8)\r\n s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // {02}•a0 + {03}•a1 + a2 + a3\r\n s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 • {02}•a1 + {03}•a2 + a3\r\n s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + {02}•a2 + {03}•a3\r\n s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // {03}•a0 + a1 + a2 + {02}•a3\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Xor Round Key into state S [§5.1.4].\r\n *\r\n * @private\r\n */\r\n static addRoundKey(state, w, rnd, Nb) {\r\n for (let r = 0; r < 4; r++) {\r\n for (let c = 0; c < Nb; c++) state[r][c] ^= w[rnd * 4 + c][r];\r\n }\r\n return state;\r\n }\r\n\r\n /**\r\n * Apply SBox to 4-byte word w.\r\n *\r\n * @private\r\n */\r\n static subWord(w) {\r\n for (let i = 0; i < 4; i++) w[i] = Aes.sBox[w[i]];\r\n return w;\r\n }\r\n\r\n /**\r\n * Rotate 4-byte word w left by one byte.\r\n *\r\n * @private\r\n */\r\n static rotWord(w) {\r\n const tmp = w[0];\r\n for (let i = 0; i < 3; i++) w[i] = w[i + 1];\r\n w[3] = tmp;\r\n return w;\r\n }\r\n}\r\n\r\n// sBox is pre-computed multiplicative inverse in GF(2^8) used in subBytes and keyExpansion [§5.1.1]\r\nAes.sBox = [\r\n 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9,\r\n 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f,\r\n 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07,\r\n 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3,\r\n 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58,\r\n 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3,\r\n 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f,\r\n 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,\r\n 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac,\r\n 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a,\r\n 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70,\r\n 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,\r\n 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42,\r\n 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16,\r\n];\r\n\r\n// rCon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]\r\nAes.rCon = [\r\n [0x00, 0x00, 0x00, 0x00],\r\n [0x01, 0x00, 0x00, 0x00],\r\n [0x02, 0x00, 0x00, 0x00],\r\n [0x04, 0x00, 0x00, 0x00],\r\n [0x08, 0x00, 0x00, 0x00],\r\n [0x10, 0x00, 0x00, 0x00],\r\n [0x20, 0x00, 0x00, 0x00],\r\n [0x40, 0x00, 0x00, 0x00],\r\n [0x80, 0x00, 0x00, 0x00],\r\n [0x1b, 0x00, 0x00, 0x00],\r\n [0x36, 0x00, 0x00, 0x00],\r\n];\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n/* AES counter-mode (CTR) implementation in JavaScript (c) Chris Veness 2005-2019 */\r\n/* MIT Licence */\r\n/* www.movable-type.co.uk/scripts/aes.html */\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\n/* global WorkerGlobalScope */\r\n\r\n/**\r\n * AesCtr: Counter-mode (CTR) wrapper for AES.\r\n *\r\n * This encrypts a Unicode string to produces a base64 ciphertext using 128/192/256-bit AES,\r\n * and the converse to decrypt an encrypted ciphertext.\r\n *\r\n * See csrc.nist.gov/publications/detail/sp/800-38a/final\r\n */\r\nclass AesCtr extends Aes {\r\n /**\r\n * Encrypt a text using AES encryption in Counter mode of operation.\r\n *\r\n * Unicode multi-byte character safe.\r\n *\r\n * @param {string} plaintext - Source text to be encrypted.\r\n * @param {string} password - The password to use to generate a key for encryption.\r\n * @param {number} nBits - Number of bits to be used in the key; 128 / 192 / 256.\r\n * @returns {string} Encrypted text, base-64 encoded.\r\n *\r\n * @example\r\n * const encr = AesCtr.encrypt('big secret', 'pāşšŵōřđ', 256); // 'lwGl66VVwVObKIr6of8HVqJr'\r\n */\r\n static encrypt(plaintext, password, nBits) {\r\n if (![128, 192, 256].includes(nBits)) throw new Error(\"Key size is not 128 / 192 / 256\");\r\n plaintext = AesCtr.utf8Encode(String(plaintext));\r\n password = AesCtr.utf8Encode(String(password));\r\n\r\n // use AES itself to encrypt password to get cipher key (using plain password as source for key\r\n // expansion) to give us well encrypted key (in real use hashed password could be used for key)\r\n const nBytes = nBits / 8; // no bytes in key (16/24/32)\r\n const pwBytes = new Array(nBytes);\r\n for (let i = 0; i < nBytes; i++) {\r\n // use 1st 16/24/32 chars of password for key\r\n pwBytes[i] = i < password.length ? password.charCodeAt(i) : 0;\r\n }\r\n let key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes)); // gives us 16-byte key\r\n key = key.concat(key.slice(0, nBytes - 16)); // expand key to 16/24/32 bytes long\r\n\r\n // initialise 1st 8 bytes of counter block with nonce (NIST SP 800-38A §B.2): [0-1] = millisec,\r\n // [2-3] = random, [4-7] = seconds, together giving full sub-millisec uniqueness up to Feb 2106\r\n const timestamp = new Date().getTime(); // milliseconds since 1-Jan-1970\r\n const nonceMs = timestamp % 1000;\r\n const nonceSec = Math.floor(timestamp / 1000);\r\n const nonceRnd = Math.floor(Math.random() * 0xffff);\r\n // for debugging: const [ nonceMs, nonceSec, nonceRnd ] = [ 0, 0, 0 ];\r\n const counterBlock = [\r\n // 16-byte array; blocksize is fixed at 16 for AES\r\n nonceMs & 0xff,\r\n (nonceMs >>> 8) & 0xff,\r\n nonceRnd & 0xff,\r\n (nonceRnd >>> 8) & 0xff,\r\n nonceSec & 0xff,\r\n (nonceSec >>> 8) & 0xff,\r\n (nonceSec >>> 16) & 0xff,\r\n (nonceSec >>> 24) & 0xff,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n ];\r\n\r\n // and convert nonce to a string to go on the front of the ciphertext\r\n const nonceStr = counterBlock\r\n .slice(0, 8)\r\n .map((i) => String.fromCharCode(i))\r\n .join(\"\");\r\n\r\n // convert (utf-8) plaintext to byte array\r\n const plaintextBytes = plaintext.split(\"\").map((ch) => ch.charCodeAt(0));\r\n\r\n // ------------ perform encryption ------------\r\n const ciphertextBytes = AesCtr.nistEncryption(plaintextBytes, key, counterBlock);\r\n\r\n // convert byte array to (utf-8) ciphertext string\r\n const ciphertextUtf8 = ciphertextBytes.map((i) => String.fromCharCode(i)).join(\"\");\r\n\r\n // base-64 encode ciphertext\r\n const ciphertextB64 = AesCtr.base64Encode(nonceStr + ciphertextUtf8);\r\n\r\n return ciphertextB64;\r\n }\r\n\r\n /**\r\n * NIST SP 800-38A sets out recommendations for block cipher modes of operation in terms of byte\r\n * operations. This implements the §6.5 Counter Mode (CTR).\r\n *\r\n * Oⱼ = CIPHₖ(Tⱼ) for j = 1, 2 … n\r\n * Cⱼ = Pⱼ ⊕ Oⱼ for j = 1, 2 … n-1\r\n * C*ₙ = P* ⊕ MSBᵤ(Oₙ) final (partial?) block\r\n * where CIPHₖ is the forward cipher function, O output blocks, P plaintext blocks, C\r\n * ciphertext blocks\r\n *\r\n * @param {number[]} plaintext - Plaintext to be encrypted, as byte array.\r\n * @param {number[]} key - Key to be used to encrypt plaintext.\r\n * @param {number[]} counterBlock - Initial 16-byte CTR counter block (with nonce & 0 counter).\r\n * @returns {number[]} Ciphertext as byte array.\r\n *\r\n * @private\r\n */\r\n static nistEncryption(plaintext, key, counterBlock) {\r\n const blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES\r\n\r\n // generate key schedule - an expansion of the key into distinct Key Rounds for each round\r\n const keySchedule = Aes.keyExpansion(key);\r\n\r\n const blockCount = Math.ceil(plaintext.length / blockSize);\r\n const ciphertext = new Array(plaintext.length);\r\n\r\n for (let b = 0; b < blockCount; b++) {\r\n // ---- encrypt counter block; Oⱼ = CIPHₖ(Tⱼ) ----\r\n const cipherCntr = Aes.cipher(counterBlock, keySchedule);\r\n\r\n // block size is reduced on final block\r\n const blockLength = b < blockCount - 1 ? blockSize : ((plaintext.length - 1) % blockSize) + 1;\r\n\r\n // ---- xor plaintext with ciphered counter byte-by-byte; Cⱼ = Pⱼ ⊕ Oⱼ ----\r\n for (let i = 0; i < blockLength; i++) {\r\n ciphertext[b * blockSize + i] = cipherCntr[i] ^ plaintext[b * blockSize + i];\r\n }\r\n\r\n // increment counter block (counter in 2nd 8 bytes of counter block, big-endian)\r\n counterBlock[blockSize - 1]++;\r\n // and propagate carry digits\r\n for (let i = blockSize - 1; i >= 8; i--) {\r\n counterBlock[i - 1] += counterBlock[i] >> 8;\r\n counterBlock[i] &= 0xff;\r\n }\r\n\r\n // if within web worker, announce progress every 1000 blocks (roughly every 50ms)\r\n if (typeof WorkerGlobalScope != \"undefined\" && self instanceof WorkerGlobalScope) {\r\n if (b % 1000 == 0) self.postMessage({ progress: b / blockCount });\r\n }\r\n }\r\n\r\n return ciphertext;\r\n }\r\n\r\n /**\r\n * Decrypt a text encrypted by AES in counter mode of operation.\r\n *\r\n * @param {string} ciphertext - Cipher text to be decrypted.\r\n * @param {string} password - Password to use to generate a key for decryption.\r\n * @param {number} nBits - Number of bits to be used in the key; 128 / 192 / 256.\r\n * @returns {string} Decrypted text\r\n *\r\n * @example\r\n * const decr = AesCtr.decrypt('lwGl66VVwVObKIr6of8HVqJr', 'pāşšŵōřđ', 256); // 'big secret'\r\n */\r\n static decrypt(ciphertext, password, nBits) {\r\n if (![128, 192, 256].includes(nBits)) throw new Error(\"Key size is not 128 / 192 / 256\");\r\n ciphertext = AesCtr.base64Decode(String(ciphertext));\r\n password = AesCtr.utf8Encode(String(password));\r\n\r\n // use AES to encrypt password (mirroring encrypt routine)\r\n const nBytes = nBits / 8; // no bytes in key\r\n const pwBytes = new Array(nBytes);\r\n for (let i = 0; i < nBytes; i++) {\r\n // use 1st nBytes chars of password for key\r\n pwBytes[i] = i < password.length ? password.charCodeAt(i) : 0;\r\n }\r\n let key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes));\r\n key = key.concat(key.slice(0, nBytes - 16)); // expand key to 16/24/32 bytes long\r\n\r\n // recover nonce from 1st 8 bytes of ciphertext into 1st 8 bytes of counter block\r\n const counterBlock = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n for (let i = 0; i < 8; i++) counterBlock[i] = ciphertext.charCodeAt(i);\r\n\r\n // convert ciphertext to byte array (skipping past initial 8 bytes)\r\n const ciphertextBytes = new Array(ciphertext.length - 8);\r\n for (let i = 8; i < ciphertext.length; i++) ciphertextBytes[i - 8] = ciphertext.charCodeAt(i);\r\n\r\n // ------------ perform decryption ------------\r\n const plaintextBytes = AesCtr.nistDecryption(ciphertextBytes, key, counterBlock);\r\n\r\n // convert byte array to (utf-8) plaintext string\r\n const plaintextUtf8 = plaintextBytes.map((i) => String.fromCharCode(i)).join(\"\");\r\n\r\n // decode from UTF8 back to Unicode multi-byte chars\r\n const plaintext = AesCtr.utf8Decode(plaintextUtf8);\r\n\r\n return plaintext;\r\n }\r\n\r\n /**\r\n * NIST SP 800-38A sets out recommendations for block cipher modes of operation in terms of byte\r\n * operations. This implements the §6.5 Counter Mode (CTR).\r\n *\r\n * Oⱼ = CIPHₖ(Tⱼ) for j = 1, 2 … n\r\n * Pⱼ = Cⱼ ⊕ Oⱼ for j = 1, 2 … n-1\r\n * P*ₙ = C* ⊕ MSBᵤ(Oₙ) final (partial?) block\r\n * where CIPHₖ is the forward cipher function, O output blocks, C ciphertext blocks, P\r\n * plaintext blocks\r\n *\r\n * @param {number[]} ciphertext - Ciphertext to be decrypted, as byte array.\r\n * @param {number[]} key - Key to be used to decrypt ciphertext.\r\n * @param {number[]} counterBlock - Initial 16-byte CTR counter block (with nonce & 0 counter).\r\n * @returns {number[]} Plaintext as byte array.\r\n *\r\n * @private\r\n */\r\n static nistDecryption(ciphertext, key, counterBlock) {\r\n const blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES\r\n\r\n // generate key schedule - an expansion of the key into distinct Key Rounds for each round\r\n const keySchedule = Aes.keyExpansion(key);\r\n\r\n const blockCount = Math.ceil(ciphertext.length / blockSize);\r\n const plaintext = new Array(ciphertext.length);\r\n\r\n for (let b = 0; b < blockCount; b++) {\r\n // ---- decrypt counter block; Oⱼ = CIPHₖ(Tⱼ) ----\r\n const cipherCntr = Aes.cipher(counterBlock, keySchedule);\r\n\r\n // block size is reduced on final block\r\n const blockLength = b < blockCount - 1 ? blockSize : ((ciphertext.length - 1) % blockSize) + 1;\r\n\r\n // ---- xor ciphertext with ciphered counter byte-by-byte; Pⱼ = Cⱼ ⊕ Oⱼ ----\r\n for (let i = 0; i < blockLength; i++) {\r\n plaintext[b * blockSize + i] = cipherCntr[i] ^ ciphertext[b * blockSize + i];\r\n }\r\n\r\n // increment counter block (counter in 2nd 8 bytes of counter block, big-endian)\r\n counterBlock[blockSize - 1]++;\r\n // and propagate carry digits\r\n for (let i = blockSize - 1; i >= 8; i--) {\r\n counterBlock[i - 1] += counterBlock[i] >> 8;\r\n counterBlock[i] &= 0xff;\r\n }\r\n\r\n // if within web worker, announce progress every 1000 blocks (roughly every 50ms)\r\n if (typeof WorkerGlobalScope != \"undefined\" && self instanceof WorkerGlobalScope) {\r\n if (b % 1000 == 0) self.postMessage({ progress: b / blockCount });\r\n }\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\n /**\r\n * Encodes multi-byte string to utf8.\r\n *\r\n * Note utf8Encode is an identity function with 7-bit ascii strings, but not with 8-bit strings;\r\n * utf8Encode('x') = 'x', but utf8Encode('ça') = 'ça', and utf8Encode('ça') = 'ça'.\r\n */\r\n static utf8Encode(str) {\r\n // 注释第三方js的代码\r\n // try {\r\n // return new TextEncoder().encode(str, \"utf-8\").reduce((prev, curr) => prev + String.fromCharCode(curr), \"\");\r\n // } catch (e) {\r\n // // no TextEncoder available?\r\n // return unescape(encodeURIComponent(str)); // monsur.hossa.in/2012/07/20/utf-8-in-javascript.html\r\n // }\r\n return utf8Encode(str);\r\n }\r\n\r\n /**\r\n * Decodes utf8 string to multi-byte.\r\n */\r\n static utf8Decode(str) {\r\n // 注释第三方js的代码\r\n // try {\r\n // return new TextEncoder().decode(str, \"utf-8\").reduce((prev, curr) => prev + String.fromCharCode(curr), \"\");\r\n // } catch (e) {\r\n // // no TextEncoder available?\r\n // return decodeURIComponent(escape(str)); // monsur.hossa.in/2012/07/20/utf-8-in-javascript.html\r\n // }\r\n\r\n return utf8Decode(str);\r\n }\r\n\r\n /*\r\n * Encodes string as base-64.\r\n *\r\n * - developer.mozilla.org/en-US/docs/Web/API/window.btoa, nodejs.org/api/buffer.html\r\n * - note: btoa & Buffer/binary work on single-byte Unicode (C0/C1), so ok for utf8 strings, not for general Unicode...\r\n * - note: if btoa()/atob() are not available (eg IE9-), try github.com/davidchambers/Base64.js\r\n */\r\n static base64Encode(str) {\r\n // 注释第三方js的代码\r\n // if (typeof btoa != \"undefined\") return btoa(str); // browser\r\n // if (typeof Buffer != \"undefined\") return new Buffer(str, \"binary\").toString(\"base64\"); // Node.js\r\n // throw new Error(\"No Base64 Encode\");\r\n\r\n return encode(str);\r\n }\r\n\r\n /*\r\n * Decodes base-64 encoded string.\r\n */\r\n static base64Decode(str) {\r\n // if (typeof atob != \"undefined\") return atob(str); // browser\r\n // if (typeof Buffer != \"undefined\") return new Buffer(str, \"base64\").toString(\"binary\"); // Node.js\r\n // throw new Error(\"No Base64 Decode\");\r\n\r\n return decode(str);\r\n }\r\n}\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n// es6 export\r\nexport default AesCtr;\r\n","import AES from \"./aes.js\";\r\n\r\n/**\r\n * aes 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @param {Number} bits 密钥长度位数,支持128、192和256,默认256\r\n * @returns {string} 返回加密后的字符串\r\n */\r\nexport function encrypt(str, key, bits = 256) {\r\n return AES.encrypt(str, key, bits);\r\n}\r\n\r\n/**\r\n * aes 解密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @param {Number} bits 密钥长度位数,支持128、192和256,默认256\r\n * @returns {string} 返回解密后的字符串\r\n */\r\nexport function decrypt(str, key, bits) {\r\n return AES.decrypt(str, key, bits);\r\n}\r\n","import * as base64 from \"../base64/index.js\";\r\n\r\nconst { encode, decode } = base64;\r\n\r\n/**\r\n * 使用方法\r\n * 实例化对象 new Des()\r\n * 加密方法 encrypt(key,plaintext)\r\n * 解密方法 decrypt(key,ciphertext)\r\n * 示例---------------------------------------------------\r\n * var Des = new Des();\r\n * var key = 'custom key';\r\n * var value = '需要加密的内容'\r\n * var ciphertext = encrypt(key,value);//加密\r\n * var plaintext = encrypt(key,ciphertext);//解密\r\n */\r\nfunction Des(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n}\r\n\r\n/**\r\n * @param {String} key 密钥\r\n * @param {String} value 内容\r\n * @param {String} type 类型 ->encrypt加密|decrypt解密\r\n */\r\nDes.prototype._DesCreate = function (key, value, type) {\r\n var message = value;\r\n if (type === \"decrypt\") {\r\n var requestValue = \"\";\r\n for (var i = value.substr(0, 2) == \"0x\" ? 2 : 0; i < value.length; i += 2) {\r\n requestValue += String.fromCharCode(parseInt(value.substr(i, 2), 16));\r\n }\r\n message = requestValue;\r\n }\r\n var spfunction1 = new Array(\r\n 0x1010400,\r\n 0,\r\n 0x10000,\r\n 0x1010404,\r\n 0x1010004,\r\n 0x10404,\r\n 0x4,\r\n 0x10000,\r\n 0x400,\r\n 0x1010400,\r\n 0x1010404,\r\n 0x400,\r\n 0x1000404,\r\n 0x1010004,\r\n 0x1000000,\r\n 0x4,\r\n 0x404,\r\n 0x1000400,\r\n 0x1000400,\r\n 0x10400,\r\n 0x10400,\r\n 0x1010000,\r\n 0x1010000,\r\n 0x1000404,\r\n 0x10004,\r\n 0x1000004,\r\n 0x1000004,\r\n 0x10004,\r\n 0,\r\n 0x404,\r\n 0x10404,\r\n 0x1000000,\r\n 0x10000,\r\n 0x1010404,\r\n 0x4,\r\n 0x1010000,\r\n 0x1010400,\r\n 0x1000000,\r\n 0x1000000,\r\n 0x400,\r\n 0x1010004,\r\n 0x10000,\r\n 0x10400,\r\n 0x1000004,\r\n 0x400,\r\n 0x4,\r\n 0x1000404,\r\n 0x10404,\r\n 0x1010404,\r\n 0x10004,\r\n 0x1010000,\r\n 0x1000404,\r\n 0x1000004,\r\n 0x404,\r\n 0x10404,\r\n 0x1010400,\r\n 0x404,\r\n 0x1000400,\r\n 0x1000400,\r\n 0,\r\n 0x10004,\r\n 0x10400,\r\n 0,\r\n 0x1010004,\r\n );\r\n var spfunction2 = new Array(\r\n -0x7fef7fe0,\r\n -0x7fff8000,\r\n 0x8000,\r\n 0x108020,\r\n 0x100000,\r\n 0x20,\r\n -0x7fefffe0,\r\n -0x7fff7fe0,\r\n -0x7fffffe0,\r\n -0x7fef7fe0,\r\n -0x7fef8000,\r\n -0x80000000,\r\n -0x7fff8000,\r\n 0x100000,\r\n 0x20,\r\n -0x7fefffe0,\r\n 0x108000,\r\n 0x100020,\r\n -0x7fff7fe0,\r\n 0,\r\n -0x80000000,\r\n 0x8000,\r\n 0x108020,\r\n -0x7ff00000,\r\n 0x100020,\r\n -0x7fffffe0,\r\n 0,\r\n 0x108000,\r\n 0x8020,\r\n -0x7fef8000,\r\n -0x7ff00000,\r\n 0x8020,\r\n 0,\r\n 0x108020,\r\n -0x7fefffe0,\r\n 0x100000,\r\n -0x7fff7fe0,\r\n -0x7ff00000,\r\n -0x7fef8000,\r\n 0x8000,\r\n -0x7ff00000,\r\n -0x7fff8000,\r\n 0x20,\r\n -0x7fef7fe0,\r\n 0x108020,\r\n 0x20,\r\n 0x8000,\r\n -0x80000000,\r\n 0x8020,\r\n -0x7fef8000,\r\n 0x100000,\r\n -0x7fffffe0,\r\n 0x100020,\r\n -0x7fff7fe0,\r\n -0x7fffffe0,\r\n 0x100020,\r\n 0x108000,\r\n 0,\r\n -0x7fff8000,\r\n 0x8020,\r\n -0x80000000,\r\n -0x7fefffe0,\r\n -0x7fef7fe0,\r\n 0x108000,\r\n );\r\n var spfunction3 = new Array(\r\n 0x208,\r\n 0x8020200,\r\n 0,\r\n 0x8020008,\r\n 0x8000200,\r\n 0,\r\n 0x20208,\r\n 0x8000200,\r\n 0x20008,\r\n 0x8000008,\r\n 0x8000008,\r\n 0x20000,\r\n 0x8020208,\r\n 0x20008,\r\n 0x8020000,\r\n 0x208,\r\n 0x8000000,\r\n 0x8,\r\n 0x8020200,\r\n 0x200,\r\n 0x20200,\r\n 0x8020000,\r\n 0x8020008,\r\n 0x20208,\r\n 0x8000208,\r\n 0x20200,\r\n 0x20000,\r\n 0x8000208,\r\n 0x8,\r\n 0x8020208,\r\n 0x200,\r\n 0x8000000,\r\n 0x8020200,\r\n 0x8000000,\r\n 0x20008,\r\n 0x208,\r\n 0x20000,\r\n 0x8020200,\r\n 0x8000200,\r\n 0,\r\n 0x200,\r\n 0x20008,\r\n 0x8020208,\r\n 0x8000200,\r\n 0x8000008,\r\n 0x200,\r\n 0,\r\n 0x8020008,\r\n 0x8000208,\r\n 0x20000,\r\n 0x8000000,\r\n 0x8020208,\r\n 0x8,\r\n 0x20208,\r\n 0x20200,\r\n 0x8000008,\r\n 0x8020000,\r\n 0x8000208,\r\n 0x208,\r\n 0x8020000,\r\n 0x20208,\r\n 0x8,\r\n 0x8020008,\r\n 0x20200,\r\n );\r\n var spfunction4 = new Array(\r\n 0x802001,\r\n 0x2081,\r\n 0x2081,\r\n 0x80,\r\n 0x802080,\r\n 0x800081,\r\n 0x800001,\r\n 0x2001,\r\n 0,\r\n 0x802000,\r\n 0x802000,\r\n 0x802081,\r\n 0x81,\r\n 0,\r\n 0x800080,\r\n 0x800001,\r\n 0x1,\r\n 0x2000,\r\n 0x800000,\r\n 0x802001,\r\n 0x80,\r\n 0x800000,\r\n 0x2001,\r\n 0x2080,\r\n 0x800081,\r\n 0x1,\r\n 0x2080,\r\n 0x800080,\r\n 0x2000,\r\n 0x802080,\r\n 0x802081,\r\n 0x81,\r\n 0x800080,\r\n 0x800001,\r\n 0x802000,\r\n 0x802081,\r\n 0x81,\r\n 0,\r\n 0,\r\n 0x802000,\r\n 0x2080,\r\n 0x800080,\r\n 0x800081,\r\n 0x1,\r\n 0x802001,\r\n 0x2081,\r\n 0x2081,\r\n 0x80,\r\n 0x802081,\r\n 0x81,\r\n 0x1,\r\n 0x2000,\r\n 0x800001,\r\n 0x2001,\r\n 0x802080,\r\n 0x800081,\r\n 0x2001,\r\n 0x2080,\r\n 0x800000,\r\n 0x802001,\r\n 0x80,\r\n 0x800000,\r\n 0x2000,\r\n 0x802080,\r\n );\r\n var spfunction5 = new Array(\r\n 0x100,\r\n 0x2080100,\r\n 0x2080000,\r\n 0x42000100,\r\n 0x80000,\r\n 0x100,\r\n 0x40000000,\r\n 0x2080000,\r\n 0x40080100,\r\n 0x80000,\r\n 0x2000100,\r\n 0x40080100,\r\n 0x42000100,\r\n 0x42080000,\r\n 0x80100,\r\n 0x40000000,\r\n 0x2000000,\r\n 0x40080000,\r\n 0x40080000,\r\n 0,\r\n 0x40000100,\r\n 0x42080100,\r\n 0x42080100,\r\n 0x2000100,\r\n 0x42080000,\r\n 0x40000100,\r\n 0,\r\n 0x42000000,\r\n 0x2080100,\r\n 0x2000000,\r\n 0x42000000,\r\n 0x80100,\r\n 0x80000,\r\n 0x42000100,\r\n 0x100,\r\n 0x2000000,\r\n 0x40000000,\r\n 0x2080000,\r\n 0x42000100,\r\n 0x40080100,\r\n 0x2000100,\r\n 0x40000000,\r\n 0x42080000,\r\n 0x2080100,\r\n 0x40080100,\r\n 0x100,\r\n 0x2000000,\r\n 0x42080000,\r\n 0x42080100,\r\n 0x80100,\r\n 0x42000000,\r\n 0x42080100,\r\n 0x2080000,\r\n 0,\r\n 0x40080000,\r\n 0x42000000,\r\n 0x80100,\r\n 0x2000100,\r\n 0x40000100,\r\n 0x80000,\r\n 0,\r\n 0x40080000,\r\n 0x2080100,\r\n 0x40000100,\r\n );\r\n var spfunction6 = new Array(\r\n 0x20000010,\r\n 0x20400000,\r\n 0x4000,\r\n 0x20404010,\r\n 0x20400000,\r\n 0x10,\r\n 0x20404010,\r\n 0x400000,\r\n 0x20004000,\r\n 0x404010,\r\n 0x400000,\r\n 0x20000010,\r\n 0x400010,\r\n 0x20004000,\r\n 0x20000000,\r\n 0x4010,\r\n 0,\r\n 0x400010,\r\n 0x20004010,\r\n 0x4000,\r\n 0x404000,\r\n 0x20004010,\r\n 0x10,\r\n 0x20400010,\r\n 0x20400010,\r\n 0,\r\n 0x404010,\r\n 0x20404000,\r\n 0x4010,\r\n 0x404000,\r\n 0x20404000,\r\n 0x20000000,\r\n 0x20004000,\r\n 0x10,\r\n 0x20400010,\r\n 0x404000,\r\n 0x20404010,\r\n 0x400000,\r\n 0x4010,\r\n 0x20000010,\r\n 0x400000,\r\n 0x20004000,\r\n 0x20000000,\r\n 0x4010,\r\n 0x20000010,\r\n 0x20404010,\r\n 0x404000,\r\n 0x20400000,\r\n 0x404010,\r\n 0x20404000,\r\n 0,\r\n 0x20400010,\r\n 0x10,\r\n 0x4000,\r\n 0x20400000,\r\n 0x404010,\r\n 0x4000,\r\n 0x400010,\r\n 0x20004010,\r\n 0,\r\n 0x20404000,\r\n 0x20000000,\r\n 0x400010,\r\n 0x20004010,\r\n );\r\n var spfunction7 = new Array(\r\n 0x200000,\r\n 0x4200002,\r\n 0x4000802,\r\n 0,\r\n 0x800,\r\n 0x4000802,\r\n 0x200802,\r\n 0x4200800,\r\n 0x4200802,\r\n 0x200000,\r\n 0,\r\n 0x4000002,\r\n 0x2,\r\n 0x4000000,\r\n 0x4200002,\r\n 0x802,\r\n 0x4000800,\r\n 0x200802,\r\n 0x200002,\r\n 0x4000800,\r\n 0x4000002,\r\n 0x4200000,\r\n 0x4200800,\r\n 0x200002,\r\n 0x4200000,\r\n 0x800,\r\n 0x802,\r\n 0x4200802,\r\n 0x200800,\r\n 0x2,\r\n 0x4000000,\r\n 0x200800,\r\n 0x4000000,\r\n 0x200800,\r\n 0x200000,\r\n 0x4000802,\r\n 0x4000802,\r\n 0x4200002,\r\n 0x4200002,\r\n 0x2,\r\n 0x200002,\r\n 0x4000000,\r\n 0x4000800,\r\n 0x200000,\r\n 0x4200800,\r\n 0x802,\r\n 0x200802,\r\n 0x4200800,\r\n 0x802,\r\n 0x4000002,\r\n 0x4200802,\r\n 0x4200000,\r\n 0x200800,\r\n 0,\r\n 0x2,\r\n 0x4200802,\r\n 0,\r\n 0x200802,\r\n 0x4200000,\r\n 0x800,\r\n 0x4000002,\r\n 0x4000800,\r\n 0x800,\r\n 0x200002,\r\n );\r\n var spfunction8 = new Array(\r\n 0x10001040,\r\n 0x1000,\r\n 0x40000,\r\n 0x10041040,\r\n 0x10000000,\r\n 0x10001040,\r\n 0x40,\r\n 0x10000000,\r\n 0x40040,\r\n 0x10040000,\r\n 0x10041040,\r\n 0x41000,\r\n 0x10041000,\r\n 0x41040,\r\n 0x1000,\r\n 0x40,\r\n 0x10040000,\r\n 0x10000040,\r\n 0x10001000,\r\n 0x1040,\r\n 0x41000,\r\n 0x40040,\r\n 0x10040040,\r\n 0x10041000,\r\n 0x1040,\r\n 0,\r\n 0,\r\n 0x10040040,\r\n 0x10000040,\r\n 0x10001000,\r\n 0x41040,\r\n 0x40000,\r\n 0x41040,\r\n 0x40000,\r\n 0x10041000,\r\n 0x1000,\r\n 0x40,\r\n 0x10040040,\r\n 0x1000,\r\n 0x41040,\r\n 0x10001000,\r\n 0x40,\r\n 0x10000040,\r\n 0x10040000,\r\n 0x10040040,\r\n 0x10000000,\r\n 0x40000,\r\n 0x10001040,\r\n 0,\r\n 0x10041040,\r\n 0x40040,\r\n 0x10000040,\r\n 0x10040000,\r\n 0x10001000,\r\n 0x10001040,\r\n 0,\r\n 0x10041040,\r\n 0x41000,\r\n 0x41000,\r\n 0x1040,\r\n 0x1040,\r\n 0x40040,\r\n 0x10000000,\r\n 0x10041000,\r\n );\r\n\r\n var keys = this._DesCreateKeys(key);\r\n var m = 0,\r\n i,\r\n j,\r\n temp,\r\n right1,\r\n right2,\r\n left,\r\n right,\r\n looping;\r\n var endloop, loopinc;\r\n var len = message.length;\r\n var chunk = 0;\r\n\r\n var iterations = keys.length == 32 ? 3 : 9;\r\n if (iterations == 3) {\r\n looping = type === \"encrypt\" ? new Array(0, 32, 2) : new Array(30, -2, -2);\r\n } else {\r\n looping =\r\n type === \"encrypt\" ? new Array(0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array(94, 62, -2, 32, 64, 2, 30, -2, -2);\r\n }\r\n var result = \"\";\r\n var tempresult = \"\";\r\n while (m < len) {\r\n left =\r\n (message.charCodeAt(m++) << 24) |\r\n (message.charCodeAt(m++) << 16) |\r\n (message.charCodeAt(m++) << 8) |\r\n message.charCodeAt(m++);\r\n right =\r\n (message.charCodeAt(m++) << 24) |\r\n (message.charCodeAt(m++) << 16) |\r\n (message.charCodeAt(m++) << 8) |\r\n message.charCodeAt(m++);\r\n\r\n temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\r\n right ^= temp;\r\n left ^= temp << 4;\r\n temp = ((left >>> 16) ^ right) & 0x0000ffff;\r\n right ^= temp;\r\n left ^= temp << 16;\r\n temp = ((right >>> 2) ^ left) & 0x33333333;\r\n left ^= temp;\r\n right ^= temp << 2;\r\n temp = ((right >>> 8) ^ left) & 0x00ff00ff;\r\n left ^= temp;\r\n right ^= temp << 8;\r\n temp = ((left >>> 1) ^ right) & 0x55555555;\r\n right ^= temp;\r\n left ^= temp << 1;\r\n\r\n left = (left << 1) | (left >>> 31);\r\n right = (right << 1) | (right >>> 31);\r\n\r\n for (j = 0; j < iterations; j += 3) {\r\n endloop = looping[j + 1];\r\n loopinc = looping[j + 2];\r\n for (i = looping[j]; i != endloop; i += loopinc) {\r\n right1 = right ^ keys[i];\r\n right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];\r\n temp = left;\r\n left = right;\r\n right =\r\n temp ^\r\n (spfunction2[(right1 >>> 24) & 0x3f] |\r\n spfunction4[(right1 >>> 16) & 0x3f] |\r\n spfunction6[(right1 >>> 8) & 0x3f] |\r\n spfunction8[right1 & 0x3f] |\r\n spfunction1[(right2 >>> 24) & 0x3f] |\r\n spfunction3[(right2 >>> 16) & 0x3f] |\r\n spfunction5[(right2 >>> 8) & 0x3f] |\r\n spfunction7[right2 & 0x3f]);\r\n }\r\n temp = left;\r\n left = right;\r\n right = temp;\r\n }\r\n\r\n left = (left >>> 1) | (left << 31);\r\n right = (right >>> 1) | (right << 31);\r\n\r\n temp = ((left >>> 1) ^ right) & 0x55555555;\r\n right ^= temp;\r\n left ^= temp << 1;\r\n temp = ((right >>> 8) ^ left) & 0x00ff00ff;\r\n left ^= temp;\r\n right ^= temp << 8;\r\n temp = ((right >>> 2) ^ left) & 0x33333333;\r\n left ^= temp;\r\n right ^= temp << 2;\r\n temp = ((left >>> 16) ^ right) & 0x0000ffff;\r\n right ^= temp;\r\n left ^= temp << 16;\r\n temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\r\n right ^= temp;\r\n left ^= temp << 4;\r\n\r\n tempresult += String.fromCharCode(\r\n left >>> 24,\r\n (left >>> 16) & 0xff,\r\n (left >>> 8) & 0xff,\r\n left & 0xff,\r\n right >>> 24,\r\n (right >>> 16) & 0xff,\r\n (right >>> 8) & 0xff,\r\n right & 0xff,\r\n );\r\n\r\n chunk += 8;\r\n if (chunk == 512) {\r\n result += tempresult;\r\n tempresult = \"\";\r\n chunk = 0;\r\n }\r\n }\r\n var resultTempresult = result + tempresult;\r\n if (type === \"encrypt\") {\r\n var resultCiphertext = \"\";\r\n var hexes = new Array(\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\");\r\n for (var i = 0; i < resultTempresult.length; i++) {\r\n resultCiphertext += hexes[resultTempresult.charCodeAt(i) >> 4] + hexes[resultTempresult.charCodeAt(i) & 0xf];\r\n }\r\n return resultCiphertext;\r\n }\r\n return result + tempresult;\r\n};\r\nDes.prototype._DesCreateKeys = function (key) {\r\n var pc2bytes0 = new Array(\r\n 0,\r\n 0x4,\r\n 0x20000000,\r\n 0x20000004,\r\n 0x10000,\r\n 0x10004,\r\n 0x20010000,\r\n 0x20010004,\r\n 0x200,\r\n 0x204,\r\n 0x20000200,\r\n 0x20000204,\r\n 0x10200,\r\n 0x10204,\r\n 0x20010200,\r\n 0x20010204,\r\n );\r\n var pc2bytes1 = new Array(\r\n 0,\r\n 0x1,\r\n 0x100000,\r\n 0x100001,\r\n 0x4000000,\r\n 0x4000001,\r\n 0x4100000,\r\n 0x4100001,\r\n 0x100,\r\n 0x101,\r\n 0x100100,\r\n 0x100101,\r\n 0x4000100,\r\n 0x4000101,\r\n 0x4100100,\r\n 0x4100101,\r\n );\r\n var pc2bytes2 = new Array(\r\n 0,\r\n 0x8,\r\n 0x800,\r\n 0x808,\r\n 0x1000000,\r\n 0x1000008,\r\n 0x1000800,\r\n 0x1000808,\r\n 0,\r\n 0x8,\r\n 0x800,\r\n 0x808,\r\n 0x1000000,\r\n 0x1000008,\r\n 0x1000800,\r\n 0x1000808,\r\n );\r\n var pc2bytes3 = new Array(\r\n 0,\r\n 0x200000,\r\n 0x8000000,\r\n 0x8200000,\r\n 0x2000,\r\n 0x202000,\r\n 0x8002000,\r\n 0x8202000,\r\n 0x20000,\r\n 0x220000,\r\n 0x8020000,\r\n 0x8220000,\r\n 0x22000,\r\n 0x222000,\r\n 0x8022000,\r\n 0x8222000,\r\n );\r\n var pc2bytes4 = new Array(\r\n 0,\r\n 0x40000,\r\n 0x10,\r\n 0x40010,\r\n 0,\r\n 0x40000,\r\n 0x10,\r\n 0x40010,\r\n 0x1000,\r\n 0x41000,\r\n 0x1010,\r\n 0x41010,\r\n 0x1000,\r\n 0x41000,\r\n 0x1010,\r\n 0x41010,\r\n );\r\n var pc2bytes5 = new Array(\r\n 0,\r\n 0x400,\r\n 0x20,\r\n 0x420,\r\n 0,\r\n 0x400,\r\n 0x20,\r\n 0x420,\r\n 0x2000000,\r\n 0x2000400,\r\n 0x2000020,\r\n 0x2000420,\r\n 0x2000000,\r\n 0x2000400,\r\n 0x2000020,\r\n 0x2000420,\r\n );\r\n var pc2bytes6 = new Array(\r\n 0,\r\n 0x10000000,\r\n 0x80000,\r\n 0x10080000,\r\n 0x2,\r\n 0x10000002,\r\n 0x80002,\r\n 0x10080002,\r\n 0,\r\n 0x10000000,\r\n 0x80000,\r\n 0x10080000,\r\n 0x2,\r\n 0x10000002,\r\n 0x80002,\r\n 0x10080002,\r\n );\r\n var pc2bytes7 = new Array(\r\n 0,\r\n 0x10000,\r\n 0x800,\r\n 0x10800,\r\n 0x20000000,\r\n 0x20010000,\r\n 0x20000800,\r\n 0x20010800,\r\n 0x20000,\r\n 0x30000,\r\n 0x20800,\r\n 0x30800,\r\n 0x20020000,\r\n 0x20030000,\r\n 0x20020800,\r\n 0x20030800,\r\n );\r\n var pc2bytes8 = new Array(\r\n 0,\r\n 0x40000,\r\n 0,\r\n 0x40000,\r\n 0x2,\r\n 0x40002,\r\n 0x2,\r\n 0x40002,\r\n 0x2000000,\r\n 0x2040000,\r\n 0x2000000,\r\n 0x2040000,\r\n 0x2000002,\r\n 0x2040002,\r\n 0x2000002,\r\n 0x2040002,\r\n );\r\n var pc2bytes9 = new Array(\r\n 0,\r\n 0x10000000,\r\n 0x8,\r\n 0x10000008,\r\n 0,\r\n 0x10000000,\r\n 0x8,\r\n 0x10000008,\r\n 0x400,\r\n 0x10000400,\r\n 0x408,\r\n 0x10000408,\r\n 0x400,\r\n 0x10000400,\r\n 0x408,\r\n 0x10000408,\r\n );\r\n var pc2bytes10 = new Array(\r\n 0,\r\n 0x20,\r\n 0,\r\n 0x20,\r\n 0x100000,\r\n 0x100020,\r\n 0x100000,\r\n 0x100020,\r\n 0x2000,\r\n 0x2020,\r\n 0x2000,\r\n 0x2020,\r\n 0x102000,\r\n 0x102020,\r\n 0x102000,\r\n 0x102020,\r\n );\r\n var pc2bytes11 = new Array(\r\n 0,\r\n 0x1000000,\r\n 0x200,\r\n 0x1000200,\r\n 0x200000,\r\n 0x1200000,\r\n 0x200200,\r\n 0x1200200,\r\n 0x4000000,\r\n 0x5000000,\r\n 0x4000200,\r\n 0x5000200,\r\n 0x4200000,\r\n 0x5200000,\r\n 0x4200200,\r\n 0x5200200,\r\n );\r\n var pc2bytes12 = new Array(\r\n 0,\r\n 0x1000,\r\n 0x8000000,\r\n 0x8001000,\r\n 0x80000,\r\n 0x81000,\r\n 0x8080000,\r\n 0x8081000,\r\n 0x10,\r\n 0x1010,\r\n 0x8000010,\r\n 0x8001010,\r\n 0x80010,\r\n 0x81010,\r\n 0x8080010,\r\n 0x8081010,\r\n );\r\n var pc2bytes13 = new Array(\r\n 0,\r\n 0x4,\r\n 0x100,\r\n 0x104,\r\n 0,\r\n 0x4,\r\n 0x100,\r\n 0x104,\r\n 0x1,\r\n 0x5,\r\n 0x101,\r\n 0x105,\r\n 0x1,\r\n 0x5,\r\n 0x101,\r\n 0x105,\r\n );\r\n\r\n var iterations = key.length > 8 ? 3 : 1;\r\n var keys = new Array(32 * iterations);\r\n var shifts = new Array(0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);\r\n var lefttemp,\r\n righttemp,\r\n m = 0,\r\n n = 0,\r\n temp;\r\n\r\n for (var j = 0; j < iterations; j++) {\r\n var left =\r\n (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++);\r\n var right =\r\n (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++);\r\n\r\n temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\r\n right ^= temp;\r\n left ^= temp << 4;\r\n temp = ((right >>> -16) ^ left) & 0x0000ffff;\r\n left ^= temp;\r\n right ^= temp << -16;\r\n temp = ((left >>> 2) ^ right) & 0x33333333;\r\n right ^= temp;\r\n left ^= temp << 2;\r\n temp = ((right >>> -16) ^ left) & 0x0000ffff;\r\n left ^= temp;\r\n right ^= temp << -16;\r\n temp = ((left >>> 1) ^ right) & 0x55555555;\r\n right ^= temp;\r\n left ^= temp << 1;\r\n temp = ((right >>> 8) ^ left) & 0x00ff00ff;\r\n left ^= temp;\r\n right ^= temp << 8;\r\n temp = ((left >>> 1) ^ right) & 0x55555555;\r\n right ^= temp;\r\n left ^= temp << 1;\r\n\r\n temp = (left << 8) | ((right >>> 20) & 0x000000f0);\r\n left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);\r\n right = temp;\r\n\r\n for (var i = 0; i < shifts.length; i++) {\r\n if (shifts[i]) {\r\n left = (left << 2) | (left >>> 26);\r\n right = (right << 2) | (right >>> 26);\r\n } else {\r\n left = (left << 1) | (left >>> 27);\r\n right = (right << 1) | (right >>> 27);\r\n }\r\n left &= -0xf;\r\n right &= -0xf;\r\n\r\n lefttemp =\r\n pc2bytes0[left >>> 28] |\r\n pc2bytes1[(left >>> 24) & 0xf] |\r\n pc2bytes2[(left >>> 20) & 0xf] |\r\n pc2bytes3[(left >>> 16) & 0xf] |\r\n pc2bytes4[(left >>> 12) & 0xf] |\r\n pc2bytes5[(left >>> 8) & 0xf] |\r\n pc2bytes6[(left >>> 4) & 0xf];\r\n righttemp =\r\n pc2bytes7[right >>> 28] |\r\n pc2bytes8[(right >>> 24) & 0xf] |\r\n pc2bytes9[(right >>> 20) & 0xf] |\r\n pc2bytes10[(right >>> 16) & 0xf] |\r\n pc2bytes11[(right >>> 12) & 0xf] |\r\n pc2bytes12[(right >>> 8) & 0xf] |\r\n pc2bytes13[(right >>> 4) & 0xf];\r\n temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;\r\n keys[n++] = lefttemp ^ temp;\r\n keys[n++] = righttemp ^ (temp << 16);\r\n }\r\n }\r\n return keys;\r\n};\r\n/*\r\n------------------------------------------------------------------------------------\r\n以上方法对象的私有方法\r\n为了解决中文乱码\r\n使用base64先加密,再用des加密\r\n同理,解密时先用deds解密,再使用base64解密\r\n------------------------------------------------------------------------------------\r\n*/\r\n/**\r\n * 加密\r\n * @param {String} key 密钥\r\n * @param {String} plaintext 明文\r\n * @return {String} ciphertext 密文\r\n */\r\nDes.prototype.encrypt = function (key, plaintext) {\r\n var encodedString = encode(plaintext);\r\n var ciphertext = this._DesCreate(key, encodedString, \"encrypt\");\r\n return ciphertext;\r\n};\r\n/**\r\n * 解密\r\n * @param {String} key 密钥\r\n * @param {String} ciphertext 密文\r\n * @return {String} plaintext 明文\r\n */\r\nDes.prototype.decrypt = function (key, ciphertext) {\r\n var decryptText = this._DesCreate(key, ciphertext, \"decrypt\"); // Des解密\r\n var plaintext = decode(decryptText); // base64解密\r\n return plaintext;\r\n};\r\n\r\n// es6 export\r\nexport default Des;\r\n","/* 对称加密 DES */\r\nimport DES from \"./des.js\";\r\n\r\n/**\r\n * des 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function encrypt(str, key) {\r\n let des = new DES(key, str);\r\n return des.encrypt(key, str);\r\n}\r\n\r\n/**\r\n * des 解密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回解密后的字符串\r\n */\r\nexport function decrypt(str, key) {\r\n let des = new DES(key, str);\r\n return des.decrypt(key, str);\r\n}\r\n","/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n/* Block TEA (xxtea) Tiny Encryption Algorithm (c) Chris Veness 2002-2019 */\r\n/* MIT Licence */\r\n/* www.movable-type.co.uk/scripts/tea-block.html */\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\n/**\r\n * Tiny Encryption Algorithm. David Wheeler & Roger Needham, Cambridge University Computer Lab.\r\n *\r\n * www.movable-type.co.uk/scripts/tea.pdf - TEA, a Tiny Encryption Algorithm (1994)\r\n * www.movable-type.co.uk/scripts/xtea.pdf - Tea extensions (1997)\r\n * www.movable-type.co.uk/scripts/xxtea.pdf - Correction to xtea (1998)\r\n */\r\nclass Tea {\r\n /**\r\n * Encrypts text using Corrected Block TEA (xxtea) algorithm.\r\n *\r\n * @param {string} plaintext - String to be encrypted (multi-byte safe).\r\n * @param {string} password - Password to be used for encryption (1st 16 chars).\r\n * @returns {string} Encrypted text (encoded as base64).\r\n */\r\n static encrypt(plaintext, password) {\r\n plaintext = String(plaintext);\r\n password = String(password);\r\n\r\n if (plaintext.length == 0) return \"\"; // nothing to encrypt\r\n\r\n // v is n-word data vector; converted to array of longs from UTF-8 string\r\n const v = Tea.strToLongs(Tea.utf8Encode(plaintext));\r\n // k is 4-word key; simply convert first 16 chars of password as key\r\n const k = Tea.strToLongs(Tea.utf8Encode(password).slice(0, 16));\r\n\r\n const cipher = Tea.encode(v, k);\r\n\r\n // convert array of longs to string\r\n const ciphertext = Tea.longsToStr(cipher);\r\n\r\n // convert binary string to base64 ascii for safe transport\r\n const cipherbase64 = Tea.base64Encode(ciphertext);\r\n\r\n return cipherbase64;\r\n }\r\n\r\n /**\r\n * Decrypts text using Corrected Block TEA (xxtea) algorithm.\r\n *\r\n * @param {string} ciphertext - String to be decrypted.\r\n * @param {string} password - Password to be used for decryption (1st 16 chars).\r\n * @returns {string} Decrypted text.\r\n * @throws {Error} Invalid ciphertext\r\n */\r\n static decrypt(ciphertext, password) {\r\n ciphertext = String(ciphertext);\r\n password = String(password);\r\n\r\n if (ciphertext.length == 0) return \"\"; // nothing to decrypt\r\n\r\n // v is n-word data vector; converted to array of longs from base64 string\r\n const v = Tea.strToLongs(Tea.base64Decode(ciphertext));\r\n // k is 4-word key; simply convert first 16 chars of password as key\r\n const k = Tea.strToLongs(Tea.utf8Encode(password).slice(0, 16));\r\n\r\n const plain = Tea.decode(v, k);\r\n\r\n const plaintext = Tea.longsToStr(plain);\r\n\r\n // strip trailing null chars resulting from filling 4-char blocks:\r\n const plainUnicode = Tea.utf8Decode(plaintext.replace(/\\0+$/, \"\"));\r\n\r\n return plainUnicode;\r\n }\r\n\r\n /**\r\n * XXTEA: encodes array of unsigned 32-bit integers using 128-bit key.\r\n *\r\n * @param {number[]} v - Data vector.\r\n * @param {number[]} k - Key.\r\n * @returns {number[]} Encoded vector.\r\n */\r\n static encode(v, k) {\r\n if (v.length < 2) v[1] = 0; // algorithm doesn't work for n<2 so fudge by adding a null\r\n const n = v.length;\r\n const delta = 0x9e3779b9;\r\n let q = Math.floor(6 + 52 / n);\r\n\r\n let z = v[n - 1],\r\n y = v[0];\r\n let mx,\r\n e,\r\n sum = 0;\r\n\r\n while (q-- > 0) {\r\n // 6 + 52/n operations gives between 6 & 32 mixes on each word\r\n sum += delta;\r\n e = (sum >>> 2) & 3;\r\n for (let p = 0; p < n; p++) {\r\n y = v[(p + 1) % n];\r\n mx = (((z >>> 5) ^ (y << 2)) + ((y >>> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p & 3) ^ e] ^ z));\r\n z = v[p] += mx;\r\n }\r\n }\r\n\r\n return v;\r\n }\r\n\r\n /**\r\n * XXTEA: decodes array of unsigned 32-bit integers using 128-bit key.\r\n *\r\n * @param {number[]} v - Data vector.\r\n * @param {number[]} k - Key.\r\n * @returns {number[]} Decoded vector.\r\n */\r\n static decode(v, k) {\r\n const n = v.length;\r\n const delta = 0x9e3779b9;\r\n const q = Math.floor(6 + 52 / n);\r\n\r\n let z = v[n - 1],\r\n y = v[0];\r\n let mx,\r\n e,\r\n sum = q * delta;\r\n\r\n while (sum != 0) {\r\n e = (sum >>> 2) & 3;\r\n for (let p = n - 1; p >= 0; p--) {\r\n z = v[p > 0 ? p - 1 : n - 1];\r\n mx = (((z >>> 5) ^ (y << 2)) + ((y >>> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p & 3) ^ e] ^ z));\r\n y = v[p] -= mx;\r\n }\r\n sum -= delta;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n /**\r\n * Converts string to array of longs (each containing 4 chars).\r\n * @private\r\n */\r\n static strToLongs(s) {\r\n // note chars must be within ISO-8859-1 (Unicode code-point <= U+00FF) to fit 4/long\r\n const l = new Array(Math.ceil(s.length / 4));\r\n for (let i = 0; i < l.length; i++) {\r\n // note little-endian encoding - endianness is irrelevant as long as it matches longsToStr()\r\n l[i] =\r\n s.charCodeAt(i * 4) +\r\n (s.charCodeAt(i * 4 + 1) << 8) +\r\n (s.charCodeAt(i * 4 + 2) << 16) +\r\n (s.charCodeAt(i * 4 + 3) << 24);\r\n } // note running off the end of the string generates nulls since bitwise operators treat NaN as 0\r\n return l;\r\n }\r\n\r\n /**\r\n * Converts array of longs to string.\r\n * @private\r\n */\r\n static longsToStr(l) {\r\n let str = \"\";\r\n for (let i = 0; i < l.length; i++) {\r\n str += String.fromCharCode(l[i] & 0xff, (l[i] >>> 8) & 0xff, (l[i] >>> 16) & 0xff, (l[i] >>> 24) & 0xff);\r\n }\r\n return str;\r\n }\r\n\r\n /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\n /**\r\n * Encodes multi-byte string to utf8 - monsur.hossa.in/2012/07/20/utf-8-in-javascript.html\r\n */\r\n static utf8Encode(str) {\r\n return unescape(encodeURIComponent(str));\r\n }\r\n\r\n /**\r\n * Decodes utf8 string to multi-byte\r\n */\r\n static utf8Decode(utf8Str) {\r\n try {\r\n return decodeURIComponent(escape(utf8Str));\r\n } catch (e) {\r\n return utf8Str; // invalid UTF-8? return as-is\r\n }\r\n }\r\n\r\n /**\r\n * Encodes base64 - developer.mozilla.org/en-US/docs/Web/API/window.btoa, nodejs.org/api/buffer.html\r\n */\r\n static base64Encode(str) {\r\n if (typeof btoa != \"undefined\") return btoa(str); // browser\r\n if (typeof Buffer != \"undefined\") return new Buffer(str, \"binary\").toString(\"base64\"); // Node.js\r\n throw new Error(\"No Base64 Encode\");\r\n }\r\n\r\n /**\r\n * Decodes base64\r\n */\r\n static base64Decode(b64Str) {\r\n if (typeof atob == \"undefined\" && typeof Buffer == \"undefined\") throw new Error(\"No base64 decode\");\r\n try {\r\n if (typeof atob != \"undefined\") return atob(b64Str); // browser\r\n if (typeof Buffer != \"undefined\") return new Buffer(b64Str, \"base64\").toString(\"binary\"); // Node.js\r\n } catch (e) {\r\n throw new Error(\"Invalid ciphertext\");\r\n }\r\n }\r\n}\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r\n\r\nexport default Tea;\r\n","import TEA from \"./tea.js\";\r\n\r\n/**\r\n * tea 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {string} 返回加密后的字符串\r\n */\r\nexport function encrypt(str, key) {\r\n return TEA.encrypt(str, key);\r\n}\r\n\r\n/**\r\n * tea 解密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {string} 返回解密后的字符串\r\n */\r\nexport function decrypt(str, key) {\r\n return TEA.decrypt(str, key);\r\n}\r\n","/**\r\n * 指定位置的字符串转为星号\r\n * @param {String|Number} value 字符串参数\r\n * @param {Number} start 转换开始位置\r\n * @param {Number} len 显示星号的长度\r\n * @returns {String} 返回转化后字符串\r\n */\r\nexport function formatStartOf(value, start, len) {\r\n value = String(value);\r\n if (start > value.length) return value;\r\n // len小于0和len大于剩余长度\r\n let startStr = \"\";\r\n if (len < 0) len = 0;\r\n if (len > value.length - start) {\r\n len = value.length - start;\r\n }\r\n startStr = String().padEnd(len, \"*\");\r\n return value.substring(0, start) + startStr + value.substring(start + len);\r\n}\r\n\r\n/**\r\n * 姓名中间转为星号\r\n * @param {String} value 姓名\r\n * @returns {String} 返回转化后字符串\r\n */\r\nexport function formatStartOfName(value) {\r\n if (value.length === 2) {\r\n return formatStartOf(value, 1, 1);\r\n } else if (value.length > 2) {\r\n return formatStartOf(value, 1, value.length - 2);\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\n/**\r\n * 手机号码固定位数转为星号\r\n * @param {String} value 手机号码\r\n * @param {Number} start 前缀长度,默认3位\r\n * @param {Number} len 显示星号的长度,默认4位\r\n * @returns {String} 返回转化后字符串\r\n */\r\nexport function formatStartOfMobile(value, start = 3, len = 4) {\r\n return formatStartOf(value, start, len);\r\n}\r\n\r\n/**\r\n * 身份证号码固定位数转为星号\r\n * @param {String} value 身份证号码\r\n * @param {Number} start 前缀长度,默认4位\r\n * @param {Number} len 显示星号的长度,默认8位\r\n * @returns {String} 返回转化后字符串\r\n */\r\nexport function formatStartOfIDCard(value, start = 4, len = 8) {\r\n return formatStartOf(value, start, len);\r\n}\r\n\r\n/**\r\n * 银行卡号固定位数转为星号\r\n * @param {String} value 银行卡号\r\n * @param {Number} start 前缀长度,默认4位\r\n * @param {Number} len 显示星号的长度,默认10位\r\n * @returns {String} 返回转化后字符串\r\n */\r\nexport function formatStartOfBankCard(value, start = 4, len = 11) {\r\n return formatStartOf(value, start, len);\r\n}\r\n","import { isNull } from \"../validate\";\r\nimport { parseDate, getAge } from \"../date/index.js\";\r\nimport { ID_CARD } from \"../constants/index.js\";\r\n\r\n/**\r\n * 根据身份证号码获取信息\r\n * @description 能获取到 籍贯,出生日期,年龄,性别\r\n * @param {String} idCard 身份证号码,支持一代15位和二代18位\r\n * @returns {Object} 返回身份证信息对象\r\n */\r\nexport function getInfoByIDCard(idCard) {\r\n if (isNull(idCard)) return;\r\n return {\r\n // 省份\r\n province: getProvinceByIDCard(idCard),\r\n // 生日\r\n birthday: getBirthdayByIDCard(idCard),\r\n // 年龄\r\n age: getAgeByIDCard(idCard),\r\n // 性别\r\n sex: getSexByIDCard(idCard),\r\n };\r\n}\r\n\r\n/**\r\n * 根据身份证号码获得生日\r\n * @param {String} idCard 身份证号码,支持一代15位和二代18位\r\n * @returns {String} 返回生日\r\n */\r\nexport function getBirthdayByIDCard(idCard) {\r\n if (isNull(idCard)) return;\r\n // 15位身份证\r\n if (idCard.length === 15) {\r\n return \"19\" + idCard.substring(6, 8) + \"-\" + idCard.substring(8, 10) + \"-\" + idCard.substring(10, 12);\r\n }\r\n // 18位身份证\r\n if (idCard.length === 18) {\r\n return idCard.substring(6, 10) + \"-\" + idCard.substring(10, 12) + \"-\" + idCard.substring(12, 14);\r\n }\r\n}\r\n\r\n/**\r\n * 根据身份证号码获得年龄\r\n * @param {String} idCard 身份证号码,支持一代15位和二代18位\r\n * @returns {Number} 返回年龄\r\n */\r\nexport function getAgeByIDCard(idCard) {\r\n if (isNull(idCard)) return;\r\n let birthday = getBirthdayByIDCard(idCard);\r\n return getAge(parseDate(birthday));\r\n}\r\n\r\n/**\r\n * 根据身份证号码获得性别\r\n * @param {String} idCard 身份证号码,支持一代15位和二代18位\r\n * @returns {String} 返回性别\r\n */\r\nexport function getSexByIDCard(idCard) {\r\n if (isNull(idCard)) return;\r\n // 15位身份证\r\n if (idCard.length === 15) {\r\n return Number(idCard.substring(14)) % 2 === 0 ? ID_CARD.SEX.WOMAN : ID_CARD.SEX.MAN;\r\n }\r\n // 18位身份证\r\n if (idCard.length === 18) {\r\n return Number(idCard.substring(16, 17)) % 2 === 0 ? ID_CARD.SEX.WOMAN : ID_CARD.SEX.MAN;\r\n }\r\n}\r\n\r\n/**\r\n * 根据身份证号码获得省份\r\n * @param {String} idCard 身份证号码,支持一代15位和二代18位\r\n * @returns {String} 返回省份\r\n */\r\nexport function getProvinceByIDCard(idCard) {\r\n if (isNull(idCard)) return;\r\n return ID_CARD.PROVINCE[idCard.substring(0, 2)];\r\n}\r\n","/**\r\n * 获得分页起始数\r\n * @param {Object} pagination 分页参数\r\n * @returns {Array} 返回起始数\r\n */\r\nexport function getLimit(pagination = { page: 1, pageSize: 10, total: 0, totalPage: 0, pagerCount: 7 }) {\r\n return [pagination.pageSize * (pagination.page - 1), pagination.pageSize * pagination.page];\r\n}\r\n\r\n/**\r\n * 获得总条数\r\n * @param {Object} pagination 分页参数\r\n * @returns {Number} 返回总条数\r\n */\r\nexport function getTotalPage(pagination = { page: 1, pageSize: 10, total: 0, totalPage: 0, pagerCount: 7 }) {\r\n return Math.ceil((pagination.total || 0) / (pagination.pageSize || 0));\r\n}\r\n\r\n/**\r\n * 获得彩虹分页器\r\n * @param {Object} pagination 分页参数\r\n * @param {Function} callback 回调函数\r\n * @returns {Promise} 返回彩虹分页器数据\r\n */\r\nexport function getRainbowPager(\r\n pagination = {\r\n page: 1,\r\n pageSize: 10,\r\n total: 0,\r\n totalPage: 0,\r\n pagerCount: 7,\r\n },\r\n callback,\r\n) {\r\n return new Promise((resolve) => {\r\n // 分页参数\r\n let page = pagination.page || 1;\r\n let totalPage = pagination.totalPage > 0 ? pagination.totalPage : getTotalPage(pagination);\r\n let pagerCount = pagination.pagerCount || 7;\r\n\r\n // 计算参数\r\n let isEven = (pagerCount & 1) === 0;\r\n let left = pagerCount >> 1;\r\n let right = pagerCount >> 1;\r\n let pagerLength = pagerCount;\r\n\r\n // 计算生成的分页器数量\r\n if (isEven) {\r\n right++;\r\n }\r\n if (totalPage < pagerCount) {\r\n pagerLength = totalPage;\r\n }\r\n\r\n // 分页器数组\r\n let pager = new Array(pagerLength);\r\n\r\n // 生成分页器\r\n if (totalPage >= pagerCount) {\r\n if (page <= left) {\r\n for (let i = 0; i < pager.length; i++) {\r\n pager[i] = i + 1;\r\n }\r\n } else if (page > totalPage - right) {\r\n for (let i = 0; i < pager.length; i++) {\r\n pager[i] = i + totalPage - pagerCount + 1;\r\n }\r\n } else {\r\n for (let i = 0; i < pager.length; i++) {\r\n pager[i] = i + page - left + (isEven ? 1 : 0);\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < pager.length; i++) {\r\n pager[i] = i + 1;\r\n }\r\n }\r\n\r\n // 支持回调函数和Promise\r\n callback && callback(pager);\r\n resolve(pager);\r\n });\r\n}\r\n\r\n/**\r\n * 获得上一页\r\n * @param {Object} pagination 分页参数\r\n * @param {Function} callback 回调函数\r\n * @returns {Promise} 返回上一页\r\n */\r\nexport function getPrevPage(pagination = { page: 1, pageSize: 10, total: 0, totalPage: 0, pagerCount: 7 }, callback) {\r\n return new Promise((resolve) => {\r\n if (pagination.page > 1) {\r\n pagination.page--;\r\n } else {\r\n pagination.page = 1;\r\n }\r\n\r\n // 支持回调函数和Promise\r\n callback && callback(pagination.page);\r\n resolve(pagination.page);\r\n });\r\n}\r\n\r\n/**\r\n * 获得下一页\r\n * @description 最后一页会根据totalPage参数判断,如果不传此参数,则会根据参数中pageSize和total重新计算总页数\r\n * @param {Object} pagination 分页参数\r\n * @param {Function} callback 回调函数\r\n * @returns {Promise} 返回下一页\r\n */\r\nexport function getNextPage(pagination = { page: 1, pageSize: 10, total: 0, totalPage: 0, pagerCount: 7 }, callback) {\r\n return new Promise((resolve) => {\r\n // 获得总页数,如果没有传totalPage,则需要根据传的pageSize和total计算\r\n let totalPage = pagination.totalPage > 0 ? pagination.totalPage : getTotalPage(pagination);\r\n\r\n // 计算当前页大于0和小与0的情况\r\n if (pagination.page > 0) {\r\n if (pagination.page < totalPage) {\r\n pagination.page++;\r\n } else {\r\n pagination.page = totalPage;\r\n }\r\n } else {\r\n pagination.page = 1;\r\n }\r\n\r\n // 支持回调函数和Promise\r\n callback && callback(pagination.page);\r\n resolve(pagination.page);\r\n });\r\n}\r\n","import { REGEXP } from \"../constants\";\r\nimport { isArray } from \"../validate/index.js\";\r\nimport { arrayInsertAfter, arrayInsertBefore } from \"../array/index.js\";\r\n\r\n/**\r\n * 获得协议名\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回协议名\r\n */\r\nexport function getProtocol(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n if (match) {\r\n return match[1] || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 获得主机地址\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回主机地址\r\n */\r\nexport function getHost(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n if (match) {\r\n return (match[2] || \"\") + (match[3] ? \":\" + match[3] : \"\");\r\n }\r\n}\r\n\r\n/**\r\n * 获得主机名称\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回主机名称\r\n */\r\nexport function getHostName(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n if (match) {\r\n return match[2] || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 获得端口号\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回端口号\r\n */\r\nexport function getPort(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n\r\n if (match) {\r\n return match[3] || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 获得地址路径\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回地址路径\r\n */\r\nexport function getUrlPath(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n if (match) {\r\n return match[4] || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 获得hash字符串\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回hash字符串\r\n */\r\nexport function getUrlHash(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n if (match) {\r\n return match[6] || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 获得查询参数字符串\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function getSearchString(url = window.location.href) {\r\n let match = url.match(REGEXP.URL);\r\n if (match) {\r\n return match[5] || \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 查询参数字符串中是否包含某个参数\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @returns {Boolean} 返回结果\r\n */\r\nexport function hasSearchParam(url = window.location.href, name) {\r\n let params = parseSearchParam(url);\r\n return params[name] !== undefined;\r\n}\r\n\r\n/**\r\n * 查询参数字符串中获得某个参数的值\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @returns {String} 返回查询到的值\r\n */\r\nexport function getSearchParam(url = window.location.href, name = \"\") {\r\n name = name.replace(/[[\\]]/g, \"\\\\$&\");\r\n url = getSearchString(url);\r\n let reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\");\r\n let match = url.substring(0).match(reg);\r\n if (match) {\r\n return decodeURIComponent(match[2]);\r\n }\r\n}\r\n\r\n/**\r\n * 查询参数字符串中设置某个参数的值\r\n * @param {String} name 参数名\r\n * @param {String,Number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function setSearchParam(url = window.location.href, name = \"\", value) {\r\n let params = parseSearchParam(url);\r\n params[name] = value;\r\n\r\n // 返回替换后的url\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + stringifySearchParam(params));\r\n}\r\n\r\n/**\r\n * 查询参数字符串转为对象\r\n * @param {String} url url地址,默认当前url地址\r\n * @returns {Object} 返回参数对象\r\n */\r\nexport function parseSearchParam(url = window.location.href) {\r\n let searchString = getSearchString(url);\r\n let searchArr = searchString.split(\"&\");\r\n let param = {};\r\n for (let i = 0; i < searchArr.length; i++) {\r\n let arr = searchArr[i].split(\"=\");\r\n param[decodeURIComponent(arr[0])] = decodeURIComponent(arr[1] || \"\");\r\n }\r\n return param;\r\n}\r\n\r\n/**\r\n * 对象转为查询参数字符串\r\n * @param {Object} params 参数对象\r\n * @param {String} url url地址,如果不为空,则会拼接好查询参数字符串的url地址\r\n * @returns {String,Object} 返回参数字符串或参数对象\r\n */\r\nexport function stringifySearchParam(params, url = undefined) {\r\n if (typeof params !== \"object\") return params;\r\n\r\n let arr = [];\r\n for (let key in params) {\r\n let value = params[key];\r\n if (isArray(value)) {\r\n for (let i = 0; i < value.length; ++i) {\r\n arr.push(encodeURIComponent(key + \"[\" + i + \"]\") + \"=\" + encodeURIComponent(value[i]));\r\n }\r\n } else {\r\n arr.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]));\r\n }\r\n }\r\n // 如果url不为空,则会返回拼接好url字符串\r\n if (url) {\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + arr.join(\"&\"));\r\n } else {\r\n return arr.join(\"&\");\r\n }\r\n}\r\n\r\n/**\r\n * 查询参数字符串中在最前面追加新参数和值\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @param {String,Number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function prependSearchParam(url = window.location.href, name, value) {\r\n let searchArr = getSearchString(url).split(\"&\");\r\n if (isArray(value)) {\r\n let arr = [];\r\n for (let i = 0; i < value.length; i++) {\r\n arr.push(`${encodeURIComponent(name)}[${i}]=${encodeURIComponent(value[i])}`);\r\n }\r\n searchArr.unshift(...arr);\r\n } else {\r\n searchArr.unshift(`${encodeURIComponent(name)}=${encodeURIComponent(value)}`);\r\n }\r\n\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + searchArr.join(\"&\"));\r\n}\r\n\r\n/**\r\n * 查询参数字符串中在某个参数的前面追加新参数和值\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @param {String,Number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2\r\n * @param {String} beforeParam 在前面追加参数的名称\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function prependToSearchParam(url = window.location.href, beforeParam, name, value) {\r\n let searchArr = getSearchString(url).split(\"&\");\r\n let beforeIndex = searchArr.findIndex((v) => v.includes(beforeParam));\r\n let beforeArr = arrayInsertBefore(searchArr, beforeIndex, `${name}=${value}`);\r\n\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + beforeArr.join(\"&\"));\r\n}\r\n\r\n/**\r\n * 查询参数字符串中在最后面追加新参数和值\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @param {String,Number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function appendSearchParam(url = window.location.href, name, value) {\r\n let searchArr = getSearchString(url).split(\"&\");\r\n searchArr.push(`${name}=${value}`);\r\n\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + searchArr.join(\"&\"));\r\n}\r\n\r\n/**\r\n * 查询参数字符串中在某个参数的后面追加新参数和值\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @param {String,Number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2\r\n * @param {String} afterName 在后面追加参数的名称\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function appendToSearchParam(url = window.location.href, afterName, name, value) {\r\n let searchArr = getSearchString(url).split(\"&\");\r\n let beforeIndex = searchArr.findIndex((v) => v.includes(afterName));\r\n let afterArr = arrayInsertAfter(searchArr, beforeIndex, `${name}=${value}`);\r\n\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + afterArr.join(\"&\"));\r\n}\r\n\r\n/**\r\n * 查询参数字符串中移除某个参数和值\r\n * @param {String} url url地址,默认当前url地址\r\n * @param {String} name 参数名\r\n * @returns {String} 返回查询参数字符串\r\n */\r\nexport function removeSearchParam(url = window.location.href, name) {\r\n let searchArr = getSearchString(url).split(\"&\");\r\n let delIndex = searchArr.findIndex((v) => v.includes(name));\r\n if (delIndex > -1) {\r\n searchArr.splice(delIndex, 1);\r\n }\r\n\r\n return url.replace(/(\\?.+?)(?=#|$)/, \"?\" + searchArr.join(\"&\"));\r\n}\r\n","import { isEmpty } from \"../validate\";\r\n\r\n/**\r\n * 浏览器是否支持 Cookie\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isSupportCookie() {\r\n return window.navigator.cookieEnabled;\r\n}\r\n\r\n/* cookie存储 */\r\n/**\r\n * 通过name获取cookie\r\n * @param {String} name 参数name\r\n * @returns {String} 返回获取的值\r\n */\r\nexport function getCookie(name) {\r\n if (typeof document == \"undefined\") return \"\";\r\n // cookie中每个分号后面是有个空格的,需要替换掉\r\n let arr = document.cookie ? document.cookie.replace(/\\s/g, \"\").split(\";\") : [];\r\n for (let i in arr) {\r\n let tempArr = arr[i].split(\"=\");\r\n if (tempArr[0] === name) {\r\n return decodeURIComponent(tempArr[1]);\r\n }\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * 通过name设置cookie\r\n * 注:timestamp参数不填,则默认为session级别,浏览器关闭即cookie过期\r\n * @param {String} name 参数name\r\n * @param {String} value 设置的value\r\n * @param {Number} timestamp 过期的时间戳值,默认为一天,设置一天过期则为:24*60*60*1000\r\n */\r\nexport function setCookie(name, value, timestamp = 24 * 60 * 60 * 1000) {\r\n if (typeof document == \"undefined\") return;\r\n document.cookie = name + \"=\" + value + \";expires=\" + new Date(Date.now() + timestamp);\r\n}\r\n\r\n/**\r\n * 通过name删除cookie\r\n * @param {String} name 参数name\r\n */\r\nexport function removeCookie(name) {\r\n if (isEmpty(name)) return;\r\n setCookie(name, \"\", -1);\r\n}\r\n\r\n/**\r\n * 清空当前站点域名的cookie\r\n * @param {String} domain 域名地址,默认是当前站点域名\r\n */\r\nexport function clearCookie(domain = document.domain) {\r\n let names = document.cookie.match(/[^ =;]+(?==)/g);\r\n if (names) {\r\n for (let i = names.length; i--; ) {\r\n document.cookie =\r\n names[i] + \"=0;path=/;\" + domain ? \"domain=\" + domain + \";\" : \"\" + \"expires=\" + new Date(0).toUTCString();\r\n }\r\n }\r\n}\r\n","/* Class操作 */\r\n/**\r\n * 判断元素包含某个类名\r\n * @param {Element} elem 元素\r\n * @param {String} className 类名\r\n * @return {Boolean} 返回true和false\r\n */\r\nexport function hasClass(elem, className) {\r\n return elem.className.indexOf(className) > 0;\r\n}\r\n\r\n/**\r\n * 元素添加类名\r\n * @param {Element} elem 元素\r\n * @param {String} className 类名\r\n */\r\nexport function addClass(elem, className) {\r\n if (!hasClass(elem, className)) {\r\n elem.className += \" \" + className;\r\n }\r\n}\r\n\r\n/**\r\n * 元素删除类名\r\n * @param {Element} elem 元素\r\n * @param {String} className 类名\r\n */\r\nexport function removeClass(elem, className) {\r\n if (hasClass(elem, className)) {\r\n elem.className = elem.className.replace(new RegExp(className, \"gm\"), \"\");\r\n }\r\n}\r\n\r\n/**\r\n * 元素替换类名\r\n * @param {Element} elem 元素\r\n * @param {String} newClassName 新的类名\r\n * @param {String} oldClassName 被替换掉的旧类名\r\n */\r\nexport function replaceClass(elem, newClassName, oldClassName) {\r\n removeClass(elem, oldClassName);\r\n addClass(elem, newClassName);\r\n}\r\n\r\n/* Style操作 */\r\n/**\r\n * 添加元素的style样式\r\n * @param {Element} elem 元素\r\n * @param {Object} styles 样式属性集合\r\n */\r\nexport function addStyle(elem, styles = {}) {\r\n if (!elem) return;\r\n for (let key in styles) {\r\n elem.style[key] = styles[key];\r\n }\r\n}\r\n\r\n/**\r\n * 获取元素的style样式\r\n * @param {Element} elem 元素\r\n * @param {String} name 属性\r\n * @returns {String} 返回样式的值\r\n */\r\nexport function getStyle(elem, name) {\r\n if (!elem) return;\r\n return elem.style[name];\r\n}\r\n\r\n/**\r\n * 删除元素的style样式\r\n * @param {Element} elem 元素\r\n * @param {String} name 属性\r\n */\r\nexport function removeStyle(elem, name) {\r\n if (!elem) return;\r\n elem.style.removeProperty(name);\r\n}\r\n\r\n/* Html转码 */\r\n/**\r\n * html标签转义\r\n * @param {String} htmlStr html字符串\r\n * @returns {String} 返回转义后的字符串\r\n */\r\nexport function htmlEncode(htmlStr) {\r\n const temp = {\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n \"&\": \"&amp;\",\r\n \"(\": \"&#40;\",\r\n \")\": \"&#41;\",\r\n \"/\": \"&#47;\",\r\n \" \": \"&nbsp;\",\r\n '\"': \"&quot;\",\r\n \"'\": \"&#39;\",\r\n };\r\n return htmlStr.replace(/[<>&|()\\/ '\"]/g, function (c) {\r\n return temp[c];\r\n });\r\n}\r\n\r\n/**\r\n * html标签解码\r\n * @param {String} htmlStr html字符串\r\n * @returns {String} 返回解析后的字符串\r\n */\r\nexport function htmlDecode(htmlStr) {\r\n const temp = {\r\n \"&lt;\": \"<\",\r\n \"&gt;\": \">\",\r\n \"&amp;\": \"&\",\r\n \"&#40;\": \"(\",\r\n \"&#41;\": \")\",\r\n \"&#47;\": \"/\",\r\n \"&nbsp;\": \" \",\r\n \"&quot;\": '\"',\r\n \"&#39;\": \"'\",\r\n };\r\n return htmlStr.replace(/(&lt;|&gt;|&amp;|&#40;|&#41;|&#47;|&nbsp;|&quot;|&#39;)/gi, function (all, t) {\r\n return temp[t];\r\n });\r\n}\r\n","/* 浏览器信息 */\r\n/**\r\n * 获取浏览器信息\r\n * @description 会获取到浏览器对应的名称以及版本\r\n * @returns {Object} 返回浏览器信息\r\n */\r\nexport function getBrowserInfo() {\r\n let ua = window.navigator.userAgent.toLowerCase();\r\n\r\n // ie\r\n let ie = ua.match(/rv:([\\d.]+)\\) like gecko/) || ua.match(/msie ([\\d\\.]+)/);\r\n // edge\r\n let edge = ua.match(/edg\\/([\\d\\.]+)/);\r\n // firefox\r\n let firefox = ua.match(/firefox\\/([\\d\\.]+)/);\r\n // opera\r\n let opera = ua.match(/(?:opera|opr).([\\d\\.]+)/);\r\n // chrome\r\n let chrome = ua.match(/chrome\\/([\\d\\.]+)/);\r\n // safari\r\n let safari = ua.match(/version\\/([\\d\\.]+).*safari/);\r\n\r\n // 判断类型\r\n if (ie) return { name: \"ie\", version: ie[1] };\r\n if (edge) return { name: \"edge\", version: edge[1] };\r\n if (firefox) return { name: \"firefox\", version: firefox[1] };\r\n if (opera) return { name: \"opera\", version: opera[1] };\r\n if (chrome) return { name: \"chrome\", version: chrome[1] };\r\n if (safari) return { name: \"safari\", version: safari[1] };\r\n return \"unknown\";\r\n}\r\n\r\n/* 设备类型 */\r\n/**\r\n * 判断是pc端\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isPc() {\r\n return !isPhone();\r\n}\r\n\r\n/**\r\n * 判断是手机端\r\n * @description 包含 android、iphone、黑莓手机、微软手机 等多种操作系统机型\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isPhone() {\r\n let ua = window.navigator.userAgent;\r\n return /Android|webOS|iPhone|iPod|BlackBerry|Windows Phone|IEMobile/i.test(ua);\r\n}\r\n\r\n/* 操作系统类型 */\r\n/**\r\n * 判断是 android\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isAndroid() {\r\n let ua = window.navigator.userAgent;\r\n return /Android|BlackBerry/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是 ios\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isIos() {\r\n let ua = window.navigator.userAgent;\r\n return /iPhone|iPad|iPod|iOS/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是 windows phone\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isWindowsPhone() {\r\n let ua = window.navigator.userAgent;\r\n return /Windows Phone/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是 windows\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isWindows() {\r\n let ua = window.navigator.userAgent;\r\n return /win/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是 linux\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isLinux() {\r\n let ua = window.navigator.userAgent;\r\n return /linux/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是 Mac\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isMac() {\r\n let ua = window.navigator.userAgent;\r\n return /mac/i.test(ua);\r\n}\r\n\r\n/* 苹果设备类型 */\r\n/**\r\n * 判断是iphone\r\n *@returns {Boolean} 返回true和false\r\n */\r\nexport function isIphone() {\r\n let ua = window.navigator.userAgent;\r\n return /iPhone/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是ipad\r\n *@return {Boolean} 返回true和false\r\n */\r\nexport function isIpad() {\r\n let ua = window.navigator.userAgent;\r\n return /iPod/i.test(ua);\r\n}\r\n\r\n/* 手机浏览器类型 */\r\n/**\r\n * 判断是微信内置浏览器\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isWeixin() {\r\n let ua = window.navigator.userAgent;\r\n return /MicroMessenger/i.test(ua);\r\n}\r\n\r\n/**\r\n * 判断是QQ内置浏览器\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isQQ() {\r\n let ua = window.navigator.userAgent;\r\n return /QQ/i.test(ua);\r\n}\r\n","import { blobToText } from \"../file/index.js\";\r\n\r\n/**\r\n * 获得剪切板数据\r\n * @description 获得的剪切板的数据是会返回多个可用的MIME类型,比如是纯文本就返回一个['text/plain'],是复制的html则会返回两个可用的['text/plain','text/html'],是复制的图片则是['image/png']\r\n * @returns {Promise} 返回剪切板的数据,是数组形式,如果是文本则是字符串,否则是blob数据\r\n */\r\nexport function getClipboard() {\r\n return new Promise((resolve, reject) => {\r\n if (window.navigator.clipboard) {\r\n window.navigator.clipboard.read().then((clipboardItems) => {\r\n let list = [];\r\n for (let item of clipboardItems) {\r\n for (let type of item.types) {\r\n item.getType(type).then(async (blob) => {\r\n // 文本类型,可以直接输出为字符串\r\n if (blob.type.includes(\"text\")) {\r\n let text = await blobToText(blob);\r\n list.push({ type: blob.type, data: text });\r\n }\r\n // 图片和其他文件类型,返回blob对象\r\n else {\r\n list.push({ type: blob.type, data: blob });\r\n }\r\n });\r\n }\r\n }\r\n resolve(list);\r\n });\r\n } else {\r\n console.warn(\"not support navigator clipboard!\");\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 获得剪切板文本\r\n * @returns {Promise} 返回剪切板文本\r\n */\r\nexport function getClipboardText() {\r\n return new Promise((resolve, reject) => {\r\n if (window.navigator.clipboard) {\r\n window.navigator.clipboard\r\n .readText()\r\n .then((text) => {\r\n resolve(text);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n } else {\r\n console.warn(\"not support navigator clipboard!\");\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 设置剪切板数据\r\n * @description 可以设置文本或者blob类型的数据\r\n * @param {String,Blob} data 写入的数据,可以是文本或blob数据\r\n * @returns {Promise} 返回结果\r\n */\r\nexport function setClipboard(data) {\r\n return new Promise((resolve, reject) => {\r\n // 现代浏览器\r\n if (window.navigator.clipboard) {\r\n let clipboardItem = null;\r\n // 是文本类型\r\n if (typeof data === \"string\") {\r\n let blob = new Blob([data], { type: \"text/plain\" });\r\n clipboardItem = new window.ClipboardItem({\r\n [\"text/plain\"]: blob,\r\n });\r\n }\r\n // 其他文件类型\r\n else {\r\n clipboardItem = new window.ClipboardItem({ [data.type]: data });\r\n }\r\n\r\n // 写入到剪切板中\r\n window.navigator.clipboard.write([clipboardItem]).then(\r\n (success) => {\r\n resolve(true);\r\n },\r\n (failed) => {\r\n reject(false);\r\n },\r\n );\r\n } else {\r\n console.warn(\"not support navigator clipboard!\");\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 设置剪切板文本\r\n * @param {String} text 写入的文本\r\n * @returns {Promise} 返回结果\r\n */\r\nexport function setClipboardText(text) {\r\n return new Promise((resolve, reject) => {\r\n // 现代浏览器\r\n if (window.navigator.clipboard) {\r\n window.navigator.clipboard.writeText(text).then(\r\n (success) => {\r\n resolve(true);\r\n },\r\n (failed) => {\r\n reject(false);\r\n },\r\n );\r\n } else {\r\n console.warn(\"not support navigator clipboard!\");\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 清空剪切板\r\n * @returns {Promise} 返回结果\r\n */\r\nexport function clearClipboard() {\r\n return new Promise(async (resolve, reject) => {\r\n await setClipboardText(\"\");\r\n resolve(true);\r\n });\r\n}\r\n","/**\r\n * 语言\r\n */\r\nexport const LANG = {\r\n // 中文\r\n ZH: \"zh\",\r\n // 英文\r\n EN: \"en\",\r\n};\r\n","/* localStorage存储 */\r\n/**\r\n * 通过key从localStorage缓存中获取数据\r\n * @param {String} key key值\r\n * @returns {String} 返回数据\r\n */\r\nexport function getLocalStorage(key) {\r\n return window.localStorage.getItem(key) || undefined;\r\n}\r\n\r\n/**\r\n * 设置localStorage缓存数据\r\n * @param {String} key key值\r\n * @param {String} value value值\r\n */\r\nexport function setLocalStorage(key, value) {\r\n window.localStorage.setItem(key, value);\r\n}\r\n\r\n/**\r\n * 通过key从localStorage缓存中删除数据\r\n * @param {String} key key值\r\n */\r\nexport function removeLocalStorage(key) {\r\n window.localStorage.removeItem(key);\r\n}\r\n\r\n/**\r\n * 清空localStorage缓存中所有数据\r\n */\r\nexport function clearLocalStorage() {\r\n window.localStorage.clear();\r\n}\r\n","/* sessionStorage存储 */\r\n/**\r\n * 通过key从sessionStorage缓存中获取数据\r\n * @param {String} key key值\r\n * @returns {String} 返回数据\r\n */\r\nexport function getSessionStorage(key) {\r\n return window.sessionStorage.getItem(key) || \"\";\r\n}\r\n\r\n/**\r\n * 设置sessionStorage缓存数据\r\n * @param {String} key key值\r\n * @param {String} value value值\r\n */\r\nexport function setSessionStorage(key, value) {\r\n window.sessionStorage.setItem(key, value);\r\n}\r\n\r\n/**\r\n * 通过key从sessionStorage缓存中删除数据\r\n * @param {String} key key值\r\n */\r\nexport function removeSessionStorage(key) {\r\n window.sessionStorage.removeItem(key);\r\n}\r\n\r\n/**\r\n * 清空sessionStorage缓存中所有数据\r\n */\r\nexport function clearSessionStorage() {\r\n window.sessionStorage.clear();\r\n}\r\n","/**\r\n * 设置缓存\r\n * @param {String} key key值\r\n * @param {*} data data数据\r\n */\r\n\r\nexport function setStorageSync(key, data) {\r\n wx.setStorageSync(key, data);\r\n}\r\n\r\n/**\r\n * 获得缓存数据\r\n * @param {String} key key值\r\n * @returns {*} 返回获取的值\r\n */\r\nexport function getStorageSync(key) {\r\n return wx.getStorageSync(key);\r\n}\r\n\r\n/**\r\n * 获得缓存信息\r\n * @returns {Object} 返回缓存信息\r\n */\r\nexport function getStorageInfoSync() {\r\n return wx.getStorageInfoSync();\r\n}\r\n\r\n/**\r\n * 删除缓存数据\r\n * @param {String} key key值\r\n */\r\nexport function removeStorageSync(key) {\r\n wx.removeStorageSync(key);\r\n}\r\n\r\n/**\r\n * 清空所有缓存数据\r\n */\r\nexport function clearStorageSync() {\r\n wx.clearStorageSync();\r\n}\r\n\r\n/* 缓存处理(异步) */\r\n/**\r\n * 设置缓存\r\n * @param {String} key key值\r\n * @param {*} data data数据\r\n * @param {Boolean} encrypt 是否开启加密存储\r\n * @returns {Promise} 返回Promise\r\n */\r\nexport function setStorage({ key, data, encrypt = false }) {\r\n return new Promise((resolve, reject) => {\r\n wx.setStorage({\r\n key,\r\n data,\r\n encrypt,\r\n success(res) {\r\n resolve(res);\r\n },\r\n fail(err) {\r\n reject(err);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 获得缓存数据\r\n * @param {String} key key值\r\n * @param {Boolean} encrypt 是否开启加密存储\r\n * @returns {Promise} 返回Promise\r\n */\r\nexport function getStorage({ key, encrypt = false }) {\r\n return new Promise((resolve, reject) => {\r\n wx.getStorage({\r\n key,\r\n encrypt,\r\n success(res) {\r\n resolve(res);\r\n },\r\n fail(err) {\r\n reject(err);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 获得缓存信息\r\n * @returns {Object} 返回Promise\r\n */\r\nexport function getStorageInfo() {\r\n return new Promise((resolve, reject) => {\r\n wx.getStorageInfo({\r\n success(res) {\r\n resolve(res);\r\n },\r\n fail(err) {\r\n reject(err);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 删除缓存数据\r\n * @param {String} key key值\r\n * @returns {Promise} 返回Promise\r\n */\r\nexport function removeStorage({ key }) {\r\n return new Promise((resolve, reject) => {\r\n wx.removeStorage({\r\n key,\r\n success(res) {\r\n resolve(res);\r\n },\r\n fail(err) {\r\n reject(err);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * 清空所有缓存数据\r\n * @returns {Promise} 返回Promise\r\n */\r\nexport function clearStorage() {\r\n return new Promise((resolve, reject) => {\r\n wx.clearStorage({\r\n success(res) {\r\n resolve(res);\r\n },\r\n fail(err) {\r\n reject(err);\r\n },\r\n });\r\n });\r\n}\r\n","/**\r\n * 防抖函数\r\n * @description 事件执行后,在延迟时间内如果再次执行,会清空定时器重新延迟执行,举例:用户在输入框进行输入搜索,最终是会获取到最后一次输入,节约请求资源\r\n * @param {Function} fn 目标函数\r\n * @param {Number} delay 延迟时间,单位毫秒,默认 1*1000 毫秒\r\n * @param {Boolean} immediate 是否立即执行,默认true\r\n * @returns {Function} 返回function()\r\n */\r\nexport function debounce(fn, delay = 1 * 1000, immediate = true) {\r\n let timer;\r\n return function () {\r\n const _args = arguments;\r\n // 先关闭定时器\r\n if (timer) clearTimeout(timer);\r\n // 立即执行判断\r\n if (immediate) {\r\n // 如果需要立即执行\r\n // 开启新定时器防止短时间内再次触发\r\n const canExecute = !timer;\r\n timer = setTimeout(function () {\r\n timer = null;\r\n }, delay);\r\n if (canExecute) fn.apply(this, _args);\r\n } else {\r\n // 如果不需要立即执行\r\n // 每次触发开启新定时器即可\r\n timer = setTimeout(function () {\r\n fn.apply(this, _args);\r\n }, delay);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * 节流函数\r\n * @description 高频触发时,在指定时间间隔内只执行一次,举例:监听页面滚动,不会频繁触发,只会在固定时间内获取一次\r\n * @param {Function} fn 目标函数\r\n * @param {Number} interval 时间间隔,单位毫秒,默认1*1000毫秒\r\n * @returns {Function} 返回function()\r\n */\r\nexport function throttle(fn, interval = 1 * 1000) {\r\n let timer;\r\n return function () {\r\n const _args = arguments;\r\n // 有定时器则返回\r\n if (timer) return;\r\n timer = setTimeout(() => {\r\n timer = null;\r\n fn.apply(this, _args);\r\n }, interval);\r\n };\r\n}\r\n\r\n/**\r\n * 睡眠延迟执行\r\n * @description 需要配合 async/await 来达到延迟效果\r\n * @param {Number} delay 延迟时间,单位毫秒,默认1*1000毫秒\r\n */\r\nexport function sleep(delay = 1 * 1000) {\r\n return new Promise((resolve) => setTimeout(resolve, delay));\r\n}\r\n","/**\r\n * 生成UUID\r\n * @param {Number} len 生成的长度,默认32位\r\n * @param {Number} radix 进制数,默认16进制\r\n * @example\r\n * getUUID() // 输出:0a559343dbbf0e7e6c1de90163e7aa0a\r\n * @returns {String} 返回字符串\r\n */\r\nexport function getUUID(len: number = 32, radix: number = 16): string {\r\n const CHARS = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\r\n let uuid = [],\r\n i;\r\n radix = radix || CHARS.length;\r\n if (len) {\r\n for (i = 0; i < len; i++) uuid[i] = CHARS[0 | (Math.random() * radix)];\r\n } else {\r\n let r;\r\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = \"-\";\r\n uuid[14] = \"4\";\r\n for (i = 0; i < 36; i++) {\r\n if (!uuid[i]) {\r\n r = 0 | (Math.random() * 16);\r\n uuid[i] = CHARS[i === 19 ? (r & 0x3) | 0x8 : r];\r\n }\r\n }\r\n }\r\n return uuid.join(\"\");\r\n}\r\n\r\n/**\r\n * 生成GUID\r\n * @example\r\n * getGUID() // 输出:275ec770-0853-6767-4875-7b270220ce9c\r\n * @returns {String} 返回字符串\r\n */\r\nexport function getGUID(): string {\r\n let s4 = function () {\r\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n };\r\n return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + s4() + s4();\r\n}\r\n","import { KEYCODE } from \"../constants\";\r\n\r\n/**\r\n * 根据keycode获得键名\r\n * @param {Number} keycode 键值\r\n * @returns {String} 返回键名\r\n */\r\nexport function getKeyName(keycode) {\r\n if (KEYCODE[keycode]) {\r\n return KEYCODE[keycode];\r\n } else {\r\n console.log(\"Unknow Key Code: \" + keycode);\r\n return \"\";\r\n }\r\n}\r\n\r\n/**\r\n * 根据keyname获得键值\r\n * @param {Number} keyname\r\n * @returns {Number} 返回键值\r\n */\r\nexport function getKeyCode(keyname) {\r\n for (let key in KEYCODE) {\r\n if (KEYCODE[key] === keyname) {\r\n return key;\r\n }\r\n }\r\n}\r\n","/**\r\n * 生成指定大小的随机整数\r\n * @description n和m参数表示最小和最大范围值,默认0-9之间范围\r\n * @param {Number} min 随机数的最小值,默认 0\r\n * @param {Number} max 随机数的最大值,默认 9\r\n * @returns {Number} 返回指定大小的随机整数\r\n */\r\nexport function getRandom(min = 0, max = 9) {\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n}\r\n\r\n/**\r\n * 生成固定位数的随机整数\r\n * @description 默认是1,代表生成0-9之间一位,如果是2,则生成10-99之间两位,以此类推\r\n * @param {Number} len 固定的位数\r\n * @returns {Number} 返回固定位数的随机数\r\n */\r\nexport function getRandomDigit(len = 1) {\r\n return Math.floor((Math.random() + Math.floor(Math.random() * 9 + 1)) * Math.pow(10, len - 1));\r\n}\r\n","/**\r\n * 浏览器是否支持 Storage\r\n * @returns {Boolean} 返回true和false\r\n */\r\nexport function isSupportStorage() {\r\n return !!(window.localStorage && window.sessionStorage);\r\n}\r\n\r\n/**\r\n * 导出localStorage和sessionStorage\r\n */\r\nexport * from \"./localStorage.js\";\r\nexport * from \"./sessionStorage.js\";\r\n","// 测试加载成功方法\r\nexport function loadedTestUtils(): void {\r\n console.log(\"Nice, iUtils loaded successfully!\");\r\n}\r\n\r\n// 常量集合\r\nexport * from \"./constants/index.js\";\r\n\r\n// 字符串\r\nexport * from \"./string/index.js\";\r\n// 数字\r\nexport * from \"./number/index.js\";\r\n// 数组\r\nexport * from \"./array/index.js\";\r\n// 对象\r\nexport * from \"./object/index.js\";\r\n// 函数\r\nexport * from \"./function/index.js\";\r\n// 日期\r\nexport * from \"./date/index.js\";\r\n// 数学\r\nexport * from \"./math/index.js\";\r\n// 正则\r\nexport * from \"./regexp/index.js\";\r\n// 随机数\r\nexport * from \"./random/index.js\";\r\n\r\n// 文件\r\nexport * from \"./file/index.js\";\r\n// 颜色\r\nexport * from \"./color/index.js\";\r\n// 校验\r\nexport * from \"./validate/index.js\";\r\n// 键盘\r\nexport * from \"./keycode/index.js\";\r\n\r\n// 生成id\r\nexport * from \"./id/index.ts\";\r\n\r\n// 加解密算法\r\nexport * from \"./crypto/index.js\";\r\n// 脱敏\r\nexport * from \"./desensitized/index.js\";\r\n// 身份证号码\r\nexport * from \"./ID-card/index.js\";\r\n// 分页\r\nexport * from \"./pagination/index.js\";\r\n\r\n// 浏览器 Url\r\nexport * from \"./url/index.js\";\r\n// 浏览器 Cookie\r\nexport * from \"./cookie/index.js\";\r\n// 浏览器 Storage\r\nexport * from \"./storage/index.js\";\r\n// 浏览器 Dom\r\nexport * from \"./dom/index.js\";\r\n// 浏览器 Device\r\nexport * from \"./device/index.js\";\r\n// 浏览器 Clipboard\r\nexport * from \"./clipboard/index.js\";\r\n\r\n// 微信小程序工具\r\nexport * from \"./weapp/index.js\";\r\n","import * as MD5 from \"./md5.js\";\r\n\r\n/**\r\n * md5 加密\r\n * @param {String} str 字符串\r\n * @returns {string} 返回加密后的字符串\r\n */\r\nexport function md5(str) {\r\n return MD5.md5(str);\r\n}\r\n\r\n/**\r\n * md5_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {string} 返回加密后的字符串\r\n */\r\nexport function md5_hmac(str, key) {\r\n return MD5.md5_hmac(key, str);\r\n}\r\n","import * as SHA1 from \"./sha1.js\";\r\n\r\n/**\r\n * sha1 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha1(str) {\r\n return SHA1.sha1(str);\r\n}\r\n\r\n/**\r\n * sha1_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha1_hmac(str, key) {\r\n return SHA1.sha1_hmac(key, str);\r\n}\r\n","import * as SHA256 from \"./sha256.js\";\r\n\r\n/**\r\n * sha256 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha256(str) {\r\n return SHA256.sha256(str);\r\n}\r\n\r\n/**\r\n * sha224 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha224(str) {\r\n return SHA256.sha224(str);\r\n}\r\n\r\n/**\r\n * sha256_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha256_hmac(str, key) {\r\n return SHA256.sha256_hmac(key, str);\r\n}\r\n\r\n/**\r\n * sha224_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha224_hmac(str, key) {\r\n return SHA256.sha224_hmac(key, str);\r\n}\r\n","import * as SHA512 from \"./sha512.js\";\r\n\r\n/**\r\n * sha256 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha512(str) {\r\n return SHA512.sha512(str);\r\n}\r\n\r\n/**\r\n * sha384 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha384(str) {\r\n return SHA512.sha384(str);\r\n}\r\n\r\n/**\r\n * sha512_256 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha512_256(str) {\r\n return SHA512.sha512_256(str);\r\n}\r\n\r\n/**\r\n * sha512_224 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha512_224(str) {\r\n return SHA512.sha512_224(str);\r\n}\r\n\r\n/**\r\n * sha512_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha512_hmac(str, key) {\r\n return SHA512.sha512_hmac(key, str);\r\n}\r\n\r\n/**\r\n * sha384_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha384_hmac(str, key) {\r\n return SHA512.sha384_hmac(key, str);\r\n}\r\n\r\n/**\r\n * sha512_256_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha512_256_hmac(str, key) {\r\n return SHA512.sha512_256_hmac(key, str);\r\n}\r\n\r\n/**\r\n * sha512_224_hmac 加密\r\n * @param {String} str 字符串\r\n * @param {String} key 秘钥\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha512_224_hmac(str, key) {\r\n return SHA512.sha512_224_hmac(key, str);\r\n}\r\n","import * as SHA3 from \"./sha3.js\";\r\n\r\n/**\r\n * sha3_512 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha3_512(str) {\r\n return SHA3.sha3_512(str);\r\n}\r\n\r\n/**\r\n * sha3_384 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha3_384(str) {\r\n return SHA3.sha3_384(str);\r\n}\r\n\r\n/**\r\n * sha3_256 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha3_256(str) {\r\n return SHA3.sha3_256(str);\r\n}\r\n\r\n/**\r\n * sha3_224 加密\r\n * @param {String} str 字符串\r\n * @returns {String} 返回加密后的字符串\r\n */\r\nexport function sha3_224(str) {\r\n return SHA3.sha3_224(str);\r\n}\r\n"],"names":["SORT","DESC","ASC","RANDOM","MATH","ROUND","ROUND_FLOOR","REGEXP","CH","EN","LOWER_CASE","UPPER_CASE","CH_NAME","EN_NAME","NUMBER","INTEGER","DECIMAL","INT_OR_FLOAT","MOBILE","PHONE","EMAIL","ID_CARD","ID_CARD15","ID_CARD18","BANK_CARD","POST_CODE","URL","IP","IP6","EXTERNAL","DATE","AM_PM","zh","AM","PM","en","WEEK","FULL","SHORT","MINI","MONTH","QUARTER","OVER_TIME","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","DAY","PASS_TIME","BEFORE_YESTERDAY","YESTERDAY","TODAY","JUST","HOLIDAY","ZODIAC","CHINESE_ZODIAC","HEAVENLY_STEMS","EARTHLY_BRANCHES","KEYCODE","PROVINCE","SEX","MAN","WOMAN","toPascalCase","value","indexOf","newStr","replace","all","letter","toUpperCase","charAt","slice","test","isInteger","Number","isString","Object","prototype","toString","call","isArray","isObject","isDate","isFalse","isNaN","window","isNull","isEmpty","Array","length","Map","Set","size","Date","RegExp","Error","keys","isBlank","isUndefined","undefined","parseInt","radix","arraySum","array","reduce","pre","cur","arrayInsertBefore","index","push","splice","arrayInsertAfter","mapToObject","map","obj","create","k","v","objectToMap","set","_getTargetPathPart","path","pathArrayMatch","match","propName","propIndex","isLeapYear","date","year","getFullYear","isBefore","startDate","endDate","getTime","isAfter","isSame","every","i","getDate","format","formatDate","getDateObject","month","getMonth","hours","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","getDayOfWeek","getDay","getDayOfMonth","getDayOfYear","Math","ceil","getDaysOfMonth","getDaysOfYear","getAge","age","dateArray","split","birthYear","birthMonth","birthDay","nowDate","nowYear","nowMonth","nowDay","diffAge","diffMonth","addDate","num","setDate","lang","parseDate","String","console","error","rules","floor","S","yearReg","$1","substring","amPmReg","toLowerCase","weekReg","quarterReg","dateReg","_digit","gcd","arg1","arg2","regexpTest","regex","blobToFile","blob","fileName","now","Promise","resolve","reject","mime","type","fileSuffix","File","name","lastModified","lastModifiedDate","err","blobToText","reader","FileReader","onload","event","target","result","onerror","readAsText","_hex","ENCODING_ERROR","WINDOW","root","HI_BASE64_NO_WINDOW","WEB_WORKER","self","NODE_JS","HI_BASE64_NO_NODE_JS","process","versions","node","global","BASE64_ENCODE_CHAR","BASE64_DECODE_CHAR","utf8Base64Encode","utf8Base64Decode","cleanBase64Str","base64Str","decodeAsBytes","v1","v2","v3","v4","bytes","count","remain","encodeFromBytes","join","btoa","atob","Buffer","require","str","from","charcode","charCodeAt","fromCharCode","tmpStr","b","c","followingChars","j","utf8ToBytes","encode","asciiOnly","notString","constructor","ArrayBuffer","Uint8Array","utf8Encode","utf8Decode","Base64.decodeAsBytes","Base64.encode","Base64.utf8Decode","Base64.utf8Encode","HI_BASE32_NO_NODE_JS","BASE32_ENCODE_CHAR","BASE32_DECODE_CHAR","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","T","U","V","W","X","Y","Z","blocks","throwInvalidUtf8","position","partial","substr","base32Str","v5","v6","v7","v8","input","encodeBytes","code","end","start","encodeUtf8","decode","toUtf8String","Base32.decode","Base32.decodeAsBytes","Base32.encode","INPUT_ERROR","JS_MD5_NO_WINDOW","JS_MD5_NO_NODE_JS","buffer8","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","buffer","Uint32Array","isView","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","formatMessage","message","createOutputMethod","outputType","Md5","update","nodeWrap","method","bufferFrom","crypto","JS_MD5_NO_BUFFER_FROM","createHash","digest","createHmacOutputMethod","key","HmacMd5","sharedMemory","this","h0","h1","h2","h3","hBytes","finalized","hashed","first","oKeyPad","iKeyPad","inner","lastByteIndex","hash","finalize","a","d","bc","da","hex","arrayBuffer","base64","innerHash","md5","createMethod","md5_hmac","createHmacMethod","JS_SHA1_NO_WINDOW","JS_SHA1_NO_NODE_JS","JS_SHA1_NO_ARRAY_BUFFER","JS_SHA1_NO_ARRAY_BUFFER_IS_VIEW","Sha1","JS_SHA1_NO_BUFFER_FROM","HmacSha1","h4","block","t","e","dataView","DataView","setUint32","sha1","sha1_hmac","ERROR","JS_SHA256_NO_WINDOW","JS_SHA256_NO_NODE_JS","JS_SHA256_NO_ARRAY_BUFFER","JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW","is224","Sha256","algorithm","JS_SHA256_NO_BUFFER_FROM","HmacSha256","h5","h6","h7","s0","s1","maj","t1","ab","cd","f","g","h","chromeBugWorkAround","arr","sha256","sha224","sha256_hmac","sha224_hmac","JS_SHA512_NO_WINDOW","JS_SHA512_NO_NODE_JS","JS_SHA512_NO_ARRAY_BUFFER","JS_SHA512_NO_ARRAY_BUFFER_IS_VIEW","bits","Sha512","HmacSha512","h0h","h0l","h1h","h1l","h2h","h2l","h3h","h3l","h4h","h4l","h5h","h5l","h6h","h6l","h7h","h7l","s0h","s0l","s1h","s1l","c1","c2","c3","c4","abh","abl","dah","dal","cdh","cdl","bch","bcl","majh","majl","t1h","t1l","t2h","t2l","chh","chl","ah","al","bh","bl","ch","cl","dh","dl","eh","el","fh","fl","gh","gl","hh","hl","clone","copyTo","attrs","sha512","sha384","sha512_256","sha512_224","sha512_hmac","sha384_hmac","sha512_256_hmac","sha512_224_hmac","JS_SHA3_NO_WINDOW","JS_SHA3_NO_NODE_JS","JS_SHA3_NO_ARRAY_BUFFER","CSHAKE_PADDING","RC","BITS","SHAKE_BITS","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","empty","cloneArray","newArray","padding","Keccak","createShakeOutputMethod","outputBits","createCshakeOutputMethod","n","s","methods","createKmacOutputMethod","createOutputMethods","algorithms","w","bytepad","Kmac","methodName","newMethodName","reset","blockCount","byteCount","outputBlocks","extraBytes","x","right","o","unshift","encodeString","strs","paddingBytes","zeros","offset","l","c0","c5","c6","c7","c8","c9","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","sha3_512","sha3_384","sha3_256","sha3_224","dbits","BigInteger","fromNumber","fromString","nbi","inBrowser","navigator","appName","am","xl","xh","m","DB","DM","DV","FV","pow","F1","F2","rr","vv","BI_RM","BI_RC","int2char","intAt","nbv","r","fromInt","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","y","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","Barrett","r2","q3","ONE","dlShiftTo","mu","divide","convert","compareTo","mod","revert","divRemTo","mulTo","multiplyTo","sqrTo","squareTo","abs","ZERO","subTo","u0","clamp","drShiftTo","fromRadix","mi","sh","max","lShiftTo","bs","cbs","bm","ds","rShiftTo","min","q","pm","pt","ts","ms","nsh","ys","y0","yt","d1","d2","qd","isEven","exp","z","negate","toRadix","km","p","bitLength","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","rng_state","rng_pool","rng_pptr","lowprimes","lplim","rng_seed_time","rng_psize","chunkSize","LN2","log","signum","cs","intValue","dMultiply","testBit","bitwiseTo","shiftLeft","isProbablePrime","nextBytes","op","changeBit","addTo","modInt","millerRabin","n1","subtract","getLowestSetBit","shiftRight","random","modPow","byteValue","shortValue","toByteArray","equals","and","or","xor","andNot","not","bitCount","setBit","clearBit","flipBit","add","multiply","remainder","divideAndRemainder","k1","g2","is1","modInverse","ac","u","square","getRandomValues","ua","appVersion","rng_get_byte","Arcfour","init","next","SecureRandom","ba","jsbn","ASN1Object","tlv","getEncodedHex","getValue","getLength","nHex","DERInteger","bigint","super","len","mask","bigintToValue","DERSequence","asn1Array","asn1Object","getLenOfL","getL","getStartOfV","vIndexR","lR","vR","nextStart","vIndexS","lS","vS","derR","derS","TWO","THREE","ECFieldElementFp","other","toBigInteger","ECPointFp","curve","zinv","getX","fromBigInteger","getY","isInfinity","x1","y1","z1","x2","y2","z2","w1","w2","w3","w4","w5","w6","twice","infinity","w7","w8","w9","w10","w11","x3","y3","z3","k3","neg","k3Bit","decodePointHex","xHex","yHex","ECCurveFp","ec","rng","generateEcparam","getGlobalCurve","generateKeyPairHex","privateKey","leftPad","publicKey","utf8ToHex","unescape","encodeURIComponent","words","hexChars","bite","arrayToHex","item","hexToArray","hexStr","hexStrLength","rotl","P0","sm3","kArr","lenArr","fill","getUint32","T1","T2","SS1","SS2","TT1","TT2","word","blockLen","iPad","oPad","decodeDer","encodeDer","asn1","_.generateEcparam","C1C2C3","doDecrypt","encryptData","cipherMode","output","msg","_.hexToArray","_.getGlobalCurve","_.leftPad","ct","concat","nextT","_.arrayToHex","latin1Chars","decodeURIComponent","escape","_.arrayToUtf8","getHash","hashHex","userId","_.utf8ToHex","gx","gy","px","py","point","data","entl","getPublicKeyFromPrivateKey","PA","getPoint","keypair","_.generateKeyPairHex","compressPublicKeyHex","prefix","comparePublicKeyHex","publicKey1","publicKey2","point1","point2","verifyPublicKey","compressedPublicKey","SM2.comparePublicKeyHex","SM2.compressPublicKeyHex","outputConfig","SM2.doDecrypt","signatureConfig","pointPool","der","dA","pop","SM2.doSignature","signHex","verifyConfig","decodeDerObj","x1y1","SM2.doVerifySignature","SM2.doEncrypt","rnd","SM2.generateKeyPairHex","SM2.getPoint","SM2.getPublicKeyFromPrivateKey","SM2.verifyPublicKey","ArrayToHex","SM3","options","codePointAt","utf8ToArray","mode","iPadKey","oPadKey","hmac","DECRYPT","BLOCK","Sbox","CK","byteSub","l1","l2","sms4Crypt","roundKey","tmp","mid","sm4","inArray","cryptFlag","iv","paddingCount","sms4KeyExt","outArray","lastVector","restLen","fromCodePoint","arrayToUtf8","SM4.decrypt","SM4.encrypt","Aes","cipher","Nr","state","addRoundKey","round","subBytes","shiftRows","mixColumns","keyExpansion","Nk","temp","subWord","rotWord","rCon","Nb","sBox","AesCtr","encrypt","plaintext","password","nBits","includes","nBytes","pwBytes","timestamp","nonceMs","nonceSec","nonceRnd","counterBlock","nonceStr","plaintextBytes","ciphertextUtf8","nistEncryption","base64Encode","blockSize","keySchedule","ciphertext","cipherCntr","blockLength","WorkerGlobalScope","postMessage","progress","decrypt","base64Decode","ciphertextBytes","plaintextUtf8","nistDecryption","AES","Des","_DesCreate","requestValue","right1","right2","left","looping","endloop","loopinc","spfunction1","spfunction2","spfunction3","spfunction4","spfunction5","spfunction6","spfunction7","spfunction8","_DesCreateKeys","chunk","iterations","tempresult","resultTempresult","resultCiphertext","hexes","lefttemp","righttemp","pc2bytes0","pc2bytes1","pc2bytes2","pc2bytes3","pc2bytes4","pc2bytes5","pc2bytes6","pc2bytes7","pc2bytes8","pc2bytes9","pc2bytes10","pc2bytes11","pc2bytes12","pc2bytes13","shifts","encodedString","decryptText","DES","Tea","strToLongs","longsToStr","plain","mx","sum","delta","utf8Str","b64Str","TEA","formatStartOf","startStr","padEnd","getBirthdayByIDCard","idCard","getAgeByIDCard","getSexByIDCard","getProvinceByIDCard","getTotalPage","pagination","page","pageSize","total","totalPage","pagerCount","getSearchString","url","location","href","parseSearchParam","searchArr","param","stringifySearchParam","params","setCookie","document","cookie","hasClass","elem","className","addClass","removeClass","isPhone","userAgent","setClipboardText","text","clipboard","writeText","then","success","failed","warn","ZH","r1","setHours","setMilliseconds","setMinutes","setMonth","setSeconds","styles","style","setFullYear","afterName","beforeIndex","findIndex","afterArr","array1","array2","filter","apply","sort","props","prop","order","sourceIndex","targetIndex","setting","parentKey","childrenKey","nodeChildren","newChildren","tempMap","parent","children","bstr","u8arr","Blob","readAsDataURL","async","domain","names","toUTCString","localStorage","clear","sessionStorage","wx","clearStorage","res","fail","clearStorageSync","source","assign","fn","delay","immediate","timer","_args","arguments","clearTimeout","canExecute","setTimeout","deepClone","copy","attr","hasOwnProperty","setTime","leftChain","rightChain","compare2Objects","isPrototypeOf","t2","objUrl","createObjectURL","link","createElement","download","click","revokeObjectURL","fileUrl","body","appendChild","removeChild","value1","value2","is","file","readAsArrayBuffer","toFixed","money","integerNum","decimalNum","parts","cnNums","cnIntRadiance","cnIntUnits","cnDecUnits","maxNum","chineseStr","parseFloat","zeroCount","IntLen","decLen","matchAll","acc","trim","day","curr","ie","edge","firefox","opera","chrome","safari","version","read","clipboardItems","list","types","getType","readText","catch","tempArr","entries","diff","lastIndexOf","weekDay","firstDateOfMonth","lastDateOfMonth","currentDate","dayOfWeek","firstDateOfWeek","firstDateOfYear","daysOfYear","toLocaleDateString","s4","province","birthday","sex","keyname","keycode","getItem","callback","startTime","time","hour","quarterNum","pagerLength","pager","reg","getStorage","getStorageInfo","getStorageInfoSync","getStorageSync","CHARS","uuid","paths","current","part","startDay","fullDays","rgb","exec","color","opacity","htmlStr","endTime","Function","JSON","parse","diffDate1","diffDate2","cookieEnabled","json","stringify","MD5.md5","MD5.md5_hmac","s2","objectEquals","obj1","obj2","beforeParam","beforeArr","removeItem","delIndex","removeStorage","removeStorageSync","removeProperty","oldSubstr","newSubstr","newClassName","oldClassName","rgba","clipboardItem","ClipboardItem","write","setItem","setStorage","setStorageSync","nextPart","lastPath","SHA1.sha1","SHA1.sha1_hmac","SHA256.sha224","SHA256.sha224_hmac","SHA256.sha256","SHA256.sha256_hmac","SHA512.sha384","SHA512.sha384_hmac","SHA3.sha3_224","SHA3.sha3_256","SHA3.sha3_384","SHA3.sha3_512","SHA512.sha512","SHA512.sha512_224","SHA512.sha512_224_hmac","SHA512.sha512_256","SHA512.sha512_256_hmac","SHA512.sha512_hmac","interval","decimals","_toDecimalRound","_toDecimalFloor","$2","$3","_toFixedRound","dec","tempNum","pointIndex","pointCount","tempNumA","realVal","_toFixedFloor","toLocaleLowerCase","toLocaleUpperCase","treeToArray","nodes","imgUrl","img","Image","src","canvas","context","getContext","width","height","drawImage","toDataURL","fetch","status","maxLength"],"mappings":";;;;;8OAGO,MAAMA,EAAO,CAElBC,KAAM,EAENC,IAAK,EAELC,OAAQ,GCNGC,EAAO,CAElBC,MAAO,EAEPC,YAAa,GCJFC,EAAS,CAEpBC,GAAI,qBAEJC,GAAI,aAEJC,WAAY,WAEZC,WAAY,WAEZC,QAAS,2BAETC,QAAS,uCAETC,OAAQ,uBAERC,QAAS,iCAETC,QAAS,aAETC,aAAc,sEAEdC,OAAQ,gCAERC,MAAO,sDAEPC,MAAO,wCAEPC,QACE,oHAEFC,UAAW,8CAEXC,UAAW,wEAEXC,UAAW,kBAEXC,UAAW,8EAEXC,IAAK,+LAELC,GAAI,mKAEJC,IAAK,wpBAELC,SAAU,kCC7CCC,EAAO,CAElBC,MAAO,CACLC,GAAI,CACFC,GAAI,KACJC,GAAI,MAENC,GAAI,CACFF,GAAI,KACJC,GAAI,OAIRE,KAAM,CACJJ,GAAI,CACFK,KAAM,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACjDC,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC5CC,KAAM,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEvCJ,GAAI,CACFE,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEC,MAAO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAClDC,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAK/CC,MAAO,CACLR,GAAI,CACFK,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,OAC1EC,MAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,OAElEH,GAAI,CACFE,KAAM,CACJ,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEFC,MAAO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SAIzFG,QAAS,CACPT,GAAI,CACFK,KAAM,CAAC,OAAQ,OAAQ,OAAQ,QAC/BC,MAAO,CAAC,MAAO,MAAO,MAAO,OAC7BC,KAAM,CAAC,IAAK,IAAK,IAAK,MAExBJ,GAAI,CACFE,KAAM,CAAC,cAAe,cAAe,cAAe,eACpDC,MAAO,CAAC,OAAQ,OAAQ,OAAQ,QAChCC,KAAM,CAAC,KAAM,KAAM,KAAM,QAK7BG,UAAW,CACTV,GAAI,CACFW,KAAM,IACNH,MAAO,IACPV,KAAM,IACNc,KAAM,IACNC,OAAQ,IACRC,OAAQ,IACRC,YAAa,KACbC,IAAK,IACLP,QAAS,MAEXN,GAAI,CACFQ,KAAM,OACNH,MAAO,QACPV,KAAM,OACNc,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,YAAa,cACbC,IAAK,MACLP,QAAS,YAKbQ,UAAW,CACTjB,GAAI,CACFW,KAAM,KACNH,MAAO,MACPQ,IAAK,KACLE,iBAAkB,KAClBC,UAAW,KACXC,MAAO,KACPR,KAAM,MACNC,OAAQ,MACRQ,KAAM,MAERlB,GAAI,CACFQ,KAAM,YACNH,MAAO,aACPQ,IAAK,WACLE,iBAAkB,mBAClBC,UAAW,aACXC,MAAO,SACPR,KAAM,YACNC,OAAQ,cACRQ,KAAM,UAKVC,QAAS,CACPtB,GAAI,CAAC,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,OAC7CG,GAAI,CACF,iBACA,kBACA,oBACA,YACA,uBACA,iBACA,iBAMJoB,OAAQ,CACNvB,GAAI,CACF,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFG,GAAI,CACF,YACA,WACA,SACA,QACA,SACA,SACA,SACA,MACA,QACA,QACA,UACA,gBAKJqB,eAAgB,CACdxB,GAAI,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5DG,GAAI,CAAC,MAAO,KAAM,QAAS,SAAU,SAAU,QAAS,QAAS,OAAQ,SAAU,UAAW,MAAO,QAIvGsB,eAAgB,CACdzB,GAAI,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClDG,GAAI,CAAC,MAAO,KAAM,OAAQ,OAAQ,KAAM,KAAM,OAAQ,MAAO,MAAO,QAEtEuB,iBAAkB,CAChB1B,GAAI,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5DG,GAAI,CAAC,KAAM,OAAQ,MAAO,MAAO,OAAQ,KAAM,KAAM,MAAO,OAAQ,MAAO,KAAM,SChLxEwB,EAAU,CAErB,EAAG,YACH,EAAG,MACH,GAAI,QACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,QACJ,GAAI,YACJ,GAAI,SACJ,GAAI,QACJ,GAAI,UACJ,GAAI,YACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,KACJ,GAAI,QACJ,GAAI,OACJ,GAAI,eACJ,GAAI,SACJ,GAAI,SAEJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IAEJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IAEJ,GAAI,UACJ,GAAI,cAEJ,GAAI,WACJ,GAAI,WACJ,GAAI,WACJ,GAAI,WACJ,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WAEL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MAEL,IAAK,WACL,IAAK,cACL,IAAK,cACL,IAAK,gBACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KC5GMtC,EAAU,CAErBuC,SAAU,CACR,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,MACJ,GAAI,KACJ,GAAI,KACJ,GAAI,MACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,MAGNC,IAAK,CACHC,IAAK,IACLC,MAAO,MC+GL,SAAUC,EAAaC,GAE3B,GAAIA,EAAMC,QAAQ,KAAO,EAAG,CAC1B,IAAIC,EAASF,EAAMG,QAAQ,WAAW,SAAUC,EAAKC,GACnD,OAAOA,EAAOC,aAChB,IACA,OAAOJ,EAAOK,OAAO,GAAGD,cAAgBJ,EAAOM,MAAM,EACvD,CAEK,GAAIR,EAAMC,QAAQ,KAAO,EAAG,CAC/B,IAAIC,EAASF,EAAMG,QAAQ,WAAW,SAAUC,EAAKC,GACnD,OAAOA,EAAOC,aAChB,IACA,OAAOJ,EAAOK,OAAO,GAAGD,cAAgBJ,EAAOM,MAAM,EACvD,CAEK,MAAI,UAAUC,KAAKT,EAAMO,OAAO,OAASP,EAAMC,QAAQ,KAAO,GAAKD,EAAMC,QAAQ,KAAO,GACpFD,EAAMO,OAAO,GAAGD,cAAgBN,EAAMQ,MAAM,GAI5CR,CAEX,CC5KM,SAAUU,EAAUV,GACxB,OAAOW,OAAOD,UAAUV,EAC1B,CAyBM,SAAUY,EAASZ,GACvB,MAA8D,WAAvDa,OAAOC,UAAUC,SAASC,KAAKhB,GAAOQ,MAAM,GAAG,EACxD,CAOM,SAAUS,EAAQjB,GACtB,MAA8D,UAAvDa,OAAOC,UAAUC,SAASC,KAAKhB,GAAOQ,MAAM,GAAG,EACxD,CAOM,SAAUU,EAASlB,GACvB,MAA8D,WAAvDa,OAAOC,UAAUC,SAASC,KAAKhB,GAAOQ,MAAM,GAAG,EACxD,CAgBM,SAAUW,EAAOnB,GACrB,MAA8D,SAAvDa,OAAOC,UAAUC,SAASC,KAAKhB,GAAOQ,MAAM,GAAG,EACxD,CAsJM,SAAUY,EAAQpB,GACtB,OACEA,SAEU,cAAVA,GACU,SAAVA,GACU,IAAVA,IACU,IAAVA,GACAqB,EAAMrB,EAEV,CAOM,SAAUqB,EAAMrB,GAEpB,OAAOsB,OAAOD,MAAMrB,IAAUiB,EAAQjB,IAAmB,MAATA,GAA2B,KAAVA,CACnE,CAkBM,SAAUuB,EAAOvB,GACrB,OAAOA,SAAmD,KAAVA,CAClD,CAkBM,SAAUwB,EAAQxB,GACtB,QAAIuB,EAAOvB,KACU,iBAAVA,GAAsByB,MAAMR,QAAQjB,GACrB,IAAjBA,EAAM0B,OAEM,iBAAV1B,IACLA,aAAiB2B,KAAO3B,aAAiB4B,IACrB,IAAf5B,EAAM6B,OAEX7B,aAAiB8B,MAAQ9B,aAAiB+B,QAAU/B,aAAiBgC,QAGpC,IAA9BnB,OAAOoB,KAAKjC,GAAO0B,QAG9B,CAkBM,SAAUQ,EAAQlC,GACtB,OAAOwB,EAAQxB,IAAU,QAAQS,KAAKT,EACxC,CAiBM,SAAUmC,EAAYnC,GAC1B,YAAiBoC,IAAVpC,CACT,UCrUgBqC,EAASrC,EAAOsC,EAAQ,IACtC,OAAIf,EAAOvB,GACF,EAEFW,OAAO0B,SAASrC,EAAOsC,EAChC,CCaM,SAAUC,EAASC,GACvB,OAAOA,EAAMC,QAAO,SAAUC,EAAKC,GACjC,OAAOD,EAAMC,CACf,GACF,CA4EM,SAAUC,EAAkBJ,EAAQ,GAAIK,EAAQ,EAAG7C,OAAQoC,GAC/D,GAAIS,EAAQ,EAAG,OAAOL,EAEtB,GAAqB,IAAjBA,EAAMd,OACRc,EAAMM,KAAK9C,OACN,CACL,GAAI6C,EAAQL,EAAMd,OAAS,EACzB,OAAOc,EAETA,EAAMO,OAAOF,EAAO,EAAG7C,EACzB,CACA,OAAOwC,CACT,CAUM,SAAUQ,EAAiBR,EAAQ,GAAIK,EAAQ,EAAG7C,OAAQoC,GAC9D,GAAIS,EAAQ,EAAG,OAAOL,EAEtB,GAAqB,IAAjBA,EAAMd,OACRc,EAAMM,KAAK9C,OACN,CACL,GAAI6C,EAAQL,EAAMd,OAAS,EACzB,OAAOc,EAETA,EAAMO,OAAOF,EAAO,EAAGL,EAAMO,OAAOF,EAAO,EAAG7C,GAAO,GACvD,CAEA,OAAOwC,CACT,CCtIM,SAAUS,EAAYC,GAC1B,IAAIC,EAAMtC,OAAOuC,OAAO,MACxB,IAAK,IAAKC,EAAGC,KAAMJ,EACjBC,EAAIE,GAAKC,EAEX,OAAOH,CACT,CAgBM,SAAUI,EAAYJ,GAC1B,IAAID,EAAM,IAAIvB,IACd,IAAK,IAAI0B,KAAKxC,OAAOoB,KAAKkB,GACxBD,EAAIM,IAAIH,EAAGF,EAAIE,IAEjB,OAAOH,CACT,CAmOA,SAASO,EAAmBC,GAC1B,IAAIC,EAAiBD,EAAKE,MAAM,mBAChC,MAAO,CACLC,SAAWF,GAAkBA,EAAe,SAAOvB,EACnD0B,UAAWH,EAAiBtB,SAASsB,EAAe,GAAI,SAAMvB,EAC9DnB,UAAW0C,EAEf,UCnBgBI,EAAWC,EAAO,IAAIlC,MACpC,IAAImC,EAAOD,EAAKE,cAChB,OAAQD,EAAO,KAAQ,GAAKA,EAAO,GAAM,GAAMA,EAAO,KAAQ,CAChE,CAmBM,SAAUE,EAASC,EAAWC,EAAU,IAAIvC,MAKhD,OAHgBsC,EAAUE,UACZD,EAAQC,UAEJ,CACpB,CAQM,SAAUC,EAAQH,EAAWC,EAAU,IAAIvC,MAK/C,OAHgBsC,EAAUE,UACZD,EAAQC,UAEJ,CACpB,CAuBM,SAAUE,EAAOJ,EAAWC,GAChC,MAAO,CAAC,cAAe,WAAY,WAAWI,OAAOC,GAAMN,EAAUM,OAASL,EAAQK,MACxF,CAsEM,SAAUC,EAAQX,EAAO,IAAIlC,KAAQ8C,EAAS,cAClD,OAAOC,EAAWb,EAAMY,EAC1B,UAmCgBE,EAAcd,EAAO,IAAIlC,MACvC,MAAO,CACLmC,KAAMD,EAAKE,cACXa,MAAOf,EAAKgB,WAAa,EACzBhB,KAAMA,EAAKW,UACXM,MAAOjB,EAAKkB,WACZC,QAASnB,EAAKoB,aACdC,QAASrB,EAAKsB,aACdC,aAAcvB,EAAKwB,kBAEvB,UA0DgBC,EAAazB,EAAO,IAAIlC,MACtC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAGkC,EAAK0B,SACpC,UAOgBC,EAAc3B,EAAO,IAAIlC,MACvC,OAAOkC,EAAKW,SACd,UAOgBiB,EAAa5B,EAAO,IAAIlC,MACtC,OAAO+D,KAAKC,MAAM9B,EAAO,IAAIlC,KAAKkC,EAAKE,cAAcnD,aAAW,OAA6B,CAC/F,UAuCgBgF,EAAe/B,EAAO,IAAIlC,MACxC,OAAO,IAAIA,KAAKkC,EAAKE,cAAeF,EAAKgB,WAAa,EAAG,GAAGL,SAC9D,UAOgBqB,EAAchC,EAAO,IAAIlC,MACvC,OAAOiC,EAAWC,GAAQ,IAAM,GAClC,CAwXM,SAAUiC,EAAOjC,GACrB,IAAIkC,EAAM,EAENC,EAAYtB,EAAWb,GAAMoC,MAAM,KACnCC,EAAY1F,OAAOwF,EAAU,IAC7BG,EAAa3F,OAAOwF,EAAU,IAC9BI,EAAW5F,OAAOwF,EAAU,IAE5BK,EAAU,IAAI1E,KACd2E,EAAUD,EAAQtC,cACpBwC,EAAWF,EAAQxB,WAAa,EAChC2B,EAASH,EAAQ7B,UAGfiC,EAAUH,EAAUJ,EACxB,GAAIO,EAAU,EAAG,CACf,IAAIC,EAAYH,EAAWJ,EAIvBJ,EAFc,IAAdW,EADUF,EAASJ,EAEP,EACNK,EAAU,EAEVA,EAGJC,EAAY,EACRD,EAAU,EAEVA,CAGZ,CAGA,OAAOV,CACT,CAgEM,SAAUY,EAAQ9C,EAAO,IAAIlC,KAAQiF,EAAM,GAE/C,OADA/C,EAAKgD,QAAQhD,EAAKW,UAAYoC,GACvB/C,CACT,CA8EM,SAAUa,EAAWb,EAAMY,EAAS,aAAcqC,EAAO,MAC7D,GAAI1F,EAAOyC,GAAO,MAAO,GAGzB,GAAIpD,EAASoD,GACXA,EAAOkD,EAAUlD,QAGd,GAAI7C,EAAO6C,SAIX,GAAItD,EAAUsD,IAAiC,KAAxBmD,OAAOnD,GAAMtC,OACvCsC,EAAO,IAAIlC,KAAKkC,OAGb,KAAItD,EAAUsD,IAAiC,KAAxBmD,OAAOnD,GAAMtC,OAMvC,OADA0F,QAAQC,MAAM,8BACPrD,EALPA,EAAO,IAAIlC,KAAY,IAAPkC,EAMlB,CAGA,IAAIsD,EAAQ,CACV,KAAMtD,EAAKgB,WAAa,EACxB,KAAMhB,EAAKW,UACX,KAAMX,EAAKkB,WAAa,IAAO,EAAI,GAAKlB,EAAKkB,WAAa,GAC1D,KAAMlB,EAAKkB,WACX,KAAMlB,EAAKoB,aACX,KAAMpB,EAAKsB,aACX,KAAMtB,EAAKwB,kBACX,KAAMxB,EAAKkB,WAAa,GAAK,KAAO,KACpC,KAAMlB,EAAKkB,WAAa,GAAK,KAAO,KACpC,KAAMlB,EAAK0B,SACX,KAAMG,KAAK0B,OAAOvD,EAAKgB,WAAa,GAAK,GACzCwC,EAAGxD,EAAKwB,mBAINiC,EAAU,IAAI1F,OAAO,SACrB0F,EAAQhH,KAAKmE,KACfA,EAASA,EAAOzE,QAAQsH,GAAS,SAAU7D,EAAO8D,GAChD,OAAQ1D,EAAKE,cAAgB,IAAIyD,UAAU,EAAID,EAAGhG,OACpD,KAGF,IAAIkG,EAAU,IAAI7F,OAAO,gBACrB6F,EAAQnH,KAAKmE,KACfA,EAASA,EAAOzE,QAAQyH,GAAS,SAAUhE,EAAO8D,GAEhD,OAAIA,EAAGhG,OAAS,EACPsC,EAAKkB,WAAa,GAAKrH,EAAKC,MAAMmJ,GAAMjJ,GAAKH,EAAKC,MAAMmJ,GAAMhJ,GAI9DyJ,IAAOA,EAAGG,cACb7D,EAAKkB,WAAa,GAChBrH,EAAKC,MAAU,GAAEE,GAAG6J,cACpBhK,EAAKC,MAAU,GAAEG,GAAG4J,cACtB7D,EAAKkB,WAAa,GAChBrH,EAAKC,MAAU,GAAEE,GACjBH,EAAKC,MAAU,GAAEG,EAE3B,KAGF,IAAI6J,EAAU,IAAI/F,OAAO,SACrB+F,EAAQrH,KAAKmE,KACfA,EAASA,EAAOzE,QAAQ2H,GAAS,SAAUlE,EAAO8D,GAChD,OAAqB,IAAdA,EAAGhG,OACN7D,EAAKM,KAAK8I,GAAM3I,KAAK0F,EAAK0B,UACZ,IAAdgC,EAAGhG,OACD7D,EAAKM,KAAK8I,GAAM5I,MAAM2F,EAAK0B,UAC3B7H,EAAKM,KAAK8I,GAAM7I,KAAK4F,EAAK0B,SAClC,KAGF,IAAIqC,EAAa,IAAIhG,OAAO,SACxBgG,EAAWtH,KAAKmE,KAClBA,EAASA,EAAOzE,QAAQ4H,GAAY,SAAUnE,EAAO8D,GACnD,OAAqB,IAAdA,EAAGhG,OACN7D,EAAKW,QAAQyI,GAAM3I,KAAKuH,KAAK0B,OAAOvD,EAAKgB,WAAa,GAAK,GAAK,GAClD,IAAd0C,EAAGhG,OACD7D,EAAKW,QAAQyI,GAAM5I,MAAMwH,KAAK0B,OAAOvD,EAAKgB,WAAa,GAAK,GAAK,GACjEnH,EAAKW,QAAQyI,GAAM7I,KAAKyH,KAAK0B,OAAOvD,EAAKgB,WAAa,GAAK,GAAK,EACxE,KAGF,IAAK,IAAI3B,KAAKiE,EAAO,CACnB,IAAIU,EAAU,IAAIjG,OAAO,IAAMsB,EAAI,KAC/B2E,EAAQvH,KAAKmE,KACfA,EAASA,EAAOzE,QAAQ6H,GAAS,SAAUpE,EAAO8D,GAChD,OAAqB,IAAdA,EAAGhG,OACN4F,EAAMjE,GACQ,IAAdqE,EAAGhG,QACA,KAAO4F,EAAMjE,IAAIsE,WAAW,GAAKL,EAAMjE,IAAI3B,SAC3C,MAAQ4F,EAAMjE,IAAIsE,WAAW,GAAKL,EAAMjE,IAAI3B,OACrD,IAEJ,CACA,OAAOkD,CACT,CAQM,SAAUsC,EAAUlH,GACxB,OAAIuB,EAAOvB,GAAe,KAGtBY,EAASZ,GACJ,IAAI8B,KAAK9B,EAAMG,QAAQ,KAAM,MAG7BO,EAAUV,IAAmC,KAAzBmH,OAAOnH,GAAO0B,OAClC,IAAII,KAAK9B,GAGTU,EAAUV,IAAmC,KAAzBmH,OAAOnH,GAAO0B,OAClC,IAAII,KAAa,IAAR9B,IAIhBoH,QAAQC,MAAM,8BACPrH,EAEX,CAQA,SAASiI,EAAOjI,GAEd,OADAA,EAAQA,EAAMe,YACD,GAAKf,EAAQ,IAAMA,CAClC,CC1nCM,SAAUkI,EAAIC,EAAMC,GACxB,OAAQA,EAAcF,EAAIE,EAAMD,EAAOC,GAAxBD,CACjB,CC5GM,SAAUE,EAAWrI,EAAOsI,GAChC,OAAO,IAAIvG,OAAOuG,GAAO7H,KAAKT,EAChC,CC2HM,SAAUuI,EAAWC,EAAMC,EAAW3G,KAAK4G,OAC/C,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IACE,MAAMC,EAAON,EAAKO,KACZlH,EAAO2G,EAAK3G,KACZmH,EAAaF,EAAK1C,MAAM,KAAK,GAQnCwC,EAPa,IAAIK,KAAK,CAACT,GAAO,GAAG1G,KAAK4G,SAASM,IAAc,CAC3DD,KAAMD,EACNjH,KAAMA,EACNqH,KAAM,GAAGT,KAAYO,IACrBG,aAAcrH,KAAK4G,MACnBU,iBAAkB,IAAItH,OAG1B,CAAE,MAAOuH,GAEPjC,QAAQC,MAAMgC,GACdR,EAAOQ,EACT,IAEJ,CAOM,SAAUC,EAAWd,GACzB,OAAO,IAAIG,SAAQ,CAACC,EAASC,KAC3B,MAAMU,EAAS,IAAIC,WACnBD,EAAOE,OAAS,SAAUC,GACxBd,EAAQc,EAAMC,OAAOC,OACvB,EACAL,EAAOM,QAAU,SAAUxC,GACzBwB,EAAOxB,EACT,EACAkC,EAAOO,WAAWtB,EAAK,GAE3B,CCkBA,SAASuB,EAAKhD,GACZ,GAAIA,EAAM,IACR,KAAM,IAAMA,EAAM,gCAGpB,OAAQ,IADEpG,OAAOoG,GAAKhG,SAAS,KACZP,OAAM,EAC3B;;;;;;;;;AC3LA,IAAIwJ,EAAiB,qBACjBC,EAA2B,iBAAX3I,OAChB4I,EAAOD,EAAS3I,OAAS,CAAA,EACzB4I,EAAKC,sBACPF,GAAS,GAEX,IAAIG,GAAcH,GAA0B,iBAATI,KAC/BC,GAAWJ,EAAKK,sBAA2C,iBAAZC,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAC5GJ,EACFJ,EAAOS,OACEP,IACTF,EAAOG,MAIT,IAFA,IAAIO,EAAqB,mEAAmExE,MAAM,IAC9FyE,EAAqB,CAAA,EAChBnG,GAAI,EAAGA,GAAI,KAAMA,GACxBmG,EAAmBD,EAAmBlG,KAAMA,GAE9CmG,EAAmB,KAAO,GAC1BA,EAAsB,EAAI,GAE1B,IAuGEC,GACAC,GAxGEC,GAAiB,SAAUC,GAC7B,OAAOA,EAAU7E,MAAM,KAAK,GAAGjG,QAAQ,UAAW,GACpD,EA0BI+K,GAAgB,SAAUD,GAW5B,IATA,IAAIE,EACFC,EACAC,EACAC,EACAC,EAAQ,GACR1I,EAAQ,EACRnB,GAPFuJ,EAAYD,GAAeC,IAONvJ,OAGZgD,EAAI,EAAG8G,EAAS9J,GAAU,GAAM,EAAGgD,EAAI8G,GAC9CL,EAAKN,EAAmBI,EAAU1K,OAAOmE,MACzC0G,EAAKP,EAAmBI,EAAU1K,OAAOmE,MACzC2G,EAAKR,EAAmBI,EAAU1K,OAAOmE,MACzC4G,EAAKT,EAAmBI,EAAU1K,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,GACtCG,EAAM1I,KAAsC,KAAzBuI,GAAM,EAAMC,IAAO,GACtCE,EAAM1I,KAA8B,KAAjBwI,GAAM,EAAKC,GAIhC,IAAIG,EAAS/J,EAAS8J,EAYtB,OAXe,IAAXC,GACFN,EAAKN,EAAmBI,EAAU1K,OAAOmE,MACzC0G,EAAKP,EAAmBI,EAAU1K,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,IAClB,IAAXK,IACTN,EAAKN,EAAmBI,EAAU1K,OAAOmE,MACzC0G,EAAKP,EAAmBI,EAAU1K,OAAOmE,MACzC2G,EAAKR,EAAmBI,EAAU1K,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,GACtCG,EAAM1I,KAAsC,KAAzBuI,GAAM,EAAMC,IAAO,IAEjCE,CACT,EAEIG,GAAkB,SAAUH,GAM9B,IALA,IAAIJ,EACFC,EACAC,EACAJ,EAAY,GACZvJ,EAAS6J,EAAM7J,OACRgD,EAAI,EAAG8G,EAA+B,EAAvBnJ,SAASX,EAAS,GAAQgD,EAAI8G,GACpDL,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,KACX2G,EAAKE,EAAM7G,KACXuG,EAAUnI,KACR8H,EAAmBO,IAAO,GAC1BP,EAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,EAA8C,IAAzBQ,GAAM,EAAMC,IAAO,IACxCT,EAAwB,GAALS,IAKvB,IAAII,EAAS/J,EAAS8J,EActB,OAbe,IAAXC,GACFN,EAAKI,EAAM7G,GACXuG,EAAUnI,KAAK8H,EAAmBO,IAAO,GAAIP,EAAoBO,GAAM,EAAK,IAAK,OAC7D,IAAXM,IACTN,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,GACXuG,EAAUnI,KACR8H,EAAmBO,IAAO,GAC1BP,EAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,EAAoBQ,GAAM,EAAK,IAC/B,MAGGH,EAAUU,KAAK,GACxB,EAEIC,GAAO1B,EAAK0B,KACdC,GAAO3B,EAAK2B,KAGd,GAAIvB,EAAS,CACX,IAAIwB,GAASC,QAAQ,UAAUD,OAC/BF,GAAO,SAAUI,GACf,OAAOF,GAAOG,KAAKD,EAAK,SAASjL,SAAS,SAC5C,EAMA2K,GAJAZ,GAAmB,SAAUkB,GAC3B,OAAOF,GAAOG,KAAKD,GAAKjL,SAAS,SACnC,EAIA8K,GAAO,SAAUZ,GACf,OAAOa,GAAOG,KAAKhB,EAAW,UAAUlK,SAAS,QACnD,EAEAgK,GAAmB,SAAUE,GAC3B,OAAOa,GAAOG,KAAKhB,EAAW,UAAUlK,UAC1C,CACF,MAAY6K,IAoKVd,GAAmB,SAAUkB,GAE3B,IADA,IAAIpC,EAAS,GACJlF,EAAI,EAAGA,EAAIsH,EAAItK,OAAQgD,IAAK,CACnC,IAAIwH,EAAWF,EAAIG,WAAWzH,GAC1BwH,EAAW,IACbtC,EAAO9G,KAAKqE,OAAOiF,aAAaF,IACvBA,EAAW,KACpBtC,EAAO9G,KAAKqE,OAAOiF,aAAa,IAAQF,GAAY,GAAK/E,OAAOiF,aAAa,IAAmB,GAAXF,IAC5EA,EAAW,OAAUA,GAAY,MAC1CtC,EAAO9G,KACLqE,OAAOiF,aAAa,IAAQF,GAAY,IACxC/E,OAAOiF,aAAa,IAASF,GAAY,EAAK,IAC9C/E,OAAOiF,aAAa,IAAmB,GAAXF,KAG9BA,EAAW,QAAwB,KAAXA,IAAqB,GAA6B,KAAtBF,EAAIG,aAAazH,IACrEkF,EAAO9G,KACLqE,OAAOiF,aAAa,IAAQF,GAAY,IACxC/E,OAAOiF,aAAa,IAASF,GAAY,GAAM,IAC/C/E,OAAOiF,aAAa,IAASF,GAAY,EAAK,IAC9C/E,OAAOiF,aAAa,IAAmB,GAAXF,IAGlC,CACA,OAAON,GAAKhC,EAAO+B,KAAK,IAC1B,EAEAZ,GAAmB,SAAUE,GAC3B,IAAIoB,EAASR,GAAKZ,EAAU9K,QAAQ,KAAM,KAAKA,QAAQ,KAAM,MAC7D,IAAK,eAAeM,KAAK4L,GACvB,OAAOA,EAQT,IANA,IAIEC,EACAC,EALEP,EAAM,GACRtH,EAAI,EACJhD,EAAS2K,EAAO3K,OAChB8K,EAAiB,EAGZ9H,EAAIhD,GAET,IADA4K,EAAID,EAAOF,WAAWzH,OACb,IACPsH,EAAIlJ,KAAKqE,OAAOiF,aAAaE,QAD/B,CAGO,GAAIA,EAAI,KAAQA,GAAK,IAC1BC,EAAQ,GAAJD,EACJE,EAAiB,OACZ,GAAIF,GAAK,IACdC,EAAQ,GAAJD,EACJE,EAAiB,MACZ,MAAIF,GAAK,KAId,MAAM,IAAItK,MAAMgI,GAHhBuC,EAAQ,EAAJD,EACJE,EAAiB,CAGnB,CAEA,IAAK,IAAIC,EAAI,EAAGA,EAAID,IAAkBC,EAAG,CAEvC,IADAH,EAAID,EAAOF,WAAWzH,MACd,KAAQ4H,EAAI,IAClB,MAAM,IAAItK,MAAMgI,GAElBuC,IAAM,EACNA,GAAS,GAAJD,CACP,CACA,GAAIC,GAAK,OAAUA,GAAK,MACtB,MAAM,IAAIvK,MAAMgI,GAElB,GAAIuC,EAAI,QACN,MAAM,IAAIvK,MAAMgI,GAGduC,GAAK,MACPP,EAAIlJ,KAAKqE,OAAOiF,aAAaG,KAE7BA,GAAK,MACLP,EAAIlJ,KAAKqE,OAAOiF,aAAyB,OAAXG,GAAK,KAAepF,OAAOiF,aAA2B,OAAT,KAAJG,KArBzE,CAwBF,OAAOP,EAAIL,KAAK,GAClB,IAlPAC,GAAO,SAAUI,GAMf,IALA,IAAIb,EACFC,EACAC,EACAJ,EAAY,GACZvJ,EAASsK,EAAItK,OACNgD,EAAI,EAAG8G,EAA+B,EAAvBnJ,SAASX,EAAS,GAAQgD,EAAI8G,GACpDL,EAAKa,EAAIG,WAAWzH,KACpB0G,EAAKY,EAAIG,WAAWzH,KACpB2G,EAAKW,EAAIG,WAAWzH,KACpBuG,EAAUnI,KACR8H,EAAmBO,IAAO,GAC1BP,EAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,EAA8C,IAAzBQ,GAAM,EAAMC,IAAO,IACxCT,EAAwB,GAALS,IAKvB,IAAII,EAAS/J,EAAS8J,EActB,OAbe,IAAXC,GACFN,EAAKa,EAAIG,WAAWzH,GACpBuG,EAAUnI,KAAK8H,EAAmBO,IAAO,GAAIP,EAAoBO,GAAM,EAAK,IAAK,OAC7D,IAAXM,IACTN,EAAKa,EAAIG,WAAWzH,KACpB0G,EAAKY,EAAIG,WAAWzH,GACpBuG,EAAUnI,KACR8H,EAAmBO,IAAO,GAC1BP,EAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,EAAoBQ,GAAM,EAAK,IAC/B,MAGGH,EAAUU,KAAK,GACxB,EAEAb,GAAmB,SAAUkB,GAO3B,IANA,IAAIb,EACFC,EACAC,EACAJ,EAAY,GACZM,EAlKY,SAAUS,GAE1B,IADA,IAAIT,EAAQ,GACH7G,EAAI,EAAGA,EAAIsH,EAAItK,OAAQgD,IAAK,CACnC,IAAI6H,EAAIP,EAAIG,WAAWzH,GACnB6H,EAAI,IACNhB,EAAMA,EAAM7J,QAAU6K,EACbA,EAAI,MACbhB,EAAMA,EAAM7J,QAAU,IAAQ6K,GAAK,EACnChB,EAAMA,EAAM7J,QAAU,IAAY,GAAJ6K,GACrBA,EAAI,OAAUA,GAAK,OAC5BhB,EAAMA,EAAM7J,QAAU,IAAQ6K,GAAK,GACnChB,EAAMA,EAAM7J,QAAU,IAAS6K,GAAK,EAAK,GACzChB,EAAMA,EAAM7J,QAAU,IAAY,GAAJ6K,IAE9BA,EAAI,QAAiB,KAAJA,IAAc,GAA6B,KAAtBP,EAAIG,aAAazH,IACvD6G,EAAMA,EAAM7J,QAAU,IAAQ6K,GAAK,GACnChB,EAAMA,EAAM7J,QAAU,IAAS6K,GAAK,GAAM,GAC1ChB,EAAMA,EAAM7J,QAAU,IAAS6K,GAAK,EAAK,GACzChB,EAAMA,EAAM7J,QAAU,IAAY,GAAJ6K,EAElC,CACA,OAAOhB,CACT,CA4IcmB,CAAYV,GACpBtK,EAAS6J,EAAM7J,OACRgD,EAAI,EAAG8G,EAA+B,EAAvBnJ,SAASX,EAAS,GAAQgD,EAAI8G,GACpDL,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,KACX2G,EAAKE,EAAM7G,KACXuG,EAAUnI,KACR8H,EAAmBO,IAAO,GAC1BP,EAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,EAA8C,IAAzBQ,GAAM,EAAMC,IAAO,IACxCT,EAAwB,GAALS,IAKvB,IAAII,EAAS/J,EAAS8J,EActB,OAbe,IAAXC,GACFN,EAAKI,EAAM7G,GACXuG,EAAUnI,KAAK8H,EAAmBO,IAAO,GAAIP,EAAoBO,GAAM,EAAK,IAAK,OAC7D,IAAXM,IACTN,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,GACXuG,EAAUnI,KACR8H,EAAmBO,IAAO,GAC1BP,EAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,EAAoBQ,GAAM,EAAK,IAC/B,MAGGH,EAAUU,KAAK,GACxB,EAEAE,GAAO,SAAUZ,GASf,IARA,IAAIE,EACFC,EACAC,EACAC,EACAU,EAAM,GACNtK,EAASuJ,EAAUvJ,OAGZgD,EAAI,EAAG8G,EAAS9J,GAAU,GAAM,EAAGgD,EAAI8G,GAC9CL,EAAKN,EAAmBI,EAAU1K,OAAOmE,MACzC0G,EAAKP,EAAmBI,EAAU1K,OAAOmE,MACzC2G,EAAKR,EAAmBI,EAAU1K,OAAOmE,MACzC4G,EAAKT,EAAmBI,EAAU1K,OAAOmE,MACzCsH,EAAIlJ,KACFqE,OAAOiF,aAAwC,KAAzBjB,GAAM,EAAMC,IAAO,IACzCjE,OAAOiF,aAAwC,KAAzBhB,GAAM,EAAMC,IAAO,IACzClE,OAAOiF,aAAgC,KAAjBf,GAAM,EAAKC,KAKrC,IAAIG,EAAS/J,EAAS8J,EActB,OAbe,IAAXC,GACFN,EAAKN,EAAmBI,EAAU1K,OAAOmE,MACzC0G,EAAKP,EAAmBI,EAAU1K,OAAOmE,MACzCsH,EAAIlJ,KAAKqE,OAAOiF,aAAwC,KAAzBjB,GAAM,EAAMC,IAAO,MAC9B,IAAXK,IACTN,EAAKN,EAAmBI,EAAU1K,OAAOmE,MACzC0G,EAAKP,EAAmBI,EAAU1K,OAAOmE,MACzC2G,EAAKR,EAAmBI,EAAU1K,OAAOmE,MACzCsH,EAAIlJ,KACFqE,OAAOiF,aAAwC,KAAzBjB,GAAM,EAAMC,IAAO,IACzCjE,OAAOiF,aAAwC,KAAzBhB,GAAM,EAAMC,IAAO,MAGtCW,EAAIL,KAAK,GAClB,EAEAZ,GAAmB,SAAUE,GAQ3B,IAPA,IAKEqB,EACAC,EANEP,EAAM,GACRT,EAAQL,GAAcD,GACtBvJ,EAAS6J,EAAM7J,OACbgD,EAAI,EACN8H,EAAiB,EAGZ9H,EAAIhD,GAET,IADA4K,EAAIf,EAAM7G,OACD,IACPsH,EAAIlJ,KAAKqE,OAAOiF,aAAaE,QAD/B,CAGO,GAAIA,EAAI,KAAQA,GAAK,IAC1BC,EAAQ,GAAJD,EACJE,EAAiB,OACZ,GAAIF,GAAK,IACdC,EAAQ,GAAJD,EACJE,EAAiB,MACZ,MAAIF,GAAK,KAId,MAAM,IAAItK,MAAMgI,GAHhBuC,EAAQ,EAAJD,EACJE,EAAiB,CAGnB,CAEA,IAAK,IAAIC,EAAI,EAAGA,EAAID,IAAkBC,EAAG,CAEvC,IADAH,EAAIf,EAAM7G,MACF,KAAQ4H,EAAI,IAClB,MAAM,IAAItK,MAAMgI,GAElBuC,IAAM,EACNA,GAAS,GAAJD,CACP,CACA,GAAIC,GAAK,OAAUA,GAAK,MACtB,MAAM,IAAIvK,MAAMgI,GAElB,GAAIuC,EAAI,QACN,MAAM,IAAIvK,MAAMgI,GAGduC,GAAK,MACPP,EAAIlJ,KAAKqE,OAAOiF,aAAaG,KAE7BA,GAAK,MACLP,EAAIlJ,KAAKqE,OAAOiF,aAAyB,OAAXG,GAAK,KAAepF,OAAOiF,aAA2B,OAAT,KAAJG,KArBzE,CAwBF,OAAOP,EAAIL,KAAK,GAClB,GAoFF,IAAIgB,GAAS,SAAUX,EAAKY,GAC1B,IAAIC,EAA0B,iBAAPb,EAIvB,OAHIa,GAAab,EAAIc,cAAgB5C,EAAK6C,cACxCf,EAAM,IAAIgB,WAAWhB,IAEnBa,EACKnB,GAAgBM,GAEL,eAAevL,KAAKuL,GAC7BlB,GAAiBkB,GAEjBJ,GAAKI,EAGlB,EAQO,MAAMiB,GAAanC,GACboC,GAAanC,+CCxZpB,SAAiBiB,GACrB,ODiZAf,EAAYD,GADSC,EChZAe,GDkZdY,EAAYf,GAAKZ,GAAaF,GAAiBE,GAF3C,IAAUA,EAAW2B,CC/YlC,gBAkCM,SAAwBZ,GAC5B,OAAOmB,GAAqBnB,EAC9B,SA/CM,SAAiBA,GACrB,OAAOoB,GAAcpB,EACvB,gBAkCM,SAAwBxJ,GAC5B,OAAO4K,GAAc5K,EACvB,aAXM,SAAqBwJ,GACzB,OAAOqB,GAAkBrB,EAC3B,aAXM,SAAqBA,GACzB,OAAOsB,GAAkBtB,EAC3B,ICjBI9B,GAAyB,iBAAX5I,OAAsBA,OAAS,CAAA;;;;;;;;QAClC4I,GAAKqD,sBAA2C,iBAAZ/C,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,OAE9GR,GAAOS,QAET,IAAI6C,GAAqB,mCAAmCpH,MAAM,IAC9DqH,GAAqB,CACvBC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHnH,EAAG,GACHoH,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACHC,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,IAGDC,GAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAE/BC,GAAmB,SAAUC,EAAUC,GACrCA,EAAQ5N,OAAS,KACnB4N,EAAU,MAAQA,EAAQC,QAAO,KAEnC,IAAIlG,EAAM,IAAIrH,MACZ,kGAGEqN,EACA,WACAC,EACA,OAGJ,MADAjG,EAAIgG,SAAWA,EACThG,CACR,EAqDI6B,GAAgB,SAAUsE,GAC5B,GAAkB,KAAdA,EACF,MAAO,GACF,IAAK,eAAe/O,KAAK+O,GAC9B,MAAM,IAAIxN,MAAM,6BAgBlB,IAbA,IAAImJ,EACFC,EACAC,EACAC,EACAmE,EACAC,EACAC,EACAC,EACArE,EAAQ,GACR1I,EAAQ,EACRnB,GAXF8N,EAAYA,EAAUrP,QAAQ,KAAM,KAWfuB,OAGZgD,EAAI,EAAG8G,EAAS9J,GAAU,GAAM,EAAGgD,EAAI8G,GAC9CL,EAAKsC,GAAmB+B,EAAUjP,OAAOmE,MACzC0G,EAAKqC,GAAmB+B,EAAUjP,OAAOmE,MACzC2G,EAAKoC,GAAmB+B,EAAUjP,OAAOmE,MACzC4G,EAAKmC,GAAmB+B,EAAUjP,OAAOmE,MACzC+K,EAAKhC,GAAmB+B,EAAUjP,OAAOmE,MACzCgL,EAAKjC,GAAmB+B,EAAUjP,OAAOmE,MACzCiL,EAAKlC,GAAmB+B,EAAUjP,OAAOmE,MACzCkL,EAAKnC,GAAmB+B,EAAUjP,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,GACtCG,EAAM1I,KAAkD,KAArCuI,GAAM,EAAMC,GAAM,EAAMC,IAAO,GAClDC,EAAM1I,KAAsC,KAAzByI,GAAM,EAAMmE,IAAO,GACtClE,EAAM1I,KAAkD,KAArC4M,GAAM,EAAMC,GAAM,EAAMC,IAAO,GAClDpE,EAAM1I,KAA8B,KAAjB8M,GAAM,EAAKC,GAIhC,IAAInE,EAAS/J,EAAS8J,EAkCtB,OAjCe,IAAXC,GACFN,EAAKsC,GAAmB+B,EAAUjP,OAAOmE,MACzC0G,EAAKqC,GAAmB+B,EAAUjP,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,IAClB,IAAXK,GACTN,EAAKsC,GAAmB+B,EAAUjP,OAAOmE,MACzC0G,EAAKqC,GAAmB+B,EAAUjP,OAAOmE,MACzC2G,EAAKoC,GAAmB+B,EAAUjP,OAAOmE,MACzC4G,EAAKmC,GAAmB+B,EAAUjP,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,GACtCG,EAAM1I,KAAkD,KAArCuI,GAAM,EAAMC,GAAM,EAAMC,IAAO,IAC9B,IAAXG,GACTN,EAAKsC,GAAmB+B,EAAUjP,OAAOmE,MACzC0G,EAAKqC,GAAmB+B,EAAUjP,OAAOmE,MACzC2G,EAAKoC,GAAmB+B,EAAUjP,OAAOmE,MACzC4G,EAAKmC,GAAmB+B,EAAUjP,OAAOmE,MACzC+K,EAAKhC,GAAmB+B,EAAUjP,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,GACtCG,EAAM1I,KAAkD,KAArCuI,GAAM,EAAMC,GAAM,EAAMC,IAAO,GAClDC,EAAM1I,KAAsC,KAAzByI,GAAM,EAAMmE,IAAO,IAClB,IAAXhE,IACTN,EAAKsC,GAAmB+B,EAAUjP,OAAOmE,MACzC0G,EAAKqC,GAAmB+B,EAAUjP,OAAOmE,MACzC2G,EAAKoC,GAAmB+B,EAAUjP,OAAOmE,MACzC4G,EAAKmC,GAAmB+B,EAAUjP,OAAOmE,MACzC+K,EAAKhC,GAAmB+B,EAAUjP,OAAOmE,MACzCgL,EAAKjC,GAAmB+B,EAAUjP,OAAOmE,MACzCiL,EAAKlC,GAAmB+B,EAAUjP,OAAOmE,MACzC6G,EAAM1I,KAAsC,KAAzBsI,GAAM,EAAMC,IAAO,GACtCG,EAAM1I,KAAkD,KAArCuI,GAAM,EAAMC,GAAM,EAAMC,IAAO,GAClDC,EAAM1I,KAAsC,KAAzByI,GAAM,EAAMmE,IAAO,GACtClE,EAAM1I,KAAkD,KAArC4M,GAAM,EAAMC,GAAM,EAAMC,IAAO,IAE7CpE,CACT,EA+OIoB,GAAS,SAAUkD,EAAOjD,GAC5B,IAAIC,EAA6B,iBAAVgD,EAIvB,OAHIhD,GAAagD,EAAM/C,cAAgBC,cACrC8C,EAAQ,IAAI7C,WAAW6C,IAErBhD,EAzEY,SAAUtB,GAQ1B,IAPA,IAAIJ,EACFC,EACAC,EACAC,EACAmE,EACAD,EAAY,GACZ9N,EAAS6J,EAAM7J,OACRgD,EAAI,EAAG8G,EAA+B,EAAvBnJ,SAASX,EAAS,GAAQgD,EAAI8G,GACpDL,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,KACX2G,EAAKE,EAAM7G,KACX4G,EAAKC,EAAM7G,KACX+K,EAAKlE,EAAM7G,KACX8K,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAA8C,IAAzBpC,GAAM,EAAMC,IAAO,IACxCmC,GAA8C,IAAzBnC,GAAM,EAAMC,IAAO,IACxCkC,GAAoBlC,IAAO,EAAK,IAChCkC,GAA8C,IAAzBlC,GAAM,EAAMmE,IAAO,IACxCjC,GAAwB,GAALiC,GAIvB,IAAIhE,EAAS/J,EAAS8J,EAuCtB,OAtCe,IAAXC,GACFN,EAAKI,EAAM7G,GACX8K,GAAahC,GAAmBrC,IAAO,GAAKqC,GAAoBrC,GAAM,EAAK,IAAM,UAC7D,IAAXM,GACTN,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,GACX8K,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAAoBpC,GAAM,EAAK,IAC/B,QACkB,IAAXK,GACTN,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,KACX2G,EAAKE,EAAM7G,GACX8K,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAA8C,IAAzBpC,GAAM,EAAMC,IAAO,IACxCmC,GAAoBnC,GAAM,EAAK,IAC/B,OACkB,IAAXI,IACTN,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,KACX2G,EAAKE,EAAM7G,KACX4G,EAAKC,EAAM7G,GACX8K,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAA8C,IAAzBpC,GAAM,EAAMC,IAAO,IACxCmC,GAA8C,IAAzBnC,GAAM,EAAMC,IAAO,IACxCkC,GAAoBlC,IAAO,EAAK,IAChCkC,GAAoBlC,GAAM,EAAK,IAC/B,KAEGkE,CACT,CAQWM,CAAYD,GA/KN,SAAU7D,GACzB,IAAIb,EACFC,EACAC,EACAC,EACAmE,EACAM,EAIArL,EAHAsL,GAAM,EACNR,EAAY,GACZ3M,EAAQ,EAERoN,EAAQ,EAERvO,EAASsK,EAAItK,OACf,GAAY,KAARsK,EACF,OAAOwD,EAET,EAAG,CAID,IAHAL,GAAO,GAAKA,GAAO,GACnBA,GAAO,GAAKA,GAAO,GACnBA,GAAO,GAAKA,GAAO,GACdzK,EAAIuL,EAAOpN,EAAQnB,GAAUgD,EAAI,IAAK7B,GACzCkN,EAAO/D,EAAIG,WAAWtJ,IACX,IACTsM,GAAOzK,KAAOqL,EACLA,EAAO,MAChBZ,GAAOzK,KAAO,IAAQqL,GAAQ,EAC9BZ,GAAOzK,KAAO,IAAe,GAAPqL,GACbA,EAAO,OAAUA,GAAQ,OAClCZ,GAAOzK,KAAO,IAAQqL,GAAQ,GAC9BZ,GAAOzK,KAAO,IAASqL,GAAQ,EAAK,GACpCZ,GAAOzK,KAAO,IAAe,GAAPqL,IAEtBA,EAAO,QAAoB,KAAPA,IAAiB,GAAiC,KAA1B/D,EAAIG,aAAatJ,IAC7DsM,GAAOzK,KAAO,IAAQqL,GAAQ,GAC9BZ,GAAOzK,KAAO,IAASqL,GAAQ,GAAM,GACrCZ,GAAOzK,KAAO,IAASqL,GAAQ,EAAK,GACpCZ,GAAOzK,KAAO,IAAe,GAAPqL,GAI1BE,EAAQvL,EAAI,EACR7B,IAAUnB,KACVmB,EAEAA,EAAQnB,GAAUgD,EAAI,IACxBsL,GAAM,GAER7E,EAAKgE,GAAO,GACRzK,EAAI,GACN0G,EAAK+D,GAAO,GACZ9D,EAAK8D,GAAO,GACZ7D,EAAK6D,GAAO,GACZM,EAAKN,GAAO,GACZK,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAA8C,IAAzBpC,GAAM,EAAMC,IAAO,IACxCmC,GAA8C,IAAzBnC,GAAM,EAAMC,IAAO,IACxCkC,GAAoBlC,IAAO,EAAK,IAChCkC,GAA8C,IAAzBlC,GAAM,EAAMmE,IAAO,IACxCjC,GAAwB,GAALiC,IACN,IAAN/K,EACT8K,GAAahC,GAAmBrC,IAAO,GAAKqC,GAAoBrC,GAAM,EAAK,IAAM,SAClE,IAANzG,GACT0G,EAAK+D,GAAO,GACZK,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAAoBpC,GAAM,EAAK,IAC/B,QACa,IAAN1G,GACT0G,EAAK+D,GAAO,GACZ9D,EAAK8D,GAAO,GACZK,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAA8C,IAAzBpC,GAAM,EAAMC,IAAO,IACxCmC,GAAoBnC,GAAM,EAAK,IAC/B,QAEFD,EAAK+D,GAAO,GACZ9D,EAAK8D,GAAO,GACZ7D,EAAK6D,GAAO,GACZK,GACEhC,GAAmBrC,IAAO,GAC1BqC,GAA8C,IAAzBrC,GAAM,EAAMC,IAAO,IACxCoC,GAAoBpC,IAAO,EAAK,IAChCoC,GAA8C,IAAzBpC,GAAM,EAAMC,IAAO,IACxCmC,GAA8C,IAAzBnC,GAAM,EAAMC,IAAO,IACxCkC,GAAoBlC,IAAO,EAAK,IAChCkC,GAAoBlC,GAAM,EAAK,IAC/B,IAEN,QAAU0E,GACV,OAAOR,CACT,CAgFWU,CAAWL,EAEtB,EAEIM,GAAS,SAAUX,EAAW5C,GAE9B,OA1Xe,SAAUrB,GAO3B,IANA,IAIEe,EACAC,EALEP,EAAM,GACRtK,EAAS6J,EAAM7J,OACfgD,EAAI,EACJ8H,EAAiB,EAGZ9H,EAAIhD,GAET,IADA4K,EAAIf,EAAM7G,OACD,IACPsH,GAAO7E,OAAOiF,aAAaE,OAD7B,CAGWA,EAAI,KAAQA,GAAK,KAC1BC,EAAQ,GAAJD,EACJE,EAAiB,GACRF,GAAK,KACdC,EAAQ,GAAJD,EACJE,EAAiB,GACRF,GAAK,KACdC,EAAQ,EAAJD,EACJE,EAAiB,GAEjB4C,GAAiB1K,EAAGsH,GAGtB,IAAK,IAAIS,EAAI,EAAGA,EAAID,IAAkBC,IACpCH,EAAIf,EAAM7G,MACF,KAAQ4H,EAAI,MAClB8C,GAAiB1K,EAAGsH,GAEtBO,IAAM,EACNA,GAAS,GAAJD,EAEHC,GAAK,OAAUA,GAAK,OACtB6C,GAAiB1K,EAAGsH,GAElBO,EAAI,SACN6C,GAAiB1K,EAAGsH,GAGlBO,GAAK,MACPP,GAAO7E,OAAOiF,aAAaG,IAE3BA,GAAK,MACLP,GAAO7E,OAAOiF,aAAyB,OAAXG,GAAK,KACjCP,GAAO7E,OAAOiF,aAA2B,OAAT,KAAJG,IAtB9B,CAyBF,OAAOP,CACT,CAyUWoE,CAAalF,GAAcsE,GA8EtC,8CC9fM,SAAiBxD,GACrB,OAAOqE,GAAcrE,EACvB,gBAgBM,SAAwBA,GAC5B,OAAOsE,GAAqBtE,EAC9B,SA7BM,SAAiBA,GACrB,OAAOuE,GAAcvE,EACvB,gBAgBM,SAAwBxJ,GAC5B,OAAO+N,GAAc/N,EACvB,ICjBIgO,GAAc,wBAEdvG,GAA2B,iBAAX3I,OAChB4I,GAAOD,GAAS3I,OAAS,CAAA;;;;;;;;;OACzB4I,GAAKuG,mBACPxG,IAAS,GAEX,IAAIG,IAAcH,IAA0B,iBAATI,KAC/BC,IAAWJ,GAAKwG,mBAAwC,iBAAZlG,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KACzGJ,GACFJ,GAAOS,OACEP,KACTF,GAAOG,MAET,IAQEsG,GAREC,IAAgB1G,GAAK2G,wBAAiD,oBAAhB9D,YACtD+D,GAAY,mBAAmB1K,MAAM,IACrC2K,GAAQ,CAAC,IAAK,MAAO,SAAS,YAC9BC,GAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,GAAe,CAAC,MAAO,QAAS,SAAU,SAAU,cAAe,UACnErG,GAAqB,mEAAmExE,MAAM,IAE9F+I,GAAS,GAEb,GAAIyB,GAAc,CAChB,IAAIM,GAAS,IAAInE,YAAY,IAC7B4D,GAAU,IAAI3D,WAAWkE,IACzB/B,GAAS,IAAIgC,YAAYD,GAC3B,CAEA,IAAIjQ,GAAUQ,MAAMR,SAChBiJ,GAAKwG,mBAAsBzP,KAC7BA,GAAU,SAAUkC,GAClB,MAA+C,mBAAxCtC,OAAOC,UAAUC,SAASC,KAAKmC,EACxC,GAGF,IAAIiO,GAASrE,YAAYqE,QACrBR,KAAiB1G,GAAKmH,gCAAmCD,KAC3DA,GAAS,SAAUjO,GACjB,MAAsB,iBAARA,GAAoBA,EAAI+N,QAAU/N,EAAI+N,OAAOpE,cAAgBC,WAC7E,GAIF,IAAIuE,GAAgB,SAAUC,GAC5B,IAAIxI,SAAcwI,EAClB,GAAa,WAATxI,EACF,MAAO,CAACwI,GAAS,GAEnB,GAAa,WAATxI,GAAiC,OAAZwI,EACvB,MAAM,IAAIvP,MAAMwO,IAElB,GAAII,IAAgBW,EAAQzE,cAAgBC,YAC1C,MAAO,CAAC,IAAIC,WAAWuE,IAAU,GAEnC,IAAKtQ,GAAQsQ,KAAaH,GAAOG,GAC/B,MAAM,IAAIvP,MAAMwO,IAElB,MAAO,CAACe,GAAS,EACnB,EA2DIC,GAAqB,SAAUC,GACjC,OAAO,SAAUF,GACf,OAAO,IAAIG,IAAI,GAAMC,OAAOJ,GAASE,IACvC,CACF,EAwCIG,GAAW,SAAUC,GACvB,IAEIC,EAFAC,EAAShG,QAAQ,UACjBD,EAASC,QAAQ,UAAUD,OAG7BgG,EADEhG,EAAOG,OAAS/B,GAAK8H,sBACVlG,EAAOG,KAEP,SAAUsF,GACrB,OAAO,IAAIzF,EAAOyF,EACpB,EAkBF,OAhBiB,SAAUA,GACzB,GAAuB,iBAAZA,EACT,OAAOQ,EAAOE,WAAW,OAAON,OAAOJ,EAAS,QAAQW,OAAO,OAE/D,GAAIX,QACF,MAAM,IAAIvP,MAAMwO,IAKpB,OAJae,EAAQzE,cAAgBC,cACjCwE,EAAU,IAAIvE,WAAWuE,IAGzBtQ,GAAQsQ,IAAYH,GAAOG,IAAYA,EAAQzE,cAAgBhB,EAC1DiG,EAAOE,WAAW,OAAON,OAAOG,EAAWP,IAAUW,OAAO,OAE5DL,EAAON,EAElB,CAEF,EAqEIY,GAAyB,SAAUV,GACrC,OAAO,SAAUW,EAAKb,GACpB,OAAO,IAAIc,GAAQD,GAAK,GAAMT,OAAOJ,GAASE,IAChD,CACF,EA6CA,SAASC,GAAIY,GACX,GAAIA,EACFnD,GAAO,GACLA,GAAO,IACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACL,EACJoD,KAAKpD,OAASA,GACdoD,KAAK5B,QAAUA,QAEf,GAAIC,GAAc,CAChB,IAAIM,EAAS,IAAInE,YAAY,IAC7BwF,KAAK5B,QAAU,IAAI3D,WAAWkE,GAC9BqB,KAAKpD,OAAS,IAAIgC,YAAYD,EAChC,MACEqB,KAAKpD,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGnEoD,KAAKC,GAAKD,KAAKE,GAAKF,KAAKG,GAAKH,KAAKI,GAAKJ,KAAKtC,MAAQsC,KAAKhH,MAAQgH,KAAKK,OAAS,EAChFL,KAAKM,UAAYN,KAAKO,QAAS,EAC/BP,KAAKQ,OAAQ,CACf,CAugBA,SAASV,GAAQD,EAAKE,GACpB,IAAI5N,EACFkF,EAAS0H,GAAcc,GAEzB,GADAA,EAAMxI,EAAO,GACTA,EAAO,GAAI,CACb,IAGEmG,EAHExE,EAAQ,GACV7J,EAAS0Q,EAAI1Q,OACbmB,EAAQ,EAEV,IAAK6B,EAAI,EAAGA,EAAIhD,IAAUgD,GACxBqL,EAAOqC,EAAIjG,WAAWzH,IACX,IACT6G,EAAM1I,KAAWkN,EACRA,EAAO,MAChBxE,EAAM1I,KAAW,IAAQkN,IAAS,EAClCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAChBA,EAAO,OAAUA,GAAQ,OAClCxE,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,IAEzBA,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtBqC,EAAIjG,aAAazH,IAC7D6G,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,GAAM,GACzCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAG7BqC,EAAM7G,CACR,CAEI6G,EAAI1Q,OAAS,KACf0Q,EAAM,IAAIV,IAAI,GAAMC,OAAOS,GAAK5P,SAGlC,IAAIwQ,EAAU,GACZC,EAAU,GACZ,IAAKvO,EAAI,EAAGA,EAAI,KAAMA,EAAG,CACvB,IAAI4H,EAAI8F,EAAI1N,IAAM,EAClBsO,EAAQtO,GAAK,GAAO4H,EACpB2G,EAAQvO,GAAK,GAAO4H,CACtB,CAEAoF,GAAI1Q,KAAKuR,KAAMD,GAEfC,KAAKZ,OAAOsB,GACZV,KAAKS,QAAUA,EACfT,KAAKW,OAAQ,EACbX,KAAKD,aAAeA,CACtB,CA7iBAZ,GAAI5Q,UAAU6Q,OAAS,SAAUJ,GAC/B,GAAIgB,KAAKM,UACP,MAAM,IAAI7Q,MAlWO,2BAqWnB,IAAI4H,EAAS0H,GAAcC,GAC3BA,EAAU3H,EAAO,GASjB,IARA,IACImG,EAEFrL,EAHE9D,EAAWgJ,EAAO,GAEpB/G,EAAQ,EAERnB,EAAS6P,EAAQ7P,OACjByN,EAASoD,KAAKpD,OACZwB,EAAU4B,KAAK5B,QAEZ9N,EAAQnB,GAAQ,CAuBrB,GAtBI6Q,KAAKO,SACPP,KAAKO,QAAS,EACd3D,EAAO,GAAKA,EAAO,IACnBA,EAAO,IACLA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAGFvO,EACF,GAAIgQ,GACF,IAAKlM,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,GAC/CkN,EAAOwB,EAAQpF,WAAWtJ,IACf,IACT8N,EAAQjM,KAAOqL,EACNA,EAAO,MAChBY,EAAQjM,KAAO,IAAQqL,IAAS,EAChCY,EAAQjM,KAAO,IAAe,GAAPqL,GACdA,EAAO,OAAUA,GAAQ,OAClCY,EAAQjM,KAAO,IAAQqL,IAAS,GAChCY,EAAQjM,KAAO,IAASqL,IAAS,EAAK,GACtCY,EAAQjM,KAAO,IAAe,GAAPqL,IAEvBA,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BwB,EAAQpF,aAAatJ,IACjE8N,EAAQjM,KAAO,IAAQqL,IAAS,GAChCY,EAAQjM,KAAO,IAASqL,IAAS,GAAM,GACvCY,EAAQjM,KAAO,IAASqL,IAAS,EAAK,GACtCY,EAAQjM,KAAO,IAAe,GAAPqL,QAI3B,IAAKrL,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,GAC/CkN,EAAOwB,EAAQpF,WAAWtJ,IACf,IACTsM,EAAOzK,IAAM,IAAMqL,GAAQiB,GAAY,EAANtM,KACxBqL,EAAO,MAChBZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,IAAOiB,GAAY,EAANtM,KAClDyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,MAC1CqL,EAAO,OAAUA,GAAQ,OAClCZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,OAEnDqL,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BwB,EAAQpF,aAAatJ,IACjEsM,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,GAAM,KAAUiB,GAAY,EAANtM,KAC5DyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,WAKzD,GAAIkM,GACF,IAAKlM,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,EAC/C8N,EAAQjM,KAAO6M,EAAQ1O,QAGzB,IAAK6B,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,EAC/CsM,EAAOzK,IAAM,IAAM6M,EAAQ1O,IAAUmO,GAAY,EAANtM,KAIjD6N,KAAKY,cAAgBzO,EACrB6N,KAAKhH,OAAS7G,EAAI6N,KAAKtC,MACnBvL,GAAK,IACP6N,KAAKtC,MAAQvL,EAAI,GACjB6N,KAAKa,OACLb,KAAKO,QAAS,GAEdP,KAAKtC,MAAQvL,CAEjB,CAKA,OAJI6N,KAAKhH,MAAQ,aACfgH,KAAKK,QAAWL,KAAKhH,MAAQ,WAAe,EAC5CgH,KAAKhH,MAAQgH,KAAKhH,MAAQ,YAErBgH,IACT,EAEAb,GAAI5Q,UAAUuS,SAAW,WACvB,IAAId,KAAKM,UAAT,CAGAN,KAAKM,WAAY,EACjB,IAAI1D,EAASoD,KAAKpD,OAChBzK,EAAI6N,KAAKY,cACXhE,EAAOzK,IAAM,IAAMqM,GAAU,EAAJrM,GACrBA,GAAK,KACF6N,KAAKO,QACRP,KAAKa,OAEPjE,EAAO,GAAKA,EAAO,IACnBA,EAAO,IACLA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAENA,EAAO,IAAMoD,KAAKhH,OAAS,EAC3B4D,EAAO,IAAOoD,KAAKK,QAAU,EAAML,KAAKhH,QAAU,GAClDgH,KAAKa,MA9BL,CA+BF,EAEA1B,GAAI5Q,UAAUsS,KAAO,WACnB,IAAIE,EACFhH,EACAC,EACAgH,EACAC,EACAC,EACAtE,EAASoD,KAAKpD,OAEZoD,KAAKQ,MAQPzG,IADAA,IALAgH,IADAA,EAAInE,EAAO,GAAK,YACJ,EAAMmE,IAAM,IAAO,UAAc,IAI7C/G,IADAA,eADAgH,IADAA,IAAK,WAAmB,WAAJD,GAAmBnE,EAAO,GAAK,YACvC,GAAOoE,IAAM,IAAOD,EAAM,KACV,UAAJA,IAAoBnE,EAAO,GAAK,aAC5C,GAAO5C,IAAM,IAAOgH,EAAM,IACvBA,EAAID,IAAOnE,EAAO,GAAK,aAC1B,GAAO7C,IAAM,IAAOC,EAAM,GAEtC+G,EAAIf,KAAKC,GACTlG,EAAIiG,KAAKE,GACTlG,EAAIgG,KAAKG,GASTpG,IADAA,KALAgH,IADAA,KADAC,EAAIhB,KAAKI,IACErG,GAAKC,EAAIgH,IAAOpE,EAAO,GAAK,YAC3B,EAAMmE,IAAM,IAAOhH,EAAM,IAIrCC,IADAA,IAAMD,GADNiH,IADAA,IAAMhH,EAAK+G,GAAKhH,EAAIC,IAAO4C,EAAO,GAAK,YAC3B,GAAOoE,IAAM,IAAOD,EAAM,IACtBA,EAAIhH,IAAO6C,EAAO,GAAK,YAC3B,GAAO5C,IAAM,IAAOgH,EAAM,IACtBA,EAAID,IAAOnE,EAAO,GAAK,aAC3B,GAAO7C,IAAM,IAAOC,EAAM,GAUxCD,IADAA,KALAgH,IADAA,IAAMC,EAAKjH,GAAKC,EAAIgH,IAAOpE,EAAO,GAAK,YAC3B,EAAMmE,IAAM,IAAOhH,EAAM,IAIrCC,IADAA,IAAMD,GADNiH,IADAA,IAAMhH,EAAK+G,GAAKhH,EAAIC,IAAO4C,EAAO,GAAK,aAC3B,GAAOoE,IAAM,IAAOD,EAAM,IACtBA,EAAIhH,IAAO6C,EAAO,GAAK,aAC3B,GAAO5C,IAAM,IAAOgH,EAAM,IACtBA,EAAID,IAAOnE,EAAO,GAAK,WAC3B,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KALAgH,IADAA,IAAMC,EAAKjH,GAAKC,EAAIgH,IAAOpE,EAAO,GAAK,aAC3B,EAAMmE,IAAM,IAAOhH,EAAM,IAIrCC,IADAA,IAAMD,GADNiH,IADAA,IAAMhH,EAAK+G,GAAKhH,EAAIC,IAAO4C,EAAO,GAAK,aAC3B,GAAOoE,IAAM,IAAOD,EAAM,IACtBA,EAAIhH,IAAO6C,EAAO,IAAM,QAC5B,GAAO5C,IAAM,IAAOgH,EAAM,IACtBA,EAAID,IAAOnE,EAAO,IAAM,aAC5B,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KALAgH,IADAA,IAAMC,EAAKjH,GAAKC,EAAIgH,IAAOpE,EAAO,IAAM,aAC5B,EAAMmE,IAAM,IAAOhH,EAAM,IAIrCC,IADAA,IAAMD,GADNiH,IADAA,IAAMhH,EAAK+G,GAAKhH,EAAIC,IAAO4C,EAAO,IAAM,WAC5B,GAAOoE,IAAM,IAAOD,EAAM,IACtBA,EAAIhH,IAAO6C,EAAO,IAAM,aAC5B,GAAO5C,IAAM,IAAOgH,EAAM,IACtBA,EAAID,IAAOnE,EAAO,IAAM,aAC5B,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,EAAKC,IADX+G,IADAA,IAAM/G,EAAKgH,GAAKjH,EAAIC,IAAO4C,EAAO,GAAK,YAC3B,EAAMmE,IAAM,IAAOhH,EAAM,GACjBA,IAAO6C,EAAO,GAAK,aAC3B,EAAMoE,IAAM,IAAOD,EAAM,GAG1BA,IADX/G,IADAA,IAAM+G,EAAKhH,GAAKiH,EAAID,IAAOnE,EAAO,IAAM,YAC5B,GAAO5C,IAAM,IAAOgH,EAAM,GAClBA,IAAOpE,EAAO,GAAK,YAC3B,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,EAAKC,IADX+G,IADAA,IAAM/G,EAAKgH,GAAKjH,EAAIC,IAAO4C,EAAO,GAAK,YAC3B,EAAMmE,IAAM,IAAOhH,EAAM,GACjBA,IAAO6C,EAAO,IAAM,WAC5B,EAAMoE,IAAM,IAAOD,EAAM,GAG1BA,IADX/G,IADAA,IAAM+G,EAAKhH,GAAKiH,EAAID,IAAOnE,EAAO,IAAM,YAC5B,GAAO5C,IAAM,IAAOgH,EAAM,GAClBA,IAAOpE,EAAO,GAAK,YAC3B,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,EAAKC,IADX+G,IADAA,IAAM/G,EAAKgH,GAAKjH,EAAIC,IAAO4C,EAAO,GAAK,YAC3B,EAAMmE,IAAM,IAAOhH,EAAM,GACjBA,IAAO6C,EAAO,IAAM,aAC5B,EAAMoE,IAAM,IAAOD,EAAM,GAG1BA,IADX/G,IADAA,IAAM+G,EAAKhH,GAAKiH,EAAID,IAAOnE,EAAO,GAAK,YAC3B,GAAO5C,IAAM,IAAOgH,EAAM,GAClBA,IAAOpE,EAAO,GAAK,aAC3B,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,EAAKC,IADX+G,IADAA,IAAM/G,EAAKgH,GAAKjH,EAAIC,IAAO4C,EAAO,IAAM,aAC5B,EAAMmE,IAAM,IAAOhH,EAAM,GACjBA,IAAO6C,EAAO,GAAK,WAC3B,EAAMoE,IAAM,IAAOD,EAAM,GAG1BA,IADX/G,IADAA,IAAM+G,EAAKhH,GAAKiH,EAAID,IAAOnE,EAAO,GAAK,aAC3B,GAAO5C,IAAM,IAAOgH,EAAM,GAClBA,IAAOpE,EAAO,IAAM,aAC5B,GAAO7C,IAAM,IAAOC,EAAM,EAUtCD,IADAA,KAHAmH,GADAF,IADAA,KAHAC,EAAKlH,EAAIC,IAET+G,IADAA,IAAME,EAAKD,GAAKpE,EAAO,GAAK,SAChB,EAAMmE,IAAM,IAAOhH,EAAM,IACrB6C,EAAO,GAAK,aAChB,GAAOoE,IAAM,IAAOD,EAAM,GAC7BA,IAET/G,IADAA,IAAMkH,EAAKnH,GAAK6C,EAAO,IAAM,aACjB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBpE,EAAO,IAAM,WACjB,GAAO7C,IAAM,GAAMC,EAAM,EAUrCD,IADAA,KAHAmH,GADAF,IADAA,KAHAC,EAAKlH,EAAIC,IAET+G,IADAA,IAAME,EAAKD,GAAKpE,EAAO,GAAK,aAChB,EAAMmE,IAAM,IAAOhH,EAAM,IACrB6C,EAAO,GAAK,aAChB,GAAOoE,IAAM,IAAOD,EAAM,GAC7BA,IAET/G,IADAA,IAAMkH,EAAKnH,GAAK6C,EAAO,GAAK,YAChB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBpE,EAAO,IAAM,aACjB,GAAO7C,IAAM,GAAMC,EAAM,EAUrCD,IADAA,KAHAmH,GADAF,IADAA,KAHAC,EAAKlH,EAAIC,IAET+G,IADAA,IAAME,EAAKD,GAAKpE,EAAO,IAAM,YACjB,EAAMmE,IAAM,IAAOhH,EAAM,IACrB6C,EAAO,GAAK,YAChB,GAAOoE,IAAM,IAAOD,EAAM,GAC7BA,IAET/G,IADAA,IAAMkH,EAAKnH,GAAK6C,EAAO,GAAK,YAChB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBpE,EAAO,GAAK,WAChB,GAAO7C,IAAM,GAAMC,EAAM,EAUrCD,IADAA,KAHAmH,GADAF,IADAA,KAHAC,EAAKlH,EAAIC,IAET+G,IADAA,IAAME,EAAKD,GAAKpE,EAAO,GAAK,YAChB,EAAMmE,IAAM,IAAOhH,EAAM,IACrB6C,EAAO,IAAM,YACjB,GAAOoE,IAAM,IAAOD,EAAM,GAC7BA,IAET/G,IADAA,IAAMkH,EAAKnH,GAAK6C,EAAO,IAAM,YACjB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBpE,EAAO,GAAK,YAChB,GAAO7C,IAAM,GAAMC,EAAM,EAQrCD,IADAA,KAHAiH,IADAA,IAAMjH,IADNgH,IADAA,IAAM/G,GAAKD,GAAKiH,IAAMpE,EAAO,GAAK,YACtB,EAAMmE,IAAM,IAAOhH,EAAM,IACrBC,IAAM4C,EAAO,GAAK,aACtB,GAAOoE,IAAM,IAAOD,EAAM,KAEtC/G,IADAA,IAAM+G,GAAKC,GAAKjH,IAAM6C,EAAO,IAAM,aACvB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBD,IAAMnE,EAAO,GAAK,WACtB,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,IADNgH,IADAA,IAAM/G,GAAKD,GAAKiH,IAAMpE,EAAO,IAAM,aACvB,EAAMmE,IAAM,IAAOhH,EAAM,IACrBC,IAAM4C,EAAO,GAAK,aACtB,GAAOoE,IAAM,IAAOD,EAAM,KAEtC/G,IADAA,IAAM+G,GAAKC,GAAKjH,IAAM6C,EAAO,IAAM,UACvB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBD,IAAMnE,EAAO,GAAK,aACtB,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,IADNgH,IADAA,IAAM/G,GAAKD,GAAKiH,IAAMpE,EAAO,GAAK,aACtB,EAAMmE,IAAM,IAAOhH,EAAM,IACrBC,IAAM4C,EAAO,IAAM,WACvB,GAAOoE,IAAM,IAAOD,EAAM,KAEtC/G,IADAA,IAAM+G,GAAKC,GAAKjH,IAAM6C,EAAO,GAAK,aACtB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBD,IAAMnE,EAAO,IAAM,aACvB,GAAO7C,IAAM,IAAOC,EAAM,EAQtCD,IADAA,KAHAiH,IADAA,IAAMjH,IADNgH,IADAA,IAAM/G,GAAKD,GAAKiH,IAAMpE,EAAO,GAAK,YACtB,EAAMmE,IAAM,IAAOhH,EAAM,IACrBC,IAAM4C,EAAO,IAAM,aACvB,GAAOoE,IAAM,IAAOD,EAAM,KAEtC/G,IADAA,IAAM+G,GAAKC,GAAKjH,IAAM6C,EAAO,GAAK,YACtB,GAAO5C,IAAM,IAAOgH,EAAM,IACtBD,IAAMnE,EAAO,GAAK,YACtB,GAAO7C,IAAM,IAAOC,EAAM,EAElCgG,KAAKQ,OACPR,KAAKC,GAAMc,EAAI,WAAe,EAC9Bf,KAAKE,GAAMnG,EAAI,UAAc,EAC7BiG,KAAKG,GAAMnG,EAAI,WAAe,EAC9BgG,KAAKI,GAAMY,EAAI,UAAc,EAC7BhB,KAAKQ,OAAQ,IAEbR,KAAKC,GAAMD,KAAKC,GAAKc,EAAM,EAC3Bf,KAAKE,GAAMF,KAAKE,GAAKnG,EAAM,EAC3BiG,KAAKG,GAAMH,KAAKG,GAAKnG,EAAM,EAC3BgG,KAAKI,GAAMJ,KAAKI,GAAKY,EAAM,EAE/B,EAYA7B,GAAI5Q,UAAU4S,IAAM,WAClBnB,KAAKc,WAEL,IAAIb,EAAKD,KAAKC,GACZC,EAAKF,KAAKE,GACVC,EAAKH,KAAKG,GACVC,EAAKJ,KAAKI,GAEZ,OACE7B,GAAW0B,IAAO,EAAK,IACvB1B,GAAe,GAAL0B,GACV1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,EAAK,IACvB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW2B,IAAO,EAAK,IACvB3B,GAAe,GAAL2B,GACV3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,EAAK,IACvB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW4B,IAAO,EAAK,IACvB5B,GAAe,GAAL4B,GACV5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,EAAK,IACvB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW6B,IAAO,EAAK,IACvB7B,GAAe,GAAL6B,GACV7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,EAAK,IACvB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,GAE5B,EAYAjB,GAAI5Q,UAAUC,SAAW2Q,GAAI5Q,UAAU4S,IAYvChC,GAAI5Q,UAAUoR,OAAS,WACrBK,KAAKc,WAEL,IAAIb,EAAKD,KAAKC,GACZC,EAAKF,KAAKE,GACVC,EAAKH,KAAKG,GACVC,EAAKJ,KAAKI,GACZ,MAAO,CACA,IAALH,EACCA,IAAO,EAAK,IACZA,IAAO,GAAM,IACbA,IAAO,GAAM,IACT,IAALC,EACCA,IAAO,EAAK,IACZA,IAAO,GAAM,IACbA,IAAO,GAAM,IACT,IAALC,EACCA,IAAO,EAAK,IACZA,IAAO,GAAM,IACbA,IAAO,GAAM,IACT,IAALC,EACCA,IAAO,EAAK,IACZA,IAAO,GAAM,IACbA,IAAO,GAAM,IAElB,EAYAjB,GAAI5Q,UAAU0B,MAAQkP,GAAI5Q,UAAUoR,OAYpCR,GAAI5Q,UAAU6S,YAAc,WAC1BpB,KAAKc,WAEL,IAAInC,EAAS,IAAInE,YAAY,IACzBoC,EAAS,IAAIgC,YAAYD,GAK7B,OAJA/B,EAAO,GAAKoD,KAAKC,GACjBrD,EAAO,GAAKoD,KAAKE,GACjBtD,EAAO,GAAKoD,KAAKG,GACjBvD,EAAO,GAAKoD,KAAKI,GACVzB,CACT,EAaAQ,GAAI5Q,UAAUoQ,OAASQ,GAAI5Q,UAAU6S,YAYrCjC,GAAI5Q,UAAU8S,OAAS,WAMrB,IALA,IAAIzI,EACFC,EACAC,EACAJ,EAAY,GACZM,EAAQgH,KAAK/P,QACNkC,EAAI,EAAGA,EAAI,IAClByG,EAAKI,EAAM7G,KACX0G,EAAKG,EAAM7G,KACX2G,EAAKE,EAAM7G,KACXuG,GACEL,GAAmBO,IAAO,GAC1BP,GAA8C,IAAzBO,GAAM,EAAMC,IAAO,IACxCR,GAA8C,IAAzBQ,GAAM,EAAMC,IAAO,IACxCT,GAAwB,GAALS,GAIvB,OAFAF,EAAKI,EAAM7G,GACXuG,GAAaL,GAAmBO,IAAO,GAAKP,GAAoBO,GAAM,EAAK,IAAM,IAEnF,EA4DAkH,GAAQvR,UAAY,IAAI4Q,GAExBW,GAAQvR,UAAUuS,SAAW,WAE3B,GADA3B,GAAI5Q,UAAUuS,SAASrS,KAAKuR,MACxBA,KAAKW,MAAO,CACdX,KAAKW,OAAQ,EACb,IAAIW,EAAYtB,KAAK/P,QACrBkP,GAAI1Q,KAAKuR,KAAMA,KAAKD,cACpBC,KAAKZ,OAAOY,KAAKS,SACjBT,KAAKZ,OAAOkC,GACZnC,GAAI5Q,UAAUuS,SAASrS,KAAKuR,KAC9B,CACF,EAGO,MAAMuB,GA/wBM,WACjB,IAAIjC,EAASL,GAAmB,OAC5BlH,KACFuH,EAASD,GAASC,IAEpBA,EAAOzO,OAAS,WACd,OAAO,IAAIsO,EACb,EACAG,EAAOF,OAAS,SAAUJ,GACxB,OAAOM,EAAOzO,SAASuO,OAAOJ,EAChC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQyI,GAAmBzI,EACpC,CACA,OAAO8I,CACT,CA+vBmBkC,GACNC,GAjoBU,WACrB,IAAInC,EAASM,GAAuB,OACpCN,EAAOzO,OAAS,SAAUgP,GACxB,OAAO,IAAIC,GAAQD,EACrB,EACAP,EAAOF,OAAS,SAAUS,EAAKb,GAC7B,OAAOM,EAAOzO,OAAOgP,GAAKT,OAAOJ,EACnC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQoJ,GAAuBpJ,EACxC,CACA,OAAO8I,CACT,CAonBwBoC;;;;;;;;;ACh6BxB,IAAIzD,GAAc,wBAEdvG,GAA2B,iBAAX3I,OAChB4I,GAAOD,GAAS3I,OAAS,CAAA,EACzB4I,GAAKgK,oBACPjK,IAAS,GAEX,IAAIG,IAAcH,IAA0B,iBAATI,KAC/BC,IAAWJ,GAAKiK,oBAAyC,iBAAZ3J,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAC1GJ,GACFJ,GAAOS,OACEP,KACTF,GAAOG,MAET,IAAIuG,IAAgB1G,GAAKkK,yBAAkD,oBAAhBrH,YACvD+D,GAAY,mBAAmB1K,MAAM,IACrC2K,GAAQ,EAAC,WAAa,QAAS,MAAO,KACtCC,GAAQ,CAAC,GAAI,GAAI,EAAG,GACpBC,GAAe,CAAC,MAAO,QAAS,SAAU,eAE1C9B,GAAS,GAETlO,GAAUQ,MAAMR,SAChBiJ,GAAKiK,oBAAuBlT,KAC9BA,GAAU,SAAUkC,GAClB,MAA+C,mBAAxCtC,OAAOC,UAAUC,SAASC,KAAKmC,EACxC,GAGF,IAAIiO,GAASrE,YAAYqE,QACrBR,KAAiB1G,GAAKmK,iCAAoCjD,KAC5DA,GAAS,SAAUjO,GACjB,MAAsB,iBAARA,GAAoBA,EAAI+N,QAAU/N,EAAI+N,OAAOpE,cAAgBC,WAC7E,GAIF,IAAIuE,GAAgB,SAAUC,GAC5B,IAAIxI,SAAcwI,EAClB,GAAa,WAATxI,EACF,MAAO,CAACwI,GAAS,GAEnB,GAAa,WAATxI,GAAiC,OAAZwI,EACvB,MAAM,IAAIvP,MAAMwO,IAElB,GAAII,IAAgBW,EAAQzE,cAAgBC,YAC1C,MAAO,CAAC,IAAIC,WAAWuE,IAAU,GAEnC,IAAKtQ,GAAQsQ,KAAaH,GAAOG,GAC/B,MAAM,IAAIvP,MAAMwO,IAElB,MAAO,CAACe,GAAS,EACnB,EAEIC,GAAqB,SAAUC,GACjC,OAAO,SAAUF,GACf,OAAO,IAAI+C,IAAK,GAAM3C,OAAOJ,GAASE,IACxC,CACF,EAoBIG,GAAW,SAAUC,GACvB,IAEIC,EAFAC,EAAShG,QAAQ,UACjBD,EAASC,QAAQ,UAAUD,OAG7BgG,EADEhG,EAAOG,OAAS/B,GAAKqK,uBACVzI,EAAOG,KAEP,SAAUsF,GACrB,OAAO,IAAIzF,EAAOyF,EACpB,EAkBF,OAhBiB,SAAUA,GACzB,GAAuB,iBAAZA,EACT,OAAOQ,EAAOE,WAAW,QAAQN,OAAOJ,EAAS,QAAQW,OAAO,OAEhE,GAAIX,QACF,MAAM,IAAIvP,MAAMwO,IAKpB,OAJae,EAAQzE,cAAgBC,cACjCwE,EAAU,IAAIvE,WAAWuE,IAGzBtQ,GAAQsQ,IAAYH,GAAOG,IAAYA,EAAQzE,cAAgBhB,EAC1DiG,EAAOE,WAAW,QAAQN,OAAOG,EAAWP,IAAUW,OAAO,OAE7DL,EAAON,EAElB,CAEF,EAEIY,GAAyB,SAAUV,GACrC,OAAO,SAAUW,EAAKb,GACpB,OAAO,IAAIiD,GAASpC,GAAK,GAAMT,OAAOJ,GAASE,IACjD,CACF,EAiBA,SAAS6C,GAAKhC,GACRA,GACFnD,GAAO,GACLA,GAAO,IACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACL,EACJoD,KAAKpD,OAASA,IAEdoD,KAAKpD,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGjEoD,KAAKC,GAAK,WACVD,KAAKE,GAAK,WACVF,KAAKG,GAAK,WACVH,KAAKI,GAAK,UACVJ,KAAKkC,GAAK,WAEVlC,KAAKmC,MAAQnC,KAAKtC,MAAQsC,KAAKhH,MAAQgH,KAAKK,OAAS,EACrDL,KAAKM,UAAYN,KAAKO,QAAS,EAC/BP,KAAKQ,OAAQ,CACf,CAoWA,SAASyB,GAASpC,EAAKE,GACrB,IAAI5N,EACFkF,EAAS0H,GAAcc,GAEzB,GADAA,EAAMxI,EAAO,GACTA,EAAO,GAAI,CACb,IAGEmG,EAHExE,EAAQ,GACV7J,EAAS0Q,EAAI1Q,OACbmB,EAAQ,EAEV,IAAK6B,EAAI,EAAGA,EAAIhD,IAAUgD,GACxBqL,EAAOqC,EAAIjG,WAAWzH,IACX,IACT6G,EAAM1I,KAAWkN,EACRA,EAAO,MAChBxE,EAAM1I,KAAW,IAAQkN,IAAS,EAClCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAChBA,EAAO,OAAUA,GAAQ,OAClCxE,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,IAEzBA,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtBqC,EAAIjG,aAAazH,IAC7D6G,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,GAAM,GACzCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAG7BqC,EAAM7G,CACR,CAEI6G,EAAI1Q,OAAS,KACf0Q,EAAM,IAAIkC,IAAK,GAAM3C,OAAOS,GAAK5P,SAGnC,IAAIwQ,EAAU,GACZC,EAAU,GACZ,IAAKvO,EAAI,EAAGA,EAAI,KAAMA,EAAG,CACvB,IAAI4H,EAAI8F,EAAI1N,IAAM,EAClBsO,EAAQtO,GAAK,GAAO4H,EACpB2G,EAAQvO,GAAK,GAAO4H,CACtB,CAEAgI,GAAKtT,KAAKuR,KAAMD,GAEhBC,KAAKZ,OAAOsB,GACZV,KAAKS,QAAUA,EACfT,KAAKW,OAAQ,EACbX,KAAKD,aAAeA,CACtB,CAnZAgC,GAAKxT,UAAU6Q,OAAS,SAAUJ,GAChC,GAAIgB,KAAKM,UACP,MAAM,IAAI7Q,MAtKO,2BAyKnB,IAAI4H,EAAS0H,GAAcC,GAC3BA,EAAU3H,EAAO,GAQjB,IAPA,IACImG,EAEFrL,EAHE9D,EAAWgJ,EAAO,GAEpB/G,EAAQ,EAERnB,EAAS6P,EAAQ7P,QAAU,EAC3ByN,EAASoD,KAAKpD,OAETtM,EAAQnB,GAAQ,CAwBrB,GAvBI6Q,KAAKO,SACPP,KAAKO,QAAS,EACd3D,EAAO,GAAKoD,KAAKmC,MACjBnC,KAAKmC,MACHvF,EAAO,IACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAGFvO,EACF,IAAK8D,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,GAC/CkN,EAAOwB,EAAQpF,WAAWtJ,IACf,IACTsM,EAAOzK,IAAM,IAAMqL,GAAQiB,GAAY,EAANtM,KACxBqL,EAAO,MAChBZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,IAAOiB,GAAY,EAANtM,KAClDyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,MAC1CqL,EAAO,OAAUA,GAAQ,OAClCZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,OAEnDqL,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BwB,EAAQpF,aAAatJ,IACjEsM,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,GAAM,KAAUiB,GAAY,EAANtM,KAC5DyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,WAIvD,IAAKA,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,EAC/CsM,EAAOzK,IAAM,IAAM6M,EAAQ1O,IAAUmO,GAAY,EAANtM,KAI/C6N,KAAKY,cAAgBzO,EACrB6N,KAAKhH,OAAS7G,EAAI6N,KAAKtC,MACnBvL,GAAK,IACP6N,KAAKmC,MAAQvF,EAAO,IACpBoD,KAAKtC,MAAQvL,EAAI,GACjB6N,KAAKa,OACLb,KAAKO,QAAS,GAEdP,KAAKtC,MAAQvL,CAEjB,CAKA,OAJI6N,KAAKhH,MAAQ,aACfgH,KAAKK,QAAWL,KAAKhH,MAAQ,WAAe,EAC5CgH,KAAKhH,MAAQgH,KAAKhH,MAAQ,YAErBgH,IACT,EAEA+B,GAAKxT,UAAUuS,SAAW,WACxB,IAAId,KAAKM,UAAT,CAGAN,KAAKM,WAAY,EACjB,IAAI1D,EAASoD,KAAKpD,OAChBzK,EAAI6N,KAAKY,cACXhE,EAAO,IAAMoD,KAAKmC,MAClBvF,EAAOzK,IAAM,IAAMqM,GAAU,EAAJrM,GACzB6N,KAAKmC,MAAQvF,EAAO,IAChBzK,GAAK,KACF6N,KAAKO,QACRP,KAAKa,OAEPjE,EAAO,GAAKoD,KAAKmC,MACjBvF,EAAO,IACLA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAENA,EAAO,IAAOoD,KAAKK,QAAU,EAAML,KAAKhH,QAAU,GAClD4D,EAAO,IAAMoD,KAAKhH,OAAS,EAC3BgH,KAAKa,MAhCL,CAiCF,EAEAkB,GAAKxT,UAAUsS,KAAO,WACpB,IAME3G,EACAkI,EAPErB,EAAIf,KAAKC,GACXlG,EAAIiG,KAAKE,GACTlG,EAAIgG,KAAKG,GACTa,EAAIhB,KAAKI,GACTiC,EAAIrC,KAAKkC,GAITtF,EAASoD,KAAKpD,OAEhB,IAAK1C,EAAI,GAAIA,EAAI,KAAMA,EACrBkI,EAAIxF,EAAO1C,EAAI,GAAK0C,EAAO1C,EAAI,GAAK0C,EAAO1C,EAAI,IAAM0C,EAAO1C,EAAI,IAChE0C,EAAO1C,GAAMkI,GAAK,EAAMA,IAAM,GAGhC,IAAKlI,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAuBvB6G,GADAqB,GAJArI,GADAqI,GAJApI,GADAoI,GAJApB,GADAoB,GAJAC,GADAD,EAAKrB,GAAK,EAAMA,IAAM,KADjBhH,EAAIC,GAAOD,EAAIiH,GAEPqB,EAAI,WAAazF,EAAO1C,GAAO,IAIlC,EAAMmI,IAAM,KADjBtB,GAFLhH,EAAKA,GAAK,GAAOA,IAAM,IAEPgH,EAAI/G,GAEPgH,EAAI,WAAapE,EAAO1C,EAAI,GAAO,IAItC,EAAM8G,IAAM,KADjBqB,GAFLtB,EAAKA,GAAK,GAAOA,IAAM,IAEPsB,EAAItI,GAEPC,EAAI,WAAa4C,EAAO1C,EAAI,GAAO,IAItC,EAAMF,IAAM,KADjBgH,GAFLqB,EAAKA,GAAK,GAAOA,IAAM,IAEPrB,EAAID,GAEPhH,EAAI,WAAa6C,EAAO1C,EAAI,GAAO,IAItC,EAAMH,IAAM,KADjBC,GAFLgH,EAAKA,GAAK,GAAOA,IAAM,IAEPhH,EAAIqI,GAEPtB,EAAI,WAAanE,EAAO1C,EAAI,GAAO,EAChDF,EAAKA,GAAK,GAAOA,IAAM,EAGzB,KAAOE,EAAI,GAAIA,GAAK,EAuBlB6G,GADAqB,GAJArI,GADAqI,GAJApI,GADAoI,GAJApB,GADAoB,GAJAC,GADAD,EAAKrB,GAAK,EAAMA,IAAM,KADlBhH,EAAIC,EAAIgH,GAECqB,EAAI,WAAazF,EAAO1C,GAAO,IAIlC,EAAMmI,IAAM,KADlBtB,GAFJhH,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAECgH,EAAI,WAAapE,EAAO1C,EAAI,GAAO,IAItC,EAAM8G,IAAM,KADlBqB,GAFJtB,EAAKA,GAAK,GAAOA,IAAM,GAEXhH,GAECC,EAAI,WAAa4C,EAAO1C,EAAI,GAAO,IAItC,EAAMF,IAAM,KADlBgH,GAFJqB,EAAKA,GAAK,GAAOA,IAAM,GAEXtB,GAEChH,EAAI,WAAa6C,EAAO1C,EAAI,GAAO,IAItC,EAAMH,IAAM,KADlBC,GAFJgH,EAAKA,GAAK,GAAOA,IAAM,GAEXqB,GAECtB,EAAI,WAAanE,EAAO1C,EAAI,GAAO,EAChDF,EAAKA,GAAK,GAAOA,IAAM,EAGzB,KAAOE,EAAI,GAAIA,GAAK,EAuBlB6G,GADAqB,GAJArI,GADAqI,GAJApI,GADAoI,GAJApB,GADAoB,GAJAC,GADAD,EAAKrB,GAAK,EAAMA,IAAM,KADjBhH,EAAIC,EAAMD,EAAIiH,EAAMhH,EAAIgH,GAEhBqB,EAAI,WAAazF,EAAO1C,GAAO,IAIlC,EAAMmI,IAAM,KADjBtB,GAFLhH,EAAKA,GAAK,GAAOA,IAAM,GAERgH,EAAI/G,EAAMD,EAAIC,GAEhBgH,EAAI,WAAapE,EAAO1C,EAAI,GAAO,IAItC,EAAM8G,IAAM,KADjBqB,GAFLtB,EAAKA,GAAK,GAAOA,IAAM,GAERsB,EAAItI,EAAMgH,EAAIhH,GAEhBC,EAAI,WAAa4C,EAAO1C,EAAI,GAAO,IAItC,EAAMF,IAAM,KADjBgH,GAFLqB,EAAKA,GAAK,GAAOA,IAAM,GAERrB,EAAID,EAAMsB,EAAItB,GAEhBhH,EAAI,WAAa6C,EAAO1C,EAAI,GAAO,IAItC,EAAMH,IAAM,KADjBC,GAFLgH,EAAKA,GAAK,GAAOA,IAAM,GAERhH,EAAIqI,EAAMrB,EAAIqB,GAEhBtB,EAAI,WAAanE,EAAO1C,EAAI,GAAO,EAChDF,EAAKA,GAAK,GAAOA,IAAM,EAGzB,KAAOE,EAAI,GAAIA,GAAK,EAuBlB6G,GADAqB,GAJArI,GADAqI,GAJApI,GADAoI,GAJApB,GADAoB,GAJAC,GADAD,EAAKrB,GAAK,EAAMA,IAAM,KADlBhH,EAAIC,EAAIgH,GAECqB,EAAI,UAAYzF,EAAO1C,GAAO,IAIjC,EAAMmI,IAAM,KADlBtB,GAFJhH,EAAKA,GAAK,GAAOA,IAAM,GAEXC,GAECgH,EAAI,UAAYpE,EAAO1C,EAAI,GAAO,IAIrC,EAAM8G,IAAM,KADlBqB,GAFJtB,EAAKA,GAAK,GAAOA,IAAM,GAEXhH,GAECC,EAAI,UAAY4C,EAAO1C,EAAI,GAAO,IAIrC,EAAMF,IAAM,KADlBgH,GAFJqB,EAAKA,GAAK,GAAOA,IAAM,GAEXtB,GAEChH,EAAI,UAAY6C,EAAO1C,EAAI,GAAO,IAIrC,EAAMH,IAAM,KADlBC,GAFJgH,EAAKA,GAAK,GAAOA,IAAM,GAEXqB,GAECtB,EAAI,UAAYnE,EAAO1C,EAAI,GAAO,EAC/CF,EAAKA,GAAK,GAAOA,IAAM,EAGzBgG,KAAKC,GAAMD,KAAKC,GAAKc,EAAM,EAC3Bf,KAAKE,GAAMF,KAAKE,GAAKnG,EAAM,EAC3BiG,KAAKG,GAAMH,KAAKG,GAAKnG,EAAM,EAC3BgG,KAAKI,GAAMJ,KAAKI,GAAKY,EAAM,EAC3BhB,KAAKkC,GAAMlC,KAAKkC,GAAKG,EAAM,CAC7B,EAEAN,GAAKxT,UAAU4S,IAAM,WACnBnB,KAAKc,WAEL,IAAIb,EAAKD,KAAKC,GACZC,EAAKF,KAAKE,GACVC,EAAKH,KAAKG,GACVC,EAAKJ,KAAKI,GACV8B,EAAKlC,KAAKkC,GAEZ,OACE3D,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,EAAK,IACvB1B,GAAW0B,IAAO,EAAK,IACvB1B,GAAe,GAAL0B,GACV1B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,EAAK,IACvB3B,GAAW2B,IAAO,EAAK,IACvB3B,GAAe,GAAL2B,GACV3B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,EAAK,IACvB5B,GAAW4B,IAAO,EAAK,IACvB5B,GAAe,GAAL4B,GACV5B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,EAAK,IACvB7B,GAAW6B,IAAO,EAAK,IACvB7B,GAAe,GAAL6B,GACV7B,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,EAAK,IACvB3D,GAAW2D,IAAO,EAAK,IACvB3D,GAAe,GAAL2D,EAEd,EAEAH,GAAKxT,UAAUC,SAAWuT,GAAKxT,UAAU4S,IAEzCY,GAAKxT,UAAUoR,OAAS,WACtBK,KAAKc,WAEL,IAAIb,EAAKD,KAAKC,GACZC,EAAKF,KAAKE,GACVC,EAAKH,KAAKG,GACVC,EAAKJ,KAAKI,GACV8B,EAAKlC,KAAKkC,GAEZ,MAAO,CACJjC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACC8B,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EAEJ,EAEAH,GAAKxT,UAAU0B,MAAQ8R,GAAKxT,UAAUoR,OAEtCoC,GAAKxT,UAAU6S,YAAc,WAC3BpB,KAAKc,WAEL,IAAInC,EAAS,IAAInE,YAAY,IACzB8H,EAAW,IAAIC,SAAS5D,GAM5B,OALA2D,EAASE,UAAU,EAAGxC,KAAKC,IAC3BqC,EAASE,UAAU,EAAGxC,KAAKE,IAC3BoC,EAASE,UAAU,EAAGxC,KAAKG,IAC3BmC,EAASE,UAAU,GAAIxC,KAAKI,IAC5BkC,EAASE,UAAU,GAAIxC,KAAKkC,IACrBvD,CACT,EAqDAsD,GAAS1T,UAAY,IAAIwT,GAEzBE,GAAS1T,UAAUuS,SAAW,WAE5B,GADAiB,GAAKxT,UAAUuS,SAASrS,KAAKuR,MACzBA,KAAKW,MAAO,CACdX,KAAKW,OAAQ,EACb,IAAIW,EAAYtB,KAAK/P,QACrB8R,GAAKtT,KAAKuR,KAAMA,KAAKD,cACrBC,KAAKZ,OAAOY,KAAKS,SACjBT,KAAKZ,OAAOkC,GACZS,GAAKxT,UAAUuS,SAASrS,KAAKuR,KAC/B,CACF,EAGO,MAAMyC,GA7gBM,WACjB,IAAInD,EAASL,GAAmB,OAC5BlH,KACFuH,EAASD,GAASC,IAEpBA,EAAOzO,OAAS,WACd,OAAO,IAAIkR,EACb,EACAzC,EAAOF,OAAS,SAAUJ,GACxB,OAAOM,EAAOzO,SAASuO,OAAOJ,EAChC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQyI,GAAmBzI,EACpC,CACA,OAAO8I,CACT,CA6foBkC,GACPkB,GAxdU,WACrB,IAAIpD,EAASM,GAAuB,OACpCN,EAAOzO,OAAS,SAAUgP,GACxB,OAAO,IAAIoC,GAASpC,EACtB,EACAP,EAAOF,OAAS,SAAUS,EAAKb,GAC7B,OAAOM,EAAOzO,OAAOgP,GAAKT,OAAOJ,EACnC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQoJ,GAAuBpJ,EACxC,CACA,OAAO8I,CACT,CA2cyBoC;;;;;;;;;AC1kBzB,IAAIiB,GAAQ,wBACRjL,GAA2B,iBAAX3I,OAChB4I,GAAOD,GAAS3I,OAAS,CAAA,EACzB4I,GAAKiL,sBACPlL,IAAS,GAEX,IAAIG,IAAcH,IAA0B,iBAATI,KAC/BC,IAAWJ,GAAKkL,sBAA2C,iBAAZ5K,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAC5GJ,GACFJ,GAAOS,OACEP,KACTF,GAAOG,MAET,IAAIuG,IAAgB1G,GAAKmL,2BAAoD,oBAAhBtI,YACzD+D,GAAY,mBAAmB1K,MAAM,IACrC2K,GAAQ,EAAC,WAAa,QAAS,MAAO,KACtCC,GAAQ,CAAC,GAAI,GAAI,EAAG,GACpB5C,GAAI,CACN,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAChG,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,YAEE6C,GAAe,CAAC,MAAO,QAAS,SAAU,eAE1C9B,GAAS,IAETjF,GAAKkL,sBAAyB3T,MAAMR,UACtCQ,MAAMR,QAAU,SAAUkC,GACxB,MAA+C,mBAAxCtC,OAAOC,UAAUC,SAASC,KAAKmC,EACxC,IAGEyN,KAAiB1G,GAAKoL,mCAAsCvI,YAAYqE,SAC1ErE,YAAYqE,OAAS,SAAUjO,GAC7B,MAAsB,iBAARA,GAAoBA,EAAI+N,QAAU/N,EAAI+N,OAAOpE,cAAgBC,WAC7E,GAGF,IAAIyE,GAAqB,SAAUC,EAAY8D,GAC7C,OAAO,SAAUhE,GACf,OAAO,IAAIiE,GAAOD,GAAO,GAAM5D,OAAOJ,GAASE,IACjD,CACF,EAEIsC,GAAe,SAAUwB,GAC3B,IAAI1D,EAASL,GAAmB,MAAO+D,GACnCjL,KACFuH,EAASD,GAASC,EAAQ0D,IAE5B1D,EAAOzO,OAAS,WACd,OAAO,IAAIoS,GAAOD,EACpB,EACA1D,EAAOF,OAAS,SAAUJ,GACxB,OAAOM,EAAOzO,SAASuO,OAAOJ,EAChC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQyI,GAAmBzI,EAAMwM,EAC1C,CACA,OAAO1D,CACT,EAEID,GAAW,SAAUC,EAAQ0D,GAC/B,IAGIzD,EAHAC,EAAShG,QAAQ,UACjBD,EAASC,QAAQ,UAAUD,OAC3B2J,EAAYF,EAAQ,SAAW,SAGjCzD,EADEhG,EAAOG,OAAS/B,GAAKwL,yBACV5J,EAAOG,KAEP,SAAUsF,GACrB,OAAO,IAAIzF,EAAOyF,EACpB,EAkBF,OAhBiB,SAAUA,GACzB,GAAuB,iBAAZA,EACT,OAAOQ,EAAOE,WAAWwD,GAAW9D,OAAOJ,EAAS,QAAQW,OAAO,OAEnE,GAAIX,QACF,MAAM,IAAIvP,MAAMkT,IAKpB,OAJa3D,EAAQzE,cAAgBC,cACjCwE,EAAU,IAAIvE,WAAWuE,IAGzB9P,MAAMR,QAAQsQ,IAAYxE,YAAYqE,OAAOG,IAAYA,EAAQzE,cAAgBhB,EAC5EiG,EAAOE,WAAWwD,GAAW9D,OAAOG,EAAWP,IAAUW,OAAO,OAEhEL,EAAON,EAElB,CAEF,EAEIY,GAAyB,SAAUV,EAAY8D,GACjD,OAAO,SAAUnD,EAAKb,GACpB,OAAO,IAAIoE,GAAWvD,EAAKmD,GAAO,GAAM5D,OAAOJ,GAASE,IAC1D,CACF,EAEIwC,GAAmB,SAAUsB,GAC/B,IAAI1D,EAASM,GAAuB,MAAOoD,GAC3C1D,EAAOzO,OAAS,SAAUgP,GACxB,OAAO,IAAIuD,GAAWvD,EAAKmD,EAC7B,EACA1D,EAAOF,OAAS,SAAUS,EAAKb,GAC7B,OAAOM,EAAOzO,OAAOgP,GAAKT,OAAOJ,EACnC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQoJ,GAAuBpJ,EAAMwM,EAC9C,CACA,OAAO1D,CACT,EAEA,SAAS2D,GAAOD,EAAOjD,GACjBA,GACFnD,GAAO,GACLA,GAAO,IACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACL,EACJoD,KAAKpD,OAASA,IAEdoD,KAAKpD,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAG7DoG,GACFhD,KAAKC,GAAK,WACVD,KAAKE,GAAK,UACVF,KAAKG,GAAK,UACVH,KAAKI,GAAK,WACVJ,KAAKkC,GAAK,WACVlC,KAAKqD,GAAK,WACVrD,KAAKsD,GAAK,WACVtD,KAAKuD,GAAK,aAGVvD,KAAKC,GAAK,WACVD,KAAKE,GAAK,WACVF,KAAKG,GAAK,WACVH,KAAKI,GAAK,WACVJ,KAAKkC,GAAK,WACVlC,KAAKqD,GAAK,WACVrD,KAAKsD,GAAK,UACVtD,KAAKuD,GAAK,YAGZvD,KAAKmC,MAAQnC,KAAKtC,MAAQsC,KAAKhH,MAAQgH,KAAKK,OAAS,EACrDL,KAAKM,UAAYN,KAAKO,QAAS,EAC/BP,KAAKQ,OAAQ,EACbR,KAAKgD,MAAQA,CACf,CAiYA,SAASI,GAAWvD,EAAKmD,EAAOjD,GAC9B,IAAI5N,EACFqE,SAAcqJ,EAChB,GAAa,WAATrJ,EAAmB,CACrB,IAGEgH,EAHExE,EAAQ,GACV7J,EAAS0Q,EAAI1Q,OACbmB,EAAQ,EAEV,IAAK6B,EAAI,EAAGA,EAAIhD,IAAUgD,GACxBqL,EAAOqC,EAAIjG,WAAWzH,IACX,IACT6G,EAAM1I,KAAWkN,EACRA,EAAO,MAChBxE,EAAM1I,KAAW,IAAQkN,IAAS,EAClCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAChBA,EAAO,OAAUA,GAAQ,OAClCxE,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,IAEzBA,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtBqC,EAAIjG,aAAazH,IAC7D6G,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,GAAM,GACzCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAG7BqC,EAAM7G,CACR,KAAO,CACL,GAAa,WAATxC,EAWF,MAAM,IAAI/G,MAAMkT,IAVhB,GAAY,OAAR9C,EACF,MAAM,IAAIpQ,MAAMkT,IACX,GAAItE,IAAgBwB,EAAItF,cAAgBC,YAC7CqF,EAAM,IAAIpF,WAAWoF,QAChB,KAAK3Q,MAAMR,QAAQmR,IACnBxB,IAAiB7D,YAAYqE,OAAOgB,IACvC,MAAM,IAAIpQ,MAAMkT,GAMxB,CAEI9C,EAAI1Q,OAAS,KACf0Q,EAAM,IAAIoD,GAAOD,GAAO,GAAM5D,OAAOS,GAAK5P,SAG5C,IAAIwQ,EAAU,GACZC,EAAU,GACZ,IAAKvO,EAAI,EAAGA,EAAI,KAAMA,EAAG,CACvB,IAAI4H,EAAI8F,EAAI1N,IAAM,EAClBsO,EAAQtO,GAAK,GAAO4H,EACpB2G,EAAQvO,GAAK,GAAO4H,CACtB,CAEAkJ,GAAOxU,KAAKuR,KAAMgD,EAAOjD,GAEzBC,KAAKZ,OAAOsB,GACZV,KAAKS,QAAUA,EACfT,KAAKW,OAAQ,EACbX,KAAKD,aAAeA,CACtB,CA7bAkD,GAAO1U,UAAU6Q,OAAS,SAAUJ,GAClC,IAAIgB,KAAKM,UAAT,CAGA,IAAIhG,EACF9D,SAAcwI,EAChB,GAAa,WAATxI,EAAmB,CACrB,GAAa,WAATA,EAWF,MAAM,IAAI/G,MAAMkT,IAVhB,GAAgB,OAAZ3D,EACF,MAAM,IAAIvP,MAAMkT,IACX,GAAItE,IAAgBW,EAAQzE,cAAgBC,YACjDwE,EAAU,IAAIvE,WAAWuE,QACpB,KAAK9P,MAAMR,QAAQsQ,IACnBX,IAAiB7D,YAAYqE,OAAOG,IACvC,MAAM,IAAIvP,MAAMkT,IAMtBrI,GAAY,CACd,CAMA,IALA,IAAIkD,EAEFrL,EADA7B,EAAQ,EAERnB,EAAS6P,EAAQ7P,OACjByN,EAASoD,KAAKpD,OACTtM,EAAQnB,GAAQ,CAwBrB,GAvBI6Q,KAAKO,SACPP,KAAKO,QAAS,EACd3D,EAAO,GAAKoD,KAAKmC,MACjBnC,KAAKmC,MACHvF,EAAO,IACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAGFtC,EACF,IAAKnI,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,EAC/CsM,EAAOzK,IAAM,IAAM6M,EAAQ1O,IAAUmO,GAAY,EAANtM,UAG7C,IAAKA,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,KAAM7B,GAC/CkN,EAAOwB,EAAQpF,WAAWtJ,IACf,IACTsM,EAAOzK,IAAM,IAAMqL,GAAQiB,GAAY,EAANtM,KACxBqL,EAAO,MAChBZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,IAAOiB,GAAY,EAANtM,KAClDyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,MAC1CqL,EAAO,OAAUA,GAAQ,OAClCZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,OAEnDqL,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BwB,EAAQpF,aAAatJ,IACjEsM,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,GAAM,KAAUiB,GAAY,EAANtM,KAC5DyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,MAKzD6N,KAAKY,cAAgBzO,EACrB6N,KAAKhH,OAAS7G,EAAI6N,KAAKtC,MACnBvL,GAAK,IACP6N,KAAKmC,MAAQvF,EAAO,IACpBoD,KAAKtC,MAAQvL,EAAI,GACjB6N,KAAKa,OACLb,KAAKO,QAAS,GAEdP,KAAKtC,MAAQvL,CAEjB,CAKA,OAJI6N,KAAKhH,MAAQ,aACfgH,KAAKK,QAAWL,KAAKhH,MAAQ,WAAe,EAC5CgH,KAAKhH,MAAQgH,KAAKhH,MAAQ,YAErBgH,IAzFP,CA0FF,EAEAiD,GAAO1U,UAAUuS,SAAW,WAC1B,IAAId,KAAKM,UAAT,CAGAN,KAAKM,WAAY,EACjB,IAAI1D,EAASoD,KAAKpD,OAChBzK,EAAI6N,KAAKY,cACXhE,EAAO,IAAMoD,KAAKmC,MAClBvF,EAAOzK,IAAM,IAAMqM,GAAU,EAAJrM,GACzB6N,KAAKmC,MAAQvF,EAAO,IAChBzK,GAAK,KACF6N,KAAKO,QACRP,KAAKa,OAEPjE,EAAO,GAAKoD,KAAKmC,MACjBvF,EAAO,IACLA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAENA,EAAO,IAAOoD,KAAKK,QAAU,EAAML,KAAKhH,QAAU,GAClD4D,EAAO,IAAMoD,KAAKhH,OAAS,EAC3BgH,KAAKa,MAhCL,CAiCF,EAEAoC,GAAO1U,UAAUsS,KAAO,WACtB,IASE3G,EACAsJ,EACAC,EACAC,EACAC,EAGAC,EACA1C,EACA2C,EACA5C,EAnBEF,EAAIf,KAAKC,GACXlG,EAAIiG,KAAKE,GACTlG,EAAIgG,KAAKG,GACTa,EAAIhB,KAAKI,GACTiC,EAAIrC,KAAKkC,GACT4B,EAAI9D,KAAKqD,GACTU,EAAI/D,KAAKsD,GACTU,EAAIhE,KAAKuD,GACT3G,EAASoD,KAAKpD,OAahB,IAAK1C,EAAI,GAAIA,EAAI,KAAMA,EAGrBsJ,IADAG,EAAK/G,EAAO1C,EAAI,OACF,EAAMyJ,GAAM,KAASA,IAAO,GAAOA,GAAM,IAAQA,IAAO,EAEtEF,IADAE,EAAK/G,EAAO1C,EAAI,MACF,GAAOyJ,GAAM,KAASA,IAAO,GAAOA,GAAM,IAAQA,IAAO,GACvE/G,EAAO1C,GAAM0C,EAAO1C,EAAI,IAAMsJ,EAAK5G,EAAO1C,EAAI,GAAKuJ,EAAO,EAI5D,IADAxC,EAAKlH,EAAIC,EACJE,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACnB8F,KAAKQ,OACHR,KAAKgD,OACPY,EAAK,OAELI,GADAL,EAAK/G,EAAO,GAAK,YACP,UAAc,EACxBoE,EAAK2C,EAAK,SAAa,IAEvBC,EAAK,UAELI,GADAL,EAAK/G,EAAO,GAAK,WACP,WAAe,EACzBoE,EAAK2C,EAAK,UAAc,GAE1B3D,KAAKQ,OAAQ,IAEbgD,GAAOzC,IAAM,EAAMA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,IAG9E2C,GADAE,EAAK7C,EAAIhH,GACGgH,EAAI/G,EAAKiH,EAIrB+C,EAAKhD,GAFL2C,EAAKK,GAJLP,GAAOpB,IAAM,EAAMA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAGxEA,EAAIyB,GAAOzB,EAAI0B,GACFlI,GAAE3B,GAAK0C,EAAO1C,IAEjB,EAChB8G,EAAK2C,GAFAH,EAAKE,GAEO,GAEnBF,GAAOxC,IAAM,EAAMA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,IAG9E0C,GADAxC,EAAKF,EAAID,GACGC,EAAIjH,EAAK6J,EAIrBG,EAAK/J,GAFL2J,EAAKI,GAJLN,GAAOO,IAAM,EAAMA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAGxEA,EAAI3B,GAAO2B,EAAIF,GACFjI,GAAE3B,EAAI,GAAK0C,EAAO1C,EAAI,IAEzB,EAEhBsJ,IADAxJ,EAAK2J,GAFAH,EAAKE,GAEO,KACJ,EAAM1J,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,IAG9E0J,GADAG,EAAK7J,EAAIgH,GACGhH,EAAI+G,EAAKG,EAIrB4C,EAAK/J,GAFL4J,EAAKG,GAJLL,GAAOM,IAAM,EAAMA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAGxEA,EAAIC,GAAOD,EAAI1B,GACFxG,GAAE3B,EAAI,GAAK0C,EAAO1C,EAAI,IAEzB,EAEhBsJ,IADAzJ,EAAK4J,GAFAH,EAAKE,GAEO,KACJ,EAAM3J,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,IAG9E2J,GADAzC,EAAKlH,EAAIC,GACGD,EAAIiH,EAAK6C,EAIrBxB,EAAKtB,GAFL4C,EAAKtB,GAJLoB,GAAOK,IAAM,EAAMA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAASA,IAAM,GAAOA,GAAK,KAGxEA,EAAIC,GAAOD,EAAIE,GACFnI,GAAE3B,EAAI,GAAK0C,EAAO1C,EAAI,IAEzB,EAChB6G,EAAK4C,GAFAH,EAAKE,GAEO,EACjB1D,KAAKiE,qBAAsB,EAG7BjE,KAAKC,GAAMD,KAAKC,GAAKc,EAAM,EAC3Bf,KAAKE,GAAMF,KAAKE,GAAKnG,EAAM,EAC3BiG,KAAKG,GAAMH,KAAKG,GAAKnG,EAAM,EAC3BgG,KAAKI,GAAMJ,KAAKI,GAAKY,EAAM,EAC3BhB,KAAKkC,GAAMlC,KAAKkC,GAAKG,EAAM,EAC3BrC,KAAKqD,GAAMrD,KAAKqD,GAAKS,EAAM,EAC3B9D,KAAKsD,GAAMtD,KAAKsD,GAAKS,EAAM,EAC3B/D,KAAKuD,GAAMvD,KAAKuD,GAAKS,EAAM,CAC7B,EAEAf,GAAO1U,UAAU4S,IAAM,WACrBnB,KAAKc,WAEL,IAAIb,EAAKD,KAAKC,GACZC,EAAKF,KAAKE,GACVC,EAAKH,KAAKG,GACVC,EAAKJ,KAAKI,GACV8B,EAAKlC,KAAKkC,GACVmB,EAAKrD,KAAKqD,GACVC,EAAKtD,KAAKsD,GACVC,EAAKvD,KAAKuD,GAERpC,EACF5C,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,GAAM,IACxB1B,GAAW0B,IAAO,EAAK,IACvB1B,GAAW0B,IAAO,EAAK,IACvB1B,GAAe,GAAL0B,GACV1B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,GAAM,IACxB3B,GAAW2B,IAAO,EAAK,IACvB3B,GAAW2B,IAAO,EAAK,IACvB3B,GAAe,GAAL2B,GACV3B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,GAAM,IACxB5B,GAAW4B,IAAO,EAAK,IACvB5B,GAAW4B,IAAO,EAAK,IACvB5B,GAAe,GAAL4B,GACV5B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,GAAM,IACxB7B,GAAW6B,IAAO,EAAK,IACvB7B,GAAW6B,IAAO,EAAK,IACvB7B,GAAe,GAAL6B,GACV7B,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,GAAM,IACxB3D,GAAW2D,IAAO,EAAK,IACvB3D,GAAW2D,IAAO,EAAK,IACvB3D,GAAe,GAAL2D,GACV3D,GAAW8E,IAAO,GAAM,IACxB9E,GAAW8E,IAAO,GAAM,IACxB9E,GAAW8E,IAAO,GAAM,IACxB9E,GAAW8E,IAAO,GAAM,IACxB9E,GAAW8E,IAAO,GAAM,IACxB9E,GAAW8E,IAAO,EAAK,IACvB9E,GAAW8E,IAAO,EAAK,IACvB9E,GAAe,GAAL8E,GACV9E,GAAW+E,IAAO,GAAM,IACxB/E,GAAW+E,IAAO,GAAM,IACxB/E,GAAW+E,IAAO,GAAM,IACxB/E,GAAW+E,IAAO,GAAM,IACxB/E,GAAW+E,IAAO,GAAM,IACxB/E,GAAW+E,IAAO,EAAK,IACvB/E,GAAW+E,IAAO,EAAK,IACvB/E,GAAe,GAAL+E,GAYZ,OAXKtD,KAAKgD,QACR7B,GACE5C,GAAWgF,IAAO,GAAM,IACxBhF,GAAWgF,IAAO,GAAM,IACxBhF,GAAWgF,IAAO,GAAM,IACxBhF,GAAWgF,IAAO,GAAM,IACxBhF,GAAWgF,IAAO,GAAM,IACxBhF,GAAWgF,IAAO,EAAK,IACvBhF,GAAWgF,IAAO,EAAK,IACvBhF,GAAe,GAALgF,IAEPpC,CACT,EAEA8B,GAAO1U,UAAUC,SAAWyU,GAAO1U,UAAU4S,IAE7C8B,GAAO1U,UAAUoR,OAAS,WACxBK,KAAKc,WAEL,IAAIb,EAAKD,KAAKC,GACZC,EAAKF,KAAKE,GACVC,EAAKH,KAAKG,GACVC,EAAKJ,KAAKI,GACV8B,EAAKlC,KAAKkC,GACVmB,EAAKrD,KAAKqD,GACVC,EAAKtD,KAAKsD,GACVC,EAAKvD,KAAKuD,GAERW,EAAM,CACPjE,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACC8B,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCmB,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,EACCC,IAAO,GAAM,IACbA,IAAO,GAAM,IACbA,IAAO,EAAK,IACR,IAALA,GAKF,OAHKtD,KAAKgD,OACRkB,EAAI3T,KAAMgT,IAAO,GAAM,IAAOA,IAAO,GAAM,IAAOA,IAAO,EAAK,IAAW,IAALA,GAE/DW,CACT,EAEAjB,GAAO1U,UAAU0B,MAAQgT,GAAO1U,UAAUoR,OAE1CsD,GAAO1U,UAAU6S,YAAc,WAC7BpB,KAAKc,WAEL,IAAInC,EAAS,IAAInE,YAAYwF,KAAKgD,MAAQ,GAAK,IAC3CV,EAAW,IAAIC,SAAS5D,GAW5B,OAVA2D,EAASE,UAAU,EAAGxC,KAAKC,IAC3BqC,EAASE,UAAU,EAAGxC,KAAKE,IAC3BoC,EAASE,UAAU,EAAGxC,KAAKG,IAC3BmC,EAASE,UAAU,GAAIxC,KAAKI,IAC5BkC,EAASE,UAAU,GAAIxC,KAAKkC,IAC5BI,EAASE,UAAU,GAAIxC,KAAKqD,IAC5Bf,EAASE,UAAU,GAAIxC,KAAKsD,IACvBtD,KAAKgD,OACRV,EAASE,UAAU,GAAIxC,KAAKuD,IAEvB5E,CACT,EAkEAyE,GAAW7U,UAAY,IAAI0U,GAE3BG,GAAW7U,UAAUuS,SAAW,WAE9B,GADAmC,GAAO1U,UAAUuS,SAASrS,KAAKuR,MAC3BA,KAAKW,MAAO,CACdX,KAAKW,OAAQ,EACb,IAAIW,EAAYtB,KAAK/P,QACrBgT,GAAOxU,KAAKuR,KAAMA,KAAKgD,MAAOhD,KAAKD,cACnCC,KAAKZ,OAAOY,KAAKS,SACjBT,KAAKZ,OAAOkC,GACZ2B,GAAO1U,UAAUuS,SAASrS,KAAKuR,KACjC,CACF,EAGO,MAAMmE,GAAS3C,KACT4C,GAAS5C,IAAa,GACtB6C,GAAc3C,KACd4C,GAAc5C,IAAiB;;;;;;;;;AC5nB5C,IAAIzD,GAAc,wBAEdvG,GAA2B,iBAAX3I,OAChB4I,GAAOD,GAAS3I,OAAS,CAAA,EACzB4I,GAAK4M,sBACP7M,IAAS,GAEX,IAAIG,IAAcH,IAA0B,iBAATI,MACpBH,GAAK6M,sBAA2C,iBAAZvM,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAE9GR,GAAOS,OACEP,KACTF,GAAOG,MAET,IAAIuG,IAAgB1G,GAAK8M,2BAAoD,oBAAhBjK,YACzD+D,GAAY,mBAAmB1K,MAAM,IACrC2K,GAAQ,EAAC,WAAa,QAAS,MAAO,KACtCC,GAAQ,CAAC,GAAI,GAAI,EAAG,GACpB5C,GAAI,CACN,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAChG,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAChG,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAChG,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAChG,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAGtE6C,GAAe,CAAC,MAAO,QAAS,SAAU,eAE1C9B,GAAS,GAETlO,GAAUQ,MAAMR,SAChBiJ,GAAK6M,sBAAyB9V,KAChCA,GAAU,SAAUkC,GAClB,MAA+C,mBAAxCtC,OAAOC,UAAUC,SAASC,KAAKmC,EACxC,GAGF,IAAIiO,GAASrE,YAAYqE,QACrBR,KAAiB1G,GAAK+M,mCAAsC7F,KAC9DA,GAAS,SAAUjO,GACjB,MAAsB,iBAARA,GAAoBA,EAAI+N,QAAU/N,EAAI+N,OAAOpE,cAAgBC,WAC7E,GAIF,IAAIuE,GAAgB,SAAUC,GAC5B,IAAIxI,SAAcwI,EAClB,GAAa,WAATxI,EACF,MAAO,CAACwI,GAAS,GAEnB,GAAa,WAATxI,GAAiC,OAAZwI,EACvB,MAAM,IAAIvP,MAAMwO,IAElB,GAAII,IAAgBW,EAAQzE,cAAgBC,YAC1C,MAAO,CAAC,IAAIC,WAAWuE,IAAU,GAEnC,IAAKtQ,GAAQsQ,KAAaH,GAAOG,GAC/B,MAAM,IAAIvP,MAAMwO,IAElB,MAAO,CAACe,GAAS,EACnB,EAEIC,GAAqB,SAAUC,EAAYyF,GAC7C,OAAO,SAAU3F,GACf,OAAO,IAAI4F,GAAOD,GAAM,GAAMvF,OAAOJ,GAASE,IAChD,CACF,EAEIsC,GAAe,SAAUmD,GAC3B,IAAIrF,EAASL,GAAmB,MAAO0F,GACvCrF,EAAOzO,OAAS,WACd,OAAO,IAAI+T,GAAOD,EACpB,EACArF,EAAOF,OAAS,SAAUJ,GACxB,OAAOM,EAAOzO,SAASuO,OAAOJ,EAChC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQyI,GAAmBzI,EAAMmO,EAC1C,CACA,OAAOrF,CACT,EAEIM,GAAyB,SAAUV,EAAYyF,GACjD,OAAO,SAAU9E,EAAKb,GACpB,OAAO,IAAI6F,GAAWhF,EAAK8E,GAAM,GAAMvF,OAAOJ,GAASE,IACzD,CACF,EAEIwC,GAAmB,SAAUiD,GAC/B,IAAIrF,EAASM,GAAuB,MAAO+E,GAC3CrF,EAAOzO,OAAS,SAAUgP,GACxB,OAAO,IAAIgF,GAAWhF,EAAK8E,EAC7B,EACArF,EAAOF,OAAS,SAAUS,EAAKb,GAC7B,OAAOM,EAAOzO,OAAOgP,GAAKT,OAAOJ,EACnC,EACA,IAAK,IAAI7M,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQoJ,GAAuBpJ,EAAMmO,EAC9C,CACA,OAAOrF,CACT,EAEA,SAASsF,GAAOD,EAAM5E,GAChBA,GACFnD,GAAO,GACLA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,GACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACPA,GAAO,IACL,EACJoD,KAAKpD,OAASA,IAEdoD,KAAKpD,OAAS,CACZ,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAI3F,KAAR+H,GACF3E,KAAK8E,IAAM,WACX9E,KAAK+E,IAAM,WACX/E,KAAKgF,IAAM,WACXhF,KAAKiF,IAAM,UACXjF,KAAKkF,IAAM,WACXlF,KAAKmF,IAAM,UACXnF,KAAKoF,IAAM,UACXpF,KAAKqF,IAAM,WACXrF,KAAKsF,IAAM,WACXtF,KAAKuF,IAAM,WACXvF,KAAKwF,IAAM,WACXxF,KAAKyF,IAAM,WACXzF,KAAK0F,IAAM,WACX1F,KAAK2F,IAAM,WACX3F,KAAK4F,IAAM,WACX5F,KAAK6F,IAAM,YACM,KAARlB,GACT3E,KAAK8E,IAAM,UACX9E,KAAK+E,IAAM,WACX/E,KAAKgF,IAAM,WACXhF,KAAKiF,IAAM,WACXjF,KAAKkF,IAAM,UACXlF,KAAKmF,IAAM,WACXnF,KAAKoF,IAAM,WACXpF,KAAKqF,IAAM,WACXrF,KAAKsF,IAAM,WACXtF,KAAKuF,IAAM,WACXvF,KAAKwF,IAAM,WACXxF,KAAKyF,IAAM,WACXzF,KAAK0F,IAAM,UACX1F,KAAK2F,IAAM,UACX3F,KAAK4F,IAAM,UACX5F,KAAK6F,IAAM,YACM,KAARlB,GACT3E,KAAK8E,IAAM,WACX9E,KAAK+E,IAAM,UACX/E,KAAKgF,IAAM,WACXhF,KAAKiF,IAAM,WACXjF,KAAKkF,IAAM,UACXlF,KAAKmF,IAAM,UACXnF,KAAKoF,IAAM,WACXpF,KAAKqF,IAAM,WACXrF,KAAKsF,IAAM,UACXtF,KAAKuF,IAAM,WACXvF,KAAKwF,IAAM,WACXxF,KAAKyF,IAAM,SACXzF,KAAK0F,IAAM,WACX1F,KAAK2F,IAAM,WACX3F,KAAK4F,IAAM,UACX5F,KAAK6F,IAAM,aAGX7F,KAAK8E,IAAM,WACX9E,KAAK+E,IAAM,WACX/E,KAAKgF,IAAM,WACXhF,KAAKiF,IAAM,WACXjF,KAAKkF,IAAM,WACXlF,KAAKmF,IAAM,WACXnF,KAAKoF,IAAM,WACXpF,KAAKqF,IAAM,WACXrF,KAAKsF,IAAM,WACXtF,KAAKuF,IAAM,WACXvF,KAAKwF,IAAM,WACXxF,KAAKyF,IAAM,UACXzF,KAAK0F,IAAM,UACX1F,KAAK2F,IAAM,WACX3F,KAAK4F,IAAM,WACX5F,KAAK6F,IAAM,WAEb7F,KAAK2E,KAAOA,EAEZ3E,KAAKmC,MAAQnC,KAAKtC,MAAQsC,KAAKhH,MAAQgH,KAAKK,OAAS,EACrDL,KAAKM,UAAYN,KAAKO,QAAS,CACjC,CA+0BA,SAASsE,GAAWhF,EAAK8E,EAAM5E,GAC7B,IACE1I,EAAS0H,GAAcc,GAEzB,GADAA,EAAMxI,EAAO,GACTA,EAAO,GAAI,CAKb,IAJA,IAGEmG,EAHExE,EAAQ,GACV7J,EAAS0Q,EAAI1Q,OACbmB,EAAQ,EAED6B,EAAI,EAAGA,EAAIhD,IAAUgD,GAC5BqL,EAAOqC,EAAIjG,WAAWzH,IACX,IACT6G,EAAM1I,KAAWkN,EACRA,EAAO,MAChBxE,EAAM1I,KAAW,IAAQkN,IAAS,EAClCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAChBA,EAAO,OAAUA,GAAQ,OAClCxE,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,IAEzBA,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtBqC,EAAIjG,aAAazH,IAC7D6G,EAAM1I,KAAW,IAAQkN,IAAS,GAClCxE,EAAM1I,KAAW,IAASkN,IAAS,GAAM,GACzCxE,EAAM1I,KAAW,IAASkN,IAAS,EAAK,GACxCxE,EAAM1I,KAAW,IAAe,GAAPkN,GAG7BqC,EAAM7G,CACR,CAEI6G,EAAI1Q,OAAS,MACf0Q,EAAM,IAAI+E,GAAOD,GAAM,GAAMvF,OAAOS,GAAK5P,SAG3C,IAAIwQ,EAAU,GACZC,EAAU,GACZ,IAASvO,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAC5B,IAAI4H,EAAI8F,EAAI1N,IAAM,EAClBsO,EAAQtO,GAAK,GAAO4H,EACpB2G,EAAQvO,GAAK,GAAO4H,CACtB,CAEA6K,GAAOnW,KAAKuR,KAAM2E,EAAM5E,GAExBC,KAAKZ,OAAOsB,GACZV,KAAKS,QAAUA,EACfT,KAAKW,OAAQ,EACbX,KAAKD,aAAeA,CACtB,CA93BA6E,GAAOrW,UAAU6Q,OAAS,SAAUJ,GAClC,GAAIgB,KAAKM,UACP,MAAM,IAAI7Q,MA7OO,2BA+OnB,IAAI4H,EAAS0H,GAAcC,GAC3BA,EAAU3H,EAAO,GAQjB,IAPA,IACImG,EAEFrL,EAHE9D,EAAWgJ,EAAO,GAEpB/G,EAAQ,EAERnB,EAAS6P,EAAQ7P,OACjByN,EAASoD,KAAKpD,OAETtM,EAAQnB,GAAQ,CAwCrB,GAvCI6Q,KAAKO,SACPP,KAAKO,QAAS,EACd3D,EAAO,GAAKoD,KAAKmC,MACjBnC,KAAKmC,MACHvF,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAGFvO,EACF,IAAK8D,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,MAAO7B,GAChDkN,EAAOwB,EAAQpF,WAAWtJ,IACf,IACTsM,EAAOzK,IAAM,IAAMqL,GAAQiB,GAAY,EAANtM,KACxBqL,EAAO,MAChBZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,IAAOiB,GAAY,EAANtM,KAClDyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,MAC1CqL,EAAO,OAAUA,GAAQ,OAClCZ,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,OAEnDqL,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BwB,EAAQpF,aAAatJ,IACjEsM,EAAOzK,IAAM,KAAO,IAAQqL,IAAS,KAAQiB,GAAY,EAANtM,KACnDyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,GAAM,KAAUiB,GAAY,EAANtM,KAC5DyK,EAAOzK,IAAM,KAAO,IAASqL,IAAS,EAAK,KAAUiB,GAAY,EAANtM,KAC3DyK,EAAOzK,IAAM,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,WAIvD,IAAKA,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI,MAAO7B,EAChDsM,EAAOzK,IAAM,IAAM6M,EAAQ1O,IAAUmO,GAAY,EAANtM,KAI/C6N,KAAKY,cAAgBzO,EACrB6N,KAAKhH,OAAS7G,EAAI6N,KAAKtC,MACnBvL,GAAK,KACP6N,KAAKmC,MAAQvF,EAAO,IACpBoD,KAAKtC,MAAQvL,EAAI,IACjB6N,KAAKa,OACLb,KAAKO,QAAS,GAEdP,KAAKtC,MAAQvL,CAEjB,CAKA,OAJI6N,KAAKhH,MAAQ,aACfgH,KAAKK,QAAWL,KAAKhH,MAAQ,WAAe,EAC5CgH,KAAKhH,MAAQgH,KAAKhH,MAAQ,YAErBgH,IACT,EAEA4E,GAAOrW,UAAUuS,SAAW,WAC1B,IAAId,KAAKM,UAAT,CAGAN,KAAKM,WAAY,EACjB,IAAI1D,EAASoD,KAAKpD,OAChBzK,EAAI6N,KAAKY,cACXhE,EAAO,IAAMoD,KAAKmC,MAClBvF,EAAOzK,IAAM,IAAMqM,GAAU,EAAJrM,GACzB6N,KAAKmC,MAAQvF,EAAO,IAChBzK,GAAK,MACF6N,KAAKO,QACRP,KAAKa,OAEPjE,EAAO,GAAKoD,KAAKmC,MACjBvF,EAAO,GACLA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACPA,EAAO,IACL,GAENA,EAAO,IAAOoD,KAAKK,QAAU,EAAML,KAAKhH,QAAU,GAClD4D,EAAO,IAAMoD,KAAKhH,OAAS,EAC3BgH,KAAKa,MAhDL,CAiDF,EAEA+D,GAAOrW,UAAUsS,KAAO,WACtB,IAiBE3G,EACA4L,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAzCEvC,EAAM9E,KAAK8E,IACbC,EAAM/E,KAAK+E,IACXC,EAAMhF,KAAKgF,IACXC,EAAMjF,KAAKiF,IACXC,EAAMlF,KAAKkF,IACXC,EAAMnF,KAAKmF,IACXC,EAAMpF,KAAKoF,IACXC,EAAMrF,KAAKqF,IACXC,EAAMtF,KAAKsF,IACXC,EAAMvF,KAAKuF,IACXC,EAAMxF,KAAKwF,IACXC,EAAMzF,KAAKyF,IACXC,EAAM1F,KAAK0F,IACXC,EAAM3F,KAAK2F,IACXC,EAAM5F,KAAK4F,IACXC,EAAM7F,KAAK6F,IACXjJ,EAASoD,KAAKpD,OA2BhB,IAAK1C,EAAI,GAAIA,EAAI,IAAKA,GAAK,EAGzB4L,IAFAkB,EAAMpK,EAAO1C,EAAI,OAED,GADhB+M,EAAMrK,EAAO1C,EAAI,MACY,KAAS8M,IAAQ,EAAMC,GAAO,IAAQD,IAAQ,EAC3EjB,GAAQkB,IAAQ,EAAMD,GAAO,KAASC,IAAQ,EAAMD,GAAO,KAASC,IAAQ,EAAMD,GAAO,IAIzFhB,IAFAgB,EAAMpK,EAAO1C,EAAI,MAED,IADhB+M,EAAMrK,EAAO1C,EAAI,KACa,KAAS+M,IAAQ,GAAOD,GAAO,GAAOA,IAAQ,EAC5Ef,GAAQgB,IAAQ,GAAOD,GAAO,KAASA,IAAQ,GAAOC,GAAO,IAAQA,IAAQ,EAAMD,GAAO,IAE1FA,EAAMpK,EAAO1C,EAAI,IACjB+M,EAAMrK,EAAO1C,EAAI,IAOjBmM,IANAa,EAAMtK,EAAO1C,EAAI,OAMH,KAAO8M,IAAQ,KAAOlB,IAAQ,KAAOE,IAAQ,MAD3DI,GAAY,MAANc,IAAuB,MAANF,IAAuB,MAANlB,IAAuB,MAANE,KADzDG,IAHAgB,EAAMvK,EAAO1C,EAAI,OAGH,KAAO+M,IAAQ,KAAOlB,IAAQ,KAAOE,IAAQ,MAD3DC,GAAY,MAANiB,IAAuB,MAANF,IAAuB,MAANlB,IAAuB,MAANE,MACgB,OACQ,OACR,IAEzErJ,EAAO1C,GAAMmM,GAAM,GAAY,MAALD,EAC1BxJ,EAAO1C,EAAI,GAAMiM,GAAM,GAAY,MAALD,EAGhC,IAAIoB,EAAKxC,EACPyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,EAAKxC,EACLyC,GAAKxC,EACLyC,GAAKxC,EACLyC,GAAKxC,EACLyC,GAAKxC,EAGP,IAFAe,EAAMY,EAAKE,EACXb,EAAMY,EAAKE,EACNzN,EAAI,EAAGA,EAAI,IAAKA,GAAK,EACxB4L,GAAQwB,IAAO,GAAOC,GAAM,IAAQA,IAAO,EAAMD,GAAM,KAASC,IAAO,EAAMD,GAAM,IACnFvB,GAAQwB,IAAO,GAAOD,GAAM,IAAQA,IAAO,EAAMC,GAAM,KAASD,IAAO,EAAMC,GAAM,IAEnFvB,GAAQ8B,IAAO,GAAOC,GAAM,KAASD,IAAO,GAAOC,GAAM,KAASA,IAAO,EAAMD,GAAM,IACrF7B,GAAQ8B,IAAO,GAAOD,GAAM,KAASC,IAAO,GAAOD,GAAM,KAASA,IAAO,EAAMC,GAAM,IAIrFjB,GAFAR,EAAMgB,EAAKE,GAEGF,EAAKI,EAAMd,EACzBG,GAFAR,EAAMgB,EAAKE,GAEGF,EAAKI,EAAMd,EAEzBO,EAAOU,EAAKE,GAAQF,EAAKI,GACzBb,EAAOU,EAAKE,GAAQF,EAAKI,GAEzBnB,EAAMpK,EAAO1C,GACb+M,EAAMrK,EAAO1C,EAAI,GASjB8M,GAFAX,IANAa,EAAMrL,GAAE3B,MAMM,KAAO8M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAOoC,KAAO,MADzEhC,GAAY,MAANc,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAALoC,MAD1EjC,IAHAgB,EAAMtL,GAAE3B,EAAI,MAGE,KAAO+M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAOoC,KAAO,MADzEnC,GAAY,MAANiB,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAALoC,OACa,OACU,OACV,MAE1E,GAAY,MAALjC,EACpBa,EAAOd,GAAM,GAAY,MAALD,EAOpBgB,GAFAb,GAAMS,IAAS,KAAOhB,IAAQ,MAD9BM,GAAa,MAAPU,IAAwB,MAANhB,KADxBK,GAAMY,IAAS,KAAOhB,IAAQ,MAD9BG,GAAa,MAAPa,IAAwB,MAANhB,MACoB,OACI,OACJ,MAE/B,GAAY,MAALK,EACpBe,EAAOhB,GAAM,GAAY,MAALD,EAOpBkC,IAFA/B,GAAMuB,IAAO,KAAOZ,IAAQ,MAD5BZ,GAAW,MAALwB,IAAsB,MAANZ,KADtBb,GAAM0B,IAAO,KAAOZ,IAAQ,MAD5Bf,GAAW,MAAL2B,IAAsB,MAANZ,MACoB,OACI,OACJ,MAE9B,GAAY,MAALb,EACnBiC,GAAMlC,GAAM,GAAY,MAALD,EAUnBJ,IAHA8B,GAFAvB,GAAMa,IAAQ,KAAOF,IAAQ,MAD7BZ,GAAY,MAANc,IAAuB,MAANF,KADvBb,GAAMgB,IAAQ,KAAOF,IAAQ,MAD7Bf,GAAY,MAANiB,IAAuB,MAANF,MACoB,OACI,OACJ,MAE/B,GAAY,MAALb,KAGJ,IAFfyB,EAAM1B,GAAM,GAAY,MAALD,IAES,IAAQ2B,IAAO,EAAMD,GAAM,KAASC,IAAO,EAAMD,GAAM,IACnF7B,GAAQ8B,IAAO,GAAOD,GAAM,IAAQA,IAAO,EAAMC,GAAM,KAASD,IAAO,EAAMC,GAAM,IAEnF7B,GAAQoC,KAAO,GAAOC,IAAM,KAASD,KAAO,GAAOC,IAAM,KAASA,KAAO,EAAMD,IAAM,IACrFnC,GAAQoC,KAAO,GAAOD,IAAM,KAASC,KAAO,GAAOD,IAAM,KAASA,KAAO,EAAMC,IAAM,IAIrFvB,GAFAN,EAAMoB,EAAKN,GAEGM,EAAKJ,EAAMlB,EACzBS,GAFAN,EAAMoB,EAAKN,GAEGM,EAAKJ,EAAMlB,EAEzBa,EAAOgB,GAAKN,GAAQM,GAAKJ,EACzBX,EAAOgB,GAAKN,GAAQM,GAAKJ,EAEzBjB,EAAMpK,EAAO1C,EAAI,GACjB+M,EAAMrK,EAAO1C,EAAI,GASjB8M,GAFAX,IANAa,EAAMrL,GAAE3B,EAAI,MAME,KAAO8M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAOkC,KAAO,MADzE9B,GAAY,MAANc,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAALkC,MAD1E/B,IAHAgB,EAAMtL,GAAE3B,EAAI,MAGE,KAAO+M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAOkC,KAAO,MADzEjC,GAAY,MAANiB,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAALkC,OACa,OACU,OACV,MAE1E,GAAY,MAAL/B,EACpBa,EAAOd,GAAM,GAAY,MAALD,EAOpBgB,GAFAb,GAAMS,IAAS,KAAOhB,IAAQ,MAD9BM,GAAa,MAAPU,IAAwB,MAANhB,KADxBK,GAAMY,IAAS,KAAOhB,IAAQ,MAD9BG,GAAa,MAAPa,IAAwB,MAANhB,MACoB,OACI,OACJ,MAE/B,GAAY,MAALK,EACpBe,EAAOhB,GAAM,GAAY,MAALD,EAOpBgC,IAFA7B,GAAMqB,IAAO,KAAOV,IAAQ,MAD5BZ,GAAW,MAALsB,IAAsB,MAANV,KADtBb,GAAMwB,IAAO,KAAOV,IAAQ,MAD5Bf,GAAW,MAALyB,IAAsB,MAANV,MACoB,OACI,OACJ,MAE9B,GAAY,MAALb,EACnB+B,GAAMhC,GAAM,GAAY,MAALD,EAUnBJ,IAHA4B,GAFArB,GAAMa,IAAQ,KAAOF,IAAQ,MAD7BZ,GAAY,MAANc,IAAuB,MAANF,KADvBb,GAAMgB,IAAQ,KAAOF,IAAQ,MAD7Bf,GAAY,MAANiB,IAAuB,MAANF,MACoB,OACI,OACJ,MAE/B,GAAY,MAALb,KAGJ,IAFfuB,EAAMxB,GAAM,GAAY,MAALD,IAES,IAAQyB,IAAO,EAAMD,GAAM,KAASC,IAAO,EAAMD,GAAM,IACnF3B,GAAQ4B,IAAO,GAAOD,GAAM,IAAQA,IAAO,EAAMC,GAAM,KAASD,IAAO,EAAMC,GAAM,IAEnF3B,GAAQkC,KAAO,GAAOC,IAAM,KAASD,KAAO,GAAOC,IAAM,KAASA,KAAO,EAAMD,IAAM,IACrFjC,GAAQkC,KAAO,GAAOD,IAAM,KAASC,KAAO,GAAOD,IAAM,KAASA,KAAO,EAAMC,IAAM,IAIrFrB,GAFAJ,EAAMgB,EAAKE,GAEGF,EAAKJ,EAAMd,EACzBO,GAFAJ,EAAMgB,EAAKE,GAEGF,EAAKJ,EAAMd,EAEzBW,EAAOc,GAAKE,IAAQF,GAAKJ,EACzBT,EAAOc,GAAKE,IAAQF,GAAKJ,EAEzBf,EAAMpK,EAAO1C,EAAI,GACjB+M,EAAMrK,EAAO1C,EAAI,GASjB8M,GAFAX,IANAa,EAAMrL,GAAE3B,EAAI,MAME,KAAO8M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAOgC,IAAO,MADzE5B,GAAY,MAANc,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAALgC,KAD1E7B,IAHAgB,EAAMtL,GAAE3B,EAAI,MAGE,KAAO+M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAOgC,IAAO,MADzE/B,GAAY,MAANiB,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAALgC,MACa,OACU,OACV,MAE1E,GAAY,MAAL7B,EACpBa,EAAOd,GAAM,GAAY,MAALD,EAOpBgB,GAFAb,GAAMS,IAAS,KAAOhB,IAAQ,MAD9BM,GAAa,MAAPU,IAAwB,MAANhB,KADxBK,GAAMY,IAAS,KAAOhB,IAAQ,MAD9BG,GAAa,MAAPa,IAAwB,MAANhB,MACoB,OACI,OACJ,MAE/B,GAAY,MAALK,EACpBe,EAAOhB,GAAM,GAAY,MAALD,EAOpB8B,GAFA3B,GAAMmB,IAAO,KAAOR,IAAQ,MAD5BZ,GAAW,MAALoB,IAAsB,MAANR,KADtBb,GAAMsB,IAAO,KAAOR,IAAQ,MAD5Bf,GAAW,MAALuB,IAAsB,MAANR,MACoB,OACI,OACJ,MAE9B,GAAY,MAALb,EACnB6B,EAAM9B,GAAM,GAAY,MAALD,EAUnBJ,IAHA0B,GAFAnB,GAAMa,IAAQ,KAAOF,IAAQ,MAD7BZ,GAAY,MAANc,IAAuB,MAANF,KADvBb,GAAMgB,IAAQ,KAAOF,IAAQ,MAD7Bf,GAAY,MAANiB,IAAuB,MAANF,MACoB,OACI,OACJ,MAE/B,GAAY,MAALb,KAGJ,IAFfqB,EAAMtB,GAAM,GAAY,MAALD,IAES,IAAQuB,IAAO,EAAMD,GAAM,KAASC,IAAO,EAAMD,GAAM,IACnFzB,GAAQ0B,IAAO,GAAOD,GAAM,IAAQA,IAAO,EAAMC,GAAM,KAASD,IAAO,EAAMC,GAAM,IAEnFzB,GAAQgC,IAAO,GAAOC,GAAM,KAASD,IAAO,GAAOC,GAAM,KAASA,IAAO,EAAMD,GAAM,IACrF/B,GAAQgC,IAAO,GAAOD,GAAM,KAASC,IAAO,GAAOD,GAAM,KAASA,IAAO,EAAMC,GAAM,IAIrFnB,GAFAF,EAAMY,EAAKE,GAEGF,EAAKI,EAAMlB,EACzBK,GAFAF,EAAMY,EAAKE,GAEGF,EAAKI,EAAMlB,EAEzBS,EAAOY,EAAKE,IAAQF,EAAKI,GACzBf,EAAOY,EAAKE,IAAQF,EAAKI,GAEzBrB,EAAMpK,EAAO1C,EAAI,GACjB+M,EAAMrK,EAAO1C,EAAI,GASjB8M,GAFAX,IANAa,EAAMrL,GAAE3B,EAAI,MAME,KAAO8M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAO8B,IAAO,MADzE1B,GAAY,MAANc,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAAL8B,KAD1E3B,IAHAgB,EAAMtL,GAAE3B,EAAI,MAGE,KAAO+M,IAAQ,KAAOI,IAAQ,KAAOpB,IAAQ,KAAO8B,IAAO,MADzE7B,GAAY,MAANiB,IAAuB,MAANF,IAAuB,MAANI,IAAuB,MAANpB,IAAsB,MAAL8B,MACa,OACU,OACV,MAE1E,GAAY,MAAL3B,EACpBa,EAAOd,GAAM,GAAY,MAALD,EAOpBgB,GAFAb,GAAMS,IAAS,KAAOhB,IAAQ,MAD9BM,GAAa,MAAPU,IAAwB,MAANhB,KADxBK,GAAMY,IAAS,KAAOhB,IAAQ,MAD9BG,GAAa,MAAPa,IAAwB,MAANhB,MACoB,OACI,OACJ,MAE/B,GAAY,MAALK,EACpBe,EAAOhB,GAAM,GAAY,MAALD,EAOpB4B,GAFAzB,GAAMiB,IAAO,KAAON,IAAQ,MAD5BZ,GAAW,MAALkB,IAAsB,MAANN,KADtBb,GAAMoB,IAAO,KAAON,IAAQ,MAD5Bf,GAAW,MAALqB,IAAsB,MAANN,MACoB,OACI,OACJ,MAE9B,GAAY,MAALb,EACnB2B,EAAM5B,GAAM,GAAY,MAALD,EAOnBoB,GAFAjB,GAAMa,IAAQ,KAAOF,IAAQ,MAD7BZ,GAAY,MAANc,IAAuB,MAANF,KADvBb,GAAMgB,IAAQ,KAAOF,IAAQ,MAD7Bf,GAAY,MAANiB,IAAuB,MAANF,MACoB,OACI,OACJ,MAE/B,GAAY,MAALb,EACnBmB,EAAMpB,GAAM,GAAY,MAALD,EAMrBG,GAAMvB,IAAQ,KAAOwC,IAAO,MAD5BlB,GAAY,MAANtB,IAAsB,MAALwC,KADvBnB,GAAMpB,IAAQ,KAAOwC,IAAO,MAD5BrB,GAAY,MAANnB,IAAsB,MAALwC,MACmB,OACI,OACJ,IAE1CvH,KAAK8E,IAAOuB,GAAM,GAAY,MAALD,EACzBpG,KAAK+E,IAAOoB,GAAM,GAAY,MAALD,EAKzBG,GAAMrB,IAAQ,KAAOwC,IAAO,MAD5BpB,GAAY,MAANpB,IAAsB,MAALwC,KADvBrB,GAAMlB,IAAQ,KAAOwC,IAAO,MAD5BvB,GAAY,MAANjB,IAAsB,MAALwC,MACmB,OACI,OACJ,IAE1CzH,KAAKgF,IAAOqB,GAAM,GAAY,MAALD,EACzBpG,KAAKiF,IAAOkB,GAAM,GAAY,MAALD,EAKzBG,GAAMnB,IAAQ,KAAOwC,IAAO,MAD5BtB,GAAY,MAANlB,IAAsB,MAALwC,KADvBvB,GAAMhB,IAAQ,KAAOwC,IAAO,MAD5BzB,GAAY,MAANf,IAAsB,MAALwC,MACmB,OACI,OACJ,IAE1C3H,KAAKkF,IAAOmB,GAAM,GAAY,MAALD,EACzBpG,KAAKmF,IAAOgB,GAAM,GAAY,MAALD,EAKzBG,GAAMjB,IAAQ,KAAOwC,IAAO,MAD5BxB,GAAY,MAANhB,IAAsB,MAALwC,KADvBzB,GAAMd,IAAQ,KAAOwC,IAAO,MAD5B3B,GAAY,MAANb,IAAsB,MAALwC,MACmB,OACI,OACJ,IAE1C7H,KAAKoF,IAAOiB,GAAM,GAAY,MAALD,EACzBpG,KAAKqF,IAAOc,GAAM,GAAY,MAALD,EAKzBG,GAAMf,IAAQ,KAAOwC,IAAO,MAD5B1B,GAAY,MAANd,IAAsB,MAALwC,KADvB3B,GAAMZ,IAAQ,KAAOwC,IAAO,MAD5B7B,GAAY,MAANX,IAAsB,MAALwC,MACmB,OACI,OACJ,IAE1C/H,KAAKsF,IAAOe,GAAM,GAAY,MAALD,EACzBpG,KAAKuF,IAAOY,GAAM,GAAY,MAALD,EAKzBG,GAAMb,IAAQ,KAAOwC,IAAO,MAD5B5B,GAAY,MAANZ,IAAsB,MAALwC,KADvB7B,GAAMV,IAAQ,KAAOwC,IAAO,MAD5B/B,GAAY,MAANT,IAAsB,MAALwC,MACmB,OACI,OACJ,IAE1CjI,KAAKwF,IAAOa,GAAM,GAAY,MAALD,EACzBpG,KAAKyF,IAAOU,GAAM,GAAY,MAALD,EAKzBG,GAAMX,IAAQ,KAAOwC,KAAO,MAD5B9B,GAAY,MAANV,IAAsB,MAALwC,MADvB/B,GAAMR,IAAQ,KAAOwC,KAAO,MAD5BjC,GAAY,MAANP,IAAsB,MAALwC,OACmB,OACI,OACJ,IAE1CnI,KAAK0F,IAAOW,GAAM,GAAY,MAALD,EACzBpG,KAAK2F,IAAOQ,GAAM,GAAY,MAALD,EAKzBG,GAAMT,IAAQ,KAAOwC,KAAO,MAD5BhC,GAAY,MAANR,IAAsB,MAALwC,MADvBjC,GAAMN,IAAQ,KAAOwC,KAAO,MAD5BnC,GAAY,MAANL,IAAsB,MAALwC,OACmB,OACI,OACJ,IAE1CrI,KAAK4F,IAAOS,GAAM,GAAY,MAALD,EACzBpG,KAAK6F,IAAOM,GAAM,GAAY,MAALD,CAC3B,EAEAtB,GAAOrW,UAAU4S,IAAM,WACrBnB,KAAKc,WAEL,IAAIgE,EAAM9E,KAAK8E,IACbC,EAAM/E,KAAK+E,IACXC,EAAMhF,KAAKgF,IACXC,EAAMjF,KAAKiF,IACXC,EAAMlF,KAAKkF,IACXC,EAAMnF,KAAKmF,IACXC,EAAMpF,KAAKoF,IACXC,EAAMrF,KAAKqF,IACXC,EAAMtF,KAAKsF,IACXC,EAAMvF,KAAKuF,IACXC,EAAMxF,KAAKwF,IACXC,EAAMzF,KAAKyF,IACXC,EAAM1F,KAAK0F,IACXC,EAAM3F,KAAK2F,IACXC,EAAM5F,KAAK4F,IACXC,EAAM7F,KAAK6F,IACXlB,EAAO3E,KAAK2E,KAEVxD,EACF5C,GAAWuG,IAAQ,GAAM,IACzBvG,GAAWuG,IAAQ,GAAM,IACzBvG,GAAWuG,IAAQ,GAAM,IACzBvG,GAAWuG,IAAQ,GAAM,IACzBvG,GAAWuG,IAAQ,GAAM,IACzBvG,GAAWuG,IAAQ,EAAK,IACxBvG,GAAWuG,IAAQ,EAAK,IACxBvG,GAAgB,GAANuG,GACVvG,GAAWwG,IAAQ,GAAM,IACzBxG,GAAWwG,IAAQ,GAAM,IACzBxG,GAAWwG,IAAQ,GAAM,IACzBxG,GAAWwG,IAAQ,GAAM,IACzBxG,GAAWwG,IAAQ,GAAM,IACzBxG,GAAWwG,IAAQ,EAAK,IACxBxG,GAAWwG,IAAQ,EAAK,IACxBxG,GAAgB,GAANwG,GACVxG,GAAWyG,IAAQ,GAAM,IACzBzG,GAAWyG,IAAQ,GAAM,IACzBzG,GAAWyG,IAAQ,GAAM,IACzBzG,GAAWyG,IAAQ,GAAM,IACzBzG,GAAWyG,IAAQ,GAAM,IACzBzG,GAAWyG,IAAQ,EAAK,IACxBzG,GAAWyG,IAAQ,EAAK,IACxBzG,GAAgB,GAANyG,GACVzG,GAAW0G,IAAQ,GAAM,IACzB1G,GAAW0G,IAAQ,GAAM,IACzB1G,GAAW0G,IAAQ,GAAM,IACzB1G,GAAW0G,IAAQ,GAAM,IACzB1G,GAAW0G,IAAQ,GAAM,IACzB1G,GAAW0G,IAAQ,EAAK,IACxB1G,GAAW0G,IAAQ,EAAK,IACxB1G,GAAgB,GAAN0G,GACV1G,GAAW2G,IAAQ,GAAM,IACzB3G,GAAW2G,IAAQ,GAAM,IACzB3G,GAAW2G,IAAQ,GAAM,IACzB3G,GAAW2G,IAAQ,GAAM,IACzB3G,GAAW2G,IAAQ,GAAM,IACzB3G,GAAW2G,IAAQ,EAAK,IACxB3G,GAAW2G,IAAQ,EAAK,IACxB3G,GAAgB,GAAN2G,GACV3G,GAAW4G,IAAQ,GAAM,IACzB5G,GAAW4G,IAAQ,GAAM,IACzB5G,GAAW4G,IAAQ,GAAM,IACzB5G,GAAW4G,IAAQ,GAAM,IACzB5G,GAAW4G,IAAQ,GAAM,IACzB5G,GAAW4G,IAAQ,EAAK,IACxB5G,GAAW4G,IAAQ,EAAK,IACxB5G,GAAgB,GAAN4G,GACV5G,GAAW6G,IAAQ,GAAM,IACzB7G,GAAW6G,IAAQ,GAAM,IACzB7G,GAAW6G,IAAQ,GAAM,IACzB7G,GAAW6G,IAAQ,GAAM,IACzB7G,GAAW6G,IAAQ,GAAM,IACzB7G,GAAW6G,IAAQ,EAAK,IACxB7G,GAAW6G,IAAQ,EAAK,IACxB7G,GAAgB,GAAN6G,GAkFZ,OAjFIT,GAAQ,MACVxD,GACE5C,GAAW8G,IAAQ,GAAM,IACzB9G,GAAW8G,IAAQ,GAAM,IACzB9G,GAAW8G,IAAQ,GAAM,IACzB9G,GAAW8G,IAAQ,GAAM,IACzB9G,GAAW8G,IAAQ,GAAM,IACzB9G,GAAW8G,IAAQ,EAAK,IACxB9G,GAAW8G,IAAQ,EAAK,IACxB9G,GAAgB,GAAN8G,IAEVV,GAAQ,MACVxD,GACE5C,GAAW+G,IAAQ,GAAM,IACzB/G,GAAW+G,IAAQ,GAAM,IACzB/G,GAAW+G,IAAQ,GAAM,IACzB/G,GAAW+G,IAAQ,GAAM,IACzB/G,GAAW+G,IAAQ,GAAM,IACzB/G,GAAW+G,IAAQ,EAAK,IACxB/G,GAAW+G,IAAQ,EAAK,IACxB/G,GAAgB,GAAN+G,GACV/G,GAAWgH,IAAQ,GAAM,IACzBhH,GAAWgH,IAAQ,GAAM,IACzBhH,GAAWgH,IAAQ,GAAM,IACzBhH,GAAWgH,IAAQ,GAAM,IACzBhH,GAAWgH,IAAQ,GAAM,IACzBhH,GAAWgH,IAAQ,EAAK,IACxBhH,GAAWgH,IAAQ,EAAK,IACxBhH,GAAgB,GAANgH,GACVhH,GAAWiH,IAAQ,GAAM,IACzBjH,GAAWiH,IAAQ,GAAM,IACzBjH,GAAWiH,IAAQ,GAAM,IACzBjH,GAAWiH,IAAQ,GAAM,IACzBjH,GAAWiH,IAAQ,GAAM,IACzBjH,GAAWiH,IAAQ,EAAK,IACxBjH,GAAWiH,IAAQ,EAAK,IACxBjH,GAAgB,GAANiH,GACVjH,GAAWkH,IAAQ,GAAM,IACzBlH,GAAWkH,IAAQ,GAAM,IACzBlH,GAAWkH,IAAQ,GAAM,IACzBlH,GAAWkH,IAAQ,GAAM,IACzBlH,GAAWkH,IAAQ,GAAM,IACzBlH,GAAWkH,IAAQ,EAAK,IACxBlH,GAAWkH,IAAQ,EAAK,IACxBlH,GAAgB,GAANkH,IAEF,KAARd,IACFxD,GACE5C,GAAWmH,IAAQ,GAAM,IACzBnH,GAAWmH,IAAQ,GAAM,IACzBnH,GAAWmH,IAAQ,GAAM,IACzBnH,GAAWmH,IAAQ,GAAM,IACzBnH,GAAWmH,IAAQ,GAAM,IACzBnH,GAAWmH,IAAQ,EAAK,IACxBnH,GAAWmH,IAAQ,EAAK,IACxBnH,GAAgB,GAANmH,GACVnH,GAAWoH,IAAQ,GAAM,IACzBpH,GAAWoH,IAAQ,GAAM,IACzBpH,GAAWoH,IAAQ,GAAM,IACzBpH,GAAWoH,IAAQ,GAAM,IACzBpH,GAAWoH,IAAQ,GAAM,IACzBpH,GAAWoH,IAAQ,EAAK,IACxBpH,GAAWoH,IAAQ,EAAK,IACxBpH,GAAgB,GAANoH,GACVpH,GAAWqH,IAAQ,GAAM,IACzBrH,GAAWqH,IAAQ,GAAM,IACzBrH,GAAWqH,IAAQ,GAAM,IACzBrH,GAAWqH,IAAQ,GAAM,IACzBrH,GAAWqH,IAAQ,GAAM,IACzBrH,GAAWqH,IAAQ,EAAK,IACxBrH,GAAWqH,IAAQ,EAAK,IACxBrH,GAAgB,GAANqH,GACVrH,GAAWsH,IAAQ,GAAM,IACzBtH,GAAWsH,IAAQ,GAAM,IACzBtH,GAAWsH,IAAQ,GAAM,IACzBtH,GAAWsH,IAAQ,GAAM,IACzBtH,GAAWsH,IAAQ,GAAM,IACzBtH,GAAWsH,IAAQ,EAAK,IACxBtH,GAAWsH,IAAQ,EAAK,IACxBtH,GAAgB,GAANsH,IAEP1E,CACT,EAEAyD,GAAOrW,UAAUC,SAAWoW,GAAOrW,UAAU4S,IAE7CyD,GAAOrW,UAAUoR,OAAS,WACxBK,KAAKc,WAEL,IAAIgE,EAAM9E,KAAK8E,IACbC,EAAM/E,KAAK+E,IACXC,EAAMhF,KAAKgF,IACXC,EAAMjF,KAAKiF,IACXC,EAAMlF,KAAKkF,IACXC,EAAMnF,KAAKmF,IACXC,EAAMpF,KAAKoF,IACXC,EAAMrF,KAAKqF,IACXC,EAAMtF,KAAKsF,IACXC,EAAMvF,KAAKuF,IACXC,EAAMxF,KAAKwF,IACXC,EAAMzF,KAAKyF,IACXC,EAAM1F,KAAK0F,IACXC,EAAM3F,KAAK2F,IACXC,EAAM5F,KAAK4F,IACXC,EAAM7F,KAAK6F,IACXlB,EAAO3E,KAAK2E,KAEVT,EAAM,CACPY,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,GA8CF,OA3CIT,GAAQ,KACVT,EAAI3T,KAAM8U,IAAQ,GAAM,IAAOA,IAAQ,GAAM,IAAOA,IAAQ,EAAK,IAAY,IAANA,GAErEV,GAAQ,KACVT,EAAI3T,KACD+U,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,GAGQ,KAARd,GACFT,EAAI3T,KACDmV,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCC,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,GAGG3B,CACT,EAEAU,GAAOrW,UAAU0B,MAAQ2U,GAAOrW,UAAUoR,OAE1CiF,GAAOrW,UAAU6S,YAAc,WAC7BpB,KAAKc,WAEL,IAAI6D,EAAO3E,KAAK2E,KACZhG,EAAS,IAAInE,YAAYmK,EAAO,GAChCrC,EAAW,IAAIC,SAAS5D,GAwB5B,OAvBA2D,EAASE,UAAU,EAAGxC,KAAK8E,KAC3BxC,EAASE,UAAU,EAAGxC,KAAK+E,KAC3BzC,EAASE,UAAU,EAAGxC,KAAKgF,KAC3B1C,EAASE,UAAU,GAAIxC,KAAKiF,KAC5B3C,EAASE,UAAU,GAAIxC,KAAKkF,KAC5B5C,EAASE,UAAU,GAAIxC,KAAKmF,KAC5B7C,EAASE,UAAU,GAAIxC,KAAKoF,KAExBT,GAAQ,KACVrC,EAASE,UAAU,GAAIxC,KAAKqF,KAE1BV,GAAQ,MACVrC,EAASE,UAAU,GAAIxC,KAAKsF,KAC5BhD,EAASE,UAAU,GAAIxC,KAAKuF,KAC5BjD,EAASE,UAAU,GAAIxC,KAAKwF,KAC5BlD,EAASE,UAAU,GAAIxC,KAAKyF,MAElB,KAARd,IACFrC,EAASE,UAAU,GAAIxC,KAAK0F,KAC5BpD,EAASE,UAAU,GAAIxC,KAAK2F,KAC5BrD,EAASE,UAAU,GAAIxC,KAAK4F,KAC5BtD,EAASE,UAAU,GAAIxC,KAAK6F,MAEvBlH,CACT,EAEAiG,GAAOrW,UAAU+Z,MAAQ,WACvB,IAAIzH,EAAO,IAAI+D,GAAO5E,KAAK2E,MAAM,GAEjC,OADA3E,KAAKuI,OAAO1H,GACLA,CACT,EAEA+D,GAAOrW,UAAUga,OAAS,SAAU1H,GAClC,IAAI1O,EAAI,EACNqW,EAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,QACA,SACA,YACA,SACA,iBAEJ,IAAKrW,EAAI,EAAGA,EAAIqW,EAAMrZ,SAAUgD,EAC9B0O,EAAK2H,EAAMrW,IAAM6N,KAAKwI,EAAMrW,IAE9B,IAAKA,EAAI,EAAGA,EAAI6N,KAAKpD,OAAOzN,SAAUgD,EACpC0O,EAAKjE,OAAOzK,GAAK6N,KAAKpD,OAAOzK,EAEjC,EAqDA0S,GAAWtW,UAAY,IAAIqW,GAE3BC,GAAWtW,UAAUuS,SAAW,WAE9B,GADA8D,GAAOrW,UAAUuS,SAASrS,KAAKuR,MAC3BA,KAAKW,MAAO,CACdX,KAAKW,OAAQ,EACb,IAAIW,EAAYtB,KAAK/P,QACrB2U,GAAOnW,KAAKuR,KAAMA,KAAK2E,KAAM3E,KAAKD,cAClCC,KAAKZ,OAAOY,KAAKS,SACjBT,KAAKZ,OAAOkC,GACZsD,GAAOrW,UAAUuS,SAASrS,KAAKuR,KACjC,CACF,EAEA6E,GAAWtW,UAAU+Z,MAAQ,WAC3B,IAAIzH,EAAO,IAAIgE,GAAW,GAAI7E,KAAK2E,MAAM,GACzC3E,KAAKuI,OAAO1H,GACZA,EAAKF,MAAQX,KAAKW,MAClB,IAAK,IAAIxO,EAAI,EAAGA,EAAI6N,KAAKS,QAAQtR,SAAUgD,EACzC0O,EAAKJ,QAAQtO,GAAK6N,KAAKS,QAAQtO,GAEjC,OAAO0O,CACT,EAGO,MAAM4H,GAASjH,GAAa,KACtBkH,GAASlH,GAAa,KACtBmH,GAAanH,GAAa,KAC1BoH,GAAapH,GAAa,KAC1BqH,GAAcnH,GAAiB,KAC/BoH,GAAcpH,GAAiB,KAC/BqH,GAAkBrH,GAAiB,KACnCsH,GAAkBtH,GAAiB;;;;;;;;;AC5oChD,IAAIzD,GAAc,wBAEdvG,GAA2B,iBAAX3I,OAChB4I,GAAOD,GAAS3I,OAAS,CAAA,EACzB4I,GAAKsR,oBACPvR,IAAS,GAEX,IAAIG,IAAcH,IAA0B,iBAATI,MACpBH,GAAKuR,oBAAyC,iBAAZjR,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KAE5GR,GAAOS,OACEP,KACTF,GAAOG,MAgKT,IA9JA,IAAIuG,IAAgB1G,GAAKwR,yBAAkD,oBAAhB3O,YACvD+D,GAAY,mBAAmB1K,MAAM,IAErCuV,GAAiB,CAAC,EAAG,KAAM,OAAQ,UAGnC3K,GAAQ,CAAC,EAAG,EAAG,GAAI,IACnB4K,GAAK,CACP,EAAG,EAAG,MAAO,EAAG,MAAO,WAAY,WAAY,WAAY,MAAO,EAAG,WAAY,EAAG,WAAY,WAAY,MAC5G,WAAY,IAAK,EAAG,IAAK,EAAG,WAAY,EAAG,WAAY,EAAG,WAAY,EAAG,IAAK,WAAY,MAAO,WAAY,MAC7G,WAAY,MAAO,WAAY,IAAK,WAAY,MAAO,EAAG,WAAY,WAAY,WAAY,WAAY,MAC1G,WAAY,WAAY,EAAG,WAAY,YAErCC,GAAO,CAAC,IAAK,IAAK,IAAK,KACvBC,GAAa,CAAC,IAAK,KACnB7K,GAAe,CAAC,MAAO,SAAU,cAAe,QAAS,UACzD8K,GAAiB,CACnB,IAAK,IACL,IAAK,KAGH9a,GACFiJ,GAAKuR,qBAAuBha,MAAMR,QAC9B,SAAUkC,GACR,MAA+C,mBAAxCtC,OAAOC,UAAUC,SAASC,KAAKmC,EACxC,EACA1B,MAAMR,QAERmQ,IACFR,KAAiB1G,GAAK8R,iCAAoCjP,YAAYqE,OAIlErE,YAAYqE,OAHZ,SAAUjO,GACR,MAAsB,iBAARA,GAAoBA,EAAI+N,QAAU/N,EAAI+N,OAAOpE,cAAgBC,WAC7E,EAIFuE,GAAgB,SAAUC,GAC5B,IAAIxI,SAAcwI,EAClB,GAAa,WAATxI,EACF,MAAO,CAACwI,GAAS,GAEnB,GAAa,WAATxI,GAAiC,OAAZwI,EACvB,MAAM,IAAIvP,MAAMwO,IAElB,GAAII,IAAgBW,EAAQzE,cAAgBC,YAC1C,MAAO,CAAC,IAAIC,WAAWuE,IAAU,GAEnC,IAAKtQ,GAAQsQ,KAAaH,GAAOG,GAC/B,MAAM,IAAIvP,MAAMwO,IAElB,MAAO,CAACe,GAAS,EACnB,EAEI0K,GAAQ,SAAU1K,GACpB,OAA4C,IAArCD,GAAcC,GAAS,GAAG7P,MACnC,EAEIwa,GAAa,SAAU1Z,GAEzB,IADA,IAAI2Z,EAAW,GACNzX,EAAI,EAAGA,EAAIlC,EAAMd,SAAUgD,EAClCyX,EAASzX,GAAKlC,EAAMkC,GAEtB,OAAOyX,CACT,EAEI3K,GAAqB,SAAU0F,EAAMkF,EAAS3K,GAChD,OAAO,SAAUF,GACf,OAAO,IAAI8K,GAAOnF,EAAMkF,EAASlF,GAAMvF,OAAOJ,GAASE,IACzD,CACF,EAEI6K,GAA0B,SAAUpF,EAAMkF,EAAS3K,GACrD,OAAO,SAAUF,EAASgL,GACxB,OAAO,IAAIF,GAAOnF,EAAMkF,EAASG,GAAY5K,OAAOJ,GAASE,IAC/D,CACF,EAEI+K,GAA2B,SAAUtF,EAAMkF,EAAS3K,GACtD,OAAO,SAAUF,EAASgL,EAAYE,EAAGC,GACvC,OAAOC,GAAQ,SAAWzF,GAAMvF,OAAOJ,EAASgL,EAAYE,EAAGC,GAAGjL,IACpE,CACF,EAEImL,GAAyB,SAAU1F,EAAMkF,EAAS3K,GACpD,OAAO,SAAUW,EAAKb,EAASgL,EAAYG,GACzC,OAAOC,GAAQ,OAASzF,GAAMvF,OAAOS,EAAKb,EAASgL,EAAYG,GAAGjL,IACpE,CACF,EAEIoL,GAAsB,SAAUhL,EAAQkC,EAAcmD,EAAMkF,GAC9D,IAAK,IAAI1X,EAAI,EAAGA,EAAIuM,GAAavP,SAAUgD,EAAG,CAC5C,IAAIqE,EAAOkI,GAAavM,GACxBmN,EAAO9I,GAAQgL,EAAamD,EAAMkF,EAASrT,EAC7C,CACA,OAAO8I,CACT,EAEIkC,GAAe,SAAUmD,EAAMkF,GACjC,IAAIvK,EAASL,GAAmB0F,EAAMkF,EAAS,OAO/C,OANAvK,EAAOzO,OAAS,WACd,OAAO,IAAIiZ,GAAOnF,EAAMkF,EAASlF,EACnC,EACArF,EAAOF,OAAS,SAAUJ,GACxB,OAAOM,EAAOzO,SAASuO,OAAOJ,EAChC,EACOsL,GAAoBhL,EAAQL,GAAoB0F,EAAMkF,EAC/D,EAyCIU,GAAa,CACf,CAAE5T,KAAM,SAAUkT,QAhJC,CAAC,EAAG,IAAK,MAAO,UAgJQlF,KAAM2E,GAAM9H,aAAcA,IACrE,CAAE7K,KAAM,OAAQkT,QAhJJ,CAAC,EAAG,KAAM,OAAQ,WAgJIlF,KAAM2E,GAAM9H,aAAcA,IAC5D,CAAE7K,KAAM,QAASkT,QApJC,CAAC,GAAI,KAAM,QAAS,WAoJGlF,KAAM4E,GAAY/H,aA1CrC,SAAUmD,EAAMkF,GACtC,IAAIvK,EAASyK,GAAwBpF,EAAMkF,EAAS,OAOpD,OANAvK,EAAOzO,OAAS,SAAUmZ,GACxB,OAAO,IAAIF,GAAOnF,EAAMkF,EAASG,EACnC,EACA1K,EAAOF,OAAS,SAAUJ,EAASgL,GACjC,OAAO1K,EAAOzO,OAAOmZ,GAAY5K,OAAOJ,EAC1C,EACOsL,GAAoBhL,EAAQyK,GAAyBpF,EAAMkF,EACpE,GAkCE,CAAElT,KAAM,SAAUkT,QAAST,GAAgBzE,KAAM4E,GAAY/H,aAhCtC,SAAUmD,EAAMkF,GACvC,IAAIW,EAAIhB,GAAe7E,GACnBrF,EAAS2K,GAAyBtF,EAAMkF,EAAS,OAWrD,OAVAvK,EAAOzO,OAAS,SAAUmZ,EAAYE,EAAGC,GACvC,OAAIT,GAAMQ,IAAMR,GAAMS,GACbC,GAAQ,QAAUzF,GAAM9T,OAAOmZ,GAE/B,IAAIF,GAAOnF,EAAMkF,EAASG,GAAYS,QAAQ,CAACP,EAAGC,GAAIK,EAEjE,EACAlL,EAAOF,OAAS,SAAUJ,EAASgL,EAAYE,EAAGC,GAChD,OAAO7K,EAAOzO,OAAOmZ,EAAYE,EAAGC,GAAG/K,OAAOJ,EAChD,EACOsL,GAAoBhL,EAAQ2K,GAA0BtF,EAAMkF,EACrE,GAmBE,CAAElT,KAAM,OAAQkT,QAAST,GAAgBzE,KAAM4E,GAAY/H,aAjBtC,SAAUmD,EAAMkF,GACrC,IAAIW,EAAIhB,GAAe7E,GACnBrF,EAAS+K,GAAuB1F,EAAMkF,EAAS,OAOnD,OANAvK,EAAOzO,OAAS,SAAUgP,EAAKmK,EAAYG,GACzC,OAAO,IAAIO,GAAK/F,EAAMkF,EAASG,GAAYS,QAAQ,CAAC,OAAQN,GAAIK,GAAGC,QAAQ,CAAC5K,GAAM2K,EACpF,EACAlL,EAAOF,OAAS,SAAUS,EAAKb,EAASgL,EAAYG,GAClD,OAAO7K,EAAOzO,OAAOgP,EAAKmK,EAAYG,GAAG/K,OAAOJ,EAClD,EACOsL,GAAoBhL,EAAQ+K,GAAwB1F,EAAMkF,EACnE,IAUIO,GAAU,CAAA,EAGLjY,GAAI,EAAGA,GAAIoY,GAAWpb,SAAUgD,GAGvC,IAFA,IAAI+Q,GAAYqH,GAAWpY,IACvBwS,GAAOzB,GAAUyB,KACZzK,GAAI,EAAGA,GAAIyK,GAAKxV,SAAU+K,GAAG,CACpC,IAAIyQ,GAAazH,GAAUvM,KAAO,IAAMgO,GAAKzK,IAG7C,GADAkQ,GAAQO,IAAczH,GAAU1B,aAAamD,GAAKzK,IAAIgJ,GAAU2G,SACzC,SAAnB3G,GAAUvM,KAAiB,CAC7B,IAAIiU,GAAgB1H,GAAUvM,KAAOgO,GAAKzK,IAE1CkQ,GAAQQ,IAAiBR,GAAQO,GACnC,CACF,CAGF,SAASb,GAAOnF,EAAMkF,EAASG,GAC7BhK,KAAKpD,OAAS,GACdoD,KAAKmK,EAAI,GACTnK,KAAK6J,QAAUA,EACf7J,KAAKgK,WAAaA,EAClBhK,KAAK6K,OAAQ,EACb7K,KAAKM,WAAY,EACjBN,KAAKmC,MAAQ,EACbnC,KAAKtC,MAAQ,EACbsC,KAAK8K,WAAc,MAAQnG,GAAQ,IAAO,EAC1C3E,KAAK+K,UAAY/K,KAAK8K,YAAc,EACpC9K,KAAKgL,aAAehB,GAAc,EAClChK,KAAKiL,YAA2B,GAAbjB,IAAoB,EAEvC,IAAK,IAAI7X,EAAI,EAAGA,EAAI,KAAMA,EACxB6N,KAAKmK,EAAEhY,GAAK,CAEhB,CA6QA,SAASuY,GAAK/F,EAAMkF,EAASG,GAC3BF,GAAOrb,KAAKuR,KAAM2E,EAAMkF,EAASG,EACnC,CA7QAF,GAAOvb,UAAU6Q,OAAS,SAAUJ,GAClC,GAAIgB,KAAKM,UACP,MAAM,IAAI7Q,MA/MO,2BAiNnB,IAAI4H,EAAS0H,GAAcC,GAC3BA,EAAU3H,EAAO,GAWjB,IAVA,IAOElF,EACAqL,EAREnP,EAAWgJ,EAAO,GAClBuF,EAASoD,KAAKpD,OAChBmO,EAAY/K,KAAK+K,UACjB5b,EAAS6P,EAAQ7P,OACjB2b,EAAa9K,KAAK8K,WAClBxa,EAAQ,EACR6Z,EAAInK,KAAKmK,EAIJ7Z,EAAQnB,GAAQ,CACrB,GAAI6Q,KAAK6K,MAGP,IAFA7K,KAAK6K,OAAQ,EACbjO,EAAO,GAAKoD,KAAKmC,MACZhQ,EAAI,EAAGA,EAAI2Y,EAAa,IAAK3Y,EAChCyK,EAAOzK,GAAK,EAGhB,GAAI9D,EACF,IAAK8D,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI4Y,IAAaza,GACtDkN,EAAOwB,EAAQpF,WAAWtJ,IACf,IACTsM,EAAOzK,GAAK,IAAMqL,GAAQiB,GAAY,EAANtM,KACvBqL,EAAO,MAChBZ,EAAOzK,GAAK,KAAO,IAAQqL,GAAQ,IAAOiB,GAAY,EAANtM,KAChDyK,EAAOzK,GAAK,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,MACzCqL,EAAO,OAAUA,GAAQ,OAClCZ,EAAOzK,GAAK,KAAO,IAAQqL,GAAQ,KAAQiB,GAAY,EAANtM,KACjDyK,EAAOzK,GAAK,KAAO,IAASqL,GAAQ,EAAK,KAAUiB,GAAY,EAANtM,KACzDyK,EAAOzK,GAAK,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,OAElDqL,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BwB,EAAQpF,aAAatJ,IACjEsM,EAAOzK,GAAK,KAAO,IAAQqL,GAAQ,KAAQiB,GAAY,EAANtM,KACjDyK,EAAOzK,GAAK,KAAO,IAASqL,GAAQ,GAAM,KAAUiB,GAAY,EAANtM,KAC1DyK,EAAOzK,GAAK,KAAO,IAASqL,GAAQ,EAAK,KAAUiB,GAAY,EAANtM,KACzDyK,EAAOzK,GAAK,KAAO,IAAe,GAAPqL,IAAiBiB,GAAY,EAANtM,WAItD,IAAKA,EAAI6N,KAAKtC,MAAOpN,EAAQnB,GAAUgD,EAAI4Y,IAAaza,EACtDsM,EAAOzK,GAAK,IAAM6M,EAAQ1O,IAAUmO,GAAY,EAANtM,KAI9C,GADA6N,KAAKY,cAAgBzO,EACjBA,GAAK4Y,EAAW,CAGlB,IAFA/K,KAAKtC,MAAQvL,EAAI4Y,EACjB/K,KAAKmC,MAAQvF,EAAOkO,GACf3Y,EAAI,EAAGA,EAAI2Y,IAAc3Y,EAC5BgY,EAAEhY,IAAMyK,EAAOzK,GAEjB2R,GAAEqG,GACFnK,KAAK6K,OAAQ,CACf,MACE7K,KAAKtC,MAAQvL,CAEjB,CACA,OAAO6N,IACT,EAEA8J,GAAOvb,UAAU6L,OAAS,SAAU8Q,EAAGC,GACrC,IAAIC,EAAQ,IAAJF,EACNhB,EAAI,EACFlR,EAAQ,CAACoS,GAGb,IADAA,EAAQ,KADRF,IAAS,GAEFE,EAAI,GACTpS,EAAMqS,QAAQD,GAEdA,EAAQ,KADRF,IAAS,KAEPhB,EAQJ,OANIiB,EACFnS,EAAMzI,KAAK2Z,GAEXlR,EAAMqS,QAAQnB,GAEhBlK,KAAKZ,OAAOpG,GACLA,EAAM7J,MACf,EAEA2a,GAAOvb,UAAU+c,aAAe,SAAU7R,GACxC,IAAIpC,EAAS0H,GAActF,GAC3BA,EAAMpC,EAAO,GACb,IAAIhJ,EAAWgJ,EAAO,GAClB2B,EAAQ,EACV7J,EAASsK,EAAItK,OACf,GAAId,EACF,IAAK,IAAI8D,EAAI,EAAGA,EAAIsH,EAAItK,SAAUgD,EAAG,CACnC,IAAIqL,EAAO/D,EAAIG,WAAWzH,GACtBqL,EAAO,IACTxE,GAAS,EACAwE,EAAO,KAChBxE,GAAS,EACAwE,EAAO,OAAUA,GAAQ,MAClCxE,GAAS,GAETwE,EAAO,QAAoB,KAAPA,IAAiB,GAA6B,KAAtB/D,EAAIG,aAAazH,IAC7D6G,GAAS,EAEb,MAEAA,EAAQ7J,EAIV,OAFA6J,GAASgH,KAAK5F,OAAe,EAARpB,GACrBgH,KAAKZ,OAAO3F,GACLT,CACT,EAEA8Q,GAAOvb,UAAUkc,QAAU,SAAUc,EAAMf,GAEzC,IADA,IAAIxR,EAAQgH,KAAK5F,OAAOoQ,GACfrY,EAAI,EAAGA,EAAIoZ,EAAKpc,SAAUgD,EACjC6G,GAASgH,KAAKsL,aAAaC,EAAKpZ,IAElC,IAAIqZ,GAAgBhB,EAAKxR,EAAQwR,GAAMA,EACnCiB,EAAQ,GAGZ,OAFAA,EAAMtc,OAASqc,EACfxL,KAAKZ,OAAOqM,GACLzL,IACT,EAEA8J,GAAOvb,UAAUuS,SAAW,WAC1B,IAAId,KAAKM,UAAT,CAGAN,KAAKM,WAAY,EACjB,IAAI1D,EAASoD,KAAKpD,OAChBzK,EAAI6N,KAAKY,cACTkK,EAAa9K,KAAK8K,WAClBX,EAAInK,KAAKmK,EAEX,GADAvN,EAAOzK,GAAK,IAAM6N,KAAK6J,QAAY,EAAJ1X,GAC3B6N,KAAKY,gBAAkBZ,KAAK+K,UAE9B,IADAnO,EAAO,GAAKA,EAAOkO,GACd3Y,EAAI,EAAGA,EAAI2Y,EAAa,IAAK3Y,EAChCyK,EAAOzK,GAAK,EAIhB,IADAyK,EAAOkO,EAAa,IAAM,WACrB3Y,EAAI,EAAGA,EAAI2Y,IAAc3Y,EAC5BgY,EAAEhY,IAAMyK,EAAOzK,GAEjB2R,GAAEqG,EAjBF,CAkBF,EAEAL,GAAOvb,UAAUC,SAAWsb,GAAOvb,UAAU4S,IAAM,WACjDnB,KAAKc,WAUL,IARA,IAOEqB,EAPE2I,EAAa9K,KAAK8K,WACpBX,EAAInK,KAAKmK,EACTa,EAAehL,KAAKgL,aACpBC,EAAajL,KAAKiL,WAClB9Y,EAAI,EACJ+H,EAAI,EACFiH,EAAM,GAEHjH,EAAI8Q,GAAc,CACvB,IAAK7Y,EAAI,EAAGA,EAAI2Y,GAAc5Q,EAAI8Q,IAAgB7Y,IAAK+H,EACrDiI,EAAQgI,EAAEhY,GACVgP,GACE5C,GAAW4D,GAAS,EAAK,IACzB5D,GAAkB,GAAR4D,GACV5D,GAAW4D,GAAS,GAAM,IAC1B5D,GAAW4D,GAAS,EAAK,IACzB5D,GAAW4D,GAAS,GAAM,IAC1B5D,GAAW4D,GAAS,GAAM,IAC1B5D,GAAW4D,GAAS,GAAM,IAC1B5D,GAAW4D,GAAS,GAAM,IAE1BjI,EAAI4Q,GAAe,IACrBX,EAAIR,GAAWQ,GACfrG,GAAEqG,GACFhY,EAAI,EAER,CAWA,OAVI8Y,IACF9I,EAAQgI,EAAEhY,GACVgP,GAAO5C,GAAW4D,GAAS,EAAK,IAAQ5D,GAAkB,GAAR4D,GAC9C8I,EAAa,IACf9J,GAAO5C,GAAW4D,GAAS,GAAM,IAAQ5D,GAAW4D,GAAS,EAAK,KAEhE8I,EAAa,IACf9J,GAAO5C,GAAW4D,GAAS,GAAM,IAAQ5D,GAAW4D,GAAS,GAAM,MAGhEhB,CACT,EAEA2I,GAAOvb,UAAU6S,YAAc,WAC7BpB,KAAKc,WAEL,IAOInC,EAPAmM,EAAa9K,KAAK8K,WACpBX,EAAInK,KAAKmK,EACTa,EAAehL,KAAKgL,aACpBC,EAAajL,KAAKiL,WAClB9Y,EAAI,EACJ+H,EAAI,EACFlB,EAAQgH,KAAKgK,YAAc,EAG7BrL,EADEsM,EACO,IAAIzQ,YAAawQ,EAAe,GAAM,GAEtC,IAAIxQ,YAAYxB,GAG3B,IADA,IAAI/I,EAAQ,IAAI2O,YAAYD,GACrBzE,EAAI8Q,GAAc,CACvB,IAAK7Y,EAAI,EAAGA,EAAI2Y,GAAc5Q,EAAI8Q,IAAgB7Y,IAAK+H,EACrDjK,EAAMiK,GAAKiQ,EAAEhY,GAEX+H,EAAI4Q,GAAe,IACrBX,EAAIR,GAAWQ,GACfrG,GAAEqG,GAEN,CAKA,OAJIc,IACFhb,EAAMiK,GAAKiQ,EAAEhY,GACbwM,EAASA,EAAO1Q,MAAM,EAAG+K,IAEpB2F,CACT,EAEAmL,GAAOvb,UAAUoQ,OAASmL,GAAOvb,UAAU6S,YAE3C0I,GAAOvb,UAAUoR,OAASmK,GAAOvb,UAAU0B,MAAQ,WACjD+P,KAAKc,WAWL,IATA,IAOE4K,EACAvJ,EARE2I,EAAa9K,KAAK8K,WACpBX,EAAInK,KAAKmK,EACTa,EAAehL,KAAKgL,aACpBC,EAAajL,KAAKiL,WAClB9Y,EAAI,EACJ+H,EAAI,EACFjK,EAAQ,GAGLiK,EAAI8Q,GAAc,CACvB,IAAK7Y,EAAI,EAAGA,EAAI2Y,GAAc5Q,EAAI8Q,IAAgB7Y,IAAK+H,EACrDwR,EAASxR,GAAK,EACdiI,EAAQgI,EAAEhY,GACVlC,EAAMyb,GAAkB,IAARvJ,EAChBlS,EAAMyb,EAAS,GAAMvJ,GAAS,EAAK,IACnClS,EAAMyb,EAAS,GAAMvJ,GAAS,GAAM,IACpClS,EAAMyb,EAAS,GAAMvJ,GAAS,GAAM,IAElCjI,EAAI4Q,GAAe,IACrBX,EAAIR,GAAWQ,GACfrG,GAAEqG,GAEN,CAYA,OAXIc,IACFS,EAASxR,GAAK,EACdiI,EAAQgI,EAAEhY,GACVlC,EAAMyb,GAAkB,IAARvJ,EACZ8I,EAAa,IACfhb,EAAMyb,EAAS,GAAMvJ,GAAS,EAAK,KAEjC8I,EAAa,IACfhb,EAAMyb,EAAS,GAAMvJ,GAAS,GAAM,MAGjClS,CACT,EAMAya,GAAKnc,UAAY,IAAIub,GAErBY,GAAKnc,UAAUuS,SAAW,WAExB,OADAd,KAAK5F,OAAO4F,KAAKgK,YAAY,GACtBF,GAAOvb,UAAUuS,SAASrS,KAAKuR,KACxC,EAEA,IAAI8D,GAAI,SAAUqG,GAChB,IAAInG,EACF2H,EACAzB,EACA0B,EACA1F,EACAC,EACAC,EACAC,EACAwF,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACF,IAAKjF,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB0B,EAAKzB,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCjE,EAAKiE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtChE,EAAKgE,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC/D,EAAK+D,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC9D,EAAK8D,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC0B,EAAK1B,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC2B,EAAK3B,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC4B,EAAK5B,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAItCnG,GAHAgI,EAAK7B,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3BhE,GAAM,EAAMC,IAAO,IAC9BuF,GAHAM,EAAK9B,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3B/D,GAAM,EAAMD,IAAO,IAC9BgE,EAAE,IAAMnG,EACRmG,EAAE,IAAMwB,EACRxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACT3H,EAAI4H,GAAOvF,GAAM,EAAMwF,IAAO,IAC9BF,EAAIzF,GAAO2F,GAAM,EAAMxF,IAAO,IAC9B8D,EAAE,IAAMnG,EACRmG,EAAE,IAAMwB,EACRxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACT3H,EAAImC,GAAO2F,GAAM,EAAMC,IAAO,IAC9BJ,EAAIvF,GAAO2F,GAAM,EAAMD,IAAO,IAC9B3B,EAAE,IAAMnG,EACRmG,EAAE,IAAMwB,EACRxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACT3H,EAAIqC,GAAO2F,GAAM,EAAMC,IAAO,IAC9BN,EAAIE,GAAOI,GAAM,EAAMD,IAAO,IAC9B7B,EAAE,IAAMnG,EACRmG,EAAE,IAAMwB,EACRxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACT3H,EAAI8H,GAAOF,GAAM,EAAM1F,IAAO,IAC9ByF,EAAII,GAAO7F,GAAM,EAAM0F,IAAO,IAC9BzB,EAAE,IAAMnG,EACRmG,EAAE,IAAMwB,EACRxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EACTxB,EAAE,KAAOnG,EACTmG,EAAE,KAAOwB,EAETO,EAAK/B,EAAE,GACPgC,EAAKhC,EAAE,GACP+D,EAAO/D,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCgE,EAAOhE,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC6C,EAAO7C,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC8C,EAAO9C,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC6E,GAAO7E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC8E,GAAO9E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC2D,EAAO3D,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC4D,EAAO5D,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCmD,EAAOnD,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9BoD,EAAOpD,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9BiC,EAAMjC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCkC,EAAMlC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCiE,EAAOjE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCkE,EAAOlE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC+C,EAAO/C,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCgD,EAAOhD,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC+E,GAAO/E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCgF,GAAOhF,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCuE,GAAOvE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BwE,GAAOxE,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BqD,EAAOrD,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCsD,EAAOtD,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCmC,EAAMnC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCoC,EAAMpC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCmE,EAAOnE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCoE,EAAOpE,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCiD,EAAOjD,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCkD,EAAOlD,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCyC,EAAOzC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B0C,EAAO1C,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/ByE,GAAOzE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC0E,GAAO1E,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCuD,EAAOvD,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCwD,EAAOxD,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCqC,EAAMrC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCsC,EAAMtC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCqE,EAAOrE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCsE,EAAOtE,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC6D,EAAO7D,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B8D,EAAO9D,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B2C,EAAO3C,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC4C,EAAO5C,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC2E,GAAO3E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC4E,GAAO5E,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCyD,EAAOzD,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC0D,EAAO1D,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCuC,EAAMvC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCwC,EAAMxC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAEhCA,EAAE,GAAK+B,GAAOE,EAAKE,EACnBnC,EAAE,GAAKgC,GAAOE,EAAKE,EACnBpC,EAAE,IAAMyC,GAAQE,EAAME,EACtB7C,EAAE,IAAM0C,GAAQE,EAAME,EACtB9C,EAAE,IAAMmD,GAAQE,EAAME,EACtBvD,EAAE,IAAMoD,GAAQE,EAAME,EACtBxD,EAAE,IAAM6D,GAAQE,EAAME,EACtBjE,EAAE,IAAM8D,GAAQE,EAAME,EACtBlE,EAAE,IAAMuE,IAAQE,GAAME,GACtB3E,EAAE,IAAMwE,IAAQE,GAAME,GACtB5E,EAAE,GAAKiC,GAAOE,EAAKE,EACnBrC,EAAE,GAAKkC,GAAOE,EAAKE,EACnBtC,EAAE,IAAM2C,GAAQE,EAAME,EACtB/C,EAAE,IAAM4C,GAAQE,EAAME,EACtBhD,EAAE,IAAMqD,GAAQE,EAAME,EACtBzD,EAAE,IAAMsD,GAAQE,EAAME,EACtB1D,EAAE,IAAM+D,GAAQE,EAAME,EACtBnE,EAAE,IAAMgE,GAAQE,EAAME,EACtBpE,EAAE,IAAMyE,IAAQE,GAAME,GACtB7E,EAAE,IAAM0E,IAAQE,GAAME,GACtB9E,EAAE,GAAKmC,GAAOE,EAAKE,EACnBvC,EAAE,GAAKoC,GAAOE,EAAKE,EACnBxC,EAAE,IAAM6C,GAAQE,EAAME,EACtBjD,EAAE,IAAM8C,GAAQE,EAAME,EACtBlD,EAAE,IAAMuD,GAAQE,EAAME,EACtB3D,EAAE,IAAMwD,GAAQE,EAAME,EACtB5D,EAAE,IAAMiE,GAAQE,EAAME,EACtBrE,EAAE,IAAMkE,GAAQE,EAAME,EACtBtE,EAAE,IAAM2E,IAAQE,GAAME,GACtB/E,EAAE,IAAM4E,IAAQE,GAAME,GACtBhF,EAAE,GAAKqC,GAAOE,EAAKR,EACnB/B,EAAE,GAAKsC,GAAOE,EAAKR,EACnBhC,EAAE,IAAM+C,GAAQE,EAAMR,EACtBzC,EAAE,IAAMgD,GAAQE,EAAMR,EACtB1C,EAAE,IAAMyD,GAAQE,EAAMR,EACtBnD,EAAE,IAAM0D,GAAQE,EAAMR,EACtBpD,EAAE,IAAMmE,GAAQE,EAAMR,EACtB7D,EAAE,IAAMoE,GAAQE,EAAMR,EACtB9D,EAAE,IAAM6E,IAAQE,GAAMR,GACtBvE,EAAE,IAAM8E,IAAQE,GAAMR,GACtBxE,EAAE,GAAKuC,GAAOR,EAAKE,EACnBjC,EAAE,GAAKwC,GAAOR,EAAKE,EACnBlC,EAAE,IAAMiD,GAAQR,EAAME,EACtB3C,EAAE,IAAMkD,GAAQR,EAAME,EACtB5C,EAAE,IAAM2D,GAAQR,EAAME,EACtBrD,EAAE,IAAM4D,GAAQR,EAAME,EACtBtD,EAAE,IAAMqE,GAAQR,EAAME,EACtB/D,EAAE,IAAMsE,GAAQR,EAAME,EACtBhE,EAAE,IAAM+E,IAAQR,GAAME,GACtBzE,EAAE,IAAMgF,IAAQR,GAAME,GAEtB1E,EAAE,IAAMd,GAAGa,GACXC,EAAE,IAAMd,GAAGa,EAAI,EAEnB,EAGO,MAAMkF,GAAWhF,GAAkB,SAC7BiF,GAAWjF,GAAkB,SAC7BkF,GAAWlF,GAAkB,SAC7BmF,GAAWnF,GAAkB,SC/tB1C,IAAIoF,GAOJ,SAASC,GAAW1O,EAAGhH,EAAGC,GACf,MAAL+G,IACE,iBAAmBA,EAAGf,KAAK0P,WAAW3O,EAAGhH,EAAGC,GAClC,MAALD,GAAa,iBAAmBgH,EAAGf,KAAK2P,WAAW5O,EAAG,KAC1Df,KAAK2P,WAAW5O,EAAGhH,GAC5B,CAGA,SAAS6V,KACP,OAAO,IAAIH,GAAW,KACxB,CAoDA,IAAII,GAAiC,oBAAdC,UACnBD,IAA0C,+BAArBC,UAAUC,SACjCN,GAAWlhB,UAAUyhB,GAhCvB,SAAa7d,EAAG+Y,EAAGV,EAAGtQ,EAAGF,EAAGkQ,GAG1B,IAFA,IAAI+F,EAAS,MAAJ/E,EACPgF,EAAKhF,GAAK,KACHhB,GAAK,GAAG,CACf,IAAIyB,EAAc,MAAV3L,KAAK7N,GACT6R,EAAIhE,KAAK7N,MAAQ,GACjBge,EAAID,EAAKvE,EAAI3H,EAAIiM,EAErBjW,IADA2R,EAAIsE,EAAKtE,IAAU,MAAJwE,IAAe,IAAM3F,EAAEtQ,IAAU,WAAJF,MACjC,KAAOmW,IAAM,IAAMD,EAAKlM,GAAKhK,IAAM,IAC9CwQ,EAAEtQ,KAAW,WAAJyR,CACX,CACA,OAAO3R,CACT,EAqBEwV,GAAQ,IACCK,IAA0C,YAArBC,UAAUC,SACxCN,GAAWlhB,UAAUyhB,GA/CvB,SAAa7d,EAAG+Y,EAAGV,EAAGtQ,EAAGF,EAAGkQ,GAC1B,OAASA,GAAK,GAAG,CACf,IAAInZ,EAAIma,EAAIlL,KAAK7N,KAAOqY,EAAEtQ,GAAKF,EAC/BA,EAAI1G,KAAK0B,MAAMjE,EAAI,UACnByZ,EAAEtQ,KAAW,SAAJnJ,CACX,CACA,OAAOiJ,CACT,EAyCEwV,GAAQ,KAGRC,GAAWlhB,UAAUyhB,GAvBvB,SAAa7d,EAAG+Y,EAAGV,EAAGtQ,EAAGF,EAAGkQ,GAG1B,IAFA,IAAI+F,EAAS,MAAJ/E,EACPgF,EAAKhF,GAAK,KACHhB,GAAK,GAAG,CACf,IAAIyB,EAAc,MAAV3L,KAAK7N,GACT6R,EAAIhE,KAAK7N,MAAQ,GACjBge,EAAID,EAAKvE,EAAI3H,EAAIiM,EAErBjW,IADA2R,EAAIsE,EAAKtE,IAAU,MAAJwE,IAAe,IAAM3F,EAAEtQ,GAAKF,IACjC,KAAOmW,GAAK,IAAMD,EAAKlM,EACjCwG,EAAEtQ,KAAW,UAAJyR,CACX,CACA,OAAO3R,CACT,EAYEwV,GAAQ,IAGVC,GAAWlhB,UAAU6hB,GAAKZ,GAC1BC,GAAWlhB,UAAU8hB,IAAM,GAAKb,IAAS,EACzCC,GAAWlhB,UAAU+hB,GAAK,GAAKd,GAG/BC,GAAWlhB,UAAUgiB,GAAKjd,KAAKkd,IAAI,EADvB,IAEZf,GAAWlhB,UAAUkiB,GAFT,GAEsBjB,GAClCC,GAAWlhB,UAAUmiB,GAAK,EAAIlB,GAHlB,GAMZ,IAEImB,GAAIC,GAFJC,GAAQ,uCACRC,GAAQ,IAAI5hB,MAGhB,IADAyhB,GAAK,IAAI/W,WAAW,GACfgX,GAAK,EAAGA,IAAM,IAAKA,GAAIE,GAAMH,MAAQC,GAE1C,IADAD,GAAK,IAAI/W,WAAW,GACfgX,GAAK,GAAIA,GAAK,KAAMA,GAAIE,GAAMH,MAAQC,GAE3C,IADAD,GAAK,IAAI/W,WAAW,GACfgX,GAAK,GAAIA,GAAK,KAAMA,GAAIE,GAAMH,MAAQC,GAE3C,SAASG,GAAS7G,GAChB,OAAO2G,GAAM7iB,OAAOkc,EACtB,CAEA,SAAS8G,GAAM7G,EAAGhY,GAChB,IAAI6H,EAAI8W,GAAM3G,EAAEvQ,WAAWzH,IAC3B,OAAY,MAAL6H,GAAY,EAAKA,CAC1B,CAmBA,SAASiX,GAAI9e,GACX,IAAI+e,EAAItB,KAER,OADAsB,EAAEC,QAAQhf,GACH+e,CACT,CAiHA,SAASE,GAAMlG,GACb,IACE9I,EADE8O,EAAI,EAsBR,OApBsB,IAAjB9O,EAAI8I,IAAM,MACbA,EAAI9I,EACJ8O,GAAK,IAEa,IAAf9O,EAAI8I,GAAK,KACZA,EAAI9I,EACJ8O,GAAK,GAEa,IAAf9O,EAAI8I,GAAK,KACZA,EAAI9I,EACJ8O,GAAK,GAEa,IAAf9O,EAAI8I,GAAK,KACZA,EAAI9I,EACJ8O,GAAK,GAEa,IAAf9O,EAAI8I,GAAK,KACZA,EAAI9I,EACJ8O,GAAK,GAEAA,CACT,CAuMA,SAASG,GAAQlB,GACfnQ,KAAKmQ,EAAIA,CACX,CAyDA,SAASmB,GAAWnB,GAClBnQ,KAAKmQ,EAAIA,EACTnQ,KAAKuR,GAAKpB,EAAEqB,WACZxR,KAAKyR,IAAgB,MAAVzR,KAAKuR,GAChBvR,KAAK0R,IAAM1R,KAAKuR,IAAM,GACtBvR,KAAK2R,IAAM,GAAMxB,EAAEC,GAAK,IAAO,EAC/BpQ,KAAK4R,IAAM,EAAIzB,EAAE/N,CACnB,CAqTA,SAASyP,GAAO3G,EAAG4G,GACjB,OAAO5G,EAAI4G,CACb,CASA,SAASC,GAAM7G,EAAG4G,GAChB,OAAO5G,EAAI4G,CACb,CASA,SAASE,GAAO9G,EAAG4G,GACjB,OAAO5G,EAAI4G,CACb,CASA,SAASG,GAAU/G,EAAG4G,GACpB,OAAO5G,GAAK4G,CACd,CAkCA,SAASI,GAAKhH,GACZ,GAAS,GAALA,EAAQ,OAAO,EACnB,IAAIgG,EAAI,EAkBR,OAjBS,MAAJhG,IACHA,IAAM,GACNgG,GAAK,IAEE,IAAJhG,IACHA,IAAM,EACNgG,GAAK,GAEE,GAAJhG,IACHA,IAAM,EACNgG,GAAK,GAEE,EAAJhG,IACHA,IAAM,EACNgG,GAAK,GAEE,EAAJhG,KAAegG,EACbA,CACT,CAUA,SAASiB,GAAKjH,GAEZ,IADA,IAAIgG,EAAI,EACI,GAALhG,GACLA,GAAKA,EAAI,IACPgG,EAEJ,OAAOA,CACT,CA+IA,SAASkB,KAAW,CAEpB,SAASC,GAAKnH,GACZ,OAAOA,CACT,CA8CA,SAASoH,GAAQnC,GAEfnQ,KAAKuS,GAAK3C,KACV5P,KAAKwS,GAAK5C,KACVH,GAAWgD,IAAIC,UAAU,EAAIvC,EAAE/N,EAAGpC,KAAKuS,IACvCvS,KAAK2S,GAAK3S,KAAKuS,GAAGK,OAAOzC,GACzBnQ,KAAKmQ,EAAIA,CACX,CA/oBAkB,GAAQ9iB,UAAUskB,QAvBlB,SAAkB3H,GAChB,OAAIA,EAAEf,EAAI,GAAKe,EAAE4H,UAAU9S,KAAKmQ,IAAM,EAAUjF,EAAE6H,IAAI/S,KAAKmQ,GAC/CjF,CACd,EAqBAmG,GAAQ9iB,UAAUykB,OAnBlB,SAAiB9H,GACf,OAAOA,CACT,EAkBAmG,GAAQ9iB,UAAU2B,OAhBlB,SAAiBgb,GACfA,EAAE+H,SAASjT,KAAKmQ,EAAG,KAAMjF,EAC3B,EAeAmG,GAAQ9iB,UAAU2kB,MAblB,SAAgBhI,EAAG4G,EAAGZ,GACpBhG,EAAEiI,WAAWrB,EAAGZ,GAChBlR,KAAK9P,OAAOghB,EACd,EAWAG,GAAQ9iB,UAAU6kB,MATlB,SAAgBlI,EAAGgG,GACjBhG,EAAEmI,SAASnC,GACXlR,KAAK9P,OAAOghB,EACd,EA+FAI,GAAW/iB,UAAUskB,QAnDrB,SAAqB3H,GACnB,IAAIgG,EAAItB,KAIR,OAHA1E,EAAEoI,MAAMZ,UAAU1S,KAAKmQ,EAAE/N,EAAG8O,GAC5BA,EAAE+B,SAASjT,KAAKmQ,EAAG,KAAMe,GACrBhG,EAAEf,EAAI,GAAK+G,EAAE4B,UAAUrD,GAAW8D,MAAQ,GAAGvT,KAAKmQ,EAAEqD,MAAMtC,EAAGA,GAC1DA,CACT,EA8CAI,GAAW/iB,UAAUykB,OA3CrB,SAAoB9H,GAClB,IAAIgG,EAAItB,KAGR,OAFA1E,EAAE3C,OAAO2I,GACTlR,KAAK9P,OAAOghB,GACLA,CACT,EAuCAI,GAAW/iB,UAAU2B,OApCrB,SAAoBgb,GAClB,KAAOA,EAAE9I,GAAKpC,KAAK4R,KAEjB1G,EAAEA,EAAE9I,KAAO,EACb,IAAK,IAAIjQ,EAAI,EAAGA,EAAI6N,KAAKmQ,EAAE/N,IAAKjQ,EAAG,CAEjC,IAAI+H,EAAW,MAAPgR,EAAE/Y,GACNshB,EAAMvZ,EAAI8F,KAAKyR,MAASvX,EAAI8F,KAAK0R,KAAOxG,EAAE/Y,IAAM,IAAM6N,KAAKyR,IAAOzR,KAAK2R,KAAO,IAAOzG,EAAEmF,GAK3F,IAFAnF,EADAhR,EAAI/H,EAAI6N,KAAKmQ,EAAE/N,IACPpC,KAAKmQ,EAAEH,GAAG,EAAGyD,EAAIvI,EAAG/Y,EAAG,EAAG6N,KAAKmQ,EAAE/N,GAElC8I,EAAEhR,IAAMgR,EAAEoF,IACfpF,EAAEhR,IAAMgR,EAAEoF,GACVpF,IAAIhR,IAER,CACAgR,EAAEwI,QACFxI,EAAEyI,UAAU3T,KAAKmQ,EAAE/N,EAAG8I,GAClBA,EAAE4H,UAAU9S,KAAKmQ,IAAM,GAAGjF,EAAEsI,MAAMxT,KAAKmQ,EAAGjF,EAChD,EAiBAoG,GAAW/iB,UAAU2kB,MARrB,SAAmBhI,EAAG4G,EAAGZ,GACvBhG,EAAEiI,WAAWrB,EAAGZ,GAChBlR,KAAK9P,OAAOghB,EACd,EAMAI,GAAW/iB,UAAU6kB,MAfrB,SAAmBlI,EAAGgG,GACpBhG,EAAEmI,SAASnC,GACXlR,KAAK9P,OAAOghB,EACd,EAgDAzB,GAAWlhB,UAAUga,OApgBrB,SAAmB2I,GACjB,IAAK,IAAI/e,EAAI6N,KAAKoC,EAAI,EAAGjQ,GAAK,IAAKA,EAAG+e,EAAE/e,GAAK6N,KAAK7N,GAClD+e,EAAE9O,EAAIpC,KAAKoC,EACX8O,EAAE/G,EAAInK,KAAKmK,CACb,EAigBAsF,GAAWlhB,UAAU4iB,QA9frB,SAAoBjG,GAClBlL,KAAKoC,EAAI,EACTpC,KAAKmK,EAAIe,EAAI,GAAI,EAAK,EAClBA,EAAI,EAAGlL,KAAK,GAAKkL,EACZA,GAAI,EAAIlL,KAAK,GAAKkL,EAAIlL,KAAKsQ,GAC/BtQ,KAAKoC,EAAI,CAChB,EAyfAqN,GAAWlhB,UAAUohB,WA/erB,SAAuBxF,EAAGpQ,GACxB,IAAIjJ,EACJ,GAAS,IAALiJ,EAASjJ,EAAI,OACZ,GAAS,GAALiJ,EAAQjJ,EAAI,OAChB,GAAS,KAALiJ,EACPjJ,EAAI,OACD,GAAS,GAALiJ,EAAQjJ,EAAI,OAChB,GAAS,IAALiJ,EAASjJ,EAAI,MACjB,IAAS,GAALiJ,EAGP,YADAiG,KAAK4T,UAAUzJ,EAAGpQ,GAFHjJ,EAAI,CAIrB,CACAkP,KAAKoC,EAAI,EACTpC,KAAKmK,EAAI,EAIT,IAHA,IAAIhY,EAAIgY,EAAEhb,OACR0kB,GAAK,EACLC,EAAK,IACE3hB,GAAK,GAAG,CACf,IAAI+Y,EAAS,GAALpa,EAAgB,IAAPqZ,EAAEhY,GAAY6e,GAAM7G,EAAGhY,GACpC+Y,EAAI,EACa,KAAff,EAAEnc,OAAOmE,KAAW0hB,GAAK,IAG/BA,GAAK,EACK,GAANC,EAAS9T,KAAKA,KAAKoC,KAAO8I,EACrB4I,EAAKhjB,EAAIkP,KAAKoQ,IACrBpQ,KAAKA,KAAKoC,EAAI,KAAO8I,GAAM,GAAMlL,KAAKoQ,GAAK0D,GAAO,IAAOA,EACzD9T,KAAKA,KAAKoC,KAAO8I,GAAMlL,KAAKoQ,GAAK0D,GAC5B9T,KAAKA,KAAKoC,EAAI,IAAM8I,GAAK4I,GAChCA,GAAMhjB,IACIkP,KAAKoQ,KAAI0D,GAAM9T,KAAKoQ,IAChC,CACS,GAALtf,GAAkB,IAAPqZ,EAAE,KACfnK,KAAKmK,GAAI,EACL2J,EAAK,IAAG9T,KAAKA,KAAKoC,EAAI,KAAQ,GAAMpC,KAAKoQ,GAAK0D,GAAO,GAAMA,IAEjE9T,KAAK0T,QACDG,GAAIpE,GAAW8D,KAAKC,MAAMxT,KAAMA,KACtC,EAycAyP,GAAWlhB,UAAUmlB,MAtcrB,WAEE,IADA,IAAI1Z,EAAIgG,KAAKmK,EAAInK,KAAKqQ,GACfrQ,KAAKoC,EAAI,GAAKpC,KAAKA,KAAKoC,EAAI,IAAMpI,KAAKgG,KAAKoC,CACrD,EAocAqN,GAAWlhB,UAAUmkB,UAlWrB,SAAsBxI,EAAGgH,GACvB,IAAI/e,EACJ,IAAKA,EAAI6N,KAAKoC,EAAI,EAAGjQ,GAAK,IAAKA,EAAG+e,EAAE/e,EAAI+X,GAAKlK,KAAK7N,GAClD,IAAKA,EAAI+X,EAAI,EAAG/X,GAAK,IAAKA,EAAG+e,EAAE/e,GAAK,EACpC+e,EAAE9O,EAAIpC,KAAKoC,EAAI8H,EACfgH,EAAE/G,EAAInK,KAAKmK,CACb,EA6VAsF,GAAWlhB,UAAUolB,UA1VrB,SAAsBzJ,EAAGgH,GACvB,IAAK,IAAI/e,EAAI+X,EAAG/X,EAAI6N,KAAKoC,IAAKjQ,EAAG+e,EAAE/e,EAAI+X,GAAKlK,KAAK7N,GACjD+e,EAAE9O,EAAI9O,KAAKygB,IAAI/T,KAAKoC,EAAI8H,EAAG,GAC3BgH,EAAE/G,EAAInK,KAAKmK,CACb,EAuVAsF,GAAWlhB,UAAUylB,SApVrB,SAAqB9J,EAAGgH,GACtB,IAKE/e,EALE8hB,EAAK/J,EAAIlK,KAAKoQ,GACd8D,EAAMlU,KAAKoQ,GAAK6D,EAChBE,GAAM,GAAKD,GAAO,EAClBE,EAAK9gB,KAAK0B,MAAMkV,EAAIlK,KAAKoQ,IAC3BpW,EAAKgG,KAAKmK,GAAK8J,EAAMjU,KAAKqQ,GAE5B,IAAKle,EAAI6N,KAAKoC,EAAI,EAAGjQ,GAAK,IAAKA,EAC7B+e,EAAE/e,EAAIiiB,EAAK,GAAMpU,KAAK7N,IAAM+hB,EAAOla,EACnCA,GAAKgG,KAAK7N,GAAKgiB,IAAOF,EAExB,IAAK9hB,EAAIiiB,EAAK,EAAGjiB,GAAK,IAAKA,EAAG+e,EAAE/e,GAAK,EACrC+e,EAAEkD,GAAMpa,EACRkX,EAAE9O,EAAIpC,KAAKoC,EAAIgS,EAAK,EACpBlD,EAAE/G,EAAInK,KAAKmK,EACX+G,EAAEwC,OACJ,EAqUAjE,GAAWlhB,UAAU8lB,SAlUrB,SAAqBnK,EAAGgH,GACtBA,EAAE/G,EAAInK,KAAKmK,EACX,IAAIiK,EAAK9gB,KAAK0B,MAAMkV,EAAIlK,KAAKoQ,IAC7B,GAAIgE,GAAMpU,KAAKoC,EACb8O,EAAE9O,EAAI,MADR,CAIA,IAAI6R,EAAK/J,EAAIlK,KAAKoQ,GACd8D,EAAMlU,KAAKoQ,GAAK6D,EAChBE,GAAM,GAAKF,GAAM,EACrB/C,EAAE,GAAKlR,KAAKoU,IAAOH,EACnB,IAAK,IAAI9hB,EAAIiiB,EAAK,EAAGjiB,EAAI6N,KAAKoC,IAAKjQ,EACjC+e,EAAE/e,EAAIiiB,EAAK,KAAOpU,KAAK7N,GAAKgiB,IAAOD,EACnChD,EAAE/e,EAAIiiB,GAAMpU,KAAK7N,IAAM8hB,EAErBA,EAAK,IAAG/C,EAAElR,KAAKoC,EAAIgS,EAAK,KAAOpU,KAAKmK,EAAIgK,IAAOD,GACnDhD,EAAE9O,EAAIpC,KAAKoC,EAAIgS,EACflD,EAAEwC,OAXF,CAYF,EAiTAjE,GAAWlhB,UAAUilB,MA9SrB,SAAkBzS,EAAGmQ,GAInB,IAHA,IAAI/e,EAAI,EACN6H,EAAI,EACJmW,EAAI7c,KAAKghB,IAAIvT,EAAEqB,EAAGpC,KAAKoC,GAClBjQ,EAAIge,GACTnW,GAAKgG,KAAK7N,GAAK4O,EAAE5O,GACjB+e,EAAE/e,KAAO6H,EAAIgG,KAAKqQ,GAClBrW,IAAMgG,KAAKoQ,GAEb,GAAIrP,EAAEqB,EAAIpC,KAAKoC,EAAG,CAEhB,IADApI,GAAK+G,EAAEoJ,EACAhY,EAAI6N,KAAKoC,GACdpI,GAAKgG,KAAK7N,GACV+e,EAAE/e,KAAO6H,EAAIgG,KAAKqQ,GAClBrW,IAAMgG,KAAKoQ,GAEbpW,GAAKgG,KAAKmK,CACZ,KAAO,CAEL,IADAnQ,GAAKgG,KAAKmK,EACHhY,EAAI4O,EAAEqB,GACXpI,GAAK+G,EAAE5O,GACP+e,EAAE/e,KAAO6H,EAAIgG,KAAKqQ,GAClBrW,IAAMgG,KAAKoQ,GAEbpW,GAAK+G,EAAEoJ,CACT,CACA+G,EAAE/G,EAAInQ,EAAI,GAAI,EAAK,EACfA,GAAI,EAAIkX,EAAE/e,KAAO6N,KAAKsQ,GAAKtW,EACtBA,EAAI,IAAGkX,EAAE/e,KAAO6H,GACzBkX,EAAE9O,EAAIjQ,EACN+e,EAAEwC,OACJ,EAgRAjE,GAAWlhB,UAAU4kB,WA5QrB,SAAuBpS,EAAGmQ,GACxB,IAAIhG,EAAIlL,KAAKsT,MACXxB,EAAI/Q,EAAEuS,MACJnhB,EAAI+Y,EAAE9I,EAEV,IADA8O,EAAE9O,EAAIjQ,EAAI2f,EAAE1P,IACHjQ,GAAK,GAAG+e,EAAE/e,GAAK,EACxB,IAAKA,EAAI,EAAGA,EAAI2f,EAAE1P,IAAKjQ,EAAG+e,EAAE/e,EAAI+Y,EAAE9I,GAAK8I,EAAE8E,GAAG,EAAG8B,EAAE3f,GAAI+e,EAAG/e,EAAG,EAAG+Y,EAAE9I,GAChE8O,EAAE/G,EAAI,EACN+G,EAAEwC,QACE1T,KAAKmK,GAAKpJ,EAAEoJ,GAAGsF,GAAW8D,KAAKC,MAAMtC,EAAGA,EAC9C,EAmQAzB,GAAWlhB,UAAU8kB,SAhQrB,SAAqBnC,GAGnB,IAFA,IAAIhG,EAAIlL,KAAKsT,MACTnhB,EAAK+e,EAAE9O,EAAI,EAAI8I,EAAE9I,IACZjQ,GAAK,GAAG+e,EAAE/e,GAAK,EACxB,IAAKA,EAAI,EAAGA,EAAI+Y,EAAE9I,EAAI,IAAKjQ,EAAG,CAC5B,IAAI6H,EAAIkR,EAAE8E,GAAG7d,EAAG+Y,EAAE/Y,GAAI+e,EAAG,EAAI/e,EAAG,EAAG,IAC9B+e,EAAE/e,EAAI+Y,EAAE9I,IAAM8I,EAAE8E,GAAG7d,EAAI,EAAG,EAAI+Y,EAAE/Y,GAAI+e,EAAG,EAAI/e,EAAI,EAAG6H,EAAGkR,EAAE9I,EAAIjQ,EAAI,KAAO+Y,EAAEoF,KAC3EY,EAAE/e,EAAI+Y,EAAE9I,IAAM8I,EAAEoF,GAChBY,EAAE/e,EAAI+Y,EAAE9I,EAAI,GAAK,EAErB,CACI8O,EAAE9O,EAAI,IAAG8O,EAAEA,EAAE9O,EAAI,IAAM8I,EAAE8E,GAAG7d,EAAG+Y,EAAE/Y,GAAI+e,EAAG,EAAI/e,EAAG,EAAG,IACtD+e,EAAE/G,EAAI,EACN+G,EAAEwC,OACJ,EAmPAjE,GAAWlhB,UAAU0kB,SA/OrB,SAAqB9C,EAAGoE,EAAGrD,GACzB,IAAIsD,EAAKrE,EAAEmD,MACX,KAAIkB,EAAGpS,GAAK,GAAZ,CACA,IAAIqS,EAAKzU,KAAKsT,MACd,GAAImB,EAAGrS,EAAIoS,EAAGpS,EAGZ,OAFS,MAALmS,GAAWA,EAAEpD,QAAQ,QAChB,MAALD,GAAWlR,KAAKuI,OAAO2I,IAGpB,MAALA,IAAWA,EAAItB,MACnB,IAAIkC,EAAIlC,KACN8E,EAAK1U,KAAKmK,EACVwK,EAAKxE,EAAEhG,EACLyK,EAAM5U,KAAKoQ,GAAKgB,GAAMoD,EAAGA,EAAGpS,EAAI,IAChCwS,EAAM,GACRJ,EAAGR,SAASY,EAAK9C,GACjB2C,EAAGT,SAASY,EAAK1D,KAEjBsD,EAAGjM,OAAOuJ,GACV2C,EAAGlM,OAAO2I,IAEZ,IAAI2D,EAAK/C,EAAE1P,EACP0S,EAAKhD,EAAE+C,EAAK,GAChB,GAAU,GAANC,EAAJ,CACA,IAAIC,EAAKD,GAAM,GAAK9U,KAAKyQ,KAAOoE,EAAK,EAAI/C,EAAE+C,EAAK,IAAM7U,KAAK0Q,GAAK,GAC5DsE,EAAKhV,KAAKuQ,GAAKwE,EACjBE,GAAM,GAAKjV,KAAKyQ,IAAMsE,EACtB1S,EAAI,GAAKrC,KAAK0Q,GACZve,EAAI+e,EAAE9O,EACRlI,EAAI/H,EAAI0iB,EACRzS,EAAS,MAALmS,EAAY3E,KAAQ2E,EAQ1B,IAPAzC,EAAEY,UAAUxY,EAAGkI,GACX8O,EAAE4B,UAAU1Q,IAAM,IACpB8O,EAAEA,EAAE9O,KAAO,EACX8O,EAAEsC,MAAMpR,EAAG8O,IAEbzB,GAAWgD,IAAIC,UAAUmC,EAAIzS,GAC7BA,EAAEoR,MAAM1B,EAAGA,GACJA,EAAE1P,EAAIyS,GAAI/C,EAAEA,EAAE1P,KAAO,EAC5B,OAASlI,GAAK,GAAG,CAEf,IAAIgb,EAAKhE,IAAI/e,IAAM2iB,EAAK9U,KAAKqQ,GAAK/c,KAAK0B,MAAMkc,EAAE/e,GAAK6iB,GAAM9D,EAAE/e,EAAI,GAAKkQ,GAAK4S,GAC1E,IAAK/D,EAAE/e,IAAM2f,EAAE9B,GAAG,EAAGkF,EAAIhE,EAAGhX,EAAG,EAAG2a,IAAOK,EAIvC,IAFApD,EAAEY,UAAUxY,EAAGkI,GACf8O,EAAEsC,MAAMpR,EAAG8O,GACJA,EAAE/e,KAAO+iB,GAAIhE,EAAEsC,MAAMpR,EAAG8O,EAEnC,CACS,MAALqD,IACFrD,EAAEyC,UAAUkB,EAAIN,GACZG,GAAMC,GAAIlF,GAAW8D,KAAKC,MAAMe,EAAGA,IAEzCrD,EAAE9O,EAAIyS,EACN3D,EAAEwC,QACEkB,EAAM,GAAG1D,EAAEmD,SAASO,EAAK1D,GACzBwD,EAAK,GAAGjF,GAAW8D,KAAKC,MAAMtC,EAAGA,EAjCxB,CArBE,CAuDjB,EAuLAzB,GAAWlhB,UAAUijB,SAjIrB,WACE,GAAIxR,KAAKoC,EAAI,EAAG,OAAO,EACvB,IAAI8I,EAAIlL,KAAK,GACb,KAAS,EAAJkL,GAAa,OAAO,EACzB,IAAI4G,EAAQ,EAAJ5G,EAQR,OAFA4G,GAHAA,GADAA,GADAA,EAAKA,GAAK,GAAS,GAAJ5G,GAAW4G,GAAM,KACtB,GAAS,IAAJ5G,GAAY4G,GAAM,MACvB,IAAW,MAAJ5G,GAAc4G,EAAK,QAAY,QAGtC,EAAM5G,EAAI4G,EAAK9R,KAAKsQ,IAAQtQ,KAAKsQ,IAEhC,EAAItQ,KAAKsQ,GAAKwB,GAAKA,CAChC,EAqHArC,GAAWlhB,UAAU4mB,OA9CrB,WACE,OAA8C,IAAtCnV,KAAKoC,EAAI,EAAc,EAAVpC,KAAK,GAASA,KAAKmK,EAC1C,EA6CAsF,GAAWlhB,UAAU6mB,IA1CrB,SAAgB/S,EAAGgT,GACjB,GAAIhT,EAAI,YAAcA,EAAI,EAAG,OAAOoN,GAAWgD,IAC/C,IAAIvB,EAAItB,KACN2C,EAAK3C,KACL7L,EAAIsR,EAAExC,QAAQ7S,MACd7N,EAAIif,GAAM/O,GAAK,EAEjB,IADA0B,EAAEwE,OAAO2I,KACA/e,GAAK,GAEZ,GADAkjB,EAAEjC,MAAMlC,EAAGqB,IACNlQ,EAAK,GAAKlQ,GAAM,EAAGkjB,EAAEnC,MAAMX,EAAIxO,EAAGmN,OAClC,CACH,IAAI9O,EAAI8O,EACRA,EAAIqB,EACJA,EAAKnQ,CACP,CAEF,OAAOiT,EAAErC,OAAO9B,EAClB,EA4BAzB,GAAWlhB,UAAUC,SA9crB,SAAoBuL,GAClB,GAAIiG,KAAKmK,EAAI,EAAG,MAAO,IAAMnK,KAAKsV,SAAS9mB,SAASuL,GACpD,IAAIjJ,EACJ,GAAS,IAALiJ,EAASjJ,EAAI,OACZ,GAAS,GAALiJ,EAAQjJ,EAAI,OAChB,GAAS,GAALiJ,EAAQjJ,EAAI,OAChB,GAAS,IAALiJ,EAASjJ,EAAI,MACjB,IAAS,GAALiJ,EACJ,OAAOiG,KAAKuV,QAAQxb,GADRjJ,EAAI,CACM,CAC3B,IACEkQ,EADEwU,GAAM,GAAK1kB,GAAK,EAElBqf,GAAI,EACJe,EAAI,GACJ/e,EAAI6N,KAAKoC,EACPqT,EAAIzV,KAAKoQ,GAAOje,EAAI6N,KAAKoQ,GAAMtf,EACnC,GAAIqB,KAAM,EAKR,IAJIsjB,EAAIzV,KAAKoQ,KAAOpP,EAAIhB,KAAK7N,IAAMsjB,GAAK,IACtCtF,GAAI,EACJe,EAAIH,GAAS/P,IAER7O,GAAK,GACNsjB,EAAI3kB,GACNkQ,GAAKhB,KAAK7N,IAAO,GAAKsjB,GAAK,IAAQ3kB,EAAI2kB,EACvCzU,GAAKhB,OAAO7N,KAAOsjB,GAAKzV,KAAKoQ,GAAKtf,KAElCkQ,EAAKhB,KAAK7N,KAAOsjB,GAAK3kB,GAAM0kB,EACxBC,GAAK,IACPA,GAAKzV,KAAKoQ,KACRje,IAGF6O,EAAI,IAAGmP,GAAI,GACXA,IAAGe,GAAKH,GAAS/P,IAGzB,OAAOmP,EAAIe,EAAI,GACjB,EA2aAzB,GAAWlhB,UAAU+mB,OAxarB,WACE,IAAIpE,EAAItB,KAER,OADAH,GAAW8D,KAAKC,MAAMxT,KAAMkR,GACrBA,CACT,EAqaAzB,GAAWlhB,UAAU+kB,IAlarB,WACE,OAAOtT,KAAKmK,EAAI,EAAInK,KAAKsV,SAAWtV,IACtC,EAiaAyP,GAAWlhB,UAAUukB,UA9ZrB,SAAqB/R,GACnB,IAAImQ,EAAIlR,KAAKmK,EAAIpJ,EAAEoJ,EACnB,GAAS,GAAL+G,EAAQ,OAAOA,EACnB,IAAI/e,EAAI6N,KAAKoC,EAEb,GAAS,IADT8O,EAAI/e,EAAI4O,EAAEqB,GACE,OAAOpC,KAAKmK,EAAI,GAAK+G,EAAIA,EACrC,OAAS/e,GAAK,MAA+B,IAAvB+e,EAAIlR,KAAK7N,GAAK4O,EAAE5O,IAAU,OAAO+e,EACvD,OAAO,CACT,EAuZAzB,GAAWlhB,UAAUmnB,UAzXrB,WACE,OAAI1V,KAAKoC,GAAK,EAAU,EACjBpC,KAAKoQ,IAAMpQ,KAAKoC,EAAI,GAAKgP,GAAMpR,KAAKA,KAAKoC,EAAI,GAAMpC,KAAKmK,EAAInK,KAAKqQ,GAC1E,EAuXAZ,GAAWlhB,UAAUwkB,IA9LrB,SAAehS,GACb,IAAImQ,EAAItB,KAGR,OAFA5P,KAAKsT,MAAML,SAASlS,EAAG,KAAMmQ,GACzBlR,KAAKmK,EAAI,GAAK+G,EAAE4B,UAAUrD,GAAW8D,MAAQ,GAAGxS,EAAEyS,MAAMtC,EAAGA,GACxDA,CACT,EA0LAzB,GAAWlhB,UAAUonB,UA/BrB,SAAqBtT,EAAG8N,GACtB,IAAIkF,EAGJ,OAF2BA,EAAvBhT,EAAI,KAAO8N,EAAEgF,SAAc,IAAI9D,GAAQlB,GAClC,IAAImB,GAAWnB,GACjBnQ,KAAKoV,IAAI/S,EAAGgT,EACrB,EA6BA5F,GAAW8D,KAAOtC,GAAI,GACtBxB,GAAWgD,IAAMxB,GAAI,GAocrBmB,GAAQ7jB,UAAUskB,QAAUR,GAC5BD,GAAQ7jB,UAAUykB,OAASX,GAC3BD,GAAQ7jB,UAAU2kB,MAVlB,SAAgBhI,EAAG4G,EAAGZ,GACpBhG,EAAEiI,WAAWrB,EAAGZ,EAClB,EASAkB,GAAQ7jB,UAAU6kB,MAPlB,SAAgBlI,EAAGgG,GACjBhG,EAAEmI,SAASnC,EACb,EAwFAoB,GAAQ/jB,UAAUskB,QAzClB,SAAwB3H,GACtB,GAAIA,EAAEf,EAAI,GAAKe,EAAE9I,EAAI,EAAIpC,KAAKmQ,EAAE/N,EAAG,OAAO8I,EAAE6H,IAAI/S,KAAKmQ,GAChD,GAAIjF,EAAE4H,UAAU9S,KAAKmQ,GAAK,EAAG,OAAOjF,EAEvC,IAAIgG,EAAItB,KAGR,OAFA1E,EAAE3C,OAAO2I,GACTlR,KAAK9P,OAAOghB,GACLA,CAEX,EAiCAoB,GAAQ/jB,UAAUykB,OA/BlB,SAAuB9H,GACrB,OAAOA,CACT,EA8BAoH,GAAQ/jB,UAAU2B,OA3BlB,SAAuBgb,GAQrB,IAPAA,EAAEyI,UAAU3T,KAAKmQ,EAAE/N,EAAI,EAAGpC,KAAKuS,IAC3BrH,EAAE9I,EAAIpC,KAAKmQ,EAAE/N,EAAI,IACnB8I,EAAE9I,EAAIpC,KAAKmQ,EAAE/N,EAAI,EACjB8I,EAAEwI,SAEJ1T,KAAK2S,GAAGiD,gBAAgB5V,KAAKuS,GAAIvS,KAAKmQ,EAAE/N,EAAI,EAAGpC,KAAKwS,IACpDxS,KAAKmQ,EAAE0F,gBAAgB7V,KAAKwS,GAAIxS,KAAKmQ,EAAE/N,EAAI,EAAGpC,KAAKuS,IAC5CrH,EAAE4H,UAAU9S,KAAKuS,IAAM,GAAGrH,EAAE4K,WAAW,EAAG9V,KAAKmQ,EAAE/N,EAAI,GAE5D,IADA8I,EAAEsI,MAAMxT,KAAKuS,GAAIrH,GACVA,EAAE4H,UAAU9S,KAAKmQ,IAAM,GAAGjF,EAAEsI,MAAMxT,KAAKmQ,EAAGjF,EACnD,EAiBAoH,GAAQ/jB,UAAU2kB,MARlB,SAAsBhI,EAAG4G,EAAGZ,GAC1BhG,EAAEiI,WAAWrB,EAAGZ,GAChBlR,KAAK9P,OAAOghB,EACd,EAMAoB,GAAQ/jB,UAAU6kB,MAflB,SAAsBlI,EAAGgG,GACvBhG,EAAEmI,SAASnC,GACXlR,KAAK9P,OAAOghB,EACd,EAmMA,IAgII6E,GACAC,GACAC,GAlIAC,GAAY,CACd,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAC/G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,KAEEC,IAAS,GAAK,IAAMD,GAAUA,GAAU/mB,OAAS,GAoIrD,SAASinB,KATT,IAAsBlL,KAUP,IAAI3b,MAAOwC,UATxBikB,GAASC,OAAmB,IAAJ/K,EACxB8K,GAASC,OAAgB/K,GAAK,EAAK,IACnC8K,GAASC,OAAgB/K,GAAK,GAAM,IACpC8K,GAASC,OAAgB/K,GAAK,GAAM,IAChC+K,IAAYI,KAAWJ,IAAYI,GAMzC,CAGA,GAzFA5G,GAAWlhB,UAAU+nB,UAvuBrB,SAAsBpF,GACpB,OAAO5d,KAAK0B,MAAO1B,KAAKijB,IAAMvW,KAAKoQ,GAAM9c,KAAKkjB,IAAItF,GACpD,EAsuBAzB,GAAWlhB,UAAUgnB,QA5tBrB,SAAoBxb,GAElB,GADS,MAALA,IAAWA,EAAI,IACE,GAAjBiG,KAAKyW,UAAiB1c,EAAI,GAAKA,EAAI,GAAI,MAAO,IAClD,IAAI2c,EAAK1W,KAAKsW,UAAUvc,GACpBgH,EAAIzN,KAAKkd,IAAIzW,EAAG2c,GAChB1V,EAAIiQ,GAAIlQ,GACV+Q,EAAIlC,KACJyF,EAAIzF,KACJsB,EAAI,GAEN,IADAlR,KAAKiT,SAASjS,EAAG8Q,EAAGuD,GACbvD,EAAE2E,SAAW,GAClBvF,GAAKnQ,EAAIsU,EAAEsB,YAAYnoB,SAASuL,GAAGiD,OAAO,GAAKkU,EAC/CY,EAAEmB,SAASjS,EAAG8Q,EAAGuD,GAEnB,OAAOA,EAAEsB,WAAWnoB,SAASuL,GAAKmX,CACpC,EA8sBAzB,GAAWlhB,UAAUqlB,UA3sBrB,SAAsBzJ,EAAGpQ,GACvBiG,KAAKmR,QAAQ,GACJ,MAALpX,IAAWA,EAAI,IAMnB,IALA,IAAI2c,EAAK1W,KAAKsW,UAAUvc,GACpBiH,EAAI1N,KAAKkd,IAAIzW,EAAG2c,GAClB7C,GAAK,EACL3Z,EAAI,EACJsQ,EAAI,EACGrY,EAAI,EAAGA,EAAIgY,EAAEhb,SAAUgD,EAAG,CACjC,IAAI+Y,EAAI8F,GAAM7G,EAAGhY,GACb+Y,EAAI,EACa,KAAff,EAAEnc,OAAOmE,IAA8B,GAAjB6N,KAAKyW,WAAe5C,GAAK,IAGrDrJ,EAAIzQ,EAAIyQ,EAAIU,IACNhR,GAAKwc,IACT1W,KAAK4W,UAAU5V,GACfhB,KAAK8V,WAAWtL,EAAG,GACnBtQ,EAAI,EACJsQ,EAAI,GAER,CACItQ,EAAI,IACN8F,KAAK4W,UAAUtjB,KAAKkd,IAAIzW,EAAGG,IAC3B8F,KAAK8V,WAAWtL,EAAG,IAEjBqJ,GAAIpE,GAAW8D,KAAKC,MAAMxT,KAAMA,KACtC,EAirBAyP,GAAWlhB,UAAUmhB,WA9qBrB,SAAuB3O,EAAGhH,EAAGC,GAC3B,GAAI,iBAAmBD,EAErB,GAAIgH,EAAI,EAAGf,KAAKmR,QAAQ,QAOtB,IALAnR,KAAK0P,WAAW3O,EAAG/G,GACdgG,KAAK6W,QAAQ9V,EAAI,IAEpBf,KAAK8W,UAAUrH,GAAWgD,IAAIsE,UAAUhW,EAAI,GAAIgR,GAAO/R,MACrDA,KAAKmV,UAAUnV,KAAK8V,WAAW,EAAG,IAC9B9V,KAAKgX,gBAAgBjd,IAC3BiG,KAAK8V,WAAW,EAAG,GACf9V,KAAK0V,YAAc3U,GAAGf,KAAKwT,MAAM/D,GAAWgD,IAAIsE,UAAUhW,EAAI,GAAIf,UAGrE,CAEL,IAAIkL,EAAI,IAAIhc,MACVkT,EAAQ,EAAJrB,EACNmK,EAAE/b,OAAoB,GAAV4R,GAAK,GACjBhH,EAAEkd,UAAU/L,GACR9I,EAAI,EAAG8I,EAAE,KAAO,GAAK9I,GAAK,EACzB8I,EAAE,GAAK,EACZlL,KAAK2P,WAAWzE,EAAG,IACrB,CACF,EAspBAuE,GAAWlhB,UAAUuoB,UA1mBrB,SAAsB/V,EAAGmW,EAAIhG,GAC3B,IAAI/e,EACF2R,EACAqM,EAAI7c,KAAKghB,IAAIvT,EAAEqB,EAAGpC,KAAKoC,GACzB,IAAKjQ,EAAI,EAAGA,EAAIge,IAAKhe,EAAG+e,EAAE/e,GAAK+kB,EAAGlX,KAAK7N,GAAI4O,EAAE5O,IAC7C,GAAI4O,EAAEqB,EAAIpC,KAAKoC,EAAG,CAEhB,IADA0B,EAAI/C,EAAEoJ,EAAInK,KAAKqQ,GACVle,EAAIge,EAAGhe,EAAI6N,KAAKoC,IAAKjQ,EAAG+e,EAAE/e,GAAK+kB,EAAGlX,KAAK7N,GAAI2R,GAChDoN,EAAE9O,EAAIpC,KAAKoC,CACb,KAAO,CAEL,IADA0B,EAAI9D,KAAKmK,EAAInK,KAAKqQ,GACble,EAAIge,EAAGhe,EAAI4O,EAAEqB,IAAKjQ,EAAG+e,EAAE/e,GAAK+kB,EAAGpT,EAAG/C,EAAE5O,IACzC+e,EAAE9O,EAAIrB,EAAEqB,CACV,CACA8O,EAAE/G,EAAI+M,EAAGlX,KAAKmK,EAAGpJ,EAAEoJ,GACnB+G,EAAEwC,OACJ,EA2lBAjE,GAAWlhB,UAAU4oB,UA3drB,SAAsBjN,EAAGgN,GACvB,IAAIhG,EAAIzB,GAAWgD,IAAIsE,UAAU7M,GAEjC,OADAlK,KAAK8W,UAAU5F,EAAGgG,EAAIhG,GACfA,CACT,EAwdAzB,GAAWlhB,UAAU6oB,MAtcrB,SAAkBrW,EAAGmQ,GAInB,IAHA,IAAI/e,EAAI,EACN6H,EAAI,EACJmW,EAAI7c,KAAKghB,IAAIvT,EAAEqB,EAAGpC,KAAKoC,GAClBjQ,EAAIge,GACTnW,GAAKgG,KAAK7N,GAAK4O,EAAE5O,GACjB+e,EAAE/e,KAAO6H,EAAIgG,KAAKqQ,GAClBrW,IAAMgG,KAAKoQ,GAEb,GAAIrP,EAAEqB,EAAIpC,KAAKoC,EAAG,CAEhB,IADApI,GAAK+G,EAAEoJ,EACAhY,EAAI6N,KAAKoC,GACdpI,GAAKgG,KAAK7N,GACV+e,EAAE/e,KAAO6H,EAAIgG,KAAKqQ,GAClBrW,IAAMgG,KAAKoQ,GAEbpW,GAAKgG,KAAKmK,CACZ,KAAO,CAEL,IADAnQ,GAAKgG,KAAKmK,EACHhY,EAAI4O,EAAEqB,GACXpI,GAAK+G,EAAE5O,GACP+e,EAAE/e,KAAO6H,EAAIgG,KAAKqQ,GAClBrW,IAAMgG,KAAKoQ,GAEbpW,GAAK+G,EAAEoJ,CACT,CACA+G,EAAE/G,EAAInQ,EAAI,GAAI,EAAK,EACfA,EAAI,EAAGkX,EAAE/e,KAAO6H,EACXA,GAAI,IAAIkX,EAAE/e,KAAO6N,KAAKsQ,GAAKtW,GACpCkX,EAAE9O,EAAIjQ,EACN+e,EAAEwC,OACJ,EAwaAjE,GAAWlhB,UAAUqoB,UAnXrB,SAAsB1M,GACpBlK,KAAKA,KAAKoC,GAAKpC,KAAKgQ,GAAG,EAAG9F,EAAI,EAAGlK,KAAM,EAAG,EAAGA,KAAKoC,KAChDpC,KAAKoC,EACPpC,KAAK0T,OACP,EAgXAjE,GAAWlhB,UAAUunB,WA7WrB,SAAuB5L,EAAGM,GACxB,GAAS,GAALN,EAAJ,CACA,KAAOlK,KAAKoC,GAAKoI,GAAGxK,KAAKA,KAAKoC,KAAO,EAErC,IADApC,KAAKwK,IAAMN,EACJlK,KAAKwK,IAAMxK,KAAKsQ,IACrBtQ,KAAKwK,IAAMxK,KAAKsQ,KACV9F,GAAKxK,KAAKoC,IAAGpC,KAAKA,KAAKoC,KAAO,KAClCpC,KAAKwK,EANG,CAQd,EAqWAiF,GAAWlhB,UAAUsnB,gBAxUrB,SAA4B9U,EAAGmJ,EAAGgH,GAChC,IAIIhX,EAJA/H,EAAImB,KAAKghB,IAAItU,KAAKoC,EAAIrB,EAAEqB,EAAG8H,GAG/B,IAFAgH,EAAE/G,EAAI,EACN+G,EAAE9O,EAAIjQ,EACCA,EAAI,GAAG+e,IAAI/e,GAAK,EAEvB,IAAK+H,EAAIgX,EAAE9O,EAAIpC,KAAKoC,EAAGjQ,EAAI+H,IAAK/H,EAAG+e,EAAE/e,EAAI6N,KAAKoC,GAAKpC,KAAKgQ,GAAG,EAAGjP,EAAE5O,GAAI+e,EAAG/e,EAAG,EAAG6N,KAAKoC,GAClF,IAAKlI,EAAI5G,KAAKghB,IAAIvT,EAAEqB,EAAG8H,GAAI/X,EAAI+H,IAAK/H,EAAG6N,KAAKgQ,GAAG,EAAGjP,EAAE5O,GAAI+e,EAAG/e,EAAG,EAAG+X,EAAI/X,GACrE+e,EAAEwC,OACJ,EAgUAjE,GAAWlhB,UAAUqnB,gBA5TrB,SAA4B7U,EAAGmJ,EAAGgH,KAC9BhH,EACF,IAAI/X,EAAK+e,EAAE9O,EAAIpC,KAAKoC,EAAIrB,EAAEqB,EAAI8H,EAE9B,IADAgH,EAAE/G,EAAI,IACGhY,GAAK,GAAG+e,EAAE/e,GAAK,EACxB,IAAKA,EAAImB,KAAKygB,IAAI7J,EAAIlK,KAAKoC,EAAG,GAAIjQ,EAAI4O,EAAEqB,IAAKjQ,EAAG+e,EAAElR,KAAKoC,EAAIjQ,EAAI+X,GAAKlK,KAAKgQ,GAAG9F,EAAI/X,EAAG4O,EAAE5O,GAAI+e,EAAG,EAAG,EAAGlR,KAAKoC,EAAIjQ,EAAI+X,GAC/GgH,EAAEwC,QACFxC,EAAEyC,UAAU,EAAGzC,EACjB,EAqTAzB,GAAWlhB,UAAU8oB,OAlIrB,SAAmBnN,GACjB,GAAIA,GAAK,EAAG,OAAO,EACnB,IAAIlJ,EAAIhB,KAAKsQ,GAAKpG,EAChBgH,EAAIlR,KAAKmK,EAAI,EAAID,EAAI,EAAI,EAC3B,GAAIlK,KAAKoC,EAAI,EACX,GAAS,GAALpB,EAAQkQ,EAAIlR,KAAK,GAAKkK,OACrB,IAAK,IAAI/X,EAAI6N,KAAKoC,EAAI,EAAGjQ,GAAK,IAAKA,EAAG+e,GAAKlQ,EAAIkQ,EAAIlR,KAAK7N,IAAM+X,EACrE,OAAOgH,CACT,EA2HAzB,GAAWlhB,UAAU+oB,YArCrB,SAAwBlV,GACtB,IAAImV,EAAKvX,KAAKwX,SAAS/H,GAAWgD,KAC9B3hB,EAAIymB,EAAGE,kBACX,GAAI3mB,GAAK,EAAG,OAAO,EACnB,IAAIogB,EAAIqG,EAAGG,WAAW5mB,IACtBsR,EAAKA,EAAI,GAAM,GACP8T,GAAU/mB,SAAQiT,EAAI8T,GAAU/mB,QAExC,IADA,IAAI4R,EAAI6O,KACCzd,EAAI,EAAGA,EAAIiQ,IAAKjQ,EAAG,CAE1B4O,EAAEoQ,QAAQ+E,GAAU5iB,KAAK0B,MAAM1B,KAAKqkB,SAAWzB,GAAU/mB,UACzD,IAAI2iB,EAAI/Q,EAAE6W,OAAO1G,EAAGlR,MACpB,GAAmC,GAA/B8R,EAAEgB,UAAUrD,GAAWgD,MAAgC,GAAnBX,EAAEgB,UAAUyE,GAAU,CAE5D,IADA,IAAIrd,EAAI,EACDA,IAAMpJ,GAAwB,GAAnBghB,EAAEgB,UAAUyE,IAE5B,GAAmC,IADnCzF,EAAIA,EAAE6D,UAAU,EAAG3V,OACb8S,UAAUrD,GAAWgD,KAAW,OAAO,EAE/C,GAAuB,GAAnBX,EAAEgB,UAAUyE,GAAU,OAAO,CACnC,CACF,CACA,OAAO,CACT,EAkBA9H,GAAWlhB,UAAU+Z,MAlxBrB,WACE,IAAI4I,EAAItB,KAER,OADA5P,KAAKuI,OAAO2I,GACLA,CACT,EA+wBAzB,GAAWlhB,UAAUooB,SA5wBrB,WACE,GAAI3W,KAAKmK,EAAI,EAAG,CACd,GAAc,GAAVnK,KAAKoC,EAAQ,OAAOpC,KAAK,GAAKA,KAAKsQ,GAClC,GAAc,GAAVtQ,KAAKoC,EAAQ,OAAO,CAC/B,KAAO,IAAc,GAAVpC,KAAKoC,EAAQ,OAAOpC,KAAK,GAC/B,GAAc,GAAVA,KAAKoC,EAAQ,OAAO,CAAC,CAE9B,OAASpC,KAAK,IAAO,GAAM,GAAKA,KAAKoQ,IAAO,IAAOpQ,KAAKoQ,GAAMpQ,KAAK,EACrE,EAqwBAyP,GAAWlhB,UAAUspB,UAlwBrB,WACE,OAAiB,GAAV7X,KAAKoC,EAASpC,KAAKmK,EAAKnK,KAAK,IAAM,IAAO,EACnD,EAiwBAyP,GAAWlhB,UAAUupB,WA9vBrB,WACE,OAAiB,GAAV9X,KAAKoC,EAASpC,KAAKmK,EAAKnK,KAAK,IAAM,IAAO,EACnD,EA6vBAyP,GAAWlhB,UAAUkoB,OArvBrB,WACE,OAAIzW,KAAKmK,EAAI,GAAU,EACdnK,KAAKoC,GAAK,GAAgB,GAAVpC,KAAKoC,GAAUpC,KAAK,IAAM,EAAW,EAClD,CACd,EAkvBAyP,GAAWlhB,UAAUwpB,YAnqBrB,WACE,IAAI5lB,EAAI6N,KAAKoC,EACX8O,EAAI,IAAIhiB,MACVgiB,EAAE,GAAKlR,KAAKmK,EACZ,IACEnJ,EADEyU,EAAIzV,KAAKoQ,GAAOje,EAAI6N,KAAKoQ,GAAM,EAEjCtf,EAAI,EACN,GAAIqB,KAAM,EAER,IADIsjB,EAAIzV,KAAKoQ,KAAOpP,EAAIhB,KAAK7N,IAAMsjB,KAAOzV,KAAKmK,EAAInK,KAAKqQ,KAAOoF,IAAGvE,EAAEpgB,KAAOkQ,EAAKhB,KAAKmK,GAAMnK,KAAKoQ,GAAKqF,GAC9FtjB,GAAK,GACNsjB,EAAI,GACNzU,GAAKhB,KAAK7N,IAAO,GAAKsjB,GAAK,IAAQ,EAAIA,EACvCzU,GAAKhB,OAAO7N,KAAOsjB,GAAKzV,KAAKoQ,GAAK,KAElCpP,EAAKhB,KAAK7N,KAAOsjB,GAAK,GAAM,IACxBA,GAAK,IACPA,GAAKzV,KAAKoQ,KACRje,IAGG,IAAJ6O,IAAgBA,IAAK,KACjB,GAALlQ,IAAoB,IAATkP,KAAKmK,KAAkB,IAAJnJ,MAAalQ,GAC3CA,EAAI,GAAKkQ,GAAKhB,KAAKmK,KAAG+G,EAAEpgB,KAAOkQ,GAGvC,OAAOkQ,CACT,EA0oBAzB,GAAWlhB,UAAUypB,OAxoBrB,SAAkBjX,GAChB,OAA4B,GAArBf,KAAK8S,UAAU/R,EACxB,EAuoBA0O,GAAWlhB,UAAU+lB,IAroBrB,SAAevT,GACb,OAAOf,KAAK8S,UAAU/R,GAAK,EAAIf,KAAOe,CACxC,EAooBA0O,GAAWlhB,UAAUwlB,IAloBrB,SAAehT,GACb,OAAOf,KAAK8S,UAAU/R,GAAK,EAAIf,KAAOe,CACxC,EAioBA0O,GAAWlhB,UAAU0pB,IAvmBrB,SAAelX,GACb,IAAImQ,EAAItB,KAER,OADA5P,KAAK8W,UAAU/V,EAAG8Q,GAAQX,GACnBA,CACT,EAomBAzB,GAAWlhB,UAAU2pB,GA7lBrB,SAAcnX,GACZ,IAAImQ,EAAItB,KAER,OADA5P,KAAK8W,UAAU/V,EAAGgR,GAAOb,GAClBA,CACT,EA0lBAzB,GAAWlhB,UAAU4pB,IAnlBrB,SAAepX,GACb,IAAImQ,EAAItB,KAER,OADA5P,KAAK8W,UAAU/V,EAAGiR,GAAQd,GACnBA,CACT,EAglBAzB,GAAWlhB,UAAU6pB,OAzkBrB,SAAkBrX,GAChB,IAAImQ,EAAItB,KAER,OADA5P,KAAK8W,UAAU/V,EAAGkR,GAAWf,GACtBA,CACT,EAskBAzB,GAAWlhB,UAAU8pB,IAnkBrB,WAEE,IADA,IAAInH,EAAItB,KACCzd,EAAI,EAAGA,EAAI6N,KAAKoC,IAAKjQ,EAAG+e,EAAE/e,GAAK6N,KAAKqQ,IAAMrQ,KAAK7N,GAGxD,OAFA+e,EAAE9O,EAAIpC,KAAKoC,EACX8O,EAAE/G,GAAKnK,KAAKmK,EACL+G,CACT,EA8jBAzB,GAAWlhB,UAAUwoB,UA3jBrB,SAAqB7M,GACnB,IAAIgH,EAAItB,KAGR,OAFI1F,EAAI,EAAGlK,KAAKqU,UAAUnK,EAAGgH,GACxBlR,KAAKgU,SAAS9J,EAAGgH,GACfA,CACT,EAujBAzB,GAAWlhB,UAAUmpB,WApjBrB,SAAsBxN,GACpB,IAAIgH,EAAItB,KAGR,OAFI1F,EAAI,EAAGlK,KAAKgU,UAAU9J,EAAGgH,GACxBlR,KAAKqU,SAASnK,EAAGgH,GACfA,CACT,EAgjBAzB,GAAWlhB,UAAUkpB,gBArhBrB,WACE,IAAK,IAAItlB,EAAI,EAAGA,EAAI6N,KAAKoC,IAAKjQ,EAAG,GAAe,GAAX6N,KAAK7N,GAAS,OAAOA,EAAI6N,KAAKoQ,GAAK8B,GAAKlS,KAAK7N,IAClF,OAAI6N,KAAKmK,EAAI,EAAUnK,KAAKoC,EAAIpC,KAAKoQ,IAC9B,CACT,EAkhBAX,GAAWlhB,UAAU+pB,SArgBrB,WAGE,IAFA,IAAIpH,EAAI,EACNhG,EAAIlL,KAAKmK,EAAInK,KAAKqQ,GACXle,EAAI,EAAGA,EAAI6N,KAAKoC,IAAKjQ,EAAG+e,GAAKiB,GAAKnS,KAAK7N,GAAK+Y,GACrD,OAAOgG,CACT,EAigBAzB,GAAWlhB,UAAUsoB,QA9frB,SAAmB3M,GACjB,IAAIhQ,EAAI5G,KAAK0B,MAAMkV,EAAIlK,KAAKoQ,IAC5B,OAAIlW,GAAK8F,KAAKoC,EAAoB,GAAVpC,KAAKmK,KACrBnK,KAAK9F,GAAM,GAAKgQ,EAAIlK,KAAKoQ,GACnC,EA2fAX,GAAWlhB,UAAUgqB,OAjfrB,SAAkBrO,GAChB,OAAOlK,KAAKmX,UAAUjN,EAAG6H,GAC3B,EAgfAtC,GAAWlhB,UAAUiqB,SA7erB,SAAoBtO,GAClB,OAAOlK,KAAKmX,UAAUjN,EAAG+H,GAC3B,EA4eAxC,GAAWlhB,UAAUkqB,QAzerB,SAAmBvO,GACjB,OAAOlK,KAAKmX,UAAUjN,EAAG8H,GAC3B,EAweAvC,GAAWlhB,UAAUmqB,IAncrB,SAAe3X,GACb,IAAImQ,EAAItB,KAER,OADA5P,KAAKoX,MAAMrW,EAAGmQ,GACPA,CACT,EAgcAzB,GAAWlhB,UAAUipB,SA7brB,SAAoBzW,GAClB,IAAImQ,EAAItB,KAER,OADA5P,KAAKwT,MAAMzS,EAAGmQ,GACPA,CACT,EA0bAzB,GAAWlhB,UAAUoqB,SAvbrB,SAAoB5X,GAClB,IAAImQ,EAAItB,KAER,OADA5P,KAAKmT,WAAWpS,EAAGmQ,GACZA,CACT,EAobAzB,GAAWlhB,UAAUqkB,OA1arB,SAAkB7R,GAChB,IAAImQ,EAAItB,KAER,OADA5P,KAAKiT,SAASlS,EAAGmQ,EAAG,MACbA,CACT,EAuaAzB,GAAWlhB,UAAUqqB,UAparB,SAAqB7X,GACnB,IAAImQ,EAAItB,KAER,OADA5P,KAAKiT,SAASlS,EAAG,KAAMmQ,GAChBA,CACT,EAiaAzB,GAAWlhB,UAAUsqB,mBA9ZrB,SAA8B9X,GAC5B,IAAIwT,EAAI3E,KACNsB,EAAItB,KAEN,OADA5P,KAAKiT,SAASlS,EAAGwT,EAAGrD,GACb,IAAIhiB,MAAMqlB,EAAGrD,EACtB,EA0ZAzB,GAAWlhB,UAAUqpB,OAzRrB,SAAkBvV,EAAG8N,GACnB,IACErf,EAEAukB,EAHEljB,EAAIkQ,EAAEqT,YAERxE,EAAID,GAAI,GAEV,GAAI9e,GAAK,EAAG,OAAO+e,EACFpgB,EAARqB,EAAI,GAAQ,EACZA,EAAI,GAAQ,EACZA,EAAI,IAAS,EACbA,EAAI,IAAS,EACb,EACEkjB,EAAPljB,EAAI,EAAO,IAAIkf,GAAQlB,GAClBA,EAAEgF,SAAc,IAAI7C,GAAQnC,GAC5B,IAAImB,GAAWnB,GAGxB,IAAIpM,EAAI,IAAI7U,MACVgb,EAAI,EACJ4O,EAAKhoB,EAAI,EACT0kB,GAAM,GAAK1kB,GAAK,EAElB,GADAiT,EAAE,GAAKsR,EAAExC,QAAQ7S,MACblP,EAAI,EAAG,CACT,IAAIioB,EAAKnJ,KAET,IADAyF,EAAEjC,MAAMrP,EAAE,GAAIgV,GACP7O,GAAKsL,GACVzR,EAAEmG,GAAK0F,KACPyF,EAAEnC,MAAM6F,EAAIhV,EAAEmG,EAAI,GAAInG,EAAEmG,IACxBA,GAAK,CAET,CAEA,IACEM,EAGApI,EAJElI,EAAImI,EAAED,EAAI,EAEZ4W,GAAM,EACNzG,EAAK3C,KAGP,IADAzd,EAAIif,GAAM/O,EAAEnI,IAAM,EACXA,GAAK,GAAG,CAQb,IAPI/H,GAAK2mB,EAAItO,EAAKnI,EAAEnI,IAAO/H,EAAI2mB,EAAOtD,GAEpChL,GAAKnI,EAAEnI,IAAO,GAAM/H,EAAI,GAAM,IAAQ2mB,EAAK3mB,EACvC+H,EAAI,IAAGsQ,GAAKnI,EAAEnI,EAAI,IAAO8F,KAAKoQ,GAAKje,EAAI2mB,IAG7C5O,EAAIpZ,IACQ,EAAJ0Z,IACNA,IAAM,IACJN,EAMJ,IAJK/X,GAAK+X,GAAK,IACb/X,GAAK6N,KAAKoQ,KACRlW,GAEA8e,EAEFjV,EAAEyG,GAAGjC,OAAO2I,GACZ8H,GAAM,MACD,CACL,KAAO9O,EAAI,GACTmL,EAAEjC,MAAMlC,EAAGqB,GACX8C,EAAEjC,MAAMb,EAAIrB,GACZhH,GAAK,EAEHA,EAAI,EAAGmL,EAAEjC,MAAMlC,EAAGqB,IAEpBnQ,EAAI8O,EACJA,EAAIqB,EACJA,EAAKnQ,GAEPiT,EAAEnC,MAAMX,EAAIxO,EAAEyG,GAAI0G,EACpB,CAEA,KAAOhX,GAAK,KAAMmI,EAAEnI,GAAM,GAAK/H,IAC7BkjB,EAAEjC,MAAMlC,EAAGqB,GACXnQ,EAAI8O,EACJA,EAAIqB,EACJA,EAAKnQ,IACCjQ,EAAI,IACRA,EAAI6N,KAAKoQ,GAAK,IACZlW,EAGR,CACA,OAAOmb,EAAErC,OAAO9B,EAClB,EAsMAzB,GAAWlhB,UAAU0qB,WAxJrB,SAAsB9I,GACpB,IAAI+I,EAAK/I,EAAEgF,SACX,GAAKnV,KAAKmV,UAAY+D,GAAqB,GAAd/I,EAAEsG,SAAe,OAAOhH,GAAW8D,KAOhE,IANA,IAAI4F,EAAIhJ,EAAE7H,QACRvX,EAAIiP,KAAKsI,QACPvH,EAAIkQ,GAAI,GACVlX,EAAIkX,GAAI,GACRjX,EAAIiX,GAAI,GACRjQ,EAAIiQ,GAAI,GACW,GAAdkI,EAAE1C,UAAe,CACtB,KAAO0C,EAAEhE,UACPgE,EAAE9E,SAAS,EAAG8E,GACVD,GACGnY,EAAEoU,UAAapb,EAAEob,WACpBpU,EAAEqW,MAAMpX,KAAMe,GACdhH,EAAEyZ,MAAMrD,EAAGpW,IAEbgH,EAAEsT,SAAS,EAAGtT,IACJhH,EAAEob,UAAUpb,EAAEyZ,MAAMrD,EAAGpW,GACnCA,EAAEsa,SAAS,EAAGta,GAEhB,KAAOhJ,EAAEokB,UACPpkB,EAAEsjB,SAAS,EAAGtjB,GACVmoB,GACGlf,EAAEmb,UAAanU,EAAEmU,WACpBnb,EAAEod,MAAMpX,KAAMhG,GACdgH,EAAEwS,MAAMrD,EAAGnP,IAEbhH,EAAEqa,SAAS,EAAGra,IACJgH,EAAEmU,UAAUnU,EAAEwS,MAAMrD,EAAGnP,GACnCA,EAAEqT,SAAS,EAAGrT,GAEZmY,EAAErG,UAAU/hB,IAAM,GACpBooB,EAAE3F,MAAMziB,EAAGooB,GACPD,GAAInY,EAAEyS,MAAMxZ,EAAG+G,GACnBhH,EAAEyZ,MAAMxS,EAAGjH,KAEXhJ,EAAEyiB,MAAM2F,EAAGpoB,GACPmoB,GAAIlf,EAAEwZ,MAAMzS,EAAG/G,GACnBgH,EAAEwS,MAAMzZ,EAAGiH,GAEf,CACA,OAAmC,GAA/BjQ,EAAE+hB,UAAUrD,GAAWgD,KAAkBhD,GAAW8D,KACpDvS,EAAE8R,UAAU3C,IAAM,EAAUnP,EAAEwW,SAASrH,GACvCnP,EAAEyV,SAAW,GAAGzV,EAAEoW,MAAMjH,EAAGnP,GAE3BA,EAAEyV,SAAW,EAAUzV,EAAE0X,IAAIvI,GACrBnP,GAFAA,CAGd,EAyGAyO,GAAWlhB,UAAUiiB,IAlXrB,SAAenO,GACb,OAAOrC,KAAKoV,IAAI/S,EAAG,IAAI+P,GACzB,EAiXA3C,GAAWlhB,UAAUoH,IArMrB,SAAeoL,GACb,IAAImK,EAAIlL,KAAKmK,EAAI,EAAInK,KAAKsV,SAAWtV,KAAKsI,QACtCwJ,EAAI/Q,EAAEoJ,EAAI,EAAIpJ,EAAEuU,SAAWvU,EAAEuH,QACjC,GAAI4C,EAAE4H,UAAUhB,GAAK,EAAG,CACtB,IAAI1P,EAAI8I,EACRA,EAAI4G,EACJA,EAAI1P,CACN,CACA,IAAIjQ,EAAI+Y,EAAEuM,kBACR1T,EAAI+N,EAAE2F,kBACR,GAAI1T,EAAI,EAAG,OAAOmH,EAMlB,IALI/Y,EAAI4R,IAAGA,EAAI5R,GACX4R,EAAI,IACNmH,EAAEmJ,SAAStQ,EAAGmH,GACd4G,EAAEuC,SAAStQ,EAAG+N,IAET5G,EAAEuL,SAAW,IACbtkB,EAAI+Y,EAAEuM,mBAAqB,GAAGvM,EAAEmJ,SAASliB,EAAG+Y,IAC5C/Y,EAAI2f,EAAE2F,mBAAqB,GAAG3F,EAAEuC,SAASliB,EAAG2f,GAC7C5G,EAAE4H,UAAUhB,IAAM,GACpB5G,EAAEsI,MAAM1B,EAAG5G,GACXA,EAAEmJ,SAAS,EAAGnJ,KAEd4G,EAAE0B,MAAMtI,EAAG4G,GACXA,EAAEuC,SAAS,EAAGvC,IAIlB,OADI/N,EAAI,GAAG+N,EAAEkC,SAASjQ,EAAG+N,GAClBA,CACT,EAyKArC,GAAWlhB,UAAUyoB,gBA5FrB,SAA2B5U,GACzB,IAAIjQ,EACF+Y,EAAIlL,KAAKsT,MACX,GAAW,GAAPpI,EAAE9I,GAAU8I,EAAE,IAAMgL,GAAUA,GAAU/mB,OAAS,GAAI,CACvD,IAAKgD,EAAI,EAAGA,EAAI+jB,GAAU/mB,SAAUgD,EAAG,GAAI+Y,EAAE,IAAMgL,GAAU/jB,GAAI,OAAO,EACxE,OAAO,CACT,CACA,GAAI+Y,EAAEiK,SAAU,OAAO,EAEvB,IADAhjB,EAAI,EACGA,EAAI+jB,GAAU/mB,QAAQ,CAG3B,IAFA,IAAIghB,EAAI+F,GAAU/jB,GAChB+H,EAAI/H,EAAI,EACH+H,EAAIgc,GAAU/mB,QAAUghB,EAAIgG,IAAOhG,GAAK+F,GAAUhc,KAEzD,IADAiW,EAAIjF,EAAEmM,OAAOlH,GACNhe,EAAI+H,MAAOiW,EAAI+F,GAAU/jB,MAAQ,EAAG,OAAO,CACpD,CACA,OAAO+Y,EAAEoM,YAAYlV,EACvB,EA8EAqN,GAAWlhB,UAAU6qB,OA3brB,WACE,IAAIlI,EAAItB,KAER,OADA5P,KAAKqT,SAASnC,GACPA,CACT,EA0bAzB,GAAWlhB,UAAU+jB,QAAUA,GAoCf,MAAZ0D,GAAkB,CAGpB,IAAI5T,GACJ,GAHA4T,GAAW,IAAI9mB,MACf+mB,GAAW,EAEW,oBAAXlnB,QAA0BA,OAAOyQ,OAC1C,GAAIzQ,OAAOyQ,OAAO6Z,gBAAiB,CAEjC,IAAIC,GAAK,IAAI7e,WAAW,IAExB,IADA1L,OAAOyQ,OAAO6Z,gBAAgBC,IACzBlX,GAAI,EAAGA,GAAI,KAAMA,GAAG4T,GAASC,MAAcqD,GAAGlX,GACrD,MAAO,GAAyB,YAArB0N,UAAUC,SAAyBD,UAAUyJ,WAAa,IAAK,CAExE,IAAIlE,GAAItmB,OAAOyQ,OAAOmY,OAAO,IAC7B,IAAKvV,GAAI,EAAGA,GAAIiT,GAAElmB,SAAUiT,GAAG4T,GAASC,MAAgC,IAAlBZ,GAAEzb,WAAWwI,GACrE,CAEF,KAAO6T,GAAWI,IAEhBjU,GAAI9O,KAAK0B,MAAM,MAAQ1B,KAAKqkB,UAC5B3B,GAASC,MAAc7T,KAAM,EAC7B4T,GAASC,MAAkB,IAAJ7T,GAEzB6T,GAAW,EACXG,IAGF,CAEA,SAASoD,KACP,GAAiB,MAAbzD,GAAmB,CAIrB,IAHAK,MACAL,GAyDK,IAAI0D,IAxDCC,KAAK1D,IACVC,GAAW,EAAGA,GAAWD,GAAS7mB,SAAU8mB,GAAUD,GAASC,IAAY,EAChFA,GAAW,CAEb,CAEA,OAAOF,GAAU4D,MACnB,CAOA,SAASC,KAAgB,CAMzB,SAASH,KACPzZ,KAAK7N,EAAI,EACT6N,KAAK9F,EAAI,EACT8F,KAAK/K,EAAI,IAAI/F,KACf,CARA0qB,GAAarrB,UAAU0oB,UAPvB,SAAuB4C,GACrB,IAAI1nB,EACJ,IAAKA,EAAI,EAAGA,EAAI0nB,EAAG1qB,SAAUgD,EAAG0nB,EAAG1nB,GAAKqnB,IAC1C,EAuCAC,GAAQlrB,UAAUmrB,KAxBlB,SAAkB7Z,GAChB,IAAI1N,EAAG+H,EAAGkI,EACV,IAAKjQ,EAAI,EAAGA,EAAI,MAAOA,EAAG6N,KAAK/K,EAAE9C,GAAKA,EAEtC,IADA+H,EAAI,EACC/H,EAAI,EAAGA,EAAI,MAAOA,EACrB+H,EAAKA,EAAI8F,KAAK/K,EAAE9C,GAAK0N,EAAI1N,EAAI0N,EAAI1Q,QAAW,IAC5CiT,EAAIpC,KAAK/K,EAAE9C,GACX6N,KAAK/K,EAAE9C,GAAK6N,KAAK/K,EAAEiF,GACnB8F,KAAK/K,EAAEiF,GAAKkI,EAEdpC,KAAK7N,EAAI,EACT6N,KAAK9F,EAAI,CACX,EAaAuf,GAAQlrB,UAAUorB,KAXlB,WACE,IAAIvX,EAMJ,OALApC,KAAK7N,EAAK6N,KAAK7N,EAAI,EAAK,IACxB6N,KAAK9F,EAAK8F,KAAK9F,EAAI8F,KAAK/K,EAAE+K,KAAK7N,GAAM,IACrCiQ,EAAIpC,KAAK/K,EAAE+K,KAAK7N,GAChB6N,KAAK/K,EAAE+K,KAAK7N,GAAK6N,KAAK/K,EAAE+K,KAAK9F,GAC7B8F,KAAK/K,EAAE+K,KAAK9F,GAAKkI,EACVpC,KAAK/K,EAAGmN,EAAIpC,KAAK/K,EAAE+K,KAAK7N,GAAM,IACvC,EAYA,IAAIkkB,GAAY,qECzlDhB,MAAM5G,WAAEA,IAAeqK,GA6BvB,MAAMC,GACJ,WAAAxf,GACEyF,KAAKga,IAAM,KACXha,KAAKoC,EAAI,KACTpC,KAAK2L,EAAI,KACT3L,KAAKjP,EAAI,EACX,CAKA,aAAAkpB,GAME,OALKja,KAAKga,MACRha,KAAKjP,EAAIiP,KAAKka,WACdla,KAAK2L,EAAI3L,KAAKma,YACdna,KAAKga,IAAMha,KAAKoC,EAAIpC,KAAK2L,EAAI3L,KAAKjP,GAE7BiP,KAAKga,GACd,CAEA,SAAAG,GACE,MAAMjQ,EAAIlK,KAAKjP,EAAE5B,OAAS,EAC1B,IAAIirB,EAAOlQ,EAAE1b,SAAS,IAGtB,GAFI4rB,EAAKjrB,OAAS,GAAM,IAAGirB,EAAO,IAAMA,GAEpClQ,EAAI,IAEN,OAAOkQ,EAIP,OADa,IAAMA,EAAKjrB,OAAS,GACrBX,SAAS,IAAM4rB,CAE/B,CAEA,QAAAF,GACE,MAAO,EACT,EAGF,MAAMG,WAAmBN,GACvB,WAAAxf,CAAY+f,GACVC,QAEAva,KAAKoC,EAAI,KACLkY,IAAQta,KAAKjP,EAxErB,SAAuBupB,GACrB,IAAItW,EAAIsW,EAAO9rB,SAAS,IACxB,GAAa,MAATwV,EAAE,GAEAA,EAAE7U,OAAS,GAAM,EACnB6U,EAAI,IAAMA,EACFA,EAAE3S,MAAM,YAAW2S,EAAI,KAAOA,OACnC,CAELA,EAAIA,EAAEhH,OAAO,GAEb,IAAIwd,EAAMxW,EAAE7U,OACRqrB,EAAM,GAAM,EACdA,GAAO,EACCxW,EAAE3S,MAAM,YAAWmpB,GAAO,GAEpC,IAAIC,EAAO,GACX,IAAK,IAAItoB,EAAI,EAAGA,EAAIqoB,EAAKroB,IAAKsoB,GAAQ,IACtCA,EAAO,IAAIhL,GAAWgL,EAAM,IAG5BzW,EAAIyW,EAAKtC,IAAImC,GAAQ5B,IAAIjJ,GAAWgD,KACpCzO,EAAIA,EAAExV,SAAS,IAAIZ,QAAQ,KAAM,GACnC,CACA,OAAOoW,CACT,CA+CyB0W,CAAcJ,GACrC,CAEA,QAAAJ,GACE,OAAOla,KAAKjP,CACd,EAGF,MAAM4pB,WAAoBZ,GACxB,WAAAxf,CAAYqgB,GACVL,QAEAva,KAAKoC,EAAI,KACTpC,KAAK4a,UAAYA,CACnB,CAEA,QAAAV,GAEE,OADAla,KAAKjP,EAAIiP,KAAK4a,UAAUjqB,KAAKkqB,GAAeA,EAAWZ,kBAAiB7gB,KAAK,IACtE4G,KAAKjP,CACd,EAMF,SAAS+pB,GAAUrhB,EAAKiE,GACtB,OAAKjE,EAAIiE,EAAQ,GAAK,EAAU,EACA,KAAxBjE,EAAIuD,OAAOU,EAAQ,EAAG,EAChC,CAKA,SAASqd,GAAKthB,EAAKiE,GAEjB,MAAM8c,EAAMM,GAAUrhB,EAAKiE,GACrBiO,EAAIlS,EAAIuD,OAAOU,EAAQ,EAAS,EAAN8c,GAEhC,IAAK7O,EAAG,OAAO,EAGf,QAFgBA,EAAE,GAAK,EAAI,IAAI8D,GAAW9D,EAAG,IAAM,IAAI8D,GAAW9D,EAAE3O,OAAO,GAAI,KAEjE2Z,UAChB,CAKA,SAASqE,GAAYvhB,EAAKiE,GAExB,OAAOA,EAAoB,GADfod,GAAUrhB,EAAKiE,GACL,EACxB,gDAgBA,SAAmBJ,GAIjB,MAAMI,EAAQsd,GAAY1d,EAAO,GAE3B2d,EAAUD,GAAY1d,EAAOI,GAC7Bwd,EAAKH,GAAKzd,EAAOI,GACjByd,EAAK7d,EAAMN,OAAOie,EAAc,EAALC,GAE3BE,EAAYH,EAAUE,EAAGhsB,OACzBksB,EAAUL,GAAY1d,EAAO8d,GAC7BE,EAAKP,GAAKzd,EAAO8d,GACjBG,EAAKje,EAAMN,OAAOqe,EAAc,EAALC,GAKjC,MAAO,CAAEpK,EAHC,IAAIzB,GAAW0L,EAAI,IAGjBhR,EAFF,IAAIsF,GAAW8L,EAAI,IAG/B,YA9BA,SAAmBrK,EAAG/G,GACpB,MAAMqR,EAAO,IAAInB,GAAWnJ,GACtBuK,EAAO,IAAIpB,GAAWlQ,GAG5B,OAFe,IAAIwQ,GAAY,CAACa,EAAMC,IAExBxB,eAChB,ICvIA,MAAMxK,WAAEA,IAAeqK,GAUjB4B,GAAM,IAAIjM,GAAW,KACrBkM,GAAQ,IAAIlM,GAAW,KAK7B,MAAMmM,GACJ,WAAArhB,CAAYga,EAAGrJ,GACblL,KAAKkL,EAAIA,EACTlL,KAAKuU,EAAIA,CAEX,CAKA,MAAAyD,CAAO6D,GACL,OAAIA,IAAU7b,MACPA,KAAKuU,EAAEyD,OAAO6D,EAAMtH,IAAMvU,KAAKkL,EAAE8M,OAAO6D,EAAM3Q,EACvD,CAKA,YAAA4Q,GACE,OAAO9b,KAAKkL,CACd,CAKA,MAAAoK,GACE,OAAO,IAAIsG,GAAiB5b,KAAKuU,EAAGvU,KAAKkL,EAAEoK,SAASvC,IAAI/S,KAAKuU,GAC/D,CAKA,GAAAmE,CAAI3e,GACF,OAAO,IAAI6hB,GAAiB5b,KAAKuU,EAAGvU,KAAKkL,EAAEwN,IAAI3e,EAAE+hB,gBAAgB/I,IAAI/S,KAAKuU,GAC5E,CAKA,QAAAiD,CAASzd,GACP,OAAO,IAAI6hB,GAAiB5b,KAAKuU,EAAGvU,KAAKkL,EAAEsM,SAASzd,EAAE+hB,gBAAgB/I,IAAI/S,KAAKuU,GACjF,CAKA,QAAAoE,CAAS5e,GACP,OAAO,IAAI6hB,GAAiB5b,KAAKuU,EAAGvU,KAAKkL,EAAEyN,SAAS5e,EAAE+hB,gBAAgB/I,IAAI/S,KAAKuU,GACjF,CAKA,MAAA3B,CAAO7Y,GACL,OAAO,IAAI6hB,GAAiB5b,KAAKuU,EAAGvU,KAAKkL,EAAEyN,SAAS5e,EAAE+hB,eAAe7C,WAAWjZ,KAAKuU,IAAIxB,IAAI/S,KAAKuU,GACpG,CAKA,MAAA6E,GACE,OAAO,IAAIwC,GAAiB5b,KAAKuU,EAAGvU,KAAKkL,EAAEkO,SAASrG,IAAI/S,KAAKuU,GAC/D,EAGF,MAAMwH,GACJ,WAAAxhB,CAAYyhB,EAAO9Q,EAAG4G,EAAGuD,GACvBrV,KAAKgc,MAAQA,EACbhc,KAAKkL,EAAIA,EACTlL,KAAK8R,EAAIA,EAET9R,KAAKqV,EAAS,MAALA,EAAY5F,GAAWgD,IAAM4C,EACtCrV,KAAKic,KAAO,IAEd,CAEA,IAAAC,GAGE,OAFkB,OAAdlc,KAAKic,OAAejc,KAAKic,KAAOjc,KAAKqV,EAAE4D,WAAWjZ,KAAKgc,MAAMzH,IAE1DvU,KAAKgc,MAAMG,eAAenc,KAAKkL,EAAE4Q,eAAenD,SAAS3Y,KAAKic,MAAMlJ,IAAI/S,KAAKgc,MAAMzH,GAC5F,CAEA,IAAA6H,GAGE,OAFkB,OAAdpc,KAAKic,OAAejc,KAAKic,KAAOjc,KAAKqV,EAAE4D,WAAWjZ,KAAKgc,MAAMzH,IAE1DvU,KAAKgc,MAAMG,eAAenc,KAAK8R,EAAEgK,eAAenD,SAAS3Y,KAAKic,MAAMlJ,IAAI/S,KAAKgc,MAAMzH,GAC5F,CAKA,MAAAyD,CAAO6D,GACL,GAAIA,IAAU7b,KAAM,OAAO,EAC3B,GAAIA,KAAKqc,aAAc,OAAOR,EAAMQ,aACpC,GAAIR,EAAMQ,aAAc,OAAOrc,KAAKqc,aAQpC,IALUR,EAAM/J,EACbgK,eACAnD,SAAS3Y,KAAKqV,GACdmC,SAASxX,KAAK8R,EAAEgK,eAAenD,SAASkD,EAAMxG,IAC9CtC,IAAI/S,KAAKgc,MAAMzH,GACXyD,OAAOvI,GAAW8D,MAAO,OAAO,EAQvC,OALUsI,EAAM3Q,EACb4Q,eACAnD,SAAS3Y,KAAKqV,GACdmC,SAASxX,KAAKkL,EAAE4Q,eAAenD,SAASkD,EAAMxG,IAC9CtC,IAAI/S,KAAKgc,MAAMzH,GACTyD,OAAOvI,GAAW8D,KAC7B,CAKA,UAAA8I,GACE,OAAe,OAAXrc,KAAKkL,GAAyB,OAAXlL,KAAK8R,GACrB9R,KAAKqV,EAAE2C,OAAOvI,GAAW8D,QAAUvT,KAAK8R,EAAEgK,eAAe9D,OAAOvI,GAAW8D,KACpF,CAKA,MAAA+B,GACE,OAAO,IAAIyG,GAAU/b,KAAKgc,MAAOhc,KAAKkL,EAAGlL,KAAK8R,EAAEwD,SAAUtV,KAAKqV,EACjE,CAsBA,GAAAqD,CAAI3e,GACF,GAAIiG,KAAKqc,aAAc,OAAOtiB,EAC9B,GAAIA,EAAEsiB,aAAc,OAAOrc,KAE3B,MAAMsc,EAAKtc,KAAKkL,EAAE4Q,eACZS,EAAKvc,KAAK8R,EAAEgK,eACZU,EAAKxc,KAAKqV,EACVoH,EAAK1iB,EAAEmR,EAAE4Q,eACTY,EAAK3iB,EAAE+X,EAAEgK,eACTa,EAAK5iB,EAAEsb,EACPd,EAAIvU,KAAKgc,MAAMzH,EAEfqI,EAAKN,EAAG3D,SAASgE,GAAI5J,IAAIwB,GACzBsI,EAAKJ,EAAG9D,SAAS6D,GAAIzJ,IAAIwB,GACzBuI,EAAKF,EAAGpF,SAASqF,GACjBE,EAAKR,EAAG5D,SAASgE,GAAI5J,IAAIwB,GACzByI,EAAKN,EAAG/D,SAAS6D,GAAIzJ,IAAIwB,GACzB0I,EAAKF,EAAGvF,SAASwF,GAEvB,GAAIvN,GAAW8D,KAAKyE,OAAO8E,GACzB,OAAIrN,GAAW8D,KAAKyE,OAAOiF,GAClBjd,KAAKkd,QAEPld,KAAKgc,MAAMmB,SAGpB,MAAMC,EAAKR,EAAGlE,IAAImE,GACZQ,EAAKb,EAAG7D,SAASgE,GAAI5J,IAAIwB,GACzB+I,EAAKR,EAAG1D,SAASrG,IAAIwB,GACrBgJ,EAAMT,EAAGnE,SAAS2E,GAAIvK,IAAIwB,GAC1BiJ,EAAMH,EAAG1E,SAASsE,EAAG7D,UAAU5B,SAAS4F,EAAGzE,SAAS2E,IAAKvK,IAAIwB,GAE7DkJ,EAAKX,EAAGnE,SAAS6E,GAAKzK,IAAIwB,GAC1BmJ,EAAKT,EAAGtE,SAAS2E,EAAG3E,SAASiE,GAAIpF,SAASgG,IAAMhG,SAASuF,EAAGpE,SAAS4E,IAAMxK,IAAIwB,GAC/EoJ,EAAKJ,EAAI5E,SAAS0E,GAAItK,IAAIwB,GAEhC,OAAO,IAAIwH,GAAU/b,KAAKgc,MAAOhc,KAAKgc,MAAMG,eAAesB,GAAKzd,KAAKgc,MAAMG,eAAeuB,GAAKC,EACjG,CAiBA,KAAAT,GACE,GAAIld,KAAKqc,aAAc,OAAOrc,KAC9B,IAAKA,KAAK8R,EAAEgK,eAAerF,SAAU,OAAOzW,KAAKgc,MAAMmB,SAEvD,MAAMb,EAAKtc,KAAKkL,EAAE4Q,eACZS,EAAKvc,KAAK8R,EAAEgK,eACZU,EAAKxc,KAAKqV,EACVd,EAAIvU,KAAKgc,MAAMzH,EACfxT,EAAIf,KAAKgc,MAAMjb,EAAE+a,eAEjBc,EAAKN,EAAGlD,SAAST,SAASgD,IAAOjD,IAAI3X,EAAE4X,SAAS6D,EAAGpD,WAAWrG,IAAIwB,GAClEsI,EAAKN,EAAGxF,UAAU,GAAG4B,SAAS6D,GAAIzJ,IAAIwB,GACtCuI,EAAKP,EAAGnD,SAASrG,IAAIwB,GACrBwI,EAAKD,EAAGnE,SAAS2D,GAAI3D,SAAS6D,GAAIzJ,IAAIwB,GACtCyI,EAAKH,EAAGzD,SAASrG,IAAIwB,GACrB0I,EAAKL,EAAGxD,SAAS5B,SAASuF,EAAGhG,UAAU,IAAIhE,IAAIwB,GAE/CkJ,EAAKZ,EAAGlE,SAASsE,GAAIlK,IAAIwB,GACzBmJ,EAAKd,EAAGjE,SAASoE,EAAGhG,UAAU,GAAGS,SAASyF,IAAKzF,SAASwF,EAAGjG,UAAU,GAAG4B,SAASmE,IAAK/J,IAAIwB,GAC1FoJ,EAAKd,EAAGlE,SAASqE,GAAIjK,IAAIwB,GAE/B,OAAO,IAAIwH,GAAU/b,KAAKgc,MAAOhc,KAAKgc,MAAMG,eAAesB,GAAKzd,KAAKgc,MAAMG,eAAeuB,GAAKC,EACjG,CAKA,QAAAhF,CAAS7nB,GACP,GAAIkP,KAAKqc,aAAc,OAAOrc,KAC9B,IAAKlP,EAAE2lB,SAAU,OAAOzW,KAAKgc,MAAMmB,SAGnC,MAAMS,EAAK9sB,EAAE6nB,SAASgD,IAChBkC,EAAM7d,KAAKsV,SACjB,IAAInZ,EAAI6D,KAER,IAAK,IAAI7N,EAAIyrB,EAAGlI,YAAc,EAAGvjB,EAAI,EAAGA,IAAK,CAC3CgK,EAAIA,EAAE+gB,QAEN,MAAMY,EAAQF,EAAG/G,QAAQ1kB,GAGrB2rB,IAFShtB,EAAE+lB,QAAQ1kB,KAGrBgK,EAAIA,EAAEuc,IAAIoF,EAAQ9d,KAAO6d,GAE7B,CAEA,OAAO1hB,CACT,iDAMF,MACE,WAAA5B,CAAYga,EAAGxT,EAAGhH,GAChBiG,KAAKuU,EAAIA,EACTvU,KAAKe,EAAIf,KAAKmc,eAAepb,GAC7Bf,KAAKjG,EAAIiG,KAAKmc,eAAepiB,GAC7BiG,KAAKmd,SAAW,IAAIpB,GAAU/b,KAAM,KAAM,KAC5C,CAKA,MAAAgY,CAAO6D,GACL,OAAIA,IAAU7b,MACPA,KAAKuU,EAAEyD,OAAO6D,EAAMtH,IAAMvU,KAAKe,EAAEiX,OAAO6D,EAAM9a,IAAMf,KAAKjG,EAAEie,OAAO6D,EAAM9hB,EACjF,CAKA,cAAAoiB,CAAejR,GACb,OAAO,IAAI0Q,GAAiB5b,KAAKuU,EAAGrJ,EACtC,CAKA,cAAA6S,CAAe5T,GACb,OAAQra,SAASqa,EAAEnN,OAAO,EAAG,GAAI,KAE/B,KAAK,EACH,OAAOgD,KAAKmd,SACd,KAAK,EACL,KAAK,EAEH,MAAMjS,EAAIlL,KAAKmc,eAAe,IAAI1M,GAAWtF,EAAEnN,OAAO,GAAI,KAG1D,IAAI8U,EAAI9R,KAAKmc,eACXjR,EACGyN,SAASzN,EAAEkO,UACXV,IAAIxN,EAAEyN,SAAS3Y,KAAKe,IACpB2X,IAAI1Y,KAAKjG,GACT+hB,eACAlE,OAAO5X,KAAKuU,EAAE3B,OAAO,IAAInD,GAAW,MAAMiJ,IAAIjJ,GAAWgD,KAAMzS,KAAKuU,IAWzE,OAPGzC,EACEgK,eACA/I,IAAI2I,IACJ1D,OAAO,IAAIvI,GAAWtF,EAAEnN,OAAO,EAAG,GAAI,IAAIwa,SAASkE,OAEtD5J,EAAIA,EAAEwD,UAED,IAAIyG,GAAU/b,KAAMkL,EAAG4G,GAChC,KAAK,EACL,KAAK,EACL,KAAK,EACH,MAAM0I,GAAOrQ,EAAEhb,OAAS,GAAK,EACvB6uB,EAAO7T,EAAEnN,OAAO,EAAGwd,GACnByD,EAAO9T,EAAEnN,OAAOwd,EAAM,EAAGA,GAE/B,OAAO,IAAIuB,GACT/b,KACAA,KAAKmc,eAAe,IAAI1M,GAAWuO,EAAM,KACzChe,KAAKmc,eAAe,IAAI1M,GAAWwO,EAAM,MAE7C,QAEE,OAAO,KAEb,kBCtVF,iBAAQxO,GAAUmK,aAAEA,IAAiBE,IAC/BoE,UAAEA,IAAcC,GAEhBC,GAAM,IAAIxE,IACVoC,MAAEA,GAAKvgB,EAAEA,KAAGyO,IAAMmU,KAKxB,SAASC,KACP,OAAOtC,EACT,CAKA,SAASqC,KAEP,MAAM5I,EAAI,IAAIhG,GAAW,mEAAoE,IACvF1O,EAAI,IAAI0O,GAAW,mEAAoE,IACvF1V,EAAI,IAAI0V,GAAW,mEAAoE,IACvFuM,EAAQ,IAAIkC,GAAUzI,EAAG1U,EAAGhH,GAK5B0B,EAAIugB,EAAM+B,eAAe,sIAI/B,MAAO,CAAE/B,QAAOvgB,IAAGyO,EAFT,IAAIuF,GAAW,mEAAoE,IAG/F,CAKA,SAAS8O,GAAmBxd,EAAGhH,EAAGC,GAChC,MACMgH,GADSD,EAAI,IAAI0O,GAAW1O,EAAGhH,EAAGC,GAAK,IAAIyV,GAAWvF,GAAEwL,YAAa0I,KAC1DrL,IAAI7I,GAAEsN,SAAS/H,GAAWgD,MAAMiG,IAAIjJ,GAAWgD,KAC1D+L,EAAaC,GAAQzd,EAAExS,SAAS,IAAK,IAErC0N,EAAIT,GAAEkd,SAAS3X,GAKrB,MAAO,CAAEwd,aAAYE,UAFH,KAFPD,GAAQviB,EAAEggB,OAAOJ,eAAettB,SAAS,IAAK,IAC9CiwB,GAAQviB,EAAEkgB,OAAON,eAAettB,SAAS,IAAK,IAI3D,CAqBA,SAASmwB,GAAUrhB,GAGjB,MAAMnO,GAFNmO,EAAQshB,SAASC,mBAAmBvhB,KAEfnO,OAGf2vB,EAAQ,GACd,IAAK,IAAI3sB,EAAI,EAAGA,EAAIhD,EAAQgD,IAC1B2sB,EAAM3sB,IAAM,KAA6B,IAAtBmL,EAAM1D,WAAWzH,KAAe,GAAMA,EAAI,EAAK,EAIpE,MAAM4sB,EAAW,GACjB,IAAK,IAAI5sB,EAAI,EAAGA,EAAIhD,EAAQgD,IAAK,CAC/B,MAAM6sB,EAAQF,EAAM3sB,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,IACvD4sB,EAASxuB,MAAMyuB,IAAS,GAAGxwB,SAAS,KACpCuwB,EAASxuB,MAAa,GAAPyuB,GAAaxwB,SAAS,IACvC,CAEA,OAAOuwB,EAAS3lB,KAAK,GACvB,CAKA,SAASqlB,GAAQnhB,EAAO9I,GACtB,OAAI8I,EAAMnO,QAAUqF,EAAY8I,EAEzB,IAAIpO,MAAMsF,EAAM8I,EAAMnO,OAAS,GAAGiK,KAAK,KAAOkE,CACvD,CAKA,SAAS2hB,GAAW/a,GAClB,OAAOA,EACJvT,KAAKuuB,GAEmB,KADvBA,EAAOA,EAAK1wB,SAAS,KACTW,OAAe,IAAM+vB,EAAOA,IAEzC9lB,KAAK,GACV,CA8BA,SAAS+lB,GAAWC,GAClB,MAAMN,EAAQ,GACd,IAAIO,EAAeD,EAAOjwB,OAEtBkwB,EAAe,GAAM,IACvBD,EAASX,GAAQW,EAAQC,EAAe,IAG1CA,EAAeD,EAAOjwB,OAEtB,IAAK,IAAIgD,EAAI,EAAGA,EAAIktB,EAAcltB,GAAK,EACrC2sB,EAAMvuB,KAAKT,SAASsvB,EAAOpiB,OAAO7K,EAAG,GAAI,KAE3C,OAAO2sB,CACT,CC3JA,MAAMtiB,GAAI,IAAIoC,YAAY,IACpB7C,GAAI,IAAI6C,YAAY,IAK1B,SAAS0gB,GAAKpU,EAAGhB,GACf,MAAMC,EAAQ,GAAJD,EACV,OAAQgB,GAAKf,EAAMe,IAAO,GAAKf,CACjC,CAKA,SAASgO,GAAIjN,EAAG4G,GACd,MAAMza,EAAS,GACf,IAAK,IAAIlF,EAAI+Y,EAAE/b,OAAS,EAAGgD,GAAK,EAAGA,IAAKkF,EAAOlF,GAAqB,KAAf+Y,EAAE/Y,GAAK2f,EAAE3f,IAC9D,OAAOkF,CACT,CAKA,SAASkoB,GAAG9iB,GACV,OAAOA,EAAI6iB,GAAK7iB,EAAG,GAAK6iB,GAAK7iB,EAAG,GAClC,CAYA,SAAS+iB,GAAIvvB,GACX,IAAIuqB,EAAqB,EAAfvqB,EAAMd,OAGZ2B,EAAI0pB,EAAM,IAEd1pB,EAAIA,GAAK,IAAM,IAAOA,EAAI,IAAO,EAAI,IAAMA,EAAI,EAG/C,MAAM2uB,EAAO,IAAIvwB,OAAO4B,EAAI,GAAK,GAC3B4uB,EAAS,IAAIxwB,MAAM,GACzB,IAAK,IAAIiD,EAAI,EAAGqoB,EAAMiF,EAAKtwB,OAAQgD,EAAIqoB,EAAKroB,IAAKstB,EAAKttB,GAAK,EAC3D,IAAK,IAAIA,EAAI,EAAGqoB,EAAMkF,EAAOvwB,OAAQgD,EAAIqoB,EAAKroB,IAAKutB,EAAOvtB,GAAK,EAC/DqoB,EAAMA,EAAIhsB,SAAS,GACnB,IAAK,IAAI2D,EAAI,EAAGA,GAAK,EAAGA,IACtB,GAAIqoB,EAAIrrB,OAAS,EAAG,CAClB,MAAMuO,EAAQ8c,EAAIrrB,OAAS,EAC3BuwB,EAAOvtB,GAAKrC,SAAS0qB,EAAIxd,OAAOU,GAAQ,GACxC8c,EAAMA,EAAIxd,OAAO,EAAGU,EACtB,MAAW8c,EAAIrrB,OAAS,IACtBuwB,EAAOvtB,GAAKrC,SAAS0qB,EAAK,GAC1BA,EAAM,IAGV,MAAMrK,EAAI,IAAI1V,WAAW,IAAIxK,EAAO,OAASwvB,KAASC,IAChDpd,EAAW,IAAIC,SAAS4N,EAAExR,OAAQ,GAGlCuL,EAAIiG,EAAEhhB,OAAS,GACfoN,EAAI,IAAIqC,YAAY,CACxB,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,aAEtF,IAAK,IAAIzM,EAAI,EAAGA,EAAI+X,EAAG/X,IAAK,CAC1BqK,GAAEmjB,KAAK,GACP5jB,GAAE4jB,KAAK,GAGP,MAAMjiB,EAAQ,GAAKvL,EACnB,IAAK,IAAI+H,EAAI,EAAGA,EAAI,GAAIA,IACtBsC,GAAEtC,GAAKoI,EAASsd,UAAwB,GAAbliB,EAAQxD,IAAQ,GAI7C,IAAK,IAAIA,EAAI,GAAIA,EAAI,GAAIA,IACvBsC,GAAEtC,IAnDIuC,EAmDID,GAAEtC,EAAI,IAAMsC,GAAEtC,EAAI,GAAKolB,GAAK9iB,GAAEtC,EAAI,GAAI,KAlDzColB,GAAK7iB,EAAG,IAAM6iB,GAAK7iB,EAAG,IAkD0B6iB,GAAK9iB,GAAEtC,EAAI,IAAK,GAAKsC,GAAEtC,EAAI,GAIpF,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,IACtB6B,GAAE7B,GAAKsC,GAAEtC,GAAKsC,GAAEtC,EAAI,GAItB,MAAM2lB,EAAK,WACLC,EAAK,WAEX,IASIC,EACAC,EACAC,EACAC,EACA7jB,EAbAlB,EAAIoB,EAAE,GACNnB,EAAImB,EAAE,GACNlB,EAAIkB,EAAE,GACNjB,EAAIiB,EAAE,GACNhB,EAAIgB,EAAE,GACNf,EAAIe,EAAE,GACNd,EAAIc,EAAE,GACNb,EAAIa,EAAE,GAOV,IAAK,IAAIrC,EAAI,EAAGA,EAAI,GAAIA,IACtBmC,EAAInC,GAAK,GAAKA,GAAK,GAAK2lB,EAAKC,EAC7BC,EAAMT,GAAKA,GAAKnkB,EAAG,IAAMI,EAAI+jB,GAAKjjB,EAAGnC,GAAI,GACzC8lB,EAAMD,EAAMT,GAAKnkB,EAAG,IAEpB8kB,GAAO/lB,GAAK,GAAKA,GAAK,GAAKiB,EAAIC,EAAIC,EAAKF,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,GAAMC,EAAI0kB,EAAMjkB,GAAE7B,GAClFgmB,GAAOhmB,GAAK,GAAKA,GAAK,GAAKqB,EAAIC,EAAIC,EAAKF,EAAIC,GAAOD,EAAIE,GAAMC,EAAIqkB,EAAMvjB,GAAEtC,GAEzEoB,EAAID,EACJA,EAAIikB,GAAKlkB,EAAG,GACZA,EAAID,EACJA,EAAI8kB,EACJvkB,EAAID,EACJA,EAAI6jB,GAAK9jB,EAAG,IACZA,EAAID,EACJA,EAAIgkB,GAAGW,GAGT3jB,EAAE,IAAMpB,EACRoB,EAAE,IAAMnB,EACRmB,EAAE,IAAMlB,EACRkB,EAAE,IAAMjB,EACRiB,EAAE,IAAMhB,EACRgB,EAAE,IAAMf,EACRe,EAAE,IAAMd,EACRc,EAAE,IAAMb,CACV,CAvGF,IAAYe,EA0GV,MAAMpF,EAAS,GACf,IAAK,IAAIlF,EAAI,EAAGqoB,EAAMje,EAAEpN,OAAQgD,EAAIqoB,EAAKroB,IAAK,CAC5C,MAAMguB,EAAO5jB,EAAEpK,GACfkF,EAAO9G,MAAa,WAAP4vB,KAAuB,IAAY,SAAPA,KAAqB,IAAY,MAAPA,KAAmB,EAAU,IAAPA,EAC3F,CAEA,OAAO9oB,CACT,CAKA,MAAM+oB,GAAW,GACXC,GAAO,IAAI5lB,WAAW2lB,IACtBE,GAAO,IAAI7lB,WAAW2lB,IAC5B,IAAK,IAAIjuB,EAAI,EAAGA,EAAIiuB,GAAUjuB,IAC5BkuB,GAAKluB,GAAK,GACVmuB,GAAKnuB,GAAK,GCrJZ,MAAMsd,WAAEA,IAAeqK,IACjByG,UAAEA,GAASC,UAAEA,IAAcC,IAE3BhlB,EAAEA,GAACugB,MAAEA,GAAK9R,EAAEA,IAAMwW,KAClBC,GAAS,EAoDf,SAASC,GAAUC,EAAarC,EAAYsC,EAAa,GAAGC,OAAEA,EAAS,UAAa,IAClFvC,EAAa,IAAI/O,GAAW+O,EAAY,IAExC,IAAIpY,EAAKya,EAAY7jB,OAAO,IAAK,IAC7BmJ,EAAK0a,EAAY7jB,OAAO,KAExB8jB,IAAeH,KACjBva,EAAKya,EAAY7jB,OAAO6jB,EAAY1xB,OAAS,IAC7CgX,EAAK0a,EAAY7jB,OAAO,IAAK6jB,EAAY1xB,OAAS,IAAM,KAG1D,MAAM6xB,EAAMC,GAAa9a,GAGnBsP,EAFKyL,KAAmBnD,eAAe,KAAO8C,EAAY7jB,OAAO,EAAG,MAE7D2b,SAAS6F,GAChB/B,EAAKwE,GAAaE,GAAU1L,EAAEyG,OAAOJ,eAAevG,QAAQ,IAAK,KACjEmH,EAAKuE,GAAaE,GAAU1L,EAAE2G,OAAON,eAAevG,QAAQ,IAAK,KAEvE,IAAI6L,EAAK,EACL1V,EAAS,EACTtJ,EAAI,GACR,MAAMiT,EAAI,GAAGgM,OAAO5E,EAAIC,GAClB4E,EAAQ,KAGZlf,EAAIod,GAAI,IAAInK,EAAI+L,GAAM,GAAM,IAASA,GAAM,GAAM,IAASA,GAAM,EAAK,IAAa,IAALA,IAC7EA,IACA1V,EAAS,CAAC,EAEZ4V,IAEA,IAAK,IAAInvB,EAAI,EAAGqoB,EAAMwG,EAAI7xB,OAAQgD,EAAIqoB,EAAKroB,IAErCuZ,IAAWtJ,EAAEjT,QAAQmyB,IAGzBN,EAAI7uB,IAAoB,IAAdiQ,EAAEsJ,KAMd,OAFgB6V,GAAa/B,GAAI,GAAG6B,OAAO5E,EAAIuE,EAAKtE,OAEpCtW,EAAG9Q,cACC,UAAXyrB,EAAqBC,EFahC,SAAqB9c,GACnB,MAAM4a,EAAQ,GACd,IAAI5kB,EAAI,EACR,IAAK,IAAI/H,EAAI,EAAGA,EAAiB,EAAb+R,EAAI/U,OAAYgD,GAAK,EACvC2sB,EAAM3sB,IAAM,IAAMrC,SAASoU,EAAIhK,GAAI,KAAQ,GAAM/H,EAAI,EAAK,EAC1D+H,IAGF,IACE,MAAMsnB,EAAc,GAEpB,IAAK,IAAIrvB,EAAI,EAAGA,EAAI+R,EAAI/U,OAAQgD,IAAK,CACnC,MAAM6sB,EAAQF,EAAM3sB,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,IACvDqvB,EAAYjxB,KAAKqE,OAAOiF,aAAamlB,GACvC,CAEA,OAAOyC,mBAAmBC,OAAOF,EAAYpoB,KAAK,KACpD,CAAE,MAAOiJ,GACP,MAAM,IAAI5S,MAAM,uBAClB,CACF,CEjCsCkyB,CAAcX,GAE9B,UAAXD,EAAqB,GAAK,EAErC,CA2FA,SAASa,GAAQC,EAASnD,EAAWoD,EAAS,oBAE5CA,EAASC,GAAYD,GACrB,MAAM/gB,EAAIogB,GAAU1lB,GAAEugB,MAAMjb,EAAE+a,eAAevG,QAAQ,IAAK,IACpDxb,EAAIonB,GAAU1lB,GAAEugB,MAAMjiB,EAAE+hB,eAAevG,QAAQ,IAAK,IACpDyM,EAAKb,GAAU1lB,GAAEygB,OAAOJ,eAAevG,QAAQ,IAAK,IACpD0M,EAAKd,GAAU1lB,GAAE2gB,OAAON,eAAevG,QAAQ,IAAK,IAC1D,IAAI2M,EACAC,EACJ,GAAyB,MAArBzD,EAAUvvB,OACZ+yB,EAAKxD,EAAU1hB,OAAO,EAAG,IACzBmlB,EAAKzD,EAAU1hB,OAAO,GAAI,QACrB,CACL,MAAMolB,EAAQ3mB,GAAEugB,MAAM+B,eAAeW,GACrCwD,EAAKf,GAAUiB,EAAMlG,OAAOJ,eAAevG,QAAQ,IAAK,IACxD4M,EAAKhB,GAAUiB,EAAMhG,OAAON,eAAevG,QAAQ,IAAK,GAC1D,CACA,MAAM8M,EAAOpB,GAAaa,EAAS/gB,EAAIhH,EAAIioB,EAAKC,EAAKC,EAAKC,GAEpDG,EAAuB,EAAhBR,EAAO3yB,OACpBkzB,EAAKhX,QAAe,IAAPiX,GACbD,EAAKhX,QAASiX,GAAQ,EAAK,KAE3B,MAAMjN,EAAImK,GAAI6C,GAGd,OAAOd,GAAa/B,GAAInK,EAAEgM,OAAOJ,GAAaY,KAChD,CAKA,SAASU,GAA2B/D,GAClC,MAAMgE,EAAK/mB,GAAEkd,SAAS,IAAIlJ,GAAW+O,EAAY,KAGjD,MAAO,KAFG2C,GAAUqB,EAAGtG,OAAOJ,eAAettB,SAAS,IAAK,IACjD2yB,GAAUqB,EAAGpG,OAAON,eAAettB,SAAS,IAAK,GAE7D,CAKA,SAASi0B,KACP,MAAMC,EAAUC,KACVH,EAAKxG,GAAM+B,eAAe2E,EAAQhE,WAKxC,OAHAgE,EAAQ5xB,EAAI,IAAI2e,GAAWiT,EAAQlE,WAAY,IAC/CkE,EAAQpG,GAAKkG,EAAGtG,OAAOJ,eAEhB4G,CACT,CAGO,MAAMnE,GAAqBoE,GACrBC,GFtMb,SAA8BzY,GAC5B,GAAiB,MAAbA,EAAEhb,OAAgB,MAAM,IAAIM,MAAM,kCAEtC,MAAM+qB,GAAOrQ,EAAEhb,OAAS,GAAK,EACvB6uB,EAAO7T,EAAEnN,OAAO,EAAGwd,GAGzB,IAAIqI,EAAS,KAGb,OALU,IAAIpT,GAAWtF,EAAEnN,OAAOwd,EAAM,EAAGA,GAAM,IAG3CzH,IAAI,IAAItD,GAAW,MAAMuI,OAAOvI,GAAW8D,QAAOsP,EAAS,MAE1DA,EAAS7E,CAClB,EE4La8E,GF/Eb,SAA6BC,EAAYC,GACvC,MAAMC,EAASjH,GAAM+B,eAAegF,GACpC,IAAKE,EAAQ,OAAO,EAEpB,MAAMC,EAASlH,GAAM+B,eAAeiF,GACpC,QAAKE,GAEED,EAAOjL,OAAOkL,EACvB,EEwEaC,GF9Fb,SAAyBzE,GACvB,MAAM0D,EAAQpG,GAAM+B,eAAeW,GACnC,IAAK0D,EAAO,OAAO,EAEnB,MAAMlX,EAAIkX,EAAMlG,OAIhB,OAHUkG,EAAMhG,OAGPhD,SAASpB,OAAO9M,EAAEyN,SAASzN,EAAEkO,UAAUV,IAAIxN,EAAEyN,SAASqD,GAAMjb,IAAI2X,IAAIsD,GAAMjiB,GACrF,2DG9IM,SAA8B2kB,EAAW0E,GAC7C,OAAOC,GAAwB3E,EAAW0E,EAC5C,uBAZM,SAA+B1E,GACnC,OAAO4E,GAAyB5E,EAClC,mBA0CwBjlB,EAAK+kB,EAAYsC,EAAa,EAAGyC,EAAe,CAAExC,OAAQ,WAChF,OAAOyC,GAAc/pB,EAAK+kB,EAAYsC,EAAYyC,EACpD,uBAU4B9pB,EAAK+kB,EAAYiF,GAC3C,ODsCF,SAAqBzC,EAAKxC,GAAYkF,UAAEA,EAASC,IAAEA,EAAG9iB,KAAEA,EAAI6d,UAAEA,EAASoD,OAAEA,GAAW,IAClF,IAAID,EAAyB,iBAARb,EAAmBe,GAAYf,GAAOO,GAAaP,GAEpEngB,IAGFghB,EAAUD,GAAQC,EADlBnD,EAAYA,GAAa6D,GAA2B/D,GACdsD,IAGxC,MAAM8B,EAAK,IAAInU,GAAW+O,EAAY,IAChCnc,EAAI,IAAIoN,GAAWoS,EAAS,IAGlC,IAAI/wB,EAAI,KACJogB,EAAI,KACJ/G,EAAI,KAER,EAAG,CACD,EAAG,CACD,IAAIiY,EAEFA,EADEsB,GAAaA,EAAUv0B,OACjBu0B,EAAUG,MAEVpB,KAEV3xB,EAAIsxB,EAAMtxB,EAGVogB,EAAI7O,EAAEqW,IAAI0J,EAAM9F,IAAIvJ,IAAI7I,GAC1B,OAASgH,EAAE8G,OAAOvI,GAAW8D,OAASrC,EAAEwH,IAAI5nB,GAAGknB,OAAO9N,KAGtDC,EAAIyZ,EACDlL,IAAIjJ,GAAWgD,KACfwG,WAAW/O,IACXyO,SAAS7nB,EAAE0mB,SAAStG,EAAEyH,SAASiL,KAC/B7Q,IAAI7I,GACT,OAASC,EAAE6N,OAAOvI,GAAW8D,OAE7B,OAAIoQ,EAAYnD,GAAUtP,EAAG/G,GAEtBgX,GAAUjQ,EAAE1iB,SAAS,IAAK,IAAM2yB,GAAUhX,EAAE3b,SAAS,IAAK,GACnE,CChFSs1B,CAAgBrqB,EAAK+kB,EAAYiF,EAC1C,oBAUM,SAA4BhqB,EAAKsqB,EAASrF,EAAWsF,GACzD,ODyEF,SAA2BhD,EAAK+C,EAASrF,GAAWiF,IAAEA,EAAG9iB,KAAEA,EAAIihB,OAAEA,GAAW,IAC1E,IAOI5Q,EACA/G,EARA0X,EAAyB,iBAARb,EAAmBe,GAAYf,GAAOO,GAAaP,GASxE,GAPIngB,IAEFghB,EAAUD,GAAQC,EAASnD,EAAWoD,IAKpC6B,EAAK,CACP,MAAMM,EAAe1D,GAAUwD,GAC/B7S,EAAI+S,EAAa/S,EACjB/G,EAAI8Z,EAAa9Z,CACnB,MACE+G,EAAI,IAAIzB,GAAWsU,EAAQ3uB,UAAU,EAAG,IAAK,IAC7C+U,EAAI,IAAIsF,GAAWsU,EAAQ3uB,UAAU,IAAK,IAG5C,MAAMotB,EAAKxG,GAAM+B,eAAeW,GAC1Brc,EAAI,IAAIoN,GAAWoS,EAAS,IAG5Bzf,EAAI8O,EAAEwH,IAAIvO,GAAG4I,IAAI7I,IAEvB,GAAI9H,EAAE4V,OAAOvI,GAAW8D,MAAO,OAAO,EAGtC,MAAM2Q,EAAOzoB,GAAEkd,SAASxO,GAAGuO,IAAI8J,EAAG7J,SAASvW,IAGrChG,EAAIiG,EAAEqW,IAAIwL,EAAKhI,OAAOJ,gBAAgB/I,IAAI7I,IAEhD,OAAOgH,EAAE8G,OAAO5b,EAClB,CC3GS+nB,CAAsB1qB,EAAKsqB,EAASrF,EAAWsF,EACxD,UAtCM,SAAkBvqB,EAAKilB,EAAWoC,EAAa,GACnD,ODrCF,SAAmBE,EAAKtC,EAAWoC,EAAa,GAC9CE,EAAqB,iBAARA,EAAmBC,GAAac,GAAYf,IAAQ9xB,MAAMX,UAAUN,MAAMQ,KAAKuyB,GAC5FtC,EAAYwC,KAAmBnD,eAAeW,GAE9C,MAAMgE,EAAUC,KACV7xB,EAAI,IAAI2e,GAAWiT,EAAQlE,WAAY,IAG7C,IAAItY,EAAKwc,EAAQhE,UACbxY,EAAG/W,OAAS,MAAK+W,EAAKA,EAAGlJ,OAAOkJ,EAAG/W,OAAS,MAGhD,MAAMsmB,EAAIiJ,EAAU/F,SAAS7nB,GACvB2rB,EAAKwE,GAAaE,GAAU1L,EAAEyG,OAAOJ,eAAevG,QAAQ,IAAK,KACjEmH,EAAKuE,GAAaE,GAAU1L,EAAE2G,OAAON,eAAevG,QAAQ,IAAK,KAGjEnP,EAAKmb,GAAa/B,GAAI,GAAG6B,OAAO5E,EAAIuE,EAAKtE,KAE/C,IAAI0E,EAAK,EACL1V,EAAS,EACTtJ,EAAI,GACR,MAAMiT,EAAI,GAAGgM,OAAO5E,EAAIC,GAClB4E,EAAQ,KAGZlf,EAAIod,GAAI,IAAInK,EAAI+L,GAAM,GAAM,IAASA,GAAM,GAAM,IAASA,GAAM,EAAK,IAAa,IAALA,IAC7EA,IACA1V,EAAS,CAAC,EAEZ4V,IAEA,IAAK,IAAInvB,EAAI,EAAGqoB,EAAMwG,EAAI7xB,OAAQgD,EAAIqoB,EAAKroB,IAErCuZ,IAAWtJ,EAAEjT,QAAQmyB,IAGzBN,EAAI7uB,IAAoB,IAAdiQ,EAAEsJ,KAEd,MAAMvF,EAAKob,GAAaP,GAExB,OAAOF,IAAeH,GAASza,EAAKC,EAAKC,EAAKF,EAAKE,EAAKD,CAC1D,CCLSie,CAAc3qB,EAAKilB,EAAWoC,EACvC,qBA3CM,SAA6BrnB,EAAK4qB,GACtC,OAAOC,GAAuB7qB,EAAK4qB,EACrC,sBAqFE,OAAOE,IACT,6BASM,SAAqC/F,GACzC,OAAOgG,GAA+BhG,EACxC,kBAtEM,SAA0BE,GAC9B,OAAO+F,GAAoB/F,EAC7B,IC1BA,SAASgG,GAAWxgB,GAClB,OAAOA,EACJvT,KAAKuuB,GAEmB,KADvBA,EAAOA,EAAK1wB,SAAS,KACTW,OAAe,IAAM+vB,EAAOA,IAEzC9lB,KAAK,GACV,CAKA,SAAS+lB,GAAWC,GAClB,MAAMN,EAAQ,GACd,IAAIO,EAAeD,EAAOjwB,OAvB5B,IAAiBmO,EAAO9I,EAyBlB6qB,EAAe,GAAM,IAzBH7qB,EA0BK6qB,EAAe,EAAxCD,GA1Ba9hB,EA0BI8hB,GAzBTjwB,QAAUqF,EAAY8I,EAEzB,IAAIpO,MAAMsF,EAAM8I,EAAMnO,OAAS,GAAGiK,KAAK,KAAOkE,GA0BrD+hB,EAAeD,EAAOjwB,OAEtB,IAAK,IAAIgD,EAAI,EAAGA,EAAIktB,EAAcltB,GAAK,EACrC2sB,EAAMvuB,KAAKT,SAASsvB,EAAOpiB,OAAO7K,EAAG,GAAI,KAE3C,OAAO2sB,CACT,CAyCc,SAAA6F,GAAWrnB,EAAOsnB,GAG9B,GAFAtnB,EAAyB,iBAAVA,EArCjB,SAAqB7D,GACnB,MAAMyK,EAAM,GAEZ,IAAK,IAAI/R,EAAI,EAAGqoB,EAAM/gB,EAAItK,OAAQgD,EAAIqoB,EAAKroB,IAAK,CAC9C,MAAMiwB,EAAQ3oB,EAAIorB,YAAY1yB,GAE9B,GAAIiwB,GAAS,IAEXle,EAAI3T,KAAK6xB,QACJ,GAAIA,GAAS,KAElBle,EAAI3T,KAAK,IAAQ6xB,IAAU,GAC3Ble,EAAI3T,KAAK,IAAgB,GAAR6xB,QACZ,GAAIA,GAAS,OAAWA,GAAS,OAAUA,GAAS,MAEzDle,EAAI3T,KAAK,IAAQ6xB,IAAU,IAC3Ble,EAAI3T,KAAK,IAAS6xB,IAAU,EAAK,IACjCle,EAAI3T,KAAK,IAAgB,GAAR6xB,OACZ,MAAIA,GAAS,OAAYA,GAAS,SAUvC,MADAle,EAAI3T,KAAK6xB,GACH,IAAI3yB,MAAM,0BARhB0C,IACA+R,EAAI3T,KAAK,IAAS6xB,IAAU,GAAM,IAClCle,EAAI3T,KAAK,IAAS6xB,IAAU,GAAM,IAClCle,EAAI3T,KAAK,IAAS6xB,IAAU,EAAK,IACjCle,EAAI3T,KAAK,IAAgB,GAAR6xB,EAKnB,CACF,CAEA,OAAOle,CACT,CAIsC4gB,CAAYxnB,GAASpO,MAAMX,UAAUN,MAAMQ,KAAK6O,GAEhFsnB,EAAS,CAEX,GAAa,UADAA,EAAQG,MAAQ,QACR,MAAM,IAAIt1B,MAAM,gBAErC,IAAIoQ,EAAM+kB,EAAQ/kB,IAClB,IAAKA,EAAK,MAAM,IAAIpQ,MAAM,eAG1B,OADAoQ,EAAqB,iBAARA,EAAmBsf,GAAWtf,GAAO3Q,MAAMX,UAAUN,MAAMQ,KAAKoR,GACtE6kB,GHiEX,SAAcpnB,EAAOuC,GAGnB,IADIA,EAAI1Q,OAASixB,KAAUvgB,EAAM2f,GAAI3f,IAC9BA,EAAI1Q,OAASixB,IAAUvgB,EAAItP,KAAK,GAEvC,MAAMy0B,EAAU7M,GAAItY,EAAKwgB,IACnB4E,EAAU9M,GAAItY,EAAKygB,IAEnBzf,EAAO2e,GAAI,IAAIwF,KAAY1nB,IACjC,OAAOkiB,GAAI,IAAIyF,KAAYpkB,GAC7B,CG3EsBqkB,CAAK5nB,EAAOuC,GAChC,CAEA,OAAO6kB,GAAWlF,GAAIliB,GACxB,8CCxFM,SAAkB7D,EAAKmrB,GAC3B,OAAOD,GAAIlrB,EAAKmrB,EAClB,ICVA,MAAMO,GAAU,EACVt7B,GAAQ,GACRu7B,GAAQ,GAERC,GAAO,CACX,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAC5G,IAAM,GAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAC5G,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAC5G,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAC5G,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAC5G,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,IAAM,EAC5G,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAC5G,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAC5G,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAC5G,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,IAC5G,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAAM,GAC5G,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAC5G,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAC5G,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAG5CC,GAAK,CACT,OAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,UAAY,UAAY,WAAY,YAMlD,SAASnG,GAAW1lB,GAClB,MAAMyK,EAAM,GACZ,IAAK,IAAI/R,EAAI,EAAGqoB,EAAM/gB,EAAItK,OAAQgD,EAAIqoB,EAAKroB,GAAK,EAC9C+R,EAAI3T,KAAKT,SAAS2J,EAAIuD,OAAO7K,EAAG,GAAI,KAEtC,OAAO+R,CACT,CAsFA,SAASob,GAAKpU,EAAGhB,GACf,MAAMC,EAAQ,GAAJD,EACV,OAAQgB,GAAKf,EAAMe,IAAO,GAAKf,CACjC,CAKA,SAASob,GAAQxkB,GACf,OAC8B,IAA1BskB,GAAMtkB,IAAM,GAAM,OAAiB,IACT,IAA1BskB,GAAMtkB,IAAM,GAAM,OAAiB,IACV,IAAzBskB,GAAMtkB,IAAM,EAAK,OAAiB,EAClB,IAAjBskB,GAAS,IAAJtkB,EAEV,CAKA,SAASykB,GAAGzrB,GACV,OAAOA,EAAIulB,GAAKvlB,EAAG,GAAKulB,GAAKvlB,EAAG,IAAMulB,GAAKvlB,EAAG,IAAMulB,GAAKvlB,EAAG,GAC9D,CAKA,SAAS0rB,GAAG1rB,GACV,OAAOA,EAAIulB,GAAKvlB,EAAG,IAAMulB,GAAKvlB,EAAG,GACnC,CAKA,SAAS2rB,GAAUpoB,EAAOyjB,EAAQ4E,GAChC,MAAMza,EAAI,IAAIhc,MAAM,GAGd02B,EAAM,IAAI12B,MAAM,GACtB,IAAK,IAAIiD,EAAI,EAAGA,EAAI,EAAGA,IACrByzB,EAAI,GAAoB,IAAftoB,EAAM,EAAInL,GACnByzB,EAAI,GAAwB,IAAnBtoB,EAAM,EAAInL,EAAI,GACvByzB,EAAI,GAAwB,IAAnBtoB,EAAM,EAAInL,EAAI,GACvByzB,EAAI,GAAwB,IAAnBtoB,EAAM,EAAInL,EAAI,GACvB+Y,EAAE/Y,GAAMyzB,EAAI,IAAM,GAAOA,EAAI,IAAM,GAAOA,EAAI,IAAM,EAAKA,EAAI,GAI/D,IAAK,IAAWC,EAAP3U,EAAI,EAAQA,EAAI,GAAIA,GAAK,EAChC2U,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKya,EAASzU,EAAI,GACxChG,EAAE,IAAMsa,GAAGD,GAAQM,IAEnBA,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKya,EAASzU,EAAI,GACxChG,EAAE,IAAMsa,GAAGD,GAAQM,IAEnBA,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKya,EAASzU,EAAI,GACxChG,EAAE,IAAMsa,GAAGD,GAAQM,IAEnBA,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKya,EAASzU,EAAI,GACxChG,EAAE,IAAMsa,GAAGD,GAAQM,IAIrB,IAAK,IAAI3rB,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC3B6mB,EAAO7mB,GAAMgR,EAAE,EAAIhR,EAAI,KAAO,GAAM,IACpC6mB,EAAO7mB,EAAI,GAAMgR,EAAE,EAAIhR,EAAI,KAAO,GAAM,IACxC6mB,EAAO7mB,EAAI,GAAMgR,EAAE,EAAIhR,EAAI,KAAO,EAAK,IACvC6mB,EAAO7mB,EAAI,GAAoB,IAAfgR,EAAE,EAAIhR,EAAI,EAE9B,CAiDA,SAAS4rB,GAAIC,EAASlmB,EAAKmmB,GAAWnc,QAAEA,EAAU,SAAQkb,KAAEA,EAAIkB,GAAEA,EAAK,GAAElF,OAAEA,EAAS,UAAa,CAAA,GAC/F,GAAa,QAATgE,IAEgB,iBAAPkB,IAAiBA,EAAK9G,GAAW8G,IAC1B,KAAdA,EAAG92B,QAEL,MAAM,IAAIM,MAAM,iBAMpB,GADmB,iBAARoQ,IAAkBA,EAAMsf,GAAWtf,IAC3B,KAAfA,EAAI1Q,OAEN,MAAM,IAAIM,MAAM,kBAiBlB,GAVIs2B,EAHmB,iBAAZA,EACLC,IAAcb,GA9MtB,SAAqB1rB,GACnB,MAAMyK,EAAM,GAEZ,IAAK,IAAI/R,EAAI,EAAGqoB,EAAM/gB,EAAItK,OAAQgD,EAAIqoB,EAAKroB,IAAK,CAC9C,MAAMiwB,EAAQ3oB,EAAIorB,YAAY1yB,GAE9B,GAAIiwB,GAAS,IAEXle,EAAI3T,KAAK6xB,QACJ,GAAIA,GAAS,KAElBle,EAAI3T,KAAK,IAAQ6xB,IAAU,GAC3Ble,EAAI3T,KAAK,IAAgB,GAAR6xB,QACZ,GAAIA,GAAS,OAAWA,GAAS,OAAUA,GAAS,MAEzDle,EAAI3T,KAAK,IAAQ6xB,IAAU,IAC3Ble,EAAI3T,KAAK,IAAS6xB,IAAU,EAAK,IACjCle,EAAI3T,KAAK,IAAgB,GAAR6xB,OACZ,MAAIA,GAAS,OAAYA,GAAS,SAUvC,MADAle,EAAI3T,KAAK6xB,GACH,IAAI3yB,MAAM,0BARhB0C,IACA+R,EAAI3T,KAAK,IAAS6xB,IAAU,GAAM,IAClCle,EAAI3T,KAAK,IAAS6xB,IAAU,GAAM,IAClCle,EAAI3T,KAAK,IAAS6xB,IAAU,EAAK,IACjCle,EAAI3T,KAAK,IAAgB,GAAR6xB,EAKnB,CACF,CAEA,OAAOle,CACT,CA+KgB4gB,CAAYiB,GAGZ5G,GAAW4G,GAGb,IAAIA,IAIC,WAAZlc,GAAoC,WAAZA,IAAyBmc,IAAcb,GAAS,CAC3E,MAAMe,EAAed,GAASW,EAAQ52B,OAASi2B,GAC/C,IAAK,IAAIjzB,EAAI,EAAGA,EAAI+zB,EAAc/zB,IAAK4zB,EAAQx1B,KAAK21B,EACtD,CAGA,MAAMP,EAAW,IAAIz2B,MAAMrF,KAjF7B,SAAoBgW,EAAK8lB,EAAUK,GACjC,MAAM9a,EAAI,IAAIhc,MAAM,GAGd02B,EAAM,IAAI12B,MAAM,GACtB,IAAK,IAAIiD,EAAI,EAAGA,EAAI,EAAGA,IACrByzB,EAAI,GAAsB,IAAjB/lB,EAAI,EAAI,EAAI1N,GACrByzB,EAAI,GAAsB,IAAjB/lB,EAAI,EAAI,EAAI1N,GACrByzB,EAAI,GAAsB,IAAjB/lB,EAAI,EAAI,EAAI1N,GACrByzB,EAAI,GAAsB,IAAjB/lB,EAAI,EAAI,EAAI1N,GACrB+Y,EAAE/Y,GAAMyzB,EAAI,IAAM,GAAOA,EAAI,IAAM,GAAOA,EAAI,IAAM,EAAKA,EAAI,GAI/D1a,EAAE,IAAM,WACRA,EAAE,IAAM,WACRA,EAAE,IAAM,WACRA,EAAE,IAAM,WAGR,IAAK,IAAW2a,EAAP3U,EAAI,EAAQA,EAAI,GAAIA,GAAK,EAChC2U,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKoa,GAAGpU,EAAI,GAClCyU,EAASzU,EAAI,GAAKhG,EAAE,IAAMua,GAAGF,GAAQM,IAErCA,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKoa,GAAGpU,EAAI,GAClCyU,EAASzU,EAAI,GAAKhG,EAAE,IAAMua,GAAGF,GAAQM,IAErCA,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKoa,GAAGpU,EAAI,GAClCyU,EAASzU,EAAI,GAAKhG,EAAE,IAAMua,GAAGF,GAAQM,IAErCA,EAAM3a,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKoa,GAAGpU,EAAI,GAClCyU,EAASzU,EAAI,GAAKhG,EAAE,IAAMua,GAAGF,GAAQM,IAIvC,GAAIG,IAAcb,GAChB,IAAK,IAAWU,EAAP3U,EAAI,EAAQA,EAAI,GAAIA,IAC3B2U,EAAMF,EAASzU,GACfyU,EAASzU,GAAKyU,EAAS,GAAKzU,GAC5ByU,EAAS,GAAKzU,GAAK2U,CAGzB,CAwCEM,CAAWtmB,EAAK8lB,EAAUK,GAE1B,MAAMI,EAAW,GACjB,IAAIC,EAAaJ,EACbK,EAAUP,EAAQ52B,OAClBizB,EAAQ,EACZ,KAAOkE,GAAWlB,IAAO,CACvB,MAAM9nB,EAAQyoB,EAAQ93B,MAAMm0B,EAAOA,EAAQ,IACrCrB,EAAS,IAAI7xB,MAAM,IAEzB,GAAa,QAAT61B,EACF,IAAK,IAAI5yB,EAAI,EAAGA,EAAIizB,GAAOjzB,IACrB6zB,IAAcb,KAEhB7nB,EAAMnL,IAAMk0B,EAAWl0B,IAK7BuzB,GAAUpoB,EAAOyjB,EAAQ4E,GAEzB,IAAK,IAAIxzB,EAAI,EAAGA,EAAIizB,GAAOjzB,IACZ,QAAT4yB,GACEiB,IAAcb,KAEhBpE,EAAO5uB,IAAMk0B,EAAWl0B,IAI5Bi0B,EAAShE,EAAQjwB,GAAK4uB,EAAO5uB,GAGlB,QAAT4yB,IAGAsB,EAFEL,IAAcb,GAEHpE,EAGAzjB,GAIjBgpB,GAAWlB,GACXhD,GAASgD,EACX,CAGA,IAAiB,WAAZvb,GAAoC,WAAZA,IAAyBmc,IAAcb,GAAS,CAC3E,MAAM3K,EAAM4L,EAASj3B,OACf+2B,EAAeE,EAAS5L,EAAM,GACpC,IAAK,IAAIroB,EAAI,EAAGA,GAAK+zB,EAAc/zB,IACjC,GAAIi0B,EAAS5L,EAAMroB,KAAO+zB,EAAc,MAAM,IAAIz2B,MAAM,sBAE1D22B,EAAS51B,OAAOgqB,EAAM0L,EAAcA,EACtC,CAGA,MAAe,UAAXnF,EACEiF,IAAcb,GAEEiB,EAvSnBz1B,KAAKuuB,GAEmB,KADvBA,EAAOA,EAAK1wB,SAAS,KACTW,OAAe,IAAM+vB,EAAOA,IAEzC9lB,KAAK,IA4CV,SAAqB8K,GACnB,MAAMzK,EAAM,GACZ,IAAK,IAAItH,EAAI,EAAGqoB,EAAMtW,EAAI/U,OAAQgD,EAAIqoB,EAAKroB,IACrC+R,EAAI/R,IAAM,KAAQ+R,EAAI/R,IAAM,KAE9BsH,EAAIlJ,KACFqE,OAAO2xB,gBACM,EAATriB,EAAI/R,KAAc,MAAqB,GAAb+R,EAAI/R,EAAI,KAAc,MAAqB,GAAb+R,EAAI/R,EAAI,KAAc,IAAmB,GAAb+R,EAAI/R,EAAI,MAGlGA,GAAK,GACI+R,EAAI/R,IAAM,KAAQ+R,EAAI/R,IAAM,KAErCsH,EAAIlJ,KAAKqE,OAAO2xB,gBAAyB,GAATriB,EAAI/R,KAAc,MAAqB,GAAb+R,EAAI/R,EAAI,KAAc,IAAmB,GAAb+R,EAAI/R,EAAI,MAC9FA,GAAK,GACI+R,EAAI/R,IAAM,KAAQ+R,EAAI/R,IAAM,KAErCsH,EAAIlJ,KAAKqE,OAAO2xB,gBAAyB,GAATriB,EAAI/R,KAAc,IAAmB,GAAb+R,EAAI/R,EAAI,MAChEA,KAGAsH,EAAIlJ,KAAKqE,OAAO2xB,cAAcriB,EAAI/R,KAItC,OAAOsH,EAAIL,KAAK,GAClB,CAgOaotB,CAAYJ,GAGdA,CAEX,uDCvUwB3sB,EAAKoG,EAAK+kB,GAChC,gBD6UsBmB,EAASlmB,EAAK+kB,GACpC,OAAOkB,GAAIC,EAASlmB,EAAK,EAAG+kB,EAC9B,CC/US6B,CAAYhtB,EAAKoG,EAAK+kB,EAC/B,mBAbwBnrB,EAAKoG,EAAK+kB,GAChC,gBDoVsBmB,EAASlmB,EAAK+kB,GACpC,OAAOkB,GAAIC,EAASlmB,EAAK,EAAG+kB,EAC9B,CCtVS8B,CAAYjtB,EAAKoG,EAAK+kB,EAC/B,ICTA,MAAMxqB,OAAEA,GAAMwD,OAAEA,GAAMjD,WAAEA,GAAUD,WAAEA,IAAe2G,GAqBnD,MAAMslB,GASJ,aAAOC,CAAOtpB,EAAOkN,GACnB,MACMqc,EAAKrc,EAAErb,OADF,EACgB,EAE3B,IAAI23B,EAAQ,CAAC,GAAI,GAAI,GAAI,IACzB,IAAK,IAAI30B,EAAI,EAAGA,EAAI,GAAQA,IAAK20B,EAAM30B,EAAI,GAAGmB,KAAK0B,MAAM7C,EAAI,IAAMmL,EAAMnL,GAEzE20B,EAAQH,GAAII,YAAYD,EAAOtc,EAAG,EANvB,GAQX,IAAK,IAAIwc,EAAQ,EAAGA,EAAQH,EAAIG,IAC9BF,EAAQH,GAAIM,SAASH,EATZ,GAUTA,EAAQH,GAAIO,UAAUJ,EAVb,GAWTA,EAAQH,GAAIQ,WAAWL,EAXd,GAYTA,EAAQH,GAAII,YAAYD,EAAOtc,EAAGwc,EAZzB,GAeXF,EAAQH,GAAIM,SAASH,EAfV,GAgBXA,EAAQH,GAAIO,UAAUJ,EAhBX,GAiBXA,EAAQH,GAAII,YAAYD,EAAOtc,EAAGqc,EAjBvB,GAmBX,MAAM9F,EAAS,IAAI7xB,MAAM,IACzB,IAAK,IAAIiD,EAAI,EAAGA,EAAI,GAAQA,IAAK4uB,EAAO5uB,GAAK20B,EAAM30B,EAAI,GAAGmB,KAAK0B,MAAM7C,EAAI,IAEzE,OAAO4uB,CACT,CAQA,mBAAOqG,CAAavnB,GAClB,MACMwnB,EAAKxnB,EAAI1Q,OAAS,EAClB03B,EAAKQ,EAAK,EAEV7c,EAAI,IAAItb,MAJH,GAIe23B,EAAK,IAC/B,IAAIS,EAAO,IAAIp4B,MAAM,GAGrB,IAAK,IAAIiD,EAAI,EAAGA,EAAIk1B,EAAIl1B,IAAK,CAC3B,MAAM+e,EAAI,CAACrR,EAAI,EAAI1N,GAAI0N,EAAI,EAAI1N,EAAI,GAAI0N,EAAI,EAAI1N,EAAI,GAAI0N,EAAI,EAAI1N,EAAI,IACnEqY,EAAErY,GAAK+e,CACT,CAGA,IAAK,IAAI/e,EAAIk1B,EAAIl1B,EAdN,GAcgB00B,EAAK,GAAI10B,IAAK,CACvCqY,EAAErY,GAAK,IAAIjD,MAAM,GACjB,IAAK,IAAIkT,EAAI,EAAGA,EAAI,EAAGA,IAAKklB,EAAKllB,GAAKoI,EAAErY,EAAI,GAAGiQ,GAE/C,GAAIjQ,EAAIk1B,GAAM,EAAG,CACfC,EAAOX,GAAIY,QAAQZ,GAAIa,QAAQF,IAC/B,IAAK,IAAIllB,EAAI,EAAGA,EAAI,EAAGA,IAAKklB,EAAKllB,IAAMukB,GAAIc,KAAKt1B,EAAIk1B,GAAIjlB,EAC1D,MAESilB,EAAK,GAAKl1B,EAAIk1B,GAAM,IAC3BC,EAAOX,GAAIY,QAAQD,IAGrB,IAAK,IAAIllB,EAAI,EAAGA,EAAI,EAAGA,IAAKoI,EAAErY,GAAGiQ,GAAKoI,EAAErY,EAAIk1B,GAAIjlB,GAAKklB,EAAKllB,EAC5D,CAEA,OAAOoI,CACT,CAOA,eAAOyc,CAAS9c,EAAGud,GACjB,IAAK,IAAIxW,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIlX,EAAI,EAAGA,EAAI0tB,EAAI1tB,IAAKmQ,EAAE+G,GAAGlX,GAAK2sB,GAAIgB,KAAKxd,EAAE+G,GAAGlX,IAEvD,OAAOmQ,CACT,CAOA,gBAAO+c,CAAU/c,EAAGud,GAClB,MAAMtlB,EAAI,IAAIlT,MAAM,GACpB,IAAK,IAAIgiB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAIlX,EAAI,EAAGA,EAAI,EAAGA,IAAKoI,EAAEpI,GAAKmQ,EAAE+G,IAAIlX,EAAIkX,GAAKwW,GAClD,IAAK,IAAI1tB,EAAI,EAAGA,EAAI,EAAGA,IAAKmQ,EAAE+G,GAAGlX,GAAKoI,EAAEpI,EAC1C,CACA,OAAOmQ,CACT,CAOA,iBAAOgd,CAAWhd,EAAGud,GACnB,IAAK,IAAI1tB,EAAI,EAAGA,EAAI0tB,EAAI1tB,IAAK,CAC3B,MAAM+G,EAAI,IAAI7R,MAAMw4B,GACd3tB,EAAI,IAAI7K,MAAMw4B,GACpB,IAAK,IAAIxW,EAAI,EAAGA,EAAI,EAAGA,IACrBnQ,EAAEmQ,GAAK/G,EAAE+G,GAAGlX,GACZD,EAAEmX,GAAe,IAAV/G,EAAE+G,GAAGlX,GAAamQ,EAAE+G,GAAGlX,IAAM,EAAK,IAASmQ,EAAE+G,GAAGlX,IAAM,EAG/DmQ,EAAE,GAAGnQ,GAAKD,EAAE,GAAKgH,EAAE,GAAKhH,EAAE,GAAKgH,EAAE,GAAKA,EAAE,GACxCoJ,EAAE,GAAGnQ,GAAK+G,EAAE,GAAKhH,EAAE,GAAKgH,EAAE,GAAKhH,EAAE,GAAKgH,EAAE,GACxCoJ,EAAE,GAAGnQ,GAAK+G,EAAE,GAAKA,EAAE,GAAKhH,EAAE,GAAKgH,EAAE,GAAKhH,EAAE,GACxCoQ,EAAE,GAAGnQ,GAAK+G,EAAE,GAAKhH,EAAE,GAAKgH,EAAE,GAAKA,EAAE,GAAKhH,EAAE,EAC1C,CACA,OAAOoQ,CACT,CAOA,kBAAO4c,CAAYD,EAAOtc,EAAG6Z,EAAKqD,GAChC,IAAK,IAAIxW,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIlX,EAAI,EAAGA,EAAI0tB,EAAI1tB,IAAK8sB,EAAM5V,GAAGlX,IAAMwQ,EAAQ,EAAN6Z,EAAUrqB,GAAGkX,GAE7D,OAAO4V,CACT,CAOA,cAAOS,CAAQ/c,GACb,IAAK,IAAIrY,EAAI,EAAGA,EAAI,EAAGA,IAAKqY,EAAErY,GAAKw0B,GAAIgB,KAAKnd,EAAErY,IAC9C,OAAOqY,CACT,CAOA,cAAOgd,CAAQhd,GACb,MAAMob,EAAMpb,EAAE,GACd,IAAK,IAAIrY,EAAI,EAAGA,EAAI,EAAGA,IAAKqY,EAAErY,GAAKqY,EAAErY,EAAI,GAEzC,OADAqY,EAAE,GAAKob,EACApb,CACT,EAIFmc,GAAIgB,KAAO,CACT,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAC5G,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAC5G,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,EAC5G,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAC5G,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAC5G,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAC5G,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAC5G,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAC5G,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAC5G,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAC5G,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAC5G,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAC5G,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAC5G,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAIlDhB,GAAIc,KAAO,CACT,CAAC,EAAM,EAAM,EAAM,GACnB,CAAC,EAAM,EAAM,EAAM,GACnB,CAAC,EAAM,EAAM,EAAM,GACnB,CAAC,EAAM,EAAM,EAAM,GACnB,CAAC,EAAM,EAAM,EAAM,GACnB,CAAC,GAAM,EAAM,EAAM,GACnB,CAAC,GAAM,EAAM,EAAM,GACnB,CAAC,GAAM,EAAM,EAAM,GACnB,CAAC,IAAM,EAAM,EAAM,GACnB,CAAC,GAAM,EAAM,EAAM,GACnB,CAAC,GAAM,EAAM,EAAM,IAqBrB,MAAMG,WAAejB,GAcnB,cAAOkB,CAAQC,EAAWC,EAAUC,GAClC,IAAK,CAAC,IAAK,IAAK,KAAKC,SAASD,GAAQ,MAAM,IAAIv4B,MAAM,mCACtDq4B,EAAYF,GAAOltB,WAAW9F,OAAOkzB,IACrCC,EAAWH,GAAOltB,WAAW9F,OAAOmzB,IAIpC,MAAMG,EAASF,EAAQ,EACjBG,EAAU,IAAIj5B,MAAMg5B,GAC1B,IAAK,IAAI/1B,EAAI,EAAGA,EAAI+1B,EAAQ/1B,IAE1Bg2B,EAAQh2B,GAAKA,EAAI41B,EAAS54B,OAAS44B,EAASnuB,WAAWzH,GAAK,EAE9D,IAAI0N,EAAM8mB,GAAIC,OAAOuB,EAASxB,GAAIS,aAAae,IAC/CtoB,EAAMA,EAAIwhB,OAAOxhB,EAAI5R,MAAM,EAAGi6B,EAAS,KAIvC,MAAME,GAAY,IAAI74B,MAAOwC,UACvBs2B,EAAUD,EAAY,IACtBE,EAAWh1B,KAAK0B,MAAMozB,EAAY,KAClCG,EAAWj1B,KAAK0B,MAAsB,MAAhB1B,KAAKqkB,UAE3B6Q,EAAe,CAET,IAAVH,EACCA,IAAY,EAAK,IACP,IAAXE,EACCA,IAAa,EAAK,IACR,IAAXD,EACCA,IAAa,EAAK,IAClBA,IAAa,GAAM,IACnBA,IAAa,GAAM,IACpB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAIIG,EAAWD,EACdv6B,MAAM,EAAG,GACT0C,KAAKwB,GAAMyC,OAAOiF,aAAa1H,KAC/BiH,KAAK,IAGFsvB,EAAiBZ,EAAUj0B,MAAM,IAAIlD,KAAK+W,GAAOA,EAAG9N,WAAW,KAM/D+uB,EAHkBf,GAAOgB,eAAeF,EAAgB7oB,EAAK2oB,GAG5B73B,KAAKwB,GAAMyC,OAAOiF,aAAa1H,KAAIiH,KAAK,IAK/E,OAFsBwuB,GAAOiB,aAAaJ,EAAWE,EAGvD,CAmBA,qBAAOC,CAAed,EAAWjoB,EAAK2oB,GACpC,MAAMM,EAAY,GAGZC,EAAcpC,GAAIS,aAAavnB,GAE/BiL,EAAaxX,KAAKC,KAAKu0B,EAAU34B,OAAS25B,GAC1CE,EAAa,IAAI95B,MAAM44B,EAAU34B,QAEvC,IAAK,IAAI4K,EAAI,EAAGA,EAAI+Q,EAAY/Q,IAAK,CAEnC,MAAMkvB,EAAatC,GAAIC,OAAO4B,EAAcO,GAGtCG,EAAcnvB,EAAI+Q,EAAa,EAAIge,GAAchB,EAAU34B,OAAS,GAAK25B,EAAa,EAG5F,IAAK,IAAI32B,EAAI,EAAGA,EAAI+2B,EAAa/2B,IAC/B62B,EAAWjvB,EAAI+uB,EAAY32B,GAAK82B,EAAW92B,GAAK21B,EAAU/tB,EAAI+uB,EAAY32B,GAI5Eq2B,EAAaM,MAEb,IAAK,IAAI32B,EAAI22B,GAAe32B,GAAK,EAAGA,IAClCq2B,EAAar2B,EAAI,IAAMq2B,EAAar2B,IAAM,EAC1Cq2B,EAAar2B,IAAM,IAIW,oBAArBg3B,mBAAoCrxB,gBAAgBqxB,mBACzDpvB,EAAI,KAAQ,GAAGjC,KAAKsxB,YAAY,CAAEC,SAAUtvB,EAAI+Q,GAExD,CAEA,OAAOke,CACT,CAaA,cAAOM,CAAQN,EAAYjB,EAAUC,GACnC,IAAK,CAAC,IAAK,IAAK,KAAKC,SAASD,GAAQ,MAAM,IAAIv4B,MAAM,mCACtDu5B,EAAapB,GAAO2B,aAAa30B,OAAOo0B,IACxCjB,EAAWH,GAAOltB,WAAW9F,OAAOmzB,IAGpC,MAAMG,EAASF,EAAQ,EACjBG,EAAU,IAAIj5B,MAAMg5B,GAC1B,IAAK,IAAI/1B,EAAI,EAAGA,EAAI+1B,EAAQ/1B,IAE1Bg2B,EAAQh2B,GAAKA,EAAI41B,EAAS54B,OAAS44B,EAASnuB,WAAWzH,GAAK,EAE9D,IAAI0N,EAAM8mB,GAAIC,OAAOuB,EAASxB,GAAIS,aAAae,IAC/CtoB,EAAMA,EAAIwhB,OAAOxhB,EAAI5R,MAAM,EAAGi6B,EAAS,KAGvC,MAAMM,EAAe,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnE,IAAK,IAAIr2B,EAAI,EAAGA,EAAI,EAAGA,IAAKq2B,EAAar2B,GAAK62B,EAAWpvB,WAAWzH,GAGpE,MAAMq3B,EAAkB,IAAIt6B,MAAM85B,EAAW75B,OAAS,GACtD,IAAK,IAAIgD,EAAI,EAAGA,EAAI62B,EAAW75B,OAAQgD,IAAKq3B,EAAgBr3B,EAAI,GAAK62B,EAAWpvB,WAAWzH,GAG3F,MAGMs3B,EAHiB7B,GAAO8B,eAAeF,EAAiB3pB,EAAK2oB,GAG9B73B,KAAKwB,GAAMyC,OAAOiF,aAAa1H,KAAIiH,KAAK,IAK7E,OAFkBwuB,GAAOjtB,WAAW8uB,EAGtC,CAmBA,qBAAOC,CAAeV,EAAYnpB,EAAK2oB,GACrC,MAAMM,EAAY,GAGZC,EAAcpC,GAAIS,aAAavnB,GAE/BiL,EAAaxX,KAAKC,KAAKy1B,EAAW75B,OAAS25B,GAC3ChB,EAAY,IAAI54B,MAAM85B,EAAW75B,QAEvC,IAAK,IAAI4K,EAAI,EAAGA,EAAI+Q,EAAY/Q,IAAK,CAEnC,MAAMkvB,EAAatC,GAAIC,OAAO4B,EAAcO,GAGtCG,EAAcnvB,EAAI+Q,EAAa,EAAIge,GAAcE,EAAW75B,OAAS,GAAK25B,EAAa,EAG7F,IAAK,IAAI32B,EAAI,EAAGA,EAAI+2B,EAAa/2B,IAC/B21B,EAAU/tB,EAAI+uB,EAAY32B,GAAK82B,EAAW92B,GAAK62B,EAAWjvB,EAAI+uB,EAAY32B,GAI5Eq2B,EAAaM,MAEb,IAAK,IAAI32B,EAAI22B,GAAe32B,GAAK,EAAGA,IAClCq2B,EAAar2B,EAAI,IAAMq2B,EAAar2B,IAAM,EAC1Cq2B,EAAar2B,IAAM,IAIW,oBAArBg3B,mBAAoCrxB,gBAAgBqxB,mBACzDpvB,EAAI,KAAQ,GAAGjC,KAAKsxB,YAAY,CAAEC,SAAUtvB,EAAI+Q,GAExD,CAEA,OAAOgd,CACT,CAUA,iBAAOptB,CAAWjB,GAQhB,OAAOiB,GAAWjB,EACpB,CAKA,iBAAOkB,CAAWlB,GAShB,OAAOkB,GAAWlB,EACpB,CASA,mBAAOovB,CAAapvB,GAMlB,OAAOW,GAAOX,EAChB,CAKA,mBAAO8vB,CAAa9vB,GAKlB,OAAOmE,GAAOnE,EAChB,wDCzfsBA,EAAKoG,EAAK8E,GAChC,OAAOglB,GAAIL,QAAQ7vB,EAAKoG,EAAK8E,EAC/B,UAbM,SAAkBlL,EAAKoG,EAAK8E,EAAO,KACvC,OAAOglB,GAAI9B,QAAQpuB,EAAKoG,EAAK8E,EAC/B,ICTA,MAAMvK,OAAEA,GAAMwD,OAAEA,IAAWyD,GAc3B,SAASuoB,GAAI/pB,EAAKpS,GAChBuS,KAAKH,IAAMA,EACXG,KAAKvS,MAAQA,CACf,CAOAm8B,GAAIr7B,UAAUs7B,WAAa,SAAUhqB,EAAKpS,EAAO+I,GAC/C,IAAIwI,EAAUvR,EACd,GAAa,YAAT+I,EAAoB,CAEtB,IADA,IAAIszB,EAAe,GACV33B,EAA0B,MAAtB1E,EAAMuP,OAAO,EAAG,GAAa,EAAI,EAAG7K,EAAI1E,EAAM0B,OAAQgD,GAAK,EACtE23B,GAAgBl1B,OAAOiF,aAAa/J,SAASrC,EAAMuP,OAAO7K,EAAG,GAAI,KAEnE6M,EAAU8qB,CACZ,CACA,IAohBE5vB,EACAotB,EACAyC,EACAC,EACAC,EACA9e,EACA+e,EACEC,EAASC,EA3hBTC,EAAc,IAAIn7B,MACpB,SACA,EACA,MACA,SACA,SACA,MACA,EACA,MACA,KACA,SACA,SACA,KACA,SACA,SACA,SACA,EACA,KACA,SACA,SACA,MACA,MACA,SACA,SACA,SACA,MACA,SACA,SACA,MACA,EACA,KACA,MACA,SACA,MACA,SACA,EACA,SACA,SACA,SACA,SACA,KACA,SACA,MACA,MACA,SACA,KACA,EACA,SACA,MACA,SACA,MACA,SACA,SACA,SACA,KACA,MACA,SACA,KACA,SACA,SACA,EACA,MACA,MACA,EACA,UAEEo7B,EAAc,IAAIp7B,OACpB,YACA,WACA,MACA,QACA,QACA,IACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,QACA,IACA,WACA,QACA,SACA,WACA,cAEA,MACA,SACA,WACA,SACA,WACA,EACA,QACA,OACA,YACA,WACA,MACA,EACA,SACA,WACA,SACA,wBAEA,WACA,OACA,YACA,WACA,IACA,WACA,QACA,GACA,OACA,WACA,OACA,WACA,SACA,WACA,SACA,uBAEA,QACA,QACA,GACA,WACA,OACA,YACA,YACA,WACA,SAEEq7B,EAAc,IAAIr7B,MACpB,IACA,UACA,EACA,UACA,UACA,EACA,OACA,UACA,OACA,UACA,UACA,OACA,UACA,OACA,UACA,IACA,UACA,EACA,UACA,IACA,OACA,UACA,UACA,OACA,UACA,OACA,OACA,UACA,EACA,UACA,IACA,UACA,UACA,UACA,OACA,IACA,OACA,UACA,UACA,EACA,IACA,OACA,UACA,UACA,UACA,IACA,EACA,UACA,UACA,OACA,UACA,UACA,EACA,OACA,OACA,UACA,UACA,UACA,IACA,UACA,OACA,EACA,UACA,QAEEs7B,EAAc,IAAIt7B,MACpB,QACA,KACA,KACA,IACA,QACA,QACA,QACA,KACA,EACA,QACA,QACA,QACA,IACA,EACA,QACA,QACA,EACA,KACA,QACA,QACA,IACA,QACA,KACA,KACA,QACA,EACA,KACA,QACA,KACA,QACA,QACA,IACA,QACA,QACA,QACA,QACA,IACA,EACA,EACA,QACA,KACA,QACA,QACA,EACA,QACA,KACA,KACA,IACA,QACA,IACA,EACA,KACA,QACA,KACA,QACA,QACA,KACA,KACA,QACA,QACA,IACA,QACA,KACA,SAEEu7B,EAAc,IAAIv7B,MACpB,IACA,SACA,SACA,WACA,OACA,IACA,WACA,SACA,WACA,OACA,SACA,WACA,WACA,WACA,OACA,WACA,SACA,WACA,WACA,EACA,WACA,WACA,WACA,SACA,WACA,WACA,EACA,WACA,SACA,SACA,WACA,OACA,OACA,WACA,IACA,SACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,IACA,SACA,WACA,WACA,OACA,WACA,WACA,SACA,EACA,WACA,WACA,OACA,SACA,WACA,OACA,EACA,WACA,SACA,YAEEw7B,EAAc,IAAIx7B,MACpB,UACA,UACA,MACA,UACA,UACA,GACA,UACA,QACA,UACA,QACA,QACA,UACA,QACA,UACA,UACA,MACA,EACA,QACA,UACA,MACA,QACA,UACA,GACA,UACA,UACA,EACA,QACA,UACA,MACA,QACA,UACA,UACA,UACA,GACA,UACA,QACA,UACA,QACA,MACA,UACA,QACA,UACA,UACA,MACA,UACA,UACA,QACA,UACA,QACA,UACA,EACA,UACA,GACA,MACA,UACA,QACA,MACA,QACA,UACA,EACA,UACA,UACA,QACA,WAEEy7B,EAAc,IAAIz7B,MACpB,QACA,SACA,SACA,EACA,KACA,SACA,QACA,SACA,SACA,QACA,EACA,SACA,EACA,SACA,SACA,KACA,SACA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,KACA,KACA,SACA,QACA,EACA,SACA,QACA,SACA,QACA,QACA,SACA,SACA,SACA,SACA,EACA,QACA,SACA,SACA,QACA,SACA,KACA,QACA,SACA,KACA,SACA,SACA,SACA,QACA,EACA,EACA,SACA,EACA,QACA,SACA,KACA,SACA,SACA,KACA,SAEE07B,EAAc,IAAI17B,MACpB,UACA,KACA,OACA,UACA,UACA,UACA,GACA,UACA,OACA,UACA,UACA,OACA,UACA,OACA,KACA,GACA,UACA,UACA,UACA,KACA,OACA,OACA,UACA,UACA,KACA,EACA,EACA,UACA,UACA,UACA,OACA,OAC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H,IAErG,OAAO+4B,CACT,CACA,OAAO7zB,EAAS2zB,CAClB,EACApB,GAAIr7B,UAAUs8B,eAAiB,SAAUhrB,GAuQvC,IAtQA,IAgQIurB,EACFC,EAGA/D,EApQEgE,EAAY,IAAIp8B,MAClB,EACA,EACA,UACA,UACA,MACA,MACA,UACA,UACA,IACA,IACA,UACA,UACA,MACA,MACA,UACA,WAEEq8B,EAAY,IAAIr8B,MAClB,EACA,EACA,QACA,QACA,SACA,SACA,SACA,SACA,IACA,IACA,QACA,QACA,SACA,SACA,SACA,UAEEs8B,EAAY,IAAIt8B,MAClB,EACA,EACA,KACA,KACA,SACA,SACA,SACA,SACA,EACA,EACA,KACA,KACA,SACA,SACA,SACA,UAEEu8B,EAAY,IAAIv8B,MAClB,EACA,QACA,UACA,UACA,KACA,QACA,UACA,UACA,OACA,QACA,UACA,UACA,OACA,QACA,UACA,WAEEw8B,EAAY,IAAIx8B,MAClB,EACA,OACA,GACA,OACA,EACA,OACA,GACA,OACA,KACA,OACA,KACA,OACA,KACA,OACA,KACA,QAEEy8B,EAAY,IAAIz8B,MAClB,EACA,KACA,GACA,KACA,EACA,KACA,GACA,KACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UAEE08B,EAAY,IAAI18B,MAClB,EACA,UACA,OACA,UACA,EACA,UACA,OACA,UACA,EACA,UACA,OACA,UACA,EACA,UACA,OACA,WAEE28B,EAAY,IAAI38B,MAClB,EACA,MACA,KACA,MACA,UACA,UACA,UACA,UACA,OACA,OACA,OACA,OACA,UACA,UACA,UACA,WAEE48B,EAAY,IAAI58B,MAClB,EACA,OACA,EACA,OACA,EACA,OACA,EACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UAEE68B,EAAY,IAAI78B,MAClB,EACA,UACA,EACA,UACA,EACA,UACA,EACA,UACA,KACA,UACA,KACA,UACA,KACA,UACA,KACA,WAEE88B,EAAa,IAAI98B,MACnB,EACA,GACA,EACA,GACA,QACA,QACA,QAC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"}
1
+ {"version":3,"file":"index.full.umd.min.js","sources":["../../src/id/file:/D:/webWorks/i-utils/src/id/index.ts","../../src/file:/D:/webWorks/i-utils/src/index.ts"],"sourcesContent":["/**\r\n * 生成UUID\r\n * @param {Number} len 生成的长度,默认32位\r\n * @param {Number} radix 进制数,默认16进制\r\n * @example\r\n * getUUID() // 输出:0a559343dbbf0e7e6c1de90163e7aa0a\r\n * @returns {String} 返回字符串\r\n */\r\nexport function getUUID(len: number = 32, radix: number = 16): string {\r\n const CHARS = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\r\n let uuid = [],\r\n i;\r\n radix = radix || CHARS.length;\r\n if (len) {\r\n for (i = 0; i < len; i++) uuid[i] = CHARS[0 | (Math.random() * radix)];\r\n } else {\r\n let r;\r\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = \"-\";\r\n uuid[14] = \"4\";\r\n for (i = 0; i < 36; i++) {\r\n if (!uuid[i]) {\r\n r = 0 | (Math.random() * 16);\r\n uuid[i] = CHARS[i === 19 ? (r & 0x3) | 0x8 : r];\r\n }\r\n }\r\n }\r\n return uuid.join(\"\");\r\n}\r\n\r\n/**\r\n * 生成GUID\r\n * @example\r\n * getGUID() // 输出:275ec770-0853-6767-4875-7b270220ce9c\r\n * @returns {String} 返回字符串\r\n */\r\nexport function getGUID(): string {\r\n let s4 = function () {\r\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n };\r\n return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + s4() + s4();\r\n}\r\n","// 测试加载成功方法\r\nexport function testLoadUtils(): void {\r\n console.log(\"Nice, iUtils loaded successfully!\");\r\n}\r\n\r\n// 生成id\r\nexport * from \"./id/index.ts\";\r\n"],"names":["s4","Math","random","toString","substring","len","radix","CHARS","split","i","uuid","length","r","join","console","log"],"mappings":";;;;;mQAoCE,IAAIA,EAAK,WACP,OAA+B,OAArB,EAAIC,KAAKC,UAAuB,GAAGC,SAAS,IAAIC,UAAU,EACtE,EACA,OAAOJ,IAAOA,IAAO,IAAMA,IAAO,IAAMA,IAAO,IAAMA,IAAO,IAAMA,IAAOA,IAAOA,GAClF,qBAhCwBK,EAAc,GAAIC,EAAgB,IACxD,MAAMC,EAAQ,iEAAiEC,MAAM,IACrF,IACEC,EADEC,EAAO,GAGX,GADAJ,EAAQA,GAASC,EAAMI,OACnBN,EACF,IAAKI,EAAI,EAAGA,EAAIJ,EAAKI,IAAKC,EAAKD,GAAKF,EAAM,EAAKN,KAAKC,SAAWI,OAC1D,CACL,IAAIM,EAGJ,IAFAF,EAAK,GAAKA,EAAK,IAAMA,EAAK,IAAMA,EAAK,IAAM,IAC3CA,EAAK,IAAM,IACND,EAAI,EAAGA,EAAI,GAAIA,IACbC,EAAKD,KACRG,EAAI,EAAqB,GAAhBX,KAAKC,SACdQ,EAAKD,GAAKF,EAAY,KAANE,EAAgB,EAAJG,EAAW,EAAMA,GAGnD,CACA,OAAOF,EAAKG,KAAK,GACnB,6BCzBEC,QAAQC,IAAI,oCACd"}