mongo 2.5.3 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +1 -1
  5. data/README.md +3 -2
  6. data/lib/mongo.rb +2 -2
  7. data/lib/mongo/address.rb +10 -2
  8. data/lib/mongo/address/ipv4.rb +1 -1
  9. data/lib/mongo/address/ipv6.rb +26 -5
  10. data/lib/mongo/address/unix.rb +1 -1
  11. data/lib/mongo/auth.rb +10 -3
  12. data/lib/mongo/auth/cr.rb +4 -1
  13. data/lib/mongo/auth/cr/conversation.rb +4 -1
  14. data/lib/mongo/auth/ldap.rb +1 -1
  15. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  16. data/lib/mongo/auth/roles.rb +1 -1
  17. data/lib/mongo/auth/scram.rb +24 -7
  18. data/lib/mongo/auth/scram/conversation.rb +52 -19
  19. data/lib/mongo/auth/stringprep.rb +114 -0
  20. data/lib/mongo/auth/stringprep/profiles/sasl.rb +73 -0
  21. data/lib/mongo/auth/stringprep/tables.rb +3232 -0
  22. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +174 -0
  23. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1170 -0
  24. data/lib/mongo/auth/user.rb +14 -3
  25. data/lib/mongo/auth/user/view.rb +1 -1
  26. data/lib/mongo/auth/x509.rb +1 -1
  27. data/lib/mongo/auth/x509/conversation.rb +1 -1
  28. data/lib/mongo/bson.rb +1 -1
  29. data/lib/mongo/bulk_write.rb +8 -8
  30. data/lib/mongo/bulk_write/combineable.rb +1 -1
  31. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  32. data/lib/mongo/bulk_write/result.rb +1 -1
  33. data/lib/mongo/bulk_write/result_combiner.rb +4 -4
  34. data/lib/mongo/bulk_write/transformable.rb +1 -1
  35. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  36. data/lib/mongo/bulk_write/validatable.rb +1 -1
  37. data/lib/mongo/client.rb +115 -24
  38. data/lib/mongo/cluster.rb +17 -10
  39. data/lib/mongo/cluster/app_metadata.rb +7 -1
  40. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  41. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  42. data/lib/mongo/cluster/topology.rb +12 -2
  43. data/lib/mongo/cluster/topology/replica_set.rb +9 -1
  44. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  45. data/lib/mongo/cluster/topology/single.rb +1 -1
  46. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  47. data/lib/mongo/collection.rb +75 -19
  48. data/lib/mongo/collection/view.rb +1 -1
  49. data/lib/mongo/collection/view/aggregation.rb +1 -1
  50. data/lib/mongo/collection/view/builder.rb +1 -1
  51. data/lib/mongo/collection/view/builder/aggregation.rb +3 -3
  52. data/lib/mongo/collection/view/builder/find_command.rb +1 -1
  53. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  54. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  55. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  56. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  57. data/lib/mongo/collection/view/change_stream.rb +193 -17
  58. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -20
  59. data/lib/mongo/collection/view/explainable.rb +1 -1
  60. data/lib/mongo/collection/view/immutable.rb +1 -1
  61. data/lib/mongo/collection/view/iterable.rb +2 -2
  62. data/lib/mongo/collection/view/map_reduce.rb +1 -1
  63. data/lib/mongo/collection/view/readable.rb +108 -29
  64. data/lib/mongo/collection/view/writable.rb +3 -3
  65. data/lib/mongo/cursor.rb +44 -4
  66. data/lib/mongo/cursor/builder.rb +1 -1
  67. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  68. data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
  69. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  70. data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
  71. data/lib/mongo/database.rb +46 -3
  72. data/lib/mongo/database/view.rb +11 -11
  73. data/lib/mongo/dbref.rb +1 -1
  74. data/lib/mongo/error.rb +57 -1
  75. data/lib/mongo/error/bulk_write_error.rb +2 -2
  76. data/lib/mongo/error/change_stream_resumable.rb +37 -0
  77. data/lib/mongo/error/closed_stream.rb +1 -1
  78. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  79. data/lib/mongo/error/failed_stringprep_validation.rb +38 -0
  80. data/lib/mongo/error/file_not_found.rb +1 -1
  81. data/lib/mongo/error/insufficient_iteration_count.rb +38 -0
  82. data/lib/mongo/error/invalid_application_name.rb +1 -1
  83. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  84. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  85. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  86. data/lib/mongo/error/invalid_database_name.rb +1 -1
  87. data/lib/mongo/error/invalid_document.rb +1 -1
  88. data/lib/mongo/error/invalid_file.rb +1 -1
  89. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  90. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  91. data/lib/mongo/error/invalid_nonce.rb +1 -1
  92. data/lib/mongo/error/invalid_read_option.rb +35 -0
  93. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  94. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  95. data/lib/mongo/error/invalid_session.rb +1 -1
  96. data/lib/mongo/error/invalid_signature.rb +1 -1
  97. data/lib/mongo/error/invalid_transaction_operation.rb +82 -0
  98. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  99. data/lib/mongo/error/invalid_update_document.rb +1 -1
  100. data/lib/mongo/error/invalid_uri.rb +1 -1
  101. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  102. data/lib/mongo/error/max_bson_size.rb +1 -1
  103. data/lib/mongo/error/max_message_size.rb +1 -1
  104. data/lib/mongo/error/mismatched_domain.rb +1 -1
  105. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  106. data/lib/mongo/error/missing_resume_token.rb +1 -1
  107. data/lib/mongo/error/multi_index_drop.rb +1 -1
  108. data/lib/mongo/error/need_primary_server.rb +1 -1
  109. data/lib/mongo/error/no_server_available.rb +1 -1
  110. data/lib/mongo/error/no_srv_records.rb +1 -1
  111. data/lib/mongo/error/operation_failure.rb +108 -14
  112. data/lib/mongo/error/parser.rb +50 -1
  113. data/lib/mongo/error/socket_error.rb +5 -2
  114. data/lib/mongo/error/socket_timeout_error.rb +5 -2
  115. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  116. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  117. data/lib/mongo/error/unexpected_response.rb +1 -1
  118. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  119. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  120. data/lib/mongo/error/unsupported_collation.rb +1 -1
  121. data/lib/mongo/error/unsupported_features.rb +1 -1
  122. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  123. data/lib/mongo/error/write_retryable.rb +27 -0
  124. data/lib/mongo/event.rb +10 -9
  125. data/lib/mongo/event/base.rb +33 -0
  126. data/lib/mongo/event/description_changed.rb +2 -2
  127. data/lib/mongo/event/listeners.rb +1 -1
  128. data/lib/mongo/event/member_discovered.rb +4 -2
  129. data/lib/mongo/event/primary_elected.rb +2 -2
  130. data/lib/mongo/event/publisher.rb +1 -1
  131. data/lib/mongo/event/standalone_discovered.rb +2 -2
  132. data/lib/mongo/event/subscriber.rb +1 -1
  133. data/lib/mongo/grid.rb +1 -1
  134. data/lib/mongo/grid/file.rb +1 -1
  135. data/lib/mongo/grid/file/chunk.rb +3 -3
  136. data/lib/mongo/grid/file/info.rb +26 -3
  137. data/lib/mongo/grid/fs_bucket.rb +1 -1
  138. data/lib/mongo/grid/stream.rb +1 -1
  139. data/lib/mongo/grid/stream/read.rb +1 -1
  140. data/lib/mongo/grid/stream/write.rb +1 -1
  141. data/lib/mongo/index.rb +1 -1
  142. data/lib/mongo/index/view.rb +1 -1
  143. data/lib/mongo/loggable.rb +1 -1
  144. data/lib/mongo/logger.rb +1 -1
  145. data/lib/mongo/monitoring.rb +99 -62
  146. data/lib/mongo/monitoring/command_log_subscriber.rb +2 -2
  147. data/lib/mongo/monitoring/event.rb +2 -1
  148. data/lib/mongo/monitoring/event/command_failed.rb +19 -6
  149. data/lib/mongo/monitoring/event/command_started.rb +14 -3
  150. data/lib/mongo/monitoring/event/command_succeeded.rb +5 -3
  151. data/lib/mongo/monitoring/event/secure.rb +1 -1
  152. data/lib/mongo/monitoring/event/server_closed.rb +2 -2
  153. data/lib/mongo/monitoring/event/server_description_changed.rb +2 -2
  154. data/lib/mongo/monitoring/event/server_opening.rb +11 -2
  155. data/lib/mongo/monitoring/event/topology_changed.rb +13 -2
  156. data/lib/mongo/monitoring/event/topology_closed.rb +2 -2
  157. data/lib/mongo/monitoring/event/topology_opening.rb +11 -2
  158. data/lib/mongo/monitoring/publishable.rb +10 -6
  159. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  160. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  161. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  162. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  163. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  164. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  165. data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
  166. data/lib/mongo/operation/create/op_msg.rb +9 -0
  167. data/lib/mongo/operation/create_index/op_msg.rb +9 -0
  168. data/lib/mongo/operation/create_user/command.rb +1 -1
  169. data/lib/mongo/operation/create_user/op_msg.rb +10 -1
  170. data/lib/mongo/operation/delete/op_msg.rb +3 -0
  171. data/lib/mongo/operation/distinct/op_msg.rb +9 -0
  172. data/lib/mongo/operation/drop/op_msg.rb +9 -0
  173. data/lib/mongo/operation/drop_database/op_msg.rb +9 -0
  174. data/lib/mongo/operation/drop_index/op_msg.rb +9 -0
  175. data/lib/mongo/operation/explain/op_msg.rb +3 -0
  176. data/lib/mongo/operation/find/op_msg.rb +3 -0
  177. data/lib/mongo/operation/get_more.rb +1 -1
  178. data/lib/mongo/operation/get_more/command.rb +1 -1
  179. data/lib/mongo/operation/get_more/legacy.rb +1 -1
  180. data/lib/mongo/operation/get_more/op_msg.rb +3 -0
  181. data/lib/mongo/operation/indexes/op_msg.rb +3 -0
  182. data/lib/mongo/operation/indexes/result.rb +1 -1
  183. data/lib/mongo/operation/insert/bulk_result.rb +32 -2
  184. data/lib/mongo/operation/insert/op_msg.rb +3 -0
  185. data/lib/mongo/operation/insert/result.rb +1 -1
  186. data/lib/mongo/operation/kill_cursors/op_msg.rb +9 -0
  187. data/lib/mongo/operation/list_collections/op_msg.rb +3 -0
  188. data/lib/mongo/operation/list_collections/result.rb +5 -1
  189. data/lib/mongo/operation/map_reduce/op_msg.rb +3 -0
  190. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  191. data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
  192. data/lib/mongo/operation/remove_user/op_msg.rb +9 -0
  193. data/lib/mongo/operation/result.rb +27 -14
  194. data/lib/mongo/operation/shared/executable.rb +1 -0
  195. data/lib/mongo/operation/shared/sessions_supported.rb +78 -7
  196. data/lib/mongo/operation/shared/specifiable.rb +18 -2
  197. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  198. data/lib/mongo/operation/update/op_msg.rb +3 -0
  199. data/lib/mongo/operation/update_user/command.rb +1 -1
  200. data/lib/mongo/operation/update_user/op_msg.rb +10 -1
  201. data/lib/mongo/operation/users_info/op_msg.rb +3 -0
  202. data/lib/mongo/options.rb +1 -1
  203. data/lib/mongo/options/mapper.rb +1 -1
  204. data/lib/mongo/options/redacted.rb +1 -1
  205. data/lib/mongo/protocol/bit_vector.rb +1 -1
  206. data/lib/mongo/protocol/compressed.rb +1 -1
  207. data/lib/mongo/protocol/delete.rb +1 -1
  208. data/lib/mongo/protocol/get_more.rb +7 -7
  209. data/lib/mongo/protocol/insert.rb +1 -1
  210. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  211. data/lib/mongo/protocol/message.rb +5 -5
  212. data/lib/mongo/protocol/msg.rb +9 -7
  213. data/lib/mongo/protocol/query.rb +1 -1
  214. data/lib/mongo/protocol/registry.rb +1 -1
  215. data/lib/mongo/protocol/reply.rb +10 -10
  216. data/lib/mongo/protocol/serializers.rb +1 -1
  217. data/lib/mongo/protocol/update.rb +1 -1
  218. data/lib/mongo/retryable.rb +22 -14
  219. data/lib/mongo/server.rb +1 -1
  220. data/lib/mongo/server/connectable.rb +1 -1
  221. data/lib/mongo/server/connection.rb +16 -4
  222. data/lib/mongo/server/connection_pool.rb +1 -1
  223. data/lib/mongo/server/connection_pool/queue.rb +1 -1
  224. data/lib/mongo/server/context.rb +1 -1
  225. data/lib/mongo/server/description.rb +14 -2
  226. data/lib/mongo/server/description/features.rb +10 -9
  227. data/lib/mongo/server/description/inspector.rb +1 -1
  228. data/lib/mongo/server/description/inspector/description_changed.rb +1 -1
  229. data/lib/mongo/server/description/inspector/member_discovered.rb +1 -1
  230. data/lib/mongo/server/description/inspector/primary_elected.rb +1 -1
  231. data/lib/mongo/server/description/inspector/standalone_discovered.rb +1 -1
  232. data/lib/mongo/server/monitor.rb +15 -3
  233. data/lib/mongo/server/monitor/connection.rb +1 -1
  234. data/lib/mongo/server_selector.rb +1 -1
  235. data/lib/mongo/server_selector/nearest.rb +1 -1
  236. data/lib/mongo/server_selector/primary.rb +1 -1
  237. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  238. data/lib/mongo/server_selector/secondary.rb +1 -1
  239. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  240. data/lib/mongo/server_selector/selectable.rb +7 -2
  241. data/lib/mongo/session.rb +389 -12
  242. data/lib/mongo/session/server_session.rb +7 -2
  243. data/lib/mongo/session/session_pool.rb +1 -1
  244. data/lib/mongo/socket.rb +1 -1
  245. data/lib/mongo/socket/ssl.rb +1 -1
  246. data/lib/mongo/socket/tcp.rb +1 -1
  247. data/lib/mongo/socket/unix.rb +1 -1
  248. data/lib/mongo/uri.rb +6 -4
  249. data/lib/mongo/uri/srv_protocol.rb +1 -1
  250. data/lib/mongo/version.rb +2 -2
  251. data/lib/mongo/write_concern.rb +1 -1
  252. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  253. data/lib/mongo/write_concern/normalizable.rb +1 -1
  254. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  255. data/mongo.gemspec +4 -1
  256. data/spec/atlas/atlas_connectivity_spec.rb +54 -0
  257. data/spec/integration/bulk_insert_spec.rb +78 -0
  258. data/spec/integration/change_stream_spec.rb +365 -0
  259. data/spec/integration/command_monitoring_spec.rb +92 -0
  260. data/spec/lite_spec_helper.rb +63 -0
  261. data/spec/mongo/address/ipv6_spec.rb +29 -1
  262. data/spec/mongo/address_spec.rb +34 -0
  263. data/spec/mongo/auth/scram/conversation_spec.rb +326 -120
  264. data/spec/mongo/auth/scram/negotiation_spec.rb +574 -0
  265. data/spec/mongo/auth/scram_spec.rb +107 -38
  266. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +113 -0
  267. data/spec/mongo/auth/stringprep_spec.rb +188 -0
  268. data/spec/mongo/auth/user/view_spec.rb +5 -2
  269. data/spec/mongo/auth/user_spec.rb +1 -1
  270. data/spec/mongo/bulk_write/result_spec.rb +120 -0
  271. data/spec/mongo/bulk_write_spec.rb +42 -2
  272. data/spec/mongo/client_spec.rb +121 -9
  273. data/spec/mongo/cluster/app_metadata_spec.rb +14 -1
  274. data/spec/mongo/cluster/topology_spec.rb +1 -23
  275. data/spec/mongo/collection/view/change_stream_spec.rb +62 -180
  276. data/spec/mongo/collection_spec.rb +45 -12
  277. data/spec/mongo/cursor/builder/get_more_command_spec.rb +7 -7
  278. data/spec/mongo/cursor_spec.rb +2 -2
  279. data/spec/mongo/database_spec.rb +3 -3
  280. data/spec/mongo/docs_examples_spec.rb +194 -0
  281. data/spec/mongo/error/operation_failure_spec.rb +152 -0
  282. data/spec/mongo/error/parser_spec.rb +127 -0
  283. data/spec/mongo/grid/fs_bucket_spec.rb +32 -0
  284. data/spec/mongo/grid/stream/write_spec.rb +40 -1
  285. data/spec/mongo/monitoring/event/command_failed_spec.rb +30 -0
  286. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -4
  287. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +29 -7
  288. data/spec/mongo/monitoring_spec.rb +28 -3
  289. data/spec/mongo/protocol/get_more_spec.rb +2 -2
  290. data/spec/mongo/retryable_spec.rb +252 -34
  291. data/spec/mongo/retryable_writes_spec.rb +468 -544
  292. data/spec/mongo/server/connection_spec.rb +5 -5
  293. data/spec/mongo/server/description_spec.rb +23 -6
  294. data/spec/mongo/session/server_session_spec.rb +2 -2
  295. data/spec/mongo/session/session_pool_spec.rb +2 -2
  296. data/spec/mongo/transactions_examples_spec.rb +227 -0
  297. data/spec/mongo/transactions_spec.rb +44 -0
  298. data/spec/spec_helper.rb +135 -49
  299. data/spec/spec_tests/change_streams_spec.rb +42 -0
  300. data/spec/{mongo → spec_tests}/command_monitoring_spec.rb +8 -2
  301. data/spec/{mongo → spec_tests}/connection_string_spec.rb +1 -1
  302. data/spec/{mongo → spec_tests}/crud_spec.rb +5 -7
  303. data/spec/{mongo → spec_tests}/dns_seedlist_discovery_spec.rb +1 -1
  304. data/spec/{mongo → spec_tests}/gridfs_spec.rb +0 -0
  305. data/spec/{mongo → spec_tests}/max_staleness_spec.rb +0 -0
  306. data/spec/spec_tests/retryable_writes_spec.rb +78 -0
  307. data/spec/{mongo → spec_tests}/sdam_monitoring_spec.rb +4 -3
  308. data/spec/{mongo → spec_tests}/sdam_spec.rb +7 -7
  309. data/spec/{mongo → spec_tests}/server_selection_rtt_spec.rb +0 -0
  310. data/spec/{mongo → spec_tests}/server_selection_spec.rb +0 -0
  311. data/spec/support/authorization.rb +18 -6
  312. data/spec/support/change_streams.rb +265 -0
  313. data/spec/support/change_streams/operation.rb +62 -0
  314. data/spec/support/change_streams_tests/change-streams-errors.yml +53 -0
  315. data/spec/support/change_streams_tests/change-streams.yml +299 -0
  316. data/spec/support/command_monitoring.rb +1 -1
  317. data/spec/support/command_monitoring/bulkWrite.yml +4 -28
  318. data/spec/support/command_monitoring/command.yml +19 -0
  319. data/spec/support/command_monitoring/find.yml +17 -19
  320. data/spec/support/command_monitoring/insertMany.yml +2 -8
  321. data/spec/support/command_monitoring/unacknowledgedBulkWrite.yml +34 -0
  322. data/spec/support/connection_string.rb +1 -1
  323. data/spec/support/constraints.rb +56 -0
  324. data/spec/support/crud.rb +9 -4
  325. data/spec/support/crud/read.rb +24 -3
  326. data/spec/support/crud/write.rb +7 -2
  327. data/spec/support/crud_tests/read/count-collation.yml +12 -2
  328. data/spec/support/crud_tests/read/count.yml +43 -5
  329. data/spec/support/gridfs.rb +1 -1
  330. data/spec/support/primary_socket.rb +21 -0
  331. data/spec/support/retryable_writes_tests/bulkWrite-serverErrors.yml +90 -0
  332. data/spec/support/retryable_writes_tests/bulkWrite.yml +99 -1
  333. data/spec/support/retryable_writes_tests/deleteOne-serverErrors.yml +50 -0
  334. data/spec/support/retryable_writes_tests/deleteOne.yml +10 -1
  335. data/spec/support/retryable_writes_tests/findOneAndDelete-serverErrors.yml +50 -0
  336. data/spec/support/retryable_writes_tests/findOneAndDelete.yml +39 -30
  337. data/spec/support/retryable_writes_tests/findOneAndReplace-serverErrors.yml +54 -0
  338. data/spec/support/retryable_writes_tests/findOneAndReplace.yml +9 -0
  339. data/spec/support/retryable_writes_tests/findOneAndUpdate-serverErrors.yml +54 -0
  340. data/spec/support/retryable_writes_tests/findOneAndUpdate.yml +9 -0
  341. data/spec/support/retryable_writes_tests/insertMany-serverErrors.yml +59 -0
  342. data/spec/support/retryable_writes_tests/insertMany.yml +11 -6
  343. data/spec/support/retryable_writes_tests/insertOne-serverErrors.yml +471 -0
  344. data/spec/support/retryable_writes_tests/insertOne.yml +9 -0
  345. data/spec/support/retryable_writes_tests/replaceOne-serverErrors.yml +58 -0
  346. data/spec/support/retryable_writes_tests/replaceOne.yml +9 -0
  347. data/spec/support/retryable_writes_tests/updateOne-serverErrors.yml +58 -0
  348. data/spec/support/retryable_writes_tests/updateOne.yml +71 -53
  349. data/spec/support/sdam/rs/normalize_case_me.yml +100 -0
  350. data/spec/support/sdam/sharded/compatible.yml +38 -0
  351. data/spec/support/sdam/sharded/mongos_disconnect.yml +9 -3
  352. data/spec/support/sdam/sharded/multiple_mongoses.yml +6 -2
  353. data/spec/support/sdam/sharded/non_mongos_removed.yml +6 -2
  354. data/spec/support/sdam/sharded/too_new.yml +36 -0
  355. data/spec/support/sdam/sharded/too_old.yml +36 -0
  356. data/spec/support/sdam/single/compatible.yml +26 -0
  357. data/spec/support/sdam/single/direct_connection_external_ip.yml +3 -1
  358. data/spec/support/sdam/single/direct_connection_mongos.yml +3 -1
  359. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +3 -1
  360. data/spec/support/sdam/single/direct_connection_rsprimary.yml +3 -1
  361. data/spec/support/sdam/single/direct_connection_rssecondary.yml +3 -1
  362. data/spec/support/sdam/single/direct_connection_slave.yml +3 -1
  363. data/spec/support/sdam/single/direct_connection_standalone.yml +3 -1
  364. data/spec/support/sdam/single/not_ok_response.yml +6 -2
  365. data/spec/support/sdam/single/standalone_removed.yml +3 -1
  366. data/spec/support/sdam/single/too_new.yml +26 -0
  367. data/spec/support/sdam/single/too_old.yml +24 -0
  368. data/spec/support/shared/session.rb +107 -0
  369. data/spec/support/transactions.rb +391 -0
  370. data/spec/support/transactions/operation.rb +373 -0
  371. data/spec/support/transactions_tests/abort.yml +403 -0
  372. data/spec/support/transactions_tests/bulk.yml +267 -0
  373. data/spec/support/transactions_tests/causal-consistency.yml +173 -0
  374. data/spec/support/transactions_tests/commit.yml +593 -0
  375. data/spec/support/transactions_tests/delete.yml +184 -0
  376. data/spec/support/transactions_tests/error-labels.yml +948 -0
  377. data/spec/support/transactions_tests/errors.yml +125 -0
  378. data/spec/support/transactions_tests/findOneAndDelete.yml +126 -0
  379. data/spec/support/transactions_tests/findOneAndReplace.yml +140 -0
  380. data/spec/support/transactions_tests/findOneAndUpdate.yml +228 -0
  381. data/spec/support/transactions_tests/insert.yml +264 -0
  382. data/spec/support/transactions_tests/isolation.yml +125 -0
  383. data/spec/support/transactions_tests/read-pref.yml +340 -0
  384. data/spec/support/transactions_tests/reads.yml +298 -0
  385. data/spec/support/transactions_tests/retryable-abort.yml +1292 -0
  386. data/spec/support/transactions_tests/retryable-commit.yml +1332 -0
  387. data/spec/support/transactions_tests/retryable-writes.yml +208 -0
  388. data/spec/support/transactions_tests/run-command.yml +189 -0
  389. data/spec/support/transactions_tests/transaction-options.yml +877 -0
  390. data/spec/support/transactions_tests/update.yml +246 -0
  391. data/spec/support/transactions_tests/write-concern.yml +236 -0
  392. metadata +494 -359
  393. metadata.gz.sig +0 -0
  394. data/lib/csasl/csasl.bundle +0 -0
@@ -0,0 +1,114 @@
1
+ # Copyright (C) 2018 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'mongo/auth/stringprep/tables'
16
+ require 'mongo/auth/stringprep/profiles/sasl'
17
+
18
+ module Mongo
19
+ module Auth
20
+ # This namespace contains all behavior related to string preparation (RFC 3454). It's used to
21
+ # implement SCRAM-SHA-256 authentication, which is available in MongoDB server versions 4.0 and
22
+ # up.
23
+ #
24
+ # @since 2.6.0
25
+ module StringPrep
26
+ extend self
27
+
28
+ # Prepare a string given a set of mappings and prohibited character tables.
29
+ #
30
+ # @example Prepare a string.
31
+ # StringPrep.prepare("some string",
32
+ # StringPrep::Profiles::SASL::MAPPINGS,
33
+ # StringPrep::Profiles::SASL::PROHIBITED,
34
+ # normalize: true, bidi: true)
35
+ #
36
+ # @param [ String ] data The string to prepare.
37
+ # @param [ Array ] mappings A list of mappings to apply to the data.
38
+ # @param [ Array ] prohibited A list of prohibited character lists to ensure the data doesn't
39
+ # contain after mapping and normalizing the data.
40
+ # @param [ Hash ] options Optional operations to perform during string preparation.
41
+ #
42
+ # @option options [ Boolean ] :normalize Whether or not to apply Unicode normalization to the
43
+ # data.
44
+ # @option options [ Boolean ] :bidi Whether or not to ensure that the data contains valid
45
+ # bidirectional input.
46
+ #
47
+ # @raise [ Error::FailedStringPrepValidation ] If stringprep validations fails.
48
+ #
49
+ # @since 2.6.0
50
+ def prepare(data, mappings, prohibited, options = {})
51
+ apply_maps(data, mappings).tap do |mapped|
52
+ normalize!(mapped) if options[:normalize]
53
+ check_prohibited!(mapped, prohibited)
54
+ check_bidi!(mapped) if options[:bidi]
55
+ end
56
+ end
57
+
58
+ private
59
+
60
+ def apply_maps(data, mappings)
61
+ data.each_char.inject('') do |out, c|
62
+ out << mapping(c.ord, mappings)
63
+ end
64
+ end
65
+
66
+ def check_bidi!(out)
67
+ if out.each_char.any? { |c| table_contains?(Tables::C8, c) }
68
+ raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
69
+ end
70
+
71
+ if out.each_char.any? { |c| table_contains?(Tables::D1, c) }
72
+ if out.each_char.any? { |c| table_contains?(Tables::D2, c) }
73
+ raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
74
+ end
75
+
76
+ unless table_contains?(Tables::D1, out[0]) && table_contains?(Tables::D1, out[-1])
77
+ raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
78
+ end
79
+ end
80
+ end
81
+
82
+ def check_prohibited!(out, prohibited)
83
+ out.each_char do |c|
84
+ prohibited.each do |table|
85
+ if table_contains?(table, c)
86
+ raise Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::PROHIBITED_CHARACTER)
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ def mapping(c, mappings)
93
+ m = mappings.find { |m| m.has_key?(c) }
94
+ mapped = (m && m[c]) || [c]
95
+ mapped.map { |i| i.chr(Encoding::UTF_8) }.join
96
+ end
97
+
98
+ def normalize!(out)
99
+ if String.method_defined?(:unicode_normalize!)
100
+ out.unicode_normalize!(:nfkc)
101
+ else
102
+ require 'mongo/auth/stringprep/unicode_normalize/normalize'
103
+ out.replace(UnicodeNormalize.normalize(out, :nfkc))
104
+ end
105
+ end
106
+
107
+ def table_contains?(table, c)
108
+ table.any? do |r|
109
+ r.member?(c.ord)
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (C) 2018 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Auth
17
+ module StringPrep
18
+ module Profiles
19
+ # Contains the mappings and prohibited lists for SASLPrep (RFC 4013).
20
+ #
21
+ # @note Only available for Ruby versions 2.2.0 and up.
22
+ #
23
+ # @since 2.6.0
24
+ module SASL
25
+ MAP_NON_ASCII_TO_SPACE = {
26
+ 0x00A0 => [0x0020],
27
+ 0x1680 => [0x0020],
28
+ 0x2000 => [0x0020],
29
+ 0x2001 => [0x0020],
30
+ 0x2002 => [0x0020],
31
+ 0x2003 => [0x0020],
32
+ 0x2004 => [0x0020],
33
+ 0x2005 => [0x0020],
34
+ 0x2006 => [0x0020],
35
+ 0x2007 => [0x0020],
36
+ 0x2008 => [0x0020],
37
+ 0x2009 => [0x0020],
38
+ 0x200A => [0x0020],
39
+ 0x200B => [0x0020],
40
+ 0x202F => [0x0020],
41
+ 0x205F => [0x0020],
42
+ 0x3000 => [0x0020],
43
+ }.freeze
44
+
45
+ # The mappings to use for SASL string preparation.
46
+ #
47
+ # @since 2.6.0
48
+ MAPPINGS = [
49
+ Tables::B1,
50
+ MAP_NON_ASCII_TO_SPACE,
51
+ ].freeze
52
+
53
+ # The prohibited character lists to use for SASL string preparation.
54
+ #
55
+ # @since 2.6.0
56
+ PROHIBITED = [
57
+ Tables::A1,
58
+ Tables::C1_2,
59
+ Tables::C2_1,
60
+ Tables::C2_2,
61
+ Tables::C3,
62
+ Tables::C4,
63
+ Tables::C5,
64
+ Tables::C6,
65
+ Tables::C7,
66
+ Tables::C8,
67
+ Tables::C9,
68
+ ].freeze
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,3232 @@
1
+ # Copyright (C) 2018 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ module Auth
17
+ module StringPrep
18
+ # Contains character tables defined by RFC 3454 (string preparation).
19
+ #
20
+ # @since 2.6.0
21
+ module Tables
22
+ # Table A1 as defined by RFC 3454 (string preparation).
23
+ #
24
+ # @since 2.6.0
25
+ A1 = [
26
+ 0x0221..0x0221,
27
+ 0x0234..0x024F,
28
+ 0x02AE..0x02AF,
29
+ 0x02EF..0x02FF,
30
+ 0x0350..0x035F,
31
+ 0x0370..0x0373,
32
+ 0x0376..0x0379,
33
+ 0x037B..0x037D,
34
+ 0x037F..0x0383,
35
+ 0x038B..0x038B,
36
+ 0x038D..0x038D,
37
+ 0x03A2..0x03A2,
38
+ 0x03CF..0x03CF,
39
+ 0x03F7..0x03FF,
40
+ 0x0487..0x0487,
41
+ 0x04CF..0x04CF,
42
+ 0x04F6..0x04F7,
43
+ 0x04FA..0x04FF,
44
+ 0x0510..0x0530,
45
+ 0x0557..0x0558,
46
+ 0x0560..0x0560,
47
+ 0x0588..0x0588,
48
+ 0x058B..0x0590,
49
+ 0x05A2..0x05A2,
50
+ 0x05BA..0x05BA,
51
+ 0x05C5..0x05CF,
52
+ 0x05EB..0x05EF,
53
+ 0x05F5..0x060B,
54
+ 0x060D..0x061A,
55
+ 0x061C..0x061E,
56
+ 0x0620..0x0620,
57
+ 0x063B..0x063F,
58
+ 0x0656..0x065F,
59
+ 0x06EE..0x06EF,
60
+ 0x06FF..0x06FF,
61
+ 0x070E..0x070E,
62
+ 0x072D..0x072F,
63
+ 0x074B..0x077F,
64
+ 0x07B2..0x0900,
65
+ 0x0904..0x0904,
66
+ 0x093A..0x093B,
67
+ 0x094E..0x094F,
68
+ 0x0955..0x0957,
69
+ 0x0971..0x0980,
70
+ 0x0984..0x0984,
71
+ 0x098D..0x098E,
72
+ 0x0991..0x0992,
73
+ 0x09A9..0x09A9,
74
+ 0x09B1..0x09B1,
75
+ 0x09B3..0x09B5,
76
+ 0x09BA..0x09BB,
77
+ 0x09BD..0x09BD,
78
+ 0x09C5..0x09C6,
79
+ 0x09C9..0x09CA,
80
+ 0x09CE..0x09D6,
81
+ 0x09D8..0x09DB,
82
+ 0x09DE..0x09DE,
83
+ 0x09E4..0x09E5,
84
+ 0x09FB..0x0A01,
85
+ 0x0A03..0x0A04,
86
+ 0x0A0B..0x0A0E,
87
+ 0x0A11..0x0A12,
88
+ 0x0A29..0x0A29,
89
+ 0x0A31..0x0A31,
90
+ 0x0A34..0x0A34,
91
+ 0x0A37..0x0A37,
92
+ 0x0A3A..0x0A3B,
93
+ 0x0A3D..0x0A3D,
94
+ 0x0A43..0x0A46,
95
+ 0x0A49..0x0A4A,
96
+ 0x0A4E..0x0A58,
97
+ 0x0A5D..0x0A5D,
98
+ 0x0A5F..0x0A65,
99
+ 0x0A75..0x0A80,
100
+ 0x0A84..0x0A84,
101
+ 0x0A8C..0x0A8C,
102
+ 0x0A8E..0x0A8E,
103
+ 0x0A92..0x0A92,
104
+ 0x0AA9..0x0AA9,
105
+ 0x0AB1..0x0AB1,
106
+ 0x0AB4..0x0AB4,
107
+ 0x0ABA..0x0ABB,
108
+ 0x0AC6..0x0AC6,
109
+ 0x0ACA..0x0ACA,
110
+ 0x0ACE..0x0ACF,
111
+ 0x0AD1..0x0ADF,
112
+ 0x0AE1..0x0AE5,
113
+ 0x0AF0..0x0B00,
114
+ 0x0B04..0x0B04,
115
+ 0x0B0D..0x0B0E,
116
+ 0x0B11..0x0B12,
117
+ 0x0B29..0x0B29,
118
+ 0x0B31..0x0B31,
119
+ 0x0B34..0x0B35,
120
+ 0x0B3A..0x0B3B,
121
+ 0x0B44..0x0B46,
122
+ 0x0B49..0x0B4A,
123
+ 0x0B4E..0x0B55,
124
+ 0x0B58..0x0B5B,
125
+ 0x0B5E..0x0B5E,
126
+ 0x0B62..0x0B65,
127
+ 0x0B71..0x0B81,
128
+ 0x0B84..0x0B84,
129
+ 0x0B8B..0x0B8D,
130
+ 0x0B91..0x0B91,
131
+ 0x0B96..0x0B98,
132
+ 0x0B9B..0x0B9B,
133
+ 0x0B9D..0x0B9D,
134
+ 0x0BA0..0x0BA2,
135
+ 0x0BA5..0x0BA7,
136
+ 0x0BAB..0x0BAD,
137
+ 0x0BB6..0x0BB6,
138
+ 0x0BBA..0x0BBD,
139
+ 0x0BC3..0x0BC5,
140
+ 0x0BC9..0x0BC9,
141
+ 0x0BCE..0x0BD6,
142
+ 0x0BD8..0x0BE6,
143
+ 0x0BF3..0x0C00,
144
+ 0x0C04..0x0C04,
145
+ 0x0C0D..0x0C0D,
146
+ 0x0C11..0x0C11,
147
+ 0x0C29..0x0C29,
148
+ 0x0C34..0x0C34,
149
+ 0x0C3A..0x0C3D,
150
+ 0x0C45..0x0C45,
151
+ 0x0C49..0x0C49,
152
+ 0x0C4E..0x0C54,
153
+ 0x0C57..0x0C5F,
154
+ 0x0C62..0x0C65,
155
+ 0x0C70..0x0C81,
156
+ 0x0C84..0x0C84,
157
+ 0x0C8D..0x0C8D,
158
+ 0x0C91..0x0C91,
159
+ 0x0CA9..0x0CA9,
160
+ 0x0CB4..0x0CB4,
161
+ 0x0CBA..0x0CBD,
162
+ 0x0CC5..0x0CC5,
163
+ 0x0CC9..0x0CC9,
164
+ 0x0CCE..0x0CD4,
165
+ 0x0CD7..0x0CDD,
166
+ 0x0CDF..0x0CDF,
167
+ 0x0CE2..0x0CE5,
168
+ 0x0CF0..0x0D01,
169
+ 0x0D04..0x0D04,
170
+ 0x0D0D..0x0D0D,
171
+ 0x0D11..0x0D11,
172
+ 0x0D29..0x0D29,
173
+ 0x0D3A..0x0D3D,
174
+ 0x0D44..0x0D45,
175
+ 0x0D49..0x0D49,
176
+ 0x0D4E..0x0D56,
177
+ 0x0D58..0x0D5F,
178
+ 0x0D62..0x0D65,
179
+ 0x0D70..0x0D81,
180
+ 0x0D84..0x0D84,
181
+ 0x0D97..0x0D99,
182
+ 0x0DB2..0x0DB2,
183
+ 0x0DBC..0x0DBC,
184
+ 0x0DBE..0x0DBF,
185
+ 0x0DC7..0x0DC9,
186
+ 0x0DCB..0x0DCE,
187
+ 0x0DD5..0x0DD5,
188
+ 0x0DD7..0x0DD7,
189
+ 0x0DE0..0x0DF1,
190
+ 0x0DF5..0x0E00,
191
+ 0x0E3B..0x0E3E,
192
+ 0x0E5C..0x0E80,
193
+ 0x0E83..0x0E83,
194
+ 0x0E85..0x0E86,
195
+ 0x0E89..0x0E89,
196
+ 0x0E8B..0x0E8C,
197
+ 0x0E8E..0x0E93,
198
+ 0x0E98..0x0E98,
199
+ 0x0EA0..0x0EA0,
200
+ 0x0EA4..0x0EA4,
201
+ 0x0EA6..0x0EA6,
202
+ 0x0EA8..0x0EA9,
203
+ 0x0EAC..0x0EAC,
204
+ 0x0EBA..0x0EBA,
205
+ 0x0EBE..0x0EBF,
206
+ 0x0EC5..0x0EC5,
207
+ 0x0EC7..0x0EC7,
208
+ 0x0ECE..0x0ECF,
209
+ 0x0EDA..0x0EDB,
210
+ 0x0EDE..0x0EFF,
211
+ 0x0F48..0x0F48,
212
+ 0x0F6B..0x0F70,
213
+ 0x0F8C..0x0F8F,
214
+ 0x0F98..0x0F98,
215
+ 0x0FBD..0x0FBD,
216
+ 0x0FCD..0x0FCE,
217
+ 0x0FD0..0x0FFF,
218
+ 0x1022..0x1022,
219
+ 0x1028..0x1028,
220
+ 0x102B..0x102B,
221
+ 0x1033..0x1035,
222
+ 0x103A..0x103F,
223
+ 0x105A..0x109F,
224
+ 0x10C6..0x10CF,
225
+ 0x10F9..0x10FA,
226
+ 0x10FC..0x10FF,
227
+ 0x115A..0x115E,
228
+ 0x11A3..0x11A7,
229
+ 0x11FA..0x11FF,
230
+ 0x1207..0x1207,
231
+ 0x1247..0x1247,
232
+ 0x1249..0x1249,
233
+ 0x124E..0x124F,
234
+ 0x1257..0x1257,
235
+ 0x1259..0x1259,
236
+ 0x125E..0x125F,
237
+ 0x1287..0x1287,
238
+ 0x1289..0x1289,
239
+ 0x128E..0x128F,
240
+ 0x12AF..0x12AF,
241
+ 0x12B1..0x12B1,
242
+ 0x12B6..0x12B7,
243
+ 0x12BF..0x12BF,
244
+ 0x12C1..0x12C1,
245
+ 0x12C6..0x12C7,
246
+ 0x12CF..0x12CF,
247
+ 0x12D7..0x12D7,
248
+ 0x12EF..0x12EF,
249
+ 0x130F..0x130F,
250
+ 0x1311..0x1311,
251
+ 0x1316..0x1317,
252
+ 0x131F..0x131F,
253
+ 0x1347..0x1347,
254
+ 0x135B..0x1360,
255
+ 0x137D..0x139F,
256
+ 0x13F5..0x1400,
257
+ 0x1677..0x167F,
258
+ 0x169D..0x169F,
259
+ 0x16F1..0x16FF,
260
+ 0x170D..0x170D,
261
+ 0x1715..0x171F,
262
+ 0x1737..0x173F,
263
+ 0x1754..0x175F,
264
+ 0x176D..0x176D,
265
+ 0x1771..0x1771,
266
+ 0x1774..0x177F,
267
+ 0x17DD..0x17DF,
268
+ 0x17EA..0x17FF,
269
+ 0x180F..0x180F,
270
+ 0x181A..0x181F,
271
+ 0x1878..0x187F,
272
+ 0x18AA..0x1DFF,
273
+ 0x1E9C..0x1E9F,
274
+ 0x1EFA..0x1EFF,
275
+ 0x1F16..0x1F17,
276
+ 0x1F1E..0x1F1F,
277
+ 0x1F46..0x1F47,
278
+ 0x1F4E..0x1F4F,
279
+ 0x1F58..0x1F58,
280
+ 0x1F5A..0x1F5A,
281
+ 0x1F5C..0x1F5C,
282
+ 0x1F5E..0x1F5E,
283
+ 0x1F7E..0x1F7F,
284
+ 0x1FB5..0x1FB5,
285
+ 0x1FC5..0x1FC5,
286
+ 0x1FD4..0x1FD5,
287
+ 0x1FDC..0x1FDC,
288
+ 0x1FF0..0x1FF1,
289
+ 0x1FF5..0x1FF5,
290
+ 0x1FFF..0x1FFF,
291
+ 0x2053..0x2056,
292
+ 0x2058..0x205E,
293
+ 0x2064..0x2069,
294
+ 0x2072..0x2073,
295
+ 0x208F..0x209F,
296
+ 0x20B2..0x20CF,
297
+ 0x20EB..0x20FF,
298
+ 0x213B..0x213C,
299
+ 0x214C..0x2152,
300
+ 0x2184..0x218F,
301
+ 0x23CF..0x23FF,
302
+ 0x2427..0x243F,
303
+ 0x244B..0x245F,
304
+ 0x24FF..0x24FF,
305
+ 0x2614..0x2615,
306
+ 0x2618..0x2618,
307
+ 0x267E..0x267F,
308
+ 0x268A..0x2700,
309
+ 0x2705..0x2705,
310
+ 0x270A..0x270B,
311
+ 0x2728..0x2728,
312
+ 0x274C..0x274C,
313
+ 0x274E..0x274E,
314
+ 0x2753..0x2755,
315
+ 0x2757..0x2757,
316
+ 0x275F..0x2760,
317
+ 0x2795..0x2797,
318
+ 0x27B0..0x27B0,
319
+ 0x27BF..0x27CF,
320
+ 0x27EC..0x27EF,
321
+ 0x2B00..0x2E7F,
322
+ 0x2E9A..0x2E9A,
323
+ 0x2EF4..0x2EFF,
324
+ 0x2FD6..0x2FEF,
325
+ 0x2FFC..0x2FFF,
326
+ 0x3040..0x3040,
327
+ 0x3097..0x3098,
328
+ 0x3100..0x3104,
329
+ 0x312D..0x3130,
330
+ 0x318F..0x318F,
331
+ 0x31B8..0x31EF,
332
+ 0x321D..0x321F,
333
+ 0x3244..0x3250,
334
+ 0x327C..0x327E,
335
+ 0x32CC..0x32CF,
336
+ 0x32FF..0x32FF,
337
+ 0x3377..0x337A,
338
+ 0x33DE..0x33DF,
339
+ 0x33FF..0x33FF,
340
+ 0x4DB6..0x4DFF,
341
+ 0x9FA6..0x9FFF,
342
+ 0xA48D..0xA48F,
343
+ 0xA4C7..0xABFF,
344
+ 0xD7A4..0xD7FF,
345
+ 0xFA2E..0xFA2F,
346
+ 0xFA6B..0xFAFF,
347
+ 0xFB07..0xFB12,
348
+ 0xFB18..0xFB1C,
349
+ 0xFB37..0xFB37,
350
+ 0xFB3D..0xFB3D,
351
+ 0xFB3F..0xFB3F,
352
+ 0xFB42..0xFB42,
353
+ 0xFB45..0xFB45,
354
+ 0xFBB2..0xFBD2,
355
+ 0xFD40..0xFD4F,
356
+ 0xFD90..0xFD91,
357
+ 0xFDC8..0xFDCF,
358
+ 0xFDFD..0xFDFF,
359
+ 0xFE10..0xFE1F,
360
+ 0xFE24..0xFE2F,
361
+ 0xFE47..0xFE48,
362
+ 0xFE53..0xFE53,
363
+ 0xFE67..0xFE67,
364
+ 0xFE6C..0xFE6F,
365
+ 0xFE75..0xFE75,
366
+ 0xFEFD..0xFEFE,
367
+ 0xFF00..0xFF00,
368
+ 0xFFBF..0xFFC1,
369
+ 0xFFC8..0xFFC9,
370
+ 0xFFD0..0xFFD1,
371
+ 0xFFD8..0xFFD9,
372
+ 0xFFDD..0xFFDF,
373
+ 0xFFE7..0xFFE7,
374
+ 0xFFEF..0xFFF8,
375
+ 0x10000..0x102FF,
376
+ 0x1031F..0x1031F,
377
+ 0x10324..0x1032F,
378
+ 0x1034B..0x103FF,
379
+ 0x10426..0x10427,
380
+ 0x1044E..0x1CFFF,
381
+ 0x1D0F6..0x1D0FF,
382
+ 0x1D127..0x1D129,
383
+ 0x1D1DE..0x1D3FF,
384
+ 0x1D455..0x1D455,
385
+ 0x1D49D..0x1D49D,
386
+ 0x1D4A0..0x1D4A1,
387
+ 0x1D4A3..0x1D4A4,
388
+ 0x1D4A7..0x1D4A8,
389
+ 0x1D4AD..0x1D4AD,
390
+ 0x1D4BA..0x1D4BA,
391
+ 0x1D4BC..0x1D4BC,
392
+ 0x1D4C1..0x1D4C1,
393
+ 0x1D4C4..0x1D4C4,
394
+ 0x1D506..0x1D506,
395
+ 0x1D50B..0x1D50C,
396
+ 0x1D515..0x1D515,
397
+ 0x1D51D..0x1D51D,
398
+ 0x1D53A..0x1D53A,
399
+ 0x1D53F..0x1D53F,
400
+ 0x1D545..0x1D545,
401
+ 0x1D547..0x1D549,
402
+ 0x1D551..0x1D551,
403
+ 0x1D6A4..0x1D6A7,
404
+ 0x1D7CA..0x1D7CD,
405
+ 0x1D800..0x1FFFD,
406
+ 0x2A6D7..0x2F7FF,
407
+ 0x2FA1E..0x2FFFD,
408
+ 0x30000..0x3FFFD,
409
+ 0x40000..0x4FFFD,
410
+ 0x50000..0x5FFFD,
411
+ 0x60000..0x6FFFD,
412
+ 0x70000..0x7FFFD,
413
+ 0x80000..0x8FFFD,
414
+ 0x90000..0x9FFFD,
415
+ 0xA0000..0xAFFFD,
416
+ 0xB0000..0xBFFFD,
417
+ 0xC0000..0xCFFFD,
418
+ 0xD0000..0xDFFFD,
419
+ 0xE0000..0xE0000,
420
+ 0xE0002..0xE001F,
421
+ 0xE0080..0xEFFFD,
422
+ ].freeze
423
+
424
+ # Table B1 as defined by RFC 3454 (string preparation).
425
+ #
426
+ # @since 2.6.0
427
+ B1 = {
428
+ 0x00AD => [], # Map to nothing
429
+ 0x034F => [], # Map to nothing
430
+ 0x180B => [], # Map to nothing
431
+ 0x180C => [], # Map to nothing
432
+ 0x180D => [], # Map to nothing
433
+ 0x200B => [], # Map to nothing
434
+ 0x200C => [], # Map to nothing
435
+ 0x200D => [], # Map to nothing
436
+ 0x2060 => [], # Map to nothing
437
+ 0xFE00 => [], # Map to nothing
438
+ 0xFE01 => [], # Map to nothing
439
+ 0xFE02 => [], # Map to nothing
440
+ 0xFE03 => [], # Map to nothing
441
+ 0xFE04 => [], # Map to nothing
442
+ 0xFE05 => [], # Map to nothing
443
+ 0xFE06 => [], # Map to nothing
444
+ 0xFE07 => [], # Map to nothing
445
+ 0xFE08 => [], # Map to nothing
446
+ 0xFE09 => [], # Map to nothing
447
+ 0xFE0A => [], # Map to nothing
448
+ 0xFE0B => [], # Map to nothing
449
+ 0xFE0C => [], # Map to nothing
450
+ 0xFE0D => [], # Map to nothing
451
+ 0xFE0E => [], # Map to nothing
452
+ 0xFE0F => [], # Map to nothing
453
+ 0xFEFF => [], # Map to nothing
454
+ }.freeze
455
+
456
+ # Table B2 as defined by RFC 3454 (string preparation).
457
+ #
458
+ # @since 2.6.0
459
+ B2 = {
460
+ 0x0041 => [0x0061], # Case map
461
+ 0x0042 => [0x0062], # Case map
462
+ 0x0043 => [0x0063], # Case map
463
+ 0x0044 => [0x0064], # Case map
464
+ 0x0045 => [0x0065], # Case map
465
+ 0x0046 => [0x0066], # Case map
466
+ 0x0047 => [0x0067], # Case map
467
+ 0x0048 => [0x0068], # Case map
468
+ 0x0049 => [0x0069], # Case map
469
+ 0x004A => [0x006A], # Case map
470
+ 0x004B => [0x006B], # Case map
471
+ 0x004C => [0x006C], # Case map
472
+ 0x004D => [0x006D], # Case map
473
+ 0x004E => [0x006E], # Case map
474
+ 0x004F => [0x006F], # Case map
475
+ 0x0050 => [0x0070], # Case map
476
+ 0x0051 => [0x0071], # Case map
477
+ 0x0052 => [0x0072], # Case map
478
+ 0x0053 => [0x0073], # Case map
479
+ 0x0054 => [0x0074], # Case map
480
+ 0x0055 => [0x0075], # Case map
481
+ 0x0056 => [0x0076], # Case map
482
+ 0x0057 => [0x0077], # Case map
483
+ 0x0058 => [0x0078], # Case map
484
+ 0x0059 => [0x0079], # Case map
485
+ 0x005A => [0x007A], # Case map
486
+ 0x00B5 => [0x03BC], # Case map
487
+ 0x00C0 => [0x00E0], # Case map
488
+ 0x00C1 => [0x00E1], # Case map
489
+ 0x00C2 => [0x00E2], # Case map
490
+ 0x00C3 => [0x00E3], # Case map
491
+ 0x00C4 => [0x00E4], # Case map
492
+ 0x00C5 => [0x00E5], # Case map
493
+ 0x00C6 => [0x00E6], # Case map
494
+ 0x00C7 => [0x00E7], # Case map
495
+ 0x00C8 => [0x00E8], # Case map
496
+ 0x00C9 => [0x00E9], # Case map
497
+ 0x00CA => [0x00EA], # Case map
498
+ 0x00CB => [0x00EB], # Case map
499
+ 0x00CC => [0x00EC], # Case map
500
+ 0x00CD => [0x00ED], # Case map
501
+ 0x00CE => [0x00EE], # Case map
502
+ 0x00CF => [0x00EF], # Case map
503
+ 0x00D0 => [0x00F0], # Case map
504
+ 0x00D1 => [0x00F1], # Case map
505
+ 0x00D2 => [0x00F2], # Case map
506
+ 0x00D3 => [0x00F3], # Case map
507
+ 0x00D4 => [0x00F4], # Case map
508
+ 0x00D5 => [0x00F5], # Case map
509
+ 0x00D6 => [0x00F6], # Case map
510
+ 0x00D8 => [0x00F8], # Case map
511
+ 0x00D9 => [0x00F9], # Case map
512
+ 0x00DA => [0x00FA], # Case map
513
+ 0x00DB => [0x00FB], # Case map
514
+ 0x00DC => [0x00FC], # Case map
515
+ 0x00DD => [0x00FD], # Case map
516
+ 0x00DE => [0x00FE], # Case map
517
+ 0x00DF => [0x0073, 0x0073], # Case map
518
+ 0x0100 => [0x0101], # Case map
519
+ 0x0102 => [0x0103], # Case map
520
+ 0x0104 => [0x0105], # Case map
521
+ 0x0106 => [0x0107], # Case map
522
+ 0x0108 => [0x0109], # Case map
523
+ 0x010A => [0x010B], # Case map
524
+ 0x010C => [0x010D], # Case map
525
+ 0x010E => [0x010F], # Case map
526
+ 0x0110 => [0x0111], # Case map
527
+ 0x0112 => [0x0113], # Case map
528
+ 0x0114 => [0x0115], # Case map
529
+ 0x0116 => [0x0117], # Case map
530
+ 0x0118 => [0x0119], # Case map
531
+ 0x011A => [0x011B], # Case map
532
+ 0x011C => [0x011D], # Case map
533
+ 0x011E => [0x011F], # Case map
534
+ 0x0120 => [0x0121], # Case map
535
+ 0x0122 => [0x0123], # Case map
536
+ 0x0124 => [0x0125], # Case map
537
+ 0x0126 => [0x0127], # Case map
538
+ 0x0128 => [0x0129], # Case map
539
+ 0x012A => [0x012B], # Case map
540
+ 0x012C => [0x012D], # Case map
541
+ 0x012E => [0x012F], # Case map
542
+ 0x0130 => [0x0069, 0x0307], # Case map
543
+ 0x0132 => [0x0133], # Case map
544
+ 0x0134 => [0x0135], # Case map
545
+ 0x0136 => [0x0137], # Case map
546
+ 0x0139 => [0x013A], # Case map
547
+ 0x013B => [0x013C], # Case map
548
+ 0x013D => [0x013E], # Case map
549
+ 0x013F => [0x0140], # Case map
550
+ 0x0141 => [0x0142], # Case map
551
+ 0x0143 => [0x0144], # Case map
552
+ 0x0145 => [0x0146], # Case map
553
+ 0x0147 => [0x0148], # Case map
554
+ 0x0149 => [0x02BC, 0x006E], # Case map
555
+ 0x014A => [0x014B], # Case map
556
+ 0x014C => [0x014D], # Case map
557
+ 0x014E => [0x014F], # Case map
558
+ 0x0150 => [0x0151], # Case map
559
+ 0x0152 => [0x0153], # Case map
560
+ 0x0154 => [0x0155], # Case map
561
+ 0x0156 => [0x0157], # Case map
562
+ 0x0158 => [0x0159], # Case map
563
+ 0x015A => [0x015B], # Case map
564
+ 0x015C => [0x015D], # Case map
565
+ 0x015E => [0x015F], # Case map
566
+ 0x0160 => [0x0161], # Case map
567
+ 0x0162 => [0x0163], # Case map
568
+ 0x0164 => [0x0165], # Case map
569
+ 0x0166 => [0x0167], # Case map
570
+ 0x0168 => [0x0169], # Case map
571
+ 0x016A => [0x016B], # Case map
572
+ 0x016C => [0x016D], # Case map
573
+ 0x016E => [0x016F], # Case map
574
+ 0x0170 => [0x0171], # Case map
575
+ 0x0172 => [0x0173], # Case map
576
+ 0x0174 => [0x0175], # Case map
577
+ 0x0176 => [0x0177], # Case map
578
+ 0x0178 => [0x00FF], # Case map
579
+ 0x0179 => [0x017A], # Case map
580
+ 0x017B => [0x017C], # Case map
581
+ 0x017D => [0x017E], # Case map
582
+ 0x017F => [0x0073], # Case map
583
+ 0x0181 => [0x0253], # Case map
584
+ 0x0182 => [0x0183], # Case map
585
+ 0x0184 => [0x0185], # Case map
586
+ 0x0186 => [0x0254], # Case map
587
+ 0x0187 => [0x0188], # Case map
588
+ 0x0189 => [0x0256], # Case map
589
+ 0x018A => [0x0257], # Case map
590
+ 0x018B => [0x018C], # Case map
591
+ 0x018E => [0x01DD], # Case map
592
+ 0x018F => [0x0259], # Case map
593
+ 0x0190 => [0x025B], # Case map
594
+ 0x0191 => [0x0192], # Case map
595
+ 0x0193 => [0x0260], # Case map
596
+ 0x0194 => [0x0263], # Case map
597
+ 0x0196 => [0x0269], # Case map
598
+ 0x0197 => [0x0268], # Case map
599
+ 0x0198 => [0x0199], # Case map
600
+ 0x019C => [0x026F], # Case map
601
+ 0x019D => [0x0272], # Case map
602
+ 0x019F => [0x0275], # Case map
603
+ 0x01A0 => [0x01A1], # Case map
604
+ 0x01A2 => [0x01A3], # Case map
605
+ 0x01A4 => [0x01A5], # Case map
606
+ 0x01A6 => [0x0280], # Case map
607
+ 0x01A7 => [0x01A8], # Case map
608
+ 0x01A9 => [0x0283], # Case map
609
+ 0x01AC => [0x01AD], # Case map
610
+ 0x01AE => [0x0288], # Case map
611
+ 0x01AF => [0x01B0], # Case map
612
+ 0x01B1 => [0x028A], # Case map
613
+ 0x01B2 => [0x028B], # Case map
614
+ 0x01B3 => [0x01B4], # Case map
615
+ 0x01B5 => [0x01B6], # Case map
616
+ 0x01B7 => [0x0292], # Case map
617
+ 0x01B8 => [0x01B9], # Case map
618
+ 0x01BC => [0x01BD], # Case map
619
+ 0x01C4 => [0x01C6], # Case map
620
+ 0x01C5 => [0x01C6], # Case map
621
+ 0x01C7 => [0x01C9], # Case map
622
+ 0x01C8 => [0x01C9], # Case map
623
+ 0x01CA => [0x01CC], # Case map
624
+ 0x01CB => [0x01CC], # Case map
625
+ 0x01CD => [0x01CE], # Case map
626
+ 0x01CF => [0x01D0], # Case map
627
+ 0x01D1 => [0x01D2], # Case map
628
+ 0x01D3 => [0x01D4], # Case map
629
+ 0x01D5 => [0x01D6], # Case map
630
+ 0x01D7 => [0x01D8], # Case map
631
+ 0x01D9 => [0x01DA], # Case map
632
+ 0x01DB => [0x01DC], # Case map
633
+ 0x01DE => [0x01DF], # Case map
634
+ 0x01E0 => [0x01E1], # Case map
635
+ 0x01E2 => [0x01E3], # Case map
636
+ 0x01E4 => [0x01E5], # Case map
637
+ 0x01E6 => [0x01E7], # Case map
638
+ 0x01E8 => [0x01E9], # Case map
639
+ 0x01EA => [0x01EB], # Case map
640
+ 0x01EC => [0x01ED], # Case map
641
+ 0x01EE => [0x01EF], # Case map
642
+ 0x01F0 => [0x006A, 0x030C], # Case map
643
+ 0x01F1 => [0x01F3], # Case map
644
+ 0x01F2 => [0x01F3], # Case map
645
+ 0x01F4 => [0x01F5], # Case map
646
+ 0x01F6 => [0x0195], # Case map
647
+ 0x01F7 => [0x01BF], # Case map
648
+ 0x01F8 => [0x01F9], # Case map
649
+ 0x01FA => [0x01FB], # Case map
650
+ 0x01FC => [0x01FD], # Case map
651
+ 0x01FE => [0x01FF], # Case map
652
+ 0x0200 => [0x0201], # Case map
653
+ 0x0202 => [0x0203], # Case map
654
+ 0x0204 => [0x0205], # Case map
655
+ 0x0206 => [0x0207], # Case map
656
+ 0x0208 => [0x0209], # Case map
657
+ 0x020A => [0x020B], # Case map
658
+ 0x020C => [0x020D], # Case map
659
+ 0x020E => [0x020F], # Case map
660
+ 0x0210 => [0x0211], # Case map
661
+ 0x0212 => [0x0213], # Case map
662
+ 0x0214 => [0x0215], # Case map
663
+ 0x0216 => [0x0217], # Case map
664
+ 0x0218 => [0x0219], # Case map
665
+ 0x021A => [0x021B], # Case map
666
+ 0x021C => [0x021D], # Case map
667
+ 0x021E => [0x021F], # Case map
668
+ 0x0220 => [0x019E], # Case map
669
+ 0x0222 => [0x0223], # Case map
670
+ 0x0224 => [0x0225], # Case map
671
+ 0x0226 => [0x0227], # Case map
672
+ 0x0228 => [0x0229], # Case map
673
+ 0x022A => [0x022B], # Case map
674
+ 0x022C => [0x022D], # Case map
675
+ 0x022E => [0x022F], # Case map
676
+ 0x0230 => [0x0231], # Case map
677
+ 0x0232 => [0x0233], # Case map
678
+ 0x0345 => [0x03B9], # Case map
679
+ 0x037A => [0x0020, 0x03B9], # Additional folding
680
+ 0x0386 => [0x03AC], # Case map
681
+ 0x0388 => [0x03AD], # Case map
682
+ 0x0389 => [0x03AE], # Case map
683
+ 0x038A => [0x03AF], # Case map
684
+ 0x038C => [0x03CC], # Case map
685
+ 0x038E => [0x03CD], # Case map
686
+ 0x038F => [0x03CE], # Case map
687
+ 0x0390 => [0x03B9, 0x0308, 0x0301], # Case map
688
+ 0x0391 => [0x03B1], # Case map
689
+ 0x0392 => [0x03B2], # Case map
690
+ 0x0393 => [0x03B3], # Case map
691
+ 0x0394 => [0x03B4], # Case map
692
+ 0x0395 => [0x03B5], # Case map
693
+ 0x0396 => [0x03B6], # Case map
694
+ 0x0397 => [0x03B7], # Case map
695
+ 0x0398 => [0x03B8], # Case map
696
+ 0x0399 => [0x03B9], # Case map
697
+ 0x039A => [0x03BA], # Case map
698
+ 0x039B => [0x03BB], # Case map
699
+ 0x039C => [0x03BC], # Case map
700
+ 0x039D => [0x03BD], # Case map
701
+ 0x039E => [0x03BE], # Case map
702
+ 0x039F => [0x03BF], # Case map
703
+ 0x03A0 => [0x03C0], # Case map
704
+ 0x03A1 => [0x03C1], # Case map
705
+ 0x03A3 => [0x03C3], # Case map
706
+ 0x03A4 => [0x03C4], # Case map
707
+ 0x03A5 => [0x03C5], # Case map
708
+ 0x03A6 => [0x03C6], # Case map
709
+ 0x03A7 => [0x03C7], # Case map
710
+ 0x03A8 => [0x03C8], # Case map
711
+ 0x03A9 => [0x03C9], # Case map
712
+ 0x03AA => [0x03CA], # Case map
713
+ 0x03AB => [0x03CB], # Case map
714
+ 0x03B0 => [0x03C5, 0x0308, 0x0301], # Case map
715
+ 0x03C2 => [0x03C3], # Case map
716
+ 0x03D0 => [0x03B2], # Case map
717
+ 0x03D1 => [0x03B8], # Case map
718
+ 0x03D2 => [0x03C5], # Additional folding
719
+ 0x03D3 => [0x03CD], # Additional folding
720
+ 0x03D4 => [0x03CB], # Additional folding
721
+ 0x03D5 => [0x03C6], # Case map
722
+ 0x03D6 => [0x03C0], # Case map
723
+ 0x03D8 => [0x03D9], # Case map
724
+ 0x03DA => [0x03DB], # Case map
725
+ 0x03DC => [0x03DD], # Case map
726
+ 0x03DE => [0x03DF], # Case map
727
+ 0x03E0 => [0x03E1], # Case map
728
+ 0x03E2 => [0x03E3], # Case map
729
+ 0x03E4 => [0x03E5], # Case map
730
+ 0x03E6 => [0x03E7], # Case map
731
+ 0x03E8 => [0x03E9], # Case map
732
+ 0x03EA => [0x03EB], # Case map
733
+ 0x03EC => [0x03ED], # Case map
734
+ 0x03EE => [0x03EF], # Case map
735
+ 0x03F0 => [0x03BA], # Case map
736
+ 0x03F1 => [0x03C1], # Case map
737
+ 0x03F2 => [0x03C3], # Case map
738
+ 0x03F4 => [0x03B8], # Case map
739
+ 0x03F5 => [0x03B5], # Case map
740
+ 0x0400 => [0x0450], # Case map
741
+ 0x0401 => [0x0451], # Case map
742
+ 0x0402 => [0x0452], # Case map
743
+ 0x0403 => [0x0453], # Case map
744
+ 0x0404 => [0x0454], # Case map
745
+ 0x0405 => [0x0455], # Case map
746
+ 0x0406 => [0x0456], # Case map
747
+ 0x0407 => [0x0457], # Case map
748
+ 0x0408 => [0x0458], # Case map
749
+ 0x0409 => [0x0459], # Case map
750
+ 0x040A => [0x045A], # Case map
751
+ 0x040B => [0x045B], # Case map
752
+ 0x040C => [0x045C], # Case map
753
+ 0x040D => [0x045D], # Case map
754
+ 0x040E => [0x045E], # Case map
755
+ 0x040F => [0x045F], # Case map
756
+ 0x0410 => [0x0430], # Case map
757
+ 0x0411 => [0x0431], # Case map
758
+ 0x0412 => [0x0432], # Case map
759
+ 0x0413 => [0x0433], # Case map
760
+ 0x0414 => [0x0434], # Case map
761
+ 0x0415 => [0x0435], # Case map
762
+ 0x0416 => [0x0436], # Case map
763
+ 0x0417 => [0x0437], # Case map
764
+ 0x0418 => [0x0438], # Case map
765
+ 0x0419 => [0x0439], # Case map
766
+ 0x041A => [0x043A], # Case map
767
+ 0x041B => [0x043B], # Case map
768
+ 0x041C => [0x043C], # Case map
769
+ 0x041D => [0x043D], # Case map
770
+ 0x041E => [0x043E], # Case map
771
+ 0x041F => [0x043F], # Case map
772
+ 0x0420 => [0x0440], # Case map
773
+ 0x0421 => [0x0441], # Case map
774
+ 0x0422 => [0x0442], # Case map
775
+ 0x0423 => [0x0443], # Case map
776
+ 0x0424 => [0x0444], # Case map
777
+ 0x0425 => [0x0445], # Case map
778
+ 0x0426 => [0x0446], # Case map
779
+ 0x0427 => [0x0447], # Case map
780
+ 0x0428 => [0x0448], # Case map
781
+ 0x0429 => [0x0449], # Case map
782
+ 0x042A => [0x044A], # Case map
783
+ 0x042B => [0x044B], # Case map
784
+ 0x042C => [0x044C], # Case map
785
+ 0x042D => [0x044D], # Case map
786
+ 0x042E => [0x044E], # Case map
787
+ 0x042F => [0x044F], # Case map
788
+ 0x0460 => [0x0461], # Case map
789
+ 0x0462 => [0x0463], # Case map
790
+ 0x0464 => [0x0465], # Case map
791
+ 0x0466 => [0x0467], # Case map
792
+ 0x0468 => [0x0469], # Case map
793
+ 0x046A => [0x046B], # Case map
794
+ 0x046C => [0x046D], # Case map
795
+ 0x046E => [0x046F], # Case map
796
+ 0x0470 => [0x0471], # Case map
797
+ 0x0472 => [0x0473], # Case map
798
+ 0x0474 => [0x0475], # Case map
799
+ 0x0476 => [0x0477], # Case map
800
+ 0x0478 => [0x0479], # Case map
801
+ 0x047A => [0x047B], # Case map
802
+ 0x047C => [0x047D], # Case map
803
+ 0x047E => [0x047F], # Case map
804
+ 0x0480 => [0x0481], # Case map
805
+ 0x048A => [0x048B], # Case map
806
+ 0x048C => [0x048D], # Case map
807
+ 0x048E => [0x048F], # Case map
808
+ 0x0490 => [0x0491], # Case map
809
+ 0x0492 => [0x0493], # Case map
810
+ 0x0494 => [0x0495], # Case map
811
+ 0x0496 => [0x0497], # Case map
812
+ 0x0498 => [0x0499], # Case map
813
+ 0x049A => [0x049B], # Case map
814
+ 0x049C => [0x049D], # Case map
815
+ 0x049E => [0x049F], # Case map
816
+ 0x04A0 => [0x04A1], # Case map
817
+ 0x04A2 => [0x04A3], # Case map
818
+ 0x04A4 => [0x04A5], # Case map
819
+ 0x04A6 => [0x04A7], # Case map
820
+ 0x04A8 => [0x04A9], # Case map
821
+ 0x04AA => [0x04AB], # Case map
822
+ 0x04AC => [0x04AD], # Case map
823
+ 0x04AE => [0x04AF], # Case map
824
+ 0x04B0 => [0x04B1], # Case map
825
+ 0x04B2 => [0x04B3], # Case map
826
+ 0x04B4 => [0x04B5], # Case map
827
+ 0x04B6 => [0x04B7], # Case map
828
+ 0x04B8 => [0x04B9], # Case map
829
+ 0x04BA => [0x04BB], # Case map
830
+ 0x04BC => [0x04BD], # Case map
831
+ 0x04BE => [0x04BF], # Case map
832
+ 0x04C1 => [0x04C2], # Case map
833
+ 0x04C3 => [0x04C4], # Case map
834
+ 0x04C5 => [0x04C6], # Case map
835
+ 0x04C7 => [0x04C8], # Case map
836
+ 0x04C9 => [0x04CA], # Case map
837
+ 0x04CB => [0x04CC], # Case map
838
+ 0x04CD => [0x04CE], # Case map
839
+ 0x04D0 => [0x04D1], # Case map
840
+ 0x04D2 => [0x04D3], # Case map
841
+ 0x04D4 => [0x04D5], # Case map
842
+ 0x04D6 => [0x04D7], # Case map
843
+ 0x04D8 => [0x04D9], # Case map
844
+ 0x04DA => [0x04DB], # Case map
845
+ 0x04DC => [0x04DD], # Case map
846
+ 0x04DE => [0x04DF], # Case map
847
+ 0x04E0 => [0x04E1], # Case map
848
+ 0x04E2 => [0x04E3], # Case map
849
+ 0x04E4 => [0x04E5], # Case map
850
+ 0x04E6 => [0x04E7], # Case map
851
+ 0x04E8 => [0x04E9], # Case map
852
+ 0x04EA => [0x04EB], # Case map
853
+ 0x04EC => [0x04ED], # Case map
854
+ 0x04EE => [0x04EF], # Case map
855
+ 0x04F0 => [0x04F1], # Case map
856
+ 0x04F2 => [0x04F3], # Case map
857
+ 0x04F4 => [0x04F5], # Case map
858
+ 0x04F8 => [0x04F9], # Case map
859
+ 0x0500 => [0x0501], # Case map
860
+ 0x0502 => [0x0503], # Case map
861
+ 0x0504 => [0x0505], # Case map
862
+ 0x0506 => [0x0507], # Case map
863
+ 0x0508 => [0x0509], # Case map
864
+ 0x050A => [0x050B], # Case map
865
+ 0x050C => [0x050D], # Case map
866
+ 0x050E => [0x050F], # Case map
867
+ 0x0531 => [0x0561], # Case map
868
+ 0x0532 => [0x0562], # Case map
869
+ 0x0533 => [0x0563], # Case map
870
+ 0x0534 => [0x0564], # Case map
871
+ 0x0535 => [0x0565], # Case map
872
+ 0x0536 => [0x0566], # Case map
873
+ 0x0537 => [0x0567], # Case map
874
+ 0x0538 => [0x0568], # Case map
875
+ 0x0539 => [0x0569], # Case map
876
+ 0x053A => [0x056A], # Case map
877
+ 0x053B => [0x056B], # Case map
878
+ 0x053C => [0x056C], # Case map
879
+ 0x053D => [0x056D], # Case map
880
+ 0x053E => [0x056E], # Case map
881
+ 0x053F => [0x056F], # Case map
882
+ 0x0540 => [0x0570], # Case map
883
+ 0x0541 => [0x0571], # Case map
884
+ 0x0542 => [0x0572], # Case map
885
+ 0x0543 => [0x0573], # Case map
886
+ 0x0544 => [0x0574], # Case map
887
+ 0x0545 => [0x0575], # Case map
888
+ 0x0546 => [0x0576], # Case map
889
+ 0x0547 => [0x0577], # Case map
890
+ 0x0548 => [0x0578], # Case map
891
+ 0x0549 => [0x0579], # Case map
892
+ 0x054A => [0x057A], # Case map
893
+ 0x054B => [0x057B], # Case map
894
+ 0x054C => [0x057C], # Case map
895
+ 0x054D => [0x057D], # Case map
896
+ 0x054E => [0x057E], # Case map
897
+ 0x054F => [0x057F], # Case map
898
+ 0x0550 => [0x0580], # Case map
899
+ 0x0551 => [0x0581], # Case map
900
+ 0x0552 => [0x0582], # Case map
901
+ 0x0553 => [0x0583], # Case map
902
+ 0x0554 => [0x0584], # Case map
903
+ 0x0555 => [0x0585], # Case map
904
+ 0x0556 => [0x0586], # Case map
905
+ 0x0587 => [0x0565, 0x0582], # Case map
906
+ 0x1E00 => [0x1E01], # Case map
907
+ 0x1E02 => [0x1E03], # Case map
908
+ 0x1E04 => [0x1E05], # Case map
909
+ 0x1E06 => [0x1E07], # Case map
910
+ 0x1E08 => [0x1E09], # Case map
911
+ 0x1E0A => [0x1E0B], # Case map
912
+ 0x1E0C => [0x1E0D], # Case map
913
+ 0x1E0E => [0x1E0F], # Case map
914
+ 0x1E10 => [0x1E11], # Case map
915
+ 0x1E12 => [0x1E13], # Case map
916
+ 0x1E14 => [0x1E15], # Case map
917
+ 0x1E16 => [0x1E17], # Case map
918
+ 0x1E18 => [0x1E19], # Case map
919
+ 0x1E1A => [0x1E1B], # Case map
920
+ 0x1E1C => [0x1E1D], # Case map
921
+ 0x1E1E => [0x1E1F], # Case map
922
+ 0x1E20 => [0x1E21], # Case map
923
+ 0x1E22 => [0x1E23], # Case map
924
+ 0x1E24 => [0x1E25], # Case map
925
+ 0x1E26 => [0x1E27], # Case map
926
+ 0x1E28 => [0x1E29], # Case map
927
+ 0x1E2A => [0x1E2B], # Case map
928
+ 0x1E2C => [0x1E2D], # Case map
929
+ 0x1E2E => [0x1E2F], # Case map
930
+ 0x1E30 => [0x1E31], # Case map
931
+ 0x1E32 => [0x1E33], # Case map
932
+ 0x1E34 => [0x1E35], # Case map
933
+ 0x1E36 => [0x1E37], # Case map
934
+ 0x1E38 => [0x1E39], # Case map
935
+ 0x1E3A => [0x1E3B], # Case map
936
+ 0x1E3C => [0x1E3D], # Case map
937
+ 0x1E3E => [0x1E3F], # Case map
938
+ 0x1E40 => [0x1E41], # Case map
939
+ 0x1E42 => [0x1E43], # Case map
940
+ 0x1E44 => [0x1E45], # Case map
941
+ 0x1E46 => [0x1E47], # Case map
942
+ 0x1E48 => [0x1E49], # Case map
943
+ 0x1E4A => [0x1E4B], # Case map
944
+ 0x1E4C => [0x1E4D], # Case map
945
+ 0x1E4E => [0x1E4F], # Case map
946
+ 0x1E50 => [0x1E51], # Case map
947
+ 0x1E52 => [0x1E53], # Case map
948
+ 0x1E54 => [0x1E55], # Case map
949
+ 0x1E56 => [0x1E57], # Case map
950
+ 0x1E58 => [0x1E59], # Case map
951
+ 0x1E5A => [0x1E5B], # Case map
952
+ 0x1E5C => [0x1E5D], # Case map
953
+ 0x1E5E => [0x1E5F], # Case map
954
+ 0x1E60 => [0x1E61], # Case map
955
+ 0x1E62 => [0x1E63], # Case map
956
+ 0x1E64 => [0x1E65], # Case map
957
+ 0x1E66 => [0x1E67], # Case map
958
+ 0x1E68 => [0x1E69], # Case map
959
+ 0x1E6A => [0x1E6B], # Case map
960
+ 0x1E6C => [0x1E6D], # Case map
961
+ 0x1E6E => [0x1E6F], # Case map
962
+ 0x1E70 => [0x1E71], # Case map
963
+ 0x1E72 => [0x1E73], # Case map
964
+ 0x1E74 => [0x1E75], # Case map
965
+ 0x1E76 => [0x1E77], # Case map
966
+ 0x1E78 => [0x1E79], # Case map
967
+ 0x1E7A => [0x1E7B], # Case map
968
+ 0x1E7C => [0x1E7D], # Case map
969
+ 0x1E7E => [0x1E7F], # Case map
970
+ 0x1E80 => [0x1E81], # Case map
971
+ 0x1E82 => [0x1E83], # Case map
972
+ 0x1E84 => [0x1E85], # Case map
973
+ 0x1E86 => [0x1E87], # Case map
974
+ 0x1E88 => [0x1E89], # Case map
975
+ 0x1E8A => [0x1E8B], # Case map
976
+ 0x1E8C => [0x1E8D], # Case map
977
+ 0x1E8E => [0x1E8F], # Case map
978
+ 0x1E90 => [0x1E91], # Case map
979
+ 0x1E92 => [0x1E93], # Case map
980
+ 0x1E94 => [0x1E95], # Case map
981
+ 0x1E96 => [0x0068, 0x0331], # Case map
982
+ 0x1E97 => [0x0074, 0x0308], # Case map
983
+ 0x1E98 => [0x0077, 0x030A], # Case map
984
+ 0x1E99 => [0x0079, 0x030A], # Case map
985
+ 0x1E9A => [0x0061, 0x02BE], # Case map
986
+ 0x1E9B => [0x1E61], # Case map
987
+ 0x1EA0 => [0x1EA1], # Case map
988
+ 0x1EA2 => [0x1EA3], # Case map
989
+ 0x1EA4 => [0x1EA5], # Case map
990
+ 0x1EA6 => [0x1EA7], # Case map
991
+ 0x1EA8 => [0x1EA9], # Case map
992
+ 0x1EAA => [0x1EAB], # Case map
993
+ 0x1EAC => [0x1EAD], # Case map
994
+ 0x1EAE => [0x1EAF], # Case map
995
+ 0x1EB0 => [0x1EB1], # Case map
996
+ 0x1EB2 => [0x1EB3], # Case map
997
+ 0x1EB4 => [0x1EB5], # Case map
998
+ 0x1EB6 => [0x1EB7], # Case map
999
+ 0x1EB8 => [0x1EB9], # Case map
1000
+ 0x1EBA => [0x1EBB], # Case map
1001
+ 0x1EBC => [0x1EBD], # Case map
1002
+ 0x1EBE => [0x1EBF], # Case map
1003
+ 0x1EC0 => [0x1EC1], # Case map
1004
+ 0x1EC2 => [0x1EC3], # Case map
1005
+ 0x1EC4 => [0x1EC5], # Case map
1006
+ 0x1EC6 => [0x1EC7], # Case map
1007
+ 0x1EC8 => [0x1EC9], # Case map
1008
+ 0x1ECA => [0x1ECB], # Case map
1009
+ 0x1ECC => [0x1ECD], # Case map
1010
+ 0x1ECE => [0x1ECF], # Case map
1011
+ 0x1ED0 => [0x1ED1], # Case map
1012
+ 0x1ED2 => [0x1ED3], # Case map
1013
+ 0x1ED4 => [0x1ED5], # Case map
1014
+ 0x1ED6 => [0x1ED7], # Case map
1015
+ 0x1ED8 => [0x1ED9], # Case map
1016
+ 0x1EDA => [0x1EDB], # Case map
1017
+ 0x1EDC => [0x1EDD], # Case map
1018
+ 0x1EDE => [0x1EDF], # Case map
1019
+ 0x1EE0 => [0x1EE1], # Case map
1020
+ 0x1EE2 => [0x1EE3], # Case map
1021
+ 0x1EE4 => [0x1EE5], # Case map
1022
+ 0x1EE6 => [0x1EE7], # Case map
1023
+ 0x1EE8 => [0x1EE9], # Case map
1024
+ 0x1EEA => [0x1EEB], # Case map
1025
+ 0x1EEC => [0x1EED], # Case map
1026
+ 0x1EEE => [0x1EEF], # Case map
1027
+ 0x1EF0 => [0x1EF1], # Case map
1028
+ 0x1EF2 => [0x1EF3], # Case map
1029
+ 0x1EF4 => [0x1EF5], # Case map
1030
+ 0x1EF6 => [0x1EF7], # Case map
1031
+ 0x1EF8 => [0x1EF9], # Case map
1032
+ 0x1F08 => [0x1F00], # Case map
1033
+ 0x1F09 => [0x1F01], # Case map
1034
+ 0x1F0A => [0x1F02], # Case map
1035
+ 0x1F0B => [0x1F03], # Case map
1036
+ 0x1F0C => [0x1F04], # Case map
1037
+ 0x1F0D => [0x1F05], # Case map
1038
+ 0x1F0E => [0x1F06], # Case map
1039
+ 0x1F0F => [0x1F07], # Case map
1040
+ 0x1F18 => [0x1F10], # Case map
1041
+ 0x1F19 => [0x1F11], # Case map
1042
+ 0x1F1A => [0x1F12], # Case map
1043
+ 0x1F1B => [0x1F13], # Case map
1044
+ 0x1F1C => [0x1F14], # Case map
1045
+ 0x1F1D => [0x1F15], # Case map
1046
+ 0x1F28 => [0x1F20], # Case map
1047
+ 0x1F29 => [0x1F21], # Case map
1048
+ 0x1F2A => [0x1F22], # Case map
1049
+ 0x1F2B => [0x1F23], # Case map
1050
+ 0x1F2C => [0x1F24], # Case map
1051
+ 0x1F2D => [0x1F25], # Case map
1052
+ 0x1F2E => [0x1F26], # Case map
1053
+ 0x1F2F => [0x1F27], # Case map
1054
+ 0x1F38 => [0x1F30], # Case map
1055
+ 0x1F39 => [0x1F31], # Case map
1056
+ 0x1F3A => [0x1F32], # Case map
1057
+ 0x1F3B => [0x1F33], # Case map
1058
+ 0x1F3C => [0x1F34], # Case map
1059
+ 0x1F3D => [0x1F35], # Case map
1060
+ 0x1F3E => [0x1F36], # Case map
1061
+ 0x1F3F => [0x1F37], # Case map
1062
+ 0x1F48 => [0x1F40], # Case map
1063
+ 0x1F49 => [0x1F41], # Case map
1064
+ 0x1F4A => [0x1F42], # Case map
1065
+ 0x1F4B => [0x1F43], # Case map
1066
+ 0x1F4C => [0x1F44], # Case map
1067
+ 0x1F4D => [0x1F45], # Case map
1068
+ 0x1F50 => [0x03C5, 0x0313], # Case map
1069
+ 0x1F52 => [0x03C5, 0x0313, 0x0300], # Case map
1070
+ 0x1F54 => [0x03C5, 0x0313, 0x0301], # Case map
1071
+ 0x1F56 => [0x03C5, 0x0313, 0x0342], # Case map
1072
+ 0x1F59 => [0x1F51], # Case map
1073
+ 0x1F5B => [0x1F53], # Case map
1074
+ 0x1F5D => [0x1F55], # Case map
1075
+ 0x1F5F => [0x1F57], # Case map
1076
+ 0x1F68 => [0x1F60], # Case map
1077
+ 0x1F69 => [0x1F61], # Case map
1078
+ 0x1F6A => [0x1F62], # Case map
1079
+ 0x1F6B => [0x1F63], # Case map
1080
+ 0x1F6C => [0x1F64], # Case map
1081
+ 0x1F6D => [0x1F65], # Case map
1082
+ 0x1F6E => [0x1F66], # Case map
1083
+ 0x1F6F => [0x1F67], # Case map
1084
+ 0x1F80 => [0x1F00, 0x03B9], # Case map
1085
+ 0x1F81 => [0x1F01, 0x03B9], # Case map
1086
+ 0x1F82 => [0x1F02, 0x03B9], # Case map
1087
+ 0x1F83 => [0x1F03, 0x03B9], # Case map
1088
+ 0x1F84 => [0x1F04, 0x03B9], # Case map
1089
+ 0x1F85 => [0x1F05, 0x03B9], # Case map
1090
+ 0x1F86 => [0x1F06, 0x03B9], # Case map
1091
+ 0x1F87 => [0x1F07, 0x03B9], # Case map
1092
+ 0x1F88 => [0x1F00, 0x03B9], # Case map
1093
+ 0x1F89 => [0x1F01, 0x03B9], # Case map
1094
+ 0x1F8A => [0x1F02, 0x03B9], # Case map
1095
+ 0x1F8B => [0x1F03, 0x03B9], # Case map
1096
+ 0x1F8C => [0x1F04, 0x03B9], # Case map
1097
+ 0x1F8D => [0x1F05, 0x03B9], # Case map
1098
+ 0x1F8E => [0x1F06, 0x03B9], # Case map
1099
+ 0x1F8F => [0x1F07, 0x03B9], # Case map
1100
+ 0x1F90 => [0x1F20, 0x03B9], # Case map
1101
+ 0x1F91 => [0x1F21, 0x03B9], # Case map
1102
+ 0x1F92 => [0x1F22, 0x03B9], # Case map
1103
+ 0x1F93 => [0x1F23, 0x03B9], # Case map
1104
+ 0x1F94 => [0x1F24, 0x03B9], # Case map
1105
+ 0x1F95 => [0x1F25, 0x03B9], # Case map
1106
+ 0x1F96 => [0x1F26, 0x03B9], # Case map
1107
+ 0x1F97 => [0x1F27, 0x03B9], # Case map
1108
+ 0x1F98 => [0x1F20, 0x03B9], # Case map
1109
+ 0x1F99 => [0x1F21, 0x03B9], # Case map
1110
+ 0x1F9A => [0x1F22, 0x03B9], # Case map
1111
+ 0x1F9B => [0x1F23, 0x03B9], # Case map
1112
+ 0x1F9C => [0x1F24, 0x03B9], # Case map
1113
+ 0x1F9D => [0x1F25, 0x03B9], # Case map
1114
+ 0x1F9E => [0x1F26, 0x03B9], # Case map
1115
+ 0x1F9F => [0x1F27, 0x03B9], # Case map
1116
+ 0x1FA0 => [0x1F60, 0x03B9], # Case map
1117
+ 0x1FA1 => [0x1F61, 0x03B9], # Case map
1118
+ 0x1FA2 => [0x1F62, 0x03B9], # Case map
1119
+ 0x1FA3 => [0x1F63, 0x03B9], # Case map
1120
+ 0x1FA4 => [0x1F64, 0x03B9], # Case map
1121
+ 0x1FA5 => [0x1F65, 0x03B9], # Case map
1122
+ 0x1FA6 => [0x1F66, 0x03B9], # Case map
1123
+ 0x1FA7 => [0x1F67, 0x03B9], # Case map
1124
+ 0x1FA8 => [0x1F60, 0x03B9], # Case map
1125
+ 0x1FA9 => [0x1F61, 0x03B9], # Case map
1126
+ 0x1FAA => [0x1F62, 0x03B9], # Case map
1127
+ 0x1FAB => [0x1F63, 0x03B9], # Case map
1128
+ 0x1FAC => [0x1F64, 0x03B9], # Case map
1129
+ 0x1FAD => [0x1F65, 0x03B9], # Case map
1130
+ 0x1FAE => [0x1F66, 0x03B9], # Case map
1131
+ 0x1FAF => [0x1F67, 0x03B9], # Case map
1132
+ 0x1FB2 => [0x1F70, 0x03B9], # Case map
1133
+ 0x1FB3 => [0x03B1, 0x03B9], # Case map
1134
+ 0x1FB4 => [0x03AC, 0x03B9], # Case map
1135
+ 0x1FB6 => [0x03B1, 0x0342], # Case map
1136
+ 0x1FB7 => [0x03B1, 0x0342, 0x03B9], # Case map
1137
+ 0x1FB8 => [0x1FB0], # Case map
1138
+ 0x1FB9 => [0x1FB1], # Case map
1139
+ 0x1FBA => [0x1F70], # Case map
1140
+ 0x1FBB => [0x1F71], # Case map
1141
+ 0x1FBC => [0x03B1, 0x03B9], # Case map
1142
+ 0x1FBE => [0x03B9], # Case map
1143
+ 0x1FC2 => [0x1F74, 0x03B9], # Case map
1144
+ 0x1FC3 => [0x03B7, 0x03B9], # Case map
1145
+ 0x1FC4 => [0x03AE, 0x03B9], # Case map
1146
+ 0x1FC6 => [0x03B7, 0x0342], # Case map
1147
+ 0x1FC7 => [0x03B7, 0x0342, 0x03B9], # Case map
1148
+ 0x1FC8 => [0x1F72], # Case map
1149
+ 0x1FC9 => [0x1F73], # Case map
1150
+ 0x1FCA => [0x1F74], # Case map
1151
+ 0x1FCB => [0x1F75], # Case map
1152
+ 0x1FCC => [0x03B7, 0x03B9], # Case map
1153
+ 0x1FD2 => [0x03B9, 0x0308, 0x0300], # Case map
1154
+ 0x1FD3 => [0x03B9, 0x0308, 0x0301], # Case map
1155
+ 0x1FD6 => [0x03B9, 0x0342], # Case map
1156
+ 0x1FD7 => [0x03B9, 0x0308, 0x0342], # Case map
1157
+ 0x1FD8 => [0x1FD0], # Case map
1158
+ 0x1FD9 => [0x1FD1], # Case map
1159
+ 0x1FDA => [0x1F76], # Case map
1160
+ 0x1FDB => [0x1F77], # Case map
1161
+ 0x1FE2 => [0x03C5, 0x0308, 0x0300], # Case map
1162
+ 0x1FE3 => [0x03C5, 0x0308, 0x0301], # Case map
1163
+ 0x1FE4 => [0x03C1, 0x0313], # Case map
1164
+ 0x1FE6 => [0x03C5, 0x0342], # Case map
1165
+ 0x1FE7 => [0x03C5, 0x0308, 0x0342], # Case map
1166
+ 0x1FE8 => [0x1FE0], # Case map
1167
+ 0x1FE9 => [0x1FE1], # Case map
1168
+ 0x1FEA => [0x1F7A], # Case map
1169
+ 0x1FEB => [0x1F7B], # Case map
1170
+ 0x1FEC => [0x1FE5], # Case map
1171
+ 0x1FF2 => [0x1F7C, 0x03B9], # Case map
1172
+ 0x1FF3 => [0x03C9, 0x03B9], # Case map
1173
+ 0x1FF4 => [0x03CE, 0x03B9], # Case map
1174
+ 0x1FF6 => [0x03C9, 0x0342], # Case map
1175
+ 0x1FF7 => [0x03C9, 0x0342, 0x03B9], # Case map
1176
+ 0x1FF8 => [0x1F78], # Case map
1177
+ 0x1FF9 => [0x1F79], # Case map
1178
+ 0x1FFA => [0x1F7C], # Case map
1179
+ 0x1FFB => [0x1F7D], # Case map
1180
+ 0x1FFC => [0x03C9, 0x03B9], # Case map
1181
+ 0x20A8 => [0x0072, 0x0073], # Additional folding
1182
+ 0x2102 => [0x0063], # Additional folding
1183
+ 0x2103 => [0x00B0, 0x0063], # Additional folding
1184
+ 0x2107 => [0x025B], # Additional folding
1185
+ 0x2109 => [0x00B0, 0x0066], # Additional folding
1186
+ 0x210B => [0x0068], # Additional folding
1187
+ 0x210C => [0x0068], # Additional folding
1188
+ 0x210D => [0x0068], # Additional folding
1189
+ 0x2110 => [0x0069], # Additional folding
1190
+ 0x2111 => [0x0069], # Additional folding
1191
+ 0x2112 => [0x006C], # Additional folding
1192
+ 0x2115 => [0x006E], # Additional folding
1193
+ 0x2116 => [0x006E, 0x006F], # Additional folding
1194
+ 0x2119 => [0x0070], # Additional folding
1195
+ 0x211A => [0x0071], # Additional folding
1196
+ 0x211B => [0x0072], # Additional folding
1197
+ 0x211C => [0x0072], # Additional folding
1198
+ 0x211D => [0x0072], # Additional folding
1199
+ 0x2120 => [0x0073, 0x006D], # Additional folding
1200
+ 0x2121 => [0x0074, 0x0065, 0x006C], # Additional folding
1201
+ 0x2122 => [0x0074, 0x006D], # Additional folding
1202
+ 0x2124 => [0x007A], # Additional folding
1203
+ 0x2126 => [0x03C9], # Case map
1204
+ 0x2128 => [0x007A], # Additional folding
1205
+ 0x212A => [0x006B], # Case map
1206
+ 0x212B => [0x00E5], # Case map
1207
+ 0x212C => [0x0062], # Additional folding
1208
+ 0x212D => [0x0063], # Additional folding
1209
+ 0x2130 => [0x0065], # Additional folding
1210
+ 0x2131 => [0x0066], # Additional folding
1211
+ 0x2133 => [0x006D], # Additional folding
1212
+ 0x213E => [0x03B3], # Additional folding
1213
+ 0x213F => [0x03C0], # Additional folding
1214
+ 0x2145 => [0x0064], # Additional folding
1215
+ 0x2160 => [0x2170], # Case map
1216
+ 0x2161 => [0x2171], # Case map
1217
+ 0x2162 => [0x2172], # Case map
1218
+ 0x2163 => [0x2173], # Case map
1219
+ 0x2164 => [0x2174], # Case map
1220
+ 0x2165 => [0x2175], # Case map
1221
+ 0x2166 => [0x2176], # Case map
1222
+ 0x2167 => [0x2177], # Case map
1223
+ 0x2168 => [0x2178], # Case map
1224
+ 0x2169 => [0x2179], # Case map
1225
+ 0x216A => [0x217A], # Case map
1226
+ 0x216B => [0x217B], # Case map
1227
+ 0x216C => [0x217C], # Case map
1228
+ 0x216D => [0x217D], # Case map
1229
+ 0x216E => [0x217E], # Case map
1230
+ 0x216F => [0x217F], # Case map
1231
+ 0x24B6 => [0x24D0], # Case map
1232
+ 0x24B7 => [0x24D1], # Case map
1233
+ 0x24B8 => [0x24D2], # Case map
1234
+ 0x24B9 => [0x24D3], # Case map
1235
+ 0x24BA => [0x24D4], # Case map
1236
+ 0x24BB => [0x24D5], # Case map
1237
+ 0x24BC => [0x24D6], # Case map
1238
+ 0x24BD => [0x24D7], # Case map
1239
+ 0x24BE => [0x24D8], # Case map
1240
+ 0x24BF => [0x24D9], # Case map
1241
+ 0x24C0 => [0x24DA], # Case map
1242
+ 0x24C1 => [0x24DB], # Case map
1243
+ 0x24C2 => [0x24DC], # Case map
1244
+ 0x24C3 => [0x24DD], # Case map
1245
+ 0x24C4 => [0x24DE], # Case map
1246
+ 0x24C5 => [0x24DF], # Case map
1247
+ 0x24C6 => [0x24E0], # Case map
1248
+ 0x24C7 => [0x24E1], # Case map
1249
+ 0x24C8 => [0x24E2], # Case map
1250
+ 0x24C9 => [0x24E3], # Case map
1251
+ 0x24CA => [0x24E4], # Case map
1252
+ 0x24CB => [0x24E5], # Case map
1253
+ 0x24CC => [0x24E6], # Case map
1254
+ 0x24CD => [0x24E7], # Case map
1255
+ 0x24CE => [0x24E8], # Case map
1256
+ 0x24CF => [0x24E9], # Case map
1257
+ 0x3371 => [0x0068, 0x0070, 0x0061], # Additional folding
1258
+ 0x3373 => [0x0061, 0x0075], # Additional folding
1259
+ 0x3375 => [0x006F, 0x0076], # Additional folding
1260
+ 0x3380 => [0x0070, 0x0061], # Additional folding
1261
+ 0x3381 => [0x006E, 0x0061], # Additional folding
1262
+ 0x3382 => [0x03BC, 0x0061], # Additional folding
1263
+ 0x3383 => [0x006D, 0x0061], # Additional folding
1264
+ 0x3384 => [0x006B, 0x0061], # Additional folding
1265
+ 0x3385 => [0x006B, 0x0062], # Additional folding
1266
+ 0x3386 => [0x006D, 0x0062], # Additional folding
1267
+ 0x3387 => [0x0067, 0x0062], # Additional folding
1268
+ 0x338A => [0x0070, 0x0066], # Additional folding
1269
+ 0x338B => [0x006E, 0x0066], # Additional folding
1270
+ 0x338C => [0x03BC, 0x0066], # Additional folding
1271
+ 0x3390 => [0x0068, 0x007A], # Additional folding
1272
+ 0x3391 => [0x006B, 0x0068, 0x007A], # Additional folding
1273
+ 0x3392 => [0x006D, 0x0068, 0x007A], # Additional folding
1274
+ 0x3393 => [0x0067, 0x0068, 0x007A], # Additional folding
1275
+ 0x3394 => [0x0074, 0x0068, 0x007A], # Additional folding
1276
+ 0x33A9 => [0x0070, 0x0061], # Additional folding
1277
+ 0x33AA => [0x006B, 0x0070, 0x0061], # Additional folding
1278
+ 0x33AB => [0x006D, 0x0070, 0x0061], # Additional folding
1279
+ 0x33AC => [0x0067, 0x0070, 0x0061], # Additional folding
1280
+ 0x33B4 => [0x0070, 0x0076], # Additional folding
1281
+ 0x33B5 => [0x006E, 0x0076], # Additional folding
1282
+ 0x33B6 => [0x03BC, 0x0076], # Additional folding
1283
+ 0x33B7 => [0x006D, 0x0076], # Additional folding
1284
+ 0x33B8 => [0x006B, 0x0076], # Additional folding
1285
+ 0x33B9 => [0x006D, 0x0076], # Additional folding
1286
+ 0x33BA => [0x0070, 0x0077], # Additional folding
1287
+ 0x33BB => [0x006E, 0x0077], # Additional folding
1288
+ 0x33BC => [0x03BC, 0x0077], # Additional folding
1289
+ 0x33BD => [0x006D, 0x0077], # Additional folding
1290
+ 0x33BE => [0x006B, 0x0077], # Additional folding
1291
+ 0x33BF => [0x006D, 0x0077], # Additional folding
1292
+ 0x33C0 => [0x006B, 0x03C9], # Additional folding
1293
+ 0x33C1 => [0x006D, 0x03C9], # Additional folding
1294
+ 0x33C3 => [0x0062, 0x0071], # Additional folding
1295
+ 0x33C6 => [0x0063, 0x2215, 0x006B, 0x0067], # Additional folding
1296
+ 0x33C7 => [0x0063, 0x006F, 0x002E], # Additional folding
1297
+ 0x33C8 => [0x0064, 0x0062], # Additional folding
1298
+ 0x33C9 => [0x0067, 0x0079], # Additional folding
1299
+ 0x33CB => [0x0068, 0x0070], # Additional folding
1300
+ 0x33CD => [0x006B, 0x006B], # Additional folding
1301
+ 0x33CE => [0x006B, 0x006D], # Additional folding
1302
+ 0x33D7 => [0x0070, 0x0068], # Additional folding
1303
+ 0x33D9 => [0x0070, 0x0070, 0x006D], # Additional folding
1304
+ 0x33DA => [0x0070, 0x0072], # Additional folding
1305
+ 0x33DC => [0x0073, 0x0076], # Additional folding
1306
+ 0x33DD => [0x0077, 0x0062], # Additional folding
1307
+ 0xFB00 => [0x0066, 0x0066], # Case map
1308
+ 0xFB01 => [0x0066, 0x0069], # Case map
1309
+ 0xFB02 => [0x0066, 0x006C], # Case map
1310
+ 0xFB03 => [0x0066, 0x0066, 0x0069], # Case map
1311
+ 0xFB04 => [0x0066, 0x0066, 0x006C], # Case map
1312
+ 0xFB05 => [0x0073, 0x0074], # Case map
1313
+ 0xFB06 => [0x0073, 0x0074], # Case map
1314
+ 0xFB13 => [0x0574, 0x0576], # Case map
1315
+ 0xFB14 => [0x0574, 0x0565], # Case map
1316
+ 0xFB15 => [0x0574, 0x056B], # Case map
1317
+ 0xFB16 => [0x057E, 0x0576], # Case map
1318
+ 0xFB17 => [0x0574, 0x056D], # Case map
1319
+ 0xFF21 => [0xFF41], # Case map
1320
+ 0xFF22 => [0xFF42], # Case map
1321
+ 0xFF23 => [0xFF43], # Case map
1322
+ 0xFF24 => [0xFF44], # Case map
1323
+ 0xFF25 => [0xFF45], # Case map
1324
+ 0xFF26 => [0xFF46], # Case map
1325
+ 0xFF27 => [0xFF47], # Case map
1326
+ 0xFF28 => [0xFF48], # Case map
1327
+ 0xFF29 => [0xFF49], # Case map
1328
+ 0xFF2A => [0xFF4A], # Case map
1329
+ 0xFF2B => [0xFF4B], # Case map
1330
+ 0xFF2C => [0xFF4C], # Case map
1331
+ 0xFF2D => [0xFF4D], # Case map
1332
+ 0xFF2E => [0xFF4E], # Case map
1333
+ 0xFF2F => [0xFF4F], # Case map
1334
+ 0xFF30 => [0xFF50], # Case map
1335
+ 0xFF31 => [0xFF51], # Case map
1336
+ 0xFF32 => [0xFF52], # Case map
1337
+ 0xFF33 => [0xFF53], # Case map
1338
+ 0xFF34 => [0xFF54], # Case map
1339
+ 0xFF35 => [0xFF55], # Case map
1340
+ 0xFF36 => [0xFF56], # Case map
1341
+ 0xFF37 => [0xFF57], # Case map
1342
+ 0xFF38 => [0xFF58], # Case map
1343
+ 0xFF39 => [0xFF59], # Case map
1344
+ 0xFF3A => [0xFF5A], # Case map
1345
+ 0x10400 => [0x10428], # Case map
1346
+ 0x10401 => [0x10429], # Case map
1347
+ 0x10402 => [0x1042A], # Case map
1348
+ 0x10403 => [0x1042B], # Case map
1349
+ 0x10404 => [0x1042C], # Case map
1350
+ 0x10405 => [0x1042D], # Case map
1351
+ 0x10406 => [0x1042E], # Case map
1352
+ 0x10407 => [0x1042F], # Case map
1353
+ 0x10408 => [0x10430], # Case map
1354
+ 0x10409 => [0x10431], # Case map
1355
+ 0x1040A => [0x10432], # Case map
1356
+ 0x1040B => [0x10433], # Case map
1357
+ 0x1040C => [0x10434], # Case map
1358
+ 0x1040D => [0x10435], # Case map
1359
+ 0x1040E => [0x10436], # Case map
1360
+ 0x1040F => [0x10437], # Case map
1361
+ 0x10410 => [0x10438], # Case map
1362
+ 0x10411 => [0x10439], # Case map
1363
+ 0x10412 => [0x1043A], # Case map
1364
+ 0x10413 => [0x1043B], # Case map
1365
+ 0x10414 => [0x1043C], # Case map
1366
+ 0x10415 => [0x1043D], # Case map
1367
+ 0x10416 => [0x1043E], # Case map
1368
+ 0x10417 => [0x1043F], # Case map
1369
+ 0x10418 => [0x10440], # Case map
1370
+ 0x10419 => [0x10441], # Case map
1371
+ 0x1041A => [0x10442], # Case map
1372
+ 0x1041B => [0x10443], # Case map
1373
+ 0x1041C => [0x10444], # Case map
1374
+ 0x1041D => [0x10445], # Case map
1375
+ 0x1041E => [0x10446], # Case map
1376
+ 0x1041F => [0x10447], # Case map
1377
+ 0x10420 => [0x10448], # Case map
1378
+ 0x10421 => [0x10449], # Case map
1379
+ 0x10422 => [0x1044A], # Case map
1380
+ 0x10423 => [0x1044B], # Case map
1381
+ 0x10424 => [0x1044C], # Case map
1382
+ 0x10425 => [0x1044D], # Case map
1383
+ 0x1D400 => [0x0061], # Additional folding
1384
+ 0x1D401 => [0x0062], # Additional folding
1385
+ 0x1D402 => [0x0063], # Additional folding
1386
+ 0x1D403 => [0x0064], # Additional folding
1387
+ 0x1D404 => [0x0065], # Additional folding
1388
+ 0x1D405 => [0x0066], # Additional folding
1389
+ 0x1D406 => [0x0067], # Additional folding
1390
+ 0x1D407 => [0x0068], # Additional folding
1391
+ 0x1D408 => [0x0069], # Additional folding
1392
+ 0x1D409 => [0x006A], # Additional folding
1393
+ 0x1D40A => [0x006B], # Additional folding
1394
+ 0x1D40B => [0x006C], # Additional folding
1395
+ 0x1D40C => [0x006D], # Additional folding
1396
+ 0x1D40D => [0x006E], # Additional folding
1397
+ 0x1D40E => [0x006F], # Additional folding
1398
+ 0x1D40F => [0x0070], # Additional folding
1399
+ 0x1D410 => [0x0071], # Additional folding
1400
+ 0x1D411 => [0x0072], # Additional folding
1401
+ 0x1D412 => [0x0073], # Additional folding
1402
+ 0x1D413 => [0x0074], # Additional folding
1403
+ 0x1D414 => [0x0075], # Additional folding
1404
+ 0x1D415 => [0x0076], # Additional folding
1405
+ 0x1D416 => [0x0077], # Additional folding
1406
+ 0x1D417 => [0x0078], # Additional folding
1407
+ 0x1D418 => [0x0079], # Additional folding
1408
+ 0x1D419 => [0x007A], # Additional folding
1409
+ 0x1D434 => [0x0061], # Additional folding
1410
+ 0x1D435 => [0x0062], # Additional folding
1411
+ 0x1D436 => [0x0063], # Additional folding
1412
+ 0x1D437 => [0x0064], # Additional folding
1413
+ 0x1D438 => [0x0065], # Additional folding
1414
+ 0x1D439 => [0x0066], # Additional folding
1415
+ 0x1D43A => [0x0067], # Additional folding
1416
+ 0x1D43B => [0x0068], # Additional folding
1417
+ 0x1D43C => [0x0069], # Additional folding
1418
+ 0x1D43D => [0x006A], # Additional folding
1419
+ 0x1D43E => [0x006B], # Additional folding
1420
+ 0x1D43F => [0x006C], # Additional folding
1421
+ 0x1D440 => [0x006D], # Additional folding
1422
+ 0x1D441 => [0x006E], # Additional folding
1423
+ 0x1D442 => [0x006F], # Additional folding
1424
+ 0x1D443 => [0x0070], # Additional folding
1425
+ 0x1D444 => [0x0071], # Additional folding
1426
+ 0x1D445 => [0x0072], # Additional folding
1427
+ 0x1D446 => [0x0073], # Additional folding
1428
+ 0x1D447 => [0x0074], # Additional folding
1429
+ 0x1D448 => [0x0075], # Additional folding
1430
+ 0x1D449 => [0x0076], # Additional folding
1431
+ 0x1D44A => [0x0077], # Additional folding
1432
+ 0x1D44B => [0x0078], # Additional folding
1433
+ 0x1D44C => [0x0079], # Additional folding
1434
+ 0x1D44D => [0x007A], # Additional folding
1435
+ 0x1D468 => [0x0061], # Additional folding
1436
+ 0x1D469 => [0x0062], # Additional folding
1437
+ 0x1D46A => [0x0063], # Additional folding
1438
+ 0x1D46B => [0x0064], # Additional folding
1439
+ 0x1D46C => [0x0065], # Additional folding
1440
+ 0x1D46D => [0x0066], # Additional folding
1441
+ 0x1D46E => [0x0067], # Additional folding
1442
+ 0x1D46F => [0x0068], # Additional folding
1443
+ 0x1D470 => [0x0069], # Additional folding
1444
+ 0x1D471 => [0x006A], # Additional folding
1445
+ 0x1D472 => [0x006B], # Additional folding
1446
+ 0x1D473 => [0x006C], # Additional folding
1447
+ 0x1D474 => [0x006D], # Additional folding
1448
+ 0x1D475 => [0x006E], # Additional folding
1449
+ 0x1D476 => [0x006F], # Additional folding
1450
+ 0x1D477 => [0x0070], # Additional folding
1451
+ 0x1D478 => [0x0071], # Additional folding
1452
+ 0x1D479 => [0x0072], # Additional folding
1453
+ 0x1D47A => [0x0073], # Additional folding
1454
+ 0x1D47B => [0x0074], # Additional folding
1455
+ 0x1D47C => [0x0075], # Additional folding
1456
+ 0x1D47D => [0x0076], # Additional folding
1457
+ 0x1D47E => [0x0077], # Additional folding
1458
+ 0x1D47F => [0x0078], # Additional folding
1459
+ 0x1D480 => [0x0079], # Additional folding
1460
+ 0x1D481 => [0x007A], # Additional folding
1461
+ 0x1D49C => [0x0061], # Additional folding
1462
+ 0x1D49E => [0x0063], # Additional folding
1463
+ 0x1D49F => [0x0064], # Additional folding
1464
+ 0x1D4A2 => [0x0067], # Additional folding
1465
+ 0x1D4A5 => [0x006A], # Additional folding
1466
+ 0x1D4A6 => [0x006B], # Additional folding
1467
+ 0x1D4A9 => [0x006E], # Additional folding
1468
+ 0x1D4AA => [0x006F], # Additional folding
1469
+ 0x1D4AB => [0x0070], # Additional folding
1470
+ 0x1D4AC => [0x0071], # Additional folding
1471
+ 0x1D4AE => [0x0073], # Additional folding
1472
+ 0x1D4AF => [0x0074], # Additional folding
1473
+ 0x1D4B0 => [0x0075], # Additional folding
1474
+ 0x1D4B1 => [0x0076], # Additional folding
1475
+ 0x1D4B2 => [0x0077], # Additional folding
1476
+ 0x1D4B3 => [0x0078], # Additional folding
1477
+ 0x1D4B4 => [0x0079], # Additional folding
1478
+ 0x1D4B5 => [0x007A], # Additional folding
1479
+ 0x1D4D0 => [0x0061], # Additional folding
1480
+ 0x1D4D1 => [0x0062], # Additional folding
1481
+ 0x1D4D2 => [0x0063], # Additional folding
1482
+ 0x1D4D3 => [0x0064], # Additional folding
1483
+ 0x1D4D4 => [0x0065], # Additional folding
1484
+ 0x1D4D5 => [0x0066], # Additional folding
1485
+ 0x1D4D6 => [0x0067], # Additional folding
1486
+ 0x1D4D7 => [0x0068], # Additional folding
1487
+ 0x1D4D8 => [0x0069], # Additional folding
1488
+ 0x1D4D9 => [0x006A], # Additional folding
1489
+ 0x1D4DA => [0x006B], # Additional folding
1490
+ 0x1D4DB => [0x006C], # Additional folding
1491
+ 0x1D4DC => [0x006D], # Additional folding
1492
+ 0x1D4DD => [0x006E], # Additional folding
1493
+ 0x1D4DE => [0x006F], # Additional folding
1494
+ 0x1D4DF => [0x0070], # Additional folding
1495
+ 0x1D4E0 => [0x0071], # Additional folding
1496
+ 0x1D4E1 => [0x0072], # Additional folding
1497
+ 0x1D4E2 => [0x0073], # Additional folding
1498
+ 0x1D4E3 => [0x0074], # Additional folding
1499
+ 0x1D4E4 => [0x0075], # Additional folding
1500
+ 0x1D4E5 => [0x0076], # Additional folding
1501
+ 0x1D4E6 => [0x0077], # Additional folding
1502
+ 0x1D4E7 => [0x0078], # Additional folding
1503
+ 0x1D4E8 => [0x0079], # Additional folding
1504
+ 0x1D4E9 => [0x007A], # Additional folding
1505
+ 0x1D504 => [0x0061], # Additional folding
1506
+ 0x1D505 => [0x0062], # Additional folding
1507
+ 0x1D507 => [0x0064], # Additional folding
1508
+ 0x1D508 => [0x0065], # Additional folding
1509
+ 0x1D509 => [0x0066], # Additional folding
1510
+ 0x1D50A => [0x0067], # Additional folding
1511
+ 0x1D50D => [0x006A], # Additional folding
1512
+ 0x1D50E => [0x006B], # Additional folding
1513
+ 0x1D50F => [0x006C], # Additional folding
1514
+ 0x1D510 => [0x006D], # Additional folding
1515
+ 0x1D511 => [0x006E], # Additional folding
1516
+ 0x1D512 => [0x006F], # Additional folding
1517
+ 0x1D513 => [0x0070], # Additional folding
1518
+ 0x1D514 => [0x0071], # Additional folding
1519
+ 0x1D516 => [0x0073], # Additional folding
1520
+ 0x1D517 => [0x0074], # Additional folding
1521
+ 0x1D518 => [0x0075], # Additional folding
1522
+ 0x1D519 => [0x0076], # Additional folding
1523
+ 0x1D51A => [0x0077], # Additional folding
1524
+ 0x1D51B => [0x0078], # Additional folding
1525
+ 0x1D51C => [0x0079], # Additional folding
1526
+ 0x1D538 => [0x0061], # Additional folding
1527
+ 0x1D539 => [0x0062], # Additional folding
1528
+ 0x1D53B => [0x0064], # Additional folding
1529
+ 0x1D53C => [0x0065], # Additional folding
1530
+ 0x1D53D => [0x0066], # Additional folding
1531
+ 0x1D53E => [0x0067], # Additional folding
1532
+ 0x1D540 => [0x0069], # Additional folding
1533
+ 0x1D541 => [0x006A], # Additional folding
1534
+ 0x1D542 => [0x006B], # Additional folding
1535
+ 0x1D543 => [0x006C], # Additional folding
1536
+ 0x1D544 => [0x006D], # Additional folding
1537
+ 0x1D546 => [0x006F], # Additional folding
1538
+ 0x1D54A => [0x0073], # Additional folding
1539
+ 0x1D54B => [0x0074], # Additional folding
1540
+ 0x1D54C => [0x0075], # Additional folding
1541
+ 0x1D54D => [0x0076], # Additional folding
1542
+ 0x1D54E => [0x0077], # Additional folding
1543
+ 0x1D54F => [0x0078], # Additional folding
1544
+ 0x1D550 => [0x0079], # Additional folding
1545
+ 0x1D56C => [0x0061], # Additional folding
1546
+ 0x1D56D => [0x0062], # Additional folding
1547
+ 0x1D56E => [0x0063], # Additional folding
1548
+ 0x1D56F => [0x0064], # Additional folding
1549
+ 0x1D570 => [0x0065], # Additional folding
1550
+ 0x1D571 => [0x0066], # Additional folding
1551
+ 0x1D572 => [0x0067], # Additional folding
1552
+ 0x1D573 => [0x0068], # Additional folding
1553
+ 0x1D574 => [0x0069], # Additional folding
1554
+ 0x1D575 => [0x006A], # Additional folding
1555
+ 0x1D576 => [0x006B], # Additional folding
1556
+ 0x1D577 => [0x006C], # Additional folding
1557
+ 0x1D578 => [0x006D], # Additional folding
1558
+ 0x1D579 => [0x006E], # Additional folding
1559
+ 0x1D57A => [0x006F], # Additional folding
1560
+ 0x1D57B => [0x0070], # Additional folding
1561
+ 0x1D57C => [0x0071], # Additional folding
1562
+ 0x1D57D => [0x0072], # Additional folding
1563
+ 0x1D57E => [0x0073], # Additional folding
1564
+ 0x1D57F => [0x0074], # Additional folding
1565
+ 0x1D580 => [0x0075], # Additional folding
1566
+ 0x1D581 => [0x0076], # Additional folding
1567
+ 0x1D582 => [0x0077], # Additional folding
1568
+ 0x1D583 => [0x0078], # Additional folding
1569
+ 0x1D584 => [0x0079], # Additional folding
1570
+ 0x1D585 => [0x007A], # Additional folding
1571
+ 0x1D5A0 => [0x0061], # Additional folding
1572
+ 0x1D5A1 => [0x0062], # Additional folding
1573
+ 0x1D5A2 => [0x0063], # Additional folding
1574
+ 0x1D5A3 => [0x0064], # Additional folding
1575
+ 0x1D5A4 => [0x0065], # Additional folding
1576
+ 0x1D5A5 => [0x0066], # Additional folding
1577
+ 0x1D5A6 => [0x0067], # Additional folding
1578
+ 0x1D5A7 => [0x0068], # Additional folding
1579
+ 0x1D5A8 => [0x0069], # Additional folding
1580
+ 0x1D5A9 => [0x006A], # Additional folding
1581
+ 0x1D5AA => [0x006B], # Additional folding
1582
+ 0x1D5AB => [0x006C], # Additional folding
1583
+ 0x1D5AC => [0x006D], # Additional folding
1584
+ 0x1D5AD => [0x006E], # Additional folding
1585
+ 0x1D5AE => [0x006F], # Additional folding
1586
+ 0x1D5AF => [0x0070], # Additional folding
1587
+ 0x1D5B0 => [0x0071], # Additional folding
1588
+ 0x1D5B1 => [0x0072], # Additional folding
1589
+ 0x1D5B2 => [0x0073], # Additional folding
1590
+ 0x1D5B3 => [0x0074], # Additional folding
1591
+ 0x1D5B4 => [0x0075], # Additional folding
1592
+ 0x1D5B5 => [0x0076], # Additional folding
1593
+ 0x1D5B6 => [0x0077], # Additional folding
1594
+ 0x1D5B7 => [0x0078], # Additional folding
1595
+ 0x1D5B8 => [0x0079], # Additional folding
1596
+ 0x1D5B9 => [0x007A], # Additional folding
1597
+ 0x1D5D4 => [0x0061], # Additional folding
1598
+ 0x1D5D5 => [0x0062], # Additional folding
1599
+ 0x1D5D6 => [0x0063], # Additional folding
1600
+ 0x1D5D7 => [0x0064], # Additional folding
1601
+ 0x1D5D8 => [0x0065], # Additional folding
1602
+ 0x1D5D9 => [0x0066], # Additional folding
1603
+ 0x1D5DA => [0x0067], # Additional folding
1604
+ 0x1D5DB => [0x0068], # Additional folding
1605
+ 0x1D5DC => [0x0069], # Additional folding
1606
+ 0x1D5DD => [0x006A], # Additional folding
1607
+ 0x1D5DE => [0x006B], # Additional folding
1608
+ 0x1D5DF => [0x006C], # Additional folding
1609
+ 0x1D5E0 => [0x006D], # Additional folding
1610
+ 0x1D5E1 => [0x006E], # Additional folding
1611
+ 0x1D5E2 => [0x006F], # Additional folding
1612
+ 0x1D5E3 => [0x0070], # Additional folding
1613
+ 0x1D5E4 => [0x0071], # Additional folding
1614
+ 0x1D5E5 => [0x0072], # Additional folding
1615
+ 0x1D5E6 => [0x0073], # Additional folding
1616
+ 0x1D5E7 => [0x0074], # Additional folding
1617
+ 0x1D5E8 => [0x0075], # Additional folding
1618
+ 0x1D5E9 => [0x0076], # Additional folding
1619
+ 0x1D5EA => [0x0077], # Additional folding
1620
+ 0x1D5EB => [0x0078], # Additional folding
1621
+ 0x1D5EC => [0x0079], # Additional folding
1622
+ 0x1D5ED => [0x007A], # Additional folding
1623
+ 0x1D608 => [0x0061], # Additional folding
1624
+ 0x1D609 => [0x0062], # Additional folding
1625
+ 0x1D60A => [0x0063], # Additional folding
1626
+ 0x1D60B => [0x0064], # Additional folding
1627
+ 0x1D60C => [0x0065], # Additional folding
1628
+ 0x1D60D => [0x0066], # Additional folding
1629
+ 0x1D60E => [0x0067], # Additional folding
1630
+ 0x1D60F => [0x0068], # Additional folding
1631
+ 0x1D610 => [0x0069], # Additional folding
1632
+ 0x1D611 => [0x006A], # Additional folding
1633
+ 0x1D612 => [0x006B], # Additional folding
1634
+ 0x1D613 => [0x006C], # Additional folding
1635
+ 0x1D614 => [0x006D], # Additional folding
1636
+ 0x1D615 => [0x006E], # Additional folding
1637
+ 0x1D616 => [0x006F], # Additional folding
1638
+ 0x1D617 => [0x0070], # Additional folding
1639
+ 0x1D618 => [0x0071], # Additional folding
1640
+ 0x1D619 => [0x0072], # Additional folding
1641
+ 0x1D61A => [0x0073], # Additional folding
1642
+ 0x1D61B => [0x0074], # Additional folding
1643
+ 0x1D61C => [0x0075], # Additional folding
1644
+ 0x1D61D => [0x0076], # Additional folding
1645
+ 0x1D61E => [0x0077], # Additional folding
1646
+ 0x1D61F => [0x0078], # Additional folding
1647
+ 0x1D620 => [0x0079], # Additional folding
1648
+ 0x1D621 => [0x007A], # Additional folding
1649
+ 0x1D63C => [0x0061], # Additional folding
1650
+ 0x1D63D => [0x0062], # Additional folding
1651
+ 0x1D63E => [0x0063], # Additional folding
1652
+ 0x1D63F => [0x0064], # Additional folding
1653
+ 0x1D640 => [0x0065], # Additional folding
1654
+ 0x1D641 => [0x0066], # Additional folding
1655
+ 0x1D642 => [0x0067], # Additional folding
1656
+ 0x1D643 => [0x0068], # Additional folding
1657
+ 0x1D644 => [0x0069], # Additional folding
1658
+ 0x1D645 => [0x006A], # Additional folding
1659
+ 0x1D646 => [0x006B], # Additional folding
1660
+ 0x1D647 => [0x006C], # Additional folding
1661
+ 0x1D648 => [0x006D], # Additional folding
1662
+ 0x1D649 => [0x006E], # Additional folding
1663
+ 0x1D64A => [0x006F], # Additional folding
1664
+ 0x1D64B => [0x0070], # Additional folding
1665
+ 0x1D64C => [0x0071], # Additional folding
1666
+ 0x1D64D => [0x0072], # Additional folding
1667
+ 0x1D64E => [0x0073], # Additional folding
1668
+ 0x1D64F => [0x0074], # Additional folding
1669
+ 0x1D650 => [0x0075], # Additional folding
1670
+ 0x1D651 => [0x0076], # Additional folding
1671
+ 0x1D652 => [0x0077], # Additional folding
1672
+ 0x1D653 => [0x0078], # Additional folding
1673
+ 0x1D654 => [0x0079], # Additional folding
1674
+ 0x1D655 => [0x007A], # Additional folding
1675
+ 0x1D670 => [0x0061], # Additional folding
1676
+ 0x1D671 => [0x0062], # Additional folding
1677
+ 0x1D672 => [0x0063], # Additional folding
1678
+ 0x1D673 => [0x0064], # Additional folding
1679
+ 0x1D674 => [0x0065], # Additional folding
1680
+ 0x1D675 => [0x0066], # Additional folding
1681
+ 0x1D676 => [0x0067], # Additional folding
1682
+ 0x1D677 => [0x0068], # Additional folding
1683
+ 0x1D678 => [0x0069], # Additional folding
1684
+ 0x1D679 => [0x006A], # Additional folding
1685
+ 0x1D67A => [0x006B], # Additional folding
1686
+ 0x1D67B => [0x006C], # Additional folding
1687
+ 0x1D67C => [0x006D], # Additional folding
1688
+ 0x1D67D => [0x006E], # Additional folding
1689
+ 0x1D67E => [0x006F], # Additional folding
1690
+ 0x1D67F => [0x0070], # Additional folding
1691
+ 0x1D680 => [0x0071], # Additional folding
1692
+ 0x1D681 => [0x0072], # Additional folding
1693
+ 0x1D682 => [0x0073], # Additional folding
1694
+ 0x1D683 => [0x0074], # Additional folding
1695
+ 0x1D684 => [0x0075], # Additional folding
1696
+ 0x1D685 => [0x0076], # Additional folding
1697
+ 0x1D686 => [0x0077], # Additional folding
1698
+ 0x1D687 => [0x0078], # Additional folding
1699
+ 0x1D688 => [0x0079], # Additional folding
1700
+ 0x1D689 => [0x007A], # Additional folding
1701
+ 0x1D6A8 => [0x03B1], # Additional folding
1702
+ 0x1D6A9 => [0x03B2], # Additional folding
1703
+ 0x1D6AA => [0x03B3], # Additional folding
1704
+ 0x1D6AB => [0x03B4], # Additional folding
1705
+ 0x1D6AC => [0x03B5], # Additional folding
1706
+ 0x1D6AD => [0x03B6], # Additional folding
1707
+ 0x1D6AE => [0x03B7], # Additional folding
1708
+ 0x1D6AF => [0x03B8], # Additional folding
1709
+ 0x1D6B0 => [0x03B9], # Additional folding
1710
+ 0x1D6B1 => [0x03BA], # Additional folding
1711
+ 0x1D6B2 => [0x03BB], # Additional folding
1712
+ 0x1D6B3 => [0x03BC], # Additional folding
1713
+ 0x1D6B4 => [0x03BD], # Additional folding
1714
+ 0x1D6B5 => [0x03BE], # Additional folding
1715
+ 0x1D6B6 => [0x03BF], # Additional folding
1716
+ 0x1D6B7 => [0x03C0], # Additional folding
1717
+ 0x1D6B8 => [0x03C1], # Additional folding
1718
+ 0x1D6B9 => [0x03B8], # Additional folding
1719
+ 0x1D6BA => [0x03C3], # Additional folding
1720
+ 0x1D6BB => [0x03C4], # Additional folding
1721
+ 0x1D6BC => [0x03C5], # Additional folding
1722
+ 0x1D6BD => [0x03C6], # Additional folding
1723
+ 0x1D6BE => [0x03C7], # Additional folding
1724
+ 0x1D6BF => [0x03C8], # Additional folding
1725
+ 0x1D6C0 => [0x03C9], # Additional folding
1726
+ 0x1D6D3 => [0x03C3], # Additional folding
1727
+ 0x1D6E2 => [0x03B1], # Additional folding
1728
+ 0x1D6E3 => [0x03B2], # Additional folding
1729
+ 0x1D6E4 => [0x03B3], # Additional folding
1730
+ 0x1D6E5 => [0x03B4], # Additional folding
1731
+ 0x1D6E6 => [0x03B5], # Additional folding
1732
+ 0x1D6E7 => [0x03B6], # Additional folding
1733
+ 0x1D6E8 => [0x03B7], # Additional folding
1734
+ 0x1D6E9 => [0x03B8], # Additional folding
1735
+ 0x1D6EA => [0x03B9], # Additional folding
1736
+ 0x1D6EB => [0x03BA], # Additional folding
1737
+ 0x1D6EC => [0x03BB], # Additional folding
1738
+ 0x1D6ED => [0x03BC], # Additional folding
1739
+ 0x1D6EE => [0x03BD], # Additional folding
1740
+ 0x1D6EF => [0x03BE], # Additional folding
1741
+ 0x1D6F0 => [0x03BF], # Additional folding
1742
+ 0x1D6F1 => [0x03C0], # Additional folding
1743
+ 0x1D6F2 => [0x03C1], # Additional folding
1744
+ 0x1D6F3 => [0x03B8], # Additional folding
1745
+ 0x1D6F4 => [0x03C3], # Additional folding
1746
+ 0x1D6F5 => [0x03C4], # Additional folding
1747
+ 0x1D6F6 => [0x03C5], # Additional folding
1748
+ 0x1D6F7 => [0x03C6], # Additional folding
1749
+ 0x1D6F8 => [0x03C7], # Additional folding
1750
+ 0x1D6F9 => [0x03C8], # Additional folding
1751
+ 0x1D6FA => [0x03C9], # Additional folding
1752
+ 0x1D70D => [0x03C3], # Additional folding
1753
+ 0x1D71C => [0x03B1], # Additional folding
1754
+ 0x1D71D => [0x03B2], # Additional folding
1755
+ 0x1D71E => [0x03B3], # Additional folding
1756
+ 0x1D71F => [0x03B4], # Additional folding
1757
+ 0x1D720 => [0x03B5], # Additional folding
1758
+ 0x1D721 => [0x03B6], # Additional folding
1759
+ 0x1D722 => [0x03B7], # Additional folding
1760
+ 0x1D723 => [0x03B8], # Additional folding
1761
+ 0x1D724 => [0x03B9], # Additional folding
1762
+ 0x1D725 => [0x03BA], # Additional folding
1763
+ 0x1D726 => [0x03BB], # Additional folding
1764
+ 0x1D727 => [0x03BC], # Additional folding
1765
+ 0x1D728 => [0x03BD], # Additional folding
1766
+ 0x1D729 => [0x03BE], # Additional folding
1767
+ 0x1D72A => [0x03BF], # Additional folding
1768
+ 0x1D72B => [0x03C0], # Additional folding
1769
+ 0x1D72C => [0x03C1], # Additional folding
1770
+ 0x1D72D => [0x03B8], # Additional folding
1771
+ 0x1D72E => [0x03C3], # Additional folding
1772
+ 0x1D72F => [0x03C4], # Additional folding
1773
+ 0x1D730 => [0x03C5], # Additional folding
1774
+ 0x1D731 => [0x03C6], # Additional folding
1775
+ 0x1D732 => [0x03C7], # Additional folding
1776
+ 0x1D733 => [0x03C8], # Additional folding
1777
+ 0x1D734 => [0x03C9], # Additional folding
1778
+ 0x1D747 => [0x03C3], # Additional folding
1779
+ 0x1D756 => [0x03B1], # Additional folding
1780
+ 0x1D757 => [0x03B2], # Additional folding
1781
+ 0x1D758 => [0x03B3], # Additional folding
1782
+ 0x1D759 => [0x03B4], # Additional folding
1783
+ 0x1D75A => [0x03B5], # Additional folding
1784
+ 0x1D75B => [0x03B6], # Additional folding
1785
+ 0x1D75C => [0x03B7], # Additional folding
1786
+ 0x1D75D => [0x03B8], # Additional folding
1787
+ 0x1D75E => [0x03B9], # Additional folding
1788
+ 0x1D75F => [0x03BA], # Additional folding
1789
+ 0x1D760 => [0x03BB], # Additional folding
1790
+ 0x1D761 => [0x03BC], # Additional folding
1791
+ 0x1D762 => [0x03BD], # Additional folding
1792
+ 0x1D763 => [0x03BE], # Additional folding
1793
+ 0x1D764 => [0x03BF], # Additional folding
1794
+ 0x1D765 => [0x03C0], # Additional folding
1795
+ 0x1D766 => [0x03C1], # Additional folding
1796
+ 0x1D767 => [0x03B8], # Additional folding
1797
+ 0x1D768 => [0x03C3], # Additional folding
1798
+ 0x1D769 => [0x03C4], # Additional folding
1799
+ 0x1D76A => [0x03C5], # Additional folding
1800
+ 0x1D76B => [0x03C6], # Additional folding
1801
+ 0x1D76C => [0x03C7], # Additional folding
1802
+ 0x1D76D => [0x03C8], # Additional folding
1803
+ 0x1D76E => [0x03C9], # Additional folding
1804
+ 0x1D781 => [0x03C3], # Additional folding
1805
+ 0x1D790 => [0x03B1], # Additional folding
1806
+ 0x1D791 => [0x03B2], # Additional folding
1807
+ 0x1D792 => [0x03B3], # Additional folding
1808
+ 0x1D793 => [0x03B4], # Additional folding
1809
+ 0x1D794 => [0x03B5], # Additional folding
1810
+ 0x1D795 => [0x03B6], # Additional folding
1811
+ 0x1D796 => [0x03B7], # Additional folding
1812
+ 0x1D797 => [0x03B8], # Additional folding
1813
+ 0x1D798 => [0x03B9], # Additional folding
1814
+ 0x1D799 => [0x03BA], # Additional folding
1815
+ 0x1D79A => [0x03BB], # Additional folding
1816
+ 0x1D79B => [0x03BC], # Additional folding
1817
+ 0x1D79C => [0x03BD], # Additional folding
1818
+ 0x1D79D => [0x03BE], # Additional folding
1819
+ 0x1D79E => [0x03BF], # Additional folding
1820
+ 0x1D79F => [0x03C0], # Additional folding
1821
+ 0x1D7A0 => [0x03C1], # Additional folding
1822
+ 0x1D7A1 => [0x03B8], # Additional folding
1823
+ 0x1D7A2 => [0x03C3], # Additional folding
1824
+ 0x1D7A3 => [0x03C4], # Additional folding
1825
+ 0x1D7A4 => [0x03C5], # Additional folding
1826
+ 0x1D7A5 => [0x03C6], # Additional folding
1827
+ 0x1D7A6 => [0x03C7], # Additional folding
1828
+ 0x1D7A7 => [0x03C8], # Additional folding
1829
+ 0x1D7A8 => [0x03C9], # Additional folding
1830
+ 0x1D7BB => [0x03C3], # Additional folding
1831
+ }.freeze
1832
+
1833
+ # Table B3 as defined by RFC 3454 (string preparation).
1834
+ #
1835
+ # @since 2.6.0
1836
+ B3 = {
1837
+ 0x0041 => [0x0061], # Case map
1838
+ 0x0042 => [0x0062], # Case map
1839
+ 0x0043 => [0x0063], # Case map
1840
+ 0x0044 => [0x0064], # Case map
1841
+ 0x0045 => [0x0065], # Case map
1842
+ 0x0046 => [0x0066], # Case map
1843
+ 0x0047 => [0x0067], # Case map
1844
+ 0x0048 => [0x0068], # Case map
1845
+ 0x0049 => [0x0069], # Case map
1846
+ 0x004A => [0x006A], # Case map
1847
+ 0x004B => [0x006B], # Case map
1848
+ 0x004C => [0x006C], # Case map
1849
+ 0x004D => [0x006D], # Case map
1850
+ 0x004E => [0x006E], # Case map
1851
+ 0x004F => [0x006F], # Case map
1852
+ 0x0050 => [0x0070], # Case map
1853
+ 0x0051 => [0x0071], # Case map
1854
+ 0x0052 => [0x0072], # Case map
1855
+ 0x0053 => [0x0073], # Case map
1856
+ 0x0054 => [0x0074], # Case map
1857
+ 0x0055 => [0x0075], # Case map
1858
+ 0x0056 => [0x0076], # Case map
1859
+ 0x0057 => [0x0077], # Case map
1860
+ 0x0058 => [0x0078], # Case map
1861
+ 0x0059 => [0x0079], # Case map
1862
+ 0x005A => [0x007A], # Case map
1863
+ 0x00B5 => [0x03BC], # Case map
1864
+ 0x00C0 => [0x00E0], # Case map
1865
+ 0x00C1 => [0x00E1], # Case map
1866
+ 0x00C2 => [0x00E2], # Case map
1867
+ 0x00C3 => [0x00E3], # Case map
1868
+ 0x00C4 => [0x00E4], # Case map
1869
+ 0x00C5 => [0x00E5], # Case map
1870
+ 0x00C6 => [0x00E6], # Case map
1871
+ 0x00C7 => [0x00E7], # Case map
1872
+ 0x00C8 => [0x00E8], # Case map
1873
+ 0x00C9 => [0x00E9], # Case map
1874
+ 0x00CA => [0x00EA], # Case map
1875
+ 0x00CB => [0x00EB], # Case map
1876
+ 0x00CC => [0x00EC], # Case map
1877
+ 0x00CD => [0x00ED], # Case map
1878
+ 0x00CE => [0x00EE], # Case map
1879
+ 0x00CF => [0x00EF], # Case map
1880
+ 0x00D0 => [0x00F0], # Case map
1881
+ 0x00D1 => [0x00F1], # Case map
1882
+ 0x00D2 => [0x00F2], # Case map
1883
+ 0x00D3 => [0x00F3], # Case map
1884
+ 0x00D4 => [0x00F4], # Case map
1885
+ 0x00D5 => [0x00F5], # Case map
1886
+ 0x00D6 => [0x00F6], # Case map
1887
+ 0x00D8 => [0x00F8], # Case map
1888
+ 0x00D9 => [0x00F9], # Case map
1889
+ 0x00DA => [0x00FA], # Case map
1890
+ 0x00DB => [0x00FB], # Case map
1891
+ 0x00DC => [0x00FC], # Case map
1892
+ 0x00DD => [0x00FD], # Case map
1893
+ 0x00DE => [0x00FE], # Case map
1894
+ 0x00DF => [0x0073, 0x0073], # Case map
1895
+ 0x0100 => [0x0101], # Case map
1896
+ 0x0102 => [0x0103], # Case map
1897
+ 0x0104 => [0x0105], # Case map
1898
+ 0x0106 => [0x0107], # Case map
1899
+ 0x0108 => [0x0109], # Case map
1900
+ 0x010A => [0x010B], # Case map
1901
+ 0x010C => [0x010D], # Case map
1902
+ 0x010E => [0x010F], # Case map
1903
+ 0x0110 => [0x0111], # Case map
1904
+ 0x0112 => [0x0113], # Case map
1905
+ 0x0114 => [0x0115], # Case map
1906
+ 0x0116 => [0x0117], # Case map
1907
+ 0x0118 => [0x0119], # Case map
1908
+ 0x011A => [0x011B], # Case map
1909
+ 0x011C => [0x011D], # Case map
1910
+ 0x011E => [0x011F], # Case map
1911
+ 0x0120 => [0x0121], # Case map
1912
+ 0x0122 => [0x0123], # Case map
1913
+ 0x0124 => [0x0125], # Case map
1914
+ 0x0126 => [0x0127], # Case map
1915
+ 0x0128 => [0x0129], # Case map
1916
+ 0x012A => [0x012B], # Case map
1917
+ 0x012C => [0x012D], # Case map
1918
+ 0x012E => [0x012F], # Case map
1919
+ 0x0130 => [0x0069, 0x0307], # Case map
1920
+ 0x0132 => [0x0133], # Case map
1921
+ 0x0134 => [0x0135], # Case map
1922
+ 0x0136 => [0x0137], # Case map
1923
+ 0x0139 => [0x013A], # Case map
1924
+ 0x013B => [0x013C], # Case map
1925
+ 0x013D => [0x013E], # Case map
1926
+ 0x013F => [0x0140], # Case map
1927
+ 0x0141 => [0x0142], # Case map
1928
+ 0x0143 => [0x0144], # Case map
1929
+ 0x0145 => [0x0146], # Case map
1930
+ 0x0147 => [0x0148], # Case map
1931
+ 0x0149 => [0x02BC, 0x006E], # Case map
1932
+ 0x014A => [0x014B], # Case map
1933
+ 0x014C => [0x014D], # Case map
1934
+ 0x014E => [0x014F], # Case map
1935
+ 0x0150 => [0x0151], # Case map
1936
+ 0x0152 => [0x0153], # Case map
1937
+ 0x0154 => [0x0155], # Case map
1938
+ 0x0156 => [0x0157], # Case map
1939
+ 0x0158 => [0x0159], # Case map
1940
+ 0x015A => [0x015B], # Case map
1941
+ 0x015C => [0x015D], # Case map
1942
+ 0x015E => [0x015F], # Case map
1943
+ 0x0160 => [0x0161], # Case map
1944
+ 0x0162 => [0x0163], # Case map
1945
+ 0x0164 => [0x0165], # Case map
1946
+ 0x0166 => [0x0167], # Case map
1947
+ 0x0168 => [0x0169], # Case map
1948
+ 0x016A => [0x016B], # Case map
1949
+ 0x016C => [0x016D], # Case map
1950
+ 0x016E => [0x016F], # Case map
1951
+ 0x0170 => [0x0171], # Case map
1952
+ 0x0172 => [0x0173], # Case map
1953
+ 0x0174 => [0x0175], # Case map
1954
+ 0x0176 => [0x0177], # Case map
1955
+ 0x0178 => [0x00FF], # Case map
1956
+ 0x0179 => [0x017A], # Case map
1957
+ 0x017B => [0x017C], # Case map
1958
+ 0x017D => [0x017E], # Case map
1959
+ 0x017F => [0x0073], # Case map
1960
+ 0x0181 => [0x0253], # Case map
1961
+ 0x0182 => [0x0183], # Case map
1962
+ 0x0184 => [0x0185], # Case map
1963
+ 0x0186 => [0x0254], # Case map
1964
+ 0x0187 => [0x0188], # Case map
1965
+ 0x0189 => [0x0256], # Case map
1966
+ 0x018A => [0x0257], # Case map
1967
+ 0x018B => [0x018C], # Case map
1968
+ 0x018E => [0x01DD], # Case map
1969
+ 0x018F => [0x0259], # Case map
1970
+ 0x0190 => [0x025B], # Case map
1971
+ 0x0191 => [0x0192], # Case map
1972
+ 0x0193 => [0x0260], # Case map
1973
+ 0x0194 => [0x0263], # Case map
1974
+ 0x0196 => [0x0269], # Case map
1975
+ 0x0197 => [0x0268], # Case map
1976
+ 0x0198 => [0x0199], # Case map
1977
+ 0x019C => [0x026F], # Case map
1978
+ 0x019D => [0x0272], # Case map
1979
+ 0x019F => [0x0275], # Case map
1980
+ 0x01A0 => [0x01A1], # Case map
1981
+ 0x01A2 => [0x01A3], # Case map
1982
+ 0x01A4 => [0x01A5], # Case map
1983
+ 0x01A6 => [0x0280], # Case map
1984
+ 0x01A7 => [0x01A8], # Case map
1985
+ 0x01A9 => [0x0283], # Case map
1986
+ 0x01AC => [0x01AD], # Case map
1987
+ 0x01AE => [0x0288], # Case map
1988
+ 0x01AF => [0x01B0], # Case map
1989
+ 0x01B1 => [0x028A], # Case map
1990
+ 0x01B2 => [0x028B], # Case map
1991
+ 0x01B3 => [0x01B4], # Case map
1992
+ 0x01B5 => [0x01B6], # Case map
1993
+ 0x01B7 => [0x0292], # Case map
1994
+ 0x01B8 => [0x01B9], # Case map
1995
+ 0x01BC => [0x01BD], # Case map
1996
+ 0x01C4 => [0x01C6], # Case map
1997
+ 0x01C5 => [0x01C6], # Case map
1998
+ 0x01C7 => [0x01C9], # Case map
1999
+ 0x01C8 => [0x01C9], # Case map
2000
+ 0x01CA => [0x01CC], # Case map
2001
+ 0x01CB => [0x01CC], # Case map
2002
+ 0x01CD => [0x01CE], # Case map
2003
+ 0x01CF => [0x01D0], # Case map
2004
+ 0x01D1 => [0x01D2], # Case map
2005
+ 0x01D3 => [0x01D4], # Case map
2006
+ 0x01D5 => [0x01D6], # Case map
2007
+ 0x01D7 => [0x01D8], # Case map
2008
+ 0x01D9 => [0x01DA], # Case map
2009
+ 0x01DB => [0x01DC], # Case map
2010
+ 0x01DE => [0x01DF], # Case map
2011
+ 0x01E0 => [0x01E1], # Case map
2012
+ 0x01E2 => [0x01E3], # Case map
2013
+ 0x01E4 => [0x01E5], # Case map
2014
+ 0x01E6 => [0x01E7], # Case map
2015
+ 0x01E8 => [0x01E9], # Case map
2016
+ 0x01EA => [0x01EB], # Case map
2017
+ 0x01EC => [0x01ED], # Case map
2018
+ 0x01EE => [0x01EF], # Case map
2019
+ 0x01F0 => [0x006A, 0x030C], # Case map
2020
+ 0x01F1 => [0x01F3], # Case map
2021
+ 0x01F2 => [0x01F3], # Case map
2022
+ 0x01F4 => [0x01F5], # Case map
2023
+ 0x01F6 => [0x0195], # Case map
2024
+ 0x01F7 => [0x01BF], # Case map
2025
+ 0x01F8 => [0x01F9], # Case map
2026
+ 0x01FA => [0x01FB], # Case map
2027
+ 0x01FC => [0x01FD], # Case map
2028
+ 0x01FE => [0x01FF], # Case map
2029
+ 0x0200 => [0x0201], # Case map
2030
+ 0x0202 => [0x0203], # Case map
2031
+ 0x0204 => [0x0205], # Case map
2032
+ 0x0206 => [0x0207], # Case map
2033
+ 0x0208 => [0x0209], # Case map
2034
+ 0x020A => [0x020B], # Case map
2035
+ 0x020C => [0x020D], # Case map
2036
+ 0x020E => [0x020F], # Case map
2037
+ 0x0210 => [0x0211], # Case map
2038
+ 0x0212 => [0x0213], # Case map
2039
+ 0x0214 => [0x0215], # Case map
2040
+ 0x0216 => [0x0217], # Case map
2041
+ 0x0218 => [0x0219], # Case map
2042
+ 0x021A => [0x021B], # Case map
2043
+ 0x021C => [0x021D], # Case map
2044
+ 0x021E => [0x021F], # Case map
2045
+ 0x0220 => [0x019E], # Case map
2046
+ 0x0222 => [0x0223], # Case map
2047
+ 0x0224 => [0x0225], # Case map
2048
+ 0x0226 => [0x0227], # Case map
2049
+ 0x0228 => [0x0229], # Case map
2050
+ 0x022A => [0x022B], # Case map
2051
+ 0x022C => [0x022D], # Case map
2052
+ 0x022E => [0x022F], # Case map
2053
+ 0x0230 => [0x0231], # Case map
2054
+ 0x0232 => [0x0233], # Case map
2055
+ 0x0345 => [0x03B9], # Case map
2056
+ 0x0386 => [0x03AC], # Case map
2057
+ 0x0388 => [0x03AD], # Case map
2058
+ 0x0389 => [0x03AE], # Case map
2059
+ 0x038A => [0x03AF], # Case map
2060
+ 0x038C => [0x03CC], # Case map
2061
+ 0x038E => [0x03CD], # Case map
2062
+ 0x038F => [0x03CE], # Case map
2063
+ 0x0390 => [0x03B9, 0x0308, 0x0301], # Case map
2064
+ 0x0391 => [0x03B1], # Case map
2065
+ 0x0392 => [0x03B2], # Case map
2066
+ 0x0393 => [0x03B3], # Case map
2067
+ 0x0394 => [0x03B4], # Case map
2068
+ 0x0395 => [0x03B5], # Case map
2069
+ 0x0396 => [0x03B6], # Case map
2070
+ 0x0397 => [0x03B7], # Case map
2071
+ 0x0398 => [0x03B8], # Case map
2072
+ 0x0399 => [0x03B9], # Case map
2073
+ 0x039A => [0x03BA], # Case map
2074
+ 0x039B => [0x03BB], # Case map
2075
+ 0x039C => [0x03BC], # Case map
2076
+ 0x039D => [0x03BD], # Case map
2077
+ 0x039E => [0x03BE], # Case map
2078
+ 0x039F => [0x03BF], # Case map
2079
+ 0x03A0 => [0x03C0], # Case map
2080
+ 0x03A1 => [0x03C1], # Case map
2081
+ 0x03A3 => [0x03C3], # Case map
2082
+ 0x03A4 => [0x03C4], # Case map
2083
+ 0x03A5 => [0x03C5], # Case map
2084
+ 0x03A6 => [0x03C6], # Case map
2085
+ 0x03A7 => [0x03C7], # Case map
2086
+ 0x03A8 => [0x03C8], # Case map
2087
+ 0x03A9 => [0x03C9], # Case map
2088
+ 0x03AA => [0x03CA], # Case map
2089
+ 0x03AB => [0x03CB], # Case map
2090
+ 0x03B0 => [0x03C5, 0x0308, 0x0301], # Case map
2091
+ 0x03C2 => [0x03C3], # Case map
2092
+ 0x03D0 => [0x03B2], # Case map
2093
+ 0x03D1 => [0x03B8], # Case map
2094
+ 0x03D5 => [0x03C6], # Case map
2095
+ 0x03D6 => [0x03C0], # Case map
2096
+ 0x03D8 => [0x03D9], # Case map
2097
+ 0x03DA => [0x03DB], # Case map
2098
+ 0x03DC => [0x03DD], # Case map
2099
+ 0x03DE => [0x03DF], # Case map
2100
+ 0x03E0 => [0x03E1], # Case map
2101
+ 0x03E2 => [0x03E3], # Case map
2102
+ 0x03E4 => [0x03E5], # Case map
2103
+ 0x03E6 => [0x03E7], # Case map
2104
+ 0x03E8 => [0x03E9], # Case map
2105
+ 0x03EA => [0x03EB], # Case map
2106
+ 0x03EC => [0x03ED], # Case map
2107
+ 0x03EE => [0x03EF], # Case map
2108
+ 0x03F0 => [0x03BA], # Case map
2109
+ 0x03F1 => [0x03C1], # Case map
2110
+ 0x03F2 => [0x03C3], # Case map
2111
+ 0x03F4 => [0x03B8], # Case map
2112
+ 0x03F5 => [0x03B5], # Case map
2113
+ 0x0400 => [0x0450], # Case map
2114
+ 0x0401 => [0x0451], # Case map
2115
+ 0x0402 => [0x0452], # Case map
2116
+ 0x0403 => [0x0453], # Case map
2117
+ 0x0404 => [0x0454], # Case map
2118
+ 0x0405 => [0x0455], # Case map
2119
+ 0x0406 => [0x0456], # Case map
2120
+ 0x0407 => [0x0457], # Case map
2121
+ 0x0408 => [0x0458], # Case map
2122
+ 0x0409 => [0x0459], # Case map
2123
+ 0x040A => [0x045A], # Case map
2124
+ 0x040B => [0x045B], # Case map
2125
+ 0x040C => [0x045C], # Case map
2126
+ 0x040D => [0x045D], # Case map
2127
+ 0x040E => [0x045E], # Case map
2128
+ 0x040F => [0x045F], # Case map
2129
+ 0x0410 => [0x0430], # Case map
2130
+ 0x0411 => [0x0431], # Case map
2131
+ 0x0412 => [0x0432], # Case map
2132
+ 0x0413 => [0x0433], # Case map
2133
+ 0x0414 => [0x0434], # Case map
2134
+ 0x0415 => [0x0435], # Case map
2135
+ 0x0416 => [0x0436], # Case map
2136
+ 0x0417 => [0x0437], # Case map
2137
+ 0x0418 => [0x0438], # Case map
2138
+ 0x0419 => [0x0439], # Case map
2139
+ 0x041A => [0x043A], # Case map
2140
+ 0x041B => [0x043B], # Case map
2141
+ 0x041C => [0x043C], # Case map
2142
+ 0x041D => [0x043D], # Case map
2143
+ 0x041E => [0x043E], # Case map
2144
+ 0x041F => [0x043F], # Case map
2145
+ 0x0420 => [0x0440], # Case map
2146
+ 0x0421 => [0x0441], # Case map
2147
+ 0x0422 => [0x0442], # Case map
2148
+ 0x0423 => [0x0443], # Case map
2149
+ 0x0424 => [0x0444], # Case map
2150
+ 0x0425 => [0x0445], # Case map
2151
+ 0x0426 => [0x0446], # Case map
2152
+ 0x0427 => [0x0447], # Case map
2153
+ 0x0428 => [0x0448], # Case map
2154
+ 0x0429 => [0x0449], # Case map
2155
+ 0x042A => [0x044A], # Case map
2156
+ 0x042B => [0x044B], # Case map
2157
+ 0x042C => [0x044C], # Case map
2158
+ 0x042D => [0x044D], # Case map
2159
+ 0x042E => [0x044E], # Case map
2160
+ 0x042F => [0x044F], # Case map
2161
+ 0x0460 => [0x0461], # Case map
2162
+ 0x0462 => [0x0463], # Case map
2163
+ 0x0464 => [0x0465], # Case map
2164
+ 0x0466 => [0x0467], # Case map
2165
+ 0x0468 => [0x0469], # Case map
2166
+ 0x046A => [0x046B], # Case map
2167
+ 0x046C => [0x046D], # Case map
2168
+ 0x046E => [0x046F], # Case map
2169
+ 0x0470 => [0x0471], # Case map
2170
+ 0x0472 => [0x0473], # Case map
2171
+ 0x0474 => [0x0475], # Case map
2172
+ 0x0476 => [0x0477], # Case map
2173
+ 0x0478 => [0x0479], # Case map
2174
+ 0x047A => [0x047B], # Case map
2175
+ 0x047C => [0x047D], # Case map
2176
+ 0x047E => [0x047F], # Case map
2177
+ 0x0480 => [0x0481], # Case map
2178
+ 0x048A => [0x048B], # Case map
2179
+ 0x048C => [0x048D], # Case map
2180
+ 0x048E => [0x048F], # Case map
2181
+ 0x0490 => [0x0491], # Case map
2182
+ 0x0492 => [0x0493], # Case map
2183
+ 0x0494 => [0x0495], # Case map
2184
+ 0x0496 => [0x0497], # Case map
2185
+ 0x0498 => [0x0499], # Case map
2186
+ 0x049A => [0x049B], # Case map
2187
+ 0x049C => [0x049D], # Case map
2188
+ 0x049E => [0x049F], # Case map
2189
+ 0x04A0 => [0x04A1], # Case map
2190
+ 0x04A2 => [0x04A3], # Case map
2191
+ 0x04A4 => [0x04A5], # Case map
2192
+ 0x04A6 => [0x04A7], # Case map
2193
+ 0x04A8 => [0x04A9], # Case map
2194
+ 0x04AA => [0x04AB], # Case map
2195
+ 0x04AC => [0x04AD], # Case map
2196
+ 0x04AE => [0x04AF], # Case map
2197
+ 0x04B0 => [0x04B1], # Case map
2198
+ 0x04B2 => [0x04B3], # Case map
2199
+ 0x04B4 => [0x04B5], # Case map
2200
+ 0x04B6 => [0x04B7], # Case map
2201
+ 0x04B8 => [0x04B9], # Case map
2202
+ 0x04BA => [0x04BB], # Case map
2203
+ 0x04BC => [0x04BD], # Case map
2204
+ 0x04BE => [0x04BF], # Case map
2205
+ 0x04C1 => [0x04C2], # Case map
2206
+ 0x04C3 => [0x04C4], # Case map
2207
+ 0x04C5 => [0x04C6], # Case map
2208
+ 0x04C7 => [0x04C8], # Case map
2209
+ 0x04C9 => [0x04CA], # Case map
2210
+ 0x04CB => [0x04CC], # Case map
2211
+ 0x04CD => [0x04CE], # Case map
2212
+ 0x04D0 => [0x04D1], # Case map
2213
+ 0x04D2 => [0x04D3], # Case map
2214
+ 0x04D4 => [0x04D5], # Case map
2215
+ 0x04D6 => [0x04D7], # Case map
2216
+ 0x04D8 => [0x04D9], # Case map
2217
+ 0x04DA => [0x04DB], # Case map
2218
+ 0x04DC => [0x04DD], # Case map
2219
+ 0x04DE => [0x04DF], # Case map
2220
+ 0x04E0 => [0x04E1], # Case map
2221
+ 0x04E2 => [0x04E3], # Case map
2222
+ 0x04E4 => [0x04E5], # Case map
2223
+ 0x04E6 => [0x04E7], # Case map
2224
+ 0x04E8 => [0x04E9], # Case map
2225
+ 0x04EA => [0x04EB], # Case map
2226
+ 0x04EC => [0x04ED], # Case map
2227
+ 0x04EE => [0x04EF], # Case map
2228
+ 0x04F0 => [0x04F1], # Case map
2229
+ 0x04F2 => [0x04F3], # Case map
2230
+ 0x04F4 => [0x04F5], # Case map
2231
+ 0x04F8 => [0x04F9], # Case map
2232
+ 0x0500 => [0x0501], # Case map
2233
+ 0x0502 => [0x0503], # Case map
2234
+ 0x0504 => [0x0505], # Case map
2235
+ 0x0506 => [0x0507], # Case map
2236
+ 0x0508 => [0x0509], # Case map
2237
+ 0x050A => [0x050B], # Case map
2238
+ 0x050C => [0x050D], # Case map
2239
+ 0x050E => [0x050F], # Case map
2240
+ 0x0531 => [0x0561], # Case map
2241
+ 0x0532 => [0x0562], # Case map
2242
+ 0x0533 => [0x0563], # Case map
2243
+ 0x0534 => [0x0564], # Case map
2244
+ 0x0535 => [0x0565], # Case map
2245
+ 0x0536 => [0x0566], # Case map
2246
+ 0x0537 => [0x0567], # Case map
2247
+ 0x0538 => [0x0568], # Case map
2248
+ 0x0539 => [0x0569], # Case map
2249
+ 0x053A => [0x056A], # Case map
2250
+ 0x053B => [0x056B], # Case map
2251
+ 0x053C => [0x056C], # Case map
2252
+ 0x053D => [0x056D], # Case map
2253
+ 0x053E => [0x056E], # Case map
2254
+ 0x053F => [0x056F], # Case map
2255
+ 0x0540 => [0x0570], # Case map
2256
+ 0x0541 => [0x0571], # Case map
2257
+ 0x0542 => [0x0572], # Case map
2258
+ 0x0543 => [0x0573], # Case map
2259
+ 0x0544 => [0x0574], # Case map
2260
+ 0x0545 => [0x0575], # Case map
2261
+ 0x0546 => [0x0576], # Case map
2262
+ 0x0547 => [0x0577], # Case map
2263
+ 0x0548 => [0x0578], # Case map
2264
+ 0x0549 => [0x0579], # Case map
2265
+ 0x054A => [0x057A], # Case map
2266
+ 0x054B => [0x057B], # Case map
2267
+ 0x054C => [0x057C], # Case map
2268
+ 0x054D => [0x057D], # Case map
2269
+ 0x054E => [0x057E], # Case map
2270
+ 0x054F => [0x057F], # Case map
2271
+ 0x0550 => [0x0580], # Case map
2272
+ 0x0551 => [0x0581], # Case map
2273
+ 0x0552 => [0x0582], # Case map
2274
+ 0x0553 => [0x0583], # Case map
2275
+ 0x0554 => [0x0584], # Case map
2276
+ 0x0555 => [0x0585], # Case map
2277
+ 0x0556 => [0x0586], # Case map
2278
+ 0x0587 => [0x0565, 0x0582], # Case map
2279
+ 0x1E00 => [0x1E01], # Case map
2280
+ 0x1E02 => [0x1E03], # Case map
2281
+ 0x1E04 => [0x1E05], # Case map
2282
+ 0x1E06 => [0x1E07], # Case map
2283
+ 0x1E08 => [0x1E09], # Case map
2284
+ 0x1E0A => [0x1E0B], # Case map
2285
+ 0x1E0C => [0x1E0D], # Case map
2286
+ 0x1E0E => [0x1E0F], # Case map
2287
+ 0x1E10 => [0x1E11], # Case map
2288
+ 0x1E12 => [0x1E13], # Case map
2289
+ 0x1E14 => [0x1E15], # Case map
2290
+ 0x1E16 => [0x1E17], # Case map
2291
+ 0x1E18 => [0x1E19], # Case map
2292
+ 0x1E1A => [0x1E1B], # Case map
2293
+ 0x1E1C => [0x1E1D], # Case map
2294
+ 0x1E1E => [0x1E1F], # Case map
2295
+ 0x1E20 => [0x1E21], # Case map
2296
+ 0x1E22 => [0x1E23], # Case map
2297
+ 0x1E24 => [0x1E25], # Case map
2298
+ 0x1E26 => [0x1E27], # Case map
2299
+ 0x1E28 => [0x1E29], # Case map
2300
+ 0x1E2A => [0x1E2B], # Case map
2301
+ 0x1E2C => [0x1E2D], # Case map
2302
+ 0x1E2E => [0x1E2F], # Case map
2303
+ 0x1E30 => [0x1E31], # Case map
2304
+ 0x1E32 => [0x1E33], # Case map
2305
+ 0x1E34 => [0x1E35], # Case map
2306
+ 0x1E36 => [0x1E37], # Case map
2307
+ 0x1E38 => [0x1E39], # Case map
2308
+ 0x1E3A => [0x1E3B], # Case map
2309
+ 0x1E3C => [0x1E3D], # Case map
2310
+ 0x1E3E => [0x1E3F], # Case map
2311
+ 0x1E40 => [0x1E41], # Case map
2312
+ 0x1E42 => [0x1E43], # Case map
2313
+ 0x1E44 => [0x1E45], # Case map
2314
+ 0x1E46 => [0x1E47], # Case map
2315
+ 0x1E48 => [0x1E49], # Case map
2316
+ 0x1E4A => [0x1E4B], # Case map
2317
+ 0x1E4C => [0x1E4D], # Case map
2318
+ 0x1E4E => [0x1E4F], # Case map
2319
+ 0x1E50 => [0x1E51], # Case map
2320
+ 0x1E52 => [0x1E53], # Case map
2321
+ 0x1E54 => [0x1E55], # Case map
2322
+ 0x1E56 => [0x1E57], # Case map
2323
+ 0x1E58 => [0x1E59], # Case map
2324
+ 0x1E5A => [0x1E5B], # Case map
2325
+ 0x1E5C => [0x1E5D], # Case map
2326
+ 0x1E5E => [0x1E5F], # Case map
2327
+ 0x1E60 => [0x1E61], # Case map
2328
+ 0x1E62 => [0x1E63], # Case map
2329
+ 0x1E64 => [0x1E65], # Case map
2330
+ 0x1E66 => [0x1E67], # Case map
2331
+ 0x1E68 => [0x1E69], # Case map
2332
+ 0x1E6A => [0x1E6B], # Case map
2333
+ 0x1E6C => [0x1E6D], # Case map
2334
+ 0x1E6E => [0x1E6F], # Case map
2335
+ 0x1E70 => [0x1E71], # Case map
2336
+ 0x1E72 => [0x1E73], # Case map
2337
+ 0x1E74 => [0x1E75], # Case map
2338
+ 0x1E76 => [0x1E77], # Case map
2339
+ 0x1E78 => [0x1E79], # Case map
2340
+ 0x1E7A => [0x1E7B], # Case map
2341
+ 0x1E7C => [0x1E7D], # Case map
2342
+ 0x1E7E => [0x1E7F], # Case map
2343
+ 0x1E80 => [0x1E81], # Case map
2344
+ 0x1E82 => [0x1E83], # Case map
2345
+ 0x1E84 => [0x1E85], # Case map
2346
+ 0x1E86 => [0x1E87], # Case map
2347
+ 0x1E88 => [0x1E89], # Case map
2348
+ 0x1E8A => [0x1E8B], # Case map
2349
+ 0x1E8C => [0x1E8D], # Case map
2350
+ 0x1E8E => [0x1E8F], # Case map
2351
+ 0x1E90 => [0x1E91], # Case map
2352
+ 0x1E92 => [0x1E93], # Case map
2353
+ 0x1E94 => [0x1E95], # Case map
2354
+ 0x1E96 => [0x0068, 0x0331], # Case map
2355
+ 0x1E97 => [0x0074, 0x0308], # Case map
2356
+ 0x1E98 => [0x0077, 0x030A], # Case map
2357
+ 0x1E99 => [0x0079, 0x030A], # Case map
2358
+ 0x1E9A => [0x0061, 0x02BE], # Case map
2359
+ 0x1E9B => [0x1E61], # Case map
2360
+ 0x1EA0 => [0x1EA1], # Case map
2361
+ 0x1EA2 => [0x1EA3], # Case map
2362
+ 0x1EA4 => [0x1EA5], # Case map
2363
+ 0x1EA6 => [0x1EA7], # Case map
2364
+ 0x1EA8 => [0x1EA9], # Case map
2365
+ 0x1EAA => [0x1EAB], # Case map
2366
+ 0x1EAC => [0x1EAD], # Case map
2367
+ 0x1EAE => [0x1EAF], # Case map
2368
+ 0x1EB0 => [0x1EB1], # Case map
2369
+ 0x1EB2 => [0x1EB3], # Case map
2370
+ 0x1EB4 => [0x1EB5], # Case map
2371
+ 0x1EB6 => [0x1EB7], # Case map
2372
+ 0x1EB8 => [0x1EB9], # Case map
2373
+ 0x1EBA => [0x1EBB], # Case map
2374
+ 0x1EBC => [0x1EBD], # Case map
2375
+ 0x1EBE => [0x1EBF], # Case map
2376
+ 0x1EC0 => [0x1EC1], # Case map
2377
+ 0x1EC2 => [0x1EC3], # Case map
2378
+ 0x1EC4 => [0x1EC5], # Case map
2379
+ 0x1EC6 => [0x1EC7], # Case map
2380
+ 0x1EC8 => [0x1EC9], # Case map
2381
+ 0x1ECA => [0x1ECB], # Case map
2382
+ 0x1ECC => [0x1ECD], # Case map
2383
+ 0x1ECE => [0x1ECF], # Case map
2384
+ 0x1ED0 => [0x1ED1], # Case map
2385
+ 0x1ED2 => [0x1ED3], # Case map
2386
+ 0x1ED4 => [0x1ED5], # Case map
2387
+ 0x1ED6 => [0x1ED7], # Case map
2388
+ 0x1ED8 => [0x1ED9], # Case map
2389
+ 0x1EDA => [0x1EDB], # Case map
2390
+ 0x1EDC => [0x1EDD], # Case map
2391
+ 0x1EDE => [0x1EDF], # Case map
2392
+ 0x1EE0 => [0x1EE1], # Case map
2393
+ 0x1EE2 => [0x1EE3], # Case map
2394
+ 0x1EE4 => [0x1EE5], # Case map
2395
+ 0x1EE6 => [0x1EE7], # Case map
2396
+ 0x1EE8 => [0x1EE9], # Case map
2397
+ 0x1EEA => [0x1EEB], # Case map
2398
+ 0x1EEC => [0x1EED], # Case map
2399
+ 0x1EEE => [0x1EEF], # Case map
2400
+ 0x1EF0 => [0x1EF1], # Case map
2401
+ 0x1EF2 => [0x1EF3], # Case map
2402
+ 0x1EF4 => [0x1EF5], # Case map
2403
+ 0x1EF6 => [0x1EF7], # Case map
2404
+ 0x1EF8 => [0x1EF9], # Case map
2405
+ 0x1F08 => [0x1F00], # Case map
2406
+ 0x1F09 => [0x1F01], # Case map
2407
+ 0x1F0A => [0x1F02], # Case map
2408
+ 0x1F0B => [0x1F03], # Case map
2409
+ 0x1F0C => [0x1F04], # Case map
2410
+ 0x1F0D => [0x1F05], # Case map
2411
+ 0x1F0E => [0x1F06], # Case map
2412
+ 0x1F0F => [0x1F07], # Case map
2413
+ 0x1F18 => [0x1F10], # Case map
2414
+ 0x1F19 => [0x1F11], # Case map
2415
+ 0x1F1A => [0x1F12], # Case map
2416
+ 0x1F1B => [0x1F13], # Case map
2417
+ 0x1F1C => [0x1F14], # Case map
2418
+ 0x1F1D => [0x1F15], # Case map
2419
+ 0x1F28 => [0x1F20], # Case map
2420
+ 0x1F29 => [0x1F21], # Case map
2421
+ 0x1F2A => [0x1F22], # Case map
2422
+ 0x1F2B => [0x1F23], # Case map
2423
+ 0x1F2C => [0x1F24], # Case map
2424
+ 0x1F2D => [0x1F25], # Case map
2425
+ 0x1F2E => [0x1F26], # Case map
2426
+ 0x1F2F => [0x1F27], # Case map
2427
+ 0x1F38 => [0x1F30], # Case map
2428
+ 0x1F39 => [0x1F31], # Case map
2429
+ 0x1F3A => [0x1F32], # Case map
2430
+ 0x1F3B => [0x1F33], # Case map
2431
+ 0x1F3C => [0x1F34], # Case map
2432
+ 0x1F3D => [0x1F35], # Case map
2433
+ 0x1F3E => [0x1F36], # Case map
2434
+ 0x1F3F => [0x1F37], # Case map
2435
+ 0x1F48 => [0x1F40], # Case map
2436
+ 0x1F49 => [0x1F41], # Case map
2437
+ 0x1F4A => [0x1F42], # Case map
2438
+ 0x1F4B => [0x1F43], # Case map
2439
+ 0x1F4C => [0x1F44], # Case map
2440
+ 0x1F4D => [0x1F45], # Case map
2441
+ 0x1F50 => [0x03C5, 0x0313], # Case map
2442
+ 0x1F52 => [0x03C5, 0x0313, 0x0300], # Case map
2443
+ 0x1F54 => [0x03C5, 0x0313, 0x0301], # Case map
2444
+ 0x1F56 => [0x03C5, 0x0313, 0x0342], # Case map
2445
+ 0x1F59 => [0x1F51], # Case map
2446
+ 0x1F5B => [0x1F53], # Case map
2447
+ 0x1F5D => [0x1F55], # Case map
2448
+ 0x1F5F => [0x1F57], # Case map
2449
+ 0x1F68 => [0x1F60], # Case map
2450
+ 0x1F69 => [0x1F61], # Case map
2451
+ 0x1F6A => [0x1F62], # Case map
2452
+ 0x1F6B => [0x1F63], # Case map
2453
+ 0x1F6C => [0x1F64], # Case map
2454
+ 0x1F6D => [0x1F65], # Case map
2455
+ 0x1F6E => [0x1F66], # Case map
2456
+ 0x1F6F => [0x1F67], # Case map
2457
+ 0x1F80 => [0x1F00, 0x03B9], # Case map
2458
+ 0x1F81 => [0x1F01, 0x03B9], # Case map
2459
+ 0x1F82 => [0x1F02, 0x03B9], # Case map
2460
+ 0x1F83 => [0x1F03, 0x03B9], # Case map
2461
+ 0x1F84 => [0x1F04, 0x03B9], # Case map
2462
+ 0x1F85 => [0x1F05, 0x03B9], # Case map
2463
+ 0x1F86 => [0x1F06, 0x03B9], # Case map
2464
+ 0x1F87 => [0x1F07, 0x03B9], # Case map
2465
+ 0x1F88 => [0x1F00, 0x03B9], # Case map
2466
+ 0x1F89 => [0x1F01, 0x03B9], # Case map
2467
+ 0x1F8A => [0x1F02, 0x03B9], # Case map
2468
+ 0x1F8B => [0x1F03, 0x03B9], # Case map
2469
+ 0x1F8C => [0x1F04, 0x03B9], # Case map
2470
+ 0x1F8D => [0x1F05, 0x03B9], # Case map
2471
+ 0x1F8E => [0x1F06, 0x03B9], # Case map
2472
+ 0x1F8F => [0x1F07, 0x03B9], # Case map
2473
+ 0x1F90 => [0x1F20, 0x03B9], # Case map
2474
+ 0x1F91 => [0x1F21, 0x03B9], # Case map
2475
+ 0x1F92 => [0x1F22, 0x03B9], # Case map
2476
+ 0x1F93 => [0x1F23, 0x03B9], # Case map
2477
+ 0x1F94 => [0x1F24, 0x03B9], # Case map
2478
+ 0x1F95 => [0x1F25, 0x03B9], # Case map
2479
+ 0x1F96 => [0x1F26, 0x03B9], # Case map
2480
+ 0x1F97 => [0x1F27, 0x03B9], # Case map
2481
+ 0x1F98 => [0x1F20, 0x03B9], # Case map
2482
+ 0x1F99 => [0x1F21, 0x03B9], # Case map
2483
+ 0x1F9A => [0x1F22, 0x03B9], # Case map
2484
+ 0x1F9B => [0x1F23, 0x03B9], # Case map
2485
+ 0x1F9C => [0x1F24, 0x03B9], # Case map
2486
+ 0x1F9D => [0x1F25, 0x03B9], # Case map
2487
+ 0x1F9E => [0x1F26, 0x03B9], # Case map
2488
+ 0x1F9F => [0x1F27, 0x03B9], # Case map
2489
+ 0x1FA0 => [0x1F60, 0x03B9], # Case map
2490
+ 0x1FA1 => [0x1F61, 0x03B9], # Case map
2491
+ 0x1FA2 => [0x1F62, 0x03B9], # Case map
2492
+ 0x1FA3 => [0x1F63, 0x03B9], # Case map
2493
+ 0x1FA4 => [0x1F64, 0x03B9], # Case map
2494
+ 0x1FA5 => [0x1F65, 0x03B9], # Case map
2495
+ 0x1FA6 => [0x1F66, 0x03B9], # Case map
2496
+ 0x1FA7 => [0x1F67, 0x03B9], # Case map
2497
+ 0x1FA8 => [0x1F60, 0x03B9], # Case map
2498
+ 0x1FA9 => [0x1F61, 0x03B9], # Case map
2499
+ 0x1FAA => [0x1F62, 0x03B9], # Case map
2500
+ 0x1FAB => [0x1F63, 0x03B9], # Case map
2501
+ 0x1FAC => [0x1F64, 0x03B9], # Case map
2502
+ 0x1FAD => [0x1F65, 0x03B9], # Case map
2503
+ 0x1FAE => [0x1F66, 0x03B9], # Case map
2504
+ 0x1FAF => [0x1F67, 0x03B9], # Case map
2505
+ 0x1FB2 => [0x1F70, 0x03B9], # Case map
2506
+ 0x1FB3 => [0x03B1, 0x03B9], # Case map
2507
+ 0x1FB4 => [0x03AC, 0x03B9], # Case map
2508
+ 0x1FB6 => [0x03B1, 0x0342], # Case map
2509
+ 0x1FB7 => [0x03B1, 0x0342, 0x03B9], # Case map
2510
+ 0x1FB8 => [0x1FB0], # Case map
2511
+ 0x1FB9 => [0x1FB1], # Case map
2512
+ 0x1FBA => [0x1F70], # Case map
2513
+ 0x1FBB => [0x1F71], # Case map
2514
+ 0x1FBC => [0x03B1, 0x03B9], # Case map
2515
+ 0x1FBE => [0x03B9], # Case map
2516
+ 0x1FC2 => [0x1F74, 0x03B9], # Case map
2517
+ 0x1FC3 => [0x03B7, 0x03B9], # Case map
2518
+ 0x1FC4 => [0x03AE, 0x03B9], # Case map
2519
+ 0x1FC6 => [0x03B7, 0x0342], # Case map
2520
+ 0x1FC7 => [0x03B7, 0x0342, 0x03B9], # Case map
2521
+ 0x1FC8 => [0x1F72], # Case map
2522
+ 0x1FC9 => [0x1F73], # Case map
2523
+ 0x1FCA => [0x1F74], # Case map
2524
+ 0x1FCB => [0x1F75], # Case map
2525
+ 0x1FCC => [0x03B7, 0x03B9], # Case map
2526
+ 0x1FD2 => [0x03B9, 0x0308, 0x0300], # Case map
2527
+ 0x1FD3 => [0x03B9, 0x0308, 0x0301], # Case map
2528
+ 0x1FD6 => [0x03B9, 0x0342], # Case map
2529
+ 0x1FD7 => [0x03B9, 0x0308, 0x0342], # Case map
2530
+ 0x1FD8 => [0x1FD0], # Case map
2531
+ 0x1FD9 => [0x1FD1], # Case map
2532
+ 0x1FDA => [0x1F76], # Case map
2533
+ 0x1FDB => [0x1F77], # Case map
2534
+ 0x1FE2 => [0x03C5, 0x0308, 0x0300], # Case map
2535
+ 0x1FE3 => [0x03C5, 0x0308, 0x0301], # Case map
2536
+ 0x1FE4 => [0x03C1, 0x0313], # Case map
2537
+ 0x1FE6 => [0x03C5, 0x0342], # Case map
2538
+ 0x1FE7 => [0x03C5, 0x0308, 0x0342], # Case map
2539
+ 0x1FE8 => [0x1FE0], # Case map
2540
+ 0x1FE9 => [0x1FE1], # Case map
2541
+ 0x1FEA => [0x1F7A], # Case map
2542
+ 0x1FEB => [0x1F7B], # Case map
2543
+ 0x1FEC => [0x1FE5], # Case map
2544
+ 0x1FF2 => [0x1F7C, 0x03B9], # Case map
2545
+ 0x1FF3 => [0x03C9, 0x03B9], # Case map
2546
+ 0x1FF4 => [0x03CE, 0x03B9], # Case map
2547
+ 0x1FF6 => [0x03C9, 0x0342], # Case map
2548
+ 0x1FF7 => [0x03C9, 0x0342, 0x03B9], # Case map
2549
+ 0x1FF8 => [0x1F78], # Case map
2550
+ 0x1FF9 => [0x1F79], # Case map
2551
+ 0x1FFA => [0x1F7C], # Case map
2552
+ 0x1FFB => [0x1F7D], # Case map
2553
+ 0x1FFC => [0x03C9, 0x03B9], # Case map
2554
+ 0x2126 => [0x03C9], # Case map
2555
+ 0x212A => [0x006B], # Case map
2556
+ 0x212B => [0x00E5], # Case map
2557
+ 0x2160 => [0x2170], # Case map
2558
+ 0x2161 => [0x2171], # Case map
2559
+ 0x2162 => [0x2172], # Case map
2560
+ 0x2163 => [0x2173], # Case map
2561
+ 0x2164 => [0x2174], # Case map
2562
+ 0x2165 => [0x2175], # Case map
2563
+ 0x2166 => [0x2176], # Case map
2564
+ 0x2167 => [0x2177], # Case map
2565
+ 0x2168 => [0x2178], # Case map
2566
+ 0x2169 => [0x2179], # Case map
2567
+ 0x216A => [0x217A], # Case map
2568
+ 0x216B => [0x217B], # Case map
2569
+ 0x216C => [0x217C], # Case map
2570
+ 0x216D => [0x217D], # Case map
2571
+ 0x216E => [0x217E], # Case map
2572
+ 0x216F => [0x217F], # Case map
2573
+ 0x24B6 => [0x24D0], # Case map
2574
+ 0x24B7 => [0x24D1], # Case map
2575
+ 0x24B8 => [0x24D2], # Case map
2576
+ 0x24B9 => [0x24D3], # Case map
2577
+ 0x24BA => [0x24D4], # Case map
2578
+ 0x24BB => [0x24D5], # Case map
2579
+ 0x24BC => [0x24D6], # Case map
2580
+ 0x24BD => [0x24D7], # Case map
2581
+ 0x24BE => [0x24D8], # Case map
2582
+ 0x24BF => [0x24D9], # Case map
2583
+ 0x24C0 => [0x24DA], # Case map
2584
+ 0x24C1 => [0x24DB], # Case map
2585
+ 0x24C2 => [0x24DC], # Case map
2586
+ 0x24C3 => [0x24DD], # Case map
2587
+ 0x24C4 => [0x24DE], # Case map
2588
+ 0x24C5 => [0x24DF], # Case map
2589
+ 0x24C6 => [0x24E0], # Case map
2590
+ 0x24C7 => [0x24E1], # Case map
2591
+ 0x24C8 => [0x24E2], # Case map
2592
+ 0x24C9 => [0x24E3], # Case map
2593
+ 0x24CA => [0x24E4], # Case map
2594
+ 0x24CB => [0x24E5], # Case map
2595
+ 0x24CC => [0x24E6], # Case map
2596
+ 0x24CD => [0x24E7], # Case map
2597
+ 0x24CE => [0x24E8], # Case map
2598
+ 0x24CF => [0x24E9], # Case map
2599
+ 0xFB00 => [0x0066, 0x0066], # Case map
2600
+ 0xFB01 => [0x0066, 0x0069], # Case map
2601
+ 0xFB02 => [0x0066, 0x006C], # Case map
2602
+ 0xFB03 => [0x0066, 0x0066, 0x0069], # Case map
2603
+ 0xFB04 => [0x0066, 0x0066, 0x006C], # Case map
2604
+ 0xFB05 => [0x0073, 0x0074], # Case map
2605
+ 0xFB06 => [0x0073, 0x0074], # Case map
2606
+ 0xFB13 => [0x0574, 0x0576], # Case map
2607
+ 0xFB14 => [0x0574, 0x0565], # Case map
2608
+ 0xFB15 => [0x0574, 0x056B], # Case map
2609
+ 0xFB16 => [0x057E, 0x0576], # Case map
2610
+ 0xFB17 => [0x0574, 0x056D], # Case map
2611
+ 0xFF21 => [0xFF41], # Case map
2612
+ 0xFF22 => [0xFF42], # Case map
2613
+ 0xFF23 => [0xFF43], # Case map
2614
+ 0xFF24 => [0xFF44], # Case map
2615
+ 0xFF25 => [0xFF45], # Case map
2616
+ 0xFF26 => [0xFF46], # Case map
2617
+ 0xFF27 => [0xFF47], # Case map
2618
+ 0xFF28 => [0xFF48], # Case map
2619
+ 0xFF29 => [0xFF49], # Case map
2620
+ 0xFF2A => [0xFF4A], # Case map
2621
+ 0xFF2B => [0xFF4B], # Case map
2622
+ 0xFF2C => [0xFF4C], # Case map
2623
+ 0xFF2D => [0xFF4D], # Case map
2624
+ 0xFF2E => [0xFF4E], # Case map
2625
+ 0xFF2F => [0xFF4F], # Case map
2626
+ 0xFF30 => [0xFF50], # Case map
2627
+ 0xFF31 => [0xFF51], # Case map
2628
+ 0xFF32 => [0xFF52], # Case map
2629
+ 0xFF33 => [0xFF53], # Case map
2630
+ 0xFF34 => [0xFF54], # Case map
2631
+ 0xFF35 => [0xFF55], # Case map
2632
+ 0xFF36 => [0xFF56], # Case map
2633
+ 0xFF37 => [0xFF57], # Case map
2634
+ 0xFF38 => [0xFF58], # Case map
2635
+ 0xFF39 => [0xFF59], # Case map
2636
+ 0xFF3A => [0xFF5A], # Case map
2637
+ 0x10400 => [0x10428], # Case map
2638
+ 0x10401 => [0x10429], # Case map
2639
+ 0x10402 => [0x1042A], # Case map
2640
+ 0x10403 => [0x1042B], # Case map
2641
+ 0x10404 => [0x1042C], # Case map
2642
+ 0x10405 => [0x1042D], # Case map
2643
+ 0x10406 => [0x1042E], # Case map
2644
+ 0x10407 => [0x1042F], # Case map
2645
+ 0x10408 => [0x10430], # Case map
2646
+ 0x10409 => [0x10431], # Case map
2647
+ 0x1040A => [0x10432], # Case map
2648
+ 0x1040B => [0x10433], # Case map
2649
+ 0x1040C => [0x10434], # Case map
2650
+ 0x1040D => [0x10435], # Case map
2651
+ 0x1040E => [0x10436], # Case map
2652
+ 0x1040F => [0x10437], # Case map
2653
+ 0x10410 => [0x10438], # Case map
2654
+ 0x10411 => [0x10439], # Case map
2655
+ 0x10412 => [0x1043A], # Case map
2656
+ 0x10413 => [0x1043B], # Case map
2657
+ 0x10414 => [0x1043C], # Case map
2658
+ 0x10415 => [0x1043D], # Case map
2659
+ 0x10416 => [0x1043E], # Case map
2660
+ 0x10417 => [0x1043F], # Case map
2661
+ 0x10418 => [0x10440], # Case map
2662
+ 0x10419 => [0x10441], # Case map
2663
+ 0x1041A => [0x10442], # Case map
2664
+ 0x1041B => [0x10443], # Case map
2665
+ 0x1041C => [0x10444], # Case map
2666
+ 0x1041D => [0x10445], # Case map
2667
+ 0x1041E => [0x10446], # Case map
2668
+ 0x1041F => [0x10447], # Case map
2669
+ 0x10420 => [0x10448], # Case map
2670
+ 0x10421 => [0x10449], # Case map
2671
+ 0x10422 => [0x1044A], # Case map
2672
+ 0x10423 => [0x1044B], # Case map
2673
+ 0x10424 => [0x1044C], # Case map
2674
+ 0x10425 => [0x1044D], # Case map
2675
+ }.freeze
2676
+
2677
+ # Table C1.1 as defined by RFC 3454 (string preparation).
2678
+ #
2679
+ # @since 2.6.0
2680
+ C1_1 = [
2681
+ 0x0020..0x0020, # SPACE
2682
+ ]
2683
+
2684
+ # Table C1.2 as defined by RFC 3454 (string preparation).
2685
+ #
2686
+ # @since 2.6.0
2687
+ C1_2 = [
2688
+ 0x00A0..0x00A0, # NO-BREAK SPACE
2689
+ 0x1680..0x1680, # OGHAM SPACE MARK
2690
+ 0x2000..0x2000, # EN QUAD
2691
+ 0x2001..0x2001, # EM QUAD
2692
+ 0x2002..0x2002, # EN SPACE
2693
+ 0x2003..0x2003, # EM SPACE
2694
+ 0x2004..0x2004, # THREE-PER-EM SPACE
2695
+ 0x2005..0x2005, # FOUR-PER-EM SPACE
2696
+ 0x2006..0x2006, # SIX-PER-EM SPACE
2697
+ 0x2007..0x2007, # FIGURE SPACE
2698
+ 0x2008..0x2008, # PUNCTUATION SPACE
2699
+ 0x2009..0x2009, # THIN SPACE
2700
+ 0x200A..0x200A, # HAIR SPACE
2701
+ 0x200B..0x200B, # ZERO WIDTH SPACE
2702
+ 0x202F..0x202F, # NARROW NO-BREAK SPACE
2703
+ 0x205F..0x205F, # MEDIUM MATHEMATICAL SPACE
2704
+ 0x3000..0x3000, # IDEOGRAPHIC SPACE
2705
+ ].freeze
2706
+
2707
+ # Table C2.1 as defined by RFC 3454 (string preparation).
2708
+ #
2709
+ # @since 2.6.0
2710
+ C2_1 = [
2711
+ 0x0000..0x001F, # [CONTROL CHARACTERS]
2712
+ 0x007F..0x007F, # DELETE
2713
+ ].freeze
2714
+
2715
+ # Table C2.2 as defined by RFC 3454 (string preparation).
2716
+ #
2717
+ # @since 2.6.0
2718
+ C2_2 = [
2719
+ 0x0080..0x009F, # [CONTROL CHARACTERS]
2720
+ 0x06DD..0x06DD, # ARABIC END OF AYAH
2721
+ 0x070F..0x070F, # SYRIAC ABBREVIATION MARK
2722
+ 0x180E..0x180E, # MONGOLIAN VOWEL SEPARATOR
2723
+ 0x200C..0x200C, # ZERO WIDTH NON-JOINER
2724
+ 0x200D..0x200D, # ZERO WIDTH JOINER
2725
+ 0x2028..0x2028, # LINE SEPARATOR
2726
+ 0x2029..0x2029, # PARAGRAPH SEPARATOR
2727
+ 0x2060..0x2060, # WORD JOINER
2728
+ 0x2061..0x2061, # FUNCTION APPLICATION
2729
+ 0x2062..0x2062, # INVISIBLE TIMES
2730
+ 0x2063..0x2063, # INVISIBLE SEPARATOR
2731
+ 0x206A..0x206F, # [CONTROL CHARACTERS]
2732
+ 0xFEFF..0xFEFF, # ZERO WIDTH NO-BREAK SPACE
2733
+ 0xFFF9..0xFFFC, # [CONTROL CHARACTERS]
2734
+ 0x1D173..0x1D17A, # [MUSICAL CONTROL CHARACTERS]
2735
+ ].freeze
2736
+
2737
+ # Table C3 as defined by RFC 3454 (string preparation).
2738
+ #
2739
+ # @since 2.6.0
2740
+ C3 = [
2741
+ 0xE000..0xF8FF, # [PRIVATE USE, PLANE 0]
2742
+ 0xF0000..0xFFFFD, # [PRIVATE USE, PLANE 15]
2743
+ 0x100000..0x10FFFD, # [PRIVATE USE, PLANE 16]
2744
+ ].freeze
2745
+
2746
+ # Table C4 as defined by RFC 3454 (string preparation).
2747
+ #
2748
+ # @since 2.6.0
2749
+ C4 = [
2750
+ 0xFDD0..0xFDEF, # [NONCHARACTER CODE POINTS]
2751
+ 0xFFFE..0xFFFF, # [NONCHARACTER CODE POINTS]
2752
+ 0x1FFFE..0x1FFFF, # [NONCHARACTER CODE POINTS]
2753
+ 0x2FFFE..0x2FFFF, # [NONCHARACTER CODE POINTS]
2754
+ 0x3FFFE..0x3FFFF, # [NONCHARACTER CODE POINTS]
2755
+ 0x4FFFE..0x4FFFF, # [NONCHARACTER CODE POINTS]
2756
+ 0x5FFFE..0x5FFFF, # [NONCHARACTER CODE POINTS]
2757
+ 0x6FFFE..0x6FFFF, # [NONCHARACTER CODE POINTS]
2758
+ 0x7FFFE..0x7FFFF, # [NONCHARACTER CODE POINTS]
2759
+ 0x8FFFE..0x8FFFF, # [NONCHARACTER CODE POINTS]
2760
+ 0x9FFFE..0x9FFFF, # [NONCHARACTER CODE POINTS]
2761
+ 0xAFFFE..0xAFFFF, # [NONCHARACTER CODE POINTS]
2762
+ 0xBFFFE..0xBFFFF, # [NONCHARACTER CODE POINTS]
2763
+ 0xCFFFE..0xCFFFF, # [NONCHARACTER CODE POINTS]
2764
+ 0xDFFFE..0xDFFFF, # [NONCHARACTER CODE POINTS]
2765
+ 0xEFFFE..0xEFFFF, # [NONCHARACTER CODE POINTS]
2766
+ 0xFFFFE..0xFFFFF, # [NONCHARACTER CODE POINTS]
2767
+ 0x10FFFE..0x10FFFF, # [NONCHARACTER CODE POINTS]
2768
+ ].freeze
2769
+
2770
+ # Table C5 as defined by RFC 3454 (string preparation).
2771
+ #
2772
+ # @since 2.6.0
2773
+ C5 = [
2774
+ 0xD800..0xDFFF, # [SURROGATE CODES]
2775
+ ].freeze
2776
+
2777
+ # Table C6 as defined by RFC 3454 (string preparation).
2778
+ #
2779
+ # @since 2.6.0
2780
+ C6 = [
2781
+ 0xFFF9..0xFFF9, # INTERLINEAR ANNOTATION ANCHOR
2782
+ 0xFFFA..0xFFFA, # INTERLINEAR ANNOTATION SEPARATOR
2783
+ 0xFFFB..0xFFFB, # INTERLINEAR ANNOTATION TERMINATOR
2784
+ 0xFFFC..0xFFFC, # OBJECT REPLACEMENT CHARACTER
2785
+ 0xFFFD..0xFFFD, # REPLACEMENT CHARACTER
2786
+ ].freeze
2787
+
2788
+ # Table C7 as defined by RFC 3454 (string preparation).
2789
+ #
2790
+ # @since 2.6.0
2791
+ C7 = [
2792
+ 0x2FF0..0x2FFB, # [IDEOGRAPHIC DESCRIPTION CHARACTERS]
2793
+ ].freeze
2794
+
2795
+ # Table C8 as defined by RFC 3454 (string preparation).
2796
+ #
2797
+ # @since 2.6.0
2798
+ C8 = [
2799
+ 0x0340..0x0340, # COMBINING GRAVE TONE MARK
2800
+ 0x0341..0x0341, # COMBINING ACUTE TONE MARK
2801
+ 0x200E..0x200E, # LEFT-TO-RIGHT MARK
2802
+ 0x200F..0x200F, # RIGHT-TO-LEFT MARK
2803
+ 0x202A..0x202A, # LEFT-TO-RIGHT EMBEDDING
2804
+ 0x202B..0x202B, # RIGHT-TO-LEFT EMBEDDING
2805
+ 0x202C..0x202C, # POP DIRECTIONAL FORMATTING
2806
+ 0x202D..0x202D, # LEFT-TO-RIGHT OVERRIDE
2807
+ 0x202E..0x202E, # RIGHT-TO-LEFT OVERRIDE
2808
+ 0x206A..0x206A, # INHIBIT SYMMETRIC SWAPPING
2809
+ 0x206B..0x206B, # ACTIVATE SYMMETRIC SWAPPING
2810
+ 0x206C..0x206C, # INHIBIT ARABIC FORM SHAPING
2811
+ 0x206D..0x206D, # ACTIVATE ARABIC FORM SHAPING
2812
+ 0x206E..0x206E, # NATIONAL DIGIT SHAPES
2813
+ 0x206F..0x206F, # NOMINAL DIGIT SHAPES
2814
+ ].freeze
2815
+
2816
+ # Table C9 as defined by RFC 3454 (string preparation).
2817
+ #
2818
+ # @since 2.6.0
2819
+ C9 = [
2820
+ 0xE0001..0xE0001, # LANGUAGE TAG
2821
+ 0xE0020..0xE007F, # [TAGGING CHARACTERS]
2822
+ ].freeze
2823
+
2824
+ # Table D1 as defined by RFC 3454 (string preparation).
2825
+ #
2826
+ # @since 2.6.0
2827
+ D1 = [
2828
+ 0x05BE..0x05BE,
2829
+ 0x05C0..0x05C0,
2830
+ 0x05C3..0x05C3,
2831
+ 0x05D0..0x05EA,
2832
+ 0x05F0..0x05F4,
2833
+ 0x061B..0x061B,
2834
+ 0x061F..0x061F,
2835
+ 0x0621..0x063A,
2836
+ 0x0640..0x064A,
2837
+ 0x066D..0x066F,
2838
+ 0x0671..0x06D5,
2839
+ 0x06DD..0x06DD,
2840
+ 0x06E5..0x06E6,
2841
+ 0x06FA..0x06FE,
2842
+ 0x0700..0x070D,
2843
+ 0x0710..0x0710,
2844
+ 0x0712..0x072C,
2845
+ 0x0780..0x07A5,
2846
+ 0x07B1..0x07B1,
2847
+ 0x200F..0x200F,
2848
+ 0xFB1D..0xFB1D,
2849
+ 0xFB1F..0xFB28,
2850
+ 0xFB2A..0xFB36,
2851
+ 0xFB38..0xFB3C,
2852
+ 0xFB3E..0xFB3E,
2853
+ 0xFB40..0xFB41,
2854
+ 0xFB43..0xFB44,
2855
+ 0xFB46..0xFBB1,
2856
+ 0xFBD3..0xFD3D,
2857
+ 0xFD50..0xFD8F,
2858
+ 0xFD92..0xFDC7,
2859
+ 0xFDF0..0xFDFC,
2860
+ 0xFE70..0xFE74,
2861
+ 0xFE76..0xFEFC,
2862
+ ].freeze
2863
+
2864
+ # Table D2 as defined by RFC 3454 (string preparation).
2865
+ #
2866
+ # @since 2.6.0
2867
+ D2 = [
2868
+ 0x0041..0x005A,
2869
+ 0x0061..0x007A,
2870
+ 0x00AA..0x00AA,
2871
+ 0x00B5..0x00B5,
2872
+ 0x00BA..0x00BA,
2873
+ 0x00C0..0x00D6,
2874
+ 0x00D8..0x00F6,
2875
+ 0x00F8..0x0220,
2876
+ 0x0222..0x0233,
2877
+ 0x0250..0x02AD,
2878
+ 0x02B0..0x02B8,
2879
+ 0x02BB..0x02C1,
2880
+ 0x02D0..0x02D1,
2881
+ 0x02E0..0x02E4,
2882
+ 0x02EE..0x02EE,
2883
+ 0x037A..0x037A,
2884
+ 0x0386..0x0386,
2885
+ 0x0388..0x038A,
2886
+ 0x038C..0x038C,
2887
+ 0x038E..0x03A1,
2888
+ 0x03A3..0x03CE,
2889
+ 0x03D0..0x03F5,
2890
+ 0x0400..0x0482,
2891
+ 0x048A..0x04CE,
2892
+ 0x04D0..0x04F5,
2893
+ 0x04F8..0x04F9,
2894
+ 0x0500..0x050F,
2895
+ 0x0531..0x0556,
2896
+ 0x0559..0x055F,
2897
+ 0x0561..0x0587,
2898
+ 0x0589..0x0589,
2899
+ 0x0903..0x0903,
2900
+ 0x0905..0x0939,
2901
+ 0x093D..0x0940,
2902
+ 0x0949..0x094C,
2903
+ 0x0950..0x0950,
2904
+ 0x0958..0x0961,
2905
+ 0x0964..0x0970,
2906
+ 0x0982..0x0983,
2907
+ 0x0985..0x098C,
2908
+ 0x098F..0x0990,
2909
+ 0x0993..0x09A8,
2910
+ 0x09AA..0x09B0,
2911
+ 0x09B2..0x09B2,
2912
+ 0x09B6..0x09B9,
2913
+ 0x09BE..0x09C0,
2914
+ 0x09C7..0x09C8,
2915
+ 0x09CB..0x09CC,
2916
+ 0x09D7..0x09D7,
2917
+ 0x09DC..0x09DD,
2918
+ 0x09DF..0x09E1,
2919
+ 0x09E6..0x09F1,
2920
+ 0x09F4..0x09FA,
2921
+ 0x0A05..0x0A0A,
2922
+ 0x0A0F..0x0A10,
2923
+ 0x0A13..0x0A28,
2924
+ 0x0A2A..0x0A30,
2925
+ 0x0A32..0x0A33,
2926
+ 0x0A35..0x0A36,
2927
+ 0x0A38..0x0A39,
2928
+ 0x0A3E..0x0A40,
2929
+ 0x0A59..0x0A5C,
2930
+ 0x0A5E..0x0A5E,
2931
+ 0x0A66..0x0A6F,
2932
+ 0x0A72..0x0A74,
2933
+ 0x0A83..0x0A83,
2934
+ 0x0A85..0x0A8B,
2935
+ 0x0A8D..0x0A8D,
2936
+ 0x0A8F..0x0A91,
2937
+ 0x0A93..0x0AA8,
2938
+ 0x0AAA..0x0AB0,
2939
+ 0x0AB2..0x0AB3,
2940
+ 0x0AB5..0x0AB9,
2941
+ 0x0ABD..0x0AC0,
2942
+ 0x0AC9..0x0AC9,
2943
+ 0x0ACB..0x0ACC,
2944
+ 0x0AD0..0x0AD0,
2945
+ 0x0AE0..0x0AE0,
2946
+ 0x0AE6..0x0AEF,
2947
+ 0x0B02..0x0B03,
2948
+ 0x0B05..0x0B0C,
2949
+ 0x0B0F..0x0B10,
2950
+ 0x0B13..0x0B28,
2951
+ 0x0B2A..0x0B30,
2952
+ 0x0B32..0x0B33,
2953
+ 0x0B36..0x0B39,
2954
+ 0x0B3D..0x0B3E,
2955
+ 0x0B40..0x0B40,
2956
+ 0x0B47..0x0B48,
2957
+ 0x0B4B..0x0B4C,
2958
+ 0x0B57..0x0B57,
2959
+ 0x0B5C..0x0B5D,
2960
+ 0x0B5F..0x0B61,
2961
+ 0x0B66..0x0B70,
2962
+ 0x0B83..0x0B83,
2963
+ 0x0B85..0x0B8A,
2964
+ 0x0B8E..0x0B90,
2965
+ 0x0B92..0x0B95,
2966
+ 0x0B99..0x0B9A,
2967
+ 0x0B9C..0x0B9C,
2968
+ 0x0B9E..0x0B9F,
2969
+ 0x0BA3..0x0BA4,
2970
+ 0x0BA8..0x0BAA,
2971
+ 0x0BAE..0x0BB5,
2972
+ 0x0BB7..0x0BB9,
2973
+ 0x0BBE..0x0BBF,
2974
+ 0x0BC1..0x0BC2,
2975
+ 0x0BC6..0x0BC8,
2976
+ 0x0BCA..0x0BCC,
2977
+ 0x0BD7..0x0BD7,
2978
+ 0x0BE7..0x0BF2,
2979
+ 0x0C01..0x0C03,
2980
+ 0x0C05..0x0C0C,
2981
+ 0x0C0E..0x0C10,
2982
+ 0x0C12..0x0C28,
2983
+ 0x0C2A..0x0C33,
2984
+ 0x0C35..0x0C39,
2985
+ 0x0C41..0x0C44,
2986
+ 0x0C60..0x0C61,
2987
+ 0x0C66..0x0C6F,
2988
+ 0x0C82..0x0C83,
2989
+ 0x0C85..0x0C8C,
2990
+ 0x0C8E..0x0C90,
2991
+ 0x0C92..0x0CA8,
2992
+ 0x0CAA..0x0CB3,
2993
+ 0x0CB5..0x0CB9,
2994
+ 0x0CBE..0x0CBE,
2995
+ 0x0CC0..0x0CC4,
2996
+ 0x0CC7..0x0CC8,
2997
+ 0x0CCA..0x0CCB,
2998
+ 0x0CD5..0x0CD6,
2999
+ 0x0CDE..0x0CDE,
3000
+ 0x0CE0..0x0CE1,
3001
+ 0x0CE6..0x0CEF,
3002
+ 0x0D02..0x0D03,
3003
+ 0x0D05..0x0D0C,
3004
+ 0x0D0E..0x0D10,
3005
+ 0x0D12..0x0D28,
3006
+ 0x0D2A..0x0D39,
3007
+ 0x0D3E..0x0D40,
3008
+ 0x0D46..0x0D48,
3009
+ 0x0D4A..0x0D4C,
3010
+ 0x0D57..0x0D57,
3011
+ 0x0D60..0x0D61,
3012
+ 0x0D66..0x0D6F,
3013
+ 0x0D82..0x0D83,
3014
+ 0x0D85..0x0D96,
3015
+ 0x0D9A..0x0DB1,
3016
+ 0x0DB3..0x0DBB,
3017
+ 0x0DBD..0x0DBD,
3018
+ 0x0DC0..0x0DC6,
3019
+ 0x0DCF..0x0DD1,
3020
+ 0x0DD8..0x0DDF,
3021
+ 0x0DF2..0x0DF4,
3022
+ 0x0E01..0x0E30,
3023
+ 0x0E32..0x0E33,
3024
+ 0x0E40..0x0E46,
3025
+ 0x0E4F..0x0E5B,
3026
+ 0x0E81..0x0E82,
3027
+ 0x0E84..0x0E84,
3028
+ 0x0E87..0x0E88,
3029
+ 0x0E8A..0x0E8A,
3030
+ 0x0E8D..0x0E8D,
3031
+ 0x0E94..0x0E97,
3032
+ 0x0E99..0x0E9F,
3033
+ 0x0EA1..0x0EA3,
3034
+ 0x0EA5..0x0EA5,
3035
+ 0x0EA7..0x0EA7,
3036
+ 0x0EAA..0x0EAB,
3037
+ 0x0EAD..0x0EB0,
3038
+ 0x0EB2..0x0EB3,
3039
+ 0x0EBD..0x0EBD,
3040
+ 0x0EC0..0x0EC4,
3041
+ 0x0EC6..0x0EC6,
3042
+ 0x0ED0..0x0ED9,
3043
+ 0x0EDC..0x0EDD,
3044
+ 0x0F00..0x0F17,
3045
+ 0x0F1A..0x0F34,
3046
+ 0x0F36..0x0F36,
3047
+ 0x0F38..0x0F38,
3048
+ 0x0F3E..0x0F47,
3049
+ 0x0F49..0x0F6A,
3050
+ 0x0F7F..0x0F7F,
3051
+ 0x0F85..0x0F85,
3052
+ 0x0F88..0x0F8B,
3053
+ 0x0FBE..0x0FC5,
3054
+ 0x0FC7..0x0FCC,
3055
+ 0x0FCF..0x0FCF,
3056
+ 0x1000..0x1021,
3057
+ 0x1023..0x1027,
3058
+ 0x1029..0x102A,
3059
+ 0x102C..0x102C,
3060
+ 0x1031..0x1031,
3061
+ 0x1038..0x1038,
3062
+ 0x1040..0x1057,
3063
+ 0x10A0..0x10C5,
3064
+ 0x10D0..0x10F8,
3065
+ 0x10FB..0x10FB,
3066
+ 0x1100..0x1159,
3067
+ 0x115F..0x11A2,
3068
+ 0x11A8..0x11F9,
3069
+ 0x1200..0x1206,
3070
+ 0x1208..0x1246,
3071
+ 0x1248..0x1248,
3072
+ 0x124A..0x124D,
3073
+ 0x1250..0x1256,
3074
+ 0x1258..0x1258,
3075
+ 0x125A..0x125D,
3076
+ 0x1260..0x1286,
3077
+ 0x1288..0x1288,
3078
+ 0x128A..0x128D,
3079
+ 0x1290..0x12AE,
3080
+ 0x12B0..0x12B0,
3081
+ 0x12B2..0x12B5,
3082
+ 0x12B8..0x12BE,
3083
+ 0x12C0..0x12C0,
3084
+ 0x12C2..0x12C5,
3085
+ 0x12C8..0x12CE,
3086
+ 0x12D0..0x12D6,
3087
+ 0x12D8..0x12EE,
3088
+ 0x12F0..0x130E,
3089
+ 0x1310..0x1310,
3090
+ 0x1312..0x1315,
3091
+ 0x1318..0x131E,
3092
+ 0x1320..0x1346,
3093
+ 0x1348..0x135A,
3094
+ 0x1361..0x137C,
3095
+ 0x13A0..0x13F4,
3096
+ 0x1401..0x1676,
3097
+ 0x1681..0x169A,
3098
+ 0x16A0..0x16F0,
3099
+ 0x1700..0x170C,
3100
+ 0x170E..0x1711,
3101
+ 0x1720..0x1731,
3102
+ 0x1735..0x1736,
3103
+ 0x1740..0x1751,
3104
+ 0x1760..0x176C,
3105
+ 0x176E..0x1770,
3106
+ 0x1780..0x17B6,
3107
+ 0x17BE..0x17C5,
3108
+ 0x17C7..0x17C8,
3109
+ 0x17D4..0x17DA,
3110
+ 0x17DC..0x17DC,
3111
+ 0x17E0..0x17E9,
3112
+ 0x1810..0x1819,
3113
+ 0x1820..0x1877,
3114
+ 0x1880..0x18A8,
3115
+ 0x1E00..0x1E9B,
3116
+ 0x1EA0..0x1EF9,
3117
+ 0x1F00..0x1F15,
3118
+ 0x1F18..0x1F1D,
3119
+ 0x1F20..0x1F45,
3120
+ 0x1F48..0x1F4D,
3121
+ 0x1F50..0x1F57,
3122
+ 0x1F59..0x1F59,
3123
+ 0x1F5B..0x1F5B,
3124
+ 0x1F5D..0x1F5D,
3125
+ 0x1F5F..0x1F7D,
3126
+ 0x1F80..0x1FB4,
3127
+ 0x1FB6..0x1FBC,
3128
+ 0x1FBE..0x1FBE,
3129
+ 0x1FC2..0x1FC4,
3130
+ 0x1FC6..0x1FCC,
3131
+ 0x1FD0..0x1FD3,
3132
+ 0x1FD6..0x1FDB,
3133
+ 0x1FE0..0x1FEC,
3134
+ 0x1FF2..0x1FF4,
3135
+ 0x1FF6..0x1FFC,
3136
+ 0x200E..0x200E,
3137
+ 0x2071..0x2071,
3138
+ 0x207F..0x207F,
3139
+ 0x2102..0x2102,
3140
+ 0x2107..0x2107,
3141
+ 0x210A..0x2113,
3142
+ 0x2115..0x2115,
3143
+ 0x2119..0x211D,
3144
+ 0x2124..0x2124,
3145
+ 0x2126..0x2126,
3146
+ 0x2128..0x2128,
3147
+ 0x212A..0x212D,
3148
+ 0x212F..0x2131,
3149
+ 0x2133..0x2139,
3150
+ 0x213D..0x213F,
3151
+ 0x2145..0x2149,
3152
+ 0x2160..0x2183,
3153
+ 0x2336..0x237A,
3154
+ 0x2395..0x2395,
3155
+ 0x249C..0x24E9,
3156
+ 0x3005..0x3007,
3157
+ 0x3021..0x3029,
3158
+ 0x3031..0x3035,
3159
+ 0x3038..0x303C,
3160
+ 0x3041..0x3096,
3161
+ 0x309D..0x309F,
3162
+ 0x30A1..0x30FA,
3163
+ 0x30FC..0x30FF,
3164
+ 0x3105..0x312C,
3165
+ 0x3131..0x318E,
3166
+ 0x3190..0x31B7,
3167
+ 0x31F0..0x321C,
3168
+ 0x3220..0x3243,
3169
+ 0x3260..0x327B,
3170
+ 0x327F..0x32B0,
3171
+ 0x32C0..0x32CB,
3172
+ 0x32D0..0x32FE,
3173
+ 0x3300..0x3376,
3174
+ 0x337B..0x33DD,
3175
+ 0x33E0..0x33FE,
3176
+ 0x3400..0x4DB5,
3177
+ 0x4E00..0x9FA5,
3178
+ 0xA000..0xA48C,
3179
+ 0xAC00..0xD7A3,
3180
+ 0xD800..0xFA2D,
3181
+ 0xFA30..0xFA6A,
3182
+ 0xFB00..0xFB06,
3183
+ 0xFB13..0xFB17,
3184
+ 0xFF21..0xFF3A,
3185
+ 0xFF41..0xFF5A,
3186
+ 0xFF66..0xFFBE,
3187
+ 0xFFC2..0xFFC7,
3188
+ 0xFFCA..0xFFCF,
3189
+ 0xFFD2..0xFFD7,
3190
+ 0xFFDA..0xFFDC,
3191
+ 0x10300..0x1031E,
3192
+ 0x10320..0x10323,
3193
+ 0x10330..0x1034A,
3194
+ 0x10400..0x10425,
3195
+ 0x10428..0x1044D,
3196
+ 0x1D000..0x1D0F5,
3197
+ 0x1D100..0x1D126,
3198
+ 0x1D12A..0x1D166,
3199
+ 0x1D16A..0x1D172,
3200
+ 0x1D183..0x1D184,
3201
+ 0x1D18C..0x1D1A9,
3202
+ 0x1D1AE..0x1D1DD,
3203
+ 0x1D400..0x1D454,
3204
+ 0x1D456..0x1D49C,
3205
+ 0x1D49E..0x1D49F,
3206
+ 0x1D4A2..0x1D4A2,
3207
+ 0x1D4A5..0x1D4A6,
3208
+ 0x1D4A9..0x1D4AC,
3209
+ 0x1D4AE..0x1D4B9,
3210
+ 0x1D4BB..0x1D4BB,
3211
+ 0x1D4BD..0x1D4C0,
3212
+ 0x1D4C2..0x1D4C3,
3213
+ 0x1D4C5..0x1D505,
3214
+ 0x1D507..0x1D50A,
3215
+ 0x1D50D..0x1D514,
3216
+ 0x1D516..0x1D51C,
3217
+ 0x1D51E..0x1D539,
3218
+ 0x1D53B..0x1D53E,
3219
+ 0x1D540..0x1D544,
3220
+ 0x1D546..0x1D546,
3221
+ 0x1D54A..0x1D550,
3222
+ 0x1D552..0x1D6A3,
3223
+ 0x1D6A8..0x1D7C9,
3224
+ 0x20000..0x2A6D6,
3225
+ 0x2F800..0x2FA1D,
3226
+ 0xF0000..0xFFFFD,
3227
+ 0x100000..0x10FFFD,
3228
+ ].freeze
3229
+ end
3230
+ end
3231
+ end
3232
+ end