From 6119c78c5c6a97f3a210eaef26f17c6f6122dfd0 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 17 Dec 2018 13:27:24 +0000 Subject: [PATCH] Cleanup other vendored gems. Exclude subdirectories and specific files. This makes adding/removing files on newly vendored versions much easier. --- .gitignore | 62 +- .../lib/active_support/array_inquirer.rb | 48 + .../lib/active_support/backtrace_cleaner.rb | 105 ++ .../lib/active_support/benchmarkable.rb | 51 + .../lib/active_support/builder.rb | 8 + .../lib/active_support/callbacks.rb | 845 +++++++++++ .../lib/active_support/concern.rb | 144 ++ .../lib/active_support/configurable.rb | 150 ++ .../lib/active_support/core_ext.rb | 5 + .../lib/active_support/current_attributes.rb | 195 +++ .../lib/active_support/descendants_tracker.rb | 62 + .../lib/active_support/digest.rb | 20 + .../active_support/encrypted_configuration.rb | 49 + .../lib/active_support/encrypted_file.rb | 99 ++ .../evented_file_update_checker.rb | 205 +++ .../lib/active_support/execution_wrapper.rb | 128 ++ .../lib/active_support/executor.rb | 8 + .../lib/active_support/file_update_checker.rb | 163 ++ .../lib/active_support/gem_version.rb | 17 + .../lib/active_support/gzip.rb | 38 + .../hash_with_indifferent_access.rb | 382 +++++ .../lib/active_support/i18n_railtie.rb | 118 ++ .../lib/active_support/inflector.rb | 9 + .../lib/active_support/key_generator.rb | 73 + .../lib/active_support/logger.rb | 108 ++ .../lib/active_support/logger_silence.rb | 29 + .../logger_thread_safe_level.rb | 33 + .../lib/active_support/message_encryptor.rb | 229 +++ .../lib/active_support/message_verifier.rb | 205 +++ .../lib/active_support/option_merger.rb | 27 + .../lib/active_support/ordered_hash.rb | 50 + .../lib/active_support/ordered_options.rb | 85 ++ .../lib/active_support/proxy_object.rb | 15 + .../lib/active_support/rails.rb | 35 + .../lib/active_support/railtie.rb | 80 + .../lib/active_support/reloader.rb | 131 ++ .../lib/active_support/rescuable.rb | 174 +++ .../lib/active_support/security_utils.rb | 31 + .../lib/active_support/string_inquirer.rb | 34 + .../lib/active_support/subscriber.rb | 130 ++ .../lib/active_support/tagged_logging.rb | 79 + .../lib/active_support/test_case.rb | 72 + .../active_support/values/unicode_tables.dat | Bin 0 -> 1116857 bytes .../lib/active_support/version.rb | 10 + .../lib/active_support/xml_mini/jdom.rb | 183 +++ .../lib/active_support/xml_mini/libxml.rb | 80 + .../lib/active_support/xml_mini/libxmlsax.rb | 83 ++ .../lib/active_support/xml_mini/nokogiri.rb | 83 ++ .../active_support/xml_mini/nokogirisax.rb | 86 ++ .../gems/backports-3.11.4/lib/backports.rb | 3 + .../lib/backports/2.4.0/comparable.rb | 3 + .../lib/backports/2.4.0/enumerable.rb | 3 + .../lib/backports/2.4.0/false_class.rb | 3 + .../lib/backports/2.4.0/fixnum.rb | 3 + .../lib/backports/2.4.0/float.rb | 3 + .../lib/backports/2.4.0/hash.rb | 3 + .../lib/backports/2.4.0/nil_class.rb | 3 + .../lib/backports/2.4.0/regexp.rb | 3 + .../lib/backports/2.4.0/string.rb | 3 + .../lib/backports/2.4.0/true_class.rb | 3 + .../lib/backports/2.5.0/array.rb | 3 + .../lib/backports/2.5.0/dir.rb | 3 + .../lib/backports/2.5.0/enumerable.rb | 3 + .../lib/backports/2.5.0/hash.rb | 3 + .../lib/backports/2.5.0/integer.rb | 3 + .../lib/backports/2.5.0/kernel.rb | 3 + .../lib/backports/2.5.0/module.rb | 3 + .../lib/backports/2.5.0/string.rb | 3 + .../backports/2.5.0/string/delete_suffix.rb | 33 + .../lib/backports/2.5.0/struct.rb | 3 + .../lib/backports/basic_object.rb | 53 + .../backports-3.11.4/lib/backports/std_lib.rb | 24 + .../backports-3.11.4/lib/backports/tools.rb | 3 + .../lib/backports/tools/alias_method.rb | 8 + .../lib/backports/tools/alias_method_chain.rb | 26 + .../lib/backports/tools/extreme_object.rb | 12 + .../tools/float_integer_conversion.rb | 17 + .../lib/backports/tools/io.rb | 57 + .../backports/tools/make_block_optional.rb | 43 + .../lib/backports/tools/normalize.rb | 1322 +++++++++++++++++ .../lib/backports/tools/path.rb | 55 + .../backports/tools/require_relative_dir.rb | 13 + .../lib/backports/tools/std_lib.rb | 59 + .../tools/suppress_verbose_warnings.rb | 9 + .../atomic_reference_cache_backend.rb | 908 +++++++++++ .../thread_safe/synchronized_cache_backend.rb | 77 + .../thread_safe-0.3.6/lib/thread_safe/util.rb | 16 + 87 files changed, 7845 insertions(+), 6 deletions(-) create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/array_inquirer.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/backtrace_cleaner.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/benchmarkable.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/builder.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/concern.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/configurable.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/core_ext.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/current_attributes.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/descendants_tracker.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/digest.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/encrypted_configuration.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/encrypted_file.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/evented_file_update_checker.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/execution_wrapper.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/executor.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/file_update_checker.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gem_version.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gzip.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/hash_with_indifferent_access.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/i18n_railtie.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/inflector.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/key_generator.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_silence.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_thread_safe_level.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_encryptor.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_verifier.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/option_merger.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_hash.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_options.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/proxy_object.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rails.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/railtie.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/reloader.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rescuable.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/security_utils.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/string_inquirer.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/subscriber.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/test_case.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/values/unicode_tables.dat create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/version.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/jdom.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxml.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxmlsax.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogiri.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogirisax.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/comparable.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/enumerable.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/false_class.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/fixnum.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/float.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/hash.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/nil_class.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/regexp.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/string.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/true_class.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/array.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/dir.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/enumerable.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/hash.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/integer.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/kernel.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/module.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_suffix.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/struct.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/basic_object.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/std_lib.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method_chain.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/extreme_object.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/float_integer_conversion.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/io.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/make_block_optional.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/normalize.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/path.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/require_relative_dir.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/std_lib.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/suppress_verbose_warnings.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/atomic_reference_cache_backend.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/synchronized_cache_backend.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util.rb diff --git a/.gitignore b/.gitignore index e56dd44768..c198f1690d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,16 +33,66 @@ !**/vendor/bundle-standalone/ruby/*/gems/*/lib # Ignore partially included gems where we don't need all files -**/vendor/bundle-standalone/ruby/*/gems/activesupport-*/lib -**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib -**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib -**/vendor/bundle-standalone/ruby/*/gems/minitest-*/lib -**/vendor/bundle-standalone/ruby/*/gems/thread_safe-*/lib +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/all.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/cache.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/cache/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/concurrency/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/dependencies.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/dependencies/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/duration/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/json.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/json/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/log_subscriber.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/log_subscriber/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/messages/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/multibyte/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/number_helper.rb +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/number_helper/ +**/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-*/lib/active_support/testing/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/latest.rb +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/rails.rb +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/version.rb +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/1.* +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/2.0* +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/2.1* +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/2.2* +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/2.3* +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/2.*.rb +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/force/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/rails/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/random/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/array/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/comparable/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/dir/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/enumerable/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/false_class/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/fixnum/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/float/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/hash/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/integer/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/kernel/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/module/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/nil_class/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/regexp/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/struct/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/struct/ +**/vendor/bundle-standalone/ruby/*/gems/backports-*/lib/backports/*/true_class/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/atomic/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/atomic_reference/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/collection/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/concern/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/executor/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/synchronization/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/thread_safe/ +**/vendor/bundle-standalone/ruby/*/gems/concurrent-ruby-*/lib/utility/ **/vendor/bundle-standalone/ruby/*/gems/i18n-*/lib/i18n/tests* +**/vendor/bundle-standalone/ruby/*/gems/thread_safe-*/lib/thread_safe/util -# Ignore rubocop dependencies we don't wish to vendor +# Ignore rubocop's (and other) dependencies we don't wish to vendor **/vendor/bundle-standalone/ruby/*/gems/ast-*/ **/vendor/bundle-standalone/ruby/*/gems/jaro_winkler-*/ +**/vendor/bundle-standalone/ruby/*/gems/minitest-*/lib **/vendor/bundle-standalone/ruby/*/gems/parallel-*/ **/vendor/bundle-standalone/ruby/*/gems/parser-*/ **/vendor/bundle-standalone/ruby/*/gems/powerpack-*/ diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/array_inquirer.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/array_inquirer.rb new file mode 100644 index 0000000000..b2b9e9c0b7 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/array_inquirer.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module ActiveSupport + # Wrapping an array in an +ArrayInquirer+ gives a friendlier way to check + # its string-like contents: + # + # variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet]) + # + # variants.phone? # => true + # variants.tablet? # => true + # variants.desktop? # => false + class ArrayInquirer < Array + # Passes each element of +candidates+ collection to ArrayInquirer collection. + # The method returns true if any element from the ArrayInquirer collection + # is equal to the stringified or symbolized form of any element in the +candidates+ collection. + # + # If +candidates+ collection is not given, method returns true. + # + # variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet]) + # + # variants.any? # => true + # variants.any?(:phone, :tablet) # => true + # variants.any?('phone', 'desktop') # => true + # variants.any?(:desktop, :watch) # => false + def any?(*candidates) + if candidates.none? + super + else + candidates.any? do |candidate| + include?(candidate.to_sym) || include?(candidate.to_s) + end + end + end + + private + def respond_to_missing?(name, include_private = false) + (name[-1] == "?") || super + end + + def method_missing(name, *args) + if name[-1] == "?" + any?(name[0..-2]) + else + super + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/backtrace_cleaner.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/backtrace_cleaner.rb new file mode 100644 index 0000000000..16dd733ddb --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/backtrace_cleaner.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +module ActiveSupport + # Backtraces often include many lines that are not relevant for the context + # under review. This makes it hard to find the signal amongst the backtrace + # noise, and adds debugging time. With a BacktraceCleaner, filters and + # silencers are used to remove the noisy lines, so that only the most relevant + # lines remain. + # + # Filters are used to modify lines of data, while silencers are used to remove + # lines entirely. The typical filter use case is to remove lengthy path + # information from the start of each line, and view file paths relevant to the + # app directory instead of the file system root. The typical silencer use case + # is to exclude the output of a noisy library from the backtrace, so that you + # can focus on the rest. + # + # bc = ActiveSupport::BacktraceCleaner.new + # bc.add_filter { |line| line.gsub(Rails.root.to_s, '') } # strip the Rails.root prefix + # bc.add_silencer { |line| line =~ /puma|rubygems/ } # skip any lines from puma or rubygems + # bc.clean(exception.backtrace) # perform the cleanup + # + # To reconfigure an existing BacktraceCleaner (like the default one in Rails) + # and show as much data as possible, you can always call + # BacktraceCleaner#remove_silencers!, which will restore the + # backtrace to a pristine state. If you need to reconfigure an existing + # BacktraceCleaner so that it does not filter or modify the paths of any lines + # of the backtrace, you can call BacktraceCleaner#remove_filters! + # These two methods will give you a completely untouched backtrace. + # + # Inspired by the Quiet Backtrace gem by thoughtbot. + class BacktraceCleaner + def initialize + @filters, @silencers = [], [] + end + + # Returns the backtrace after all filters and silencers have been run + # against it. Filters run first, then silencers. + def clean(backtrace, kind = :silent) + filtered = filter_backtrace(backtrace) + + case kind + when :silent + silence(filtered) + when :noise + noise(filtered) + else + filtered + end + end + alias :filter :clean + + # Adds a filter from the block provided. Each line in the backtrace will be + # mapped against this filter. + # + # # Will turn "/my/rails/root/app/models/person.rb" into "/app/models/person.rb" + # backtrace_cleaner.add_filter { |line| line.gsub(Rails.root, '') } + def add_filter(&block) + @filters << block + end + + # Adds a silencer from the block provided. If the silencer returns +true+ + # for a given line, it will be excluded from the clean backtrace. + # + # # Will reject all lines that include the word "puma", like "/gems/puma/server.rb" or "/app/my_puma_server/rb" + # backtrace_cleaner.add_silencer { |line| line =~ /puma/ } + def add_silencer(&block) + @silencers << block + end + + # Removes all silencers, but leaves in the filters. Useful if your + # context of debugging suddenly expands as you suspect a bug in one of + # the libraries you use. + def remove_silencers! + @silencers = [] + end + + # Removes all filters, but leaves in the silencers. Useful if you suddenly + # need to see entire filepaths in the backtrace that you had already + # filtered out. + def remove_filters! + @filters = [] + end + + private + def filter_backtrace(backtrace) + @filters.each do |f| + backtrace = backtrace.map { |line| f.call(line) } + end + + backtrace + end + + def silence(backtrace) + @silencers.each do |s| + backtrace = backtrace.reject { |line| s.call(line) } + end + + backtrace + end + + def noise(backtrace) + backtrace - silence(backtrace) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/benchmarkable.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/benchmarkable.rb new file mode 100644 index 0000000000..f481d68198 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/benchmarkable.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require "active_support/core_ext/benchmark" +require "active_support/core_ext/hash/keys" + +module ActiveSupport + module Benchmarkable + # Allows you to measure the execution time of a block in a template and + # records the result to the log. Wrap this block around expensive operations + # or possible bottlenecks to get a time reading for the operation. For + # example, let's say you thought your file processing method was taking too + # long; you could wrap it in a benchmark block. + # + # <% benchmark 'Process data files' do %> + # <%= expensive_files_operation %> + # <% end %> + # + # That would add something like "Process data files (345.2ms)" to the log, + # which you can then use to compare timings when optimizing your code. + # + # You may give an optional logger level (:debug, :info, + # :warn, :error) as the :level option. The + # default logger level value is :info. + # + # <% benchmark 'Low-level files', level: :debug do %> + # <%= lowlevel_files_operation %> + # <% end %> + # + # Finally, you can pass true as the third argument to silence all log + # activity (other than the timing information) from inside the block. This + # is great for boiling down a noisy block to just a single statement that + # produces one log line: + # + # <% benchmark 'Process data files', level: :info, silence: true do %> + # <%= expensive_and_chatty_files_operation %> + # <% end %> + def benchmark(message = "Benchmarking", options = {}) + if logger + options.assert_valid_keys(:level, :silence) + options[:level] ||= :info + + result = nil + ms = Benchmark.ms { result = options[:silence] ? logger.silence { yield } : yield } + logger.send(options[:level], "%s (%.1fms)" % [ message, ms ]) + result + else + yield + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/builder.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/builder.rb new file mode 100644 index 0000000000..3fa7e6b26d --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/builder.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +begin + require "builder" +rescue LoadError => e + $stderr.puts "You don't have builder installed in your application. Please add it to your Gemfile and run bundle install" + raise e +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb new file mode 100644 index 0000000000..9a3728d986 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb @@ -0,0 +1,845 @@ +# frozen_string_literal: true + +require "active_support/concern" +require "active_support/descendants_tracker" +require "active_support/core_ext/array/extract_options" +require "active_support/core_ext/class/attribute" +require "active_support/core_ext/kernel/reporting" +require "active_support/core_ext/kernel/singleton_class" +require "active_support/core_ext/string/filters" +require "active_support/deprecation" +require "thread" + +module ActiveSupport + # Callbacks are code hooks that are run at key points in an object's life cycle. + # The typical use case is to have a base class define a set of callbacks + # relevant to the other functionality it supplies, so that subclasses can + # install callbacks that enhance or modify the base functionality without + # needing to override or redefine methods of the base class. + # + # Mixing in this module allows you to define the events in the object's + # life cycle that will support callbacks (via +ClassMethods.define_callbacks+), + # set the instance methods, procs, or callback objects to be called (via + # +ClassMethods.set_callback+), and run the installed callbacks at the + # appropriate times (via +run_callbacks+). + # + # Three kinds of callbacks are supported: before callbacks, run before a + # certain event; after callbacks, run after the event; and around callbacks, + # blocks that surround the event, triggering it when they yield. Callback code + # can be contained in instance methods, procs or lambdas, or callback objects + # that respond to certain predetermined methods. See +ClassMethods.set_callback+ + # for details. + # + # class Record + # include ActiveSupport::Callbacks + # define_callbacks :save + # + # def save + # run_callbacks :save do + # puts "- save" + # end + # end + # end + # + # class PersonRecord < Record + # set_callback :save, :before, :saving_message + # def saving_message + # puts "saving..." + # end + # + # set_callback :save, :after do |object| + # puts "saved" + # end + # end + # + # person = PersonRecord.new + # person.save + # + # Output: + # saving... + # - save + # saved + module Callbacks + extend Concern + + included do + extend ActiveSupport::DescendantsTracker + class_attribute :__callbacks, instance_writer: false, default: {} + end + + CALLBACK_FILTER_TYPES = [:before, :after, :around] + + # Runs the callbacks for the given event. + # + # Calls the before and around callbacks in the order they were set, yields + # the block (if given one), and then runs the after callbacks in reverse + # order. + # + # If the callback chain was halted, returns +false+. Otherwise returns the + # result of the block, +nil+ if no callbacks have been set, or +true+ + # if callbacks have been set but no block is given. + # + # run_callbacks :save do + # save + # end + # + #-- + # + # As this method is used in many places, and often wraps large portions of + # user code, it has an additional design goal of minimizing its impact on + # the visible call stack. An exception from inside a :before or :after + # callback can be as noisy as it likes -- but when control has passed + # smoothly through and into the supplied block, we want as little evidence + # as possible that we were here. + def run_callbacks(kind) + callbacks = __callbacks[kind.to_sym] + + if callbacks.empty? + yield if block_given? + else + env = Filters::Environment.new(self, false, nil) + next_sequence = callbacks.compile + + invoke_sequence = Proc.new do + skipped = nil + while true + current = next_sequence + current.invoke_before(env) + if current.final? + env.value = !env.halted && (!block_given? || yield) + elsif current.skip?(env) + (skipped ||= []) << current + next_sequence = next_sequence.nested + next + else + next_sequence = next_sequence.nested + begin + target, block, method, *arguments = current.expand_call_template(env, invoke_sequence) + target.send(method, *arguments, &block) + ensure + next_sequence = current + end + end + current.invoke_after(env) + skipped.pop.invoke_after(env) while skipped && skipped.first + break env.value + end + end + + # Common case: no 'around' callbacks defined + if next_sequence.final? + next_sequence.invoke_before(env) + env.value = !env.halted && (!block_given? || yield) + next_sequence.invoke_after(env) + env.value + else + invoke_sequence.call + end + end + end + + private + + # A hook invoked every time a before callback is halted. + # This can be overridden in ActiveSupport::Callbacks implementors in order + # to provide better debugging/logging. + def halted_callback_hook(filter) + end + + module Conditionals # :nodoc: + class Value + def initialize(&block) + @block = block + end + def call(target, value); @block.call(value); end + end + end + + module Filters + Environment = Struct.new(:target, :halted, :value) + + class Before + def self.build(callback_sequence, user_callback, user_conditions, chain_config, filter) + halted_lambda = chain_config[:terminator] + + if user_conditions.any? + halting_and_conditional(callback_sequence, user_callback, user_conditions, halted_lambda, filter) + else + halting(callback_sequence, user_callback, halted_lambda, filter) + end + end + + def self.halting_and_conditional(callback_sequence, user_callback, user_conditions, halted_lambda, filter) + callback_sequence.before do |env| + target = env.target + value = env.value + halted = env.halted + + if !halted && user_conditions.all? { |c| c.call(target, value) } + result_lambda = -> { user_callback.call target, value } + env.halted = halted_lambda.call(target, result_lambda) + if env.halted + target.send :halted_callback_hook, filter + end + end + + env + end + end + private_class_method :halting_and_conditional + + def self.halting(callback_sequence, user_callback, halted_lambda, filter) + callback_sequence.before do |env| + target = env.target + value = env.value + halted = env.halted + + unless halted + result_lambda = -> { user_callback.call target, value } + env.halted = halted_lambda.call(target, result_lambda) + + if env.halted + target.send :halted_callback_hook, filter + end + end + + env + end + end + private_class_method :halting + end + + class After + def self.build(callback_sequence, user_callback, user_conditions, chain_config) + if chain_config[:skip_after_callbacks_if_terminated] + if user_conditions.any? + halting_and_conditional(callback_sequence, user_callback, user_conditions) + else + halting(callback_sequence, user_callback) + end + else + if user_conditions.any? + conditional callback_sequence, user_callback, user_conditions + else + simple callback_sequence, user_callback + end + end + end + + def self.halting_and_conditional(callback_sequence, user_callback, user_conditions) + callback_sequence.after do |env| + target = env.target + value = env.value + halted = env.halted + + if !halted && user_conditions.all? { |c| c.call(target, value) } + user_callback.call target, value + end + + env + end + end + private_class_method :halting_and_conditional + + def self.halting(callback_sequence, user_callback) + callback_sequence.after do |env| + unless env.halted + user_callback.call env.target, env.value + end + + env + end + end + private_class_method :halting + + def self.conditional(callback_sequence, user_callback, user_conditions) + callback_sequence.after do |env| + target = env.target + value = env.value + + if user_conditions.all? { |c| c.call(target, value) } + user_callback.call target, value + end + + env + end + end + private_class_method :conditional + + def self.simple(callback_sequence, user_callback) + callback_sequence.after do |env| + user_callback.call env.target, env.value + + env + end + end + private_class_method :simple + end + end + + class Callback #:nodoc:# + def self.build(chain, filter, kind, options) + if filter.is_a?(String) + raise ArgumentError, <<-MSG.squish + Passing string to define a callback is not supported. See the `.set_callback` + documentation to see supported values. + MSG + end + + new chain.name, filter, kind, options, chain.config + end + + attr_accessor :kind, :name + attr_reader :chain_config + + def initialize(name, filter, kind, options, chain_config) + @chain_config = chain_config + @name = name + @kind = kind + @filter = filter + @key = compute_identifier filter + @if = check_conditionals(Array(options[:if])) + @unless = check_conditionals(Array(options[:unless])) + end + + def filter; @key; end + def raw_filter; @filter; end + + def merge_conditional_options(chain, if_option:, unless_option:) + options = { + if: @if.dup, + unless: @unless.dup + } + + options[:if].concat Array(unless_option) + options[:unless].concat Array(if_option) + + self.class.build chain, @filter, @kind, options + end + + def matches?(_kind, _filter) + @kind == _kind && filter == _filter + end + + def duplicates?(other) + case @filter + when Symbol + matches?(other.kind, other.filter) + else + false + end + end + + # Wraps code with filter + def apply(callback_sequence) + user_conditions = conditions_lambdas + user_callback = CallTemplate.build(@filter, self) + + case kind + when :before + Filters::Before.build(callback_sequence, user_callback.make_lambda, user_conditions, chain_config, @filter) + when :after + Filters::After.build(callback_sequence, user_callback.make_lambda, user_conditions, chain_config) + when :around + callback_sequence.around(user_callback, user_conditions) + end + end + + def current_scopes + Array(chain_config[:scope]).map { |s| public_send(s) } + end + + private + def check_conditionals(conditionals) + if conditionals.any? { |c| c.is_a?(String) } + raise ArgumentError, <<-MSG.squish + Passing string to be evaluated in :if and :unless conditional + options is not supported. Pass a symbol for an instance method, + or a lambda, proc or block, instead. + MSG + end + + conditionals + end + + def compute_identifier(filter) + case filter + when ::Proc + filter.object_id + else + filter + end + end + + def conditions_lambdas + @if.map { |c| CallTemplate.build(c, self).make_lambda } + + @unless.map { |c| CallTemplate.build(c, self).inverted_lambda } + end + end + + # A future invocation of user-supplied code (either as a callback, + # or a condition filter). + class CallTemplate # :nodoc: + def initialize(target, method, arguments, block) + @override_target = target + @method_name = method + @arguments = arguments + @override_block = block + end + + # Return the parts needed to make this call, with the given + # input values. + # + # Returns an array of the form: + # + # [target, block, method, *arguments] + # + # This array can be used as such: + # + # target.send(method, *arguments, &block) + # + # The actual invocation is left up to the caller to minimize + # call stack pollution. + def expand(target, value, block) + result = @arguments.map { |arg| + case arg + when :value; value + when :target; target + when :block; block || raise(ArgumentError) + end + } + + result.unshift @method_name + result.unshift @override_block || block + result.unshift @override_target || target + + # target, block, method, *arguments = result + # target.send(method, *arguments, &block) + result + end + + # Return a lambda that will make this call when given the input + # values. + def make_lambda + lambda do |target, value, &block| + target, block, method, *arguments = expand(target, value, block) + target.send(method, *arguments, &block) + end + end + + # Return a lambda that will make this call when given the input + # values, but then return the boolean inverse of that result. + def inverted_lambda + lambda do |target, value, &block| + target, block, method, *arguments = expand(target, value, block) + ! target.send(method, *arguments, &block) + end + end + + # Filters support: + # + # Symbols:: A method to call. + # Procs:: A proc to call with the object. + # Objects:: An object with a before_foo method on it to call. + # + # All of these objects are converted into a CallTemplate and handled + # the same after this point. + def self.build(filter, callback) + case filter + when Symbol + new(nil, filter, [], nil) + when Conditionals::Value + new(filter, :call, [:target, :value], nil) + when ::Proc + if filter.arity > 1 + new(nil, :instance_exec, [:target, :block], filter) + elsif filter.arity > 0 + new(nil, :instance_exec, [:target], filter) + else + new(nil, :instance_exec, [], filter) + end + else + method_to_call = callback.current_scopes.join("_") + + new(filter, method_to_call, [:target], nil) + end + end + end + + # Execute before and after filters in a sequence instead of + # chaining them with nested lambda calls, see: + # https://github.com/rails/rails/issues/18011 + class CallbackSequence # :nodoc: + def initialize(nested = nil, call_template = nil, user_conditions = nil) + @nested = nested + @call_template = call_template + @user_conditions = user_conditions + + @before = [] + @after = [] + end + + def before(&before) + @before.unshift(before) + self + end + + def after(&after) + @after.push(after) + self + end + + def around(call_template, user_conditions) + CallbackSequence.new(self, call_template, user_conditions) + end + + def skip?(arg) + arg.halted || !@user_conditions.all? { |c| c.call(arg.target, arg.value) } + end + + def nested + @nested + end + + def final? + !@call_template + end + + def expand_call_template(arg, block) + @call_template.expand(arg.target, arg.value, block) + end + + def invoke_before(arg) + @before.each { |b| b.call(arg) } + end + + def invoke_after(arg) + @after.each { |a| a.call(arg) } + end + end + + class CallbackChain #:nodoc:# + include Enumerable + + attr_reader :name, :config + + def initialize(name, config) + @name = name + @config = { + scope: [:kind], + terminator: default_terminator + }.merge!(config) + @chain = [] + @callbacks = nil + @mutex = Mutex.new + end + + def each(&block); @chain.each(&block); end + def index(o); @chain.index(o); end + def empty?; @chain.empty?; end + + def insert(index, o) + @callbacks = nil + @chain.insert(index, o) + end + + def delete(o) + @callbacks = nil + @chain.delete(o) + end + + def clear + @callbacks = nil + @chain.clear + self + end + + def initialize_copy(other) + @callbacks = nil + @chain = other.chain.dup + @mutex = Mutex.new + end + + def compile + @callbacks || @mutex.synchronize do + final_sequence = CallbackSequence.new + @callbacks ||= @chain.reverse.inject(final_sequence) do |callback_sequence, callback| + callback.apply callback_sequence + end + end + end + + def append(*callbacks) + callbacks.each { |c| append_one(c) } + end + + def prepend(*callbacks) + callbacks.each { |c| prepend_one(c) } + end + + protected + def chain; @chain; end + + private + + def append_one(callback) + @callbacks = nil + remove_duplicates(callback) + @chain.push(callback) + end + + def prepend_one(callback) + @callbacks = nil + remove_duplicates(callback) + @chain.unshift(callback) + end + + def remove_duplicates(callback) + @callbacks = nil + @chain.delete_if { |c| callback.duplicates?(c) } + end + + def default_terminator + Proc.new do |target, result_lambda| + terminate = true + catch(:abort) do + result_lambda.call + terminate = false + end + terminate + end + end + end + + module ClassMethods + def normalize_callback_params(filters, block) # :nodoc: + type = CALLBACK_FILTER_TYPES.include?(filters.first) ? filters.shift : :before + options = filters.extract_options! + filters.unshift(block) if block + [type, filters, options.dup] + end + + # This is used internally to append, prepend and skip callbacks to the + # CallbackChain. + def __update_callbacks(name) #:nodoc: + ([self] + ActiveSupport::DescendantsTracker.descendants(self)).reverse_each do |target| + chain = target.get_callbacks name + yield target, chain.dup + end + end + + # Install a callback for the given event. + # + # set_callback :save, :before, :before_method + # set_callback :save, :after, :after_method, if: :condition + # set_callback :save, :around, ->(r, block) { stuff; result = block.call; stuff } + # + # The second argument indicates whether the callback is to be run +:before+, + # +:after+, or +:around+ the event. If omitted, +:before+ is assumed. This + # means the first example above can also be written as: + # + # set_callback :save, :before_method + # + # The callback can be specified as a symbol naming an instance method; as a + # proc, lambda, or block; or as an object that responds to a certain method + # determined by the :scope argument to +define_callbacks+. + # + # If a proc, lambda, or block is given, its body is evaluated in the context + # of the current object. It can also optionally accept the current object as + # an argument. + # + # Before and around callbacks are called in the order that they are set; + # after callbacks are called in the reverse order. + # + # Around callbacks can access the return value from the event, if it + # wasn't halted, from the +yield+ call. + # + # ===== Options + # + # * :if - A symbol or an array of symbols, each naming an instance + # method or a proc; the callback will be called only when they all return + # a true value. + # * :unless - A symbol or an array of symbols, each naming an + # instance method or a proc; the callback will be called only when they + # all return a false value. + # * :prepend - If +true+, the callback will be prepended to the + # existing chain rather than appended. + def set_callback(name, *filter_list, &block) + type, filters, options = normalize_callback_params(filter_list, block) + + self_chain = get_callbacks name + mapped = filters.map do |filter| + Callback.build(self_chain, filter, type, options) + end + + __update_callbacks(name) do |target, chain| + options[:prepend] ? chain.prepend(*mapped) : chain.append(*mapped) + target.set_callbacks name, chain + end + end + + # Skip a previously set callback. Like +set_callback+, :if or + # :unless options may be passed in order to control when the + # callback is skipped. + # + # class Writer < Person + # skip_callback :validate, :before, :check_membership, if: -> { age > 18 } + # end + # + # An ArgumentError will be raised if the callback has not + # already been set (unless the :raise option is set to false). + def skip_callback(name, *filter_list, &block) + type, filters, options = normalize_callback_params(filter_list, block) + + options[:raise] = true unless options.key?(:raise) + + __update_callbacks(name) do |target, chain| + filters.each do |filter| + callback = chain.find { |c| c.matches?(type, filter) } + + if !callback && options[:raise] + raise ArgumentError, "#{type.to_s.capitalize} #{name} callback #{filter.inspect} has not been defined" + end + + if callback && (options.key?(:if) || options.key?(:unless)) + new_callback = callback.merge_conditional_options(chain, if_option: options[:if], unless_option: options[:unless]) + chain.insert(chain.index(callback), new_callback) + end + + chain.delete(callback) + end + target.set_callbacks name, chain + end + end + + # Remove all set callbacks for the given event. + def reset_callbacks(name) + callbacks = get_callbacks name + + ActiveSupport::DescendantsTracker.descendants(self).each do |target| + chain = target.get_callbacks(name).dup + callbacks.each { |c| chain.delete(c) } + target.set_callbacks name, chain + end + + set_callbacks(name, callbacks.dup.clear) + end + + # Define sets of events in the object life cycle that support callbacks. + # + # define_callbacks :validate + # define_callbacks :initialize, :save, :destroy + # + # ===== Options + # + # * :terminator - Determines when a before filter will halt the + # callback chain, preventing following before and around callbacks from + # being called and the event from being triggered. + # This should be a lambda to be executed. + # The current object and the result lambda of the callback will be provided + # to the terminator lambda. + # + # define_callbacks :validate, terminator: ->(target, result_lambda) { result_lambda.call == false } + # + # In this example, if any before validate callbacks returns +false+, + # any successive before and around callback is not executed. + # + # The default terminator halts the chain when a callback throws +:abort+. + # + # * :skip_after_callbacks_if_terminated - Determines if after + # callbacks should be terminated by the :terminator option. By + # default after callbacks are executed no matter if callback chain was + # terminated or not. This option has no effect if :terminator + # option is set to +nil+. + # + # * :scope - Indicates which methods should be executed when an + # object is used as a callback. + # + # class Audit + # def before(caller) + # puts 'Audit: before is called' + # end + # + # def before_save(caller) + # puts 'Audit: before_save is called' + # end + # end + # + # class Account + # include ActiveSupport::Callbacks + # + # define_callbacks :save + # set_callback :save, :before, Audit.new + # + # def save + # run_callbacks :save do + # puts 'save in main' + # end + # end + # end + # + # In the above case whenever you save an account the method + # Audit#before will be called. On the other hand + # + # define_callbacks :save, scope: [:kind, :name] + # + # would trigger Audit#before_save instead. That's constructed + # by calling #{kind}_#{name} on the given instance. In this + # case "kind" is "before" and "name" is "save". In this context +:kind+ + # and +:name+ have special meanings: +:kind+ refers to the kind of + # callback (before/after/around) and +:name+ refers to the method on + # which callbacks are being defined. + # + # A declaration like + # + # define_callbacks :save, scope: [:name] + # + # would call Audit#save. + # + # ===== Notes + # + # +names+ passed to +define_callbacks+ must not end with + # !, ? or =. + # + # Calling +define_callbacks+ multiple times with the same +names+ will + # overwrite previous callbacks registered with +set_callback+. + def define_callbacks(*names) + options = names.extract_options! + + names.each do |name| + name = name.to_sym + + set_callbacks name, CallbackChain.new(name, options) + + module_eval <<-RUBY, __FILE__, __LINE__ + 1 + def _run_#{name}_callbacks(&block) + run_callbacks #{name.inspect}, &block + end + + def self._#{name}_callbacks + get_callbacks(#{name.inspect}) + end + + def self._#{name}_callbacks=(value) + set_callbacks(#{name.inspect}, value) + end + + def _#{name}_callbacks + __callbacks[#{name.inspect}] + end + RUBY + end + end + + protected + + def get_callbacks(name) # :nodoc: + __callbacks[name.to_sym] + end + + def set_callbacks(name, callbacks) # :nodoc: + self.__callbacks = __callbacks.merge(name.to_sym => callbacks) + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/concern.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/concern.rb new file mode 100644 index 0000000000..b0a0d845e5 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/concern.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +module ActiveSupport + # A typical module looks like this: + # + # module M + # def self.included(base) + # base.extend ClassMethods + # base.class_eval do + # scope :disabled, -> { where(disabled: true) } + # end + # end + # + # module ClassMethods + # ... + # end + # end + # + # By using ActiveSupport::Concern the above module could instead be + # written as: + # + # require 'active_support/concern' + # + # module M + # extend ActiveSupport::Concern + # + # included do + # scope :disabled, -> { where(disabled: true) } + # end + # + # class_methods do + # ... + # end + # end + # + # Moreover, it gracefully handles module dependencies. Given a +Foo+ module + # and a +Bar+ module which depends on the former, we would typically write the + # following: + # + # module Foo + # def self.included(base) + # base.class_eval do + # def self.method_injected_by_foo + # ... + # end + # end + # end + # end + # + # module Bar + # def self.included(base) + # base.method_injected_by_foo + # end + # end + # + # class Host + # include Foo # We need to include this dependency for Bar + # include Bar # Bar is the module that Host really needs + # end + # + # But why should +Host+ care about +Bar+'s dependencies, namely +Foo+? We + # could try to hide these from +Host+ directly including +Foo+ in +Bar+: + # + # module Bar + # include Foo + # def self.included(base) + # base.method_injected_by_foo + # end + # end + # + # class Host + # include Bar + # end + # + # Unfortunately this won't work, since when +Foo+ is included, its base + # is the +Bar+ module, not the +Host+ class. With ActiveSupport::Concern, + # module dependencies are properly resolved: + # + # require 'active_support/concern' + # + # module Foo + # extend ActiveSupport::Concern + # included do + # def self.method_injected_by_foo + # ... + # end + # end + # end + # + # module Bar + # extend ActiveSupport::Concern + # include Foo + # + # included do + # self.method_injected_by_foo + # end + # end + # + # class Host + # include Bar # It works, now Bar takes care of its dependencies + # end + module Concern + class MultipleIncludedBlocks < StandardError #:nodoc: + def initialize + super "Cannot define multiple 'included' blocks for a Concern" + end + end + + def self.extended(base) #:nodoc: + base.instance_variable_set(:@_dependencies, []) + end + + def append_features(base) + if base.instance_variable_defined?(:@_dependencies) + base.instance_variable_get(:@_dependencies) << self + false + else + return false if base < self + @_dependencies.each { |dep| base.include(dep) } + super + base.extend const_get(:ClassMethods) if const_defined?(:ClassMethods) + base.class_eval(&@_included_block) if instance_variable_defined?(:@_included_block) + end + end + + def included(base = nil, &block) + if base.nil? + raise MultipleIncludedBlocks if instance_variable_defined?(:@_included_block) + + @_included_block = block + else + super + end + end + + def class_methods(&class_methods_module_definition) + mod = const_defined?(:ClassMethods, false) ? + const_get(:ClassMethods) : + const_set(:ClassMethods, Module.new) + + mod.module_eval(&class_methods_module_definition) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/configurable.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/configurable.rb new file mode 100644 index 0000000000..4d6f7819bb --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/configurable.rb @@ -0,0 +1,150 @@ +# frozen_string_literal: true + +require "active_support/concern" +require "active_support/ordered_options" +require "active_support/core_ext/array/extract_options" +require "active_support/core_ext/regexp" + +module ActiveSupport + # Configurable provides a config method to store and retrieve + # configuration options as an OrderedHash. + module Configurable + extend ActiveSupport::Concern + + class Configuration < ActiveSupport::InheritableOptions + def compile_methods! + self.class.compile_methods!(keys) + end + + # Compiles reader methods so we don't have to go through method_missing. + def self.compile_methods!(keys) + keys.reject { |m| method_defined?(m) }.each do |key| + class_eval <<-RUBY, __FILE__, __LINE__ + 1 + def #{key}; _get(#{key.inspect}); end + RUBY + end + end + end + + module ClassMethods + def config + @_config ||= if respond_to?(:superclass) && superclass.respond_to?(:config) + superclass.config.inheritable_copy + else + # create a new "anonymous" class that will host the compiled reader methods + Class.new(Configuration).new + end + end + + def configure + yield config + end + + # Allows you to add shortcut so that you don't have to refer to attribute + # through config. Also look at the example for config to contrast. + # + # Defines both class and instance config accessors. + # + # class User + # include ActiveSupport::Configurable + # config_accessor :allowed_access + # end + # + # User.allowed_access # => nil + # User.allowed_access = false + # User.allowed_access # => false + # + # user = User.new + # user.allowed_access # => false + # user.allowed_access = true + # user.allowed_access # => true + # + # User.allowed_access # => false + # + # The attribute name must be a valid method name in Ruby. + # + # class User + # include ActiveSupport::Configurable + # config_accessor :"1_Badname" + # end + # # => NameError: invalid config attribute name + # + # To opt out of the instance writer method, pass instance_writer: false. + # To opt out of the instance reader method, pass instance_reader: false. + # + # class User + # include ActiveSupport::Configurable + # config_accessor :allowed_access, instance_reader: false, instance_writer: false + # end + # + # User.allowed_access = false + # User.allowed_access # => false + # + # User.new.allowed_access = true # => NoMethodError + # User.new.allowed_access # => NoMethodError + # + # Or pass instance_accessor: false, to opt out both instance methods. + # + # class User + # include ActiveSupport::Configurable + # config_accessor :allowed_access, instance_accessor: false + # end + # + # User.allowed_access = false + # User.allowed_access # => false + # + # User.new.allowed_access = true # => NoMethodError + # User.new.allowed_access # => NoMethodError + # + # Also you can pass a block to set up the attribute with a default value. + # + # class User + # include ActiveSupport::Configurable + # config_accessor :hair_colors do + # [:brown, :black, :blonde, :red] + # end + # end + # + # User.hair_colors # => [:brown, :black, :blonde, :red] + def config_accessor(*names) + options = names.extract_options! + + names.each do |name| + raise NameError.new("invalid config attribute name") unless /\A[_A-Za-z]\w*\z/.match?(name) + + reader, reader_line = "def #{name}; config.#{name}; end", __LINE__ + writer, writer_line = "def #{name}=(value); config.#{name} = value; end", __LINE__ + + singleton_class.class_eval reader, __FILE__, reader_line + singleton_class.class_eval writer, __FILE__, writer_line + + unless options[:instance_accessor] == false + class_eval reader, __FILE__, reader_line unless options[:instance_reader] == false + class_eval writer, __FILE__, writer_line unless options[:instance_writer] == false + end + send("#{name}=", yield) if block_given? + end + end + private :config_accessor + end + + # Reads and writes attributes from a configuration OrderedHash. + # + # require 'active_support/configurable' + # + # class User + # include ActiveSupport::Configurable + # end + # + # user = User.new + # + # user.config.allowed_access = true + # user.config.level = 1 + # + # user.config.allowed_access # => true + # user.config.level # => 1 + def config + @_config ||= self.class.config.inheritable_copy + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/core_ext.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/core_ext.rb new file mode 100644 index 0000000000..f590605d84 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/core_ext.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Dir.glob(File.expand_path("core_ext/*.rb", __dir__)).each do |path| + require path +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/current_attributes.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/current_attributes.rb new file mode 100644 index 0000000000..4e6d8e4585 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/current_attributes.rb @@ -0,0 +1,195 @@ +# frozen_string_literal: true + +module ActiveSupport + # Abstract super class that provides a thread-isolated attributes singleton, which resets automatically + # before and after each request. This allows you to keep all the per-request attributes easily + # available to the whole system. + # + # The following full app-like example demonstrates how to use a Current class to + # facilitate easy access to the global, per-request attributes without passing them deeply + # around everywhere: + # + # # app/models/current.rb + # class Current < ActiveSupport::CurrentAttributes + # attribute :account, :user + # attribute :request_id, :user_agent, :ip_address + # + # resets { Time.zone = nil } + # + # def user=(user) + # super + # self.account = user.account + # Time.zone = user.time_zone + # end + # end + # + # # app/controllers/concerns/authentication.rb + # module Authentication + # extend ActiveSupport::Concern + # + # included do + # before_action :authenticate + # end + # + # private + # def authenticate + # if authenticated_user = User.find_by(id: cookies.encrypted[:user_id]) + # Current.user = authenticated_user + # else + # redirect_to new_session_url + # end + # end + # end + # + # # app/controllers/concerns/set_current_request_details.rb + # module SetCurrentRequestDetails + # extend ActiveSupport::Concern + # + # included do + # before_action do + # Current.request_id = request.uuid + # Current.user_agent = request.user_agent + # Current.ip_address = request.ip + # end + # end + # end + # + # class ApplicationController < ActionController::Base + # include Authentication + # include SetCurrentRequestDetails + # end + # + # class MessagesController < ApplicationController + # def create + # Current.account.messages.create(message_params) + # end + # end + # + # class Message < ApplicationRecord + # belongs_to :creator, default: -> { Current.user } + # after_create { |message| Event.create(record: message) } + # end + # + # class Event < ApplicationRecord + # before_create do + # self.request_id = Current.request_id + # self.user_agent = Current.user_agent + # self.ip_address = Current.ip_address + # end + # end + # + # A word of caution: It's easy to overdo a global singleton like Current and tangle your model as a result. + # Current should only be used for a few, top-level globals, like account, user, and request details. + # The attributes stuck in Current should be used by more or less all actions on all requests. If you start + # sticking controller-specific attributes in there, you're going to create a mess. + class CurrentAttributes + include ActiveSupport::Callbacks + define_callbacks :reset + + class << self + # Returns singleton instance for this class in this thread. If none exists, one is created. + def instance + current_instances[name] ||= new + end + + # Declares one or more attributes that will be given both class and instance accessor methods. + def attribute(*names) + generated_attribute_methods.module_eval do + names.each do |name| + define_method(name) do + attributes[name.to_sym] + end + + define_method("#{name}=") do |attribute| + attributes[name.to_sym] = attribute + end + end + end + + names.each do |name| + define_singleton_method(name) do + instance.public_send(name) + end + + define_singleton_method("#{name}=") do |attribute| + instance.public_send("#{name}=", attribute) + end + end + end + + # Calls this block after #reset is called on the instance. Used for resetting external collaborators, like Time.zone. + def resets(&block) + set_callback :reset, :after, &block + end + + delegate :set, :reset, to: :instance + + def reset_all # :nodoc: + current_instances.each_value(&:reset) + end + + def clear_all # :nodoc: + reset_all + current_instances.clear + end + + private + def generated_attribute_methods + @generated_attribute_methods ||= Module.new.tap { |mod| include mod } + end + + def current_instances + Thread.current[:current_attributes_instances] ||= {} + end + + def method_missing(name, *args, &block) + # Caches the method definition as a singleton method of the receiver. + # + # By letting #delegate handle it, we avoid an enclosure that'll capture args. + singleton_class.delegate name, to: :instance + + send(name, *args, &block) + end + end + + attr_accessor :attributes + + def initialize + @attributes = {} + end + + # Expose one or more attributes within a block. Old values are returned after the block concludes. + # Example demonstrating the common use of needing to set Current attributes outside the request-cycle: + # + # class Chat::PublicationJob < ApplicationJob + # def perform(attributes, room_number, creator) + # Current.set(person: creator) do + # Chat::Publisher.publish(attributes: attributes, room_number: room_number) + # end + # end + # end + def set(set_attributes) + old_attributes = compute_attributes(set_attributes.keys) + assign_attributes(set_attributes) + yield + ensure + assign_attributes(old_attributes) + end + + # Reset all attributes. Should be called before and after actions, when used as a per-request singleton. + def reset + run_callbacks :reset do + self.attributes = {} + end + end + + private + def assign_attributes(new_attributes) + new_attributes.each { |key, value| public_send("#{key}=", value) } + end + + def compute_attributes(keys) + keys.collect { |key| [ key, public_send(key) ] }.to_h + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/descendants_tracker.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/descendants_tracker.rb new file mode 100644 index 0000000000..a4cee788b6 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/descendants_tracker.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +module ActiveSupport + # This module provides an internal implementation to track descendants + # which is faster than iterating through ObjectSpace. + module DescendantsTracker + @@direct_descendants = {} + + class << self + def direct_descendants(klass) + @@direct_descendants[klass] || [] + end + + def descendants(klass) + arr = [] + accumulate_descendants(klass, arr) + arr + end + + def clear + if defined? ActiveSupport::Dependencies + @@direct_descendants.each do |klass, descendants| + if ActiveSupport::Dependencies.autoloaded?(klass) + @@direct_descendants.delete(klass) + else + descendants.reject! { |v| ActiveSupport::Dependencies.autoloaded?(v) } + end + end + else + @@direct_descendants.clear + end + end + + # This is the only method that is not thread safe, but is only ever called + # during the eager loading phase. + def store_inherited(klass, descendant) + (@@direct_descendants[klass] ||= []) << descendant + end + + private + def accumulate_descendants(klass, acc) + if direct_descendants = @@direct_descendants[klass] + acc.concat(direct_descendants) + direct_descendants.each { |direct_descendant| accumulate_descendants(direct_descendant, acc) } + end + end + end + + def inherited(base) + DescendantsTracker.store_inherited(self, base) + super + end + + def direct_descendants + DescendantsTracker.direct_descendants(self) + end + + def descendants + DescendantsTracker.descendants(self) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/digest.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/digest.rb new file mode 100644 index 0000000000..fba10fbdcf --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/digest.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module ActiveSupport + class Digest #:nodoc: + class < false + # checker.execute_if_updated + # # => nil + # + # FileUtils.touch("/tmp/foo") + # + # checker.updated? + # # => true + # checker.execute_if_updated + # # => "changed" + # + class EventedFileUpdateChecker #:nodoc: all + def initialize(files, dirs = {}, &block) + unless block + raise ArgumentError, "A block is required to initialize an EventedFileUpdateChecker" + end + + @ph = PathHelper.new + @files = files.map { |f| @ph.xpath(f) }.to_set + + @dirs = {} + dirs.each do |dir, exts| + @dirs[@ph.xpath(dir)] = Array(exts).map { |ext| @ph.normalize_extension(ext) } + end + + @block = block + @updated = Concurrent::AtomicBoolean.new(false) + @lcsp = @ph.longest_common_subpath(@dirs.keys) + @pid = Process.pid + @boot_mutex = Mutex.new + + if (@dtw = directories_to_watch).any? + # Loading listen triggers warnings. These are originated by a legit + # usage of attr_* macros for private attributes, but adds a lot of noise + # to our test suite. Thus, we lazy load it and disable warnings locally. + silence_warnings do + begin + require "listen" + rescue LoadError => e + raise LoadError, "Could not load the 'listen' gem. Add `gem 'listen'` to the development group of your Gemfile", e.backtrace + end + end + end + boot! + end + + def updated? + @boot_mutex.synchronize do + if @pid != Process.pid + boot! + @pid = Process.pid + @updated.make_true + end + end + @updated.true? + end + + def execute + @updated.make_false + @block.call + end + + def execute_if_updated + if updated? + yield if block_given? + execute + true + end + end + + private + def boot! + Listen.to(*@dtw, &method(:changed)).start + end + + def changed(modified, added, removed) + unless updated? + @updated.make_true if (modified + added + removed).any? { |f| watching?(f) } + end + end + + def watching?(file) + file = @ph.xpath(file) + + if @files.member?(file) + true + elsif file.directory? + false + else + ext = @ph.normalize_extension(file.extname) + + file.dirname.ascend do |dir| + if @dirs.fetch(dir, []).include?(ext) + break true + elsif dir == @lcsp || dir.root? + break false + end + end + end + end + + def directories_to_watch + dtw = (@files + @dirs.keys).map { |f| @ph.existing_parent(f) } + dtw.compact! + dtw.uniq! + + normalized_gem_paths = Gem.path.map { |path| File.join path, "" } + dtw = dtw.reject do |path| + normalized_gem_paths.any? { |gem_path| path.to_s.start_with?(gem_path) } + end + + @ph.filter_out_descendants(dtw) + end + + class PathHelper + def xpath(path) + Pathname.new(path).expand_path + end + + def normalize_extension(ext) + ext.to_s.sub(/\A\./, "") + end + + # Given a collection of Pathname objects returns the longest subpath + # common to all of them, or +nil+ if there is none. + def longest_common_subpath(paths) + return if paths.empty? + + lcsp = Pathname.new(paths[0]) + + paths[1..-1].each do |path| + until ascendant_of?(lcsp, path) + if lcsp.root? + # If we get here a root directory is not an ascendant of path. + # This may happen if there are paths in different drives on + # Windows. + return + else + lcsp = lcsp.parent + end + end + end + + lcsp + end + + # Returns the deepest existing ascendant, which could be the argument itself. + def existing_parent(dir) + dir.ascend do |ascendant| + break ascendant if ascendant.directory? + end + end + + # Filters out directories which are descendants of others in the collection (stable). + def filter_out_descendants(dirs) + return dirs if dirs.length < 2 + + dirs_sorted_by_nparts = dirs.sort_by { |dir| dir.each_filename.to_a.length } + descendants = [] + + until dirs_sorted_by_nparts.empty? + dir = dirs_sorted_by_nparts.shift + + dirs_sorted_by_nparts.reject! do |possible_descendant| + ascendant_of?(dir, possible_descendant) && descendants << possible_descendant + end + end + + # Array#- preserves order. + dirs - descendants + end + + private + + def ascendant_of?(base, other) + base != other && other.ascend do |ascendant| + break true if base == ascendant + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/execution_wrapper.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/execution_wrapper.rb new file mode 100644 index 0000000000..f48c586cad --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/execution_wrapper.rb @@ -0,0 +1,128 @@ +# frozen_string_literal: true + +require "active_support/callbacks" + +module ActiveSupport + class ExecutionWrapper + include ActiveSupport::Callbacks + + Null = Object.new # :nodoc: + def Null.complete! # :nodoc: + end + + define_callbacks :run + define_callbacks :complete + + def self.to_run(*args, &block) + set_callback(:run, *args, &block) + end + + def self.to_complete(*args, &block) + set_callback(:complete, *args, &block) + end + + RunHook = Struct.new(:hook) do # :nodoc: + def before(target) + hook_state = target.send(:hook_state) + hook_state[hook] = hook.run + end + end + + CompleteHook = Struct.new(:hook) do # :nodoc: + def before(target) + hook_state = target.send(:hook_state) + if hook_state.key?(hook) + hook.complete hook_state[hook] + end + end + alias after before + end + + # Register an object to be invoked during both the +run+ and + # +complete+ steps. + # + # +hook.complete+ will be passed the value returned from +hook.run+, + # and will only be invoked if +run+ has previously been called. + # (Mostly, this means it won't be invoked if an exception occurs in + # a preceding +to_run+ block; all ordinary +to_complete+ blocks are + # invoked in that situation.) + def self.register_hook(hook, outer: false) + if outer + to_run RunHook.new(hook), prepend: true + to_complete :after, CompleteHook.new(hook) + else + to_run RunHook.new(hook) + to_complete CompleteHook.new(hook) + end + end + + # Run this execution. + # + # Returns an instance, whose +complete!+ method *must* be invoked + # after the work has been performed. + # + # Where possible, prefer +wrap+. + def self.run! + if active? + Null + else + new.tap do |instance| + success = nil + begin + instance.run! + success = true + ensure + instance.complete! unless success + end + end + end + end + + # Perform the work in the supplied block as an execution. + def self.wrap + return yield if active? + + instance = run! + begin + yield + ensure + instance.complete! + end + end + + class << self # :nodoc: + attr_accessor :active + end + + def self.inherited(other) # :nodoc: + super + other.active = Concurrent::Hash.new + end + + self.active = Concurrent::Hash.new + + def self.active? # :nodoc: + @active[Thread.current] + end + + def run! # :nodoc: + self.class.active[Thread.current] = true + run_callbacks(:run) + end + + # Complete this in-flight execution. This method *must* be called + # exactly once on the result of any call to +run!+. + # + # Where possible, prefer +wrap+. + def complete! + run_callbacks(:complete) + ensure + self.class.active.delete Thread.current + end + + private + def hook_state + @_hook_state ||= {} + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/executor.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/executor.rb new file mode 100644 index 0000000000..ce391b07ec --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/executor.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +require "active_support/execution_wrapper" + +module ActiveSupport + class Executor < ExecutionWrapper + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/file_update_checker.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/file_update_checker.rb new file mode 100644 index 0000000000..1a0bb10815 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/file_update_checker.rb @@ -0,0 +1,163 @@ +# frozen_string_literal: true + +require "active_support/core_ext/time/calculations" + +module ActiveSupport + # FileUpdateChecker specifies the API used by Rails to watch files + # and control reloading. The API depends on four methods: + # + # * +initialize+ which expects two parameters and one block as + # described below. + # + # * +updated?+ which returns a boolean if there were updates in + # the filesystem or not. + # + # * +execute+ which executes the given block on initialization + # and updates the latest watched files and timestamp. + # + # * +execute_if_updated+ which just executes the block if it was updated. + # + # After initialization, a call to +execute_if_updated+ must execute + # the block only if there was really a change in the filesystem. + # + # This class is used by Rails to reload the I18n framework whenever + # they are changed upon a new request. + # + # i18n_reloader = ActiveSupport::FileUpdateChecker.new(paths) do + # I18n.reload! + # end + # + # ActiveSupport::Reloader.to_prepare do + # i18n_reloader.execute_if_updated + # end + class FileUpdateChecker + # It accepts two parameters on initialization. The first is an array + # of files and the second is an optional hash of directories. The hash must + # have directories as keys and the value is an array of extensions to be + # watched under that directory. + # + # This method must also receive a block that will be called once a path + # changes. The array of files and list of directories cannot be changed + # after FileUpdateChecker has been initialized. + def initialize(files, dirs = {}, &block) + unless block + raise ArgumentError, "A block is required to initialize a FileUpdateChecker" + end + + @files = files.freeze + @glob = compile_glob(dirs) + @block = block + + @watched = nil + @updated_at = nil + + @last_watched = watched + @last_update_at = updated_at(@last_watched) + end + + # Check if any of the entries were updated. If so, the watched and/or + # updated_at values are cached until the block is executed via +execute+ + # or +execute_if_updated+. + def updated? + current_watched = watched + if @last_watched.size != current_watched.size + @watched = current_watched + true + else + current_updated_at = updated_at(current_watched) + if @last_update_at < current_updated_at + @watched = current_watched + @updated_at = current_updated_at + true + else + false + end + end + end + + # Executes the given block and updates the latest watched files and + # timestamp. + def execute + @last_watched = watched + @last_update_at = updated_at(@last_watched) + @block.call + ensure + @watched = nil + @updated_at = nil + end + + # Execute the block given if updated. + def execute_if_updated + if updated? + yield if block_given? + execute + true + else + false + end + end + + private + + def watched + @watched || begin + all = @files.select { |f| File.exist?(f) } + all.concat(Dir[@glob]) if @glob + all + end + end + + def updated_at(paths) + @updated_at || max_mtime(paths) || Time.at(0) + end + + # This method returns the maximum mtime of the files in +paths+, or +nil+ + # if the array is empty. + # + # Files with a mtime in the future are ignored. Such abnormal situation + # can happen for example if the user changes the clock by hand. It is + # healthy to consider this edge case because with mtimes in the future + # reloading is not triggered. + def max_mtime(paths) + time_now = Time.now + max_mtime = nil + + # Time comparisons are performed with #compare_without_coercion because + # AS redefines these operators in a way that is much slower and does not + # bring any benefit in this particular code. + # + # Read t1.compare_without_coercion(t2) < 0 as t1 < t2. + paths.each do |path| + mtime = File.mtime(path) + + next if time_now.compare_without_coercion(mtime) < 0 + + if max_mtime.nil? || max_mtime.compare_without_coercion(mtime) < 0 + max_mtime = mtime + end + end + + max_mtime + end + + def compile_glob(hash) + hash.freeze # Freeze so changes aren't accidentally pushed + return if hash.empty? + + globs = hash.map do |key, value| + "#{escape(key)}/**/*#{compile_ext(value)}" + end + "{#{globs.join(",")}}" + end + + def escape(key) + key.gsub(",", '\,') + end + + def compile_ext(array) + array = Array(array) + return if array.empty? + ".{#{array.join(",")}}" + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gem_version.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gem_version.rb new file mode 100644 index 0000000000..4149957019 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gem_version.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module ActiveSupport + # Returns the version of the currently loaded Active Support as a Gem::Version. + def self.gem_version + Gem::Version.new VERSION::STRING + end + + module VERSION + MAJOR = 5 + MINOR = 2 + TINY = 2 + PRE = nil + + STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".") + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gzip.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gzip.rb new file mode 100644 index 0000000000..7ffa6d90a2 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/gzip.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require "zlib" +require "stringio" + +module ActiveSupport + # A convenient wrapper for the zlib standard library that allows + # compression/decompression of strings with gzip. + # + # gzip = ActiveSupport::Gzip.compress('compress me!') + # # => "\x1F\x8B\b\x00o\x8D\xCDO\x00\x03K\xCE\xCF-(J-.V\xC8MU\x04\x00R>n\x83\f\x00\x00\x00" + # + # ActiveSupport::Gzip.decompress(gzip) + # # => "compress me!" + module Gzip + class Stream < StringIO + def initialize(*) + super + set_encoding "BINARY" + end + def close; rewind; end + end + + # Decompresses a gzipped string. + def self.decompress(source) + Zlib::GzipReader.wrap(StringIO.new(source), &:read) + end + + # Compresses a string using gzip. + def self.compress(source, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) + output = Stream.new + gz = Zlib::GzipWriter.new(output, level, strategy) + gz.write(source) + gz.close + output.string + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/hash_with_indifferent_access.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/hash_with_indifferent_access.rb new file mode 100644 index 0000000000..e7768b7b44 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/hash_with_indifferent_access.rb @@ -0,0 +1,382 @@ +# frozen_string_literal: true + +require "active_support/core_ext/hash/keys" +require "active_support/core_ext/hash/reverse_merge" + +module ActiveSupport + # Implements a hash where keys :foo and "foo" are considered + # to be the same. + # + # rgb = ActiveSupport::HashWithIndifferentAccess.new + # + # rgb[:black] = '#000000' + # rgb[:black] # => '#000000' + # rgb['black'] # => '#000000' + # + # rgb['white'] = '#FFFFFF' + # rgb[:white] # => '#FFFFFF' + # rgb['white'] # => '#FFFFFF' + # + # Internally symbols are mapped to strings when used as keys in the entire + # writing interface (calling []=, merge, etc). This + # mapping belongs to the public interface. For example, given: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1) + # + # You are guaranteed that the key is returned as a string: + # + # hash.keys # => ["a"] + # + # Technically other types of keys are accepted: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1) + # hash[0] = 0 + # hash # => {"a"=>1, 0=>0} + # + # but this class is intended for use cases where strings or symbols are the + # expected keys and it is convenient to understand both as the same. For + # example the +params+ hash in Ruby on Rails. + # + # Note that core extensions define Hash#with_indifferent_access: + # + # rgb = { black: '#000000', white: '#FFFFFF' }.with_indifferent_access + # + # which may be handy. + # + # To access this class outside of Rails, require the core extension with: + # + # require "active_support/core_ext/hash/indifferent_access" + # + # which will, in turn, require this file. + class HashWithIndifferentAccess < Hash + # Returns +true+ so that Array#extract_options! finds members of + # this class. + def extractable_options? + true + end + + def with_indifferent_access + dup + end + + def nested_under_indifferent_access + self + end + + def initialize(constructor = {}) + if constructor.respond_to?(:to_hash) + super() + update(constructor) + + hash = constructor.to_hash + self.default = hash.default if hash.default + self.default_proc = hash.default_proc if hash.default_proc + else + super(constructor) + end + end + + def self.[](*args) + new.merge!(Hash[*args]) + end + + alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) + alias_method :regular_update, :update unless method_defined?(:regular_update) + + # Assigns a new value to the hash: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new + # hash[:key] = 'value' + # + # This value can be later fetched using either +:key+ or 'key'. + def []=(key, value) + regular_writer(convert_key(key), convert_value(value, for: :assignment)) + end + + alias_method :store, :[]= + + # Updates the receiver in-place, merging in the hash passed as argument: + # + # hash_1 = ActiveSupport::HashWithIndifferentAccess.new + # hash_1[:key] = 'value' + # + # hash_2 = ActiveSupport::HashWithIndifferentAccess.new + # hash_2[:key] = 'New Value!' + # + # hash_1.update(hash_2) # => {"key"=>"New Value!"} + # + # The argument can be either an + # ActiveSupport::HashWithIndifferentAccess or a regular +Hash+. + # In either case the merge respects the semantics of indifferent access. + # + # If the argument is a regular hash with keys +:key+ and +"key"+ only one + # of the values end up in the receiver, but which one is unspecified. + # + # When given a block, the value for duplicated keys will be determined + # by the result of invoking the block with the duplicated key, the value + # in the receiver, and the value in +other_hash+. The rules for duplicated + # keys follow the semantics of indifferent access: + # + # hash_1[:key] = 10 + # hash_2['key'] = 12 + # hash_1.update(hash_2) { |key, old, new| old + new } # => {"key"=>22} + def update(other_hash) + if other_hash.is_a? HashWithIndifferentAccess + super(other_hash) + else + other_hash.to_hash.each_pair do |key, value| + if block_given? && key?(key) + value = yield(convert_key(key), self[key], value) + end + regular_writer(convert_key(key), convert_value(value)) + end + self + end + end + + alias_method :merge!, :update + + # Checks the hash for a key matching the argument passed in: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new + # hash['key'] = 'value' + # hash.key?(:key) # => true + # hash.key?('key') # => true + def key?(key) + super(convert_key(key)) + end + + alias_method :include?, :key? + alias_method :has_key?, :key? + alias_method :member?, :key? + + # Same as Hash#[] where the key passed as argument can be + # either a string or a symbol: + # + # counters = ActiveSupport::HashWithIndifferentAccess.new + # counters[:foo] = 1 + # + # counters['foo'] # => 1 + # counters[:foo] # => 1 + # counters[:zoo] # => nil + def [](key) + super(convert_key(key)) + end + + # Same as Hash#fetch where the key passed as argument can be + # either a string or a symbol: + # + # counters = ActiveSupport::HashWithIndifferentAccess.new + # counters[:foo] = 1 + # + # counters.fetch('foo') # => 1 + # counters.fetch(:bar, 0) # => 0 + # counters.fetch(:bar) { |key| 0 } # => 0 + # counters.fetch(:zoo) # => KeyError: key not found: "zoo" + def fetch(key, *extras) + super(convert_key(key), *extras) + end + + if Hash.new.respond_to?(:dig) + # Same as Hash#dig where the key passed as argument can be + # either a string or a symbol: + # + # counters = ActiveSupport::HashWithIndifferentAccess.new + # counters[:foo] = { bar: 1 } + # + # counters.dig('foo', 'bar') # => 1 + # counters.dig(:foo, :bar) # => 1 + # counters.dig(:zoo) # => nil + def dig(*args) + args[0] = convert_key(args[0]) if args.size > 0 + super(*args) + end + end + + # Same as Hash#default where the key passed as argument can be + # either a string or a symbol: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new(1) + # hash.default # => 1 + # + # hash = ActiveSupport::HashWithIndifferentAccess.new { |hash, key| key } + # hash.default # => nil + # hash.default('foo') # => 'foo' + # hash.default(:foo) # => 'foo' + def default(*args) + super(*args.map { |arg| convert_key(arg) }) + end + + # Returns an array of the values at the specified indices: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new + # hash[:a] = 'x' + # hash[:b] = 'y' + # hash.values_at('a', 'b') # => ["x", "y"] + def values_at(*indices) + indices.collect { |key| self[convert_key(key)] } + end + + # Returns an array of the values at the specified indices, but also + # raises an exception when one of the keys can't be found. + # + # hash = ActiveSupport::HashWithIndifferentAccess.new + # hash[:a] = 'x' + # hash[:b] = 'y' + # hash.fetch_values('a', 'b') # => ["x", "y"] + # hash.fetch_values('a', 'c') { |key| 'z' } # => ["x", "z"] + # hash.fetch_values('a', 'c') # => KeyError: key not found: "c" + def fetch_values(*indices, &block) + indices.collect { |key| fetch(key, &block) } + end if Hash.method_defined?(:fetch_values) + + # Returns a shallow copy of the hash. + # + # hash = ActiveSupport::HashWithIndifferentAccess.new({ a: { b: 'b' } }) + # dup = hash.dup + # dup[:a][:c] = 'c' + # + # hash[:a][:c] # => "c" + # dup[:a][:c] # => "c" + def dup + self.class.new(self).tap do |new_hash| + set_defaults(new_hash) + end + end + + # This method has the same semantics of +update+, except it does not + # modify the receiver but rather returns a new hash with indifferent + # access with the result of the merge. + def merge(hash, &block) + dup.update(hash, &block) + end + + # Like +merge+ but the other way around: Merges the receiver into the + # argument and returns a new hash with indifferent access as result: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new + # hash['a'] = nil + # hash.reverse_merge(a: 0, b: 1) # => {"a"=>nil, "b"=>1} + def reverse_merge(other_hash) + super(self.class.new(other_hash)) + end + alias_method :with_defaults, :reverse_merge + + # Same semantics as +reverse_merge+ but modifies the receiver in-place. + def reverse_merge!(other_hash) + super(self.class.new(other_hash)) + end + alias_method :with_defaults!, :reverse_merge! + + # Replaces the contents of this hash with other_hash. + # + # h = { "a" => 100, "b" => 200 } + # h.replace({ "c" => 300, "d" => 400 }) # => {"c"=>300, "d"=>400} + def replace(other_hash) + super(self.class.new(other_hash)) + end + + # Removes the specified key from the hash. + def delete(key) + super(convert_key(key)) + end + + def stringify_keys!; self end + def deep_stringify_keys!; self end + def stringify_keys; dup end + def deep_stringify_keys; dup end + undef :symbolize_keys! + undef :deep_symbolize_keys! + def symbolize_keys; to_hash.symbolize_keys! end + alias_method :to_options, :symbolize_keys + def deep_symbolize_keys; to_hash.deep_symbolize_keys! end + def to_options!; self end + + def select(*args, &block) + return to_enum(:select) unless block_given? + dup.tap { |hash| hash.select!(*args, &block) } + end + + def reject(*args, &block) + return to_enum(:reject) unless block_given? + dup.tap { |hash| hash.reject!(*args, &block) } + end + + def transform_values(*args, &block) + return to_enum(:transform_values) unless block_given? + dup.tap { |hash| hash.transform_values!(*args, &block) } + end + + def transform_keys(*args, &block) + return to_enum(:transform_keys) unless block_given? + dup.tap { |hash| hash.transform_keys!(*args, &block) } + end + + def transform_keys! + return enum_for(:transform_keys!) { size } unless block_given? + keys.each do |key| + self[yield(key)] = delete(key) + end + self + end + + def slice(*keys) + keys.map! { |key| convert_key(key) } + self.class.new(super) + end + + def slice!(*keys) + keys.map! { |key| convert_key(key) } + super + end + + def compact + dup.tap(&:compact!) + end + + # Convert to a regular hash with string keys. + def to_hash + _new_hash = Hash.new + set_defaults(_new_hash) + + each do |key, value| + _new_hash[key] = convert_value(value, for: :to_hash) + end + _new_hash + end + + private + def convert_key(key) # :doc: + key.kind_of?(Symbol) ? key.to_s : key + end + + def convert_value(value, options = {}) # :doc: + if value.is_a? Hash + if options[:for] == :to_hash + value.to_hash + else + value.nested_under_indifferent_access + end + elsif value.is_a?(Array) + if options[:for] != :assignment || value.frozen? + value = value.dup + end + value.map! { |e| convert_value(e, options) } + else + value + end + end + + def set_defaults(target) # :doc: + if default_proc + target.default_proc = default_proc.dup + else + target.default = default + end + end + end +end + +# :stopdoc: + +HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/i18n_railtie.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/i18n_railtie.rb new file mode 100644 index 0000000000..ee24ebd68c --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/i18n_railtie.rb @@ -0,0 +1,118 @@ +# frozen_string_literal: true + +require "active_support" +require "active_support/file_update_checker" +require "active_support/core_ext/array/wrap" + +# :enddoc: + +module I18n + class Railtie < Rails::Railtie + config.i18n = ActiveSupport::OrderedOptions.new + config.i18n.railties_load_path = [] + config.i18n.load_path = [] + config.i18n.fallbacks = ActiveSupport::OrderedOptions.new + + # Set the i18n configuration after initialization since a lot of + # configuration is still usually done in application initializers. + config.after_initialize do |app| + I18n::Railtie.initialize_i18n(app) + end + + # Trigger i18n config before any eager loading has happened + # so it's ready if any classes require it when eager loaded. + config.before_eager_load do |app| + I18n::Railtie.initialize_i18n(app) + end + + @i18n_inited = false + + # Setup i18n configuration. + def self.initialize_i18n(app) + return if @i18n_inited + + fallbacks = app.config.i18n.delete(:fallbacks) + + # Avoid issues with setting the default_locale by disabling available locales + # check while configuring. + enforce_available_locales = app.config.i18n.delete(:enforce_available_locales) + enforce_available_locales = I18n.enforce_available_locales if enforce_available_locales.nil? + I18n.enforce_available_locales = false + + reloadable_paths = [] + app.config.i18n.each do |setting, value| + case setting + when :railties_load_path + reloadable_paths = value + app.config.i18n.load_path.unshift(*value.flat_map(&:existent)) + when :load_path + I18n.load_path += value + else + I18n.send("#{setting}=", value) + end + end + + init_fallbacks(fallbacks) if fallbacks && validate_fallbacks(fallbacks) + + # Restore available locales check so it will take place from now on. + I18n.enforce_available_locales = enforce_available_locales + + directories = watched_dirs_with_extensions(reloadable_paths) + reloader = app.config.file_watcher.new(I18n.load_path.dup, directories) do + I18n.load_path.keep_if { |p| File.exist?(p) } + I18n.load_path |= reloadable_paths.flat_map(&:existent) + + I18n.reload! + end + + app.reloaders << reloader + app.reloader.to_run do + reloader.execute_if_updated { require_unload_lock! } + end + reloader.execute + + @i18n_inited = true + end + + def self.include_fallbacks_module + I18n.backend.class.include(I18n::Backend::Fallbacks) + end + + def self.init_fallbacks(fallbacks) + include_fallbacks_module + + args = \ + case fallbacks + when ActiveSupport::OrderedOptions + [*(fallbacks[:defaults] || []) << fallbacks[:map]].compact + when Hash, Array + Array.wrap(fallbacks) + else # TrueClass + [I18n.default_locale] + end + + if args.empty? || args.first.is_a?(Hash) + args.unshift I18n.default_locale + end + + I18n.fallbacks = I18n::Locale::Fallbacks.new(*args) + end + + def self.validate_fallbacks(fallbacks) + case fallbacks + when ActiveSupport::OrderedOptions + !fallbacks.empty? + when TrueClass, Array, Hash + true + else + raise "Unexpected fallback type #{fallbacks.inspect}" + end + end + + def self.watched_dirs_with_extensions(paths) + paths.each_with_object({}) do |path, result| + result[path.absolute_current] = path.extensions + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/inflector.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/inflector.rb new file mode 100644 index 0000000000..d77f04c9c5 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/inflector.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +# in case active_support/inflector is required without the rest of active_support +require "active_support/inflector/inflections" +require "active_support/inflector/transliterate" +require "active_support/inflector/methods" + +require "active_support/inflections" +require "active_support/core_ext/string/inflections" diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/key_generator.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/key_generator.rb new file mode 100644 index 0000000000..78f7d7ca8d --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/key_generator.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +require "concurrent/map" +require "openssl" + +module ActiveSupport + # KeyGenerator is a simple wrapper around OpenSSL's implementation of PBKDF2. + # It can be used to derive a number of keys for various purposes from a given secret. + # This lets Rails applications have a single secure secret, but avoid reusing that + # key in multiple incompatible contexts. + class KeyGenerator + def initialize(secret, options = {}) + @secret = secret + # The default iterations are higher than required for our key derivation uses + # on the off chance someone uses this for password storage + @iterations = options[:iterations] || 2**16 + end + + # Returns a derived key suitable for use. The default key_size is chosen + # to be compatible with the default settings of ActiveSupport::MessageVerifier. + # i.e. OpenSSL::Digest::SHA1#block_length + def generate_key(salt, key_size = 64) + OpenSSL::PKCS5.pbkdf2_hmac_sha1(@secret, salt, @iterations, key_size) + end + end + + # CachingKeyGenerator is a wrapper around KeyGenerator which allows users to avoid + # re-executing the key generation process when it's called using the same salt and + # key_size. + class CachingKeyGenerator + def initialize(key_generator) + @key_generator = key_generator + @cache_keys = Concurrent::Map.new + end + + # Returns a derived key suitable for use. + def generate_key(*args) + @cache_keys[args.join] ||= @key_generator.generate_key(*args) + end + end + + class LegacyKeyGenerator # :nodoc: + SECRET_MIN_LENGTH = 30 # Characters + + def initialize(secret) + ensure_secret_secure(secret) + @secret = secret + end + + def generate_key(salt) + @secret + end + + private + + # To prevent users from using something insecure like "Password" we make sure that the + # secret they've provided is at least 30 characters in length. + def ensure_secret_secure(secret) + if secret.blank? + raise ArgumentError, "A secret is required to generate an integrity hash " \ + "for cookie session data. Set a secret_key_base of at least " \ + "#{SECRET_MIN_LENGTH} characters in via `bin/rails credentials:edit`." + end + + if secret.length < SECRET_MIN_LENGTH + raise ArgumentError, "Secret should be something secure, " \ + "like \"#{SecureRandom.hex(16)}\". The value you " \ + "provided, \"#{secret}\", is shorter than the minimum length " \ + "of #{SECRET_MIN_LENGTH} characters." + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger.rb new file mode 100644 index 0000000000..8152a182b4 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +require "active_support/logger_silence" +require "active_support/logger_thread_safe_level" +require "logger" + +module ActiveSupport + class Logger < ::Logger + include ActiveSupport::LoggerThreadSafeLevel + include LoggerSilence + + # Returns true if the logger destination matches one of the sources + # + # logger = Logger.new(STDOUT) + # ActiveSupport::Logger.logger_outputs_to?(logger, STDOUT) + # # => true + def self.logger_outputs_to?(logger, *sources) + logdev = logger.instance_variable_get("@logdev") + logger_source = logdev.dev if logdev.respond_to?(:dev) + sources.any? { |source| source == logger_source } + end + + # Broadcasts logs to multiple loggers. + def self.broadcast(logger) # :nodoc: + Module.new do + define_method(:add) do |*args, &block| + logger.add(*args, &block) + super(*args, &block) + end + + define_method(:<<) do |x| + logger << x + super(x) + end + + define_method(:close) do + logger.close + super() + end + + define_method(:progname=) do |name| + logger.progname = name + super(name) + end + + define_method(:formatter=) do |formatter| + logger.formatter = formatter + super(formatter) + end + + define_method(:level=) do |level| + logger.level = level + super(level) + end + + define_method(:local_level=) do |level| + logger.local_level = level if logger.respond_to?(:local_level=) + super(level) if respond_to?(:local_level=) + end + + define_method(:silence) do |level = Logger::ERROR, &block| + if logger.respond_to?(:silence) + logger.silence(level) do + if defined?(super) + super(level, &block) + else + block.call(self) + end + end + else + if defined?(super) + super(level, &block) + else + block.call(self) + end + end + end + end + end + + def initialize(*args) + super + @formatter = SimpleFormatter.new + after_initialize if respond_to? :after_initialize + end + + def add(severity, message = nil, progname = nil, &block) + return true if @logdev.nil? || (severity || UNKNOWN) < level + super + end + + Logger::Severity.constants.each do |severity| + class_eval(<<-EOT, __FILE__, __LINE__ + 1) + def #{severity.downcase}? # def debug? + Logger::#{severity} >= level # DEBUG >= level + end # end + EOT + end + + # Simple formatter which only displays the message. + class SimpleFormatter < ::Logger::Formatter + # This method is invoked when a log event occurs + def call(severity, timestamp, progname, msg) + "#{String === msg ? msg : msg.inspect}\n" + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_silence.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_silence.rb new file mode 100644 index 0000000000..89f32b6782 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_silence.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require "active_support/concern" +require "active_support/core_ext/module/attribute_accessors" +require "concurrent" + +module LoggerSilence + extend ActiveSupport::Concern + + included do + cattr_accessor :silencer, default: true + end + + # Silences the logger for the duration of the block. + def silence(temporary_level = Logger::ERROR) + if silencer + begin + old_local_level = local_level + self.local_level = temporary_level + + yield self + ensure + self.local_level = old_local_level + end + else + yield self + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_thread_safe_level.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_thread_safe_level.rb new file mode 100644 index 0000000000..ba32813d3d --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/logger_thread_safe_level.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require "active_support/concern" + +module ActiveSupport + module LoggerThreadSafeLevel # :nodoc: + extend ActiveSupport::Concern + + def after_initialize + @local_levels = Concurrent::Map.new(initial_capacity: 2) + end + + def local_log_id + Thread.current.__id__ + end + + def local_level + @local_levels[local_log_id] + end + + def local_level=(level) + if level + @local_levels[local_log_id] = level + else + @local_levels.delete(local_log_id) + end + end + + def level + local_level || super + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_encryptor.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_encryptor.rb new file mode 100644 index 0000000000..8b73270894 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_encryptor.rb @@ -0,0 +1,229 @@ +# frozen_string_literal: true + +require "openssl" +require "base64" +require "active_support/core_ext/array/extract_options" +require "active_support/core_ext/module/attribute_accessors" +require "active_support/message_verifier" +require "active_support/messages/metadata" + +module ActiveSupport + # MessageEncryptor is a simple way to encrypt values which get stored + # somewhere you don't trust. + # + # The cipher text and initialization vector are base64 encoded and returned + # to you. + # + # This can be used in situations similar to the MessageVerifier, but + # where you don't want users to be able to determine the value of the payload. + # + # len = ActiveSupport::MessageEncryptor.key_len + # salt = SecureRandom.random_bytes(len) + # key = ActiveSupport::KeyGenerator.new('password').generate_key(salt, len) # => "\x89\xE0\x156\xAC..." + # crypt = ActiveSupport::MessageEncryptor.new(key) # => # + # encrypted_data = crypt.encrypt_and_sign('my secret data') # => "NlFBTTMwOUV5UlA1QlNEN2xkY2d6eThYWWh..." + # crypt.decrypt_and_verify(encrypted_data) # => "my secret data" + # + # === Confining messages to a specific purpose + # + # By default any message can be used throughout your app. But they can also be + # confined to a specific +:purpose+. + # + # token = crypt.encrypt_and_sign("this is the chair", purpose: :login) + # + # Then that same purpose must be passed when verifying to get the data back out: + # + # crypt.decrypt_and_verify(token, purpose: :login) # => "this is the chair" + # crypt.decrypt_and_verify(token, purpose: :shipping) # => nil + # crypt.decrypt_and_verify(token) # => nil + # + # Likewise, if a message has no purpose it won't be returned when verifying with + # a specific purpose. + # + # token = crypt.encrypt_and_sign("the conversation is lively") + # crypt.decrypt_and_verify(token, purpose: :scare_tactics) # => nil + # crypt.decrypt_and_verify(token) # => "the conversation is lively" + # + # === Making messages expire + # + # By default messages last forever and verifying one year from now will still + # return the original value. But messages can be set to expire at a given + # time with +:expires_in+ or +:expires_at+. + # + # crypt.encrypt_and_sign(parcel, expires_in: 1.month) + # crypt.encrypt_and_sign(doowad, expires_at: Time.now.end_of_year) + # + # Then the messages can be verified and returned upto the expire time. + # Thereafter, verifying returns +nil+. + # + # === Rotating keys + # + # MessageEncryptor also supports rotating out old configurations by falling + # back to a stack of encryptors. Call +rotate+ to build and add an encryptor + # so +decrypt_and_verify+ will also try the fallback. + # + # By default any rotated encryptors use the values of the primary + # encryptor unless specified otherwise. + # + # You'd give your encryptor the new defaults: + # + # crypt = ActiveSupport::MessageEncryptor.new(@secret, cipher: "aes-256-gcm") + # + # Then gradually rotate the old values out by adding them as fallbacks. Any message + # generated with the old values will then work until the rotation is removed. + # + # crypt.rotate old_secret # Fallback to an old secret instead of @secret. + # crypt.rotate cipher: "aes-256-cbc" # Fallback to an old cipher instead of aes-256-gcm. + # + # Though if both the secret and the cipher was changed at the same time, + # the above should be combined into: + # + # crypt.rotate old_secret, cipher: "aes-256-cbc" + class MessageEncryptor + prepend Messages::Rotator::Encryptor + + cattr_accessor :use_authenticated_message_encryption, instance_accessor: false, default: false + + class << self + def default_cipher #:nodoc: + if use_authenticated_message_encryption + "aes-256-gcm" + else + "aes-256-cbc" + end + end + end + + module NullSerializer #:nodoc: + def self.load(value) + value + end + + def self.dump(value) + value + end + end + + module NullVerifier #:nodoc: + def self.verify(value) + value + end + + def self.generate(value) + value + end + end + + class InvalidMessage < StandardError; end + OpenSSLCipherError = OpenSSL::Cipher::CipherError + + # Initialize a new MessageEncryptor. +secret+ must be at least as long as + # the cipher key size. For the default 'aes-256-gcm' cipher, this is 256 + # bits. If you are using a user-entered secret, you can generate a suitable + # key by using ActiveSupport::KeyGenerator or a similar key + # derivation function. + # + # First additional parameter is used as the signature key for +MessageVerifier+. + # This allows you to specify keys to encrypt and sign data. + # + # ActiveSupport::MessageEncryptor.new('secret', 'signature_secret') + # + # Options: + # * :cipher - Cipher to use. Can be any cipher returned by + # OpenSSL::Cipher.ciphers. Default is 'aes-256-gcm'. + # * :digest - String of digest to use for signing. Default is + # +SHA1+. Ignored when using an AEAD cipher like 'aes-256-gcm'. + # * :serializer - Object serializer to use. Default is +Marshal+. + def initialize(secret, *signature_key_or_options) + options = signature_key_or_options.extract_options! + sign_secret = signature_key_or_options.first + @secret = secret + @sign_secret = sign_secret + @cipher = options[:cipher] || self.class.default_cipher + @digest = options[:digest] || "SHA1" unless aead_mode? + @verifier = resolve_verifier + @serializer = options[:serializer] || Marshal + end + + # Encrypt and sign a message. We need to sign the message in order to avoid + # padding attacks. Reference: https://www.limited-entropy.com/padding-oracle-attacks/. + def encrypt_and_sign(value, expires_at: nil, expires_in: nil, purpose: nil) + verifier.generate(_encrypt(value, expires_at: expires_at, expires_in: expires_in, purpose: purpose)) + end + + # Decrypt and verify a message. We need to verify the message in order to + # avoid padding attacks. Reference: https://www.limited-entropy.com/padding-oracle-attacks/. + def decrypt_and_verify(data, purpose: nil, **) + _decrypt(verifier.verify(data), purpose) + end + + # Given a cipher, returns the key length of the cipher to help generate the key of desired size + def self.key_len(cipher = default_cipher) + OpenSSL::Cipher.new(cipher).key_len + end + + private + def _encrypt(value, **metadata_options) + cipher = new_cipher + cipher.encrypt + cipher.key = @secret + + # Rely on OpenSSL for the initialization vector + iv = cipher.random_iv + cipher.auth_data = "" if aead_mode? + + encrypted_data = cipher.update(Messages::Metadata.wrap(@serializer.dump(value), metadata_options)) + encrypted_data << cipher.final + + blob = "#{::Base64.strict_encode64 encrypted_data}--#{::Base64.strict_encode64 iv}" + blob = "#{blob}--#{::Base64.strict_encode64 cipher.auth_tag}" if aead_mode? + blob + end + + def _decrypt(encrypted_message, purpose) + cipher = new_cipher + encrypted_data, iv, auth_tag = encrypted_message.split("--".freeze).map { |v| ::Base64.strict_decode64(v) } + + # Currently the OpenSSL bindings do not raise an error if auth_tag is + # truncated, which would allow an attacker to easily forge it. See + # https://github.com/ruby/openssl/issues/63 + raise InvalidMessage if aead_mode? && (auth_tag.nil? || auth_tag.bytes.length != 16) + + cipher.decrypt + cipher.key = @secret + cipher.iv = iv + if aead_mode? + cipher.auth_tag = auth_tag + cipher.auth_data = "" + end + + decrypted_data = cipher.update(encrypted_data) + decrypted_data << cipher.final + + message = Messages::Metadata.verify(decrypted_data, purpose) + @serializer.load(message) if message + rescue OpenSSLCipherError, TypeError, ArgumentError + raise InvalidMessage + end + + def new_cipher + OpenSSL::Cipher.new(@cipher) + end + + def verifier + @verifier + end + + def aead_mode? + @aead_mode ||= new_cipher.authenticated? + end + + def resolve_verifier + if aead_mode? + NullVerifier + else + MessageVerifier.new(@sign_secret || @secret, digest: @digest, serializer: NullSerializer) + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_verifier.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_verifier.rb new file mode 100644 index 0000000000..83c39c0a86 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/message_verifier.rb @@ -0,0 +1,205 @@ +# frozen_string_literal: true + +require "base64" +require "active_support/core_ext/object/blank" +require "active_support/security_utils" +require "active_support/messages/metadata" +require "active_support/messages/rotator" + +module ActiveSupport + # +MessageVerifier+ makes it easy to generate and verify messages which are + # signed to prevent tampering. + # + # This is useful for cases like remember-me tokens and auto-unsubscribe links + # where the session store isn't suitable or available. + # + # Remember Me: + # cookies[:remember_me] = @verifier.generate([@user.id, 2.weeks.from_now]) + # + # In the authentication filter: + # + # id, time = @verifier.verify(cookies[:remember_me]) + # if Time.now < time + # self.current_user = User.find(id) + # end + # + # By default it uses Marshal to serialize the message. If you want to use + # another serialization method, you can set the serializer in the options + # hash upon initialization: + # + # @verifier = ActiveSupport::MessageVerifier.new('s3Krit', serializer: YAML) + # + # +MessageVerifier+ creates HMAC signatures using SHA1 hash algorithm by default. + # If you want to use a different hash algorithm, you can change it by providing + # +:digest+ key as an option while initializing the verifier: + # + # @verifier = ActiveSupport::MessageVerifier.new('s3Krit', digest: 'SHA256') + # + # === Confining messages to a specific purpose + # + # By default any message can be used throughout your app. But they can also be + # confined to a specific +:purpose+. + # + # token = @verifier.generate("this is the chair", purpose: :login) + # + # Then that same purpose must be passed when verifying to get the data back out: + # + # @verifier.verified(token, purpose: :login) # => "this is the chair" + # @verifier.verified(token, purpose: :shipping) # => nil + # @verifier.verified(token) # => nil + # + # @verifier.verify(token, purpose: :login) # => "this is the chair" + # @verifier.verify(token, purpose: :shipping) # => ActiveSupport::MessageVerifier::InvalidSignature + # @verifier.verify(token) # => ActiveSupport::MessageVerifier::InvalidSignature + # + # Likewise, if a message has no purpose it won't be returned when verifying with + # a specific purpose. + # + # token = @verifier.generate("the conversation is lively") + # @verifier.verified(token, purpose: :scare_tactics) # => nil + # @verifier.verified(token) # => "the conversation is lively" + # + # @verifier.verify(token, purpose: :scare_tactics) # => ActiveSupport::MessageVerifier::InvalidSignature + # @verifier.verify(token) # => "the conversation is lively" + # + # === Making messages expire + # + # By default messages last forever and verifying one year from now will still + # return the original value. But messages can be set to expire at a given + # time with +:expires_in+ or +:expires_at+. + # + # @verifier.generate(parcel, expires_in: 1.month) + # @verifier.generate(doowad, expires_at: Time.now.end_of_year) + # + # Then the messages can be verified and returned upto the expire time. + # Thereafter, the +verified+ method returns +nil+ while +verify+ raises + # ActiveSupport::MessageVerifier::InvalidSignature. + # + # === Rotating keys + # + # MessageVerifier also supports rotating out old configurations by falling + # back to a stack of verifiers. Call +rotate+ to build and add a verifier to + # so either +verified+ or +verify+ will also try verifying with the fallback. + # + # By default any rotated verifiers use the values of the primary + # verifier unless specified otherwise. + # + # You'd give your verifier the new defaults: + # + # verifier = ActiveSupport::MessageVerifier.new(@secret, digest: "SHA512", serializer: JSON) + # + # Then gradually rotate the old values out by adding them as fallbacks. Any message + # generated with the old values will then work until the rotation is removed. + # + # verifier.rotate old_secret # Fallback to an old secret instead of @secret. + # verifier.rotate digest: "SHA256" # Fallback to an old digest instead of SHA512. + # verifier.rotate serializer: Marshal # Fallback to an old serializer instead of JSON. + # + # Though the above would most likely be combined into one rotation: + # + # verifier.rotate old_secret, digest: "SHA256", serializer: Marshal + class MessageVerifier + prepend Messages::Rotator::Verifier + + class InvalidSignature < StandardError; end + + def initialize(secret, options = {}) + raise ArgumentError, "Secret should not be nil." unless secret + @secret = secret + @digest = options[:digest] || "SHA1" + @serializer = options[:serializer] || Marshal + end + + # Checks if a signed message could have been generated by signing an object + # with the +MessageVerifier+'s secret. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # signed_message = verifier.generate 'a private message' + # verifier.valid_message?(signed_message) # => true + # + # tampered_message = signed_message.chop # editing the message invalidates the signature + # verifier.valid_message?(tampered_message) # => false + def valid_message?(signed_message) + return if signed_message.nil? || !signed_message.valid_encoding? || signed_message.blank? + + data, digest = signed_message.split("--".freeze) + data.present? && digest.present? && ActiveSupport::SecurityUtils.secure_compare(digest, generate_digest(data)) + end + + # Decodes the signed message using the +MessageVerifier+'s secret. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # + # signed_message = verifier.generate 'a private message' + # verifier.verified(signed_message) # => 'a private message' + # + # Returns +nil+ if the message was not signed with the same secret. + # + # other_verifier = ActiveSupport::MessageVerifier.new 'd1ff3r3nt-s3Krit' + # other_verifier.verified(signed_message) # => nil + # + # Returns +nil+ if the message is not Base64-encoded. + # + # invalid_message = "f--46a0120593880c733a53b6dad75b42ddc1c8996d" + # verifier.verified(invalid_message) # => nil + # + # Raises any error raised while decoding the signed message. + # + # incompatible_message = "test--dad7b06c94abba8d46a15fafaef56c327665d5ff" + # verifier.verified(incompatible_message) # => TypeError: incompatible marshal file format + def verified(signed_message, purpose: nil, **) + if valid_message?(signed_message) + begin + data = signed_message.split("--".freeze)[0] + message = Messages::Metadata.verify(decode(data), purpose) + @serializer.load(message) if message + rescue ArgumentError => argument_error + return if argument_error.message.include?("invalid base64") + raise + end + end + end + + # Decodes the signed message using the +MessageVerifier+'s secret. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # signed_message = verifier.generate 'a private message' + # + # verifier.verify(signed_message) # => 'a private message' + # + # Raises +InvalidSignature+ if the message was not signed with the same + # secret or was not Base64-encoded. + # + # other_verifier = ActiveSupport::MessageVerifier.new 'd1ff3r3nt-s3Krit' + # other_verifier.verify(signed_message) # => ActiveSupport::MessageVerifier::InvalidSignature + def verify(*args) + verified(*args) || raise(InvalidSignature) + end + + # Generates a signed message for the provided value. + # + # The message is signed with the +MessageVerifier+'s secret. Without knowing + # the secret, the original value cannot be extracted from the message. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # verifier.generate 'a private message' # => "BAhJIhRwcml2YXRlLW1lc3NhZ2UGOgZFVA==--e2d724331ebdee96a10fb99b089508d1c72bd772" + def generate(value, expires_at: nil, expires_in: nil, purpose: nil) + data = encode(Messages::Metadata.wrap(@serializer.dump(value), expires_at: expires_at, expires_in: expires_in, purpose: purpose)) + "#{data}--#{generate_digest(data)}" + end + + private + def encode(data) + ::Base64.strict_encode64(data) + end + + def decode(data) + ::Base64.strict_decode64(data) + end + + def generate_digest(data) + require "openssl" unless defined?(OpenSSL) + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.const_get(@digest).new, @secret, data) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/option_merger.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/option_merger.rb new file mode 100644 index 0000000000..ab9ca727f6 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/option_merger.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require "active_support/core_ext/hash/deep_merge" + +module ActiveSupport + class OptionMerger #:nodoc: + instance_methods.each do |method| + undef_method(method) if method !~ /^(__|instance_eval|class|object_id)/ + end + + def initialize(context, options) + @context, @options = context, options + end + + private + def method_missing(method, *arguments, &block) + if arguments.first.is_a?(Proc) + proc = arguments.pop + arguments << lambda { |*args| @options.deep_merge(proc.call(*args)) } + else + arguments << (arguments.last.respond_to?(:to_hash) ? @options.deep_merge(arguments.pop) : @options.dup) + end + + @context.__send__(method, *arguments, &block) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_hash.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_hash.rb new file mode 100644 index 0000000000..5758513021 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_hash.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require "yaml" + +YAML.add_builtin_type("omap") do |type, val| + ActiveSupport::OrderedHash[val.map { |v| v.to_a.first }] +end + +module ActiveSupport + # DEPRECATED: ActiveSupport::OrderedHash implements a hash that preserves + # insertion order. + # + # oh = ActiveSupport::OrderedHash.new + # oh[:a] = 1 + # oh[:b] = 2 + # oh.keys # => [:a, :b], this order is guaranteed + # + # Also, maps the +omap+ feature for YAML files + # (See http://yaml.org/type/omap.html) to support ordered items + # when loading from yaml. + # + # ActiveSupport::OrderedHash is namespaced to prevent conflicts + # with other implementations. + class OrderedHash < ::Hash + def to_yaml_type + "!tag:yaml.org,2002:omap" + end + + def encode_with(coder) + coder.represent_seq "!omap", map { |k, v| { k => v } } + end + + def select(*args, &block) + dup.tap { |hash| hash.select!(*args, &block) } + end + + def reject(*args, &block) + dup.tap { |hash| hash.reject!(*args, &block) } + end + + def nested_under_indifferent_access + self + end + + # Returns true to make sure that this hash is extractable via Array#extract_options! + def extractable_options? + true + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_options.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_options.rb new file mode 100644 index 0000000000..c4e419f546 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/ordered_options.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: true + +require "active_support/core_ext/object/blank" + +module ActiveSupport + # Usually key value pairs are handled something like this: + # + # h = {} + # h[:boy] = 'John' + # h[:girl] = 'Mary' + # h[:boy] # => 'John' + # h[:girl] # => 'Mary' + # h[:dog] # => nil + # + # Using +OrderedOptions+, the above code could be reduced to: + # + # h = ActiveSupport::OrderedOptions.new + # h.boy = 'John' + # h.girl = 'Mary' + # h.boy # => 'John' + # h.girl # => 'Mary' + # h.dog # => nil + # + # To raise an exception when the value is blank, append a + # bang to the key name, like: + # + # h.dog! # => raises KeyError: :dog is blank + # + class OrderedOptions < Hash + alias_method :_get, :[] # preserve the original #[] method + protected :_get # make it protected + + def []=(key, value) + super(key.to_sym, value) + end + + def [](key) + super(key.to_sym) + end + + def method_missing(name, *args) + name_string = name.to_s + if name_string.chomp!("=") + self[name_string] = args.first + else + bangs = name_string.chomp!("!") + + if bangs + self[name_string].presence || raise(KeyError.new(":#{name_string} is blank")) + else + self[name_string] + end + end + end + + def respond_to_missing?(name, include_private) + true + end + end + + # +InheritableOptions+ provides a constructor to build an +OrderedOptions+ + # hash inherited from another hash. + # + # Use this if you already have some hash and you want to create a new one based on it. + # + # h = ActiveSupport::InheritableOptions.new({ girl: 'Mary', boy: 'John' }) + # h.girl # => 'Mary' + # h.boy # => 'John' + class InheritableOptions < OrderedOptions + def initialize(parent = nil) + if parent.kind_of?(OrderedOptions) + # use the faster _get when dealing with OrderedOptions + super() { |h, k| parent._get(k) } + elsif parent + super() { |h, k| parent[k] } + else + super() + end + end + + def inheritable_copy + self.class.new(self) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/proxy_object.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/proxy_object.rb new file mode 100644 index 0000000000..0965fcd2d9 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/proxy_object.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module ActiveSupport + # A class with no predefined methods that behaves similarly to Builder's + # BlankSlate. Used for proxy classes. + class ProxyObject < ::BasicObject + undef_method :== + undef_method :equal? + + # Let ActiveSupport::ProxyObject at least raise exceptions. + def raise(*args) + ::Object.send(:raise, *args) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rails.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rails.rb new file mode 100644 index 0000000000..5c34a0abb3 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rails.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# This is private interface. +# +# Rails components cherry pick from Active Support as needed, but there are a +# few features that are used for sure in some way or another and it is not worth +# putting individual requires absolutely everywhere. Think blank? for example. +# +# This file is loaded by every Rails component except Active Support itself, +# but it does not belong to the Rails public interface. It is internal to +# Rails and can change anytime. + +# Defines Object#blank? and Object#present?. +require "active_support/core_ext/object/blank" + +# Rails own autoload, eager_load, etc. +require "active_support/dependencies/autoload" + +# Support for ClassMethods and the included macro. +require "active_support/concern" + +# Defines Class#class_attribute. +require "active_support/core_ext/class/attribute" + +# Defines Module#delegate. +require "active_support/core_ext/module/delegation" + +# Defines ActiveSupport::Deprecation. +require "active_support/deprecation" + +# Defines Regexp#match?. +# +# This should be removed when Rails needs Ruby 2.4 or later, and the require +# added where other Regexp extensions are being used (easy to grep). +require "active_support/core_ext/regexp" diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/railtie.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/railtie.rb new file mode 100644 index 0000000000..605b50d346 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/railtie.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require "active_support" +require "active_support/i18n_railtie" + +module ActiveSupport + class Railtie < Rails::Railtie # :nodoc: + config.active_support = ActiveSupport::OrderedOptions.new + + config.eager_load_namespaces << ActiveSupport + + initializer "active_support.set_authenticated_message_encryption" do |app| + config.after_initialize do + unless app.config.active_support.use_authenticated_message_encryption.nil? + ActiveSupport::MessageEncryptor.use_authenticated_message_encryption = + app.config.active_support.use_authenticated_message_encryption + end + end + end + + initializer "active_support.reset_all_current_attributes_instances" do |app| + app.reloader.before_class_unload { ActiveSupport::CurrentAttributes.clear_all } + app.executor.to_run { ActiveSupport::CurrentAttributes.reset_all } + app.executor.to_complete { ActiveSupport::CurrentAttributes.reset_all } + end + + initializer "active_support.deprecation_behavior" do |app| + if deprecation = app.config.active_support.deprecation + ActiveSupport::Deprecation.behavior = deprecation + end + end + + # Sets the default value for Time.zone + # If assigned value cannot be matched to a TimeZone, an exception will be raised. + initializer "active_support.initialize_time_zone" do |app| + begin + TZInfo::DataSource.get + rescue TZInfo::DataSourceNotFound => e + raise e.exception "tzinfo-data is not present. Please add gem 'tzinfo-data' to your Gemfile and run bundle install" + end + require "active_support/core_ext/time/zones" + Time.zone_default = Time.find_zone!(app.config.time_zone) + end + + # Sets the default week start + # If assigned value is not a valid day symbol (e.g. :sunday, :monday, ...), an exception will be raised. + initializer "active_support.initialize_beginning_of_week" do |app| + require "active_support/core_ext/date/calculations" + beginning_of_week_default = Date.find_beginning_of_week!(app.config.beginning_of_week) + + Date.beginning_of_week_default = beginning_of_week_default + end + + initializer "active_support.require_master_key" do |app| + if app.config.respond_to?(:require_master_key) && app.config.require_master_key + begin + app.credentials.key + rescue ActiveSupport::EncryptedFile::MissingKeyError => error + $stderr.puts error.message + exit 1 + end + end + end + + initializer "active_support.set_configs" do |app| + app.config.active_support.each do |k, v| + k = "#{k}=" + ActiveSupport.send(k, v) if ActiveSupport.respond_to? k + end + end + + initializer "active_support.set_hash_digest_class" do |app| + config.after_initialize do + if app.config.active_support.use_sha1_digests + ActiveSupport::Digest.hash_digest_class = ::Digest::SHA1 + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/reloader.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/reloader.rb new file mode 100644 index 0000000000..b26d9c3665 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/reloader.rb @@ -0,0 +1,131 @@ +# frozen_string_literal: true + +require "active_support/execution_wrapper" + +module ActiveSupport + #-- + # This class defines several callbacks: + # + # to_prepare -- Run once at application startup, and also from + # +to_run+. + # + # to_run -- Run before a work run that is reloading. If + # +reload_classes_only_on_change+ is true (the default), the class + # unload will have already occurred. + # + # to_complete -- Run after a work run that has reloaded. If + # +reload_classes_only_on_change+ is false, the class unload will + # have occurred after the work run, but before this callback. + # + # before_class_unload -- Run immediately before the classes are + # unloaded. + # + # after_class_unload -- Run immediately after the classes are + # unloaded. + # + class Reloader < ExecutionWrapper + define_callbacks :prepare + + define_callbacks :class_unload + + # Registers a callback that will run once at application startup and every time the code is reloaded. + def self.to_prepare(*args, &block) + set_callback(:prepare, *args, &block) + end + + # Registers a callback that will run immediately before the classes are unloaded. + def self.before_class_unload(*args, &block) + set_callback(:class_unload, *args, &block) + end + + # Registers a callback that will run immediately after the classes are unloaded. + def self.after_class_unload(*args, &block) + set_callback(:class_unload, :after, *args, &block) + end + + to_run(:after) { self.class.prepare! } + + # Initiate a manual reload + def self.reload! + executor.wrap do + new.tap do |instance| + begin + instance.run! + ensure + instance.complete! + end + end + end + prepare! + end + + def self.run! # :nodoc: + if check! + super + else + Null + end + end + + # Run the supplied block as a work unit, reloading code as needed + def self.wrap + executor.wrap do + super + end + end + + class_attribute :executor, default: Executor + class_attribute :check, default: lambda { false } + + def self.check! # :nodoc: + @should_reload ||= check.call + end + + def self.reloaded! # :nodoc: + @should_reload = false + end + + def self.prepare! # :nodoc: + new.run_callbacks(:prepare) + end + + def initialize + super + @locked = false + end + + # Acquire the ActiveSupport::Dependencies::Interlock unload lock, + # ensuring it will be released automatically + def require_unload_lock! + unless @locked + ActiveSupport::Dependencies.interlock.start_unloading + @locked = true + end + end + + # Release the unload lock if it has been previously obtained + def release_unload_lock! + if @locked + @locked = false + ActiveSupport::Dependencies.interlock.done_unloading + end + end + + def run! # :nodoc: + super + release_unload_lock! + end + + def class_unload!(&block) # :nodoc: + require_unload_lock! + run_callbacks(:class_unload, &block) + end + + def complete! # :nodoc: + super + self.class.reloaded! + ensure + release_unload_lock! + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rescuable.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rescuable.rb new file mode 100644 index 0000000000..e0fa29cacb --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/rescuable.rb @@ -0,0 +1,174 @@ +# frozen_string_literal: true + +require "active_support/concern" +require "active_support/core_ext/class/attribute" +require "active_support/core_ext/string/inflections" + +module ActiveSupport + # Rescuable module adds support for easier exception handling. + module Rescuable + extend Concern + + included do + class_attribute :rescue_handlers, default: [] + end + + module ClassMethods + # Rescue exceptions raised in controller actions. + # + # rescue_from receives a series of exception classes or class + # names, and a trailing :with option with the name of a method + # or a Proc object to be called to handle them. Alternatively a block can + # be given. + # + # Handlers that take one argument will be called with the exception, so + # that the exception can be inspected when dealing with it. + # + # Handlers are inherited. They are searched from right to left, from + # bottom to top, and up the hierarchy. The handler of the first class for + # which exception.is_a?(klass) holds true is the one invoked, if + # any. + # + # class ApplicationController < ActionController::Base + # rescue_from User::NotAuthorized, with: :deny_access # self defined exception + # rescue_from ActiveRecord::RecordInvalid, with: :show_errors + # + # rescue_from 'MyAppError::Base' do |exception| + # render xml: exception, status: 500 + # end + # + # private + # def deny_access + # ... + # end + # + # def show_errors(exception) + # exception.record.new_record? ? ... + # end + # end + # + # Exceptions raised inside exception handlers are not propagated up. + def rescue_from(*klasses, with: nil, &block) + unless with + if block_given? + with = block + else + raise ArgumentError, "Need a handler. Pass the with: keyword argument or provide a block." + end + end + + klasses.each do |klass| + key = if klass.is_a?(Module) && klass.respond_to?(:===) + klass.name + elsif klass.is_a?(String) + klass + else + raise ArgumentError, "#{klass.inspect} must be an Exception class or a String referencing an Exception class" + end + + # Put the new handler at the end because the list is read in reverse. + self.rescue_handlers += [[key, with]] + end + end + + # Matches an exception to a handler based on the exception class. + # + # If no handler matches the exception, check for a handler matching the + # (optional) exception.cause. If no handler matches the exception or its + # cause, this returns +nil+, so you can deal with unhandled exceptions. + # Be sure to re-raise unhandled exceptions if this is what you expect. + # + # begin + # … + # rescue => exception + # rescue_with_handler(exception) || raise + # end + # + # Returns the exception if it was handled and +nil+ if it was not. + def rescue_with_handler(exception, object: self, visited_exceptions: []) + visited_exceptions << exception + + if handler = handler_for_rescue(exception, object: object) + handler.call exception + exception + elsif exception + if visited_exceptions.include?(exception.cause) + nil + else + rescue_with_handler(exception.cause, object: object, visited_exceptions: visited_exceptions) + end + end + end + + def handler_for_rescue(exception, object: self) #:nodoc: + case rescuer = find_rescue_handler(exception) + when Symbol + method = object.method(rescuer) + if method.arity == 0 + -> e { method.call } + else + method + end + when Proc + if rescuer.arity == 0 + -> e { object.instance_exec(&rescuer) } + else + -> e { object.instance_exec(e, &rescuer) } + end + end + end + + private + def find_rescue_handler(exception) + if exception + # Handlers are in order of declaration but the most recently declared + # is the highest priority match, so we search for matching handlers + # in reverse. + _, handler = rescue_handlers.reverse_each.detect do |class_or_name, _| + if klass = constantize_rescue_handler_class(class_or_name) + klass === exception + end + end + + handler + end + end + + def constantize_rescue_handler_class(class_or_name) + case class_or_name + when String, Symbol + begin + # Try a lexical lookup first since we support + # + # class Super + # rescue_from 'Error', with: … + # end + # + # class Sub + # class Error < StandardError; end + # end + # + # so an Error raised in Sub will hit the 'Error' handler. + const_get class_or_name + rescue NameError + class_or_name.safe_constantize + end + else + class_or_name + end + end + end + + # Delegates to the class method, but uses the instance as the subject for + # rescue_from handlers (method calls, instance_exec blocks). + def rescue_with_handler(exception) + self.class.rescue_with_handler exception, object: self + end + + # Internal handler lookup. Delegates to class method. Some libraries call + # this directly, so keeping it around for compatibility. + def handler_for_rescue(exception) #:nodoc: + self.class.handler_for_rescue exception, object: self + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/security_utils.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/security_utils.rb new file mode 100644 index 0000000000..20b6b9cd3f --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/security_utils.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require "digest/sha2" + +module ActiveSupport + module SecurityUtils + # Constant time string comparison, for fixed length strings. + # + # The values compared should be of fixed length, such as strings + # that have already been processed by HMAC. Raises in case of length mismatch. + def fixed_length_secure_compare(a, b) + raise ArgumentError, "string length mismatch." unless a.bytesize == b.bytesize + + l = a.unpack "C#{a.bytesize}" + + res = 0 + b.each_byte { |byte| res |= byte ^ l.shift } + res == 0 + end + module_function :fixed_length_secure_compare + + # Constant time string comparison, for variable length strings. + # + # The values are first processed by SHA256, so that we don't leak length info + # via timing attacks. + def secure_compare(a, b) + fixed_length_secure_compare(::Digest::SHA256.hexdigest(a), ::Digest::SHA256.hexdigest(b)) && a == b + end + module_function :secure_compare + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/string_inquirer.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/string_inquirer.rb new file mode 100644 index 0000000000..a3af36720e --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/string_inquirer.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module ActiveSupport + # Wrapping a string in this class gives you a prettier way to test + # for equality. The value returned by Rails.env is wrapped + # in a StringInquirer object, so instead of calling this: + # + # Rails.env == 'production' + # + # you can call this: + # + # Rails.env.production? + # + # == Instantiating a new StringInquirer + # + # vehicle = ActiveSupport::StringInquirer.new('car') + # vehicle.car? # => true + # vehicle.bike? # => false + class StringInquirer < String + private + + def respond_to_missing?(method_name, include_private = false) + (method_name[-1] == "?") || super + end + + def method_missing(method_name, *arguments) + if method_name[-1] == "?" + self == method_name[0..-2] + else + super + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/subscriber.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/subscriber.rb new file mode 100644 index 0000000000..9291b48ce8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/subscriber.rb @@ -0,0 +1,130 @@ +# frozen_string_literal: true + +require "active_support/per_thread_registry" +require "active_support/notifications" + +module ActiveSupport + # ActiveSupport::Subscriber is an object set to consume + # ActiveSupport::Notifications. The subscriber dispatches notifications to + # a registered object based on its given namespace. + # + # An example would be an Active Record subscriber responsible for collecting + # statistics about queries: + # + # module ActiveRecord + # class StatsSubscriber < ActiveSupport::Subscriber + # attach_to :active_record + # + # def sql(event) + # Statsd.timing("sql.#{event.payload[:name]}", event.duration) + # end + # end + # end + # + # After configured, whenever a "sql.active_record" notification is published, + # it will properly dispatch the event (ActiveSupport::Notifications::Event) to + # the +sql+ method. + class Subscriber + class << self + # Attach the subscriber to a namespace. + def attach_to(namespace, subscriber = new, notifier = ActiveSupport::Notifications) + @namespace = namespace + @subscriber = subscriber + @notifier = notifier + + subscribers << subscriber + + # Add event subscribers for all existing methods on the class. + subscriber.public_methods(false).each do |event| + add_event_subscriber(event) + end + end + + # Adds event subscribers for all new methods added to the class. + def method_added(event) + # Only public methods are added as subscribers, and only if a notifier + # has been set up. This means that subscribers will only be set up for + # classes that call #attach_to. + if public_method_defined?(event) && notifier + add_event_subscriber(event) + end + end + + def subscribers + @@subscribers ||= [] + end + + # TODO Change this to private once we've dropped Ruby 2.2 support. + # Workaround for Ruby 2.2 "private attribute?" warning. + protected + + attr_reader :subscriber, :notifier, :namespace + + private + + def add_event_subscriber(event) # :doc: + return if %w{ start finish }.include?(event.to_s) + + pattern = "#{event}.#{namespace}" + + # Don't add multiple subscribers (eg. if methods are redefined). + return if subscriber.patterns.include?(pattern) + + subscriber.patterns << pattern + notifier.subscribe(pattern, subscriber) + end + end + + attr_reader :patterns # :nodoc: + + def initialize + @queue_key = [self.class.name, object_id].join "-" + @patterns = [] + super + end + + def start(name, id, payload) + e = ActiveSupport::Notifications::Event.new(name, now, nil, id, payload) + parent = event_stack.last + parent << e if parent + + event_stack.push e + end + + def finish(name, id, payload) + finished = now + event = event_stack.pop + event.end = finished + event.payload.merge!(payload) + + method = name.split(".".freeze).first + send(method, event) + end + + private + + def event_stack + SubscriberQueueRegistry.instance.get_queue(@queue_key) + end + + def now + Process.clock_gettime(Process::CLOCK_MONOTONIC) + end + end + + # This is a registry for all the event stacks kept for subscribers. + # + # See the documentation of ActiveSupport::PerThreadRegistry + # for further details. + class SubscriberQueueRegistry # :nodoc: + extend PerThreadRegistry + + def initialize + @registry = {} + end + + def get_queue(queue_key) + @registry[queue_key] ||= [] + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb new file mode 100644 index 0000000000..8561cba9f1 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +require "active_support/core_ext/module/delegation" +require "active_support/core_ext/object/blank" +require "logger" +require "active_support/logger" + +module ActiveSupport + # Wraps any standard Logger object to provide tagging capabilities. + # + # logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) + # logger.tagged('BCX') { logger.info 'Stuff' } # Logs "[BCX] Stuff" + # logger.tagged('BCX', "Jason") { logger.info 'Stuff' } # Logs "[BCX] [Jason] Stuff" + # logger.tagged('BCX') { logger.tagged('Jason') { logger.info 'Stuff' } } # Logs "[BCX] [Jason] Stuff" + # + # This is used by the default Rails.logger as configured by Railties to make + # it easy to stamp log lines with subdomains, request ids, and anything else + # to aid debugging of multi-user production applications. + module TaggedLogging + module Formatter # :nodoc: + # This method is invoked when a log event occurs. + def call(severity, timestamp, progname, msg) + super(severity, timestamp, progname, "#{tags_text}#{msg}") + end + + def tagged(*tags) + new_tags = push_tags(*tags) + yield self + ensure + pop_tags(new_tags.size) + end + + def push_tags(*tags) + tags.flatten.reject(&:blank?).tap do |new_tags| + current_tags.concat new_tags + end + end + + def pop_tags(size = 1) + current_tags.pop size + end + + def clear_tags! + current_tags.clear + end + + def current_tags + # We use our object ID here to avoid conflicting with other instances + thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{object_id}".freeze + Thread.current[thread_key] ||= [] + end + + def tags_text + tags = current_tags + if tags.any? + tags.collect { |tag| "[#{tag}] " }.join + end + end + end + + def self.new(logger) + # Ensure we set a default formatter so we aren't extending nil! + logger.formatter ||= ActiveSupport::Logger::SimpleFormatter.new + logger.formatter.extend Formatter + logger.extend(self) + end + + delegate :push_tags, :pop_tags, :clear_tags!, to: :formatter + + def tagged(*tags) + formatter.tagged(*tags) { yield self } + end + + def flush + clear_tags! + super if defined?(super) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/test_case.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/test_case.rb new file mode 100644 index 0000000000..69d69c84ef --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/test_case.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +gem "minitest" # make sure we get the gem, not stdlib +require "minitest" +require "active_support/testing/tagged_logging" +require "active_support/testing/setup_and_teardown" +require "active_support/testing/assertions" +require "active_support/testing/deprecation" +require "active_support/testing/declarative" +require "active_support/testing/isolation" +require "active_support/testing/constant_lookup" +require "active_support/testing/time_helpers" +require "active_support/testing/file_fixtures" + +module ActiveSupport + class TestCase < ::Minitest::Test + Assertion = Minitest::Assertion + + class << self + # Sets the order in which test cases are run. + # + # ActiveSupport::TestCase.test_order = :random # => :random + # + # Valid values are: + # * +:random+ (to run tests in random order) + # * +:parallel+ (to run tests in parallel) + # * +:sorted+ (to run tests alphabetically by method name) + # * +:alpha+ (equivalent to +:sorted+) + def test_order=(new_order) + ActiveSupport.test_order = new_order + end + + # Returns the order in which test cases are run. + # + # ActiveSupport::TestCase.test_order # => :random + # + # Possible values are +:random+, +:parallel+, +:alpha+, +:sorted+. + # Defaults to +:random+. + def test_order + ActiveSupport.test_order ||= :random + end + end + + alias_method :method_name, :name + + include ActiveSupport::Testing::TaggedLogging + prepend ActiveSupport::Testing::SetupAndTeardown + include ActiveSupport::Testing::Assertions + include ActiveSupport::Testing::Deprecation + include ActiveSupport::Testing::TimeHelpers + include ActiveSupport::Testing::FileFixtures + extend ActiveSupport::Testing::Declarative + + # test/unit backwards compatibility methods + alias :assert_raise :assert_raises + alias :assert_not_empty :refute_empty + alias :assert_not_equal :refute_equal + alias :assert_not_in_delta :refute_in_delta + alias :assert_not_in_epsilon :refute_in_epsilon + alias :assert_not_includes :refute_includes + alias :assert_not_instance_of :refute_instance_of + alias :assert_not_kind_of :refute_kind_of + alias :assert_no_match :refute_match + alias :assert_not_nil :refute_nil + alias :assert_not_operator :refute_operator + alias :assert_not_predicate :refute_predicate + alias :assert_not_respond_to :refute_respond_to + alias :assert_not_same :refute_same + + ActiveSupport.run_load_hooks(:active_support_test_case, self) + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/values/unicode_tables.dat b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/values/unicode_tables.dat new file mode 100644 index 0000000000000000000000000000000000000000..f7d9c48bbe80b850c449cc42a89071055186f042 GIT binary patch literal 1116857 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
Vx`{0LQYMTYFg=#Je$`-sg{+@ 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

1rfES|OxuF2n63p`F?|cNVuluE#f&Y; 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 =PT5r?}VM;zgT9C4%za>P+C$Pq`oAV(bIf*f(I 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 literal 0 HcmV?d00001 diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/version.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/version.rb new file mode 100644 index 0000000000..928838c837 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/version.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require_relative "gem_version" + +module ActiveSupport + # Returns the version of the currently loaded ActiveSupport as a Gem::Version + def self.version + gem_version + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/jdom.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/jdom.rb new file mode 100644 index 0000000000..7f94a64016 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/jdom.rb @@ -0,0 +1,183 @@ +# frozen_string_literal: true + +raise "JRuby is required to use the JDOM backend for XmlMini" unless RUBY_PLATFORM.include?("java") + +require "jruby" +include Java + +require "active_support/core_ext/object/blank" + +java_import javax.xml.parsers.DocumentBuilder unless defined? DocumentBuilder +java_import javax.xml.parsers.DocumentBuilderFactory unless defined? DocumentBuilderFactory +java_import java.io.StringReader unless defined? StringReader +java_import org.xml.sax.InputSource unless defined? InputSource +java_import org.xml.sax.Attributes unless defined? Attributes +java_import org.w3c.dom.Node unless defined? Node + +module ActiveSupport + module XmlMini_JDOM #:nodoc: + extend self + + CONTENT_KEY = "__content__".freeze + + NODE_TYPE_NAMES = %w{ATTRIBUTE_NODE CDATA_SECTION_NODE COMMENT_NODE DOCUMENT_FRAGMENT_NODE + DOCUMENT_NODE DOCUMENT_TYPE_NODE ELEMENT_NODE ENTITY_NODE ENTITY_REFERENCE_NODE NOTATION_NODE + PROCESSING_INSTRUCTION_NODE TEXT_NODE} + + node_type_map = {} + NODE_TYPE_NAMES.each { |type| node_type_map[Node.send(type)] = type } + + # Parse an XML Document string or IO into a simple hash using Java's jdom. + # data:: + # XML Document string or IO to parse + def parse(data) + if data.respond_to?(:read) + data = data.read + end + + if data.blank? + {} + else + @dbf = DocumentBuilderFactory.new_instance + # secure processing of java xml + # https://archive.is/9xcQQ + @dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) + @dbf.setFeature("http://xml.org/sax/features/external-general-entities", false) + @dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false) + @dbf.setFeature(javax.xml.XMLConstants::FEATURE_SECURE_PROCESSING, true) + xml_string_reader = StringReader.new(data) + xml_input_source = InputSource.new(xml_string_reader) + doc = @dbf.new_document_builder.parse(xml_input_source) + merge_element!({ CONTENT_KEY => "" }, doc.document_element, XmlMini.depth) + end + end + + private + + # Convert an XML element and merge into the hash + # + # hash:: + # Hash to merge the converted element into. + # element:: + # XML element to merge into hash + def merge_element!(hash, element, depth) + raise "Document too deep!" if depth == 0 + delete_empty(hash) + merge!(hash, element.tag_name, collapse(element, depth)) + end + + def delete_empty(hash) + hash.delete(CONTENT_KEY) if hash[CONTENT_KEY] == "" + end + + # Actually converts an XML document element into a data structure. + # + # element:: + # The document element to be collapsed. + def collapse(element, depth) + hash = get_attributes(element) + + child_nodes = element.child_nodes + if child_nodes.length > 0 + (0...child_nodes.length).each do |i| + child = child_nodes.item(i) + merge_element!(hash, child, depth - 1) unless child.node_type == Node.TEXT_NODE + end + merge_texts!(hash, element) unless empty_content?(element) + hash + else + merge_texts!(hash, element) + end + end + + # Merge all the texts of an element into the hash + # + # hash:: + # Hash to add the converted element to. + # element:: + # XML element whose texts are to me merged into the hash + def merge_texts!(hash, element) + delete_empty(hash) + text_children = texts(element) + if text_children.join.empty? + hash + else + # must use value to prevent double-escaping + merge!(hash, CONTENT_KEY, text_children.join) + end + end + + # Adds a new key/value pair to an existing Hash. If the key to be added + # already exists and the existing value associated with key is not + # an Array, it will be wrapped in an Array. Then the new value is + # appended to that Array. + # + # hash:: + # Hash to add key/value pair to. + # key:: + # Key to be added. + # value:: + # Value to be associated with key. + def merge!(hash, key, value) + if hash.has_key?(key) + if hash[key].instance_of?(Array) + hash[key] << value + else + hash[key] = [hash[key], value] + end + elsif value.instance_of?(Array) + hash[key] = [value] + else + hash[key] = value + end + hash + end + + # Converts the attributes array of an XML element into a hash. + # Returns an empty Hash if node has no attributes. + # + # element:: + # XML element to extract attributes from. + def get_attributes(element) + attribute_hash = {} + attributes = element.attributes + (0...attributes.length).each do |i| + attribute_hash[CONTENT_KEY] ||= "" + attribute_hash[attributes.item(i).name] = attributes.item(i).value + end + attribute_hash + end + + # Determines if a document element has text content + # + # element:: + # XML element to be checked. + def texts(element) + texts = [] + child_nodes = element.child_nodes + (0...child_nodes.length).each do |i| + item = child_nodes.item(i) + if item.node_type == Node.TEXT_NODE + texts << item.get_data + end + end + texts + end + + # Determines if a document element has text content + # + # element:: + # XML element to be checked. + def empty_content?(element) + text = "".dup + child_nodes = element.child_nodes + (0...child_nodes.length).each do |i| + item = child_nodes.item(i) + if item.node_type == Node.TEXT_NODE + text << item.get_data.strip + end + end + text.strip.length == 0 + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxml.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxml.rb new file mode 100644 index 0000000000..0b000fea60 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxml.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require "libxml" +require "active_support/core_ext/object/blank" +require "stringio" + +module ActiveSupport + module XmlMini_LibXML #:nodoc: + extend self + + # Parse an XML Document string or IO into a simple hash using libxml. + # data:: + # XML Document string or IO to parse + def parse(data) + if !data.respond_to?(:read) + data = StringIO.new(data || "") + end + + if data.eof? + {} + else + LibXML::XML::Parser.io(data).parse.to_hash + end + end + end +end + +module LibXML #:nodoc: + module Conversions #:nodoc: + module Document #:nodoc: + def to_hash + root.to_hash + end + end + + module Node #:nodoc: + CONTENT_ROOT = "__content__".freeze + + # Convert XML document to hash. + # + # hash:: + # Hash to merge the converted element into. + def to_hash(hash = {}) + node_hash = {} + + # Insert node hash into parent hash correctly. + case hash[name] + when Array then hash[name] << node_hash + when Hash then hash[name] = [hash[name], node_hash] + when nil then hash[name] = node_hash + end + + # Handle child elements + each_child do |c| + if c.element? + c.to_hash(node_hash) + elsif c.text? || c.cdata? + node_hash[CONTENT_ROOT] ||= "".dup + node_hash[CONTENT_ROOT] << c.content + end + end + + # Remove content node if it is blank + if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank? + node_hash.delete(CONTENT_ROOT) + end + + # Handle attributes + each_attr { |a| node_hash[a.name] = a.value } + + hash + end + end + end +end + +# :enddoc: + +LibXML::XML::Document.include(LibXML::Conversions::Document) +LibXML::XML::Node.include(LibXML::Conversions::Node) diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxmlsax.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxmlsax.rb new file mode 100644 index 0000000000..dcf16e6084 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/libxmlsax.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require "libxml" +require "active_support/core_ext/object/blank" +require "stringio" + +module ActiveSupport + module XmlMini_LibXMLSAX #:nodoc: + extend self + + # Class that will build the hash while the XML document + # is being parsed using SAX events. + class HashBuilder + include LibXML::XML::SaxParser::Callbacks + + CONTENT_KEY = "__content__".freeze + HASH_SIZE_KEY = "__hash_size__".freeze + + attr_reader :hash + + def current_hash + @hash_stack.last + end + + def on_start_document + @hash = { CONTENT_KEY => "".dup } + @hash_stack = [@hash] + end + + def on_end_document + @hash = @hash_stack.pop + @hash.delete(CONTENT_KEY) + end + + def on_start_element(name, attrs = {}) + new_hash = { CONTENT_KEY => "".dup }.merge!(attrs) + new_hash[HASH_SIZE_KEY] = new_hash.size + 1 + + case current_hash[name] + when Array then current_hash[name] << new_hash + when Hash then current_hash[name] = [current_hash[name], new_hash] + when nil then current_hash[name] = new_hash + end + + @hash_stack.push(new_hash) + end + + def on_end_element(name) + if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == "" + current_hash.delete(CONTENT_KEY) + end + @hash_stack.pop + end + + def on_characters(string) + current_hash[CONTENT_KEY] << string + end + + alias_method :on_cdata_block, :on_characters + end + + attr_accessor :document_class + self.document_class = HashBuilder + + def parse(data) + if !data.respond_to?(:read) + data = StringIO.new(data || "") + end + + if data.eof? + {} + else + LibXML::XML::Error.set_handler(&LibXML::XML::Error::QUIET_HANDLER) + parser = LibXML::XML::SaxParser.io(data) + document = document_class.new + + parser.callbacks = document + parser.parse + document.hash + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogiri.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogiri.rb new file mode 100644 index 0000000000..5ee6fc8159 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogiri.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +begin + require "nokogiri" +rescue LoadError => e + $stderr.puts "You don't have nokogiri installed in your application. Please add it to your Gemfile and run bundle install" + raise e +end +require "active_support/core_ext/object/blank" +require "stringio" + +module ActiveSupport + module XmlMini_Nokogiri #:nodoc: + extend self + + # Parse an XML Document string or IO into a simple hash using libxml / nokogiri. + # data:: + # XML Document string or IO to parse + def parse(data) + if !data.respond_to?(:read) + data = StringIO.new(data || "") + end + + if data.eof? + {} + else + doc = Nokogiri::XML(data) + raise doc.errors.first if doc.errors.length > 0 + doc.to_hash + end + end + + module Conversions #:nodoc: + module Document #:nodoc: + def to_hash + root.to_hash + end + end + + module Node #:nodoc: + CONTENT_ROOT = "__content__".freeze + + # Convert XML document to hash. + # + # hash:: + # Hash to merge the converted element into. + def to_hash(hash = {}) + node_hash = {} + + # Insert node hash into parent hash correctly. + case hash[name] + when Array then hash[name] << node_hash + when Hash then hash[name] = [hash[name], node_hash] + when nil then hash[name] = node_hash + end + + # Handle child elements + children.each do |c| + if c.element? + c.to_hash(node_hash) + elsif c.text? || c.cdata? + node_hash[CONTENT_ROOT] ||= "".dup + node_hash[CONTENT_ROOT] << c.content + end + end + + # Remove content node if it is blank and there are child tags + if node_hash.length > 1 && node_hash[CONTENT_ROOT].blank? + node_hash.delete(CONTENT_ROOT) + end + + # Handle attributes + attribute_nodes.each { |a| node_hash[a.node_name] = a.value } + + hash + end + end + end + + Nokogiri::XML::Document.include(Conversions::Document) + Nokogiri::XML::Node.include(Conversions::Node) + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogirisax.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogirisax.rb new file mode 100644 index 0000000000..b01ed00a14 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/activesupport-5.2.2/lib/active_support/xml_mini/nokogirisax.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +begin + require "nokogiri" +rescue LoadError => e + $stderr.puts "You don't have nokogiri installed in your application. Please add it to your Gemfile and run bundle install" + raise e +end +require "active_support/core_ext/object/blank" +require "stringio" + +module ActiveSupport + module XmlMini_NokogiriSAX #:nodoc: + extend self + + # Class that will build the hash while the XML document + # is being parsed using SAX events. + class HashBuilder < Nokogiri::XML::SAX::Document + CONTENT_KEY = "__content__".freeze + HASH_SIZE_KEY = "__hash_size__".freeze + + attr_reader :hash + + def current_hash + @hash_stack.last + end + + def start_document + @hash = {} + @hash_stack = [@hash] + end + + def end_document + raise "Parse stack not empty!" if @hash_stack.size > 1 + end + + def error(error_message) + raise error_message + end + + def start_element(name, attrs = []) + new_hash = { CONTENT_KEY => "".dup }.merge!(Hash[attrs]) + new_hash[HASH_SIZE_KEY] = new_hash.size + 1 + + case current_hash[name] + when Array then current_hash[name] << new_hash + when Hash then current_hash[name] = [current_hash[name], new_hash] + when nil then current_hash[name] = new_hash + end + + @hash_stack.push(new_hash) + end + + def end_element(name) + if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == "" + current_hash.delete(CONTENT_KEY) + end + @hash_stack.pop + end + + def characters(string) + current_hash[CONTENT_KEY] << string + end + + alias_method :cdata_block, :characters + end + + attr_accessor :document_class + self.document_class = HashBuilder + + def parse(data) + if !data.respond_to?(:read) + data = StringIO.new(data || "") + end + + if data.eof? + {} + else + document = document_class.new + parser = Nokogiri::XML::SAX::Parser.new(document) + parser.parse(data) + document.hash + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports.rb new file mode 100644 index 0000000000..663855f64f --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports.rb @@ -0,0 +1,3 @@ +require "backports/version" +require "backports/2.4" +require "backports/rails" diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/comparable.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/comparable.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/comparable.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/enumerable.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/enumerable.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/enumerable.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/false_class.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/false_class.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/false_class.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/fixnum.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/fixnum.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/fixnum.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/float.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/float.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/float.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/hash.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/hash.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/hash.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/nil_class.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/nil_class.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/nil_class.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/regexp.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/regexp.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/regexp.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/string.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/string.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/string.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/true_class.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/true_class.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.4.0/true_class.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/array.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/array.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/array.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/dir.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/dir.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/dir.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/enumerable.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/enumerable.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/enumerable.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/hash.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/hash.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/hash.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/integer.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/integer.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/integer.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/kernel.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/kernel.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/kernel.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/module.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/module.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/module.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_suffix.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_suffix.rb new file mode 100644 index 0000000000..ab027fe141 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_suffix.rb @@ -0,0 +1,33 @@ +unless String.method_defined? :delete_suffix + require 'backports/tools/arguments' + + class String + def delete_suffix(suffix) + suffix = Backports.coerce_to_str(suffix) + len = suffix.length + if len > 0 && index(suffix, -len) + self[0...-len] + else + dup + end + end + end +end + +unless String.method_defined? :delete_suffix! + require 'backports/tools/arguments' + + class String + def delete_suffix!(suffix) + suffix = Backports.coerce_to_str(suffix) + chomp! if frozen? + len = suffix.length + if len > 0 && index(suffix, -len) + self[-len..-1] = '' + self + else + nil + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/struct.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/struct.rb new file mode 100644 index 0000000000..09df324d53 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/struct.rb @@ -0,0 +1,3 @@ +require 'backports/tools/require_relative_dir' + +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/basic_object.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/basic_object.rb new file mode 100644 index 0000000000..0760e5e0a8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/basic_object.rb @@ -0,0 +1,53 @@ +# Note: Must be required explicitely! +# This is a best attempt to fake BasicObject in Ruby 1.8.x +# What you do get: +# * as few methods as the real BasicObject (at the moment the library is required...) +# * BasicObject === # ==> returns true +# What you don't get: +# * BasicObject is not in the ancestor list of all classes and thus +# * Comparisons between classes won't work, e.g. +# Object < BasicObject # ==> returns true instead of false +# * Instance methods added to Object or Kernel after you require 'backports/basic_object' +# might also be available in instances of BasicObject and subclasses +# (they will only be undefined whenever a subclass of BasicObject is created) +# Because of all the fineprint, BasicObject must be required explicitely + +unless Object.const_defined? :BasicObject + + class BasicObject + KEEP = %w[== equal? ! != instance_eval instance_exec __send__] + KEEP.concat KEEP.map { |e| e.to_sym } + + # undefine almost all instance methods + begin + old_verbose, $VERBOSE = $VERBOSE, nil # silence the warning for undefining __id__ + (instance_methods - KEEP).each do |method| + undef_method method + end + ensure + $VERBOSE = old_verbose + end + + class << self + def === (cmp) + true + end + + # Let's try to keep things clean, in case methods have been added to Object + # either directly or through an included module. + # We'll do this whenever a class is derived from BasicObject + # Ideally, we'd do this by trapping Object.method_added + # and M.method_added for any module M included in Object or a submodule + # Seems really though to get right, but pull requests welcome ;-) + def inherited(sub) + BasicObject.class_eval do + (instance_methods - KEEP).each do |method| + if Object.method_defined?(method) && instance_method(method).owner == Object.instance_method(method).owner + undef_method method + end + end + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/std_lib.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/std_lib.rb new file mode 100644 index 0000000000..cd390ed911 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/std_lib.rb @@ -0,0 +1,24 @@ +# Will intercept future and past 'require' calls of std_lib +# and load additionally the updated libraries. +require 'backports/tools/std_lib' +require 'backports/tools/alias_method_chain' + +module Kernel + def require_with_backports(lib) + begin + return false unless require_without_backports(lib) + paths = Backports::StdLib.extended_lib.fetch(lib, nil) + rescue LoadError + return false if Backports::StdLib::LoadedFeatures.new.include?(lib) + raise unless paths = Backports::StdLib.extended_lib.fetch(lib, nil) + Backports::StdLib::LoadedFeatures.mark_as_loaded(lib) + end + if paths + paths.each do |path| + require_without_backports(path) + end + end + true + end + Backports.alias_method_chain self, :require, :backports +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools.rb new file mode 100644 index 0000000000..3f48512672 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools.rb @@ -0,0 +1,3 @@ +# Methods used internally by the backports. +require 'backports/tools/require_relative_dir' +Backports.require_relative_dir diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method.rb new file mode 100644 index 0000000000..9dc36dd6b8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method.rb @@ -0,0 +1,8 @@ +module Backports + # Safe alias_method that will only alias if the source exists and destination doesn't + def self.alias_method(mod, new_name, old_name) + mod.instance_eval do + alias_method new_name, old_name + end if mod.method_defined?(old_name) && !mod.method_defined?(new_name) + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method_chain.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method_chain.rb new file mode 100644 index 0000000000..8ac8c5a209 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/alias_method_chain.rb @@ -0,0 +1,26 @@ +module Backports + # Modified to avoid polluting Module if so desired + # (from Rails) + def self.alias_method_chain(mod, target, feature) + mod.class_eval do + # Strip out punctuation on predicates or bang methods since + # e.g. target?_without_feature is not a valid method name. + aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1 + yield(aliased_target, punctuation) if block_given? + + with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}" + + alias_method without_method, target + alias_method target, with_method + + case + when public_method_defined?(without_method) + public target + when protected_method_defined?(without_method) + protected target + when private_method_defined?(without_method) + private target + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/extreme_object.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/extreme_object.rb new file mode 100644 index 0000000000..2b1c7202fe --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/extreme_object.rb @@ -0,0 +1,12 @@ +module Backports + MOST_EXTREME_OBJECT_EVER = Object.new # :nodoc: + class << MOST_EXTREME_OBJECT_EVER + def <(whatever) + true + end + + def >(whatever) + true + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/float_integer_conversion.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/float_integer_conversion.rb new file mode 100644 index 0000000000..eb5b57efc8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/float_integer_conversion.rb @@ -0,0 +1,17 @@ +module Backports + class << self + def float_to_integer(float) + map_via_packing(float, 'D', 'q') + end + + def integer_to_float(int) + map_via_packing(int, 'q', 'D') + end + + private + def map_via_packing(nb, pack, unpack) + result, = [nb.abs].pack(pack).unpack(unpack) + nb < 0 ? -result : result + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/io.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/io.rb new file mode 100644 index 0000000000..1663b38fca --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/io.rb @@ -0,0 +1,57 @@ +require 'backports/tools/arguments' +module Backports + # Used internally to combine {IO|File} options hash into mode (String or Integer) + def self.combine_mode_and_option(mode = nil, options = Backports::Undefined) + # Can't backport autoclose, {internal|external|}encoding + mode, options = nil, mode if mode.respond_to?(:to_hash) && options == Backports::Undefined + options = {} if options == nil || options == Backports::Undefined + options = coerce_to_hash(options) + if mode && options[:mode] + raise ArgumentError, "mode specified twice" + end + mode ||= options[:mode] || "r" + mode = try_convert(mode, String, :to_str) || try_convert(mode, Integer, :to_int) || mode + if options[:textmode] || options[:binmode] + text = options[:textmode] || (mode.is_a?(String) && mode =~ /t/) + bin = options[:binmode] || (mode.is_a?(String) ? mode =~ /b/ : mode & File::Constants::BINARY != 0) + if text && bin + raise ArgumentError, "both textmode and binmode specified" + end + case + when !options[:binmode] + when mode.is_a?(String) + mode.insert(1, "b") + else + mode |= File::Constants::BINARY + end + end + mode + end + + # Used internally to combine {IO|File} options hash into mode (String or Integer) and perm + def self.combine_mode_perm_and_option(mode = nil, perm = Backports::Undefined, options = Backports::Undefined) + mode, options = nil, mode if mode.respond_to?(:to_hash) && perm == Backports::Undefined + perm, options = nil, perm if perm.respond_to?(:to_hash) && options == Backports::Undefined + perm = nil if perm == Backports::Undefined + options = {} if options == Backports::Undefined + options = coerce_to_hash(options) + if perm && options[:perm] + raise ArgumentError, "perm specified twice" + end + [combine_mode_and_option(mode, options), perm || options[:perm]] + end + + def self.write(binary, filename, string, offset, options) + offset, options = nil, offset if offset.respond_to?(:to_hash) && options == Backports::Undefined + options = {} if options == Backports::Undefined + options = coerce_to_hash(options) + File.open(filename, 'a+'){} if offset # insure existence + options = {:mode => offset.nil? ? "w" : "r+"}.merge(options) + args = options[:open_args] || [options] + File.open(filename, *Backports.combine_mode_perm_and_option(*args)) do |f| + f.binmode if binary && f.respond_to?(:binmode) + f.seek(offset) unless offset.nil? + f.write(string) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/make_block_optional.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/make_block_optional.rb new file mode 100644 index 0000000000..199191bd9d --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/make_block_optional.rb @@ -0,0 +1,43 @@ +require 'backports/tools/alias_method_chain' + +module Backports + # Metaprogramming utility to make block optional. + # Tests first if block is already optional when given options + def self.make_block_optional(mod, *methods) + mod = class << mod; self; end unless mod.is_a? Module + options = methods.last.is_a?(Hash) ? methods.pop : {} + methods.each do |selector| + unless mod.method_defined? selector + warn "#{mod}##{selector} is not defined, so block can't be made optional" + next + end + unless options[:force] + # Check if needed + test_on = options.fetch(:test_on) + result = begin + test_on.send(selector, *options.fetch(:arg, [])) + rescue LocalJumpError + false + end + next if result.class.name =~ /Enumerator/ + end + require 'enumerator' + arity = mod.instance_method(selector).arity + last_arg = [] + if arity < 0 + last_arg = ["*rest"] + arity = -1-arity + end + arg_sequence = ((0...arity).map{|i| "arg_#{i}"} + last_arg + ["&block"]).join(", ") + + alias_method_chain(mod, selector, :optional_block) do |aliased_target, punctuation| + mod.module_eval <<-end_eval, __FILE__, __LINE__ + 1 + def #{aliased_target}_with_optional_block#{punctuation}(#{arg_sequence}) + return to_enum(:#{aliased_target}_without_optional_block#{punctuation}, #{arg_sequence}) unless block_given? + #{aliased_target}_without_optional_block#{punctuation}(#{arg_sequence}) + end + end_eval + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/normalize.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/normalize.rb new file mode 100644 index 0000000000..ec51d2b1f9 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/normalize.rb @@ -0,0 +1,1322 @@ +# coding: utf-8 +# frozen_string_literal: false + +# Copied from CRuby. +# Copyright Ayumu Nojima (野島 歩) and Martin J. Dürst (duerst@it.aoyama.ac.jp) + +module UnicodeNormalize + accents = "" \ + "[\u0300-\u034E\u0350-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7" \ + "\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711" \ + "\u0730-\u074A\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1" \ + "\u08E3-\u08FF\u093C\u094D\u0951-\u0954\u09BC\u09BE\u09CD\u09D7" \ + "\u0A3C\u0A4D\u0ABC\u0ACD\u0B3C\u0B3E\u0B4D\u0B56\u0B57" \ + "\u0BBE\u0BCD\u0BD7\u0C4D\u0C55\u0C56\u0CBC\u0CC2\u0CCD" \ + "\u0CD5\u0CD6\u0D3E\u0D4D\u0D57\u0DCA\u0DCF\u0DDF\u0E38-\u0E3A" \ + "\u0E48-\u0E4B\u0EB8\u0EB9\u0EC8-\u0ECB\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71\u0F72" \ + "\u0F74\u0F7A-\u0F7D\u0F80\u0F82-\u0F84\u0F86\u0F87\u0FC6\u102E\u1037" \ + "\u1039\u103A\u108D\u135D-\u135F\u1714\u1734\u17D2\u17DD\u18A9" \ + "\u1939-\u193B\u1A17\u1A18\u1A60\u1A75-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B34\u1B35\u1B44" \ + "\u1B6B-\u1B73\u1BAA\u1BAB\u1BE6\u1BF2\u1BF3\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8" \ + "\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0" \ + "\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F" \ + "\uA6F0\uA6F1\uA806\uA8C4\uA8E0-\uA8F1\uA92B-\uA92D\uA953\uA9B3\uA9C0" \ + "\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAF6\uABED\uFB1E" \ + "\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A0D}\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}" \ + "\u{10AE5}\u{10AE6}\u{11046}\u{1107F}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}\u{11133}\u{11134}\u{11173}" \ + "\u{111C0}\u{111CA}\u{11235}\u{11236}\u{112E9}\u{112EA}\u{1133C}\u{1133E}\u{1134D}\u{11357}" \ + "\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11442}\u{11446}\u{114B0}\u{114BA}\u{114BD}\u{114C2}\u{114C3}" \ + "\u{115AF}\u{115BF}\u{115C0}\u{1163F}\u{116B6}\u{116B7}\u{1172B}\u{11C3F}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}" \ + "\u{1BC9E}\u{1D165}-\u{1D169}\u{1D16D}-\u{1D172}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1E000}-\u{1E006}" \ + "\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}" \ + "]" + ACCENTS = accents + REGEXP_D_STRING = "#{'' # composition starters and composition exclusions + }" \ + "[\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD" \ + "\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165" \ + "\u0168-\u017E\u01A0\u01A1\u01AF\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01F0\u01F4\u01F5\u01F8-\u021B" \ + "\u021E\u021F\u0226-\u0233\u0340\u0341\u0343\u0344\u0374\u037E\u0385-\u038A\u038C" \ + "\u038E-\u0390\u03AA-\u03B0\u03CA-\u03CE\u03D3\u03D4\u0400\u0401\u0403\u0407\u040C-\u040E" \ + "\u0419\u0439\u0450\u0451\u0453\u0457\u045C-\u045E\u0476\u0477\u04C1\u04C2" \ + "\u04D0-\u04D3\u04D6\u04D7\u04DA-\u04DF\u04E2-\u04E7\u04EA-\u04F5\u04F8\u04F9\u0622-\u0626\u06C0" \ + "\u06C2\u06D3\u0929\u0931\u0934\u0958-\u095F\u09CB\u09CC\u09DC\u09DD" \ + "\u09DF\u0A33\u0A36\u0A59-\u0A5B\u0A5E\u0B48\u0B4B\u0B4C\u0B5C\u0B5D" \ + "\u0B94\u0BCA-\u0BCC\u0C48\u0CC0\u0CC7\u0CC8\u0CCA\u0CCB\u0D4A-\u0D4C\u0DDA" \ + "\u0DDC-\u0DDE\u0F43\u0F4D\u0F52\u0F57\u0F5C\u0F69\u0F73" \ + "\u0F75\u0F76\u0F78\u0F81\u0F93\u0F9D\u0FA2\u0FA7\u0FAC" \ + "\u0FB9\u1026\u1B06\u1B08\u1B0A\u1B0C\u1B0E\u1B12" \ + "\u1B3B\u1B3D\u1B40\u1B41\u1B43\u1E00-\u1E99\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15" \ + "\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D" \ + "\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC1-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4" \ + "\u1FF6-\u1FFD\u2000\u2001\u2126\u212A\u212B\u219A\u219B\u21AE\u21CD-\u21CF\u2204" \ + "\u2209\u220C\u2224\u2226\u2241\u2244\u2247\u2249" \ + "\u2260\u2262\u226D-\u2271\u2274\u2275\u2278\u2279\u2280\u2281\u2284\u2285\u2288\u2289" \ + "\u22AC-\u22AF\u22E0-\u22E3\u22EA-\u22ED\u2329\u232A\u2ADC\u304C\u304E\u3050" \ + "\u3052\u3054\u3056\u3058\u305A\u305C\u305E\u3060" \ + "\u3062\u3065\u3067\u3069\u3070\u3071\u3073\u3074\u3076\u3077\u3079\u307A" \ + "\u307C\u307D\u3094\u309E\u30AC\u30AE\u30B0\u30B2\u30B4" \ + "\u30B6\u30B8\u30BA\u30BC\u30BE\u30C0\u30C2\u30C5" \ + "\u30C7\u30C9\u30D0\u30D1\u30D3\u30D4\u30D6\u30D7\u30D9\u30DA\u30DC\u30DD\u30F4" \ + "\u30F7-\u30FA\u30FE\uF900-\uFA0D\uFA10\uFA12\uFA15-\uFA1E\uFA20\uFA22" \ + "\uFA25\uFA26\uFA2A-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E" \ + "\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4E\u{1109A}\u{1109C}\u{110AB}\u{1112E}\u{1112F}\u{1134B}\u{1134C}" \ + "\u{114BB}\u{114BC}\u{114BE}\u{115BA}\u{115BB}\u{1D15E}-\u{1D164}\u{1D1BB}-\u{1D1C0}\u{2F800}-\u{2FA1D}" \ + "]#{accents}*" \ + "|#{'' # characters that can be the result of a composition, except composition starters + }" \ + "[<->A-PR-Za-pr-z\u00A8\u00C6\u00D8" \ + "\u00E6\u00F8\u017F\u01B7\u0292\u0391\u0395\u0397" \ + "\u0399\u039F\u03A1\u03A5\u03A9\u03B1\u03B5\u03B7" \ + "\u03B9\u03BF\u03C1\u03C5\u03C9\u03D2\u0406\u0410" \ + "\u0413\u0415-\u0418\u041A\u041E\u0423\u0427\u042B\u042D" \ + "\u0430\u0433\u0435-\u0438\u043A\u043E\u0443\u0447\u044B" \ + "\u044D\u0456\u0474\u0475\u04D8\u04D9\u04E8\u04E9\u0627\u0648\u064A" \ + "\u06C1\u06D2\u06D5\u0928\u0930\u0933\u09C7\u0B47" \ + "\u0B92\u0BC6\u0BC7\u0C46\u0CBF\u0CC6\u0D46\u0D47\u0DD9\u1025" \ + "\u1B05\u1B07\u1B09\u1B0B\u1B0D\u1B11\u1B3A\u1B3C" \ + "\u1B3E\u1B3F\u1B42\u1FBF\u1FFE\u2190\u2192\u2194\u21D0" \ + "\u21D2\u21D4\u2203\u2208\u220B\u2223\u2225\u223C" \ + "\u2243\u2245\u2248\u224D\u2261\u2264\u2265\u2272\u2273\u2276\u2277" \ + "\u227A-\u227D\u2282\u2283\u2286\u2287\u2291\u2292\u22A2\u22A8\u22A9\u22AB\u22B2-\u22B5" \ + "\u3046\u304B\u304D\u304F\u3051\u3053\u3055\u3057" \ + "\u3059\u305B\u305D\u305F\u3061\u3064\u3066\u3068" \ + "\u306F\u3072\u3075\u3078\u307B\u309D\u30A6\u30AB" \ + "\u30AD\u30AF\u30B1\u30B3\u30B5\u30B7\u30B9\u30BB" \ + "\u30BD\u30BF\u30C1\u30C4\u30C6\u30C8\u30CF\u30D2" \ + "\u30D5\u30D8\u30DB\u30EF-\u30F2\u30FD\u{11099}\u{1109B}\u{110A5}" \ + "\u{11131}\u{11132}\u{11347}\u{114B9}\u{115B8}\u{115B9}" \ + "]?#{accents}+" \ + "|#{'' # precomposed Hangul syllables + }" \ + "[\u{AC00}-\u{D7A4}]" + REGEXP_C_STRING = "#{'' # composition exclusions + }" \ + "[\u0340\u0341\u0343\u0344\u0374\u037E\u0387\u0958-\u095F\u09DC\u09DD\u09DF" \ + "\u0A33\u0A36\u0A59-\u0A5B\u0A5E\u0B5C\u0B5D\u0F43\u0F4D\u0F52" \ + "\u0F57\u0F5C\u0F69\u0F73\u0F75\u0F76\u0F78\u0F81\u0F93" \ + "\u0F9D\u0FA2\u0FA7\u0FAC\u0FB9\u1F71\u1F73\u1F75" \ + "\u1F77\u1F79\u1F7B\u1F7D\u1FBB\u1FBE\u1FC9\u1FCB" \ + "\u1FD3\u1FDB\u1FE3\u1FEB\u1FEE\u1FEF\u1FF9\u1FFB\u1FFD" \ + "\u2000\u2001\u2126\u212A\u212B\u2329\u232A\u2ADC\uF900-\uFA0D\uFA10\uFA12" \ + "\uFA15-\uFA1E\uFA20\uFA22\uFA25\uFA26\uFA2A-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F" \ + "\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4E\u{1D15E}-\u{1D164}\u{1D1BB}-\u{1D1C0}" \ + "\u{2F800}-\u{2FA1D}" \ + "]#{accents}*" \ + "|#{'' # composition starters and characters that can be the result of a composition + }" \ + "[<->A-PR-Za-pr-z\u00A8\u00C0-\u00CF\u00D1-\u00D6" \ + "\u00D8-\u00DD\u00E0-\u00EF\u00F1-\u00F6\u00F8-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137" \ + "\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017F\u01A0\u01A1\u01AF\u01B0\u01B7" \ + "\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01F0\u01F4\u01F5\u01F8-\u021B\u021E\u021F\u0226-\u0233\u0292" \ + "\u0385\u0386\u0388-\u038A\u038C\u038E-\u0391\u0395\u0397\u0399\u039F" \ + "\u03A1\u03A5\u03A9-\u03B1\u03B5\u03B7\u03B9\u03BF\u03C1" \ + "\u03C5\u03C9-\u03CE\u03D2-\u03D4\u0400\u0401\u0403\u0406\u0407\u040C-\u040E\u0410" \ + "\u0413\u0415-\u041A\u041E\u0423\u0427\u042B\u042D\u0430" \ + "\u0433\u0435-\u043A\u043E\u0443\u0447\u044B\u044D\u0450\u0451" \ + "\u0453\u0456\u0457\u045C-\u045E\u0474-\u0477\u04C1\u04C2\u04D0-\u04D3\u04D6-\u04DF\u04E2-\u04F5" \ + "\u04F8\u04F9\u0622-\u0627\u0648\u064A\u06C0-\u06C2\u06D2\u06D3\u06D5\u0928\u0929" \ + "\u0930\u0931\u0933\u0934\u09C7\u09CB\u09CC\u0B47\u0B48\u0B4B\u0B4C\u0B92\u0B94" \ + "\u0BC6\u0BC7\u0BCA-\u0BCC\u0C46\u0C48\u0CBF\u0CC0\u0CC6-\u0CC8\u0CCA\u0CCB\u0D46\u0D47" \ + "\u0D4A-\u0D4C\u0DD9\u0DDA\u0DDC-\u0DDE\u1025\u1026\u1B05-\u1B0E\u1B11\u1B12\u1B3A-\u1B43\u1E00-\u1E99" \ + "\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59" \ + "\u1F5B\u1F5D\u1F5F-\u1F70\u1F72\u1F74\u1F76\u1F78\u1F7A" \ + "\u1F7C\u1F80-\u1FB4\u1FB6-\u1FBA\u1FBC\u1FBF\u1FC1-\u1FC4\u1FC6-\u1FC8\u1FCA" \ + "\u1FCC-\u1FD2\u1FD6-\u1FDA\u1FDD-\u1FE2\u1FE4-\u1FEA\u1FEC\u1FED\u1FF2-\u1FF4\u1FF6-\u1FF8\u1FFA" \ + "\u1FFC\u1FFE\u2190\u2192\u2194\u219A\u219B\u21AE\u21CD-\u21D0" \ + "\u21D2\u21D4\u2203\u2204\u2208\u2209\u220B\u220C\u2223-\u2226\u223C\u2241" \ + "\u2243-\u2245\u2247-\u2249\u224D\u2260-\u2262\u2264\u2265\u226D-\u227D\u2280-\u2289\u2291\u2292" \ + "\u22A2\u22A8\u22A9\u22AB-\u22AF\u22B2-\u22B5\u22E0-\u22E3\u22EA-\u22ED\u3046\u304B-\u3062" \ + "\u3064-\u3069\u306F-\u307D\u3094\u309D\u309E\u30A6\u30AB-\u30C2\u30C4-\u30C9\u30CF-\u30DD" \ + "\u30EF-\u30F2\u30F4\u30F7-\u30FA\u30FD\u30FE\u{11099}-\u{1109C}\u{110A5}\u{110AB}\u{1112E}\u{1112F}" \ + "\u{11131}\u{11132}\u{11347}\u{1134B}\u{1134C}\u{114B9}\u{114BB}\u{114BC}\u{114BE}\u{115B8}-\u{115BB}" \ + "]?#{accents}+" \ + "|#{'' # Hangul syllables with separate trailer + }" \ + "[\uAC00\uAC1C\uAC38\uAC54\uAC70\uAC8C\uACA8\uACC4" \ + "\uACE0\uACFC\uAD18\uAD34\uAD50\uAD6C\uAD88\uADA4" \ + "\uADC0\uADDC\uADF8\uAE14\uAE30\uAE4C\uAE68\uAE84" \ + "\uAEA0\uAEBC\uAED8\uAEF4\uAF10\uAF2C\uAF48\uAF64" \ + "\uAF80\uAF9C\uAFB8\uAFD4\uAFF0\uB00C\uB028\uB044" \ + "\uB060\uB07C\uB098\uB0B4\uB0D0\uB0EC\uB108\uB124" \ + "\uB140\uB15C\uB178\uB194\uB1B0\uB1CC\uB1E8\uB204" \ + "\uB220\uB23C\uB258\uB274\uB290\uB2AC\uB2C8\uB2E4" \ + "\uB300\uB31C\uB338\uB354\uB370\uB38C\uB3A8\uB3C4" \ + "\uB3E0\uB3FC\uB418\uB434\uB450\uB46C\uB488\uB4A4" \ + "\uB4C0\uB4DC\uB4F8\uB514\uB530\uB54C\uB568\uB584" \ + "\uB5A0\uB5BC\uB5D8\uB5F4\uB610\uB62C\uB648\uB664" \ + "\uB680\uB69C\uB6B8\uB6D4\uB6F0\uB70C\uB728\uB744" \ + "\uB760\uB77C\uB798\uB7B4\uB7D0\uB7EC\uB808\uB824" \ + "\uB840\uB85C\uB878\uB894\uB8B0\uB8CC\uB8E8\uB904" \ + "\uB920\uB93C\uB958\uB974\uB990\uB9AC\uB9C8\uB9E4" \ + "\uBA00\uBA1C\uBA38\uBA54\uBA70\uBA8C\uBAA8\uBAC4" \ + "\uBAE0\uBAFC\uBB18\uBB34\uBB50\uBB6C\uBB88\uBBA4" \ + "\uBBC0\uBBDC\uBBF8\uBC14\uBC30\uBC4C\uBC68\uBC84" \ + "\uBCA0\uBCBC\uBCD8\uBCF4\uBD10\uBD2C\uBD48\uBD64" \ + "\uBD80\uBD9C\uBDB8\uBDD4\uBDF0\uBE0C\uBE28\uBE44" \ + "\uBE60\uBE7C\uBE98\uBEB4\uBED0\uBEEC\uBF08\uBF24" \ + "\uBF40\uBF5C\uBF78\uBF94\uBFB0\uBFCC\uBFE8\uC004" \ + "\uC020\uC03C\uC058\uC074\uC090\uC0AC\uC0C8\uC0E4" \ + "\uC100\uC11C\uC138\uC154\uC170\uC18C\uC1A8\uC1C4" \ + "\uC1E0\uC1FC\uC218\uC234\uC250\uC26C\uC288\uC2A4" \ + "\uC2C0\uC2DC\uC2F8\uC314\uC330\uC34C\uC368\uC384" \ + "\uC3A0\uC3BC\uC3D8\uC3F4\uC410\uC42C\uC448\uC464" \ + "\uC480\uC49C\uC4B8\uC4D4\uC4F0\uC50C\uC528\uC544" \ + "\uC560\uC57C\uC598\uC5B4\uC5D0\uC5EC\uC608\uC624" \ + "\uC640\uC65C\uC678\uC694\uC6B0\uC6CC\uC6E8\uC704" \ + "\uC720\uC73C\uC758\uC774\uC790\uC7AC\uC7C8\uC7E4" \ + "\uC800\uC81C\uC838\uC854\uC870\uC88C\uC8A8\uC8C4" \ + "\uC8E0\uC8FC\uC918\uC934\uC950\uC96C\uC988\uC9A4" \ + "\uC9C0\uC9DC\uC9F8\uCA14\uCA30\uCA4C\uCA68\uCA84" \ + "\uCAA0\uCABC\uCAD8\uCAF4\uCB10\uCB2C\uCB48\uCB64" \ + "\uCB80\uCB9C\uCBB8\uCBD4\uCBF0\uCC0C\uCC28\uCC44" \ + "\uCC60\uCC7C\uCC98\uCCB4\uCCD0\uCCEC\uCD08\uCD24" \ + "\uCD40\uCD5C\uCD78\uCD94\uCDB0\uCDCC\uCDE8\uCE04" \ + "\uCE20\uCE3C\uCE58\uCE74\uCE90\uCEAC\uCEC8\uCEE4" \ + "\uCF00\uCF1C\uCF38\uCF54\uCF70\uCF8C\uCFA8\uCFC4" \ + "\uCFE0\uCFFC\uD018\uD034\uD050\uD06C\uD088\uD0A4" \ + "\uD0C0\uD0DC\uD0F8\uD114\uD130\uD14C\uD168\uD184" \ + "\uD1A0\uD1BC\uD1D8\uD1F4\uD210\uD22C\uD248\uD264" \ + "\uD280\uD29C\uD2B8\uD2D4\uD2F0\uD30C\uD328\uD344" \ + "\uD360\uD37C\uD398\uD3B4\uD3D0\uD3EC\uD408\uD424" \ + "\uD440\uD45C\uD478\uD494\uD4B0\uD4CC\uD4E8\uD504" \ + "\uD520\uD53C\uD558\uD574\uD590\uD5AC\uD5C8\uD5E4" \ + "\uD600\uD61C\uD638\uD654\uD670\uD68C\uD6A8\uD6C4" \ + "\uD6E0\uD6FC\uD718\uD734\uD750\uD76C\uD788" \ + "][\u11A8-\u11C2]" \ + "|#{'' # decomposed Hangul syllables + }" \ + "[\u1100-\u1112][\u1161-\u1175][\u11A8-\u11C2]?" + REGEXP_K_STRING = "" \ + "[\u00A0\u00A8\u00AA\u00AF\u00B2-\u00B5\u00B8-\u00BA\u00BC-\u00BE\u0132\u0133" \ + "\u013F\u0140\u0149\u017F\u01C4-\u01CC\u01F1-\u01F3\u02B0-\u02B8\u02D8-\u02DD\u02E0-\u02E4" \ + "\u037A\u0384\u0385\u03D0-\u03D6\u03F0-\u03F2\u03F4\u03F5\u03F9\u0587\u0675-\u0678" \ + "\u0E33\u0EB3\u0EDC\u0EDD\u0F0C\u0F77\u0F79\u10FC\u1D2C-\u1D2E" \ + "\u1D30-\u1D3A\u1D3C-\u1D4D\u1D4F-\u1D6A\u1D78\u1D9B-\u1DBF\u1E9A\u1E9B\u1FBD\u1FBF-\u1FC1" \ + "\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED\u1FEE\u1FFD\u1FFE\u2000-\u200A\u2011\u2017\u2024-\u2026" \ + "\u202F\u2033\u2034\u2036\u2037\u203C\u203E\u2047-\u2049\u2057\u205F" \ + "\u2070\u2071\u2074-\u208E\u2090-\u209C\u20A8\u2100-\u2103\u2105-\u2107\u2109-\u2113\u2115\u2116" \ + "\u2119-\u211D\u2120-\u2122\u2124\u2128\u212C\u212D\u212F-\u2131\u2133-\u2139\u213B-\u2140" \ + "\u2145-\u2149\u2150-\u217F\u2189\u222C\u222D\u222F\u2230\u2460-\u24EA\u2A0C\u2A74-\u2A76" \ + "\u2C7C\u2C7D\u2D6F\u2E9F\u2EF3\u2F00-\u2FD5\u3000\u3036\u3038-\u303A" \ + "\u309B\u309C\u309F\u30FF\u3131-\u318E\u3192-\u319F\u3200-\u321E\u3220-\u3247\u3250-\u327E" \ + "\u3280-\u32FE\u3300-\u33FF\uA69C\uA69D\uA770\uA7F8\uA7F9\uAB5C-\uAB5F\uFB00-\uFB06\uFB13-\uFB17" \ + "\uFB20-\uFB29\uFB4F-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE10-\uFE19\uFE30-\uFE44" \ + "\uFE47-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFE70-\uFE72\uFE74\uFE76-\uFEFC\uFF01-\uFFBE\uFFC2-\uFFC7" \ + "\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\uFFE0-\uFFE6\uFFE8-\uFFEE\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}" \ + "\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}" \ + "\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}" \ + "\u{1D6A8}-\u{1D7CB}\u{1D7CE}-\u{1D7FF}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}" \ + "\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}" \ + "\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}" \ + "\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}" \ + "\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{1F100}-\u{1F10A}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F14F}\u{1F16A}\u{1F16B}\u{1F190}" \ + "\u{1F200}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}" \ + "]" + + class_table = { + "\u0300"=>230, "\u0301"=>230, "\u0302"=>230, "\u0303"=>230, "\u0304"=>230, "\u0305"=>230, "\u0306"=>230, "\u0307"=>230, + "\u0308"=>230, "\u0309"=>230, "\u030A"=>230, "\u030B"=>230, "\u030C"=>230, "\u030D"=>230, "\u030E"=>230, "\u030F"=>230, + "\u0310"=>230, "\u0311"=>230, "\u0312"=>230, "\u0313"=>230, "\u0314"=>230, "\u0315"=>232, "\u0316"=>220, "\u0317"=>220, + "\u0318"=>220, "\u0319"=>220, "\u031A"=>232, "\u031B"=>216, "\u031C"=>220, "\u031D"=>220, "\u031E"=>220, "\u031F"=>220, + "\u0320"=>220, "\u0321"=>202, "\u0322"=>202, "\u0323"=>220, "\u0324"=>220, "\u0325"=>220, "\u0326"=>220, "\u0327"=>202, + "\u0328"=>202, "\u0329"=>220, "\u032A"=>220, "\u032B"=>220, "\u032C"=>220, "\u032D"=>220, "\u032E"=>220, "\u032F"=>220, + "\u0330"=>220, "\u0331"=>220, "\u0332"=>220, "\u0333"=>220, "\u0334"=>1, "\u0335"=>1, "\u0336"=>1, "\u0337"=>1, + "\u0338"=>1, "\u0339"=>220, "\u033A"=>220, "\u033B"=>220, "\u033C"=>220, "\u033D"=>230, "\u033E"=>230, "\u033F"=>230, + "\u0340"=>230, "\u0341"=>230, "\u0342"=>230, "\u0343"=>230, "\u0344"=>230, "\u0345"=>240, "\u0346"=>230, "\u0347"=>220, + "\u0348"=>220, "\u0349"=>220, "\u034A"=>230, "\u034B"=>230, "\u034C"=>230, "\u034D"=>220, "\u034E"=>220, "\u0350"=>230, + "\u0351"=>230, "\u0352"=>230, "\u0353"=>220, "\u0354"=>220, "\u0355"=>220, "\u0356"=>220, "\u0357"=>230, "\u0358"=>232, + "\u0359"=>220, "\u035A"=>220, "\u035B"=>230, "\u035C"=>233, "\u035D"=>234, "\u035E"=>234, "\u035F"=>233, "\u0360"=>234, + "\u0361"=>234, "\u0362"=>233, "\u0363"=>230, "\u0364"=>230, "\u0365"=>230, "\u0366"=>230, "\u0367"=>230, "\u0368"=>230, + "\u0369"=>230, "\u036A"=>230, "\u036B"=>230, "\u036C"=>230, "\u036D"=>230, "\u036E"=>230, "\u036F"=>230, "\u0483"=>230, + "\u0484"=>230, "\u0485"=>230, "\u0486"=>230, "\u0487"=>230, "\u0591"=>220, "\u0592"=>230, "\u0593"=>230, "\u0594"=>230, + "\u0595"=>230, "\u0596"=>220, "\u0597"=>230, "\u0598"=>230, "\u0599"=>230, "\u059A"=>222, "\u059B"=>220, "\u059C"=>230, + "\u059D"=>230, "\u059E"=>230, "\u059F"=>230, "\u05A0"=>230, "\u05A1"=>230, "\u05A2"=>220, "\u05A3"=>220, "\u05A4"=>220, + "\u05A5"=>220, "\u05A6"=>220, "\u05A7"=>220, "\u05A8"=>230, "\u05A9"=>230, "\u05AA"=>220, "\u05AB"=>230, "\u05AC"=>230, + "\u05AD"=>222, "\u05AE"=>228, "\u05AF"=>230, "\u05B0"=>10, "\u05B1"=>11, "\u05B2"=>12, "\u05B3"=>13, "\u05B4"=>14, + "\u05B5"=>15, "\u05B6"=>16, "\u05B7"=>17, "\u05B8"=>18, "\u05B9"=>19, "\u05BA"=>19, "\u05BB"=>20, "\u05BC"=>21, + "\u05BD"=>22, "\u05BF"=>23, "\u05C1"=>24, "\u05C2"=>25, "\u05C4"=>230, "\u05C5"=>220, "\u05C7"=>18, "\u0610"=>230, + "\u0611"=>230, "\u0612"=>230, "\u0613"=>230, "\u0614"=>230, "\u0615"=>230, "\u0616"=>230, "\u0617"=>230, "\u0618"=>30, + "\u0619"=>31, "\u061A"=>32, "\u064B"=>27, "\u064C"=>28, "\u064D"=>29, "\u064E"=>30, "\u064F"=>31, "\u0650"=>32, + "\u0651"=>33, "\u0652"=>34, "\u0653"=>230, "\u0654"=>230, "\u0655"=>220, "\u0656"=>220, "\u0657"=>230, "\u0658"=>230, + "\u0659"=>230, "\u065A"=>230, "\u065B"=>230, "\u065C"=>220, "\u065D"=>230, "\u065E"=>230, "\u065F"=>220, "\u0670"=>35, + "\u06D6"=>230, "\u06D7"=>230, "\u06D8"=>230, "\u06D9"=>230, "\u06DA"=>230, "\u06DB"=>230, "\u06DC"=>230, "\u06DF"=>230, + "\u06E0"=>230, "\u06E1"=>230, "\u06E2"=>230, "\u06E3"=>220, "\u06E4"=>230, "\u06E7"=>230, "\u06E8"=>230, "\u06EA"=>220, + "\u06EB"=>230, "\u06EC"=>230, "\u06ED"=>220, "\u0711"=>36, "\u0730"=>230, "\u0731"=>220, "\u0732"=>230, "\u0733"=>230, + "\u0734"=>220, "\u0735"=>230, "\u0736"=>230, "\u0737"=>220, "\u0738"=>220, "\u0739"=>220, "\u073A"=>230, "\u073B"=>220, + "\u073C"=>220, "\u073D"=>230, "\u073E"=>220, "\u073F"=>230, "\u0740"=>230, "\u0741"=>230, "\u0742"=>220, "\u0743"=>230, + "\u0744"=>220, "\u0745"=>230, "\u0746"=>220, "\u0747"=>230, "\u0748"=>220, "\u0749"=>230, "\u074A"=>230, "\u07EB"=>230, + "\u07EC"=>230, "\u07ED"=>230, "\u07EE"=>230, "\u07EF"=>230, "\u07F0"=>230, "\u07F1"=>230, "\u07F2"=>220, "\u07F3"=>230, + "\u0816"=>230, "\u0817"=>230, "\u0818"=>230, "\u0819"=>230, "\u081B"=>230, "\u081C"=>230, "\u081D"=>230, "\u081E"=>230, + "\u081F"=>230, "\u0820"=>230, "\u0821"=>230, "\u0822"=>230, "\u0823"=>230, "\u0825"=>230, "\u0826"=>230, "\u0827"=>230, + "\u0829"=>230, "\u082A"=>230, "\u082B"=>230, "\u082C"=>230, "\u082D"=>230, "\u0859"=>220, "\u085A"=>220, "\u085B"=>220, + "\u08D4"=>230, "\u08D5"=>230, "\u08D6"=>230, "\u08D7"=>230, "\u08D8"=>230, "\u08D9"=>230, "\u08DA"=>230, "\u08DB"=>230, + "\u08DC"=>230, "\u08DD"=>230, "\u08DE"=>230, "\u08DF"=>230, "\u08E0"=>230, "\u08E1"=>230, "\u08E3"=>220, "\u08E4"=>230, + "\u08E5"=>230, "\u08E6"=>220, "\u08E7"=>230, "\u08E8"=>230, "\u08E9"=>220, "\u08EA"=>230, "\u08EB"=>230, "\u08EC"=>230, + "\u08ED"=>220, "\u08EE"=>220, "\u08EF"=>220, "\u08F0"=>27, "\u08F1"=>28, "\u08F2"=>29, "\u08F3"=>230, "\u08F4"=>230, + "\u08F5"=>230, "\u08F6"=>220, "\u08F7"=>230, "\u08F8"=>230, "\u08F9"=>220, "\u08FA"=>220, "\u08FB"=>230, "\u08FC"=>230, + "\u08FD"=>230, "\u08FE"=>230, "\u08FF"=>230, "\u093C"=>7, "\u094D"=>9, "\u0951"=>230, "\u0952"=>220, "\u0953"=>230, + "\u0954"=>230, "\u09BC"=>7, "\u09CD"=>9, "\u0A3C"=>7, "\u0A4D"=>9, "\u0ABC"=>7, "\u0ACD"=>9, "\u0B3C"=>7, + "\u0B4D"=>9, "\u0BCD"=>9, "\u0C4D"=>9, "\u0C55"=>84, "\u0C56"=>91, "\u0CBC"=>7, "\u0CCD"=>9, "\u0D4D"=>9, + "\u0DCA"=>9, "\u0E38"=>103, "\u0E39"=>103, "\u0E3A"=>9, "\u0E48"=>107, "\u0E49"=>107, "\u0E4A"=>107, "\u0E4B"=>107, + "\u0EB8"=>118, "\u0EB9"=>118, "\u0EC8"=>122, "\u0EC9"=>122, "\u0ECA"=>122, "\u0ECB"=>122, "\u0F18"=>220, "\u0F19"=>220, + "\u0F35"=>220, "\u0F37"=>220, "\u0F39"=>216, "\u0F71"=>129, "\u0F72"=>130, "\u0F74"=>132, "\u0F7A"=>130, "\u0F7B"=>130, + "\u0F7C"=>130, "\u0F7D"=>130, "\u0F80"=>130, "\u0F82"=>230, "\u0F83"=>230, "\u0F84"=>9, "\u0F86"=>230, "\u0F87"=>230, + "\u0FC6"=>220, "\u1037"=>7, "\u1039"=>9, "\u103A"=>9, "\u108D"=>220, "\u135D"=>230, "\u135E"=>230, "\u135F"=>230, + "\u1714"=>9, "\u1734"=>9, "\u17D2"=>9, "\u17DD"=>230, "\u18A9"=>228, "\u1939"=>222, "\u193A"=>230, "\u193B"=>220, + "\u1A17"=>230, "\u1A18"=>220, "\u1A60"=>9, "\u1A75"=>230, "\u1A76"=>230, "\u1A77"=>230, "\u1A78"=>230, "\u1A79"=>230, + "\u1A7A"=>230, "\u1A7B"=>230, "\u1A7C"=>230, "\u1A7F"=>220, "\u1AB0"=>230, "\u1AB1"=>230, "\u1AB2"=>230, "\u1AB3"=>230, + "\u1AB4"=>230, "\u1AB5"=>220, "\u1AB6"=>220, "\u1AB7"=>220, "\u1AB8"=>220, "\u1AB9"=>220, "\u1ABA"=>220, "\u1ABB"=>230, + "\u1ABC"=>230, "\u1ABD"=>220, "\u1B34"=>7, "\u1B44"=>9, "\u1B6B"=>230, "\u1B6C"=>220, "\u1B6D"=>230, "\u1B6E"=>230, + "\u1B6F"=>230, "\u1B70"=>230, "\u1B71"=>230, "\u1B72"=>230, "\u1B73"=>230, "\u1BAA"=>9, "\u1BAB"=>9, "\u1BE6"=>7, + "\u1BF2"=>9, "\u1BF3"=>9, "\u1C37"=>7, "\u1CD0"=>230, "\u1CD1"=>230, "\u1CD2"=>230, "\u1CD4"=>1, "\u1CD5"=>220, + "\u1CD6"=>220, "\u1CD7"=>220, "\u1CD8"=>220, "\u1CD9"=>220, "\u1CDA"=>230, "\u1CDB"=>230, "\u1CDC"=>220, "\u1CDD"=>220, + "\u1CDE"=>220, "\u1CDF"=>220, "\u1CE0"=>230, "\u1CE2"=>1, "\u1CE3"=>1, "\u1CE4"=>1, "\u1CE5"=>1, "\u1CE6"=>1, + "\u1CE7"=>1, "\u1CE8"=>1, "\u1CED"=>220, "\u1CF4"=>230, "\u1CF8"=>230, "\u1CF9"=>230, "\u1DC0"=>230, "\u1DC1"=>230, + "\u1DC2"=>220, "\u1DC3"=>230, "\u1DC4"=>230, "\u1DC5"=>230, "\u1DC6"=>230, "\u1DC7"=>230, "\u1DC8"=>230, "\u1DC9"=>230, + "\u1DCA"=>220, "\u1DCB"=>230, "\u1DCC"=>230, "\u1DCD"=>234, "\u1DCE"=>214, "\u1DCF"=>220, "\u1DD0"=>202, "\u1DD1"=>230, + "\u1DD2"=>230, "\u1DD3"=>230, "\u1DD4"=>230, "\u1DD5"=>230, "\u1DD6"=>230, "\u1DD7"=>230, "\u1DD8"=>230, "\u1DD9"=>230, + "\u1DDA"=>230, "\u1DDB"=>230, "\u1DDC"=>230, "\u1DDD"=>230, "\u1DDE"=>230, "\u1DDF"=>230, "\u1DE0"=>230, "\u1DE1"=>230, + "\u1DE2"=>230, "\u1DE3"=>230, "\u1DE4"=>230, "\u1DE5"=>230, "\u1DE6"=>230, "\u1DE7"=>230, "\u1DE8"=>230, "\u1DE9"=>230, + "\u1DEA"=>230, "\u1DEB"=>230, "\u1DEC"=>230, "\u1DED"=>230, "\u1DEE"=>230, "\u1DEF"=>230, "\u1DF0"=>230, "\u1DF1"=>230, + "\u1DF2"=>230, "\u1DF3"=>230, "\u1DF4"=>230, "\u1DF5"=>230, "\u1DFB"=>230, "\u1DFC"=>233, "\u1DFD"=>220, "\u1DFE"=>230, + "\u1DFF"=>220, "\u20D0"=>230, "\u20D1"=>230, "\u20D2"=>1, "\u20D3"=>1, "\u20D4"=>230, "\u20D5"=>230, "\u20D6"=>230, + "\u20D7"=>230, "\u20D8"=>1, "\u20D9"=>1, "\u20DA"=>1, "\u20DB"=>230, "\u20DC"=>230, "\u20E1"=>230, "\u20E5"=>1, + "\u20E6"=>1, "\u20E7"=>230, "\u20E8"=>220, "\u20E9"=>230, "\u20EA"=>1, "\u20EB"=>1, "\u20EC"=>220, "\u20ED"=>220, + "\u20EE"=>220, "\u20EF"=>220, "\u20F0"=>230, "\u2CEF"=>230, "\u2CF0"=>230, "\u2CF1"=>230, "\u2D7F"=>9, "\u2DE0"=>230, + "\u2DE1"=>230, "\u2DE2"=>230, "\u2DE3"=>230, "\u2DE4"=>230, "\u2DE5"=>230, "\u2DE6"=>230, "\u2DE7"=>230, "\u2DE8"=>230, + "\u2DE9"=>230, "\u2DEA"=>230, "\u2DEB"=>230, "\u2DEC"=>230, "\u2DED"=>230, "\u2DEE"=>230, "\u2DEF"=>230, "\u2DF0"=>230, + "\u2DF1"=>230, "\u2DF2"=>230, "\u2DF3"=>230, "\u2DF4"=>230, "\u2DF5"=>230, "\u2DF6"=>230, "\u2DF7"=>230, "\u2DF8"=>230, + "\u2DF9"=>230, "\u2DFA"=>230, "\u2DFB"=>230, "\u2DFC"=>230, "\u2DFD"=>230, "\u2DFE"=>230, "\u2DFF"=>230, "\u302A"=>218, + "\u302B"=>228, "\u302C"=>232, "\u302D"=>222, "\u302E"=>224, "\u302F"=>224, "\u3099"=>8, "\u309A"=>8, "\uA66F"=>230, + "\uA674"=>230, "\uA675"=>230, "\uA676"=>230, "\uA677"=>230, "\uA678"=>230, "\uA679"=>230, "\uA67A"=>230, "\uA67B"=>230, + "\uA67C"=>230, "\uA67D"=>230, "\uA69E"=>230, "\uA69F"=>230, "\uA6F0"=>230, "\uA6F1"=>230, "\uA806"=>9, "\uA8C4"=>9, + "\uA8E0"=>230, "\uA8E1"=>230, "\uA8E2"=>230, "\uA8E3"=>230, "\uA8E4"=>230, "\uA8E5"=>230, "\uA8E6"=>230, "\uA8E7"=>230, + "\uA8E8"=>230, "\uA8E9"=>230, "\uA8EA"=>230, "\uA8EB"=>230, "\uA8EC"=>230, "\uA8ED"=>230, "\uA8EE"=>230, "\uA8EF"=>230, + "\uA8F0"=>230, "\uA8F1"=>230, "\uA92B"=>220, "\uA92C"=>220, "\uA92D"=>220, "\uA953"=>9, "\uA9B3"=>7, "\uA9C0"=>9, + "\uAAB0"=>230, "\uAAB2"=>230, "\uAAB3"=>230, "\uAAB4"=>220, "\uAAB7"=>230, "\uAAB8"=>230, "\uAABE"=>230, "\uAABF"=>230, + "\uAAC1"=>230, "\uAAF6"=>9, "\uABED"=>9, "\uFB1E"=>26, "\uFE20"=>230, "\uFE21"=>230, "\uFE22"=>230, "\uFE23"=>230, + "\uFE24"=>230, "\uFE25"=>230, "\uFE26"=>230, "\uFE27"=>220, "\uFE28"=>220, "\uFE29"=>220, "\uFE2A"=>220, "\uFE2B"=>220, + "\uFE2C"=>220, "\uFE2D"=>220, "\uFE2E"=>230, "\uFE2F"=>230, "\u{101FD}"=>220, "\u{102E0}"=>220, "\u{10376}"=>230, "\u{10377}"=>230, + "\u{10378}"=>230, "\u{10379}"=>230, "\u{1037A}"=>230, "\u{10A0D}"=>220, "\u{10A0F}"=>230, "\u{10A38}"=>230, "\u{10A39}"=>1, "\u{10A3A}"=>220, + "\u{10A3F}"=>9, "\u{10AE5}"=>230, "\u{10AE6}"=>220, "\u{11046}"=>9, "\u{1107F}"=>9, "\u{110B9}"=>9, "\u{110BA}"=>7, "\u{11100}"=>230, + "\u{11101}"=>230, "\u{11102}"=>230, "\u{11133}"=>9, "\u{11134}"=>9, "\u{11173}"=>7, "\u{111C0}"=>9, "\u{111CA}"=>7, "\u{11235}"=>9, + "\u{11236}"=>7, "\u{112E9}"=>7, "\u{112EA}"=>9, "\u{1133C}"=>7, "\u{1134D}"=>9, "\u{11366}"=>230, "\u{11367}"=>230, "\u{11368}"=>230, + "\u{11369}"=>230, "\u{1136A}"=>230, "\u{1136B}"=>230, "\u{1136C}"=>230, "\u{11370}"=>230, "\u{11371}"=>230, "\u{11372}"=>230, "\u{11373}"=>230, + "\u{11374}"=>230, "\u{11442}"=>9, "\u{11446}"=>7, "\u{114C2}"=>9, "\u{114C3}"=>7, "\u{115BF}"=>9, "\u{115C0}"=>7, "\u{1163F}"=>9, + "\u{116B6}"=>9, "\u{116B7}"=>7, "\u{1172B}"=>9, "\u{11C3F}"=>9, "\u{16AF0}"=>1, "\u{16AF1}"=>1, "\u{16AF2}"=>1, "\u{16AF3}"=>1, + "\u{16AF4}"=>1, "\u{16B30}"=>230, "\u{16B31}"=>230, "\u{16B32}"=>230, "\u{16B33}"=>230, "\u{16B34}"=>230, "\u{16B35}"=>230, "\u{16B36}"=>230, + "\u{1BC9E}"=>1, "\u{1D165}"=>216, "\u{1D166}"=>216, "\u{1D167}"=>1, "\u{1D168}"=>1, "\u{1D169}"=>1, "\u{1D16D}"=>226, "\u{1D16E}"=>216, + "\u{1D16F}"=>216, "\u{1D170}"=>216, "\u{1D171}"=>216, "\u{1D172}"=>216, "\u{1D17B}"=>220, "\u{1D17C}"=>220, "\u{1D17D}"=>220, "\u{1D17E}"=>220, + "\u{1D17F}"=>220, "\u{1D180}"=>220, "\u{1D181}"=>220, "\u{1D182}"=>220, "\u{1D185}"=>230, "\u{1D186}"=>230, "\u{1D187}"=>230, "\u{1D188}"=>230, + "\u{1D189}"=>230, "\u{1D18A}"=>220, "\u{1D18B}"=>220, "\u{1D1AA}"=>230, "\u{1D1AB}"=>230, "\u{1D1AC}"=>230, "\u{1D1AD}"=>230, "\u{1D242}"=>230, + "\u{1D243}"=>230, "\u{1D244}"=>230, "\u{1E000}"=>230, "\u{1E001}"=>230, "\u{1E002}"=>230, "\u{1E003}"=>230, "\u{1E004}"=>230, "\u{1E005}"=>230, + "\u{1E006}"=>230, "\u{1E008}"=>230, "\u{1E009}"=>230, "\u{1E00A}"=>230, "\u{1E00B}"=>230, "\u{1E00C}"=>230, "\u{1E00D}"=>230, "\u{1E00E}"=>230, + "\u{1E00F}"=>230, "\u{1E010}"=>230, "\u{1E011}"=>230, "\u{1E012}"=>230, "\u{1E013}"=>230, "\u{1E014}"=>230, "\u{1E015}"=>230, "\u{1E016}"=>230, + "\u{1E017}"=>230, "\u{1E018}"=>230, "\u{1E01B}"=>230, "\u{1E01C}"=>230, "\u{1E01D}"=>230, "\u{1E01E}"=>230, "\u{1E01F}"=>230, "\u{1E020}"=>230, + "\u{1E021}"=>230, "\u{1E023}"=>230, "\u{1E024}"=>230, "\u{1E026}"=>230, "\u{1E027}"=>230, "\u{1E028}"=>230, "\u{1E029}"=>230, "\u{1E02A}"=>230, + "\u{1E8D0}"=>220, "\u{1E8D1}"=>220, "\u{1E8D2}"=>220, "\u{1E8D3}"=>220, "\u{1E8D4}"=>220, "\u{1E8D5}"=>220, "\u{1E8D6}"=>220, "\u{1E944}"=>230, + "\u{1E945}"=>230, "\u{1E946}"=>230, "\u{1E947}"=>230, "\u{1E948}"=>230, "\u{1E949}"=>230, "\u{1E94A}"=>7, + } + class_table.default = 0 + CLASS_TABLE = class_table.freeze + + DECOMPOSITION_TABLE = { + "\u00C0"=>"A\u0300", "\u00C1"=>"A\u0301", "\u00C2"=>"A\u0302", "\u00C3"=>"A\u0303", "\u00C4"=>"A\u0308", "\u00C5"=>"A\u030A", "\u00C7"=>"C\u0327", "\u00C8"=>"E\u0300", + "\u00C9"=>"E\u0301", "\u00CA"=>"E\u0302", "\u00CB"=>"E\u0308", "\u00CC"=>"I\u0300", "\u00CD"=>"I\u0301", "\u00CE"=>"I\u0302", "\u00CF"=>"I\u0308", "\u00D1"=>"N\u0303", + "\u00D2"=>"O\u0300", "\u00D3"=>"O\u0301", "\u00D4"=>"O\u0302", "\u00D5"=>"O\u0303", "\u00D6"=>"O\u0308", "\u00D9"=>"U\u0300", "\u00DA"=>"U\u0301", "\u00DB"=>"U\u0302", + "\u00DC"=>"U\u0308", "\u00DD"=>"Y\u0301", "\u00E0"=>"a\u0300", "\u00E1"=>"a\u0301", "\u00E2"=>"a\u0302", "\u00E3"=>"a\u0303", "\u00E4"=>"a\u0308", "\u00E5"=>"a\u030A", + "\u00E7"=>"c\u0327", "\u00E8"=>"e\u0300", "\u00E9"=>"e\u0301", "\u00EA"=>"e\u0302", "\u00EB"=>"e\u0308", "\u00EC"=>"i\u0300", "\u00ED"=>"i\u0301", "\u00EE"=>"i\u0302", + "\u00EF"=>"i\u0308", "\u00F1"=>"n\u0303", "\u00F2"=>"o\u0300", "\u00F3"=>"o\u0301", "\u00F4"=>"o\u0302", "\u00F5"=>"o\u0303", "\u00F6"=>"o\u0308", "\u00F9"=>"u\u0300", + "\u00FA"=>"u\u0301", "\u00FB"=>"u\u0302", "\u00FC"=>"u\u0308", "\u00FD"=>"y\u0301", "\u00FF"=>"y\u0308", "\u0100"=>"A\u0304", "\u0101"=>"a\u0304", "\u0102"=>"A\u0306", + "\u0103"=>"a\u0306", "\u0104"=>"A\u0328", "\u0105"=>"a\u0328", "\u0106"=>"C\u0301", "\u0107"=>"c\u0301", "\u0108"=>"C\u0302", "\u0109"=>"c\u0302", "\u010A"=>"C\u0307", + "\u010B"=>"c\u0307", "\u010C"=>"C\u030C", "\u010D"=>"c\u030C", "\u010E"=>"D\u030C", "\u010F"=>"d\u030C", "\u0112"=>"E\u0304", "\u0113"=>"e\u0304", "\u0114"=>"E\u0306", + "\u0115"=>"e\u0306", "\u0116"=>"E\u0307", "\u0117"=>"e\u0307", "\u0118"=>"E\u0328", "\u0119"=>"e\u0328", "\u011A"=>"E\u030C", "\u011B"=>"e\u030C", "\u011C"=>"G\u0302", + "\u011D"=>"g\u0302", "\u011E"=>"G\u0306", "\u011F"=>"g\u0306", "\u0120"=>"G\u0307", "\u0121"=>"g\u0307", "\u0122"=>"G\u0327", "\u0123"=>"g\u0327", "\u0124"=>"H\u0302", + "\u0125"=>"h\u0302", "\u0128"=>"I\u0303", "\u0129"=>"i\u0303", "\u012A"=>"I\u0304", "\u012B"=>"i\u0304", "\u012C"=>"I\u0306", "\u012D"=>"i\u0306", "\u012E"=>"I\u0328", + "\u012F"=>"i\u0328", "\u0130"=>"I\u0307", "\u0134"=>"J\u0302", "\u0135"=>"j\u0302", "\u0136"=>"K\u0327", "\u0137"=>"k\u0327", "\u0139"=>"L\u0301", "\u013A"=>"l\u0301", + "\u013B"=>"L\u0327", "\u013C"=>"l\u0327", "\u013D"=>"L\u030C", "\u013E"=>"l\u030C", "\u0143"=>"N\u0301", "\u0144"=>"n\u0301", "\u0145"=>"N\u0327", "\u0146"=>"n\u0327", + "\u0147"=>"N\u030C", "\u0148"=>"n\u030C", "\u014C"=>"O\u0304", "\u014D"=>"o\u0304", "\u014E"=>"O\u0306", "\u014F"=>"o\u0306", "\u0150"=>"O\u030B", "\u0151"=>"o\u030B", + "\u0154"=>"R\u0301", "\u0155"=>"r\u0301", "\u0156"=>"R\u0327", "\u0157"=>"r\u0327", "\u0158"=>"R\u030C", "\u0159"=>"r\u030C", "\u015A"=>"S\u0301", "\u015B"=>"s\u0301", + "\u015C"=>"S\u0302", "\u015D"=>"s\u0302", "\u015E"=>"S\u0327", "\u015F"=>"s\u0327", "\u0160"=>"S\u030C", "\u0161"=>"s\u030C", "\u0162"=>"T\u0327", "\u0163"=>"t\u0327", + "\u0164"=>"T\u030C", "\u0165"=>"t\u030C", "\u0168"=>"U\u0303", "\u0169"=>"u\u0303", "\u016A"=>"U\u0304", "\u016B"=>"u\u0304", "\u016C"=>"U\u0306", "\u016D"=>"u\u0306", + "\u016E"=>"U\u030A", "\u016F"=>"u\u030A", "\u0170"=>"U\u030B", "\u0171"=>"u\u030B", "\u0172"=>"U\u0328", "\u0173"=>"u\u0328", "\u0174"=>"W\u0302", "\u0175"=>"w\u0302", + "\u0176"=>"Y\u0302", "\u0177"=>"y\u0302", "\u0178"=>"Y\u0308", "\u0179"=>"Z\u0301", "\u017A"=>"z\u0301", "\u017B"=>"Z\u0307", "\u017C"=>"z\u0307", "\u017D"=>"Z\u030C", + "\u017E"=>"z\u030C", "\u01A0"=>"O\u031B", "\u01A1"=>"o\u031B", "\u01AF"=>"U\u031B", "\u01B0"=>"u\u031B", "\u01CD"=>"A\u030C", "\u01CE"=>"a\u030C", "\u01CF"=>"I\u030C", + "\u01D0"=>"i\u030C", "\u01D1"=>"O\u030C", "\u01D2"=>"o\u030C", "\u01D3"=>"U\u030C", "\u01D4"=>"u\u030C", "\u01D5"=>"U\u0308\u0304", "\u01D6"=>"u\u0308\u0304", "\u01D7"=>"U\u0308\u0301", + "\u01D8"=>"u\u0308\u0301", "\u01D9"=>"U\u0308\u030C", "\u01DA"=>"u\u0308\u030C", "\u01DB"=>"U\u0308\u0300", "\u01DC"=>"u\u0308\u0300", "\u01DE"=>"A\u0308\u0304", "\u01DF"=>"a\u0308\u0304", "\u01E0"=>"A\u0307\u0304", + "\u01E1"=>"a\u0307\u0304", "\u01E2"=>"\u00C6\u0304", "\u01E3"=>"\u00E6\u0304", "\u01E6"=>"G\u030C", "\u01E7"=>"g\u030C", "\u01E8"=>"K\u030C", "\u01E9"=>"k\u030C", "\u01EA"=>"O\u0328", + "\u01EB"=>"o\u0328", "\u01EC"=>"O\u0328\u0304", "\u01ED"=>"o\u0328\u0304", "\u01EE"=>"\u01B7\u030C", "\u01EF"=>"\u0292\u030C", "\u01F0"=>"j\u030C", "\u01F4"=>"G\u0301", "\u01F5"=>"g\u0301", + "\u01F8"=>"N\u0300", "\u01F9"=>"n\u0300", "\u01FA"=>"A\u030A\u0301", "\u01FB"=>"a\u030A\u0301", "\u01FC"=>"\u00C6\u0301", "\u01FD"=>"\u00E6\u0301", "\u01FE"=>"\u00D8\u0301", "\u01FF"=>"\u00F8\u0301", + "\u0200"=>"A\u030F", "\u0201"=>"a\u030F", "\u0202"=>"A\u0311", "\u0203"=>"a\u0311", "\u0204"=>"E\u030F", "\u0205"=>"e\u030F", "\u0206"=>"E\u0311", "\u0207"=>"e\u0311", + "\u0208"=>"I\u030F", "\u0209"=>"i\u030F", "\u020A"=>"I\u0311", "\u020B"=>"i\u0311", "\u020C"=>"O\u030F", "\u020D"=>"o\u030F", "\u020E"=>"O\u0311", "\u020F"=>"o\u0311", + "\u0210"=>"R\u030F", "\u0211"=>"r\u030F", "\u0212"=>"R\u0311", "\u0213"=>"r\u0311", "\u0214"=>"U\u030F", "\u0215"=>"u\u030F", "\u0216"=>"U\u0311", "\u0217"=>"u\u0311", + "\u0218"=>"S\u0326", "\u0219"=>"s\u0326", "\u021A"=>"T\u0326", "\u021B"=>"t\u0326", "\u021E"=>"H\u030C", "\u021F"=>"h\u030C", "\u0226"=>"A\u0307", "\u0227"=>"a\u0307", + "\u0228"=>"E\u0327", "\u0229"=>"e\u0327", "\u022A"=>"O\u0308\u0304", "\u022B"=>"o\u0308\u0304", "\u022C"=>"O\u0303\u0304", "\u022D"=>"o\u0303\u0304", "\u022E"=>"O\u0307", "\u022F"=>"o\u0307", + "\u0230"=>"O\u0307\u0304", "\u0231"=>"o\u0307\u0304", "\u0232"=>"Y\u0304", "\u0233"=>"y\u0304", "\u0340"=>"\u0300", "\u0341"=>"\u0301", "\u0343"=>"\u0313", "\u0344"=>"\u0308\u0301", + "\u0374"=>"\u02B9", "\u037E"=>";", "\u0385"=>"\u00A8\u0301", "\u0386"=>"\u0391\u0301", "\u0387"=>"\u00B7", "\u0388"=>"\u0395\u0301", "\u0389"=>"\u0397\u0301", "\u038A"=>"\u0399\u0301", + "\u038C"=>"\u039F\u0301", "\u038E"=>"\u03A5\u0301", "\u038F"=>"\u03A9\u0301", "\u0390"=>"\u03B9\u0308\u0301", "\u03AA"=>"\u0399\u0308", "\u03AB"=>"\u03A5\u0308", "\u03AC"=>"\u03B1\u0301", "\u03AD"=>"\u03B5\u0301", + "\u03AE"=>"\u03B7\u0301", "\u03AF"=>"\u03B9\u0301", "\u03B0"=>"\u03C5\u0308\u0301", "\u03CA"=>"\u03B9\u0308", "\u03CB"=>"\u03C5\u0308", "\u03CC"=>"\u03BF\u0301", "\u03CD"=>"\u03C5\u0301", "\u03CE"=>"\u03C9\u0301", + "\u03D3"=>"\u03D2\u0301", "\u03D4"=>"\u03D2\u0308", "\u0400"=>"\u0415\u0300", "\u0401"=>"\u0415\u0308", "\u0403"=>"\u0413\u0301", "\u0407"=>"\u0406\u0308", "\u040C"=>"\u041A\u0301", "\u040D"=>"\u0418\u0300", + "\u040E"=>"\u0423\u0306", "\u0419"=>"\u0418\u0306", "\u0439"=>"\u0438\u0306", "\u0450"=>"\u0435\u0300", "\u0451"=>"\u0435\u0308", "\u0453"=>"\u0433\u0301", "\u0457"=>"\u0456\u0308", "\u045C"=>"\u043A\u0301", + "\u045D"=>"\u0438\u0300", "\u045E"=>"\u0443\u0306", "\u0476"=>"\u0474\u030F", "\u0477"=>"\u0475\u030F", "\u04C1"=>"\u0416\u0306", "\u04C2"=>"\u0436\u0306", "\u04D0"=>"\u0410\u0306", "\u04D1"=>"\u0430\u0306", + "\u04D2"=>"\u0410\u0308", "\u04D3"=>"\u0430\u0308", "\u04D6"=>"\u0415\u0306", "\u04D7"=>"\u0435\u0306", "\u04DA"=>"\u04D8\u0308", "\u04DB"=>"\u04D9\u0308", "\u04DC"=>"\u0416\u0308", "\u04DD"=>"\u0436\u0308", + "\u04DE"=>"\u0417\u0308", "\u04DF"=>"\u0437\u0308", "\u04E2"=>"\u0418\u0304", "\u04E3"=>"\u0438\u0304", "\u04E4"=>"\u0418\u0308", "\u04E5"=>"\u0438\u0308", "\u04E6"=>"\u041E\u0308", "\u04E7"=>"\u043E\u0308", + "\u04EA"=>"\u04E8\u0308", "\u04EB"=>"\u04E9\u0308", "\u04EC"=>"\u042D\u0308", "\u04ED"=>"\u044D\u0308", "\u04EE"=>"\u0423\u0304", "\u04EF"=>"\u0443\u0304", "\u04F0"=>"\u0423\u0308", "\u04F1"=>"\u0443\u0308", + "\u04F2"=>"\u0423\u030B", "\u04F3"=>"\u0443\u030B", "\u04F4"=>"\u0427\u0308", "\u04F5"=>"\u0447\u0308", "\u04F8"=>"\u042B\u0308", "\u04F9"=>"\u044B\u0308", "\u0622"=>"\u0627\u0653", "\u0623"=>"\u0627\u0654", + "\u0624"=>"\u0648\u0654", "\u0625"=>"\u0627\u0655", "\u0626"=>"\u064A\u0654", "\u06C0"=>"\u06D5\u0654", "\u06C2"=>"\u06C1\u0654", "\u06D3"=>"\u06D2\u0654", "\u0929"=>"\u0928\u093C", "\u0931"=>"\u0930\u093C", + "\u0934"=>"\u0933\u093C", "\u0958"=>"\u0915\u093C", "\u0959"=>"\u0916\u093C", "\u095A"=>"\u0917\u093C", "\u095B"=>"\u091C\u093C", "\u095C"=>"\u0921\u093C", "\u095D"=>"\u0922\u093C", "\u095E"=>"\u092B\u093C", + "\u095F"=>"\u092F\u093C", "\u09CB"=>"\u09C7\u09BE", "\u09CC"=>"\u09C7\u09D7", "\u09DC"=>"\u09A1\u09BC", "\u09DD"=>"\u09A2\u09BC", "\u09DF"=>"\u09AF\u09BC", "\u0A33"=>"\u0A32\u0A3C", "\u0A36"=>"\u0A38\u0A3C", + "\u0A59"=>"\u0A16\u0A3C", "\u0A5A"=>"\u0A17\u0A3C", "\u0A5B"=>"\u0A1C\u0A3C", "\u0A5E"=>"\u0A2B\u0A3C", "\u0B48"=>"\u0B47\u0B56", "\u0B4B"=>"\u0B47\u0B3E", "\u0B4C"=>"\u0B47\u0B57", "\u0B5C"=>"\u0B21\u0B3C", + "\u0B5D"=>"\u0B22\u0B3C", "\u0B94"=>"\u0B92\u0BD7", "\u0BCA"=>"\u0BC6\u0BBE", "\u0BCB"=>"\u0BC7\u0BBE", "\u0BCC"=>"\u0BC6\u0BD7", "\u0C48"=>"\u0C46\u0C56", "\u0CC0"=>"\u0CBF\u0CD5", "\u0CC7"=>"\u0CC6\u0CD5", + "\u0CC8"=>"\u0CC6\u0CD6", "\u0CCA"=>"\u0CC6\u0CC2", "\u0CCB"=>"\u0CC6\u0CC2\u0CD5", "\u0D4A"=>"\u0D46\u0D3E", "\u0D4B"=>"\u0D47\u0D3E", "\u0D4C"=>"\u0D46\u0D57", "\u0DDA"=>"\u0DD9\u0DCA", "\u0DDC"=>"\u0DD9\u0DCF", + "\u0DDD"=>"\u0DD9\u0DCF\u0DCA", "\u0DDE"=>"\u0DD9\u0DDF", "\u0F43"=>"\u0F42\u0FB7", "\u0F4D"=>"\u0F4C\u0FB7", "\u0F52"=>"\u0F51\u0FB7", "\u0F57"=>"\u0F56\u0FB7", "\u0F5C"=>"\u0F5B\u0FB7", "\u0F69"=>"\u0F40\u0FB5", + "\u0F73"=>"\u0F71\u0F72", "\u0F75"=>"\u0F71\u0F74", "\u0F76"=>"\u0FB2\u0F80", "\u0F78"=>"\u0FB3\u0F80", "\u0F81"=>"\u0F71\u0F80", "\u0F93"=>"\u0F92\u0FB7", "\u0F9D"=>"\u0F9C\u0FB7", "\u0FA2"=>"\u0FA1\u0FB7", + "\u0FA7"=>"\u0FA6\u0FB7", "\u0FAC"=>"\u0FAB\u0FB7", "\u0FB9"=>"\u0F90\u0FB5", "\u1026"=>"\u1025\u102E", "\u1B06"=>"\u1B05\u1B35", "\u1B08"=>"\u1B07\u1B35", "\u1B0A"=>"\u1B09\u1B35", "\u1B0C"=>"\u1B0B\u1B35", + "\u1B0E"=>"\u1B0D\u1B35", "\u1B12"=>"\u1B11\u1B35", "\u1B3B"=>"\u1B3A\u1B35", "\u1B3D"=>"\u1B3C\u1B35", "\u1B40"=>"\u1B3E\u1B35", "\u1B41"=>"\u1B3F\u1B35", "\u1B43"=>"\u1B42\u1B35", "\u1E00"=>"A\u0325", + "\u1E01"=>"a\u0325", "\u1E02"=>"B\u0307", "\u1E03"=>"b\u0307", "\u1E04"=>"B\u0323", "\u1E05"=>"b\u0323", "\u1E06"=>"B\u0331", "\u1E07"=>"b\u0331", "\u1E08"=>"C\u0327\u0301", + "\u1E09"=>"c\u0327\u0301", "\u1E0A"=>"D\u0307", "\u1E0B"=>"d\u0307", "\u1E0C"=>"D\u0323", "\u1E0D"=>"d\u0323", "\u1E0E"=>"D\u0331", "\u1E0F"=>"d\u0331", "\u1E10"=>"D\u0327", + "\u1E11"=>"d\u0327", "\u1E12"=>"D\u032D", "\u1E13"=>"d\u032D", "\u1E14"=>"E\u0304\u0300", "\u1E15"=>"e\u0304\u0300", "\u1E16"=>"E\u0304\u0301", "\u1E17"=>"e\u0304\u0301", "\u1E18"=>"E\u032D", + "\u1E19"=>"e\u032D", "\u1E1A"=>"E\u0330", "\u1E1B"=>"e\u0330", "\u1E1C"=>"E\u0327\u0306", "\u1E1D"=>"e\u0327\u0306", "\u1E1E"=>"F\u0307", "\u1E1F"=>"f\u0307", "\u1E20"=>"G\u0304", + "\u1E21"=>"g\u0304", "\u1E22"=>"H\u0307", "\u1E23"=>"h\u0307", "\u1E24"=>"H\u0323", "\u1E25"=>"h\u0323", "\u1E26"=>"H\u0308", "\u1E27"=>"h\u0308", "\u1E28"=>"H\u0327", + "\u1E29"=>"h\u0327", "\u1E2A"=>"H\u032E", "\u1E2B"=>"h\u032E", "\u1E2C"=>"I\u0330", "\u1E2D"=>"i\u0330", "\u1E2E"=>"I\u0308\u0301", "\u1E2F"=>"i\u0308\u0301", "\u1E30"=>"K\u0301", + "\u1E31"=>"k\u0301", "\u1E32"=>"K\u0323", "\u1E33"=>"k\u0323", "\u1E34"=>"K\u0331", "\u1E35"=>"k\u0331", "\u1E36"=>"L\u0323", "\u1E37"=>"l\u0323", "\u1E38"=>"L\u0323\u0304", + "\u1E39"=>"l\u0323\u0304", "\u1E3A"=>"L\u0331", "\u1E3B"=>"l\u0331", "\u1E3C"=>"L\u032D", "\u1E3D"=>"l\u032D", "\u1E3E"=>"M\u0301", "\u1E3F"=>"m\u0301", "\u1E40"=>"M\u0307", + "\u1E41"=>"m\u0307", "\u1E42"=>"M\u0323", "\u1E43"=>"m\u0323", "\u1E44"=>"N\u0307", "\u1E45"=>"n\u0307", "\u1E46"=>"N\u0323", "\u1E47"=>"n\u0323", "\u1E48"=>"N\u0331", + "\u1E49"=>"n\u0331", "\u1E4A"=>"N\u032D", "\u1E4B"=>"n\u032D", "\u1E4C"=>"O\u0303\u0301", "\u1E4D"=>"o\u0303\u0301", "\u1E4E"=>"O\u0303\u0308", "\u1E4F"=>"o\u0303\u0308", "\u1E50"=>"O\u0304\u0300", + "\u1E51"=>"o\u0304\u0300", "\u1E52"=>"O\u0304\u0301", "\u1E53"=>"o\u0304\u0301", "\u1E54"=>"P\u0301", "\u1E55"=>"p\u0301", "\u1E56"=>"P\u0307", "\u1E57"=>"p\u0307", "\u1E58"=>"R\u0307", + "\u1E59"=>"r\u0307", "\u1E5A"=>"R\u0323", "\u1E5B"=>"r\u0323", "\u1E5C"=>"R\u0323\u0304", "\u1E5D"=>"r\u0323\u0304", "\u1E5E"=>"R\u0331", "\u1E5F"=>"r\u0331", "\u1E60"=>"S\u0307", + "\u1E61"=>"s\u0307", "\u1E62"=>"S\u0323", "\u1E63"=>"s\u0323", "\u1E64"=>"S\u0301\u0307", "\u1E65"=>"s\u0301\u0307", "\u1E66"=>"S\u030C\u0307", "\u1E67"=>"s\u030C\u0307", "\u1E68"=>"S\u0323\u0307", + "\u1E69"=>"s\u0323\u0307", "\u1E6A"=>"T\u0307", "\u1E6B"=>"t\u0307", "\u1E6C"=>"T\u0323", "\u1E6D"=>"t\u0323", "\u1E6E"=>"T\u0331", "\u1E6F"=>"t\u0331", "\u1E70"=>"T\u032D", + "\u1E71"=>"t\u032D", "\u1E72"=>"U\u0324", "\u1E73"=>"u\u0324", "\u1E74"=>"U\u0330", "\u1E75"=>"u\u0330", "\u1E76"=>"U\u032D", "\u1E77"=>"u\u032D", "\u1E78"=>"U\u0303\u0301", + "\u1E79"=>"u\u0303\u0301", "\u1E7A"=>"U\u0304\u0308", "\u1E7B"=>"u\u0304\u0308", "\u1E7C"=>"V\u0303", "\u1E7D"=>"v\u0303", "\u1E7E"=>"V\u0323", "\u1E7F"=>"v\u0323", "\u1E80"=>"W\u0300", + "\u1E81"=>"w\u0300", "\u1E82"=>"W\u0301", "\u1E83"=>"w\u0301", "\u1E84"=>"W\u0308", "\u1E85"=>"w\u0308", "\u1E86"=>"W\u0307", "\u1E87"=>"w\u0307", "\u1E88"=>"W\u0323", + "\u1E89"=>"w\u0323", "\u1E8A"=>"X\u0307", "\u1E8B"=>"x\u0307", "\u1E8C"=>"X\u0308", "\u1E8D"=>"x\u0308", "\u1E8E"=>"Y\u0307", "\u1E8F"=>"y\u0307", "\u1E90"=>"Z\u0302", + "\u1E91"=>"z\u0302", "\u1E92"=>"Z\u0323", "\u1E93"=>"z\u0323", "\u1E94"=>"Z\u0331", "\u1E95"=>"z\u0331", "\u1E96"=>"h\u0331", "\u1E97"=>"t\u0308", "\u1E98"=>"w\u030A", + "\u1E99"=>"y\u030A", "\u1E9B"=>"\u017F\u0307", "\u1EA0"=>"A\u0323", "\u1EA1"=>"a\u0323", "\u1EA2"=>"A\u0309", "\u1EA3"=>"a\u0309", "\u1EA4"=>"A\u0302\u0301", "\u1EA5"=>"a\u0302\u0301", + "\u1EA6"=>"A\u0302\u0300", "\u1EA7"=>"a\u0302\u0300", "\u1EA8"=>"A\u0302\u0309", "\u1EA9"=>"a\u0302\u0309", "\u1EAA"=>"A\u0302\u0303", "\u1EAB"=>"a\u0302\u0303", "\u1EAC"=>"A\u0323\u0302", "\u1EAD"=>"a\u0323\u0302", + "\u1EAE"=>"A\u0306\u0301", "\u1EAF"=>"a\u0306\u0301", "\u1EB0"=>"A\u0306\u0300", "\u1EB1"=>"a\u0306\u0300", "\u1EB2"=>"A\u0306\u0309", "\u1EB3"=>"a\u0306\u0309", "\u1EB4"=>"A\u0306\u0303", "\u1EB5"=>"a\u0306\u0303", + "\u1EB6"=>"A\u0323\u0306", "\u1EB7"=>"a\u0323\u0306", "\u1EB8"=>"E\u0323", "\u1EB9"=>"e\u0323", "\u1EBA"=>"E\u0309", "\u1EBB"=>"e\u0309", "\u1EBC"=>"E\u0303", "\u1EBD"=>"e\u0303", + "\u1EBE"=>"E\u0302\u0301", "\u1EBF"=>"e\u0302\u0301", "\u1EC0"=>"E\u0302\u0300", "\u1EC1"=>"e\u0302\u0300", "\u1EC2"=>"E\u0302\u0309", "\u1EC3"=>"e\u0302\u0309", "\u1EC4"=>"E\u0302\u0303", "\u1EC5"=>"e\u0302\u0303", + "\u1EC6"=>"E\u0323\u0302", "\u1EC7"=>"e\u0323\u0302", "\u1EC8"=>"I\u0309", "\u1EC9"=>"i\u0309", "\u1ECA"=>"I\u0323", "\u1ECB"=>"i\u0323", "\u1ECC"=>"O\u0323", "\u1ECD"=>"o\u0323", + "\u1ECE"=>"O\u0309", "\u1ECF"=>"o\u0309", "\u1ED0"=>"O\u0302\u0301", "\u1ED1"=>"o\u0302\u0301", "\u1ED2"=>"O\u0302\u0300", "\u1ED3"=>"o\u0302\u0300", "\u1ED4"=>"O\u0302\u0309", "\u1ED5"=>"o\u0302\u0309", + "\u1ED6"=>"O\u0302\u0303", "\u1ED7"=>"o\u0302\u0303", "\u1ED8"=>"O\u0323\u0302", "\u1ED9"=>"o\u0323\u0302", "\u1EDA"=>"O\u031B\u0301", "\u1EDB"=>"o\u031B\u0301", "\u1EDC"=>"O\u031B\u0300", "\u1EDD"=>"o\u031B\u0300", + "\u1EDE"=>"O\u031B\u0309", "\u1EDF"=>"o\u031B\u0309", "\u1EE0"=>"O\u031B\u0303", "\u1EE1"=>"o\u031B\u0303", "\u1EE2"=>"O\u031B\u0323", "\u1EE3"=>"o\u031B\u0323", "\u1EE4"=>"U\u0323", "\u1EE5"=>"u\u0323", + "\u1EE6"=>"U\u0309", "\u1EE7"=>"u\u0309", "\u1EE8"=>"U\u031B\u0301", "\u1EE9"=>"u\u031B\u0301", "\u1EEA"=>"U\u031B\u0300", "\u1EEB"=>"u\u031B\u0300", "\u1EEC"=>"U\u031B\u0309", "\u1EED"=>"u\u031B\u0309", + "\u1EEE"=>"U\u031B\u0303", "\u1EEF"=>"u\u031B\u0303", "\u1EF0"=>"U\u031B\u0323", "\u1EF1"=>"u\u031B\u0323", "\u1EF2"=>"Y\u0300", "\u1EF3"=>"y\u0300", "\u1EF4"=>"Y\u0323", "\u1EF5"=>"y\u0323", + "\u1EF6"=>"Y\u0309", "\u1EF7"=>"y\u0309", "\u1EF8"=>"Y\u0303", "\u1EF9"=>"y\u0303", "\u1F00"=>"\u03B1\u0313", "\u1F01"=>"\u03B1\u0314", "\u1F02"=>"\u03B1\u0313\u0300", "\u1F03"=>"\u03B1\u0314\u0300", + "\u1F04"=>"\u03B1\u0313\u0301", "\u1F05"=>"\u03B1\u0314\u0301", "\u1F06"=>"\u03B1\u0313\u0342", "\u1F07"=>"\u03B1\u0314\u0342", "\u1F08"=>"\u0391\u0313", "\u1F09"=>"\u0391\u0314", "\u1F0A"=>"\u0391\u0313\u0300", "\u1F0B"=>"\u0391\u0314\u0300", + "\u1F0C"=>"\u0391\u0313\u0301", "\u1F0D"=>"\u0391\u0314\u0301", "\u1F0E"=>"\u0391\u0313\u0342", "\u1F0F"=>"\u0391\u0314\u0342", "\u1F10"=>"\u03B5\u0313", "\u1F11"=>"\u03B5\u0314", "\u1F12"=>"\u03B5\u0313\u0300", "\u1F13"=>"\u03B5\u0314\u0300", + "\u1F14"=>"\u03B5\u0313\u0301", "\u1F15"=>"\u03B5\u0314\u0301", "\u1F18"=>"\u0395\u0313", "\u1F19"=>"\u0395\u0314", "\u1F1A"=>"\u0395\u0313\u0300", "\u1F1B"=>"\u0395\u0314\u0300", "\u1F1C"=>"\u0395\u0313\u0301", "\u1F1D"=>"\u0395\u0314\u0301", + "\u1F20"=>"\u03B7\u0313", "\u1F21"=>"\u03B7\u0314", "\u1F22"=>"\u03B7\u0313\u0300", "\u1F23"=>"\u03B7\u0314\u0300", "\u1F24"=>"\u03B7\u0313\u0301", "\u1F25"=>"\u03B7\u0314\u0301", "\u1F26"=>"\u03B7\u0313\u0342", "\u1F27"=>"\u03B7\u0314\u0342", + "\u1F28"=>"\u0397\u0313", "\u1F29"=>"\u0397\u0314", "\u1F2A"=>"\u0397\u0313\u0300", "\u1F2B"=>"\u0397\u0314\u0300", "\u1F2C"=>"\u0397\u0313\u0301", "\u1F2D"=>"\u0397\u0314\u0301", "\u1F2E"=>"\u0397\u0313\u0342", "\u1F2F"=>"\u0397\u0314\u0342", + "\u1F30"=>"\u03B9\u0313", "\u1F31"=>"\u03B9\u0314", "\u1F32"=>"\u03B9\u0313\u0300", "\u1F33"=>"\u03B9\u0314\u0300", "\u1F34"=>"\u03B9\u0313\u0301", "\u1F35"=>"\u03B9\u0314\u0301", "\u1F36"=>"\u03B9\u0313\u0342", "\u1F37"=>"\u03B9\u0314\u0342", + "\u1F38"=>"\u0399\u0313", "\u1F39"=>"\u0399\u0314", "\u1F3A"=>"\u0399\u0313\u0300", "\u1F3B"=>"\u0399\u0314\u0300", "\u1F3C"=>"\u0399\u0313\u0301", "\u1F3D"=>"\u0399\u0314\u0301", "\u1F3E"=>"\u0399\u0313\u0342", "\u1F3F"=>"\u0399\u0314\u0342", + "\u1F40"=>"\u03BF\u0313", "\u1F41"=>"\u03BF\u0314", "\u1F42"=>"\u03BF\u0313\u0300", "\u1F43"=>"\u03BF\u0314\u0300", "\u1F44"=>"\u03BF\u0313\u0301", "\u1F45"=>"\u03BF\u0314\u0301", "\u1F48"=>"\u039F\u0313", "\u1F49"=>"\u039F\u0314", + "\u1F4A"=>"\u039F\u0313\u0300", "\u1F4B"=>"\u039F\u0314\u0300", "\u1F4C"=>"\u039F\u0313\u0301", "\u1F4D"=>"\u039F\u0314\u0301", "\u1F50"=>"\u03C5\u0313", "\u1F51"=>"\u03C5\u0314", "\u1F52"=>"\u03C5\u0313\u0300", "\u1F53"=>"\u03C5\u0314\u0300", + "\u1F54"=>"\u03C5\u0313\u0301", "\u1F55"=>"\u03C5\u0314\u0301", "\u1F56"=>"\u03C5\u0313\u0342", "\u1F57"=>"\u03C5\u0314\u0342", "\u1F59"=>"\u03A5\u0314", "\u1F5B"=>"\u03A5\u0314\u0300", "\u1F5D"=>"\u03A5\u0314\u0301", "\u1F5F"=>"\u03A5\u0314\u0342", + "\u1F60"=>"\u03C9\u0313", "\u1F61"=>"\u03C9\u0314", "\u1F62"=>"\u03C9\u0313\u0300", "\u1F63"=>"\u03C9\u0314\u0300", "\u1F64"=>"\u03C9\u0313\u0301", "\u1F65"=>"\u03C9\u0314\u0301", "\u1F66"=>"\u03C9\u0313\u0342", "\u1F67"=>"\u03C9\u0314\u0342", + "\u1F68"=>"\u03A9\u0313", "\u1F69"=>"\u03A9\u0314", "\u1F6A"=>"\u03A9\u0313\u0300", "\u1F6B"=>"\u03A9\u0314\u0300", "\u1F6C"=>"\u03A9\u0313\u0301", "\u1F6D"=>"\u03A9\u0314\u0301", "\u1F6E"=>"\u03A9\u0313\u0342", "\u1F6F"=>"\u03A9\u0314\u0342", + "\u1F70"=>"\u03B1\u0300", "\u1F71"=>"\u03B1\u0301", "\u1F72"=>"\u03B5\u0300", "\u1F73"=>"\u03B5\u0301", "\u1F74"=>"\u03B7\u0300", "\u1F75"=>"\u03B7\u0301", "\u1F76"=>"\u03B9\u0300", "\u1F77"=>"\u03B9\u0301", + "\u1F78"=>"\u03BF\u0300", "\u1F79"=>"\u03BF\u0301", "\u1F7A"=>"\u03C5\u0300", "\u1F7B"=>"\u03C5\u0301", "\u1F7C"=>"\u03C9\u0300", "\u1F7D"=>"\u03C9\u0301", "\u1F80"=>"\u03B1\u0313\u0345", "\u1F81"=>"\u03B1\u0314\u0345", + "\u1F82"=>"\u03B1\u0313\u0300\u0345", "\u1F83"=>"\u03B1\u0314\u0300\u0345", "\u1F84"=>"\u03B1\u0313\u0301\u0345", "\u1F85"=>"\u03B1\u0314\u0301\u0345", "\u1F86"=>"\u03B1\u0313\u0342\u0345", "\u1F87"=>"\u03B1\u0314\u0342\u0345", "\u1F88"=>"\u0391\u0313\u0345", "\u1F89"=>"\u0391\u0314\u0345", + "\u1F8A"=>"\u0391\u0313\u0300\u0345", "\u1F8B"=>"\u0391\u0314\u0300\u0345", "\u1F8C"=>"\u0391\u0313\u0301\u0345", "\u1F8D"=>"\u0391\u0314\u0301\u0345", "\u1F8E"=>"\u0391\u0313\u0342\u0345", "\u1F8F"=>"\u0391\u0314\u0342\u0345", "\u1F90"=>"\u03B7\u0313\u0345", "\u1F91"=>"\u03B7\u0314\u0345", + "\u1F92"=>"\u03B7\u0313\u0300\u0345", "\u1F93"=>"\u03B7\u0314\u0300\u0345", "\u1F94"=>"\u03B7\u0313\u0301\u0345", "\u1F95"=>"\u03B7\u0314\u0301\u0345", "\u1F96"=>"\u03B7\u0313\u0342\u0345", "\u1F97"=>"\u03B7\u0314\u0342\u0345", "\u1F98"=>"\u0397\u0313\u0345", "\u1F99"=>"\u0397\u0314\u0345", + "\u1F9A"=>"\u0397\u0313\u0300\u0345", "\u1F9B"=>"\u0397\u0314\u0300\u0345", "\u1F9C"=>"\u0397\u0313\u0301\u0345", "\u1F9D"=>"\u0397\u0314\u0301\u0345", "\u1F9E"=>"\u0397\u0313\u0342\u0345", "\u1F9F"=>"\u0397\u0314\u0342\u0345", "\u1FA0"=>"\u03C9\u0313\u0345", "\u1FA1"=>"\u03C9\u0314\u0345", + "\u1FA2"=>"\u03C9\u0313\u0300\u0345", "\u1FA3"=>"\u03C9\u0314\u0300\u0345", "\u1FA4"=>"\u03C9\u0313\u0301\u0345", "\u1FA5"=>"\u03C9\u0314\u0301\u0345", "\u1FA6"=>"\u03C9\u0313\u0342\u0345", "\u1FA7"=>"\u03C9\u0314\u0342\u0345", "\u1FA8"=>"\u03A9\u0313\u0345", "\u1FA9"=>"\u03A9\u0314\u0345", + "\u1FAA"=>"\u03A9\u0313\u0300\u0345", "\u1FAB"=>"\u03A9\u0314\u0300\u0345", "\u1FAC"=>"\u03A9\u0313\u0301\u0345", "\u1FAD"=>"\u03A9\u0314\u0301\u0345", "\u1FAE"=>"\u03A9\u0313\u0342\u0345", "\u1FAF"=>"\u03A9\u0314\u0342\u0345", "\u1FB0"=>"\u03B1\u0306", "\u1FB1"=>"\u03B1\u0304", + "\u1FB2"=>"\u03B1\u0300\u0345", "\u1FB3"=>"\u03B1\u0345", "\u1FB4"=>"\u03B1\u0301\u0345", "\u1FB6"=>"\u03B1\u0342", "\u1FB7"=>"\u03B1\u0342\u0345", "\u1FB8"=>"\u0391\u0306", "\u1FB9"=>"\u0391\u0304", "\u1FBA"=>"\u0391\u0300", + "\u1FBB"=>"\u0391\u0301", "\u1FBC"=>"\u0391\u0345", "\u1FBE"=>"\u03B9", "\u1FC1"=>"\u00A8\u0342", "\u1FC2"=>"\u03B7\u0300\u0345", "\u1FC3"=>"\u03B7\u0345", "\u1FC4"=>"\u03B7\u0301\u0345", "\u1FC6"=>"\u03B7\u0342", + "\u1FC7"=>"\u03B7\u0342\u0345", "\u1FC8"=>"\u0395\u0300", "\u1FC9"=>"\u0395\u0301", "\u1FCA"=>"\u0397\u0300", "\u1FCB"=>"\u0397\u0301", "\u1FCC"=>"\u0397\u0345", "\u1FCD"=>"\u1FBF\u0300", "\u1FCE"=>"\u1FBF\u0301", + "\u1FCF"=>"\u1FBF\u0342", "\u1FD0"=>"\u03B9\u0306", "\u1FD1"=>"\u03B9\u0304", "\u1FD2"=>"\u03B9\u0308\u0300", "\u1FD3"=>"\u03B9\u0308\u0301", "\u1FD6"=>"\u03B9\u0342", "\u1FD7"=>"\u03B9\u0308\u0342", "\u1FD8"=>"\u0399\u0306", + "\u1FD9"=>"\u0399\u0304", "\u1FDA"=>"\u0399\u0300", "\u1FDB"=>"\u0399\u0301", "\u1FDD"=>"\u1FFE\u0300", "\u1FDE"=>"\u1FFE\u0301", "\u1FDF"=>"\u1FFE\u0342", "\u1FE0"=>"\u03C5\u0306", "\u1FE1"=>"\u03C5\u0304", + "\u1FE2"=>"\u03C5\u0308\u0300", "\u1FE3"=>"\u03C5\u0308\u0301", "\u1FE4"=>"\u03C1\u0313", "\u1FE5"=>"\u03C1\u0314", "\u1FE6"=>"\u03C5\u0342", "\u1FE7"=>"\u03C5\u0308\u0342", "\u1FE8"=>"\u03A5\u0306", "\u1FE9"=>"\u03A5\u0304", + "\u1FEA"=>"\u03A5\u0300", "\u1FEB"=>"\u03A5\u0301", "\u1FEC"=>"\u03A1\u0314", "\u1FED"=>"\u00A8\u0300", "\u1FEE"=>"\u00A8\u0301", "\u1FEF"=>"`", "\u1FF2"=>"\u03C9\u0300\u0345", "\u1FF3"=>"\u03C9\u0345", + "\u1FF4"=>"\u03C9\u0301\u0345", "\u1FF6"=>"\u03C9\u0342", "\u1FF7"=>"\u03C9\u0342\u0345", "\u1FF8"=>"\u039F\u0300", "\u1FF9"=>"\u039F\u0301", "\u1FFA"=>"\u03A9\u0300", "\u1FFB"=>"\u03A9\u0301", "\u1FFC"=>"\u03A9\u0345", + "\u1FFD"=>"\u00B4", "\u2000"=>"\u2002", "\u2001"=>"\u2003", "\u2126"=>"\u03A9", "\u212A"=>"K", "\u212B"=>"A\u030A", "\u219A"=>"\u2190\u0338", "\u219B"=>"\u2192\u0338", + "\u21AE"=>"\u2194\u0338", "\u21CD"=>"\u21D0\u0338", "\u21CE"=>"\u21D4\u0338", "\u21CF"=>"\u21D2\u0338", "\u2204"=>"\u2203\u0338", "\u2209"=>"\u2208\u0338", "\u220C"=>"\u220B\u0338", "\u2224"=>"\u2223\u0338", + "\u2226"=>"\u2225\u0338", "\u2241"=>"\u223C\u0338", "\u2244"=>"\u2243\u0338", "\u2247"=>"\u2245\u0338", "\u2249"=>"\u2248\u0338", "\u2260"=>"=\u0338", "\u2262"=>"\u2261\u0338", "\u226D"=>"\u224D\u0338", + "\u226E"=>"<\u0338", "\u226F"=>">\u0338", "\u2270"=>"\u2264\u0338", "\u2271"=>"\u2265\u0338", "\u2274"=>"\u2272\u0338", "\u2275"=>"\u2273\u0338", "\u2278"=>"\u2276\u0338", "\u2279"=>"\u2277\u0338", + "\u2280"=>"\u227A\u0338", "\u2281"=>"\u227B\u0338", "\u2284"=>"\u2282\u0338", "\u2285"=>"\u2283\u0338", "\u2288"=>"\u2286\u0338", "\u2289"=>"\u2287\u0338", "\u22AC"=>"\u22A2\u0338", "\u22AD"=>"\u22A8\u0338", + "\u22AE"=>"\u22A9\u0338", "\u22AF"=>"\u22AB\u0338", "\u22E0"=>"\u227C\u0338", "\u22E1"=>"\u227D\u0338", "\u22E2"=>"\u2291\u0338", "\u22E3"=>"\u2292\u0338", "\u22EA"=>"\u22B2\u0338", "\u22EB"=>"\u22B3\u0338", + "\u22EC"=>"\u22B4\u0338", "\u22ED"=>"\u22B5\u0338", "\u2329"=>"\u3008", "\u232A"=>"\u3009", "\u2ADC"=>"\u2ADD\u0338", "\u304C"=>"\u304B\u3099", "\u304E"=>"\u304D\u3099", "\u3050"=>"\u304F\u3099", + "\u3052"=>"\u3051\u3099", "\u3054"=>"\u3053\u3099", "\u3056"=>"\u3055\u3099", "\u3058"=>"\u3057\u3099", "\u305A"=>"\u3059\u3099", "\u305C"=>"\u305B\u3099", "\u305E"=>"\u305D\u3099", "\u3060"=>"\u305F\u3099", + "\u3062"=>"\u3061\u3099", "\u3065"=>"\u3064\u3099", "\u3067"=>"\u3066\u3099", "\u3069"=>"\u3068\u3099", "\u3070"=>"\u306F\u3099", "\u3071"=>"\u306F\u309A", "\u3073"=>"\u3072\u3099", "\u3074"=>"\u3072\u309A", + "\u3076"=>"\u3075\u3099", "\u3077"=>"\u3075\u309A", "\u3079"=>"\u3078\u3099", "\u307A"=>"\u3078\u309A", "\u307C"=>"\u307B\u3099", "\u307D"=>"\u307B\u309A", "\u3094"=>"\u3046\u3099", "\u309E"=>"\u309D\u3099", + "\u30AC"=>"\u30AB\u3099", "\u30AE"=>"\u30AD\u3099", "\u30B0"=>"\u30AF\u3099", "\u30B2"=>"\u30B1\u3099", "\u30B4"=>"\u30B3\u3099", "\u30B6"=>"\u30B5\u3099", "\u30B8"=>"\u30B7\u3099", "\u30BA"=>"\u30B9\u3099", + "\u30BC"=>"\u30BB\u3099", "\u30BE"=>"\u30BD\u3099", "\u30C0"=>"\u30BF\u3099", "\u30C2"=>"\u30C1\u3099", "\u30C5"=>"\u30C4\u3099", "\u30C7"=>"\u30C6\u3099", "\u30C9"=>"\u30C8\u3099", "\u30D0"=>"\u30CF\u3099", + "\u30D1"=>"\u30CF\u309A", "\u30D3"=>"\u30D2\u3099", "\u30D4"=>"\u30D2\u309A", "\u30D6"=>"\u30D5\u3099", "\u30D7"=>"\u30D5\u309A", "\u30D9"=>"\u30D8\u3099", "\u30DA"=>"\u30D8\u309A", "\u30DC"=>"\u30DB\u3099", + "\u30DD"=>"\u30DB\u309A", "\u30F4"=>"\u30A6\u3099", "\u30F7"=>"\u30EF\u3099", "\u30F8"=>"\u30F0\u3099", "\u30F9"=>"\u30F1\u3099", "\u30FA"=>"\u30F2\u3099", "\u30FE"=>"\u30FD\u3099", "\uF900"=>"\u8C48", + "\uF901"=>"\u66F4", "\uF902"=>"\u8ECA", "\uF903"=>"\u8CC8", "\uF904"=>"\u6ED1", "\uF905"=>"\u4E32", "\uF906"=>"\u53E5", "\uF907"=>"\u9F9C", "\uF908"=>"\u9F9C", + "\uF909"=>"\u5951", "\uF90A"=>"\u91D1", "\uF90B"=>"\u5587", "\uF90C"=>"\u5948", "\uF90D"=>"\u61F6", "\uF90E"=>"\u7669", "\uF90F"=>"\u7F85", "\uF910"=>"\u863F", + "\uF911"=>"\u87BA", "\uF912"=>"\u88F8", "\uF913"=>"\u908F", "\uF914"=>"\u6A02", "\uF915"=>"\u6D1B", "\uF916"=>"\u70D9", "\uF917"=>"\u73DE", "\uF918"=>"\u843D", + "\uF919"=>"\u916A", "\uF91A"=>"\u99F1", "\uF91B"=>"\u4E82", "\uF91C"=>"\u5375", "\uF91D"=>"\u6B04", "\uF91E"=>"\u721B", "\uF91F"=>"\u862D", "\uF920"=>"\u9E1E", + "\uF921"=>"\u5D50", "\uF922"=>"\u6FEB", "\uF923"=>"\u85CD", "\uF924"=>"\u8964", "\uF925"=>"\u62C9", "\uF926"=>"\u81D8", "\uF927"=>"\u881F", "\uF928"=>"\u5ECA", + "\uF929"=>"\u6717", "\uF92A"=>"\u6D6A", "\uF92B"=>"\u72FC", "\uF92C"=>"\u90CE", "\uF92D"=>"\u4F86", "\uF92E"=>"\u51B7", "\uF92F"=>"\u52DE", "\uF930"=>"\u64C4", + "\uF931"=>"\u6AD3", "\uF932"=>"\u7210", "\uF933"=>"\u76E7", "\uF934"=>"\u8001", "\uF935"=>"\u8606", "\uF936"=>"\u865C", "\uF937"=>"\u8DEF", "\uF938"=>"\u9732", + "\uF939"=>"\u9B6F", "\uF93A"=>"\u9DFA", "\uF93B"=>"\u788C", "\uF93C"=>"\u797F", "\uF93D"=>"\u7DA0", "\uF93E"=>"\u83C9", "\uF93F"=>"\u9304", "\uF940"=>"\u9E7F", + "\uF941"=>"\u8AD6", "\uF942"=>"\u58DF", "\uF943"=>"\u5F04", "\uF944"=>"\u7C60", "\uF945"=>"\u807E", "\uF946"=>"\u7262", "\uF947"=>"\u78CA", "\uF948"=>"\u8CC2", + "\uF949"=>"\u96F7", "\uF94A"=>"\u58D8", "\uF94B"=>"\u5C62", "\uF94C"=>"\u6A13", "\uF94D"=>"\u6DDA", "\uF94E"=>"\u6F0F", "\uF94F"=>"\u7D2F", "\uF950"=>"\u7E37", + "\uF951"=>"\u964B", "\uF952"=>"\u52D2", "\uF953"=>"\u808B", "\uF954"=>"\u51DC", "\uF955"=>"\u51CC", "\uF956"=>"\u7A1C", "\uF957"=>"\u7DBE", "\uF958"=>"\u83F1", + "\uF959"=>"\u9675", "\uF95A"=>"\u8B80", "\uF95B"=>"\u62CF", "\uF95C"=>"\u6A02", "\uF95D"=>"\u8AFE", "\uF95E"=>"\u4E39", "\uF95F"=>"\u5BE7", "\uF960"=>"\u6012", + "\uF961"=>"\u7387", "\uF962"=>"\u7570", "\uF963"=>"\u5317", "\uF964"=>"\u78FB", "\uF965"=>"\u4FBF", "\uF966"=>"\u5FA9", "\uF967"=>"\u4E0D", "\uF968"=>"\u6CCC", + "\uF969"=>"\u6578", "\uF96A"=>"\u7D22", "\uF96B"=>"\u53C3", "\uF96C"=>"\u585E", "\uF96D"=>"\u7701", "\uF96E"=>"\u8449", "\uF96F"=>"\u8AAA", "\uF970"=>"\u6BBA", + "\uF971"=>"\u8FB0", "\uF972"=>"\u6C88", "\uF973"=>"\u62FE", "\uF974"=>"\u82E5", "\uF975"=>"\u63A0", "\uF976"=>"\u7565", "\uF977"=>"\u4EAE", "\uF978"=>"\u5169", + "\uF979"=>"\u51C9", "\uF97A"=>"\u6881", "\uF97B"=>"\u7CE7", "\uF97C"=>"\u826F", "\uF97D"=>"\u8AD2", "\uF97E"=>"\u91CF", "\uF97F"=>"\u52F5", "\uF980"=>"\u5442", + "\uF981"=>"\u5973", "\uF982"=>"\u5EEC", "\uF983"=>"\u65C5", "\uF984"=>"\u6FFE", "\uF985"=>"\u792A", "\uF986"=>"\u95AD", "\uF987"=>"\u9A6A", "\uF988"=>"\u9E97", + "\uF989"=>"\u9ECE", "\uF98A"=>"\u529B", "\uF98B"=>"\u66C6", "\uF98C"=>"\u6B77", "\uF98D"=>"\u8F62", "\uF98E"=>"\u5E74", "\uF98F"=>"\u6190", "\uF990"=>"\u6200", + "\uF991"=>"\u649A", "\uF992"=>"\u6F23", "\uF993"=>"\u7149", "\uF994"=>"\u7489", "\uF995"=>"\u79CA", "\uF996"=>"\u7DF4", "\uF997"=>"\u806F", "\uF998"=>"\u8F26", + "\uF999"=>"\u84EE", "\uF99A"=>"\u9023", "\uF99B"=>"\u934A", "\uF99C"=>"\u5217", "\uF99D"=>"\u52A3", "\uF99E"=>"\u54BD", "\uF99F"=>"\u70C8", "\uF9A0"=>"\u88C2", + "\uF9A1"=>"\u8AAA", "\uF9A2"=>"\u5EC9", "\uF9A3"=>"\u5FF5", "\uF9A4"=>"\u637B", "\uF9A5"=>"\u6BAE", "\uF9A6"=>"\u7C3E", "\uF9A7"=>"\u7375", "\uF9A8"=>"\u4EE4", + "\uF9A9"=>"\u56F9", "\uF9AA"=>"\u5BE7", "\uF9AB"=>"\u5DBA", "\uF9AC"=>"\u601C", "\uF9AD"=>"\u73B2", "\uF9AE"=>"\u7469", "\uF9AF"=>"\u7F9A", "\uF9B0"=>"\u8046", + "\uF9B1"=>"\u9234", "\uF9B2"=>"\u96F6", "\uF9B3"=>"\u9748", "\uF9B4"=>"\u9818", "\uF9B5"=>"\u4F8B", "\uF9B6"=>"\u79AE", "\uF9B7"=>"\u91B4", "\uF9B8"=>"\u96B8", + "\uF9B9"=>"\u60E1", "\uF9BA"=>"\u4E86", "\uF9BB"=>"\u50DA", "\uF9BC"=>"\u5BEE", "\uF9BD"=>"\u5C3F", "\uF9BE"=>"\u6599", "\uF9BF"=>"\u6A02", "\uF9C0"=>"\u71CE", + "\uF9C1"=>"\u7642", "\uF9C2"=>"\u84FC", "\uF9C3"=>"\u907C", "\uF9C4"=>"\u9F8D", "\uF9C5"=>"\u6688", "\uF9C6"=>"\u962E", "\uF9C7"=>"\u5289", "\uF9C8"=>"\u677B", + "\uF9C9"=>"\u67F3", "\uF9CA"=>"\u6D41", "\uF9CB"=>"\u6E9C", "\uF9CC"=>"\u7409", "\uF9CD"=>"\u7559", "\uF9CE"=>"\u786B", "\uF9CF"=>"\u7D10", "\uF9D0"=>"\u985E", + "\uF9D1"=>"\u516D", "\uF9D2"=>"\u622E", "\uF9D3"=>"\u9678", "\uF9D4"=>"\u502B", "\uF9D5"=>"\u5D19", "\uF9D6"=>"\u6DEA", "\uF9D7"=>"\u8F2A", "\uF9D8"=>"\u5F8B", + "\uF9D9"=>"\u6144", "\uF9DA"=>"\u6817", "\uF9DB"=>"\u7387", "\uF9DC"=>"\u9686", "\uF9DD"=>"\u5229", "\uF9DE"=>"\u540F", "\uF9DF"=>"\u5C65", "\uF9E0"=>"\u6613", + "\uF9E1"=>"\u674E", "\uF9E2"=>"\u68A8", "\uF9E3"=>"\u6CE5", "\uF9E4"=>"\u7406", "\uF9E5"=>"\u75E2", "\uF9E6"=>"\u7F79", "\uF9E7"=>"\u88CF", "\uF9E8"=>"\u88E1", + "\uF9E9"=>"\u91CC", "\uF9EA"=>"\u96E2", "\uF9EB"=>"\u533F", "\uF9EC"=>"\u6EBA", "\uF9ED"=>"\u541D", "\uF9EE"=>"\u71D0", "\uF9EF"=>"\u7498", "\uF9F0"=>"\u85FA", + "\uF9F1"=>"\u96A3", "\uF9F2"=>"\u9C57", "\uF9F3"=>"\u9E9F", "\uF9F4"=>"\u6797", "\uF9F5"=>"\u6DCB", "\uF9F6"=>"\u81E8", "\uF9F7"=>"\u7ACB", "\uF9F8"=>"\u7B20", + "\uF9F9"=>"\u7C92", "\uF9FA"=>"\u72C0", "\uF9FB"=>"\u7099", "\uF9FC"=>"\u8B58", "\uF9FD"=>"\u4EC0", "\uF9FE"=>"\u8336", "\uF9FF"=>"\u523A", "\uFA00"=>"\u5207", + "\uFA01"=>"\u5EA6", "\uFA02"=>"\u62D3", "\uFA03"=>"\u7CD6", "\uFA04"=>"\u5B85", "\uFA05"=>"\u6D1E", "\uFA06"=>"\u66B4", "\uFA07"=>"\u8F3B", "\uFA08"=>"\u884C", + "\uFA09"=>"\u964D", "\uFA0A"=>"\u898B", "\uFA0B"=>"\u5ED3", "\uFA0C"=>"\u5140", "\uFA0D"=>"\u55C0", "\uFA10"=>"\u585A", "\uFA12"=>"\u6674", "\uFA15"=>"\u51DE", + "\uFA16"=>"\u732A", "\uFA17"=>"\u76CA", "\uFA18"=>"\u793C", "\uFA19"=>"\u795E", "\uFA1A"=>"\u7965", "\uFA1B"=>"\u798F", "\uFA1C"=>"\u9756", "\uFA1D"=>"\u7CBE", + "\uFA1E"=>"\u7FBD", "\uFA20"=>"\u8612", "\uFA22"=>"\u8AF8", "\uFA25"=>"\u9038", "\uFA26"=>"\u90FD", "\uFA2A"=>"\u98EF", "\uFA2B"=>"\u98FC", "\uFA2C"=>"\u9928", + "\uFA2D"=>"\u9DB4", "\uFA2E"=>"\u90DE", "\uFA2F"=>"\u96B7", "\uFA30"=>"\u4FAE", "\uFA31"=>"\u50E7", "\uFA32"=>"\u514D", "\uFA33"=>"\u52C9", "\uFA34"=>"\u52E4", + "\uFA35"=>"\u5351", "\uFA36"=>"\u559D", "\uFA37"=>"\u5606", "\uFA38"=>"\u5668", "\uFA39"=>"\u5840", "\uFA3A"=>"\u58A8", "\uFA3B"=>"\u5C64", "\uFA3C"=>"\u5C6E", + "\uFA3D"=>"\u6094", "\uFA3E"=>"\u6168", "\uFA3F"=>"\u618E", "\uFA40"=>"\u61F2", "\uFA41"=>"\u654F", "\uFA42"=>"\u65E2", "\uFA43"=>"\u6691", "\uFA44"=>"\u6885", + "\uFA45"=>"\u6D77", "\uFA46"=>"\u6E1A", "\uFA47"=>"\u6F22", "\uFA48"=>"\u716E", "\uFA49"=>"\u722B", "\uFA4A"=>"\u7422", "\uFA4B"=>"\u7891", "\uFA4C"=>"\u793E", + "\uFA4D"=>"\u7949", "\uFA4E"=>"\u7948", "\uFA4F"=>"\u7950", "\uFA50"=>"\u7956", "\uFA51"=>"\u795D", "\uFA52"=>"\u798D", "\uFA53"=>"\u798E", "\uFA54"=>"\u7A40", + "\uFA55"=>"\u7A81", "\uFA56"=>"\u7BC0", "\uFA57"=>"\u7DF4", "\uFA58"=>"\u7E09", "\uFA59"=>"\u7E41", "\uFA5A"=>"\u7F72", "\uFA5B"=>"\u8005", "\uFA5C"=>"\u81ED", + "\uFA5D"=>"\u8279", "\uFA5E"=>"\u8279", "\uFA5F"=>"\u8457", "\uFA60"=>"\u8910", "\uFA61"=>"\u8996", "\uFA62"=>"\u8B01", "\uFA63"=>"\u8B39", "\uFA64"=>"\u8CD3", + "\uFA65"=>"\u8D08", "\uFA66"=>"\u8FB6", "\uFA67"=>"\u9038", "\uFA68"=>"\u96E3", "\uFA69"=>"\u97FF", "\uFA6A"=>"\u983B", "\uFA6B"=>"\u6075", "\uFA6C"=>"\u{242EE}", + "\uFA6D"=>"\u8218", "\uFA70"=>"\u4E26", "\uFA71"=>"\u51B5", "\uFA72"=>"\u5168", "\uFA73"=>"\u4F80", "\uFA74"=>"\u5145", "\uFA75"=>"\u5180", "\uFA76"=>"\u52C7", + "\uFA77"=>"\u52FA", "\uFA78"=>"\u559D", "\uFA79"=>"\u5555", "\uFA7A"=>"\u5599", "\uFA7B"=>"\u55E2", "\uFA7C"=>"\u585A", "\uFA7D"=>"\u58B3", "\uFA7E"=>"\u5944", + "\uFA7F"=>"\u5954", "\uFA80"=>"\u5A62", "\uFA81"=>"\u5B28", "\uFA82"=>"\u5ED2", "\uFA83"=>"\u5ED9", "\uFA84"=>"\u5F69", "\uFA85"=>"\u5FAD", "\uFA86"=>"\u60D8", + "\uFA87"=>"\u614E", "\uFA88"=>"\u6108", "\uFA89"=>"\u618E", "\uFA8A"=>"\u6160", "\uFA8B"=>"\u61F2", "\uFA8C"=>"\u6234", "\uFA8D"=>"\u63C4", "\uFA8E"=>"\u641C", + "\uFA8F"=>"\u6452", "\uFA90"=>"\u6556", "\uFA91"=>"\u6674", "\uFA92"=>"\u6717", "\uFA93"=>"\u671B", "\uFA94"=>"\u6756", "\uFA95"=>"\u6B79", "\uFA96"=>"\u6BBA", + "\uFA97"=>"\u6D41", "\uFA98"=>"\u6EDB", "\uFA99"=>"\u6ECB", "\uFA9A"=>"\u6F22", "\uFA9B"=>"\u701E", "\uFA9C"=>"\u716E", "\uFA9D"=>"\u77A7", "\uFA9E"=>"\u7235", + "\uFA9F"=>"\u72AF", "\uFAA0"=>"\u732A", "\uFAA1"=>"\u7471", "\uFAA2"=>"\u7506", "\uFAA3"=>"\u753B", "\uFAA4"=>"\u761D", "\uFAA5"=>"\u761F", "\uFAA6"=>"\u76CA", + "\uFAA7"=>"\u76DB", "\uFAA8"=>"\u76F4", "\uFAA9"=>"\u774A", "\uFAAA"=>"\u7740", "\uFAAB"=>"\u78CC", "\uFAAC"=>"\u7AB1", "\uFAAD"=>"\u7BC0", "\uFAAE"=>"\u7C7B", + "\uFAAF"=>"\u7D5B", "\uFAB0"=>"\u7DF4", "\uFAB1"=>"\u7F3E", "\uFAB2"=>"\u8005", "\uFAB3"=>"\u8352", "\uFAB4"=>"\u83EF", "\uFAB5"=>"\u8779", "\uFAB6"=>"\u8941", + "\uFAB7"=>"\u8986", "\uFAB8"=>"\u8996", "\uFAB9"=>"\u8ABF", "\uFABA"=>"\u8AF8", "\uFABB"=>"\u8ACB", "\uFABC"=>"\u8B01", "\uFABD"=>"\u8AFE", "\uFABE"=>"\u8AED", + "\uFABF"=>"\u8B39", "\uFAC0"=>"\u8B8A", "\uFAC1"=>"\u8D08", "\uFAC2"=>"\u8F38", "\uFAC3"=>"\u9072", "\uFAC4"=>"\u9199", "\uFAC5"=>"\u9276", "\uFAC6"=>"\u967C", + "\uFAC7"=>"\u96E3", "\uFAC8"=>"\u9756", "\uFAC9"=>"\u97DB", "\uFACA"=>"\u97FF", "\uFACB"=>"\u980B", "\uFACC"=>"\u983B", "\uFACD"=>"\u9B12", "\uFACE"=>"\u9F9C", + "\uFACF"=>"\u{2284A}", "\uFAD0"=>"\u{22844}", "\uFAD1"=>"\u{233D5}", "\uFAD2"=>"\u3B9D", "\uFAD3"=>"\u4018", "\uFAD4"=>"\u4039", "\uFAD5"=>"\u{25249}", "\uFAD6"=>"\u{25CD0}", + "\uFAD7"=>"\u{27ED3}", "\uFAD8"=>"\u9F43", "\uFAD9"=>"\u9F8E", "\uFB1D"=>"\u05D9\u05B4", "\uFB1F"=>"\u05F2\u05B7", "\uFB2A"=>"\u05E9\u05C1", "\uFB2B"=>"\u05E9\u05C2", "\uFB2C"=>"\u05E9\u05BC\u05C1", + "\uFB2D"=>"\u05E9\u05BC\u05C2", "\uFB2E"=>"\u05D0\u05B7", "\uFB2F"=>"\u05D0\u05B8", "\uFB30"=>"\u05D0\u05BC", "\uFB31"=>"\u05D1\u05BC", "\uFB32"=>"\u05D2\u05BC", "\uFB33"=>"\u05D3\u05BC", "\uFB34"=>"\u05D4\u05BC", + "\uFB35"=>"\u05D5\u05BC", "\uFB36"=>"\u05D6\u05BC", "\uFB38"=>"\u05D8\u05BC", "\uFB39"=>"\u05D9\u05BC", "\uFB3A"=>"\u05DA\u05BC", "\uFB3B"=>"\u05DB\u05BC", "\uFB3C"=>"\u05DC\u05BC", "\uFB3E"=>"\u05DE\u05BC", + "\uFB40"=>"\u05E0\u05BC", "\uFB41"=>"\u05E1\u05BC", "\uFB43"=>"\u05E3\u05BC", "\uFB44"=>"\u05E4\u05BC", "\uFB46"=>"\u05E6\u05BC", "\uFB47"=>"\u05E7\u05BC", "\uFB48"=>"\u05E8\u05BC", "\uFB49"=>"\u05E9\u05BC", + "\uFB4A"=>"\u05EA\u05BC", "\uFB4B"=>"\u05D5\u05B9", "\uFB4C"=>"\u05D1\u05BF", "\uFB4D"=>"\u05DB\u05BF", "\uFB4E"=>"\u05E4\u05BF", "\u{1109A}"=>"\u{11099}\u{110BA}", "\u{1109C}"=>"\u{1109B}\u{110BA}", "\u{110AB}"=>"\u{110A5}\u{110BA}", + "\u{1112E}"=>"\u{11131}\u{11127}", "\u{1112F}"=>"\u{11132}\u{11127}", "\u{1134B}"=>"\u{11347}\u{1133E}", "\u{1134C}"=>"\u{11347}\u{11357}", "\u{114BB}"=>"\u{114B9}\u{114BA}", "\u{114BC}"=>"\u{114B9}\u{114B0}", "\u{114BE}"=>"\u{114B9}\u{114BD}", "\u{115BA}"=>"\u{115B8}\u{115AF}", + "\u{115BB}"=>"\u{115B9}\u{115AF}", "\u{1D15E}"=>"\u{1D157}\u{1D165}", "\u{1D15F}"=>"\u{1D158}\u{1D165}", "\u{1D160}"=>"\u{1D158}\u{1D165}\u{1D16E}", "\u{1D161}"=>"\u{1D158}\u{1D165}\u{1D16F}", "\u{1D162}"=>"\u{1D158}\u{1D165}\u{1D170}", "\u{1D163}"=>"\u{1D158}\u{1D165}\u{1D171}", "\u{1D164}"=>"\u{1D158}\u{1D165}\u{1D172}", + "\u{1D1BB}"=>"\u{1D1B9}\u{1D165}", "\u{1D1BC}"=>"\u{1D1BA}\u{1D165}", "\u{1D1BD}"=>"\u{1D1B9}\u{1D165}\u{1D16E}", "\u{1D1BE}"=>"\u{1D1BA}\u{1D165}\u{1D16E}", "\u{1D1BF}"=>"\u{1D1B9}\u{1D165}\u{1D16F}", "\u{1D1C0}"=>"\u{1D1BA}\u{1D165}\u{1D16F}", "\u{2F800}"=>"\u4E3D", "\u{2F801}"=>"\u4E38", + "\u{2F802}"=>"\u4E41", "\u{2F803}"=>"\u{20122}", "\u{2F804}"=>"\u4F60", "\u{2F805}"=>"\u4FAE", "\u{2F806}"=>"\u4FBB", "\u{2F807}"=>"\u5002", "\u{2F808}"=>"\u507A", "\u{2F809}"=>"\u5099", + "\u{2F80A}"=>"\u50E7", "\u{2F80B}"=>"\u50CF", "\u{2F80C}"=>"\u349E", "\u{2F80D}"=>"\u{2063A}", "\u{2F80E}"=>"\u514D", "\u{2F80F}"=>"\u5154", "\u{2F810}"=>"\u5164", "\u{2F811}"=>"\u5177", + "\u{2F812}"=>"\u{2051C}", "\u{2F813}"=>"\u34B9", "\u{2F814}"=>"\u5167", "\u{2F815}"=>"\u518D", "\u{2F816}"=>"\u{2054B}", "\u{2F817}"=>"\u5197", "\u{2F818}"=>"\u51A4", "\u{2F819}"=>"\u4ECC", + "\u{2F81A}"=>"\u51AC", "\u{2F81B}"=>"\u51B5", "\u{2F81C}"=>"\u{291DF}", "\u{2F81D}"=>"\u51F5", "\u{2F81E}"=>"\u5203", "\u{2F81F}"=>"\u34DF", "\u{2F820}"=>"\u523B", "\u{2F821}"=>"\u5246", + "\u{2F822}"=>"\u5272", "\u{2F823}"=>"\u5277", "\u{2F824}"=>"\u3515", "\u{2F825}"=>"\u52C7", "\u{2F826}"=>"\u52C9", "\u{2F827}"=>"\u52E4", "\u{2F828}"=>"\u52FA", "\u{2F829}"=>"\u5305", + "\u{2F82A}"=>"\u5306", "\u{2F82B}"=>"\u5317", "\u{2F82C}"=>"\u5349", "\u{2F82D}"=>"\u5351", "\u{2F82E}"=>"\u535A", "\u{2F82F}"=>"\u5373", "\u{2F830}"=>"\u537D", "\u{2F831}"=>"\u537F", + "\u{2F832}"=>"\u537F", "\u{2F833}"=>"\u537F", "\u{2F834}"=>"\u{20A2C}", "\u{2F835}"=>"\u7070", "\u{2F836}"=>"\u53CA", "\u{2F837}"=>"\u53DF", "\u{2F838}"=>"\u{20B63}", "\u{2F839}"=>"\u53EB", + "\u{2F83A}"=>"\u53F1", "\u{2F83B}"=>"\u5406", "\u{2F83C}"=>"\u549E", "\u{2F83D}"=>"\u5438", "\u{2F83E}"=>"\u5448", "\u{2F83F}"=>"\u5468", "\u{2F840}"=>"\u54A2", "\u{2F841}"=>"\u54F6", + "\u{2F842}"=>"\u5510", "\u{2F843}"=>"\u5553", "\u{2F844}"=>"\u5563", "\u{2F845}"=>"\u5584", "\u{2F846}"=>"\u5584", "\u{2F847}"=>"\u5599", "\u{2F848}"=>"\u55AB", "\u{2F849}"=>"\u55B3", + "\u{2F84A}"=>"\u55C2", "\u{2F84B}"=>"\u5716", "\u{2F84C}"=>"\u5606", "\u{2F84D}"=>"\u5717", "\u{2F84E}"=>"\u5651", "\u{2F84F}"=>"\u5674", "\u{2F850}"=>"\u5207", "\u{2F851}"=>"\u58EE", + "\u{2F852}"=>"\u57CE", "\u{2F853}"=>"\u57F4", "\u{2F854}"=>"\u580D", "\u{2F855}"=>"\u578B", "\u{2F856}"=>"\u5832", "\u{2F857}"=>"\u5831", "\u{2F858}"=>"\u58AC", "\u{2F859}"=>"\u{214E4}", + "\u{2F85A}"=>"\u58F2", "\u{2F85B}"=>"\u58F7", "\u{2F85C}"=>"\u5906", "\u{2F85D}"=>"\u591A", "\u{2F85E}"=>"\u5922", "\u{2F85F}"=>"\u5962", "\u{2F860}"=>"\u{216A8}", "\u{2F861}"=>"\u{216EA}", + "\u{2F862}"=>"\u59EC", "\u{2F863}"=>"\u5A1B", "\u{2F864}"=>"\u5A27", "\u{2F865}"=>"\u59D8", "\u{2F866}"=>"\u5A66", "\u{2F867}"=>"\u36EE", "\u{2F868}"=>"\u36FC", "\u{2F869}"=>"\u5B08", + "\u{2F86A}"=>"\u5B3E", "\u{2F86B}"=>"\u5B3E", "\u{2F86C}"=>"\u{219C8}", "\u{2F86D}"=>"\u5BC3", "\u{2F86E}"=>"\u5BD8", "\u{2F86F}"=>"\u5BE7", "\u{2F870}"=>"\u5BF3", "\u{2F871}"=>"\u{21B18}", + "\u{2F872}"=>"\u5BFF", "\u{2F873}"=>"\u5C06", "\u{2F874}"=>"\u5F53", "\u{2F875}"=>"\u5C22", "\u{2F876}"=>"\u3781", "\u{2F877}"=>"\u5C60", "\u{2F878}"=>"\u5C6E", "\u{2F879}"=>"\u5CC0", + "\u{2F87A}"=>"\u5C8D", "\u{2F87B}"=>"\u{21DE4}", "\u{2F87C}"=>"\u5D43", "\u{2F87D}"=>"\u{21DE6}", "\u{2F87E}"=>"\u5D6E", "\u{2F87F}"=>"\u5D6B", "\u{2F880}"=>"\u5D7C", "\u{2F881}"=>"\u5DE1", + "\u{2F882}"=>"\u5DE2", "\u{2F883}"=>"\u382F", "\u{2F884}"=>"\u5DFD", "\u{2F885}"=>"\u5E28", "\u{2F886}"=>"\u5E3D", "\u{2F887}"=>"\u5E69", "\u{2F888}"=>"\u3862", "\u{2F889}"=>"\u{22183}", + "\u{2F88A}"=>"\u387C", "\u{2F88B}"=>"\u5EB0", "\u{2F88C}"=>"\u5EB3", "\u{2F88D}"=>"\u5EB6", "\u{2F88E}"=>"\u5ECA", "\u{2F88F}"=>"\u{2A392}", "\u{2F890}"=>"\u5EFE", "\u{2F891}"=>"\u{22331}", + "\u{2F892}"=>"\u{22331}", "\u{2F893}"=>"\u8201", "\u{2F894}"=>"\u5F22", "\u{2F895}"=>"\u5F22", "\u{2F896}"=>"\u38C7", "\u{2F897}"=>"\u{232B8}", "\u{2F898}"=>"\u{261DA}", "\u{2F899}"=>"\u5F62", + "\u{2F89A}"=>"\u5F6B", "\u{2F89B}"=>"\u38E3", "\u{2F89C}"=>"\u5F9A", "\u{2F89D}"=>"\u5FCD", "\u{2F89E}"=>"\u5FD7", "\u{2F89F}"=>"\u5FF9", "\u{2F8A0}"=>"\u6081", "\u{2F8A1}"=>"\u393A", + "\u{2F8A2}"=>"\u391C", "\u{2F8A3}"=>"\u6094", "\u{2F8A4}"=>"\u{226D4}", "\u{2F8A5}"=>"\u60C7", "\u{2F8A6}"=>"\u6148", "\u{2F8A7}"=>"\u614C", "\u{2F8A8}"=>"\u614E", "\u{2F8A9}"=>"\u614C", + "\u{2F8AA}"=>"\u617A", "\u{2F8AB}"=>"\u618E", "\u{2F8AC}"=>"\u61B2", "\u{2F8AD}"=>"\u61A4", "\u{2F8AE}"=>"\u61AF", "\u{2F8AF}"=>"\u61DE", "\u{2F8B0}"=>"\u61F2", "\u{2F8B1}"=>"\u61F6", + "\u{2F8B2}"=>"\u6210", "\u{2F8B3}"=>"\u621B", "\u{2F8B4}"=>"\u625D", "\u{2F8B5}"=>"\u62B1", "\u{2F8B6}"=>"\u62D4", "\u{2F8B7}"=>"\u6350", "\u{2F8B8}"=>"\u{22B0C}", "\u{2F8B9}"=>"\u633D", + "\u{2F8BA}"=>"\u62FC", "\u{2F8BB}"=>"\u6368", "\u{2F8BC}"=>"\u6383", "\u{2F8BD}"=>"\u63E4", "\u{2F8BE}"=>"\u{22BF1}", "\u{2F8BF}"=>"\u6422", "\u{2F8C0}"=>"\u63C5", "\u{2F8C1}"=>"\u63A9", + "\u{2F8C2}"=>"\u3A2E", "\u{2F8C3}"=>"\u6469", "\u{2F8C4}"=>"\u647E", "\u{2F8C5}"=>"\u649D", "\u{2F8C6}"=>"\u6477", "\u{2F8C7}"=>"\u3A6C", "\u{2F8C8}"=>"\u654F", "\u{2F8C9}"=>"\u656C", + "\u{2F8CA}"=>"\u{2300A}", "\u{2F8CB}"=>"\u65E3", "\u{2F8CC}"=>"\u66F8", "\u{2F8CD}"=>"\u6649", "\u{2F8CE}"=>"\u3B19", "\u{2F8CF}"=>"\u6691", "\u{2F8D0}"=>"\u3B08", "\u{2F8D1}"=>"\u3AE4", + "\u{2F8D2}"=>"\u5192", "\u{2F8D3}"=>"\u5195", "\u{2F8D4}"=>"\u6700", "\u{2F8D5}"=>"\u669C", "\u{2F8D6}"=>"\u80AD", "\u{2F8D7}"=>"\u43D9", "\u{2F8D8}"=>"\u6717", "\u{2F8D9}"=>"\u671B", + "\u{2F8DA}"=>"\u6721", "\u{2F8DB}"=>"\u675E", "\u{2F8DC}"=>"\u6753", "\u{2F8DD}"=>"\u{233C3}", "\u{2F8DE}"=>"\u3B49", "\u{2F8DF}"=>"\u67FA", "\u{2F8E0}"=>"\u6785", "\u{2F8E1}"=>"\u6852", + "\u{2F8E2}"=>"\u6885", "\u{2F8E3}"=>"\u{2346D}", "\u{2F8E4}"=>"\u688E", "\u{2F8E5}"=>"\u681F", "\u{2F8E6}"=>"\u6914", "\u{2F8E7}"=>"\u3B9D", "\u{2F8E8}"=>"\u6942", "\u{2F8E9}"=>"\u69A3", + "\u{2F8EA}"=>"\u69EA", "\u{2F8EB}"=>"\u6AA8", "\u{2F8EC}"=>"\u{236A3}", "\u{2F8ED}"=>"\u6ADB", "\u{2F8EE}"=>"\u3C18", "\u{2F8EF}"=>"\u6B21", "\u{2F8F0}"=>"\u{238A7}", "\u{2F8F1}"=>"\u6B54", + "\u{2F8F2}"=>"\u3C4E", "\u{2F8F3}"=>"\u6B72", "\u{2F8F4}"=>"\u6B9F", "\u{2F8F5}"=>"\u6BBA", "\u{2F8F6}"=>"\u6BBB", "\u{2F8F7}"=>"\u{23A8D}", "\u{2F8F8}"=>"\u{21D0B}", "\u{2F8F9}"=>"\u{23AFA}", + "\u{2F8FA}"=>"\u6C4E", "\u{2F8FB}"=>"\u{23CBC}", "\u{2F8FC}"=>"\u6CBF", "\u{2F8FD}"=>"\u6CCD", "\u{2F8FE}"=>"\u6C67", "\u{2F8FF}"=>"\u6D16", "\u{2F900}"=>"\u6D3E", "\u{2F901}"=>"\u6D77", + "\u{2F902}"=>"\u6D41", "\u{2F903}"=>"\u6D69", "\u{2F904}"=>"\u6D78", "\u{2F905}"=>"\u6D85", "\u{2F906}"=>"\u{23D1E}", "\u{2F907}"=>"\u6D34", "\u{2F908}"=>"\u6E2F", "\u{2F909}"=>"\u6E6E", + "\u{2F90A}"=>"\u3D33", "\u{2F90B}"=>"\u6ECB", "\u{2F90C}"=>"\u6EC7", "\u{2F90D}"=>"\u{23ED1}", "\u{2F90E}"=>"\u6DF9", "\u{2F90F}"=>"\u6F6E", "\u{2F910}"=>"\u{23F5E}", "\u{2F911}"=>"\u{23F8E}", + "\u{2F912}"=>"\u6FC6", "\u{2F913}"=>"\u7039", "\u{2F914}"=>"\u701E", "\u{2F915}"=>"\u701B", "\u{2F916}"=>"\u3D96", "\u{2F917}"=>"\u704A", "\u{2F918}"=>"\u707D", "\u{2F919}"=>"\u7077", + "\u{2F91A}"=>"\u70AD", "\u{2F91B}"=>"\u{20525}", "\u{2F91C}"=>"\u7145", "\u{2F91D}"=>"\u{24263}", "\u{2F91E}"=>"\u719C", "\u{2F91F}"=>"\u{243AB}", "\u{2F920}"=>"\u7228", "\u{2F921}"=>"\u7235", + "\u{2F922}"=>"\u7250", "\u{2F923}"=>"\u{24608}", "\u{2F924}"=>"\u7280", "\u{2F925}"=>"\u7295", "\u{2F926}"=>"\u{24735}", "\u{2F927}"=>"\u{24814}", "\u{2F928}"=>"\u737A", "\u{2F929}"=>"\u738B", + "\u{2F92A}"=>"\u3EAC", "\u{2F92B}"=>"\u73A5", "\u{2F92C}"=>"\u3EB8", "\u{2F92D}"=>"\u3EB8", "\u{2F92E}"=>"\u7447", "\u{2F92F}"=>"\u745C", "\u{2F930}"=>"\u7471", "\u{2F931}"=>"\u7485", + "\u{2F932}"=>"\u74CA", "\u{2F933}"=>"\u3F1B", "\u{2F934}"=>"\u7524", "\u{2F935}"=>"\u{24C36}", "\u{2F936}"=>"\u753E", "\u{2F937}"=>"\u{24C92}", "\u{2F938}"=>"\u7570", "\u{2F939}"=>"\u{2219F}", + "\u{2F93A}"=>"\u7610", "\u{2F93B}"=>"\u{24FA1}", "\u{2F93C}"=>"\u{24FB8}", "\u{2F93D}"=>"\u{25044}", "\u{2F93E}"=>"\u3FFC", "\u{2F93F}"=>"\u4008", "\u{2F940}"=>"\u76F4", "\u{2F941}"=>"\u{250F3}", + "\u{2F942}"=>"\u{250F2}", "\u{2F943}"=>"\u{25119}", "\u{2F944}"=>"\u{25133}", "\u{2F945}"=>"\u771E", "\u{2F946}"=>"\u771F", "\u{2F947}"=>"\u771F", "\u{2F948}"=>"\u774A", "\u{2F949}"=>"\u4039", + "\u{2F94A}"=>"\u778B", "\u{2F94B}"=>"\u4046", "\u{2F94C}"=>"\u4096", "\u{2F94D}"=>"\u{2541D}", "\u{2F94E}"=>"\u784E", "\u{2F94F}"=>"\u788C", "\u{2F950}"=>"\u78CC", "\u{2F951}"=>"\u40E3", + "\u{2F952}"=>"\u{25626}", "\u{2F953}"=>"\u7956", "\u{2F954}"=>"\u{2569A}", "\u{2F955}"=>"\u{256C5}", "\u{2F956}"=>"\u798F", "\u{2F957}"=>"\u79EB", "\u{2F958}"=>"\u412F", "\u{2F959}"=>"\u7A40", + "\u{2F95A}"=>"\u7A4A", "\u{2F95B}"=>"\u7A4F", "\u{2F95C}"=>"\u{2597C}", "\u{2F95D}"=>"\u{25AA7}", "\u{2F95E}"=>"\u{25AA7}", "\u{2F95F}"=>"\u7AEE", "\u{2F960}"=>"\u4202", "\u{2F961}"=>"\u{25BAB}", + "\u{2F962}"=>"\u7BC6", "\u{2F963}"=>"\u7BC9", "\u{2F964}"=>"\u4227", "\u{2F965}"=>"\u{25C80}", "\u{2F966}"=>"\u7CD2", "\u{2F967}"=>"\u42A0", "\u{2F968}"=>"\u7CE8", "\u{2F969}"=>"\u7CE3", + "\u{2F96A}"=>"\u7D00", "\u{2F96B}"=>"\u{25F86}", "\u{2F96C}"=>"\u7D63", "\u{2F96D}"=>"\u4301", "\u{2F96E}"=>"\u7DC7", "\u{2F96F}"=>"\u7E02", "\u{2F970}"=>"\u7E45", "\u{2F971}"=>"\u4334", + "\u{2F972}"=>"\u{26228}", "\u{2F973}"=>"\u{26247}", "\u{2F974}"=>"\u4359", "\u{2F975}"=>"\u{262D9}", "\u{2F976}"=>"\u7F7A", "\u{2F977}"=>"\u{2633E}", "\u{2F978}"=>"\u7F95", "\u{2F979}"=>"\u7FFA", + "\u{2F97A}"=>"\u8005", "\u{2F97B}"=>"\u{264DA}", "\u{2F97C}"=>"\u{26523}", "\u{2F97D}"=>"\u8060", "\u{2F97E}"=>"\u{265A8}", "\u{2F97F}"=>"\u8070", "\u{2F980}"=>"\u{2335F}", "\u{2F981}"=>"\u43D5", + "\u{2F982}"=>"\u80B2", "\u{2F983}"=>"\u8103", "\u{2F984}"=>"\u440B", "\u{2F985}"=>"\u813E", "\u{2F986}"=>"\u5AB5", "\u{2F987}"=>"\u{267A7}", "\u{2F988}"=>"\u{267B5}", "\u{2F989}"=>"\u{23393}", + "\u{2F98A}"=>"\u{2339C}", "\u{2F98B}"=>"\u8201", "\u{2F98C}"=>"\u8204", "\u{2F98D}"=>"\u8F9E", "\u{2F98E}"=>"\u446B", "\u{2F98F}"=>"\u8291", "\u{2F990}"=>"\u828B", "\u{2F991}"=>"\u829D", + "\u{2F992}"=>"\u52B3", "\u{2F993}"=>"\u82B1", "\u{2F994}"=>"\u82B3", "\u{2F995}"=>"\u82BD", "\u{2F996}"=>"\u82E6", "\u{2F997}"=>"\u{26B3C}", "\u{2F998}"=>"\u82E5", "\u{2F999}"=>"\u831D", + "\u{2F99A}"=>"\u8363", "\u{2F99B}"=>"\u83AD", "\u{2F99C}"=>"\u8323", "\u{2F99D}"=>"\u83BD", "\u{2F99E}"=>"\u83E7", "\u{2F99F}"=>"\u8457", "\u{2F9A0}"=>"\u8353", "\u{2F9A1}"=>"\u83CA", + "\u{2F9A2}"=>"\u83CC", "\u{2F9A3}"=>"\u83DC", "\u{2F9A4}"=>"\u{26C36}", "\u{2F9A5}"=>"\u{26D6B}", "\u{2F9A6}"=>"\u{26CD5}", "\u{2F9A7}"=>"\u452B", "\u{2F9A8}"=>"\u84F1", "\u{2F9A9}"=>"\u84F3", + "\u{2F9AA}"=>"\u8516", "\u{2F9AB}"=>"\u{273CA}", "\u{2F9AC}"=>"\u8564", "\u{2F9AD}"=>"\u{26F2C}", "\u{2F9AE}"=>"\u455D", "\u{2F9AF}"=>"\u4561", "\u{2F9B0}"=>"\u{26FB1}", "\u{2F9B1}"=>"\u{270D2}", + "\u{2F9B2}"=>"\u456B", "\u{2F9B3}"=>"\u8650", "\u{2F9B4}"=>"\u865C", "\u{2F9B5}"=>"\u8667", "\u{2F9B6}"=>"\u8669", "\u{2F9B7}"=>"\u86A9", "\u{2F9B8}"=>"\u8688", "\u{2F9B9}"=>"\u870E", + "\u{2F9BA}"=>"\u86E2", "\u{2F9BB}"=>"\u8779", "\u{2F9BC}"=>"\u8728", "\u{2F9BD}"=>"\u876B", "\u{2F9BE}"=>"\u8786", "\u{2F9BF}"=>"\u45D7", "\u{2F9C0}"=>"\u87E1", "\u{2F9C1}"=>"\u8801", + "\u{2F9C2}"=>"\u45F9", "\u{2F9C3}"=>"\u8860", "\u{2F9C4}"=>"\u8863", "\u{2F9C5}"=>"\u{27667}", "\u{2F9C6}"=>"\u88D7", "\u{2F9C7}"=>"\u88DE", "\u{2F9C8}"=>"\u4635", "\u{2F9C9}"=>"\u88FA", + "\u{2F9CA}"=>"\u34BB", "\u{2F9CB}"=>"\u{278AE}", "\u{2F9CC}"=>"\u{27966}", "\u{2F9CD}"=>"\u46BE", "\u{2F9CE}"=>"\u46C7", "\u{2F9CF}"=>"\u8AA0", "\u{2F9D0}"=>"\u8AED", "\u{2F9D1}"=>"\u8B8A", + "\u{2F9D2}"=>"\u8C55", "\u{2F9D3}"=>"\u{27CA8}", "\u{2F9D4}"=>"\u8CAB", "\u{2F9D5}"=>"\u8CC1", "\u{2F9D6}"=>"\u8D1B", "\u{2F9D7}"=>"\u8D77", "\u{2F9D8}"=>"\u{27F2F}", "\u{2F9D9}"=>"\u{20804}", + "\u{2F9DA}"=>"\u8DCB", "\u{2F9DB}"=>"\u8DBC", "\u{2F9DC}"=>"\u8DF0", "\u{2F9DD}"=>"\u{208DE}", "\u{2F9DE}"=>"\u8ED4", "\u{2F9DF}"=>"\u8F38", "\u{2F9E0}"=>"\u{285D2}", "\u{2F9E1}"=>"\u{285ED}", + "\u{2F9E2}"=>"\u9094", "\u{2F9E3}"=>"\u90F1", "\u{2F9E4}"=>"\u9111", "\u{2F9E5}"=>"\u{2872E}", "\u{2F9E6}"=>"\u911B", "\u{2F9E7}"=>"\u9238", "\u{2F9E8}"=>"\u92D7", "\u{2F9E9}"=>"\u92D8", + "\u{2F9EA}"=>"\u927C", "\u{2F9EB}"=>"\u93F9", "\u{2F9EC}"=>"\u9415", "\u{2F9ED}"=>"\u{28BFA}", "\u{2F9EE}"=>"\u958B", "\u{2F9EF}"=>"\u4995", "\u{2F9F0}"=>"\u95B7", "\u{2F9F1}"=>"\u{28D77}", + "\u{2F9F2}"=>"\u49E6", "\u{2F9F3}"=>"\u96C3", "\u{2F9F4}"=>"\u5DB2", "\u{2F9F5}"=>"\u9723", "\u{2F9F6}"=>"\u{29145}", "\u{2F9F7}"=>"\u{2921A}", "\u{2F9F8}"=>"\u4A6E", "\u{2F9F9}"=>"\u4A76", + "\u{2F9FA}"=>"\u97E0", "\u{2F9FB}"=>"\u{2940A}", "\u{2F9FC}"=>"\u4AB2", "\u{2F9FD}"=>"\u{29496}", "\u{2F9FE}"=>"\u980B", "\u{2F9FF}"=>"\u980B", "\u{2FA00}"=>"\u9829", "\u{2FA01}"=>"\u{295B6}", + "\u{2FA02}"=>"\u98E2", "\u{2FA03}"=>"\u4B33", "\u{2FA04}"=>"\u9929", "\u{2FA05}"=>"\u99A7", "\u{2FA06}"=>"\u99C2", "\u{2FA07}"=>"\u99FE", "\u{2FA08}"=>"\u4BCE", "\u{2FA09}"=>"\u{29B30}", + "\u{2FA0A}"=>"\u9B12", "\u{2FA0B}"=>"\u9C40", "\u{2FA0C}"=>"\u9CFD", "\u{2FA0D}"=>"\u4CCE", "\u{2FA0E}"=>"\u4CED", "\u{2FA0F}"=>"\u9D67", "\u{2FA10}"=>"\u{2A0CE}", "\u{2FA11}"=>"\u4CF8", + "\u{2FA12}"=>"\u{2A105}", "\u{2FA13}"=>"\u{2A20E}", "\u{2FA14}"=>"\u{2A291}", "\u{2FA15}"=>"\u9EBB", "\u{2FA16}"=>"\u4D56", "\u{2FA17}"=>"\u9EF9", "\u{2FA18}"=>"\u9EFE", "\u{2FA19}"=>"\u9F05", + "\u{2FA1A}"=>"\u9F0F", "\u{2FA1B}"=>"\u9F16", "\u{2FA1C}"=>"\u9F3B", "\u{2FA1D}"=>"\u{2A600}", + }.freeze + + KOMPATIBLE_TABLE = { + "\u00A0"=>" ", "\u00A8"=>" \u0308", "\u00AA"=>"a", "\u00AF"=>" \u0304", "\u00B2"=>"2", "\u00B3"=>"3", "\u00B4"=>" \u0301", "\u00B5"=>"\u03BC", + "\u00B8"=>" \u0327", "\u00B9"=>"1", "\u00BA"=>"o", "\u00BC"=>"1\u20444", "\u00BD"=>"1\u20442", "\u00BE"=>"3\u20444", "\u0132"=>"IJ", "\u0133"=>"ij", + "\u013F"=>"L\u00B7", "\u0140"=>"l\u00B7", "\u0149"=>"\u02BCn", "\u017F"=>"s", "\u01C4"=>"D\u017D", "\u01C5"=>"D\u017E", "\u01C6"=>"d\u017E", "\u01C7"=>"LJ", + "\u01C8"=>"Lj", "\u01C9"=>"lj", "\u01CA"=>"NJ", "\u01CB"=>"Nj", "\u01CC"=>"nj", "\u01F1"=>"DZ", "\u01F2"=>"Dz", "\u01F3"=>"dz", + "\u02B0"=>"h", "\u02B1"=>"\u0266", "\u02B2"=>"j", "\u02B3"=>"r", "\u02B4"=>"\u0279", "\u02B5"=>"\u027B", "\u02B6"=>"\u0281", "\u02B7"=>"w", + "\u02B8"=>"y", "\u02D8"=>" \u0306", "\u02D9"=>" \u0307", "\u02DA"=>" \u030A", "\u02DB"=>" \u0328", "\u02DC"=>" \u0303", "\u02DD"=>" \u030B", "\u02E0"=>"\u0263", + "\u02E1"=>"l", "\u02E2"=>"s", "\u02E3"=>"x", "\u02E4"=>"\u0295", "\u037A"=>" \u0345", "\u0384"=>" \u0301", "\u03D0"=>"\u03B2", "\u03D1"=>"\u03B8", + "\u03D2"=>"\u03A5", "\u03D5"=>"\u03C6", "\u03D6"=>"\u03C0", "\u03F0"=>"\u03BA", "\u03F1"=>"\u03C1", "\u03F2"=>"\u03C2", "\u03F4"=>"\u0398", "\u03F5"=>"\u03B5", + "\u03F9"=>"\u03A3", "\u0587"=>"\u0565\u0582", "\u0675"=>"\u0627\u0674", "\u0676"=>"\u0648\u0674", "\u0677"=>"\u06C7\u0674", "\u0678"=>"\u064A\u0674", "\u0E33"=>"\u0E4D\u0E32", "\u0EB3"=>"\u0ECD\u0EB2", + "\u0EDC"=>"\u0EAB\u0E99", "\u0EDD"=>"\u0EAB\u0EA1", "\u0F0C"=>"\u0F0B", "\u0F77"=>"\u0FB2\u0F81", "\u0F79"=>"\u0FB3\u0F81", "\u10FC"=>"\u10DC", "\u1D2C"=>"A", "\u1D2D"=>"\u00C6", + "\u1D2E"=>"B", "\u1D30"=>"D", "\u1D31"=>"E", "\u1D32"=>"\u018E", "\u1D33"=>"G", "\u1D34"=>"H", "\u1D35"=>"I", "\u1D36"=>"J", + "\u1D37"=>"K", "\u1D38"=>"L", "\u1D39"=>"M", "\u1D3A"=>"N", "\u1D3C"=>"O", "\u1D3D"=>"\u0222", "\u1D3E"=>"P", "\u1D3F"=>"R", + "\u1D40"=>"T", "\u1D41"=>"U", "\u1D42"=>"W", "\u1D43"=>"a", "\u1D44"=>"\u0250", "\u1D45"=>"\u0251", "\u1D46"=>"\u1D02", "\u1D47"=>"b", + "\u1D48"=>"d", "\u1D49"=>"e", "\u1D4A"=>"\u0259", "\u1D4B"=>"\u025B", "\u1D4C"=>"\u025C", "\u1D4D"=>"g", "\u1D4F"=>"k", "\u1D50"=>"m", + "\u1D51"=>"\u014B", "\u1D52"=>"o", "\u1D53"=>"\u0254", "\u1D54"=>"\u1D16", "\u1D55"=>"\u1D17", "\u1D56"=>"p", "\u1D57"=>"t", "\u1D58"=>"u", + "\u1D59"=>"\u1D1D", "\u1D5A"=>"\u026F", "\u1D5B"=>"v", "\u1D5C"=>"\u1D25", "\u1D5D"=>"\u03B2", "\u1D5E"=>"\u03B3", "\u1D5F"=>"\u03B4", "\u1D60"=>"\u03C6", + "\u1D61"=>"\u03C7", "\u1D62"=>"i", "\u1D63"=>"r", "\u1D64"=>"u", "\u1D65"=>"v", "\u1D66"=>"\u03B2", "\u1D67"=>"\u03B3", "\u1D68"=>"\u03C1", + "\u1D69"=>"\u03C6", "\u1D6A"=>"\u03C7", "\u1D78"=>"\u043D", "\u1D9B"=>"\u0252", "\u1D9C"=>"c", "\u1D9D"=>"\u0255", "\u1D9E"=>"\u00F0", "\u1D9F"=>"\u025C", + "\u1DA0"=>"f", "\u1DA1"=>"\u025F", "\u1DA2"=>"\u0261", "\u1DA3"=>"\u0265", "\u1DA4"=>"\u0268", "\u1DA5"=>"\u0269", "\u1DA6"=>"\u026A", "\u1DA7"=>"\u1D7B", + "\u1DA8"=>"\u029D", "\u1DA9"=>"\u026D", "\u1DAA"=>"\u1D85", "\u1DAB"=>"\u029F", "\u1DAC"=>"\u0271", "\u1DAD"=>"\u0270", "\u1DAE"=>"\u0272", "\u1DAF"=>"\u0273", + "\u1DB0"=>"\u0274", "\u1DB1"=>"\u0275", "\u1DB2"=>"\u0278", "\u1DB3"=>"\u0282", "\u1DB4"=>"\u0283", "\u1DB5"=>"\u01AB", "\u1DB6"=>"\u0289", "\u1DB7"=>"\u028A", + "\u1DB8"=>"\u1D1C", "\u1DB9"=>"\u028B", "\u1DBA"=>"\u028C", "\u1DBB"=>"z", "\u1DBC"=>"\u0290", "\u1DBD"=>"\u0291", "\u1DBE"=>"\u0292", "\u1DBF"=>"\u03B8", + "\u1E9A"=>"a\u02BE", "\u1FBD"=>" \u0313", "\u1FBF"=>" \u0313", "\u1FC0"=>" \u0342", "\u1FFE"=>" \u0314", "\u2002"=>" ", "\u2003"=>" ", "\u2004"=>" ", + "\u2005"=>" ", "\u2006"=>" ", "\u2007"=>" ", "\u2008"=>" ", "\u2009"=>" ", "\u200A"=>" ", "\u2011"=>"\u2010", "\u2017"=>" \u0333", + "\u2024"=>".", "\u2025"=>"..", "\u2026"=>"...", "\u202F"=>" ", "\u2033"=>"\u2032\u2032", "\u2034"=>"\u2032\u2032\u2032", "\u2036"=>"\u2035\u2035", "\u2037"=>"\u2035\u2035\u2035", + "\u203C"=>"!!", "\u203E"=>" \u0305", "\u2047"=>"??", "\u2048"=>"?!", "\u2049"=>"!?", "\u2057"=>"\u2032\u2032\u2032\u2032", "\u205F"=>" ", "\u2070"=>"0", + "\u2071"=>"i", "\u2074"=>"4", "\u2075"=>"5", "\u2076"=>"6", "\u2077"=>"7", "\u2078"=>"8", "\u2079"=>"9", "\u207A"=>"+", + "\u207B"=>"\u2212", "\u207C"=>"=", "\u207D"=>"(", "\u207E"=>")", "\u207F"=>"n", "\u2080"=>"0", "\u2081"=>"1", "\u2082"=>"2", + "\u2083"=>"3", "\u2084"=>"4", "\u2085"=>"5", "\u2086"=>"6", "\u2087"=>"7", "\u2088"=>"8", "\u2089"=>"9", "\u208A"=>"+", + "\u208B"=>"\u2212", "\u208C"=>"=", "\u208D"=>"(", "\u208E"=>")", "\u2090"=>"a", "\u2091"=>"e", "\u2092"=>"o", "\u2093"=>"x", + "\u2094"=>"\u0259", "\u2095"=>"h", "\u2096"=>"k", "\u2097"=>"l", "\u2098"=>"m", "\u2099"=>"n", "\u209A"=>"p", "\u209B"=>"s", + "\u209C"=>"t", "\u20A8"=>"Rs", "\u2100"=>"a/c", "\u2101"=>"a/s", "\u2102"=>"C", "\u2103"=>"\u00B0C", "\u2105"=>"c/o", "\u2106"=>"c/u", + "\u2107"=>"\u0190", "\u2109"=>"\u00B0F", "\u210A"=>"g", "\u210B"=>"H", "\u210C"=>"H", "\u210D"=>"H", "\u210E"=>"h", "\u210F"=>"\u0127", + "\u2110"=>"I", "\u2111"=>"I", "\u2112"=>"L", "\u2113"=>"l", "\u2115"=>"N", "\u2116"=>"No", "\u2119"=>"P", "\u211A"=>"Q", + "\u211B"=>"R", "\u211C"=>"R", "\u211D"=>"R", "\u2120"=>"SM", "\u2121"=>"TEL", "\u2122"=>"TM", "\u2124"=>"Z", "\u2128"=>"Z", + "\u212C"=>"B", "\u212D"=>"C", "\u212F"=>"e", "\u2130"=>"E", "\u2131"=>"F", "\u2133"=>"M", "\u2134"=>"o", "\u2135"=>"\u05D0", + "\u2136"=>"\u05D1", "\u2137"=>"\u05D2", "\u2138"=>"\u05D3", "\u2139"=>"i", "\u213B"=>"FAX", "\u213C"=>"\u03C0", "\u213D"=>"\u03B3", "\u213E"=>"\u0393", + "\u213F"=>"\u03A0", "\u2140"=>"\u2211", "\u2145"=>"D", "\u2146"=>"d", "\u2147"=>"e", "\u2148"=>"i", "\u2149"=>"j", "\u2150"=>"1\u20447", + "\u2151"=>"1\u20449", "\u2152"=>"1\u204410", "\u2153"=>"1\u20443", "\u2154"=>"2\u20443", "\u2155"=>"1\u20445", "\u2156"=>"2\u20445", "\u2157"=>"3\u20445", "\u2158"=>"4\u20445", + "\u2159"=>"1\u20446", "\u215A"=>"5\u20446", "\u215B"=>"1\u20448", "\u215C"=>"3\u20448", "\u215D"=>"5\u20448", "\u215E"=>"7\u20448", "\u215F"=>"1\u2044", "\u2160"=>"I", + "\u2161"=>"II", "\u2162"=>"III", "\u2163"=>"IV", "\u2164"=>"V", "\u2165"=>"VI", "\u2166"=>"VII", "\u2167"=>"VIII", "\u2168"=>"IX", + "\u2169"=>"X", "\u216A"=>"XI", "\u216B"=>"XII", "\u216C"=>"L", "\u216D"=>"C", "\u216E"=>"D", "\u216F"=>"M", "\u2170"=>"i", + "\u2171"=>"ii", "\u2172"=>"iii", "\u2173"=>"iv", "\u2174"=>"v", "\u2175"=>"vi", "\u2176"=>"vii", "\u2177"=>"viii", "\u2178"=>"ix", + "\u2179"=>"x", "\u217A"=>"xi", "\u217B"=>"xii", "\u217C"=>"l", "\u217D"=>"c", "\u217E"=>"d", "\u217F"=>"m", "\u2189"=>"0\u20443", + "\u222C"=>"\u222B\u222B", "\u222D"=>"\u222B\u222B\u222B", "\u222F"=>"\u222E\u222E", "\u2230"=>"\u222E\u222E\u222E", "\u2460"=>"1", "\u2461"=>"2", "\u2462"=>"3", "\u2463"=>"4", + "\u2464"=>"5", "\u2465"=>"6", "\u2466"=>"7", "\u2467"=>"8", "\u2468"=>"9", "\u2469"=>"10", "\u246A"=>"11", "\u246B"=>"12", + "\u246C"=>"13", "\u246D"=>"14", "\u246E"=>"15", "\u246F"=>"16", "\u2470"=>"17", "\u2471"=>"18", "\u2472"=>"19", "\u2473"=>"20", + "\u2474"=>"(1)", "\u2475"=>"(2)", "\u2476"=>"(3)", "\u2477"=>"(4)", "\u2478"=>"(5)", "\u2479"=>"(6)", "\u247A"=>"(7)", "\u247B"=>"(8)", + "\u247C"=>"(9)", "\u247D"=>"(10)", "\u247E"=>"(11)", "\u247F"=>"(12)", "\u2480"=>"(13)", "\u2481"=>"(14)", "\u2482"=>"(15)", "\u2483"=>"(16)", + "\u2484"=>"(17)", "\u2485"=>"(18)", "\u2486"=>"(19)", "\u2487"=>"(20)", "\u2488"=>"1.", "\u2489"=>"2.", "\u248A"=>"3.", "\u248B"=>"4.", + "\u248C"=>"5.", "\u248D"=>"6.", "\u248E"=>"7.", "\u248F"=>"8.", "\u2490"=>"9.", "\u2491"=>"10.", "\u2492"=>"11.", "\u2493"=>"12.", + "\u2494"=>"13.", "\u2495"=>"14.", "\u2496"=>"15.", "\u2497"=>"16.", "\u2498"=>"17.", "\u2499"=>"18.", "\u249A"=>"19.", "\u249B"=>"20.", + "\u249C"=>"(a)", "\u249D"=>"(b)", "\u249E"=>"(c)", "\u249F"=>"(d)", "\u24A0"=>"(e)", "\u24A1"=>"(f)", "\u24A2"=>"(g)", "\u24A3"=>"(h)", + "\u24A4"=>"(i)", "\u24A5"=>"(j)", "\u24A6"=>"(k)", "\u24A7"=>"(l)", "\u24A8"=>"(m)", "\u24A9"=>"(n)", "\u24AA"=>"(o)", "\u24AB"=>"(p)", + "\u24AC"=>"(q)", "\u24AD"=>"(r)", "\u24AE"=>"(s)", "\u24AF"=>"(t)", "\u24B0"=>"(u)", "\u24B1"=>"(v)", "\u24B2"=>"(w)", "\u24B3"=>"(x)", + "\u24B4"=>"(y)", "\u24B5"=>"(z)", "\u24B6"=>"A", "\u24B7"=>"B", "\u24B8"=>"C", "\u24B9"=>"D", "\u24BA"=>"E", "\u24BB"=>"F", + "\u24BC"=>"G", "\u24BD"=>"H", "\u24BE"=>"I", "\u24BF"=>"J", "\u24C0"=>"K", "\u24C1"=>"L", "\u24C2"=>"M", "\u24C3"=>"N", + "\u24C4"=>"O", "\u24C5"=>"P", "\u24C6"=>"Q", "\u24C7"=>"R", "\u24C8"=>"S", "\u24C9"=>"T", "\u24CA"=>"U", "\u24CB"=>"V", + "\u24CC"=>"W", "\u24CD"=>"X", "\u24CE"=>"Y", "\u24CF"=>"Z", "\u24D0"=>"a", "\u24D1"=>"b", "\u24D2"=>"c", "\u24D3"=>"d", + "\u24D4"=>"e", "\u24D5"=>"f", "\u24D6"=>"g", "\u24D7"=>"h", "\u24D8"=>"i", "\u24D9"=>"j", "\u24DA"=>"k", "\u24DB"=>"l", + "\u24DC"=>"m", "\u24DD"=>"n", "\u24DE"=>"o", "\u24DF"=>"p", "\u24E0"=>"q", "\u24E1"=>"r", "\u24E2"=>"s", "\u24E3"=>"t", + "\u24E4"=>"u", "\u24E5"=>"v", "\u24E6"=>"w", "\u24E7"=>"x", "\u24E8"=>"y", "\u24E9"=>"z", "\u24EA"=>"0", "\u2A0C"=>"\u222B\u222B\u222B\u222B", + "\u2A74"=>"::=", "\u2A75"=>"==", "\u2A76"=>"===", "\u2C7C"=>"j", "\u2C7D"=>"V", "\u2D6F"=>"\u2D61", "\u2E9F"=>"\u6BCD", "\u2EF3"=>"\u9F9F", + "\u2F00"=>"\u4E00", "\u2F01"=>"\u4E28", "\u2F02"=>"\u4E36", "\u2F03"=>"\u4E3F", "\u2F04"=>"\u4E59", "\u2F05"=>"\u4E85", "\u2F06"=>"\u4E8C", "\u2F07"=>"\u4EA0", + "\u2F08"=>"\u4EBA", "\u2F09"=>"\u513F", "\u2F0A"=>"\u5165", "\u2F0B"=>"\u516B", "\u2F0C"=>"\u5182", "\u2F0D"=>"\u5196", "\u2F0E"=>"\u51AB", "\u2F0F"=>"\u51E0", + "\u2F10"=>"\u51F5", "\u2F11"=>"\u5200", "\u2F12"=>"\u529B", "\u2F13"=>"\u52F9", "\u2F14"=>"\u5315", "\u2F15"=>"\u531A", "\u2F16"=>"\u5338", "\u2F17"=>"\u5341", + "\u2F18"=>"\u535C", "\u2F19"=>"\u5369", "\u2F1A"=>"\u5382", "\u2F1B"=>"\u53B6", "\u2F1C"=>"\u53C8", "\u2F1D"=>"\u53E3", "\u2F1E"=>"\u56D7", "\u2F1F"=>"\u571F", + "\u2F20"=>"\u58EB", "\u2F21"=>"\u5902", "\u2F22"=>"\u590A", "\u2F23"=>"\u5915", "\u2F24"=>"\u5927", "\u2F25"=>"\u5973", "\u2F26"=>"\u5B50", "\u2F27"=>"\u5B80", + "\u2F28"=>"\u5BF8", "\u2F29"=>"\u5C0F", "\u2F2A"=>"\u5C22", "\u2F2B"=>"\u5C38", "\u2F2C"=>"\u5C6E", "\u2F2D"=>"\u5C71", "\u2F2E"=>"\u5DDB", "\u2F2F"=>"\u5DE5", + "\u2F30"=>"\u5DF1", "\u2F31"=>"\u5DFE", "\u2F32"=>"\u5E72", "\u2F33"=>"\u5E7A", "\u2F34"=>"\u5E7F", "\u2F35"=>"\u5EF4", "\u2F36"=>"\u5EFE", "\u2F37"=>"\u5F0B", + "\u2F38"=>"\u5F13", "\u2F39"=>"\u5F50", "\u2F3A"=>"\u5F61", "\u2F3B"=>"\u5F73", "\u2F3C"=>"\u5FC3", "\u2F3D"=>"\u6208", "\u2F3E"=>"\u6236", "\u2F3F"=>"\u624B", + "\u2F40"=>"\u652F", "\u2F41"=>"\u6534", "\u2F42"=>"\u6587", "\u2F43"=>"\u6597", "\u2F44"=>"\u65A4", "\u2F45"=>"\u65B9", "\u2F46"=>"\u65E0", "\u2F47"=>"\u65E5", + "\u2F48"=>"\u66F0", "\u2F49"=>"\u6708", "\u2F4A"=>"\u6728", "\u2F4B"=>"\u6B20", "\u2F4C"=>"\u6B62", "\u2F4D"=>"\u6B79", "\u2F4E"=>"\u6BB3", "\u2F4F"=>"\u6BCB", + "\u2F50"=>"\u6BD4", "\u2F51"=>"\u6BDB", "\u2F52"=>"\u6C0F", "\u2F53"=>"\u6C14", "\u2F54"=>"\u6C34", "\u2F55"=>"\u706B", "\u2F56"=>"\u722A", "\u2F57"=>"\u7236", + "\u2F58"=>"\u723B", "\u2F59"=>"\u723F", "\u2F5A"=>"\u7247", "\u2F5B"=>"\u7259", "\u2F5C"=>"\u725B", "\u2F5D"=>"\u72AC", "\u2F5E"=>"\u7384", "\u2F5F"=>"\u7389", + "\u2F60"=>"\u74DC", "\u2F61"=>"\u74E6", "\u2F62"=>"\u7518", "\u2F63"=>"\u751F", "\u2F64"=>"\u7528", "\u2F65"=>"\u7530", "\u2F66"=>"\u758B", "\u2F67"=>"\u7592", + "\u2F68"=>"\u7676", "\u2F69"=>"\u767D", "\u2F6A"=>"\u76AE", "\u2F6B"=>"\u76BF", "\u2F6C"=>"\u76EE", "\u2F6D"=>"\u77DB", "\u2F6E"=>"\u77E2", "\u2F6F"=>"\u77F3", + "\u2F70"=>"\u793A", "\u2F71"=>"\u79B8", "\u2F72"=>"\u79BE", "\u2F73"=>"\u7A74", "\u2F74"=>"\u7ACB", "\u2F75"=>"\u7AF9", "\u2F76"=>"\u7C73", "\u2F77"=>"\u7CF8", + "\u2F78"=>"\u7F36", "\u2F79"=>"\u7F51", "\u2F7A"=>"\u7F8A", "\u2F7B"=>"\u7FBD", "\u2F7C"=>"\u8001", "\u2F7D"=>"\u800C", "\u2F7E"=>"\u8012", "\u2F7F"=>"\u8033", + "\u2F80"=>"\u807F", "\u2F81"=>"\u8089", "\u2F82"=>"\u81E3", "\u2F83"=>"\u81EA", "\u2F84"=>"\u81F3", "\u2F85"=>"\u81FC", "\u2F86"=>"\u820C", "\u2F87"=>"\u821B", + "\u2F88"=>"\u821F", "\u2F89"=>"\u826E", "\u2F8A"=>"\u8272", "\u2F8B"=>"\u8278", "\u2F8C"=>"\u864D", "\u2F8D"=>"\u866B", "\u2F8E"=>"\u8840", "\u2F8F"=>"\u884C", + "\u2F90"=>"\u8863", "\u2F91"=>"\u897E", "\u2F92"=>"\u898B", "\u2F93"=>"\u89D2", "\u2F94"=>"\u8A00", "\u2F95"=>"\u8C37", "\u2F96"=>"\u8C46", "\u2F97"=>"\u8C55", + "\u2F98"=>"\u8C78", "\u2F99"=>"\u8C9D", "\u2F9A"=>"\u8D64", "\u2F9B"=>"\u8D70", "\u2F9C"=>"\u8DB3", "\u2F9D"=>"\u8EAB", "\u2F9E"=>"\u8ECA", "\u2F9F"=>"\u8F9B", + "\u2FA0"=>"\u8FB0", "\u2FA1"=>"\u8FB5", "\u2FA2"=>"\u9091", "\u2FA3"=>"\u9149", "\u2FA4"=>"\u91C6", "\u2FA5"=>"\u91CC", "\u2FA6"=>"\u91D1", "\u2FA7"=>"\u9577", + "\u2FA8"=>"\u9580", "\u2FA9"=>"\u961C", "\u2FAA"=>"\u96B6", "\u2FAB"=>"\u96B9", "\u2FAC"=>"\u96E8", "\u2FAD"=>"\u9751", "\u2FAE"=>"\u975E", "\u2FAF"=>"\u9762", + "\u2FB0"=>"\u9769", "\u2FB1"=>"\u97CB", "\u2FB2"=>"\u97ED", "\u2FB3"=>"\u97F3", "\u2FB4"=>"\u9801", "\u2FB5"=>"\u98A8", "\u2FB6"=>"\u98DB", "\u2FB7"=>"\u98DF", + "\u2FB8"=>"\u9996", "\u2FB9"=>"\u9999", "\u2FBA"=>"\u99AC", "\u2FBB"=>"\u9AA8", "\u2FBC"=>"\u9AD8", "\u2FBD"=>"\u9ADF", "\u2FBE"=>"\u9B25", "\u2FBF"=>"\u9B2F", + "\u2FC0"=>"\u9B32", "\u2FC1"=>"\u9B3C", "\u2FC2"=>"\u9B5A", "\u2FC3"=>"\u9CE5", "\u2FC4"=>"\u9E75", "\u2FC5"=>"\u9E7F", "\u2FC6"=>"\u9EA5", "\u2FC7"=>"\u9EBB", + "\u2FC8"=>"\u9EC3", "\u2FC9"=>"\u9ECD", "\u2FCA"=>"\u9ED1", "\u2FCB"=>"\u9EF9", "\u2FCC"=>"\u9EFD", "\u2FCD"=>"\u9F0E", "\u2FCE"=>"\u9F13", "\u2FCF"=>"\u9F20", + "\u2FD0"=>"\u9F3B", "\u2FD1"=>"\u9F4A", "\u2FD2"=>"\u9F52", "\u2FD3"=>"\u9F8D", "\u2FD4"=>"\u9F9C", "\u2FD5"=>"\u9FA0", "\u3000"=>" ", "\u3036"=>"\u3012", + "\u3038"=>"\u5341", "\u3039"=>"\u5344", "\u303A"=>"\u5345", "\u309B"=>" \u3099", "\u309C"=>" \u309A", "\u309F"=>"\u3088\u308A", "\u30FF"=>"\u30B3\u30C8", "\u3131"=>"\u1100", + "\u3132"=>"\u1101", "\u3133"=>"\u11AA", "\u3134"=>"\u1102", "\u3135"=>"\u11AC", "\u3136"=>"\u11AD", "\u3137"=>"\u1103", "\u3138"=>"\u1104", "\u3139"=>"\u1105", + "\u313A"=>"\u11B0", "\u313B"=>"\u11B1", "\u313C"=>"\u11B2", "\u313D"=>"\u11B3", "\u313E"=>"\u11B4", "\u313F"=>"\u11B5", "\u3140"=>"\u111A", "\u3141"=>"\u1106", + "\u3142"=>"\u1107", "\u3143"=>"\u1108", "\u3144"=>"\u1121", "\u3145"=>"\u1109", "\u3146"=>"\u110A", "\u3147"=>"\u110B", "\u3148"=>"\u110C", "\u3149"=>"\u110D", + "\u314A"=>"\u110E", "\u314B"=>"\u110F", "\u314C"=>"\u1110", "\u314D"=>"\u1111", "\u314E"=>"\u1112", "\u314F"=>"\u1161", "\u3150"=>"\u1162", "\u3151"=>"\u1163", + "\u3152"=>"\u1164", "\u3153"=>"\u1165", "\u3154"=>"\u1166", "\u3155"=>"\u1167", "\u3156"=>"\u1168", "\u3157"=>"\u1169", "\u3158"=>"\u116A", "\u3159"=>"\u116B", + "\u315A"=>"\u116C", "\u315B"=>"\u116D", "\u315C"=>"\u116E", "\u315D"=>"\u116F", "\u315E"=>"\u1170", "\u315F"=>"\u1171", "\u3160"=>"\u1172", "\u3161"=>"\u1173", + "\u3162"=>"\u1174", "\u3163"=>"\u1175", "\u3164"=>"\u1160", "\u3165"=>"\u1114", "\u3166"=>"\u1115", "\u3167"=>"\u11C7", "\u3168"=>"\u11C8", "\u3169"=>"\u11CC", + "\u316A"=>"\u11CE", "\u316B"=>"\u11D3", "\u316C"=>"\u11D7", "\u316D"=>"\u11D9", "\u316E"=>"\u111C", "\u316F"=>"\u11DD", "\u3170"=>"\u11DF", "\u3171"=>"\u111D", + "\u3172"=>"\u111E", "\u3173"=>"\u1120", "\u3174"=>"\u1122", "\u3175"=>"\u1123", "\u3176"=>"\u1127", "\u3177"=>"\u1129", "\u3178"=>"\u112B", "\u3179"=>"\u112C", + "\u317A"=>"\u112D", "\u317B"=>"\u112E", "\u317C"=>"\u112F", "\u317D"=>"\u1132", "\u317E"=>"\u1136", "\u317F"=>"\u1140", "\u3180"=>"\u1147", "\u3181"=>"\u114C", + "\u3182"=>"\u11F1", "\u3183"=>"\u11F2", "\u3184"=>"\u1157", "\u3185"=>"\u1158", "\u3186"=>"\u1159", "\u3187"=>"\u1184", "\u3188"=>"\u1185", "\u3189"=>"\u1188", + "\u318A"=>"\u1191", "\u318B"=>"\u1192", "\u318C"=>"\u1194", "\u318D"=>"\u119E", "\u318E"=>"\u11A1", "\u3192"=>"\u4E00", "\u3193"=>"\u4E8C", "\u3194"=>"\u4E09", + "\u3195"=>"\u56DB", "\u3196"=>"\u4E0A", "\u3197"=>"\u4E2D", "\u3198"=>"\u4E0B", "\u3199"=>"\u7532", "\u319A"=>"\u4E59", "\u319B"=>"\u4E19", "\u319C"=>"\u4E01", + "\u319D"=>"\u5929", "\u319E"=>"\u5730", "\u319F"=>"\u4EBA", "\u3200"=>"(\u1100)", "\u3201"=>"(\u1102)", "\u3202"=>"(\u1103)", "\u3203"=>"(\u1105)", "\u3204"=>"(\u1106)", + "\u3205"=>"(\u1107)", "\u3206"=>"(\u1109)", "\u3207"=>"(\u110B)", "\u3208"=>"(\u110C)", "\u3209"=>"(\u110E)", "\u320A"=>"(\u110F)", "\u320B"=>"(\u1110)", "\u320C"=>"(\u1111)", + "\u320D"=>"(\u1112)", "\u320E"=>"(\u1100\u1161)", "\u320F"=>"(\u1102\u1161)", "\u3210"=>"(\u1103\u1161)", "\u3211"=>"(\u1105\u1161)", "\u3212"=>"(\u1106\u1161)", "\u3213"=>"(\u1107\u1161)", "\u3214"=>"(\u1109\u1161)", + "\u3215"=>"(\u110B\u1161)", "\u3216"=>"(\u110C\u1161)", "\u3217"=>"(\u110E\u1161)", "\u3218"=>"(\u110F\u1161)", "\u3219"=>"(\u1110\u1161)", "\u321A"=>"(\u1111\u1161)", "\u321B"=>"(\u1112\u1161)", "\u321C"=>"(\u110C\u116E)", + "\u321D"=>"(\u110B\u1169\u110C\u1165\u11AB)", "\u321E"=>"(\u110B\u1169\u1112\u116E)", "\u3220"=>"(\u4E00)", "\u3221"=>"(\u4E8C)", "\u3222"=>"(\u4E09)", "\u3223"=>"(\u56DB)", "\u3224"=>"(\u4E94)", "\u3225"=>"(\u516D)", + "\u3226"=>"(\u4E03)", "\u3227"=>"(\u516B)", "\u3228"=>"(\u4E5D)", "\u3229"=>"(\u5341)", "\u322A"=>"(\u6708)", "\u322B"=>"(\u706B)", "\u322C"=>"(\u6C34)", "\u322D"=>"(\u6728)", + "\u322E"=>"(\u91D1)", "\u322F"=>"(\u571F)", "\u3230"=>"(\u65E5)", "\u3231"=>"(\u682A)", "\u3232"=>"(\u6709)", "\u3233"=>"(\u793E)", "\u3234"=>"(\u540D)", "\u3235"=>"(\u7279)", + "\u3236"=>"(\u8CA1)", "\u3237"=>"(\u795D)", "\u3238"=>"(\u52B4)", "\u3239"=>"(\u4EE3)", "\u323A"=>"(\u547C)", "\u323B"=>"(\u5B66)", "\u323C"=>"(\u76E3)", "\u323D"=>"(\u4F01)", + "\u323E"=>"(\u8CC7)", "\u323F"=>"(\u5354)", "\u3240"=>"(\u796D)", "\u3241"=>"(\u4F11)", "\u3242"=>"(\u81EA)", "\u3243"=>"(\u81F3)", "\u3244"=>"\u554F", "\u3245"=>"\u5E7C", + "\u3246"=>"\u6587", "\u3247"=>"\u7B8F", "\u3250"=>"PTE", "\u3251"=>"21", "\u3252"=>"22", "\u3253"=>"23", "\u3254"=>"24", "\u3255"=>"25", + "\u3256"=>"26", "\u3257"=>"27", "\u3258"=>"28", "\u3259"=>"29", "\u325A"=>"30", "\u325B"=>"31", "\u325C"=>"32", "\u325D"=>"33", + "\u325E"=>"34", "\u325F"=>"35", "\u3260"=>"\u1100", "\u3261"=>"\u1102", "\u3262"=>"\u1103", "\u3263"=>"\u1105", "\u3264"=>"\u1106", "\u3265"=>"\u1107", + "\u3266"=>"\u1109", "\u3267"=>"\u110B", "\u3268"=>"\u110C", "\u3269"=>"\u110E", "\u326A"=>"\u110F", "\u326B"=>"\u1110", "\u326C"=>"\u1111", "\u326D"=>"\u1112", + "\u326E"=>"\u1100\u1161", "\u326F"=>"\u1102\u1161", "\u3270"=>"\u1103\u1161", "\u3271"=>"\u1105\u1161", "\u3272"=>"\u1106\u1161", "\u3273"=>"\u1107\u1161", "\u3274"=>"\u1109\u1161", "\u3275"=>"\u110B\u1161", + "\u3276"=>"\u110C\u1161", "\u3277"=>"\u110E\u1161", "\u3278"=>"\u110F\u1161", "\u3279"=>"\u1110\u1161", "\u327A"=>"\u1111\u1161", "\u327B"=>"\u1112\u1161", "\u327C"=>"\u110E\u1161\u11B7\u1100\u1169", "\u327D"=>"\u110C\u116E\u110B\u1174", + "\u327E"=>"\u110B\u116E", "\u3280"=>"\u4E00", "\u3281"=>"\u4E8C", "\u3282"=>"\u4E09", "\u3283"=>"\u56DB", "\u3284"=>"\u4E94", "\u3285"=>"\u516D", "\u3286"=>"\u4E03", + "\u3287"=>"\u516B", "\u3288"=>"\u4E5D", "\u3289"=>"\u5341", "\u328A"=>"\u6708", "\u328B"=>"\u706B", "\u328C"=>"\u6C34", "\u328D"=>"\u6728", "\u328E"=>"\u91D1", + "\u328F"=>"\u571F", "\u3290"=>"\u65E5", "\u3291"=>"\u682A", "\u3292"=>"\u6709", "\u3293"=>"\u793E", "\u3294"=>"\u540D", "\u3295"=>"\u7279", "\u3296"=>"\u8CA1", + "\u3297"=>"\u795D", "\u3298"=>"\u52B4", "\u3299"=>"\u79D8", "\u329A"=>"\u7537", "\u329B"=>"\u5973", "\u329C"=>"\u9069", "\u329D"=>"\u512A", "\u329E"=>"\u5370", + "\u329F"=>"\u6CE8", "\u32A0"=>"\u9805", "\u32A1"=>"\u4F11", "\u32A2"=>"\u5199", "\u32A3"=>"\u6B63", "\u32A4"=>"\u4E0A", "\u32A5"=>"\u4E2D", "\u32A6"=>"\u4E0B", + "\u32A7"=>"\u5DE6", "\u32A8"=>"\u53F3", "\u32A9"=>"\u533B", "\u32AA"=>"\u5B97", "\u32AB"=>"\u5B66", "\u32AC"=>"\u76E3", "\u32AD"=>"\u4F01", "\u32AE"=>"\u8CC7", + "\u32AF"=>"\u5354", "\u32B0"=>"\u591C", "\u32B1"=>"36", "\u32B2"=>"37", "\u32B3"=>"38", "\u32B4"=>"39", "\u32B5"=>"40", "\u32B6"=>"41", + "\u32B7"=>"42", "\u32B8"=>"43", "\u32B9"=>"44", "\u32BA"=>"45", "\u32BB"=>"46", "\u32BC"=>"47", "\u32BD"=>"48", "\u32BE"=>"49", + "\u32BF"=>"50", "\u32C0"=>"1\u6708", "\u32C1"=>"2\u6708", "\u32C2"=>"3\u6708", "\u32C3"=>"4\u6708", "\u32C4"=>"5\u6708", "\u32C5"=>"6\u6708", "\u32C6"=>"7\u6708", + "\u32C7"=>"8\u6708", "\u32C8"=>"9\u6708", "\u32C9"=>"10\u6708", "\u32CA"=>"11\u6708", "\u32CB"=>"12\u6708", "\u32CC"=>"Hg", "\u32CD"=>"erg", "\u32CE"=>"eV", + "\u32CF"=>"LTD", "\u32D0"=>"\u30A2", "\u32D1"=>"\u30A4", "\u32D2"=>"\u30A6", "\u32D3"=>"\u30A8", "\u32D4"=>"\u30AA", "\u32D5"=>"\u30AB", "\u32D6"=>"\u30AD", + "\u32D7"=>"\u30AF", "\u32D8"=>"\u30B1", "\u32D9"=>"\u30B3", "\u32DA"=>"\u30B5", "\u32DB"=>"\u30B7", "\u32DC"=>"\u30B9", "\u32DD"=>"\u30BB", "\u32DE"=>"\u30BD", + "\u32DF"=>"\u30BF", "\u32E0"=>"\u30C1", "\u32E1"=>"\u30C4", "\u32E2"=>"\u30C6", "\u32E3"=>"\u30C8", "\u32E4"=>"\u30CA", "\u32E5"=>"\u30CB", "\u32E6"=>"\u30CC", + "\u32E7"=>"\u30CD", "\u32E8"=>"\u30CE", "\u32E9"=>"\u30CF", "\u32EA"=>"\u30D2", "\u32EB"=>"\u30D5", "\u32EC"=>"\u30D8", "\u32ED"=>"\u30DB", "\u32EE"=>"\u30DE", + "\u32EF"=>"\u30DF", "\u32F0"=>"\u30E0", "\u32F1"=>"\u30E1", "\u32F2"=>"\u30E2", "\u32F3"=>"\u30E4", "\u32F4"=>"\u30E6", "\u32F5"=>"\u30E8", "\u32F6"=>"\u30E9", + "\u32F7"=>"\u30EA", "\u32F8"=>"\u30EB", "\u32F9"=>"\u30EC", "\u32FA"=>"\u30ED", "\u32FB"=>"\u30EF", "\u32FC"=>"\u30F0", "\u32FD"=>"\u30F1", "\u32FE"=>"\u30F2", + "\u3300"=>"\u30A2\u30D1\u30FC\u30C8", "\u3301"=>"\u30A2\u30EB\u30D5\u30A1", "\u3302"=>"\u30A2\u30F3\u30DA\u30A2", "\u3303"=>"\u30A2\u30FC\u30EB", "\u3304"=>"\u30A4\u30CB\u30F3\u30B0", "\u3305"=>"\u30A4\u30F3\u30C1", "\u3306"=>"\u30A6\u30A9\u30F3", "\u3307"=>"\u30A8\u30B9\u30AF\u30FC\u30C9", + "\u3308"=>"\u30A8\u30FC\u30AB\u30FC", "\u3309"=>"\u30AA\u30F3\u30B9", "\u330A"=>"\u30AA\u30FC\u30E0", "\u330B"=>"\u30AB\u30A4\u30EA", "\u330C"=>"\u30AB\u30E9\u30C3\u30C8", "\u330D"=>"\u30AB\u30ED\u30EA\u30FC", "\u330E"=>"\u30AC\u30ED\u30F3", "\u330F"=>"\u30AC\u30F3\u30DE", + "\u3310"=>"\u30AE\u30AC", "\u3311"=>"\u30AE\u30CB\u30FC", "\u3312"=>"\u30AD\u30E5\u30EA\u30FC", "\u3313"=>"\u30AE\u30EB\u30C0\u30FC", "\u3314"=>"\u30AD\u30ED", "\u3315"=>"\u30AD\u30ED\u30B0\u30E9\u30E0", "\u3316"=>"\u30AD\u30ED\u30E1\u30FC\u30C8\u30EB", "\u3317"=>"\u30AD\u30ED\u30EF\u30C3\u30C8", + "\u3318"=>"\u30B0\u30E9\u30E0", "\u3319"=>"\u30B0\u30E9\u30E0\u30C8\u30F3", "\u331A"=>"\u30AF\u30EB\u30BC\u30A4\u30ED", "\u331B"=>"\u30AF\u30ED\u30FC\u30CD", "\u331C"=>"\u30B1\u30FC\u30B9", "\u331D"=>"\u30B3\u30EB\u30CA", "\u331E"=>"\u30B3\u30FC\u30DD", "\u331F"=>"\u30B5\u30A4\u30AF\u30EB", + "\u3320"=>"\u30B5\u30F3\u30C1\u30FC\u30E0", "\u3321"=>"\u30B7\u30EA\u30F3\u30B0", "\u3322"=>"\u30BB\u30F3\u30C1", "\u3323"=>"\u30BB\u30F3\u30C8", "\u3324"=>"\u30C0\u30FC\u30B9", "\u3325"=>"\u30C7\u30B7", "\u3326"=>"\u30C9\u30EB", "\u3327"=>"\u30C8\u30F3", + "\u3328"=>"\u30CA\u30CE", "\u3329"=>"\u30CE\u30C3\u30C8", "\u332A"=>"\u30CF\u30A4\u30C4", "\u332B"=>"\u30D1\u30FC\u30BB\u30F3\u30C8", "\u332C"=>"\u30D1\u30FC\u30C4", "\u332D"=>"\u30D0\u30FC\u30EC\u30EB", "\u332E"=>"\u30D4\u30A2\u30B9\u30C8\u30EB", "\u332F"=>"\u30D4\u30AF\u30EB", + "\u3330"=>"\u30D4\u30B3", "\u3331"=>"\u30D3\u30EB", "\u3332"=>"\u30D5\u30A1\u30E9\u30C3\u30C9", "\u3333"=>"\u30D5\u30A3\u30FC\u30C8", "\u3334"=>"\u30D6\u30C3\u30B7\u30A7\u30EB", "\u3335"=>"\u30D5\u30E9\u30F3", "\u3336"=>"\u30D8\u30AF\u30BF\u30FC\u30EB", "\u3337"=>"\u30DA\u30BD", + "\u3338"=>"\u30DA\u30CB\u30D2", "\u3339"=>"\u30D8\u30EB\u30C4", "\u333A"=>"\u30DA\u30F3\u30B9", "\u333B"=>"\u30DA\u30FC\u30B8", "\u333C"=>"\u30D9\u30FC\u30BF", "\u333D"=>"\u30DD\u30A4\u30F3\u30C8", "\u333E"=>"\u30DC\u30EB\u30C8", "\u333F"=>"\u30DB\u30F3", + "\u3340"=>"\u30DD\u30F3\u30C9", "\u3341"=>"\u30DB\u30FC\u30EB", "\u3342"=>"\u30DB\u30FC\u30F3", "\u3343"=>"\u30DE\u30A4\u30AF\u30ED", "\u3344"=>"\u30DE\u30A4\u30EB", "\u3345"=>"\u30DE\u30C3\u30CF", "\u3346"=>"\u30DE\u30EB\u30AF", "\u3347"=>"\u30DE\u30F3\u30B7\u30E7\u30F3", + "\u3348"=>"\u30DF\u30AF\u30ED\u30F3", "\u3349"=>"\u30DF\u30EA", "\u334A"=>"\u30DF\u30EA\u30D0\u30FC\u30EB", "\u334B"=>"\u30E1\u30AC", "\u334C"=>"\u30E1\u30AC\u30C8\u30F3", "\u334D"=>"\u30E1\u30FC\u30C8\u30EB", "\u334E"=>"\u30E4\u30FC\u30C9", "\u334F"=>"\u30E4\u30FC\u30EB", + "\u3350"=>"\u30E6\u30A2\u30F3", "\u3351"=>"\u30EA\u30C3\u30C8\u30EB", "\u3352"=>"\u30EA\u30E9", "\u3353"=>"\u30EB\u30D4\u30FC", "\u3354"=>"\u30EB\u30FC\u30D6\u30EB", "\u3355"=>"\u30EC\u30E0", "\u3356"=>"\u30EC\u30F3\u30C8\u30B2\u30F3", "\u3357"=>"\u30EF\u30C3\u30C8", + "\u3358"=>"0\u70B9", "\u3359"=>"1\u70B9", "\u335A"=>"2\u70B9", "\u335B"=>"3\u70B9", "\u335C"=>"4\u70B9", "\u335D"=>"5\u70B9", "\u335E"=>"6\u70B9", "\u335F"=>"7\u70B9", + "\u3360"=>"8\u70B9", "\u3361"=>"9\u70B9", "\u3362"=>"10\u70B9", "\u3363"=>"11\u70B9", "\u3364"=>"12\u70B9", "\u3365"=>"13\u70B9", "\u3366"=>"14\u70B9", "\u3367"=>"15\u70B9", + "\u3368"=>"16\u70B9", "\u3369"=>"17\u70B9", "\u336A"=>"18\u70B9", "\u336B"=>"19\u70B9", "\u336C"=>"20\u70B9", "\u336D"=>"21\u70B9", "\u336E"=>"22\u70B9", "\u336F"=>"23\u70B9", + "\u3370"=>"24\u70B9", "\u3371"=>"hPa", "\u3372"=>"da", "\u3373"=>"AU", "\u3374"=>"bar", "\u3375"=>"oV", "\u3376"=>"pc", "\u3377"=>"dm", + "\u3378"=>"dm2", "\u3379"=>"dm3", "\u337A"=>"IU", "\u337B"=>"\u5E73\u6210", "\u337C"=>"\u662D\u548C", "\u337D"=>"\u5927\u6B63", "\u337E"=>"\u660E\u6CBB", "\u337F"=>"\u682A\u5F0F\u4F1A\u793E", + "\u3380"=>"pA", "\u3381"=>"nA", "\u3382"=>"\u03BCA", "\u3383"=>"mA", "\u3384"=>"kA", "\u3385"=>"KB", "\u3386"=>"MB", "\u3387"=>"GB", + "\u3388"=>"cal", "\u3389"=>"kcal", "\u338A"=>"pF", "\u338B"=>"nF", "\u338C"=>"\u03BCF", "\u338D"=>"\u03BCg", "\u338E"=>"mg", "\u338F"=>"kg", + "\u3390"=>"Hz", "\u3391"=>"kHz", "\u3392"=>"MHz", "\u3393"=>"GHz", "\u3394"=>"THz", "\u3395"=>"\u03BCl", "\u3396"=>"ml", "\u3397"=>"dl", + "\u3398"=>"kl", "\u3399"=>"fm", "\u339A"=>"nm", "\u339B"=>"\u03BCm", "\u339C"=>"mm", "\u339D"=>"cm", "\u339E"=>"km", "\u339F"=>"mm2", + "\u33A0"=>"cm2", "\u33A1"=>"m2", "\u33A2"=>"km2", "\u33A3"=>"mm3", "\u33A4"=>"cm3", "\u33A5"=>"m3", "\u33A6"=>"km3", "\u33A7"=>"m\u2215s", + "\u33A8"=>"m\u2215s2", "\u33A9"=>"Pa", "\u33AA"=>"kPa", "\u33AB"=>"MPa", "\u33AC"=>"GPa", "\u33AD"=>"rad", "\u33AE"=>"rad\u2215s", "\u33AF"=>"rad\u2215s2", + "\u33B0"=>"ps", "\u33B1"=>"ns", "\u33B2"=>"\u03BCs", "\u33B3"=>"ms", "\u33B4"=>"pV", "\u33B5"=>"nV", "\u33B6"=>"\u03BCV", "\u33B7"=>"mV", + "\u33B8"=>"kV", "\u33B9"=>"MV", "\u33BA"=>"pW", "\u33BB"=>"nW", "\u33BC"=>"\u03BCW", "\u33BD"=>"mW", "\u33BE"=>"kW", "\u33BF"=>"MW", + "\u33C0"=>"k\u03A9", "\u33C1"=>"M\u03A9", "\u33C2"=>"a.m.", "\u33C3"=>"Bq", "\u33C4"=>"cc", "\u33C5"=>"cd", "\u33C6"=>"C\u2215kg", "\u33C7"=>"Co.", + "\u33C8"=>"dB", "\u33C9"=>"Gy", "\u33CA"=>"ha", "\u33CB"=>"HP", "\u33CC"=>"in", "\u33CD"=>"KK", "\u33CE"=>"KM", "\u33CF"=>"kt", + "\u33D0"=>"lm", "\u33D1"=>"ln", "\u33D2"=>"log", "\u33D3"=>"lx", "\u33D4"=>"mb", "\u33D5"=>"mil", "\u33D6"=>"mol", "\u33D7"=>"PH", + "\u33D8"=>"p.m.", "\u33D9"=>"PPM", "\u33DA"=>"PR", "\u33DB"=>"sr", "\u33DC"=>"Sv", "\u33DD"=>"Wb", "\u33DE"=>"V\u2215m", "\u33DF"=>"A\u2215m", + "\u33E0"=>"1\u65E5", "\u33E1"=>"2\u65E5", "\u33E2"=>"3\u65E5", "\u33E3"=>"4\u65E5", "\u33E4"=>"5\u65E5", "\u33E5"=>"6\u65E5", "\u33E6"=>"7\u65E5", "\u33E7"=>"8\u65E5", + "\u33E8"=>"9\u65E5", "\u33E9"=>"10\u65E5", "\u33EA"=>"11\u65E5", "\u33EB"=>"12\u65E5", "\u33EC"=>"13\u65E5", "\u33ED"=>"14\u65E5", "\u33EE"=>"15\u65E5", "\u33EF"=>"16\u65E5", + "\u33F0"=>"17\u65E5", "\u33F1"=>"18\u65E5", "\u33F2"=>"19\u65E5", "\u33F3"=>"20\u65E5", "\u33F4"=>"21\u65E5", "\u33F5"=>"22\u65E5", "\u33F6"=>"23\u65E5", "\u33F7"=>"24\u65E5", + "\u33F8"=>"25\u65E5", "\u33F9"=>"26\u65E5", "\u33FA"=>"27\u65E5", "\u33FB"=>"28\u65E5", "\u33FC"=>"29\u65E5", "\u33FD"=>"30\u65E5", "\u33FE"=>"31\u65E5", "\u33FF"=>"gal", + "\uA69C"=>"\u044A", "\uA69D"=>"\u044C", "\uA770"=>"\uA76F", "\uA7F8"=>"\u0126", "\uA7F9"=>"\u0153", "\uAB5C"=>"\uA727", "\uAB5D"=>"\uAB37", "\uAB5E"=>"\u026B", + "\uAB5F"=>"\uAB52", "\uFB00"=>"ff", "\uFB01"=>"fi", "\uFB02"=>"fl", "\uFB03"=>"ffi", "\uFB04"=>"ffl", "\uFB05"=>"st", "\uFB06"=>"st", + "\uFB13"=>"\u0574\u0576", "\uFB14"=>"\u0574\u0565", "\uFB15"=>"\u0574\u056B", "\uFB16"=>"\u057E\u0576", "\uFB17"=>"\u0574\u056D", "\uFB20"=>"\u05E2", "\uFB21"=>"\u05D0", "\uFB22"=>"\u05D3", + "\uFB23"=>"\u05D4", "\uFB24"=>"\u05DB", "\uFB25"=>"\u05DC", "\uFB26"=>"\u05DD", "\uFB27"=>"\u05E8", "\uFB28"=>"\u05EA", "\uFB29"=>"+", "\uFB4F"=>"\u05D0\u05DC", + "\uFB50"=>"\u0671", "\uFB51"=>"\u0671", "\uFB52"=>"\u067B", "\uFB53"=>"\u067B", "\uFB54"=>"\u067B", "\uFB55"=>"\u067B", "\uFB56"=>"\u067E", "\uFB57"=>"\u067E", + "\uFB58"=>"\u067E", "\uFB59"=>"\u067E", "\uFB5A"=>"\u0680", "\uFB5B"=>"\u0680", "\uFB5C"=>"\u0680", "\uFB5D"=>"\u0680", "\uFB5E"=>"\u067A", "\uFB5F"=>"\u067A", + "\uFB60"=>"\u067A", "\uFB61"=>"\u067A", "\uFB62"=>"\u067F", "\uFB63"=>"\u067F", "\uFB64"=>"\u067F", "\uFB65"=>"\u067F", "\uFB66"=>"\u0679", "\uFB67"=>"\u0679", + "\uFB68"=>"\u0679", "\uFB69"=>"\u0679", "\uFB6A"=>"\u06A4", "\uFB6B"=>"\u06A4", "\uFB6C"=>"\u06A4", "\uFB6D"=>"\u06A4", "\uFB6E"=>"\u06A6", "\uFB6F"=>"\u06A6", + "\uFB70"=>"\u06A6", "\uFB71"=>"\u06A6", "\uFB72"=>"\u0684", "\uFB73"=>"\u0684", "\uFB74"=>"\u0684", "\uFB75"=>"\u0684", "\uFB76"=>"\u0683", "\uFB77"=>"\u0683", + "\uFB78"=>"\u0683", "\uFB79"=>"\u0683", "\uFB7A"=>"\u0686", "\uFB7B"=>"\u0686", "\uFB7C"=>"\u0686", "\uFB7D"=>"\u0686", "\uFB7E"=>"\u0687", "\uFB7F"=>"\u0687", + "\uFB80"=>"\u0687", "\uFB81"=>"\u0687", "\uFB82"=>"\u068D", "\uFB83"=>"\u068D", "\uFB84"=>"\u068C", "\uFB85"=>"\u068C", "\uFB86"=>"\u068E", "\uFB87"=>"\u068E", + "\uFB88"=>"\u0688", "\uFB89"=>"\u0688", "\uFB8A"=>"\u0698", "\uFB8B"=>"\u0698", "\uFB8C"=>"\u0691", "\uFB8D"=>"\u0691", "\uFB8E"=>"\u06A9", "\uFB8F"=>"\u06A9", + "\uFB90"=>"\u06A9", "\uFB91"=>"\u06A9", "\uFB92"=>"\u06AF", "\uFB93"=>"\u06AF", "\uFB94"=>"\u06AF", "\uFB95"=>"\u06AF", "\uFB96"=>"\u06B3", "\uFB97"=>"\u06B3", + "\uFB98"=>"\u06B3", "\uFB99"=>"\u06B3", "\uFB9A"=>"\u06B1", "\uFB9B"=>"\u06B1", "\uFB9C"=>"\u06B1", "\uFB9D"=>"\u06B1", "\uFB9E"=>"\u06BA", "\uFB9F"=>"\u06BA", + "\uFBA0"=>"\u06BB", "\uFBA1"=>"\u06BB", "\uFBA2"=>"\u06BB", "\uFBA3"=>"\u06BB", "\uFBA4"=>"\u06C0", "\uFBA5"=>"\u06C0", "\uFBA6"=>"\u06C1", "\uFBA7"=>"\u06C1", + "\uFBA8"=>"\u06C1", "\uFBA9"=>"\u06C1", "\uFBAA"=>"\u06BE", "\uFBAB"=>"\u06BE", "\uFBAC"=>"\u06BE", "\uFBAD"=>"\u06BE", "\uFBAE"=>"\u06D2", "\uFBAF"=>"\u06D2", + "\uFBB0"=>"\u06D3", "\uFBB1"=>"\u06D3", "\uFBD3"=>"\u06AD", "\uFBD4"=>"\u06AD", "\uFBD5"=>"\u06AD", "\uFBD6"=>"\u06AD", "\uFBD7"=>"\u06C7", "\uFBD8"=>"\u06C7", + "\uFBD9"=>"\u06C6", "\uFBDA"=>"\u06C6", "\uFBDB"=>"\u06C8", "\uFBDC"=>"\u06C8", "\uFBDD"=>"\u06C7\u0674", "\uFBDE"=>"\u06CB", "\uFBDF"=>"\u06CB", "\uFBE0"=>"\u06C5", + "\uFBE1"=>"\u06C5", "\uFBE2"=>"\u06C9", "\uFBE3"=>"\u06C9", "\uFBE4"=>"\u06D0", "\uFBE5"=>"\u06D0", "\uFBE6"=>"\u06D0", "\uFBE7"=>"\u06D0", "\uFBE8"=>"\u0649", + "\uFBE9"=>"\u0649", "\uFBEA"=>"\u0626\u0627", "\uFBEB"=>"\u0626\u0627", "\uFBEC"=>"\u0626\u06D5", "\uFBED"=>"\u0626\u06D5", "\uFBEE"=>"\u0626\u0648", "\uFBEF"=>"\u0626\u0648", "\uFBF0"=>"\u0626\u06C7", + "\uFBF1"=>"\u0626\u06C7", "\uFBF2"=>"\u0626\u06C6", "\uFBF3"=>"\u0626\u06C6", "\uFBF4"=>"\u0626\u06C8", "\uFBF5"=>"\u0626\u06C8", "\uFBF6"=>"\u0626\u06D0", "\uFBF7"=>"\u0626\u06D0", "\uFBF8"=>"\u0626\u06D0", + "\uFBF9"=>"\u0626\u0649", "\uFBFA"=>"\u0626\u0649", "\uFBFB"=>"\u0626\u0649", "\uFBFC"=>"\u06CC", "\uFBFD"=>"\u06CC", "\uFBFE"=>"\u06CC", "\uFBFF"=>"\u06CC", "\uFC00"=>"\u0626\u062C", + "\uFC01"=>"\u0626\u062D", "\uFC02"=>"\u0626\u0645", "\uFC03"=>"\u0626\u0649", "\uFC04"=>"\u0626\u064A", "\uFC05"=>"\u0628\u062C", "\uFC06"=>"\u0628\u062D", "\uFC07"=>"\u0628\u062E", "\uFC08"=>"\u0628\u0645", + "\uFC09"=>"\u0628\u0649", "\uFC0A"=>"\u0628\u064A", "\uFC0B"=>"\u062A\u062C", "\uFC0C"=>"\u062A\u062D", "\uFC0D"=>"\u062A\u062E", "\uFC0E"=>"\u062A\u0645", "\uFC0F"=>"\u062A\u0649", "\uFC10"=>"\u062A\u064A", + "\uFC11"=>"\u062B\u062C", "\uFC12"=>"\u062B\u0645", "\uFC13"=>"\u062B\u0649", "\uFC14"=>"\u062B\u064A", "\uFC15"=>"\u062C\u062D", "\uFC16"=>"\u062C\u0645", "\uFC17"=>"\u062D\u062C", "\uFC18"=>"\u062D\u0645", + "\uFC19"=>"\u062E\u062C", "\uFC1A"=>"\u062E\u062D", "\uFC1B"=>"\u062E\u0645", "\uFC1C"=>"\u0633\u062C", "\uFC1D"=>"\u0633\u062D", "\uFC1E"=>"\u0633\u062E", "\uFC1F"=>"\u0633\u0645", "\uFC20"=>"\u0635\u062D", + "\uFC21"=>"\u0635\u0645", "\uFC22"=>"\u0636\u062C", "\uFC23"=>"\u0636\u062D", "\uFC24"=>"\u0636\u062E", "\uFC25"=>"\u0636\u0645", "\uFC26"=>"\u0637\u062D", "\uFC27"=>"\u0637\u0645", "\uFC28"=>"\u0638\u0645", + "\uFC29"=>"\u0639\u062C", "\uFC2A"=>"\u0639\u0645", "\uFC2B"=>"\u063A\u062C", "\uFC2C"=>"\u063A\u0645", "\uFC2D"=>"\u0641\u062C", "\uFC2E"=>"\u0641\u062D", "\uFC2F"=>"\u0641\u062E", "\uFC30"=>"\u0641\u0645", + "\uFC31"=>"\u0641\u0649", "\uFC32"=>"\u0641\u064A", "\uFC33"=>"\u0642\u062D", "\uFC34"=>"\u0642\u0645", "\uFC35"=>"\u0642\u0649", "\uFC36"=>"\u0642\u064A", "\uFC37"=>"\u0643\u0627", "\uFC38"=>"\u0643\u062C", + "\uFC39"=>"\u0643\u062D", "\uFC3A"=>"\u0643\u062E", "\uFC3B"=>"\u0643\u0644", "\uFC3C"=>"\u0643\u0645", "\uFC3D"=>"\u0643\u0649", "\uFC3E"=>"\u0643\u064A", "\uFC3F"=>"\u0644\u062C", "\uFC40"=>"\u0644\u062D", + "\uFC41"=>"\u0644\u062E", "\uFC42"=>"\u0644\u0645", "\uFC43"=>"\u0644\u0649", "\uFC44"=>"\u0644\u064A", "\uFC45"=>"\u0645\u062C", "\uFC46"=>"\u0645\u062D", "\uFC47"=>"\u0645\u062E", "\uFC48"=>"\u0645\u0645", + "\uFC49"=>"\u0645\u0649", "\uFC4A"=>"\u0645\u064A", "\uFC4B"=>"\u0646\u062C", "\uFC4C"=>"\u0646\u062D", "\uFC4D"=>"\u0646\u062E", "\uFC4E"=>"\u0646\u0645", "\uFC4F"=>"\u0646\u0649", "\uFC50"=>"\u0646\u064A", + "\uFC51"=>"\u0647\u062C", "\uFC52"=>"\u0647\u0645", "\uFC53"=>"\u0647\u0649", "\uFC54"=>"\u0647\u064A", "\uFC55"=>"\u064A\u062C", "\uFC56"=>"\u064A\u062D", "\uFC57"=>"\u064A\u062E", "\uFC58"=>"\u064A\u0645", + "\uFC59"=>"\u064A\u0649", "\uFC5A"=>"\u064A\u064A", "\uFC5B"=>"\u0630\u0670", "\uFC5C"=>"\u0631\u0670", "\uFC5D"=>"\u0649\u0670", "\uFC5E"=>" \u064C\u0651", "\uFC5F"=>" \u064D\u0651", "\uFC60"=>" \u064E\u0651", + "\uFC61"=>" \u064F\u0651", "\uFC62"=>" \u0650\u0651", "\uFC63"=>" \u0651\u0670", "\uFC64"=>"\u0626\u0631", "\uFC65"=>"\u0626\u0632", "\uFC66"=>"\u0626\u0645", "\uFC67"=>"\u0626\u0646", "\uFC68"=>"\u0626\u0649", + "\uFC69"=>"\u0626\u064A", "\uFC6A"=>"\u0628\u0631", "\uFC6B"=>"\u0628\u0632", "\uFC6C"=>"\u0628\u0645", "\uFC6D"=>"\u0628\u0646", "\uFC6E"=>"\u0628\u0649", "\uFC6F"=>"\u0628\u064A", "\uFC70"=>"\u062A\u0631", + "\uFC71"=>"\u062A\u0632", "\uFC72"=>"\u062A\u0645", "\uFC73"=>"\u062A\u0646", "\uFC74"=>"\u062A\u0649", "\uFC75"=>"\u062A\u064A", "\uFC76"=>"\u062B\u0631", "\uFC77"=>"\u062B\u0632", "\uFC78"=>"\u062B\u0645", + "\uFC79"=>"\u062B\u0646", "\uFC7A"=>"\u062B\u0649", "\uFC7B"=>"\u062B\u064A", "\uFC7C"=>"\u0641\u0649", "\uFC7D"=>"\u0641\u064A", "\uFC7E"=>"\u0642\u0649", "\uFC7F"=>"\u0642\u064A", "\uFC80"=>"\u0643\u0627", + "\uFC81"=>"\u0643\u0644", "\uFC82"=>"\u0643\u0645", "\uFC83"=>"\u0643\u0649", "\uFC84"=>"\u0643\u064A", "\uFC85"=>"\u0644\u0645", "\uFC86"=>"\u0644\u0649", "\uFC87"=>"\u0644\u064A", "\uFC88"=>"\u0645\u0627", + "\uFC89"=>"\u0645\u0645", "\uFC8A"=>"\u0646\u0631", "\uFC8B"=>"\u0646\u0632", "\uFC8C"=>"\u0646\u0645", "\uFC8D"=>"\u0646\u0646", "\uFC8E"=>"\u0646\u0649", "\uFC8F"=>"\u0646\u064A", "\uFC90"=>"\u0649\u0670", + "\uFC91"=>"\u064A\u0631", "\uFC92"=>"\u064A\u0632", "\uFC93"=>"\u064A\u0645", "\uFC94"=>"\u064A\u0646", "\uFC95"=>"\u064A\u0649", "\uFC96"=>"\u064A\u064A", "\uFC97"=>"\u0626\u062C", "\uFC98"=>"\u0626\u062D", + "\uFC99"=>"\u0626\u062E", "\uFC9A"=>"\u0626\u0645", "\uFC9B"=>"\u0626\u0647", "\uFC9C"=>"\u0628\u062C", "\uFC9D"=>"\u0628\u062D", "\uFC9E"=>"\u0628\u062E", "\uFC9F"=>"\u0628\u0645", "\uFCA0"=>"\u0628\u0647", + "\uFCA1"=>"\u062A\u062C", "\uFCA2"=>"\u062A\u062D", "\uFCA3"=>"\u062A\u062E", "\uFCA4"=>"\u062A\u0645", "\uFCA5"=>"\u062A\u0647", "\uFCA6"=>"\u062B\u0645", "\uFCA7"=>"\u062C\u062D", "\uFCA8"=>"\u062C\u0645", + "\uFCA9"=>"\u062D\u062C", "\uFCAA"=>"\u062D\u0645", "\uFCAB"=>"\u062E\u062C", "\uFCAC"=>"\u062E\u0645", "\uFCAD"=>"\u0633\u062C", "\uFCAE"=>"\u0633\u062D", "\uFCAF"=>"\u0633\u062E", "\uFCB0"=>"\u0633\u0645", + "\uFCB1"=>"\u0635\u062D", "\uFCB2"=>"\u0635\u062E", "\uFCB3"=>"\u0635\u0645", "\uFCB4"=>"\u0636\u062C", "\uFCB5"=>"\u0636\u062D", "\uFCB6"=>"\u0636\u062E", "\uFCB7"=>"\u0636\u0645", "\uFCB8"=>"\u0637\u062D", + "\uFCB9"=>"\u0638\u0645", "\uFCBA"=>"\u0639\u062C", "\uFCBB"=>"\u0639\u0645", "\uFCBC"=>"\u063A\u062C", "\uFCBD"=>"\u063A\u0645", "\uFCBE"=>"\u0641\u062C", "\uFCBF"=>"\u0641\u062D", "\uFCC0"=>"\u0641\u062E", + "\uFCC1"=>"\u0641\u0645", "\uFCC2"=>"\u0642\u062D", "\uFCC3"=>"\u0642\u0645", "\uFCC4"=>"\u0643\u062C", "\uFCC5"=>"\u0643\u062D", "\uFCC6"=>"\u0643\u062E", "\uFCC7"=>"\u0643\u0644", "\uFCC8"=>"\u0643\u0645", + "\uFCC9"=>"\u0644\u062C", "\uFCCA"=>"\u0644\u062D", "\uFCCB"=>"\u0644\u062E", "\uFCCC"=>"\u0644\u0645", "\uFCCD"=>"\u0644\u0647", "\uFCCE"=>"\u0645\u062C", "\uFCCF"=>"\u0645\u062D", "\uFCD0"=>"\u0645\u062E", + "\uFCD1"=>"\u0645\u0645", "\uFCD2"=>"\u0646\u062C", "\uFCD3"=>"\u0646\u062D", "\uFCD4"=>"\u0646\u062E", "\uFCD5"=>"\u0646\u0645", "\uFCD6"=>"\u0646\u0647", "\uFCD7"=>"\u0647\u062C", "\uFCD8"=>"\u0647\u0645", + "\uFCD9"=>"\u0647\u0670", "\uFCDA"=>"\u064A\u062C", "\uFCDB"=>"\u064A\u062D", "\uFCDC"=>"\u064A\u062E", "\uFCDD"=>"\u064A\u0645", "\uFCDE"=>"\u064A\u0647", "\uFCDF"=>"\u0626\u0645", "\uFCE0"=>"\u0626\u0647", + "\uFCE1"=>"\u0628\u0645", "\uFCE2"=>"\u0628\u0647", "\uFCE3"=>"\u062A\u0645", "\uFCE4"=>"\u062A\u0647", "\uFCE5"=>"\u062B\u0645", "\uFCE6"=>"\u062B\u0647", "\uFCE7"=>"\u0633\u0645", "\uFCE8"=>"\u0633\u0647", + "\uFCE9"=>"\u0634\u0645", "\uFCEA"=>"\u0634\u0647", "\uFCEB"=>"\u0643\u0644", "\uFCEC"=>"\u0643\u0645", "\uFCED"=>"\u0644\u0645", "\uFCEE"=>"\u0646\u0645", "\uFCEF"=>"\u0646\u0647", "\uFCF0"=>"\u064A\u0645", + "\uFCF1"=>"\u064A\u0647", "\uFCF2"=>"\u0640\u064E\u0651", "\uFCF3"=>"\u0640\u064F\u0651", "\uFCF4"=>"\u0640\u0650\u0651", "\uFCF5"=>"\u0637\u0649", "\uFCF6"=>"\u0637\u064A", "\uFCF7"=>"\u0639\u0649", "\uFCF8"=>"\u0639\u064A", + "\uFCF9"=>"\u063A\u0649", "\uFCFA"=>"\u063A\u064A", "\uFCFB"=>"\u0633\u0649", "\uFCFC"=>"\u0633\u064A", "\uFCFD"=>"\u0634\u0649", "\uFCFE"=>"\u0634\u064A", "\uFCFF"=>"\u062D\u0649", "\uFD00"=>"\u062D\u064A", + "\uFD01"=>"\u062C\u0649", "\uFD02"=>"\u062C\u064A", "\uFD03"=>"\u062E\u0649", "\uFD04"=>"\u062E\u064A", "\uFD05"=>"\u0635\u0649", "\uFD06"=>"\u0635\u064A", "\uFD07"=>"\u0636\u0649", "\uFD08"=>"\u0636\u064A", + "\uFD09"=>"\u0634\u062C", "\uFD0A"=>"\u0634\u062D", "\uFD0B"=>"\u0634\u062E", "\uFD0C"=>"\u0634\u0645", "\uFD0D"=>"\u0634\u0631", "\uFD0E"=>"\u0633\u0631", "\uFD0F"=>"\u0635\u0631", "\uFD10"=>"\u0636\u0631", + "\uFD11"=>"\u0637\u0649", "\uFD12"=>"\u0637\u064A", "\uFD13"=>"\u0639\u0649", "\uFD14"=>"\u0639\u064A", "\uFD15"=>"\u063A\u0649", "\uFD16"=>"\u063A\u064A", "\uFD17"=>"\u0633\u0649", "\uFD18"=>"\u0633\u064A", + "\uFD19"=>"\u0634\u0649", "\uFD1A"=>"\u0634\u064A", "\uFD1B"=>"\u062D\u0649", "\uFD1C"=>"\u062D\u064A", "\uFD1D"=>"\u062C\u0649", "\uFD1E"=>"\u062C\u064A", "\uFD1F"=>"\u062E\u0649", "\uFD20"=>"\u062E\u064A", + "\uFD21"=>"\u0635\u0649", "\uFD22"=>"\u0635\u064A", "\uFD23"=>"\u0636\u0649", "\uFD24"=>"\u0636\u064A", "\uFD25"=>"\u0634\u062C", "\uFD26"=>"\u0634\u062D", "\uFD27"=>"\u0634\u062E", "\uFD28"=>"\u0634\u0645", + "\uFD29"=>"\u0634\u0631", "\uFD2A"=>"\u0633\u0631", "\uFD2B"=>"\u0635\u0631", "\uFD2C"=>"\u0636\u0631", "\uFD2D"=>"\u0634\u062C", "\uFD2E"=>"\u0634\u062D", "\uFD2F"=>"\u0634\u062E", "\uFD30"=>"\u0634\u0645", + "\uFD31"=>"\u0633\u0647", "\uFD32"=>"\u0634\u0647", "\uFD33"=>"\u0637\u0645", "\uFD34"=>"\u0633\u062C", "\uFD35"=>"\u0633\u062D", "\uFD36"=>"\u0633\u062E", "\uFD37"=>"\u0634\u062C", "\uFD38"=>"\u0634\u062D", + "\uFD39"=>"\u0634\u062E", "\uFD3A"=>"\u0637\u0645", "\uFD3B"=>"\u0638\u0645", "\uFD3C"=>"\u0627\u064B", "\uFD3D"=>"\u0627\u064B", "\uFD50"=>"\u062A\u062C\u0645", "\uFD51"=>"\u062A\u062D\u062C", "\uFD52"=>"\u062A\u062D\u062C", + "\uFD53"=>"\u062A\u062D\u0645", "\uFD54"=>"\u062A\u062E\u0645", "\uFD55"=>"\u062A\u0645\u062C", "\uFD56"=>"\u062A\u0645\u062D", "\uFD57"=>"\u062A\u0645\u062E", "\uFD58"=>"\u062C\u0645\u062D", "\uFD59"=>"\u062C\u0645\u062D", "\uFD5A"=>"\u062D\u0645\u064A", + "\uFD5B"=>"\u062D\u0645\u0649", "\uFD5C"=>"\u0633\u062D\u062C", "\uFD5D"=>"\u0633\u062C\u062D", "\uFD5E"=>"\u0633\u062C\u0649", "\uFD5F"=>"\u0633\u0645\u062D", "\uFD60"=>"\u0633\u0645\u062D", "\uFD61"=>"\u0633\u0645\u062C", "\uFD62"=>"\u0633\u0645\u0645", + "\uFD63"=>"\u0633\u0645\u0645", "\uFD64"=>"\u0635\u062D\u062D", "\uFD65"=>"\u0635\u062D\u062D", "\uFD66"=>"\u0635\u0645\u0645", "\uFD67"=>"\u0634\u062D\u0645", "\uFD68"=>"\u0634\u062D\u0645", "\uFD69"=>"\u0634\u062C\u064A", "\uFD6A"=>"\u0634\u0645\u062E", + "\uFD6B"=>"\u0634\u0645\u062E", "\uFD6C"=>"\u0634\u0645\u0645", "\uFD6D"=>"\u0634\u0645\u0645", "\uFD6E"=>"\u0636\u062D\u0649", "\uFD6F"=>"\u0636\u062E\u0645", "\uFD70"=>"\u0636\u062E\u0645", "\uFD71"=>"\u0637\u0645\u062D", "\uFD72"=>"\u0637\u0645\u062D", + "\uFD73"=>"\u0637\u0645\u0645", "\uFD74"=>"\u0637\u0645\u064A", "\uFD75"=>"\u0639\u062C\u0645", "\uFD76"=>"\u0639\u0645\u0645", "\uFD77"=>"\u0639\u0645\u0645", "\uFD78"=>"\u0639\u0645\u0649", "\uFD79"=>"\u063A\u0645\u0645", "\uFD7A"=>"\u063A\u0645\u064A", + "\uFD7B"=>"\u063A\u0645\u0649", "\uFD7C"=>"\u0641\u062E\u0645", "\uFD7D"=>"\u0641\u062E\u0645", "\uFD7E"=>"\u0642\u0645\u062D", "\uFD7F"=>"\u0642\u0645\u0645", "\uFD80"=>"\u0644\u062D\u0645", "\uFD81"=>"\u0644\u062D\u064A", "\uFD82"=>"\u0644\u062D\u0649", + "\uFD83"=>"\u0644\u062C\u062C", "\uFD84"=>"\u0644\u062C\u062C", "\uFD85"=>"\u0644\u062E\u0645", "\uFD86"=>"\u0644\u062E\u0645", "\uFD87"=>"\u0644\u0645\u062D", "\uFD88"=>"\u0644\u0645\u062D", "\uFD89"=>"\u0645\u062D\u062C", "\uFD8A"=>"\u0645\u062D\u0645", + "\uFD8B"=>"\u0645\u062D\u064A", "\uFD8C"=>"\u0645\u062C\u062D", "\uFD8D"=>"\u0645\u062C\u0645", "\uFD8E"=>"\u0645\u062E\u062C", "\uFD8F"=>"\u0645\u062E\u0645", "\uFD92"=>"\u0645\u062C\u062E", "\uFD93"=>"\u0647\u0645\u062C", "\uFD94"=>"\u0647\u0645\u0645", + "\uFD95"=>"\u0646\u062D\u0645", "\uFD96"=>"\u0646\u062D\u0649", "\uFD97"=>"\u0646\u062C\u0645", "\uFD98"=>"\u0646\u062C\u0645", "\uFD99"=>"\u0646\u062C\u0649", "\uFD9A"=>"\u0646\u0645\u064A", "\uFD9B"=>"\u0646\u0645\u0649", "\uFD9C"=>"\u064A\u0645\u0645", + "\uFD9D"=>"\u064A\u0645\u0645", "\uFD9E"=>"\u0628\u062E\u064A", "\uFD9F"=>"\u062A\u062C\u064A", "\uFDA0"=>"\u062A\u062C\u0649", "\uFDA1"=>"\u062A\u062E\u064A", "\uFDA2"=>"\u062A\u062E\u0649", "\uFDA3"=>"\u062A\u0645\u064A", "\uFDA4"=>"\u062A\u0645\u0649", + "\uFDA5"=>"\u062C\u0645\u064A", "\uFDA6"=>"\u062C\u062D\u0649", "\uFDA7"=>"\u062C\u0645\u0649", "\uFDA8"=>"\u0633\u062E\u0649", "\uFDA9"=>"\u0635\u062D\u064A", "\uFDAA"=>"\u0634\u062D\u064A", "\uFDAB"=>"\u0636\u062D\u064A", "\uFDAC"=>"\u0644\u062C\u064A", + "\uFDAD"=>"\u0644\u0645\u064A", "\uFDAE"=>"\u064A\u062D\u064A", "\uFDAF"=>"\u064A\u062C\u064A", "\uFDB0"=>"\u064A\u0645\u064A", "\uFDB1"=>"\u0645\u0645\u064A", "\uFDB2"=>"\u0642\u0645\u064A", "\uFDB3"=>"\u0646\u062D\u064A", "\uFDB4"=>"\u0642\u0645\u062D", + "\uFDB5"=>"\u0644\u062D\u0645", "\uFDB6"=>"\u0639\u0645\u064A", "\uFDB7"=>"\u0643\u0645\u064A", "\uFDB8"=>"\u0646\u062C\u062D", "\uFDB9"=>"\u0645\u062E\u064A", "\uFDBA"=>"\u0644\u062C\u0645", "\uFDBB"=>"\u0643\u0645\u0645", "\uFDBC"=>"\u0644\u062C\u0645", + "\uFDBD"=>"\u0646\u062C\u062D", "\uFDBE"=>"\u062C\u062D\u064A", "\uFDBF"=>"\u062D\u062C\u064A", "\uFDC0"=>"\u0645\u062C\u064A", "\uFDC1"=>"\u0641\u0645\u064A", "\uFDC2"=>"\u0628\u062D\u064A", "\uFDC3"=>"\u0643\u0645\u0645", "\uFDC4"=>"\u0639\u062C\u0645", + "\uFDC5"=>"\u0635\u0645\u0645", "\uFDC6"=>"\u0633\u062E\u064A", "\uFDC7"=>"\u0646\u062C\u064A", "\uFDF0"=>"\u0635\u0644\u06D2", "\uFDF1"=>"\u0642\u0644\u06D2", "\uFDF2"=>"\u0627\u0644\u0644\u0647", "\uFDF3"=>"\u0627\u0643\u0628\u0631", "\uFDF4"=>"\u0645\u062D\u0645\u062F", + "\uFDF5"=>"\u0635\u0644\u0639\u0645", "\uFDF6"=>"\u0631\u0633\u0648\u0644", "\uFDF7"=>"\u0639\u0644\u064A\u0647", "\uFDF8"=>"\u0648\u0633\u0644\u0645", "\uFDF9"=>"\u0635\u0644\u0649", "\uFDFA"=>"\u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645", "\uFDFB"=>"\u062C\u0644 \u062C\u0644\u0627\u0644\u0647", "\uFDFC"=>"\u0631\u06CC\u0627\u0644", + "\uFE10"=>",", "\uFE11"=>"\u3001", "\uFE12"=>"\u3002", "\uFE13"=>":", "\uFE14"=>";", "\uFE15"=>"!", "\uFE16"=>"?", "\uFE17"=>"\u3016", + "\uFE18"=>"\u3017", "\uFE19"=>"...", "\uFE30"=>"..", "\uFE31"=>"\u2014", "\uFE32"=>"\u2013", "\uFE33"=>"_", "\uFE34"=>"_", "\uFE35"=>"(", + "\uFE36"=>")", "\uFE37"=>"{", "\uFE38"=>"}", "\uFE39"=>"\u3014", "\uFE3A"=>"\u3015", "\uFE3B"=>"\u3010", "\uFE3C"=>"\u3011", "\uFE3D"=>"\u300A", + "\uFE3E"=>"\u300B", "\uFE3F"=>"\u3008", "\uFE40"=>"\u3009", "\uFE41"=>"\u300C", "\uFE42"=>"\u300D", "\uFE43"=>"\u300E", "\uFE44"=>"\u300F", "\uFE47"=>"[", + "\uFE48"=>"]", "\uFE49"=>" \u0305", "\uFE4A"=>" \u0305", "\uFE4B"=>" \u0305", "\uFE4C"=>" \u0305", "\uFE4D"=>"_", "\uFE4E"=>"_", "\uFE4F"=>"_", + "\uFE50"=>",", "\uFE51"=>"\u3001", "\uFE52"=>".", "\uFE54"=>";", "\uFE55"=>":", "\uFE56"=>"?", "\uFE57"=>"!", "\uFE58"=>"\u2014", + "\uFE59"=>"(", "\uFE5A"=>")", "\uFE5B"=>"{", "\uFE5C"=>"}", "\uFE5D"=>"\u3014", "\uFE5E"=>"\u3015", "\uFE5F"=>"#", "\uFE60"=>"&", + "\uFE61"=>"*", "\uFE62"=>"+", "\uFE63"=>"-", "\uFE64"=>"<", "\uFE65"=>">", "\uFE66"=>"=", "\uFE68"=>"\\", "\uFE69"=>"$", + "\uFE6A"=>"%", "\uFE6B"=>"@", "\uFE70"=>" \u064B", "\uFE71"=>"\u0640\u064B", "\uFE72"=>" \u064C", "\uFE74"=>" \u064D", "\uFE76"=>" \u064E", "\uFE77"=>"\u0640\u064E", + "\uFE78"=>" \u064F", "\uFE79"=>"\u0640\u064F", "\uFE7A"=>" \u0650", "\uFE7B"=>"\u0640\u0650", "\uFE7C"=>" \u0651", "\uFE7D"=>"\u0640\u0651", "\uFE7E"=>" \u0652", "\uFE7F"=>"\u0640\u0652", + "\uFE80"=>"\u0621", "\uFE81"=>"\u0622", "\uFE82"=>"\u0622", "\uFE83"=>"\u0623", "\uFE84"=>"\u0623", "\uFE85"=>"\u0624", "\uFE86"=>"\u0624", "\uFE87"=>"\u0625", + "\uFE88"=>"\u0625", "\uFE89"=>"\u0626", "\uFE8A"=>"\u0626", "\uFE8B"=>"\u0626", "\uFE8C"=>"\u0626", "\uFE8D"=>"\u0627", "\uFE8E"=>"\u0627", "\uFE8F"=>"\u0628", + "\uFE90"=>"\u0628", "\uFE91"=>"\u0628", "\uFE92"=>"\u0628", "\uFE93"=>"\u0629", "\uFE94"=>"\u0629", "\uFE95"=>"\u062A", "\uFE96"=>"\u062A", "\uFE97"=>"\u062A", + "\uFE98"=>"\u062A", "\uFE99"=>"\u062B", "\uFE9A"=>"\u062B", "\uFE9B"=>"\u062B", "\uFE9C"=>"\u062B", "\uFE9D"=>"\u062C", "\uFE9E"=>"\u062C", "\uFE9F"=>"\u062C", + "\uFEA0"=>"\u062C", "\uFEA1"=>"\u062D", "\uFEA2"=>"\u062D", "\uFEA3"=>"\u062D", "\uFEA4"=>"\u062D", "\uFEA5"=>"\u062E", "\uFEA6"=>"\u062E", "\uFEA7"=>"\u062E", + "\uFEA8"=>"\u062E", "\uFEA9"=>"\u062F", "\uFEAA"=>"\u062F", "\uFEAB"=>"\u0630", "\uFEAC"=>"\u0630", "\uFEAD"=>"\u0631", "\uFEAE"=>"\u0631", "\uFEAF"=>"\u0632", + "\uFEB0"=>"\u0632", "\uFEB1"=>"\u0633", "\uFEB2"=>"\u0633", "\uFEB3"=>"\u0633", "\uFEB4"=>"\u0633", "\uFEB5"=>"\u0634", "\uFEB6"=>"\u0634", "\uFEB7"=>"\u0634", + "\uFEB8"=>"\u0634", "\uFEB9"=>"\u0635", "\uFEBA"=>"\u0635", "\uFEBB"=>"\u0635", "\uFEBC"=>"\u0635", "\uFEBD"=>"\u0636", "\uFEBE"=>"\u0636", "\uFEBF"=>"\u0636", + "\uFEC0"=>"\u0636", "\uFEC1"=>"\u0637", "\uFEC2"=>"\u0637", "\uFEC3"=>"\u0637", "\uFEC4"=>"\u0637", "\uFEC5"=>"\u0638", "\uFEC6"=>"\u0638", "\uFEC7"=>"\u0638", + "\uFEC8"=>"\u0638", "\uFEC9"=>"\u0639", "\uFECA"=>"\u0639", "\uFECB"=>"\u0639", "\uFECC"=>"\u0639", "\uFECD"=>"\u063A", "\uFECE"=>"\u063A", "\uFECF"=>"\u063A", + "\uFED0"=>"\u063A", "\uFED1"=>"\u0641", "\uFED2"=>"\u0641", "\uFED3"=>"\u0641", "\uFED4"=>"\u0641", "\uFED5"=>"\u0642", "\uFED6"=>"\u0642", "\uFED7"=>"\u0642", + "\uFED8"=>"\u0642", "\uFED9"=>"\u0643", "\uFEDA"=>"\u0643", "\uFEDB"=>"\u0643", "\uFEDC"=>"\u0643", "\uFEDD"=>"\u0644", "\uFEDE"=>"\u0644", "\uFEDF"=>"\u0644", + "\uFEE0"=>"\u0644", "\uFEE1"=>"\u0645", "\uFEE2"=>"\u0645", "\uFEE3"=>"\u0645", "\uFEE4"=>"\u0645", "\uFEE5"=>"\u0646", "\uFEE6"=>"\u0646", "\uFEE7"=>"\u0646", + "\uFEE8"=>"\u0646", "\uFEE9"=>"\u0647", "\uFEEA"=>"\u0647", "\uFEEB"=>"\u0647", "\uFEEC"=>"\u0647", "\uFEED"=>"\u0648", "\uFEEE"=>"\u0648", "\uFEEF"=>"\u0649", + "\uFEF0"=>"\u0649", "\uFEF1"=>"\u064A", "\uFEF2"=>"\u064A", "\uFEF3"=>"\u064A", "\uFEF4"=>"\u064A", "\uFEF5"=>"\u0644\u0622", "\uFEF6"=>"\u0644\u0622", "\uFEF7"=>"\u0644\u0623", + "\uFEF8"=>"\u0644\u0623", "\uFEF9"=>"\u0644\u0625", "\uFEFA"=>"\u0644\u0625", "\uFEFB"=>"\u0644\u0627", "\uFEFC"=>"\u0644\u0627", "\uFF01"=>"!", "\uFF02"=>"\"", "\uFF03"=>"#", + "\uFF04"=>"$", "\uFF05"=>"%", "\uFF06"=>"&", "\uFF07"=>"'", "\uFF08"=>"(", "\uFF09"=>")", "\uFF0A"=>"*", "\uFF0B"=>"+", + "\uFF0C"=>",", "\uFF0D"=>"-", "\uFF0E"=>".", "\uFF0F"=>"/", "\uFF10"=>"0", "\uFF11"=>"1", "\uFF12"=>"2", "\uFF13"=>"3", + "\uFF14"=>"4", "\uFF15"=>"5", "\uFF16"=>"6", "\uFF17"=>"7", "\uFF18"=>"8", "\uFF19"=>"9", "\uFF1A"=>":", "\uFF1B"=>";", + "\uFF1C"=>"<", "\uFF1D"=>"=", "\uFF1E"=>">", "\uFF1F"=>"?", "\uFF20"=>"@", "\uFF21"=>"A", "\uFF22"=>"B", "\uFF23"=>"C", + "\uFF24"=>"D", "\uFF25"=>"E", "\uFF26"=>"F", "\uFF27"=>"G", "\uFF28"=>"H", "\uFF29"=>"I", "\uFF2A"=>"J", "\uFF2B"=>"K", + "\uFF2C"=>"L", "\uFF2D"=>"M", "\uFF2E"=>"N", "\uFF2F"=>"O", "\uFF30"=>"P", "\uFF31"=>"Q", "\uFF32"=>"R", "\uFF33"=>"S", + "\uFF34"=>"T", "\uFF35"=>"U", "\uFF36"=>"V", "\uFF37"=>"W", "\uFF38"=>"X", "\uFF39"=>"Y", "\uFF3A"=>"Z", "\uFF3B"=>"[", + "\uFF3C"=>"\\", "\uFF3D"=>"]", "\uFF3E"=>"^", "\uFF3F"=>"_", "\uFF40"=>"`", "\uFF41"=>"a", "\uFF42"=>"b", "\uFF43"=>"c", + "\uFF44"=>"d", "\uFF45"=>"e", "\uFF46"=>"f", "\uFF47"=>"g", "\uFF48"=>"h", "\uFF49"=>"i", "\uFF4A"=>"j", "\uFF4B"=>"k", + "\uFF4C"=>"l", "\uFF4D"=>"m", "\uFF4E"=>"n", "\uFF4F"=>"o", "\uFF50"=>"p", "\uFF51"=>"q", "\uFF52"=>"r", "\uFF53"=>"s", + "\uFF54"=>"t", "\uFF55"=>"u", "\uFF56"=>"v", "\uFF57"=>"w", "\uFF58"=>"x", "\uFF59"=>"y", "\uFF5A"=>"z", "\uFF5B"=>"{", + "\uFF5C"=>"|", "\uFF5D"=>"}", "\uFF5E"=>"~", "\uFF5F"=>"\u2985", "\uFF60"=>"\u2986", "\uFF61"=>"\u3002", "\uFF62"=>"\u300C", "\uFF63"=>"\u300D", + "\uFF64"=>"\u3001", "\uFF65"=>"\u30FB", "\uFF66"=>"\u30F2", "\uFF67"=>"\u30A1", "\uFF68"=>"\u30A3", "\uFF69"=>"\u30A5", "\uFF6A"=>"\u30A7", "\uFF6B"=>"\u30A9", + "\uFF6C"=>"\u30E3", "\uFF6D"=>"\u30E5", "\uFF6E"=>"\u30E7", "\uFF6F"=>"\u30C3", "\uFF70"=>"\u30FC", "\uFF71"=>"\u30A2", "\uFF72"=>"\u30A4", "\uFF73"=>"\u30A6", + "\uFF74"=>"\u30A8", "\uFF75"=>"\u30AA", "\uFF76"=>"\u30AB", "\uFF77"=>"\u30AD", "\uFF78"=>"\u30AF", "\uFF79"=>"\u30B1", "\uFF7A"=>"\u30B3", "\uFF7B"=>"\u30B5", + "\uFF7C"=>"\u30B7", "\uFF7D"=>"\u30B9", "\uFF7E"=>"\u30BB", "\uFF7F"=>"\u30BD", "\uFF80"=>"\u30BF", "\uFF81"=>"\u30C1", "\uFF82"=>"\u30C4", "\uFF83"=>"\u30C6", + "\uFF84"=>"\u30C8", "\uFF85"=>"\u30CA", "\uFF86"=>"\u30CB", "\uFF87"=>"\u30CC", "\uFF88"=>"\u30CD", "\uFF89"=>"\u30CE", "\uFF8A"=>"\u30CF", "\uFF8B"=>"\u30D2", + "\uFF8C"=>"\u30D5", "\uFF8D"=>"\u30D8", "\uFF8E"=>"\u30DB", "\uFF8F"=>"\u30DE", "\uFF90"=>"\u30DF", "\uFF91"=>"\u30E0", "\uFF92"=>"\u30E1", "\uFF93"=>"\u30E2", + "\uFF94"=>"\u30E4", "\uFF95"=>"\u30E6", "\uFF96"=>"\u30E8", "\uFF97"=>"\u30E9", "\uFF98"=>"\u30EA", "\uFF99"=>"\u30EB", "\uFF9A"=>"\u30EC", "\uFF9B"=>"\u30ED", + "\uFF9C"=>"\u30EF", "\uFF9D"=>"\u30F3", "\uFF9E"=>"\u3099", "\uFF9F"=>"\u309A", "\uFFA0"=>"\u1160", "\uFFA1"=>"\u1100", "\uFFA2"=>"\u1101", "\uFFA3"=>"\u11AA", + "\uFFA4"=>"\u1102", "\uFFA5"=>"\u11AC", "\uFFA6"=>"\u11AD", "\uFFA7"=>"\u1103", "\uFFA8"=>"\u1104", "\uFFA9"=>"\u1105", "\uFFAA"=>"\u11B0", "\uFFAB"=>"\u11B1", + "\uFFAC"=>"\u11B2", "\uFFAD"=>"\u11B3", "\uFFAE"=>"\u11B4", "\uFFAF"=>"\u11B5", "\uFFB0"=>"\u111A", "\uFFB1"=>"\u1106", "\uFFB2"=>"\u1107", "\uFFB3"=>"\u1108", + "\uFFB4"=>"\u1121", "\uFFB5"=>"\u1109", "\uFFB6"=>"\u110A", "\uFFB7"=>"\u110B", "\uFFB8"=>"\u110C", "\uFFB9"=>"\u110D", "\uFFBA"=>"\u110E", "\uFFBB"=>"\u110F", + "\uFFBC"=>"\u1110", "\uFFBD"=>"\u1111", "\uFFBE"=>"\u1112", "\uFFC2"=>"\u1161", "\uFFC3"=>"\u1162", "\uFFC4"=>"\u1163", "\uFFC5"=>"\u1164", "\uFFC6"=>"\u1165", + "\uFFC7"=>"\u1166", "\uFFCA"=>"\u1167", "\uFFCB"=>"\u1168", "\uFFCC"=>"\u1169", "\uFFCD"=>"\u116A", "\uFFCE"=>"\u116B", "\uFFCF"=>"\u116C", "\uFFD2"=>"\u116D", + "\uFFD3"=>"\u116E", "\uFFD4"=>"\u116F", "\uFFD5"=>"\u1170", "\uFFD6"=>"\u1171", "\uFFD7"=>"\u1172", "\uFFDA"=>"\u1173", "\uFFDB"=>"\u1174", "\uFFDC"=>"\u1175", + "\uFFE0"=>"\u00A2", "\uFFE1"=>"\u00A3", "\uFFE2"=>"\u00AC", "\uFFE3"=>" \u0304", "\uFFE4"=>"\u00A6", "\uFFE5"=>"\u00A5", "\uFFE6"=>"\u20A9", "\uFFE8"=>"\u2502", + "\uFFE9"=>"\u2190", "\uFFEA"=>"\u2191", "\uFFEB"=>"\u2192", "\uFFEC"=>"\u2193", "\uFFED"=>"\u25A0", "\uFFEE"=>"\u25CB", "\u{1D400}"=>"A", "\u{1D401}"=>"B", + "\u{1D402}"=>"C", "\u{1D403}"=>"D", "\u{1D404}"=>"E", "\u{1D405}"=>"F", "\u{1D406}"=>"G", "\u{1D407}"=>"H", "\u{1D408}"=>"I", "\u{1D409}"=>"J", + "\u{1D40A}"=>"K", "\u{1D40B}"=>"L", "\u{1D40C}"=>"M", "\u{1D40D}"=>"N", "\u{1D40E}"=>"O", "\u{1D40F}"=>"P", "\u{1D410}"=>"Q", "\u{1D411}"=>"R", + "\u{1D412}"=>"S", "\u{1D413}"=>"T", "\u{1D414}"=>"U", "\u{1D415}"=>"V", "\u{1D416}"=>"W", "\u{1D417}"=>"X", "\u{1D418}"=>"Y", "\u{1D419}"=>"Z", + "\u{1D41A}"=>"a", "\u{1D41B}"=>"b", "\u{1D41C}"=>"c", "\u{1D41D}"=>"d", "\u{1D41E}"=>"e", "\u{1D41F}"=>"f", "\u{1D420}"=>"g", "\u{1D421}"=>"h", + "\u{1D422}"=>"i", "\u{1D423}"=>"j", "\u{1D424}"=>"k", "\u{1D425}"=>"l", "\u{1D426}"=>"m", "\u{1D427}"=>"n", "\u{1D428}"=>"o", "\u{1D429}"=>"p", + "\u{1D42A}"=>"q", "\u{1D42B}"=>"r", "\u{1D42C}"=>"s", "\u{1D42D}"=>"t", "\u{1D42E}"=>"u", "\u{1D42F}"=>"v", "\u{1D430}"=>"w", "\u{1D431}"=>"x", + "\u{1D432}"=>"y", "\u{1D433}"=>"z", "\u{1D434}"=>"A", "\u{1D435}"=>"B", "\u{1D436}"=>"C", "\u{1D437}"=>"D", "\u{1D438}"=>"E", "\u{1D439}"=>"F", + "\u{1D43A}"=>"G", "\u{1D43B}"=>"H", "\u{1D43C}"=>"I", "\u{1D43D}"=>"J", "\u{1D43E}"=>"K", "\u{1D43F}"=>"L", "\u{1D440}"=>"M", "\u{1D441}"=>"N", + "\u{1D442}"=>"O", "\u{1D443}"=>"P", "\u{1D444}"=>"Q", "\u{1D445}"=>"R", "\u{1D446}"=>"S", "\u{1D447}"=>"T", "\u{1D448}"=>"U", "\u{1D449}"=>"V", + "\u{1D44A}"=>"W", "\u{1D44B}"=>"X", "\u{1D44C}"=>"Y", "\u{1D44D}"=>"Z", "\u{1D44E}"=>"a", "\u{1D44F}"=>"b", "\u{1D450}"=>"c", "\u{1D451}"=>"d", + "\u{1D452}"=>"e", "\u{1D453}"=>"f", "\u{1D454}"=>"g", "\u{1D456}"=>"i", "\u{1D457}"=>"j", "\u{1D458}"=>"k", "\u{1D459}"=>"l", "\u{1D45A}"=>"m", + "\u{1D45B}"=>"n", "\u{1D45C}"=>"o", "\u{1D45D}"=>"p", "\u{1D45E}"=>"q", "\u{1D45F}"=>"r", "\u{1D460}"=>"s", "\u{1D461}"=>"t", "\u{1D462}"=>"u", + "\u{1D463}"=>"v", "\u{1D464}"=>"w", "\u{1D465}"=>"x", "\u{1D466}"=>"y", "\u{1D467}"=>"z", "\u{1D468}"=>"A", "\u{1D469}"=>"B", "\u{1D46A}"=>"C", + "\u{1D46B}"=>"D", "\u{1D46C}"=>"E", "\u{1D46D}"=>"F", "\u{1D46E}"=>"G", "\u{1D46F}"=>"H", "\u{1D470}"=>"I", "\u{1D471}"=>"J", "\u{1D472}"=>"K", + "\u{1D473}"=>"L", "\u{1D474}"=>"M", "\u{1D475}"=>"N", "\u{1D476}"=>"O", "\u{1D477}"=>"P", "\u{1D478}"=>"Q", "\u{1D479}"=>"R", "\u{1D47A}"=>"S", + "\u{1D47B}"=>"T", "\u{1D47C}"=>"U", "\u{1D47D}"=>"V", "\u{1D47E}"=>"W", "\u{1D47F}"=>"X", "\u{1D480}"=>"Y", "\u{1D481}"=>"Z", "\u{1D482}"=>"a", + "\u{1D483}"=>"b", "\u{1D484}"=>"c", "\u{1D485}"=>"d", "\u{1D486}"=>"e", "\u{1D487}"=>"f", "\u{1D488}"=>"g", "\u{1D489}"=>"h", "\u{1D48A}"=>"i", + "\u{1D48B}"=>"j", "\u{1D48C}"=>"k", "\u{1D48D}"=>"l", "\u{1D48E}"=>"m", "\u{1D48F}"=>"n", "\u{1D490}"=>"o", "\u{1D491}"=>"p", "\u{1D492}"=>"q", + "\u{1D493}"=>"r", "\u{1D494}"=>"s", "\u{1D495}"=>"t", "\u{1D496}"=>"u", "\u{1D497}"=>"v", "\u{1D498}"=>"w", "\u{1D499}"=>"x", "\u{1D49A}"=>"y", + "\u{1D49B}"=>"z", "\u{1D49C}"=>"A", "\u{1D49E}"=>"C", "\u{1D49F}"=>"D", "\u{1D4A2}"=>"G", "\u{1D4A5}"=>"J", "\u{1D4A6}"=>"K", "\u{1D4A9}"=>"N", + "\u{1D4AA}"=>"O", "\u{1D4AB}"=>"P", "\u{1D4AC}"=>"Q", "\u{1D4AE}"=>"S", "\u{1D4AF}"=>"T", "\u{1D4B0}"=>"U", "\u{1D4B1}"=>"V", "\u{1D4B2}"=>"W", + "\u{1D4B3}"=>"X", "\u{1D4B4}"=>"Y", "\u{1D4B5}"=>"Z", "\u{1D4B6}"=>"a", "\u{1D4B7}"=>"b", "\u{1D4B8}"=>"c", "\u{1D4B9}"=>"d", "\u{1D4BB}"=>"f", + "\u{1D4BD}"=>"h", "\u{1D4BE}"=>"i", "\u{1D4BF}"=>"j", "\u{1D4C0}"=>"k", "\u{1D4C1}"=>"l", "\u{1D4C2}"=>"m", "\u{1D4C3}"=>"n", "\u{1D4C5}"=>"p", + "\u{1D4C6}"=>"q", "\u{1D4C7}"=>"r", "\u{1D4C8}"=>"s", "\u{1D4C9}"=>"t", "\u{1D4CA}"=>"u", "\u{1D4CB}"=>"v", "\u{1D4CC}"=>"w", "\u{1D4CD}"=>"x", + "\u{1D4CE}"=>"y", "\u{1D4CF}"=>"z", "\u{1D4D0}"=>"A", "\u{1D4D1}"=>"B", "\u{1D4D2}"=>"C", "\u{1D4D3}"=>"D", "\u{1D4D4}"=>"E", "\u{1D4D5}"=>"F", + "\u{1D4D6}"=>"G", "\u{1D4D7}"=>"H", "\u{1D4D8}"=>"I", "\u{1D4D9}"=>"J", "\u{1D4DA}"=>"K", "\u{1D4DB}"=>"L", "\u{1D4DC}"=>"M", "\u{1D4DD}"=>"N", + "\u{1D4DE}"=>"O", "\u{1D4DF}"=>"P", "\u{1D4E0}"=>"Q", "\u{1D4E1}"=>"R", "\u{1D4E2}"=>"S", "\u{1D4E3}"=>"T", "\u{1D4E4}"=>"U", "\u{1D4E5}"=>"V", + "\u{1D4E6}"=>"W", "\u{1D4E7}"=>"X", "\u{1D4E8}"=>"Y", "\u{1D4E9}"=>"Z", "\u{1D4EA}"=>"a", "\u{1D4EB}"=>"b", "\u{1D4EC}"=>"c", "\u{1D4ED}"=>"d", + "\u{1D4EE}"=>"e", "\u{1D4EF}"=>"f", "\u{1D4F0}"=>"g", "\u{1D4F1}"=>"h", "\u{1D4F2}"=>"i", "\u{1D4F3}"=>"j", "\u{1D4F4}"=>"k", "\u{1D4F5}"=>"l", + "\u{1D4F6}"=>"m", "\u{1D4F7}"=>"n", "\u{1D4F8}"=>"o", "\u{1D4F9}"=>"p", "\u{1D4FA}"=>"q", "\u{1D4FB}"=>"r", "\u{1D4FC}"=>"s", "\u{1D4FD}"=>"t", + "\u{1D4FE}"=>"u", "\u{1D4FF}"=>"v", "\u{1D500}"=>"w", "\u{1D501}"=>"x", "\u{1D502}"=>"y", "\u{1D503}"=>"z", "\u{1D504}"=>"A", "\u{1D505}"=>"B", + "\u{1D507}"=>"D", "\u{1D508}"=>"E", "\u{1D509}"=>"F", "\u{1D50A}"=>"G", "\u{1D50D}"=>"J", "\u{1D50E}"=>"K", "\u{1D50F}"=>"L", "\u{1D510}"=>"M", + "\u{1D511}"=>"N", "\u{1D512}"=>"O", "\u{1D513}"=>"P", "\u{1D514}"=>"Q", "\u{1D516}"=>"S", "\u{1D517}"=>"T", "\u{1D518}"=>"U", "\u{1D519}"=>"V", + "\u{1D51A}"=>"W", "\u{1D51B}"=>"X", "\u{1D51C}"=>"Y", "\u{1D51E}"=>"a", "\u{1D51F}"=>"b", "\u{1D520}"=>"c", "\u{1D521}"=>"d", "\u{1D522}"=>"e", + "\u{1D523}"=>"f", "\u{1D524}"=>"g", "\u{1D525}"=>"h", "\u{1D526}"=>"i", "\u{1D527}"=>"j", "\u{1D528}"=>"k", "\u{1D529}"=>"l", "\u{1D52A}"=>"m", + "\u{1D52B}"=>"n", "\u{1D52C}"=>"o", "\u{1D52D}"=>"p", "\u{1D52E}"=>"q", "\u{1D52F}"=>"r", "\u{1D530}"=>"s", "\u{1D531}"=>"t", "\u{1D532}"=>"u", + "\u{1D533}"=>"v", "\u{1D534}"=>"w", "\u{1D535}"=>"x", "\u{1D536}"=>"y", "\u{1D537}"=>"z", "\u{1D538}"=>"A", "\u{1D539}"=>"B", "\u{1D53B}"=>"D", + "\u{1D53C}"=>"E", "\u{1D53D}"=>"F", "\u{1D53E}"=>"G", "\u{1D540}"=>"I", "\u{1D541}"=>"J", "\u{1D542}"=>"K", "\u{1D543}"=>"L", "\u{1D544}"=>"M", + "\u{1D546}"=>"O", "\u{1D54A}"=>"S", "\u{1D54B}"=>"T", "\u{1D54C}"=>"U", "\u{1D54D}"=>"V", "\u{1D54E}"=>"W", "\u{1D54F}"=>"X", "\u{1D550}"=>"Y", + "\u{1D552}"=>"a", "\u{1D553}"=>"b", "\u{1D554}"=>"c", "\u{1D555}"=>"d", "\u{1D556}"=>"e", "\u{1D557}"=>"f", "\u{1D558}"=>"g", "\u{1D559}"=>"h", + "\u{1D55A}"=>"i", "\u{1D55B}"=>"j", "\u{1D55C}"=>"k", "\u{1D55D}"=>"l", "\u{1D55E}"=>"m", "\u{1D55F}"=>"n", "\u{1D560}"=>"o", "\u{1D561}"=>"p", + "\u{1D562}"=>"q", "\u{1D563}"=>"r", "\u{1D564}"=>"s", "\u{1D565}"=>"t", "\u{1D566}"=>"u", "\u{1D567}"=>"v", "\u{1D568}"=>"w", "\u{1D569}"=>"x", + "\u{1D56A}"=>"y", "\u{1D56B}"=>"z", "\u{1D56C}"=>"A", "\u{1D56D}"=>"B", "\u{1D56E}"=>"C", "\u{1D56F}"=>"D", "\u{1D570}"=>"E", "\u{1D571}"=>"F", + "\u{1D572}"=>"G", "\u{1D573}"=>"H", "\u{1D574}"=>"I", "\u{1D575}"=>"J", "\u{1D576}"=>"K", "\u{1D577}"=>"L", "\u{1D578}"=>"M", "\u{1D579}"=>"N", + "\u{1D57A}"=>"O", "\u{1D57B}"=>"P", "\u{1D57C}"=>"Q", "\u{1D57D}"=>"R", "\u{1D57E}"=>"S", "\u{1D57F}"=>"T", "\u{1D580}"=>"U", "\u{1D581}"=>"V", + "\u{1D582}"=>"W", "\u{1D583}"=>"X", "\u{1D584}"=>"Y", "\u{1D585}"=>"Z", "\u{1D586}"=>"a", "\u{1D587}"=>"b", "\u{1D588}"=>"c", "\u{1D589}"=>"d", + "\u{1D58A}"=>"e", "\u{1D58B}"=>"f", "\u{1D58C}"=>"g", "\u{1D58D}"=>"h", "\u{1D58E}"=>"i", "\u{1D58F}"=>"j", "\u{1D590}"=>"k", "\u{1D591}"=>"l", + "\u{1D592}"=>"m", "\u{1D593}"=>"n", "\u{1D594}"=>"o", "\u{1D595}"=>"p", "\u{1D596}"=>"q", "\u{1D597}"=>"r", "\u{1D598}"=>"s", "\u{1D599}"=>"t", + "\u{1D59A}"=>"u", "\u{1D59B}"=>"v", "\u{1D59C}"=>"w", "\u{1D59D}"=>"x", "\u{1D59E}"=>"y", "\u{1D59F}"=>"z", "\u{1D5A0}"=>"A", "\u{1D5A1}"=>"B", + "\u{1D5A2}"=>"C", "\u{1D5A3}"=>"D", "\u{1D5A4}"=>"E", "\u{1D5A5}"=>"F", "\u{1D5A6}"=>"G", "\u{1D5A7}"=>"H", "\u{1D5A8}"=>"I", "\u{1D5A9}"=>"J", + "\u{1D5AA}"=>"K", "\u{1D5AB}"=>"L", "\u{1D5AC}"=>"M", "\u{1D5AD}"=>"N", "\u{1D5AE}"=>"O", "\u{1D5AF}"=>"P", "\u{1D5B0}"=>"Q", "\u{1D5B1}"=>"R", + "\u{1D5B2}"=>"S", "\u{1D5B3}"=>"T", "\u{1D5B4}"=>"U", "\u{1D5B5}"=>"V", "\u{1D5B6}"=>"W", "\u{1D5B7}"=>"X", "\u{1D5B8}"=>"Y", "\u{1D5B9}"=>"Z", + "\u{1D5BA}"=>"a", "\u{1D5BB}"=>"b", "\u{1D5BC}"=>"c", "\u{1D5BD}"=>"d", "\u{1D5BE}"=>"e", "\u{1D5BF}"=>"f", "\u{1D5C0}"=>"g", "\u{1D5C1}"=>"h", + "\u{1D5C2}"=>"i", "\u{1D5C3}"=>"j", "\u{1D5C4}"=>"k", "\u{1D5C5}"=>"l", "\u{1D5C6}"=>"m", "\u{1D5C7}"=>"n", "\u{1D5C8}"=>"o", "\u{1D5C9}"=>"p", + "\u{1D5CA}"=>"q", "\u{1D5CB}"=>"r", "\u{1D5CC}"=>"s", "\u{1D5CD}"=>"t", "\u{1D5CE}"=>"u", "\u{1D5CF}"=>"v", "\u{1D5D0}"=>"w", "\u{1D5D1}"=>"x", + "\u{1D5D2}"=>"y", "\u{1D5D3}"=>"z", "\u{1D5D4}"=>"A", "\u{1D5D5}"=>"B", "\u{1D5D6}"=>"C", "\u{1D5D7}"=>"D", "\u{1D5D8}"=>"E", "\u{1D5D9}"=>"F", + "\u{1D5DA}"=>"G", "\u{1D5DB}"=>"H", "\u{1D5DC}"=>"I", "\u{1D5DD}"=>"J", "\u{1D5DE}"=>"K", "\u{1D5DF}"=>"L", "\u{1D5E0}"=>"M", "\u{1D5E1}"=>"N", + "\u{1D5E2}"=>"O", "\u{1D5E3}"=>"P", "\u{1D5E4}"=>"Q", "\u{1D5E5}"=>"R", "\u{1D5E6}"=>"S", "\u{1D5E7}"=>"T", "\u{1D5E8}"=>"U", "\u{1D5E9}"=>"V", + "\u{1D5EA}"=>"W", "\u{1D5EB}"=>"X", "\u{1D5EC}"=>"Y", "\u{1D5ED}"=>"Z", "\u{1D5EE}"=>"a", "\u{1D5EF}"=>"b", "\u{1D5F0}"=>"c", "\u{1D5F1}"=>"d", + "\u{1D5F2}"=>"e", "\u{1D5F3}"=>"f", "\u{1D5F4}"=>"g", "\u{1D5F5}"=>"h", "\u{1D5F6}"=>"i", "\u{1D5F7}"=>"j", "\u{1D5F8}"=>"k", "\u{1D5F9}"=>"l", + "\u{1D5FA}"=>"m", "\u{1D5FB}"=>"n", "\u{1D5FC}"=>"o", "\u{1D5FD}"=>"p", "\u{1D5FE}"=>"q", "\u{1D5FF}"=>"r", "\u{1D600}"=>"s", "\u{1D601}"=>"t", + "\u{1D602}"=>"u", "\u{1D603}"=>"v", "\u{1D604}"=>"w", "\u{1D605}"=>"x", "\u{1D606}"=>"y", "\u{1D607}"=>"z", "\u{1D608}"=>"A", "\u{1D609}"=>"B", + "\u{1D60A}"=>"C", "\u{1D60B}"=>"D", "\u{1D60C}"=>"E", "\u{1D60D}"=>"F", "\u{1D60E}"=>"G", "\u{1D60F}"=>"H", "\u{1D610}"=>"I", "\u{1D611}"=>"J", + "\u{1D612}"=>"K", "\u{1D613}"=>"L", "\u{1D614}"=>"M", "\u{1D615}"=>"N", "\u{1D616}"=>"O", "\u{1D617}"=>"P", "\u{1D618}"=>"Q", "\u{1D619}"=>"R", + "\u{1D61A}"=>"S", "\u{1D61B}"=>"T", "\u{1D61C}"=>"U", "\u{1D61D}"=>"V", "\u{1D61E}"=>"W", "\u{1D61F}"=>"X", "\u{1D620}"=>"Y", "\u{1D621}"=>"Z", + "\u{1D622}"=>"a", "\u{1D623}"=>"b", "\u{1D624}"=>"c", "\u{1D625}"=>"d", "\u{1D626}"=>"e", "\u{1D627}"=>"f", "\u{1D628}"=>"g", "\u{1D629}"=>"h", + "\u{1D62A}"=>"i", "\u{1D62B}"=>"j", "\u{1D62C}"=>"k", "\u{1D62D}"=>"l", "\u{1D62E}"=>"m", "\u{1D62F}"=>"n", "\u{1D630}"=>"o", "\u{1D631}"=>"p", + "\u{1D632}"=>"q", "\u{1D633}"=>"r", "\u{1D634}"=>"s", "\u{1D635}"=>"t", "\u{1D636}"=>"u", "\u{1D637}"=>"v", "\u{1D638}"=>"w", "\u{1D639}"=>"x", + "\u{1D63A}"=>"y", "\u{1D63B}"=>"z", "\u{1D63C}"=>"A", "\u{1D63D}"=>"B", "\u{1D63E}"=>"C", "\u{1D63F}"=>"D", "\u{1D640}"=>"E", "\u{1D641}"=>"F", + "\u{1D642}"=>"G", "\u{1D643}"=>"H", "\u{1D644}"=>"I", "\u{1D645}"=>"J", "\u{1D646}"=>"K", "\u{1D647}"=>"L", "\u{1D648}"=>"M", "\u{1D649}"=>"N", + "\u{1D64A}"=>"O", "\u{1D64B}"=>"P", "\u{1D64C}"=>"Q", "\u{1D64D}"=>"R", "\u{1D64E}"=>"S", "\u{1D64F}"=>"T", "\u{1D650}"=>"U", "\u{1D651}"=>"V", + "\u{1D652}"=>"W", "\u{1D653}"=>"X", "\u{1D654}"=>"Y", "\u{1D655}"=>"Z", "\u{1D656}"=>"a", "\u{1D657}"=>"b", "\u{1D658}"=>"c", "\u{1D659}"=>"d", + "\u{1D65A}"=>"e", "\u{1D65B}"=>"f", "\u{1D65C}"=>"g", "\u{1D65D}"=>"h", "\u{1D65E}"=>"i", "\u{1D65F}"=>"j", "\u{1D660}"=>"k", "\u{1D661}"=>"l", + "\u{1D662}"=>"m", "\u{1D663}"=>"n", "\u{1D664}"=>"o", "\u{1D665}"=>"p", "\u{1D666}"=>"q", "\u{1D667}"=>"r", "\u{1D668}"=>"s", "\u{1D669}"=>"t", + "\u{1D66A}"=>"u", "\u{1D66B}"=>"v", "\u{1D66C}"=>"w", "\u{1D66D}"=>"x", "\u{1D66E}"=>"y", "\u{1D66F}"=>"z", "\u{1D670}"=>"A", "\u{1D671}"=>"B", + "\u{1D672}"=>"C", "\u{1D673}"=>"D", "\u{1D674}"=>"E", "\u{1D675}"=>"F", "\u{1D676}"=>"G", "\u{1D677}"=>"H", "\u{1D678}"=>"I", "\u{1D679}"=>"J", + "\u{1D67A}"=>"K", "\u{1D67B}"=>"L", "\u{1D67C}"=>"M", "\u{1D67D}"=>"N", "\u{1D67E}"=>"O", "\u{1D67F}"=>"P", "\u{1D680}"=>"Q", "\u{1D681}"=>"R", + "\u{1D682}"=>"S", "\u{1D683}"=>"T", "\u{1D684}"=>"U", "\u{1D685}"=>"V", "\u{1D686}"=>"W", "\u{1D687}"=>"X", "\u{1D688}"=>"Y", "\u{1D689}"=>"Z", + "\u{1D68A}"=>"a", "\u{1D68B}"=>"b", "\u{1D68C}"=>"c", "\u{1D68D}"=>"d", "\u{1D68E}"=>"e", "\u{1D68F}"=>"f", "\u{1D690}"=>"g", "\u{1D691}"=>"h", + "\u{1D692}"=>"i", "\u{1D693}"=>"j", "\u{1D694}"=>"k", "\u{1D695}"=>"l", "\u{1D696}"=>"m", "\u{1D697}"=>"n", "\u{1D698}"=>"o", "\u{1D699}"=>"p", + "\u{1D69A}"=>"q", "\u{1D69B}"=>"r", "\u{1D69C}"=>"s", "\u{1D69D}"=>"t", "\u{1D69E}"=>"u", "\u{1D69F}"=>"v", "\u{1D6A0}"=>"w", "\u{1D6A1}"=>"x", + "\u{1D6A2}"=>"y", "\u{1D6A3}"=>"z", "\u{1D6A4}"=>"\u0131", "\u{1D6A5}"=>"\u0237", "\u{1D6A8}"=>"\u0391", "\u{1D6A9}"=>"\u0392", "\u{1D6AA}"=>"\u0393", "\u{1D6AB}"=>"\u0394", + "\u{1D6AC}"=>"\u0395", "\u{1D6AD}"=>"\u0396", "\u{1D6AE}"=>"\u0397", "\u{1D6AF}"=>"\u0398", "\u{1D6B0}"=>"\u0399", "\u{1D6B1}"=>"\u039A", "\u{1D6B2}"=>"\u039B", "\u{1D6B3}"=>"\u039C", + "\u{1D6B4}"=>"\u039D", "\u{1D6B5}"=>"\u039E", "\u{1D6B6}"=>"\u039F", "\u{1D6B7}"=>"\u03A0", "\u{1D6B8}"=>"\u03A1", "\u{1D6B9}"=>"\u0398", "\u{1D6BA}"=>"\u03A3", "\u{1D6BB}"=>"\u03A4", + "\u{1D6BC}"=>"\u03A5", "\u{1D6BD}"=>"\u03A6", "\u{1D6BE}"=>"\u03A7", "\u{1D6BF}"=>"\u03A8", "\u{1D6C0}"=>"\u03A9", "\u{1D6C1}"=>"\u2207", "\u{1D6C2}"=>"\u03B1", "\u{1D6C3}"=>"\u03B2", + "\u{1D6C4}"=>"\u03B3", "\u{1D6C5}"=>"\u03B4", "\u{1D6C6}"=>"\u03B5", "\u{1D6C7}"=>"\u03B6", "\u{1D6C8}"=>"\u03B7", "\u{1D6C9}"=>"\u03B8", "\u{1D6CA}"=>"\u03B9", "\u{1D6CB}"=>"\u03BA", + "\u{1D6CC}"=>"\u03BB", "\u{1D6CD}"=>"\u03BC", "\u{1D6CE}"=>"\u03BD", "\u{1D6CF}"=>"\u03BE", "\u{1D6D0}"=>"\u03BF", "\u{1D6D1}"=>"\u03C0", "\u{1D6D2}"=>"\u03C1", "\u{1D6D3}"=>"\u03C2", + "\u{1D6D4}"=>"\u03C3", "\u{1D6D5}"=>"\u03C4", "\u{1D6D6}"=>"\u03C5", "\u{1D6D7}"=>"\u03C6", "\u{1D6D8}"=>"\u03C7", "\u{1D6D9}"=>"\u03C8", "\u{1D6DA}"=>"\u03C9", "\u{1D6DB}"=>"\u2202", + "\u{1D6DC}"=>"\u03B5", "\u{1D6DD}"=>"\u03B8", "\u{1D6DE}"=>"\u03BA", "\u{1D6DF}"=>"\u03C6", "\u{1D6E0}"=>"\u03C1", "\u{1D6E1}"=>"\u03C0", "\u{1D6E2}"=>"\u0391", "\u{1D6E3}"=>"\u0392", + "\u{1D6E4}"=>"\u0393", "\u{1D6E5}"=>"\u0394", "\u{1D6E6}"=>"\u0395", "\u{1D6E7}"=>"\u0396", "\u{1D6E8}"=>"\u0397", "\u{1D6E9}"=>"\u0398", "\u{1D6EA}"=>"\u0399", "\u{1D6EB}"=>"\u039A", + "\u{1D6EC}"=>"\u039B", "\u{1D6ED}"=>"\u039C", "\u{1D6EE}"=>"\u039D", "\u{1D6EF}"=>"\u039E", "\u{1D6F0}"=>"\u039F", "\u{1D6F1}"=>"\u03A0", "\u{1D6F2}"=>"\u03A1", "\u{1D6F3}"=>"\u0398", + "\u{1D6F4}"=>"\u03A3", "\u{1D6F5}"=>"\u03A4", "\u{1D6F6}"=>"\u03A5", "\u{1D6F7}"=>"\u03A6", "\u{1D6F8}"=>"\u03A7", "\u{1D6F9}"=>"\u03A8", "\u{1D6FA}"=>"\u03A9", "\u{1D6FB}"=>"\u2207", + "\u{1D6FC}"=>"\u03B1", "\u{1D6FD}"=>"\u03B2", "\u{1D6FE}"=>"\u03B3", "\u{1D6FF}"=>"\u03B4", "\u{1D700}"=>"\u03B5", "\u{1D701}"=>"\u03B6", "\u{1D702}"=>"\u03B7", "\u{1D703}"=>"\u03B8", + "\u{1D704}"=>"\u03B9", "\u{1D705}"=>"\u03BA", "\u{1D706}"=>"\u03BB", "\u{1D707}"=>"\u03BC", "\u{1D708}"=>"\u03BD", "\u{1D709}"=>"\u03BE", "\u{1D70A}"=>"\u03BF", "\u{1D70B}"=>"\u03C0", + "\u{1D70C}"=>"\u03C1", "\u{1D70D}"=>"\u03C2", "\u{1D70E}"=>"\u03C3", "\u{1D70F}"=>"\u03C4", "\u{1D710}"=>"\u03C5", "\u{1D711}"=>"\u03C6", "\u{1D712}"=>"\u03C7", "\u{1D713}"=>"\u03C8", + "\u{1D714}"=>"\u03C9", "\u{1D715}"=>"\u2202", "\u{1D716}"=>"\u03B5", "\u{1D717}"=>"\u03B8", "\u{1D718}"=>"\u03BA", "\u{1D719}"=>"\u03C6", "\u{1D71A}"=>"\u03C1", "\u{1D71B}"=>"\u03C0", + "\u{1D71C}"=>"\u0391", "\u{1D71D}"=>"\u0392", "\u{1D71E}"=>"\u0393", "\u{1D71F}"=>"\u0394", "\u{1D720}"=>"\u0395", "\u{1D721}"=>"\u0396", "\u{1D722}"=>"\u0397", "\u{1D723}"=>"\u0398", + "\u{1D724}"=>"\u0399", "\u{1D725}"=>"\u039A", "\u{1D726}"=>"\u039B", "\u{1D727}"=>"\u039C", "\u{1D728}"=>"\u039D", "\u{1D729}"=>"\u039E", "\u{1D72A}"=>"\u039F", "\u{1D72B}"=>"\u03A0", + "\u{1D72C}"=>"\u03A1", "\u{1D72D}"=>"\u0398", "\u{1D72E}"=>"\u03A3", "\u{1D72F}"=>"\u03A4", "\u{1D730}"=>"\u03A5", "\u{1D731}"=>"\u03A6", "\u{1D732}"=>"\u03A7", "\u{1D733}"=>"\u03A8", + "\u{1D734}"=>"\u03A9", "\u{1D735}"=>"\u2207", "\u{1D736}"=>"\u03B1", "\u{1D737}"=>"\u03B2", "\u{1D738}"=>"\u03B3", "\u{1D739}"=>"\u03B4", "\u{1D73A}"=>"\u03B5", "\u{1D73B}"=>"\u03B6", + "\u{1D73C}"=>"\u03B7", "\u{1D73D}"=>"\u03B8", "\u{1D73E}"=>"\u03B9", "\u{1D73F}"=>"\u03BA", "\u{1D740}"=>"\u03BB", "\u{1D741}"=>"\u03BC", "\u{1D742}"=>"\u03BD", "\u{1D743}"=>"\u03BE", + "\u{1D744}"=>"\u03BF", "\u{1D745}"=>"\u03C0", "\u{1D746}"=>"\u03C1", "\u{1D747}"=>"\u03C2", "\u{1D748}"=>"\u03C3", "\u{1D749}"=>"\u03C4", "\u{1D74A}"=>"\u03C5", "\u{1D74B}"=>"\u03C6", + "\u{1D74C}"=>"\u03C7", "\u{1D74D}"=>"\u03C8", "\u{1D74E}"=>"\u03C9", "\u{1D74F}"=>"\u2202", "\u{1D750}"=>"\u03B5", "\u{1D751}"=>"\u03B8", "\u{1D752}"=>"\u03BA", "\u{1D753}"=>"\u03C6", + "\u{1D754}"=>"\u03C1", "\u{1D755}"=>"\u03C0", "\u{1D756}"=>"\u0391", "\u{1D757}"=>"\u0392", "\u{1D758}"=>"\u0393", "\u{1D759}"=>"\u0394", "\u{1D75A}"=>"\u0395", "\u{1D75B}"=>"\u0396", + "\u{1D75C}"=>"\u0397", "\u{1D75D}"=>"\u0398", "\u{1D75E}"=>"\u0399", "\u{1D75F}"=>"\u039A", "\u{1D760}"=>"\u039B", "\u{1D761}"=>"\u039C", "\u{1D762}"=>"\u039D", "\u{1D763}"=>"\u039E", + "\u{1D764}"=>"\u039F", "\u{1D765}"=>"\u03A0", "\u{1D766}"=>"\u03A1", "\u{1D767}"=>"\u0398", "\u{1D768}"=>"\u03A3", "\u{1D769}"=>"\u03A4", "\u{1D76A}"=>"\u03A5", "\u{1D76B}"=>"\u03A6", + "\u{1D76C}"=>"\u03A7", "\u{1D76D}"=>"\u03A8", "\u{1D76E}"=>"\u03A9", "\u{1D76F}"=>"\u2207", "\u{1D770}"=>"\u03B1", "\u{1D771}"=>"\u03B2", "\u{1D772}"=>"\u03B3", "\u{1D773}"=>"\u03B4", + "\u{1D774}"=>"\u03B5", "\u{1D775}"=>"\u03B6", "\u{1D776}"=>"\u03B7", "\u{1D777}"=>"\u03B8", "\u{1D778}"=>"\u03B9", "\u{1D779}"=>"\u03BA", "\u{1D77A}"=>"\u03BB", "\u{1D77B}"=>"\u03BC", + "\u{1D77C}"=>"\u03BD", "\u{1D77D}"=>"\u03BE", "\u{1D77E}"=>"\u03BF", "\u{1D77F}"=>"\u03C0", "\u{1D780}"=>"\u03C1", "\u{1D781}"=>"\u03C2", "\u{1D782}"=>"\u03C3", "\u{1D783}"=>"\u03C4", + "\u{1D784}"=>"\u03C5", "\u{1D785}"=>"\u03C6", "\u{1D786}"=>"\u03C7", "\u{1D787}"=>"\u03C8", "\u{1D788}"=>"\u03C9", "\u{1D789}"=>"\u2202", "\u{1D78A}"=>"\u03B5", "\u{1D78B}"=>"\u03B8", + "\u{1D78C}"=>"\u03BA", "\u{1D78D}"=>"\u03C6", "\u{1D78E}"=>"\u03C1", "\u{1D78F}"=>"\u03C0", "\u{1D790}"=>"\u0391", "\u{1D791}"=>"\u0392", "\u{1D792}"=>"\u0393", "\u{1D793}"=>"\u0394", + "\u{1D794}"=>"\u0395", "\u{1D795}"=>"\u0396", "\u{1D796}"=>"\u0397", "\u{1D797}"=>"\u0398", "\u{1D798}"=>"\u0399", "\u{1D799}"=>"\u039A", "\u{1D79A}"=>"\u039B", "\u{1D79B}"=>"\u039C", + "\u{1D79C}"=>"\u039D", "\u{1D79D}"=>"\u039E", "\u{1D79E}"=>"\u039F", "\u{1D79F}"=>"\u03A0", "\u{1D7A0}"=>"\u03A1", "\u{1D7A1}"=>"\u0398", "\u{1D7A2}"=>"\u03A3", "\u{1D7A3}"=>"\u03A4", + "\u{1D7A4}"=>"\u03A5", "\u{1D7A5}"=>"\u03A6", "\u{1D7A6}"=>"\u03A7", "\u{1D7A7}"=>"\u03A8", "\u{1D7A8}"=>"\u03A9", "\u{1D7A9}"=>"\u2207", "\u{1D7AA}"=>"\u03B1", "\u{1D7AB}"=>"\u03B2", + "\u{1D7AC}"=>"\u03B3", "\u{1D7AD}"=>"\u03B4", "\u{1D7AE}"=>"\u03B5", "\u{1D7AF}"=>"\u03B6", "\u{1D7B0}"=>"\u03B7", "\u{1D7B1}"=>"\u03B8", "\u{1D7B2}"=>"\u03B9", "\u{1D7B3}"=>"\u03BA", + "\u{1D7B4}"=>"\u03BB", "\u{1D7B5}"=>"\u03BC", "\u{1D7B6}"=>"\u03BD", "\u{1D7B7}"=>"\u03BE", "\u{1D7B8}"=>"\u03BF", "\u{1D7B9}"=>"\u03C0", "\u{1D7BA}"=>"\u03C1", "\u{1D7BB}"=>"\u03C2", + "\u{1D7BC}"=>"\u03C3", "\u{1D7BD}"=>"\u03C4", "\u{1D7BE}"=>"\u03C5", "\u{1D7BF}"=>"\u03C6", "\u{1D7C0}"=>"\u03C7", "\u{1D7C1}"=>"\u03C8", "\u{1D7C2}"=>"\u03C9", "\u{1D7C3}"=>"\u2202", + "\u{1D7C4}"=>"\u03B5", "\u{1D7C5}"=>"\u03B8", "\u{1D7C6}"=>"\u03BA", "\u{1D7C7}"=>"\u03C6", "\u{1D7C8}"=>"\u03C1", "\u{1D7C9}"=>"\u03C0", "\u{1D7CA}"=>"\u03DC", "\u{1D7CB}"=>"\u03DD", + "\u{1D7CE}"=>"0", "\u{1D7CF}"=>"1", "\u{1D7D0}"=>"2", "\u{1D7D1}"=>"3", "\u{1D7D2}"=>"4", "\u{1D7D3}"=>"5", "\u{1D7D4}"=>"6", "\u{1D7D5}"=>"7", + "\u{1D7D6}"=>"8", "\u{1D7D7}"=>"9", "\u{1D7D8}"=>"0", "\u{1D7D9}"=>"1", "\u{1D7DA}"=>"2", "\u{1D7DB}"=>"3", "\u{1D7DC}"=>"4", "\u{1D7DD}"=>"5", + "\u{1D7DE}"=>"6", "\u{1D7DF}"=>"7", "\u{1D7E0}"=>"8", "\u{1D7E1}"=>"9", "\u{1D7E2}"=>"0", "\u{1D7E3}"=>"1", "\u{1D7E4}"=>"2", "\u{1D7E5}"=>"3", + "\u{1D7E6}"=>"4", "\u{1D7E7}"=>"5", "\u{1D7E8}"=>"6", "\u{1D7E9}"=>"7", "\u{1D7EA}"=>"8", "\u{1D7EB}"=>"9", "\u{1D7EC}"=>"0", "\u{1D7ED}"=>"1", + "\u{1D7EE}"=>"2", "\u{1D7EF}"=>"3", "\u{1D7F0}"=>"4", "\u{1D7F1}"=>"5", "\u{1D7F2}"=>"6", "\u{1D7F3}"=>"7", "\u{1D7F4}"=>"8", "\u{1D7F5}"=>"9", + "\u{1D7F6}"=>"0", "\u{1D7F7}"=>"1", "\u{1D7F8}"=>"2", "\u{1D7F9}"=>"3", "\u{1D7FA}"=>"4", "\u{1D7FB}"=>"5", "\u{1D7FC}"=>"6", "\u{1D7FD}"=>"7", + "\u{1D7FE}"=>"8", "\u{1D7FF}"=>"9", "\u{1EE00}"=>"\u0627", "\u{1EE01}"=>"\u0628", "\u{1EE02}"=>"\u062C", "\u{1EE03}"=>"\u062F", "\u{1EE05}"=>"\u0648", "\u{1EE06}"=>"\u0632", + "\u{1EE07}"=>"\u062D", "\u{1EE08}"=>"\u0637", "\u{1EE09}"=>"\u064A", "\u{1EE0A}"=>"\u0643", "\u{1EE0B}"=>"\u0644", "\u{1EE0C}"=>"\u0645", "\u{1EE0D}"=>"\u0646", "\u{1EE0E}"=>"\u0633", + "\u{1EE0F}"=>"\u0639", "\u{1EE10}"=>"\u0641", "\u{1EE11}"=>"\u0635", "\u{1EE12}"=>"\u0642", "\u{1EE13}"=>"\u0631", "\u{1EE14}"=>"\u0634", "\u{1EE15}"=>"\u062A", "\u{1EE16}"=>"\u062B", + "\u{1EE17}"=>"\u062E", "\u{1EE18}"=>"\u0630", "\u{1EE19}"=>"\u0636", "\u{1EE1A}"=>"\u0638", "\u{1EE1B}"=>"\u063A", "\u{1EE1C}"=>"\u066E", "\u{1EE1D}"=>"\u06BA", "\u{1EE1E}"=>"\u06A1", + "\u{1EE1F}"=>"\u066F", "\u{1EE21}"=>"\u0628", "\u{1EE22}"=>"\u062C", "\u{1EE24}"=>"\u0647", "\u{1EE27}"=>"\u062D", "\u{1EE29}"=>"\u064A", "\u{1EE2A}"=>"\u0643", "\u{1EE2B}"=>"\u0644", + "\u{1EE2C}"=>"\u0645", "\u{1EE2D}"=>"\u0646", "\u{1EE2E}"=>"\u0633", "\u{1EE2F}"=>"\u0639", "\u{1EE30}"=>"\u0641", "\u{1EE31}"=>"\u0635", "\u{1EE32}"=>"\u0642", "\u{1EE34}"=>"\u0634", + "\u{1EE35}"=>"\u062A", "\u{1EE36}"=>"\u062B", "\u{1EE37}"=>"\u062E", "\u{1EE39}"=>"\u0636", "\u{1EE3B}"=>"\u063A", "\u{1EE42}"=>"\u062C", "\u{1EE47}"=>"\u062D", "\u{1EE49}"=>"\u064A", + "\u{1EE4B}"=>"\u0644", "\u{1EE4D}"=>"\u0646", "\u{1EE4E}"=>"\u0633", "\u{1EE4F}"=>"\u0639", "\u{1EE51}"=>"\u0635", "\u{1EE52}"=>"\u0642", "\u{1EE54}"=>"\u0634", "\u{1EE57}"=>"\u062E", + "\u{1EE59}"=>"\u0636", "\u{1EE5B}"=>"\u063A", "\u{1EE5D}"=>"\u06BA", "\u{1EE5F}"=>"\u066F", "\u{1EE61}"=>"\u0628", "\u{1EE62}"=>"\u062C", "\u{1EE64}"=>"\u0647", "\u{1EE67}"=>"\u062D", + "\u{1EE68}"=>"\u0637", "\u{1EE69}"=>"\u064A", "\u{1EE6A}"=>"\u0643", "\u{1EE6C}"=>"\u0645", "\u{1EE6D}"=>"\u0646", "\u{1EE6E}"=>"\u0633", "\u{1EE6F}"=>"\u0639", "\u{1EE70}"=>"\u0641", + "\u{1EE71}"=>"\u0635", "\u{1EE72}"=>"\u0642", "\u{1EE74}"=>"\u0634", "\u{1EE75}"=>"\u062A", "\u{1EE76}"=>"\u062B", "\u{1EE77}"=>"\u062E", "\u{1EE79}"=>"\u0636", "\u{1EE7A}"=>"\u0638", + "\u{1EE7B}"=>"\u063A", "\u{1EE7C}"=>"\u066E", "\u{1EE7E}"=>"\u06A1", "\u{1EE80}"=>"\u0627", "\u{1EE81}"=>"\u0628", "\u{1EE82}"=>"\u062C", "\u{1EE83}"=>"\u062F", "\u{1EE84}"=>"\u0647", + "\u{1EE85}"=>"\u0648", "\u{1EE86}"=>"\u0632", "\u{1EE87}"=>"\u062D", "\u{1EE88}"=>"\u0637", "\u{1EE89}"=>"\u064A", "\u{1EE8B}"=>"\u0644", "\u{1EE8C}"=>"\u0645", "\u{1EE8D}"=>"\u0646", + "\u{1EE8E}"=>"\u0633", "\u{1EE8F}"=>"\u0639", "\u{1EE90}"=>"\u0641", "\u{1EE91}"=>"\u0635", "\u{1EE92}"=>"\u0642", "\u{1EE93}"=>"\u0631", "\u{1EE94}"=>"\u0634", "\u{1EE95}"=>"\u062A", + "\u{1EE96}"=>"\u062B", "\u{1EE97}"=>"\u062E", "\u{1EE98}"=>"\u0630", "\u{1EE99}"=>"\u0636", "\u{1EE9A}"=>"\u0638", "\u{1EE9B}"=>"\u063A", "\u{1EEA1}"=>"\u0628", "\u{1EEA2}"=>"\u062C", + "\u{1EEA3}"=>"\u062F", "\u{1EEA5}"=>"\u0648", "\u{1EEA6}"=>"\u0632", "\u{1EEA7}"=>"\u062D", "\u{1EEA8}"=>"\u0637", "\u{1EEA9}"=>"\u064A", "\u{1EEAB}"=>"\u0644", "\u{1EEAC}"=>"\u0645", + "\u{1EEAD}"=>"\u0646", "\u{1EEAE}"=>"\u0633", "\u{1EEAF}"=>"\u0639", "\u{1EEB0}"=>"\u0641", "\u{1EEB1}"=>"\u0635", "\u{1EEB2}"=>"\u0642", "\u{1EEB3}"=>"\u0631", "\u{1EEB4}"=>"\u0634", + "\u{1EEB5}"=>"\u062A", "\u{1EEB6}"=>"\u062B", "\u{1EEB7}"=>"\u062E", "\u{1EEB8}"=>"\u0630", "\u{1EEB9}"=>"\u0636", "\u{1EEBA}"=>"\u0638", "\u{1EEBB}"=>"\u063A", "\u{1F100}"=>"0.", + "\u{1F101}"=>"0,", "\u{1F102}"=>"1,", "\u{1F103}"=>"2,", "\u{1F104}"=>"3,", "\u{1F105}"=>"4,", "\u{1F106}"=>"5,", "\u{1F107}"=>"6,", "\u{1F108}"=>"7,", + "\u{1F109}"=>"8,", "\u{1F10A}"=>"9,", "\u{1F110}"=>"(A)", "\u{1F111}"=>"(B)", "\u{1F112}"=>"(C)", "\u{1F113}"=>"(D)", "\u{1F114}"=>"(E)", "\u{1F115}"=>"(F)", + "\u{1F116}"=>"(G)", "\u{1F117}"=>"(H)", "\u{1F118}"=>"(I)", "\u{1F119}"=>"(J)", "\u{1F11A}"=>"(K)", "\u{1F11B}"=>"(L)", "\u{1F11C}"=>"(M)", "\u{1F11D}"=>"(N)", + "\u{1F11E}"=>"(O)", "\u{1F11F}"=>"(P)", "\u{1F120}"=>"(Q)", "\u{1F121}"=>"(R)", "\u{1F122}"=>"(S)", "\u{1F123}"=>"(T)", "\u{1F124}"=>"(U)", "\u{1F125}"=>"(V)", + "\u{1F126}"=>"(W)", "\u{1F127}"=>"(X)", "\u{1F128}"=>"(Y)", "\u{1F129}"=>"(Z)", "\u{1F12A}"=>"\u3014S\u3015", "\u{1F12B}"=>"C", "\u{1F12C}"=>"R", "\u{1F12D}"=>"CD", + "\u{1F12E}"=>"WZ", "\u{1F130}"=>"A", "\u{1F131}"=>"B", "\u{1F132}"=>"C", "\u{1F133}"=>"D", "\u{1F134}"=>"E", "\u{1F135}"=>"F", "\u{1F136}"=>"G", + "\u{1F137}"=>"H", "\u{1F138}"=>"I", "\u{1F139}"=>"J", "\u{1F13A}"=>"K", "\u{1F13B}"=>"L", "\u{1F13C}"=>"M", "\u{1F13D}"=>"N", "\u{1F13E}"=>"O", + "\u{1F13F}"=>"P", "\u{1F140}"=>"Q", "\u{1F141}"=>"R", "\u{1F142}"=>"S", "\u{1F143}"=>"T", "\u{1F144}"=>"U", "\u{1F145}"=>"V", "\u{1F146}"=>"W", + "\u{1F147}"=>"X", "\u{1F148}"=>"Y", "\u{1F149}"=>"Z", "\u{1F14A}"=>"HV", "\u{1F14B}"=>"MV", "\u{1F14C}"=>"SD", "\u{1F14D}"=>"SS", "\u{1F14E}"=>"PPV", + "\u{1F14F}"=>"WC", "\u{1F16A}"=>"MC", "\u{1F16B}"=>"MD", "\u{1F190}"=>"DJ", "\u{1F200}"=>"\u307B\u304B", "\u{1F201}"=>"\u30B3\u30B3", "\u{1F202}"=>"\u30B5", "\u{1F210}"=>"\u624B", + "\u{1F211}"=>"\u5B57", "\u{1F212}"=>"\u53CC", "\u{1F213}"=>"\u30C7", "\u{1F214}"=>"\u4E8C", "\u{1F215}"=>"\u591A", "\u{1F216}"=>"\u89E3", "\u{1F217}"=>"\u5929", "\u{1F218}"=>"\u4EA4", + "\u{1F219}"=>"\u6620", "\u{1F21A}"=>"\u7121", "\u{1F21B}"=>"\u6599", "\u{1F21C}"=>"\u524D", "\u{1F21D}"=>"\u5F8C", "\u{1F21E}"=>"\u518D", "\u{1F21F}"=>"\u65B0", "\u{1F220}"=>"\u521D", + "\u{1F221}"=>"\u7D42", "\u{1F222}"=>"\u751F", "\u{1F223}"=>"\u8CA9", "\u{1F224}"=>"\u58F0", "\u{1F225}"=>"\u5439", "\u{1F226}"=>"\u6F14", "\u{1F227}"=>"\u6295", "\u{1F228}"=>"\u6355", + "\u{1F229}"=>"\u4E00", "\u{1F22A}"=>"\u4E09", "\u{1F22B}"=>"\u904A", "\u{1F22C}"=>"\u5DE6", "\u{1F22D}"=>"\u4E2D", "\u{1F22E}"=>"\u53F3", "\u{1F22F}"=>"\u6307", "\u{1F230}"=>"\u8D70", + "\u{1F231}"=>"\u6253", "\u{1F232}"=>"\u7981", "\u{1F233}"=>"\u7A7A", "\u{1F234}"=>"\u5408", "\u{1F235}"=>"\u6E80", "\u{1F236}"=>"\u6709", "\u{1F237}"=>"\u6708", "\u{1F238}"=>"\u7533", + "\u{1F239}"=>"\u5272", "\u{1F23A}"=>"\u55B6", "\u{1F23B}"=>"\u914D", "\u{1F240}"=>"\u3014\u672C\u3015", "\u{1F241}"=>"\u3014\u4E09\u3015", "\u{1F242}"=>"\u3014\u4E8C\u3015", "\u{1F243}"=>"\u3014\u5B89\u3015", "\u{1F244}"=>"\u3014\u70B9\u3015", + "\u{1F245}"=>"\u3014\u6253\u3015", "\u{1F246}"=>"\u3014\u76D7\u3015", "\u{1F247}"=>"\u3014\u52DD\u3015", "\u{1F248}"=>"\u3014\u6557\u3015", "\u{1F250}"=>"\u5F97", "\u{1F251}"=>"\u53EF", "\u0385"=>" \u0308\u0301", "\u03D3"=>"\u03A5\u0301", + "\u03D4"=>"\u03A5\u0308", "\u1E9B"=>"s\u0307", "\u1FC1"=>" \u0308\u0342", "\u1FCD"=>" \u0313\u0300", "\u1FCE"=>" \u0313\u0301", "\u1FCF"=>" \u0313\u0342", "\u1FDD"=>" \u0314\u0300", "\u1FDE"=>" \u0314\u0301", + "\u1FDF"=>" \u0314\u0342", "\u1FED"=>" \u0308\u0300", "\u1FEE"=>" \u0308\u0301", "\u1FFD"=>" \u0301", "\u2000"=>" ", "\u2001"=>" ", + }.freeze + + COMPOSITION_TABLE = { + "A\u0300"=>"\u00C0", "A\u0301"=>"\u00C1", "A\u0302"=>"\u00C2", "A\u0303"=>"\u00C3", "A\u0308"=>"\u00C4", "A\u030A"=>"\u00C5", "C\u0327"=>"\u00C7", "E\u0300"=>"\u00C8", + "E\u0301"=>"\u00C9", "E\u0302"=>"\u00CA", "E\u0308"=>"\u00CB", "I\u0300"=>"\u00CC", "I\u0301"=>"\u00CD", "I\u0302"=>"\u00CE", "I\u0308"=>"\u00CF", "N\u0303"=>"\u00D1", + "O\u0300"=>"\u00D2", "O\u0301"=>"\u00D3", "O\u0302"=>"\u00D4", "O\u0303"=>"\u00D5", "O\u0308"=>"\u00D6", "U\u0300"=>"\u00D9", "U\u0301"=>"\u00DA", "U\u0302"=>"\u00DB", + "U\u0308"=>"\u00DC", "Y\u0301"=>"\u00DD", "a\u0300"=>"\u00E0", "a\u0301"=>"\u00E1", "a\u0302"=>"\u00E2", "a\u0303"=>"\u00E3", "a\u0308"=>"\u00E4", "a\u030A"=>"\u00E5", + "c\u0327"=>"\u00E7", "e\u0300"=>"\u00E8", "e\u0301"=>"\u00E9", "e\u0302"=>"\u00EA", "e\u0308"=>"\u00EB", "i\u0300"=>"\u00EC", "i\u0301"=>"\u00ED", "i\u0302"=>"\u00EE", + "i\u0308"=>"\u00EF", "n\u0303"=>"\u00F1", "o\u0300"=>"\u00F2", "o\u0301"=>"\u00F3", "o\u0302"=>"\u00F4", "o\u0303"=>"\u00F5", "o\u0308"=>"\u00F6", "u\u0300"=>"\u00F9", + "u\u0301"=>"\u00FA", "u\u0302"=>"\u00FB", "u\u0308"=>"\u00FC", "y\u0301"=>"\u00FD", "y\u0308"=>"\u00FF", "A\u0304"=>"\u0100", "a\u0304"=>"\u0101", "A\u0306"=>"\u0102", + "a\u0306"=>"\u0103", "A\u0328"=>"\u0104", "a\u0328"=>"\u0105", "C\u0301"=>"\u0106", "c\u0301"=>"\u0107", "C\u0302"=>"\u0108", "c\u0302"=>"\u0109", "C\u0307"=>"\u010A", + "c\u0307"=>"\u010B", "C\u030C"=>"\u010C", "c\u030C"=>"\u010D", "D\u030C"=>"\u010E", "d\u030C"=>"\u010F", "E\u0304"=>"\u0112", "e\u0304"=>"\u0113", "E\u0306"=>"\u0114", + "e\u0306"=>"\u0115", "E\u0307"=>"\u0116", "e\u0307"=>"\u0117", "E\u0328"=>"\u0118", "e\u0328"=>"\u0119", "E\u030C"=>"\u011A", "e\u030C"=>"\u011B", "G\u0302"=>"\u011C", + "g\u0302"=>"\u011D", "G\u0306"=>"\u011E", "g\u0306"=>"\u011F", "G\u0307"=>"\u0120", "g\u0307"=>"\u0121", "G\u0327"=>"\u0122", "g\u0327"=>"\u0123", "H\u0302"=>"\u0124", + "h\u0302"=>"\u0125", "I\u0303"=>"\u0128", "i\u0303"=>"\u0129", "I\u0304"=>"\u012A", "i\u0304"=>"\u012B", "I\u0306"=>"\u012C", "i\u0306"=>"\u012D", "I\u0328"=>"\u012E", + "i\u0328"=>"\u012F", "I\u0307"=>"\u0130", "J\u0302"=>"\u0134", "j\u0302"=>"\u0135", "K\u0327"=>"\u0136", "k\u0327"=>"\u0137", "L\u0301"=>"\u0139", "l\u0301"=>"\u013A", + "L\u0327"=>"\u013B", "l\u0327"=>"\u013C", "L\u030C"=>"\u013D", "l\u030C"=>"\u013E", "N\u0301"=>"\u0143", "n\u0301"=>"\u0144", "N\u0327"=>"\u0145", "n\u0327"=>"\u0146", + "N\u030C"=>"\u0147", "n\u030C"=>"\u0148", "O\u0304"=>"\u014C", "o\u0304"=>"\u014D", "O\u0306"=>"\u014E", "o\u0306"=>"\u014F", "O\u030B"=>"\u0150", "o\u030B"=>"\u0151", + "R\u0301"=>"\u0154", "r\u0301"=>"\u0155", "R\u0327"=>"\u0156", "r\u0327"=>"\u0157", "R\u030C"=>"\u0158", "r\u030C"=>"\u0159", "S\u0301"=>"\u015A", "s\u0301"=>"\u015B", + "S\u0302"=>"\u015C", "s\u0302"=>"\u015D", "S\u0327"=>"\u015E", "s\u0327"=>"\u015F", "S\u030C"=>"\u0160", "s\u030C"=>"\u0161", "T\u0327"=>"\u0162", "t\u0327"=>"\u0163", + "T\u030C"=>"\u0164", "t\u030C"=>"\u0165", "U\u0303"=>"\u0168", "u\u0303"=>"\u0169", "U\u0304"=>"\u016A", "u\u0304"=>"\u016B", "U\u0306"=>"\u016C", "u\u0306"=>"\u016D", + "U\u030A"=>"\u016E", "u\u030A"=>"\u016F", "U\u030B"=>"\u0170", "u\u030B"=>"\u0171", "U\u0328"=>"\u0172", "u\u0328"=>"\u0173", "W\u0302"=>"\u0174", "w\u0302"=>"\u0175", + "Y\u0302"=>"\u0176", "y\u0302"=>"\u0177", "Y\u0308"=>"\u0178", "Z\u0301"=>"\u0179", "z\u0301"=>"\u017A", "Z\u0307"=>"\u017B", "z\u0307"=>"\u017C", "Z\u030C"=>"\u017D", + "z\u030C"=>"\u017E", "O\u031B"=>"\u01A0", "o\u031B"=>"\u01A1", "U\u031B"=>"\u01AF", "u\u031B"=>"\u01B0", "A\u030C"=>"\u01CD", "a\u030C"=>"\u01CE", "I\u030C"=>"\u01CF", + "i\u030C"=>"\u01D0", "O\u030C"=>"\u01D1", "o\u030C"=>"\u01D2", "U\u030C"=>"\u01D3", "u\u030C"=>"\u01D4", "\u00DC\u0304"=>"\u01D5", "\u00FC\u0304"=>"\u01D6", "\u00DC\u0301"=>"\u01D7", + "\u00FC\u0301"=>"\u01D8", "\u00DC\u030C"=>"\u01D9", "\u00FC\u030C"=>"\u01DA", "\u00DC\u0300"=>"\u01DB", "\u00FC\u0300"=>"\u01DC", "\u00C4\u0304"=>"\u01DE", "\u00E4\u0304"=>"\u01DF", "\u0226\u0304"=>"\u01E0", + "\u0227\u0304"=>"\u01E1", "\u00C6\u0304"=>"\u01E2", "\u00E6\u0304"=>"\u01E3", "G\u030C"=>"\u01E6", "g\u030C"=>"\u01E7", "K\u030C"=>"\u01E8", "k\u030C"=>"\u01E9", "O\u0328"=>"\u01EA", + "o\u0328"=>"\u01EB", "\u01EA\u0304"=>"\u01EC", "\u01EB\u0304"=>"\u01ED", "\u01B7\u030C"=>"\u01EE", "\u0292\u030C"=>"\u01EF", "j\u030C"=>"\u01F0", "G\u0301"=>"\u01F4", "g\u0301"=>"\u01F5", + "N\u0300"=>"\u01F8", "n\u0300"=>"\u01F9", "\u00C5\u0301"=>"\u01FA", "\u00E5\u0301"=>"\u01FB", "\u00C6\u0301"=>"\u01FC", "\u00E6\u0301"=>"\u01FD", "\u00D8\u0301"=>"\u01FE", "\u00F8\u0301"=>"\u01FF", + "A\u030F"=>"\u0200", "a\u030F"=>"\u0201", "A\u0311"=>"\u0202", "a\u0311"=>"\u0203", "E\u030F"=>"\u0204", "e\u030F"=>"\u0205", "E\u0311"=>"\u0206", "e\u0311"=>"\u0207", + "I\u030F"=>"\u0208", "i\u030F"=>"\u0209", "I\u0311"=>"\u020A", "i\u0311"=>"\u020B", "O\u030F"=>"\u020C", "o\u030F"=>"\u020D", "O\u0311"=>"\u020E", "o\u0311"=>"\u020F", + "R\u030F"=>"\u0210", "r\u030F"=>"\u0211", "R\u0311"=>"\u0212", "r\u0311"=>"\u0213", "U\u030F"=>"\u0214", "u\u030F"=>"\u0215", "U\u0311"=>"\u0216", "u\u0311"=>"\u0217", + "S\u0326"=>"\u0218", "s\u0326"=>"\u0219", "T\u0326"=>"\u021A", "t\u0326"=>"\u021B", "H\u030C"=>"\u021E", "h\u030C"=>"\u021F", "A\u0307"=>"\u0226", "a\u0307"=>"\u0227", + "E\u0327"=>"\u0228", "e\u0327"=>"\u0229", "\u00D6\u0304"=>"\u022A", "\u00F6\u0304"=>"\u022B", "\u00D5\u0304"=>"\u022C", "\u00F5\u0304"=>"\u022D", "O\u0307"=>"\u022E", "o\u0307"=>"\u022F", + "\u022E\u0304"=>"\u0230", "\u022F\u0304"=>"\u0231", "Y\u0304"=>"\u0232", "y\u0304"=>"\u0233", "\u00A8\u0301"=>"\u0385", "\u0391\u0301"=>"\u0386", "\u0395\u0301"=>"\u0388", "\u0397\u0301"=>"\u0389", + "\u0399\u0301"=>"\u038A", "\u039F\u0301"=>"\u038C", "\u03A5\u0301"=>"\u038E", "\u03A9\u0301"=>"\u038F", "\u03CA\u0301"=>"\u0390", "\u0399\u0308"=>"\u03AA", "\u03A5\u0308"=>"\u03AB", "\u03B1\u0301"=>"\u03AC", + "\u03B5\u0301"=>"\u03AD", "\u03B7\u0301"=>"\u03AE", "\u03B9\u0301"=>"\u03AF", "\u03CB\u0301"=>"\u03B0", "\u03B9\u0308"=>"\u03CA", "\u03C5\u0308"=>"\u03CB", "\u03BF\u0301"=>"\u03CC", "\u03C5\u0301"=>"\u03CD", + "\u03C9\u0301"=>"\u03CE", "\u03D2\u0301"=>"\u03D3", "\u03D2\u0308"=>"\u03D4", "\u0415\u0300"=>"\u0400", "\u0415\u0308"=>"\u0401", "\u0413\u0301"=>"\u0403", "\u0406\u0308"=>"\u0407", "\u041A\u0301"=>"\u040C", + "\u0418\u0300"=>"\u040D", "\u0423\u0306"=>"\u040E", "\u0418\u0306"=>"\u0419", "\u0438\u0306"=>"\u0439", "\u0435\u0300"=>"\u0450", "\u0435\u0308"=>"\u0451", "\u0433\u0301"=>"\u0453", "\u0456\u0308"=>"\u0457", + "\u043A\u0301"=>"\u045C", "\u0438\u0300"=>"\u045D", "\u0443\u0306"=>"\u045E", "\u0474\u030F"=>"\u0476", "\u0475\u030F"=>"\u0477", "\u0416\u0306"=>"\u04C1", "\u0436\u0306"=>"\u04C2", "\u0410\u0306"=>"\u04D0", + "\u0430\u0306"=>"\u04D1", "\u0410\u0308"=>"\u04D2", "\u0430\u0308"=>"\u04D3", "\u0415\u0306"=>"\u04D6", "\u0435\u0306"=>"\u04D7", "\u04D8\u0308"=>"\u04DA", "\u04D9\u0308"=>"\u04DB", "\u0416\u0308"=>"\u04DC", + "\u0436\u0308"=>"\u04DD", "\u0417\u0308"=>"\u04DE", "\u0437\u0308"=>"\u04DF", "\u0418\u0304"=>"\u04E2", "\u0438\u0304"=>"\u04E3", "\u0418\u0308"=>"\u04E4", "\u0438\u0308"=>"\u04E5", "\u041E\u0308"=>"\u04E6", + "\u043E\u0308"=>"\u04E7", "\u04E8\u0308"=>"\u04EA", "\u04E9\u0308"=>"\u04EB", "\u042D\u0308"=>"\u04EC", "\u044D\u0308"=>"\u04ED", "\u0423\u0304"=>"\u04EE", "\u0443\u0304"=>"\u04EF", "\u0423\u0308"=>"\u04F0", + "\u0443\u0308"=>"\u04F1", "\u0423\u030B"=>"\u04F2", "\u0443\u030B"=>"\u04F3", "\u0427\u0308"=>"\u04F4", "\u0447\u0308"=>"\u04F5", "\u042B\u0308"=>"\u04F8", "\u044B\u0308"=>"\u04F9", "\u0627\u0653"=>"\u0622", + "\u0627\u0654"=>"\u0623", "\u0648\u0654"=>"\u0624", "\u0627\u0655"=>"\u0625", "\u064A\u0654"=>"\u0626", "\u06D5\u0654"=>"\u06C0", "\u06C1\u0654"=>"\u06C2", "\u06D2\u0654"=>"\u06D3", "\u0928\u093C"=>"\u0929", + "\u0930\u093C"=>"\u0931", "\u0933\u093C"=>"\u0934", "\u09C7\u09BE"=>"\u09CB", "\u09C7\u09D7"=>"\u09CC", "\u0B47\u0B56"=>"\u0B48", "\u0B47\u0B3E"=>"\u0B4B", "\u0B47\u0B57"=>"\u0B4C", "\u0B92\u0BD7"=>"\u0B94", + "\u0BC6\u0BBE"=>"\u0BCA", "\u0BC7\u0BBE"=>"\u0BCB", "\u0BC6\u0BD7"=>"\u0BCC", "\u0C46\u0C56"=>"\u0C48", "\u0CBF\u0CD5"=>"\u0CC0", "\u0CC6\u0CD5"=>"\u0CC7", "\u0CC6\u0CD6"=>"\u0CC8", "\u0CC6\u0CC2"=>"\u0CCA", + "\u0CCA\u0CD5"=>"\u0CCB", "\u0D46\u0D3E"=>"\u0D4A", "\u0D47\u0D3E"=>"\u0D4B", "\u0D46\u0D57"=>"\u0D4C", "\u0DD9\u0DCA"=>"\u0DDA", "\u0DD9\u0DCF"=>"\u0DDC", "\u0DDC\u0DCA"=>"\u0DDD", "\u0DD9\u0DDF"=>"\u0DDE", + "\u1025\u102E"=>"\u1026", "\u1B05\u1B35"=>"\u1B06", "\u1B07\u1B35"=>"\u1B08", "\u1B09\u1B35"=>"\u1B0A", "\u1B0B\u1B35"=>"\u1B0C", "\u1B0D\u1B35"=>"\u1B0E", "\u1B11\u1B35"=>"\u1B12", "\u1B3A\u1B35"=>"\u1B3B", + "\u1B3C\u1B35"=>"\u1B3D", "\u1B3E\u1B35"=>"\u1B40", "\u1B3F\u1B35"=>"\u1B41", "\u1B42\u1B35"=>"\u1B43", "A\u0325"=>"\u1E00", "a\u0325"=>"\u1E01", "B\u0307"=>"\u1E02", "b\u0307"=>"\u1E03", + "B\u0323"=>"\u1E04", "b\u0323"=>"\u1E05", "B\u0331"=>"\u1E06", "b\u0331"=>"\u1E07", "\u00C7\u0301"=>"\u1E08", "\u00E7\u0301"=>"\u1E09", "D\u0307"=>"\u1E0A", "d\u0307"=>"\u1E0B", + "D\u0323"=>"\u1E0C", "d\u0323"=>"\u1E0D", "D\u0331"=>"\u1E0E", "d\u0331"=>"\u1E0F", "D\u0327"=>"\u1E10", "d\u0327"=>"\u1E11", "D\u032D"=>"\u1E12", "d\u032D"=>"\u1E13", + "\u0112\u0300"=>"\u1E14", "\u0113\u0300"=>"\u1E15", "\u0112\u0301"=>"\u1E16", "\u0113\u0301"=>"\u1E17", "E\u032D"=>"\u1E18", "e\u032D"=>"\u1E19", "E\u0330"=>"\u1E1A", "e\u0330"=>"\u1E1B", + "\u0228\u0306"=>"\u1E1C", "\u0229\u0306"=>"\u1E1D", "F\u0307"=>"\u1E1E", "f\u0307"=>"\u1E1F", "G\u0304"=>"\u1E20", "g\u0304"=>"\u1E21", "H\u0307"=>"\u1E22", "h\u0307"=>"\u1E23", + "H\u0323"=>"\u1E24", "h\u0323"=>"\u1E25", "H\u0308"=>"\u1E26", "h\u0308"=>"\u1E27", "H\u0327"=>"\u1E28", "h\u0327"=>"\u1E29", "H\u032E"=>"\u1E2A", "h\u032E"=>"\u1E2B", + "I\u0330"=>"\u1E2C", "i\u0330"=>"\u1E2D", "\u00CF\u0301"=>"\u1E2E", "\u00EF\u0301"=>"\u1E2F", "K\u0301"=>"\u1E30", "k\u0301"=>"\u1E31", "K\u0323"=>"\u1E32", "k\u0323"=>"\u1E33", + "K\u0331"=>"\u1E34", "k\u0331"=>"\u1E35", "L\u0323"=>"\u1E36", "l\u0323"=>"\u1E37", "\u1E36\u0304"=>"\u1E38", "\u1E37\u0304"=>"\u1E39", "L\u0331"=>"\u1E3A", "l\u0331"=>"\u1E3B", + "L\u032D"=>"\u1E3C", "l\u032D"=>"\u1E3D", "M\u0301"=>"\u1E3E", "m\u0301"=>"\u1E3F", "M\u0307"=>"\u1E40", "m\u0307"=>"\u1E41", "M\u0323"=>"\u1E42", "m\u0323"=>"\u1E43", + "N\u0307"=>"\u1E44", "n\u0307"=>"\u1E45", "N\u0323"=>"\u1E46", "n\u0323"=>"\u1E47", "N\u0331"=>"\u1E48", "n\u0331"=>"\u1E49", "N\u032D"=>"\u1E4A", "n\u032D"=>"\u1E4B", + "\u00D5\u0301"=>"\u1E4C", "\u00F5\u0301"=>"\u1E4D", "\u00D5\u0308"=>"\u1E4E", "\u00F5\u0308"=>"\u1E4F", "\u014C\u0300"=>"\u1E50", "\u014D\u0300"=>"\u1E51", "\u014C\u0301"=>"\u1E52", "\u014D\u0301"=>"\u1E53", + "P\u0301"=>"\u1E54", "p\u0301"=>"\u1E55", "P\u0307"=>"\u1E56", "p\u0307"=>"\u1E57", "R\u0307"=>"\u1E58", "r\u0307"=>"\u1E59", "R\u0323"=>"\u1E5A", "r\u0323"=>"\u1E5B", + "\u1E5A\u0304"=>"\u1E5C", "\u1E5B\u0304"=>"\u1E5D", "R\u0331"=>"\u1E5E", "r\u0331"=>"\u1E5F", "S\u0307"=>"\u1E60", "s\u0307"=>"\u1E61", "S\u0323"=>"\u1E62", "s\u0323"=>"\u1E63", + "\u015A\u0307"=>"\u1E64", "\u015B\u0307"=>"\u1E65", "\u0160\u0307"=>"\u1E66", "\u0161\u0307"=>"\u1E67", "\u1E62\u0307"=>"\u1E68", "\u1E63\u0307"=>"\u1E69", "T\u0307"=>"\u1E6A", "t\u0307"=>"\u1E6B", + "T\u0323"=>"\u1E6C", "t\u0323"=>"\u1E6D", "T\u0331"=>"\u1E6E", "t\u0331"=>"\u1E6F", "T\u032D"=>"\u1E70", "t\u032D"=>"\u1E71", "U\u0324"=>"\u1E72", "u\u0324"=>"\u1E73", + "U\u0330"=>"\u1E74", "u\u0330"=>"\u1E75", "U\u032D"=>"\u1E76", "u\u032D"=>"\u1E77", "\u0168\u0301"=>"\u1E78", "\u0169\u0301"=>"\u1E79", "\u016A\u0308"=>"\u1E7A", "\u016B\u0308"=>"\u1E7B", + "V\u0303"=>"\u1E7C", "v\u0303"=>"\u1E7D", "V\u0323"=>"\u1E7E", "v\u0323"=>"\u1E7F", "W\u0300"=>"\u1E80", "w\u0300"=>"\u1E81", "W\u0301"=>"\u1E82", "w\u0301"=>"\u1E83", + "W\u0308"=>"\u1E84", "w\u0308"=>"\u1E85", "W\u0307"=>"\u1E86", "w\u0307"=>"\u1E87", "W\u0323"=>"\u1E88", "w\u0323"=>"\u1E89", "X\u0307"=>"\u1E8A", "x\u0307"=>"\u1E8B", + "X\u0308"=>"\u1E8C", "x\u0308"=>"\u1E8D", "Y\u0307"=>"\u1E8E", "y\u0307"=>"\u1E8F", "Z\u0302"=>"\u1E90", "z\u0302"=>"\u1E91", "Z\u0323"=>"\u1E92", "z\u0323"=>"\u1E93", + "Z\u0331"=>"\u1E94", "z\u0331"=>"\u1E95", "h\u0331"=>"\u1E96", "t\u0308"=>"\u1E97", "w\u030A"=>"\u1E98", "y\u030A"=>"\u1E99", "\u017F\u0307"=>"\u1E9B", "A\u0323"=>"\u1EA0", + "a\u0323"=>"\u1EA1", "A\u0309"=>"\u1EA2", "a\u0309"=>"\u1EA3", "\u00C2\u0301"=>"\u1EA4", "\u00E2\u0301"=>"\u1EA5", "\u00C2\u0300"=>"\u1EA6", "\u00E2\u0300"=>"\u1EA7", "\u00C2\u0309"=>"\u1EA8", + "\u00E2\u0309"=>"\u1EA9", "\u00C2\u0303"=>"\u1EAA", "\u00E2\u0303"=>"\u1EAB", "\u1EA0\u0302"=>"\u1EAC", "\u1EA1\u0302"=>"\u1EAD", "\u0102\u0301"=>"\u1EAE", "\u0103\u0301"=>"\u1EAF", "\u0102\u0300"=>"\u1EB0", + "\u0103\u0300"=>"\u1EB1", "\u0102\u0309"=>"\u1EB2", "\u0103\u0309"=>"\u1EB3", "\u0102\u0303"=>"\u1EB4", "\u0103\u0303"=>"\u1EB5", "\u1EA0\u0306"=>"\u1EB6", "\u1EA1\u0306"=>"\u1EB7", "E\u0323"=>"\u1EB8", + "e\u0323"=>"\u1EB9", "E\u0309"=>"\u1EBA", "e\u0309"=>"\u1EBB", "E\u0303"=>"\u1EBC", "e\u0303"=>"\u1EBD", "\u00CA\u0301"=>"\u1EBE", "\u00EA\u0301"=>"\u1EBF", "\u00CA\u0300"=>"\u1EC0", + "\u00EA\u0300"=>"\u1EC1", "\u00CA\u0309"=>"\u1EC2", "\u00EA\u0309"=>"\u1EC3", "\u00CA\u0303"=>"\u1EC4", "\u00EA\u0303"=>"\u1EC5", "\u1EB8\u0302"=>"\u1EC6", "\u1EB9\u0302"=>"\u1EC7", "I\u0309"=>"\u1EC8", + "i\u0309"=>"\u1EC9", "I\u0323"=>"\u1ECA", "i\u0323"=>"\u1ECB", "O\u0323"=>"\u1ECC", "o\u0323"=>"\u1ECD", "O\u0309"=>"\u1ECE", "o\u0309"=>"\u1ECF", "\u00D4\u0301"=>"\u1ED0", + "\u00F4\u0301"=>"\u1ED1", "\u00D4\u0300"=>"\u1ED2", "\u00F4\u0300"=>"\u1ED3", "\u00D4\u0309"=>"\u1ED4", "\u00F4\u0309"=>"\u1ED5", "\u00D4\u0303"=>"\u1ED6", "\u00F4\u0303"=>"\u1ED7", "\u1ECC\u0302"=>"\u1ED8", + "\u1ECD\u0302"=>"\u1ED9", "\u01A0\u0301"=>"\u1EDA", "\u01A1\u0301"=>"\u1EDB", "\u01A0\u0300"=>"\u1EDC", "\u01A1\u0300"=>"\u1EDD", "\u01A0\u0309"=>"\u1EDE", "\u01A1\u0309"=>"\u1EDF", "\u01A0\u0303"=>"\u1EE0", + "\u01A1\u0303"=>"\u1EE1", "\u01A0\u0323"=>"\u1EE2", "\u01A1\u0323"=>"\u1EE3", "U\u0323"=>"\u1EE4", "u\u0323"=>"\u1EE5", "U\u0309"=>"\u1EE6", "u\u0309"=>"\u1EE7", "\u01AF\u0301"=>"\u1EE8", + "\u01B0\u0301"=>"\u1EE9", "\u01AF\u0300"=>"\u1EEA", "\u01B0\u0300"=>"\u1EEB", "\u01AF\u0309"=>"\u1EEC", "\u01B0\u0309"=>"\u1EED", "\u01AF\u0303"=>"\u1EEE", "\u01B0\u0303"=>"\u1EEF", "\u01AF\u0323"=>"\u1EF0", + "\u01B0\u0323"=>"\u1EF1", "Y\u0300"=>"\u1EF2", "y\u0300"=>"\u1EF3", "Y\u0323"=>"\u1EF4", "y\u0323"=>"\u1EF5", "Y\u0309"=>"\u1EF6", "y\u0309"=>"\u1EF7", "Y\u0303"=>"\u1EF8", + "y\u0303"=>"\u1EF9", "\u03B1\u0313"=>"\u1F00", "\u03B1\u0314"=>"\u1F01", "\u1F00\u0300"=>"\u1F02", "\u1F01\u0300"=>"\u1F03", "\u1F00\u0301"=>"\u1F04", "\u1F01\u0301"=>"\u1F05", "\u1F00\u0342"=>"\u1F06", + "\u1F01\u0342"=>"\u1F07", "\u0391\u0313"=>"\u1F08", "\u0391\u0314"=>"\u1F09", "\u1F08\u0300"=>"\u1F0A", "\u1F09\u0300"=>"\u1F0B", "\u1F08\u0301"=>"\u1F0C", "\u1F09\u0301"=>"\u1F0D", "\u1F08\u0342"=>"\u1F0E", + "\u1F09\u0342"=>"\u1F0F", "\u03B5\u0313"=>"\u1F10", "\u03B5\u0314"=>"\u1F11", "\u1F10\u0300"=>"\u1F12", "\u1F11\u0300"=>"\u1F13", "\u1F10\u0301"=>"\u1F14", "\u1F11\u0301"=>"\u1F15", "\u0395\u0313"=>"\u1F18", + "\u0395\u0314"=>"\u1F19", "\u1F18\u0300"=>"\u1F1A", "\u1F19\u0300"=>"\u1F1B", "\u1F18\u0301"=>"\u1F1C", "\u1F19\u0301"=>"\u1F1D", "\u03B7\u0313"=>"\u1F20", "\u03B7\u0314"=>"\u1F21", "\u1F20\u0300"=>"\u1F22", + "\u1F21\u0300"=>"\u1F23", "\u1F20\u0301"=>"\u1F24", "\u1F21\u0301"=>"\u1F25", "\u1F20\u0342"=>"\u1F26", "\u1F21\u0342"=>"\u1F27", "\u0397\u0313"=>"\u1F28", "\u0397\u0314"=>"\u1F29", "\u1F28\u0300"=>"\u1F2A", + "\u1F29\u0300"=>"\u1F2B", "\u1F28\u0301"=>"\u1F2C", "\u1F29\u0301"=>"\u1F2D", "\u1F28\u0342"=>"\u1F2E", "\u1F29\u0342"=>"\u1F2F", "\u03B9\u0313"=>"\u1F30", "\u03B9\u0314"=>"\u1F31", "\u1F30\u0300"=>"\u1F32", + "\u1F31\u0300"=>"\u1F33", "\u1F30\u0301"=>"\u1F34", "\u1F31\u0301"=>"\u1F35", "\u1F30\u0342"=>"\u1F36", "\u1F31\u0342"=>"\u1F37", "\u0399\u0313"=>"\u1F38", "\u0399\u0314"=>"\u1F39", "\u1F38\u0300"=>"\u1F3A", + "\u1F39\u0300"=>"\u1F3B", "\u1F38\u0301"=>"\u1F3C", "\u1F39\u0301"=>"\u1F3D", "\u1F38\u0342"=>"\u1F3E", "\u1F39\u0342"=>"\u1F3F", "\u03BF\u0313"=>"\u1F40", "\u03BF\u0314"=>"\u1F41", "\u1F40\u0300"=>"\u1F42", + "\u1F41\u0300"=>"\u1F43", "\u1F40\u0301"=>"\u1F44", "\u1F41\u0301"=>"\u1F45", "\u039F\u0313"=>"\u1F48", "\u039F\u0314"=>"\u1F49", "\u1F48\u0300"=>"\u1F4A", "\u1F49\u0300"=>"\u1F4B", "\u1F48\u0301"=>"\u1F4C", + "\u1F49\u0301"=>"\u1F4D", "\u03C5\u0313"=>"\u1F50", "\u03C5\u0314"=>"\u1F51", "\u1F50\u0300"=>"\u1F52", "\u1F51\u0300"=>"\u1F53", "\u1F50\u0301"=>"\u1F54", "\u1F51\u0301"=>"\u1F55", "\u1F50\u0342"=>"\u1F56", + "\u1F51\u0342"=>"\u1F57", "\u03A5\u0314"=>"\u1F59", "\u1F59\u0300"=>"\u1F5B", "\u1F59\u0301"=>"\u1F5D", "\u1F59\u0342"=>"\u1F5F", "\u03C9\u0313"=>"\u1F60", "\u03C9\u0314"=>"\u1F61", "\u1F60\u0300"=>"\u1F62", + "\u1F61\u0300"=>"\u1F63", "\u1F60\u0301"=>"\u1F64", "\u1F61\u0301"=>"\u1F65", "\u1F60\u0342"=>"\u1F66", "\u1F61\u0342"=>"\u1F67", "\u03A9\u0313"=>"\u1F68", "\u03A9\u0314"=>"\u1F69", "\u1F68\u0300"=>"\u1F6A", + "\u1F69\u0300"=>"\u1F6B", "\u1F68\u0301"=>"\u1F6C", "\u1F69\u0301"=>"\u1F6D", "\u1F68\u0342"=>"\u1F6E", "\u1F69\u0342"=>"\u1F6F", "\u03B1\u0300"=>"\u1F70", "\u03B5\u0300"=>"\u1F72", "\u03B7\u0300"=>"\u1F74", + "\u03B9\u0300"=>"\u1F76", "\u03BF\u0300"=>"\u1F78", "\u03C5\u0300"=>"\u1F7A", "\u03C9\u0300"=>"\u1F7C", "\u1F00\u0345"=>"\u1F80", "\u1F01\u0345"=>"\u1F81", "\u1F02\u0345"=>"\u1F82", "\u1F03\u0345"=>"\u1F83", + "\u1F04\u0345"=>"\u1F84", "\u1F05\u0345"=>"\u1F85", "\u1F06\u0345"=>"\u1F86", "\u1F07\u0345"=>"\u1F87", "\u1F08\u0345"=>"\u1F88", "\u1F09\u0345"=>"\u1F89", "\u1F0A\u0345"=>"\u1F8A", "\u1F0B\u0345"=>"\u1F8B", + "\u1F0C\u0345"=>"\u1F8C", "\u1F0D\u0345"=>"\u1F8D", "\u1F0E\u0345"=>"\u1F8E", "\u1F0F\u0345"=>"\u1F8F", "\u1F20\u0345"=>"\u1F90", "\u1F21\u0345"=>"\u1F91", "\u1F22\u0345"=>"\u1F92", "\u1F23\u0345"=>"\u1F93", + "\u1F24\u0345"=>"\u1F94", "\u1F25\u0345"=>"\u1F95", "\u1F26\u0345"=>"\u1F96", "\u1F27\u0345"=>"\u1F97", "\u1F28\u0345"=>"\u1F98", "\u1F29\u0345"=>"\u1F99", "\u1F2A\u0345"=>"\u1F9A", "\u1F2B\u0345"=>"\u1F9B", + "\u1F2C\u0345"=>"\u1F9C", "\u1F2D\u0345"=>"\u1F9D", "\u1F2E\u0345"=>"\u1F9E", "\u1F2F\u0345"=>"\u1F9F", "\u1F60\u0345"=>"\u1FA0", "\u1F61\u0345"=>"\u1FA1", "\u1F62\u0345"=>"\u1FA2", "\u1F63\u0345"=>"\u1FA3", + "\u1F64\u0345"=>"\u1FA4", "\u1F65\u0345"=>"\u1FA5", "\u1F66\u0345"=>"\u1FA6", "\u1F67\u0345"=>"\u1FA7", "\u1F68\u0345"=>"\u1FA8", "\u1F69\u0345"=>"\u1FA9", "\u1F6A\u0345"=>"\u1FAA", "\u1F6B\u0345"=>"\u1FAB", + "\u1F6C\u0345"=>"\u1FAC", "\u1F6D\u0345"=>"\u1FAD", "\u1F6E\u0345"=>"\u1FAE", "\u1F6F\u0345"=>"\u1FAF", "\u03B1\u0306"=>"\u1FB0", "\u03B1\u0304"=>"\u1FB1", "\u1F70\u0345"=>"\u1FB2", "\u03B1\u0345"=>"\u1FB3", + "\u03AC\u0345"=>"\u1FB4", "\u03B1\u0342"=>"\u1FB6", "\u1FB6\u0345"=>"\u1FB7", "\u0391\u0306"=>"\u1FB8", "\u0391\u0304"=>"\u1FB9", "\u0391\u0300"=>"\u1FBA", "\u0391\u0345"=>"\u1FBC", "\u00A8\u0342"=>"\u1FC1", + "\u1F74\u0345"=>"\u1FC2", "\u03B7\u0345"=>"\u1FC3", "\u03AE\u0345"=>"\u1FC4", "\u03B7\u0342"=>"\u1FC6", "\u1FC6\u0345"=>"\u1FC7", "\u0395\u0300"=>"\u1FC8", "\u0397\u0300"=>"\u1FCA", "\u0397\u0345"=>"\u1FCC", + "\u1FBF\u0300"=>"\u1FCD", "\u1FBF\u0301"=>"\u1FCE", "\u1FBF\u0342"=>"\u1FCF", "\u03B9\u0306"=>"\u1FD0", "\u03B9\u0304"=>"\u1FD1", "\u03CA\u0300"=>"\u1FD2", "\u03B9\u0342"=>"\u1FD6", "\u03CA\u0342"=>"\u1FD7", + "\u0399\u0306"=>"\u1FD8", "\u0399\u0304"=>"\u1FD9", "\u0399\u0300"=>"\u1FDA", "\u1FFE\u0300"=>"\u1FDD", "\u1FFE\u0301"=>"\u1FDE", "\u1FFE\u0342"=>"\u1FDF", "\u03C5\u0306"=>"\u1FE0", "\u03C5\u0304"=>"\u1FE1", + "\u03CB\u0300"=>"\u1FE2", "\u03C1\u0313"=>"\u1FE4", "\u03C1\u0314"=>"\u1FE5", "\u03C5\u0342"=>"\u1FE6", "\u03CB\u0342"=>"\u1FE7", "\u03A5\u0306"=>"\u1FE8", "\u03A5\u0304"=>"\u1FE9", "\u03A5\u0300"=>"\u1FEA", + "\u03A1\u0314"=>"\u1FEC", "\u00A8\u0300"=>"\u1FED", "\u1F7C\u0345"=>"\u1FF2", "\u03C9\u0345"=>"\u1FF3", "\u03CE\u0345"=>"\u1FF4", "\u03C9\u0342"=>"\u1FF6", "\u1FF6\u0345"=>"\u1FF7", "\u039F\u0300"=>"\u1FF8", + "\u03A9\u0300"=>"\u1FFA", "\u03A9\u0345"=>"\u1FFC", "\u2190\u0338"=>"\u219A", "\u2192\u0338"=>"\u219B", "\u2194\u0338"=>"\u21AE", "\u21D0\u0338"=>"\u21CD", "\u21D4\u0338"=>"\u21CE", "\u21D2\u0338"=>"\u21CF", + "\u2203\u0338"=>"\u2204", "\u2208\u0338"=>"\u2209", "\u220B\u0338"=>"\u220C", "\u2223\u0338"=>"\u2224", "\u2225\u0338"=>"\u2226", "\u223C\u0338"=>"\u2241", "\u2243\u0338"=>"\u2244", "\u2245\u0338"=>"\u2247", + "\u2248\u0338"=>"\u2249", "=\u0338"=>"\u2260", "\u2261\u0338"=>"\u2262", "\u224D\u0338"=>"\u226D", "<\u0338"=>"\u226E", ">\u0338"=>"\u226F", "\u2264\u0338"=>"\u2270", "\u2265\u0338"=>"\u2271", + "\u2272\u0338"=>"\u2274", "\u2273\u0338"=>"\u2275", "\u2276\u0338"=>"\u2278", "\u2277\u0338"=>"\u2279", "\u227A\u0338"=>"\u2280", "\u227B\u0338"=>"\u2281", "\u2282\u0338"=>"\u2284", "\u2283\u0338"=>"\u2285", + "\u2286\u0338"=>"\u2288", "\u2287\u0338"=>"\u2289", "\u22A2\u0338"=>"\u22AC", "\u22A8\u0338"=>"\u22AD", "\u22A9\u0338"=>"\u22AE", "\u22AB\u0338"=>"\u22AF", "\u227C\u0338"=>"\u22E0", "\u227D\u0338"=>"\u22E1", + "\u2291\u0338"=>"\u22E2", "\u2292\u0338"=>"\u22E3", "\u22B2\u0338"=>"\u22EA", "\u22B3\u0338"=>"\u22EB", "\u22B4\u0338"=>"\u22EC", "\u22B5\u0338"=>"\u22ED", "\u304B\u3099"=>"\u304C", "\u304D\u3099"=>"\u304E", + "\u304F\u3099"=>"\u3050", "\u3051\u3099"=>"\u3052", "\u3053\u3099"=>"\u3054", "\u3055\u3099"=>"\u3056", "\u3057\u3099"=>"\u3058", "\u3059\u3099"=>"\u305A", "\u305B\u3099"=>"\u305C", "\u305D\u3099"=>"\u305E", + "\u305F\u3099"=>"\u3060", "\u3061\u3099"=>"\u3062", "\u3064\u3099"=>"\u3065", "\u3066\u3099"=>"\u3067", "\u3068\u3099"=>"\u3069", "\u306F\u3099"=>"\u3070", "\u306F\u309A"=>"\u3071", "\u3072\u3099"=>"\u3073", + "\u3072\u309A"=>"\u3074", "\u3075\u3099"=>"\u3076", "\u3075\u309A"=>"\u3077", "\u3078\u3099"=>"\u3079", "\u3078\u309A"=>"\u307A", "\u307B\u3099"=>"\u307C", "\u307B\u309A"=>"\u307D", "\u3046\u3099"=>"\u3094", + "\u309D\u3099"=>"\u309E", "\u30AB\u3099"=>"\u30AC", "\u30AD\u3099"=>"\u30AE", "\u30AF\u3099"=>"\u30B0", "\u30B1\u3099"=>"\u30B2", "\u30B3\u3099"=>"\u30B4", "\u30B5\u3099"=>"\u30B6", "\u30B7\u3099"=>"\u30B8", + "\u30B9\u3099"=>"\u30BA", "\u30BB\u3099"=>"\u30BC", "\u30BD\u3099"=>"\u30BE", "\u30BF\u3099"=>"\u30C0", "\u30C1\u3099"=>"\u30C2", "\u30C4\u3099"=>"\u30C5", "\u30C6\u3099"=>"\u30C7", "\u30C8\u3099"=>"\u30C9", + "\u30CF\u3099"=>"\u30D0", "\u30CF\u309A"=>"\u30D1", "\u30D2\u3099"=>"\u30D3", "\u30D2\u309A"=>"\u30D4", "\u30D5\u3099"=>"\u30D6", "\u30D5\u309A"=>"\u30D7", "\u30D8\u3099"=>"\u30D9", "\u30D8\u309A"=>"\u30DA", + "\u30DB\u3099"=>"\u30DC", "\u30DB\u309A"=>"\u30DD", "\u30A6\u3099"=>"\u30F4", "\u30EF\u3099"=>"\u30F7", "\u30F0\u3099"=>"\u30F8", "\u30F1\u3099"=>"\u30F9", "\u30F2\u3099"=>"\u30FA", "\u30FD\u3099"=>"\u30FE", + "\u{11099}\u{110BA}"=>"\u{1109A}", "\u{1109B}\u{110BA}"=>"\u{1109C}", "\u{110A5}\u{110BA}"=>"\u{110AB}", "\u{11131}\u{11127}"=>"\u{1112E}", "\u{11132}\u{11127}"=>"\u{1112F}", "\u{11347}\u{1133E}"=>"\u{1134B}", "\u{11347}\u{11357}"=>"\u{1134C}", "\u{114B9}\u{114BA}"=>"\u{114BB}", + "\u{114B9}\u{114B0}"=>"\u{114BC}", "\u{114B9}\u{114BD}"=>"\u{114BE}", "\u{115B8}\u{115AF}"=>"\u{115BA}", "\u{115B9}\u{115AF}"=>"\u{115BB}", + }.freeze +end + +module UnicodeNormalize + ## Constant for max hash capacity to avoid DoS attack + MAX_HASH_LENGTH = 18000 # enough for all test cases, otherwise tests get slow + + ## Regular Expressions and Hash Constants + REGEXP_D = Regexp.compile(REGEXP_D_STRING, Regexp::EXTENDED) + REGEXP_C = Regexp.compile(REGEXP_C_STRING, Regexp::EXTENDED) + REGEXP_K = Regexp.compile(REGEXP_K_STRING, Regexp::EXTENDED) + NF_HASH_D = Hash.new do |hash, key| + hash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack + hash[key] = nfd_one(key) + end + NF_HASH_C = Hash.new do |hash, key| + hash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack + hash[key] = nfc_one(key) + end + + ## Constants For Hangul + # for details such as the meaning of the identifiers below, please see + # http://www.unicode.org/versions/Unicode7.0.0/ch03.pdf, pp. 144/145 + SBASE = 0xAC00 + LBASE = 0x1100 + VBASE = 0x1161 + TBASE = 0x11A7 + LCOUNT = 19 + VCOUNT = 21 + TCOUNT = 28 + NCOUNT = VCOUNT * TCOUNT + SCOUNT = LCOUNT * NCOUNT + + # Unicode-based encodings (except UTF-8) + UNICODE_ENCODINGS = [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE, + Encoding::GB18030, Encoding::UCS_2BE, Encoding::UCS_4BE] + + ## Hangul Algorithm + def self.hangul_decomp_one(target) + syllable_index = target.ord - SBASE + return target if syllable_index < 0 || syllable_index >= SCOUNT + l = LBASE + syllable_index / NCOUNT + v = VBASE + (syllable_index % NCOUNT) / TCOUNT + t = TBASE + syllable_index % TCOUNT + (t==TBASE ? [l, v] : [l, v, t]).pack('U*') + target[1..-1] + end + + def self.hangul_comp_one(string) + length = string.length + if length>1 and 0 <= (lead =string[0].ord-LBASE) and lead < LCOUNT and + 0 <= (vowel=string[1].ord-VBASE) and vowel < VCOUNT + lead_vowel = SBASE + (lead * VCOUNT + vowel) * TCOUNT + if length>2 and 0 <= (trail=string[2].ord-TBASE) and trail < TCOUNT + (lead_vowel + trail).chr(Encoding::UTF_8) + string[3..-1] + else + lead_vowel.chr(Encoding::UTF_8) + string[2..-1] + end + else + string + end + end + + ## Canonical Ordering + def self.canonical_ordering_one(string) + sorting = string.each_char.collect { |c| [c, CLASS_TABLE[c]] } + (sorting.length-2).downto(0) do |i| # almost, but not exactly bubble sort + (0..i).each do |j| + later_class = sorting[j+1].last + if 0 0 ? "," : "") + alias_method_chain(mod, selector, :potential_path_arguments) do |aliased_target, punctuation| + mod.module_eval <<-end_eval, __FILE__, __LINE__ + 1 + def #{aliased_target}_with_potential_path_arguments#{punctuation}(#{first_args}*files, &block) + files = files.map{|f| Backports.convert_path(f) } + #{aliased_target}_without_potential_path_arguments#{punctuation}(#{first_args}*files, &block) + end + end_eval + end + end + + def self.convert_path(path) + try_convert(path, IO, :to_io) || + begin + path = path.to_path if path.respond_to?(:to_path) + try_convert(path, String, :to_str) || path + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/require_relative_dir.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/require_relative_dir.rb new file mode 100644 index 0000000000..88a0b486d5 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/require_relative_dir.rb @@ -0,0 +1,13 @@ +module Backports + def self.require_relative_dir + dir = caller.first.split(/\.rb:\d/,2).first + short_path = dir[/.*(backports\/.*)/, 1] << '/' + Dir.entries(dir). + map{|f| Regexp.last_match(1) if /^(.*)\.rb$/ =~ f}. + compact. + sort. + each do |f| + require short_path + f + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/std_lib.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/std_lib.rb new file mode 100644 index 0000000000..7a07960514 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/std_lib.rb @@ -0,0 +1,59 @@ +module Backports + module StdLib + class LoadedFeatures + if RUBY_VERSION >= "1.9" + # Full paths are recorded in $LOADED_FEATURES. + @@our_loads = {} + # Check loaded features for one that matches "#{any of the load path}/#{feature}" + def include?(feature) + return true if @@our_loads[feature] + # Assume backported features are Ruby libraries (i.e. not C) + @loaded ||= $LOADED_FEATURES.group_by{|p| File.basename(p, ".rb")} + if fullpaths = @loaded[File.basename(feature, ".rb")] + fullpaths.any?{|fullpath| + base_dir, = fullpath.partition("/#{feature}") + $LOAD_PATH.include?(base_dir) + } + end + end + + def self.mark_as_loaded(feature) + @@our_loads[feature] = true + # Nothing to do, the full path will be OK + end + + else + # Requested features are recorded in $LOADED_FEATURES + def include?(feature) + # Assume backported features are Ruby libraries (i.e. not C) + $LOADED_FEATURES.include?("#{File.basename(feature, '.rb')}.rb") + end + + def self.mark_as_loaded(feature) + $LOADED_FEATURES << "#{File.basename(feature, '.rb')}.rb" + end + end + end + + class << self + attr_accessor :extended_lib + + def extend_relative relative_dir="stdlib" + loaded = Backports::StdLib::LoadedFeatures.new + dir = File.expand_path(relative_dir, File.dirname(caller.first.split(/:\d/,2).first)) + Dir.entries(dir). + map{|f| Regexp.last_match(1) if /^(.*)\.rb$/ =~ f}. + compact. + each do |f| + path = File.expand_path(f, dir) + if loaded.include?(f) + require path + else + @extended_lib[f] << path + end + end + end + end + self.extended_lib ||= Hash.new{|h, k| h[k] = []} + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/suppress_verbose_warnings.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/suppress_verbose_warnings.rb new file mode 100644 index 0000000000..7284d53f29 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/suppress_verbose_warnings.rb @@ -0,0 +1,9 @@ +module Backports + def self.suppress_verbose_warnings + before = $VERBOSE + $VERBOSE = false if $VERBOSE # Set to false (default warning) but not nil (no warnings) + yield + ensure + $VERBOSE = before + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/atomic_reference_cache_backend.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/atomic_reference_cache_backend.rb new file mode 100644 index 0000000000..7e710b5c3e --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/atomic_reference_cache_backend.rb @@ -0,0 +1,908 @@ +module ThreadSafe + # A Ruby port of the Doug Lea's jsr166e.ConcurrentHashMapV8 class version 1.59 + # available in public domain. + # + # Original source code available here: + # http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/ConcurrentHashMapV8.java?revision=1.59 + # + # The Ruby port skips out the +TreeBin+ (red-black trees for use in bins whose + # size exceeds a threshold). + # + # A hash table supporting full concurrency of retrievals and high expected + # concurrency for updates. However, even though all operations are + # thread-safe, retrieval operations do _not_ entail locking, and there is + # _not_ any support for locking the entire table in a way that prevents all + # access. + # + # Retrieval operations generally do not block, so may overlap with update + # operations. Retrievals reflect the results of the most recently _completed_ + # update operations holding upon their onset. (More formally, an update + # operation for a given key bears a _happens-before_ relation with any (non + # +nil+) retrieval for that key reporting the updated value.) For aggregate + # operations such as +clear()+, concurrent retrievals may reflect insertion or + # removal of only some entries. Similarly, the +each_pair+ iterator yields + # elements reflecting the state of the hash table at some point at or since + # the start of the +each_pair+. Bear in mind that the results of aggregate + # status methods including +size()+ and +empty?+} are typically useful only + # when a map is not undergoing concurrent updates in other threads. Otherwise + # the results of these methods reflect transient states that may be adequate + # for monitoring or estimation purposes, but not for program control. + # + # The table is dynamically expanded when there are too many collisions (i.e., + # keys that have distinct hash codes but fall into the same slot modulo the + # table size), with the expected average effect of maintaining roughly two + # bins per mapping (corresponding to a 0.75 load factor threshold for + # resizing). There may be much variance around this average as mappings are + # added and removed, but overall, this maintains a commonly accepted + # time/space tradeoff for hash tables. However, resizing this or any other + # kind of hash table may be a relatively slow operation. When possible, it is + # a good idea to provide a size estimate as an optional :initial_capacity + # initializer argument. An additional optional :load_factor constructor + # argument provides a further means of customizing initial table capacity by + # specifying the table density to be used in calculating the amount of space + # to allocate for the given number of elements. Note that using many keys with + # exactly the same +hash+ is a sure way to slow down performance of any hash + # table. + # + # ## Design overview + # + # The primary design goal of this hash table is to maintain concurrent + # readability (typically method +[]+, but also iteration and related methods) + # while minimizing update contention. Secondary goals are to keep space + # consumption about the same or better than plain +Hash+, and to support high + # initial insertion rates on an empty table by many threads. + # + # Each key-value mapping is held in a +Node+. The validation-based approach + # explained below leads to a lot of code sprawl because retry-control + # precludes factoring into smaller methods. + # + # The table is lazily initialized to a power-of-two size upon the first + # insertion. Each bin in the table normally contains a list of +Node+s (most + # often, the list has only zero or one +Node+). Table accesses require + # volatile/atomic reads, writes, and CASes. The lists of nodes within bins are + # always accurately traversable under volatile reads, so long as lookups check + # hash code and non-nullness of value before checking key equality. + # + # We use the top two bits of +Node+ hash fields for control purposes -- they + # are available anyway because of addressing constraints. As explained further + # below, these top bits are used as follows: + # + # - 00 - Normal + # - 01 - Locked + # - 11 - Locked and may have a thread waiting for lock + # - 10 - +Node+ is a forwarding node + # + # The lower 28 bits of each +Node+'s hash field contain a the key's hash code, + # except for forwarding nodes, for which the lower bits are zero (and so + # always have hash field == +MOVED+). + # + # Insertion (via +[]=+ or its variants) of the first node in an empty bin is + # performed by just CASing it to the bin. This is by far the most common case + # for put operations under most key/hash distributions. Other update + # operations (insert, delete, and replace) require locks. We do not want to + # waste the space required to associate a distinct lock object with each bin, + # so instead use the first node of a bin list itself as a lock. Blocking + # support for these locks relies +Util::CheapLockable. However, we also need a + # +try_lock+ construction, so we overlay these by using bits of the +Node+ + # hash field for lock control (see above), and so normally use builtin + # monitors only for blocking and signalling using + # +cheap_wait+/+cheap_broadcast+ constructions. See +Node#try_await_lock+. + # + # Using the first node of a list as a lock does not by itself suffice though: + # When a node is locked, any update must first validate that it is still the + # first node after locking it, and retry if not. Because new nodes are always + # appended to lists, once a node is first in a bin, it remains first until + # deleted or the bin becomes invalidated (upon resizing). However, operations + # that only conditionally update may inspect nodes until the point of update. + # This is a converse of sorts to the lazy locking technique described by + # Herlihy & Shavit. + # + # The main disadvantage of per-bin locks is that other update operations on + # other nodes in a bin list protected by the same lock can stall, for example + # when user +eql?+ or mapping functions take a long time. However, + # statistically, under random hash codes, this is not a common problem. + # Ideally, the frequency of nodes in bins follows a Poisson distribution + # (http://en.wikipedia.org/wiki/Poisson_distribution) with a parameter of + # about 0.5 on average, given the resizing threshold of 0.75, although with a + # large variance because of resizing granularity. Ignoring variance, the + # expected occurrences of list size k are (exp(-0.5) * pow(0.5, k) / + # factorial(k)). The first values are: + # + # - 0: 0.60653066 + # - 1: 0.30326533 + # - 2: 0.07581633 + # - 3: 0.01263606 + # - 4: 0.00157952 + # - 5: 0.00015795 + # - 6: 0.00001316 + # - 7: 0.00000094 + # - 8: 0.00000006 + # - more: less than 1 in ten million + # + # Lock contention probability for two threads accessing distinct elements is + # roughly 1 / (8 * #elements) under random hashes. + # + # The table is resized when occupancy exceeds a percentage threshold + # (nominally, 0.75, but see below). Only a single thread performs the resize + # (using field +size_control+, to arrange exclusion), but the table otherwise + # remains usable for reads and updates. Resizing proceeds by transferring + # bins, one by one, from the table to the next table. Because we are using + # power-of-two expansion, the elements from each bin must either stay at same + # index, or move with a power of two offset. We eliminate unnecessary node + # creation by catching cases where old nodes can be reused because their next + # fields won't change. On average, only about one-sixth of them need cloning + # when a table doubles. The nodes they replace will be garbage collectable as + # soon as they are no longer referenced by any reader thread that may be in + # the midst of concurrently traversing table. Upon transfer, the old table bin + # contains only a special forwarding node (with hash field +MOVED+) that + # contains the next table as its key. On encountering a forwarding node, + # access and update operations restart, using the new table. + # + # Each bin transfer requires its bin lock. However, unlike other cases, a + # transfer can skip a bin if it fails to acquire its lock, and revisit it + # later. Method +rebuild+ maintains a buffer of TRANSFER_BUFFER_SIZE bins that + # have been skipped because of failure to acquire a lock, and blocks only if + # none are available (i.e., only very rarely). The transfer operation must + # also ensure that all accessible bins in both the old and new table are + # usable by any traversal. When there are no lock acquisition failures, this + # is arranged simply by proceeding from the last bin (+table.size - 1+) up + # towards the first. Upon seeing a forwarding node, traversals arrange to move + # to the new table without revisiting nodes. However, when any node is skipped + # during a transfer, all earlier table bins may have become visible, so are + # initialized with a reverse-forwarding node back to the old table until the + # new ones are established. (This sometimes requires transiently locking a + # forwarding node, which is possible under the above encoding.) These more + # expensive mechanics trigger only when necessary. + # + # The traversal scheme also applies to partial traversals of + # ranges of bins (via an alternate Traverser constructor) + # to support partitioned aggregate operations. Also, read-only + # operations give up if ever forwarded to a null table, which + # provides support for shutdown-style clearing, which is also not + # currently implemented. + # + # Lazy table initialization minimizes footprint until first use. + # + # The element count is maintained using a +ThreadSafe::Util::Adder+, + # which avoids contention on updates but can encounter cache thrashing + # if read too frequently during concurrent access. To avoid reading so + # often, resizing is attempted either when a bin lock is + # contended, or upon adding to a bin already holding two or more + # nodes (checked before adding in the +x_if_absent+ methods, after + # adding in others). Under uniform hash distributions, the + # probability of this occurring at threshold is around 13%, + # meaning that only about 1 in 8 puts check threshold (and after + # resizing, many fewer do so). But this approximation has high + # variance for small table sizes, so we check on any collision + # for sizes <= 64. The bulk putAll operation further reduces + # contention by only committing count updates upon these size + # checks. + class AtomicReferenceCacheBackend + class Table < Util::PowerOfTwoTuple + def cas_new_node(i, hash, key, value) + cas(i, nil, Node.new(hash, key, value)) + end + + def try_to_cas_in_computed(i, hash, key) + succeeded = false + new_value = nil + new_node = Node.new(locked_hash = hash | LOCKED, key, NULL) + if cas(i, nil, new_node) + begin + if NULL == (new_value = yield(NULL)) + was_null = true + else + new_node.value = new_value + end + succeeded = true + ensure + volatile_set(i, nil) if !succeeded || was_null + new_node.unlock_via_hash(locked_hash, hash) + end + end + return succeeded, new_value + end + + def try_lock_via_hash(i, node, node_hash) + node.try_lock_via_hash(node_hash) do + yield if volatile_get(i) == node + end + end + + def delete_node_at(i, node, predecessor_node) + if predecessor_node + predecessor_node.next = node.next + else + volatile_set(i, node.next) + end + end + end + + # Key-value entry. Nodes with a hash field of +MOVED+ are special, and do + # not contain user keys or values. Otherwise, keys are never +nil+, and + # +NULL+ +value+ fields indicate that a node is in the process of being + # deleted or created. For purposes of read-only access, a key may be read + # before a value, but can only be used after checking value to be +!= NULL+. + class Node + extend Util::Volatile + attr_volatile :hash, :value, :next + + include Util::CheapLockable + + bit_shift = Util::FIXNUM_BIT_SIZE - 2 # need 2 bits for ourselves + # Encodings for special uses of Node hash fields. See above for explanation. + MOVED = ('10' << ('0' * bit_shift)).to_i(2) # hash field for forwarding nodes + LOCKED = ('01' << ('0' * bit_shift)).to_i(2) # set/tested only as a bit + WAITING = ('11' << ('0' * bit_shift)).to_i(2) # both bits set/tested together + HASH_BITS = ('00' << ('1' * bit_shift)).to_i(2) # usable bits of normal node hash + + SPIN_LOCK_ATTEMPTS = Util::CPU_COUNT > 1 ? Util::CPU_COUNT * 2 : 0 + + attr_reader :key + + def initialize(hash, key, value, next_node = nil) + super() + @key = key + self.lazy_set_hash(hash) + self.lazy_set_value(value) + self.next = next_node + end + + # Spins a while if +LOCKED+ bit set and this node is the first of its bin, + # and then sets +WAITING+ bits on hash field and blocks (once) if they are + # still set. It is OK for this method to return even if lock is not + # available upon exit, which enables these simple single-wait mechanics. + # + # The corresponding signalling operation is performed within callers: Upon + # detecting that +WAITING+ has been set when unlocking lock (via a failed + # CAS from non-waiting +LOCKED+ state), unlockers acquire the + # +cheap_synchronize+ lock and perform a +cheap_broadcast+. + def try_await_lock(table, i) + if table && i >= 0 && i < table.size # bounds check, TODO: why are we bounds checking? + spins = SPIN_LOCK_ATTEMPTS + randomizer = base_randomizer = Util::XorShiftRandom.get + while equal?(table.volatile_get(i)) && self.class.locked_hash?(my_hash = hash) + if spins >= 0 + if (randomizer = (randomizer >> 1)).even? # spin at random + if (spins -= 1) == 0 + Thread.pass # yield before blocking + else + randomizer = base_randomizer = Util::XorShiftRandom.xorshift(base_randomizer) if randomizer.zero? + end + end + elsif cas_hash(my_hash, my_hash | WAITING) + force_aquire_lock(table, i) + break + end + end + end + end + + def key?(key) + @key.eql?(key) + end + + def matches?(key, hash) + pure_hash == hash && key?(key) + end + + def pure_hash + hash & HASH_BITS + end + + def try_lock_via_hash(node_hash = hash) + if cas_hash(node_hash, locked_hash = node_hash | LOCKED) + begin + yield + ensure + unlock_via_hash(locked_hash, node_hash) + end + end + end + + def locked? + self.class.locked_hash?(hash) + end + + def unlock_via_hash(locked_hash, node_hash) + unless cas_hash(locked_hash, node_hash) + self.hash = node_hash + cheap_synchronize { cheap_broadcast } + end + end + + private + def force_aquire_lock(table, i) + cheap_synchronize do + if equal?(table.volatile_get(i)) && (hash & WAITING) == WAITING + cheap_wait + else + cheap_broadcast # possibly won race vs signaller + end + end + end + + class << self + def locked_hash?(hash) + (hash & LOCKED) != 0 + end + end + end + + # shorthands + MOVED = Node::MOVED + LOCKED = Node::LOCKED + WAITING = Node::WAITING + HASH_BITS = Node::HASH_BITS + + NOW_RESIZING = -1 + DEFAULT_CAPACITY = 16 + MAX_CAPACITY = Util::MAX_INT + + # The buffer size for skipped bins during transfers. The + # value is arbitrary but should be large enough to avoid + # most locking stalls during resizes. + TRANSFER_BUFFER_SIZE = 32 + + extend Util::Volatile + attr_volatile :table, # The array of bins. Lazily initialized upon first insertion. Size is always a power of two. + + # Table initialization and resizing control. When negative, the + # table is being initialized or resized. Otherwise, when table is + # null, holds the initial table size to use upon creation, or 0 + # for default. After initialization, holds the next element count + # value upon which to resize the table. + :size_control + + def initialize(options = nil) + super() + @counter = Util::Adder.new + initial_capacity = options && options[:initial_capacity] || DEFAULT_CAPACITY + self.size_control = (capacity = table_size_for(initial_capacity)) > MAX_CAPACITY ? MAX_CAPACITY : capacity + end + + def get_or_default(key, else_value = nil) + hash = key_hash(key) + current_table = table + while current_table + node = current_table.volatile_get_by_hash(hash) + current_table = + while node + if (node_hash = node.hash) == MOVED + break node.key + elsif (node_hash & HASH_BITS) == hash && node.key?(key) && NULL != (value = node.value) + return value + end + node = node.next + end + end + else_value + end + + def [](key) + get_or_default(key) + end + + def key?(key) + get_or_default(key, NULL) != NULL + end + + def []=(key, value) + get_and_set(key, value) + value + end + + def compute_if_absent(key) + hash = key_hash(key) + current_table = table || initialize_table + while true + if !(node = current_table.volatile_get(i = current_table.hash_to_index(hash))) + succeeded, new_value = current_table.try_to_cas_in_computed(i, hash, key) { yield } + if succeeded + increment_size + return new_value + end + elsif (node_hash = node.hash) == MOVED + current_table = node.key + elsif NULL != (current_value = find_value_in_node_list(node, key, hash, node_hash & HASH_BITS)) + return current_value + elsif Node.locked_hash?(node_hash) + try_await_lock(current_table, i, node) + else + succeeded, value = attempt_internal_compute_if_absent(key, hash, current_table, i, node, node_hash) { yield } + return value if succeeded + end + end + end + + def compute_if_present(key) + new_value = nil + internal_replace(key) do |old_value| + if (new_value = yield(NULL == old_value ? nil : old_value)).nil? + NULL + else + new_value + end + end + new_value + end + + def compute(key) + internal_compute(key) do |old_value| + if (new_value = yield(NULL == old_value ? nil : old_value)).nil? + NULL + else + new_value + end + end + end + + def merge_pair(key, value) + internal_compute(key) do |old_value| + if NULL == old_value || !(value = yield(old_value)).nil? + value + else + NULL + end + end + end + + def replace_pair(key, old_value, new_value) + NULL != internal_replace(key, old_value) { new_value } + end + + def replace_if_exists(key, new_value) + if (result = internal_replace(key) { new_value }) && NULL != result + result + end + end + + def get_and_set(key, value) # internalPut in the original CHMV8 + hash = key_hash(key) + current_table = table || initialize_table + while true + if !(node = current_table.volatile_get(i = current_table.hash_to_index(hash))) + if current_table.cas_new_node(i, hash, key, value) + increment_size + break + end + elsif (node_hash = node.hash) == MOVED + current_table = node.key + elsif Node.locked_hash?(node_hash) + try_await_lock(current_table, i, node) + else + succeeded, old_value = attempt_get_and_set(key, value, hash, current_table, i, node, node_hash) + break old_value if succeeded + end + end + end + + def delete(key) + replace_if_exists(key, NULL) + end + + def delete_pair(key, value) + result = internal_replace(key, value) { NULL } + if result && NULL != result + !!result + else + false + end + end + + def each_pair + return self unless current_table = table + current_table_size = base_size = current_table.size + i = base_index = 0 + while base_index < base_size + if node = current_table.volatile_get(i) + if node.hash == MOVED + current_table = node.key + current_table_size = current_table.size + else + begin + if NULL != (value = node.value) # skip deleted or special nodes + yield node.key, value + end + end while node = node.next + end + end + + if (i_with_base = i + base_size) < current_table_size + i = i_with_base # visit upper slots if present + else + i = base_index += 1 + end + end + self + end + + def size + (sum = @counter.sum) < 0 ? 0 : sum # ignore transient negative values + end + + def empty? + size == 0 + end + + # Implementation for clear. Steps through each bin, removing all nodes. + def clear + return self unless current_table = table + current_table_size = current_table.size + deleted_count = i = 0 + while i < current_table_size + if !(node = current_table.volatile_get(i)) + i += 1 + elsif (node_hash = node.hash) == MOVED + current_table = node.key + current_table_size = current_table.size + elsif Node.locked_hash?(node_hash) + decrement_size(deleted_count) # opportunistically update count + deleted_count = 0 + node.try_await_lock(current_table, i) + else + current_table.try_lock_via_hash(i, node, node_hash) do + begin + deleted_count += 1 if NULL != node.value # recheck under lock + node.value = nil + end while node = node.next + current_table.volatile_set(i, nil) + i += 1 + end + end + end + decrement_size(deleted_count) + self + end + + private + # Internal versions of the insertion methods, each a + # little more complicated than the last. All have + # the same basic structure: + # 1. If table uninitialized, create + # 2. If bin empty, try to CAS new node + # 3. If bin stale, use new table + # 4. Lock and validate; if valid, scan and add or update + # + # The others interweave other checks and/or alternative actions: + # * Plain +get_and_set+ checks for and performs resize after insertion. + # * compute_if_absent prescans for mapping without lock (and fails to add + # if present), which also makes pre-emptive resize checks worthwhile. + # + # Someday when details settle down a bit more, it might be worth + # some factoring to reduce sprawl. + def internal_replace(key, expected_old_value = NULL, &block) + hash = key_hash(key) + current_table = table + while current_table + if !(node = current_table.volatile_get(i = current_table.hash_to_index(hash))) + break + elsif (node_hash = node.hash) == MOVED + current_table = node.key + elsif (node_hash & HASH_BITS) != hash && !node.next # precheck + break # rules out possible existence + elsif Node.locked_hash?(node_hash) + try_await_lock(current_table, i, node) + else + succeeded, old_value = attempt_internal_replace(key, expected_old_value, hash, current_table, i, node, node_hash, &block) + return old_value if succeeded + end + end + NULL + end + + def attempt_internal_replace(key, expected_old_value, hash, current_table, i, node, node_hash) + current_table.try_lock_via_hash(i, node, node_hash) do + predecessor_node = nil + old_value = NULL + begin + if node.matches?(key, hash) && NULL != (current_value = node.value) + if NULL == expected_old_value || expected_old_value == current_value # NULL == expected_old_value means whatever value + old_value = current_value + if NULL == (node.value = yield(old_value)) + current_table.delete_node_at(i, node, predecessor_node) + decrement_size + end + end + break + end + + predecessor_node = node + end while node = node.next + + return true, old_value + end + end + + def find_value_in_node_list(node, key, hash, pure_hash) + do_check_for_resize = false + while true + if pure_hash == hash && node.key?(key) && NULL != (value = node.value) + return value + elsif node = node.next + do_check_for_resize = true # at least 2 nodes -> check for resize + pure_hash = node.pure_hash + else + return NULL + end + end + ensure + check_for_resize if do_check_for_resize + end + + def internal_compute(key, &block) + hash = key_hash(key) + current_table = table || initialize_table + while true + if !(node = current_table.volatile_get(i = current_table.hash_to_index(hash))) + succeeded, new_value = current_table.try_to_cas_in_computed(i, hash, key, &block) + if succeeded + if NULL == new_value + break nil + else + increment_size + break new_value + end + end + elsif (node_hash = node.hash) == MOVED + current_table = node.key + elsif Node.locked_hash?(node_hash) + try_await_lock(current_table, i, node) + else + succeeded, new_value = attempt_compute(key, hash, current_table, i, node, node_hash, &block) + break new_value if succeeded + end + end + end + + def attempt_internal_compute_if_absent(key, hash, current_table, i, node, node_hash) + added = false + current_table.try_lock_via_hash(i, node, node_hash) do + while true + if node.matches?(key, hash) && NULL != (value = node.value) + return true, value + end + last = node + unless node = node.next + last.next = Node.new(hash, key, value = yield) + added = true + increment_size + return true, value + end + end + end + ensure + check_for_resize if added + end + + def attempt_compute(key, hash, current_table, i, node, node_hash) + added = false + current_table.try_lock_via_hash(i, node, node_hash) do + predecessor_node = nil + while true + if node.matches?(key, hash) && NULL != (value = node.value) + if NULL == (node.value = value = yield(value)) + current_table.delete_node_at(i, node, predecessor_node) + decrement_size + value = nil + end + return true, value + end + predecessor_node = node + unless node = node.next + if NULL == (value = yield(NULL)) + value = nil + else + predecessor_node.next = Node.new(hash, key, value) + added = true + increment_size + end + return true, value + end + end + end + ensure + check_for_resize if added + end + + def attempt_get_and_set(key, value, hash, current_table, i, node, node_hash) + node_nesting = nil + current_table.try_lock_via_hash(i, node, node_hash) do + node_nesting = 1 + old_value = nil + found_old_value = false + while node + if node.matches?(key, hash) && NULL != (old_value = node.value) + found_old_value = true + node.value = value + break + end + last = node + unless node = node.next + last.next = Node.new(hash, key, value) + break + end + node_nesting += 1 + end + + return true, old_value if found_old_value + increment_size + true + end + ensure + check_for_resize if node_nesting && (node_nesting > 1 || current_table.size <= 64) + end + + def initialize_copy(other) + super + @counter = Util::Adder.new + self.table = nil + self.size_control = (other_table = other.table) ? other_table.size : DEFAULT_CAPACITY + self + end + + def try_await_lock(current_table, i, node) + check_for_resize # try resizing if can't get lock + node.try_await_lock(current_table, i) + end + + def key_hash(key) + key.hash & HASH_BITS + end + + # Returns a power of two table size for the given desired capacity. + def table_size_for(entry_count) + size = 2 + size <<= 1 while size < entry_count + size + end + + # Initializes table, using the size recorded in +size_control+. + def initialize_table + until current_table ||= table + if (size_ctrl = size_control) == NOW_RESIZING + Thread.pass # lost initialization race; just spin + else + try_in_resize_lock(current_table, size_ctrl) do + initial_size = size_ctrl > 0 ? size_ctrl : DEFAULT_CAPACITY + current_table = self.table = Table.new(initial_size) + initial_size - (initial_size >> 2) # 75% load factor + end + end + end + current_table + end + + # If table is too small and not already resizing, creates next table and + # transfers bins. Rechecks occupancy after a transfer to see if another + # resize is already needed because resizings are lagging additions. + def check_for_resize + while (current_table = table) && MAX_CAPACITY > (table_size = current_table.size) && NOW_RESIZING != (size_ctrl = size_control) && size_ctrl < @counter.sum + try_in_resize_lock(current_table, size_ctrl) do + self.table = rebuild(current_table) + (table_size << 1) - (table_size >> 1) # 75% load factor + end + end + end + + def try_in_resize_lock(current_table, size_ctrl) + if cas_size_control(size_ctrl, NOW_RESIZING) + begin + if current_table == table # recheck under lock + size_ctrl = yield # get new size_control + end + ensure + self.size_control = size_ctrl + end + end + end + + # Moves and/or copies the nodes in each bin to new table. See above for explanation. + def rebuild(table) + old_table_size = table.size + new_table = table.next_in_size_table + # puts "#{old_table_size} -> #{new_table.size}" + forwarder = Node.new(MOVED, new_table, NULL) + rev_forwarder = nil + locked_indexes = nil # holds bins to revisit; nil until needed + locked_arr_idx = 0 + bin = old_table_size - 1 + i = bin + while true + if !(node = table.volatile_get(i)) + # no lock needed (or available) if bin >= 0, because we're not popping values from locked_indexes until we've run through the whole table + redo unless (bin >= 0 ? table.cas(i, nil, forwarder) : lock_and_clean_up_reverse_forwarders(table, old_table_size, new_table, i, forwarder)) + elsif Node.locked_hash?(node_hash = node.hash) + locked_indexes ||= Array.new + if bin < 0 && locked_arr_idx > 0 + locked_arr_idx -= 1 + i, locked_indexes[locked_arr_idx] = locked_indexes[locked_arr_idx], i # swap with another bin + redo + end + if bin < 0 || locked_indexes.size >= TRANSFER_BUFFER_SIZE + node.try_await_lock(table, i) # no other options -- block + redo + end + rev_forwarder ||= Node.new(MOVED, table, NULL) + redo unless table.volatile_get(i) == node && node.locked? # recheck before adding to list + locked_indexes << i + new_table.volatile_set(i, rev_forwarder) + new_table.volatile_set(i + old_table_size, rev_forwarder) + else + redo unless split_old_bin(table, new_table, i, node, node_hash, forwarder) + end + + if bin > 0 + i = (bin -= 1) + elsif locked_indexes && !locked_indexes.empty? + bin = -1 + i = locked_indexes.pop + locked_arr_idx = locked_indexes.size - 1 + else + return new_table + end + end + end + + def lock_and_clean_up_reverse_forwarders(old_table, old_table_size, new_table, i, forwarder) + # transiently use a locked forwarding node + locked_forwarder = Node.new(moved_locked_hash = MOVED | LOCKED, new_table, NULL) + if old_table.cas(i, nil, locked_forwarder) + new_table.volatile_set(i, nil) # kill the potential reverse forwarders + new_table.volatile_set(i + old_table_size, nil) # kill the potential reverse forwarders + old_table.volatile_set(i, forwarder) + locked_forwarder.unlock_via_hash(moved_locked_hash, MOVED) + true + end + end + + # Splits a normal bin with list headed by e into lo and hi parts; installs in given table. + def split_old_bin(table, new_table, i, node, node_hash, forwarder) + table.try_lock_via_hash(i, node, node_hash) do + split_bin(new_table, i, node, node_hash) + table.volatile_set(i, forwarder) + end + end + + def split_bin(new_table, i, node, node_hash) + bit = new_table.size >> 1 # bit to split on + run_bit = node_hash & bit + last_run = nil + low = nil + high = nil + current_node = node + # this optimises for the lowest amount of volatile writes and objects created + while current_node = current_node.next + unless (b = current_node.hash & bit) == run_bit + run_bit = b + last_run = current_node + end + end + if run_bit == 0 + low = last_run + else + high = last_run + end + current_node = node + until current_node == last_run + pure_hash = current_node.pure_hash + if (pure_hash & bit) == 0 + low = Node.new(pure_hash, current_node.key, current_node.value, low) + else + high = Node.new(pure_hash, current_node.key, current_node.value, high) + end + current_node = current_node.next + end + new_table.volatile_set(i, low) + new_table.volatile_set(i + bit, high) + end + + def increment_size + @counter.increment + end + + def decrement_size(by = 1) + @counter.add(-by) + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/synchronized_cache_backend.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/synchronized_cache_backend.rb new file mode 100644 index 0000000000..2af3b8cf78 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/synchronized_cache_backend.rb @@ -0,0 +1,77 @@ +module ThreadSafe + class SynchronizedCacheBackend < NonConcurrentCacheBackend + require 'mutex_m' + include Mutex_m + # WARNING: Mutex_m is a non-reentrant lock, so the synchronized methods are + # not allowed to call each other. + + def [](key) + synchronize { super } + end + + def []=(key, value) + synchronize { super } + end + + def compute_if_absent(key) + synchronize { super } + end + + def compute_if_present(key) + synchronize { super } + end + + def compute(key) + synchronize { super } + end + + def merge_pair(key, value) + synchronize { super } + end + + def replace_pair(key, old_value, new_value) + synchronize { super } + end + + def replace_if_exists(key, new_value) + synchronize { super } + end + + def get_and_set(key, value) + synchronize { super } + end + + def key?(key) + synchronize { super } + end + + def value?(value) + synchronize { super } + end + + def delete(key) + synchronize { super } + end + + def delete_pair(key, value) + synchronize { super } + end + + def clear + synchronize { super } + end + + def size + synchronize { super } + end + + def get_or_default(key, default_value) + synchronize { super } + end + + private + def dupped_backend + synchronize { super } + end + end +end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util.rb new file mode 100644 index 0000000000..bad423889f --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/thread_safe-0.3.6/lib/thread_safe/util.rb @@ -0,0 +1,16 @@ +module ThreadSafe + module Util + FIXNUM_BIT_SIZE = (0.size * 8) - 2 + MAX_INT = (2 ** FIXNUM_BIT_SIZE) - 1 + CPU_COUNT = 16 # is there a way to determine this? + + autoload :AtomicReference, 'thread_safe/util/atomic_reference' + autoload :Adder, 'thread_safe/util/adder' + autoload :CheapLockable, 'thread_safe/util/cheap_lockable' + autoload :PowerOfTwoTuple, 'thread_safe/util/power_of_two_tuple' + autoload :Striped64, 'thread_safe/util/striped64' + autoload :Volatile, 'thread_safe/util/volatile' + autoload :VolatileTuple, 'thread_safe/util/volatile_tuple' + autoload :XorShiftRandom, 'thread_safe/util/xor_shift_random' + end +end